From 1b8c57baf2ffc63261fcefb46d47fb68ab193ce8 Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Fri, 13 Aug 2021 09:09:43 +0000 Subject: [PATCH 01/62] Porting DRAMsim3 & Adding cpu_axi_diff demo --- .gitignore | 7 +- .gitmodules | 11 +- NEMU | 1 - README.md | 207 ++- build.sh | 80 +- difftest | 1 - libraries/DRAMsim3 | 1 + libraries/NEMU/.gitignore | 12 + libraries/NEMU/Kconfig | 286 ++++ libraries/NEMU/Makefile | 148 ++ libraries/NEMU/README.md | 46 + libraries/NEMU/configs/.gitignore | 1 + libraries/NEMU/configs/riscv32-pa_defconfig | 4 + libraries/NEMU/configs/riscv64-pa_defconfig | 5 + libraries/NEMU/configs/riscv64-rvv_defconfig | 99 ++ .../NEMU/configs/riscv64-xs-ref_defconfig | 86 + libraries/NEMU/configs/riscv64-xs_defconfig | 113 ++ libraries/NEMU/include/common.h | 30 + libraries/NEMU/include/cpu/cpu.h | 28 + libraries/NEMU/include/cpu/decode.h | 167 ++ libraries/NEMU/include/cpu/difftest.h | 37 + libraries/NEMU/include/cpu/exec.h | 29 + libraries/NEMU/include/cpu/ifetch.h | 23 + libraries/NEMU/include/debug.h | 31 + libraries/NEMU/include/device/alarm.h | 7 + libraries/NEMU/include/device/map.h | 41 + libraries/NEMU/include/device/mmio.h | 9 + libraries/NEMU/include/isa.h | 57 + libraries/NEMU/include/macro.h | 88 + libraries/NEMU/include/memory/host-tlb.h | 12 + libraries/NEMU/include/memory/host.h | 26 + libraries/NEMU/include/memory/paddr.h | 53 + libraries/NEMU/include/memory/vaddr.h | 19 + libraries/NEMU/include/rtl/fp.h | 61 + libraries/NEMU/include/rtl/pseudo.h | 101 ++ libraries/NEMU/include/rtl/rtl.h | 61 + libraries/NEMU/include/utils.h | 52 + libraries/NEMU/lib-include/difftest.h | 35 + libraries/NEMU/resource/bbl/Makefile | 45 + libraries/NEMU/resource/bbl/src/atomic.h | 78 + libraries/NEMU/resource/bbl/src/bits.h | 37 + .../resource/bbl/src/disabled_hart_mask.h | 6 + libraries/NEMU/resource/bbl/src/emulation.c | 294 ++++ libraries/NEMU/resource/bbl/src/emulation.h | 53 + libraries/NEMU/resource/bbl/src/encoding.h | 1471 +++++++++++++++++ .../NEMU/resource/bbl/src/flush_icache.c | 5 + libraries/NEMU/resource/bbl/src/mcall.h | 16 + libraries/NEMU/resource/bbl/src/mentry.S | 292 ++++ .../NEMU/resource/bbl/src/misaligned_ldst.c | 141 ++ libraries/NEMU/resource/bbl/src/mtrap.c | 197 +++ libraries/NEMU/resource/bbl/src/mtrap.h | 102 ++ .../NEMU/resource/bbl/src/muldiv_emulation.c | 66 + libraries/NEMU/resource/bbl/src/pk.h | 110 ++ libraries/NEMU/resource/bbl/src/snprintf.c | 111 ++ .../resource/bbl/src/unprivileged_memory.h | 108 ++ libraries/NEMU/resource/bbl/src/vm.h | 37 + libraries/NEMU/resource/debian/README.md | 158 ++ libraries/NEMU/resource/mips-elf/README.md | 1 + libraries/NEMU/resource/sdcard/README.md | 58 + libraries/NEMU/resource/sdcard/nemu.c | 542 ++++++ libraries/NEMU/resource/softfloat/.gitignore | 1 + libraries/NEMU/scripts/build.mk | 50 + libraries/NEMU/scripts/config.mk | 55 + libraries/NEMU/scripts/git.mk | 21 + libraries/NEMU/scripts/isa.mk | 7 + libraries/NEMU/scripts/runall.sh | 41 + libraries/NEMU/src/cpu/cpu-exec.c | 324 ++++ libraries/NEMU/src/cpu/difftest/dut.c | 161 ++ libraries/NEMU/src/cpu/difftest/ref.c | 84 + libraries/NEMU/src/cpu/tcache.c | 246 +++ libraries/NEMU/src/device/Kconfig | 174 ++ libraries/NEMU/src/device/alarm.c | 37 + libraries/NEMU/src/device/audio.c | 72 + libraries/NEMU/src/device/device.c | 70 + libraries/NEMU/src/device/disk.c | 45 + libraries/NEMU/src/device/intr.c | 7 + libraries/NEMU/src/device/io/map.c | 44 + libraries/NEMU/src/device/io/mmio.c | 34 + libraries/NEMU/src/device/io/port-io.c | 42 + libraries/NEMU/src/device/keyboard.c | 65 + libraries/NEMU/src/device/mmc.h | 439 +++++ libraries/NEMU/src/device/sdcard.c | 121 ++ libraries/NEMU/src/device/serial.c | 132 ++ libraries/NEMU/src/device/timer.c | 28 + libraries/NEMU/src/device/uartlite.c | 126 ++ libraries/NEMU/src/device/vga.c | 60 + libraries/NEMU/src/engine/interpreter/c_op.h | 63 + libraries/NEMU/src/engine/interpreter/fp.c | 116 ++ .../NEMU/src/engine/interpreter/host-fp.h | 100 ++ .../NEMU/src/engine/interpreter/hostcall.c | 60 + libraries/NEMU/src/engine/interpreter/init.c | 10 + .../NEMU/src/engine/interpreter/rtl-basic.h | 163 ++ .../NEMU/src/engine/interpreter/rtl-fp.h | 296 ++++ .../src/engine/interpreter/softfloat-fp.h | 143 ++ libraries/NEMU/src/isa/mips32/difftest/dut.c | 28 + libraries/NEMU/src/isa/mips32/difftest/ref.c | 12 + .../src/isa/mips32/include/isa-all-instr.h | 18 + .../NEMU/src/isa/mips32/include/isa-def.h | 87 + .../NEMU/src/isa/mips32/include/isa-exec.h | 6 + libraries/NEMU/src/isa/mips32/init.c | 31 + libraries/NEMU/src/isa/mips32/instr/compute.h | 108 ++ libraries/NEMU/src/isa/mips32/instr/control.h | 59 + libraries/NEMU/src/isa/mips32/instr/decode.c | 214 +++ libraries/NEMU/src/isa/mips32/instr/ldst.h | 159 ++ libraries/NEMU/src/isa/mips32/instr/muldiv.h | 39 + libraries/NEMU/src/isa/mips32/instr/special.h | 11 + libraries/NEMU/src/isa/mips32/instr/system.h | 30 + .../NEMU/src/isa/mips32/local-include/intr.h | 15 + .../NEMU/src/isa/mips32/local-include/reg.h | 27 + .../NEMU/src/isa/mips32/local-include/rtl.h | 19 + libraries/NEMU/src/isa/mips32/logo.c | 63 + libraries/NEMU/src/isa/mips32/reg.c | 51 + libraries/NEMU/src/isa/mips32/system/intr.c | 37 + libraries/NEMU/src/isa/mips32/system/mmu.c | 110 ++ libraries/NEMU/src/isa/mips32/system/priv.c | 59 + libraries/NEMU/src/isa/riscv32/difftest/dut.c | 24 + libraries/NEMU/src/isa/riscv32/difftest/ref.c | 12 + .../src/isa/riscv32/include/isa-all-instr.h | 28 + .../NEMU/src/isa/riscv32/include/isa-def.h | 115 ++ .../NEMU/src/isa/riscv32/include/isa-exec.h | 8 + libraries/NEMU/src/isa/riscv32/init.c | 30 + .../NEMU/src/isa/riscv32/instr/compress.h | 96 ++ .../NEMU/src/isa/riscv32/instr/compute.h | 86 + .../NEMU/src/isa/riscv32/instr/control.h | 39 + libraries/NEMU/src/isa/riscv32/instr/decode.c | 271 +++ libraries/NEMU/src/isa/riscv32/instr/ldst.h | 27 + libraries/NEMU/src/isa/riscv32/instr/muldiv.h | 50 + libraries/NEMU/src/isa/riscv32/instr/pseudo.h | 67 + .../NEMU/src/isa/riscv32/instr/special.h | 11 + libraries/NEMU/src/isa/riscv32/instr/system.h | 38 + .../NEMU/src/isa/riscv32/local-include/intr.h | 8 + .../NEMU/src/isa/riscv32/local-include/reg.h | 19 + .../NEMU/src/isa/riscv32/local-include/rtl.h | 9 + libraries/NEMU/src/isa/riscv32/logo.c | 48 + libraries/NEMU/src/isa/riscv32/reg.c | 40 + libraries/NEMU/src/isa/riscv32/system/intr.c | 31 + libraries/NEMU/src/isa/riscv32/system/mmu.c | 90 + libraries/NEMU/src/isa/riscv32/system/priv.c | 48 + libraries/NEMU/src/isa/riscv64/Kconfig | 9 + libraries/NEMU/src/isa/riscv64/clint.c | 39 + libraries/NEMU/src/isa/riscv64/difftest/dut.c | 23 + libraries/NEMU/src/isa/riscv64/difftest/ref.c | 110 ++ .../src/isa/riscv64/include/isa-all-instr.h | 118 ++ .../NEMU/src/isa/riscv64/include/isa-def.h | 189 +++ .../NEMU/src/isa/riscv64/include/isa-exec.h | 12 + libraries/NEMU/src/isa/riscv64/init.c | 40 + libraries/NEMU/src/isa/riscv64/instr/decode.c | 107 ++ libraries/NEMU/src/isa/riscv64/instr/fp.c | 56 + .../NEMU/src/isa/riscv64/instr/priv/decode.h | 22 + .../NEMU/src/isa/riscv64/instr/priv/exec.h | 17 + .../NEMU/src/isa/riscv64/instr/priv/system.c | 36 + libraries/NEMU/src/isa/riscv64/instr/pseudo.h | 73 + libraries/NEMU/src/isa/riscv64/instr/rocc.h | 6 + .../NEMU/src/isa/riscv64/instr/rva/amo.c | 57 + .../NEMU/src/isa/riscv64/instr/rva/decode.h | 29 + .../NEMU/src/isa/riscv64/instr/rva/exec.h | 25 + .../NEMU/src/isa/riscv64/instr/rvc/decode.h | 388 +++++ .../NEMU/src/isa/riscv64/instr/rvc/exec.h | 102 ++ .../NEMU/src/isa/riscv64/instr/rvd/decode.h | 41 + .../NEMU/src/isa/riscv64/instr/rvd/exec.h | 154 ++ .../NEMU/src/isa/riscv64/instr/rvf/decode.h | 217 +++ .../NEMU/src/isa/riscv64/instr/rvf/exec.h | 161 ++ .../NEMU/src/isa/riscv64/instr/rvi/compute.h | 119 ++ .../NEMU/src/isa/riscv64/instr/rvi/control.h | 36 + .../NEMU/src/isa/riscv64/instr/rvi/decode.h | 215 +++ .../NEMU/src/isa/riscv64/instr/rvi/exec.h | 4 + .../NEMU/src/isa/riscv64/instr/rvi/fence.h | 9 + .../NEMU/src/isa/riscv64/instr/rvi/ldst.h | 20 + .../NEMU/src/isa/riscv64/instr/rvm/decode.h | 20 + .../NEMU/src/isa/riscv64/instr/rvm/exec.h | 140 ++ .../NEMU/src/isa/riscv64/instr/rvv/decode.h | 175 ++ .../NEMU/src/isa/riscv64/instr/rvv/exec.h | 3 + .../NEMU/src/isa/riscv64/instr/rvv/vcfg.h | 37 + .../NEMU/src/isa/riscv64/instr/rvv/vcompute.h | 532 ++++++ .../src/isa/riscv64/instr/rvv/vcompute_impl.c | 254 +++ .../src/isa/riscv64/instr/rvv/vcompute_impl.h | 52 + .../NEMU/src/isa/riscv64/instr/rvv/vldst.h | 255 +++ .../src/isa/riscv64/instr/rvv/vldst_impl.c | 119 ++ .../src/isa/riscv64/instr/rvv/vldst_impl.h | 33 + .../NEMU/src/isa/riscv64/instr/rvv/vreg.h | 63 + .../src/isa/riscv64/instr/rvv/vreg_impl.c | 106 ++ .../NEMU/src/isa/riscv64/instr/special.h | 18 + libraries/NEMU/src/isa/riscv64/instr/vp.c | 15 + .../NEMU/src/isa/riscv64/local-include/csr.h | 300 ++++ .../NEMU/src/isa/riscv64/local-include/intr.h | 33 + .../NEMU/src/isa/riscv64/local-include/reg.h | 28 + .../NEMU/src/isa/riscv64/local-include/rtl.h | 45 + .../NEMU/src/isa/riscv64/local-include/vreg.h | 57 + libraries/NEMU/src/isa/riscv64/logo.c | 48 + libraries/NEMU/src/isa/riscv64/reg.c | 72 + libraries/NEMU/src/isa/riscv64/system/intr.c | 78 + libraries/NEMU/src/isa/riscv64/system/mmu.c | 266 +++ libraries/NEMU/src/isa/riscv64/system/priv.c | 217 +++ libraries/NEMU/src/isa/x86/Kconfig | 18 + libraries/NEMU/src/isa/x86/device/i8237a.c | 14 + libraries/NEMU/src/isa/x86/device/i8253.c | 13 + libraries/NEMU/src/isa/x86/device/i8259a.c | 15 + libraries/NEMU/src/isa/x86/device/ioport80.c | 14 + .../NEMU/src/isa/x86/device/mc146818rtc.c | 13 + libraries/NEMU/src/isa/x86/difftest/dut.c | 61 + libraries/NEMU/src/isa/x86/difftest/ref.c | 12 + libraries/NEMU/src/isa/x86/exec/all-instr.h | 17 + libraries/NEMU/src/isa/x86/exec/exec.c | 476 ++++++ libraries/NEMU/src/isa/x86/exec/fp.h | 456 +++++ .../NEMU/src/isa/x86/include/isa-all-instr.h | 38 + libraries/NEMU/src/isa/x86/include/isa-def.h | 171 ++ libraries/NEMU/src/isa/x86/include/isa-exec.h | 11 + libraries/NEMU/src/isa/x86/init.c | 51 + libraries/NEMU/src/isa/x86/instr/arith.h | 456 +++++ libraries/NEMU/src/isa/x86/instr/bit.h | 113 ++ libraries/NEMU/src/isa/x86/instr/cc.h | 84 + libraries/NEMU/src/isa/x86/instr/control.h | 89 + libraries/NEMU/src/isa/x86/instr/data-mov.h | 161 ++ libraries/NEMU/src/isa/x86/instr/decode.c | 864 ++++++++++ libraries/NEMU/src/isa/x86/instr/eflags.c | 69 + libraries/NEMU/src/isa/x86/instr/eflags.h | 60 + libraries/NEMU/src/isa/x86/instr/fp.c | 12 + libraries/NEMU/src/isa/x86/instr/lazycc.h | 312 ++++ libraries/NEMU/src/isa/x86/instr/logic.h | 327 ++++ libraries/NEMU/src/isa/x86/instr/misc.h | 36 + libraries/NEMU/src/isa/x86/instr/rt.h | 60 + libraries/NEMU/src/isa/x86/instr/special.h | 13 + libraries/NEMU/src/isa/x86/instr/string.h | 122 ++ libraries/NEMU/src/isa/x86/instr/system.h | 117 ++ libraries/NEMU/src/isa/x86/instr/vector.h | 70 + libraries/NEMU/src/isa/x86/kvm/kvm.c | 224 +++ .../NEMU/src/isa/x86/local-include/intr.h | 19 + .../NEMU/src/isa/x86/local-include/reg.h | 37 + .../NEMU/src/isa/x86/local-include/rtl.h | 193 +++ libraries/NEMU/src/isa/x86/logo.c | 43 + libraries/NEMU/src/isa/x86/reg.c | 85 + libraries/NEMU/src/isa/x86/system/intr.c | 101 ++ libraries/NEMU/src/isa/x86/system/mmu.c | 114 ++ libraries/NEMU/src/isa/x86/system/priv.c | 117 ++ libraries/NEMU/src/memory/Kconfig | 35 + libraries/NEMU/src/memory/host-tlb.c | 89 + libraries/NEMU/src/memory/paddr.c | 146 ++ libraries/NEMU/src/memory/vaddr.c | 109 ++ libraries/NEMU/src/monitor/aligncheck.c | 63 + libraries/NEMU/src/monitor/monitor.c | 195 +++ libraries/NEMU/src/monitor/ui.c | 297 ++++ libraries/NEMU/src/monitor/watchpoint.c | 108 ++ libraries/NEMU/src/nemu-main.c | 16 + libraries/NEMU/src/user/init/riscv64.c | 12 + libraries/NEMU/src/user/init/x86.c | 15 + libraries/NEMU/src/user/loader.c | 157 ++ libraries/NEMU/src/user/memory.c | 169 ++ libraries/NEMU/src/user/syscall-riscv64.h | 77 + libraries/NEMU/src/user/syscall-x86.h | 220 +++ libraries/NEMU/src/user/syscall.c | 304 ++++ libraries/NEMU/src/user/user.h | 38 + libraries/NEMU/src/utils/expr.c | 299 ++++ libraries/NEMU/src/utils/iqueue.c | 33 + libraries/NEMU/src/utils/log.c | 22 + libraries/NEMU/src/utils/state.c | 9 + libraries/NEMU/src/utils/timer.c | 28 + libraries/NEMU/tools/export/.gitignore | 1 + libraries/NEMU/tools/fixdep/Makefile | 3 + libraries/NEMU/tools/fixdep/fixdep.c | 404 +++++ libraries/NEMU/tools/gen-expr/.gitignore | 1 + libraries/NEMU/tools/gen-expr/Makefile | 3 + libraries/NEMU/tools/gen-expr/gen-expr.c | 132 ++ libraries/NEMU/tools/kconfig/.gitignore | 3 + libraries/NEMU/tools/kconfig/Makefile | 34 + libraries/NEMU/tools/kconfig/conf.c | 727 ++++++++ libraries/NEMU/tools/kconfig/confdata.c | 1338 +++++++++++++++ libraries/NEMU/tools/kconfig/expr.c | 1303 +++++++++++++++ libraries/NEMU/tools/kconfig/expr.h | 332 ++++ libraries/NEMU/tools/kconfig/lexer.l | 471 ++++++ libraries/NEMU/tools/kconfig/list.h | 132 ++ libraries/NEMU/tools/kconfig/lkc.h | 173 ++ libraries/NEMU/tools/kconfig/lkc_proto.h | 51 + .../NEMU/tools/kconfig/lxdialog/checklist.c | 319 ++++ .../NEMU/tools/kconfig/lxdialog/dialog.h | 238 +++ .../NEMU/tools/kconfig/lxdialog/inputbox.c | 289 ++++ .../NEMU/tools/kconfig/lxdialog/menubox.c | 424 +++++ .../NEMU/tools/kconfig/lxdialog/textbox.c | 395 +++++ libraries/NEMU/tools/kconfig/lxdialog/util.c | 700 ++++++++ libraries/NEMU/tools/kconfig/lxdialog/yesno.c | 101 ++ libraries/NEMU/tools/kconfig/mconf.c | 1040 ++++++++++++ libraries/NEMU/tools/kconfig/menu.c | 899 ++++++++++ libraries/NEMU/tools/kconfig/parser.y | 727 ++++++++ libraries/NEMU/tools/kconfig/preprocess.c | 574 +++++++ libraries/NEMU/tools/kconfig/symbol.c | 1314 +++++++++++++++ libraries/NEMU/tools/kconfig/util.c | 129 ++ libraries/NEMU/tools/kvm-diff/Makefile | 9 + libraries/NEMU/tools/kvm-diff/include/paddr.h | 1 + libraries/NEMU/tools/kvm-diff/src/kvm.c | 401 +++++ libraries/NEMU/tools/qemu-dl-diff/Makefile | 9 + .../NEMU/tools/qemu-dl-diff/include/common.h | 14 + .../NEMU/tools/qemu-dl-diff/src/diff-test.c | 100 ++ libraries/NEMU/tools/qemu-dl-diff/src/hack.c | 311 ++++ .../tools/qemu-dl-diff/src/isa/mips32/init.c | 14 + .../tools/qemu-dl-diff/src/isa/riscv32/init.c | 51 + .../tools/qemu-dl-diff/src/isa/riscv64/init.c | 10 + .../tools/qemu-dl-diff/src/isa/x86/init.c | 59 + .../tools/qemu-dl-diff/src/isa/x86/intr.c | 18 + .../NEMU/tools/qemu-socket-diff/Makefile | 9 + .../tools/qemu-socket-diff/include/common.h | 16 + .../qemu-socket-diff/include/isa/mips32.h | 21 + .../qemu-socket-diff/include/isa/riscv32.h | 17 + .../qemu-socket-diff/include/isa/riscv64.h | 18 + .../tools/qemu-socket-diff/include/isa/x86.h | 18 + .../tools/qemu-socket-diff/include/protocol.h | 38 + .../tools/qemu-socket-diff/src/diff-test.c | 84 + .../tools/qemu-socket-diff/src/gdb-host.c | 103 ++ .../qemu-socket-diff/src/isa/mips32/init.c | 2 + .../qemu-socket-diff/src/isa/riscv32/init.c | 51 + .../qemu-socket-diff/src/isa/riscv64/init.c | 2 + .../tools/qemu-socket-diff/src/isa/x86/init.c | 54 + .../tools/qemu-socket-diff/src/protocol.c | 306 ++++ libraries/difftest/.gitignore | 364 ++++ libraries/difftest/LICENSE | 127 ++ libraries/difftest/Makefile | 76 + libraries/difftest/README.md | 55 + libraries/difftest/scripts/utils/lock-emu.c | 59 + .../difftest/src/test/csrc/common/axi4.cpp | 125 ++ .../difftest/src/test/csrc/common/axi4.h | 230 +++ .../difftest/src/test/csrc/common/common.cpp | 45 + .../difftest/src/test/csrc/common/common.h | 57 + .../src/test/csrc/common/compress.cpp | 142 ++ .../difftest/src/test/csrc/common/compress.h | 36 + .../difftest/src/test/csrc/common/device.cpp | 70 + .../difftest/src/test/csrc/common/device.h | 26 + .../difftest/src/test/csrc/common/flash.cpp | 57 + .../difftest/src/test/csrc/common/flash.h | 22 + .../src/test/csrc/common/keyboard.cpp | 82 + .../difftest/src/test/csrc/common/macro.h | 31 + .../difftest/src/test/csrc/common/ram.cpp | 453 +++++ libraries/difftest/src/test/csrc/common/ram.h | 44 + .../difftest/src/test/csrc/common/sdcard.cpp | 44 + .../difftest/src/test/csrc/common/sdcard.h | 24 + .../difftest/src/test/csrc/common/uart.cpp | 106 ++ .../difftest/src/test/csrc/common/vga.cpp | 59 + libraries/difftest/src/test/csrc/vcs/main.cpp | 61 + .../difftest/src/test/csrc/verilator/emu.cpp | 649 ++++++++ .../difftest/src/test/csrc/verilator/emu.h | 142 ++ .../difftest/src/test/csrc/verilator/main.cpp | 59 + .../src/test/csrc/verilator/snapshot.cpp | 142 ++ .../src/test/csrc/verilator/snapshot.h | 95 ++ .../difftest/src/test/vsrc/common/assert.v | 20 + .../difftest/src/test/vsrc/common/difftest.v | 590 +++++++ libraries/difftest/src/test/vsrc/common/ram.v | 49 + libraries/difftest/src/test/vsrc/common/ref.v | 63 + libraries/difftest/src/test/vsrc/vcs/top.v | 114 ++ libraries/difftest/vcs.mk | 49 + libraries/difftest/verilator.mk | 160 ++ myinfo.txt | 4 +- projects/cpu_axi_diff/vsrc/SimTop.v | 219 +++ projects/cpu_axi_diff/vsrc/axi_rw.v | 307 ++++ projects/cpu_axi_diff/vsrc/cpu.v | 273 +++ projects/cpu_axi_diff/vsrc/defines.v | 21 + projects/cpu_axi_diff/vsrc/exe_stage.v | 35 + projects/cpu_axi_diff/vsrc/id_stage.v | 68 + projects/cpu_axi_diff/vsrc/if_stage.v | 48 + projects/cpu_axi_diff/vsrc/regfile.v | 95 ++ 356 files changed, 44473 insertions(+), 54 deletions(-) delete mode 160000 NEMU delete mode 160000 difftest create mode 160000 libraries/DRAMsim3 create mode 100644 libraries/NEMU/.gitignore create mode 100644 libraries/NEMU/Kconfig create mode 100644 libraries/NEMU/Makefile create mode 100644 libraries/NEMU/README.md create mode 100644 libraries/NEMU/configs/.gitignore create mode 100644 libraries/NEMU/configs/riscv32-pa_defconfig create mode 100644 libraries/NEMU/configs/riscv64-pa_defconfig create mode 100644 libraries/NEMU/configs/riscv64-rvv_defconfig create mode 100644 libraries/NEMU/configs/riscv64-xs-ref_defconfig create mode 100644 libraries/NEMU/configs/riscv64-xs_defconfig create mode 100644 libraries/NEMU/include/common.h create mode 100644 libraries/NEMU/include/cpu/cpu.h create mode 100644 libraries/NEMU/include/cpu/decode.h create mode 100644 libraries/NEMU/include/cpu/difftest.h create mode 100644 libraries/NEMU/include/cpu/exec.h create mode 100644 libraries/NEMU/include/cpu/ifetch.h create mode 100644 libraries/NEMU/include/debug.h create mode 100644 libraries/NEMU/include/device/alarm.h create mode 100644 libraries/NEMU/include/device/map.h create mode 100644 libraries/NEMU/include/device/mmio.h create mode 100644 libraries/NEMU/include/isa.h create mode 100644 libraries/NEMU/include/macro.h create mode 100644 libraries/NEMU/include/memory/host-tlb.h create mode 100644 libraries/NEMU/include/memory/host.h create mode 100644 libraries/NEMU/include/memory/paddr.h create mode 100644 libraries/NEMU/include/memory/vaddr.h create mode 100644 libraries/NEMU/include/rtl/fp.h create mode 100644 libraries/NEMU/include/rtl/pseudo.h create mode 100644 libraries/NEMU/include/rtl/rtl.h create mode 100644 libraries/NEMU/include/utils.h create mode 100644 libraries/NEMU/lib-include/difftest.h create mode 100644 libraries/NEMU/resource/bbl/Makefile create mode 100644 libraries/NEMU/resource/bbl/src/atomic.h create mode 100644 libraries/NEMU/resource/bbl/src/bits.h create mode 100644 libraries/NEMU/resource/bbl/src/disabled_hart_mask.h create mode 100644 libraries/NEMU/resource/bbl/src/emulation.c create mode 100644 libraries/NEMU/resource/bbl/src/emulation.h create mode 100644 libraries/NEMU/resource/bbl/src/encoding.h create mode 100644 libraries/NEMU/resource/bbl/src/flush_icache.c create mode 100644 libraries/NEMU/resource/bbl/src/mcall.h create mode 100644 libraries/NEMU/resource/bbl/src/mentry.S create mode 100644 libraries/NEMU/resource/bbl/src/misaligned_ldst.c create mode 100644 libraries/NEMU/resource/bbl/src/mtrap.c create mode 100644 libraries/NEMU/resource/bbl/src/mtrap.h create mode 100644 libraries/NEMU/resource/bbl/src/muldiv_emulation.c create mode 100644 libraries/NEMU/resource/bbl/src/pk.h create mode 100644 libraries/NEMU/resource/bbl/src/snprintf.c create mode 100644 libraries/NEMU/resource/bbl/src/unprivileged_memory.h create mode 100644 libraries/NEMU/resource/bbl/src/vm.h create mode 100644 libraries/NEMU/resource/debian/README.md create mode 100644 libraries/NEMU/resource/mips-elf/README.md create mode 100644 libraries/NEMU/resource/sdcard/README.md create mode 100644 libraries/NEMU/resource/sdcard/nemu.c create mode 100644 libraries/NEMU/resource/softfloat/.gitignore create mode 100644 libraries/NEMU/scripts/build.mk create mode 100644 libraries/NEMU/scripts/config.mk create mode 100644 libraries/NEMU/scripts/git.mk create mode 100644 libraries/NEMU/scripts/isa.mk create mode 100644 libraries/NEMU/scripts/runall.sh create mode 100644 libraries/NEMU/src/cpu/cpu-exec.c create mode 100644 libraries/NEMU/src/cpu/difftest/dut.c create mode 100644 libraries/NEMU/src/cpu/difftest/ref.c create mode 100644 libraries/NEMU/src/cpu/tcache.c create mode 100644 libraries/NEMU/src/device/Kconfig create mode 100644 libraries/NEMU/src/device/alarm.c create mode 100644 libraries/NEMU/src/device/audio.c create mode 100644 libraries/NEMU/src/device/device.c create mode 100644 libraries/NEMU/src/device/disk.c create mode 100644 libraries/NEMU/src/device/intr.c create mode 100644 libraries/NEMU/src/device/io/map.c create mode 100644 libraries/NEMU/src/device/io/mmio.c create mode 100644 libraries/NEMU/src/device/io/port-io.c create mode 100644 libraries/NEMU/src/device/keyboard.c create mode 100644 libraries/NEMU/src/device/mmc.h create mode 100644 libraries/NEMU/src/device/sdcard.c create mode 100644 libraries/NEMU/src/device/serial.c create mode 100644 libraries/NEMU/src/device/timer.c create mode 100644 libraries/NEMU/src/device/uartlite.c create mode 100644 libraries/NEMU/src/device/vga.c create mode 100644 libraries/NEMU/src/engine/interpreter/c_op.h create mode 100644 libraries/NEMU/src/engine/interpreter/fp.c create mode 100644 libraries/NEMU/src/engine/interpreter/host-fp.h create mode 100644 libraries/NEMU/src/engine/interpreter/hostcall.c create mode 100644 libraries/NEMU/src/engine/interpreter/init.c create mode 100644 libraries/NEMU/src/engine/interpreter/rtl-basic.h create mode 100644 libraries/NEMU/src/engine/interpreter/rtl-fp.h create mode 100644 libraries/NEMU/src/engine/interpreter/softfloat-fp.h create mode 100644 libraries/NEMU/src/isa/mips32/difftest/dut.c create mode 100644 libraries/NEMU/src/isa/mips32/difftest/ref.c create mode 100644 libraries/NEMU/src/isa/mips32/include/isa-all-instr.h create mode 100644 libraries/NEMU/src/isa/mips32/include/isa-def.h create mode 100644 libraries/NEMU/src/isa/mips32/include/isa-exec.h create mode 100644 libraries/NEMU/src/isa/mips32/init.c create mode 100644 libraries/NEMU/src/isa/mips32/instr/compute.h create mode 100644 libraries/NEMU/src/isa/mips32/instr/control.h create mode 100644 libraries/NEMU/src/isa/mips32/instr/decode.c create mode 100644 libraries/NEMU/src/isa/mips32/instr/ldst.h create mode 100644 libraries/NEMU/src/isa/mips32/instr/muldiv.h create mode 100644 libraries/NEMU/src/isa/mips32/instr/special.h create mode 100644 libraries/NEMU/src/isa/mips32/instr/system.h create mode 100644 libraries/NEMU/src/isa/mips32/local-include/intr.h create mode 100644 libraries/NEMU/src/isa/mips32/local-include/reg.h create mode 100644 libraries/NEMU/src/isa/mips32/local-include/rtl.h create mode 100644 libraries/NEMU/src/isa/mips32/logo.c create mode 100644 libraries/NEMU/src/isa/mips32/reg.c create mode 100644 libraries/NEMU/src/isa/mips32/system/intr.c create mode 100644 libraries/NEMU/src/isa/mips32/system/mmu.c create mode 100644 libraries/NEMU/src/isa/mips32/system/priv.c create mode 100644 libraries/NEMU/src/isa/riscv32/difftest/dut.c create mode 100644 libraries/NEMU/src/isa/riscv32/difftest/ref.c create mode 100644 libraries/NEMU/src/isa/riscv32/include/isa-all-instr.h create mode 100644 libraries/NEMU/src/isa/riscv32/include/isa-def.h create mode 100644 libraries/NEMU/src/isa/riscv32/include/isa-exec.h create mode 100644 libraries/NEMU/src/isa/riscv32/init.c create mode 100644 libraries/NEMU/src/isa/riscv32/instr/compress.h create mode 100644 libraries/NEMU/src/isa/riscv32/instr/compute.h create mode 100644 libraries/NEMU/src/isa/riscv32/instr/control.h create mode 100644 libraries/NEMU/src/isa/riscv32/instr/decode.c create mode 100644 libraries/NEMU/src/isa/riscv32/instr/ldst.h create mode 100644 libraries/NEMU/src/isa/riscv32/instr/muldiv.h create mode 100644 libraries/NEMU/src/isa/riscv32/instr/pseudo.h create mode 100644 libraries/NEMU/src/isa/riscv32/instr/special.h create mode 100644 libraries/NEMU/src/isa/riscv32/instr/system.h create mode 100644 libraries/NEMU/src/isa/riscv32/local-include/intr.h create mode 100644 libraries/NEMU/src/isa/riscv32/local-include/reg.h create mode 100644 libraries/NEMU/src/isa/riscv32/local-include/rtl.h create mode 100644 libraries/NEMU/src/isa/riscv32/logo.c create mode 100644 libraries/NEMU/src/isa/riscv32/reg.c create mode 100644 libraries/NEMU/src/isa/riscv32/system/intr.c create mode 100644 libraries/NEMU/src/isa/riscv32/system/mmu.c create mode 100644 libraries/NEMU/src/isa/riscv32/system/priv.c create mode 100644 libraries/NEMU/src/isa/riscv64/Kconfig create mode 100644 libraries/NEMU/src/isa/riscv64/clint.c create mode 100644 libraries/NEMU/src/isa/riscv64/difftest/dut.c create mode 100644 libraries/NEMU/src/isa/riscv64/difftest/ref.c create mode 100644 libraries/NEMU/src/isa/riscv64/include/isa-all-instr.h create mode 100644 libraries/NEMU/src/isa/riscv64/include/isa-def.h create mode 100644 libraries/NEMU/src/isa/riscv64/include/isa-exec.h create mode 100644 libraries/NEMU/src/isa/riscv64/init.c create mode 100644 libraries/NEMU/src/isa/riscv64/instr/decode.c create mode 100644 libraries/NEMU/src/isa/riscv64/instr/fp.c create mode 100644 libraries/NEMU/src/isa/riscv64/instr/priv/decode.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/priv/exec.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/priv/system.c create mode 100644 libraries/NEMU/src/isa/riscv64/instr/pseudo.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rocc.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rva/amo.c create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rva/decode.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rva/exec.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvc/decode.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvc/exec.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvd/decode.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvd/exec.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvf/decode.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvf/exec.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvi/compute.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvi/control.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvi/decode.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvi/exec.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvi/fence.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvi/ldst.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvm/decode.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvm/exec.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/decode.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/exec.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vcfg.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.c create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vldst.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.c create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vreg.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vreg_impl.c create mode 100644 libraries/NEMU/src/isa/riscv64/instr/special.h create mode 100644 libraries/NEMU/src/isa/riscv64/instr/vp.c create mode 100644 libraries/NEMU/src/isa/riscv64/local-include/csr.h create mode 100644 libraries/NEMU/src/isa/riscv64/local-include/intr.h create mode 100644 libraries/NEMU/src/isa/riscv64/local-include/reg.h create mode 100644 libraries/NEMU/src/isa/riscv64/local-include/rtl.h create mode 100644 libraries/NEMU/src/isa/riscv64/local-include/vreg.h create mode 100644 libraries/NEMU/src/isa/riscv64/logo.c create mode 100644 libraries/NEMU/src/isa/riscv64/reg.c create mode 100644 libraries/NEMU/src/isa/riscv64/system/intr.c create mode 100644 libraries/NEMU/src/isa/riscv64/system/mmu.c create mode 100644 libraries/NEMU/src/isa/riscv64/system/priv.c create mode 100644 libraries/NEMU/src/isa/x86/Kconfig create mode 100644 libraries/NEMU/src/isa/x86/device/i8237a.c create mode 100644 libraries/NEMU/src/isa/x86/device/i8253.c create mode 100644 libraries/NEMU/src/isa/x86/device/i8259a.c create mode 100644 libraries/NEMU/src/isa/x86/device/ioport80.c create mode 100644 libraries/NEMU/src/isa/x86/device/mc146818rtc.c create mode 100644 libraries/NEMU/src/isa/x86/difftest/dut.c create mode 100644 libraries/NEMU/src/isa/x86/difftest/ref.c create mode 100644 libraries/NEMU/src/isa/x86/exec/all-instr.h create mode 100644 libraries/NEMU/src/isa/x86/exec/exec.c create mode 100644 libraries/NEMU/src/isa/x86/exec/fp.h create mode 100644 libraries/NEMU/src/isa/x86/include/isa-all-instr.h create mode 100644 libraries/NEMU/src/isa/x86/include/isa-def.h create mode 100644 libraries/NEMU/src/isa/x86/include/isa-exec.h create mode 100644 libraries/NEMU/src/isa/x86/init.c create mode 100644 libraries/NEMU/src/isa/x86/instr/arith.h create mode 100644 libraries/NEMU/src/isa/x86/instr/bit.h create mode 100644 libraries/NEMU/src/isa/x86/instr/cc.h create mode 100644 libraries/NEMU/src/isa/x86/instr/control.h create mode 100644 libraries/NEMU/src/isa/x86/instr/data-mov.h create mode 100644 libraries/NEMU/src/isa/x86/instr/decode.c create mode 100644 libraries/NEMU/src/isa/x86/instr/eflags.c create mode 100644 libraries/NEMU/src/isa/x86/instr/eflags.h create mode 100644 libraries/NEMU/src/isa/x86/instr/fp.c create mode 100644 libraries/NEMU/src/isa/x86/instr/lazycc.h create mode 100644 libraries/NEMU/src/isa/x86/instr/logic.h create mode 100644 libraries/NEMU/src/isa/x86/instr/misc.h create mode 100644 libraries/NEMU/src/isa/x86/instr/rt.h create mode 100644 libraries/NEMU/src/isa/x86/instr/special.h create mode 100644 libraries/NEMU/src/isa/x86/instr/string.h create mode 100644 libraries/NEMU/src/isa/x86/instr/system.h create mode 100644 libraries/NEMU/src/isa/x86/instr/vector.h create mode 100644 libraries/NEMU/src/isa/x86/kvm/kvm.c create mode 100644 libraries/NEMU/src/isa/x86/local-include/intr.h create mode 100644 libraries/NEMU/src/isa/x86/local-include/reg.h create mode 100644 libraries/NEMU/src/isa/x86/local-include/rtl.h create mode 100644 libraries/NEMU/src/isa/x86/logo.c create mode 100644 libraries/NEMU/src/isa/x86/reg.c create mode 100644 libraries/NEMU/src/isa/x86/system/intr.c create mode 100644 libraries/NEMU/src/isa/x86/system/mmu.c create mode 100644 libraries/NEMU/src/isa/x86/system/priv.c create mode 100644 libraries/NEMU/src/memory/Kconfig create mode 100644 libraries/NEMU/src/memory/host-tlb.c create mode 100644 libraries/NEMU/src/memory/paddr.c create mode 100644 libraries/NEMU/src/memory/vaddr.c create mode 100644 libraries/NEMU/src/monitor/aligncheck.c create mode 100644 libraries/NEMU/src/monitor/monitor.c create mode 100644 libraries/NEMU/src/monitor/ui.c create mode 100644 libraries/NEMU/src/monitor/watchpoint.c create mode 100644 libraries/NEMU/src/nemu-main.c create mode 100644 libraries/NEMU/src/user/init/riscv64.c create mode 100644 libraries/NEMU/src/user/init/x86.c create mode 100644 libraries/NEMU/src/user/loader.c create mode 100644 libraries/NEMU/src/user/memory.c create mode 100644 libraries/NEMU/src/user/syscall-riscv64.h create mode 100644 libraries/NEMU/src/user/syscall-x86.h create mode 100644 libraries/NEMU/src/user/syscall.c create mode 100644 libraries/NEMU/src/user/user.h create mode 100644 libraries/NEMU/src/utils/expr.c create mode 100644 libraries/NEMU/src/utils/iqueue.c create mode 100644 libraries/NEMU/src/utils/log.c create mode 100644 libraries/NEMU/src/utils/state.c create mode 100644 libraries/NEMU/src/utils/timer.c create mode 100644 libraries/NEMU/tools/export/.gitignore create mode 100644 libraries/NEMU/tools/fixdep/Makefile create mode 100644 libraries/NEMU/tools/fixdep/fixdep.c create mode 100644 libraries/NEMU/tools/gen-expr/.gitignore create mode 100644 libraries/NEMU/tools/gen-expr/Makefile create mode 100644 libraries/NEMU/tools/gen-expr/gen-expr.c create mode 100644 libraries/NEMU/tools/kconfig/.gitignore create mode 100644 libraries/NEMU/tools/kconfig/Makefile create mode 100644 libraries/NEMU/tools/kconfig/conf.c create mode 100644 libraries/NEMU/tools/kconfig/confdata.c create mode 100644 libraries/NEMU/tools/kconfig/expr.c create mode 100644 libraries/NEMU/tools/kconfig/expr.h create mode 100644 libraries/NEMU/tools/kconfig/lexer.l create mode 100644 libraries/NEMU/tools/kconfig/list.h create mode 100644 libraries/NEMU/tools/kconfig/lkc.h create mode 100644 libraries/NEMU/tools/kconfig/lkc_proto.h create mode 100644 libraries/NEMU/tools/kconfig/lxdialog/checklist.c create mode 100644 libraries/NEMU/tools/kconfig/lxdialog/dialog.h create mode 100644 libraries/NEMU/tools/kconfig/lxdialog/inputbox.c create mode 100644 libraries/NEMU/tools/kconfig/lxdialog/menubox.c create mode 100644 libraries/NEMU/tools/kconfig/lxdialog/textbox.c create mode 100644 libraries/NEMU/tools/kconfig/lxdialog/util.c create mode 100644 libraries/NEMU/tools/kconfig/lxdialog/yesno.c create mode 100644 libraries/NEMU/tools/kconfig/mconf.c create mode 100644 libraries/NEMU/tools/kconfig/menu.c create mode 100644 libraries/NEMU/tools/kconfig/parser.y create mode 100644 libraries/NEMU/tools/kconfig/preprocess.c create mode 100644 libraries/NEMU/tools/kconfig/symbol.c create mode 100644 libraries/NEMU/tools/kconfig/util.c create mode 100644 libraries/NEMU/tools/kvm-diff/Makefile create mode 100644 libraries/NEMU/tools/kvm-diff/include/paddr.h create mode 100644 libraries/NEMU/tools/kvm-diff/src/kvm.c create mode 100644 libraries/NEMU/tools/qemu-dl-diff/Makefile create mode 100644 libraries/NEMU/tools/qemu-dl-diff/include/common.h create mode 100644 libraries/NEMU/tools/qemu-dl-diff/src/diff-test.c create mode 100644 libraries/NEMU/tools/qemu-dl-diff/src/hack.c create mode 100644 libraries/NEMU/tools/qemu-dl-diff/src/isa/mips32/init.c create mode 100644 libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv32/init.c create mode 100644 libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv64/init.c create mode 100644 libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/init.c create mode 100644 libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/intr.c create mode 100644 libraries/NEMU/tools/qemu-socket-diff/Makefile create mode 100644 libraries/NEMU/tools/qemu-socket-diff/include/common.h create mode 100644 libraries/NEMU/tools/qemu-socket-diff/include/isa/mips32.h create mode 100644 libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv32.h create mode 100644 libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv64.h create mode 100644 libraries/NEMU/tools/qemu-socket-diff/include/isa/x86.h create mode 100644 libraries/NEMU/tools/qemu-socket-diff/include/protocol.h create mode 100644 libraries/NEMU/tools/qemu-socket-diff/src/diff-test.c create mode 100644 libraries/NEMU/tools/qemu-socket-diff/src/gdb-host.c create mode 100644 libraries/NEMU/tools/qemu-socket-diff/src/isa/mips32/init.c create mode 100644 libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv32/init.c create mode 100644 libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv64/init.c create mode 100644 libraries/NEMU/tools/qemu-socket-diff/src/isa/x86/init.c create mode 100644 libraries/NEMU/tools/qemu-socket-diff/src/protocol.c create mode 100644 libraries/difftest/.gitignore create mode 100644 libraries/difftest/LICENSE create mode 100644 libraries/difftest/Makefile create mode 100644 libraries/difftest/README.md create mode 100644 libraries/difftest/scripts/utils/lock-emu.c create mode 100644 libraries/difftest/src/test/csrc/common/axi4.cpp create mode 100644 libraries/difftest/src/test/csrc/common/axi4.h create mode 100644 libraries/difftest/src/test/csrc/common/common.cpp create mode 100644 libraries/difftest/src/test/csrc/common/common.h create mode 100644 libraries/difftest/src/test/csrc/common/compress.cpp create mode 100644 libraries/difftest/src/test/csrc/common/compress.h create mode 100644 libraries/difftest/src/test/csrc/common/device.cpp create mode 100644 libraries/difftest/src/test/csrc/common/device.h create mode 100644 libraries/difftest/src/test/csrc/common/flash.cpp create mode 100644 libraries/difftest/src/test/csrc/common/flash.h create mode 100644 libraries/difftest/src/test/csrc/common/keyboard.cpp create mode 100644 libraries/difftest/src/test/csrc/common/macro.h create mode 100644 libraries/difftest/src/test/csrc/common/ram.cpp create mode 100644 libraries/difftest/src/test/csrc/common/ram.h create mode 100644 libraries/difftest/src/test/csrc/common/sdcard.cpp create mode 100644 libraries/difftest/src/test/csrc/common/sdcard.h create mode 100644 libraries/difftest/src/test/csrc/common/uart.cpp create mode 100644 libraries/difftest/src/test/csrc/common/vga.cpp create mode 100644 libraries/difftest/src/test/csrc/vcs/main.cpp create mode 100644 libraries/difftest/src/test/csrc/verilator/emu.cpp create mode 100644 libraries/difftest/src/test/csrc/verilator/emu.h create mode 100644 libraries/difftest/src/test/csrc/verilator/main.cpp create mode 100644 libraries/difftest/src/test/csrc/verilator/snapshot.cpp create mode 100644 libraries/difftest/src/test/csrc/verilator/snapshot.h create mode 100644 libraries/difftest/src/test/vsrc/common/assert.v create mode 100644 libraries/difftest/src/test/vsrc/common/difftest.v create mode 100644 libraries/difftest/src/test/vsrc/common/ram.v create mode 100644 libraries/difftest/src/test/vsrc/common/ref.v create mode 100644 libraries/difftest/src/test/vsrc/vcs/top.v create mode 100644 libraries/difftest/vcs.mk create mode 100644 libraries/difftest/verilator.mk create mode 100755 projects/cpu_axi_diff/vsrc/SimTop.v create mode 100755 projects/cpu_axi_diff/vsrc/axi_rw.v create mode 100755 projects/cpu_axi_diff/vsrc/cpu.v create mode 100755 projects/cpu_axi_diff/vsrc/defines.v create mode 100755 projects/cpu_axi_diff/vsrc/exe_stage.v create mode 100755 projects/cpu_axi_diff/vsrc/id_stage.v create mode 100755 projects/cpu_axi_diff/vsrc/if_stage.v create mode 100755 projects/cpu_axi_diff/vsrc/regfile.v diff --git a/.gitignore b/.gitignore index a716e5a..f2d07a2 100755 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ **/build/ **/build_test/ **/difftest -!difftest -!NEMU -myinfo.txt \ No newline at end of file +!libraries/difftest +!libraries/NEMU +!libraries/DRAMsim3 +myinfo.txt diff --git a/.gitmodules b/.gitmodules index 8ba999f..8995563 100755 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,9 @@ -[submodule "difftest"] - path = difftest +[submodule "libraries/difftest"] + path = libraries/difftest url = https://github.com/OpenXiangShan/difftest.git -[submodule "NEMU"] - path = NEMU +[submodule "libraries/NEMU"] + path = libraries/NEMU url = https://github.com/OpenXiangShan/NEMU.git +[submodule "libraries/DRAMsim3"] + path = libraries/DRAMsim3 + url = https://github.com/OpenXiangShan/DRAMsim3.git diff --git a/NEMU b/NEMU deleted file mode 160000 index 1e6883d..0000000 --- a/NEMU +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1e6883d271e48d2412bc46af852a093d7a7fdde7 diff --git a/README.md b/README.md index 0185ffd..1725bb3 100755 --- a/README.md +++ b/README.md @@ -1,10 +1,205 @@ # oscpu-framework -A Verilator-based framework. -Please fill your information in myinfo.txt. +这是一个基于`verilator`的`RISC-V`CPU开发仿真框架。 -For example: -ID=202100001 -Name=张三 +开发前请在`myinfo.txt`文件中填写报名`一生一芯`时的学号和自己的姓名。例如: + +``` +ID=202100001 +Name=张三 +``` + +# 开发环境 + +操作系统:[Linux Ubuntu v20.04](https://ubuntu.com/download/desktop) + +开发软件:[verilator](https://verilator.org/guide/latest/)、[gtkwave](http://gtkwave.sourceforge.net/) + +verilator要求统一使用`v4.204`版本,可以从[这里](https://oscpu.github.io/ysyx/events/2021-07-09_Verilator/verilator_installer.tar.gz)下载安装包。使用下面的命令安装`verilator`和`gtkwave`。 + +``` +# 安装verilator,需要先下载verilator的安装包 +tar vxf verilator_installer.tar.gz +./install_verilator.sh +# 安装gtkwave +sudo apt-get install gtkwave +``` + +关于开发环境的详细安装流程,可参考[讲座-Verilator介绍](https://oscpu.github.io/ysyx/events/events.html?EID=2021-07-09_Verilator)。 + +# 获取代码 + +``` +git clone --recursive -b 2021 https://github.com/OSCPU/oscpu-framework.git oscpu +``` + +如果子仓库克隆失败,可在`oscpu`目录下使用下面的命令重新克隆子仓库。 + +``` +git submodule update --init --recursive +``` + +参与`一生一芯`还需要设置git信息。 + +``` +# 使用你的编号和姓名拼音代替双引号中内容 +git config --global user.name "2021000001-Zhang San" +# 使用你的邮箱代替双引号中内容 +git config --global user.email "zhangsan@foo.com" +``` + +# 编译NEMU + +`香山difftest框架`依赖`NEMU`的支持,本项目已经集成`NEMU`和`香山difftest框架`,编译`香山difftest框架`之前,需要安装编译`NEMU`所需的软件包。 + +``` +sudo apt-get install libreadline-dev libsdl2-dev bison +``` + +如果内存小于8G,编译该工程之前,需要修改`NEMU`和`香山difftest框架`的ram大小。 + +修改`NEMU`的ram大小: + +``` +cd libraries/NEMU +export NEMU_HOME=`pwd` +make defconfig riscv64-xs-ref_defconfig +make menuconfig +#进入Memory Configuration菜单,将Memory size的值修改为0x10000000,回车,保存,退出 +make +``` + +修改`香山difftest框架`的ram大小,文件:`libraries/difftest/src/test/csrc/common/ram.h`。 + +``` +#define EMU_RAM_SIZE (256 * 1024 * 1024UL) +//#define EMU_RAM_SIZE (8 * 1024 * 1024 * 1024UL) +``` + +对于`NEMU`更新后导致的`香山difftest框架`编译或运行报错,可以在清除`NEMU`编译的文件后运行build.sh来重新编译`NEMU`。 + +``` +cd libraries/NEMU +export NEMU_HOME=`pwd` +make clean +``` + +对于`香山difftest框架`更新导致的编译或运行报错,也可通过`build.sh`中的`-c`选项删除`build`目录后重新编译工程。 + +# 例程 + +我们提供了脚本`build.sh`用于自动化编译、仿真和查看波形。下面是`build.sh`的参数说明,也可在oscpu目录下使用`./build.sh -h`命令查看帮助。 + +``` +-e 指定一个例程作为工程目录,如果不指定,将使用"cpu"目录作为工程目录 +-b 编译工程,编译后会在工程目录下生成"build"(difftest)或"build_test"子目录,里面存放编译后生成的文件 +-t 指定verilog顶层文件名,如果不指定,将使用"top.v" 或"SimTop.v"(difftest)作为顶层文件名,该参数在接入difftest时无效 +-s 运行仿真程序,即"build/emu"程序,运行时工作目录为"build"(difftest)或"build_test"子目录 +-a 传入仿真程序的参数,比如:-a "1 2 3 ......",多个参数需要使用双引号 +-f 传入c++编译器的参数,比如:-f "-DGLOBAL_DEFINE=1 -ggdb3",多个参数需要使用双引号,该参数在接入difftest时无效 +-l 传入c++链接器的参数,比如:-l "-ldl -lm",多个参数需要使用双引号,该参数在接入difftest时无效 +-g 使用gdb调试仿真程序,该参数在接入difftest时无效 +-w 使用gtkwave打开工作目录下修改时间最新的.vcd波形文件 +-c 删除工程目录下编译生成的"build"文件夹 +-d 接入香山difftest框架 +-m 传入difftest框架makefile的参数,比如:-m "EMU_TRACE=1 EMU_THREADS=4",多个参数需要使用双引号 +``` + +## 编译和仿真 + +`projects`目录下几个例程可用于了解如何基于`Verilator`和`香山difftest框架`来开发仿真CPU。 + +### counter + +`examples/counter`目录下存放了4位计数器的例程源码。可以使用下面的命令编译和仿真。 + +``` +./build.sh -e counter -b -s +``` + +如果`Verilator `安装正确,你会看到下面的输出 + +``` +Simulating... +Enabling waves ... +Enter the test cycle: +``` + +输入测试周期数后仿真程序退出,并在`projects/counter/build_test/`路径下生成`.vcd`波形文件。 + +### cpu + +`projects/cpu`目录下存放了单周期`RISC-V`CPU例程源码,源码实现了`RV64I`指令`addi`。可以使用下面的命令编译和仿真。 + +``` +./build.sh -b -t rvcpu.v -s +``` + +输入`inst.bin`和回车后程序结束运行,并在`projects/cpu/build_test/`路径下生成`.vcd`波形文件。其中`inst.bin`为`bin`目录下的一个`RISC-V`测试程序,里面存放了3条`addi`指令。 + +### cpu_diff + +`projects/cpu_diff`目录下存放了接入`香山difftest框架`的单周期`RISC-V` CPU例程源码,源码实现了`RV64I`指令`addi`。关于`香山difftest框架`的详细介绍,可参考[讲座-Difftest 处理器验证方法介绍](https://oscpu.github.io/ysyx/events/events.html?EID=2021-07-17_Difftest)。可以使用下面的命令编译和仿真。 + +``` +# 编译仿真 +./build.sh -e cpu_diff -d -b -s -a "-i inst_diff.bin" +# 编译仿真,并从CPU上报至difftest的时钟周期0开始输出波形 +./build.sh -e cpu_diff -d -b -s -a "-i inst_diff.bin --dump-wave -b 0" -m "EMU_TRACE=1" +``` + +仿真程序运行后,终端将打印绿色的提示内容`HIT GOOD TRAP at pc = 0x8000000c`。说明程序运行到自定义的0x6b指令,并且此时存放错误码的`a0`寄存器的值为0,即程序按照预期结果成功退出。关于0x6b自定义指令作用,可参考[讲座-AM运行环境介绍](https://oscpu.github.io/ysyx/events/events.html?EID=2021-07-13_AM_Difftest)。如果指定输出波形,将在`projects/cpu_diff/build/`路径下生成`.vcd`波形文件。 + +### cpu_axi_diff + +`projects/cpu_diff`目录下存放了通过`AXI总线`接入`香山difftest框架`的单周期`RISC-V`CPU例程源码,源码实现了`RV64I`指令`addi`和`AXI总线`读逻辑。可以使用下面的命令编译和仿真。 + +``` +./build.sh -e cpu_axi_diff -d -s -a "-i inst_diff.bin --dump-wave -b 0" -m "EMU_TRACE=1 WITH_DRAMSIM3=1" -b +``` + +## 查看波形 + +在`oscpu`目录下使用命令可以通过`gtkwave`查看输出的波形,其中`xxx`表示例程名。 + +``` +# 未接入difftest +./build.sh -e xxx -w +# 接入difftest +./build.sh -e xxx -d -w +``` + +# 回归测试 + +在实现了能够运行所有`cpu-tests`和`riscv-tests`测试用例的指令后,可以通过以下命令对CPU进行一键回归测试。该命令会将`bin`目录下的所有`.bin`文件作为参数来调用接入了`香山difftest框架`的仿真程序,其中`xxx`表示例程名。 + +``` +./build.sh -e xxx -b -r +``` + +通过测试的用例,将打印`PASS`。测试失败的用例,打印`FAIL`并生成对应的log文件,可以查看log文件来调试,也可以另外开启波形输出来调试。 + +# 扩展 + +[一生一芯官网](https://oscpu.github.io/ysyx/) + +[会议汇总](https://oscpu.github.io/ysyx/events/) + +[讲座回放](https://www.bilibili.com/video/BV1PU4y1V7X3) + +[RISC-V Unprivileged Spec](https://github.com/riscv/riscv-isa-manual/releases/download/Ratified-IMAFDQC/riscv-spec-20191213.pdf) + +[RISC-V Privileged Spec](https://github.com/riscv/riscv-isa-manual/releases/download/Ratified-IMFDQC-and-Priv-v1.11/riscv-privileged-20190608.pdf) + +[cpu-tests](https://github.com/NJU-ProjectN/am-kernels) + +[riscv-test](https://github.com/NJU-ProjectN/riscv-tests) + +[香山difftest框架](https://github.com/OpenXiangShan/difftest) + +[NEMU](https://github.com/OpenXiangShan/NEMU) + +[DRAMsim3](https://github.com/OpenXiangShan/DRAMsim3) + +[AXI4 specification](http://www.gstitt.ece.ufl.edu/courses/fall15/eel4720_5721/labs/refs/AXI4_specification.pdf) -Use "./build.sh -h" command under Ubunutu terminal to get the build instructions. \ No newline at end of file diff --git a/build.sh b/build.sh index db77c23..f895de9 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION="1.9" +VERSION="1.10" help() { echo "Version v"$VERSION @@ -14,7 +14,7 @@ help() { echo "-a: Parameters passed to the simulation program. For example: -a \"1 2 3 ......\". Multiple parameters require double quotes." echo "-f: C++ compiler arguments for makefile. For example: -f \"-DGLOBAL_DEFINE=1 -ggdb3\". Multiple parameters require double quotes. This option is invalid when connected difftest." echo "-l: C++ linker arguments for makefile. For example: -l \"-ldl -lm\". Multiple parameters require double quotes. This option is invalid when connected difftest." - echo "-g: Debug the simulation program with GDB." + echo "-g: Debug the simulation program with GDB. This option is invalid when connected difftest." echo "-w: Open the latest waveform file(.vcd) using gtkwave under work path. Use the \"build_test\" or \"build\"(difftest) folder as work path." echo "-c: Delete \"build\" and \"build_test\" folders under the project directory." echo "-d: Connect to XiangShan difftest framework." @@ -33,22 +33,28 @@ create_soft_link() { done } -build_diff_proj() { - # Refresh the modification time of the top file, otherwise some changes to the RTL source code will not take effect in next compilation. - touch -m `find $BUILD_PATH -name $DIFFTEST_TOP_FILE` 1>/dev/null 2>&1 - # create soft link ($BUILD_PATH/*.v -> $PROJECT_PATH/$VSRC_FOLDER/*.v) - create_soft_link $BUILD_PATH $PROJECT_PATH/$VSRC_FOLDER \"*.v\" - # create soft link ($PROJECT_PATH/difftest -> $OSCPU_PATH/difftest) - eval "ln -s \"`realpath --relative-to="$OSCPU_PATH/$DIFFTEST_FOLDER" "$PROJECT_PATH"`/$DIFFTEST_FOLDER\" \"$PROJECT_PATH/$DIFFTEST_FOLDER\" 1>/dev/null 2>&1" +compile_dramsim3() { + if [[ ! -f $OSCPU_PATH/$DRAMSIM3_FOLDER/build/libdramsim3.a ]]; then + mkdir $OSCPU_PATH/$DRAMSIM3_FOLDER/build + cd $OSCPU_PATH/$DRAMSIM3_FOLDER/build + cmake -D COSIM=1 .. + make + cd $OSCPU_PATH + fi +} +compile_nemu() { cd $OSCPU_PATH/$DIFFTEST_FOLDER - # compile nemu make $OSCPU_PATH/$NEMU_FOLDER/build/riscv64-nemu-interpreter-so if [ $? -ne 0 ]; then echo "Failed to build nemu!!!" exit 1 fi - # compile difftest + cd $OSCPU_PATH +} + +compile_difftest() { + cd $OSCPU_PATH/$DIFFTEST_FOLDER make DESIGN_DIR=$PROJECT_PATH $DIFFTEST_PARAM if [ $? -ne 0 ]; then echo "Failed to build difftest!!!" @@ -57,6 +63,19 @@ build_diff_proj() { cd $OSCPU_PATH } +build_diff_proj() { + # Refresh the modification time of the top file, otherwise some changes to the RTL source code will not take effect in next compilation. + touch -m `find $BUILD_PATH -name $DIFFTEST_TOP_FILE` 1>/dev/null 2>&1 + # create soft link ($BUILD_PATH/*.v -> $PROJECT_PATH/$VSRC_FOLDER/*.v) + create_soft_link $BUILD_PATH $PROJECT_PATH/$VSRC_FOLDER \"*.v\" + # create soft link ($PROJECT_PATH/difftest -> $OSCPU_PATH/difftest) + eval "ln -s \"`realpath --relative-to="$OSCPU_PATH/$DIFFTEST_FOLDER" "$PROJECT_PATH"`/$DIFFTEST_FOLDER\" \"$PROJECT_PATH/$DIFFTEST_FOLDER\" 1>/dev/null 2>&1" + + compile_dramsim3 + compile_nemu + compile_difftest +} + build_proj() { cd $PROJECT_PATH @@ -81,7 +100,7 @@ build_proj() { # compile mkdir $BUILD_FOLDER 1>/dev/null 2>&1 - eval "verilator --cc --exe --trace --assert -O3 -CFLAGS \"-std=c++11 -Wall $INCLUDE_CSRC_FOLDERS $CFLAGS\" $LDFLAGS -o $PROJECT_PATH/$BUILD_FOLDER/$EMU_FILE \ + eval "verilator --x-assign unique --cc --exe --trace --assert -O3 -CFLAGS \"-std=c++11 -Wall $INCLUDE_CSRC_FOLDERS $CFLAGS\" $LDFLAGS -o $PROJECT_PATH/$BUILD_FOLDER/$EMU_FILE \ -Mdir $PROJECT_PATH/$BUILD_FOLDER/emu-compile $INCLUDE_VSRC_FOLDERS --build $V_TOP_FILE $CSRC_FILES" if [ $? -ne 0 ]; then echo "Failed to run verilator!!!" @@ -111,12 +130,13 @@ CFLAGS= LDFLAGS= GDB="false" DIFFTEST="false" -DIFFTEST_FOLDER="difftest" +DIFFTEST_FOLDER="libraries/difftest" DIFFTEST_TOP_FILE="SimTop.v" -NEMU_FOLDER="NEMU" +NEMU_FOLDER="libraries/NEMU" DIFFTEST_HELPER_PATH="src/test/vsrc/common" DIFFTEST_PARAM= RUNALL="false" +DRAMSIM3_FOLDER="libraries/DRAMsim3" # Check parameters while getopts 'he:bt:sa:f:l:gwcdm:r' OPT; do @@ -139,21 +159,15 @@ while getopts 'he:bt:sa:f:l:gwcdm:r' OPT; do esac done -if [[ $RUNALL == "true" ]]; then - DIFFTEST="true" -fi - -if [[ $LDFLAGS ]]; then - LDFLAGS="-LDFLAGS "\"$LDFLAGS\" -fi +[[ $RUNALL == "true" ]] && DIFFTEST="true" +[[ $LDFLAGS ]] && LDFLAGS="-LDFLAGS "\"$LDFLAGS\" PROJECT_PATH=$OSCPU_PATH/projects/$PROJECT_FOLDER [[ "$DIFFTEST" == "true" ]] && BUILD_PATH=$PROJECT_PATH/$DIFF_BUILD_FOLDER || BUILD_PATH=$PROJECT_PATH/$BUILD_FOLDER -if [[ "$DIFFTEST" == "true" ]]; then - V_TOP_FILE=$DIFFTEST_TOP_FILE - export NEMU_HOME=$OSCPU_PATH/$NEMU_FOLDER - export NOOP_HOME=$PROJECT_PATH -fi +[[ "$DIFFTEST" == "true" ]] && V_TOP_FILE=$DIFFTEST_TOP_FILE +export NEMU_HOME=$OSCPU_PATH/$NEMU_FOLDER +export NOOP_HOME=$PROJECT_PATH +export DRAMSIM3_HOME=$OSCPU_PATH/$DRAMSIM3_FOLDER # Get id and name ID=`sed '/^ID=/!d;s/.*=//' $MYINFO_FILE` @@ -168,9 +182,7 @@ NAME="${NAME##*\r}" # Clean if [[ "$CLEAN" == "true" ]]; then rm -rf $BUILD_PATH - if [[ "$DIFFTEST" == "true" ]]; then - unlink $PROJECT_PATH/$DIFFTEST_FOLDER 1>/dev/null 2>&1 - fi + [[ "$DIFFTEST" == "true" ]] && unlink $PROJECT_PATH/$DIFFTEST_FOLDER 1>/dev/null 2>&1 exit 0 fi @@ -193,11 +205,7 @@ if [[ "$SIMULATE" == "true" ]]; then # run simulation program echo "Simulating..." - if [[ "$GDB" == "true" ]]; then - gdb -s $EMU_FILE --args ./$EMU_FILE $PARAMETERS - else - ./$EMU_FILE $PARAMETERS - fi + [[ "$GDB" == "true" ]] && gdb -s $EMU_FILE --args ./$EMU_FILE $PARAMETERS || ./$EMU_FILE $PARAMETERS if [ $? -ne 0 ]; then echo "Failed to simulate!!!" @@ -218,9 +226,7 @@ if [[ "$CHECK_WAVE" == "true" ]]; then cd $OSCPU_PATH fi -if [[ "$FAILED" == "true" ]]; then - exit 1 -fi +[[ "$FAILED" == "true" ]] && exit 1 # Run all if [[ $RUNALL == "true" ]]; then diff --git a/difftest b/difftest deleted file mode 160000 index 086c891..0000000 --- a/difftest +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 086c891828d1f8a1a2738c90e0b10c1f98cc61e0 diff --git a/libraries/DRAMsim3 b/libraries/DRAMsim3 new file mode 160000 index 0000000..5723f6b --- /dev/null +++ b/libraries/DRAMsim3 @@ -0,0 +1 @@ +Subproject commit 5723f6b1cc157ac2d7b4154b50fd1799c9cf54aa diff --git a/libraries/NEMU/.gitignore b/libraries/NEMU/.gitignore new file mode 100644 index 0000000..2e6a558 --- /dev/null +++ b/libraries/NEMU/.gitignore @@ -0,0 +1,12 @@ +*.* +* +!*/ +!Makefile +!*.mk +!*.[cSh] +!.gitignore +!README.md +!scripts/runall.sh +!Kconfig +include/config +include/generated diff --git a/libraries/NEMU/Kconfig b/libraries/NEMU/Kconfig new file mode 100644 index 0000000..cd78d24 --- /dev/null +++ b/libraries/NEMU/Kconfig @@ -0,0 +1,286 @@ +mainmenu "NEMU Configuration Menu" + +choice + prompt "Base ISA" + default ISA_riscv32 +config ISA_x86 + bool "x86" +config ISA_mips32 + bool "mips32" +config ISA_riscv32 + bool "riscv32" +config ISA_riscv64 + bool "riscv64" +endchoice + +config ISA + string + default "x86" if ISA_x86 + default "mips32" if ISA_mips32 + default "riscv32" if ISA_riscv32 + default "riscv64" if ISA_riscv64 + default "none" + +config ILEN_MIN + int + default 1 if ISA_x86 + default 4 if ISA_mips32 + default 4 if ISA_riscv32 + default 2 if ISA_riscv64 + default 1 + +config ISA64 + depends on ISA_riscv64 + bool + default y + +if ISA_x86 +source "src/isa/x86/Kconfig" +endif + +if ISA_riscv64 +source "src/isa/riscv64/Kconfig" +endif + +choice + prompt "NEMU execution engine" + default ENGINE_INTERPRETER + +config ENGINE_INTERPRETER + bool "Interpreter" + help + Interpreter guest instructions one by one. +endchoice + +config ENGINE + string + default "interpreter" if ENGINE_INTERPRETER + default "none" + +choice + prompt "Running mode" + default MODE_SYSTEM + +config MODE_SYSTEM + bool "System mode" + help + Support full-system functionality, including privileged instructions, MMU and devices. + +config MODE_USER + bool "User mode" + help + Only support non-privileged instructions. System calls are forwarded to NEMU or Linux host. +endchoice + +menu "Build Options" +choice + prompt "Compiler" + default CC_GCC +config CC_GCC + bool "gcc" +config CC_GPP + bool "g++" +config CC_CLANG + bool "clang" +endchoice + +config CC + string + default "gcc" if CC_GCC + default "g++" if CC_GPP + default "clang" if CC_CLANG + default "none" + +choice + prompt "Optimization Level" + default CC_O2 +config CC_O0 + bool "O0" +config CC_O1 + bool "O1" +config CC_O2 + bool "O2" +config CC_O3 + bool "O3" +endchoice + +config CC_OPT + string + default "-O0" if CC_O0 + default "-O1" if CC_O1 + default "-O2" if CC_O2 + default "-O3" if CC_O3 + default "none" + +config CC_LTO + bool "Enable link-time optimization" + default y + +config CC_DEBUG + bool "Enable debug information" + default n + +config CC_ASAN + depends on !MODE_USER + bool "Enable address sanitizer" + default n +endmenu + +menu "Testing and Debugging" +config DEBUG + depends on !SHARE + bool "Enable debug features" + default n + help + Enable debug features, which include instruction tracing and watchpoint. + +config DIFFTEST + depends on !SHARE + bool "Enable differential testing" + default n + help + Enable differential testing with a reference design. + Note that this will significantly reduce the performance of NEMU. + +choice + prompt "Reference design" + default DIFFTEST_REF_QEMU_DL + depends on DIFFTEST +config DIFFTEST_REF_QEMU_DL + bool "QEMU, communicate with dynamic linking" +config DIFFTEST_REF_QEMU_SOCKET + bool "QEMU, communicate with socket" +config DIFFTEST_REF_KVM + bool "KVM" +config DIFFTEST_REF_NEMU + bool "NEMU" +endchoice + +config DIFFTEST_REF_QEMU + depends on DIFFTEST_REF_QEMU_DL || DIFFTEST_REF_QEMU_SOCKET + bool + default y + +config DIFFTEST_REF_PATH + string + default "tools/qemu-dl-diff" if DIFFTEST_REF_QEMU_DL + default "tools/qemu-socket-diff" if DIFFTEST_REF_QEMU_SOCKET + default "tools/kvm-diff" if DIFFTEST_REF_KVM + default "." if DIFFTEST_REF_NEMU + default "none" + +config DIFFTEST_REF_NAME + string + default "qemu" if DIFFTEST_REF_QEMU_DL + default "qemu" if DIFFTEST_REF_QEMU_SOCKET + default "kvm" if DIFFTEST_REF_KVM + default "nemu-interpreter" if DIFFTEST_REF_NEMU + default "none" + +config DETERMINISTIC + bool "Make the behavior of NEMU deterministic" + default n + +config IQUEUE + bool "Record the last instrucitons executed" + default n +endmenu + +if !MODE_USER +source "src/memory/Kconfig" +source "src/device/Kconfig" +endif + +choice + prompt "FPU Emulation" + default FPU_HOST +config FPU_HOST + bool "Use host floating point operation" +config FPU_SOFT + bool "Use softfloat library" +config FPU_NONE + bool "Disable FPU Emulation" +endchoice + +choice + prompt "Detecting misaligned memory accessing" + default AC_HOST +config AC_HOST + bool "By host CPU (x86 host only)" +config AC_SOFT + bool "By software emulation" +config AC_NONE + bool "Disable" +endchoice + +menu "Processor difftest reference config" +config SHARE + bool "Build shared library as processor difftest reference" + default n + +config DIFFTEST_STORE_COMMIT + depends on SHARE + bool "Maintain a committed store queue for processor ref" + default y + +config GUIDED_EXEC + depends on SHARE + bool "Enable DUT guided execution" + default y + +config LARGE_COPY + depends on SHARE && !MEM_RANDOM + bool "Enable difftest large memory copy optimization" + default n + +config PANIC_ON_UNIMP_CSR + depends on SHARE + bool "Panic if an unimplemented CSR is being accessed" + default n + +endmenu + +menu "Miscellaneous" +choice + prompt "Host timer" + default TIMER_GETTIMEOFDAY +config TIMER_GETTIMEOFDAY + bool "gettimeofday" +config TIMER_CLOCK_GETTIME + bool "clock_gettime" +endchoice + +config RT_CHECK + bool "Enable runtime checking" + default y + +config PERF_OPT + depends on !SHARE + bool "Performance optimization" + default y + +if PERF_OPT +config TCACHE_SIZE + int "Number of entries in trace cache" + default 8192 + +config BB_LIST_SIZE + int "Number of entries in basic block metadata list" + default 1024 + +config BB_POOL_SIZE + int "Number of entries in basic block metadata pool" + default 1024 + +if !DEBUG && !SHARE +config DISABLE_INSTR_CNT + bool "Disable instruction counting (single step is also disabled)" + default y +endif +endif + +config ENABLE_INSTR_CNT + bool + default n if DISABLE_INSTR_CNT + default y +endmenu diff --git a/libraries/NEMU/Makefile b/libraries/NEMU/Makefile new file mode 100644 index 0000000..7957fbc --- /dev/null +++ b/libraries/NEMU/Makefile @@ -0,0 +1,148 @@ +ifeq ($(wildcard $(NEMU_HOME)/src/nemu-main.c),) + $(error NEMU_HOME=$(NEMU_HOME) is not a NEMU repo) +endif + +-include $(NEMU_HOME)/include/config/auto.conf +-include $(NEMU_HOME)/include/config/auto.conf.cmd + +DIRS-y = src/cpu src/monitor src/utils +DIRS-$(CONFIG_MODE_SYSTEM) += src/memory + +remove_quote = $(patsubst "%",%,$(1)) + +ISA ?= $(if $(CONFIG_ISA),$(call remove_quote,$(CONFIG_ISA)),x86) +CFLAGS += -D__ISA__=$(ISA) +INC_DIR += $(NEMU_HOME)/src/isa/$(ISA)/include +DIRS-y += src/isa/$(ISA) + +ENGINE ?= $(call remove_quote,$(CONFIG_ENGINE)) +INC_DIR += $(NEMU_HOME)/src/engine/$(ENGINE) +DIRS-y += src/engine/$(ENGINE) + +DIRS-$(CONFIG_MODE_USER) += src/user + +SRCS-y += src/nemu-main.c +DIRS-$(CONFIG_DEVICE) += src/device/io +SRCS-$(CONFIG_DEVICE) += src/device/device.c src/device/alarm.c src/device/intr.c +SRCS-$(CONFIG_HAS_SERIAL) += src/device/serial.c +SRCS-$(CONFIG_HAS_UARTLITE) += src/device/uartlite.c +SRCS-$(CONFIG_HAS_TIMER) += src/device/timer.c +SRCS-$(CONFIG_HAS_KEYBOARD) += src/device/keyboard.c +SRCS-$(CONFIG_HAS_VGA) += src/device/vga.c +SRCS-$(CONFIG_HAS_AUDIO) += src/device/audio.c +SRCS-$(CONFIG_HAS_DISK) += src/device/disk.c +SRCS-$(CONFIG_HAS_SDCARD) += src/device/sdcard.c + +SRCS-y += $(shell find $(DIRS-y) -name "*.c") + +SRCS = $(SRCS-y) + +CC = $(call remove_quote,$(CONFIG_CC)) +CFLAGS_BUILD += $(call remove_quote,$(CONFIG_CC_OPT)) +CFLAGS_BUILD += $(if $(CONFIG_CC_LTO),-flto,) +CFLAGS_BUILD += $(if $(CONFIG_CC_DEBUG),-ggdb3,) +CFLAGS_BUILD += $(if $(CONFIG_CC_ASAN),-fsanitize=address,) +CFLAGS += $(CFLAGS_BUILD) +LDFLAGS += $(CFLAGS_BUILD) + +NAME = nemu-$(ENGINE) + +ifdef CONFIG_MEM_COMPRESS +LDFLAGS += -lz +endif + +ifndef CONFIG_SHARE +LDFLAGS += -lreadline -ldl -pie +else +SHARE = 1 +endif + +ifdef CONFIG_DEVICE +LDFLAGS += -lSDL2 +endif + +ifdef CONFIG_FPU_SOFT +SOFTFLOAT = resource/softfloat/build/softfloat.a +ifeq ($(ISA),riscv64) +SPECIALIZE_TYPE = RISCV +else +SPECIALIZE_TYPE = 8086-SSE +endif +ifdef CONFIG_SHARE +SOFTFLOAT_OPTS_DEFAULT = -DINLINE_LEVEL=5 \ + -DSOFTFLOAT_FAST_DIV32TO16 -DSOFTFLOAT_FAST_DIV64TO32 +SOFTFLOAT_OPTS_OVERRIDE = SOFTFLOAT_OPTS="$(SOFTFLOAT_OPTS_DEFAULT) -fPIC" +endif + +SOFTFLOAT_REPO_PATH = resource/softfloat/repo +ifeq ($(wildcard $(SOFTFLOAT_REPO_PATH)/COPYING.txt),) + $(shell git clone --depth=1 https://github.com/ucb-bar/berkeley-softfloat-3 $(SOFTFLOAT_REPO_PATH)) +endif +SOFTFLOAT_BUILD_PATH = $(abspath $(SOFTFLOAT_REPO_PATH)/build/Linux-x86_64-GCC) + +INC_DIR += $(SOFTFLOAT_REPO_PATH)/source/include +INC_DIR += $(SOFTFLOAT_REPO_PATH)/source/$(SPECIALIZE_TYPE) +LIBS += $(SOFTFLOAT) +$(SOFTFLOAT): + SPECIALIZE_TYPE=$(SPECIALIZE_TYPE) $(SOFTFLOAT_OPTS_OVERRIDE) $(MAKE) -s -C $(SOFTFLOAT_BUILD_PATH) all + mkdir -p $(@D) + ln -sf $(SOFTFLOAT_BUILD_PATH)/softfloat.a $@ + +clean-softfloat: + $(MAKE) -s -C $(SOFTFLOAT_BUILD_PATH) clean +clean-all: clean-softfloat + +.PHONY: $(SOFTFLOAT) clean-softfloat +else ifdef CONFIG_FPU_HOST +LDFLAGS += -lm +endif + +include $(NEMU_HOME)/scripts/git.mk +include $(NEMU_HOME)/scripts/config.mk +include $(NEMU_HOME)/scripts/isa.mk +include $(NEMU_HOME)/scripts/build.mk + +ifdef CONFIG_DIFFTEST +DIFF_REF_PATH = $(NEMU_HOME)/$(call remove_quote,$(CONFIG_DIFFTEST_REF_PATH)) +DIFF_REF_SO = $(DIFF_REF_PATH)/build/$(ISA)-$(call remove_quote,$(CONFIG_DIFFTEST_REF_NAME))-so +MKFLAGS = ISA=$(ISA) SHARE=1 ENGINE=interpreter +ARGS_DIFF = --diff=$(DIFF_REF_SO) + +ifndef CONFIG_DIFFTEST_REF_NEMU +$(DIFF_REF_SO): + $(MAKE) -s -C $(DIFF_REF_PATH) $(MKFLAGS) +endif + +.PHONY: $(DIFF_REF_SO) +endif + +compile_git: + $(call git_commit, "compile") +$(BINARY): compile_git + +# Some convenient rules + +override ARGS ?= --log=$(BUILD_DIR)/nemu-log.txt +override ARGS += $(ARGS_DIFF) + +# Command to execute NEMU +IMG ?= +NEMU_EXEC := $(BINARY) $(ARGS) $(IMG) + +run-env: $(BINARY) $(DIFF_REF_SO) + +run: run-env + $(call git_commit, "run") + $(NEMU_EXEC) + +gdb: run-env + $(call git_commit, "gdb") + gdb -s $(BINARY) --args $(NEMU_EXEC) + +clean-tools = $(dir $(shell find ./tools -name "Makefile")) +$(clean-tools): + -@$(MAKE) -s -C $@ clean +clean-tools: $(clean-tools) +clean-all: clean distclean clean-tools + +.PHONY: run gdb run-env clean-tools clean-all $(clean-tools) diff --git a/libraries/NEMU/README.md b/libraries/NEMU/README.md new file mode 100644 index 0000000..c8199f9 --- /dev/null +++ b/libraries/NEMU/README.md @@ -0,0 +1,46 @@ +# NEMU + +NEMU(NJU Emulator) is a simple but complete full-system emulator designed for teaching purpose. +Currently it supports x86, mips32, and riscv32. +To build programs run above NEMU, refer to the [AM project](https://github.com/NJU-ProjectN/abstract-machine). + +The main features of NEMU include +* a small monitor with a simple debugger + * single step + * register/memory examination + * expression evaluation without the support of symbols + * watch point + * differential testing with reference design (e.g. QEMU) + * snapshot +* CPU core with support of most common used instructions + * x86 + * real mode is not supported + * x87 floating point instructions are not supported + * mips32 + * CP1 floating point instructions are not supported + * riscv32 + * only RV32IM +* memory +* paging + * TLB is optional (but necessary for mips32) + * protection is not supported +* interrupt and exception + * protection is not supported +* 5 devices + * serial, timer, keyboard, VGA, audio + * most of them are simplified and unprogrammable +* 2 types of I/O + * port-mapped I/O and memory-mapped I/O + +## Howto + +### Run OpenSBI and Linux + +**All steps below use source code in RISCVERS** + +1. Compile a Linux kernel, with proper SD card driver integrated if you want to run Debian or Fedora. Currently Kernel v4.18 is verified to work. +2. Convert ```vmlinux``` to binary format using ```objcopy```. +3. Compile OpenSBI using ```build_linux.sh``` where vmlinux and dtb path may need a modification. dtb can be compiled with dts files located in ```dts``` subdirectory of OpenSBI. +4. Compile NEMU intepreter. You may want to change default sdcard image path in ```src/devices/sdcard.c``` to boot Debian or Fedora. +5. launch NEMU intepreter and load ```fw_payload.bin``` generated by OpenSBI. e.g. ```./build/riscv64-nemu-interpreter ~/Xiangshan_Linux/opensbi/build/platform/generic/firmware/fw_payload.bin``` +6. If you are using a ```vmlinux``` with initramfs, you will likely be greeted with a ```Hello```, otherwise you may see startup logs and finally a login prompt from Debian or Fedora if SD card is configured properly. diff --git a/libraries/NEMU/configs/.gitignore b/libraries/NEMU/configs/.gitignore new file mode 100644 index 0000000..31aa61c --- /dev/null +++ b/libraries/NEMU/configs/.gitignore @@ -0,0 +1 @@ +!*_defconfig diff --git a/libraries/NEMU/configs/riscv32-pa_defconfig b/libraries/NEMU/configs/riscv32-pa_defconfig new file mode 100644 index 0000000..6cc27a9 --- /dev/null +++ b/libraries/NEMU/configs/riscv32-pa_defconfig @@ -0,0 +1,4 @@ +CONFIG_CC_CLANG=y +CONFIG_CC_O3=y +CONFIG_CC_DEBUG=y +# CONFIG_VGA_SHOW_SCREEN is not set diff --git a/libraries/NEMU/configs/riscv64-pa_defconfig b/libraries/NEMU/configs/riscv64-pa_defconfig new file mode 100644 index 0000000..d1886ea --- /dev/null +++ b/libraries/NEMU/configs/riscv64-pa_defconfig @@ -0,0 +1,5 @@ +CONFIG_ISA_riscv64=y +CONFIG_CC_CLANG=y +CONFIG_CC_O3=y +CONFIG_PC_RESET_OFFSET=0x0 +# CONFIG_VGA_SHOW_SCREEN is not set diff --git a/libraries/NEMU/configs/riscv64-rvv_defconfig b/libraries/NEMU/configs/riscv64-rvv_defconfig new file mode 100644 index 0000000..55aabf5 --- /dev/null +++ b/libraries/NEMU/configs/riscv64-rvv_defconfig @@ -0,0 +1,99 @@ +# +# Automatically generated file; DO NOT EDIT. +# NEMU Configuration Menu +# +# CONFIG_ISA_x86 is not set +# CONFIG_ISA_mips32 is not set +# CONFIG_ISA_riscv32 is not set +CONFIG_ISA_riscv64=y +CONFIG_ISA="riscv64" +CONFIG_ILEN_MIN=2 +CONFIG_ISA64=y + +# +# ISA-dependent Options for riscv64 +# +CONFIG_CLINT_MMIO=0xa2000000 +CONFIG_RVV_010=y +# end of ISA-dependent Options for riscv64 + +CONFIG_ENGINE_INTERPRETER=y +CONFIG_ENGINE="interpreter" +CONFIG_MODE_SYSTEM=y +# CONFIG_MODE_USER is not set + +# +# Build Options +# +CONFIG_CC_GCC=y +# CONFIG_CC_GPP is not set +# CONFIG_CC_CLANG is not set +CONFIG_CC="gcc" +CONFIG_CC_O0=y +# CONFIG_CC_O1 is not set +# CONFIG_CC_O2 is not set +# CONFIG_CC_O3 is not set +CONFIG_CC_OPT="-O0" +CONFIG_CC_LTO=y +CONFIG_CC_DEBUG=y +# CONFIG_CC_ASAN is not set +# CONFIG_SHARE is not set +# end of Build Options + +# +# Testing and Debugging +# +# CONFIG_DEBUG is not set +# CONFIG_DIFFTEST is not set +CONFIG_DIFFTEST_REF_PATH="none" +CONFIG_DIFFTEST_REF_NAME="none" +CONFIG_DETERMINISTIC=y +# CONFIG_IQUEUE is not set +# end of Testing and Debugging + +# +# Memory Configuration +# +CONFIG_MBASE=0x80000000 +CONFIG_MSIZE=0x8000000 +CONFIG_PC_RESET_OFFSET=0x0 +CONFIG_USE_MMAP=y +CONFIG_MEM_RANDOM=y +# end of Memory Configuration + +CONFIG_DEVICE=y +CONFIG_HAS_PORT_IO=y +CONFIG_HAS_SERIAL=y +CONFIG_SERIAL_PORT=0x3f8 +CONFIG_SERIAL_MMIO=0xa10003f8 +# CONFIG_SERIAL_INPUT_FIFO is not set +CONFIG_HAS_TIMER=y +CONFIG_RTC_PORT=0x48 +CONFIG_RTC_MMIO=0xa1000048 +# CONFIG_HAS_KEYBOARD is not set +# CONFIG_HAS_VGA is not set +# CONFIG_HAS_AUDIO is not set +# CONFIG_HAS_DISK is not set +CONFIG_HAS_SDCARD=y +CONFIG_SDCARD_CTL_MMIO=0xa3000000 +CONFIG_SDCARD_IMG_PATH="" +CONFIG_FPU_HOST=y +# CONFIG_FPU_SOFT is not set +# CONFIG_FPU_NONE is not set +# CONFIG_AC_HOST is not set +# CONFIG_AC_SOFT is not set +CONFIG_AC_NONE=y + +# +# Miscellaneous +# +CONFIG_TIMER_GETTIMEOFDAY=y +# CONFIG_TIMER_CLOCK_GETTIME is not set +CONFIG_RT_CHECK=y +CONFIG_PERF_OPT=y +CONFIG_TCACHE_SIZE=8192 +CONFIG_BB_LIST_SIZE=1024 +CONFIG_BB_POOL_SIZE=1024 +# CONFIG_DISABLE_INSTR_CNT is not set +CONFIG_ENABLE_INSTR_CNT=y +# end of Miscellaneous diff --git a/libraries/NEMU/configs/riscv64-xs-ref_defconfig b/libraries/NEMU/configs/riscv64-xs-ref_defconfig new file mode 100644 index 0000000..82594eb --- /dev/null +++ b/libraries/NEMU/configs/riscv64-xs-ref_defconfig @@ -0,0 +1,86 @@ +# +# Automatically generated file; DO NOT EDIT. +# NEMU Configuration Menu +# +# CONFIG_ISA_x86 is not set +# CONFIG_ISA_mips32 is not set +# CONFIG_ISA_riscv32 is not set +CONFIG_ISA_riscv64=y +CONFIG_ISA="riscv64" +CONFIG_ILEN_MIN=2 +CONFIG_ISA64=y + +# +# ISA-dependent Options for riscv64 +# +CONFIG_CLINT_MMIO=0x38000000 +# CONFIG_RVV_010 is not set +# end of ISA-dependent Options for riscv64 + +CONFIG_ENGINE_INTERPRETER=y +CONFIG_ENGINE="interpreter" +CONFIG_MODE_SYSTEM=y +# CONFIG_MODE_USER is not set + +# +# Build Options +# +CONFIG_CC_GCC=y +# CONFIG_CC_GPP is not set +# CONFIG_CC_CLANG is not set +CONFIG_CC="gcc" +# CONFIG_CC_O0 is not set +# CONFIG_CC_O1 is not set +CONFIG_CC_O2=y +# CONFIG_CC_O3 is not set +CONFIG_CC_OPT="-O2" +CONFIG_CC_LTO=y +CONFIG_CC_DEBUG=y +# CONFIG_CC_ASAN is not set +# end of Build Options + +# +# Testing and Debugging +# +CONFIG_DIFFTEST_REF_PATH="none" +CONFIG_DIFFTEST_REF_NAME="none" +# CONFIG_DETERMINISTIC is not set +# CONFIG_IQUEUE is not set +# end of Testing and Debugging + +# +# Memory Configuration +# +CONFIG_MBASE=0x80000000 +CONFIG_MSIZE=0x200000000 +CONFIG_PC_RESET_OFFSET=0x0 +CONFIG_USE_MMAP=y +# CONFIG_MEM_RANDOM is not set +# CONFIG_MEM_COMPRESS is not set +# end of Memory Configuration + +# CONFIG_FPU_HOST is not set +CONFIG_FPU_SOFT=y +# CONFIG_FPU_NONE is not set +CONFIG_AC_HOST=y +# CONFIG_AC_SOFT is not set +# CONFIG_AC_NONE is not set + +# +# Processor difftest reference config +# +CONFIG_SHARE=y +CONFIG_DIFFTEST_STORE_COMMIT=y +CONFIG_GUIDED_EXEC=y +CONFIG_LARGE_COPY=y +# CONFIG_PANIC_ON_UNIMP_CSR is not set +# end of Processor difftest reference config + +# +# Miscellaneous +# +CONFIG_TIMER_GETTIMEOFDAY=y +# CONFIG_TIMER_CLOCK_GETTIME is not set +CONFIG_RT_CHECK=y +CONFIG_ENABLE_INSTR_CNT=y +# end of Miscellaneous diff --git a/libraries/NEMU/configs/riscv64-xs_defconfig b/libraries/NEMU/configs/riscv64-xs_defconfig new file mode 100644 index 0000000..fe34229 --- /dev/null +++ b/libraries/NEMU/configs/riscv64-xs_defconfig @@ -0,0 +1,113 @@ +# +# Automatically generated file; DO NOT EDIT. +# NEMU Configuration Menu +# +# CONFIG_ISA_x86 is not set +# CONFIG_ISA_mips32 is not set +# CONFIG_ISA_riscv32 is not set +CONFIG_ISA_riscv64=y +CONFIG_ISA="riscv64" +CONFIG_ILEN_MIN=2 +CONFIG_ISA64=y + +# +# ISA-dependent Options for riscv64 +# +CONFIG_CLINT_MMIO=0x38000000 +# CONFIG_RVV_010 is not set +# end of ISA-dependent Options for riscv64 + +CONFIG_ENGINE_INTERPRETER=y +CONFIG_ENGINE="interpreter" +CONFIG_MODE_SYSTEM=y +# CONFIG_MODE_USER is not set + +# +# Build Options +# +CONFIG_CC_GCC=y +# CONFIG_CC_GPP is not set +# CONFIG_CC_CLANG is not set +CONFIG_CC="gcc" +# CONFIG_CC_O0 is not set +# CONFIG_CC_O1 is not set +CONFIG_CC_O2=y +# CONFIG_CC_O3 is not set +CONFIG_CC_OPT="-O2" +CONFIG_CC_LTO=y +# CONFIG_CC_DEBUG is not set +# CONFIG_CC_ASAN is not set +# end of Build Options + +# +# Testing and Debugging +# +# CONFIG_DEBUG is not set +# CONFIG_DIFFTEST is not set +CONFIG_DIFFTEST_REF_PATH="none" +CONFIG_DIFFTEST_REF_NAME="none" +# CONFIG_DETERMINISTIC is not set +# CONFIG_IQUEUE is not set +# end of Testing and Debugging + +# +# Memory Configuration +# +CONFIG_MBASE=0x80000000 +CONFIG_MSIZE=0x200000000 +CONFIG_PC_RESET_OFFSET=0x0 +CONFIG_USE_MMAP=y +# CONFIG_MEM_RANDOM is not set +# CONFIG_MEM_COMPRESS is not set +# end of Memory Configuration + +CONFIG_DEVICE=y +CONFIG_HAS_PORT_IO=y +# CONFIG_HAS_SERIAL is not set +CONFIG_HAS_UARTLITE=y +CONFIG_UARTLITE_PORT=0x3f8 +CONFIG_UARTLITE_MMIO=0x40600000 +# CONFIG_UARTLITE_INPUT_FIFO is not set +CONFIG_HAS_TIMER=y +CONFIG_RTC_PORT=0x48 +CONFIG_RTC_MMIO=0xa1000048 +CONFIG_HAS_KEYBOARD=y +CONFIG_I8042_DATA_PORT=0x60 +CONFIG_I8042_DATA_MMIO=0xa1000060 +CONFIG_HAS_VGA=y +CONFIG_FB_ADDR=0x50000000 +CONFIG_VGA_CTL_PORT=0x100 +CONFIG_VGA_CTL_MMIO=0x40001000 +CONFIG_VGA_SHOW_SCREEN=n +CONFIG_VGA_SIZE_400x300=y +# CONFIG_VGA_SIZE_800x600 is not set +# CONFIG_HAS_AUDIO is not set +# CONFIG_HAS_DISK is not set +CONFIG_HAS_SDCARD=y +CONFIG_SDCARD_CTL_MMIO=0x40002000 +CONFIG_SDCARD_IMG_PATH="" +# CONFIG_FPU_HOST is not set +CONFIG_FPU_SOFT=y +# CONFIG_FPU_NONE is not set +# CONFIG_AC_HOST is not set +CONFIG_AC_SOFT=y +# CONFIG_AC_NONE is not set + +# +# Processor difftest reference config +# +# CONFIG_SHARE is not set +# end of Processor difftest reference config + +# +# Miscellaneous +# +CONFIG_TIMER_GETTIMEOFDAY=y +# CONFIG_TIMER_CLOCK_GETTIME is not set +CONFIG_RT_CHECK=y +CONFIG_PERF_OPT=y +CONFIG_TCACHE_SIZE=8192 +CONFIG_BB_LIST_SIZE=1024 +CONFIG_BB_POOL_SIZE=1024 +CONFIG_DISABLE_INSTR_CNT=y +# end of Miscellaneous diff --git a/libraries/NEMU/include/common.h b/libraries/NEMU/include/common.h new file mode 100644 index 0000000..4968f04 --- /dev/null +++ b/libraries/NEMU/include/common.h @@ -0,0 +1,30 @@ +#ifndef __COMMON_H__ +#define __COMMON_H__ + +#include +#include +#include +#include + +#include +#include + +#if CONFIG_MBASE + CONFIG_MSIZE > 0x100000000ul +#define PMEM64 1 +#endif + +typedef MUXDEF(CONFIG_ISA64, uint64_t, uint32_t) word_t; +typedef MUXDEF(CONFIG_ISA64, int64_t, int32_t) sword_t; +#define FMT_WORD MUXDEF(CONFIG_ISA64, "0x%016lx", "0x%08x") + +typedef word_t rtlreg_t; +typedef word_t vaddr_t; +typedef MUXDEF(PMEM64, uint64_t, uint32_t) paddr_t; +#define FMT_PADDR MUXDEF(PMEM64, "0x%016lx", "0x%08x") +typedef uint16_t ioaddr_t; + +#define CP printf("%s: %d\n", __FILE__, __LINE__);fflush( stdout ); + +#include + +#endif diff --git a/libraries/NEMU/include/cpu/cpu.h b/libraries/NEMU/include/cpu/cpu.h new file mode 100644 index 0000000..798abb6 --- /dev/null +++ b/libraries/NEMU/include/cpu/cpu.h @@ -0,0 +1,28 @@ +#ifndef __CPU_CPU_H__ +#define __CPU_CPU_H__ + +#include + +enum { + NEMU_EXEC_RUNNING = 0, // unused by longjmp() + NEMU_EXEC_END, + NEMU_EXEC_AGAIN, + NEMU_EXEC_EXCEPTION +}; + +void cpu_exec(uint64_t n); +__attribute__((noreturn)) void longjmp_exec(int cause); +__attribute__((noreturn)) void longjmp_exception(int ex_cause); + +enum { + SYS_STATE_UPDATE = 1, + SYS_STATE_FLUSH_TCACHE = 2, +}; +void set_sys_state_flag(int flag); +void mmu_tlb_flush(vaddr_t vaddr); + +struct Decode; +void save_globals(struct Decode *s); +void fetch_decode(struct Decode *s, vaddr_t pc); + +#endif diff --git a/libraries/NEMU/include/cpu/decode.h b/libraries/NEMU/include/cpu/decode.h new file mode 100644 index 0000000..de64980 --- /dev/null +++ b/libraries/NEMU/include/cpu/decode.h @@ -0,0 +1,167 @@ +#ifndef __CPU_DECODE_H__ +#define __CPU_DECODE_H__ + +#include + +#define OP_STR_SIZE 40 + +typedef struct { + union { + IFDEF(CONFIG_ISA_x86, uint64_t *pfreg); + IFDEF(CONFIG_ISA_x86, uint64_t fval); + rtlreg_t *preg; + word_t imm; + sword_t simm; + }; + IFDEF(CONFIG_ISA_x86, rtlreg_t val); + IFDEF(CONFIG_ISA_x86, uint8_t type); + IFDEF(CONFIG_ISA_x86, uint8_t reg); + IFDEF(CONFIG_RVV_010, rtlreg_t val); + IFDEF(CONFIG_RVV_010, uint8_t reg); + IFDEF(CONFIG_DEBUG, char str[OP_STR_SIZE]); +} Operand; + +enum { + INSTR_TYPE_N, // normal + INSTR_TYPE_J, // jump + INSTR_TYPE_B, // branch + INSTR_TYPE_I, // indirect +}; + +typedef struct Decode { + union { + struct { + struct Decode *tnext; // next pointer for taken branch and jump + struct Decode *ntnext; // next pointer for non-taken branch + }; + struct { // only used by tcache_tmp_pool + struct Decode *list_next; // next pointer for list + struct Decode *bb_src; // pointer recording the source of basic block direction + }; + }; + vaddr_t pc; + vaddr_t snpc; // sequential next pc + IFDEF (CONFIG_PERF_OPT, const void *EHelper); + IFNDEF(CONFIG_PERF_OPT, void (*EHelper)(struct Decode *)); + Operand dest, src1, src2; + vaddr_t jnpc; + uint16_t idx_in_bb; // the number of instruction in the basic block, start from 1 + uint8_t type; + ISADecodeInfo isa; + IFDEF(CONFIG_DEBUG, char logbuf[80]); + #ifdef CONFIG_RVV_010 + // for vector + int v_width; + uint32_t vm; + uint32_t src_vmode; + rtlreg_t tmp_reg[4]; + #endif // CONFIG_RVV_010 + +} Decode; + + +#define id_src1 (&s->src1) +#define id_src2 (&s->src2) +#define id_dest (&s->dest) + + +#define INSTR_LIST(f) INSTR_NULLARY(f) INSTR_UNARY(f) INSTR_BINARY(f) INSTR_TERNARY(f) + +#define def_EXEC_ID(name) \ + enum { concat(EXEC_ID_, name) = __COUNTER__ }; +#define def_all_EXEC_ID() MAP(INSTR_LIST, def_EXEC_ID) + +#define INSTR_CNT(name) + 1 +#define TOTAL_INSTR (0 MAP(INSTR_LIST, INSTR_CNT)) + + +#define def_THelper(name) \ + static inline int concat(table_, name) (Decode *s) +#define def_THelper_arity(name, arity) \ + def_THelper(name) { concat(print_asm_template, arity)(name); return concat(EXEC_ID_, name); } +#define def_THelper_nullary(name) def_THelper_arity(name, 0) +#define def_THelper_unary(name) def_THelper_arity(name, 1) +#define def_THelper_binary(name) def_THelper_arity(name, 2) +#define def_THelper_ternary(name) def_THelper_arity(name, 3) + +#define def_all_THelper() \ + MAP(INSTR_NULLARY, def_THelper_nullary) \ + MAP(INSTR_UNARY, def_THelper_unary ) \ + MAP(INSTR_BINARY, def_THelper_binary ) \ + MAP(INSTR_TERNARY, def_THelper_ternary) + + +#define def_DHelper(name) void concat(decode_, name) (Decode *s, int width) +// empty decode helper +static inline def_DHelper(empty) {} + +#define CASE_ENTRY(idx, id, tab) case idx: id(s); return tab(s); +#define IDTAB(idx, id, tab) CASE_ENTRY(idx, concat(decode_, id), concat(table_, tab)) +#define TAB(idx, tab) IDTAB(idx, empty, tab) +#define EMPTY(idx) TAB(idx, inv) + +__attribute__((always_inline)) +static inline void pattern_decode(const char *str, int len, + uint32_t *key, uint32_t *mask, uint32_t *shift) { + uint32_t __key = 0, __mask = 0, __shift = 0; +#define macro(i) \ + if ((i) >= len) goto finish; \ + else { \ + char c = str[i]; \ + if (c != ' ') { \ + Assert(c == '0' || c == '1' || c == '?', \ + "invalid character '%c' in pattern string", c); \ + __key = (__key << 1) | (c == '1' ? 1 : 0); \ + __mask = (__mask << 1) | (c == '?' ? 0 : 1); \ + __shift = (c == '?' ? __shift + 1 : 0); \ + } \ + } + +#define macro2(i) macro(i); macro((i) + 1) +#define macro4(i) macro2(i); macro2((i) + 2) +#define macro8(i) macro4(i); macro4((i) + 4) +#define macro16(i) macro8(i); macro8((i) + 8) +#define macro32(i) macro16(i); macro16((i) + 16) +#define macro64(i) macro32(i); macro32((i) + 32) + macro64(0); +#undef macro +finish: + *key = __key >> __shift; + *mask = __mask >> __shift; + *shift = __shift; +} + +#define def_INSTR_raw(pattern, body) do { \ + uint32_t key, mask, shift; \ + pattern_decode(pattern, STRLEN(pattern), &key, &mask, &shift); \ + if (((get_instr(s) >> shift) & mask) == key) { body; } \ +} while (0) + +#define def_INSTR_IDTABW(pattern, id, tab, width) \ + def_INSTR_raw(pattern, { concat(decode_, id)(s, width); return concat(table_, tab)(s); }) + +#define def_INSTR_IDTAB(pattern, id, tab) def_INSTR_IDTABW(pattern, id, tab, 0) +#define def_INSTR_TABW(pattern, tab, width) def_INSTR_IDTABW(pattern, empty, tab, width) +#define def_INSTR_TAB(pattern, tab) def_INSTR_IDTABW(pattern, empty, tab, 0) + + +#define print_Dop(...) IFDEF(CONFIG_DEBUG, snprintf(__VA_ARGS__)) +#define print_asm(...) IFDEF(CONFIG_DEBUG, snprintf(log_asmbuf, sizeof(log_asmbuf), __VA_ARGS__)) + +#ifndef suffix_char +#define suffix_char(width) ' ' +#endif + +#define print_asm_template0(instr) \ + print_asm(str(instr) "%c", suffix_char(id_dest->width)) + +#define print_asm_template1(instr) \ + print_asm(str(instr) "%c %s", suffix_char(id_dest->width), id_dest->str) + +#define print_asm_template2(instr) \ + print_asm(str(instr) "%c %s,%s", suffix_char(id_dest->width), id_src1->str, id_dest->str) + +#define print_asm_template3(instr) \ + print_asm(str(instr) "%c %s,%s,%s", suffix_char(id_dest->width), id_src1->str, id_src2->str, id_dest->str) + +#endif diff --git a/libraries/NEMU/include/cpu/difftest.h b/libraries/NEMU/include/cpu/difftest.h new file mode 100644 index 0000000..3ac97b0 --- /dev/null +++ b/libraries/NEMU/include/cpu/difftest.h @@ -0,0 +1,37 @@ +#ifndef __CPU_DIFFTEST_H__ +#define __CPU_DIFFTEST_H__ + +#include +#include + +#ifdef CONFIG_DIFFTEST +void difftest_skip_ref(); +void difftest_skip_dut(int nr_ref, int nr_dut); +void difftest_set_patch(void (*fn)(void *arg), void *arg); +void difftest_step(vaddr_t pc, vaddr_t npc); +void difftest_detach(); +void difftest_attach(); +#else +static inline void difftest_skip_ref() {} +static inline void difftest_skip_dut(int nr_ref, int nr_dut) {} +static inline void difftest_set_patch(void (*fn)(void *arg), void *arg) {} +static inline void difftest_step(vaddr_t pc, vaddr_t npc) {} +static inline void difftest_detach() {} +static inline void difftest_attach() {} +#endif + +extern void (*ref_difftest_memcpy)(paddr_t dest, void *src, size_t n, bool direction); +extern void (*ref_difftest_regcpy)(void *c, bool direction); +extern void (*ref_difftest_exec)(uint64_t n); +extern void (*ref_difftest_raise_intr)(uint64_t NO); + +static inline bool difftest_check_reg(const char *name, vaddr_t pc, rtlreg_t ref, rtlreg_t dut) { + if (ref != dut) { + Log("%s is different after executing instruction at pc = " FMT_WORD + ", right = " FMT_WORD ", wrong = " FMT_WORD, name, pc, ref, dut); + return false; + } + return true; +} + +#endif diff --git a/libraries/NEMU/include/cpu/exec.h b/libraries/NEMU/include/cpu/exec.h new file mode 100644 index 0000000..ef847d8 --- /dev/null +++ b/libraries/NEMU/include/cpu/exec.h @@ -0,0 +1,29 @@ +#ifndef __CPU_EXEC_H__ +#define __CPU_EXEC_H__ + +#include + +#ifdef CONFIG_PERF_OPT +#define finish_label exec_finish +#define def_label(l) l: +#define def_EHelper(name) \ + s ++; \ + goto finish_label; /* this is for the previous def_EHelper() */ \ + def_label(concat(exec_, name)) +#define def_finish() def_label(finish_label) +#else +#define def_EHelper(name) static inline void concat(exec_, name) (Decode *s) +#endif + +#if 0 +#define IDEXW(idx, id, ex, w) CASE_ENTRY(idx, concat(decode_, id), concat(exec_, ex), w) +#define IDEX(idx, id, ex) IDEXW(idx, id, ex, 0) +#define EXW(idx, ex, w) IDEXW(idx, empty, ex, w) +#define EX(idx, ex) EXW(idx, ex, 0) +#define EMPTY(idx) EX(idx, inv) + +// set_width() is defined in src/isa/$isa/exec/exec.c +#define CASE_ENTRY(idx, id, ex, w) case idx: set_width(s, w); id(s); ex(s); break; +#endif + +#endif diff --git a/libraries/NEMU/include/cpu/ifetch.h b/libraries/NEMU/include/cpu/ifetch.h new file mode 100644 index 0000000..0c67dc9 --- /dev/null +++ b/libraries/NEMU/include/cpu/ifetch.h @@ -0,0 +1,23 @@ +#ifndef __CPU_IFETCH_H__ + +#include + +static inline uint32_t instr_fetch(vaddr_t *pc, int len) { + uint32_t instr = vaddr_ifetch(*pc, len); +#ifdef ENABLE_DIFFTEST_INSTR_QUEUE + extern void add_instr(uint8_t *instr, int len); + add_instr((void *)&instr, len); +#endif +#ifdef CONFIG_DEBUG + uint8_t *p_instr = (void *)&instr; + int i; + for (i = 0; i < len; i ++) { + int l = strlen(log_bytebuf); + snprintf(log_bytebuf + l, sizeof(log_bytebuf) - l, "%02x ", p_instr[i]); + } +#endif + (*pc) += len; + return instr; +} + +#endif diff --git a/libraries/NEMU/include/debug.h b/libraries/NEMU/include/debug.h new file mode 100644 index 0000000..7bbed92 --- /dev/null +++ b/libraries/NEMU/include/debug.h @@ -0,0 +1,31 @@ +#ifndef __DEBUG_H__ +#define __DEBUG_H__ + +#include +#include +#include + +#define Log(format, ...) \ + _Log("\33[1;34m[%s,%d,%s] " format "\33[0m\n", \ + __FILE__, __LINE__, __func__, ## __VA_ARGS__) + +#define Assert(cond, ...) \ + do { \ + if (!(cond)) { \ + fflush(stdout); \ + fprintf(stderr, "\33[1;31m"); \ + fprintf(stderr, __VA_ARGS__); \ + fprintf(stderr, "\33[0m\n"); \ + extern void isa_reg_display(); \ + extern void monitor_statistic(); \ + isa_reg_display(); \ + monitor_statistic(); \ + assert(cond); \ + } \ + } while (0) + +#define panic(...) Assert(0, __VA_ARGS__) + +#define TODO() panic("please implement me") + +#endif diff --git a/libraries/NEMU/include/device/alarm.h b/libraries/NEMU/include/device/alarm.h new file mode 100644 index 0000000..e3c062e --- /dev/null +++ b/libraries/NEMU/include/device/alarm.h @@ -0,0 +1,7 @@ +#ifndef __DEVICE_ALARM_H__ +#define __DEVICE_ALARM_H__ + +typedef void (*alarm_handler_t) (); +void add_alarm_handle(alarm_handler_t h); + +#endif diff --git a/libraries/NEMU/include/device/map.h b/libraries/NEMU/include/device/map.h new file mode 100644 index 0000000..505144d --- /dev/null +++ b/libraries/NEMU/include/device/map.h @@ -0,0 +1,41 @@ +#ifndef __DEVICE_MAP_H__ +#define __DEVICE_MAP_H__ + +#include + +typedef void(*io_callback_t)(uint32_t, int, bool); +uint8_t* new_space(int size); + +typedef struct { + const char *name; + // we treat ioaddr_t as paddr_t here + paddr_t low; + paddr_t high; + void *space; + io_callback_t callback; +} IOMap; + +static inline bool map_inside(IOMap *map, paddr_t addr) { + return (addr >= map->low && addr <= map->high); +} + +static inline int find_mapid_by_addr(IOMap *maps, int size, paddr_t addr) { + int i; + for (i = 0; i < size; i ++) { + if (map_inside(maps + i, addr)) { + difftest_skip_ref(); + return i; + } + } + return -1; +} + +void add_pio_map(const char *name, ioaddr_t addr, + void *space, uint32_t len, io_callback_t callback); +void add_mmio_map(const char *name, paddr_t addr, + void *space, uint32_t len, io_callback_t callback); + +word_t map_read(paddr_t addr, int len, IOMap *map); +void map_write(paddr_t addr, int len, word_t data, IOMap *map); + +#endif diff --git a/libraries/NEMU/include/device/mmio.h b/libraries/NEMU/include/device/mmio.h new file mode 100644 index 0000000..693bfe7 --- /dev/null +++ b/libraries/NEMU/include/device/mmio.h @@ -0,0 +1,9 @@ +#ifndef __DEVICE_MMIO_H__ +#define __DEVICE_MMIO_H__ + +#include + +word_t mmio_read(paddr_t addr, int len); +void mmio_write(paddr_t addr, int len, word_t data); + +#endif diff --git a/libraries/NEMU/include/isa.h b/libraries/NEMU/include/isa.h new file mode 100644 index 0000000..b4d6506 --- /dev/null +++ b/libraries/NEMU/include/isa.h @@ -0,0 +1,57 @@ +#ifndef __ISA_H__ +#define __ISA_H__ + +// Located at src/isa/$(ISA)/include/isa-def.h +#include + +// The macro `__ISA__` is defined in $(CFLAGS). +// It will be expanded as "x86" or "mips32" ... +typedef concat(__ISA__, _CPU_state) CPU_state; +typedef concat(__ISA__, _ISADecodeInfo) ISADecodeInfo; + +// monitor +extern char isa_logo[]; +void init_isa(); + +// reg +extern CPU_state cpu; +extern rtlreg_t csr_array[4096]; +void isa_reg_display(); +word_t isa_reg_str2val(const char *name, bool *success); + +// exec +struct Decode; +int isa_fetch_decode(struct Decode *s); +void isa_hostcall(uint32_t id, rtlreg_t *dest, const rtlreg_t *src1, + const rtlreg_t *src2, word_t imm); + +// memory +enum { MMU_DIRECT, MMU_TRANSLATE, MMU_DYNAMIC }; +enum { MEM_TYPE_IFETCH, MEM_TYPE_READ, MEM_TYPE_WRITE }; +enum { MEM_RET_OK, MEM_RET_FAIL, MEM_RET_CROSS_PAGE }; +#ifndef isa_mmu_state +int isa_mmu_state(); +#endif +#ifndef isa_mmu_check +int isa_mmu_check(vaddr_t vaddr, int len, int type); +#endif +paddr_t isa_mmu_translate(vaddr_t vaddr, int len, int type); + +// interrupt +vaddr_t raise_intr(word_t NO, vaddr_t epc); +#define INTR_EMPTY ((word_t)-1) +word_t isa_query_intr(); + +// difftest + // for dut +bool isa_difftest_checkregs(CPU_state *ref_r, vaddr_t pc); +void isa_difftest_attach(); + + // for ref +void isa_difftest_regcpy(void *dut, bool direction); +void isa_difftest_csrcpy(void *dut, bool direction); +void isa_difftest_raise_intr(word_t NO); +void isa_difftest_uarchstatus_cpy(void *dut, bool direction); +void isa_difftest_guided_exec(void * guide); + +#endif diff --git a/libraries/NEMU/include/macro.h b/libraries/NEMU/include/macro.h new file mode 100644 index 0000000..61cfbd3 --- /dev/null +++ b/libraries/NEMU/include/macro.h @@ -0,0 +1,88 @@ +#ifndef __MACRO_H__ +#define __MACRO_H__ + +#include + +// macro stringizing +#define str_temp(x) #x +#define str(x) str_temp(x) + +// strlen() for string constant +#define STRLEN(CONST_STR) (sizeof(CONST_STR) - 1) + +// calculate the length of an array +#define ARRLEN(arr) (int)(sizeof(arr) / sizeof(arr[0])) + +// macro concatenation +#define concat_temp(x, y) x ## y +#define concat(x, y) concat_temp(x, y) +#define concat3(x, y, z) concat(concat(x, y), z) +#define concat4(x, y, z, w) concat3(concat(x, y), z, w) +#define concat5(x, y, z, v, w) concat4(concat(x, y), z, v, w) + +// macro testing +// See https://stackoverflow.com/questions/26099745/test-if-preprocessor-symbol-is-defined-inside-macro +#define CHOOSE2nd(a, b, ...) b +#define MUX_WITH_COMMA(contain_comma, a, b) CHOOSE2nd(contain_comma a, b) +#define MUX_MACRO_PROPERTY(p, macro, a, b) MUX_WITH_COMMA(concat(p, macro), a, b) +// define placeholders for some property +#define __P_DEF_0 X, +#define __P_DEF_1 X, +#define __P_ONE_1 X, +#define __P_ZERO_0 X, +// define some selection functions based on the properties of BOOLEAN macro +#define MUXDEF(macro, X, Y) MUX_MACRO_PROPERTY(__P_DEF_, macro, X, Y) +#define MUXNDEF(macro, X, Y) MUX_MACRO_PROPERTY(__P_DEF_, macro, Y, X) +#define MUXONE(macro, X, Y) MUX_MACRO_PROPERTY(__P_ONE_, macro, X, Y) +#define MUXZERO(macro, X, Y) MUX_MACRO_PROPERTY(__P_ZERO_,macro, X, Y) + +// test if a boolean macro is defined +#define ISDEF(macro) MUXDEF(macro, 1, 0) +// test if a boolean macro is undefined +#define ISNDEF(macro) MUXNDEF(macro, 1, 0) +// test if a boolean macro is defined to 1 +#define ISONE(macro) MUXONE(macro, 1, 0) +// test if a boolean macro is defined to 0 +#define ISZERO(macro) MUXZERO(macro, 1, 0) +// test if a macro of ANY type is defined +// NOTE1: it ONLY works inside a function, since it calls `strcmp()` +// NOTE2: macros defined to themselves (#define A A) will get wrong results +#define isdef(macro) (strcmp("" #macro, "" str(macro)) != 0) + +// simplification for conditional compilation +#define __IGNORE(...) +#define __KEEP(...) __VA_ARGS__ +// keep the code if a boolean macro is defined +#define IFDEF(macro, ...) MUXDEF(macro, __KEEP, __IGNORE)(__VA_ARGS__) +// keep the code if a boolean macro is undefined +#define IFNDEF(macro, ...) MUXNDEF(macro, __KEEP, __IGNORE)(__VA_ARGS__) +// keep the code if a boolean macro is defined to 1 +#define IFONE(macro, ...) MUXONE(macro, __KEEP, __IGNORE)(__VA_ARGS__) +// keep the code if a boolean macro is defined to 0 +#define IFZERO(macro, ...) MUXZERO(macro, __KEEP, __IGNORE)(__VA_ARGS__) + +// functional-programming-like macro (X-macro) +// apply the function `f` to each element in the contain `c` +// NOTE1: `c` should be defined as a list like: +// f(a0) f(a1) f(a2) ... +// NOTE2: each element in the contain can be a tuple +#define MAP(c, f) c(f) + +#define BITMASK(bits) ((1 << (bits)) - 1) +#define BITS(x, hi, lo) (((x) >> (lo)) & BITMASK((hi) - (lo) + 1)) // similar to x[hi:lo] in verilog +#define SEXT(x, len) ({ struct { int64_t n : len; } __x = { .n = x }; (int64_t)__x.n; }) + +#define ROUNDUP(a, sz) ((((uintptr_t)a) + (sz) - 1) & ~((sz) - 1)) +#define ROUNDDOWN(a, sz) ((((uintptr_t)a)) & ~((sz) - 1)) + +#define PG_ALIGN __attribute((aligned(4096))) + +#if 1 +#define likely(cond) __builtin_expect(cond, 1) +#define unlikely(cond) __builtin_expect(cond, 0) +#else +#define likely(cond) (cond) +#define unlikely(cond) (cond) +#endif + +#endif diff --git a/libraries/NEMU/include/memory/host-tlb.h b/libraries/NEMU/include/memory/host-tlb.h new file mode 100644 index 0000000..147581f --- /dev/null +++ b/libraries/NEMU/include/memory/host-tlb.h @@ -0,0 +1,12 @@ +#ifndef __MEMORY_HOST_TLB_H__ +#define __MEMORY_HOST_TLB_H__ + +#include + +struct Decode; +word_t hosttlb_read(struct Decode *s, vaddr_t vaddr, int len, int type); +void hosttlb_write(struct Decode *s, vaddr_t vaddr, int len, word_t data); +void hosttlb_init(); +void hosttlb_flush(vaddr_t vaddr); + +#endif diff --git a/libraries/NEMU/include/memory/host.h b/libraries/NEMU/include/memory/host.h new file mode 100644 index 0000000..ce9acec --- /dev/null +++ b/libraries/NEMU/include/memory/host.h @@ -0,0 +1,26 @@ +#ifndef __MEMORY_HOST_H__ +#define __MEMORY_HOST_H__ + +#include + +static inline word_t host_read(void *addr, int len) { + switch (len) { + case 1: return *(uint8_t *)addr; + case 2: return *(uint16_t *)addr; + case 4: return *(uint32_t *)addr; + IFDEF(CONFIG_ISA64, case 8: return *(uint64_t *)addr); + default: MUXDEF(CONFIG_RT_CHECK, assert(0), return 0); + } +} + +static inline void host_write(void *addr, int len, word_t data) { + switch (len) { + case 1: *(uint8_t *)addr = data; return; + case 2: *(uint16_t *)addr = data; return; + case 4: *(uint32_t *)addr = data; return; + IFDEF(CONFIG_ISA64, case 8: *(uint64_t *)addr = data; return); + IFDEF(CONFIG_RT_CHECK, default: assert(0)); + } +} + +#endif diff --git a/libraries/NEMU/include/memory/paddr.h b/libraries/NEMU/include/memory/paddr.h new file mode 100644 index 0000000..39ef10c --- /dev/null +++ b/libraries/NEMU/include/memory/paddr.h @@ -0,0 +1,53 @@ +#ifndef __MEMORY_PADDR_H__ +#define __MEMORY_PADDR_H__ + +#include + +#ifdef CONFIG_MODE_USER +#define CONFIG_MBASE 0 +#define CONFIG_MSIZE 0 +#define CONFIG_PC_RESET_OFFSET 0 +#endif + +#define RESET_VECTOR (CONFIG_MBASE + CONFIG_PC_RESET_OFFSET) + +void init_mem(); + +/* convert the guest physical address in the guest program to host virtual address in NEMU */ +uint8_t* guest_to_host(paddr_t paddr); +/* convert the host virtual address in NEMU to guest physical address in the guest program */ +paddr_t host_to_guest(uint8_t *haddr); + +static inline bool in_pmem(paddr_t addr) { + paddr_t mbase_mask = CONFIG_MBASE - 1; + paddr_t msize_mask = CONFIG_MSIZE - 1; + bool mbase_align = (CONFIG_MBASE & mbase_mask) == 0; + bool msize_align = (CONFIG_MSIZE & msize_mask) == 0; + bool msize_inside_mbase = msize_mask <= mbase_mask; + if (mbase_align && msize_align && msize_inside_mbase) { + return (addr & ~msize_mask) == CONFIG_MBASE; + } else { + return (addr >= CONFIG_MBASE) && (addr < (paddr_t)CONFIG_MBASE + CONFIG_MSIZE); + } +} + +word_t paddr_read(paddr_t addr, int len); +void paddr_write(paddr_t addr, int len, word_t data); + +#ifdef CONFIG_DIFFTEST_STORE_COMMIT + +#define STORE_QUEUE_SIZE 48 +typedef struct { + uint64_t addr; + uint64_t data; + uint8_t mask; + uint8_t valid; +} store_commit_t; +extern store_commit_t store_commit_queue[STORE_QUEUE_SIZE]; + +void store_commit_queue_push(uint64_t addr, uint64_t data, int len); +store_commit_t *store_commit_queue_pop(); +int check_store_commit(uint64_t *addr, uint64_t *data, uint8_t *mask); +#endif + +#endif diff --git a/libraries/NEMU/include/memory/vaddr.h b/libraries/NEMU/include/memory/vaddr.h new file mode 100644 index 0000000..eebb0f8 --- /dev/null +++ b/libraries/NEMU/include/memory/vaddr.h @@ -0,0 +1,19 @@ +#ifndef __MEMORY_VADDR_H__ +#define __MEMORY_VADDR_H__ + +#include + +struct Decode; +word_t vaddr_ifetch(vaddr_t addr, int len); +word_t vaddr_read(struct Decode *s, vaddr_t addr, int len, int mmu_mode); +void vaddr_write(struct Decode *s, vaddr_t addr, int len, word_t data, int mmu_mode); + +word_t vaddr_read_safe(vaddr_t addr, int len); + +#define PAGE_SHIFT 12 +#define PAGE_SIZE (1ul << PAGE_SHIFT) +#define PAGE_MASK (PAGE_SIZE - 1) + +int force_raise_pf(vaddr_t vaddr, int type); + +#endif diff --git a/libraries/NEMU/include/rtl/fp.h b/libraries/NEMU/include/rtl/fp.h new file mode 100644 index 0000000..6c87302 --- /dev/null +++ b/libraries/NEMU/include/rtl/fp.h @@ -0,0 +1,61 @@ +#ifndef __RTL_FP_H__ +#define __RTL_FP_H__ + +enum { + FPCALL_W32, + FPCALL_W64, + FPCALL_W128, + FPCALL_W80, +}; + +enum { + FPCALL_RM_RNE, // round to nearest, ties to even + FPCALL_RM_RTZ, // round towards zero + FPCALL_RM_RDN, // round down (towards -INF) + FPCALL_RM_RUP, // round up (towards +INF) + FPCALL_RM_RMM, // round to nearest, ties to max magnitude +}; + +enum { + FPCALL_EX_NX = 0x01, // inexact + FPCALL_EX_UF = 0x02, // underflow + FPCALL_EX_OF = 0x04, // overflow + FPCALL_EX_DZ = 0x08, // divide by zero + FPCALL_EX_NV = 0x10, // invalid operation +}; + +enum { + FPCALL_ADD, + FPCALL_SUB, + FPCALL_MUL, + FPCALL_DIV, + FPCALL_SQRT, + FPCALL_MADD, + + FPCALL_I32ToF, + FPCALL_U32ToF, + FPCALL_I64ToF, + FPCALL_U64ToF, + + FPCALL_FToI32, + FPCALL_FToU32, + FPCALL_FToI64, + FPCALL_FToU64, + + FPCALL_F32ToF64, + FPCALL_F64ToF32, + + FPCALL_NEED_RM, // seperator + + FPCALL_MAX, + FPCALL_MIN, + FPCALL_LE, + FPCALL_EQ, + FPCALL_LT, +}; + +#define FPCALL_CMD(op, w) (((op) << 16) | (w)) +#define FPCALL_OP(cmd) ((cmd) >> 16) +#define FPCALL_W(cmd) ((cmd) & 0x3) + +#endif diff --git a/libraries/NEMU/include/rtl/pseudo.h b/libraries/NEMU/include/rtl/pseudo.h new file mode 100644 index 0000000..8bf15a6 --- /dev/null +++ b/libraries/NEMU/include/rtl/pseudo.h @@ -0,0 +1,101 @@ +#ifndef __RTL_PSEUDO_H__ +#define __RTL_PSEUDO_H__ + +#ifndef __RTL_RTL_H__ +#error "Should be only included by " +#endif + +/* RTL pseudo instructions */ + +static inline def_rtl(li, rtlreg_t* dest, const rtlreg_t imm) { + rtl_addi(s, dest, rz, imm); +} + +static inline def_rtl(mv, rtlreg_t* dest, const rtlreg_t *src1) { + rtl_addi(s, dest, src1, 0); +} + +static inline def_rtl(not, rtlreg_t *dest, const rtlreg_t* src1) { + // dest <- ~src1 +#ifdef __ICS_EXPORT + TODO(); +#else + rtl_xori(s, dest, src1, -1); +#endif +} + +static inline def_rtl(neg, rtlreg_t *dest, const rtlreg_t* src1) { + // dest <- -src1 +#ifdef __ICS_EXPORT + TODO(); +#else + rtl_sub(s, dest, rz, src1); +#endif +} + +static inline def_rtl(sext, rtlreg_t* dest, const rtlreg_t* src1, int width) { + // dest <- signext(src1[(width * 8 - 1) .. 0]) +#ifdef __ICS_EXPORT + TODO(); +#else + const int word_size = sizeof(word_t); + if (width == word_size) { + rtl_mv(s, dest, src1); + } else { +#ifdef CONFIG_RT_CHECK + assert(width == 1 || width == 2 || MUXDEF(CONFIG_ISA64, width == 4, false)); +#endif + rtl_shli(s, dest, src1, (word_size - width) * 8); + rtl_sari(s, dest, dest, (word_size - width) * 8); + } +#endif +} + +static inline def_rtl(zext, rtlreg_t* dest, const rtlreg_t* src1, int width) { + // dest <- zeroext(src1[(width * 8 - 1) .. 0]) +#ifdef __ICS_EXPORT + TODO(); +#else + const int word_size = sizeof(word_t); + if (width == word_size) { + rtl_mv(s, dest, src1); + } else { +#ifdef CONFIG_RT_CHECK + assert(width == 1 || width == 2 || MUXDEF(CONFIG_ISA64, width == 4, false)); +#endif + rtl_shli(s, dest, src1, (word_size - width) * 8); + rtl_shri(s, dest, dest, (word_size - width) * 8); + } +#endif +} + +static inline def_rtl(msb, rtlreg_t* dest, const rtlreg_t* src1, int width) { + // dest <- src1[width * 8 - 1] +#ifdef __ICS_EXPORT + TODO(); +#else + rtl_shri(s, dest, src1, width * 8 - 1); + if (width != 4) { + rtl_andi(s, dest, dest, 0x1); + } +#endif +} + +static inline def_rtl(trap, vaddr_t ret_pc, word_t NO) { + rtl_li(s, t0, ret_pc); + rtl_hostcall(s, HOSTCALL_TRAP, t0, t0, NULL, NO); + rtl_jr(s, t0); +} +static inline def_rtl(mux, rtlreg_t* dest, const rtlreg_t* cond, const rtlreg_t* src1, const rtlreg_t* src2) { + // dest <- (cond ? src1 : src2) +// TODO(); + rtl_setrelopi(s, RELOP_EQ, t0, cond, 0); + rtl_subi(s, t0, t0, 1); + // t0 = mask + rtl_and(s, s2, src1, t0); + rtl_not(s, t0, t0); + rtl_and(s, t0, src2, t0); + rtl_or(s, dest, t0, s2); +} + +#endif diff --git a/libraries/NEMU/include/rtl/rtl.h b/libraries/NEMU/include/rtl/rtl.h new file mode 100644 index 0000000..a39add5 --- /dev/null +++ b/libraries/NEMU/include/rtl/rtl.h @@ -0,0 +1,61 @@ +#ifndef __RTL_RTL_H__ +#define __RTL_RTL_H__ + +#include + +extern const rtlreg_t rzero; +extern rtlreg_t tmp_reg[4]; + +#define dsrc1 (id_src1->preg) +#define dsrc2 (id_src2->preg) +#define ddest (id_dest->preg) +#define s0 (&tmp_reg[0]) +#define s1 (&tmp_reg[1]) +#define s2 (&tmp_reg[2]) +#define t0 (&tmp_reg[3]) +#define rz (&rzero) + +#define def_rtl(name, ...) void concat(rtl_, name)(Decode *s, __VA_ARGS__) + +// relation operation +enum { + // +-- unsign + // | +-- sign + // | | +-- equal + // | | | +-- invert + // | | | | + RELOP_FALSE = 0 | 0 | 0 | 0, + RELOP_TRUE = 0 | 0 | 0 | 1, + RELOP_EQ = 0 | 0 | 2 | 0, + RELOP_NE = 0 | 0 | 2 | 1, + + RELOP_LT = 0 | 4 | 0 | 0, + RELOP_LE = 0 | 4 | 2 | 0, + RELOP_GT = 0 | 4 | 2 | 1, + RELOP_GE = 0 | 4 | 0 | 1, + + RELOP_LTU = 8 | 0 | 0 | 0, + RELOP_LEU = 8 | 0 | 2 | 0, + RELOP_GTU = 8 | 0 | 2 | 1, + RELOP_GEU = 8 | 0 | 0 | 1, +}; + +#include + +enum { + HOSTCALL_EXIT, // handling nemu_trap + HOSTCALL_INV, // invalid opcode + HOSTCALL_PIO, // port I/O + HOSTCALL_FP, // floating point operation + HOSTCALL_CSR, // system registers / control status registers + HOSTCALL_TRAP, // trap by interrupts/exceptions + HOSTCALL_PRIV, // privilige instructions +}; + +def_rtl(hostcall, uint32_t id, rtlreg_t *dest, const rtlreg_t *src1, + const rtlreg_t *src2, word_t imm); + +#include +#include + +#endif diff --git a/libraries/NEMU/include/utils.h b/libraries/NEMU/include/utils.h new file mode 100644 index 0000000..04f1811 --- /dev/null +++ b/libraries/NEMU/include/utils.h @@ -0,0 +1,52 @@ +#ifndef __UTILS_H__ +#define __UTILS_H__ + +#include + +// ----------- state ----------- + +enum { NEMU_RUNNING, NEMU_STOP, NEMU_END, NEMU_ABORT, NEMU_QUIT }; + +typedef struct { + int state; + vaddr_t halt_pc; + uint32_t halt_ret; +} NEMUState; + +extern NEMUState nemu_state; + +// ----------- timer ----------- + +uint64_t get_time(); + +// ----------- log ----------- + +#define log_write(...) IFDEF(CONFIG_DEBUG, \ + do { \ + extern FILE* log_fp; \ + extern bool log_enable(); \ + if (log_fp != NULL && log_enable()) { \ + fprintf(log_fp, __VA_ARGS__); \ + fflush(log_fp); \ + } \ + } while (0) \ +) + +#define _Log(...) \ + do { \ + printf(__VA_ARGS__); \ + log_write(__VA_ARGS__); \ + } while (0) + +extern char log_bytebuf[80]; +extern char log_asmbuf[80]; + +// ----------- expr ----------- + +word_t expr(char *e, bool *success); + +// ----------- iqueue ----------- +void iqueue_commit(vaddr_t pc, uint8_t *instr_buf, uint8_t ilen); +void iqueue_dump(); + +#endif diff --git a/libraries/NEMU/lib-include/difftest.h b/libraries/NEMU/lib-include/difftest.h new file mode 100644 index 0000000..c4115dd --- /dev/null +++ b/libraries/NEMU/lib-include/difftest.h @@ -0,0 +1,35 @@ +#ifndef __DIFFTEST_H__ +#define __DIFFTEST_H__ + +#include + +enum { DIFFTEST_TO_DUT, DIFFTEST_TO_REF }; + +#define RV64_FULL_DIFF +#define RV64_UARCH_SYNC + +#if defined(__ISA_x86__) +# define DIFFTEST_REG_SIZE (sizeof(uint32_t) * 9) // GPRs + PC +#elif defined(__ISA_mips32__) +# define DIFFTEST_REG_SIZE (sizeof(uint32_t) * 38) // GRPs + status + lo + hi + badvaddr + cause + pc +#elif defined(__ISA_riscv32__) +# define DIFFTEST_REG_SIZE (sizeof(uint32_t) * 33) // GRPs + pc +#elif defined(__ISA_riscv64__) +#ifdef RV64_FULL_DIFF +#define DIFFTEST_REG_SIZE (sizeof(uint64_t) * (32 + 32 + 1 + 6 + 11 + 1)) +// GRPs + FPRs + pc + [m|s][status|cause|epc] + other necessary CSRs + mode +#else +# define DIFFTEST_REG_SIZE (sizeof(uint64_t) * (32 + 1)) // GRPs + pc +#endif +#else +# error Unsupport ISA +#endif + +#ifdef RV64_UARCH_SYNC +struct SyncState { + uint64_t lrscValid; + uint64_t lrscAddr; +}; +#endif + +#endif diff --git a/libraries/NEMU/resource/bbl/Makefile b/libraries/NEMU/resource/bbl/Makefile new file mode 100644 index 0000000..4cb0b66 --- /dev/null +++ b/libraries/NEMU/resource/bbl/Makefile @@ -0,0 +1,45 @@ +NAME = bbl + +BUILD_DIR ?= ./build + +OBJ_DIR ?= $(BUILD_DIR)/obj +BINARY ?= $(BUILD_DIR)/$(NAME) + +.DEFAULT_GOAL = app + +# Compilation flags +CROSS_COMPILE = riscv64-linux-gnu- +CC = $(CROSS_COMPILE)gcc +LD = $(CROSS_COMPILE)ld +OBJDUMP = $(CROSS_COMPILE)objdump +OBJCOPY = $(CROSS_COMPILE)objcopy +INCLUDES = $(addprefix -I, $(INC_DIR)) +CFLAGS += -fno-PIE -mcmodel=medany -O2 -MMD -Wall -Werror $(INCLUDES) + +# Files to be compiled +SRCS = $(shell find src/ -name "*.[cS]") +OBJS = $(addprefix $(OBJ_DIR)/, $(addsuffix .o, $(basename $(SRCS)))) + +# Compilation patterns +$(OBJ_DIR)/%.o: %.c + @mkdir -p $(dir $@) && echo + CC $< + @$(CC) $(CFLAGS) -c -o $@ $< + +$(OBJ_DIR)/%.o: %.S + @mkdir -p $(dir $@) && echo + AS $< + @$(CC) $(CFLAGS) -c -o $@ $< + + +# Depencies +-include $(OBJS:.o=.d) + +$(BINARY): $(OBJS) + @echo + LD $@ + @$(LD) -O2 -T bbl.lds -o $@ $^ + @$(OBJDUMP) -d $@ > $@.txt + @$(OBJCOPY) -S --set-section-flags .bss=alloc,contents -O binary $@ $@.bin + +app: $(BINARY) + +clean: + -rm -rf $(BUILD_DIR) diff --git a/libraries/NEMU/resource/bbl/src/atomic.h b/libraries/NEMU/resource/bbl/src/atomic.h new file mode 100644 index 0000000..c8e017b --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/atomic.h @@ -0,0 +1,78 @@ +// See LICENSE for license details. + +#ifndef _RISCV_ATOMIC_H +#define _RISCV_ATOMIC_H + +//#include "config.h" +#include "encoding.h" + +// Currently, interrupts are always disabled in M-mode. +#define disable_irqsave() (0) +#define enable_irqrestore(flags) ((void) (flags)) + +typedef struct { int lock; } spinlock_t; +#define SPINLOCK_INIT {0} + +#define mb() asm volatile ("fence" ::: "memory") +#define atomic_set(ptr, val) (*(volatile typeof(*(ptr)) *)(ptr) = val) +#define atomic_read(ptr) (*(volatile typeof(*(ptr)) *)(ptr)) + +#ifdef __riscv_atomic +# define atomic_add(ptr, inc) __sync_fetch_and_add(ptr, inc) +# define atomic_or(ptr, inc) __sync_fetch_and_or(ptr, inc) +# define atomic_swap(ptr, swp) __sync_lock_test_and_set(ptr, swp) +# define atomic_cas(ptr, cmp, swp) __sync_val_compare_and_swap(ptr, cmp, swp) +#else +# define atomic_binop(ptr, inc, op) ({ \ + long flags = disable_irqsave(); \ + typeof(*(ptr)) res = atomic_read(ptr); \ + atomic_set(ptr, op); \ + enable_irqrestore(flags); \ + res; }) +# define atomic_add(ptr, inc) atomic_binop(ptr, inc, res + (inc)) +# define atomic_or(ptr, inc) atomic_binop(ptr, inc, res | (inc)) +# define atomic_swap(ptr, inc) atomic_binop(ptr, inc, (inc)) +# define atomic_cas(ptr, cmp, swp) ({ \ + long flags = disable_irqsave(); \ + typeof(*(ptr)) res = *(volatile typeof(*(ptr)) *)(ptr); \ + if (res == (cmp)) *(volatile typeof(ptr))(ptr) = (swp); \ + enable_irqrestore(flags); \ + res; }) +#endif + +static inline int spinlock_trylock(spinlock_t* lock) +{ + int res = atomic_swap(&lock->lock, -1); + mb(); + return res; +} + +static inline void spinlock_lock(spinlock_t* lock) +{ + do + { + while (atomic_read(&lock->lock)) + ; + } while (spinlock_trylock(lock)); +} + +static inline void spinlock_unlock(spinlock_t* lock) +{ + mb(); + atomic_set(&lock->lock,0); +} + +static inline long spinlock_lock_irqsave(spinlock_t* lock) +{ + long flags = disable_irqsave(); + spinlock_lock(lock); + return flags; +} + +static inline void spinlock_unlock_irqrestore(spinlock_t* lock, long flags) +{ + spinlock_unlock(lock); + enable_irqrestore(flags); +} + +#endif diff --git a/libraries/NEMU/resource/bbl/src/bits.h b/libraries/NEMU/resource/bbl/src/bits.h new file mode 100644 index 0000000..0378d80 --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/bits.h @@ -0,0 +1,37 @@ +// See LICENSE for license details. + +#ifndef _RISCV_BITS_H +#define _RISCV_BITS_H + +#define likely(x) __builtin_expect((x), 1) +#define unlikely(x) __builtin_expect((x), 0) + +#define ROUNDUP(a, b) ((((a)-1)/(b)+1)*(b)) +#define ROUNDDOWN(a, b) ((a)/(b)*(b)) + +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define CLAMP(a, lo, hi) MIN(MAX(a, lo), hi) + +#define EXTRACT_FIELD(val, which) (((val) & (which)) / ((which) & ~((which)-1))) +#define INSERT_FIELD(val, which, fieldval) (((val) & ~(which)) | ((fieldval) * ((which) & ~((which)-1)))) + +#define STR(x) XSTR(x) +#define XSTR(x) #x + +#if __riscv_xlen == 64 +# define SLL32 sllw +# define STORE sd +# define LOAD ld +# define LWU lwu +# define LOG_REGBYTES 3 +#else +# define SLL32 sll +# define STORE sw +# define LOAD lw +# define LWU lw +# define LOG_REGBYTES 2 +#endif +#define REGBYTES (1 << LOG_REGBYTES) + +#endif diff --git a/libraries/NEMU/resource/bbl/src/disabled_hart_mask.h b/libraries/NEMU/resource/bbl/src/disabled_hart_mask.h new file mode 100644 index 0000000..3dd98e3 --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/disabled_hart_mask.h @@ -0,0 +1,6 @@ +// See LICENSE for license details. + +#ifndef DISABLED_HART_MASK_H +#define DISABLED_HART_MASK_H +extern long disabled_hart_mask; +#endif diff --git a/libraries/NEMU/resource/bbl/src/emulation.c b/libraries/NEMU/resource/bbl/src/emulation.c new file mode 100644 index 0000000..edd7365 --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/emulation.c @@ -0,0 +1,294 @@ +// See LICENSE for license details. + +#include "emulation.h" +//#include "fp_emulation.h" +//#include "config.h" +#include "unprivileged_memory.h" +#include "mtrap.h" +#include + +static DECLARE_EMULATION_FUNC(emulate_rvc) +{ +#ifdef __riscv_compressed + // the only emulable RVC instructions are FP loads and stores. +# if !defined(__riscv_flen) && defined(PK_ENABLE_FP_EMULATION) + write_csr(mepc, mepc + 2); + + // if FPU is disabled, punt back to the OS + if (unlikely((mstatus & MSTATUS_FS) == 0)) + return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); + + if ((insn & MASK_C_FLD) == MATCH_C_FLD) { + uintptr_t addr = GET_RS1S(insn, regs) + RVC_LD_IMM(insn); + if (unlikely(addr % sizeof(uintptr_t))) + return misaligned_load_trap(regs, mcause, mepc); + SET_F64_RD(RVC_RS2S(insn) << SH_RD, regs, load_uint64_t((void *)addr, mepc)); + } else if ((insn & MASK_C_FLDSP) == MATCH_C_FLDSP) { + uintptr_t addr = GET_SP(regs) + RVC_LDSP_IMM(insn); + if (unlikely(addr % sizeof(uintptr_t))) + return misaligned_load_trap(regs, mcause, mepc); + SET_F64_RD(insn, regs, load_uint64_t((void *)addr, mepc)); + } else if ((insn & MASK_C_FSD) == MATCH_C_FSD) { + uintptr_t addr = GET_RS1S(insn, regs) + RVC_LD_IMM(insn); + if (unlikely(addr % sizeof(uintptr_t))) + return misaligned_store_trap(regs, mcause, mepc); + store_uint64_t((void *)addr, GET_F64_RS2(RVC_RS2S(insn) << SH_RS2, regs), mepc); + } else if ((insn & MASK_C_FSDSP) == MATCH_C_FSDSP) { + uintptr_t addr = GET_SP(regs) + RVC_SDSP_IMM(insn); + if (unlikely(addr % sizeof(uintptr_t))) + return misaligned_store_trap(regs, mcause, mepc); + store_uint64_t((void *)addr, GET_F64_RS2(RVC_RS2(insn) << SH_RS2, regs), mepc); + } else +# if __riscv_xlen == 32 + if ((insn & MASK_C_FLW) == MATCH_C_FLW) { + uintptr_t addr = GET_RS1S(insn, regs) + RVC_LW_IMM(insn); + if (unlikely(addr % 4)) + return misaligned_load_trap(regs, mcause, mepc); + SET_F32_RD(RVC_RS2S(insn) << SH_RD, regs, load_int32_t((void *)addr, mepc)); + } else if ((insn & MASK_C_FLWSP) == MATCH_C_FLWSP) { + uintptr_t addr = GET_SP(regs) + RVC_LWSP_IMM(insn); + if (unlikely(addr % 4)) + return misaligned_load_trap(regs, mcause, mepc); + SET_F32_RD(insn, regs, load_int32_t((void *)addr, mepc)); + } else if ((insn & MASK_C_FSW) == MATCH_C_FSW) { + uintptr_t addr = GET_RS1S(insn, regs) + RVC_LW_IMM(insn); + if (unlikely(addr % 4)) + return misaligned_store_trap(regs, mcause, mepc); + store_uint32_t((void *)addr, GET_F32_RS2(RVC_RS2S(insn) << SH_RS2, regs), mepc); + } else if ((insn & MASK_C_FSWSP) == MATCH_C_FSWSP) { + uintptr_t addr = GET_SP(regs) + RVC_SWSP_IMM(insn); + if (unlikely(addr % 4)) + return misaligned_store_trap(regs, mcause, mepc); + store_uint32_t((void *)addr, GET_F32_RS2(RVC_RS2(insn) << SH_RS2, regs), mepc); + } else +# endif +# endif +#endif + + return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); +} + +void illegal_insn_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc) +{ + asm (".pushsection .rodata\n" + "illegal_insn_trap_table:\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" +#if !defined(__riscv_flen) && defined(PK_ENABLE_FP_EMULATION) + " .word emulate_float_load - illegal_insn_trap_table\n" +#else + " .word truly_illegal_insn - illegal_insn_trap_table\n" +#endif + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" +#if !defined(__riscv_flen) && defined(PK_ENABLE_FP_EMULATION) + " .word emulate_float_store - illegal_insn_trap_table\n" +#else + " .word truly_illegal_insn - illegal_insn_trap_table\n" +#endif + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" +#if !defined(__riscv_muldiv) + " .word emulate_mul_div - illegal_insn_trap_table\n" +#else + " .word truly_illegal_insn - illegal_insn_trap_table\n" +#endif + " .word truly_illegal_insn - illegal_insn_trap_table\n" +#if !defined(__riscv_muldiv) && __riscv_xlen >= 64 + " .word emulate_mul_div32 - illegal_insn_trap_table\n" +#else + " .word truly_illegal_insn - illegal_insn_trap_table\n" +#endif + " .word truly_illegal_insn - illegal_insn_trap_table\n" +#ifdef PK_ENABLE_FP_EMULATION + " .word emulate_fmadd - illegal_insn_trap_table\n" + " .word emulate_fmadd - illegal_insn_trap_table\n" + " .word emulate_fmadd - illegal_insn_trap_table\n" + " .word emulate_fmadd - illegal_insn_trap_table\n" + " .word emulate_fp - illegal_insn_trap_table\n" +#else + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" +#endif + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word emulate_system_opcode - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .word truly_illegal_insn - illegal_insn_trap_table\n" + " .popsection"); + + uintptr_t mstatus = read_csr(mstatus); + insn_t insn = read_csr(mbadaddr); + + if (unlikely((insn & 3) != 3)) { + if (insn == 0) + insn = get_insn(mepc, &mstatus); + if ((insn & 3) != 3) + return emulate_rvc(regs, mcause, mepc, mstatus, insn); + } + + write_csr(mepc, mepc + 4); + + extern uint32_t illegal_insn_trap_table[]; + int32_t* pf = (void*)illegal_insn_trap_table + (insn & 0x7c); + emulation_func f = (emulation_func)((void*)illegal_insn_trap_table + *pf); + f(regs, mcause, mepc, mstatus, insn); +} + +__attribute__((noinline)) +DECLARE_EMULATION_FUNC(truly_illegal_insn) +{ + return redirect_trap(mepc, mstatus, insn); +} + +static inline int emulate_read_csr(int num, uintptr_t mstatus, uintptr_t* result) +{ + uintptr_t counteren = -1; + if (EXTRACT_FIELD(mstatus, MSTATUS_MPP) == PRV_U) + counteren = read_csr(scounteren); + + switch (num) + { + case CSR_CYCLE: + if (!((counteren >> (CSR_CYCLE - CSR_CYCLE)) & 1)) + return -1; + *result = read_csr(mcycle); + return 0; + case CSR_TIME: + if (!((counteren >> (CSR_TIME - CSR_CYCLE)) & 1)) + return -1; + *result = 0; //*mtime; + return 0; + case CSR_INSTRET: + if (!((counteren >> (CSR_INSTRET - CSR_CYCLE)) & 1)) + return -1; + *result = read_csr(minstret); + return 0; + case CSR_MHPMCOUNTER3: + if (!((counteren >> (3 + CSR_MHPMCOUNTER3 - CSR_MHPMCOUNTER3)) & 1)) + return -1; + *result = read_csr(mhpmcounter3); + return 0; + case CSR_MHPMCOUNTER4: + if (!((counteren >> (3 + CSR_MHPMCOUNTER4 - CSR_MHPMCOUNTER3)) & 1)) + return -1; + *result = read_csr(mhpmcounter4); + return 0; +#if __riscv_xlen == 32 + case CSR_CYCLEH: + if (!((counteren >> (CSR_CYCLE - CSR_CYCLE)) & 1)) + return -1; + *result = read_csr(mcycleh); + return 0; + case CSR_TIMEH: + if (!((counteren >> (CSR_TIME - CSR_CYCLE)) & 1)) + return -1; + *result = *mtime >> 32; + return 0; + case CSR_INSTRETH: + if (!((counteren >> (CSR_INSTRET - CSR_CYCLE)) & 1)) + return -1; + *result = read_csr(minstreth); + return 0; + case CSR_MHPMCOUNTER3H: + if (!((counteren >> (3 + CSR_MHPMCOUNTER3 - CSR_MHPMCOUNTER3)) & 1)) + return -1; + *result = read_csr(mhpmcounter3h); + return 0; + case CSR_MHPMCOUNTER4H: + if (!((counteren >> (3 + CSR_MHPMCOUNTER4 - CSR_MHPMCOUNTER3)) & 1)) + return -1; + *result = read_csr(mhpmcounter4h); + return 0; +#endif + case CSR_MHPMEVENT3: + *result = read_csr(mhpmevent3); + return 0; + case CSR_MHPMEVENT4: + *result = read_csr(mhpmevent4); + return 0; +#if !defined(__riscv_flen) && defined(PK_ENABLE_FP_EMULATION) + case CSR_FRM: + if ((mstatus & MSTATUS_FS) == 0) break; + *result = GET_FRM(); + return 0; + case CSR_FFLAGS: + if ((mstatus & MSTATUS_FS) == 0) break; + *result = GET_FFLAGS(); + return 0; + case CSR_FCSR: + if ((mstatus & MSTATUS_FS) == 0) break; + *result = GET_FCSR(); + return 0; +#endif + } + return -1; +} + +static inline int emulate_write_csr(int num, uintptr_t value, uintptr_t mstatus) +{ + switch (num) + { + case CSR_CYCLE: write_csr(mcycle, value); return 0; + case CSR_INSTRET: write_csr(minstret, value); return 0; + case CSR_MHPMCOUNTER3: write_csr(mhpmcounter3, value); return 0; + case CSR_MHPMCOUNTER4: write_csr(mhpmcounter4, value); return 0; +#if __riscv_xlen == 32 + case CSR_CYCLEH: write_csr(mcycleh, value); return 0; + case CSR_INSTRETH: write_csr(minstreth, value); return 0; + case CSR_MHPMCOUNTER3H: write_csr(mhpmcounter3h, value); return 0; + case CSR_MHPMCOUNTER4H: write_csr(mhpmcounter4h, value); return 0; +#endif + case CSR_MHPMEVENT3: write_csr(mhpmevent3, value); return 0; + case CSR_MHPMEVENT4: write_csr(mhpmevent4, value); return 0; +#if !defined(__riscv_flen) && defined(PK_ENABLE_FP_EMULATION) + case CSR_FRM: SET_FRM(value); return 0; + case CSR_FFLAGS: SET_FFLAGS(value); return 0; + case CSR_FCSR: SET_FCSR(value); return 0; +#endif + } + return -1; +} + +DECLARE_EMULATION_FUNC(emulate_system_opcode) +{ + int rs1_num = (insn >> 15) & 0x1f; + uintptr_t rs1_val = GET_RS1(insn, regs); + int csr_num = (uint32_t)insn >> 20; + uintptr_t csr_val, new_csr_val; + + if (emulate_read_csr(csr_num, mstatus, &csr_val)) + return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); + + int do_write = rs1_num; +#define GET_RM(insn) (((insn) >> 12) & 7) + switch (GET_RM(insn)) + { + case 0: return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); + case 1: new_csr_val = rs1_val; do_write = 1; break; + case 2: new_csr_val = csr_val | rs1_val; break; + case 3: new_csr_val = csr_val & ~rs1_val; break; + case 4: return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); + case 5: new_csr_val = rs1_num; do_write = 1; break; + case 6: new_csr_val = csr_val | rs1_num; break; + case 7: new_csr_val = csr_val & ~rs1_num; break; + } + + if (do_write && emulate_write_csr(csr_num, new_csr_val, mstatus)) + return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); + + SET_RD(insn, regs, csr_val); +} diff --git a/libraries/NEMU/resource/bbl/src/emulation.h b/libraries/NEMU/resource/bbl/src/emulation.h new file mode 100644 index 0000000..62115bc --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/emulation.h @@ -0,0 +1,53 @@ +// See LICENSE for license details. + +#ifndef _RISCV_EMULATION_H +#define _RISCV_EMULATION_H + +#include "encoding.h" +#include "bits.h" +#include + +typedef uintptr_t insn_t; +typedef void (*emulation_func)(uintptr_t*, uintptr_t, uintptr_t, uintptr_t, insn_t); +#define DECLARE_EMULATION_FUNC(name) void name(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc, uintptr_t mstatus, insn_t insn) + +void misaligned_load_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc); +void misaligned_store_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc); +void redirect_trap(uintptr_t epc, uintptr_t mstatus, uintptr_t badaddr); +DECLARE_EMULATION_FUNC(truly_illegal_insn); +DECLARE_EMULATION_FUNC(emulate_rvc_0); +DECLARE_EMULATION_FUNC(emulate_rvc_2); + +#define SH_RD 7 +#define SH_RS1 15 +#define SH_RS2 20 +#define SH_RS2C 2 + +#define RV_X(x, s, n) (((x) >> (s)) & ((1 << (n)) - 1)) +#define RVC_LW_IMM(x) ((RV_X(x, 6, 1) << 2) | (RV_X(x, 10, 3) << 3) | (RV_X(x, 5, 1) << 6)) +#define RVC_LD_IMM(x) ((RV_X(x, 10, 3) << 3) | (RV_X(x, 5, 2) << 6)) +#define RVC_LWSP_IMM(x) ((RV_X(x, 4, 3) << 2) | (RV_X(x, 12, 1) << 5) | (RV_X(x, 2, 2) << 6)) +#define RVC_LDSP_IMM(x) ((RV_X(x, 5, 2) << 3) | (RV_X(x, 12, 1) << 5) | (RV_X(x, 2, 3) << 6)) +#define RVC_SWSP_IMM(x) ((RV_X(x, 9, 4) << 2) | (RV_X(x, 7, 2) << 6)) +#define RVC_SDSP_IMM(x) ((RV_X(x, 10, 3) << 3) | (RV_X(x, 7, 3) << 6)) +#define RVC_RS1S(insn) (8 + RV_X(insn, SH_RD, 3)) +#define RVC_RS2S(insn) (8 + RV_X(insn, SH_RS2C, 3)) +#define RVC_RS2(insn) RV_X(insn, SH_RS2C, 5) + +#define SHIFT_RIGHT(x, y) ((y) < 0 ? ((x) << -(y)) : ((x) >> (y))) +#define GET_REG(insn, pos, regs) ({ \ + int mask = (1 << (5+LOG_REGBYTES)) - (1 << LOG_REGBYTES); \ + (uintptr_t*)((uintptr_t)regs + (SHIFT_RIGHT(insn, (pos) - LOG_REGBYTES) & (mask))); \ +}) +#define GET_RS1(insn, regs) (*GET_REG(insn, SH_RS1, regs)) +#define GET_RS2(insn, regs) (*GET_REG(insn, SH_RS2, regs)) +#define GET_RS1S(insn, regs) (*GET_REG(RVC_RS1S(insn), 0, regs)) +#define GET_RS2S(insn, regs) (*GET_REG(RVC_RS2S(insn), 0, regs)) +#define GET_RS2C(insn, regs) (*GET_REG(insn, SH_RS2C, regs)) +#define GET_SP(regs) (*GET_REG(2, 0, regs)) +#define SET_RD(insn, regs, val) (*GET_REG(insn, SH_RD, regs) = (val)) +#define IMM_I(insn) ((int32_t)(insn) >> 20) +#define IMM_S(insn) (((int32_t)(insn) >> 25 << 5) | (int32_t)(((insn) >> 7) & 0x1f)) +#define MASK_FUNCT3 0x7000 + +#endif diff --git a/libraries/NEMU/resource/bbl/src/encoding.h b/libraries/NEMU/resource/bbl/src/encoding.h new file mode 100644 index 0000000..c109ce1 --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/encoding.h @@ -0,0 +1,1471 @@ +// See LICENSE for license details. + +#ifndef RISCV_CSR_ENCODING_H +#define RISCV_CSR_ENCODING_H + +#define MSTATUS_UIE 0x00000001 +#define MSTATUS_SIE 0x00000002 +#define MSTATUS_HIE 0x00000004 +#define MSTATUS_MIE 0x00000008 +#define MSTATUS_UPIE 0x00000010 +#define MSTATUS_SPIE 0x00000020 +#define MSTATUS_HPIE 0x00000040 +#define MSTATUS_MPIE 0x00000080 +#define MSTATUS_SPP 0x00000100 +#define MSTATUS_HPP 0x00000600 +#define MSTATUS_MPP 0x00001800 +#define MSTATUS_FS 0x00006000 +#define MSTATUS_XS 0x00018000 +#define MSTATUS_MPRV 0x00020000 +#define MSTATUS_SUM 0x00040000 +#define MSTATUS_MXR 0x00080000 +#define MSTATUS_TVM 0x00100000 +#define MSTATUS_TW 0x00200000 +#define MSTATUS_TSR 0x00400000 +#define MSTATUS32_SD 0x80000000 +#define MSTATUS_UXL 0x0000000300000000 +#define MSTATUS_SXL 0x0000000C00000000 +#define MSTATUS64_SD 0x8000000000000000 + +#define SSTATUS_UIE 0x00000001 +#define SSTATUS_SIE 0x00000002 +#define SSTATUS_UPIE 0x00000010 +#define SSTATUS_SPIE 0x00000020 +#define SSTATUS_SPP 0x00000100 +#define SSTATUS_FS 0x00006000 +#define SSTATUS_XS 0x00018000 +#define SSTATUS_SUM 0x00040000 +#define SSTATUS_MXR 0x00080000 +#define SSTATUS32_SD 0x80000000 +#define SSTATUS_UXL 0x0000000300000000 +#define SSTATUS64_SD 0x8000000000000000 + +#define DCSR_XDEBUGVER (3U<<30) +#define DCSR_NDRESET (1<<29) +#define DCSR_FULLRESET (1<<28) +#define DCSR_EBREAKM (1<<15) +#define DCSR_EBREAKH (1<<14) +#define DCSR_EBREAKS (1<<13) +#define DCSR_EBREAKU (1<<12) +#define DCSR_STOPCYCLE (1<<10) +#define DCSR_STOPTIME (1<<9) +#define DCSR_CAUSE (7<<6) +#define DCSR_DEBUGINT (1<<5) +#define DCSR_HALT (1<<3) +#define DCSR_STEP (1<<2) +#define DCSR_PRV (3<<0) + +#define DCSR_CAUSE_NONE 0 +#define DCSR_CAUSE_SWBP 1 +#define DCSR_CAUSE_HWBP 2 +#define DCSR_CAUSE_DEBUGINT 3 +#define DCSR_CAUSE_STEP 4 +#define DCSR_CAUSE_HALT 5 + +#define MCONTROL_TYPE(xlen) (0xfULL<<((xlen)-4)) +#define MCONTROL_DMODE(xlen) (1ULL<<((xlen)-5)) +#define MCONTROL_MASKMAX(xlen) (0x3fULL<<((xlen)-11)) + +#define MCONTROL_SELECT (1<<19) +#define MCONTROL_TIMING (1<<18) +#define MCONTROL_ACTION (0x3f<<12) +#define MCONTROL_CHAIN (1<<11) +#define MCONTROL_MATCH (0xf<<7) +#define MCONTROL_M (1<<6) +#define MCONTROL_H (1<<5) +#define MCONTROL_S (1<<4) +#define MCONTROL_U (1<<3) +#define MCONTROL_EXECUTE (1<<2) +#define MCONTROL_STORE (1<<1) +#define MCONTROL_LOAD (1<<0) + +#define MCONTROL_TYPE_NONE 0 +#define MCONTROL_TYPE_MATCH 2 + +#define MCONTROL_ACTION_DEBUG_EXCEPTION 0 +#define MCONTROL_ACTION_DEBUG_MODE 1 +#define MCONTROL_ACTION_TRACE_START 2 +#define MCONTROL_ACTION_TRACE_STOP 3 +#define MCONTROL_ACTION_TRACE_EMIT 4 + +#define MCONTROL_MATCH_EQUAL 0 +#define MCONTROL_MATCH_NAPOT 1 +#define MCONTROL_MATCH_GE 2 +#define MCONTROL_MATCH_LT 3 +#define MCONTROL_MATCH_MASK_LOW 4 +#define MCONTROL_MATCH_MASK_HIGH 5 + +#define MIP_SSIP (1 << IRQ_S_SOFT) +#define MIP_HSIP (1 << IRQ_H_SOFT) +#define MIP_MSIP (1 << IRQ_M_SOFT) +#define MIP_STIP (1 << IRQ_S_TIMER) +#define MIP_HTIP (1 << IRQ_H_TIMER) +#define MIP_MTIP (1 << IRQ_M_TIMER) +#define MIP_SEIP (1 << IRQ_S_EXT) +#define MIP_HEIP (1 << IRQ_H_EXT) +#define MIP_MEIP (1 << IRQ_M_EXT) + +#define SIP_SSIP MIP_SSIP +#define SIP_STIP MIP_STIP + +#define PRV_U 0 +#define PRV_S 1 +#define PRV_H 2 +#define PRV_M 3 + +#define SATP32_MODE 0x80000000 +#define SATP32_ASID 0x7FC00000 +#define SATP32_PPN 0x003FFFFF +#define SATP64_MODE 0xF000000000000000 +#define SATP64_ASID 0x0FFFF00000000000 +#define SATP64_PPN 0x00000FFFFFFFFFFF + +#define SATP_MODE_OFF 0 +#define SATP_MODE_SV32 1 +#define SATP_MODE_SV39 8 +#define SATP_MODE_SV48 9 +#define SATP_MODE_SV57 10 +#define SATP_MODE_SV64 11 + +#define PMP_R 0x01 +#define PMP_W 0x02 +#define PMP_X 0x04 +#define PMP_A 0x18 +#define PMP_L 0x80 +#define PMP_SHIFT 2 + +#define PMP_TOR 0x08 +#define PMP_NA4 0x10 +#define PMP_NAPOT 0x18 + +#define IRQ_S_SOFT 1 +#define IRQ_H_SOFT 2 +#define IRQ_M_SOFT 3 +#define IRQ_S_TIMER 5 +#define IRQ_H_TIMER 6 +#define IRQ_M_TIMER 7 +#define IRQ_S_EXT 9 +#define IRQ_H_EXT 10 +#define IRQ_M_EXT 11 +#define IRQ_COP 12 +#define IRQ_HOST 13 + +#define DEFAULT_RSTVEC 0x00001000 +#define CLINT_BASE 0x02000000 +#define CLINT_SIZE 0x000c0000 +#define EXT_IO_BASE 0x40000000 +#define DRAM_BASE 0x80000000 + +// page table entry (PTE) fields +#define PTE_V 0x001 // Valid +#define PTE_R 0x002 // Read +#define PTE_W 0x004 // Write +#define PTE_X 0x008 // Execute +#define PTE_U 0x010 // User +#define PTE_G 0x020 // Global +#define PTE_A 0x040 // Accessed +#define PTE_D 0x080 // Dirty +#define PTE_SOFT 0x300 // Reserved for Software + +#define PTE_PPN_SHIFT 10 + +#define PTE_TABLE(PTE) (((PTE) & (PTE_V | PTE_R | PTE_W | PTE_X)) == PTE_V) + +#ifdef __riscv + +#if __riscv_xlen == 64 +# define MSTATUS_SD MSTATUS64_SD +# define SSTATUS_SD SSTATUS64_SD +# define RISCV_PGLEVEL_BITS 9 +# define SATP_MODE SATP64_MODE +#else +# define MSTATUS_SD MSTATUS32_SD +# define SSTATUS_SD SSTATUS32_SD +# define RISCV_PGLEVEL_BITS 10 +# define SATP_MODE SATP32_MODE +#endif +#define RISCV_PGSHIFT 12 +#define RISCV_PGSIZE (1 << RISCV_PGSHIFT) + +#ifndef __ASSEMBLER__ + +#ifdef __GNUC__ + +#define read_csr(reg) ({ unsigned long __tmp; \ + asm volatile ("csrr %0, " #reg : "=r"(__tmp)); \ + __tmp; }) + +#define write_csr(reg, val) ({ \ + asm volatile ("csrw " #reg ", %0" :: "rK"(val)); }) + +#define swap_csr(reg, val) ({ unsigned long __tmp; \ + asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "rK"(val)); \ + __tmp; }) + +#define set_csr(reg, bit) ({ unsigned long __tmp; \ + asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "rK"(bit)); \ + __tmp; }) + +#define clear_csr(reg, bit) ({ unsigned long __tmp; \ + asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "rK"(bit)); \ + __tmp; }) + +#define rdtime() read_csr(time) +#define rdcycle() read_csr(cycle) +#define rdinstret() read_csr(instret) + +#endif + +#endif + +#endif + +#endif +/* Automatically generated by parse-opcodes. */ +#ifndef RISCV_ENCODING_H +#define RISCV_ENCODING_H +#define MATCH_BEQ 0x63 +#define MASK_BEQ 0x707f +#define MATCH_BNE 0x1063 +#define MASK_BNE 0x707f +#define MATCH_BLT 0x4063 +#define MASK_BLT 0x707f +#define MATCH_BGE 0x5063 +#define MASK_BGE 0x707f +#define MATCH_BLTU 0x6063 +#define MASK_BLTU 0x707f +#define MATCH_BGEU 0x7063 +#define MASK_BGEU 0x707f +#define MATCH_JALR 0x67 +#define MASK_JALR 0x707f +#define MATCH_JAL 0x6f +#define MASK_JAL 0x7f +#define MATCH_LUI 0x37 +#define MASK_LUI 0x7f +#define MATCH_AUIPC 0x17 +#define MASK_AUIPC 0x7f +#define MATCH_ADDI 0x13 +#define MASK_ADDI 0x707f +#define MATCH_SLLI 0x1013 +#define MASK_SLLI 0xfc00707f +#define MATCH_SLTI 0x2013 +#define MASK_SLTI 0x707f +#define MATCH_SLTIU 0x3013 +#define MASK_SLTIU 0x707f +#define MATCH_XORI 0x4013 +#define MASK_XORI 0x707f +#define MATCH_SRLI 0x5013 +#define MASK_SRLI 0xfc00707f +#define MATCH_SRAI 0x40005013 +#define MASK_SRAI 0xfc00707f +#define MATCH_ORI 0x6013 +#define MASK_ORI 0x707f +#define MATCH_ANDI 0x7013 +#define MASK_ANDI 0x707f +#define MATCH_ADD 0x33 +#define MASK_ADD 0xfe00707f +#define MATCH_SUB 0x40000033 +#define MASK_SUB 0xfe00707f +#define MATCH_SLL 0x1033 +#define MASK_SLL 0xfe00707f +#define MATCH_SLT 0x2033 +#define MASK_SLT 0xfe00707f +#define MATCH_SLTU 0x3033 +#define MASK_SLTU 0xfe00707f +#define MATCH_XOR 0x4033 +#define MASK_XOR 0xfe00707f +#define MATCH_SRL 0x5033 +#define MASK_SRL 0xfe00707f +#define MATCH_SRA 0x40005033 +#define MASK_SRA 0xfe00707f +#define MATCH_OR 0x6033 +#define MASK_OR 0xfe00707f +#define MATCH_AND 0x7033 +#define MASK_AND 0xfe00707f +#define MATCH_ADDIW 0x1b +#define MASK_ADDIW 0x707f +#define MATCH_SLLIW 0x101b +#define MASK_SLLIW 0xfe00707f +#define MATCH_SRLIW 0x501b +#define MASK_SRLIW 0xfe00707f +#define MATCH_SRAIW 0x4000501b +#define MASK_SRAIW 0xfe00707f +#define MATCH_ADDW 0x3b +#define MASK_ADDW 0xfe00707f +#define MATCH_SUBW 0x4000003b +#define MASK_SUBW 0xfe00707f +#define MATCH_SLLW 0x103b +#define MASK_SLLW 0xfe00707f +#define MATCH_SRLW 0x503b +#define MASK_SRLW 0xfe00707f +#define MATCH_SRAW 0x4000503b +#define MASK_SRAW 0xfe00707f +#define MATCH_LB 0x3 +#define MASK_LB 0x707f +#define MATCH_LH 0x1003 +#define MASK_LH 0x707f +#define MATCH_LW 0x2003 +#define MASK_LW 0x707f +#define MATCH_LD 0x3003 +#define MASK_LD 0x707f +#define MATCH_LBU 0x4003 +#define MASK_LBU 0x707f +#define MATCH_LHU 0x5003 +#define MASK_LHU 0x707f +#define MATCH_LWU 0x6003 +#define MASK_LWU 0x707f +#define MATCH_SB 0x23 +#define MASK_SB 0x707f +#define MATCH_SH 0x1023 +#define MASK_SH 0x707f +#define MATCH_SW 0x2023 +#define MASK_SW 0x707f +#define MATCH_SD 0x3023 +#define MASK_SD 0x707f +#define MATCH_FENCE 0xf +#define MASK_FENCE 0x707f +#define MATCH_FENCE_I 0x100f +#define MASK_FENCE_I 0x707f +#define MATCH_MUL 0x2000033 +#define MASK_MUL 0xfe00707f +#define MATCH_MULH 0x2001033 +#define MASK_MULH 0xfe00707f +#define MATCH_MULHSU 0x2002033 +#define MASK_MULHSU 0xfe00707f +#define MATCH_MULHU 0x2003033 +#define MASK_MULHU 0xfe00707f +#define MATCH_DIV 0x2004033 +#define MASK_DIV 0xfe00707f +#define MATCH_DIVU 0x2005033 +#define MASK_DIVU 0xfe00707f +#define MATCH_REM 0x2006033 +#define MASK_REM 0xfe00707f +#define MATCH_REMU 0x2007033 +#define MASK_REMU 0xfe00707f +#define MATCH_MULW 0x200003b +#define MASK_MULW 0xfe00707f +#define MATCH_DIVW 0x200403b +#define MASK_DIVW 0xfe00707f +#define MATCH_DIVUW 0x200503b +#define MASK_DIVUW 0xfe00707f +#define MATCH_REMW 0x200603b +#define MASK_REMW 0xfe00707f +#define MATCH_REMUW 0x200703b +#define MASK_REMUW 0xfe00707f +#define MATCH_AMOADD_W 0x202f +#define MASK_AMOADD_W 0xf800707f +#define MATCH_AMOXOR_W 0x2000202f +#define MASK_AMOXOR_W 0xf800707f +#define MATCH_AMOOR_W 0x4000202f +#define MASK_AMOOR_W 0xf800707f +#define MATCH_AMOAND_W 0x6000202f +#define MASK_AMOAND_W 0xf800707f +#define MATCH_AMOMIN_W 0x8000202f +#define MASK_AMOMIN_W 0xf800707f +#define MATCH_AMOMAX_W 0xa000202f +#define MASK_AMOMAX_W 0xf800707f +#define MATCH_AMOMINU_W 0xc000202f +#define MASK_AMOMINU_W 0xf800707f +#define MATCH_AMOMAXU_W 0xe000202f +#define MASK_AMOMAXU_W 0xf800707f +#define MATCH_AMOSWAP_W 0x800202f +#define MASK_AMOSWAP_W 0xf800707f +#define MATCH_LR_W 0x1000202f +#define MASK_LR_W 0xf9f0707f +#define MATCH_SC_W 0x1800202f +#define MASK_SC_W 0xf800707f +#define MATCH_AMOADD_D 0x302f +#define MASK_AMOADD_D 0xf800707f +#define MATCH_AMOXOR_D 0x2000302f +#define MASK_AMOXOR_D 0xf800707f +#define MATCH_AMOOR_D 0x4000302f +#define MASK_AMOOR_D 0xf800707f +#define MATCH_AMOAND_D 0x6000302f +#define MASK_AMOAND_D 0xf800707f +#define MATCH_AMOMIN_D 0x8000302f +#define MASK_AMOMIN_D 0xf800707f +#define MATCH_AMOMAX_D 0xa000302f +#define MASK_AMOMAX_D 0xf800707f +#define MATCH_AMOMINU_D 0xc000302f +#define MASK_AMOMINU_D 0xf800707f +#define MATCH_AMOMAXU_D 0xe000302f +#define MASK_AMOMAXU_D 0xf800707f +#define MATCH_AMOSWAP_D 0x800302f +#define MASK_AMOSWAP_D 0xf800707f +#define MATCH_LR_D 0x1000302f +#define MASK_LR_D 0xf9f0707f +#define MATCH_SC_D 0x1800302f +#define MASK_SC_D 0xf800707f +#define MATCH_ECALL 0x73 +#define MASK_ECALL 0xffffffff +#define MATCH_EBREAK 0x100073 +#define MASK_EBREAK 0xffffffff +#define MATCH_URET 0x200073 +#define MASK_URET 0xffffffff +#define MATCH_SRET 0x10200073 +#define MASK_SRET 0xffffffff +#define MATCH_MRET 0x30200073 +#define MASK_MRET 0xffffffff +#define MATCH_DRET 0x7b200073 +#define MASK_DRET 0xffffffff +#define MATCH_SFENCE_VMA 0x12000073 +#define MASK_SFENCE_VMA 0xfe007fff +#define MATCH_WFI 0x10500073 +#define MASK_WFI 0xffffffff +#define MATCH_CSRRW 0x1073 +#define MASK_CSRRW 0x707f +#define MATCH_CSRRS 0x2073 +#define MASK_CSRRS 0x707f +#define MATCH_CSRRC 0x3073 +#define MASK_CSRRC 0x707f +#define MATCH_CSRRWI 0x5073 +#define MASK_CSRRWI 0x707f +#define MATCH_CSRRSI 0x6073 +#define MASK_CSRRSI 0x707f +#define MATCH_CSRRCI 0x7073 +#define MASK_CSRRCI 0x707f +#define MATCH_FADD_S 0x53 +#define MASK_FADD_S 0xfe00007f +#define MATCH_FSUB_S 0x8000053 +#define MASK_FSUB_S 0xfe00007f +#define MATCH_FMUL_S 0x10000053 +#define MASK_FMUL_S 0xfe00007f +#define MATCH_FDIV_S 0x18000053 +#define MASK_FDIV_S 0xfe00007f +#define MATCH_FSGNJ_S 0x20000053 +#define MASK_FSGNJ_S 0xfe00707f +#define MATCH_FSGNJN_S 0x20001053 +#define MASK_FSGNJN_S 0xfe00707f +#define MATCH_FSGNJX_S 0x20002053 +#define MASK_FSGNJX_S 0xfe00707f +#define MATCH_FMIN_S 0x28000053 +#define MASK_FMIN_S 0xfe00707f +#define MATCH_FMAX_S 0x28001053 +#define MASK_FMAX_S 0xfe00707f +#define MATCH_FSQRT_S 0x58000053 +#define MASK_FSQRT_S 0xfff0007f +#define MATCH_FADD_D 0x2000053 +#define MASK_FADD_D 0xfe00007f +#define MATCH_FSUB_D 0xa000053 +#define MASK_FSUB_D 0xfe00007f +#define MATCH_FMUL_D 0x12000053 +#define MASK_FMUL_D 0xfe00007f +#define MATCH_FDIV_D 0x1a000053 +#define MASK_FDIV_D 0xfe00007f +#define MATCH_FSGNJ_D 0x22000053 +#define MASK_FSGNJ_D 0xfe00707f +#define MATCH_FSGNJN_D 0x22001053 +#define MASK_FSGNJN_D 0xfe00707f +#define MATCH_FSGNJX_D 0x22002053 +#define MASK_FSGNJX_D 0xfe00707f +#define MATCH_FMIN_D 0x2a000053 +#define MASK_FMIN_D 0xfe00707f +#define MATCH_FMAX_D 0x2a001053 +#define MASK_FMAX_D 0xfe00707f +#define MATCH_FCVT_S_D 0x40100053 +#define MASK_FCVT_S_D 0xfff0007f +#define MATCH_FCVT_D_S 0x42000053 +#define MASK_FCVT_D_S 0xfff0007f +#define MATCH_FSQRT_D 0x5a000053 +#define MASK_FSQRT_D 0xfff0007f +#define MATCH_FADD_Q 0x6000053 +#define MASK_FADD_Q 0xfe00007f +#define MATCH_FSUB_Q 0xe000053 +#define MASK_FSUB_Q 0xfe00007f +#define MATCH_FMUL_Q 0x16000053 +#define MASK_FMUL_Q 0xfe00007f +#define MATCH_FDIV_Q 0x1e000053 +#define MASK_FDIV_Q 0xfe00007f +#define MATCH_FSGNJ_Q 0x26000053 +#define MASK_FSGNJ_Q 0xfe00707f +#define MATCH_FSGNJN_Q 0x26001053 +#define MASK_FSGNJN_Q 0xfe00707f +#define MATCH_FSGNJX_Q 0x26002053 +#define MASK_FSGNJX_Q 0xfe00707f +#define MATCH_FMIN_Q 0x2e000053 +#define MASK_FMIN_Q 0xfe00707f +#define MATCH_FMAX_Q 0x2e001053 +#define MASK_FMAX_Q 0xfe00707f +#define MATCH_FCVT_S_Q 0x40300053 +#define MASK_FCVT_S_Q 0xfff0007f +#define MATCH_FCVT_Q_S 0x46000053 +#define MASK_FCVT_Q_S 0xfff0007f +#define MATCH_FCVT_D_Q 0x42300053 +#define MASK_FCVT_D_Q 0xfff0007f +#define MATCH_FCVT_Q_D 0x46100053 +#define MASK_FCVT_Q_D 0xfff0007f +#define MATCH_FSQRT_Q 0x5e000053 +#define MASK_FSQRT_Q 0xfff0007f +#define MATCH_FLE_S 0xa0000053 +#define MASK_FLE_S 0xfe00707f +#define MATCH_FLT_S 0xa0001053 +#define MASK_FLT_S 0xfe00707f +#define MATCH_FEQ_S 0xa0002053 +#define MASK_FEQ_S 0xfe00707f +#define MATCH_FLE_D 0xa2000053 +#define MASK_FLE_D 0xfe00707f +#define MATCH_FLT_D 0xa2001053 +#define MASK_FLT_D 0xfe00707f +#define MATCH_FEQ_D 0xa2002053 +#define MASK_FEQ_D 0xfe00707f +#define MATCH_FLE_Q 0xa6000053 +#define MASK_FLE_Q 0xfe00707f +#define MATCH_FLT_Q 0xa6001053 +#define MASK_FLT_Q 0xfe00707f +#define MATCH_FEQ_Q 0xa6002053 +#define MASK_FEQ_Q 0xfe00707f +#define MATCH_FCVT_W_S 0xc0000053 +#define MASK_FCVT_W_S 0xfff0007f +#define MATCH_FCVT_WU_S 0xc0100053 +#define MASK_FCVT_WU_S 0xfff0007f +#define MATCH_FCVT_L_S 0xc0200053 +#define MASK_FCVT_L_S 0xfff0007f +#define MATCH_FCVT_LU_S 0xc0300053 +#define MASK_FCVT_LU_S 0xfff0007f +#define MATCH_FMV_X_W 0xe0000053 +#define MASK_FMV_X_W 0xfff0707f +#define MATCH_FCLASS_S 0xe0001053 +#define MASK_FCLASS_S 0xfff0707f +#define MATCH_FCVT_W_D 0xc2000053 +#define MASK_FCVT_W_D 0xfff0007f +#define MATCH_FCVT_WU_D 0xc2100053 +#define MASK_FCVT_WU_D 0xfff0007f +#define MATCH_FCVT_L_D 0xc2200053 +#define MASK_FCVT_L_D 0xfff0007f +#define MATCH_FCVT_LU_D 0xc2300053 +#define MASK_FCVT_LU_D 0xfff0007f +#define MATCH_FMV_X_D 0xe2000053 +#define MASK_FMV_X_D 0xfff0707f +#define MATCH_FCLASS_D 0xe2001053 +#define MASK_FCLASS_D 0xfff0707f +#define MATCH_FCVT_W_Q 0xc6000053 +#define MASK_FCVT_W_Q 0xfff0007f +#define MATCH_FCVT_WU_Q 0xc6100053 +#define MASK_FCVT_WU_Q 0xfff0007f +#define MATCH_FCVT_L_Q 0xc6200053 +#define MASK_FCVT_L_Q 0xfff0007f +#define MATCH_FCVT_LU_Q 0xc6300053 +#define MASK_FCVT_LU_Q 0xfff0007f +#define MATCH_FMV_X_Q 0xe6000053 +#define MASK_FMV_X_Q 0xfff0707f +#define MATCH_FCLASS_Q 0xe6001053 +#define MASK_FCLASS_Q 0xfff0707f +#define MATCH_FCVT_S_W 0xd0000053 +#define MASK_FCVT_S_W 0xfff0007f +#define MATCH_FCVT_S_WU 0xd0100053 +#define MASK_FCVT_S_WU 0xfff0007f +#define MATCH_FCVT_S_L 0xd0200053 +#define MASK_FCVT_S_L 0xfff0007f +#define MATCH_FCVT_S_LU 0xd0300053 +#define MASK_FCVT_S_LU 0xfff0007f +#define MATCH_FMV_W_X 0xf0000053 +#define MASK_FMV_W_X 0xfff0707f +#define MATCH_FCVT_D_W 0xd2000053 +#define MASK_FCVT_D_W 0xfff0007f +#define MATCH_FCVT_D_WU 0xd2100053 +#define MASK_FCVT_D_WU 0xfff0007f +#define MATCH_FCVT_D_L 0xd2200053 +#define MASK_FCVT_D_L 0xfff0007f +#define MATCH_FCVT_D_LU 0xd2300053 +#define MASK_FCVT_D_LU 0xfff0007f +#define MATCH_FMV_D_X 0xf2000053 +#define MASK_FMV_D_X 0xfff0707f +#define MATCH_FCVT_Q_W 0xd6000053 +#define MASK_FCVT_Q_W 0xfff0007f +#define MATCH_FCVT_Q_WU 0xd6100053 +#define MASK_FCVT_Q_WU 0xfff0007f +#define MATCH_FCVT_Q_L 0xd6200053 +#define MASK_FCVT_Q_L 0xfff0007f +#define MATCH_FCVT_Q_LU 0xd6300053 +#define MASK_FCVT_Q_LU 0xfff0007f +#define MATCH_FMV_Q_X 0xf6000053 +#define MASK_FMV_Q_X 0xfff0707f +#define MATCH_FLW 0x2007 +#define MASK_FLW 0x707f +#define MATCH_FLD 0x3007 +#define MASK_FLD 0x707f +#define MATCH_FLQ 0x4007 +#define MASK_FLQ 0x707f +#define MATCH_FSW 0x2027 +#define MASK_FSW 0x707f +#define MATCH_FSD 0x3027 +#define MASK_FSD 0x707f +#define MATCH_FSQ 0x4027 +#define MASK_FSQ 0x707f +#define MATCH_FMADD_S 0x43 +#define MASK_FMADD_S 0x600007f +#define MATCH_FMSUB_S 0x47 +#define MASK_FMSUB_S 0x600007f +#define MATCH_FNMSUB_S 0x4b +#define MASK_FNMSUB_S 0x600007f +#define MATCH_FNMADD_S 0x4f +#define MASK_FNMADD_S 0x600007f +#define MATCH_FMADD_D 0x2000043 +#define MASK_FMADD_D 0x600007f +#define MATCH_FMSUB_D 0x2000047 +#define MASK_FMSUB_D 0x600007f +#define MATCH_FNMSUB_D 0x200004b +#define MASK_FNMSUB_D 0x600007f +#define MATCH_FNMADD_D 0x200004f +#define MASK_FNMADD_D 0x600007f +#define MATCH_FMADD_Q 0x6000043 +#define MASK_FMADD_Q 0x600007f +#define MATCH_FMSUB_Q 0x6000047 +#define MASK_FMSUB_Q 0x600007f +#define MATCH_FNMSUB_Q 0x600004b +#define MASK_FNMSUB_Q 0x600007f +#define MATCH_FNMADD_Q 0x600004f +#define MASK_FNMADD_Q 0x600007f +#define MATCH_C_NOP 0x1 +#define MASK_C_NOP 0xffff +#define MATCH_C_ADDI16SP 0x6101 +#define MASK_C_ADDI16SP 0xef83 +#define MATCH_C_JR 0x8002 +#define MASK_C_JR 0xf07f +#define MATCH_C_JALR 0x9002 +#define MASK_C_JALR 0xf07f +#define MATCH_C_EBREAK 0x9002 +#define MASK_C_EBREAK 0xffff +#define MATCH_C_LD 0x6000 +#define MASK_C_LD 0xe003 +#define MATCH_C_SD 0xe000 +#define MASK_C_SD 0xe003 +#define MATCH_C_ADDIW 0x2001 +#define MASK_C_ADDIW 0xe003 +#define MATCH_C_LDSP 0x6002 +#define MASK_C_LDSP 0xe003 +#define MATCH_C_SDSP 0xe002 +#define MASK_C_SDSP 0xe003 +#define MATCH_C_ADDI4SPN 0x0 +#define MASK_C_ADDI4SPN 0xe003 +#define MATCH_C_FLD 0x2000 +#define MASK_C_FLD 0xe003 +#define MATCH_C_LW 0x4000 +#define MASK_C_LW 0xe003 +#define MATCH_C_FLW 0x6000 +#define MASK_C_FLW 0xe003 +#define MATCH_C_FSD 0xa000 +#define MASK_C_FSD 0xe003 +#define MATCH_C_SW 0xc000 +#define MASK_C_SW 0xe003 +#define MATCH_C_FSW 0xe000 +#define MASK_C_FSW 0xe003 +#define MATCH_C_ADDI 0x1 +#define MASK_C_ADDI 0xe003 +#define MATCH_C_JAL 0x2001 +#define MASK_C_JAL 0xe003 +#define MATCH_C_LI 0x4001 +#define MASK_C_LI 0xe003 +#define MATCH_C_LUI 0x6001 +#define MASK_C_LUI 0xe003 +#define MATCH_C_SRLI 0x8001 +#define MASK_C_SRLI 0xec03 +#define MATCH_C_SRAI 0x8401 +#define MASK_C_SRAI 0xec03 +#define MATCH_C_ANDI 0x8801 +#define MASK_C_ANDI 0xec03 +#define MATCH_C_SUB 0x8c01 +#define MASK_C_SUB 0xfc63 +#define MATCH_C_XOR 0x8c21 +#define MASK_C_XOR 0xfc63 +#define MATCH_C_OR 0x8c41 +#define MASK_C_OR 0xfc63 +#define MATCH_C_AND 0x8c61 +#define MASK_C_AND 0xfc63 +#define MATCH_C_SUBW 0x9c01 +#define MASK_C_SUBW 0xfc63 +#define MATCH_C_ADDW 0x9c21 +#define MASK_C_ADDW 0xfc63 +#define MATCH_C_J 0xa001 +#define MASK_C_J 0xe003 +#define MATCH_C_BEQZ 0xc001 +#define MASK_C_BEQZ 0xe003 +#define MATCH_C_BNEZ 0xe001 +#define MASK_C_BNEZ 0xe003 +#define MATCH_C_SLLI 0x2 +#define MASK_C_SLLI 0xe003 +#define MATCH_C_FLDSP 0x2002 +#define MASK_C_FLDSP 0xe003 +#define MATCH_C_LWSP 0x4002 +#define MASK_C_LWSP 0xe003 +#define MATCH_C_FLWSP 0x6002 +#define MASK_C_FLWSP 0xe003 +#define MATCH_C_MV 0x8002 +#define MASK_C_MV 0xf003 +#define MATCH_C_ADD 0x9002 +#define MASK_C_ADD 0xf003 +#define MATCH_C_FSDSP 0xa002 +#define MASK_C_FSDSP 0xe003 +#define MATCH_C_SWSP 0xc002 +#define MASK_C_SWSP 0xe003 +#define MATCH_C_FSWSP 0xe002 +#define MASK_C_FSWSP 0xe003 +#define MATCH_CUSTOM0 0xb +#define MASK_CUSTOM0 0x707f +#define MATCH_CUSTOM0_RS1 0x200b +#define MASK_CUSTOM0_RS1 0x707f +#define MATCH_CUSTOM0_RS1_RS2 0x300b +#define MASK_CUSTOM0_RS1_RS2 0x707f +#define MATCH_CUSTOM0_RD 0x400b +#define MASK_CUSTOM0_RD 0x707f +#define MATCH_CUSTOM0_RD_RS1 0x600b +#define MASK_CUSTOM0_RD_RS1 0x707f +#define MATCH_CUSTOM0_RD_RS1_RS2 0x700b +#define MASK_CUSTOM0_RD_RS1_RS2 0x707f +#define MATCH_CUSTOM1 0x2b +#define MASK_CUSTOM1 0x707f +#define MATCH_CUSTOM1_RS1 0x202b +#define MASK_CUSTOM1_RS1 0x707f +#define MATCH_CUSTOM1_RS1_RS2 0x302b +#define MASK_CUSTOM1_RS1_RS2 0x707f +#define MATCH_CUSTOM1_RD 0x402b +#define MASK_CUSTOM1_RD 0x707f +#define MATCH_CUSTOM1_RD_RS1 0x602b +#define MASK_CUSTOM1_RD_RS1 0x707f +#define MATCH_CUSTOM1_RD_RS1_RS2 0x702b +#define MASK_CUSTOM1_RD_RS1_RS2 0x707f +#define MATCH_CUSTOM2 0x5b +#define MASK_CUSTOM2 0x707f +#define MATCH_CUSTOM2_RS1 0x205b +#define MASK_CUSTOM2_RS1 0x707f +#define MATCH_CUSTOM2_RS1_RS2 0x305b +#define MASK_CUSTOM2_RS1_RS2 0x707f +#define MATCH_CUSTOM2_RD 0x405b +#define MASK_CUSTOM2_RD 0x707f +#define MATCH_CUSTOM2_RD_RS1 0x605b +#define MASK_CUSTOM2_RD_RS1 0x707f +#define MATCH_CUSTOM2_RD_RS1_RS2 0x705b +#define MASK_CUSTOM2_RD_RS1_RS2 0x707f +#define MATCH_CUSTOM3 0x7b +#define MASK_CUSTOM3 0x707f +#define MATCH_CUSTOM3_RS1 0x207b +#define MASK_CUSTOM3_RS1 0x707f +#define MATCH_CUSTOM3_RS1_RS2 0x307b +#define MASK_CUSTOM3_RS1_RS2 0x707f +#define MATCH_CUSTOM3_RD 0x407b +#define MASK_CUSTOM3_RD 0x707f +#define MATCH_CUSTOM3_RD_RS1 0x607b +#define MASK_CUSTOM3_RD_RS1 0x707f +#define MATCH_CUSTOM3_RD_RS1_RS2 0x707b +#define MASK_CUSTOM3_RD_RS1_RS2 0x707f +#define CSR_FFLAGS 0x1 +#define CSR_FRM 0x2 +#define CSR_FCSR 0x3 +#define CSR_CYCLE 0xc00 +#define CSR_TIME 0xc01 +#define CSR_INSTRET 0xc02 +#define CSR_HPMCOUNTER3 0xc03 +#define CSR_HPMCOUNTER4 0xc04 +#define CSR_HPMCOUNTER5 0xc05 +#define CSR_HPMCOUNTER6 0xc06 +#define CSR_HPMCOUNTER7 0xc07 +#define CSR_HPMCOUNTER8 0xc08 +#define CSR_HPMCOUNTER9 0xc09 +#define CSR_HPMCOUNTER10 0xc0a +#define CSR_HPMCOUNTER11 0xc0b +#define CSR_HPMCOUNTER12 0xc0c +#define CSR_HPMCOUNTER13 0xc0d +#define CSR_HPMCOUNTER14 0xc0e +#define CSR_HPMCOUNTER15 0xc0f +#define CSR_HPMCOUNTER16 0xc10 +#define CSR_HPMCOUNTER17 0xc11 +#define CSR_HPMCOUNTER18 0xc12 +#define CSR_HPMCOUNTER19 0xc13 +#define CSR_HPMCOUNTER20 0xc14 +#define CSR_HPMCOUNTER21 0xc15 +#define CSR_HPMCOUNTER22 0xc16 +#define CSR_HPMCOUNTER23 0xc17 +#define CSR_HPMCOUNTER24 0xc18 +#define CSR_HPMCOUNTER25 0xc19 +#define CSR_HPMCOUNTER26 0xc1a +#define CSR_HPMCOUNTER27 0xc1b +#define CSR_HPMCOUNTER28 0xc1c +#define CSR_HPMCOUNTER29 0xc1d +#define CSR_HPMCOUNTER30 0xc1e +#define CSR_HPMCOUNTER31 0xc1f +#define CSR_SSTATUS 0x100 +#define CSR_SIE 0x104 +#define CSR_STVEC 0x105 +#define CSR_SCOUNTEREN 0x106 +#define CSR_SSCRATCH 0x140 +#define CSR_SEPC 0x141 +#define CSR_SCAUSE 0x142 +#define CSR_STVAL 0x143 +#define CSR_SIP 0x144 +#define CSR_SATP 0x180 +#define CSR_MSTATUS 0x300 +#define CSR_MISA 0x301 +#define CSR_MEDELEG 0x302 +#define CSR_MIDELEG 0x303 +#define CSR_MIE 0x304 +#define CSR_MTVEC 0x305 +#define CSR_MCOUNTEREN 0x306 +#define CSR_MSCRATCH 0x340 +#define CSR_MEPC 0x341 +#define CSR_MCAUSE 0x342 +#define CSR_MTVAL 0x343 +#define CSR_MIP 0x344 +#define CSR_PMPCFG0 0x3a0 +#define CSR_PMPCFG1 0x3a1 +#define CSR_PMPCFG2 0x3a2 +#define CSR_PMPCFG3 0x3a3 +#define CSR_PMPADDR0 0x3b0 +#define CSR_PMPADDR1 0x3b1 +#define CSR_PMPADDR2 0x3b2 +#define CSR_PMPADDR3 0x3b3 +#define CSR_PMPADDR4 0x3b4 +#define CSR_PMPADDR5 0x3b5 +#define CSR_PMPADDR6 0x3b6 +#define CSR_PMPADDR7 0x3b7 +#define CSR_PMPADDR8 0x3b8 +#define CSR_PMPADDR9 0x3b9 +#define CSR_PMPADDR10 0x3ba +#define CSR_PMPADDR11 0x3bb +#define CSR_PMPADDR12 0x3bc +#define CSR_PMPADDR13 0x3bd +#define CSR_PMPADDR14 0x3be +#define CSR_PMPADDR15 0x3bf +#define CSR_TSELECT 0x7a0 +#define CSR_TDATA1 0x7a1 +#define CSR_TDATA2 0x7a2 +#define CSR_TDATA3 0x7a3 +#define CSR_DCSR 0x7b0 +#define CSR_DPC 0x7b1 +#define CSR_DSCRATCH 0x7b2 +#define CSR_MCYCLE 0xb00 +#define CSR_MINSTRET 0xb02 +#define CSR_MHPMCOUNTER3 0xb03 +#define CSR_MHPMCOUNTER4 0xb04 +#define CSR_MHPMCOUNTER5 0xb05 +#define CSR_MHPMCOUNTER6 0xb06 +#define CSR_MHPMCOUNTER7 0xb07 +#define CSR_MHPMCOUNTER8 0xb08 +#define CSR_MHPMCOUNTER9 0xb09 +#define CSR_MHPMCOUNTER10 0xb0a +#define CSR_MHPMCOUNTER11 0xb0b +#define CSR_MHPMCOUNTER12 0xb0c +#define CSR_MHPMCOUNTER13 0xb0d +#define CSR_MHPMCOUNTER14 0xb0e +#define CSR_MHPMCOUNTER15 0xb0f +#define CSR_MHPMCOUNTER16 0xb10 +#define CSR_MHPMCOUNTER17 0xb11 +#define CSR_MHPMCOUNTER18 0xb12 +#define CSR_MHPMCOUNTER19 0xb13 +#define CSR_MHPMCOUNTER20 0xb14 +#define CSR_MHPMCOUNTER21 0xb15 +#define CSR_MHPMCOUNTER22 0xb16 +#define CSR_MHPMCOUNTER23 0xb17 +#define CSR_MHPMCOUNTER24 0xb18 +#define CSR_MHPMCOUNTER25 0xb19 +#define CSR_MHPMCOUNTER26 0xb1a +#define CSR_MHPMCOUNTER27 0xb1b +#define CSR_MHPMCOUNTER28 0xb1c +#define CSR_MHPMCOUNTER29 0xb1d +#define CSR_MHPMCOUNTER30 0xb1e +#define CSR_MHPMCOUNTER31 0xb1f +#define CSR_MHPMEVENT3 0x323 +#define CSR_MHPMEVENT4 0x324 +#define CSR_MHPMEVENT5 0x325 +#define CSR_MHPMEVENT6 0x326 +#define CSR_MHPMEVENT7 0x327 +#define CSR_MHPMEVENT8 0x328 +#define CSR_MHPMEVENT9 0x329 +#define CSR_MHPMEVENT10 0x32a +#define CSR_MHPMEVENT11 0x32b +#define CSR_MHPMEVENT12 0x32c +#define CSR_MHPMEVENT13 0x32d +#define CSR_MHPMEVENT14 0x32e +#define CSR_MHPMEVENT15 0x32f +#define CSR_MHPMEVENT16 0x330 +#define CSR_MHPMEVENT17 0x331 +#define CSR_MHPMEVENT18 0x332 +#define CSR_MHPMEVENT19 0x333 +#define CSR_MHPMEVENT20 0x334 +#define CSR_MHPMEVENT21 0x335 +#define CSR_MHPMEVENT22 0x336 +#define CSR_MHPMEVENT23 0x337 +#define CSR_MHPMEVENT24 0x338 +#define CSR_MHPMEVENT25 0x339 +#define CSR_MHPMEVENT26 0x33a +#define CSR_MHPMEVENT27 0x33b +#define CSR_MHPMEVENT28 0x33c +#define CSR_MHPMEVENT29 0x33d +#define CSR_MHPMEVENT30 0x33e +#define CSR_MHPMEVENT31 0x33f +#define CSR_MVENDORID 0xf11 +#define CSR_MARCHID 0xf12 +#define CSR_MIMPID 0xf13 +#define CSR_MHARTID 0xf14 +#define CSR_CYCLEH 0xc80 +#define CSR_TIMEH 0xc81 +#define CSR_INSTRETH 0xc82 +#define CSR_HPMCOUNTER3H 0xc83 +#define CSR_HPMCOUNTER4H 0xc84 +#define CSR_HPMCOUNTER5H 0xc85 +#define CSR_HPMCOUNTER6H 0xc86 +#define CSR_HPMCOUNTER7H 0xc87 +#define CSR_HPMCOUNTER8H 0xc88 +#define CSR_HPMCOUNTER9H 0xc89 +#define CSR_HPMCOUNTER10H 0xc8a +#define CSR_HPMCOUNTER11H 0xc8b +#define CSR_HPMCOUNTER12H 0xc8c +#define CSR_HPMCOUNTER13H 0xc8d +#define CSR_HPMCOUNTER14H 0xc8e +#define CSR_HPMCOUNTER15H 0xc8f +#define CSR_HPMCOUNTER16H 0xc90 +#define CSR_HPMCOUNTER17H 0xc91 +#define CSR_HPMCOUNTER18H 0xc92 +#define CSR_HPMCOUNTER19H 0xc93 +#define CSR_HPMCOUNTER20H 0xc94 +#define CSR_HPMCOUNTER21H 0xc95 +#define CSR_HPMCOUNTER22H 0xc96 +#define CSR_HPMCOUNTER23H 0xc97 +#define CSR_HPMCOUNTER24H 0xc98 +#define CSR_HPMCOUNTER25H 0xc99 +#define CSR_HPMCOUNTER26H 0xc9a +#define CSR_HPMCOUNTER27H 0xc9b +#define CSR_HPMCOUNTER28H 0xc9c +#define CSR_HPMCOUNTER29H 0xc9d +#define CSR_HPMCOUNTER30H 0xc9e +#define CSR_HPMCOUNTER31H 0xc9f +#define CSR_MCYCLEH 0xb80 +#define CSR_MINSTRETH 0xb82 +#define CSR_MHPMCOUNTER3H 0xb83 +#define CSR_MHPMCOUNTER4H 0xb84 +#define CSR_MHPMCOUNTER5H 0xb85 +#define CSR_MHPMCOUNTER6H 0xb86 +#define CSR_MHPMCOUNTER7H 0xb87 +#define CSR_MHPMCOUNTER8H 0xb88 +#define CSR_MHPMCOUNTER9H 0xb89 +#define CSR_MHPMCOUNTER10H 0xb8a +#define CSR_MHPMCOUNTER11H 0xb8b +#define CSR_MHPMCOUNTER12H 0xb8c +#define CSR_MHPMCOUNTER13H 0xb8d +#define CSR_MHPMCOUNTER14H 0xb8e +#define CSR_MHPMCOUNTER15H 0xb8f +#define CSR_MHPMCOUNTER16H 0xb90 +#define CSR_MHPMCOUNTER17H 0xb91 +#define CSR_MHPMCOUNTER18H 0xb92 +#define CSR_MHPMCOUNTER19H 0xb93 +#define CSR_MHPMCOUNTER20H 0xb94 +#define CSR_MHPMCOUNTER21H 0xb95 +#define CSR_MHPMCOUNTER22H 0xb96 +#define CSR_MHPMCOUNTER23H 0xb97 +#define CSR_MHPMCOUNTER24H 0xb98 +#define CSR_MHPMCOUNTER25H 0xb99 +#define CSR_MHPMCOUNTER26H 0xb9a +#define CSR_MHPMCOUNTER27H 0xb9b +#define CSR_MHPMCOUNTER28H 0xb9c +#define CSR_MHPMCOUNTER29H 0xb9d +#define CSR_MHPMCOUNTER30H 0xb9e +#define CSR_MHPMCOUNTER31H 0xb9f +#define CAUSE_MISALIGNED_FETCH 0x0 +#define CAUSE_FETCH_ACCESS 0x1 +#define CAUSE_ILLEGAL_INSTRUCTION 0x2 +#define CAUSE_BREAKPOINT 0x3 +#define CAUSE_MISALIGNED_LOAD 0x4 +#define CAUSE_LOAD_ACCESS 0x5 +#define CAUSE_MISALIGNED_STORE 0x6 +#define CAUSE_STORE_ACCESS 0x7 +#define CAUSE_USER_ECALL 0x8 +#define CAUSE_SUPERVISOR_ECALL 0x9 +#define CAUSE_HYPERVISOR_ECALL 0xa +#define CAUSE_MACHINE_ECALL 0xb +#define CAUSE_FETCH_PAGE_FAULT 0xc +#define CAUSE_LOAD_PAGE_FAULT 0xd +#define CAUSE_STORE_PAGE_FAULT 0xf +#endif +#ifdef DECLARE_INSN +DECLARE_INSN(beq, MATCH_BEQ, MASK_BEQ) +DECLARE_INSN(bne, MATCH_BNE, MASK_BNE) +DECLARE_INSN(blt, MATCH_BLT, MASK_BLT) +DECLARE_INSN(bge, MATCH_BGE, MASK_BGE) +DECLARE_INSN(bltu, MATCH_BLTU, MASK_BLTU) +DECLARE_INSN(bgeu, MATCH_BGEU, MASK_BGEU) +DECLARE_INSN(jalr, MATCH_JALR, MASK_JALR) +DECLARE_INSN(jal, MATCH_JAL, MASK_JAL) +DECLARE_INSN(lui, MATCH_LUI, MASK_LUI) +DECLARE_INSN(auipc, MATCH_AUIPC, MASK_AUIPC) +DECLARE_INSN(addi, MATCH_ADDI, MASK_ADDI) +DECLARE_INSN(slli, MATCH_SLLI, MASK_SLLI) +DECLARE_INSN(slti, MATCH_SLTI, MASK_SLTI) +DECLARE_INSN(sltiu, MATCH_SLTIU, MASK_SLTIU) +DECLARE_INSN(xori, MATCH_XORI, MASK_XORI) +DECLARE_INSN(srli, MATCH_SRLI, MASK_SRLI) +DECLARE_INSN(srai, MATCH_SRAI, MASK_SRAI) +DECLARE_INSN(ori, MATCH_ORI, MASK_ORI) +DECLARE_INSN(andi, MATCH_ANDI, MASK_ANDI) +DECLARE_INSN(add, MATCH_ADD, MASK_ADD) +DECLARE_INSN(sub, MATCH_SUB, MASK_SUB) +DECLARE_INSN(sll, MATCH_SLL, MASK_SLL) +DECLARE_INSN(slt, MATCH_SLT, MASK_SLT) +DECLARE_INSN(sltu, MATCH_SLTU, MASK_SLTU) +DECLARE_INSN(xor, MATCH_XOR, MASK_XOR) +DECLARE_INSN(srl, MATCH_SRL, MASK_SRL) +DECLARE_INSN(sra, MATCH_SRA, MASK_SRA) +DECLARE_INSN(or, MATCH_OR, MASK_OR) +DECLARE_INSN(and, MATCH_AND, MASK_AND) +DECLARE_INSN(addiw, MATCH_ADDIW, MASK_ADDIW) +DECLARE_INSN(slliw, MATCH_SLLIW, MASK_SLLIW) +DECLARE_INSN(srliw, MATCH_SRLIW, MASK_SRLIW) +DECLARE_INSN(sraiw, MATCH_SRAIW, MASK_SRAIW) +DECLARE_INSN(addw, MATCH_ADDW, MASK_ADDW) +DECLARE_INSN(subw, MATCH_SUBW, MASK_SUBW) +DECLARE_INSN(sllw, MATCH_SLLW, MASK_SLLW) +DECLARE_INSN(srlw, MATCH_SRLW, MASK_SRLW) +DECLARE_INSN(sraw, MATCH_SRAW, MASK_SRAW) +DECLARE_INSN(lb, MATCH_LB, MASK_LB) +DECLARE_INSN(lh, MATCH_LH, MASK_LH) +DECLARE_INSN(lw, MATCH_LW, MASK_LW) +DECLARE_INSN(ld, MATCH_LD, MASK_LD) +DECLARE_INSN(lbu, MATCH_LBU, MASK_LBU) +DECLARE_INSN(lhu, MATCH_LHU, MASK_LHU) +DECLARE_INSN(lwu, MATCH_LWU, MASK_LWU) +DECLARE_INSN(sb, MATCH_SB, MASK_SB) +DECLARE_INSN(sh, MATCH_SH, MASK_SH) +DECLARE_INSN(sw, MATCH_SW, MASK_SW) +DECLARE_INSN(sd, MATCH_SD, MASK_SD) +DECLARE_INSN(fence, MATCH_FENCE, MASK_FENCE) +DECLARE_INSN(fence_i, MATCH_FENCE_I, MASK_FENCE_I) +DECLARE_INSN(mul, MATCH_MUL, MASK_MUL) +DECLARE_INSN(mulh, MATCH_MULH, MASK_MULH) +DECLARE_INSN(mulhsu, MATCH_MULHSU, MASK_MULHSU) +DECLARE_INSN(mulhu, MATCH_MULHU, MASK_MULHU) +DECLARE_INSN(div, MATCH_DIV, MASK_DIV) +DECLARE_INSN(divu, MATCH_DIVU, MASK_DIVU) +DECLARE_INSN(rem, MATCH_REM, MASK_REM) +DECLARE_INSN(remu, MATCH_REMU, MASK_REMU) +DECLARE_INSN(mulw, MATCH_MULW, MASK_MULW) +DECLARE_INSN(divw, MATCH_DIVW, MASK_DIVW) +DECLARE_INSN(divuw, MATCH_DIVUW, MASK_DIVUW) +DECLARE_INSN(remw, MATCH_REMW, MASK_REMW) +DECLARE_INSN(remuw, MATCH_REMUW, MASK_REMUW) +DECLARE_INSN(amoadd_w, MATCH_AMOADD_W, MASK_AMOADD_W) +DECLARE_INSN(amoxor_w, MATCH_AMOXOR_W, MASK_AMOXOR_W) +DECLARE_INSN(amoor_w, MATCH_AMOOR_W, MASK_AMOOR_W) +DECLARE_INSN(amoand_w, MATCH_AMOAND_W, MASK_AMOAND_W) +DECLARE_INSN(amomin_w, MATCH_AMOMIN_W, MASK_AMOMIN_W) +DECLARE_INSN(amomax_w, MATCH_AMOMAX_W, MASK_AMOMAX_W) +DECLARE_INSN(amominu_w, MATCH_AMOMINU_W, MASK_AMOMINU_W) +DECLARE_INSN(amomaxu_w, MATCH_AMOMAXU_W, MASK_AMOMAXU_W) +DECLARE_INSN(amoswap_w, MATCH_AMOSWAP_W, MASK_AMOSWAP_W) +DECLARE_INSN(lr_w, MATCH_LR_W, MASK_LR_W) +DECLARE_INSN(sc_w, MATCH_SC_W, MASK_SC_W) +DECLARE_INSN(amoadd_d, MATCH_AMOADD_D, MASK_AMOADD_D) +DECLARE_INSN(amoxor_d, MATCH_AMOXOR_D, MASK_AMOXOR_D) +DECLARE_INSN(amoor_d, MATCH_AMOOR_D, MASK_AMOOR_D) +DECLARE_INSN(amoand_d, MATCH_AMOAND_D, MASK_AMOAND_D) +DECLARE_INSN(amomin_d, MATCH_AMOMIN_D, MASK_AMOMIN_D) +DECLARE_INSN(amomax_d, MATCH_AMOMAX_D, MASK_AMOMAX_D) +DECLARE_INSN(amominu_d, MATCH_AMOMINU_D, MASK_AMOMINU_D) +DECLARE_INSN(amomaxu_d, MATCH_AMOMAXU_D, MASK_AMOMAXU_D) +DECLARE_INSN(amoswap_d, MATCH_AMOSWAP_D, MASK_AMOSWAP_D) +DECLARE_INSN(lr_d, MATCH_LR_D, MASK_LR_D) +DECLARE_INSN(sc_d, MATCH_SC_D, MASK_SC_D) +DECLARE_INSN(ecall, MATCH_ECALL, MASK_ECALL) +DECLARE_INSN(ebreak, MATCH_EBREAK, MASK_EBREAK) +DECLARE_INSN(uret, MATCH_URET, MASK_URET) +DECLARE_INSN(sret, MATCH_SRET, MASK_SRET) +DECLARE_INSN(mret, MATCH_MRET, MASK_MRET) +DECLARE_INSN(dret, MATCH_DRET, MASK_DRET) +DECLARE_INSN(sfence_vma, MATCH_SFENCE_VMA, MASK_SFENCE_VMA) +DECLARE_INSN(wfi, MATCH_WFI, MASK_WFI) +DECLARE_INSN(csrrw, MATCH_CSRRW, MASK_CSRRW) +DECLARE_INSN(csrrs, MATCH_CSRRS, MASK_CSRRS) +DECLARE_INSN(csrrc, MATCH_CSRRC, MASK_CSRRC) +DECLARE_INSN(csrrwi, MATCH_CSRRWI, MASK_CSRRWI) +DECLARE_INSN(csrrsi, MATCH_CSRRSI, MASK_CSRRSI) +DECLARE_INSN(csrrci, MATCH_CSRRCI, MASK_CSRRCI) +DECLARE_INSN(fadd_s, MATCH_FADD_S, MASK_FADD_S) +DECLARE_INSN(fsub_s, MATCH_FSUB_S, MASK_FSUB_S) +DECLARE_INSN(fmul_s, MATCH_FMUL_S, MASK_FMUL_S) +DECLARE_INSN(fdiv_s, MATCH_FDIV_S, MASK_FDIV_S) +DECLARE_INSN(fsgnj_s, MATCH_FSGNJ_S, MASK_FSGNJ_S) +DECLARE_INSN(fsgnjn_s, MATCH_FSGNJN_S, MASK_FSGNJN_S) +DECLARE_INSN(fsgnjx_s, MATCH_FSGNJX_S, MASK_FSGNJX_S) +DECLARE_INSN(fmin_s, MATCH_FMIN_S, MASK_FMIN_S) +DECLARE_INSN(fmax_s, MATCH_FMAX_S, MASK_FMAX_S) +DECLARE_INSN(fsqrt_s, MATCH_FSQRT_S, MASK_FSQRT_S) +DECLARE_INSN(fadd_d, MATCH_FADD_D, MASK_FADD_D) +DECLARE_INSN(fsub_d, MATCH_FSUB_D, MASK_FSUB_D) +DECLARE_INSN(fmul_d, MATCH_FMUL_D, MASK_FMUL_D) +DECLARE_INSN(fdiv_d, MATCH_FDIV_D, MASK_FDIV_D) +DECLARE_INSN(fsgnj_d, MATCH_FSGNJ_D, MASK_FSGNJ_D) +DECLARE_INSN(fsgnjn_d, MATCH_FSGNJN_D, MASK_FSGNJN_D) +DECLARE_INSN(fsgnjx_d, MATCH_FSGNJX_D, MASK_FSGNJX_D) +DECLARE_INSN(fmin_d, MATCH_FMIN_D, MASK_FMIN_D) +DECLARE_INSN(fmax_d, MATCH_FMAX_D, MASK_FMAX_D) +DECLARE_INSN(fcvt_s_d, MATCH_FCVT_S_D, MASK_FCVT_S_D) +DECLARE_INSN(fcvt_d_s, MATCH_FCVT_D_S, MASK_FCVT_D_S) +DECLARE_INSN(fsqrt_d, MATCH_FSQRT_D, MASK_FSQRT_D) +DECLARE_INSN(fadd_q, MATCH_FADD_Q, MASK_FADD_Q) +DECLARE_INSN(fsub_q, MATCH_FSUB_Q, MASK_FSUB_Q) +DECLARE_INSN(fmul_q, MATCH_FMUL_Q, MASK_FMUL_Q) +DECLARE_INSN(fdiv_q, MATCH_FDIV_Q, MASK_FDIV_Q) +DECLARE_INSN(fsgnj_q, MATCH_FSGNJ_Q, MASK_FSGNJ_Q) +DECLARE_INSN(fsgnjn_q, MATCH_FSGNJN_Q, MASK_FSGNJN_Q) +DECLARE_INSN(fsgnjx_q, MATCH_FSGNJX_Q, MASK_FSGNJX_Q) +DECLARE_INSN(fmin_q, MATCH_FMIN_Q, MASK_FMIN_Q) +DECLARE_INSN(fmax_q, MATCH_FMAX_Q, MASK_FMAX_Q) +DECLARE_INSN(fcvt_s_q, MATCH_FCVT_S_Q, MASK_FCVT_S_Q) +DECLARE_INSN(fcvt_q_s, MATCH_FCVT_Q_S, MASK_FCVT_Q_S) +DECLARE_INSN(fcvt_d_q, MATCH_FCVT_D_Q, MASK_FCVT_D_Q) +DECLARE_INSN(fcvt_q_d, MATCH_FCVT_Q_D, MASK_FCVT_Q_D) +DECLARE_INSN(fsqrt_q, MATCH_FSQRT_Q, MASK_FSQRT_Q) +DECLARE_INSN(fle_s, MATCH_FLE_S, MASK_FLE_S) +DECLARE_INSN(flt_s, MATCH_FLT_S, MASK_FLT_S) +DECLARE_INSN(feq_s, MATCH_FEQ_S, MASK_FEQ_S) +DECLARE_INSN(fle_d, MATCH_FLE_D, MASK_FLE_D) +DECLARE_INSN(flt_d, MATCH_FLT_D, MASK_FLT_D) +DECLARE_INSN(feq_d, MATCH_FEQ_D, MASK_FEQ_D) +DECLARE_INSN(fle_q, MATCH_FLE_Q, MASK_FLE_Q) +DECLARE_INSN(flt_q, MATCH_FLT_Q, MASK_FLT_Q) +DECLARE_INSN(feq_q, MATCH_FEQ_Q, MASK_FEQ_Q) +DECLARE_INSN(fcvt_w_s, MATCH_FCVT_W_S, MASK_FCVT_W_S) +DECLARE_INSN(fcvt_wu_s, MATCH_FCVT_WU_S, MASK_FCVT_WU_S) +DECLARE_INSN(fcvt_l_s, MATCH_FCVT_L_S, MASK_FCVT_L_S) +DECLARE_INSN(fcvt_lu_s, MATCH_FCVT_LU_S, MASK_FCVT_LU_S) +DECLARE_INSN(fmv_x_w, MATCH_FMV_X_W, MASK_FMV_X_W) +DECLARE_INSN(fclass_s, MATCH_FCLASS_S, MASK_FCLASS_S) +DECLARE_INSN(fcvt_w_d, MATCH_FCVT_W_D, MASK_FCVT_W_D) +DECLARE_INSN(fcvt_wu_d, MATCH_FCVT_WU_D, MASK_FCVT_WU_D) +DECLARE_INSN(fcvt_l_d, MATCH_FCVT_L_D, MASK_FCVT_L_D) +DECLARE_INSN(fcvt_lu_d, MATCH_FCVT_LU_D, MASK_FCVT_LU_D) +DECLARE_INSN(fmv_x_d, MATCH_FMV_X_D, MASK_FMV_X_D) +DECLARE_INSN(fclass_d, MATCH_FCLASS_D, MASK_FCLASS_D) +DECLARE_INSN(fcvt_w_q, MATCH_FCVT_W_Q, MASK_FCVT_W_Q) +DECLARE_INSN(fcvt_wu_q, MATCH_FCVT_WU_Q, MASK_FCVT_WU_Q) +DECLARE_INSN(fcvt_l_q, MATCH_FCVT_L_Q, MASK_FCVT_L_Q) +DECLARE_INSN(fcvt_lu_q, MATCH_FCVT_LU_Q, MASK_FCVT_LU_Q) +DECLARE_INSN(fmv_x_q, MATCH_FMV_X_Q, MASK_FMV_X_Q) +DECLARE_INSN(fclass_q, MATCH_FCLASS_Q, MASK_FCLASS_Q) +DECLARE_INSN(fcvt_s_w, MATCH_FCVT_S_W, MASK_FCVT_S_W) +DECLARE_INSN(fcvt_s_wu, MATCH_FCVT_S_WU, MASK_FCVT_S_WU) +DECLARE_INSN(fcvt_s_l, MATCH_FCVT_S_L, MASK_FCVT_S_L) +DECLARE_INSN(fcvt_s_lu, MATCH_FCVT_S_LU, MASK_FCVT_S_LU) +DECLARE_INSN(fmv_w_x, MATCH_FMV_W_X, MASK_FMV_W_X) +DECLARE_INSN(fcvt_d_w, MATCH_FCVT_D_W, MASK_FCVT_D_W) +DECLARE_INSN(fcvt_d_wu, MATCH_FCVT_D_WU, MASK_FCVT_D_WU) +DECLARE_INSN(fcvt_d_l, MATCH_FCVT_D_L, MASK_FCVT_D_L) +DECLARE_INSN(fcvt_d_lu, MATCH_FCVT_D_LU, MASK_FCVT_D_LU) +DECLARE_INSN(fmv_d_x, MATCH_FMV_D_X, MASK_FMV_D_X) +DECLARE_INSN(fcvt_q_w, MATCH_FCVT_Q_W, MASK_FCVT_Q_W) +DECLARE_INSN(fcvt_q_wu, MATCH_FCVT_Q_WU, MASK_FCVT_Q_WU) +DECLARE_INSN(fcvt_q_l, MATCH_FCVT_Q_L, MASK_FCVT_Q_L) +DECLARE_INSN(fcvt_q_lu, MATCH_FCVT_Q_LU, MASK_FCVT_Q_LU) +DECLARE_INSN(fmv_q_x, MATCH_FMV_Q_X, MASK_FMV_Q_X) +DECLARE_INSN(flw, MATCH_FLW, MASK_FLW) +DECLARE_INSN(fld, MATCH_FLD, MASK_FLD) +DECLARE_INSN(flq, MATCH_FLQ, MASK_FLQ) +DECLARE_INSN(fsw, MATCH_FSW, MASK_FSW) +DECLARE_INSN(fsd, MATCH_FSD, MASK_FSD) +DECLARE_INSN(fsq, MATCH_FSQ, MASK_FSQ) +DECLARE_INSN(fmadd_s, MATCH_FMADD_S, MASK_FMADD_S) +DECLARE_INSN(fmsub_s, MATCH_FMSUB_S, MASK_FMSUB_S) +DECLARE_INSN(fnmsub_s, MATCH_FNMSUB_S, MASK_FNMSUB_S) +DECLARE_INSN(fnmadd_s, MATCH_FNMADD_S, MASK_FNMADD_S) +DECLARE_INSN(fmadd_d, MATCH_FMADD_D, MASK_FMADD_D) +DECLARE_INSN(fmsub_d, MATCH_FMSUB_D, MASK_FMSUB_D) +DECLARE_INSN(fnmsub_d, MATCH_FNMSUB_D, MASK_FNMSUB_D) +DECLARE_INSN(fnmadd_d, MATCH_FNMADD_D, MASK_FNMADD_D) +DECLARE_INSN(fmadd_q, MATCH_FMADD_Q, MASK_FMADD_Q) +DECLARE_INSN(fmsub_q, MATCH_FMSUB_Q, MASK_FMSUB_Q) +DECLARE_INSN(fnmsub_q, MATCH_FNMSUB_Q, MASK_FNMSUB_Q) +DECLARE_INSN(fnmadd_q, MATCH_FNMADD_Q, MASK_FNMADD_Q) +DECLARE_INSN(c_nop, MATCH_C_NOP, MASK_C_NOP) +DECLARE_INSN(c_addi16sp, MATCH_C_ADDI16SP, MASK_C_ADDI16SP) +DECLARE_INSN(c_jr, MATCH_C_JR, MASK_C_JR) +DECLARE_INSN(c_jalr, MATCH_C_JALR, MASK_C_JALR) +DECLARE_INSN(c_ebreak, MATCH_C_EBREAK, MASK_C_EBREAK) +DECLARE_INSN(c_ld, MATCH_C_LD, MASK_C_LD) +DECLARE_INSN(c_sd, MATCH_C_SD, MASK_C_SD) +DECLARE_INSN(c_addiw, MATCH_C_ADDIW, MASK_C_ADDIW) +DECLARE_INSN(c_ldsp, MATCH_C_LDSP, MASK_C_LDSP) +DECLARE_INSN(c_sdsp, MATCH_C_SDSP, MASK_C_SDSP) +DECLARE_INSN(c_addi4spn, MATCH_C_ADDI4SPN, MASK_C_ADDI4SPN) +DECLARE_INSN(c_fld, MATCH_C_FLD, MASK_C_FLD) +DECLARE_INSN(c_lw, MATCH_C_LW, MASK_C_LW) +DECLARE_INSN(c_flw, MATCH_C_FLW, MASK_C_FLW) +DECLARE_INSN(c_fsd, MATCH_C_FSD, MASK_C_FSD) +DECLARE_INSN(c_sw, MATCH_C_SW, MASK_C_SW) +DECLARE_INSN(c_fsw, MATCH_C_FSW, MASK_C_FSW) +DECLARE_INSN(c_addi, MATCH_C_ADDI, MASK_C_ADDI) +DECLARE_INSN(c_jal, MATCH_C_JAL, MASK_C_JAL) +DECLARE_INSN(c_li, MATCH_C_LI, MASK_C_LI) +DECLARE_INSN(c_lui, MATCH_C_LUI, MASK_C_LUI) +DECLARE_INSN(c_srli, MATCH_C_SRLI, MASK_C_SRLI) +DECLARE_INSN(c_srai, MATCH_C_SRAI, MASK_C_SRAI) +DECLARE_INSN(c_andi, MATCH_C_ANDI, MASK_C_ANDI) +DECLARE_INSN(c_sub, MATCH_C_SUB, MASK_C_SUB) +DECLARE_INSN(c_xor, MATCH_C_XOR, MASK_C_XOR) +DECLARE_INSN(c_or, MATCH_C_OR, MASK_C_OR) +DECLARE_INSN(c_and, MATCH_C_AND, MASK_C_AND) +DECLARE_INSN(c_subw, MATCH_C_SUBW, MASK_C_SUBW) +DECLARE_INSN(c_addw, MATCH_C_ADDW, MASK_C_ADDW) +DECLARE_INSN(c_j, MATCH_C_J, MASK_C_J) +DECLARE_INSN(c_beqz, MATCH_C_BEQZ, MASK_C_BEQZ) +DECLARE_INSN(c_bnez, MATCH_C_BNEZ, MASK_C_BNEZ) +DECLARE_INSN(c_slli, MATCH_C_SLLI, MASK_C_SLLI) +DECLARE_INSN(c_fldsp, MATCH_C_FLDSP, MASK_C_FLDSP) +DECLARE_INSN(c_lwsp, MATCH_C_LWSP, MASK_C_LWSP) +DECLARE_INSN(c_flwsp, MATCH_C_FLWSP, MASK_C_FLWSP) +DECLARE_INSN(c_mv, MATCH_C_MV, MASK_C_MV) +DECLARE_INSN(c_add, MATCH_C_ADD, MASK_C_ADD) +DECLARE_INSN(c_fsdsp, MATCH_C_FSDSP, MASK_C_FSDSP) +DECLARE_INSN(c_swsp, MATCH_C_SWSP, MASK_C_SWSP) +DECLARE_INSN(c_fswsp, MATCH_C_FSWSP, MASK_C_FSWSP) +DECLARE_INSN(custom0, MATCH_CUSTOM0, MASK_CUSTOM0) +DECLARE_INSN(custom0_rs1, MATCH_CUSTOM0_RS1, MASK_CUSTOM0_RS1) +DECLARE_INSN(custom0_rs1_rs2, MATCH_CUSTOM0_RS1_RS2, MASK_CUSTOM0_RS1_RS2) +DECLARE_INSN(custom0_rd, MATCH_CUSTOM0_RD, MASK_CUSTOM0_RD) +DECLARE_INSN(custom0_rd_rs1, MATCH_CUSTOM0_RD_RS1, MASK_CUSTOM0_RD_RS1) +DECLARE_INSN(custom0_rd_rs1_rs2, MATCH_CUSTOM0_RD_RS1_RS2, MASK_CUSTOM0_RD_RS1_RS2) +DECLARE_INSN(custom1, MATCH_CUSTOM1, MASK_CUSTOM1) +DECLARE_INSN(custom1_rs1, MATCH_CUSTOM1_RS1, MASK_CUSTOM1_RS1) +DECLARE_INSN(custom1_rs1_rs2, MATCH_CUSTOM1_RS1_RS2, MASK_CUSTOM1_RS1_RS2) +DECLARE_INSN(custom1_rd, MATCH_CUSTOM1_RD, MASK_CUSTOM1_RD) +DECLARE_INSN(custom1_rd_rs1, MATCH_CUSTOM1_RD_RS1, MASK_CUSTOM1_RD_RS1) +DECLARE_INSN(custom1_rd_rs1_rs2, MATCH_CUSTOM1_RD_RS1_RS2, MASK_CUSTOM1_RD_RS1_RS2) +DECLARE_INSN(custom2, MATCH_CUSTOM2, MASK_CUSTOM2) +DECLARE_INSN(custom2_rs1, MATCH_CUSTOM2_RS1, MASK_CUSTOM2_RS1) +DECLARE_INSN(custom2_rs1_rs2, MATCH_CUSTOM2_RS1_RS2, MASK_CUSTOM2_RS1_RS2) +DECLARE_INSN(custom2_rd, MATCH_CUSTOM2_RD, MASK_CUSTOM2_RD) +DECLARE_INSN(custom2_rd_rs1, MATCH_CUSTOM2_RD_RS1, MASK_CUSTOM2_RD_RS1) +DECLARE_INSN(custom2_rd_rs1_rs2, MATCH_CUSTOM2_RD_RS1_RS2, MASK_CUSTOM2_RD_RS1_RS2) +DECLARE_INSN(custom3, MATCH_CUSTOM3, MASK_CUSTOM3) +DECLARE_INSN(custom3_rs1, MATCH_CUSTOM3_RS1, MASK_CUSTOM3_RS1) +DECLARE_INSN(custom3_rs1_rs2, MATCH_CUSTOM3_RS1_RS2, MASK_CUSTOM3_RS1_RS2) +DECLARE_INSN(custom3_rd, MATCH_CUSTOM3_RD, MASK_CUSTOM3_RD) +DECLARE_INSN(custom3_rd_rs1, MATCH_CUSTOM3_RD_RS1, MASK_CUSTOM3_RD_RS1) +DECLARE_INSN(custom3_rd_rs1_rs2, MATCH_CUSTOM3_RD_RS1_RS2, MASK_CUSTOM3_RD_RS1_RS2) +#endif +#ifdef DECLARE_CSR +DECLARE_CSR(fflags, CSR_FFLAGS) +DECLARE_CSR(frm, CSR_FRM) +DECLARE_CSR(fcsr, CSR_FCSR) +DECLARE_CSR(cycle, CSR_CYCLE) +DECLARE_CSR(time, CSR_TIME) +DECLARE_CSR(instret, CSR_INSTRET) +DECLARE_CSR(hpmcounter3, CSR_HPMCOUNTER3) +DECLARE_CSR(hpmcounter4, CSR_HPMCOUNTER4) +DECLARE_CSR(hpmcounter5, CSR_HPMCOUNTER5) +DECLARE_CSR(hpmcounter6, CSR_HPMCOUNTER6) +DECLARE_CSR(hpmcounter7, CSR_HPMCOUNTER7) +DECLARE_CSR(hpmcounter8, CSR_HPMCOUNTER8) +DECLARE_CSR(hpmcounter9, CSR_HPMCOUNTER9) +DECLARE_CSR(hpmcounter10, CSR_HPMCOUNTER10) +DECLARE_CSR(hpmcounter11, CSR_HPMCOUNTER11) +DECLARE_CSR(hpmcounter12, CSR_HPMCOUNTER12) +DECLARE_CSR(hpmcounter13, CSR_HPMCOUNTER13) +DECLARE_CSR(hpmcounter14, CSR_HPMCOUNTER14) +DECLARE_CSR(hpmcounter15, CSR_HPMCOUNTER15) +DECLARE_CSR(hpmcounter16, CSR_HPMCOUNTER16) +DECLARE_CSR(hpmcounter17, CSR_HPMCOUNTER17) +DECLARE_CSR(hpmcounter18, CSR_HPMCOUNTER18) +DECLARE_CSR(hpmcounter19, CSR_HPMCOUNTER19) +DECLARE_CSR(hpmcounter20, CSR_HPMCOUNTER20) +DECLARE_CSR(hpmcounter21, CSR_HPMCOUNTER21) +DECLARE_CSR(hpmcounter22, CSR_HPMCOUNTER22) +DECLARE_CSR(hpmcounter23, CSR_HPMCOUNTER23) +DECLARE_CSR(hpmcounter24, CSR_HPMCOUNTER24) +DECLARE_CSR(hpmcounter25, CSR_HPMCOUNTER25) +DECLARE_CSR(hpmcounter26, CSR_HPMCOUNTER26) +DECLARE_CSR(hpmcounter27, CSR_HPMCOUNTER27) +DECLARE_CSR(hpmcounter28, CSR_HPMCOUNTER28) +DECLARE_CSR(hpmcounter29, CSR_HPMCOUNTER29) +DECLARE_CSR(hpmcounter30, CSR_HPMCOUNTER30) +DECLARE_CSR(hpmcounter31, CSR_HPMCOUNTER31) +DECLARE_CSR(sstatus, CSR_SSTATUS) +DECLARE_CSR(sie, CSR_SIE) +DECLARE_CSR(stvec, CSR_STVEC) +DECLARE_CSR(scounteren, CSR_SCOUNTEREN) +DECLARE_CSR(sscratch, CSR_SSCRATCH) +DECLARE_CSR(sepc, CSR_SEPC) +DECLARE_CSR(scause, CSR_SCAUSE) +DECLARE_CSR(stval, CSR_STVAL) +DECLARE_CSR(sip, CSR_SIP) +DECLARE_CSR(satp, CSR_SATP) +DECLARE_CSR(mstatus, CSR_MSTATUS) +DECLARE_CSR(misa, CSR_MISA) +DECLARE_CSR(medeleg, CSR_MEDELEG) +DECLARE_CSR(mideleg, CSR_MIDELEG) +DECLARE_CSR(mie, CSR_MIE) +DECLARE_CSR(mtvec, CSR_MTVEC) +DECLARE_CSR(mcounteren, CSR_MCOUNTEREN) +DECLARE_CSR(mscratch, CSR_MSCRATCH) +DECLARE_CSR(mepc, CSR_MEPC) +DECLARE_CSR(mcause, CSR_MCAUSE) +DECLARE_CSR(mtval, CSR_MTVAL) +DECLARE_CSR(mip, CSR_MIP) +DECLARE_CSR(pmpcfg0, CSR_PMPCFG0) +DECLARE_CSR(pmpcfg1, CSR_PMPCFG1) +DECLARE_CSR(pmpcfg2, CSR_PMPCFG2) +DECLARE_CSR(pmpcfg3, CSR_PMPCFG3) +DECLARE_CSR(pmpaddr0, CSR_PMPADDR0) +DECLARE_CSR(pmpaddr1, CSR_PMPADDR1) +DECLARE_CSR(pmpaddr2, CSR_PMPADDR2) +DECLARE_CSR(pmpaddr3, CSR_PMPADDR3) +DECLARE_CSR(pmpaddr4, CSR_PMPADDR4) +DECLARE_CSR(pmpaddr5, CSR_PMPADDR5) +DECLARE_CSR(pmpaddr6, CSR_PMPADDR6) +DECLARE_CSR(pmpaddr7, CSR_PMPADDR7) +DECLARE_CSR(pmpaddr8, CSR_PMPADDR8) +DECLARE_CSR(pmpaddr9, CSR_PMPADDR9) +DECLARE_CSR(pmpaddr10, CSR_PMPADDR10) +DECLARE_CSR(pmpaddr11, CSR_PMPADDR11) +DECLARE_CSR(pmpaddr12, CSR_PMPADDR12) +DECLARE_CSR(pmpaddr13, CSR_PMPADDR13) +DECLARE_CSR(pmpaddr14, CSR_PMPADDR14) +DECLARE_CSR(pmpaddr15, CSR_PMPADDR15) +DECLARE_CSR(tselect, CSR_TSELECT) +DECLARE_CSR(tdata1, CSR_TDATA1) +DECLARE_CSR(tdata2, CSR_TDATA2) +DECLARE_CSR(tdata3, CSR_TDATA3) +DECLARE_CSR(dcsr, CSR_DCSR) +DECLARE_CSR(dpc, CSR_DPC) +DECLARE_CSR(dscratch, CSR_DSCRATCH) +DECLARE_CSR(mcycle, CSR_MCYCLE) +DECLARE_CSR(minstret, CSR_MINSTRET) +DECLARE_CSR(mhpmcounter3, CSR_MHPMCOUNTER3) +DECLARE_CSR(mhpmcounter4, CSR_MHPMCOUNTER4) +DECLARE_CSR(mhpmcounter5, CSR_MHPMCOUNTER5) +DECLARE_CSR(mhpmcounter6, CSR_MHPMCOUNTER6) +DECLARE_CSR(mhpmcounter7, CSR_MHPMCOUNTER7) +DECLARE_CSR(mhpmcounter8, CSR_MHPMCOUNTER8) +DECLARE_CSR(mhpmcounter9, CSR_MHPMCOUNTER9) +DECLARE_CSR(mhpmcounter10, CSR_MHPMCOUNTER10) +DECLARE_CSR(mhpmcounter11, CSR_MHPMCOUNTER11) +DECLARE_CSR(mhpmcounter12, CSR_MHPMCOUNTER12) +DECLARE_CSR(mhpmcounter13, CSR_MHPMCOUNTER13) +DECLARE_CSR(mhpmcounter14, CSR_MHPMCOUNTER14) +DECLARE_CSR(mhpmcounter15, CSR_MHPMCOUNTER15) +DECLARE_CSR(mhpmcounter16, CSR_MHPMCOUNTER16) +DECLARE_CSR(mhpmcounter17, CSR_MHPMCOUNTER17) +DECLARE_CSR(mhpmcounter18, CSR_MHPMCOUNTER18) +DECLARE_CSR(mhpmcounter19, CSR_MHPMCOUNTER19) +DECLARE_CSR(mhpmcounter20, CSR_MHPMCOUNTER20) +DECLARE_CSR(mhpmcounter21, CSR_MHPMCOUNTER21) +DECLARE_CSR(mhpmcounter22, CSR_MHPMCOUNTER22) +DECLARE_CSR(mhpmcounter23, CSR_MHPMCOUNTER23) +DECLARE_CSR(mhpmcounter24, CSR_MHPMCOUNTER24) +DECLARE_CSR(mhpmcounter25, CSR_MHPMCOUNTER25) +DECLARE_CSR(mhpmcounter26, CSR_MHPMCOUNTER26) +DECLARE_CSR(mhpmcounter27, CSR_MHPMCOUNTER27) +DECLARE_CSR(mhpmcounter28, CSR_MHPMCOUNTER28) +DECLARE_CSR(mhpmcounter29, CSR_MHPMCOUNTER29) +DECLARE_CSR(mhpmcounter30, CSR_MHPMCOUNTER30) +DECLARE_CSR(mhpmcounter31, CSR_MHPMCOUNTER31) +DECLARE_CSR(mhpmevent3, CSR_MHPMEVENT3) +DECLARE_CSR(mhpmevent4, CSR_MHPMEVENT4) +DECLARE_CSR(mhpmevent5, CSR_MHPMEVENT5) +DECLARE_CSR(mhpmevent6, CSR_MHPMEVENT6) +DECLARE_CSR(mhpmevent7, CSR_MHPMEVENT7) +DECLARE_CSR(mhpmevent8, CSR_MHPMEVENT8) +DECLARE_CSR(mhpmevent9, CSR_MHPMEVENT9) +DECLARE_CSR(mhpmevent10, CSR_MHPMEVENT10) +DECLARE_CSR(mhpmevent11, CSR_MHPMEVENT11) +DECLARE_CSR(mhpmevent12, CSR_MHPMEVENT12) +DECLARE_CSR(mhpmevent13, CSR_MHPMEVENT13) +DECLARE_CSR(mhpmevent14, CSR_MHPMEVENT14) +DECLARE_CSR(mhpmevent15, CSR_MHPMEVENT15) +DECLARE_CSR(mhpmevent16, CSR_MHPMEVENT16) +DECLARE_CSR(mhpmevent17, CSR_MHPMEVENT17) +DECLARE_CSR(mhpmevent18, CSR_MHPMEVENT18) +DECLARE_CSR(mhpmevent19, CSR_MHPMEVENT19) +DECLARE_CSR(mhpmevent20, CSR_MHPMEVENT20) +DECLARE_CSR(mhpmevent21, CSR_MHPMEVENT21) +DECLARE_CSR(mhpmevent22, CSR_MHPMEVENT22) +DECLARE_CSR(mhpmevent23, CSR_MHPMEVENT23) +DECLARE_CSR(mhpmevent24, CSR_MHPMEVENT24) +DECLARE_CSR(mhpmevent25, CSR_MHPMEVENT25) +DECLARE_CSR(mhpmevent26, CSR_MHPMEVENT26) +DECLARE_CSR(mhpmevent27, CSR_MHPMEVENT27) +DECLARE_CSR(mhpmevent28, CSR_MHPMEVENT28) +DECLARE_CSR(mhpmevent29, CSR_MHPMEVENT29) +DECLARE_CSR(mhpmevent30, CSR_MHPMEVENT30) +DECLARE_CSR(mhpmevent31, CSR_MHPMEVENT31) +DECLARE_CSR(mvendorid, CSR_MVENDORID) +DECLARE_CSR(marchid, CSR_MARCHID) +DECLARE_CSR(mimpid, CSR_MIMPID) +DECLARE_CSR(mhartid, CSR_MHARTID) +DECLARE_CSR(cycleh, CSR_CYCLEH) +DECLARE_CSR(timeh, CSR_TIMEH) +DECLARE_CSR(instreth, CSR_INSTRETH) +DECLARE_CSR(hpmcounter3h, CSR_HPMCOUNTER3H) +DECLARE_CSR(hpmcounter4h, CSR_HPMCOUNTER4H) +DECLARE_CSR(hpmcounter5h, CSR_HPMCOUNTER5H) +DECLARE_CSR(hpmcounter6h, CSR_HPMCOUNTER6H) +DECLARE_CSR(hpmcounter7h, CSR_HPMCOUNTER7H) +DECLARE_CSR(hpmcounter8h, CSR_HPMCOUNTER8H) +DECLARE_CSR(hpmcounter9h, CSR_HPMCOUNTER9H) +DECLARE_CSR(hpmcounter10h, CSR_HPMCOUNTER10H) +DECLARE_CSR(hpmcounter11h, CSR_HPMCOUNTER11H) +DECLARE_CSR(hpmcounter12h, CSR_HPMCOUNTER12H) +DECLARE_CSR(hpmcounter13h, CSR_HPMCOUNTER13H) +DECLARE_CSR(hpmcounter14h, CSR_HPMCOUNTER14H) +DECLARE_CSR(hpmcounter15h, CSR_HPMCOUNTER15H) +DECLARE_CSR(hpmcounter16h, CSR_HPMCOUNTER16H) +DECLARE_CSR(hpmcounter17h, CSR_HPMCOUNTER17H) +DECLARE_CSR(hpmcounter18h, CSR_HPMCOUNTER18H) +DECLARE_CSR(hpmcounter19h, CSR_HPMCOUNTER19H) +DECLARE_CSR(hpmcounter20h, CSR_HPMCOUNTER20H) +DECLARE_CSR(hpmcounter21h, CSR_HPMCOUNTER21H) +DECLARE_CSR(hpmcounter22h, CSR_HPMCOUNTER22H) +DECLARE_CSR(hpmcounter23h, CSR_HPMCOUNTER23H) +DECLARE_CSR(hpmcounter24h, CSR_HPMCOUNTER24H) +DECLARE_CSR(hpmcounter25h, CSR_HPMCOUNTER25H) +DECLARE_CSR(hpmcounter26h, CSR_HPMCOUNTER26H) +DECLARE_CSR(hpmcounter27h, CSR_HPMCOUNTER27H) +DECLARE_CSR(hpmcounter28h, CSR_HPMCOUNTER28H) +DECLARE_CSR(hpmcounter29h, CSR_HPMCOUNTER29H) +DECLARE_CSR(hpmcounter30h, CSR_HPMCOUNTER30H) +DECLARE_CSR(hpmcounter31h, CSR_HPMCOUNTER31H) +DECLARE_CSR(mcycleh, CSR_MCYCLEH) +DECLARE_CSR(minstreth, CSR_MINSTRETH) +DECLARE_CSR(mhpmcounter3h, CSR_MHPMCOUNTER3H) +DECLARE_CSR(mhpmcounter4h, CSR_MHPMCOUNTER4H) +DECLARE_CSR(mhpmcounter5h, CSR_MHPMCOUNTER5H) +DECLARE_CSR(mhpmcounter6h, CSR_MHPMCOUNTER6H) +DECLARE_CSR(mhpmcounter7h, CSR_MHPMCOUNTER7H) +DECLARE_CSR(mhpmcounter8h, CSR_MHPMCOUNTER8H) +DECLARE_CSR(mhpmcounter9h, CSR_MHPMCOUNTER9H) +DECLARE_CSR(mhpmcounter10h, CSR_MHPMCOUNTER10H) +DECLARE_CSR(mhpmcounter11h, CSR_MHPMCOUNTER11H) +DECLARE_CSR(mhpmcounter12h, CSR_MHPMCOUNTER12H) +DECLARE_CSR(mhpmcounter13h, CSR_MHPMCOUNTER13H) +DECLARE_CSR(mhpmcounter14h, CSR_MHPMCOUNTER14H) +DECLARE_CSR(mhpmcounter15h, CSR_MHPMCOUNTER15H) +DECLARE_CSR(mhpmcounter16h, CSR_MHPMCOUNTER16H) +DECLARE_CSR(mhpmcounter17h, CSR_MHPMCOUNTER17H) +DECLARE_CSR(mhpmcounter18h, CSR_MHPMCOUNTER18H) +DECLARE_CSR(mhpmcounter19h, CSR_MHPMCOUNTER19H) +DECLARE_CSR(mhpmcounter20h, CSR_MHPMCOUNTER20H) +DECLARE_CSR(mhpmcounter21h, CSR_MHPMCOUNTER21H) +DECLARE_CSR(mhpmcounter22h, CSR_MHPMCOUNTER22H) +DECLARE_CSR(mhpmcounter23h, CSR_MHPMCOUNTER23H) +DECLARE_CSR(mhpmcounter24h, CSR_MHPMCOUNTER24H) +DECLARE_CSR(mhpmcounter25h, CSR_MHPMCOUNTER25H) +DECLARE_CSR(mhpmcounter26h, CSR_MHPMCOUNTER26H) +DECLARE_CSR(mhpmcounter27h, CSR_MHPMCOUNTER27H) +DECLARE_CSR(mhpmcounter28h, CSR_MHPMCOUNTER28H) +DECLARE_CSR(mhpmcounter29h, CSR_MHPMCOUNTER29H) +DECLARE_CSR(mhpmcounter30h, CSR_MHPMCOUNTER30H) +DECLARE_CSR(mhpmcounter31h, CSR_MHPMCOUNTER31H) +#endif +#ifdef DECLARE_CAUSE +DECLARE_CAUSE("misaligned fetch", CAUSE_MISALIGNED_FETCH) +DECLARE_CAUSE("fetch access", CAUSE_FETCH_ACCESS) +DECLARE_CAUSE("illegal instruction", CAUSE_ILLEGAL_INSTRUCTION) +DECLARE_CAUSE("breakpoint", CAUSE_BREAKPOINT) +DECLARE_CAUSE("misaligned load", CAUSE_MISALIGNED_LOAD) +DECLARE_CAUSE("load access", CAUSE_LOAD_ACCESS) +DECLARE_CAUSE("misaligned store", CAUSE_MISALIGNED_STORE) +DECLARE_CAUSE("store access", CAUSE_STORE_ACCESS) +DECLARE_CAUSE("user_ecall", CAUSE_USER_ECALL) +DECLARE_CAUSE("supervisor_ecall", CAUSE_SUPERVISOR_ECALL) +DECLARE_CAUSE("hypervisor_ecall", CAUSE_HYPERVISOR_ECALL) +DECLARE_CAUSE("machine_ecall", CAUSE_MACHINE_ECALL) +DECLARE_CAUSE("fetch page fault", CAUSE_FETCH_PAGE_FAULT) +DECLARE_CAUSE("load page fault", CAUSE_LOAD_PAGE_FAULT) +DECLARE_CAUSE("store page fault", CAUSE_STORE_PAGE_FAULT) +#endif diff --git a/libraries/NEMU/resource/bbl/src/flush_icache.c b/libraries/NEMU/resource/bbl/src/flush_icache.c new file mode 100644 index 0000000..3a3dbc1 --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/flush_icache.c @@ -0,0 +1,5 @@ +// See LICENSE for license details. + +void __riscv_flush_icache(void) { + __asm__ volatile ("fence.i"); +} diff --git a/libraries/NEMU/resource/bbl/src/mcall.h b/libraries/NEMU/resource/bbl/src/mcall.h new file mode 100644 index 0000000..008179f --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/mcall.h @@ -0,0 +1,16 @@ +// See LICENSE for license details. + +#ifndef _RISCV_SBI_H +#define _RISCV_SBI_H + +#define SBI_SET_TIMER 0 +#define SBI_CONSOLE_PUTCHAR 1 +#define SBI_CONSOLE_GETCHAR 2 +#define SBI_CLEAR_IPI 3 +#define SBI_SEND_IPI 4 +#define SBI_REMOTE_FENCE_I 5 +#define SBI_REMOTE_SFENCE_VMA 6 +#define SBI_REMOTE_SFENCE_VMA_ASID 7 +#define SBI_SHUTDOWN 8 + +#endif diff --git a/libraries/NEMU/resource/bbl/src/mentry.S b/libraries/NEMU/resource/bbl/src/mentry.S new file mode 100644 index 0000000..5104c0e --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/mentry.S @@ -0,0 +1,292 @@ +// See LICENSE for license details. + +#include "mtrap.h" +#include "bits.h" +//#include "config.h" + + .data + .align 6 +trap_table: +#define BAD_TRAP_VECTOR 0 + .dc.a bad_trap + .dc.a pmp_trap + .dc.a illegal_insn_trap + .dc.a bad_trap + .dc.a misaligned_load_trap + .dc.a pmp_trap + .dc.a misaligned_store_trap + .dc.a pmp_trap + .dc.a bad_trap + .dc.a mcall_trap + .dc.a bad_trap +#ifdef BBL_BOOT_MACHINE + .dc.a mcall_trap +#else + .dc.a bad_trap +#endif /* BBL_BOOT_MACHINE */ + .dc.a bad_trap +#define TRAP_FROM_MACHINE_MODE_VECTOR 13 + .dc.a __trap_from_machine_mode + .dc.a bad_trap + .dc.a bad_trap + + .option norvc + .section .text.init,"ax",@progbits + .globl reset_vector +reset_vector: + li x1, 0 + li x2, 0 + li x3, 0 + li x4, 0 + li x5, 0 + li x6, 0 + li x7, 0 + li x8, 0 + li x9, 0 +// save a0 and a1; arguments from previous boot loader stage: +// li x10, 0 +// li x11, 0 + li x12, 0 + li x13, 0 + li x14, 0 + li x15, 0 + li x16, 0 + li x17, 0 + li x18, 0 + li x19, 0 + li x20, 0 + li x21, 0 + li x22, 0 + li x23, 0 + li x24, 0 + li x25, 0 + li x26, 0 + li x27, 0 + li x28, 0 + li x29, 0 + li x30, 0 + li x31, 0 + + la t0, stacks + RISCV_PGSIZE - MENTRY_FRAME_SIZE + csrw mscratch, t0 + + # write mtvec and make sure it sticks + la t0, trap_vector + csrw mtvec, t0 + csrr t1, mtvec +1:bne t0, t1, 1b + +here: + j here + +.LmultiHart: +#if MAX_HARTS > 1 + # wait for an IPI to signal that it's safe to boot + wfi + + # masked harts never start + la a4, disabled_hart_mask + LOAD a4, 0(a4) + srl a4, a4, a3 + andi a4, a4, 1 + bnez a4, .LmultiHart + + # only start if mip is set + csrr a2, mip + andi a2, a2, MIP_MSIP + beqz a2, .LmultiHart + + # make sure our hart id is within a valid range + fence + li a2, MAX_HARTS + bltu a3, a2, init_other_hart +#endif + wfi + j .LmultiHart + +trap_vector: + csrrw sp, mscratch, sp + beqz sp, .Ltrap_from_machine_mode + + STORE a0, 10*REGBYTES(sp) + STORE a1, 11*REGBYTES(sp) + + csrr a1, mcause + bgez a1, .Lhandle_trap_in_machine_mode + + # This is an interrupt. Discard the mcause MSB and decode the rest. + sll a1, a1, 1 + + # Is it a machine timer interrupt? + li a0, IRQ_M_TIMER * 2 + bne a0, a1, 1f + + # Yes. Simply clear MTIE and raise STIP. + li a0, MIP_MTIP + csrc mie, a0 + li a0, MIP_STIP + csrs mip, a0 + +.Lmret: + # Go back whence we came. + LOAD a0, 10*REGBYTES(sp) + LOAD a1, 11*REGBYTES(sp) + csrrw sp, mscratch, sp + mret + +1: + # Is it an IPI? + li a0, IRQ_M_SOFT * 2 + bne a0, a1, .Lbad_trap + + # Yes. First, clear the MIPI bit. + LOAD a0, MENTRY_IPI_OFFSET(sp) + sw x0, (a0) + fence + + # Now, decode the cause(s). +#ifdef __riscv_atomic + addi a0, sp, MENTRY_IPI_PENDING_OFFSET + amoswap.w a0, x0, (a0) +#else + lw a0, MENTRY_IPI_PENDING_OFFSET(sp) + sw x0, MENTRY_IPI_PENDING_OFFSET(sp) +#endif + and a1, a0, IPI_SOFT + beqz a1, 1f + csrs mip, MIP_SSIP +1: + andi a1, a0, IPI_FENCE_I + beqz a1, 1f + fence.i +1: + andi a1, a0, IPI_SFENCE_VMA + beqz a1, 1f + sfence.vma +1: + andi a1, a0, IPI_HALT + beqz a1, 1f + wfi + j 1b +1: + j .Lmret + +.Lhandle_trap_in_machine_mode: + # Preserve the registers. Compute the address of the trap handler. + STORE ra, 1*REGBYTES(sp) + STORE gp, 3*REGBYTES(sp) + STORE tp, 4*REGBYTES(sp) + STORE t0, 5*REGBYTES(sp) +1:auipc t0, %pcrel_hi(trap_table) # t0 <- %hi(trap_table) + STORE t1, 6*REGBYTES(sp) + sll t1, a1, LOG_REGBYTES # t1 <- mcause * ptr size + STORE t2, 7*REGBYTES(sp) + add t1, t0, t1 # t1 <- %hi(trap_table)[mcause] + STORE s0, 8*REGBYTES(sp) + LOAD t1, %pcrel_lo(1b)(t1) # t1 <- trap_table[mcause] + STORE s1, 9*REGBYTES(sp) + mv a0, sp # a0 <- regs + STORE a2,12*REGBYTES(sp) + csrr a2, mepc # a2 <- mepc + STORE a3,13*REGBYTES(sp) + csrrw t0, mscratch, x0 # t0 <- user sp + STORE a4,14*REGBYTES(sp) + STORE a5,15*REGBYTES(sp) + STORE a6,16*REGBYTES(sp) + STORE a7,17*REGBYTES(sp) + STORE s2,18*REGBYTES(sp) + STORE s3,19*REGBYTES(sp) + STORE s4,20*REGBYTES(sp) + STORE s5,21*REGBYTES(sp) + STORE s6,22*REGBYTES(sp) + STORE s7,23*REGBYTES(sp) + STORE s8,24*REGBYTES(sp) + STORE s9,25*REGBYTES(sp) + STORE s10,26*REGBYTES(sp) + STORE s11,27*REGBYTES(sp) + STORE t3,28*REGBYTES(sp) + STORE t4,29*REGBYTES(sp) + STORE t5,30*REGBYTES(sp) + STORE t6,31*REGBYTES(sp) + STORE t0, 2*REGBYTES(sp) # sp + +#ifndef __riscv_flen + lw tp, (sp) # Move the emulated FCSR from x0's save slot into tp. +#endif + STORE x0, (sp) # Zero x0's save slot. + + # Invoke the handler. + jalr t1 + +#ifndef __riscv_flen + sw tp, (sp) # Move the emulated FCSR from tp into x0's save slot. +#endif + +restore_mscratch: + # Restore mscratch, so future traps will know they didn't come from M-mode. + csrw mscratch, sp + +restore_regs: + # Restore all of the registers. + LOAD ra, 1*REGBYTES(sp) + LOAD gp, 3*REGBYTES(sp) + LOAD tp, 4*REGBYTES(sp) + LOAD t0, 5*REGBYTES(sp) + LOAD t1, 6*REGBYTES(sp) + LOAD t2, 7*REGBYTES(sp) + LOAD s0, 8*REGBYTES(sp) + LOAD s1, 9*REGBYTES(sp) + LOAD a0,10*REGBYTES(sp) + LOAD a1,11*REGBYTES(sp) + LOAD a2,12*REGBYTES(sp) + LOAD a3,13*REGBYTES(sp) + LOAD a4,14*REGBYTES(sp) + LOAD a5,15*REGBYTES(sp) + LOAD a6,16*REGBYTES(sp) + LOAD a7,17*REGBYTES(sp) + LOAD s2,18*REGBYTES(sp) + LOAD s3,19*REGBYTES(sp) + LOAD s4,20*REGBYTES(sp) + LOAD s5,21*REGBYTES(sp) + LOAD s6,22*REGBYTES(sp) + LOAD s7,23*REGBYTES(sp) + LOAD s8,24*REGBYTES(sp) + LOAD s9,25*REGBYTES(sp) + LOAD s10,26*REGBYTES(sp) + LOAD s11,27*REGBYTES(sp) + LOAD t3,28*REGBYTES(sp) + LOAD t4,29*REGBYTES(sp) + LOAD t5,30*REGBYTES(sp) + LOAD t6,31*REGBYTES(sp) + LOAD sp, 2*REGBYTES(sp) + mret + +.Ltrap_from_machine_mode: + csrr sp, mscratch + addi sp, sp, -INTEGER_CONTEXT_SIZE + STORE a0,10*REGBYTES(sp) + STORE a1,11*REGBYTES(sp) + li a1, TRAP_FROM_MACHINE_MODE_VECTOR + j .Lhandle_trap_in_machine_mode + +.Lbad_trap: + li a1, BAD_TRAP_VECTOR + j .Lhandle_trap_in_machine_mode + + .globl __redirect_trap +__redirect_trap: + # reset sp to top of M-mode stack + li t0, MACHINE_STACK_SIZE + add sp, sp, t0 + neg t0, t0 + and sp, sp, t0 + addi sp, sp, -MENTRY_FRAME_SIZE + j restore_mscratch + +__trap_from_machine_mode: + jal trap_from_machine_mode + j restore_regs + + .bss +stacks: + .skip RISCV_PGSIZE * MAX_HARTS diff --git a/libraries/NEMU/resource/bbl/src/misaligned_ldst.c b/libraries/NEMU/resource/bbl/src/misaligned_ldst.c new file mode 100644 index 0000000..3b0a59e --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/misaligned_ldst.c @@ -0,0 +1,141 @@ +// See LICENSE for license details. + +#include "emulation.h" +//#include "fp_emulation.h" +#include "unprivileged_memory.h" +#include "mtrap.h" +//#include "config.h" +#include "pk.h" + +union byte_array { + uint8_t bytes[8]; + uintptr_t intx; + uint64_t int64; +}; + +void misaligned_load_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc) +{ + union byte_array val; + uintptr_t mstatus; + insn_t insn = get_insn(mepc, &mstatus); + uintptr_t npc = mepc + insn_len(insn); + uintptr_t addr = read_csr(mbadaddr); + + int shift = 0, fp = 0, len; + if ((insn & MASK_LW) == MATCH_LW) + len = 4, shift = 8*(sizeof(uintptr_t) - len); +#if __riscv_xlen == 64 + else if ((insn & MASK_LD) == MATCH_LD) + len = 8, shift = 8*(sizeof(uintptr_t) - len); + else if ((insn & MASK_LWU) == MATCH_LWU) + len = 4; +#endif +#ifdef PK_ENABLE_FP_EMULATION + else if ((insn & MASK_FLD) == MATCH_FLD) + fp = 1, len = 8; + else if ((insn & MASK_FLW) == MATCH_FLW) + fp = 1, len = 4; +#endif + else if ((insn & MASK_LH) == MATCH_LH) + len = 2, shift = 8*(sizeof(uintptr_t) - len); + else if ((insn & MASK_LHU) == MATCH_LHU) + len = 2; +#ifdef __riscv_compressed +# if __riscv_xlen >= 64 + else if ((insn & MASK_C_LD) == MATCH_C_LD) + len = 8, shift = 8*(sizeof(uintptr_t) - len), insn = RVC_RS2S(insn) << SH_RD; + else if ((insn & MASK_C_LDSP) == MATCH_C_LDSP && ((insn >> SH_RD) & 0x1f)) + len = 8, shift = 8*(sizeof(uintptr_t) - len); +# endif + else if ((insn & MASK_C_LW) == MATCH_C_LW) + len = 4, shift = 8*(sizeof(uintptr_t) - len), insn = RVC_RS2S(insn) << SH_RD; + else if ((insn & MASK_C_LWSP) == MATCH_C_LWSP && ((insn >> SH_RD) & 0x1f)) + len = 4, shift = 8*(sizeof(uintptr_t) - len); +# ifdef PK_ENABLE_FP_EMULATION + else if ((insn & MASK_C_FLD) == MATCH_C_FLD) + fp = 1, len = 8, insn = RVC_RS2S(insn) << SH_RD; + else if ((insn & MASK_C_FLDSP) == MATCH_C_FLDSP) + fp = 1, len = 8; +# if __riscv_xlen == 32 + else if ((insn & MASK_C_FLW) == MATCH_C_FLW) + fp = 1, len = 4, insn = RVC_RS2S(insn) << SH_RD; + else if ((insn & MASK_C_FLWSP) == MATCH_C_FLWSP) + fp = 1, len = 4; +# endif +# endif +#endif + else { + mcause = CAUSE_LOAD_ACCESS; + write_csr(mcause, mcause); + return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); + } + + val.int64 = 0; + for (intptr_t i = 0; i < len; i++) + val.bytes[i] = load_uint8_t((void *)(addr + i), mepc); + + if (!fp) + SET_RD(insn, regs, (intptr_t)val.intx << shift >> shift); + + write_csr(mepc, npc); +} + +void misaligned_store_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc) +{ + union byte_array val; + uintptr_t mstatus; + insn_t insn = get_insn(mepc, &mstatus); + uintptr_t npc = mepc + insn_len(insn); + int len; + + val.intx = GET_RS2(insn, regs); + if ((insn & MASK_SW) == MATCH_SW) + len = 4; +#if __riscv_xlen == 64 + else if ((insn & MASK_SD) == MATCH_SD) + len = 8; +#endif +#ifdef PK_ENABLE_FP_EMULATION + else if ((insn & MASK_FSD) == MATCH_FSD) + len = 8, val.int64 = GET_F64_RS2(insn, regs); + else if ((insn & MASK_FSW) == MATCH_FSW) + len = 4, val.intx = GET_F32_RS2(insn, regs); +#endif + else if ((insn & MASK_SH) == MATCH_SH) + len = 2; +#ifdef __riscv_compressed +# if __riscv_xlen >= 64 + else if ((insn & MASK_C_SD) == MATCH_C_SD) + len = 8, val.intx = GET_RS2S(insn, regs); + else if ((insn & MASK_C_SDSP) == MATCH_C_SDSP && ((insn >> SH_RD) & 0x1f)) + len = 8, val.intx = GET_RS2C(insn, regs); +# endif + else if ((insn & MASK_C_SW) == MATCH_C_SW) + len = 4, val.intx = GET_RS2S(insn, regs); + else if ((insn & MASK_C_SWSP) == MATCH_C_SWSP && ((insn >> SH_RD) & 0x1f)) + len = 4, val.intx = GET_RS2C(insn, regs); +# ifdef PK_ENABLE_FP_EMULATION + else if ((insn & MASK_C_FSD) == MATCH_C_FSD) + len = 8, val.int64 = GET_F64_RS2S(insn, regs); + else if ((insn & MASK_C_FSDSP) == MATCH_C_FSDSP) + len = 8, val.int64 = GET_F64_RS2C(insn, regs); +# if __riscv_xlen == 32 + else if ((insn & MASK_C_FSW) == MATCH_C_FSW) + len = 4, val.intx = GET_F32_RS2S(insn, regs); + else if ((insn & MASK_C_FSWSP) == MATCH_C_FSWSP) + len = 4, val.intx = GET_F32_RS2C(insn, regs); +# endif +# endif +#endif + else { + mcause = CAUSE_STORE_ACCESS; + write_csr(mcause, mcause); + return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); + } + + uintptr_t addr = read_csr(mbadaddr); + for (int i = 0; i < len; i++) + store_uint8_t((void *)(addr + i), val.bytes[i], mepc); + + write_csr(mepc, npc); +} diff --git a/libraries/NEMU/resource/bbl/src/mtrap.c b/libraries/NEMU/resource/bbl/src/mtrap.c new file mode 100644 index 0000000..7260574 --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/mtrap.c @@ -0,0 +1,197 @@ +// See LICENSE for license details. + +#include "mtrap.h" +#include "mcall.h" +#include "atomic.h" +#include "bits.h" +#include "vm.h" +#include "unprivileged_memory.h" +#include "disabled_hart_mask.h" +#include +#include +#include + +void __attribute__((noreturn)) bad_trap(uintptr_t* regs, uintptr_t dummy, uintptr_t mepc) +{ + die("machine mode: unhandlable trap %d @ %p", read_csr(mcause), mepc); +} + +static uintptr_t mcall_console_putchar(uint8_t ch) +{ + // only for NEMU + volatile uint8_t *p = (void *)(uintptr_t)0xa10003f8; + *p = ch; + return 0; +} + +void putstring(const char* s) +{ + while (*s) + mcall_console_putchar(*s++); +} + +void vprintm(const char* s, va_list vl) +{ + char buf[256]; + vsnprintf(buf, sizeof buf, s, vl); + putstring(buf); +} + +void printm(const char* s, ...) +{ + va_list vl; + + va_start(vl, s); + vprintm(s, vl); + va_end(vl); +} + +static uintptr_t mcall_console_getchar() +{ + return 0; +} + +static uintptr_t mcall_clear_ipi() +{ + return clear_csr(mip, MIP_SSIP) & MIP_SSIP; +} + +static uintptr_t mcall_shutdown() +{ + poweroff(0); +} + +static uintptr_t mcall_set_timer(uint64_t when) +{ + *HLS()->timecmp = when; + clear_csr(mip, MIP_STIP); + set_csr(mie, MIP_MTIP); + return 0; +} + +static void send_ipi_many(uintptr_t* pmask, int event) +{ + _Static_assert(MAX_HARTS <= 8 * sizeof(*pmask), "# harts > uintptr_t bits"); +} + +void mcall_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc) +{ + write_csr(mepc, mepc + 4); + + uintptr_t n = regs[17], arg0 = regs[10], retval, ipi_type; +#if __riscv_xlen == 32 + uintptr_t arg1 = regs[11]; +#endif + + switch (n) + { + case SBI_CONSOLE_PUTCHAR: + retval = mcall_console_putchar(arg0); + break; + case SBI_CONSOLE_GETCHAR: + retval = mcall_console_getchar(); + break; + case SBI_SEND_IPI: + ipi_type = IPI_SOFT; + goto send_ipi; + case SBI_REMOTE_SFENCE_VMA: + case SBI_REMOTE_SFENCE_VMA_ASID: + ipi_type = IPI_SFENCE_VMA; + goto send_ipi; + case SBI_REMOTE_FENCE_I: + ipi_type = IPI_FENCE_I; +send_ipi: + send_ipi_many((uintptr_t*)arg0, ipi_type); + retval = 0; + break; + case SBI_CLEAR_IPI: + retval = mcall_clear_ipi(); + break; + case SBI_SHUTDOWN: + retval = mcall_shutdown(); + break; + case SBI_SET_TIMER: +#if __riscv_xlen == 32 + retval = mcall_set_timer(arg0 + ((uint64_t)arg1 << 32)); +#else + retval = mcall_set_timer(arg0); +#endif + break; + default: + retval = -ENOSYS; + break; + } + regs[10] = retval; +} + +void redirect_trap(uintptr_t epc, uintptr_t mstatus, uintptr_t badaddr) +{ + write_csr(sbadaddr, badaddr); + write_csr(sepc, epc); + write_csr(scause, read_csr(mcause)); + write_csr(mepc, read_csr(stvec)); + + uintptr_t new_mstatus = mstatus & ~(MSTATUS_SPP | MSTATUS_SPIE | MSTATUS_SIE); + uintptr_t mpp_s = MSTATUS_MPP & (MSTATUS_MPP >> 1); + new_mstatus |= (mstatus * (MSTATUS_SPIE / MSTATUS_SIE)) & MSTATUS_SPIE; + new_mstatus |= (mstatus / (mpp_s / MSTATUS_SPP)) & MSTATUS_SPP; + new_mstatus |= mpp_s; + write_csr(mstatus, new_mstatus); + + extern void __redirect_trap(); + return __redirect_trap(); +} + +void pmp_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc) +{ + redirect_trap(mepc, read_csr(mstatus), read_csr(mbadaddr)); +} + +static void machine_page_fault(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc) +{ + // MPRV=1 iff this trap occurred while emulating an instruction on behalf + // of a lower privilege level. In that case, a2=epc and a3=mstatus. + // a1 holds MPRV if emulating a load or store, or MPRV | MXR if loading + // an instruction from memory. In the latter case, we should report an + // instruction fault instead of a load fault. + if (read_csr(mstatus) & MSTATUS_MPRV) { + if (regs[11] == (MSTATUS_MPRV | MSTATUS_MXR)) { + if (mcause == CAUSE_LOAD_PAGE_FAULT) + write_csr(mcause, CAUSE_FETCH_PAGE_FAULT); + else if (mcause == CAUSE_LOAD_ACCESS) + write_csr(mcause, CAUSE_FETCH_ACCESS); + else + goto fail; + } else if (regs[11] != MSTATUS_MPRV) { + goto fail; + } + + return redirect_trap(regs[12], regs[13], read_csr(mbadaddr)); + } + +fail: + bad_trap(regs, mcause, mepc); +} + +void trap_from_machine_mode(uintptr_t* regs, uintptr_t dummy, uintptr_t mepc) +{ + uintptr_t mcause = read_csr(mcause); + + switch (mcause) + { + case CAUSE_LOAD_PAGE_FAULT: + case CAUSE_STORE_PAGE_FAULT: + case CAUSE_FETCH_ACCESS: + case CAUSE_LOAD_ACCESS: + case CAUSE_STORE_ACCESS: + return machine_page_fault(regs, mcause, mepc); + default: + bad_trap(regs, dummy, mepc); + } +} + +void poweroff(uint16_t code) +{ + send_ipi_many(0, IPI_HALT); + while (1) { asm volatile ("wfi\n"); } +} diff --git a/libraries/NEMU/resource/bbl/src/mtrap.h b/libraries/NEMU/resource/bbl/src/mtrap.h new file mode 100644 index 0000000..e1d6b9c --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/mtrap.h @@ -0,0 +1,102 @@ +// See LICENSE for license details. + +#ifndef _RISCV_MTRAP_H +#define _RISCV_MTRAP_H + +#include "encoding.h" + +#ifdef __riscv_atomic +# define MAX_HARTS 1 // arbitrary +#else +# define MAX_HARTS 1 +#endif + +#ifndef __ASSEMBLER__ + +#include +#include +#include + +#define read_const_csr(reg) ({ unsigned long __tmp; \ + asm ("csrr %0, " #reg : "=r"(__tmp)); \ + __tmp; }) + +static inline int supports_extension(char ext) +{ + return read_const_csr(misa) & (1 << (ext - 'A')); +} + +static inline int xlen() +{ + return read_const_csr(misa) < 0 ? 64 : 32; +} + +extern uintptr_t mem_size; +extern volatile uint64_t* mtime; +extern volatile uint32_t* plic_priorities; +extern size_t plic_ndevs; + +typedef struct { + volatile uint32_t* ipi; + volatile int mipi_pending; + + volatile uint64_t* timecmp; + + volatile uint32_t* plic_m_thresh; + volatile uintptr_t* plic_m_ie; + volatile uint32_t* plic_s_thresh; + volatile uintptr_t* plic_s_ie; +} hls_t; + +#define MACHINE_STACK_TOP() ({ \ + register uintptr_t sp asm ("sp"); \ + (void*)((sp + RISCV_PGSIZE) & -RISCV_PGSIZE); }) + +// hart-local storage, at top of stack +#define HLS() ((hls_t*)(MACHINE_STACK_TOP() - HLS_SIZE)) +#define OTHER_HLS(id) ((hls_t*)((void*)HLS() + RISCV_PGSIZE * ((id) - read_const_csr(mhartid)))) + +hls_t* hls_init(uintptr_t hart_id); +void parse_config_string(); +void poweroff(uint16_t code) __attribute((noreturn)); +void printm(const char* s, ...); +void vprintm(const char *s, va_list args); +void putstring(const char* s); +#define assert(x) ({ if (!(x)) die("assertion failed: %s", #x); }) +#define die(str, ...) ({ printm("%s:%d: " str "\n", __FILE__, __LINE__, ##__VA_ARGS__); poweroff(-1); }) + +void setup_pmp(); +void enter_supervisor_mode(void (*fn)(uintptr_t), uintptr_t arg0, uintptr_t arg1) + __attribute__((noreturn)); +void enter_machine_mode(void (*fn)(uintptr_t, uintptr_t), uintptr_t arg0, uintptr_t arg1) + __attribute__((noreturn)); +void boot_loader(uintptr_t dtb); +void boot_other_hart(uintptr_t dtb); + +static inline void wfi() +{ + asm volatile ("wfi" ::: "memory"); +} + +#endif // !__ASSEMBLER__ + +#define IPI_SOFT 0x1 +#define IPI_FENCE_I 0x2 +#define IPI_SFENCE_VMA 0x4 +#define IPI_HALT 0x8 + +#define MACHINE_STACK_SIZE RISCV_PGSIZE +#define MENTRY_HLS_OFFSET (INTEGER_CONTEXT_SIZE + SOFT_FLOAT_CONTEXT_SIZE) +#define MENTRY_FRAME_SIZE (MENTRY_HLS_OFFSET + HLS_SIZE) +#define MENTRY_IPI_OFFSET (MENTRY_HLS_OFFSET) +#define MENTRY_IPI_PENDING_OFFSET (MENTRY_HLS_OFFSET + REGBYTES) + +#ifdef __riscv_flen +# define SOFT_FLOAT_CONTEXT_SIZE 0 +#else +# define SOFT_FLOAT_CONTEXT_SIZE (8 * 32) +#endif +#define HLS_SIZE 64 +#define INTEGER_CONTEXT_SIZE (32 * REGBYTES) + +#endif diff --git a/libraries/NEMU/resource/bbl/src/muldiv_emulation.c b/libraries/NEMU/resource/bbl/src/muldiv_emulation.c new file mode 100644 index 0000000..dba5c03 --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/muldiv_emulation.c @@ -0,0 +1,66 @@ +// See LICENSE for license details. + +#include "emulation.h" + +#ifndef __riscv_muldiv + +#if __riscv_xlen == 64 +typedef __int128 double_int; +#else +typedef int64_t double_int; +#endif + +// These routines rely on the compiler to turn these operations into libcalls +// when not natively supported. So work on making those go fast. + +DECLARE_EMULATION_FUNC(emulate_mul_div) +{ + uintptr_t rs1 = GET_RS1(insn, regs), rs2 = GET_RS2(insn, regs), val; + + if ((insn & MASK_MUL) == MATCH_MUL) + val = rs1 * rs2; + else if ((insn & MASK_DIV) == MATCH_DIV) + val = (intptr_t)rs1 / (intptr_t)rs2; + else if ((insn & MASK_DIVU) == MATCH_DIVU) + val = rs1 / rs2; + else if ((insn & MASK_REM) == MATCH_REM) + val = (intptr_t)rs1 % (intptr_t)rs2; + else if ((insn & MASK_REMU) == MATCH_REMU) + val = rs1 % rs2; + else if ((insn & MASK_MULH) == MATCH_MULH) + val = ((double_int)(intptr_t)rs1 * (double_int)(intptr_t)rs2) >> (8 * sizeof(rs1)); + else if ((insn & MASK_MULHU) == MATCH_MULHU) + val = ((double_int)rs1 * (double_int)rs2) >> (8 * sizeof(rs1)); + else if ((insn & MASK_MULHSU) == MATCH_MULHSU) + val = ((double_int)(intptr_t)rs1 * (double_int)rs2) >> (8 * sizeof(rs1)); + else + return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); + + SET_RD(insn, regs, val); +} + +#if __riscv_xlen == 64 + +DECLARE_EMULATION_FUNC(emulate_mul_div32) +{ + uint32_t rs1 = GET_RS1(insn, regs), rs2 = GET_RS2(insn, regs); + int32_t val; + + if ((insn & MASK_MULW) == MATCH_MULW) + val = rs1 * rs2; + else if ((insn & MASK_DIVW) == MATCH_DIVW) + val = (int32_t)rs1 / (int32_t)rs2; + else if ((insn & MASK_DIVUW) == MATCH_DIVUW) + val = rs1 / rs2; + else if ((insn & MASK_REMW) == MATCH_REMW) + val = (int32_t)rs1 % (int32_t)rs2; + else if ((insn & MASK_REMUW) == MATCH_REMUW) + val = rs1 % rs2; + else + return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); + + SET_RD(insn, regs, val); +} + +#endif +#endif diff --git a/libraries/NEMU/resource/bbl/src/pk.h b/libraries/NEMU/resource/bbl/src/pk.h new file mode 100644 index 0000000..a55ab6c --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/pk.h @@ -0,0 +1,110 @@ +// See LICENSE for license details. + +#ifndef _PK_H +#define _PK_H + +#ifndef __ASSEMBLER__ + +#include "encoding.h" +#include +#include +#include + +typedef struct +{ + long gpr[32]; + long status; + long epc; + long badvaddr; + long cause; + long insn; +} trapframe_t; + +#define panic(s,...) do { do_panic(s"\n", ##__VA_ARGS__); } while(0) +#define kassert(cond) do { if(!(cond)) kassert_fail(""#cond); } while(0) +void do_panic(const char* s, ...) __attribute__((noreturn)); +void kassert_fail(const char* s) __attribute__((noreturn)); + +#ifdef __cplusplus +extern "C" { +#endif + +void printk(const char* s, ...); +void printm(const char* s, ...); +int vsnprintf(char* out, size_t n, const char* s, va_list vl); +int snprintf(char* out, size_t n, const char* s, ...); +void start_user(trapframe_t* tf) __attribute__((noreturn)); +void dump_tf(trapframe_t*); + +static inline int insn_len(long insn) +{ + return (insn & 0x3) < 0x3 ? 2 : 4; +} + +#if __riscv_xlen == 32 + +static inline uint64_t rdtime64() +{ + uint32_t time; + uint32_t timeh1; + uint32_t timeh2; + + do + { + timeh1 = read_csr(timeh); + time = read_csr(time); + timeh2 = read_csr(timeh); + } while(timeh1 != timeh2); + + return (((uint64_t) timeh1) << 32) | time; +} + +static inline uint64_t rdcycle64() +{ + uint32_t cycle; + uint32_t cycleh1; + uint32_t cycleh2; + + do + { + cycleh1 = read_csr(cycleh); + cycle = read_csr(cycle); + cycleh2 = read_csr(cycleh); + } while(cycleh1 != cycleh2); + + return (((uint64_t) cycleh1) << 32) | cycle; +} + +static inline uint64_t rdinstret64() +{ + uint32_t instret; + uint32_t instreth1; + uint32_t instreth2; + + do + { + instreth1 = read_csr(instreth); + instret = read_csr(instret); + instreth2 = read_csr(instreth); + } while(instreth1 != instreth2); + + return (((uint64_t) instreth1) << 32) | instret; +} + +#else + +#define rdtime64 rdtime +#define rdcycle64 rdcycle +#define rdinstret64 rdinstret + +#endif + +#define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0])) + +#ifdef __cplusplus +} +#endif + +#endif // !__ASSEMBLER__ + +#endif diff --git a/libraries/NEMU/resource/bbl/src/snprintf.c b/libraries/NEMU/resource/bbl/src/snprintf.c new file mode 100644 index 0000000..a11a4f7 --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/snprintf.c @@ -0,0 +1,111 @@ +// See LICENSE for license details. + +#include +#include +#include +#include + +int vsnprintf(char* out, size_t n, const char* s, va_list vl) +{ + bool format = false; + bool longarg = false; + bool longlongarg = false; + size_t pos = 0; + for( ; *s; s++) + { + if(format) + { + switch(*s) + { + case 'l': + if (s[1] == 'l') { + longlongarg = true; + s++; + } + else + longarg = true; + break; + case 'p': + longarg = true; + if (++pos < n) out[pos-1] = '0'; + if (++pos < n) out[pos-1] = 'x'; + case 'x': + { + long num = longarg ? va_arg(vl, long) : va_arg(vl, int); + for(int i = 2*(longarg ? sizeof(long) : sizeof(int))-1; i >= 0; i--) { + int d = (num >> (4*i)) & 0xF; + if (++pos < n) out[pos-1] = (d < 10 ? '0'+d : 'a'+d-10); + } + longarg = false; + format = false; + break; + } + case 'd': + { + long long num; + if (longarg) + num = va_arg(vl, long); + else if (longlongarg) + num = va_arg(vl, long long); + else + num = va_arg(vl, int); + if (num < 0) { + num = -num; + if (++pos < n) out[pos-1] = '-'; + } + long digits = 1; + for (long long nn = num; nn /= 10; digits++) + ; + for (int i = digits-1; i >= 0; i--) { + if (pos + i + 1 < n) out[pos + i] = '0' + (num % 10); + num /= 10; + } + pos += digits; + longarg = false; + longlongarg = false; + format = false; + break; + } + case 's': + { + const char* s2 = va_arg(vl, const char*); + while (*s2) { + if (++pos < n) + out[pos-1] = *s2; + s2++; + } + longarg = false; + format = false; + break; + } + case 'c': + { + if (++pos < n) out[pos-1] = (char)va_arg(vl,int); + longarg = false; + format = false; + break; + } + default: + break; + } + } + else if(*s == '%') + format = true; + else + if (++pos < n) out[pos-1] = *s; + } + if (pos < n) + out[pos] = 0; + else if (n) + out[n-1] = 0; + return pos; +} + +int snprintf(char* out, size_t n, const char* s, ...) +{ + va_list vl; + va_start(vl, s); + int res = vsnprintf(out, n, s, vl); + va_end(vl); + return res; +} diff --git a/libraries/NEMU/resource/bbl/src/unprivileged_memory.h b/libraries/NEMU/resource/bbl/src/unprivileged_memory.h new file mode 100644 index 0000000..a0ab37e --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/unprivileged_memory.h @@ -0,0 +1,108 @@ +// See LICENSE for license details. + +#ifndef _RISCV_MISALIGNED_H +#define _RISCV_MISALIGNED_H + +#include "encoding.h" +#include "bits.h" +#include + +#define DECLARE_UNPRIVILEGED_LOAD_FUNCTION(type, insn) \ + static inline type load_##type(const type* addr, uintptr_t mepc) \ + { \ + register uintptr_t __mstatus_adjust asm ("a1") = MSTATUS_MPRV; \ + register uintptr_t __mepc asm ("a2") = mepc; \ + register uintptr_t __mstatus asm ("a3"); \ + type val; \ + asm ("csrrs %0, mstatus, %3\n" \ + #insn " %1, %2\n" \ + "csrw mstatus, %0" \ + : "+&r" (__mstatus), "=&r" (val) \ + : "m" (*addr), "r" (__mstatus_adjust), "r" (__mepc)); \ + return val; \ + } + +#define DECLARE_UNPRIVILEGED_STORE_FUNCTION(type, insn) \ + static inline void store_##type(type* addr, type val, uintptr_t mepc) \ + { \ + register uintptr_t __mstatus_adjust asm ("a1") = MSTATUS_MPRV; \ + register uintptr_t __mepc asm ("a2") = mepc; \ + register uintptr_t __mstatus asm ("a3"); \ + asm volatile ("csrrs %0, mstatus, %3\n" \ + #insn " %1, %2\n" \ + "csrw mstatus, %0" \ + : "+&r" (__mstatus) \ + : "r" (val), "m" (*addr), "r" (__mstatus_adjust), \ + "r" (__mepc)); \ + } + +DECLARE_UNPRIVILEGED_LOAD_FUNCTION(uint8_t, lbu) +DECLARE_UNPRIVILEGED_LOAD_FUNCTION(uint16_t, lhu) +DECLARE_UNPRIVILEGED_LOAD_FUNCTION(int8_t, lb) +DECLARE_UNPRIVILEGED_LOAD_FUNCTION(int16_t, lh) +DECLARE_UNPRIVILEGED_LOAD_FUNCTION(int32_t, lw) +DECLARE_UNPRIVILEGED_STORE_FUNCTION(uint8_t, sb) +DECLARE_UNPRIVILEGED_STORE_FUNCTION(uint16_t, sh) +DECLARE_UNPRIVILEGED_STORE_FUNCTION(uint32_t, sw) +#if __riscv_xlen == 64 +DECLARE_UNPRIVILEGED_LOAD_FUNCTION(uint32_t, lwu) +DECLARE_UNPRIVILEGED_LOAD_FUNCTION(uint64_t, ld) +DECLARE_UNPRIVILEGED_STORE_FUNCTION(uint64_t, sd) +DECLARE_UNPRIVILEGED_LOAD_FUNCTION(uintptr_t, ld) +#else +DECLARE_UNPRIVILEGED_LOAD_FUNCTION(uint32_t, lw) +DECLARE_UNPRIVILEGED_LOAD_FUNCTION(uintptr_t, lw) + +static inline uint64_t load_uint64_t(const uint64_t* addr, uintptr_t mepc) +{ + return load_uint32_t((uint32_t*)addr, mepc) + + ((uint64_t)load_uint32_t((uint32_t*)addr + 1, mepc) << 32); +} + +static inline void store_uint64_t(uint64_t* addr, uint64_t val, uintptr_t mepc) +{ + store_uint32_t((uint32_t*)addr, val, mepc); + store_uint32_t((uint32_t*)addr + 1, val >> 32, mepc); +} +#endif + +static inline uintptr_t get_insn(uintptr_t mepc, uintptr_t* mstatus) +{ + register uintptr_t __mstatus_adjust asm ("a1") = MSTATUS_MPRV | MSTATUS_MXR; + register uintptr_t __mepc asm ("a2") = mepc; + register uintptr_t __mstatus asm ("a3"); + uintptr_t val; +#ifndef __riscv_compressed + asm ("csrrs %[mstatus], mstatus, %[mprv]\n" + STR(LWU) " %[insn], (%[addr])\n" + "csrw mstatus, %[mstatus]" + : [mstatus] "+&r" (__mstatus), [insn] "=&r" (val) + : [mprv] "r" (__mstatus_adjust), [addr] "r" (__mepc)); +#else + uintptr_t rvc_mask = 3, tmp; + asm ("csrrs %[mstatus], mstatus, %[mprv]\n" + "and %[tmp], %[addr], 2\n" + "bnez %[tmp], 1f\n" + STR(LWU) " %[insn], (%[addr])\n" + "and %[tmp], %[insn], %[rvc_mask]\n" + "beq %[tmp], %[rvc_mask], 2f\n" + "sll %[insn], %[insn], %[xlen_minus_16]\n" + "srl %[insn], %[insn], %[xlen_minus_16]\n" + "j 2f\n" + "1:\n" + "lhu %[insn], (%[addr])\n" + "and %[tmp], %[insn], %[rvc_mask]\n" + "bne %[tmp], %[rvc_mask], 2f\n" + "lhu %[tmp], 2(%[addr])\n" + "sll %[tmp], %[tmp], 16\n" + "add %[insn], %[insn], %[tmp]\n" + "2: csrw mstatus, %[mstatus]" + : [mstatus] "+&r" (__mstatus), [insn] "=&r" (val), [tmp] "=&r" (tmp) + : [mprv] "r" (__mstatus_adjust), [addr] "r" (__mepc), + [rvc_mask] "r" (rvc_mask), [xlen_minus_16] "i" (__riscv_xlen - 16)); +#endif + *mstatus = __mstatus; + return val; +} + +#endif diff --git a/libraries/NEMU/resource/bbl/src/vm.h b/libraries/NEMU/resource/bbl/src/vm.h new file mode 100644 index 0000000..9436ffb --- /dev/null +++ b/libraries/NEMU/resource/bbl/src/vm.h @@ -0,0 +1,37 @@ +// See LICENSE for license details. + +#ifndef _VM_H +#define _VM_H + +#include "encoding.h" +#include + +#define MEGAPAGE_SIZE ((uintptr_t)(RISCV_PGSIZE << RISCV_PGLEVEL_BITS)) +#if __riscv_xlen == 64 +# define SATP_MODE_CHOICE INSERT_FIELD(0, SATP64_MODE, SATP_MODE_SV39) +# define VA_BITS 39 +# define GIGAPAGE_SIZE (MEGAPAGE_SIZE << RISCV_PGLEVEL_BITS) +#else +# define SATP_MODE_CHOICE INSERT_FIELD(0, SATP32_MODE, SATP_MODE_SV32) +# define VA_BITS 32 +#endif + +typedef uintptr_t pte_t; +extern pte_t* root_page_table; + +static inline void flush_tlb() +{ + asm volatile ("sfence.vma"); +} + +static inline pte_t pte_create(uintptr_t ppn, int type) +{ + return (ppn << PTE_PPN_SHIFT) | PTE_V | type; +} + +static inline pte_t ptd_create(uintptr_t ppn) +{ + return pte_create(ppn, PTE_V); +} + +#endif diff --git a/libraries/NEMU/resource/debian/README.md b/libraries/NEMU/resource/debian/README.md new file mode 100644 index 0000000..41cc384 --- /dev/null +++ b/libraries/NEMU/resource/debian/README.md @@ -0,0 +1,158 @@ + +# riscv64 debian镜像制作 + +制作需要`qemu-riscv64-static`, 建议在debian 10或ubuntu 19.04的系统(可尝试使用docker)中进行操作. + +* 创建空镜像和分区 +``` +dd if=/dev/zero of=debian.img bs=1G count=16 # 此处镜像大小为16GB +sudo cfdisk debian.img # 可创建两个分区, 第一个分区12GB作为rootfs, 第二个分区4GB作为swap +sudo losetup --partscan --show --find debian.img # 将debian.img作为loop设备 +ls /dev/loop0* # 此时应该能看到/dev/loop0p1和/dev/loop0p2两个分区 +``` + +* 创建ext4和swap文件系统 +``` +sudo mkfs.ext4 /dev/loop0p1 +sudo mkswap /dev/loop0p2 +``` + +* 挂载ext4分区 +``` +sudo mount /dev/loop0p1 /mnt +``` + +* 安装debian base system. +下面两条命令的操作来自[debian社区的安装指南](https://wiki.debian.org/RISC-V#debootstrap). +``` +sudo apt-get install debootstrap qemu-user-static binfmt-support debian-ports-archive-keyring +sudo debootstrap --arch=riscv64 --keyring /usr/share/keyrings/debian-ports-archive-keyring.gpg --include=debian-ports-archive-keyring unstable /mnt http://deb.debian.org/debian-ports +``` +若要安装x86系统, 则输入 +``` +sudo debootstrap --arch=i386 --keyring /usr/share/keyrings/debian-archive-keyring.gpg --include=debian-archive-keyring stable /mnt http://deb.debian.org/debian +``` + +* 进入镜像 +``` +sudo chroot /mnt /bin/bash +``` +此时实际上是通过`qemu-riscv64-static`来执行镜像中的riscv64可执行文件. + +* 安装所需工具(根据实际情况选择) +``` +apt-get update +apt-get install gcc build-essential +apt-get install tmux libreadline-dev +apt-get install net-tools openssh-server +# fix long delay of openssh server +apt-get install haveged +agt-get install sbt +``` + +* 在`/etc/fstab`中添加swap分区 +``` +/dev/mmcblk0p2 none swap sw 0 0 +``` + +* 添加/root/目录的写和执行权限, 使得host上的普通用户可以访问 +``` +chmod +w,+x /root +``` + +* 在/root/目录下提前写入所需的测试文件, 如hello.c等. + +* 在/root/.bashrc中添加如下内容, 可以实现登录后自动运行命令(根据实际情况修改测试的命令): +``` +TMP_DIR=/run/mytest + +cmd=( +# enbale swap + "swapon -a" + +# show system information + "uname -a" + "cat /etc/issue" + "cat /proc/cpuinfo" + "df -ah" + "free -h" + +# show time + "date" + "uptime" + +# create and switch to tmp directory + "mkdir $TMP_DIR" + "cd $TMP_DIR" + +# compile and run hello + "ls /root" + "ls /root/hello" + "cat /root/hello/hello.c" + "gcc -time /root/hello/hello.c -o $TMP_DIR/hello" + "ls -lh $TMP_DIR" + "$TMP_DIR/hello" + +# compile and run x86-nemu + "ls /root/nemu" + "cp -r /root/nemu $TMP_DIR" + "export NEMU_HOME=$TMP_DIR/nemu" + "make -C $TMP_DIR/nemu ISA=x86" + "ls -lh /root/nemu-prog" + "file /root/nemu-prog/amtest-x86-nemu.elf" + "$TMP_DIR/nemu/build/x86-nemu --batch --mainargs=h /root/nemu-prog/amtest-x86-nemu.bin" + "file /root/nemu-prog/microbench-x86-nemu.elf" + "$TMP_DIR/nemu/build/x86-nemu --batch --mainargs=test /root/nemu-prog/microbench-x86-nemu.bin" + +# compile and run riscv64-nemu + "make -C $TMP_DIR/nemu clean" + "make -C $TMP_DIR/nemu ISA=riscv64" + "$TMP_DIR/nemu/build/riscv64-nemu --batch /root/nemu-prog/linux-hello-riscv64-nemu.bin" +) + +prompt="`whoami`@`hostname`:`pwd`#" + +echo -e "\n============ Now running preset commands =============\n" + +for ((i = 0; i < ${#cmd[@]}; i++)); do + c=${cmd[$i]} + echo "$prompt $c" + $c + echo "" +done + +echo -e "\n============ End of preset commands =============\n" + +/root/nemutrap/good-trap +``` + +* 若在不方便输入的环境(如NEMU, verilator仿真等)中测试, 可采用如下两种方式的其中一种, 避免登录时输入 + * 通过紧急模式登录 +``` +cd /lib/systemd/system +# 通过紧急模式登录, 不启动非必须的服务, 节省将近一半的登录时间 +ln -sf emergency.target default.target +# 跳过登录提示符, 直接运行bash +vim emergency.service + -ExecStart=-/lib/systemd/systemd-sulogin-shell emergency + +ExecStart=-/bin/bash +``` + * 免密码登录, 见[这里](https://superuser.com/questions/969923/automatic-root-login-in-debian-8-0-console-only) +``` +cd /lib/systemd/system +vim serial-getty@.service + -ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,57600,38400,9600 %I $TERM + +ExecStart=-/sbin/agetty -a root --keep-baud 115200,57600,38400,9600 %I $TERM +``` + +* 退出并卸载镜像 +``` +exit # 之前通过`chroot`方式进入 +sudo umount /mnt # 记得卸载! 在未卸载镜像的情况下通过可写方式再次打开`debian.img`(如作为qemu的文件系统), 镜像将会损坏! +sudo losetup -d /dev/loop0 # 删除loop设备 +``` + +* 修改`nemu/src/device/sdcard.c`中`init_sdcard()`中打开的镜像文件路径, 即可使用制作的镜像. +在i9-9900k上测试, 约90s后看到debian的登录提示符. + +* 当以可写方式启动镜像是, NEMU遇到错误或通过Ctrl+C直接退出NEMU时, 可能会损坏镜像的崩溃一致性, 此时可以通过fsck命令修复分区. diff --git a/libraries/NEMU/resource/mips-elf/README.md b/libraries/NEMU/resource/mips-elf/README.md new file mode 100644 index 0000000..57578e8 --- /dev/null +++ b/libraries/NEMU/resource/mips-elf/README.md @@ -0,0 +1 @@ +This is a dummy ELF file used by qemu-system-mips32 to start. diff --git a/libraries/NEMU/resource/sdcard/README.md b/libraries/NEMU/resource/sdcard/README.md new file mode 100644 index 0000000..80324e0 --- /dev/null +++ b/libraries/NEMU/resource/sdcard/README.md @@ -0,0 +1,58 @@ + +# NEMU sdhost驱动 + +本驱动裁剪自`linux/drivers/mmc/host/bcm2835.c`, 去除了DMA和中断, 改成直接轮询, 处理器无需支持DMA和中断即可运行. + +## 使用方法 + +* 将本目录下的`nemu.c`复制到`linux/drivers/mmc/host/`目录下 +* 在`linux/drivers/mmc/host/Makefile`中添加一行`obj-y += nemu.o` +* 在menuconfig中取消`General setup -> Initial RAM filesystem and RAM disk (initramfs/initrd) support` +* 在menuconfig中选中`Device Drivers -> MMC/SD/SDIO card support` +* 在dts中加入以下节点 +``` +/ { + soc { + sdhci: mmc { + compatible = "nemu-sdhost"; + reg = <0x0 0xa3000000 0x0 0x1000>; + }; + }; + + chosen { + bootargs = "root=/dev/mmcblk0p1 rootfstype=ext4 ro rootwait earlycon"; + }; +}; +``` + +## 在没有中断的处理器上访问SD卡 + +访问真实的SD卡需要等待一定的延迟, 这需要处理器的中断机制对内核支持计时的功能. +在没有中断机制的处理器上, 我们可以修改内核的部分代码, 使得无需等待这些延迟, +来达到确定性可重复的仿真效果. + +具体只需修改以下文件: +```diff +--- linux/drivers/mmc/core/block.c ++++ linux/drivers/mmc/core/block.c +@@ -983,6 +983,7 @@ static int card_busy_detect(struct mmc_card *card, unsigned int timeout_ms, + int err = 0; + u32 status; + ++ return err; + do { + bool done = time_after(jiffies, timeout); + +--- linux/drivers/mmc/core/core.h ++++ linux/drivers/mmc/core/core.h +@@ -64,6 +64,7 @@ void mmc_set_initial_state(struct mmc_host *host); + + static inline void mmc_delay(unsigned int ms) + { ++ return; + if (ms <= 20) + usleep_range(ms * 1000, ms * 1250); + else +``` + +注意: 上述修改仅能用于模拟和仿真, 修改后将不能在真实的SD卡上运行!!! diff --git a/libraries/NEMU/resource/sdcard/nemu.c b/libraries/NEMU/resource/sdcard/nemu.c new file mode 100644 index 0000000..8c823fa --- /dev/null +++ b/libraries/NEMU/resource/sdcard/nemu.c @@ -0,0 +1,542 @@ +/* + * NEMU (NJU Emulator) sdhost driver. + * + * Author: Zihao Yu + * + * Based on + * bcm2835.c by Phil Elwell + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#define SDCMD 0x00 /* Command to SD card - 16 R/W */ +#define SDARG 0x04 /* Argument to SD card - 32 R/W */ +#define SDTOUT 0x08 /* Start value for timeout counter - 32 R/W */ +#define SDCDIV 0x0c /* Start value for clock divider - 11 R/W */ +#define SDRSP0 0x10 /* SD card response (31:0) - 32 R */ +#define SDRSP1 0x14 /* SD card response (63:32) - 32 R */ +#define SDRSP2 0x18 /* SD card response (95:64) - 32 R */ +#define SDRSP3 0x1c /* SD card response (127:96) - 32 R */ +#define SDHSTS 0x20 /* SD host status - 11 R/W */ +#define SDVDD 0x30 /* SD card power control - 1 R/W */ +#define SDEDM 0x34 /* Emergency Debug Mode - 13 R/W */ +#define SDHCFG 0x38 /* Host configuration - 2 R/W */ +#define SDHBCT 0x3c /* Host byte count (debug) - 32 R/W */ +#define SDDATA 0x40 /* Data to/from SD card - 32 R/W */ +#define SDHBLC 0x50 /* Host block count (SDIO/SDHC) - 9 R/W */ + +#define SDCMD_NEW_FLAG 0x8000 +#define SDCMD_FAIL_FLAG 0x4000 +#define SDCMD_BUSYWAIT 0x800 +#define SDCMD_NO_RESPONSE 0x400 +#define SDCMD_LONG_RESPONSE 0x200 +#define SDCMD_WRITE_CMD 0x80 +#define SDCMD_READ_CMD 0x40 +#define SDCMD_CMD_MASK 0x3f + +#define SDCDIV_MAX_CDIV 0x7ff + +#define SDDATA_FIFO_WORDS 16 + +#define FIFO_READ_THRESHOLD 4 +#define FIFO_WRITE_THRESHOLD 4 +#define SDDATA_FIFO_PIO_BURST 8 + +#define PIO_THRESHOLD 1 /* Maximum block count for PIO (0 = always DMA) */ + +struct nemu_host { + spinlock_t lock; + struct mutex mutex; + + void __iomem *ioaddr; + u32 phys_addr; + + struct mmc_host *mmc; + struct platform_device *pdev; + + int clock; /* Current clock speed */ + unsigned int max_clk; /* Max possible freq */ + struct sg_mapping_iter sg_miter; /* SG state for PIO */ + unsigned int blocks; /* remaining PIO blocks */ + + struct mmc_request *mrq; /* Current request */ + struct mmc_command *cmd; /* Current command */ + struct mmc_data *data; /* Current data request */ + bool data_complete:1;/* Data finished before cmd */ + bool use_sbc:1; /* Send CMD23 */ +}; + +static void nemu_reset(struct mmc_host *mmc) +{ +} + +static void nemu_finish_command(struct nemu_host *host); + +static void nemu_transfer_block_pio(struct nemu_host *host, bool is_read) +{ + unsigned long flags; + size_t blksize; + + blksize = host->data->blksz; + + local_irq_save(flags); + + while (blksize) { + int copy_words; + size_t len; + u32 *buf; + + if (!sg_miter_next(&host->sg_miter)) { + host->data->error = -EINVAL; + break; + } + + len = min(host->sg_miter.length, blksize); + if (len % 4) { + host->data->error = -EINVAL; + break; + } + + blksize -= len; + host->sg_miter.consumed = len; + + buf = (u32 *)host->sg_miter.addr; + + copy_words = len / 4; + + while (copy_words) { + int burst_words, words; + u32 edm; + + burst_words = min(SDDATA_FIFO_PIO_BURST, copy_words); + edm = (8 << 4); + if (is_read) + words = ((edm >> 4) & 0x1f); + else + words = SDDATA_FIFO_WORDS - ((edm >> 4) & 0x1f); + + if (words < burst_words) { + continue; + } else if (words > copy_words) { + words = copy_words; + } + + copy_words -= words; + + while (words) { + if (is_read) + *(buf++) = readl(host->ioaddr + SDDATA); + else + writel(*(buf++), host->ioaddr + SDDATA); + words--; + } + } + } + + sg_miter_stop(&host->sg_miter); + + local_irq_restore(flags); +} + +static void nemu_transfer_pio(struct nemu_host *host) +{ + bool is_read = (host->data->flags & MMC_DATA_READ) != 0; + nemu_transfer_block_pio(host, is_read); +} + +static +void nemu_prepare_data(struct nemu_host *host, struct mmc_command *cmd) +{ + struct mmc_data *data = cmd->data; + int flags = SG_MITER_ATOMIC; + + WARN_ON(host->data); + + host->data = data; + if (!data) + return; + + host->data_complete = false; + host->data->bytes_xfered = 0; + + /* Use PIO */ + if (data->flags & MMC_DATA_READ) + flags |= SG_MITER_TO_SG; + else + flags |= SG_MITER_FROM_SG; + sg_miter_start(&host->sg_miter, data->sg, data->sg_len, flags); + host->blocks = data->blocks; +} + +static void nemu_finish_request(struct nemu_host *host) +{ + struct mmc_request *mrq; + + mrq = host->mrq; + + host->mrq = NULL; + host->cmd = NULL; + host->data = NULL; + + mmc_request_done(host->mmc, mrq); +} + +static +bool nemu_send_command(struct nemu_host *host, struct mmc_command *cmd) +{ + u32 sdcmd; + + WARN_ON(host->cmd); + + host->cmd = cmd; + + nemu_prepare_data(host, cmd); + + writel(cmd->arg, host->ioaddr + SDARG); + + sdcmd = cmd->opcode & SDCMD_CMD_MASK; + + if (!(cmd->flags & MMC_RSP_PRESENT)) { + sdcmd |= SDCMD_NO_RESPONSE; + } else { + if (cmd->flags & MMC_RSP_136) + sdcmd |= SDCMD_LONG_RESPONSE; + if (cmd->flags & MMC_RSP_BUSY) { + sdcmd |= SDCMD_BUSYWAIT; + } + } + + if (cmd->data) { + if (cmd->data->flags & MMC_DATA_WRITE) { + sdcmd |= SDCMD_WRITE_CMD; + } + if (cmd->data->flags & MMC_DATA_READ) + sdcmd |= SDCMD_READ_CMD; + } + + writel(sdcmd | SDCMD_NEW_FLAG, host->ioaddr + SDCMD); + + return true; +} + +static void nemu_transfer_complete(struct nemu_host *host) +{ + struct mmc_data *data; + + WARN_ON(!host->data_complete); + + data = host->data; + host->data = NULL; + + /* Need to send CMD12 if - + * a) open-ended multiblock transfer (no CMD23) + * b) error in multiblock transfer + */ + if (host->mrq->stop && (data->error || !host->use_sbc)) { + if (nemu_send_command(host, host->mrq->stop)) { + nemu_finish_command(host); + } + } else { + nemu_finish_request(host); + } +} + +static void nemu_finish_data(struct nemu_host *host) +{ + struct device *dev = &host->pdev->dev; + struct mmc_data *data; + + data = host->data; + + data->bytes_xfered = data->error ? 0 : (data->blksz * data->blocks); + + host->data_complete = true; + + if (host->cmd) { + /* Data managed to finish before the + * command completed. Make sure we do + * things in the proper order. + */ + dev_dbg(dev, "Finished early - HSTS %08x\n", + readl(host->ioaddr + SDHSTS)); + } else { + nemu_transfer_complete(host); + } +} + +static void nemu_finish_command(struct nemu_host *host) +{ + struct mmc_command *cmd = host->cmd; + int i; + + if (cmd->flags & MMC_RSP_PRESENT) { + if (cmd->flags & MMC_RSP_136) { + for (i = 0; i < 4; i++) { + cmd->resp[3 - i] = + readl(host->ioaddr + SDRSP0 + i * 4); + } + } else { + cmd->resp[0] = readl(host->ioaddr + SDRSP0); + } + } + + if (cmd == host->mrq->sbc) { + /* Finished CMD23, now send actual command. */ + host->cmd = NULL; + if (nemu_send_command(host, host->mrq->cmd)) { + if (host->data) { + // start PIO right now + for (i = 0; i < host->data->blocks; i ++) { + nemu_transfer_pio(host); + } + + nemu_finish_data(host); + } + + nemu_finish_command(host); + } + } else if (cmd == host->mrq->stop) { + /* Finished CMD12 */ + nemu_finish_request(host); + } else { + /* Processed actual command. */ + host->cmd = NULL; + if (!host->data) { + nemu_finish_request(host); + } + else if (host->data_complete) { + nemu_transfer_complete(host); + } + } +} + +static void nemu_request(struct mmc_host *mmc, struct mmc_request *mrq) +{ + struct nemu_host *host = mmc_priv(mmc); + struct device *dev = &host->pdev->dev; + + /* Reset the error statuses in case this is a retry */ + if (mrq->sbc) + mrq->sbc->error = 0; + if (mrq->cmd) + mrq->cmd->error = 0; + if (mrq->data) + mrq->data->error = 0; + if (mrq->stop) + mrq->stop->error = 0; + + if (mrq->data && !is_power_of_2(mrq->data->blksz)) { + dev_err(dev, "unsupported block size (%d bytes)\n", + mrq->data->blksz); + + if (mrq->cmd) + mrq->cmd->error = -EINVAL; + + mmc_request_done(mmc, mrq); + return; + } + + mutex_lock(&host->mutex); + + WARN_ON(host->mrq); + host->mrq = mrq; + + host->use_sbc = !!mrq->sbc && host->mrq->data && + (host->mrq->data->flags & MMC_DATA_READ); + if (host->use_sbc) { + if (nemu_send_command(host, mrq->sbc)) { + nemu_finish_command(host); + } + } else if (mrq->cmd && nemu_send_command(host, mrq->cmd)) { + if (host->data) { + int i; + // start PIO right now + for (i = 0; i < host->data->blocks; i ++) { + nemu_transfer_pio(host); + } + nemu_finish_data(host); + } + + nemu_finish_command(host); + } + + mutex_unlock(&host->mutex); +} + +static void nemu_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) +{ +} + +static const struct mmc_host_ops nemu_ops = { + .request = nemu_request, + .set_ios = nemu_set_ios, + .hw_reset = nemu_reset, +}; + +static int nemu_add_host(struct nemu_host *host) +{ + struct mmc_host *mmc = host->mmc; + struct device *dev = &host->pdev->dev; + int ret; + + if (!mmc->f_max || mmc->f_max > host->max_clk) + mmc->f_max = host->max_clk; + mmc->f_min = host->max_clk / SDCDIV_MAX_CDIV; + + mmc->max_busy_timeout = ~0 / (mmc->f_max / 1000); + + dev_dbg(dev, "f_max %d, f_min %d, max_busy_timeout %d\n", + mmc->f_max, mmc->f_min, mmc->max_busy_timeout); + + /* host controller capabilities */ + mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED | + MMC_CAP_NEEDS_POLL | MMC_CAP_HW_RESET | MMC_CAP_ERASE | + MMC_CAP_CMD23; + + spin_lock_init(&host->lock); + mutex_init(&host->mutex); + + mmc->max_segs = 128; + mmc->max_req_size = 524288; + mmc->max_seg_size = mmc->max_req_size; + mmc->max_blk_size = 1024; + mmc->max_blk_count = 65535; + + /* report supported voltage ranges */ + mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; + + ret = mmc_add_host(mmc); + if (ret) { + return ret; + } + + dev_info(dev, "loaded - DMA %s\n", "disabled"); + + return 0; +} + +static int nemu_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct resource *iomem; + struct nemu_host *host; + struct mmc_host *mmc; + const __be32 *regaddr_p; + int ret; + + dev_dbg(dev, "%s\n", __func__); + mmc = mmc_alloc_host(sizeof(*host), dev); + if (!mmc) + return -ENOMEM; + + mmc->ops = &nemu_ops; + host = mmc_priv(mmc); + host->mmc = mmc; + host->pdev = pdev; + spin_lock_init(&host->lock); + + iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0); + host->ioaddr = devm_ioremap_resource(dev, iomem); + if (IS_ERR(host->ioaddr)) { + ret = PTR_ERR(host->ioaddr); + goto err; + } + + /* Parse OF address directly to get the physical address for + * DMA to our registers. + */ + regaddr_p = of_get_address(pdev->dev.of_node, 0, NULL, NULL); + if (!regaddr_p) { + dev_err(dev, "Can't get phys address\n"); + ret = -EINVAL; + goto err; + } + + host->phys_addr = be32_to_cpup(regaddr_p); + + host->max_clk = 1000000; //clk_get_rate(clk); + + ret = mmc_of_parse(mmc); + if (ret) + goto err; + + ret = nemu_add_host(host); + if (ret) + goto err; + + platform_set_drvdata(pdev, host); + + dev_dbg(dev, "%s -> OK\n", __func__); + + return 0; + +err: + dev_dbg(dev, "%s -> err %d\n", __func__, ret); + mmc_free_host(mmc); + + return ret; +} + +static int nemu_remove(struct platform_device *pdev) +{ + struct nemu_host *host = platform_get_drvdata(pdev); + + mmc_remove_host(host->mmc); + + mmc_free_host(host->mmc); + platform_set_drvdata(pdev, NULL); + + return 0; +} + +static const struct of_device_id nemu_match[] = { + { .compatible = "nemu-sdhost" }, + { } +}; +MODULE_DEVICE_TABLE(of, nemu_match); + +static struct platform_driver nemu_driver = { + .probe = nemu_probe, + .remove = nemu_remove, + .driver = { + .name = "sdhost-nemu", + .of_match_table = nemu_match, + }, +}; +module_platform_driver(nemu_driver); + +MODULE_ALIAS("platform:sdhost-nemu"); +MODULE_DESCRIPTION("NEMU SDHost driver"); +MODULE_LICENSE("GPL v2"); +MODULE_AUTHOR("Zihao Yu"); diff --git a/libraries/NEMU/resource/softfloat/.gitignore b/libraries/NEMU/resource/softfloat/.gitignore new file mode 100644 index 0000000..7d37f1a --- /dev/null +++ b/libraries/NEMU/resource/softfloat/.gitignore @@ -0,0 +1 @@ +repo/ diff --git a/libraries/NEMU/scripts/build.mk b/libraries/NEMU/scripts/build.mk new file mode 100644 index 0000000..d055a65 --- /dev/null +++ b/libraries/NEMU/scripts/build.mk @@ -0,0 +1,50 @@ +.DEFAULT_GOAL = app + +ifdef SHARE +SO = -so +CFLAGS += -fPIC -D_SHARE=1 +LDFLAGS += -rdynamic -shared -fPIC -Wl,--no-undefined +endif + +WORK_DIR = $(shell pwd) +BUILD_DIR = $(WORK_DIR)/build + +INC_DIR += $(WORK_DIR)/include $(NEMU_HOME)/lib-include +OBJ_DIR = $(BUILD_DIR)/obj-$(NAME)$(SO) +BINARY = $(BUILD_DIR)/$(NAME)$(SO) + +CC ?= gcc + +CCACHE := $(if $(shell which ccache),ccache,) + +# Compilation flags +CC := $(CCACHE) $(CC) +LD := $(CCACHE) $(CC) +INCLUDES = $(addprefix -I, $(INC_DIR)) +CFLAGS := -O2 -MMD -Wall -Werror $(INCLUDES) $(CFLAGS) +LDFLAGS := -O2 $(LDFLAGS) + +OBJS = $(SRCS:%.c=$(OBJ_DIR)/%.o) + +# Compilation patterns +$(OBJ_DIR)/%.o: %.c + @echo + CC $< + @mkdir -p $(dir $@) + @$(CC) $(CFLAGS) $(SO_CFLAGS) -c -o $@ $< + $(call call_fixdep, $(@:.o=.d), $@) + +# Depencies +-include $(OBJS:.o=.d) + +# Some convenient rules + +.PHONY: app clean + +app: $(BINARY) + +$(BINARY): $(OBJS) $(LIBS) + @echo + LD $@ + @$(LD) -o $@ $(OBJS) $(LDFLAGS) $(LIBS) + +clean: + -rm -rf $(BUILD_DIR) diff --git a/libraries/NEMU/scripts/config.mk b/libraries/NEMU/scripts/config.mk new file mode 100644 index 0000000..c96e61d --- /dev/null +++ b/libraries/NEMU/scripts/config.mk @@ -0,0 +1,55 @@ +COLOR_RED := $(shell echo "\033[1;31m") +COLOR_END := $(shell echo "\033[0m") + +ifeq ($(wildcard .config),) +$(warning $(COLOR_RED)Warning: .config does not exists!$(COLOR_END)) +$(warning $(COLOR_RED)To build the porject, first run 'make menuconfig'.$(COLOR_END)) +endif + +Q := @ +KCONFIG_PATH := $(NEMU_HOME)/tools/kconfig +FIXDEP_PATH := $(NEMU_HOME)/tools/fixdep +Kconfig := $(NEMU_HOME)/Kconfig +rm-distclean += include/generated include/config .config .config.old +silent := -s + +CONF := $(KCONFIG_PATH)/build/conf +MCONF := $(KCONFIG_PATH)/build/mconf +FIXDEP := $(FIXDEP_PATH)/build/fixdep + +$(CONF): + $(Q)$(MAKE) $(silent) -C $(KCONFIG_PATH) NAME=conf + +$(MCONF): + $(Q)$(MAKE) $(silent) -C $(KCONFIG_PATH) NAME=mconf + +$(FIXDEP): + $(Q)$(MAKE) $(silent) -C $(FIXDEP_PATH) + +menuconfig: $(MCONF) $(CONF) $(FIXDEP) + $(Q)$(MCONF) $(Kconfig) + $(Q)$(CONF) $(silent) --syncconfig $(Kconfig) + +savedefconfig: $(CONF) + $(Q)$< $(silent) --$@=configs/defconfig $(Kconfig) + +%defconfig: $(CONF) $(FIXDEP) + $(Q)$< $(silent) --defconfig=configs/$@ $(Kconfig) + $(Q)$< $(silent) --syncconfig $(Kconfig) + +.PHONY: menuconfig savedefconfig defconfig + +# Help text used by make help +help: + @echo ' menuconfig - Update current config utilising a menu based program' + @echo ' savedefconfig - Save current config as configs/defconfig (minimal config)' + +distclean: clean + -@rm -rf $(rm-distclean) + +.PHONY: help distclean + +define call_fixdep + @$(FIXDEP) $(1) $(2) unused > $(1).tmp + @mv $(1).tmp $(1) +endef diff --git a/libraries/NEMU/scripts/git.mk b/libraries/NEMU/scripts/git.mk new file mode 100644 index 0000000..673937d --- /dev/null +++ b/libraries/NEMU/scripts/git.mk @@ -0,0 +1,21 @@ +STUID = 191220000 +STUNAME = 张三 + +# DO NOT modify the following code!!! + +GITFLAGS = -q --author='tracer-ics2020 ' --no-verify --allow-empty + +#ifndef __ICS_EXPORT +ifdef __NOT_DEFINED +#else +# prototype: git_commit(msg) +define git_commit + -@git add $(NEMU_HOME)/.. -A --ignore-errors + -@while (test -e .git/index.lock); do sleep 0.1; done + -@(echo "> $(1)" && echo $(STUID) && hostnamectl && uptime) | git commit -F - $(GITFLAGS) + -@sync +endef +#endif +#ifndef __ICS_EXPORT +endif +#endif diff --git a/libraries/NEMU/scripts/isa.mk b/libraries/NEMU/scripts/isa.mk new file mode 100644 index 0000000..a39ab38 --- /dev/null +++ b/libraries/NEMU/scripts/isa.mk @@ -0,0 +1,7 @@ +ISA ?= x86 +ISAS = $(shell ls $(NEMU_HOME)/src/isa/) +ifeq ($(filter $(ISAS), $(ISA)), ) # ISA must be valid +$(error Invalid ISA=$(ISA). Supported: $(ISAS)) +endif +NAME := $(ISA)-$(NAME) +CFLAGS += -D__ISA_$(ISA)__=1 diff --git a/libraries/NEMU/scripts/runall.sh b/libraries/NEMU/scripts/runall.sh new file mode 100644 index 0000000..7b2d891 --- /dev/null +++ b/libraries/NEMU/scripts/runall.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +ISA=${1#*ISA=} +CPUTEST_PATH=$NEMU_HOME/../am-kernels/tests/cpu-tests + +echo "compiling NEMU..." +if make -C $NEMU_HOME ISA=$ISA; then + echo "NEMU compile OK" +else + echo "NEMU compile error... exit..." + exit +fi + +echo "compiling testcases..." +if make -C $CPUTEST_PATH ARCH=$ISA-nemu &> /dev/null; then + echo "testcases compile OK" +else + echo "testcases compile error... exit..." + exit +fi + +files=`ls $CPUTEST_PATH/build/*-$ISA-nemu.bin` +ori_log="$NEMU_HOME/build/nemu-log.txt" + +for file in $files; do + base=`basename $file | sed -e "s/-$ISA-nemu.bin//"` + printf "[%14s] " $base + logfile=$NEMU_HOME/build/$base-log.txt + make -C $NEMU_HOME ISA=$ISA run ARGS="-b -l $ori_log $file" &> $logfile + + if (grep 'nemu: .*HIT GOOD TRAP' $logfile > /dev/null) then + echo -e "\033[1;32mPASS!\033[0m" + rm $logfile + else + echo -e "\033[1;31mFAIL!\033[0m see $logfile for more information" + if (test -e $ori_log) then + echo -e "\n\n===== the original log.txt =====\n" >> $logfile + cat $ori_log >> $logfile + fi + fi +done diff --git a/libraries/NEMU/src/cpu/cpu-exec.c b/libraries/NEMU/src/cpu/cpu-exec.c new file mode 100644 index 0000000..687b315 --- /dev/null +++ b/libraries/NEMU/src/cpu/cpu-exec.c @@ -0,0 +1,324 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +/* The assembly code of instructions executed is only output to the screen + * when the number of instructions executed is less than this value. + * This is useful when you use the `si' command. + * You can modify this value as you want. + */ +#define MAX_INSTR_TO_PRINT 10 +#ifndef CONFIG_SHARE +#define BATCH_SIZE 65536 +#else +#define BATCH_SIZE 1 +#endif + +CPU_state cpu = {}; +uint64_t g_nr_guest_instr = 0; +static uint64_t g_timer = 0; // unit: us +static bool g_print_step = false; +const rtlreg_t rzero = 0; +rtlreg_t tmp_reg[4]; + +#ifdef CONFIG_DEBUG +static inline void debug_hook(vaddr_t pc, const char *asmbuf) { + log_write("%s\n", asmbuf); + if (g_print_step) { puts(asmbuf); } + + void scan_watchpoint(vaddr_t pc); + scan_watchpoint(pc); +} +#endif + +static jmp_buf jbuf_exec = {}; +static uint64_t n_remain_total; +static int n_remain; +static Decode *prev_s; + +void save_globals(Decode *s) { + IFDEF(CONFIG_PERF_OPT, prev_s = s); +} + +static void update_instr_cnt() { +#if defined(CONFIG_ENABLE_INSTR_CNT) + int n_batch = n_remain_total >= BATCH_SIZE ? BATCH_SIZE : n_remain_total; + uint32_t n_executed = n_batch - n_remain; + n_remain_total -= (n_remain_total > n_executed) ? n_executed : n_remain_total; + IFNDEF(CONFIG_DEBUG, g_nr_guest_instr += n_executed); + n_remain = n_batch; // clean n_remain +#endif +} + +void monitor_statistic() { + update_instr_cnt(); + setlocale(LC_NUMERIC, ""); + Log("host time spent = %'ld us", g_timer); +#ifdef CONFIG_ENABLE_INSTR_CNT + Log("total guest instructions = %'ld", g_nr_guest_instr); + if (g_timer > 0) Log("simulation frequency = %'ld instr/s", g_nr_guest_instr * 1000000 / g_timer); + else Log("Finish running in less than 1 us and can not calculate the simulation frequency"); +#else + Log("CONFIG_ENABLE_INSTR_CNT is not defined"); +#endif +} + +static word_t g_ex_cause = 0; +static int g_sys_state_flag = 0; + +void set_sys_state_flag(int flag) { + g_sys_state_flag |= flag; +} + +void mmu_tlb_flush(vaddr_t vaddr) { + hosttlb_flush(vaddr); + if (vaddr == 0) set_sys_state_flag(SYS_STATE_FLUSH_TCACHE); +} + +void longjmp_exec(int cause) { + longjmp(jbuf_exec, cause); +} + +void longjmp_exception(int ex_cause) { +#ifdef CONFIG_GUIDED_EXEC + cpu.guided_exec = false; +#endif + g_ex_cause = ex_cause; + longjmp_exec(NEMU_EXEC_EXCEPTION); +} + +#ifdef CONFIG_PERF_OPT +#define FILL_EXEC_TABLE(name) [concat(EXEC_ID_, name)] = &&concat(exec_, name), + +#define rtl_j(s, target) do { \ + IFDEF(CONFIG_ENABLE_INSTR_CNT, n -= s->idx_in_bb); \ + s = s->tnext; \ + goto end_of_bb; \ +} while (0) +#define rtl_jr(s, target) do { \ + IFDEF(CONFIG_ENABLE_INSTR_CNT, n -= s->idx_in_bb); \ + s = jr_fetch(s, *(target)); \ + goto end_of_bb; \ +} while (0) +#define rtl_jrelop(s, relop, src1, src2, target) do { \ + IFDEF(CONFIG_ENABLE_INSTR_CNT, n -= s->idx_in_bb); \ + if (interpret_relop(relop, *src1, *src2)) s = s->tnext; \ + else s = s->ntnext; \ + goto end_of_bb; \ +} while (0) + +#define rtl_priv_next(s) do { \ + if (g_sys_state_flag) { \ + s = (g_sys_state_flag & SYS_STATE_FLUSH_TCACHE) ? \ + tcache_handle_flush(s->snpc) : s + 1; \ + g_sys_state_flag = 0; \ + goto end_of_loop; \ + } \ +} while (0) + +#define rtl_priv_jr(s, target) do { \ + IFDEF(CONFIG_ENABLE_INSTR_CNT, n -= s->idx_in_bb); \ + s = jr_fetch(s, *(target)); \ + if (g_sys_state_flag & SYS_STATE_FLUSH_TCACHE) { \ + s = tcache_handle_flush(s->pc); \ + g_sys_state_flag = 0; \ + } \ + goto end_of_loop; \ +} while (0) + +static const void **g_exec_table; + +Decode* tcache_jr_fetch(Decode *s, vaddr_t jpc); +Decode* tcache_decode(Decode *s); +void tcache_handle_exception(vaddr_t jpc); +Decode* tcache_handle_flush(vaddr_t snpc); + +static inline +Decode* jr_fetch(Decode *s, vaddr_t target) { + if (likely(s->tnext->pc == target)) return s->tnext; + if (likely(s->ntnext->pc == target)) return s->ntnext; + return tcache_jr_fetch(s, target); +} + +static inline void debug_difftest(Decode *_this, Decode *next) { + IFDEF(CONFIG_IQUEUE, iqueue_commit(_this->pc, (void *)&_this->isa.instr.val, _this->snpc - _this->pc)); + IFDEF(CONFIG_DEBUG, debug_hook(_this->pc, _this->logbuf)); + IFDEF(CONFIG_DIFFTEST, save_globals(next)); + IFDEF(CONFIG_DIFFTEST, cpu.pc = next->pc); + IFDEF(CONFIG_DIFFTEST, difftest_step(_this->pc, next->pc)); +} + +static int execute(int n) { + static const void* local_exec_table[TOTAL_INSTR] = { + MAP(INSTR_LIST, FILL_EXEC_TABLE) + }; + static int init_flag = 0; + Decode *s = prev_s; + + if (likely(init_flag == 0)) { + g_exec_table = local_exec_table; + extern Decode* tcache_init(const void *exec_nemu_decode, vaddr_t reset_vector); + s = tcache_init(&&exec_nemu_decode, cpu.pc); + IFDEF(CONFIG_MODE_SYSTEM, hosttlb_init()); + init_flag = 1; + } + + __attribute__((unused)) Decode *this_s = NULL; + while (true) { +#if defined(CONFIG_DEBUG) || defined(CONFIG_DIFFTEST) || defined(CONFIG_IQUEUE) + this_s = s; +#endif + __attribute__((unused)) rtlreg_t ls0, ls1, ls2; + + goto *(s->EHelper); + +#undef s0 +#undef s1 +#undef s2 +#define s0 &ls0 +#define s1 &ls1 +#define s2 &ls2 + +#include "isa-exec.h" + +def_EHelper(nemu_decode) { + s = tcache_decode(s); +#ifdef XIANGSHAN_DEBUG + printf("[NEMU] exec pc = 0x%lx\n", s->pc); +#endif + continue; +} + +end_of_bb: + IFDEF(CONFIG_ENABLE_INSTR_CNT, n_remain = n); + IFNDEF(CONFIG_ENABLE_INSTR_CNT, n --); + if (unlikely(n <= 0)) break; + + def_finish(); + debug_difftest(this_s, s); + } + +end_of_loop: + debug_difftest(this_s, s); + prev_s = s; + return n; +} +#else +#define FILL_EXEC_TABLE(name) [concat(EXEC_ID_, name)] = concat(exec_, name), + +#define rtl_priv_next(s) +#define rtl_priv_jr(s, target) rtl_jr(s, target) + +#include "isa-exec.h" +static const void* g_exec_table[TOTAL_INSTR] = { + MAP(INSTR_LIST, FILL_EXEC_TABLE) +}; + +static int execute(int n) { + static Decode s; + prev_s = &s; + for (;n > 0; n --) { + fetch_decode(&s, cpu.pc); + cpu.pc = s.snpc; +#ifdef XIANGSHAN_DEBUG + printf("[NEMU] exec pc = 0x%lx\n", s.pc); +#endif + s.EHelper(&s); + g_nr_guest_instr ++; + IFDEF(CONFIG_DEBUG, debug_hook(s.pc, s.logbuf)); + IFDEF(CONFIG_DIFFTEST, difftest_step(s.pc, cpu.pc)); + } + return n; +} +#endif + +void fetch_decode(Decode *s, vaddr_t pc) { + s->pc = pc; + s->snpc = pc; + IFDEF(CONFIG_DEBUG, log_bytebuf[0] = '\0'); + int idx = isa_fetch_decode(s); + IFDEF(CONFIG_DEBUG, snprintf(s->logbuf, sizeof(s->logbuf), FMT_WORD ": %s%*.s%s", + s->pc, log_bytebuf, 50 - (12 + 3 * (int)(s->snpc - s->pc)), "", log_asmbuf)); + s->EHelper = g_exec_table[idx]; +} + +#ifdef CONFIG_PERF_OPT +static void update_global() { + update_instr_cnt(); + cpu.pc = prev_s->pc; +} +#endif + +/* Simulate how the CPU works. */ +void cpu_exec(uint64_t n) { + IFDEF(CONFIG_SHARE, assert(n <= 1)); + g_print_step = (n < MAX_INSTR_TO_PRINT); + switch (nemu_state.state) { + case NEMU_END: case NEMU_ABORT: + printf("Program execution has ended. To restart the program, exit NEMU and run again.\n"); + return; + default: nemu_state.state = NEMU_RUNNING; + } + + uint64_t timer_start = get_time(); + + n_remain_total = n; // deal with setjmp() + int cause; + if ((cause = setjmp(jbuf_exec))) { + n_remain -= prev_s->idx_in_bb - 1; +#ifdef CONFIG_PERF_OPT + update_global(); +#endif + } + + while (nemu_state.state == NEMU_RUNNING && + MUXDEF(CONFIG_ENABLE_INSTR_CNT, n_remain_total > 0, true)) { +#ifdef CONFIG_DEVICE + extern void device_update(); + device_update(); +#endif + + if (cause == NEMU_EXEC_EXCEPTION) { + cause = 0; + cpu.pc = raise_intr(g_ex_cause, prev_s->pc); + IFDEF(CONFIG_PERF_OPT, tcache_handle_exception(cpu.pc)); + IFDEF(CONFIG_SHARE, break); + } else { + word_t intr = MUXDEF(CONFIG_SHARE, INTR_EMPTY, isa_query_intr()); + if (intr != INTR_EMPTY) { + cpu.pc = raise_intr(intr, cpu.pc); + IFDEF(CONFIG_DIFFTEST, ref_difftest_raise_intr(intr)); + IFDEF(CONFIG_PERF_OPT, tcache_handle_exception(cpu.pc)); + } + } + + int n_batch = n >= BATCH_SIZE ? BATCH_SIZE : n; + n_remain = execute(n_batch); +#ifdef CONFIG_PERF_OPT + update_global(); +#else + n_remain_total -= n_batch; +#endif + } + + uint64_t timer_end = get_time(); + g_timer += timer_end - timer_start; + + switch (nemu_state.state) { + case NEMU_RUNNING: nemu_state.state = NEMU_STOP; break; + + case NEMU_END: case NEMU_ABORT: + Log("nemu: %s\33[0m at pc = " FMT_WORD, + (nemu_state.state == NEMU_ABORT ? "\33[1;31mABORT" : + (nemu_state.halt_ret == 0 ? "\33[1;32mHIT GOOD TRAP" : "\33[1;31mHIT BAD TRAP")), + nemu_state.halt_pc); + // fall through + case NEMU_QUIT: + monitor_statistic(); + } +} diff --git a/libraries/NEMU/src/cpu/difftest/dut.c b/libraries/NEMU/src/cpu/difftest/dut.c new file mode 100644 index 0000000..9f62d44 --- /dev/null +++ b/libraries/NEMU/src/cpu/difftest/dut.c @@ -0,0 +1,161 @@ +#include + +#include +#include +#include +#include +#include + +void (*ref_difftest_memcpy)(paddr_t addr, void *buf, size_t n, bool direction) = NULL; +void (*ref_difftest_regcpy)(void *dut, bool direction) = NULL; +void (*ref_difftest_exec)(uint64_t n) = NULL; +void (*ref_difftest_raise_intr)(uint64_t NO) = NULL; + +#ifdef CONFIG_DIFFTEST + +IFDEF(CONFIG_DIFFTEST_REF_QEMU_DL, __thread uint8_t resereve_for_qemu_tls[4096]); + +static bool is_skip_ref = false; +static int skip_dut_nr_instr = 0; +void (*patch_fn)(void *arg) = NULL; +static void* patch_arg = NULL; +#ifndef __ICS_EXPORT +static bool is_detach = false; +#endif + +// this is used to let ref skip instructions which +// can not produce consistent behavior with NEMU +void difftest_skip_ref() { +#ifndef __ICS_EXPORT + if (is_detach) return; +#endif + is_skip_ref = true; + // If such an instruction is one of the instruction packing in QEMU + // (see below), we end the process of catching up with QEMU's pc to + // keep the consistent behavior in our best. + // Note that this is still not perfect: if the packed instructions + // already write some memory, and the incoming instruction in NEMU + // will load that memory, we will encounter false negative. But such + // situation is infrequent. + skip_dut_nr_instr = 0; +} + +// this is used to deal with instruction packing in QEMU. +// Sometimes letting QEMU step once will execute multiple instructions. +// We should skip checking until NEMU's pc catches up with QEMU's pc. +// The semantic is +// Let REF run `nr_ref` instructions first. +// We expect that DUT will catch up with REF within `nr_dut` instructions. +void difftest_skip_dut(int nr_ref, int nr_dut) { +#ifndef __ICS_EXPORT + if (is_detach) return; +#endif + skip_dut_nr_instr += nr_dut; + + while (nr_ref -- > 0) { + ref_difftest_exec(1); + } +} + +void difftest_set_patch(void (*fn)(void *arg), void *arg) { + patch_fn = fn; + patch_arg = arg; +} + +void init_difftest(char *ref_so_file, long img_size, int port) { + assert(ref_so_file != NULL); + + void *handle; + handle = dlopen(ref_so_file, RTLD_LAZY | MUXNDEF(CONFIG_CC_ASAN, RTLD_DEEPBIND, 0)); + assert(handle); + + ref_difftest_memcpy = dlsym(handle, "difftest_memcpy"); + assert(ref_difftest_memcpy); + + ref_difftest_regcpy = dlsym(handle, "difftest_regcpy"); + assert(ref_difftest_regcpy); + + ref_difftest_exec = dlsym(handle, "difftest_exec"); + assert(ref_difftest_exec); + + ref_difftest_raise_intr = dlsym(handle, "difftest_raise_intr"); + assert(ref_difftest_raise_intr); + + void (*ref_difftest_init)(int) = dlsym(handle, "difftest_init"); + assert(ref_difftest_init); + + Log("Differential testing: \33[1;32m%s\33[0m", "ON"); + Log("The result of every instruction will be compared with %s. " + "This will help you a lot for debugging, but also significantly reduce the performance. " + "If it is not necessary, you can turn it off in include/common.h.", ref_so_file); + + ref_difftest_init(port); + ref_difftest_memcpy(RESET_VECTOR, guest_to_host(RESET_VECTOR), img_size, DIFFTEST_TO_REF); + ref_difftest_regcpy(&cpu, DIFFTEST_TO_REF); +} + +static void checkregs(CPU_state *ref, vaddr_t pc) { + if (!isa_difftest_checkregs(ref, pc)) { + isa_reg_display(); + IFDEF(CONFIG_IQUEUE, iqueue_dump()); + nemu_state.state = NEMU_ABORT; + nemu_state.halt_pc = pc; + longjmp_exec(NEMU_EXEC_END); + } +} + +void difftest_step(vaddr_t pc, vaddr_t npc) { + CPU_state ref_r; + +#ifndef __ICS_EXPORT + if (is_detach) return; + +#endif + if (skip_dut_nr_instr > 0) { + ref_difftest_regcpy(&ref_r, DIFFTEST_TO_DUT); + if (ref_r.pc == npc) { + skip_dut_nr_instr = 0; + checkregs(&ref_r, npc); + return; + } + skip_dut_nr_instr --; + if (skip_dut_nr_instr == 0) + panic("can not catch up with ref.pc = " FMT_WORD " at pc = " FMT_WORD, ref_r.pc, pc); + return; + } + + if (is_skip_ref) { + // to skip the checking of an instruction, just copy the reg state to reference design + ref_difftest_regcpy(&cpu, DIFFTEST_TO_REF); + is_skip_ref = false; + return; + } + + ref_difftest_exec(1); + + if (patch_fn) { + patch_fn(patch_arg); + patch_fn = NULL; + } + + ref_difftest_regcpy(&ref_r, DIFFTEST_TO_DUT); + + checkregs(&ref_r, pc); +} +#ifndef __ICS_EXPORT +void difftest_detach() { + is_detach = true; +} + +void difftest_attach() { + is_detach = false; + is_skip_ref = false; + skip_dut_nr_instr = 0; + + isa_difftest_attach(); +} +#endif + +#else +void init_difftest(char *ref_so_file, long img_size, int port) { } +#endif diff --git a/libraries/NEMU/src/cpu/difftest/ref.c b/libraries/NEMU/src/cpu/difftest/ref.c new file mode 100644 index 0000000..1367237 --- /dev/null +++ b/libraries/NEMU/src/cpu/difftest/ref.c @@ -0,0 +1,84 @@ +#include +#include +#include +#include + +#ifdef CONFIG_LARGE_COPY +static void nemu_large_memcpy(void *dest, void *src, size_t n) { + uint64_t *_dest = (uint64_t *)dest; + uint64_t *_src = (uint64_t *)src; + while (n >= sizeof(uint64_t)) { + if (*_src != 0) { + *_dest = *_src; + } + _dest++; + _src++; + n -= sizeof(uint64_t); + } + if (n > 0) { + uint8_t *dest8 = (uint8_t *)_dest; + uint8_t *src8 = (uint8_t *)_src; + while (n > 0) { + *dest8 = *src8; + dest8++; + src8++; + n--; + } + } +} +#endif + +void difftest_memcpy(paddr_t nemu_addr, void *dut_buf, size_t n, bool direction) { +#ifdef CONFIG_LARGE_COPY + if (direction == DIFFTEST_TO_REF) nemu_large_memcpy(guest_to_host(nemu_addr), dut_buf, n); + else nemu_large_memcpy(dut_buf, guest_to_host(nemu_addr), n); +#else + if (direction == DIFFTEST_TO_REF) memcpy(guest_to_host(nemu_addr), dut_buf, n); + else memcpy(dut_buf, guest_to_host(nemu_addr), n); +#endif +} + +void difftest_regcpy(void *dut, bool direction) { + isa_difftest_regcpy(dut, direction); +} + +#ifdef RV64_FULL_DIFF +void difftest_csrcpy(void *dut, bool direction) { + isa_difftest_csrcpy(dut, direction); +} + +void difftest_uarchstatus_cpy(void *dut, bool direction) { + isa_difftest_uarchstatus_cpy(dut, direction); +} + +int difftest_store_commit(uint64_t *saddr, uint64_t *sdata, uint8_t *smask) { +#ifdef CONFIG_DIFFTEST_STORE_COMMIT + return check_store_commit(saddr, sdata, smask); +#else + return 0; +#endif +} +#endif + +void difftest_exec(uint64_t n) { + cpu_exec(n); +} + +#ifdef CONFIG_GUIDED_EXEC +void difftest_guided_exec(void * guide) { + isa_difftest_guided_exec(guide); +} +#endif + +void difftest_raise_intr(word_t NO) { + isa_difftest_raise_intr(NO); +} + +void difftest_init() { + init_mem(); + + /* Perform ISA dependent initialization. */ + init_isa(); + /* create dummy address space for serial */ + //add_mmio_map("difftest.serial", 0xa10003f8, new_space(8), 8, NULL); +} diff --git a/libraries/NEMU/src/cpu/tcache.c b/libraries/NEMU/src/cpu/tcache.c new file mode 100644 index 0000000..9d3788d --- /dev/null +++ b/libraries/NEMU/src/cpu/tcache.c @@ -0,0 +1,246 @@ +#include +#include + +#ifdef CONFIG_PERF_OPT + +#define TCACHE_BB_SIZE (CONFIG_TCACHE_SIZE / 4 + 2) + +typedef struct bb_t { + Decode *s; + struct bb_t *next; + vaddr_t pc; +} bb_t; + +enum { BB_RECORD_TYPE_NTAKEN = 1, BB_RECORD_TYPE_TAKEN }; + +static Decode tcache_pool[CONFIG_TCACHE_SIZE] = {}; +static int tc_idx = 0; +static Decode tcache_bb_pool[TCACHE_BB_SIZE] = {}; +static Decode *tcache_bb_freelist = NULL; +static bb_t bb_pool[CONFIG_BB_POOL_SIZE] = {}; +static int bb_idx = 0; +static bb_t bb_list [CONFIG_BB_LIST_SIZE] = {}; +static const void *g_exec_nemu_decode; + +static inline Decode* tcache_entry_init(Decode *s, vaddr_t pc) { + s->tnext = s->ntnext = NULL; + s->type = 0; + s->pc = pc; + s->EHelper = g_exec_nemu_decode; + return s; +} + +static inline Decode* tcache_new(vaddr_t pc) { + if (tc_idx == CONFIG_TCACHE_SIZE) return NULL; + assert(tc_idx < CONFIG_TCACHE_SIZE); + Decode *s = &tcache_pool[tc_idx]; + tc_idx ++; + return tcache_entry_init(s, pc); +} + +#ifdef CONFIG_RT_CHECK +#define tcache_bb_check(s) do { \ + int idx = s - tcache_bb_pool; \ + Assert(idx >= 0 && idx < TCACHE_BB_SIZE, "idx = %d, s = %p", idx, s); \ +} while (0) +#else +#define tcache_bb_check(s) +#endif + +static inline Decode* tcache_bb_new(vaddr_t pc) { + Decode *s = tcache_bb_freelist; + assert(s != NULL); + tcache_bb_check(s); + tcache_bb_check(tcache_bb_freelist->tnext); + tcache_bb_freelist = tcache_bb_freelist->tnext; + tcache_bb_check(tcache_bb_freelist); + tcache_bb_check(tcache_bb_freelist->tnext); + return tcache_entry_init(s, pc); +} + +static inline void tcache_bb_free(Decode *s) { + tcache_bb_check(s); + tcache_bb_check(tcache_bb_freelist); + s->tnext = tcache_bb_freelist; + tcache_bb_freelist = s; + tcache_bb_check(tcache_bb_freelist->tnext); +} + + +static inline bb_t* bb_new(Decode *s, vaddr_t pc, bb_t *next) { + if (bb_idx == CONFIG_BB_POOL_SIZE) return NULL; + assert(bb_idx < CONFIG_BB_POOL_SIZE); + bb_t *bb = &bb_pool[bb_idx ++]; + bb->s = s; + bb->pc = pc; + bb->next = next; + return bb; +} + +static inline bb_t* bb_hash(vaddr_t pc) { + int idx = (pc / CONFIG_ILEN_MIN) % CONFIG_BB_LIST_SIZE; + return &bb_list[idx]; +} + +static struct bb_t* bb_insert(vaddr_t pc, Decode *fill) { + bb_t *head = bb_hash(pc); + if (head->next == (void *)-1ul) { + if (head->pc == (vaddr_t)-1ul) { + // first time + head->s = fill; + head->pc = pc; + return head; + } + } + // second time + bb_t *bb = bb_new(head->s, head->pc, head->next); + if (bb == NULL) return NULL; + head->s = fill; + head->pc = pc; + head->next = bb; + return head; +} + +static bb_t* bb_find(vaddr_t pc) { + bb_t *bb = bb_hash(pc); + if (likely(bb->pc == pc)) return bb; + bb_t *head = bb; + do { + bb = bb->next; + if (bb == (void *)-1ul) return NULL; + if (bb->pc == pc) { + Decode *tmp_s = bb->s; vaddr_t tmp_pc = bb->pc; + bb->s = head->s; bb->pc = head->pc; + head->s = tmp_s; head->pc = tmp_pc; + return head; + } + } while (1); +} + +static void tcache_bb_fetch(Decode *_this, int is_taken, vaddr_t jpc) { + bb_t* bb = bb_find(jpc); + if (bb != NULL) { + if (is_taken) { _this->tnext = bb->s; } + else { _this->ntnext = bb->s; } + } else { + Decode *ret = tcache_bb_new(jpc); + if (is_taken) { ret->type = BB_RECORD_TYPE_TAKEN; _this->tnext = ret; } + else { ret->type = BB_RECORD_TYPE_NTAKEN; _this->ntnext = ret; } + ret->bb_src = _this; + } +} + +static void tcache_flush() { + tc_idx = 0; + bb_idx = 0; + memset(bb_list, -1, sizeof(bb_list)); + + int i; + for (i = 0; i < TCACHE_BB_SIZE - 1; i ++) { + tcache_bb_pool[i].list_next = &tcache_bb_pool[i + 1]; + } + tcache_bb_pool[TCACHE_BB_SIZE - 1].list_next = NULL; + tcache_bb_freelist = &tcache_bb_pool[0]; +} + +enum { TCACHE_BB_BUILDING, TCACHE_RUNNING }; +static int tcache_state = TCACHE_RUNNING; +static Decode *bb_now = NULL, *bb_now_record = NULL; + +__attribute__((noinline)) +Decode* tcache_jr_fetch(Decode *s, vaddr_t jpc) { + s->ntnext = s->tnext; + tcache_bb_fetch(s, true, jpc); + return s->tnext; +} + +static inline void tcache_patch_and_free(Decode *bb_record, Decode *bb) { + Decode *src = bb_record->bb_src; + if (bb_record->type == BB_RECORD_TYPE_TAKEN) { src->tnext = bb; } + if (bb_record->type == BB_RECORD_TYPE_NTAKEN) { src->ntnext = bb; } + tcache_bb_free(bb_record); +} + +__attribute__((noinline)) +Decode* tcache_decode(Decode *s) { + static int idx_in_bb = 0; + vaddr_t thispc = s->pc; + + if (tcache_state == TCACHE_RUNNING) { // start of a basic block + // first check whether this basic block is already decoded + bb_t *bb = bb_find(thispc); + if (bb != NULL) { // already decoded + tcache_patch_and_free(s, bb->s); + return bb->s; + } + + Decode *old = s; + s = tcache_new(thispc); + idx_in_bb = 1; + if (s == NULL) { goto full; } + + bb_now_record = old; + bb_now = s; + tcache_state = TCACHE_BB_BUILDING; + } + + save_globals(s); + s->idx_in_bb = idx_in_bb; + fetch_decode(s, thispc); // note that exception may happen! + + if (s->type == INSTR_TYPE_N) { + Decode *next = tcache_new(s->snpc); + if (next == NULL) { goto full; } + assert(next == s + 1); + } else { + // the end of the basic block + bb_t *ret = bb_insert(bb_now->pc, bb_now); + if (ret == NULL) { goto full; } // basic block list is full + tcache_patch_and_free(bb_now_record, bb_now); + bb_now = bb_now_record = NULL; + + switch (s->type) { + case INSTR_TYPE_J: tcache_bb_fetch(s, true, s->jnpc); break; + case INSTR_TYPE_B: + tcache_bb_fetch(s, true, s->jnpc); + tcache_bb_fetch(s, false, s->snpc + MUXDEF(__ISA_mips32__, 4, 0)); + break; + case INSTR_TYPE_I: s->tnext = s->ntnext = s; break; // update dynamically + default: assert(0); + } + tcache_state = TCACHE_RUNNING; + } + + idx_in_bb ++; + return s; + +full: + tcache_flush(); + s = tcache_bb_new(thispc); // decode this instruction again + s->idx_in_bb = idx_in_bb; + save_globals(s); + bb_now = bb_now_record = NULL; + tcache_state = TCACHE_RUNNING; + longjmp_exec(NEMU_EXEC_AGAIN); +} + +static Decode ex = {}; + +void tcache_handle_exception(vaddr_t jpc) { + tcache_bb_fetch(&ex, true, jpc); + save_globals(ex.tnext); + tcache_state = TCACHE_RUNNING; +} + +Decode* tcache_handle_flush(vaddr_t snpc) { + tcache_flush(); + tcache_handle_exception(snpc); + return ex.tnext; +} + +Decode* tcache_init(const void *exec_nemu_decode, vaddr_t reset_vector) { + tcache_flush(); + g_exec_nemu_decode = exec_nemu_decode; + return tcache_bb_new(reset_vector); +} +#endif diff --git a/libraries/NEMU/src/device/Kconfig b/libraries/NEMU/src/device/Kconfig new file mode 100644 index 0000000..c4bbd78 --- /dev/null +++ b/libraries/NEMU/src/device/Kconfig @@ -0,0 +1,174 @@ +menuconfig DEVICE + depends on !SHARE + bool "Devices" + default y + help + Provide device support for NEMU. + +if DEVICE + +config HAS_PORT_IO + bool + default y + +menuconfig HAS_SERIAL + bool "Enable serial" + default y + +menuconfig HAS_UARTLITE + bool "Enable uartlite" + default n + +if HAS_SERIAL +config SERIAL_PORT + depends on HAS_PORT_IO + hex "Port address of the serial controller" + default 0x3f8 + +config SERIAL_MMIO + hex "MMIO address of the serial controller" + default 0xa10003f8 + +config SERIAL_INPUT_FIFO + bool "Enable input FIFO with /tmp/nemu.serial" + default n + +config SERIAL_UARTLITE + bool "Use uartlite as the serial (default: 16550)" + default n +endif # HAS_SERIAL + +if HAS_UARTLITE +config UARTLITE_PORT + depends on HAS_PORT_IO + hex "Port address of uartlite controller" + default 0x3f8 + +config UARTLITE_MMIO + hex "MMIO address of uartlite controller" + default 0xa10003f8 + +config UARTLITE_INPUT_FIFO + bool "Enable input FIFO with /tmp/nemu.serial" + default n +endif # HAS_UARTLITE + +menuconfig HAS_TIMER + bool "Enable timer" + default y + +if HAS_TIMER +config RTC_PORT + depends on HAS_PORT_IO + hex "Port address of the timer" + default 0x48 + +config RTC_MMIO + hex "MMIO address of the timer" + default 0xa1000048 +endif # HAS_TIMER + +menuconfig HAS_KEYBOARD + bool "Enable keyboard" + default y + +if HAS_KEYBOARD +config I8042_DATA_PORT + depends on HAS_PORT_IO + hex "Port address of the keyboard controller" + default 0x60 + +config I8042_DATA_MMIO + hex "MMIO address of the keyboard controller" + default 0xa1000060 +endif # HAS_KEYBOARD + +menuconfig HAS_VGA + bool "Enable VGA" + default y + +if HAS_VGA +config FB_ADDR + hex "Physical address of the VGA frame buffer" + default 0xa0000000 + +config VGA_CTL_PORT + depends on HAS_PORT_IO + hex "Port address of the VGA controller" + default 0x100 + +config VGA_CTL_MMIO + hex "MMIO address of the VGA controller" + default 0xa1000100 + +config VGA_SHOW_SCREEN + bool "Enable SDL SCREEN" + default y + +choice + prompt "Screen Size" + default VGA_SIZE_400x300 +config VGA_SIZE_400x300 + bool "400 x 300" +config VGA_SIZE_800x600 + bool "800 x 600" +endchoice +endif # HAS_VGA + +menuconfig HAS_AUDIO + bool "Enable audio" + default y + +if HAS_AUDIO +config SB_ADDR + hex "Physical address of the audio stream buffer" + default 0xa0800000 + +config SB_SIZE + hex "Size of the audio stream buffer" + default 0x10000 + +config AUDIO_CTL_PORT + depends on HAS_PORT_IO + hex "Port address of the audio controller" + default 0x200 + +config AUDIO_CTL_MMIO + hex "MMIO address of the audio controller" + default 0xa1000200 +endif # HAS_AUDIO + +menuconfig HAS_DISK + bool "Enable disk" + default y + +if HAS_DISK +config DISK_CTL_PORT + depends on HAS_PORT_IO + hex "Port address of the disk controller" + default 0x300 + +config DISK_CTL_MMIO + hex "MMIO address of the disk controller" + default 0xa1000300 + +config DISK_IMG_PATH + string "The path of disk image" + default "" +endif # HAS_DISK + +menuconfig HAS_SDCARD + bool "Enable sdcard" + default y + +if HAS_SDCARD +config SDCARD_CTL_MMIO + hex "MMIO address of the sdcard controller" + default 0xa3000000 + +config SDCARD_IMG_PATH + string "The path of sdcard image" + default "" +endif # HAS_SDCARD + +endif # DEVICE diff --git a/libraries/NEMU/src/device/alarm.c b/libraries/NEMU/src/device/alarm.c new file mode 100644 index 0000000..74f68be --- /dev/null +++ b/libraries/NEMU/src/device/alarm.c @@ -0,0 +1,37 @@ +#include +#include "device/alarm.h" +#include +#include + +#define TIMER_HZ 60 +#define MAX_HANDLER 8 + +static alarm_handler_t handler[MAX_HANDLER] = {}; +static int idx = 0; + +void add_alarm_handle(alarm_handler_t h) { + assert(idx < MAX_HANDLER); + handler[idx ++] = h; +} + +static void alarm_sig_handler(int signum) { + int i; + for (i = 0; i < idx; i ++) { + handler[i](); + } +} + +void init_alarm() { + struct sigaction s; + memset(&s, 0, sizeof(s)); + s.sa_handler = alarm_sig_handler; + int ret = sigaction(SIGVTALRM, &s, NULL); + Assert(ret == 0, "Can not set signal handler"); + + struct itimerval it = {}; + it.it_value.tv_sec = 0; + it.it_value.tv_usec = 1000000 / TIMER_HZ; + it.it_interval = it.it_value; + ret = setitimer(ITIMER_VIRTUAL, &it, NULL); + Assert(ret == 0, "Can not set timer"); +} diff --git a/libraries/NEMU/src/device/audio.c b/libraries/NEMU/src/device/audio.c new file mode 100644 index 0000000..ea2db0c --- /dev/null +++ b/libraries/NEMU/src/device/audio.c @@ -0,0 +1,72 @@ +#include +#include +#include + +enum { + reg_freq, + reg_channels, + reg_samples, + reg_sbuf_size, + reg_init, + reg_count, + nr_reg +}; + +static uint8_t *sbuf = NULL; +static uint32_t *audio_base = NULL; +#ifndef __ICS_EXPORT +static int tail = 0; +#endif + +static inline void audio_play(void *userdata, uint8_t *stream, int len) { +#ifndef __ICS_EXPORT + int nread = len; + int count = audio_base[reg_count]; + if (count < len) nread = count; + + if (nread + tail < CONFIG_SB_SIZE) { + memcpy(stream, sbuf + tail, nread); + tail += nread; + } else { + int first_cpy_len = CONFIG_SB_SIZE - tail; + memcpy(stream, sbuf + tail, first_cpy_len); + memcpy(stream + first_cpy_len, sbuf, nread - first_cpy_len); + tail = nread - first_cpy_len; + } + audio_base[reg_count] -= nread; + if (len > nread) memset(stream + nread, 0, len - nread); +#endif +} + +static void audio_io_handler(uint32_t offset, int len, bool is_write) { +#ifndef __ICS_EXPORT + if (offset == reg_init * sizeof(uint32_t) && len == 4 && is_write) { + SDL_AudioSpec s = {}; + s.freq = audio_base[reg_freq]; + s.format = AUDIO_S16SYS; + s.channels = audio_base[reg_channels]; + s.samples = audio_base[reg_samples]; + s.callback = audio_play; + s.userdata = NULL; + + tail = 0; + audio_base[reg_count] = 0; + SDL_InitSubSystem(SDL_INIT_AUDIO); + SDL_OpenAudio(&s, NULL); + SDL_PauseAudio(0); + } +#endif +} + +void init_audio() { + uint32_t space_size = sizeof(uint32_t) * nr_reg; + audio_base = (uint32_t *)new_space(space_size); + add_pio_map ("audio", CONFIG_AUDIO_CTL_PORT, audio_base, space_size, audio_io_handler); + add_mmio_map("audio", CONFIG_AUDIO_CTL_MMIO, audio_base, space_size, audio_io_handler); +#ifndef __ICS_EXPORT + audio_base[reg_sbuf_size] = CONFIG_SB_SIZE; +#endif + + sbuf = (uint8_t *)new_space(CONFIG_SB_SIZE); + add_mmio_map("audio-sbuf", CONFIG_SB_ADDR, sbuf, CONFIG_SB_SIZE, NULL); +} diff --git a/libraries/NEMU/src/device/device.c b/libraries/NEMU/src/device/device.c new file mode 100644 index 0000000..ca1e140 --- /dev/null +++ b/libraries/NEMU/src/device/device.c @@ -0,0 +1,70 @@ +#include +#include +#include +#include + +void init_serial(); +void init_uartlite(); +void init_timer(); +void init_alarm(); +void init_vga(); +void init_i8042(); +void init_audio(); +void init_disk(); +void init_sdcard(); + +void send_key(uint8_t, bool); +void vga_update_screen(); + +static int device_update_flag = false; + +static void set_device_update_flag() { + device_update_flag = true; +} + +void device_update() { + if (!device_update_flag) { + return; + } + device_update_flag = false; + IFDEF(CONFIG_HAS_VGA, vga_update_screen()); + + SDL_Event event; + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_QUIT: + nemu_state.state = NEMU_QUIT; + break; +#ifdef CONFIG_HAS_KEYBOARD + // If a key was pressed + case SDL_KEYDOWN: + case SDL_KEYUP: { + uint8_t k = event.key.keysym.scancode; + bool is_keydown = (event.key.type == SDL_KEYDOWN); + send_key(k, is_keydown); + break; + } +#endif + default: break; + } + } +} + +void sdl_clear_event_queue() { + SDL_Event event; + while (SDL_PollEvent(&event)); +} + +void init_device() { + IFDEF(CONFIG_HAS_SERIAL, init_serial()); + IFDEF(CONFIG_HAS_UARTLITE, init_uartlite()); + IFDEF(CONFIG_HAS_TIMER, init_timer()); + IFDEF(CONFIG_HAS_VGA, init_vga()); + IFDEF(CONFIG_HAS_KEYBOARD, init_i8042()); + IFDEF(CONFIG_HAS_AUDIO, init_audio()); + IFDEF(CONFIG_HAS_DISK, init_disk()); + IFDEF(CONFIG_HAS_SDCARD, init_sdcard()); + + add_alarm_handle(set_device_update_flag); + init_alarm(); +} diff --git a/libraries/NEMU/src/device/disk.c b/libraries/NEMU/src/device/disk.c new file mode 100644 index 0000000..33095b5 --- /dev/null +++ b/libraries/NEMU/src/device/disk.c @@ -0,0 +1,45 @@ +#include +#include +#include +#include + +enum { + SIZE, + CMD, + BUF, + START, + COUNT, + NR_REG +}; + +static uint32_t *disk_base = NULL; +static FILE *fp = NULL; + +static void disk_io_handler(uint32_t offset, int len, bool is_write) { +#ifndef __ICS_EXPORT + if (offset == CMD * sizeof(uint32_t) && len == 4 && is_write) { + assert(disk_base[CMD] == 0); + fseek(fp, disk_base[START] * 512, SEEK_SET); + int ret = fread(guest_to_host(disk_base[BUF]), disk_base[COUNT] * 512l, 1, fp); + assert(ret == 1); + } +#endif +} + +void init_disk() { + uint32_t space_size = sizeof(uint32_t) * NR_REG; + disk_base = (uint32_t *)new_space(space_size); + add_pio_map ("disk", CONFIG_DISK_CTL_PORT, disk_base, space_size, disk_io_handler); + add_mmio_map("disk", CONFIG_DISK_CTL_MMIO, disk_base, space_size, disk_io_handler); + + const char *path = CONFIG_DISK_IMG_PATH; + fp = fopen(path, "r"); + if (fp) { + fseek(fp, 0, SEEK_END); + disk_base[SIZE] = ftell(fp) / 512 + 1; + fseek(fp, 0, SEEK_SET); + } else { + Log("Can not open %s. Disable disk...", path); + disk_base[SIZE] = 0; + } +} diff --git a/libraries/NEMU/src/device/intr.c b/libraries/NEMU/src/device/intr.c new file mode 100644 index 0000000..71edfd7 --- /dev/null +++ b/libraries/NEMU/src/device/intr.c @@ -0,0 +1,7 @@ +#include + +void dev_raise_intr() { +#ifndef __ICS_EXPORT + cpu.INTR = true; +#endif +} diff --git a/libraries/NEMU/src/device/io/map.c b/libraries/NEMU/src/device/io/map.c new file mode 100644 index 0000000..d0b3ec2 --- /dev/null +++ b/libraries/NEMU/src/device/io/map.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include + +#define IO_SPACE_MAX (2 * 1024 * 1024) + +static uint8_t io_space[IO_SPACE_MAX] PG_ALIGN = {}; +static uint8_t *p_space = io_space; + +uint8_t* new_space(int size) { + uint8_t *p = p_space; + // page aligned; + size = (size + (PAGE_SIZE - 1)) & ~PAGE_MASK; + p_space += size; + assert(p_space - io_space < IO_SPACE_MAX); + return p; +} + +static inline void check_bound(IOMap *map, paddr_t addr) { + Assert(map != NULL && addr <= map->high && addr >= map->low, + "address (" FMT_PADDR ") is out of bound {%s} [" FMT_PADDR ", " FMT_PADDR "] at pc = " FMT_WORD, + addr, (map ? map->name : "???"), (map ? map->low : 0), (map ? map->high : 0), cpu.pc); +} + +static inline void invoke_callback(io_callback_t c, paddr_t offset, int len, bool is_write) { + if (c != NULL) { c(offset, len, is_write); } +} + +word_t map_read(paddr_t addr, int len, IOMap *map) { + assert(len >= 1 && len <= 8); + check_bound(map, addr); + paddr_t offset = addr - map->low; + invoke_callback(map->callback, offset, len, false); // prepare data to read + return host_read(map->space + offset, len); +} + +void map_write(paddr_t addr, int len, word_t data, IOMap *map) { + assert(len >= 1 && len <= 8); + check_bound(map, addr); + paddr_t offset = addr - map->low; + host_write(map->space + offset, len, data); + invoke_callback(map->callback, offset, len, true); +} diff --git a/libraries/NEMU/src/device/io/mmio.c b/libraries/NEMU/src/device/io/mmio.c new file mode 100644 index 0000000..1cd3265 --- /dev/null +++ b/libraries/NEMU/src/device/io/mmio.c @@ -0,0 +1,34 @@ +#include + +#define NR_MAP 16 + +static IOMap maps[NR_MAP] = {}; +static int nr_map = 0; + +static inline IOMap* fetch_mmio_map(paddr_t addr) { + int mapid = find_mapid_by_addr(maps, nr_map, addr); + return (mapid == -1 ? NULL : &maps[mapid]); +} + +/* device interface */ +void add_mmio_map(const char *name, paddr_t addr, void *space, uint32_t len, io_callback_t callback) { + assert(nr_map < NR_MAP); + maps[nr_map] = (IOMap){ .name = name, .low = addr, .high = addr + len - 1, + .space = space, .callback = callback }; + Log("Add mmio map '%s' at [" FMT_PADDR ", " FMT_PADDR "]", + maps[nr_map].name, maps[nr_map].low, maps[nr_map].high); + fflush(stdout); + + nr_map ++; +} + +/* bus interface */ +__attribute__((noinline)) +word_t mmio_read(paddr_t addr, int len) { + return map_read(addr, len, fetch_mmio_map(addr)); +} + +__attribute__((noinline)) +void mmio_write(paddr_t addr, int len, word_t data) { + map_write(addr, len, data, fetch_mmio_map(addr)); +} diff --git a/libraries/NEMU/src/device/io/port-io.c b/libraries/NEMU/src/device/io/port-io.c new file mode 100644 index 0000000..7663ddb --- /dev/null +++ b/libraries/NEMU/src/device/io/port-io.c @@ -0,0 +1,42 @@ +#include + +#define PORT_IO_SPACE_MAX 65535 + +#define NR_MAP 16 +static IOMap maps[NR_MAP] = {}; +static int nr_map = 0; + +/* device interface */ +void add_pio_map(const char *name, ioaddr_t addr, void *space, uint32_t len, io_callback_t callback) { + assert(nr_map < NR_MAP); + assert(addr + len <= PORT_IO_SPACE_MAX); + maps[nr_map] = (IOMap){ .name = name, .low = addr, .high = addr + len - 1, + .space = space, .callback = callback }; + Log("Add port-io map '%s' at [" FMT_PADDR ", " FMT_PADDR "]", + maps[nr_map].name, maps[nr_map].low, maps[nr_map].high); + + nr_map ++; +} + +/* CPU interface */ +uint32_t pio_read(ioaddr_t addr, int len) { + assert(addr + len - 1 < PORT_IO_SPACE_MAX); + int mapid = find_mapid_by_addr(maps, nr_map, addr); +#ifdef CONFIG_PA + assert(mapid != -1); +#else + if (mapid == -1) return 0xffffffff; +#endif + return map_read(addr, len, &maps[mapid]); +} + +void pio_write(ioaddr_t addr, int len, uint32_t data) { + assert(addr + len - 1 < PORT_IO_SPACE_MAX); + int mapid = find_mapid_by_addr(maps, nr_map, addr); +#ifdef CONFIG_PA + assert(mapid != -1); +#else + if (mapid == -1) return; +#endif + map_write(addr, len, data, &maps[mapid]); +} diff --git a/libraries/NEMU/src/device/keyboard.c b/libraries/NEMU/src/device/keyboard.c new file mode 100644 index 0000000..86b8e4f --- /dev/null +++ b/libraries/NEMU/src/device/keyboard.c @@ -0,0 +1,65 @@ +#include +#include +#include + +static uint32_t *i8042_data_port_base = NULL; + +// Note that this is not the standard +#define _KEYS(f) \ + f(ESCAPE) f(F1) f(F2) f(F3) f(F4) f(F5) f(F6) f(F7) f(F8) f(F9) f(F10) f(F11) f(F12) \ +f(GRAVE) f(1) f(2) f(3) f(4) f(5) f(6) f(7) f(8) f(9) f(0) f(MINUS) f(EQUALS) f(BACKSPACE) \ +f(TAB) f(Q) f(W) f(E) f(R) f(T) f(Y) f(U) f(I) f(O) f(P) f(LEFTBRACKET) f(RIGHTBRACKET) f(BACKSLASH) \ +f(CAPSLOCK) f(A) f(S) f(D) f(F) f(G) f(H) f(J) f(K) f(L) f(SEMICOLON) f(APOSTROPHE) f(RETURN) \ +f(LSHIFT) f(Z) f(X) f(C) f(V) f(B) f(N) f(M) f(COMMA) f(PERIOD) f(SLASH) f(RSHIFT) \ +f(LCTRL) f(APPLICATION) f(LALT) f(SPACE) f(RALT) f(RCTRL) \ +f(UP) f(DOWN) f(LEFT) f(RIGHT) f(INSERT) f(DELETE) f(HOME) f(END) f(PAGEUP) f(PAGEDOWN) + +#define _KEY_NAME(k) _KEY_##k, + +enum { + _KEY_NONE = 0, + MAP(_KEYS, _KEY_NAME) +}; + +#define SDL_KEYMAP(k) keymap[concat(SDL_SCANCODE_, k)] = concat(_KEY_, k); +static uint32_t keymap[256] = {}; + +static inline void init_keymap() { + MAP(_KEYS, SDL_KEYMAP) +} + +#define KEY_QUEUE_LEN 1024 +static int key_queue[KEY_QUEUE_LEN] = {}; +static int key_f = 0, key_r = 0; + +#define KEYDOWN_MASK 0x8000 + +void send_key(uint8_t scancode, bool is_keydown) { + if (nemu_state.state == NEMU_RUNNING && + keymap[scancode] != _KEY_NONE) { + uint32_t am_scancode = keymap[scancode] | (is_keydown ? KEYDOWN_MASK : 0); + key_queue[key_r] = am_scancode; + key_r = (key_r + 1) % KEY_QUEUE_LEN; + Assert(key_r != key_f, "key queue overflow!"); + } +} + +static void i8042_data_io_handler(uint32_t offset, int len, bool is_write) { + assert(!is_write); + assert(offset == 0); + if (key_f != key_r) { + i8042_data_port_base[0] = key_queue[key_f]; + key_f = (key_f + 1) % KEY_QUEUE_LEN; + } + else { + i8042_data_port_base[0] = _KEY_NONE; + } +} + +void init_i8042() { + i8042_data_port_base = (uint32_t *)new_space(4); + i8042_data_port_base[0] = _KEY_NONE; + add_pio_map ("keyboard", CONFIG_I8042_DATA_PORT, i8042_data_port_base, 4, i8042_data_io_handler); + add_mmio_map("keyboard", CONFIG_I8042_DATA_MMIO, i8042_data_port_base, 4, i8042_data_io_handler); + init_keymap(); +} diff --git a/libraries/NEMU/src/device/mmc.h b/libraries/NEMU/src/device/mmc.h new file mode 100644 index 0000000..7a68bb3 --- /dev/null +++ b/libraries/NEMU/src/device/mmc.h @@ -0,0 +1,439 @@ +/* + * Header for MultiMediaCard (MMC) + * + * Copyright 2002 Hewlett-Packard Company + * + * Use consistent with the GNU GPL is permitted, + * provided that this copyright notice is + * preserved in its entirety in all copies and derived works. + * + * HEWLETT-PACKARD COMPANY MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, + * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS + * FITNESS FOR ANY PARTICULAR PURPOSE. + * + * Many thanks to Alessandro Rubini and Jonathan Corbet! + * + * Based strongly on code by: + * + * Author: Yong-iL Joh + * + * Author: Andrew Christian + * 15 May 2002 + */ + +#ifndef LINUX_MMC_MMC_H +#define LINUX_MMC_MMC_H + +/* Standard MMC commands (4.1) type argument response */ + /* class 1 */ +#define MMC_GO_IDLE_STATE 0 /* bc */ +#define MMC_SEND_OP_COND 1 /* bcr [31:0] OCR R3 */ +#define MMC_ALL_SEND_CID 2 /* bcr R2 */ +#define MMC_SET_RELATIVE_ADDR 3 /* ac [31:16] RCA R1 */ +#define MMC_SET_DSR 4 /* bc [31:16] RCA */ +#define MMC_SLEEP_AWAKE 5 /* ac [31:16] RCA 15:flg R1b */ +#define MMC_SWITCH 6 /* ac [31:0] See below R1b */ +#define MMC_SELECT_CARD 7 /* ac [31:16] RCA R1 */ +#define MMC_SEND_EXT_CSD 8 /* adtc R1 */ +#define MMC_SEND_CSD 9 /* ac [31:16] RCA R2 */ +#define MMC_SEND_CID 10 /* ac [31:16] RCA R2 */ +#define MMC_READ_DAT_UNTIL_STOP 11 /* adtc [31:0] dadr R1 */ +#define MMC_STOP_TRANSMISSION 12 /* ac R1b */ +#define MMC_SEND_STATUS 13 /* ac [31:16] RCA R1 */ +#define MMC_BUS_TEST_R 14 /* adtc R1 */ +#define MMC_GO_INACTIVE_STATE 15 /* ac [31:16] RCA */ +#define MMC_BUS_TEST_W 19 /* adtc R1 */ +#define MMC_SPI_READ_OCR 58 /* spi spi_R3 */ +#define MMC_SPI_CRC_ON_OFF 59 /* spi [0:0] flag spi_R1 */ + + /* class 2 */ +#define MMC_SET_BLOCKLEN 16 /* ac [31:0] block len R1 */ +#define MMC_READ_SINGLE_BLOCK 17 /* adtc [31:0] data addr R1 */ +#define MMC_READ_MULTIPLE_BLOCK 18 /* adtc [31:0] data addr R1 */ +#define MMC_SEND_TUNING_BLOCK 19 /* adtc R1 */ +#define MMC_SEND_TUNING_BLOCK_HS200 21 /* adtc R1 */ + + /* class 3 */ +#define MMC_WRITE_DAT_UNTIL_STOP 20 /* adtc [31:0] data addr R1 */ + + /* class 4 */ +#define MMC_SET_BLOCK_COUNT 23 /* adtc [31:0] data addr R1 */ +#define MMC_WRITE_BLOCK 24 /* adtc [31:0] data addr R1 */ +#define MMC_WRITE_MULTIPLE_BLOCK 25 /* adtc R1 */ +#define MMC_PROGRAM_CID 26 /* adtc R1 */ +#define MMC_PROGRAM_CSD 27 /* adtc R1 */ + + /* class 6 */ +#define MMC_SET_WRITE_PROT 28 /* ac [31:0] data addr R1b */ +#define MMC_CLR_WRITE_PROT 29 /* ac [31:0] data addr R1b */ +#define MMC_SEND_WRITE_PROT 30 /* adtc [31:0] wpdata addr R1 */ + + /* class 5 */ +#define MMC_ERASE_GROUP_START 35 /* ac [31:0] data addr R1 */ +#define MMC_ERASE_GROUP_END 36 /* ac [31:0] data addr R1 */ +#define MMC_ERASE 38 /* ac R1b */ + + /* class 9 */ +#define MMC_FAST_IO 39 /* ac R4 */ +#define MMC_GO_IRQ_STATE 40 /* bcr R5 */ + + /* class 7 */ +#define MMC_LOCK_UNLOCK 42 /* adtc R1b */ + + /* class 8 */ +#define MMC_APP_CMD 55 /* ac [31:16] RCA R1 */ +#define MMC_GEN_CMD 56 /* adtc [0] RD/WR R1 */ + + /* class 11 */ +#define MMC_QUE_TASK_PARAMS 44 /* ac [20:16] task id R1 */ +#define MMC_QUE_TASK_ADDR 45 /* ac [31:0] data addr R1 */ +#define MMC_EXECUTE_READ_TASK 46 /* adtc [20:16] task id R1 */ +#define MMC_EXECUTE_WRITE_TASK 47 /* adtc [20:16] task id R1 */ +#define MMC_CMDQ_TASK_MGMT 48 /* ac [20:16] task id R1b */ + +//static inline bool mmc_op_multi(u32 opcode) +//{ +// return opcode == MMC_WRITE_MULTIPLE_BLOCK || +// opcode == MMC_READ_MULTIPLE_BLOCK; +//} + +/* + * MMC_SWITCH argument format: + * + * [31:26] Always 0 + * [25:24] Access Mode + * [23:16] Location of target Byte in EXT_CSD + * [15:08] Value Byte + * [07:03] Always 0 + * [02:00] Command Set + */ + +/* + MMC status in R1, for native mode (SPI bits are different) + Type + e : error bit + s : status bit + r : detected and set for the actual command response + x : detected and set during command execution. the host must poll + the card by sending status command in order to read these bits. + Clear condition + a : according to the card state + b : always related to the previous command. Reception of + a valid command will clear it (with a delay of one command) + c : clear by read + */ + +#define R1_OUT_OF_RANGE (1 << 31) /* er, c */ +#define R1_ADDRESS_ERROR (1 << 30) /* erx, c */ +#define R1_BLOCK_LEN_ERROR (1 << 29) /* er, c */ +#define R1_ERASE_SEQ_ERROR (1 << 28) /* er, c */ +#define R1_ERASE_PARAM (1 << 27) /* ex, c */ +#define R1_WP_VIOLATION (1 << 26) /* erx, c */ +#define R1_CARD_IS_LOCKED (1 << 25) /* sx, a */ +#define R1_LOCK_UNLOCK_FAILED (1 << 24) /* erx, c */ +#define R1_COM_CRC_ERROR (1 << 23) /* er, b */ +#define R1_ILLEGAL_COMMAND (1 << 22) /* er, b */ +#define R1_CARD_ECC_FAILED (1 << 21) /* ex, c */ +#define R1_CC_ERROR (1 << 20) /* erx, c */ +#define R1_ERROR (1 << 19) /* erx, c */ +#define R1_UNDERRUN (1 << 18) /* ex, c */ +#define R1_OVERRUN (1 << 17) /* ex, c */ +#define R1_CID_CSD_OVERWRITE (1 << 16) /* erx, c, CID/CSD overwrite */ +#define R1_WP_ERASE_SKIP (1 << 15) /* sx, c */ +#define R1_CARD_ECC_DISABLED (1 << 14) /* sx, a */ +#define R1_ERASE_RESET (1 << 13) /* sr, c */ +#define R1_STATUS(x) (x & 0xFFFFE000) +#define R1_CURRENT_STATE(x) ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */ +#define R1_READY_FOR_DATA (1 << 8) /* sx, a */ +#define R1_SWITCH_ERROR (1 << 7) /* sx, c */ +#define R1_EXCEPTION_EVENT (1 << 6) /* sr, a */ +#define R1_APP_CMD (1 << 5) /* sr, c */ + +#define R1_STATE_IDLE 0 +#define R1_STATE_READY 1 +#define R1_STATE_IDENT 2 +#define R1_STATE_STBY 3 +#define R1_STATE_TRAN 4 +#define R1_STATE_DATA 5 +#define R1_STATE_RCV 6 +#define R1_STATE_PRG 7 +#define R1_STATE_DIS 8 + +/* + * MMC/SD in SPI mode reports R1 status always, and R2 for SEND_STATUS + * R1 is the low order byte; R2 is the next highest byte, when present. + */ +#define R1_SPI_IDLE (1 << 0) +#define R1_SPI_ERASE_RESET (1 << 1) +#define R1_SPI_ILLEGAL_COMMAND (1 << 2) +#define R1_SPI_COM_CRC (1 << 3) +#define R1_SPI_ERASE_SEQ (1 << 4) +#define R1_SPI_ADDRESS (1 << 5) +#define R1_SPI_PARAMETER (1 << 6) +/* R1 bit 7 is always zero */ +#define R2_SPI_CARD_LOCKED (1 << 8) +#define R2_SPI_WP_ERASE_SKIP (1 << 9) /* or lock/unlock fail */ +#define R2_SPI_LOCK_UNLOCK_FAIL R2_SPI_WP_ERASE_SKIP +#define R2_SPI_ERROR (1 << 10) +#define R2_SPI_CC_ERROR (1 << 11) +#define R2_SPI_CARD_ECC_ERROR (1 << 12) +#define R2_SPI_WP_VIOLATION (1 << 13) +#define R2_SPI_ERASE_PARAM (1 << 14) +#define R2_SPI_OUT_OF_RANGE (1 << 15) /* or CSD overwrite */ +#define R2_SPI_CSD_OVERWRITE R2_SPI_OUT_OF_RANGE + +/* + * OCR bits are mostly in host.h + */ +#define MMC_CARD_BUSY 0x80000000 /* Card Power up status bit */ + +/* + * Card Command Classes (CCC) + */ +#define CCC_BASIC (1<<0) /* (0) Basic protocol functions */ + /* (CMD0,1,2,3,4,7,9,10,12,13,15) */ + /* (and for SPI, CMD58,59) */ +#define CCC_STREAM_READ (1<<1) /* (1) Stream read commands */ + /* (CMD11) */ +#define CCC_BLOCK_READ (1<<2) /* (2) Block read commands */ + /* (CMD16,17,18) */ +#define CCC_STREAM_WRITE (1<<3) /* (3) Stream write commands */ + /* (CMD20) */ +#define CCC_BLOCK_WRITE (1<<4) /* (4) Block write commands */ + /* (CMD16,24,25,26,27) */ +#define CCC_ERASE (1<<5) /* (5) Ability to erase blocks */ + /* (CMD32,33,34,35,36,37,38,39) */ +#define CCC_WRITE_PROT (1<<6) /* (6) Able to write protect blocks */ + /* (CMD28,29,30) */ +#define CCC_LOCK_CARD (1<<7) /* (7) Able to lock down card */ + /* (CMD16,CMD42) */ +#define CCC_APP_SPEC (1<<8) /* (8) Application specific */ + /* (CMD55,56,57,ACMD*) */ +#define CCC_IO_MODE (1<<9) /* (9) I/O mode */ + /* (CMD5,39,40,52,53) */ +#define CCC_SWITCH (1<<10) /* (10) High speed switch */ + /* (CMD6,34,35,36,37,50) */ + /* (11) Reserved */ + /* (CMD?) */ + +/* + * CSD field definitions + */ + +#define CSD_STRUCT_VER_1_0 0 /* Valid for system specification 1.0 - 1.2 */ +#define CSD_STRUCT_VER_1_1 1 /* Valid for system specification 1.4 - 2.2 */ +#define CSD_STRUCT_VER_1_2 2 /* Valid for system specification 3.1 - 3.2 - 3.31 - 4.0 - 4.1 */ +#define CSD_STRUCT_EXT_CSD 3 /* Version is coded in CSD_STRUCTURE in EXT_CSD */ + +#define CSD_SPEC_VER_0 0 /* Implements system specification 1.0 - 1.2 */ +#define CSD_SPEC_VER_1 1 /* Implements system specification 1.4 */ +#define CSD_SPEC_VER_2 2 /* Implements system specification 2.0 - 2.2 */ +#define CSD_SPEC_VER_3 3 /* Implements system specification 3.1 - 3.2 - 3.31 */ +#define CSD_SPEC_VER_4 4 /* Implements system specification 4.0 - 4.1 */ + +/* + * EXT_CSD fields + */ + +#define EXT_CSD_CMDQ_MODE_EN 15 /* R/W */ +#define EXT_CSD_FLUSH_CACHE 32 /* W */ +#define EXT_CSD_CACHE_CTRL 33 /* R/W */ +#define EXT_CSD_POWER_OFF_NOTIFICATION 34 /* R/W */ +#define EXT_CSD_PACKED_FAILURE_INDEX 35 /* RO */ +#define EXT_CSD_PACKED_CMD_STATUS 36 /* RO */ +#define EXT_CSD_EXP_EVENTS_STATUS 54 /* RO, 2 bytes */ +#define EXT_CSD_EXP_EVENTS_CTRL 56 /* R/W, 2 bytes */ +#define EXT_CSD_DATA_SECTOR_SIZE 61 /* R */ +#define EXT_CSD_GP_SIZE_MULT 143 /* R/W */ +#define EXT_CSD_PARTITION_SETTING_COMPLETED 155 /* R/W */ +#define EXT_CSD_PARTITION_ATTRIBUTE 156 /* R/W */ +#define EXT_CSD_PARTITION_SUPPORT 160 /* RO */ +#define EXT_CSD_HPI_MGMT 161 /* R/W */ +#define EXT_CSD_RST_N_FUNCTION 162 /* R/W */ +#define EXT_CSD_BKOPS_EN 163 /* R/W */ +#define EXT_CSD_BKOPS_START 164 /* W */ +#define EXT_CSD_SANITIZE_START 165 /* W */ +#define EXT_CSD_WR_REL_PARAM 166 /* RO */ +#define EXT_CSD_RPMB_MULT 168 /* RO */ +#define EXT_CSD_FW_CONFIG 169 /* R/W */ +#define EXT_CSD_BOOT_WP 173 /* R/W */ +#define EXT_CSD_ERASE_GROUP_DEF 175 /* R/W */ +#define EXT_CSD_PART_CONFIG 179 /* R/W */ +#define EXT_CSD_ERASED_MEM_CONT 181 /* RO */ +#define EXT_CSD_BUS_WIDTH 183 /* R/W */ +#define EXT_CSD_STROBE_SUPPORT 184 /* RO */ +#define EXT_CSD_HS_TIMING 185 /* R/W */ +#define EXT_CSD_POWER_CLASS 187 /* R/W */ +#define EXT_CSD_REV 192 /* RO */ +#define EXT_CSD_STRUCTURE 194 /* RO */ +#define EXT_CSD_CARD_TYPE 196 /* RO */ +#define EXT_CSD_DRIVER_STRENGTH 197 /* RO */ +#define EXT_CSD_OUT_OF_INTERRUPT_TIME 198 /* RO */ +#define EXT_CSD_PART_SWITCH_TIME 199 /* RO */ +#define EXT_CSD_PWR_CL_52_195 200 /* RO */ +#define EXT_CSD_PWR_CL_26_195 201 /* RO */ +#define EXT_CSD_PWR_CL_52_360 202 /* RO */ +#define EXT_CSD_PWR_CL_26_360 203 /* RO */ +#define EXT_CSD_SEC_CNT 212 /* RO, 4 bytes */ +#define EXT_CSD_S_A_TIMEOUT 217 /* RO */ +#define EXT_CSD_REL_WR_SEC_C 222 /* RO */ +#define EXT_CSD_HC_WP_GRP_SIZE 221 /* RO */ +#define EXT_CSD_ERASE_TIMEOUT_MULT 223 /* RO */ +#define EXT_CSD_HC_ERASE_GRP_SIZE 224 /* RO */ +#define EXT_CSD_BOOT_MULT 226 /* RO */ +#define EXT_CSD_SEC_TRIM_MULT 229 /* RO */ +#define EXT_CSD_SEC_ERASE_MULT 230 /* RO */ +#define EXT_CSD_SEC_FEATURE_SUPPORT 231 /* RO */ +#define EXT_CSD_TRIM_MULT 232 /* RO */ +#define EXT_CSD_PWR_CL_200_195 236 /* RO */ +#define EXT_CSD_PWR_CL_200_360 237 /* RO */ +#define EXT_CSD_PWR_CL_DDR_52_195 238 /* RO */ +#define EXT_CSD_PWR_CL_DDR_52_360 239 /* RO */ +#define EXT_CSD_BKOPS_STATUS 246 /* RO */ +#define EXT_CSD_POWER_OFF_LONG_TIME 247 /* RO */ +#define EXT_CSD_GENERIC_CMD6_TIME 248 /* RO */ +#define EXT_CSD_CACHE_SIZE 249 /* RO, 4 bytes */ +#define EXT_CSD_PWR_CL_DDR_200_360 253 /* RO */ +#define EXT_CSD_FIRMWARE_VERSION 254 /* RO, 8 bytes */ +#define EXT_CSD_PRE_EOL_INFO 267 /* RO */ +#define EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A 268 /* RO */ +#define EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B 269 /* RO */ +#define EXT_CSD_CMDQ_DEPTH 307 /* RO */ +#define EXT_CSD_CMDQ_SUPPORT 308 /* RO */ +#define EXT_CSD_SUPPORTED_MODE 493 /* RO */ +#define EXT_CSD_TAG_UNIT_SIZE 498 /* RO */ +#define EXT_CSD_DATA_TAG_SUPPORT 499 /* RO */ +#define EXT_CSD_MAX_PACKED_WRITES 500 /* RO */ +#define EXT_CSD_MAX_PACKED_READS 501 /* RO */ +#define EXT_CSD_BKOPS_SUPPORT 502 /* RO */ +#define EXT_CSD_HPI_FEATURES 503 /* RO */ + +/* + * EXT_CSD field definitions + */ + +#define EXT_CSD_WR_REL_PARAM_EN (1<<2) + +#define EXT_CSD_BOOT_WP_B_PWR_WP_DIS (0x40) +#define EXT_CSD_BOOT_WP_B_PERM_WP_DIS (0x10) +#define EXT_CSD_BOOT_WP_B_PERM_WP_EN (0x04) +#define EXT_CSD_BOOT_WP_B_PWR_WP_EN (0x01) + +#define EXT_CSD_PART_CONFIG_ACC_MASK (0x7) +#define EXT_CSD_PART_CONFIG_ACC_BOOT0 (0x1) +#define EXT_CSD_PART_CONFIG_ACC_RPMB (0x3) +#define EXT_CSD_PART_CONFIG_ACC_GP0 (0x4) + +#define EXT_CSD_PART_SETTING_COMPLETED (0x1) +#define EXT_CSD_PART_SUPPORT_PART_EN (0x1) + +#define EXT_CSD_CMD_SET_NORMAL (1<<0) +#define EXT_CSD_CMD_SET_SECURE (1<<1) +#define EXT_CSD_CMD_SET_CPSECURE (1<<2) + +#define EXT_CSD_CARD_TYPE_HS_26 (1<<0) /* Card can run at 26MHz */ +#define EXT_CSD_CARD_TYPE_HS_52 (1<<1) /* Card can run at 52MHz */ +#define EXT_CSD_CARD_TYPE_HS (EXT_CSD_CARD_TYPE_HS_26 | \ + EXT_CSD_CARD_TYPE_HS_52) +#define EXT_CSD_CARD_TYPE_DDR_1_8V (1<<2) /* Card can run at 52MHz */ + /* DDR mode @1.8V or 3V I/O */ +#define EXT_CSD_CARD_TYPE_DDR_1_2V (1<<3) /* Card can run at 52MHz */ + /* DDR mode @1.2V I/O */ +#define EXT_CSD_CARD_TYPE_DDR_52 (EXT_CSD_CARD_TYPE_DDR_1_8V \ + | EXT_CSD_CARD_TYPE_DDR_1_2V) +#define EXT_CSD_CARD_TYPE_HS200_1_8V (1<<4) /* Card can run at 200MHz */ +#define EXT_CSD_CARD_TYPE_HS200_1_2V (1<<5) /* Card can run at 200MHz */ + /* SDR mode @1.2V I/O */ +#define EXT_CSD_CARD_TYPE_HS200 (EXT_CSD_CARD_TYPE_HS200_1_8V | \ + EXT_CSD_CARD_TYPE_HS200_1_2V) +#define EXT_CSD_CARD_TYPE_HS400_1_8V (1<<6) /* Card can run at 200MHz DDR, 1.8V */ +#define EXT_CSD_CARD_TYPE_HS400_1_2V (1<<7) /* Card can run at 200MHz DDR, 1.2V */ +#define EXT_CSD_CARD_TYPE_HS400 (EXT_CSD_CARD_TYPE_HS400_1_8V | \ + EXT_CSD_CARD_TYPE_HS400_1_2V) +#define EXT_CSD_CARD_TYPE_HS400ES (1<<8) /* Card can run at HS400ES */ + +#define EXT_CSD_BUS_WIDTH_1 0 /* Card is in 1 bit mode */ +#define EXT_CSD_BUS_WIDTH_4 1 /* Card is in 4 bit mode */ +#define EXT_CSD_BUS_WIDTH_8 2 /* Card is in 8 bit mode */ +#define EXT_CSD_DDR_BUS_WIDTH_4 5 /* Card is in 4 bit DDR mode */ +#define EXT_CSD_DDR_BUS_WIDTH_8 6 /* Card is in 8 bit DDR mode */ +#define EXT_CSD_BUS_WIDTH_STROBE BIT(7) /* Enhanced strobe mode */ + +#define EXT_CSD_TIMING_BC 0 /* Backwards compatility */ +#define EXT_CSD_TIMING_HS 1 /* High speed */ +#define EXT_CSD_TIMING_HS200 2 /* HS200 */ +#define EXT_CSD_TIMING_HS400 3 /* HS400 */ +#define EXT_CSD_DRV_STR_SHIFT 4 /* Driver Strength shift */ + +#define EXT_CSD_SEC_ER_EN BIT(0) +#define EXT_CSD_SEC_BD_BLK_EN BIT(2) +#define EXT_CSD_SEC_GB_CL_EN BIT(4) +#define EXT_CSD_SEC_SANITIZE BIT(6) /* v4.5 only */ + +#define EXT_CSD_RST_N_EN_MASK 0x3 +#define EXT_CSD_RST_N_ENABLED 1 /* RST_n is enabled on card */ + +#define EXT_CSD_NO_POWER_NOTIFICATION 0 +#define EXT_CSD_POWER_ON 1 +#define EXT_CSD_POWER_OFF_SHORT 2 +#define EXT_CSD_POWER_OFF_LONG 3 + +#define EXT_CSD_PWR_CL_8BIT_MASK 0xF0 /* 8 bit PWR CLS */ +#define EXT_CSD_PWR_CL_4BIT_MASK 0x0F /* 8 bit PWR CLS */ +#define EXT_CSD_PWR_CL_8BIT_SHIFT 4 +#define EXT_CSD_PWR_CL_4BIT_SHIFT 0 + +#define EXT_CSD_PACKED_EVENT_EN BIT(3) + +/* + * EXCEPTION_EVENT_STATUS field + */ +#define EXT_CSD_URGENT_BKOPS BIT(0) +#define EXT_CSD_DYNCAP_NEEDED BIT(1) +#define EXT_CSD_SYSPOOL_EXHAUSTED BIT(2) +#define EXT_CSD_PACKED_FAILURE BIT(3) + +#define EXT_CSD_PACKED_GENERIC_ERROR BIT(0) +#define EXT_CSD_PACKED_INDEXED_ERROR BIT(1) + +/* + * BKOPS status level + */ +#define EXT_CSD_BKOPS_LEVEL_2 0x2 + +/* + * BKOPS modes + */ +#define EXT_CSD_MANUAL_BKOPS_MASK 0x01 +#define EXT_CSD_AUTO_BKOPS_MASK 0x02 + +/* + * Command Queue + */ +#define EXT_CSD_CMDQ_MODE_ENABLED BIT(0) +#define EXT_CSD_CMDQ_DEPTH_MASK GENMASK(4, 0) +#define EXT_CSD_CMDQ_SUPPORTED BIT(0) + +/* + * MMC_SWITCH access modes + */ +#define MMC_SWITCH_MODE_CMD_SET 0x00 /* Change the command set */ +#define MMC_SWITCH_MODE_SET_BITS 0x01 /* Set bits which are 1 in value */ +#define MMC_SWITCH_MODE_CLEAR_BITS 0x02 /* Clear bits which are 1 in value */ +#define MMC_SWITCH_MODE_WRITE_BYTE 0x03 /* Set target to value */ + +/* + * Erase/trim/discard + */ +#define MMC_ERASE_ARG 0x00000000 +#define MMC_SECURE_ERASE_ARG 0x80000000 +#define MMC_TRIM_ARG 0x00000001 +#define MMC_DISCARD_ARG 0x00000003 +#define MMC_SECURE_TRIM1_ARG 0x80000001 +#define MMC_SECURE_TRIM2_ARG 0x80008000 +#define MMC_SECURE_ARGS 0x80000000 +#define MMC_TRIM_ARGS 0x00008001 + +#define mmc_driver_type_mask(n) (1 << (n)) + +#endif /* LINUX_MMC_MMC_H */ diff --git a/libraries/NEMU/src/device/sdcard.c b/libraries/NEMU/src/device/sdcard.c new file mode 100644 index 0000000..45568db --- /dev/null +++ b/libraries/NEMU/src/device/sdcard.c @@ -0,0 +1,121 @@ +#include +#include "mmc.h" + +// http://www.files.e-shop.co.il/pdastore/Tech-mmc-samsung/SEC%20MMC%20SPEC%20ver09.pdf + +// see page 26 of the manual above +#define MEMORY_SIZE (16ull * 1024 * 1024 * 1024) // 16GB +#define READ_BL_LEN 15 +#define BLOCK_LEN (1 << READ_BL_LEN) +#define NR_BLOCK (MEMORY_SIZE / BLOCK_LEN) +#define C_SIZE_MULT 7 // only 3 bits +#define MULT (1 << (C_SIZE_MULT + 2)) +#define C_SIZE (NR_BLOCK / MULT - 1) + +// This is a simple hardware implementation of linux/drivers/mmc/host/bcm2835.c +// No DMA and IRQ is supported, so the driver must be modified to start PIO +// right after sending the actual read/write commands. + +enum { + SDCMD, SDARG, SDTOUT, SDCDIV, + SDRSP0, SDRSP1, SDRSP2, SDRSP3, + SDHSTS, __PAD0, __PAD1, __PAD2, + SDVDD, SDEDM, SDHCFG, SDHBCT, + SDDATA, __PAD10, __PAD11, __PAD12, + SDHBLC +}; + +static FILE *fp = NULL; +static uint32_t *base = NULL; +static uint32_t blkcnt = 0; +static long blk_addr = 0; +static uint32_t addr = 0; +static bool write_cmd = 0; +static bool read_ext_csd = false; + +static inline void prepare_rw(int is_write) { + blk_addr = base[SDARG]; + addr = 0; + if (fp) fseek(fp, blk_addr << 9, SEEK_SET); + write_cmd = is_write; +} + +static void sdcard_handle_cmd(int cmd) { + switch (cmd) { + case MMC_GO_IDLE_STATE: break; + case MMC_SEND_OP_COND: base[SDRSP0] = 0x80ff8000; break; + case MMC_ALL_SEND_CID: + base[SDRSP0] = 0x00000001; + base[SDRSP1] = 0x00000000; + base[SDRSP2] = 0x00000000; + base[SDRSP3] = 0x15000000; + break; + case 52: // ??? + break; + case MMC_SEND_CSD: + base[SDRSP0] = 0x92404001; + base[SDRSP1] = 0x124b97e3 | ((C_SIZE & 0x3) << 30); + base[SDRSP2] = 0x0f508000 | (C_SIZE >> 2) | (READ_BL_LEN << 16); + base[SDRSP3] = 0x9026012a; + break; + case MMC_SEND_EXT_CSD: read_ext_csd = true; addr = 0; break; + case MMC_SLEEP_AWAKE: break; + case MMC_APP_CMD: break; + case MMC_SET_RELATIVE_ADDR: break; + case MMC_SELECT_CARD: break; + case MMC_SET_BLOCK_COUNT: blkcnt = base[SDARG] & 0xffff; break; + case MMC_READ_MULTIPLE_BLOCK: prepare_rw(false); break; + case MMC_WRITE_MULTIPLE_BLOCK: prepare_rw(true); break; + case MMC_SEND_STATUS: base[SDRSP0] = base[SDRSP1] = base[SDRSP2] = base[SDRSP3] = 0; break; + case MMC_STOP_TRANSMISSION: break; + default: + panic("unhandled command = %d", cmd); + } +} + +static void sdcard_io_handler(uint32_t offset, int len, bool is_write) { + int idx = offset / 4; + switch (idx) { + case SDCMD: sdcard_handle_cmd(base[SDCMD] & 0x3f); break; + case SDARG: + case SDRSP0: + case SDRSP1: + case SDRSP2: + case SDRSP3: + break; + case SDDATA: + if (read_ext_csd) { + // See section 8.1 JEDEC Standard JED84-A441 + uint32_t data; + switch (addr) { + case 192: data = 2; break; // EXT_CSD_REV + case 212: data = MEMORY_SIZE / 512; break; + default: data = 0; + } + base[SDDATA] = data; + if (addr == 512 - 4) read_ext_csd = false; + } else if (fp) { + __attribute__((unused)) int ret; + if (!write_cmd) { ret = fread(&base[SDDATA], 4, 1, fp); } + else { ret = fwrite(&base[SDDATA], 4, 1, fp); } + } + addr += 4; + break; + default: + Log("offset = 0x%x(idx = %d), is_write = %d, data = 0x%x", offset, idx, is_write, base[idx]); + panic("unhandle offset = %d", offset); + } +} + +void init_sdcard() { + base = (uint32_t *)new_space(0x80); + add_mmio_map("sdhci", CONFIG_SDCARD_CTL_MMIO, base, 0x80, sdcard_io_handler); + + //base[SDEDM] = (8 << 4); // number of data in fifo + + Assert(C_SIZE < (1 << 12), "shoule be fit in 12 bits"); + + const char *img = CONFIG_SDCARD_IMG_PATH; + fp = fopen(img, "r+"); + if (fp == NULL) Log("Can not find sdcard image: %s", img); +} diff --git a/libraries/NEMU/src/device/serial.c b/libraries/NEMU/src/device/serial.c new file mode 100644 index 0000000..4fa5a3d --- /dev/null +++ b/libraries/NEMU/src/device/serial.c @@ -0,0 +1,132 @@ +#include +#include + +/* http://en.wikibooks.org/wiki/Serial_Programming/8250_UART_Programming */ +// NOTE: this is compatible to 16550 + +#define CH_OFFSET 0 +#define LSR_OFFSET 5 +#define LSR_TX_READY 0x20 +#define LSR_RX_READY 0x01 + +static uint8_t *serial_base = NULL; + +#ifdef CONFIG_SERIAL_INPUT_FIFO +#include +#include +#include +#include +#include + +#define QUEUE_SIZE 1024 +static char queue[QUEUE_SIZE] = {}; +static int f = 0, r = 0; +#define FIFO_PATH "/tmp/nemu-serial" +static int fifo_fd = 0; + +static void serial_enqueue(char ch) { + int next = (r + 1) % QUEUE_SIZE; + if (next != f) { + // not full + queue[r] = ch; + r = next; + } +} + +static char serial_dequeue() { + char ch = 0xff; + if (f != r) { + ch = queue[f]; + f = (f + 1) % QUEUE_SIZE; + } + return ch; +} + +static inline uint8_t serial_rx_ready_flag() { + static uint32_t last = 0; // unit: s + uint32_t now = get_time() / 1000000; + if (now > last) { + Log("now = %d", now); + last = now; + } + + if (f == r) { + char input[256]; + // First open in read only and read + int ret = read(fifo_fd, input, 256); + assert(ret < 256); + + if (ret > 0) { + int i; + for (i = 0; i < ret; i ++) { + serial_enqueue(input[i]); + } + } + } + return (f == r ? 0 : LSR_RX_READY); +} + +#define rt_thread_cmd "memtrace\n" +#define busybox_cmd "ls\n" \ + "cd /root\n" \ + "echo hello2\n" \ + "cd /root/benchmark\n" \ + "./stream\n" \ + "echo hello3\n" \ + "cd /root/redis\n" \ + "ls\n" \ + "ifconfig -a\n" \ + "ls\n" \ + "./redis-server\n" \ + +#define debian_cmd "root\n" \ + +static void preset_input() { + char buf[] = debian_cmd; + int i; + for (i = 0; i < strlen(buf); i ++) { + serial_enqueue(buf[i]); + } +} + +static void init_fifo() { + int ret = mkfifo(FIFO_PATH, 0666); + assert(ret == 0 || errno == EEXIST); + fifo_fd = open(FIFO_PATH, O_RDONLY | O_NONBLOCK); + assert(fifo_fd != -1); +} + +#endif + +static void serial_io_handler(uint32_t offset, int len, bool is_write) { + assert(len == 1); + switch (offset) { + /* We bind the serial port with the host stderr in NEMU. */ + case CH_OFFSET: + if (is_write) putc(serial_base[0], stderr); + else serial_base[0] = MUXDEF(CONFIG_SERIAL_INPUT_FIFO, serial_dequeue(), 0xff); + break; + case LSR_OFFSET: + if (!is_write) + serial_base[5] = LSR_TX_READY | MUXDEF(CONFIG_SERIAL_INPUT_FIFO, serial_rx_ready_flag(), 0); + break; + } +} + +void init_serial() { +#ifdef CONFIG_SERIAL_UARTLITE + void init_uartlite(); + init_uartlite(); + // to avoid unused-function warning + (void)serial_io_handler; +#else + serial_base = new_space(8); + add_pio_map ("serial", CONFIG_SERIAL_PORT, serial_base, 8, serial_io_handler); + add_mmio_map("serial", CONFIG_SERIAL_MMIO, serial_base, 8, serial_io_handler); + +#ifdef CONFIG_SERIAL_INPUT_FIFO + init_fifo(); + preset_input(); +#endif +#endif // CONFIG_SERIAL_UARTLITE +} diff --git a/libraries/NEMU/src/device/timer.c b/libraries/NEMU/src/device/timer.c new file mode 100644 index 0000000..22839b8 --- /dev/null +++ b/libraries/NEMU/src/device/timer.c @@ -0,0 +1,28 @@ +#include +#include +#include + +static uint32_t *rtc_port_base = NULL; + +static void rtc_io_handler(uint32_t offset, int len, bool is_write) { + assert(offset == 0 || offset == 4); + if (!is_write && offset == 4) { + uint64_t us = get_time(); + rtc_port_base[0] = (uint32_t)us; + rtc_port_base[1] = us >> 32; + } +} + +static void timer_intr() { + if (nemu_state.state == NEMU_RUNNING) { + extern void dev_raise_intr(); + dev_raise_intr(); + } +} + +void init_timer() { + rtc_port_base = (uint32_t *)new_space(8); + add_pio_map ("rtc", CONFIG_RTC_PORT, rtc_port_base, 8, rtc_io_handler); + add_mmio_map("rtc", CONFIG_RTC_MMIO, rtc_port_base, 8, rtc_io_handler); + add_alarm_handle(timer_intr); +} diff --git a/libraries/NEMU/src/device/uartlite.c b/libraries/NEMU/src/device/uartlite.c new file mode 100644 index 0000000..e955d1b --- /dev/null +++ b/libraries/NEMU/src/device/uartlite.c @@ -0,0 +1,126 @@ +#include +#include + +#define CH_OFFSET 0 +#define UARTLITE_RX_FIFO 0x0 +#define UARTLITE_TX_FIFO 0x4 +#define UARTLITE_STAT_REG 0x8 +#define UARTLITE_CTRL_REG 0xc + +#define UARTLITE_RST_FIFO 0x03 +#define UARTLITE_TX_FULL 0x08 +#define UARTLITE_RX_VALID 0x01 + +static uint8_t *serial_base = NULL; + +#ifdef CONFIG_UARTLITE_INPUT_FIFO +#include +#include +#include +#include +#include + +#define QUEUE_SIZE 1024 +static char queue[QUEUE_SIZE] = {}; +static int f = 0, r = 0; +#define FIFO_PATH "/tmp/nemu-serial" +static int fifo_fd = 0; + +static void serial_enqueue(char ch) { + int next = (r + 1) % QUEUE_SIZE; + if (next != f) { + // not full + queue[r] = ch; + r = next; + } +} + +static char serial_dequeue() { + char ch = 0xff; + if (f != r) { + ch = queue[f]; + f = (f + 1) % QUEUE_SIZE; + } + return ch; +} + +static inline uint8_t serial_rx_ready_flag() { + static uint32_t last = 0; // unit: s + uint32_t now = get_time() / 1000000; + if (now > last) { + Log("now = %d", now); + last = now; + } + + if (f == r) { + char input[256]; + // First open in read only and read + int ret = read(fifo_fd, input, 256); + assert(ret < 256); + + if (ret > 0) { + int i; + for (i = 0; i < ret; i ++) { + serial_enqueue(input[i]); + } + } + } + return (f == r ? 0 : LSR_RX_READY); +} + +#define rt_thread_cmd "memtrace\n" +#define busybox_cmd "ls\n" \ + "cd /root\n" \ + "echo hello2\n" \ + "cd /root/benchmark\n" \ + "./stream\n" \ + "echo hello3\n" \ + "cd /root/redis\n" \ + "ls\n" \ + "ifconfig -a\n" \ + "ls\n" \ + "./redis-server\n" \ + +#define debian_cmd "root\n" \ + +static void preset_input() { + char buf[] = debian_cmd; + int i; + for (i = 0; i < strlen(buf); i ++) { + serial_enqueue(buf[i]); + } +} + +static void init_fifo() { + int ret = mkfifo(FIFO_PATH, 0666); + assert(ret == 0 || errno == EEXIST); + fifo_fd = open(FIFO_PATH, O_RDONLY | O_NONBLOCK); + assert(fifo_fd != -1); +} + +#endif + +static void serial_io_handler(uint32_t offset, int len, bool is_write) { + assert(len == 1); + switch (offset) { + /* We bind the serial port with the host stdout in NEMU. */ + case UARTLITE_TX_FIFO: + if (is_write) putc(serial_base[UARTLITE_TX_FIFO], stderr); + else panic("Cannot read UARTLITE_TX_FIFO"); + break; + case UARTLITE_STAT_REG: + if (!is_write) serial_base[UARTLITE_STAT_REG] = 0x0; + break; + } +} + +void init_uartlite() { + serial_base = new_space(0xd); + add_pio_map("uartlite", CONFIG_UARTLITE_PORT, serial_base, 0xd, serial_io_handler); + add_mmio_map("uartlite", CONFIG_UARTLITE_MMIO, serial_base, 0xd, serial_io_handler); + +#ifdef CONFIG_UARTLITE_INPUT_FIFO + init_fifo(); + preset_input(); +#endif +} diff --git a/libraries/NEMU/src/device/vga.c b/libraries/NEMU/src/device/vga.c new file mode 100644 index 0000000..49cb614 --- /dev/null +++ b/libraries/NEMU/src/device/vga.c @@ -0,0 +1,60 @@ +#include +#include +#include + +#define SCREEN_W (MUXDEF(CONFIG_VGA_SIZE_800x600, 800, 400)) +#define SCREEN_H (MUXDEF(CONFIG_VGA_SIZE_800x600, 600, 300)) +#define SCREEN_SIZE ((SCREEN_H * SCREEN_W) * sizeof(uint32_t)) + +static uint32_t (*vmem) [SCREEN_W] = NULL; +static uint32_t *vgactl_port_base = NULL; + +#ifdef CONFIG_VGA_SHOW_SCREEN +static SDL_Renderer *renderer = NULL; +static SDL_Texture *texture = NULL; + +static inline void init_screen() { + SDL_Window *window = NULL; + char title[128]; + sprintf(title, "%s-NEMU", str(__ISA__)); + SDL_Init(SDL_INIT_VIDEO); + SDL_CreateWindowAndRenderer( + SCREEN_W * (MUXDEF(CONFIG_VGA_SIZE_400x300, 2, 1)), + SCREEN_H * (MUXDEF(CONFIG_VGA_SIZE_400x300, 2, 1)), + 0, &window, &renderer); + SDL_SetWindowTitle(window, title); + texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, + SDL_TEXTUREACCESS_STATIC, SCREEN_W, SCREEN_H); +} + +static inline void update_screen() { + SDL_UpdateTexture(texture, NULL, vmem, SCREEN_W * sizeof(vmem[0][0])); + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, texture, NULL, NULL); + SDL_RenderPresent(renderer); +} +#endif + +void vga_update_screen() { +#ifdef __ICS_EXPORT + // TODO: call `update_screen()` when the sync register is non-zero, + // then zero out the sync register +#else + if (vgactl_port_base[1]) { + IFDEF(CONFIG_VGA_SHOW_SCREEN, update_screen()); + vgactl_port_base[1] = 0; + } +#endif +} + +void init_vga() { + IFDEF(CONFIG_VGA_SHOW_SCREEN, init_screen()); + + vgactl_port_base = (uint32_t *)new_space(8); + vgactl_port_base[0] = ((SCREEN_W) << 16) | (SCREEN_H); + add_pio_map ("screen", CONFIG_VGA_CTL_PORT, vgactl_port_base, 8, NULL); + add_mmio_map("screen", CONFIG_VGA_CTL_MMIO, vgactl_port_base, 8, NULL); + + vmem = (uint32_t (*)[SCREEN_W])new_space(SCREEN_SIZE); + add_mmio_map("vmem", CONFIG_FB_ADDR, vmem, SCREEN_SIZE, NULL); +} diff --git a/libraries/NEMU/src/engine/interpreter/c_op.h b/libraries/NEMU/src/engine/interpreter/c_op.h new file mode 100644 index 0000000..486651b --- /dev/null +++ b/libraries/NEMU/src/engine/interpreter/c_op.h @@ -0,0 +1,63 @@ +#ifndef __C_OP_H__ +#define __C_OP_H__ + +#include + +#define c_shift_mask MUXDEF(CONFIG_ISA64, 0x3f, 0x1f) + +#define c_add(a, b) ((a) + (b)) +#define c_sub(a, b) ((a) - (b)) +#define c_and(a, b) ((a) & (b)) +#define c_or(a, b) ((a) | (b)) +#define c_xor(a, b) ((a) ^ (b)) +#define c_shl(a, b) ((a) << ((b) & c_shift_mask)) +#define c_shr(a, b) ((a) >> ((b) & c_shift_mask)) +#define c_sar(a, b) ((sword_t)(a) >> ((b) & c_shift_mask)) + +#ifdef CONFIG_ISA64 +#define c_sext32to64(a) ((int64_t)(int32_t)(a)) +#define c_addw(a, b) c_sext32to64((a) + (b)) +#define c_subw(a, b) c_sext32to64((a) - (b)) +#define c_shlw(a, b) c_sext32to64((uint32_t)(a) << ((b) & 0x1f)) +#define c_shrw(a, b) c_sext32to64((uint32_t)(a) >> ((b) & 0x1f)) +#define c_sarw(a, b) c_sext32to64(( int32_t)(a) >> ((b) & 0x1f)) +#endif + +#define c_mulu_lo(a, b) ((a) * (b)) +#ifdef CONFIG_ISA64 +# define c_mulu_hi(a, b) (((__uint128_t)(a) * (__uint128_t)(b)) >> 64) +# define c_muls_hi(a, b) (((__int128_t)(sword_t)(a) * (__int128_t)(sword_t)(b)) >> 64) +# define c_mulw(a, b) c_sext32to64((a) * (b)) +# define c_divw(a, b) c_sext32to64(( int32_t)(a) / ( int32_t)(b)) +# define c_divuw(a, b) c_sext32to64((uint32_t)(a) / (uint32_t)(b)) +# define c_remw(a, b) c_sext32to64(( int32_t)(a) % ( int32_t)(b)) +# define c_remuw(a, b) c_sext32to64((uint32_t)(a) % (uint32_t)(b)) +#else +#define c_mulu_hi(a, b) (((uint64_t)(a) * (uint64_t)(b)) >> 32) +#define c_muls_hi(a, b) (((int64_t)(sword_t)(a) * (int64_t)(sword_t)(b)) >> 32) +#endif + +#define c_divu_q(a, b) ((a) / (b)) +#define c_divu_r(a, b) ((a) % (b)) +#define c_divs_q(a, b) ((sword_t)(a) / (sword_t)(b)) +#define c_divs_r(a, b) ((sword_t)(a) % (sword_t)(b)) + +static inline bool interpret_relop(uint32_t relop, const rtlreg_t src1, const rtlreg_t src2) { + switch (relop) { + case RELOP_FALSE: return false; + case RELOP_TRUE: return true; + case RELOP_EQ: return src1 == src2; + case RELOP_NE: return src1 != src2; + case RELOP_LT: return (sword_t)src1 < (sword_t)src2; + case RELOP_LE: return (sword_t)src1 <= (sword_t)src2; + case RELOP_GT: return (sword_t)src1 > (sword_t)src2; + case RELOP_GE: return (sword_t)src1 >= (sword_t)src2; + case RELOP_LTU: return src1 < src2; + case RELOP_LEU: return src1 <= src2; + case RELOP_GTU: return src1 > src2; + case RELOP_GEU: return src1 >= src2; + default: panic("unsupport relop = %d", relop); + } +} + +#endif diff --git a/libraries/NEMU/src/engine/interpreter/fp.c b/libraries/NEMU/src/engine/interpreter/fp.c new file mode 100644 index 0000000..079393f --- /dev/null +++ b/libraries/NEMU/src/engine/interpreter/fp.c @@ -0,0 +1,116 @@ +#include +#include MUXDEF(CONFIG_FPU_SOFT, "softfloat-fp.h", "host-fp.h") + +#define BOX_MASK 0xFFFFFFFF00000000 + +static inline rtlreg_t unbox(rtlreg_t r) { + return MUXDEF(CONFIG_FPU_SOFT, (r & BOX_MASK) == BOX_MASK, true) + ? (r & ~BOX_MASK) : defaultNaNF32UI; +} + +static inline float32_t rtlToF32(rtlreg_t r) { + float32_t f = { .v = (uint32_t)unbox(r) }; + return f; +} + +static inline float64_t rtlToF64(rtlreg_t r) { + float64_t f = { .v = r }; + return f; +} + +uint32_t isa_fp_get_rm(Decode *s); +void isa_fp_set_ex(uint32_t ex); +void isa_fp_csr_check(); + +def_rtl(fpcall, rtlreg_t *dest, const rtlreg_t *src1, const rtlreg_t *src2, uint32_t cmd) { + uint32_t w = FPCALL_W(cmd); + uint32_t op = FPCALL_OP(cmd); + isa_fp_csr_check(); + if (op < FPCALL_NEED_RM) { + static uint32_t last_rm = -1; + uint32_t rm = isa_fp_get_rm(s); + if (unlikely(rm != last_rm)) { + fp_set_rm(rm); + last_rm = rm; + } + } + + if (w == FPCALL_W32) { + float32_t fsrc1 = rtlToF32(*src1); + float32_t fsrc2 = rtlToF32(*src2); + switch (op) { + case FPCALL_ADD: *dest = f32_add(fsrc1, fsrc2).v; break; + case FPCALL_SUB: *dest = f32_sub(fsrc1, fsrc2).v; break; + case FPCALL_MUL: *dest = f32_mul(fsrc1, fsrc2).v; break; + case FPCALL_DIV: *dest = f32_div(fsrc1, fsrc2).v; break; + case FPCALL_MIN: *dest = f32_min(fsrc1, fsrc2).v; break; + case FPCALL_MAX: *dest = f32_max(fsrc1, fsrc2).v; break; + + case FPCALL_SQRT: *dest = f32_sqrt(fsrc1).v; break; + + case FPCALL_MADD: *dest = f32_mulAdd(fsrc1, fsrc2, rtlToF32(*dest)).v; break; + + case FPCALL_LE: *dest = f32_le(fsrc1, fsrc2); break; + case FPCALL_LT: *dest = f32_lt(fsrc1, fsrc2); break; + case FPCALL_EQ: *dest = f32_eq(fsrc1, fsrc2); break; + + case FPCALL_I32ToF: *dest = i32_to_f32 (*src1).v; break; + case FPCALL_U32ToF: *dest = ui32_to_f32(*src1).v; break; + case FPCALL_I64ToF: *dest = i64_to_f32 (*src1).v; break; + case FPCALL_U64ToF: *dest = ui64_to_f32(*src1).v; break; + + case FPCALL_FToI32: *dest = my_f32_to_i32 (fsrc1); break; + case FPCALL_FToU32: *dest = my_f32_to_ui32(fsrc1); break; + case FPCALL_FToI64: *dest = my_f32_to_i64 (fsrc1); break; + case FPCALL_FToU64: *dest = my_f32_to_ui64(fsrc1); break; + default: panic("op = %d not supported", op); + } + } else if (w == FPCALL_W64) { + float64_t fsrc1 = rtlToF64(*src1); + float64_t fsrc2 = rtlToF64(*src2); + switch (op) { + case FPCALL_ADD: *dest = f64_add(fsrc1, fsrc2).v; break; + case FPCALL_SUB: *dest = f64_sub(fsrc1, fsrc2).v; break; + case FPCALL_MUL: *dest = f64_mul(fsrc1, fsrc2).v; break; + case FPCALL_DIV: *dest = f64_div(fsrc1, fsrc2).v; break; + case FPCALL_MAX: *dest = f64_max(fsrc1, fsrc2).v; break; + case FPCALL_MIN: *dest = f64_min(fsrc1, fsrc2).v; break; + + case FPCALL_SQRT: *dest = f64_sqrt(fsrc1).v; break; + + case FPCALL_MADD: *dest = f64_mulAdd(fsrc1, fsrc2, rtlToF64(*dest)).v; break; + + case FPCALL_LE: *dest = f64_le(fsrc1, fsrc2); break; + case FPCALL_LT: *dest = f64_lt(fsrc1, fsrc2); break; + case FPCALL_EQ: *dest = f64_eq(fsrc1, fsrc2); break; + + case FPCALL_I32ToF: *dest = i32_to_f64 (*src1).v; break; + case FPCALL_U32ToF: *dest = ui32_to_f64(*src1).v; break; + case FPCALL_I64ToF: *dest = i64_to_f64 (*src1).v; break; + case FPCALL_U64ToF: *dest = ui64_to_f64(*src1).v; break; + + case FPCALL_FToI32: *dest = my_f64_to_i32 (fsrc1); break; + case FPCALL_FToU32: *dest = my_f64_to_ui32(fsrc1); break; + case FPCALL_FToI64: *dest = my_f64_to_i64 (fsrc1); break; + case FPCALL_FToU64: *dest = my_f64_to_ui64(fsrc1); break; + + case FPCALL_F32ToF64: *dest = f32_to_f64(rtlToF32(*src1)).v; break; + case FPCALL_F64ToF32: *dest = f64_to_f32(fsrc1).v; break; + default: panic("op = %d not supported", op); + } + } + + uint32_t ex = fp_get_exception(); + if (ex) { + isa_fp_set_ex(ex); + fp_clear_exception(); + } +} + +def_rtl(fclass, rtlreg_t *fdest, rtlreg_t *src, int width) { + if (width == FPCALL_W32) { + *fdest = f32_classify(rtlToF32(*src)); + } else if (width == FPCALL_W64) { + *fdest = f64_classify(rtlToF64(*src)); + } else assert(0); +} diff --git a/libraries/NEMU/src/engine/interpreter/host-fp.h b/libraries/NEMU/src/engine/interpreter/host-fp.h new file mode 100644 index 0000000..25ac7c7 --- /dev/null +++ b/libraries/NEMU/src/engine/interpreter/host-fp.h @@ -0,0 +1,100 @@ +#ifndef __HOSTFP_H__ +#include +#include +#include + +#define defaultNaNF32UI 0x7FC00000 + +typedef union { uint32_t v; float f; } float32_t; +static inline float32_t float32(float f) { float32_t r = { .f = f }; return r; } + +static inline float32_t f32_add(float32_t a, float32_t b) { return float32(a.f + b.f); } +static inline float32_t f32_sub(float32_t a, float32_t b) { return float32(a.f - b.f); } +static inline float32_t f32_mul(float32_t a, float32_t b) { return float32(a.f * b.f); } +static inline float32_t f32_div(float32_t a, float32_t b) { return float32(a.f / b.f); } +static inline float32_t f32_sqrt(float32_t a) { return float32(sqrtf(a.f)); } +static inline float32_t f32_mulAdd(float32_t a, float32_t b, + float32_t c) { return float32(fmaf(a.f, b.f, c.f)); } +static inline float32_t f32_min(float32_t a, float32_t b) { return float32(a.f < b.f ? a.f : b.f); } +static inline float32_t f32_max(float32_t a, float32_t b) { return float32(a.f > b.f ? a.f : b.f); } +static inline bool f32_le(float32_t a, float32_t b) { return a.f <= b.f; } +static inline bool f32_lt(float32_t a, float32_t b) { return a.f < b.f; } +static inline bool f32_eq(float32_t a, float32_t b) { return a.f == b.f; } +static inline float32_t i32_to_f32 (rtlreg_t a) { return float32((int32_t)a); } +static inline float32_t ui32_to_f32(rtlreg_t a) { return float32((uint32_t)a); } +static inline float32_t i64_to_f32 (rtlreg_t a) { return float32((int64_t)a); } +static inline float32_t ui64_to_f32(rtlreg_t a) { return float32((uint64_t)a); } +static inline int32_t my_f32_to_i32 (float32_t a) { return llrintf(a.f); } +static inline uint32_t my_f32_to_ui32(float32_t a) { return llrintf(a.f); } +static inline int64_t my_f32_to_i64 (float32_t a) { return llrintf(a.f); } +static inline uint64_t my_f32_to_ui64(float32_t a) { return llrintf(a.f); } + + +typedef union { uint64_t v; double f; } float64_t; +static inline float64_t float64(double f) { float64_t r = { .f = f }; return r; } + +static inline float64_t f64_add(float64_t a, float64_t b) { return float64(a.f + b.f); } +static inline float64_t f64_sub(float64_t a, float64_t b) { return float64(a.f - b.f); } +static inline float64_t f64_mul(float64_t a, float64_t b) { return float64(a.f * b.f); } +static inline float64_t f64_div(float64_t a, float64_t b) { return float64(a.f / b.f); } +static inline float64_t f64_sqrt(float64_t a) { return float64(sqrt(a.f)); } +static inline float64_t f64_mulAdd(float64_t a, float64_t b, + float64_t c) { return float64(fma(a.f, b.f, c.f)); } +static inline float64_t f64_min(float64_t a, float64_t b) { return float64(a.f < b.f ? a.f : b.f); } +static inline float64_t f64_max(float64_t a, float64_t b) { return float64(a.f > b.f ? a.f : b.f); } +static inline bool f64_le(float64_t a, float64_t b) { return a.f <= b.f; } +static inline bool f64_lt(float64_t a, float64_t b) { return a.f < b.f; } +static inline bool f64_eq(float64_t a, float64_t b) { return a.f == b.f; } +static inline float64_t i32_to_f64 (rtlreg_t a) { return float64((int32_t)a); } +static inline float64_t ui32_to_f64(rtlreg_t a) { return float64((uint32_t)a); } +static inline float64_t i64_to_f64 (rtlreg_t a) { return float64((int64_t)a); } +static inline float64_t ui64_to_f64(rtlreg_t a) { return float64((uint64_t)a); } +static inline int32_t my_f64_to_i32 (float64_t a) { return llrint(a.f); } +static inline uint32_t my_f64_to_ui32(float64_t a) { return llrint(a.f); } +static inline int64_t my_f64_to_i64 (float64_t a) { return llrint(a.f); } +static inline uint64_t my_f64_to_ui64(float64_t a) { return llrint(a.f); } + +static inline float64_t f32_to_f64(float32_t a) { return float64(a.f); } +static inline float32_t f64_to_f32(float64_t a) { return float32(a.f); } + + +static inline void fp_set_rm(int rm) { + switch (rm) { + case FPCALL_RM_RNE: rm = FE_TONEAREST; break; + case FPCALL_RM_RTZ: rm = FE_TOWARDZERO; break; + case FPCALL_RM_RDN: rm = FE_DOWNWARD; break; + case FPCALL_RM_RUP: rm = FE_UPWARD; break; + case FPCALL_RM_RMM: rm = FE_TONEAREST; break; // x86 does not support RMM + default: assert(0); + } + fesetround(rm); +} + +static inline uint32_t fp_get_exception() { + uint32_t ex = 0; +#if 0 + uint32_t host_ex = fetestexcept(FE_ALL_EXCEPT); + if (host_ex & FE_INEXACT ) ex |= FPCALL_EX_NX; + if (host_ex & FE_UNDERFLOW) ex |= FPCALL_EX_UF; + if (host_ex & FE_OVERFLOW ) ex |= FPCALL_EX_OF; + if (host_ex & FE_DIVBYZERO) ex |= FPCALL_EX_DZ; + if (host_ex & FE_INVALID ) ex |= FPCALL_EX_NV; +#endif + return ex; +} + +static inline void fp_clear_exception() { + feclearexcept(FE_ALL_EXCEPT); +} + +uint_fast16_t f32_classify( float32_t a ) +{ + panic("host-fp does not support f32_classify"); +} + +uint_fast16_t f64_classify( float64_t a ) +{ + panic("host-fp does not support f64_classify"); +} + +#endif diff --git a/libraries/NEMU/src/engine/interpreter/hostcall.c b/libraries/NEMU/src/engine/interpreter/hostcall.c new file mode 100644 index 0000000..616bc91 --- /dev/null +++ b/libraries/NEMU/src/engine/interpreter/hostcall.c @@ -0,0 +1,60 @@ +#include +#include +#include +#include + +uint32_t pio_read(ioaddr_t addr, int len); +void pio_write(ioaddr_t addr, int len, uint32_t data); + +void set_nemu_state(int state, vaddr_t pc, int halt_ret) { + nemu_state.state = state; + nemu_state.halt_pc = pc; + nemu_state.halt_ret = halt_ret; +} + +static inline void invalid_instr(vaddr_t thispc) { + uint32_t temp[2]; + vaddr_t pc = thispc; + temp[0] = instr_fetch(&pc, 4); + temp[1] = instr_fetch(&pc, 4); + + uint8_t *p = (uint8_t *)temp; + printf("invalid opcode(PC = " FMT_WORD "):\n" + "\t%02x %02x %02x %02x %02x %02x %02x %02x ...\n" + "\t%08x %08x...\n", + thispc, p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], temp[0], temp[1]); + + printf("There are two cases which will trigger this unexpected exception:\n" + "1. The instruction at PC = " FMT_WORD " is not implemented.\n" + "2. Something is implemented incorrectly.\n", thispc); + printf("Find this PC(" FMT_WORD ") in the disassembling result to distinguish which case it is.\n\n", thispc); + printf("\33[1;31mIf it is the first case, see\n%s\nfor more details.\n\nIf it is the second case, remember:\n" + "* The machine is always right!\n" + "* Every line of untested code is always wrong!\33[0m\n\n", isa_logo); + + set_nemu_state(NEMU_ABORT, thispc, -1); +} + +def_rtl(fpcall, rtlreg_t *dest, const rtlreg_t *src1, const rtlreg_t *src2, uint32_t cmd); + +def_rtl(hostcall, uint32_t id, rtlreg_t *dest, const rtlreg_t *src1, + const rtlreg_t *src2, word_t imm) { + switch (id) { + case HOSTCALL_EXIT: + difftest_skip_ref(); + set_nemu_state(NEMU_END, s->pc, *src1); + break; + case HOSTCALL_INV: invalid_instr(s->pc); break; + case HOSTCALL_FP: rtl_fpcall(s, dest, src1, src2, imm); break; +#ifdef CONFIG_DEVICE + case HOSTCALL_PIO: { + int width = imm & 0xf; + bool is_in = ((imm & ~0xf) != 0); + if (is_in) *dest = pio_read(*src1, width); + else pio_write(*dest, width, *src1); + break; + } +#endif + default: isa_hostcall(id, dest, src1, src2, imm); break; + } +} diff --git a/libraries/NEMU/src/engine/interpreter/init.c b/libraries/NEMU/src/engine/interpreter/init.c new file mode 100644 index 0000000..c82db36 --- /dev/null +++ b/libraries/NEMU/src/engine/interpreter/init.c @@ -0,0 +1,10 @@ +#include + +#ifndef CONFIG_SHARE +void ui_mainloop(); + +void engine_start() { + /* Receive commands from user. */ + ui_mainloop(); +} +#endif diff --git a/libraries/NEMU/src/engine/interpreter/rtl-basic.h b/libraries/NEMU/src/engine/interpreter/rtl-basic.h new file mode 100644 index 0000000..766dbd4 --- /dev/null +++ b/libraries/NEMU/src/engine/interpreter/rtl-basic.h @@ -0,0 +1,163 @@ +#ifndef __RTL_BASIC_H__ +#define __RTL_BASIC_H__ + +#include "c_op.h" +#include + +/* RTL basic instructions */ + +#define def_rtl_compute_reg(name) \ + static inline def_rtl(name, rtlreg_t* dest, const rtlreg_t* src1, const rtlreg_t* src2) { \ + *dest = concat(c_, name) (*src1, *src2); \ + } + +#define def_rtl_compute_imm(name) \ + static inline def_rtl(name ## i, rtlreg_t* dest, const rtlreg_t* src1, const sword_t imm) { \ + *dest = concat(c_, name) (*src1, imm); \ + } + +#define def_rtl_compute_reg_imm(name) \ + def_rtl_compute_reg(name) \ + def_rtl_compute_imm(name) \ + +// compute + +def_rtl_compute_reg_imm(add) +def_rtl_compute_reg_imm(sub) +def_rtl_compute_reg_imm(and) +def_rtl_compute_reg_imm(or) +def_rtl_compute_reg_imm(xor) +def_rtl_compute_reg_imm(shl) +def_rtl_compute_reg_imm(shr) +def_rtl_compute_reg_imm(sar) + +#ifdef CONFIG_ISA64 +def_rtl_compute_reg_imm(addw) +def_rtl_compute_reg_imm(subw) +def_rtl_compute_reg_imm(shlw) +def_rtl_compute_reg_imm(shrw) +def_rtl_compute_reg_imm(sarw) +#define rtl_addiw rtl_addwi +#define rtl_shliw rtl_shlwi +#define rtl_shriw rtl_shrwi +#define rtl_sariw rtl_sarwi +#endif + +static inline def_rtl(setrelop, uint32_t relop, rtlreg_t *dest, + const rtlreg_t *src1, const rtlreg_t *src2) { + *dest = interpret_relop(relop, *src1, *src2); +} + +static inline def_rtl(setrelopi, uint32_t relop, rtlreg_t *dest, + const rtlreg_t *src1, sword_t imm) { + *dest = interpret_relop(relop, *src1, imm); +} + +// mul/div + +def_rtl_compute_reg(mulu_lo) +def_rtl_compute_reg(mulu_hi) +def_rtl_compute_reg(muls_hi) +def_rtl_compute_reg(divu_q) +def_rtl_compute_reg(divu_r) +def_rtl_compute_reg(divs_q) +def_rtl_compute_reg(divs_r) + +#ifdef CONFIG_ISA64 +def_rtl_compute_reg(mulw) +def_rtl_compute_reg(divw) +def_rtl_compute_reg(divuw) +def_rtl_compute_reg(remw) +def_rtl_compute_reg(remuw) +#endif + +static inline def_rtl(div64u_q, rtlreg_t* dest, + const rtlreg_t* src1_hi, const rtlreg_t* src1_lo, const rtlreg_t* src2) { + uint64_t dividend = ((uint64_t)(*src1_hi) << 32) | (*src1_lo); + uint32_t divisor = (*src2); + *dest = dividend / divisor; +} + +static inline def_rtl(div64u_r, rtlreg_t* dest, + const rtlreg_t* src1_hi, const rtlreg_t* src1_lo, const rtlreg_t* src2) { + uint64_t dividend = ((uint64_t)(*src1_hi) << 32) | (*src1_lo); + uint32_t divisor = (*src2); + *dest = dividend % divisor; +} + +static inline def_rtl(div64s_q, rtlreg_t* dest, + const rtlreg_t* src1_hi, const rtlreg_t* src1_lo, const rtlreg_t* src2) { + int64_t dividend = ((uint64_t)(*src1_hi) << 32) | (*src1_lo); + int32_t divisor = (*src2); + *dest = dividend / divisor; +} + +static inline def_rtl(div64s_r, rtlreg_t* dest, + const rtlreg_t* src1_hi, const rtlreg_t* src1_lo, const rtlreg_t* src2) { + int64_t dividend = ((uint64_t)(*src1_hi) << 32) | (*src1_lo); + int32_t divisor = (*src2); + *dest = dividend % divisor; +} + +// memory + +static inline def_rtl(lm, rtlreg_t *dest, const rtlreg_t* addr, + word_t offset, int len, int mmu_mode) { + *dest = vaddr_read(s, *addr + offset, len, mmu_mode); +} + +static inline def_rtl(sm, const rtlreg_t *src1, const rtlreg_t* addr, + word_t offset, int len, int mmu_mode) { + vaddr_write(s, *addr + offset, len, *src1, mmu_mode); +} + +static inline def_rtl(lms, rtlreg_t *dest, const rtlreg_t* addr, + word_t offset, int len, int mmu_mode) { + word_t val = vaddr_read(s, *addr + offset, len, mmu_mode); + switch (len) { + case 4: *dest = (sword_t)(int32_t)val; return; + case 1: *dest = (sword_t)( int8_t)val; return; + case 2: *dest = (sword_t)(int16_t)val; return; + IFDEF(CONFIG_ISA64, case 8: *dest = (sword_t)(int64_t)val; return); + IFDEF(CONFIG_RT_CHECK, default: assert(0)); + } +} + +static inline def_rtl(host_lm, rtlreg_t* dest, const void *addr, int len) { + switch (len) { + case 4: *dest = *(uint32_t *)addr; return; + case 1: *dest = *( uint8_t *)addr; return; + case 2: *dest = *(uint16_t *)addr; return; + IFDEF(CONFIG_ISA64, case 8: *dest = *(uint64_t *)addr; return); + IFDEF(CONFIG_RT_CHECK, default: assert(0)); + } +} + +static inline def_rtl(host_sm, void *addr, const rtlreg_t *src1, int len) { + switch (len) { + case 4: *(uint32_t *)addr = *src1; return; + case 1: *( uint8_t *)addr = *src1; return; + case 2: *(uint16_t *)addr = *src1; return; + IFDEF(CONFIG_ISA64, case 8: *(uint64_t *)addr = *src1; return); + IFDEF(CONFIG_RT_CHECK, default: assert(0)); + } +} + +// control + +static inline def_rtl(j, vaddr_t target) { + cpu.pc = target; +} + +static inline def_rtl(jr, rtlreg_t *target) { + cpu.pc = *target; +} + +static inline def_rtl(jrelop, uint32_t relop, + const rtlreg_t *src1, const rtlreg_t *src2, vaddr_t target) { + bool is_jmp = interpret_relop(relop, *src1, *src2); + rtl_j(s, (is_jmp ? target : s->snpc)); +} + +//#include "rtl-fp.h" +#endif diff --git a/libraries/NEMU/src/engine/interpreter/rtl-fp.h b/libraries/NEMU/src/engine/interpreter/rtl-fp.h new file mode 100644 index 0000000..8974a76 --- /dev/null +++ b/libraries/NEMU/src/engine/interpreter/rtl-fp.h @@ -0,0 +1,296 @@ +#ifndef __RTL_FP_H__ +#define __RTL_FP_H__ + +#ifndef __RTL_RTL_H__ +#error "Should be only included by " +#endif + +#include "c_op.h" +#include +#include +#include +#include +#include + + +#define F32_SIGN ((uint32_t)1 << 31) +#define F64_SIGN ((uint64_t)1 << 63) + +// ------------- helper functions ------------- + + +// ------------- rtl code ------------- + +#ifdef __ISA_x86__ +//set pfreg, it's a pointer to cpu.fpr in interpreter +static inline def_rtl(pfr,Operand* op,int i){ + uint8_t sti = (cpu.ftop+i)&0x7; + op->pfreg = &cpu.fpr[sti]; +} + +static inline void rtl_popftop(void){ + cpu.ftop++; + cpu.ftop &= 0x7; +} +static inline void rtl_pop2ftop(void){ + cpu.ftop+=2; + cpu.ftop &= 0x7; +} +static inline void rtl_pushftop(void){ + cpu.ftop--; + cpu.ftop &= 0x7; +} + +static inline def_rtl(lr_fsw, rtlreg_t* dest){ + *dest = cpu.fsw; +} +static inline def_rtl(sr_fsw, rtlreg_t* src){ + cpu.fsw = *src; +} +static inline def_rtl(lr_fcw, rtlreg_t* dest){ + *dest = cpu.fcw; +} +static inline def_rtl(sr_fcw, rtlreg_t* src){ + cpu.fcw = *src; + rtlreg_t rm = BITS(cpu.fcw,11,10); + switch (rm) + { + case 0: + softfloat_roundingMode = softfloat_round_near_even; + break; + case 1: + softfloat_roundingMode = softfloat_round_min; + break; + case 2: + softfloat_roundingMode = softfloat_round_max; + break; + case 3: + softfloat_roundingMode = softfloat_round_minMag; + break; + default: + assert(0); + break; + } +} + + +static inline def_rtl(class387, rtlreg_t *dest, uint64_t *src){ + float64_t f; + f.v = *src; + uint32_t res = f64_classify(f); + switch (res) + { + case 0x1://-inf + *dest = 0x700; + break; + case 0x2://-normal + *dest = 0x600; + break; + case 0x4://-subnormal + *dest = 0x4600; + break; + case 0x8://-0 + *dest = 0x4200; + break; + case 0x10://+0 + *dest = 0x4000; + break; + case 0x20://+subnormal + *dest = 0x4400; + break; + case 0x40://+normal + *dest = 0x400; + break; + case 0x80://+inf + *dest = 0x500; + break; + case 0x100://sNaN + case 0x200://qNaN + if(((bool) (*src>>63 ))){ + *dest = 0x300; + } + else{ + *dest = 0x100; + } + break; + default: + if(((bool) (*src>>63 ))){ + *dest = 0x200; + } + break; + } +} + +//load fpr from fpr pointer +static inline def_rtl(lfr, uint64_t* target_ptr, uint64_t* fptr){ + *target_ptr = *fptr; +} +//store fpr from fpr pointer +static inline def_rtl(sfr, uint64_t* fptr, uint64_t* fsrc){ + *fptr = *fsrc; +} + +enum{fconst_1=0,fconst_l2t, fconst_l2e, fconst_pi,fconst_lg2, fconst_ln2, fconst_z}; +static inline def_rtl(fld_const, uint64_t *fdest, int type){ + switch (type) { + case fconst_1: *fdest = 0x3ff0000000000000ull; break; + case fconst_z: *fdest = 0x0; break; + case fconst_l2t: *fdest = 0x400A934F0979A372ull; break; + case fconst_l2e: *fdest = 0x3FF71547652B82FEull; break; + case fconst_pi: *fdest = 0x400921FB54442D18ull; break; + case fconst_lg2: *fdest = 0x3FD34413509F79FEull; break; + case fconst_ln2: *fdest = 0x3FE62E42FEFA39EFull; break; + default: assert(0); + } +} + +//load memory, convert to double-precision and store to fpr +static inline def_rtl(lmf, uint64_t *fdest, const rtlreg_t* addr, word_t offset) { + switch (s->isa.fpu_MF) + { + case 0://32bit real + { + word_t val = vaddr_read(*addr + offset, 4); + float32_t f32; + float64_t f64; + f32.v = val; + f64 = f32_to_f64(f32); + *fdest = f64.v; + break; + } + case 1://32bit int + { + word_t val = vaddr_read(*addr + offset, 4); + float64_t f64; + f64 = i32_to_f64((int32_t)val); + *fdest = f64.v; + break; + } + case 2://64bit real + { + word_t val_lo = vaddr_read(*addr + offset, 4); + word_t val_hi = vaddr_read(*addr + offset + 4, 4); + uint64_t val = val_hi; + val <<= 32; + val |= val_lo; + *fdest = val; + break; + } + case 3://16bit int + { + word_t val = vaddr_read(*addr + offset, 2); + float64_t f64; + f64 = i32_to_f64((int16_t)val); + *fdest = f64.v; + break; + } + case 4://64bit int + { + word_t val_lo = vaddr_read(*addr + offset, 4); + word_t val_hi = vaddr_read(*addr + offset + 4, 4); + uint64_t val = val_hi; + val <<= 32; + val |= val_lo; + float64_t f64; + f64 = i64_to_f64((int64_t)val); + *fdest = f64.v; + break; + } + default: + assert(0); + break; + } +} + +//load memory, convert to double-precision and store to fpr +static inline def_rtl(smf, const rtlreg_t* addr, word_t offset, const uint64_t *fsrc) { + switch (s->isa.fpu_MF) + { + case 0://32bit real + { + float32_t f32; + float64_t f64; + f64.v = *fsrc; + f32 = f64_to_f32(f64); + vaddr_write(*addr + offset, f32.v, 4); + break; + } + case 1://32bit int + { + float64_t f64; + f64.v = *fsrc; + word_t val = (uint32_t)f64_to_i32(f64, softfloat_roundingMode, false); + vaddr_write(*addr + offset, val, 4); + break; + } + case 2://64bit real + { + word_t val = *fsrc & 0xFFFFFFFF; + vaddr_write(*addr + offset, val, 4); + val = *fsrc >> 32; + vaddr_write(*addr + offset + 4, val, 4); + break; + } + case 3://16bit int + { + float64_t f64; + f64.v = *fsrc; + word_t val = (uint32_t)f64_to_i32(f64, softfloat_roundingMode, false); + assert(val <= 0xffff || val >= 0xffff0000); + vaddr_write(*addr + offset, val, 2); + break; + } + case 4://64bit int + { + word_t val; + float64_t f64; + f64.v = *fsrc; + uint64_t ival = (uint64_t)f64_to_i64(f64, softfloat_roundingMode, false); + val = ival & 0xFFFFFFFF; + vaddr_write(*addr + offset, val, 4); + val = ival >> 32; + vaddr_write(*addr + offset + 4, val, 4); + break; + } + default: + assert(0); + break; + } +} + +static inline float64_t fprToF64(uint64_t r){ + float64_t f; + f.v = r; + return f; +} + +#define BUILD_RTL_F(x) \ +static inline def_rtl(concat(f64_, x), uint64_t* dest, uint64_t* src1, uint64_t* src2) { \ + *dest = concat(f64_, x)(fprToF64(*src1), fprToF64(*src2)).v; \ +} + +BUILD_RTL_F(add); +BUILD_RTL_F(sub); +BUILD_RTL_F(mul); +BUILD_RTL_F(div); + +#define BUILD_RTL_FCMP(x) \ +static inline def_rtl(concat(f64_, x), rtlreg_t* res, uint64_t* src1, uint64_t* src2) { \ + *res = concat(f64_, x)(fprToF64(*src1),fprToF64(*src2)); \ +} + +BUILD_RTL_FCMP(le); +BUILD_RTL_FCMP(eq); +BUILD_RTL_FCMP(lt); + +#define F64_SIGN ((uint64_t)1 << 63) +static inline def_rtl(f64_chs, uint64_t* dest){ + *dest = *dest ^ F64_SIGN; +} +static inline def_rtl(f64_abs, uint64_t* dest){ + *dest = *dest & ~F64_SIGN; +} + +#endif + +#endif diff --git a/libraries/NEMU/src/engine/interpreter/softfloat-fp.h b/libraries/NEMU/src/engine/interpreter/softfloat-fp.h new file mode 100644 index 0000000..1115863 --- /dev/null +++ b/libraries/NEMU/src/engine/interpreter/softfloat-fp.h @@ -0,0 +1,143 @@ +#ifndef __SOFTFLOAT_FP_H__ +#define __SOFTFLOAT_FP_H__ + +#include +#include +#include + +#define F32_SIGN ((uint64_t)1ul << 31) +#define F64_SIGN ((uint64_t)1ul << 63) + +static inline float32_t rtlToF32(rtlreg_t r); +static inline float64_t rtlToF64(rtlreg_t r); + +static inline float32_t f32_min(float32_t a, float32_t b){ + bool less = f32_lt_quiet(a, b) || (f32_eq(a, b) && (a.v & F32_SIGN)); + if(isNaNF32UI(a.v) && isNaNF32UI(b.v)) return rtlToF32(defaultNaNF32UI); + else return(less || isNaNF32UI(b.v) ? a : b); +} + +static inline float32_t f32_max(float32_t a, float32_t b){ + bool greater = f32_lt_quiet(b, a) || (f32_eq(b, a) && (b.v & F32_SIGN)); + if(isNaNF32UI(a.v) && isNaNF32UI(b.v)) return rtlToF32(defaultNaNF32UI); + else return(greater || isNaNF32UI(b.v) ? a : b); +} + +static inline float64_t f64_min(float64_t a, float64_t b){ + bool less = f64_lt_quiet(a, b) || (f64_eq(a, b) && (a.v & F64_SIGN)); + if(isNaNF64UI(a.v) && isNaNF64UI(b.v)) return rtlToF64(defaultNaNF64UI); + else return(less || isNaNF64UI(b.v) ? a : b); +} + +static inline float64_t f64_max(float64_t a, float64_t b){ + bool greater = f64_lt_quiet(b, a) || (f64_eq(b, a) && (b.v & F64_SIGN)); + if(isNaNF64UI(a.v) && isNaNF64UI(b.v)) return rtlToF64(defaultNaNF64UI); + else return(greater || isNaNF64UI(b.v) ? a : b); +} + +static inline int32_t my_f32_to_i32 (float32_t a) { + return f32_to_i32 (a, softfloat_roundingMode, true); +} +static inline uint32_t my_f32_to_ui32(float32_t a) { + return f32_to_ui32(a, softfloat_roundingMode, true); +} +static inline int64_t my_f32_to_i64 (float32_t a) { + return f32_to_i64 (a, softfloat_roundingMode, true); +} +static inline uint64_t my_f32_to_ui64(float32_t a) { + return f32_to_ui64(a, softfloat_roundingMode, true); +} +static inline int32_t my_f64_to_i32 (float64_t a) { + return f64_to_i32 (a, softfloat_roundingMode, true); +} +static inline uint32_t my_f64_to_ui32(float64_t a) { + return f64_to_ui32(a, softfloat_roundingMode, true); +} +static inline int64_t my_f64_to_i64 (float64_t a) { + return f64_to_i64 (a, softfloat_roundingMode, true); +} +static inline uint64_t my_f64_to_ui64(float64_t a) { + return f64_to_ui64(a, softfloat_roundingMode, true); +} + +uint_fast16_t f32_classify( float32_t a ) +{ + union ui32_f32 uA; + uint_fast32_t uiA; + + uA.f = a; + uiA = uA.ui; + + uint_fast16_t infOrNaN = expF32UI( uiA ) == 0xFF; + uint_fast16_t subnormalOrZero = expF32UI( uiA ) == 0; + bool sign = signF32UI( uiA ); + bool fracZero = fracF32UI( uiA ) == 0; + bool isNaN = isNaNF32UI( uiA ); + bool isSNaN = softfloat_isSigNaNF32UI( uiA ); + + return + ( sign && infOrNaN && fracZero ) << 0 | + ( sign && !infOrNaN && !subnormalOrZero ) << 1 | + ( sign && subnormalOrZero && !fracZero ) << 2 | + ( sign && subnormalOrZero && fracZero ) << 3 | + ( !sign && infOrNaN && fracZero ) << 7 | + ( !sign && !infOrNaN && !subnormalOrZero ) << 6 | + ( !sign && subnormalOrZero && !fracZero ) << 5 | + ( !sign && subnormalOrZero && fracZero ) << 4 | + ( isNaN && isSNaN ) << 8 | + ( isNaN && !isSNaN ) << 9; +} + +static inline uint_fast16_t f64_classify( float64_t a ) { + union ui64_f64 uA; + uint_fast64_t uiA; + + uA.f = a; + uiA = uA.ui; + + uint_fast16_t infOrNaN = expF64UI( uiA ) == 0x7FF; + uint_fast16_t subnormalOrZero = expF64UI( uiA ) == 0; + bool sign = signF64UI( uiA ); + bool fracZero = fracF64UI( uiA ) == 0; + bool isNaN = isNaNF64UI( uiA ); + bool isSNaN = softfloat_isSigNaNF64UI( uiA ); + + return + ( sign && infOrNaN && fracZero ) << 0 | + ( sign && !infOrNaN && !subnormalOrZero ) << 1 | + ( sign && subnormalOrZero && !fracZero ) << 2 | + ( sign && subnormalOrZero && fracZero ) << 3 | + ( !sign && infOrNaN && fracZero ) << 7 | + ( !sign && !infOrNaN && !subnormalOrZero ) << 6 | + ( !sign && subnormalOrZero && !fracZero ) << 5 | + ( !sign && subnormalOrZero && fracZero ) << 4 | + ( isNaN && isSNaN ) << 8 | + ( isNaN && !isSNaN ) << 9; +} + +static inline void fp_set_rm(int rm) { + switch (rm) { + case FPCALL_RM_RNE: softfloat_roundingMode = softfloat_round_near_even; break; + case FPCALL_RM_RTZ: softfloat_roundingMode = softfloat_round_minMag; break; + case FPCALL_RM_RDN: softfloat_roundingMode = softfloat_round_min; break; + case FPCALL_RM_RUP: softfloat_roundingMode = softfloat_round_max; break; + case FPCALL_RM_RMM: softfloat_roundingMode = softfloat_round_near_maxMag; break; + default: assert(0); + } +} + +static inline uint32_t fp_get_exception() { + uint32_t ex = 0; + uint32_t softfp_ex = softfloat_exceptionFlags; + if (softfp_ex & softfloat_flag_inexact ) ex |= FPCALL_EX_NX; + if (softfp_ex & softfloat_flag_underflow) ex |= FPCALL_EX_UF; + if (softfp_ex & softfloat_flag_overflow ) ex |= FPCALL_EX_OF; + if (softfp_ex & softfloat_flag_infinite ) ex |= FPCALL_EX_DZ; + if (softfp_ex & softfloat_flag_invalid ) ex |= FPCALL_EX_NV; + return ex; +} + +static inline void fp_clear_exception() { + softfloat_exceptionFlags = 0; +} +#endif diff --git a/libraries/NEMU/src/isa/mips32/difftest/dut.c b/libraries/NEMU/src/isa/mips32/difftest/dut.c new file mode 100644 index 0000000..94fac6d --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/difftest/dut.c @@ -0,0 +1,28 @@ +#include +#include +#include "../local-include/reg.h" +#include + +bool isa_difftest_checkregs(CPU_state *ref_r, vaddr_t pc) { +#ifndef __ICS_EXPORT +#define check_reg(r) same = difftest_check_reg(str(r), pc, ref_r->r, cpu.r) && same + bool same = true; + if (memcmp(&cpu, ref_r, sizeof(cpu.gpr))) { + int i; + for (i = 0; i < ARRLEN(cpu.gpr); i ++) { + difftest_check_reg(reg_name(i, 4), pc, ref_r->gpr[i]._32, cpu.gpr[i]._32); + } + same = false; + } + check_reg(pc); + check_reg(lo); + check_reg(hi); + + return same; +#else + return false; +#endif +} + +void isa_difftest_attach() { +} diff --git a/libraries/NEMU/src/isa/mips32/difftest/ref.c b/libraries/NEMU/src/isa/mips32/difftest/ref.c new file mode 100644 index 0000000..fbfa827 --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/difftest/ref.c @@ -0,0 +1,12 @@ +#include +#include +#include "../local-include/intr.h" + +void isa_difftest_regcpy(void *dut, bool direction) { + if (direction == DIFFTEST_TO_REF) memcpy(&cpu, dut, DIFFTEST_REG_SIZE); + else memcpy(dut, &cpu, DIFFTEST_REG_SIZE); +} + +void isa_difftest_raise_intr(word_t NO) { + cpu.pc = raise_intr(NO, cpu.pc); +} diff --git a/libraries/NEMU/src/isa/mips32/include/isa-all-instr.h b/libraries/NEMU/src/isa/mips32/include/isa-all-instr.h new file mode 100644 index 0000000..ad5cb82 --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/include/isa-all-instr.h @@ -0,0 +1,18 @@ +#include +#include "../local-include/rtl.h" + +#define INSTR_NULLARY(f) \ + f(inv) f(nemu_trap) f(syscall) f(eret) f(tlbwr) f(tlbwi) f(tlbp) f(ret) +#define INSTR_UNARY(f) \ + f(j) f(jal) f(mfhi) f(mflo) f(mthi) f(mtlo) +#define INSTR_BINARY(f) \ + f(lui) f(jr) f(jalr) f(clz) \ + f(lw) f(sw) f(lh) f(lb) f(lhu) f(lbu) f(sh) f(sb) f(swl) f(swr) f(lwl) f(lwr) +#define INSTR_TERNARY(f) \ + f(add) f(sub) f(slt) f(sltu) f(and) f(or) f(xor) f(nor) f(sll) f(srl) f(sra) \ + f(addi) f(slti) f(sltui) f(andi) f(ori) f(xori) f(slli) f(srli) f(srai) f(movz) f(movn) \ + f(beq) f(bne) f(blez) f(bltz) f(bgtz) f(bgez) \ + f(mul) f(mult) f(multu) f(div) f(divu) \ + f(mfc0) f(mtc0) + +def_all_EXEC_ID(); diff --git a/libraries/NEMU/src/isa/mips32/include/isa-def.h b/libraries/NEMU/src/isa/mips32/include/isa-def.h new file mode 100644 index 0000000..caed593 --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/include/isa-def.h @@ -0,0 +1,87 @@ +#ifndef __ISA_MIPS32_H__ +#define __ISA_MIPS32_H__ + +#include + +// reg +typedef struct { + struct { + rtlreg_t _32; + } gpr[32]; + +#ifdef __ICS_EXPORT + rtlreg_t pad[5]; + + vaddr_t pc; +#else + union { + struct { + uint32_t ie: 1; + uint32_t exl: 1; + uint32_t dontcare: 30; + }; + uint32_t val; + } status; + + rtlreg_t lo, hi; + uint32_t badvaddr; + uint32_t cause; + vaddr_t pc; + uint32_t epc; + + union { + struct { + uint32_t ASID: 8; + uint32_t pad : 5; + uint32_t VPN2:19; + }; + uint32_t val; + } entryhi; + uint32_t entrylo0, entrylo1; + uint32_t index; + + bool INTR; +#endif +} mips32_CPU_state; + +// decode +typedef struct { + union { + struct { + int32_t simm : 16; + uint32_t rt : 5; + uint32_t rs : 5; + uint32_t opcode : 6; + } i; + struct { + uint32_t imm : 16; + uint32_t rt : 5; + uint32_t rs : 5; + uint32_t opcode : 6; + } iu; +#ifndef __ICS_EXPORT + struct { + uint32_t target : 26; + uint32_t opcode : 6; + } j; +#endif + struct { + uint32_t func : 6; + uint32_t sa : 5; + uint32_t rd : 5; + uint32_t rt : 5; + uint32_t rs : 5; + uint32_t opcode : 6; + } r; + uint32_t val; + } instr; +} mips32_ISADecodeInfo; + +#define isa_mmu_state() (MMU_DYNAMIC) +#ifdef __ICS_EXPORT +#define isa_mmu_check(vaddr, len, type) (MMU_DIRECT) +#else +#define isa_mmu_check(vaddr, len, type) ((vaddr & 0x80000000u) == 0 ? MMU_TRANSLATE : MMU_DIRECT) +#endif + +#endif diff --git a/libraries/NEMU/src/isa/mips32/include/isa-exec.h b/libraries/NEMU/src/isa/mips32/include/isa-exec.h new file mode 100644 index 0000000..5a2d5d2 --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/include/isa-exec.h @@ -0,0 +1,6 @@ +#include "../instr/compute.h" +#include "../instr/control.h" +#include "../instr/ldst.h" +#include "../instr/muldiv.h" +#include "../instr/system.h" +#include "../instr/special.h" diff --git a/libraries/NEMU/src/isa/mips32/init.c b/libraries/NEMU/src/isa/mips32/init.c new file mode 100644 index 0000000..a012653 --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/init.c @@ -0,0 +1,31 @@ +#include +#include + +// this is not consistent with uint8_t +// but it is ok since we do not access the array directly +static const uint32_t img [] = { + 0x3c048000, // lui a0, 0x8000 + 0xac800000, // sw zero, 0(a0) + 0x8c820000, // lw v0,0(a0) + 0xf0000000, // nemu_trap +}; + +static void restart() { + /* Set the initial program counter. */ + cpu.pc = RESET_VECTOR; + + /* The zero register is always 0. */ + cpu.gpr[0]._32 = 0; +} + +void init_isa() { + /* Load built-in image. */ + memcpy(guest_to_host(RESET_VECTOR), img, sizeof(img)); + + /* Initialize this virtual computer system. */ + restart(); +#ifndef __ICS_EXPORT + void init_mmu(); + init_mmu(); +#endif +} diff --git a/libraries/NEMU/src/isa/mips32/instr/compute.h b/libraries/NEMU/src/isa/mips32/instr/compute.h new file mode 100644 index 0000000..35c78a1 --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/instr/compute.h @@ -0,0 +1,108 @@ +def_EHelper(lui) { + rtl_li(s, ddest, id_src1->imm); +} + +def_EHelper(add) { + rtl_add(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(sub) { + rtl_sub(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(slt) { + rtl_setrelop(s, RELOP_LT, ddest, dsrc1, dsrc2); +} + +def_EHelper(sltu) { + rtl_setrelop(s, RELOP_LTU, ddest, dsrc1, dsrc2); +} + +def_EHelper(and) { + rtl_and(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(or) { + rtl_or(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(xor) { + rtl_xor(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(nor) { + rtl_or(s, ddest, dsrc1, dsrc2); + rtl_not(s, ddest, ddest); +} + +def_EHelper(sll) { + rtl_shl(s, ddest, dsrc2, dsrc1); +} + +def_EHelper(srl) { + rtl_shr(s, ddest, dsrc2, dsrc1); +} + +def_EHelper(sra) { + rtl_sar(s, ddest, dsrc2, dsrc1); +} + +def_EHelper(addi) { + rtl_addi(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(slti) { + rtl_setrelopi(s, RELOP_LT, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(sltui) { + rtl_setrelopi(s, RELOP_LTU, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(andi) { + rtl_andi(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(ori) { + rtl_ori(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(xori) { + rtl_xori(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(slli) { + rtl_shli(s, ddest, dsrc2, id_src1->imm); +} + +def_EHelper(srli) { + rtl_shri(s, ddest, dsrc2, id_src1->imm); +} + +def_EHelper(srai) { + rtl_sari(s, ddest, dsrc2, id_src1->imm); +} + +def_EHelper(movz) { + rtl_mux(s, ddest, dsrc2, ddest, dsrc1); +} + +def_EHelper(movn) { + rtl_mux(s, ddest, dsrc2, dsrc1, ddest); +} + +def_EHelper(clz) { +#ifndef CONFIG_ENGINE_INTERPRETER + panic("not support in engines other than interpreter"); +#endif + + int bit = 32; + int i; + for (i = 31; i >= 0; i ++) { + if (*dsrc1 & (1u << i)) { + bit = 31 - i; + break; + } + } + *ddest = bit; +} diff --git a/libraries/NEMU/src/isa/mips32/instr/control.h b/libraries/NEMU/src/isa/mips32/instr/control.h new file mode 100644 index 0000000..9f999ba --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/instr/control.h @@ -0,0 +1,59 @@ +#define difftest_skip_delay_slot() \ + IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(2, 1)) + +def_EHelper(j) { + difftest_skip_delay_slot(); + rtl_j(s, id_dest->imm); +} + +def_EHelper(jal) { + difftest_skip_delay_slot(); + rtl_li(s, ®_l(31), id_src2->imm); + rtl_j(s, id_dest->imm); +} + +def_EHelper(ret) { + difftest_skip_delay_slot(); + rtl_jr(s, ®_l(31)); +} + +def_EHelper(jr) { + difftest_skip_delay_slot(); + rtl_jr(s, dsrc1); +} + +def_EHelper(jalr) { + difftest_skip_delay_slot(); + rtl_li(s, ddest, id_src2->imm); + rtl_jr(s, dsrc1); +} + +def_EHelper(bne) { + difftest_skip_delay_slot(); + rtl_jrelop(s, RELOP_NE, dsrc1, dsrc2, id_dest->imm); +} + +def_EHelper(beq) { + difftest_skip_delay_slot(); + rtl_jrelop(s, RELOP_EQ, dsrc1, dsrc2, id_dest->imm); +} + +def_EHelper(blez) { + difftest_skip_delay_slot(); + rtl_jrelop(s, RELOP_LE, dsrc1, dsrc2, id_dest->imm); +} + +def_EHelper(bltz) { + difftest_skip_delay_slot(); + rtl_jrelop(s, RELOP_LT, dsrc1, rz, id_dest->imm); +} + +def_EHelper(bgtz) { + difftest_skip_delay_slot(); + rtl_jrelop(s, RELOP_GT, dsrc1, dsrc2, id_dest->imm); +} + +def_EHelper(bgez) { + difftest_skip_delay_slot(); + rtl_jrelop(s, RELOP_GE, dsrc1, rz, id_dest->imm); +} diff --git a/libraries/NEMU/src/isa/mips32/instr/decode.c b/libraries/NEMU/src/isa/mips32/instr/decode.c new file mode 100644 index 0000000..ea97c90 --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/instr/decode.c @@ -0,0 +1,214 @@ +#include "../local-include/rtl.h" +#include +#include +#include + +def_all_THelper(); + +// decode operand helper +#define def_DopHelper(name) \ + void concat(decode_op_, name) (Decode *s, Operand *op, uint32_t val, bool flag) + +static inline def_DopHelper(i) { + op->imm = val; + print_Dop(op->str, OP_STR_SIZE, (flag ? "0x%x" : "%d"), op->imm); +} + +static inline def_DopHelper(r) { + bool load_val = flag; + static word_t zero_null = 0; + op->preg = (!load_val && val == 0) ? &zero_null : ®_l(val); + print_Dop(op->str, OP_STR_SIZE, "%s", reg_name(val, 4)); +} + +static inline def_DHelper(IU) { + decode_op_r(s, id_src1, s->isa.instr.iu.rs, true); + decode_op_i(s, id_src2, s->isa.instr.iu.imm, true); + decode_op_r(s, id_dest, s->isa.instr.iu.rt, false); +} + +static inline def_DHelper(ld) { + decode_op_r(s, id_src1, s->isa.instr.i.rs, true); + decode_op_i(s, id_src2, s->isa.instr.i.simm, false); + decode_op_r(s, id_dest, s->isa.instr.i.rt, false); + print_Dop(id_src1->str, OP_STR_SIZE, "%d(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs, 4)); +} + +static inline def_DHelper(st) { + decode_op_r(s, id_src1, s->isa.instr.i.rs, true); + decode_op_i(s, id_src2, s->isa.instr.i.simm, false); + decode_op_r(s, id_dest, s->isa.instr.i.rt, true); + print_Dop(id_src1->str, OP_STR_SIZE, "%d(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs, 4)); +} + +static inline def_DHelper(lui) { + decode_op_i(s, id_src1, s->isa.instr.iu.imm << 16, true); + decode_op_r(s, id_dest, s->isa.instr.iu.rt, false); +} + +#ifndef __ICS_EXPORT +static inline def_DHelper(I) { + decode_op_r(s, id_src1, s->isa.instr.i.rs, true); + decode_op_i(s, id_src2, s->isa.instr.i.simm, false); + decode_op_r(s, id_dest, s->isa.instr.i.rt, false); +} + +static inline def_DHelper(J) { + vaddr_t target = (s->pc & 0xf0000000) | (s->isa.instr.j.target << 2); + decode_op_i(s, id_dest, target, true); +} + +static inline def_DHelper(R) { + decode_op_r(s, id_src1, s->isa.instr.r.rs, true); + decode_op_r(s, id_src2, s->isa.instr.r.rt, true); + decode_op_r(s, id_dest, s->isa.instr.r.rd, false); +} + +static inline def_DHelper(B) { + sword_t offset = (s->isa.instr.i.simm << 2); + decode_op_i(s, id_dest, s->pc + offset + 4, true); + decode_op_r(s, id_src1, s->isa.instr.i.rs, true); + decode_op_r(s, id_src2, s->isa.instr.i.rt, true); + //s->snpc += 4; // skip the delay slot +} + +static inline def_DHelper(shift) { + decode_op_i(s, id_src1, s->isa.instr.r.sa, false); + decode_op_r(s, id_src2, s->isa.instr.r.rt, true); + decode_op_r(s, id_dest, s->isa.instr.r.rd, false); +} + +static inline def_DHelper(cmov) { + decode_op_r(s, id_src1, s->isa.instr.r.rs, true); + decode_op_r(s, id_src2, s->isa.instr.r.rt, true); + decode_op_r(s, id_dest, s->isa.instr.r.rd, true); +} + +static inline def_DHelper(jal) { + decode_J(s); + id_src2->imm = s->pc + 8; +} + +static inline def_DHelper(jalr) { + decode_op_r(s, id_src1, s->isa.instr.r.rs, true); + decode_op_r(s, id_dest, s->isa.instr.r.rd, false); + id_src2->imm = s->pc + 8; +} + +static inline def_DHelper(cp0) { +// decode_op_r(s, id_src1, s->isa.instr.r.rs, true); + decode_op_r(s, id_src2, s->isa.instr.r.rt, true); + decode_op_i(s, id_dest, s->isa.instr.r.rd, false); + print_Dop(id_dest->str, OP_STR_SIZE, "%s", cp0_name(id_dest->imm)); +} + +def_THelper(jr_dispatch) { + if (s->isa.instr.r.rs == 31) return table_ret(s); + return table_jr(s); +} +#endif + +def_THelper(special) { + switch (s->isa.instr.r.func) { +#ifndef __ICS_EXPORT + IDTAB(000, shift, slli) IDTAB(002, shift, srli)IDTAB(003, shift, srai) + IDTAB(004, R, sll) IDTAB(006, R, srl) IDTAB(007, R, sra) + IDTAB(010, R, jr_dispatch)IDTAB(011, jalr, jalr) IDTAB(012, cmov, movz) IDTAB(013, cmov, movn) + TAB (014, syscall) + IDTAB(020, R, mfhi) IDTAB(021, R, mthi) IDTAB(022, R, mflo) IDTAB(023, R, mtlo) + + IDTAB(030, R, mult) IDTAB(031, R, multu) IDTAB(032, R, div) IDTAB(033, R, divu) + + IDTAB(041, R, add) IDTAB(043, R, sub) + IDTAB(044, R, and) IDTAB(045, R, or) IDTAB(046, R, xor) IDTAB(047, R, nor) + IDTAB(052, R, slt) IDTAB(053, R, sltu) +#endif + } + return EXEC_ID_inv; +} + +#ifndef __ICS_EXPORT +def_THelper(special2) { + switch (s->isa.instr.r.func) { + IDTAB(2, R, mul) + IDTAB(040, R, clz) + } + return EXEC_ID_inv; +} + +def_THelper(regimm) { + switch (s->isa.instr.r.rt) { + IDTAB(0, B, bltz) + IDTAB(1, B, bgez) + } + return EXEC_ID_inv; +} + +def_THelper(cop0) { +#define pair(x, y) (((x) << 1) | (y)) + bool cop0co = (s->isa.instr.r.rs & 0x10) != 0; + uint32_t op = pair((cop0co ? s->isa.instr.r.func : s->isa.instr.r.rs), cop0co); + switch (op) { + TAB (pair(002, 1), tlbwi) + TAB (pair(006, 1), tlbwr) + TAB (pair(010, 1), tlbp) + TAB (pair(030, 1), eret) + IDTAB(pair(000, 0), cp0, mfc0) + IDTAB(pair(004, 0), cp0, mtc0) + } +#undef pair + return EXEC_ID_inv; +} +#endif + +def_THelper(main) { + switch (s->isa.instr.r.opcode) { +#ifdef __ICS_EXPORT + TAB (000, special) + IDTAB(017, IU, lui) + IDTAB(043, ld, lw) + IDTAB(053, st, sw) + TAB (074, nemu_trap) +#else + TAB (000, special) TAB (001, regimm) IDTAB(002, J, j) IDTAB(003, jal, jal) + IDTAB(004, B, beq) IDTAB(005, B, bne) IDTAB(006, B, blez) IDTAB(007, B, bgtz) + IDTAB(011, I, addi) IDTAB(012, I, slti) IDTAB(013, I, sltui) + IDTAB(014, IU, andi) IDTAB(015, IU, ori) IDTAB(016, IU, xori) IDTAB(017, lui, lui) + TAB (020, cop0) + + + TAB (034, special2) + IDTAB(040, ld, lb) IDTAB(041, ld, lh) IDTAB(042, st, lwl) IDTAB(043, ld, lw) + IDTAB(044, ld, lbu) IDTAB(045, ld, lhu) IDTAB(046, st, lwr) + IDTAB(050, st, sb) IDTAB(051, st, sh) IDTAB(052, st, swl) IDTAB(053, st, sw) + IDTAB(056, st, swr) + + + + TAB (074, nemu_trap) +#endif + } + return table_inv(s); +} + +int isa_fetch_decode(Decode *s) { + s->isa.instr.val = instr_fetch(&s->snpc, 4); + int idx = table_main(s); + + s->type = INSTR_TYPE_N; + switch (idx) { + case EXEC_ID_j: + case EXEC_ID_jal: s->jnpc = id_dest->imm; s->type = INSTR_TYPE_J; break; + case EXEC_ID_beq: + case EXEC_ID_bne: + case EXEC_ID_blez: + case EXEC_ID_bltz: + case EXEC_ID_bgez: + case EXEC_ID_bgtz: s->jnpc = id_dest->imm; s->type = INSTR_TYPE_B; break; + case EXEC_ID_ret: + case EXEC_ID_jr: + case EXEC_ID_jalr: s->type = INSTR_TYPE_I; + } + + return idx; +} diff --git a/libraries/NEMU/src/isa/mips32/instr/ldst.h b/libraries/NEMU/src/isa/mips32/instr/ldst.h new file mode 100644 index 0000000..7ca35fa --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/instr/ldst.h @@ -0,0 +1,159 @@ +def_EHelper(lw) { + rtl_lms(s, ddest, dsrc1, id_src2->imm, 4); +} + +def_EHelper(sw) { + rtl_sm(s, dsrc1, id_src2->imm, ddest, 4); +} +#ifndef __ICS_EXPORT + +def_EHelper(lh) { + rtl_lms(s, ddest, dsrc1, id_src2->imm, 2); +} + +def_EHelper(lb) { + rtl_lms(s, ddest, dsrc1, id_src2->imm, 1); +} + +def_EHelper(lhu) { + rtl_lm(s, ddest, dsrc1, id_src2->imm, 2); +} + +def_EHelper(lbu) { + rtl_lm(s, ddest, dsrc1, id_src2->imm, 1); +} + +def_EHelper(sh) { + rtl_sm(s, dsrc1, id_src2->imm, ddest, 2); +} + +def_EHelper(sb) { + rtl_sm(s, dsrc1, id_src2->imm, ddest, 1); +} + +def_EHelper(swl) { + rtl_addi(s, s0, dsrc1, id_src2->imm); + + // mem.shamt2 + rtl_andi(s, s1, s0, 0x3); + rtl_shli(s, s1, s1, 3); + + // load the aligned memory word + rtl_andi(s, s0, s0, ~0x3u); + rtl_lm(s, s0, s0, 0, 4); + + // prepare memory data + rtl_shri(s, s0, s0, 8); // shift 8 bit + rtl_shr(s, s0, s0, s1); // second shift + rtl_shl(s, s0, s0, s1); // shift back + rtl_shli(s, s0, s0, 8); // shift 8 bit + + // reg.shmat = 24 - mem.shmat2 + rtl_subi(s, s1, s1, 24); + rtl_neg(s, s1, s1); + + // prepare register data + rtl_shr(s, s1, ddest, s1); + + // merge the word + rtl_or(s, s1, s0, s1); + + // write back + rtl_addi(s, s0, dsrc1, id_src2->imm); + rtl_andi(s, s0, s0, ~0x3u); + rtl_sm(s, s0, 0, s1, 4); +} + +def_EHelper(swr) { + rtl_addi(s, s0, dsrc1, id_src2->imm); + + // mem.shmat2 + rtl_andi(s, s1, s0, 0x3); + rtl_shli(s, s1, s1, 3); + rtl_subi(s, s1, s1, 24); + rtl_neg(s, s1, s1); + + // load the aligned memory word + rtl_andi(s, s0, s0, ~0x3u); + rtl_lm(s, s0, s0, 0, 4); + + // prepare memory data + rtl_shli(s, s0, s0, 8); // shift 8 bit + rtl_shl(s, s0, s0, s1); // second shift + rtl_shr(s, s0, s0, s1); // shift back + rtl_shri(s, s0, s0, 8); // shift 8 bit + + // reg.shmat = 24 - mem.shmat2 + rtl_subi(s, s1, s1, 24); + rtl_neg(s, s1, s1); + + // prepare register data + rtl_shl(s, s1, ddest, s1); + + // merge the word + rtl_or(s, s1, s0, s1); + + // write back + rtl_addi(s, s0, dsrc1, id_src2->imm); + rtl_andi(s, s0, s0, ~0x3u); + rtl_sm(s, s0, 0, s1, 4); +} + +def_EHelper(lwl) { + rtl_addi(s, s0, dsrc1, id_src2->imm); + + // mem.shmat2 + rtl_andi(s, s1, s0, 0x3); + rtl_shli(s, s1, s1, 3); + rtl_subi(s, s1, s1, 24); + rtl_neg(s, s1, s1); + + // load the aligned memory word + rtl_andi(s, s0, s0, ~0x3u); + rtl_lm(s, s0, s0, 0, 4); + + // prepare memory data + rtl_shl(s, s0, s0, s1); + + // reg.shmat = 24 - mem.shmat2 + rtl_subi(s, s1, s1, 24); + rtl_neg(s, s1, s1); + + // prepare register data + rtl_shli(s, ddest, ddest, 8); // shift 8 bit + rtl_shl(s, ddest, ddest, s1); // second shift + rtl_shr(s, ddest, ddest, s1); // shift back + rtl_shri(s, ddest, ddest, 8); // shift 8 bit + + // merge the word + rtl_or(s, ddest, s0, ddest); +} + +def_EHelper(lwr) { + rtl_addi(s, s0, dsrc1, id_src2->imm); + + // mem.shmat2 + rtl_andi(s, s1, s0, 0x3); + rtl_shli(s, s1, s1, 3); + + // load the aligned memory word + rtl_andi(s, s0, s0, ~0x3u); + rtl_lm(s, s0, s0, 0, 4); + + // prepare memory data + rtl_shr(s, s0, s0, s1); + + // reg.shmat = 24 - mem.shmat2 + rtl_subi(s, s1, s1, 24); + rtl_neg(s, s1, s1); + + // prepare register data + rtl_shri(s, ddest, ddest, 8); // shift 8 bit + rtl_shr(s, ddest, ddest, s1); // second shift + rtl_shl(s, ddest, ddest, s1); // shift back + rtl_shli(s, ddest, ddest, 8); // shift 8 bit + + // merge the word + rtl_or(s, ddest, s0, ddest); +} +#endif diff --git a/libraries/NEMU/src/isa/mips32/instr/muldiv.h b/libraries/NEMU/src/isa/mips32/instr/muldiv.h new file mode 100644 index 0000000..937597e --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/instr/muldiv.h @@ -0,0 +1,39 @@ +def_EHelper(mfhi) { + rtl_mv(s, ddest, &cpu.hi); +} + +def_EHelper(mflo) { + rtl_mv(s, ddest, &cpu.lo); +} + +def_EHelper(mthi) { + rtl_mv(s, &cpu.hi, dsrc1); +} + +def_EHelper(mtlo) { + rtl_mv(s, &cpu.lo, dsrc1); +} + +def_EHelper(mul) { + rtl_mulu_lo(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(mult) { + rtl_mulu_lo(s, &cpu.lo, dsrc1, dsrc2); + rtl_muls_hi(s, &cpu.hi, dsrc1, dsrc2); +} + +def_EHelper(multu) { + rtl_mulu_lo(s, &cpu.lo, dsrc1, dsrc2); + rtl_mulu_hi(s, &cpu.hi, dsrc1, dsrc2); +} + +def_EHelper(div) { + rtl_divs_q(s, &cpu.lo, dsrc1, dsrc2); + rtl_divs_r(s, &cpu.hi, dsrc1, dsrc2); +} + +def_EHelper(divu) { + rtl_divu_q(s, &cpu.lo, dsrc1, dsrc2); + rtl_divu_r(s, &cpu.hi, dsrc1, dsrc2); +} diff --git a/libraries/NEMU/src/isa/mips32/instr/special.h b/libraries/NEMU/src/isa/mips32/instr/special.h new file mode 100644 index 0000000..70ab888 --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/instr/special.h @@ -0,0 +1,11 @@ +def_EHelper(inv) { + save_globals(s); + rtl_hostcall(s, HOSTCALL_INV, NULL, NULL, 0); + longjmp_exec(NEMU_EXEC_END); +} + +def_EHelper(nemu_trap) { + save_globals(s); + rtl_hostcall(s, HOSTCALL_EXIT, NULL, &cpu.gpr[2]._32, 0); // gpr[2] is $v0 + longjmp_exec(NEMU_EXEC_END); +} diff --git a/libraries/NEMU/src/isa/mips32/instr/system.h b/libraries/NEMU/src/isa/mips32/instr/system.h new file mode 100644 index 0000000..64e51c2 --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/instr/system.h @@ -0,0 +1,30 @@ +#include "../local-include/intr.h" + +def_EHelper(syscall) { + rtl_trap(s, s->pc, EX_SYSCALL); +} + +def_EHelper(eret) { + rtl_hostcall(s, HOSTCALL_PRIV, s0, NULL, PRIV_ERET); + rtl_jr(s, s0); +} + +def_EHelper(mfc0) { + rtl_hostcall(s, HOSTCALL_CSR, dsrc2, NULL, id_dest->imm); +} + +def_EHelper(mtc0) { + rtl_hostcall(s, HOSTCALL_CSR, NULL, dsrc2, id_dest->imm); +} + +def_EHelper(tlbwr) { + rtl_hostcall(s, HOSTCALL_PRIV, NULL, NULL, PRIV_TLBWR); +} + +def_EHelper(tlbwi) { + rtl_hostcall(s, HOSTCALL_PRIV, NULL, NULL, PRIV_TLBWI); +} + +def_EHelper(tlbp) { + rtl_hostcall(s, HOSTCALL_PRIV, NULL, NULL, PRIV_TLBP); +} diff --git a/libraries/NEMU/src/isa/mips32/local-include/intr.h b/libraries/NEMU/src/isa/mips32/local-include/intr.h new file mode 100644 index 0000000..2848237 --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/local-include/intr.h @@ -0,0 +1,15 @@ +#ifndef __MIPS32_INTR_H__ +#define __MIPS32_INTR_H__ + +#include + +#define EX_SYSCALL 8 +#define EX_TLB_LD 2 +#define EX_TLB_ST 3 +#define TLB_REFILL 0x80 + +#define MEM_OK 0 + +word_t raise_intr(uint32_t NO, vaddr_t epc); + +#endif diff --git a/libraries/NEMU/src/isa/mips32/local-include/reg.h b/libraries/NEMU/src/isa/mips32/local-include/reg.h new file mode 100644 index 0000000..a22fbee --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/local-include/reg.h @@ -0,0 +1,27 @@ +#ifndef __MIPS32_REG_H__ +#define __MIPS32_REG_H__ + +#include + +enum { PRIV_ERET, PRIV_TLBWR, PRIV_TLBWI, PRIV_TLBP }; + +static inline int check_reg_index(int index) { + IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); + return index; +} + +#define reg_l(index) (cpu.gpr[check_reg_index(index)]._32) + +static inline const char* reg_name(int index, int width) { + extern const char* regsl[]; + IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); + return regsl[index]; +} + +static inline const char* cp0_name(int index) { + extern const char* cp0[]; + IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); + return cp0[index]; +} + +#endif diff --git a/libraries/NEMU/src/isa/mips32/local-include/rtl.h b/libraries/NEMU/src/isa/mips32/local-include/rtl.h new file mode 100644 index 0000000..a61a645 --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/local-include/rtl.h @@ -0,0 +1,19 @@ +#ifndef __MIPS32_RTL_H__ +#define __MIPS32_RTL_H__ + +#include +#include "reg.h" + +static inline def_rtl(mux, rtlreg_t* dest, const rtlreg_t* cond, + const rtlreg_t* src1, const rtlreg_t* src2) { + // dest <- (cond ? src1 : src2) + rtl_setrelopi(s, RELOP_EQ, s0, cond, 0); + rtl_subi(s, s0, s0, 1); + // s0 = mask + rtl_and(s, s1, src1, s0); + rtl_not(s, s0, s0); + rtl_and(s, dest, src2, s0); + rtl_or(s, dest, dest, s1); +} + +#endif diff --git a/libraries/NEMU/src/isa/mips32/logo.c b/libraries/NEMU/src/isa/mips32/logo.c new file mode 100644 index 0000000..3d9c56a --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/logo.c @@ -0,0 +1,63 @@ +// refer to http://www.patorjk.com/software/taag/#p=display&f=Big&t=Type%20Something%20 + +/* + _ ____ ___ __ __ _ + (_) |___ \__ \ | \/ | | | + _ __ ___ _ _ __ ___ __) | ) | | \ / | __ _ _ __ _ _ __ _| | + | '_ ` _ \| | '_ \/ __||__ < / / | |\/| |/ _` | '_ \| | | |/ _` | | + | | | | | | | |_) \__ \___) / /_ | | | | (_| | | | | |_| | (_| | | + |_| |_| |_|_| .__/|___/____/____| |_| |_|\__,_|_| |_|\__,_|\__,_|_| + | | + |_| + +*/ + +unsigned char isa_logo[] = { + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x5f, 0x5f, 0x5f, 0x5f, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, + 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x5f, 0x29, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x5f, 0x5f, + 0x5f, 0x20, 0x5c, 0x5f, 0x5f, 0x20, 0x5c, 0x20, 0x20, 0x7c, 0x20, 0x20, + 0x5c, 0x2f, 0x20, 0x20, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x20, 0x5f, 0x20, + 0x5f, 0x5f, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x20, 0x5f, 0x20, + 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x29, + 0x20, 0x7c, 0x20, 0x29, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x5c, 0x20, 0x20, + 0x2f, 0x20, 0x7c, 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x20, 0x5f, 0x20, 0x5f, + 0x5f, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x5f, 0x5f, + 0x20, 0x5f, 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x20, + 0x60, 0x20, 0x5f, 0x20, 0x5c, 0x7c, 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x20, + 0x5c, 0x2f, 0x20, 0x5f, 0x5f, 0x7c, 0x7c, 0x5f, 0x5f, 0x20, 0x3c, 0x20, + 0x2f, 0x20, 0x2f, 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x5c, 0x2f, 0x7c, 0x20, + 0x7c, 0x2f, 0x20, 0x5f, 0x60, 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x20, 0x5c, + 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x2f, 0x20, 0x5f, 0x60, 0x20, + 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, + 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x5f, 0x29, 0x20, 0x5c, + 0x5f, 0x5f, 0x20, 0x5c, 0x5f, 0x5f, 0x5f, 0x29, 0x20, 0x2f, 0x20, 0x2f, + 0x5f, 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x20, + 0x28, 0x5f, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, + 0x7c, 0x5f, 0x7c, 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x7c, 0x20, 0x7c, 0x20, + 0x7c, 0x0a, 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x7c, + 0x5f, 0x7c, 0x5f, 0x7c, 0x20, 0x2e, 0x5f, 0x5f, 0x2f, 0x7c, 0x5f, 0x5f, + 0x5f, 0x2f, 0x5f, 0x5f, 0x5f, 0x5f, 0x2f, 0x5f, 0x5f, 0x5f, 0x5f, 0x7c, + 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x20, 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, + 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x20, 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, + 0x2c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, + 0x5f, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a +}; diff --git a/libraries/NEMU/src/isa/mips32/reg.c b/libraries/NEMU/src/isa/mips32/reg.c new file mode 100644 index 0000000..015bddf --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/reg.c @@ -0,0 +1,51 @@ +#include +#include "local-include/reg.h" + +const char *regsl[] = { + "$0", "at", "v0", "v1", "a0", "a1", "a2", "a3", + "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", + "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", + "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra" +}; + +#ifndef __ICS_EXPORT +const char *cp0[] = { + "index", "???", "entrylo0", "entrylo1", + "???", "???", "???", "???", + "???", "entryhi", "???", "status", + "cause", "epc", "???", "???", + "???", "???", "???", "???", + "???", "???", "???", "???", + "???", "???", "???", "???", + "???", "???", "???", "???" +}; + +void isa_reg_display() { + int i; + for (i = 0; i < 32; i ++) { + printf("%s: 0x%08x ", regsl[i], cpu.gpr[i]._32); + if (i % 4 == 3) printf("\n"); + } + printf("pc: 0x%08x\n", cpu.pc); +} + +word_t isa_reg_str2val(const char *s, bool *success) { + int i; + *success = true; + for (i = 0; i < 32; i ++) { + if (strcmp(regsl[i], s) == 0) return reg_l(i); + } + + if (strcmp("pc", s) == 0) return cpu.pc; + + *success = false; + return 0; +} +#else +void isa_reg_display() { +} + +word_t isa_reg_str2val(const char *s, bool *success) { + return 0; +} +#endif diff --git a/libraries/NEMU/src/isa/mips32/system/intr.c b/libraries/NEMU/src/isa/mips32/system/intr.c new file mode 100644 index 0000000..1420ec2 --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/system/intr.c @@ -0,0 +1,37 @@ +#include "../local-include/rtl.h" +#include "../local-include/intr.h" + +#ifndef __ICS_EXPORT +#include + +word_t raise_intr(uint32_t NO, vaddr_t epc) { +#define EX_ENTRY 0x80000180 + vaddr_t target = (NO & TLB_REFILL) ? 0x80000000 : EX_ENTRY; + NO &= ~TLB_REFILL; + cpu.cause = NO << 2; + cpu.epc = epc; + cpu.status.exl = 1; + + difftest_skip_dut(1, 2); + + return target; +} + +void isa_query_intr() { + if (cpu.INTR && (cpu.status.ie) && !(cpu.status.exl)) { + cpu.INTR = false; + cpu.pc = raise_intr(0, cpu.pc); + } +} +#else +word_t raise_intr(uint32_t NO, vaddr_t epc) { + /* TODO: Trigger an interrupt/exception with ``NO''. + * That is, use ``NO'' to index the IDT. + */ + + return 0; +} + +void isa_query_intr() { +} +#endif diff --git a/libraries/NEMU/src/isa/mips32/system/mmu.c b/libraries/NEMU/src/isa/mips32/system/mmu.c new file mode 100644 index 0000000..fa7cff2 --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/system/mmu.c @@ -0,0 +1,110 @@ +#include +#include +#include +#ifndef __ICS_EXPORT +#include +#include "../local-include/intr.h" +#include +#include + +#define NR_TLB 16 + +typedef union { + struct { + uint32_t ASID: 8; + uint32_t pad : 5; + uint32_t VPN2:19; + }; + uint32_t val; +} EntryHi; + +typedef union { + struct { + uint32_t G : 1; + uint32_t V : 1; + uint32_t D : 1; + uint32_t C : 3; + uint32_t PFN :24; + uint32_t pad : 2; + }; + uint32_t val; +} EntryLo; + +struct { + EntryHi hi; + EntryLo lo[2]; +} tlb [NR_TLB]; + +void init_mmu() { + int i; + for (i = 0; i < NR_TLB; i ++) { + tlb[i].lo[0].V = tlb[i].lo[1].V = 0; + } + srand(time(0)); +} + +static inline void update_tlb(int idx) { + tlb[idx].hi.val = cpu.entryhi.val; + tlb[idx].lo[0].val = cpu.entrylo0; + tlb[idx].lo[1].val = cpu.entrylo1; +} + +void tlbwr() { + update_tlb(rand() % NR_TLB); +} + +void tlbwi() { + update_tlb(cpu.index % NR_TLB); +} + +void tlbp() { + int i; + for (i = 0; i < NR_TLB; i ++) { + if (tlb[i].hi.VPN2 == cpu.entryhi.VPN2) { + Log("match, i = %d, cpu.pc = 0x%08x, va = 0x%08x", i, cpu.pc, cpu.entryhi.val); + cpu.index = i; + return; + } + } + cpu.index |= 0x80000000; +} + +static inline int32_t search_ppn(vaddr_t addr, int type) { + union { + struct { + uint32_t offset :12; + uint32_t lo_idx : 1; + uint32_t vpn :19; + }; + uint32_t val; + } a; + a.val = addr; + int i; + for (i = 0; i < NR_TLB; i ++) { + if (tlb[i].hi.VPN2 == a.vpn) { + if (!tlb[i].lo[a.lo_idx].V) { + cpu.entryhi.VPN2 = a.vpn; +// Log("tlb[%d] invalid at cpu.pc = 0x%08x, badaddr = 0x%08x", i, cpu.pc, addr); + longjmp_exec(type == MEM_TYPE_WRITE ? EX_TLB_ST : EX_TLB_LD); + } + //Assert(tlb[i].lo[a.lo_idx].V, "cpu.pc = 0x%08x, addr = 0x%08x, lo0 = 0x%08x, lo1 = 0x%08x", + // cpu.pc, addr, tlb[i].lo[0].val, tlb[i].lo[1].val); + return tlb[i].lo[a.lo_idx].PFN; + } + } + cpu.entryhi.VPN2 = a.vpn; +// Log("tlb refill at cpu.pc = 0x%08x, badaddr = 0x%08x", cpu.pc, addr); + longjmp_exec(TLB_REFILL | (type == MEM_TYPE_WRITE ? EX_TLB_ST : EX_TLB_LD)); + return -1; +} +#endif + +paddr_t isa_mmu_translate(vaddr_t vaddr, int len, int type) { +#ifdef __ICS_EXPORT + return MEM_RET_FAIL; +#else + int32_t ppn = search_ppn(vaddr, type); + if (ppn == -1) return MEM_RET_FAIL; + return ((uint32_t)(ppn << 12) + 0x80000000) | MEM_RET_OK; +#endif +} diff --git a/libraries/NEMU/src/isa/mips32/system/priv.c b/libraries/NEMU/src/isa/mips32/system/priv.c new file mode 100644 index 0000000..f681c07 --- /dev/null +++ b/libraries/NEMU/src/isa/mips32/system/priv.c @@ -0,0 +1,59 @@ +#include "../local-include/rtl.h" +#include "../local-include/intr.h" +#include + +void tlbwr(); +void tlbwi(); +void tlbp(); + +static void csrrw(rtlreg_t *dest, const rtlreg_t *src, uint32_t csrid) { + if (dest != NULL) { + switch (csrid) { + case 0: *dest = cpu.index; break; + case 10: *dest = cpu.entryhi.val; break; + case 12: *dest = cpu.status.val; break; + case 13: *dest = cpu.cause; + // qemu may set cause.IP[7] + IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_ref()); + break; + case 14: *dest = cpu.epc; break; + default: panic("Reading from CSR = %d is not supported", csrid); + } + } + if (src != NULL) { + switch (csrid) { + case 0: cpu.index = *src; break; + case 2: cpu.entrylo0 = *src; break; + case 3: cpu.entrylo1 = *src; break; + case 10: cpu.entryhi.val = *src & ~0x1f00; break; + case 12: cpu.status.val = *src; break; + case 13: cpu.cause = *src; break; + case 14: cpu.epc = *src; break; + default: panic("Writing to CSR = %d is not supported", csrid); + } + } +} + +static word_t priv_instr(uint32_t op, const rtlreg_t *src) { + switch (op) { + case PRIV_ERET: + cpu.status.exl = 0; + return cpu.epc; + case PRIV_TLBWR: tlbwr(); break; + case PRIV_TLBWI: tlbwi(); break; + case PRIV_TLBP: tlbp(); break; + default: panic("Unsupported privilige operation = %d", op); + } + return 0; +} + +void isa_hostcall(uint32_t id, rtlreg_t *dest, const rtlreg_t *src, uint32_t imm) { + word_t ret = 0; + switch (id) { + case HOSTCALL_CSR: csrrw(dest, src, imm); return; + case HOSTCALL_TRAP: ret = raise_intr(imm, *src); break; + case HOSTCALL_PRIV: ret = priv_instr(imm, src); break; + default: panic("Unsupported hostcall ID = %d", id); + } + if (dest) *dest = ret; +} diff --git a/libraries/NEMU/src/isa/riscv32/difftest/dut.c b/libraries/NEMU/src/isa/riscv32/difftest/dut.c new file mode 100644 index 0000000..0eedf95 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/difftest/dut.c @@ -0,0 +1,24 @@ +#include +#include +#include "../local-include/reg.h" +#include + +bool isa_difftest_checkregs(CPU_state *ref_r, vaddr_t pc) { +#ifndef __ICS_EXPORT + if (memcmp(&cpu.gpr[1], &ref_r->gpr[1], DIFFTEST_REG_SIZE - sizeof(cpu.gpr[0]))) { + int i; + // do not check $0 + for (i = 1; i < ARRLEN(cpu.gpr); i ++) { + difftest_check_reg(reg_name(i, 4), pc, ref_r->gpr[i]._32, cpu.gpr[i]._32); + } + difftest_check_reg("pc", pc, ref_r->pc, cpu.pc); + return false; + } + return true; +#else + return false; +#endif +} + +void isa_difftest_attach() { +} diff --git a/libraries/NEMU/src/isa/riscv32/difftest/ref.c b/libraries/NEMU/src/isa/riscv32/difftest/ref.c new file mode 100644 index 0000000..fbfa827 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/difftest/ref.c @@ -0,0 +1,12 @@ +#include +#include +#include "../local-include/intr.h" + +void isa_difftest_regcpy(void *dut, bool direction) { + if (direction == DIFFTEST_TO_REF) memcpy(&cpu, dut, DIFFTEST_REG_SIZE); + else memcpy(dut, &cpu, DIFFTEST_REG_SIZE); +} + +void isa_difftest_raise_intr(word_t NO) { + cpu.pc = raise_intr(NO, cpu.pc); +} diff --git a/libraries/NEMU/src/isa/riscv32/include/isa-all-instr.h b/libraries/NEMU/src/isa/riscv32/include/isa-all-instr.h new file mode 100644 index 0000000..34a7371 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/include/isa-all-instr.h @@ -0,0 +1,28 @@ +#include +#include + +#define INSTR_NULLARY(f) \ + f(inv) f(nemu_trap) f(ecall) f(sret) f(sfence_vma) f(p_ret) + +#define INSTR_UNARY(f) \ + f(p_li_0) f(p_li_1) \ + f(p_inc) f(p_dec) + +#define INSTR_BINARY(f) \ + f(lui) f(auipc) f(jal) \ + f(lw) f(sw) f(lh) f(lb) f(lhu) f(lbu) f(sh) f(sb) \ + f(c_j) f(c_jal) f(c_jr) \ + f(c_beqz) f(c_bnez) f(c_mv) \ + f(lw_mmu) f(sw_mmu) f(lh_mmu) f(lb_mmu) f(lhu_mmu) f(lbu_mmu) f(sh_mmu) f(sb_mmu) + +#define INSTR_TERNARY(f) \ + f(add) f(sll) f(srl) f(slt) f(sltu) f(xor) f(or) f(sub) f(sra) f(and) \ + f(addi) f(slli) f(srli) f(slti) f(sltui) f(xori) f(ori) f(srai) f(andi) \ + f(jalr) f(beq) f(bne) f(blt) f(bge) f(bltu) f(bgeu) \ + f(mul) f(mulh) f(mulhu) f(mulhsu) f(div) f(divu) f(rem) f(remu) \ + f(csrrw) f(csrrs) \ + f(c_li) f(c_addi) f(c_slli) f(c_srli) f(c_srai) f(c_andi) \ + f(c_add) f(c_and) f(c_or) f(c_xor) f(c_sub) \ + f(p_blez) f(p_bgez) f(p_bltz) f(p_bgtz) + +def_all_EXEC_ID(); diff --git a/libraries/NEMU/src/isa/riscv32/include/isa-def.h b/libraries/NEMU/src/isa/riscv32/include/isa-def.h new file mode 100644 index 0000000..6a3ae8d --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/include/isa-def.h @@ -0,0 +1,115 @@ +#ifndef __ISA_RISCV32_H__ +#define __ISA_RISCV32_H__ + +#include + +typedef struct { + struct { + rtlreg_t _32; + } gpr[32]; + + vaddr_t pc; +#ifndef __ICS_EXPORT + vaddr_t stvec; + vaddr_t scause; + vaddr_t sepc; + vaddr_t sscratch; + union { + struct { + uint32_t uie : 1; + uint32_t sie : 1; + uint32_t pad0: 2; + uint32_t upie: 1; + uint32_t spie: 1; + uint32_t pad1: 2; + uint32_t spp : 1; + uint32_t dontcare :21; + }; + uint32_t val; + } sstatus; + union { + struct { + uint32_t ppn :22; + uint32_t asid: 9; + uint32_t mode: 1; + }; + uint32_t val; + } satp; + + bool INTR; +#endif +} riscv32_CPU_state; + +// decode +typedef struct { + union { + struct { + uint32_t opcode1_0 : 2; + uint32_t opcode6_2 : 5; + uint32_t rd : 5; + uint32_t funct3 : 3; + uint32_t rs1 : 5; + int32_t simm11_0 :12; + } i; + struct { + uint32_t opcode1_0 : 2; + uint32_t opcode6_2 : 5; + uint32_t imm4_0 : 5; + uint32_t funct3 : 3; + uint32_t rs1 : 5; + uint32_t rs2 : 5; + int32_t simm11_5 : 7; + } s; + struct { + uint32_t opcode1_0 : 2; + uint32_t opcode6_2 : 5; + uint32_t rd : 5; + uint32_t imm31_12 :20; + } u; +#ifndef __ICS_EXPORT + struct { + uint32_t opcode1_0 : 2; + uint32_t opcode6_2 : 5; + uint32_t rd : 5; + uint32_t funct3 : 3; + uint32_t rs1 : 5; + uint32_t rs2 : 5; + uint32_t funct7 : 7; + } r; + struct { + uint32_t opcode1_0 : 2; + uint32_t opcode6_2 : 5; + uint32_t imm11 : 1; + uint32_t imm4_1 : 4; + uint32_t funct3 : 3; + uint32_t rs1 : 5; + uint32_t rs2 : 5; + uint32_t imm10_5 : 6; + int32_t simm12 : 1; + } b; + struct { + uint32_t opcode1_0 : 2; + uint32_t opcode6_2 : 5; + uint32_t rd : 5; + uint32_t imm19_12 : 8; + uint32_t imm11 : 1; + uint32_t imm10_1 :10; + int32_t simm20 : 1; + } j; + struct { + uint32_t pad7 :20; + uint32_t csr :12; + } csr; +#endif + uint32_t val; + } instr; +} riscv32_ISADecodeInfo; + +#ifdef __ICS_EXPORT +#define isa_mmu_state() (MMU_DIRECT) +#else +#define isa_mmu_state() (cpu.satp.mode ? MMU_TRANSLATE : MMU_DIRECT) +#endif +#define isa_mmu_check(vaddr, len, type) isa_mmu_state() + +#endif diff --git a/libraries/NEMU/src/isa/riscv32/include/isa-exec.h b/libraries/NEMU/src/isa/riscv32/include/isa-exec.h new file mode 100644 index 0000000..dbd86ef --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/include/isa-exec.h @@ -0,0 +1,8 @@ +#include "../instr/pseudo.h" +#include "../instr/compress.h" +#include "../instr/compute.h" +#include "../instr/control.h" +#include "../instr/ldst.h" +#include "../instr/muldiv.h" +#include "../instr/system.h" +#include "../instr/special.h" diff --git a/libraries/NEMU/src/isa/riscv32/init.c b/libraries/NEMU/src/isa/riscv32/init.c new file mode 100644 index 0000000..1822ccc --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/init.c @@ -0,0 +1,30 @@ +#include +#include + +// this is not consistent with uint8_t +// but it is ok since we do not access the array directly +static const uint32_t img [] = { + 0x800002b7, // lui t0,0x80000 + 0x0002a023, // sw zero,0(t0) + 0x0002a503, // lw a0,0(t0) + 0x0000006b, // nemu_trap +}; + +static void restart() { + /* Set the initial program counter. */ + cpu.pc = RESET_VECTOR; + + /* The zero register is always 0. */ + cpu.gpr[0]._32 = 0; +#ifndef __ICS_EXPORT + cpu.sstatus.val = 0x000c0100; +#endif +} + +void init_isa() { + /* Load built-in image. */ + memcpy(guest_to_host(RESET_VECTOR), img, sizeof(img)); + + /* Initialize this virtual computer system. */ + restart(); +} diff --git a/libraries/NEMU/src/isa/riscv32/instr/compress.h b/libraries/NEMU/src/isa/riscv32/instr/compress.h new file mode 100644 index 0000000..50eb70f --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/instr/compress.h @@ -0,0 +1,96 @@ +// Although we do not support the decoding of RV32C, +// it still provide the idea of optimization for EHelpers. +// +// The following RVC instructions are excluded +// (1) not present in RV32 +// C.LDSP C.SDSP +// C.LQSP C.SQSP +// C.LD C.SD +// C.LQ C.SQ +// C.ADDIW +// C.ADDW C.SUBW +// (2) seem not frequently present during execution +// C.LWSP C.SWSP +// C.JALR +// C.ADDI4SPN +// (3) only expansion without optimization +// C.LW C.SW +// C.LUI +// (4) still not considered +// C.FLDSP C.FLWSP C.FSDSP C.FSWSP +// C.FLD C.FLW C.FSD C.FSW +// C.EBREAK +// (5) redundant from the aspect of EHelper +// C.ADDI16SP (the same as C.ADDI) +// C.NOP (the same as C.ADDI) + +def_EHelper(c_j) { + rtl_j(s, id_src1->imm); +} + +def_EHelper(c_jal) { + rtl_li(s, &cpu.gpr[1]._32, id_src2->imm); + rtl_j(s, id_src1->imm); +} + +def_EHelper(c_jr) { +// IFDEF(CONFIG_ENGINE_INTERPRETER, rtl_andi(s, s0, s0, ~0x1u)); + IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); + rtl_jr(s, dsrc1); +} + +def_EHelper(c_beqz) { + rtl_jrelop(s, RELOP_EQ, dsrc1, rz, id_dest->imm); +} + +def_EHelper(c_bnez) { + rtl_jrelop(s, RELOP_NE, dsrc1, rz, id_dest->imm); +} + +def_EHelper(c_li) { + rtl_li(s, ddest, id_src2->imm); +} + +def_EHelper(c_addi) { + rtl_addi(s, ddest, ddest, id_src2->imm); +} + +def_EHelper(c_slli) { + rtl_shli(s, ddest, ddest, id_src2->imm); +} + +def_EHelper(c_srli) { + rtl_shri(s, ddest, ddest, id_src2->imm); +} + +def_EHelper(c_srai) { + rtl_sari(s, ddest, ddest, id_src2->imm); +} + +def_EHelper(c_andi) { + rtl_andi(s, ddest, ddest, id_src2->imm); +} + +def_EHelper(c_mv) { + rtl_mv(s, ddest, dsrc1); +} + +def_EHelper(c_add) { + rtl_add(s, ddest, ddest, dsrc2); +} + +def_EHelper(c_and) { + rtl_and(s, ddest, ddest, dsrc2); +} + +def_EHelper(c_or) { + rtl_or(s, ddest, ddest, dsrc2); +} + +def_EHelper(c_xor) { + rtl_xor(s, ddest, ddest, dsrc2); +} + +def_EHelper(c_sub) { + rtl_sub(s, ddest, ddest, dsrc2); +} diff --git a/libraries/NEMU/src/isa/riscv32/instr/compute.h b/libraries/NEMU/src/isa/riscv32/instr/compute.h new file mode 100644 index 0000000..e2fb297 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/instr/compute.h @@ -0,0 +1,86 @@ +def_EHelper(lui) { + rtl_li(s, ddest, id_src1->imm); +} +#ifndef __ICS_EXPORT + +def_EHelper(add) { + rtl_add(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(sub) { + rtl_sub(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(sll) { + rtl_shl(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(srl) { + rtl_shr(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(sra) { + rtl_sar(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(slt) { + rtl_setrelop(s, RELOP_LT, ddest, dsrc1, dsrc2); +} + +def_EHelper(sltu) { + rtl_setrelop(s, RELOP_LTU, ddest, dsrc1, dsrc2); +} + +def_EHelper(xor) { + rtl_xor(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(or) { + rtl_or(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(and) { + rtl_and(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(addi) { + rtl_addi(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(slli) { + rtl_shli(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(srli) { + rtl_shri(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(srai) { + rtl_sari(s, ddest, dsrc1, id_src2->imm); +} + + +def_EHelper(slti) { + rtl_setrelopi(s, RELOP_LT, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(sltui) { + rtl_setrelopi(s, RELOP_LTU, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(xori) { + rtl_xori(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(ori) { + rtl_ori(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(andi) { + rtl_andi(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(auipc) { + rtl_li(s, ddest, id_src1->imm); +} +#endif diff --git a/libraries/NEMU/src/isa/riscv32/instr/control.h b/libraries/NEMU/src/isa/riscv32/instr/control.h new file mode 100644 index 0000000..858f733 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/instr/control.h @@ -0,0 +1,39 @@ +#ifndef __ICS_EXPORT + +def_EHelper(jal) { + rtl_li(s, ddest, id_src2->imm); + rtl_j(s, id_src1->imm); +} + +def_EHelper(jalr) { + rtl_addi(s, s0, dsrc1, id_src2->imm); +// IFDEF(CONFIG_ENGINE_INTERPRETER, rtl_andi(s, s0, s0, ~0x1u)); + rtl_li(s, ddest, s->snpc); + IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); + rtl_jr(s, s0); +} + +def_EHelper(beq) { + rtl_jrelop(s, RELOP_EQ, dsrc1, dsrc2, id_dest->imm); +} + +def_EHelper(bne) { + rtl_jrelop(s, RELOP_NE, dsrc1, dsrc2, id_dest->imm); +} + +def_EHelper(blt) { + rtl_jrelop(s, RELOP_LT, dsrc1, dsrc2, id_dest->imm); +} + +def_EHelper(bge) { + rtl_jrelop(s, RELOP_GE, dsrc1, dsrc2, id_dest->imm); +} + +def_EHelper(bltu) { + rtl_jrelop(s, RELOP_LTU, dsrc1, dsrc2, id_dest->imm); +} + +def_EHelper(bgeu) { + rtl_jrelop(s, RELOP_GEU, dsrc1, dsrc2, id_dest->imm); +} +#endif diff --git a/libraries/NEMU/src/isa/riscv32/instr/decode.c b/libraries/NEMU/src/isa/riscv32/instr/decode.c new file mode 100644 index 0000000..20c0013 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/instr/decode.c @@ -0,0 +1,271 @@ +#include "../local-include/rtl.h" +#include +#include +#include + +def_all_THelper(); + +// decode operand helper +#define def_DopHelper(name) \ + void concat(decode_op_, name) (Decode *s, Operand *op, uint32_t val, bool flag) + +static inline def_DopHelper(i) { + op->imm = val; + print_Dop(op->str, OP_STR_SIZE, (flag ? "0x%x" : "%d"), op->imm); +} + +static inline def_DopHelper(r) { + bool load_val = flag; + static word_t zero_null = 0; + op->preg = (!load_val && val == 0) ? &zero_null : ®_l(val); + print_Dop(op->str, OP_STR_SIZE, "%s", reg_name(val, 4)); +} + +static inline def_DHelper(I) { + decode_op_r(s, id_src1, s->isa.instr.i.rs1, true); + decode_op_i(s, id_src2, s->isa.instr.i.simm11_0, false); + decode_op_r(s, id_dest, s->isa.instr.i.rd, false); +} + +static inline def_DHelper(U) { + decode_op_i(s, id_src1, s->isa.instr.u.imm31_12 << 12, true); + decode_op_r(s, id_dest, s->isa.instr.u.rd, false); +} + +static inline def_DHelper(S) { + decode_op_r(s, id_src1, s->isa.instr.s.rs1, true); + sword_t simm = (s->isa.instr.s.simm11_5 << 5) | s->isa.instr.s.imm4_0; + decode_op_i(s, id_src2, simm, false); + decode_op_r(s, id_dest, s->isa.instr.s.rs2, true); +} +#ifndef __ICS_EXPORT + +static inline def_DHelper(R) { + decode_op_r(s, id_src1, s->isa.instr.r.rs1, true); + decode_op_r(s, id_src2, s->isa.instr.r.rs2, true); + decode_op_r(s, id_dest, s->isa.instr.r.rd, false); +} + +static inline def_DHelper(J) { + sword_t offset = (s->isa.instr.j.simm20 << 20) | (s->isa.instr.j.imm19_12 << 12) | + (s->isa.instr.j.imm11 << 11) | (s->isa.instr.j.imm10_1 << 1); + decode_op_i(s, id_src1, s->pc + offset, true); + decode_op_r(s, id_dest, s->isa.instr.j.rd, false); + id_src2->imm = s->snpc; +} + +static inline def_DHelper(B) { + sword_t offset = (s->isa.instr.b.simm12 << 12) | (s->isa.instr.b.imm11 << 11) | + (s->isa.instr.b.imm10_5 << 5) | (s->isa.instr.b.imm4_1 << 1); + decode_op_i(s, id_dest, s->pc + offset, true); + decode_op_r(s, id_src1, s->isa.instr.b.rs1, true); + decode_op_r(s, id_src2, s->isa.instr.b.rs2, true); +} + +static inline def_DHelper(auipc) { + decode_U(s); + id_src1->imm += s->pc; +} + +static inline def_DHelper(csr) { + decode_op_r(s, id_src1, s->isa.instr.i.rs1, true); + decode_op_i(s, id_src2, s->isa.instr.csr.csr, true); + decode_op_r(s, id_dest, s->isa.instr.i.rd, false); +} +#endif + +def_THelper(load) { + print_Dop(id_src1->str, OP_STR_SIZE, "%d(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs1, 4)); + int mmu_mode = isa_mmu_state(); + if (mmu_mode == MMU_DIRECT) { + switch (s->isa.instr.i.funct3) { + TAB(0, lb) TAB(1, lh) TAB(2, lw) + TAB(4, lbu) TAB(5, lhu) + } + } else if (mmu_mode == MMU_TRANSLATE) { + switch (s->isa.instr.i.funct3) { + TAB(0, lb_mmu) TAB(1, lh_mmu) TAB(2, lw_mmu) + TAB(4, lbu_mmu) TAB(5, lhu_mmu) + } + } else { + assert(0); + } + return EXEC_ID_inv; +} + +def_THelper(store) { + print_Dop(id_src1->str, OP_STR_SIZE, "%d(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs1, 4)); + int mmu_mode = isa_mmu_state(); + if (mmu_mode == MMU_DIRECT) { + switch (s->isa.instr.i.funct3) { + TAB(0, sb) TAB(1, sh) TAB(2, sw) + } + } else if (mmu_mode == MMU_TRANSLATE) { + switch (s->isa.instr.i.funct3) { + TAB(0, sb_mmu) TAB(1, sh_mmu) TAB(2, sw_mmu) + } + } else { + assert(0); + } + return EXEC_ID_inv; +} + +def_THelper(c_addi_dispatch) { + if (id_src2->imm == 1) return table_p_inc(s); + if (id_src2->imm == -1u) return table_p_dec(s); + return table_c_addi(s); +} + +def_THelper(addi_dispatch) { + if (s->isa.instr.i.rs1 == 0) { + switch (id_src2->imm) { + TAB(0, p_li_0) TAB(1, p_li_1) + default: TAB(2, c_li); + } + } else { + switch (id_src2->imm) { + TAB(0, c_mv) + default: TAB(2, addi); + } + } +} + +def_THelper(op_imm_c) { + if (s->isa.instr.r.funct7 == 32) { + switch (s->isa.instr.r.funct3) { TAB(5, c_srai) } + } + switch (s->isa.instr.i.funct3) { + TAB(0, c_addi_dispatch) TAB(1, c_slli) TAB(2, slti) TAB(3, sltui) + TAB(4, xori) TAB(5, c_srli) TAB(6, ori) TAB(7, c_andi) + } + return EXEC_ID_inv; +} + +def_THelper(op_imm) { + if (s->isa.instr.i.rd == s->isa.instr.i.rs1) return table_op_imm_c(s); + if (s->isa.instr.r.funct7 == 32) { + switch (s->isa.instr.r.funct3) { TAB(5, srai) } + } + switch (s->isa.instr.i.funct3) { + TAB(0, addi_dispatch) TAB(1, slli) TAB(2, slti) TAB(3, sltui) + TAB(4, xori) TAB(5, srli) TAB(6, ori) TAB(7, andi) + } + return EXEC_ID_inv; +}; + +def_THelper(op) { + if (s->isa.instr.r.funct7 == 32) { + if (s->isa.instr.r.rd == s->isa.instr.r.rs1) { + switch (s->isa.instr.r.funct3) { + TAB(0, c_sub) + } + } + switch (s->isa.instr.r.funct3) { + TAB(0, sub) TAB(5, sra) + } + return EXEC_ID_inv; + } +#define pair(x, y) (((x) << 3) | (y)) + int index = pair(s->isa.instr.r.funct7 & 1, s->isa.instr.r.funct3); + if (s->isa.instr.r.rd == s->isa.instr.r.rs1) { + switch (index) { + TAB(pair(0, 0), c_add) + TAB(pair(0, 4), c_xor) + TAB(pair(0, 6), c_or) + TAB(pair(0, 7), c_and) + } + } + + switch (index) { + TAB(pair(0, 0), add) TAB(pair(0, 1), sll) TAB(pair(0, 2), slt) TAB(pair(0, 3), sltu) + TAB(pair(0, 4), xor) TAB(pair(0, 5), srl) TAB(pair(0, 6), or) TAB(pair(0, 7), and) + TAB(pair(1, 0), mul) TAB(pair(1, 1), mulh) TAB(pair(1, 2),mulhsu)TAB(pair(1, 3), mulhu) + TAB(pair(1, 4), div) TAB(pair(1, 5), divu) TAB(pair(1, 6), rem) TAB(pair(1, 7), remu) + } + return EXEC_ID_inv; +} + +def_THelper(branch) { + if (s->isa.instr.r.rs2 == 0) { + switch (s->isa.instr.i.funct3) { + TAB(0, c_beqz) TAB(1, c_bnez) + TAB(4, p_bltz) TAB(5, p_bgez) + } + } + if (s->isa.instr.r.rs1 == 0) { + switch (s->isa.instr.i.funct3) { + TAB(4, p_bgtz) TAB(5, p_blez) + } + } + switch (s->isa.instr.i.funct3) { + TAB(0, beq) TAB(1, bne) + TAB(4, blt) TAB(5, bge) TAB(6, bltu) TAB(7, bgeu) + } + return EXEC_ID_inv; +}; + +def_THelper(priv) { + switch (s->isa.instr.csr.csr) { + TAB(0, ecall) TAB (0x102, sret) TAB (0x120, sfence_vma) + } + return EXEC_ID_inv; +}; + +def_THelper(system) { + switch (s->isa.instr.i.funct3) { + TAB(0, priv) TAB (1, csrrw) TAB (2, csrrs) + } + return EXEC_ID_inv; +}; + +def_THelper(jal_dispatch) { + switch (s->isa.instr.j.rd) { + TAB(0, c_j) TAB(1, c_jal) + default: TAB(2, jal) + } +} + +def_THelper(jalr_dispatch) { + if (s->isa.instr.i.rd == 0 && id_src2->imm == 0) { + if (s->isa.instr.i.rs1 == 1) return table_p_ret(s); + else return table_c_jr(s); + } + return table_jalr(s); +} + +def_THelper(main) { + switch (s->isa.instr.i.opcode6_2) { + IDTAB(000, I, load) + IDTAB(004, I, op_imm) IDTAB(005, auipc, auipc) + IDTAB(010, S, store) + IDTAB(014, R, op) IDTAB(015, U, lui) + IDTAB(030, B, branch) IDTAB(031, I, jalr_dispatch) TAB (032, nemu_trap) IDTAB(033, J, jal_dispatch) + IDTAB(034, csr, system) + } + return table_inv(s); +}; + +int isa_fetch_decode(Decode *s) { + s->isa.instr.val = instr_fetch(&s->snpc, 4); + int idx = EXEC_ID_inv; + if (s->isa.instr.i.opcode1_0 == 0x3) { + idx = table_main(s); + } + + s->type = INSTR_TYPE_N; + switch (idx) { + case EXEC_ID_c_j: case EXEC_ID_c_jal: case EXEC_ID_jal: + s->jnpc = id_src1->imm; s->type = INSTR_TYPE_J; break; + + case EXEC_ID_beq: case EXEC_ID_bne: case EXEC_ID_blt: case EXEC_ID_bge: + case EXEC_ID_bltu: case EXEC_ID_bgeu: + case EXEC_ID_c_beqz: case EXEC_ID_c_bnez: + case EXEC_ID_p_bltz: case EXEC_ID_p_bgez: case EXEC_ID_p_blez: case EXEC_ID_p_bgtz: + s->jnpc = id_dest->imm; s->type = INSTR_TYPE_B; break; + + case EXEC_ID_p_ret: case EXEC_ID_c_jr: case EXEC_ID_jalr: + s->type = INSTR_TYPE_I; + } + + return idx; +} diff --git a/libraries/NEMU/src/isa/riscv32/instr/ldst.h b/libraries/NEMU/src/isa/riscv32/instr/ldst.h new file mode 100644 index 0000000..ced4488 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/instr/ldst.h @@ -0,0 +1,27 @@ +#ifdef __ICS_EXPORT +def_EHelper(lw) { + rtl_lms(s, ddest, dsrc1, id_src2->imm, 4); +} + +def_EHelper(sw) { + rtl_sm(s, ddest, dsrc1, id_src2->imm, 4); +} +#else +#define def_ldst_template(name, rtl_instr, width, mmu_mode) \ + def_EHelper(name) { \ + concat(rtl_, rtl_instr) (s, ddest, dsrc1, id_src2->imm, width, mmu_mode); \ + } + +#define def_all_ldst(suffix, mmu_mode) \ + def_ldst_template(concat(lw , suffix), lms, 4, mmu_mode) \ + def_ldst_template(concat(lh , suffix), lms, 2, mmu_mode) \ + def_ldst_template(concat(lb , suffix), lms, 1, mmu_mode) \ + def_ldst_template(concat(lhu, suffix), lm , 2, mmu_mode) \ + def_ldst_template(concat(lbu, suffix), lm , 1, mmu_mode) \ + def_ldst_template(concat(sw , suffix), sm , 4, mmu_mode) \ + def_ldst_template(concat(sh , suffix), sm , 2, mmu_mode) \ + def_ldst_template(concat(sb , suffix), sm , 1, mmu_mode) + +def_all_ldst(, MMU_DIRECT) +def_all_ldst(_mmu, MMU_TRANSLATE) +#endif diff --git a/libraries/NEMU/src/isa/riscv32/instr/muldiv.h b/libraries/NEMU/src/isa/riscv32/instr/muldiv.h new file mode 100644 index 0000000..3f6ed69 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/instr/muldiv.h @@ -0,0 +1,50 @@ +#ifndef __ICS_EXPORT +def_EHelper(mul) { + rtl_mulu_lo(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(mulh) { + rtl_muls_hi(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(mulhu) { + rtl_mulu_hi(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(mulhsu) { + // Algorithm: + // We want to obtain ans = mulhsu(a, b). + // Consider mulhu(a, b). + // If a >= 0, then ans = mulhu(a, b); + // If a = -x < 0, then a = 2^32 - x in two's complement + // Then + // mulhu(a, b) = mulhu(2^32 -x , b) = ((2^32 - x)b) >> 32 + // = ((2^32b) >> 32) + ((-xb) >> 32) + // = b + mulhsu(a, b) = b + ans + // Therefore, ans = mulhu(a, b) - b + // + // In the end, ans = (a < 0 ? mulhu(a, b) - b : mulhu(a, b)) + // = mulhu(a, b) - (a < 0 ? b : 0) + + rtl_sari(s, s0, dsrc1, 31); + rtl_and(s, s0, dsrc2, s0); // s0 = (id_src1->val < 0 ? id_src2->val : 0) + rtl_mulu_hi(s, s1, dsrc1, dsrc2); + rtl_sub(s, ddest, s1, s0); +} + +def_EHelper(div) { + rtl_divs_q(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(divu) { + rtl_divu_q(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(rem) { + rtl_divs_r(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(remu) { + rtl_divu_r(s, ddest, dsrc1, dsrc2); +} +#endif diff --git a/libraries/NEMU/src/isa/riscv32/instr/pseudo.h b/libraries/NEMU/src/isa/riscv32/instr/pseudo.h new file mode 100644 index 0000000..d0d346a --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/instr/pseudo.h @@ -0,0 +1,67 @@ +// standard pseudo instructions +// See Chapter 25 "RISC-V Assembly Programmer's Handbook" in the RISC-V ISA manual +// +// The following pseudo instructions are excluded +// (1) not present in RV32 +// negw sext.w +// (2) seem not frequently present during execution +// nop not neg +// seqz snez sltz sgtz +// jalr(rs) +// [[all CSR instructions]] +// (3) only expansion without optimization +// la +// l{b|h|w|d} symbol +// s{b|h|w|d} symbol +// bgt ble bgtu bleu +// call tail +// fence +// (4) still not considered +// fmv.s fabs.s fneg.s +// fmv.d fabs.d fneg.d +// fl{w|d} symbol +// fs{w|d} symbol +// (5) already provided in RVC +// j jal(ra) +// beqz bnez +// li mv + +def_EHelper(p_blez) { + rtl_jrelop(s, RELOP_GE, rz, dsrc2, id_dest->imm); +} + +def_EHelper(p_bgtz) { + rtl_jrelop(s, RELOP_LT, rz, dsrc2, id_dest->imm); +} + +def_EHelper(p_bltz) { + rtl_jrelop(s, RELOP_LT, dsrc1, rz, id_dest->imm); +} + +def_EHelper(p_bgez) { + rtl_jrelop(s, RELOP_GE, dsrc1, rz, id_dest->imm); +} + +def_EHelper(p_ret) { +// IFDEF(CONFIG_ENGINE_INTERPRETER, rtl_andi(s, s0, s0, ~0x1u)); + IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); + rtl_jr(s, &cpu.gpr[1]._32); +} + +// non-standard pseudo instructions + +def_EHelper(p_li_0) { + rtl_li(s, ddest, 0); +} + +def_EHelper(p_li_1) { + rtl_li(s, ddest, 1); +} + +def_EHelper(p_inc) { + rtl_addi(s, ddest, ddest, 1); +} + +def_EHelper(p_dec) { + rtl_subi(s, ddest, ddest, 1); +} diff --git a/libraries/NEMU/src/isa/riscv32/instr/special.h b/libraries/NEMU/src/isa/riscv32/instr/special.h new file mode 100644 index 0000000..8d76970 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/instr/special.h @@ -0,0 +1,11 @@ +def_EHelper(inv) { + save_globals(s); + rtl_hostcall(s, HOSTCALL_INV, NULL, NULL, 0); + longjmp_exec(NEMU_EXEC_END); +} + +def_EHelper(nemu_trap) { + save_globals(s); + rtl_hostcall(s, HOSTCALL_EXIT, NULL, &cpu.gpr[10]._32, 0); // gpr[10] is $a0 + longjmp_exec(NEMU_EXEC_END); +} diff --git a/libraries/NEMU/src/isa/riscv32/instr/system.h b/libraries/NEMU/src/isa/riscv32/instr/system.h new file mode 100644 index 0000000..7f610a1 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/instr/system.h @@ -0,0 +1,38 @@ +#ifndef __ICS_EXPORT + +#define csr_difftest() IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 3)) +#define priv_difftest() IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)) + +def_EHelper(csrrw) { + csr_difftest(); + rtl_hostcall(s, HOSTCALL_CSR, ddest, dsrc1, id_src2->imm); + rtl_priv_next(s); +} + +def_EHelper(csrrs) { + csr_difftest(); + rtl_hostcall(s, HOSTCALL_CSR, s0, NULL, id_src2->imm); + rtl_or(s, s1, s0, dsrc1); + rtl_mv(s, ddest, s0); + rtl_hostcall(s, HOSTCALL_CSR, NULL, s1, id_src2->imm); + rtl_priv_next(s); +} + +def_EHelper(ecall) { + priv_difftest(); + rtl_trap(s, s->pc, 9); + rtl_priv_jr(s, t0); +} + +def_EHelper(sret) { + priv_difftest(); + rtl_hostcall(s, HOSTCALL_PRIV, s0, NULL, 0x102); + rtl_priv_jr(s, s0); +} + +def_EHelper(sfence_vma) { + priv_difftest(); + rtl_hostcall(s, HOSTCALL_PRIV, NULL, NULL, 0x120); + rtl_priv_next(s); +} +#endif diff --git a/libraries/NEMU/src/isa/riscv32/local-include/intr.h b/libraries/NEMU/src/isa/riscv32/local-include/intr.h new file mode 100644 index 0000000..617da1f --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/local-include/intr.h @@ -0,0 +1,8 @@ +#ifndef __RISCV32_INTR_H__ +#define __RISCV32_INTR_H__ + +#include + +word_t raise_intr(uint32_t NO, vaddr_t epc); + +#endif diff --git a/libraries/NEMU/src/isa/riscv32/local-include/reg.h b/libraries/NEMU/src/isa/riscv32/local-include/reg.h new file mode 100644 index 0000000..5c1d07d --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/local-include/reg.h @@ -0,0 +1,19 @@ +#ifndef __RISCV32_REG_H__ +#define __RISCV32_REG_H__ + +#include + +static inline int check_reg_index(int index) { + IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); + return index; +} + +#define reg_l(index) (cpu.gpr[check_reg_index(index)]._32) + +static inline const char* reg_name(int index, int width) { + extern const char* regsl[]; + IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); + return regsl[index]; +} + +#endif diff --git a/libraries/NEMU/src/isa/riscv32/local-include/rtl.h b/libraries/NEMU/src/isa/riscv32/local-include/rtl.h new file mode 100644 index 0000000..0afbb48 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/local-include/rtl.h @@ -0,0 +1,9 @@ +#ifndef __RISCV32_RTL_H__ +#define __RISCV32_RTL_H__ + +#include +#include "reg.h" + +// no isa-dependent rtl instructions + +#endif diff --git a/libraries/NEMU/src/isa/riscv32/logo.c b/libraries/NEMU/src/isa/riscv32/logo.c new file mode 100644 index 0000000..3ea54c2 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/logo.c @@ -0,0 +1,48 @@ +// refer to http://www.patorjk.com/software/taag/#p=display&f=Big&t=Type%20Something%20 + +/* + _ __ __ _ + (_) | \/ | | | + _ __ _ ___ ___ ________ __ | \ / | __ _ _ __ _ _ __ _| | + | '__| / __|/ __|______\ \ / / | |\/| |/ _` | '_ \| | | |/ _` | | + | | | \__ \ (__ \ V / | | | | (_| | | | | |_| | (_| | | + |_| |_|___/\___| \_/ |_| |_|\__,_|_| |_|\__,_|\__,_|_| + +*/ + +unsigned char isa_logo[] = { + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x20, + 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x28, 0x5f, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x7c, 0x20, 0x20, 0x5c, 0x2f, 0x20, 0x20, 0x7c, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x20, + 0x7c, 0x0a, 0x20, 0x20, 0x5f, 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x20, 0x5f, + 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x5f, 0x5f, 0x5f, 0x5f, + 0x5f, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x20, 0x7c, 0x20, + 0x5c, 0x20, 0x20, 0x2f, 0x20, 0x7c, 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x20, + 0x5f, 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x20, 0x5f, 0x20, + 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x7c, 0x20, + 0x27, 0x5f, 0x5f, 0x7c, 0x20, 0x2f, 0x20, 0x5f, 0x5f, 0x7c, 0x2f, 0x20, + 0x5f, 0x5f, 0x7c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5c, 0x20, 0x5c, + 0x20, 0x2f, 0x20, 0x2f, 0x20, 0x7c, 0x20, 0x7c, 0x5c, 0x2f, 0x7c, 0x20, + 0x7c, 0x2f, 0x20, 0x5f, 0x60, 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x20, 0x5c, + 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x2f, 0x20, 0x5f, 0x60, 0x20, + 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x20, 0x7c, 0x20, + 0x5c, 0x5f, 0x5f, 0x20, 0x5c, 0x20, 0x28, 0x5f, 0x5f, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x20, 0x56, 0x20, 0x2f, 0x20, 0x20, + 0x7c, 0x20, 0x7c, 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x7c, + 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x5f, 0x7c, + 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x0a, 0x20, + 0x7c, 0x5f, 0x7c, 0x20, 0x20, 0x7c, 0x5f, 0x7c, 0x5f, 0x5f, 0x5f, 0x2f, + 0x5c, 0x5f, 0x5f, 0x5f, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x5c, 0x5f, 0x2f, 0x20, 0x20, 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x20, + 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x20, + 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, + 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x0a +}; diff --git a/libraries/NEMU/src/isa/riscv32/reg.c b/libraries/NEMU/src/isa/riscv32/reg.c new file mode 100644 index 0000000..7039531 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/reg.c @@ -0,0 +1,40 @@ +#include +#include "local-include/reg.h" + +const char *regsl[] = { + "$0", "ra", "sp", "gp", "tp", "t0", "t1", "t2", + "s0", "s1", "a0", "a1", "a2", "a3", "a4", "a5", + "a6", "a7", "s2", "s3", "s4", "s5", "s6", "s7", + "s8", "s9", "s10", "s11", "t3", "t4", "t5", "t6" +}; + +#ifndef __ICS_EXPORT +void isa_reg_display() { + int i; + for (i = 0; i < 32; i ++) { + printf("%s: 0x%08x ", regsl[i], cpu.gpr[i]._32); + if (i % 4 == 3) printf("\n"); + } + printf("pc: 0x%08x\n", cpu.pc); +} + +word_t isa_reg_str2val(const char *s, bool *success) { + int i; + *success = true; + for (i = 0; i < 32; i ++) { + if (strcmp(regsl[i], s) == 0) return reg_l(i); + } + + if (strcmp("pc", s) == 0) return cpu.pc; + + *success = false; + return 0; +} +#else +void isa_reg_display() { +} + +word_t isa_reg_str2val(const char *s, bool *success) { + return 0; +} +#endif diff --git a/libraries/NEMU/src/isa/riscv32/system/intr.c b/libraries/NEMU/src/isa/riscv32/system/intr.c new file mode 100644 index 0000000..8d4c62c --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/system/intr.c @@ -0,0 +1,31 @@ +#include "../local-include/rtl.h" +#include "../local-include/intr.h" + +#ifndef __ICS_EXPORT +word_t raise_intr(uint32_t NO, vaddr_t epc) { + cpu.scause = NO; + cpu.sepc = epc; + cpu.sstatus.spie = cpu.sstatus.sie; + cpu.sstatus.sie = 0; + return cpu.stvec; +} + +void isa_query_intr() { + if (cpu.INTR && cpu.sstatus.sie) { + cpu.INTR = false; + cpu.pc = raise_intr(0x80000005, cpu.pc); + } +} + +#else +word_t raise_intr(uint32_t NO, vaddr_t epc) { + /* TODO: Trigger an interrupt/exception with ``NO''. + * That is, use ``NO'' to index the IDT. + */ + + return 0; +} + +void isa_query_intr() { +} +#endif diff --git a/libraries/NEMU/src/isa/riscv32/system/mmu.c b/libraries/NEMU/src/isa/riscv32/system/mmu.c new file mode 100644 index 0000000..b6419e8 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/system/mmu.c @@ -0,0 +1,90 @@ +#include +#include +#include + +#ifndef __ICS_EXPORT +/* the 32bit Page Table Entry(second level page table) data structure */ +typedef union PageTableEntry { + struct { + uint32_t valid : 1; + uint32_t read : 1; + uint32_t write : 1; + uint32_t exec : 1; + uint32_t user : 1; + uint32_t global : 1; + uint32_t access : 1; + uint32_t dirty : 1; + uint32_t rsw : 2; + uint32_t ppn :22; + }; + uint32_t val; +} PTE; + +typedef union { + struct { + uint32_t pf_off :12; + uint32_t pt_idx :10; + uint32_t pdir_idx :10; + }; + uint32_t addr; +} PageAddr; + +typedef struct { + uint32_t vpn; + uint32_t ppage; +} TLBEntry; + +static TLBEntry TLB[4096] = {}; +static bool TLBValid[4096] = {}; + +static inline int TLB_hash(uint32_t vpn) { + return vpn % ARRLEN(TLB); +} + +static paddr_t ptw(vaddr_t vaddr, int type) { + uint32_t vpn = vaddr >> 12; + int idx = TLB_hash(vpn); + TLBEntry *e = &TLB[idx]; + //if (e->vpn == vpn && TLBValid[idx]) { + // if (cpu.pc == 0x40000120) Log("vaddr = 0x%x, ppage = 0x%x", vaddr, e->ppage); + // return e->ppage; + //} + + PageAddr *addr = (void *)&vaddr; + paddr_t pdir_base = cpu.satp.ppn << 12; + + PTE pde; + pde.val = paddr_read(pdir_base + addr->pdir_idx * 4, 4); + if (!pde.valid) { + panic("pc = %x, vaddr = %x, pdir_base = %x, pde = %x", cpu.pc, vaddr, pdir_base, pde.val); + } + + paddr_t pt_base = pde.ppn << 12; + PTE pte; + pte.val = paddr_read(pt_base + addr->pt_idx * 4, 4); + if (!pte.valid) { + panic("pc = %x, vaddr = %x, pt_base = %x, pte = %x", cpu.pc, vaddr, pt_base, pte.val); + } + + // update TLB + *e = (TLBEntry) { .vpn = vpn, .ppage = pte.ppn << 12 }; + TLBValid[idx] = true; + + //bool is_write = (type == MEM_TYPE_WRITE); + //if (!pte.access || (pte.dirty == 0 && is_write)) { + // pte.access = 1; + // pte.dirty |= is_write; + // paddr_write(pt_base + addr->pt_idx * 4, 4, pte.val); + //} + + return pte.ppn << 12; +} + +paddr_t isa_mmu_translate(vaddr_t vaddr, int len, int type) { + return ptw(vaddr, type) | MEM_RET_OK; +} +#else +paddr_t isa_mmu_translate(vaddr_t vaddr, int len, int type) { + return MEM_RET_FAIL; +} +#endif diff --git a/libraries/NEMU/src/isa/riscv32/system/priv.c b/libraries/NEMU/src/isa/riscv32/system/priv.c new file mode 100644 index 0000000..ab56a7e --- /dev/null +++ b/libraries/NEMU/src/isa/riscv32/system/priv.c @@ -0,0 +1,48 @@ +#include "../local-include/rtl.h" +#include "../local-include/intr.h" +#include + +static inline word_t* csr_decode(uint32_t csr) { + switch (csr) { + case 0x180: return &cpu.satp.val; + case 0x100: return &cpu.sstatus.val; + case 0x105: return &cpu.stvec; + case 0x140: return &cpu.sscratch; + case 0x141: return &cpu.sepc; + case 0x142: return &cpu.scause; + default: panic("unimplemented CSR 0x%x", csr); + } + return NULL; +} + +static void csrrw(rtlreg_t *dest, const rtlreg_t *src, uint32_t csrid) { + word_t *csr = csr_decode(csrid); + word_t tmp = (src != NULL ? *src : 0); + if (dest != NULL) { *dest = *csr; } + if (src != NULL) { *csr = tmp; } +} + +static word_t priv_instr(uint32_t op, const rtlreg_t *src) { + switch (op) { + case 0x102: // sret + cpu.sstatus.sie = cpu.sstatus.spie; + cpu.sstatus.spie = 1; + return cpu.sepc; + case 0x120:; // sfence.vma + mmu_tlb_flush(*src); + return 0; + default: panic("Unsupported privilige operation = %d", op); + } + return 0; +} + +void isa_hostcall(uint32_t id, rtlreg_t *dest, const rtlreg_t *src, uint32_t imm) { + word_t ret = 0; + switch (id) { + case HOSTCALL_CSR: csrrw(dest, src, imm); return; + case HOSTCALL_TRAP: ret = raise_intr(imm, *src); break; + case HOSTCALL_PRIV: ret = priv_instr(imm, src); break; + default: panic("Unsupported hostcall ID = %d", id); + } + if (dest) *dest = ret; +} diff --git a/libraries/NEMU/src/isa/riscv64/Kconfig b/libraries/NEMU/src/isa/riscv64/Kconfig new file mode 100644 index 0000000..385fb6a --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/Kconfig @@ -0,0 +1,9 @@ +menu "ISA-dependent Options for riscv64" + +config CLINT_MMIO + hex "MMIO address of CLINT" + default 0xa2000000 + +config RVV_010 + bool "Experimental RISC-V Vector Extension v0.10" +endmenu diff --git a/libraries/NEMU/src/isa/riscv64/clint.c b/libraries/NEMU/src/isa/riscv64/clint.c new file mode 100644 index 0000000..127384a --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/clint.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include "local-include/csr.h" + +#ifndef CONFIG_SHARE +#define CLINT_MTIMECMP (0x4000 / sizeof(clint_base[0])) +#define CLINT_MTIME (0xBFF8 / sizeof(clint_base[0])) +#define TIMEBASE 10000000ul + +static uint64_t *clint_base = NULL; +static uint64_t boot_time = 0; + +void update_clint() { +#ifdef CONFIG_DETERMINISTIC + clint_base[CLINT_MTIME] += TIMEBASE / 10000; +#else + uint64_t now = get_time() - boot_time; + clint_base[CLINT_MTIME] = TIMEBASE * now / 1000000; +#endif + mip->mtip = (clint_base[CLINT_MTIME] >= clint_base[CLINT_MTIMECMP]); +} + +uint64_t clint_uptime() { + update_clint(); + return clint_base[CLINT_MTIME]; +} + +static void clint_io_handler(uint32_t offset, int len, bool is_write) { + update_clint(); +} + +void init_clint() { + clint_base = (uint64_t *)new_space(0x10000); + add_mmio_map("clint", CONFIG_CLINT_MMIO, (uint8_t *)clint_base, 0x10000, clint_io_handler); + IFNDEF(CONFIG_DETERMINISTIC, add_alarm_handle(update_clint)); + boot_time = get_time(); +} +#endif diff --git a/libraries/NEMU/src/isa/riscv64/difftest/dut.c b/libraries/NEMU/src/isa/riscv64/difftest/dut.c new file mode 100644 index 0000000..9c04307 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/difftest/dut.c @@ -0,0 +1,23 @@ +#include +#include +#include +#include "../local-include/reg.h" +#include + +bool isa_difftest_checkregs(CPU_state *ref_r, vaddr_t pc) { + if (memcmp(&cpu.gpr[1], &ref_r->gpr[1], DIFFTEST_REG_SIZE - sizeof(cpu.gpr[0]))) { + int i; + // do not check $0 + for (i = 1; i < ARRLEN(cpu.gpr); i ++) { + difftest_check_reg(reg_name(i, 4), pc, ref_r->gpr[i]._64, cpu.gpr[i]._64); + } + difftest_check_reg("pc", pc, ref_r->pc, cpu.pc); + return false; + } + return true; +} + +void isa_difftest_attach() { + ref_difftest_memcpy(CONFIG_MBASE, guest_to_host(CONFIG_MBASE), CONFIG_MSIZE, DIFFTEST_TO_REF); + ref_difftest_regcpy(&cpu, DIFFTEST_TO_REF); +} diff --git a/libraries/NEMU/src/isa/riscv64/difftest/ref.c b/libraries/NEMU/src/isa/riscv64/difftest/ref.c new file mode 100644 index 0000000..36cf84a --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/difftest/ref.c @@ -0,0 +1,110 @@ +#include +#include +#include +#include "../local-include/intr.h" +#include "../local-include/csr.h" + +// csr_prepare() & csr_writeback() are used to maintain +// a compact mirror of critical CSRs +// For processor difftest only +static void csr_prepare() { + cpu.mstatus = mstatus->val; + cpu.mcause = mcause->val; + cpu.mepc = mepc->val; + + cpu.sstatus = csrid_read(0x100); // sstatus + cpu.scause = scause->val; + cpu.sepc = sepc->val; + + cpu.satp = satp->val; + cpu.mip = mip->val; + cpu.mie = mie->val; + cpu.mscratch = mscratch->val; + cpu.sscratch = sscratch->val; + cpu.mideleg = mideleg->val; + cpu.medeleg = medeleg->val; + cpu.mtval = mtval->val; + cpu.stval = stval->val; + cpu.mtvec = mtvec->val; + cpu.stvec = stvec->val; +#ifdef CONFIG_RVV_010 + cpu.vtype = vtype->val; + cpu.vstart = vstart->val; + cpu.vxsat = vxsat->val; + cpu.vxrm = vxrm->val; + cpu.vl = vl->val; +#endif // CONFIG_RVV_010 +} + +static void csr_writeback() { + mstatus->val = cpu.mstatus; + mcause ->val = cpu.mcause ; + mepc ->val = cpu.mepc ; + //sstatus->val = cpu.sstatus; // sstatus is a shadow of mstatus + scause ->val = cpu.scause ; + sepc ->val = cpu.sepc ; + + satp->val = cpu.satp; + mip->val = cpu.mip; + mie->val = cpu.mie; + mscratch->val = cpu.mscratch; + sscratch->val = cpu.sscratch; + mideleg->val = cpu.mideleg; + medeleg->val = cpu.medeleg; + mtval->val = cpu.mtval; + stval->val = cpu.stval; + mtvec->val = cpu.mtvec; + stvec->val = cpu.stvec; +#ifdef CONFIG_RVV_010 + vtype->val = cpu.vtype; + vstart->val = cpu.vstart; + vxsat->val = cpu.vxsat; + vxrm->val = cpu.vxrm; + vl->val = cpu.vl; +#endif //CONFIG_RVV_010 +} + +void isa_difftest_regcpy(void *dut, bool direction) { + if (direction == DIFFTEST_TO_REF) { + memcpy(&cpu, dut, DIFFTEST_REG_SIZE); + csr_writeback(); + } else { + csr_prepare(); + memcpy(dut, &cpu, DIFFTEST_REG_SIZE); + } +} + +void isa_difftest_csrcpy(void *dut, bool direction) { + if (direction == DIFFTEST_TO_REF) { + memcpy(csr_array, dut, 4096 * sizeof(rtlreg_t)); + } else { + memcpy(dut, csr_array, 4096 * sizeof(rtlreg_t)); + } +} + +void isa_difftest_uarchstatus_cpy(void *dut, bool direction) { + if (direction == DIFFTEST_TO_REF) { + struct SyncState* ms = (struct SyncState*)dut; + cpu.lr_valid = ms->lrscValid; + cpu.lr_addr = ms->lrscAddr; + } else { + struct SyncState ms; + ms.lrscValid = cpu.lr_valid; + ms.lrscAddr = cpu.lr_addr; + memcpy(dut, &ms, sizeof(struct SyncState)); + } +} + +void isa_difftest_raise_intr(word_t NO) { + cpu.pc = raise_intr(NO, cpu.pc); +} + +#ifdef CONFIG_GUIDED_EXEC +void isa_difftest_guided_exec(void * guide) { + memcpy(&cpu.execution_guide, guide, sizeof(struct ExecutionGuide)); + + cpu.guided_exec = true; + cpu_exec(1); + cpu.guided_exec = false; +} +#endif \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/include/isa-all-instr.h b/libraries/NEMU/src/isa/riscv64/include/isa-all-instr.h new file mode 100644 index 0000000..afb32a4 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/include/isa-all-instr.h @@ -0,0 +1,118 @@ +#ifndef __RISCV64_ISA_ALL_INSTR_H__ +#define __RISCV64_ISA_ALL_INSTR_H__ +#include +#include "../local-include/rtl.h" + +#ifdef CONFIG_DEBUG +#define AMO_INSTR_BINARY(f) \ + f(lr_w) f(lr_d) +#define AMO_INSTR_TERNARY(f) \ + f(sc_w) f(sc_d) \ + f(amoadd_w) f(amoswap_w) f(amoxor_w) f(amoor_w) f(amoand_w) \ + f(amomin_w) f(amomax_w) f(amominu_w) f(amomaxu_w) \ + f(amoadd_d) f(amoswap_d) f(amoxor_d) f(amoor_d) f(amoand_d) \ + f(amomin_d) f(amomax_d) f(amominu_d) f(amomaxu_d) +#define SYS_INSTR_NULLARY(f) \ + f(ecall) f(mret) f(sret) f(sfence_vma) f(wfi) +#define SYS_INSTR_TERNARY(f) \ + f(csrrw) f(csrrs) f(csrrc) f(csrrwi) f(csrrsi) f(csrrci) +#else +#define AMO_INSTR_BINARY(f) +#define AMO_INSTR_TERNARY(f) f(atomic) +#define SYS_INSTR_NULLARY(f) +#define SYS_INSTR_TERNARY(f) f(system) +#endif + +#ifdef CONFIG_RVV_010 +#define VECTOR_INSTR_TERNARY(f) \ + f(vadd) f(vsub) f(vrsub) f(vminu) f(vmin) \ + f(vmaxu) f(vmax) f(vand) f(vor) f(vxor) \ + f(vrgather) \ + f(vadc) f(vmadc) f(vsbc) f(vmsbc) \ + f(vmerge) f(vmseq) f(vmsne) f(vmsltu) \ + f(vmslt) f(vmsleu) f(vmsle) f(vmsgtu) \ + f(vmsgt) f(vsaddu) f(vsadd) f(vssubu) \ + f(vssub) f(vaadd) f(vsll) f(vasub) \ + f(vsmul) f(vsrl) f(vsra) \ + f(vssra) f(vnsrl) f(vnsra) f(vnclipu) \ + f(vnclip) f(vssrl) f(vwredsumu) f(vwredsum) \ + f(vdotu) f(vdot) f(vwsmaccu) f(vwsmacc) \ + f(vwsmaccsu) f(vwsmaccus) f(vredsum) \ + f(vredand) f(vredor) f(vredxor) f(vredminu) \ + f(vredmin) f(vredmaxu) f(vredmax) f(vmpopc) \ + f(vmfirst) f(vmunaryo) f(vcompress) f(vmandnot) \ + f(vmand) f(vmor) f(vmxor) f(vmornot) f(vmnand) \ + f(vmnor) f(vmxnor) f(vdivu) f(vdiv) f(vremu) \ + f(vrem) f(vmulhu) f(vmul) f(vmulhsu) f(vmulh) \ + f(vmadd) f(vnmsub) f(vmacc) f(vnmsac) f(vwaddu) \ + f(vwadd) f(vwsub) f(vwsubu) f(vwaddu_w) f(vwadd_w) \ + f(vwsubu_w) f(vwsub_w) f(vwmulu) f(vwmulsu) \ + f(vwmul) f(vwmaccu) f(vwnmacc) f(vwmaccsu) \ + f(vwmaccus) f(vlduu) f(vldsu) f(vldxu) \ + f(vldus) f(vldss) f(vldxs) f(vstu) \ + f(vsts) f(vstx) f(vstxu) f(vsetvl) \ + f(vlduu_mmu) f(vldsu_mmu) f(vldxu_mmu) \ + f(vldus_mmu) f(vldss_mmu) f(vldxs_mmu) f(vstu_mmu) \ + f(vsts_mmu) f(vstx_mmu) f(vstxu_mmu) f(vslideup) f(vslidedown) +#else // CONFIG_RVV_010 +#define VECTOR_INSTR_TERNARY(f) +#endif // CONFIG_RVV_010 + +// + +#define FLOAT_INSTR_TERNARY(f) \ + f(fadds) f(fsubs) f(fmuls) f(fdivs) f(fmins) f(fmaxs) \ + f(faddd) f(fsubd) f(fmuld) f(fdivd) f(fmind) f(fmaxd) \ + f(fmadds) f(fmsubs) f(fnmsubs) f(fnmadds) f(fmaddd) f(fmsubd) f(fnmsubd) f(fnmaddd) + +#define INSTR_NULLARY(f) \ + f(inv) f(rt_inv) f(nemu_trap) \ + f(fence_i) f(fence) \ + SYS_INSTR_NULLARY(f) \ + f(p_ret) + +#define INSTR_UNARY(f) \ + f(p_li_0) f(p_li_1) + +#define INSTR_BINARY(f) \ + f(lui) f(auipc) f(jal) \ + f(ld) f(lw) f(lh) f(lb) f(lwu) f(lhu) f(lbu) f(sd) f(sw) f(sh) f(sb) \ + f(c_j) f(p_jal) f(c_jr) f(c_jalr) \ + f(c_beqz) f(c_bnez) f(c_mv) f(p_sext_w) \ + AMO_INSTR_BINARY(f) \ + f(ld_mmu) f(lw_mmu) f(lh_mmu) f(lb_mmu) f(lwu_mmu) f(lhu_mmu) f(lbu_mmu) \ + f(sd_mmu) f(sw_mmu) f(sh_mmu) f(sb_mmu) \ + f(flw) f(fsw) f(flw_mmu) f(fsw_mmu) \ + f(fsqrts) f(fles) f(flts) f(feqs) \ + f(fcvt_s_w) f(fcvt_s_wu) f(fcvt_s_l) f(fcvt_s_lu) \ + f(fcvt_w_s) f(fcvt_wu_s) f(fcvt_l_s) f(fcvt_lu_s) \ + f(fsgnjs) f(fsgnjns) f(fsgnjxs) \ + f(fmv_x_w) f(fmv_w_x) f(fclasss) f(fclassd)\ + f(fld) f(fsd) f(fld_mmu) f(fsd_mmu) \ + f(fsqrtd) f(fled) f(fltd) f(feqd) \ + f(fcvt_d_w) f(fcvt_d_wu) f(fcvt_d_l) f(fcvt_d_lu) \ + f(fcvt_w_d) f(fcvt_wu_d) f(fcvt_l_d) f(fcvt_lu_d) \ + f(fsgnjd) f(fsgnjnd) f(fsgnjxd) \ + f(fmv_x_d) f(fmv_d_x) \ + f(fcvt_d_s) f(fcvt_s_d) + +#define INSTR_TERNARY(f) \ + f(add) f(sll) f(srl) f(slt) f(sltu) f(xor) f(or) f(sub) f(sra) f(and) \ + f(addi) f(slli) f(srli) f(slti) f(sltui) f(xori) f(ori) f(srai) f(andi) \ + f(addw) f(sllw) f(srlw) f(subw) f(sraw) \ + f(addiw) f(slliw) f(srliw) f(sraiw) \ + f(jalr) f(beq) f(bne) f(blt) f(bge) f(bltu) f(bgeu) \ + f(mul) f(mulh) f(mulhu) f(mulhsu) f(div) f(divu) f(rem) f(remu) \ + f(mulw) f(divw) f(divuw) f(remw) f(remuw) \ + f(c_li) f(c_addi) f(c_slli) f(c_srli) f(c_srai) f(c_andi) f(c_addiw) \ + f(c_add) f(c_and) f(c_or) f(c_xor) f(c_sub) f(c_addw) f(c_subw) \ + f(p_blez) f(p_bgez) f(p_bltz) f(p_bgtz) \ + f(p_inc) f(p_dec) \ + AMO_INSTR_TERNARY(f) \ + SYS_INSTR_TERNARY(f) \ + FLOAT_INSTR_TERNARY(f) \ + VECTOR_INSTR_TERNARY(f) + +def_all_EXEC_ID(); + +#endif // __RISCV64_ISA_ALL_INSTR_H__ diff --git a/libraries/NEMU/src/isa/riscv64/include/isa-def.h b/libraries/NEMU/src/isa/riscv64/include/isa-def.h new file mode 100644 index 0000000..e3792bf --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/include/isa-def.h @@ -0,0 +1,189 @@ +#ifndef __ISA_RISCV64_H__ +#define __ISA_RISCV64_H__ + +#include +#ifdef CONFIG_RVV_010 +#include "../instr/rvv/vreg.h" +#endif // CONFIG_RVV_010 + +#define FORCE_RAISE_PF +// #define XIANGSHAN_DEBUG + +// Execution Guide generated by DUT +struct ExecutionGuide { + uint64_t exceptionNo; + uint64_t mtval; + uint64_t stval; +}; + +typedef struct { + union { + uint64_t _64; + } gpr[32]; + + union { + uint64_t _64; + } fpr[32]; + + // shadow CSRs for difftest + uint64_t pc; + uint64_t mstatus, mcause, mepc; + uint64_t sstatus, scause, sepc; + + uint64_t satp, mip, mie, mscratch, sscratch, mideleg, medeleg; +#ifdef CONFIG_RVV_010 + //vector + union { + uint64_t _64[VENUM64]; + uint32_t _32[VENUM32]; + uint16_t _16[VENUM16]; + uint8_t _8[VENUM8]; + } vr[32]; + + uint64_t vstart; + uint64_t vxsat, vxrm, vl, vtype; +#endif // CONFIG_RVV_010 + + uint64_t mtval, stval, mtvec, stvec; + uint64_t mode; + + // exec state + bool amo; + int mem_exception; + + // for LR/SC + uint64_t lr_addr; + uint64_t lr_valid; + + bool INTR; + + // Guided exec + bool guided_exec; + struct ExecutionGuide execution_guide; +} riscv64_CPU_state; + +// decode +typedef struct { + union { + struct { + uint32_t opcode1_0 : 2; + uint32_t opcode6_2 : 5; + uint32_t rd : 5; + uint32_t funct3 : 3; + uint32_t rs1 : 5; + uint32_t rs2 : 5; + uint32_t funct7 : 7; + } r; + struct { + uint32_t opcode1_0 : 2; + uint32_t opcode6_2 : 5; + uint32_t rd : 5; + uint32_t funct3 : 3; + uint32_t rs1 : 5; + int32_t simm11_0 :12; + } i; + struct { + uint32_t opcode1_0 : 2; + uint32_t opcode6_2 : 5; + uint32_t imm4_0 : 5; + uint32_t funct3 : 3; + uint32_t rs1 : 5; + uint32_t rs2 : 5; + int32_t simm11_5 : 7; + } s; + struct { + uint32_t opcode1_0 : 2; + uint32_t opcode6_2 : 5; + uint32_t imm11 : 1; + uint32_t imm4_1 : 4; + uint32_t funct3 : 3; + uint32_t rs1 : 5; + uint32_t rs2 : 5; + uint32_t imm10_5 : 6; + int32_t simm12 : 1; + } b; + struct { + uint32_t opcode1_0 : 2; + uint32_t opcode6_2 : 5; + uint32_t rd : 5; + int32_t simm31_12 :20; + } u; + struct { + uint32_t opcode1_0 : 2; + uint32_t opcode6_2 : 5; + uint32_t rd : 5; + uint32_t imm19_12 : 8; + uint32_t imm11 : 1; + uint32_t imm10_1 :10; + int32_t simm20 : 1; + } j; + struct { + uint32_t pad7 :20; + uint32_t csr :12; + } csr; + struct { + uint32_t opcode1_0 : 2; + uint32_t opcode6_2 : 5; + uint32_t rd : 5; + uint32_t rm : 3; + uint32_t rs1 : 5; + uint32_t rs2 : 5; + uint32_t fmt : 2; + uint32_t funct5 : 5; + } fp; + #ifdef CONFIG_RVV_010 + //vector-OP-V + struct { + uint32_t pad16 : 7; + uint32_t v_vd : 5; + uint32_t pad17 : 3; + uint32_t v_vs1 : 5; + uint32_t v_vs2 : 5; + uint32_t v_vm : 1; + uint32_t v_funct6 : 6; + } v_opv1; + struct { + uint32_t pad18 :15; + int32_t v_simm5 : 5; + uint32_t v_zimm :11; + uint32_t v_bigbit : 1; + } v_opv2; + struct { + uint32_t pad19 :15; + uint32_t v_imm5 : 5; + } v_opv3; + //vector-LOAD-FP + struct { + uint32_t pad20 :12; + uint32_t v_width : 3; + uint32_t pad21 : 5; + uint32_t v_lumop : 5; + uint32_t pad22 : 1; + uint32_t v_mop : 3; + uint32_t v_nf : 3; + } vldfp; + //vector-STORE-FP + struct { + uint32_t pad23 : 7; + uint32_t v_vs3 : 5; + uint32_t pad24 : 8; + uint32_t v_sumop : 5; + } vstfp; + //vector-AMO + struct { + uint32_t pad25 :26; + uint32_t v_wd : 1; + uint32_t v_amoop : 5; + } vamo; + #endif // CONFIG_RVV_010 + + uint32_t val; + } instr; +} riscv64_ISADecodeInfo; + +enum { MODE_U = 0, MODE_S, MODE_H, MODE_M }; + +int get_data_mmu_state(); +#define isa_mmu_state() get_data_mmu_state() + +#endif diff --git a/libraries/NEMU/src/isa/riscv64/include/isa-exec.h b/libraries/NEMU/src/isa/riscv64/include/isa-exec.h new file mode 100644 index 0000000..cb9593a --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/include/isa-exec.h @@ -0,0 +1,12 @@ +#include "../instr/pseudo.h" +#include "../instr/rvi/exec.h" +#include "../instr/rvc/exec.h" +#include "../instr/rvm/exec.h" +#include "../instr/rvf/exec.h" +#include "../instr/rvd/exec.h" +#include "../instr/rva/exec.h" +#include "../instr/priv/exec.h" +#ifdef CONFIG_RVV_010 +#include "../instr/rvv/exec.h" +#endif +#include "../instr/special.h" diff --git a/libraries/NEMU/src/isa/riscv64/init.c b/libraries/NEMU/src/isa/riscv64/init.c new file mode 100644 index 0000000..5d9b80b --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/init.c @@ -0,0 +1,40 @@ +#include +#include +#include "local-include/csr.h" + +static const uint32_t img [] = { + 0x800002b7, // lui t0,0x80000 + 0x0002a023, // sw zero,0(t0) + 0x0002a503, // lw a0,0(t0) + 0x0000006b, // nemu_trap +}; + +void init_csr(); +#ifndef CONFIG_SHARE +void init_clint(); +#endif + +void init_isa() { + init_csr(); + + cpu.gpr[0]._64 = 0; + cpu.pc = RESET_VECTOR; + + cpu.mode = MODE_M; + mstatus->val = 0; + +#define ext(e) (1 << ((e) - 'a')) + misa->extensions = ext('i') | ext('m') | ext('a') | ext('c') | ext('s') | ext('u'); + misa->extensions |= ext('d') | ext('f'); + misa->mxl = 2; // XLEN = 64 + + #ifdef CONFIG_RVV_010 + // vecotr + vl->val = 0; + vtype->val = 0; // actually should be 1 << 63 (set vill bit to forbidd) + #endif // CONFIG_RVV_010 + + memcpy(guest_to_host(RESET_VECTOR), img, sizeof(img)); + + IFNDEF(CONFIG_SHARE, init_clint()); +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/decode.c b/libraries/NEMU/src/isa/riscv64/instr/decode.c new file mode 100644 index 0000000..07ce249 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/decode.c @@ -0,0 +1,107 @@ +#include "../local-include/rtl.h" +#include +#include +#include + + +def_all_THelper(); + +__attribute__((always_inline)) +static inline uint32_t get_instr(Decode *s) { + return s->isa.instr.val; +} + +// decode operand helper +#define def_DopHelper(name) \ + void concat(decode_op_, name) (Decode *s, Operand *op, word_t val, bool flag) + +#include "rvi/decode.h" +#include "rvf/decode.h" +#include "rvm/decode.h" +#include "rva/decode.h" +#include "rvc/decode.h" +#include "rvd/decode.h" +#include "priv/decode.h" +#ifdef CONFIG_RVV_010 + #include "rvv/decode.h" +#endif // CONFIG_RVV_010 + +def_THelper(main) { + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 00000 ??", I , load); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 00001 ??", fload , fload); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 00011 ??", I , mem_fence); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 00100 ??", I , op_imm); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 00101 ??", auipc , auipc); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 00110 ??", I , op_imm32); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 01000 ??", S , store); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 01001 ??", fstore, fstore); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 01011 ??", R , atomic); + def_INSTR_IDTAB("0000001 ????? ????? ??? ????? 01100 ??", R , rvm); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 01100 ??", R , op); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 01101 ??", U , lui); + def_INSTR_IDTAB("0000001 ????? ????? ??? ????? 01110 ??", R , rvm32); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 01110 ??", R , op32); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 10000 ??", R4 , fmadd_dispatch); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 10001 ??", R4 , fmadd_dispatch); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 10010 ??", R4 , fmadd_dispatch); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 10011 ??", R4 , fmadd_dispatch); + def_INSTR_TAB ("??????? ????? ????? ??? ????? 10100 ??", op_fp); +#ifdef CONFIG_RVV_010 + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 10101 ??", OP_V , OP_V); +#endif // CONFIG_RVV_010 + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 11000 ??", B , branch); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 11001 ??", I , jalr_dispatch); + def_INSTR_TAB ("??????? ????? ????? ??? ????? 11010 ??", nemu_trap); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 11011 ??", J , jal_dispatch); + def_INSTR_IDTAB("??????? ????? ????? ??? ????? 11100 ??", csr , system); + return table_inv(s); +}; + +int isa_fetch_decode(Decode *s) { + int idx = EXEC_ID_inv; + + s->isa.instr.val = instr_fetch(&s->snpc, 2); + if (s->isa.instr.r.opcode1_0 != 0x3) { + // this is an RVC instruction + idx = table_rvc(s); + } else { + // this is a 4-byte instruction, should fetch the MSB part + // NOTE: The fetch here may cause IPF. + // If it is the case, we should have mepc = xxxffe and mtval = yyy000. + // Refer to `mtval` in the privileged manual for more details. + uint32_t hi = instr_fetch(&s->snpc, 2); + s->isa.instr.val |= (hi << 16); + idx = table_main(s); + } + + s->type = INSTR_TYPE_N; + switch (idx) { + case EXEC_ID_c_j: case EXEC_ID_p_jal: case EXEC_ID_jal: + s->jnpc = id_src1->imm; s->type = INSTR_TYPE_J; break; + + case EXEC_ID_beq: case EXEC_ID_bne: case EXEC_ID_blt: case EXEC_ID_bge: + case EXEC_ID_bltu: case EXEC_ID_bgeu: + case EXEC_ID_c_beqz: case EXEC_ID_c_bnez: + case EXEC_ID_p_bltz: case EXEC_ID_p_bgez: case EXEC_ID_p_blez: case EXEC_ID_p_bgtz: + s->jnpc = id_dest->imm; s->type = INSTR_TYPE_B; break; + + case EXEC_ID_p_ret: case EXEC_ID_c_jr: case EXEC_ID_c_jalr: case EXEC_ID_jalr: + IFDEF(CONFIG_DEBUG, case EXEC_ID_mret: case EXEC_ID_sret: case EXEC_ID_ecall:) + s->type = INSTR_TYPE_I; break; + +#ifndef CONFIG_DEBUG + case EXEC_ID_system: + if (s->isa.instr.i.funct3 == 0) { + switch (s->isa.instr.csr.csr) { + case 0: // ecall + case 0x102: // sret + case 0x302: // mret + s->type = INSTR_TYPE_I; + } + } + break; +#endif + } + + return idx; +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/fp.c b/libraries/NEMU/src/isa/riscv64/instr/fp.c new file mode 100644 index 0000000..1c1e917 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/fp.c @@ -0,0 +1,56 @@ +#include "../local-include/csr.h" +#include "../local-include/intr.h" +#include +#include + +static uint32_t nemu_rm_cache = 0; +void fp_update_rm_cache(uint32_t rm) { + switch (rm) { + case 0: nemu_rm_cache = FPCALL_RM_RNE; return; + case 1: nemu_rm_cache = FPCALL_RM_RTZ; return; + case 2: nemu_rm_cache = FPCALL_RM_RDN; return; + case 3: nemu_rm_cache = FPCALL_RM_RUP; return; + case 4: nemu_rm_cache = FPCALL_RM_RMM; return; + default: assert(0); + } +} + +bool fp_enable() { + return MUXDEF(CONFIG_MODE_USER, true, mstatus->fs != 0); +} + +void fp_set_dirty() { + // lazily update mstatus->sd when reading mstatus + mstatus->fs = 3; +} + +uint32_t isa_fp_get_rm(Decode *s) { + uint32_t rm = s->isa.instr.fp.rm; + if (likely(rm == 7)) { return nemu_rm_cache; } + switch (rm) { + case 0: return FPCALL_RM_RNE; + case 1: return FPCALL_RM_RTZ; + case 2: return FPCALL_RM_RDN; + case 3: return FPCALL_RM_RUP; + case 4: return FPCALL_RM_RMM; + default: save_globals(s); longjmp_exception(EX_II); + } +} + +void isa_fp_set_ex(uint32_t ex) { + uint32_t f = 0; + if (ex & FPCALL_EX_NX) f |= 0x01; + if (ex & FPCALL_EX_UF) f |= 0x02; + if (ex & FPCALL_EX_OF) f |= 0x04; + if (ex & FPCALL_EX_DZ) f |= 0x08; + if (ex & FPCALL_EX_NV) f |= 0x10; + fcsr->fflags.val = fcsr->fflags.val | f; + fp_set_dirty(); +} + +void isa_fp_csr_check() { + if(unlikely(mstatus->fs == 0)){ + longjmp_exception(EX_II); + assert(0); + } +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/priv/decode.h b/libraries/NEMU/src/isa/riscv64/instr/priv/decode.h new file mode 100644 index 0000000..0f42b8b --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/priv/decode.h @@ -0,0 +1,22 @@ +static inline def_DHelper(csr) { + decode_op_r(s, id_src1, s->isa.instr.i.rs1, true); + decode_op_i(s, id_src2, s->isa.instr.csr.csr, true); + decode_op_r(s, id_dest, s->isa.instr.i.rd, false); +} + +#ifdef CONFIG_DEBUG +def_THelper(system) { + def_INSTR_TAB("000000000000 ????? 000 ????? ????? ??", ecall); + def_INSTR_TAB("000100000010 ????? 000 ????? ????? ??", sret); + def_INSTR_TAB("000100000101 ????? 000 ????? ????? ??", wfi); + def_INSTR_TAB("000100100000 ????? 000 ????? ????? ??", sfence_vma); + def_INSTR_TAB("001100000010 ????? 000 ????? ????? ??", mret); + def_INSTR_TAB("???????????? ????? 001 ????? ????? ??", csrrw); + def_INSTR_TAB("???????????? ????? 010 ????? ????? ??", csrrs); + def_INSTR_TAB("???????????? ????? 011 ????? ????? ??", csrrc); + def_INSTR_TAB("???????????? ????? 101 ????? ????? ??", csrrwi); + def_INSTR_TAB("???????????? ????? 110 ????? ????? ??", csrrsi); + def_INSTR_TAB("???????????? ????? 111 ????? ????? ??", csrrci); + return EXEC_ID_inv; +}; +#endif diff --git a/libraries/NEMU/src/isa/riscv64/instr/priv/exec.h b/libraries/NEMU/src/isa/riscv64/instr/priv/exec.h new file mode 100644 index 0000000..36ecfd0 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/priv/exec.h @@ -0,0 +1,17 @@ +#define def_SYS_EHelper(name) \ +def_EHelper(name) { \ + extern int rtl_sys_slow_path(Decode *s, rtlreg_t *dest, const rtlreg_t *src1, uint32_t id, rtlreg_t *jpc); \ + int jmp = rtl_sys_slow_path(s, ddest, dsrc1, id_src2->imm, s0); \ + if (jmp) rtl_priv_jr(s, s0); \ + else rtl_priv_next(s); \ +} + +#ifdef CONFIG_DEBUG +#define SYS_INSTR_LIST(f) \ + f(csrrw) f(csrrs) f(csrrc) f(csrrwi) f(csrrsi) f(csrrci) \ + f(ecall) f(mret) f(sret) f(sfence_vma) f(wfi) \ + +MAP(SYS_INSTR_LIST, def_SYS_EHelper) +#else +def_SYS_EHelper(system) +#endif diff --git a/libraries/NEMU/src/isa/riscv64/instr/priv/system.c b/libraries/NEMU/src/isa/riscv64/instr/priv/system.c new file mode 100644 index 0000000..d0771eb --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/priv/system.c @@ -0,0 +1,36 @@ +#include +#include +#include + +__attribute__((cold)) +int rtl_sys_slow_path(Decode *s, rtlreg_t *dest, const rtlreg_t *src1, uint32_t id, rtlreg_t *jpc) { + uint32_t funct3 = s->isa.instr.i.funct3; + if (funct3 == 0) { + // priv + IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); + if (id == 0) { // ecall + rtl_trap(s, s->pc, 8 + cpu.mode); + rtl_mv(s, jpc, t0); + } else { + rtl_hostcall(s, HOSTCALL_PRIV, jpc, src1, NULL, id); + } + int is_jmp = (id != 0x120) && (id != 0x105); // sfence.vma and wfi + return is_jmp; + } + + save_globals(s); + IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 3)); + + rtl_hostcall(s, HOSTCALL_CSR, s0, NULL, NULL, id); + int imm = funct3 & 0x4; + int op = funct3 & 0x3; + if (imm) rtl_li(s, s1, s->isa.instr.i.rs1); + else rtl_mv(s, s1, src1); + switch (op) { + case 2: rtl_or(s, s1, s0, s1); break; + case 3: rtl_not(s, s1, s1); rtl_and(s, s1, s0, s1); break; + } + rtl_hostcall(s, HOSTCALL_CSR, NULL, s1, NULL, id); + rtl_mv(s, dest, s0); + return 0; +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/pseudo.h b/libraries/NEMU/src/isa/riscv64/instr/pseudo.h new file mode 100644 index 0000000..9f9f3de --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/pseudo.h @@ -0,0 +1,73 @@ +// standard pseudo instructions +// See Chapter 25 "RISC-V Assembly Programmer's Handbook" in the RISC-V ISA manual +// +// The following pseudo instructions are excluded +// (1) seem not frequently present during execution +// nop not neg negw +// seqz snez sltz sgtz +// [[all CSR instructions]] +// (2) only expansion without optimization +// la +// l{b|h|w|d} symbol +// s{b|h|w|d} symbol +// bgt ble bgtu bleu +// call tail +// fence +// (3) still not considered +// fmv.s fabs.s fneg.s +// fmv.d fabs.d fneg.d +// fl{w|d} symbol +// fs{w|d} symbol +// (4) already provided in RVC +// j jal(ra) jalr(rs) +// beqz bnez +// li mv + +def_EHelper(p_sext_w) { + rtl_addiw(s, ddest, dsrc1, 0); +} + +def_EHelper(p_blez) { + rtl_jrelop(s, RELOP_GE, rz, dsrc2, id_dest->imm); +} + +def_EHelper(p_bgtz) { + rtl_jrelop(s, RELOP_LT, rz, dsrc2, id_dest->imm); +} + +def_EHelper(p_bltz) { + rtl_jrelop(s, RELOP_LT, dsrc1, rz, id_dest->imm); +} + +def_EHelper(p_bgez) { + rtl_jrelop(s, RELOP_GE, dsrc1, rz, id_dest->imm); +} + +def_EHelper(p_jal) { + rtl_li(s, &cpu.gpr[1]._64, id_src2->imm); + rtl_j(s, id_src1->imm); +} + +def_EHelper(p_ret) { +// IFDEF(CONFIG_ENGINE_INTERPRETER, rtl_andi(s, s0, s0, ~0x1u)); + IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); + rtl_jr(s, &cpu.gpr[1]._64); +} + +// non-standard pseudo instructions + +def_EHelper(p_li_0) { + rtl_li(s, ddest, 0); +} + +def_EHelper(p_li_1) { + rtl_li(s, ddest, 1); +} + +def_EHelper(p_inc) { + rtl_addi(s, ddest, ddest, 1); +} + +def_EHelper(p_dec) { + rtl_subi(s, ddest, ddest, 1); +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rocc.h b/libraries/NEMU/src/isa/riscv64/instr/rocc.h new file mode 100644 index 0000000..50deac4 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rocc.h @@ -0,0 +1,6 @@ +rtlreg_t rocc_sdi(uint32_t funct7, uint32_t funct3, rtlreg_t rs1, rtlreg_t rs2); + +static inline def_EHelper(rocc3) { + *ddest = rocc_sdi(s->isa.instr.r.funct7, s->isa.instr.r.funct3, *dsrc1, *dsrc2); + print_asm_template3(rocc3); +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rva/amo.c b/libraries/NEMU/src/isa/riscv64/instr/rva/amo.c new file mode 100644 index 0000000..32a67fa --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rva/amo.c @@ -0,0 +1,57 @@ +#include +#include "../local-include/intr.h" + +__attribute__((cold)) +def_rtl(amo_slow_path, rtlreg_t *dest, const rtlreg_t *src1, const rtlreg_t *src2) { + uint32_t funct5 = s->isa.instr.r.funct7 >> 2; + int width = s->isa.instr.r.funct3 & 1 ? 8 : 4; + + if (funct5 == 0b00010) { // lr + rtl_lms(s, dest, src1, 0, width, MMU_DYNAMIC); + cpu.lr_addr = *src1; + cpu.lr_valid = 1; + return; + } else if (funct5 == 0b00011) { // sc +#ifdef CONFIG_DIFFTEST_STORE_COMMIT + // cpu.amu for sc instructions is set to true when store difftest is enabled. + // Atomic instructions don't commit through store queue and need to be skipped. + // Store difftest uses cpu.amo to skip atomic store instructions. + cpu.amo = true; +#endif + // should check overlapping instead of equality + int success = cpu.lr_addr == *src1 && cpu.lr_valid; + if (success) { + rtl_sm(s, src2, src1, 0, width, MMU_DYNAMIC); + cpu.lr_valid = 0; + } else { + // Even if scInvalid, SPF (if raised) also needs to be reported + if(isa_mmu_check(*dsrc1, width, MEM_TYPE_WRITE) == MMU_TRANSLATE) { + isa_mmu_translate(*dsrc1, width, MEM_TYPE_WRITE); + } + return_on_mem_ex(); + } + rtl_li(s, dest, !success); +#ifdef CONFIG_DIFFTEST_STORE_COMMIT + cpu.amo = false; +#endif + return; + } + + cpu.amo = true; + rtl_lms(s, s0, src1, 0, width, MMU_DYNAMIC); + switch (funct5) { + case 0b00001: rtl_mv (s, s1, src2); break; + case 0b00000: rtl_add(s, s1, s0, src2); break; + case 0b01000: rtl_or (s, s1, s0, src2); break; + case 0b01100: rtl_and(s, s1, s0, src2); break; + case 0b00100: rtl_xor(s, s1, s0, src2); break; + case 0b11100: *s1 = (*s0 > *src2 ? *s0 : *src2); break; + case 0b10100: *s1 = ((sword_t)*s0 > (sword_t)*src2 ? *s0 : *src2); break; + case 0b11000: *s1 = (*s0 < *src2 ? *s0 : *src2); break; + case 0b10000: *s1 = ((sword_t)*s0 < (sword_t)*src2 ? *s0 : *src2); break; + default: assert(0); + } + rtl_sm(s, s1, src1, 0, width, MMU_DYNAMIC); + rtl_mv(s, dest, s0); + cpu.amo = false; +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rva/decode.h b/libraries/NEMU/src/isa/riscv64/instr/rva/decode.h new file mode 100644 index 0000000..04e4597 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rva/decode.h @@ -0,0 +1,29 @@ +#ifdef CONFIG_DEBUG +def_THelper(atomic) { + def_INSTR_TAB("00010 ?? 00000 ????? 011 ????? ????? ??", lr_d); + def_INSTR_TAB("00011 ?? ????? ????? 011 ????? ????? ??", sc_d); + def_INSTR_TAB("00001 ?? ????? ????? 011 ????? ????? ??", amoswap_d); + def_INSTR_TAB("00000 ?? ????? ????? 011 ????? ????? ??", amoadd_d); + def_INSTR_TAB("00100 ?? ????? ????? 011 ????? ????? ??", amoxor_d); + def_INSTR_TAB("01100 ?? ????? ????? 011 ????? ????? ??", amoand_d); + def_INSTR_TAB("01000 ?? ????? ????? 011 ????? ????? ??", amoor_d); + def_INSTR_TAB("10000 ?? ????? ????? 011 ????? ????? ??", amomin_d); + def_INSTR_TAB("10100 ?? ????? ????? 011 ????? ????? ??", amomax_d); + def_INSTR_TAB("11000 ?? ????? ????? 011 ????? ????? ??", amominu_d); + def_INSTR_TAB("11100 ?? ????? ????? 011 ????? ????? ??", amomaxu_d); + + def_INSTR_TAB("00010 ?? 00000 ????? 010 ????? ????? ??", lr_w); + def_INSTR_TAB("00011 ?? ????? ????? 010 ????? ????? ??", sc_w); + def_INSTR_TAB("00001 ?? ????? ????? 010 ????? ????? ??", amoswap_w); + def_INSTR_TAB("00000 ?? ????? ????? 010 ????? ????? ??", amoadd_w); + def_INSTR_TAB("00100 ?? ????? ????? 010 ????? ????? ??", amoxor_w); + def_INSTR_TAB("01100 ?? ????? ????? 010 ????? ????? ??", amoand_w); + def_INSTR_TAB("01000 ?? ????? ????? 010 ????? ????? ??", amoor_w); + def_INSTR_TAB("10000 ?? ????? ????? 010 ????? ????? ??", amomin_w); + def_INSTR_TAB("10100 ?? ????? ????? 010 ????? ????? ??", amomax_w); + def_INSTR_TAB("11000 ?? ????? ????? 010 ????? ????? ??", amominu_w); + def_INSTR_TAB("11100 ?? ????? ????? 010 ????? ????? ??", amomaxu_w); + + return EXEC_ID_inv; +} +#endif diff --git a/libraries/NEMU/src/isa/riscv64/instr/rva/exec.h b/libraries/NEMU/src/isa/riscv64/instr/rva/exec.h new file mode 100644 index 0000000..90a72d0 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rva/exec.h @@ -0,0 +1,25 @@ +#define def_AMO_EHelper(name) \ +def_EHelper(name) { \ + extern void rtl_amo_slow_path(Decode *s, rtlreg_t *dest, const rtlreg_t *src1, const rtlreg_t *src2); \ + rtl_amo_slow_path(s, ddest, dsrc1, dsrc2); \ +} + +#ifdef CONFIG_DEBUG +#define AMO_LIST(f, s) \ + f(concat3(lr , _, s)) \ + f(concat3(sc , _, s)) \ + f(concat3(amoswap, _, s)) \ + f(concat3(amoadd , _, s)) \ + f(concat3(amoor , _, s)) \ + f(concat3(amoand , _, s)) \ + f(concat3(amoxor , _, s)) \ + f(concat3(amomaxu, _, s)) \ + f(concat3(amomax , _, s)) \ + f(concat3(amominu, _, s)) \ + f(concat3(amomin , _, s)) + +AMO_LIST(def_AMO_EHelper, d) +AMO_LIST(def_AMO_EHelper, w) +#else +def_AMO_EHelper(atomic) +#endif diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvc/decode.h b/libraries/NEMU/src/isa/riscv64/instr/rvc/decode.h new file mode 100644 index 0000000..c8164bd --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvc/decode.h @@ -0,0 +1,388 @@ +#define creg2reg(creg) (creg + 8) + +// rotate without shift, e.g. ror(0bxxxxyy, 6, 2) = 0byyxxxx00 +static inline uint32_t ror_imm(uint32_t imm, int len, int r) { + if (r == 0) return imm; + uint32_t copy = imm | (imm << len); + uint32_t mask = BITMASK(len) << r; + uint32_t res = copy & mask; + return res; +} + +static inline void decode_op_C_imm6(Decode *s, uint32_t imm6, bool sign, int shift, int rotate) { + uint64_t imm = (sign ? SEXT(imm6, 6) << shift : ror_imm(imm6, 6, rotate)); + decode_op_i(s, id_src2, imm, false); +} + +static inline void decode_op_C_rd_rs1(Decode *s, bool creg) { + uint32_t instr = s->isa.instr.val; + uint32_t rd_rs1 = (creg ? creg2reg(BITS(instr, 9, 7)) : BITS(instr, 11, 7)); + decode_op_r(s, id_src1, rd_rs1, true); + decode_op_r(s, id_dest, rd_rs1, false); +} + +// creg = false for CI, true for CB_shift and CB_andi +static inline void decode_op_rd_rs1_imm6(Decode *s, bool sign, int shift, int rotate, bool creg) { + uint32_t instr = s->isa.instr.val; + uint32_t imm6 = (BITS(instr, 12, 12) << 5) | BITS(instr, 6, 2); + decode_op_C_imm6(s, imm6, sign, shift, rotate); + decode_op_C_rd_rs1(s, creg); +} + +#if 0 +// ---------- CR ---------- + +static inline def_DHelper(CR) { + decode_op_C_rd_rs1(s, false); + uint32_t rs2 = BITS(s->isa.instr.val, 6, 2); + decode_op_r(s, id_src2, rs2, true); +} +#endif + +// ---------- CI ---------- + +static inline def_DHelper(CI_simm) { + decode_op_rd_rs1_imm6(s, true, 0, 0, false); +} + +static inline def_DHelper(CI_simm_lui) { + decode_CI_simm(s, width); + // the immediate of LUI is placed at id_src1->imm + id_src1->imm = id_src2->imm << 12; +} + +// for shift +static inline def_DHelper(CI_uimm) { + decode_op_rd_rs1_imm6(s, false, 0, 0, false); +} + +static inline def_DHelper(C_LI) { + decode_CI_simm(s, width); + decode_op_r(s, id_src1, 0, true); +} + +static inline def_DHelper(C_ADDI16SP) { + decode_op_r(s, id_src1, 2, true); + uint32_t instr = s->isa.instr.val; + sword_t simm = (SEXT(BITS(instr, 12, 12), 1) << 9) | (BITS(instr, 4, 3) << 7) | + (BITS(instr, 5, 5) << 6) | (BITS(instr, 2, 2) << 5) | (BITS(instr, 6, 6) << 4); + assert(simm != 0); + decode_op_i(s, id_src2, simm, false); + decode_op_r(s, id_dest, 2, false); +} + +// SP-relative load/store +static inline void decode_C_xxSP(Decode *s, uint32_t imm6, int rotate) { + decode_op_r(s, id_src1, 2, true); + decode_op_C_imm6(s, imm6, false, 0, rotate); +} + +static inline void decode_C_LxSP(Decode *s, int rotate, bool is_fp) { + uint32_t imm6 = (BITS(s->isa.instr.val, 12, 12) << 5) | BITS(s->isa.instr.val, 6, 2); + decode_C_xxSP(s, imm6, rotate); + uint32_t rd = BITS(s->isa.instr.val, 11, 7); + if (is_fp) decode_op_fr(s, id_dest, rd, false); + else decode_op_r(s, id_dest, rd, false); +} + +static inline def_DHelper(C_LWSP) { + decode_C_LxSP(s, 2, false); +} + +static inline def_DHelper(C_LDSP) { + decode_C_LxSP(s, 3, false); +} + +static inline def_DHelper(C_FLDSP) { + decode_C_LxSP(s, 3, true); +} + +// ---------- CSS ---------- + +static inline void decode_C_SxSP(Decode *s, int rotate, bool is_fp) { + uint32_t imm6 = BITS(s->isa.instr.val, 12, 7); + decode_C_xxSP(s, imm6, rotate); + uint32_t rs2 = BITS(s->isa.instr.val, 6, 2); + if (is_fp) decode_op_fr(s, id_dest, rs2, true); + else decode_op_r(s, id_dest, rs2, true); +} + +static inline def_DHelper(C_SWSP) { + decode_C_SxSP(s, 2, false); +} + +static inline def_DHelper(C_SDSP) { + decode_C_SxSP(s, 3, false); +} + +static inline def_DHelper(C_FSDSP) { + decode_C_SxSP(s, 3, true); +} + +// ---------- CIW ---------- + +static inline def_DHelper(C_ADDI4SPN) { + decode_op_r(s, id_src1, 2, true); + uint32_t instr = s->isa.instr.val; + uint32_t imm9_6 = ror_imm(BITS(instr, 12, 7), 6, 4); // already at the right place + uint32_t imm = imm9_6 | BITS(instr, 5, 5) << 3 | BITS(instr, 6, 6) << 2; + Assert(imm != 0, "pc = " FMT_WORD, s->pc); + decode_op_i(s, id_src2, imm, false); + decode_op_r(s, id_dest, creg2reg(BITS(instr, 4, 2)), false); +} + +// ---------- CL ---------- + +// load/store +static inline void decode_C_ldst_common(Decode *s, int rotate, bool is_store, bool is_fp) { + uint32_t instr = s->isa.instr.val; + decode_op_r(s, id_src1, creg2reg(BITS(instr, 9, 7)), true); + uint32_t imm5 = (BITS(instr, 12, 10) << 2) | BITS(instr, 6, 5); + uint32_t imm = ror_imm(imm5, 5, rotate) << 1; + decode_op_i(s, id_src2, imm, false); + if (is_fp) decode_op_fr(s, id_dest, creg2reg(BITS(instr, 4, 2)), is_store); + else decode_op_r(s, id_dest, creg2reg(BITS(instr, 4, 2)), is_store); +} + +static inline def_DHelper(C_LW) { + decode_C_ldst_common(s, 1, false, false); +} + +static inline def_DHelper(C_LD) { + decode_C_ldst_common(s, 2, false, false); +} + +static inline def_DHelper(C_FLD) { + decode_C_ldst_common(s, 2, false, true); +} + +// ---------- CS ---------- + +static inline def_DHelper(C_SW) { + decode_C_ldst_common(s, 1, true, false); +} + +static inline def_DHelper(C_SD) { + decode_C_ldst_common(s, 2, true, false); +} + +static inline def_DHelper(C_FSD) { + decode_C_ldst_common(s, 2, true, true); +} + +static inline def_DHelper(CS) { + decode_op_C_rd_rs1(s, true); + uint32_t rs2 = creg2reg(BITS(s->isa.instr.val, 4, 2)); + decode_op_r(s, id_src2, rs2, true); +} + +// ---------- CB ---------- + +static inline def_DHelper(CB) { + uint32_t instr = s->isa.instr.val; + sword_t simm8 = SEXT(BITS(instr, 12, 12), 1); + uint32_t imm7_6 = BITS(instr, 6, 5); + uint32_t imm5 = BITS(instr, 2, 2); + uint32_t imm4_3 = BITS(instr, 11, 10); + uint32_t imm2_1 = BITS(instr, 4, 3); + sword_t offset = (simm8 << 8) | (imm7_6 << 6) | (imm5 << 5) | (imm4_3 << 3) | (imm2_1 << 1); + decode_op_i(s, id_dest, s->pc + offset, true); + decode_op_r(s, id_src1, creg2reg(BITS(instr, 9, 7)), true); + decode_op_r(s, id_src2, 0, true); +} + +static inline def_DHelper(CB_shift) { + decode_op_rd_rs1_imm6(s, false, 0, 0, true); +} + +static inline def_DHelper(CB_andi) { + decode_op_rd_rs1_imm6(s, true, 0, 0, true); +} + +// ---------- CJ ---------- + +static inline def_DHelper(CJ) { + uint32_t instr = s->isa.instr.val; + sword_t simm11 = SEXT(BITS(instr, 12, 12), 1); + uint32_t imm10 = BITS(instr, 8, 8); + uint32_t imm9_8 = BITS(instr, 10, 9); + uint32_t imm7 = BITS(instr, 6, 6); + uint32_t imm6 = BITS(instr, 7, 7); + uint32_t imm5 = BITS(instr, 2, 2); + uint32_t imm4 = BITS(instr, 11, 11); + uint32_t imm3_1 = BITS(instr, 5, 3); + + sword_t offset = (simm11 << 11) | (imm10 << 10) | (imm9_8 << 8) | + (imm7 << 7) | (imm6 << 6) | (imm5 << 5) | (imm4 << 4) | (imm3_1 << 1); + decode_op_i(s, id_src1, s->pc + offset, true); +} + +static inline void decode_C_rs1_rs2_rd(Decode *s, bool is_rs1_zero, bool is_rs2_zero, bool is_rd_zero) { + decode_op_r(s, id_src1, (is_rs1_zero ? 0 : BITS(s->isa.instr.val, 11, 7)), true); + decode_op_r(s, id_src2, (is_rs2_zero ? 0 : BITS(s->isa.instr.val, 6, 2)), true); + decode_op_r(s, id_dest, (is_rd_zero ? 0 : BITS(s->isa.instr.val, 11, 7)), false); +} + +static inline def_DHelper(C_JR) { + decode_op_r(s, id_src1, BITS(s->isa.instr.val, 11, 7), true); +} + +static inline def_DHelper(C_MOV) { + // we should put the source at src1 to call c_mv() + decode_op_r(s, id_src1, BITS(s->isa.instr.val, 6, 2), true); + decode_op_r(s, id_src2, 0, true); + decode_op_r(s, id_dest, BITS(s->isa.instr.val, 11, 7), false); +} + +static inline def_DHelper(C_ADD) { + decode_C_rs1_rs2_rd(s, false, false, false); +} + +static inline def_DHelper(C_JALR) { + decode_op_r(s, id_src1, BITS(s->isa.instr.val, 11, 7), true); + decode_op_i(s, id_src2, 0, true); + decode_op_r(s, id_dest, 1, false); +} + + +def_THelper(c_addi_dispatch) { + if (id_src2->imm == 1) return table_p_inc(s); + if (id_src2->imm == -1ul) return table_p_dec(s); + return table_c_addi(s); +} + +def_THelper(c_addiw_dispatch) { + return table_c_addiw(s); +} + +def_THelper(c_ldst) { + int mmu_mode = isa_mmu_state(); + if (mmu_mode == MMU_DIRECT) { + def_INSTR_TAB("010 ??? ??? ?? ??? ??", lw); + def_INSTR_TAB("011 ??? ??? ?? ??? ??", ld); + def_INSTR_TAB("110 ??? ??? ?? ??? ??", sw); + def_INSTR_TAB("111 ??? ??? ?? ??? ??", sd); + } else if (mmu_mode == MMU_TRANSLATE) { + def_INSTR_TAB("010 ??? ??? ?? ??? ??", lw_mmu); + def_INSTR_TAB("011 ??? ??? ?? ??? ??", ld_mmu); + def_INSTR_TAB("110 ??? ??? ?? ??? ??", sw_mmu); + def_INSTR_TAB("111 ??? ??? ?? ??? ??", sd_mmu); + } else assert(0); + return EXEC_ID_inv; +} + +def_THelper(c_fldst) { + int mmu_mode = isa_mmu_state(); + if (mmu_mode == MMU_DIRECT) { + def_INSTR_TAB("001 ??? ??? ?? ??? ??", fld); + def_INSTR_TAB("101 ??? ??? ?? ??? ??", fsd); + } else if (mmu_mode == MMU_TRANSLATE) { + def_INSTR_TAB("001 ??? ??? ?? ??? ??", fld_mmu); + def_INSTR_TAB("101 ??? ??? ?? ??? ??", fsd_mmu); + } else assert(0); + return EXEC_ID_inv; +} + +def_THelper(c_li_dispatch) { + def_INSTR_TAB("??? 0 ????? 00000 ??", p_li_0); + def_INSTR_TAB("??? 0 ????? 00001 ??", p_li_1); + def_INSTR_TAB("??? ? ????? ????? ??", c_li); + return EXEC_ID_inv; +} + +def_THelper(rvc_Q1_lui_addi16sp) { + def_INSTR_IDTAB("??? ? 00010 ????? ??", C_ADDI16SP , c_addi); + def_INSTR_IDTAB("??? ? ????? ????? ??", CI_simm_lui, lui); + return EXEC_ID_inv; +} + +def_THelper(rvc_Q1_compute_more64) { + def_INSTR_TAB("??? ? ????? 00??? ??", c_sub); + def_INSTR_TAB("??? ? ????? 01??? ??", c_xor); + def_INSTR_TAB("??? ? ????? 10??? ??", c_or); + def_INSTR_TAB("??? ? ????? 11??? ??", c_and); + return EXEC_ID_inv; +} + +def_THelper(rvc_Q1_compute_more32) { + def_INSTR_TAB("??? ? ????? 00??? ??", c_subw); + def_INSTR_TAB("??? ? ????? 01??? ??", c_addw); + return EXEC_ID_inv; +} + +def_THelper(rvc_Q1_compute_more) { + def_INSTR_TAB("??? 0 ????? ????? ??", rvc_Q1_compute_more64); + def_INSTR_TAB("??? 1 ????? ????? ??", rvc_Q1_compute_more32); + return EXEC_ID_inv; +} + +def_THelper(rvc_Q1_compute) { + def_INSTR_IDTAB("??? ? 00??? ????? ??", CB_shift, c_srli); + def_INSTR_IDTAB("??? ? 01??? ????? ??", CB_shift, c_srai); + def_INSTR_IDTAB("??? ? 10??? ????? ??", CB_andi , c_andi); + def_INSTR_IDTAB("??? ? 11??? ????? ??", CS , rvc_Q1_compute_more); + return EXEC_ID_inv; +} + +def_THelper(rvc_Q2_jr_mov) { + def_INSTR_IDTAB("??? ? 00001 00000 ??", C_JR , p_ret); + def_INSTR_IDTAB("??? ? ????? 00000 ??", C_JR , c_jr); + def_INSTR_IDTAB("??? ? ????? ????? ??", C_MOV , c_mv); + return EXEC_ID_inv; +} + +def_THelper(rvc_Q2_jalr_add) { + def_INSTR_TAB ("??? ? 00000 00000 ??", inv); // ebreak + def_INSTR_IDTAB("??? ? 00001 00000 ??", C_JALR , jalr); // c_jalr can not handle correctly when rs1 == ra + def_INSTR_IDTAB("??? ? ????? 00000 ??", C_JALR , c_jalr); + def_INSTR_IDTAB("??? ? ????? ????? ??", C_ADD , c_add); + return EXEC_ID_inv; +} + +def_THelper(rvc_Q2_misc) { + def_INSTR_TAB("??? 0 ????? ????? ??", rvc_Q2_jr_mov); + def_INSTR_TAB("??? 1 ????? ????? ??", rvc_Q2_jalr_add); + return EXEC_ID_inv; +} + +def_THelper(rvc_Q0) { + def_INSTR_IDTAB("000 ???????? ??? ??", C_ADDI4SPN, addi); + def_INSTR_IDTAB("001 ??? ??? ?? ??? ??", C_FLD, c_fldst); + def_INSTR_IDTAB("010 ??? ??? ?? ??? ??", C_LW , c_ldst); + def_INSTR_IDTAB("011 ??? ??? ?? ??? ??", C_LD , c_ldst); + def_INSTR_IDTAB("101 ??? ??? ?? ??? ??", C_FSD, c_fldst); + def_INSTR_IDTAB("110 ??? ??? ?? ??? ??", C_SW , c_ldst); + def_INSTR_IDTAB("111 ??? ??? ?? ??? ??", C_SD , c_ldst); + return EXEC_ID_inv; +} + +def_THelper(rvc_Q1) { + def_INSTR_IDTAB("000 ? ????? ????? ??", CI_simm, c_addi_dispatch); + def_INSTR_IDTAB("001 ? ????? ????? ??", CI_simm, c_addiw_dispatch); + def_INSTR_IDTAB("010 ? ????? ????? ??", C_LI , c_li_dispatch); + def_INSTR_TAB ("011 ? ????? ????? ??", rvc_Q1_lui_addi16sp); + def_INSTR_TAB ("100 ? ????? ????? ??", rvc_Q1_compute); + def_INSTR_IDTAB("101 ??????????? ??" , CJ , c_j); + def_INSTR_IDTAB("110 ??? ??? ????? ??", CB , c_beqz); + def_INSTR_IDTAB("111 ??? ??? ????? ??", CB , c_bnez); + return EXEC_ID_inv; +} + +def_THelper(rvc_Q2) { + def_INSTR_IDTAB("000 ? ????? ????? ??", CI_uimm, c_slli); + def_INSTR_IDTAB("001 ? ????? ????? ??", C_FLDSP, c_fldst); + def_INSTR_IDTAB("010 ? ????? ????? ??", C_LWSP , c_ldst); + def_INSTR_IDTAB("011 ? ????? ????? ??", C_LDSP , c_ldst); + def_INSTR_TAB ("100 ? ????? ????? ??", rvc_Q2_misc); + def_INSTR_IDTAB("101 ? ????? ????? ??", C_FSDSP, c_fldst); + def_INSTR_IDTAB("110 ? ????? ????? ??", C_SWSP , c_ldst); + def_INSTR_IDTAB("111 ? ????? ????? ??", C_SDSP , c_ldst); + return EXEC_ID_inv; +} + +def_THelper(rvc) { + def_INSTR_TAB("?????????????? 00", rvc_Q0); + def_INSTR_TAB("?????????????? 01", rvc_Q1); + def_INSTR_TAB("?????????????? 10", rvc_Q2); + return table_inv(s); +}; diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvc/exec.h b/libraries/NEMU/src/isa/riscv64/instr/rvc/exec.h new file mode 100644 index 0000000..697d0ea --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvc/exec.h @@ -0,0 +1,102 @@ +// The following RVC instructions are excluded +// (1) not present in RV64 +// C.LQSP C.SQSP +// C.LQ C.SQ +// C.JAL +// (2) seem not frequently present during execution +// C.LDSP C.LWSP C.SDSP C.SWSP +// C.ADDI4SPN +// (3) only expansion without optimization +// C.LD C.LW C.SD C.SW +// C.LUI +// (4) still not considered +// C.FLDSP C.FLWSP C.FSDSP C.FSWSP +// C.FLD C.FLW C.FSD C.FSW +// (5) redundant from the aspect of EHelper +// C.ADDI16SP (the same as C.ADDI) +// C.NOP (the same as C.ADDI) + +def_EHelper(c_j) { + rtl_j(s, id_src1->imm); +} + +def_EHelper(c_jr) { +// IFDEF(CONFIG_ENGINE_INTERPRETER, rtl_andi(s, s0, s0, ~0x1u)); + IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); + rtl_jr(s, dsrc1); +} + +def_EHelper(c_jalr) { +// IFDEF(CONFIG_ENGINE_INTERPRETER, rtl_andi(s, s0, s0, ~0x1lu)); + rtl_li(s, &cpu.gpr[1]._64, s->snpc); + IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); + rtl_jr(s, dsrc1); +} + +def_EHelper(c_beqz) { + rtl_jrelop(s, RELOP_EQ, dsrc1, rz, id_dest->imm); +} + +def_EHelper(c_bnez) { + rtl_jrelop(s, RELOP_NE, dsrc1, rz, id_dest->imm); +} + +def_EHelper(c_li) { + rtl_li(s, ddest, id_src2->imm); +} + +def_EHelper(c_addi) { + rtl_addi(s, ddest, ddest, id_src2->imm); +} + +def_EHelper(c_addiw) { + rtl_addiw(s, ddest, ddest, id_src2->imm); +} + +def_EHelper(c_slli) { + rtl_shli(s, ddest, ddest, id_src2->imm); +} + +def_EHelper(c_srli) { + rtl_shri(s, ddest, ddest, id_src2->imm); +} + +def_EHelper(c_srai) { + rtl_sari(s, ddest, ddest, id_src2->imm); +} + +def_EHelper(c_andi) { + rtl_andi(s, ddest, ddest, id_src2->imm); +} + +def_EHelper(c_mv) { + rtl_mv(s, ddest, dsrc1); +} + +def_EHelper(c_add) { + rtl_add(s, ddest, ddest, dsrc2); +} + +def_EHelper(c_and) { + rtl_and(s, ddest, ddest, dsrc2); +} + +def_EHelper(c_or) { + rtl_or(s, ddest, ddest, dsrc2); +} + +def_EHelper(c_xor) { + rtl_xor(s, ddest, ddest, dsrc2); +} + +def_EHelper(c_sub) { + rtl_sub(s, ddest, ddest, dsrc2); +} + +def_EHelper(c_addw) { + rtl_addw(s, ddest, ddest, dsrc2); +} + +def_EHelper(c_subw) { + rtl_subw(s, ddest, ddest, dsrc2); +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvd/decode.h b/libraries/NEMU/src/isa/riscv64/instr/rvd/decode.h new file mode 100644 index 0000000..6a0c999 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvd/decode.h @@ -0,0 +1,41 @@ +def_THelper(op_fp_d) { + // RV32D + def_INSTR_IDTAB("00000 ?? ????? ????? ??? ????? ????? ??", fr , faddd); + def_INSTR_IDTAB("00001 ?? ????? ????? ??? ????? ????? ??", fr , fsubd); + def_INSTR_IDTAB("00010 ?? ????? ????? ??? ????? ????? ??", fr , fmuld); + def_INSTR_IDTAB("00011 ?? ????? ????? ??? ????? ????? ??", fr , fdivd); + def_INSTR_IDTAB("01011 ?? 00000 ????? ??? ????? ????? ??", fr , fsqrtd); + def_INSTR_IDTAB("00100 ?? ????? ????? 000 ????? ????? ??", fr , fsgnjd); + def_INSTR_IDTAB("00100 ?? ????? ????? 001 ????? ????? ??", fr , fsgnjnd); + def_INSTR_IDTAB("00100 ?? ????? ????? 010 ????? ????? ??", fr , fsgnjxd); + def_INSTR_IDTAB("00101 ?? ????? ????? 000 ????? ????? ??", fr , fmind); + def_INSTR_IDTAB("00101 ?? ????? ????? 001 ????? ????? ??", fr , fmaxd); + def_INSTR_IDTAB("01000 00 00001 ????? ??? ????? ????? ??", fr , fcvt_s_d); + def_INSTR_IDTAB("01000 01 00000 ????? ??? ????? ????? ??", fr , fcvt_d_s); + def_INSTR_IDTAB("10100 ?? ????? ????? 010 ????? ????? ??", fr2r, feqd); + def_INSTR_IDTAB("10100 ?? ????? ????? 001 ????? ????? ??", fr2r, fltd); + def_INSTR_IDTAB("10100 ?? ????? ????? 000 ????? ????? ??", fr2r, fled); + def_INSTR_IDTAB("11100 ?? 00000 ????? 001 ????? ????? ??", fr2r, fclassd); + def_INSTR_IDTAB("11000 ?? 00000 ????? ??? ????? ????? ??", fr2r, fcvt_w_d); + def_INSTR_IDTAB("11000 ?? 00001 ????? ??? ????? ????? ??", fr2r, fcvt_wu_d); + def_INSTR_IDTAB("11010 ?? 00000 ????? ??? ????? ????? ??", r2fr, fcvt_d_w); + def_INSTR_IDTAB("11010 ?? 00001 ????? ??? ????? ????? ??", r2fr, fcvt_d_wu); + + // RV64D + def_INSTR_IDTAB("11000 ?? 00010 ????? ??? ????? ????? ??", fr2r, fcvt_l_d); + def_INSTR_IDTAB("11000 ?? 00011 ????? ??? ????? ????? ??", fr2r, fcvt_lu_d); + def_INSTR_IDTAB("11100 ?? 00000 ????? 000 ????? ????? ??", fr2r, fmv_x_d); + def_INSTR_IDTAB("11010 ?? 00010 ????? ??? ????? ????? ??", r2fr, fcvt_d_l); + def_INSTR_IDTAB("11010 ?? 00011 ????? ??? ????? ????? ??", r2fr, fcvt_d_lu); + def_INSTR_IDTAB("11110 ?? 00000 ????? 000 ????? ????? ??", r2fr, fmv_d_x); + + return EXEC_ID_inv; +} + +def_THelper(fmadd_d_dispatch) { + def_INSTR_TAB("????? ?? ????? ????? ??? ????? 10000 11", fmaddd); + def_INSTR_TAB("????? ?? ????? ????? ??? ????? 10001 11", fmsubd); + def_INSTR_TAB("????? ?? ????? ????? ??? ????? 10010 11", fnmsubd); + def_INSTR_TAB("????? ?? ????? ????? ??? ????? 10011 11", fnmaddd); + return EXEC_ID_inv; +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvd/exec.h b/libraries/NEMU/src/isa/riscv64/instr/rvd/exec.h new file mode 100644 index 0000000..69c2b0c --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvd/exec.h @@ -0,0 +1,154 @@ +#define F64_SIGN ((uint64_t)1 << 63) + +def_EHelper(fld) { + rtl_lm(s, ddest, dsrc1, id_src2->imm, 8, MMU_DIRECT); + rtl_fsr(s, ddest, ddest, FPCALL_W64); +} + +def_EHelper(fsd) { + rtl_sm(s, ddest, dsrc1, id_src2->imm, 8, MMU_DIRECT); +} + +def_EHelper(fld_mmu) { + rtl_lm(s, ddest, dsrc1, id_src2->imm, 8, MMU_TRANSLATE); + rtl_fsr(s, ddest, ddest, FPCALL_W64); +} + +def_EHelper(fsd_mmu) { + rtl_sm(s, ddest, dsrc1, id_src2->imm, 8, MMU_TRANSLATE); +} + +def_fop_template(faddd, FPCALL_ADD, FPCALL_W64) +def_fop_template(fsubd, FPCALL_SUB, FPCALL_W64) +def_fop_template(fmuld, FPCALL_MUL, FPCALL_W64) +def_fop_template(fdivd, FPCALL_DIV, FPCALL_W64) +def_fop_template(fmaxd, FPCALL_MAX, FPCALL_W64) +def_fop_template(fmind, FPCALL_MIN, FPCALL_W64) + +def_EHelper(fsqrtd) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_SQRT, FPCALL_W64)); + rtl_fsr(s, ddest, ddest, FPCALL_W64); +} + +def_EHelper(fmaddd) { + rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 + rtl_hostcall(s, HOSTCALL_FP, s0, dsrc1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W64)); + rtl_fsr(s, ddest, s0, FPCALL_W64); +} + +def_EHelper(fmsubd) { + rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 + rtl_xori(s, s0, s0, F64_SIGN); + rtl_hostcall(s, HOSTCALL_FP, s0, dsrc1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W64)); + rtl_fsr(s, ddest, s0, FPCALL_W64); +} + +def_EHelper(fnmsubd) { + rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 + rtl_xori(s, s1, dsrc1, F64_SIGN); + rtl_hostcall(s, HOSTCALL_FP, s0, s1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W64)); + rtl_fsr(s, ddest, s0, FPCALL_W64); +} + +def_EHelper(fnmaddd) { + rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 + rtl_xori(s, s1, dsrc1, F64_SIGN); + rtl_xori(s, s0, s0, F64_SIGN); + rtl_hostcall(s, HOSTCALL_FP, s0, s1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W64)); + rtl_fsr(s, ddest, s0, FPCALL_W64); +} + +def_EHelper(fled) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, dsrc2, FPCALL_CMD(FPCALL_LE, FPCALL_W64)); +} + +def_EHelper(fltd) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, dsrc2, FPCALL_CMD(FPCALL_LT, FPCALL_W64)); +} + +def_EHelper(feqd) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, dsrc2, FPCALL_CMD(FPCALL_EQ, FPCALL_W64)); +} + +def_EHelper(fcvt_d_w) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_I32ToF, FPCALL_W64)); + rtl_fsr(s, ddest, ddest, FPCALL_W64); +} + +def_EHelper(fcvt_d_wu) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_U32ToF, FPCALL_W64)); + rtl_fsr(s, ddest, ddest, FPCALL_W64); +} + +def_EHelper(fcvt_d_l) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_I64ToF, FPCALL_W64)); + rtl_fsr(s, ddest, ddest, FPCALL_W64); +} + +def_EHelper(fcvt_d_lu) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_U64ToF, FPCALL_W64)); + rtl_fsr(s, ddest, ddest, FPCALL_W64); +} + +def_EHelper(fcvt_w_d) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToI32, FPCALL_W64)); + rtl_sext(s, ddest, ddest, 4); +} + +def_EHelper(fcvt_wu_d) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToU32, FPCALL_W64)); + rtl_sext(s, ddest, ddest, 4); +} + +def_EHelper(fcvt_l_d) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToI64, FPCALL_W64)); +} + +def_EHelper(fcvt_lu_d) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToU64, FPCALL_W64)); +} + +def_EHelper(fcvt_d_s) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_F32ToF64, FPCALL_W64)); + rtl_fsr(s, ddest, ddest, FPCALL_W64); +} + +def_EHelper(fcvt_s_d) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_F64ToF32, FPCALL_W64)); + rtl_fsr(s, ddest, ddest, FPCALL_W32); +} + +def_EHelper(fsgnjd) { + rtl_andi(s, s0, dsrc1, ~F64_SIGN); + rtl_andi(s, ddest, dsrc2, F64_SIGN); + rtl_or(s, ddest, s0, ddest); + rtl_fsr(s, ddest, ddest, FPCALL_W64); +} + +def_EHelper(fsgnjnd) { + rtl_andi(s, s0, dsrc1, ~F64_SIGN); + rtl_xori(s, ddest, dsrc2, F64_SIGN); + rtl_andi(s, ddest, ddest, F64_SIGN); + rtl_or(s, ddest, s0, ddest); + rtl_fsr(s, ddest, ddest, FPCALL_W64); +} + +def_EHelper(fsgnjxd) { + rtl_andi(s, s0, dsrc1, ~F64_SIGN); + rtl_xor(s, ddest, dsrc1, dsrc2); + rtl_andi(s, ddest, ddest, F64_SIGN); + rtl_or(s, ddest, s0, ddest); + rtl_fsr(s, ddest, ddest, FPCALL_W64); +} + +def_EHelper(fmv_x_d) { + rtl_sext(s, ddest, dsrc1, 8); +} + +def_EHelper(fmv_d_x) { + rtl_fsr(s, ddest, dsrc1, FPCALL_W64); +} + +def_EHelper(fclassd) { + rtl_fclass(s, ddest, dsrc1, FPCALL_W64); +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvf/decode.h b/libraries/NEMU/src/isa/riscv64/instr/rvf/decode.h new file mode 100644 index 0000000..29298c6 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvf/decode.h @@ -0,0 +1,217 @@ +bool fp_enable(); +static int table_op_fp_d(Decode *s); +static int table_fmadd_d_dispatch(Decode *s); + +static inline def_DopHelper(fr){ + op->preg = &fpreg_l(val); + print_Dop(op->str, OP_STR_SIZE, "%s", fpreg_name(val, 4)); +#ifdef CONFIG_RVV_010 + op->reg = val; +#endif // CONFIG_RVV_010 +} + +static inline def_DHelper(fr) { + decode_op_fr(s, id_src1, s->isa.instr.fp.rs1, false); + decode_op_fr(s, id_src2, s->isa.instr.fp.rs2, false); + decode_op_fr(s, id_dest, s->isa.instr.fp.rd, false); +} + +static inline def_DHelper(R4) { + decode_op_fr(s, id_src1, s->isa.instr.fp.rs1, false); + decode_op_fr(s, id_src2, s->isa.instr.fp.rs2, false); + decode_op_fr(s, id_dest, s->isa.instr.fp.rd, false); + // rs3 is decoded at exec.h +} + +static inline def_DHelper(fload) { + decode_op_r(s, id_src1, s->isa.instr.i.rs1, true); + decode_op_i(s, id_src2, (sword_t)s->isa.instr.i.simm11_0, false); + decode_op_fr(s, id_dest, s->isa.instr.i.rd, false); +} + +static inline def_DHelper(fstore) { + decode_op_r(s, id_src1, s->isa.instr.s.rs1, true); + sword_t simm = (s->isa.instr.s.simm11_5 << 5) | s->isa.instr.s.imm4_0; + decode_op_i(s, id_src2, simm, false); + decode_op_fr(s, id_dest, s->isa.instr.s.rs2, false); +} + +static inline def_DHelper(fr2r){ + decode_op_fr(s, id_src1, s->isa.instr.fp.rs1, true); + decode_op_fr(s, id_src2, s->isa.instr.fp.rs2, true); + decode_op_r(s, id_dest, s->isa.instr.fp.rd, false); +} + +static inline def_DHelper(r2fr){ + decode_op_r(s, id_src1, s->isa.instr.fp.rs1, true); + decode_op_r(s, id_src2, s->isa.instr.fp.rs2, true); + decode_op_fr(s, id_dest, s->isa.instr.fp.rd, false); +} + +#ifdef CONFIG_RVV_010 +bool vp_enable(); +def_THelper(vload) { + def_INSTR_TAB("??? 000 ? ????? ????? ??? ????? ????? ??", vlduu); + def_INSTR_TAB("??? 010 ? ????? ????? ??? ????? ????? ??", vldsu); + def_INSTR_TAB("??? 011 ? ????? ????? ??? ????? ????? ??", vldxu); + def_INSTR_TAB("??? 100 ? ????? ????? ??? ????? ????? ??", vldus); + def_INSTR_TAB("??? 110 ? ????? ????? ??? ????? ????? ??", vldss); + def_INSTR_TAB("??? 111 ? ????? ????? ??? ????? ????? ??", vldxs); + return EXEC_ID_inv; +} + +def_THelper(vstore) { + def_INSTR_TAB("??? 000 ? ????? ????? ??? ????? ????? ??", vstu); + def_INSTR_TAB("??? 010 ? ????? ????? ??? ????? ????? ??", vsts); + def_INSTR_TAB("??? 011 ? ????? ????? ??? ????? ????? ??", vstx); + def_INSTR_TAB("??? 111 ? ????? ????? ??? ????? ????? ??", vstxu); + return EXEC_ID_inv; +} + +def_THelper(vload_mmu) { + def_INSTR_TAB("??? 000 ? ????? ????? ??? ????? ????? ??", vlduu_mmu); + def_INSTR_TAB("??? 010 ? ????? ????? ??? ????? ????? ??", vldsu_mmu); + def_INSTR_TAB("??? 011 ? ????? ????? ??? ????? ????? ??", vldxu_mmu); + def_INSTR_TAB("??? 100 ? ????? ????? ??? ????? ????? ??", vldus_mmu); + def_INSTR_TAB("??? 110 ? ????? ????? ??? ????? ????? ??", vldss_mmu); + def_INSTR_TAB("??? 111 ? ????? ????? ??? ????? ????? ??", vldxs_mmu); + return EXEC_ID_inv; +} + +def_THelper(vstore_mmu) { + def_INSTR_TAB("??? 000 ? ????? ????? ??? ????? ????? ??", vstu_mmu); + def_INSTR_TAB("??? 010 ? ????? ????? ??? ????? ????? ??", vsts_mmu); + def_INSTR_TAB("??? 011 ? ????? ????? ??? ????? ????? ??", vstx_mmu); + def_INSTR_TAB("??? 111 ? ????? ????? ??? ????? ????? ??", vstxu_mmu); + return EXEC_ID_inv; +} + +#endif + +def_THelper(fload) { + print_Dop(id_src1->str, OP_STR_SIZE, "%ld(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs1, 4)); + + #ifdef CONFIG_RVV_010 + const int table [8] = {1, 0, 0, 0, 0, 2, 4, 0}; + s->vm = s->isa.instr.v_opv1.v_vm; //1 for without mask; 0 for with mask + s->v_width = table[s->isa.instr.vldfp.v_width]; + #endif // CONFIG_RVV_010 + + int mmu_mode = isa_mmu_state(); + if (mmu_mode == MMU_DIRECT) { + if (fp_enable()) { + def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", flw); + def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", fld); + } + + #ifdef CONFIG_RVV_010 + if (vp_enable()) { + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", vload); + def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", vload); + def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", vload); + } + #endif // CONFIG_RVV_010 + } else if (mmu_mode == MMU_TRANSLATE) { + if (fp_enable()) { + def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", flw_mmu); + def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", fld_mmu); + } + + #ifdef CONFIG_RVV_010 + if (vp_enable()) { + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", vload_mmu); + def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", vload_mmu); + def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", vload_mmu); + } + #endif // CONFIG_RVV_010 + } else { assert(0); } + return EXEC_ID_inv; +} + +def_THelper(fstore) { + print_Dop(id_src1->str, OP_STR_SIZE, "%ld(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs1, 4)); + + #ifdef CONFIG_RVV_010 + const int table [8] = {1, 0, 0, 0, 0, 2, 4, 0}; + s->vm = s->isa.instr.v_opv1.v_vm; //1 for without mask; 0 for with mask + s->v_width = table[s->isa.instr.vldfp.v_width]; + #endif // CONFIG_RVV_010 + + int mmu_mode = isa_mmu_state(); + if (mmu_mode == MMU_DIRECT) { + if (fp_enable()) { + def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", fsw); + def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", fsd); + } + + #ifdef CONFIG_RVV_010 + if (vp_enable()) { + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", vstore); + def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", vstore); + def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", vstore); + } + #endif // CONFIG_RVV_010 + } else if (mmu_mode == MMU_TRANSLATE) { + if (fp_enable()) { + def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", fsw_mmu); + def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", fsd_mmu); + } + + #ifdef CONFIG_RVV_010 + if (vp_enable()) { + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", vstore_mmu); + def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", vstore_mmu); + def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", vstore_mmu); + } + #endif // CONFIG_RVV_010 + } else { assert(0); } + return EXEC_ID_inv; +} + +def_THelper(op_fp) { + if (!fp_enable()) return table_rt_inv(s); + + if ((s->isa.instr.fp.fmt == 0b00 && s->isa.instr.fp.funct5 == 0b01000) || + s->isa.instr.fp.fmt == 0b01) return table_op_fp_d(s); + + // RV32F + def_INSTR_IDTAB("00000 00 ????? ????? ??? ????? ????? ??", fr , fadds); + def_INSTR_IDTAB("00001 00 ????? ????? ??? ????? ????? ??", fr , fsubs); + def_INSTR_IDTAB("00010 00 ????? ????? ??? ????? ????? ??", fr , fmuls); + def_INSTR_IDTAB("00011 00 ????? ????? ??? ????? ????? ??", fr , fdivs); + def_INSTR_IDTAB("01011 00 00000 ????? ??? ????? ????? ??", fr , fsqrts); + def_INSTR_IDTAB("00100 00 ????? ????? 000 ????? ????? ??", fr , fsgnjs); + def_INSTR_IDTAB("00100 00 ????? ????? 001 ????? ????? ??", fr , fsgnjns); + def_INSTR_IDTAB("00100 00 ????? ????? 010 ????? ????? ??", fr , fsgnjxs); + def_INSTR_IDTAB("00101 00 ????? ????? 000 ????? ????? ??", fr , fmins); + def_INSTR_IDTAB("00101 00 ????? ????? 001 ????? ????? ??", fr , fmaxs); + def_INSTR_IDTAB("11000 00 00000 ????? ??? ????? ????? ??", fr2r, fcvt_w_s); + def_INSTR_IDTAB("11000 00 00001 ????? ??? ????? ????? ??", fr2r, fcvt_wu_s); + def_INSTR_IDTAB("11100 00 00000 ????? 000 ????? ????? ??", fr2r, fmv_x_w); + def_INSTR_IDTAB("10100 00 ????? ????? 010 ????? ????? ??", fr2r, feqs); + def_INSTR_IDTAB("10100 00 ????? ????? 001 ????? ????? ??", fr2r, flts); + def_INSTR_IDTAB("10100 00 ????? ????? 000 ????? ????? ??", fr2r, fles); + def_INSTR_IDTAB("11100 00 00000 ????? 001 ????? ????? ??", fr2r, fclasss); + def_INSTR_IDTAB("11010 00 00000 ????? ??? ????? ????? ??", r2fr, fcvt_s_w); + def_INSTR_IDTAB("11010 00 00001 ????? ??? ????? ????? ??", r2fr, fcvt_s_wu); + def_INSTR_IDTAB("11110 00 00000 ????? 000 ????? ????? ??", r2fr, fmv_w_x); + + // RV32F + def_INSTR_IDTAB("11000 00 00010 ????? ??? ????? ????? ??", fr2r, fcvt_l_s); + def_INSTR_IDTAB("11000 00 00011 ????? ??? ????? ????? ??", fr2r, fcvt_lu_s); + def_INSTR_IDTAB("11010 00 00010 ????? ??? ????? ????? ??", r2fr, fcvt_s_l); + def_INSTR_IDTAB("11010 00 00011 ????? ??? ????? ????? ??", r2fr, fcvt_s_lu); + + return EXEC_ID_inv; +} + +def_THelper(fmadd_dispatch) { + if (!fp_enable()) return table_rt_inv(s); + def_INSTR_TAB("????? 01 ????? ????? ??? ????? ????? ??", fmadd_d_dispatch); + + def_INSTR_TAB("????? 00 ????? ????? ??? ????? 10000 ??", fmadds); + def_INSTR_TAB("????? 00 ????? ????? ??? ????? 10001 ??", fmsubs); + def_INSTR_TAB("????? 00 ????? ????? ??? ????? 10010 ??", fnmsubs); + def_INSTR_TAB("????? 00 ????? ????? ??? ????? 10011 ??", fnmadds); + return EXEC_ID_inv; +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvf/exec.h b/libraries/NEMU/src/isa/riscv64/instr/rvf/exec.h new file mode 100644 index 0000000..6ac6aa9 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvf/exec.h @@ -0,0 +1,161 @@ +#define F32_SIGN ((uint64_t)1 << 31) + +def_rtl(fclass, rtlreg_t *, rtlreg_t *, int); + +def_EHelper(flw) { + rtl_lm(s, ddest, dsrc1, id_src2->imm, 4, MMU_DIRECT); + rtl_fsr(s, ddest, ddest, FPCALL_W32); +} + +def_EHelper(fsw) { + rtl_sm(s, ddest, dsrc1, id_src2->imm, 4, MMU_DIRECT); +} + +def_EHelper(flw_mmu) { + rtl_lm(s, ddest, dsrc1, id_src2->imm, 4, MMU_TRANSLATE); + rtl_fsr(s, ddest, ddest, FPCALL_W32); +} + +def_EHelper(fsw_mmu) { + rtl_funbox(s, s0, ddest); + rtl_sm(s, s0, dsrc1, id_src2->imm, 4, MMU_TRANSLATE); +} + +#define def_fop_template(name, op, w) \ + def_EHelper(name) { \ + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, dsrc2, FPCALL_CMD(op, w)); \ + rtl_fsr(s, ddest, ddest, w); \ + } + +def_fop_template(fadds, FPCALL_ADD, FPCALL_W32) +def_fop_template(fsubs, FPCALL_SUB, FPCALL_W32) +def_fop_template(fmuls, FPCALL_MUL, FPCALL_W32) +def_fop_template(fdivs, FPCALL_DIV, FPCALL_W32) +def_fop_template(fmins, FPCALL_MIN, FPCALL_W32) +def_fop_template(fmaxs, FPCALL_MAX, FPCALL_W32) + +def_EHelper(fsqrts) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_SQRT, FPCALL_W32)); + rtl_fsr(s, ddest, ddest, FPCALL_W32); +} + +def_EHelper(fmadds) { + rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 + rtl_hostcall(s, HOSTCALL_FP, s0, dsrc1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W32)); + rtl_fsr(s, ddest, s0, FPCALL_W32); +} + +def_EHelper(fmsubs) { + rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 + rtl_xori(s, s0, s0, F32_SIGN); + rtl_hostcall(s, HOSTCALL_FP, s0, dsrc1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W32)); + rtl_fsr(s, ddest, s0, FPCALL_W32); +} + +def_EHelper(fnmsubs) { + rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 + rtl_xori(s, s1, dsrc1, F32_SIGN); + rtl_hostcall(s, HOSTCALL_FP, s0, s1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W32)); + rtl_fsr(s, ddest, s0, FPCALL_W32); +} + +def_EHelper(fnmadds) { + rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 + rtl_xori(s, s1, dsrc1, F32_SIGN); + rtl_xori(s, s0, s0, F32_SIGN); + rtl_hostcall(s, HOSTCALL_FP, s0, s1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W32)); + rtl_fsr(s, ddest, s0, FPCALL_W32); +} + +def_EHelper(fles) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, dsrc2, FPCALL_CMD(FPCALL_LE, FPCALL_W32)); +} + +def_EHelper(flts) { + rtl_mv(s, ddest, dsrc1); + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, dsrc2, FPCALL_CMD(FPCALL_LT, FPCALL_W32)); +} + +def_EHelper(feqs) { + rtl_mv(s, ddest, dsrc1); + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, dsrc2, FPCALL_CMD(FPCALL_EQ, FPCALL_W32)); +} + +def_EHelper(fcvt_s_w) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_I32ToF, FPCALL_W32)); + rtl_fsr(s, ddest, ddest, FPCALL_W32); +} + +def_EHelper(fcvt_s_wu) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_U32ToF, FPCALL_W32)); + rtl_fsr(s, ddest, ddest, FPCALL_W32); +} + +def_EHelper(fcvt_s_l) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_I64ToF, FPCALL_W32)); + rtl_fsr(s, ddest, ddest, FPCALL_W32); +} + +def_EHelper(fcvt_s_lu) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_U64ToF, FPCALL_W32)); + rtl_fsr(s, ddest, ddest, FPCALL_W32); +} + +def_EHelper(fcvt_w_s) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToI32, FPCALL_W32)); + rtl_sext(s, ddest, ddest, 4); +} + +def_EHelper(fcvt_wu_s) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToU32, FPCALL_W32)); + rtl_sext(s, ddest, ddest, 4); +} + +def_EHelper(fcvt_l_s) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToI64, FPCALL_W32)); +} + +def_EHelper(fcvt_lu_s) { + rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToU64, FPCALL_W32)); +} + +def_EHelper(fsgnjs) { + rtl_funbox(s, s0, dsrc1); + rtl_funbox(s, ddest, dsrc2); + rtl_andi(s, s0, s0, ~F32_SIGN); + rtl_andi(s, ddest, ddest, F32_SIGN); + rtl_or(s, ddest, s0, ddest); + rtl_fsr(s, ddest, ddest, FPCALL_W32); +} + +def_EHelper(fsgnjns) { + rtl_funbox(s, s0, dsrc1); + rtl_funbox(s, ddest, dsrc2); + rtl_andi(s, s0, s0, ~F32_SIGN); + rtl_xori(s, ddest, ddest, F32_SIGN); + rtl_andi(s, ddest, ddest, F32_SIGN); + rtl_or(s, ddest, s0, ddest); + rtl_fsr(s, ddest, ddest, FPCALL_W32); +} + +def_EHelper(fsgnjxs) { + rtl_funbox(s, s0, dsrc1); + rtl_funbox(s, ddest, dsrc2); + rtl_xor(s, ddest, s0, ddest); + rtl_andi(s, s0, s0, ~F32_SIGN); + rtl_andi(s, ddest, ddest, F32_SIGN); + rtl_or(s, ddest, s0, ddest); + rtl_fsr(s, ddest, ddest, FPCALL_W32); +} + +def_EHelper(fmv_x_w) { + rtl_sext(s, ddest, dsrc1, 4); +} + +def_EHelper(fmv_w_x) { + rtl_fsr(s, ddest, dsrc1, FPCALL_W32); +} + +def_EHelper(fclasss) { + rtl_fclass(s, ddest, dsrc1, FPCALL_W32); +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvi/compute.h b/libraries/NEMU/src/isa/riscv64/instr/rvi/compute.h new file mode 100644 index 0000000..f557580 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvi/compute.h @@ -0,0 +1,119 @@ +def_EHelper(add) { + rtl_add(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(sub) { + rtl_sub(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(sll) { + rtl_shl(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(sra) { + rtl_sar(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(srl) { + rtl_shr(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(slt) { + rtl_setrelop(s, RELOP_LT, ddest, dsrc1, dsrc2); +} + +def_EHelper(sltu) { + rtl_setrelop(s, RELOP_LTU, ddest, dsrc1, dsrc2); +} + +def_EHelper(xor) { + rtl_xor(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(or) { + rtl_or(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(and) { + rtl_and(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(addi) { + rtl_addi(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(slli) { + rtl_shli(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(srai) { + rtl_sari(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(srli) { + rtl_shri(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(slti) { + rtl_setrelopi(s, RELOP_LT, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(sltui) { + rtl_setrelopi(s, RELOP_LTU, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(xori) { + rtl_xori(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(ori) { + rtl_ori(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(andi) { + rtl_andi(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(auipc) { + rtl_li(s, ddest, id_src1->imm); +} + +def_EHelper(lui) { + rtl_li(s, ddest, id_src1->imm); +} + +def_EHelper(addw) { + rtl_addw(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(subw) { + rtl_subw(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(sllw) { + rtl_shlw(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(srlw) { + rtl_shrw(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(sraw) { + rtl_sarw(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(addiw) { + rtl_addiw(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(slliw) { + rtl_shliw(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(srliw) { + rtl_shriw(s, ddest, dsrc1, id_src2->imm); +} + +def_EHelper(sraiw) { + rtl_sariw(s, ddest, dsrc1, id_src2->imm); +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvi/control.h b/libraries/NEMU/src/isa/riscv64/instr/rvi/control.h new file mode 100644 index 0000000..f361bf6 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvi/control.h @@ -0,0 +1,36 @@ +def_EHelper(jal) { + rtl_li(s, ddest, id_src2->imm); + rtl_j(s, id_src1->imm); +} + +def_EHelper(jalr) { + rtl_addi(s, s0, dsrc1, id_src2->imm); +// IFDEF(CONFIG_ENGINE_INTERPRETER, rtl_andi(s, s0, s0, ~0x1lu)); + rtl_li(s, ddest, s->snpc); + IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); + rtl_jr(s, s0); +} + +def_EHelper(beq) { + rtl_jrelop(s, RELOP_EQ, dsrc1, dsrc2, id_dest->imm); +} + +def_EHelper(bne) { + rtl_jrelop(s, RELOP_NE, dsrc1, dsrc2, id_dest->imm); +} + +def_EHelper(blt) { + rtl_jrelop(s, RELOP_LT, dsrc1, dsrc2, id_dest->imm); +} + +def_EHelper(bge) { + rtl_jrelop(s, RELOP_GE, dsrc1, dsrc2, id_dest->imm); +} + +def_EHelper(bltu) { + rtl_jrelop(s, RELOP_LTU, dsrc1, dsrc2, id_dest->imm); +} + +def_EHelper(bgeu) { + rtl_jrelop(s, RELOP_GEU, dsrc1, dsrc2, id_dest->imm); +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvi/decode.h b/libraries/NEMU/src/isa/riscv64/instr/rvi/decode.h new file mode 100644 index 0000000..a69e3d0 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvi/decode.h @@ -0,0 +1,215 @@ +static int table_c_addi_dispatch(Decode *s); +static int table_c_addiw_dispatch(Decode *s); + +static inline def_DopHelper(i) { + op->imm = val; + print_Dop(op->str, OP_STR_SIZE, (flag ? "0x%lx" : "%ld"), op->imm); +} + +static inline def_DopHelper(r) { + bool load_val = flag; + static word_t zero_null = 0; + op->preg = (!load_val && val == 0) ? &zero_null : ®_l(val); + print_Dop(op->str, OP_STR_SIZE, "%s", reg_name(val, 4)); +#ifdef CONFIG_RVV_010 + op->reg = val; +#endif // CONFIG_RVV_010 +} + +static inline def_DHelper(I) { + decode_op_r(s, id_src1, s->isa.instr.i.rs1, true); + decode_op_i(s, id_src2, (sword_t)s->isa.instr.i.simm11_0, false); + decode_op_r(s, id_dest, s->isa.instr.i.rd, false); +} + +static inline def_DHelper(R) { + decode_op_r(s, id_src1, s->isa.instr.r.rs1, true); + decode_op_r(s, id_src2, s->isa.instr.r.rs2, true); + decode_op_r(s, id_dest, s->isa.instr.r.rd, false); +} + +static inline def_DHelper(U) { + decode_op_i(s, id_src1, (sword_t)s->isa.instr.u.simm31_12 << 12, true); + decode_op_r(s, id_dest, s->isa.instr.u.rd, false); +} + +static inline def_DHelper(auipc) { + decode_U(s, width); + id_src1->imm += s->pc; +} + +static inline def_DHelper(J) { + sword_t offset = (s->isa.instr.j.simm20 << 20) | (s->isa.instr.j.imm19_12 << 12) | + (s->isa.instr.j.imm11 << 11) | (s->isa.instr.j.imm10_1 << 1); + decode_op_i(s, id_src1, s->pc + offset, true); + decode_op_r(s, id_dest, s->isa.instr.j.rd, false); + id_src2->imm = s->snpc; +} + +static inline def_DHelper(B) { + sword_t offset = (s->isa.instr.b.simm12 << 12) | (s->isa.instr.b.imm11 << 11) | + (s->isa.instr.b.imm10_5 << 5) | (s->isa.instr.b.imm4_1 << 1); + decode_op_i(s, id_dest, s->pc + offset, true); + decode_op_r(s, id_src1, s->isa.instr.b.rs1, true); + decode_op_r(s, id_src2, s->isa.instr.b.rs2, true); +} + +static inline def_DHelper(S) { + decode_op_r(s, id_src1, s->isa.instr.s.rs1, true); + sword_t simm = (s->isa.instr.s.simm11_5 << 5) | s->isa.instr.s.imm4_0; + decode_op_i(s, id_src2, simm, false); + decode_op_r(s, id_dest, s->isa.instr.s.rs2, true); +} + +def_THelper(load) { + print_Dop(id_src1->str, OP_STR_SIZE, "%ld(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs1, 4)); + int mmu_mode = isa_mmu_state(); + if (mmu_mode == MMU_DIRECT) { + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", lb); + def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", lh); + def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", lw); + def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", ld); + def_INSTR_TAB("??????? ????? ????? 100 ????? ????? ??", lbu); + def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", lhu); + def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", lwu); + } else if (mmu_mode == MMU_TRANSLATE) { + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", lb_mmu); + def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", lh_mmu); + def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", lw_mmu); + def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", ld_mmu); + def_INSTR_TAB("??????? ????? ????? 100 ????? ????? ??", lbu_mmu); + def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", lhu_mmu); + def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", lwu_mmu); + } else { assert(0); } + return EXEC_ID_inv; +} + +def_THelper(store) { + print_Dop(id_src1->str, OP_STR_SIZE, "%ld(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs1, 4)); + int mmu_mode = isa_mmu_state(); + if (mmu_mode == MMU_DIRECT) { + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", sb); + def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", sh); + def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", sw); + def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", sd); + } else if (mmu_mode == MMU_TRANSLATE) { + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", sb_mmu); + def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", sh_mmu); + def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", sw_mmu); + def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", sd_mmu); + } else { assert(0); } + return EXEC_ID_inv; +} + +def_THelper(addi_dispatch) { + def_INSTR_TAB("0000000 00000 00000 ??? ????? ????? ??", p_li_0); + def_INSTR_TAB("0000000 00001 00000 ??? ????? ????? ??", p_li_1); + def_INSTR_TAB("??????? ????? 00000 ??? ????? ????? ??", c_li); + def_INSTR_TAB("0000000 00000 ????? ??? ????? ????? ??", c_mv); + def_INSTR_TAB("??????? ????? ????? ??? ????? ????? ??", addi); + return EXEC_ID_inv; +} + +def_THelper(op_imm) { + if (s->isa.instr.i.rd == s->isa.instr.i.rs1) { + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", c_addi_dispatch); + def_INSTR_TAB("??????? ????? ????? 111 ????? ????? ??", c_andi); + def_INSTR_TAB("000000? ????? ????? 001 ????? ????? ??", c_slli); + def_INSTR_TAB("010000? ????? ????? 101 ????? ????? ??", c_srai); + def_INSTR_TAB("000000? ????? ????? 101 ????? ????? ??", c_srli); + } + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", addi_dispatch); + def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", slti); + def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", sltui); + def_INSTR_TAB("??????? ????? ????? 100 ????? ????? ??", xori); + def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", ori); + def_INSTR_TAB("??????? ????? ????? 111 ????? ????? ??", andi); + def_INSTR_TAB("000000? ????? ????? 001 ????? ????? ??", slli); + def_INSTR_TAB("000000? ????? ????? 101 ????? ????? ??", srli); + def_INSTR_TAB("010000? ????? ????? 101 ????? ????? ??", srai); + return EXEC_ID_inv; +}; + +def_THelper(op_imm32) { + if (s->isa.instr.i.rd == s->isa.instr.i.rs1) { + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", c_addiw_dispatch); + } + def_INSTR_TAB("0000000 00000 ????? 000 ????? ????? ??", p_sext_w); + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", addiw); + def_INSTR_TAB("0000000 ????? ????? 001 ????? ????? ??", slliw); + def_INSTR_TAB("0000000 ????? ????? 101 ????? ????? ??", srliw); + def_INSTR_TAB("0100000 ????? ????? 101 ????? ????? ??", sraiw); + return EXEC_ID_inv; +} + +def_THelper(op) { + if (s->isa.instr.r.rd == s->isa.instr.r.rs1) { + def_INSTR_TAB("0000000 ????? ????? 000 ????? ????? ??", c_add); + def_INSTR_TAB("0100000 ????? ????? 000 ????? ????? ??", c_sub); + def_INSTR_TAB("0000000 ????? ????? 100 ????? ????? ??", c_xor); + def_INSTR_TAB("0000000 ????? ????? 110 ????? ????? ??", c_or); + def_INSTR_TAB("0000000 ????? ????? 111 ????? ????? ??", c_and); + } + def_INSTR_TAB("0000000 ????? ????? 000 ????? ????? ??", add); + def_INSTR_TAB("0000000 ????? ????? 001 ????? ????? ??", sll); + def_INSTR_TAB("0000000 ????? ????? 010 ????? ????? ??", slt); + def_INSTR_TAB("0000000 ????? ????? 011 ????? ????? ??", sltu); + def_INSTR_TAB("0000000 ????? ????? 100 ????? ????? ??", xor); + def_INSTR_TAB("0000000 ????? ????? 101 ????? ????? ??", srl); + def_INSTR_TAB("0000000 ????? ????? 110 ????? ????? ??", or); + def_INSTR_TAB("0000000 ????? ????? 111 ????? ????? ??", and); + def_INSTR_TAB("0100000 ????? ????? 000 ????? ????? ??", sub); + def_INSTR_TAB("0100000 ????? ????? 101 ????? ????? ??", sra); + return EXEC_ID_inv; +} + +def_THelper(op32) { + if (s->isa.instr.r.rd == s->isa.instr.r.rs1) { + def_INSTR_TAB("0000000 ????? ????? 000 ????? ????? ??", c_addw); + def_INSTR_TAB("0100000 ????? ????? 000 ????? ????? ??", c_subw); + } + def_INSTR_TAB("0000000 ????? ????? 000 ????? ????? ??", addw); + def_INSTR_TAB("0100000 ????? ????? 000 ????? ????? ??", subw); + def_INSTR_TAB("0000000 ????? ????? 001 ????? ????? ??", sllw); + def_INSTR_TAB("0000000 ????? ????? 101 ????? ????? ??", srlw); + def_INSTR_TAB("0100000 ????? ????? 101 ????? ????? ??", sraw); + return EXEC_ID_inv; +} + +def_THelper(branch) { + def_INSTR_TAB("??????? 00000 ????? 000 ????? ????? ??", c_beqz); + def_INSTR_TAB("??????? 00000 ????? 001 ????? ????? ??", c_bnez); + def_INSTR_TAB("??????? 00000 ????? 100 ????? ????? ??", p_bltz); + def_INSTR_TAB("??????? 00000 ????? 101 ????? ????? ??", p_bgez); + + def_INSTR_TAB("??????? ????? 00000 100 ????? ????? ??", p_bgtz); + def_INSTR_TAB("??????? ????? 00000 101 ????? ????? ??", p_blez); + + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", beq); + def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", bne); + def_INSTR_TAB("??????? ????? ????? 100 ????? ????? ??", blt); + def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", bge); + def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", bltu); + def_INSTR_TAB("??????? ????? ????? 111 ????? ????? ??", bgeu); + return EXEC_ID_inv; +}; + +def_THelper(jal_dispatch) { + def_INSTR_TAB("??????? ????? ????? ??? 00000 ????? ??", c_j); + def_INSTR_TAB("??????? ????? ????? ??? 00001 ????? ??", p_jal); + def_INSTR_TAB("??????? ????? ????? ??? ????? ????? ??", jal); + return EXEC_ID_inv; +} + +def_THelper(jalr_dispatch) { + def_INSTR_TAB("0000000 00000 00001 ??? 00000 ????? ??", p_ret); + def_INSTR_TAB("0000000 00000 ????? ??? 00000 ????? ??", c_jr); + def_INSTR_TAB("??????? ????? ????? ??? ????? ????? ??", jalr); + return EXEC_ID_inv; +} + +def_THelper(mem_fence) { + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", fence); + def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", fence_i); + return EXEC_ID_inv; +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvi/exec.h b/libraries/NEMU/src/isa/riscv64/instr/rvi/exec.h new file mode 100644 index 0000000..be02443 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvi/exec.h @@ -0,0 +1,4 @@ +#include "compute.h" +#include "ldst.h" +#include "control.h" +#include "fence.h" diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvi/fence.h b/libraries/NEMU/src/isa/riscv64/instr/rvi/fence.h new file mode 100644 index 0000000..78ac28a --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvi/fence.h @@ -0,0 +1,9 @@ +def_EHelper(fence_i) { + IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); + rtl_hostcall(s, HOSTCALL_PRIV, NULL, NULL, NULL, -1); + rtl_priv_next(s); +} + +def_EHelper(fence) { + IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvi/ldst.h b/libraries/NEMU/src/isa/riscv64/instr/rvi/ldst.h new file mode 100644 index 0000000..fb772ef --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvi/ldst.h @@ -0,0 +1,20 @@ +#define def_ldst_template(name, rtl_instr, width, mmu_mode) \ + def_EHelper(name) { \ + concat(rtl_, rtl_instr) (s, ddest, dsrc1, id_src2->imm, width, mmu_mode); \ + } + +#define def_all_ldst(suffix, mmu_mode) \ + def_ldst_template(concat(ld , suffix), lms, 8, mmu_mode) \ + def_ldst_template(concat(lw , suffix), lms, 4, mmu_mode) \ + def_ldst_template(concat(lh , suffix), lms, 2, mmu_mode) \ + def_ldst_template(concat(lb , suffix), lms, 1, mmu_mode) \ + def_ldst_template(concat(lwu, suffix), lm , 4, mmu_mode) \ + def_ldst_template(concat(lhu, suffix), lm , 2, mmu_mode) \ + def_ldst_template(concat(lbu, suffix), lm , 1, mmu_mode) \ + def_ldst_template(concat(sd , suffix), sm , 8, mmu_mode) \ + def_ldst_template(concat(sw , suffix), sm , 4, mmu_mode) \ + def_ldst_template(concat(sh , suffix), sm , 2, mmu_mode) \ + def_ldst_template(concat(sb , suffix), sm , 1, mmu_mode) + +def_all_ldst(, MMU_DIRECT) +def_all_ldst(_mmu, MMU_TRANSLATE) diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvm/decode.h b/libraries/NEMU/src/isa/riscv64/instr/rvm/decode.h new file mode 100644 index 0000000..0e34b31 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvm/decode.h @@ -0,0 +1,20 @@ +def_THelper(rvm) { + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", mul); + def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", mulh); + def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", mulhsu); + def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", mulhu); + def_INSTR_TAB("??????? ????? ????? 100 ????? ????? ??", div); + def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", divu); + def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", rem); + def_INSTR_TAB("??????? ????? ????? 111 ????? ????? ??", remu); + return EXEC_ID_inv; +} + +def_THelper(rvm32) { + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", mulw); + def_INSTR_TAB("??????? ????? ????? 100 ????? ????? ??", divw); + def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", divuw); + def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", remw); + def_INSTR_TAB("??????? ????? ????? 111 ????? ????? ??", remuw); + return EXEC_ID_inv; +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvm/exec.h b/libraries/NEMU/src/isa/riscv64/instr/rvm/exec.h new file mode 100644 index 0000000..633ddeb --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvm/exec.h @@ -0,0 +1,140 @@ +def_EHelper(mul) { + rtl_mulu_lo(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(mulh) { + rtl_muls_hi(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(mulhu) { + rtl_mulu_hi(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(mulhsu) { + // Algorithm: + // We want to obtain ans = mulhsu(a, b). + // Consider mulhu(a, b). + // If a >= 0, then ans = mulhu(a, b); + // If a = -x < 0, then a = 2^64 - x in two's complement + // Then + // mulhu(a, b) = mulhu(2^64 -x , b) = ((2^64 - x)b) >> 64 + // = ((2^64b) >> 64) + ((-xb) >> 64) + // = b + mulhsu(a, b) = b + ans + // Therefore, ans = mulhu(a, b) - b + // + // In the end, ans = (a < 0 ? mulhu(a, b) - b : mulhu(a, b)) + // = mulhu(a, b) - (a < 0 ? b : 0) + + rtl_sari(s, s0, dsrc1, 63); + rtl_and(s, s0, dsrc2, s0); // s0 = (id_src1->val < 0 ? id_src2->val : 0) + rtl_mulu_hi(s, s1, dsrc1, dsrc2); + rtl_sub(s, ddest, s1, s0); +} + +def_EHelper(div) { +#ifdef CONFIG_ENGINE_INTERPRETER + if (*dsrc2 == 0) { + rtl_li(s, ddest, ~0lu); + } else if (*dsrc1 == 0x8000000000000000LL && *dsrc2 == ~(word_t)0) { + rtl_mv(s, ddest, dsrc1); + } else +#endif + rtl_divs_q(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(divu) { +#ifdef CONFIG_ENGINE_INTERPRETER + if (*dsrc2 == 0) { + rtl_li(s, ddest, ~0lu); + } else +#endif + rtl_divu_q(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(rem) { +#ifdef CONFIG_ENGINE_INTERPRETER + if (*dsrc2 == 0) { + rtl_mv(s, ddest, dsrc1); + } else if (*dsrc1 == 0x8000000000000000LL && *dsrc2 == ~(word_t)0) { + rtl_mv(s, ddest, rz); + } else +#endif + rtl_divs_r(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(remu) { +#ifdef CONFIG_ENGINE_INTERPRETER + if (*dsrc2 == 0) { + rtl_mv(s, ddest, dsrc1); + } else +#endif + rtl_divu_r(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(mulw) { + rtl_mulw(s, ddest, dsrc1, dsrc2); +} + +def_EHelper(divw) { +#ifdef CONFIG_ENGINE_INTERPRETER + rtl_sext(s, s0, dsrc1, 4); + rtl_sext(s, s1, dsrc2, 4); + if (*s1 == 0) { + rtl_li(s, s0, ~0lu); + } else if (*s0 == 0x80000000 && *s1 == ~(word_t)0) { + //rtl_mv(s, s0, s0); + } else { + rtl_divs_q(s, s0, s0, s1); + } + rtl_sext(s, ddest, s0, 4); +#else + rtl_divw(s, ddest, dsrc1, dsrc2); +#endif +} + +def_EHelper(remw) { +#ifdef CONFIG_ENGINE_INTERPRETER + rtl_sext(s, s0, dsrc1, 4); + rtl_sext(s, s1, dsrc2, 4); + if (*s1 == 0) { + //rtl_mv(s, s0, s0); + } else if (*s0 == 0x80000000 && *s1 == ~(word_t)0) { + rtl_mv(s, s0, rz); + } else { + rtl_divs_r(s, s0, s0, s1); + } + rtl_sext(s, ddest, s0, 4); +#else + rtl_remw(s, ddest, dsrc1, dsrc2); +#endif +} + +def_EHelper(divuw) { +#ifdef CONFIG_ENGINE_INTERPRETER + rtl_zext(s, s0, dsrc1, 4); + rtl_zext(s, s1, dsrc2, 4); + if (*s1 == 0) { + rtl_li(s, s0, ~0lu); + } else { + rtl_divu_q(s, s0, s0, s1); + } + rtl_sext(s, ddest, s0, 4); +#else + rtl_divuw(s, ddest, dsrc1, dsrc2); +#endif +} + +def_EHelper(remuw) { +#ifdef CONFIG_ENGINE_INTERPRETER + rtl_zext(s, s0, dsrc1, 4); + rtl_zext(s, s1, dsrc2, 4); + if (*s1 == 0) { + //rtl_mv(s, s0, s0); + } else { + rtl_divu_r(s, s0, s0, s1); + } + rtl_sext(s, ddest, s0, 4); +#else + rtl_remuw(s, ddest, dsrc1, dsrc2); +#endif +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/decode.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/decode.h new file mode 100644 index 0000000..3481384 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvv/decode.h @@ -0,0 +1,175 @@ +#ifdef CONFIG_RVV_010 +// vector +static inline def_DHelper(OP_V) { // 10_101, same to R + decode_op_r(s, id_src1, s->isa.instr.r.rs1, true); + decode_op_r(s, id_src2, s->isa.instr.r.rs2, true); + decode_op_r(s, id_dest, s->isa.instr.r.rd, false); + // decode_op_r(id_dest, decinfo.isa.instr.v_vd, false); +} + +static inline def_DHelper(vsetvl) { + rtl_li(s, &id_src2->val, s->isa.instr.v_opv2.v_bigbit ? id_src2->val : s->isa.instr.v_opv2.v_zimm); + if (s->isa.instr.v_opv2.v_bigbit) { + print_Dop(id_src2->str, OP_STR_SIZE, "%ld", id_src2->val); + } else { + print_Dop(id_src2->str, OP_STR_SIZE, "%ld", s->isa.instr.v_opv2.v_zimm); + } + +} + +//vector +def_THelper(vopi) { + def_INSTR_TAB("000000 ? ????? ????? ??? ????? ????? ??", vadd); + def_INSTR_TAB("000010 ? ????? ????? ??? ????? ????? ??", vsub); + def_INSTR_TAB("000011 ? ????? ????? ??? ????? ????? ??", vrsub); + def_INSTR_TAB("000100 ? ????? ????? ??? ????? ????? ??", vminu); + def_INSTR_TAB("000101 ? ????? ????? ??? ????? ????? ??", vmin); + def_INSTR_TAB("000110 ? ????? ????? ??? ????? ????? ??", vmaxu); + def_INSTR_TAB("000111 ? ????? ????? ??? ????? ????? ??", vmax); + def_INSTR_TAB("001001 ? ????? ????? ??? ????? ????? ??", vand); + def_INSTR_TAB("001010 ? ????? ????? ??? ????? ????? ??", vor); + def_INSTR_TAB("001011 ? ????? ????? ??? ????? ????? ??", vxor); + def_INSTR_TAB("001100 ? ????? ????? ??? ????? ????? ??", vrgather); + def_INSTR_TAB("001110 ? ????? ????? ??? ????? ????? ??", vslideup); + def_INSTR_TAB("001111 ? ????? ????? ??? ????? ????? ??", vslidedown); + def_INSTR_TAB("010000 ? ????? ????? ??? ????? ????? ??", vadc); + def_INSTR_TAB("010001 ? ????? ????? ??? ????? ????? ??", vmadc); + def_INSTR_TAB("010010 ? ????? ????? ??? ????? ????? ??", vsbc); + def_INSTR_TAB("010011 ? ????? ????? ??? ????? ????? ??", vmsbc); + def_INSTR_TAB("010111 ? ????? ????? ??? ????? ????? ??", vmerge); + def_INSTR_TAB("011000 ? ????? ????? ??? ????? ????? ??", vmseq); + def_INSTR_TAB("011001 ? ????? ????? ??? ????? ????? ??", vmsne); + def_INSTR_TAB("011010 ? ????? ????? ??? ????? ????? ??", vmsltu); + def_INSTR_TAB("011011 ? ????? ????? ??? ????? ????? ??", vmslt); + def_INSTR_TAB("011100 ? ????? ????? ??? ????? ????? ??", vmsleu); + def_INSTR_TAB("011101 ? ????? ????? ??? ????? ????? ??", vmsle); + def_INSTR_TAB("011110 ? ????? ????? ??? ????? ????? ??", vmsgtu); + def_INSTR_TAB("011111 ? ????? ????? ??? ????? ????? ??", vmsgt); + def_INSTR_TAB("100000 ? ????? ????? ??? ????? ????? ??", vsaddu); + def_INSTR_TAB("100001 ? ????? ????? ??? ????? ????? ??", vsadd); + def_INSTR_TAB("100010 ? ????? ????? ??? ????? ????? ??", vssubu); + def_INSTR_TAB("100011 ? ????? ????? ??? ????? ????? ??", vssub); + def_INSTR_TAB("100100 ? ????? ????? ??? ????? ????? ??", vaadd); + def_INSTR_TAB("100101 ? ????? ????? ??? ????? ????? ??", vsll); + def_INSTR_TAB("100110 ? ????? ????? ??? ????? ????? ??", vasub); + def_INSTR_TAB("100111 ? ????? ????? ??? ????? ????? ??", vsmul); + def_INSTR_TAB("101000 ? ????? ????? ??? ????? ????? ??", vsrl); + def_INSTR_TAB("101001 ? ????? ????? ??? ????? ????? ??", vsra); + def_INSTR_TAB("101011 ? ????? ????? ??? ????? ????? ??", vssra); + def_INSTR_TAB("101100 ? ????? ????? ??? ????? ????? ??", vnsrl); + def_INSTR_TAB("101101 ? ????? ????? ??? ????? ????? ??", vnsra); + def_INSTR_TAB("101110 ? ????? ????? ??? ????? ????? ??", vnclipu); + def_INSTR_TAB("101111 ? ????? ????? ??? ????? ????? ??", vnclip); + def_INSTR_TAB("101010 ? ????? ????? ??? ????? ????? ??", vssrl); + def_INSTR_TAB("110000 ? ????? ????? ??? ????? ????? ??", vwredsumu); + def_INSTR_TAB("110001 ? ????? ????? ??? ????? ????? ??", vwredsum); + def_INSTR_TAB("111000 ? ????? ????? ??? ????? ????? ??", vdotu); + def_INSTR_TAB("111001 ? ????? ????? ??? ????? ????? ??", vdot); + def_INSTR_TAB("111100 ? ????? ????? ??? ????? ????? ??", vwsmaccu); + def_INSTR_TAB("111101 ? ????? ????? ??? ????? ????? ??", vwsmacc); + def_INSTR_TAB("111110 ? ????? ????? ??? ????? ????? ??", vwsmaccsu); + def_INSTR_TAB("111111 ? ????? ????? ??? ????? ????? ??", vwsmaccus); + + return EXEC_ID_inv; + //longjmp_raise_intr(EX_II); +} + +def_THelper(vopm) { + def_INSTR_TAB("000000 ? ????? ????? ??? ????? ????? ??", vredsum); + def_INSTR_TAB("000001 ? ????? ????? ??? ????? ????? ??", vredand); + def_INSTR_TAB("000010 ? ????? ????? ??? ????? ????? ??", vredor); + def_INSTR_TAB("000011 ? ????? ????? ??? ????? ????? ??", vredxor); + def_INSTR_TAB("000100 ? ????? ????? ??? ????? ????? ??", vredminu); + def_INSTR_TAB("000101 ? ????? ????? ??? ????? ????? ??", vredmin); + def_INSTR_TAB("000110 ? ????? ????? ??? ????? ????? ??", vredmaxu); + def_INSTR_TAB("000111 ? ????? ????? ??? ????? ????? ??", vredmax); + + def_INSTR_TAB("010100 ? ????? ????? ??? ????? ????? ??", vmpopc); + def_INSTR_TAB("010101 ? ????? ????? ??? ????? ????? ??", vmfirst); + def_INSTR_TAB("010110 ? ????? ????? ??? ????? ????? ??", vmunaryo); + def_INSTR_TAB("010111 ? ????? ????? ??? ????? ????? ??", vcompress); + def_INSTR_TAB("011000 ? ????? ????? ??? ????? ????? ??", vmandnot); + def_INSTR_TAB("011001 ? ????? ????? ??? ????? ????? ??", vmand); + def_INSTR_TAB("011010 ? ????? ????? ??? ????? ????? ??", vmor); + def_INSTR_TAB("011011 ? ????? ????? ??? ????? ????? ??", vmxor); + def_INSTR_TAB("011100 ? ????? ????? ??? ????? ????? ??", vmornot); + def_INSTR_TAB("011101 ? ????? ????? ??? ????? ????? ??", vmnand); + def_INSTR_TAB("011110 ? ????? ????? ??? ????? ????? ??", vmnor); + def_INSTR_TAB("011111 ? ????? ????? ??? ????? ????? ??", vmxnor); + def_INSTR_TAB("100000 ? ????? ????? ??? ????? ????? ??", vdivu); + def_INSTR_TAB("100001 ? ????? ????? ??? ????? ????? ??", vdiv); + def_INSTR_TAB("100010 ? ????? ????? ??? ????? ????? ??", vremu); + def_INSTR_TAB("100011 ? ????? ????? ??? ????? ????? ??", vrem); + def_INSTR_TAB("100100 ? ????? ????? ??? ????? ????? ??", vmulhu); + def_INSTR_TAB("100101 ? ????? ????? ??? ????? ????? ??", vmul); + def_INSTR_TAB("100110 ? ????? ????? ??? ????? ????? ??", vmulhsu); + def_INSTR_TAB("100111 ? ????? ????? ??? ????? ????? ??", vmulh); + def_INSTR_TAB("101001 ? ????? ????? ??? ????? ????? ??", vmadd); + def_INSTR_TAB("101010 ? ????? ????? ??? ????? ????? ??", vnmsub); + def_INSTR_TAB("101101 ? ????? ????? ??? ????? ????? ??", vmacc); + def_INSTR_TAB("101111 ? ????? ????? ??? ????? ????? ??", vnmsac); + def_INSTR_TAB("110000 ? ????? ????? ??? ????? ????? ??", vwaddu); + def_INSTR_TAB("110001 ? ????? ????? ??? ????? ????? ??", vwadd); + def_INSTR_TAB("110010 ? ????? ????? ??? ????? ????? ??", vwsubu); + def_INSTR_TAB("110011 ? ????? ????? ??? ????? ????? ??", vwsub); + def_INSTR_TAB("110100 ? ????? ????? ??? ????? ????? ??", vwaddu_w); + def_INSTR_TAB("110101 ? ????? ????? ??? ????? ????? ??", vwadd_w); + def_INSTR_TAB("110110 ? ????? ????? ??? ????? ????? ??", vwsubu_w); + def_INSTR_TAB("110111 ? ????? ????? ??? ????? ????? ??", vwsub_w); + def_INSTR_TAB("111000 ? ????? ????? ??? ????? ????? ??", vwmulu); + def_INSTR_TAB("111010 ? ????? ????? ??? ????? ????? ??", vwmulsu); + def_INSTR_TAB("111011 ? ????? ????? ??? ????? ????? ??", vwmul); + def_INSTR_TAB("111100 ? ????? ????? ??? ????? ????? ??", vwmaccu); + def_INSTR_TAB("111101 ? ????? ????? ??? ????? ????? ??", vwnmacc); + def_INSTR_TAB("111110 ? ????? ????? ??? ????? ????? ??", vwmaccsu); + def_INSTR_TAB("111111 ? ????? ????? ??? ????? ????? ??", vwmaccus); + + return EXEC_ID_inv; +} + +def_THelper(vopf) { + // longjmp_raise_intr(EX_II); + return EXEC_ID_inv; +} + +def_THelper(vsetvl_dispatch) { + def_INSTR_TAB("??????? ????? ????? ??? ????? ????? ??", vsetvl); + return EXEC_ID_inv; +} + +// All RVV instructions decode start from here +def_THelper(OP_V) { // 10_101 + if (!vp_enable()) { + return EXEC_ID_inv; + } + switch (s->isa.instr.i.funct3) { + case 0 : s->src_vmode = SRC_VV; break; + case 1 : s->src_vmode = SRC_VV; break; + case 2 : s->src_vmode = SRC_VV; break; + case 3 : s->src_vmode = SRC_VI; break; + case 4 : s->src_vmode = SRC_VS; break; + case 5 : s->src_vmode = SRC_VS; break; + case 6 : s->src_vmode = SRC_VS; break; + case 7 : s->src_vmode = SRC_SI; break; + } + + s->v_width = 1 << vtype->vsew; + s->vm = s->isa.instr.v_opv1.v_vm; //1 for without mask; 0 for with mask + + /* + switch(s->isa.instr.i.funct3) { + EX(0x0, vopi) EX(0x1, vopf) EX(0x2, vopm) EX(0x3, vopi) EX(0x4, vopi) EX(0x5, vopf) EX(0x6, vopm) IDEX(0x7, vsetvl, vsetvl) + } + */ + def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", vopi); + def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", vopf); + def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", vopm); + def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", vopi); + def_INSTR_TAB("??????? ????? ????? 100 ????? ????? ??", vopi); + def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", vopf); + def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", vopm); + def_INSTR_IDTAB("??????? ????? ????? 111 ????? ????? ??", vsetvl, vsetvl_dispatch); + return EXEC_ID_inv; +} + +#endif // CONFIG_RVV_010 diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/exec.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/exec.h new file mode 100644 index 0000000..1f256ee --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvv/exec.h @@ -0,0 +1,3 @@ +#include "vcfg.h" +#include "vcompute.h" +#include "vldst.h" diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vcfg.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/vcfg.h new file mode 100644 index 0000000..236d1d1 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvv/vcfg.h @@ -0,0 +1,37 @@ +#include +#ifdef CONFIG_RVV_010 + +#include "cpu/exec.h" +#include "../local-include/vreg.h" +#include "../local-include/csr.h" +#include +#include "../local-include/intr.h" +#include "../local-include/rtl.h" +#include + +#define id_src (&s->src1) +#define id_src2 (&s->src2) +#define id_dest (&s->dest) +void vp_set_dirty(); + +def_EHelper(vsetvl) { + + vp_set_dirty(); + //vlmul+lg2(VLEN) <= vsew + vl + // previous decode does not load vals for us + rtl_lr(s, &(id_src->val), id_src1->reg, 4); + rtlreg_t vl = check_vsetvl(id_src2->val, id_src->val, id_src->reg==0); + rtlreg_t error = 1ul << 63; + if(vl==(uint64_t)-1) vcsr_write(IDXVTYPE, &error); //TODO: may cause error. + else vcsr_write(IDXVTYPE, &(id_src2->val)); + vcsr_write(IDXVL, &vl); + + rtl_sr(s, id_dest->reg, &vl, 8/*4*/); + + rtl_li(s, &(s->tmp_reg[0]), 0); + vcsr_write(IDXVSTART, &(s->tmp_reg[0])); + + // print_asm_template3(vsetvl); +} + +#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute.h new file mode 100644 index 0000000..76f47d8 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute.h @@ -0,0 +1,532 @@ +#include +#ifdef CONFIG_RVV_010 + +#include "vcompute_impl.h" + +// #define PERMInstr(opcode) permutation_instr(opcode, pc); +// static void permutation_instr(int opcode, vaddr_t* pc) { +// // only move/ext here, no slide +// switch (opcode) { +// case EXT_X_V : +// } +// } + +def_EHelper(vadd) { + ARTHI(ADD, SIGNED) + // print_asm_template3(vadd); +} + +def_EHelper(vsub) { + Assert(s->src_vmode != SRC_VI, "vsub.vi not supported\n"); + ARTHI(SUB, SIGNED) + // print_asm_template3(vsub); +} + +def_EHelper(vrsub) { + Assert(s->src_vmode != SRC_VV, "vrsub.vv not supported\n"); + ARTHI(RSUB, SIGNED) + // print_asm_template3(vrsub); +} + +def_EHelper(vminu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vmin) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vmaxu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vmax) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vand) { + ARTHI(AND, SIGNED) + // print_asm_template3(vand); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vor) { + ARTHI(OR, SIGNED) + // print_asm_template3(vor); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vxor) { + ARTHI(XOR, SIGNED) + // print_asm_template3(vxor); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vrgather) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vslideup) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vslidedown) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vadc) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vmadc) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vsbc) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vmsbc) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vmerge) { + ARTHI(MERGE, SIGNED) + // print_asm_template3(vmerge); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmseq) { + ARTHI_COMP(MSEQ, SIGNED) + // print_asm_template3(vmseq); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmsne) { + ARTHI_COMP(MSNE, SIGNED) + // print_asm_template3(vmsne); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmsltu) { + Assert(s->src_vmode != SRC_VI, "vmsltu not supprt SRC_VI\n"); + ARTHI_COMP(MSLTU, UNSIGNED) + // print_asm_template3(vmsltu); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmslt) { + Assert(s->src_vmode != SRC_VI, "vmslt not supprt SRC_VI\n"); + ARTHI_COMP(MSLT, SIGNED) + // print_asm_template3(vmslt); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmsleu) { + ARTHI_COMP(MSLEU, UNSIGNED) + // print_asm_template3(vmsleu); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmsle) { + ARTHI_COMP(MSLE, SIGNED); + // print_asm_template3(vmsle); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmsgtu) { + Assert(s->src_vmode != SRC_VV, "vmsgtu not support SRC_VV\n"); + ARTHI_COMP(MSGTU, UNSIGNED) + // print_asm_template3(vmsgtu); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmsgt) { + Assert(s->src_vmode != SRC_VV, "vmsgt not support SRC_VV\n"); + ARTHI_COMP(MSGT, SIGNED) + // print_asm_template3(vmsgt); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vsaddu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vsadd) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vssubu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vssub) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vaadd) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vsll) { + ARTHI(SLL, UNSIGNED) + // print_asm_template3(vsll); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vasub) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vsmul) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vsrl) { + ARTHI(SRL, UNSIGNED) + // print_asm_template3(vsrl); + //longjmp_raise_intr(EX_II); +} + +def_EHelper(vsra) { + ARTHI(SRA, UNSIGNED) + // print_asm_template3(vsra); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vssrl) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vssra) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vnsrl) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vnsra) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vnclipu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vnclip) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwredsumu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwredsum) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vdotu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vdot) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwsmaccu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwsmacc) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwsmaccsu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwsmaccus) { + longjmp_raise_intr(EX_II); +} + + +//op-m +def_EHelper(vredsum) { + REDInstr(REDSUM, SIGNED); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vredand) { + REDInstr(REDAND, UNSIGNED); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vredor) { + REDInstr(REDOR, UNSIGNED); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vredxor) { + REDInstr(REDXOR, UNSIGNED); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vredminu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vredmin) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vredmaxu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vredmax) { + longjmp_raise_intr(EX_II); +} + + + + +def_EHelper(vmpopc) { + // longjmp_raise_intr(EX_II); + if(vstart->val != 0) + longjmp_raise_intr(EX_II); + + int vlmax = ((VLEN >> 3) >> vtype->vsew) << vtype->vlmul; + rtl_li(s, s1, 0); + for(int idx = 0; idx < vlmax; idx ++) { + // mask + rtlreg_t mask = get_mask(0, idx, vtype->vsew, vtype->vlmul); + if(s->vm == 0 && mask == 0) + continue; + + *s0 = get_mask(id_src2->reg, idx, vtype->vsew, vtype->vlmul); + *s0 &= 1; + + if(*s0 == 1) + rtl_addi(s, s1, s1, 1); + } + rtl_sr(s, id_dest->reg, s1, 4); +} + +def_EHelper(vmfirst) { + // longjmp_raise_intr(EX_II); + if(vstart->val != 0) + longjmp_raise_intr(EX_II); + + int vlmax = ((VLEN >> 3) >> vtype->vsew) << vtype->vlmul; + int idx; + for(idx = 0; idx < vlmax; idx ++) { + *s0 = get_mask(id_src2->reg, idx, vtype->vsew, vtype->vlmul); + *s0 &= 1; + if(*s0 == 1) break; + } + if(idx < vlmax) + rtl_li(s, s1, idx); + else + rtl_li(s, s1, -1); + rtl_sr(s, id_dest->reg, s1, 4); +} + +def_EHelper(vmunaryo) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vcompress) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vmandnot) { + MASKINSTR(MANDNOT) + // print_asm_template3(vmandnot); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmand) { + MASKINSTR(MAND) + // print_asm_template3(vmand); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmor) { + MASKINSTR(MOR) + // print_asm_template3(vmor); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmxor) { + MASKINSTR(MXOR) + // print_asm_template3(vmxor); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmornot) { + MASKINSTR(MORNOT) + // print_asm_template3(vmornot); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmnand) { + MASKINSTR(MNAND) + // print_asm_template3(vmnand); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmnor) { + MASKINSTR(MNOR) + // print_asm_template3(vmnor); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmxnor) { + MASKINSTR(MXNOR); + // print_asm_template3(vmnor); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vdivu) { + Assert(s->src_vmode != SRC_VI, "vdivu does not support SRC_VI\n"); + ARTHI(DIVU, UNSIGNED) + // print_asm_template3(vdivu); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vdiv) { + Assert(s->src_vmode != SRC_VI, "vdiv does not support SRC_VI\n"); + ARTHI(DIV, SIGNED) + // print_asm_template3(vdiv); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vremu) { + Assert(s->src_vmode != SRC_VI, "vremu does not support SRC_VI\n"); + ARTHI(REMU, UNSIGNED) + // print_asm_template3(vremu); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vrem) { + Assert(s->src_vmode != SRC_VI, "vrem does not support SRC_VI\n"); + ARTHI(REM, SIGNED) + // print_asm_template3(vrem); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmulhu) { + Assert(s->src_vmode != SRC_VI, "vmulhu does not support SRC_VI\n"); + ARTHI(MULHU, UNSIGNED) + // print_asm_template3(vmulhu); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmul) { + Assert(s->src_vmode != SRC_VI, "vmul does not support SRC_VI\n"); + ARTHI(MUL, SIGNED) + // print_asm_template3(vmul); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmulhsu) { + Assert(s->src_vmode != SRC_VI, "vmulhsu does not support SRC_VI\n"); + ARTHI(MULHSU, UNSIGNED) + // print_asm_template3(vmulshu); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmulh) { + Assert(s->src_vmode != SRC_VI, "vmulh does not support SRC_VI\n"); + ARTHI(MULH, SIGNED) + // print_asm_template3(vmulh); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmadd) { + ARTHI(MADD, SIGNED) + // print_asm_template3(vmadd); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vnmsub) { + ARTHI(NMSUB, SIGNED) + // print_asm_template3(vnmsub); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vmacc) { + ARTHI(MACC, SIGNED) + // print_asm_template3(vmacc); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vnmsac) { + ARTHI(NMSAC, SIGNED) + // print_asm_template3(vmacc); + // longjmp_raise_intr(EX_II); +} + +def_EHelper(vwaddu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwadd) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwsubu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwsub) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwaddu_w) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwadd_w) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwsubu_w) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwsub_w) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwmulu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwmulsu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwmul) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwmaccu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwnmacc) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwmaccsu) { + longjmp_raise_intr(EX_II); +} + +def_EHelper(vwmaccus) { + longjmp_raise_intr(EX_II); +} + + +#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.c b/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.c new file mode 100644 index 0000000..1150d5c --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.c @@ -0,0 +1,254 @@ +#include +#ifdef CONFIG_RVV_010 + +#include "vcompute_impl.h" + +#undef s0 +#undef s1 + + +#define s0 (&tmp_reg[0]) +#define s1 (&tmp_reg[1]) + + + +void arthimetic_instr(int opcode, int is_signed, int dest_reg, Decode *s) { + vp_set_dirty(); + int idx; + for(idx = vstart->val; idx < vl->val; idx ++) { + // mask + rtlreg_t mask = get_mask(0, idx, vtype->vsew, vtype->vlmul); + if(s->vm == 0) { + // merge instr will exec no matter mask or not + // masked and mask off exec will left dest unmodified. + if(opcode != MERGE && mask==0) continue; + } else if(opcode == MERGE) { + mask = 1; // merge(mv) get the first operand (s1, rs1, imm); + } + + // operand - vs2 + get_vreg(id_src2->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); + if(is_signed) rtl_sext(s, s0, s0, 1 << vtype->vsew); + + // operand - s1 / rs1 / imm + switch (s->src_vmode) { + case SRC_VV : + get_vreg(id_src->reg, idx, s1, vtype->vsew, vtype->vlmul, is_signed, 1); + if(is_signed) rtl_sext(s, s1, s1, 1 << vtype->vsew); + break; + case SRC_VS : + rtl_lr(s, &(id_src->val), id_src1->reg, 4); + rtl_mv(s, s1, &id_src->val); + if(is_signed) rtl_sext(s, s1, s1, 1 << vtype->vsew); + break; + case SRC_VI : + if(is_signed) rtl_li(s, s1, s->isa.instr.v_opv2.v_simm5); + else rtl_li(s, s1, s->isa.instr.v_opv3.v_imm5 ); + break; + } + + // op + switch (opcode) { + case ADD : rtl_add(s, s1, s0, s1); break; + case SUB : rtl_sub(s, s1, s0, s1); break; + case RSUB: rtl_sub(s, s1, s1, s0); break; + case AND : rtl_and(s, s1, s0, s1); break; + case OR : rtl_or(s, s1, s0, s1); break; + case XOR : rtl_xor(s, s1, s0, s1); break; + case SLL : + rtl_andi(s, s1, s1, s->v_width*8-1); //low lg2(SEW) is valid + //rtl_sext(s0, s0, 8 - (1 << vtype->vsew)); //sext first + rtl_shl(s, s1, s0, s1); break; + case SRL : + rtl_andi(s, s1, s1, s->v_width*8-1); //low lg2(SEW) + rtl_shr(s, s1, s0, s1); break; + case SRA : + rtl_andi(s, s1, s1, s->v_width*8-1); //low lg2(SEW) + rtl_sext(s, s0, s0, s->v_width); + rtl_sar(s, s1, s0, s1); break; + case MULHU : + *s1 = (uint64_t)(((__uint128_t)(*s0) * (__uint128_t)(*s1))>>(s->v_width*8)); + break; + case MUL : rtl_mulu_lo(s, s1, s0, s1); break; + case MULHSU : + rtl_sext(s, t0, s0, s->v_width); + rtl_sari(s, t0, t0, s->v_width*8-1); + rtl_and(s, t0, s1, t0); + *s1 = (uint64_t)(((__uint128_t)(*s0) * (__uint128_t)(*s1))>>(s->v_width*8)); + rtl_sub(s, s1, s1, t0); + break; + case MULH : + rtl_sext(s, s0, s0, s->v_width); + rtl_sext(s, s1, s1, s->v_width); + *s1 = (uint64_t)(((__int128_t)(sword_t)(*s0) * (__int128_t)(sword_t)(*s1))>>(s->v_width*8)); + break; + case MACC : + rtl_mulu_lo(s, s1, s0, s1); + get_vreg(id_dest->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); + rtl_add(s, s1, s1, s0); + break; + case NMSAC : + rtl_mulu_lo(s, s1, s0, s1); + get_vreg(id_dest->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); + rtl_sub(s, s1, s0, s1); + break; + case MADD : + get_vreg(id_dest->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); + rtl_mulu_lo(s, s1, s0, s1); + get_vreg(id_src2->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); + rtl_add(s, s1, s1, s0); + break; + case NMSUB : + get_vreg(id_dest->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); + rtl_mulu_lo(s, s1, s1, s0); + get_vreg(id_src2->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); + rtl_sub(s, s1, s0, s1); + break; + case DIVU : + if(*s1 == 0) rtl_li(s, s1, ~0lu); + else rtl_divu_q(s, s1, s0, s1); + break; + case DIV : + rtl_sext(s, s0, s0, s->v_width); + rtl_sext(s, s1, s1, s->v_width); + if(*s1 == 0) rtl_li(s, s1, ~0lu); + else if(*s0 == 0x8000000000000000LL && *s1 == -1) //may be error + rtl_mv(s, s1, s0); + else rtl_divs_q(s, s1, s0, s1); + break; + case REMU : + if (*s1 == 0) rtl_mv(s, s1, s0); + else rtl_divu_r(s, s1, s0, s1); + break; + case REM : + rtl_sext(s, s0, s0, s->v_width); + rtl_sext(s, s1, s1, s->v_width); + if(*s1 == 0) rtl_mv(s, s1, s0); + else if(*s1 == 0x8000000000000000LL && *s1 == -1) //may be error + rtl_li(s, s1, 0); + else rtl_divs_r(s, s1, s0, s1); + break; + case MERGE : rtl_mux(s, s1, &mask, s1, s0); break; + case MSEQ : rtl_setrelop(s, RELOP_EQ, s1, s0, s1); break; + case MSNE : rtl_setrelop(s, RELOP_NE, s1, s0, s1); break; + case MSLTU : rtl_setrelop(s, RELOP_LTU, s1, s0, s1); break; + case MSLT : rtl_setrelop(s, RELOP_LT, s1, s0, s1); break; + case MSLEU : rtl_setrelop(s, RELOP_LEU, s1, s0, s1); break; + case MSLE : rtl_setrelop(s, RELOP_LE, s1, s0, s1); break; + case MSGTU : rtl_setrelop(s, RELOP_GTU, s1, s0, s1); break; + case MSGT : rtl_setrelop(s, RELOP_GT, s1, s0, s1); break; + } + + // store to vrf + if(dest_reg == 1) + set_mask(id_dest->reg, idx, *s1, vtype->vsew, vtype->vlmul); + else + set_vreg(id_dest->reg, idx, *s1, vtype->vsew, vtype->vlmul, 1); + } + + // idx gt the vl need to be zeroed. + // int vlmax = ((VLEN >> 3) >> vtype->vsew) << vtype->vlmul; + // for(idx = vl->val; idx < vlmax; idx ++) { + // rtl_li(s1, 0); + // if(dest_reg == 1) + // set_mask(id_dest->reg, idx, s1, vtype->vsew, vtype->vlmul); + // else + // set_vreg(id_dest->reg, idx, s1, vtype->vsew, vtype->vlmul, 1); + // } + + // TODO: the idx larger than vl need reset to zero. + rtl_li(s, s0, 0); + vcsr_write(IDXVSTART, s0); +} + + +void mask_instr(int opcode, Decode *s) { + vp_set_dirty(); + int idx; + for(idx = vstart->val; idx < vl->val; idx++) { + // operand - vs2 + *s0 = get_mask(id_src2->reg, idx, vtype->vsew, vtype->vlmul); // unproper usage of s0 + *s0 &= 1; // only LSB + + // operand - s1 + *s1 = get_mask(id_src->reg, idx, vtype->vsew, vtype->vlmul); // unproper usage of s1 + *s1 &= 1; // only LSB + + // op + switch (opcode) { + case MAND : rtl_and(s, s1, s0, s1); break; + case MNAND : rtl_and(s, s1, s0, s1); + *s1 = !(*s1); break; + case MANDNOT : *s1 = !(*s1); // unproper usage of not + rtl_and(s, s1, s0, s1); break; + case MXOR : rtl_xor(s, s1, s0, s1); break; + case MOR : rtl_or(s, s1, s0, s1); break; + case MNOR : rtl_or(s, s1, s0, s1); + *s1 = !(*s1); break; + case MORNOT : *s1 = !(*s1); + rtl_or(s, s1, s0, s1); break; + case MXNOR : rtl_xor(s, s1, s0, s1); + *s1 = !(*s1); break; + default : longjmp_raise_intr(EX_II); + } + // store to vrf + *s1 &= 1; // make sure the LSB + set_mask(id_dest->reg, idx, *s1, vtype->vsew, vtype->vlmul); + } + + int vlmax = ((VLEN >> 3) >> vtype->vsew) << vtype->vlmul; + rtl_li(s, s1, 0); + for( idx = vl->val; idx < vlmax; idx++) { + set_mask(id_dest->reg, idx, *s1, vtype->vsew, vtype->vlmul); + } + vcsr_write(IDXVSTART, s1); +} + + +void reduction_instr(int opcode, int is_signed, Decode *s) { + vp_set_dirty(); + // TODO: check here: does not need align?? + get_vreg(id_src->reg, 0, s1, vtype->vsew, vtype->vlmul, is_signed, 0); + if(is_signed) rtl_sext(s, s1, s1, 1 << vtype->vsew); + + int idx; + for(idx = vstart->val; idx < vl->val; idx ++) { + rtlreg_t mask = get_mask(0, idx, vtype->vsew, vtype->vlmul); + if(s->vm == 0) { + // merge instr will exec no matter mask or not + // masked and mask off exec will left dest unmodified. + if(opcode != MERGE && mask==0) continue; + } else if(opcode == MERGE) { + mask = 1; // merge(mv) get the first operand (s1, rs1, imm); + } + // operand - vs2 + get_vreg(id_src2->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); + if(is_signed) rtl_sext(s, s0, s0, 1 << vtype->vsew); + + + // op + switch (opcode) { + case REDSUM : rtl_add(s, s1, s0, s1); break; + case REDOR : rtl_or(s, s1, s0, s1); break; + case REDAND : rtl_and(s, s1, s0, s1); break; + case REDXOR : rtl_xor(s, s1, s0, s1); break; + // case MIN : + // MINU is hard to achieve parallel + } + + } + set_vreg(id_dest->reg, 0, *s1, vtype->vsew, vtype->vlmul, 0); + + int vlmax = ((VLEN >> 3) >> vtype->vsew); + for(int i=1; ireg, i, 0, vtype->vsew, vtype->vlmul, 0); + } +} + +// dirty job here +#undef s0 +#undef s1 +#define s0 &ls0 +#define s1 &ls1 + +#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.h new file mode 100644 index 0000000..643653a --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.h @@ -0,0 +1,52 @@ +#include +#ifdef CONFIG_RVV_010 + +#ifndef __RISCV64_VCOMPUTE_IMPL_H__ +#define __RISCV64_VCOMPUTE_IMPL_H__ + +#include "cpu/exec.h" +#include "vreg.h" +#include "../local-include/csr.h" +#include +#include "../local-include/intr.h" +#include "../local-include/rtl.h" +#include + +#define id_src (&s->src1) +#define id_src2 (&s->src2) +#define id_dest (&s->dest) + + + +enum op_t { + ADD, SUB, RSUB, MINU, MIN, MAXU, MAX, AND, + OR, XOR, RGATHER, SLIDEUP, SLIDEDOWN, ADC, MADC, SBC, + MSBC, MERGE, MSEQ, MSNE, MSLTU, MSLT, MSLEU, MSLE, + MSGTU, MSGT, SADDU, SADD, SSUBU, SSUB, AADD, SLL, + ASUB, SMUL, SRL, SRA, SSRL, SSRA, NSRL, NSRA, + NCLIPU, NCLIP, WREDSUMU, WREDSUM, DOTU, DOT, WSMACCU, WSMACC, + WSMAXXSU, WSMACCUS, + + REDSUM, REDAND, REDOR, REDXOR, REDMINU, REDMIN, REDMAXU, REDMAX, + EXT_X_V, MV_S_X, SLIDE1UP, SLIDE1DOWN, MPOPC, VMFIRST, MUNARYO, COMPRESS, + MANDNOT, MAND, MOR, MXOR, MORNOT, MNAND, MNOR, MXNOR, + DIVU, DIV, REMU, REM, MULHU, MUL, MULHSU, MULH, + MADD, NMSUB, MACC, NMSAC, WADDU, WADD, WSUBU, WSUB, + WADDU_W, WADD_W, WSUBU_W, WSUB_W, WMULU, WMULSU, WMUL, WMACCU, + WNMACC, WMACCSU, WMACCUS, +}; +void vp_set_dirty(); +void arthimetic_instr(int opcode, int is_signed, int dest_reg, Decode *s); +void mask_instr(int opcode, Decode *s); +void reduction_instr(int opcode, int is_signed, Decode *s); + +#define ARTHI(opcode, is_signed) arthimetic_instr(opcode, is_signed, 0, s); +#define ARTHI_COMP(opcode, is_signed) arthimetic_instr(opcode, is_signed, 1, s); + +#define MASKINSTR(opcode) mask_instr(opcode, s); + +#define REDInstr(opcode, is_signed) reduction_instr(opcode, is_signed, s); + +#endif // __RISCV64_VCOMPUTE_IMPL_H__ + +#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst.h new file mode 100644 index 0000000..d99a73a --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst.h @@ -0,0 +1,255 @@ +#include +#ifdef CONFIG_RVV_010 + +#include "vldst_impl.h" + + +def_EHelper(vlduu) { //unit-strided + /* + switch (s->v_width) { + case 0 : print_asm_template3(vle.v); + case 1 : print_asm_template3(vlbu.v); + case 2 : print_asm_template3(vlhu.v); + case 4 : print_asm_template3(vlwu.v); + } + */ + VLD(MODE_UNIT, UNSIGNED, s, MMU_DIRECT) + //print_asm_template3(vlduu); +} + +def_EHelper(vldsu) { //strided unsigned + /* + switch (s->v_width) { + case 0 : print_asm_template3(vlse.v); + case 1 : print_asm_template3(vlsbu.v); + case 2 : print_asm_template3(vlshu.v); + case 4 : print_asm_template3(vlswu.v); + }*/ + VLD(MODE_STRIDED, UNSIGNED, s, MMU_DIRECT) + //print_asm_template3(vldsu); +} + +def_EHelper(vldxu) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vlxe.v); + case 1 : print_asm_template3(vlxbu.v); + case 2 : print_asm_template3(vlxhu.v); + case 4 : print_asm_template3(vlxwu.v); + } */ + VLD(MODE_INDEXED, UNSIGNED, s, MMU_DIRECT) + //print_asm_template3(vldxu); +} + +def_EHelper(vldus) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vle.v); + case 1 : print_asm_template3(vlb.v); + case 2 : print_asm_template3(vlh.v); + case 4 : print_asm_template3(vlw.v); + }*/ + VLD(MODE_UNIT, SIGNED, s, MMU_DIRECT) + //print_asm_template3(vldus); +} + +def_EHelper(vldss) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vlse.v); + case 1 : print_asm_template3(vlsb.v); + case 2 : print_asm_template3(vlsh.v); + case 4 : print_asm_template3(vlsw.v); + }*/ + VLD(MODE_STRIDED, SIGNED, s, MMU_DIRECT) + //print_asm_template3(vldss); +} + +def_EHelper(vldxs) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vlxe.v); + case 1 : print_asm_template3(vlxb.v); + case 2 : print_asm_template3(vlxh.v); + case 4 : print_asm_template3(vlxw.v); + }*/ + VLD(MODE_INDEXED, SIGNED, s, MMU_DIRECT) + //print_asm_template3(vldxs); +} + + + + +def_EHelper(vstu) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vse.v); + case 1 : print_asm_template3(vsb.v); + case 2 : print_asm_template3(vsh.v); + case 4 : print_asm_template3(vsw.v); + }*/ + VST(MODE_UNIT, MMU_DIRECT) + //print_asm_template3(vstu); +} + +def_EHelper(vsts) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vsse.v); + case 1 : print_asm_template3(vssb.v); + case 2 : print_asm_template3(vssh.v); + case 4 : print_asm_template3(vssw.v); + }*/ + VST(MODE_STRIDED, MMU_DIRECT) + //print_asm_template3(vsts); +} + +def_EHelper(vstx) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vsxe.v); + case 1 : print_asm_template3(vsxb.v); + case 2 : print_asm_template3(vsxh.v); + case 4 : print_asm_template3(vsxw.v); + }*/ + VST(MODE_INDEXED, MMU_DIRECT) + //print_asm_template3(vstx); +} + +def_EHelper(vstxu) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vsuxe.v); + case 1 : print_asm_template3(vsuxb.v); + case 2 : print_asm_template3(vsuxh.v); + case 4 : print_asm_template3(vsuxw.v); + }*/ + VST(MODE_INDEXED, MMU_DIRECT) + //print_asm_template3(vstxu); +} + +def_EHelper(vlduu_mmu) { //unit-strided + /* + switch (s->v_width) { + case 0 : print_asm_template3(vle.v); + case 1 : print_asm_template3(vlbu.v); + case 2 : print_asm_template3(vlhu.v); + case 4 : print_asm_template3(vlwu.v); + } + */ + VLD(MODE_UNIT, UNSIGNED, s, MMU_TRANSLATE) + //print_asm_template3(vlduu); +} + +def_EHelper(vldsu_mmu) { //strided unsigned + /* + switch (s->v_width) { + case 0 : print_asm_template3(vlse.v); + case 1 : print_asm_template3(vlsbu.v); + case 2 : print_asm_template3(vlshu.v); + case 4 : print_asm_template3(vlswu.v); + }*/ + VLD(MODE_STRIDED, UNSIGNED, s, MMU_TRANSLATE) + //print_asm_template3(vldsu); +} + +def_EHelper(vldxu_mmu) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vlxe.v); + case 1 : print_asm_template3(vlxbu.v); + case 2 : print_asm_template3(vlxhu.v); + case 4 : print_asm_template3(vlxwu.v); + } */ + VLD(MODE_INDEXED, UNSIGNED, s, MMU_TRANSLATE) + //print_asm_template3(vldxu); +} + +def_EHelper(vldus_mmu) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vle.v); + case 1 : print_asm_template3(vlb.v); + case 2 : print_asm_template3(vlh.v); + case 4 : print_asm_template3(vlw.v); + }*/ + VLD(MODE_UNIT, SIGNED, s, MMU_TRANSLATE) + //print_asm_template3(vldus); +} + +def_EHelper(vldss_mmu) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vlse.v); + case 1 : print_asm_template3(vlsb.v); + case 2 : print_asm_template3(vlsh.v); + case 4 : print_asm_template3(vlsw.v); + }*/ + VLD(MODE_STRIDED, SIGNED, s, MMU_TRANSLATE) + //print_asm_template3(vldss); +} + +def_EHelper(vldxs_mmu) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vlxe.v); + case 1 : print_asm_template3(vlxb.v); + case 2 : print_asm_template3(vlxh.v); + case 4 : print_asm_template3(vlxw.v); + }*/ + VLD(MODE_INDEXED, SIGNED, s, MMU_TRANSLATE) + //print_asm_template3(vldxs); +} + + + + +def_EHelper(vstu_mmu) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vse.v); + case 1 : print_asm_template3(vsb.v); + case 2 : print_asm_template3(vsh.v); + case 4 : print_asm_template3(vsw.v); + }*/ + VST(MODE_UNIT, MMU_TRANSLATE) + //print_asm_template3(vstu); +} + +def_EHelper(vsts_mmu) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vsse.v); + case 1 : print_asm_template3(vssb.v); + case 2 : print_asm_template3(vssh.v); + case 4 : print_asm_template3(vssw.v); + }*/ + VST(MODE_STRIDED, MMU_TRANSLATE) + //print_asm_template3(vsts); +} + +def_EHelper(vstx_mmu) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vsxe.v); + case 1 : print_asm_template3(vsxb.v); + case 2 : print_asm_template3(vsxh.v); + case 4 : print_asm_template3(vsxw.v); + }*/ + VST(MODE_INDEXED, MMU_TRANSLATE) + //print_asm_template3(vstx); +} + +def_EHelper(vstxu_mmu) { + /* + switch (s->v_width) { + case 0 : print_asm_template3(vsuxe.v); + case 1 : print_asm_template3(vsuxb.v); + case 2 : print_asm_template3(vsuxh.v); + case 4 : print_asm_template3(vsuxw.v); + }*/ + VST(MODE_INDEXED, MMU_TRANSLATE) + //print_asm_template3(vstxu); +} + +#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.c b/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.c new file mode 100644 index 0000000..7ae859d --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.c @@ -0,0 +1,119 @@ +#include +#ifdef CONFIG_RVV_010 + +#include "vldst_impl.h" +void vp_set_dirty(); + +void vld(int mode, int is_signed, Decode *s, int mmu_mode) { + vp_set_dirty(); + //TODO: raise instr when decinfo.v_width > SEW + //v_width 0 -> none SEW 0 -> 8 + // 1 -> 8 1 -> 16 + // 2 -> 16 2 -> 32 + // 4 -> 32 3 -> 64 + s->v_width = s->v_width == 0 ? 1 << vtype->vsew : s->v_width; + bool error = (s->v_width * 8) > (8 << vtype->vsew); + if(error) { + printf("vld encounter an instr: v_width > SEW: mode::%d is_signed:%d\n", mode, is_signed); + longjmp_raise_intr(EX_II); + } + // previous decode does not load vals for us + rtl_lr(s, &(s->src1.val), s->src1.reg, 4); + + word_t idx; + rtl_mv(s, &(tmp_reg[0]), &(s->src1.val)); + for(idx = vstart->val; idx < vl->val; idx ++) { + //TODO: SEW now only supports LE 64bit + //TODO: need special rtl function, but here ignore it + if(mode == MODE_INDEXED) { + rtl_mv(s, &(tmp_reg[0]), &(s->src1.val)); + get_vreg(id_src2->reg, idx, &tmp_reg[3], vtype->vsew, vtype->vlmul, 1, 1); + rtl_add(s, &tmp_reg[0], &tmp_reg[0], &tmp_reg[3]); + } + + // mask + rtlreg_t mask = get_mask(0, idx, vtype->vsew, vtype->vlmul); + + // op + if(s->vm != 0 || mask != 0) { + rtl_lm(s, &tmp_reg[1], &tmp_reg[0], 0, s->v_width, mmu_mode); + if (is_signed) rtl_sext(s, &tmp_reg[1], &tmp_reg[1], s->v_width); + + set_vreg(id_dest->reg, idx, *&tmp_reg[1], vtype->vsew, vtype->vlmul, 1); + } + + switch (mode) { + case MODE_UNIT : rtl_addi(s, &tmp_reg[0], &tmp_reg[0], s->v_width); break; + case MODE_STRIDED: rtl_add(s, &tmp_reg[0], &tmp_reg[0], &id_src2->val) ; break; + } + } + + // TODO: the idx larger than vl need reset to zero. + rtl_li(s, &tmp_reg[0], 0); + vcsr_write(IDXVSTART, &tmp_reg[0]); +} + +void vst(int mode, Decode *s, int mmu_mode) { + vp_set_dirty(); + //TODO: raise instr when decinfo.v_width > SEW + //v_width 0 -> none SEW 0 -> 8 + // 1 -> 8 1 -> 16 + // 2 -> 16 2 -> 32 + // 4 -> 32 3 -> 64 + s->v_width = s->v_width == 0 ? 1 << vtype->vsew : s->v_width; + bool error = (s->v_width * 8) < (8 << vtype->vsew); + if(error) { + printf("vst encounter an instr: v_width < SEW: mode::%d\n", mode); + longjmp_raise_intr(EX_II); + } + + word_t idx; + rtl_mv(s, &tmp_reg[0], &id_src->val); + for(idx = vstart->val; idx < vl->val; idx ++) { + //TODO: SEW now only supports LE 64bit + //TODO: need special rtl function, but here ignore it + if(mode == MODE_INDEXED) { + rtl_mv(s, &tmp_reg[0], &id_src->val); + get_vreg(id_src2->reg, idx, &tmp_reg[3], vtype->vsew, vtype->vlmul, 1, 1); + rtl_add(s, &tmp_reg[0], &tmp_reg[0], &tmp_reg[3]); + // switch(vtype->vsew) { + // case 0 : rtl_addi(&&tmp_reg[0], &&tmp_reg[0], vreg_b(id_src2->reg, idx)); break; + // case 1 : rtl_addi(&&tmp_reg[0], &&tmp_reg[0], vreg_s(id_src2->reg, idx)); break; + // case 2 : rtl_addi(&&tmp_reg[0], &&tmp_reg[0], vreg_i(id_src2->reg, idx)); break; + // case 3 : rtl_addi(&&tmp_reg[0], &&tmp_reg[0], vreg_l(id_src2->reg, idx)); break; + // } + } + + // mask + // uint8_t mask; + // switch (vtype->vsew) { + // case 0 : mask = (uint8_t)(vreg_b(0, idx) & 0x1); break; + // case 1 : mask = (uint8_t)(vreg_s(0, idx) & 0x1); break; + // case 2 : mask = (uint8_t)(vreg_i(0, idx) & 0x1); break; + // case 3 : mask = (uint8_t)(vreg_l(0, idx) & 0x1); break; + // default: mask = 0; + // } + rtlreg_t mask = get_mask(0, idx, vtype->vsew, vtype->vlmul); + + // op + if(s->vm != 0 || mask != 0) { + // switch (vtype->vsew) { + // case 0 : rtl_li(&&tmp_reg[1], vreg_b(id_dest->reg, idx)); break; + // case 1 : rtl_li(&&tmp_reg[1], vreg_s(id_dest->reg, idx)); break; + // case 2 : rtl_li(&&tmp_reg[1], vreg_i(id_dest->reg, idx)); break; + // case 3 : rtl_li(&&tmp_reg[1], vreg_l(id_dest->reg, idx)); break; + // } + get_vreg(id_dest->reg, idx, &tmp_reg[1], vtype->vsew, vtype->vlmul, 0, 1); + rtl_sm(s, &tmp_reg[0], &tmp_reg[1], 0, s->v_width, mmu_mode); + } + + switch (mode) { + case MODE_UNIT : rtl_addi(s, &tmp_reg[0], &tmp_reg[0], s->v_width); break; + case MODE_STRIDED: rtl_add(s, &tmp_reg[0], &tmp_reg[0], &id_src2->val) ; break; + } + } + // TODO: the idx larger than vl need reset to zero. + vstart->val = 0; +} + +#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.h new file mode 100644 index 0000000..db3c6e3 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.h @@ -0,0 +1,33 @@ +#include +#ifdef CONFIG_RVV_010 + +#ifndef __RISCV64_VLDST_IMPL_H__ +#define __RISCV64_VLDST_IMPL_H__ + +#include "cpu/exec.h" +#include "vreg.h" +#include "../local-include/csr.h" +#include "../local-include/rtl.h" +#include +#include "../local-include/intr.h" +#include + +#define id_src (&s->src1) +#define id_src2 (&s->src2) +#define id_dest (&s->dest) + +// vector load +#define MODE_UNIT 0 +#define MODE_STRIDED 1 +#define MODE_INDEXED 2 + +#define VLD(mode, is_signed, s, mmu_mode) vld(mode, is_signed, s, mmu_mode); + +void vld(int mode, int is_signed, Decode *s, int mmu_mode); +// vector store +#define VST(mode, mmu_mode) vst(mode, s, mmu_mode); +void vst(int mode, Decode *s, int mmu_mode); + +#endif // __RISCV64_VLDST_IMPL_H__ + +#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vreg.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/vreg.h new file mode 100644 index 0000000..213a12b --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvv/vreg.h @@ -0,0 +1,63 @@ +#include +#ifdef CONFIG_RVV_010 + +#ifndef __RISCV64_VREG_H__ +#define __RISCV64_VREG_H__ + +#include "common.h" + +#define VLEN 256 +#define VLENLG 8 +#define MAXELEN 64 +#define VENUM64 (VLEN/64) +#define VENUM32 (VLEN/32) +#define VENUM16 (VLEN/16) +#define VENUM8 (VLEN/8) +#define SLEN 256 + +static inline int check_reg_index1(int index) { + assert(index >= 0 && index < 32); + return index; +} + +static inline int check_reg_index2(int index2, int elen) { + assert(index2 >= 0 && index2 < VLEN/elen); + return index2; +} + +// #define vreg_len(index1, index2, elen) (cpu.vr[check_reg_index1(index1)]._64[check_reg_index2(index2, elen)]) +#define vreg_ll(index) (cpu.vr[check_reg_index1(index)]) +// #define vreg_l(index1, index2) vreg_len(index1, index2, 64) +// #define vreg_i(index1, index2) vreg_len(index1, index2, 32) +// #define vreg_s(index1, index2) vreg_len(index1, index2, 16) +// #define vreg_b(index1, index2) vreg_len(index1, index2, 8) +#define vreg_l(index1, index2) (cpu.vr[check_reg_index1(index1)]._64[check_reg_index2(index2, 64)]) +#define vreg_i(index1, index2) (cpu.vr[check_reg_index1(index1)]._32[check_reg_index2(index2, 32)]) +#define vreg_s(index1, index2) (cpu.vr[check_reg_index1(index1)]._16[check_reg_index2(index2, 16)]) +#define vreg_b(index1, index2) (cpu.vr[check_reg_index1(index1)]._8[check_reg_index2(index2, 8)]) + +rtlreg_t get_mask(int reg, int idx, uint64_t vsew, uint64_t vlmul); + +static inline const char * vreg_name(int index, int width) { + extern const char * vregsl[]; + assert(index >= 0 && index < 32); + return vregsl[index]; +} + +void get_vreg(uint64_t reg, int idx, rtlreg_t *dst, uint64_t vsew, uint64_t vlmul, int is_signed, int needAlign); +void set_vreg(uint64_t reg, int idx, rtlreg_t src, uint64_t vsew, uint64_t vlmul, int needAlgin); + +void longjmp_raise_intr(uint32_t foo); + +#define SRC_VV 0 +#define SRC_VI 1 +#define SRC_VS 2 +#define SRC_SI 3 +#define UNSIGNED 0 +#define SIGNED 1 + +void vcsr_write(uint32_t addr, rtlreg_t *src); + +#endif //__RISCV64_VREG_H__ + +#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vreg_impl.c b/libraries/NEMU/src/isa/riscv64/instr/rvv/vreg_impl.c new file mode 100644 index 0000000..f58c974 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/rvv/vreg_impl.c @@ -0,0 +1,106 @@ +#include +#ifdef CONFIG_RVV_010 + +#include "vreg.h" +#include "../local-include/csr.h" +#include +#include "isa.h" + +const char * vregsl[] = { + "v0 ", "v1 ", "v2 ", "v3 ", "v4 ", "v5 ", "v6 ", "v7 ", + "v8 ", "v9 ", "v10", "v11", "v12", "v13", "v14", "v15", + "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", + "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", +}; + + +rtlreg_t check_vsetvl(rtlreg_t vtype_req, rtlreg_t vl_req, bool max_req) { + vtype_t vt = (vtype_t )vtype_req; + rtlreg_t vl_group = ((VLEN >> 3) >> vt.vsew) << vt.vlmul; + if(max_req == true) { + return vl_group; + }else if(vt.vsew > 3) { //check if max-len supported + return (uint64_t)-1; //return 0 means error, including vl_req is 0, for vl_req should not be 0. + }else + return vl_req <= vl_group ? vl_req : vl_group; + // if(vl_group >= vl_req) { + // return vl_req; + // } else if(vl_req >= 2 * vl_group) { + // return vl_group; + // } else { + // return vl_req / 2 + 1; + // } +} + +rtlreg_t get_mask(int reg, int idx, uint64_t vsew, uint64_t vlmul) { + // int sum = VLEN / ((1 << vsew) * 8) * vlmul; + int sum = ((VLEN >> vsew) >> 3) << vlmul; + int single = VLEN / sum; //(1 << vsew * 8) / vlmul; + int bit_idx = idx * single; + int idx1 = bit_idx / 64; + int idx2 = bit_idx % 64; + + return (rtlreg_t)((cpu.vr[reg]._64[idx1] & (1lu << idx2)) != 0); +} + +void set_mask(uint32_t reg, int idx, uint64_t mask, uint64_t vsew, uint64_t vlmul) { + int sum = ((VLEN >> vsew) >> 3) << vlmul; + int single = VLEN / sum; //(1 << vsew * 8) / vlmul; + int bit_idx = idx * single; + int idx1 = bit_idx / 64; + int idx2 = bit_idx % 64; + + uint64_t clear_bit = 0; + for(int i=0; i < single; i++) { + clear_bit = clear_bit << 1; + clear_bit |= 1; + } // get single-bit 1-string + cpu.vr[(int)reg]._64[idx1] &= ~(clear_bit << idx2); // clear the dest position. + cpu.vr[(int)reg]._64[idx1] |= (mask==0) ? 0 : (1lu << idx2); +} + +void get_vreg(uint64_t reg, int idx, rtlreg_t *dst, uint64_t vsew, uint64_t vlmul, int is_signed, int needAlign) { + Assert(vlmul <= 3, "vlmul should be less than 4\n"); + Assert(vsew <= 3, "vsew should be less than 4\n"); + if(needAlign) Assert(reg % (1 << vlmul) == 0, "vreg is not aligned\n"); + int new_vlmul = 1 << vlmul; + int width = (1 << vsew); + int width_bit = width * 8; + int new_reg = reg + (idx * width_bit) / SLEN % new_vlmul; + int new_idx = (idx * width_bit) / (SLEN * new_vlmul) * (SLEN / width_bit) + + idx % (SLEN / width_bit); + switch (vsew) { + case 0 : *dst = is_signed ? (char)vreg_b(new_reg, new_idx) : vreg_b(new_reg, new_idx); break; + case 1 : *dst = is_signed ? (short)vreg_s(new_reg, new_idx) : vreg_s(new_reg, new_idx); break; + case 2 : *dst = is_signed ? (int)vreg_i(new_reg, new_idx) : vreg_i(new_reg, new_idx); break; + case 3 : *dst = is_signed ? (long)vreg_l(new_reg, new_idx) : vreg_l(new_reg, new_idx); break; + } + // printf("get_vreg: idx:%d reg:%lu new_idx:%d new_reg:%d vsew:%lu vlmul:%lu\n", + // idx, reg, new_idx, new_reg, vsew, vlmul); +} + +void set_vreg(uint64_t reg, int idx, rtlreg_t src, uint64_t vsew, uint64_t vlmul, int needAlign) { + Assert(vlmul <= 3, "vlmul should be less than 4\n"); + Assert(vsew <= 3, "vsew should be less than 4\n"); + if(needAlign) Assert(reg % (1 << vlmul) == 0, "vreg is not aligned\n"); + int new_vlmul = 1 << vlmul; + int width = (1 << vsew); + int width_bit = width * 8; + int new_reg = reg + (idx * width_bit) / SLEN % new_vlmul; + int new_idx = (idx * width_bit) / (SLEN * new_vlmul) * (SLEN / width_bit) + + idx % (SLEN / width_bit); + switch (vtype->vsew) { + case 0 : vreg_b(new_reg, new_idx) = (uint8_t )src; break; + case 1 : vreg_s(new_reg, new_idx) = (uint16_t )src; break; + case 2 : vreg_i(new_reg, new_idx) = (uint32_t )src; break; + case 3 : vreg_l(new_reg, new_idx) = (uint64_t )src; break; + } + // printf("set_vreg: idx:%d reg:%lu new_idx:%d new_reg:%d vsew:%lu vlmul:%lu\n", + // idx, reg, new_idx, new_reg, vsew, vlmul); +} + +void longjmp_raise_intr(uint32_t foo) { + assert(0); +} + +#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/special.h b/libraries/NEMU/src/isa/riscv64/instr/special.h new file mode 100644 index 0000000..1df6ff0 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/special.h @@ -0,0 +1,18 @@ +#include "../local-include/intr.h" + +def_EHelper(inv) { + save_globals(s); + rtl_hostcall(s, HOSTCALL_INV, NULL, NULL, NULL, 0); + longjmp_exec(NEMU_EXEC_END); +} + +def_EHelper(rt_inv) { + save_globals(s); + longjmp_exception(EX_II); +} + +def_EHelper(nemu_trap) { + save_globals(s); + rtl_hostcall(s, HOSTCALL_EXIT, NULL, &cpu.gpr[10]._64, NULL, 0); // gpr[10] is $a0 + longjmp_exec(NEMU_EXEC_END); +} diff --git a/libraries/NEMU/src/isa/riscv64/instr/vp.c b/libraries/NEMU/src/isa/riscv64/instr/vp.c new file mode 100644 index 0000000..fead56f --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/instr/vp.c @@ -0,0 +1,15 @@ +#include +#ifdef CONFIG_RVV_010 +#include "../local-include/csr.h" +#include "../local-include/intr.h" +#include + +bool vp_enable() { + return MUXDEF(CONFIG_MODE_USER, true, mstatus->vs != 0); +} + +void vp_set_dirty() { + // lazily update + mstatus->vs = 3; +} +#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/local-include/csr.h b/libraries/NEMU/src/isa/riscv64/local-include/csr.h new file mode 100644 index 0000000..593352d --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/local-include/csr.h @@ -0,0 +1,300 @@ +#ifndef __CSR_H__ +#define __CSR_H__ + +#include + +// SHARE mode does not support mtime +#ifndef CONFIG_SHARE +#define CSRS(f) \ + f(mstatus , 0x300) f(misa , 0x301) f(medeleg , 0x302) f(mideleg , 0x303) \ + f(mie , 0x304) f(mtvec , 0x305) f(mcounteren , 0x306) \ + f(mscratch , 0x340) f(mepc , 0x341) f(mcause , 0x342) \ + f(mtval , 0x343) f(mip , 0x344) \ + f(pmpcfg0 , 0x3a0) \ + f(pmpaddr0 , 0x3b0) f(pmpaddr1 , 0x3b1) f(pmpaddr2 , 0x3b2) f(pmpaddr3 , 0x3b3) \ + f(mhartid , 0xf14) \ + f(sstatus , 0x100) \ + f(sie , 0x104) f(stvec , 0x105) f(scounteren , 0x106) \ + f(sscratch , 0x140) f(sepc , 0x141) f(scause , 0x142) \ + f(stval , 0x143) f(sip , 0x144) \ + f(satp , 0x180) \ + f(fflags , 0x001) f(frm , 0x002) f(fcsr , 0x003) \ + f(mtime , 0xc01) +#else +#define CSRS(f) \ + f(mstatus , 0x300) f(misa , 0x301) f(medeleg , 0x302) f(mideleg , 0x303) \ + f(mie , 0x304) f(mtvec , 0x305) f(mcounteren , 0x306) \ + f(mscratch , 0x340) f(mepc , 0x341) f(mcause , 0x342) \ + f(mtval , 0x343) f(mip , 0x344) \ + f(pmpcfg0 , 0x3a0) \ + f(pmpaddr0 , 0x3b0) f(pmpaddr1 , 0x3b1) f(pmpaddr2 , 0x3b2) f(pmpaddr3 , 0x3b3) \ + f(mhartid , 0xf14) \ + f(sstatus , 0x100) \ + f(sie , 0x104) f(stvec , 0x105) f(scounteren , 0x106) \ + f(sscratch , 0x140) f(sepc , 0x141) f(scause , 0x142) \ + f(stval , 0x143) f(sip , 0x144) \ + f(satp , 0x180) \ + f(fflags , 0x001) f(frm , 0x002) f(fcsr , 0x003) +#endif + +#ifdef CONFIG_RVV_010 + #define VCSRS(f) \ + f(vstart, 0x008) \ + f(vxsat, 0x009) \ + f(vxrm, 0x00a) \ + f(vl, 0xc20) \ + f(vtype, 0xc21) +#endif + +#define CSR_STRUCT_START(name) \ + typedef union { \ + struct { + +#define CSR_STRUCT_END(name) \ + }; \ + word_t val; \ + } concat(name, _t); + +CSR_STRUCT_START(mstatus) + uint64_t uie : 1; + uint64_t sie : 1; + uint64_t pad0: 1; + uint64_t mie : 1; + uint64_t upie: 1; + uint64_t spie: 1; + uint64_t pad1: 1; + uint64_t mpie: 1; + uint64_t spp : 1; + uint64_t vs: 2; + uint64_t mpp : 2; + uint64_t fs : 2; + uint64_t xs : 2; + uint64_t mprv: 1; + uint64_t sum : 1; + uint64_t mxr : 1; + uint64_t tvm : 1; + uint64_t tw : 1; + uint64_t tsr : 1; + uint64_t pad3: 9; + uint64_t uxl : 2; + uint64_t sxl : 2; + uint64_t sbe : 1; + uint64_t mbe : 1; + uint64_t pad4:25; + uint64_t sd : 1; +CSR_STRUCT_END(mstatus) + +CSR_STRUCT_START(misa) + uint64_t extensions: 26; + uint64_t pad : 36; + uint64_t mxl : 2; +CSR_STRUCT_END(misa) + +CSR_STRUCT_START(mtvec) +CSR_STRUCT_END(mtvec) + +CSR_STRUCT_START(mcounteren) +CSR_STRUCT_END(mcounteren) + +CSR_STRUCT_START(mcause) + uint64_t code:63; + uint64_t intr: 1; +CSR_STRUCT_END(mcause) + +CSR_STRUCT_START(mepc) +CSR_STRUCT_END(mepc) + +CSR_STRUCT_START(medeleg) +CSR_STRUCT_END(medeleg) + +CSR_STRUCT_START(mideleg) +CSR_STRUCT_END(mideleg) + +CSR_STRUCT_START(mhartid) +CSR_STRUCT_END(mhartid) + +CSR_STRUCT_START(mscratch) +CSR_STRUCT_END(mscratch) + +CSR_STRUCT_START(mtval) +CSR_STRUCT_END(mtval) + +CSR_STRUCT_START(mie) + uint64_t usie : 1; + uint64_t ssie : 1; + uint64_t hsie : 1; + uint64_t msie : 1; + uint64_t utie : 1; + uint64_t stie : 1; + uint64_t htie : 1; + uint64_t mtie : 1; + uint64_t ueie : 1; + uint64_t seie : 1; + uint64_t heie : 1; + uint64_t meie : 1; +CSR_STRUCT_END(mie) + +CSR_STRUCT_START(mip) + uint64_t usip : 1; + uint64_t ssip : 1; + uint64_t hsip : 1; + uint64_t msip : 1; + uint64_t utip : 1; + uint64_t stip : 1; + uint64_t htip : 1; + uint64_t mtip : 1; + uint64_t ueip : 1; + uint64_t seip : 1; + uint64_t heip : 1; + uint64_t meip : 1; +CSR_STRUCT_END(mip) + +CSR_STRUCT_START(pmpcfg0) +CSR_STRUCT_END(pmpcfg0) + +CSR_STRUCT_START(pmpaddr0) +CSR_STRUCT_END(pmpaddr0) + +CSR_STRUCT_START(pmpaddr1) +CSR_STRUCT_END(pmpaddr1) + +CSR_STRUCT_START(pmpaddr2) +CSR_STRUCT_END(pmpaddr2) + +CSR_STRUCT_START(pmpaddr3) +CSR_STRUCT_END(pmpaddr3) + +CSR_STRUCT_START(sstatus) + uint64_t uie : 1; + uint64_t sie : 1; + uint64_t pad0: 2; + uint64_t upie: 1; + uint64_t spie: 1; + uint64_t pad1: 2; + uint64_t spp : 1; + uint64_t pad2: 4; +CSR_STRUCT_END(sstatus) + +CSR_STRUCT_START(stvec) +CSR_STRUCT_END(stvec) + +CSR_STRUCT_START(scounteren) +CSR_STRUCT_END(scounteren) + +CSR_STRUCT_START(sie) + uint64_t usie : 1; + uint64_t ssie : 1; + uint64_t pad0 : 2; + uint64_t utie : 1; + uint64_t stie : 1; + uint64_t pad1 : 2; + uint64_t ueie : 1; + uint64_t seie : 1; + uint64_t pad2 : 2; +CSR_STRUCT_END(sie) + +CSR_STRUCT_START(sip) + uint64_t usip : 1; + uint64_t ssip : 1; + uint64_t pad0 : 2; + uint64_t utip : 1; + uint64_t stip : 1; + uint64_t pad1 : 2; + uint64_t ueip : 1; + uint64_t seip : 1; + uint64_t pad2 : 2; +CSR_STRUCT_END(sip) + + +CSR_STRUCT_START(satp) + uint64_t ppn :44; + uint64_t asid:16; + uint64_t mode: 4; +CSR_STRUCT_END(satp) + +CSR_STRUCT_START(scause) + uint64_t code:63; + uint64_t intr: 1; +CSR_STRUCT_END(scause) + +CSR_STRUCT_START(sepc) +CSR_STRUCT_END(sepc) + +CSR_STRUCT_START(stval) +CSR_STRUCT_END(stval) + +CSR_STRUCT_START(sscratch) +CSR_STRUCT_END(sscratch) + +CSR_STRUCT_START(fflags) +CSR_STRUCT_END(fflags) + +CSR_STRUCT_START(frm) +CSR_STRUCT_END(frm) + +CSR_STRUCT_START(fcsr) + union { + struct { + uint64_t nv: 1; + uint64_t dz: 1; + uint64_t of: 1; + uint64_t uf: 1; + uint64_t nx: 1; + uint64_t frm : 3; + }; + struct { + uint64_t val: 5; + } fflags; + }; +CSR_STRUCT_END(fcsr) + +CSR_STRUCT_START(mtime) +CSR_STRUCT_END(mtime) + +#ifdef CONFIG_RVV_010 +// TODO: implement these vcsr +#define IDXVSTART 0x008 +#define IDXVXSAT 0x009 +#define IDXVXRM 0x00a +#define IDXVL 0xc20 +#define IDXVTYPE 0xc21 + +CSR_STRUCT_START(vstart) +CSR_STRUCT_END(vstart) + +CSR_STRUCT_START(vxsat) + uint64_t sat : 1; + uint64_t pad : 63; +CSR_STRUCT_END(vxsat) + +CSR_STRUCT_START(vxrm) + uint64_t rm : 2; + uint64_t pad : 62; +CSR_STRUCT_END(vxrm) + +CSR_STRUCT_START(vl) +CSR_STRUCT_END(vl) + +CSR_STRUCT_START(vtype) + uint64_t vlmul : 3; + uint64_t vsew : 3; + uint64_t vediv : 2; + uint64_t pad : 55; + uint64_t vill : 1; +CSR_STRUCT_END(vtype) + +rtlreg_t check_vsetvl(rtlreg_t vtype_req, rtlreg_t vl_req, bool max_req); +rtlreg_t get_mask(int reg, int idx, uint64_t vsew, uint64_t vlmul); +void set_mask(uint32_t reg, int idx, uint64_t mask, uint64_t vsew, uint64_t vlmul); + +#endif // CONFIG_RVV_010 + +#define CSRS_DECL(name, addr) extern concat(name, _t)* const name; +MAP(CSRS, CSRS_DECL) +#ifdef CONFIG_RVV_010 + MAP(VCSRS, CSRS_DECL) +#endif // CONFIG_RVV_010 + +word_t csrid_read(uint32_t csrid); + +#endif diff --git a/libraries/NEMU/src/isa/riscv64/local-include/intr.h b/libraries/NEMU/src/isa/riscv64/local-include/intr.h new file mode 100644 index 0000000..381e43d --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/local-include/intr.h @@ -0,0 +1,33 @@ +#ifndef __INTR_H__ +#define __INTR_H__ + +#include + +enum { + EX_IAM, // instruction address misaligned + EX_IAF, // instruction address fault + EX_II, // illegal instruction + EX_BP, // breakpoint + EX_LAM, // load address misaligned + EX_LAF, // load address fault + EX_SAM, // store/amo address misaligned + EX_SAF, // store/amo address fault + EX_ECU, // ecall from U-mode + EX_ECS, // ecall from S-mode + EX_RS0, // reserved + EX_ECM, // ecall from M-mode + EX_IPF, // instruction page fault + EX_LPF, // load page fault + EX_RS1, // reserved + EX_SPF, // store/amo page fault +}; + +// now NEMU does not support EX_IAM, +// so it may ok to use EX_IAM to indicate a successful memory access +#define MEM_OK 0 + +word_t raise_intr(word_t NO, vaddr_t epc); +#define return_on_mem_ex() do { if (cpu.mem_exception != MEM_OK) return; } while (0) + + +#endif diff --git a/libraries/NEMU/src/isa/riscv64/local-include/reg.h b/libraries/NEMU/src/isa/riscv64/local-include/reg.h new file mode 100644 index 0000000..a90081f --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/local-include/reg.h @@ -0,0 +1,28 @@ +#ifndef __RISCV64_REG_H__ +#define __RISCV64_REG_H__ + +#include + +static inline int check_reg_index(int index) { + IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); + return index; +} + +#define reg_l(index) (cpu.gpr[check_reg_index(index)]._64) + +static inline const char* reg_name(int index, int width) { + extern const char* regsl[]; + IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); + return regsl[index]; +} + +// Floating Point Regs +#define fpreg_l(index) (cpu.fpr[check_reg_index(index)]._64) + +static inline const char* fpreg_name(int index, int width){ + extern const char* fpregsl[]; + IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); + return fpregsl[index]; +} + +#endif diff --git a/libraries/NEMU/src/isa/riscv64/local-include/rtl.h b/libraries/NEMU/src/isa/riscv64/local-include/rtl.h new file mode 100644 index 0000000..cab2ea3 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/local-include/rtl.h @@ -0,0 +1,45 @@ +#ifndef __RISCV64_RTL_H__ +#define __RISCV64_RTL_H__ + +#include +#include "reg.h" +#include "csr.h" + +#define FBOX_MASK 0xFFFFFFFF00000000ull +// The bit pattern for a default generated 32-bit floating-point NaN +#define defaultNaNF32UI 0x7FC00000 + +static inline def_rtl(fbox, rtlreg_t *dest, rtlreg_t *src) { + rtl_ori(s, dest, src, FBOX_MASK); +} + +static inline def_rtl(funbox, rtlreg_t *dest, rtlreg_t *src) { + if((*src & FBOX_MASK) == FBOX_MASK){ + rtl_andi(s, dest, src, ~FBOX_MASK); + } else { + *dest = defaultNaNF32UI; + } +} + +static inline def_rtl(fsr, rtlreg_t *fdest, rtlreg_t *src, int width) { + if (width == FPCALL_W32) rtl_fbox(s, fdest, src); + else if (width == FPCALL_W64) rtl_mv(s, fdest, src); + else assert(0); + void fp_set_dirty(); + fp_set_dirty(); +} + +#ifdef CONFIG_RVV_010 + +static inline def_rtl(lr, rtlreg_t* dest, int r, int width) { + rtl_mv(s, dest, ®_l(r)); +} + +static inline def_rtl(sr, int r, const rtlreg_t *src1, int width) { + if (r != 0) { rtl_mv(s, ®_l(r), src1); } +} + +#endif // CONFIG_RVV_010 + + +#endif diff --git a/libraries/NEMU/src/isa/riscv64/local-include/vreg.h b/libraries/NEMU/src/isa/riscv64/local-include/vreg.h new file mode 100644 index 0000000..c4656fb --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/local-include/vreg.h @@ -0,0 +1,57 @@ +#ifdef CONFIG_RVV_010 +#ifndef __RISCV64_VREG_H__ +#define __RISCV64_VREG_H__ + +#include "common.h" + +#define VLEN 256 +#define VLENLG 8 +#define MAXELEN 64 +#define VENUM64 (VLEN/64) +#define VENUM32 (VLEN/32) +#define VENUM16 (VLEN/16) +#define VENUM8 (VLEN/8) +#define SLEN 256 + +static inline int check_reg_index1(int index) { + assert(index >= 0 && index < 32); + return index; +} + +static inline int check_reg_index2(int index2, int elen) { + assert(index2 >= 0 && index2 < VLEN/elen); + return index2; +} + +// #define vreg_len(index1, index2, elen) (cpu.vr[check_reg_index1(index1)]._64[check_reg_index2(index2, elen)]) +#define vreg_ll(index) (cpu.vr[check_reg_index1(index)]) +// #define vreg_l(index1, index2) vreg_len(index1, index2, 64) +// #define vreg_i(index1, index2) vreg_len(index1, index2, 32) +// #define vreg_s(index1, index2) vreg_len(index1, index2, 16) +// #define vreg_b(index1, index2) vreg_len(index1, index2, 8) +#define vreg_l(index1, index2) (cpu.vr[check_reg_index1(index1)]._64[check_reg_index2(index2, 64)]) +#define vreg_i(index1, index2) (cpu.vr[check_reg_index1(index1)]._32[check_reg_index2(index2, 32)]) +#define vreg_s(index1, index2) (cpu.vr[check_reg_index1(index1)]._16[check_reg_index2(index2, 16)]) +#define vreg_b(index1, index2) (cpu.vr[check_reg_index1(index1)]._8[check_reg_index2(index2, 8)]) + + +static inline const char * vreg_name(int index, int width) { + extern const char * vregsl[]; + assert(index >= 0 && index < 32); + return vregsl[index]; +} + +void get_vreg(uint64_t reg, int idx, rtlreg_t *dst, uint64_t vsew, uint64_t vlmul, int is_signed, int needAlign); +void set_vreg(uint64_t reg, int idx, rtlreg_t src, uint64_t vsew, uint64_t vlmul, int needAlgin); + +void longjmp_raise_intr(uint32_t foo); + +#define SRC_VV 0 +#define SRC_VI 1 +#define SRC_VS 2 +#define SRC_SI 3 +#define UNSIGNED 0 +#define SIGNED 1 +#endif //__RISCV64_VREG_H__ + +#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/logo.c b/libraries/NEMU/src/isa/riscv64/logo.c new file mode 100644 index 0000000..3ea54c2 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/logo.c @@ -0,0 +1,48 @@ +// refer to http://www.patorjk.com/software/taag/#p=display&f=Big&t=Type%20Something%20 + +/* + _ __ __ _ + (_) | \/ | | | + _ __ _ ___ ___ ________ __ | \ / | __ _ _ __ _ _ __ _| | + | '__| / __|/ __|______\ \ / / | |\/| |/ _` | '_ \| | | |/ _` | | + | | | \__ \ (__ \ V / | | | | (_| | | | | |_| | (_| | | + |_| |_|___/\___| \_/ |_| |_|\__,_|_| |_|\__,_|\__,_|_| + +*/ + +unsigned char isa_logo[] = { + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x20, + 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x28, 0x5f, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x7c, 0x20, 0x20, 0x5c, 0x2f, 0x20, 0x20, 0x7c, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x20, + 0x7c, 0x0a, 0x20, 0x20, 0x5f, 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x20, 0x5f, + 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x5f, 0x5f, 0x5f, 0x5f, + 0x5f, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x20, 0x7c, 0x20, + 0x5c, 0x20, 0x20, 0x2f, 0x20, 0x7c, 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x20, + 0x5f, 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x20, 0x5f, 0x20, + 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x7c, 0x20, + 0x27, 0x5f, 0x5f, 0x7c, 0x20, 0x2f, 0x20, 0x5f, 0x5f, 0x7c, 0x2f, 0x20, + 0x5f, 0x5f, 0x7c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5c, 0x20, 0x5c, + 0x20, 0x2f, 0x20, 0x2f, 0x20, 0x7c, 0x20, 0x7c, 0x5c, 0x2f, 0x7c, 0x20, + 0x7c, 0x2f, 0x20, 0x5f, 0x60, 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x20, 0x5c, + 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x2f, 0x20, 0x5f, 0x60, 0x20, + 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x20, 0x7c, 0x20, + 0x5c, 0x5f, 0x5f, 0x20, 0x5c, 0x20, 0x28, 0x5f, 0x5f, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x20, 0x56, 0x20, 0x2f, 0x20, 0x20, + 0x7c, 0x20, 0x7c, 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x7c, + 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x5f, 0x7c, + 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x0a, 0x20, + 0x7c, 0x5f, 0x7c, 0x20, 0x20, 0x7c, 0x5f, 0x7c, 0x5f, 0x5f, 0x5f, 0x2f, + 0x5c, 0x5f, 0x5f, 0x5f, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x5c, 0x5f, 0x2f, 0x20, 0x20, 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x20, + 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x20, + 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, + 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x0a +}; diff --git a/libraries/NEMU/src/isa/riscv64/reg.c b/libraries/NEMU/src/isa/riscv64/reg.c new file mode 100644 index 0000000..f0fc7b7 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/reg.c @@ -0,0 +1,72 @@ +#include +//#include +#include "local-include/reg.h" +#include "local-include/csr.h" +//#include "local-include/intr.h" + +const char *regsl[] = { + "$0", "ra", "sp", "gp", "tp", "t0", "t1", "t2", + "s0", "s1", "a0", "a1", "a2", "a3", "a4", "a5", + "a6", "a7", "s2", "s3", "s4", "s5", "s6", "s7", + "s8", "s9", "s10", "s11", "t3", "t4", "t5", "t6" +}; + +const char *fpregsl[] = { + "ft0", "ft1", "ft2", "ft3", "ft4", "ft5", "ft6", "ft7", + "fs0", "fs1", "fa0", "fa1", "fa2", "fa3", "fa4", "fa5", + "fa6", "fa7", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7", + "fs8", "fs9", "fs10", "fs11", "ft8", "ft9", "ft10", "ft11" +}; + +void isa_reg_display() { + int i; + for (i = 0; i < 32; i ++) { + printf("%4s: " FMT_WORD " ", regsl[i], cpu.gpr[i]._64); + if (i % 4 == 3) { + printf("\n"); + } + } + for (i = 0; i < 32; i ++) { + printf("%4s: " FMT_WORD " ", fpregsl[i], cpu.fpr[i]._64); + if (i % 4 == 3) { + printf("\n"); + } + } + printf("pc: " FMT_WORD " mstatus: " FMT_WORD " mcause: " FMT_WORD " mepc: " FMT_WORD "\n", + cpu.pc, mstatus->val, mcause->val, mepc->val); + printf("%22s sstatus: " FMT_WORD " scause: " FMT_WORD " sepc: " FMT_WORD "\n", + "", csrid_read(0x100), scause->val, sepc->val); + printf("satp: " FMT_WORD "\n", satp->val); + printf("mip: " FMT_WORD " mie: " FMT_WORD " mscratch: " FMT_WORD " sscratch: " FMT_WORD "\n", + mip->val, mie->val, mscratch->val, sscratch->val); + printf("mideleg: " FMT_WORD " medeleg: " FMT_WORD "\n", + mideleg->val, medeleg->val); + printf("mtval: " FMT_WORD " stval: " FMT_WORD " mtvec: " FMT_WORD " stvec: " FMT_WORD "\n", + mtval->val, stval->val, mtvec->val, stvec->val); +#ifdef CONFIG_RVV_010 + //vector register + extern const char * vregsl[]; + for(i = 0; i < 32; i ++) { + printf("%s: ", vregsl[i]); + printf("0x%016lx_%016lx_%016lx_%016lx ", + cpu.vr[i]._64[3], cpu.vr[i]._64[2], cpu.vr[i]._64[1], cpu.vr[i]._64[0]); + if(i%2) printf("\n"); + } + printf("vtype: " FMT_WORD " vstart: " FMT_WORD " vxsat: " FMT_WORD "\n", vtype->val, vstart->val, vxsat->val); + printf("vxrm: " FMT_WORD " vl: " FMT_WORD "\n", vxrm->val, vl->val); +#endif // CONFIG_RVV_010 + fflush(stdout); +} + +rtlreg_t isa_reg_str2val(const char *s, bool *success) { + int i; + *success = true; + for (i = 0; i < 32; i ++) { + if (strcmp(regsl[i], s) == 0) return reg_l(i); + } + + if (strcmp("pc", s) == 0) return cpu.pc; + + *success = false; + return 0; +} diff --git a/libraries/NEMU/src/isa/riscv64/system/intr.c b/libraries/NEMU/src/isa/riscv64/system/intr.c new file mode 100644 index 0000000..baeda70 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/system/intr.c @@ -0,0 +1,78 @@ +#include +#include "../local-include/csr.h" +#include "../local-include/intr.h" + +void update_mmu_state(); + +#define INTR_BIT (1ULL << 63) +enum { + IRQ_USIP, IRQ_SSIP, IRQ_HSIP, IRQ_MSIP, + IRQ_UTIP, IRQ_STIP, IRQ_HTIP, IRQ_MTIP, + IRQ_UEIP, IRQ_SEIP, IRQ_HEIP, IRQ_MEIP +}; + +word_t raise_intr(word_t NO, vaddr_t epc) { + switch (NO) { + case EX_II: + case EX_IPF: + case EX_LPF: + case EX_SPF: difftest_skip_dut(1, 2); break; + } + + word_t deleg = (NO & INTR_BIT ? mideleg->val : medeleg->val); + bool delegS = ((deleg & (1 << (NO & 0xf))) != 0) && (cpu.mode < MODE_M); + + if (delegS) { + scause->val = NO; + sepc->val = epc; + mstatus->spp = cpu.mode; + mstatus->spie = mstatus->sie; + mstatus->sie = 0; + switch (NO) { + case EX_IPF: case EX_LPF: case EX_SPF: + case EX_LAM: case EX_SAM: + break; + default: stval->val = 0; + } + cpu.mode = MODE_S; + update_mmu_state(); + return stvec->val; + } else { + mcause->val = NO; + mepc->val = epc; + mstatus->mpp = cpu.mode; + mstatus->mpie = mstatus->mie; + mstatus->mie = 0; + switch (NO) { + case EX_IPF: case EX_LPF: case EX_SPF: + case EX_LAM: case EX_SAM: + break; + default: mtval->val = 0; + } + cpu.mode = MODE_M; + update_mmu_state(); + return mtvec->val; + } +} + +word_t isa_query_intr() { + word_t intr_vec = mie->val & mip->val; + if (!intr_vec) return INTR_EMPTY; + + const int priority [] = { + IRQ_MEIP, IRQ_MSIP, IRQ_MTIP, + IRQ_SEIP, IRQ_SSIP, IRQ_STIP, + IRQ_UEIP, IRQ_USIP, IRQ_UTIP + }; + int i; + for (i = 0; i < 9; i ++) { + int irq = priority[i]; + if (intr_vec & (1 << irq)) { + bool deleg = (mideleg->val & (1 << irq)) != 0; + bool global_enable = (deleg ? ((cpu.mode == MODE_S) && mstatus->sie) || (cpu.mode < MODE_S) : + ((cpu.mode == MODE_M) && mstatus->mie) || (cpu.mode < MODE_M)); + if (global_enable) return irq | INTR_BIT; + } + } + return INTR_EMPTY; +} diff --git a/libraries/NEMU/src/isa/riscv64/system/mmu.c b/libraries/NEMU/src/isa/riscv64/system/mmu.c new file mode 100644 index 0000000..b14cdec --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/system/mmu.c @@ -0,0 +1,266 @@ +#include +#include +#include +#include +#include "../local-include/csr.h" +#include "../local-include/intr.h" + +typedef union PageTableEntry { + struct { + uint32_t v : 1; + uint32_t r : 1; + uint32_t w : 1; + uint32_t x : 1; + uint32_t u : 1; + uint32_t g : 1; + uint32_t a : 1; + uint32_t d : 1; + uint32_t rsw : 2; + uint64_t ppn :44; + uint32_t pad :10; + }; + uint64_t val; +} PTE; + +#define PGSHFT 12 +#define PGMASK ((1ull << PGSHFT) - 1) +#define PGBASE(pn) (pn << PGSHFT) + +// Sv39 page walk +#define PTW_LEVEL 3 +#define PTE_SIZE 8 +#define VPNMASK 0x1ff +static inline uintptr_t VPNiSHFT(int i) { + return (PGSHFT) + 9 * i; +} +static inline uintptr_t VPNi(vaddr_t va, int i) { + return (va >> VPNiSHFT(i)) & VPNMASK; +} + +static inline bool check_permission(PTE *pte, bool ok, vaddr_t vaddr, int type) { + bool ifetch = (type == MEM_TYPE_IFETCH); + uint32_t mode = (mstatus->mprv && !ifetch ? mstatus->mpp : cpu.mode); + assert(mode == MODE_U || mode == MODE_S); + ok = ok && pte->v; + ok = ok && !(mode == MODE_U && !pte->u); + ok = ok && !(pte->u && ((mode == MODE_S) && (!mstatus->sum || ifetch))); + if (ifetch) { + if (!(ok && pte->x)) { + assert(!cpu.amo); + stval->val = vaddr; + longjmp_exception(EX_IPF); + return false; + } + } else if (type == MEM_TYPE_READ) { + bool can_load = pte->r || (mstatus->mxr && pte->x); + if (!(ok && can_load)) { + if (cpu.mode == MODE_M) mtval->val = vaddr; + else stval->val = vaddr; + //if (cpu.amo) Log("redirect to AMO page fault exception at pc = " FMT_WORD, cpu.pc); + int ex = (cpu.amo ? EX_SPF : EX_LPF); + cpu.amo = false; + longjmp_exception(ex); + return false; + } + } else { + if (!(ok && pte->w)) { + if (cpu.mode == MODE_M) mtval->val = vaddr; + else stval->val = vaddr; + cpu.amo = false; + longjmp_exception(EX_SPF); + return false; + } + } + return true; +} + +static paddr_t ptw(vaddr_t vaddr, int type) { + + word_t pg_base = PGBASE(satp->ppn); + word_t p_pte; // pte pointer + PTE pte; + int level; + int64_t vaddr39 = vaddr << (64 - 39); + vaddr39 >>= (64 - 39); + if ((uint64_t)vaddr39 != vaddr) goto bad; + for (level = PTW_LEVEL - 1; level >= 0;) { + p_pte = pg_base + VPNi(vaddr, level) * PTE_SIZE; + pte.val = paddr_read(p_pte, PTE_SIZE); +#ifdef XIANGSHAN_DEBUG + printf("[NEMU] ptw: level %d, vaddr 0x%lx, pg_base 0x%lx, p_pte 0x%lx, pte.val 0x%lx\n", + level, vaddr, pg_base, p_pte, pte.val); +#endif + pg_base = PGBASE(pte.ppn); + if (!pte.v || (!pte.r && pte.w)) goto bad; + if (pte.r || pte.x) { break; } + else { + level --; + if (level < 0) { goto bad; } + } + } + + if (!check_permission(&pte, true, vaddr, type)) return MEM_RET_FAIL; + + if (level > 0) { + // superpage + word_t pg_mask = ((1ull << VPNiSHFT(level)) - 1); + if ((pg_base & pg_mask) != 0) { + // missaligned superpage + goto bad; + } + pg_base = (pg_base & ~pg_mask) | (vaddr & pg_mask & ~PGMASK); + } + +#if !CONFIG_SHARE + bool is_write = (type == MEM_TYPE_WRITE); + if (!pte.a || (!pte.d && is_write)) { + pte.a = true; + pte.d |= is_write; + paddr_write(p_pte, PTE_SIZE, pte.val); + } +#endif + + return pg_base | MEM_RET_OK; + +bad: + check_permission(&pte, false, vaddr, type); + return MEM_RET_FAIL; +} + +static int ifetch_mmu_state = MMU_DIRECT; +static int data_mmu_state = MMU_DIRECT; + +int get_data_mmu_state() { + return (data_mmu_state == MMU_DIRECT ? MMU_DIRECT : MMU_TRANSLATE); +} + +static inline int update_mmu_state_internal(bool ifetch) { + uint32_t mode = (mstatus->mprv && (!ifetch) ? mstatus->mpp : cpu.mode); + if (mode < MODE_M) { + assert(satp->mode == 0 || satp->mode == 8); + if (satp->mode == 8) return MMU_TRANSLATE; + } + return MMU_DIRECT; +} + +int update_mmu_state() { + ifetch_mmu_state = update_mmu_state_internal(true); + int data_mmu_state_old = data_mmu_state; + data_mmu_state = update_mmu_state_internal(false); + return (data_mmu_state ^ data_mmu_state_old) ? true : false; +} + +int isa_mmu_check(vaddr_t vaddr, int len, int type) { + bool is_ifetch = type == MEM_TYPE_IFETCH; + // riscv-privileged 4.4.1: Addressing and Memory Protection: + // Instruction fetch addresses and load and store effective addresses, + // which are 64 bits, must have bits 63–39 all equal to bit 38, or else a page-fault exception will occur. + bool vm_enable = (mstatus->mprv && (!is_ifetch) ? mstatus->mpp : cpu.mode) < MODE_M && satp->mode == 8; + word_t va_mask = ((((word_t)1) << (63 - 38 + 1)) - 1); + word_t va_msbs = vaddr >> 38; + bool va_msbs_ok = (va_msbs == va_mask) || va_msbs == 0 || !vm_enable; + + if(!va_msbs_ok){ + if(is_ifetch){ + stval->val = vaddr; + longjmp_exception(EX_IPF); + } else if(type == MEM_TYPE_READ){ + if (cpu.mode == MODE_M) mtval->val = vaddr; + else stval->val = vaddr; + longjmp_exception(cpu.amo ? EX_SPF : EX_LPF); + } else { + if (cpu.mode == MODE_M) mtval->val = vaddr; + else stval->val = vaddr; + longjmp_exception(EX_SPF); + } + return MEM_RET_FAIL; + } + + if (is_ifetch) return ifetch_mmu_state ? MMU_TRANSLATE : MMU_DIRECT; + if (ISDEF(CONFIG_AC_SOFT) && unlikely((vaddr & (len - 1)) != 0)) { + assert(0); + mtval->val = vaddr; + longjmp_exception(cpu.amo || type == MEM_TYPE_WRITE ? EX_SAM : EX_LAM); + return MEM_RET_FAIL; + } + return data_mmu_state ? MMU_TRANSLATE : MMU_DIRECT; +} + +paddr_t isa_mmu_translate(vaddr_t vaddr, int len, int type) { + paddr_t ptw_result = ptw(vaddr, type); +#ifdef FORCE_RAISE_PF + if(ptw_result != MEM_RET_FAIL && force_raise_pf(vaddr, type) != MEM_RET_OK) + return MEM_RET_FAIL; +#endif + return ptw_result; +} + +int force_raise_pf_record(vaddr_t vaddr, int type) { + static vaddr_t last_addr[3] = {0x0}; + static int force_count[3] = {0}; + if (vaddr != last_addr[type]) { + last_addr[type] = vaddr; + force_count[type] = 0; + } + force_count[type]++; + return force_count[type] == 5; +} + +int force_raise_pf(vaddr_t vaddr, int type){ + bool ifetch = (type == MEM_TYPE_IFETCH); + + if(cpu.guided_exec){ + if(ifetch && cpu.execution_guide.exceptionNo == EX_IPF){ + if (force_raise_pf_record(vaddr, type)) { + return MEM_RET_OK; + } + if (cpu.mode == MODE_M) { + mtval->val = cpu.execution_guide.mtval; + if( + vaddr != cpu.execution_guide.mtval && + // cross page ipf caused mismatch is legal + !((vaddr & 0xfff) == 0xffe && (cpu.execution_guide.mtval & 0xfff) == 0x000) + ){ + printf("[WRANING] nemu mtval %lx does not match core mtval %lx\n", + vaddr, + cpu.execution_guide.mtval + ); + } + } else { + stval->val = cpu.execution_guide.stval; + if( + vaddr != cpu.execution_guide.stval && + // cross page ipf caused mismatch is legal + !((vaddr & 0xfff) == 0xffe && (cpu.execution_guide.stval & 0xfff) == 0x000) + ){ + printf("[WRANING] nemu stval %lx does not match core stval %lx\n", + vaddr, + cpu.execution_guide.stval + ); + } + } + printf("force raise IPF\n"); + longjmp_exception(EX_IPF); + return MEM_RET_FAIL; + } else if(!ifetch && type == MEM_TYPE_READ && cpu.execution_guide.exceptionNo == EX_LPF){ + if (force_raise_pf_record(vaddr, type)) { + return MEM_RET_OK; + } + if (cpu.mode == MODE_M) mtval->val = vaddr; + else stval->val = vaddr; + printf("force raise LPF\n"); + longjmp_exception(EX_LPF); + return MEM_RET_FAIL; + } else if(type == MEM_TYPE_WRITE && cpu.execution_guide.exceptionNo == EX_SPF){ + if (force_raise_pf_record(vaddr, type)) { + return MEM_RET_OK; + } + if (cpu.mode == MODE_M) mtval->val = vaddr; + else stval->val = vaddr; + printf("force raise SPF\n"); + longjmp_exception(EX_SPF); + return MEM_RET_FAIL; + } + } + return MEM_RET_OK; +} \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/system/priv.c b/libraries/NEMU/src/isa/riscv64/system/priv.c new file mode 100644 index 0000000..e5b4c85 --- /dev/null +++ b/libraries/NEMU/src/isa/riscv64/system/priv.c @@ -0,0 +1,217 @@ +#include "../local-include/csr.h" +#include "../local-include/rtl.h" +#include "../local-include/intr.h" +#include +#include + +int update_mmu_state(); +uint64_t clint_uptime(); +void fp_set_dirty(); +void fp_update_rm_cache(uint32_t rm); + +rtlreg_t csr_array[4096] = {}; + +#define CSRS_DEF(name, addr) \ + concat(name, _t)* const name = (concat(name, _t) *)&csr_array[addr]; +MAP(CSRS, CSRS_DEF) +#ifdef CONFIG_RVV_010 +MAP(VCSRS, CSRS_DEF) +#endif // CONFIG_RVV_010 + +#define CSRS_EXIST(name, addr) csr_exist[addr] = 1; +static bool csr_exist[4096] = {}; +void init_csr() { + MAP(CSRS, CSRS_EXIST) + #ifdef CONFIG_RVV_010 + MAP(VCSRS, CSRS_EXIST) + #endif // CONFIG_RVV_010 +}; + +rtlreg_t csr_perf; + +static inline bool csr_is_legal(uint32_t addr) { + assert(addr < 4096); + // CSR does not exist + if(!csr_exist[addr]) { +#ifdef CONFIG_PANIC_ON_UNIMP_CSR + panic("[NEMU] unimplemented CSR 0x%x", addr); +#endif + return false; + } + // CSR exists, but access is not legal + int lowest_access_priv_level = (addr & 0b11 << 8) >> 8; // addr(9,8) + if (!(cpu.mode >= lowest_access_priv_level)) { + return false; + } + return true; +} + +static inline word_t* csr_decode(uint32_t addr) { + assert(addr < 4096); + // Now we check if CSR is implemented / legal to access in csr_is_legal() + // Assert(csr_exist[addr], "unimplemented CSR 0x%x at pc = " FMT_WORD, addr, cpu.pc); + + // Skip CSR for perfcnt + // TODO: dirty implementation + if ((addr >= 0xb00 && addr <= 0xb1f) || (addr >= 0x320 && addr <= 0x33f)) { + return &csr_perf; + } + return &csr_array[addr]; +} +#ifdef CONFIG_RVV_010 +#define SSTATUS_WMASK ((1 << 19) | (1 << 18) | (0x3 << 13) | (0x3 << 9) | (1 << 8) | (1 << 5) | (1 << 1)) +#else +#define SSTATUS_WMASK ((1 << 19) | (1 << 18) | (0x3 << 13) | (1 << 8) | (1 << 5) | (1 << 1)) +#endif // CONFIG_RVV_010 +#define SSTATUS_RMASK (SSTATUS_WMASK | (0x3 << 15) | (1ull << 63) | (3ull << 32)) +#define SIE_MASK (0x222 & mideleg->val) +#define SIP_MASK (0x222 & mideleg->val) + +#define FFLAGS_MASK 0x1f +#define FRM_MASK 0x07 +#define FCSR_MASK 0xff + +#define is_read(csr) (src == (void *)(csr)) +#define is_write(csr) (dest == (void *)(csr)) +#define mask_bitset(old, mask, new) (((old) & ~(mask)) | ((new) & (mask))) + +static inline void update_mstatus_sd() { + // mstatus.fs is always dirty or off in QEMU 3.1.0 + if (ISDEF(CONFIG_DIFFTEST_REF_QEMU) && mstatus->fs) { mstatus->fs = 3; } + mstatus->sd = (mstatus->fs == 3); +} + +static inline word_t csr_read(word_t *src) { + if (is_read(mstatus) || is_read(sstatus)) { update_mstatus_sd(); } + + if (is_read(sstatus)) { return mstatus->val & SSTATUS_RMASK; } + else if (is_read(sie)) { return mie->val & SIE_MASK; } + else if (is_read(sip)) { difftest_skip_ref(); return mip->val & SIP_MASK; } + else if (is_read(fcsr)) { return fcsr->val & FCSR_MASK; } + else if (is_read(fflags)) { return fcsr->fflags.val & FFLAGS_MASK; } + else if (is_read(frm)) { return fcsr->frm & FRM_MASK; } +#ifndef CONFIG_SHARE + else if (is_read(mtime)) { difftest_skip_ref(); return clint_uptime(); } +#endif + if (is_read(mip)) { difftest_skip_ref(); } + return *src; +} + +#ifdef CONFIG_RVV_010 +void vcsr_write(uint32_t addr, rtlreg_t *src) { + word_t *dest = csr_decode(addr); + *dest = *src; +} +#endif // CONFIG_RVV_010 + +static inline void csr_write(word_t *dest, word_t src) { + if (is_write(sstatus)) { mstatus->val = mask_bitset(mstatus->val, SSTATUS_WMASK, src); } + else if (is_write(sie)) { mie->val = mask_bitset(mie->val, SIE_MASK, src); } + else if (is_write(sip)) { mip->val = mask_bitset(mip->val, SIP_MASK, src); } + else if (is_write(medeleg)) { *dest = src & 0xf3ff; } + else if (is_write(mideleg)) { *dest = src & 0x222; } + else if (is_write(fflags)) { + *dest = src & FFLAGS_MASK; + fcsr->val = (frm->val)<<5 | fflags->val; + // fcsr->fflags.val = src; + } + else if (is_write(frm)) { + *dest = src & FRM_MASK; + fcsr->val = (frm->val)<<5 | fflags->val; + // fcsr->frm = src; + } + else if (is_write(fcsr)) { + *dest = src & FCSR_MASK; + fflags->val = src & FFLAGS_MASK; + frm->val = ((src)>>5) & FRM_MASK; + // *dest = src & FCSR_MASK; + } + else { *dest = src; } + + bool need_update_mstatus_sd = false; + if (is_write(fflags) || is_write(frm) || is_write(fcsr)) { + fp_set_dirty(); + fp_update_rm_cache(fcsr->frm); + need_update_mstatus_sd = true; + } + + if (is_write(sstatus) || is_write(mstatus) || need_update_mstatus_sd) { + update_mstatus_sd(); + } + + if (is_write(mstatus) || is_write(satp)) { update_mmu_state(); } + if (is_write(mstatus) || is_write(sstatus) || is_write(satp) || + is_write(mie) || is_write(sie) || is_write(mip) || is_write(sip)) { + set_sys_state_flag(SYS_STATE_UPDATE); + } +} + +word_t csrid_read(uint32_t csrid) { + return csr_read(csr_decode(csrid)); +} + +static void csrrw(rtlreg_t *dest, const rtlreg_t *src, uint32_t csrid) { + if (!csr_is_legal(csrid)) { + longjmp_exception(EX_II); + return; + } + word_t *csr = csr_decode(csrid); + word_t tmp = (src != NULL ? *src : 0); + if (dest != NULL) { *dest = csr_read(csr); } + if (src != NULL) { csr_write(csr, tmp); } +} + +static word_t priv_instr(uint32_t op, const rtlreg_t *src) { + switch (op) { +#ifndef CONFIG_MODE_USER + case 0x102: // sret + mstatus->sie = mstatus->spie; + mstatus->spie = (ISDEF(CONFIG_DIFFTEST_REF_QEMU) ? 0 // this is bug of QEMU + : 1); + cpu.mode = mstatus->spp; + mstatus->spp = MODE_U; + return sepc->val; + case 0x302: // mret + mstatus->mie = mstatus->mpie; + mstatus->mpie = (ISDEF(CONFIG_DIFFTEST_REF_QEMU) ? 0 // this is bug of QEMU + : 1); + cpu.mode = mstatus->mpp; + mstatus->mpp = MODE_U; + update_mmu_state(); + return mepc->val; + break; + case 0x120: // sfence.vma + mmu_tlb_flush(*src); + break; + case 0x105: break; // wfi +#endif + case -1: // fence.i + set_sys_state_flag(SYS_STATE_FLUSH_TCACHE); + break; + default: panic("Unsupported privilige operation = %d", op); + } + return 0; +} + +void isa_hostcall(uint32_t id, rtlreg_t *dest, const rtlreg_t *src1, + const rtlreg_t *src2, word_t imm) { + word_t ret = 0; + switch (id) { + case HOSTCALL_CSR: csrrw(dest, src1, imm); return; +#ifdef CONFIG_MODE_USER + case HOSTCALL_TRAP: + Assert(imm == 0x8, "Unsupport exception = %ld", imm); + uintptr_t host_syscall(uintptr_t id, uintptr_t arg1, uintptr_t arg2, + uintptr_t arg3, uintptr_t arg4, uintptr_t arg5, uintptr_t arg6); + cpu.gpr[10]._64 = host_syscall(cpu.gpr[17]._64, cpu.gpr[10]._64, cpu.gpr[11]._64, + cpu.gpr[12]._64, cpu.gpr[13]._64, cpu.gpr[14]._64, cpu.gpr[15]._64); + ret = *src1 + 4; + break; +#else + case HOSTCALL_TRAP: ret = raise_intr(imm, *src1); break; +#endif + case HOSTCALL_PRIV: ret = priv_instr(imm, src1); break; + default: panic("Unsupported hostcall ID = %d", id); + } + if (dest) *dest = ret; +} diff --git a/libraries/NEMU/src/isa/x86/Kconfig b/libraries/NEMU/src/isa/x86/Kconfig new file mode 100644 index 0000000..ff2f5a3 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/Kconfig @@ -0,0 +1,18 @@ +menu "ISA-dependent Options for x86" + +choice + prompt "Optimization for condition code evaulation" + default x86_CC_SKIP +config x86_CC_SKIP + bool "Skip CC" +config x86_CC_LAZY + bool "Lazy CC" +config x86_CC_NONE + bool "none" +endchoice + +config PA + bool "Enable PA version" + default n + +endmenu diff --git a/libraries/NEMU/src/isa/x86/device/i8237a.c b/libraries/NEMU/src/isa/x86/device/i8237a.c new file mode 100644 index 0000000..25a9a5f --- /dev/null +++ b/libraries/NEMU/src/isa/x86/device/i8237a.c @@ -0,0 +1,14 @@ +#include + +#define I8237A_PAGE_0_PORT 0x87 + +static uint8_t *i8237a_base = NULL; + +static void i8237a_io_handler(uint32_t offset, int len, bool is_write) { +} + +void init_i8237a() { + i8237a_base = (void *)new_space(1); + add_pio_map("i8237a-page0", I8237A_PAGE_0_PORT, i8237a_base, 1, i8237a_io_handler); + i8237a_base[0] = 0xff; +} diff --git a/libraries/NEMU/src/isa/x86/device/i8253.c b/libraries/NEMU/src/isa/x86/device/i8253.c new file mode 100644 index 0000000..f9b123c --- /dev/null +++ b/libraries/NEMU/src/isa/x86/device/i8253.c @@ -0,0 +1,13 @@ +#include + +#define I8253_PORT 0x40 + +static uint8_t *i8253_base = NULL; + +static void i8253_io_handler(uint32_t offset, int len, bool is_write) { +} + +void init_i8253() { + i8253_base = (void *)new_space(4); + add_pio_map("i8253-pit", I8253_PORT, i8253_base, 4, i8253_io_handler); +} diff --git a/libraries/NEMU/src/isa/x86/device/i8259a.c b/libraries/NEMU/src/isa/x86/device/i8259a.c new file mode 100644 index 0000000..1141751 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/device/i8259a.c @@ -0,0 +1,15 @@ +#include + +#define I8259A_MASTER_PORT 0x20 +#define I8259A_SLAVE_PORT 0xa0 + +static uint8_t *i8259a_base = NULL; + +static void i8259a_io_handler(uint32_t offset, int len, bool is_write) { +} + +void init_i8259a() { + i8259a_base = (void *)new_space(2); + add_pio_map("i8259a-master", I8259A_MASTER_PORT, i8259a_base, 2, i8259a_io_handler); + add_pio_map("i8259a-slave", I8259A_SLAVE_PORT, i8259a_base, 2, i8259a_io_handler); +} diff --git a/libraries/NEMU/src/isa/x86/device/ioport80.c b/libraries/NEMU/src/isa/x86/device/ioport80.c new file mode 100644 index 0000000..6613ab4 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/device/ioport80.c @@ -0,0 +1,14 @@ +#include + +// this is an empty device in QEMU +#define IOPORT80_PORT 0x80 + +static uint8_t *ioport80_base = NULL; + +static void ioport80_io_handler(uint32_t offset, int len, bool is_write) { +} + +void init_ioport80() { + ioport80_base = (void *)new_space(1); + add_pio_map("ioport80", IOPORT80_PORT, ioport80_base, 1, ioport80_io_handler); +} diff --git a/libraries/NEMU/src/isa/x86/device/mc146818rtc.c b/libraries/NEMU/src/isa/x86/device/mc146818rtc.c new file mode 100644 index 0000000..9c074e0 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/device/mc146818rtc.c @@ -0,0 +1,13 @@ +#include + +#define RTC_PORT 0x70 + +static uint8_t *rtc_base = NULL; + +static void rtc_io_handler(uint32_t offset, int len, bool is_write) { +} + +void init_mc146818rtc() { + rtc_base = (void *)new_space(2); + add_pio_map("mc146818rtc", RTC_PORT, rtc_base, 2, rtc_io_handler); +} diff --git a/libraries/NEMU/src/isa/x86/difftest/dut.c b/libraries/NEMU/src/isa/x86/difftest/dut.c new file mode 100644 index 0000000..38a3e32 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/difftest/dut.c @@ -0,0 +1,61 @@ +#include +#include +#include "../local-include/reg.h" +#include + +#ifndef __ICS_EXPORT +#include + +bool isa_difftest_checkregs(CPU_state *ref_r, vaddr_t pc) { + if (memcmp(&cpu, ref_r, DIFFTEST_REG_SIZE)) { + int i; + for (i = 0; i < ARRLEN(cpu.gpr); i ++) { + difftest_check_reg(reg_name(i, 4), pc, ref_r->gpr[i]._32, cpu.gpr[i]._32); + } + difftest_check_reg("pc", pc, ref_r->pc, cpu.pc); + return false; + } + return true; +} + +void isa_difftest_attach() { + // first copy the image + ref_difftest_memcpy(CONFIG_MBASE, guest_to_host(CONFIG_MBASE), CONFIG_MSIZE, DIFFTEST_TO_REF); + + // then set some special registers + uint8_t code[] = { + // we put this code at 0x7e00 + 0xb8, 0x00, 0x00, 0x00, 0x00, // mov $0x0, %eax + 0x0f, 0x22, 0xd8, // mov %eax, %cr3 + 0xb8, 0x00, 0x00, 0x00, 0x00, // mov $0x0, %eax + 0x0f, 0x22, 0xc0, // mov %eax, %cr0 + 0x0f, 0x01, 0x1d, 0x40, 0x7e, 0x00, 0x00, // lidtl (0x7e40) + }; + uint8_t idtdesc[6]; + + *(uint32_t *)(code + 1) = cpu.cr3.val; + *(uint32_t *)(code + 9) = cpu.cr0.val; + + idtdesc[0] = cpu.idtr.limit & 0xff; + idtdesc[1] = cpu.idtr.limit >> 8; + *(uint32_t *)(idtdesc + 2) = cpu.idtr.base; + + assert(sizeof(code) < 0x40); + ref_difftest_memcpy(0x7e00, code, sizeof(code), DIFFTEST_TO_REF); + ref_difftest_memcpy(0x7e40, idtdesc, sizeof(idtdesc), DIFFTEST_TO_REF); + + CPU_state r = cpu; + r.pc = 0x7e00; + ref_difftest_regcpy(&r, DIFFTEST_TO_REF); + ref_difftest_exec(5); + + ref_difftest_regcpy(&cpu, DIFFTEST_TO_REF); +} +#else +bool isa_difftest_checkregs(CPU_state *ref_r, vaddr_t pc) { + return false; +} + +void isa_difftest_attach() { +} +#endif diff --git a/libraries/NEMU/src/isa/x86/difftest/ref.c b/libraries/NEMU/src/isa/x86/difftest/ref.c new file mode 100644 index 0000000..fbfa827 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/difftest/ref.c @@ -0,0 +1,12 @@ +#include +#include +#include "../local-include/intr.h" + +void isa_difftest_regcpy(void *dut, bool direction) { + if (direction == DIFFTEST_TO_REF) memcpy(&cpu, dut, DIFFTEST_REG_SIZE); + else memcpy(dut, &cpu, DIFFTEST_REG_SIZE); +} + +void isa_difftest_raise_intr(word_t NO) { + cpu.pc = raise_intr(NO, cpu.pc); +} diff --git a/libraries/NEMU/src/isa/x86/exec/all-instr.h b/libraries/NEMU/src/isa/x86/exec/all-instr.h new file mode 100644 index 0000000..6b4af2b --- /dev/null +++ b/libraries/NEMU/src/isa/x86/exec/all-instr.h @@ -0,0 +1,17 @@ +#include "../local-include/rtl.h" + +#include "arith.h" +#include "control.h" +#include "data-mov.h" +#include "logic.h" +#include "string.h" +#include "system.h" +#include "eflags.h" +#include "bit.h" +#include "misc.h" +#include "vector.h" +#include "fp.h" + +def_EHelper(nop); +def_EHelper(inv); +def_EHelper(nemu_trap); diff --git a/libraries/NEMU/src/isa/x86/exec/exec.c b/libraries/NEMU/src/isa/x86/exec/exec.c new file mode 100644 index 0000000..cabf30e --- /dev/null +++ b/libraries/NEMU/src/isa/x86/exec/exec.c @@ -0,0 +1,476 @@ +#if 0 +#include +#include "../local-include/decode.h" +#include "all-instr.h" + +#undef CASE_ENTRY +#define CASE_ENTRY(idx, id, ex, w) case idx: set_width(s, w); id(s); return_on_mem_ex(); ex(s); break; + +static inline void set_width(Decode *s, int width) { + if (width == -1) return; + if (width == 0) { + width = s->isa.is_operand_size_16 ? 2 : 4; + } + s->src1.width = s->dest.width = s->src2.width = width; +} + +/* 0x80, 0x81, 0x83 */ +static inline def_EHelper(gp1) { + switch (s->isa.ext_opcode) { +#ifdef __ICS_EXPORT + EMPTY(0) EMPTY(1) EMPTY(2) EMPTY(3) + EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) +#else + EXW(0, add, -1) EXW(1, or, -1) EXW(2, adc, -1) EXW(3, sbb, -1) + EXW(4, and, -1) EXW(5, sub, -1) EXW(6, xor, -1) EXW(7, cmp, -1) +#endif + } +} + +/* 0xc0, 0xc1, 0xd0, 0xd1, 0xd2, 0xd3 */ +static inline def_EHelper(gp2) { + switch (s->isa.ext_opcode) { +#ifdef __ICS_EXPORT + EMPTY(0) EMPTY(1) EMPTY(2) EMPTY(3) + EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) +#else + EXW(0, rol, -1) EXW(1, ror, -1) EXW (2, rcl, -1) EXW (3, rcr, -1) + EXW(4, shl, -1) EXW(5, shr, -1) EMPTY(6) EXW (7, sar, -1) +#endif + } +} + +/* 0xf6, 0xf7 */ +static inline def_EHelper(gp3) { + switch (s->isa.ext_opcode) { +#ifdef __ICS_EXPORT + EMPTY(0) EMPTY(1) EMPTY(2) EMPTY(3) + EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) +#else + IDEXW(0, test_I, test, -1) EMPTY(1) EXW(2, not, -1) EXW(3, neg, -1) + EXW (4, mul, -1) EXW (5, imul1, -1) EXW(6, div, -1) EXW(7, idiv, -1) +#endif + } +} + +/* 0xfe */ +static inline def_EHelper(gp4) { + switch (s->isa.ext_opcode) { +#ifdef __ICS_EXPORT + EMPTY(0) EMPTY(1) EMPTY(2) EMPTY(3) + EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) +#else + EXW (0, inc, -1) EXW (1, dec, -1) EMPTY(2) EMPTY(3) + EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) +#endif + } +} + +/* 0xff */ +static inline def_EHelper(gp5) { + switch (s->isa.ext_opcode) { +#ifdef __ICS_EXPORT + EMPTY(0) EMPTY(1) EMPTY(2) EMPTY(3) + EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) +#else + EXW(0, inc, -1) EXW (1, dec, -1) EXW(2, call_rm, -1) EMPTY(3) + EXW(4, jmp_rm, -1) EMPTY(5) EXW(6, push, -1) EMPTY(7) +#endif + } +} + +/* 0x0f 0x01*/ +static inline def_EHelper(gp7) { + switch (s->isa.ext_opcode) { +#ifdef __ICS_EXPORT + EMPTY(0) EMPTY(1) EMPTY(2) EMPTY(3) + EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) +#else + EMPTY(0) EMPTY(1) EXW (2, lgdt, -1) EXW (3, lidt, -1) + EMPTY(4) EMPTY(5) EMPTY(6) EXW (7, invlpg, -1) +#endif + } +} + +#ifndef __ICS_EXPORT +/* 0x0f 0x00*/ +static inline def_EHelper(gp6) { + switch (s->isa.ext_opcode) { + EMPTY(0) EMPTY(1) EXW (2, lldt, -1) EXW (3, ltr, -1) + EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) + } +} + +/* 0x0f 0xba*/ +static inline def_EHelper(gp8) { + switch (s->isa.ext_opcode) { + EMPTY(0) EMPTY(1) EMPTY(2) EMPTY(3) + EXW (4, bt, -1) EXW (5, bts, -1) EXW (6, btr, -1) EMPTY(7) + } +} + +static inline def_EHelper(fp_gp1) { + uint8_t opb = BITS(s->isa.ext_opcode,2,0); + switch (opb) { + EX(0x00, fchs) EX(0x01, fabs) EMPTY(0x02) EMPTY(0x03) + EX(0x04, ftst) EX(0x05, fxam) EMPTY(0x06) EMPTY(0x07) + } +} + +static inline def_EHelper(fp_gp2) { + uint8_t opb = BITS(s->isa.ext_opcode,2,0); + switch (opb) { + EX(0x00, fld1) EX(0x01, fldl2t) EX(0x02, fldl2e) EX(0x03, fldpi) + EX(0x04, fldlg2) EX(0x05, fldln2) EX(0x06, fldz) EMPTY(0x07) + } +} + +static inline def_EHelper(fp_gp3) { + uint8_t opb = BITS(s->isa.ext_opcode,2,0); + switch (opb) { + EMPTY(0x00) IDEX(0x01,St0_St1,fucompp) EMPTY(0x02) EMPTY(0x03) + EMPTY(0x04) EMPTY(0x05) EMPTY(0x06) EMPTY(0x07) + } +} + +static inline def_EHelper(fp_gp4) { + uint8_t opb = BITS(s->isa.ext_opcode,2,0); + switch (opb) { + EMPTY(0x00) EMPTY(0x01) EMPTY(0x02) EX (0X03, finit) + EMPTY(0x04) EMPTY(0x05) EMPTY(0x06) EMPTY(0x07) + } +} + +static inline def_EHelper(fp_gp5) { + uint8_t opb = BITS(s->isa.ext_opcode,2,0); + switch (opb) { + EMPTY(0x00) IDEX(0x01,St0_St1,fcompp) EMPTY(0x02) EMPTY(0x03) + EMPTY(0x04) EMPTY(0x05) EMPTY(0x06) EMPTY(0x07) + } +} + +static inline def_EHelper(fp_gp6) { + uint8_t opb = BITS(s->isa.ext_opcode,2,0); + switch (opb) { + IDEXW(0x00, fsw2a, fstsw, 2) EMPTY(0x01) EMPTY(0x02) EMPTY(0x03) + EMPTY(0x04) EMPTY(0x05) EMPTY(0x06) EMPTY(0x07) + } +} + +static inline def_EHelper(fp_gp7) { + uint8_t opb = BITS(s->isa.ext_opcode,2,0); + switch (opb) { + IDEX(0x00, St0_St1, fprem) IDEX(0x01, St0_St1, fyl2xp1) EX(0x02, fsqrt) EMPTY(0x03) + EX(0x04, frndint) IDEX(0x05, St0_St1, fscale) EMPTY(0x06) EMPTY(0x07) + } +} + +static inline def_EHelper(fp_gp8) { + uint8_t opb = BITS(s->isa.ext_opcode,2,0); + switch (opb) { + EX(0x00, f2xm1) IDEX(0x01, St0_St1, fyl2x) EMPTY(0x02) IDEX(0x03, St0_St1, fpatan) + EMPTY(0x04) EMPTY(0x05) EMPTY(0x06) EMPTY(0x07) + } +} + +static inline def_EHelper(fp) { + uint8_t fp_opcode = BITS(s->opcode,2,0)<<4 | BITS(s->isa.ext_opcode,5,3); + uint8_t fp_mod = BITS(s->isa.ext_opcode,7,6); + if(fp_mod != 3){ + //if (cpu.pc == 0x82a46c9) Log("fp_opcode = 0x%x", fp_opcode); + switch (fp_opcode) + { + IDEX(0x00, St0_M_32r, fadd) IDEX(0x01, St0_M_32r, fmul) IDEX(0x02, St0_M_32r, fcom) IDEX(0x03, St0_M_32r, fcomp) + IDEX(0x04, St0_M_32r, fsub) IDEX(0x05, St0_M_32r, fsubr) IDEX(0x06, St0_M_32r, fdiv) IDEX(0x07, St0_M_32r, fdivr) + IDEX(0x10, ld_St0_M_32r, fld) EMPTY(0x11) IDEX(0x12, st_M_St0_32r, fst) IDEX(0x13, st_M_St0_32r, fstp) + IDEX(0x14, St0_Est, fldenv) IDEXW(0x15, M2fcw, fldcw, 2) IDEX(0x16, St0_Est, fstenv) IDEXW(0x17, fcw2M, fstcw, 2) + IDEX(0x20, St0_M_32i, fadd) IDEX(0x21, St0_M_32i, fmul) IDEX(0x22, St0_M_32i, fcom) IDEX(0x23, St0_M_32i, fcomp) + IDEX(0x24, St0_M_32i, fsub) IDEX(0x25, St0_M_32i, fsubr) IDEX(0x26, St0_M_32i, fdiv) IDEX(0x27, St0_M_32i, fdivr) + IDEX(0x30, ld_St0_M_32i, fld) EMPTY(0x31) IDEX(0x32, st_M_St0_32i, fst) IDEX(0x33, st_M_St0_32i, fstp) + EMPTY(0x34) EMPTY(0x35) /*IDEX(0x35, ld_St0_M_80r, fld)*/ EMPTY(0x36) /*IDEX(0x37, st_M_St0_64r, fstp)*/ EMPTY(0x37) + IDEX(0x40, St0_M_64r, fadd) IDEX(0x41, St0_M_64r, fmul) IDEX(0x42, St0_M_64r, fcom) IDEX(0x43, St0_M_64r, fcomp) + IDEX(0x44, St0_M_64r, fsub) IDEX(0x45, St0_M_64r, fsubr) IDEX(0x46, St0_M_64r, fdiv) IDEX(0x47, St0_M_64r, fdivr) + IDEX(0x50, ld_St0_M_64r, fld) EMPTY(0x51) IDEX(0x52, st_M_St0_64r, fst) IDEX(0x53, st_M_St0_64r, fstp) + EMPTY(0x54) EMPTY(0x55) EMPTY(0x56) IDEXW(0x57, fsw2M, fstsw, 2) + IDEX(0x60, St0_M_16i, fadd) IDEX(0x61, St0_M_16i, fmul) IDEX(0x62, St0_M_16i, fcom) IDEX(0x63, St0_M_16i, fcomp) + IDEX(0x64, St0_M_16i, fsub) IDEX(0x65, St0_M_16i, fsubr) IDEX(0x66, St0_M_16i, fdiv) IDEX(0x67, St0_M_16i, fdivr) + IDEX(0x70, ld_St0_M_16i, fld) EMPTY(0x71) IDEX(0x72, st_M_St0_16i, fst) IDEX(0x73, st_M_St0_16i, fstp) + EMPTY(0x74) IDEX(0x75, ld_St0_M_64i, fld) EMPTY(0x76) IDEX(0x77, st_M_St0_64i, fstp) + default: + exec_inv(s); + break; + } + } + else + { + //if (cpu.pc == 0x8094758) Log("fp_opcode = 0x%x", fp_opcode); + switch (fp_opcode) + { + IDEX(0x00, St0_Est, fadd) IDEX(0x01, St0_Est, fmul) IDEX(0x02, St0_Est, fcom) IDEX(0x03, St0_Est, fcomp) + IDEX(0x04, St0_Est, fsub) IDEX(0x05, St0_Est, fsubr) IDEX(0x06, St0_Est, fdiv) IDEX(0x07, St0_Est, fdivr) + IDEX(0x10, ld_Est_St0, fld) IDEX(0x11, St0_Est, fxch) EX (0x12, nop) EMPTY(0x13) + IDEX(0x14, St0, fp_gp1) IDEX(0x15, ld_St0, fp_gp2) IDEX(0x16, St0_Est, fp_gp8) IDEX(0x17, St0, fp_gp7) + IDEX(0x20, St0_Est, fcmovb) IDEX(0x21, St0_Est, fcmove) IDEX(0x22, St0_Est, fcmovbe) IDEX(0x23, St0_Est, fcmovu) + EMPTY(0x24) EX (0x25, fp_gp3) EMPTY(0x26) EMPTY(0x27) + IDEX(0x30, St0_Est, fcmovnb) IDEX(0x31, St0_Est, fcmovne) IDEX(0x32, St0_Est, fcmovnbe) IDEX(0x33, St0_Est, fcmovnu) + EX (0x34, fp_gp4) IDEX(0x35, St0_Est, fucomi) IDEX(0x36, St0_Est, fcomi) EMPTY(0x37) + IDEX(0x40, Est_St0, fadd) IDEX(0x41, Est_St0, fmul) EMPTY(0x42) EMPTY(0x43) + IDEX(0x44, Est_St0, fsubr) IDEX(0x45, Est_St0, fsub) IDEX(0x46, Est_St0, fdivr) IDEX(0x47, Est_St0, fdiv) + EMPTY(0x50) EMPTY(0x51) IDEX(0x52, st_Est_St0, fst) IDEX(0x53, st_Est_St0, fstp) + IDEX(0x54, St0_Est, fucom) IDEX(0x55, St0_Est, fucomp) EMPTY(0x56) EMPTY(0x57) + IDEX(0x60, Est_St0, faddp) IDEX(0x61, Est_St0, fmulp) EMPTY(0x62) EX (0x63, fp_gp5) + IDEX(0x64, Est_St0, fsubrp) IDEX(0x65, Est_St0, fsubp) IDEX(0x66, Est_St0, fdivrp) IDEX(0x67, Est_St0, fdivp) + EMPTY(0x70) EMPTY(0x71) EMPTY(0x72) EMPTY(0x73) + EX (0x74, fp_gp6) IDEX(0x75, St0_Est, fucomip) IDEX (0x76, St0_Est, fcomip) EMPTY(0x77) + default: + exec_inv(s); + break; + } + } + +} +#endif + +static inline def_EHelper(2byte_esc) { + uint8_t opcode = instr_fetch(&s->seq_pc, 1); + s->opcode = opcode | 0x100; + switch (opcode) { + /* TODO: Add more instructions!!! */ + IDEX (0x01, gp7_E, gp7) +#ifndef __ICS_EXPORT + IDEXW(0x00, gp6_E, gp6, 2) + IDEX (0x20, mov_G2E, mov_cr2r) + IDEX (0x22, mov_E2G, mov_r2cr) + IDEX (0x23, mov_E2G, mov_r2dr) + EX (0x31, rdtsc) + IDEXW(0x6f, E2xmm, movdqa_E2xmm, 4) + IDEXW(0x73, Ib2xmm, psrlq, 4) + IDEXW(0x7e, E2xmm, movq_E2xmm, 4) + IDEXW(0x80, J, jcc, 4) IDEXW(0x81, J, jcc, 4) IDEXW(0x82, J, jcc, 4) IDEXW(0x83, J, jcc, 4) + IDEXW(0x84, J, jcc, 4) IDEXW(0x85, J, jcc, 4) IDEXW(0x86, J, jcc, 4) IDEXW(0x87, J, jcc, 4) + IDEXW(0x88, J, jcc, 4) IDEXW(0x89, J, jcc, 4) IDEXW(0x8a, J, jcc, 4) IDEXW(0x8b, J, jcc, 4) + IDEXW(0x8c, J, jcc, 4) IDEXW(0x8d, J, jcc, 4) IDEXW(0x8e, J, jcc, 4) IDEXW(0x8f, J, jcc, 4) + IDEX (0x40, E2G, cmovcc) IDEX (0x41, E2G, cmovcc) IDEX (0x42, E2G, cmovcc) IDEX (0x43, E2G, cmovcc) + IDEX (0x44, E2G, cmovcc) IDEX (0x45, E2G, cmovcc) IDEX (0x46, E2G, cmovcc) IDEX (0x47, E2G, cmovcc) + IDEX (0x48, E2G, cmovcc) IDEX (0x49, E2G, cmovcc) IDEX (0x4a, E2G, cmovcc) IDEX (0x4b, E2G, cmovcc) + IDEX (0x4c, E2G, cmovcc) IDEX (0x4d, E2G, cmovcc) IDEX (0x4e, E2G, cmovcc) IDEX (0x4f, E2G, cmovcc) + IDEXW(0x90, setcc_E, setcc, 1) IDEXW(0x91, setcc_E, setcc, 1) IDEXW(0x92, setcc_E, setcc, 1) IDEXW(0x93, setcc_E, setcc, 1) + IDEXW(0x94, setcc_E, setcc, 1) IDEXW(0x95, setcc_E, setcc, 1) IDEXW(0x96, setcc_E, setcc, 1) IDEXW(0x97, setcc_E, setcc, 1) + IDEXW(0x98, setcc_E, setcc, 1) IDEXW(0x99, setcc_E, setcc, 1) IDEXW(0x9a, setcc_E, setcc, 1) IDEXW(0x9b, setcc_E, setcc, 1) + IDEXW(0x9c, setcc_E, setcc, 1) IDEXW(0x9d, setcc_E, setcc, 1) IDEXW(0x9e, setcc_E, setcc, 1) IDEXW(0x9f, setcc_E, setcc, 1) + EX (0xa0, push_fs) + EX (0xa1, pop_fs) + EX (0xa2, cpuid) + IDEX (0xa3, bit_G2E, bt) + IDEX (0xa4, Ib_G2E, shld) + IDEX (0xa5, cl_G2E, shld) + IDEX (0xab, bit_G2E, bts) + IDEX (0xac, Ib_G2E, shrd) + IDEX (0xad, cl_G2E, shrd) + IDEX (0xaf, E2G, imul2) + IDEX (0xb1, a_G2E, cmpxchg) + IDEX (0xb3, bit_G2E, btr) + IDEXW(0xb6, mov_E2G, movzx, 1) + IDEXW(0xb7, mov_E2G, movzx, 2) + IDEX (0xba, gp2_Ib2E, gp8) + IDEX (0xbb, bit_G2E, btc) + IDEX (0xbc, mov_E2G, bsf) + IDEX (0xbd, mov_E2G, bsr) + IDEXW(0xbe, mov_E2G, movsx, 1) + IDEXW(0xbf, mov_E2G, movsx, 2) + IDEX (0xc1, G2E, xadd) + IDEXW(0xc7, E, cmpxchg8b, 4) + IDEXW(0xc8, r, bswap, 4) IDEXW(0xc9, r, bswap, 4) IDEXW(0xca, r, bswap, 4) IDEXW(0xcb, r, bswap, 4) + IDEXW(0xcc, r, bswap, 4) IDEXW(0xcd, r, bswap, 4) IDEXW(0xce, r, bswap, 4) IDEXW(0xcf, r, bswap, 4) + IDEXW(0xd6, xmm2E, movq_xmm2E, 4) + IDEXW(0xef, E2xmm, pxor, 4) +#endif + default: exec_inv(s); + } +} + +static inline void fetch_decode_exec(Decode *s) { + uint8_t opcode; +again: + opcode = instr_fetch(&s->seq_pc, 1); + return_on_mem_ex(); + s->opcode = opcode; + switch (opcode) { +#ifdef __ICS_EXPORT + EX (0x0f, 2byte_esc) + IDEXW(0x80, I2E, gp1, 1) + IDEX (0x81, I2E, gp1) + IDEX (0x83, SI2E, gp1) + IDEXW(0x88, mov_G2E, mov, 1) + IDEX (0x89, mov_G2E, mov) + IDEXW(0x8a, mov_E2G, mov, 1) + IDEX (0x8b, mov_E2G, mov) + IDEXW(0xa0, O2a, mov, 1) + IDEX (0xa1, O2a, mov) + IDEXW(0xa2, a2O, mov, 1) + IDEX (0xa3, a2O, mov) + IDEXW(0xb0, mov_I2r, mov, 1) + IDEXW(0xb1, mov_I2r, mov, 1) + IDEXW(0xb2, mov_I2r, mov, 1) + IDEXW(0xb3, mov_I2r, mov, 1) + IDEXW(0xb4, mov_I2r, mov, 1) + IDEXW(0xb5, mov_I2r, mov, 1) + IDEXW(0xb6, mov_I2r, mov, 1) + IDEXW(0xb7, mov_I2r, mov, 1) + IDEX (0xb8, mov_I2r, mov) + IDEX (0xb9, mov_I2r, mov) + IDEX (0xba, mov_I2r, mov) + IDEX (0xbb, mov_I2r, mov) + IDEX (0xbc, mov_I2r, mov) + IDEX (0xbd, mov_I2r, mov) + IDEX (0xbe, mov_I2r, mov) + IDEX (0xbf, mov_I2r, mov) + IDEXW(0xc0, gp2_Ib2E, gp2, 1) + IDEX (0xc1, gp2_Ib2E, gp2) + IDEXW(0xc6, mov_I2E, mov, 1) + IDEX (0xc7, mov_I2E, mov) + IDEXW(0xd0, gp2_1_E, gp2, 1) + IDEX (0xd1, gp2_1_E, gp2) + IDEXW(0xd2, gp2_cl2E, gp2, 1) + IDEX (0xd3, gp2_cl2E, gp2) + EX (0xd6, nemu_trap) + IDEXW(0xf6, E, gp3, 1) + IDEX (0xf7, E, gp3) + IDEXW(0xfe, E, gp4, 1) + IDEX (0xff, E, gp5) +#else +// 1 2 3 4 5 6 7 8 9 +//34567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +IDEXW(0x00, G2E, add, 1) IDEX (0x01, G2E, add) IDEXW(0x02, E2G, add, 1) IDEX (0x03, E2G, add) +IDEXW(0x04, I2a, add, 1) IDEX (0x05, I2a, add) EX (0x06, push_es) EX (0x07, pop_es) +IDEXW(0x08, G2E, or, 1) IDEX (0x09, G2E, or) IDEXW(0x0a, E2G, or, 1) IDEX (0x0b, E2G, or) +IDEXW(0x0c, I2a, or, 1) IDEX (0x0d, I2a, or) EMPTY(0x0e) EX (0x0f, 2byte_esc) +IDEXW(0x10, G2E, adc, 1) IDEX (0x11, G2E, adc) IDEXW(0x12, E2G, adc, 1) IDEX (0x13, E2G, adc) +IDEXW(0x14, I2a, adc, 1) IDEX (0x15, I2a, adc) +IDEXW(0x18, G2E, sbb, 1) IDEX (0x19, G2E, sbb) IDEXW(0x1a, E2G, sbb, 1) IDEX (0x1b, E2G, sbb) +IDEXW(0x1c, I2a, sbb, 1) EX (0x1e, push_ds) EX (0x1f, pop_ds) +IDEXW(0x20, G2E, and, 1) IDEX (0x21, G2E, and) IDEXW(0x22, E2G, and, 1) IDEX (0x23, E2G, and) +IDEXW(0x24, I2a, and, 1) IDEX (0x25, I2a, and) +IDEXW(0x28, G2E, sub, 1) IDEX (0x29, G2E, sub) IDEXW(0x2a, E2G, sub, 1) IDEX (0x2b, E2G, sub) +IDEXW(0x2c, I2a, sub, 1) IDEX (0x2d, I2a, sub) +IDEXW(0x30, G2E, xor, 1) IDEX (0x31, G2E, xor) IDEXW(0x32, E2G, xor, 1) IDEX (0x33, E2G, xor) +IDEXW(0x34, I2a, xor, 1) IDEX (0x35, I2a, xor) +IDEXW(0x38, G2E, cmp, 1) IDEX (0x39, G2E, cmp) IDEXW(0x3a, E2G, cmp, 1) IDEX (0x3b, E2G, cmp) +IDEXW(0x3c, I2a, cmp, 1) IDEX (0x3d, I2a, cmp) +IDEX (0x40, r, inc) IDEX (0x41, r, inc) IDEX (0x42, r, inc) IDEX (0x43, r, inc) +IDEX (0x44, r, inc) IDEX (0x45, r, inc) IDEX (0x46, r, inc) IDEX (0x47, r, inc) +IDEX (0x48, r, dec) IDEX (0x49, r, dec) IDEX (0x4a, r, dec) IDEX (0x4b, r, dec) +IDEX (0x4c, r, dec) IDEX (0x4d, r, dec) IDEX (0x4e, r, dec) IDEX (0x4f, r, dec) +IDEX (0x50, r, push) IDEX (0x51, r, push) IDEX (0x52, r, push) IDEX (0x53, r, push) +IDEX (0x54, r, push) IDEX (0x55, r, push) IDEX (0x56, r, push) IDEX (0x57, r, push) +IDEX (0x58, r, pop) IDEX (0x59, r, pop) IDEX (0x5a, r, pop) IDEX (0x5b, r, pop) +IDEX (0x5c, r, pop) IDEX (0x5d, r, pop) IDEX (0x5e, r, pop) IDEX (0x5f, r, pop) +EX (0x60, pusha) EX (0x61, popa) + //EX (0x66, operand_size) +IDEX (0x68, I, push) IDEX (0x69, I_E2G, imul3) IDEXW(0x6a, push_SI, push, 1)IDEX (0x6b, SI_E2G, imul3) + +IDEXW(0x70, J, jcc, 1) IDEXW(0x71, J, jcc, 1) IDEXW(0x72, J, jcc, 1) IDEXW(0x73, J, jcc, 1) +IDEXW(0x74, J, jcc, 1) IDEXW(0x75, J, jcc, 1) IDEXW(0x76, J, jcc, 1) IDEXW(0x77, J, jcc, 1) +IDEXW(0x78, J, jcc, 1) IDEXW(0x79, J, jcc, 1) IDEXW(0x7a, J, jcc, 1) IDEXW(0x7b, J, jcc, 1) +IDEXW(0x7c, J, jcc, 1) IDEXW(0x7d, J, jcc, 1) IDEXW(0x7e, J, jcc, 1) IDEXW(0x7f, J, jcc, 1) +IDEXW(0x80, I2E, gp1, 1) IDEX (0x81, I2E, gp1) EMPTY(0x82) IDEX (0x83, SI2E, gp1) +IDEXW(0x84, G2E, test, 1) IDEX (0x85, G2E, test) IDEXW(0x86, G2E, xchg, 1) IDEX (0x87, G2E, xchg) +IDEXW(0x88, mov_G2E, mov, 1)IDEX (0x89, mov_G2E, mov) IDEXW(0x8a, mov_E2G, mov, 1)IDEX (0x8b, mov_E2G, mov) +IDEX (0x8c, mov_G2E, mov_sreg2rm) IDEX (0x8d, lea_M2G, lea) IDEX (0x8e, mov_E2G, mov_rm2sreg) IDEX (0x8f, E, pop) +EX (0x90, nop) IDEX (0x91, a2r, xchg) IDEX (0x92, a2r, xchg) IDEX (0x93, a2r, xchg) +IDEX (0x94, a2r, xchg) IDEX (0x95, a2r, xchg) IDEX (0x96, a2r, xchg) IDEX (0x97, a2r, xchg) +EX (0x98, cwtl) EX (0x99, cltd) EX (0x9b, fwait) +EX (0x9c, pushf) EX (0x9d, popf) EX (0x9e, sahf) +IDEXW(0xa0, O2a, mov, 1) IDEX (0xa1, O2a, mov) IDEXW(0xa2, a2O, mov, 1) IDEX (0xa3, a2O, mov) +EXW (0xa4, movs, 1) EX (0xa5, movs) EXW (0xa6, cmps, 1) +IDEXW(0xa8, I2a, test, 1) IDEX (0xa9, I2a, test) IDEXW(0xaa, aSrc, stos, 1) IDEX (0xab, aSrc, stos) +IDEXW(0xac, aDest, lods, 1) IDEXW(0xae, aSrc, scas, 1) +IDEXW(0xb0, mov_I2r, mov, 1)IDEXW(0xb1, mov_I2r, mov, 1)IDEXW(0xb2, mov_I2r, mov, 1)IDEXW(0xb3, mov_I2r, mov, 1) +IDEXW(0xb4, mov_I2r, mov, 1)IDEXW(0xb5, mov_I2r, mov, 1)IDEXW(0xb6, mov_I2r, mov, 1)IDEXW(0xb7, mov_I2r, mov, 1) +IDEX (0xb8, mov_I2r, mov) IDEX (0xb9, mov_I2r, mov) IDEX (0xba, mov_I2r, mov) IDEX (0xbb, mov_I2r, mov) +IDEX (0xbc, mov_I2r, mov) IDEX (0xbd, mov_I2r, mov) IDEX (0xbe, mov_I2r, mov) IDEX (0xbf, mov_I2r, mov) +IDEXW(0xc0, gp2_Ib2E, gp2, 1)IDEX (0xc1, gp2_Ib2E, gp2) IDEXW(0xc2, I, ret_imm, 2) EX (0xc3, ret) + IDEXW(0xc6, mov_I2E, mov, 1)IDEX (0xc7, mov_I2E, mov) + EX (0xc9, leave) + IDEXW(0xcd, I, int, 1) EX (0xcf, iret) +IDEXW(0xd0, gp2_1_E, gp2, 1)IDEX (0xd1, gp2_1_E, gp2) IDEXW(0xd2, gp2_cl2E, gp2, 1)IDEX (0xd3, gp2_cl2E, gp2) + EX (0xd6, nemu_trap) +IDEX(0xd8, fp_ext, fp) IDEX(0xd9, fp_ext, fp) IDEX(0xda, fp_ext, fp) IDEX(0xdb, fp_ext, fp) +IDEX(0xdc, fp_ext, fp) IDEX(0xdd, fp_ext, fp) IDEX(0xde, fp_ext, fp) IDEX(0xdf, fp_ext, fp) + IDEXW(0xe3, J, jecxz, 1) +IDEXW(0xe4, in_I2a, in, 1) IDEXW(0xe6, out_a2I, out, 1) +IDEX (0xe8, J, call) IDEXW(0xe9, J, jmp, 4) IDEXW(0xea, LJ, ljmp, 4) IDEXW(0xeb, J, jmp, 1) +IDEXW(0xec, in_dx2a, in, 1) IDEX (0xed, in_dx2a, in) IDEXW(0xee, out_a2dx, out, 1)IDEX (0xef, out_a2dx, out) + +EX (0xf4, hlt) IDEXW(0xf6, E, gp3, 1) IDEX (0xf7, E, gp3) +EX (0xf8, clc) EX (0xf9, stc) EX (0xfa, cli) EX (0xfb, sti) +EX (0xfc, cld) EX (0xfd, std) IDEXW(0xfe, E, gp4, 1) IDEX (0xff, E, gp5) + case 0x64: s->isa.sreg_base = &cpu.sreg[CSR_FS].base; goto again; + case 0x65: s->isa.sreg_base = &cpu.sreg[CSR_GS].base; goto again; + case 0xf0: cpu.lock = 1; goto again; // LOCK prefix + case 0xf2: s->isa.rep_flags = PREFIX_REPNZ; goto again; + case 0xf3: s->isa.rep_flags = PREFIX_REP; goto again; +#endif + case 0x66: s->isa.is_operand_size_16 = true; goto again; + default: exec_inv(s); + } +} + +#ifdef ENABLE_DIFFTEST_INSTR_QUEUE +static uint8_t instr_buf[20]; +static uint8_t instr_len; + +void add_instr(uint8_t *instr, int len) { + int i; + for (i = 0; i < len; i ++) { + instr_buf[instr_len ++] = instr[i]; + } +} +#endif + +vaddr_t isa_exec_once() { +#ifndef __ICS_EXPORT +//#define USE_KVM +#ifdef USE_KVM + extern void kvm_exec(); + kvm_exec(); + return 0; +#endif +#endif + Decode s; + s.is_jmp = 0; + s.isa = (ISADecodeInfo) { 0 }; + s.seq_pc = cpu.pc; + +#ifdef ENABLE_DIFFTEST_INSTR_QUEUE + instr_len = 0; +#endif + + fetch_decode_exec(&s); + +#ifdef ENABLE_DIFFTEST_INSTR_QUEUE + void commit_instr(vaddr_t thispc, uint8_t *instr_buf, uint8_t instr_len); + commit_instr(cpu.pc, instr_buf, instr_len); +#endif + +#ifndef CONFIG_PA + if (cpu.mem_exception != 0) { + cpu.pc = raise_intr(cpu.mem_exception, cpu.pc); + cpu.mem_exception = 0; + } else { + update_pc(&s); + } + cpu.lock = 0; +#else + update_pc(&s); +#endif + +#ifndef __ICS_EXPORT +#if !defined(CONFIG_DIFFTEST) && !defined(CONFIG_SHARE) + void query_intr(); + query_intr(); +#endif +#endif + return s.seq_pc; +} +#endif diff --git a/libraries/NEMU/src/isa/x86/exec/fp.h b/libraries/NEMU/src/isa/x86/exec/fp.h new file mode 100644 index 0000000..68858ea --- /dev/null +++ b/libraries/NEMU/src/isa/x86/exec/fp.h @@ -0,0 +1,456 @@ +#include +#include "cc.h" +#define dfdest (id_dest->pfreg) +#define dfsrc1 (id_src1->pfreg) +#define dfsrc2 (id_src2->pfreg) + +// ------------- dasm ------------- + +static inline const char* get_387_fomat(int subcode) { + static const char *fomat[] = { + "s", "i", "d", "wi", "li", " " + }; + return fomat[subcode]; +} + +#define print_asm_fpu_template(instr) \ + print_asm(str(instr) "%s %s", get_387_fomat(s->isa.fpu_MF), id_dest->str) +#define print_asm_fpu_template2(instr) \ + print_asm(str(instr) "%s %s,%s", get_387_fomat(s->isa.fpu_MF), id_src1->str, id_dest->str) + +// ------------- EHelpers ------------- + +// a macro to build exec_fadd/fsub/fmul/fmdiv/fmin/fmax +#define BUILD_EXEC_F(x) \ +static inline def_EHelper(concat(f, x)) { \ + concat(rtl_f64_, x)(s, dfdest, dfdest, dfsrc1); \ + print_asm_fpu_template2(concat(f, x)); \ +} + +#define BUILD_EXEC_F_R(x) \ +static inline def_EHelper(concat3(f, x, r)) { \ + concat(rtl_f64_, x)(s, dfdest, dfsrc1, dfdest); \ + print_asm_fpu_template2(concat3(f, x, r)); \ +} + +#define BUILD_EXEC_F_P(x) \ +static inline def_EHelper(concat3(f, x, p)) { \ + concat(rtl_f64_, x)(s, dfdest, dfdest, dfsrc1); \ + rtl_popftop(); \ + print_asm_fpu_template2(concat3(f, x, p)); \ +} + +#define BUILD_EXEC_F_RP(x) \ +static inline def_EHelper(concat3(f, x, rp)) { \ + concat(rtl_f64_, x)(s, dfdest, dfsrc1, dfdest); \ + rtl_popftop(); \ + print_asm_fpu_template2(concat3(f, x, rp)); \ +} + +BUILD_EXEC_F(add); +BUILD_EXEC_F(sub); +BUILD_EXEC_F(mul); +BUILD_EXEC_F(div); + +BUILD_EXEC_F_R(sub); +BUILD_EXEC_F_R(div); + +BUILD_EXEC_F_P(add); +BUILD_EXEC_F_P(sub); +BUILD_EXEC_F_P(mul); +BUILD_EXEC_F_P(div); + +BUILD_EXEC_F_RP(sub); +BUILD_EXEC_F_RP(div); + +//compare dest & src, save flag in fsw (use t0, s0) +static inline void fucom_helper(DecodeExecState *s, uint64_t* fp_dest, uint64_t* fp_src){ + rtl_li(s, t0, 0x4500); + rtl_lr_fsw(s,s0); + rtl_or(s, s0, s0, t0); + rtl_xor(s, s0, s0, t0); + rtl_f64_lt(s, t0, fp_dest, fp_src); + rtl_shli(s, t0, t0, 8); + rtl_or(s, s0, s0, t0); + rtl_f64_eq(s, t0, fp_dest, fp_src); + rtl_shli(s, t0, t0, 14); + rtl_or(s, s0, s0, t0); + rtl_sr_fsw(s,s0); +} +static inline def_EHelper(fcom){ + fucom_helper(s,dfdest,dfsrc1); + print_asm_fpu_template2(fcom); +} +static inline def_EHelper(fcomp){ + fucom_helper(s,dfdest,dfsrc1); + rtl_popftop(); + print_asm_fpu_template2(fcomp); +} +static inline def_EHelper(fcompp){ + fucom_helper(s,dfdest,dfsrc1); + rtl_pop2ftop(); + print_asm_fpu_template2(fcompp); +} +static inline def_EHelper(fucom){ + fucom_helper(s,dfdest,dfsrc1); + print_asm_fpu_template2(fucom); +} +static inline def_EHelper(fucomp){ + fucom_helper(s,dfdest,dfsrc1); + rtl_popftop(); + print_asm_fpu_template2(fucomp); +} +static inline def_EHelper(fucompp){ + fucom_helper(s,dfdest,dfsrc1); + rtl_pop2ftop(); + print_asm_fpu_template2(fucompp); +} + +//compare dest & src, save flag in eflags +static inline void fcom_helper(DecodeExecState *s, uint64_t* fp_dest, uint64_t* fp_src){ + rtl_f64_lt(s, t0, fp_dest, fp_src); + rtl_set_CF(s, t0); + rtl_f64_eq(s, t0, fp_dest, fp_src); + rtl_set_ZF(s, t0); + rtl_set_PF(s, rz); +} + +static inline def_EHelper(fcomip){ + fcom_helper(s, dfdest, dfsrc1); + rtl_popftop(); + print_asm_fpu_template2(fcomip); +} + +static inline def_EHelper(fcomi){ + fcom_helper(s, dfdest, dfsrc1); + print_asm_fpu_template2(fcomi); +} + +static inline def_EHelper(fucomi){ + fcom_helper(s, dfdest, dfsrc1); + print_asm_fpu_template2(fucomi); +} + +static inline def_EHelper(fucomip){ + fcom_helper(s, dfdest, dfsrc1); + rtl_popftop(); + print_asm_fpu_template2(fucomi); +} + +static inline def_EHelper(fld){ + operand_fwrite(s, id_dest, dfsrc1); + print_asm_fpu_template2(fld); +} +static inline def_EHelper(fld1){ + rtl_fld_const(s, dfdest, fconst_1); + print_asm_fpu_template(fld1); +} +static inline def_EHelper(fldl2t){ + rtl_fld_const(s, dfdest, fconst_l2t); + print_asm_fpu_template(fldl2t); +} +static inline def_EHelper(fldl2e){ + rtl_fld_const(s, dfdest, fconst_l2e); + print_asm_fpu_template(fldl2e); +} +static inline def_EHelper(fldpi){ + rtl_fld_const(s, dfdest, fconst_pi); + print_asm_fpu_template(fldpi); +} +static inline def_EHelper(fldlg2){ + rtl_fld_const(s, dfdest, fconst_lg2); + print_asm_fpu_template(fldlg2); +} +static inline def_EHelper(fldln2){ + rtl_fld_const(s, dfdest, fconst_ln2); + print_asm_fpu_template(fldln2); +} +static inline def_EHelper(fldz){ + rtl_fld_const(s, dfdest, fconst_z); + print_asm_fpu_template(fldz); +} + +static inline def_EHelper(fst){ + operand_fwrite(s, id_dest, dfsrc1); + print_asm_fpu_template2(fst); +} +static inline def_EHelper(fstp){ + operand_fwrite(s, id_dest, dfsrc1); + rtl_popftop(); + print_asm_fpu_template2(fstp); +} +static inline def_EHelper(fxch){ + rtl_sfr(s, &id_src2->fval, dfdest); + rtl_sfr(s, dfdest, dfsrc1); + rtl_sfr(s, dfsrc1, &id_src2->fval); + print_asm_fpu_template2(fxch); +} + +static inline def_EHelper(fchs){ + rtl_f64_chs(s, dfdest); + print_asm_fpu_template(fchs); +} +static inline def_EHelper(fabs){ + rtl_f64_abs(s, dfdest); + print_asm_fpu_template(fabs); +} +static inline def_EHelper(ftst){ + rtl_fld_const(s, &id_src1->fval, fconst_z); + fucom_helper(s,dfdest,&id_src1->fval); + print_asm_fpu_template(ftst); +} +static inline def_EHelper(fxam){ + //produce number in table as 80387 demand + rtl_class387(s, s2, dfdest); + rtl_li(s, t0, 0x4700); + rtl_lr_fsw(s, s0); + rtl_or(s, s0, s0, t0); + rtl_xor(s, s0, s0, t0); + rtl_or(s, s0, s0, s2); + rtl_sr_fsw(s, s0); + print_asm_fpu_template(fxam); +} + + +static inline def_EHelper(finit){ + rtl_mv(s,&cpu.ftop, rz); + rtl_mv(s,&cpu.fsw,rz); + rtl_li(s,&cpu.fcw,0x37f); + print_asm("finit"); +} +static inline def_EHelper(fstsw){ + operand_write(s, id_dest, dsrc1); + print_asm_template2(fnstsw); +#ifndef __DIFF_REF_NEMU__ + difftest_skip_ref(); +#endif +} + +static inline def_EHelper(fldcw){ + rtl_sr_fcw(s, dsrc1); + print_asm_template2(fldcw); +} +static inline def_EHelper(fstcw){ + operand_write(s, id_dest, dsrc1); + print_asm_template2(fnstcw); +} + +static inline def_EHelper(fldenv){ + rtl_lm(s, s0, s->isa.mbase, s->isa.moff + 0, 4); + rtl_sr_fcw(s, s0); + rtl_lm(s, s0, s->isa.mbase, s->isa.moff + 4, 4); + rtl_sr_fsw(s, s0); + cpu.ftop = (cpu.fsw >> 11) & 0x7; + // others are not loaded + print_asm_template2(fldenv); +} + +static inline def_EHelper(fstenv){ + rtl_sm(s, s->isa.mbase, s->isa.moff + 0, &cpu.fcw, 4); + cpu.fsw = (cpu.fsw & ~0x3800) | ((cpu.ftop & 0x7) << 11); + rtl_sm(s, s->isa.mbase, s->isa.moff + 4, &cpu.fsw, 4); + rtlreg_t ftag = 0; + int i; + for (i = 7; i >= 0; i --) { + ftag <<= 2; + if (i > cpu.ftop) { ftag |= 3; } // empty + else { + rtl_class387(s, s0, &cpu.fpr[i]); + if (*s0 == 0x4200 || *s0 == 0x4000) { ftag |= 1; } // zero + else if (*s0 == 0x700 || *s0 == 0x4600 || *s0 == 0x4400 || *s0 == 0x500 || + *s0 == 0x100 || *s0 == 0x300) { ftag |= 2; } // NaNs, INFs, denormal + } + } + rtl_sm(s, s->isa.mbase, s->isa.moff + 8, &ftag, 4); + rtl_sm(s, s->isa.mbase, s->isa.moff + 12, rz, 4); // fpip + rtl_sm(s, s->isa.mbase, s->isa.moff + 16, rz, 4); // fpcs + rtl_sm(s, s->isa.mbase, s->isa.moff + 20, rz, 4); // fpoo + rtl_sm(s, s->isa.mbase, s->isa.moff + 24, rz, 4); // fpos + print_asm_template2(fstenv); +} + +static inline def_EHelper(fcmovbe){ +#ifdef LAZY_CC + rtl_lazy_setcc(s, s0, CC_BE); +#else + rtl_setcc(s, s0, CC_BE); +#endif + if (*s0) { + *dfdest = *dfsrc1; + } + print_asm_fpu_template2(fcmovbe); +} + +static inline def_EHelper(fcmovnbe){ +#ifdef LAZY_CC + rtl_lazy_setcc(s, s0, CC_BE); +#else + rtl_setcc(s, s0, CC_BE); +#endif + if (!*s0) { + *dfdest = *dfsrc1; + } + print_asm_fpu_template2(fcmovnbe); +} + +static inline def_EHelper(fcmove){ +#ifdef LAZY_CC + rtl_lazy_setcc(s, s0, CC_E); +#else + rtl_setcc(s, s0, CC_E); +#endif + if (*s0) { + *dfdest = *dfsrc1; + } + print_asm_fpu_template2(fcmove); +} + +static inline def_EHelper(fcmovne){ +#ifdef LAZY_CC + rtl_lazy_setcc(s, s0, CC_NE); +#else + rtl_setcc(s, s0, CC_NE); +#endif + if (*s0) { + *dfdest = *dfsrc1; + } + print_asm_fpu_template2(fcmovne); +} + +static inline def_EHelper(fcmovb){ +#ifdef LAZY_CC + rtl_lazy_setcc(s, s0, CC_B); +#else + rtl_setcc(s, s0, CC_B); +#endif + if (*s0) { + *dfdest = *dfsrc1; + } + print_asm_fpu_template2(fcmovb); +} + +static inline def_EHelper(fcmovnb){ +#ifdef LAZY_CC + rtl_lazy_setcc(s, s0, CC_B); +#else + rtl_setcc(s, s0, CC_B); +#endif + if (!(*s0)) { + *dfdest = *dfsrc1; + } + print_asm_fpu_template2(fcmovb); +} + +static inline def_EHelper(fcmovu){ +#ifdef LAZY_CC + rtl_lazy_setcc(s, s0, CC_P); +#else + rtl_setcc(s, s0, CC_P); +#endif + if (*s0) { + *dfdest = *dfsrc1; + } + print_asm_fpu_template2(fcmovu); +} + +static inline def_EHelper(fcmovnu){ +#ifdef LAZY_CC + rtl_lazy_setcc(s, s0, CC_P); +#else + rtl_setcc(s, s0, CC_P); +#endif + if (!(*s0)) { + *dfdest = *dfsrc1; + } + print_asm_fpu_template2(fcmovnu); +} + +static inline def_EHelper(fsqrt) { + *dfdest = f64_sqrt(fprToF64(*dfdest)).v; + print_asm_fpu_template(fsqrt); +} + +static inline def_EHelper(fyl2x) { + union { + double f; + uint64_t i; + } a; + a.i = *dfdest; + a.f = log2(a.f); + *dfsrc1 = f64_mul(fprToF64(*dfsrc1), fprToF64(a.i)).v; + rtl_popftop(); + print_asm_fpu_template(fyl2x); +} + +static inline def_EHelper(frndint) { + *dfdest = f64_roundToInt(fprToF64(*dfdest), softfloat_roundingMode, false).v; + print_asm_fpu_template(frndint); +} + +static inline def_EHelper(fyl2xp1) { + union { + double f; + uint64_t i; + } a; + a.i = *dfdest; + a.f = log2(a.f + 1.0); + *dfsrc1 = f64_mul(fprToF64(*dfsrc1), fprToF64(a.i)).v; + rtl_popftop(); + print_asm_fpu_template(fyl2xp1); +} + +static inline def_EHelper(f2xm1) { + union { + double f; + uint64_t i; + } a; + a.i = *dfdest; + a.f = pow(2.0, a.f) - 1.0; + *dfsrc1 = a.i; + print_asm_fpu_template(f2xm1); +} + +static inline def_EHelper(fscale) { + union { + double f; + uint64_t i; + } a; + a.i = f64_roundToInt(fprToF64(*dfsrc1), softfloat_round_minMag, false).v; + a.f = pow(2.0, a.f); + *dfdest = f64_mul(fprToF64(*dfdest), fprToF64(a.i)).v; + print_asm_fpu_template(fscale); +} + +static inline def_EHelper(fpatan) { + union { + double f; + uint64_t i; + } dest, src; + dest.i = *dfdest; + src.i = *dfsrc1; + + double tmp = src.f / dest.f; + dest.f = atan(tmp); + if (src.f < 0 && dest.f > 0) { dest.f -= M_PI; } + else if (src.f > 0 && dest.f < 0) { dest.f += M_PI; } + assert(fabs(dest.f) < M_PI); + + *dfsrc1 = dest.i; + rtl_popftop(); + print_asm_fpu_template(fpatan); +} + +static inline def_EHelper(fprem) { + union { + double f; + uint64_t i; + } a, b; + a.i = *dfdest; + b.i = *dfsrc1; + a.f = fmod(a.f, b.f); + *dfdest = a.i; + rtl_lr_fsw(s, s0); + rtl_andi(s, s0, s0, ~0x4700); + rtl_sr_fsw(s, s0); + print_asm_fpu_template(fprem); +} diff --git a/libraries/NEMU/src/isa/x86/include/isa-all-instr.h b/libraries/NEMU/src/isa/x86/include/isa-all-instr.h new file mode 100644 index 0000000..9ce3062 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/include/isa-all-instr.h @@ -0,0 +1,38 @@ +#include +#include "../local-include/rtl.h" +#include "../instr/rt.h" + +#define INSTR_NULLARY(f) \ + f(inv) f(nemu_trap) f(nop) \ + f(ret) f(leave) \ + f(cwtl) f(cltd) \ + f(movs) \ + f(rep_movs) f(rep_stos) \ + f(pushf) f(pusha) f(popa) \ + f(clc) f(stc) f(cld) \ + f(iret) \ + f(cpuid) f(rdtsc) + +#define INSTR_UNARY(f) \ + f(call) f(jcc) f(jmp) f(setcc) f(call_E) f(jmp_E) f(ret_imm) f(jecxz) \ + f(push) f(pop) \ + f(inc) f(dec) f(neg) f(not) \ + f(mul) f(imul1) f(div) f(idiv) \ + f(lgdt) f(lidt) f(ltr) f(_int) + +#define INSTR_BINARY(f) \ + f(mov) f(add) f(sub) f(adc) f(sbb) f(cmp) \ + f(and) f(or) f(test) f(xor) f(shl) f(shr) f(sar) f(rol) f(ror) \ + f(lea) f(movzb) f(movzw) f(movsb) f(movsw) \ + f(imul2) \ + f(bsr) f(bt) f(xchg) f(cmpxchg) \ + f(in) f(out) f(mov_cr2r) f(mov_r2cr) \ + f(cmovcc) \ + f(mov_rm2sreg) \ + f(movq_E2xmm) f(movq_xmm2E) f(movdqa_E2xmm) f(psrlq) f(movd_xmm2E) f(pxor) \ + f(xadd) + +#define INSTR_TERNARY(f) \ + f(imul3) f(shld) f(shrd) + +def_all_EXEC_ID(); diff --git a/libraries/NEMU/src/isa/x86/include/isa-def.h b/libraries/NEMU/src/isa/x86/include/isa-def.h new file mode 100644 index 0000000..ec2b5c7 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/include/isa-def.h @@ -0,0 +1,171 @@ +#ifndef __ISA_X86_H__ +#define __ISA_X86_H__ + +#include + +#ifndef __ICS_EXPORT +/* the Control Register 0 */ +typedef union CR0 { + struct { + uint32_t protect_enable : 1; + uint32_t dont_care : 30; + uint32_t paging : 1; + }; + uint32_t val; +} CR0; + +/* the Control Register 3 (physical address of page directory) */ +typedef union CR3 { + struct { + uint32_t pad : 12; + uint32_t ppn : 20; + }; + uint32_t val; +} CR3; +#endif + +/* TODO: Re-organize the `CPU_state' structure to match the register + * encoding scheme in i386 instruction format. For example, if we + * access cpu.gpr[3]._16, we will get the `bx' register; if we access + * cpu.gpr[1]._8[1], we will get the 'ch' register. Hint: Use `union'. + * For more details about the register encoding scheme, see i386 manual. + */ + +typedef struct { +#ifdef __ICS_EXPORT + struct { + uint32_t _32; + uint16_t _16; + uint8_t _8[2]; + } gpr[8]; + + /* Do NOT change the order of the GPRs' definitions. */ + + /* In NEMU, rtlreg_t is exactly uint32_t. This makes RTL instructions + * in PA2 able to directly access these registers. + */ + rtlreg_t eax, ecx, edx, ebx, esp, ebp, esi, edi; + + vaddr_t pc; +#else + union { + union { + uint32_t _32; + uint16_t _16; + uint8_t _8[2]; + } gpr[8]; + + /* Do NOT change the order of the GPRs' definitions. */ + + /* In NEMU, rtlreg_t is exactly uint32_t. This makes RTL instructions + * in PA2 able to directly access these registers. + */ + struct { + rtlreg_t eax, ecx, edx, ebx, esp, ebp, esi, edi; + }; + }; + + vaddr_t pc; + uint32_t eflags; + + rtlreg_t OF, CF, SF, ZF, IF, DF, PF; + + uint64_t fpr[8]; + rtlreg_t ftop; + rtlreg_t fsw,fcw; + +#ifdef CONFIG_x86_CC_LAZY + rtlreg_t cc_dest, cc_src1, cc_src2; + uint32_t cc_width, cc_op, cc_dirty, cc_dynamic; +#endif + + union { + __uint128_t _128; + uint64_t _64[2]; + uint32_t _32[4]; + } xmm[8]; + + struct { + union { + struct { + uint32_t rpl : 2; + uint32_t ti : 1; + uint32_t idx :13; + }; + uint16_t val; + }; + // hidden part + rtlreg_t base; + } sreg[8]; + + struct { + uint32_t limit :16; + uint32_t base :32; + } idtr, gdtr; + + union { + uint32_t cr[4]; + struct { + CR0 cr0; + uint32_t cr1; + uint32_t cr2; + CR3 cr3; + }; + }; + + int mem_exception; + word_t error_code; + IFNDEF(CONFIG_PA, int lock); + + bool INTR; +#endif +} x86_CPU_state; + +// decode +typedef struct { + uint8_t instr[16]; + uint8_t *p_instr; + uint16_t opcode; +#define PREFIX_REP 1 +#define PREFIX_REPNZ 2 + int8_t width; + uint8_t rep_flags; + uint8_t flag_def; + uint8_t flag_use; + bool is_operand_size_16; + const rtlreg_t *sreg_base; + const rtlreg_t *mbase; + const rtlreg_t *midx; + word_t moff; + word_t mscale; + rtlreg_t mbr; +} x86_ISADecodeInfo; + +enum { R_EAX, R_ECX, R_EDX, R_EBX, R_ESP, R_EBP, R_ESI, R_EDI }; +enum { R_AX, R_CX, R_DX, R_BX, R_SP, R_BP, R_SI, R_DI }; +enum { R_AL, R_CL, R_DL, R_BL, R_AH, R_CH, R_DH, R_BH }; + +enum { MODE_R0, MODE_R1, MODE_R2, MODE_R3 }; + +enum { + // selectors + CSR_ES, CSR_CS, CSR_SS, CSR_DS, + CSR_FS, CSR_GS, CSR_TR, CSR_LDTR, + // table registers + CSR_IDTR, CSR_GDTR, + // control registers + CSR_CR0, CSR_CR1, CSR_CR2, CSR_CR3, CSR_CR4 +}; + + +enum { OP_TYPE_IMM, OP_TYPE_REG, OP_TYPE_MEM }; + +//#define suffix_char(width) ((width) == 4 ? 'l' : ((width) == 1 ? 'b' : ((width) == 2 ? 'w' : '?'))) +#ifdef __ICS_EXPORT +#define isa_mmu_state() (MMU_DIRECT) +#else +#define isa_mmu_state() (cpu.cr0.paging ? MMU_TRANSLATE : MMU_DIRECT) +#endif +#define isa_mmu_check(vaddr, len, type) isa_mmu_state() + +#endif diff --git a/libraries/NEMU/src/isa/x86/include/isa-exec.h b/libraries/NEMU/src/isa/x86/include/isa-exec.h new file mode 100644 index 0000000..9322d48 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/include/isa-exec.h @@ -0,0 +1,11 @@ +#include "../instr/data-mov.h" +#include "../instr/arith.h" +#include "../instr/logic.h" +#include "../instr/control.h" +#include "../instr/string.h" +#include "../instr/bit.h" +#include "../instr/eflags.h" +#include "../instr/system.h" +#include "../instr/misc.h" +#include "../instr/special.h" +#include "../instr/vector.h" diff --git a/libraries/NEMU/src/isa/x86/init.c b/libraries/NEMU/src/isa/x86/init.c new file mode 100644 index 0000000..2193da9 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/init.c @@ -0,0 +1,51 @@ +#include +#include +#include "local-include/reg.h" + +static const uint8_t img [] = { + 0xb8, 0x34, 0x12, 0x00, 0x00, // 100000: movl $0x1234,%eax + 0xb9, 0x27, 0x00, 0x10, 0x00, // 100005: movl $0x100027,%ecx + 0x89, 0x01, // 10000a: movl %eax,(%ecx) + 0x66, 0xc7, 0x41, 0x04, 0x01, 0x00, // 10000c: movw $0x1,0x4(%ecx) + 0xbb, 0x02, 0x00, 0x00, 0x00, // 100012: movl $0x2,%ebx + 0x66, 0xc7, 0x84, 0x99, 0x00, 0xe0, // 100017: movw $0x1,-0x2000(%ecx,%ebx,4) + 0xff, 0xff, 0x01, 0x00, + 0xb8, 0x00, 0x00, 0x00, 0x00, // 100021: movl $0x0,%eax + 0xd6, // 100026: nemu_trap +}; + +static void restart() { + /* Set the initial instruction pointer. */ + cpu.pc = RESET_VECTOR; +#ifndef __ICS_EXPORT + cpu.sreg[CSR_CS].val = 0x8; + cpu.cr0.val = 0x60000011; + cpu.fcw = 0x37f; +#endif +} + +void init_i8259a(); +void init_mc146818rtc(); +void init_i8253(); +void init_ioport80(); +void init_i8237a(); + +void init_isa() { + /* Test the implementation of the `CPU_state' structure. */ + void reg_test(); +#ifndef CONFIG_DETERMINISTIC + reg_test(); +#endif + + /* Load built-in image. */ + memcpy(guest_to_host(RESET_VECTOR), img, sizeof(img)); + + /* Initialize this virtual computer system. */ + restart(); + + init_i8259a(); + init_mc146818rtc(); + init_i8253(); + init_ioport80(); + init_i8237a(); +} diff --git a/libraries/NEMU/src/isa/x86/instr/arith.h b/libraries/NEMU/src/isa/x86/instr/arith.h new file mode 100644 index 0000000..389cc6d --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/arith.h @@ -0,0 +1,456 @@ +def_EHelper(add) { + rtl_decode_binary(s, true, true); +#ifdef CONFIG_x86_CC_LAZY + rtl_set_lazycc_src1(s, dsrc1); // set src firstly cuz maybe $dest = $src + rtl_add(s, ddest, ddest, dsrc1); + rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_ADD, s->isa.width); + rtl_wb(s, ddest); +#else + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_add(s, s0, ddest, dsrc1); + rtl_update_ZFSF(s, s0, s->isa.width); + if (s->isa.width != 4) { + rtl_andi(s, s0, s0, 0xffffffffu >> ((4 - s->isa.width) * 8)); + } + rtl_is_add_carry(s, s1, s0, ddest); + rtl_set_CF(s, s1); + rtl_is_add_overflow(s, s1, s0, ddest, dsrc1, s->isa.width); + rtl_set_OF(s, s1); + rtl_wb(s, s0); + } else { + rtl_add(s, ddest, ddest, dsrc1); + rtl_wb(s, ddest); + } +#endif +} + +def_EHelper(sub) { + rtl_decode_binary(s, true, true); +#ifdef CONFIG_x86_CC_LAZY + rtl_set_lazycc(s, ddest, dsrc1, NULL, LAZYCC_SUB, s->isa.width); + rtl_sub(s, ddest, ddest, dsrc1); + rtl_wb(s, ddest); +#else + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_sub(s, s0, ddest, dsrc1); + rtl_update_ZFSF(s, s0, s->isa.width); + rtl_is_sub_carry(s, s1, ddest, dsrc1); + rtl_set_CF(s, s1); + rtl_is_sub_overflow(s, s1, s0, ddest, dsrc1, s->isa.width); + rtl_set_OF(s, s1); + rtl_wb(s, s0); + } else { + rtl_sub(s, ddest, ddest, dsrc1); + rtl_wb(s, ddest); + } +#endif +} + +def_EHelper(cmp) { + rtl_decode_binary(s, true, true); +#ifdef CONFIG_x86_CC_LAZY + rtl_set_lazycc(s, ddest, dsrc1, NULL, LAZYCC_SUB, s->isa.width); +#else + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_sub(s, s0, ddest, dsrc1); + rtl_update_ZFSF(s, s0, s->isa.width); + rtl_is_sub_carry(s, s1, ddest, dsrc1); + rtl_set_CF(s, s1); + rtl_is_sub_overflow(s, s1, s0, ddest, dsrc1, s->isa.width); + rtl_set_OF(s, s1); + } +#endif +} + +def_EHelper(inc) { + rtl_decode_unary(s, true); + rtl_addi(s, ddest, ddest, 1); +#ifdef CONFIG_x86_CC_LAZY + rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_INC, s->isa.width); +#else + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_update_ZFSF(s, ddest, s->isa.width); + rtl_setrelopi(s, RELOP_EQ, s1, ddest, 0x1u << (s->isa.width * 8 - 1)); + rtl_set_OF(s, s1); + } +#endif + rtl_wb(s, ddest); +} + +def_EHelper(dec) { + rtl_decode_unary(s, true); +#ifdef CONFIG_x86_CC_LAZY + rtl_subi(s, ddest, ddest, 1); + rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_DEC, s->isa.width); +#else + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_setrelopi(s, RELOP_EQ, s1, ddest, 0x1u << (s->isa.width * 8 - 1)); + rtl_set_OF(s, s1); + rtl_subi(s, ddest, ddest, 1); + rtl_update_ZFSF(s, ddest, s->isa.width); + } else { + rtl_subi(s, ddest, ddest, 1); + } +#endif + rtl_wb(s, ddest); +} + +def_EHelper(adc) { + rtl_decode_binary(s, true, true); +#ifdef CONFIG_x86_CC_LAZY + rtl_lazy_setcc(s, s0, CC_B); // reading CC_B is to read CF + rtl_add(s, s0, dsrc1, s0); + rtl_set_lazycc_src2(s, dsrc1); + rtl_add(s, ddest, ddest, s0); + rtl_set_lazycc(s, ddest, s0, NULL, LAZYCC_ADC, s->isa.width); + rtl_wb(s, ddest); +#else + rtl_get_CF(s, s0); + rtl_add(s, s0, dsrc1, s0); + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_add(s, s1, ddest, s0); + rtl_update_ZFSF(s, s1, s->isa.width); + rtl_is_add_overflow(s, s2, s1, ddest, dsrc1, s->isa.width); + rtl_set_OF(s, s2); + if (s->isa.width != 4) { + rtl_andi(s, s1, s1, 0xffffffffu >> ((4 - s->isa.width) * 8)); + } + rtl_is_add_carry(s, s2, s1, s0); + rtl_is_add_carry(s, s0, s0, dsrc1); + rtl_or(s, s0, s0, s2); + rtl_set_CF(s, s0); + rtl_wb(s, s1); + } else { + rtl_add(s, ddest, ddest, s0); + rtl_wb(s, ddest); + } +#endif +} + +def_EHelper(sbb) { + rtl_decode_binary(s, true, true); +#ifdef CONFIG_x86_CC_LAZY + rtl_lazy_setcc(s, s0, CC_B); // reading CC_B is to read CF + rtl_add(s, s0, dsrc1, s0); + rtl_set_lazycc_src2(s, dsrc1); + rtl_set_lazycc_src1(s, ddest); + rtl_sub(s, ddest, ddest, s0); + rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_SBB, s->isa.width); + rtl_wb(s, ddest); +#else + rtl_get_CF(s, s0); + rtl_add(s, s0, dsrc1, s0); + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_sub(s, s1, ddest, s0); + rtl_update_ZFSF(s, s1, s->isa.width); + rtl_is_sub_overflow(s, s2, s1, ddest, dsrc1, s->isa.width); + rtl_set_OF(s, s2); + rtl_is_add_carry(s, s2, s0, dsrc1); + rtl_is_sub_carry(s, s0, ddest, s0); + rtl_or(s, s0, s0, s2); + rtl_set_CF(s, s0); + rtl_wb(s, s1); + } else { + rtl_sub(s, ddest, ddest, s0); + rtl_wb(s, ddest); + } +#endif +} + +def_EHelper(neg) { + rtl_decode_unary(s, true); +#ifdef CONFIG_x86_CC_LAZY + rtl_sub(s, ddest, rz, ddest); + rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_NEG, s->isa.width); +#else + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_setrelopi(s, RELOP_NE, s1, ddest, 0); + rtl_set_CF(s, s1); + rtl_setrelopi(s, RELOP_EQ, s1, ddest, 0x1u << (s->isa.width * 8 - 1)); + rtl_set_OF(s, s1); + rtl_sub(s, ddest, rz, ddest); + rtl_update_ZFSF(s, ddest, s->isa.width); + } else { + rtl_sub(s, ddest, rz, ddest); + } +#endif + rtl_wb(s, ddest); +} + +def_EHelper(mul) { + rtl_decode_unary(s, true); + IFNDEF(CONFIG_PA, int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true)); + switch (s->isa.width) { + case 1: + rtl_lr(s, s0, R_EAX, 1); + rtl_mulu_lo(s, s1, ddest, s0); +#ifndef CONFIG_PA + if (need_update_eflags) { + rtl_update_ZFSF(s, s1, s->isa.width); + rtl_andi(s, s0, s1, 0xff00); + rtl_setrelopi(s, RELOP_NE, s0, s0, 0); + rtl_set_OF(s, s0); + rtl_set_CF(s, s0); + } +#endif + rtl_sr(s, R_AX, s1, 2); + break; + case 2: + rtl_lr(s, s0, R_EAX, 2); + rtl_mulu_lo(s, s1, ddest, s0); +#ifndef CONFIG_PA + if (need_update_eflags) { + rtl_update_ZFSF(s, s1, s->isa.width); + rtl_shri(s, s0, s1, 16); + rtl_setrelopi(s, RELOP_NE, s0, s0, 0); + rtl_set_OF(s, s0); + rtl_set_CF(s, s0); + } +#endif + rtl_sr(s, R_AX, s1, 2); + rtl_shri(s, s1, s1, 16); + rtl_sr(s, R_DX, s1, 2); + break; + case 4: + ; rtlreg_t *pdest = ddest; + if (ddest == &cpu.edx) { + rtl_mv(s, s0, ddest); + pdest = s0; + } + rtl_mulu_hi(s, &cpu.edx, pdest, &cpu.eax); + rtl_mulu_lo(s, &cpu.eax, pdest, &cpu.eax); +#ifndef CONFIG_PA + if (need_update_eflags) { + rtl_update_ZFSF(s, &cpu.eax, s->isa.width); + rtl_setrelopi(s, RELOP_NE, s0, &cpu.edx, 0); + rtl_set_OF(s, s0); + rtl_set_CF(s, s0); + } +#endif + break; + default: assert(0); + } +} + +// imul with one operand +def_EHelper(imul1) { + rtl_decode_unary(s, true); + IFNDEF(CONFIG_PA, int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true)); + switch (s->isa.width) { + case 1: + rtl_lr(s, s0, R_EAX, 1); + rtl_sext(s, s0, s0, 1); + rtl_sext(s, ddest, ddest, 1); + rtl_mulu_lo(s, s1, ddest, s0); +#ifndef CONFIG_PA + if (need_update_eflags) { + rtl_update_ZFSF(s, s1, 1); + rtl_sext(s, s0, s1, 1); + rtl_setrelop(s, RELOP_NE, s0, s0, s1); + } +#endif + rtl_sr(s, R_AX, s1, 2); + break; + case 2: + rtl_lr(s, s0, R_EAX, 2); + rtl_sext(s, s0, s0, 2); + rtl_sext(s, ddest, ddest, 2); + rtl_mulu_lo(s, s1, ddest, s0); +#ifndef CONFIG_PA + if (need_update_eflags) { + rtl_update_ZFSF(s, s1, 2); + rtl_sext(s, s0, s1, 2); + rtl_setrelop(s, RELOP_NE, s0, s0, s1); + } +#endif + rtl_sr(s, R_AX, s1, 2); + rtl_shri(s, s1, s1, 16); + rtl_sr(s, R_DX, s1, 2); + break; + case 4: + ; rtlreg_t *pdest = ddest; + if (ddest == &cpu.edx) { + rtl_mv(s, s0, ddest); + pdest = s0; + } + rtl_muls_hi(s, &cpu.edx, pdest, &cpu.eax); + rtl_mulu_lo(s, &cpu.eax, pdest, &cpu.eax); +#ifndef CONFIG_PA + if (need_update_eflags) { + rtl_update_ZFSF(s, &cpu.eax, 4); + rtl_msb(s, s0, &cpu.eax, 4); + rtl_add(s, s0, &cpu.edx, s0); + rtl_setrelopi(s, RELOP_NE, s0, s0, 0); + } +#endif + break; + default: assert(0); + } + + rtl_set_CF(s, s0); + rtl_set_OF(s, s0); +} + +// imul with two operands +def_EHelper(imul2) { + rtl_decode_binary(s, true, true); + rtl_sext(s, dsrc1, dsrc1, s->isa.width); + rtl_sext(s, ddest, ddest, s->isa.width); + + IFNDEF(CONFIG_PA, int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true)); +#ifndef CONFIG_PA + if (need_update_eflags) { + if (s->isa.width == 4) { rtl_muls_hi(s, s1, ddest, dsrc1); } + } +#endif + + rtl_mulu_lo(s, ddest, ddest, dsrc1); + +#ifndef CONFIG_PA + if (need_update_eflags) { + if (s->isa.width == 2) { + rtl_sext(s, s0, ddest, s->isa.width); + rtl_setrelop(s, RELOP_NE, s0, s0, ddest); + } else if (s->isa.width == 4) { + rtl_msb(s, s0, ddest, s->isa.width); + rtl_add(s, s0, s1, s0); + rtl_setrelopi(s, RELOP_NE, s0, s0, 0); + } else { + assert(0); + } + rtl_set_CF(s, s0); + rtl_set_OF(s, s0); + rtl_update_ZFSF(s, ddest, s->isa.width); + } +#endif + + rtl_wb_r(s, ddest); +} + +// imul with three operands +def_EHelper(imul3) { + rtl_decode_binary(s, false, true); // the 3rd operand is always immediate + rtl_sext(s, dsrc1, dsrc1, s->isa.width); + + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { +#if !defined(CONFIG_PA) && defined(CONFIG_DIFFTEST) + if (s->isa.width == 4) { rtl_muls_hi(s, s1, dsrc1, dsrc2); } +#endif + } + + rtl_mulu_lo(s, ddest, dsrc1, dsrc2); + + if (need_update_eflags) { +#if !defined(CONFIG_PA) && defined(CONFIG_DIFFTEST) + if (s->isa.width == 2) { + rtl_sext(s, s0, ddest, s->isa.width); + rtl_setrelop(s, RELOP_NE, s0, s0, ddest); + } else if (s->isa.width == 4) { + rtl_msb(s, s0, ddest, s->isa.width); + rtl_add(s, s0, s1, s0); + rtl_setrelopi(s, RELOP_NE, s0, s0, 0); + } else { + assert(0); + } + rtl_set_CF(s, s0); + rtl_set_OF(s, s0); + rtl_update_ZFSF(s, ddest, s->isa.width); +#endif + } + + rtl_wb_r(s, ddest); +} + +def_EHelper(div) { + rtl_decode_unary(s, true); + switch (s->isa.width) { + case 1: + rtl_lr(s, s0, R_AX, 2); + rtl_divu_q(s, s1, s0, ddest); + rtl_divu_r(s, s0, s0, ddest); + rtl_sr(s, R_AL, s1, 1); + rtl_sr(s, R_AH, s0, 1); + break; + case 2: + rtl_lr(s, s0, R_AX, 2); + rtl_lr(s, s1, R_DX, 2); + rtl_shli(s, s1, s1, 16); + rtl_or(s, s0, s0, s1); + rtl_divu_q(s, s1, s0, ddest); + rtl_divu_r(s, s0, s0, ddest); + rtl_sr(s, R_AX, s1, 2); + rtl_sr(s, R_DX, s0, 2); + break; + case 4: + ; rtlreg_t *pdest = ddest; + if (ddest == &cpu.eax) pdest = s0; + rtl_mv(s, s0, &cpu.eax); + rtl_div64u_q(s, &cpu.eax, &cpu.edx, s0, pdest); + rtl_div64u_r(s, &cpu.edx, &cpu.edx, s0, pdest); + break; + default: assert(0); + } +} + +def_EHelper(idiv) { + rtl_decode_unary(s, true); + switch (s->isa.width) { + case 1: + rtl_lr(s, s0, R_AX, 2); + rtl_divs_q(s, s1, s0, ddest); + rtl_divs_r(s, s0, s0, ddest); + rtl_sr(s, R_AL, s1, 1); + rtl_sr(s, R_AH, s0, 1); + break; + case 2: + rtl_lr(s, s0, R_AX, 2); + rtl_lr(s, s1, R_DX, 2); + rtl_shli(s, s1, s1, 16); + rtl_or(s, s0, s0, s1); + rtl_divs_q(s, s1, s0, ddest); + rtl_divs_r(s, s0, s0, ddest); + rtl_sr(s, R_AX, s1, 2); + rtl_sr(s, R_DX, s0, 2); + break; + case 4: + ; rtlreg_t *pdest = ddest; + if (ddest == &cpu.eax) pdest = s0; + rtl_mv(s, s0, &cpu.eax); + rtl_div64s_q(s, &cpu.eax, &cpu.edx, s0, pdest); + rtl_div64s_r(s, &cpu.edx, &cpu.edx, s0, pdest); + break; + default: assert(0); + } +} + +def_EHelper(xadd) { + rtl_decode_binary(s, true, true); + rtl_add(s, s0, ddest, dsrc1); +#ifdef CONFIG_x86_CC_LAZY + rtl_set_lazycc_src1(s, dsrc1); + rtl_set_lazycc(s, s0, NULL, NULL, LAZYCC_ADD, s->isa.width); +#else + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_update_ZFSF(s, s0, s->isa.width); + if (s->isa.width != 4) { + rtl_andi(s, s0, s0, 0xffffffffu >> ((4 - s->isa.width) * 8)); + } + rtl_is_add_carry(s, s1, s0, ddest); + rtl_set_CF(s, s1); + rtl_is_add_overflow(s, s1, s0, ddest, dsrc1, s->isa.width); + rtl_set_OF(s, s1); + } +#endif + rtl_sr(s, id_src1->reg, ddest, s->isa.width); + rtl_wb(s, s0); +} diff --git a/libraries/NEMU/src/isa/x86/instr/bit.h b/libraries/NEMU/src/isa/x86/instr/bit.h new file mode 100644 index 0000000..e0a03fa --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/bit.h @@ -0,0 +1,113 @@ +def_EHelper(bsr) { +#ifndef CONFIG_ENGINE_INTERPRETER + panic("not support in engines other than interpreter"); +#endif + + rtl_decode_binary(s, false, true); + + rtl_setrelopi(s, RELOP_EQ, s0, dsrc1, 0); + rtl_set_ZF(s, s0); + + int bit = 31; + if (*dsrc1 != 0) { + while ((*dsrc1 & (1u << bit)) == 0) bit--; + *ddest = bit; + rtl_wb_r(s, ddest); + } +} + +def_EHelper(bt) { + if (id_dest->type == OP_TYPE_MEM) { + rtl_shri(s, s0, dsrc1, 5); + rtl_shli(s, s0, s0, 2); + rtl_add(s, s0, s->isa.mbase, s0); + s->isa.mbase = s0; + } + + rtl_decode_binary(s, true, true); + + rtl_li(s, s0, 1); + rtl_shl(s, s0, s0, dsrc1); + rtl_and(s, s0, s0, ddest); + rtl_setrelopi(s, RELOP_NE, s0, s0, 0); + rtl_set_CF(s, s0); +} + +#if 0 +static inline def_EHelper(bsf) { +#ifndef CONFIG_ENGINE_INTERPRETER + panic("not support in engines other than interpreter"); +#endif + + rtl_setrelopi(s, RELOP_EQ, s0, dsrc1, 0); + rtl_set_ZF(s, s0); + rtl_set_CF(s, rz); + + int bit = 0; + if (*dsrc1 != 0) { + while ((*dsrc1 & (1u << bit)) == 0) bit++; + *ddest = bit; + } else if (s->isa.rep_flags) { + *ddest = 32; + } + operand_write(s, id_dest, ddest); + print_asm_template2(bsf); +} + +static inline def_EHelper(btc) { + rtl_li(s, s0, 1); + rtl_shl(s, s0, s0, dsrc1); + rtl_and(s, s1, s0, ddest); + rtl_setrelopi(s, RELOP_NE, s1, s1, 0); + rtl_set_CF(s, s1); + rtl_xor(s, ddest, ddest, s0); + operand_write(s, id_dest, ddest); + print_asm_template2(btc); +} + +static inline def_EHelper(bts) { + rtl_li(s, s0, 1); + rtl_shl(s, s0, s0, dsrc1); + rtl_and(s, s1, s0, ddest); + rtl_setrelopi(s, RELOP_NE, s1, s1, 0); + rtl_set_CF(s, s1); + rtl_or(s, ddest, ddest, s0); + operand_write(s, id_dest, ddest); + print_asm_template2(bts); +} + +static inline def_EHelper(btr) { + rtl_li(s, s0, 1); + rtl_shl(s, s0, s0, dsrc1); + rtl_and(s, s1, s0, ddest); + rtl_setrelopi(s, RELOP_NE, s1, s1, 0); + rtl_set_CF(s, s1); + rtl_not(s, s0, s0); + rtl_and(s, ddest, ddest, s0); + operand_write(s, id_dest, ddest); + print_asm_template2(btr); +} + +static inline def_EHelper(bswap) { + // src[7:0] + rtl_shli(s, s1, ddest, 24); + + // src[31:24] + rtl_shri(s, s0, ddest, 24); + rtl_or(s, s1, s1, s0); + + // src[15:8] + rtl_shli(s, s0, ddest, 8); + rtl_andi(s, s0, s0, 0xff0000); + rtl_or(s, s1, s1, s0); + + // src[23:16] + rtl_shri(s, s0, ddest, 8); + rtl_andi(s, s0, s0, 0xff00); + rtl_or(s, ddest, s1, s0); + + operand_write(s, id_dest, ddest); + + print_asm_template1(bswap); +} +#endif diff --git a/libraries/NEMU/src/isa/x86/instr/cc.h b/libraries/NEMU/src/isa/x86/instr/cc.h new file mode 100644 index 0000000..862bf6c --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/cc.h @@ -0,0 +1,84 @@ +#ifndef __CC_H__ +#define __CC_H__ + +#include "../local-include/rtl.h" + +enum { + CC_O, CC_NO, CC_B, CC_NB, + CC_E, CC_NE, CC_BE, CC_NBE, + CC_S, CC_NS, CC_P, CC_NP, + CC_L, CC_NL, CC_LE, CC_NLE +}; + +#ifndef __ICS_EXPORT +enum { + LAZYCC_ADD, + LAZYCC_SUB, + LAZYCC_INC, + LAZYCC_DEC, + LAZYCC_NEG, + LAZYCC_ADC, + LAZYCC_SBB, + LAZYCC_LOGIC, +}; + +#include "lazycc.h" +#endif + +/* Condition Code */ + +static inline const char* get_cc_name(int subcode) { + static const char *cc_name[] = { + "o", "no", "b", "nb", + "e", "ne", "be", "nbe", + "s", "ns", "p", "np", + "l", "nl", "le", "nle" + }; + return cc_name[subcode]; +} + +static inline void rtl_setcc(Decode *s, rtlreg_t* dest, uint32_t subcode) { + uint32_t invert = subcode & 0x1; + + // TODO: Query EFLAGS to determine whether the condition code is satisfied. + // dest <- ( cc is satisfied ? 1 : 0) + switch (subcode & 0xe) { +#ifdef __ICS_EXPORT + case CC_O: + case CC_B: + case CC_E: + case CC_BE: + case CC_S: + case CC_L: + case CC_LE: + TODO(); + case CC_P: panic("PF is not supported"); +#else + case CC_O: rtl_mv(s, dest, &cpu.OF); break; + case CC_B: rtl_mv(s, dest, &cpu.CF); break; + case CC_E: rtl_mv(s, dest, &cpu.ZF); break; + case CC_BE: rtl_or(s, dest, &cpu.CF, &cpu.ZF); break; + case CC_S: rtl_mv(s, dest, &cpu.SF); break; + case CC_L: rtl_xor(s, dest, &cpu.SF, &cpu.OF); break; + case CC_LE: rtl_xor(s, dest, &cpu.SF, &cpu.OF); + rtl_or(s, dest, dest, &cpu.ZF); + break; + case CC_P: rtl_mv(s, dest, &cpu.PF); break; +#endif + default: panic("should not reach here"); + } + + if (invert) { + rtl_xori(s, dest, dest, 0x1); + } +#ifdef __ICS_EXPORT + assert(*dest == 0 || *dest == 1); +#else +#ifdef CONFIG_ENGINE_INTERPRETER + // we can not do runtime checking in JIT for SDI + assert(*dest == 0 || *dest == 1); +#endif +#endif +} + +#endif diff --git a/libraries/NEMU/src/isa/x86/instr/control.h b/libraries/NEMU/src/isa/x86/instr/control.h new file mode 100644 index 0000000..5d5f60c --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/control.h @@ -0,0 +1,89 @@ +def_EHelper(call) { + IFDEF(CONFIG_x86_CC_LAZY, clean_lazycc()); + // the target address is calculated at the decode stage + rtl_push(s, dsrc1); + rtl_j(s, id_dest->imm); +} + +def_EHelper(ret) { + IFDEF(CONFIG_x86_CC_LAZY, clean_lazycc()); + rtl_pop(s, s0); + rtl_jr(s, s0); +} + +def_EHelper(jmp) { + // the target address is calculated at the decode stage + IFDEF(CONFIG_x86_CC_LAZY, clean_lazycc()); + rtl_j(s, id_dest->imm); +} + +def_EHelper(jcc) { + // the target address is calculated at the decode stage + uint32_t cc = s->isa.opcode & 0xf; +#ifdef CONFIG_x86_CC_LAZY + rtl_lazy_setcc(s, s2, cc); + rtl_mv(s, s0, s2); + clean_lazycc(); +#else + rtl_setcc(s, s0, cc); +#endif + rtl_jrelop(s, RELOP_NE, s0, rz, id_dest->simm); +} + +def_EHelper(call_E) { + IFDEF(CONFIG_x86_CC_LAZY, clean_lazycc()); + rtl_decode_unary(s, true); + rtl_li(s, s0, s->snpc); + rtl_push(s, s0); + rtl_jr(s, ddest); +} + +def_EHelper(jmp_E) { + rtl_decode_unary(s, true); + rtl_jr(s, ddest); +} + +def_EHelper(ret_imm) { + IFDEF(CONFIG_x86_CC_LAZY, clean_lazycc()); + rtl_pop(s, s0); + rtl_add(s, &cpu.esp, &cpu.esp, ddest); + rtl_jr(s, s0); +} + +def_EHelper(jecxz) { + rtl_jrelop(s, RELOP_EQ, &cpu.ecx, rz, id_dest->simm); +} + +#if 0 +#ifndef __ICS_EXPORT + +static inline def_EHelper(ljmp) { + rtl_j(s, s->jmp_pc); + rtl_li(s, s0, id_src1->imm); + rtl_hostcall(s, HOSTCALL_CSR, NULL, s0, CSR_CS); + print_asm("ljmp %s,%s", id_src1->str, id_dest->str); +} + +#else +static inline def_EHelper(call) { + // the target address is calculated at the decode stage + TODO(); + print_asm("call %x", s->jmp_pc); +} + +static inline def_EHelper(ret) { + TODO(); + print_asm("ret"); +} + +static inline def_EHelper(ret_imm) { + TODO(); + print_asm("ret %s", id_dest->str); +} + +static inline def_EHelper(call_rm) { + TODO(); + print_asm("call *%s", id_dest->str); +} +#endif +#endif diff --git a/libraries/NEMU/src/isa/x86/instr/data-mov.h b/libraries/NEMU/src/isa/x86/instr/data-mov.h new file mode 100644 index 0000000..9be2874 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/data-mov.h @@ -0,0 +1,161 @@ +def_EHelper(mov) { + rtl_decode_binary(s, false, true); + rtl_wb(s, dsrc1); +} + +def_EHelper(push) { + rtl_decode_unary(s, true); + rtl_push(s, ddest); +} + +def_EHelper(pop) { + rtl_decode_unary(s, false); + rtl_pop(s, ddest); +} + +def_EHelper(lea) { + rtl_decode_binary(s, false, false); + rtl_addi(s, ddest, &s->isa.mbr, s->isa.moff); + rtl_wb_r(s, ddest); +} + +def_EHelper(movzb) { + rt_decode(s, id_dest, false, s->isa.width); + rt_decode(s, id_src1, true, 1); + rtl_wb_r(s, dsrc1); +} + +def_EHelper(movzw) { + rt_decode(s, id_dest, false, s->isa.width); + rt_decode(s, id_src1, true, 2); + rtl_wb_r(s, dsrc1); +} + +def_EHelper(movsb) { + rt_decode(s, id_dest, false, s->isa.width); + rt_decode(s, id_src1, true, 1); + rtl_sext(s, ddest, dsrc1, 1); + rtl_wb_r(s, ddest); +} + +def_EHelper(movsw) { + rt_decode(s, id_dest, false, s->isa.width); + rt_decode(s, id_src1, true, 2); + rtl_sext(s, ddest, dsrc1, 2); + rtl_wb_r(s, ddest); +} + +def_EHelper(cwtl) { + if (s->isa.width == 2) { + rtl_sext(s, s0, &cpu.eax, 1); + rtl_sr(s, R_AX, s0, 2); + } + else { + rtl_sext(s, &cpu.eax, &cpu.eax, 2); + } +} + +def_EHelper(cltd) { + if (s->isa.width == 2) { TODO(); } + else { rtl_sari(s, &cpu.edx, &cpu.eax, 31); } +} + +def_EHelper(leave) { + rtl_mv(s, &cpu.esp, &cpu.ebp); + rtl_pop(s, &cpu.ebp); +} + +def_EHelper(pusha) { + rtl_mv(s, s0, &cpu.esp); + rtl_push(s, &cpu.eax); + rtl_push(s, &cpu.ecx); + rtl_push(s, &cpu.edx); + rtl_push(s, &cpu.ebx); + rtl_push(s, s0); + rtl_push(s, &cpu.ebp); + rtl_push(s, &cpu.esi); + rtl_push(s, &cpu.edi); +} + +def_EHelper(popa) { + rtl_pop(s, &cpu.edi); + rtl_pop(s, &cpu.esi); + rtl_pop(s, &cpu.ebp); + rtl_pop(s, s0); + rtl_pop(s, &cpu.ebx); + rtl_pop(s, &cpu.edx); + rtl_pop(s, &cpu.ecx); + rtl_pop(s, &cpu.eax); +} + +def_EHelper(xchg) { + rtl_decode_binary(s, true, true); + if (ddest != dsrc1) { + rtl_mv(s, s0, dsrc1); + if (id_src1->type == OP_TYPE_REG) rtl_sr(s, id_src1->reg, ddest, s->isa.width); + else if (id_src1->type == OP_TYPE_MEM) rtl_sm(s, ddest, &s->isa.mbr, s->isa.moff, s->isa.width, MMU_DYNAMIC); + rtl_wb(s, s0); + } +} + +def_EHelper(cmovcc) { + rtl_decode_binary(s, false, true); + + uint32_t cc = s->isa.opcode & 0xf; +#ifdef CONFIG_x86_CC_LAZY + rtl_lazy_setcc(s, s0, cc); +#else + rtl_setcc(s, s0, cc); +#endif + + // ddest <- (s0 ? dsrc1 : ddest) + rtl_setrelopi(s, RELOP_EQ, s0, s0, 0); + rtl_subi(s, s0, s0, 1); + // s0 = mask + rtl_and(s, s1, dsrc1, s0); + rtl_not(s, s0, s0); + rtl_and(s, ddest, ddest, s0); + rtl_or(s, ddest, ddest, s1); + rtl_wb(s, ddest); +} + +def_EHelper(cmpxchg) { +#ifndef CONFIG_ENGINE_INTERPRETER + panic("not support in engines other than interpreter"); +#endif + + assert(s->isa.width == 4); + rtl_decode_binary(s, true, true); + + rtl_setrelop(s, RELOP_EQ, s0, &cpu.eax, ddest); + rtl_set_ZF(s, s0); + if (cpu.ZF) { + rtl_wb(s, dsrc1); + } else { + rtl_sr(s, R_EAX, ddest, s->isa.width); + } +} + +#if 0 +static inline def_EHelper(cmpxchg8b) { +#ifndef CONFIG_ENGINE_INTERPRETER + panic("not support in engines other than interpreter"); +#endif + + // first 4 bytes of the memory operand is already loaded by the decode helper + rtl_lm(s, s0, s->isa.mbase, s->isa.moff + 4, 4); + rtl_setrelop(s, RELOP_EQ, &id_src1->val, &cpu.eax, ddest); + rtl_setrelop(s, RELOP_EQ, &id_src2->val, &cpu.edx, s0); + rtl_and(s, &id_src1->val, &id_src1->val, &id_src2->val); + rtl_set_ZF(s, &id_src1->val); + if (cpu.ZF) { + rtl_sm(s, s->isa.mbase, s->isa.moff + 0, &cpu.ebx, 4); + rtl_sm(s, s->isa.mbase, s->isa.moff + 4, &cpu.ecx, 4); + } else { + rtl_mv(s, &cpu.eax, ddest); + rtl_mv(s, &cpu.edx, s0); + } + + print_asm_template2(cmpxchg8b); +} +#endif diff --git a/libraries/NEMU/src/isa/x86/instr/decode.c b/libraries/NEMU/src/isa/x86/instr/decode.c new file mode 100644 index 0000000..b337ef8 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/decode.c @@ -0,0 +1,864 @@ +#include "../local-include/rtl.h" +#include +#include +#include + +def_all_THelper(); + +static inline word_t x86_instr_fetch(Decode *s, int len) { + word_t ret = instr_fetch(&s->snpc, len); + word_t ret_save = ret; + int i; + for (i = 0; i < len; i ++) { + *(s->isa.p_instr) = ret & 0xff; + ret >>= 8; + s->isa.p_instr ++; + } + return ret_save; +} + +static inline word_t get_instr(Decode *s) { + return *(s->isa.p_instr - 1); +} + +enum { + F_CF = 0x1, + F_PF = 0x2, + F_ZF = 0x4, + F_SF = 0x8, + F_OF = 0x10, + F_ALL = F_CF | F_PF | F_ZF | F_SF | F_OF, +}; + +static const uint8_t cc2flag [16] = { + [CC_O] = F_OF, [CC_NO] = F_OF, + [CC_B] = F_CF, [CC_NB] = F_CF, + [CC_E] = F_ZF, [CC_NE] = F_ZF, + [CC_BE] = F_ZF | F_CF, [CC_NBE] = F_ZF | F_CF, + [CC_S] = F_SF, [CC_NS] = F_SF, + [CC_P] = F_PF, [CC_NP] = F_PF, + [CC_L] = F_SF | F_OF, [CC_NL] = F_SF | F_OF, + [CC_LE] = F_SF | F_OF | F_ZF, [CC_NLE] = F_SF | F_OF | F_ZF, +}; + +static const struct { + uint8_t def, use; +} flag_table[TOTAL_INSTR] = { + [EXEC_ID_add] = { F_ALL, 0 }, + [EXEC_ID_adc] = { F_ALL, F_CF }, + [EXEC_ID_and] = { F_ALL, 0 }, + [EXEC_ID_bsr] = { F_ALL, 0 }, + [EXEC_ID_cmp] = { F_ALL, 0 }, + [EXEC_ID_dec] = { F_ALL & ~F_CF, 0 }, + [EXEC_ID_div] = { F_ALL, 0 }, + [EXEC_ID_idiv] = { F_ALL, 0 }, + [EXEC_ID_imul1] = { F_ALL, 0 }, + [EXEC_ID_imul2] = { F_ALL, 0 }, + [EXEC_ID_imul3] = { F_ALL, 0 }, + [EXEC_ID_inc] = { F_ALL & ~F_CF, 0 }, + [EXEC_ID_jcc] = { 0, F_ALL }, // update `use` at the end of `isa_fetch_decode()` + [EXEC_ID_mul] = { F_ALL, 0 }, + [EXEC_ID_neg] = { F_ALL, 0 }, + [EXEC_ID_or] = { F_ALL, 0 }, + [EXEC_ID_sar] = { F_ALL, 0 }, + [EXEC_ID_shl] = { F_ALL, 0 }, + [EXEC_ID_shr] = { F_ALL, 0 }, + [EXEC_ID_sbb] = { F_ALL, F_CF }, + [EXEC_ID_setcc] = { 0, F_ALL }, // update `use` at the end of `isa_fetch_decode()` + [EXEC_ID_sub] = { F_ALL, 0 }, + [EXEC_ID_test] = { F_ALL, 0 }, + [EXEC_ID_xor] = { F_ALL, 0 }, + [EXEC_ID_pushf] = { 0, F_ALL }, + [EXEC_ID_clc] = { F_CF, 0 }, + [EXEC_ID_stc] = { F_CF, 0 }, + [EXEC_ID_cmovcc] = { 0, F_ALL }, // update `use` at the end of `isa_fetch_decode()` + [EXEC_ID_xadd] = { F_ALL, 0 }, + [EXEC_ID_bt] = { F_ALL, 0 }, +}; + +typedef union { + struct { + uint8_t R_M :3; + uint8_t reg :3; + uint8_t mod :2; + }; + struct { + uint8_t dont_care :3; + uint8_t opcode :3; + }; + uint8_t val; +} ModR_M; + +typedef union { + struct { + uint8_t base :3; + uint8_t index :3; + uint8_t ss :2; + }; + uint8_t val; +} SIB; + +static inline void load_addr(Decode *s, ModR_M *m, Operand *rm) { + assert(m->mod != 3); + + sword_t disp = 0; + int disp_size = 4; + int base_reg = -1, index_reg = -1, scale = 0; + + if (m->R_M == R_ESP) { + SIB sib; + sib.val = instr_fetch(&s->snpc, 1); + base_reg = sib.base; + scale = sib.ss; + + if (sib.index != R_ESP) { index_reg = sib.index; } + } + else { + /* no SIB */ + base_reg = m->R_M; + } + + if (m->mod == 0) { + if (base_reg == R_EBP) { base_reg = -1; } + else { disp_size = 0; } + } + else if (m->mod == 1) { disp_size = 1; } + + if (disp_size != 0) { + /* has disp */ + disp = instr_fetch(&s->snpc, disp_size); + if (disp_size == 1) { disp = (int8_t)disp; } + } + + s->isa.mbase = (base_reg != -1 ? ®_l(base_reg) : rz); + s->isa.midx = (index_reg != -1 ? ®_l(index_reg) : rz); + s->isa.mscale = scale; + s->isa.moff = disp; + rm->preg = &rm->val; + rm->type = OP_TYPE_MEM; + +#ifdef CONFIG_DEBUG + char disp_buf[16]; + char base_buf[8]; + char index_buf[8]; + + if (disp_size != 0) { + /* has disp */ + sprintf(disp_buf, "%s%#x", (disp < 0 ? "-" : ""), (disp < 0 ? -disp : disp)); + } + else { disp_buf[0] = '\0'; } + + if (base_reg == -1) { base_buf[0] = '\0'; } + else { sprintf(base_buf, "%%%s", reg_name(base_reg, 4)); } + + if (index_reg == -1) { index_buf[0] = '\0'; } + else { sprintf(index_buf, ",%%%s,%d", reg_name(index_reg, 4), 1 << scale); } + + if (base_reg == -1 && index_reg == -1) { sprintf(rm->str, "%s", disp_buf); } + else { sprintf(rm->str, "%s(%s%s)", disp_buf, base_buf, index_buf); } +#endif +} + +static inline void operand_reg(Decode *s, Operand *op, int r, int width) { + op->reg = r; + if (width == 4) { op->preg = ®_l(r); } + else { + assert(width == 1 || width == 2); + op->preg = &op->val; + } + op->type = OP_TYPE_REG; + print_Dop(op->str, OP_STR_SIZE, "%%%s", reg_name(r, width)); +} + +static inline void operand_imm(Decode *s, Operand *op, word_t imm) { + op->preg = &op->val; + op->val = imm; + op->type = OP_TYPE_IMM; + print_Dop(op->str, OP_STR_SIZE, "$0x%x", imm); +} + +// decode operand helper +#define def_DopHelper(name) \ + static inline void concat(decode_op_, name) (Decode *s, Operand *op, int width) + +/* Refer to Appendix A in i386 manual for the explanations of these abbreviations */ + +/* Ib, Iv */ +def_DopHelper(I) { + /* pc here is pointing to the immediate */ + word_t imm = instr_fetch(&s->snpc, width); + operand_imm(s, op, imm); +} + +/* I386 manual does not contain this abbreviation, but it is different from + * the one above from the view of implementation. So we use another helper + * function to decode it. + */ +/* sign immediate */ +def_DopHelper(SI) { +#ifdef __ICS_EXPORT + /* TODO: Use x86_instr_fetch() to read `op->width' bytes of memory + * pointed by 's->seq_pc'. Interpret the result as a signed immediate, + * and call `operand_imm()` as following. + * + operand_imm(s, op, ???); + */ + TODO(); +#else + word_t imm = instr_fetch(&s->snpc, width); + if (width == 1) imm = (int8_t)imm; + else if (width == 2) imm = (int16_t)imm; + operand_imm(s, op, imm); +#endif +} + +/* I386 manual does not contain this abbreviation. + * It is convenient to merge them into a single helper function. + */ +/* AL/eAX */ +def_DopHelper(a) { + operand_reg(s, op, R_EAX, width); +} + +/* This helper function is use to decode register encoded in the opcode. */ +/* XX: AL, AH, BL, BH, CL, CH, DL, DH + * eXX: eAX, eCX, eDX, eBX, eSP, eBP, eSI, eDI + */ +def_DopHelper(r) { + int r = s->isa.opcode & 0x7; + operand_reg(s, op, r, width); +} + +/* I386 manual does not contain this abbreviation. + * We decode everything of modR/M byte in one time. + */ +/* Eb, Ew, Ev + * Gb, Gv + * Cd, + * M + * Rd + * Sw + */ +static inline void operand_rm(Decode *s, Operand *rm, Operand *reg, int width) { + ModR_M m; + m.val = x86_instr_fetch(s, 1); + if (reg != NULL) operand_reg(s, reg, m.reg, width); + if (m.mod == 3) operand_reg(s, rm, m.R_M, width); + else { load_addr(s, &m, rm); } + //s->isa.is_rm_memory = (m.mod != 3); +} + +/* Ob, Ov */ +def_DopHelper(O) { + s->isa.moff = instr_fetch(&s->snpc, 4); + s->isa.mbase = rz; + s->isa.midx = rz; + op->preg = &op->val; + op->type = OP_TYPE_MEM; + print_Dop(op->str, OP_STR_SIZE, "0x%x", s->isa.moff); +} + +/* Eb <- Gb + * Ev <- Gv + */ +static inline def_DHelper(G2E) { + operand_rm(s, id_dest, id_src1, width); +} + +#if 0 +// for bts and btr +static inline def_DHelper(bit_G2E) { + operand_rm(s, id_dest, false, id_src1, true); + if (s->isa.mbase) { + rtl_shri(s, s0, dsrc1, 5); + rtl_shli(s, s0, s0, 2); + rtl_add(s, &s->isa.mbr, s->isa.mbase, s0); + s->isa.mbase = &s->isa.mbr; + if (s->opcode != 0x1a3) { // bt + IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 1)); + } + rtl_lm(s, &id_dest->val, s->isa.mbase, s->isa.moff, id_dest->width); + } + rtl_andi(s, &id_src1->val, dsrc1, 0x1f); + id_src1->preg = &id_src1->val; +} +#endif + +/* Gb <- Eb + * Gv <- Ev + */ +static inline def_DHelper(E2G) { + operand_rm(s, id_src1, id_dest, width); +} + +static inline def_DHelper(Eb2G) { + operand_rm(s, id_src1, id_dest, 1); + // overwrite the wrong decode result by `operand_rm()` with the correct width + operand_reg(s, id_dest, id_dest->reg, width); +} + +static inline def_DHelper(Ew2G) { + operand_rm(s, id_src1, id_dest, 2); + // overwrite the wrong decode result by `operand_rm()` with the correct width + operand_reg(s, id_dest, id_dest->reg, width); +} + +/* AL <- Ib + * eAX <- Iv + */ +static inline def_DHelper(I2a) { + decode_op_a(s, id_dest, width); + decode_op_I(s, id_src1, width); +} + +/* Gv <- EvIb + * Gv <- EvIv + * use for imul */ +static inline def_DHelper(I_E2G) { + operand_rm(s, id_src1, id_dest, width); + decode_op_SI(s, id_src2, width); // imul takes the imm as signed +} + +/* Eb <- Ib + * Ev <- Iv + */ + +static inline def_DHelper(I2E) { + IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 1)); + operand_rm(s, id_dest, NULL, width); + decode_op_I(s, id_src1, width); +} + +/* XX <- Ib + * eXX <- Iv + */ +static inline def_DHelper(I2r) { + decode_op_r(s, id_dest, width); + decode_op_I(s, id_src1, width); +} + +/* used by unary operations */ +static inline def_DHelper(I) { + decode_op_I(s, id_dest, width); +} + +static inline def_DHelper(SI) { + decode_op_SI(s, id_dest, width); +} + +static inline def_DHelper(r) { + decode_op_r(s, id_dest, width); +} + +static inline def_DHelper(E) { + operand_rm(s, id_dest, NULL, width); +} + +#if 0 +static inline def_DHelper(gp6_E) { + operand_rm(s, id_dest, true, NULL, false); +} +#endif + +/* used by test in group3 */ +static inline def_DHelper(test_I) { + decode_op_I(s, id_src1, width); +} + +static inline def_DHelper(SI2E) { + assert(width == 2 || width == 4); + operand_rm(s, id_dest, NULL, width); + decode_op_SI(s, id_src1, 1); + if (width == 2) { *dsrc1 &= 0xffff; } +} + +static inline def_DHelper(SI_E2G) { + assert(width == 2 || width == 4); + operand_rm(s, id_src1, id_dest, width); + decode_op_SI(s, id_src2, 1); +} + +static inline def_DHelper(1_E) { // use by gp2 + operand_rm(s, id_dest, NULL, width); + operand_imm(s, id_src1, 1); +} + +static inline def_DHelper(cl2E) { // use by gp2 + //IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 1)); + operand_rm(s, id_dest, NULL, width); + // shift instructions will eventually use the lower + // 5 bits of %cl, therefore it is OK to load %ecx + operand_reg(s, id_src1, R_ECX, 4); +} + +static inline def_DHelper(Ib2E) { // use by gp2 + //IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 1)); + operand_rm(s, id_dest, NULL, width); + decode_op_I(s, id_src1, 1); +} + +/* Ev <- GvIb + * use for shld/shrd */ +static inline def_DHelper(Ib_G2E) { + //IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 1)); + operand_rm(s, id_dest, id_src1, width); + decode_op_I(s, id_src2, 1); +} + +/* Ev <- GvCL + * use for shld/shrd */ +static inline def_DHelper(cl_G2E) { + //IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 1)); + operand_rm(s, id_dest, id_src1, width); + // shift instructions will eventually use the lower + // 5 bits of %cl, therefore it is OK to load %ecx + operand_reg(s, id_src2, R_ECX, 4); +} + +#if 0 +// for cmpxchg +static inline def_DHelper(a_G2E) { + IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 1)); + operand_rm(s, id_dest, true, id_src2, true); + operand_reg(s, id_src1, true, R_EAX, 4); +} +#endif + +static inline def_DHelper(O2a) { + decode_op_O(s, id_src1, 0); + decode_op_a(s, id_dest, width); +} + +static inline def_DHelper(a2O) { + decode_op_a(s, id_src1, width); + decode_op_O(s, id_dest, 0); +} + +#if 0 +// for scas and stos +static inline def_DHelper(aSrc) { + decode_op_a(s, id_src1, true); +} + +// for lods +static inline def_DHelper(aDest) { + decode_op_a(s, id_dest, false); +} +#endif + +// for xchg +static inline def_DHelper(a2r) { + decode_op_a(s, id_src1, width); + decode_op_r(s, id_dest, width); +} + +static inline def_DHelper(J) { + // the target address can be computed in the decode stage + decode_op_SI(s, id_dest, width); + id_dest->imm = id_dest->val + s->snpc; + operand_imm(s, id_src1, s->snpc); // for call +} +#if 0 +#ifndef __ICS_EXPORT + +// for long jump +static inline def_DHelper(LJ) { + decode_op_I(s, id_dest, false); // offset + id_src1->width = 2; + decode_op_I(s, id_src1, false); // CS + // the target address can be computed in the decode stage + s->jmp_pc = id_dest->imm; +} +#endif + +static inline def_DHelper(in_I2a) { + id_src1->width = 1; + decode_op_I(s, id_src1, true); + decode_op_a(s, id_dest, false); +} +#endif + +static inline def_DHelper(dx2a) { + operand_reg(s, id_src1, R_DX, 2); + decode_op_a(s, id_dest, width); +} + +#if 0 +static inline def_DHelper(out_a2I) { + decode_op_a(s, id_src1, true); + id_dest->width = 1; + decode_op_I(s, id_dest, true); +} +#endif + +static inline def_DHelper(a2dx) { + decode_op_a(s, id_src1, width); + operand_reg(s, id_dest, R_DX, 2); +} + +#if 0 +#ifndef __ICS_EXPORT +static inline def_DHelper(Ib2xmm) { + operand_rm(s, id_dest, false, NULL, false); + id_src1->width = 1; + decode_op_I(s, id_src1, true); +} +#endif +#endif + + +static inline int SSEprefix(Decode *s) { + assert(!(s->isa.rep_flags != 0 && s->isa.is_operand_size_16)); + if (s->isa.is_operand_size_16) return 1; + else if (s->isa.rep_flags == PREFIX_REP) return 2; + else if (s->isa.rep_flags == PREFIX_REPNZ) return 3; + else return 0; +} + +def_THelper(sse_0x6f) { + int pfx = SSEprefix(s); + switch (pfx) { + case 1: decode_E2G(s, s->isa.width); return table_movdqa_E2xmm(s); + } + return EXEC_ID_inv; +} + +def_THelper(sse_0x73) { + int pfx = SSEprefix(s); + assert(pfx == 1); + def_INSTR_TABW("?? 010 ???", psrlq, -1); + return EXEC_ID_inv; +} + +def_THelper(sse_0x7e) { + int pfx = SSEprefix(s); + switch (pfx) { + case 1: s->isa.width = 4; decode_G2E(s, s->isa.width); return table_movd_xmm2E(s); + case 2: decode_E2G(s, s->isa.width); return table_movq_E2xmm(s); + } + return EXEC_ID_inv; +} + +def_THelper(sse_0xd6) { + int pfx = SSEprefix(s); + switch (pfx) { + case 1: decode_G2E(s, s->isa.width); return table_movq_xmm2E(s); + } + return EXEC_ID_inv; +} + +def_THelper(sse_0xef) { + int pfx = SSEprefix(s); + switch (pfx) { + case 1: decode_E2G(s, s->isa.width); return table_pxor(s); + } + return EXEC_ID_inv; +} + +def_THelper(main); + +def_THelper(operand_size) { + s->isa.is_operand_size_16 = true; + return table_main(s); +} + +def_THelper(rep) { +#ifndef CONFIG_ENGINE_INTERPRETER + panic("not support REP in engines other than interpreter"); +#endif + s->isa.rep_flags = PREFIX_REP; + return table_main(s); +} + +def_THelper(lock) { + return table_main(s); +} + +def_THelper(gs) { + s->isa.sreg_base = &cpu.sreg[CSR_GS].base; + return table_main(s); +} + +#undef def_INSTR_IDTABW +#define def_INSTR_IDTABW(pattern, id, tab, w) \ + def_INSTR_raw(pattern, { \ + if (w != -1) s->isa.width = (w == 0 ? (s->isa.is_operand_size_16 ? 2 : 4) : w); \ + concat(decode_, id)(s, s->isa.width); \ + return concat(table_, tab)(s); \ + }) + +def_THelper(gp1) { + def_INSTR_TABW("?? 000 ???", add, -1); + def_INSTR_TABW("?? 001 ???", or , -1); + def_INSTR_TABW("?? 010 ???", adc, -1); + def_INSTR_TABW("?? 011 ???", sbb, -1); + def_INSTR_TABW("?? 100 ???", and, -1); + def_INSTR_TABW("?? 101 ???", sub, -1); + def_INSTR_TABW("?? 110 ???", xor, -1); + def_INSTR_TABW("?? 111 ???", cmp, -1); + return EXEC_ID_inv; +} + +def_THelper(gp2) { + def_INSTR_TABW("?? 000 ???", rol, -1); + def_INSTR_TABW("?? 001 ???", ror, -1); + def_INSTR_TABW("?? 100 ???", shl, -1); + def_INSTR_TABW("?? 101 ???", shr, -1); + def_INSTR_TABW("?? 111 ???", sar, -1); + return EXEC_ID_inv; +} + +def_THelper(gp3) { + def_INSTR_IDTABW("?? 000 ???", test_I, test, s->isa.width); + def_INSTR_TABW ("?? 010 ???", not, -1); + def_INSTR_TABW ("?? 011 ???", neg, -1); + def_INSTR_TABW ("?? 100 ???", mul, -1); + def_INSTR_TABW ("?? 101 ???", imul1, -1); + def_INSTR_TABW ("?? 110 ???", div, -1); + def_INSTR_TABW ("?? 111 ???", idiv, -1); + return EXEC_ID_inv; +} + +def_THelper(gp4) { + def_INSTR_TABW("?? 000 ???", inc, -1); + def_INSTR_TABW("?? 001 ???", dec, -1); + return EXEC_ID_inv; +} + +def_THelper(gp5) { + def_INSTR_TABW("?? 000 ???", inc, -1); + def_INSTR_TABW("?? 001 ???", dec, -1); + def_INSTR_TABW("?? 010 ???", call_E, -1); + def_INSTR_TABW("?? 100 ???", jmp_E, -1); + def_INSTR_TABW("?? 110 ???", push, -1); + return EXEC_ID_inv; +} + +def_THelper(gp6) { + def_INSTR_TABW("?? 011 ???", ltr, -1); + return EXEC_ID_inv; +} + +def_THelper(gp7) { + def_INSTR_TABW("?? 010 ???", lgdt, -1); + def_INSTR_TABW("?? 011 ???", lidt, -1); + return EXEC_ID_inv; +} + +def_THelper(_2byte_esc) { + x86_instr_fetch(s, 1); + s->isa.opcode = get_instr(s) | 0x100; + + def_INSTR_IDTABW("0000 0000", E, gp6, 2); + def_INSTR_IDTABW("0000 0001", E, gp7, 4); + def_INSTR_IDTABW("0010 0000", G2E, mov_cr2r, 4); + def_INSTR_IDTABW("0010 0010", E2G, mov_r2cr, 4); + def_INSTR_TAB ("0011 0001", rdtsc); + def_INSTR_IDTAB ("0100 ????", E2G, cmovcc); + def_INSTR_TAB ("0110 1111", sse_0x6f); + def_INSTR_IDTAB ("0111 0011", Ib2E, sse_0x73); + def_INSTR_TAB ("0111 1110", sse_0x7e); + def_INSTR_IDTABW("1000 ????", J, jcc, 4); + def_INSTR_IDTABW("1001 ????", E, setcc, 1); + def_INSTR_TAB ("1010 0010", cpuid); + def_INSTR_IDTAB ("1010 0011", G2E, bt); + def_INSTR_IDTAB ("1010 0100",Ib_G2E,shld); + def_INSTR_IDTAB ("1010 0101",cl_G2E,shld); + def_INSTR_IDTAB ("1010 1100",Ib_G2E,shrd); + def_INSTR_IDTAB ("1010 1111", E2G, imul2); + def_INSTR_IDTAB ("1011 0001", G2E, cmpxchg); + def_INSTR_IDTAB ("1011 0110", Eb2G, movzb); + def_INSTR_IDTABW("1011 0111", Ew2G, movzw, 4); + def_INSTR_IDTAB ("1011 1101", E2G, bsr); + def_INSTR_IDTAB ("1011 1110", Eb2G, movsb); + def_INSTR_IDTABW("1011 1111", Ew2G, movsw, 4); + def_INSTR_IDTAB ("1100 0001", G2E, xadd); + def_INSTR_TAB ("1101 0110", sse_0xd6); + def_INSTR_TAB ("1110 1111", sse_0xef); + return EXEC_ID_inv; +} + +def_THelper(main) { + x86_instr_fetch(s, 1); + s->isa.opcode = get_instr(s); + + def_INSTR_IDTABW("0000 0000", G2E, add, 1); + def_INSTR_IDTAB ("0000 0001", G2E, add); + def_INSTR_IDTABW("0000 0010", E2G, add, 1); + def_INSTR_IDTAB ("0000 0011", E2G, add); + def_INSTR_IDTAB ("0000 0101", I2a, add); + def_INSTR_IDTABW("0000 1000", G2E, or, 1); + def_INSTR_IDTAB ("0000 1001", G2E, or); + def_INSTR_IDTAB ("0000 1011", E2G, or); + def_INSTR_IDTABW("0000 1100", I2a, or, 1); + def_INSTR_IDTAB ("0000 1101", I2a, or); + def_INSTR_IDTABW("0000 1010", E2G, or, 1); + def_INSTR_TAB ("0000 1111", _2byte_esc); + def_INSTR_IDTABW("0001 0000", G2E, adc, 1); + def_INSTR_IDTAB ("0001 0001", G2E, adc); + def_INSTR_IDTAB ("0001 0011", E2G, adc); + def_INSTR_IDTABW("0001 1000", G2E, sbb, 1); + def_INSTR_IDTAB ("0001 1001", G2E, sbb); + def_INSTR_IDTAB ("0001 1011", E2G, sbb); + def_INSTR_IDTABW("0010 0000", G2E, and, 1); + def_INSTR_IDTAB ("0010 0001", G2E, and); + def_INSTR_IDTABW("0010 0010", E2G, and, 1); + def_INSTR_IDTAB ("0010 0011", E2G, and); + def_INSTR_IDTABW("0010 0100", I2a, and, 1); + def_INSTR_IDTAB ("0010 0101", I2a, and); + def_INSTR_IDTABW("0010 1000", G2E, sub, 1); + def_INSTR_IDTAB ("0010 1001", G2E, sub); + def_INSTR_IDTABW("0010 1010", E2G, sub, 1); + def_INSTR_IDTAB ("0010 1011", E2G, sub); + def_INSTR_IDTAB ("0010 1101", I2a, sub); + def_INSTR_IDTABW("0011 0000", G2E, xor, 1); + def_INSTR_IDTAB ("0011 0001", G2E, xor); + def_INSTR_IDTABW("0011 0010", E2G, xor, 1); + def_INSTR_IDTAB ("0011 0011", E2G, xor); + def_INSTR_IDTAB ("0011 0101", I2a, xor); + def_INSTR_IDTABW("0011 1000", G2E, cmp, 1); + def_INSTR_IDTAB ("0011 1001", G2E, cmp); + def_INSTR_IDTABW("0011 1010", E2G, cmp, 1); + def_INSTR_IDTAB ("0011 1011", E2G, cmp); + def_INSTR_IDTABW("0011 1100", I2a, cmp, 1); + def_INSTR_IDTAB ("0011 1101", I2a, cmp); + def_INSTR_IDTAB ("0100 0???", r, inc); + def_INSTR_IDTAB ("0100 1???", r, dec); + def_INSTR_IDTAB ("0101 0???", r, push); + def_INSTR_IDTAB ("0101 1???", r, pop); + def_INSTR_TAB ("0110 0000", pusha); + def_INSTR_TAB ("0110 0001", popa); + def_INSTR_TAB ("0110 0101", gs); + def_INSTR_TAB ("0110 0110", operand_size); + def_INSTR_IDTAB ("0110 1000", I, push); + def_INSTR_IDTAB ("0110 1001",I_E2G, imul3); + def_INSTR_IDTABW("0110 1010", SI, push, 1); + def_INSTR_IDTAB ("0110 1011",SI_E2G,imul3); + def_INSTR_IDTABW("0111 ????", J, jcc, 1); + def_INSTR_IDTABW("1000 0000", I2E, gp1, 1); + def_INSTR_IDTAB ("1000 0001", I2E, gp1); + def_INSTR_IDTAB ("1000 0011", SI2E, gp1); + def_INSTR_IDTABW("1000 0100", G2E, test, 1); + def_INSTR_IDTAB ("1000 0101", G2E, test); + def_INSTR_IDTABW("1000 0110", G2E, xchg, 1); + def_INSTR_IDTABW("1000 1000", G2E, mov, 1); + def_INSTR_IDTAB ("1000 1001", G2E, mov); + def_INSTR_IDTABW("1000 1010", E2G, mov, 1); + def_INSTR_IDTAB ("1000 1011", E2G, mov); + def_INSTR_IDTABW("1000 1101", E2G, lea, 4); + def_INSTR_IDTABW("1000 1110", E2G, mov_rm2sreg, 2); + def_INSTR_TAB ("1001 0000", nop); + def_INSTR_IDTAB ("1001 0???", a2r, xchg); + def_INSTR_TAB ("1001 1000", cwtl); + def_INSTR_TAB ("1001 1001", cltd); + def_INSTR_TAB ("1001 1100", pushf); + def_INSTR_IDTABW("1010 0000", O2a, mov, 1); + def_INSTR_IDTAB ("1010 0001", O2a, mov); + def_INSTR_IDTABW("1010 0010", a2O, mov, 1); + def_INSTR_IDTAB ("1010 0011", a2O, mov); + + if (s->isa.rep_flags == PREFIX_REP) { + def_INSTR_TABW ("1010 0100", rep_movs, 1); + def_INSTR_TAB ("1010 0101", rep_movs); + def_INSTR_TABW ("1010 1010", rep_stos, 1); + def_INSTR_TAB ("1010 1011", rep_stos); + } + + def_INSTR_TABW ("1010 0100", movs, 1); + def_INSTR_TAB ("1010 0101", movs); + def_INSTR_IDTABW("1010 1000", I2a, test, 1); + def_INSTR_IDTAB ("1010 1001", I2a, test); + def_INSTR_IDTABW("1011 0???", I2r, mov, 1); + def_INSTR_IDTAB ("1011 1???", I2r, mov); + def_INSTR_IDTABW("1100 0000", Ib2E, gp2, 1); + def_INSTR_IDTAB ("1100 0001", Ib2E, gp2); + def_INSTR_IDTABW("1100 0010", I, ret_imm, 2); + def_INSTR_TAB ("1100 0011", ret); + def_INSTR_IDTABW("1100 0110", I2E, mov, 1); + def_INSTR_IDTAB ("1100 0111", I2E, mov); + def_INSTR_TAB ("1100 1001", leave); + def_INSTR_IDTABW("1100 1101", I, _int, 1); + def_INSTR_TAB ("1100 1111", iret); + def_INSTR_IDTABW("1101 0000", 1_E, gp2, 1); + def_INSTR_IDTAB ("1101 0001", 1_E, gp2); + def_INSTR_IDTABW("1101 0010", cl2E, gp2, 1); + def_INSTR_IDTAB ("1101 0011", cl2E, gp2); + def_INSTR_TAB ("1101 0110", nemu_trap); + def_INSTR_IDTABW("1110 0011", J, jecxz, 1); + def_INSTR_IDTABW("1110 1000", J, call, 4); + def_INSTR_IDTABW("1110 1001", J, jmp, 4); + def_INSTR_IDTABW("1110 1011", J, jmp, 1); + def_INSTR_IDTAB ("1110 1101", dx2a, in); + def_INSTR_IDTABW("1110 1110", a2dx, out, 1); + def_INSTR_IDTAB ("1110 1111", a2dx, out); + def_INSTR_TAB ("1111 0000", lock); + def_INSTR_IDTABW("1111 0110", E, gp3, 1); + def_INSTR_IDTAB ("1111 0111", E, gp3); + //def_INSTR_TAB ("1111 0010", repnz); + def_INSTR_TAB ("1111 0011", rep); + def_INSTR_TAB ("1111 1000", clc); + def_INSTR_TAB ("1111 1001", stc); + def_INSTR_TAB ("1111 1100", cld); + def_INSTR_IDTABW("1111 1110", E, gp4, 1); + def_INSTR_IDTAB ("1111 1111", E, gp5); + return table_inv(s); +} + +int isa_fetch_decode(Decode *s) { + int idx = EXEC_ID_inv; + s->isa.p_instr = s->isa.instr; + s->isa.is_operand_size_16 = 0; + s->isa.rep_flags = 0; + s->isa.sreg_base = NULL; + + idx = table_main(s); + + s->type = INSTR_TYPE_N; + switch (idx) { + case EXEC_ID_call: case EXEC_ID_jmp: + s->jnpc = id_dest->imm; s->type = INSTR_TYPE_J; break; + + case EXEC_ID_jcc: case EXEC_ID_jecxz: + s->jnpc = id_dest->imm; s->type = INSTR_TYPE_B; break; + case EXEC_ID_rep_movs: + case EXEC_ID_rep_stos: + s->jnpc = s->pc; s->type = INSTR_TYPE_B; break; + + case EXEC_ID_ret: case EXEC_ID_call_E: case EXEC_ID_jmp_E: case EXEC_ID_ret_imm: + case EXEC_ID__int: case EXEC_ID_iret: + s->type = INSTR_TYPE_I; break; + } + +#ifdef CONFIG_PERF_OPT + s->isa.flag_def = flag_table[idx].def; + s->isa.flag_use = flag_table[idx].use; + if (idx == EXEC_ID_jcc || idx == EXEC_ID_setcc || idx == EXEC_ID_cmovcc) { + s->isa.flag_use = cc2flag[s->isa.opcode & 0xf]; + } + + static Decode *bb_start = NULL; + static int bb_idx = 0; + + if (bb_idx == 0) bb_start = s; + + if (s->type != INSTR_TYPE_N) { // the end of a basic block + if (s - bb_start == bb_idx) { + // now scan and update `flag_def` + Decode *p; + //uint32_t use = s->isa.flag_use; + uint32_t use = F_ALL; //s->isa.flag_use; + for (p = s - 1; p >= bb_start; p --) { + uint32_t real_def = p->isa.flag_def & use; + use &= ~p->isa.flag_def; + use |= p->isa.flag_use; + p->isa.flag_def = real_def; + } + } + bb_idx = 0; + } else { + bb_idx ++; + } +#endif + + return idx; +} diff --git a/libraries/NEMU/src/isa/x86/instr/eflags.c b/libraries/NEMU/src/isa/x86/instr/eflags.c new file mode 100644 index 0000000..1774d29 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/eflags.c @@ -0,0 +1,69 @@ +#include "../local-include/rtl.h" +#include "../local-include/reg.h" +#include + +#define EFLAGS_BIT_CF 0 +#define EFLAGS_BIT_PF 2 +#define EFLAGS_BIT_ZF 6 +#define EFLAGS_BIT_SF 7 +#define EFLAGS_BIT_IF 9 +#define EFLAGS_BIT_DF 10 +#define EFLAGS_BIT_OF 11 + +#define _EFLAGS(f) f(OF) f(IF) f(SF) f(ZF) f(CF) f(DF) f(PF) +#define __f(flag) concat(EFLAGS_MASK_, flag) = 1 << concat(EFLAGS_BIT_, flag), +enum { + MAP(_EFLAGS, __f) +#undef __f +#define __f(flag) | concat(EFLAGS_MASK_, flag) + EFLAGS_MASK_ALL = 0 MAP(_EFLAGS, __f) +#undef __f +}; + +#define RTL_ENCODE(flag) \ + rtl_shli(s, t0, &cpu.flag, concat(EFLAGS_BIT_, flag)); \ + rtl_or(s, dest, dest, t0); + +#define RTL_DECODE(flag) \ + rtl_shri(s, &cpu.flag, src, concat(EFLAGS_BIT_, flag)); \ + rtl_andi(s, &cpu.flag, &cpu.flag, 0x1); + +#define ENCODE(flag) | (cpu.flag << (concat(EFLAGS_BIT_, flag))) +#define DECODE(flag) cpu.flag = (val >> (concat(EFLAGS_BIT_, flag))) & 1; + +void rtl_compute_eflags(Decode *s, rtlreg_t *dest) { + rtl_mv(s, dest, rz); + MAP(_EFLAGS, RTL_ENCODE) + rtl_ori(s, dest, dest, 0x2); +} + +void rtl_set_eflags(Decode *s, const rtlreg_t *src) { + MAP(_EFLAGS, RTL_DECODE) +} + +uint32_t compute_eflags() { + return 0x2 MAP(_EFLAGS, ENCODE); +} + +void set_eflags(uint32_t val) { + MAP(_EFLAGS, DECODE); +} + +void difftest_fix_eflags(void *arg) { +#if defined(CONFIG_ENGINE_INTERPRETER) && !defined(CONFIG_DIFFTEST_REF_KVM) +#define EFLAGS_MASK_ID (1 << 21) +#define EFLAGS_MASK_AC (1 << 18) +#define EFLAGS_MASK_AF (1 << 4) +#define EFLAGS_FIX_MASK (EFLAGS_MASK_ID | EFLAGS_MASK_AC | EFLAGS_MASK_AF) + uint32_t esp = (uintptr_t)arg; + if (cpu.cr0.paging) { + paddr_t pg_base = isa_mmu_translate(esp, 4, MEM_TYPE_WRITE); + assert((pg_base & PAGE_MASK) == MEM_RET_OK); + esp = pg_base | (esp & PAGE_MASK); + } + uint32_t flags; + ref_difftest_memcpy(esp, &flags, 4, DIFFTEST_TO_DUT); + flags &= ~EFLAGS_FIX_MASK; + ref_difftest_memcpy(esp, &flags, 4, DIFFTEST_TO_REF); +#endif +} diff --git a/libraries/NEMU/src/isa/x86/instr/eflags.h b/libraries/NEMU/src/isa/x86/instr/eflags.h new file mode 100644 index 0000000..ba8476b --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/eflags.h @@ -0,0 +1,60 @@ +def_EHelper(pushf) { + void rtl_compute_eflags(Decode *s, rtlreg_t *dest); + rtl_compute_eflags(s, s0); + rtl_push(s, s0); + + extern void difftest_fix_eflags(void *arg); + difftest_set_patch(difftest_fix_eflags, (void *)(uintptr_t)cpu.esp); +} + +def_EHelper(clc) { + rtl_set_CF(s, rz); +} + +def_EHelper(stc) { + rtl_li(s, s0, 1); + rtl_set_CF(s, s0); +} + +def_EHelper(cld) { + rtl_set_DF(s, rz); +} + +#if 0 +static inline def_EHelper(std) { + rtl_li(s, s0, 1); + rtl_set_DF(s, s0); + print_asm("std"); +} + +static inline def_EHelper(cli) { + rtl_set_IF(s, rz); + print_asm("cli"); +} + +static inline def_EHelper(sti) { + rtl_li(s, s0, 1); + rtl_set_IF(s, s0); + print_asm("sti"); +} + +static inline def_EHelper(popf) { + void rtl_set_eflags(Decode *s, const rtlreg_t *src); + rtl_pop(s, s0); + rtl_set_eflags(s, s0); + print_asm("popf"); +} + +static inline def_EHelper(sahf) { + void rtl_set_eflags(Decode *s, const rtlreg_t *src); + void rtl_compute_eflags(Decode *s, rtlreg_t *dest); + + rtl_compute_eflags(s, s0); + rtl_andi(s, s0, s0, ~0xff); + rtl_lr(s, s1, R_AH, 1); + rtl_or(s, s0, s0, s1); + rtl_set_eflags(s, s0); + + print_asm("sahf"); +} +#endif diff --git a/libraries/NEMU/src/isa/x86/instr/fp.c b/libraries/NEMU/src/isa/x86/instr/fp.c new file mode 100644 index 0000000..8b80888 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/fp.c @@ -0,0 +1,12 @@ +#include "../local-include/intr.h" +#include +#include +#include + +uint32_t isa_fp_get_rm(Decode *s) { + assert(0); +} + +void isa_fp_set_ex(uint32_t ex) { + assert(0); +} diff --git a/libraries/NEMU/src/isa/x86/instr/lazycc.h b/libraries/NEMU/src/isa/x86/instr/lazycc.h new file mode 100644 index 0000000..77ef4b2 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/lazycc.h @@ -0,0 +1,312 @@ +#include +#include "cc.h" + +#ifdef CONFIG_x86_CC_LAZY +static inline def_rtl(set_lazycc_dest, const rtlreg_t *dest) { + rtl_mv(s, &cpu.cc_dest, dest); +} + +static inline def_rtl(set_lazycc_src1, const rtlreg_t *src1) { + rtl_mv(s, &cpu.cc_src1, src1); +} + +static inline def_rtl(set_lazycc_src2, const rtlreg_t *src2) { + rtl_mv(s, &cpu.cc_src2, src2); +} + +static inline def_rtl(set_lazycc, const rtlreg_t *dest, const rtlreg_t *src1, const rtlreg_t *src2, + uint32_t cc_op, uint32_t width) { + rtl_set_lazycc_dest(s, dest); + if (src1 != NULL) rtl_set_lazycc_src1(s, src1); + if (src2 != NULL) rtl_set_lazycc_src2(s, src2); + cpu.cc_op = cc_op; + cpu.cc_width = width; + cpu.cc_dirty = true; +} + +static inline void clean_lazycc() { + cpu.cc_dirty = false; +} + +#define NEGCC(cc) ((cc)%2 == 1) +#define NEGCCRELOP(cc) (NEGCC(cc) ? RELOP_NE : RELOP_EQ) +#define MASKDEST(reg) \ + p = &cpu.cc_dest; \ + if (cpu.cc_width != 4) { rtl_andi(s, reg, &cpu.cc_dest, 0xffffffffu >> ((4 - cpu.cc_width) * 8)); p = reg;} + +#define UNARY 0x100 // compare with cpu.cc_dest and rz +static const int cc2relop [] = { + [CC_O] = 0, [CC_NO] = 0, + [CC_B] = RELOP_LTU, [CC_NB] = RELOP_GEU, + [CC_E] = UNARY | RELOP_EQ, [CC_NE] = UNARY | RELOP_NE, + [CC_BE] = RELOP_LEU, [CC_NBE] = RELOP_GTU, + [CC_S] = UNARY | RELOP_LT, [CC_NS] = UNARY | RELOP_GE, + [CC_P] = 0, [CC_NP] = 0, + [CC_L] = RELOP_LT, [CC_NL] = RELOP_GE, + [CC_LE] = RELOP_LE, [CC_NLE] = RELOP_GT, +}; + +static const int cc2relop_logic [] = { + [CC_O] = RELOP_FALSE, [CC_NO] = RELOP_TRUE, + [CC_B] = RELOP_LTU, [CC_NB] = RELOP_GEU, + [CC_E] = RELOP_EQ, [CC_NE] = RELOP_NE, + [CC_BE] = RELOP_LEU, [CC_NBE] = RELOP_GTU, + [CC_S] = RELOP_LT, [CC_NS] = RELOP_GE, + [CC_P] = 0, [CC_NP] = 0, + [CC_L] = RELOP_LT, [CC_NL] = RELOP_GE, + [CC_LE] = RELOP_LE, [CC_NLE] = RELOP_GT, +}; + + +static inline def_rtl(lazy_setcc_internal, rtlreg_t *dest, uint32_t cc) { + rtlreg_t *p = NULL; + int exception = (cpu.cc_op == LAZYCC_SUB) && (cc == CC_E || cc == CC_NE); + if ((cc2relop[cc] & UNARY) && !exception) { + uint32_t relop = cc2relop[cc] ^ UNARY; + p = &cpu.cc_dest; + if (cpu.cc_op == LAZYCC_SUB) { + // sub && (CC_S || CC_NS) + rtl_sub(s, dest, &cpu.cc_dest, &cpu.cc_src1); + p = dest; + } + int exception = (cpu.cc_op == LAZYCC_LOGIC) && (cc == CC_E || cc == CC_NE); + if (cpu.cc_width != 4 && !exception) { + rtl_shli(s, dest, p, 32 - cpu.cc_width * 8); + p = dest; + } + rtl_setrelop(s, relop, dest, p, rz); + return; + } + + switch (cpu.cc_op) { + case LAZYCC_ADD: + switch (cc) { + case CC_O: case CC_NO: + rtl_sub(s, dest, &cpu.cc_dest, &cpu.cc_src1); + rtl_is_add_overflow(s, dest, &cpu.cc_dest, &cpu.cc_src1, dest, cpu.cc_width); + goto negcc_reverse; + return; + case CC_LE: case CC_NLE: + rtl_sub(s, dest, &cpu.cc_dest, &cpu.cc_src1); + rtl_is_add_overflow(s, s0, &cpu.cc_dest, &cpu.cc_src1, dest, cpu.cc_width); + rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); + rtl_xor(s, dest, s0, s1); + MASKDEST(s0); + rtl_setrelopi(s, RELOP_EQ, s0, p, 0); + rtl_or(s, dest, dest, s0); + goto negcc_reverse; + return; + case CC_BE: case CC_NBE: + MASKDEST(s0); + rtl_is_add_carry(s, s1, p, &cpu.cc_src1); + rtl_setrelopi(s, RELOP_EQ, s0, p, 0); + rtl_or(s, dest, s0, s1); + goto negcc_reverse; + return; + default: + if (cc2relop[cc] != 0) { + MASKDEST(s0); + rtl_setrelop(s, cc2relop[cc], dest, p, &cpu.cc_src1); + return; + } + } + break; + case LAZYCC_SUB: + switch (cc) { + case CC_O: case CC_NO: + rtl_sub(s, dest, &cpu.cc_dest, &cpu.cc_src1); + rtl_is_sub_overflow(s, dest, dest, &cpu.cc_dest, &cpu.cc_src1, cpu.cc_width); + goto negcc_reverse; + return; + default: + if (cc2relop[cc] != 0) { + rtl_setrelop(s, cc2relop[cc] & 0xf, dest, &cpu.cc_dest, &cpu.cc_src1); + return; + } + } + break; + case LAZYCC_NEG: + switch (cc) { + case CC_B: case CC_NB: + rtl_setrelopi(s, RELOP_NE, dest, &cpu.cc_dest, 0); + goto negcc_reverse; + return; + case CC_O: case CC_NO: + rtl_setrelopi(s, NEGCCRELOP(cc), dest, &cpu.cc_dest, -(0x1u << (cpu.cc_width * 8 - 1))); + return; + case CC_L: case CC_NL: + rtl_setrelopi(s, NEGCCRELOP(cc), s0, &cpu.cc_dest, -(0x1u << (cpu.cc_width * 8 - 1))); + rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); + rtl_xor(s, dest, s0, s1); + return; + case CC_LE: case CC_NLE: + rtl_setrelopi(s, RELOP_EQ, s0, &cpu.cc_dest, -(0x1u << (cpu.cc_width * 8 - 1))); + rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); + rtl_xor(s, dest, s0, s1); + rtl_setrelopi(s, RELOP_EQ, s0, &cpu.cc_dest, 0); + rtl_or(s, dest, dest, s0); + goto negcc_reverse; + return; + case CC_BE: + rtl_li(s, dest, 1); + return; + case CC_NBE: + rtl_li(s, dest, 0); + return; + } + break; + case LAZYCC_INC: + switch (cc) { + case CC_O: case CC_NO: + rtl_setrelopi(s, NEGCCRELOP(cc), dest, &cpu.cc_dest, 0x1u << (cpu.cc_width * 8 - 1)); + return; + case CC_L: case CC_NL: + rtl_setrelopi(s, NEGCCRELOP(cc), s0, &cpu.cc_dest, 0x1u << (cpu.cc_width * 8 - 1)); + rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); + rtl_xor(s, dest, s0, s1); + return; + case CC_LE: case CC_NLE: + rtl_setrelopi(s, RELOP_EQ, s0, &cpu.cc_dest, 0x1u << (cpu.cc_width * 8 - 1)); + rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); + rtl_xor(s, dest, s0, s1); + MASKDEST(s0); + rtl_setrelopi(s, RELOP_EQ, s0, p, 0); + rtl_or(s, dest, dest, s0); + goto negcc_reverse; + return; + } + break; + case LAZYCC_DEC: + switch (cc) { + case CC_O: case CC_NO: + rtl_addi(s, dest, &cpu.cc_dest, 1); + rtl_setrelopi(s, NEGCCRELOP(cc), dest, dest, 0x1u << (cpu.cc_width * 8 - 1)); + return; + case CC_L: case CC_NL: + rtl_addi(s, s0, &cpu.cc_dest, 1); + rtl_setrelopi(s, NEGCCRELOP(cc), s0, s0, 0x1u << (cpu.cc_width * 8 - 1)); + rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); + rtl_xor(s, dest, s0, s1); + return; + case CC_LE: case CC_NLE: + rtl_addi(s, s0, &cpu.cc_dest, 1); + rtl_setrelopi(s, RELOP_EQ, s0, s0, 0x1u << (cpu.cc_width * 8 - 1)); + rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); + rtl_xor(s, dest, s0, s1); + rtl_setrelopi(s, RELOP_EQ, s0, &cpu.cc_dest, 0); + rtl_or(s, dest, dest, s0); + goto negcc_reverse; + return; + } + break; + case LAZYCC_ADC: + switch (cc) { + case CC_B: case CC_NB: + MASKDEST(s0); + rtl_is_add_carry(s, s1, &cpu.cc_src1, &cpu.cc_src2); + rtl_is_add_carry(s, dest, p, &cpu.cc_src1); + rtl_or(s, dest, s1, dest); + goto negcc_reverse; + return; + case CC_O: case CC_NO: + rtl_sub(s, dest, &cpu.cc_dest, &cpu.cc_src1); + rtl_is_add_overflow(s, dest, &cpu.cc_dest, dest, &cpu.cc_src2, cpu.cc_width); + goto negcc_reverse; + return; + case CC_L: case CC_NL: + rtl_sub(s, dest, &cpu.cc_dest, &cpu.cc_src1); + rtl_is_add_overflow(s, s0, &cpu.cc_dest, dest, &cpu.cc_src2, cpu.cc_width); + rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); + rtl_xor(s, dest, s0, s1); + goto negcc_reverse; + return; + case CC_LE: case CC_NLE: + rtl_sub(s, dest, &cpu.cc_dest, &cpu.cc_src1); + rtl_is_add_overflow(s, s0, &cpu.cc_dest, dest, &cpu.cc_src2, cpu.cc_width); + rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); + rtl_xor(s, dest, s0, s1); + MASKDEST(s0); + rtl_setrelopi(s, RELOP_EQ, s0, p, 0); + rtl_or(s, dest, dest, s0); + goto negcc_reverse; + return; + case CC_BE: case CC_NBE: + MASKDEST(s0); + rtl_setrelopi(s, RELOP_EQ, s1, p, 0); + rtl_is_add_carry(s, t0, &cpu.cc_src1, &cpu.cc_src2); + rtl_is_add_carry(s, s0, p, &cpu.cc_src1); + rtl_or(s, dest, t0, s0); + rtl_or(s, dest, dest, s1); + goto negcc_reverse; + return; + } + break; + case LAZYCC_SBB: + switch (cc) { + case CC_B: case CC_NB: + rtl_sub(s, s0, &cpu.cc_src1, &cpu.cc_dest); + rtl_is_add_carry(s, s0, s0, &cpu.cc_src2); + rtl_is_sub_carry(s, s1, &cpu.cc_src1, &cpu.cc_dest); + rtl_or(s, dest, s0, s1); + goto negcc_reverse; + return; + case CC_O: case CC_NO: + rtl_is_sub_overflow(s, dest, &cpu.cc_dest, &cpu.cc_src1, &cpu.cc_src2, cpu.cc_width); + goto negcc_reverse; + return; + case CC_L: case CC_NL: + rtl_is_sub_overflow(s, s0, &cpu.cc_dest, &cpu.cc_src1, &cpu.cc_src2, cpu.cc_width); + rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); + rtl_xor(s, dest, s0, s1); + goto negcc_reverse; + return; + case CC_LE: case CC_NLE: + rtl_is_sub_overflow(s, s0, &cpu.cc_dest, &cpu.cc_src1, &cpu.cc_src2, cpu.cc_width); + rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); + rtl_xor(s, dest, s0, s1); + MASKDEST(s0); + rtl_setrelopi(s, RELOP_EQ, s0, p, 0); + rtl_or(s, dest, dest, s0); + goto negcc_reverse; + return; + case CC_BE: case CC_NBE: + rtl_sub(s, s0, &cpu.cc_src1, &cpu.cc_dest); + rtl_is_add_carry(s, s0, s0, &cpu.cc_src2); + rtl_is_sub_carry(s, s1, &cpu.cc_src1, &cpu.cc_dest); + rtl_or(s, dest, s0, s1); + rtl_setrelopi(s, RELOP_EQ, s0, &cpu.cc_dest, 0); + rtl_or(s, dest, dest, s0); + goto negcc_reverse; + return; + } + break; + case LAZYCC_LOGIC: + switch (cc) { + case CC_LE: case CC_NLE: case CC_L: case CC_NL: + p = &cpu.cc_dest; + if (cpu.cc_width != 4) { + rtl_shli(s, dest, p, 32 - cpu.cc_width * 8); + p = dest; + } + default: + if (p != dest) p = &cpu.cc_dest; + rtl_setrelop(s, cc2relop_logic[cc], dest, p, rz); + return; + } + break; + default: panic("unhandle cc_op = %d", cpu.cc_op); + } + panic("unhandle cc_op = %d, cc = %d", cpu.cc_op, cc); +negcc_reverse: + if NEGCC(cc) rtl_xori(s, dest, dest, 1); + return; +} + +static inline def_rtl(lazy_setcc, rtlreg_t *dest, uint32_t cc) { + if (cpu.cc_dirty == false) { + cpu.cc_dynamic = cpu.cc_op | 0x100; + // printf("dynamic hit\n"); + } + rtl_lazy_setcc_internal(s, dest, cc); +} +#endif diff --git a/libraries/NEMU/src/isa/x86/instr/logic.h b/libraries/NEMU/src/isa/x86/instr/logic.h new file mode 100644 index 0000000..b30f675 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/logic.h @@ -0,0 +1,327 @@ +def_EHelper(and) { + rtl_decode_binary(s, true, true); + rtl_and(s, ddest, ddest, dsrc1); +#ifdef CONFIG_x86_CC_LAZY + rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_LOGIC, s->isa.width); +#else + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_update_ZFSF(s, ddest, s->isa.width); + rtl_mv(s, &cpu.CF, rz); + rtl_mv(s, &cpu.OF, rz); + } +#endif + rtl_wb(s, ddest); +} + +def_EHelper(or) { + rtl_decode_binary(s, true, true); + rtl_or(s, ddest, ddest, dsrc1); +#ifdef CONFIG_x86_CC_LAZY + rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_LOGIC, s->isa.width); +#else + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_update_ZFSF(s, ddest, s->isa.width); + rtl_mv(s, &cpu.CF, rz); + rtl_mv(s, &cpu.OF, rz); + } +#endif + rtl_wb(s, ddest); +} + +def_EHelper(test) { + rtl_decode_binary(s, true, true); + rtl_and(s, s0, ddest, dsrc1); +#ifdef CONFIG_x86_CC_LAZY + rtl_set_lazycc(s, s0, NULL, NULL, LAZYCC_LOGIC, s->isa.width); +#else + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_update_ZFSF(s, s0, s->isa.width); + rtl_mv(s, &cpu.CF, rz); + rtl_mv(s, &cpu.OF, rz); + } +#endif +} + +def_EHelper(xor) { + rtl_decode_binary(s, true, true); + rtl_xor(s, ddest, ddest, dsrc1); +#ifdef CONFIG_x86_CC_LAZY + rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_LOGIC, s->isa.width); +#else + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_update_ZFSF(s, ddest, s->isa.width); + rtl_mv(s, &cpu.CF, rz); + rtl_mv(s, &cpu.OF, rz); + } +#endif + rtl_wb(s, ddest); +} + +def_EHelper(not) { + rtl_decode_unary(s, true); + rtl_not(s, ddest, ddest); + rtl_wb(s, ddest); +} + +def_EHelper(setcc) { + rtl_decode_unary(s, false); + uint32_t cc = s->isa.opcode & 0xf; +#ifdef CONFIG_x86_CC_LAZY + rtl_lazy_setcc(s, ddest, cc); +#else + rtl_setcc(s, ddest, cc); +#endif + rtl_wb(s, ddest); +} + +def_EHelper(shl) { + rtl_decode_binary(s, true, true); +#ifndef CONFIG_PA +#ifdef CONFIG_ENGINE_INTERPRETER +// int count = *dsrc1 & 0x1f; +// if (count == 0) return; +#endif + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_subi(s, s0, dsrc1, 1); + rtl_shl(s, s1, ddest, s0); // shift (cnt - 1) + rtl_msb(s, s0, s1, s->isa.width); + rtl_set_CF(s, s0); + rtl_shl(s, ddest, ddest, dsrc1); + + if (MUXDEF(CONFIG_DIFFTEST_REF_KVM, count == 1, 1)) { + rtl_xor(s, s0, s1, ddest); + rtl_msb(s, s0, s0, s->isa.width); + rtl_set_OF(s, s0); + } + + rtl_update_ZFSF(s, ddest, s->isa.width); + } else { + rtl_shl(s, ddest, ddest, dsrc1); + } +#else + rtl_shl(s, ddest, ddest, dsrc1); + rtl_update_ZFSF(s, ddest, s->isa.width); +#endif +#ifdef CONFIG_x86_CC_LAZY + //panic("TODO: implement CF and OF with lazy cc"); +#endif + rtl_wb(s, ddest); +} + +def_EHelper(shr) { + rtl_decode_binary(s, true, true); +#ifndef CONFIG_PA +#ifdef CONFIG_ENGINE_INTERPRETER +// int count = *dsrc1 & 0x1f; +// if (count == 0) return; +#endif + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_subi(s, s0, dsrc1, 1); + rtl_shr(s, s1, ddest, s0); // shift (cnt - 1) + rtl_andi(s, s0, s1, 0x1); + rtl_set_CF(s, s0); + rtl_shr(s, ddest, ddest, dsrc1); + + if (MUXDEF(CONFIG_DIFFTEST_REF_KVM, count == 1, 1)) { + rtl_xor(s, s0, s1, ddest); + rtl_msb(s, s0, s0, s->isa.width); + rtl_set_OF(s, s0); + } + + rtl_update_ZFSF(s, ddest, s->isa.width); + } else { + rtl_shr(s, ddest, ddest, dsrc1); + } +#else + rtl_shr(s, ddest, ddest, dsrc1); + rtl_update_ZFSF(s, ddest, s->isa.width); +#endif +#ifdef CONFIG_x86_CC_LAZY + //panic("TODO: implement CF and OF with lazy cc"); +#endif + rtl_wb(s, ddest); +} + +def_EHelper(sar) { + rtl_decode_binary(s, true, true); + + // if ddest == dsrc1, rtl_sar() still only use the + // lower 5 bits of dsrc1, which do not change after + // rtl_sext(), and it is still sematically correct + rtl_sext(s, ddest, ddest, s->isa.width); +#ifndef CONFIG_PA +#ifdef CONFIG_ENGINE_INTERPRETER +// int count = *dsrc1 & 0x1f; +// if (count == 0) return; +#endif + int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); + if (need_update_eflags) { + rtl_subi(s, s0, dsrc1, 1); + rtl_sar(s, s1, ddest, s0); // shift (cnt - 1) + rtl_andi(s, s0, s1, 0x1); + rtl_set_CF(s, s0); + rtl_sar(s, ddest, ddest, dsrc1); + + if (MUXDEF(CONFIG_DIFFTEST_REF_KVM, count == 1, 1)) { + rtl_xor(s, s0, s1, ddest); + rtl_msb(s, s0, s0, s->isa.width); + rtl_set_OF(s, s0); + } + + rtl_update_ZFSF(s, ddest, s->isa.width); + } else { + rtl_sar(s, ddest, ddest, dsrc1); + } +#else + rtl_sar(s, ddest, ddest, dsrc1); + rtl_update_ZFSF(s, ddest, s->isa.width); +#endif +#ifdef CONFIG_x86_CC_LAZY + //panic("TODO: implement CF and OF with lazy cc"); +#endif + rtl_wb(s, ddest); +} + +def_EHelper(rol) { + rtl_decode_binary(s, true, true); + rtl_shl(s, s0, ddest, dsrc1); + rtl_li(s, s1, s->isa.width * 8); + rtl_sub(s, s1, s1, dsrc1); + rtl_shr(s, s1, ddest, s1); + rtl_or(s, ddest, s0, s1); + rtl_wb(s, ddest); + // unnecessary to update eflags in NEMU + //difftest_skip_eflags(EFLAGS_MASK_ALL); +} + +def_EHelper(ror) { + rtl_decode_binary(s, true, true); + rtl_shr(s, s0, ddest, dsrc1); + rtl_li(s, s1, s->isa.width * 8); + rtl_sub(s, s1, s1, dsrc1); + rtl_shl(s, s1, ddest, s1); + rtl_or(s, ddest, s0, s1); + rtl_wb(s, ddest); + // unnecessary to update eflags in NEMU + //difftest_skip_eflags(EFLAGS_MASK_ALL); +} + +def_EHelper(shld) { + assert(s->isa.width == 4); + rtl_decode_binary(s, true, true); + + rtl_shl(s, s0, ddest, dsrc2); + + rtl_li(s, s1, 31); + rtl_sub(s, s1, s1, dsrc2); + // shift twice to deal with dsrc1 = 0 + // the first shift is still right even if we do not + // mask out the high part of `dsrc1`, since we have + // (31 - (dsrc1 & 0x1f)) = (31 - dsrc1 % 32) = (31 - dsrc1) mod 32 + rtl_shr(s, s1, dsrc1, s1); + rtl_shri(s, s1, s1, 1); + + rtl_or(s, ddest, s0, s1); + rtl_wb(s, ddest); + +#ifndef CONFIG_x86_CC_LAZY + rtl_update_ZFSF(s, ddest, s->isa.width); + // unnecessary to update CF and OF in NEMU +#endif + print_asm_template3(shld); +} + +def_EHelper(shrd) { + assert(s->isa.width == 4); + rtl_decode_binary(s, true, true); + +#ifdef CONFIG_ENGINE_INTERPRETER + int count = *dsrc2 & 0x1f; + if (count == 0) { + rtl_wb(s, ddest); + assert(0); + //return; + } +#endif + rtl_subi(s, s0, dsrc2, 1); + rtl_shr(s, s1, ddest, s0); // shift (cnt - 1) + rtl_andi(s, s0, s1, 0x1); + rtl_set_CF(s, s0); + rtl_shr(s, s0, ddest, dsrc2); + + rtl_li(s, s1, 31); + rtl_sub(s, s1, s1, dsrc2); + // shift twice to deal with dsrc1 = 0 + // the first shift is still right even if we do not + // mask out the high part of `dsrc1`, since we have + // (31 - (dsrc1 & 0x1f)) = (31 - dsrc1 % 32) = (31 - dsrc1) mod 32 + rtl_shl(s, s1, dsrc1, s1); + rtl_shli(s, s1, s1, 1); + + rtl_or(s, ddest, s0, s1); + rtl_wb(s, ddest); + +#ifndef CONFIG_x86_CC_LAZY + rtl_update_ZFSF(s, ddest, s->isa.width); + // unnecessary to update CF and OF in NEMU +#endif +} + +#if 0 +static inline def_EHelper(rcr) { + rtl_shr(s, s0, ddest, dsrc1); + + rtl_get_CF(s, s1); + rtl_shli(s, s1, s1, 31); + rtl_shr(s, s1, s1, dsrc1); + rtl_shli(s, s1, s1, 1); + rtl_or(s, s0, s0, s1); + + rtl_li(s, s1, 1); + rtl_shl(s, s1, s1, dsrc1); + rtl_shri(s, s1, s1, 1); + rtl_and(s, s1, ddest, s1); + rtl_setrelopi(s, RELOP_NE, s1, s1, 0); + rtl_set_CF(s, s1); + + rtl_li(s, s1, id_dest->s->isa.width * 8); + rtl_sub(s, s1, s1, dsrc1); + rtl_shl(s, s1, ddest, s1); + rtl_shli(s, s1, s1, 1); + rtl_or(s, ddest, s0, s1); + + operand_write(s, id_dest, ddest); + print_asm_template2(rcr); +} + +static inline def_EHelper(rcl) { + rtl_shl(s, s0, ddest, dsrc1); + + rtl_get_CF(s, s1); + rtl_shl(s, s1, s1, dsrc1); + rtl_shri(s, s1, s1, 1); + rtl_or(s, s0, s0, s1); + + rtl_li(s, s1, 0x80000000); + rtl_shr(s, s1, s1, dsrc1); + rtl_shli(s, s1, s1, 1); + rtl_and(s, s1, ddest, s1); + rtl_setrelopi(s, RELOP_NE, s1, s1, 0); + rtl_set_CF(s, s1); + + rtl_li(s, s1, id_dest->s->isa.width * 8); + rtl_sub(s, s1, s1, dsrc1); + rtl_shr(s, s1, ddest, s1); + rtl_shri(s, s1, s1, 1); + rtl_or(s, ddest, s0, s1); + + operand_write(s, id_dest, ddest); + print_asm_template2(rcl); +} +#endif diff --git a/libraries/NEMU/src/isa/x86/instr/misc.h b/libraries/NEMU/src/isa/x86/instr/misc.h new file mode 100644 index 0000000..5a2a8ea --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/misc.h @@ -0,0 +1,36 @@ +def_EHelper(cpuid) { + rtl_mv(s, &cpu.eax, rz); + rtl_mv(s, &cpu.ebx, rz); + rtl_mv(s, &cpu.ecx, rz); + rtl_mv(s, &cpu.edx, rz); + difftest_skip_ref(); +} + +def_EHelper(rdtsc) { +#if defined(CONFIG_DETERMINISTIC) || defined(CONFIG_ENGINE_INTERPRETER) + rtl_li(s, &cpu.edx, 0); + rtl_li(s, &cpu.eax, 0); +#else + uint64_t tsc = get_time(); + cpu.edx = tsc >> 32; + cpu.eax = tsc & 0xffffffff; +#endif + + difftest_skip_ref(); +} + +#if 0 +static inline def_EHelper(fwait) { + print_asm("fwait"); +} + +static inline def_EHelper(fpu) { + rtl_trap(s, cpu.pc, 7); +} + +static inline def_EHelper(hlt) { + rtl_trap(s, s->seq_pc, IRQ_TIMER); + if (ref_difftest_raise_intr) ref_difftest_raise_intr(IRQ_TIMER); + print_asm("hlt"); +} +#endif diff --git a/libraries/NEMU/src/isa/x86/instr/rt.h b/libraries/NEMU/src/isa/x86/instr/rt.h new file mode 100644 index 0000000..aa742c7 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/rt.h @@ -0,0 +1,60 @@ +#ifndef __RT_H__ +#define __RT_H__ + +static inline void rt_decode_reg(Decode *s, Operand *op, bool load, int width) { + if (load && (width == 1 || width == 2)) { rtl_lr(s, op->preg, op->reg, width); } +} + +static inline void rt_decode_mem(Decode *s, Operand *op, bool load, int width) { +#if 0 + if (((s->opcode == 0x80 || s->opcode == 0x81 || s->opcode == 0x83) && s->isa.ext_opcode == 7) || + (s->opcode == 0x1ba && s->isa.ext_opcode == 4)) { + // fix with cmp and bt, since they do not write memory + IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 0)); + } +#endif + + rtl_mv(s, &s->isa.mbr, s->isa.mbase); + if (s->isa.midx != rz) { + rtl_shli(s, s1, s->isa.midx, s->isa.mscale); + rtl_add(s, &s->isa.mbr, &s->isa.mbr, s1); + } + if (ISNDEF(CONFIG_PA) && s->isa.sreg_base != NULL) { + rtl_add(s, &s->isa.mbr, &s->isa.mbr, s->isa.sreg_base); + } + + if (load) rtl_lm(s, &op->val, &s->isa.mbr, s->isa.moff, width, MMU_DYNAMIC); +} + +static inline void rt_decode(Decode *s, Operand *op, bool load, int width) { + if (op->type == OP_TYPE_REG) rt_decode_reg(s, op, load, width); + else if (op->type == OP_TYPE_MEM) rt_decode_mem(s, op, load, width); +} + +static inline def_rtl(decode_unary, bool load) { + rt_decode(s, id_dest, load, s->isa.width); +} + +static inline def_rtl(decode_binary, bool load_dest, bool load_src1) { + rt_decode(s, id_dest, load_dest, s->isa.width); + rt_decode(s, id_src1, load_src1, s->isa.width); +} + + + +static inline def_rtl(wb_r, rtlreg_t *src) { + rtl_sr(s, id_dest->reg, src, s->isa.width); +} + +static inline def_rtl(wb_m, rtlreg_t *src) { + rtl_sm(s, src, &s->isa.mbr, s->isa.moff, s->isa.width, MMU_DYNAMIC); +} + +static inline def_rtl(wb, rtlreg_t *src) { + if (id_dest->type == OP_TYPE_REG) rtl_wb_r(s, src); + else if (id_dest->type == OP_TYPE_MEM) rtl_wb_m(s, src); +} + +#include "cc.h" + +#endif diff --git a/libraries/NEMU/src/isa/x86/instr/special.h b/libraries/NEMU/src/isa/x86/instr/special.h new file mode 100644 index 0000000..db4d52e --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/special.h @@ -0,0 +1,13 @@ +def_EHelper(nop) { +} + +def_EHelper(inv) { + save_globals(s); + rtl_hostcall(s, HOSTCALL_INV, NULL, NULL, NULL, 0); + longjmp_exec(NEMU_EXEC_END); +} + +def_EHelper(nemu_trap) { + rtl_hostcall(s, HOSTCALL_EXIT, NULL, &cpu.eax, NULL, 0); + longjmp_exec(NEMU_EXEC_END); +} diff --git a/libraries/NEMU/src/isa/x86/instr/string.h b/libraries/NEMU/src/isa/x86/instr/string.h new file mode 100644 index 0000000..080c118 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/string.h @@ -0,0 +1,122 @@ +def_EHelper(movs) { + rtl_lm(s, s0, &cpu.esi, 0, s->isa.width, MMU_DYNAMIC); + rtl_sm(s, s0, &cpu.edi, 0, s->isa.width, MMU_DYNAMIC); + rtl_addi(s, &cpu.esi, &cpu.esi, (cpu.DF ? -1 : 1) * s->isa.width); + rtl_addi(s, &cpu.edi, &cpu.edi, (cpu.DF ? -1 : 1) * s->isa.width); +} + +def_EHelper(rep_movs) { + if (cpu.ecx != 0) { + rtl_lm(s, s0, &cpu.esi, 0, s->isa.width, MMU_DYNAMIC); + rtl_sm(s, s0, &cpu.edi, 0, s->isa.width, MMU_DYNAMIC); + rtl_addi(s, &cpu.esi, &cpu.esi, (cpu.DF ? -1 : 1) * s->isa.width); + rtl_addi(s, &cpu.edi, &cpu.edi, (cpu.DF ? -1 : 1) * s->isa.width); + + rtl_subi(s, &cpu.ecx, &cpu.ecx, 1); + } + + rtl_jrelop(s, RELOP_NE, &cpu.ecx, rz, s->pc); +} + +def_EHelper(rep_stos) { + if (cpu.ecx != 0) { + rtl_sm(s, &cpu.eax, &cpu.edi, 0, s->isa.width, MMU_DYNAMIC); + rtl_addi(s, &cpu.edi, &cpu.edi, (cpu.DF ? -1 : 1) * s->isa.width); + + rtl_subi(s, &cpu.ecx, &cpu.ecx, 1); + } + + rtl_jrelop(s, RELOP_NE, &cpu.ecx, rz, s->pc); +} + +#if 0 +static inline def_EHelper(lods) { + rtl_lm(s, ddest, &cpu.esi, 0, id_dest->width); + rtl_addi(s, &cpu.esi, &cpu.esi, (cpu.DF ? -1 : 1) * id_dest->width); + operand_write(s, id_dest, ddest); + + print_asm("lods (%%esi), %%eax"); +} + +static inline def_EHelper(stos) { +#ifndef CONFIG_ENGINE_INTERPRETER + Assert(s->isa.rep_flags == 0, "not support REP in engines other than interpreter"); +#endif + + word_t count = (s->isa.rep_flags ? cpu.ecx : 1); + if (count != 0) { + rtl_sm(s, &cpu.edi, 0, dsrc1, id_dest->width); + return_on_mem_ex(); + rtl_addi(s, &cpu.edi, &cpu.edi, (cpu.DF ? -1 : 1) * id_dest->width); + } + if (s->isa.rep_flags && count != 0) { + cpu.ecx --; + if (count - 1 != 0) rtl_j(s, cpu.pc); + } + + print_asm("stos %%eax, (%%edi)"); +} + +static inline def_EHelper(scas) { +#ifndef CONFIG_ENGINE_INTERPRETER + Assert(s->isa.rep_flags == 0, "not support REP in engines other than interpreter"); +#endif + + int is_repnz = (s->isa.rep_flags == PREFIX_REPNZ); + word_t count = (s->isa.rep_flags ? cpu.ecx : 1); + if (count != 0) { + rtl_lm(s, s0, &cpu.edi, 0, id_dest->width); + return_on_mem_ex(); + rtl_setrelop(s, RELOP_EQ, s1, s0, dsrc1); + rtl_set_ZF(s, s1); + rtl_addi(s, &cpu.edi, &cpu.edi, (cpu.DF ? -1 : 1) * id_dest->width); + } + if (s->isa.rep_flags && count != 0) { + cpu.ecx --; + if ((count - 1 != 0) && (is_repnz ^ cpu.ZF)) rtl_j(s, cpu.pc); + } else { + rtl_sub(s, s1, dsrc1, s0); + rtl_update_ZFSF(s, s1, id_dest->width); + rtl_is_sub_carry(s, s1, dsrc1, s0); + rtl_set_CF(s, s1); + rtl_sub(s, s1, dsrc1, s0); + rtl_is_sub_overflow(s, s1, s1, dsrc1, s0, id_dest->width); + rtl_set_OF(s, s1); + } + + print_asm("stos %%eax, (%%edi)"); +} + +static inline def_EHelper(cmps) { +#ifndef CONFIG_ENGINE_INTERPRETER + Assert(s->isa.rep_flags == 0, "not support REP in engines other than interpreter"); +#endif + + int is_repnz = (s->isa.rep_flags == PREFIX_REPNZ); + word_t count = (s->isa.rep_flags ? cpu.ecx : 1); + if (count != 0) { + rtl_lm(s, &id_dest->val, &cpu.edi, 0, id_dest->width); + return_on_mem_ex(); + rtl_lm(s, &id_src1->val, &cpu.esi, 0, id_dest->width); + return_on_mem_ex(); + rtl_setrelop(s, RELOP_EQ, s0, &id_dest->val, &id_src1->val); + rtl_set_ZF(s, s0); + rtl_addi(s, &cpu.esi, &cpu.esi, (cpu.DF ? -1 : 1) * id_dest->width); + rtl_addi(s, &cpu.edi, &cpu.edi, (cpu.DF ? -1 : 1) * id_dest->width); + } + if (s->isa.rep_flags && count != 0) { + cpu.ecx --; + if ((count - 1 != 0) && (is_repnz ^ cpu.ZF)) rtl_j(s, cpu.pc); + else { + rtl_sub(s, s0, &id_src1->val, &id_dest->val); + rtl_update_ZFSF(s, s0, id_dest->width); + rtl_is_sub_carry(s, s1, &id_src1->val, &id_dest->val); + rtl_set_CF(s, s1); + rtl_is_sub_overflow(s, s0, s0, &id_src1->val, &id_dest->val, id_dest->width); + rtl_set_OF(s, s0); + } + } + + print_asm("cmps (%%edi), (%%esi)"); +} +#endif diff --git a/libraries/NEMU/src/isa/x86/instr/system.h b/libraries/NEMU/src/isa/x86/instr/system.h new file mode 100644 index 0000000..2306953 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/system.h @@ -0,0 +1,117 @@ +def_EHelper(in) { + rt_decode(s, id_dest, false, s->isa.width); + rt_decode(s, id_src1, true, 2); + rtl_hostcall(s, HOSTCALL_PIO, ddest, dsrc1, NULL, (1 << 4) | s->isa.width); + rtl_wb_r(s, ddest); +} + +def_EHelper(out) { + rt_decode(s, id_dest, true, 2); + rt_decode(s, id_src1, true, s->isa.width); + rtl_hostcall(s, HOSTCALL_PIO, ddest, dsrc1, NULL, (0 << 4) | s->isa.width); +} + +def_EHelper(mov_r2cr) { + rtl_decode_binary(s, false, true); + rtl_hostcall(s, HOSTCALL_CSR, NULL, dsrc1, NULL, CSR_CR0 + id_dest->reg); +} + +def_EHelper(mov_cr2r) { + rtl_decode_binary(s, false, false); + rtl_hostcall(s, HOSTCALL_CSR, ddest, NULL, NULL, CSR_CR0 + id_src1->reg); + rtl_priv_next(s); +} + +def_EHelper(lidt) { + rtl_decode_unary(s, false); + rtl_addi(s, ddest, &s->isa.mbr, s->isa.moff); + rtl_hostcall(s, HOSTCALL_CSR, NULL, ddest, NULL, CSR_IDTR); +} + +def_EHelper(lgdt) { + rtl_decode_unary(s, false); + rtl_addi(s, ddest, &s->isa.mbr, s->isa.moff); + rtl_hostcall(s, HOSTCALL_CSR, NULL, ddest, NULL, CSR_GDTR); +} + +def_EHelper(ltr) { + rtl_decode_unary(s, true); + rtl_hostcall(s, HOSTCALL_CSR, NULL, ddest, NULL, CSR_TR); +} + +def_EHelper(_int) { + rtl_trap(s, s->snpc, id_dest->val); + rtl_priv_jr(s, t0); +} + +def_EHelper(iret) { + rtl_hostcall(s, HOSTCALL_PRIV, s0, NULL, NULL, PRIV_IRET); + rtl_priv_jr(s, s0); +} + +def_EHelper(mov_rm2sreg) { + rtl_decode_binary(s, false, true); + rtl_hostcall(s, HOSTCALL_CSR, NULL, dsrc1, NULL, id_dest->reg); + if (ISNDEF(CONFIG_DIFFTEST_REF_NEMU) && id_dest->reg == 2) { difftest_skip_dut(1, 2); } // SS +} + +#if 0 +static inline def_EHelper(lldt) { + rtl_hostcall(s, HOSTCALL_CSR, NULL, ddest, CSR_LDTR); + print_asm_template1(lldt); +} + +static inline def_EHelper(mov_sreg2rm) { + rtl_hostcall(s, HOSTCALL_CSR, s0, NULL, id_src1->reg); + operand_write(s, id_dest, s0); + print_asm("movw %%%s,%s", sreg_name(id_src1->reg), id_dest->str); +} + +static inline def_EHelper(push_sreg_internal) { + rtl_hostcall(s, HOSTCALL_CSR, s0, NULL, id_dest->reg); + rtl_push(s, s0); + print_asm("push %%%s", sreg_name(id_dest->reg)); +} + +static inline def_EHelper(pop_sreg_internal) { + rtl_pop(s, s0); + rtl_hostcall(s, HOSTCALL_CSR, NULL, s0, id_dest->reg); + print_asm("pop %%%s", sreg_name(id_dest->reg)); +} + +static inline def_EHelper(push_fs) { + id_dest->reg = CSR_FS; + exec_push_sreg_internal(s); +} + +static inline def_EHelper(push_es) { + id_dest->reg = CSR_ES; + exec_push_sreg_internal(s); +} + +static inline def_EHelper(push_ds) { + id_dest->reg = CSR_DS; + exec_push_sreg_internal(s); +} + +static inline def_EHelper(pop_ds) { + id_dest->reg = CSR_DS; + exec_pop_sreg_internal(s); +} + +static inline def_EHelper(pop_es) { + id_dest->reg = CSR_ES; + exec_pop_sreg_internal(s); +} + +static inline def_EHelper(pop_fs) { + id_dest->reg = CSR_FS; + exec_pop_sreg_internal(s); +} + +static inline def_EHelper(invlpg) { +} + +static inline def_EHelper(mov_r2dr) { +} +#endif diff --git a/libraries/NEMU/src/isa/x86/instr/vector.h b/libraries/NEMU/src/isa/x86/instr/vector.h new file mode 100644 index 0000000..3f5801b --- /dev/null +++ b/libraries/NEMU/src/isa/x86/instr/vector.h @@ -0,0 +1,70 @@ +def_EHelper(movq_E2xmm) { + rtl_decode_binary(s, false, false); + + rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 0, 4, MMU_DYNAMIC); + cpu.xmm[id_dest->reg]._32[0] = *s0; + rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 4, 4, MMU_DYNAMIC); + cpu.xmm[id_dest->reg]._32[1] = *s0; + + //rtl_li(s, s0, cpu.xmm[id_dest->reg]._32[0]); + //operand_write(s, id_src1, s0); +} + +def_EHelper(movq_xmm2E) { + rtl_decode_binary(s, false, false); + *s0 = cpu.xmm[id_src1->reg]._32[0]; + rtl_sm(s, s0, &s->isa.mbr, s->isa.moff + 0, 4, MMU_DYNAMIC); + *s0 = cpu.xmm[id_src1->reg]._32[1]; + rtl_sm(s, s0, &s->isa.mbr, s->isa.moff + 4, 4, MMU_DYNAMIC); +} + +def_EHelper(movdqa_E2xmm) { + rtl_decode_binary(s, false, false); + if (id_src1->type == OP_TYPE_REG) { + cpu.xmm[id_dest->reg] = cpu.xmm[id_src1->reg]; + } else { + assert(0); + rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 0, 4, MMU_DYNAMIC); + cpu.xmm[id_dest->reg]._32[0] = *s0; + rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 4, 4, MMU_DYNAMIC); + cpu.xmm[id_dest->reg]._32[1] = *s0; + rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 8, 4, MMU_DYNAMIC); + cpu.xmm[id_dest->reg]._32[2] = *s0; + rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 12, 4, MMU_DYNAMIC); + cpu.xmm[id_dest->reg]._32[3] = *s0; + } +} + +def_EHelper(psrlq) { + rtl_decode_unary(s, false); + assert(id_dest->type == OP_TYPE_REG); + cpu.xmm[id_dest->reg]._128 >>= id_src1->imm; +} + +def_EHelper(movd_xmm2E) { + rtl_decode_binary(s, false, false); + rtl_li(s, s0, cpu.xmm[id_src1->reg]._32[0]); + rtl_wb(s, s0); +} + +def_EHelper(pxor) { + rtl_decode_binary(s, false, false); + union { + __uint128_t _128; + uint32_t _32[4]; + } src; + if (id_src1->type == OP_TYPE_REG) { + assert(0); + src._128 = cpu.xmm[id_src1->reg]._128; + } else { + rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 0, 4, MMU_DYNAMIC); + src._32[0] = *s0; + rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 4, 4, MMU_DYNAMIC); + src._32[1] = *s0; + rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 8, 4, MMU_DYNAMIC); + src._32[2] = *s0; + rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 12, 4, MMU_DYNAMIC); + src._32[3] = *s0; + } + cpu.xmm[id_dest->reg]._128 ^= src._128; +} diff --git a/libraries/NEMU/src/isa/x86/kvm/kvm.c b/libraries/NEMU/src/isa/x86/kvm/kvm.c new file mode 100644 index 0000000..5c42170 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/kvm/kvm.c @@ -0,0 +1,224 @@ +#if 0 +//#include +#include +#include +#include + +#include +#include +#include +#include +#include + +uint32_t pio_read(ioaddr_t addr, int len); +void pio_write(ioaddr_t addr, int len, uint32_t data); + +/* CR0 bits */ +#define CR0_PE 1u + +struct vm { + int sys_fd; + int fd; + char *mem; +}; + +void vm_init(struct vm *vm, size_t mem_size) { + int api_ver; + struct kvm_userspace_memory_region memreg; + + vm->sys_fd = open("/dev/kvm", O_RDWR); + if (vm->sys_fd < 0) { + perror("open /dev/kvm"); + assert(0); + } + + api_ver = ioctl(vm->sys_fd, KVM_GET_API_VERSION, 0); + if (api_ver < 0) { + perror("KVM_GET_API_VERSION"); + assert(0); + } + + if (api_ver != KVM_API_VERSION) { + fprintf(stderr, "Got KVM api version %d, expected %d\n", + api_ver, KVM_API_VERSION); + assert(0); + } + + vm->fd = ioctl(vm->sys_fd, KVM_CREATE_VM, 0); + if (vm->fd < 0) { + perror("KVM_CREATE_VM"); + assert(0); + } + + if (ioctl(vm->fd, KVM_SET_TSS_ADDR, 0xfffbd000) < 0) { + perror("KVM_SET_TSS_ADDR"); + assert(0); + } + + vm->mem = mmap(NULL, mem_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0); + if (vm->mem == MAP_FAILED) { + perror("mmap mem"); + assert(0); + } + + madvise(vm->mem, mem_size, MADV_MERGEABLE); + + memreg.slot = 0; + memreg.flags = 0; + memreg.guest_phys_addr = 0; + memreg.memory_size = mem_size; + memreg.userspace_addr = (unsigned long)vm->mem; + if (ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, &memreg) < 0) { + perror("KVM_SET_USER_MEMORY_REGION"); + assert(0); + } +} + +struct vcpu { + int fd; + struct kvm_run *kvm_run; +}; + +void vcpu_init(struct vm *vm, struct vcpu *vcpu) { + int vcpu_mmap_size; + + vcpu->fd = ioctl(vm->fd, KVM_CREATE_VCPU, 0); + if (vcpu->fd < 0) { + perror("KVM_CREATE_VCPU"); + assert(0); + } + + vcpu_mmap_size = ioctl(vm->sys_fd, KVM_GET_VCPU_MMAP_SIZE, 0); + if (vcpu_mmap_size <= 0) { + perror("KVM_GET_VCPU_MMAP_SIZE"); + assert(0); + } + + vcpu->kvm_run = mmap(NULL, vcpu_mmap_size, PROT_READ | PROT_WRITE, + MAP_SHARED, vcpu->fd, 0); + if (vcpu->kvm_run == MAP_FAILED) { + perror("mmap kvm_run"); + assert(0); + } +} + +int run_vm(struct vm *vm, struct vcpu *vcpu, size_t sz) { + struct kvm_regs regs; + + for (;;) { + if (ioctl(vcpu->fd, KVM_RUN, 0) < 0) { + if (errno == EINTR) continue; + perror("KVM_RUN"); + assert(0); + } + + switch (vcpu->kvm_run->exit_reason) { + case KVM_EXIT_HLT: { + struct kvm_interrupt intr = { .irq = 48 }; + int ret = ioctl(vcpu->fd, KVM_INTERRUPT, &intr); + assert(ret == 0); + continue; + } + + case KVM_EXIT_IO: { + struct kvm_run *p = vcpu->kvm_run; + uint8_t *p_data = (uint8_t *)p + p->io.data_offset; + if (p->io.direction == KVM_EXIT_IO_OUT) { + pio_write(p->io.port, p->io.size, *(uint32_t *)p_data); + } + else { + // FIXME + *(uint32_t *)p_data = pio_read(p->io.port, p->io.size); + } + continue; + } + + case KVM_EXIT_MMIO: { + struct kvm_run *p = vcpu->kvm_run; + if (p->mmio.is_write) { + uint64_t data = *(uint64_t *)p->mmio.data; + paddr_write(p->mmio.phys_addr, p->mmio.len, data); + } else { + uint64_t data = paddr_read(p->mmio.phys_addr, p->mmio.len); + memcpy(p->mmio.data, &data, p->mmio.len); + } + continue; + } + + /* fall through */ + default: + if (ioctl(vcpu->fd, KVM_GET_REGS, ®s) < 0) { + perror("KVM_GET_REGS"); + assert(0); + } + fprintf(stderr, "Got exit_reason %d at pc = 0x%llx," + " expected KVM_EXIT_HLT (%d)\n", + vcpu->kvm_run->exit_reason, regs.rip, KVM_EXIT_HLT); + assert(0); + } + } +} + +static void setup_protected_mode(struct kvm_sregs *sregs) { + struct kvm_segment seg = { + .base = 0, + .limit = 0xffffffff, + .selector = 1 << 3, + .present = 1, + .type = 11, /* Code: execute, read, accessed */ + .dpl = 0, + .db = 1, + .s = 1, /* Code/data */ + .l = 0, + .g = 1, /* 4KB granularity */ + }; + + sregs->cr0 |= CR0_PE; /* enter protected mode */ + + sregs->cs = seg; + + seg.type = 3; /* Data: read/write, accessed */ + seg.selector = 2 << 3; + sregs->ds = sregs->es = sregs->fs = sregs->gs = sregs->ss = seg; +} + +int run_protected_mode(struct vm *vm, struct vcpu *vcpu) { + struct kvm_sregs sregs; + struct kvm_regs regs; + + if (ioctl(vcpu->fd, KVM_GET_SREGS, &sregs) < 0) { + perror("KVM_GET_SREGS"); + assert(0); + } + + setup_protected_mode(&sregs); + + if (ioctl(vcpu->fd, KVM_SET_SREGS, &sregs) < 0) { + perror("KVM_SET_SREGS"); + assert(0); + } + + memset(®s, 0, sizeof(regs)); + /* Clear all FLAGS bits, except bit 1 which is always set. */ + regs.rflags = 2; + regs.rip = RESET_VECTOR; + + if (ioctl(vcpu->fd, KVM_SET_REGS, ®s) < 0) { + perror("KVM_SET_REGS"); + assert(0); + } + + memcpy(vm->mem, guest_to_host(CONFIG_MBASE), CONFIG_MSIZE); + return run_vm(vm, vcpu, 4); +} + +void kvm_exec() { + struct vm vm; + struct vcpu vcpu; + vm_init(&vm, CONFIG_MSIZE); + vcpu_init(&vm, &vcpu); + + run_protected_mode(&vm, &vcpu); +} +#endif diff --git a/libraries/NEMU/src/isa/x86/local-include/intr.h b/libraries/NEMU/src/isa/x86/local-include/intr.h new file mode 100644 index 0000000..6617f3d --- /dev/null +++ b/libraries/NEMU/src/isa/x86/local-include/intr.h @@ -0,0 +1,19 @@ +#ifndef __X86_INTR_H__ +#define __X86_INTR_H__ + +#include + +#ifdef CONFIG_PA +#define IRQ_TIMER 32 +#else +#define IRQ_TIMER 48 +#endif + +word_t raise_intr(word_t NO, vaddr_t ret_addr); +#ifndef CONFIG_PA +#define return_on_mem_ex() do { if (cpu.mem_exception != 0) return; } while (0) +#else +#define return_on_mem_ex() +#endif + +#endif diff --git a/libraries/NEMU/src/isa/x86/local-include/reg.h b/libraries/NEMU/src/isa/x86/local-include/reg.h new file mode 100644 index 0000000..104113f --- /dev/null +++ b/libraries/NEMU/src/isa/x86/local-include/reg.h @@ -0,0 +1,37 @@ +#ifndef __X86_REG_H__ +#define __X86_REG_H__ + +#include + +enum { PRIV_IRET }; + +static inline int check_reg_index(int index) { + IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 8)); + return index; +} + +#define reg_l(index) (cpu.gpr[check_reg_index(index)]._32) +#define reg_w(index) (cpu.gpr[check_reg_index(index)]._16) +#define reg_b(index) (cpu.gpr[check_reg_index(index) & 0x3]._8[index >> 2]) + +static inline const char* reg_name(int index, int width) { + extern const char* regsl[]; + extern const char* regsw[]; + extern const char* regsb[]; + IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 8)); + + switch (width) { + case 4: return regsl[index]; + case 1: return regsb[index]; + case 2: return regsw[index]; + default: assert(0); + } +} + +static inline const char* sreg_name(int index) { + const char *name[] = { "es", "cs", "ss", "ds", "fs", "gs" }; + IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < ARRLEN(name))); + return name[index]; +} + +#endif diff --git a/libraries/NEMU/src/isa/x86/local-include/rtl.h b/libraries/NEMU/src/isa/x86/local-include/rtl.h new file mode 100644 index 0000000..d79b3fc --- /dev/null +++ b/libraries/NEMU/src/isa/x86/local-include/rtl.h @@ -0,0 +1,193 @@ +#ifndef __X86_RTL_H__ +#define __X86_RTL_H__ + +#include +#include "reg.h" +#include "intr.h" + +/* RTL pseudo instructions */ + +static inline def_rtl(lr, rtlreg_t* dest, int r, int width) { + switch (width) { + case 4: rtl_mv(s, dest, ®_l(r)); return; + case 1: rtl_host_lm(s, dest, ®_b(r), 1); return; + case 2: rtl_host_lm(s, dest, ®_w(r), 2); return; + IFDEF(CONFIG_RT_CHECK, default: assert(0)); + } +} + +static inline def_rtl(sr, int r, const rtlreg_t* src1, int width) { + switch (width) { + case 4: rtl_mv(s, ®_l(r), src1); return; + case 1: rtl_host_sm(s, ®_b(r), src1, 1); return; + case 2: rtl_host_sm(s, ®_w(r), src1, 2); return; + IFDEF(CONFIG_RT_CHECK, default: assert(0)); + } +} + +#ifndef __ICS_EXPORT +static inline def_rtl(push, const rtlreg_t* src1) { + // esp <- esp - 4 + // M[esp] <- src1 + rtl_sm(s, src1, &cpu.esp, -4, 4, MMU_DYNAMIC); + rtl_subi(s, &cpu.esp, &cpu.esp, 4); +} + +static inline def_rtl(pop, rtlreg_t* dest) { + // dest <- M[esp] + // esp <- esp + 4 + rtl_lm(s, dest, &cpu.esp, 0, 4, MMU_DYNAMIC); + rtl_addi(s, &cpu.esp, &cpu.esp, 4); +} + +static inline def_rtl(is_sub_overflow, rtlreg_t* dest, + const rtlreg_t* res, const rtlreg_t* src1, const rtlreg_t* src2, int width) { + // dest <- is_overflow(src1 - src2) + rtl_xor(s, t0, src1, src2); + rtl_xor(s, dest, src1, res); + rtl_and(s, dest, t0, dest); + rtl_msb(s, dest, dest, width); +} + +static inline def_rtl(is_sub_carry, rtlreg_t* dest, + const rtlreg_t* src1, const rtlreg_t* src2) { + // dest <- is_carry(src1 - src2) + rtl_setrelop(s, RELOP_LTU, dest, src1, src2); +} + +static inline def_rtl(is_add_overflow, rtlreg_t* dest, + const rtlreg_t* res, const rtlreg_t* src1, const rtlreg_t* src2, int width) { + // dest <- is_overflow(src1 + src2) + rtl_is_sub_overflow(s, dest, src1, res, src2, width); +} + +static inline def_rtl(is_add_carry, rtlreg_t* dest, + const rtlreg_t* res, const rtlreg_t* src1) { + // dest <- is_carry(src1 + src2) + rtl_is_sub_carry(s, dest, res, src1); +} + +#else +static inline def_rtl(push, const rtlreg_t* src1) { + // esp <- esp - 4 + // M[esp] <- src1 + TODO(); +} + +static inline def_rtl(pop, rtlreg_t* dest) { + // dest <- M[esp] + // esp <- esp + 4 + TODO(); +} + +static inline def_rtl(is_sub_overflow, rtlreg_t* dest, + const rtlreg_t* res, const rtlreg_t* src1, const rtlreg_t* src2, int width) { + // dest <- is_overflow(src1 - src2) + TODO(); +} + +static inline def_rtl(is_sub_carry, rtlreg_t* dest, + const rtlreg_t* src1, const rtlreg_t* src2) { + // dest <- is_carry(src1 - src2) + TODO(); +} + +static inline def_rtl(is_add_overflow, rtlreg_t* dest, + const rtlreg_t* res, const rtlreg_t* src1, const rtlreg_t* src2, int width) { + // dest <- is_overflow(src1 + src2) + TODO(); +} + +static inline def_rtl(is_add_carry, rtlreg_t* dest, + const rtlreg_t* res, const rtlreg_t* src1) { + // dest <- is_carry(src1 + src2) + TODO(); +} +#endif + +#ifndef __ICS_EXPORT +#define def_rtl_setget_eflags(f) \ + static inline def_rtl(concat(set_, f), const rtlreg_t* src) { \ + rtl_mv(s, &cpu.f, src); \ + } \ + static inline def_rtl(concat(get_, f), rtlreg_t* dest) { \ + rtl_mv(s, dest, &cpu.f); \ + } + +def_rtl_setget_eflags(CF) +def_rtl_setget_eflags(OF) +def_rtl_setget_eflags(ZF) +def_rtl_setget_eflags(SF) +def_rtl_setget_eflags(DF) +def_rtl_setget_eflags(IF) +def_rtl_setget_eflags(PF) + +static inline def_rtl(update_ZF, const rtlreg_t* result, int width) { + // eflags.ZF <- is_zero(result[width * 8 - 1 .. 0]) + if (width != 4) { + rtl_andi(s, t0, result, 0xffffffffu >> ((4 - width) * 8)); + rtl_setrelopi(s, RELOP_EQ, t0, t0, 0); + } + else { + rtl_setrelopi(s, RELOP_EQ, t0, result, 0); + } + rtl_set_ZF(s, t0); +} + +static inline def_rtl(update_SF, const rtlreg_t* result, int width) { + // eflags.SF <- is_sign(result[width * 8 - 1 .. 0]) + rtl_msb(s, t0, result, width); + rtl_set_SF(s, t0); +} + +static inline def_rtl(update_PF, const rtlreg_t* result) { + // eflags.PF <- is_parity(result[7 .. 0]) + // HACK: `s2` is rarely used, so we use it here + rtl_shri(s, t0, result, 4); + rtl_xor(s, t0, t0, result); + rtl_shri(s, s2, t0, 2); + rtl_xor(s, t0, t0, s2); + rtl_shri(s, s2, t0, 1); + rtl_xor(s, t0, t0, s2); + rtl_not(s, t0, t0); + rtl_andi(s, t0, t0, 1); + rtl_set_PF(s, t0); +} + +static inline def_rtl(update_ZFSF, const rtlreg_t* result, int width) { + rtl_update_ZF(s, result, width); + rtl_update_SF(s, result, width); +#ifndef CONFIG_PA + rtl_update_PF(s, result); +#endif +} +#else +#define def_rtl_setget_eflags(f) \ + static inline def_rtl(concat(set_, f), const rtlreg_t* src) { \ + TODO(); \ + } \ + static inline def_rtl(concat(get_, f), rtlreg_t* dest) { \ + TODO(); \ + } + +def_rtl_setget_eflags(CF) +def_rtl_setget_eflags(OF) +def_rtl_setget_eflags(ZF) +def_rtl_setget_eflags(SF) + +static inline def_rtl(update_ZF, const rtlreg_t* result, int width) { + // eflags.ZF <- is_zero(result[width * 8 - 1 .. 0]) + TODO(); +} + +static inline def_rtl(update_SF, const rtlreg_t* result, int width) { + // eflags.SF <- is_sign(result[width * 8 - 1 .. 0]) + TODO(); +} + +static inline def_rtl(update_ZFSF, const rtlreg_t* result, int width) { + rtl_update_ZF(s, result, width); + rtl_update_SF(s, result, width); +} +#endif +#endif diff --git a/libraries/NEMU/src/isa/x86/logo.c b/libraries/NEMU/src/isa/x86/logo.c new file mode 100644 index 0000000..764675a --- /dev/null +++ b/libraries/NEMU/src/isa/x86/logo.c @@ -0,0 +1,43 @@ +// refer to http://www.patorjk.com/software/taag/#p=display&f=Big&t=Type%20Something%20 + +/* + _ ____ ___ __ __ __ _ + (_)___ \ / _ \ / / | \/ | | | + _ __) | (_) |/ /_ | \ / | __ _ _ __ _ _ __ _| | + | ||__ < > _ <| '_ \ | |\/| |/ _` | '_ \| | | |/ _` | | + | |___) | (_) | (_) | | | | | (_| | | | | |_| | (_| | | + |_|____/ \___/ \___/ |_| |_|\__,_|_| |_|\__,_|\__,_|_| + +*/ + +unsigned char isa_logo[] = { + 0x20, 0x5f, 0x20, 0x5f, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x5f, 0x5f, + 0x5f, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x5f, + 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x0a, 0x28, 0x5f, 0x29, + 0x5f, 0x5f, 0x5f, 0x20, 0x5c, 0x20, 0x2f, 0x20, 0x5f, 0x20, 0x5c, 0x20, + 0x20, 0x2f, 0x20, 0x2f, 0x20, 0x20, 0x20, 0x7c, 0x20, 0x20, 0x5c, 0x2f, + 0x20, 0x20, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x5f, 0x20, 0x20, 0x5f, 0x5f, + 0x29, 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x29, 0x20, 0x7c, 0x2f, 0x20, 0x2f, + 0x5f, 0x20, 0x20, 0x20, 0x7c, 0x20, 0x5c, 0x20, 0x20, 0x2f, 0x20, 0x7c, + 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x20, 0x5f, 0x20, 0x5f, 0x5f, 0x20, 0x20, + 0x5f, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x7c, + 0x20, 0x7c, 0x0a, 0x7c, 0x20, 0x7c, 0x7c, 0x5f, 0x5f, 0x20, 0x3c, 0x20, + 0x3e, 0x20, 0x5f, 0x20, 0x3c, 0x7c, 0x20, 0x27, 0x5f, 0x20, 0x5c, 0x20, + 0x20, 0x7c, 0x20, 0x7c, 0x5c, 0x2f, 0x7c, 0x20, 0x7c, 0x2f, 0x20, 0x5f, + 0x60, 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x20, 0x5c, 0x7c, 0x20, 0x7c, 0x20, + 0x7c, 0x20, 0x7c, 0x2f, 0x20, 0x5f, 0x60, 0x20, 0x7c, 0x20, 0x7c, 0x0a, + 0x7c, 0x20, 0x7c, 0x5f, 0x5f, 0x5f, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x5f, + 0x29, 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x29, 0x20, 0x7c, 0x20, 0x7c, 0x20, + 0x7c, 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x7c, 0x20, 0x7c, + 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x7c, + 0x20, 0x28, 0x5f, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x0a, 0x7c, 0x5f, 0x7c, + 0x5f, 0x5f, 0x5f, 0x5f, 0x2f, 0x20, 0x5c, 0x5f, 0x5f, 0x5f, 0x2f, 0x20, + 0x5c, 0x5f, 0x5f, 0x5f, 0x2f, 0x20, 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x20, + 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x20, + 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, + 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x0a, 0x00 +}; diff --git a/libraries/NEMU/src/isa/x86/reg.c b/libraries/NEMU/src/isa/x86/reg.c new file mode 100644 index 0000000..b436f4e --- /dev/null +++ b/libraries/NEMU/src/isa/x86/reg.c @@ -0,0 +1,85 @@ +#include +#include +#include +#include "local-include/reg.h" + +const char *regsl[] = {"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"}; +const char *regsw[] = {"ax", "cx", "dx", "bx", "sp", "bp", "si", "di"}; +const char *regsb[] = {"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh"}; + +void reg_test() { + srand(time(0)); + word_t sample[8]; + word_t pc_sample = rand(); + cpu.pc = pc_sample; + + int i; + for (i = R_EAX; i <= R_EDI; i ++) { + sample[i] = rand(); + reg_l(i) = sample[i]; + assert(reg_w(i) == (sample[i] & 0xffff)); + } + + assert(reg_b(R_AL) == (sample[R_EAX] & 0xff)); + assert(reg_b(R_AH) == ((sample[R_EAX] >> 8) & 0xff)); + assert(reg_b(R_BL) == (sample[R_EBX] & 0xff)); + assert(reg_b(R_BH) == ((sample[R_EBX] >> 8) & 0xff)); + assert(reg_b(R_CL) == (sample[R_ECX] & 0xff)); + assert(reg_b(R_CH) == ((sample[R_ECX] >> 8) & 0xff)); + assert(reg_b(R_DL) == (sample[R_EDX] & 0xff)); + assert(reg_b(R_DH) == ((sample[R_EDX] >> 8) & 0xff)); + + assert(sample[R_EAX] == cpu.eax); + assert(sample[R_ECX] == cpu.ecx); + assert(sample[R_EDX] == cpu.edx); + assert(sample[R_EBX] == cpu.ebx); + assert(sample[R_ESP] == cpu.esp); + assert(sample[R_EBP] == cpu.ebp); + assert(sample[R_ESI] == cpu.esi); + assert(sample[R_EDI] == cpu.edi); + + assert(pc_sample == cpu.pc); +} + +#ifndef __ICS_EXPORT +#include + +void isa_reg_display() { + int i; + for (i = 0; i < 8; i ++) { + printf("%s: 0x%08x\n", regsl[i], cpu.gpr[i]._32); + } + printf("fpu st top: %d\n", cpu.ftop); + for (i = 0; i< 8; i ++) { + union { + uint64_t i; + double f; + } u; + u.i = cpu.fpr[i]; + printf("fpr[%d]: 0x%016lx %lf\n", i, u.i, u.f); + } + printf("pc: 0x%08x\n", cpu.pc); +} + +word_t isa_reg_str2val(const char *s, bool *success) { + int i; + *success = true; + for (i = 0; i < 8; i ++) { + if (strcmp(regsl[i], s) == 0) return reg_l(i); + if (strcmp(regsw[i], s) == 0) return reg_w(i); + if(strcmp(regsb[i], s) == 0) return reg_b(i); + } + + if (strcmp("pc", s) == 0) return cpu.pc; + + *success = false; + return 0; +} +#else +void isa_reg_display() { +} + +word_t isa_reg_str2val(const char *s, bool *success) { + return 0; +} +#endif diff --git a/libraries/NEMU/src/isa/x86/system/intr.c b/libraries/NEMU/src/isa/x86/system/intr.c new file mode 100644 index 0000000..9ba4f23 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/system/intr.c @@ -0,0 +1,101 @@ +#include "../local-include/rtl.h" +#include "../local-include/intr.h" + +#if !defined(__ICS_EXPORT) && defined(CONFIG_ENGINE_INTERPRETER) +#include + +typedef union GateDescriptor { + struct { + uint32_t offset_15_0 : 16; + uint32_t selector : 16; + uint32_t dont_care1 : 15; + uint32_t present : 1; + uint32_t offset_31_16 : 16; + }; + uint32_t val[2]; +} GateDesc; + +uint32_t compute_eflags(); + +word_t raise_intr(uint32_t NO, vaddr_t ret_addr) { + assert(NO < 256); + int old_cs = cpu.sreg[CSR_CS].val; + // fetch the gate descriptor with ring 0 + cpu.sreg[CSR_CS].rpl = 0; + cpu.mem_exception = 0; + + GateDesc gate; + gate.val[0] = vaddr_read(NULL, cpu.idtr.base + NO * 8 + 0, 4, MMU_DYNAMIC); + gate.val[1] = vaddr_read(NULL, cpu.idtr.base + NO * 8 + 4, 4, MMU_DYNAMIC); + assert(gate.present); // check the present bit + + uint16_t new_cs = gate.selector; + uint32_t new_pc = (gate.offset_31_16 << 16) | gate.offset_15_0; + + if ((new_cs & 0x3) < (old_cs & 0x3)) { + // stack switch + assert(cpu.sreg[CSR_TR].ti == 0); // check the table bit + assert((old_cs & 0x3) == 3); // only support switching from ring 3 + assert((new_cs & 0x3) == 0); // only support switching to ring 0 + + uint32_t esp3 = cpu.esp; + uint32_t ss3 = cpu.sreg[CSR_SS].val; + cpu.esp = vaddr_read(NULL, cpu.sreg[CSR_TR].base + 4, 4, MMU_DYNAMIC); + cpu.sreg[CSR_SS].val = vaddr_read(NULL, cpu.sreg[CSR_TR].base + 8, 2, MMU_DYNAMIC); + + vaddr_write(NULL, cpu.esp - 4, 4, ss3, MMU_DYNAMIC); + vaddr_write(NULL, cpu.esp - 8, 4, esp3, MMU_DYNAMIC); + cpu.esp -= 8; + } + + vaddr_write(NULL, cpu.esp - 4, 4, compute_eflags(), MMU_DYNAMIC); + __attribute__((unused)) word_t eflags_esp = cpu.esp - 4; + vaddr_write(NULL, cpu.esp - 8, 4, old_cs, MMU_DYNAMIC); + vaddr_write(NULL, cpu.esp - 12, 4, ret_addr, MMU_DYNAMIC); + cpu.esp -= 12; + + if (ISNDEF(CONFIG_PA) && NO == 14) { + // page fault has error code + vaddr_write(NULL, cpu.esp - 4, 4, cpu.error_code, MMU_DYNAMIC); + cpu.esp -= 4; + } + + cpu.IF = 0; + cpu.sreg[CSR_CS].val = new_cs; + +#if defined(CONFIG_DIFFTEST_REF_KVM) + if (ref_difftest_raise_intr) ref_difftest_raise_intr(NO); +#elif !defined(CONFIG_DIFFTEST_REF_NEMU) + difftest_skip_dut(1, 2); + void difftest_fix_eflags(void *arg); + difftest_set_patch(difftest_fix_eflags, (void *)(uintptr_t)eflags_esp); +#endif + + return new_pc; +} + +word_t isa_query_intr() { + if (cpu.INTR && cpu.IF) { + cpu.INTR = false; + return IRQ_TIMER; + } + return INTR_EMPTY; +} +#else +word_t raise_intr(uint32_t NO, vaddr_t ret_addr) { + /* TODO: Trigger an interrupt/exception with ``NO''. + * That is, use ``NO'' to index the IDT. + */ + +#if !defined(CONFIG_ENGINE_INTERPRETER) + panic("not support in non-interpreter mode"); +#endif + return 0; +} + +void query_intr() { +#if !defined(CONFIG_ENGINE_INTERPRETER) + panic("not support in non-interpreter mode"); +#endif +} +#endif diff --git a/libraries/NEMU/src/isa/x86/system/mmu.c b/libraries/NEMU/src/isa/x86/system/mmu.c new file mode 100644 index 0000000..0161366 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/system/mmu.c @@ -0,0 +1,114 @@ +#include +#include +#include +#ifndef __ICS_EXPORT +#include "../local-include/reg.h" +#include + +typedef union PageTableEntry { + struct { + uint32_t p : 1; + uint32_t w : 1; + uint32_t u : 1; + uint32_t pwt : 1; + uint32_t pcd : 1; + uint32_t a : 1; + uint32_t d : 1; + uint32_t pat : 1; + uint32_t g : 1; + uint32_t pad : 3; + uint32_t ppn :20; + }; + uint32_t val; +} PTE; + +#define PGSHFT 12 +#define PGMASK ((1u << PGSHFT) - 1) +#define PGBASE(pn) (pn << PGSHFT) + +#define PTW_LEVEL 2 +#define PTE_SIZE 4 +#define VPNMASK 0x3ff + +static inline word_t VPNiSHFT(int i) { + return PGSHFT + 10 * i; +} + +static inline word_t VPNi(vaddr_t va, int i) { + return (va >> VPNiSHFT(i)) & VPNMASK; +} + +#ifdef CONFIG_PA +static inline bool check_permission(PTE *pte, bool ok, vaddr_t vaddr, int type) { + Assert(pte->p, "vaddr = %x, cpu.pc = %x", vaddr, cpu.pc); + return true; +} +#else +static inline bool check_permission(PTE *pte, bool ok, vaddr_t vaddr, int type) { + int is_user = cpu.sreg[CSR_CS].rpl == MODE_R3; + int is_write = (type == MEM_TYPE_WRITE) || (type == MEM_TYPE_READ && cpu.lock); + ok = ok && pte->p; + ok = ok && !(is_user && !pte->u); + ok = ok && !(is_write && !pte->w); // assume that CR0.WP is always enabled + if (!ok && cpu.mem_exception == 0) { + cpu.cr2 = vaddr; + cpu.mem_exception = 14; + cpu.lock = 0; + cpu.error_code = pte->p | (is_write << 1) | (is_user << 2); + } + return ok; +} +#endif + +static inline paddr_t ptw(vaddr_t vaddr, int type) { + word_t pg_base = PGBASE(cpu.cr3.ppn); + word_t p_pte[PTW_LEVEL]; // pte pointer + PTE pte[PTW_LEVEL]; + int level; + + for (level = PTW_LEVEL - 1; level >= 0; level --) { + p_pte[level] = pg_base + VPNi(vaddr, level) * PTE_SIZE; + pte[level].val = paddr_read(p_pte[level], PTE_SIZE); + pg_base = PGBASE(pte[level].ppn); + if (!pte[level].p) goto bad; + } + + level ++; + assert(level == 0); + if (!check_permission(&pte[0], true, vaddr, type)) return MEM_RET_FAIL; + +#if !defined(CONFIG_PA) || defined(CONFIG_DIFFTEST) + if (!pte[1].a) { + pte[1].a = 1; + paddr_write(p_pte[1], PTE_SIZE, pte[1].val); + IFDEF(CONFIG_DIFFTEST, + ref_difftest_memcpy(p_pte[1], &pte[1].val, PTE_SIZE, DIFFTEST_TO_REF)); + } + bool is_write = (type == MEM_TYPE_WRITE); + if (!pte[0].a || (!pte[0].d && is_write)) { + pte[0].a = 1; + pte[0].d |= is_write; + paddr_write(p_pte[0], PTE_SIZE, pte[0].val); + IFDEF(CONFIG_DIFFTEST, + ref_difftest_memcpy(p_pte[0], &pte[0].val, PTE_SIZE, DIFFTEST_TO_REF)); + } +#endif + + return pg_base | MEM_RET_OK; + +bad: + check_permission(&pte[level], false, vaddr, type); + return MEM_RET_FAIL; +} + +paddr_t isa_mmu_translate(vaddr_t vaddr, int len, int type) { + bool is_cross_page = ((vaddr & PAGE_MASK) + len) > PAGE_SIZE; + if (is_cross_page) return MEM_RET_CROSS_PAGE; + return ptw(vaddr, type); +} +#else + +paddr_t isa_mmu_translate(vaddr_t vaddr, int len, int type) { + return MEM_RET_FAIL; +} +#endif diff --git a/libraries/NEMU/src/isa/x86/system/priv.c b/libraries/NEMU/src/isa/x86/system/priv.c new file mode 100644 index 0000000..f5fcb95 --- /dev/null +++ b/libraries/NEMU/src/isa/x86/system/priv.c @@ -0,0 +1,117 @@ +#include "../local-include/rtl.h" +#include "../local-include/intr.h" +#include + +#if defined(CONFIG_ENGINE_INTERPRETER) + +void set_eflags(uint32_t val); + +static void load_sreg(int idx, uint16_t val) { + cpu.sreg[idx].val = val; + + if (val == 0) return; + +#ifdef CONFIG_MODE_USER + assert(cpu.sreg[idx].ti == 0); // check the table bit + extern uint32_t GDT[]; + cpu.sreg[idx].base = GDT[cpu.sreg[idx].idx]; +#else + uint16_t old_cpl = cpu.sreg[CSR_CS].val; + cpu.sreg[CSR_CS].rpl = 0; // use ring 0 to index GDT + + assert(cpu.sreg[idx].ti == 0); // check the table bit + uint32_t desc_base = cpu.gdtr.base + (cpu.sreg[idx].idx << 3); + uint32_t desc_lo = vaddr_read(NULL, desc_base + 0, 4, MMU_DYNAMIC); + uint32_t desc_hi = vaddr_read(NULL, desc_base + 4, 4, MMU_DYNAMIC); + assert((desc_hi >> 15) & 0x1); // check the present bit + + cpu.sreg[CSR_CS].rpl = old_cpl; // restore CPL + + uint32_t base = (desc_hi & 0xff000000) | ((desc_hi & 0xff) << 16) | (desc_lo >> 16); + cpu.sreg[idx].base = base; +#endif +} + +static inline void csrrw(rtlreg_t *dest, const rtlreg_t *src, uint32_t csrid) { + if (dest != NULL) { + switch (csrid) { +#ifndef CONFIG_MODE_USER + case 0 ... CSR_LDTR: *dest = cpu.sreg[csrid].val; break; + case CSR_CR0 ... CSR_CR4: *dest = cpu.cr[csrid - CSR_CR0]; break; +#endif + default: panic("Reading from CSR = %d is not supported", csrid); + } + } + if (src != NULL) { + switch (csrid) { +#ifndef CONFIG_MODE_USER + case CSR_IDTR: + cpu.idtr.limit = vaddr_read(NULL, *src, 2, MMU_DYNAMIC); + cpu.idtr.base = vaddr_read(NULL, *src + 2, 4, MMU_DYNAMIC); + break; + case CSR_GDTR: + cpu.gdtr.limit = vaddr_read(NULL, *src, 2, MMU_DYNAMIC); + cpu.gdtr.base = vaddr_read(NULL, *src + 2, 4, MMU_DYNAMIC); + break; + case CSR_CR0 ... CSR_CR4: cpu.cr[csrid - CSR_CR0] = *src; break; +#endif + case 0 ... CSR_LDTR: load_sreg(csrid, *src); break; + default: panic("Writing to CSR = %d is not supported", csrid); + } + if (csrid == CSR_CR3) mmu_tlb_flush(0); + } +} + +#ifndef CONFIG_MODE_USER +static inline word_t iret() { + int old_cpl = cpu.sreg[CSR_CS].rpl; + uint32_t new_pc = vaddr_read(NULL, cpu.esp + 0, 4, MMU_DYNAMIC); + uint32_t new_cs = vaddr_read(NULL, cpu.esp + 4, 4, MMU_DYNAMIC); + uint32_t eflags = vaddr_read(NULL, cpu.esp + 8, 4, MMU_DYNAMIC); + cpu.esp += 12; + set_eflags(eflags); + int new_cpl = new_cs & 0x3; + if (new_cpl > old_cpl) { + // return to user + uint32_t esp3 = vaddr_read(NULL, cpu.esp + 0, 4, MMU_DYNAMIC); + uint32_t ss3 = vaddr_read(NULL, cpu.esp + 4, 4, MMU_DYNAMIC); + cpu.esp = esp3; + cpu.sreg[CSR_SS].val = ss3; + } + cpu.sreg[CSR_CS].val = new_cs; + + set_sys_state_flag(SYS_STATE_FLUSH_TCACHE); + return new_pc; +} + +static inline word_t priv_instr(uint32_t op, const rtlreg_t *src) { + switch (op) { + case PRIV_IRET: return iret(); + default: panic("Unsupported privilige operation = %d", op); + } +} +#endif + +void isa_hostcall(uint32_t id, rtlreg_t *dest, const rtlreg_t *src1, + const rtlreg_t *src2, word_t imm) { + word_t ret = 0; + switch (id) { + case HOSTCALL_CSR: csrrw(dest, src1, imm); return; +#ifdef CONFIG_MODE_USER + case HOSTCALL_TRAP: + Assert(imm == 0x80, "Unsupport exception = %d", imm); + uintptr_t host_syscall(uintptr_t id, uintptr_t arg1, uintptr_t arg2, + uintptr_t arg3, uintptr_t arg4, uintptr_t arg5, uintptr_t arg6); + cpu.eax = host_syscall(cpu.eax, cpu.ebx, cpu.ecx, cpu.edx, cpu.esi, cpu.edi, cpu.ebp); + ret = *src1; + break; +#else + case HOSTCALL_TRAP: ret = raise_intr(imm, *src1); break; + case HOSTCALL_PRIV: ret = priv_instr(imm, src1); break; +#endif + default: panic("Unsupported hostcall ID = %d", id); + } + if (dest) *dest = ret; +} + +#endif diff --git a/libraries/NEMU/src/memory/Kconfig b/libraries/NEMU/src/memory/Kconfig new file mode 100644 index 0000000..d379d09 --- /dev/null +++ b/libraries/NEMU/src/memory/Kconfig @@ -0,0 +1,35 @@ +menu "Memory Configuration" + +config MBASE + hex "Memory base address" + default 0x08048000 if MODE_USER + default 0x80000000 + +config MSIZE + hex "Memory size" + default 0x8000000 + +config PC_RESET_OFFSET + hex "Offset of reset vector from the base of memory" + default 0 if MODE_USER + default 0x100000 + +config USE_MMAP + bool "Allocate guest physical memory with mmap()" + default y + +config MEM_RANDOM + depends on MODE_SYSTEM && !DIFFTEST + bool "Initialize the memory with random values" + default y + help + This may help to find undefined behaviors. + +config MEM_COMPRESS + depends on MODE_SYSTEM && !DIFFTEST + bool "Initialize the memory with a compressed gz file" + default n + help + Must have zlib installed. + +endmenu #MEMORY diff --git a/libraries/NEMU/src/memory/host-tlb.c b/libraries/NEMU/src/memory/host-tlb.c new file mode 100644 index 0000000..031d77f --- /dev/null +++ b/libraries/NEMU/src/memory/host-tlb.c @@ -0,0 +1,89 @@ +#include +#include +#include +#include +#include + +#define HOSTTLB_SIZE_SHIFT 12 +#define HOSTTLB_SIZE (1 << HOSTTLB_SIZE_SHIFT) + +typedef struct { + uint8_t *offset; // offset from the guest virtual address of the data page to the host virtual address + vaddr_t gvpn; // guest virtual page number +} HostTLBEntry; + +static HostTLBEntry hosttlb[HOSTTLB_SIZE * 2]; +static HostTLBEntry* const hostrtlb = &hosttlb[0]; +static HostTLBEntry* const hostwtlb = &hosttlb[HOSTTLB_SIZE]; + +static inline vaddr_t hosttlb_vpn(vaddr_t vaddr) { + return (vaddr >> PAGE_SHIFT); +} + +static inline int hosttlb_idx(vaddr_t vaddr) { + return (hosttlb_vpn(vaddr) % HOSTTLB_SIZE); +} + +void hosttlb_flush(vaddr_t vaddr) { + if (vaddr == 0) { + memset(hosttlb, -1, sizeof(hosttlb)); + } else { + vaddr_t gvpn = hosttlb_vpn(vaddr); + int idx = hosttlb_idx(vaddr); + if (hostrtlb[idx].gvpn == gvpn) hostrtlb[idx].gvpn = (sword_t)-1; + if (hostwtlb[idx].gvpn == gvpn) hostwtlb[idx].gvpn = (sword_t)-1; + } +} + +void hosttlb_init() { + hosttlb_flush(0); +} + +static paddr_t va2pa(struct Decode *s, vaddr_t vaddr, int len, int type) { + if (type != MEM_TYPE_IFETCH) save_globals(s); + int ret = isa_mmu_check(vaddr, len, type); + if (ret == MMU_DIRECT) return vaddr; + paddr_t pg_base = isa_mmu_translate(vaddr, len, type); + ret = pg_base & PAGE_MASK; + assert(ret == MEM_RET_OK); + return pg_base | (vaddr & PAGE_MASK); +} + +__attribute__((noinline)) +static word_t hosttlb_read_slowpath(struct Decode *s, vaddr_t vaddr, int len, int type) { + paddr_t paddr = va2pa(s, vaddr, len, type); + if (likely(in_pmem(paddr))) { + HostTLBEntry *e = &hostrtlb[hosttlb_idx(vaddr)]; + e->offset = guest_to_host(paddr) - vaddr; + e->gvpn = hosttlb_vpn(vaddr); + } + return paddr_read(paddr, len); +} + +__attribute__((noinline)) +static void hosttlb_write_slowpath(struct Decode *s, vaddr_t vaddr, int len, word_t data) { + paddr_t paddr = va2pa(s, vaddr, len, MEM_TYPE_WRITE); + if (likely(in_pmem(paddr))) { + HostTLBEntry *e = &hostwtlb[hosttlb_idx(vaddr)]; + e->offset = guest_to_host(paddr) - vaddr; + e->gvpn = hosttlb_vpn(vaddr); + } + paddr_write(paddr, len, data); +} + +word_t hosttlb_read(struct Decode *s, vaddr_t vaddr, int len, int type) { + vaddr_t gvpn = hosttlb_vpn(vaddr); + HostTLBEntry *e = &hostrtlb[hosttlb_idx(vaddr)]; + if (unlikely(e->gvpn != gvpn)) return hosttlb_read_slowpath(s, vaddr, len, type); + return host_read(e->offset + vaddr, len); +} + +void hosttlb_write(struct Decode *s, vaddr_t vaddr, int len, word_t data) { + vaddr_t gvpn = hosttlb_vpn(vaddr); + HostTLBEntry *e = &hostwtlb[hosttlb_idx(vaddr)]; + if (unlikely(e->gvpn != gvpn)) { + hosttlb_write_slowpath(s, vaddr, len, data); + return; + } + host_write(e->offset + vaddr, len, data); +} diff --git a/libraries/NEMU/src/memory/paddr.c b/libraries/NEMU/src/memory/paddr.c new file mode 100644 index 0000000..74e056c --- /dev/null +++ b/libraries/NEMU/src/memory/paddr.c @@ -0,0 +1,146 @@ +#include +#include +#include +#include +#include +#include + +#ifdef CONFIG_USE_MMAP +#include +static const uint8_t *pmem = (uint8_t *)0x100000000ul; +#else +static uint8_t pmem[CONFIG_MSIZE] PG_ALIGN = {}; +#endif +#define HOST_PMEM_OFFSET (uint8_t *)(pmem - CONFIG_MBASE) + +uint8_t* guest_to_host(paddr_t paddr) { return paddr + HOST_PMEM_OFFSET; } +paddr_t host_to_guest(uint8_t *haddr) { return haddr - HOST_PMEM_OFFSET; } + +static inline word_t pmem_read(paddr_t addr, int len) { + return host_read(guest_to_host(addr), len); +} + +static inline void pmem_write(paddr_t addr, int len, word_t data) { +#ifdef CONFIG_DIFFTEST_STORE_COMMIT + store_commit_queue_push(addr, data, len); +#endif + host_write(guest_to_host(addr), len, data); +} + +void init_mem() { +#ifdef CONFIG_USE_MMAP + void *ret = mmap((void *)pmem, CONFIG_MSIZE, PROT_READ | PROT_WRITE, + MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); + if (ret != pmem) { + perror("mmap"); + assert(0); + } +#endif + +#ifdef CONFIG_DIFFTEST_STORE_COMMIT + for (int i = 0; i < STORE_QUEUE_SIZE; i++) { + store_commit_queue[i].valid = 0; + } +#endif + +#ifdef CONFIG_MEM_RANDOM + srand(time(0)); + uint32_t *p = (uint32_t *)pmem; + int i; + for (i = 0; i < (int) (CONFIG_MSIZE / sizeof(p[0])); i ++) { + p[i] = rand(); + } +#endif +} + +/* Memory accessing interfaces */ + +word_t paddr_read(paddr_t addr, int len) { +#ifndef CONFIG_SHARE + if (likely(in_pmem(addr))) return pmem_read(addr, len); + else return mmio_read(addr, len); +#else + if (likely(in_pmem(addr))) return pmem_read(addr, len); + else printf("ERROR: invalid mem access to paddr " FMT_PADDR ", NEMU loaded 0 to continue difftest\n", addr); + return 0; +#endif +} + +void paddr_write(paddr_t addr, int len, word_t data) { +#ifndef CONFIG_SHARE + if (likely(in_pmem(addr))) pmem_write(addr, len, data); + else mmio_write(addr, len, data); +#else + return pmem_write(addr, len, data); +#endif +} + + +#ifdef CONFIG_DIFFTEST_STORE_COMMIT +store_commit_t store_commit_queue[STORE_QUEUE_SIZE]; +static uint64_t head = 0, tail = 0; + +void store_commit_queue_push(uint64_t addr, uint64_t data, int len) { + static int overflow = 0; + if (cpu.amo || overflow) { + return; + } + store_commit_t *commit = store_commit_queue + tail; + if(commit->valid){ // store commit queue overflow + overflow = 1; + printf("[WARNING] difftest store queue overflow, difftest store commit disabled\n"); + }; + uint64_t offset = addr % 8ULL; + commit->addr = addr - offset; + commit->valid = 1; + switch (len) { + case 1: + commit->data = (data & 0xffULL) << (offset << 3); + commit->mask = 0x1 << offset; + break; + case 2: + commit->data = (data & 0xffffULL) << (offset << 3); + commit->mask = 0x3 << offset; + break; + case 4: + commit->data = (data & 0xffffffffULL) << (offset << 3); + commit->mask = 0xf << offset; + break; + case 8: + commit->data = data; + commit->mask = 0xff; + break; + default: + assert(0); + } + tail = (tail + 1) % STORE_QUEUE_SIZE; +} + +store_commit_t *store_commit_queue_pop() { + store_commit_t *result = store_commit_queue + head; + if (!result->valid) { + return NULL; + } + result->valid = 0; + head = (head + 1) % STORE_QUEUE_SIZE; + return result; +} + +int check_store_commit(uint64_t *addr, uint64_t *data, uint8_t *mask) { + *addr = *addr - (*addr % 0x8ULL); + store_commit_t *commit = store_commit_queue_pop(); + int result = 0; + if (!commit) { + printf("NEMU does not commit any store instruction.\n"); + result = 1; + } + else if (*addr != commit->addr || *data != commit->data || *mask != commit->mask) { + *addr = commit->addr; + *data = commit->data; + *mask = commit->mask; + result = 1; + } + return result; +} + +#endif \ No newline at end of file diff --git a/libraries/NEMU/src/memory/vaddr.c b/libraries/NEMU/src/memory/vaddr.c new file mode 100644 index 0000000..6f4e6a5 --- /dev/null +++ b/libraries/NEMU/src/memory/vaddr.c @@ -0,0 +1,109 @@ +#include + +#ifdef CONFIG_PERF_OPT +#define ENABLE_HOSTTLB 1 +#endif + +#include +#include +#include + +#ifndef __ICS_EXPORT +#ifndef ENABLE_HOSTTLB +static word_t vaddr_read_cross_page(vaddr_t addr, int len, int type) { + word_t data = 0; + int i; + for (i = 0; i < len; i ++, addr ++) { + paddr_t mmu_ret = isa_mmu_translate(addr, 1, type); + int ret = mmu_ret & PAGE_MASK; + if (ret != MEM_RET_OK) return 0; + paddr_t paddr = (mmu_ret & ~PAGE_MASK) | (addr & PAGE_MASK); + word_t byte = (type == MEM_TYPE_IFETCH ? paddr_read : paddr_read)(paddr, 1); + data |= byte << (i << 3); + } + return data; +} + +static void vaddr_write_cross_page(vaddr_t addr, int len, word_t data) { + int i; + for (i = 0; i < len; i ++, addr ++) { + paddr_t mmu_ret = isa_mmu_translate(addr, 1, MEM_TYPE_WRITE); + int ret = mmu_ret & PAGE_MASK; + if (ret != MEM_RET_OK) return; + paddr_t paddr = (mmu_ret & ~PAGE_MASK) | (addr & PAGE_MASK); + paddr_write(paddr, 1, data & 0xff); + data >>= 8; + } +} + +__attribute__((noinline)) +static word_t vaddr_mmu_read(struct Decode *s, vaddr_t addr, int len, int type) { +#ifdef XIANGSHAN_DEBUG + vaddr_t vaddr = addr; +#endif + paddr_t pg_base = isa_mmu_translate(addr, len, type); + int ret = pg_base & PAGE_MASK; + if (ret == MEM_RET_OK) { + addr = pg_base | (addr & PAGE_MASK); + word_t rdata = paddr_read(addr, len); +#ifdef XIANGSHAN_DEBUG + printf("[NEMU] mmu_read: vaddr 0x%lx, paddr 0x%lx, rdata 0x%lx\n", + vaddr, addr, rdata); +#endif + return rdata; + } else if (len != 1 && ret == MEM_RET_CROSS_PAGE) { + return vaddr_read_cross_page(addr, len, type); + } + return 0; +} + +__attribute__((noinline)) +static void vaddr_mmu_write(struct Decode *s, vaddr_t addr, int len, word_t data) { +#ifdef XIANGSHAN_DEBUG + vaddr_t vaddr = addr; +#endif + paddr_t pg_base = isa_mmu_translate(addr, len, MEM_TYPE_WRITE); + int ret = pg_base & PAGE_MASK; + if (ret == MEM_RET_OK) { + addr = pg_base | (addr & PAGE_MASK); +#ifdef XIANGSHAN_DEBUG + printf("[NEMU] mmu_write: vaddr 0x%lx, paddr 0x%lx, len %d, data 0x%lx\n", + vaddr, addr, len, data); +#endif + paddr_write(addr, len, data); + } else if (len != 1 && ret == MEM_RET_CROSS_PAGE) { + vaddr_write_cross_page(addr, len, data); + } +} +#endif +#endif + +static inline word_t vaddr_read_internal(void *s, vaddr_t addr, int len, int type, int mmu_mode) { + if (unlikely(mmu_mode == MMU_DYNAMIC)) mmu_mode = isa_mmu_check(addr, len, type); + if (mmu_mode == MMU_DIRECT) return paddr_read(addr, len); +#ifndef __ICS_EXPORT + return MUXDEF(ENABLE_HOSTTLB, hosttlb_read, vaddr_mmu_read) ((struct Decode *)s, addr, len, type); +#endif + return 0; +} + +word_t vaddr_ifetch(vaddr_t addr, int len) { + return vaddr_read_internal(NULL, addr, len, MEM_TYPE_IFETCH, MMU_DYNAMIC); +} + +word_t vaddr_read(struct Decode *s, vaddr_t addr, int len, int mmu_mode) { + return vaddr_read_internal(s, addr, len, MEM_TYPE_READ, mmu_mode); +} + +void vaddr_write(struct Decode *s, vaddr_t addr, int len, word_t data, int mmu_mode) { + if (unlikely(mmu_mode == MMU_DYNAMIC)) mmu_mode = isa_mmu_check(addr, len, MEM_TYPE_WRITE); + if (mmu_mode == MMU_DIRECT) { paddr_write(addr, len, data); return; } +#ifndef __ICS_EXPORT + MUXDEF(ENABLE_HOSTTLB, hosttlb_write, vaddr_mmu_write) (s, addr, len, data); +#endif +} + +word_t vaddr_read_safe(vaddr_t addr, int len) { + // FIXME: when reading fails, return an error instead of raising exceptions + return vaddr_read_internal(NULL, addr, len, MEM_TYPE_READ, MMU_DYNAMIC); +} diff --git a/libraries/NEMU/src/monitor/aligncheck.c b/libraries/NEMU/src/monitor/aligncheck.c new file mode 100644 index 0000000..dee2935 --- /dev/null +++ b/libraries/NEMU/src/monitor/aligncheck.c @@ -0,0 +1,63 @@ +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif +#include + +#ifdef CONFIG_AC_HOST +#ifndef CONFIG_SHARE +#include + +#define RFLAGS_AC (1u << 18) +#define RFLAGS_TF (1u << 8) + +static void aligncheck_sig_handler(int sig, siginfo_t *info, void *ucontext) { + ucontext_t *uc = (ucontext_t *)ucontext; + uint8_t *rip = (uint8_t *)uc->uc_mcontext.gregs[REG_RIP]; + extern uint8_t _start, _etext; + if (&_start <= rip && rip < &_etext) { + panic("handle misaligned memory accessing"); + } + uc->uc_mcontext.gregs[REG_EFL] &= ~RFLAGS_AC; + uc->uc_mcontext.gregs[REG_EFL] |= RFLAGS_TF; +} + +static void trap_sig_handler(int sig, siginfo_t *info, void *ucontext) { + ucontext_t *uc = (ucontext_t *)ucontext; + uc->uc_mcontext.gregs[REG_EFL] |= RFLAGS_AC; + uc->uc_mcontext.gregs[REG_EFL] &= ~RFLAGS_TF; +} + +static inline void aligncheck_enable() { + asm volatile( + "add $-128, %%rsp \n" // skip past the red-zone + "pushf\n" + "orl $0x40000,(%%rsp)\n" + "popf \n" + "sub $-128, %%rsp" // and restore the stack pointer. + ::: "memory"); // ordered wrt. other mem access +} + +void init_aligncheck() { + struct sigaction s; + memset(&s, 0, sizeof(s)); + s.sa_sigaction = aligncheck_sig_handler; + s.sa_flags = SA_SIGINFO; + int ret = sigaction(SIGBUS, &s, NULL); + Assert(ret == 0, "Can not set signal handler"); + + memset(&s, 0, sizeof(s)); + s.sa_sigaction = trap_sig_handler; + s.sa_flags = SA_SIGINFO; + ret = sigaction(SIGTRAP, &s, NULL); + Assert(ret == 0, "Can not set signal handler"); + + aligncheck_enable(); +} +#else +void init_aligncheck() { +} +#endif +#else +void init_aligncheck() { +} +#endif diff --git a/libraries/NEMU/src/monitor/monitor.c b/libraries/NEMU/src/monitor/monitor.c new file mode 100644 index 0000000..f6dd13b --- /dev/null +++ b/libraries/NEMU/src/monitor/monitor.c @@ -0,0 +1,195 @@ +#include +#include +#include +#include + +#ifndef CONFIG_SHARE +void init_aligncheck(); +void init_log(const char *log_file); +void init_mem(); +void init_regex(); +void init_wp_pool(); +void init_difftest(char *ref_so_file, long img_size, int port); +void init_device(); + +static char *log_file = NULL; +static char *diff_so_file = NULL; +static char *img_file = NULL; +static int batch_mode = false; +static int difftest_port = 1234; +char *max_instr = NULL; + +int is_batch_mode() { return batch_mode; } + +static inline void welcome() { + Log("Debug: \33[1;32m%s\33[0m", MUXDEF(CONFIG_DEBUG, "ON","OFF")); + IFDEF(CONFIG_DEBUG, Log("If debug mode is on, a log file will be generated " + "to record every instruction NEMU executes. This may lead to a large log file. " + "If it is not necessary, you can turn it off in include/common.h.") + ); + Log("Build time: %s, %s", __TIME__, __DATE__); + printf("Welcome to \33[1;41m\33[1;33m%s\33[0m-NEMU!\n", str(__ISA__)); + printf("For help, type \"help\"\n"); +} + +#ifndef CONFIG_MODE_USER + +#ifdef CONFIG_MEM_COMPRESS +#include + +static long load_gz_img(const char *filename) { + gzFile compressed_mem = gzopen(filename, "rb"); + Assert(compressed_mem, "Can not open '%s'", filename); + + const uint32_t chunk_size = 16384; + uint8_t *temp_page = (uint8_t *)calloc(chunk_size, sizeof(long)); + uint8_t *pmem_start = (uint8_t *)guest_to_host(RESET_VECTOR); + uint8_t *pmem_current; + + // load file byte by byte to pmem + uint64_t curr_size = 0; + while (curr_size < CONFIG_MSIZE) { + uint32_t bytes_read = gzread(compressed_mem, temp_page, chunk_size); + if (bytes_read == 0) { + break; + } + for (uint32_t x = 0; x < bytes_read; x++) { + pmem_current = pmem_start + curr_size + x; + uint8_t read_data = *(temp_page + x); + if (read_data != 0 || *pmem_current != 0) { + *pmem_current = read_data; + } + } + curr_size += bytes_read; + } + + // check again to ensure the bin has been fully loaded + uint32_t left_bytes = gzread(compressed_mem, temp_page, chunk_size); + Assert(left_bytes == 0, "File size is larger than buf_size!\n"); + + free(temp_page); + Assert(!gzclose(compressed_mem), "Error closing '%s'\n", filename); + return curr_size; +} + +// Return whether a file is a gz file, determined by its name. +// If the filename ends with ".gz", we treat it as a gz file. +bool is_gz_file(const char *filename) { + if (filename == NULL || strlen(filename) < 3) { + return false; + } + return !strcmp(filename + (strlen(filename) - 3), ".gz"); +} +#endif // CONFIG_MEM_COMPRESS + +static inline long load_img() { + if (img_file == NULL) { + Log("No image is given. Use the default build-in image."); + return 4096; // built-in image size + } + +#ifdef CONFIG_MEM_COMPRESS + if (is_gz_file(img_file)) { + Log("The image is %s", img_file); + return load_gz_img(img_file); + } +#endif + + FILE *fp = fopen(img_file, "rb"); + Assert(fp, "Can not open '%s'", img_file); + + Log("The image is %s", img_file); + + fseek(fp, 0, SEEK_END); + long size = ftell(fp); + + fseek(fp, 0, SEEK_SET); + int ret = fread(guest_to_host(RESET_VECTOR), size, 1, fp); + assert(ret == 1); + + fclose(fp); + return size; +} +#endif // CONFIG_MODE_USER + +static inline int parse_args(int argc, char *argv[]) { + const struct option table[] = { + {"batch" , no_argument , NULL, 'b'}, + {"max-instr", required_argument, NULL, 'I'}, + {"log" , required_argument, NULL, 'l'}, + {"diff" , required_argument, NULL, 'd'}, + {"port" , required_argument, NULL, 'p'}, + {"help" , no_argument , NULL, 'h'}, + {0 , 0 , NULL, 0 }, + }; + int o; + while ( (o = getopt_long(argc, argv, "-bI:hl:d:p:", table, NULL)) != -1) { + switch (o) { + case 'b': batch_mode = true; break; + case 'I': max_instr = optarg; break; + case 'p': sscanf(optarg, "%d", &difftest_port); break; + case 'l': log_file = optarg; break; + case 'd': diff_so_file = optarg; break; + case 1: img_file = optarg; return optind - 1; + default: + printf("Usage: %s [OPTION...] IMAGE [args]\n\n", argv[0]); + printf("\t-b,--batch run with batch mode\n"); + printf("\t-I,--max-instr max number of instructions executed\n"); + printf("\t-l,--log=FILE output log to FILE\n"); + printf("\t-d,--diff=REF_SO run DiffTest with reference REF_SO\n"); + printf("\t-p,--port=PORT run DiffTest with port PORT\n"); + printf("\n"); + exit(0); + } + } + return 0; +} + +void init_monitor(int argc, char *argv[]) { + /* Perform some global initialization. */ + + /* Parse arguments. */ +#ifdef CONFIG_MODE_USER + int user_argidx = parse_args(argc, argv); +#else + parse_args(argc, argv); +#endif + + /* Open the log file. */ + init_log(log_file); + + /* Initialize memory. */ + init_mem(); + + /* Load the image to memory. This will overwrite the built-in image. */ +#ifdef CONFIG_MODE_USER + int user_argc = argc - user_argidx; + char **user_argv = argv + user_argidx; + void init_user(char *elfpath, int argc, char *argv[]); + init_user(img_file, user_argc, user_argv); +#else + /* Perform ISA dependent initialization. */ + init_isa(); + + long img_size = load_img(); + + /* Initialize differential testing. */ + init_difftest(diff_so_file, img_size, difftest_port); + + /* Initialize devices. */ + init_device(); +#endif + + /* Compile the regular expressions. */ + init_regex(); + + /* Initialize the watchpoint pool. */ + init_wp_pool(); + + /* Enable alignment checking for in a x86 host */ + init_aligncheck(); + + /* Display welcome message. */ + welcome(); +} +#endif \ No newline at end of file diff --git a/libraries/NEMU/src/monitor/ui.c b/libraries/NEMU/src/monitor/ui.c new file mode 100644 index 0000000..9e90be8 --- /dev/null +++ b/libraries/NEMU/src/monitor/ui.c @@ -0,0 +1,297 @@ +#include +#include +#include +#ifndef __ICS_EXPORT +#include +#include +#include +#endif + +#include +#include +#include + +#ifndef CONFIG_SHARE +int is_batch_mode(); +int set_watchpoint(char *e); +bool delete_watchpoint(int NO); +void list_watchpoint(); + +/* We use the `readline' library to provide more flexibility to read from stdin. */ +static char* rl_gets() { + static char *line_read = NULL; + + if (line_read) { + free(line_read); + line_read = NULL; + } + + line_read = readline("(nemu) "); + + if (line_read && *line_read) { + add_history(line_read); + } + + return line_read; +} + +static int cmd_c(char *args) { + cpu_exec((args == NULL) ? -1 : atoi(args)); + return 0; +} + +#ifndef __ICS_EXPORT +static int cmd_si(char *args) { + /* extract the first argument */ + char *arg = strtok(NULL, " "); + + if (arg == NULL) { + /* no argument given */ + cpu_exec(1); + } + else { + int n = strtol(arg, NULL, 10); + printf("si %d\n", n); + cpu_exec(n); + } + return 0; +} + +static int cmd_info(char *args) { + char *arg = strtok(NULL, " "); + + if (arg == NULL) { + /* no argument given */ + Log("usage: info [r|w]"); + } + else { + if (strcmp(arg, "r") == 0) { + isa_reg_display(); + } + else if (strcmp(arg, "w") == 0) { + list_watchpoint(); + } + } + return 0; +} + +static int cmd_d(char *args) { + char *arg = strtok(NULL, " "); + + if (arg == NULL) { + /* no argument given */ + Log("usage: d n"); + } + else { + int NO; + sscanf(args, "%d", &NO); + if (!delete_watchpoint(NO)) { + printf("Watchpoint #%d does not exist\n", NO); + } + } + + return 0; +} + +static int cmd_p(char *args) { + if (args != NULL) { + bool success; + word_t r = expr(args, &success); + if(success) { printf(FMT_WORD "\n", r); } + else { printf("Bad expression\n"); } + } + return 0; +} + +static int cmd_w(char *args) { + if (args != NULL) { + int NO = set_watchpoint(args); + if (NO != -1) { printf("Set watchpoint #%d\n", NO); } + else { printf("Bad expression\n"); } + } + return 0; +} + +static int cmd_x(char *args) { + char *arg = strtok(NULL, " "); + + if (arg == NULL) { + /* no argument given */ + Log("usage: x n addr"); + } + else { + int n; + vaddr_t addr; + int i; + sscanf(arg, "%d", &n); + + bool success; + addr = expr(arg + strlen(arg) + 1, &success); + if (success) { + for (i = 0; i < n; i ++) { + if (i % 4 == 0) { + printf(FMT_WORD ": ", addr); + } + + printf("0x%08x ", (uint32_t)vaddr_read_safe(addr, 4)); + addr += 4; + if (i % 4 == 3) { + printf("\n"); + } + } + printf("\n"); + } + else { printf("Bad expression\n"); } + } + return 0; +} + +#ifdef CONFIG_MODE_SYSTEM +static int cmd_detach(char *args) { + difftest_detach(); + return 0; +} + +static int cmd_attach(char *args) { + difftest_attach(); + return 0; +} + +static int cmd_save(char *args) { + /* extract the first argument */ + char *arg = strtok(NULL, " "); + + if (arg == NULL) { + /* no argument given */ + Log("no path"); + } + else { + FILE *fp = fopen(arg, "w"); + assert(fp != NULL); + fwrite(&cpu, sizeof(cpu), 1, fp); + fwrite(guest_to_host(CONFIG_MBASE), CONFIG_MSIZE, 1, fp); + fclose(fp); + } + return 0; +} + +static int cmd_load(char *args) { + /* extract the first argument */ + char *arg = strtok(NULL, " "); + + if (arg == NULL) { + /* no argument given */ + Log("no path"); + } + else { + FILE *fp = fopen(arg, "r"); + assert(fp != NULL); + __attribute__((unused)) int ret; + ret = fread(&cpu, sizeof(cpu), 1, fp); + ret = fread(guest_to_host(CONFIG_MBASE), CONFIG_MSIZE, 1, fp); + fclose(fp); + } + return 0; +} +#else +#endif + +#endif + +static int cmd_q(char *args) { + return -1; +} + +static int cmd_help(char *args); + +static struct { + const char *name; + const char *description; + int (*handler) (char *); +} cmd_table [] = { + { "help", "Display informations about all supported commands", cmd_help }, + { "c", "Continue the execution of the program", cmd_c }, +#ifndef __ICS_EXPORT + { "si", "step", cmd_si }, + { "info", "info r - print register values; info w - show watch point state", cmd_info }, + { "x", "Examine memory", cmd_x }, + { "p", "Evaluate the value of expression", cmd_p }, + { "w", "Set watchpoint", cmd_w }, + { "d", "Delete watchpoint", cmd_d }, +#ifdef CONFIG_MODE_SYSTEM + { "detach", "detach diff test", cmd_detach }, + { "attach", "attach diff test", cmd_attach }, + { "save", "save snapshot", cmd_save }, + { "load", "load snapshot", cmd_load }, +#endif +#endif + { "q", "Exit NEMU", cmd_q }, + + /* TODO: Add more commands */ + +}; + +#define NR_CMD ARRLEN(cmd_table) + +static int cmd_help(char *args) { + /* extract the first argument */ + char *arg = strtok(NULL, " "); + int i; + + if (arg == NULL) { + /* no argument given */ + for (i = 0; i < NR_CMD; i ++) { + printf("%s - %s\n", cmd_table[i].name, cmd_table[i].description); + } + } + else { + for (i = 0; i < NR_CMD; i ++) { + if (strcmp(arg, cmd_table[i].name) == 0) { + printf("%s - %s\n", cmd_table[i].name, cmd_table[i].description); + return 0; + } + } + printf("Unknown command '%s'\n", arg); + } + return 0; +} + +void ui_mainloop() { + if (is_batch_mode()) { + extern char *max_instr; + cmd_c(max_instr); + return; + } + + for (char *str; (str = rl_gets()) != NULL; ) { + char *str_end = str + strlen(str); + + /* extract the first token as the command */ + char *cmd = strtok(str, " "); + if (cmd == NULL) { continue; } + + /* treat the remaining string as the arguments, + * which may need further parsing + */ + char *args = cmd + strlen(cmd) + 1; + if (args >= str_end) { + args = NULL; + } + +#ifdef CONFIG_DEVICE + extern void sdl_clear_event_queue(); + sdl_clear_event_queue(); +#endif + + int i; + for (i = 0; i < NR_CMD; i ++) { + if (strcmp(cmd, cmd_table[i].name) == 0) { + if (cmd_table[i].handler(args) < 0) { return; } + break; + } + } + + if (i == NR_CMD) { printf("Unknown command '%s'\n", cmd); } + } +} +#endif diff --git a/libraries/NEMU/src/monitor/watchpoint.c b/libraries/NEMU/src/monitor/watchpoint.c new file mode 100644 index 0000000..66ac5ef --- /dev/null +++ b/libraries/NEMU/src/monitor/watchpoint.c @@ -0,0 +1,108 @@ +#include +#ifndef __ICS_EXPORT +#include +#endif + +#define NR_WP 32 + +typedef struct watchpoint { + int NO; + struct watchpoint *next; + + /* TODO: Add more members if necessary */ + +#ifndef __ICS_EXPORT + char *expr; + word_t old_val; +#endif +} WP; + +static WP wp_pool[NR_WP] = {}; +static WP *head = NULL, *free_ = NULL; + +void init_wp_pool() { + int i; + for (i = 0; i < NR_WP; i ++) { + wp_pool[i].NO = i; + wp_pool[i].next = &wp_pool[i + 1]; + } + wp_pool[NR_WP - 1].next = NULL; + + head = NULL; + free_ = wp_pool; +} + +/* TODO: Implement the functionality of watchpoint */ + +#ifndef __ICS_EXPORT +static WP* new_WP() { + assert(free_ != NULL); + WP *p = free_; + free_ = free_->next; + return p; +} + +static void free_WP(WP *p) { + assert(p >= wp_pool && p < wp_pool + NR_WP); + free(p->expr); + p->next = free_; + free_ = p; +} + +int set_watchpoint(char *e) { + bool success; + word_t val = expr(e, &success); + if (!success) return -1; + + WP *p = new_WP(); + p->expr = strdup(e); + p->old_val = val; + + p->next = head; + head = p; + + return p->NO; +} + +bool delete_watchpoint(int NO) { + WP *p, *prev = NULL; + for (p = head; p != NULL; prev = p, p = p->next) { + if (p->NO == NO) { break; } + } + + if (p == NULL) { return false; } + if (prev == NULL) { head = p->next; } + else { prev->next = p->next; } + + free_WP(p); + return true; +} + +void list_watchpoint() { + if (head == NULL) { + printf("No watchpoints\n"); + return; + } + + printf("%8s\t%8s\t%8s\n", "NO", "Address", "Enable"); + WP *p; + for (p = head; p != NULL; p = p->next) { + printf("%8d\t%s\t" FMT_WORD "\n", p->NO, p->expr, p->old_val); + } +} + +void scan_watchpoint(vaddr_t pc) { + WP *p; + for (p = head; p != NULL; p = p->next) { + bool success; + word_t new_val = expr(p->expr, &success); + if (p->old_val != new_val) { + printf("\n\nHint watchpoint %d at address " FMT_WORD ", expr = %s\n", p->NO, pc, p->expr); + printf("old value = " FMT_WORD "\nnew value = " FMT_WORD "\n", p->old_val, new_val); + p->old_val = new_val; + nemu_state.state = NEMU_STOP; + return; + } + } +} +#endif diff --git a/libraries/NEMU/src/nemu-main.c b/libraries/NEMU/src/nemu-main.c new file mode 100644 index 0000000..ae94550 --- /dev/null +++ b/libraries/NEMU/src/nemu-main.c @@ -0,0 +1,16 @@ +#include +#ifndef CONFIG_SHARE +void init_monitor(int, char *[]); +void engine_start(); +int is_exit_status_bad(); + +int main(int argc, char *argv[]) { + /* Initialize the monitor. */ + init_monitor(argc, argv); + + /* Start engine. */ + engine_start(); + + return is_exit_status_bad(); +} +#endif \ No newline at end of file diff --git a/libraries/NEMU/src/user/init/riscv64.c b/libraries/NEMU/src/user/init/riscv64.c new file mode 100644 index 0000000..b1236f5 --- /dev/null +++ b/libraries/NEMU/src/user/init/riscv64.c @@ -0,0 +1,12 @@ +#include + +#ifdef CONFIG_ISA_riscv64 +void init_csr(); + +void isa_init_user(word_t sp) { + init_csr(); + cpu.mode = MODE_U; + cpu.gpr[2]._64 = sp; + //cpu.edx = 0; // no handler for atexit() +} +#endif diff --git a/libraries/NEMU/src/user/init/x86.c b/libraries/NEMU/src/user/init/x86.c new file mode 100644 index 0000000..595a141 --- /dev/null +++ b/libraries/NEMU/src/user/init/x86.c @@ -0,0 +1,15 @@ +#include + +#ifdef CONFIG_ISA_x86 +// we only maintain base of the segment here +uint32_t GDT[4] = {0}; + +void isa_init_user(word_t sp) { + cpu.esp = sp; + cpu.edx = 0; // no handler for atexit() + cpu.sreg[CSR_CS].val = 0xb; cpu.sreg[CSR_CS].base = 0; + cpu.sreg[CSR_DS].val = 0xb; cpu.sreg[CSR_DS].base = 0; + cpu.sreg[CSR_ES].val = 0xb; cpu.sreg[CSR_ES].base = 0; + cpu.sreg[CSR_FS].val = 0xb; cpu.sreg[CSR_FS].base = 0; +} +#endif diff --git a/libraries/NEMU/src/user/loader.c b/libraries/NEMU/src/user/loader.c new file mode 100644 index 0000000..4f25e2c --- /dev/null +++ b/libraries/NEMU/src/user/loader.c @@ -0,0 +1,157 @@ +#include +#include +#include +#include +#include +#include "user.h" + +# define Elf_Ehdr MUXDEF(CONFIG_ISA64, Elf64_Ehdr, Elf32_Ehdr) +# define Elf_Phdr MUXDEF(CONFIG_ISA64, Elf64_Phdr, Elf32_Phdr) + +#if defined(CONFIG_ISA_x86) +# define ELF_TYPE EM_386 +#elif defined(CONFIG_ISA_mips32) +# define ELF_TYPE EM_MIPS +#elif defined(CONFIG_ISA_riscv32) || defined(CONFIG_ISA_riscv64) +# define ELF_TYPE EM_RISCV +#else +# error Unsupported ISA +#endif + +void isa_init_user(word_t sp); + +user_state_t user_state = {}; + +static void load_elf(char *elfpath) { + Assert(elfpath != NULL, "User program is not given"); + FILE *fp = fopen(elfpath, "rb"); + Assert(fp, "Can not open '%s'", elfpath); + + Elf_Ehdr *elf; + Elf_Phdr *ph, *eph; + + uint8_t buf[512]; + int ret = fread(buf, 512, 1, fp); + assert(ret == 1); + elf = (Elf_Ehdr *)buf; + assert(buf[0] == 0x7f && buf[1] == 'E' && buf[2] == 'L' && buf[3] == 'F'); + assert(elf->e_machine == ELF_TYPE); + + /* Load each program segment */ + ph = (Elf_Phdr *)((uint8_t *)elf + elf->e_phoff); + eph = ph + elf->e_phnum; + vaddr_t brk = 0; + for (; ph < eph; ph ++) { + if (ph->p_type == PT_LOAD) { + uint32_t pad_byte = ph->p_vaddr % PAGE_SIZE; + ph->p_vaddr -= pad_byte; + ph->p_offset -= pad_byte; + ph->p_filesz += pad_byte; + ph->p_memsz += pad_byte; + + uint8_t *haddr = user_to_host(ph->p_vaddr); + if (ph->p_filesz != 0) { + user_mmap(haddr, ph->p_filesz, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fileno(fp), ph->p_offset); + } + if (ph->p_flags & PF_W) { + // bss + memset(haddr + ph->p_filesz, 0, PAGE_SIZE - ph->p_filesz % PAGE_SIZE); + void *bss_page = haddr + ROUNDUP(ph->p_filesz, PAGE_SIZE); + sword_t memsz = ph->p_memsz - ROUNDUP(ph->p_filesz, PAGE_SIZE); + if (memsz > 0) { + user_mmap(bss_page, memsz, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS, -1, 0); + } + } + + if (ph->p_vaddr + ph->p_memsz > brk) brk = ph->p_vaddr + ph->p_memsz; + if (ph->p_offset == 0) { user_state.phdr = ph->p_vaddr + elf->e_phoff; } + } + } + fclose(fp); + user_state.brk = brk; + user_state.brk_page = ROUNDUP(brk, PAGE_SIZE); + user_state.program_brk = brk; + user_state.entry = elf->e_entry; + user_state.phent = elf->e_phentsize; + user_state.phnum = elf->e_phnum; + cpu.pc = elf->e_entry; +} + +static inline word_t init_stack(int argc, char *argv[]) { + uint8_t *sp = user_to_host(0xc0000000); + uint32_t stack_size = 8 * 1024 * 1024; + user_mmap(sp - stack_size, stack_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS, -1, 0); + + word_t strs[128] = {}; + int i = 0; + char *envp[] = { NULL }; +#define push(data) { sp -= sizeof(word_t); *(word_t *)sp = (data); } +#define push_auxv(type, data) { push(data); push(type); } +#define push_mem(src, size) { \ + sp -= (size); \ + memcpy(sp, (src), (size)); \ +} +#define push_str(s) push_mem(s, strlen(s) + 1) +#define push_str_array(arr) { \ + char **p = arr; \ + for (; *p != NULL; p ++) { \ + push_str(*p); \ + assert(i < ARRLEN(strs)); \ + strs[i ++] = host_to_user(sp); \ + } \ + strs[i ++] = 0; \ +} + + push_str_array(argv); + push_str_array(envp); + + // aligning + sp = (uint8_t *)ROUNDDOWN(sp, sizeof(word_t)); + + // AT_RANDOM + push(0xdeadbeef); push(0xdeadbeef); push(0xdeadbeef); push(0xdeadbeef); + word_t random_ptr = host_to_user(sp); + + push_auxv(AT_NULL, 0); + //push_auxv(AT_HWCAP, 0xbfebfbff); + push_auxv(AT_PAGESZ, 0x1000); + push_auxv(AT_CLKTCK, getauxval(AT_CLKTCK)); + push_auxv(AT_PHDR, user_state.phdr); + push_auxv(AT_PHENT, user_state.phent); + push_auxv(AT_PHNUM, user_state.phnum); + push_auxv(AT_BASE, 0); + push_auxv(AT_FLAGS, 0); + push_auxv(AT_ENTRY, user_state.entry); + push_auxv(AT_UID, getauxval(AT_UID)); + push_auxv(AT_EUID, getauxval(AT_EUID)); + push_auxv(AT_GID, getauxval(AT_GID)); + push_auxv(AT_EGID, getauxval(AT_EGID)); + push_auxv(AT_SECURE, getauxval(AT_SECURE)); + push_auxv(AT_RANDOM, random_ptr); + //push_auxv(AT_HWCAP2, 0); + + push_mem(strs, sizeof(strs[0]) * i); + push(argc); + + return host_to_user(sp); +} + +static void redirction_std() { + user_state.std_fd[0] = dup(0); + user_state.std_fd[1] = dup(1); + user_state.std_fd[2] = dup(2); + FILE *fp; + fp = freopen("/dev/tty", "r", stdin); assert(fp); + fp = freopen("/dev/tty", "w", stdout); assert(fp); + fp = freopen("/dev/tty", "w", stdout); assert(fp); +} + +void init_user(char *elfpath, int argc, char *argv[]) { + redirction_std(); + load_elf(elfpath); + word_t sp = init_stack(argc, argv); + isa_init_user(sp); +} diff --git a/libraries/NEMU/src/user/memory.c b/libraries/NEMU/src/user/memory.c new file mode 100644 index 0000000..dfef1fa --- /dev/null +++ b/libraries/NEMU/src/user/memory.c @@ -0,0 +1,169 @@ +#include "user.h" +#include +#include +#include + +#define ROUNDUP(a, sz) ((((uintptr_t)a) + (sz) - 1) & ~((sz) - 1)) +#define ROUNDDOWN(a, sz) ((((uintptr_t)a)) & ~((sz) - 1)) + +word_t vaddr_read(struct Decode *s, vaddr_t addr, int len, int mmu_mode) { + return host_read(user_to_host(addr), len); +} + +void vaddr_write(struct Decode *s, vaddr_t addr, int len, word_t data, int mmu_mode) { + host_write(user_to_host(addr), len, data); +} + +word_t vaddr_ifetch(vaddr_t addr, int len) { + return vaddr_read(NULL, addr, len, MMU_DYNAMIC); +} + +word_t vaddr_read_safe(vaddr_t addr, int len) { + return vaddr_read(NULL, addr, len, MMU_DYNAMIC); +} + + +typedef struct vma_t { + uintptr_t addr; + size_t length; + int prot; + int flags; + int fd; + off_t offset; + struct vma_t *next; + struct vma_t *prev; +} vma_t; + +static vma_t vma_list = { }; +static vma_t *dyn_start; + +#define vma_foreach(p) for (p = vma_list.next; !vma_list_is_end(p); p = p->next) + +static inline void vma_list_add_after(vma_t *left, vma_t *_new) { + vma_t *right = left->next; + _new->next = right; + _new->prev = left; + left->next = _new; + right->prev = _new; +} + +static inline bool vma_list_is_end(vma_t *p) { + return (p == &vma_list); +} + +static inline vma_t* vma_list_find_fix_area(uintptr_t addr, size_t length) { + vma_t *p; + vma_foreach(p) { + if (p->addr == addr && p->length == length) return p; + } + return NULL; +} + +static inline vma_t* vma_list_new_fix_area(uintptr_t addr, size_t length) { + vma_t *candidate = NULL; + vma_t *p; + vma_foreach(p) { + uintptr_t l = p->addr; + uintptr_t r = p->addr + p->length; + if (!((addr + length <= l) || (addr >= r))) { + // overlap + return NULL; + } + vma_t *right = p->next; + if (p->addr < addr && addr < right->addr) { candidate = p; } + } + assert(candidate != NULL); + return candidate; +} + +// return the vma_t whose right is suitable +static inline vma_t* vma_list_new_dyn_area(size_t length) { + vma_t *p = dyn_start; + for (; !vma_list_is_end(p); p = p->next) { + vma_t *right = p->next; + size_t free = (uint8_t *)right->addr - ((uint8_t *)p->addr + p->length); + if (free >= length) return p; + } + assert(0); + return NULL; +} + +static inline vma_t* vma_new(uintptr_t addr, size_t length, int prot, + int flags, int fd, off_t offset) { + vma_t *vma = (vma_t *) malloc(sizeof(vma_t)); + assert(vma); + *vma = (vma_t) { .addr = addr, .length = length, .prot = prot, + .flags = flags, .fd = fd, .offset = offset }; + return vma; +} + +void init_mem() { + vma_t *p = &vma_list; + p->next = p->prev = p; + + vma_t *zero = vma_new(0ul, 0ul, 0, 0, -1, 0); + vma_list_add_after(p, zero); + + dyn_start = vma_new(0x80000000ul, 0ul, 0, 0, -1, 0); + vma_list_add_after(zero, dyn_start); + + vma_t *kernel = vma_new(0xc0000000ul, 0x40000000ul, 0, 0, -1, 0); + vma_list_add_after(dyn_start, kernel); +} + +void *user_mmap(void *addr, size_t length, int prot, + int flags, int fd, off_t offset) { + vma_t *left = NULL; + length = ROUNDUP(length, 4096); + if (flags & MAP_FIXED) { + left = vma_list_new_fix_area((uintptr_t)addr, length); + assert(left != NULL); + } else { + left = vma_list_new_dyn_area(length); + addr = (uint8_t *)left->addr + left->length; + flags |= MAP_FIXED; + } + vma_t *vma = vma_new((uintptr_t)addr, length, prot, flags, fd, offset); + vma_list_add_after(left, vma); + + void *ret = mmap(addr, length, prot, flags, fd, offset); + if (flags & MAP_FIXED) { assert(ret == addr); } + return ret; +} + +int user_munmap(void *addr, size_t length) { + vma_t *p = vma_list_find_fix_area((uintptr_t)addr, length); + assert(p != NULL); + vma_t *prev = p->prev; + vma_t *next = p->next; + prev->next = next; + next->prev = prev; + + int ret = munmap(addr, length); + assert(ret == 0); + free(p); + return ret; +} + +void *user_mremap(void *old_addr, size_t old_size, size_t new_size, + int flags, void *new_addr) { + vma_t *p = vma_list_find_fix_area((uintptr_t)old_addr, old_size); + assert(p != NULL); + assert(!(flags & MREMAP_FIXED)); + vma_t *next = p->next; + size_t free_size_to_expand = next->addr - p->addr; + new_size = ROUNDUP(new_size, 4096); + if (free_size_to_expand >= new_size) { + p->length = new_size; + void *ret = mremap(old_addr, old_size, new_size, 0); // dont move + if (ret != old_addr) perror("mremap"); + assert(ret == old_addr); + return old_addr; + } else { + // should move + new_addr = user_mmap(NULL, new_size, p->prot, p->flags & ~MAP_FIXED, -1, 0); + memcpy(new_addr, old_addr, old_size); + user_munmap(old_addr, p->length); + return new_addr; + } +} diff --git a/libraries/NEMU/src/user/syscall-riscv64.h b/libraries/NEMU/src/user/syscall-riscv64.h new file mode 100644 index 0000000..cd99f22 --- /dev/null +++ b/libraries/NEMU/src/user/syscall-riscv64.h @@ -0,0 +1,77 @@ +#define USER_SYS_getcwd 17 +#define USER_SYS_fcntl 25 +#define USER_SYS_ioctl 29 +#define USER_SYS_unlinkat 35 +#define USER_SYS_ftruncate 46 +#define USER_SYS_faccessat 48 +#define USER_SYS_openat 56 +#define USER_SYS_close 57 +#define USER_SYS_lseek 62 +#define USER_SYS_read 63 +#define USER_SYS_write 64 +#define USER_SYS_writev 66 +#define USER_SYS_readlinkat 78 +#define USER_SYS_fstatat 79 +#define USER_SYS_fstat 80 +#define USER_SYS_exit 93 +#define USER_SYS_exit_group 94 +#define USER_SYS_clock_gettime 113 +#define USER_SYS_rt_sigaction 134 +#define USER_SYS_times 153 +#define USER_SYS_uname 160 +#define USER_SYS_getrusage 165 +#define USER_SYS_gettimeofday 169 +#define USER_SYS_getpid 172 +#define USER_SYS_getuid 174 +#define USER_SYS_geteuid 175 +#define USER_SYS_getgid 176 +#define USER_SYS_getegid 177 +#define USER_SYS_sysinfo 179 +#define USER_SYS_brk 214 +#define USER_SYS_munmap 215 +#define USER_SYS_mremap 216 +#define USER_SYS_mmap 222 +#define USER_SYS_mprotect 226 +#define USER_SYS_prlimit64 261 + +struct user_stat { + uint64_t st_dev; + uint64_t st_ino; + uint32_t st_mode; + uint32_t st_nlink; + uint32_t st_uid; + uint32_t st_gid; + uint64_t st_rdev; + uint64_t pad1; + uint64_t st_size; + uint32_t st_blksize; + uint32_t pad2; + uint64_t st_blocks; /* Number 512-byte blocks allocated. */ + uint64_t target_st_atime; + uint64_t target_st_atime_nsec; + uint64_t target_st_mtime; + uint64_t target_st_mtime_nsec; + uint64_t target_st_ctime; + uint64_t target_st_ctime_nsec; + uint32_t unused3; + uint32_t unused4; +} __attribute__((packed)); + +static inline void translate_stat(struct stat *hostbuf, struct user_stat *userbuf) { + userbuf->st_dev = hostbuf->st_dev; + userbuf->st_ino = hostbuf->st_ino; + userbuf->st_mode = hostbuf->st_mode; + userbuf->st_nlink = hostbuf->st_nlink; + userbuf->st_uid = hostbuf->st_uid; + userbuf->st_gid = hostbuf->st_gid; + userbuf->st_rdev = hostbuf->st_rdev; + userbuf->st_size = hostbuf->st_size; + userbuf->st_blksize = hostbuf->st_blksize; + userbuf->st_blocks = hostbuf->st_blocks; + userbuf->target_st_atime = hostbuf->st_atime; + userbuf->target_st_atime_nsec = hostbuf->st_atim.tv_nsec; + userbuf->target_st_mtime = hostbuf->st_mtime; + userbuf->target_st_mtime_nsec = hostbuf->st_mtim.tv_nsec; + userbuf->target_st_ctime = hostbuf->st_ctime; + userbuf->target_st_ctime_nsec = hostbuf->st_ctim.tv_nsec; +} diff --git a/libraries/NEMU/src/user/syscall-x86.h b/libraries/NEMU/src/user/syscall-x86.h new file mode 100644 index 0000000..076b755 --- /dev/null +++ b/libraries/NEMU/src/user/syscall-x86.h @@ -0,0 +1,220 @@ +#define USER_SYS_exit_group 252 +#define USER_SYS_exit 1 +#define USER_SYS_read 3 +#define USER_SYS_write 4 +#define USER_SYS_close 6 +#define USER_SYS_unlink 10 +#define USER_SYS_time 13 +#define USER_SYS_getpid 20 +#define USER_SYS_access 33 +#define USER_SYS_times 43 +#define USER_SYS_brk 45 +#define USER_SYS_ioctl 54 +#define USER_SYS_getrusage 77 +#define USER_SYS_gettimeofday 78 +#define USER_SYS_readlink 85 +#define USER_SYS_munmap 91 +#define USER_SYS_sysinfo 116 +#define USER_SYS_uname 122 +#define USER_SYS_llseek 140 +#define USER_SYS_writev 146 +#define USER_SYS_mremap 163 +#define USER_SYS_sigaction 174 +#define USER_SYS_getcwd 183 +#define USER_SYS_getrlimit 191 +#define USER_SYS_mmap2 192 +#define USER_SYS_ftruncate64 194 +#define USER_SYS_stat64 195 +#define USER_SYS_lstat64 196 +#define USER_SYS_fstat64 197 +#define USER_SYS_getuid 199 +#define USER_SYS_getgid 200 +#define USER_SYS_geteuid 201 +#define USER_SYS_getegid 202 +#define USER_SYS_fcntl 221 +#define USER_SYS_set_thread_area 243 +#define USER_SYS_clock_gettime 265 +#define USER_SYS_openat 295 +#define USER_SYS_prlimit64 340 + + +struct user_stat64 { + uint64_t st_dev; + unsigned char __pad0[4]; + uint32_t __st_ino; + unsigned int st_mode; + unsigned int st_nlink; + uint32_t st_uid; + uint32_t st_gid; + uint64_t st_rdev; + unsigned char __pad3[4]; + long long st_size; + uint32_t st_blksize; + uint64_t st_blocks; /* Number 512-byte blocks allocated. */ + uint32_t target_st_atime; + uint32_t target_st_atime_nsec; + uint32_t target_st_mtime; + uint32_t target_st_mtime_nsec; + uint32_t target_st_ctime; + uint32_t target_st_ctime_nsec; + unsigned long long st_ino; +} __attribute__((packed)); + +static inline void translate_stat64(struct stat *hostbuf, struct user_stat64 *userbuf) { + userbuf->st_dev = hostbuf->st_dev; + userbuf->__st_ino = hostbuf->st_ino; + userbuf->st_mode = hostbuf->st_mode; + userbuf->st_nlink = hostbuf->st_nlink; + userbuf->st_uid = hostbuf->st_uid; + userbuf->st_gid = hostbuf->st_gid; + userbuf->st_rdev = hostbuf->st_rdev; + userbuf->st_size = hostbuf->st_size; + userbuf->st_blksize = hostbuf->st_blksize; + userbuf->st_blocks = hostbuf->st_blocks; + userbuf->target_st_atime = hostbuf->st_atime; + userbuf->target_st_atime_nsec = hostbuf->st_atim.tv_nsec; + userbuf->target_st_mtime = hostbuf->st_mtime; + userbuf->target_st_mtime_nsec = hostbuf->st_mtim.tv_nsec; + userbuf->target_st_ctime = hostbuf->st_ctime; + userbuf->target_st_ctime_nsec = hostbuf->st_ctim.tv_nsec; + userbuf->st_ino = hostbuf->st_ino; +} + +struct user_desc { + uint32_t entry_number; + vaddr_t base_addr; + uint32_t limit; + uint32_t seg_32bit:1; + uint32_t contents:2; + uint32_t read_exec_only:1; + uint32_t limit_in_pages:1; + uint32_t seg_not_present:1; + uint32_t useable:1; +}; + +struct user_sysinfo { + sword_t uptime; + word_t loads[3]; + word_t totalram; + word_t freeram; + word_t sharedram; + word_t bufferram; + word_t totalswap; + word_t freeswap; + uint16_t procs; + uint16_t pad; + word_t totalhigh; + word_t freehigh; + uint32_t mem_unit; + char _f[20-2*sizeof(long)-sizeof(int)]; +}; + +static inline void translate_sysinfo(struct sysinfo *host_info, struct user_sysinfo *user_info) { + user_info->uptime = host_info->uptime; + user_info->loads[0] = host_info->loads[0]; + user_info->loads[1] = host_info->loads[1]; + user_info->loads[2] = host_info->loads[2]; + user_info->totalram = host_info->totalram; + user_info->freeram = host_info->freeram; + user_info->sharedram = host_info->sharedram; + user_info->bufferram = host_info->bufferram; + user_info->totalswap = host_info->totalswap; + user_info->freeswap = host_info->freeswap; + user_info->procs = host_info->procs; + user_info->pad = host_info->pad; + user_info->totalhigh = host_info->totalhigh; + user_info->freehigh = host_info->freehigh; + user_info->mem_unit = host_info->mem_unit; +} + +struct user_timespec { + sword_t tv_sec; + sword_t tv_nsec; +}; + +static inline void translate_timespec(struct timespec *host_tp, struct user_timespec *user_tp) { + user_tp->tv_sec = host_tp->tv_sec; + user_tp->tv_nsec = host_tp->tv_nsec; +} + +struct user_timeval { + sword_t tv_sec; + sword_t tv_usec; +}; + +static inline void translate_timeval(struct timeval *host_tv, struct user_timeval *user_tv) { + user_tv->tv_sec = host_tv->tv_sec; + user_tv->tv_usec = host_tv->tv_usec; +} + +struct user_tms{ + sword_t tms_utime; + sword_t tms_stime; + sword_t tms_cutime; + sword_t tms_cstime; +}; + +static inline void translate_tms(struct tms *host_tms, struct user_tms *user_tms) { + user_tms->tms_utime = host_tms->tms_utime; + user_tms->tms_stime = host_tms->tms_stime; + user_tms->tms_cutime = host_tms->tms_cutime; + user_tms->tms_cstime = host_tms->tms_cstime; +} + +struct user_iovec { + word_t iov_base; + word_t iov_len; +}; + +static inline void translate_iovec(struct iovec *host_iov, struct user_iovec *user_iov) { + host_iov->iov_base = user_to_host(user_iov->iov_base); + host_iov->iov_len = user_iov->iov_len; +} + +struct user_rusage { + struct user_timeval ru_utime; + struct user_timeval ru_stime; + sword_t ru_maxrss; + sword_t ru_ixrss; + sword_t ru_idrss; + sword_t ru_isrss; + sword_t ru_minflt; + sword_t ru_majflt; + sword_t ru_nswap; + sword_t ru_inblock; + sword_t ru_oublock; + sword_t ru_msgsnd; + sword_t ru_msgrcv; + sword_t ru_nsignals; + sword_t ru_nvcsw; + sword_t ru_nivcsw; +}; + +static inline void translate_rusage(struct rusage *host_usage, struct user_rusage *user_usage) { + translate_timeval(&host_usage->ru_utime, &user_usage->ru_utime); + translate_timeval(&host_usage->ru_stime, &user_usage->ru_stime); + user_usage->ru_maxrss = host_usage->ru_maxrss; + user_usage->ru_ixrss = host_usage->ru_ixrss; + user_usage->ru_idrss = host_usage->ru_idrss; + user_usage->ru_isrss = host_usage->ru_isrss; + user_usage->ru_minflt = host_usage->ru_minflt; + user_usage->ru_majflt = host_usage->ru_majflt; + user_usage->ru_nswap = host_usage->ru_nswap; + user_usage->ru_inblock = host_usage->ru_inblock; + user_usage->ru_oublock = host_usage->ru_oublock; + user_usage->ru_msgsnd = host_usage->ru_msgsnd; + user_usage->ru_msgrcv = host_usage->ru_msgrcv; + user_usage->ru_nsignals = host_usage->ru_nsignals; + user_usage->ru_nvcsw = host_usage->ru_nvcsw; + user_usage->ru_nivcsw = host_usage->ru_nivcsw; +} + +struct user_rlimit { + word_t rlim_cur; + word_t rlim_max; +}; + +static inline void translate_rlimit(struct rlimit *host_rlim, struct user_rlimit *user_rlim) { + user_rlim->rlim_cur = host_rlim->rlim_cur; + user_rlim->rlim_max = host_rlim->rlim_max; +} diff --git a/libraries/NEMU/src/user/syscall.c b/libraries/NEMU/src/user/syscall.c new file mode 100644 index 0000000..bbca15e --- /dev/null +++ b/libraries/NEMU/src/user/syscall.c @@ -0,0 +1,304 @@ +#ifndef __cplusplus +#define _GNU_SOURCE +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "user.h" +#include MUXDEF(CONFIG_ISA_x86, "syscall-x86.h", \ + MUXDEF(CONFIG_ISA_mips32, "syscall-mips32.h", \ + MUXDEF(CONFIG_ISA_riscv32, "syscall-riscv32.h", \ + MUXDEF(CONFIG_ISA_riscv64, "syscall-riscv64.h", \ + )))) + + +static inline int user_fd(int fd) { + if (fd >= 0 && fd <= 2) return user_state.std_fd[fd]; + return fd; +} + +static inline sword_t get_syscall_ret(intptr_t ret) { + return (ret == -1) ? -errno : ret; +} + +#if 0 +static inline uint64_t gen_uint64(uint32_t lo, uint32_t hi) { + return ((uint64_t)hi << 32) | lo; +} +#endif + +static inline void user_sys_exit(int status) { + void set_nemu_state(int state, vaddr_t pc, int halt_ret); + set_nemu_state(NEMU_END, cpu.pc, status); + longjmp_exec(NEMU_EXEC_END); +} + +static inline word_t user_sys_brk(word_t new_brk) { + if (new_brk == 0) return user_state.brk; + if (new_brk >= user_state.brk_page) { + uint32_t size = ROUNDUP(new_brk - user_state.brk_page + 1, PAGE_SIZE); + user_mmap(user_to_host(user_state.brk_page), size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS, -1, 0); + user_state.brk_page += size; + } + user_state.brk = new_brk; + return new_brk; +} + +#ifdef CONFIG_ISA64 +static inline word_t user_sys_fstat(int fd, void *statbuf) { + struct stat buf; + int ret = get_syscall_ret(fstat(fd, &buf)); + if (ret == 0) translate_stat(&buf, (struct user_stat *) statbuf); + return ret; +} + +static inline word_t user_sys_fstatat(int dirfd, + const char *pathname, void *statbuf, int flags) { + struct stat buf; + int ret = get_syscall_ret(fstatat(dirfd, pathname, &buf, flags)); + if (ret == 0) translate_stat(&buf, (struct user_stat *) statbuf); + return ret; +} +#endif + +static inline word_t user_gettimeofday(void *tv, void *tz) { +#ifdef CONFIG_ISA64 + return gettimeofday((struct timeval *) tv, (__timezone_ptr_t) tz); +#else + struct timeval host_tv; + int ret = gettimeofday(&host_tv, tz); + assert(ret == 0); + if (tv != NULL) { translate_timeval(&host_tv, tv); } + return ret; +#endif +} + +static inline word_t user_clock_gettime(clockid_t id, void *tp) { +#ifdef CONFIG_ISA64 + return clock_gettime(id, (struct timespec *) tp); +#else + struct timespec host_tp; + int ret = clock_gettime(id, &host_tp); + assert(ret == 0); + translate_timespec(&host_tp, tp); + return ret; +#endif +} + +static inline word_t user_sysinfo(void *info) { +#ifdef CONFIG_ISA64 + return sysinfo((struct sysinfo *) info); +#else + struct sysinfo host_info; + int ret = sysinfo(&host_info); + assert(ret == 0); + translate_sysinfo(&host_info, info); + return ret; +#endif +} + +static inline word_t user_writev(int fd, void *iov, int iovcnt) { +#ifdef CONFIG_ISA64 + return writev(fd, (const struct iovec*) iov, iovcnt); +#else + struct user_iovec *user_iov = iov; + struct iovec *host_iov = malloc(sizeof(*host_iov) * iovcnt); + assert(host_iov != NULL); + int i; + for (i = 0; i < iovcnt; i ++) { + translate_iovec(&host_iov[i], &user_iov[i]); + } + ssize_t ret = writev(fd, host_iov, iovcnt); + free(host_iov); + return ret; +#endif +} + +static inline word_t user_times(void *buf) { +#ifdef CONFIG_ISA64 + return times((struct tms *) buf); +#else + struct tms host_buf; + clock_t ret = times(&host_buf); + assert(ret != (clock_t)-1); + translate_tms(&host_buf, buf); + return ret; +#endif +} + +static inline word_t user_getrusage(int who, void *usage) { +#ifdef CONFIG_ISA64 + return getrusage(who, (struct rusage *) usage); +#else + struct rusage host_usage; + int ret = getrusage(who, &host_usage); + assert(ret == 0); + translate_rusage(&host_usage, usage); + return ret; +#endif +} + +#if 0 +static inline word_t user_sys_stat64(const char *pathname, void *statbuf) { + struct stat buf; + int ret = get_syscall_ret(stat(pathname, &buf)); + if (ret == 0) translate_stat64(&buf, statbuf); + return ret; +} + +static inline word_t user_sys_lstat64(const char *pathname, void *statbuf) { + struct stat buf; + int ret = get_syscall_ret(lstat(pathname, &buf)); + if (ret == 0) translate_stat64(&buf, statbuf); + return ret; +} +#endif + +#ifndef CONFIG_ISA64 +static inline word_t user_sys_fstat64(int fd, void *statbuf) { + struct stat buf; + int ret = get_syscall_ret(fstat(fd, &buf)); + if (ret == 0) translate_stat64(&buf, statbuf); + return ret; +} +#endif + +#ifdef CONFIG_ISA_x86 +static inline word_t user_set_thread_area(void *u_info) { + struct user_desc *info = u_info; + assert(info->entry_number == -1); + assert(info->seg_32bit); + assert(!info->contents); + assert(!info->read_exec_only); + assert(info->limit_in_pages); + assert(!info->seg_not_present); + assert(info->useable); + extern uint32_t GDT[]; + static int flag = 0; + Assert(flag == 0, "call more than once!"); + flag ++; + GDT[2] = info->base_addr; + info->entry_number = 2; + return 0; +} +#endif + +#if 0 +static inline word_t user_sys_llseek(int fd, uint32_t offset_high, + uint32_t offset_low, uint64_t *result, uint32_t whence) { + off_t ret = lseek(fd, ((off_t)offset_high << 32) | offset_low, whence); + if (ret != (off_t)-1) { + *result = ret; + return 0; + } + return -1; +} + +static inline word_t user_ftruncate64(int fd, uint32_t lo, uint32_t hi) { + return ftruncate(fd, gen_uint64(lo, hi)); +} + +static inline word_t user_getrlimit(int resource, void *rlim) { + struct rlimit host_rlim; + int ret = getrlimit(resource, &host_rlim); + assert(ret == 0); + translate_rlimit(&host_rlim, rlim); + return ret; +} +#endif + +static inline word_t user_prlimit64(pid_t pid, int resource, + const void *new_limit, void *old_limit) { + return prlimit(pid, (enum __rlimit_resource) resource, + (const struct rlimit *) new_limit, (struct rlimit *) old_limit); +} + +uintptr_t host_syscall(uintptr_t id, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, + uintptr_t arg4, uintptr_t arg5, uintptr_t arg6) { + uintptr_t ret = 0; + switch (id) { +#if 0 + case 10: ret = unlink(user_to_host(arg1)); break; + case 13: ret = time(user_to_host(arg1)); break; + case 140: ret = user_sys_llseek(user_fd(arg1), arg2, arg3, user_to_host(arg4), arg5); break; + case 191: ret = user_getrlimit(arg1, user_to_host(arg2)); break; + case 194: ret = user_ftruncate64(user_fd(arg1), arg2, arg3); break; + case 195: return user_sys_stat64(user_to_host(arg1), user_to_host(arg2)); + case 196: return user_sys_lstat64(user_to_host(arg1), user_to_host(arg2)); +#endif + IFDEF(CONFIG_ISA_x86, case USER_SYS_set_thread_area: + ret = user_set_thread_area(user_to_host(arg1)); break); + case USER_SYS_exit_group: + case USER_SYS_exit: user_sys_exit(arg1); break; + case USER_SYS_brk: ret = user_sys_brk(arg1); break; + case USER_SYS_write: ret = write(user_fd(arg1), user_to_host(arg2), arg3); break; + case USER_SYS_uname: ret = uname((struct utsname *) user_to_host(arg1)); break; + case USER_SYS_gettimeofday: ret = user_gettimeofday(user_to_host(arg1), user_to_host(arg2)); break; + case USER_SYS_sysinfo: ret = user_sysinfo(user_to_host(arg1)); break; + case USER_SYS_clock_gettime: ret = user_clock_gettime(arg1, user_to_host(arg2)); break; + case USER_SYS_writev: ret = user_writev(user_fd(arg1), user_to_host(arg2), arg3); break; + case USER_SYS_times: ret = user_times(user_to_host(arg1)); break; + case USER_SYS_getrusage: ret = user_getrusage(arg1, user_to_host(arg2)); break; + case USER_SYS_prlimit64: ret = user_prlimit64(arg1, arg2, user_to_host(arg3), user_to_host(arg4)); break; + case USER_SYS_openat: ret = openat(user_fd(arg1), + (const char *) user_to_host(arg2), arg3, arg4); break; + case USER_SYS_read: ret = read(user_fd(arg1), user_to_host(arg2), arg3); break; + case USER_SYS_close: ret = close(user_fd(arg1)); break; + case USER_SYS_munmap: ret = user_munmap(user_to_host(arg1), arg2); break; +#ifdef CONFIG_ISA64 + case USER_SYS_readlinkat: ret = readlinkat(user_fd(arg1), + (const char*) user_to_host(arg2), (char*) user_to_host(arg3), arg4); break; + case USER_SYS_fstat: ret = user_sys_fstat(user_fd(arg1), user_to_host(arg2)); break; + case USER_SYS_fstatat: ret = user_sys_fstatat(user_fd(arg1), + (const char*) user_to_host(arg2), user_to_host(arg3), arg4); break; + case USER_SYS_mmap: ret = (uintptr_t)user_mmap(user_to_host(arg1), arg2, + arg3, arg4, user_fd(arg5), arg6); break; + case USER_SYS_rt_sigaction: return 0; // not implemented + case USER_SYS_mremap: ret = (uintptr_t)user_mremap(user_to_host(arg1), + arg2, arg3, arg4, user_to_host(arg5)); break; + case USER_SYS_lseek: ret = lseek(user_fd(arg1), arg2, arg3); break; + case USER_SYS_unlinkat: ret = unlinkat(user_fd(arg1), + (const char *) user_to_host(arg2), arg3); break; + case USER_SYS_getcwd: + ret = (uintptr_t)getcwd((char *)user_to_host(arg1), arg2); + assert(ret != 0); // should success + ret = strlen((const char *) user_to_host(arg1)) + 1; + break; + case USER_SYS_getuid: return getuid(); + case USER_SYS_getgid: return getgid(); + case USER_SYS_geteuid: return geteuid(); + case USER_SYS_getegid: return getegid(); + case USER_SYS_ioctl: ret = ioctl(user_fd(arg1), arg2, arg3); break; + case USER_SYS_fcntl: ret = fcntl(user_fd(arg1), arg2, arg3); break; + case USER_SYS_getpid: return getpid(); + case USER_SYS_mprotect: return 0; // not implemented + case USER_SYS_ftruncate: ret = ftruncate(user_fd(arg1), arg2); break; + case USER_SYS_faccessat: ret = faccessat(user_fd(arg1), + (const char *)user_to_host(arg2), arg3, 0); break; +#else + case USER_SYS_readlink: ret = readlink(user_to_host(arg1), user_to_host(arg2), arg3); break; + case USER_SYS_access: ret = access(user_to_host(arg1), arg2); break; + case USER_SYS_fstat64: return user_sys_fstat64(user_fd(arg1), user_to_host(arg2)); + case USER_SYS_mmap2: ret = (uintptr_t)user_mmap(user_to_host(arg1), arg2, + arg3, arg4, user_fd(arg5), arg6 << 12); break; +#endif + default: panic("Unsupported syscall ID = %ld", id); + } + ret = get_syscall_ret(ret); + return ret; +} diff --git a/libraries/NEMU/src/user/user.h b/libraries/NEMU/src/user/user.h new file mode 100644 index 0000000..789e9f8 --- /dev/null +++ b/libraries/NEMU/src/user/user.h @@ -0,0 +1,38 @@ +#ifndef __USER_H__ +#define __USER_H__ + +#ifndef __cplusplus +#define _GNU_SOURCE +#endif + +#include +#include + +typedef struct { + word_t entry; + word_t brk; + word_t brk_page; + word_t program_brk; + word_t phdr; + int phent; + int phnum; + int std_fd[3]; +} user_state_t; + +extern user_state_t user_state; + +void *user_mmap(void *addr, size_t length, int prot, + int flags, int fd, off_t offset); +int user_munmap(void *addr, size_t length); +void *user_mremap(void *old_addr, size_t old_size, size_t new_size, + int flags, void *new_addr); + +static inline uint8_t* user_to_host(word_t uaddr) { + return (uint8_t *)(uintptr_t)uaddr; +} + +static inline word_t host_to_user(void *haddr) { + return (word_t)(uintptr_t)haddr; +} + +#endif diff --git a/libraries/NEMU/src/utils/expr.c b/libraries/NEMU/src/utils/expr.c new file mode 100644 index 0000000..7ad4d99 --- /dev/null +++ b/libraries/NEMU/src/utils/expr.c @@ -0,0 +1,299 @@ +#include +#ifndef __ICS_EXPORT +#include +#include +#endif + +/* We use the POSIX regex functions to process regular expressions. + * Type 'man regex' for more information about POSIX regex functions. + */ +#include + +enum { + TK_NOTYPE = 256, TK_EQ, + + /* TODO: Add more token types */ + +#ifndef __ICS_EXPORT + TK_NEQ, TK_OR, TK_AND, TK_NUM, TK_REG, TK_REF, TK_NEG +#endif +}; + +static struct rule { + const char *regex; + int token_type; +} rules[] = { + + /* TODO: Add more rules. + * Pay attention to the precedence level of different rules. + */ + + {" +", TK_NOTYPE}, // spaces + {"\\+", '+'}, // plus + {"==", TK_EQ}, // equal +#ifndef __ICS_EXPORT + {"0x[0-9a-fA-F]{1,16}", TK_NUM}, // hex + {"[0-9]{1,10}", TK_NUM}, // dec + {"\\$[a-z0-9]{1,31}", TK_REG}, // register names + {"\\+", '+'}, + {"-", '-'}, + {"\\*", '*'}, + {"/", '/'}, + {"%", '%'}, + {"==", TK_EQ}, + {"!=", TK_NEQ}, + {"&&", TK_AND}, + {"\\|\\|", TK_OR}, + {"!", '!'}, + {"\\(", '('}, + {"\\)", ')'} +#endif +}; + +#define NR_REGEX ARRLEN(rules) + +static regex_t re[NR_REGEX] = {}; + +/* Rules are used for many times. + * Therefore we compile them only once before any usage. + */ +void init_regex() { + int i; + char error_msg[128]; + int ret; + + for (i = 0; i < NR_REGEX; i ++) { + ret = regcomp(&re[i], rules[i].regex, REG_EXTENDED); + if (ret != 0) { + regerror(ret, &re[i], error_msg, 128); + panic("regex compilation failed: %s\n%s", error_msg, rules[i].regex); + } + } +} + +typedef struct token { + int type; + char str[32]; +} Token; + +static Token tokens[32] __attribute__((used)) = {}; +static int nr_token __attribute__((used)) = 0; + +static bool make_token(char *e) { + int position = 0; + int i; + regmatch_t pmatch; + + nr_token = 0; + + while (e[position] != '\0') { + /* Try all rules one by one. */ + for (i = 0; i < NR_REGEX; i ++) { + if (regexec(&re[i], e + position, 1, &pmatch, 0) == 0 && pmatch.rm_so == 0) { + char *substr_start = e + position; + int substr_len = pmatch.rm_eo; + +#ifdef __ICS_EXPORT + Log("match rules[%d] = \"%s\" at position %d with len %d: %.*s", + i, rules[i].regex, position, substr_len, substr_len, substr_start); +#else + //Log("match rules[%d] = \"%s\" at position %d with len %d: %.*s", + // i, rules[i].regex, position, substr_len, substr_len, substr_start); +#endif + + position += substr_len; + + /* TODO: Now a new token is recognized with rules[i]. Add codes + * to record the token in the array `tokens'. For certain types + * of tokens, some extra actions should be performed. + */ + + switch (rules[i].token_type) { +#ifdef __ICS_EXPORT + default: TODO(); +#else + case TK_NOTYPE: break; + case TK_NUM: + case TK_REG: sprintf(tokens[nr_token].str, "%.*s", substr_len, substr_start); + default: tokens[nr_token].type = rules[i].token_type; + nr_token ++; +#endif + } + + break; + } + } + + if (i == NR_REGEX) { + printf("no match at position %d\n%s\n%*.s^\n", position, e, position, ""); + return false; + } + } + + return true; +} + +#ifndef __ICS_EXPORT +static int op_prec(int t) { + switch (t) { + case '!': case TK_NEG: case TK_REF: return 0; + case '*': case '/': case '%': return 1; + case '+': case '-': return 2; + case TK_EQ: case TK_NEQ: return 4; + case TK_AND: return 8; + case TK_OR: return 9; + default: assert(0); + } +} + +static inline int op_prec_cmp(int t1, int t2) { + return op_prec(t1) - op_prec(t2); +} + +static int find_dominated_op(int s, int e, bool *success) { + int i; + int bracket_level = 0; + int dominated_op = -1; + for (i = s; i <= e; i ++) { + switch (tokens[i].type) { + case TK_REG: case TK_NUM: break; + + case '(': + bracket_level ++; + break; + + case ')': + bracket_level --; + if (bracket_level < 0) { + *success = false; + return 0; + } + break; + + default: + if (bracket_level == 0) { + if (dominated_op == -1 || + op_prec_cmp(tokens[dominated_op].type, tokens[i].type) < 0 || + (op_prec_cmp(tokens[dominated_op].type, tokens[i].type) == 0 && + tokens[i].type != '!' && tokens[i].type != '~' && + tokens[i].type != TK_NEG && tokens[i].type != TK_REF) ) { + dominated_op = i; + } + } + break; + } + } + + *success = (dominated_op != -1); + return dominated_op; +} + +static rtlreg_t eval(int s, int e, bool *success) { + if (s > e) { + // bad expression + *success = false; + return 0; + } + else if (s == e) { + // single token + rtlreg_t val; + switch (tokens[s].type) { + case TK_REG: val = isa_reg_str2val(tokens[s].str + 1, success); // +1 to skip '$' + if (!*success) { return 0; } + break; + + case TK_NUM: val = strtoul(tokens[s].str, NULL, 0); break; + default: assert(0); + } + + *success = true; + return val; + } + else if (tokens[s].type == '(' && tokens[e].type == ')') { + return eval(s + 1, e - 1, success); + } + else { + int dominated_op = find_dominated_op(s, e, success); + if (!*success) { return 0; } + + int op_type = tokens[dominated_op].type; + if (op_type == '!' || op_type == TK_NEG || op_type == TK_REF) { + rtlreg_t val = eval(dominated_op + 1, e, success); + if (!*success) { return 0; } + + switch (op_type) { + case '!': return !val; + case TK_NEG: return -val; + case TK_REF: return vaddr_read_safe(val, 4); + default: assert(0); + } + } + + rtlreg_t val1 = eval(s, dominated_op - 1, success); + if (!*success) { return 0; } + rtlreg_t val2 = eval(dominated_op + 1, e, success); + if (!*success) { return 0; } + + switch (op_type) { + case '+': return val1 + val2; + case '-': return val1 - val2; + case '*': return val1 * val2; + case '/': return val1 / val2; + case '%': return val1 % val2; + case TK_EQ: return val1 == val2; + case TK_NEQ: return val1 != val2; + case TK_AND: return val1 && val2; + case TK_OR: return val1 || val2; + default: assert(0); + } + } +} +#endif + +word_t expr(char *e, bool *success) { + if (!make_token(e)) { + *success = false; + return 0; + } + + /* TODO: Insert codes to evaluate the expression. */ +#ifdef __ICS_EXPORT + TODO(); + + return 0; +#else + + /* Detect TK_REF and TK_NEG tokens */ + int i; + int prev_type; + for (i = 0; i < nr_token; i ++) { + if (tokens[i].type == '-') { + if (i == 0) { + tokens[i].type = TK_NEG; + continue; + } + + prev_type = tokens[i - 1].type; + if ( !(prev_type == ')' || prev_type == TK_NUM || + prev_type == TK_REG) ) { + tokens[i].type = TK_NEG; + } + } + + else if (tokens[i].type == '*') { + if (i == 0) { + tokens[i].type = TK_REF; + continue; + } + + prev_type = tokens[i - 1].type; + if ( !(prev_type == ')' || prev_type == TK_NUM || + prev_type == TK_REG) ) { + tokens[i].type = TK_REF; + } + } + } + + return eval(0, nr_token - 1, success); +#endif +} diff --git a/libraries/NEMU/src/utils/iqueue.c b/libraries/NEMU/src/utils/iqueue.c new file mode 100644 index 0000000..1cf8274 --- /dev/null +++ b/libraries/NEMU/src/utils/iqueue.c @@ -0,0 +1,33 @@ +#include + +#define INSTR_QUEUE_SIZE (1 << 5) + +static struct { + vaddr_t pc; + uint8_t instr[20]; + uint8_t ilen; +} iqueue[INSTR_QUEUE_SIZE]; +static uint32_t q_idx = 0; + +void iqueue_commit(vaddr_t pc, uint8_t *instr_buf, uint8_t ilen) { + iqueue[q_idx].pc = pc; + iqueue[q_idx].ilen = ilen; + assert(ilen < 20); + memcpy(iqueue[q_idx].instr, instr_buf, ilen); + q_idx = (q_idx + 1) % INSTR_QUEUE_SIZE; +} + +void iqueue_dump() { + int i; + int victim_idx = (q_idx - 1) % INSTR_QUEUE_SIZE; + printf("======== instruction queue =========\n"); + for (i = 0; i < INSTR_QUEUE_SIZE; i ++) { + printf("%5s " FMT_WORD ": ", (i == victim_idx ? "-->" : ""), iqueue[i].pc); + int j; + for (j = 0; j < iqueue[i].ilen; j ++) { + printf("%02x ", iqueue[i].instr[j]); + } + printf("\n"); + } + printf("======== instruction queue end =========\n"); +} diff --git a/libraries/NEMU/src/utils/log.c b/libraries/NEMU/src/utils/log.c new file mode 100644 index 0000000..10efab5 --- /dev/null +++ b/libraries/NEMU/src/utils/log.c @@ -0,0 +1,22 @@ +#include + +// control when the log is printed, unit: number of instructions +#define LOG_START (0) +// restrict the size of log file +#define LOG_END (1024 * 1024 * 50) + +FILE *log_fp = NULL; + +void init_log(const char *log_file) { + if (log_file == NULL) return; + log_fp = fopen(log_file, "w"); + Assert(log_fp, "Can not open '%s'", log_file); +} + +bool log_enable() { + extern uint64_t g_nr_guest_instr; + return (g_nr_guest_instr >= LOG_START) && (g_nr_guest_instr <= LOG_END); +} + +char log_bytebuf[80] = {}; +char log_asmbuf[80] = {}; diff --git a/libraries/NEMU/src/utils/state.c b/libraries/NEMU/src/utils/state.c new file mode 100644 index 0000000..1526cf7 --- /dev/null +++ b/libraries/NEMU/src/utils/state.c @@ -0,0 +1,9 @@ +#include + +NEMUState nemu_state = { .state = NEMU_STOP }; + +int is_exit_status_bad() { + int good = (nemu_state.state == NEMU_END && nemu_state.halt_ret == 0) || + (nemu_state.state == NEMU_QUIT); + return !good; +} diff --git a/libraries/NEMU/src/utils/timer.c b/libraries/NEMU/src/utils/timer.c new file mode 100644 index 0000000..ca8c845 --- /dev/null +++ b/libraries/NEMU/src/utils/timer.c @@ -0,0 +1,28 @@ +#include +#include MUXDEF(CONFIG_TIMER_GETTIMEOFDAY, , ) + +IFDEF(CONFIG_TIMER_CLOCK_GETTIME, + static_assert(CLOCKS_PER_SEC == 1000000, "CLOCKS_PER_SEC != 1000000")); +IFDEF(CONFIG_TIMER_CLOCK_GETTIME, + static_assert(sizeof(clock_t) == 8, "sizeof(clock_t) != 8")); + +static uint64_t boot_time = 0; + +static uint64_t get_time_internal() { +#ifdef CONFIG_TIMER_GETTIMEOFDAY + struct timeval now; + gettimeofday(&now, NULL); + uint64_t us = now.tv_sec * 1000000 + now.tv_usec; +#else + struct timespec now; + clock_gettime(CLOCK_MONOTONIC_COARSE, &now); + uint64_t us = now.tv_sec * 1000000 + now.tv_nsec / 1000; +#endif + return us; +} + +uint64_t get_time() { + if (boot_time == 0) boot_time = get_time_internal(); + uint64_t now = get_time_internal(); + return now - boot_time; +} diff --git a/libraries/NEMU/tools/export/.gitignore b/libraries/NEMU/tools/export/.gitignore new file mode 100644 index 0000000..ea1472e --- /dev/null +++ b/libraries/NEMU/tools/export/.gitignore @@ -0,0 +1 @@ +output/ diff --git a/libraries/NEMU/tools/fixdep/Makefile b/libraries/NEMU/tools/fixdep/Makefile new file mode 100644 index 0000000..b8641b0 --- /dev/null +++ b/libraries/NEMU/tools/fixdep/Makefile @@ -0,0 +1,3 @@ +NAME = fixdep +SRCS = fixdep.c +include $(NEMU_HOME)/scripts/build.mk diff --git a/libraries/NEMU/tools/fixdep/fixdep.c b/libraries/NEMU/tools/fixdep/fixdep.c new file mode 100644 index 0000000..d985405 --- /dev/null +++ b/libraries/NEMU/tools/fixdep/fixdep.c @@ -0,0 +1,404 @@ +/* + * "Optimize" a list of dependencies as spit out by gcc -MD + * for the kernel build + * =========================================================================== + * + * Author Kai Germaschewski + * Copyright 2002 by Kai Germaschewski + * + * This software may be used and distributed according to the terms + * of the GNU General Public License, incorporated herein by reference. + * + * + * Introduction: + * + * gcc produces a very nice and correct list of dependencies which + * tells make when to remake a file. + * + * To use this list as-is however has the drawback that virtually + * every file in the kernel includes autoconf.h. + * + * If the user re-runs make *config, autoconf.h will be + * regenerated. make notices that and will rebuild every file which + * includes autoconf.h, i.e. basically all files. This is extremely + * annoying if the user just changed CONFIG_HIS_DRIVER from n to m. + * + * So we play the same trick that "mkdep" played before. We replace + * the dependency on autoconf.h by a dependency on every config + * option which is mentioned in any of the listed prerequisites. + * + * kconfig populates a tree in include/config/ with an empty file + * for each config symbol and when the configuration is updated + * the files representing changed config options are touched + * which then let make pick up the changes and the files that use + * the config symbols are rebuilt. + * + * So if the user changes his CONFIG_HIS_DRIVER option, only the objects + * which depend on "include/config/his/driver.h" will be rebuilt, + * so most likely only his driver ;-) + * + * The idea above dates, by the way, back to Michael E Chastain, AFAIK. + * + * So to get dependencies right, there are two issues: + * o if any of the files the compiler read changed, we need to rebuild + * o if the command line given to the compile the file changed, we + * better rebuild as well. + * + * The former is handled by using the -MD output, the later by saving + * the command line used to compile the old object and comparing it + * to the one we would now use. + * + * Again, also this idea is pretty old and has been discussed on + * kbuild-devel a long time ago. I don't have a sensibly working + * internet connection right now, so I rather don't mention names + * without double checking. + * + * This code here has been based partially based on mkdep.c, which + * says the following about its history: + * + * Copyright abandoned, Michael Chastain, . + * This is a C version of syncdep.pl by Werner Almesberger. + * + * + * It is invoked as + * + * fixdep + * + * and will read the dependency file + * + * The transformed dependency snipped is written to stdout. + * + * It first generates a line + * + * cmd_ = + * + * and then basically copies the ..d file to stdout, in the + * process filtering out the dependency on autoconf.h and adding + * dependencies on include/config/my/option.h for every + * CONFIG_MY_OPTION encountered in any of the prerequisites. + * + * We don't even try to really parse the header files, but + * merely grep, i.e. if CONFIG_FOO is mentioned in a comment, it will + * be picked up as well. It's not a problem with respect to + * correctness, since that can only give too many dependencies, thus + * we cannot miss a rebuild. Since people tend to not mention totally + * unrelated CONFIG_ options all over the place, it's not an + * efficiency problem either. + * + * (Note: it'd be easy to port over the complete mkdep state machine, + * but I don't think the added complexity is worth it) + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static void usage(void) +{ + fprintf(stderr, "Usage: fixdep \n"); + exit(1); +} + +/* + * In the intended usage of this program, the stdout is redirected to .*.cmd + * files. The return value of printf() and putchar() must be checked to catch + * any error, e.g. "No space left on device". + */ +static void xprintf(const char *format, ...) +{ + va_list ap; + int ret; + + va_start(ap, format); + ret = vprintf(format, ap); + if (ret < 0) { + perror("fixdep"); + exit(1); + } + va_end(ap); +} + +static void xputchar(int c) +{ + int ret; + + ret = putchar(c); + if (ret == EOF) { + perror("fixdep"); + exit(1); + } +} + +/* + * Print out a dependency path from a symbol name + */ +static void print_dep(const char *m, int slen, const char *dir) +{ + int c, prev_c = '/', i; + + xprintf(" $(wildcard %s/", dir); + for (i = 0; i < slen; i++) { + c = m[i]; + if (c == '_') + c = '/'; + else + c = tolower(c); + if (c != '/' || prev_c != '/') + xputchar(c); + prev_c = c; + } + xprintf(".h) \\\n"); +} + +struct item { + struct item *next; + unsigned int len; + unsigned int hash; + char name[]; +}; + +#define HASHSZ 256 +static struct item *hashtab[HASHSZ]; + +static unsigned int strhash(const char *str, unsigned int sz) +{ + /* fnv32 hash */ + unsigned int i, hash = 2166136261U; + + for (i = 0; i < sz; i++) + hash = (hash ^ str[i]) * 0x01000193; + return hash; +} + +/* + * Lookup a value in the configuration string. + */ +static int is_defined_config(const char *name, int len, unsigned int hash) +{ + struct item *aux; + + for (aux = hashtab[hash % HASHSZ]; aux; aux = aux->next) { + if (aux->hash == hash && aux->len == len && + memcmp(aux->name, name, len) == 0) + return 1; + } + return 0; +} + +/* + * Add a new value to the configuration string. + */ +static void define_config(const char *name, int len, unsigned int hash) +{ + struct item *aux = malloc(sizeof(*aux) + len); + + if (!aux) { + perror("fixdep:malloc"); + exit(1); + } + memcpy(aux->name, name, len); + aux->len = len; + aux->hash = hash; + aux->next = hashtab[hash % HASHSZ]; + hashtab[hash % HASHSZ] = aux; +} + +/* + * Record the use of a CONFIG_* word. + */ +static void use_config(const char *m, int slen) +{ + unsigned int hash = strhash(m, slen); + + if (is_defined_config(m, slen, hash)) + return; + + define_config(m, slen, hash); + print_dep(m, slen, "include/config"); +} + +/* test if s ends in sub */ +static int str_ends_with(const char *s, int slen, const char *sub) +{ + int sublen = strlen(sub); + + if (sublen > slen) + return 0; + + return !memcmp(s + slen - sublen, sub, sublen); +} + +static void parse_config_file(const char *p) +{ + const char *q, *r; + const char *start = p; + + while ((p = strstr(p, "CONFIG_"))) { + if (p > start && (isalnum(p[-1]) || p[-1] == '_')) { + p += 7; + continue; + } + p += 7; + q = p; + while (isalnum(*q) || *q == '_') + q++; + if (str_ends_with(p, q - p, "_MODULE")) + r = q - 7; + else + r = q; + if (r > p) + use_config(p, r - p); + p = q; + } +} + +static void *read_file(const char *filename) +{ + struct stat st; + int fd; + char *buf; + + fd = open(filename, O_RDONLY); + if (fd < 0) { + fprintf(stderr, "fixdep: error opening file: "); + perror(filename); + exit(2); + } + if (fstat(fd, &st) < 0) { + fprintf(stderr, "fixdep: error fstat'ing file: "); + perror(filename); + exit(2); + } + buf = malloc(st.st_size + 1); + if (!buf) { + perror("fixdep: malloc"); + exit(2); + } + if (read(fd, buf, st.st_size) != st.st_size) { + perror("fixdep: read"); + exit(2); + } + buf[st.st_size] = '\0'; + close(fd); + + return buf; +} + +/* Ignore certain dependencies */ +static int is_ignored_file(const char *s, int len) +{ + return str_ends_with(s, len, "include/generated/autoconf.h") || + str_ends_with(s, len, "include/generated/autoksyms.h"); +} + +/* + * Important: The below generated source_foo.o and deps_foo.o variable + * assignments are parsed not only by make, but also by the rather simple + * parser in scripts/mod/sumversion.c. + */ +static void parse_dep_file(char *m, const char *target) +{ + char *p; + int is_last, is_target; + int saw_any_target = 0; + int is_first_dep = 0; + void *buf; + + while (1) { + /* Skip any "white space" */ + while (*m == ' ' || *m == '\\' || *m == '\n') + m++; + + if (!*m) + break; + + /* Find next "white space" */ + p = m; + while (*p && *p != ' ' && *p != '\\' && *p != '\n') + p++; + is_last = (*p == '\0'); + /* Is the token we found a target name? */ + is_target = (*(p-1) == ':'); + /* Don't write any target names into the dependency file */ + if (is_target) { + /* The /next/ file is the first dependency */ + is_first_dep = 1; + } else if (!is_ignored_file(m, p - m)) { + *p = '\0'; + + /* + * Do not list the source file as dependency, so that + * kbuild is not confused if a .c file is rewritten + * into .S or vice versa. Storing it in source_* is + * needed for modpost to compute srcversions. + */ + if (is_first_dep) { + /* + * If processing the concatenation of multiple + * dependency files, only process the first + * target name, which will be the original + * source name, and ignore any other target + * names, which will be intermediate temporary + * files. + */ + if (!saw_any_target) { + saw_any_target = 1; + xprintf("source_%s := %s\n\n", + target, m); + xprintf("deps_%s := \\\n", target); + } + is_first_dep = 0; + } else { + xprintf(" %s \\\n", m); + } + + buf = read_file(m); + parse_config_file(buf); + free(buf); + } + + if (is_last) + break; + + /* + * Start searching for next token immediately after the first + * "whitespace" character that follows this token. + */ + m = p + 1; + } + + if (!saw_any_target) { + fprintf(stderr, "fixdep: parse error; no targets found\n"); + exit(1); + } + + xprintf("\n%s: $(deps_%s)\n\n", target, target); + xprintf("$(deps_%s):\n", target); +} + +int main(int argc, char *argv[]) +{ + const char *depfile, *target, *cmdline; + void *buf; + + if (argc != 4) + usage(); + + depfile = argv[1]; + target = argv[2]; + cmdline = argv[3]; + + xprintf("cmd_%s := %s\n\n", target, cmdline); + + buf = read_file(depfile); + parse_dep_file(buf, target); + free(buf); + + return 0; +} diff --git a/libraries/NEMU/tools/gen-expr/.gitignore b/libraries/NEMU/tools/gen-expr/.gitignore new file mode 100644 index 0000000..90b7a4a --- /dev/null +++ b/libraries/NEMU/tools/gen-expr/.gitignore @@ -0,0 +1 @@ +.code.c diff --git a/libraries/NEMU/tools/gen-expr/Makefile b/libraries/NEMU/tools/gen-expr/Makefile new file mode 100644 index 0000000..051bbc8 --- /dev/null +++ b/libraries/NEMU/tools/gen-expr/Makefile @@ -0,0 +1,3 @@ +NAME = gen-expr +SRCS = gen-expr.c +include $(NEMU_HOME)/scripts/build.mk diff --git a/libraries/NEMU/tools/gen-expr/gen-expr.c b/libraries/NEMU/tools/gen-expr/gen-expr.c new file mode 100644 index 0000000..ed4426d --- /dev/null +++ b/libraries/NEMU/tools/gen-expr/gen-expr.c @@ -0,0 +1,132 @@ +#include +#include +#include +#include +#include +#include + +// this should be enough +static char buf[65536] = {}; +static char code_buf[65536 + 128] = {}; // a little larger than `buf` +static char *code_format = +"#include \n" +"int main() { " +" unsigned result = %s; " +" printf(\"%%u\", result); " +" return 0; " +"}"; + +#ifdef __ICS_EXPORT +static inline void gen_rand_expr() { + buf[0] = '\0'; +} +#else +static char *pbuf; + +#define format_buf(fmt, ...) pbuf += sprintf(pbuf, fmt, ##__VA_ARGS__) + +static inline uint32_t choose(uint32_t max) { + return rand() % max; +} + +static inline void gen_rand_op() { + char op_list[] = {'+', '-', '*', '/', '+', '-', '*'}; + format_buf("%c", op_list[choose(7)]); +} + +static inline void gen_num() { + format_buf("%uu", rand()); +} + +static inline void gen_space() { + char *space_list[3] = { + "", + " ", + " ", + }; + format_buf("%s", space_list[choose(3)]); +} + +static int nr_op = 0; + +static inline void gen_rand_expr() { + gen_space(); + switch (choose(3)) { + default: + if (nr_op == 0) gen_rand_expr(); + else gen_num(); + break; + case 1: + format_buf("("); + gen_rand_expr(); + format_buf(")"); + break; + case 0: + nr_op ++; + if (pbuf - buf >= sizeof(buf) / 2) { + gen_num(); + break; + } + gen_rand_expr(); + gen_space(); + gen_rand_op(); + gen_space(); + gen_rand_expr(); + break; + } + gen_space(); +} + +void remove_u(char *p) { + char *q = p; + while ((q = strchr(q, 'u')) != NULL) { + // reuse code_buf + strcpy(code_buf, q + 1); + strcpy(q, code_buf); + } +} +#endif + +int main(int argc, char *argv[]) { + int seed = time(0); + srand(seed); + int loop = 1; + if (argc > 1) { + sscanf(argv[1], "%d", &loop); + } + int i; + for (i = 0; i < loop; i ++) { +#ifndef __ICS_EXPORT + nr_op = 0; + pbuf = buf; +#endif + gen_rand_expr(); + + sprintf(code_buf, code_format, buf); + + FILE *fp = fopen("/tmp/.code.c", "w"); + assert(fp != NULL); + fputs(code_buf, fp); + fclose(fp); + + int ret = system("gcc /tmp/.code.c -o /tmp/.expr"); + if (ret != 0) continue; + + fp = popen("/tmp/.expr", "r"); + assert(fp != NULL); + + int result; + fscanf(fp, "%d", &result); +#ifndef __ICS_EXPORT + ret = pclose(fp); + if (ret != 0) continue; + + remove_u(buf); +#else + pclose(fp); +#endif + + printf("%u %s\n", result, buf); + } + return 0; +} diff --git a/libraries/NEMU/tools/kconfig/.gitignore b/libraries/NEMU/tools/kconfig/.gitignore new file mode 100644 index 0000000..14779be --- /dev/null +++ b/libraries/NEMU/tools/kconfig/.gitignore @@ -0,0 +1,3 @@ +build/ +!lexer.l +!parser.y diff --git a/libraries/NEMU/tools/kconfig/Makefile b/libraries/NEMU/tools/kconfig/Makefile new file mode 100644 index 0000000..85ea807 --- /dev/null +++ b/libraries/NEMU/tools/kconfig/Makefile @@ -0,0 +1,34 @@ +NAME = conf +obj := build +SRCS += confdata.c expr.c preprocess.c symbol.c util.c +SRCS += $(obj)/lexer.lex.c $(obj)/parser.tab.c +CFLAGS += -DYYDEBUG +INC_DIR += . + +ifeq ($(NAME),conf) +SRCS += conf.c +else ifeq ($(NAME),mconf) +SRCS += mconf.c $(shell find lxdialog/ -name "*.c") +LIBS += -lncurses -ltinfo +else +$(error bad target=$(NAME)) +endif + +include $(NEMU_HOME)/scripts/build.mk + +$(obj)/lexer.lex.o: $(obj)/parser.tab.h +$(obj)/lexer.lex.c: lexer.l $(obj)/parser.tab.h + @echo + LEX $@ + @flex -o $@ $< + +$(obj)/parser.tab.c $(obj)/parser.tab.h: parser.y + @echo + YACC $@ + @bison -v $< --defines=$(obj)/parser.tab.h -o $(obj)/parser.tab.c + +conf: + @$(MAKE) -s + +mconf: + @$(MAKE) -s NAME=mconf + +.PHONY: conf mconf diff --git a/libraries/NEMU/tools/kconfig/conf.c b/libraries/NEMU/tools/kconfig/conf.c new file mode 100644 index 0000000..f6e548b --- /dev/null +++ b/libraries/NEMU/tools/kconfig/conf.c @@ -0,0 +1,727 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2002 Roman Zippel + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "lkc.h" + +static void conf(struct menu *menu); +static void check_conf(struct menu *menu); + +enum input_mode { + oldaskconfig, + syncconfig, + oldconfig, + allnoconfig, + allyesconfig, + allmodconfig, + alldefconfig, + randconfig, + defconfig, + savedefconfig, + listnewconfig, + helpnewconfig, + olddefconfig, + yes2modconfig, + mod2yesconfig, +}; +static enum input_mode input_mode = oldaskconfig; + +static int indent = 1; +static int tty_stdio; +static int sync_kconfig; +static int conf_cnt; +static char line[PATH_MAX]; +static struct menu *rootEntry; + +static void print_help(struct menu *menu) +{ + struct gstr help = str_new(); + + menu_get_ext_help(menu, &help); + + printf("\n%s\n", str_get(&help)); + str_free(&help); +} + +static void strip(char *str) +{ + char *p = str; + int l; + + while ((isspace(*p))) + p++; + l = strlen(p); + if (p != str) + memmove(str, p, l + 1); + if (!l) + return; + p = str + l - 1; + while ((isspace(*p))) + *p-- = 0; +} + +/* Helper function to facilitate fgets() by Jean Sacren. */ +static void xfgets(char *str, int size, FILE *in) +{ + if (!fgets(str, size, in)) + fprintf(stderr, "\nError in reading or end of file.\n"); + + if (!tty_stdio) + printf("%s", str); +} + +static int conf_askvalue(struct symbol *sym, const char *def) +{ + enum symbol_type type = sym_get_type(sym); + + if (!sym_has_value(sym)) + printf("(NEW) "); + + line[0] = '\n'; + line[1] = 0; + + if (!sym_is_changeable(sym)) { + printf("%s\n", def); + line[0] = '\n'; + line[1] = 0; + return 0; + } + + switch (input_mode) { + case oldconfig: + case syncconfig: + if (sym_has_value(sym)) { + printf("%s\n", def); + return 0; + } + /* fall through */ + case oldaskconfig: + fflush(stdout); + xfgets(line, sizeof(line), stdin); + return 1; + default: + break; + } + + switch (type) { + case S_INT: + case S_HEX: + case S_STRING: + printf("%s\n", def); + return 1; + default: + ; + } + printf("%s", line); + return 1; +} + +static int conf_string(struct menu *menu) +{ + struct symbol *sym = menu->sym; + const char *def; + + while (1) { + printf("%*s%s ", indent - 1, "", menu->prompt->text); + printf("(%s) ", sym->name); + def = sym_get_string_value(sym); + if (sym_get_string_value(sym)) + printf("[%s] ", def); + if (!conf_askvalue(sym, def)) + return 0; + switch (line[0]) { + case '\n': + break; + case '?': + /* print help */ + if (line[1] == '\n') { + print_help(menu); + def = NULL; + break; + } + /* fall through */ + default: + line[strlen(line)-1] = 0; + def = line; + } + if (def && sym_set_string_value(sym, def)) + return 0; + } +} + +static int conf_sym(struct menu *menu) +{ + struct symbol *sym = menu->sym; + tristate oldval, newval; + + while (1) { + printf("%*s%s ", indent - 1, "", menu->prompt->text); + if (sym->name) + printf("(%s) ", sym->name); + putchar('['); + oldval = sym_get_tristate_value(sym); + switch (oldval) { + case no: + putchar('N'); + break; + case mod: + putchar('M'); + break; + case yes: + putchar('Y'); + break; + } + if (oldval != no && sym_tristate_within_range(sym, no)) + printf("/n"); + if (oldval != mod && sym_tristate_within_range(sym, mod)) + printf("/m"); + if (oldval != yes && sym_tristate_within_range(sym, yes)) + printf("/y"); + printf("/?] "); + if (!conf_askvalue(sym, sym_get_string_value(sym))) + return 0; + strip(line); + + switch (line[0]) { + case 'n': + case 'N': + newval = no; + if (!line[1] || !strcmp(&line[1], "o")) + break; + continue; + case 'm': + case 'M': + newval = mod; + if (!line[1]) + break; + continue; + case 'y': + case 'Y': + newval = yes; + if (!line[1] || !strcmp(&line[1], "es")) + break; + continue; + case 0: + newval = oldval; + break; + case '?': + goto help; + default: + continue; + } + if (sym_set_tristate_value(sym, newval)) + return 0; +help: + print_help(menu); + } +} + +static int conf_choice(struct menu *menu) +{ + struct symbol *sym, *def_sym; + struct menu *child; + bool is_new; + + sym = menu->sym; + is_new = !sym_has_value(sym); + if (sym_is_changeable(sym)) { + conf_sym(menu); + sym_calc_value(sym); + switch (sym_get_tristate_value(sym)) { + case no: + return 1; + case mod: + return 0; + case yes: + break; + } + } else { + switch (sym_get_tristate_value(sym)) { + case no: + return 1; + case mod: + printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu)); + return 0; + case yes: + break; + } + } + + while (1) { + int cnt, def; + + printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu)); + def_sym = sym_get_choice_value(sym); + cnt = def = 0; + line[0] = 0; + for (child = menu->list; child; child = child->next) { + if (!menu_is_visible(child)) + continue; + if (!child->sym) { + printf("%*c %s\n", indent, '*', menu_get_prompt(child)); + continue; + } + cnt++; + if (child->sym == def_sym) { + def = cnt; + printf("%*c", indent, '>'); + } else + printf("%*c", indent, ' '); + printf(" %d. %s", cnt, menu_get_prompt(child)); + if (child->sym->name) + printf(" (%s)", child->sym->name); + if (!sym_has_value(child->sym)) + printf(" (NEW)"); + printf("\n"); + } + printf("%*schoice", indent - 1, ""); + if (cnt == 1) { + printf("[1]: 1\n"); + goto conf_childs; + } + printf("[1-%d?]: ", cnt); + switch (input_mode) { + case oldconfig: + case syncconfig: + if (!is_new) { + cnt = def; + printf("%d\n", cnt); + break; + } + /* fall through */ + case oldaskconfig: + fflush(stdout); + xfgets(line, sizeof(line), stdin); + strip(line); + if (line[0] == '?') { + print_help(menu); + continue; + } + if (!line[0]) + cnt = def; + else if (isdigit(line[0])) + cnt = atoi(line); + else + continue; + break; + default: + break; + } + + conf_childs: + for (child = menu->list; child; child = child->next) { + if (!child->sym || !menu_is_visible(child)) + continue; + if (!--cnt) + break; + } + if (!child) + continue; + if (line[0] && line[strlen(line) - 1] == '?') { + print_help(child); + continue; + } + sym_set_choice_value(sym, child->sym); + for (child = child->list; child; child = child->next) { + indent += 2; + conf(child); + indent -= 2; + } + return 1; + } +} + +static void conf(struct menu *menu) +{ + struct symbol *sym; + struct property *prop; + struct menu *child; + + if (!menu_is_visible(menu)) + return; + + sym = menu->sym; + prop = menu->prompt; + if (prop) { + const char *prompt; + + switch (prop->type) { + case P_MENU: + /* + * Except in oldaskconfig mode, we show only menus that + * contain new symbols. + */ + if (input_mode != oldaskconfig && rootEntry != menu) { + check_conf(menu); + return; + } + /* fall through */ + case P_COMMENT: + prompt = menu_get_prompt(menu); + if (prompt) + printf("%*c\n%*c %s\n%*c\n", + indent, '*', + indent, '*', prompt, + indent, '*'); + default: + ; + } + } + + if (!sym) + goto conf_childs; + + if (sym_is_choice(sym)) { + conf_choice(menu); + if (sym->curr.tri != mod) + return; + goto conf_childs; + } + + switch (sym->type) { + case S_INT: + case S_HEX: + case S_STRING: + conf_string(menu); + break; + default: + conf_sym(menu); + break; + } + +conf_childs: + if (sym) + indent += 2; + for (child = menu->list; child; child = child->next) + conf(child); + if (sym) + indent -= 2; +} + +static void check_conf(struct menu *menu) +{ + struct symbol *sym; + struct menu *child; + + if (!menu_is_visible(menu)) + return; + + sym = menu->sym; + if (sym && !sym_has_value(sym)) { + if (sym_is_changeable(sym) || + (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) { + if (input_mode == listnewconfig) { + if (sym->name) { + const char *str; + + if (sym->type == S_STRING) { + str = sym_get_string_value(sym); + str = sym_escape_string_value(str); + printf("%s%s=%s\n", CONFIG_, sym->name, str); + free((void *)str); + } else { + str = sym_get_string_value(sym); + printf("%s%s=%s\n", CONFIG_, sym->name, str); + } + } + } else if (input_mode == helpnewconfig) { + printf("-----\n"); + print_help(menu); + printf("-----\n"); + + } else { + if (!conf_cnt++) + printf("*\n* Restart config...\n*\n"); + rootEntry = menu_get_parent_menu(menu); + conf(rootEntry); + } + } + } + + for (child = menu->list; child; child = child->next) + check_conf(child); +} + +static struct option long_opts[] = { + {"oldaskconfig", no_argument, NULL, oldaskconfig}, + {"oldconfig", no_argument, NULL, oldconfig}, + {"syncconfig", no_argument, NULL, syncconfig}, + {"defconfig", required_argument, NULL, defconfig}, + {"savedefconfig", required_argument, NULL, savedefconfig}, + {"allnoconfig", no_argument, NULL, allnoconfig}, + {"allyesconfig", no_argument, NULL, allyesconfig}, + {"allmodconfig", no_argument, NULL, allmodconfig}, + {"alldefconfig", no_argument, NULL, alldefconfig}, + {"randconfig", no_argument, NULL, randconfig}, + {"listnewconfig", no_argument, NULL, listnewconfig}, + {"helpnewconfig", no_argument, NULL, helpnewconfig}, + {"olddefconfig", no_argument, NULL, olddefconfig}, + {"yes2modconfig", no_argument, NULL, yes2modconfig}, + {"mod2yesconfig", no_argument, NULL, mod2yesconfig}, + {NULL, 0, NULL, 0} +}; + +static void conf_usage(const char *progname) +{ + + printf("Usage: %s [-s] [option] \n", progname); + printf("[option] is _one_ of the following:\n"); + printf(" --listnewconfig List new options\n"); + printf(" --helpnewconfig List new options and help text\n"); + printf(" --oldaskconfig Start a new configuration using a line-oriented program\n"); + printf(" --oldconfig Update a configuration using a provided .config as base\n"); + printf(" --syncconfig Similar to oldconfig but generates configuration in\n" + " include/{generated/,config/}\n"); + printf(" --olddefconfig Same as oldconfig but sets new symbols to their default value\n"); + printf(" --defconfig New config with default defined in \n"); + printf(" --savedefconfig Save the minimal current configuration to \n"); + printf(" --allnoconfig New config where all options are answered with no\n"); + printf(" --allyesconfig New config where all options are answered with yes\n"); + printf(" --allmodconfig New config where all options are answered with mod\n"); + printf(" --alldefconfig New config with all symbols set to default\n"); + printf(" --randconfig New config with random answer to all options\n"); + printf(" --yes2modconfig Change answers from yes to mod if possible\n"); + printf(" --mod2yesconfig Change answers from mod to yes if possible\n"); +} + +int main(int ac, char **av) +{ + const char *progname = av[0]; + int opt; + const char *name, *defconfig_file = NULL /* gcc uninit */; + int no_conf_write = 0; + + tty_stdio = isatty(0) && isatty(1); + + while ((opt = getopt_long(ac, av, "s", long_opts, NULL)) != -1) { + if (opt == 's') { + conf_set_message_callback(NULL); + continue; + } + input_mode = (enum input_mode)opt; + switch (opt) { + case syncconfig: + /* + * syncconfig is invoked during the build stage. + * Suppress distracting "configuration written to ..." + */ + conf_set_message_callback(NULL); + sync_kconfig = 1; + break; + case defconfig: + case savedefconfig: + defconfig_file = optarg; + break; + case randconfig: + { + struct timeval now; + unsigned int seed; + char *seed_env; + + /* + * Use microseconds derived seed, + * compensate for systems where it may be zero + */ + gettimeofday(&now, NULL); + seed = (unsigned int)((now.tv_sec + 1) * (now.tv_usec + 1)); + + seed_env = getenv("KCONFIG_SEED"); + if( seed_env && *seed_env ) { + char *endp; + int tmp = (int)strtol(seed_env, &endp, 0); + if (*endp == '\0') { + seed = tmp; + } + } + fprintf( stderr, "KCONFIG_SEED=0x%X\n", seed ); + srand(seed); + break; + } + case oldaskconfig: + case oldconfig: + case allnoconfig: + case allyesconfig: + case allmodconfig: + case alldefconfig: + case listnewconfig: + case helpnewconfig: + case olddefconfig: + case yes2modconfig: + case mod2yesconfig: + break; + case '?': + conf_usage(progname); + exit(1); + break; + } + } + if (ac == optind) { + fprintf(stderr, "%s: Kconfig file missing\n", av[0]); + conf_usage(progname); + exit(1); + } + name = av[optind]; + conf_parse(name); + //zconfdump(stdout); + + switch (input_mode) { + case defconfig: + if (conf_read(defconfig_file)) { + fprintf(stderr, + "***\n" + "*** Can't find default configuration \"%s\"!\n" + "***\n", + defconfig_file); + exit(1); + } + break; + case savedefconfig: + case syncconfig: + case oldaskconfig: + case oldconfig: + case listnewconfig: + case helpnewconfig: + case olddefconfig: + case yes2modconfig: + case mod2yesconfig: + conf_read(NULL); + break; + case allnoconfig: + case allyesconfig: + case allmodconfig: + case alldefconfig: + case randconfig: + name = getenv("KCONFIG_ALLCONFIG"); + if (!name) + break; + if ((strcmp(name, "") != 0) && (strcmp(name, "1") != 0)) { + if (conf_read_simple(name, S_DEF_USER)) { + fprintf(stderr, + "*** Can't read seed configuration \"%s\"!\n", + name); + exit(1); + } + break; + } + switch (input_mode) { + case allnoconfig: name = "allno.config"; break; + case allyesconfig: name = "allyes.config"; break; + case allmodconfig: name = "allmod.config"; break; + case alldefconfig: name = "alldef.config"; break; + case randconfig: name = "allrandom.config"; break; + default: break; + } + if (conf_read_simple(name, S_DEF_USER) && + conf_read_simple("all.config", S_DEF_USER)) { + fprintf(stderr, + "*** KCONFIG_ALLCONFIG set, but no \"%s\" or \"all.config\" file found\n", + name); + exit(1); + } + break; + default: + break; + } + + if (sync_kconfig) { + name = getenv("KCONFIG_NOSILENTUPDATE"); + if (name && *name) { + if (conf_get_changed()) { + fprintf(stderr, + "\n*** The configuration requires explicit update.\n\n"); + return 1; + } + no_conf_write = 1; + } + } + + switch (input_mode) { + case allnoconfig: + conf_set_all_new_symbols(def_no); + break; + case allyesconfig: + conf_set_all_new_symbols(def_yes); + break; + case allmodconfig: + conf_set_all_new_symbols(def_mod); + break; + case alldefconfig: + conf_set_all_new_symbols(def_default); + break; + case randconfig: + /* Really nothing to do in this loop */ + while (conf_set_all_new_symbols(def_random)) ; + break; + case defconfig: + conf_set_all_new_symbols(def_default); + break; + case savedefconfig: + break; + case yes2modconfig: + conf_rewrite_mod_or_yes(def_y2m); + break; + case mod2yesconfig: + conf_rewrite_mod_or_yes(def_m2y); + break; + case oldaskconfig: + rootEntry = &rootmenu; + conf(&rootmenu); + input_mode = oldconfig; + /* fall through */ + case oldconfig: + case listnewconfig: + case helpnewconfig: + case syncconfig: + /* Update until a loop caused no more changes */ + do { + conf_cnt = 0; + check_conf(&rootmenu); + } while (conf_cnt); + break; + case olddefconfig: + default: + break; + } + + if (input_mode == savedefconfig) { + if (conf_write_defconfig(defconfig_file)) { + fprintf(stderr, "n*** Error while saving defconfig to: %s\n\n", + defconfig_file); + return 1; + } + } else if (input_mode != listnewconfig && input_mode != helpnewconfig) { + if (!no_conf_write && conf_write(NULL)) { + fprintf(stderr, "\n*** Error during writing of the configuration.\n\n"); + exit(1); + } + + /* + * Create auto.conf if it does not exist. + * This prevents GNU Make 4.1 or older from emitting + * "include/config/auto.conf: No such file or directory" + * in the top-level Makefile + * + * syncconfig always creates or updates auto.conf because it is + * used during the build. + */ + if (conf_write_autoconf(sync_kconfig) && sync_kconfig) { + fprintf(stderr, + "\n*** Error during sync of the configuration.\n\n"); + return 1; + } + } + return 0; +} diff --git a/libraries/NEMU/tools/kconfig/confdata.c b/libraries/NEMU/tools/kconfig/confdata.c new file mode 100644 index 0000000..a39d93e --- /dev/null +++ b/libraries/NEMU/tools/kconfig/confdata.c @@ -0,0 +1,1338 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2002 Roman Zippel + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "lkc.h" + +/* return true if 'path' exists, false otherwise */ +static bool is_present(const char *path) +{ + struct stat st; + + return !stat(path, &st); +} + +/* return true if 'path' exists and it is a directory, false otherwise */ +static bool is_dir(const char *path) +{ + struct stat st; + + if (stat(path, &st)) + return 0; + + return S_ISDIR(st.st_mode); +} + +/* return true if the given two files are the same, false otherwise */ +static bool is_same(const char *file1, const char *file2) +{ + int fd1, fd2; + struct stat st1, st2; + void *map1, *map2; + bool ret = false; + + fd1 = open(file1, O_RDONLY); + if (fd1 < 0) + return ret; + + fd2 = open(file2, O_RDONLY); + if (fd2 < 0) + goto close1; + + ret = fstat(fd1, &st1); + if (ret) + goto close2; + ret = fstat(fd2, &st2); + if (ret) + goto close2; + + if (st1.st_size != st2.st_size) + goto close2; + + map1 = mmap(NULL, st1.st_size, PROT_READ, MAP_PRIVATE, fd1, 0); + if (map1 == MAP_FAILED) + goto close2; + + map2 = mmap(NULL, st2.st_size, PROT_READ, MAP_PRIVATE, fd2, 0); + if (map2 == MAP_FAILED) + goto close2; + + if (bcmp(map1, map2, st1.st_size)) + goto close2; + + ret = true; +close2: + close(fd2); +close1: + close(fd1); + + return ret; +} + +/* + * Create the parent directory of the given path. + * + * For example, if 'include/config/auto.conf' is given, create 'include/config'. + */ +static int make_parent_dir(const char *path) +{ + char tmp[PATH_MAX + 1]; + char *p; + + strncpy(tmp, path, sizeof(tmp)); + tmp[sizeof(tmp) - 1] = 0; + + /* Remove the base name. Just return if nothing is left */ + p = strrchr(tmp, '/'); + if (!p) + return 0; + *(p + 1) = 0; + + /* Just in case it is an absolute path */ + p = tmp; + while (*p == '/') + p++; + + while ((p = strchr(p, '/'))) { + *p = 0; + + /* skip if the directory exists */ + if (!is_dir(tmp) && mkdir(tmp, 0755)) + return -1; + + *p = '/'; + while (*p == '/') + p++; + } + + return 0; +} + +static char depfile_path[PATH_MAX]; +static size_t depfile_prefix_len; + +/* touch depfile for symbol 'name' */ +static int conf_touch_dep(const char *name) +{ + int fd, ret; + const char *s; + char *d, c; + + /* check overflow: prefix + name + ".h" + '\0' must fit in buffer. */ + if (depfile_prefix_len + strlen(name) + 3 > sizeof(depfile_path)) + return -1; + + d = depfile_path + depfile_prefix_len; + s = name; + + while ((c = *s++)) + *d++ = (c == '_') ? '/' : tolower(c); + strcpy(d, ".h"); + + /* Assume directory path already exists. */ + fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd == -1) { + if (errno != ENOENT) + return -1; + + ret = make_parent_dir(depfile_path); + if (ret) + return ret; + + /* Try it again. */ + fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd == -1) + return -1; + } + close(fd); + + return 0; +} + +struct conf_printer { + void (*print_symbol)(FILE *, struct symbol *, const char *, void *); + void (*print_comment)(FILE *, const char *, void *); +}; + +static void conf_warning(const char *fmt, ...) + __attribute__ ((format (printf, 1, 2))); + +static void conf_message(const char *fmt, ...) + __attribute__ ((format (printf, 1, 2))); + +static const char *conf_filename; +static int conf_lineno, conf_warnings; + +static void conf_warning(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + fprintf(stderr, "%s:%d:warning: ", conf_filename, conf_lineno); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); + conf_warnings++; +} + +static void conf_default_message_callback(const char *s) +{ + printf("#\n# "); + printf("%s", s); + printf("\n#\n"); +} + +static void (*conf_message_callback)(const char *s) = + conf_default_message_callback; +void conf_set_message_callback(void (*fn)(const char *s)) +{ + conf_message_callback = fn; +} + +static void conf_message(const char *fmt, ...) +{ + va_list ap; + char buf[4096]; + + if (!conf_message_callback) + return; + + va_start(ap, fmt); + + vsnprintf(buf, sizeof(buf), fmt, ap); + conf_message_callback(buf); + va_end(ap); +} + +const char *conf_get_configname(void) +{ + char *name = getenv("KCONFIG_CONFIG"); + + return name ? name : ".config"; +} + +static const char *conf_get_autoconfig_name(void) +{ + char *name = getenv("KCONFIG_AUTOCONFIG"); + + return name ? name : "include/config/auto.conf"; +} + +static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p) +{ + char *p2; + + switch (sym->type) { + case S_TRISTATE: + if (p[0] == 'm') { + sym->def[def].tri = mod; + sym->flags |= def_flags; + break; + } + /* fall through */ + case S_BOOLEAN: + if (p[0] == 'y') { + sym->def[def].tri = yes; + sym->flags |= def_flags; + break; + } + if (p[0] == 'n') { + sym->def[def].tri = no; + sym->flags |= def_flags; + break; + } + if (def != S_DEF_AUTO) + conf_warning("symbol value '%s' invalid for %s", + p, sym->name); + return 1; + case S_STRING: + if (*p++ != '"') + break; + for (p2 = p; (p2 = strpbrk(p2, "\"\\")); p2++) { + if (*p2 == '"') { + *p2 = 0; + break; + } + memmove(p2, p2 + 1, strlen(p2)); + } + if (!p2) { + if (def != S_DEF_AUTO) + conf_warning("invalid string found"); + return 1; + } + /* fall through */ + case S_INT: + case S_HEX: + if (sym_string_valid(sym, p)) { + sym->def[def].val = xstrdup(p); + sym->flags |= def_flags; + } else { + if (def != S_DEF_AUTO) + conf_warning("symbol value '%s' invalid for %s", + p, sym->name); + return 1; + } + break; + default: + ; + } + return 0; +} + +#define LINE_GROWTH 16 +static int add_byte(int c, char **lineptr, size_t slen, size_t *n) +{ + char *nline; + size_t new_size = slen + 1; + if (new_size > *n) { + new_size += LINE_GROWTH - 1; + new_size *= 2; + nline = xrealloc(*lineptr, new_size); + if (!nline) + return -1; + + *lineptr = nline; + *n = new_size; + } + + (*lineptr)[slen] = c; + + return 0; +} + +static ssize_t compat_getline(char **lineptr, size_t *n, FILE *stream) +{ + char *line = *lineptr; + size_t slen = 0; + + for (;;) { + int c = getc(stream); + + switch (c) { + case '\n': + if (add_byte(c, &line, slen, n) < 0) + goto e_out; + slen++; + /* fall through */ + case EOF: + if (add_byte('\0', &line, slen, n) < 0) + goto e_out; + *lineptr = line; + if (slen == 0) + return -1; + return slen; + default: + if (add_byte(c, &line, slen, n) < 0) + goto e_out; + slen++; + } + } + +e_out: + line[slen-1] = '\0'; + *lineptr = line; + return -1; +} + +int conf_read_simple(const char *name, int def) +{ + FILE *in = NULL; + char *line = NULL; + size_t line_asize = 0; + char *p, *p2; + struct symbol *sym; + int i, def_flags; + + if (name) { + in = zconf_fopen(name); + } else { + struct property *prop; + + name = conf_get_configname(); + in = zconf_fopen(name); + if (in) + goto load; + sym_add_change_count(1); + if (!sym_defconfig_list) + return 1; + + for_all_defaults(sym_defconfig_list, prop) { + if (expr_calc_value(prop->visible.expr) == no || + prop->expr->type != E_SYMBOL) + continue; + sym_calc_value(prop->expr->left.sym); + name = sym_get_string_value(prop->expr->left.sym); + in = zconf_fopen(name); + if (in) { + conf_message("using defaults found in %s", + name); + goto load; + } + } + } + if (!in) + return 1; + +load: + conf_filename = name; + conf_lineno = 0; + conf_warnings = 0; + + def_flags = SYMBOL_DEF << def; + for_all_symbols(i, sym) { + sym->flags |= SYMBOL_CHANGED; + sym->flags &= ~(def_flags|SYMBOL_VALID); + if (sym_is_choice(sym)) + sym->flags |= def_flags; + switch (sym->type) { + case S_INT: + case S_HEX: + case S_STRING: + if (sym->def[def].val) + free(sym->def[def].val); + /* fall through */ + default: + sym->def[def].val = NULL; + sym->def[def].tri = no; + } + } + + while (compat_getline(&line, &line_asize, in) != -1) { + conf_lineno++; + sym = NULL; + if (line[0] == '#') { + if (memcmp(line + 2, CONFIG_, strlen(CONFIG_))) + continue; + p = strchr(line + 2 + strlen(CONFIG_), ' '); + if (!p) + continue; + *p++ = 0; + if (strncmp(p, "is not set", 10)) + continue; + if (def == S_DEF_USER) { + sym = sym_find(line + 2 + strlen(CONFIG_)); + if (!sym) { + sym_add_change_count(1); + continue; + } + } else { + sym = sym_lookup(line + 2 + strlen(CONFIG_), 0); + if (sym->type == S_UNKNOWN) + sym->type = S_BOOLEAN; + } + if (sym->flags & def_flags) { + conf_warning("override: reassigning to symbol %s", sym->name); + } + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + sym->def[def].tri = no; + sym->flags |= def_flags; + break; + default: + ; + } + } else if (memcmp(line, CONFIG_, strlen(CONFIG_)) == 0) { + p = strchr(line + strlen(CONFIG_), '='); + if (!p) + continue; + *p++ = 0; + p2 = strchr(p, '\n'); + if (p2) { + *p2-- = 0; + if (*p2 == '\r') + *p2 = 0; + } + + sym = sym_find(line + strlen(CONFIG_)); + if (!sym) { + if (def == S_DEF_AUTO) + /* + * Reading from include/config/auto.conf + * If CONFIG_FOO previously existed in + * auto.conf but it is missing now, + * include/config/foo.h must be touched. + */ + conf_touch_dep(line + strlen(CONFIG_)); + else + sym_add_change_count(1); + continue; + } + + if (sym->flags & def_flags) { + conf_warning("override: reassigning to symbol %s", sym->name); + } + if (conf_set_sym_val(sym, def, def_flags, p)) + continue; + } else { + if (line[0] != '\r' && line[0] != '\n') + conf_warning("unexpected data: %.*s", + (int)strcspn(line, "\r\n"), line); + + continue; + } + + if (sym && sym_is_choice_value(sym)) { + struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); + switch (sym->def[def].tri) { + case no: + break; + case mod: + if (cs->def[def].tri == yes) { + conf_warning("%s creates inconsistent choice state", sym->name); + cs->flags &= ~def_flags; + } + break; + case yes: + if (cs->def[def].tri != no) + conf_warning("override: %s changes choice state", sym->name); + cs->def[def].val = sym; + break; + } + cs->def[def].tri = EXPR_OR(cs->def[def].tri, sym->def[def].tri); + } + } + free(line); + fclose(in); + return 0; +} + +int conf_read(const char *name) +{ + struct symbol *sym; + int conf_unsaved = 0; + int i; + + sym_set_change_count(0); + + if (conf_read_simple(name, S_DEF_USER)) { + sym_calc_value(modules_sym); + return 1; + } + + sym_calc_value(modules_sym); + + for_all_symbols(i, sym) { + sym_calc_value(sym); + if (sym_is_choice(sym) || (sym->flags & SYMBOL_NO_WRITE)) + continue; + if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) { + /* check that calculated value agrees with saved value */ + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + if (sym->def[S_DEF_USER].tri == sym_get_tristate_value(sym)) + continue; + break; + default: + if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val)) + continue; + break; + } + } else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE)) + /* no previous value and not saved */ + continue; + conf_unsaved++; + /* maybe print value in verbose mode... */ + } + + for_all_symbols(i, sym) { + if (sym_has_value(sym) && !sym_is_choice_value(sym)) { + /* Reset values of generates values, so they'll appear + * as new, if they should become visible, but that + * doesn't quite work if the Kconfig and the saved + * configuration disagree. + */ + if (sym->visible == no && !conf_unsaved) + sym->flags &= ~SYMBOL_DEF_USER; + switch (sym->type) { + case S_STRING: + case S_INT: + case S_HEX: + /* Reset a string value if it's out of range */ + if (sym_string_within_range(sym, sym->def[S_DEF_USER].val)) + break; + sym->flags &= ~(SYMBOL_VALID|SYMBOL_DEF_USER); + conf_unsaved++; + break; + default: + break; + } + } + } + + sym_add_change_count(conf_warnings || conf_unsaved); + + return 0; +} + +/* + * Kconfig configuration printer + * + * This printer is used when generating the resulting configuration after + * kconfig invocation and `defconfig' files. Unset symbol might be omitted by + * passing a non-NULL argument to the printer. + * + */ +static void +kconfig_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg) +{ + + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + if (*value == 'n') { + bool skip_unset = (arg != NULL); + + if (!skip_unset) + fprintf(fp, "# %s%s is not set\n", + CONFIG_, sym->name); + return; + } + break; + default: + break; + } + + fprintf(fp, "%s%s=%s\n", CONFIG_, sym->name, value); +} + +static void +kconfig_print_comment(FILE *fp, const char *value, void *arg) +{ + const char *p = value; + size_t l; + + for (;;) { + l = strcspn(p, "\n"); + fprintf(fp, "#"); + if (l) { + fprintf(fp, " "); + xfwrite(p, l, 1, fp); + p += l; + } + fprintf(fp, "\n"); + if (*p++ == '\0') + break; + } +} + +static struct conf_printer kconfig_printer_cb = +{ + .print_symbol = kconfig_print_symbol, + .print_comment = kconfig_print_comment, +}; + +/* + * Header printer + * + * This printer is used when generating the `include/generated/autoconf.h' file. + */ +static void +header_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg) +{ + + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: { + const char *suffix = ""; + + switch (*value) { + case 'n': + break; + case 'm': + suffix = "_MODULE"; + /* fall through */ + default: + fprintf(fp, "#define %s%s%s 1\n", + CONFIG_, sym->name, suffix); + } + break; + } + case S_HEX: { + const char *prefix = ""; + + if (value[0] != '0' || (value[1] != 'x' && value[1] != 'X')) + prefix = "0x"; + fprintf(fp, "#define %s%s %s%s\n", + CONFIG_, sym->name, prefix, value); + break; + } + case S_STRING: + case S_INT: + fprintf(fp, "#define %s%s %s\n", + CONFIG_, sym->name, value); + break; + default: + break; + } + +} + +static void +header_print_comment(FILE *fp, const char *value, void *arg) +{ + const char *p = value; + size_t l; + + fprintf(fp, "/*\n"); + for (;;) { + l = strcspn(p, "\n"); + fprintf(fp, " *"); + if (l) { + fprintf(fp, " "); + xfwrite(p, l, 1, fp); + p += l; + } + fprintf(fp, "\n"); + if (*p++ == '\0') + break; + } + fprintf(fp, " */\n"); +} + +static struct conf_printer header_printer_cb = +{ + .print_symbol = header_print_symbol, + .print_comment = header_print_comment, +}; + +static void conf_write_symbol(FILE *fp, struct symbol *sym, + struct conf_printer *printer, void *printer_arg) +{ + const char *str; + + switch (sym->type) { + case S_UNKNOWN: + break; + case S_STRING: + str = sym_get_string_value(sym); + str = sym_escape_string_value(str); + printer->print_symbol(fp, sym, str, printer_arg); + free((void *)str); + break; + default: + str = sym_get_string_value(sym); + printer->print_symbol(fp, sym, str, printer_arg); + } +} + +static void +conf_write_heading(FILE *fp, struct conf_printer *printer, void *printer_arg) +{ + char buf[256]; + + snprintf(buf, sizeof(buf), + "\n" + "Automatically generated file; DO NOT EDIT.\n" + "%s\n", + rootmenu.prompt->text); + + printer->print_comment(fp, buf, printer_arg); +} + +/* + * Write out a minimal config. + * All values that has default values are skipped as this is redundant. + */ +int conf_write_defconfig(const char *filename) +{ + struct symbol *sym; + struct menu *menu; + FILE *out; + + out = fopen(filename, "w"); + if (!out) + return 1; + + sym_clear_all_valid(); + + /* Traverse all menus to find all relevant symbols */ + menu = rootmenu.list; + + while (menu != NULL) + { + sym = menu->sym; + if (sym == NULL) { + if (!menu_is_visible(menu)) + goto next_menu; + } else if (!sym_is_choice(sym)) { + sym_calc_value(sym); + if (!(sym->flags & SYMBOL_WRITE)) + goto next_menu; + sym->flags &= ~SYMBOL_WRITE; + /* If we cannot change the symbol - skip */ + if (!sym_is_changeable(sym)) + goto next_menu; + /* If symbol equals to default value - skip */ + if (strcmp(sym_get_string_value(sym), sym_get_string_default(sym)) == 0) + goto next_menu; + + /* + * If symbol is a choice value and equals to the + * default for a choice - skip. + * But only if value is bool and equal to "y" and + * choice is not "optional". + * (If choice is "optional" then all values can be "n") + */ + if (sym_is_choice_value(sym)) { + struct symbol *cs; + struct symbol *ds; + + cs = prop_get_symbol(sym_get_choice_prop(sym)); + ds = sym_choice_default(cs); + if (!sym_is_optional(cs) && sym == ds) { + if ((sym->type == S_BOOLEAN) && + sym_get_tristate_value(sym) == yes) + goto next_menu; + } + } + conf_write_symbol(out, sym, &kconfig_printer_cb, NULL); + } +next_menu: + if (menu->list != NULL) { + menu = menu->list; + } + else if (menu->next != NULL) { + menu = menu->next; + } else { + while ((menu = menu->parent)) { + if (menu->next != NULL) { + menu = menu->next; + break; + } + } + } + } + fclose(out); + return 0; +} + +int conf_write(const char *name) +{ + FILE *out; + struct symbol *sym; + struct menu *menu; + const char *str; + char tmpname[PATH_MAX + 1], oldname[PATH_MAX + 1]; + char *env; + int i; + bool need_newline = false; + + if (!name) + name = conf_get_configname(); + + if (!*name) { + fprintf(stderr, "config name is empty\n"); + return -1; + } + + if (is_dir(name)) { + fprintf(stderr, "%s: Is a directory\n", name); + return -1; + } + + if (make_parent_dir(name)) + return -1; + + env = getenv("KCONFIG_OVERWRITECONFIG"); + if (env && *env) { + *tmpname = 0; + out = fopen(name, "w"); + } else { + snprintf(tmpname, sizeof(tmpname), "%s.%d.tmp", + name, (int)getpid()); + out = fopen(tmpname, "w"); + } + if (!out) + return 1; + + conf_write_heading(out, &kconfig_printer_cb, NULL); + + if (!conf_get_changed()) + sym_clear_all_valid(); + + menu = rootmenu.list; + while (menu) { + sym = menu->sym; + if (!sym) { + if (!menu_is_visible(menu)) + goto next; + str = menu_get_prompt(menu); + fprintf(out, "\n" + "#\n" + "# %s\n" + "#\n", str); + need_newline = false; + } else if (!(sym->flags & SYMBOL_CHOICE) && + !(sym->flags & SYMBOL_WRITTEN)) { + sym_calc_value(sym); + if (!(sym->flags & SYMBOL_WRITE)) + goto next; + if (need_newline) { + fprintf(out, "\n"); + need_newline = false; + } + sym->flags |= SYMBOL_WRITTEN; + conf_write_symbol(out, sym, &kconfig_printer_cb, NULL); + } + +next: + if (menu->list) { + menu = menu->list; + continue; + } + if (menu->next) + menu = menu->next; + else while ((menu = menu->parent)) { + if (!menu->sym && menu_is_visible(menu) && + menu != &rootmenu) { + str = menu_get_prompt(menu); + fprintf(out, "# end of %s\n", str); + need_newline = true; + } + if (menu->next) { + menu = menu->next; + break; + } + } + } + fclose(out); + + for_all_symbols(i, sym) + sym->flags &= ~SYMBOL_WRITTEN; + + if (*tmpname) { + if (is_same(name, tmpname)) { + conf_message("No change to %s", name); + unlink(tmpname); + sym_set_change_count(0); + return 0; + } + + snprintf(oldname, sizeof(oldname), "%s.old", name); + rename(name, oldname); + if (rename(tmpname, name)) + return 1; + } + + conf_message("configuration written to %s", name); + + sym_set_change_count(0); + + return 0; +} + +/* write a dependency file as used by kbuild to track dependencies */ +static int conf_write_dep(const char *name) +{ + struct file *file; + FILE *out; + + out = fopen("..config.tmp", "w"); + if (!out) + return 1; + fprintf(out, "deps_config := \\\n"); + for (file = file_list; file; file = file->next) { + if (file->next) + fprintf(out, "\t%s \\\n", file->name); + else + fprintf(out, "\t%s\n", file->name); + } + fprintf(out, "\n%s: \\\n" + "\t$(deps_config)\n\n", conf_get_autoconfig_name()); + + env_write_dep(out, conf_get_autoconfig_name()); + + fprintf(out, "\n$(deps_config): ;\n"); + fclose(out); + + if (make_parent_dir(name)) + return 1; + rename("..config.tmp", name); + return 0; +} + +static int conf_touch_deps(void) +{ + const char *name; + struct symbol *sym; + int res, i; + + strcpy(depfile_path, "include/config/"); + depfile_prefix_len = strlen(depfile_path); + + name = conf_get_autoconfig_name(); + conf_read_simple(name, S_DEF_AUTO); + sym_calc_value(modules_sym); + + for_all_symbols(i, sym) { + sym_calc_value(sym); + if ((sym->flags & SYMBOL_NO_WRITE) || !sym->name) + continue; + if (sym->flags & SYMBOL_WRITE) { + if (sym->flags & SYMBOL_DEF_AUTO) { + /* + * symbol has old and new value, + * so compare them... + */ + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + if (sym_get_tristate_value(sym) == + sym->def[S_DEF_AUTO].tri) + continue; + break; + case S_STRING: + case S_HEX: + case S_INT: + if (!strcmp(sym_get_string_value(sym), + sym->def[S_DEF_AUTO].val)) + continue; + break; + default: + break; + } + } else { + /* + * If there is no old value, only 'no' (unset) + * is allowed as new value. + */ + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + if (sym_get_tristate_value(sym) == no) + continue; + break; + default: + break; + } + } + } else if (!(sym->flags & SYMBOL_DEF_AUTO)) + /* There is neither an old nor a new value. */ + continue; + /* else + * There is an old value, but no new value ('no' (unset) + * isn't saved in auto.conf, so the old value is always + * different from 'no'). + */ + + res = conf_touch_dep(sym->name); + if (res) + return res; + } + + return 0; +} + +int conf_write_autoconf(int overwrite) +{ + struct symbol *sym; + const char *name; + const char *autoconf_name = conf_get_autoconfig_name(); + FILE *out, *out_h; + int i; + + if (!overwrite && is_present(autoconf_name)) + return 0; + + conf_write_dep("include/config/auto.conf.cmd"); + + if (conf_touch_deps()) + return 1; + + out = fopen(".tmpconfig", "w"); + if (!out) + return 1; + + out_h = fopen(".tmpconfig.h", "w"); + if (!out_h) { + fclose(out); + return 1; + } + + conf_write_heading(out, &kconfig_printer_cb, NULL); + conf_write_heading(out_h, &header_printer_cb, NULL); + + for_all_symbols(i, sym) { + sym_calc_value(sym); + if (!(sym->flags & SYMBOL_WRITE) || !sym->name) + continue; + + /* write symbols to auto.conf and autoconf.h */ + conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1); + conf_write_symbol(out_h, sym, &header_printer_cb, NULL); + } + fclose(out); + fclose(out_h); + + name = getenv("KCONFIG_AUTOHEADER"); + if (!name) + name = "include/generated/autoconf.h"; + if (make_parent_dir(name)) + return 1; + if (rename(".tmpconfig.h", name)) + return 1; + + if (make_parent_dir(autoconf_name)) + return 1; + /* + * This must be the last step, kbuild has a dependency on auto.conf + * and this marks the successful completion of the previous steps. + */ + if (rename(".tmpconfig", autoconf_name)) + return 1; + + return 0; +} + +static int sym_change_count; +static void (*conf_changed_callback)(void); + +void sym_set_change_count(int count) +{ + int _sym_change_count = sym_change_count; + sym_change_count = count; + if (conf_changed_callback && + (bool)_sym_change_count != (bool)count) + conf_changed_callback(); +} + +void sym_add_change_count(int count) +{ + sym_set_change_count(count + sym_change_count); +} + +bool conf_get_changed(void) +{ + return sym_change_count; +} + +void conf_set_changed_callback(void (*fn)(void)) +{ + conf_changed_callback = fn; +} + +static bool randomize_choice_values(struct symbol *csym) +{ + struct property *prop; + struct symbol *sym; + struct expr *e; + int cnt, def; + + /* + * If choice is mod then we may have more items selected + * and if no then no-one. + * In both cases stop. + */ + if (csym->curr.tri != yes) + return false; + + prop = sym_get_choice_prop(csym); + + /* count entries in choice block */ + cnt = 0; + expr_list_for_each_sym(prop->expr, e, sym) + cnt++; + + /* + * find a random value and set it to yes, + * set the rest to no so we have only one set + */ + def = (rand() % cnt); + + cnt = 0; + expr_list_for_each_sym(prop->expr, e, sym) { + if (def == cnt++) { + sym->def[S_DEF_USER].tri = yes; + csym->def[S_DEF_USER].val = sym; + } + else { + sym->def[S_DEF_USER].tri = no; + } + sym->flags |= SYMBOL_DEF_USER; + /* clear VALID to get value calculated */ + sym->flags &= ~SYMBOL_VALID; + } + csym->flags |= SYMBOL_DEF_USER; + /* clear VALID to get value calculated */ + csym->flags &= ~(SYMBOL_VALID); + + return true; +} + +void set_all_choice_values(struct symbol *csym) +{ + struct property *prop; + struct symbol *sym; + struct expr *e; + + prop = sym_get_choice_prop(csym); + + /* + * Set all non-assinged choice values to no + */ + expr_list_for_each_sym(prop->expr, e, sym) { + if (!sym_has_value(sym)) + sym->def[S_DEF_USER].tri = no; + } + csym->flags |= SYMBOL_DEF_USER; + /* clear VALID to get value calculated */ + csym->flags &= ~(SYMBOL_VALID | SYMBOL_NEED_SET_CHOICE_VALUES); +} + +bool conf_set_all_new_symbols(enum conf_def_mode mode) +{ + struct symbol *sym, *csym; + int i, cnt, pby, pty, ptm; /* pby: probability of bool = y + * pty: probability of tristate = y + * ptm: probability of tristate = m + */ + + pby = 50; pty = ptm = 33; /* can't go as the default in switch-case + * below, otherwise gcc whines about + * -Wmaybe-uninitialized */ + if (mode == def_random) { + int n, p[3]; + char *env = getenv("KCONFIG_PROBABILITY"); + n = 0; + while( env && *env ) { + char *endp; + int tmp = strtol( env, &endp, 10 ); + if( tmp >= 0 && tmp <= 100 ) { + p[n++] = tmp; + } else { + errno = ERANGE; + perror( "KCONFIG_PROBABILITY" ); + exit( 1 ); + } + env = (*endp == ':') ? endp+1 : endp; + if( n >=3 ) { + break; + } + } + switch( n ) { + case 1: + pby = p[0]; ptm = pby/2; pty = pby-ptm; + break; + case 2: + pty = p[0]; ptm = p[1]; pby = pty + ptm; + break; + case 3: + pby = p[0]; pty = p[1]; ptm = p[2]; + break; + } + + if( pty+ptm > 100 ) { + errno = ERANGE; + perror( "KCONFIG_PROBABILITY" ); + exit( 1 ); + } + } + bool has_changed = false; + + for_all_symbols(i, sym) { + if (sym_has_value(sym) || (sym->flags & SYMBOL_VALID)) + continue; + switch (sym_get_type(sym)) { + case S_BOOLEAN: + case S_TRISTATE: + has_changed = true; + switch (mode) { + case def_yes: + sym->def[S_DEF_USER].tri = yes; + break; + case def_mod: + sym->def[S_DEF_USER].tri = mod; + break; + case def_no: + if (sym->flags & SYMBOL_ALLNOCONFIG_Y) + sym->def[S_DEF_USER].tri = yes; + else + sym->def[S_DEF_USER].tri = no; + break; + case def_random: + sym->def[S_DEF_USER].tri = no; + cnt = rand() % 100; + if (sym->type == S_TRISTATE) { + if (cnt < pty) + sym->def[S_DEF_USER].tri = yes; + else if (cnt < (pty+ptm)) + sym->def[S_DEF_USER].tri = mod; + } else if (cnt < pby) + sym->def[S_DEF_USER].tri = yes; + break; + default: + continue; + } + if (!(sym_is_choice(sym) && mode == def_random)) + sym->flags |= SYMBOL_DEF_USER; + break; + default: + break; + } + + } + + sym_clear_all_valid(); + + /* + * We have different type of choice blocks. + * If curr.tri equals to mod then we can select several + * choice symbols in one block. + * In this case we do nothing. + * If curr.tri equals yes then only one symbol can be + * selected in a choice block and we set it to yes, + * and the rest to no. + */ + if (mode != def_random) { + for_all_symbols(i, csym) { + if ((sym_is_choice(csym) && !sym_has_value(csym)) || + sym_is_choice_value(csym)) + csym->flags |= SYMBOL_NEED_SET_CHOICE_VALUES; + } + } + + for_all_symbols(i, csym) { + if (sym_has_value(csym) || !sym_is_choice(csym)) + continue; + + sym_calc_value(csym); + if (mode == def_random) + has_changed |= randomize_choice_values(csym); + else { + set_all_choice_values(csym); + has_changed = true; + } + } + + return has_changed; +} + +void conf_rewrite_mod_or_yes(enum conf_def_mode mode) +{ + struct symbol *sym; + int i; + tristate old_val = (mode == def_y2m) ? yes : mod; + tristate new_val = (mode == def_y2m) ? mod : yes; + + for_all_symbols(i, sym) { + if (sym_get_type(sym) == S_TRISTATE && + sym->def[S_DEF_USER].tri == old_val) + sym->def[S_DEF_USER].tri = new_val; + } + sym_clear_all_valid(); +} diff --git a/libraries/NEMU/tools/kconfig/expr.c b/libraries/NEMU/tools/kconfig/expr.c new file mode 100644 index 0000000..81ebf81 --- /dev/null +++ b/libraries/NEMU/tools/kconfig/expr.c @@ -0,0 +1,1303 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2002 Roman Zippel + */ + +#include +#include +#include +#include +#include + +#include "lkc.h" + +#define DEBUG_EXPR 0 + +static struct expr *expr_eliminate_yn(struct expr *e); + +struct expr *expr_alloc_symbol(struct symbol *sym) +{ + struct expr *e = xcalloc(1, sizeof(*e)); + e->type = E_SYMBOL; + e->left.sym = sym; + return e; +} + +struct expr *expr_alloc_one(enum expr_type type, struct expr *ce) +{ + struct expr *e = xcalloc(1, sizeof(*e)); + e->type = type; + e->left.expr = ce; + return e; +} + +struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2) +{ + struct expr *e = xcalloc(1, sizeof(*e)); + e->type = type; + e->left.expr = e1; + e->right.expr = e2; + return e; +} + +struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2) +{ + struct expr *e = xcalloc(1, sizeof(*e)); + e->type = type; + e->left.sym = s1; + e->right.sym = s2; + return e; +} + +struct expr *expr_alloc_and(struct expr *e1, struct expr *e2) +{ + if (!e1) + return e2; + return e2 ? expr_alloc_two(E_AND, e1, e2) : e1; +} + +struct expr *expr_alloc_or(struct expr *e1, struct expr *e2) +{ + if (!e1) + return e2; + return e2 ? expr_alloc_two(E_OR, e1, e2) : e1; +} + +struct expr *expr_copy(const struct expr *org) +{ + struct expr *e; + + if (!org) + return NULL; + + e = xmalloc(sizeof(*org)); + memcpy(e, org, sizeof(*org)); + switch (org->type) { + case E_SYMBOL: + e->left = org->left; + break; + case E_NOT: + e->left.expr = expr_copy(org->left.expr); + break; + case E_EQUAL: + case E_GEQ: + case E_GTH: + case E_LEQ: + case E_LTH: + case E_UNEQUAL: + e->left.sym = org->left.sym; + e->right.sym = org->right.sym; + break; + case E_AND: + case E_OR: + case E_LIST: + e->left.expr = expr_copy(org->left.expr); + e->right.expr = expr_copy(org->right.expr); + break; + default: + fprintf(stderr, "can't copy type %d\n", e->type); + free(e); + e = NULL; + break; + } + + return e; +} + +void expr_free(struct expr *e) +{ + if (!e) + return; + + switch (e->type) { + case E_SYMBOL: + break; + case E_NOT: + expr_free(e->left.expr); + break; + case E_EQUAL: + case E_GEQ: + case E_GTH: + case E_LEQ: + case E_LTH: + case E_UNEQUAL: + break; + case E_OR: + case E_AND: + expr_free(e->left.expr); + expr_free(e->right.expr); + break; + default: + fprintf(stderr, "how to free type %d?\n", e->type); + break; + } + free(e); +} + +static int trans_count; + +#define e1 (*ep1) +#define e2 (*ep2) + +/* + * expr_eliminate_eq() helper. + * + * Walks the two expression trees given in 'ep1' and 'ep2'. Any node that does + * not have type 'type' (E_OR/E_AND) is considered a leaf, and is compared + * against all other leaves. Two equal leaves are both replaced with either 'y' + * or 'n' as appropriate for 'type', to be eliminated later. + */ +static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2) +{ + /* Recurse down to leaves */ + + if (e1->type == type) { + __expr_eliminate_eq(type, &e1->left.expr, &e2); + __expr_eliminate_eq(type, &e1->right.expr, &e2); + return; + } + if (e2->type == type) { + __expr_eliminate_eq(type, &e1, &e2->left.expr); + __expr_eliminate_eq(type, &e1, &e2->right.expr); + return; + } + + /* e1 and e2 are leaves. Compare them. */ + + if (e1->type == E_SYMBOL && e2->type == E_SYMBOL && + e1->left.sym == e2->left.sym && + (e1->left.sym == &symbol_yes || e1->left.sym == &symbol_no)) + return; + if (!expr_eq(e1, e2)) + return; + + /* e1 and e2 are equal leaves. Prepare them for elimination. */ + + trans_count++; + expr_free(e1); expr_free(e2); + switch (type) { + case E_OR: + e1 = expr_alloc_symbol(&symbol_no); + e2 = expr_alloc_symbol(&symbol_no); + break; + case E_AND: + e1 = expr_alloc_symbol(&symbol_yes); + e2 = expr_alloc_symbol(&symbol_yes); + break; + default: + ; + } +} + +/* + * Rewrites the expressions 'ep1' and 'ep2' to remove operands common to both. + * Example reductions: + * + * ep1: A && B -> ep1: y + * ep2: A && B && C -> ep2: C + * + * ep1: A || B -> ep1: n + * ep2: A || B || C -> ep2: C + * + * ep1: A && (B && FOO) -> ep1: FOO + * ep2: (BAR && B) && A -> ep2: BAR + * + * ep1: A && (B || C) -> ep1: y + * ep2: (C || B) && A -> ep2: y + * + * Comparisons are done between all operands at the same "level" of && or ||. + * For example, in the expression 'e1 && (e2 || e3) && (e4 || e5)', the + * following operands will be compared: + * + * - 'e1', 'e2 || e3', and 'e4 || e5', against each other + * - e2 against e3 + * - e4 against e5 + * + * Parentheses are irrelevant within a single level. 'e1 && (e2 && e3)' and + * '(e1 && e2) && e3' are both a single level. + * + * See __expr_eliminate_eq() as well. + */ +void expr_eliminate_eq(struct expr **ep1, struct expr **ep2) +{ + if (!e1 || !e2) + return; + switch (e1->type) { + case E_OR: + case E_AND: + __expr_eliminate_eq(e1->type, ep1, ep2); + default: + ; + } + if (e1->type != e2->type) switch (e2->type) { + case E_OR: + case E_AND: + __expr_eliminate_eq(e2->type, ep1, ep2); + default: + ; + } + e1 = expr_eliminate_yn(e1); + e2 = expr_eliminate_yn(e2); +} + +#undef e1 +#undef e2 + +/* + * Returns true if 'e1' and 'e2' are equal, after minor simplification. Two + * &&/|| expressions are considered equal if every operand in one expression + * equals some operand in the other (operands do not need to appear in the same + * order), recursively. + */ +int expr_eq(struct expr *e1, struct expr *e2) +{ + int res, old_count; + + /* + * A NULL expr is taken to be yes, but there's also a different way to + * represent yes. expr_is_yes() checks for either representation. + */ + if (!e1 || !e2) + return expr_is_yes(e1) && expr_is_yes(e2); + + if (e1->type != e2->type) + return 0; + switch (e1->type) { + case E_EQUAL: + case E_GEQ: + case E_GTH: + case E_LEQ: + case E_LTH: + case E_UNEQUAL: + return e1->left.sym == e2->left.sym && e1->right.sym == e2->right.sym; + case E_SYMBOL: + return e1->left.sym == e2->left.sym; + case E_NOT: + return expr_eq(e1->left.expr, e2->left.expr); + case E_AND: + case E_OR: + e1 = expr_copy(e1); + e2 = expr_copy(e2); + old_count = trans_count; + expr_eliminate_eq(&e1, &e2); + res = (e1->type == E_SYMBOL && e2->type == E_SYMBOL && + e1->left.sym == e2->left.sym); + expr_free(e1); + expr_free(e2); + trans_count = old_count; + return res; + case E_LIST: + case E_RANGE: + case E_NONE: + /* panic */; + } + + if (DEBUG_EXPR) { + expr_fprint(e1, stdout); + printf(" = "); + expr_fprint(e2, stdout); + printf(" ?\n"); + } + + return 0; +} + +/* + * Recursively performs the following simplifications in-place (as well as the + * corresponding simplifications with swapped operands): + * + * expr && n -> n + * expr && y -> expr + * expr || n -> expr + * expr || y -> y + * + * Returns the optimized expression. + */ +static struct expr *expr_eliminate_yn(struct expr *e) +{ + struct expr *tmp; + + if (e) switch (e->type) { + case E_AND: + e->left.expr = expr_eliminate_yn(e->left.expr); + e->right.expr = expr_eliminate_yn(e->right.expr); + if (e->left.expr->type == E_SYMBOL) { + if (e->left.expr->left.sym == &symbol_no) { + expr_free(e->left.expr); + expr_free(e->right.expr); + e->type = E_SYMBOL; + e->left.sym = &symbol_no; + e->right.expr = NULL; + return e; + } else if (e->left.expr->left.sym == &symbol_yes) { + free(e->left.expr); + tmp = e->right.expr; + *e = *(e->right.expr); + free(tmp); + return e; + } + } + if (e->right.expr->type == E_SYMBOL) { + if (e->right.expr->left.sym == &symbol_no) { + expr_free(e->left.expr); + expr_free(e->right.expr); + e->type = E_SYMBOL; + e->left.sym = &symbol_no; + e->right.expr = NULL; + return e; + } else if (e->right.expr->left.sym == &symbol_yes) { + free(e->right.expr); + tmp = e->left.expr; + *e = *(e->left.expr); + free(tmp); + return e; + } + } + break; + case E_OR: + e->left.expr = expr_eliminate_yn(e->left.expr); + e->right.expr = expr_eliminate_yn(e->right.expr); + if (e->left.expr->type == E_SYMBOL) { + if (e->left.expr->left.sym == &symbol_no) { + free(e->left.expr); + tmp = e->right.expr; + *e = *(e->right.expr); + free(tmp); + return e; + } else if (e->left.expr->left.sym == &symbol_yes) { + expr_free(e->left.expr); + expr_free(e->right.expr); + e->type = E_SYMBOL; + e->left.sym = &symbol_yes; + e->right.expr = NULL; + return e; + } + } + if (e->right.expr->type == E_SYMBOL) { + if (e->right.expr->left.sym == &symbol_no) { + free(e->right.expr); + tmp = e->left.expr; + *e = *(e->left.expr); + free(tmp); + return e; + } else if (e->right.expr->left.sym == &symbol_yes) { + expr_free(e->left.expr); + expr_free(e->right.expr); + e->type = E_SYMBOL; + e->left.sym = &symbol_yes; + e->right.expr = NULL; + return e; + } + } + break; + default: + ; + } + return e; +} + +/* + * bool FOO!=n => FOO + */ +struct expr *expr_trans_bool(struct expr *e) +{ + if (!e) + return NULL; + switch (e->type) { + case E_AND: + case E_OR: + case E_NOT: + e->left.expr = expr_trans_bool(e->left.expr); + e->right.expr = expr_trans_bool(e->right.expr); + break; + case E_UNEQUAL: + // FOO!=n -> FOO + if (e->left.sym->type == S_TRISTATE) { + if (e->right.sym == &symbol_no) { + e->type = E_SYMBOL; + e->right.sym = NULL; + } + } + break; + default: + ; + } + return e; +} + +/* + * e1 || e2 -> ? + */ +static struct expr *expr_join_or(struct expr *e1, struct expr *e2) +{ + struct expr *tmp; + struct symbol *sym1, *sym2; + + if (expr_eq(e1, e2)) + return expr_copy(e1); + if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT) + return NULL; + if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT) + return NULL; + if (e1->type == E_NOT) { + tmp = e1->left.expr; + if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL) + return NULL; + sym1 = tmp->left.sym; + } else + sym1 = e1->left.sym; + if (e2->type == E_NOT) { + if (e2->left.expr->type != E_SYMBOL) + return NULL; + sym2 = e2->left.expr->left.sym; + } else + sym2 = e2->left.sym; + if (sym1 != sym2) + return NULL; + if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE) + return NULL; + if (sym1->type == S_TRISTATE) { + if (e1->type == E_EQUAL && e2->type == E_EQUAL && + ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || + (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) { + // (a='y') || (a='m') -> (a!='n') + return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_no); + } + if (e1->type == E_EQUAL && e2->type == E_EQUAL && + ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || + (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) { + // (a='y') || (a='n') -> (a!='m') + return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_mod); + } + if (e1->type == E_EQUAL && e2->type == E_EQUAL && + ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || + (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) { + // (a='m') || (a='n') -> (a!='y') + return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_yes); + } + } + if (sym1->type == S_BOOLEAN && sym1 == sym2) { + if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) || + (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL)) + return expr_alloc_symbol(&symbol_yes); + } + + if (DEBUG_EXPR) { + printf("optimize ("); + expr_fprint(e1, stdout); + printf(") || ("); + expr_fprint(e2, stdout); + printf(")?\n"); + } + return NULL; +} + +static struct expr *expr_join_and(struct expr *e1, struct expr *e2) +{ + struct expr *tmp; + struct symbol *sym1, *sym2; + + if (expr_eq(e1, e2)) + return expr_copy(e1); + if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT) + return NULL; + if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT) + return NULL; + if (e1->type == E_NOT) { + tmp = e1->left.expr; + if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL) + return NULL; + sym1 = tmp->left.sym; + } else + sym1 = e1->left.sym; + if (e2->type == E_NOT) { + if (e2->left.expr->type != E_SYMBOL) + return NULL; + sym2 = e2->left.expr->left.sym; + } else + sym2 = e2->left.sym; + if (sym1 != sym2) + return NULL; + if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE) + return NULL; + + if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_yes) || + (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_yes)) + // (a) && (a='y') -> (a='y') + return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes); + + if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_no) || + (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_no)) + // (a) && (a!='n') -> (a) + return expr_alloc_symbol(sym1); + + if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_mod) || + (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_mod)) + // (a) && (a!='m') -> (a='y') + return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes); + + if (sym1->type == S_TRISTATE) { + if (e1->type == E_EQUAL && e2->type == E_UNEQUAL) { + // (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b' + sym2 = e1->right.sym; + if ((e2->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST)) + return sym2 != e2->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2) + : expr_alloc_symbol(&symbol_no); + } + if (e1->type == E_UNEQUAL && e2->type == E_EQUAL) { + // (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b' + sym2 = e2->right.sym; + if ((e1->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST)) + return sym2 != e1->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2) + : expr_alloc_symbol(&symbol_no); + } + if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && + ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || + (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) + // (a!='y') && (a!='n') -> (a='m') + return expr_alloc_comp(E_EQUAL, sym1, &symbol_mod); + + if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && + ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || + (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) + // (a!='y') && (a!='m') -> (a='n') + return expr_alloc_comp(E_EQUAL, sym1, &symbol_no); + + if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && + ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || + (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) + // (a!='m') && (a!='n') -> (a='m') + return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes); + + if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_mod) || + (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_mod) || + (e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_yes) || + (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_yes)) + return NULL; + } + + if (DEBUG_EXPR) { + printf("optimize ("); + expr_fprint(e1, stdout); + printf(") && ("); + expr_fprint(e2, stdout); + printf(")?\n"); + } + return NULL; +} + +/* + * expr_eliminate_dups() helper. + * + * Walks the two expression trees given in 'ep1' and 'ep2'. Any node that does + * not have type 'type' (E_OR/E_AND) is considered a leaf, and is compared + * against all other leaves to look for simplifications. + */ +static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2) +{ +#define e1 (*ep1) +#define e2 (*ep2) + struct expr *tmp; + + /* Recurse down to leaves */ + + if (e1->type == type) { + expr_eliminate_dups1(type, &e1->left.expr, &e2); + expr_eliminate_dups1(type, &e1->right.expr, &e2); + return; + } + if (e2->type == type) { + expr_eliminate_dups1(type, &e1, &e2->left.expr); + expr_eliminate_dups1(type, &e1, &e2->right.expr); + return; + } + + /* e1 and e2 are leaves. Compare and process them. */ + + if (e1 == e2) + return; + + switch (e1->type) { + case E_OR: case E_AND: + expr_eliminate_dups1(e1->type, &e1, &e1); + default: + ; + } + + switch (type) { + case E_OR: + tmp = expr_join_or(e1, e2); + if (tmp) { + expr_free(e1); expr_free(e2); + e1 = expr_alloc_symbol(&symbol_no); + e2 = tmp; + trans_count++; + } + break; + case E_AND: + tmp = expr_join_and(e1, e2); + if (tmp) { + expr_free(e1); expr_free(e2); + e1 = expr_alloc_symbol(&symbol_yes); + e2 = tmp; + trans_count++; + } + break; + default: + ; + } +#undef e1 +#undef e2 +} + +/* + * Rewrites 'e' in-place to remove ("join") duplicate and other redundant + * operands. + * + * Example simplifications: + * + * A || B || A -> A || B + * A && B && A=y -> A=y && B + * + * Returns the deduplicated expression. + */ +struct expr *expr_eliminate_dups(struct expr *e) +{ + int oldcount; + if (!e) + return e; + + oldcount = trans_count; + while (1) { + trans_count = 0; + switch (e->type) { + case E_OR: case E_AND: + expr_eliminate_dups1(e->type, &e, &e); + default: + ; + } + if (!trans_count) + /* No simplifications done in this pass. We're done */ + break; + e = expr_eliminate_yn(e); + } + trans_count = oldcount; + return e; +} + +/* + * Performs various simplifications involving logical operators and + * comparisons. + * + * Allocates and returns a new expression. + */ +struct expr *expr_transform(struct expr *e) +{ + struct expr *tmp; + + if (!e) + return NULL; + switch (e->type) { + case E_EQUAL: + case E_GEQ: + case E_GTH: + case E_LEQ: + case E_LTH: + case E_UNEQUAL: + case E_SYMBOL: + case E_LIST: + break; + default: + e->left.expr = expr_transform(e->left.expr); + e->right.expr = expr_transform(e->right.expr); + } + + switch (e->type) { + case E_EQUAL: + if (e->left.sym->type != S_BOOLEAN) + break; + if (e->right.sym == &symbol_no) { + e->type = E_NOT; + e->left.expr = expr_alloc_symbol(e->left.sym); + e->right.sym = NULL; + break; + } + if (e->right.sym == &symbol_mod) { + printf("boolean symbol %s tested for 'm'? test forced to 'n'\n", e->left.sym->name); + e->type = E_SYMBOL; + e->left.sym = &symbol_no; + e->right.sym = NULL; + break; + } + if (e->right.sym == &symbol_yes) { + e->type = E_SYMBOL; + e->right.sym = NULL; + break; + } + break; + case E_UNEQUAL: + if (e->left.sym->type != S_BOOLEAN) + break; + if (e->right.sym == &symbol_no) { + e->type = E_SYMBOL; + e->right.sym = NULL; + break; + } + if (e->right.sym == &symbol_mod) { + printf("boolean symbol %s tested for 'm'? test forced to 'y'\n", e->left.sym->name); + e->type = E_SYMBOL; + e->left.sym = &symbol_yes; + e->right.sym = NULL; + break; + } + if (e->right.sym == &symbol_yes) { + e->type = E_NOT; + e->left.expr = expr_alloc_symbol(e->left.sym); + e->right.sym = NULL; + break; + } + break; + case E_NOT: + switch (e->left.expr->type) { + case E_NOT: + // !!a -> a + tmp = e->left.expr->left.expr; + free(e->left.expr); + free(e); + e = tmp; + e = expr_transform(e); + break; + case E_EQUAL: + case E_UNEQUAL: + // !a='x' -> a!='x' + tmp = e->left.expr; + free(e); + e = tmp; + e->type = e->type == E_EQUAL ? E_UNEQUAL : E_EQUAL; + break; + case E_LEQ: + case E_GEQ: + // !a<='x' -> a>'x' + tmp = e->left.expr; + free(e); + e = tmp; + e->type = e->type == E_LEQ ? E_GTH : E_LTH; + break; + case E_LTH: + case E_GTH: + // !a<'x' -> a>='x' + tmp = e->left.expr; + free(e); + e = tmp; + e->type = e->type == E_LTH ? E_GEQ : E_LEQ; + break; + case E_OR: + // !(a || b) -> !a && !b + tmp = e->left.expr; + e->type = E_AND; + e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); + tmp->type = E_NOT; + tmp->right.expr = NULL; + e = expr_transform(e); + break; + case E_AND: + // !(a && b) -> !a || !b + tmp = e->left.expr; + e->type = E_OR; + e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); + tmp->type = E_NOT; + tmp->right.expr = NULL; + e = expr_transform(e); + break; + case E_SYMBOL: + if (e->left.expr->left.sym == &symbol_yes) { + // !'y' -> 'n' + tmp = e->left.expr; + free(e); + e = tmp; + e->type = E_SYMBOL; + e->left.sym = &symbol_no; + break; + } + if (e->left.expr->left.sym == &symbol_mod) { + // !'m' -> 'm' + tmp = e->left.expr; + free(e); + e = tmp; + e->type = E_SYMBOL; + e->left.sym = &symbol_mod; + break; + } + if (e->left.expr->left.sym == &symbol_no) { + // !'n' -> 'y' + tmp = e->left.expr; + free(e); + e = tmp; + e->type = E_SYMBOL; + e->left.sym = &symbol_yes; + break; + } + break; + default: + ; + } + break; + default: + ; + } + return e; +} + +int expr_contains_symbol(struct expr *dep, struct symbol *sym) +{ + if (!dep) + return 0; + + switch (dep->type) { + case E_AND: + case E_OR: + return expr_contains_symbol(dep->left.expr, sym) || + expr_contains_symbol(dep->right.expr, sym); + case E_SYMBOL: + return dep->left.sym == sym; + case E_EQUAL: + case E_GEQ: + case E_GTH: + case E_LEQ: + case E_LTH: + case E_UNEQUAL: + return dep->left.sym == sym || + dep->right.sym == sym; + case E_NOT: + return expr_contains_symbol(dep->left.expr, sym); + default: + ; + } + return 0; +} + +bool expr_depends_symbol(struct expr *dep, struct symbol *sym) +{ + if (!dep) + return false; + + switch (dep->type) { + case E_AND: + return expr_depends_symbol(dep->left.expr, sym) || + expr_depends_symbol(dep->right.expr, sym); + case E_SYMBOL: + return dep->left.sym == sym; + case E_EQUAL: + if (dep->left.sym == sym) { + if (dep->right.sym == &symbol_yes || dep->right.sym == &symbol_mod) + return true; + } + break; + case E_UNEQUAL: + if (dep->left.sym == sym) { + if (dep->right.sym == &symbol_no) + return true; + } + break; + default: + ; + } + return false; +} + +/* + * Inserts explicit comparisons of type 'type' to symbol 'sym' into the + * expression 'e'. + * + * Examples transformations for type == E_UNEQUAL, sym == &symbol_no: + * + * A -> A!=n + * !A -> A=n + * A && B -> !(A=n || B=n) + * A || B -> !(A=n && B=n) + * A && (B || C) -> !(A=n || (B=n && C=n)) + * + * Allocates and returns a new expression. + */ +struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym) +{ + struct expr *e1, *e2; + + if (!e) { + e = expr_alloc_symbol(sym); + if (type == E_UNEQUAL) + e = expr_alloc_one(E_NOT, e); + return e; + } + switch (e->type) { + case E_AND: + e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); + e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); + if (sym == &symbol_yes) + e = expr_alloc_two(E_AND, e1, e2); + if (sym == &symbol_no) + e = expr_alloc_two(E_OR, e1, e2); + if (type == E_UNEQUAL) + e = expr_alloc_one(E_NOT, e); + return e; + case E_OR: + e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); + e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); + if (sym == &symbol_yes) + e = expr_alloc_two(E_OR, e1, e2); + if (sym == &symbol_no) + e = expr_alloc_two(E_AND, e1, e2); + if (type == E_UNEQUAL) + e = expr_alloc_one(E_NOT, e); + return e; + case E_NOT: + return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym); + case E_UNEQUAL: + case E_LTH: + case E_LEQ: + case E_GTH: + case E_GEQ: + case E_EQUAL: + if (type == E_EQUAL) { + if (sym == &symbol_yes) + return expr_copy(e); + if (sym == &symbol_mod) + return expr_alloc_symbol(&symbol_no); + if (sym == &symbol_no) + return expr_alloc_one(E_NOT, expr_copy(e)); + } else { + if (sym == &symbol_yes) + return expr_alloc_one(E_NOT, expr_copy(e)); + if (sym == &symbol_mod) + return expr_alloc_symbol(&symbol_yes); + if (sym == &symbol_no) + return expr_copy(e); + } + break; + case E_SYMBOL: + return expr_alloc_comp(type, e->left.sym, sym); + case E_LIST: + case E_RANGE: + case E_NONE: + /* panic */; + } + return NULL; +} + +enum string_value_kind { + k_string, + k_signed, + k_unsigned, +}; + +union string_value { + unsigned long long u; + signed long long s; +}; + +static enum string_value_kind expr_parse_string(const char *str, + enum symbol_type type, + union string_value *val) +{ + char *tail; + enum string_value_kind kind; + + errno = 0; + switch (type) { + case S_BOOLEAN: + case S_TRISTATE: + val->s = !strcmp(str, "n") ? 0 : + !strcmp(str, "m") ? 1 : + !strcmp(str, "y") ? 2 : -1; + return k_signed; + case S_INT: + val->s = strtoll(str, &tail, 10); + kind = k_signed; + break; + case S_HEX: + val->u = strtoull(str, &tail, 16); + kind = k_unsigned; + break; + default: + val->s = strtoll(str, &tail, 0); + kind = k_signed; + break; + } + return !errno && !*tail && tail > str && isxdigit(tail[-1]) + ? kind : k_string; +} + +tristate expr_calc_value(struct expr *e) +{ + tristate val1, val2; + const char *str1, *str2; + enum string_value_kind k1 = k_string, k2 = k_string; + union string_value lval = {}, rval = {}; + int res; + + if (!e) + return yes; + + switch (e->type) { + case E_SYMBOL: + sym_calc_value(e->left.sym); + return e->left.sym->curr.tri; + case E_AND: + val1 = expr_calc_value(e->left.expr); + val2 = expr_calc_value(e->right.expr); + return EXPR_AND(val1, val2); + case E_OR: + val1 = expr_calc_value(e->left.expr); + val2 = expr_calc_value(e->right.expr); + return EXPR_OR(val1, val2); + case E_NOT: + val1 = expr_calc_value(e->left.expr); + return EXPR_NOT(val1); + case E_EQUAL: + case E_GEQ: + case E_GTH: + case E_LEQ: + case E_LTH: + case E_UNEQUAL: + break; + default: + printf("expr_calc_value: %d?\n", e->type); + return no; + } + + sym_calc_value(e->left.sym); + sym_calc_value(e->right.sym); + str1 = sym_get_string_value(e->left.sym); + str2 = sym_get_string_value(e->right.sym); + + if (e->left.sym->type != S_STRING || e->right.sym->type != S_STRING) { + k1 = expr_parse_string(str1, e->left.sym->type, &lval); + k2 = expr_parse_string(str2, e->right.sym->type, &rval); + } + + if (k1 == k_string || k2 == k_string) + res = strcmp(str1, str2); + else if (k1 == k_unsigned || k2 == k_unsigned) + res = (lval.u > rval.u) - (lval.u < rval.u); + else /* if (k1 == k_signed && k2 == k_signed) */ + res = (lval.s > rval.s) - (lval.s < rval.s); + + switch(e->type) { + case E_EQUAL: + return res ? no : yes; + case E_GEQ: + return res >= 0 ? yes : no; + case E_GTH: + return res > 0 ? yes : no; + case E_LEQ: + return res <= 0 ? yes : no; + case E_LTH: + return res < 0 ? yes : no; + case E_UNEQUAL: + return res ? yes : no; + default: + printf("expr_calc_value: relation %d?\n", e->type); + return no; + } +} + +static int expr_compare_type(enum expr_type t1, enum expr_type t2) +{ + if (t1 == t2) + return 0; + switch (t1) { + case E_LEQ: + case E_LTH: + case E_GEQ: + case E_GTH: + if (t2 == E_EQUAL || t2 == E_UNEQUAL) + return 1; + case E_EQUAL: + case E_UNEQUAL: + if (t2 == E_NOT) + return 1; + case E_NOT: + if (t2 == E_AND) + return 1; + case E_AND: + if (t2 == E_OR) + return 1; + case E_OR: + if (t2 == E_LIST) + return 1; + case E_LIST: + if (t2 == 0) + return 1; + default: + return -1; + } + printf("[%dgt%d?]", t1, t2); + return 0; +} + +void expr_print(struct expr *e, + void (*fn)(void *, struct symbol *, const char *), + void *data, int prevtoken) +{ + if (!e) { + fn(data, NULL, "y"); + return; + } + + if (expr_compare_type(prevtoken, e->type) > 0) + fn(data, NULL, "("); + switch (e->type) { + case E_SYMBOL: + if (e->left.sym->name) + fn(data, e->left.sym, e->left.sym->name); + else + fn(data, NULL, ""); + break; + case E_NOT: + fn(data, NULL, "!"); + expr_print(e->left.expr, fn, data, E_NOT); + break; + case E_EQUAL: + if (e->left.sym->name) + fn(data, e->left.sym, e->left.sym->name); + else + fn(data, NULL, ""); + fn(data, NULL, "="); + fn(data, e->right.sym, e->right.sym->name); + break; + case E_LEQ: + case E_LTH: + if (e->left.sym->name) + fn(data, e->left.sym, e->left.sym->name); + else + fn(data, NULL, ""); + fn(data, NULL, e->type == E_LEQ ? "<=" : "<"); + fn(data, e->right.sym, e->right.sym->name); + break; + case E_GEQ: + case E_GTH: + if (e->left.sym->name) + fn(data, e->left.sym, e->left.sym->name); + else + fn(data, NULL, ""); + fn(data, NULL, e->type == E_GEQ ? ">=" : ">"); + fn(data, e->right.sym, e->right.sym->name); + break; + case E_UNEQUAL: + if (e->left.sym->name) + fn(data, e->left.sym, e->left.sym->name); + else + fn(data, NULL, ""); + fn(data, NULL, "!="); + fn(data, e->right.sym, e->right.sym->name); + break; + case E_OR: + expr_print(e->left.expr, fn, data, E_OR); + fn(data, NULL, " || "); + expr_print(e->right.expr, fn, data, E_OR); + break; + case E_AND: + expr_print(e->left.expr, fn, data, E_AND); + fn(data, NULL, " && "); + expr_print(e->right.expr, fn, data, E_AND); + break; + case E_LIST: + fn(data, e->right.sym, e->right.sym->name); + if (e->left.expr) { + fn(data, NULL, " ^ "); + expr_print(e->left.expr, fn, data, E_LIST); + } + break; + case E_RANGE: + fn(data, NULL, "["); + fn(data, e->left.sym, e->left.sym->name); + fn(data, NULL, " "); + fn(data, e->right.sym, e->right.sym->name); + fn(data, NULL, "]"); + break; + default: + { + char buf[32]; + sprintf(buf, "", e->type); + fn(data, NULL, buf); + break; + } + } + if (expr_compare_type(prevtoken, e->type) > 0) + fn(data, NULL, ")"); +} + +static void expr_print_file_helper(void *data, struct symbol *sym, const char *str) +{ + xfwrite(str, strlen(str), 1, data); +} + +void expr_fprint(struct expr *e, FILE *out) +{ + expr_print(e, expr_print_file_helper, out, E_NONE); +} + +static void expr_print_gstr_helper(void *data, struct symbol *sym, const char *str) +{ + struct gstr *gs = (struct gstr*)data; + const char *sym_str = NULL; + + if (sym) + sym_str = sym_get_string_value(sym); + + if (gs->max_width) { + unsigned extra_length = strlen(str); + const char *last_cr = strrchr(gs->s, '\n'); + unsigned last_line_length; + + if (sym_str) + extra_length += 4 + strlen(sym_str); + + if (!last_cr) + last_cr = gs->s; + + last_line_length = strlen(gs->s) - (last_cr - gs->s); + + if ((last_line_length + extra_length) > gs->max_width) + str_append(gs, "\\\n"); + } + + str_append(gs, str); + if (sym && sym->type != S_UNKNOWN) + str_printf(gs, " [=%s]", sym_str); +} + +void expr_gstr_print(struct expr *e, struct gstr *gs) +{ + expr_print(e, expr_print_gstr_helper, gs, E_NONE); +} + +/* + * Transform the top level "||" tokens into newlines and prepend each + * line with a minus. This makes expressions much easier to read. + * Suitable for reverse dependency expressions. + */ +static void expr_print_revdep(struct expr *e, + void (*fn)(void *, struct symbol *, const char *), + void *data, tristate pr_type, const char **title) +{ + if (e->type == E_OR) { + expr_print_revdep(e->left.expr, fn, data, pr_type, title); + expr_print_revdep(e->right.expr, fn, data, pr_type, title); + } else if (expr_calc_value(e) == pr_type) { + if (*title) { + fn(data, NULL, *title); + *title = NULL; + } + + fn(data, NULL, " - "); + expr_print(e, fn, data, E_NONE); + fn(data, NULL, "\n"); + } +} + +void expr_gstr_print_revdep(struct expr *e, struct gstr *gs, + tristate pr_type, const char *title) +{ + expr_print_revdep(e, expr_print_gstr_helper, gs, pr_type, &title); +} diff --git a/libraries/NEMU/tools/kconfig/expr.h b/libraries/NEMU/tools/kconfig/expr.h new file mode 100644 index 0000000..5c34436 --- /dev/null +++ b/libraries/NEMU/tools/kconfig/expr.h @@ -0,0 +1,332 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2002 Roman Zippel + */ + +#ifndef EXPR_H +#define EXPR_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include "list.h" +#ifndef __cplusplus +#include +#endif + +struct file { + struct file *next; + struct file *parent; + const char *name; + int lineno; +}; + +typedef enum tristate { + no, mod, yes +} tristate; + +enum expr_type { + E_NONE, E_OR, E_AND, E_NOT, + E_EQUAL, E_UNEQUAL, E_LTH, E_LEQ, E_GTH, E_GEQ, + E_LIST, E_SYMBOL, E_RANGE +}; + +union expr_data { + struct expr *expr; + struct symbol *sym; +}; + +struct expr { + enum expr_type type; + union expr_data left, right; +}; + +#define EXPR_OR(dep1, dep2) (((dep1)>(dep2))?(dep1):(dep2)) +#define EXPR_AND(dep1, dep2) (((dep1)<(dep2))?(dep1):(dep2)) +#define EXPR_NOT(dep) (2-(dep)) + +#define expr_list_for_each_sym(l, e, s) \ + for (e = (l); e && (s = e->right.sym); e = e->left.expr) + +struct expr_value { + struct expr *expr; + tristate tri; +}; + +struct symbol_value { + void *val; + tristate tri; +}; + +enum symbol_type { + S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING +}; + +/* enum values are used as index to symbol.def[] */ +enum { + S_DEF_USER, /* main user value */ + S_DEF_AUTO, /* values read from auto.conf */ + S_DEF_DEF3, /* Reserved for UI usage */ + S_DEF_DEF4, /* Reserved for UI usage */ + S_DEF_COUNT +}; + +/* + * Represents a configuration symbol. + * + * Choices are represented as a special kind of symbol and have the + * SYMBOL_CHOICE bit set in 'flags'. + */ +struct symbol { + /* The next symbol in the same bucket in the symbol hash table */ + struct symbol *next; + + /* The name of the symbol, e.g. "FOO" for 'config FOO' */ + char *name; + + /* S_BOOLEAN, S_TRISTATE, ... */ + enum symbol_type type; + + /* + * The calculated value of the symbol. The SYMBOL_VALID bit is set in + * 'flags' when this is up to date. Note that this value might differ + * from the user value set in e.g. a .config file, due to visibility. + */ + struct symbol_value curr; + + /* + * Values for the symbol provided from outside. def[S_DEF_USER] holds + * the .config value. + */ + struct symbol_value def[S_DEF_COUNT]; + + /* + * An upper bound on the tristate value the user can set for the symbol + * if it is a boolean or tristate. Calculated from prompt dependencies, + * which also inherit dependencies from enclosing menus, choices, and + * ifs. If 'n', the user value will be ignored. + * + * Symbols lacking prompts always have visibility 'n'. + */ + tristate visible; + + /* SYMBOL_* flags */ + int flags; + + /* List of properties. See prop_type. */ + struct property *prop; + + /* Dependencies from enclosing menus, choices, and ifs */ + struct expr_value dir_dep; + + /* Reverse dependencies through being selected by other symbols */ + struct expr_value rev_dep; + + /* + * "Weak" reverse dependencies through being implied by other symbols + */ + struct expr_value implied; +}; + +#define for_all_symbols(i, sym) for (i = 0; i < SYMBOL_HASHSIZE; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) + +#define SYMBOL_CONST 0x0001 /* symbol is const */ +#define SYMBOL_CHECK 0x0008 /* used during dependency checking */ +#define SYMBOL_CHOICE 0x0010 /* start of a choice block (null name) */ +#define SYMBOL_CHOICEVAL 0x0020 /* used as a value in a choice block */ +#define SYMBOL_VALID 0x0080 /* set when symbol.curr is calculated */ +#define SYMBOL_OPTIONAL 0x0100 /* choice is optional - values can be 'n' */ +#define SYMBOL_WRITE 0x0200 /* write symbol to file (KCONFIG_CONFIG) */ +#define SYMBOL_CHANGED 0x0400 /* ? */ +#define SYMBOL_WRITTEN 0x0800 /* track info to avoid double-write to .config */ +#define SYMBOL_NO_WRITE 0x1000 /* Symbol for internal use only; it will not be written */ +#define SYMBOL_CHECKED 0x2000 /* used during dependency checking */ +#define SYMBOL_WARNED 0x8000 /* warning has been issued */ + +/* Set when symbol.def[] is used */ +#define SYMBOL_DEF 0x10000 /* First bit of SYMBOL_DEF */ +#define SYMBOL_DEF_USER 0x10000 /* symbol.def[S_DEF_USER] is valid */ +#define SYMBOL_DEF_AUTO 0x20000 /* symbol.def[S_DEF_AUTO] is valid */ +#define SYMBOL_DEF3 0x40000 /* symbol.def[S_DEF_3] is valid */ +#define SYMBOL_DEF4 0x80000 /* symbol.def[S_DEF_4] is valid */ + +/* choice values need to be set before calculating this symbol value */ +#define SYMBOL_NEED_SET_CHOICE_VALUES 0x100000 + +/* Set symbol to y if allnoconfig; used for symbols that hide others */ +#define SYMBOL_ALLNOCONFIG_Y 0x200000 + +#define SYMBOL_MAXLENGTH 256 +#define SYMBOL_HASHSIZE 9973 + +/* A property represent the config options that can be associated + * with a config "symbol". + * Sample: + * config FOO + * default y + * prompt "foo prompt" + * select BAR + * config BAZ + * int "BAZ Value" + * range 1..255 + * + * Please, also check parser.y:print_symbol() when modifying the + * list of property types! + */ +enum prop_type { + P_UNKNOWN, + P_PROMPT, /* prompt "foo prompt" or "BAZ Value" */ + P_COMMENT, /* text associated with a comment */ + P_MENU, /* prompt associated with a menu or menuconfig symbol */ + P_DEFAULT, /* default y */ + P_CHOICE, /* choice value */ + P_SELECT, /* select BAR */ + P_IMPLY, /* imply BAR */ + P_RANGE, /* range 7..100 (for a symbol) */ + P_SYMBOL, /* where a symbol is defined */ +}; + +struct property { + struct property *next; /* next property - null if last */ + enum prop_type type; /* type of property */ + const char *text; /* the prompt value - P_PROMPT, P_MENU, P_COMMENT */ + struct expr_value visible; + struct expr *expr; /* the optional conditional part of the property */ + struct menu *menu; /* the menu the property are associated with + * valid for: P_SELECT, P_RANGE, P_CHOICE, + * P_PROMPT, P_DEFAULT, P_MENU, P_COMMENT */ + struct file *file; /* what file was this property defined */ + int lineno; /* what lineno was this property defined */ +}; + +#define for_all_properties(sym, st, tok) \ + for (st = sym->prop; st; st = st->next) \ + if (st->type == (tok)) +#define for_all_defaults(sym, st) for_all_properties(sym, st, P_DEFAULT) +#define for_all_choices(sym, st) for_all_properties(sym, st, P_CHOICE) +#define for_all_prompts(sym, st) \ + for (st = sym->prop; st; st = st->next) \ + if (st->text) + +/* + * Represents a node in the menu tree, as seen in e.g. menuconfig (though used + * for all front ends). Each symbol, menu, etc. defined in the Kconfig files + * gets a node. A symbol defined in multiple locations gets one node at each + * location. + */ +struct menu { + /* The next menu node at the same level */ + struct menu *next; + + /* The parent menu node, corresponding to e.g. a menu or choice */ + struct menu *parent; + + /* The first child menu node, for e.g. menus and choices */ + struct menu *list; + + /* + * The symbol associated with the menu node. Choices are implemented as + * a special kind of symbol. NULL for menus, comments, and ifs. + */ + struct symbol *sym; + + /* + * The prompt associated with the node. This holds the prompt for a + * symbol as well as the text for a menu or comment, along with the + * type (P_PROMPT, P_MENU, etc.) + */ + struct property *prompt; + + /* + * 'visible if' dependencies. If more than one is given, they will be + * ANDed together. + */ + struct expr *visibility; + + /* + * Ordinary dependencies from e.g. 'depends on' and 'if', ANDed + * together + */ + struct expr *dep; + + /* MENU_* flags */ + unsigned int flags; + + /* Any help text associated with the node */ + char *help; + + /* The location where the menu node appears in the Kconfig files */ + struct file *file; + int lineno; + + /* For use by front ends that need to store auxiliary data */ + void *data; +}; + +/* + * Set on a menu node when the corresponding symbol changes state in some way. + * Can be checked by front ends. + */ +#define MENU_CHANGED 0x0001 + +#define MENU_ROOT 0x0002 + +struct jump_key { + struct list_head entries; + size_t offset; + struct menu *target; + int index; +}; + +#define JUMP_NB 9 + +extern struct file *file_list; +extern struct file *current_file; +struct file *lookup_file(const char *name); + +extern struct symbol symbol_yes, symbol_no, symbol_mod; +extern struct symbol *modules_sym; +extern struct symbol *sym_defconfig_list; +extern int cdebug; +struct expr *expr_alloc_symbol(struct symbol *sym); +struct expr *expr_alloc_one(enum expr_type type, struct expr *ce); +struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2); +struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2); +struct expr *expr_alloc_and(struct expr *e1, struct expr *e2); +struct expr *expr_alloc_or(struct expr *e1, struct expr *e2); +struct expr *expr_copy(const struct expr *org); +void expr_free(struct expr *e); +void expr_eliminate_eq(struct expr **ep1, struct expr **ep2); +int expr_eq(struct expr *e1, struct expr *e2); +tristate expr_calc_value(struct expr *e); +struct expr *expr_trans_bool(struct expr *e); +struct expr *expr_eliminate_dups(struct expr *e); +struct expr *expr_transform(struct expr *e); +int expr_contains_symbol(struct expr *dep, struct symbol *sym); +bool expr_depends_symbol(struct expr *dep, struct symbol *sym); +struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym); + +void expr_fprint(struct expr *e, FILE *out); +struct gstr; /* forward */ +void expr_gstr_print(struct expr *e, struct gstr *gs); +void expr_gstr_print_revdep(struct expr *e, struct gstr *gs, + tristate pr_type, const char *title); + +static inline int expr_is_yes(struct expr *e) +{ + return !e || (e->type == E_SYMBOL && e->left.sym == &symbol_yes); +} + +static inline int expr_is_no(struct expr *e) +{ + return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no); +} + +#ifdef __cplusplus +} +#endif + +#endif /* EXPR_H */ diff --git a/libraries/NEMU/tools/kconfig/lexer.l b/libraries/NEMU/tools/kconfig/lexer.l new file mode 100644 index 0000000..240109f --- /dev/null +++ b/libraries/NEMU/tools/kconfig/lexer.l @@ -0,0 +1,471 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2002 Roman Zippel + */ +%option nostdinit noyywrap never-interactive full ecs +%option 8bit nodefault yylineno +%x ASSIGN_VAL HELP STRING +%{ + +#include +#include +#include +#include +#include +#include + +#include "lkc.h" +#include "parser.tab.h" + +#define YY_DECL static int yylex1(void) + +#define START_STRSIZE 16 + +static struct { + struct file *file; + int lineno; +} current_pos; + +static int prev_prev_token = T_EOL; +static int prev_token = T_EOL; +static char *text; +static int text_size, text_asize; + +struct buffer { + struct buffer *parent; + YY_BUFFER_STATE state; +}; + +static struct buffer *current_buf; + +static int last_ts, first_ts; + +static char *expand_token(const char *in, size_t n); +static void append_expanded_string(const char *in); +static void zconf_endhelp(void); +static void zconf_endfile(void); + +static void new_string(void) +{ + text = xmalloc(START_STRSIZE); + text_asize = START_STRSIZE; + text_size = 0; + *text = 0; +} + +static void append_string(const char *str, int size) +{ + int new_size = text_size + size + 1; + if (new_size > text_asize) { + new_size += START_STRSIZE - 1; + new_size &= -START_STRSIZE; + text = xrealloc(text, new_size); + text_asize = new_size; + } + memcpy(text + text_size, str, size); + text_size += size; + text[text_size] = 0; +} + +static void alloc_string(const char *str, int size) +{ + text = xmalloc(size + 1); + memcpy(text, str, size); + text[size] = 0; +} + +static void warn_ignored_character(char chr) +{ + fprintf(stderr, + "%s:%d:warning: ignoring unsupported character '%c'\n", + current_file->name, yylineno, chr); +} +%} + +n [A-Za-z0-9_-] + +%% + int str = 0; + int ts, i; + +#.* /* ignore comment */ +[ \t]* /* whitespaces */ +\\\n /* escaped new line */ +\n return T_EOL; +"allnoconfig_y" return T_ALLNOCONFIG_Y; +"bool" return T_BOOL; +"choice" return T_CHOICE; +"comment" return T_COMMENT; +"config" return T_CONFIG; +"def_bool" return T_DEF_BOOL; +"def_tristate" return T_DEF_TRISTATE; +"default" return T_DEFAULT; +"defconfig_list" return T_DEFCONFIG_LIST; +"depends" return T_DEPENDS; +"endchoice" return T_ENDCHOICE; +"endif" return T_ENDIF; +"endmenu" return T_ENDMENU; +"help" return T_HELP; +"hex" return T_HEX; +"if" return T_IF; +"imply" return T_IMPLY; +"int" return T_INT; +"mainmenu" return T_MAINMENU; +"menu" return T_MENU; +"menuconfig" return T_MENUCONFIG; +"modules" return T_MODULES; +"on" return T_ON; +"option" return T_OPTION; +"optional" return T_OPTIONAL; +"prompt" return T_PROMPT; +"range" return T_RANGE; +"select" return T_SELECT; +"source" return T_SOURCE; +"string" return T_STRING; +"tristate" return T_TRISTATE; +"visible" return T_VISIBLE; +"||" return T_OR; +"&&" return T_AND; +"=" return T_EQUAL; +"!=" return T_UNEQUAL; +"<" return T_LESS; +"<=" return T_LESS_EQUAL; +">" return T_GREATER; +">=" return T_GREATER_EQUAL; +"!" return T_NOT; +"(" return T_OPEN_PAREN; +")" return T_CLOSE_PAREN; +":=" return T_COLON_EQUAL; +"+=" return T_PLUS_EQUAL; +\"|\' { + str = yytext[0]; + new_string(); + BEGIN(STRING); + } +{n}+ { + alloc_string(yytext, yyleng); + yylval.string = text; + return T_WORD; + } +({n}|$)+ { + /* this token includes at least one '$' */ + yylval.string = expand_token(yytext, yyleng); + if (strlen(yylval.string)) + return T_WORD; + free(yylval.string); + } +. warn_ignored_character(*yytext); + +{ + [^[:blank:]\n]+.* { + alloc_string(yytext, yyleng); + yylval.string = text; + return T_ASSIGN_VAL; + } + \n { BEGIN(INITIAL); return T_EOL; } + . +} + +{ + "$".* append_expanded_string(yytext); + [^$'"\\\n]+ { + append_string(yytext, yyleng); + } + \\.? { + append_string(yytext + 1, yyleng - 1); + } + \'|\" { + if (str == yytext[0]) { + BEGIN(INITIAL); + yylval.string = text; + return T_WORD_QUOTE; + } else + append_string(yytext, 1); + } + \n { + fprintf(stderr, + "%s:%d:warning: multi-line strings not supported\n", + zconf_curname(), zconf_lineno()); + unput('\n'); + BEGIN(INITIAL); + yylval.string = text; + return T_WORD_QUOTE; + } + <> { + BEGIN(INITIAL); + yylval.string = text; + return T_WORD_QUOTE; + } +} + +{ + [ \t]+ { + ts = 0; + for (i = 0; i < yyleng; i++) { + if (yytext[i] == '\t') + ts = (ts & ~7) + 8; + else + ts++; + } + last_ts = ts; + if (first_ts) { + if (ts < first_ts) { + zconf_endhelp(); + return T_HELPTEXT; + } + ts -= first_ts; + while (ts > 8) { + append_string(" ", 8); + ts -= 8; + } + append_string(" ", ts); + } + } + [ \t]*\n/[^ \t\n] { + zconf_endhelp(); + return T_HELPTEXT; + } + [ \t]*\n { + append_string("\n", 1); + } + [^ \t\n].* { + while (yyleng) { + if ((yytext[yyleng-1] != ' ') && (yytext[yyleng-1] != '\t')) + break; + yyleng--; + } + append_string(yytext, yyleng); + if (!first_ts) + first_ts = last_ts; + } + <> { + zconf_endhelp(); + return T_HELPTEXT; + } +} + +<> { + BEGIN(INITIAL); + + if (prev_token != T_EOL && prev_token != T_HELPTEXT) + fprintf(stderr, "%s:%d:warning: no new line at end of file\n", + current_file->name, yylineno); + + if (current_file) { + zconf_endfile(); + return T_EOL; + } + fclose(yyin); + yyterminate(); +} + +%% + +/* second stage lexer */ +int yylex(void) +{ + int token; + +repeat: + token = yylex1(); + + if (prev_token == T_EOL || prev_token == T_HELPTEXT) { + if (token == T_EOL) { + /* Do not pass unneeded T_EOL to the parser. */ + goto repeat; + } else { + /* + * For the parser, update file/lineno at the first token + * of each statement. Generally, \n is a statement + * terminator in Kconfig, but it is not always true + * because \n could be escaped by a backslash. + */ + current_pos.file = current_file; + current_pos.lineno = yylineno; + } + } + + if (prev_prev_token == T_EOL && prev_token == T_WORD && + (token == T_EQUAL || token == T_COLON_EQUAL || token == T_PLUS_EQUAL)) + BEGIN(ASSIGN_VAL); + + prev_prev_token = prev_token; + prev_token = token; + + return token; +} + +static char *expand_token(const char *in, size_t n) +{ + char *out; + int c; + char c2; + const char *rest, *end; + + new_string(); + append_string(in, n); + + /* get the whole line because we do not know the end of token. */ + while ((c = input()) != EOF) { + if (c == '\n') { + unput(c); + break; + } + c2 = c; + append_string(&c2, 1); + } + + rest = text; + out = expand_one_token(&rest); + + /* push back unused characters to the input stream */ + end = rest + strlen(rest); + while (end > rest) + unput(*--end); + + free(text); + + return out; +} + +static void append_expanded_string(const char *str) +{ + const char *end; + char *res; + + str++; + + res = expand_dollar(&str); + + /* push back unused characters to the input stream */ + end = str + strlen(str); + while (end > str) + unput(*--end); + + append_string(res, strlen(res)); + + free(res); +} + +void zconf_starthelp(void) +{ + new_string(); + last_ts = first_ts = 0; + BEGIN(HELP); +} + +static void zconf_endhelp(void) +{ + yylval.string = text; + BEGIN(INITIAL); +} + + +/* + * Try to open specified file with following names: + * ./name + * $(srctree)/name + * The latter is used when srctree is separate from objtree + * when compiling the kernel. + * Return NULL if file is not found. + */ +FILE *zconf_fopen(const char *name) +{ + char *env, fullname[PATH_MAX+1]; + FILE *f; + + f = fopen(name, "r"); + if (!f && name != NULL && name[0] != '/') { + env = getenv(SRCTREE); + if (env) { + snprintf(fullname, sizeof(fullname), + "%s/%s", env, name); + f = fopen(fullname, "r"); + } + } + return f; +} + +void zconf_initscan(const char *name) +{ + yyin = zconf_fopen(name); + if (!yyin) { + fprintf(stderr, "can't find file %s\n", name); + exit(1); + } + + current_buf = xmalloc(sizeof(*current_buf)); + memset(current_buf, 0, sizeof(*current_buf)); + + current_file = file_lookup(name); + yylineno = 1; +} + +void zconf_nextfile(const char *name) +{ + struct file *iter; + struct file *file = file_lookup(name); + struct buffer *buf = xmalloc(sizeof(*buf)); + memset(buf, 0, sizeof(*buf)); + + current_buf->state = YY_CURRENT_BUFFER; + yyin = zconf_fopen(file->name); + if (!yyin) { + fprintf(stderr, "%s:%d: can't open file \"%s\"\n", + zconf_curname(), zconf_lineno(), file->name); + exit(1); + } + yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE)); + buf->parent = current_buf; + current_buf = buf; + + current_file->lineno = yylineno; + file->parent = current_file; + + for (iter = current_file; iter; iter = iter->parent) { + if (!strcmp(iter->name, file->name)) { + fprintf(stderr, + "Recursive inclusion detected.\n" + "Inclusion path:\n" + " current file : %s\n", file->name); + iter = file; + do { + iter = iter->parent; + fprintf(stderr, " included from: %s:%d\n", + iter->name, iter->lineno - 1); + } while (strcmp(iter->name, file->name)); + exit(1); + } + } + + yylineno = 1; + current_file = file; +} + +static void zconf_endfile(void) +{ + struct buffer *parent; + + current_file = current_file->parent; + if (current_file) + yylineno = current_file->lineno; + + parent = current_buf->parent; + if (parent) { + fclose(yyin); + yy_delete_buffer(YY_CURRENT_BUFFER); + yy_switch_to_buffer(parent->state); + } + free(current_buf); + current_buf = parent; +} + +int zconf_lineno(void) +{ + return current_pos.lineno; +} + +const char *zconf_curname(void) +{ + return current_pos.file ? current_pos.file->name : ""; +} diff --git a/libraries/NEMU/tools/kconfig/list.h b/libraries/NEMU/tools/kconfig/list.h new file mode 100644 index 0000000..45cb237 --- /dev/null +++ b/libraries/NEMU/tools/kconfig/list.h @@ -0,0 +1,132 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef LIST_H +#define LIST_H + +/* + * Copied from include/linux/... + */ + +#undef offsetof +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) + +/** + * container_of - cast a member of a structure out to the containing structure + * @ptr: the pointer to the member. + * @type: the type of the container struct this is embedded in. + * @member: the name of the member within the struct. + * + */ +#define container_of(ptr, type, member) ({ \ + const typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) );}) + + +struct list_head { + struct list_head *next, *prev; +}; + + +#define LIST_HEAD_INIT(name) { &(name), &(name) } + +#define LIST_HEAD(name) \ + struct list_head name = LIST_HEAD_INIT(name) + +/** + * list_entry - get the struct for this entry + * @ptr: the &struct list_head pointer. + * @type: the type of the struct this is embedded in. + * @member: the name of the list_head within the struct. + */ +#define list_entry(ptr, type, member) \ + container_of(ptr, type, member) + +/** + * list_for_each_entry - iterate over list of given type + * @pos: the type * to use as a loop cursor. + * @head: the head for your list. + * @member: the name of the list_head within the struct. + */ +#define list_for_each_entry(pos, head, member) \ + for (pos = list_entry((head)->next, typeof(*pos), member); \ + &pos->member != (head); \ + pos = list_entry(pos->member.next, typeof(*pos), member)) + +/** + * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry + * @pos: the type * to use as a loop cursor. + * @n: another type * to use as temporary storage + * @head: the head for your list. + * @member: the name of the list_head within the struct. + */ +#define list_for_each_entry_safe(pos, n, head, member) \ + for (pos = list_entry((head)->next, typeof(*pos), member), \ + n = list_entry(pos->member.next, typeof(*pos), member); \ + &pos->member != (head); \ + pos = n, n = list_entry(n->member.next, typeof(*n), member)) + +/** + * list_empty - tests whether a list is empty + * @head: the list to test. + */ +static inline int list_empty(const struct list_head *head) +{ + return head->next == head; +} + +/* + * Insert a new entry between two known consecutive entries. + * + * This is only for internal list manipulation where we know + * the prev/next entries already! + */ +static inline void __list_add(struct list_head *_new, + struct list_head *prev, + struct list_head *next) +{ + next->prev = _new; + _new->next = next; + _new->prev = prev; + prev->next = _new; +} + +/** + * list_add_tail - add a new entry + * @new: new entry to be added + * @head: list head to add it before + * + * Insert a new entry before the specified head. + * This is useful for implementing queues. + */ +static inline void list_add_tail(struct list_head *_new, struct list_head *head) +{ + __list_add(_new, head->prev, head); +} + +/* + * Delete a list entry by making the prev/next entries + * point to each other. + * + * This is only for internal list manipulation where we know + * the prev/next entries already! + */ +static inline void __list_del(struct list_head *prev, struct list_head *next) +{ + next->prev = prev; + prev->next = next; +} + +#define LIST_POISON1 ((void *) 0x00100100) +#define LIST_POISON2 ((void *) 0x00200200) +/** + * list_del - deletes entry from list. + * @entry: the element to delete from the list. + * Note: list_empty() on entry does not return true after this, the entry is + * in an undefined state. + */ +static inline void list_del(struct list_head *entry) +{ + __list_del(entry->prev, entry->next); + entry->next = (struct list_head*)LIST_POISON1; + entry->prev = (struct list_head*)LIST_POISON2; +} +#endif diff --git a/libraries/NEMU/tools/kconfig/lkc.h b/libraries/NEMU/tools/kconfig/lkc.h new file mode 100644 index 0000000..8454649 --- /dev/null +++ b/libraries/NEMU/tools/kconfig/lkc.h @@ -0,0 +1,173 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2002 Roman Zippel + */ + +#ifndef LKC_H +#define LKC_H + +#include "expr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#include "lkc_proto.h" + +#define SRCTREE "srctree" + +#ifndef PACKAGE +#define PACKAGE "linux" +#endif + +#ifndef CONFIG_ +#define CONFIG_ "CONFIG_" +#endif +static inline const char *CONFIG_prefix(void) +{ + return getenv( "CONFIG_" ) ?: CONFIG_; +} +#undef CONFIG_ +#define CONFIG_ CONFIG_prefix() + +enum conf_def_mode { + def_default, + def_yes, + def_mod, + def_y2m, + def_m2y, + def_no, + def_random +}; + +extern int yylineno; +void zconfdump(FILE *out); +void zconf_starthelp(void); +FILE *zconf_fopen(const char *name); +void zconf_initscan(const char *name); +void zconf_nextfile(const char *name); +int zconf_lineno(void); +const char *zconf_curname(void); + +/* confdata.c */ +const char *conf_get_configname(void); +void sym_set_change_count(int count); +void sym_add_change_count(int count); +bool conf_set_all_new_symbols(enum conf_def_mode mode); +void conf_rewrite_mod_or_yes(enum conf_def_mode mode); +void set_all_choice_values(struct symbol *csym); + +/* confdata.c and expr.c */ +static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out) +{ + assert(len != 0); + + if (fwrite(str, len, count, out) != count) + fprintf(stderr, "Error in writing or end of file.\n"); +} + +/* util.c */ +struct file *file_lookup(const char *name); +void *xmalloc(size_t size); +void *xcalloc(size_t nmemb, size_t size); +void *xrealloc(void *p, size_t size); +char *xstrdup(const char *s); +char *xstrndup(const char *s, size_t n); + +/* lexer.l */ +int yylex(void); + +struct gstr { + size_t len; + char *s; + /* + * when max_width is not zero long lines in string s (if any) get + * wrapped not to exceed the max_width value + */ + int max_width; +}; +struct gstr str_new(void); +void str_free(struct gstr *gs); +void str_append(struct gstr *gs, const char *s); +void str_printf(struct gstr *gs, const char *fmt, ...); +const char *str_get(struct gstr *gs); + +/* menu.c */ +void _menu_init(void); +void menu_warn(struct menu *menu, const char *fmt, ...); +struct menu *menu_add_menu(void); +void menu_end_menu(void); +void menu_add_entry(struct symbol *sym); +void menu_add_dep(struct expr *dep); +void menu_add_visibility(struct expr *dep); +struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep); +void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep); +void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep); +void menu_add_option_modules(void); +void menu_add_option_defconfig_list(void); +void menu_add_option_allnoconfig_y(void); +void menu_finalize(struct menu *parent); +void menu_set_type(int type); + +extern struct menu rootmenu; + +bool menu_is_empty(struct menu *menu); +bool menu_is_visible(struct menu *menu); +bool menu_has_prompt(struct menu *menu); +const char *menu_get_prompt(struct menu *menu); +struct menu *menu_get_root_menu(struct menu *menu); +struct menu *menu_get_parent_menu(struct menu *menu); +bool menu_has_help(struct menu *menu); +const char *menu_get_help(struct menu *menu); +struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head); +void menu_get_ext_help(struct menu *menu, struct gstr *help); + +/* symbol.c */ +void sym_clear_all_valid(void); +struct symbol *sym_choice_default(struct symbol *sym); +struct property *sym_get_range_prop(struct symbol *sym); +const char *sym_get_string_default(struct symbol *sym); +struct symbol *sym_check_deps(struct symbol *sym); +struct symbol *prop_get_symbol(struct property *prop); + +static inline tristate sym_get_tristate_value(struct symbol *sym) +{ + return sym->curr.tri; +} + + +static inline struct symbol *sym_get_choice_value(struct symbol *sym) +{ + return (struct symbol *)sym->curr.val; +} + +static inline bool sym_set_choice_value(struct symbol *ch, struct symbol *chval) +{ + return sym_set_tristate_value(chval, yes); +} + +static inline bool sym_is_choice(struct symbol *sym) +{ + return sym->flags & SYMBOL_CHOICE ? true : false; +} + +static inline bool sym_is_choice_value(struct symbol *sym) +{ + return sym->flags & SYMBOL_CHOICEVAL ? true : false; +} + +static inline bool sym_is_optional(struct symbol *sym) +{ + return sym->flags & SYMBOL_OPTIONAL ? true : false; +} + +static inline bool sym_has_value(struct symbol *sym) +{ + return sym->flags & SYMBOL_DEF_USER ? true : false; +} + +#ifdef __cplusplus +} +#endif + +#endif /* LKC_H */ diff --git a/libraries/NEMU/tools/kconfig/lkc_proto.h b/libraries/NEMU/tools/kconfig/lkc_proto.h new file mode 100644 index 0000000..9e81be3 --- /dev/null +++ b/libraries/NEMU/tools/kconfig/lkc_proto.h @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#include + +/* confdata.c */ +void conf_parse(const char *name); +int conf_read(const char *name); +int conf_read_simple(const char *name, int); +int conf_write_defconfig(const char *name); +int conf_write(const char *name); +int conf_write_autoconf(int overwrite); +bool conf_get_changed(void); +void conf_set_changed_callback(void (*fn)(void)); +void conf_set_message_callback(void (*fn)(const char *s)); + +/* symbol.c */ +extern struct symbol * symbol_hash[SYMBOL_HASHSIZE]; + +struct symbol * sym_lookup(const char *name, int flags); +struct symbol * sym_find(const char *name); +const char * sym_escape_string_value(const char *in); +struct symbol ** sym_re_search(const char *pattern); +const char * sym_type_name(enum symbol_type type); +void sym_calc_value(struct symbol *sym); +enum symbol_type sym_get_type(struct symbol *sym); +bool sym_tristate_within_range(struct symbol *sym,tristate tri); +bool sym_set_tristate_value(struct symbol *sym,tristate tri); +tristate sym_toggle_tristate_value(struct symbol *sym); +bool sym_string_valid(struct symbol *sym, const char *newval); +bool sym_string_within_range(struct symbol *sym, const char *str); +bool sym_set_string_value(struct symbol *sym, const char *newval); +bool sym_is_changeable(struct symbol *sym); +struct property * sym_get_choice_prop(struct symbol *sym); +const char * sym_get_string_value(struct symbol *sym); + +const char * prop_get_type_name(enum prop_type type); + +/* preprocess.c */ +enum variable_flavor { + VAR_SIMPLE, + VAR_RECURSIVE, + VAR_APPEND, +}; +void env_write_dep(FILE *f, const char *auto_conf_name); +void variable_add(const char *name, const char *value, + enum variable_flavor flavor); +void variable_all_del(void); +char *expand_dollar(const char **str); +char *expand_one_token(const char **str); + +/* expr.c */ +void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken); diff --git a/libraries/NEMU/tools/kconfig/lxdialog/checklist.c b/libraries/NEMU/tools/kconfig/lxdialog/checklist.c new file mode 100644 index 0000000..fd161cf --- /dev/null +++ b/libraries/NEMU/tools/kconfig/lxdialog/checklist.c @@ -0,0 +1,319 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * checklist.c -- implements the checklist box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension + * Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) + */ + +#include "dialog.h" + +static int list_width, check_x, item_x; + +/* + * Print list item + */ +static void print_item(WINDOW * win, int choice, int selected) +{ + int i; + char *list_item = malloc(list_width + 1); + + strncpy(list_item, item_str(), list_width - item_x); + list_item[list_width - item_x] = '\0'; + + /* Clear 'residue' of last item */ + wattrset(win, dlg.menubox.atr); + wmove(win, choice, 0); + for (i = 0; i < list_width; i++) + waddch(win, ' '); + + wmove(win, choice, check_x); + wattrset(win, selected ? dlg.check_selected.atr + : dlg.check.atr); + if (!item_is_tag(':')) + wprintw(win, "(%c)", item_is_tag('X') ? 'X' : ' '); + + wattrset(win, selected ? dlg.tag_selected.atr : dlg.tag.atr); + mvwaddch(win, choice, item_x, list_item[0]); + wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr); + waddstr(win, list_item + 1); + if (selected) { + wmove(win, choice, check_x + 1); + wrefresh(win); + } + free(list_item); +} + +/* + * Print the scroll indicators. + */ +static void print_arrows(WINDOW * win, int choice, int item_no, int scroll, + int y, int x, int height) +{ + wmove(win, y, x); + + if (scroll > 0) { + wattrset(win, dlg.uarrow.atr); + waddch(win, ACS_UARROW); + waddstr(win, "(-)"); + } else { + wattrset(win, dlg.menubox.atr); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + } + + y = y + height + 1; + wmove(win, y, x); + + if ((height < item_no) && (scroll + choice < item_no - 1)) { + wattrset(win, dlg.darrow.atr); + waddch(win, ACS_DARROW); + waddstr(win, "(+)"); + } else { + wattrset(win, dlg.menubox_border.atr); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + } +} + +/* + * Display the termination buttons + */ +static void print_buttons(WINDOW * dialog, int height, int width, int selected) +{ + int x = width / 2 - 11; + int y = height - 2; + + print_button(dialog, "Select", y, x, selected == 0); + print_button(dialog, " Help ", y, x + 14, selected == 1); + + wmove(dialog, y, x + 1 + 14 * selected); + wrefresh(dialog); +} + +/* + * Display a dialog box with a list of options that can be turned on or off + * in the style of radiolist (only one option turned on at a time). + */ +int dialog_checklist(const char *title, const char *prompt, int height, + int width, int list_height) +{ + int i, x, y, box_x, box_y; + int key = 0, button = 0, choice = 0, scroll = 0, max_choice; + WINDOW *dialog, *list; + + /* which item to highlight */ + item_foreach() { + if (item_is_tag('X')) + choice = item_n(); + if (item_is_selected()) { + choice = item_n(); + break; + } + } + +do_resize: + if (getmaxy(stdscr) < (height + CHECKLIST_HEIGTH_MIN)) + return -ERRDISPLAYTOOSMALL; + if (getmaxx(stdscr) < (width + CHECKLIST_WIDTH_MIN)) + return -ERRDISPLAYTOOSMALL; + + max_choice = MIN(list_height, item_count()); + + /* center dialog box on screen */ + x = (getmaxx(stdscr) - width) / 2; + y = (getmaxy(stdscr) - height) / 2; + + draw_shadow(stdscr, y, x, height, width); + + dialog = newwin(height, width, y, x); + keypad(dialog, TRUE); + + draw_box(dialog, 0, 0, height, width, + dlg.dialog.atr, dlg.border.atr); + wattrset(dialog, dlg.border.atr); + mvwaddch(dialog, height - 3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch(dialog, ACS_HLINE); + wattrset(dialog, dlg.dialog.atr); + waddch(dialog, ACS_RTEE); + + print_title(dialog, title, width); + + wattrset(dialog, dlg.dialog.atr); + print_autowrap(dialog, prompt, width - 2, 1, 3); + + list_width = width - 6; + box_y = height - list_height - 5; + box_x = (width - list_width) / 2 - 1; + + /* create new window for the list */ + list = subwin(dialog, list_height, list_width, y + box_y + 1, + x + box_x + 1); + + keypad(list, TRUE); + + /* draw a box around the list items */ + draw_box(dialog, box_y, box_x, list_height + 2, list_width + 2, + dlg.menubox_border.atr, dlg.menubox.atr); + + /* Find length of longest item in order to center checklist */ + check_x = 0; + item_foreach() + check_x = MAX(check_x, strlen(item_str()) + 4); + check_x = MIN(check_x, list_width); + + check_x = (list_width - check_x) / 2; + item_x = check_x + 4; + + if (choice >= list_height) { + scroll = choice - list_height + 1; + choice -= scroll; + } + + /* Print the list */ + for (i = 0; i < max_choice; i++) { + item_set(scroll + i); + print_item(list, i, i == choice); + } + + print_arrows(dialog, choice, item_count(), scroll, + box_y, box_x + check_x + 5, list_height); + + print_buttons(dialog, height, width, 0); + + wnoutrefresh(dialog); + wnoutrefresh(list); + doupdate(); + + while (key != KEY_ESC) { + key = wgetch(dialog); + + for (i = 0; i < max_choice; i++) { + item_set(i + scroll); + if (toupper(key) == toupper(item_str()[0])) + break; + } + + if (i < max_choice || key == KEY_UP || key == KEY_DOWN || + key == '+' || key == '-') { + if (key == KEY_UP || key == '-') { + if (!choice) { + if (!scroll) + continue; + /* Scroll list down */ + if (list_height > 1) { + /* De-highlight current first item */ + item_set(scroll); + print_item(list, 0, FALSE); + scrollok(list, TRUE); + wscrl(list, -1); + scrollok(list, FALSE); + } + scroll--; + item_set(scroll); + print_item(list, 0, TRUE); + print_arrows(dialog, choice, item_count(), + scroll, box_y, box_x + check_x + 5, list_height); + + wnoutrefresh(dialog); + wrefresh(list); + + continue; /* wait for another key press */ + } else + i = choice - 1; + } else if (key == KEY_DOWN || key == '+') { + if (choice == max_choice - 1) { + if (scroll + choice >= item_count() - 1) + continue; + /* Scroll list up */ + if (list_height > 1) { + /* De-highlight current last item before scrolling up */ + item_set(scroll + max_choice - 1); + print_item(list, + max_choice - 1, + FALSE); + scrollok(list, TRUE); + wscrl(list, 1); + scrollok(list, FALSE); + } + scroll++; + item_set(scroll + max_choice - 1); + print_item(list, max_choice - 1, TRUE); + + print_arrows(dialog, choice, item_count(), + scroll, box_y, box_x + check_x + 5, list_height); + + wnoutrefresh(dialog); + wrefresh(list); + + continue; /* wait for another key press */ + } else + i = choice + 1; + } + if (i != choice) { + /* De-highlight current item */ + item_set(scroll + choice); + print_item(list, choice, FALSE); + /* Highlight new item */ + choice = i; + item_set(scroll + choice); + print_item(list, choice, TRUE); + wnoutrefresh(dialog); + wrefresh(list); + } + continue; /* wait for another key press */ + } + switch (key) { + case 'H': + case 'h': + case '?': + button = 1; + /* fall-through */ + case 'S': + case 's': + case ' ': + case '\n': + item_foreach() + item_set_selected(0); + item_set(scroll + choice); + item_set_selected(1); + delwin(list); + delwin(dialog); + return button; + case TAB: + case KEY_LEFT: + case KEY_RIGHT: + button = ((key == KEY_LEFT ? --button : ++button) < 0) + ? 1 : (button > 1 ? 0 : button); + + print_buttons(dialog, height, width, button); + wrefresh(dialog); + break; + case 'X': + case 'x': + key = KEY_ESC; + break; + case KEY_ESC: + key = on_key_esc(dialog); + break; + case KEY_RESIZE: + delwin(list); + delwin(dialog); + on_key_resize(); + goto do_resize; + } + + /* Now, update everything... */ + doupdate(); + } + delwin(list); + delwin(dialog); + return key; /* ESC pressed */ +} diff --git a/libraries/NEMU/tools/kconfig/lxdialog/dialog.h b/libraries/NEMU/tools/kconfig/lxdialog/dialog.h new file mode 100644 index 0000000..68b565e --- /dev/null +++ b/libraries/NEMU/tools/kconfig/lxdialog/dialog.h @@ -0,0 +1,238 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * dialog.h -- common declarations for all dialog modules + * + * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __sun__ +#define CURS_MACROS +#endif +#include + +/* + * Colors in ncurses 1.9.9e do not work properly since foreground and + * background colors are OR'd rather than separately masked. This version + * of dialog was hacked to work with ncurses 1.9.9e, making it incompatible + * with standard curses. The simplest fix (to make this work with standard + * curses) uses the wbkgdset() function, not used in the original hack. + * Turn it off if we're building with 1.9.9e, since it just confuses things. + */ +#if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE) +#define OLD_NCURSES 1 +#undef wbkgdset +#define wbkgdset(w,p) /*nothing */ +#else +#define OLD_NCURSES 0 +#endif + +#define TR(params) _tracef params + +#define KEY_ESC 27 +#define TAB 9 +#define MAX_LEN 2048 +#define BUF_SIZE (10*1024) +#define MIN(x,y) (x < y ? x : y) +#define MAX(x,y) (x > y ? x : y) + +#ifndef ACS_ULCORNER +#define ACS_ULCORNER '+' +#endif +#ifndef ACS_LLCORNER +#define ACS_LLCORNER '+' +#endif +#ifndef ACS_URCORNER +#define ACS_URCORNER '+' +#endif +#ifndef ACS_LRCORNER +#define ACS_LRCORNER '+' +#endif +#ifndef ACS_HLINE +#define ACS_HLINE '-' +#endif +#ifndef ACS_VLINE +#define ACS_VLINE '|' +#endif +#ifndef ACS_LTEE +#define ACS_LTEE '+' +#endif +#ifndef ACS_RTEE +#define ACS_RTEE '+' +#endif +#ifndef ACS_UARROW +#define ACS_UARROW '^' +#endif +#ifndef ACS_DARROW +#define ACS_DARROW 'v' +#endif + +/* error return codes */ +#define ERRDISPLAYTOOSMALL (KEY_MAX + 1) + +/* + * Color definitions + */ +struct dialog_color { + chtype atr; /* Color attribute */ + int fg; /* foreground */ + int bg; /* background */ + int hl; /* highlight this item */ +}; + +struct subtitle_list { + struct subtitle_list *next; + const char *text; +}; + +struct dialog_info { + const char *backtitle; + struct subtitle_list *subtitles; + struct dialog_color screen; + struct dialog_color shadow; + struct dialog_color dialog; + struct dialog_color title; + struct dialog_color border; + struct dialog_color button_active; + struct dialog_color button_inactive; + struct dialog_color button_key_active; + struct dialog_color button_key_inactive; + struct dialog_color button_label_active; + struct dialog_color button_label_inactive; + struct dialog_color inputbox; + struct dialog_color inputbox_border; + struct dialog_color searchbox; + struct dialog_color searchbox_title; + struct dialog_color searchbox_border; + struct dialog_color position_indicator; + struct dialog_color menubox; + struct dialog_color menubox_border; + struct dialog_color item; + struct dialog_color item_selected; + struct dialog_color tag; + struct dialog_color tag_selected; + struct dialog_color tag_key; + struct dialog_color tag_key_selected; + struct dialog_color check; + struct dialog_color check_selected; + struct dialog_color uarrow; + struct dialog_color darrow; +}; + +/* + * Global variables + */ +extern struct dialog_info dlg; +extern char dialog_input_result[]; +extern int saved_x, saved_y; /* Needed in signal handler in mconf.c */ + +/* + * Function prototypes + */ + +/* item list as used by checklist and menubox */ +void item_reset(void); +void item_make(const char *fmt, ...); +void item_add_str(const char *fmt, ...); +void item_set_tag(char tag); +void item_set_data(void *p); +void item_set_selected(int val); +int item_activate_selected(void); +void *item_data(void); +char item_tag(void); + +/* item list manipulation for lxdialog use */ +#define MAXITEMSTR 200 +struct dialog_item { + char str[MAXITEMSTR]; /* prompt displayed */ + char tag; + void *data; /* pointer to menu item - used by menubox+checklist */ + int selected; /* Set to 1 by dialog_*() function if selected. */ +}; + +/* list of lialog_items */ +struct dialog_list { + struct dialog_item node; + struct dialog_list *next; +}; + +extern struct dialog_list *item_cur; +extern struct dialog_list item_nil; +extern struct dialog_list *item_head; + +int item_count(void); +void item_set(int n); +int item_n(void); +const char *item_str(void); +int item_is_selected(void); +int item_is_tag(char tag); +#define item_foreach() \ + for (item_cur = item_head ? item_head: item_cur; \ + item_cur && (item_cur != &item_nil); item_cur = item_cur->next) + +/* generic key handlers */ +int on_key_esc(WINDOW *win); +int on_key_resize(void); + +/* minimum (re)size values */ +#define CHECKLIST_HEIGTH_MIN 6 /* For dialog_checklist() */ +#define CHECKLIST_WIDTH_MIN 6 +#define INPUTBOX_HEIGTH_MIN 2 /* For dialog_inputbox() */ +#define INPUTBOX_WIDTH_MIN 2 +#define MENUBOX_HEIGTH_MIN 15 /* For dialog_menu() */ +#define MENUBOX_WIDTH_MIN 65 +#define TEXTBOX_HEIGTH_MIN 8 /* For dialog_textbox() */ +#define TEXTBOX_WIDTH_MIN 8 +#define YESNO_HEIGTH_MIN 4 /* For dialog_yesno() */ +#define YESNO_WIDTH_MIN 4 +#define WINDOW_HEIGTH_MIN 19 /* For init_dialog() */ +#define WINDOW_WIDTH_MIN 80 + +int init_dialog(const char *backtitle); +void set_dialog_backtitle(const char *backtitle); +void set_dialog_subtitles(struct subtitle_list *subtitles); +void end_dialog(int x, int y); +void attr_clear(WINDOW * win, int height, int width, chtype attr); +void dialog_clear(void); +void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x); +void print_button(WINDOW * win, const char *label, int y, int x, int selected); +void print_title(WINDOW *dialog, const char *title, int width); +void draw_box(WINDOW * win, int y, int x, int height, int width, chtype box, + chtype border); +void draw_shadow(WINDOW * win, int y, int x, int height, int width); + +int first_alpha(const char *string, const char *exempt); +int dialog_yesno(const char *title, const char *prompt, int height, int width); +int dialog_msgbox(const char *title, const char *prompt, int height, + int width, int pause); + + +typedef void (*update_text_fn)(char *buf, size_t start, size_t end, void + *_data); +int dialog_textbox(const char *title, char *tbuf, int initial_height, + int initial_width, int *keys, int *_vscroll, int *_hscroll, + update_text_fn update_text, void *data); +int dialog_menu(const char *title, const char *prompt, + const void *selected, int *s_scroll); +int dialog_checklist(const char *title, const char *prompt, int height, + int width, int list_height); +int dialog_inputbox(const char *title, const char *prompt, int height, + int width, const char *init); + +/* + * This is the base for fictitious keys, which activate + * the buttons. + * + * Mouse-generated keys are the following: + * -- the first 32 are used as numbers, in addition to '0'-'9' + * -- the lowercase are used to signal mouse-enter events (M_EVENT + 'o') + * -- uppercase chars are used to invoke the button (M_EVENT + 'O') + */ +#define M_EVENT (KEY_MAX+1) diff --git a/libraries/NEMU/tools/kconfig/lxdialog/inputbox.c b/libraries/NEMU/tools/kconfig/lxdialog/inputbox.c new file mode 100644 index 0000000..1dcfb28 --- /dev/null +++ b/libraries/NEMU/tools/kconfig/lxdialog/inputbox.c @@ -0,0 +1,289 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * inputbox.c -- implements the input box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) + */ + +#include "dialog.h" + +char dialog_input_result[MAX_LEN + 1]; + +/* + * Print the termination buttons + */ +static void print_buttons(WINDOW * dialog, int height, int width, int selected) +{ + int x = width / 2 - 11; + int y = height - 2; + + print_button(dialog, " Ok ", y, x, selected == 0); + print_button(dialog, " Help ", y, x + 14, selected == 1); + + wmove(dialog, y, x + 1 + 14 * selected); + wrefresh(dialog); +} + +/* + * Display a dialog box for inputing a string + */ +int dialog_inputbox(const char *title, const char *prompt, int height, int width, + const char *init) +{ + int i, x, y, box_y, box_x, box_width; + int input_x = 0, key = 0, button = -1; + int show_x, len, pos; + char *instr = dialog_input_result; + WINDOW *dialog; + + if (!init) + instr[0] = '\0'; + else + strcpy(instr, init); + +do_resize: + if (getmaxy(stdscr) <= (height - INPUTBOX_HEIGTH_MIN)) + return -ERRDISPLAYTOOSMALL; + if (getmaxx(stdscr) <= (width - INPUTBOX_WIDTH_MIN)) + return -ERRDISPLAYTOOSMALL; + + /* center dialog box on screen */ + x = (getmaxx(stdscr) - width) / 2; + y = (getmaxy(stdscr) - height) / 2; + + draw_shadow(stdscr, y, x, height, width); + + dialog = newwin(height, width, y, x); + keypad(dialog, TRUE); + + draw_box(dialog, 0, 0, height, width, + dlg.dialog.atr, dlg.border.atr); + wattrset(dialog, dlg.border.atr); + mvwaddch(dialog, height - 3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch(dialog, ACS_HLINE); + wattrset(dialog, dlg.dialog.atr); + waddch(dialog, ACS_RTEE); + + print_title(dialog, title, width); + + wattrset(dialog, dlg.dialog.atr); + print_autowrap(dialog, prompt, width - 2, 1, 3); + + /* Draw the input field box */ + box_width = width - 6; + getyx(dialog, y, x); + box_y = y + 2; + box_x = (width - box_width) / 2; + draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2, + dlg.dialog.atr, dlg.border.atr); + + print_buttons(dialog, height, width, 0); + + /* Set up the initial value */ + wmove(dialog, box_y, box_x); + wattrset(dialog, dlg.inputbox.atr); + + len = strlen(instr); + pos = len; + + if (len >= box_width) { + show_x = len - box_width + 1; + input_x = box_width - 1; + for (i = 0; i < box_width - 1; i++) + waddch(dialog, instr[show_x + i]); + } else { + show_x = 0; + input_x = len; + waddstr(dialog, instr); + } + + wmove(dialog, box_y, box_x + input_x); + + wrefresh(dialog); + + while (key != KEY_ESC) { + key = wgetch(dialog); + + if (button == -1) { /* Input box selected */ + switch (key) { + case TAB: + case KEY_UP: + case KEY_DOWN: + break; + case KEY_BACKSPACE: + case 8: /* ^H */ + case 127: /* ^? */ + if (pos) { + wattrset(dialog, dlg.inputbox.atr); + if (input_x == 0) { + show_x--; + } else + input_x--; + + if (pos < len) { + for (i = pos - 1; i < len; i++) { + instr[i] = instr[i+1]; + } + } + + pos--; + len--; + instr[len] = '\0'; + wmove(dialog, box_y, box_x); + for (i = 0; i < box_width; i++) { + if (!instr[show_x + i]) { + waddch(dialog, ' '); + break; + } + waddch(dialog, instr[show_x + i]); + } + wmove(dialog, box_y, input_x + box_x); + wrefresh(dialog); + } + continue; + case KEY_LEFT: + if (pos > 0) { + if (input_x > 0) { + wmove(dialog, box_y, --input_x + box_x); + } else if (input_x == 0) { + show_x--; + wmove(dialog, box_y, box_x); + for (i = 0; i < box_width; i++) { + if (!instr[show_x + i]) { + waddch(dialog, ' '); + break; + } + waddch(dialog, instr[show_x + i]); + } + wmove(dialog, box_y, box_x); + } + pos--; + } + continue; + case KEY_RIGHT: + if (pos < len) { + if (input_x < box_width - 1) { + wmove(dialog, box_y, ++input_x + box_x); + } else if (input_x == box_width - 1) { + show_x++; + wmove(dialog, box_y, box_x); + for (i = 0; i < box_width; i++) { + if (!instr[show_x + i]) { + waddch(dialog, ' '); + break; + } + waddch(dialog, instr[show_x + i]); + } + wmove(dialog, box_y, input_x + box_x); + } + pos++; + } + continue; + default: + if (key < 0x100 && isprint(key)) { + if (len < MAX_LEN) { + wattrset(dialog, dlg.inputbox.atr); + if (pos < len) { + for (i = len; i > pos; i--) + instr[i] = instr[i-1]; + instr[pos] = key; + } else { + instr[len] = key; + } + pos++; + len++; + instr[len] = '\0'; + + if (input_x == box_width - 1) { + show_x++; + } else { + input_x++; + } + + wmove(dialog, box_y, box_x); + for (i = 0; i < box_width; i++) { + if (!instr[show_x + i]) { + waddch(dialog, ' '); + break; + } + waddch(dialog, instr[show_x + i]); + } + wmove(dialog, box_y, input_x + box_x); + wrefresh(dialog); + } else + flash(); /* Alarm user about overflow */ + continue; + } + } + } + switch (key) { + case 'O': + case 'o': + delwin(dialog); + return 0; + case 'H': + case 'h': + delwin(dialog); + return 1; + case KEY_UP: + case KEY_LEFT: + switch (button) { + case -1: + button = 1; /* Indicates "Help" button is selected */ + print_buttons(dialog, height, width, 1); + break; + case 0: + button = -1; /* Indicates input box is selected */ + print_buttons(dialog, height, width, 0); + wmove(dialog, box_y, box_x + input_x); + wrefresh(dialog); + break; + case 1: + button = 0; /* Indicates "OK" button is selected */ + print_buttons(dialog, height, width, 0); + break; + } + break; + case TAB: + case KEY_DOWN: + case KEY_RIGHT: + switch (button) { + case -1: + button = 0; /* Indicates "OK" button is selected */ + print_buttons(dialog, height, width, 0); + break; + case 0: + button = 1; /* Indicates "Help" button is selected */ + print_buttons(dialog, height, width, 1); + break; + case 1: + button = -1; /* Indicates input box is selected */ + print_buttons(dialog, height, width, 0); + wmove(dialog, box_y, box_x + input_x); + wrefresh(dialog); + break; + } + break; + case ' ': + case '\n': + delwin(dialog); + return (button == -1 ? 0 : button); + case 'X': + case 'x': + key = KEY_ESC; + break; + case KEY_ESC: + key = on_key_esc(dialog); + break; + case KEY_RESIZE: + delwin(dialog); + on_key_resize(); + goto do_resize; + } + } + + delwin(dialog); + return KEY_ESC; /* ESC pressed */ +} diff --git a/libraries/NEMU/tools/kconfig/lxdialog/menubox.c b/libraries/NEMU/tools/kconfig/lxdialog/menubox.c new file mode 100644 index 0000000..58c2f8a --- /dev/null +++ b/libraries/NEMU/tools/kconfig/lxdialog/menubox.c @@ -0,0 +1,424 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * menubox.c -- implements the menu box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com) + */ + +/* + * Changes by Clifford Wolf (god@clifford.at) + * + * [ 1998-06-13 ] + * + * *) A bugfix for the Page-Down problem + * + * *) Formerly when I used Page Down and Page Up, the cursor would be set + * to the first position in the menu box. Now lxdialog is a bit + * smarter and works more like other menu systems (just have a look at + * it). + * + * *) Formerly if I selected something my scrolling would be broken because + * lxdialog is re-invoked by the Menuconfig shell script, can't + * remember the last scrolling position, and just sets it so that the + * cursor is at the bottom of the box. Now it writes the temporary file + * lxdialog.scrltmp which contains this information. The file is + * deleted by lxdialog if the user leaves a submenu or enters a new + * one, but it would be nice if Menuconfig could make another "rm -f" + * just to be sure. Just try it out - you will recognise a difference! + * + * [ 1998-06-14 ] + * + * *) Now lxdialog is crash-safe against broken "lxdialog.scrltmp" files + * and menus change their size on the fly. + * + * *) If for some reason the last scrolling position is not saved by + * lxdialog, it sets the scrolling so that the selected item is in the + * middle of the menu box, not at the bottom. + * + * 02 January 1999, Michael Elizabeth Chastain (mec@shout.net) + * Reset 'scroll' to 0 if the value from lxdialog.scrltmp is bogus. + * This fixes a bug in Menuconfig where using ' ' to descend into menus + * would leave mis-synchronized lxdialog.scrltmp files lying around, + * fscanf would read in 'scroll', and eventually that value would get used. + */ + +#include "dialog.h" + +static int menu_width, item_x; + +/* + * Print menu item + */ +static void do_print_item(WINDOW * win, const char *item, int line_y, + int selected, int hotkey) +{ + int j; + char *menu_item = malloc(menu_width + 1); + + strncpy(menu_item, item, menu_width - item_x); + menu_item[menu_width - item_x] = '\0'; + j = first_alpha(menu_item, "YyNnMmHh"); + + /* Clear 'residue' of last item */ + wattrset(win, dlg.menubox.atr); + wmove(win, line_y, 0); +#if OLD_NCURSES + { + int i; + for (i = 0; i < menu_width; i++) + waddch(win, ' '); + } +#else + wclrtoeol(win); +#endif + wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr); + mvwaddstr(win, line_y, item_x, menu_item); + if (hotkey) { + wattrset(win, selected ? dlg.tag_key_selected.atr + : dlg.tag_key.atr); + mvwaddch(win, line_y, item_x + j, menu_item[j]); + } + if (selected) { + wmove(win, line_y, item_x + 1); + } + free(menu_item); + wrefresh(win); +} + +#define print_item(index, choice, selected) \ +do { \ + item_set(index); \ + do_print_item(menu, item_str(), choice, selected, !item_is_tag(':')); \ +} while (0) + +/* + * Print the scroll indicators. + */ +static void print_arrows(WINDOW * win, int item_no, int scroll, int y, int x, + int height) +{ + int cur_y, cur_x; + + getyx(win, cur_y, cur_x); + + wmove(win, y, x); + + if (scroll > 0) { + wattrset(win, dlg.uarrow.atr); + waddch(win, ACS_UARROW); + waddstr(win, "(-)"); + } else { + wattrset(win, dlg.menubox.atr); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + } + + y = y + height + 1; + wmove(win, y, x); + wrefresh(win); + + if ((height < item_no) && (scroll + height < item_no)) { + wattrset(win, dlg.darrow.atr); + waddch(win, ACS_DARROW); + waddstr(win, "(+)"); + } else { + wattrset(win, dlg.menubox_border.atr); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + waddch(win, ACS_HLINE); + } + + wmove(win, cur_y, cur_x); + wrefresh(win); +} + +/* + * Display the termination buttons. + */ +static void print_buttons(WINDOW * win, int height, int width, int selected) +{ + int x = width / 2 - 28; + int y = height - 2; + + print_button(win, "Select", y, x, selected == 0); + print_button(win, " Exit ", y, x + 12, selected == 1); + print_button(win, " Help ", y, x + 24, selected == 2); + print_button(win, " Save ", y, x + 36, selected == 3); + print_button(win, " Load ", y, x + 48, selected == 4); + + wmove(win, y, x + 1 + 12 * selected); + wrefresh(win); +} + +/* scroll up n lines (n may be negative) */ +static void do_scroll(WINDOW *win, int *scroll, int n) +{ + /* Scroll menu up */ + scrollok(win, TRUE); + wscrl(win, n); + scrollok(win, FALSE); + *scroll = *scroll + n; + wrefresh(win); +} + +/* + * Display a menu for choosing among a number of options + */ +int dialog_menu(const char *title, const char *prompt, + const void *selected, int *s_scroll) +{ + int i, j, x, y, box_x, box_y; + int height, width, menu_height; + int key = 0, button = 0, scroll = 0, choice = 0; + int first_item = 0, max_choice; + WINDOW *dialog, *menu; + +do_resize: + height = getmaxy(stdscr); + width = getmaxx(stdscr); + if (height < MENUBOX_HEIGTH_MIN || width < MENUBOX_WIDTH_MIN) + return -ERRDISPLAYTOOSMALL; + + height -= 4; + width -= 5; + menu_height = height - 10; + + max_choice = MIN(menu_height, item_count()); + + /* center dialog box on screen */ + x = (getmaxx(stdscr) - width) / 2; + y = (getmaxy(stdscr) - height) / 2; + + draw_shadow(stdscr, y, x, height, width); + + dialog = newwin(height, width, y, x); + keypad(dialog, TRUE); + + draw_box(dialog, 0, 0, height, width, + dlg.dialog.atr, dlg.border.atr); + wattrset(dialog, dlg.border.atr); + mvwaddch(dialog, height - 3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch(dialog, ACS_HLINE); + wattrset(dialog, dlg.dialog.atr); + wbkgdset(dialog, dlg.dialog.atr & A_COLOR); + waddch(dialog, ACS_RTEE); + + print_title(dialog, title, width); + + wattrset(dialog, dlg.dialog.atr); + print_autowrap(dialog, prompt, width - 2, 1, 3); + + menu_width = width - 6; + box_y = height - menu_height - 5; + box_x = (width - menu_width) / 2 - 1; + + /* create new window for the menu */ + menu = subwin(dialog, menu_height, menu_width, + y + box_y + 1, x + box_x + 1); + keypad(menu, TRUE); + + /* draw a box around the menu items */ + draw_box(dialog, box_y, box_x, menu_height + 2, menu_width + 2, + dlg.menubox_border.atr, dlg.menubox.atr); + + if (menu_width >= 80) + item_x = (menu_width - 70) / 2; + else + item_x = 4; + + /* Set choice to default item */ + item_foreach() + if (selected && (selected == item_data())) + choice = item_n(); + /* get the saved scroll info */ + scroll = *s_scroll; + if ((scroll <= choice) && (scroll + max_choice > choice) && + (scroll >= 0) && (scroll + max_choice <= item_count())) { + first_item = scroll; + choice = choice - scroll; + } else { + scroll = 0; + } + if ((choice >= max_choice)) { + if (choice >= item_count() - max_choice / 2) + scroll = first_item = item_count() - max_choice; + else + scroll = first_item = choice - max_choice / 2; + choice = choice - scroll; + } + + /* Print the menu */ + for (i = 0; i < max_choice; i++) { + print_item(first_item + i, i, i == choice); + } + + wnoutrefresh(menu); + + print_arrows(dialog, item_count(), scroll, + box_y, box_x + item_x + 1, menu_height); + + print_buttons(dialog, height, width, 0); + wmove(menu, choice, item_x + 1); + wrefresh(menu); + + while (key != KEY_ESC) { + key = wgetch(menu); + + if (key < 256 && isalpha(key)) + key = tolower(key); + + if (strchr("ynmh", key)) + i = max_choice; + else { + for (i = choice + 1; i < max_choice; i++) { + item_set(scroll + i); + j = first_alpha(item_str(), "YyNnMmHh"); + if (key == tolower(item_str()[j])) + break; + } + if (i == max_choice) + for (i = 0; i < max_choice; i++) { + item_set(scroll + i); + j = first_alpha(item_str(), "YyNnMmHh"); + if (key == tolower(item_str()[j])) + break; + } + } + + if (item_count() != 0 && + (i < max_choice || + key == KEY_UP || key == KEY_DOWN || + key == '-' || key == '+' || + key == KEY_PPAGE || key == KEY_NPAGE)) { + /* Remove highligt of current item */ + print_item(scroll + choice, choice, FALSE); + + if (key == KEY_UP || key == '-') { + if (choice < 2 && scroll) { + /* Scroll menu down */ + do_scroll(menu, &scroll, -1); + + print_item(scroll, 0, FALSE); + } else + choice = MAX(choice - 1, 0); + + } else if (key == KEY_DOWN || key == '+') { + print_item(scroll+choice, choice, FALSE); + + if ((choice > max_choice - 3) && + (scroll + max_choice < item_count())) { + /* Scroll menu up */ + do_scroll(menu, &scroll, 1); + + print_item(scroll+max_choice - 1, + max_choice - 1, FALSE); + } else + choice = MIN(choice + 1, max_choice - 1); + + } else if (key == KEY_PPAGE) { + scrollok(menu, TRUE); + for (i = 0; (i < max_choice); i++) { + if (scroll > 0) { + do_scroll(menu, &scroll, -1); + print_item(scroll, 0, FALSE); + } else { + if (choice > 0) + choice--; + } + } + + } else if (key == KEY_NPAGE) { + for (i = 0; (i < max_choice); i++) { + if (scroll + max_choice < item_count()) { + do_scroll(menu, &scroll, 1); + print_item(scroll+max_choice-1, + max_choice - 1, FALSE); + } else { + if (choice + 1 < max_choice) + choice++; + } + } + } else + choice = i; + + print_item(scroll + choice, choice, TRUE); + + print_arrows(dialog, item_count(), scroll, + box_y, box_x + item_x + 1, menu_height); + + wnoutrefresh(dialog); + wrefresh(menu); + + continue; /* wait for another key press */ + } + + switch (key) { + case KEY_LEFT: + case TAB: + case KEY_RIGHT: + button = ((key == KEY_LEFT ? --button : ++button) < 0) + ? 4 : (button > 4 ? 0 : button); + + print_buttons(dialog, height, width, button); + wrefresh(menu); + break; + case ' ': + case 's': + case 'y': + case 'n': + case 'm': + case '/': + case 'h': + case '?': + case 'z': + case '\n': + /* save scroll info */ + *s_scroll = scroll; + delwin(menu); + delwin(dialog); + item_set(scroll + choice); + item_set_selected(1); + switch (key) { + case 'h': + case '?': + return 2; + case 's': + case 'y': + return 5; + case 'n': + return 6; + case 'm': + return 7; + case ' ': + return 8; + case '/': + return 9; + case 'z': + return 10; + case '\n': + return button; + } + return 0; + case 'e': + case 'x': + key = KEY_ESC; + break; + case KEY_ESC: + key = on_key_esc(menu); + break; + case KEY_RESIZE: + on_key_resize(); + delwin(menu); + delwin(dialog); + goto do_resize; + } + } + delwin(menu); + delwin(dialog); + return key; /* ESC pressed */ +} diff --git a/libraries/NEMU/tools/kconfig/lxdialog/textbox.c b/libraries/NEMU/tools/kconfig/lxdialog/textbox.c new file mode 100644 index 0000000..4e339b1 --- /dev/null +++ b/libraries/NEMU/tools/kconfig/lxdialog/textbox.c @@ -0,0 +1,395 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * textbox.c -- implements the text box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) + */ + +#include "dialog.h" + +static void back_lines(int n); +static void print_page(WINDOW *win, int height, int width, update_text_fn + update_text, void *data); +static void print_line(WINDOW *win, int row, int width); +static char *get_line(void); +static void print_position(WINDOW * win); + +static int hscroll; +static int begin_reached, end_reached, page_length; +static char *buf; +static char *page; + +/* + * refresh window content + */ +static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw, + int cur_y, int cur_x, update_text_fn update_text, + void *data) +{ + print_page(box, boxh, boxw, update_text, data); + print_position(dialog); + wmove(dialog, cur_y, cur_x); /* Restore cursor position */ + wrefresh(dialog); +} + + +/* + * Display text from a file in a dialog box. + * + * keys is a null-terminated array + * update_text() may not add or remove any '\n' or '\0' in tbuf + */ +int dialog_textbox(const char *title, char *tbuf, int initial_height, + int initial_width, int *keys, int *_vscroll, int *_hscroll, + update_text_fn update_text, void *data) +{ + int i, x, y, cur_x, cur_y, key = 0; + int height, width, boxh, boxw; + WINDOW *dialog, *box; + bool done = false; + + begin_reached = 1; + end_reached = 0; + page_length = 0; + hscroll = 0; + buf = tbuf; + page = buf; /* page is pointer to start of page to be displayed */ + + if (_vscroll && *_vscroll) { + begin_reached = 0; + + for (i = 0; i < *_vscroll; i++) + get_line(); + } + if (_hscroll) + hscroll = *_hscroll; + +do_resize: + getmaxyx(stdscr, height, width); + if (height < TEXTBOX_HEIGTH_MIN || width < TEXTBOX_WIDTH_MIN) + return -ERRDISPLAYTOOSMALL; + if (initial_height != 0) + height = initial_height; + else + if (height > 4) + height -= 4; + else + height = 0; + if (initial_width != 0) + width = initial_width; + else + if (width > 5) + width -= 5; + else + width = 0; + + /* center dialog box on screen */ + x = (getmaxx(stdscr) - width) / 2; + y = (getmaxy(stdscr) - height) / 2; + + draw_shadow(stdscr, y, x, height, width); + + dialog = newwin(height, width, y, x); + keypad(dialog, TRUE); + + /* Create window for box region, used for scrolling text */ + boxh = height - 4; + boxw = width - 2; + box = subwin(dialog, boxh, boxw, y + 1, x + 1); + wattrset(box, dlg.dialog.atr); + wbkgdset(box, dlg.dialog.atr & A_COLOR); + + keypad(box, TRUE); + + /* register the new window, along with its borders */ + draw_box(dialog, 0, 0, height, width, + dlg.dialog.atr, dlg.border.atr); + + wattrset(dialog, dlg.border.atr); + mvwaddch(dialog, height - 3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch(dialog, ACS_HLINE); + wattrset(dialog, dlg.dialog.atr); + wbkgdset(dialog, dlg.dialog.atr & A_COLOR); + waddch(dialog, ACS_RTEE); + + print_title(dialog, title, width); + + print_button(dialog, " Exit ", height - 2, width / 2 - 4, TRUE); + wnoutrefresh(dialog); + getyx(dialog, cur_y, cur_x); /* Save cursor position */ + + /* Print first page of text */ + attr_clear(box, boxh, boxw, dlg.dialog.atr); + refresh_text_box(dialog, box, boxh, boxw, cur_y, cur_x, update_text, + data); + + while (!done) { + key = wgetch(dialog); + switch (key) { + case 'E': /* Exit */ + case 'e': + case 'X': + case 'x': + case 'q': + case '\n': + done = true; + break; + case 'g': /* First page */ + case KEY_HOME: + if (!begin_reached) { + begin_reached = 1; + page = buf; + refresh_text_box(dialog, box, boxh, boxw, + cur_y, cur_x, update_text, + data); + } + break; + case 'G': /* Last page */ + case KEY_END: + + end_reached = 1; + /* point to last char in buf */ + page = buf + strlen(buf); + back_lines(boxh); + refresh_text_box(dialog, box, boxh, boxw, cur_y, + cur_x, update_text, data); + break; + case 'K': /* Previous line */ + case 'k': + case KEY_UP: + if (begin_reached) + break; + + back_lines(page_length + 1); + refresh_text_box(dialog, box, boxh, boxw, cur_y, + cur_x, update_text, data); + break; + case 'B': /* Previous page */ + case 'b': + case 'u': + case KEY_PPAGE: + if (begin_reached) + break; + back_lines(page_length + boxh); + refresh_text_box(dialog, box, boxh, boxw, cur_y, + cur_x, update_text, data); + break; + case 'J': /* Next line */ + case 'j': + case KEY_DOWN: + if (end_reached) + break; + + back_lines(page_length - 1); + refresh_text_box(dialog, box, boxh, boxw, cur_y, + cur_x, update_text, data); + break; + case KEY_NPAGE: /* Next page */ + case ' ': + case 'd': + if (end_reached) + break; + + begin_reached = 0; + refresh_text_box(dialog, box, boxh, boxw, cur_y, + cur_x, update_text, data); + break; + case '0': /* Beginning of line */ + case 'H': /* Scroll left */ + case 'h': + case KEY_LEFT: + if (hscroll <= 0) + break; + + if (key == '0') + hscroll = 0; + else + hscroll--; + /* Reprint current page to scroll horizontally */ + back_lines(page_length); + refresh_text_box(dialog, box, boxh, boxw, cur_y, + cur_x, update_text, data); + break; + case 'L': /* Scroll right */ + case 'l': + case KEY_RIGHT: + if (hscroll >= MAX_LEN) + break; + hscroll++; + /* Reprint current page to scroll horizontally */ + back_lines(page_length); + refresh_text_box(dialog, box, boxh, boxw, cur_y, + cur_x, update_text, data); + break; + case KEY_ESC: + if (on_key_esc(dialog) == KEY_ESC) + done = true; + break; + case KEY_RESIZE: + back_lines(height); + delwin(box); + delwin(dialog); + on_key_resize(); + goto do_resize; + default: + for (i = 0; keys[i]; i++) { + if (key == keys[i]) { + done = true; + break; + } + } + } + } + delwin(box); + delwin(dialog); + if (_vscroll) { + const char *s; + + s = buf; + *_vscroll = 0; + back_lines(page_length); + while (s < page && (s = strchr(s, '\n'))) { + (*_vscroll)++; + s++; + } + } + if (_hscroll) + *_hscroll = hscroll; + return key; +} + +/* + * Go back 'n' lines in text. Called by dialog_textbox(). + * 'page' will be updated to point to the desired line in 'buf'. + */ +static void back_lines(int n) +{ + int i; + + begin_reached = 0; + /* Go back 'n' lines */ + for (i = 0; i < n; i++) { + if (*page == '\0') { + if (end_reached) { + end_reached = 0; + continue; + } + } + if (page == buf) { + begin_reached = 1; + return; + } + page--; + do { + if (page == buf) { + begin_reached = 1; + return; + } + page--; + } while (*page != '\n'); + page++; + } +} + +/* + * Print a new page of text. + */ +static void print_page(WINDOW *win, int height, int width, update_text_fn + update_text, void *data) +{ + int i, passed_end = 0; + + if (update_text) { + char *end; + + for (i = 0; i < height; i++) + get_line(); + end = page; + back_lines(height); + update_text(buf, page - buf, end - buf, data); + } + + page_length = 0; + for (i = 0; i < height; i++) { + print_line(win, i, width); + if (!passed_end) + page_length++; + if (end_reached && !passed_end) + passed_end = 1; + } + wnoutrefresh(win); +} + +/* + * Print a new line of text. + */ +static void print_line(WINDOW * win, int row, int width) +{ + char *line; + + line = get_line(); + line += MIN(strlen(line), hscroll); /* Scroll horizontally */ + wmove(win, row, 0); /* move cursor to correct line */ + waddch(win, ' '); + waddnstr(win, line, MIN(strlen(line), width - 2)); + + /* Clear 'residue' of previous line */ +#if OLD_NCURSES + { + int x = getcurx(win); + int i; + for (i = 0; i < width - x; i++) + waddch(win, ' '); + } +#else + wclrtoeol(win); +#endif +} + +/* + * Return current line of text. Called by dialog_textbox() and print_line(). + * 'page' should point to start of current line before calling, and will be + * updated to point to start of next line. + */ +static char *get_line(void) +{ + int i = 0; + static char line[MAX_LEN + 1]; + + end_reached = 0; + while (*page != '\n') { + if (*page == '\0') { + end_reached = 1; + break; + } else if (i < MAX_LEN) + line[i++] = *(page++); + else { + /* Truncate lines longer than MAX_LEN characters */ + if (i == MAX_LEN) + line[i++] = '\0'; + page++; + } + } + if (i <= MAX_LEN) + line[i] = '\0'; + if (!end_reached) + page++; /* move past '\n' */ + + return line; +} + +/* + * Print current position + */ +static void print_position(WINDOW * win) +{ + int percent; + + wattrset(win, dlg.position_indicator.atr); + wbkgdset(win, dlg.position_indicator.atr & A_COLOR); + percent = (page - buf) * 100 / strlen(buf); + wmove(win, getmaxy(win) - 3, getmaxx(win) - 9); + wprintw(win, "(%3d%%)", percent); +} diff --git a/libraries/NEMU/tools/kconfig/lxdialog/util.c b/libraries/NEMU/tools/kconfig/lxdialog/util.c new file mode 100644 index 0000000..1b490d4 --- /dev/null +++ b/libraries/NEMU/tools/kconfig/lxdialog/util.c @@ -0,0 +1,700 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * util.c + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) + */ + +#include + +#include "dialog.h" + +/* Needed in signal handler in mconf.c */ +int saved_x, saved_y; + +struct dialog_info dlg; + +static void set_mono_theme(void) +{ + dlg.screen.atr = A_NORMAL; + dlg.shadow.atr = A_NORMAL; + dlg.dialog.atr = A_NORMAL; + dlg.title.atr = A_BOLD; + dlg.border.atr = A_NORMAL; + dlg.button_active.atr = A_REVERSE; + dlg.button_inactive.atr = A_DIM; + dlg.button_key_active.atr = A_REVERSE; + dlg.button_key_inactive.atr = A_BOLD; + dlg.button_label_active.atr = A_REVERSE; + dlg.button_label_inactive.atr = A_NORMAL; + dlg.inputbox.atr = A_NORMAL; + dlg.inputbox_border.atr = A_NORMAL; + dlg.searchbox.atr = A_NORMAL; + dlg.searchbox_title.atr = A_BOLD; + dlg.searchbox_border.atr = A_NORMAL; + dlg.position_indicator.atr = A_BOLD; + dlg.menubox.atr = A_NORMAL; + dlg.menubox_border.atr = A_NORMAL; + dlg.item.atr = A_NORMAL; + dlg.item_selected.atr = A_REVERSE; + dlg.tag.atr = A_BOLD; + dlg.tag_selected.atr = A_REVERSE; + dlg.tag_key.atr = A_BOLD; + dlg.tag_key_selected.atr = A_REVERSE; + dlg.check.atr = A_BOLD; + dlg.check_selected.atr = A_REVERSE; + dlg.uarrow.atr = A_BOLD; + dlg.darrow.atr = A_BOLD; +} + +#define DLG_COLOR(dialog, f, b, h) \ +do { \ + dlg.dialog.fg = (f); \ + dlg.dialog.bg = (b); \ + dlg.dialog.hl = (h); \ +} while (0) + +static void set_classic_theme(void) +{ + DLG_COLOR(screen, COLOR_CYAN, COLOR_BLUE, true); + DLG_COLOR(shadow, COLOR_BLACK, COLOR_BLACK, true); + DLG_COLOR(dialog, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(title, COLOR_YELLOW, COLOR_WHITE, true); + DLG_COLOR(border, COLOR_WHITE, COLOR_WHITE, true); + DLG_COLOR(button_active, COLOR_WHITE, COLOR_BLUE, true); + DLG_COLOR(button_inactive, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(button_key_active, COLOR_WHITE, COLOR_BLUE, true); + DLG_COLOR(button_key_inactive, COLOR_RED, COLOR_WHITE, false); + DLG_COLOR(button_label_active, COLOR_YELLOW, COLOR_BLUE, true); + DLG_COLOR(button_label_inactive, COLOR_BLACK, COLOR_WHITE, true); + DLG_COLOR(inputbox, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(inputbox_border, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(searchbox, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(searchbox_title, COLOR_YELLOW, COLOR_WHITE, true); + DLG_COLOR(searchbox_border, COLOR_WHITE, COLOR_WHITE, true); + DLG_COLOR(position_indicator, COLOR_YELLOW, COLOR_WHITE, true); + DLG_COLOR(menubox, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(menubox_border, COLOR_WHITE, COLOR_WHITE, true); + DLG_COLOR(item, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(item_selected, COLOR_WHITE, COLOR_BLUE, true); + DLG_COLOR(tag, COLOR_YELLOW, COLOR_WHITE, true); + DLG_COLOR(tag_selected, COLOR_YELLOW, COLOR_BLUE, true); + DLG_COLOR(tag_key, COLOR_YELLOW, COLOR_WHITE, true); + DLG_COLOR(tag_key_selected, COLOR_YELLOW, COLOR_BLUE, true); + DLG_COLOR(check, COLOR_BLACK, COLOR_WHITE, false); + DLG_COLOR(check_selected, COLOR_WHITE, COLOR_BLUE, true); + DLG_COLOR(uarrow, COLOR_GREEN, COLOR_WHITE, true); + DLG_COLOR(darrow, COLOR_GREEN, COLOR_WHITE, true); +} + +static void set_blackbg_theme(void) +{ + DLG_COLOR(screen, COLOR_RED, COLOR_BLACK, true); + DLG_COLOR(shadow, COLOR_BLACK, COLOR_BLACK, false); + DLG_COLOR(dialog, COLOR_WHITE, COLOR_BLACK, false); + DLG_COLOR(title, COLOR_RED, COLOR_BLACK, false); + DLG_COLOR(border, COLOR_BLACK, COLOR_BLACK, true); + + DLG_COLOR(button_active, COLOR_YELLOW, COLOR_RED, false); + DLG_COLOR(button_inactive, COLOR_YELLOW, COLOR_BLACK, false); + DLG_COLOR(button_key_active, COLOR_YELLOW, COLOR_RED, true); + DLG_COLOR(button_key_inactive, COLOR_RED, COLOR_BLACK, false); + DLG_COLOR(button_label_active, COLOR_WHITE, COLOR_RED, false); + DLG_COLOR(button_label_inactive, COLOR_BLACK, COLOR_BLACK, true); + + DLG_COLOR(inputbox, COLOR_YELLOW, COLOR_BLACK, false); + DLG_COLOR(inputbox_border, COLOR_YELLOW, COLOR_BLACK, false); + + DLG_COLOR(searchbox, COLOR_YELLOW, COLOR_BLACK, false); + DLG_COLOR(searchbox_title, COLOR_YELLOW, COLOR_BLACK, true); + DLG_COLOR(searchbox_border, COLOR_BLACK, COLOR_BLACK, true); + + DLG_COLOR(position_indicator, COLOR_RED, COLOR_BLACK, false); + + DLG_COLOR(menubox, COLOR_YELLOW, COLOR_BLACK, false); + DLG_COLOR(menubox_border, COLOR_BLACK, COLOR_BLACK, true); + + DLG_COLOR(item, COLOR_WHITE, COLOR_BLACK, false); + DLG_COLOR(item_selected, COLOR_WHITE, COLOR_RED, false); + + DLG_COLOR(tag, COLOR_RED, COLOR_BLACK, false); + DLG_COLOR(tag_selected, COLOR_YELLOW, COLOR_RED, true); + DLG_COLOR(tag_key, COLOR_RED, COLOR_BLACK, false); + DLG_COLOR(tag_key_selected, COLOR_YELLOW, COLOR_RED, true); + + DLG_COLOR(check, COLOR_YELLOW, COLOR_BLACK, false); + DLG_COLOR(check_selected, COLOR_YELLOW, COLOR_RED, true); + + DLG_COLOR(uarrow, COLOR_RED, COLOR_BLACK, false); + DLG_COLOR(darrow, COLOR_RED, COLOR_BLACK, false); +} + +static void set_bluetitle_theme(void) +{ + set_classic_theme(); + DLG_COLOR(title, COLOR_BLUE, COLOR_WHITE, true); + DLG_COLOR(button_key_active, COLOR_YELLOW, COLOR_BLUE, true); + DLG_COLOR(button_label_active, COLOR_WHITE, COLOR_BLUE, true); + DLG_COLOR(searchbox_title, COLOR_BLUE, COLOR_WHITE, true); + DLG_COLOR(position_indicator, COLOR_BLUE, COLOR_WHITE, true); + DLG_COLOR(tag, COLOR_BLUE, COLOR_WHITE, true); + DLG_COLOR(tag_key, COLOR_BLUE, COLOR_WHITE, true); + +} + +/* + * Select color theme + */ +static int set_theme(const char *theme) +{ + int use_color = 1; + if (!theme) + set_bluetitle_theme(); + else if (strcmp(theme, "classic") == 0) + set_classic_theme(); + else if (strcmp(theme, "bluetitle") == 0) + set_bluetitle_theme(); + else if (strcmp(theme, "blackbg") == 0) + set_blackbg_theme(); + else if (strcmp(theme, "mono") == 0) + use_color = 0; + + return use_color; +} + +static void init_one_color(struct dialog_color *color) +{ + static int pair = 0; + + pair++; + init_pair(pair, color->fg, color->bg); + if (color->hl) + color->atr = A_BOLD | COLOR_PAIR(pair); + else + color->atr = COLOR_PAIR(pair); +} + +static void init_dialog_colors(void) +{ + init_one_color(&dlg.screen); + init_one_color(&dlg.shadow); + init_one_color(&dlg.dialog); + init_one_color(&dlg.title); + init_one_color(&dlg.border); + init_one_color(&dlg.button_active); + init_one_color(&dlg.button_inactive); + init_one_color(&dlg.button_key_active); + init_one_color(&dlg.button_key_inactive); + init_one_color(&dlg.button_label_active); + init_one_color(&dlg.button_label_inactive); + init_one_color(&dlg.inputbox); + init_one_color(&dlg.inputbox_border); + init_one_color(&dlg.searchbox); + init_one_color(&dlg.searchbox_title); + init_one_color(&dlg.searchbox_border); + init_one_color(&dlg.position_indicator); + init_one_color(&dlg.menubox); + init_one_color(&dlg.menubox_border); + init_one_color(&dlg.item); + init_one_color(&dlg.item_selected); + init_one_color(&dlg.tag); + init_one_color(&dlg.tag_selected); + init_one_color(&dlg.tag_key); + init_one_color(&dlg.tag_key_selected); + init_one_color(&dlg.check); + init_one_color(&dlg.check_selected); + init_one_color(&dlg.uarrow); + init_one_color(&dlg.darrow); +} + +/* + * Setup for color display + */ +static void color_setup(const char *theme) +{ + int use_color; + + use_color = set_theme(theme); + if (use_color && has_colors()) { + start_color(); + init_dialog_colors(); + } else + set_mono_theme(); +} + +/* + * Set window to attribute 'attr' + */ +void attr_clear(WINDOW * win, int height, int width, chtype attr) +{ + int i, j; + + wattrset(win, attr); + for (i = 0; i < height; i++) { + wmove(win, i, 0); + for (j = 0; j < width; j++) + waddch(win, ' '); + } + touchwin(win); +} + +void dialog_clear(void) +{ + int lines, columns; + + lines = getmaxy(stdscr); + columns = getmaxx(stdscr); + + attr_clear(stdscr, lines, columns, dlg.screen.atr); + /* Display background title if it exists ... - SLH */ + if (dlg.backtitle != NULL) { + int i, len = 0, skip = 0; + struct subtitle_list *pos; + + wattrset(stdscr, dlg.screen.atr); + mvwaddstr(stdscr, 0, 1, (char *)dlg.backtitle); + + for (pos = dlg.subtitles; pos != NULL; pos = pos->next) { + /* 3 is for the arrow and spaces */ + len += strlen(pos->text) + 3; + } + + wmove(stdscr, 1, 1); + if (len > columns - 2) { + const char *ellipsis = "[...] "; + waddstr(stdscr, ellipsis); + skip = len - (columns - 2 - strlen(ellipsis)); + } + + for (pos = dlg.subtitles; pos != NULL; pos = pos->next) { + if (skip == 0) + waddch(stdscr, ACS_RARROW); + else + skip--; + + if (skip == 0) + waddch(stdscr, ' '); + else + skip--; + + if (skip < strlen(pos->text)) { + waddstr(stdscr, pos->text + skip); + skip = 0; + } else + skip -= strlen(pos->text); + + if (skip == 0) + waddch(stdscr, ' '); + else + skip--; + } + + for (i = len + 1; i < columns - 1; i++) + waddch(stdscr, ACS_HLINE); + } + wnoutrefresh(stdscr); +} + +/* + * Do some initialization for dialog + */ +int init_dialog(const char *backtitle) +{ + int height, width; + + initscr(); /* Init curses */ + + /* Get current cursor position for signal handler in mconf.c */ + getyx(stdscr, saved_y, saved_x); + + getmaxyx(stdscr, height, width); + if (height < WINDOW_HEIGTH_MIN || width < WINDOW_WIDTH_MIN) { + endwin(); + return -ERRDISPLAYTOOSMALL; + } + + dlg.backtitle = backtitle; + color_setup(getenv("MENUCONFIG_COLOR")); + + keypad(stdscr, TRUE); + cbreak(); + noecho(); + dialog_clear(); + + return 0; +} + +void set_dialog_backtitle(const char *backtitle) +{ + dlg.backtitle = backtitle; +} + +void set_dialog_subtitles(struct subtitle_list *subtitles) +{ + dlg.subtitles = subtitles; +} + +/* + * End using dialog functions. + */ +void end_dialog(int x, int y) +{ + /* move cursor back to original position */ + move(y, x); + refresh(); + endwin(); +} + +/* Print the title of the dialog. Center the title and truncate + * tile if wider than dialog (- 2 chars). + **/ +void print_title(WINDOW *dialog, const char *title, int width) +{ + if (title) { + int tlen = MIN(width - 2, strlen(title)); + wattrset(dialog, dlg.title.atr); + mvwaddch(dialog, 0, (width - tlen) / 2 - 1, ' '); + mvwaddnstr(dialog, 0, (width - tlen)/2, title, tlen); + waddch(dialog, ' '); + } +} + +/* + * Print a string of text in a window, automatically wrap around to the + * next line if the string is too long to fit on one line. Newline + * characters '\n' are propperly processed. We start on a new line + * if there is no room for at least 4 nonblanks following a double-space. + */ +void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x) +{ + int newl, cur_x, cur_y; + int prompt_len, room, wlen; + char tempstr[MAX_LEN + 1], *word, *sp, *sp2, *newline_separator = 0; + + strcpy(tempstr, prompt); + + prompt_len = strlen(tempstr); + + if (prompt_len <= width - x * 2) { /* If prompt is short */ + wmove(win, y, (width - prompt_len) / 2); + waddstr(win, tempstr); + } else { + cur_x = x; + cur_y = y; + newl = 1; + word = tempstr; + while (word && *word) { + sp = strpbrk(word, "\n "); + if (sp && *sp == '\n') + newline_separator = sp; + + if (sp) + *sp++ = 0; + + /* Wrap to next line if either the word does not fit, + or it is the first word of a new sentence, and it is + short, and the next word does not fit. */ + room = width - cur_x; + wlen = strlen(word); + if (wlen > room || + (newl && wlen < 4 && sp + && wlen + 1 + strlen(sp) > room + && (!(sp2 = strpbrk(sp, "\n ")) + || wlen + 1 + (sp2 - sp) > room))) { + cur_y++; + cur_x = x; + } + wmove(win, cur_y, cur_x); + waddstr(win, word); + getyx(win, cur_y, cur_x); + + /* Move to the next line if the word separator was a newline */ + if (newline_separator) { + cur_y++; + cur_x = x; + newline_separator = 0; + } else + cur_x++; + + if (sp && *sp == ' ') { + cur_x++; /* double space */ + while (*++sp == ' ') ; + newl = 1; + } else + newl = 0; + word = sp; + } + } +} + +/* + * Print a button + */ +void print_button(WINDOW * win, const char *label, int y, int x, int selected) +{ + int i, temp; + + wmove(win, y, x); + wattrset(win, selected ? dlg.button_active.atr + : dlg.button_inactive.atr); + waddstr(win, "<"); + temp = strspn(label, " "); + label += temp; + wattrset(win, selected ? dlg.button_label_active.atr + : dlg.button_label_inactive.atr); + for (i = 0; i < temp; i++) + waddch(win, ' '); + wattrset(win, selected ? dlg.button_key_active.atr + : dlg.button_key_inactive.atr); + waddch(win, label[0]); + wattrset(win, selected ? dlg.button_label_active.atr + : dlg.button_label_inactive.atr); + waddstr(win, (char *)label + 1); + wattrset(win, selected ? dlg.button_active.atr + : dlg.button_inactive.atr); + waddstr(win, ">"); + wmove(win, y, x + temp + 1); +} + +/* + * Draw a rectangular box with line drawing characters + */ +void +draw_box(WINDOW * win, int y, int x, int height, int width, + chtype box, chtype border) +{ + int i, j; + + wattrset(win, 0); + for (i = 0; i < height; i++) { + wmove(win, y + i, x); + for (j = 0; j < width; j++) + if (!i && !j) + waddch(win, border | ACS_ULCORNER); + else if (i == height - 1 && !j) + waddch(win, border | ACS_LLCORNER); + else if (!i && j == width - 1) + waddch(win, box | ACS_URCORNER); + else if (i == height - 1 && j == width - 1) + waddch(win, box | ACS_LRCORNER); + else if (!i) + waddch(win, border | ACS_HLINE); + else if (i == height - 1) + waddch(win, box | ACS_HLINE); + else if (!j) + waddch(win, border | ACS_VLINE); + else if (j == width - 1) + waddch(win, box | ACS_VLINE); + else + waddch(win, box | ' '); + } +} + +/* + * Draw shadows along the right and bottom edge to give a more 3D look + * to the boxes + */ +void draw_shadow(WINDOW * win, int y, int x, int height, int width) +{ + int i; + + if (has_colors()) { /* Whether terminal supports color? */ + wattrset(win, dlg.shadow.atr); + wmove(win, y + height, x + 2); + for (i = 0; i < width; i++) + waddch(win, winch(win) & A_CHARTEXT); + for (i = y + 1; i < y + height + 1; i++) { + wmove(win, i, x + width); + waddch(win, winch(win) & A_CHARTEXT); + waddch(win, winch(win) & A_CHARTEXT); + } + wnoutrefresh(win); + } +} + +/* + * Return the position of the first alphabetic character in a string. + */ +int first_alpha(const char *string, const char *exempt) +{ + int i, in_paren = 0, c; + + for (i = 0; i < strlen(string); i++) { + c = tolower(string[i]); + + if (strchr("<[(", c)) + ++in_paren; + if (strchr(">])", c) && in_paren > 0) + --in_paren; + + if ((!in_paren) && isalpha(c) && strchr(exempt, c) == 0) + return i; + } + + return 0; +} + +/* + * ncurses uses ESC to detect escaped char sequences. This resutl in + * a small timeout before ESC is actually delivered to the application. + * lxdialog suggest which is correctly translated to two + * times esc. But then we need to ignore the second esc to avoid stepping + * out one menu too much. Filter away all escaped key sequences since + * keypad(FALSE) turn off ncurses support for escape sequences - and thats + * needed to make notimeout() do as expected. + */ +int on_key_esc(WINDOW *win) +{ + int key; + int key2; + int key3; + + nodelay(win, TRUE); + keypad(win, FALSE); + key = wgetch(win); + key2 = wgetch(win); + do { + key3 = wgetch(win); + } while (key3 != ERR); + nodelay(win, FALSE); + keypad(win, TRUE); + if (key == KEY_ESC && key2 == ERR) + return KEY_ESC; + else if (key != ERR && key != KEY_ESC && key2 == ERR) + ungetch(key); + + return -1; +} + +/* redraw screen in new size */ +int on_key_resize(void) +{ + dialog_clear(); + return KEY_RESIZE; +} + +struct dialog_list *item_cur; +struct dialog_list item_nil; +struct dialog_list *item_head; + +void item_reset(void) +{ + struct dialog_list *p, *next; + + for (p = item_head; p; p = next) { + next = p->next; + free(p); + } + item_head = NULL; + item_cur = &item_nil; +} + +void item_make(const char *fmt, ...) +{ + va_list ap; + struct dialog_list *p = malloc(sizeof(*p)); + + if (item_head) + item_cur->next = p; + else + item_head = p; + item_cur = p; + memset(p, 0, sizeof(*p)); + + va_start(ap, fmt); + vsnprintf(item_cur->node.str, sizeof(item_cur->node.str), fmt, ap); + va_end(ap); +} + +void item_add_str(const char *fmt, ...) +{ + va_list ap; + size_t avail; + + avail = sizeof(item_cur->node.str) - strlen(item_cur->node.str); + + va_start(ap, fmt); + vsnprintf(item_cur->node.str + strlen(item_cur->node.str), + avail, fmt, ap); + item_cur->node.str[sizeof(item_cur->node.str) - 1] = '\0'; + va_end(ap); +} + +void item_set_tag(char tag) +{ + item_cur->node.tag = tag; +} +void item_set_data(void *ptr) +{ + item_cur->node.data = ptr; +} + +void item_set_selected(int val) +{ + item_cur->node.selected = val; +} + +int item_activate_selected(void) +{ + item_foreach() + if (item_is_selected()) + return 1; + return 0; +} + +void *item_data(void) +{ + return item_cur->node.data; +} + +char item_tag(void) +{ + return item_cur->node.tag; +} + +int item_count(void) +{ + int n = 0; + struct dialog_list *p; + + for (p = item_head; p; p = p->next) + n++; + return n; +} + +void item_set(int n) +{ + int i = 0; + item_foreach() + if (i++ == n) + return; +} + +int item_n(void) +{ + int n = 0; + struct dialog_list *p; + + for (p = item_head; p; p = p->next) { + if (p == item_cur) + return n; + n++; + } + return 0; +} + +const char *item_str(void) +{ + return item_cur->node.str; +} + +int item_is_selected(void) +{ + return (item_cur->node.selected != 0); +} + +int item_is_tag(char tag) +{ + return (item_cur->node.tag == tag); +} diff --git a/libraries/NEMU/tools/kconfig/lxdialog/yesno.c b/libraries/NEMU/tools/kconfig/lxdialog/yesno.c new file mode 100644 index 0000000..bcaac9b --- /dev/null +++ b/libraries/NEMU/tools/kconfig/lxdialog/yesno.c @@ -0,0 +1,101 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * yesno.c -- implements the yes/no box + * + * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) + * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) + */ + +#include "dialog.h" + +/* + * Display termination buttons + */ +static void print_buttons(WINDOW * dialog, int height, int width, int selected) +{ + int x = width / 2 - 10; + int y = height - 2; + + print_button(dialog, " Yes ", y, x, selected == 0); + print_button(dialog, " No ", y, x + 13, selected == 1); + + wmove(dialog, y, x + 1 + 13 * selected); + wrefresh(dialog); +} + +/* + * Display a dialog box with two buttons - Yes and No + */ +int dialog_yesno(const char *title, const char *prompt, int height, int width) +{ + int i, x, y, key = 0, button = 0; + WINDOW *dialog; + +do_resize: + if (getmaxy(stdscr) < (height + YESNO_HEIGTH_MIN)) + return -ERRDISPLAYTOOSMALL; + if (getmaxx(stdscr) < (width + YESNO_WIDTH_MIN)) + return -ERRDISPLAYTOOSMALL; + + /* center dialog box on screen */ + x = (getmaxx(stdscr) - width) / 2; + y = (getmaxy(stdscr) - height) / 2; + + draw_shadow(stdscr, y, x, height, width); + + dialog = newwin(height, width, y, x); + keypad(dialog, TRUE); + + draw_box(dialog, 0, 0, height, width, + dlg.dialog.atr, dlg.border.atr); + wattrset(dialog, dlg.border.atr); + mvwaddch(dialog, height - 3, 0, ACS_LTEE); + for (i = 0; i < width - 2; i++) + waddch(dialog, ACS_HLINE); + wattrset(dialog, dlg.dialog.atr); + waddch(dialog, ACS_RTEE); + + print_title(dialog, title, width); + + wattrset(dialog, dlg.dialog.atr); + print_autowrap(dialog, prompt, width - 2, 1, 3); + + print_buttons(dialog, height, width, 0); + + while (key != KEY_ESC) { + key = wgetch(dialog); + switch (key) { + case 'Y': + case 'y': + delwin(dialog); + return 0; + case 'N': + case 'n': + delwin(dialog); + return 1; + + case TAB: + case KEY_LEFT: + case KEY_RIGHT: + button = ((key == KEY_LEFT ? --button : ++button) < 0) ? 1 : (button > 1 ? 0 : button); + + print_buttons(dialog, height, width, button); + wrefresh(dialog); + break; + case ' ': + case '\n': + delwin(dialog); + return button; + case KEY_ESC: + key = on_key_esc(dialog); + break; + case KEY_RESIZE: + delwin(dialog); + on_key_resize(); + goto do_resize; + } + } + + delwin(dialog); + return key; /* ESC pressed */ +} diff --git a/libraries/NEMU/tools/kconfig/mconf.c b/libraries/NEMU/tools/kconfig/mconf.c new file mode 100644 index 0000000..4063dbc --- /dev/null +++ b/libraries/NEMU/tools/kconfig/mconf.c @@ -0,0 +1,1040 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2002 Roman Zippel + * + * Introduced single menu mode (show all sub-menus in one large tree). + * 2002-11-06 Petr Baudis + * + * i18n, 2005, Arnaldo Carvalho de Melo + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "lkc.h" +#include "lxdialog/dialog.h" + +static const char mconf_readme[] = +"Overview\n" +"--------\n" +"This interface lets you select features and parameters for the build.\n" +"Features can either be built-in, modularized, or ignored. Parameters\n" +"must be entered in as decimal or hexadecimal numbers or text.\n" +"\n" +"Menu items beginning with following braces represent features that\n" +" [ ] can be built in or removed\n" +" < > can be built in, modularized or removed\n" +" { } can be built in or modularized (selected by other feature)\n" +" - - are selected by other feature,\n" +"while *, M or whitespace inside braces means to build in, build as\n" +"a module or to exclude the feature respectively.\n" +"\n" +"To change any of these features, highlight it with the cursor\n" +"keys and press to build it in, to make it a module or\n" +" to remove it. You may also press the to cycle\n" +"through the available options (i.e. Y->N->M->Y).\n" +"\n" +"Some additional keyboard hints:\n" +"\n" +"Menus\n" +"----------\n" +"o Use the Up/Down arrow keys (cursor keys) to highlight the item you\n" +" wish to change or the submenu you wish to select and press .\n" +" Submenus are designated by \"--->\", empty ones by \"----\".\n" +"\n" +" Shortcut: Press the option's highlighted letter (hotkey).\n" +" Pressing a hotkey more than once will sequence\n" +" through all visible items which use that hotkey.\n" +"\n" +" You may also use the and keys to scroll\n" +" unseen options into view.\n" +"\n" +"o To exit a menu use the cursor keys to highlight the button\n" +" and press .\n" +"\n" +" Shortcut: Press or or if there is no hotkey\n" +" using those letters. You may press a single , but\n" +" there is a delayed response which you may find annoying.\n" +"\n" +" Also, the and cursor keys will cycle between and\n" +" \n" +"\n" +"\n" +"Data Entry\n" +"-----------\n" +"o Enter the requested information and press \n" +" If you are entering hexadecimal values, it is not necessary to\n" +" add the '0x' prefix to the entry.\n" +"\n" +"o For help, use the or cursor keys to highlight the help option\n" +" and press . You can try as well.\n" +"\n" +"\n" +"Text Box (Help Window)\n" +"--------\n" +"o Use the cursor keys to scroll up/down/left/right. The VI editor\n" +" keys h,j,k,l function here as do , , and for\n" +" those who are familiar with less and lynx.\n" +"\n" +"o Press , , , or to exit.\n" +"\n" +"\n" +"Alternate Configuration Files\n" +"-----------------------------\n" +"Menuconfig supports the use of alternate configuration files for\n" +"those who, for various reasons, find it necessary to switch\n" +"between different configurations.\n" +"\n" +"The button will let you save the current configuration to\n" +"a file of your choosing. Use the button to load a previously\n" +"saved alternate configuration.\n" +"\n" +"Even if you don't use alternate configuration files, but you find\n" +"during a Menuconfig session that you have completely messed up your\n" +"settings, you may use the button to restore your previously\n" +"saved settings from \".config\" without restarting Menuconfig.\n" +"\n" +"Other information\n" +"-----------------\n" +"If you use Menuconfig in an XTERM window, make sure you have your\n" +"$TERM variable set to point to an xterm definition which supports\n" +"color. Otherwise, Menuconfig will look rather bad. Menuconfig will\n" +"not display correctly in an RXVT window because rxvt displays only one\n" +"intensity of color, bright.\n" +"\n" +"Menuconfig will display larger menus on screens or xterms which are\n" +"set to display more than the standard 25 row by 80 column geometry.\n" +"In order for this to work, the \"stty size\" command must be able to\n" +"display the screen's current row and column geometry. I STRONGLY\n" +"RECOMMEND that you make sure you do NOT have the shell variables\n" +"LINES and COLUMNS exported into your environment. Some distributions\n" +"export those variables via /etc/profile. Some ncurses programs can\n" +"become confused when those variables (LINES & COLUMNS) don't reflect\n" +"the true screen size.\n" +"\n" +"Optional personality available\n" +"------------------------------\n" +"If you prefer to have all of the options listed in a single menu,\n" +"rather than the default multimenu hierarchy, run the menuconfig with\n" +"MENUCONFIG_MODE environment variable set to single_menu. Example:\n" +"\n" +"make MENUCONFIG_MODE=single_menu menuconfig\n" +"\n" +" will then unroll the appropriate category, or enfold it if it\n" +"is already unrolled.\n" +"\n" +"Note that this mode can eventually be a little more CPU expensive\n" +"(especially with a larger number of unrolled categories) than the\n" +"default mode.\n" +"\n" +"Different color themes available\n" +"--------------------------------\n" +"It is possible to select different color themes using the variable\n" +"MENUCONFIG_COLOR. To select a theme use:\n" +"\n" +"make MENUCONFIG_COLOR= menuconfig\n" +"\n" +"Available themes are\n" +" mono => selects colors suitable for monochrome displays\n" +" blackbg => selects a color scheme with black background\n" +" classic => theme with blue background. The classic look\n" +" bluetitle => an LCD friendly version of classic. (default)\n" +"\n", +menu_instructions[] = + "Arrow keys navigate the menu. " + " selects submenus ---> (or empty submenus ----). " + "Highlighted letters are hotkeys. " + "Pressing includes, excludes, modularizes features. " + "Press to exit, for Help, for Search. " + "Legend: [*] built-in [ ] excluded module < > module capable", +radiolist_instructions[] = + "Use the arrow keys to navigate this window or " + "press the hotkey of the item you wish to select " + "followed by the . " + "Press for additional information about this option.", +inputbox_instructions_int[] = + "Please enter a decimal value. " + "Fractions will not be accepted. " + "Use the key to move from the input field to the buttons below it.", +inputbox_instructions_hex[] = + "Please enter a hexadecimal value. " + "Use the key to move from the input field to the buttons below it.", +inputbox_instructions_string[] = + "Please enter a string value. " + "Use the key to move from the input field to the buttons below it.", +setmod_text[] = + "This feature depends on another which has been configured as a module.\n" + "As a result, this feature will be built as a module.", +load_config_text[] = + "Enter the name of the configuration file you wish to load. " + "Accept the name shown to restore the configuration you " + "last retrieved. Leave blank to abort.", +load_config_help[] = + "\n" + "For various reasons, one may wish to keep several different\n" + "configurations available on a single machine.\n" + "\n" + "If you have saved a previous configuration in a file other than the\n" + "default one, entering its name here will allow you to modify that\n" + "configuration.\n" + "\n" + "If you are uncertain, then you have probably never used alternate\n" + "configuration files. You should therefore leave this blank to abort.\n", +save_config_text[] = + "Enter a filename to which this configuration should be saved " + "as an alternate. Leave blank to abort.", +save_config_help[] = + "\n" + "For various reasons, one may wish to keep different configurations\n" + "available on a single machine.\n" + "\n" + "Entering a file name here will allow you to later retrieve, modify\n" + "and use the current configuration as an alternate to whatever\n" + "configuration options you have selected at that time.\n" + "\n" + "If you are uncertain what all this means then you should probably\n" + "leave this blank.\n", +search_help[] = + "\n" + "Search for symbols and display their relations.\n" + "Regular expressions are allowed.\n" + "Example: search for \"^FOO\"\n" + "Result:\n" + "-----------------------------------------------------------------\n" + "Symbol: FOO [=m]\n" + "Type : tristate\n" + "Prompt: Foo bus is used to drive the bar HW\n" + " Location:\n" + " -> Bus options (PCI, PCMCIA, EISA, ISA)\n" + " -> PCI support (PCI [=y])\n" + "(1) -> PCI access mode ( [=y])\n" + " Defined at drivers/pci/Kconfig:47\n" + " Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n" + " Selects: LIBCRC32\n" + " Selected by: BAR [=n]\n" + "-----------------------------------------------------------------\n" + "o The line 'Type:' shows the type of the configuration option for\n" + " this symbol (bool, tristate, string, ...)\n" + "o The line 'Prompt:' shows the text used in the menu structure for\n" + " this symbol\n" + "o The 'Defined at' line tells at what file / line number the symbol\n" + " is defined\n" + "o The 'Depends on:' line tells what symbols need to be defined for\n" + " this symbol to be visible in the menu (selectable)\n" + "o The 'Location:' lines tells where in the menu structure this symbol\n" + " is located\n" + " A location followed by a [=y] indicates that this is a\n" + " selectable menu item - and the current value is displayed inside\n" + " brackets.\n" + " Press the key in the (#) prefix to jump directly to that\n" + " location. You will be returned to the current search results\n" + " after exiting this new menu.\n" + "o The 'Selects:' line tells what symbols will be automatically\n" + " selected if this symbol is selected (y or m)\n" + "o The 'Selected by' line tells what symbol has selected this symbol\n" + "\n" + "Only relevant lines are shown.\n" + "\n\n" + "Search examples:\n" + "Examples: USB => find all symbols containing USB\n" + " ^USB => find all symbols starting with USB\n" + " USB$ => find all symbols ending with USB\n" + "\n"; + +static int indent; +static struct menu *current_menu; +static int child_count; +static int single_menu_mode; +static int show_all_options; +static int save_and_exit; +static int silent; + +static void conf(struct menu *menu, struct menu *active_menu); +static void conf_choice(struct menu *menu); +static void conf_string(struct menu *menu); +static void conf_load(void); +static void conf_save(void); +static int show_textbox_ext(const char *title, char *text, int r, int c, + int *keys, int *vscroll, int *hscroll, + update_text_fn update_text, void *data); +static void show_textbox(const char *title, const char *text, int r, int c); +static void show_helptext(const char *title, const char *text); +static void show_help(struct menu *menu); + +static char filename[PATH_MAX+1]; +static void set_config_filename(const char *config_filename) +{ + static char menu_backtitle[PATH_MAX+128]; + int size; + + size = snprintf(menu_backtitle, sizeof(menu_backtitle), + "%s - %s", config_filename, rootmenu.prompt->text); + if (size >= sizeof(menu_backtitle)) + menu_backtitle[sizeof(menu_backtitle)-1] = '\0'; + set_dialog_backtitle(menu_backtitle); + + size = snprintf(filename, sizeof(filename), "%s", config_filename); + if (size >= sizeof(filename)) + filename[sizeof(filename)-1] = '\0'; +} + +struct subtitle_part { + struct list_head entries; + const char *text; +}; +static LIST_HEAD(trail); + +static struct subtitle_list *subtitles; +static void set_subtitle(void) +{ + struct subtitle_part *sp; + struct subtitle_list *pos, *tmp; + + for (pos = subtitles; pos != NULL; pos = tmp) { + tmp = pos->next; + free(pos); + } + + subtitles = NULL; + list_for_each_entry(sp, &trail, entries) { + if (sp->text) { + if (pos) { + pos->next = xcalloc(1, sizeof(*pos)); + pos = pos->next; + } else { + subtitles = pos = xcalloc(1, sizeof(*pos)); + } + pos->text = sp->text; + } + } + + set_dialog_subtitles(subtitles); +} + +static void reset_subtitle(void) +{ + struct subtitle_list *pos, *tmp; + + for (pos = subtitles; pos != NULL; pos = tmp) { + tmp = pos->next; + free(pos); + } + subtitles = NULL; + set_dialog_subtitles(subtitles); +} + +struct search_data { + struct list_head *head; + struct menu **targets; + int *keys; +}; + +static void update_text(char *buf, size_t start, size_t end, void *_data) +{ + struct search_data *data = _data; + struct jump_key *pos; + int k = 0; + + list_for_each_entry(pos, data->head, entries) { + if (pos->offset >= start && pos->offset < end) { + char header[4]; + + if (k < JUMP_NB) { + int key = '0' + (pos->index % JUMP_NB) + 1; + + sprintf(header, "(%c)", key); + data->keys[k] = key; + data->targets[k] = pos->target; + k++; + } else { + sprintf(header, " "); + } + + memcpy(buf + pos->offset, header, sizeof(header) - 1); + } + } + data->keys[k] = 0; +} + +static void search_conf(void) +{ + struct symbol **sym_arr; + struct gstr res; + struct gstr title; + char *dialog_input; + int dres, vscroll = 0, hscroll = 0; + bool again; + struct gstr sttext; + struct subtitle_part stpart; + + title = str_new(); + str_printf( &title, "Enter (sub)string or regexp to search for " + "(with or without \"%s\")", CONFIG_); + +again: + dialog_clear(); + dres = dialog_inputbox("Search Configuration Parameter", + str_get(&title), + 10, 75, ""); + switch (dres) { + case 0: + break; + case 1: + show_helptext("Search Configuration", search_help); + goto again; + default: + str_free(&title); + return; + } + + /* strip the prefix if necessary */ + dialog_input = dialog_input_result; + if (strncasecmp(dialog_input_result, CONFIG_, strlen(CONFIG_)) == 0) + dialog_input += strlen(CONFIG_); + + sttext = str_new(); + str_printf(&sttext, "Search (%s)", dialog_input_result); + stpart.text = str_get(&sttext); + list_add_tail(&stpart.entries, &trail); + + sym_arr = sym_re_search(dialog_input); + do { + LIST_HEAD(head); + struct menu *targets[JUMP_NB]; + int keys[JUMP_NB + 1], i; + struct search_data data = { + .head = &head, + .targets = targets, + .keys = keys, + }; + struct jump_key *pos, *tmp; + + res = get_relations_str(sym_arr, &head); + set_subtitle(); + dres = show_textbox_ext("Search Results", (char *) + str_get(&res), 0, 0, keys, &vscroll, + &hscroll, &update_text, (void *) + &data); + again = false; + for (i = 0; i < JUMP_NB && keys[i]; i++) + if (dres == keys[i]) { + conf(targets[i]->parent, targets[i]); + again = true; + } + str_free(&res); + list_for_each_entry_safe(pos, tmp, &head, entries) + free(pos); + } while (again); + free(sym_arr); + str_free(&title); + list_del(trail.prev); + str_free(&sttext); +} + +static void build_conf(struct menu *menu) +{ + struct symbol *sym; + struct property *prop; + struct menu *child; + int type, tmp, doint = 2; + tristate val; + char ch; + bool visible; + + /* + * note: menu_is_visible() has side effect that it will + * recalc the value of the symbol. + */ + visible = menu_is_visible(menu); + if (show_all_options && !menu_has_prompt(menu)) + return; + else if (!show_all_options && !visible) + return; + + sym = menu->sym; + prop = menu->prompt; + if (!sym) { + if (prop && menu != current_menu) { + const char *prompt = menu_get_prompt(menu); + switch (prop->type) { + case P_MENU: + child_count++; + if (single_menu_mode) { + item_make("%s%*c%s", + menu->data ? "-->" : "++>", + indent + 1, ' ', prompt); + } else + item_make(" %*c%s %s", + indent + 1, ' ', prompt, + menu_is_empty(menu) ? "----" : "--->"); + item_set_tag('m'); + item_set_data(menu); + if (single_menu_mode && menu->data) + goto conf_childs; + return; + case P_COMMENT: + if (prompt) { + child_count++; + item_make(" %*c*** %s ***", indent + 1, ' ', prompt); + item_set_tag(':'); + item_set_data(menu); + } + break; + default: + if (prompt) { + child_count++; + item_make("---%*c%s", indent + 1, ' ', prompt); + item_set_tag(':'); + item_set_data(menu); + } + } + } else + doint = 0; + goto conf_childs; + } + + type = sym_get_type(sym); + if (sym_is_choice(sym)) { + struct symbol *def_sym = sym_get_choice_value(sym); + struct menu *def_menu = NULL; + + child_count++; + for (child = menu->list; child; child = child->next) { + if (menu_is_visible(child) && child->sym == def_sym) + def_menu = child; + } + + val = sym_get_tristate_value(sym); + if (sym_is_changeable(sym)) { + switch (type) { + case S_BOOLEAN: + item_make("[%c]", val == no ? ' ' : '*'); + break; + case S_TRISTATE: + switch (val) { + case yes: ch = '*'; break; + case mod: ch = 'M'; break; + default: ch = ' '; break; + } + item_make("<%c>", ch); + break; + } + item_set_tag('t'); + item_set_data(menu); + } else { + item_make(" "); + item_set_tag(def_menu ? 't' : ':'); + item_set_data(menu); + } + + item_add_str("%*c%s", indent + 1, ' ', menu_get_prompt(menu)); + if (val == yes) { + if (def_menu) { + item_add_str(" (%s)", menu_get_prompt(def_menu)); + item_add_str(" --->"); + if (def_menu->list) { + indent += 2; + build_conf(def_menu); + indent -= 2; + } + } + return; + } + } else { + if (menu == current_menu) { + item_make("---%*c%s", indent + 1, ' ', menu_get_prompt(menu)); + item_set_tag(':'); + item_set_data(menu); + goto conf_childs; + } + child_count++; + val = sym_get_tristate_value(sym); + if (sym_is_choice_value(sym) && val == yes) { + item_make(" "); + item_set_tag(':'); + item_set_data(menu); + } else { + switch (type) { + case S_BOOLEAN: + if (sym_is_changeable(sym)) + item_make("[%c]", val == no ? ' ' : '*'); + else + item_make("-%c-", val == no ? ' ' : '*'); + item_set_tag('t'); + item_set_data(menu); + break; + case S_TRISTATE: + switch (val) { + case yes: ch = '*'; break; + case mod: ch = 'M'; break; + default: ch = ' '; break; + } + if (sym_is_changeable(sym)) { + if (sym->rev_dep.tri == mod) + item_make("{%c}", ch); + else + item_make("<%c>", ch); + } else + item_make("-%c-", ch); + item_set_tag('t'); + item_set_data(menu); + break; + default: + tmp = 2 + strlen(sym_get_string_value(sym)); /* () = 2 */ + item_make("(%s)", sym_get_string_value(sym)); + tmp = indent - tmp + 4; + if (tmp < 0) + tmp = 0; + item_add_str("%*c%s%s", tmp, ' ', menu_get_prompt(menu), + (sym_has_value(sym) || !sym_is_changeable(sym)) ? + "" : " (NEW)"); + item_set_tag('s'); + item_set_data(menu); + goto conf_childs; + } + } + item_add_str("%*c%s%s", indent + 1, ' ', menu_get_prompt(menu), + (sym_has_value(sym) || !sym_is_changeable(sym)) ? + "" : " (NEW)"); + if (menu->prompt->type == P_MENU) { + item_add_str(" %s", menu_is_empty(menu) ? "----" : "--->"); + return; + } + } + +conf_childs: + indent += doint; + for (child = menu->list; child; child = child->next) + build_conf(child); + indent -= doint; +} + +static void conf(struct menu *menu, struct menu *active_menu) +{ + struct menu *submenu; + const char *prompt = menu_get_prompt(menu); + struct subtitle_part stpart; + struct symbol *sym; + int res; + int s_scroll = 0; + + if (menu != &rootmenu) + stpart.text = menu_get_prompt(menu); + else + stpart.text = NULL; + list_add_tail(&stpart.entries, &trail); + + while (1) { + item_reset(); + current_menu = menu; + build_conf(menu); + if (!child_count) + break; + set_subtitle(); + dialog_clear(); + res = dialog_menu(prompt ? prompt : "Main Menu", + menu_instructions, + active_menu, &s_scroll); + if (res == 1 || res == KEY_ESC || res == -ERRDISPLAYTOOSMALL) + break; + if (item_count() != 0) { + if (!item_activate_selected()) + continue; + if (!item_tag()) + continue; + } + submenu = item_data(); + active_menu = item_data(); + if (submenu) + sym = submenu->sym; + else + sym = NULL; + + switch (res) { + case 0: + switch (item_tag()) { + case 'm': + if (single_menu_mode) + submenu->data = (void *) (long) !submenu->data; + else + conf(submenu, NULL); + break; + case 't': + if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes) + conf_choice(submenu); + else if (submenu->prompt->type == P_MENU) + conf(submenu, NULL); + break; + case 's': + conf_string(submenu); + break; + } + break; + case 2: + if (sym) + show_help(submenu); + else { + reset_subtitle(); + show_helptext("README", mconf_readme); + } + break; + case 3: + reset_subtitle(); + conf_save(); + break; + case 4: + reset_subtitle(); + conf_load(); + break; + case 5: + if (item_is_tag('t')) { + if (sym_set_tristate_value(sym, yes)) + break; + if (sym_set_tristate_value(sym, mod)) + show_textbox(NULL, setmod_text, 6, 74); + } + break; + case 6: + if (item_is_tag('t')) + sym_set_tristate_value(sym, no); + break; + case 7: + if (item_is_tag('t')) + sym_set_tristate_value(sym, mod); + break; + case 8: + if (item_is_tag('t')) + sym_toggle_tristate_value(sym); + else if (item_is_tag('m')) + conf(submenu, NULL); + break; + case 9: + search_conf(); + break; + case 10: + show_all_options = !show_all_options; + break; + } + } + + list_del(trail.prev); +} + +static int show_textbox_ext(const char *title, char *text, int r, int c, int + *keys, int *vscroll, int *hscroll, update_text_fn + update_text, void *data) +{ + dialog_clear(); + return dialog_textbox(title, text, r, c, keys, vscroll, hscroll, + update_text, data); +} + +static void show_textbox(const char *title, const char *text, int r, int c) +{ + show_textbox_ext(title, (char *) text, r, c, (int []) {0}, NULL, NULL, + NULL, NULL); +} + +static void show_helptext(const char *title, const char *text) +{ + show_textbox(title, text, 0, 0); +} + +static void conf_message_callback(const char *s) +{ + if (save_and_exit) { + if (!silent) + printf("%s", s); + } else { + show_textbox(NULL, s, 6, 60); + } +} + +static void show_help(struct menu *menu) +{ + struct gstr help = str_new(); + + help.max_width = getmaxx(stdscr) - 10; + menu_get_ext_help(menu, &help); + + show_helptext(menu_get_prompt(menu), str_get(&help)); + str_free(&help); +} + +static void conf_choice(struct menu *menu) +{ + const char *prompt = menu_get_prompt(menu); + struct menu *child; + struct symbol *active; + + active = sym_get_choice_value(menu->sym); + while (1) { + int res; + int selected; + item_reset(); + + current_menu = menu; + for (child = menu->list; child; child = child->next) { + if (!menu_is_visible(child)) + continue; + if (child->sym) + item_make("%s", menu_get_prompt(child)); + else { + item_make("*** %s ***", menu_get_prompt(child)); + item_set_tag(':'); + } + item_set_data(child); + if (child->sym == active) + item_set_selected(1); + if (child->sym == sym_get_choice_value(menu->sym)) + item_set_tag('X'); + } + dialog_clear(); + res = dialog_checklist(prompt ? prompt : "Main Menu", + radiolist_instructions, + MENUBOX_HEIGTH_MIN, + MENUBOX_WIDTH_MIN, + CHECKLIST_HEIGTH_MIN); + selected = item_activate_selected(); + switch (res) { + case 0: + if (selected) { + child = item_data(); + if (!child->sym) + break; + + sym_set_tristate_value(child->sym, yes); + } + return; + case 1: + if (selected) { + child = item_data(); + show_help(child); + active = child->sym; + } else + show_help(menu); + break; + case KEY_ESC: + return; + case -ERRDISPLAYTOOSMALL: + return; + } + } +} + +static void conf_string(struct menu *menu) +{ + const char *prompt = menu_get_prompt(menu); + + while (1) { + int res; + const char *heading; + + switch (sym_get_type(menu->sym)) { + case S_INT: + heading = inputbox_instructions_int; + break; + case S_HEX: + heading = inputbox_instructions_hex; + break; + case S_STRING: + heading = inputbox_instructions_string; + break; + default: + heading = "Internal mconf error!"; + } + dialog_clear(); + res = dialog_inputbox(prompt ? prompt : "Main Menu", + heading, 10, 75, + sym_get_string_value(menu->sym)); + switch (res) { + case 0: + if (sym_set_string_value(menu->sym, dialog_input_result)) + return; + show_textbox(NULL, "You have made an invalid entry.", 5, 43); + break; + case 1: + show_help(menu); + break; + case KEY_ESC: + return; + } + } +} + +static void conf_load(void) +{ + + while (1) { + int res; + dialog_clear(); + res = dialog_inputbox(NULL, load_config_text, + 11, 55, filename); + switch(res) { + case 0: + if (!dialog_input_result[0]) + return; + if (!conf_read(dialog_input_result)) { + set_config_filename(dialog_input_result); + sym_set_change_count(1); + return; + } + show_textbox(NULL, "File does not exist!", 5, 38); + break; + case 1: + show_helptext("Load Alternate Configuration", load_config_help); + break; + case KEY_ESC: + return; + } + } +} + +static void conf_save(void) +{ + while (1) { + int res; + dialog_clear(); + res = dialog_inputbox(NULL, save_config_text, + 11, 55, filename); + switch(res) { + case 0: + if (!dialog_input_result[0]) + return; + if (!conf_write(dialog_input_result)) { + set_config_filename(dialog_input_result); + return; + } + show_textbox(NULL, "Can't create file!", 5, 60); + break; + case 1: + show_helptext("Save Alternate Configuration", save_config_help); + break; + case KEY_ESC: + return; + } + } +} + +static int handle_exit(void) +{ + int res; + + save_and_exit = 1; + reset_subtitle(); + dialog_clear(); + if (conf_get_changed()) + res = dialog_yesno(NULL, + "Do you wish to save your new configuration?\n" + "(Press to continue kernel configuration.)", + 6, 60); + else + res = -1; + + end_dialog(saved_x, saved_y); + + switch (res) { + case 0: + if (conf_write(filename)) { + fprintf(stderr, "\n\n" + "Error while writing of the configuration.\n" + "Your configuration changes were NOT saved." + "\n\n"); + return 1; + } + conf_write_autoconf(0); + /* fall through */ + case -1: + if (!silent) + printf("\n\n" + "*** End of the configuration.\n" + "*** Execute 'make' to start the build or try 'make help'." + "\n\n"); + res = 0; + break; + default: + if (!silent) + fprintf(stderr, "\n\n" + "Your configuration changes were NOT saved." + "\n\n"); + if (res != KEY_ESC) + res = 0; + } + + return res; +} + +static void sig_handler(int signo) +{ + exit(handle_exit()); +} + +int main(int ac, char **av) +{ + char *mode; + int res; + + signal(SIGINT, sig_handler); + + if (ac > 1 && strcmp(av[1], "-s") == 0) { + silent = 1; + /* Silence conf_read() until the real callback is set up */ + conf_set_message_callback(NULL); + av++; + } + conf_parse(av[1]); + conf_read(NULL); + + mode = getenv("MENUCONFIG_MODE"); + if (mode) { + if (!strcasecmp(mode, "single_menu")) + single_menu_mode = 1; + } + + if (init_dialog(NULL)) { + fprintf(stderr, "Your display is too small to run Menuconfig!\n"); + fprintf(stderr, "It must be at least 19 lines by 80 columns.\n"); + return 1; + } + + set_config_filename(conf_get_configname()); + conf_set_message_callback(conf_message_callback); + do { + conf(&rootmenu, NULL); + res = handle_exit(); + } while (res == KEY_ESC); + + return res; +} diff --git a/libraries/NEMU/tools/kconfig/menu.c b/libraries/NEMU/tools/kconfig/menu.c new file mode 100644 index 0000000..a5fbd6c --- /dev/null +++ b/libraries/NEMU/tools/kconfig/menu.c @@ -0,0 +1,899 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2002 Roman Zippel + */ + +#include +#include +#include +#include + +#include "lkc.h" + +static const char nohelp_text[] = "There is no help available for this option."; + +struct menu rootmenu; +static struct menu **last_entry_ptr; + +struct file *file_list; +struct file *current_file; + +void menu_warn(struct menu *menu, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + fprintf(stderr, "%s:%d:warning: ", menu->file->name, menu->lineno); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} + +static void prop_warn(struct property *prop, const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + fprintf(stderr, "%s:%d:warning: ", prop->file->name, prop->lineno); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} + +void _menu_init(void) +{ + current_entry = current_menu = &rootmenu; + last_entry_ptr = &rootmenu.list; +} + +void menu_add_entry(struct symbol *sym) +{ + struct menu *menu; + + menu = xmalloc(sizeof(*menu)); + memset(menu, 0, sizeof(*menu)); + menu->sym = sym; + menu->parent = current_menu; + menu->file = current_file; + menu->lineno = zconf_lineno(); + + *last_entry_ptr = menu; + last_entry_ptr = &menu->next; + current_entry = menu; + if (sym) + menu_add_symbol(P_SYMBOL, sym, NULL); +} + +struct menu *menu_add_menu(void) +{ + last_entry_ptr = ¤t_entry->list; + current_menu = current_entry; + return current_menu; +} + +void menu_end_menu(void) +{ + last_entry_ptr = ¤t_menu->next; + current_menu = current_menu->parent; +} + +/* + * Rewrites 'm' to 'm' && MODULES, so that it evaluates to 'n' when running + * without modules + */ +static struct expr *rewrite_m(struct expr *e) +{ + if (!e) + return e; + + switch (e->type) { + case E_NOT: + e->left.expr = rewrite_m(e->left.expr); + break; + case E_OR: + case E_AND: + e->left.expr = rewrite_m(e->left.expr); + e->right.expr = rewrite_m(e->right.expr); + break; + case E_SYMBOL: + /* change 'm' into 'm' && MODULES */ + if (e->left.sym == &symbol_mod) + return expr_alloc_and(e, expr_alloc_symbol(modules_sym)); + break; + default: + break; + } + return e; +} + +void menu_add_dep(struct expr *dep) +{ + current_entry->dep = expr_alloc_and(current_entry->dep, dep); +} + +void menu_set_type(int type) +{ + struct symbol *sym = current_entry->sym; + + if (sym->type == type) + return; + if (sym->type == S_UNKNOWN) { + sym->type = type; + return; + } + menu_warn(current_entry, + "ignoring type redefinition of '%s' from '%s' to '%s'", + sym->name ? sym->name : "", + sym_type_name(sym->type), sym_type_name(type)); +} + +static struct property *menu_add_prop(enum prop_type type, struct expr *expr, + struct expr *dep) +{ + struct property *prop; + + prop = xmalloc(sizeof(*prop)); + memset(prop, 0, sizeof(*prop)); + prop->type = type; + prop->file = current_file; + prop->lineno = zconf_lineno(); + prop->menu = current_entry; + prop->expr = expr; + prop->visible.expr = dep; + + /* append property to the prop list of symbol */ + if (current_entry->sym) { + struct property **propp; + + for (propp = ¤t_entry->sym->prop; + *propp; + propp = &(*propp)->next) + ; + *propp = prop; + } + + return prop; +} + +struct property *menu_add_prompt(enum prop_type type, char *prompt, + struct expr *dep) +{ + struct property *prop = menu_add_prop(type, NULL, dep); + + if (isspace(*prompt)) { + prop_warn(prop, "leading whitespace ignored"); + while (isspace(*prompt)) + prompt++; + } + if (current_entry->prompt) + prop_warn(prop, "prompt redefined"); + + /* Apply all upper menus' visibilities to actual prompts. */ + if (type == P_PROMPT) { + struct menu *menu = current_entry; + + while ((menu = menu->parent) != NULL) { + struct expr *dup_expr; + + if (!menu->visibility) + continue; + /* + * Do not add a reference to the menu's visibility + * expression but use a copy of it. Otherwise the + * expression reduction functions will modify + * expressions that have multiple references which + * can cause unwanted side effects. + */ + dup_expr = expr_copy(menu->visibility); + + prop->visible.expr = expr_alloc_and(prop->visible.expr, + dup_expr); + } + } + + current_entry->prompt = prop; + prop->text = prompt; + + return prop; +} + +void menu_add_visibility(struct expr *expr) +{ + current_entry->visibility = expr_alloc_and(current_entry->visibility, + expr); +} + +void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep) +{ + menu_add_prop(type, expr, dep); +} + +void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep) +{ + menu_add_prop(type, expr_alloc_symbol(sym), dep); +} + +void menu_add_option_modules(void) +{ + if (modules_sym) + zconf_error("symbol '%s' redefines option 'modules' already defined by symbol '%s'", + current_entry->sym->name, modules_sym->name); + modules_sym = current_entry->sym; +} + +void menu_add_option_defconfig_list(void) +{ + if (!sym_defconfig_list) + sym_defconfig_list = current_entry->sym; + else if (sym_defconfig_list != current_entry->sym) + zconf_error("trying to redefine defconfig symbol"); + sym_defconfig_list->flags |= SYMBOL_NO_WRITE; +} + +void menu_add_option_allnoconfig_y(void) +{ + current_entry->sym->flags |= SYMBOL_ALLNOCONFIG_Y; +} + +static int menu_validate_number(struct symbol *sym, struct symbol *sym2) +{ + return sym2->type == S_INT || sym2->type == S_HEX || + (sym2->type == S_UNKNOWN && sym_string_valid(sym, sym2->name)); +} + +static void sym_check_prop(struct symbol *sym) +{ + struct property *prop; + struct symbol *sym2; + char *use; + + for (prop = sym->prop; prop; prop = prop->next) { + switch (prop->type) { + case P_DEFAULT: + if ((sym->type == S_STRING || sym->type == S_INT || sym->type == S_HEX) && + prop->expr->type != E_SYMBOL) + prop_warn(prop, + "default for config symbol '%s'" + " must be a single symbol", sym->name); + if (prop->expr->type != E_SYMBOL) + break; + sym2 = prop_get_symbol(prop); + if (sym->type == S_HEX || sym->type == S_INT) { + if (!menu_validate_number(sym, sym2)) + prop_warn(prop, + "'%s': number is invalid", + sym->name); + } + if (sym_is_choice(sym)) { + struct property *choice_prop = + sym_get_choice_prop(sym2); + + if (!choice_prop || + prop_get_symbol(choice_prop) != sym) + prop_warn(prop, + "choice default symbol '%s' is not contained in the choice", + sym2->name); + } + break; + case P_SELECT: + case P_IMPLY: + use = prop->type == P_SELECT ? "select" : "imply"; + sym2 = prop_get_symbol(prop); + if (sym->type != S_BOOLEAN && sym->type != S_TRISTATE) + prop_warn(prop, + "config symbol '%s' uses %s, but is " + "not bool or tristate", sym->name, use); + else if (sym2->type != S_UNKNOWN && + sym2->type != S_BOOLEAN && + sym2->type != S_TRISTATE) + prop_warn(prop, + "'%s' has wrong type. '%s' only " + "accept arguments of bool and " + "tristate type", sym2->name, use); + break; + case P_RANGE: + if (sym->type != S_INT && sym->type != S_HEX) + prop_warn(prop, "range is only allowed " + "for int or hex symbols"); + if (!menu_validate_number(sym, prop->expr->left.sym) || + !menu_validate_number(sym, prop->expr->right.sym)) + prop_warn(prop, "range is invalid"); + break; + default: + ; + } + } +} + +void menu_finalize(struct menu *parent) +{ + struct menu *menu, *last_menu; + struct symbol *sym; + struct property *prop; + struct expr *parentdep, *basedep, *dep, *dep2, **ep; + + sym = parent->sym; + if (parent->list) { + /* + * This menu node has children. We (recursively) process them + * and propagate parent dependencies before moving on. + */ + + if (sym && sym_is_choice(sym)) { + if (sym->type == S_UNKNOWN) { + /* find the first choice value to find out choice type */ + current_entry = parent; + for (menu = parent->list; menu; menu = menu->next) { + if (menu->sym && menu->sym->type != S_UNKNOWN) { + menu_set_type(menu->sym->type); + break; + } + } + } + /* set the type of the remaining choice values */ + for (menu = parent->list; menu; menu = menu->next) { + current_entry = menu; + if (menu->sym && menu->sym->type == S_UNKNOWN) + menu_set_type(sym->type); + } + + /* + * Use the choice itself as the parent dependency of + * the contained items. This turns the mode of the + * choice into an upper bound on the visibility of the + * choice value symbols. + */ + parentdep = expr_alloc_symbol(sym); + } else { + /* Menu node for 'menu', 'if' */ + parentdep = parent->dep; + } + + /* For each child menu node... */ + for (menu = parent->list; menu; menu = menu->next) { + /* + * Propagate parent dependencies to the child menu + * node, also rewriting and simplifying expressions + */ + basedep = rewrite_m(menu->dep); + basedep = expr_transform(basedep); + basedep = expr_alloc_and(expr_copy(parentdep), basedep); + basedep = expr_eliminate_dups(basedep); + menu->dep = basedep; + + if (menu->sym) + /* + * Note: For symbols, all prompts are included + * too in the symbol's own property list + */ + prop = menu->sym->prop; + else + /* + * For non-symbol menu nodes, we just need to + * handle the prompt + */ + prop = menu->prompt; + + /* For each property... */ + for (; prop; prop = prop->next) { + if (prop->menu != menu) + /* + * Two possibilities: + * + * 1. The property lacks dependencies + * and so isn't location-specific, + * e.g. an 'option' + * + * 2. The property belongs to a symbol + * defined in multiple locations and + * is from some other location. It + * will be handled there in that + * case. + * + * Skip the property. + */ + continue; + + /* + * Propagate parent dependencies to the + * property's condition, rewriting and + * simplifying expressions at the same time + */ + dep = rewrite_m(prop->visible.expr); + dep = expr_transform(dep); + dep = expr_alloc_and(expr_copy(basedep), dep); + dep = expr_eliminate_dups(dep); + if (menu->sym && menu->sym->type != S_TRISTATE) + dep = expr_trans_bool(dep); + prop->visible.expr = dep; + + /* + * Handle selects and implies, which modify the + * dependencies of the selected/implied symbol + */ + if (prop->type == P_SELECT) { + struct symbol *es = prop_get_symbol(prop); + es->rev_dep.expr = expr_alloc_or(es->rev_dep.expr, + expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep))); + } else if (prop->type == P_IMPLY) { + struct symbol *es = prop_get_symbol(prop); + es->implied.expr = expr_alloc_or(es->implied.expr, + expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep))); + } + } + } + + if (sym && sym_is_choice(sym)) + expr_free(parentdep); + + /* + * Recursively process children in the same fashion before + * moving on + */ + for (menu = parent->list; menu; menu = menu->next) + menu_finalize(menu); + } else if (sym) { + /* + * Automatic submenu creation. If sym is a symbol and A, B, C, + * ... are consecutive items (symbols, menus, ifs, etc.) that + * all depend on sym, then the following menu structure is + * created: + * + * sym + * +-A + * +-B + * +-C + * ... + * + * This also works recursively, giving the following structure + * if A is a symbol and B depends on A: + * + * sym + * +-A + * | +-B + * +-C + * ... + */ + + basedep = parent->prompt ? parent->prompt->visible.expr : NULL; + basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no); + basedep = expr_eliminate_dups(expr_transform(basedep)); + + /* Examine consecutive elements after sym */ + last_menu = NULL; + for (menu = parent->next; menu; menu = menu->next) { + dep = menu->prompt ? menu->prompt->visible.expr : menu->dep; + if (!expr_contains_symbol(dep, sym)) + /* No dependency, quit */ + break; + if (expr_depends_symbol(dep, sym)) + /* Absolute dependency, put in submenu */ + goto next; + + /* + * Also consider it a dependency on sym if our + * dependencies contain sym and are a "superset" of + * sym's dependencies, e.g. '(sym || Q) && R' when sym + * depends on R. + * + * Note that 'R' might be from an enclosing menu or if, + * making this a more common case than it might seem. + */ + dep = expr_trans_compare(dep, E_UNEQUAL, &symbol_no); + dep = expr_eliminate_dups(expr_transform(dep)); + dep2 = expr_copy(basedep); + expr_eliminate_eq(&dep, &dep2); + expr_free(dep); + if (!expr_is_yes(dep2)) { + /* Not superset, quit */ + expr_free(dep2); + break; + } + /* Superset, put in submenu */ + expr_free(dep2); + next: + menu_finalize(menu); + menu->parent = parent; + last_menu = menu; + } + expr_free(basedep); + if (last_menu) { + parent->list = parent->next; + parent->next = last_menu->next; + last_menu->next = NULL; + } + + sym->dir_dep.expr = expr_alloc_or(sym->dir_dep.expr, parent->dep); + } + for (menu = parent->list; menu; menu = menu->next) { + if (sym && sym_is_choice(sym) && + menu->sym && !sym_is_choice_value(menu->sym)) { + current_entry = menu; + menu->sym->flags |= SYMBOL_CHOICEVAL; + if (!menu->prompt) + menu_warn(menu, "choice value must have a prompt"); + for (prop = menu->sym->prop; prop; prop = prop->next) { + if (prop->type == P_DEFAULT) + prop_warn(prop, "defaults for choice " + "values not supported"); + if (prop->menu == menu) + continue; + if (prop->type == P_PROMPT && + prop->menu->parent->sym != sym) + prop_warn(prop, "choice value used outside its choice group"); + } + /* Non-tristate choice values of tristate choices must + * depend on the choice being set to Y. The choice + * values' dependencies were propagated to their + * properties above, so the change here must be re- + * propagated. + */ + if (sym->type == S_TRISTATE && menu->sym->type != S_TRISTATE) { + basedep = expr_alloc_comp(E_EQUAL, sym, &symbol_yes); + menu->dep = expr_alloc_and(basedep, menu->dep); + for (prop = menu->sym->prop; prop; prop = prop->next) { + if (prop->menu != menu) + continue; + prop->visible.expr = expr_alloc_and(expr_copy(basedep), + prop->visible.expr); + } + } + menu_add_symbol(P_CHOICE, sym, NULL); + prop = sym_get_choice_prop(sym); + for (ep = &prop->expr; *ep; ep = &(*ep)->left.expr) + ; + *ep = expr_alloc_one(E_LIST, NULL); + (*ep)->right.sym = menu->sym; + } + + /* + * This code serves two purposes: + * + * (1) Flattening 'if' blocks, which do not specify a submenu + * and only add dependencies. + * + * (Automatic submenu creation might still create a submenu + * from an 'if' before this code runs.) + * + * (2) "Undoing" any automatic submenus created earlier below + * promptless symbols. + * + * Before: + * + * A + * if ... (or promptless symbol) + * +-B + * +-C + * D + * + * After: + * + * A + * if ... (or promptless symbol) + * B + * C + * D + */ + if (menu->list && (!menu->prompt || !menu->prompt->text)) { + for (last_menu = menu->list; ; last_menu = last_menu->next) { + last_menu->parent = parent; + if (!last_menu->next) + break; + } + last_menu->next = menu->next; + menu->next = menu->list; + menu->list = NULL; + } + } + + if (sym && !(sym->flags & SYMBOL_WARNED)) { + if (sym->type == S_UNKNOWN) + menu_warn(parent, "config symbol defined without type"); + + if (sym_is_choice(sym) && !parent->prompt) + menu_warn(parent, "choice must have a prompt"); + + /* Check properties connected to this symbol */ + sym_check_prop(sym); + sym->flags |= SYMBOL_WARNED; + } + + /* + * For non-optional choices, add a reverse dependency (corresponding to + * a select) of ' && m'. This prevents the user from + * setting the choice mode to 'n' when the choice is visible. + * + * This would also work for non-choice symbols, but only non-optional + * choices clear SYMBOL_OPTIONAL as of writing. Choices are implemented + * as a type of symbol. + */ + if (sym && !sym_is_optional(sym) && parent->prompt) { + sym->rev_dep.expr = expr_alloc_or(sym->rev_dep.expr, + expr_alloc_and(parent->prompt->visible.expr, + expr_alloc_symbol(&symbol_mod))); + } +} + +bool menu_has_prompt(struct menu *menu) +{ + if (!menu->prompt) + return false; + return true; +} + +/* + * Determine if a menu is empty. + * A menu is considered empty if it contains no or only + * invisible entries. + */ +bool menu_is_empty(struct menu *menu) +{ + struct menu *child; + + for (child = menu->list; child; child = child->next) { + if (menu_is_visible(child)) + return(false); + } + return(true); +} + +bool menu_is_visible(struct menu *menu) +{ + struct menu *child; + struct symbol *sym; + tristate visible; + + if (!menu->prompt) + return false; + + if (menu->visibility) { + if (expr_calc_value(menu->visibility) == no) + return false; + } + + sym = menu->sym; + if (sym) { + sym_calc_value(sym); + visible = menu->prompt->visible.tri; + } else + visible = menu->prompt->visible.tri = expr_calc_value(menu->prompt->visible.expr); + + if (visible != no) + return true; + + if (!sym || sym_get_tristate_value(menu->sym) == no) + return false; + + for (child = menu->list; child; child = child->next) { + if (menu_is_visible(child)) { + if (sym) + sym->flags |= SYMBOL_DEF_USER; + return true; + } + } + + return false; +} + +const char *menu_get_prompt(struct menu *menu) +{ + if (menu->prompt) + return menu->prompt->text; + else if (menu->sym) + return menu->sym->name; + return NULL; +} + +struct menu *menu_get_root_menu(struct menu *menu) +{ + return &rootmenu; +} + +struct menu *menu_get_parent_menu(struct menu *menu) +{ + enum prop_type type; + + for (; menu != &rootmenu; menu = menu->parent) { + type = menu->prompt ? menu->prompt->type : 0; + if (type == P_MENU) + break; + } + return menu; +} + +bool menu_has_help(struct menu *menu) +{ + return menu->help != NULL; +} + +const char *menu_get_help(struct menu *menu) +{ + if (menu->help) + return menu->help; + else + return ""; +} + +static void get_def_str(struct gstr *r, struct menu *menu) +{ + str_printf(r, "Defined at %s:%d\n", + menu->file->name, menu->lineno); +} + +static void get_dep_str(struct gstr *r, struct expr *expr, const char *prefix) +{ + if (!expr_is_yes(expr)) { + str_append(r, prefix); + expr_gstr_print(expr, r); + str_append(r, "\n"); + } +} + +static void get_prompt_str(struct gstr *r, struct property *prop, + struct list_head *head) +{ + int i, j; + struct menu *submenu[8], *menu, *location = NULL; + struct jump_key *jump = NULL; + + str_printf(r, " Prompt: %s\n", prop->text); + + get_dep_str(r, prop->menu->dep, " Depends on: "); + /* + * Most prompts in Linux have visibility that exactly matches their + * dependencies. For these, we print only the dependencies to improve + * readability. However, prompts with inline "if" expressions and + * prompts with a parent that has a "visible if" expression have + * differing dependencies and visibility. In these rare cases, we + * print both. + */ + if (!expr_eq(prop->menu->dep, prop->visible.expr)) + get_dep_str(r, prop->visible.expr, " Visible if: "); + + menu = prop->menu->parent; + for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) { + bool accessible = menu_is_visible(menu); + + submenu[i++] = menu; + if (location == NULL && accessible) + location = menu; + } + if (head && location) { + jump = xmalloc(sizeof(struct jump_key)); + + if (menu_is_visible(prop->menu)) { + /* + * There is not enough room to put the hint at the + * beginning of the "Prompt" line. Put the hint on the + * last "Location" line even when it would belong on + * the former. + */ + jump->target = prop->menu; + } else + jump->target = location; + + if (list_empty(head)) + jump->index = 0; + else + jump->index = list_entry(head->prev, struct jump_key, + entries)->index + 1; + + list_add_tail(&jump->entries, head); + } + + if (i > 0) { + str_printf(r, " Location:\n"); + for (j = 4; --i >= 0; j += 2) { + menu = submenu[i]; + if (jump && menu == location) + jump->offset = strlen(r->s); + str_printf(r, "%*c-> %s", j, ' ', + menu_get_prompt(menu)); + if (menu->sym) { + str_printf(r, " (%s [=%s])", menu->sym->name ? + menu->sym->name : "", + sym_get_string_value(menu->sym)); + } + str_append(r, "\n"); + } + } +} + +static void get_symbol_props_str(struct gstr *r, struct symbol *sym, + enum prop_type tok, const char *prefix) +{ + bool hit = false; + struct property *prop; + + for_all_properties(sym, prop, tok) { + if (!hit) { + str_append(r, prefix); + hit = true; + } else + str_printf(r, " && "); + expr_gstr_print(prop->expr, r); + } + if (hit) + str_append(r, "\n"); +} + +/* + * head is optional and may be NULL + */ +static void get_symbol_str(struct gstr *r, struct symbol *sym, + struct list_head *head) +{ + struct property *prop; + + if (sym && sym->name) { + str_printf(r, "Symbol: %s [=%s]\n", sym->name, + sym_get_string_value(sym)); + str_printf(r, "Type : %s\n", sym_type_name(sym->type)); + if (sym->type == S_INT || sym->type == S_HEX) { + prop = sym_get_range_prop(sym); + if (prop) { + str_printf(r, "Range : "); + expr_gstr_print(prop->expr, r); + str_append(r, "\n"); + } + } + } + + /* Print the definitions with prompts before the ones without */ + for_all_properties(sym, prop, P_SYMBOL) { + if (prop->menu->prompt) { + get_def_str(r, prop->menu); + get_prompt_str(r, prop->menu->prompt, head); + } + } + + for_all_properties(sym, prop, P_SYMBOL) { + if (!prop->menu->prompt) { + get_def_str(r, prop->menu); + get_dep_str(r, prop->menu->dep, " Depends on: "); + } + } + + get_symbol_props_str(r, sym, P_SELECT, "Selects: "); + if (sym->rev_dep.expr) { + expr_gstr_print_revdep(sym->rev_dep.expr, r, yes, "Selected by [y]:\n"); + expr_gstr_print_revdep(sym->rev_dep.expr, r, mod, "Selected by [m]:\n"); + expr_gstr_print_revdep(sym->rev_dep.expr, r, no, "Selected by [n]:\n"); + } + + get_symbol_props_str(r, sym, P_IMPLY, "Implies: "); + if (sym->implied.expr) { + expr_gstr_print_revdep(sym->implied.expr, r, yes, "Implied by [y]:\n"); + expr_gstr_print_revdep(sym->implied.expr, r, mod, "Implied by [m]:\n"); + expr_gstr_print_revdep(sym->implied.expr, r, no, "Implied by [n]:\n"); + } + + str_append(r, "\n\n"); +} + +struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head) +{ + struct symbol *sym; + struct gstr res = str_new(); + int i; + + for (i = 0; sym_arr && (sym = sym_arr[i]); i++) + get_symbol_str(&res, sym, head); + if (!i) + str_append(&res, "No matches found.\n"); + return res; +} + + +void menu_get_ext_help(struct menu *menu, struct gstr *help) +{ + struct symbol *sym = menu->sym; + const char *help_text = nohelp_text; + + if (menu_has_help(menu)) { + if (sym->name) + str_printf(help, "%s%s:\n\n", CONFIG_, sym->name); + help_text = menu_get_help(menu); + } + str_printf(help, "%s\n", help_text); + if (sym) + get_symbol_str(help, sym, NULL); +} diff --git a/libraries/NEMU/tools/kconfig/parser.y b/libraries/NEMU/tools/kconfig/parser.y new file mode 100644 index 0000000..190f111 --- /dev/null +++ b/libraries/NEMU/tools/kconfig/parser.y @@ -0,0 +1,727 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2002 Roman Zippel + */ +%{ + +#include +#include +#include +#include +#include +#include + +#include "lkc.h" + +#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt) + +#define PRINTD 0x0001 +#define DEBUG_PARSE 0x0002 + +int cdebug = PRINTD; + +static void yyerror(const char *err); +static void zconfprint(const char *err, ...); +static void zconf_error(const char *err, ...); +static bool zconf_endtoken(const char *tokenname, + const char *expected_tokenname); + +struct symbol *symbol_hash[SYMBOL_HASHSIZE]; + +static struct menu *current_menu, *current_entry; + +%} + +%union +{ + char *string; + struct symbol *symbol; + struct expr *expr; + struct menu *menu; + enum symbol_type type; + enum variable_flavor flavor; +} + +%token T_HELPTEXT +%token T_WORD +%token T_WORD_QUOTE +%token T_ALLNOCONFIG_Y +%token T_BOOL +%token T_CHOICE +%token T_CLOSE_PAREN +%token T_COLON_EQUAL +%token T_COMMENT +%token T_CONFIG +%token T_DEFAULT +%token T_DEFCONFIG_LIST +%token T_DEF_BOOL +%token T_DEF_TRISTATE +%token T_DEPENDS +%token T_ENDCHOICE +%token T_ENDIF +%token T_ENDMENU +%token T_HELP +%token T_HEX +%token T_IF +%token T_IMPLY +%token T_INT +%token T_MAINMENU +%token T_MENU +%token T_MENUCONFIG +%token T_MODULES +%token T_ON +%token T_OPEN_PAREN +%token T_OPTION +%token T_OPTIONAL +%token T_PLUS_EQUAL +%token T_PROMPT +%token T_RANGE +%token T_SELECT +%token T_SOURCE +%token T_STRING +%token T_TRISTATE +%token T_VISIBLE +%token T_EOL +%token T_ASSIGN_VAL + +%left T_OR +%left T_AND +%left T_EQUAL T_UNEQUAL +%left T_LESS T_LESS_EQUAL T_GREATER T_GREATER_EQUAL +%nonassoc T_NOT + +%type nonconst_symbol +%type symbol +%type type logic_type default +%type expr +%type if_expr +%type end +%type if_entry menu_entry choice_entry +%type word_opt assign_val +%type assign_op + +%destructor { + fprintf(stderr, "%s:%d: missing end statement for this entry\n", + $$->file->name, $$->lineno); + if (current_menu == $$) + menu_end_menu(); +} if_entry menu_entry choice_entry + +%% +input: mainmenu_stmt stmt_list | stmt_list; + +/* mainmenu entry */ + +mainmenu_stmt: T_MAINMENU T_WORD_QUOTE T_EOL +{ + menu_add_prompt(P_MENU, $2, NULL); +}; + +stmt_list: + /* empty */ + | stmt_list assignment_stmt + | stmt_list choice_stmt + | stmt_list comment_stmt + | stmt_list config_stmt + | stmt_list if_stmt + | stmt_list menu_stmt + | stmt_list menuconfig_stmt + | stmt_list source_stmt + | stmt_list T_WORD error T_EOL { zconf_error("unknown statement \"%s\"", $2); } + | stmt_list error T_EOL { zconf_error("invalid statement"); } +; + +stmt_list_in_choice: + /* empty */ + | stmt_list_in_choice comment_stmt + | stmt_list_in_choice config_stmt + | stmt_list_in_choice if_stmt_in_choice + | stmt_list_in_choice error T_EOL { zconf_error("invalid statement"); } +; + +/* config/menuconfig entry */ + +config_entry_start: T_CONFIG nonconst_symbol T_EOL +{ + $2->flags |= SYMBOL_OPTIONAL; + menu_add_entry($2); + printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), $2->name); +}; + +config_stmt: config_entry_start config_option_list +{ + printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); +}; + +menuconfig_entry_start: T_MENUCONFIG nonconst_symbol T_EOL +{ + $2->flags |= SYMBOL_OPTIONAL; + menu_add_entry($2); + printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), $2->name); +}; + +menuconfig_stmt: menuconfig_entry_start config_option_list +{ + if (current_entry->prompt) + current_entry->prompt->type = P_MENU; + else + zconfprint("warning: menuconfig statement without prompt"); + printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); +}; + +config_option_list: + /* empty */ + | config_option_list config_option + | config_option_list depends + | config_option_list help +; + +config_option: type prompt_stmt_opt T_EOL +{ + menu_set_type($1); + printd(DEBUG_PARSE, "%s:%d:type(%u)\n", + zconf_curname(), zconf_lineno(), + $1); +}; + +config_option: T_PROMPT T_WORD_QUOTE if_expr T_EOL +{ + menu_add_prompt(P_PROMPT, $2, $3); + printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); +}; + +config_option: default expr if_expr T_EOL +{ + menu_add_expr(P_DEFAULT, $2, $3); + if ($1 != S_UNKNOWN) + menu_set_type($1); + printd(DEBUG_PARSE, "%s:%d:default(%u)\n", + zconf_curname(), zconf_lineno(), + $1); +}; + +config_option: T_SELECT nonconst_symbol if_expr T_EOL +{ + menu_add_symbol(P_SELECT, $2, $3); + printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno()); +}; + +config_option: T_IMPLY nonconst_symbol if_expr T_EOL +{ + menu_add_symbol(P_IMPLY, $2, $3); + printd(DEBUG_PARSE, "%s:%d:imply\n", zconf_curname(), zconf_lineno()); +}; + +config_option: T_RANGE symbol symbol if_expr T_EOL +{ + menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,$2, $3), $4); + printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno()); +}; + +config_option: T_OPTION T_MODULES T_EOL +{ + menu_add_option_modules(); +}; + +config_option: T_OPTION T_DEFCONFIG_LIST T_EOL +{ + menu_add_option_defconfig_list(); +}; + +config_option: T_OPTION T_ALLNOCONFIG_Y T_EOL +{ + menu_add_option_allnoconfig_y(); +}; + +/* choice entry */ + +choice: T_CHOICE word_opt T_EOL +{ + struct symbol *sym = sym_lookup($2, SYMBOL_CHOICE); + sym->flags |= SYMBOL_NO_WRITE; + menu_add_entry(sym); + menu_add_expr(P_CHOICE, NULL, NULL); + free($2); + printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno()); +}; + +choice_entry: choice choice_option_list +{ + $$ = menu_add_menu(); +}; + +choice_end: end +{ + if (zconf_endtoken($1, "choice")) { + menu_end_menu(); + printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno()); + } +}; + +choice_stmt: choice_entry stmt_list_in_choice choice_end +; + +choice_option_list: + /* empty */ + | choice_option_list choice_option + | choice_option_list depends + | choice_option_list help +; + +choice_option: T_PROMPT T_WORD_QUOTE if_expr T_EOL +{ + menu_add_prompt(P_PROMPT, $2, $3); + printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); +}; + +choice_option: logic_type prompt_stmt_opt T_EOL +{ + menu_set_type($1); + printd(DEBUG_PARSE, "%s:%d:type(%u)\n", + zconf_curname(), zconf_lineno(), $1); +}; + +choice_option: T_OPTIONAL T_EOL +{ + current_entry->sym->flags |= SYMBOL_OPTIONAL; + printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno()); +}; + +choice_option: T_DEFAULT nonconst_symbol if_expr T_EOL +{ + menu_add_symbol(P_DEFAULT, $2, $3); + printd(DEBUG_PARSE, "%s:%d:default\n", + zconf_curname(), zconf_lineno()); +}; + +type: + logic_type + | T_INT { $$ = S_INT; } + | T_HEX { $$ = S_HEX; } + | T_STRING { $$ = S_STRING; } + +logic_type: + T_BOOL { $$ = S_BOOLEAN; } + | T_TRISTATE { $$ = S_TRISTATE; } + +default: + T_DEFAULT { $$ = S_UNKNOWN; } + | T_DEF_BOOL { $$ = S_BOOLEAN; } + | T_DEF_TRISTATE { $$ = S_TRISTATE; } + +/* if entry */ + +if_entry: T_IF expr T_EOL +{ + printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno()); + menu_add_entry(NULL); + menu_add_dep($2); + $$ = menu_add_menu(); +}; + +if_end: end +{ + if (zconf_endtoken($1, "if")) { + menu_end_menu(); + printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno()); + } +}; + +if_stmt: if_entry stmt_list if_end +; + +if_stmt_in_choice: if_entry stmt_list_in_choice if_end +; + +/* menu entry */ + +menu: T_MENU T_WORD_QUOTE T_EOL +{ + menu_add_entry(NULL); + menu_add_prompt(P_MENU, $2, NULL); + printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno()); +}; + +menu_entry: menu menu_option_list +{ + $$ = menu_add_menu(); +}; + +menu_end: end +{ + if (zconf_endtoken($1, "menu")) { + menu_end_menu(); + printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno()); + } +}; + +menu_stmt: menu_entry stmt_list menu_end +; + +menu_option_list: + /* empty */ + | menu_option_list visible + | menu_option_list depends +; + +source_stmt: T_SOURCE T_WORD_QUOTE T_EOL +{ + printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2); + zconf_nextfile($2); + free($2); +}; + +/* comment entry */ + +comment: T_COMMENT T_WORD_QUOTE T_EOL +{ + menu_add_entry(NULL); + menu_add_prompt(P_COMMENT, $2, NULL); + printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno()); +}; + +comment_stmt: comment comment_option_list +; + +comment_option_list: + /* empty */ + | comment_option_list depends +; + +/* help option */ + +help_start: T_HELP T_EOL +{ + printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno()); + zconf_starthelp(); +}; + +help: help_start T_HELPTEXT +{ + if (current_entry->help) { + free(current_entry->help); + zconfprint("warning: '%s' defined with more than one help text -- only the last one will be used", + current_entry->sym->name ?: ""); + } + + /* Is the help text empty or all whitespace? */ + if ($2[strspn($2, " \f\n\r\t\v")] == '\0') + zconfprint("warning: '%s' defined with blank help text", + current_entry->sym->name ?: ""); + + current_entry->help = $2; +}; + +/* depends option */ + +depends: T_DEPENDS T_ON expr T_EOL +{ + menu_add_dep($3); + printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno()); +}; + +/* visibility option */ +visible: T_VISIBLE if_expr T_EOL +{ + menu_add_visibility($2); +}; + +/* prompt statement */ + +prompt_stmt_opt: + /* empty */ + | T_WORD_QUOTE if_expr +{ + menu_add_prompt(P_PROMPT, $1, $2); +}; + +end: T_ENDMENU T_EOL { $$ = "menu"; } + | T_ENDCHOICE T_EOL { $$ = "choice"; } + | T_ENDIF T_EOL { $$ = "if"; } +; + +if_expr: /* empty */ { $$ = NULL; } + | T_IF expr { $$ = $2; } +; + +expr: symbol { $$ = expr_alloc_symbol($1); } + | symbol T_LESS symbol { $$ = expr_alloc_comp(E_LTH, $1, $3); } + | symbol T_LESS_EQUAL symbol { $$ = expr_alloc_comp(E_LEQ, $1, $3); } + | symbol T_GREATER symbol { $$ = expr_alloc_comp(E_GTH, $1, $3); } + | symbol T_GREATER_EQUAL symbol { $$ = expr_alloc_comp(E_GEQ, $1, $3); } + | symbol T_EQUAL symbol { $$ = expr_alloc_comp(E_EQUAL, $1, $3); } + | symbol T_UNEQUAL symbol { $$ = expr_alloc_comp(E_UNEQUAL, $1, $3); } + | T_OPEN_PAREN expr T_CLOSE_PAREN { $$ = $2; } + | T_NOT expr { $$ = expr_alloc_one(E_NOT, $2); } + | expr T_OR expr { $$ = expr_alloc_two(E_OR, $1, $3); } + | expr T_AND expr { $$ = expr_alloc_two(E_AND, $1, $3); } +; + +/* For symbol definitions, selects, etc., where quotes are not accepted */ +nonconst_symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); }; + +symbol: nonconst_symbol + | T_WORD_QUOTE { $$ = sym_lookup($1, SYMBOL_CONST); free($1); } +; + +word_opt: /* empty */ { $$ = NULL; } + | T_WORD + +/* assignment statement */ + +assignment_stmt: T_WORD assign_op assign_val T_EOL { variable_add($1, $3, $2); free($1); free($3); } + +assign_op: + T_EQUAL { $$ = VAR_RECURSIVE; } + | T_COLON_EQUAL { $$ = VAR_SIMPLE; } + | T_PLUS_EQUAL { $$ = VAR_APPEND; } +; + +assign_val: + /* empty */ { $$ = xstrdup(""); }; + | T_ASSIGN_VAL +; + +%% + +void conf_parse(const char *name) +{ + struct symbol *sym; + int i; + + zconf_initscan(name); + + _menu_init(); + + if (getenv("ZCONF_DEBUG")) + yydebug = 1; + yyparse(); + + /* Variables are expanded in the parse phase. We can free them here. */ + variable_all_del(); + + if (yynerrs) + exit(1); + if (!modules_sym) + modules_sym = sym_find( "n" ); + + if (!menu_has_prompt(&rootmenu)) { + current_entry = &rootmenu; + menu_add_prompt(P_MENU, "Main menu", NULL); + } + + menu_finalize(&rootmenu); + for_all_symbols(i, sym) { + if (sym_check_deps(sym)) + yynerrs++; + } + if (yynerrs) + exit(1); + sym_set_change_count(1); +} + +static bool zconf_endtoken(const char *tokenname, + const char *expected_tokenname) +{ + if (strcmp(tokenname, expected_tokenname)) { + zconf_error("unexpected '%s' within %s block", + tokenname, expected_tokenname); + yynerrs++; + return false; + } + if (current_menu->file != current_file) { + zconf_error("'%s' in different file than '%s'", + tokenname, expected_tokenname); + fprintf(stderr, "%s:%d: location of the '%s'\n", + current_menu->file->name, current_menu->lineno, + expected_tokenname); + yynerrs++; + return false; + } + return true; +} + +static void zconfprint(const char *err, ...) +{ + va_list ap; + + fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno()); + va_start(ap, err); + vfprintf(stderr, err, ap); + va_end(ap); + fprintf(stderr, "\n"); +} + +static void zconf_error(const char *err, ...) +{ + va_list ap; + + yynerrs++; + fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno()); + va_start(ap, err); + vfprintf(stderr, err, ap); + va_end(ap); + fprintf(stderr, "\n"); +} + +static void yyerror(const char *err) +{ + fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err); +} + +static void print_quoted_string(FILE *out, const char *str) +{ + const char *p; + int len; + + putc('"', out); + while ((p = strchr(str, '"'))) { + len = p - str; + if (len) + fprintf(out, "%.*s", len, str); + fputs("\\\"", out); + str = p + 1; + } + fputs(str, out); + putc('"', out); +} + +static void print_symbol(FILE *out, struct menu *menu) +{ + struct symbol *sym = menu->sym; + struct property *prop; + + if (sym_is_choice(sym)) + fprintf(out, "\nchoice\n"); + else + fprintf(out, "\nconfig %s\n", sym->name); + switch (sym->type) { + case S_BOOLEAN: + fputs(" bool\n", out); + break; + case S_TRISTATE: + fputs(" tristate\n", out); + break; + case S_STRING: + fputs(" string\n", out); + break; + case S_INT: + fputs(" integer\n", out); + break; + case S_HEX: + fputs(" hex\n", out); + break; + default: + fputs(" ???\n", out); + break; + } + for (prop = sym->prop; prop; prop = prop->next) { + if (prop->menu != menu) + continue; + switch (prop->type) { + case P_PROMPT: + fputs(" prompt ", out); + print_quoted_string(out, prop->text); + if (!expr_is_yes(prop->visible.expr)) { + fputs(" if ", out); + expr_fprint(prop->visible.expr, out); + } + fputc('\n', out); + break; + case P_DEFAULT: + fputs( " default ", out); + expr_fprint(prop->expr, out); + if (!expr_is_yes(prop->visible.expr)) { + fputs(" if ", out); + expr_fprint(prop->visible.expr, out); + } + fputc('\n', out); + break; + case P_CHOICE: + fputs(" #choice value\n", out); + break; + case P_SELECT: + fputs( " select ", out); + expr_fprint(prop->expr, out); + fputc('\n', out); + break; + case P_IMPLY: + fputs( " imply ", out); + expr_fprint(prop->expr, out); + fputc('\n', out); + break; + case P_RANGE: + fputs( " range ", out); + expr_fprint(prop->expr, out); + fputc('\n', out); + break; + case P_MENU: + fputs( " menu ", out); + print_quoted_string(out, prop->text); + fputc('\n', out); + break; + case P_SYMBOL: + fputs( " symbol ", out); + fprintf(out, "%s\n", prop->menu->sym->name); + break; + default: + fprintf(out, " unknown prop %d!\n", prop->type); + break; + } + } + if (menu->help) { + int len = strlen(menu->help); + while (menu->help[--len] == '\n') + menu->help[len] = 0; + fprintf(out, " help\n%s\n", menu->help); + } +} + +void zconfdump(FILE *out) +{ + struct property *prop; + struct symbol *sym; + struct menu *menu; + + menu = rootmenu.list; + while (menu) { + if ((sym = menu->sym)) + print_symbol(out, menu); + else if ((prop = menu->prompt)) { + switch (prop->type) { + case P_COMMENT: + fputs("\ncomment ", out); + print_quoted_string(out, prop->text); + fputs("\n", out); + break; + case P_MENU: + fputs("\nmenu ", out); + print_quoted_string(out, prop->text); + fputs("\n", out); + break; + default: + ; + } + if (!expr_is_yes(prop->visible.expr)) { + fputs(" depends ", out); + expr_fprint(prop->visible.expr, out); + fputc('\n', out); + } + } + + if (menu->list) + menu = menu->list; + else if (menu->next) + menu = menu->next; + else while ((menu = menu->parent)) { + if (menu->prompt && menu->prompt->type == P_MENU) + fputs("\nendmenu\n", out); + if (menu->next) { + menu = menu->next; + break; + } + } + } +} + +#include "menu.c" diff --git a/libraries/NEMU/tools/kconfig/preprocess.c b/libraries/NEMU/tools/kconfig/preprocess.c new file mode 100644 index 0000000..0590f86 --- /dev/null +++ b/libraries/NEMU/tools/kconfig/preprocess.c @@ -0,0 +1,574 @@ +// SPDX-License-Identifier: GPL-2.0 +// +// Copyright (C) 2018 Masahiro Yamada + +#include +#include +#include +#include +#include +#include + +#include "list.h" +#include "lkc.h" + +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) + +static char *expand_string_with_args(const char *in, int argc, char *argv[]); +static char *expand_string(const char *in); + +static void __attribute__((noreturn)) pperror(const char *format, ...) +{ + va_list ap; + + fprintf(stderr, "%s:%d: ", current_file->name, yylineno); + va_start(ap, format); + vfprintf(stderr, format, ap); + va_end(ap); + fprintf(stderr, "\n"); + + exit(1); +} + +/* + * Environment variables + */ +static LIST_HEAD(env_list); + +struct env { + char *name; + char *value; + struct list_head node; +}; + +static void env_add(const char *name, const char *value) +{ + struct env *e; + + e = xmalloc(sizeof(*e)); + e->name = xstrdup(name); + e->value = xstrdup(value); + + list_add_tail(&e->node, &env_list); +} + +static void env_del(struct env *e) +{ + list_del(&e->node); + free(e->name); + free(e->value); + free(e); +} + +/* The returned pointer must be freed when done */ +static char *env_expand(const char *name) +{ + struct env *e; + const char *value; + + if (!*name) + return NULL; + + list_for_each_entry(e, &env_list, node) { + if (!strcmp(name, e->name)) + return xstrdup(e->value); + } + + value = getenv(name); + if (!value) + return NULL; + + /* + * We need to remember all referenced environment variables. + * They will be written out to include/config/auto.conf.cmd + */ + env_add(name, value); + + return xstrdup(value); +} + +void env_write_dep(FILE *f, const char *autoconfig_name) +{ + struct env *e, *tmp; + + list_for_each_entry_safe(e, tmp, &env_list, node) { + fprintf(f, "ifneq \"$(%s)\" \"%s\"\n", e->name, e->value); + fprintf(f, "%s: FORCE\n", autoconfig_name); + fprintf(f, "endif\n"); + env_del(e); + } +} + +/* + * Built-in functions + */ +struct function { + const char *name; + unsigned int min_args; + unsigned int max_args; + char *(*func)(int argc, char *argv[]); +}; + +static char *do_error_if(int argc, char *argv[]) +{ + if (!strcmp(argv[0], "y")) + pperror("%s", argv[1]); + + return xstrdup(""); +} + +static char *do_filename(int argc, char *argv[]) +{ + return xstrdup(current_file->name); +} + +static char *do_info(int argc, char *argv[]) +{ + printf("%s\n", argv[0]); + + return xstrdup(""); +} + +static char *do_lineno(int argc, char *argv[]) +{ + char buf[16]; + + sprintf(buf, "%d", yylineno); + + return xstrdup(buf); +} + +static char *do_shell(int argc, char *argv[]) +{ + FILE *p; + char buf[256]; + char *cmd; + size_t nread; + int i; + + cmd = argv[0]; + + p = popen(cmd, "r"); + if (!p) { + perror(cmd); + exit(1); + } + + nread = fread(buf, 1, sizeof(buf), p); + if (nread == sizeof(buf)) + nread--; + + /* remove trailing new lines */ + while (nread > 0 && buf[nread - 1] == '\n') + nread--; + + buf[nread] = 0; + + /* replace a new line with a space */ + for (i = 0; i < nread; i++) { + if (buf[i] == '\n') + buf[i] = ' '; + } + + if (pclose(p) == -1) { + perror(cmd); + exit(1); + } + + return xstrdup(buf); +} + +static char *do_warning_if(int argc, char *argv[]) +{ + if (!strcmp(argv[0], "y")) + fprintf(stderr, "%s:%d: %s\n", + current_file->name, yylineno, argv[1]); + + return xstrdup(""); +} + +static const struct function function_table[] = { + /* Name MIN MAX Function */ + { "error-if", 2, 2, do_error_if }, + { "filename", 0, 0, do_filename }, + { "info", 1, 1, do_info }, + { "lineno", 0, 0, do_lineno }, + { "shell", 1, 1, do_shell }, + { "warning-if", 2, 2, do_warning_if }, +}; + +#define FUNCTION_MAX_ARGS 16 + +static char *function_expand(const char *name, int argc, char *argv[]) +{ + const struct function *f; + int i; + + for (i = 0; i < ARRAY_SIZE(function_table); i++) { + f = &function_table[i]; + if (strcmp(f->name, name)) + continue; + + if (argc < f->min_args) + pperror("too few function arguments passed to '%s'", + name); + + if (argc > f->max_args) + pperror("too many function arguments passed to '%s'", + name); + + return f->func(argc, argv); + } + + return NULL; +} + +/* + * Variables (and user-defined functions) + */ +static LIST_HEAD(variable_list); + +struct variable { + char *name; + char *value; + enum variable_flavor flavor; + int exp_count; + struct list_head node; +}; + +static struct variable *variable_lookup(const char *name) +{ + struct variable *v; + + list_for_each_entry(v, &variable_list, node) { + if (!strcmp(name, v->name)) + return v; + } + + return NULL; +} + +static char *variable_expand(const char *name, int argc, char *argv[]) +{ + struct variable *v; + char *res; + + v = variable_lookup(name); + if (!v) + return NULL; + + if (argc == 0 && v->exp_count) + pperror("Recursive variable '%s' references itself (eventually)", + name); + + if (v->exp_count > 1000) + pperror("Too deep recursive expansion"); + + v->exp_count++; + + if (v->flavor == VAR_RECURSIVE) + res = expand_string_with_args(v->value, argc, argv); + else + res = xstrdup(v->value); + + v->exp_count--; + + return res; +} + +void variable_add(const char *name, const char *value, + enum variable_flavor flavor) +{ + struct variable *v; + char *new_value; + bool append = false; + + v = variable_lookup(name); + if (v) { + /* For defined variables, += inherits the existing flavor */ + if (flavor == VAR_APPEND) { + flavor = v->flavor; + append = true; + } else { + free(v->value); + } + } else { + /* For undefined variables, += assumes the recursive flavor */ + if (flavor == VAR_APPEND) + flavor = VAR_RECURSIVE; + + v = xmalloc(sizeof(*v)); + v->name = xstrdup(name); + v->exp_count = 0; + list_add_tail(&v->node, &variable_list); + } + + v->flavor = flavor; + + if (flavor == VAR_SIMPLE) + new_value = expand_string(value); + else + new_value = xstrdup(value); + + if (append) { + v->value = xrealloc(v->value, + strlen(v->value) + strlen(new_value) + 2); + strcat(v->value, " "); + strcat(v->value, new_value); + free(new_value); + } else { + v->value = new_value; + } +} + +static void variable_del(struct variable *v) +{ + list_del(&v->node); + free(v->name); + free(v->value); + free(v); +} + +void variable_all_del(void) +{ + struct variable *v, *tmp; + + list_for_each_entry_safe(v, tmp, &variable_list, node) + variable_del(v); +} + +/* + * Evaluate a clause with arguments. argc/argv are arguments from the upper + * function call. + * + * Returned string must be freed when done + */ +static char *eval_clause(const char *str, size_t len, int argc, char *argv[]) +{ + char *tmp, *name, *res, *endptr, *prev, *p; + int new_argc = 0; + char *new_argv[FUNCTION_MAX_ARGS]; + int nest = 0; + int i; + unsigned long n; + + tmp = xstrndup(str, len); + + /* + * If variable name is '1', '2', etc. It is generally an argument + * from a user-function call (i.e. local-scope variable). If not + * available, then look-up global-scope variables. + */ + n = strtoul(tmp, &endptr, 10); + if (!*endptr && n > 0 && n <= argc) { + res = xstrdup(argv[n - 1]); + goto free_tmp; + } + + prev = p = tmp; + + /* + * Split into tokens + * The function name and arguments are separated by a comma. + * For example, if the function call is like this: + * $(foo,$(x),$(y)) + * + * The input string for this helper should be: + * foo,$(x),$(y) + * + * and split into: + * new_argv[0] = 'foo' + * new_argv[1] = '$(x)' + * new_argv[2] = '$(y)' + */ + while (*p) { + if (nest == 0 && *p == ',') { + *p = 0; + if (new_argc >= FUNCTION_MAX_ARGS) + pperror("too many function arguments"); + new_argv[new_argc++] = prev; + prev = p + 1; + } else if (*p == '(') { + nest++; + } else if (*p == ')') { + nest--; + } + + p++; + } + new_argv[new_argc++] = prev; + + /* + * Shift arguments + * new_argv[0] represents a function name or a variable name. Put it + * into 'name', then shift the rest of the arguments. This simplifies + * 'const' handling. + */ + name = expand_string_with_args(new_argv[0], argc, argv); + new_argc--; + for (i = 0; i < new_argc; i++) + new_argv[i] = expand_string_with_args(new_argv[i + 1], + argc, argv); + + /* Search for variables */ + res = variable_expand(name, new_argc, new_argv); + if (res) + goto free; + + /* Look for built-in functions */ + res = function_expand(name, new_argc, new_argv); + if (res) + goto free; + + /* Last, try environment variable */ + if (new_argc == 0) { + res = env_expand(name); + if (res) + goto free; + } + + res = xstrdup(""); +free: + for (i = 0; i < new_argc; i++) + free(new_argv[i]); + free(name); +free_tmp: + free(tmp); + + return res; +} + +/* + * Expand a string that follows '$' + * + * For example, if the input string is + * ($(FOO)$($(BAR)))$(BAZ) + * this helper evaluates + * $($(FOO)$($(BAR))) + * and returns a new string containing the expansion (note that the string is + * recursively expanded), also advancing 'str' to point to the next character + * after the corresponding closing parenthesis, in this case, *str will be + * $(BAR) + */ +static char *expand_dollar_with_args(const char **str, int argc, char *argv[]) +{ + const char *p = *str; + const char *q; + int nest = 0; + + /* + * In Kconfig, variable/function references always start with "$(". + * Neither single-letter variables as in $A nor curly braces as in ${CC} + * are supported. '$' not followed by '(' loses its special meaning. + */ + if (*p != '(') { + *str = p; + return xstrdup("$"); + } + + p++; + q = p; + while (*q) { + if (*q == '(') { + nest++; + } else if (*q == ')') { + if (nest-- == 0) + break; + } + q++; + } + + if (!*q) + pperror("unterminated reference to '%s': missing ')'", p); + + /* Advance 'str' to after the expanded initial portion of the string */ + *str = q + 1; + + return eval_clause(p, q - p, argc, argv); +} + +char *expand_dollar(const char **str) +{ + return expand_dollar_with_args(str, 0, NULL); +} + +static char *__expand_string(const char **str, bool (*is_end)(char c), + int argc, char *argv[]) +{ + const char *in, *p; + char *expansion, *out; + size_t in_len, out_len; + + out = xmalloc(1); + *out = 0; + out_len = 1; + + p = in = *str; + + while (1) { + if (*p == '$') { + in_len = p - in; + p++; + expansion = expand_dollar_with_args(&p, argc, argv); + out_len += in_len + strlen(expansion); + out = xrealloc(out, out_len); + strncat(out, in, in_len); + strcat(out, expansion); + free(expansion); + in = p; + continue; + } + + if (is_end(*p)) + break; + + p++; + } + + in_len = p - in; + out_len += in_len; + out = xrealloc(out, out_len); + strncat(out, in, in_len); + + /* Advance 'str' to the end character */ + *str = p; + + return out; +} + +static bool is_end_of_str(char c) +{ + return !c; +} + +/* + * Expand variables and functions in the given string. Undefined variables + * expand to an empty string. + * The returned string must be freed when done. + */ +static char *expand_string_with_args(const char *in, int argc, char *argv[]) +{ + return __expand_string(&in, is_end_of_str, argc, argv); +} + +static char *expand_string(const char *in) +{ + return expand_string_with_args(in, 0, NULL); +} + +static bool is_end_of_token(char c) +{ + return !(isalnum(c) || c == '_' || c == '-'); +} + +/* + * Expand variables in a token. The parsing stops when a token separater + * (in most cases, it is a whitespace) is encountered. 'str' is updated to + * point to the next character. + * + * The returned string must be freed when done. + */ +char *expand_one_token(const char **str) +{ + return __expand_string(str, is_end_of_token, 0, NULL); +} diff --git a/libraries/NEMU/tools/kconfig/symbol.c b/libraries/NEMU/tools/kconfig/symbol.c new file mode 100644 index 0000000..ffa3ec6 --- /dev/null +++ b/libraries/NEMU/tools/kconfig/symbol.c @@ -0,0 +1,1314 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2002 Roman Zippel + */ + +#include +#include +#include +#include +#include + +#include "lkc.h" + +struct symbol symbol_yes = { + .name = "y", + .curr = { "y", yes }, + .flags = SYMBOL_CONST|SYMBOL_VALID, +}; + +struct symbol symbol_mod = { + .name = "m", + .curr = { "m", mod }, + .flags = SYMBOL_CONST|SYMBOL_VALID, +}; + +struct symbol symbol_no = { + .name = "n", + .curr = { "n", no }, + .flags = SYMBOL_CONST|SYMBOL_VALID, +}; + +static struct symbol symbol_empty = { + .name = "", + .curr = { "", no }, + .flags = SYMBOL_VALID, +}; + +struct symbol *sym_defconfig_list; +struct symbol *modules_sym; +static tristate modules_val; + +enum symbol_type sym_get_type(struct symbol *sym) +{ + enum symbol_type type = sym->type; + + if (type == S_TRISTATE) { + if (sym_is_choice_value(sym) && sym->visible == yes) + type = S_BOOLEAN; + else if (modules_val == no) + type = S_BOOLEAN; + } + return type; +} + +const char *sym_type_name(enum symbol_type type) +{ + switch (type) { + case S_BOOLEAN: + return "bool"; + case S_TRISTATE: + return "tristate"; + case S_INT: + return "integer"; + case S_HEX: + return "hex"; + case S_STRING: + return "string"; + case S_UNKNOWN: + return "unknown"; + } + return "???"; +} + +struct property *sym_get_choice_prop(struct symbol *sym) +{ + struct property *prop; + + for_all_choices(sym, prop) + return prop; + return NULL; +} + +static struct property *sym_get_default_prop(struct symbol *sym) +{ + struct property *prop; + + for_all_defaults(sym, prop) { + prop->visible.tri = expr_calc_value(prop->visible.expr); + if (prop->visible.tri != no) + return prop; + } + return NULL; +} + +struct property *sym_get_range_prop(struct symbol *sym) +{ + struct property *prop; + + for_all_properties(sym, prop, P_RANGE) { + prop->visible.tri = expr_calc_value(prop->visible.expr); + if (prop->visible.tri != no) + return prop; + } + return NULL; +} + +static long long sym_get_range_val(struct symbol *sym, int base) +{ + sym_calc_value(sym); + switch (sym->type) { + case S_INT: + base = 10; + break; + case S_HEX: + base = 16; + break; + default: + break; + } + return strtoll(sym->curr.val, NULL, base); +} + +static void sym_validate_range(struct symbol *sym) +{ + struct property *prop; + int base; + long long val, val2; + char str[64]; + + switch (sym->type) { + case S_INT: + base = 10; + break; + case S_HEX: + base = 16; + break; + default: + return; + } + prop = sym_get_range_prop(sym); + if (!prop) + return; + val = strtoll(sym->curr.val, NULL, base); + val2 = sym_get_range_val(prop->expr->left.sym, base); + if (val >= val2) { + val2 = sym_get_range_val(prop->expr->right.sym, base); + if (val <= val2) + return; + } + if (sym->type == S_INT) + sprintf(str, "%lld", val2); + else + sprintf(str, "0x%llx", val2); + sym->curr.val = xstrdup(str); +} + +static void sym_set_changed(struct symbol *sym) +{ + struct property *prop; + + sym->flags |= SYMBOL_CHANGED; + for (prop = sym->prop; prop; prop = prop->next) { + if (prop->menu) + prop->menu->flags |= MENU_CHANGED; + } +} + +static void sym_set_all_changed(void) +{ + struct symbol *sym; + int i; + + for_all_symbols(i, sym) + sym_set_changed(sym); +} + +static void sym_calc_visibility(struct symbol *sym) +{ + struct property *prop; + struct symbol *choice_sym = NULL; + tristate tri; + + /* any prompt visible? */ + tri = no; + + if (sym_is_choice_value(sym)) + choice_sym = prop_get_symbol(sym_get_choice_prop(sym)); + + for_all_prompts(sym, prop) { + prop->visible.tri = expr_calc_value(prop->visible.expr); + /* + * Tristate choice_values with visibility 'mod' are + * not visible if the corresponding choice's value is + * 'yes'. + */ + if (choice_sym && sym->type == S_TRISTATE && + prop->visible.tri == mod && choice_sym->curr.tri == yes) + prop->visible.tri = no; + + tri = EXPR_OR(tri, prop->visible.tri); + } + if (tri == mod && (sym->type != S_TRISTATE || modules_val == no)) + tri = yes; + if (sym->visible != tri) { + sym->visible = tri; + sym_set_changed(sym); + } + if (sym_is_choice_value(sym)) + return; + /* defaulting to "yes" if no explicit "depends on" are given */ + tri = yes; + if (sym->dir_dep.expr) + tri = expr_calc_value(sym->dir_dep.expr); + if (tri == mod && sym_get_type(sym) == S_BOOLEAN) + tri = yes; + if (sym->dir_dep.tri != tri) { + sym->dir_dep.tri = tri; + sym_set_changed(sym); + } + tri = no; + if (sym->rev_dep.expr) + tri = expr_calc_value(sym->rev_dep.expr); + if (tri == mod && sym_get_type(sym) == S_BOOLEAN) + tri = yes; + if (sym->rev_dep.tri != tri) { + sym->rev_dep.tri = tri; + sym_set_changed(sym); + } + tri = no; + if (sym->implied.expr) + tri = expr_calc_value(sym->implied.expr); + if (tri == mod && sym_get_type(sym) == S_BOOLEAN) + tri = yes; + if (sym->implied.tri != tri) { + sym->implied.tri = tri; + sym_set_changed(sym); + } +} + +/* + * Find the default symbol for a choice. + * First try the default values for the choice symbol + * Next locate the first visible choice value + * Return NULL if none was found + */ +struct symbol *sym_choice_default(struct symbol *sym) +{ + struct symbol *def_sym; + struct property *prop; + struct expr *e; + + /* any of the defaults visible? */ + for_all_defaults(sym, prop) { + prop->visible.tri = expr_calc_value(prop->visible.expr); + if (prop->visible.tri == no) + continue; + def_sym = prop_get_symbol(prop); + if (def_sym->visible != no) + return def_sym; + } + + /* just get the first visible value */ + prop = sym_get_choice_prop(sym); + expr_list_for_each_sym(prop->expr, e, def_sym) + if (def_sym->visible != no) + return def_sym; + + /* failed to locate any defaults */ + return NULL; +} + +static struct symbol *sym_calc_choice(struct symbol *sym) +{ + struct symbol *def_sym; + struct property *prop; + struct expr *e; + int flags; + + /* first calculate all choice values' visibilities */ + flags = sym->flags; + prop = sym_get_choice_prop(sym); + expr_list_for_each_sym(prop->expr, e, def_sym) { + sym_calc_visibility(def_sym); + if (def_sym->visible != no) + flags &= def_sym->flags; + } + + sym->flags &= flags | ~SYMBOL_DEF_USER; + + /* is the user choice visible? */ + def_sym = sym->def[S_DEF_USER].val; + if (def_sym && def_sym->visible != no) + return def_sym; + + def_sym = sym_choice_default(sym); + + if (def_sym == NULL) + /* no choice? reset tristate value */ + sym->curr.tri = no; + + return def_sym; +} + +static void sym_warn_unmet_dep(struct symbol *sym) +{ + struct gstr gs = str_new(); + + str_printf(&gs, + "\nWARNING: unmet direct dependencies detected for %s\n", + sym->name); + str_printf(&gs, + " Depends on [%c]: ", + sym->dir_dep.tri == mod ? 'm' : 'n'); + expr_gstr_print(sym->dir_dep.expr, &gs); + str_printf(&gs, "\n"); + + expr_gstr_print_revdep(sym->rev_dep.expr, &gs, yes, + " Selected by [y]:\n"); + expr_gstr_print_revdep(sym->rev_dep.expr, &gs, mod, + " Selected by [m]:\n"); + + fputs(str_get(&gs), stderr); +} + +void sym_calc_value(struct symbol *sym) +{ + struct symbol_value newval, oldval; + struct property *prop; + struct expr *e; + + if (!sym) + return; + + if (sym->flags & SYMBOL_VALID) + return; + + if (sym_is_choice_value(sym) && + sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES) { + sym->flags &= ~SYMBOL_NEED_SET_CHOICE_VALUES; + prop = sym_get_choice_prop(sym); + sym_calc_value(prop_get_symbol(prop)); + } + + sym->flags |= SYMBOL_VALID; + + oldval = sym->curr; + + switch (sym->type) { + case S_INT: + case S_HEX: + case S_STRING: + newval = symbol_empty.curr; + break; + case S_BOOLEAN: + case S_TRISTATE: + newval = symbol_no.curr; + break; + default: + sym->curr.val = sym->name; + sym->curr.tri = no; + return; + } + sym->flags &= ~SYMBOL_WRITE; + + sym_calc_visibility(sym); + + if (sym->visible != no) + sym->flags |= SYMBOL_WRITE; + + /* set default if recursively called */ + sym->curr = newval; + + switch (sym_get_type(sym)) { + case S_BOOLEAN: + case S_TRISTATE: + if (sym_is_choice_value(sym) && sym->visible == yes) { + prop = sym_get_choice_prop(sym); + newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no; + } else { + if (sym->visible != no) { + /* if the symbol is visible use the user value + * if available, otherwise try the default value + */ + if (sym_has_value(sym)) { + newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri, + sym->visible); + goto calc_newval; + } + } + if (sym->rev_dep.tri != no) + sym->flags |= SYMBOL_WRITE; + if (!sym_is_choice(sym)) { + prop = sym_get_default_prop(sym); + if (prop) { + newval.tri = EXPR_AND(expr_calc_value(prop->expr), + prop->visible.tri); + if (newval.tri != no) + sym->flags |= SYMBOL_WRITE; + } + if (sym->implied.tri != no) { + sym->flags |= SYMBOL_WRITE; + newval.tri = EXPR_OR(newval.tri, sym->implied.tri); + newval.tri = EXPR_AND(newval.tri, + sym->dir_dep.tri); + } + } + calc_newval: + if (sym->dir_dep.tri < sym->rev_dep.tri) + sym_warn_unmet_dep(sym); + newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri); + } + if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN) + newval.tri = yes; + break; + case S_STRING: + case S_HEX: + case S_INT: + if (sym->visible != no && sym_has_value(sym)) { + newval.val = sym->def[S_DEF_USER].val; + break; + } + prop = sym_get_default_prop(sym); + if (prop) { + struct symbol *ds = prop_get_symbol(prop); + if (ds) { + sym->flags |= SYMBOL_WRITE; + sym_calc_value(ds); + newval.val = ds->curr.val; + } + } + break; + default: + ; + } + + sym->curr = newval; + if (sym_is_choice(sym) && newval.tri == yes) + sym->curr.val = sym_calc_choice(sym); + sym_validate_range(sym); + + if (memcmp(&oldval, &sym->curr, sizeof(oldval))) { + sym_set_changed(sym); + if (modules_sym == sym) { + sym_set_all_changed(); + modules_val = modules_sym->curr.tri; + } + } + + if (sym_is_choice(sym)) { + struct symbol *choice_sym; + + prop = sym_get_choice_prop(sym); + expr_list_for_each_sym(prop->expr, e, choice_sym) { + if ((sym->flags & SYMBOL_WRITE) && + choice_sym->visible != no) + choice_sym->flags |= SYMBOL_WRITE; + if (sym->flags & SYMBOL_CHANGED) + sym_set_changed(choice_sym); + } + } + + if (sym->flags & SYMBOL_NO_WRITE) + sym->flags &= ~SYMBOL_WRITE; + + if (sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES) + set_all_choice_values(sym); +} + +void sym_clear_all_valid(void) +{ + struct symbol *sym; + int i; + + for_all_symbols(i, sym) + sym->flags &= ~SYMBOL_VALID; + sym_add_change_count(1); + sym_calc_value(modules_sym); +} + +bool sym_tristate_within_range(struct symbol *sym, tristate val) +{ + int type = sym_get_type(sym); + + if (sym->visible == no) + return false; + + if (type != S_BOOLEAN && type != S_TRISTATE) + return false; + + if (type == S_BOOLEAN && val == mod) + return false; + if (sym->visible <= sym->rev_dep.tri) + return false; + if (sym_is_choice_value(sym) && sym->visible == yes) + return val == yes; + return val >= sym->rev_dep.tri && val <= sym->visible; +} + +bool sym_set_tristate_value(struct symbol *sym, tristate val) +{ + tristate oldval = sym_get_tristate_value(sym); + + if (oldval != val && !sym_tristate_within_range(sym, val)) + return false; + + if (!(sym->flags & SYMBOL_DEF_USER)) { + sym->flags |= SYMBOL_DEF_USER; + sym_set_changed(sym); + } + /* + * setting a choice value also resets the new flag of the choice + * symbol and all other choice values. + */ + if (sym_is_choice_value(sym) && val == yes) { + struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); + struct property *prop; + struct expr *e; + + cs->def[S_DEF_USER].val = sym; + cs->flags |= SYMBOL_DEF_USER; + prop = sym_get_choice_prop(cs); + for (e = prop->expr; e; e = e->left.expr) { + if (e->right.sym->visible != no) + e->right.sym->flags |= SYMBOL_DEF_USER; + } + } + + sym->def[S_DEF_USER].tri = val; + if (oldval != val) + sym_clear_all_valid(); + + return true; +} + +tristate sym_toggle_tristate_value(struct symbol *sym) +{ + tristate oldval, newval; + + oldval = newval = sym_get_tristate_value(sym); + do { + switch (newval) { + case no: + newval = mod; + break; + case mod: + newval = yes; + break; + case yes: + newval = no; + break; + } + if (sym_set_tristate_value(sym, newval)) + break; + } while (oldval != newval); + return newval; +} + +bool sym_string_valid(struct symbol *sym, const char *str) +{ + signed char ch; + + switch (sym->type) { + case S_STRING: + return true; + case S_INT: + ch = *str++; + if (ch == '-') + ch = *str++; + if (!isdigit(ch)) + return false; + if (ch == '0' && *str != 0) + return false; + while ((ch = *str++)) { + if (!isdigit(ch)) + return false; + } + return true; + case S_HEX: + if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) + str += 2; + ch = *str++; + do { + if (!isxdigit(ch)) + return false; + } while ((ch = *str++)); + return true; + case S_BOOLEAN: + case S_TRISTATE: + switch (str[0]) { + case 'y': case 'Y': + case 'm': case 'M': + case 'n': case 'N': + return true; + } + return false; + default: + return false; + } +} + +bool sym_string_within_range(struct symbol *sym, const char *str) +{ + struct property *prop; + long long val; + + switch (sym->type) { + case S_STRING: + return sym_string_valid(sym, str); + case S_INT: + if (!sym_string_valid(sym, str)) + return false; + prop = sym_get_range_prop(sym); + if (!prop) + return true; + val = strtoll(str, NULL, 10); + return val >= sym_get_range_val(prop->expr->left.sym, 10) && + val <= sym_get_range_val(prop->expr->right.sym, 10); + case S_HEX: + if (!sym_string_valid(sym, str)) + return false; + prop = sym_get_range_prop(sym); + if (!prop) + return true; + val = strtoll(str, NULL, 16); + return val >= sym_get_range_val(prop->expr->left.sym, 16) && + val <= sym_get_range_val(prop->expr->right.sym, 16); + case S_BOOLEAN: + case S_TRISTATE: + switch (str[0]) { + case 'y': case 'Y': + return sym_tristate_within_range(sym, yes); + case 'm': case 'M': + return sym_tristate_within_range(sym, mod); + case 'n': case 'N': + return sym_tristate_within_range(sym, no); + } + return false; + default: + return false; + } +} + +bool sym_set_string_value(struct symbol *sym, const char *newval) +{ + const char *oldval; + char *val; + int size; + + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + switch (newval[0]) { + case 'y': case 'Y': + return sym_set_tristate_value(sym, yes); + case 'm': case 'M': + return sym_set_tristate_value(sym, mod); + case 'n': case 'N': + return sym_set_tristate_value(sym, no); + } + return false; + default: + ; + } + + if (!sym_string_within_range(sym, newval)) + return false; + + if (!(sym->flags & SYMBOL_DEF_USER)) { + sym->flags |= SYMBOL_DEF_USER; + sym_set_changed(sym); + } + + oldval = sym->def[S_DEF_USER].val; + size = strlen(newval) + 1; + if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) { + size += 2; + sym->def[S_DEF_USER].val = val = xmalloc(size); + *val++ = '0'; + *val++ = 'x'; + } else if (!oldval || strcmp(oldval, newval)) + sym->def[S_DEF_USER].val = val = xmalloc(size); + else + return true; + + strcpy(val, newval); + free((void *)oldval); + sym_clear_all_valid(); + + return true; +} + +/* + * Find the default value associated to a symbol. + * For tristate symbol handle the modules=n case + * in which case "m" becomes "y". + * If the symbol does not have any default then fallback + * to the fixed default values. + */ +const char *sym_get_string_default(struct symbol *sym) +{ + struct property *prop; + struct symbol *ds; + const char *str; + tristate val; + + sym_calc_visibility(sym); + sym_calc_value(modules_sym); + val = symbol_no.curr.tri; + str = symbol_empty.curr.val; + + /* If symbol has a default value look it up */ + prop = sym_get_default_prop(sym); + if (prop != NULL) { + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + /* The visibility may limit the value from yes => mod */ + val = EXPR_AND(expr_calc_value(prop->expr), prop->visible.tri); + break; + default: + /* + * The following fails to handle the situation + * where a default value is further limited by + * the valid range. + */ + ds = prop_get_symbol(prop); + if (ds != NULL) { + sym_calc_value(ds); + str = (const char *)ds->curr.val; + } + } + } + + /* Handle select statements */ + val = EXPR_OR(val, sym->rev_dep.tri); + + /* transpose mod to yes if modules are not enabled */ + if (val == mod) + if (!sym_is_choice_value(sym) && modules_sym->curr.tri == no) + val = yes; + + /* transpose mod to yes if type is bool */ + if (sym->type == S_BOOLEAN && val == mod) + val = yes; + + /* adjust the default value if this symbol is implied by another */ + if (val < sym->implied.tri) + val = sym->implied.tri; + + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + switch (val) { + case no: return "n"; + case mod: return "m"; + case yes: return "y"; + } + case S_INT: + case S_HEX: + return str; + case S_STRING: + return str; + case S_UNKNOWN: + break; + } + return ""; +} + +const char *sym_get_string_value(struct symbol *sym) +{ + tristate val; + + switch (sym->type) { + case S_BOOLEAN: + case S_TRISTATE: + val = sym_get_tristate_value(sym); + switch (val) { + case no: + return "n"; + case mod: + sym_calc_value(modules_sym); + return (modules_sym->curr.tri == no) ? "n" : "m"; + case yes: + return "y"; + } + break; + default: + ; + } + return (const char *)sym->curr.val; +} + +bool sym_is_changeable(struct symbol *sym) +{ + return sym->visible > sym->rev_dep.tri; +} + +static unsigned strhash(const char *s) +{ + /* fnv32 hash */ + unsigned hash = 2166136261U; + for (; *s; s++) + hash = (hash ^ *s) * 0x01000193; + return hash; +} + +struct symbol *sym_lookup(const char *name, int flags) +{ + struct symbol *symbol; + char *new_name; + int hash; + + if (name) { + if (name[0] && !name[1]) { + switch (name[0]) { + case 'y': return &symbol_yes; + case 'm': return &symbol_mod; + case 'n': return &symbol_no; + } + } + hash = strhash(name) % SYMBOL_HASHSIZE; + + for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) { + if (symbol->name && + !strcmp(symbol->name, name) && + (flags ? symbol->flags & flags + : !(symbol->flags & (SYMBOL_CONST|SYMBOL_CHOICE)))) + return symbol; + } + new_name = xstrdup(name); + } else { + new_name = NULL; + hash = 0; + } + + symbol = xmalloc(sizeof(*symbol)); + memset(symbol, 0, sizeof(*symbol)); + symbol->name = new_name; + symbol->type = S_UNKNOWN; + symbol->flags = flags; + + symbol->next = symbol_hash[hash]; + symbol_hash[hash] = symbol; + + return symbol; +} + +struct symbol *sym_find(const char *name) +{ + struct symbol *symbol = NULL; + int hash = 0; + + if (!name) + return NULL; + + if (name[0] && !name[1]) { + switch (name[0]) { + case 'y': return &symbol_yes; + case 'm': return &symbol_mod; + case 'n': return &symbol_no; + } + } + hash = strhash(name) % SYMBOL_HASHSIZE; + + for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) { + if (symbol->name && + !strcmp(symbol->name, name) && + !(symbol->flags & SYMBOL_CONST)) + break; + } + + return symbol; +} + +const char *sym_escape_string_value(const char *in) +{ + const char *p; + size_t reslen; + char *res; + size_t l; + + reslen = strlen(in) + strlen("\"\"") + 1; + + p = in; + for (;;) { + l = strcspn(p, "\"\\"); + p += l; + + if (p[0] == '\0') + break; + + reslen++; + p++; + } + + res = xmalloc(reslen); + res[0] = '\0'; + + strcat(res, "\""); + + p = in; + for (;;) { + l = strcspn(p, "\"\\"); + strncat(res, p, l); + p += l; + + if (p[0] == '\0') + break; + + strcat(res, "\\"); + strncat(res, p++, 1); + } + + strcat(res, "\""); + return res; +} + +struct sym_match { + struct symbol *sym; + off_t so, eo; +}; + +/* Compare matched symbols as thus: + * - first, symbols that match exactly + * - then, alphabetical sort + */ +static int sym_rel_comp(const void *sym1, const void *sym2) +{ + const struct sym_match *s1 = sym1; + const struct sym_match *s2 = sym2; + int exact1, exact2; + + /* Exact match: + * - if matched length on symbol s1 is the length of that symbol, + * then this symbol should come first; + * - if matched length on symbol s2 is the length of that symbol, + * then this symbol should come first. + * Note: since the search can be a regexp, both symbols may match + * exactly; if this is the case, we can't decide which comes first, + * and we fallback to sorting alphabetically. + */ + exact1 = (s1->eo - s1->so) == strlen(s1->sym->name); + exact2 = (s2->eo - s2->so) == strlen(s2->sym->name); + if (exact1 && !exact2) + return -1; + if (!exact1 && exact2) + return 1; + + /* As a fallback, sort symbols alphabetically */ + return strcmp(s1->sym->name, s2->sym->name); +} + +struct symbol **sym_re_search(const char *pattern) +{ + struct symbol *sym, **sym_arr = NULL; + struct sym_match *sym_match_arr = NULL; + int i, cnt, size; + regex_t re; + regmatch_t match[1]; + + cnt = size = 0; + /* Skip if empty */ + if (strlen(pattern) == 0) + return NULL; + if (regcomp(&re, pattern, REG_EXTENDED|REG_ICASE)) + return NULL; + + for_all_symbols(i, sym) { + if (sym->flags & SYMBOL_CONST || !sym->name) + continue; + if (regexec(&re, sym->name, 1, match, 0)) + continue; + if (cnt >= size) { + void *tmp; + size += 16; + tmp = realloc(sym_match_arr, size * sizeof(struct sym_match)); + if (!tmp) + goto sym_re_search_free; + sym_match_arr = tmp; + } + sym_calc_value(sym); + /* As regexec returned 0, we know we have a match, so + * we can use match[0].rm_[se]o without further checks + */ + sym_match_arr[cnt].so = match[0].rm_so; + sym_match_arr[cnt].eo = match[0].rm_eo; + sym_match_arr[cnt++].sym = sym; + } + if (sym_match_arr) { + qsort(sym_match_arr, cnt, sizeof(struct sym_match), sym_rel_comp); + sym_arr = malloc((cnt+1) * sizeof(struct symbol *)); + if (!sym_arr) + goto sym_re_search_free; + for (i = 0; i < cnt; i++) + sym_arr[i] = sym_match_arr[i].sym; + sym_arr[cnt] = NULL; + } +sym_re_search_free: + /* sym_match_arr can be NULL if no match, but free(NULL) is OK */ + free(sym_match_arr); + regfree(&re); + + return sym_arr; +} + +/* + * When we check for recursive dependencies we use a stack to save + * current state so we can print out relevant info to user. + * The entries are located on the call stack so no need to free memory. + * Note insert() remove() must always match to properly clear the stack. + */ +static struct dep_stack { + struct dep_stack *prev, *next; + struct symbol *sym; + struct property *prop; + struct expr **expr; +} *check_top; + +static void dep_stack_insert(struct dep_stack *stack, struct symbol *sym) +{ + memset(stack, 0, sizeof(*stack)); + if (check_top) + check_top->next = stack; + stack->prev = check_top; + stack->sym = sym; + check_top = stack; +} + +static void dep_stack_remove(void) +{ + check_top = check_top->prev; + if (check_top) + check_top->next = NULL; +} + +/* + * Called when we have detected a recursive dependency. + * check_top point to the top of the stact so we use + * the ->prev pointer to locate the bottom of the stack. + */ +static void sym_check_print_recursive(struct symbol *last_sym) +{ + struct dep_stack *stack; + struct symbol *sym, *next_sym; + struct menu *menu = NULL; + struct property *prop; + struct dep_stack cv_stack; + + if (sym_is_choice_value(last_sym)) { + dep_stack_insert(&cv_stack, last_sym); + last_sym = prop_get_symbol(sym_get_choice_prop(last_sym)); + } + + for (stack = check_top; stack != NULL; stack = stack->prev) + if (stack->sym == last_sym) + break; + if (!stack) { + fprintf(stderr, "unexpected recursive dependency error\n"); + return; + } + + for (; stack; stack = stack->next) { + sym = stack->sym; + next_sym = stack->next ? stack->next->sym : last_sym; + prop = stack->prop; + if (prop == NULL) + prop = stack->sym->prop; + + /* for choice values find the menu entry (used below) */ + if (sym_is_choice(sym) || sym_is_choice_value(sym)) { + for (prop = sym->prop; prop; prop = prop->next) { + menu = prop->menu; + if (prop->menu) + break; + } + } + if (stack->sym == last_sym) + fprintf(stderr, "%s:%d:error: recursive dependency detected!\n", + prop->file->name, prop->lineno); + + if (sym_is_choice(sym)) { + fprintf(stderr, "%s:%d:\tchoice %s contains symbol %s\n", + menu->file->name, menu->lineno, + sym->name ? sym->name : "", + next_sym->name ? next_sym->name : ""); + } else if (sym_is_choice_value(sym)) { + fprintf(stderr, "%s:%d:\tsymbol %s is part of choice %s\n", + menu->file->name, menu->lineno, + sym->name ? sym->name : "", + next_sym->name ? next_sym->name : ""); + } else if (stack->expr == &sym->dir_dep.expr) { + fprintf(stderr, "%s:%d:\tsymbol %s depends on %s\n", + prop->file->name, prop->lineno, + sym->name ? sym->name : "", + next_sym->name ? next_sym->name : ""); + } else if (stack->expr == &sym->rev_dep.expr) { + fprintf(stderr, "%s:%d:\tsymbol %s is selected by %s\n", + prop->file->name, prop->lineno, + sym->name ? sym->name : "", + next_sym->name ? next_sym->name : ""); + } else if (stack->expr == &sym->implied.expr) { + fprintf(stderr, "%s:%d:\tsymbol %s is implied by %s\n", + prop->file->name, prop->lineno, + sym->name ? sym->name : "", + next_sym->name ? next_sym->name : ""); + } else if (stack->expr) { + fprintf(stderr, "%s:%d:\tsymbol %s %s value contains %s\n", + prop->file->name, prop->lineno, + sym->name ? sym->name : "", + prop_get_type_name(prop->type), + next_sym->name ? next_sym->name : ""); + } else { + fprintf(stderr, "%s:%d:\tsymbol %s %s is visible depending on %s\n", + prop->file->name, prop->lineno, + sym->name ? sym->name : "", + prop_get_type_name(prop->type), + next_sym->name ? next_sym->name : ""); + } + } + + fprintf(stderr, + "For a resolution refer to Documentation/kbuild/kconfig-language.rst\n" + "subsection \"Kconfig recursive dependency limitations\"\n" + "\n"); + + if (check_top == &cv_stack) + dep_stack_remove(); +} + +static struct symbol *sym_check_expr_deps(struct expr *e) +{ + struct symbol *sym; + + if (!e) + return NULL; + switch (e->type) { + case E_OR: + case E_AND: + sym = sym_check_expr_deps(e->left.expr); + if (sym) + return sym; + return sym_check_expr_deps(e->right.expr); + case E_NOT: + return sym_check_expr_deps(e->left.expr); + case E_EQUAL: + case E_GEQ: + case E_GTH: + case E_LEQ: + case E_LTH: + case E_UNEQUAL: + sym = sym_check_deps(e->left.sym); + if (sym) + return sym; + return sym_check_deps(e->right.sym); + case E_SYMBOL: + return sym_check_deps(e->left.sym); + default: + break; + } + fprintf(stderr, "Oops! How to check %d?\n", e->type); + return NULL; +} + +/* return NULL when dependencies are OK */ +static struct symbol *sym_check_sym_deps(struct symbol *sym) +{ + struct symbol *sym2; + struct property *prop; + struct dep_stack stack; + + dep_stack_insert(&stack, sym); + + stack.expr = &sym->dir_dep.expr; + sym2 = sym_check_expr_deps(sym->dir_dep.expr); + if (sym2) + goto out; + + stack.expr = &sym->rev_dep.expr; + sym2 = sym_check_expr_deps(sym->rev_dep.expr); + if (sym2) + goto out; + + stack.expr = &sym->implied.expr; + sym2 = sym_check_expr_deps(sym->implied.expr); + if (sym2) + goto out; + + stack.expr = NULL; + + for (prop = sym->prop; prop; prop = prop->next) { + if (prop->type == P_CHOICE || prop->type == P_SELECT || + prop->type == P_IMPLY) + continue; + stack.prop = prop; + sym2 = sym_check_expr_deps(prop->visible.expr); + if (sym2) + break; + if (prop->type != P_DEFAULT || sym_is_choice(sym)) + continue; + stack.expr = &prop->expr; + sym2 = sym_check_expr_deps(prop->expr); + if (sym2) + break; + stack.expr = NULL; + } + +out: + dep_stack_remove(); + + return sym2; +} + +static struct symbol *sym_check_choice_deps(struct symbol *choice) +{ + struct symbol *sym, *sym2; + struct property *prop; + struct expr *e; + struct dep_stack stack; + + dep_stack_insert(&stack, choice); + + prop = sym_get_choice_prop(choice); + expr_list_for_each_sym(prop->expr, e, sym) + sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); + + choice->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); + sym2 = sym_check_sym_deps(choice); + choice->flags &= ~SYMBOL_CHECK; + if (sym2) + goto out; + + expr_list_for_each_sym(prop->expr, e, sym) { + sym2 = sym_check_sym_deps(sym); + if (sym2) + break; + } +out: + expr_list_for_each_sym(prop->expr, e, sym) + sym->flags &= ~SYMBOL_CHECK; + + if (sym2 && sym_is_choice_value(sym2) && + prop_get_symbol(sym_get_choice_prop(sym2)) == choice) + sym2 = choice; + + dep_stack_remove(); + + return sym2; +} + +struct symbol *sym_check_deps(struct symbol *sym) +{ + struct symbol *sym2; + struct property *prop; + + if (sym->flags & SYMBOL_CHECK) { + sym_check_print_recursive(sym); + return sym; + } + if (sym->flags & SYMBOL_CHECKED) + return NULL; + + if (sym_is_choice_value(sym)) { + struct dep_stack stack; + + /* for choice groups start the check with main choice symbol */ + dep_stack_insert(&stack, sym); + prop = sym_get_choice_prop(sym); + sym2 = sym_check_deps(prop_get_symbol(prop)); + dep_stack_remove(); + } else if (sym_is_choice(sym)) { + sym2 = sym_check_choice_deps(sym); + } else { + sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); + sym2 = sym_check_sym_deps(sym); + sym->flags &= ~SYMBOL_CHECK; + } + + return sym2; +} + +struct symbol *prop_get_symbol(struct property *prop) +{ + if (prop->expr && (prop->expr->type == E_SYMBOL || + prop->expr->type == E_LIST)) + return prop->expr->left.sym; + return NULL; +} + +const char *prop_get_type_name(enum prop_type type) +{ + switch (type) { + case P_PROMPT: + return "prompt"; + case P_COMMENT: + return "comment"; + case P_MENU: + return "menu"; + case P_DEFAULT: + return "default"; + case P_CHOICE: + return "choice"; + case P_SELECT: + return "select"; + case P_IMPLY: + return "imply"; + case P_RANGE: + return "range"; + case P_SYMBOL: + return "symbol"; + case P_UNKNOWN: + break; + } + return "unknown"; +} diff --git a/libraries/NEMU/tools/kconfig/util.c b/libraries/NEMU/tools/kconfig/util.c new file mode 100644 index 0000000..2958539 --- /dev/null +++ b/libraries/NEMU/tools/kconfig/util.c @@ -0,0 +1,129 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2002-2005 Roman Zippel + * Copyright (C) 2002-2005 Sam Ravnborg + */ + +#include +#include +#include +#include "lkc.h" + +/* file already present in list? If not add it */ +struct file *file_lookup(const char *name) +{ + struct file *file; + + for (file = file_list; file; file = file->next) { + if (!strcmp(name, file->name)) { + return file; + } + } + + file = xmalloc(sizeof(*file)); + memset(file, 0, sizeof(*file)); + file->name = xstrdup(name); + file->next = file_list; + file_list = file; + return file; +} + +/* Allocate initial growable string */ +struct gstr str_new(void) +{ + struct gstr gs; + gs.s = xmalloc(sizeof(char) * 64); + gs.len = 64; + gs.max_width = 0; + strcpy(gs.s, "\0"); + return gs; +} + +/* Free storage for growable string */ +void str_free(struct gstr *gs) +{ + if (gs->s) + free(gs->s); + gs->s = NULL; + gs->len = 0; +} + +/* Append to growable string */ +void str_append(struct gstr *gs, const char *s) +{ + size_t l; + if (s) { + l = strlen(gs->s) + strlen(s) + 1; + if (l > gs->len) { + gs->s = xrealloc(gs->s, l); + gs->len = l; + } + strcat(gs->s, s); + } +} + +/* Append printf formatted string to growable string */ +void str_printf(struct gstr *gs, const char *fmt, ...) +{ + va_list ap; + char s[10000]; /* big enough... */ + va_start(ap, fmt); + vsnprintf(s, sizeof(s), fmt, ap); + str_append(gs, s); + va_end(ap); +} + +/* Retrieve value of growable string */ +const char *str_get(struct gstr *gs) +{ + return gs->s; +} + +void *xmalloc(size_t size) +{ + void *p = malloc(size); + if (p) + return p; + fprintf(stderr, "Out of memory.\n"); + exit(1); +} + +void *xcalloc(size_t nmemb, size_t size) +{ + void *p = calloc(nmemb, size); + if (p) + return p; + fprintf(stderr, "Out of memory.\n"); + exit(1); +} + +void *xrealloc(void *p, size_t size) +{ + p = realloc(p, size); + if (p) + return p; + fprintf(stderr, "Out of memory.\n"); + exit(1); +} + +char *xstrdup(const char *s) +{ + char *p; + + p = strdup(s); + if (p) + return p; + fprintf(stderr, "Out of memory.\n"); + exit(1); +} + +char *xstrndup(const char *s, size_t n) +{ + char *p; + + p = strndup(s, n); + if (p) + return p; + fprintf(stderr, "Out of memory.\n"); + exit(1); +} diff --git a/libraries/NEMU/tools/kvm-diff/Makefile b/libraries/NEMU/tools/kvm-diff/Makefile new file mode 100644 index 0000000..2256fab --- /dev/null +++ b/libraries/NEMU/tools/kvm-diff/Makefile @@ -0,0 +1,9 @@ +NAME = kvm +SRCS = $(shell find src/ -name "*.c") + +SHARE = 1 +INC_DIR += $(NEMU_HOME)/include $(NEMU_HOME)/src/isa/x86/include +ISA = x86 + +include $(NEMU_HOME)/scripts/isa.mk +include $(NEMU_HOME)/scripts/build.mk diff --git a/libraries/NEMU/tools/kvm-diff/include/paddr.h b/libraries/NEMU/tools/kvm-diff/include/paddr.h new file mode 100644 index 0000000..d3dcfa7 --- /dev/null +++ b/libraries/NEMU/tools/kvm-diff/include/paddr.h @@ -0,0 +1 @@ +// this is an empty file to avoid compile error diff --git a/libraries/NEMU/tools/kvm-diff/src/kvm.c b/libraries/NEMU/tools/kvm-diff/src/kvm.c new file mode 100644 index 0000000..5b292c4 --- /dev/null +++ b/libraries/NEMU/tools/kvm-diff/src/kvm.c @@ -0,0 +1,401 @@ +// from NEMU +#include +#include + +#include + +#include +#include +#include +#include +#include + +/* CR0 bits */ +#define CR0_PE 1u +#define CR0_PG (1u << 31) + +#define RFLAGS_ID (1u << 21) +#define RFLAGS_AC (1u << 18) +#define RFLAGS_RF (1u << 16) +#define RFLAGS_TF (1u << 8) +#define RFLAGS_AF (1u << 4) +#define RFLAGS_FIX_MASK (RFLAGS_ID | RFLAGS_AC | RFLAGS_RF | RFLAGS_TF | RFLAGS_AF) + +struct vm { + int sys_fd; + int fd; + uint8_t *mem; + uint8_t *mmio; +}; + +struct vcpu { + int fd; + struct kvm_run *kvm_run; + int int_wp_state; + int has_error_code; + uint32_t entry; +}; + +enum { + STATE_IDLE, // if encounter an int instruction, then set watchpoint + STATE_INT_INSTR, // if hit the watchpoint, then delete the watchpoint + STATE_IRET_INSTR,// if hit the watchpoint, then delete the watchpoint +}; + +static struct vm vm; +static struct vcpu vcpu; + +// This should be called everytime after KVM_SET_REGS. +// It seems that KVM_SET_REGS will clean the state of single step. +static void kvm_set_step_mode(bool watch, uint32_t watch_addr) { + struct kvm_guest_debug debug = {}; + debug.control = KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_USE_HW_BP; + debug.arch.debugreg[0] = watch_addr; + debug.arch.debugreg[7] = (watch ? 0x1 : 0x0); // watch instruction fetch at `watch_addr` + if (ioctl(vcpu.fd, KVM_SET_GUEST_DEBUG, &debug) < 0) { + perror("KVM_SET_GUEST_DEBUG"); + assert(0); + } +} + +static inline void kvm_getregs(struct kvm_regs *r) { + if (ioctl(vcpu.fd, KVM_GET_REGS, r) < 0) { + perror("KVM_GET_REGS"); + assert(0); + } +} + +static void kvm_setregs(const struct kvm_regs *r) { + if (ioctl(vcpu.fd, KVM_SET_REGS, r) < 0) { + perror("KVM_SET_REGS"); + assert(0); + } + kvm_set_step_mode(false, 0); +} + +static void kvm_getsregs(struct kvm_sregs *r) { + if (ioctl(vcpu.fd, KVM_GET_SREGS, r) < 0) { + perror("KVM_GET_SREGS"); + assert(0); + } +} + +static void kvm_setsregs(const struct kvm_sregs *r) { + if (ioctl(vcpu.fd, KVM_SET_SREGS, r) < 0) { + perror("KVM_SET_SREGS"); + assert(0); + } +} + +static void* create_mem(int slot, uintptr_t base, size_t mem_size) { + void *mem = mmap(NULL, mem_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0); + if (mem == MAP_FAILED) { + perror("mmap mem"); + assert(0); + } + + madvise(mem, mem_size, MADV_MERGEABLE); + + struct kvm_userspace_memory_region memreg; + memreg.slot = slot; + memreg.flags = 0; + memreg.guest_phys_addr = base; + memreg.memory_size = mem_size; + memreg.userspace_addr = (unsigned long)mem; + if (ioctl(vm.fd, KVM_SET_USER_MEMORY_REGION, &memreg) < 0) { + perror("KVM_SET_USER_MEMORY_REGION"); + assert(0); + } + return mem; +} + +static void vm_init(size_t mem_size) { + int api_ver; + + vm.sys_fd = open("/dev/kvm", O_RDWR); + if (vm.sys_fd < 0) { + perror("open /dev/kvm"); + assert(0); + } + + api_ver = ioctl(vm.sys_fd, KVM_GET_API_VERSION, 0); + if (api_ver < 0) { + perror("KVM_GET_API_VERSION"); + assert(0); + } + + if (api_ver != KVM_API_VERSION) { + fprintf(stderr, "Got KVM api version %d, expected %d\n", + api_ver, KVM_API_VERSION); + assert(0); + } + + vm.fd = ioctl(vm.sys_fd, KVM_CREATE_VM, 0); + if (vm.fd < 0) { + perror("KVM_CREATE_VM"); + assert(0); + } + + if (ioctl(vm.fd, KVM_SET_TSS_ADDR, 0xfffbd000) < 0) { + perror("KVM_SET_TSS_ADDR"); + assert(0); + } + + vm.mem = create_mem(0, 0, mem_size); + vm.mmio = create_mem(1, 0xa1000000, 0x1000); +} + +static void vcpu_init() { + int vcpu_mmap_size; + + vcpu.fd = ioctl(vm.fd, KVM_CREATE_VCPU, 0); + if (vcpu.fd < 0) { + perror("KVM_CREATE_VCPU"); + assert(0); + } + + vcpu_mmap_size = ioctl(vm.sys_fd, KVM_GET_VCPU_MMAP_SIZE, 0); + if (vcpu_mmap_size <= 0) { + perror("KVM_GET_VCPU_MMAP_SIZE"); + assert(0); + } + + vcpu.kvm_run = mmap(NULL, vcpu_mmap_size, PROT_READ | PROT_WRITE, + MAP_SHARED, vcpu.fd, 0); + if (vcpu.kvm_run == MAP_FAILED) { + perror("mmap kvm_run"); + assert(0); + } + + vcpu.kvm_run->kvm_valid_regs = KVM_SYNC_X86_REGS | KVM_SYNC_X86_SREGS; + vcpu.int_wp_state = STATE_IDLE; +} + +static const uint8_t mbr[] = { + // start32: + 0x0f, 0x01, 0x15, 0x28, 0x7c, 0x00, 0x00, // lgdtl 0x7c28 + 0xea, 0x0e, 0x7c, 0x00, 0x00, 0x08, 0x00, // ljmp $0x8, 0x7c0e + + // here: + 0xeb, 0xfe, // jmp here + + // GDT + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, + + // GDT descriptor + 0x17, 0x00, 0x10, 0x7c, 0x00, 0x00 +}; + +static void setup_protected_mode(struct kvm_sregs *sregs) { + struct kvm_segment seg = { + .base = 0, + .limit = 0xffffffff, + .selector = 1 << 3, + .present = 1, + .type = 11, /* Code: execute, read, accessed */ + .dpl = 0, + .db = 1, + .s = 1, /* Code/data */ + .l = 0, + .g = 1, /* 4KB granularity */ + }; + + sregs->cr0 |= CR0_PE; /* enter protected mode */ + + sregs->cs = seg; + + seg.type = 3; /* Data: read/write, accessed */ + seg.selector = 2 << 3; + sregs->ds = sregs->es = sregs->fs = sregs->gs = sregs->ss = seg; +} + +static inline uint64_t va2pa(uint64_t va) { + if (vcpu.kvm_run->s.regs.sregs.cr0 & CR0_PG) { + struct kvm_translation t = { .linear_address = va }; + int ret = ioctl(vcpu.fd, KVM_TRANSLATE, &t); + assert(ret == 0); + return t.valid ? t.physical_address : -1ull; + } + return va; +} + +static inline int patching() { + // patching for special instructions + uint32_t pc = va2pa(vcpu.kvm_run->s.regs.regs.rip); + if (pc == 0xffffffff) return 0; + if (vm.mem[pc] == 0x9c) { // pushf + if (vcpu.int_wp_state == STATE_INT_INSTR) return 0; + vcpu.kvm_run->s.regs.regs.rsp -= 4; + uint32_t esp = va2pa(vcpu.kvm_run->s.regs.regs.rsp); + *(uint32_t *)(vm.mem + esp) = vcpu.kvm_run->s.regs.regs.rflags & ~RFLAGS_FIX_MASK; + vcpu.kvm_run->s.regs.regs.rflags |= RFLAGS_TF; + vcpu.kvm_run->s.regs.regs.rip ++; + vcpu.kvm_run->kvm_dirty_regs = KVM_SYNC_X86_REGS; + return 1; + } + else if (vm.mem[pc] == 0x9d) { // popf + if (vcpu.int_wp_state == STATE_INT_INSTR) return 0; + uint32_t esp = va2pa(vcpu.kvm_run->s.regs.regs.rsp); + vcpu.kvm_run->s.regs.regs.rflags = *(uint32_t *)(vm.mem + esp) | RFLAGS_TF | 2; + vcpu.kvm_run->s.regs.regs.rsp += 4; + vcpu.kvm_run->s.regs.regs.rip ++; + vcpu.kvm_run->kvm_dirty_regs = KVM_SYNC_X86_REGS; + return 1; + } + else if (vm.mem[pc] == 0xcf) { // iret + uint32_t ret_addr = va2pa(vcpu.kvm_run->s.regs.regs.rsp); + uint32_t eip = *(uint32_t *)(vm.mem + ret_addr); + vcpu.entry = eip; + kvm_set_step_mode(true, eip); + vcpu.int_wp_state = STATE_IRET_INSTR; + return 0; + } + return 0; +} + +static inline void fix_push_sreg() { + uint32_t esp = va2pa(vcpu.kvm_run->s.regs.regs.rsp); + *(uint32_t *)(vm.mem + esp) &= 0x0000ffff; +} + +static inline void patching_after(uint64_t last_pc) { + uint32_t pc = va2pa(last_pc); + if (pc == 0xffffffff) return; + uint8_t opcode = vm.mem[pc]; + if (opcode == 0x1e || opcode == 0x06) { // push %ds/%es + fix_push_sreg(); + assert(vcpu.kvm_run->s.regs.regs.rip == last_pc + 1); + } + else if (opcode == 0x0f) { + uint8_t opcode2 = vm.mem[pc + 1]; + if (opcode2 == 0xa0) { // push %fs + fix_push_sreg(); + assert(vcpu.kvm_run->s.regs.regs.rip == last_pc + 2); + } + } +} + +static void kvm_exec(uint64_t n) { + for (; n > 0; n --) { + if (patching()) continue; + + uint64_t pc = vcpu.kvm_run->s.regs.regs.rip; + if (ioctl(vcpu.fd, KVM_RUN, 0) < 0) { + if (errno == EINTR) { + n ++; + continue; + } + perror("KVM_RUN"); + assert(0); + } + + if (vcpu.kvm_run->exit_reason != KVM_EXIT_DEBUG) { + if (vcpu.kvm_run->exit_reason == KVM_EXIT_HLT) return; + fprintf(stderr, "Got exit_reason %d at pc = 0x%llx, expected KVM_EXIT_DEBUG (%d)\n", + vcpu.kvm_run->exit_reason, vcpu.kvm_run->s.regs.regs.rip, KVM_EXIT_DEBUG); + assert(0); + } else { + patching_after(pc); + if (vcpu.int_wp_state == STATE_INT_INSTR) { + uint32_t eflag_offset = 8 + (vcpu.has_error_code ? 4 : 0); + uint32_t eflag_addr = va2pa(vcpu.kvm_run->s.regs.regs.rsp + eflag_offset); + *(uint32_t *)(vm.mem + eflag_addr) &= ~RFLAGS_FIX_MASK; + + Assert(vcpu.entry == vcpu.kvm_run->debug.arch.pc, + "entry not match, right = 0x%llx, wrong = 0x%x", vcpu.kvm_run->debug.arch.pc, vcpu.entry); + kvm_set_step_mode(false, 0); + vcpu.int_wp_state = STATE_IDLE; + //Log("exception = %d, pc = %llx, dr6 = %llx, dr7 = %llx", vcpu.kvm_run->debug.arch.exception, + // vcpu.kvm_run->debug.arch.pc, vcpu.kvm_run->debug.arch.dr6, vcpu.kvm_run->debug.arch.dr7); + } else if (vcpu.int_wp_state == STATE_IRET_INSTR) { + Assert(vcpu.entry == vcpu.kvm_run->debug.arch.pc, + "entry not match, right = 0x%llx, wrong = 0x%x", vcpu.kvm_run->debug.arch.pc, vcpu.entry); + kvm_set_step_mode(false, 0); + vcpu.int_wp_state = STATE_IDLE; + } + } + } +} + +static void run_protected_mode() { + struct kvm_sregs sregs; + kvm_getsregs(&sregs); + setup_protected_mode(&sregs); + kvm_setsregs(&sregs); + + struct kvm_regs regs; + memset(®s, 0, sizeof(regs)); + regs.rflags = 2; + regs.rip = 0x7c00; + // this will also set KVM_GUESTDBG_ENABLE + kvm_setregs(®s); + + memcpy(vm.mem + 0x7c00, mbr, sizeof(mbr)); + // run enough instructions to load GDT + kvm_exec(10); +} + +void difftest_memcpy(paddr_t addr, void *buf, size_t n, bool direction) { + if (direction == DIFFTEST_TO_REF) memcpy(vm.mem + addr, buf, n); + else memcpy(buf, vm.mem + addr, n); +} + +void difftest_regcpy(void *r, bool direction) { + struct kvm_regs *ref = &(vcpu.kvm_run->s.regs.regs); + x86_CPU_state *x86 = r; + if (direction == DIFFTEST_TO_REF) { + ref->rax = x86->eax; + ref->rbx = x86->ebx; + ref->rcx = x86->ecx; + ref->rdx = x86->edx; + ref->rsp = x86->esp; + ref->rbp = x86->ebp; + ref->rsi = x86->esi; + ref->rdi = x86->edi; + ref->rip = x86->pc; + ref->rflags |= RFLAGS_TF; + vcpu.kvm_run->kvm_dirty_regs = KVM_SYNC_X86_REGS; + } else { + x86->eax = ref->rax; + x86->ebx = ref->rbx; + x86->ecx = ref->rcx; + x86->edx = ref->rdx; + x86->esp = ref->rsp; + x86->ebp = ref->rbp; + x86->esi = ref->rsi; + x86->edi = ref->rdi; + x86->pc = ref->rip; + } +} + +void difftest_exec(uint64_t n) { + kvm_exec(n); +} + +void difftest_raise_intr(word_t NO) { + uint32_t pgate_vaddr = vcpu.kvm_run->s.regs.sregs.idt.base + NO * 8; + uint32_t pgate = va2pa(pgate_vaddr); + // assume code.base = 0 + uint32_t entry = vm.mem[pgate] | (vm.mem[pgate + 1] << 8) | + (vm.mem[pgate + 6] << 16) | (vm.mem[pgate + 7] << 24); + kvm_set_step_mode(true, entry); + vcpu.int_wp_state = STATE_INT_INSTR; + vcpu.has_error_code = (NO == 14); + vcpu.entry = entry; + + if (NO == 48) { + // inject timer interrupt + struct kvm_interrupt intr = { .irq = NO }; + int ret = ioctl(vcpu.fd, KVM_INTERRUPT, &intr); + assert(ret == 0); + } +} + +void difftest_init(int port) { + vm_init(CONFIG_MSIZE); + vcpu_init(); + run_protected_mode(); +} diff --git a/libraries/NEMU/tools/qemu-dl-diff/Makefile b/libraries/NEMU/tools/qemu-dl-diff/Makefile new file mode 100644 index 0000000..aac201f --- /dev/null +++ b/libraries/NEMU/tools/qemu-dl-diff/Makefile @@ -0,0 +1,9 @@ +NAME = qemu +SRCS = $(shell find src/ -name "*.c" | grep -v "isa") +SRCS += $(shell find src/isa/$(ISA) -name "*.c") + +SHARE = 1 +CFLAGS += -DNEMU_HOME=$(NEMU_HOME) + +include $(NEMU_HOME)/scripts/isa.mk +include $(NEMU_HOME)/scripts/build.mk diff --git a/libraries/NEMU/tools/qemu-dl-diff/include/common.h b/libraries/NEMU/tools/qemu-dl-diff/include/common.h new file mode 100644 index 0000000..b4a3e89 --- /dev/null +++ b/libraries/NEMU/tools/qemu-dl-diff/include/common.h @@ -0,0 +1,14 @@ +#ifndef __COMMON_H__ +#define __COMMON_H__ + +#include +#include +#include +#include +#include +#include +#include + +typedef uint32_t paddr_t; + +#endif diff --git a/libraries/NEMU/tools/qemu-dl-diff/src/diff-test.c b/libraries/NEMU/tools/qemu-dl-diff/src/diff-test.c new file mode 100644 index 0000000..d458e28 --- /dev/null +++ b/libraries/NEMU/tools/qemu-dl-diff/src/diff-test.c @@ -0,0 +1,100 @@ +#include +#include +#include +#include + +static void (*qemu_cpu_physical_memory_rw)(long addr, uint8_t *buf, int len, int is_write) = NULL; +static int (*qemu_gdb_write_register)(void *cpu, uint8_t *buf, int reg) = NULL; +static int (*qemu_gdb_read_register)(void *cpu, uint8_t *buf, int reg) = NULL; +static int (*qemu_cpu_exec)(void *) = NULL; +static void *qemu_cpu = NULL; + +extern char *isa_qemu_argv[]; +void isa_raise_intr(uint64_t NO); +void init_isa(); +void dl_load(char *argv[]); + +void difftest_memcpy(paddr_t addr, void *buf, size_t n, bool direction) { +#ifdef __ISA_mips32__ + // It seems that qemu-system-mips treat 0x80000000 as a virtual address. + // We should do the subtraction to get the address + // which qemu-system-mips considers physical. + addr -= 0x80000000; +#endif + int is_write = direction == DIFFTEST_TO_REF ? true : false; + qemu_cpu_physical_memory_rw(addr, buf, n, is_write); +} + +void difftest_regcpy(void *dut, bool direction) { + int (*fn)(void *cpu, uint8_t *buf, int reg) = + (direction == DIFFTEST_TO_REF ? qemu_gdb_write_register : qemu_gdb_read_register); + int total_size = DIFFTEST_REG_SIZE; + int i = 0; + while (total_size > 0) { + int reg_size = fn(qemu_cpu, dut, i); + dut += reg_size; + total_size -= reg_size; + i ++; + } +} + +void difftest_raise_intr(uint64_t NO) { + isa_raise_intr(NO); +} + +#define EXCP_INTERRUPT 0x10000 +#define EXCP_HLT 0x10001 +#define EXCP_DEBUG 0x10002 +#define EXCP_ATOMIC 0x10005 +void difftest_exec(uint64_t n) { + for (; n > 0; n --) { + int ret = qemu_cpu_exec(qemu_cpu); + switch (ret) { + case EXCP_ATOMIC: + case EXCP_INTERRUPT: n ++; // fall through + case EXCP_HLT: + case EXCP_DEBUG: break; + default: assert(0); + } + } +} + +static jmp_buf jbuf = {}; + +void difftest_init(int port) { + if (setjmp(jbuf) == 0) { + // first path + dl_load(isa_qemu_argv); // never return + } +} + +void* get_loaded_addr(char *sym, int type); + +void difftest_init_late() { + qemu_cpu_physical_memory_rw = get_loaded_addr("cpu_physical_memory_rw", STT_FUNC); + qemu_gdb_write_register = get_loaded_addr("gdb_write_register", STT_FUNC); + qemu_gdb_read_register = get_loaded_addr("gdb_read_register", STT_FUNC); + qemu_cpu_exec = get_loaded_addr("cpu_exec", STT_FUNC); + + int (*qemu_cpu_single_step)(void *cpu, int enabled) = get_loaded_addr("cpu_single_step", STT_FUNC); + void (*qemu_mutex_unlock_iothread)() = get_loaded_addr("qemu_mutex_unlock_iothread", STT_FUNC); + void* (*qemu_get_cpu)(int) = get_loaded_addr("qemu_get_cpu", STT_FUNC); + int qemu_sstep_flags = *(int *)get_loaded_addr("sstep_flags", STT_OBJECT); + + qemu_cpu = qemu_get_cpu(0); + assert(qemu_cpu); + qemu_cpu_single_step(qemu_cpu, qemu_sstep_flags); + qemu_mutex_unlock_iothread(); + + init_isa(); + + longjmp(jbuf, 1); +} + +void qemu_write_reg(void *val, int idx) { + qemu_gdb_write_register(qemu_cpu, val, idx); +} + +void* qemu_get_cpu() { + return qemu_cpu; +} diff --git a/libraries/NEMU/tools/qemu-dl-diff/src/hack.c b/libraries/NEMU/tools/qemu-dl-diff/src/hack.c new file mode 100644 index 0000000..cdd1eb1 --- /dev/null +++ b/libraries/NEMU/tools/qemu-dl-diff/src/hack.c @@ -0,0 +1,311 @@ +#define _GNU_SOURCE +#include +#include +#include +#include + +#define ALIGN_UP(a, sz) ((((uintptr_t)a) + (sz) - 1) & ~((sz) - 1)) + +static char *strtab = NULL; +static int strtab_size = 0; +static Elf64_Sym *symtab = NULL; +static int symtab_nr_entry = 0; +static uintptr_t elf_base = 0; +static uintptr_t qemu_tls_size = 0; + +static void mprotect_page(uintptr_t addr, int prot) { + addr &= ~0xfffl; + int ret = mprotect((void *)addr, 4096, prot); + assert(ret == 0); +} + +typedef struct { + char *name; + uintptr_t base; + uintptr_t tls_offset_diff; + int next_tls_modid; + char *debug_elf_path; +} Info; + +typedef int (*ELF_sh_handler)(void *buf, int size, void **); +typedef struct { + char *name; + ELF_sh_handler h; + void *userdata; +} ELF_sh_callback; + +static int build_symtab(void *buf, int size, void **userdata) { + assert(size > 0); + symtab = buf; + symtab_nr_entry = size / sizeof(Elf64_Sym); + return 0; +} + +static int build_strtab(void *buf, int size, void **userdata) { + assert(size > 0); + strtab = buf; + strtab_size = size; + return 0; +} + +static void ELF_sh_foreach(char *filename, ELF_sh_callback *cb_list) { + FILE *fp = fopen(filename, "r"); + assert(fp != NULL); + + Elf64_Ehdr elf; + fread(&elf, sizeof(elf), 1, fp); + assert(elf.e_ident[EI_MAG0] == ELFMAG0); + assert(elf.e_ident[EI_MAG1] == ELFMAG1); + assert(elf.e_ident[EI_MAG2] == ELFMAG2); + assert(elf.e_ident[EI_MAG3] == ELFMAG3); + + Elf64_Shdr *sh = NULL; + int shdr_size = sizeof(*sh) * elf.e_shnum; + sh = malloc(shdr_size); + assert(sh); + fseek(fp, elf.e_shoff, SEEK_SET); + int ret = fread(sh, shdr_size, 1, fp); + assert(ret == 1); + + int shstrtab_size = sh[elf.e_shstrndx].sh_size; + assert(shstrtab_size > 0); + char *shstrtab = malloc(shstrtab_size); + assert(shstrtab); + fseek(fp, sh[elf.e_shstrndx].sh_offset, SEEK_SET); + ret = fread(shstrtab, sh[elf.e_shstrndx].sh_size, 1, fp); + assert(ret == 1); + + int i; + for (i = 0; i < elf.e_shnum; i ++) { + ELF_sh_callback *cb; + for (cb = cb_list; cb->name != NULL; cb ++) { + if (strcmp(shstrtab + sh[i].sh_name, cb->name) == 0) { + void *buf = malloc(sh[i].sh_size); + assert(buf); + fseek(fp, sh[i].sh_offset, SEEK_SET); + int ret = fread(buf, sh[i].sh_size, 1, fp); + assert(ret == 1); + int needfree = cb->h(buf, sh[i].sh_size, &cb->userdata); + if (needfree) free(buf); + } + } + } + free(shstrtab); + free(sh); + fclose(fp); +} + +static void parse_debug_elf(char *filename) { + ELF_sh_callback cb_list[3] = { + { .name = ".symtab", .h = build_symtab }, + { .name = ".strtab", .h = build_strtab }, + { .name = NULL}, + }; + ELF_sh_foreach(filename, cb_list); + assert(symtab != NULL && strtab != NULL); +} + +static int fix_tls_offset(void *buf, int size, void **userdata) { + Info *info = *userdata; + Elf64_Rela *rela_dyn = NULL; + int nr_rela_dyn = 0; + + Elf64_Dyn *dyn = buf; + int nr_dyn = size / sizeof(dyn[0]); + int i; + for (i = 0; i < nr_dyn; i ++ ) { + switch (dyn[i].d_tag) { + case DT_RELA: rela_dyn = (void *)info->base + dyn[i].d_un.d_ptr; break; + case DT_RELASZ: nr_rela_dyn = dyn[i].d_un.d_val / sizeof(rela_dyn[0]); break; + case DT_RELAENT: assert(dyn[i].d_un.d_val == sizeof(rela_dyn[0])); break; + } + } + + for (i = 0; i < nr_rela_dyn; i ++) { + if (ELF64_R_TYPE(rela_dyn[i].r_info) == R_X86_64_TPOFF64) { + uintptr_t ptr = info->base + rela_dyn[i].r_offset; + mprotect_page(ptr, PROT_READ|PROT_WRITE); + *(uintptr_t *)ptr += info->tls_offset_diff; + mprotect_page(ptr, PROT_READ); + } + } + return 1; +} + +static int get_build_id(void *buf, int size, void **userdata) { + assert(size > 0); + void *name, *desc; + Elf64_Nhdr *note = buf; + name = note->n_namesz == 0 ? NULL : buf + sizeof(*note); + assert(strcmp(name, ELF_NOTE_GNU) == 0); + assert(note->n_descsz == 160 / 8); // SHA1 is of 160-bit length + desc = note->n_descsz == 0 ? NULL : + buf + sizeof(*note) + ALIGN_UP(note->n_namesz, 4); + char *id = malloc(note->n_descsz + 1); // +1 for '\0' + memcpy(id, desc, note->n_descsz); + id[note->n_descsz] = '\0'; + *userdata = id; + return 1; +} + +static void parse_origin_elf(Info *info) { + ELF_sh_callback cb_list[3] = { + { .name = ".dynamic", fix_tls_offset }, + { .name = ".note.gnu.build-id", .h = get_build_id }, + { .name = NULL } + }; + + const char *prefix = "/usr/bin/"; + bool need_dbgsym = (strncmp(info->name, prefix, strlen(prefix)) == 0); + if (!need_dbgsym) { + cb_list[1].name = NULL; + } + + cb_list[0].userdata = info; + + ELF_sh_foreach(info->name, cb_list); + + if (!need_dbgsym) { + info->debug_elf_path = strdup(info->name); + return; + } + + uint8_t *id = cb_list[1].userdata; + char *path = malloc(512); + int len = sprintf(path, "/usr/lib/debug/.build-id/%02x/", id[0]); + int i; + for (i = 1; i < 20; i ++) { + len += sprintf(path + len, "%02x", id[i]); + } + strcat(path, ".debug"); + free(id); + info->debug_elf_path = path; +} + +static uintptr_t get_sym_addr(const char *sym, int type) { + int i; + for (i = 0; i < symtab_nr_entry; i ++) { + if ((strcmp(strtab + symtab[i].st_name, sym) == 0) && + ELF64_ST_TYPE(symtab[i].st_info) == type) { + return symtab[i].st_value; + } + } + printf("symbol not found: sym = %s\n", sym); + assert(0); +} + +void* get_loaded_addr(const char *sym, int type) { + return (void *)get_sym_addr(sym, type) + elf_base; +} + +static int callback(struct dl_phdr_info *info, size_t size, void *data) { + Info *arg = data; + int found = 0; + if (strcmp(info->dlpi_name, arg->name) == 0) { + arg->base = info->dlpi_addr; + found = 1; + } + + int i; + for (i = 0; i < info->dlpi_phnum; i ++) { + if (info->dlpi_phdr[i].p_type == PT_TLS) { + assert(info->dlpi_tls_modid == arg->next_tls_modid); + uintptr_t size = ALIGN_UP(info->dlpi_phdr[i].p_memsz, info->dlpi_phdr[i].p_align); + if (!found) { + arg->tls_offset_diff += size; + arg->next_tls_modid ++; + } else { + qemu_tls_size = size; + } + break; + } + } + return found; +} + +static inline void hack_fun_entry(const char *funname, const void *code, int len, bool protect) { + void *fun = get_loaded_addr(funname, STT_FUNC); + if (len) { + mprotect_page((uintptr_t)fun, PROT_READ | PROT_WRITE | PROT_EXEC); + memcpy(fun, code, len); + } + if (protect) mprotect_page((uintptr_t)fun, PROT_READ | PROT_EXEC); +} + +static void hack_entry() { + hack_fun_entry("main_loop_wait", NULL, 0, true); + + void *volatile **tcg_ctxs = (void *)get_loaded_addr("tcg_ctxs", STT_OBJECT); + uintptr_t tcg_ctx = get_sym_addr("tcg_ctx", STT_TLS); + void *tp; + asm volatile ("mov %%fs:0, %0" : "=r"(tp)); + void **this_tcg_ctx = tp - qemu_tls_size + tcg_ctx; + + while ((*tcg_ctxs)[0] == NULL) usleep(1); + *this_tcg_ctx = (*tcg_ctxs)[0]; + + extern void difftest_init_late(); + difftest_init_late(); +} + +static inline void hack_main_loop_wait() { + uint8_t code[] = { + 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // movabs $imm, %rax + 0xff, 0xe0, // jmp *%rax + }; + *(uintptr_t *)(code + 2) = (uintptr_t)hack_entry; + assert(sizeof(code) == 12); + hack_fun_entry("main_loop_wait", code, sizeof(code), false); +} + +static inline void hack_fun_return_void(char *funname) { + const uint8_t code[] = { 0xc3 }; // ret + assert(sizeof(code) == 1); + hack_fun_entry(funname, code, sizeof(code), true); +} + +void hack_fun_return_1(char *funname) { + const uint8_t code[] = { + 0xb8, 0x01, 0x00, 0x00, 0x00, // mov $0x1, %eax + 0xc3, // ret + }; + assert(sizeof(code) == 6); + hack_fun_entry(funname, code, sizeof(code), true); +} + +static void hack_prepare(Info *info) { + parse_origin_elf(info); + if (access(info->debug_elf_path, R_OK) != 0) { + printf("File '%s' does not exist!\n", info->debug_elf_path); + printf("Make sure you are using QEMU installed by apt-get, " + "and you have already installed the debug symbol package for qemu\n"); + assert(0); + } + + parse_debug_elf(info->debug_elf_path); + free(info->debug_elf_path); + + hack_main_loop_wait(); + hack_fun_return_1("qemu_cpu_is_self"); + hack_fun_return_void("os_setup_signal_handling"); +} + +void dl_load(char *argv[]) { + void *qemu = dlopen(argv[0], RTLD_LAZY); + assert(qemu); + int (*qemu_main)(int, char **, char **) = dlsym(qemu, "main"); + assert(qemu_main); + + Info info = { .name = argv[0], .next_tls_modid = 1, .tls_offset_diff = 0 }; + dl_iterate_phdr(callback, &info); + elf_base = info.base; + + hack_prepare(&info); + + char **p = argv; + while (*p != NULL) p ++; + int argc = p - argv; + extern char **environ; + qemu_main(argc, argv, environ); + assert(0); +} diff --git a/libraries/NEMU/tools/qemu-dl-diff/src/isa/mips32/init.c b/libraries/NEMU/tools/qemu-dl-diff/src/isa/mips32/init.c new file mode 100644 index 0000000..a9f4dcf --- /dev/null +++ b/libraries/NEMU/tools/qemu-dl-diff/src/isa/mips32/init.c @@ -0,0 +1,14 @@ +#include + +#define _str(x) # x +#define str(x) _str(x) + +char *isa_qemu_argv[] = { + "/usr/bin/qemu-system-mipsel", + "-nographic", "-S", "-serial", "none", "-monitor", "none", + "-machine", "mipssim", "-kernel", str(NEMU_HOME) "/resource/mips-elf/mips.dummy", + NULL +}; + +void init_isa() { +} diff --git a/libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv32/init.c b/libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv32/init.c new file mode 100644 index 0000000..6f9914b --- /dev/null +++ b/libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv32/init.c @@ -0,0 +1,51 @@ +#include + +void difftest_memcpy(paddr_t addr, void *buf, size_t n, bool direction); +void difftest_exec(uint64_t n); +void qemu_write_reg(void *val, int idx); + +char *isa_qemu_argv[] = { + "/usr/bin/qemu-system-riscv32", + "-nographic", "-S", "-serial", "none", "-monitor", "none", + NULL +}; + +void init_isa() { + uint32_t initcode[] = { + 0x800006b7, // lui a3,0x8000 + 0x03c68693, // addi a3,a3,0x3c # 800003c + 0x30569073, // csrw mtvec,a3 + + 0xfff00513, // li a0, -1 + 0x01f00593, // li a1, 31 + 0x3b051073, // csrw pmpaddr0, a0 + 0x3a059073, // csrw pmpcfg0, a1 + + 0x000c1637, // lui a2,0xc2 # c0001 + 0x80060613, // addi a2,a2,-2048 # c0800 + 0x30061073, // csrw mstatus,a2 + + 0x00468693, // addi a3,a3,0x10 # 8000040 + 0x34169073, // csrw mepc,a3 + + 0x30251073, // csrw medeleg, a0 + + 0x30200073, // mret + + // here: + 0x0000006f, // j here # spin + 0x0000006f, // # spin + 0x0000006f, // # spin + 0x0000006f, // # spin + }; + + // put initcode to QEMU to setup a PMP to permit access to all of memory in S mode + difftest_memcpy(0x80000000, initcode, sizeof(initcode), true); + + // set pc to 0x80000000 + uint32_t val = 0x80000000; + qemu_write_reg((void *)&val, 32); // pc + + // execute enough instructions to enter protected mode + difftest_exec(20); +} diff --git a/libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv64/init.c b/libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv64/init.c new file mode 100644 index 0000000..d962385 --- /dev/null +++ b/libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv64/init.c @@ -0,0 +1,10 @@ +#include + +char *isa_qemu_argv[] = { + "/usr/bin/qemu-system-riscv64", + "-nographic", "-S", "-serial", "none", "-monitor", "none", + NULL +}; + +void init_isa() { +} diff --git a/libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/init.c b/libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/init.c new file mode 100644 index 0000000..0d10c36 --- /dev/null +++ b/libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/init.c @@ -0,0 +1,59 @@ +#include + +void difftest_memcpy(paddr_t addr, void *buf, size_t n, bool direction); +void difftest_exec(uint64_t n); +void qemu_write_reg(void *val, int idx); +void init_intr(); + +char *isa_qemu_argv[] = { + "/usr/bin/qemu-system-i386", + "-nographic", "-S", "-serial", "none", "-monitor", "none", + "-cpu", "Broadwell", + NULL +}; + +void init_isa() { + uint8_t mbr[] = { + // start16: + 0xfa, // cli + 0x31, 0xc0, // xorw %ax,%ax + 0x8e, 0xd8, // movw %ax,%ds + 0x8e, 0xc0, // movw %ax,%es + 0x8e, 0xd0, // movw %ax,%ss + 0x0f, 0x01, 0x16, 0x44, 0x7c, // lgdt gdtdesc + 0x0f, 0x20, 0xc0, // movl %cr0,%eax + 0x66, 0x83, 0xc8, 0x01, // orl $CR0_PE,%eax + 0x0f, 0x22, 0xc0, // movl %eax,%cr0 + 0xea, 0x1d, 0x7c, 0x08, 0x00, // ljmp $GDT_ENTRY(1),$start32 + + // start32: + 0x66, 0xb8, 0x10, 0x00, // movw $0x10,%ax + 0x8e, 0xd8, // movw %ax, %ds + 0x8e, 0xc0, // movw %ax, %es + 0x8e, 0xd0, // movw %ax, %ss + 0xeb, 0xfe, // jmp 7c27 + 0x8d, 0x76, 0x00, // lea 0x0(%esi),%esi + + // GDT + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, + + // GDT descriptor + 0x17, 0x00, 0x2c, 0x7c, 0x00, 0x00 + }; + + // put the MBR code to QEMU to enable protected mode + difftest_memcpy(0x7c00, mbr, sizeof(mbr), true); + + // set cs:eip to 0000:7c00 + uint32_t val = 0; + qemu_write_reg((void *)&val, 10); // cs + val = 0x7c00; + qemu_write_reg((void *)&val, 8); // pc + + // execute enough instructions to enter protected mode + difftest_exec(20); + + init_intr(); +} diff --git a/libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/intr.c b/libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/intr.c new file mode 100644 index 0000000..40e71db --- /dev/null +++ b/libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/intr.c @@ -0,0 +1,18 @@ +#include +#include + +static void (*qemu_do_interrupt_all)(void *cpu, int intno, + int is_int, int error_code, uint32_t next_eip, int is_hw) = NULL; + +void* get_loaded_addr(char *sym, int type); +void* qemu_get_cpu(); +void hack_fun_return_1(char *funname); + +void isa_raise_intr(uint64_t NO) { + qemu_do_interrupt_all(qemu_get_cpu(), NO, 0, 0, 0, 1); +} + +void init_intr() { + qemu_do_interrupt_all = get_loaded_addr("do_interrupt_all", STT_FUNC); + hack_fun_return_1("x86_cpu_has_work"); +} diff --git a/libraries/NEMU/tools/qemu-socket-diff/Makefile b/libraries/NEMU/tools/qemu-socket-diff/Makefile new file mode 100644 index 0000000..cc64dba --- /dev/null +++ b/libraries/NEMU/tools/qemu-socket-diff/Makefile @@ -0,0 +1,9 @@ +NAME = qemu +SRCS = $(shell find src/ -name "*.c" | grep -v "isa") +SRCS += $(shell find src/isa/$(ISA) -name "*.c") + +SHARE = 1 +CFLAGS += -DNEMU_HOME=$(NEMU_HOME) -D_ISA_H_=\"isa/$(ISA).h\" + +include $(NEMU_HOME)/scripts/isa.mk +include $(NEMU_HOME)/scripts/build.mk diff --git a/libraries/NEMU/tools/qemu-socket-diff/include/common.h b/libraries/NEMU/tools/qemu-socket-diff/include/common.h new file mode 100644 index 0000000..6f6b637 --- /dev/null +++ b/libraries/NEMU/tools/qemu-socket-diff/include/common.h @@ -0,0 +1,16 @@ +#ifndef __COMMON_H__ +#define __COMMON_H__ + +#include +#include +#include +#include +#include +#include +#include + +typedef uint32_t paddr_t; + +#include "protocol.h" + +#endif diff --git a/libraries/NEMU/tools/qemu-socket-diff/include/isa/mips32.h b/libraries/NEMU/tools/qemu-socket-diff/include/isa/mips32.h new file mode 100644 index 0000000..e0271d2 --- /dev/null +++ b/libraries/NEMU/tools/qemu-socket-diff/include/isa/mips32.h @@ -0,0 +1,21 @@ +#ifndef __MIPS32_H__ +#define __MIPS32_H__ + +#define _str(x) # x +#define str(x) _str(x) + +#define ISA_QEMU_BIN "qemu-system-mipsel" +#define ISA_QEMU_ARGS "-machine", "mipssim",\ + "-kernel", str(NEMU_HOME) "/resource/mips-elf/mips.dummy", + +union isa_gdb_regs { + struct { + uint32_t gpr[32]; + uint32_t status, lo, hi, badvaddr, cause, pc; + }; + struct { + uint32_t array[77]; + }; +}; + +#endif diff --git a/libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv32.h b/libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv32.h new file mode 100644 index 0000000..46eaec1 --- /dev/null +++ b/libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv32.h @@ -0,0 +1,17 @@ +#ifndef __RISCV32_H__ +#define __RISCV32_H__ + +#define ISA_QEMU_BIN "qemu-system-riscv32" +#define ISA_QEMU_ARGS + +union isa_gdb_regs { + struct { + uint32_t gpr[32]; + uint32_t pc; + }; + struct { + uint32_t array[77]; + }; +}; + +#endif diff --git a/libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv64.h b/libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv64.h new file mode 100644 index 0000000..79c7b7b --- /dev/null +++ b/libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv64.h @@ -0,0 +1,18 @@ +#ifndef __RISCV64_H__ +#define __RISCV64_H__ + +#define ISA_QEMU_BIN "qemu-system-riscv64" +#define ISA_QEMU_ARGS + +union isa_gdb_regs { + struct { + uint64_t gpr[32]; + uint64_t fpr[32]; + uint64_t pc; + }; + struct { + uint32_t array[DIFFTEST_REG_SIZE/sizeof(uint32_t)]; + }; +}; + +#endif diff --git a/libraries/NEMU/tools/qemu-socket-diff/include/isa/x86.h b/libraries/NEMU/tools/qemu-socket-diff/include/isa/x86.h new file mode 100644 index 0000000..c1f4627 --- /dev/null +++ b/libraries/NEMU/tools/qemu-socket-diff/include/isa/x86.h @@ -0,0 +1,18 @@ +#ifndef __X86_H__ +#define __X86_H__ + +#define ISA_QEMU_BIN "qemu-system-i386" +#define ISA_QEMU_ARGS + +union isa_gdb_regs { + struct { + uint32_t eax, ecx, edx, ebx, esp, ebp, esi, edi; + uint32_t eip, eflags; + uint32_t cs, ss, ds, es, fs, gs; + }; + struct { + uint32_t array[77]; + }; +}; + +#endif diff --git a/libraries/NEMU/tools/qemu-socket-diff/include/protocol.h b/libraries/NEMU/tools/qemu-socket-diff/include/protocol.h new file mode 100644 index 0000000..ec98ed3 --- /dev/null +++ b/libraries/NEMU/tools/qemu-socket-diff/include/protocol.h @@ -0,0 +1,38 @@ +/* Simple interface of a GDB remote protocol client. + * Copyright (C) 2015 Red Hat Inc. + * + * This file is part of gdb-toys. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#include +#include _ISA_H_ + +struct gdb_conn; + +uint16_t gdb_decode_hex(uint8_t msb, uint8_t lsb); +uint64_t gdb_decode_hex_str(uint8_t *bytes); + +uint8_t hex_encode(uint8_t digit); + +struct gdb_conn *gdb_begin_inet(const char *addr, uint16_t port); + +void gdb_end(struct gdb_conn *conn); + +void gdb_send(struct gdb_conn *conn, const uint8_t *command, size_t size); + +uint8_t *gdb_recv(struct gdb_conn *conn, size_t *size); + +const char * gdb_start_noack(struct gdb_conn *conn); diff --git a/libraries/NEMU/tools/qemu-socket-diff/src/diff-test.c b/libraries/NEMU/tools/qemu-socket-diff/src/diff-test.c new file mode 100644 index 0000000..87d239f --- /dev/null +++ b/libraries/NEMU/tools/qemu-socket-diff/src/diff-test.c @@ -0,0 +1,84 @@ +#include "common.h" +#include +#include +#include +#include _ISA_H_ + +bool gdb_connect_qemu(int); +bool gdb_memcpy_to_qemu(uint32_t, void *, int); +bool gdb_getregs(union isa_gdb_regs *); +bool gdb_setregs(union isa_gdb_regs *); +bool gdb_si(); +void gdb_exit(); + +void init_isa(); + +void difftest_memcpy(paddr_t addr, void *buf, size_t n, bool direction) { + assert(direction == DIFFTEST_TO_REF); + if (direction == DIFFTEST_TO_REF) { + bool ok = gdb_memcpy_to_qemu(addr, buf, n); + assert(ok == 1); + } +} + +void difftest_regcpy(void *dut, bool direction) { + union isa_gdb_regs qemu_r; + gdb_getregs(&qemu_r); + if (direction == DIFFTEST_TO_REF) { + memcpy(&qemu_r, dut, DIFFTEST_REG_SIZE); + gdb_setregs(&qemu_r); + } else { + memcpy(dut, &qemu_r, DIFFTEST_REG_SIZE); + } +} + +void difftest_exec(uint64_t n) { + while (n --) gdb_si(); +} + +void difftest_init(int port) { + char buf[32]; + sprintf(buf, "tcp::%d", port); + + int ppid_before_fork = getpid(); + int pid = fork(); + if (pid == -1) { + perror("fork"); + assert(0); + } + else if (pid == 0) { + // child + + // install a parent death signal in the chlid + int r = prctl(PR_SET_PDEATHSIG, SIGTERM); + if (r == -1) { + perror("prctl error"); + assert(0); + } + + if (getppid() != ppid_before_fork) { + printf("parent has died!\n"); + assert(0); + } + + close(STDIN_FILENO); + execlp(ISA_QEMU_BIN, ISA_QEMU_BIN, ISA_QEMU_ARGS "-S", "-gdb", buf, "-nographic", NULL); + perror("exec"); + assert(0); + } + else { + // father + + gdb_connect_qemu(port); + printf("Connect to QEMU with %s tcpsuccessfully\n", buf); + + atexit(gdb_exit); + + init_isa(); + } +} + +void difftest_raise_intr(uint64_t NO) { + printf("raise_intr is not supported in QEMU-socket\n"); + assert(0); +} diff --git a/libraries/NEMU/tools/qemu-socket-diff/src/gdb-host.c b/libraries/NEMU/tools/qemu-socket-diff/src/gdb-host.c new file mode 100644 index 0000000..624c199 --- /dev/null +++ b/libraries/NEMU/tools/qemu-socket-diff/src/gdb-host.c @@ -0,0 +1,103 @@ +#include "common.h" + +static struct gdb_conn *conn; + +bool gdb_connect_qemu(int port) { + // connect to gdbserver on localhost port 1234 + while ((conn = gdb_begin_inet("127.0.0.1", port)) == NULL) { + usleep(1); + } + + return true; +} + +static bool gdb_memcpy_to_qemu_small(uint32_t dest, void *src, int len) { + char *buf = malloc(len * 2 + 128); + assert(buf != NULL); + int p = sprintf(buf, "M0x%x,%x:", dest, len); + int i; + for (i = 0; i < len; i ++) { + p += sprintf(buf + p, "%c%c", hex_encode(((uint8_t *)src)[i] >> 4), hex_encode(((uint8_t *)src)[i] & 0xf)); + } + + gdb_send(conn, (const uint8_t *)buf, strlen(buf)); + free(buf); + + size_t size; + uint8_t *reply = gdb_recv(conn, &size); + bool ok = !strcmp((const char*)reply, "OK"); + free(reply); + + return ok; +} + +bool gdb_memcpy_to_qemu(uint32_t dest, void *src, int len) { + const int mtu = 1500; + bool ok = true; + while (len > mtu) { + ok &= gdb_memcpy_to_qemu_small(dest, src, mtu); + dest += mtu; + src += mtu; + len -= mtu; + } + ok &= gdb_memcpy_to_qemu_small(dest, src, len); + return ok; +} + +bool gdb_getregs(union isa_gdb_regs *r) { + gdb_send(conn, (const uint8_t *)"g", 1); + size_t size; + uint8_t *reply = gdb_recv(conn, &size); + + int i; + uint8_t *p = reply; + uint8_t c; + for (i = 0; i < sizeof(union isa_gdb_regs) / sizeof(uint32_t); i ++) { + c = p[8]; + p[8] = '\0'; + r->array[i] = gdb_decode_hex_str(p); + p[8] = c; + p += 8; + } + + free(reply); + + return true; +} + +bool gdb_setregs(union isa_gdb_regs *r) { + int len = sizeof(union isa_gdb_regs); + char *buf = malloc(len * 2 + 128); + assert(buf != NULL); + buf[0] = 'G'; + + void *src = r; + int p = 1; + int i; + for (i = 0; i < len; i ++) { + p += sprintf(buf + p, "%c%c", hex_encode(((uint8_t *)src)[i] >> 4), hex_encode(((uint8_t *)src)[i] & 0xf)); + } + + gdb_send(conn, (const uint8_t *)buf, strlen(buf)); + free(buf); + + size_t size; + uint8_t *reply = gdb_recv(conn, &size); + bool ok = !strcmp((const char*)reply, "OK"); + free(reply); + + return ok; +} + +bool gdb_si() { + char buf[] = "vCont;s:1"; + gdb_send(conn, (const uint8_t *)buf, strlen(buf)); + size_t size; + uint8_t *reply = gdb_recv(conn, &size); + free(reply); + return true; +} + +void gdb_exit() { + gdb_end(conn); +} diff --git a/libraries/NEMU/tools/qemu-socket-diff/src/isa/mips32/init.c b/libraries/NEMU/tools/qemu-socket-diff/src/isa/mips32/init.c new file mode 100644 index 0000000..b051e60 --- /dev/null +++ b/libraries/NEMU/tools/qemu-socket-diff/src/isa/mips32/init.c @@ -0,0 +1,2 @@ +void init_isa() { +} diff --git a/libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv32/init.c b/libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv32/init.c new file mode 100644 index 0000000..4784d57 --- /dev/null +++ b/libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv32/init.c @@ -0,0 +1,51 @@ +#include "common.h" + +bool gdb_memcpy_to_qemu(uint32_t, void *, int); +bool gdb_getregs(union isa_gdb_regs *); +bool gdb_setregs(union isa_gdb_regs *); +void difftest_exec(uint64_t n); + +static uint32_t initcode[] = { + 0x800006b7, // lui a3,0x8000 + 0x03c68693, // addi a3,a3,0x3c # 800003c + 0x30569073, // csrw mtvec,a3 + + 0xfff00513, // li a0, -1 + 0x01f00593, // li a1, 31 + 0x3b051073, // csrw pmpaddr0, a0 + 0x3a059073, // csrw pmpcfg0, a1 + + 0x000c1637, // lui a2,0xc2 # c0001 + 0x80060613, // addi a2,a2,-2048 # c0800 + 0x30061073, // csrw mstatus,a2 + + 0x00468693, // addi a3,a3,0x10 # 8000040 + 0x34169073, // csrw mepc,a3 + + 0x30251073, // csrw medeleg, a0 + + 0x30200073, // mret + +// here: + 0x0000006f, // j here # spin + 0x0000006f, // # spin + 0x0000006f, // # spin + 0x0000006f, // # spin +}; + + +void init_isa() { + // put initcode to QEMU to setup a PMP to permit access to all of memory in S mode + bool ok = gdb_memcpy_to_qemu(0x80000000, initcode, sizeof(initcode)); + assert(ok == 1); + + union isa_gdb_regs r; + gdb_getregs(&r); + + r.pc = 0x80000000; + ok = gdb_setregs(&r); + assert(ok == 1); + + // execute enough instructions + difftest_exec(20); +} diff --git a/libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv64/init.c b/libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv64/init.c new file mode 100644 index 0000000..b051e60 --- /dev/null +++ b/libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv64/init.c @@ -0,0 +1,2 @@ +void init_isa() { +} diff --git a/libraries/NEMU/tools/qemu-socket-diff/src/isa/x86/init.c b/libraries/NEMU/tools/qemu-socket-diff/src/isa/x86/init.c new file mode 100644 index 0000000..f6f98d2 --- /dev/null +++ b/libraries/NEMU/tools/qemu-socket-diff/src/isa/x86/init.c @@ -0,0 +1,54 @@ +#include "common.h" + +bool gdb_memcpy_to_qemu(uint32_t, void *, int); +bool gdb_getregs(union isa_gdb_regs *); +bool gdb_setregs(union isa_gdb_regs *); +void difftest_exec(uint64_t n); + +static uint8_t mbr[] = { + // start16: + 0xfa, // cli + 0x31, 0xc0, // xorw %ax,%ax + 0x8e, 0xd8, // movw %ax,%ds + 0x8e, 0xc0, // movw %ax,%es + 0x8e, 0xd0, // movw %ax,%ss + 0x0f, 0x01, 0x16, 0x44, 0x7c, // lgdt gdtdesc + 0x0f, 0x20, 0xc0, // movl %cr0,%eax + 0x66, 0x83, 0xc8, 0x01, // orl $CR0_PE,%eax + 0x0f, 0x22, 0xc0, // movl %eax,%cr0 + 0xea, 0x1d, 0x7c, 0x08, 0x00, // ljmp $GDT_ENTRY(1),$start32 + + // start32: + 0x66, 0xb8, 0x10, 0x00, // movw $0x10,%ax + 0x8e, 0xd8, // movw %ax, %ds + 0x8e, 0xc0, // movw %ax, %es + 0x8e, 0xd0, // movw %ax, %ss + 0xeb, 0xfe, // jmp 7c27 + 0x8d, 0x76, 0x00, // lea 0x0(%esi),%esi + + // GDT + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, + + // GDT descriptor + 0x17, 0x00, 0x2c, 0x7c, 0x00, 0x00 +}; + +void init_isa() { + // put the MBR code to QEMU to enable protected mode + bool ok = gdb_memcpy_to_qemu(0x7c00, mbr, sizeof(mbr)); + assert(ok == 1); + + union isa_gdb_regs r; + gdb_getregs(&r); + + // set cs:eip to 0000:7c00 + r.eip = 0x7c00; + r.cs = 0x0000; + ok = gdb_setregs(&r); + assert(ok == 1); + + // execute enough instructions to enter protected mode + difftest_exec(20); +} diff --git a/libraries/NEMU/tools/qemu-socket-diff/src/protocol.c b/libraries/NEMU/tools/qemu-socket-diff/src/protocol.c new file mode 100644 index 0000000..9b42e14 --- /dev/null +++ b/libraries/NEMU/tools/qemu-socket-diff/src/protocol.c @@ -0,0 +1,306 @@ +/* Simple implementation of a GDB remote protocol client. + * Copyright (C) 2015 Red Hat Inc. + * + * This file is part of gdb-toys. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#include "common.h" +#include +#include +#include + +#include + +#include +#include + +#include +#include + +struct gdb_conn { + FILE *in; + FILE *out; + bool ack; +}; + + +static uint8_t +hex_nibble(uint8_t hex) { + return isdigit(hex) ? hex - '0' : tolower(hex) - 'a' + 10; +} + +uint8_t hex_encode(uint8_t digit) { + return digit > 9 ? 'a' + digit - 10 : '0' + digit; +} + +uint16_t gdb_decode_hex(uint8_t msb, uint8_t lsb) { + if (!isxdigit(msb) || !isxdigit(lsb)) + return UINT16_MAX; + return 16 * hex_nibble(msb) + hex_nibble(lsb); +} + +uint64_t gdb_decode_hex_str(uint8_t *bytes) { + uint64_t value = 0; + uint64_t weight = 1; + while (isxdigit(bytes[0]) && isxdigit(bytes[1])) { + value += weight * gdb_decode_hex(bytes[0], bytes[1]); + bytes += 2; + weight *= 16 * 16; + } + return value; +} + + +static struct gdb_conn* gdb_begin(int fd) { + struct gdb_conn *conn = calloc(1, sizeof(struct gdb_conn *)); + if (conn == NULL) + err(1, "calloc"); + + conn->ack = true; + + // duplicate the handle to separate read/write state + int fd2 = dup(fd); + if (fd2 < 0) + err(1, "dup"); + + // open a FILE* for reading + conn->in = fdopen(fd, "rb"); + if (conn->in == NULL) + err(1, "fdopen"); + + // open a FILE* for writing + conn->out = fdopen(fd2, "wb"); + if (conn->out == NULL) + err(1, "fdopen"); + + // reset line state by acking any earlier input + fputc('+', conn->out); + fflush(conn->out); + + return conn; +} + +struct gdb_conn* gdb_begin_inet(const char *addr, uint16_t port) { + // fill the socket information + struct sockaddr_in sa = { + .sin_family = AF_INET, + .sin_port = htons(port), + }; + if (inet_aton(addr, &sa.sin_addr) == 0) + errx(1, "Invalid address: %s", addr); + + // open the socket and start the tcp connection + int fd = socket(AF_INET, SOCK_STREAM, 0); + if (fd < 0) + err(1, "socket"); + if (connect(fd, (const struct sockaddr *)&sa, sizeof(sa)) != 0) { + close(fd); + return NULL; + } + + socklen_t tmp; + tmp = 1; + int r = setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (char *)&tmp, sizeof(tmp)); + if (r) { + perror("setsockopt"); + assert(0); + } + tmp = 1; + r = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&tmp, sizeof(tmp)); + if (r) { + perror("setsockopt"); + assert(0); + } + + // initialize the rest of gdb on this handle + return gdb_begin(fd); +} + + +void gdb_end(struct gdb_conn *conn) { + fclose(conn->in); + fclose(conn->out); + free(conn); +} + +static void send_packet(FILE *out, const uint8_t *command, size_t size) { + // compute the checksum -- simple mod256 addition + uint8_t sum = 0; + size_t i; + for (i = 0; i < size; ++i) + sum += command[i]; + + // NB: seems neither escaping nor RLE is generally expected by + // gdbserver. e.g. giving "invalid hex digit" on an RLE'd address. + // So just write raw here, and maybe let higher levels escape/RLE. + + fputc('$', out); // packet start + fwrite(command, 1, size, out); // payload + fprintf(out, "#%02X", sum); // packet end, checksum + fflush(out); + + if (ferror(out)) + err(1, "send"); + else if (feof(out)) + errx(0, "send: Connection closed"); +} + +void gdb_send(struct gdb_conn *conn, const uint8_t *command, size_t size) { + bool acked = false; + do { + send_packet(conn->out, command, size); + + if (!conn->ack) + break; + + // look for '+' ACK or '-' NACK/resend + acked = fgetc(conn->in) == '+'; + } while (!acked); +} + +static uint8_t* recv_packet(FILE *in, size_t *ret_size, bool* ret_sum_ok) { + size_t i = 0; + size_t size = 4096; + uint8_t *reply = malloc(size); + if (reply == NULL) + err(1, "malloc"); + + int c; + uint8_t sum = 0; + bool escape = false; + + // fast-forward to the first start of packet + while ((c = fgetc(in)) != EOF && c != '$'); + + while ((c = fgetc(in)) != EOF) { + sum += c; + switch (c) { + case '$': // new packet? start over... + i = 0; + sum = 0; + escape = false; + continue; + + case '#': // end of packet + sum -= c; // not part of the checksum + { + uint8_t msb = fgetc(in); + uint8_t lsb = fgetc(in); + *ret_sum_ok = sum == gdb_decode_hex(msb, lsb); + } + *ret_size = i; + + // terminate it for good measure + if (i == size) { + reply = realloc(reply, size + 1); + if (reply == NULL) + err(1, "realloc"); + } + reply[i] = '\0'; + + return reply; + + case '}': // escape: next char is XOR 0x20 + escape = true; + continue; + + case '*': // run-length-encoding + // The next character tells how many times to repeat the last + // character we saw. The count is added to 29, so that the + // minimum-beneficial RLE 3 is the first printable character ' '. + // The count character can't be >126 or '$'/'#' packet markers. + + if (i > 0) { // need something to repeat! + int c2 = fgetc(in); + if (c2 < 29 || c2 > 126 || c2 == '$' || c2 == '#') { + // invalid count character! + ungetc(c2, in); + } else { + int count = c2 - 29; + + // get a bigger buffer if needed + if (i + count > size) { + size *= 2; + reply = realloc(reply, size); + if (reply == NULL) + err(1, "realloc"); + } + + // fill the repeated character + memset(&reply[i], reply[i - 1], count); + i += count; + sum += c2; + continue; + } + } + } + + // XOR an escaped character + if (escape) { + c ^= 0x20; + escape = false; + } + + // get a bigger buffer if needed + if (i == size) { + size *= 2; + reply = realloc(reply, size); + if (reply == NULL) + err(1, "realloc"); + } + + // add one character + reply[i++] = c; + } + + if (ferror(in)) + err(1, "recv"); + else if (feof(in)) + errx(0, "recv: Connection closed"); + else + errx(1, "recv: Unknown connection error"); +} + +uint8_t* gdb_recv(struct gdb_conn *conn, size_t *size) { + uint8_t *reply; + bool acked = false; + do { + reply = recv_packet(conn->in, size, &acked); + + if (!conn->ack) + break; + + // send +/- depending on checksum result, retry if needed + fputc(acked ? '+' : '-', conn->out); + fflush(conn->out); + } while (!acked); + + return reply; +} + +const char* gdb_start_noack(struct gdb_conn *conn) { + static const char cmd[] = "QStartNoAckMode"; + gdb_send(conn, (const uint8_t *)cmd, sizeof(cmd) - 1); + + size_t size; + uint8_t *reply = gdb_recv(conn, &size); + bool ok = size == 2 && !strcmp((const char*)reply, "OK"); + free(reply); + + if (ok) + conn->ack = false; + return ok ? "OK" : ""; +} diff --git a/libraries/difftest/.gitignore b/libraries/difftest/.gitignore new file mode 100644 index 0000000..31099c9 --- /dev/null +++ b/libraries/difftest/.gitignore @@ -0,0 +1,364 @@ +### Project Specific stuff +test_run_dir/* +### XilinxISE template +# intermediate build files +*.bgn +*.bit +*.bld +*.cmd_log +*.drc +*.ll +*.lso +*.msd +*.msk +*.ncd +*.ngc +*.ngd +*.ngr +*.pad +*.par +*.pcf +*.prj +*.ptwx +*.rbb +*.rbd +*.stx +*.syr +*.twr +*.twx +*.unroutes +*.ut +*.xpi +*.xst +*_bitgen.xwbt +*_envsettings.html +*_map.map +*_map.mrp +*_map.ngm +*_map.xrpt +*_ngdbuild.xrpt +*_pad.csv +*_pad.txt +*_par.xrpt +*_summary.html +*_summary.xml +*_usage.xml +*_xst.xrpt + +# project-wide generated files +*.gise +par_usage_statistics.html +usage_statistics_webtalk.html +webtalk.log +webtalk_pn.xml + +# generated folders +iseconfig/ +xlnx_auto_0_xdb/ +xst/ +_ngo/ +_xmsgs/ +### Eclipse template +*.pydevproject +.metadata +.gradle +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath + +# Eclipse Core +.project + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# JDT-specific (Eclipse Java Development Tools) +.classpath + +# Java annotation processor (APT) +.factorypath + +# PDT-specific +.buildpath + +# sbteclipse plugin +.target + +# TeXlipse plugin +.texlipse +### C template +# Object files +*.o +*.ko +*.obj +*.elf + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +### SBT template +# Simple Build Tool +# http://www.scala-sbt.org/release/docs/Getting-Started/Directories.html#configuring-version-control + +target/ +lib_managed/ +src_managed/ +project/boot/ +.history +.cache +### Emacs template +# -*- mode: gitignore; -*- +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +### Vim template +[._]*.s[a-w][a-z] +[._]s[a-w][a-z] +*.un~ +Session.vim +.netrwhist +*~ +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio + +*.iml + +## Directory-based project format: +.idea/ +# if you remove the above rule, at least ignore the following: + +# User-specific stuff: +# .idea/workspace.xml +# .idea/tasks.xml +# .idea/dictionaries + +# Sensitive or high-churn files: +# .idea/dataSources.ids +# .idea/dataSources.xml +# .idea/sqlDataSources.xml +# .idea/dynamic.xml +# .idea/uiDesigner.xml + +# Gradle: +# .idea/gradle.xml +# .idea/libraries + +# Mongo Explorer plugin: +# .idea/mongoSettings.xml + +## File-based project format: +*.ipr +*.iws + +## Plugin-specific files: + +# IntelliJ +/out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +### C++ template +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app +### OSX template +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk +### Xcode template +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## Build generated +build/ +DerivedData + +## Various settings +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata + +## Other +*.xccheckout +*.moved-aside +*.xcuserstate +### Scala template +*.class +*.log + +# sbt specific +.cache +.history +.lib/ +dist/* +target/ +lib_managed/ +src_managed/ +project/boot/ +project/plugins/project/ + +# Scala-IDE specific +.scala_dependencies +.worksheet +### Java template +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +# vscode environment +.vscode +.metals +.bloop +.bsp +.coursier +mill.rdiB + +stale_outputs_checked + +*.snapshot +__pycache__ +overnight.sh + +# VCS files +simv +simv.daidir +ucli.key +stack.info* +*.vpd +*.bin + +!ready-to-run/* + diff --git a/libraries/difftest/LICENSE b/libraries/difftest/LICENSE new file mode 100644 index 0000000..f167963 --- /dev/null +++ b/libraries/difftest/LICENSE @@ -0,0 +1,127 @@ + 木兰宽松许可证, 第2版 + + 木兰宽松许可证, 第2版 + 2020年1月 http://license.coscl.org.cn/MulanPSL2 + + + 您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第2版(“本许可证”)的如下条款的约束: + + 0. 定义 + + “软件”是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。 + + “贡献”是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。 + + “贡献者”是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。 + + “法人实体”是指提交贡献的机构及其“关联实体”。 + + “关联实体”是指,对“本许可证”下的行为方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。 + + 1. 授予版权许可 + + 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。 + + 2. 授予专利许可 + + 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括对“贡献”的修改或包含“贡献”的其他结合。如果您或您的“关联实体”直接或间接地,就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。 + + 3. 无商标许可 + + “本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。 + + 4. 分发限制 + + 您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。 + + 5. 免责声明与责任限制 + + “软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。 + + 6. 语言 + “本许可证”以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲突不一致,以中文版为准。 + + 条款结束 + + 如何将木兰宽松许可证,第2版,应用到您的软件 + + 如果您希望将木兰宽松许可证,第2版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步: + + 1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字; + + 2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中; + + 3, 请将如下声明文本放入每个源文件的头部注释中。 + + Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences + XiangShan is licensed under Mulan PSL v2. + You can use this software according to the terms and conditions of the Mulan PSL v2. + You may obtain a copy of Mulan PSL v2 at: + http://license.coscl.org.cn/MulanPSL2 + THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + See the Mulan PSL v2 for more details. + + + Mulan Permissive Software License,Version 2 + + Mulan Permissive Software License,Version 2 (Mulan PSL v2) + January 2020 http://license.coscl.org.cn/MulanPSL2 + + Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v2 (this License) with the following terms and conditions: + + 0. Definition + + Software means the program and related documents which are licensed under this License and comprise all Contribution(s). + + Contribution means the copyrightable work licensed by a particular Contributor under this License. + + Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License. + + Legal Entity means the entity making a Contribution and all its Affiliates. + + Affiliates means entities that control, are controlled by, or are under common control with the acting entity under this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity. + + 1. Grant of Copyright License + + Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not. + + 2. Grant of Patent License + + Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution, where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed. The patent license shall not apply to any modification of the Contribution, and any other combination which includes the Contribution. If you or your Affiliates directly or indirectly institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken. + + 3. No Trademark License + + No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in Section 4. + + 4. Distribution Restriction + + You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software. + + 5. Disclaimer of Warranty and Limitation of Liability + + THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER HOW IT’S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + 6. Language + + THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH VERSIONS, THE CHINESE VERSION SHALL PREVAIL. + + END OF THE TERMS AND CONDITIONS + + How to Apply the Mulan Permissive Software License,Version 2 (Mulan PSL v2) to Your Software + + To apply the Mulan PSL v2 to your work, for easy identification by recipients, you are suggested to complete following three steps: + + i Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner; + + ii Create a file named “LICENSE” which contains the whole context of this License in the first directory of your software package; + + iii Attach the statement to the appropriate annotated syntax at the beginning of each source file. + + + Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences + XiangShan is licensed under Mulan PSL v2. + You can use this software according to the terms and conditions of the Mulan PSL v2. + You may obtain a copy of Mulan PSL v2 at: + http://license.coscl.org.cn/MulanPSL2 + THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + See the Mulan PSL v2 for more details. \ No newline at end of file diff --git a/libraries/difftest/Makefile b/libraries/difftest/Makefile new file mode 100644 index 0000000..1d0feaf --- /dev/null +++ b/libraries/difftest/Makefile @@ -0,0 +1,76 @@ +#*************************************************************************************** +# Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +# Copyright (c) 2020-2021 Peng Cheng Laboratory +# +# XiangShan is licensed under Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +# +# See the Mulan PSL v2 for more details. +#*************************************************************************************** + +SIM_TOP ?= SimTop +DESIGN_DIR ?= .. +NUM_CORES ?= 1 + +BUILD_DIR = $(DESIGN_DIR)/build +SIM_TOP_V = $(BUILD_DIR)/$(SIM_TOP).v + +DIFF_SCALA_FILE = $(shell find ./src/main/scala -name '*.scala') +SCALA_FILE = $(shell find $(DESIGN_DIR)/src/main/scala -name '*.scala') + +# generate SimTop.v +$(SIM_TOP_V): $(DIFF_SCALA_FILE) $(SCALA_FILE) + $(MAKE) -C $(DESIGN_DIR) sim-verilog + +# co-simulation with DRAMsim3 +ifeq ($(WITH_DRAMSIM3),1) +ifndef DRAMSIM3_HOME +$(error DRAMSIM3_HOME is not set) +endif +override SIM_ARGS += --with-dramsim3 +endif + +TIMELOG = $(BUILD_DIR)/time.log +TIME_CMD = time -a -o $(TIMELOG) + +# remote machine with more cores to speedup c++ build +REMOTE ?= localhost +.DEFAULT_GOAL = emu + +sim-verilog: $(SIM_TOP_V) + +SIM_CSRC_DIR = $(abspath ./src/test/csrc/common) +SIM_CXXFILES = $(shell find $(SIM_CSRC_DIR) -name "*.cpp") + +DIFFTEST_CSRC_DIR = $(abspath ./src/test/csrc/difftest) +DIFFTEST_CXXFILES = $(shell find $(DIFFTEST_CSRC_DIR) -name "*.cpp") + +SIM_VSRC = $(shell find ./src/test/vsrc/common -name "*.v" -or -name "*.sv") + +include verilator.mk +include vcs.mk + +ifndef NEMU_HOME +$(error NEMU_HOME is not set) +endif +REF_SO := $(NEMU_HOME)/build/riscv64-nemu-interpreter-so +$(REF_SO): + $(MAKE) -C $(NEMU_HOME) defconfig riscv64-xs-ref_defconfig + $(MAKE) -C $(NEMU_HOME) + +SEED ?= $(shell shuf -i 1-10000 -n 1) + +release-lock: + ssh -tt $(REMOTE) 'rm -f $(LOCK)' + +clean: vcs-clean + rm -rf $(BUILD_DIR) + +.PHONY: sim-verilog emu clean$(REF_SO) + diff --git a/libraries/difftest/README.md b/libraries/difftest/README.md new file mode 100644 index 0000000..c52946e --- /dev/null +++ b/libraries/difftest/README.md @@ -0,0 +1,55 @@ +Difftest Submodule +=================== + +Difftest (差分测试) co-sim framework + +# Usage + +1. Init this submodule in your design, add it to dependency list. +2. Add difftest to your design. +3. Generate verilog files for simulation. +4. Assign `SIM_TOP`, `DESIGN_DIR` for `difftest/Makefile` +5. `cd difftest` and `make emu`, then start simulating & debugging! + +To use difftest in XiangShan project: +```sh +cd XiangShan +make init +# cd difftest +make emu +``` + +# API + +Difftest functions: + +* DifftestArchEvent (essential) +* DifftestInstrCommit (essential) +* DifftestTrapEvent (essential) +* DifftestCSRState (essential) +* DifftestArchIntRegState (essential) +* DifftestArchFpRegState +* DifftestSbufferEvent +* DifftestStoreEvent +* DifftestLoadEvent +* DifftestAtomicEvent +* DifftestPtwEvent + +Simulation top: + +* LogCtrlIO +* PerfInfoIO +* UARTIO + +Simulation memory: + +* RAMHelper (essential) + +To use `difftest`, include all these modules / simtopIO in your design. + +# Further reference + +* [Difftest: detailed usage (Chinese)](./doc/usage.md) +* [Example: difftest in XiangShan project (Chinese) ](./doc/example-xiangshan.md) +* [Example: difftest in NutShell project (Chinese) ](./doc/example-nutshell.md) +* [SMP-Difftest 支持多处理器的差分测试方法](https://github.com/OpenXiangShan/XiangShan-doc/blob/main/slides/20210624-RVWC-SMP-Difftest%20%E6%94%AF%E6%8C%81%E5%A4%9A%E5%A4%84%E7%90%86%E5%99%A8%E7%9A%84%E5%B7%AE%E5%88%86%E6%B5%8B%E8%AF%95%E6%96%B9%E6%B3%95.pdf) \ No newline at end of file diff --git a/libraries/difftest/scripts/utils/lock-emu.c b/libraries/difftest/scripts/utils/lock-emu.c new file mode 100644 index 0000000..41831ca --- /dev/null +++ b/libraries/difftest/scripts/utils/lock-emu.c @@ -0,0 +1,59 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#include +#include +#include +#include +#include +#include + +#define BUF_SIZE 32 + +int tryLock(char * file){ + return open(file, O_CREAT | O_EXCL | O_WRONLY, 0666); +} + +int main(int argc, char* argv[]){ + int fd; + char user[BUF_SIZE]; + if(argc < 2){ + printf("arguments are not right!\n"); + exit(-1); + } + + do{ + fd = tryLock(argv[1]); + if(fd > 0){ + getlogin_r(user, BUF_SIZE); + int len = strlen(user); + user[len] = '\0'; + write(fd, user, len+1); + break; + } else { + // someone is holding the lock... + fd = open(argv[1], O_RDONLY); + if(fd > 0){ + read(fd, user, BUF_SIZE); + printf("%s is holding the lock, waiting ...\n", user); + } + } + sleep(10); + } while(1); + + return 0; +} + diff --git a/libraries/difftest/src/test/csrc/common/axi4.cpp b/libraries/difftest/src/test/csrc/common/axi4.cpp new file mode 100644 index 0000000..800ab63 --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/axi4.cpp @@ -0,0 +1,125 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#include +#include +#include +#include "axi4.h" + + +// ar channel: (1) read raddr; (2) try to accept the address; (3) check raddr fire +bool axi_get_raddr(const axi_channel &axi, axi_addr_t &addr) { + if (axi.ar.valid) { + addr = axi.ar.addr; + return true; + } + return false; +} + +void axi_accept_raddr(axi_channel &axi) { + axi.ar.ready = 1; +} + +bool axi_check_raddr_fire(const axi_channel &axi) { + if (axi.ar.valid && axi.ar.ready) { +#ifdef DEBUG_LOG_AXI4 + printf("axi ar channel fired addr = 0x%lx, id = %d\n", axi.ar.addr, axi.ar.id); +#endif + return true; + } + return false; +} + + +// r channel: (1) put rdata; (2) check rdata fire +void axi_put_rdata(axi_channel &axi, void *src, size_t n, bool last, uint8_t id) { + memcpy(axi.r.data, src, n); + axi.r.valid = 1; + axi.r.last = (last) ? 1 : 0; + axi.r.id = id; +} + +bool axi_check_rdata_fire(const axi_channel &axi) { + if (axi.r.ready && axi.r.valid) { +#ifdef DEBUG_LOG_AXI4 + printf("axi r channel fired data = %lx, id = %d\n", axi.r.data[0], axi.r.id); +#endif + return true; + } + return false; +} + + +// aw channel: (1) read waddr; (2) try to accept the address; (3) check waddr fire +bool axi_get_waddr(const axi_channel &axi, axi_addr_t &addr) { + if (axi.aw.valid) { + addr = axi.aw.addr; + return true; + } + return false; +} + +void axi_accept_waddr(axi_channel &axi) { + axi.aw.ready = 1; +} + +bool axi_check_waddr_fire(const axi_channel &axi) { + if (axi.aw.valid && axi.aw.ready) { + assert(axi.aw.burst == 1 || (axi.aw.burst == 2 && ((axi.aw.addr & 0x3f) == 0))); +#ifdef DEBUG_LOG_AXI4 + printf("axi aw channel fired\n"); +#endif + return true; + } + return false; +} + + +// w channel: (1) accept wdata; (2) get wdata; (3) check wdata fire +void axi_accept_wdata(axi_channel &axi) { + axi.w.ready = 1; +} + +bool axi_check_wdata_fire(const axi_channel &axi) { + if (axi.w.valid && axi.w.ready) { +#ifdef DEBUG_LOG_AXI4 + printf("axi w channel fired\n"); +#endif + return true; + } + return false; +} + +void axi_get_wdata(const axi_channel &axi, void *dest, size_t n) { + memcpy(dest, axi.w.data, n); +} + + +// b channel: (1) put response; (2) check response fire +void axi_put_wack(axi_channel &axi, uint8_t id) { + axi.b.valid = 1; + axi.b.id = id; +} + +bool axi_check_wack_fire(const axi_channel &axi) { + if (axi.b.valid && axi.b.ready) { +#ifdef DEBUG_LOG_AXI4 + printf("axi b channel fired\n"); +#endif + return true; + } + return false; +} diff --git a/libraries/difftest/src/test/csrc/common/axi4.h b/libraries/difftest/src/test/csrc/common/axi4.h new file mode 100644 index 0000000..67f102b --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/axi4.h @@ -0,0 +1,230 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#ifndef __AXI4_H +#define __AXI4_h + +#include + +// #define DEBUG_LOG_AXI4 + +// 4*64 bits +#define AXI_DATA_WIDTH_64 4 + +typedef uint64_t axi_addr_t; +typedef uint64_t axi_data_t[AXI_DATA_WIDTH_64]; +#define axi_copy_data(dest, src) \ + memcpy(dest, src, sizeof(uint64_t)*AXI_DATA_WIDTH_64); + +struct axi_aw_channel { + uint8_t ready; + uint8_t valid; + axi_addr_t addr; + uint8_t prot; + uint8_t id; + uint8_t user; + uint8_t len; + uint8_t size; + uint8_t burst; + uint8_t lock; + uint8_t cache; + uint8_t qos; +}; + +struct axi_w_channel { + uint8_t ready; + uint8_t valid; + axi_data_t data; + uint8_t strb; + uint8_t last; +}; + +struct axi_b_channel { + uint8_t ready; + uint8_t valid; + uint8_t resp; + uint8_t id; + uint8_t user; +}; + +struct axi_ar_channel { + uint8_t ready; + uint8_t valid; + axi_addr_t addr; + uint8_t prot; + uint8_t id; + uint8_t user; + uint8_t len; + uint8_t size; + uint8_t burst; + uint8_t lock; + uint8_t cache; + uint8_t qos; +}; + +struct axi_r_channel { + uint8_t ready; + uint8_t valid; + uint8_t resp; + axi_data_t data; + uint8_t last; + uint8_t id; + uint8_t user; +}; + +struct axi_channel { + struct axi_aw_channel aw; + struct axi_w_channel w; + struct axi_b_channel b; + struct axi_ar_channel ar; + struct axi_r_channel r; +}; + +// dut helper for AXI + +// NOTE: change this when migrating between different hardware designs +#define DUT_AXI(name) io_memAXI_0_##name + +#define axi_aw_copy_from_dut_ptr(dut_ptr, aw) \ + do { \ + aw.ready = dut_ptr->DUT_AXI(aw_ready); \ + aw.valid = dut_ptr->DUT_AXI(aw_valid); \ + aw.addr = dut_ptr->DUT_AXI(aw_bits_addr); \ + aw.prot = dut_ptr->DUT_AXI(aw_bits_prot); \ + aw.id = dut_ptr->DUT_AXI(aw_bits_id); \ + aw.len = dut_ptr->DUT_AXI(aw_bits_len); \ + aw.size = dut_ptr->DUT_AXI(aw_bits_size); \ + aw.burst = dut_ptr->DUT_AXI(aw_bits_burst); \ + aw.lock = dut_ptr->DUT_AXI(aw_bits_lock); \ + aw.cache = dut_ptr->DUT_AXI(aw_bits_cache); \ + aw.qos = dut_ptr->DUT_AXI(aw_bits_qos); \ + } while (0); + +#define axi_aw_set_dut_ptr(dut_ptr, aw) \ + do { \ + dut_ptr->DUT_AXI(aw_ready) = aw.ready; \ + } while (0); + +#define axi_w_copy_from_dut_ptr(dut_ptr, w) \ + do { \ + w.ready = dut_ptr->DUT_AXI(w_ready); \ + w.valid = dut_ptr->DUT_AXI(w_valid); \ + axi_copy_data(w.data, dut_ptr->DUT_AXI(w_bits_data)) \ + w.strb = dut_ptr->DUT_AXI(w_bits_strb); \ + w.last = dut_ptr->DUT_AXI(w_bits_last); \ + } while (0); + +#define axi_w_set_dut_ptr(dut_ptr, w) \ + do { \ + dut_ptr->DUT_AXI(w_ready) = w.ready; \ + } while (0); + +#define axi_b_copy_from_dut_ptr(dut_ptr, b) \ + do { \ + b.ready = dut_ptr->DUT_AXI(b_ready); \ + b.valid = dut_ptr->DUT_AXI(b_valid); \ + b.resp = dut_ptr->DUT_AXI(b_bits_resp); \ + b.id = dut_ptr->DUT_AXI(b_bits_id); \ + } while (0); + +#define axi_b_set_dut_ptr(dut_ptr, b) \ + do { \ + dut_ptr->DUT_AXI(b_valid) = b.valid; \ + dut_ptr->DUT_AXI(b_bits_resp) = b.resp; \ + dut_ptr->DUT_AXI(b_bits_id) = b.id; \ + } while (0); + +#define axi_ar_copy_from_dut_ptr(dut_ptr, ar) \ + do { \ + ar.ready = dut_ptr->DUT_AXI(ar_ready); \ + ar.valid = dut_ptr->DUT_AXI(ar_valid); \ + ar.addr = dut_ptr->DUT_AXI(ar_bits_addr); \ + ar.prot = dut_ptr->DUT_AXI(ar_bits_prot); \ + ar.id = dut_ptr->DUT_AXI(ar_bits_id); \ + ar.len = dut_ptr->DUT_AXI(ar_bits_len); \ + ar.size = dut_ptr->DUT_AXI(ar_bits_size); \ + ar.burst = dut_ptr->DUT_AXI(ar_bits_burst); \ + ar.lock = dut_ptr->DUT_AXI(ar_bits_lock); \ + ar.cache = dut_ptr->DUT_AXI(ar_bits_cache); \ + ar.qos = dut_ptr->DUT_AXI(ar_bits_qos); \ + } while (0); + +#define axi_ar_set_dut_ptr(dut_ptr, ar) \ + do { \ + dut_ptr->DUT_AXI(ar_ready) = ar.ready; \ + } while (0); + +#define axi_r_copy_from_dut_ptr(dut_ptr, r) \ + do { \ + r.ready = dut_ptr->DUT_AXI(r_ready); \ + r.valid = dut_ptr->DUT_AXI(r_valid); \ + r.resp = dut_ptr->DUT_AXI(r_bits_resp); \ + axi_copy_data(r.data, dut_ptr->DUT_AXI(r_bits_data)) \ + r.last = dut_ptr->DUT_AXI(r_bits_last); \ + r.id = dut_ptr->DUT_AXI(r_bits_id); \ + } while (0); + +#define axi_r_set_dut_ptr(dut_ptr, r) \ + do { \ + dut_ptr->DUT_AXI(r_valid) = r.valid; \ + dut_ptr->DUT_AXI(r_bits_resp) = r.resp; \ + axi_copy_data(dut_ptr->DUT_AXI(r_bits_data), r.data) \ + dut_ptr->DUT_AXI(r_bits_last) = r.last; \ + dut_ptr->DUT_AXI(r_bits_id) = r.id; \ + } while (0); + +#define axi_copy_from_dut_ptr(dut_ptr, axi) \ + do { \ + axi_aw_copy_from_dut_ptr(dut_ptr, axi.aw) \ + axi_w_copy_from_dut_ptr(dut_ptr, axi.w) \ + axi_b_copy_from_dut_ptr(dut_ptr, axi.b) \ + axi_ar_copy_from_dut_ptr(dut_ptr, axi.ar) \ + axi_r_copy_from_dut_ptr(dut_ptr, axi.r) \ + } while (0); + +#define axi_set_dut_ptr(dut_ptr, axi) \ + do { \ + axi_aw_set_dut_ptr(dut_ptr, axi.aw) \ + axi_w_set_dut_ptr(dut_ptr, axi.w) \ + axi_b_set_dut_ptr(dut_ptr, axi.b) \ + axi_ar_set_dut_ptr(dut_ptr, axi.ar) \ + axi_r_set_dut_ptr(dut_ptr, axi.r) \ + } while (0); + +// ar channel: (1) read raddr; (2) try to accept the address; (3) check raddr fire +bool axi_get_raddr(const axi_channel &axi, axi_addr_t &addr); +void axi_accept_raddr(axi_channel &axi); +bool axi_check_raddr_fire(const axi_channel &axi); + +// r channel: (1) put rdata; (2) check rdata fire +void axi_put_rdata(axi_channel &axi, void *src, size_t n, bool last, uint8_t id); +bool axi_check_rdata_fire(const axi_channel &axi); + +// aw channel: (1) read waddr; (2) try to accept the address; (3) check waddr fire +bool axi_get_waddr(const axi_channel &axi, axi_addr_t &addr); +void axi_accept_waddr(axi_channel &axi); +bool axi_check_waddr_fire(const axi_channel &axi); + +// w channel: (1) accept wdata; (2) get wdata; (3) check wdata fire +void axi_accept_wdata(axi_channel &axi); +void axi_get_wdata(const axi_channel &axi, void *dest, size_t n); +bool axi_check_wdata_fire(const axi_channel &axi); + +// b channel: (1) put response; (2) check response fire +void axi_put_wack(axi_channel &axi, uint8_t id); +bool axi_check_wack_fire(const axi_channel &axi); + +#endif diff --git a/libraries/difftest/src/test/csrc/common/common.cpp b/libraries/difftest/src/test/csrc/common/common.cpp new file mode 100644 index 0000000..b2f16b9 --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/common.cpp @@ -0,0 +1,45 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#include +#include "common.h" + +int assert_count = 0; +static pthread_mutex_t assert_mutex; +int signal_num = 0; + +void assert_init() { + pthread_mutex_init(&assert_mutex, 0); +} + +void assert_finish() { + pthread_mutex_destroy(&assert_mutex); +} + +extern "C" void xs_assert(long long line) { + pthread_mutex_lock(&assert_mutex); + if (assert_count >= 0) { + printf("Assertion failed at line %lld.\n", line); + assert_count++; + } + pthread_mutex_unlock(&assert_mutex); +} + +void sig_handler(int signo) { + if (signal_num != 0) + exit(0); + signal_num = signo; +} diff --git a/libraries/difftest/src/test/csrc/common/common.h b/libraries/difftest/src/test/csrc/common/common.h new file mode 100644 index 0000000..0f8f25d --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/common.h @@ -0,0 +1,57 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#ifndef __COMMON_H +#define __COMMON_H + +#include +#include +#include +#include +#include +#include + +#ifndef NUM_CORES +#define NUM_CORES 1 +#endif + +#define ANSI_COLOR_RED "\x1b[31m" +#define ANSI_COLOR_GREEN "\x1b[32m" +#define ANSI_COLOR_YELLOW "\x1b[33m" +#define ANSI_COLOR_BLUE "\x1b[34m" +#define ANSI_COLOR_MAGENTA "\x1b[35m" +#define ANSI_COLOR_CYAN "\x1b[36m" +#define ANSI_COLOR_RESET "\x1b[0m" + +#define eprintf(...) fprintf(stdout, ## __VA_ARGS__) + +#ifdef WITH_DRAMSIM3 +#include "cosimulation.h" +#endif + +extern int assert_count; +void assert_init(); +void assert_finish(); + +extern int signal_num; +void sig_handler(int signo); + +typedef uint64_t rtlreg_t; +typedef uint64_t paddr_t; +typedef uint64_t vaddr_t; +typedef uint16_t ioaddr_t; + +#endif // __COMMON_H diff --git a/libraries/difftest/src/test/csrc/common/compress.cpp b/libraries/difftest/src/test/csrc/common/compress.cpp new file mode 100644 index 0000000..70ba6c0 --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/compress.cpp @@ -0,0 +1,142 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#include "compress.h" + +double calcTime(timeval s, timeval e) { + double sec, usec; + sec = e.tv_sec - s.tv_sec; + usec = e.tv_usec - s.tv_usec; + return 1000*sec + usec/1000.0; +} + +// Return whether the file is a gz file +int isGzFile(const char *filename) { + assert(filename != NULL && strlen(filename) >= 4); + return !strcmp(filename + (strlen(filename) - 3), ".gz"); +} + +long snapshot_compressToFile(uint8_t *ptr, const char *filename, long buf_size) { + gzFile compressed_mem = gzopen(filename, "wb"); + + if (compressed_mem == NULL) { + printf("Can't open compressed binary file '%s'", filename); + return -1; + } + + long curr_size = 0; + const uint32_t chunk_size = 16384; + long *temp_page = new long[chunk_size]; + long *pmem_current = (long*)ptr; + + while (curr_size < buf_size) { + memset(temp_page, 0, chunk_size * sizeof(long)); + for (uint32_t x = 0; x < chunk_size / sizeof(long); x++) { + pmem_current = (long*)((uint8_t*)ptr + curr_size + x * sizeof(long)); + if (*pmem_current != 0) { + *(temp_page + x) = *pmem_current; + } + } + uint32_t bytes_write = gzwrite(compressed_mem, temp_page, chunk_size); + if (bytes_write <= 0) { printf("Compress failed\n"); break; } + curr_size += bytes_write; + // assert(bytes_write % sizeof(long) == 0); + + } + // printf("Write %lu bytes from gz stream in total\n", curr_size); + + delete [] temp_page; + + if (gzclose(compressed_mem)) { + printf("Error closing '%s'\n", filename); + return -1; + } + return curr_size; +} + +long readFromGz(void* ptr, const char *file_name, long buf_size, uint8_t load_type) { + assert(buf_size > 0); + gzFile compressed_mem = gzopen(file_name, "rb"); + + if (compressed_mem == NULL) { + printf("Can't open compressed binary file '%s'", file_name); + return -1; + } + + uint64_t curr_size = 0; + const uint32_t chunk_size = 16384; + + // Only load from RAM need check + if (load_type == LOAD_RAM && (buf_size % chunk_size) != 0) { + printf("buf_size must be divisible by chunk_size\n"); + assert(0); + } + + long *temp_page = new long[chunk_size]; + long *pmem_current = (long*)ptr; + + while (curr_size < buf_size) { + uint32_t bytes_read = gzread(compressed_mem, temp_page, chunk_size); + if (bytes_read == 0) { + break; + } + assert(load_type != LOAD_RAM || bytes_read % sizeof(long) == 0); + for (uint32_t x = 0; x < bytes_read / sizeof(long) + 1; x++) { + if (*(temp_page + x) != 0) { + pmem_current = (long*)((uint8_t*)ptr + curr_size + x * sizeof(long)); + *pmem_current = *(temp_page + x); + } + } + curr_size += bytes_read; + } + + if(gzread(compressed_mem, temp_page, chunk_size) > 0) { + printf("File size is larger than buf_size!\n"); + assert(0); + } + // printf("Read %lu bytes from gz stream in total\n", curr_size); + + delete [] temp_page; + + if(gzclose(compressed_mem)) { + printf("Error closing '%s'\n", file_name); + return -1; + } + return curr_size; +} + +void nonzero_large_memcpy(const void* __restrict dest, const void* __restrict src, size_t n) { + uint64_t *_dest = (uint64_t *)dest; + uint64_t *_src = (uint64_t *)src; + while (n >= sizeof(uint64_t)) { + if (*_src != 0) { + *_dest = *_src; + } + _dest++; + _src++; + n -= sizeof(uint64_t); + } + if (n > 0) { + uint8_t *dest8 = (uint8_t *)_dest; + uint8_t *src8 = (uint8_t *)_src; + while (n > 0) { + *dest8 = *src8; + dest8++; + src8++; + n--; + } + } +} diff --git a/libraries/difftest/src/test/csrc/common/compress.h b/libraries/difftest/src/test/csrc/common/compress.h new file mode 100644 index 0000000..b49bd1c --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/compress.h @@ -0,0 +1,36 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#ifndef COMPRESS_H +#define COMPRESS_H + +#include "common.h" + +#include +#include + +#define LOAD_SNAPSHOT 0 +#define LOAD_RAM 1 + +double calcTime(timeval s, timeval e); + +int isGzFile(const char *filename); +long snapshot_compressToFile(uint8_t *ptr, const char *filename, long buf_size); +long readFromGz(void* ptr, const char *file_name, long buf_size, uint8_t load_type); + +void nonzero_large_memcpy(const void* __restrict dest, const void* __restrict src, size_t n); + +#endif diff --git a/libraries/difftest/src/test/csrc/common/device.cpp b/libraries/difftest/src/test/csrc/common/device.cpp new file mode 100644 index 0000000..570f7ad --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/device.cpp @@ -0,0 +1,70 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#include +#include + +#include "device.h" + +void send_key(uint8_t, bool); +void init_sdl(void); + +void init_uart(void); +extern "C" void init_sd(void); +extern "C" void init_flash(void); + +static struct timeval boot = {}; + +void init_device(void) { + init_sdl(); + init_uart(); + init_sd(); + // init_flash(); + gettimeofday(&boot, NULL); +} + +void poll_event() { + SDL_Event event; + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_QUIT: break; //set_abort(); + + // If a key was pressed + case SDL_KEYDOWN: + case SDL_KEYUP: { + uint8_t k = event.key.keysym.scancode; + bool is_keydown = (event.key.type == SDL_KEYDOWN); + send_key(k, is_keydown); + break; + } + default: break; + } + } +} + +uint32_t uptime(void) { + struct timeval t; + gettimeofday(&t, NULL); + + int s = t.tv_sec - boot.tv_sec; + int us = t.tv_usec - boot.tv_usec; + if (us < 0) { + s --; + us += 1000000; + } + + return s * 1000 + (us + 500) / 1000; +} diff --git a/libraries/difftest/src/test/csrc/common/device.h b/libraries/difftest/src/test/csrc/common/device.h new file mode 100644 index 0000000..240a579 --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/device.h @@ -0,0 +1,26 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#ifndef __DEVICE_H__ +#define __DEVICE_H__ + +#include "common.h" + +void init_device(); +void poll_event(); +uint32_t uptime(void); + +#endif diff --git a/libraries/difftest/src/test/csrc/common/flash.cpp b/libraries/difftest/src/test/csrc/common/flash.cpp new file mode 100644 index 0000000..a768db8 --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/flash.cpp @@ -0,0 +1,57 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#include "common.h" +#include "flash.h" + +FILE *flash_fp = NULL; + +extern "C" { + +void flash_read(uint32_t addr, uint64_t *data) { +#ifdef USE_BIN + fseek(flash_fp, addr, SEEK_SET); + fread(data, 8, 1, flash_fp); +#else + uint32_t index = addr & 0x00000fff; + switch(index>>3){ + case 0 : + *data = 0x01f292930010029b; + break; + case 1 : + *data = 0x00028067; + break; + default : + *data = 0; + } +#endif +} + +void init_flash(void) { +#ifdef USE_BIN + + flash_fp = fopen("/home/jy/Project/nexus-am/tests/cputest/build/dummy-riscv64-noop.bin", "r"); + if(!flash_fp) + { + eprintf(ANSI_COLOR_MAGENTA "[warning] flash img not found\n"); + } + printf("use bin as a flash!\n"); +#else + printf("use fixed 3 instructions!\n"); +#endif +} + +} diff --git a/libraries/difftest/src/test/csrc/common/flash.h b/libraries/difftest/src/test/csrc/common/flash.h new file mode 100644 index 0000000..6284add --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/flash.h @@ -0,0 +1,22 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#ifndef __FLASH_H +#define __FLASH_H + +#include "common.h" + +#endif // __FLASH_H diff --git a/libraries/difftest/src/test/csrc/common/keyboard.cpp b/libraries/difftest/src/test/csrc/common/keyboard.cpp new file mode 100644 index 0000000..6e6e632 --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/keyboard.cpp @@ -0,0 +1,82 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#include "common.h" +#include "macro.h" +#include + +// Note that this is not the standard +#define _KEYS(f) \ + f(ESCAPE) f(F1) f(F2) f(F3) f(F4) f(F5) f(F6) f(F7) f(F8) f(F9) f(F10) f(F11) f(F12) \ +f(GRAVE) f(1) f(2) f(3) f(4) f(5) f(6) f(7) f(8) f(9) f(0) f(MINUS) f(EQUALS) f(BACKSPACE) \ +f(TAB) f(Q) f(W) f(E) f(R) f(T) f(Y) f(U) f(I) f(O) f(P) f(LEFTBRACKET) f(RIGHTBRACKET) f(BACKSLASH) \ +f(CAPSLOCK) f(A) f(S) f(D) f(F) f(G) f(H) f(J) f(K) f(L) f(SEMICOLON) f(APOSTROPHE) f(RETURN) \ +f(LSHIFT) f(Z) f(X) f(C) f(V) f(B) f(N) f(M) f(COMMA) f(PERIOD) f(SLASH) f(RSHIFT) \ +f(LCTRL) f(APPLICATION) f(LALT) f(SPACE) f(RALT) f(RCTRL) \ +f(UP) f(DOWN) f(LEFT) f(RIGHT) f(INSERT) f(DELETE) f(HOME) f(END) f(PAGEUP) f(PAGEDOWN) + +#define _KEY_NAME(k) _KEY_##k, + +enum { + _KEY_NONE = 0, + MAP(_KEYS, _KEY_NAME) +}; + +#define SDL_KEYMAP(k) [concat(SDL_SCANCODE_, k)] = concat(_KEY_, k), +static const uint32_t keymap[256] = { +// MAP(_KEYS, SDL_KEYMAP) + 0, 0, 0, 0, 43, 60, 58, 45, 31, 46, 47, 48, 36, 49, 50, 51, + 62, 61, 37, 38, 29, 32, 44, 33, 35, 59, 30, 57, 34, 56, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 54, 1, 27, 28, 70, 25, 26, 39, + 40, 41, 0, 52, 53, 14, 63, 64, 65, 42, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 0, 0, 0, 77, 79, 81, 78, 80, 82, 76, + 75, 74, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 67, 55, 69, 0, 72, 66, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + +#define KEY_QUEUE_LEN 1024 +static int key_queue[KEY_QUEUE_LEN]; +static int key_f = 0, key_r = 0; + +#define KEYDOWN_MASK 0x8000 + +void send_key(uint8_t scancode, bool is_keydown) { + if (keymap[scancode] != _KEY_NONE) { + uint32_t am_scancode = keymap[scancode] | (is_keydown ? KEYDOWN_MASK : 0); + key_queue[key_r] = am_scancode; + key_r = (key_r + 1) % KEY_QUEUE_LEN; + // detect key queue overflow + assert(key_r != key_f); + } +} + +uint32_t read_key(void) { + uint32_t key = _KEY_NONE; + if (key_f != key_r) { + key = key_queue[key_f]; + key_f = (key_f + 1) % KEY_QUEUE_LEN; + } + return key; +} diff --git a/libraries/difftest/src/test/csrc/common/macro.h b/libraries/difftest/src/test/csrc/common/macro.h new file mode 100644 index 0000000..9043474 --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/macro.h @@ -0,0 +1,31 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#ifndef __MACRO_H__ +#define __MACRO_H__ + +#define str_temp(x) #x +#define str(x) str_temp(x) + +#define concat_temp(x, y) x ## y +#define concat(x, y) concat_temp(x, y) +#define concat3(x, y, z) concat(concat(x, y), z) +#define concat4(x, y, z, w) concat3(concat(x, y), z, w) +#define concat5(x, y, z, v, w) concat4(concat(x, y), z, v, w) + +#define MAP(c, f) c(f) + +#endif diff --git a/libraries/difftest/src/test/csrc/common/ram.cpp b/libraries/difftest/src/test/csrc/common/ram.cpp new file mode 100644 index 0000000..e452527 --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/ram.cpp @@ -0,0 +1,453 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#include + +#include "common.h" +#include "ram.h" +#include "compress.h" + +// #define TLB_UNITTEST + +#ifdef WITH_DRAMSIM3 +#include "cosimulation.h" +CoDRAMsim3 *dram = NULL; +#endif + +static uint64_t *ram; +static long img_size = 0; +static pthread_mutex_t ram_mutex; + +void* get_img_start() { return &ram[0]; } +long get_img_size() { return img_size; } +void* get_ram_start() { return &ram[0]; } +long get_ram_size() { return EMU_RAM_SIZE; } + +#ifdef TLB_UNITTEST +void addpageSv39() { +//three layers +//addr range: 0x0000000080000000 - 0x0000000088000000 for 128MB from 2GB - 2GB128MB +//the first layer: one entry for 1GB. (512GB in total by 512 entries). need the 2th entries +//the second layer: one entry for 2MB. (1GB in total by 512 entries). need the 0th-63rd entries +//the third layer: one entry for 4KB (2MB in total by 512 entries). need 64 with each one all +#define TOPSIZE (128 * 1024 * 1024) +#define PAGESIZE (4 * 1024) // 4KB = 2^12B +#define ENTRYNUM (PAGESIZE / 8) //512 2^9 +#define PTEVOLUME (PAGESIZE * ENTRYNUM) // 2MB +#define PTENUM (TOPSIZE / PTEVOLUME) // 128MB / 2MB = 64 +#define PDDENUM 1 +#define PDENUM 1 +#define PDDEADDR (0x88000000 - (PAGESIZE * (PTENUM + 2))) //0x88000000 - 0x1000*66 +#define PDEADDR (0x88000000 - (PAGESIZE * (PTENUM + 1))) //0x88000000 - 0x1000*65 +#define PTEADDR(i) (0x88000000 - (PAGESIZE * PTENUM) + (PAGESIZE * i)) //0x88000000 - 0x100*64 +#define PTEMMIONUM 128 +#define PDEMMIONUM 1 +#define PTEDEVNUM 128 +#define PDEDEVNUM 1 + + uint64_t pdde[ENTRYNUM]; + uint64_t pde[ENTRYNUM]; + uint64_t pte[PTENUM][ENTRYNUM]; + + // special addr for mmio 0x40000000 - 0x4fffffff + uint64_t pdemmio[ENTRYNUM]; + uint64_t ptemmio[PTEMMIONUM][ENTRYNUM]; + + // special addr for internal devices 0x30000000-0x3fffffff + uint64_t pdedev[ENTRYNUM]; + uint64_t ptedev[PTEDEVNUM][ENTRYNUM]; + + // dev: 0x30000000-0x3fffffff + pdde[0] = (((PDDEADDR-PAGESIZE*(PDEMMIONUM+PTEMMIONUM+PDEDEVNUM)) & 0xfffff000) >> 2) | 0x1; + + for (int i = 0; i < PTEDEVNUM; i++) { + pdedev[ENTRYNUM-PTEDEVNUM+i] = (((PDDEADDR-PAGESIZE*(PDEMMIONUM+PTEMMIONUM+PDEDEVNUM+PTEDEVNUM-i)) & 0xfffff000) >> 2) | 0x1; + } + + for(int outidx = 0; outidx < PTEDEVNUM; outidx++) { + for(int inidx = 0; inidx < ENTRYNUM; inidx++) { + ptedev[outidx][inidx] = (((0x30000000 + outidx*PTEVOLUME + inidx*PAGESIZE) & 0xfffff000) >> 2) | 0xf; + } + } + + // mmio: 0x40000000 - 0x4fffffff + pdde[1] = (((PDDEADDR-PAGESIZE*PDEMMIONUM) & 0xfffff000) >> 2) | 0x1; + + for(int i = 0; i < PTEMMIONUM; i++) { + pdemmio[i] = (((PDDEADDR-PAGESIZE*(PTEMMIONUM+PDEMMIONUM-i)) & 0xfffff000) >> 2) | 0x1; + } + + for(int outidx = 0; outidx < PTEMMIONUM; outidx++) { + for(int inidx = 0; inidx < ENTRYNUM; inidx++) { + ptemmio[outidx][inidx] = (((0x40000000 + outidx*PTEVOLUME + inidx*PAGESIZE) & 0xfffff000) >> 2) | 0xf; + } + } + + //0x800000000 - 0x87ffffff + pdde[2] = ((PDEADDR & 0xfffff000) >> 2) | 0x1; + //pdde[2] = ((0x80000000&0xc0000000) >> 2) | 0xf; + + for(int i = 0; i < PTENUM ;i++) { + // pde[i] = ((PTEADDR(i)&0xfffff000)>>2) | 0x1; + pde[i] = (((0x80000000+i*2*1024*1024)&0xffe00000)>>2) | 0xf; + } + + for(int outidx = 0; outidx < PTENUM; outidx++ ) { + for(int inidx = 0; inidx < ENTRYNUM; inidx++ ) { + pte[outidx][inidx] = (((0x80000000 + outidx*PTEVOLUME + inidx*PAGESIZE) & 0xfffff000)>>2) | 0xf; + } + } + + printf("try to add identical tlb page to ram\n"); + memcpy((char *)ram+(TOPSIZE-PAGESIZE*(PTENUM+PDDENUM+PDENUM+PDEMMIONUM+PTEMMIONUM+PDEDEVNUM+PTEDEVNUM)),ptedev,PAGESIZE*PTEDEVNUM); + memcpy((char *)ram+(TOPSIZE-PAGESIZE*(PTENUM+PDDENUM+PDENUM+PDEMMIONUM+PTEMMIONUM+PDEDEVNUM)),pdedev,PAGESIZE*PDEDEVNUM); + memcpy((char *)ram+(TOPSIZE-PAGESIZE*(PTENUM+PDDENUM+PDENUM+PDEMMIONUM+PTEMMIONUM)),ptemmio, PAGESIZE*PTEMMIONUM); + memcpy((char *)ram+(TOPSIZE-PAGESIZE*(PTENUM+PDDENUM+PDENUM+PDEMMIONUM)), pdemmio, PAGESIZE*PDEMMIONUM); + memcpy((char *)ram+(TOPSIZE-PAGESIZE*(PTENUM+PDDENUM+PDENUM)), pdde, PAGESIZE*PDDENUM); + memcpy((char *)ram+(TOPSIZE-PAGESIZE*(PTENUM+PDENUM)), pde, PAGESIZE*PDENUM); + memcpy((char *)ram+(TOPSIZE-PAGESIZE*PTENUM), pte, PAGESIZE*PTENUM); +} +#endif + +void init_ram(const char *img) { + assert(img != NULL); + + printf("The image is %s\n", img); + + // initialize memory using Linux mmap + printf("Using simulated %luMB RAM\n", EMU_RAM_SIZE / (1024 * 1024)); + ram = (uint64_t *)mmap(NULL, EMU_RAM_SIZE, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); + if (ram == (uint64_t *)MAP_FAILED) { + printf("Cound not mmap 0x%lx bytes\n", EMU_RAM_SIZE); + assert(0); + } + +#ifdef TLB_UNITTEST + //new add + addpageSv39(); + //new end +#endif + + int ret; + if (isGzFile(img)) { + printf("Gzip file detected and loading image from extracted gz file\n"); + img_size = readFromGz(ram, img, EMU_RAM_SIZE, LOAD_RAM); + assert(img_size >= 0); + } + else { + FILE *fp = fopen(img, "rb"); + if (fp == NULL) { + printf("Can not open '%s'\n", img); + assert(0); + } + + fseek(fp, 0, SEEK_END); + img_size = ftell(fp); + if (img_size > EMU_RAM_SIZE) { + img_size = EMU_RAM_SIZE; + } + + fseek(fp, 0, SEEK_SET); + ret = fread(ram, img_size, 1, fp); + + assert(ret == 1); + fclose(fp); + } + +#ifdef WITH_DRAMSIM3 + #if !defined(DRAMSIM3_CONFIG) || !defined(DRAMSIM3_OUTDIR) + #error DRAMSIM3_CONFIG or DRAMSIM3_OUTDIR is not defined + #endif + assert(dram == NULL); + dram = new ComplexCoDRAMsim3(DRAMSIM3_CONFIG, DRAMSIM3_OUTDIR); + // dram = new SimpleCoDRAMsim3(90); +#endif + + pthread_mutex_init(&ram_mutex, 0); + +} + +void ram_finish() { + munmap(ram, EMU_RAM_SIZE); +#ifdef WITH_DRAMSIM3 + dramsim3_finish(); +#endif + pthread_mutex_destroy(&ram_mutex); +} + + +extern "C" uint64_t ram_read_helper(uint8_t en, uint64_t rIdx) { + if (!ram) + return 0; + if (en && rIdx >= EMU_RAM_SIZE / sizeof(uint64_t)) { + rIdx %= EMU_RAM_SIZE / sizeof(uint64_t); + } + pthread_mutex_lock(&ram_mutex); + uint64_t rdata = (en) ? ram[rIdx] : 0; + pthread_mutex_unlock(&ram_mutex); + return rdata; +} + +extern "C" void ram_write_helper(uint64_t wIdx, uint64_t wdata, uint64_t wmask, uint8_t wen) { + if (wen && ram) { + if (wIdx >= EMU_RAM_SIZE / sizeof(uint64_t)) { + printf("ERROR: ram wIdx = 0x%lx out of bound!\n", wIdx); + assert(wIdx < EMU_RAM_SIZE / sizeof(uint64_t)); + } + pthread_mutex_lock(&ram_mutex); + ram[wIdx] = (ram[wIdx] & ~wmask) | (wdata & wmask); + pthread_mutex_unlock(&ram_mutex); + } +} + +uint64_t pmem_read(uint64_t raddr) { + if (raddr % sizeof(uint64_t)) { + printf("Warning: pmem_read only supports 64-bit aligned memory access\n"); + } + raddr -= 0x80000000; + return ram_read_helper(1, raddr / sizeof(uint64_t)); +} + +void pmem_write(uint64_t waddr, uint64_t wdata) { + if (waddr % sizeof(uint64_t)) { + printf("Warning: pmem_write only supports 64-bit aligned memory access\n"); + } + waddr -= 0x80000000; + return ram_write_helper(waddr / sizeof(uint64_t), wdata, -1UL, 1); +} + +#ifdef WITH_DRAMSIM3 +#include + +void dramsim3_finish() { + delete dram; +} + +#define MAX_AXI_DATA_LEN 8 + +// currently does not support masked read or write +struct dramsim3_meta { + uint8_t len; + uint8_t size; + uint8_t offset; + uint8_t id; + uint64_t data[MAX_AXI_DATA_LEN]; +}; + +void axi_read_data(const axi_ar_channel &ar, dramsim3_meta *meta) { + uint64_t address = ar.addr % EMU_RAM_SIZE; + uint64_t beatsize = 1 << ar.size; + uint8_t beatlen = ar.len + 1; + uint64_t transaction_size = beatsize * beatlen; + assert((transaction_size % sizeof(uint64_t)) == 0); + // axi burst FIXED + if (ar.burst == 0x0) { + std::cout << "axi burst FIXED not supported!" << std::endl; + assert(0); + } + // axi burst INCR + else if (ar.burst == 1) { + assert(transaction_size / sizeof(uint64_t) <= MAX_AXI_DATA_LEN); + for (int i = 0; i < transaction_size / sizeof(uint64_t); i++) { + meta->data[i] = ram[address / sizeof(uint64_t)]; + address += sizeof(uint64_t); + } + } + // axi burst WRAP + else if (ar.burst == 2) { + uint64_t low = (address / transaction_size) * transaction_size; + uint64_t high = low + transaction_size; + assert(transaction_size / sizeof(uint64_t) <= MAX_AXI_DATA_LEN); + for (int i = 0; i < transaction_size / sizeof(uint64_t); i++) { + if (address == high) { + address = low; + } + meta->data[i] = ram[address / sizeof(uint64_t)]; + address += sizeof(uint64_t); + } + } + else { + std::cout << "reserved arburst!" << std::endl; + assert(0); + } + meta->len = beatlen; + meta->size = beatsize; + meta->offset = 0; + meta->id = ar.id; +} + +CoDRAMRequest *dramsim3_request(const axi_channel &axi, bool is_write) { + uint64_t address = (is_write) ? axi.aw.addr : axi.ar.addr; + dramsim3_meta *meta = new dramsim3_meta; + // WRITE + if (is_write) { + meta->len = axi.aw.len + 1; + meta->size = 1 << axi.aw.size; + meta->offset = 0; + meta->id = axi.aw.id; + } + else { + axi_read_data(axi.ar, meta); + } + CoDRAMRequest *req = new CoDRAMRequest(); + req->address = address; + req->is_write = is_write; + req->meta = meta; + return req; +} + +static CoDRAMResponse *wait_resp_r = NULL; +static CoDRAMResponse *wait_resp_b = NULL; +static CoDRAMRequest *wait_req_w = NULL; +// currently only accept one in-flight read + one in-flight write +static uint64_t raddr, roffset = 0, rlen; +static uint64_t waddr, woffset = 0, wlen; + +void dramsim3_helper_rising(const axi_channel &axi) { + // ticks DRAMsim3 according to CPU_FREQ:DRAM_FREQ + dram->tick(); + + // read data fire: check the last read request + if (axi_check_rdata_fire(axi)) { + if (wait_resp_r == NULL) { + printf("ERROR: There's no in-flight read request.\n"); + assert(wait_resp_r != NULL); + } + dramsim3_meta *meta = static_cast(wait_resp_r->req->meta); + meta->offset++; + // check whether the last rdata response has finished + if (meta->offset == meta->len) { + delete meta; + delete wait_resp_r->req; + delete wait_resp_r; + wait_resp_r = NULL; + } + } + + // read address fire: accept a new request + if (axi_check_raddr_fire(axi)) { + dram->add_request(dramsim3_request(axi, false)); + } + + // the last write transaction is acknowledged + if (axi_check_wack_fire(axi)) { + if (wait_resp_b == NULL) { + printf("ERROR: write response fire for nothing in-flight.\n"); + assert(wait_resp_b != NULL); + } + // flush data to memory + uint64_t waddr = wait_resp_b->req->address % EMU_RAM_SIZE; + dramsim3_meta *meta = static_cast(wait_resp_b->req->meta); + void *start_addr = ram + (waddr / sizeof(uint64_t)); + memcpy(start_addr, meta->data, meta->len * meta->size); + for (int i = 0; i < meta->len; i++) { + // uint64_t address = wait_resp_b->req->address % EMU_RAM_SIZE; + // ram[address / sizeof(uint64_t) + i] = meta->data[i]; + // printf("flush write to memory[0x%ld] = 0x%lx\n", address) + } + delete meta; + delete wait_resp_b->req; + delete wait_resp_b; + wait_resp_b = NULL; + } + + // write address fire: accept a new write request + if (axi_check_waddr_fire(axi)) { + if (wait_req_w != NULL) { + printf("ERROR: The last write request has not finished.\n"); + assert(wait_req_w == NULL); + } + wait_req_w = dramsim3_request(axi, true); + // printf("accept a new write request to addr = 0x%lx, len = %d\n", axi.aw.addr, axi.aw.len); + } + + // write data fire: for the last write transaction + if (axi_check_wdata_fire(axi)) { + if (wait_req_w == NULL) { + printf("ERROR: wdata fire for nothing in-flight.\n"); + assert(wait_req_w != NULL); + } + dramsim3_meta *meta = static_cast(wait_req_w->meta); + void *data_start = meta->data + meta->offset * meta->size / sizeof(uint64_t); + axi_get_wdata(axi, data_start, meta->size); + meta->offset++; + // printf("accept a new write data\n"); + } + if (wait_req_w) { + dramsim3_meta *meta = static_cast(wait_req_w->meta); + // if this is the last beat + if (meta->offset == meta->len && dram->will_accept(wait_req_w->address, true)) { + dram->add_request(wait_req_w); + wait_req_w = NULL; + } + } +} + +void dramsim3_helper_falling(axi_channel &axi) { + // default branch to avoid wrong handshake + axi.aw.ready = 0; + axi.w.ready = 0; + axi.b.valid = 0; + axi.ar.ready = 0; + axi.r.valid = 0; + + // RDATA: if finished, we try the next rdata response + if (!wait_resp_r) + wait_resp_r = dram->check_read_response(); + // if there's some data response, put it onto axi bus + if (wait_resp_r) { + dramsim3_meta *meta = static_cast(wait_resp_r->req->meta); + // printf("meta->size %d offset %d\n", meta->size, meta->offset*meta->size/sizeof(uint64_t)); + void *data_start = meta->data + meta->offset*meta->size / sizeof(uint64_t); + axi_put_rdata(axi, data_start, meta->size, meta->offset == meta->len - 1, meta->id); + } + + // RADDR: check whether the read request can be accepted + axi_addr_t raddr; + if (axi_get_raddr(axi, raddr) && dram->will_accept(raddr, false)) { + axi_accept_raddr(axi); + // printf("try to accept read request to 0x%lx\n", raddr); + } + + // WREQ: check whether the write request can be accepted + // Note: block the next write here to simplify logic + axi_addr_t waddr; + if (wait_req_w == NULL && axi_get_waddr(axi, waddr) && dram->will_accept(waddr, true)) { + axi_accept_waddr(axi); + axi_accept_wdata(axi); + // printf("try to accept write request to 0x%lx\n", waddr); + } + + // WDATA: check whether the write data can be accepted + if (wait_req_w != NULL && dram->will_accept(wait_req_w->address, true)) { + dramsim3_meta *meta = static_cast(wait_req_w->meta); + // we have to check whether the last finished write request has been accepted by dram + if (meta->offset != meta->len) { + axi_accept_wdata(axi); + } + } + + // WRESP: if finished, we try the next write response + if (!wait_resp_b) + wait_resp_b = dram->check_write_response(); + // if there's some write response, put it onto axi bus + if (wait_resp_b) { + dramsim3_meta *meta = static_cast(wait_resp_b->req->meta); + axi_put_wack(axi, meta->id); + } +} + +#endif diff --git a/libraries/difftest/src/test/csrc/common/ram.h b/libraries/difftest/src/test/csrc/common/ram.h new file mode 100644 index 0000000..e9aa4a7 --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/ram.h @@ -0,0 +1,44 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#ifndef __RAM_H +#define __RAM_H + +#include "common.h" + +// #define EMU_RAM_SIZE (256 * 1024 * 1024UL) +#define EMU_RAM_SIZE (8 * 1024 * 1024 * 1024UL) + +void init_ram(const char *img); +void ram_finish(); +void* get_ram_start(); +long get_ram_size(); + +void* get_img_start(); +long get_img_size(); + +uint64_t pmem_read(uint64_t raddr); +void pmem_write(uint64_t waddr, uint64_t wdata); + +#ifdef WITH_DRAMSIM3 +#include "axi4.h" + +void dramsim3_finish(); +void dramsim3_helper_rising(const struct axi_channel &axi); +void dramsim3_helper_falling(struct axi_channel &axi); +#endif + +#endif diff --git a/libraries/difftest/src/test/csrc/common/sdcard.cpp b/libraries/difftest/src/test/csrc/common/sdcard.cpp new file mode 100644 index 0000000..111577d --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/sdcard.cpp @@ -0,0 +1,44 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#include "common.h" +#include "sdcard.h" + +FILE *fp = NULL; + +extern "C" { + +void sd_setaddr(uint32_t addr) { + fseek(fp, addr, SEEK_SET); + //printf("set addr to 0x%08x\n", addr); + //assert(0); +} + +void sd_read(uint32_t *data) { + fread(data, 4, 1, fp); + //printf("read data = 0x%08x\n", *data); + //assert(0); +} + +void init_sd(void) { + fp = fopen("/home/xyn/workloads/debian/riscv-debian.img", "r"); + if(!fp) + { + eprintf(ANSI_COLOR_MAGENTA "[warning] sdcard img not found\n"); + } +} + +} diff --git a/libraries/difftest/src/test/csrc/common/sdcard.h b/libraries/difftest/src/test/csrc/common/sdcard.h new file mode 100644 index 0000000..46cfe16 --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/sdcard.h @@ -0,0 +1,24 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#ifndef __SDCARD_H +#define __SDCARD_H + +#include "common.h" + +extern FILE *fp; + +#endif // __SDCARD_H diff --git a/libraries/difftest/src/test/csrc/common/uart.cpp b/libraries/difftest/src/test/csrc/common/uart.cpp new file mode 100644 index 0000000..3c8d8cf --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/uart.cpp @@ -0,0 +1,106 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#include "common.h" +#include "stdlib.h" + +#define QUEUE_SIZE 1024 +static char queue[QUEUE_SIZE] = {}; +static int f = 0, r = 0; + +static void uart_enqueue(char ch) { + int next = (r + 1) % QUEUE_SIZE; + if (next != f) { + // not full + queue[r] = ch; + r = next; + } +} + +static int uart_dequeue(void) { + int k = 0; + if (f != r) { + k = queue[f]; + f = (f + 1) % QUEUE_SIZE; + } else { + static int last = 0; + k = "root\n"[last ++]; + if (last == 5) last = 0; + // generate a random key every 1s for pal + //k = -1;//"uiojkl"[rand()% 6]; + } + return k; +} + +uint32_t uptime(void); +uint8_t uart_getc() { + static uint32_t lasttime = 0; + uint32_t now = uptime(); + + uint8_t ch = -1; + if (now - lasttime > 60 * 1000) { + // 1 minute + eprintf(ANSI_COLOR_RED "now = %ds\n" ANSI_COLOR_RESET, now / 1000); + lasttime = now; + } + // if (now > 4 * 3600 * 1000) { // 4 hours + // ch = uart_dequeue(); + // } + return ch; +} + +extern "C" void uart_getc_legacy(uint8_t *ch) { + static uint32_t lasttime = 0; + uint32_t now = uptime(); + + *ch = -1; + if (now - lasttime > 60 * 1000) { + // 1 minute + eprintf(ANSI_COLOR_RED "now = %ds\n" ANSI_COLOR_RESET, now / 1000); + lasttime = now; + } + if (now > 4 * 3600 * 1000) { // 4 hours + *ch = uart_dequeue(); + } +} + +static void preset_input() { + char rtthread_cmd[128] = "memtrace\n"; + char init_cmd[128] = "2" // choose PAL + "jjjjjjjkkkkkk" // walk to enemy + ; + char busybox_cmd[128] = + "ls\n" + "echo 123\n" + "cd /root/benchmark\n" + "ls\n" + "./stream\n" + "ls\n" + "cd /root/redis\n" + "ls\n" + "ifconfig -a\n" + "./redis-server\n"; + char debian_cmd[128] = "root\n"; + char *buf = debian_cmd; + int i; + for (i = 0; i < strlen(buf); i ++) { + uart_enqueue(buf[i]); + } +} + +void init_uart(void) { + preset_input(); +} diff --git a/libraries/difftest/src/test/csrc/common/vga.cpp b/libraries/difftest/src/test/csrc/common/vga.cpp new file mode 100644 index 0000000..a001424 --- /dev/null +++ b/libraries/difftest/src/test/csrc/common/vga.cpp @@ -0,0 +1,59 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#include "common.h" + +#include + +//#define SHOW_SCREEN + +#define SCREEN_PORT 0x100 // Note that this is not the standard +#define SCREEN_MMIO 0x4100 +#define SCREEN_H 600 +#define SCREEN_W 800 + +static uint32_t vmem[800 * 600]; + +static SDL_Window *window; +static SDL_Renderer *renderer; +static SDL_Texture *texture; + +extern "C" void put_pixel(uint32_t pixel) { + static int i = 0; + vmem[i++] = pixel; + if (i >= 800 * 600) i = 0; +} + +extern "C" void vmem_sync(void) { +#ifndef SHOW_SCREEN + return; +#endif + SDL_UpdateTexture(texture, NULL, vmem, SCREEN_W * sizeof(uint32_t)); + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, texture, NULL, NULL); + SDL_RenderPresent(renderer); +} + +void init_sdl() { +#ifndef SHOW_SCREEN + return; +#endif + SDL_Init(SDL_INIT_VIDEO); + SDL_CreateWindowAndRenderer(SCREEN_W, SCREEN_H, 0, &window, &renderer); + SDL_SetWindowTitle(window, "NOOP"); + texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, + SDL_TEXTUREACCESS_STATIC, SCREEN_W, SCREEN_H); +} diff --git a/libraries/difftest/src/test/csrc/vcs/main.cpp b/libraries/difftest/src/test/csrc/vcs/main.cpp new file mode 100644 index 0000000..29a20a7 --- /dev/null +++ b/libraries/difftest/src/test/csrc/vcs/main.cpp @@ -0,0 +1,61 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#include +#include +#include "difftest.h" +#include "device.h" +#include "goldenmem.h" +#include "ram.h" + +static bool has_reset = false; +static char bin_file[64] = "ram.bin"; + +extern "C" void set_bin_file(char *s) { + strcpy(bin_file, s); +} + +extern "C" void simv_init() { + printf("simv compiled at %s, %s\n", __DATE__, __TIME__); + setlocale(LC_NUMERIC, ""); + + difftest_init(); + init_goldenmem(); + init_nemuproxy(); + init_device(); + + assert_init(); + init_ram(bin_file); + +} + +extern "C" int simv_step() { + if (assert_count > 0) { + return 1; + } + if (difftest_state() != -1) { + int trapCode = difftest_state(); + switch (trapCode) { + case 0: + eprintf(ANSI_COLOR_GREEN "HIT GOOD TRAP\n" ANSI_COLOR_RESET); + break; + default: + eprintf(ANSI_COLOR_RED "Unknown trap code: %d\n", trapCode); + } + return trapCode + 1; + } + return difftest_step(); +} diff --git a/libraries/difftest/src/test/csrc/verilator/emu.cpp b/libraries/difftest/src/test/csrc/verilator/emu.cpp new file mode 100644 index 0000000..6053e61 --- /dev/null +++ b/libraries/difftest/src/test/csrc/verilator/emu.cpp @@ -0,0 +1,649 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#include "emu.h" +#include "device.h" +#include "sdcard.h" +#include "difftest.h" +#include "nemuproxy.h" +#include "goldenmem.h" +#include "device.h" +#include +#include +#include +#include "ram.h" +#include "zlib.h" +#include "compress.h" +#include + +static inline void print_help(const char *file) { + printf("Usage: %s [OPTION...]\n", file); + printf("\n"); + printf(" -s, --seed=NUM use this seed\n"); + printf(" -C, --max-cycles=NUM execute at most NUM cycles\n"); + printf(" -I, --max-instr=NUM execute at most NUM instructions\n"); + printf(" -W, --warmup-instr=NUM the number of warmup instructions\n"); + printf(" -D, --stat-cycles=NUM the interval cycles of dumping statistics\n"); + printf(" -i, --image=FILE run with this image file\n"); + printf(" -b, --log-begin=NUM display log from NUM th cycle\n"); + printf(" -e, --log-end=NUM stop display log at NUM th cycle\n"); + printf(" --force-dump-result force dump performance counter result in the end\n"); + printf(" --load-snapshot=PATH load snapshot from PATH\n"); + printf(" --no-snapshot disable saving snapshots\n"); + printf(" --dump-wave dump waveform when log is enabled\n"); + printf(" --no-diff disable differential testing\n"); + printf(" --diff=PATH set the path of REF for differential testing\n"); + printf(" -h, --help print program help info\n"); + printf("\n"); +} + +inline EmuArgs parse_args(int argc, const char *argv[]) { + EmuArgs args; + int long_index = 0; + extern const char *difftest_ref_so; + const struct option long_options[] = { + { "load-snapshot", 1, NULL, 0 }, + { "dump-wave", 0, NULL, 0 }, + { "no-snapshot", 0, NULL, 0 }, + { "force-dump-result", 0, NULL, 0 }, + { "diff", 1, NULL, 0 }, + { "no-diff", 0, NULL, 0 }, + { "seed", 1, NULL, 's' }, + { "max-cycles", 1, NULL, 'C' }, + { "max-instr", 1, NULL, 'I' }, + { "warmup-instr", 1, NULL, 'W' }, + { "stat-cycles", 1, NULL, 'D' }, + { "image", 1, NULL, 'i' }, + { "log-begin", 1, NULL, 'b' }, + { "log-end", 1, NULL, 'e' }, + { "help", 0, NULL, 'h' }, + { 0, 0, NULL, 0 } + }; + + int o; + while ( (o = getopt_long(argc, const_cast(argv), + "-s:C:I:W:hi:m:b:e:", long_options, &long_index)) != -1) { + switch (o) { + case 0: + switch (long_index) { + case 0: args.snapshot_path = optarg; continue; + case 1: args.enable_waveform = true; continue; + case 2: args.enable_snapshot = false; continue; + case 3: args.force_dump_result = true; continue; + case 4: difftest_ref_so = optarg; continue; + case 5: args.enable_diff = false; continue; + } + // fall through + default: + print_help(argv[0]); + exit(0); + case 's': + if(std::string(optarg) != "NO_SEED") { + args.seed = atoll(optarg); + printf("Using seed = %d\n", args.seed); + } + break; + case 'C': args.max_cycles = atoll(optarg); break; + case 'I': args.max_instr = atoll(optarg); break; + case 'W': args.warmup_instr = atoll(optarg); break; + case 'D': args.stat_cycles = atoll(optarg); break; + case 'i': args.image = optarg; break; + case 'b': args.log_begin = atoll(optarg); break; + case 'e': args.log_end = atoll(optarg); break; + } + } + + Verilated::commandArgs(argc, argv); // Prepare extra args for TLMonitor + return args; +} + + +Emulator::Emulator(int argc, const char *argv[]): + dut_ptr(new VSimTop), + cycles(0), trapCode(STATE_RUNNING) +{ + args = parse_args(argc, argv); + + // srand + srand(args.seed); + srand48(args.seed); + Verilated::randReset(2); + assert_init(); + + // init core + reset_ncycles(10); + + // init ram + init_ram(args.image); + + difftest_init(); + init_device(); + if (args.enable_diff) { + init_goldenmem(); + init_nemuproxy(); + } + +#if VM_TRACE == 1 +#ifndef EN_FORKWAIT + enable_waveform = args.enable_waveform; + if (enable_waveform) { + Verilated::traceEverOn(true); // Verilator must compute traced signals + tfp = new VerilatedVcdC; + dut_ptr->trace(tfp, 99); // Trace 99 levels of hierarchy + time_t now = time(NULL); + tfp->open(waveform_filename(now)); // Open the dump file + } +#else + // VM_TRACE =1 && EN_FORKWAIT + enable_waveform = false; +#endif +#else + // VM_TRACE =0 + enable_waveform = false; +#endif + +#ifdef VM_SAVABLE + if (args.snapshot_path != NULL) { + printf("loading from snapshot `%s`...\n", args.snapshot_path); + snapshot_load(args.snapshot_path); + auto cycleCnt = difftest[0]->get_trap_event()->cycleCnt; + printf("model cycleCnt = %" PRIu64 "\n", cycleCnt); + } +#endif + + // set log time range and log level + dut_ptr->io_logCtrl_log_begin = args.log_begin; + dut_ptr->io_logCtrl_log_end = args.log_end; +} + +Emulator::~Emulator() { + ram_finish(); + assert_finish(); + +#ifdef VM_SAVABLE + if (args.enable_snapshot && trapCode != STATE_GOODTRAP && trapCode != STATE_LIMIT_EXCEEDED) { + printf("Saving snapshots to file system. Please wait.\n"); + snapshot_slot[0].save(); + snapshot_slot[1].save(); + printf("Please remove unused snapshots manually\n"); + } +#endif +} + +inline void Emulator::reset_ncycles(size_t cycles) { + for(int i = 0; i < cycles; i++) { + dut_ptr->reset = 1; + dut_ptr->clock = 0; + dut_ptr->eval(); + dut_ptr->clock = 1; + dut_ptr->eval(); + dut_ptr->reset = 0; + } +} + +inline void Emulator::single_cycle() { + dut_ptr->clock = 0; + dut_ptr->eval(); + +#ifdef WITH_DRAMSIM3 + axi_channel axi; + axi_copy_from_dut_ptr(dut_ptr, axi); + axi.aw.addr -= 0x80000000UL; + axi.ar.addr -= 0x80000000UL; + dramsim3_helper_rising(axi); +#endif + + dut_ptr->clock = 1; + dut_ptr->eval(); + +#ifdef WITH_DRAMSIM3 + axi_copy_from_dut_ptr(dut_ptr, axi); + axi.aw.addr -= 0x80000000UL; + axi.ar.addr -= 0x80000000UL; + dramsim3_helper_falling(axi); + axi_set_dut_ptr(dut_ptr, axi); +#endif + +#if VM_TRACE == 1 + if (enable_waveform) { + auto trap = difftest[0]->get_trap_event(); + uint64_t cycle = trap->cycleCnt; + uint64_t begin = dut_ptr->io_logCtrl_log_begin; + uint64_t end = dut_ptr->io_logCtrl_log_end; + bool in_range = (begin <= cycle) && (cycle <= end); + if (in_range) { tfp->dump(cycle); } + } +#endif + + if (dut_ptr->io_uart_out_valid) { + printf("%c", dut_ptr->io_uart_out_ch); + fflush(stdout); + } + if (dut_ptr->io_uart_in_valid) { + extern uint8_t uart_getc(); + dut_ptr->io_uart_in_ch = uart_getc(); + } + + cycles++; +} + +uint64_t Emulator::execute(uint64_t max_cycle, uint64_t max_instr) { + + uint32_t t = uptime(); + uint32_t lasttime_poll = 0; + uint32_t lasttime_snapshot = 0; + uint64_t core_max_instr[NUM_CORES]; + for (int i = 0; i < NUM_CORES; i++) { + core_max_instr[i] = max_instr; + } + +#ifdef EN_FORKWAIT + printf("[INFO] enable fork wait..\n"); + pid_t pid =-1; + pid_t originPID = getpid(); + int status = -1; + int slotCnt = 1; + int waitProcess = 0; + uint32_t timer = 0; + std::list pidSlot = {}; + enable_waveform = false; + + //first process as a control process + if ((pid = fork()) < 0) { + perror("First fork failed..\n"); + FAIT_EXIT; + } else if (pid > 0) { //parent process + printf("[%d] Control process first fork...child: %d\n ", getpid(), pid); + prctl(PR_SET_CHILD_SUBREAPER, 1, 0, 0, 0); + forkshm.shwait(); + printf("[%d] Simulation finished, Control process exit..", getpid()); + return cycles; + } else { + forkshm.info->exitNum++; + forkshm.info->flag = true; + pidSlot.insert(pidSlot.begin(), getpid()); + } +#endif + +#if VM_COVERAGE == 1 + // we dump coverage into files at the end + // since we are not sure when an emu will stop + // we distinguish multiple dat files by emu start time + time_t coverage_start_time = time(NULL); +#endif + + while (!Verilated::gotFinish() && trapCode == STATE_RUNNING) { + t = uptime(); + + if (t - lasttime_poll > 100) { + poll_event(); + lasttime_poll = t; + } + + // cycle limitation + if (!max_cycle) { + trapCode = STATE_LIMIT_EXCEEDED; + break; + } + // instruction limitation + for (int i = 0; i < NUM_CORES; i++) { + auto trap = difftest[i]->get_trap_event(); + if (trap->instrCnt >= core_max_instr[i]) { + trapCode = STATE_LIMIT_EXCEEDED; + break; + } + } + // assertions + if (assert_count > 0) { + eprintf("The simulation stopped. There might be some assertion failed.\n"); + trapCode = STATE_ABORT; + break; + } + // signals + if (signal_num != 0) { + trapCode = STATE_SIG; + } + if (trapCode != STATE_RUNNING) { + break; + } + + for (int i = 0; i < NUM_CORES; i++) { + auto trap = difftest[i]->get_trap_event(); + if (trap->instrCnt >= args.warmup_instr) { + printf("Warmup finished. The performance counters will be dumped and then reset.\n"); + dut_ptr->io_perfInfo_clean = 1; + dut_ptr->io_perfInfo_dump = 1; + args.warmup_instr = -1; + } + if (trap->cycleCnt % args.stat_cycles == args.stat_cycles - 1) { + dut_ptr->io_perfInfo_clean = 1; + dut_ptr->io_perfInfo_dump = 1; + } + } + + single_cycle(); + + max_cycle --; + dut_ptr->io_perfInfo_clean = 0; + dut_ptr->io_perfInfo_dump = 0; + + if (args.enable_diff) { + trapCode = difftest_state(); + if (trapCode != STATE_RUNNING) break; + if (difftest_step()) { + trapCode = STATE_ABORT; + break; + } + } + +#ifdef VM_SAVABLE + static int snapshot_count = 0; + if (args.enable_snapshot && trapCode != STATE_GOODTRAP && t - lasttime_snapshot > 1000 * SNAPSHOT_INTERVAL) { + time_t now = time(NULL); + snapshot_save(snapshot_filename(now)); + lasttime_snapshot = t; + // dump one snapshot to file every 60 snapshots + snapshot_count++; + if (snapshot_count == 60) { + snapshot_slot[0].save(); + snapshot_count = 0; + } + } +#endif + +#ifdef EN_FORKWAIT + timer = uptime(); + if (timer - lasttime_snapshot > 1000 * FORK_INTERVAL && !waitProcess) { // time out need to fork + lasttime_snapshot = timer; + if (slotCnt == SLOT_SIZE) { // kill first wait process + pid_t temp = pidSlot.back(); + pidSlot.pop_back(); + kill(temp, SIGKILL); + slotCnt--; + forkshm.info->exitNum--; + } + // fork-wait + if ((pid = fork()) < 0) { + eprintf("[%d]Error: could not fork process!\n",getpid()); + return -1; + } else if (pid != 0) { // father fork and wait. + waitProcess = 1; + wait(&status); + enable_waveform = forkshm.info->resInfo != STATE_GOODTRAP; + if (enable_waveform) { + Verilated::traceEverOn(true); // Verilator must compute traced signals + tfp = new VerilatedVcdC; + dut_ptr->trace(tfp, 99); // Trace 99 levels of hierarchy + time_t now = time(NULL); + tfp->open(waveform_filename(now)); // Open the dump file + } + } else { //child insert its pid + slotCnt++; + forkshm.info->exitNum++; + pidSlot.insert(pidSlot.begin(), getpid()); + } + } +#endif +} + +#if VM_TRACE == 1 + if (enable_waveform) tfp->close(); +#endif + +#if VM_COVERAGE == 1 + save_coverage(coverage_start_time); +#endif + +#ifdef EN_FORKWAIT + if(!waitProcess) display_trapinfo(); + else printf("[%d] checkpoint process: dump wave complete, exit.\n",getpid()); + forkshm.info->exitNum--; + forkshm.info->resInfo = trapCode; +#endif + + display_trapinfo(); + + return cycles; +} + + +inline char* Emulator::timestamp_filename(time_t t, char *buf) { + char buf_time[64]; + strftime(buf_time, sizeof(buf_time), "%F@%T", localtime(&t)); + char *noop_home = getenv("NOOP_HOME"); + assert(noop_home != NULL); + int len = snprintf(buf, 1024, "%s/build/%s", noop_home, buf_time); + return buf + len; +} + +#ifdef VM_SAVABLE +inline char* Emulator::snapshot_filename(time_t t) { + static char buf[1024]; + char *p = timestamp_filename(t, buf); + strcpy(p, ".snapshot"); + return buf; +} +#endif + + +inline char* Emulator::waveform_filename(time_t t) { + static char buf[1024]; + char *p = timestamp_filename(t, buf); + strcpy(p, ".vcd"); + printf("dump wave to %s...\n", buf); + return buf; +} + + +#if VM_COVERAGE == 1 +inline char* Emulator::coverage_filename(time_t t) { + static char buf[1024]; + char *p = timestamp_filename(t, buf); + strcpy(p, ".coverage.dat"); + return buf; +} + +inline void Emulator::save_coverage(time_t t) { + char *p = coverage_filename(t); + VerilatedCov::write(p); +} +#endif + +void Emulator::trigger_stat_dump() { + dut_ptr->io_perfInfo_dump = 1; + if(get_args().force_dump_result) { + dut_ptr->io_logCtrl_log_end = -1; + } + single_cycle(); +} + +void Emulator::display_trapinfo() { + for (int i = 0; i < NUM_CORES; i++) { + printf("Core %d: ", i); + auto trap = difftest[i]->get_trap_event(); + uint64_t pc = trap->pc; + uint64_t instrCnt = trap->instrCnt; + uint64_t cycleCnt = trap->cycleCnt; + + switch (trapCode) { + case STATE_GOODTRAP: + eprintf(ANSI_COLOR_GREEN "HIT GOOD TRAP at pc = 0x%" PRIx64 "\n" ANSI_COLOR_RESET, pc); + break; + case STATE_BADTRAP: + eprintf(ANSI_COLOR_RED "HIT BAD TRAP at pc = 0x%" PRIx64 "\n" ANSI_COLOR_RESET, pc); + break; + case STATE_ABORT: + eprintf(ANSI_COLOR_RED "ABORT at pc = 0x%" PRIx64 "\n" ANSI_COLOR_RESET, pc); + break; + case STATE_LIMIT_EXCEEDED: + eprintf(ANSI_COLOR_YELLOW "EXCEEDING CYCLE/INSTR LIMIT at pc = 0x%" PRIx64 "\n" ANSI_COLOR_RESET, pc); + break; + case STATE_SIG: + eprintf(ANSI_COLOR_YELLOW "SOME SIGNAL STOPS THE PROGRAM at pc = 0x%" PRIx64 "\n" ANSI_COLOR_RESET, pc); + break; + default: + eprintf(ANSI_COLOR_RED "Unknown trap code: %d\n", trapCode); + } + + double ipc = (double)instrCnt / cycleCnt; + eprintf(ANSI_COLOR_MAGENTA "total guest instructions = %'" PRIu64 "\n" ANSI_COLOR_RESET, instrCnt); + eprintf(ANSI_COLOR_MAGENTA "instrCnt = %'" PRIu64 ", cycleCnt = %'" PRIu64 ", IPC = %lf\n" ANSI_COLOR_RESET, + instrCnt, cycleCnt, ipc); + } + + if (trapCode != STATE_ABORT) { + trigger_stat_dump(); + } +} + +#ifdef EN_FORKWAIT +ForkShareMemory::ForkShareMemory() { + if ((key_n = ftok(".", 's') < 0)) { + perror("Fail to ftok\n"); + FAIT_EXIT + } + printf("key num:%d\n", key_n); + + if ((shm_id = shmget(key_n, 1024, 0666 | IPC_CREAT))==-1) { + perror("shmget failed...\n"); + FAIT_EXIT + } + printf("share memory id:%d\n", shm_id); + + if ((info = (shinfo*)(shmat(shm_id, NULL, 0))) == NULL ) { + perror("shmat failed...\n"); + FAIT_EXIT + } + + info->exitNum = 0; + info->flag = false; + info->resInfo = -1; //STATE_RUNNING +} + +ForkShareMemory::~ForkShareMemory() { + if (shmdt(info) == -1) { + perror("detach error\n"); + } + shmctl(shm_id, IPC_RMID, NULL); +} + +void ForkShareMemory::shwait() { + while (true) { + if (info->exitNum == 0 && info->flag) { + break; + } + else { + sleep(WAIT_INTERVAL); + } + } +} +#endif + +#ifdef VM_SAVABLE + +// currently only support single core snapshot +#if NUM_CORES != 1 + #error "unsupported multicore" +#endif + +void Emulator::snapshot_save(const char *filename) { + static int last_slot = 0; + VerilatedSaveMem &stream = snapshot_slot[last_slot]; + last_slot = !last_slot; + + stream.init(filename); + stream << *dut_ptr; + stream.flush(); + + long size = get_ram_size(); + stream.unbuf_write(&size, sizeof(size)); + stream.unbuf_write(get_ram_start(), size); + + auto diff = difftest[0]; + uint64_t cycleCnt = diff->get_trap_event()->cycleCnt; + stream.unbuf_write(&cycleCnt, sizeof(cycleCnt)); + + auto proxy = diff->proxy; + + uint64_t ref_r[DIFFTEST_NR_REG]; + proxy->regcpy(&ref_r, REF_TO_DUT); + stream.unbuf_write(ref_r, sizeof(ref_r)); + + char *buf = (char *)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); + proxy->memcpy(0x80000000, buf, size, DIFFTEST_TO_DUT); + stream.unbuf_write(buf, size); + munmap(buf, size); + + struct SyncState sync_mastate; + proxy->uarchstatus_cpy(&sync_mastate, REF_TO_DUT); + stream.unbuf_write(&sync_mastate, sizeof(struct SyncState)); + + uint64_t csr_buf[4096]; + proxy->csrcpy(csr_buf, REF_TO_DIFFTEST); + stream.unbuf_write(&csr_buf, sizeof(csr_buf)); + + long sdcard_offset; + if(fp) + sdcard_offset = ftell(fp); + else + sdcard_offset = 0; + stream.unbuf_write(&sdcard_offset, sizeof(sdcard_offset)); + + // actually write to file in snapshot_finalize() +} + +void Emulator::snapshot_load(const char *filename) { + VerilatedRestoreMem stream; + stream.open(filename); + stream >> *dut_ptr; + + long size; + stream.read(&size, sizeof(size)); + assert(size == get_ram_size()); + stream.read(get_ram_start(), size); + + auto diff = difftest[0]; + uint64_t *cycleCnt = &(diff->get_trap_event()->cycleCnt); + stream.read(cycleCnt, sizeof(*cycleCnt)); + + auto proxy = diff->proxy; + + uint64_t ref_r[DIFFTEST_NR_REG]; + stream.read(ref_r, sizeof(ref_r)); + proxy->regcpy(&ref_r, DUT_TO_REF); + + char *buf = (char *)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); + stream.read(buf, size); + proxy->memcpy(0x80000000, buf, size, DIFFTEST_TO_REF); + munmap(buf, size); + + struct SyncState sync_mastate; + stream.read(&sync_mastate, sizeof(struct SyncState)); + proxy->uarchstatus_cpy(&sync_mastate, DUT_TO_REF); + + uint64_t csr_buf[4096]; + stream.read(&csr_buf, sizeof(csr_buf)); + proxy->csrcpy(csr_buf, DIFFTEST_TO_REF); + + long sdcard_offset = 0; + stream.read(&sdcard_offset, sizeof(sdcard_offset)); + if(fp) + fseek(fp, sdcard_offset, SEEK_SET); + + // No one uses snapshot when !has_commit, isn't it? + has_commit = 1; +} +#endif diff --git a/libraries/difftest/src/test/csrc/verilator/emu.h b/libraries/difftest/src/test/csrc/verilator/emu.h new file mode 100644 index 0000000..e513cb9 --- /dev/null +++ b/libraries/difftest/src/test/csrc/verilator/emu.h @@ -0,0 +1,142 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#ifndef __EMU_H +#define __EMU_H + +#include "common.h" +#include "snapshot.h" +#include "VSimTop.h" +#include // Trace file format header +#include +#include +#include +#include +#include +#include +#include + +#define FORK_INTERVAL 10 // unit: second +#define SLOT_SIZE 3 +#define FAIT_EXIT exit(EXIT_FAILURE); +#define WAIT_INTERVAL 1 +#define SNAPSHOT_INTERVAL 60 // unit: second + +typedef struct shinfo{ + int exitNum; + int resInfo; + bool flag; +} shinfo; + +class ForkShareMemory{ + //private + key_t key_n ; + int shm_id; + +public: + shinfo *info; + + ForkShareMemory(); + ~ForkShareMemory(); + + void shwait(); +}; + + +struct EmuArgs { + uint32_t seed; + uint64_t max_cycles; + uint64_t max_instr; + uint64_t warmup_instr; + uint64_t stat_cycles; + uint64_t log_begin, log_end; + const char *image; + const char *snapshot_path; + bool enable_waveform; + bool enable_snapshot; + bool force_dump_result; + bool enable_diff; + + EmuArgs() { + seed = 0; + max_cycles = -1; + max_instr = -1; + warmup_instr = -1; + stat_cycles = -1; + log_begin = 1; + log_end = -1; + snapshot_path = NULL; + image = NULL; + enable_waveform = false; + enable_snapshot = true; + force_dump_result = false; + enable_diff = true; + } +}; + +class Emulator { +private: + VSimTop *dut_ptr; + VerilatedVcdC* tfp; + bool enable_waveform; +#ifdef VM_SAVABLE + VerilatedSaveMem snapshot_slot[2]; +#endif + EmuArgs args; +#ifdef EN_FORKWAIT + ForkShareMemory forkshm; +#endif + + enum { + STATE_GOODTRAP = 0, + STATE_BADTRAP = 1, + STATE_ABORT = 2, + STATE_LIMIT_EXCEEDED = 3, + STATE_SIG = 4, + STATE_RUNNING = -1 + }; + + // emu control variable + uint64_t cycles; + int trapCode; + + inline void reset_ncycles(size_t cycles); + inline void single_cycle(); + void trigger_stat_dump(); + void display_trapinfo(); + inline char* timestamp_filename(time_t t, char *buf); + inline char* snapshot_filename(time_t t); + inline char* coverage_filename(time_t t); + void snapshot_save(const char *filename); + void snapshot_load(const char *filename); + inline char* waveform_filename(time_t t); +#if VM_COVERAGE == 1 + inline void save_coverage(time_t t); +#endif + +public: + Emulator(int argc, const char *argv[]); + ~Emulator(); + uint64_t execute(uint64_t max_cycle, uint64_t max_instr); + uint64_t get_cycles() const { return cycles; } + EmuArgs get_args() const { return args; } + bool is_good_trap() { + return trapCode == STATE_GOODTRAP || trapCode == STATE_LIMIT_EXCEEDED; + }; + int get_trapcode() { return trapCode; } +}; + +#endif diff --git a/libraries/difftest/src/test/csrc/verilator/main.cpp b/libraries/difftest/src/test/csrc/verilator/main.cpp new file mode 100644 index 0000000..f226e8f --- /dev/null +++ b/libraries/difftest/src/test/csrc/verilator/main.cpp @@ -0,0 +1,59 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#include +#include +#include +#include "emu.h" + +static char mybuf[BUFSIZ]; + +// junk, link for verilator +std::function get_sc_time_stamp = []() -> double { return 0; }; +double sc_time_stamp() { return get_sc_time_stamp(); } + +int main(int argc, const char** argv) { + printf("Emu compiled at %s, %s\n", __DATE__, __TIME__); + + setbuf(stderr, mybuf); + + // enable thousands separator for printf() + setlocale(LC_NUMERIC, ""); + + if (signal(SIGINT, sig_handler) == SIG_ERR) { + printf("\ncan't catch SIGINT\n"); + } + + auto emu = new Emulator(argc, argv); + + get_sc_time_stamp = [&emu]() -> double { + return emu->get_cycles(); + }; + + auto args = emu->get_args(); + uint64_t cycles = emu->execute(args.max_cycles, args.max_instr); + bool is_good_trap = emu->is_good_trap(); + delete emu; + + extern uint32_t uptime(void); + uint32_t ms = uptime(); + + eprintf(ANSI_COLOR_BLUE "Seed=%d Guest cycle spent: %'" PRIu64 + " (this will be different from cycleCnt if emu loads a snapshot)\n" ANSI_COLOR_RESET, args.seed, cycles); + eprintf(ANSI_COLOR_BLUE "Host time spent: %'dms\n" ANSI_COLOR_RESET, ms); + + return !is_good_trap; +} diff --git a/libraries/difftest/src/test/csrc/verilator/snapshot.cpp b/libraries/difftest/src/test/csrc/verilator/snapshot.cpp new file mode 100644 index 0000000..c63e723 --- /dev/null +++ b/libraries/difftest/src/test/csrc/verilator/snapshot.cpp @@ -0,0 +1,142 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#include "snapshot.h" +#include "compress.h" + +#ifdef VM_SAVABLE + +void VerilatedSaveMem::flush() { + long flush_size = m_cp - m_bufp; + assert(buf_size - size > flush_size); + memcpy(buf + size, m_bufp, flush_size); + size += flush_size; + m_cp = m_bufp; +} + +void VerilatedSaveMem::save() { + if (size == 0) return; + trailer(); + flush(); + auto saved_filename = m_filename; + if (size <= (512 * 1024 * 1024UL)) { + FILE *fp = fopen(saved_filename.c_str(), "w"); + assert(fp != NULL); + fwrite(buf, size, 1, fp); + fclose(fp); + } + else { + saved_filename = saved_filename + ".gz"; + // timeval s, e; + // gettimeofday(&s, NULL); + snapshot_compressToFile(buf, saved_filename.c_str(), size); + // gettimeofday(&e, NULL); + // printf("Compress cost time (msec.usec): %lf\n", calcTime(s, e)); + } + size = 0; + printf("save snapshot to %s...\n", saved_filename.c_str()); +} + +void VerilatedRestoreMem::fill() { + m_assertOne.check(); + if (VL_UNLIKELY(!isOpen())) return; + // Move remaining characters down to start of buffer. (No memcpy, overlaps allowed) + vluint8_t* rp = m_bufp; + for (vluint8_t* sp = m_cp; sp < m_endp; *rp++ = *sp++) {} // Overlaps + m_endp = m_bufp + (m_endp - m_cp); + m_cp = m_bufp; // Reset buffer + // Read into buffer starting at m_endp + while (true) { + ssize_t remaining = (m_bufp + bufferSize() - m_endp); + if (remaining == 0) break; + errno = 0; + ssize_t got = unbuf_read(m_endp, remaining); + if (got > 0) { + m_endp += got; + } else if (VL_UNCOVERABLE(got < 0)) { + if (VL_UNCOVERABLE(errno != EAGAIN && errno != EINTR)) { + // LCOV_EXCL_START + // write failed, presume error (perhaps out of disk space) + std::string msg = std::string(__FUNCTION__) + ": " + strerror(errno); + VL_FATAL_MT("", 0, "", msg.c_str()); + close(); + break; + // LCOV_EXCL_STOP + } + } else { // got==0, EOF + // Fill buffer from here to end with NULLs so reader's don't + // need to check eof each character. + while (m_endp < m_bufp + bufferSize()) *m_endp++ = '\0'; + break; + } + } +} + +void VerilatedRestoreMem::open(const char* filename) { + m_assertOne.check(); + if (isOpen()) return; + VL_DEBUG_IF(VL_DBG_MSGF("- restore: opening restore file %s\n", filenamep);); + + if (VL_UNCOVERABLE(filename[0] == '|')) { + assert(0); // LCOV_EXCL_LINE // Not supported yet. + } else { + if(isGzFile(filename)) { + timeval s, e; + gettimeofday(&s, NULL); + size = readFromGz(buf, filename, buf_size, LOAD_SNAPSHOT); + gettimeofday(&e, NULL); + // printf("Uncompress cost time (msec.usec): %lf\n", calcTime(s, e)); + assert(size > 0); + } else { + FILE *fp = fopen(filename, "r"); + assert(fp != NULL); + + fseek(fp, 0, SEEK_END); + size = ftell(fp); + rewind(fp); + assert(fread(buf, size, 1, fp) > 0); + fclose(fp); + } + } + m_isOpen = true; + m_filename = filename; + m_cp = m_bufp; + m_endp = m_bufp; + header(); +} + +void VerilatedRestoreMem::close() { + if (!isOpen()) return; + trailer(); + flush(); + m_isOpen = false; +} + +long VerilatedRestoreMem::unbuf_read(uint8_t* dest, long rsize) { + assert(rsize > 0); + assert(buf_size > 0); + assert(buf_ptr >= 0); + if(buf_ptr + rsize > size) { + rsize = size - buf_ptr; + } + for(long i = 0; i < rsize; i++) { + dest[i] = buf[buf_ptr + i]; + } + buf_ptr += rsize; + + return rsize; +} +#endif diff --git a/libraries/difftest/src/test/csrc/verilator/snapshot.h b/libraries/difftest/src/test/csrc/verilator/snapshot.h new file mode 100644 index 0000000..a9bf65d --- /dev/null +++ b/libraries/difftest/src/test/csrc/verilator/snapshot.h @@ -0,0 +1,95 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +#ifndef SNAPSHOT_H +#define SNAPSHOT_H + +#ifdef VM_SAVABLE +#include "VSimTop.h" +#include +#include +#include "compress.h" +#include "ram.h" + +#define SNAPSHOT_SIZE (3UL * EMU_RAM_SIZE) + +class VerilatedSaveMem : public VerilatedSerialize { + const static long buf_size = SNAPSHOT_SIZE; + uint8_t *buf = NULL; + long size; + +public: + VerilatedSaveMem() { + buf = NULL; + size = 0; + } + ~VerilatedSaveMem() { } + + void init(const char *filename) { + if (buf != NULL) { + munmap(buf, SNAPSHOT_SIZE); + buf = NULL; + } + buf = (uint8_t*)mmap(NULL, buf_size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); + if (buf == (uint8_t *)MAP_FAILED) { + printf("Cound not mmap 0x%lx bytes\n", SNAPSHOT_SIZE); + assert(0); + } + size = 0; + m_filename = filename; + header(); + } + + void unbuf_write(const void* __restrict datap, size_t size) VL_MT_UNSAFE_ONE { + nonzero_large_memcpy(buf + this->size, datap, size); + this->size += size; + } + + void close() { } + void flush(); + void save(); +}; + +class VerilatedRestoreMem : public VerilatedDeserialize { + const static long buf_size = SNAPSHOT_SIZE; + uint8_t *buf; + long size, buf_ptr; + // gzFile compressed_mem; + +public: + VerilatedRestoreMem() { + buf = (uint8_t*)mmap(NULL, buf_size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); + if (buf == (uint8_t *)MAP_FAILED) { + printf("Cound not mmap 0x%lx bytes\n", SNAPSHOT_SIZE); + assert(0); + } + size = 0; + buf_ptr = 0; + } + ~VerilatedRestoreMem() { close(); } + + void open(const char* filenamep) VL_MT_UNSAFE_ONE; + void open(const std::string& filename) VL_MT_UNSAFE_ONE { open(filename.c_str()); } + + long unbuf_read(uint8_t* dest, long rsize); + + void close() override VL_MT_UNSAFE_ONE; + void flush() override VL_MT_UNSAFE_ONE {} + void fill() override VL_MT_UNSAFE_ONE; +}; +#endif + +#endif diff --git a/libraries/difftest/src/test/vsrc/common/assert.v b/libraries/difftest/src/test/vsrc/common/assert.v new file mode 100644 index 0000000..f84d946 --- /dev/null +++ b/libraries/difftest/src/test/vsrc/common/assert.v @@ -0,0 +1,20 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +import "DPI-C" function void xs_assert +( + input longint line +); diff --git a/libraries/difftest/src/test/vsrc/common/difftest.v b/libraries/difftest/src/test/vsrc/common/difftest.v new file mode 100644 index 0000000..3c37a55 --- /dev/null +++ b/libraries/difftest/src/test/vsrc/common/difftest.v @@ -0,0 +1,590 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +`define DIFFTEST_DPIC_FUNC_NAME(name) \ + v_difftest_``name + +`define DIFFTEST_DPIC_FUNC_DECL(name) \ + import "DPI-C" function void `DIFFTEST_DPIC_FUNC_NAME(name) + +`define DIFFTEST_MOD_NAME(name) \ + Difftest``name + +`define DIFFTEST_MOD_DECL(name) \ + module `DIFFTEST_MOD_NAME(name) + +`define DIFFTEST_MOD_DPIC_CALL_BEGIN(name) \ + always @(posedge clock) begin \ + `DIFFTEST_DPIC_FUNC_NAME(name) + +`define DIFFTEST_MOD_DPIC_CALL_BEGIN_WITH_EN(enable, name) \ + always @(posedge clock) begin \ + if (enable) begin \ + `DIFFTEST_DPIC_FUNC_NAME(name) + +`define DIFFTEST_MOD_DPIC_CALL_END(name) \ + ; end + +`define DIFFTEST_MOD_DPIC_CALL_END_WITH_EN(name) \ + ; end end + +`define DPIC_ARG_BIT input bit +`define DPIC_ARG_BYTE input byte +`define DPIC_ARG_INT input int +`define DPIC_ARG_LONG input longint + +// DifftestArchEvent +`DIFFTEST_DPIC_FUNC_DECL(ArchEvent) ( + `DPIC_ARG_BYTE coreid, + `DPIC_ARG_INT intrNo, + `DPIC_ARG_INT cause, + `DPIC_ARG_LONG exceptionPC +); +`DIFFTEST_MOD_DECL(ArchEvent) ( + input clock, + input [ 7:0] coreid, + input [31:0] intrNO, + input [31:0] cause, + input [63:0] exceptionPC +); + `DIFFTEST_MOD_DPIC_CALL_BEGIN(ArchEvent) ( + coreid, intrNO, cause, exceptionPC + ) `DIFFTEST_MOD_DPIC_CALL_END(ArchEvent) +endmodule + +// DifftestInstrCommit +`DIFFTEST_DPIC_FUNC_DECL(InstrCommit) ( + `DPIC_ARG_BYTE coreid, + `DPIC_ARG_BYTE index, + `DPIC_ARG_BIT valid, + `DPIC_ARG_LONG pc, + `DPIC_ARG_INT instr, + `DPIC_ARG_BIT skip, + `DPIC_ARG_BIT isRVC, + `DPIC_ARG_BIT scFailed, + `DPIC_ARG_BIT wen, + `DPIC_ARG_BYTE wdest, + `DPIC_ARG_LONG wdata +); +`DIFFTEST_MOD_DECL(InstrCommit)( + input clock, + input [ 7:0] coreid, + input [ 7:0] index, + input valid, + input [63:0] pc, + input [31:0] instr, + input skip, + input isRVC, + input scFailed, + input wen, + input [ 7:0] wdest, + input [63:0] wdata +); + `DIFFTEST_MOD_DPIC_CALL_BEGIN_WITH_EN(valid, InstrCommit) ( + coreid, index, + valid, pc, instr, skip, isRVC, scFailed, wen, wdest, wdata + ) `DIFFTEST_MOD_DPIC_CALL_END_WITH_EN(InstrCommit) +endmodule + +// DifftesTrapEvent +`DIFFTEST_DPIC_FUNC_DECL(TrapEvent) ( + `DPIC_ARG_BYTE coreid, + `DPIC_ARG_BIT valid, + `DPIC_ARG_BYTE code, + `DPIC_ARG_LONG pc, + `DPIC_ARG_LONG cycleCnt, + `DPIC_ARG_LONG instrCnt +); +`DIFFTEST_MOD_DECL(TrapEvent)( + input clock, + input [ 7:0] coreid, + input valid, + input [ 2:0] code, + input [63:0] pc, + input [63:0] cycleCnt, + input [63:0] instrCnt +); + `DIFFTEST_MOD_DPIC_CALL_BEGIN(TrapEvent) ( + coreid, valid, {5'd0, code}, pc, cycleCnt, instrCnt + ) `DIFFTEST_MOD_DPIC_CALL_END(TrapEvent) +endmodule + +// DifftestCSRState +`DIFFTEST_DPIC_FUNC_DECL(CSRState) ( + `DPIC_ARG_BYTE coreid, + `DPIC_ARG_BYTE priviledgeMode, + `DPIC_ARG_LONG mstatus, + `DPIC_ARG_LONG sstatus, + `DPIC_ARG_LONG mepc, + `DPIC_ARG_LONG sepc, + `DPIC_ARG_LONG mtval, + `DPIC_ARG_LONG stval, + `DPIC_ARG_LONG mtvec, + `DPIC_ARG_LONG stvec, + `DPIC_ARG_LONG mcause, + `DPIC_ARG_LONG scause, + `DPIC_ARG_LONG satp, + `DPIC_ARG_LONG mip, + `DPIC_ARG_LONG mie, + `DPIC_ARG_LONG mscratch, + `DPIC_ARG_LONG sscratch, + `DPIC_ARG_LONG mideleg, + `DPIC_ARG_LONG medeleg +); +`DIFFTEST_MOD_DECL(CSRState)( + input clock, + input [ 7:0] coreid, + input [ 1:0] priviledgeMode, + input [63:0] mstatus, + input [63:0] sstatus, + input [63:0] mepc, + input [63:0] sepc, + input [63:0] mtval, + input [63:0] stval, + input [63:0] mtvec, + input [63:0] stvec, + input [63:0] mcause, + input [63:0] scause, + input [63:0] satp, + input [63:0] mip, + input [63:0] mie, + input [63:0] mscratch, + input [63:0] sscratch, + input [63:0] mideleg, + input [63:0] medeleg +); + `DIFFTEST_MOD_DPIC_CALL_BEGIN(CSRState) ( + coreid, {6'd0, priviledgeMode}, + mstatus, sstatus, mepc, sepc, mtval, stval, mtvec, stvec, + mcause, scause, satp, mip, mie, mscratch, sscratch, mideleg, medeleg + ) `DIFFTEST_MOD_DPIC_CALL_END(CSRState) +endmodule + +// DifftestArchIntRegState +`DIFFTEST_DPIC_FUNC_DECL(ArchIntRegState) ( + `DPIC_ARG_BYTE coreid, + `DPIC_ARG_LONG gpr_0, + `DPIC_ARG_LONG gpr_1, + `DPIC_ARG_LONG gpr_2, + `DPIC_ARG_LONG gpr_3, + `DPIC_ARG_LONG gpr_4, + `DPIC_ARG_LONG gpr_5, + `DPIC_ARG_LONG gpr_6, + `DPIC_ARG_LONG gpr_7, + `DPIC_ARG_LONG gpr_8, + `DPIC_ARG_LONG gpr_9, + `DPIC_ARG_LONG gpr_10, + `DPIC_ARG_LONG gpr_11, + `DPIC_ARG_LONG gpr_12, + `DPIC_ARG_LONG gpr_13, + `DPIC_ARG_LONG gpr_14, + `DPIC_ARG_LONG gpr_15, + `DPIC_ARG_LONG gpr_16, + `DPIC_ARG_LONG gpr_17, + `DPIC_ARG_LONG gpr_18, + `DPIC_ARG_LONG gpr_19, + `DPIC_ARG_LONG gpr_20, + `DPIC_ARG_LONG gpr_21, + `DPIC_ARG_LONG gpr_22, + `DPIC_ARG_LONG gpr_23, + `DPIC_ARG_LONG gpr_24, + `DPIC_ARG_LONG gpr_25, + `DPIC_ARG_LONG gpr_26, + `DPIC_ARG_LONG gpr_27, + `DPIC_ARG_LONG gpr_28, + `DPIC_ARG_LONG gpr_29, + `DPIC_ARG_LONG gpr_30, + `DPIC_ARG_LONG gpr_31 +); +`DIFFTEST_MOD_DECL(ArchIntRegState)( + input clock, + input [ 7:0] coreid, + input [63:0] gpr_0, + input [63:0] gpr_1, + input [63:0] gpr_2, + input [63:0] gpr_3, + input [63:0] gpr_4, + input [63:0] gpr_5, + input [63:0] gpr_6, + input [63:0] gpr_7, + input [63:0] gpr_8, + input [63:0] gpr_9, + input [63:0] gpr_10, + input [63:0] gpr_11, + input [63:0] gpr_12, + input [63:0] gpr_13, + input [63:0] gpr_14, + input [63:0] gpr_15, + input [63:0] gpr_16, + input [63:0] gpr_17, + input [63:0] gpr_18, + input [63:0] gpr_19, + input [63:0] gpr_20, + input [63:0] gpr_21, + input [63:0] gpr_22, + input [63:0] gpr_23, + input [63:0] gpr_24, + input [63:0] gpr_25, + input [63:0] gpr_26, + input [63:0] gpr_27, + input [63:0] gpr_28, + input [63:0] gpr_29, + input [63:0] gpr_30, + input [63:0] gpr_31 +); + `DIFFTEST_MOD_DPIC_CALL_BEGIN(ArchIntRegState) ( + coreid, + gpr_0, gpr_1, gpr_2, gpr_3, gpr_4, gpr_5, gpr_6, gpr_7, + gpr_8, gpr_9, gpr_10, gpr_11, gpr_12, gpr_13, gpr_14, gpr_15, + gpr_16, gpr_17, gpr_18, gpr_19, gpr_20, gpr_21, gpr_22, gpr_23, + gpr_24, gpr_25, gpr_26, gpr_27, gpr_28, gpr_29, gpr_30, gpr_31 + ) `DIFFTEST_MOD_DPIC_CALL_END(ArchIntRegState) +endmodule + +// DifftestArchFpRegState +`DIFFTEST_DPIC_FUNC_DECL(ArchFpRegState) ( + `DPIC_ARG_BYTE coreid, + `DPIC_ARG_LONG fpr_0, + `DPIC_ARG_LONG fpr_1, + `DPIC_ARG_LONG fpr_2, + `DPIC_ARG_LONG fpr_3, + `DPIC_ARG_LONG fpr_4, + `DPIC_ARG_LONG fpr_5, + `DPIC_ARG_LONG fpr_6, + `DPIC_ARG_LONG fpr_7, + `DPIC_ARG_LONG fpr_8, + `DPIC_ARG_LONG fpr_9, + `DPIC_ARG_LONG fpr_10, + `DPIC_ARG_LONG fpr_11, + `DPIC_ARG_LONG fpr_12, + `DPIC_ARG_LONG fpr_13, + `DPIC_ARG_LONG fpr_14, + `DPIC_ARG_LONG fpr_15, + `DPIC_ARG_LONG fpr_16, + `DPIC_ARG_LONG fpr_17, + `DPIC_ARG_LONG fpr_18, + `DPIC_ARG_LONG fpr_19, + `DPIC_ARG_LONG fpr_20, + `DPIC_ARG_LONG fpr_21, + `DPIC_ARG_LONG fpr_22, + `DPIC_ARG_LONG fpr_23, + `DPIC_ARG_LONG fpr_24, + `DPIC_ARG_LONG fpr_25, + `DPIC_ARG_LONG fpr_26, + `DPIC_ARG_LONG fpr_27, + `DPIC_ARG_LONG fpr_28, + `DPIC_ARG_LONG fpr_29, + `DPIC_ARG_LONG fpr_30, + `DPIC_ARG_LONG fpr_31 +); +`DIFFTEST_MOD_DECL(ArchFpRegState)( + input clock, + input [ 7:0] coreid, + input [63:0] fpr_0, + input [63:0] fpr_1, + input [63:0] fpr_2, + input [63:0] fpr_3, + input [63:0] fpr_4, + input [63:0] fpr_5, + input [63:0] fpr_6, + input [63:0] fpr_7, + input [63:0] fpr_8, + input [63:0] fpr_9, + input [63:0] fpr_10, + input [63:0] fpr_11, + input [63:0] fpr_12, + input [63:0] fpr_13, + input [63:0] fpr_14, + input [63:0] fpr_15, + input [63:0] fpr_16, + input [63:0] fpr_17, + input [63:0] fpr_18, + input [63:0] fpr_19, + input [63:0] fpr_20, + input [63:0] fpr_21, + input [63:0] fpr_22, + input [63:0] fpr_23, + input [63:0] fpr_24, + input [63:0] fpr_25, + input [63:0] fpr_26, + input [63:0] fpr_27, + input [63:0] fpr_28, + input [63:0] fpr_29, + input [63:0] fpr_30, + input [63:0] fpr_31 +); + `DIFFTEST_MOD_DPIC_CALL_BEGIN(ArchFpRegState) ( + coreid, + fpr_0, fpr_1, fpr_2, fpr_3, fpr_4, fpr_5, fpr_6, fpr_7, + fpr_8, fpr_9, fpr_10, fpr_11, fpr_12, fpr_13, fpr_14, fpr_15, + fpr_16, fpr_17, fpr_18, fpr_19, fpr_20, fpr_21, fpr_22, fpr_23, + fpr_24, fpr_25, fpr_26, fpr_27, fpr_28, fpr_29, fpr_30, fpr_31 + ) `DIFFTEST_MOD_DPIC_CALL_END(ArchFpRegState) +endmodule + +// DifftestSbufferEvent +`DIFFTEST_DPIC_FUNC_DECL(SbufferEvent) ( + `DPIC_ARG_BYTE coreid, + `DPIC_ARG_BIT sbufferResp, + `DPIC_ARG_LONG sbufferAddr, + `DPIC_ARG_BYTE sbufferData_0, + `DPIC_ARG_BYTE sbufferData_1, + `DPIC_ARG_BYTE sbufferData_2, + `DPIC_ARG_BYTE sbufferData_3, + `DPIC_ARG_BYTE sbufferData_4, + `DPIC_ARG_BYTE sbufferData_5, + `DPIC_ARG_BYTE sbufferData_6, + `DPIC_ARG_BYTE sbufferData_7, + `DPIC_ARG_BYTE sbufferData_8, + `DPIC_ARG_BYTE sbufferData_9, + `DPIC_ARG_BYTE sbufferData_10, + `DPIC_ARG_BYTE sbufferData_11, + `DPIC_ARG_BYTE sbufferData_12, + `DPIC_ARG_BYTE sbufferData_13, + `DPIC_ARG_BYTE sbufferData_14, + `DPIC_ARG_BYTE sbufferData_15, + `DPIC_ARG_BYTE sbufferData_16, + `DPIC_ARG_BYTE sbufferData_17, + `DPIC_ARG_BYTE sbufferData_18, + `DPIC_ARG_BYTE sbufferData_19, + `DPIC_ARG_BYTE sbufferData_20, + `DPIC_ARG_BYTE sbufferData_21, + `DPIC_ARG_BYTE sbufferData_22, + `DPIC_ARG_BYTE sbufferData_23, + `DPIC_ARG_BYTE sbufferData_24, + `DPIC_ARG_BYTE sbufferData_25, + `DPIC_ARG_BYTE sbufferData_26, + `DPIC_ARG_BYTE sbufferData_27, + `DPIC_ARG_BYTE sbufferData_28, + `DPIC_ARG_BYTE sbufferData_29, + `DPIC_ARG_BYTE sbufferData_30, + `DPIC_ARG_BYTE sbufferData_31, + `DPIC_ARG_BYTE sbufferData_32, + `DPIC_ARG_BYTE sbufferData_33, + `DPIC_ARG_BYTE sbufferData_34, + `DPIC_ARG_BYTE sbufferData_35, + `DPIC_ARG_BYTE sbufferData_36, + `DPIC_ARG_BYTE sbufferData_37, + `DPIC_ARG_BYTE sbufferData_38, + `DPIC_ARG_BYTE sbufferData_39, + `DPIC_ARG_BYTE sbufferData_40, + `DPIC_ARG_BYTE sbufferData_41, + `DPIC_ARG_BYTE sbufferData_42, + `DPIC_ARG_BYTE sbufferData_43, + `DPIC_ARG_BYTE sbufferData_44, + `DPIC_ARG_BYTE sbufferData_45, + `DPIC_ARG_BYTE sbufferData_46, + `DPIC_ARG_BYTE sbufferData_47, + `DPIC_ARG_BYTE sbufferData_48, + `DPIC_ARG_BYTE sbufferData_49, + `DPIC_ARG_BYTE sbufferData_50, + `DPIC_ARG_BYTE sbufferData_51, + `DPIC_ARG_BYTE sbufferData_52, + `DPIC_ARG_BYTE sbufferData_53, + `DPIC_ARG_BYTE sbufferData_54, + `DPIC_ARG_BYTE sbufferData_55, + `DPIC_ARG_BYTE sbufferData_56, + `DPIC_ARG_BYTE sbufferData_57, + `DPIC_ARG_BYTE sbufferData_58, + `DPIC_ARG_BYTE sbufferData_59, + `DPIC_ARG_BYTE sbufferData_60, + `DPIC_ARG_BYTE sbufferData_61, + `DPIC_ARG_BYTE sbufferData_62, + `DPIC_ARG_BYTE sbufferData_63, + `DPIC_ARG_LONG sbufferMask +); +`DIFFTEST_MOD_DECL(SbufferEvent)( + input clock, + input [ 7:0] coreid, + input sbufferResp, + input [63:0] sbufferAddr, + input [ 7:0] sbufferData_0, + input [ 7:0] sbufferData_1, + input [ 7:0] sbufferData_2, + input [ 7:0] sbufferData_3, + input [ 7:0] sbufferData_4, + input [ 7:0] sbufferData_5, + input [ 7:0] sbufferData_6, + input [ 7:0] sbufferData_7, + input [ 7:0] sbufferData_8, + input [ 7:0] sbufferData_9, + input [ 7:0] sbufferData_10, + input [ 7:0] sbufferData_11, + input [ 7:0] sbufferData_12, + input [ 7:0] sbufferData_13, + input [ 7:0] sbufferData_14, + input [ 7:0] sbufferData_15, + input [ 7:0] sbufferData_16, + input [ 7:0] sbufferData_17, + input [ 7:0] sbufferData_18, + input [ 7:0] sbufferData_19, + input [ 7:0] sbufferData_20, + input [ 7:0] sbufferData_21, + input [ 7:0] sbufferData_22, + input [ 7:0] sbufferData_23, + input [ 7:0] sbufferData_24, + input [ 7:0] sbufferData_25, + input [ 7:0] sbufferData_26, + input [ 7:0] sbufferData_27, + input [ 7:0] sbufferData_28, + input [ 7:0] sbufferData_29, + input [ 7:0] sbufferData_30, + input [ 7:0] sbufferData_31, + input [ 7:0] sbufferData_32, + input [ 7:0] sbufferData_33, + input [ 7:0] sbufferData_34, + input [ 7:0] sbufferData_35, + input [ 7:0] sbufferData_36, + input [ 7:0] sbufferData_37, + input [ 7:0] sbufferData_38, + input [ 7:0] sbufferData_39, + input [ 7:0] sbufferData_40, + input [ 7:0] sbufferData_41, + input [ 7:0] sbufferData_42, + input [ 7:0] sbufferData_43, + input [ 7:0] sbufferData_44, + input [ 7:0] sbufferData_45, + input [ 7:0] sbufferData_46, + input [ 7:0] sbufferData_47, + input [ 7:0] sbufferData_48, + input [ 7:0] sbufferData_49, + input [ 7:0] sbufferData_50, + input [ 7:0] sbufferData_51, + input [ 7:0] sbufferData_52, + input [ 7:0] sbufferData_53, + input [ 7:0] sbufferData_54, + input [ 7:0] sbufferData_55, + input [ 7:0] sbufferData_56, + input [ 7:0] sbufferData_57, + input [ 7:0] sbufferData_58, + input [ 7:0] sbufferData_59, + input [ 7:0] sbufferData_60, + input [ 7:0] sbufferData_61, + input [ 7:0] sbufferData_62, + input [ 7:0] sbufferData_63, + input [63:0] sbufferMask +); + `DIFFTEST_MOD_DPIC_CALL_BEGIN_WITH_EN(sbufferResp, SbufferEvent) ( + coreid, sbufferResp, sbufferAddr, + sbufferData_0, sbufferData_1, sbufferData_2, sbufferData_3, sbufferData_4, sbufferData_5, + sbufferData_6, sbufferData_7, sbufferData_8, sbufferData_9, sbufferData_10, sbufferData_11, + sbufferData_12, sbufferData_13, sbufferData_14, sbufferData_15, sbufferData_16, sbufferData_17, + sbufferData_18, sbufferData_19, sbufferData_20, sbufferData_21, sbufferData_22, sbufferData_23, + sbufferData_24, sbufferData_25, sbufferData_26, sbufferData_27, sbufferData_28, sbufferData_29, + sbufferData_30, sbufferData_31, sbufferData_32, sbufferData_33, sbufferData_34, sbufferData_35, + sbufferData_36, sbufferData_37, sbufferData_38, sbufferData_39, sbufferData_40, sbufferData_41, + sbufferData_42, sbufferData_43, sbufferData_44, sbufferData_45, sbufferData_46, sbufferData_47, + sbufferData_48, sbufferData_49, sbufferData_50, sbufferData_51, sbufferData_52, sbufferData_53, + sbufferData_54, sbufferData_55, sbufferData_56, sbufferData_57, sbufferData_58, sbufferData_59, + sbufferData_60, sbufferData_61, sbufferData_62, sbufferData_63, sbufferMask + ) `DIFFTEST_MOD_DPIC_CALL_END_WITH_EN(SbufferEvent) +endmodule + +// DifftestStoreEvent +`DIFFTEST_DPIC_FUNC_DECL(StoreEvent) ( + `DPIC_ARG_BYTE coreid, + `DPIC_ARG_BYTE index, + `DPIC_ARG_BIT valid, + `DPIC_ARG_LONG storeAddr, + `DPIC_ARG_LONG storeData, + `DPIC_ARG_BYTE storeMask +); +`DIFFTEST_MOD_DECL(StoreEvent)( + input clock, + input [ 7:0] coreid, + input [ 7:0] index, + input valid, + input [63:0] storeAddr, + input [63:0] storeData, + input [ 7:0] storeMask +); + `DIFFTEST_MOD_DPIC_CALL_BEGIN_WITH_EN(valid, StoreEvent) ( + coreid, index, valid, storeAddr, storeData, storeMask + ) `DIFFTEST_MOD_DPIC_CALL_END_WITH_EN(StoreEvent) +endmodule + +// DifftestLoadEvent +`DIFFTEST_DPIC_FUNC_DECL(LoadEvent) ( + `DPIC_ARG_BYTE coreid, + `DPIC_ARG_BYTE index, + `DPIC_ARG_BIT valid, + `DPIC_ARG_LONG paddr, + `DPIC_ARG_BYTE opType, + `DPIC_ARG_BYTE fuType +); +`DIFFTEST_MOD_DECL(LoadEvent)( + input clock, + input [ 7:0] coreid, + input [ 7:0] index, + input valid, + input [63:0] paddr, + input [ 7:0] opType, + input [ 7:0] fuType +); + `DIFFTEST_MOD_DPIC_CALL_BEGIN_WITH_EN(valid, LoadEvent) ( + coreid, index, valid, paddr, opType, fuType + ) `DIFFTEST_MOD_DPIC_CALL_END_WITH_EN(LoadEvent) +endmodule + +// DifftestAtomicEvent +`DIFFTEST_DPIC_FUNC_DECL(AtomicEvent) ( + `DPIC_ARG_BYTE coreid, + `DPIC_ARG_BIT atomicResp, + `DPIC_ARG_LONG atomicAddr, + `DPIC_ARG_LONG atomicData, + `DPIC_ARG_BYTE atomicMask, + `DPIC_ARG_BYTE atomicFuop, + `DPIC_ARG_LONG atomicOut +); +`DIFFTEST_MOD_DECL(AtomicEvent)( + input clock, + input [ 7:0] coreid, + input atomicResp, + input [63:0] atomicAddr, + input [63:0] atomicData, + input [ 7:0] atomicMask, + input [ 7:0] atomicFuop, + input [63:0] atomicOut +); + `DIFFTEST_MOD_DPIC_CALL_BEGIN_WITH_EN(atomicResp, AtomicEvent) ( + coreid, atomicResp, atomicAddr, atomicData, atomicMask, atomicFuop, atomicOut + ) `DIFFTEST_MOD_DPIC_CALL_END_WITH_EN(AtomicEvent) +endmodule + +// DifftestPtwEvent +`DIFFTEST_DPIC_FUNC_DECL(PtwEvent) ( + `DPIC_ARG_BYTE coreid, + `DPIC_ARG_BIT ptwResp, + `DPIC_ARG_LONG ptwAddr, + `DPIC_ARG_LONG ptwData_0, + `DPIC_ARG_LONG ptwData_1, + `DPIC_ARG_LONG ptwData_2, + `DPIC_ARG_LONG ptwData_3 +); +`DIFFTEST_MOD_DECL(PtwEvent)( + input clock, + input [ 7:0] coreid, + input ptwResp, + input [63:0] ptwAddr, + input [63:0] ptwData_0, + input [63:0] ptwData_1, + input [63:0] ptwData_2, + input [63:0] ptwData_3 +); + `DIFFTEST_MOD_DPIC_CALL_BEGIN_WITH_EN(ptwResp, PtwEvent) ( + coreid, ptwResp, ptwAddr, ptwData_0, ptwData_1, ptwData_2, ptwData_3 + ) `DIFFTEST_MOD_DPIC_CALL_END_WITH_EN(PtwEvent) +endmodule diff --git a/libraries/difftest/src/test/vsrc/common/ram.v b/libraries/difftest/src/test/vsrc/common/ram.v new file mode 100644 index 0000000..c323c8c --- /dev/null +++ b/libraries/difftest/src/test/vsrc/common/ram.v @@ -0,0 +1,49 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +import "DPI-C" function void ram_write_helper +( + input longint wIdx, + input longint wdata, + input longint wmask, + input bit wen +); + +import "DPI-C" function longint ram_read_helper +( + input bit en, + input longint rIdx +); + +module RAMHelper( + input clk, + input en, + input [63:0] rIdx, + output [63:0] rdata, + input [63:0] wIdx, + input [63:0] wdata, + input [63:0] wmask, + input wen +); + + assign rdata = ram_read_helper(en, rIdx); + + always @(posedge clk) begin + ram_write_helper(wIdx, wdata, wmask, wen && en); + end + +endmodule + diff --git a/libraries/difftest/src/test/vsrc/common/ref.v b/libraries/difftest/src/test/vsrc/common/ref.v new file mode 100644 index 0000000..9d0e9b2 --- /dev/null +++ b/libraries/difftest/src/test/vsrc/common/ref.v @@ -0,0 +1,63 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +import "DPI-C" function byte pte_helper ( + input longint satp, + input longint vpn, + output longint pte, + output byte level +); + +module PTEHelper( + input clock, + input enable, + input [63:0] satp, + input [63:0] vpn, + output reg [63:0] pte, + output reg [ 7:0] level, + output reg [ 7:0] pf +); + always @(posedge clock) begin + if (enable) begin + pf <= pte_helper(satp, vpn, pte, level); + end + end +endmodule + +import "DPI-C" function longint amo_helper( + input byte cmd, + input longint addr, + input longint wdata, + input byte mask +); + +module AMOHelper( + input clock, + input enable, + input [ 4:0] cmd, + input [63:0] addr, + input [63:0] wdata, + input [ 7:0] mask, + output reg [63:0] rdata +); + + always @(posedge clock) begin + if (enable) begin + rdata <= amo_helper(cmd, addr, wdata, mask); + end + end + +endmodule diff --git a/libraries/difftest/src/test/vsrc/vcs/top.v b/libraries/difftest/src/test/vsrc/vcs/top.v new file mode 100644 index 0000000..dbc864a --- /dev/null +++ b/libraries/difftest/src/test/vsrc/vcs/top.v @@ -0,0 +1,114 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +import "DPI-C" function void set_bin_file(string bin); +import "DPI-C" function void simv_init(); +import "DPI-C" function int simv_step(); + +module tb_top(); + +reg clock; +reg reset; +reg [63:0] io_logCtrl_log_begin; +reg [63:0] io_logCtrl_log_end; +wire [63:0] io_logCtrl_log_level; +wire io_perfInfo_clean; +wire io_perfInfo_dump; +wire io_uart_out_valid; +wire [ 7:0] io_uart_out_ch; +wire io_uart_in_valid; +wire [ 7:0] io_uart_in_ch; + +string bin_file; +initial begin + clock = 0; + reset = 1; + // enable waveform + if ($test$plusargs("dump-wave")) begin + $vcdplusfile("simv.vpd"); + $vcdpluson; + end + // log begin + if ($test$plusargs("b")) begin + $value$plusargs("b=%d", io_logCtrl_log_begin); + end + else begin + io_logCtrl_log_begin = 0; + end + // log end + if ($test$plusargs("e")) begin + $value$plusargs("e=%d", io_logCtrl_log_end); + end + else begin + io_logCtrl_log_end = 0; + end + // workload: bin file + if ($test$plusargs("workload")) begin + $value$plusargs("workload=%s", bin_file); + set_bin_file(bin_file); + end + + #100 reset = 0; +end +always #1 clock <= ~clock; + +SimTop sim( + .clock(clock), + .reset(reset), + .io_logCtrl_log_begin(io_logCtrl_log_begin), + .io_logCtrl_log_end(io_logCtrl_log_end), + .io_logCtrl_log_level(io_logCtrl_log_level), + .io_perfInfo_clean(io_perfInfo_clean), + .io_perfInfo_dump(io_perfInfo_dump), + .io_uart_out_valid(io_uart_out_valid), + .io_uart_out_ch(io_uart_out_ch), + .io_uart_in_valid(io_uart_in_valid), + .io_uart_in_ch(io_uart_in_ch) +); + +assign io_logCtrl_log_level = 0; +assign io_perfInfo_clean = 0; +assign io_perfInfo_dump = 0; +assign io_uart_in_ch = 8'hff; + +always @(posedge clock) begin + if (!reset && io_uart_out_valid) begin + $fwrite(32'h8000_0001, "%c", io_uart_out_ch); + $fflush(); + end +end + +reg has_init; +always @(posedge clock) begin + if (reset) begin + has_init <= 1'b0; + end + else if (!has_init) begin + simv_init(); + has_init <= 1'b1; + end + + // check errors + if (!reset && has_init) begin + if (simv_step()) begin + $finish(); + end + end + +end + +endmodule + diff --git a/libraries/difftest/vcs.mk b/libraries/difftest/vcs.mk new file mode 100644 index 0000000..459b0a8 --- /dev/null +++ b/libraries/difftest/vcs.mk @@ -0,0 +1,49 @@ +#*************************************************************************************** +# Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +# Copyright (c) 2020-2021 Peng Cheng Laboratory +# +# XiangShan is licensed under Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +# +# See the Mulan PSL v2 for more details. +#*************************************************************************************** + +VCS_TARGET = simv + +VCS_CSRC_DIR = $(abspath ./src/test/csrc/vcs) +VCS_CXXFILES = $(SIM_CXXFILES) $(DIFFTEST_CXXFILES) $(shell find $(VCS_CSRC_DIR) -name "*.cpp") +VCS_CXXFLAGS += -std=c++11 -static -Wall -I$(VCS_CSRC_DIR) -I$(SIM_CSRC_DIR) -I$(DIFFTEST_CSRC_DIR) +VCS_LDFLAGS += -lpthread -lSDL2 -ldl -lz + +VCS_VSRC_DIR = $(abspath ./src/test/vsrc/vcs) +VCS_VFILES = $(SIM_VSRC) $(shell find $(VCS_VSRC_DIR) -name "*.v") + +VCS_SEARCH_DIR = $(abspath $(BUILD_DIR)) +VCS_BUILD_DIR = $(abspath $(BUILD_DIR)/simv-compile) + +VCS_FLAGS += -full64 +v2k -timescale=1ns/1ns -sverilog -debug_access+all +lint=TFIPC-L +# randomize all undefined signals (instead of using X) +VCS_FLAGS += +vcs+initreg+random +# VCS_FLAGS += +define+RANDOMIZE_GARBAGE_ASSIGN +define+RANDOMIZE_INVALID_ASSIGN +# VCS_FLAGS += +define+RANDOMIZE_MEM_INIT +define+RANDOMIZE_DELAY=0 +define+RANDOMIZE_REG_INIT +# SRAM lib defines +# VCS_FLAGS += +define+UNIT_DELAY +define+no_warning +# C++ flags +VCS_FLAGS += -CFLAGS "$(VCS_CXXFLAGS)" -LDFLAGS "$(VCS_LDFLAGS)" -j200 +# search build for other missing verilog files +VCS_FLAGS += -y $(VCS_SEARCH_DIR) +libext+.v +# build files put into $(VCS_BUILD_DIR) +VCS_FLAGS += -Mdir=$(VCS_BUILD_DIR) + +$(VCS_TARGET): $(SIM_TOP_V) $(VCS_CXXFILES) $(VCS_VFILES) + vcs $(VCS_FLAGS) $(SIM_TOP_V) $(VCS_CXXFILES) $(VCS_VFILES) + +vcs-clean: + rm -rf simv csrc DVEfiles simv.daidir stack.info.* ucli.key $(VCS_BUILD_DIR) + diff --git a/libraries/difftest/verilator.mk b/libraries/difftest/verilator.mk new file mode 100644 index 0000000..6062f80 --- /dev/null +++ b/libraries/difftest/verilator.mk @@ -0,0 +1,160 @@ +#*************************************************************************************** +# Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +# Copyright (c) 2020-2021 Peng Cheng Laboratory +# +# XiangShan is licensed under Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +# +# See the Mulan PSL v2 for more details. +#*************************************************************************************** + +EMU_TOP = SimTop + +EMU_CSRC_DIR = $(abspath ./src/test/csrc) +EMU_CXXFILES = $(shell find $(EMU_CSRC_DIR) -name "*.cpp") $(SIM_CXXFILES) $(DIFFTEST_CXXFILES) +EMU_CXXFLAGS += -std=c++11 -static -Wall -I$(EMU_CSRC_DIR) -I$(SIM_CSRC_DIR) -I$(DIFFTEST_CSRC_DIR) +EMU_CXXFLAGS += -DVERILATOR -Wno-maybe-uninitialized -DNUM_CORES=$(NUM_CORES) +EMU_LDFLAGS += -lpthread -lSDL2 -ldl -lz + +EMU_VFILES = $(SIM_VSRC) + +CCACHE := $(if $(shell which ccache),ccache,) +ifneq ($(CCACHE),) +export OBJCACHE = ccache +endif + +VEXTRA_FLAGS = -I$(abspath $(BUILD_DIR)) --x-assign unique -O3 -CFLAGS "$(EMU_CXXFLAGS)" -LDFLAGS "$(EMU_LDFLAGS)" + +# Verilator trace support +EMU_TRACE ?= +ifeq ($(EMU_TRACE),1) +VEXTRA_FLAGS += --trace +endif + +# Verilator multi-thread support +EMU_THREADS ?= 0 +ifneq ($(EMU_THREADS),0) +VEXTRA_FLAGS += --threads $(EMU_THREADS) --threads-dpi all +endif + +# Verilator savable +EMU_SNAPSHOT ?= +ifeq ($(EMU_SNAPSHOT),1) +VEXTRA_FLAGS += --savable +EMU_CXXFLAGS += -DVM_SAVABLE +endif + +# Fork-wait +EMU_FORKWAIT ?= +ifeq ($(EMU_FORKWAIT),1) +EMU_CXXFLAGS += -DEN_FORKWAIT +endif + +# Verilator coverage +EMU_COVERAGE ?= +ifeq ($(EMU_COVERAGE),1) +VEXTRA_FLAGS += --coverage-line --coverage-toggle +endif + +# co-simulation with DRAMsim3 +ifeq ($(WITH_DRAMSIM3),1) +EMU_CXXFLAGS += -I$(DRAMSIM3_HOME)/src +EMU_CXXFLAGS += -DWITH_DRAMSIM3 -DDRAMSIM3_CONFIG=\\\"$(DRAMSIM3_HOME)/configs/XiangShan.ini\\\" -DDRAMSIM3_OUTDIR=\\\"$(BUILD_DIR)\\\" +EMU_LDFLAGS += $(DRAMSIM3_HOME)/build/libdramsim3.a +endif + +ifeq ($(DUALCORE),1) +EMU_CXXFLAGS += -DDUALCORE +endif + +USE_BIN ?= 0 +ifeq ($(USE_BIN),1) +EMU_CXXFLAGS += -DUSE_BIN +endif + +# --trace +VERILATOR_FLAGS = \ + --top-module $(EMU_TOP) \ + +define+VERILATOR=1 \ + +define+PRINTF_COND=1 \ + +define+RANDOMIZE_REG_INIT \ + +define+RANDOMIZE_MEM_INIT \ + +define+RANDOMIZE_GARBAGE_ASSIGN \ + +define+RANDOMIZE_DELAY=0 \ + -Wno-STMTDLY -Wno-WIDTH \ + $(VEXTRA_FLAGS) \ + --assert \ + --stats-vars \ + --output-split 30000 \ + --output-split-cfuncs 30000 + +EMU_MK := $(BUILD_DIR)/emu-compile/V$(EMU_TOP).mk +EMU_DEPS := $(EMU_VFILES) $(EMU_CXXFILES) +EMU_HEADERS := $(shell find $(EMU_CSRC_DIR) -name "*.h") \ + $(shell find $(SIM_CSRC_DIR) -name "*.h") \ + $(shell find $(DIFFTEST_CSRC_DIR) -name "*.h") +EMU := $(BUILD_DIR)/emu + +$(EMU_MK): $(SIM_TOP_V) | $(EMU_DEPS) + @mkdir -p $(@D) + @echo "\n[verilator] Generating C++ files..." >> $(TIMELOG) + @date -R | tee -a $(TIMELOG) + $(TIME_CMD) verilator --cc --exe $(VERILATOR_FLAGS) \ + -o $(abspath $(EMU)) -Mdir $(@D) $^ $(EMU_DEPS) + +LOCK = /var/emu/emu.lock +LOCK_BIN = $(abspath $(BUILD_DIR)/lock-emu) +EMU_COMPILE_FILTER = +# 2> $(BUILD_DIR)/g++.err.log | tee $(BUILD_DIR)/g++.out.log | grep 'g++' | awk '{print "Compiling/Generating", $$NF}' + +build_emu_local: $(EMU_MK) + @echo "\n[g++] Compiling C++ files..." >> $(TIMELOG) + @date -R | tee -a $(TIMELOG) + $(TIME_CMD) $(MAKE) VM_PARALLEL_BUILDS=1 OPT_FAST="-O3" -C $(build/coverage.log + +.PHONY: build_emu_local diff --git a/myinfo.txt b/myinfo.txt index 6e51232..f6cd159 100755 --- a/myinfo.txt +++ b/myinfo.txt @@ -1,2 +1,2 @@ -ID= -Name= +ID=202100001 +Name=Leon \ No newline at end of file diff --git a/projects/cpu_axi_diff/vsrc/SimTop.v b/projects/cpu_axi_diff/vsrc/SimTop.v new file mode 100755 index 0000000..a5adf97 --- /dev/null +++ b/projects/cpu_axi_diff/vsrc/SimTop.v @@ -0,0 +1,219 @@ + +`include "defines.v" +`define AXI_TOP_INTERFACE(name) io_memAXI_0_``name + +module SimTop( + input clock, + input reset, + + input [63:0] io_logCtrl_log_begin, + input [63:0] io_logCtrl_log_end, + input [63:0] io_logCtrl_log_level, + input io_perfInfo_clean, + input io_perfInfo_dump, + + output io_uart_out_valid, + output [7:0] io_uart_out_ch, + output io_uart_in_valid, + input [7:0] io_uart_in_ch, + + input `AXI_TOP_INTERFACE(aw_ready), + output `AXI_TOP_INTERFACE(aw_valid), + output [`AXI_ADDR_WIDTH-1:0] `AXI_TOP_INTERFACE(aw_bits_addr), + output [2:0] `AXI_TOP_INTERFACE(aw_bits_prot), + output [`AXI_ID_WIDTH-1:0] `AXI_TOP_INTERFACE(aw_bits_id), + output [`AXI_USER_WIDTH-1:0] `AXI_TOP_INTERFACE(aw_bits_user), + output [7:0] `AXI_TOP_INTERFACE(aw_bits_len), + output [2:0] `AXI_TOP_INTERFACE(aw_bits_size), + output [1:0] `AXI_TOP_INTERFACE(aw_bits_burst), + output `AXI_TOP_INTERFACE(aw_bits_lock), + output [3:0] `AXI_TOP_INTERFACE(aw_bits_cache), + output [3:0] `AXI_TOP_INTERFACE(aw_bits_qos), + + input `AXI_TOP_INTERFACE(w_ready), + output `AXI_TOP_INTERFACE(w_valid), + output [`AXI_DATA_WIDTH-1:0] `AXI_TOP_INTERFACE(w_bits_data) [3:0], + output [`AXI_DATA_WIDTH/8-1:0] `AXI_TOP_INTERFACE(w_bits_strb), + output `AXI_TOP_INTERFACE(w_bits_last), + output [`AXI_ID_WIDTH-1:0] `AXI_TOP_INTERFACE(w_bits_id), + + output `AXI_TOP_INTERFACE(b_ready), + input `AXI_TOP_INTERFACE(b_valid), + input [1:0] `AXI_TOP_INTERFACE(b_bits_resp), + input [`AXI_ID_WIDTH-1:0] `AXI_TOP_INTERFACE(b_bits_id), + input [`AXI_USER_WIDTH-1:0] `AXI_TOP_INTERFACE(b_bits_user), + + input `AXI_TOP_INTERFACE(ar_ready), + output `AXI_TOP_INTERFACE(ar_valid), + output [`AXI_ADDR_WIDTH-1:0] `AXI_TOP_INTERFACE(ar_bits_addr), + output [2:0] `AXI_TOP_INTERFACE(ar_bits_prot), + output [`AXI_ID_WIDTH-1:0] `AXI_TOP_INTERFACE(ar_bits_id), + output [`AXI_USER_WIDTH-1:0] `AXI_TOP_INTERFACE(ar_bits_user), + output [7:0] `AXI_TOP_INTERFACE(ar_bits_len), + output [2:0] `AXI_TOP_INTERFACE(ar_bits_size), + output [1:0] `AXI_TOP_INTERFACE(ar_bits_burst), + output `AXI_TOP_INTERFACE(ar_bits_lock), + output [3:0] `AXI_TOP_INTERFACE(ar_bits_cache), + output [3:0] `AXI_TOP_INTERFACE(ar_bits_qos), + + output `AXI_TOP_INTERFACE(r_ready), + input `AXI_TOP_INTERFACE(r_valid), + input [1:0] `AXI_TOP_INTERFACE(r_bits_resp), + input [`AXI_DATA_WIDTH-1:0] `AXI_TOP_INTERFACE(r_bits_data) [3:0], + input `AXI_TOP_INTERFACE(r_bits_last), + input [`AXI_ID_WIDTH-1:0] `AXI_TOP_INTERFACE(r_bits_id), + input [`AXI_USER_WIDTH-1:0] `AXI_TOP_INTERFACE(r_bits_user) +); + + wire aw_ready; + wire aw_valid; + wire [`AXI_ADDR_WIDTH-1:0] aw_addr; + wire [2:0] aw_prot; + wire [`AXI_ID_WIDTH-1:0] aw_id; + wire [`AXI_USER_WIDTH-1:0] aw_user; + wire [7:0] aw_len; + wire [2:0] aw_size; + wire [1:0] aw_burst; + wire aw_lock; + wire [3:0] aw_cache; + wire [3:0] aw_qos; + + wire w_ready; + wire w_valid; + wire [`AXI_DATA_WIDTH-1:0] w_data [0:0]; + wire [`AXI_DATA_WIDTH/8-1:0] w_strb; + wire w_last; + wire [`AXI_ID_WIDTH-1:0] w_id; + + wire b_ready; + wire b_valid; + wire [1:0] b_resp; + wire [`AXI_ID_WIDTH-1:0] b_id; + wire [`AXI_USER_WIDTH-1:0] b_user; + + wire ar_ready; + wire ar_valid; + wire [`AXI_ADDR_WIDTH-1:0] ar_addr; + wire [2:0] ar_prot; + wire [`AXI_ID_WIDTH-1:0] ar_id; + wire [`AXI_USER_WIDTH-1:0] ar_user; + wire [7:0] ar_len; + wire [2:0] ar_size; + wire [1:0] ar_burst; + wire ar_lock; + wire [3:0] ar_cache; + wire [3:0] ar_qos; + + wire r_ready; + wire r_valid; + wire [1:0] r_resp; + wire [`AXI_DATA_WIDTH-1:0] r_data; + wire r_last; + wire [`AXI_ID_WIDTH-1:0] r_id; + wire [`AXI_USER_WIDTH-1:0] r_user; + + assign ar_ready = `AXI_TOP_INTERFACE(ar_ready); + assign `AXI_TOP_INTERFACE(ar_valid) = ar_valid; + assign `AXI_TOP_INTERFACE(ar_bits_addr) = ar_addr; + assign `AXI_TOP_INTERFACE(ar_bits_prot) = ar_prot; + assign `AXI_TOP_INTERFACE(ar_bits_id) = ar_id; + assign `AXI_TOP_INTERFACE(ar_bits_user) = ar_user; + assign `AXI_TOP_INTERFACE(ar_bits_len) = ar_len; + assign `AXI_TOP_INTERFACE(ar_bits_size) = ar_size; + assign `AXI_TOP_INTERFACE(ar_bits_burst) = ar_burst; + assign `AXI_TOP_INTERFACE(ar_bits_lock) = ar_lock; + assign `AXI_TOP_INTERFACE(ar_bits_cache) = ar_cache; + assign `AXI_TOP_INTERFACE(ar_bits_qos) = ar_qos; + + assign `AXI_TOP_INTERFACE(r_ready) = r_ready; + assign r_valid = `AXI_TOP_INTERFACE(r_valid); + assign r_resp = `AXI_TOP_INTERFACE(r_bits_resp); + assign r_data = `AXI_TOP_INTERFACE(r_bits_data)[0]; + assign r_last = `AXI_TOP_INTERFACE(r_bits_last); + assign r_id = `AXI_TOP_INTERFACE(r_bits_id); + assign r_user = `AXI_TOP_INTERFACE(r_bits_user); + + axi_rw u_axi_rw ( + .clock (clock), + .reset (reset), + + .rw_valid_i (if_valid), + .rw_ready_o (if_ready), + .rw_req_i (req), + .data_read_o (if_data_read), + .data_write_i (data_write), + .rw_addr_i (if_addr), + .rw_size_i (if_size), + .rw_resp_o (if_resp), + + .axi_aw_ready_i (aw_ready), + .axi_aw_valid_o (aw_valid), + .axi_aw_addr_o (aw_addr), + .axi_aw_prot_o (aw_prot), + .axi_aw_id_o (aw_id), + .axi_aw_user_o (aw_user), + .axi_aw_len_o (aw_len), + .axi_aw_size_o (aw_size), + .axi_aw_burst_o (aw_burst), + .axi_aw_lock_o (aw_lock), + .axi_aw_cache_o (aw_cache), + .axi_aw_qos_o (aw_qos), + + .axi_w_ready_i (w_ready), + .axi_w_valid_o (w_valid), + .axi_w_data_o (w_data[0]), + .axi_w_strb_o (w_strb), + .axi_w_last_o (w_last), + .axi_w_id_o (w_id), + + .axi_b_ready_o (b_ready), + .axi_b_valid_i (b_valid), + .axi_b_resp_i (b_resp), + .axi_b_id_i (b_id), + .axi_b_user_i (b_user), + + .axi_ar_ready_i (ar_ready), + .axi_ar_valid_o (ar_valid), + .axi_ar_addr_o (ar_addr), + .axi_ar_prot_o (ar_prot), + .axi_ar_id_o (ar_id), + .axi_ar_user_o (ar_user), + .axi_ar_len_o (ar_len), + .axi_ar_size_o (ar_size), + .axi_ar_burst_o (ar_burst), + .axi_ar_lock_o (ar_lock), + .axi_ar_cache_o (ar_cache), + .axi_ar_qos_o (ar_qos), + + .axi_r_ready_o (r_ready), + .axi_r_valid_i (r_valid), + .axi_r_resp_i (r_resp), + .axi_r_data_i (r_data), + .axi_r_last_i (r_last), + .axi_r_id_i (r_id), + .axi_r_user_i (r_user) + ); + + wire if_valid; + wire if_ready; + wire req = `REQ_READ; + wire [63:0] if_data_read; + wire [63:0] data_write; + wire [63:0] if_addr; + wire [1:0] if_size; + wire [1:0] if_resp; + + cpu u_cpu( + .clock (clock), + .reset (reset), + + .if_valid (if_valid), + .if_ready (if_ready), + .if_data_read (if_data_read), + .if_addr (if_addr), + .if_size (if_size), + .if_resp (if_resp) + ); + + +endmodule \ No newline at end of file diff --git a/projects/cpu_axi_diff/vsrc/axi_rw.v b/projects/cpu_axi_diff/vsrc/axi_rw.v new file mode 100755 index 0000000..ad3e673 --- /dev/null +++ b/projects/cpu_axi_diff/vsrc/axi_rw.v @@ -0,0 +1,307 @@ + +`include "defines.v" + +// Burst types +`define AXI_BURST_TYPE_FIXED 2'b00 +`define AXI_BURST_TYPE_INCR 2'b01 +`define AXI_BURST_TYPE_WRAP 2'b10 +// Access permissions +`define AXI_PROT_UNPRIVILEGED_ACCESS 3'b000 +`define AXI_PROT_PRIVILEGED_ACCESS 3'b001 +`define AXI_PROT_SECURE_ACCESS 3'b000 +`define AXI_PROT_NON_SECURE_ACCESS 3'b010 +`define AXI_PROT_DATA_ACCESS 3'b000 +`define AXI_PROT_INSTRUCTION_ACCESS 3'b100 +// Memory types (AR) +`define AXI_ARCACHE_DEVICE_NON_BUFFERABLE 4'b0000 +`define AXI_ARCACHE_DEVICE_BUFFERABLE 4'b0001 +`define AXI_ARCACHE_NORMAL_NON_CACHEABLE_NON_BUFFERABLE 4'b0010 +`define AXI_ARCACHE_NORMAL_NON_CACHEABLE_BUFFERABLE 4'b0011 +`define AXI_ARCACHE_WRITE_THROUGH_NO_ALLOCATE 4'b1010 +`define AXI_ARCACHE_WRITE_THROUGH_READ_ALLOCATE 4'b1110 +`define AXI_ARCACHE_WRITE_THROUGH_WRITE_ALLOCATE 4'b1010 +`define AXI_ARCACHE_WRITE_THROUGH_READ_AND_WRITE_ALLOCATE 4'b1110 +`define AXI_ARCACHE_WRITE_BACK_NO_ALLOCATE 4'b1011 +`define AXI_ARCACHE_WRITE_BACK_READ_ALLOCATE 4'b1111 +`define AXI_ARCACHE_WRITE_BACK_WRITE_ALLOCATE 4'b1011 +`define AXI_ARCACHE_WRITE_BACK_READ_AND_WRITE_ALLOCATE 4'b1111 +// Memory types (AW) +`define AXI_AWCACHE_DEVICE_NON_BUFFERABLE 4'b0000 +`define AXI_AWCACHE_DEVICE_BUFFERABLE 4'b0001 +`define AXI_AWCACHE_NORMAL_NON_CACHEABLE_NON_BUFFERABLE 4'b0010 +`define AXI_AWCACHE_NORMAL_NON_CACHEABLE_BUFFERABLE 4'b0011 +`define AXI_AWCACHE_WRITE_THROUGH_NO_ALLOCATE 4'b0110 +`define AXI_AWCACHE_WRITE_THROUGH_READ_ALLOCATE 4'b0110 +`define AXI_AWCACHE_WRITE_THROUGH_WRITE_ALLOCATE 4'b1110 +`define AXI_AWCACHE_WRITE_THROUGH_READ_AND_WRITE_ALLOCATE 4'b1110 +`define AXI_AWCACHE_WRITE_BACK_NO_ALLOCATE 4'b0111 +`define AXI_AWCACHE_WRITE_BACK_READ_ALLOCATE 4'b0111 +`define AXI_AWCACHE_WRITE_BACK_WRITE_ALLOCATE 4'b1111 +`define AXI_AWCACHE_WRITE_BACK_READ_AND_WRITE_ALLOCATE 4'b1111 + +`define AXI_SIZE_BYTES_1 3'b000 +`define AXI_SIZE_BYTES_2 3'b001 +`define AXI_SIZE_BYTES_4 3'b010 +`define AXI_SIZE_BYTES_8 3'b011 +`define AXI_SIZE_BYTES_16 3'b100 +`define AXI_SIZE_BYTES_32 3'b101 +`define AXI_SIZE_BYTES_64 3'b110 +`define AXI_SIZE_BYTES_128 3'b111 + + +module axi_rw # ( + parameter RW_DATA_WIDTH = 64, + parameter RW_ADDR_WIDTH = 64, + parameter AXI_DATA_WIDTH = 64, + parameter AXI_ADDR_WIDTH = 64, + parameter AXI_ID_WIDTH = 4, + parameter AXI_USER_WIDTH = 1 +)( + input clock, + input reset, + + input rw_valid_i, + output rw_ready_o, + input rw_req_i, + output reg [RW_DATA_WIDTH:0] data_read_o, + input [RW_DATA_WIDTH:0] data_write_i, + input [AXI_DATA_WIDTH:0] rw_addr_i, + input [1:0] rw_size_i, + output [1:0] rw_resp_o, + + // Advanced eXtensible Interface + input axi_aw_ready_i, + output axi_aw_valid_o, + output [AXI_ADDR_WIDTH-1:0] axi_aw_addr_o, + output [2:0] axi_aw_prot_o, + output [AXI_ID_WIDTH-1:0] axi_aw_id_o, + output [AXI_USER_WIDTH-1:0] axi_aw_user_o, + output [7:0] axi_aw_len_o, + output [2:0] axi_aw_size_o, + output [1:0] axi_aw_burst_o, + output axi_aw_lock_o, + output [3:0] axi_aw_cache_o, + output [3:0] axi_aw_qos_o, + + input axi_w_ready_i, + output axi_w_valid_o, + output [AXI_DATA_WIDTH-1:0] axi_w_data_o, + output [AXI_DATA_WIDTH/8-1:0] axi_w_strb_o, + output axi_w_last_o, + output [AXI_ID_WIDTH-1:0] axi_w_id_o, + + output axi_b_ready_o, + input axi_b_valid_i, + input [1:0] axi_b_resp_i, + input [AXI_ID_WIDTH-1:0] axi_b_id_i, + input [AXI_USER_WIDTH-1:0] axi_b_user_i, + + input axi_ar_ready_i, + output axi_ar_valid_o, + output [AXI_ADDR_WIDTH-1:0] axi_ar_addr_o, + output [2:0] axi_ar_prot_o, + output [AXI_ID_WIDTH-1:0] axi_ar_id_o, + output [AXI_USER_WIDTH-1:0] axi_ar_user_o, + output [7:0] axi_ar_len_o, + output [2:0] axi_ar_size_o, + output [1:0] axi_ar_burst_o, + output axi_ar_lock_o, + output [3:0] axi_ar_cache_o, + output [3:0] axi_ar_qos_o, + + output axi_r_ready_o, + input axi_r_valid_i, + input [1:0] axi_r_resp_i, + input [AXI_DATA_WIDTH-1:0] axi_r_data_i, + input axi_r_last_i, + input [AXI_ID_WIDTH-1:0] axi_r_id_i, + input [AXI_USER_WIDTH-1:0] axi_r_user_i +); + + wire w_trans = rw_req_i == `REQ_WRITE; + wire r_trans = rw_req_i == `REQ_READ; + wire w_valid = rw_valid_i & r_trans; + wire r_valid = rw_valid_i & r_trans; + + // handshake + wire aw_hs = axi_aw_ready_i & axi_aw_valid_o; + wire w_hs = axi_w_ready_i & axi_w_valid_o; + wire b_hs = axi_b_ready_o & axi_b_valid_i; + wire ar_hs = axi_ar_ready_i & axi_ar_valid_o; + wire r_hs = axi_r_ready_o & axi_r_valid_i; + + wire w_done = w_hs & axi_w_last_o; + wire r_done = r_hs & axi_r_last_i; + wire trans_done = w_trans ? b_hs : r_done; + + + // ------------------State Machine------------------ + parameter [1:0] W_STATE_IDLE = 2'b00, W_STATE_ADDR = 2'b01, W_STATE_WRITE = 2'b10, W_STATE_RESP = 2'b11; + parameter [1:0] R_STATE_IDLE = 2'b00, R_STATE_ADDR = 2'b01, R_STATE_READ = 2'b10; + + reg [1:0] w_state, r_state; + wire w_state_idle = w_state == W_STATE_IDLE, w_state_addr = w_state == W_STATE_ADDR, w_state_write = w_state == W_STATE_WRITE, w_state_resp = w_state == W_STATE_RESP; + wire r_state_idle = r_state == R_STATE_IDLE, r_state_addr = r_state == R_STATE_ADDR, r_state_read = r_state == R_STATE_READ; + + // Wirte State Machine + always @(posedge clock) begin + if (reset) begin + w_state <= R_STATE_IDLE; + end + else begin + if (w_valid) begin + case (w_state) + W_STATE_IDLE: w_state <= W_STATE_ADDR; + W_STATE_ADDR: if (aw_hs) w_state <= W_STATE_WRITE; + W_STATE_WRITE: if (w_done) w_state <= W_STATE_RESP; + W_STATE_RESP: if (b_hs) w_state <= W_STATE_IDLE; + endcase + end + end + end + + // Read State Machine + always @(posedge clock) begin + if (reset) begin + r_state <= R_STATE_IDLE; + end + else begin + if (r_valid) begin + case (r_state) + R_STATE_IDLE: r_state <= R_STATE_ADDR; + R_STATE_ADDR: if (ar_hs) r_state <= R_STATE_READ; + R_STATE_READ: if (r_done) r_state <= R_STATE_IDLE; + default:; + endcase + end + end + end + + + // ------------------Number of transmission------------------ + reg [7:0] len; + wire len_reset = reset | (w_trans & w_state_idle) | (r_trans & r_state_idle); + wire len_incr_en = (len != axi_len) & (w_hs | r_hs); + always @(posedge clock) begin + if (len_reset) begin + len <= 0; + end + else if (len_incr_en) begin + len <= len + 1; + end + end + + + // ------------------Process Data------------------ + parameter ALIGNED_WIDTH = $clog2(AXI_DATA_WIDTH / 8); + parameter OFFSET_WIDTH = $clog2(AXI_DATA_WIDTH); + parameter AXI_SIZE = $clog2(AXI_DATA_WIDTH / 8); + parameter MASK_WIDTH = AXI_DATA_WIDTH * 2; + parameter TRANS_LEN = RW_DATA_WIDTH / AXI_DATA_WIDTH; + + wire aligned = TRANS_LEN != 1 | rw_addr_i[ALIGNED_WIDTH-1:0] == 0; + wire size_b = rw_size_i == `SIZE_B; + wire size_h = rw_size_i == `SIZE_H; + wire size_w = rw_size_i == `SIZE_W; + wire size_d = rw_size_i == `SIZE_D; + wire [3:0] addr_op1 = {{4-ALIGNED_WIDTH{1'b0}}, rw_addr_i[ALIGNED_WIDTH-1:0]}; + wire [3:0] addr_op2 = ({4{size_b}} & {4'b0}) + | ({4{size_h}} & {4'b1}) + | ({4{size_w}} & {4'b11}) + | ({4{size_d}} & {4'b111}) + ; + wire [3:0] addr_end = addr_op1 + addr_op2; + wire overstep = addr_end[3:ALIGNED_WIDTH] != 0; + + wire [7:0] axi_len = aligned ? TRANS_LEN - 1 : {{7{1'b0}}, overstep}; + wire [2:0] axi_size = AXI_SIZE[2:0]; + wire [AXI_ADDR_WIDTH-1:0] axi_addr = {rw_addr_i[AXI_ADDR_WIDTH-1:ALIGNED_WIDTH], {ALIGNED_WIDTH{1'b0}}}; + wire [OFFSET_WIDTH-1:0] aligned_offset_l = {{OFFSET_WIDTH-ALIGNED_WIDTH{1'b0}}, {rw_addr_i[ALIGNED_WIDTH-1:0]}} << 3; + wire [OFFSET_WIDTH-1:0] aligned_offset_h = AXI_DATA_WIDTH - aligned_offset_l; + wire [MASK_WIDTH-1:0] mask = (({MASK_WIDTH{size_b}} & {{MASK_WIDTH-8{1'b0}}, 8'hff}) + | ({MASK_WIDTH{size_h}} & {{MASK_WIDTH-16{1'b0}}, 16'hffff}) + | ({MASK_WIDTH{size_w}} & {{MASK_WIDTH-32{1'b0}}, 32'hffffffff}) + | ({MASK_WIDTH{size_d}} & {{MASK_WIDTH-64{1'b0}}, 64'hffffffff_ffffffff}) + ) << aligned_offset_l; + wire [AXI_DATA_WIDTH-1:0] mask_l = mask[AXI_DATA_WIDTH-1:0]; + wire [AXI_DATA_WIDTH-1:0] mask_h = mask[MASK_WIDTH-1:AXI_DATA_WIDTH]; + + wire [AXI_ID_WIDTH-1:0] axi_id = {AXI_ID_WIDTH{1'b0}}; + wire [AXI_USER_WIDTH-1:0] axi_user = {AXI_USER_WIDTH{1'b0}}; + + reg rw_ready; + wire rw_ready_nxt = trans_done; + wire rw_ready_en = trans_done | rw_ready; + always @(posedge clock) begin + if (reset) begin + rw_ready <= 0; + end + else if (rw_ready_en) begin + rw_ready <= rw_ready_nxt; + end + end + assign rw_ready_o = rw_ready; + + reg [1:0] rw_resp; + wire rw_resp_nxt = w_trans ? axi_b_resp_i : axi_r_resp_i; + wire resp_en = trans_done; + always @(posedge clock) begin + if (reset) begin + rw_resp <= 0; + end + else if (resp_en) begin + rw_resp <= rw_resp_nxt; + end + end + assign rw_resp_o = rw_resp; + + + // ------------------Write Transaction------------------ + + + + // ------------------Read Transaction------------------ + + // Read address channel signals + assign axi_ar_valid_o = r_state_addr; + assign axi_ar_addr_o = axi_addr; + assign axi_ar_prot_o = `AXI_PROT_UNPRIVILEGED_ACCESS | `AXI_PROT_SECURE_ACCESS | `AXI_PROT_DATA_ACCESS; + assign axi_ar_id_o = axi_id; + assign axi_ar_user_o = axi_user; + assign axi_ar_len_o = axi_len; + assign axi_ar_size_o = axi_size; + assign axi_ar_burst_o = `AXI_BURST_TYPE_INCR; + assign axi_ar_lock_o = 1'b0; + assign axi_ar_cache_o = `AXI_ARCACHE_NORMAL_NON_CACHEABLE_NON_BUFFERABLE; + assign axi_ar_qos_o = 4'h0; + + // Read data channel signals + assign axi_r_ready_o = r_state_read; + + wire [AXI_DATA_WIDTH-1:0] axi_r_data_l = (axi_r_data_i & mask_l) >> aligned_offset_l; + wire [AXI_DATA_WIDTH-1:0] axi_r_data_h = (axi_r_data_i & mask_h) << aligned_offset_h; + + generate + for (genvar i = 0; i < TRANS_LEN; i += 1) begin + always @(posedge clock) begin + if (reset) begin + data_read_o[i*AXI_DATA_WIDTH+:AXI_DATA_WIDTH] <= 0; + end + else if (axi_r_ready_o & axi_r_valid_i) begin + if (~aligned & overstep) begin + if (len[0]) begin + data_read_o[AXI_DATA_WIDTH-1:0] <= data_read_o[AXI_DATA_WIDTH-1:0] | axi_r_data_h; + end + else begin + data_read_o[AXI_DATA_WIDTH-1:0] <= axi_r_data_l; + end + end + else if (len == i) begin + data_read_o[i*AXI_DATA_WIDTH+:AXI_DATA_WIDTH] <= axi_r_data_l; + end + end + end + end + endgenerate + +endmodule diff --git a/projects/cpu_axi_diff/vsrc/cpu.v b/projects/cpu_axi_diff/vsrc/cpu.v new file mode 100755 index 0000000..4b1ad7a --- /dev/null +++ b/projects/cpu_axi_diff/vsrc/cpu.v @@ -0,0 +1,273 @@ + +//--xuezhen-- + +`include "defines.v" + +module cpu( + input clock, + input reset, + + output if_valid, + input if_ready, + input [63:0] if_data_read, + output [63:0] if_addr, + output [1:0] if_size, + input [1:0] if_resp +); + +// if_stage +wire [63 : 0] pc; +wire [31 : 0] inst; + +// id_stage +// id_stage -> regfile +wire rs1_r_ena; +wire [4 : 0]rs1_r_addr; +wire rs2_r_ena; +wire [4 : 0]rs2_r_addr; +wire rd_w_ena; +wire [4 : 0]rd_w_addr; +// id_stage -> exe_stage +wire [4 : 0]inst_type; +wire [7 : 0]inst_opcode; +wire [`REG_BUS]op1; +wire [`REG_BUS]op2; + +// regfile -> id_stage +wire [`REG_BUS] r_data1; +wire [`REG_BUS] r_data2; +// regfile -> difftest +wire [`REG_BUS] regs[0 : 31]; + +// exe_stage +// exe_stage -> other stage +wire [4 : 0]inst_type_o; +// exe_stage -> regfile +wire [`REG_BUS]rd_data; + + +wire fetched; + +if_stage If_stage( + .clk (clock), + .rst (reset), + + .pc (pc), + .inst (inst), + + .if_valid (if_valid), + .if_ready (if_ready), + .if_data_read (if_data_read), + .if_addr (if_addr), + .if_size (if_size), + .if_resp (if_resp), + + .fetched (fetched) +); + +id_stage Id_stage( + .rst (reset), + .inst (inst), + .rs1_data (r_data1), + .rs2_data (r_data2), + + .rs1_r_ena (rs1_r_ena), + .rs1_r_addr (rs1_r_addr), + .rs2_r_ena (rs2_r_ena), + .rs2_r_addr (rs2_r_addr), + .rd_w_ena (rd_w_ena), + .rd_w_addr (rd_w_addr), + .inst_type (inst_type), + .inst_opcode (inst_opcode), + .op1 (op1), + .op2 (op2) +); + +exe_stage Exe_stage( + .rst (reset), + .inst_type_i (inst_type), + .inst_opcode (inst_opcode), + .op1 (op1), + .op2 (op2), + + .inst_type_o (inst_type_o), + .rd_data (rd_data) +); + +regfile Regfile( + .clk (clock), + .rst (reset), + .w_addr (rd_w_addr), + .w_data (rd_data), + .w_ena (rd_w_ena), + + .r_addr1 (rs1_r_addr), + .r_data1 (r_data1), + .r_ena1 (rs1_r_ena), + .r_addr2 (rs2_r_addr), + .r_data2 (r_data2), + .r_ena2 (rs2_r_ena), + + .regs_o (regs) +); + + +// Difftest +reg cmt_wen; +reg [7:0] cmt_wdest; +reg [`REG_BUS] cmt_wdata; +reg [`REG_BUS] cmt_pc; +reg [31:0] cmt_inst; +reg cmt_valid; +reg trap; +reg [7:0] trap_code; +reg [63:0] cycleCnt; +reg [63:0] instrCnt; +reg [`REG_BUS] regs_diff [0 : 31]; + +wire inst_valid = fetched; + +always @(negedge clock) begin + if (reset) begin + {cmt_wen, cmt_wdest, cmt_wdata, cmt_pc, cmt_inst, cmt_valid, trap, trap_code, cycleCnt, instrCnt} <= 0; + end + else if (~trap) begin + cmt_wen <= rd_w_ena; + cmt_wdest <= {3'd0, rd_w_addr}; + cmt_wdata <= rd_data; + cmt_pc <= pc; + cmt_inst <= inst; + cmt_valid <= inst_valid; + + regs_diff <= regs; + + trap <= inst[6:0] == 7'h6b; + trap_code <= regs[10][7:0]; + cycleCnt <= cycleCnt + 1; + instrCnt <= instrCnt + inst_valid; + end +end + +DifftestInstrCommit DifftestInstrCommit( + .clock (clock), + .coreid (0), + .index (0), + .valid (cmt_valid), + .pc (cmt_pc), + .instr (cmt_inst), + .skip (0), + .isRVC (0), + .scFailed (0), + .wen (cmt_wen), + .wdest (cmt_wdest), + .wdata (cmt_wdata) +); + +DifftestArchIntRegState DifftestArchIntRegState ( + .clock (clock), + .coreid (0), + .gpr_0 (regs_diff[0]), + .gpr_1 (regs_diff[1]), + .gpr_2 (regs_diff[2]), + .gpr_3 (regs_diff[3]), + .gpr_4 (regs_diff[4]), + .gpr_5 (regs_diff[5]), + .gpr_6 (regs_diff[6]), + .gpr_7 (regs_diff[7]), + .gpr_8 (regs_diff[8]), + .gpr_9 (regs_diff[9]), + .gpr_10 (regs_diff[10]), + .gpr_11 (regs_diff[11]), + .gpr_12 (regs_diff[12]), + .gpr_13 (regs_diff[13]), + .gpr_14 (regs_diff[14]), + .gpr_15 (regs_diff[15]), + .gpr_16 (regs_diff[16]), + .gpr_17 (regs_diff[17]), + .gpr_18 (regs_diff[18]), + .gpr_19 (regs_diff[19]), + .gpr_20 (regs_diff[20]), + .gpr_21 (regs_diff[21]), + .gpr_22 (regs_diff[22]), + .gpr_23 (regs_diff[23]), + .gpr_24 (regs_diff[24]), + .gpr_25 (regs_diff[25]), + .gpr_26 (regs_diff[26]), + .gpr_27 (regs_diff[27]), + .gpr_28 (regs_diff[28]), + .gpr_29 (regs_diff[29]), + .gpr_30 (regs_diff[30]), + .gpr_31 (regs_diff[31]) +); + +DifftestTrapEvent DifftestTrapEvent( + .clock (clock), + .coreid (0), + .valid (trap), + .code (trap_code), + .pc (cmt_pc), + .cycleCnt (cycleCnt), + .instrCnt (instrCnt) +); + +DifftestCSRState DifftestCSRState( + .clock (clock), + .coreid (0), + .priviledgeMode (0), + .mstatus (0), + .sstatus (0), + .mepc (0), + .sepc (0), + .mtval (0), + .stval (0), + .mtvec (0), + .stvec (0), + .mcause (0), + .scause (0), + .satp (0), + .mip (0), + .mie (0), + .mscratch (0), + .sscratch (0), + .mideleg (0), + .medeleg (0) +); + +DifftestArchFpRegState DifftestArchFpRegState( + .clock (clock), + .coreid (0), + .fpr_0 (0), + .fpr_1 (0), + .fpr_2 (0), + .fpr_3 (0), + .fpr_4 (0), + .fpr_5 (0), + .fpr_6 (0), + .fpr_7 (0), + .fpr_8 (0), + .fpr_9 (0), + .fpr_10 (0), + .fpr_11 (0), + .fpr_12 (0), + .fpr_13 (0), + .fpr_14 (0), + .fpr_15 (0), + .fpr_16 (0), + .fpr_17 (0), + .fpr_18 (0), + .fpr_19 (0), + .fpr_20 (0), + .fpr_21 (0), + .fpr_22 (0), + .fpr_23 (0), + .fpr_24 (0), + .fpr_25 (0), + .fpr_26 (0), + .fpr_27 (0), + .fpr_28 (0), + .fpr_29 (0), + .fpr_30 (0), + .fpr_31 (0) +); + +endmodule \ No newline at end of file diff --git a/projects/cpu_axi_diff/vsrc/defines.v b/projects/cpu_axi_diff/vsrc/defines.v new file mode 100755 index 0000000..86731fd --- /dev/null +++ b/projects/cpu_axi_diff/vsrc/defines.v @@ -0,0 +1,21 @@ + +`timescale 1ns / 1ps + +`define ZERO_WORD 64'h00000000_00000000 +`define PC_START 64'h00000000_80000000 +`define REG_BUS 63 : 0 +`define INST_ADD 8'h11 + +`define AXI_ADDR_WIDTH 64 +`define AXI_DATA_WIDTH 64 +`define AXI_ID_WIDTH 4 +`define AXI_USER_WIDTH 1 + +`define SIZE_B 2'b00 +`define SIZE_H 2'b01 +`define SIZE_W 2'b10 +`define SIZE_D 2'b11 + +`define REQ_READ 1'b0 +`define REQ_WRITE 1'b1 + diff --git a/projects/cpu_axi_diff/vsrc/exe_stage.v b/projects/cpu_axi_diff/vsrc/exe_stage.v new file mode 100755 index 0000000..d263cf8 --- /dev/null +++ b/projects/cpu_axi_diff/vsrc/exe_stage.v @@ -0,0 +1,35 @@ + +//--xuezhen-- + +`include "defines.v" + +module exe_stage( + input wire rst, + input wire [4 : 0]inst_type_i, + input wire [7 : 0]inst_opcode, + input wire [`REG_BUS]op1, + input wire [`REG_BUS]op2, + + output wire [4 : 0]inst_type_o, + output reg [`REG_BUS]rd_data +); + +assign inst_type_o = inst_type_i; + +always@( * ) +begin + if( rst == 1'b1 ) + begin + rd_data = `ZERO_WORD; + end + else + begin + case( inst_opcode ) + `INST_ADD: begin rd_data = op1 + op2; end + default: begin rd_data = `ZERO_WORD; end + endcase + end +end + + +endmodule diff --git a/projects/cpu_axi_diff/vsrc/id_stage.v b/projects/cpu_axi_diff/vsrc/id_stage.v new file mode 100755 index 0000000..dc19f67 --- /dev/null +++ b/projects/cpu_axi_diff/vsrc/id_stage.v @@ -0,0 +1,68 @@ + +//--xuezhen-- + +`include "defines.v" + +module id_stage( + input wire rst, + input wire [31 : 0]inst, + input wire [`REG_BUS]rs1_data, + input wire [`REG_BUS]rs2_data, + + + output wire rs1_r_ena, + output wire [4 : 0]rs1_r_addr, + output wire rs2_r_ena, + output wire [4 : 0]rs2_r_addr, + output wire rd_w_ena, + output wire [4 : 0]rd_w_addr, + + output wire [4 : 0]inst_type, + output wire [7 : 0]inst_opcode, + output wire [`REG_BUS]op1, + output wire [`REG_BUS]op2 +); + + +wire inst_addi = ~opcode[2] & ~opcode[3] & opcode[4] & ~opcode[5] & ~opcode[5] + & ~func3[0] & ~func3[1] & ~func3[2]; + +// arith inst: 10000; logic: 01000; +// load-store: 00100; j: 00010; sys: 000001 +assign inst_type[4] = ( rst == 1'b1 ) ? 0 : inst_addi; + +assign inst_opcode[0] = ( rst == 1'b1 ) ? 0 : inst_addi; +assign inst_opcode[1] = ( rst == 1'b1 ) ? 0 : 0; +assign inst_opcode[2] = ( rst == 1'b1 ) ? 0 : 0; +assign inst_opcode[3] = ( rst == 1'b1 ) ? 0 : 0; +assign inst_opcode[4] = ( rst == 1'b1 ) ? 0 : inst_addi; +assign inst_opcode[5] = ( rst == 1'b1 ) ? 0 : 0; +assign inst_opcode[6] = ( rst == 1'b1 ) ? 0 : 0; +assign inst_opcode[7] = ( rst == 1'b1 ) ? 0 : 0; + +// I-type +wire [6 : 0]opcode; +wire [4 : 0]rd; +wire [2 : 0]func3; +wire [4 : 0]rs1; +wire [11 : 0]imm; +assign opcode = inst[6 : 0]; +assign rd = inst[11 : 7]; +assign func3 = inst[14 : 12]; +assign rs1 = inst[19 : 15]; +assign imm = inst[31 : 20]; + + +assign rs1_r_ena = ( rst == 1'b1 ) ? 0 : inst_type[4]; +assign rs1_r_addr = ( rst == 1'b1 ) ? 0 : ( inst_type[4] == 1'b1 ? rs1 : 0 ); +assign rs2_r_ena = 0; +assign rs2_r_addr = 0; + +assign rd_w_ena = ( rst == 1'b1 ) ? 0 : inst_type[4]; +assign rd_w_addr = ( rst == 1'b1 ) ? 0 : ( inst_type[4] == 1'b1 ? rd : 0 ); + +assign op1 = ( rst == 1'b1 ) ? 0 : ( inst_type[4] == 1'b1 ? rs1_data : 0 ); +assign op2 = ( rst == 1'b1 ) ? 0 : ( inst_type[4] == 1'b1 ? { {52{imm[11]}}, imm } : 0 ); + + +endmodule diff --git a/projects/cpu_axi_diff/vsrc/if_stage.v b/projects/cpu_axi_diff/vsrc/if_stage.v new file mode 100755 index 0000000..f626a7d --- /dev/null +++ b/projects/cpu_axi_diff/vsrc/if_stage.v @@ -0,0 +1,48 @@ + +//--xuezhen-- + +`include "defines.v" + + +module if_stage( + input wire clk, + input wire rst, + + output reg [63:0] pc, + output reg [31:0] inst, + + output if_valid, + input if_ready, + input [63:0] if_data_read, + output reg [63:0] if_addr, + output [1:0] if_size, + input [1:0] if_resp, + + output reg fetched +); + +wire handshake_done = if_valid & if_ready; +reg [63:0] addr; + +// fetch an instruction +always @( posedge clk ) begin + if (rst) begin + pc <= `PC_START; + if_addr <= `PC_START; + fetched <= 0; + end + else if ( handshake_done ) begin + pc <= if_addr; + if_addr <= if_addr + 4; + fetched <= 1; + inst <= if_data_read[31:0]; + end + else begin + fetched <= 0; + end +end + +assign if_valid = 1'b1; +assign if_size = `SIZE_W; + +endmodule diff --git a/projects/cpu_axi_diff/vsrc/regfile.v b/projects/cpu_axi_diff/vsrc/regfile.v new file mode 100755 index 0000000..8c4f92f --- /dev/null +++ b/projects/cpu_axi_diff/vsrc/regfile.v @@ -0,0 +1,95 @@ + +`include "defines.v" + +module regfile( + input wire clk, + input wire rst, + + input wire [4 : 0] w_addr, + input wire [`REG_BUS] w_data, + input wire w_ena, + + input wire [4 : 0] r_addr1, + output reg [`REG_BUS] r_data1, + input wire r_ena1, + + input wire [4 : 0] r_addr2, + output reg [`REG_BUS] r_data2, + input wire r_ena2, + + output wire [`REG_BUS] regs_o[0 : 31] // difftest + ); + + // 32 registers + reg [`REG_BUS] regs[0 : 31]; + + always @(posedge clk) + begin + if ( rst == 1'b1 ) + begin + regs[ 0] <= `ZERO_WORD; + regs[ 1] <= `ZERO_WORD; + regs[ 2] <= `ZERO_WORD; + regs[ 3] <= `ZERO_WORD; + regs[ 4] <= `ZERO_WORD; + regs[ 5] <= `ZERO_WORD; + regs[ 6] <= `ZERO_WORD; + regs[ 7] <= `ZERO_WORD; + regs[ 8] <= `ZERO_WORD; + regs[ 9] <= `ZERO_WORD; + regs[10] <= `ZERO_WORD; + regs[11] <= `ZERO_WORD; + regs[12] <= `ZERO_WORD; + regs[13] <= `ZERO_WORD; + regs[14] <= `ZERO_WORD; + regs[15] <= `ZERO_WORD; + regs[16] <= `ZERO_WORD; + regs[17] <= `ZERO_WORD; + regs[18] <= `ZERO_WORD; + regs[19] <= `ZERO_WORD; + regs[20] <= `ZERO_WORD; + regs[21] <= `ZERO_WORD; + regs[22] <= `ZERO_WORD; + regs[23] <= `ZERO_WORD; + regs[24] <= `ZERO_WORD; + regs[25] <= `ZERO_WORD; + regs[26] <= `ZERO_WORD; + regs[27] <= `ZERO_WORD; + regs[28] <= `ZERO_WORD; + regs[29] <= `ZERO_WORD; + regs[30] <= `ZERO_WORD; + regs[31] <= `ZERO_WORD; + end + else + begin + if ((w_ena == 1'b1) && (w_addr != 5'h00)) + regs[w_addr] <= w_data; + end + end + + always @(*) begin + if (rst == 1'b1) + r_data1 = `ZERO_WORD; + else if (r_ena1 == 1'b1) + r_data1 = regs[r_addr1]; + else + r_data1 = `ZERO_WORD; + end + + always @(*) begin + if (rst == 1'b1) + r_data2 = `ZERO_WORD; + else if (r_ena2 == 1'b1) + r_data2 = regs[r_addr2]; + else + r_data2 = `ZERO_WORD; + end + + genvar i; + generate + for (i = 0; i < 32; i = i + 1) begin + assign regs_o[i] = (w_ena & w_addr == i & i != 0) ? w_data : regs[i]; + end + endgenerate + +endmodule From c4018c655e22d7e55e04578ff5defe6a1ce6b5d0 Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Fri, 13 Aug 2021 09:24:09 +0000 Subject: [PATCH 02/62] Change the submodule path --- .gitmodules | 12 +- README.md | 2 +- libraries/NEMU | 1 + libraries/NEMU/.gitignore | 12 - libraries/NEMU/Kconfig | 286 ---- libraries/NEMU/Makefile | 148 -- libraries/NEMU/README.md | 46 - libraries/NEMU/configs/.gitignore | 1 - libraries/NEMU/configs/riscv32-pa_defconfig | 4 - libraries/NEMU/configs/riscv64-pa_defconfig | 5 - libraries/NEMU/configs/riscv64-rvv_defconfig | 99 -- .../NEMU/configs/riscv64-xs-ref_defconfig | 86 - libraries/NEMU/configs/riscv64-xs_defconfig | 113 -- libraries/NEMU/include/common.h | 30 - libraries/NEMU/include/cpu/cpu.h | 28 - libraries/NEMU/include/cpu/decode.h | 167 -- libraries/NEMU/include/cpu/difftest.h | 37 - libraries/NEMU/include/cpu/exec.h | 29 - libraries/NEMU/include/cpu/ifetch.h | 23 - libraries/NEMU/include/debug.h | 31 - libraries/NEMU/include/device/alarm.h | 7 - libraries/NEMU/include/device/map.h | 41 - libraries/NEMU/include/device/mmio.h | 9 - libraries/NEMU/include/isa.h | 57 - libraries/NEMU/include/macro.h | 88 - libraries/NEMU/include/memory/host-tlb.h | 12 - libraries/NEMU/include/memory/host.h | 26 - libraries/NEMU/include/memory/paddr.h | 53 - libraries/NEMU/include/memory/vaddr.h | 19 - libraries/NEMU/include/rtl/fp.h | 61 - libraries/NEMU/include/rtl/pseudo.h | 101 -- libraries/NEMU/include/rtl/rtl.h | 61 - libraries/NEMU/include/utils.h | 52 - libraries/NEMU/lib-include/difftest.h | 35 - libraries/NEMU/resource/bbl/Makefile | 45 - libraries/NEMU/resource/bbl/src/atomic.h | 78 - libraries/NEMU/resource/bbl/src/bits.h | 37 - .../resource/bbl/src/disabled_hart_mask.h | 6 - libraries/NEMU/resource/bbl/src/emulation.c | 294 ---- libraries/NEMU/resource/bbl/src/emulation.h | 53 - libraries/NEMU/resource/bbl/src/encoding.h | 1471 ----------------- .../NEMU/resource/bbl/src/flush_icache.c | 5 - libraries/NEMU/resource/bbl/src/mcall.h | 16 - libraries/NEMU/resource/bbl/src/mentry.S | 292 ---- .../NEMU/resource/bbl/src/misaligned_ldst.c | 141 -- libraries/NEMU/resource/bbl/src/mtrap.c | 197 --- libraries/NEMU/resource/bbl/src/mtrap.h | 102 -- .../NEMU/resource/bbl/src/muldiv_emulation.c | 66 - libraries/NEMU/resource/bbl/src/pk.h | 110 -- libraries/NEMU/resource/bbl/src/snprintf.c | 111 -- .../resource/bbl/src/unprivileged_memory.h | 108 -- libraries/NEMU/resource/bbl/src/vm.h | 37 - libraries/NEMU/resource/debian/README.md | 158 -- libraries/NEMU/resource/mips-elf/README.md | 1 - libraries/NEMU/resource/sdcard/README.md | 58 - libraries/NEMU/resource/sdcard/nemu.c | 542 ------ libraries/NEMU/resource/softfloat/.gitignore | 1 - libraries/NEMU/scripts/build.mk | 50 - libraries/NEMU/scripts/config.mk | 55 - libraries/NEMU/scripts/git.mk | 21 - libraries/NEMU/scripts/isa.mk | 7 - libraries/NEMU/scripts/runall.sh | 41 - libraries/NEMU/src/cpu/cpu-exec.c | 324 ---- libraries/NEMU/src/cpu/difftest/dut.c | 161 -- libraries/NEMU/src/cpu/difftest/ref.c | 84 - libraries/NEMU/src/cpu/tcache.c | 246 --- libraries/NEMU/src/device/Kconfig | 174 -- libraries/NEMU/src/device/alarm.c | 37 - libraries/NEMU/src/device/audio.c | 72 - libraries/NEMU/src/device/device.c | 70 - libraries/NEMU/src/device/disk.c | 45 - libraries/NEMU/src/device/intr.c | 7 - libraries/NEMU/src/device/io/map.c | 44 - libraries/NEMU/src/device/io/mmio.c | 34 - libraries/NEMU/src/device/io/port-io.c | 42 - libraries/NEMU/src/device/keyboard.c | 65 - libraries/NEMU/src/device/mmc.h | 439 ----- libraries/NEMU/src/device/sdcard.c | 121 -- libraries/NEMU/src/device/serial.c | 132 -- libraries/NEMU/src/device/timer.c | 28 - libraries/NEMU/src/device/uartlite.c | 126 -- libraries/NEMU/src/device/vga.c | 60 - libraries/NEMU/src/engine/interpreter/c_op.h | 63 - libraries/NEMU/src/engine/interpreter/fp.c | 116 -- .../NEMU/src/engine/interpreter/host-fp.h | 100 -- .../NEMU/src/engine/interpreter/hostcall.c | 60 - libraries/NEMU/src/engine/interpreter/init.c | 10 - .../NEMU/src/engine/interpreter/rtl-basic.h | 163 -- .../NEMU/src/engine/interpreter/rtl-fp.h | 296 ---- .../src/engine/interpreter/softfloat-fp.h | 143 -- libraries/NEMU/src/isa/mips32/difftest/dut.c | 28 - libraries/NEMU/src/isa/mips32/difftest/ref.c | 12 - .../src/isa/mips32/include/isa-all-instr.h | 18 - .../NEMU/src/isa/mips32/include/isa-def.h | 87 - .../NEMU/src/isa/mips32/include/isa-exec.h | 6 - libraries/NEMU/src/isa/mips32/init.c | 31 - libraries/NEMU/src/isa/mips32/instr/compute.h | 108 -- libraries/NEMU/src/isa/mips32/instr/control.h | 59 - libraries/NEMU/src/isa/mips32/instr/decode.c | 214 --- libraries/NEMU/src/isa/mips32/instr/ldst.h | 159 -- libraries/NEMU/src/isa/mips32/instr/muldiv.h | 39 - libraries/NEMU/src/isa/mips32/instr/special.h | 11 - libraries/NEMU/src/isa/mips32/instr/system.h | 30 - .../NEMU/src/isa/mips32/local-include/intr.h | 15 - .../NEMU/src/isa/mips32/local-include/reg.h | 27 - .../NEMU/src/isa/mips32/local-include/rtl.h | 19 - libraries/NEMU/src/isa/mips32/logo.c | 63 - libraries/NEMU/src/isa/mips32/reg.c | 51 - libraries/NEMU/src/isa/mips32/system/intr.c | 37 - libraries/NEMU/src/isa/mips32/system/mmu.c | 110 -- libraries/NEMU/src/isa/mips32/system/priv.c | 59 - libraries/NEMU/src/isa/riscv32/difftest/dut.c | 24 - libraries/NEMU/src/isa/riscv32/difftest/ref.c | 12 - .../src/isa/riscv32/include/isa-all-instr.h | 28 - .../NEMU/src/isa/riscv32/include/isa-def.h | 115 -- .../NEMU/src/isa/riscv32/include/isa-exec.h | 8 - libraries/NEMU/src/isa/riscv32/init.c | 30 - .../NEMU/src/isa/riscv32/instr/compress.h | 96 -- .../NEMU/src/isa/riscv32/instr/compute.h | 86 - .../NEMU/src/isa/riscv32/instr/control.h | 39 - libraries/NEMU/src/isa/riscv32/instr/decode.c | 271 --- libraries/NEMU/src/isa/riscv32/instr/ldst.h | 27 - libraries/NEMU/src/isa/riscv32/instr/muldiv.h | 50 - libraries/NEMU/src/isa/riscv32/instr/pseudo.h | 67 - .../NEMU/src/isa/riscv32/instr/special.h | 11 - libraries/NEMU/src/isa/riscv32/instr/system.h | 38 - .../NEMU/src/isa/riscv32/local-include/intr.h | 8 - .../NEMU/src/isa/riscv32/local-include/reg.h | 19 - .../NEMU/src/isa/riscv32/local-include/rtl.h | 9 - libraries/NEMU/src/isa/riscv32/logo.c | 48 - libraries/NEMU/src/isa/riscv32/reg.c | 40 - libraries/NEMU/src/isa/riscv32/system/intr.c | 31 - libraries/NEMU/src/isa/riscv32/system/mmu.c | 90 - libraries/NEMU/src/isa/riscv32/system/priv.c | 48 - libraries/NEMU/src/isa/riscv64/Kconfig | 9 - libraries/NEMU/src/isa/riscv64/clint.c | 39 - libraries/NEMU/src/isa/riscv64/difftest/dut.c | 23 - libraries/NEMU/src/isa/riscv64/difftest/ref.c | 110 -- .../src/isa/riscv64/include/isa-all-instr.h | 118 -- .../NEMU/src/isa/riscv64/include/isa-def.h | 189 --- .../NEMU/src/isa/riscv64/include/isa-exec.h | 12 - libraries/NEMU/src/isa/riscv64/init.c | 40 - libraries/NEMU/src/isa/riscv64/instr/decode.c | 107 -- libraries/NEMU/src/isa/riscv64/instr/fp.c | 56 - .../NEMU/src/isa/riscv64/instr/priv/decode.h | 22 - .../NEMU/src/isa/riscv64/instr/priv/exec.h | 17 - .../NEMU/src/isa/riscv64/instr/priv/system.c | 36 - libraries/NEMU/src/isa/riscv64/instr/pseudo.h | 73 - libraries/NEMU/src/isa/riscv64/instr/rocc.h | 6 - .../NEMU/src/isa/riscv64/instr/rva/amo.c | 57 - .../NEMU/src/isa/riscv64/instr/rva/decode.h | 29 - .../NEMU/src/isa/riscv64/instr/rva/exec.h | 25 - .../NEMU/src/isa/riscv64/instr/rvc/decode.h | 388 ----- .../NEMU/src/isa/riscv64/instr/rvc/exec.h | 102 -- .../NEMU/src/isa/riscv64/instr/rvd/decode.h | 41 - .../NEMU/src/isa/riscv64/instr/rvd/exec.h | 154 -- .../NEMU/src/isa/riscv64/instr/rvf/decode.h | 217 --- .../NEMU/src/isa/riscv64/instr/rvf/exec.h | 161 -- .../NEMU/src/isa/riscv64/instr/rvi/compute.h | 119 -- .../NEMU/src/isa/riscv64/instr/rvi/control.h | 36 - .../NEMU/src/isa/riscv64/instr/rvi/decode.h | 215 --- .../NEMU/src/isa/riscv64/instr/rvi/exec.h | 4 - .../NEMU/src/isa/riscv64/instr/rvi/fence.h | 9 - .../NEMU/src/isa/riscv64/instr/rvi/ldst.h | 20 - .../NEMU/src/isa/riscv64/instr/rvm/decode.h | 20 - .../NEMU/src/isa/riscv64/instr/rvm/exec.h | 140 -- .../NEMU/src/isa/riscv64/instr/rvv/decode.h | 175 -- .../NEMU/src/isa/riscv64/instr/rvv/exec.h | 3 - .../NEMU/src/isa/riscv64/instr/rvv/vcfg.h | 37 - .../NEMU/src/isa/riscv64/instr/rvv/vcompute.h | 532 ------ .../src/isa/riscv64/instr/rvv/vcompute_impl.c | 254 --- .../src/isa/riscv64/instr/rvv/vcompute_impl.h | 52 - .../NEMU/src/isa/riscv64/instr/rvv/vldst.h | 255 --- .../src/isa/riscv64/instr/rvv/vldst_impl.c | 119 -- .../src/isa/riscv64/instr/rvv/vldst_impl.h | 33 - .../NEMU/src/isa/riscv64/instr/rvv/vreg.h | 63 - .../src/isa/riscv64/instr/rvv/vreg_impl.c | 106 -- .../NEMU/src/isa/riscv64/instr/special.h | 18 - libraries/NEMU/src/isa/riscv64/instr/vp.c | 15 - .../NEMU/src/isa/riscv64/local-include/csr.h | 300 ---- .../NEMU/src/isa/riscv64/local-include/intr.h | 33 - .../NEMU/src/isa/riscv64/local-include/reg.h | 28 - .../NEMU/src/isa/riscv64/local-include/rtl.h | 45 - .../NEMU/src/isa/riscv64/local-include/vreg.h | 57 - libraries/NEMU/src/isa/riscv64/logo.c | 48 - libraries/NEMU/src/isa/riscv64/reg.c | 72 - libraries/NEMU/src/isa/riscv64/system/intr.c | 78 - libraries/NEMU/src/isa/riscv64/system/mmu.c | 266 --- libraries/NEMU/src/isa/riscv64/system/priv.c | 217 --- libraries/NEMU/src/isa/x86/Kconfig | 18 - libraries/NEMU/src/isa/x86/device/i8237a.c | 14 - libraries/NEMU/src/isa/x86/device/i8253.c | 13 - libraries/NEMU/src/isa/x86/device/i8259a.c | 15 - libraries/NEMU/src/isa/x86/device/ioport80.c | 14 - .../NEMU/src/isa/x86/device/mc146818rtc.c | 13 - libraries/NEMU/src/isa/x86/difftest/dut.c | 61 - libraries/NEMU/src/isa/x86/difftest/ref.c | 12 - libraries/NEMU/src/isa/x86/exec/all-instr.h | 17 - libraries/NEMU/src/isa/x86/exec/exec.c | 476 ------ libraries/NEMU/src/isa/x86/exec/fp.h | 456 ----- .../NEMU/src/isa/x86/include/isa-all-instr.h | 38 - libraries/NEMU/src/isa/x86/include/isa-def.h | 171 -- libraries/NEMU/src/isa/x86/include/isa-exec.h | 11 - libraries/NEMU/src/isa/x86/init.c | 51 - libraries/NEMU/src/isa/x86/instr/arith.h | 456 ----- libraries/NEMU/src/isa/x86/instr/bit.h | 113 -- libraries/NEMU/src/isa/x86/instr/cc.h | 84 - libraries/NEMU/src/isa/x86/instr/control.h | 89 - libraries/NEMU/src/isa/x86/instr/data-mov.h | 161 -- libraries/NEMU/src/isa/x86/instr/decode.c | 864 ---------- libraries/NEMU/src/isa/x86/instr/eflags.c | 69 - libraries/NEMU/src/isa/x86/instr/eflags.h | 60 - libraries/NEMU/src/isa/x86/instr/fp.c | 12 - libraries/NEMU/src/isa/x86/instr/lazycc.h | 312 ---- libraries/NEMU/src/isa/x86/instr/logic.h | 327 ---- libraries/NEMU/src/isa/x86/instr/misc.h | 36 - libraries/NEMU/src/isa/x86/instr/rt.h | 60 - libraries/NEMU/src/isa/x86/instr/special.h | 13 - libraries/NEMU/src/isa/x86/instr/string.h | 122 -- libraries/NEMU/src/isa/x86/instr/system.h | 117 -- libraries/NEMU/src/isa/x86/instr/vector.h | 70 - libraries/NEMU/src/isa/x86/kvm/kvm.c | 224 --- .../NEMU/src/isa/x86/local-include/intr.h | 19 - .../NEMU/src/isa/x86/local-include/reg.h | 37 - .../NEMU/src/isa/x86/local-include/rtl.h | 193 --- libraries/NEMU/src/isa/x86/logo.c | 43 - libraries/NEMU/src/isa/x86/reg.c | 85 - libraries/NEMU/src/isa/x86/system/intr.c | 101 -- libraries/NEMU/src/isa/x86/system/mmu.c | 114 -- libraries/NEMU/src/isa/x86/system/priv.c | 117 -- libraries/NEMU/src/memory/Kconfig | 35 - libraries/NEMU/src/memory/host-tlb.c | 89 - libraries/NEMU/src/memory/paddr.c | 146 -- libraries/NEMU/src/memory/vaddr.c | 109 -- libraries/NEMU/src/monitor/aligncheck.c | 63 - libraries/NEMU/src/monitor/monitor.c | 195 --- libraries/NEMU/src/monitor/ui.c | 297 ---- libraries/NEMU/src/monitor/watchpoint.c | 108 -- libraries/NEMU/src/nemu-main.c | 16 - libraries/NEMU/src/user/init/riscv64.c | 12 - libraries/NEMU/src/user/init/x86.c | 15 - libraries/NEMU/src/user/loader.c | 157 -- libraries/NEMU/src/user/memory.c | 169 -- libraries/NEMU/src/user/syscall-riscv64.h | 77 - libraries/NEMU/src/user/syscall-x86.h | 220 --- libraries/NEMU/src/user/syscall.c | 304 ---- libraries/NEMU/src/user/user.h | 38 - libraries/NEMU/src/utils/expr.c | 299 ---- libraries/NEMU/src/utils/iqueue.c | 33 - libraries/NEMU/src/utils/log.c | 22 - libraries/NEMU/src/utils/state.c | 9 - libraries/NEMU/src/utils/timer.c | 28 - libraries/NEMU/tools/export/.gitignore | 1 - libraries/NEMU/tools/fixdep/Makefile | 3 - libraries/NEMU/tools/fixdep/fixdep.c | 404 ----- libraries/NEMU/tools/gen-expr/.gitignore | 1 - libraries/NEMU/tools/gen-expr/Makefile | 3 - libraries/NEMU/tools/gen-expr/gen-expr.c | 132 -- libraries/NEMU/tools/kconfig/.gitignore | 3 - libraries/NEMU/tools/kconfig/Makefile | 34 - libraries/NEMU/tools/kconfig/conf.c | 727 -------- libraries/NEMU/tools/kconfig/confdata.c | 1338 --------------- libraries/NEMU/tools/kconfig/expr.c | 1303 --------------- libraries/NEMU/tools/kconfig/expr.h | 332 ---- libraries/NEMU/tools/kconfig/lexer.l | 471 ------ libraries/NEMU/tools/kconfig/list.h | 132 -- libraries/NEMU/tools/kconfig/lkc.h | 173 -- libraries/NEMU/tools/kconfig/lkc_proto.h | 51 - .../NEMU/tools/kconfig/lxdialog/checklist.c | 319 ---- .../NEMU/tools/kconfig/lxdialog/dialog.h | 238 --- .../NEMU/tools/kconfig/lxdialog/inputbox.c | 289 ---- .../NEMU/tools/kconfig/lxdialog/menubox.c | 424 ----- .../NEMU/tools/kconfig/lxdialog/textbox.c | 395 ----- libraries/NEMU/tools/kconfig/lxdialog/util.c | 700 -------- libraries/NEMU/tools/kconfig/lxdialog/yesno.c | 101 -- libraries/NEMU/tools/kconfig/mconf.c | 1040 ------------ libraries/NEMU/tools/kconfig/menu.c | 899 ---------- libraries/NEMU/tools/kconfig/parser.y | 727 -------- libraries/NEMU/tools/kconfig/preprocess.c | 574 ------- libraries/NEMU/tools/kconfig/symbol.c | 1314 --------------- libraries/NEMU/tools/kconfig/util.c | 129 -- libraries/NEMU/tools/kvm-diff/Makefile | 9 - libraries/NEMU/tools/kvm-diff/include/paddr.h | 1 - libraries/NEMU/tools/kvm-diff/src/kvm.c | 401 ----- libraries/NEMU/tools/qemu-dl-diff/Makefile | 9 - .../NEMU/tools/qemu-dl-diff/include/common.h | 14 - .../NEMU/tools/qemu-dl-diff/src/diff-test.c | 100 -- libraries/NEMU/tools/qemu-dl-diff/src/hack.c | 311 ---- .../tools/qemu-dl-diff/src/isa/mips32/init.c | 14 - .../tools/qemu-dl-diff/src/isa/riscv32/init.c | 51 - .../tools/qemu-dl-diff/src/isa/riscv64/init.c | 10 - .../tools/qemu-dl-diff/src/isa/x86/init.c | 59 - .../tools/qemu-dl-diff/src/isa/x86/intr.c | 18 - .../NEMU/tools/qemu-socket-diff/Makefile | 9 - .../tools/qemu-socket-diff/include/common.h | 16 - .../qemu-socket-diff/include/isa/mips32.h | 21 - .../qemu-socket-diff/include/isa/riscv32.h | 17 - .../qemu-socket-diff/include/isa/riscv64.h | 18 - .../tools/qemu-socket-diff/include/isa/x86.h | 18 - .../tools/qemu-socket-diff/include/protocol.h | 38 - .../tools/qemu-socket-diff/src/diff-test.c | 84 - .../tools/qemu-socket-diff/src/gdb-host.c | 103 -- .../qemu-socket-diff/src/isa/mips32/init.c | 2 - .../qemu-socket-diff/src/isa/riscv32/init.c | 51 - .../qemu-socket-diff/src/isa/riscv64/init.c | 2 - .../tools/qemu-socket-diff/src/isa/x86/init.c | 54 - .../tools/qemu-socket-diff/src/protocol.c | 306 ---- libraries/difftest | 1 + libraries/difftest/.gitignore | 364 ---- libraries/difftest/LICENSE | 127 -- libraries/difftest/Makefile | 76 - libraries/difftest/README.md | 55 - libraries/difftest/scripts/utils/lock-emu.c | 59 - .../difftest/src/test/csrc/common/axi4.cpp | 125 -- .../difftest/src/test/csrc/common/axi4.h | 230 --- .../difftest/src/test/csrc/common/common.cpp | 45 - .../difftest/src/test/csrc/common/common.h | 57 - .../src/test/csrc/common/compress.cpp | 142 -- .../difftest/src/test/csrc/common/compress.h | 36 - .../difftest/src/test/csrc/common/device.cpp | 70 - .../difftest/src/test/csrc/common/device.h | 26 - .../difftest/src/test/csrc/common/flash.cpp | 57 - .../difftest/src/test/csrc/common/flash.h | 22 - .../src/test/csrc/common/keyboard.cpp | 82 - .../difftest/src/test/csrc/common/macro.h | 31 - .../difftest/src/test/csrc/common/ram.cpp | 453 ----- libraries/difftest/src/test/csrc/common/ram.h | 44 - .../difftest/src/test/csrc/common/sdcard.cpp | 44 - .../difftest/src/test/csrc/common/sdcard.h | 24 - .../difftest/src/test/csrc/common/uart.cpp | 106 -- .../difftest/src/test/csrc/common/vga.cpp | 59 - libraries/difftest/src/test/csrc/vcs/main.cpp | 61 - .../difftest/src/test/csrc/verilator/emu.cpp | 649 -------- .../difftest/src/test/csrc/verilator/emu.h | 142 -- .../difftest/src/test/csrc/verilator/main.cpp | 59 - .../src/test/csrc/verilator/snapshot.cpp | 142 -- .../src/test/csrc/verilator/snapshot.h | 95 -- .../difftest/src/test/vsrc/common/assert.v | 20 - .../difftest/src/test/vsrc/common/difftest.v | 590 ------- libraries/difftest/src/test/vsrc/common/ram.v | 49 - libraries/difftest/src/test/vsrc/common/ref.v | 63 - libraries/difftest/src/test/vsrc/vcs/top.v | 114 -- libraries/difftest/vcs.mk | 49 - libraries/difftest/verilator.mk | 160 -- 344 files changed, 9 insertions(+), 43156 deletions(-) create mode 160000 libraries/NEMU delete mode 100644 libraries/NEMU/.gitignore delete mode 100644 libraries/NEMU/Kconfig delete mode 100644 libraries/NEMU/Makefile delete mode 100644 libraries/NEMU/README.md delete mode 100644 libraries/NEMU/configs/.gitignore delete mode 100644 libraries/NEMU/configs/riscv32-pa_defconfig delete mode 100644 libraries/NEMU/configs/riscv64-pa_defconfig delete mode 100644 libraries/NEMU/configs/riscv64-rvv_defconfig delete mode 100644 libraries/NEMU/configs/riscv64-xs-ref_defconfig delete mode 100644 libraries/NEMU/configs/riscv64-xs_defconfig delete mode 100644 libraries/NEMU/include/common.h delete mode 100644 libraries/NEMU/include/cpu/cpu.h delete mode 100644 libraries/NEMU/include/cpu/decode.h delete mode 100644 libraries/NEMU/include/cpu/difftest.h delete mode 100644 libraries/NEMU/include/cpu/exec.h delete mode 100644 libraries/NEMU/include/cpu/ifetch.h delete mode 100644 libraries/NEMU/include/debug.h delete mode 100644 libraries/NEMU/include/device/alarm.h delete mode 100644 libraries/NEMU/include/device/map.h delete mode 100644 libraries/NEMU/include/device/mmio.h delete mode 100644 libraries/NEMU/include/isa.h delete mode 100644 libraries/NEMU/include/macro.h delete mode 100644 libraries/NEMU/include/memory/host-tlb.h delete mode 100644 libraries/NEMU/include/memory/host.h delete mode 100644 libraries/NEMU/include/memory/paddr.h delete mode 100644 libraries/NEMU/include/memory/vaddr.h delete mode 100644 libraries/NEMU/include/rtl/fp.h delete mode 100644 libraries/NEMU/include/rtl/pseudo.h delete mode 100644 libraries/NEMU/include/rtl/rtl.h delete mode 100644 libraries/NEMU/include/utils.h delete mode 100644 libraries/NEMU/lib-include/difftest.h delete mode 100644 libraries/NEMU/resource/bbl/Makefile delete mode 100644 libraries/NEMU/resource/bbl/src/atomic.h delete mode 100644 libraries/NEMU/resource/bbl/src/bits.h delete mode 100644 libraries/NEMU/resource/bbl/src/disabled_hart_mask.h delete mode 100644 libraries/NEMU/resource/bbl/src/emulation.c delete mode 100644 libraries/NEMU/resource/bbl/src/emulation.h delete mode 100644 libraries/NEMU/resource/bbl/src/encoding.h delete mode 100644 libraries/NEMU/resource/bbl/src/flush_icache.c delete mode 100644 libraries/NEMU/resource/bbl/src/mcall.h delete mode 100644 libraries/NEMU/resource/bbl/src/mentry.S delete mode 100644 libraries/NEMU/resource/bbl/src/misaligned_ldst.c delete mode 100644 libraries/NEMU/resource/bbl/src/mtrap.c delete mode 100644 libraries/NEMU/resource/bbl/src/mtrap.h delete mode 100644 libraries/NEMU/resource/bbl/src/muldiv_emulation.c delete mode 100644 libraries/NEMU/resource/bbl/src/pk.h delete mode 100644 libraries/NEMU/resource/bbl/src/snprintf.c delete mode 100644 libraries/NEMU/resource/bbl/src/unprivileged_memory.h delete mode 100644 libraries/NEMU/resource/bbl/src/vm.h delete mode 100644 libraries/NEMU/resource/debian/README.md delete mode 100644 libraries/NEMU/resource/mips-elf/README.md delete mode 100644 libraries/NEMU/resource/sdcard/README.md delete mode 100644 libraries/NEMU/resource/sdcard/nemu.c delete mode 100644 libraries/NEMU/resource/softfloat/.gitignore delete mode 100644 libraries/NEMU/scripts/build.mk delete mode 100644 libraries/NEMU/scripts/config.mk delete mode 100644 libraries/NEMU/scripts/git.mk delete mode 100644 libraries/NEMU/scripts/isa.mk delete mode 100644 libraries/NEMU/scripts/runall.sh delete mode 100644 libraries/NEMU/src/cpu/cpu-exec.c delete mode 100644 libraries/NEMU/src/cpu/difftest/dut.c delete mode 100644 libraries/NEMU/src/cpu/difftest/ref.c delete mode 100644 libraries/NEMU/src/cpu/tcache.c delete mode 100644 libraries/NEMU/src/device/Kconfig delete mode 100644 libraries/NEMU/src/device/alarm.c delete mode 100644 libraries/NEMU/src/device/audio.c delete mode 100644 libraries/NEMU/src/device/device.c delete mode 100644 libraries/NEMU/src/device/disk.c delete mode 100644 libraries/NEMU/src/device/intr.c delete mode 100644 libraries/NEMU/src/device/io/map.c delete mode 100644 libraries/NEMU/src/device/io/mmio.c delete mode 100644 libraries/NEMU/src/device/io/port-io.c delete mode 100644 libraries/NEMU/src/device/keyboard.c delete mode 100644 libraries/NEMU/src/device/mmc.h delete mode 100644 libraries/NEMU/src/device/sdcard.c delete mode 100644 libraries/NEMU/src/device/serial.c delete mode 100644 libraries/NEMU/src/device/timer.c delete mode 100644 libraries/NEMU/src/device/uartlite.c delete mode 100644 libraries/NEMU/src/device/vga.c delete mode 100644 libraries/NEMU/src/engine/interpreter/c_op.h delete mode 100644 libraries/NEMU/src/engine/interpreter/fp.c delete mode 100644 libraries/NEMU/src/engine/interpreter/host-fp.h delete mode 100644 libraries/NEMU/src/engine/interpreter/hostcall.c delete mode 100644 libraries/NEMU/src/engine/interpreter/init.c delete mode 100644 libraries/NEMU/src/engine/interpreter/rtl-basic.h delete mode 100644 libraries/NEMU/src/engine/interpreter/rtl-fp.h delete mode 100644 libraries/NEMU/src/engine/interpreter/softfloat-fp.h delete mode 100644 libraries/NEMU/src/isa/mips32/difftest/dut.c delete mode 100644 libraries/NEMU/src/isa/mips32/difftest/ref.c delete mode 100644 libraries/NEMU/src/isa/mips32/include/isa-all-instr.h delete mode 100644 libraries/NEMU/src/isa/mips32/include/isa-def.h delete mode 100644 libraries/NEMU/src/isa/mips32/include/isa-exec.h delete mode 100644 libraries/NEMU/src/isa/mips32/init.c delete mode 100644 libraries/NEMU/src/isa/mips32/instr/compute.h delete mode 100644 libraries/NEMU/src/isa/mips32/instr/control.h delete mode 100644 libraries/NEMU/src/isa/mips32/instr/decode.c delete mode 100644 libraries/NEMU/src/isa/mips32/instr/ldst.h delete mode 100644 libraries/NEMU/src/isa/mips32/instr/muldiv.h delete mode 100644 libraries/NEMU/src/isa/mips32/instr/special.h delete mode 100644 libraries/NEMU/src/isa/mips32/instr/system.h delete mode 100644 libraries/NEMU/src/isa/mips32/local-include/intr.h delete mode 100644 libraries/NEMU/src/isa/mips32/local-include/reg.h delete mode 100644 libraries/NEMU/src/isa/mips32/local-include/rtl.h delete mode 100644 libraries/NEMU/src/isa/mips32/logo.c delete mode 100644 libraries/NEMU/src/isa/mips32/reg.c delete mode 100644 libraries/NEMU/src/isa/mips32/system/intr.c delete mode 100644 libraries/NEMU/src/isa/mips32/system/mmu.c delete mode 100644 libraries/NEMU/src/isa/mips32/system/priv.c delete mode 100644 libraries/NEMU/src/isa/riscv32/difftest/dut.c delete mode 100644 libraries/NEMU/src/isa/riscv32/difftest/ref.c delete mode 100644 libraries/NEMU/src/isa/riscv32/include/isa-all-instr.h delete mode 100644 libraries/NEMU/src/isa/riscv32/include/isa-def.h delete mode 100644 libraries/NEMU/src/isa/riscv32/include/isa-exec.h delete mode 100644 libraries/NEMU/src/isa/riscv32/init.c delete mode 100644 libraries/NEMU/src/isa/riscv32/instr/compress.h delete mode 100644 libraries/NEMU/src/isa/riscv32/instr/compute.h delete mode 100644 libraries/NEMU/src/isa/riscv32/instr/control.h delete mode 100644 libraries/NEMU/src/isa/riscv32/instr/decode.c delete mode 100644 libraries/NEMU/src/isa/riscv32/instr/ldst.h delete mode 100644 libraries/NEMU/src/isa/riscv32/instr/muldiv.h delete mode 100644 libraries/NEMU/src/isa/riscv32/instr/pseudo.h delete mode 100644 libraries/NEMU/src/isa/riscv32/instr/special.h delete mode 100644 libraries/NEMU/src/isa/riscv32/instr/system.h delete mode 100644 libraries/NEMU/src/isa/riscv32/local-include/intr.h delete mode 100644 libraries/NEMU/src/isa/riscv32/local-include/reg.h delete mode 100644 libraries/NEMU/src/isa/riscv32/local-include/rtl.h delete mode 100644 libraries/NEMU/src/isa/riscv32/logo.c delete mode 100644 libraries/NEMU/src/isa/riscv32/reg.c delete mode 100644 libraries/NEMU/src/isa/riscv32/system/intr.c delete mode 100644 libraries/NEMU/src/isa/riscv32/system/mmu.c delete mode 100644 libraries/NEMU/src/isa/riscv32/system/priv.c delete mode 100644 libraries/NEMU/src/isa/riscv64/Kconfig delete mode 100644 libraries/NEMU/src/isa/riscv64/clint.c delete mode 100644 libraries/NEMU/src/isa/riscv64/difftest/dut.c delete mode 100644 libraries/NEMU/src/isa/riscv64/difftest/ref.c delete mode 100644 libraries/NEMU/src/isa/riscv64/include/isa-all-instr.h delete mode 100644 libraries/NEMU/src/isa/riscv64/include/isa-def.h delete mode 100644 libraries/NEMU/src/isa/riscv64/include/isa-exec.h delete mode 100644 libraries/NEMU/src/isa/riscv64/init.c delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/decode.c delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/fp.c delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/priv/decode.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/priv/exec.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/priv/system.c delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/pseudo.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rocc.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rva/amo.c delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rva/decode.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rva/exec.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvc/decode.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvc/exec.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvd/decode.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvd/exec.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvf/decode.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvf/exec.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvi/compute.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvi/control.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvi/decode.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvi/exec.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvi/fence.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvi/ldst.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvm/decode.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvm/exec.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/decode.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/exec.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vcfg.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.c delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vldst.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.c delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vreg.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/rvv/vreg_impl.c delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/special.h delete mode 100644 libraries/NEMU/src/isa/riscv64/instr/vp.c delete mode 100644 libraries/NEMU/src/isa/riscv64/local-include/csr.h delete mode 100644 libraries/NEMU/src/isa/riscv64/local-include/intr.h delete mode 100644 libraries/NEMU/src/isa/riscv64/local-include/reg.h delete mode 100644 libraries/NEMU/src/isa/riscv64/local-include/rtl.h delete mode 100644 libraries/NEMU/src/isa/riscv64/local-include/vreg.h delete mode 100644 libraries/NEMU/src/isa/riscv64/logo.c delete mode 100644 libraries/NEMU/src/isa/riscv64/reg.c delete mode 100644 libraries/NEMU/src/isa/riscv64/system/intr.c delete mode 100644 libraries/NEMU/src/isa/riscv64/system/mmu.c delete mode 100644 libraries/NEMU/src/isa/riscv64/system/priv.c delete mode 100644 libraries/NEMU/src/isa/x86/Kconfig delete mode 100644 libraries/NEMU/src/isa/x86/device/i8237a.c delete mode 100644 libraries/NEMU/src/isa/x86/device/i8253.c delete mode 100644 libraries/NEMU/src/isa/x86/device/i8259a.c delete mode 100644 libraries/NEMU/src/isa/x86/device/ioport80.c delete mode 100644 libraries/NEMU/src/isa/x86/device/mc146818rtc.c delete mode 100644 libraries/NEMU/src/isa/x86/difftest/dut.c delete mode 100644 libraries/NEMU/src/isa/x86/difftest/ref.c delete mode 100644 libraries/NEMU/src/isa/x86/exec/all-instr.h delete mode 100644 libraries/NEMU/src/isa/x86/exec/exec.c delete mode 100644 libraries/NEMU/src/isa/x86/exec/fp.h delete mode 100644 libraries/NEMU/src/isa/x86/include/isa-all-instr.h delete mode 100644 libraries/NEMU/src/isa/x86/include/isa-def.h delete mode 100644 libraries/NEMU/src/isa/x86/include/isa-exec.h delete mode 100644 libraries/NEMU/src/isa/x86/init.c delete mode 100644 libraries/NEMU/src/isa/x86/instr/arith.h delete mode 100644 libraries/NEMU/src/isa/x86/instr/bit.h delete mode 100644 libraries/NEMU/src/isa/x86/instr/cc.h delete mode 100644 libraries/NEMU/src/isa/x86/instr/control.h delete mode 100644 libraries/NEMU/src/isa/x86/instr/data-mov.h delete mode 100644 libraries/NEMU/src/isa/x86/instr/decode.c delete mode 100644 libraries/NEMU/src/isa/x86/instr/eflags.c delete mode 100644 libraries/NEMU/src/isa/x86/instr/eflags.h delete mode 100644 libraries/NEMU/src/isa/x86/instr/fp.c delete mode 100644 libraries/NEMU/src/isa/x86/instr/lazycc.h delete mode 100644 libraries/NEMU/src/isa/x86/instr/logic.h delete mode 100644 libraries/NEMU/src/isa/x86/instr/misc.h delete mode 100644 libraries/NEMU/src/isa/x86/instr/rt.h delete mode 100644 libraries/NEMU/src/isa/x86/instr/special.h delete mode 100644 libraries/NEMU/src/isa/x86/instr/string.h delete mode 100644 libraries/NEMU/src/isa/x86/instr/system.h delete mode 100644 libraries/NEMU/src/isa/x86/instr/vector.h delete mode 100644 libraries/NEMU/src/isa/x86/kvm/kvm.c delete mode 100644 libraries/NEMU/src/isa/x86/local-include/intr.h delete mode 100644 libraries/NEMU/src/isa/x86/local-include/reg.h delete mode 100644 libraries/NEMU/src/isa/x86/local-include/rtl.h delete mode 100644 libraries/NEMU/src/isa/x86/logo.c delete mode 100644 libraries/NEMU/src/isa/x86/reg.c delete mode 100644 libraries/NEMU/src/isa/x86/system/intr.c delete mode 100644 libraries/NEMU/src/isa/x86/system/mmu.c delete mode 100644 libraries/NEMU/src/isa/x86/system/priv.c delete mode 100644 libraries/NEMU/src/memory/Kconfig delete mode 100644 libraries/NEMU/src/memory/host-tlb.c delete mode 100644 libraries/NEMU/src/memory/paddr.c delete mode 100644 libraries/NEMU/src/memory/vaddr.c delete mode 100644 libraries/NEMU/src/monitor/aligncheck.c delete mode 100644 libraries/NEMU/src/monitor/monitor.c delete mode 100644 libraries/NEMU/src/monitor/ui.c delete mode 100644 libraries/NEMU/src/monitor/watchpoint.c delete mode 100644 libraries/NEMU/src/nemu-main.c delete mode 100644 libraries/NEMU/src/user/init/riscv64.c delete mode 100644 libraries/NEMU/src/user/init/x86.c delete mode 100644 libraries/NEMU/src/user/loader.c delete mode 100644 libraries/NEMU/src/user/memory.c delete mode 100644 libraries/NEMU/src/user/syscall-riscv64.h delete mode 100644 libraries/NEMU/src/user/syscall-x86.h delete mode 100644 libraries/NEMU/src/user/syscall.c delete mode 100644 libraries/NEMU/src/user/user.h delete mode 100644 libraries/NEMU/src/utils/expr.c delete mode 100644 libraries/NEMU/src/utils/iqueue.c delete mode 100644 libraries/NEMU/src/utils/log.c delete mode 100644 libraries/NEMU/src/utils/state.c delete mode 100644 libraries/NEMU/src/utils/timer.c delete mode 100644 libraries/NEMU/tools/export/.gitignore delete mode 100644 libraries/NEMU/tools/fixdep/Makefile delete mode 100644 libraries/NEMU/tools/fixdep/fixdep.c delete mode 100644 libraries/NEMU/tools/gen-expr/.gitignore delete mode 100644 libraries/NEMU/tools/gen-expr/Makefile delete mode 100644 libraries/NEMU/tools/gen-expr/gen-expr.c delete mode 100644 libraries/NEMU/tools/kconfig/.gitignore delete mode 100644 libraries/NEMU/tools/kconfig/Makefile delete mode 100644 libraries/NEMU/tools/kconfig/conf.c delete mode 100644 libraries/NEMU/tools/kconfig/confdata.c delete mode 100644 libraries/NEMU/tools/kconfig/expr.c delete mode 100644 libraries/NEMU/tools/kconfig/expr.h delete mode 100644 libraries/NEMU/tools/kconfig/lexer.l delete mode 100644 libraries/NEMU/tools/kconfig/list.h delete mode 100644 libraries/NEMU/tools/kconfig/lkc.h delete mode 100644 libraries/NEMU/tools/kconfig/lkc_proto.h delete mode 100644 libraries/NEMU/tools/kconfig/lxdialog/checklist.c delete mode 100644 libraries/NEMU/tools/kconfig/lxdialog/dialog.h delete mode 100644 libraries/NEMU/tools/kconfig/lxdialog/inputbox.c delete mode 100644 libraries/NEMU/tools/kconfig/lxdialog/menubox.c delete mode 100644 libraries/NEMU/tools/kconfig/lxdialog/textbox.c delete mode 100644 libraries/NEMU/tools/kconfig/lxdialog/util.c delete mode 100644 libraries/NEMU/tools/kconfig/lxdialog/yesno.c delete mode 100644 libraries/NEMU/tools/kconfig/mconf.c delete mode 100644 libraries/NEMU/tools/kconfig/menu.c delete mode 100644 libraries/NEMU/tools/kconfig/parser.y delete mode 100644 libraries/NEMU/tools/kconfig/preprocess.c delete mode 100644 libraries/NEMU/tools/kconfig/symbol.c delete mode 100644 libraries/NEMU/tools/kconfig/util.c delete mode 100644 libraries/NEMU/tools/kvm-diff/Makefile delete mode 100644 libraries/NEMU/tools/kvm-diff/include/paddr.h delete mode 100644 libraries/NEMU/tools/kvm-diff/src/kvm.c delete mode 100644 libraries/NEMU/tools/qemu-dl-diff/Makefile delete mode 100644 libraries/NEMU/tools/qemu-dl-diff/include/common.h delete mode 100644 libraries/NEMU/tools/qemu-dl-diff/src/diff-test.c delete mode 100644 libraries/NEMU/tools/qemu-dl-diff/src/hack.c delete mode 100644 libraries/NEMU/tools/qemu-dl-diff/src/isa/mips32/init.c delete mode 100644 libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv32/init.c delete mode 100644 libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv64/init.c delete mode 100644 libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/init.c delete mode 100644 libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/intr.c delete mode 100644 libraries/NEMU/tools/qemu-socket-diff/Makefile delete mode 100644 libraries/NEMU/tools/qemu-socket-diff/include/common.h delete mode 100644 libraries/NEMU/tools/qemu-socket-diff/include/isa/mips32.h delete mode 100644 libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv32.h delete mode 100644 libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv64.h delete mode 100644 libraries/NEMU/tools/qemu-socket-diff/include/isa/x86.h delete mode 100644 libraries/NEMU/tools/qemu-socket-diff/include/protocol.h delete mode 100644 libraries/NEMU/tools/qemu-socket-diff/src/diff-test.c delete mode 100644 libraries/NEMU/tools/qemu-socket-diff/src/gdb-host.c delete mode 100644 libraries/NEMU/tools/qemu-socket-diff/src/isa/mips32/init.c delete mode 100644 libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv32/init.c delete mode 100644 libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv64/init.c delete mode 100644 libraries/NEMU/tools/qemu-socket-diff/src/isa/x86/init.c delete mode 100644 libraries/NEMU/tools/qemu-socket-diff/src/protocol.c create mode 160000 libraries/difftest delete mode 100644 libraries/difftest/.gitignore delete mode 100644 libraries/difftest/LICENSE delete mode 100644 libraries/difftest/Makefile delete mode 100644 libraries/difftest/README.md delete mode 100644 libraries/difftest/scripts/utils/lock-emu.c delete mode 100644 libraries/difftest/src/test/csrc/common/axi4.cpp delete mode 100644 libraries/difftest/src/test/csrc/common/axi4.h delete mode 100644 libraries/difftest/src/test/csrc/common/common.cpp delete mode 100644 libraries/difftest/src/test/csrc/common/common.h delete mode 100644 libraries/difftest/src/test/csrc/common/compress.cpp delete mode 100644 libraries/difftest/src/test/csrc/common/compress.h delete mode 100644 libraries/difftest/src/test/csrc/common/device.cpp delete mode 100644 libraries/difftest/src/test/csrc/common/device.h delete mode 100644 libraries/difftest/src/test/csrc/common/flash.cpp delete mode 100644 libraries/difftest/src/test/csrc/common/flash.h delete mode 100644 libraries/difftest/src/test/csrc/common/keyboard.cpp delete mode 100644 libraries/difftest/src/test/csrc/common/macro.h delete mode 100644 libraries/difftest/src/test/csrc/common/ram.cpp delete mode 100644 libraries/difftest/src/test/csrc/common/ram.h delete mode 100644 libraries/difftest/src/test/csrc/common/sdcard.cpp delete mode 100644 libraries/difftest/src/test/csrc/common/sdcard.h delete mode 100644 libraries/difftest/src/test/csrc/common/uart.cpp delete mode 100644 libraries/difftest/src/test/csrc/common/vga.cpp delete mode 100644 libraries/difftest/src/test/csrc/vcs/main.cpp delete mode 100644 libraries/difftest/src/test/csrc/verilator/emu.cpp delete mode 100644 libraries/difftest/src/test/csrc/verilator/emu.h delete mode 100644 libraries/difftest/src/test/csrc/verilator/main.cpp delete mode 100644 libraries/difftest/src/test/csrc/verilator/snapshot.cpp delete mode 100644 libraries/difftest/src/test/csrc/verilator/snapshot.h delete mode 100644 libraries/difftest/src/test/vsrc/common/assert.v delete mode 100644 libraries/difftest/src/test/vsrc/common/difftest.v delete mode 100644 libraries/difftest/src/test/vsrc/common/ram.v delete mode 100644 libraries/difftest/src/test/vsrc/common/ref.v delete mode 100644 libraries/difftest/src/test/vsrc/vcs/top.v delete mode 100644 libraries/difftest/vcs.mk delete mode 100644 libraries/difftest/verilator.mk diff --git a/.gitmodules b/.gitmodules index 8995563..f2fcaa7 100755 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,9 @@ -[submodule "libraries/difftest"] - path = libraries/difftest - url = https://github.com/OpenXiangShan/difftest.git -[submodule "libraries/NEMU"] - path = libraries/NEMU - url = https://github.com/OpenXiangShan/NEMU.git [submodule "libraries/DRAMsim3"] path = libraries/DRAMsim3 url = https://github.com/OpenXiangShan/DRAMsim3.git +[submodule "libraries/NEMU"] + path = libraries/NEMU + url = https://github.com/OpenXiangShan/NEMU.git +[submodule "libraries/difftest"] + path = libraries/difftest + url = https://github.com/OpenXiangShan/difftest.git diff --git a/README.md b/README.md index 1725bb3..d28f0ab 100755 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ Enter the test cycle: ./build.sh -e cpu_diff -d -b -s -a "-i inst_diff.bin --dump-wave -b 0" -m "EMU_TRACE=1" ``` -仿真程序运行后,终端将打印绿色的提示内容`HIT GOOD TRAP at pc = 0x8000000c`。说明程序运行到自定义的0x6b指令,并且此时存放错误码的`a0`寄存器的值为0,即程序按照预期结果成功退出。关于0x6b自定义指令作用,可参考[讲座-AM运行环境介绍](https://oscpu.github.io/ysyx/events/events.html?EID=2021-07-13_AM_Difftest)。如果指定输出波形,将在`projects/cpu_diff/build/`路径下生成`.vcd`波形文件。 +仿真程序运行后,终端将打印绿色的提示内容`HIT GOOD TRAP at pc = 0x8000000c`。说明程序运行到自定义的`0x6b`指令,并且此时存放错误码的`a0`寄存器的值为0,即程序按照预期结果成功退出。关于`0x6b`自定义指令作用,可参考[讲座-AM运行环境介绍](https://oscpu.github.io/ysyx/events/events.html?EID=2021-07-13_AM_Difftest)。如果指定输出波形,将在`projects/cpu_diff/build/`路径下生成`.vcd`波形文件。 ### cpu_axi_diff diff --git a/libraries/NEMU b/libraries/NEMU new file mode 160000 index 0000000..b537550 --- /dev/null +++ b/libraries/NEMU @@ -0,0 +1 @@ +Subproject commit b5375505a157ae8bd0d945ffbc90915727133a43 diff --git a/libraries/NEMU/.gitignore b/libraries/NEMU/.gitignore deleted file mode 100644 index 2e6a558..0000000 --- a/libraries/NEMU/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -*.* -* -!*/ -!Makefile -!*.mk -!*.[cSh] -!.gitignore -!README.md -!scripts/runall.sh -!Kconfig -include/config -include/generated diff --git a/libraries/NEMU/Kconfig b/libraries/NEMU/Kconfig deleted file mode 100644 index cd78d24..0000000 --- a/libraries/NEMU/Kconfig +++ /dev/null @@ -1,286 +0,0 @@ -mainmenu "NEMU Configuration Menu" - -choice - prompt "Base ISA" - default ISA_riscv32 -config ISA_x86 - bool "x86" -config ISA_mips32 - bool "mips32" -config ISA_riscv32 - bool "riscv32" -config ISA_riscv64 - bool "riscv64" -endchoice - -config ISA - string - default "x86" if ISA_x86 - default "mips32" if ISA_mips32 - default "riscv32" if ISA_riscv32 - default "riscv64" if ISA_riscv64 - default "none" - -config ILEN_MIN - int - default 1 if ISA_x86 - default 4 if ISA_mips32 - default 4 if ISA_riscv32 - default 2 if ISA_riscv64 - default 1 - -config ISA64 - depends on ISA_riscv64 - bool - default y - -if ISA_x86 -source "src/isa/x86/Kconfig" -endif - -if ISA_riscv64 -source "src/isa/riscv64/Kconfig" -endif - -choice - prompt "NEMU execution engine" - default ENGINE_INTERPRETER - -config ENGINE_INTERPRETER - bool "Interpreter" - help - Interpreter guest instructions one by one. -endchoice - -config ENGINE - string - default "interpreter" if ENGINE_INTERPRETER - default "none" - -choice - prompt "Running mode" - default MODE_SYSTEM - -config MODE_SYSTEM - bool "System mode" - help - Support full-system functionality, including privileged instructions, MMU and devices. - -config MODE_USER - bool "User mode" - help - Only support non-privileged instructions. System calls are forwarded to NEMU or Linux host. -endchoice - -menu "Build Options" -choice - prompt "Compiler" - default CC_GCC -config CC_GCC - bool "gcc" -config CC_GPP - bool "g++" -config CC_CLANG - bool "clang" -endchoice - -config CC - string - default "gcc" if CC_GCC - default "g++" if CC_GPP - default "clang" if CC_CLANG - default "none" - -choice - prompt "Optimization Level" - default CC_O2 -config CC_O0 - bool "O0" -config CC_O1 - bool "O1" -config CC_O2 - bool "O2" -config CC_O3 - bool "O3" -endchoice - -config CC_OPT - string - default "-O0" if CC_O0 - default "-O1" if CC_O1 - default "-O2" if CC_O2 - default "-O3" if CC_O3 - default "none" - -config CC_LTO - bool "Enable link-time optimization" - default y - -config CC_DEBUG - bool "Enable debug information" - default n - -config CC_ASAN - depends on !MODE_USER - bool "Enable address sanitizer" - default n -endmenu - -menu "Testing and Debugging" -config DEBUG - depends on !SHARE - bool "Enable debug features" - default n - help - Enable debug features, which include instruction tracing and watchpoint. - -config DIFFTEST - depends on !SHARE - bool "Enable differential testing" - default n - help - Enable differential testing with a reference design. - Note that this will significantly reduce the performance of NEMU. - -choice - prompt "Reference design" - default DIFFTEST_REF_QEMU_DL - depends on DIFFTEST -config DIFFTEST_REF_QEMU_DL - bool "QEMU, communicate with dynamic linking" -config DIFFTEST_REF_QEMU_SOCKET - bool "QEMU, communicate with socket" -config DIFFTEST_REF_KVM - bool "KVM" -config DIFFTEST_REF_NEMU - bool "NEMU" -endchoice - -config DIFFTEST_REF_QEMU - depends on DIFFTEST_REF_QEMU_DL || DIFFTEST_REF_QEMU_SOCKET - bool - default y - -config DIFFTEST_REF_PATH - string - default "tools/qemu-dl-diff" if DIFFTEST_REF_QEMU_DL - default "tools/qemu-socket-diff" if DIFFTEST_REF_QEMU_SOCKET - default "tools/kvm-diff" if DIFFTEST_REF_KVM - default "." if DIFFTEST_REF_NEMU - default "none" - -config DIFFTEST_REF_NAME - string - default "qemu" if DIFFTEST_REF_QEMU_DL - default "qemu" if DIFFTEST_REF_QEMU_SOCKET - default "kvm" if DIFFTEST_REF_KVM - default "nemu-interpreter" if DIFFTEST_REF_NEMU - default "none" - -config DETERMINISTIC - bool "Make the behavior of NEMU deterministic" - default n - -config IQUEUE - bool "Record the last instrucitons executed" - default n -endmenu - -if !MODE_USER -source "src/memory/Kconfig" -source "src/device/Kconfig" -endif - -choice - prompt "FPU Emulation" - default FPU_HOST -config FPU_HOST - bool "Use host floating point operation" -config FPU_SOFT - bool "Use softfloat library" -config FPU_NONE - bool "Disable FPU Emulation" -endchoice - -choice - prompt "Detecting misaligned memory accessing" - default AC_HOST -config AC_HOST - bool "By host CPU (x86 host only)" -config AC_SOFT - bool "By software emulation" -config AC_NONE - bool "Disable" -endchoice - -menu "Processor difftest reference config" -config SHARE - bool "Build shared library as processor difftest reference" - default n - -config DIFFTEST_STORE_COMMIT - depends on SHARE - bool "Maintain a committed store queue for processor ref" - default y - -config GUIDED_EXEC - depends on SHARE - bool "Enable DUT guided execution" - default y - -config LARGE_COPY - depends on SHARE && !MEM_RANDOM - bool "Enable difftest large memory copy optimization" - default n - -config PANIC_ON_UNIMP_CSR - depends on SHARE - bool "Panic if an unimplemented CSR is being accessed" - default n - -endmenu - -menu "Miscellaneous" -choice - prompt "Host timer" - default TIMER_GETTIMEOFDAY -config TIMER_GETTIMEOFDAY - bool "gettimeofday" -config TIMER_CLOCK_GETTIME - bool "clock_gettime" -endchoice - -config RT_CHECK - bool "Enable runtime checking" - default y - -config PERF_OPT - depends on !SHARE - bool "Performance optimization" - default y - -if PERF_OPT -config TCACHE_SIZE - int "Number of entries in trace cache" - default 8192 - -config BB_LIST_SIZE - int "Number of entries in basic block metadata list" - default 1024 - -config BB_POOL_SIZE - int "Number of entries in basic block metadata pool" - default 1024 - -if !DEBUG && !SHARE -config DISABLE_INSTR_CNT - bool "Disable instruction counting (single step is also disabled)" - default y -endif -endif - -config ENABLE_INSTR_CNT - bool - default n if DISABLE_INSTR_CNT - default y -endmenu diff --git a/libraries/NEMU/Makefile b/libraries/NEMU/Makefile deleted file mode 100644 index 7957fbc..0000000 --- a/libraries/NEMU/Makefile +++ /dev/null @@ -1,148 +0,0 @@ -ifeq ($(wildcard $(NEMU_HOME)/src/nemu-main.c),) - $(error NEMU_HOME=$(NEMU_HOME) is not a NEMU repo) -endif - --include $(NEMU_HOME)/include/config/auto.conf --include $(NEMU_HOME)/include/config/auto.conf.cmd - -DIRS-y = src/cpu src/monitor src/utils -DIRS-$(CONFIG_MODE_SYSTEM) += src/memory - -remove_quote = $(patsubst "%",%,$(1)) - -ISA ?= $(if $(CONFIG_ISA),$(call remove_quote,$(CONFIG_ISA)),x86) -CFLAGS += -D__ISA__=$(ISA) -INC_DIR += $(NEMU_HOME)/src/isa/$(ISA)/include -DIRS-y += src/isa/$(ISA) - -ENGINE ?= $(call remove_quote,$(CONFIG_ENGINE)) -INC_DIR += $(NEMU_HOME)/src/engine/$(ENGINE) -DIRS-y += src/engine/$(ENGINE) - -DIRS-$(CONFIG_MODE_USER) += src/user - -SRCS-y += src/nemu-main.c -DIRS-$(CONFIG_DEVICE) += src/device/io -SRCS-$(CONFIG_DEVICE) += src/device/device.c src/device/alarm.c src/device/intr.c -SRCS-$(CONFIG_HAS_SERIAL) += src/device/serial.c -SRCS-$(CONFIG_HAS_UARTLITE) += src/device/uartlite.c -SRCS-$(CONFIG_HAS_TIMER) += src/device/timer.c -SRCS-$(CONFIG_HAS_KEYBOARD) += src/device/keyboard.c -SRCS-$(CONFIG_HAS_VGA) += src/device/vga.c -SRCS-$(CONFIG_HAS_AUDIO) += src/device/audio.c -SRCS-$(CONFIG_HAS_DISK) += src/device/disk.c -SRCS-$(CONFIG_HAS_SDCARD) += src/device/sdcard.c - -SRCS-y += $(shell find $(DIRS-y) -name "*.c") - -SRCS = $(SRCS-y) - -CC = $(call remove_quote,$(CONFIG_CC)) -CFLAGS_BUILD += $(call remove_quote,$(CONFIG_CC_OPT)) -CFLAGS_BUILD += $(if $(CONFIG_CC_LTO),-flto,) -CFLAGS_BUILD += $(if $(CONFIG_CC_DEBUG),-ggdb3,) -CFLAGS_BUILD += $(if $(CONFIG_CC_ASAN),-fsanitize=address,) -CFLAGS += $(CFLAGS_BUILD) -LDFLAGS += $(CFLAGS_BUILD) - -NAME = nemu-$(ENGINE) - -ifdef CONFIG_MEM_COMPRESS -LDFLAGS += -lz -endif - -ifndef CONFIG_SHARE -LDFLAGS += -lreadline -ldl -pie -else -SHARE = 1 -endif - -ifdef CONFIG_DEVICE -LDFLAGS += -lSDL2 -endif - -ifdef CONFIG_FPU_SOFT -SOFTFLOAT = resource/softfloat/build/softfloat.a -ifeq ($(ISA),riscv64) -SPECIALIZE_TYPE = RISCV -else -SPECIALIZE_TYPE = 8086-SSE -endif -ifdef CONFIG_SHARE -SOFTFLOAT_OPTS_DEFAULT = -DINLINE_LEVEL=5 \ - -DSOFTFLOAT_FAST_DIV32TO16 -DSOFTFLOAT_FAST_DIV64TO32 -SOFTFLOAT_OPTS_OVERRIDE = SOFTFLOAT_OPTS="$(SOFTFLOAT_OPTS_DEFAULT) -fPIC" -endif - -SOFTFLOAT_REPO_PATH = resource/softfloat/repo -ifeq ($(wildcard $(SOFTFLOAT_REPO_PATH)/COPYING.txt),) - $(shell git clone --depth=1 https://github.com/ucb-bar/berkeley-softfloat-3 $(SOFTFLOAT_REPO_PATH)) -endif -SOFTFLOAT_BUILD_PATH = $(abspath $(SOFTFLOAT_REPO_PATH)/build/Linux-x86_64-GCC) - -INC_DIR += $(SOFTFLOAT_REPO_PATH)/source/include -INC_DIR += $(SOFTFLOAT_REPO_PATH)/source/$(SPECIALIZE_TYPE) -LIBS += $(SOFTFLOAT) -$(SOFTFLOAT): - SPECIALIZE_TYPE=$(SPECIALIZE_TYPE) $(SOFTFLOAT_OPTS_OVERRIDE) $(MAKE) -s -C $(SOFTFLOAT_BUILD_PATH) all - mkdir -p $(@D) - ln -sf $(SOFTFLOAT_BUILD_PATH)/softfloat.a $@ - -clean-softfloat: - $(MAKE) -s -C $(SOFTFLOAT_BUILD_PATH) clean -clean-all: clean-softfloat - -.PHONY: $(SOFTFLOAT) clean-softfloat -else ifdef CONFIG_FPU_HOST -LDFLAGS += -lm -endif - -include $(NEMU_HOME)/scripts/git.mk -include $(NEMU_HOME)/scripts/config.mk -include $(NEMU_HOME)/scripts/isa.mk -include $(NEMU_HOME)/scripts/build.mk - -ifdef CONFIG_DIFFTEST -DIFF_REF_PATH = $(NEMU_HOME)/$(call remove_quote,$(CONFIG_DIFFTEST_REF_PATH)) -DIFF_REF_SO = $(DIFF_REF_PATH)/build/$(ISA)-$(call remove_quote,$(CONFIG_DIFFTEST_REF_NAME))-so -MKFLAGS = ISA=$(ISA) SHARE=1 ENGINE=interpreter -ARGS_DIFF = --diff=$(DIFF_REF_SO) - -ifndef CONFIG_DIFFTEST_REF_NEMU -$(DIFF_REF_SO): - $(MAKE) -s -C $(DIFF_REF_PATH) $(MKFLAGS) -endif - -.PHONY: $(DIFF_REF_SO) -endif - -compile_git: - $(call git_commit, "compile") -$(BINARY): compile_git - -# Some convenient rules - -override ARGS ?= --log=$(BUILD_DIR)/nemu-log.txt -override ARGS += $(ARGS_DIFF) - -# Command to execute NEMU -IMG ?= -NEMU_EXEC := $(BINARY) $(ARGS) $(IMG) - -run-env: $(BINARY) $(DIFF_REF_SO) - -run: run-env - $(call git_commit, "run") - $(NEMU_EXEC) - -gdb: run-env - $(call git_commit, "gdb") - gdb -s $(BINARY) --args $(NEMU_EXEC) - -clean-tools = $(dir $(shell find ./tools -name "Makefile")) -$(clean-tools): - -@$(MAKE) -s -C $@ clean -clean-tools: $(clean-tools) -clean-all: clean distclean clean-tools - -.PHONY: run gdb run-env clean-tools clean-all $(clean-tools) diff --git a/libraries/NEMU/README.md b/libraries/NEMU/README.md deleted file mode 100644 index c8199f9..0000000 --- a/libraries/NEMU/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# NEMU - -NEMU(NJU Emulator) is a simple but complete full-system emulator designed for teaching purpose. -Currently it supports x86, mips32, and riscv32. -To build programs run above NEMU, refer to the [AM project](https://github.com/NJU-ProjectN/abstract-machine). - -The main features of NEMU include -* a small monitor with a simple debugger - * single step - * register/memory examination - * expression evaluation without the support of symbols - * watch point - * differential testing with reference design (e.g. QEMU) - * snapshot -* CPU core with support of most common used instructions - * x86 - * real mode is not supported - * x87 floating point instructions are not supported - * mips32 - * CP1 floating point instructions are not supported - * riscv32 - * only RV32IM -* memory -* paging - * TLB is optional (but necessary for mips32) - * protection is not supported -* interrupt and exception - * protection is not supported -* 5 devices - * serial, timer, keyboard, VGA, audio - * most of them are simplified and unprogrammable -* 2 types of I/O - * port-mapped I/O and memory-mapped I/O - -## Howto - -### Run OpenSBI and Linux - -**All steps below use source code in RISCVERS** - -1. Compile a Linux kernel, with proper SD card driver integrated if you want to run Debian or Fedora. Currently Kernel v4.18 is verified to work. -2. Convert ```vmlinux``` to binary format using ```objcopy```. -3. Compile OpenSBI using ```build_linux.sh``` where vmlinux and dtb path may need a modification. dtb can be compiled with dts files located in ```dts``` subdirectory of OpenSBI. -4. Compile NEMU intepreter. You may want to change default sdcard image path in ```src/devices/sdcard.c``` to boot Debian or Fedora. -5. launch NEMU intepreter and load ```fw_payload.bin``` generated by OpenSBI. e.g. ```./build/riscv64-nemu-interpreter ~/Xiangshan_Linux/opensbi/build/platform/generic/firmware/fw_payload.bin``` -6. If you are using a ```vmlinux``` with initramfs, you will likely be greeted with a ```Hello```, otherwise you may see startup logs and finally a login prompt from Debian or Fedora if SD card is configured properly. diff --git a/libraries/NEMU/configs/.gitignore b/libraries/NEMU/configs/.gitignore deleted file mode 100644 index 31aa61c..0000000 --- a/libraries/NEMU/configs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!*_defconfig diff --git a/libraries/NEMU/configs/riscv32-pa_defconfig b/libraries/NEMU/configs/riscv32-pa_defconfig deleted file mode 100644 index 6cc27a9..0000000 --- a/libraries/NEMU/configs/riscv32-pa_defconfig +++ /dev/null @@ -1,4 +0,0 @@ -CONFIG_CC_CLANG=y -CONFIG_CC_O3=y -CONFIG_CC_DEBUG=y -# CONFIG_VGA_SHOW_SCREEN is not set diff --git a/libraries/NEMU/configs/riscv64-pa_defconfig b/libraries/NEMU/configs/riscv64-pa_defconfig deleted file mode 100644 index d1886ea..0000000 --- a/libraries/NEMU/configs/riscv64-pa_defconfig +++ /dev/null @@ -1,5 +0,0 @@ -CONFIG_ISA_riscv64=y -CONFIG_CC_CLANG=y -CONFIG_CC_O3=y -CONFIG_PC_RESET_OFFSET=0x0 -# CONFIG_VGA_SHOW_SCREEN is not set diff --git a/libraries/NEMU/configs/riscv64-rvv_defconfig b/libraries/NEMU/configs/riscv64-rvv_defconfig deleted file mode 100644 index 55aabf5..0000000 --- a/libraries/NEMU/configs/riscv64-rvv_defconfig +++ /dev/null @@ -1,99 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# NEMU Configuration Menu -# -# CONFIG_ISA_x86 is not set -# CONFIG_ISA_mips32 is not set -# CONFIG_ISA_riscv32 is not set -CONFIG_ISA_riscv64=y -CONFIG_ISA="riscv64" -CONFIG_ILEN_MIN=2 -CONFIG_ISA64=y - -# -# ISA-dependent Options for riscv64 -# -CONFIG_CLINT_MMIO=0xa2000000 -CONFIG_RVV_010=y -# end of ISA-dependent Options for riscv64 - -CONFIG_ENGINE_INTERPRETER=y -CONFIG_ENGINE="interpreter" -CONFIG_MODE_SYSTEM=y -# CONFIG_MODE_USER is not set - -# -# Build Options -# -CONFIG_CC_GCC=y -# CONFIG_CC_GPP is not set -# CONFIG_CC_CLANG is not set -CONFIG_CC="gcc" -CONFIG_CC_O0=y -# CONFIG_CC_O1 is not set -# CONFIG_CC_O2 is not set -# CONFIG_CC_O3 is not set -CONFIG_CC_OPT="-O0" -CONFIG_CC_LTO=y -CONFIG_CC_DEBUG=y -# CONFIG_CC_ASAN is not set -# CONFIG_SHARE is not set -# end of Build Options - -# -# Testing and Debugging -# -# CONFIG_DEBUG is not set -# CONFIG_DIFFTEST is not set -CONFIG_DIFFTEST_REF_PATH="none" -CONFIG_DIFFTEST_REF_NAME="none" -CONFIG_DETERMINISTIC=y -# CONFIG_IQUEUE is not set -# end of Testing and Debugging - -# -# Memory Configuration -# -CONFIG_MBASE=0x80000000 -CONFIG_MSIZE=0x8000000 -CONFIG_PC_RESET_OFFSET=0x0 -CONFIG_USE_MMAP=y -CONFIG_MEM_RANDOM=y -# end of Memory Configuration - -CONFIG_DEVICE=y -CONFIG_HAS_PORT_IO=y -CONFIG_HAS_SERIAL=y -CONFIG_SERIAL_PORT=0x3f8 -CONFIG_SERIAL_MMIO=0xa10003f8 -# CONFIG_SERIAL_INPUT_FIFO is not set -CONFIG_HAS_TIMER=y -CONFIG_RTC_PORT=0x48 -CONFIG_RTC_MMIO=0xa1000048 -# CONFIG_HAS_KEYBOARD is not set -# CONFIG_HAS_VGA is not set -# CONFIG_HAS_AUDIO is not set -# CONFIG_HAS_DISK is not set -CONFIG_HAS_SDCARD=y -CONFIG_SDCARD_CTL_MMIO=0xa3000000 -CONFIG_SDCARD_IMG_PATH="" -CONFIG_FPU_HOST=y -# CONFIG_FPU_SOFT is not set -# CONFIG_FPU_NONE is not set -# CONFIG_AC_HOST is not set -# CONFIG_AC_SOFT is not set -CONFIG_AC_NONE=y - -# -# Miscellaneous -# -CONFIG_TIMER_GETTIMEOFDAY=y -# CONFIG_TIMER_CLOCK_GETTIME is not set -CONFIG_RT_CHECK=y -CONFIG_PERF_OPT=y -CONFIG_TCACHE_SIZE=8192 -CONFIG_BB_LIST_SIZE=1024 -CONFIG_BB_POOL_SIZE=1024 -# CONFIG_DISABLE_INSTR_CNT is not set -CONFIG_ENABLE_INSTR_CNT=y -# end of Miscellaneous diff --git a/libraries/NEMU/configs/riscv64-xs-ref_defconfig b/libraries/NEMU/configs/riscv64-xs-ref_defconfig deleted file mode 100644 index 82594eb..0000000 --- a/libraries/NEMU/configs/riscv64-xs-ref_defconfig +++ /dev/null @@ -1,86 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# NEMU Configuration Menu -# -# CONFIG_ISA_x86 is not set -# CONFIG_ISA_mips32 is not set -# CONFIG_ISA_riscv32 is not set -CONFIG_ISA_riscv64=y -CONFIG_ISA="riscv64" -CONFIG_ILEN_MIN=2 -CONFIG_ISA64=y - -# -# ISA-dependent Options for riscv64 -# -CONFIG_CLINT_MMIO=0x38000000 -# CONFIG_RVV_010 is not set -# end of ISA-dependent Options for riscv64 - -CONFIG_ENGINE_INTERPRETER=y -CONFIG_ENGINE="interpreter" -CONFIG_MODE_SYSTEM=y -# CONFIG_MODE_USER is not set - -# -# Build Options -# -CONFIG_CC_GCC=y -# CONFIG_CC_GPP is not set -# CONFIG_CC_CLANG is not set -CONFIG_CC="gcc" -# CONFIG_CC_O0 is not set -# CONFIG_CC_O1 is not set -CONFIG_CC_O2=y -# CONFIG_CC_O3 is not set -CONFIG_CC_OPT="-O2" -CONFIG_CC_LTO=y -CONFIG_CC_DEBUG=y -# CONFIG_CC_ASAN is not set -# end of Build Options - -# -# Testing and Debugging -# -CONFIG_DIFFTEST_REF_PATH="none" -CONFIG_DIFFTEST_REF_NAME="none" -# CONFIG_DETERMINISTIC is not set -# CONFIG_IQUEUE is not set -# end of Testing and Debugging - -# -# Memory Configuration -# -CONFIG_MBASE=0x80000000 -CONFIG_MSIZE=0x200000000 -CONFIG_PC_RESET_OFFSET=0x0 -CONFIG_USE_MMAP=y -# CONFIG_MEM_RANDOM is not set -# CONFIG_MEM_COMPRESS is not set -# end of Memory Configuration - -# CONFIG_FPU_HOST is not set -CONFIG_FPU_SOFT=y -# CONFIG_FPU_NONE is not set -CONFIG_AC_HOST=y -# CONFIG_AC_SOFT is not set -# CONFIG_AC_NONE is not set - -# -# Processor difftest reference config -# -CONFIG_SHARE=y -CONFIG_DIFFTEST_STORE_COMMIT=y -CONFIG_GUIDED_EXEC=y -CONFIG_LARGE_COPY=y -# CONFIG_PANIC_ON_UNIMP_CSR is not set -# end of Processor difftest reference config - -# -# Miscellaneous -# -CONFIG_TIMER_GETTIMEOFDAY=y -# CONFIG_TIMER_CLOCK_GETTIME is not set -CONFIG_RT_CHECK=y -CONFIG_ENABLE_INSTR_CNT=y -# end of Miscellaneous diff --git a/libraries/NEMU/configs/riscv64-xs_defconfig b/libraries/NEMU/configs/riscv64-xs_defconfig deleted file mode 100644 index fe34229..0000000 --- a/libraries/NEMU/configs/riscv64-xs_defconfig +++ /dev/null @@ -1,113 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# NEMU Configuration Menu -# -# CONFIG_ISA_x86 is not set -# CONFIG_ISA_mips32 is not set -# CONFIG_ISA_riscv32 is not set -CONFIG_ISA_riscv64=y -CONFIG_ISA="riscv64" -CONFIG_ILEN_MIN=2 -CONFIG_ISA64=y - -# -# ISA-dependent Options for riscv64 -# -CONFIG_CLINT_MMIO=0x38000000 -# CONFIG_RVV_010 is not set -# end of ISA-dependent Options for riscv64 - -CONFIG_ENGINE_INTERPRETER=y -CONFIG_ENGINE="interpreter" -CONFIG_MODE_SYSTEM=y -# CONFIG_MODE_USER is not set - -# -# Build Options -# -CONFIG_CC_GCC=y -# CONFIG_CC_GPP is not set -# CONFIG_CC_CLANG is not set -CONFIG_CC="gcc" -# CONFIG_CC_O0 is not set -# CONFIG_CC_O1 is not set -CONFIG_CC_O2=y -# CONFIG_CC_O3 is not set -CONFIG_CC_OPT="-O2" -CONFIG_CC_LTO=y -# CONFIG_CC_DEBUG is not set -# CONFIG_CC_ASAN is not set -# end of Build Options - -# -# Testing and Debugging -# -# CONFIG_DEBUG is not set -# CONFIG_DIFFTEST is not set -CONFIG_DIFFTEST_REF_PATH="none" -CONFIG_DIFFTEST_REF_NAME="none" -# CONFIG_DETERMINISTIC is not set -# CONFIG_IQUEUE is not set -# end of Testing and Debugging - -# -# Memory Configuration -# -CONFIG_MBASE=0x80000000 -CONFIG_MSIZE=0x200000000 -CONFIG_PC_RESET_OFFSET=0x0 -CONFIG_USE_MMAP=y -# CONFIG_MEM_RANDOM is not set -# CONFIG_MEM_COMPRESS is not set -# end of Memory Configuration - -CONFIG_DEVICE=y -CONFIG_HAS_PORT_IO=y -# CONFIG_HAS_SERIAL is not set -CONFIG_HAS_UARTLITE=y -CONFIG_UARTLITE_PORT=0x3f8 -CONFIG_UARTLITE_MMIO=0x40600000 -# CONFIG_UARTLITE_INPUT_FIFO is not set -CONFIG_HAS_TIMER=y -CONFIG_RTC_PORT=0x48 -CONFIG_RTC_MMIO=0xa1000048 -CONFIG_HAS_KEYBOARD=y -CONFIG_I8042_DATA_PORT=0x60 -CONFIG_I8042_DATA_MMIO=0xa1000060 -CONFIG_HAS_VGA=y -CONFIG_FB_ADDR=0x50000000 -CONFIG_VGA_CTL_PORT=0x100 -CONFIG_VGA_CTL_MMIO=0x40001000 -CONFIG_VGA_SHOW_SCREEN=n -CONFIG_VGA_SIZE_400x300=y -# CONFIG_VGA_SIZE_800x600 is not set -# CONFIG_HAS_AUDIO is not set -# CONFIG_HAS_DISK is not set -CONFIG_HAS_SDCARD=y -CONFIG_SDCARD_CTL_MMIO=0x40002000 -CONFIG_SDCARD_IMG_PATH="" -# CONFIG_FPU_HOST is not set -CONFIG_FPU_SOFT=y -# CONFIG_FPU_NONE is not set -# CONFIG_AC_HOST is not set -CONFIG_AC_SOFT=y -# CONFIG_AC_NONE is not set - -# -# Processor difftest reference config -# -# CONFIG_SHARE is not set -# end of Processor difftest reference config - -# -# Miscellaneous -# -CONFIG_TIMER_GETTIMEOFDAY=y -# CONFIG_TIMER_CLOCK_GETTIME is not set -CONFIG_RT_CHECK=y -CONFIG_PERF_OPT=y -CONFIG_TCACHE_SIZE=8192 -CONFIG_BB_LIST_SIZE=1024 -CONFIG_BB_POOL_SIZE=1024 -CONFIG_DISABLE_INSTR_CNT=y -# end of Miscellaneous diff --git a/libraries/NEMU/include/common.h b/libraries/NEMU/include/common.h deleted file mode 100644 index 4968f04..0000000 --- a/libraries/NEMU/include/common.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef __COMMON_H__ -#define __COMMON_H__ - -#include -#include -#include -#include - -#include -#include - -#if CONFIG_MBASE + CONFIG_MSIZE > 0x100000000ul -#define PMEM64 1 -#endif - -typedef MUXDEF(CONFIG_ISA64, uint64_t, uint32_t) word_t; -typedef MUXDEF(CONFIG_ISA64, int64_t, int32_t) sword_t; -#define FMT_WORD MUXDEF(CONFIG_ISA64, "0x%016lx", "0x%08x") - -typedef word_t rtlreg_t; -typedef word_t vaddr_t; -typedef MUXDEF(PMEM64, uint64_t, uint32_t) paddr_t; -#define FMT_PADDR MUXDEF(PMEM64, "0x%016lx", "0x%08x") -typedef uint16_t ioaddr_t; - -#define CP printf("%s: %d\n", __FILE__, __LINE__);fflush( stdout ); - -#include - -#endif diff --git a/libraries/NEMU/include/cpu/cpu.h b/libraries/NEMU/include/cpu/cpu.h deleted file mode 100644 index 798abb6..0000000 --- a/libraries/NEMU/include/cpu/cpu.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef __CPU_CPU_H__ -#define __CPU_CPU_H__ - -#include - -enum { - NEMU_EXEC_RUNNING = 0, // unused by longjmp() - NEMU_EXEC_END, - NEMU_EXEC_AGAIN, - NEMU_EXEC_EXCEPTION -}; - -void cpu_exec(uint64_t n); -__attribute__((noreturn)) void longjmp_exec(int cause); -__attribute__((noreturn)) void longjmp_exception(int ex_cause); - -enum { - SYS_STATE_UPDATE = 1, - SYS_STATE_FLUSH_TCACHE = 2, -}; -void set_sys_state_flag(int flag); -void mmu_tlb_flush(vaddr_t vaddr); - -struct Decode; -void save_globals(struct Decode *s); -void fetch_decode(struct Decode *s, vaddr_t pc); - -#endif diff --git a/libraries/NEMU/include/cpu/decode.h b/libraries/NEMU/include/cpu/decode.h deleted file mode 100644 index de64980..0000000 --- a/libraries/NEMU/include/cpu/decode.h +++ /dev/null @@ -1,167 +0,0 @@ -#ifndef __CPU_DECODE_H__ -#define __CPU_DECODE_H__ - -#include - -#define OP_STR_SIZE 40 - -typedef struct { - union { - IFDEF(CONFIG_ISA_x86, uint64_t *pfreg); - IFDEF(CONFIG_ISA_x86, uint64_t fval); - rtlreg_t *preg; - word_t imm; - sword_t simm; - }; - IFDEF(CONFIG_ISA_x86, rtlreg_t val); - IFDEF(CONFIG_ISA_x86, uint8_t type); - IFDEF(CONFIG_ISA_x86, uint8_t reg); - IFDEF(CONFIG_RVV_010, rtlreg_t val); - IFDEF(CONFIG_RVV_010, uint8_t reg); - IFDEF(CONFIG_DEBUG, char str[OP_STR_SIZE]); -} Operand; - -enum { - INSTR_TYPE_N, // normal - INSTR_TYPE_J, // jump - INSTR_TYPE_B, // branch - INSTR_TYPE_I, // indirect -}; - -typedef struct Decode { - union { - struct { - struct Decode *tnext; // next pointer for taken branch and jump - struct Decode *ntnext; // next pointer for non-taken branch - }; - struct { // only used by tcache_tmp_pool - struct Decode *list_next; // next pointer for list - struct Decode *bb_src; // pointer recording the source of basic block direction - }; - }; - vaddr_t pc; - vaddr_t snpc; // sequential next pc - IFDEF (CONFIG_PERF_OPT, const void *EHelper); - IFNDEF(CONFIG_PERF_OPT, void (*EHelper)(struct Decode *)); - Operand dest, src1, src2; - vaddr_t jnpc; - uint16_t idx_in_bb; // the number of instruction in the basic block, start from 1 - uint8_t type; - ISADecodeInfo isa; - IFDEF(CONFIG_DEBUG, char logbuf[80]); - #ifdef CONFIG_RVV_010 - // for vector - int v_width; - uint32_t vm; - uint32_t src_vmode; - rtlreg_t tmp_reg[4]; - #endif // CONFIG_RVV_010 - -} Decode; - - -#define id_src1 (&s->src1) -#define id_src2 (&s->src2) -#define id_dest (&s->dest) - - -#define INSTR_LIST(f) INSTR_NULLARY(f) INSTR_UNARY(f) INSTR_BINARY(f) INSTR_TERNARY(f) - -#define def_EXEC_ID(name) \ - enum { concat(EXEC_ID_, name) = __COUNTER__ }; -#define def_all_EXEC_ID() MAP(INSTR_LIST, def_EXEC_ID) - -#define INSTR_CNT(name) + 1 -#define TOTAL_INSTR (0 MAP(INSTR_LIST, INSTR_CNT)) - - -#define def_THelper(name) \ - static inline int concat(table_, name) (Decode *s) -#define def_THelper_arity(name, arity) \ - def_THelper(name) { concat(print_asm_template, arity)(name); return concat(EXEC_ID_, name); } -#define def_THelper_nullary(name) def_THelper_arity(name, 0) -#define def_THelper_unary(name) def_THelper_arity(name, 1) -#define def_THelper_binary(name) def_THelper_arity(name, 2) -#define def_THelper_ternary(name) def_THelper_arity(name, 3) - -#define def_all_THelper() \ - MAP(INSTR_NULLARY, def_THelper_nullary) \ - MAP(INSTR_UNARY, def_THelper_unary ) \ - MAP(INSTR_BINARY, def_THelper_binary ) \ - MAP(INSTR_TERNARY, def_THelper_ternary) - - -#define def_DHelper(name) void concat(decode_, name) (Decode *s, int width) -// empty decode helper -static inline def_DHelper(empty) {} - -#define CASE_ENTRY(idx, id, tab) case idx: id(s); return tab(s); -#define IDTAB(idx, id, tab) CASE_ENTRY(idx, concat(decode_, id), concat(table_, tab)) -#define TAB(idx, tab) IDTAB(idx, empty, tab) -#define EMPTY(idx) TAB(idx, inv) - -__attribute__((always_inline)) -static inline void pattern_decode(const char *str, int len, - uint32_t *key, uint32_t *mask, uint32_t *shift) { - uint32_t __key = 0, __mask = 0, __shift = 0; -#define macro(i) \ - if ((i) >= len) goto finish; \ - else { \ - char c = str[i]; \ - if (c != ' ') { \ - Assert(c == '0' || c == '1' || c == '?', \ - "invalid character '%c' in pattern string", c); \ - __key = (__key << 1) | (c == '1' ? 1 : 0); \ - __mask = (__mask << 1) | (c == '?' ? 0 : 1); \ - __shift = (c == '?' ? __shift + 1 : 0); \ - } \ - } - -#define macro2(i) macro(i); macro((i) + 1) -#define macro4(i) macro2(i); macro2((i) + 2) -#define macro8(i) macro4(i); macro4((i) + 4) -#define macro16(i) macro8(i); macro8((i) + 8) -#define macro32(i) macro16(i); macro16((i) + 16) -#define macro64(i) macro32(i); macro32((i) + 32) - macro64(0); -#undef macro -finish: - *key = __key >> __shift; - *mask = __mask >> __shift; - *shift = __shift; -} - -#define def_INSTR_raw(pattern, body) do { \ - uint32_t key, mask, shift; \ - pattern_decode(pattern, STRLEN(pattern), &key, &mask, &shift); \ - if (((get_instr(s) >> shift) & mask) == key) { body; } \ -} while (0) - -#define def_INSTR_IDTABW(pattern, id, tab, width) \ - def_INSTR_raw(pattern, { concat(decode_, id)(s, width); return concat(table_, tab)(s); }) - -#define def_INSTR_IDTAB(pattern, id, tab) def_INSTR_IDTABW(pattern, id, tab, 0) -#define def_INSTR_TABW(pattern, tab, width) def_INSTR_IDTABW(pattern, empty, tab, width) -#define def_INSTR_TAB(pattern, tab) def_INSTR_IDTABW(pattern, empty, tab, 0) - - -#define print_Dop(...) IFDEF(CONFIG_DEBUG, snprintf(__VA_ARGS__)) -#define print_asm(...) IFDEF(CONFIG_DEBUG, snprintf(log_asmbuf, sizeof(log_asmbuf), __VA_ARGS__)) - -#ifndef suffix_char -#define suffix_char(width) ' ' -#endif - -#define print_asm_template0(instr) \ - print_asm(str(instr) "%c", suffix_char(id_dest->width)) - -#define print_asm_template1(instr) \ - print_asm(str(instr) "%c %s", suffix_char(id_dest->width), id_dest->str) - -#define print_asm_template2(instr) \ - print_asm(str(instr) "%c %s,%s", suffix_char(id_dest->width), id_src1->str, id_dest->str) - -#define print_asm_template3(instr) \ - print_asm(str(instr) "%c %s,%s,%s", suffix_char(id_dest->width), id_src1->str, id_src2->str, id_dest->str) - -#endif diff --git a/libraries/NEMU/include/cpu/difftest.h b/libraries/NEMU/include/cpu/difftest.h deleted file mode 100644 index 3ac97b0..0000000 --- a/libraries/NEMU/include/cpu/difftest.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef __CPU_DIFFTEST_H__ -#define __CPU_DIFFTEST_H__ - -#include -#include - -#ifdef CONFIG_DIFFTEST -void difftest_skip_ref(); -void difftest_skip_dut(int nr_ref, int nr_dut); -void difftest_set_patch(void (*fn)(void *arg), void *arg); -void difftest_step(vaddr_t pc, vaddr_t npc); -void difftest_detach(); -void difftest_attach(); -#else -static inline void difftest_skip_ref() {} -static inline void difftest_skip_dut(int nr_ref, int nr_dut) {} -static inline void difftest_set_patch(void (*fn)(void *arg), void *arg) {} -static inline void difftest_step(vaddr_t pc, vaddr_t npc) {} -static inline void difftest_detach() {} -static inline void difftest_attach() {} -#endif - -extern void (*ref_difftest_memcpy)(paddr_t dest, void *src, size_t n, bool direction); -extern void (*ref_difftest_regcpy)(void *c, bool direction); -extern void (*ref_difftest_exec)(uint64_t n); -extern void (*ref_difftest_raise_intr)(uint64_t NO); - -static inline bool difftest_check_reg(const char *name, vaddr_t pc, rtlreg_t ref, rtlreg_t dut) { - if (ref != dut) { - Log("%s is different after executing instruction at pc = " FMT_WORD - ", right = " FMT_WORD ", wrong = " FMT_WORD, name, pc, ref, dut); - return false; - } - return true; -} - -#endif diff --git a/libraries/NEMU/include/cpu/exec.h b/libraries/NEMU/include/cpu/exec.h deleted file mode 100644 index ef847d8..0000000 --- a/libraries/NEMU/include/cpu/exec.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef __CPU_EXEC_H__ -#define __CPU_EXEC_H__ - -#include - -#ifdef CONFIG_PERF_OPT -#define finish_label exec_finish -#define def_label(l) l: -#define def_EHelper(name) \ - s ++; \ - goto finish_label; /* this is for the previous def_EHelper() */ \ - def_label(concat(exec_, name)) -#define def_finish() def_label(finish_label) -#else -#define def_EHelper(name) static inline void concat(exec_, name) (Decode *s) -#endif - -#if 0 -#define IDEXW(idx, id, ex, w) CASE_ENTRY(idx, concat(decode_, id), concat(exec_, ex), w) -#define IDEX(idx, id, ex) IDEXW(idx, id, ex, 0) -#define EXW(idx, ex, w) IDEXW(idx, empty, ex, w) -#define EX(idx, ex) EXW(idx, ex, 0) -#define EMPTY(idx) EX(idx, inv) - -// set_width() is defined in src/isa/$isa/exec/exec.c -#define CASE_ENTRY(idx, id, ex, w) case idx: set_width(s, w); id(s); ex(s); break; -#endif - -#endif diff --git a/libraries/NEMU/include/cpu/ifetch.h b/libraries/NEMU/include/cpu/ifetch.h deleted file mode 100644 index 0c67dc9..0000000 --- a/libraries/NEMU/include/cpu/ifetch.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef __CPU_IFETCH_H__ - -#include - -static inline uint32_t instr_fetch(vaddr_t *pc, int len) { - uint32_t instr = vaddr_ifetch(*pc, len); -#ifdef ENABLE_DIFFTEST_INSTR_QUEUE - extern void add_instr(uint8_t *instr, int len); - add_instr((void *)&instr, len); -#endif -#ifdef CONFIG_DEBUG - uint8_t *p_instr = (void *)&instr; - int i; - for (i = 0; i < len; i ++) { - int l = strlen(log_bytebuf); - snprintf(log_bytebuf + l, sizeof(log_bytebuf) - l, "%02x ", p_instr[i]); - } -#endif - (*pc) += len; - return instr; -} - -#endif diff --git a/libraries/NEMU/include/debug.h b/libraries/NEMU/include/debug.h deleted file mode 100644 index 7bbed92..0000000 --- a/libraries/NEMU/include/debug.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef __DEBUG_H__ -#define __DEBUG_H__ - -#include -#include -#include - -#define Log(format, ...) \ - _Log("\33[1;34m[%s,%d,%s] " format "\33[0m\n", \ - __FILE__, __LINE__, __func__, ## __VA_ARGS__) - -#define Assert(cond, ...) \ - do { \ - if (!(cond)) { \ - fflush(stdout); \ - fprintf(stderr, "\33[1;31m"); \ - fprintf(stderr, __VA_ARGS__); \ - fprintf(stderr, "\33[0m\n"); \ - extern void isa_reg_display(); \ - extern void monitor_statistic(); \ - isa_reg_display(); \ - monitor_statistic(); \ - assert(cond); \ - } \ - } while (0) - -#define panic(...) Assert(0, __VA_ARGS__) - -#define TODO() panic("please implement me") - -#endif diff --git a/libraries/NEMU/include/device/alarm.h b/libraries/NEMU/include/device/alarm.h deleted file mode 100644 index e3c062e..0000000 --- a/libraries/NEMU/include/device/alarm.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __DEVICE_ALARM_H__ -#define __DEVICE_ALARM_H__ - -typedef void (*alarm_handler_t) (); -void add_alarm_handle(alarm_handler_t h); - -#endif diff --git a/libraries/NEMU/include/device/map.h b/libraries/NEMU/include/device/map.h deleted file mode 100644 index 505144d..0000000 --- a/libraries/NEMU/include/device/map.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef __DEVICE_MAP_H__ -#define __DEVICE_MAP_H__ - -#include - -typedef void(*io_callback_t)(uint32_t, int, bool); -uint8_t* new_space(int size); - -typedef struct { - const char *name; - // we treat ioaddr_t as paddr_t here - paddr_t low; - paddr_t high; - void *space; - io_callback_t callback; -} IOMap; - -static inline bool map_inside(IOMap *map, paddr_t addr) { - return (addr >= map->low && addr <= map->high); -} - -static inline int find_mapid_by_addr(IOMap *maps, int size, paddr_t addr) { - int i; - for (i = 0; i < size; i ++) { - if (map_inside(maps + i, addr)) { - difftest_skip_ref(); - return i; - } - } - return -1; -} - -void add_pio_map(const char *name, ioaddr_t addr, - void *space, uint32_t len, io_callback_t callback); -void add_mmio_map(const char *name, paddr_t addr, - void *space, uint32_t len, io_callback_t callback); - -word_t map_read(paddr_t addr, int len, IOMap *map); -void map_write(paddr_t addr, int len, word_t data, IOMap *map); - -#endif diff --git a/libraries/NEMU/include/device/mmio.h b/libraries/NEMU/include/device/mmio.h deleted file mode 100644 index 693bfe7..0000000 --- a/libraries/NEMU/include/device/mmio.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __DEVICE_MMIO_H__ -#define __DEVICE_MMIO_H__ - -#include - -word_t mmio_read(paddr_t addr, int len); -void mmio_write(paddr_t addr, int len, word_t data); - -#endif diff --git a/libraries/NEMU/include/isa.h b/libraries/NEMU/include/isa.h deleted file mode 100644 index b4d6506..0000000 --- a/libraries/NEMU/include/isa.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef __ISA_H__ -#define __ISA_H__ - -// Located at src/isa/$(ISA)/include/isa-def.h -#include - -// The macro `__ISA__` is defined in $(CFLAGS). -// It will be expanded as "x86" or "mips32" ... -typedef concat(__ISA__, _CPU_state) CPU_state; -typedef concat(__ISA__, _ISADecodeInfo) ISADecodeInfo; - -// monitor -extern char isa_logo[]; -void init_isa(); - -// reg -extern CPU_state cpu; -extern rtlreg_t csr_array[4096]; -void isa_reg_display(); -word_t isa_reg_str2val(const char *name, bool *success); - -// exec -struct Decode; -int isa_fetch_decode(struct Decode *s); -void isa_hostcall(uint32_t id, rtlreg_t *dest, const rtlreg_t *src1, - const rtlreg_t *src2, word_t imm); - -// memory -enum { MMU_DIRECT, MMU_TRANSLATE, MMU_DYNAMIC }; -enum { MEM_TYPE_IFETCH, MEM_TYPE_READ, MEM_TYPE_WRITE }; -enum { MEM_RET_OK, MEM_RET_FAIL, MEM_RET_CROSS_PAGE }; -#ifndef isa_mmu_state -int isa_mmu_state(); -#endif -#ifndef isa_mmu_check -int isa_mmu_check(vaddr_t vaddr, int len, int type); -#endif -paddr_t isa_mmu_translate(vaddr_t vaddr, int len, int type); - -// interrupt -vaddr_t raise_intr(word_t NO, vaddr_t epc); -#define INTR_EMPTY ((word_t)-1) -word_t isa_query_intr(); - -// difftest - // for dut -bool isa_difftest_checkregs(CPU_state *ref_r, vaddr_t pc); -void isa_difftest_attach(); - - // for ref -void isa_difftest_regcpy(void *dut, bool direction); -void isa_difftest_csrcpy(void *dut, bool direction); -void isa_difftest_raise_intr(word_t NO); -void isa_difftest_uarchstatus_cpy(void *dut, bool direction); -void isa_difftest_guided_exec(void * guide); - -#endif diff --git a/libraries/NEMU/include/macro.h b/libraries/NEMU/include/macro.h deleted file mode 100644 index 61cfbd3..0000000 --- a/libraries/NEMU/include/macro.h +++ /dev/null @@ -1,88 +0,0 @@ -#ifndef __MACRO_H__ -#define __MACRO_H__ - -#include - -// macro stringizing -#define str_temp(x) #x -#define str(x) str_temp(x) - -// strlen() for string constant -#define STRLEN(CONST_STR) (sizeof(CONST_STR) - 1) - -// calculate the length of an array -#define ARRLEN(arr) (int)(sizeof(arr) / sizeof(arr[0])) - -// macro concatenation -#define concat_temp(x, y) x ## y -#define concat(x, y) concat_temp(x, y) -#define concat3(x, y, z) concat(concat(x, y), z) -#define concat4(x, y, z, w) concat3(concat(x, y), z, w) -#define concat5(x, y, z, v, w) concat4(concat(x, y), z, v, w) - -// macro testing -// See https://stackoverflow.com/questions/26099745/test-if-preprocessor-symbol-is-defined-inside-macro -#define CHOOSE2nd(a, b, ...) b -#define MUX_WITH_COMMA(contain_comma, a, b) CHOOSE2nd(contain_comma a, b) -#define MUX_MACRO_PROPERTY(p, macro, a, b) MUX_WITH_COMMA(concat(p, macro), a, b) -// define placeholders for some property -#define __P_DEF_0 X, -#define __P_DEF_1 X, -#define __P_ONE_1 X, -#define __P_ZERO_0 X, -// define some selection functions based on the properties of BOOLEAN macro -#define MUXDEF(macro, X, Y) MUX_MACRO_PROPERTY(__P_DEF_, macro, X, Y) -#define MUXNDEF(macro, X, Y) MUX_MACRO_PROPERTY(__P_DEF_, macro, Y, X) -#define MUXONE(macro, X, Y) MUX_MACRO_PROPERTY(__P_ONE_, macro, X, Y) -#define MUXZERO(macro, X, Y) MUX_MACRO_PROPERTY(__P_ZERO_,macro, X, Y) - -// test if a boolean macro is defined -#define ISDEF(macro) MUXDEF(macro, 1, 0) -// test if a boolean macro is undefined -#define ISNDEF(macro) MUXNDEF(macro, 1, 0) -// test if a boolean macro is defined to 1 -#define ISONE(macro) MUXONE(macro, 1, 0) -// test if a boolean macro is defined to 0 -#define ISZERO(macro) MUXZERO(macro, 1, 0) -// test if a macro of ANY type is defined -// NOTE1: it ONLY works inside a function, since it calls `strcmp()` -// NOTE2: macros defined to themselves (#define A A) will get wrong results -#define isdef(macro) (strcmp("" #macro, "" str(macro)) != 0) - -// simplification for conditional compilation -#define __IGNORE(...) -#define __KEEP(...) __VA_ARGS__ -// keep the code if a boolean macro is defined -#define IFDEF(macro, ...) MUXDEF(macro, __KEEP, __IGNORE)(__VA_ARGS__) -// keep the code if a boolean macro is undefined -#define IFNDEF(macro, ...) MUXNDEF(macro, __KEEP, __IGNORE)(__VA_ARGS__) -// keep the code if a boolean macro is defined to 1 -#define IFONE(macro, ...) MUXONE(macro, __KEEP, __IGNORE)(__VA_ARGS__) -// keep the code if a boolean macro is defined to 0 -#define IFZERO(macro, ...) MUXZERO(macro, __KEEP, __IGNORE)(__VA_ARGS__) - -// functional-programming-like macro (X-macro) -// apply the function `f` to each element in the contain `c` -// NOTE1: `c` should be defined as a list like: -// f(a0) f(a1) f(a2) ... -// NOTE2: each element in the contain can be a tuple -#define MAP(c, f) c(f) - -#define BITMASK(bits) ((1 << (bits)) - 1) -#define BITS(x, hi, lo) (((x) >> (lo)) & BITMASK((hi) - (lo) + 1)) // similar to x[hi:lo] in verilog -#define SEXT(x, len) ({ struct { int64_t n : len; } __x = { .n = x }; (int64_t)__x.n; }) - -#define ROUNDUP(a, sz) ((((uintptr_t)a) + (sz) - 1) & ~((sz) - 1)) -#define ROUNDDOWN(a, sz) ((((uintptr_t)a)) & ~((sz) - 1)) - -#define PG_ALIGN __attribute((aligned(4096))) - -#if 1 -#define likely(cond) __builtin_expect(cond, 1) -#define unlikely(cond) __builtin_expect(cond, 0) -#else -#define likely(cond) (cond) -#define unlikely(cond) (cond) -#endif - -#endif diff --git a/libraries/NEMU/include/memory/host-tlb.h b/libraries/NEMU/include/memory/host-tlb.h deleted file mode 100644 index 147581f..0000000 --- a/libraries/NEMU/include/memory/host-tlb.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef __MEMORY_HOST_TLB_H__ -#define __MEMORY_HOST_TLB_H__ - -#include - -struct Decode; -word_t hosttlb_read(struct Decode *s, vaddr_t vaddr, int len, int type); -void hosttlb_write(struct Decode *s, vaddr_t vaddr, int len, word_t data); -void hosttlb_init(); -void hosttlb_flush(vaddr_t vaddr); - -#endif diff --git a/libraries/NEMU/include/memory/host.h b/libraries/NEMU/include/memory/host.h deleted file mode 100644 index ce9acec..0000000 --- a/libraries/NEMU/include/memory/host.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef __MEMORY_HOST_H__ -#define __MEMORY_HOST_H__ - -#include - -static inline word_t host_read(void *addr, int len) { - switch (len) { - case 1: return *(uint8_t *)addr; - case 2: return *(uint16_t *)addr; - case 4: return *(uint32_t *)addr; - IFDEF(CONFIG_ISA64, case 8: return *(uint64_t *)addr); - default: MUXDEF(CONFIG_RT_CHECK, assert(0), return 0); - } -} - -static inline void host_write(void *addr, int len, word_t data) { - switch (len) { - case 1: *(uint8_t *)addr = data; return; - case 2: *(uint16_t *)addr = data; return; - case 4: *(uint32_t *)addr = data; return; - IFDEF(CONFIG_ISA64, case 8: *(uint64_t *)addr = data; return); - IFDEF(CONFIG_RT_CHECK, default: assert(0)); - } -} - -#endif diff --git a/libraries/NEMU/include/memory/paddr.h b/libraries/NEMU/include/memory/paddr.h deleted file mode 100644 index 39ef10c..0000000 --- a/libraries/NEMU/include/memory/paddr.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef __MEMORY_PADDR_H__ -#define __MEMORY_PADDR_H__ - -#include - -#ifdef CONFIG_MODE_USER -#define CONFIG_MBASE 0 -#define CONFIG_MSIZE 0 -#define CONFIG_PC_RESET_OFFSET 0 -#endif - -#define RESET_VECTOR (CONFIG_MBASE + CONFIG_PC_RESET_OFFSET) - -void init_mem(); - -/* convert the guest physical address in the guest program to host virtual address in NEMU */ -uint8_t* guest_to_host(paddr_t paddr); -/* convert the host virtual address in NEMU to guest physical address in the guest program */ -paddr_t host_to_guest(uint8_t *haddr); - -static inline bool in_pmem(paddr_t addr) { - paddr_t mbase_mask = CONFIG_MBASE - 1; - paddr_t msize_mask = CONFIG_MSIZE - 1; - bool mbase_align = (CONFIG_MBASE & mbase_mask) == 0; - bool msize_align = (CONFIG_MSIZE & msize_mask) == 0; - bool msize_inside_mbase = msize_mask <= mbase_mask; - if (mbase_align && msize_align && msize_inside_mbase) { - return (addr & ~msize_mask) == CONFIG_MBASE; - } else { - return (addr >= CONFIG_MBASE) && (addr < (paddr_t)CONFIG_MBASE + CONFIG_MSIZE); - } -} - -word_t paddr_read(paddr_t addr, int len); -void paddr_write(paddr_t addr, int len, word_t data); - -#ifdef CONFIG_DIFFTEST_STORE_COMMIT - -#define STORE_QUEUE_SIZE 48 -typedef struct { - uint64_t addr; - uint64_t data; - uint8_t mask; - uint8_t valid; -} store_commit_t; -extern store_commit_t store_commit_queue[STORE_QUEUE_SIZE]; - -void store_commit_queue_push(uint64_t addr, uint64_t data, int len); -store_commit_t *store_commit_queue_pop(); -int check_store_commit(uint64_t *addr, uint64_t *data, uint8_t *mask); -#endif - -#endif diff --git a/libraries/NEMU/include/memory/vaddr.h b/libraries/NEMU/include/memory/vaddr.h deleted file mode 100644 index eebb0f8..0000000 --- a/libraries/NEMU/include/memory/vaddr.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef __MEMORY_VADDR_H__ -#define __MEMORY_VADDR_H__ - -#include - -struct Decode; -word_t vaddr_ifetch(vaddr_t addr, int len); -word_t vaddr_read(struct Decode *s, vaddr_t addr, int len, int mmu_mode); -void vaddr_write(struct Decode *s, vaddr_t addr, int len, word_t data, int mmu_mode); - -word_t vaddr_read_safe(vaddr_t addr, int len); - -#define PAGE_SHIFT 12 -#define PAGE_SIZE (1ul << PAGE_SHIFT) -#define PAGE_MASK (PAGE_SIZE - 1) - -int force_raise_pf(vaddr_t vaddr, int type); - -#endif diff --git a/libraries/NEMU/include/rtl/fp.h b/libraries/NEMU/include/rtl/fp.h deleted file mode 100644 index 6c87302..0000000 --- a/libraries/NEMU/include/rtl/fp.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef __RTL_FP_H__ -#define __RTL_FP_H__ - -enum { - FPCALL_W32, - FPCALL_W64, - FPCALL_W128, - FPCALL_W80, -}; - -enum { - FPCALL_RM_RNE, // round to nearest, ties to even - FPCALL_RM_RTZ, // round towards zero - FPCALL_RM_RDN, // round down (towards -INF) - FPCALL_RM_RUP, // round up (towards +INF) - FPCALL_RM_RMM, // round to nearest, ties to max magnitude -}; - -enum { - FPCALL_EX_NX = 0x01, // inexact - FPCALL_EX_UF = 0x02, // underflow - FPCALL_EX_OF = 0x04, // overflow - FPCALL_EX_DZ = 0x08, // divide by zero - FPCALL_EX_NV = 0x10, // invalid operation -}; - -enum { - FPCALL_ADD, - FPCALL_SUB, - FPCALL_MUL, - FPCALL_DIV, - FPCALL_SQRT, - FPCALL_MADD, - - FPCALL_I32ToF, - FPCALL_U32ToF, - FPCALL_I64ToF, - FPCALL_U64ToF, - - FPCALL_FToI32, - FPCALL_FToU32, - FPCALL_FToI64, - FPCALL_FToU64, - - FPCALL_F32ToF64, - FPCALL_F64ToF32, - - FPCALL_NEED_RM, // seperator - - FPCALL_MAX, - FPCALL_MIN, - FPCALL_LE, - FPCALL_EQ, - FPCALL_LT, -}; - -#define FPCALL_CMD(op, w) (((op) << 16) | (w)) -#define FPCALL_OP(cmd) ((cmd) >> 16) -#define FPCALL_W(cmd) ((cmd) & 0x3) - -#endif diff --git a/libraries/NEMU/include/rtl/pseudo.h b/libraries/NEMU/include/rtl/pseudo.h deleted file mode 100644 index 8bf15a6..0000000 --- a/libraries/NEMU/include/rtl/pseudo.h +++ /dev/null @@ -1,101 +0,0 @@ -#ifndef __RTL_PSEUDO_H__ -#define __RTL_PSEUDO_H__ - -#ifndef __RTL_RTL_H__ -#error "Should be only included by " -#endif - -/* RTL pseudo instructions */ - -static inline def_rtl(li, rtlreg_t* dest, const rtlreg_t imm) { - rtl_addi(s, dest, rz, imm); -} - -static inline def_rtl(mv, rtlreg_t* dest, const rtlreg_t *src1) { - rtl_addi(s, dest, src1, 0); -} - -static inline def_rtl(not, rtlreg_t *dest, const rtlreg_t* src1) { - // dest <- ~src1 -#ifdef __ICS_EXPORT - TODO(); -#else - rtl_xori(s, dest, src1, -1); -#endif -} - -static inline def_rtl(neg, rtlreg_t *dest, const rtlreg_t* src1) { - // dest <- -src1 -#ifdef __ICS_EXPORT - TODO(); -#else - rtl_sub(s, dest, rz, src1); -#endif -} - -static inline def_rtl(sext, rtlreg_t* dest, const rtlreg_t* src1, int width) { - // dest <- signext(src1[(width * 8 - 1) .. 0]) -#ifdef __ICS_EXPORT - TODO(); -#else - const int word_size = sizeof(word_t); - if (width == word_size) { - rtl_mv(s, dest, src1); - } else { -#ifdef CONFIG_RT_CHECK - assert(width == 1 || width == 2 || MUXDEF(CONFIG_ISA64, width == 4, false)); -#endif - rtl_shli(s, dest, src1, (word_size - width) * 8); - rtl_sari(s, dest, dest, (word_size - width) * 8); - } -#endif -} - -static inline def_rtl(zext, rtlreg_t* dest, const rtlreg_t* src1, int width) { - // dest <- zeroext(src1[(width * 8 - 1) .. 0]) -#ifdef __ICS_EXPORT - TODO(); -#else - const int word_size = sizeof(word_t); - if (width == word_size) { - rtl_mv(s, dest, src1); - } else { -#ifdef CONFIG_RT_CHECK - assert(width == 1 || width == 2 || MUXDEF(CONFIG_ISA64, width == 4, false)); -#endif - rtl_shli(s, dest, src1, (word_size - width) * 8); - rtl_shri(s, dest, dest, (word_size - width) * 8); - } -#endif -} - -static inline def_rtl(msb, rtlreg_t* dest, const rtlreg_t* src1, int width) { - // dest <- src1[width * 8 - 1] -#ifdef __ICS_EXPORT - TODO(); -#else - rtl_shri(s, dest, src1, width * 8 - 1); - if (width != 4) { - rtl_andi(s, dest, dest, 0x1); - } -#endif -} - -static inline def_rtl(trap, vaddr_t ret_pc, word_t NO) { - rtl_li(s, t0, ret_pc); - rtl_hostcall(s, HOSTCALL_TRAP, t0, t0, NULL, NO); - rtl_jr(s, t0); -} -static inline def_rtl(mux, rtlreg_t* dest, const rtlreg_t* cond, const rtlreg_t* src1, const rtlreg_t* src2) { - // dest <- (cond ? src1 : src2) -// TODO(); - rtl_setrelopi(s, RELOP_EQ, t0, cond, 0); - rtl_subi(s, t0, t0, 1); - // t0 = mask - rtl_and(s, s2, src1, t0); - rtl_not(s, t0, t0); - rtl_and(s, t0, src2, t0); - rtl_or(s, dest, t0, s2); -} - -#endif diff --git a/libraries/NEMU/include/rtl/rtl.h b/libraries/NEMU/include/rtl/rtl.h deleted file mode 100644 index a39add5..0000000 --- a/libraries/NEMU/include/rtl/rtl.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef __RTL_RTL_H__ -#define __RTL_RTL_H__ - -#include - -extern const rtlreg_t rzero; -extern rtlreg_t tmp_reg[4]; - -#define dsrc1 (id_src1->preg) -#define dsrc2 (id_src2->preg) -#define ddest (id_dest->preg) -#define s0 (&tmp_reg[0]) -#define s1 (&tmp_reg[1]) -#define s2 (&tmp_reg[2]) -#define t0 (&tmp_reg[3]) -#define rz (&rzero) - -#define def_rtl(name, ...) void concat(rtl_, name)(Decode *s, __VA_ARGS__) - -// relation operation -enum { - // +-- unsign - // | +-- sign - // | | +-- equal - // | | | +-- invert - // | | | | - RELOP_FALSE = 0 | 0 | 0 | 0, - RELOP_TRUE = 0 | 0 | 0 | 1, - RELOP_EQ = 0 | 0 | 2 | 0, - RELOP_NE = 0 | 0 | 2 | 1, - - RELOP_LT = 0 | 4 | 0 | 0, - RELOP_LE = 0 | 4 | 2 | 0, - RELOP_GT = 0 | 4 | 2 | 1, - RELOP_GE = 0 | 4 | 0 | 1, - - RELOP_LTU = 8 | 0 | 0 | 0, - RELOP_LEU = 8 | 0 | 2 | 0, - RELOP_GTU = 8 | 0 | 2 | 1, - RELOP_GEU = 8 | 0 | 0 | 1, -}; - -#include - -enum { - HOSTCALL_EXIT, // handling nemu_trap - HOSTCALL_INV, // invalid opcode - HOSTCALL_PIO, // port I/O - HOSTCALL_FP, // floating point operation - HOSTCALL_CSR, // system registers / control status registers - HOSTCALL_TRAP, // trap by interrupts/exceptions - HOSTCALL_PRIV, // privilige instructions -}; - -def_rtl(hostcall, uint32_t id, rtlreg_t *dest, const rtlreg_t *src1, - const rtlreg_t *src2, word_t imm); - -#include -#include - -#endif diff --git a/libraries/NEMU/include/utils.h b/libraries/NEMU/include/utils.h deleted file mode 100644 index 04f1811..0000000 --- a/libraries/NEMU/include/utils.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef __UTILS_H__ -#define __UTILS_H__ - -#include - -// ----------- state ----------- - -enum { NEMU_RUNNING, NEMU_STOP, NEMU_END, NEMU_ABORT, NEMU_QUIT }; - -typedef struct { - int state; - vaddr_t halt_pc; - uint32_t halt_ret; -} NEMUState; - -extern NEMUState nemu_state; - -// ----------- timer ----------- - -uint64_t get_time(); - -// ----------- log ----------- - -#define log_write(...) IFDEF(CONFIG_DEBUG, \ - do { \ - extern FILE* log_fp; \ - extern bool log_enable(); \ - if (log_fp != NULL && log_enable()) { \ - fprintf(log_fp, __VA_ARGS__); \ - fflush(log_fp); \ - } \ - } while (0) \ -) - -#define _Log(...) \ - do { \ - printf(__VA_ARGS__); \ - log_write(__VA_ARGS__); \ - } while (0) - -extern char log_bytebuf[80]; -extern char log_asmbuf[80]; - -// ----------- expr ----------- - -word_t expr(char *e, bool *success); - -// ----------- iqueue ----------- -void iqueue_commit(vaddr_t pc, uint8_t *instr_buf, uint8_t ilen); -void iqueue_dump(); - -#endif diff --git a/libraries/NEMU/lib-include/difftest.h b/libraries/NEMU/lib-include/difftest.h deleted file mode 100644 index c4115dd..0000000 --- a/libraries/NEMU/lib-include/difftest.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef __DIFFTEST_H__ -#define __DIFFTEST_H__ - -#include - -enum { DIFFTEST_TO_DUT, DIFFTEST_TO_REF }; - -#define RV64_FULL_DIFF -#define RV64_UARCH_SYNC - -#if defined(__ISA_x86__) -# define DIFFTEST_REG_SIZE (sizeof(uint32_t) * 9) // GPRs + PC -#elif defined(__ISA_mips32__) -# define DIFFTEST_REG_SIZE (sizeof(uint32_t) * 38) // GRPs + status + lo + hi + badvaddr + cause + pc -#elif defined(__ISA_riscv32__) -# define DIFFTEST_REG_SIZE (sizeof(uint32_t) * 33) // GRPs + pc -#elif defined(__ISA_riscv64__) -#ifdef RV64_FULL_DIFF -#define DIFFTEST_REG_SIZE (sizeof(uint64_t) * (32 + 32 + 1 + 6 + 11 + 1)) -// GRPs + FPRs + pc + [m|s][status|cause|epc] + other necessary CSRs + mode -#else -# define DIFFTEST_REG_SIZE (sizeof(uint64_t) * (32 + 1)) // GRPs + pc -#endif -#else -# error Unsupport ISA -#endif - -#ifdef RV64_UARCH_SYNC -struct SyncState { - uint64_t lrscValid; - uint64_t lrscAddr; -}; -#endif - -#endif diff --git a/libraries/NEMU/resource/bbl/Makefile b/libraries/NEMU/resource/bbl/Makefile deleted file mode 100644 index 4cb0b66..0000000 --- a/libraries/NEMU/resource/bbl/Makefile +++ /dev/null @@ -1,45 +0,0 @@ -NAME = bbl - -BUILD_DIR ?= ./build - -OBJ_DIR ?= $(BUILD_DIR)/obj -BINARY ?= $(BUILD_DIR)/$(NAME) - -.DEFAULT_GOAL = app - -# Compilation flags -CROSS_COMPILE = riscv64-linux-gnu- -CC = $(CROSS_COMPILE)gcc -LD = $(CROSS_COMPILE)ld -OBJDUMP = $(CROSS_COMPILE)objdump -OBJCOPY = $(CROSS_COMPILE)objcopy -INCLUDES = $(addprefix -I, $(INC_DIR)) -CFLAGS += -fno-PIE -mcmodel=medany -O2 -MMD -Wall -Werror $(INCLUDES) - -# Files to be compiled -SRCS = $(shell find src/ -name "*.[cS]") -OBJS = $(addprefix $(OBJ_DIR)/, $(addsuffix .o, $(basename $(SRCS)))) - -# Compilation patterns -$(OBJ_DIR)/%.o: %.c - @mkdir -p $(dir $@) && echo + CC $< - @$(CC) $(CFLAGS) -c -o $@ $< - -$(OBJ_DIR)/%.o: %.S - @mkdir -p $(dir $@) && echo + AS $< - @$(CC) $(CFLAGS) -c -o $@ $< - - -# Depencies --include $(OBJS:.o=.d) - -$(BINARY): $(OBJS) - @echo + LD $@ - @$(LD) -O2 -T bbl.lds -o $@ $^ - @$(OBJDUMP) -d $@ > $@.txt - @$(OBJCOPY) -S --set-section-flags .bss=alloc,contents -O binary $@ $@.bin - -app: $(BINARY) - -clean: - -rm -rf $(BUILD_DIR) diff --git a/libraries/NEMU/resource/bbl/src/atomic.h b/libraries/NEMU/resource/bbl/src/atomic.h deleted file mode 100644 index c8e017b..0000000 --- a/libraries/NEMU/resource/bbl/src/atomic.h +++ /dev/null @@ -1,78 +0,0 @@ -// See LICENSE for license details. - -#ifndef _RISCV_ATOMIC_H -#define _RISCV_ATOMIC_H - -//#include "config.h" -#include "encoding.h" - -// Currently, interrupts are always disabled in M-mode. -#define disable_irqsave() (0) -#define enable_irqrestore(flags) ((void) (flags)) - -typedef struct { int lock; } spinlock_t; -#define SPINLOCK_INIT {0} - -#define mb() asm volatile ("fence" ::: "memory") -#define atomic_set(ptr, val) (*(volatile typeof(*(ptr)) *)(ptr) = val) -#define atomic_read(ptr) (*(volatile typeof(*(ptr)) *)(ptr)) - -#ifdef __riscv_atomic -# define atomic_add(ptr, inc) __sync_fetch_and_add(ptr, inc) -# define atomic_or(ptr, inc) __sync_fetch_and_or(ptr, inc) -# define atomic_swap(ptr, swp) __sync_lock_test_and_set(ptr, swp) -# define atomic_cas(ptr, cmp, swp) __sync_val_compare_and_swap(ptr, cmp, swp) -#else -# define atomic_binop(ptr, inc, op) ({ \ - long flags = disable_irqsave(); \ - typeof(*(ptr)) res = atomic_read(ptr); \ - atomic_set(ptr, op); \ - enable_irqrestore(flags); \ - res; }) -# define atomic_add(ptr, inc) atomic_binop(ptr, inc, res + (inc)) -# define atomic_or(ptr, inc) atomic_binop(ptr, inc, res | (inc)) -# define atomic_swap(ptr, inc) atomic_binop(ptr, inc, (inc)) -# define atomic_cas(ptr, cmp, swp) ({ \ - long flags = disable_irqsave(); \ - typeof(*(ptr)) res = *(volatile typeof(*(ptr)) *)(ptr); \ - if (res == (cmp)) *(volatile typeof(ptr))(ptr) = (swp); \ - enable_irqrestore(flags); \ - res; }) -#endif - -static inline int spinlock_trylock(spinlock_t* lock) -{ - int res = atomic_swap(&lock->lock, -1); - mb(); - return res; -} - -static inline void spinlock_lock(spinlock_t* lock) -{ - do - { - while (atomic_read(&lock->lock)) - ; - } while (spinlock_trylock(lock)); -} - -static inline void spinlock_unlock(spinlock_t* lock) -{ - mb(); - atomic_set(&lock->lock,0); -} - -static inline long spinlock_lock_irqsave(spinlock_t* lock) -{ - long flags = disable_irqsave(); - spinlock_lock(lock); - return flags; -} - -static inline void spinlock_unlock_irqrestore(spinlock_t* lock, long flags) -{ - spinlock_unlock(lock); - enable_irqrestore(flags); -} - -#endif diff --git a/libraries/NEMU/resource/bbl/src/bits.h b/libraries/NEMU/resource/bbl/src/bits.h deleted file mode 100644 index 0378d80..0000000 --- a/libraries/NEMU/resource/bbl/src/bits.h +++ /dev/null @@ -1,37 +0,0 @@ -// See LICENSE for license details. - -#ifndef _RISCV_BITS_H -#define _RISCV_BITS_H - -#define likely(x) __builtin_expect((x), 1) -#define unlikely(x) __builtin_expect((x), 0) - -#define ROUNDUP(a, b) ((((a)-1)/(b)+1)*(b)) -#define ROUNDDOWN(a, b) ((a)/(b)*(b)) - -#define MAX(a, b) ((a) > (b) ? (a) : (b)) -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#define CLAMP(a, lo, hi) MIN(MAX(a, lo), hi) - -#define EXTRACT_FIELD(val, which) (((val) & (which)) / ((which) & ~((which)-1))) -#define INSERT_FIELD(val, which, fieldval) (((val) & ~(which)) | ((fieldval) * ((which) & ~((which)-1)))) - -#define STR(x) XSTR(x) -#define XSTR(x) #x - -#if __riscv_xlen == 64 -# define SLL32 sllw -# define STORE sd -# define LOAD ld -# define LWU lwu -# define LOG_REGBYTES 3 -#else -# define SLL32 sll -# define STORE sw -# define LOAD lw -# define LWU lw -# define LOG_REGBYTES 2 -#endif -#define REGBYTES (1 << LOG_REGBYTES) - -#endif diff --git a/libraries/NEMU/resource/bbl/src/disabled_hart_mask.h b/libraries/NEMU/resource/bbl/src/disabled_hart_mask.h deleted file mode 100644 index 3dd98e3..0000000 --- a/libraries/NEMU/resource/bbl/src/disabled_hart_mask.h +++ /dev/null @@ -1,6 +0,0 @@ -// See LICENSE for license details. - -#ifndef DISABLED_HART_MASK_H -#define DISABLED_HART_MASK_H -extern long disabled_hart_mask; -#endif diff --git a/libraries/NEMU/resource/bbl/src/emulation.c b/libraries/NEMU/resource/bbl/src/emulation.c deleted file mode 100644 index edd7365..0000000 --- a/libraries/NEMU/resource/bbl/src/emulation.c +++ /dev/null @@ -1,294 +0,0 @@ -// See LICENSE for license details. - -#include "emulation.h" -//#include "fp_emulation.h" -//#include "config.h" -#include "unprivileged_memory.h" -#include "mtrap.h" -#include - -static DECLARE_EMULATION_FUNC(emulate_rvc) -{ -#ifdef __riscv_compressed - // the only emulable RVC instructions are FP loads and stores. -# if !defined(__riscv_flen) && defined(PK_ENABLE_FP_EMULATION) - write_csr(mepc, mepc + 2); - - // if FPU is disabled, punt back to the OS - if (unlikely((mstatus & MSTATUS_FS) == 0)) - return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); - - if ((insn & MASK_C_FLD) == MATCH_C_FLD) { - uintptr_t addr = GET_RS1S(insn, regs) + RVC_LD_IMM(insn); - if (unlikely(addr % sizeof(uintptr_t))) - return misaligned_load_trap(regs, mcause, mepc); - SET_F64_RD(RVC_RS2S(insn) << SH_RD, regs, load_uint64_t((void *)addr, mepc)); - } else if ((insn & MASK_C_FLDSP) == MATCH_C_FLDSP) { - uintptr_t addr = GET_SP(regs) + RVC_LDSP_IMM(insn); - if (unlikely(addr % sizeof(uintptr_t))) - return misaligned_load_trap(regs, mcause, mepc); - SET_F64_RD(insn, regs, load_uint64_t((void *)addr, mepc)); - } else if ((insn & MASK_C_FSD) == MATCH_C_FSD) { - uintptr_t addr = GET_RS1S(insn, regs) + RVC_LD_IMM(insn); - if (unlikely(addr % sizeof(uintptr_t))) - return misaligned_store_trap(regs, mcause, mepc); - store_uint64_t((void *)addr, GET_F64_RS2(RVC_RS2S(insn) << SH_RS2, regs), mepc); - } else if ((insn & MASK_C_FSDSP) == MATCH_C_FSDSP) { - uintptr_t addr = GET_SP(regs) + RVC_SDSP_IMM(insn); - if (unlikely(addr % sizeof(uintptr_t))) - return misaligned_store_trap(regs, mcause, mepc); - store_uint64_t((void *)addr, GET_F64_RS2(RVC_RS2(insn) << SH_RS2, regs), mepc); - } else -# if __riscv_xlen == 32 - if ((insn & MASK_C_FLW) == MATCH_C_FLW) { - uintptr_t addr = GET_RS1S(insn, regs) + RVC_LW_IMM(insn); - if (unlikely(addr % 4)) - return misaligned_load_trap(regs, mcause, mepc); - SET_F32_RD(RVC_RS2S(insn) << SH_RD, regs, load_int32_t((void *)addr, mepc)); - } else if ((insn & MASK_C_FLWSP) == MATCH_C_FLWSP) { - uintptr_t addr = GET_SP(regs) + RVC_LWSP_IMM(insn); - if (unlikely(addr % 4)) - return misaligned_load_trap(regs, mcause, mepc); - SET_F32_RD(insn, regs, load_int32_t((void *)addr, mepc)); - } else if ((insn & MASK_C_FSW) == MATCH_C_FSW) { - uintptr_t addr = GET_RS1S(insn, regs) + RVC_LW_IMM(insn); - if (unlikely(addr % 4)) - return misaligned_store_trap(regs, mcause, mepc); - store_uint32_t((void *)addr, GET_F32_RS2(RVC_RS2S(insn) << SH_RS2, regs), mepc); - } else if ((insn & MASK_C_FSWSP) == MATCH_C_FSWSP) { - uintptr_t addr = GET_SP(regs) + RVC_SWSP_IMM(insn); - if (unlikely(addr % 4)) - return misaligned_store_trap(regs, mcause, mepc); - store_uint32_t((void *)addr, GET_F32_RS2(RVC_RS2(insn) << SH_RS2, regs), mepc); - } else -# endif -# endif -#endif - - return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); -} - -void illegal_insn_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc) -{ - asm (".pushsection .rodata\n" - "illegal_insn_trap_table:\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" -#if !defined(__riscv_flen) && defined(PK_ENABLE_FP_EMULATION) - " .word emulate_float_load - illegal_insn_trap_table\n" -#else - " .word truly_illegal_insn - illegal_insn_trap_table\n" -#endif - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" -#if !defined(__riscv_flen) && defined(PK_ENABLE_FP_EMULATION) - " .word emulate_float_store - illegal_insn_trap_table\n" -#else - " .word truly_illegal_insn - illegal_insn_trap_table\n" -#endif - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" -#if !defined(__riscv_muldiv) - " .word emulate_mul_div - illegal_insn_trap_table\n" -#else - " .word truly_illegal_insn - illegal_insn_trap_table\n" -#endif - " .word truly_illegal_insn - illegal_insn_trap_table\n" -#if !defined(__riscv_muldiv) && __riscv_xlen >= 64 - " .word emulate_mul_div32 - illegal_insn_trap_table\n" -#else - " .word truly_illegal_insn - illegal_insn_trap_table\n" -#endif - " .word truly_illegal_insn - illegal_insn_trap_table\n" -#ifdef PK_ENABLE_FP_EMULATION - " .word emulate_fmadd - illegal_insn_trap_table\n" - " .word emulate_fmadd - illegal_insn_trap_table\n" - " .word emulate_fmadd - illegal_insn_trap_table\n" - " .word emulate_fmadd - illegal_insn_trap_table\n" - " .word emulate_fp - illegal_insn_trap_table\n" -#else - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" -#endif - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word emulate_system_opcode - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .word truly_illegal_insn - illegal_insn_trap_table\n" - " .popsection"); - - uintptr_t mstatus = read_csr(mstatus); - insn_t insn = read_csr(mbadaddr); - - if (unlikely((insn & 3) != 3)) { - if (insn == 0) - insn = get_insn(mepc, &mstatus); - if ((insn & 3) != 3) - return emulate_rvc(regs, mcause, mepc, mstatus, insn); - } - - write_csr(mepc, mepc + 4); - - extern uint32_t illegal_insn_trap_table[]; - int32_t* pf = (void*)illegal_insn_trap_table + (insn & 0x7c); - emulation_func f = (emulation_func)((void*)illegal_insn_trap_table + *pf); - f(regs, mcause, mepc, mstatus, insn); -} - -__attribute__((noinline)) -DECLARE_EMULATION_FUNC(truly_illegal_insn) -{ - return redirect_trap(mepc, mstatus, insn); -} - -static inline int emulate_read_csr(int num, uintptr_t mstatus, uintptr_t* result) -{ - uintptr_t counteren = -1; - if (EXTRACT_FIELD(mstatus, MSTATUS_MPP) == PRV_U) - counteren = read_csr(scounteren); - - switch (num) - { - case CSR_CYCLE: - if (!((counteren >> (CSR_CYCLE - CSR_CYCLE)) & 1)) - return -1; - *result = read_csr(mcycle); - return 0; - case CSR_TIME: - if (!((counteren >> (CSR_TIME - CSR_CYCLE)) & 1)) - return -1; - *result = 0; //*mtime; - return 0; - case CSR_INSTRET: - if (!((counteren >> (CSR_INSTRET - CSR_CYCLE)) & 1)) - return -1; - *result = read_csr(minstret); - return 0; - case CSR_MHPMCOUNTER3: - if (!((counteren >> (3 + CSR_MHPMCOUNTER3 - CSR_MHPMCOUNTER3)) & 1)) - return -1; - *result = read_csr(mhpmcounter3); - return 0; - case CSR_MHPMCOUNTER4: - if (!((counteren >> (3 + CSR_MHPMCOUNTER4 - CSR_MHPMCOUNTER3)) & 1)) - return -1; - *result = read_csr(mhpmcounter4); - return 0; -#if __riscv_xlen == 32 - case CSR_CYCLEH: - if (!((counteren >> (CSR_CYCLE - CSR_CYCLE)) & 1)) - return -1; - *result = read_csr(mcycleh); - return 0; - case CSR_TIMEH: - if (!((counteren >> (CSR_TIME - CSR_CYCLE)) & 1)) - return -1; - *result = *mtime >> 32; - return 0; - case CSR_INSTRETH: - if (!((counteren >> (CSR_INSTRET - CSR_CYCLE)) & 1)) - return -1; - *result = read_csr(minstreth); - return 0; - case CSR_MHPMCOUNTER3H: - if (!((counteren >> (3 + CSR_MHPMCOUNTER3 - CSR_MHPMCOUNTER3)) & 1)) - return -1; - *result = read_csr(mhpmcounter3h); - return 0; - case CSR_MHPMCOUNTER4H: - if (!((counteren >> (3 + CSR_MHPMCOUNTER4 - CSR_MHPMCOUNTER3)) & 1)) - return -1; - *result = read_csr(mhpmcounter4h); - return 0; -#endif - case CSR_MHPMEVENT3: - *result = read_csr(mhpmevent3); - return 0; - case CSR_MHPMEVENT4: - *result = read_csr(mhpmevent4); - return 0; -#if !defined(__riscv_flen) && defined(PK_ENABLE_FP_EMULATION) - case CSR_FRM: - if ((mstatus & MSTATUS_FS) == 0) break; - *result = GET_FRM(); - return 0; - case CSR_FFLAGS: - if ((mstatus & MSTATUS_FS) == 0) break; - *result = GET_FFLAGS(); - return 0; - case CSR_FCSR: - if ((mstatus & MSTATUS_FS) == 0) break; - *result = GET_FCSR(); - return 0; -#endif - } - return -1; -} - -static inline int emulate_write_csr(int num, uintptr_t value, uintptr_t mstatus) -{ - switch (num) - { - case CSR_CYCLE: write_csr(mcycle, value); return 0; - case CSR_INSTRET: write_csr(minstret, value); return 0; - case CSR_MHPMCOUNTER3: write_csr(mhpmcounter3, value); return 0; - case CSR_MHPMCOUNTER4: write_csr(mhpmcounter4, value); return 0; -#if __riscv_xlen == 32 - case CSR_CYCLEH: write_csr(mcycleh, value); return 0; - case CSR_INSTRETH: write_csr(minstreth, value); return 0; - case CSR_MHPMCOUNTER3H: write_csr(mhpmcounter3h, value); return 0; - case CSR_MHPMCOUNTER4H: write_csr(mhpmcounter4h, value); return 0; -#endif - case CSR_MHPMEVENT3: write_csr(mhpmevent3, value); return 0; - case CSR_MHPMEVENT4: write_csr(mhpmevent4, value); return 0; -#if !defined(__riscv_flen) && defined(PK_ENABLE_FP_EMULATION) - case CSR_FRM: SET_FRM(value); return 0; - case CSR_FFLAGS: SET_FFLAGS(value); return 0; - case CSR_FCSR: SET_FCSR(value); return 0; -#endif - } - return -1; -} - -DECLARE_EMULATION_FUNC(emulate_system_opcode) -{ - int rs1_num = (insn >> 15) & 0x1f; - uintptr_t rs1_val = GET_RS1(insn, regs); - int csr_num = (uint32_t)insn >> 20; - uintptr_t csr_val, new_csr_val; - - if (emulate_read_csr(csr_num, mstatus, &csr_val)) - return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); - - int do_write = rs1_num; -#define GET_RM(insn) (((insn) >> 12) & 7) - switch (GET_RM(insn)) - { - case 0: return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); - case 1: new_csr_val = rs1_val; do_write = 1; break; - case 2: new_csr_val = csr_val | rs1_val; break; - case 3: new_csr_val = csr_val & ~rs1_val; break; - case 4: return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); - case 5: new_csr_val = rs1_num; do_write = 1; break; - case 6: new_csr_val = csr_val | rs1_num; break; - case 7: new_csr_val = csr_val & ~rs1_num; break; - } - - if (do_write && emulate_write_csr(csr_num, new_csr_val, mstatus)) - return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); - - SET_RD(insn, regs, csr_val); -} diff --git a/libraries/NEMU/resource/bbl/src/emulation.h b/libraries/NEMU/resource/bbl/src/emulation.h deleted file mode 100644 index 62115bc..0000000 --- a/libraries/NEMU/resource/bbl/src/emulation.h +++ /dev/null @@ -1,53 +0,0 @@ -// See LICENSE for license details. - -#ifndef _RISCV_EMULATION_H -#define _RISCV_EMULATION_H - -#include "encoding.h" -#include "bits.h" -#include - -typedef uintptr_t insn_t; -typedef void (*emulation_func)(uintptr_t*, uintptr_t, uintptr_t, uintptr_t, insn_t); -#define DECLARE_EMULATION_FUNC(name) void name(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc, uintptr_t mstatus, insn_t insn) - -void misaligned_load_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc); -void misaligned_store_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc); -void redirect_trap(uintptr_t epc, uintptr_t mstatus, uintptr_t badaddr); -DECLARE_EMULATION_FUNC(truly_illegal_insn); -DECLARE_EMULATION_FUNC(emulate_rvc_0); -DECLARE_EMULATION_FUNC(emulate_rvc_2); - -#define SH_RD 7 -#define SH_RS1 15 -#define SH_RS2 20 -#define SH_RS2C 2 - -#define RV_X(x, s, n) (((x) >> (s)) & ((1 << (n)) - 1)) -#define RVC_LW_IMM(x) ((RV_X(x, 6, 1) << 2) | (RV_X(x, 10, 3) << 3) | (RV_X(x, 5, 1) << 6)) -#define RVC_LD_IMM(x) ((RV_X(x, 10, 3) << 3) | (RV_X(x, 5, 2) << 6)) -#define RVC_LWSP_IMM(x) ((RV_X(x, 4, 3) << 2) | (RV_X(x, 12, 1) << 5) | (RV_X(x, 2, 2) << 6)) -#define RVC_LDSP_IMM(x) ((RV_X(x, 5, 2) << 3) | (RV_X(x, 12, 1) << 5) | (RV_X(x, 2, 3) << 6)) -#define RVC_SWSP_IMM(x) ((RV_X(x, 9, 4) << 2) | (RV_X(x, 7, 2) << 6)) -#define RVC_SDSP_IMM(x) ((RV_X(x, 10, 3) << 3) | (RV_X(x, 7, 3) << 6)) -#define RVC_RS1S(insn) (8 + RV_X(insn, SH_RD, 3)) -#define RVC_RS2S(insn) (8 + RV_X(insn, SH_RS2C, 3)) -#define RVC_RS2(insn) RV_X(insn, SH_RS2C, 5) - -#define SHIFT_RIGHT(x, y) ((y) < 0 ? ((x) << -(y)) : ((x) >> (y))) -#define GET_REG(insn, pos, regs) ({ \ - int mask = (1 << (5+LOG_REGBYTES)) - (1 << LOG_REGBYTES); \ - (uintptr_t*)((uintptr_t)regs + (SHIFT_RIGHT(insn, (pos) - LOG_REGBYTES) & (mask))); \ -}) -#define GET_RS1(insn, regs) (*GET_REG(insn, SH_RS1, regs)) -#define GET_RS2(insn, regs) (*GET_REG(insn, SH_RS2, regs)) -#define GET_RS1S(insn, regs) (*GET_REG(RVC_RS1S(insn), 0, regs)) -#define GET_RS2S(insn, regs) (*GET_REG(RVC_RS2S(insn), 0, regs)) -#define GET_RS2C(insn, regs) (*GET_REG(insn, SH_RS2C, regs)) -#define GET_SP(regs) (*GET_REG(2, 0, regs)) -#define SET_RD(insn, regs, val) (*GET_REG(insn, SH_RD, regs) = (val)) -#define IMM_I(insn) ((int32_t)(insn) >> 20) -#define IMM_S(insn) (((int32_t)(insn) >> 25 << 5) | (int32_t)(((insn) >> 7) & 0x1f)) -#define MASK_FUNCT3 0x7000 - -#endif diff --git a/libraries/NEMU/resource/bbl/src/encoding.h b/libraries/NEMU/resource/bbl/src/encoding.h deleted file mode 100644 index c109ce1..0000000 --- a/libraries/NEMU/resource/bbl/src/encoding.h +++ /dev/null @@ -1,1471 +0,0 @@ -// See LICENSE for license details. - -#ifndef RISCV_CSR_ENCODING_H -#define RISCV_CSR_ENCODING_H - -#define MSTATUS_UIE 0x00000001 -#define MSTATUS_SIE 0x00000002 -#define MSTATUS_HIE 0x00000004 -#define MSTATUS_MIE 0x00000008 -#define MSTATUS_UPIE 0x00000010 -#define MSTATUS_SPIE 0x00000020 -#define MSTATUS_HPIE 0x00000040 -#define MSTATUS_MPIE 0x00000080 -#define MSTATUS_SPP 0x00000100 -#define MSTATUS_HPP 0x00000600 -#define MSTATUS_MPP 0x00001800 -#define MSTATUS_FS 0x00006000 -#define MSTATUS_XS 0x00018000 -#define MSTATUS_MPRV 0x00020000 -#define MSTATUS_SUM 0x00040000 -#define MSTATUS_MXR 0x00080000 -#define MSTATUS_TVM 0x00100000 -#define MSTATUS_TW 0x00200000 -#define MSTATUS_TSR 0x00400000 -#define MSTATUS32_SD 0x80000000 -#define MSTATUS_UXL 0x0000000300000000 -#define MSTATUS_SXL 0x0000000C00000000 -#define MSTATUS64_SD 0x8000000000000000 - -#define SSTATUS_UIE 0x00000001 -#define SSTATUS_SIE 0x00000002 -#define SSTATUS_UPIE 0x00000010 -#define SSTATUS_SPIE 0x00000020 -#define SSTATUS_SPP 0x00000100 -#define SSTATUS_FS 0x00006000 -#define SSTATUS_XS 0x00018000 -#define SSTATUS_SUM 0x00040000 -#define SSTATUS_MXR 0x00080000 -#define SSTATUS32_SD 0x80000000 -#define SSTATUS_UXL 0x0000000300000000 -#define SSTATUS64_SD 0x8000000000000000 - -#define DCSR_XDEBUGVER (3U<<30) -#define DCSR_NDRESET (1<<29) -#define DCSR_FULLRESET (1<<28) -#define DCSR_EBREAKM (1<<15) -#define DCSR_EBREAKH (1<<14) -#define DCSR_EBREAKS (1<<13) -#define DCSR_EBREAKU (1<<12) -#define DCSR_STOPCYCLE (1<<10) -#define DCSR_STOPTIME (1<<9) -#define DCSR_CAUSE (7<<6) -#define DCSR_DEBUGINT (1<<5) -#define DCSR_HALT (1<<3) -#define DCSR_STEP (1<<2) -#define DCSR_PRV (3<<0) - -#define DCSR_CAUSE_NONE 0 -#define DCSR_CAUSE_SWBP 1 -#define DCSR_CAUSE_HWBP 2 -#define DCSR_CAUSE_DEBUGINT 3 -#define DCSR_CAUSE_STEP 4 -#define DCSR_CAUSE_HALT 5 - -#define MCONTROL_TYPE(xlen) (0xfULL<<((xlen)-4)) -#define MCONTROL_DMODE(xlen) (1ULL<<((xlen)-5)) -#define MCONTROL_MASKMAX(xlen) (0x3fULL<<((xlen)-11)) - -#define MCONTROL_SELECT (1<<19) -#define MCONTROL_TIMING (1<<18) -#define MCONTROL_ACTION (0x3f<<12) -#define MCONTROL_CHAIN (1<<11) -#define MCONTROL_MATCH (0xf<<7) -#define MCONTROL_M (1<<6) -#define MCONTROL_H (1<<5) -#define MCONTROL_S (1<<4) -#define MCONTROL_U (1<<3) -#define MCONTROL_EXECUTE (1<<2) -#define MCONTROL_STORE (1<<1) -#define MCONTROL_LOAD (1<<0) - -#define MCONTROL_TYPE_NONE 0 -#define MCONTROL_TYPE_MATCH 2 - -#define MCONTROL_ACTION_DEBUG_EXCEPTION 0 -#define MCONTROL_ACTION_DEBUG_MODE 1 -#define MCONTROL_ACTION_TRACE_START 2 -#define MCONTROL_ACTION_TRACE_STOP 3 -#define MCONTROL_ACTION_TRACE_EMIT 4 - -#define MCONTROL_MATCH_EQUAL 0 -#define MCONTROL_MATCH_NAPOT 1 -#define MCONTROL_MATCH_GE 2 -#define MCONTROL_MATCH_LT 3 -#define MCONTROL_MATCH_MASK_LOW 4 -#define MCONTROL_MATCH_MASK_HIGH 5 - -#define MIP_SSIP (1 << IRQ_S_SOFT) -#define MIP_HSIP (1 << IRQ_H_SOFT) -#define MIP_MSIP (1 << IRQ_M_SOFT) -#define MIP_STIP (1 << IRQ_S_TIMER) -#define MIP_HTIP (1 << IRQ_H_TIMER) -#define MIP_MTIP (1 << IRQ_M_TIMER) -#define MIP_SEIP (1 << IRQ_S_EXT) -#define MIP_HEIP (1 << IRQ_H_EXT) -#define MIP_MEIP (1 << IRQ_M_EXT) - -#define SIP_SSIP MIP_SSIP -#define SIP_STIP MIP_STIP - -#define PRV_U 0 -#define PRV_S 1 -#define PRV_H 2 -#define PRV_M 3 - -#define SATP32_MODE 0x80000000 -#define SATP32_ASID 0x7FC00000 -#define SATP32_PPN 0x003FFFFF -#define SATP64_MODE 0xF000000000000000 -#define SATP64_ASID 0x0FFFF00000000000 -#define SATP64_PPN 0x00000FFFFFFFFFFF - -#define SATP_MODE_OFF 0 -#define SATP_MODE_SV32 1 -#define SATP_MODE_SV39 8 -#define SATP_MODE_SV48 9 -#define SATP_MODE_SV57 10 -#define SATP_MODE_SV64 11 - -#define PMP_R 0x01 -#define PMP_W 0x02 -#define PMP_X 0x04 -#define PMP_A 0x18 -#define PMP_L 0x80 -#define PMP_SHIFT 2 - -#define PMP_TOR 0x08 -#define PMP_NA4 0x10 -#define PMP_NAPOT 0x18 - -#define IRQ_S_SOFT 1 -#define IRQ_H_SOFT 2 -#define IRQ_M_SOFT 3 -#define IRQ_S_TIMER 5 -#define IRQ_H_TIMER 6 -#define IRQ_M_TIMER 7 -#define IRQ_S_EXT 9 -#define IRQ_H_EXT 10 -#define IRQ_M_EXT 11 -#define IRQ_COP 12 -#define IRQ_HOST 13 - -#define DEFAULT_RSTVEC 0x00001000 -#define CLINT_BASE 0x02000000 -#define CLINT_SIZE 0x000c0000 -#define EXT_IO_BASE 0x40000000 -#define DRAM_BASE 0x80000000 - -// page table entry (PTE) fields -#define PTE_V 0x001 // Valid -#define PTE_R 0x002 // Read -#define PTE_W 0x004 // Write -#define PTE_X 0x008 // Execute -#define PTE_U 0x010 // User -#define PTE_G 0x020 // Global -#define PTE_A 0x040 // Accessed -#define PTE_D 0x080 // Dirty -#define PTE_SOFT 0x300 // Reserved for Software - -#define PTE_PPN_SHIFT 10 - -#define PTE_TABLE(PTE) (((PTE) & (PTE_V | PTE_R | PTE_W | PTE_X)) == PTE_V) - -#ifdef __riscv - -#if __riscv_xlen == 64 -# define MSTATUS_SD MSTATUS64_SD -# define SSTATUS_SD SSTATUS64_SD -# define RISCV_PGLEVEL_BITS 9 -# define SATP_MODE SATP64_MODE -#else -# define MSTATUS_SD MSTATUS32_SD -# define SSTATUS_SD SSTATUS32_SD -# define RISCV_PGLEVEL_BITS 10 -# define SATP_MODE SATP32_MODE -#endif -#define RISCV_PGSHIFT 12 -#define RISCV_PGSIZE (1 << RISCV_PGSHIFT) - -#ifndef __ASSEMBLER__ - -#ifdef __GNUC__ - -#define read_csr(reg) ({ unsigned long __tmp; \ - asm volatile ("csrr %0, " #reg : "=r"(__tmp)); \ - __tmp; }) - -#define write_csr(reg, val) ({ \ - asm volatile ("csrw " #reg ", %0" :: "rK"(val)); }) - -#define swap_csr(reg, val) ({ unsigned long __tmp; \ - asm volatile ("csrrw %0, " #reg ", %1" : "=r"(__tmp) : "rK"(val)); \ - __tmp; }) - -#define set_csr(reg, bit) ({ unsigned long __tmp; \ - asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "rK"(bit)); \ - __tmp; }) - -#define clear_csr(reg, bit) ({ unsigned long __tmp; \ - asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "rK"(bit)); \ - __tmp; }) - -#define rdtime() read_csr(time) -#define rdcycle() read_csr(cycle) -#define rdinstret() read_csr(instret) - -#endif - -#endif - -#endif - -#endif -/* Automatically generated by parse-opcodes. */ -#ifndef RISCV_ENCODING_H -#define RISCV_ENCODING_H -#define MATCH_BEQ 0x63 -#define MASK_BEQ 0x707f -#define MATCH_BNE 0x1063 -#define MASK_BNE 0x707f -#define MATCH_BLT 0x4063 -#define MASK_BLT 0x707f -#define MATCH_BGE 0x5063 -#define MASK_BGE 0x707f -#define MATCH_BLTU 0x6063 -#define MASK_BLTU 0x707f -#define MATCH_BGEU 0x7063 -#define MASK_BGEU 0x707f -#define MATCH_JALR 0x67 -#define MASK_JALR 0x707f -#define MATCH_JAL 0x6f -#define MASK_JAL 0x7f -#define MATCH_LUI 0x37 -#define MASK_LUI 0x7f -#define MATCH_AUIPC 0x17 -#define MASK_AUIPC 0x7f -#define MATCH_ADDI 0x13 -#define MASK_ADDI 0x707f -#define MATCH_SLLI 0x1013 -#define MASK_SLLI 0xfc00707f -#define MATCH_SLTI 0x2013 -#define MASK_SLTI 0x707f -#define MATCH_SLTIU 0x3013 -#define MASK_SLTIU 0x707f -#define MATCH_XORI 0x4013 -#define MASK_XORI 0x707f -#define MATCH_SRLI 0x5013 -#define MASK_SRLI 0xfc00707f -#define MATCH_SRAI 0x40005013 -#define MASK_SRAI 0xfc00707f -#define MATCH_ORI 0x6013 -#define MASK_ORI 0x707f -#define MATCH_ANDI 0x7013 -#define MASK_ANDI 0x707f -#define MATCH_ADD 0x33 -#define MASK_ADD 0xfe00707f -#define MATCH_SUB 0x40000033 -#define MASK_SUB 0xfe00707f -#define MATCH_SLL 0x1033 -#define MASK_SLL 0xfe00707f -#define MATCH_SLT 0x2033 -#define MASK_SLT 0xfe00707f -#define MATCH_SLTU 0x3033 -#define MASK_SLTU 0xfe00707f -#define MATCH_XOR 0x4033 -#define MASK_XOR 0xfe00707f -#define MATCH_SRL 0x5033 -#define MASK_SRL 0xfe00707f -#define MATCH_SRA 0x40005033 -#define MASK_SRA 0xfe00707f -#define MATCH_OR 0x6033 -#define MASK_OR 0xfe00707f -#define MATCH_AND 0x7033 -#define MASK_AND 0xfe00707f -#define MATCH_ADDIW 0x1b -#define MASK_ADDIW 0x707f -#define MATCH_SLLIW 0x101b -#define MASK_SLLIW 0xfe00707f -#define MATCH_SRLIW 0x501b -#define MASK_SRLIW 0xfe00707f -#define MATCH_SRAIW 0x4000501b -#define MASK_SRAIW 0xfe00707f -#define MATCH_ADDW 0x3b -#define MASK_ADDW 0xfe00707f -#define MATCH_SUBW 0x4000003b -#define MASK_SUBW 0xfe00707f -#define MATCH_SLLW 0x103b -#define MASK_SLLW 0xfe00707f -#define MATCH_SRLW 0x503b -#define MASK_SRLW 0xfe00707f -#define MATCH_SRAW 0x4000503b -#define MASK_SRAW 0xfe00707f -#define MATCH_LB 0x3 -#define MASK_LB 0x707f -#define MATCH_LH 0x1003 -#define MASK_LH 0x707f -#define MATCH_LW 0x2003 -#define MASK_LW 0x707f -#define MATCH_LD 0x3003 -#define MASK_LD 0x707f -#define MATCH_LBU 0x4003 -#define MASK_LBU 0x707f -#define MATCH_LHU 0x5003 -#define MASK_LHU 0x707f -#define MATCH_LWU 0x6003 -#define MASK_LWU 0x707f -#define MATCH_SB 0x23 -#define MASK_SB 0x707f -#define MATCH_SH 0x1023 -#define MASK_SH 0x707f -#define MATCH_SW 0x2023 -#define MASK_SW 0x707f -#define MATCH_SD 0x3023 -#define MASK_SD 0x707f -#define MATCH_FENCE 0xf -#define MASK_FENCE 0x707f -#define MATCH_FENCE_I 0x100f -#define MASK_FENCE_I 0x707f -#define MATCH_MUL 0x2000033 -#define MASK_MUL 0xfe00707f -#define MATCH_MULH 0x2001033 -#define MASK_MULH 0xfe00707f -#define MATCH_MULHSU 0x2002033 -#define MASK_MULHSU 0xfe00707f -#define MATCH_MULHU 0x2003033 -#define MASK_MULHU 0xfe00707f -#define MATCH_DIV 0x2004033 -#define MASK_DIV 0xfe00707f -#define MATCH_DIVU 0x2005033 -#define MASK_DIVU 0xfe00707f -#define MATCH_REM 0x2006033 -#define MASK_REM 0xfe00707f -#define MATCH_REMU 0x2007033 -#define MASK_REMU 0xfe00707f -#define MATCH_MULW 0x200003b -#define MASK_MULW 0xfe00707f -#define MATCH_DIVW 0x200403b -#define MASK_DIVW 0xfe00707f -#define MATCH_DIVUW 0x200503b -#define MASK_DIVUW 0xfe00707f -#define MATCH_REMW 0x200603b -#define MASK_REMW 0xfe00707f -#define MATCH_REMUW 0x200703b -#define MASK_REMUW 0xfe00707f -#define MATCH_AMOADD_W 0x202f -#define MASK_AMOADD_W 0xf800707f -#define MATCH_AMOXOR_W 0x2000202f -#define MASK_AMOXOR_W 0xf800707f -#define MATCH_AMOOR_W 0x4000202f -#define MASK_AMOOR_W 0xf800707f -#define MATCH_AMOAND_W 0x6000202f -#define MASK_AMOAND_W 0xf800707f -#define MATCH_AMOMIN_W 0x8000202f -#define MASK_AMOMIN_W 0xf800707f -#define MATCH_AMOMAX_W 0xa000202f -#define MASK_AMOMAX_W 0xf800707f -#define MATCH_AMOMINU_W 0xc000202f -#define MASK_AMOMINU_W 0xf800707f -#define MATCH_AMOMAXU_W 0xe000202f -#define MASK_AMOMAXU_W 0xf800707f -#define MATCH_AMOSWAP_W 0x800202f -#define MASK_AMOSWAP_W 0xf800707f -#define MATCH_LR_W 0x1000202f -#define MASK_LR_W 0xf9f0707f -#define MATCH_SC_W 0x1800202f -#define MASK_SC_W 0xf800707f -#define MATCH_AMOADD_D 0x302f -#define MASK_AMOADD_D 0xf800707f -#define MATCH_AMOXOR_D 0x2000302f -#define MASK_AMOXOR_D 0xf800707f -#define MATCH_AMOOR_D 0x4000302f -#define MASK_AMOOR_D 0xf800707f -#define MATCH_AMOAND_D 0x6000302f -#define MASK_AMOAND_D 0xf800707f -#define MATCH_AMOMIN_D 0x8000302f -#define MASK_AMOMIN_D 0xf800707f -#define MATCH_AMOMAX_D 0xa000302f -#define MASK_AMOMAX_D 0xf800707f -#define MATCH_AMOMINU_D 0xc000302f -#define MASK_AMOMINU_D 0xf800707f -#define MATCH_AMOMAXU_D 0xe000302f -#define MASK_AMOMAXU_D 0xf800707f -#define MATCH_AMOSWAP_D 0x800302f -#define MASK_AMOSWAP_D 0xf800707f -#define MATCH_LR_D 0x1000302f -#define MASK_LR_D 0xf9f0707f -#define MATCH_SC_D 0x1800302f -#define MASK_SC_D 0xf800707f -#define MATCH_ECALL 0x73 -#define MASK_ECALL 0xffffffff -#define MATCH_EBREAK 0x100073 -#define MASK_EBREAK 0xffffffff -#define MATCH_URET 0x200073 -#define MASK_URET 0xffffffff -#define MATCH_SRET 0x10200073 -#define MASK_SRET 0xffffffff -#define MATCH_MRET 0x30200073 -#define MASK_MRET 0xffffffff -#define MATCH_DRET 0x7b200073 -#define MASK_DRET 0xffffffff -#define MATCH_SFENCE_VMA 0x12000073 -#define MASK_SFENCE_VMA 0xfe007fff -#define MATCH_WFI 0x10500073 -#define MASK_WFI 0xffffffff -#define MATCH_CSRRW 0x1073 -#define MASK_CSRRW 0x707f -#define MATCH_CSRRS 0x2073 -#define MASK_CSRRS 0x707f -#define MATCH_CSRRC 0x3073 -#define MASK_CSRRC 0x707f -#define MATCH_CSRRWI 0x5073 -#define MASK_CSRRWI 0x707f -#define MATCH_CSRRSI 0x6073 -#define MASK_CSRRSI 0x707f -#define MATCH_CSRRCI 0x7073 -#define MASK_CSRRCI 0x707f -#define MATCH_FADD_S 0x53 -#define MASK_FADD_S 0xfe00007f -#define MATCH_FSUB_S 0x8000053 -#define MASK_FSUB_S 0xfe00007f -#define MATCH_FMUL_S 0x10000053 -#define MASK_FMUL_S 0xfe00007f -#define MATCH_FDIV_S 0x18000053 -#define MASK_FDIV_S 0xfe00007f -#define MATCH_FSGNJ_S 0x20000053 -#define MASK_FSGNJ_S 0xfe00707f -#define MATCH_FSGNJN_S 0x20001053 -#define MASK_FSGNJN_S 0xfe00707f -#define MATCH_FSGNJX_S 0x20002053 -#define MASK_FSGNJX_S 0xfe00707f -#define MATCH_FMIN_S 0x28000053 -#define MASK_FMIN_S 0xfe00707f -#define MATCH_FMAX_S 0x28001053 -#define MASK_FMAX_S 0xfe00707f -#define MATCH_FSQRT_S 0x58000053 -#define MASK_FSQRT_S 0xfff0007f -#define MATCH_FADD_D 0x2000053 -#define MASK_FADD_D 0xfe00007f -#define MATCH_FSUB_D 0xa000053 -#define MASK_FSUB_D 0xfe00007f -#define MATCH_FMUL_D 0x12000053 -#define MASK_FMUL_D 0xfe00007f -#define MATCH_FDIV_D 0x1a000053 -#define MASK_FDIV_D 0xfe00007f -#define MATCH_FSGNJ_D 0x22000053 -#define MASK_FSGNJ_D 0xfe00707f -#define MATCH_FSGNJN_D 0x22001053 -#define MASK_FSGNJN_D 0xfe00707f -#define MATCH_FSGNJX_D 0x22002053 -#define MASK_FSGNJX_D 0xfe00707f -#define MATCH_FMIN_D 0x2a000053 -#define MASK_FMIN_D 0xfe00707f -#define MATCH_FMAX_D 0x2a001053 -#define MASK_FMAX_D 0xfe00707f -#define MATCH_FCVT_S_D 0x40100053 -#define MASK_FCVT_S_D 0xfff0007f -#define MATCH_FCVT_D_S 0x42000053 -#define MASK_FCVT_D_S 0xfff0007f -#define MATCH_FSQRT_D 0x5a000053 -#define MASK_FSQRT_D 0xfff0007f -#define MATCH_FADD_Q 0x6000053 -#define MASK_FADD_Q 0xfe00007f -#define MATCH_FSUB_Q 0xe000053 -#define MASK_FSUB_Q 0xfe00007f -#define MATCH_FMUL_Q 0x16000053 -#define MASK_FMUL_Q 0xfe00007f -#define MATCH_FDIV_Q 0x1e000053 -#define MASK_FDIV_Q 0xfe00007f -#define MATCH_FSGNJ_Q 0x26000053 -#define MASK_FSGNJ_Q 0xfe00707f -#define MATCH_FSGNJN_Q 0x26001053 -#define MASK_FSGNJN_Q 0xfe00707f -#define MATCH_FSGNJX_Q 0x26002053 -#define MASK_FSGNJX_Q 0xfe00707f -#define MATCH_FMIN_Q 0x2e000053 -#define MASK_FMIN_Q 0xfe00707f -#define MATCH_FMAX_Q 0x2e001053 -#define MASK_FMAX_Q 0xfe00707f -#define MATCH_FCVT_S_Q 0x40300053 -#define MASK_FCVT_S_Q 0xfff0007f -#define MATCH_FCVT_Q_S 0x46000053 -#define MASK_FCVT_Q_S 0xfff0007f -#define MATCH_FCVT_D_Q 0x42300053 -#define MASK_FCVT_D_Q 0xfff0007f -#define MATCH_FCVT_Q_D 0x46100053 -#define MASK_FCVT_Q_D 0xfff0007f -#define MATCH_FSQRT_Q 0x5e000053 -#define MASK_FSQRT_Q 0xfff0007f -#define MATCH_FLE_S 0xa0000053 -#define MASK_FLE_S 0xfe00707f -#define MATCH_FLT_S 0xa0001053 -#define MASK_FLT_S 0xfe00707f -#define MATCH_FEQ_S 0xa0002053 -#define MASK_FEQ_S 0xfe00707f -#define MATCH_FLE_D 0xa2000053 -#define MASK_FLE_D 0xfe00707f -#define MATCH_FLT_D 0xa2001053 -#define MASK_FLT_D 0xfe00707f -#define MATCH_FEQ_D 0xa2002053 -#define MASK_FEQ_D 0xfe00707f -#define MATCH_FLE_Q 0xa6000053 -#define MASK_FLE_Q 0xfe00707f -#define MATCH_FLT_Q 0xa6001053 -#define MASK_FLT_Q 0xfe00707f -#define MATCH_FEQ_Q 0xa6002053 -#define MASK_FEQ_Q 0xfe00707f -#define MATCH_FCVT_W_S 0xc0000053 -#define MASK_FCVT_W_S 0xfff0007f -#define MATCH_FCVT_WU_S 0xc0100053 -#define MASK_FCVT_WU_S 0xfff0007f -#define MATCH_FCVT_L_S 0xc0200053 -#define MASK_FCVT_L_S 0xfff0007f -#define MATCH_FCVT_LU_S 0xc0300053 -#define MASK_FCVT_LU_S 0xfff0007f -#define MATCH_FMV_X_W 0xe0000053 -#define MASK_FMV_X_W 0xfff0707f -#define MATCH_FCLASS_S 0xe0001053 -#define MASK_FCLASS_S 0xfff0707f -#define MATCH_FCVT_W_D 0xc2000053 -#define MASK_FCVT_W_D 0xfff0007f -#define MATCH_FCVT_WU_D 0xc2100053 -#define MASK_FCVT_WU_D 0xfff0007f -#define MATCH_FCVT_L_D 0xc2200053 -#define MASK_FCVT_L_D 0xfff0007f -#define MATCH_FCVT_LU_D 0xc2300053 -#define MASK_FCVT_LU_D 0xfff0007f -#define MATCH_FMV_X_D 0xe2000053 -#define MASK_FMV_X_D 0xfff0707f -#define MATCH_FCLASS_D 0xe2001053 -#define MASK_FCLASS_D 0xfff0707f -#define MATCH_FCVT_W_Q 0xc6000053 -#define MASK_FCVT_W_Q 0xfff0007f -#define MATCH_FCVT_WU_Q 0xc6100053 -#define MASK_FCVT_WU_Q 0xfff0007f -#define MATCH_FCVT_L_Q 0xc6200053 -#define MASK_FCVT_L_Q 0xfff0007f -#define MATCH_FCVT_LU_Q 0xc6300053 -#define MASK_FCVT_LU_Q 0xfff0007f -#define MATCH_FMV_X_Q 0xe6000053 -#define MASK_FMV_X_Q 0xfff0707f -#define MATCH_FCLASS_Q 0xe6001053 -#define MASK_FCLASS_Q 0xfff0707f -#define MATCH_FCVT_S_W 0xd0000053 -#define MASK_FCVT_S_W 0xfff0007f -#define MATCH_FCVT_S_WU 0xd0100053 -#define MASK_FCVT_S_WU 0xfff0007f -#define MATCH_FCVT_S_L 0xd0200053 -#define MASK_FCVT_S_L 0xfff0007f -#define MATCH_FCVT_S_LU 0xd0300053 -#define MASK_FCVT_S_LU 0xfff0007f -#define MATCH_FMV_W_X 0xf0000053 -#define MASK_FMV_W_X 0xfff0707f -#define MATCH_FCVT_D_W 0xd2000053 -#define MASK_FCVT_D_W 0xfff0007f -#define MATCH_FCVT_D_WU 0xd2100053 -#define MASK_FCVT_D_WU 0xfff0007f -#define MATCH_FCVT_D_L 0xd2200053 -#define MASK_FCVT_D_L 0xfff0007f -#define MATCH_FCVT_D_LU 0xd2300053 -#define MASK_FCVT_D_LU 0xfff0007f -#define MATCH_FMV_D_X 0xf2000053 -#define MASK_FMV_D_X 0xfff0707f -#define MATCH_FCVT_Q_W 0xd6000053 -#define MASK_FCVT_Q_W 0xfff0007f -#define MATCH_FCVT_Q_WU 0xd6100053 -#define MASK_FCVT_Q_WU 0xfff0007f -#define MATCH_FCVT_Q_L 0xd6200053 -#define MASK_FCVT_Q_L 0xfff0007f -#define MATCH_FCVT_Q_LU 0xd6300053 -#define MASK_FCVT_Q_LU 0xfff0007f -#define MATCH_FMV_Q_X 0xf6000053 -#define MASK_FMV_Q_X 0xfff0707f -#define MATCH_FLW 0x2007 -#define MASK_FLW 0x707f -#define MATCH_FLD 0x3007 -#define MASK_FLD 0x707f -#define MATCH_FLQ 0x4007 -#define MASK_FLQ 0x707f -#define MATCH_FSW 0x2027 -#define MASK_FSW 0x707f -#define MATCH_FSD 0x3027 -#define MASK_FSD 0x707f -#define MATCH_FSQ 0x4027 -#define MASK_FSQ 0x707f -#define MATCH_FMADD_S 0x43 -#define MASK_FMADD_S 0x600007f -#define MATCH_FMSUB_S 0x47 -#define MASK_FMSUB_S 0x600007f -#define MATCH_FNMSUB_S 0x4b -#define MASK_FNMSUB_S 0x600007f -#define MATCH_FNMADD_S 0x4f -#define MASK_FNMADD_S 0x600007f -#define MATCH_FMADD_D 0x2000043 -#define MASK_FMADD_D 0x600007f -#define MATCH_FMSUB_D 0x2000047 -#define MASK_FMSUB_D 0x600007f -#define MATCH_FNMSUB_D 0x200004b -#define MASK_FNMSUB_D 0x600007f -#define MATCH_FNMADD_D 0x200004f -#define MASK_FNMADD_D 0x600007f -#define MATCH_FMADD_Q 0x6000043 -#define MASK_FMADD_Q 0x600007f -#define MATCH_FMSUB_Q 0x6000047 -#define MASK_FMSUB_Q 0x600007f -#define MATCH_FNMSUB_Q 0x600004b -#define MASK_FNMSUB_Q 0x600007f -#define MATCH_FNMADD_Q 0x600004f -#define MASK_FNMADD_Q 0x600007f -#define MATCH_C_NOP 0x1 -#define MASK_C_NOP 0xffff -#define MATCH_C_ADDI16SP 0x6101 -#define MASK_C_ADDI16SP 0xef83 -#define MATCH_C_JR 0x8002 -#define MASK_C_JR 0xf07f -#define MATCH_C_JALR 0x9002 -#define MASK_C_JALR 0xf07f -#define MATCH_C_EBREAK 0x9002 -#define MASK_C_EBREAK 0xffff -#define MATCH_C_LD 0x6000 -#define MASK_C_LD 0xe003 -#define MATCH_C_SD 0xe000 -#define MASK_C_SD 0xe003 -#define MATCH_C_ADDIW 0x2001 -#define MASK_C_ADDIW 0xe003 -#define MATCH_C_LDSP 0x6002 -#define MASK_C_LDSP 0xe003 -#define MATCH_C_SDSP 0xe002 -#define MASK_C_SDSP 0xe003 -#define MATCH_C_ADDI4SPN 0x0 -#define MASK_C_ADDI4SPN 0xe003 -#define MATCH_C_FLD 0x2000 -#define MASK_C_FLD 0xe003 -#define MATCH_C_LW 0x4000 -#define MASK_C_LW 0xe003 -#define MATCH_C_FLW 0x6000 -#define MASK_C_FLW 0xe003 -#define MATCH_C_FSD 0xa000 -#define MASK_C_FSD 0xe003 -#define MATCH_C_SW 0xc000 -#define MASK_C_SW 0xe003 -#define MATCH_C_FSW 0xe000 -#define MASK_C_FSW 0xe003 -#define MATCH_C_ADDI 0x1 -#define MASK_C_ADDI 0xe003 -#define MATCH_C_JAL 0x2001 -#define MASK_C_JAL 0xe003 -#define MATCH_C_LI 0x4001 -#define MASK_C_LI 0xe003 -#define MATCH_C_LUI 0x6001 -#define MASK_C_LUI 0xe003 -#define MATCH_C_SRLI 0x8001 -#define MASK_C_SRLI 0xec03 -#define MATCH_C_SRAI 0x8401 -#define MASK_C_SRAI 0xec03 -#define MATCH_C_ANDI 0x8801 -#define MASK_C_ANDI 0xec03 -#define MATCH_C_SUB 0x8c01 -#define MASK_C_SUB 0xfc63 -#define MATCH_C_XOR 0x8c21 -#define MASK_C_XOR 0xfc63 -#define MATCH_C_OR 0x8c41 -#define MASK_C_OR 0xfc63 -#define MATCH_C_AND 0x8c61 -#define MASK_C_AND 0xfc63 -#define MATCH_C_SUBW 0x9c01 -#define MASK_C_SUBW 0xfc63 -#define MATCH_C_ADDW 0x9c21 -#define MASK_C_ADDW 0xfc63 -#define MATCH_C_J 0xa001 -#define MASK_C_J 0xe003 -#define MATCH_C_BEQZ 0xc001 -#define MASK_C_BEQZ 0xe003 -#define MATCH_C_BNEZ 0xe001 -#define MASK_C_BNEZ 0xe003 -#define MATCH_C_SLLI 0x2 -#define MASK_C_SLLI 0xe003 -#define MATCH_C_FLDSP 0x2002 -#define MASK_C_FLDSP 0xe003 -#define MATCH_C_LWSP 0x4002 -#define MASK_C_LWSP 0xe003 -#define MATCH_C_FLWSP 0x6002 -#define MASK_C_FLWSP 0xe003 -#define MATCH_C_MV 0x8002 -#define MASK_C_MV 0xf003 -#define MATCH_C_ADD 0x9002 -#define MASK_C_ADD 0xf003 -#define MATCH_C_FSDSP 0xa002 -#define MASK_C_FSDSP 0xe003 -#define MATCH_C_SWSP 0xc002 -#define MASK_C_SWSP 0xe003 -#define MATCH_C_FSWSP 0xe002 -#define MASK_C_FSWSP 0xe003 -#define MATCH_CUSTOM0 0xb -#define MASK_CUSTOM0 0x707f -#define MATCH_CUSTOM0_RS1 0x200b -#define MASK_CUSTOM0_RS1 0x707f -#define MATCH_CUSTOM0_RS1_RS2 0x300b -#define MASK_CUSTOM0_RS1_RS2 0x707f -#define MATCH_CUSTOM0_RD 0x400b -#define MASK_CUSTOM0_RD 0x707f -#define MATCH_CUSTOM0_RD_RS1 0x600b -#define MASK_CUSTOM0_RD_RS1 0x707f -#define MATCH_CUSTOM0_RD_RS1_RS2 0x700b -#define MASK_CUSTOM0_RD_RS1_RS2 0x707f -#define MATCH_CUSTOM1 0x2b -#define MASK_CUSTOM1 0x707f -#define MATCH_CUSTOM1_RS1 0x202b -#define MASK_CUSTOM1_RS1 0x707f -#define MATCH_CUSTOM1_RS1_RS2 0x302b -#define MASK_CUSTOM1_RS1_RS2 0x707f -#define MATCH_CUSTOM1_RD 0x402b -#define MASK_CUSTOM1_RD 0x707f -#define MATCH_CUSTOM1_RD_RS1 0x602b -#define MASK_CUSTOM1_RD_RS1 0x707f -#define MATCH_CUSTOM1_RD_RS1_RS2 0x702b -#define MASK_CUSTOM1_RD_RS1_RS2 0x707f -#define MATCH_CUSTOM2 0x5b -#define MASK_CUSTOM2 0x707f -#define MATCH_CUSTOM2_RS1 0x205b -#define MASK_CUSTOM2_RS1 0x707f -#define MATCH_CUSTOM2_RS1_RS2 0x305b -#define MASK_CUSTOM2_RS1_RS2 0x707f -#define MATCH_CUSTOM2_RD 0x405b -#define MASK_CUSTOM2_RD 0x707f -#define MATCH_CUSTOM2_RD_RS1 0x605b -#define MASK_CUSTOM2_RD_RS1 0x707f -#define MATCH_CUSTOM2_RD_RS1_RS2 0x705b -#define MASK_CUSTOM2_RD_RS1_RS2 0x707f -#define MATCH_CUSTOM3 0x7b -#define MASK_CUSTOM3 0x707f -#define MATCH_CUSTOM3_RS1 0x207b -#define MASK_CUSTOM3_RS1 0x707f -#define MATCH_CUSTOM3_RS1_RS2 0x307b -#define MASK_CUSTOM3_RS1_RS2 0x707f -#define MATCH_CUSTOM3_RD 0x407b -#define MASK_CUSTOM3_RD 0x707f -#define MATCH_CUSTOM3_RD_RS1 0x607b -#define MASK_CUSTOM3_RD_RS1 0x707f -#define MATCH_CUSTOM3_RD_RS1_RS2 0x707b -#define MASK_CUSTOM3_RD_RS1_RS2 0x707f -#define CSR_FFLAGS 0x1 -#define CSR_FRM 0x2 -#define CSR_FCSR 0x3 -#define CSR_CYCLE 0xc00 -#define CSR_TIME 0xc01 -#define CSR_INSTRET 0xc02 -#define CSR_HPMCOUNTER3 0xc03 -#define CSR_HPMCOUNTER4 0xc04 -#define CSR_HPMCOUNTER5 0xc05 -#define CSR_HPMCOUNTER6 0xc06 -#define CSR_HPMCOUNTER7 0xc07 -#define CSR_HPMCOUNTER8 0xc08 -#define CSR_HPMCOUNTER9 0xc09 -#define CSR_HPMCOUNTER10 0xc0a -#define CSR_HPMCOUNTER11 0xc0b -#define CSR_HPMCOUNTER12 0xc0c -#define CSR_HPMCOUNTER13 0xc0d -#define CSR_HPMCOUNTER14 0xc0e -#define CSR_HPMCOUNTER15 0xc0f -#define CSR_HPMCOUNTER16 0xc10 -#define CSR_HPMCOUNTER17 0xc11 -#define CSR_HPMCOUNTER18 0xc12 -#define CSR_HPMCOUNTER19 0xc13 -#define CSR_HPMCOUNTER20 0xc14 -#define CSR_HPMCOUNTER21 0xc15 -#define CSR_HPMCOUNTER22 0xc16 -#define CSR_HPMCOUNTER23 0xc17 -#define CSR_HPMCOUNTER24 0xc18 -#define CSR_HPMCOUNTER25 0xc19 -#define CSR_HPMCOUNTER26 0xc1a -#define CSR_HPMCOUNTER27 0xc1b -#define CSR_HPMCOUNTER28 0xc1c -#define CSR_HPMCOUNTER29 0xc1d -#define CSR_HPMCOUNTER30 0xc1e -#define CSR_HPMCOUNTER31 0xc1f -#define CSR_SSTATUS 0x100 -#define CSR_SIE 0x104 -#define CSR_STVEC 0x105 -#define CSR_SCOUNTEREN 0x106 -#define CSR_SSCRATCH 0x140 -#define CSR_SEPC 0x141 -#define CSR_SCAUSE 0x142 -#define CSR_STVAL 0x143 -#define CSR_SIP 0x144 -#define CSR_SATP 0x180 -#define CSR_MSTATUS 0x300 -#define CSR_MISA 0x301 -#define CSR_MEDELEG 0x302 -#define CSR_MIDELEG 0x303 -#define CSR_MIE 0x304 -#define CSR_MTVEC 0x305 -#define CSR_MCOUNTEREN 0x306 -#define CSR_MSCRATCH 0x340 -#define CSR_MEPC 0x341 -#define CSR_MCAUSE 0x342 -#define CSR_MTVAL 0x343 -#define CSR_MIP 0x344 -#define CSR_PMPCFG0 0x3a0 -#define CSR_PMPCFG1 0x3a1 -#define CSR_PMPCFG2 0x3a2 -#define CSR_PMPCFG3 0x3a3 -#define CSR_PMPADDR0 0x3b0 -#define CSR_PMPADDR1 0x3b1 -#define CSR_PMPADDR2 0x3b2 -#define CSR_PMPADDR3 0x3b3 -#define CSR_PMPADDR4 0x3b4 -#define CSR_PMPADDR5 0x3b5 -#define CSR_PMPADDR6 0x3b6 -#define CSR_PMPADDR7 0x3b7 -#define CSR_PMPADDR8 0x3b8 -#define CSR_PMPADDR9 0x3b9 -#define CSR_PMPADDR10 0x3ba -#define CSR_PMPADDR11 0x3bb -#define CSR_PMPADDR12 0x3bc -#define CSR_PMPADDR13 0x3bd -#define CSR_PMPADDR14 0x3be -#define CSR_PMPADDR15 0x3bf -#define CSR_TSELECT 0x7a0 -#define CSR_TDATA1 0x7a1 -#define CSR_TDATA2 0x7a2 -#define CSR_TDATA3 0x7a3 -#define CSR_DCSR 0x7b0 -#define CSR_DPC 0x7b1 -#define CSR_DSCRATCH 0x7b2 -#define CSR_MCYCLE 0xb00 -#define CSR_MINSTRET 0xb02 -#define CSR_MHPMCOUNTER3 0xb03 -#define CSR_MHPMCOUNTER4 0xb04 -#define CSR_MHPMCOUNTER5 0xb05 -#define CSR_MHPMCOUNTER6 0xb06 -#define CSR_MHPMCOUNTER7 0xb07 -#define CSR_MHPMCOUNTER8 0xb08 -#define CSR_MHPMCOUNTER9 0xb09 -#define CSR_MHPMCOUNTER10 0xb0a -#define CSR_MHPMCOUNTER11 0xb0b -#define CSR_MHPMCOUNTER12 0xb0c -#define CSR_MHPMCOUNTER13 0xb0d -#define CSR_MHPMCOUNTER14 0xb0e -#define CSR_MHPMCOUNTER15 0xb0f -#define CSR_MHPMCOUNTER16 0xb10 -#define CSR_MHPMCOUNTER17 0xb11 -#define CSR_MHPMCOUNTER18 0xb12 -#define CSR_MHPMCOUNTER19 0xb13 -#define CSR_MHPMCOUNTER20 0xb14 -#define CSR_MHPMCOUNTER21 0xb15 -#define CSR_MHPMCOUNTER22 0xb16 -#define CSR_MHPMCOUNTER23 0xb17 -#define CSR_MHPMCOUNTER24 0xb18 -#define CSR_MHPMCOUNTER25 0xb19 -#define CSR_MHPMCOUNTER26 0xb1a -#define CSR_MHPMCOUNTER27 0xb1b -#define CSR_MHPMCOUNTER28 0xb1c -#define CSR_MHPMCOUNTER29 0xb1d -#define CSR_MHPMCOUNTER30 0xb1e -#define CSR_MHPMCOUNTER31 0xb1f -#define CSR_MHPMEVENT3 0x323 -#define CSR_MHPMEVENT4 0x324 -#define CSR_MHPMEVENT5 0x325 -#define CSR_MHPMEVENT6 0x326 -#define CSR_MHPMEVENT7 0x327 -#define CSR_MHPMEVENT8 0x328 -#define CSR_MHPMEVENT9 0x329 -#define CSR_MHPMEVENT10 0x32a -#define CSR_MHPMEVENT11 0x32b -#define CSR_MHPMEVENT12 0x32c -#define CSR_MHPMEVENT13 0x32d -#define CSR_MHPMEVENT14 0x32e -#define CSR_MHPMEVENT15 0x32f -#define CSR_MHPMEVENT16 0x330 -#define CSR_MHPMEVENT17 0x331 -#define CSR_MHPMEVENT18 0x332 -#define CSR_MHPMEVENT19 0x333 -#define CSR_MHPMEVENT20 0x334 -#define CSR_MHPMEVENT21 0x335 -#define CSR_MHPMEVENT22 0x336 -#define CSR_MHPMEVENT23 0x337 -#define CSR_MHPMEVENT24 0x338 -#define CSR_MHPMEVENT25 0x339 -#define CSR_MHPMEVENT26 0x33a -#define CSR_MHPMEVENT27 0x33b -#define CSR_MHPMEVENT28 0x33c -#define CSR_MHPMEVENT29 0x33d -#define CSR_MHPMEVENT30 0x33e -#define CSR_MHPMEVENT31 0x33f -#define CSR_MVENDORID 0xf11 -#define CSR_MARCHID 0xf12 -#define CSR_MIMPID 0xf13 -#define CSR_MHARTID 0xf14 -#define CSR_CYCLEH 0xc80 -#define CSR_TIMEH 0xc81 -#define CSR_INSTRETH 0xc82 -#define CSR_HPMCOUNTER3H 0xc83 -#define CSR_HPMCOUNTER4H 0xc84 -#define CSR_HPMCOUNTER5H 0xc85 -#define CSR_HPMCOUNTER6H 0xc86 -#define CSR_HPMCOUNTER7H 0xc87 -#define CSR_HPMCOUNTER8H 0xc88 -#define CSR_HPMCOUNTER9H 0xc89 -#define CSR_HPMCOUNTER10H 0xc8a -#define CSR_HPMCOUNTER11H 0xc8b -#define CSR_HPMCOUNTER12H 0xc8c -#define CSR_HPMCOUNTER13H 0xc8d -#define CSR_HPMCOUNTER14H 0xc8e -#define CSR_HPMCOUNTER15H 0xc8f -#define CSR_HPMCOUNTER16H 0xc90 -#define CSR_HPMCOUNTER17H 0xc91 -#define CSR_HPMCOUNTER18H 0xc92 -#define CSR_HPMCOUNTER19H 0xc93 -#define CSR_HPMCOUNTER20H 0xc94 -#define CSR_HPMCOUNTER21H 0xc95 -#define CSR_HPMCOUNTER22H 0xc96 -#define CSR_HPMCOUNTER23H 0xc97 -#define CSR_HPMCOUNTER24H 0xc98 -#define CSR_HPMCOUNTER25H 0xc99 -#define CSR_HPMCOUNTER26H 0xc9a -#define CSR_HPMCOUNTER27H 0xc9b -#define CSR_HPMCOUNTER28H 0xc9c -#define CSR_HPMCOUNTER29H 0xc9d -#define CSR_HPMCOUNTER30H 0xc9e -#define CSR_HPMCOUNTER31H 0xc9f -#define CSR_MCYCLEH 0xb80 -#define CSR_MINSTRETH 0xb82 -#define CSR_MHPMCOUNTER3H 0xb83 -#define CSR_MHPMCOUNTER4H 0xb84 -#define CSR_MHPMCOUNTER5H 0xb85 -#define CSR_MHPMCOUNTER6H 0xb86 -#define CSR_MHPMCOUNTER7H 0xb87 -#define CSR_MHPMCOUNTER8H 0xb88 -#define CSR_MHPMCOUNTER9H 0xb89 -#define CSR_MHPMCOUNTER10H 0xb8a -#define CSR_MHPMCOUNTER11H 0xb8b -#define CSR_MHPMCOUNTER12H 0xb8c -#define CSR_MHPMCOUNTER13H 0xb8d -#define CSR_MHPMCOUNTER14H 0xb8e -#define CSR_MHPMCOUNTER15H 0xb8f -#define CSR_MHPMCOUNTER16H 0xb90 -#define CSR_MHPMCOUNTER17H 0xb91 -#define CSR_MHPMCOUNTER18H 0xb92 -#define CSR_MHPMCOUNTER19H 0xb93 -#define CSR_MHPMCOUNTER20H 0xb94 -#define CSR_MHPMCOUNTER21H 0xb95 -#define CSR_MHPMCOUNTER22H 0xb96 -#define CSR_MHPMCOUNTER23H 0xb97 -#define CSR_MHPMCOUNTER24H 0xb98 -#define CSR_MHPMCOUNTER25H 0xb99 -#define CSR_MHPMCOUNTER26H 0xb9a -#define CSR_MHPMCOUNTER27H 0xb9b -#define CSR_MHPMCOUNTER28H 0xb9c -#define CSR_MHPMCOUNTER29H 0xb9d -#define CSR_MHPMCOUNTER30H 0xb9e -#define CSR_MHPMCOUNTER31H 0xb9f -#define CAUSE_MISALIGNED_FETCH 0x0 -#define CAUSE_FETCH_ACCESS 0x1 -#define CAUSE_ILLEGAL_INSTRUCTION 0x2 -#define CAUSE_BREAKPOINT 0x3 -#define CAUSE_MISALIGNED_LOAD 0x4 -#define CAUSE_LOAD_ACCESS 0x5 -#define CAUSE_MISALIGNED_STORE 0x6 -#define CAUSE_STORE_ACCESS 0x7 -#define CAUSE_USER_ECALL 0x8 -#define CAUSE_SUPERVISOR_ECALL 0x9 -#define CAUSE_HYPERVISOR_ECALL 0xa -#define CAUSE_MACHINE_ECALL 0xb -#define CAUSE_FETCH_PAGE_FAULT 0xc -#define CAUSE_LOAD_PAGE_FAULT 0xd -#define CAUSE_STORE_PAGE_FAULT 0xf -#endif -#ifdef DECLARE_INSN -DECLARE_INSN(beq, MATCH_BEQ, MASK_BEQ) -DECLARE_INSN(bne, MATCH_BNE, MASK_BNE) -DECLARE_INSN(blt, MATCH_BLT, MASK_BLT) -DECLARE_INSN(bge, MATCH_BGE, MASK_BGE) -DECLARE_INSN(bltu, MATCH_BLTU, MASK_BLTU) -DECLARE_INSN(bgeu, MATCH_BGEU, MASK_BGEU) -DECLARE_INSN(jalr, MATCH_JALR, MASK_JALR) -DECLARE_INSN(jal, MATCH_JAL, MASK_JAL) -DECLARE_INSN(lui, MATCH_LUI, MASK_LUI) -DECLARE_INSN(auipc, MATCH_AUIPC, MASK_AUIPC) -DECLARE_INSN(addi, MATCH_ADDI, MASK_ADDI) -DECLARE_INSN(slli, MATCH_SLLI, MASK_SLLI) -DECLARE_INSN(slti, MATCH_SLTI, MASK_SLTI) -DECLARE_INSN(sltiu, MATCH_SLTIU, MASK_SLTIU) -DECLARE_INSN(xori, MATCH_XORI, MASK_XORI) -DECLARE_INSN(srli, MATCH_SRLI, MASK_SRLI) -DECLARE_INSN(srai, MATCH_SRAI, MASK_SRAI) -DECLARE_INSN(ori, MATCH_ORI, MASK_ORI) -DECLARE_INSN(andi, MATCH_ANDI, MASK_ANDI) -DECLARE_INSN(add, MATCH_ADD, MASK_ADD) -DECLARE_INSN(sub, MATCH_SUB, MASK_SUB) -DECLARE_INSN(sll, MATCH_SLL, MASK_SLL) -DECLARE_INSN(slt, MATCH_SLT, MASK_SLT) -DECLARE_INSN(sltu, MATCH_SLTU, MASK_SLTU) -DECLARE_INSN(xor, MATCH_XOR, MASK_XOR) -DECLARE_INSN(srl, MATCH_SRL, MASK_SRL) -DECLARE_INSN(sra, MATCH_SRA, MASK_SRA) -DECLARE_INSN(or, MATCH_OR, MASK_OR) -DECLARE_INSN(and, MATCH_AND, MASK_AND) -DECLARE_INSN(addiw, MATCH_ADDIW, MASK_ADDIW) -DECLARE_INSN(slliw, MATCH_SLLIW, MASK_SLLIW) -DECLARE_INSN(srliw, MATCH_SRLIW, MASK_SRLIW) -DECLARE_INSN(sraiw, MATCH_SRAIW, MASK_SRAIW) -DECLARE_INSN(addw, MATCH_ADDW, MASK_ADDW) -DECLARE_INSN(subw, MATCH_SUBW, MASK_SUBW) -DECLARE_INSN(sllw, MATCH_SLLW, MASK_SLLW) -DECLARE_INSN(srlw, MATCH_SRLW, MASK_SRLW) -DECLARE_INSN(sraw, MATCH_SRAW, MASK_SRAW) -DECLARE_INSN(lb, MATCH_LB, MASK_LB) -DECLARE_INSN(lh, MATCH_LH, MASK_LH) -DECLARE_INSN(lw, MATCH_LW, MASK_LW) -DECLARE_INSN(ld, MATCH_LD, MASK_LD) -DECLARE_INSN(lbu, MATCH_LBU, MASK_LBU) -DECLARE_INSN(lhu, MATCH_LHU, MASK_LHU) -DECLARE_INSN(lwu, MATCH_LWU, MASK_LWU) -DECLARE_INSN(sb, MATCH_SB, MASK_SB) -DECLARE_INSN(sh, MATCH_SH, MASK_SH) -DECLARE_INSN(sw, MATCH_SW, MASK_SW) -DECLARE_INSN(sd, MATCH_SD, MASK_SD) -DECLARE_INSN(fence, MATCH_FENCE, MASK_FENCE) -DECLARE_INSN(fence_i, MATCH_FENCE_I, MASK_FENCE_I) -DECLARE_INSN(mul, MATCH_MUL, MASK_MUL) -DECLARE_INSN(mulh, MATCH_MULH, MASK_MULH) -DECLARE_INSN(mulhsu, MATCH_MULHSU, MASK_MULHSU) -DECLARE_INSN(mulhu, MATCH_MULHU, MASK_MULHU) -DECLARE_INSN(div, MATCH_DIV, MASK_DIV) -DECLARE_INSN(divu, MATCH_DIVU, MASK_DIVU) -DECLARE_INSN(rem, MATCH_REM, MASK_REM) -DECLARE_INSN(remu, MATCH_REMU, MASK_REMU) -DECLARE_INSN(mulw, MATCH_MULW, MASK_MULW) -DECLARE_INSN(divw, MATCH_DIVW, MASK_DIVW) -DECLARE_INSN(divuw, MATCH_DIVUW, MASK_DIVUW) -DECLARE_INSN(remw, MATCH_REMW, MASK_REMW) -DECLARE_INSN(remuw, MATCH_REMUW, MASK_REMUW) -DECLARE_INSN(amoadd_w, MATCH_AMOADD_W, MASK_AMOADD_W) -DECLARE_INSN(amoxor_w, MATCH_AMOXOR_W, MASK_AMOXOR_W) -DECLARE_INSN(amoor_w, MATCH_AMOOR_W, MASK_AMOOR_W) -DECLARE_INSN(amoand_w, MATCH_AMOAND_W, MASK_AMOAND_W) -DECLARE_INSN(amomin_w, MATCH_AMOMIN_W, MASK_AMOMIN_W) -DECLARE_INSN(amomax_w, MATCH_AMOMAX_W, MASK_AMOMAX_W) -DECLARE_INSN(amominu_w, MATCH_AMOMINU_W, MASK_AMOMINU_W) -DECLARE_INSN(amomaxu_w, MATCH_AMOMAXU_W, MASK_AMOMAXU_W) -DECLARE_INSN(amoswap_w, MATCH_AMOSWAP_W, MASK_AMOSWAP_W) -DECLARE_INSN(lr_w, MATCH_LR_W, MASK_LR_W) -DECLARE_INSN(sc_w, MATCH_SC_W, MASK_SC_W) -DECLARE_INSN(amoadd_d, MATCH_AMOADD_D, MASK_AMOADD_D) -DECLARE_INSN(amoxor_d, MATCH_AMOXOR_D, MASK_AMOXOR_D) -DECLARE_INSN(amoor_d, MATCH_AMOOR_D, MASK_AMOOR_D) -DECLARE_INSN(amoand_d, MATCH_AMOAND_D, MASK_AMOAND_D) -DECLARE_INSN(amomin_d, MATCH_AMOMIN_D, MASK_AMOMIN_D) -DECLARE_INSN(amomax_d, MATCH_AMOMAX_D, MASK_AMOMAX_D) -DECLARE_INSN(amominu_d, MATCH_AMOMINU_D, MASK_AMOMINU_D) -DECLARE_INSN(amomaxu_d, MATCH_AMOMAXU_D, MASK_AMOMAXU_D) -DECLARE_INSN(amoswap_d, MATCH_AMOSWAP_D, MASK_AMOSWAP_D) -DECLARE_INSN(lr_d, MATCH_LR_D, MASK_LR_D) -DECLARE_INSN(sc_d, MATCH_SC_D, MASK_SC_D) -DECLARE_INSN(ecall, MATCH_ECALL, MASK_ECALL) -DECLARE_INSN(ebreak, MATCH_EBREAK, MASK_EBREAK) -DECLARE_INSN(uret, MATCH_URET, MASK_URET) -DECLARE_INSN(sret, MATCH_SRET, MASK_SRET) -DECLARE_INSN(mret, MATCH_MRET, MASK_MRET) -DECLARE_INSN(dret, MATCH_DRET, MASK_DRET) -DECLARE_INSN(sfence_vma, MATCH_SFENCE_VMA, MASK_SFENCE_VMA) -DECLARE_INSN(wfi, MATCH_WFI, MASK_WFI) -DECLARE_INSN(csrrw, MATCH_CSRRW, MASK_CSRRW) -DECLARE_INSN(csrrs, MATCH_CSRRS, MASK_CSRRS) -DECLARE_INSN(csrrc, MATCH_CSRRC, MASK_CSRRC) -DECLARE_INSN(csrrwi, MATCH_CSRRWI, MASK_CSRRWI) -DECLARE_INSN(csrrsi, MATCH_CSRRSI, MASK_CSRRSI) -DECLARE_INSN(csrrci, MATCH_CSRRCI, MASK_CSRRCI) -DECLARE_INSN(fadd_s, MATCH_FADD_S, MASK_FADD_S) -DECLARE_INSN(fsub_s, MATCH_FSUB_S, MASK_FSUB_S) -DECLARE_INSN(fmul_s, MATCH_FMUL_S, MASK_FMUL_S) -DECLARE_INSN(fdiv_s, MATCH_FDIV_S, MASK_FDIV_S) -DECLARE_INSN(fsgnj_s, MATCH_FSGNJ_S, MASK_FSGNJ_S) -DECLARE_INSN(fsgnjn_s, MATCH_FSGNJN_S, MASK_FSGNJN_S) -DECLARE_INSN(fsgnjx_s, MATCH_FSGNJX_S, MASK_FSGNJX_S) -DECLARE_INSN(fmin_s, MATCH_FMIN_S, MASK_FMIN_S) -DECLARE_INSN(fmax_s, MATCH_FMAX_S, MASK_FMAX_S) -DECLARE_INSN(fsqrt_s, MATCH_FSQRT_S, MASK_FSQRT_S) -DECLARE_INSN(fadd_d, MATCH_FADD_D, MASK_FADD_D) -DECLARE_INSN(fsub_d, MATCH_FSUB_D, MASK_FSUB_D) -DECLARE_INSN(fmul_d, MATCH_FMUL_D, MASK_FMUL_D) -DECLARE_INSN(fdiv_d, MATCH_FDIV_D, MASK_FDIV_D) -DECLARE_INSN(fsgnj_d, MATCH_FSGNJ_D, MASK_FSGNJ_D) -DECLARE_INSN(fsgnjn_d, MATCH_FSGNJN_D, MASK_FSGNJN_D) -DECLARE_INSN(fsgnjx_d, MATCH_FSGNJX_D, MASK_FSGNJX_D) -DECLARE_INSN(fmin_d, MATCH_FMIN_D, MASK_FMIN_D) -DECLARE_INSN(fmax_d, MATCH_FMAX_D, MASK_FMAX_D) -DECLARE_INSN(fcvt_s_d, MATCH_FCVT_S_D, MASK_FCVT_S_D) -DECLARE_INSN(fcvt_d_s, MATCH_FCVT_D_S, MASK_FCVT_D_S) -DECLARE_INSN(fsqrt_d, MATCH_FSQRT_D, MASK_FSQRT_D) -DECLARE_INSN(fadd_q, MATCH_FADD_Q, MASK_FADD_Q) -DECLARE_INSN(fsub_q, MATCH_FSUB_Q, MASK_FSUB_Q) -DECLARE_INSN(fmul_q, MATCH_FMUL_Q, MASK_FMUL_Q) -DECLARE_INSN(fdiv_q, MATCH_FDIV_Q, MASK_FDIV_Q) -DECLARE_INSN(fsgnj_q, MATCH_FSGNJ_Q, MASK_FSGNJ_Q) -DECLARE_INSN(fsgnjn_q, MATCH_FSGNJN_Q, MASK_FSGNJN_Q) -DECLARE_INSN(fsgnjx_q, MATCH_FSGNJX_Q, MASK_FSGNJX_Q) -DECLARE_INSN(fmin_q, MATCH_FMIN_Q, MASK_FMIN_Q) -DECLARE_INSN(fmax_q, MATCH_FMAX_Q, MASK_FMAX_Q) -DECLARE_INSN(fcvt_s_q, MATCH_FCVT_S_Q, MASK_FCVT_S_Q) -DECLARE_INSN(fcvt_q_s, MATCH_FCVT_Q_S, MASK_FCVT_Q_S) -DECLARE_INSN(fcvt_d_q, MATCH_FCVT_D_Q, MASK_FCVT_D_Q) -DECLARE_INSN(fcvt_q_d, MATCH_FCVT_Q_D, MASK_FCVT_Q_D) -DECLARE_INSN(fsqrt_q, MATCH_FSQRT_Q, MASK_FSQRT_Q) -DECLARE_INSN(fle_s, MATCH_FLE_S, MASK_FLE_S) -DECLARE_INSN(flt_s, MATCH_FLT_S, MASK_FLT_S) -DECLARE_INSN(feq_s, MATCH_FEQ_S, MASK_FEQ_S) -DECLARE_INSN(fle_d, MATCH_FLE_D, MASK_FLE_D) -DECLARE_INSN(flt_d, MATCH_FLT_D, MASK_FLT_D) -DECLARE_INSN(feq_d, MATCH_FEQ_D, MASK_FEQ_D) -DECLARE_INSN(fle_q, MATCH_FLE_Q, MASK_FLE_Q) -DECLARE_INSN(flt_q, MATCH_FLT_Q, MASK_FLT_Q) -DECLARE_INSN(feq_q, MATCH_FEQ_Q, MASK_FEQ_Q) -DECLARE_INSN(fcvt_w_s, MATCH_FCVT_W_S, MASK_FCVT_W_S) -DECLARE_INSN(fcvt_wu_s, MATCH_FCVT_WU_S, MASK_FCVT_WU_S) -DECLARE_INSN(fcvt_l_s, MATCH_FCVT_L_S, MASK_FCVT_L_S) -DECLARE_INSN(fcvt_lu_s, MATCH_FCVT_LU_S, MASK_FCVT_LU_S) -DECLARE_INSN(fmv_x_w, MATCH_FMV_X_W, MASK_FMV_X_W) -DECLARE_INSN(fclass_s, MATCH_FCLASS_S, MASK_FCLASS_S) -DECLARE_INSN(fcvt_w_d, MATCH_FCVT_W_D, MASK_FCVT_W_D) -DECLARE_INSN(fcvt_wu_d, MATCH_FCVT_WU_D, MASK_FCVT_WU_D) -DECLARE_INSN(fcvt_l_d, MATCH_FCVT_L_D, MASK_FCVT_L_D) -DECLARE_INSN(fcvt_lu_d, MATCH_FCVT_LU_D, MASK_FCVT_LU_D) -DECLARE_INSN(fmv_x_d, MATCH_FMV_X_D, MASK_FMV_X_D) -DECLARE_INSN(fclass_d, MATCH_FCLASS_D, MASK_FCLASS_D) -DECLARE_INSN(fcvt_w_q, MATCH_FCVT_W_Q, MASK_FCVT_W_Q) -DECLARE_INSN(fcvt_wu_q, MATCH_FCVT_WU_Q, MASK_FCVT_WU_Q) -DECLARE_INSN(fcvt_l_q, MATCH_FCVT_L_Q, MASK_FCVT_L_Q) -DECLARE_INSN(fcvt_lu_q, MATCH_FCVT_LU_Q, MASK_FCVT_LU_Q) -DECLARE_INSN(fmv_x_q, MATCH_FMV_X_Q, MASK_FMV_X_Q) -DECLARE_INSN(fclass_q, MATCH_FCLASS_Q, MASK_FCLASS_Q) -DECLARE_INSN(fcvt_s_w, MATCH_FCVT_S_W, MASK_FCVT_S_W) -DECLARE_INSN(fcvt_s_wu, MATCH_FCVT_S_WU, MASK_FCVT_S_WU) -DECLARE_INSN(fcvt_s_l, MATCH_FCVT_S_L, MASK_FCVT_S_L) -DECLARE_INSN(fcvt_s_lu, MATCH_FCVT_S_LU, MASK_FCVT_S_LU) -DECLARE_INSN(fmv_w_x, MATCH_FMV_W_X, MASK_FMV_W_X) -DECLARE_INSN(fcvt_d_w, MATCH_FCVT_D_W, MASK_FCVT_D_W) -DECLARE_INSN(fcvt_d_wu, MATCH_FCVT_D_WU, MASK_FCVT_D_WU) -DECLARE_INSN(fcvt_d_l, MATCH_FCVT_D_L, MASK_FCVT_D_L) -DECLARE_INSN(fcvt_d_lu, MATCH_FCVT_D_LU, MASK_FCVT_D_LU) -DECLARE_INSN(fmv_d_x, MATCH_FMV_D_X, MASK_FMV_D_X) -DECLARE_INSN(fcvt_q_w, MATCH_FCVT_Q_W, MASK_FCVT_Q_W) -DECLARE_INSN(fcvt_q_wu, MATCH_FCVT_Q_WU, MASK_FCVT_Q_WU) -DECLARE_INSN(fcvt_q_l, MATCH_FCVT_Q_L, MASK_FCVT_Q_L) -DECLARE_INSN(fcvt_q_lu, MATCH_FCVT_Q_LU, MASK_FCVT_Q_LU) -DECLARE_INSN(fmv_q_x, MATCH_FMV_Q_X, MASK_FMV_Q_X) -DECLARE_INSN(flw, MATCH_FLW, MASK_FLW) -DECLARE_INSN(fld, MATCH_FLD, MASK_FLD) -DECLARE_INSN(flq, MATCH_FLQ, MASK_FLQ) -DECLARE_INSN(fsw, MATCH_FSW, MASK_FSW) -DECLARE_INSN(fsd, MATCH_FSD, MASK_FSD) -DECLARE_INSN(fsq, MATCH_FSQ, MASK_FSQ) -DECLARE_INSN(fmadd_s, MATCH_FMADD_S, MASK_FMADD_S) -DECLARE_INSN(fmsub_s, MATCH_FMSUB_S, MASK_FMSUB_S) -DECLARE_INSN(fnmsub_s, MATCH_FNMSUB_S, MASK_FNMSUB_S) -DECLARE_INSN(fnmadd_s, MATCH_FNMADD_S, MASK_FNMADD_S) -DECLARE_INSN(fmadd_d, MATCH_FMADD_D, MASK_FMADD_D) -DECLARE_INSN(fmsub_d, MATCH_FMSUB_D, MASK_FMSUB_D) -DECLARE_INSN(fnmsub_d, MATCH_FNMSUB_D, MASK_FNMSUB_D) -DECLARE_INSN(fnmadd_d, MATCH_FNMADD_D, MASK_FNMADD_D) -DECLARE_INSN(fmadd_q, MATCH_FMADD_Q, MASK_FMADD_Q) -DECLARE_INSN(fmsub_q, MATCH_FMSUB_Q, MASK_FMSUB_Q) -DECLARE_INSN(fnmsub_q, MATCH_FNMSUB_Q, MASK_FNMSUB_Q) -DECLARE_INSN(fnmadd_q, MATCH_FNMADD_Q, MASK_FNMADD_Q) -DECLARE_INSN(c_nop, MATCH_C_NOP, MASK_C_NOP) -DECLARE_INSN(c_addi16sp, MATCH_C_ADDI16SP, MASK_C_ADDI16SP) -DECLARE_INSN(c_jr, MATCH_C_JR, MASK_C_JR) -DECLARE_INSN(c_jalr, MATCH_C_JALR, MASK_C_JALR) -DECLARE_INSN(c_ebreak, MATCH_C_EBREAK, MASK_C_EBREAK) -DECLARE_INSN(c_ld, MATCH_C_LD, MASK_C_LD) -DECLARE_INSN(c_sd, MATCH_C_SD, MASK_C_SD) -DECLARE_INSN(c_addiw, MATCH_C_ADDIW, MASK_C_ADDIW) -DECLARE_INSN(c_ldsp, MATCH_C_LDSP, MASK_C_LDSP) -DECLARE_INSN(c_sdsp, MATCH_C_SDSP, MASK_C_SDSP) -DECLARE_INSN(c_addi4spn, MATCH_C_ADDI4SPN, MASK_C_ADDI4SPN) -DECLARE_INSN(c_fld, MATCH_C_FLD, MASK_C_FLD) -DECLARE_INSN(c_lw, MATCH_C_LW, MASK_C_LW) -DECLARE_INSN(c_flw, MATCH_C_FLW, MASK_C_FLW) -DECLARE_INSN(c_fsd, MATCH_C_FSD, MASK_C_FSD) -DECLARE_INSN(c_sw, MATCH_C_SW, MASK_C_SW) -DECLARE_INSN(c_fsw, MATCH_C_FSW, MASK_C_FSW) -DECLARE_INSN(c_addi, MATCH_C_ADDI, MASK_C_ADDI) -DECLARE_INSN(c_jal, MATCH_C_JAL, MASK_C_JAL) -DECLARE_INSN(c_li, MATCH_C_LI, MASK_C_LI) -DECLARE_INSN(c_lui, MATCH_C_LUI, MASK_C_LUI) -DECLARE_INSN(c_srli, MATCH_C_SRLI, MASK_C_SRLI) -DECLARE_INSN(c_srai, MATCH_C_SRAI, MASK_C_SRAI) -DECLARE_INSN(c_andi, MATCH_C_ANDI, MASK_C_ANDI) -DECLARE_INSN(c_sub, MATCH_C_SUB, MASK_C_SUB) -DECLARE_INSN(c_xor, MATCH_C_XOR, MASK_C_XOR) -DECLARE_INSN(c_or, MATCH_C_OR, MASK_C_OR) -DECLARE_INSN(c_and, MATCH_C_AND, MASK_C_AND) -DECLARE_INSN(c_subw, MATCH_C_SUBW, MASK_C_SUBW) -DECLARE_INSN(c_addw, MATCH_C_ADDW, MASK_C_ADDW) -DECLARE_INSN(c_j, MATCH_C_J, MASK_C_J) -DECLARE_INSN(c_beqz, MATCH_C_BEQZ, MASK_C_BEQZ) -DECLARE_INSN(c_bnez, MATCH_C_BNEZ, MASK_C_BNEZ) -DECLARE_INSN(c_slli, MATCH_C_SLLI, MASK_C_SLLI) -DECLARE_INSN(c_fldsp, MATCH_C_FLDSP, MASK_C_FLDSP) -DECLARE_INSN(c_lwsp, MATCH_C_LWSP, MASK_C_LWSP) -DECLARE_INSN(c_flwsp, MATCH_C_FLWSP, MASK_C_FLWSP) -DECLARE_INSN(c_mv, MATCH_C_MV, MASK_C_MV) -DECLARE_INSN(c_add, MATCH_C_ADD, MASK_C_ADD) -DECLARE_INSN(c_fsdsp, MATCH_C_FSDSP, MASK_C_FSDSP) -DECLARE_INSN(c_swsp, MATCH_C_SWSP, MASK_C_SWSP) -DECLARE_INSN(c_fswsp, MATCH_C_FSWSP, MASK_C_FSWSP) -DECLARE_INSN(custom0, MATCH_CUSTOM0, MASK_CUSTOM0) -DECLARE_INSN(custom0_rs1, MATCH_CUSTOM0_RS1, MASK_CUSTOM0_RS1) -DECLARE_INSN(custom0_rs1_rs2, MATCH_CUSTOM0_RS1_RS2, MASK_CUSTOM0_RS1_RS2) -DECLARE_INSN(custom0_rd, MATCH_CUSTOM0_RD, MASK_CUSTOM0_RD) -DECLARE_INSN(custom0_rd_rs1, MATCH_CUSTOM0_RD_RS1, MASK_CUSTOM0_RD_RS1) -DECLARE_INSN(custom0_rd_rs1_rs2, MATCH_CUSTOM0_RD_RS1_RS2, MASK_CUSTOM0_RD_RS1_RS2) -DECLARE_INSN(custom1, MATCH_CUSTOM1, MASK_CUSTOM1) -DECLARE_INSN(custom1_rs1, MATCH_CUSTOM1_RS1, MASK_CUSTOM1_RS1) -DECLARE_INSN(custom1_rs1_rs2, MATCH_CUSTOM1_RS1_RS2, MASK_CUSTOM1_RS1_RS2) -DECLARE_INSN(custom1_rd, MATCH_CUSTOM1_RD, MASK_CUSTOM1_RD) -DECLARE_INSN(custom1_rd_rs1, MATCH_CUSTOM1_RD_RS1, MASK_CUSTOM1_RD_RS1) -DECLARE_INSN(custom1_rd_rs1_rs2, MATCH_CUSTOM1_RD_RS1_RS2, MASK_CUSTOM1_RD_RS1_RS2) -DECLARE_INSN(custom2, MATCH_CUSTOM2, MASK_CUSTOM2) -DECLARE_INSN(custom2_rs1, MATCH_CUSTOM2_RS1, MASK_CUSTOM2_RS1) -DECLARE_INSN(custom2_rs1_rs2, MATCH_CUSTOM2_RS1_RS2, MASK_CUSTOM2_RS1_RS2) -DECLARE_INSN(custom2_rd, MATCH_CUSTOM2_RD, MASK_CUSTOM2_RD) -DECLARE_INSN(custom2_rd_rs1, MATCH_CUSTOM2_RD_RS1, MASK_CUSTOM2_RD_RS1) -DECLARE_INSN(custom2_rd_rs1_rs2, MATCH_CUSTOM2_RD_RS1_RS2, MASK_CUSTOM2_RD_RS1_RS2) -DECLARE_INSN(custom3, MATCH_CUSTOM3, MASK_CUSTOM3) -DECLARE_INSN(custom3_rs1, MATCH_CUSTOM3_RS1, MASK_CUSTOM3_RS1) -DECLARE_INSN(custom3_rs1_rs2, MATCH_CUSTOM3_RS1_RS2, MASK_CUSTOM3_RS1_RS2) -DECLARE_INSN(custom3_rd, MATCH_CUSTOM3_RD, MASK_CUSTOM3_RD) -DECLARE_INSN(custom3_rd_rs1, MATCH_CUSTOM3_RD_RS1, MASK_CUSTOM3_RD_RS1) -DECLARE_INSN(custom3_rd_rs1_rs2, MATCH_CUSTOM3_RD_RS1_RS2, MASK_CUSTOM3_RD_RS1_RS2) -#endif -#ifdef DECLARE_CSR -DECLARE_CSR(fflags, CSR_FFLAGS) -DECLARE_CSR(frm, CSR_FRM) -DECLARE_CSR(fcsr, CSR_FCSR) -DECLARE_CSR(cycle, CSR_CYCLE) -DECLARE_CSR(time, CSR_TIME) -DECLARE_CSR(instret, CSR_INSTRET) -DECLARE_CSR(hpmcounter3, CSR_HPMCOUNTER3) -DECLARE_CSR(hpmcounter4, CSR_HPMCOUNTER4) -DECLARE_CSR(hpmcounter5, CSR_HPMCOUNTER5) -DECLARE_CSR(hpmcounter6, CSR_HPMCOUNTER6) -DECLARE_CSR(hpmcounter7, CSR_HPMCOUNTER7) -DECLARE_CSR(hpmcounter8, CSR_HPMCOUNTER8) -DECLARE_CSR(hpmcounter9, CSR_HPMCOUNTER9) -DECLARE_CSR(hpmcounter10, CSR_HPMCOUNTER10) -DECLARE_CSR(hpmcounter11, CSR_HPMCOUNTER11) -DECLARE_CSR(hpmcounter12, CSR_HPMCOUNTER12) -DECLARE_CSR(hpmcounter13, CSR_HPMCOUNTER13) -DECLARE_CSR(hpmcounter14, CSR_HPMCOUNTER14) -DECLARE_CSR(hpmcounter15, CSR_HPMCOUNTER15) -DECLARE_CSR(hpmcounter16, CSR_HPMCOUNTER16) -DECLARE_CSR(hpmcounter17, CSR_HPMCOUNTER17) -DECLARE_CSR(hpmcounter18, CSR_HPMCOUNTER18) -DECLARE_CSR(hpmcounter19, CSR_HPMCOUNTER19) -DECLARE_CSR(hpmcounter20, CSR_HPMCOUNTER20) -DECLARE_CSR(hpmcounter21, CSR_HPMCOUNTER21) -DECLARE_CSR(hpmcounter22, CSR_HPMCOUNTER22) -DECLARE_CSR(hpmcounter23, CSR_HPMCOUNTER23) -DECLARE_CSR(hpmcounter24, CSR_HPMCOUNTER24) -DECLARE_CSR(hpmcounter25, CSR_HPMCOUNTER25) -DECLARE_CSR(hpmcounter26, CSR_HPMCOUNTER26) -DECLARE_CSR(hpmcounter27, CSR_HPMCOUNTER27) -DECLARE_CSR(hpmcounter28, CSR_HPMCOUNTER28) -DECLARE_CSR(hpmcounter29, CSR_HPMCOUNTER29) -DECLARE_CSR(hpmcounter30, CSR_HPMCOUNTER30) -DECLARE_CSR(hpmcounter31, CSR_HPMCOUNTER31) -DECLARE_CSR(sstatus, CSR_SSTATUS) -DECLARE_CSR(sie, CSR_SIE) -DECLARE_CSR(stvec, CSR_STVEC) -DECLARE_CSR(scounteren, CSR_SCOUNTEREN) -DECLARE_CSR(sscratch, CSR_SSCRATCH) -DECLARE_CSR(sepc, CSR_SEPC) -DECLARE_CSR(scause, CSR_SCAUSE) -DECLARE_CSR(stval, CSR_STVAL) -DECLARE_CSR(sip, CSR_SIP) -DECLARE_CSR(satp, CSR_SATP) -DECLARE_CSR(mstatus, CSR_MSTATUS) -DECLARE_CSR(misa, CSR_MISA) -DECLARE_CSR(medeleg, CSR_MEDELEG) -DECLARE_CSR(mideleg, CSR_MIDELEG) -DECLARE_CSR(mie, CSR_MIE) -DECLARE_CSR(mtvec, CSR_MTVEC) -DECLARE_CSR(mcounteren, CSR_MCOUNTEREN) -DECLARE_CSR(mscratch, CSR_MSCRATCH) -DECLARE_CSR(mepc, CSR_MEPC) -DECLARE_CSR(mcause, CSR_MCAUSE) -DECLARE_CSR(mtval, CSR_MTVAL) -DECLARE_CSR(mip, CSR_MIP) -DECLARE_CSR(pmpcfg0, CSR_PMPCFG0) -DECLARE_CSR(pmpcfg1, CSR_PMPCFG1) -DECLARE_CSR(pmpcfg2, CSR_PMPCFG2) -DECLARE_CSR(pmpcfg3, CSR_PMPCFG3) -DECLARE_CSR(pmpaddr0, CSR_PMPADDR0) -DECLARE_CSR(pmpaddr1, CSR_PMPADDR1) -DECLARE_CSR(pmpaddr2, CSR_PMPADDR2) -DECLARE_CSR(pmpaddr3, CSR_PMPADDR3) -DECLARE_CSR(pmpaddr4, CSR_PMPADDR4) -DECLARE_CSR(pmpaddr5, CSR_PMPADDR5) -DECLARE_CSR(pmpaddr6, CSR_PMPADDR6) -DECLARE_CSR(pmpaddr7, CSR_PMPADDR7) -DECLARE_CSR(pmpaddr8, CSR_PMPADDR8) -DECLARE_CSR(pmpaddr9, CSR_PMPADDR9) -DECLARE_CSR(pmpaddr10, CSR_PMPADDR10) -DECLARE_CSR(pmpaddr11, CSR_PMPADDR11) -DECLARE_CSR(pmpaddr12, CSR_PMPADDR12) -DECLARE_CSR(pmpaddr13, CSR_PMPADDR13) -DECLARE_CSR(pmpaddr14, CSR_PMPADDR14) -DECLARE_CSR(pmpaddr15, CSR_PMPADDR15) -DECLARE_CSR(tselect, CSR_TSELECT) -DECLARE_CSR(tdata1, CSR_TDATA1) -DECLARE_CSR(tdata2, CSR_TDATA2) -DECLARE_CSR(tdata3, CSR_TDATA3) -DECLARE_CSR(dcsr, CSR_DCSR) -DECLARE_CSR(dpc, CSR_DPC) -DECLARE_CSR(dscratch, CSR_DSCRATCH) -DECLARE_CSR(mcycle, CSR_MCYCLE) -DECLARE_CSR(minstret, CSR_MINSTRET) -DECLARE_CSR(mhpmcounter3, CSR_MHPMCOUNTER3) -DECLARE_CSR(mhpmcounter4, CSR_MHPMCOUNTER4) -DECLARE_CSR(mhpmcounter5, CSR_MHPMCOUNTER5) -DECLARE_CSR(mhpmcounter6, CSR_MHPMCOUNTER6) -DECLARE_CSR(mhpmcounter7, CSR_MHPMCOUNTER7) -DECLARE_CSR(mhpmcounter8, CSR_MHPMCOUNTER8) -DECLARE_CSR(mhpmcounter9, CSR_MHPMCOUNTER9) -DECLARE_CSR(mhpmcounter10, CSR_MHPMCOUNTER10) -DECLARE_CSR(mhpmcounter11, CSR_MHPMCOUNTER11) -DECLARE_CSR(mhpmcounter12, CSR_MHPMCOUNTER12) -DECLARE_CSR(mhpmcounter13, CSR_MHPMCOUNTER13) -DECLARE_CSR(mhpmcounter14, CSR_MHPMCOUNTER14) -DECLARE_CSR(mhpmcounter15, CSR_MHPMCOUNTER15) -DECLARE_CSR(mhpmcounter16, CSR_MHPMCOUNTER16) -DECLARE_CSR(mhpmcounter17, CSR_MHPMCOUNTER17) -DECLARE_CSR(mhpmcounter18, CSR_MHPMCOUNTER18) -DECLARE_CSR(mhpmcounter19, CSR_MHPMCOUNTER19) -DECLARE_CSR(mhpmcounter20, CSR_MHPMCOUNTER20) -DECLARE_CSR(mhpmcounter21, CSR_MHPMCOUNTER21) -DECLARE_CSR(mhpmcounter22, CSR_MHPMCOUNTER22) -DECLARE_CSR(mhpmcounter23, CSR_MHPMCOUNTER23) -DECLARE_CSR(mhpmcounter24, CSR_MHPMCOUNTER24) -DECLARE_CSR(mhpmcounter25, CSR_MHPMCOUNTER25) -DECLARE_CSR(mhpmcounter26, CSR_MHPMCOUNTER26) -DECLARE_CSR(mhpmcounter27, CSR_MHPMCOUNTER27) -DECLARE_CSR(mhpmcounter28, CSR_MHPMCOUNTER28) -DECLARE_CSR(mhpmcounter29, CSR_MHPMCOUNTER29) -DECLARE_CSR(mhpmcounter30, CSR_MHPMCOUNTER30) -DECLARE_CSR(mhpmcounter31, CSR_MHPMCOUNTER31) -DECLARE_CSR(mhpmevent3, CSR_MHPMEVENT3) -DECLARE_CSR(mhpmevent4, CSR_MHPMEVENT4) -DECLARE_CSR(mhpmevent5, CSR_MHPMEVENT5) -DECLARE_CSR(mhpmevent6, CSR_MHPMEVENT6) -DECLARE_CSR(mhpmevent7, CSR_MHPMEVENT7) -DECLARE_CSR(mhpmevent8, CSR_MHPMEVENT8) -DECLARE_CSR(mhpmevent9, CSR_MHPMEVENT9) -DECLARE_CSR(mhpmevent10, CSR_MHPMEVENT10) -DECLARE_CSR(mhpmevent11, CSR_MHPMEVENT11) -DECLARE_CSR(mhpmevent12, CSR_MHPMEVENT12) -DECLARE_CSR(mhpmevent13, CSR_MHPMEVENT13) -DECLARE_CSR(mhpmevent14, CSR_MHPMEVENT14) -DECLARE_CSR(mhpmevent15, CSR_MHPMEVENT15) -DECLARE_CSR(mhpmevent16, CSR_MHPMEVENT16) -DECLARE_CSR(mhpmevent17, CSR_MHPMEVENT17) -DECLARE_CSR(mhpmevent18, CSR_MHPMEVENT18) -DECLARE_CSR(mhpmevent19, CSR_MHPMEVENT19) -DECLARE_CSR(mhpmevent20, CSR_MHPMEVENT20) -DECLARE_CSR(mhpmevent21, CSR_MHPMEVENT21) -DECLARE_CSR(mhpmevent22, CSR_MHPMEVENT22) -DECLARE_CSR(mhpmevent23, CSR_MHPMEVENT23) -DECLARE_CSR(mhpmevent24, CSR_MHPMEVENT24) -DECLARE_CSR(mhpmevent25, CSR_MHPMEVENT25) -DECLARE_CSR(mhpmevent26, CSR_MHPMEVENT26) -DECLARE_CSR(mhpmevent27, CSR_MHPMEVENT27) -DECLARE_CSR(mhpmevent28, CSR_MHPMEVENT28) -DECLARE_CSR(mhpmevent29, CSR_MHPMEVENT29) -DECLARE_CSR(mhpmevent30, CSR_MHPMEVENT30) -DECLARE_CSR(mhpmevent31, CSR_MHPMEVENT31) -DECLARE_CSR(mvendorid, CSR_MVENDORID) -DECLARE_CSR(marchid, CSR_MARCHID) -DECLARE_CSR(mimpid, CSR_MIMPID) -DECLARE_CSR(mhartid, CSR_MHARTID) -DECLARE_CSR(cycleh, CSR_CYCLEH) -DECLARE_CSR(timeh, CSR_TIMEH) -DECLARE_CSR(instreth, CSR_INSTRETH) -DECLARE_CSR(hpmcounter3h, CSR_HPMCOUNTER3H) -DECLARE_CSR(hpmcounter4h, CSR_HPMCOUNTER4H) -DECLARE_CSR(hpmcounter5h, CSR_HPMCOUNTER5H) -DECLARE_CSR(hpmcounter6h, CSR_HPMCOUNTER6H) -DECLARE_CSR(hpmcounter7h, CSR_HPMCOUNTER7H) -DECLARE_CSR(hpmcounter8h, CSR_HPMCOUNTER8H) -DECLARE_CSR(hpmcounter9h, CSR_HPMCOUNTER9H) -DECLARE_CSR(hpmcounter10h, CSR_HPMCOUNTER10H) -DECLARE_CSR(hpmcounter11h, CSR_HPMCOUNTER11H) -DECLARE_CSR(hpmcounter12h, CSR_HPMCOUNTER12H) -DECLARE_CSR(hpmcounter13h, CSR_HPMCOUNTER13H) -DECLARE_CSR(hpmcounter14h, CSR_HPMCOUNTER14H) -DECLARE_CSR(hpmcounter15h, CSR_HPMCOUNTER15H) -DECLARE_CSR(hpmcounter16h, CSR_HPMCOUNTER16H) -DECLARE_CSR(hpmcounter17h, CSR_HPMCOUNTER17H) -DECLARE_CSR(hpmcounter18h, CSR_HPMCOUNTER18H) -DECLARE_CSR(hpmcounter19h, CSR_HPMCOUNTER19H) -DECLARE_CSR(hpmcounter20h, CSR_HPMCOUNTER20H) -DECLARE_CSR(hpmcounter21h, CSR_HPMCOUNTER21H) -DECLARE_CSR(hpmcounter22h, CSR_HPMCOUNTER22H) -DECLARE_CSR(hpmcounter23h, CSR_HPMCOUNTER23H) -DECLARE_CSR(hpmcounter24h, CSR_HPMCOUNTER24H) -DECLARE_CSR(hpmcounter25h, CSR_HPMCOUNTER25H) -DECLARE_CSR(hpmcounter26h, CSR_HPMCOUNTER26H) -DECLARE_CSR(hpmcounter27h, CSR_HPMCOUNTER27H) -DECLARE_CSR(hpmcounter28h, CSR_HPMCOUNTER28H) -DECLARE_CSR(hpmcounter29h, CSR_HPMCOUNTER29H) -DECLARE_CSR(hpmcounter30h, CSR_HPMCOUNTER30H) -DECLARE_CSR(hpmcounter31h, CSR_HPMCOUNTER31H) -DECLARE_CSR(mcycleh, CSR_MCYCLEH) -DECLARE_CSR(minstreth, CSR_MINSTRETH) -DECLARE_CSR(mhpmcounter3h, CSR_MHPMCOUNTER3H) -DECLARE_CSR(mhpmcounter4h, CSR_MHPMCOUNTER4H) -DECLARE_CSR(mhpmcounter5h, CSR_MHPMCOUNTER5H) -DECLARE_CSR(mhpmcounter6h, CSR_MHPMCOUNTER6H) -DECLARE_CSR(mhpmcounter7h, CSR_MHPMCOUNTER7H) -DECLARE_CSR(mhpmcounter8h, CSR_MHPMCOUNTER8H) -DECLARE_CSR(mhpmcounter9h, CSR_MHPMCOUNTER9H) -DECLARE_CSR(mhpmcounter10h, CSR_MHPMCOUNTER10H) -DECLARE_CSR(mhpmcounter11h, CSR_MHPMCOUNTER11H) -DECLARE_CSR(mhpmcounter12h, CSR_MHPMCOUNTER12H) -DECLARE_CSR(mhpmcounter13h, CSR_MHPMCOUNTER13H) -DECLARE_CSR(mhpmcounter14h, CSR_MHPMCOUNTER14H) -DECLARE_CSR(mhpmcounter15h, CSR_MHPMCOUNTER15H) -DECLARE_CSR(mhpmcounter16h, CSR_MHPMCOUNTER16H) -DECLARE_CSR(mhpmcounter17h, CSR_MHPMCOUNTER17H) -DECLARE_CSR(mhpmcounter18h, CSR_MHPMCOUNTER18H) -DECLARE_CSR(mhpmcounter19h, CSR_MHPMCOUNTER19H) -DECLARE_CSR(mhpmcounter20h, CSR_MHPMCOUNTER20H) -DECLARE_CSR(mhpmcounter21h, CSR_MHPMCOUNTER21H) -DECLARE_CSR(mhpmcounter22h, CSR_MHPMCOUNTER22H) -DECLARE_CSR(mhpmcounter23h, CSR_MHPMCOUNTER23H) -DECLARE_CSR(mhpmcounter24h, CSR_MHPMCOUNTER24H) -DECLARE_CSR(mhpmcounter25h, CSR_MHPMCOUNTER25H) -DECLARE_CSR(mhpmcounter26h, CSR_MHPMCOUNTER26H) -DECLARE_CSR(mhpmcounter27h, CSR_MHPMCOUNTER27H) -DECLARE_CSR(mhpmcounter28h, CSR_MHPMCOUNTER28H) -DECLARE_CSR(mhpmcounter29h, CSR_MHPMCOUNTER29H) -DECLARE_CSR(mhpmcounter30h, CSR_MHPMCOUNTER30H) -DECLARE_CSR(mhpmcounter31h, CSR_MHPMCOUNTER31H) -#endif -#ifdef DECLARE_CAUSE -DECLARE_CAUSE("misaligned fetch", CAUSE_MISALIGNED_FETCH) -DECLARE_CAUSE("fetch access", CAUSE_FETCH_ACCESS) -DECLARE_CAUSE("illegal instruction", CAUSE_ILLEGAL_INSTRUCTION) -DECLARE_CAUSE("breakpoint", CAUSE_BREAKPOINT) -DECLARE_CAUSE("misaligned load", CAUSE_MISALIGNED_LOAD) -DECLARE_CAUSE("load access", CAUSE_LOAD_ACCESS) -DECLARE_CAUSE("misaligned store", CAUSE_MISALIGNED_STORE) -DECLARE_CAUSE("store access", CAUSE_STORE_ACCESS) -DECLARE_CAUSE("user_ecall", CAUSE_USER_ECALL) -DECLARE_CAUSE("supervisor_ecall", CAUSE_SUPERVISOR_ECALL) -DECLARE_CAUSE("hypervisor_ecall", CAUSE_HYPERVISOR_ECALL) -DECLARE_CAUSE("machine_ecall", CAUSE_MACHINE_ECALL) -DECLARE_CAUSE("fetch page fault", CAUSE_FETCH_PAGE_FAULT) -DECLARE_CAUSE("load page fault", CAUSE_LOAD_PAGE_FAULT) -DECLARE_CAUSE("store page fault", CAUSE_STORE_PAGE_FAULT) -#endif diff --git a/libraries/NEMU/resource/bbl/src/flush_icache.c b/libraries/NEMU/resource/bbl/src/flush_icache.c deleted file mode 100644 index 3a3dbc1..0000000 --- a/libraries/NEMU/resource/bbl/src/flush_icache.c +++ /dev/null @@ -1,5 +0,0 @@ -// See LICENSE for license details. - -void __riscv_flush_icache(void) { - __asm__ volatile ("fence.i"); -} diff --git a/libraries/NEMU/resource/bbl/src/mcall.h b/libraries/NEMU/resource/bbl/src/mcall.h deleted file mode 100644 index 008179f..0000000 --- a/libraries/NEMU/resource/bbl/src/mcall.h +++ /dev/null @@ -1,16 +0,0 @@ -// See LICENSE for license details. - -#ifndef _RISCV_SBI_H -#define _RISCV_SBI_H - -#define SBI_SET_TIMER 0 -#define SBI_CONSOLE_PUTCHAR 1 -#define SBI_CONSOLE_GETCHAR 2 -#define SBI_CLEAR_IPI 3 -#define SBI_SEND_IPI 4 -#define SBI_REMOTE_FENCE_I 5 -#define SBI_REMOTE_SFENCE_VMA 6 -#define SBI_REMOTE_SFENCE_VMA_ASID 7 -#define SBI_SHUTDOWN 8 - -#endif diff --git a/libraries/NEMU/resource/bbl/src/mentry.S b/libraries/NEMU/resource/bbl/src/mentry.S deleted file mode 100644 index 5104c0e..0000000 --- a/libraries/NEMU/resource/bbl/src/mentry.S +++ /dev/null @@ -1,292 +0,0 @@ -// See LICENSE for license details. - -#include "mtrap.h" -#include "bits.h" -//#include "config.h" - - .data - .align 6 -trap_table: -#define BAD_TRAP_VECTOR 0 - .dc.a bad_trap - .dc.a pmp_trap - .dc.a illegal_insn_trap - .dc.a bad_trap - .dc.a misaligned_load_trap - .dc.a pmp_trap - .dc.a misaligned_store_trap - .dc.a pmp_trap - .dc.a bad_trap - .dc.a mcall_trap - .dc.a bad_trap -#ifdef BBL_BOOT_MACHINE - .dc.a mcall_trap -#else - .dc.a bad_trap -#endif /* BBL_BOOT_MACHINE */ - .dc.a bad_trap -#define TRAP_FROM_MACHINE_MODE_VECTOR 13 - .dc.a __trap_from_machine_mode - .dc.a bad_trap - .dc.a bad_trap - - .option norvc - .section .text.init,"ax",@progbits - .globl reset_vector -reset_vector: - li x1, 0 - li x2, 0 - li x3, 0 - li x4, 0 - li x5, 0 - li x6, 0 - li x7, 0 - li x8, 0 - li x9, 0 -// save a0 and a1; arguments from previous boot loader stage: -// li x10, 0 -// li x11, 0 - li x12, 0 - li x13, 0 - li x14, 0 - li x15, 0 - li x16, 0 - li x17, 0 - li x18, 0 - li x19, 0 - li x20, 0 - li x21, 0 - li x22, 0 - li x23, 0 - li x24, 0 - li x25, 0 - li x26, 0 - li x27, 0 - li x28, 0 - li x29, 0 - li x30, 0 - li x31, 0 - - la t0, stacks + RISCV_PGSIZE - MENTRY_FRAME_SIZE - csrw mscratch, t0 - - # write mtvec and make sure it sticks - la t0, trap_vector - csrw mtvec, t0 - csrr t1, mtvec -1:bne t0, t1, 1b - -here: - j here - -.LmultiHart: -#if MAX_HARTS > 1 - # wait for an IPI to signal that it's safe to boot - wfi - - # masked harts never start - la a4, disabled_hart_mask - LOAD a4, 0(a4) - srl a4, a4, a3 - andi a4, a4, 1 - bnez a4, .LmultiHart - - # only start if mip is set - csrr a2, mip - andi a2, a2, MIP_MSIP - beqz a2, .LmultiHart - - # make sure our hart id is within a valid range - fence - li a2, MAX_HARTS - bltu a3, a2, init_other_hart -#endif - wfi - j .LmultiHart - -trap_vector: - csrrw sp, mscratch, sp - beqz sp, .Ltrap_from_machine_mode - - STORE a0, 10*REGBYTES(sp) - STORE a1, 11*REGBYTES(sp) - - csrr a1, mcause - bgez a1, .Lhandle_trap_in_machine_mode - - # This is an interrupt. Discard the mcause MSB and decode the rest. - sll a1, a1, 1 - - # Is it a machine timer interrupt? - li a0, IRQ_M_TIMER * 2 - bne a0, a1, 1f - - # Yes. Simply clear MTIE and raise STIP. - li a0, MIP_MTIP - csrc mie, a0 - li a0, MIP_STIP - csrs mip, a0 - -.Lmret: - # Go back whence we came. - LOAD a0, 10*REGBYTES(sp) - LOAD a1, 11*REGBYTES(sp) - csrrw sp, mscratch, sp - mret - -1: - # Is it an IPI? - li a0, IRQ_M_SOFT * 2 - bne a0, a1, .Lbad_trap - - # Yes. First, clear the MIPI bit. - LOAD a0, MENTRY_IPI_OFFSET(sp) - sw x0, (a0) - fence - - # Now, decode the cause(s). -#ifdef __riscv_atomic - addi a0, sp, MENTRY_IPI_PENDING_OFFSET - amoswap.w a0, x0, (a0) -#else - lw a0, MENTRY_IPI_PENDING_OFFSET(sp) - sw x0, MENTRY_IPI_PENDING_OFFSET(sp) -#endif - and a1, a0, IPI_SOFT - beqz a1, 1f - csrs mip, MIP_SSIP -1: - andi a1, a0, IPI_FENCE_I - beqz a1, 1f - fence.i -1: - andi a1, a0, IPI_SFENCE_VMA - beqz a1, 1f - sfence.vma -1: - andi a1, a0, IPI_HALT - beqz a1, 1f - wfi - j 1b -1: - j .Lmret - -.Lhandle_trap_in_machine_mode: - # Preserve the registers. Compute the address of the trap handler. - STORE ra, 1*REGBYTES(sp) - STORE gp, 3*REGBYTES(sp) - STORE tp, 4*REGBYTES(sp) - STORE t0, 5*REGBYTES(sp) -1:auipc t0, %pcrel_hi(trap_table) # t0 <- %hi(trap_table) - STORE t1, 6*REGBYTES(sp) - sll t1, a1, LOG_REGBYTES # t1 <- mcause * ptr size - STORE t2, 7*REGBYTES(sp) - add t1, t0, t1 # t1 <- %hi(trap_table)[mcause] - STORE s0, 8*REGBYTES(sp) - LOAD t1, %pcrel_lo(1b)(t1) # t1 <- trap_table[mcause] - STORE s1, 9*REGBYTES(sp) - mv a0, sp # a0 <- regs - STORE a2,12*REGBYTES(sp) - csrr a2, mepc # a2 <- mepc - STORE a3,13*REGBYTES(sp) - csrrw t0, mscratch, x0 # t0 <- user sp - STORE a4,14*REGBYTES(sp) - STORE a5,15*REGBYTES(sp) - STORE a6,16*REGBYTES(sp) - STORE a7,17*REGBYTES(sp) - STORE s2,18*REGBYTES(sp) - STORE s3,19*REGBYTES(sp) - STORE s4,20*REGBYTES(sp) - STORE s5,21*REGBYTES(sp) - STORE s6,22*REGBYTES(sp) - STORE s7,23*REGBYTES(sp) - STORE s8,24*REGBYTES(sp) - STORE s9,25*REGBYTES(sp) - STORE s10,26*REGBYTES(sp) - STORE s11,27*REGBYTES(sp) - STORE t3,28*REGBYTES(sp) - STORE t4,29*REGBYTES(sp) - STORE t5,30*REGBYTES(sp) - STORE t6,31*REGBYTES(sp) - STORE t0, 2*REGBYTES(sp) # sp - -#ifndef __riscv_flen - lw tp, (sp) # Move the emulated FCSR from x0's save slot into tp. -#endif - STORE x0, (sp) # Zero x0's save slot. - - # Invoke the handler. - jalr t1 - -#ifndef __riscv_flen - sw tp, (sp) # Move the emulated FCSR from tp into x0's save slot. -#endif - -restore_mscratch: - # Restore mscratch, so future traps will know they didn't come from M-mode. - csrw mscratch, sp - -restore_regs: - # Restore all of the registers. - LOAD ra, 1*REGBYTES(sp) - LOAD gp, 3*REGBYTES(sp) - LOAD tp, 4*REGBYTES(sp) - LOAD t0, 5*REGBYTES(sp) - LOAD t1, 6*REGBYTES(sp) - LOAD t2, 7*REGBYTES(sp) - LOAD s0, 8*REGBYTES(sp) - LOAD s1, 9*REGBYTES(sp) - LOAD a0,10*REGBYTES(sp) - LOAD a1,11*REGBYTES(sp) - LOAD a2,12*REGBYTES(sp) - LOAD a3,13*REGBYTES(sp) - LOAD a4,14*REGBYTES(sp) - LOAD a5,15*REGBYTES(sp) - LOAD a6,16*REGBYTES(sp) - LOAD a7,17*REGBYTES(sp) - LOAD s2,18*REGBYTES(sp) - LOAD s3,19*REGBYTES(sp) - LOAD s4,20*REGBYTES(sp) - LOAD s5,21*REGBYTES(sp) - LOAD s6,22*REGBYTES(sp) - LOAD s7,23*REGBYTES(sp) - LOAD s8,24*REGBYTES(sp) - LOAD s9,25*REGBYTES(sp) - LOAD s10,26*REGBYTES(sp) - LOAD s11,27*REGBYTES(sp) - LOAD t3,28*REGBYTES(sp) - LOAD t4,29*REGBYTES(sp) - LOAD t5,30*REGBYTES(sp) - LOAD t6,31*REGBYTES(sp) - LOAD sp, 2*REGBYTES(sp) - mret - -.Ltrap_from_machine_mode: - csrr sp, mscratch - addi sp, sp, -INTEGER_CONTEXT_SIZE - STORE a0,10*REGBYTES(sp) - STORE a1,11*REGBYTES(sp) - li a1, TRAP_FROM_MACHINE_MODE_VECTOR - j .Lhandle_trap_in_machine_mode - -.Lbad_trap: - li a1, BAD_TRAP_VECTOR - j .Lhandle_trap_in_machine_mode - - .globl __redirect_trap -__redirect_trap: - # reset sp to top of M-mode stack - li t0, MACHINE_STACK_SIZE - add sp, sp, t0 - neg t0, t0 - and sp, sp, t0 - addi sp, sp, -MENTRY_FRAME_SIZE - j restore_mscratch - -__trap_from_machine_mode: - jal trap_from_machine_mode - j restore_regs - - .bss -stacks: - .skip RISCV_PGSIZE * MAX_HARTS diff --git a/libraries/NEMU/resource/bbl/src/misaligned_ldst.c b/libraries/NEMU/resource/bbl/src/misaligned_ldst.c deleted file mode 100644 index 3b0a59e..0000000 --- a/libraries/NEMU/resource/bbl/src/misaligned_ldst.c +++ /dev/null @@ -1,141 +0,0 @@ -// See LICENSE for license details. - -#include "emulation.h" -//#include "fp_emulation.h" -#include "unprivileged_memory.h" -#include "mtrap.h" -//#include "config.h" -#include "pk.h" - -union byte_array { - uint8_t bytes[8]; - uintptr_t intx; - uint64_t int64; -}; - -void misaligned_load_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc) -{ - union byte_array val; - uintptr_t mstatus; - insn_t insn = get_insn(mepc, &mstatus); - uintptr_t npc = mepc + insn_len(insn); - uintptr_t addr = read_csr(mbadaddr); - - int shift = 0, fp = 0, len; - if ((insn & MASK_LW) == MATCH_LW) - len = 4, shift = 8*(sizeof(uintptr_t) - len); -#if __riscv_xlen == 64 - else if ((insn & MASK_LD) == MATCH_LD) - len = 8, shift = 8*(sizeof(uintptr_t) - len); - else if ((insn & MASK_LWU) == MATCH_LWU) - len = 4; -#endif -#ifdef PK_ENABLE_FP_EMULATION - else if ((insn & MASK_FLD) == MATCH_FLD) - fp = 1, len = 8; - else if ((insn & MASK_FLW) == MATCH_FLW) - fp = 1, len = 4; -#endif - else if ((insn & MASK_LH) == MATCH_LH) - len = 2, shift = 8*(sizeof(uintptr_t) - len); - else if ((insn & MASK_LHU) == MATCH_LHU) - len = 2; -#ifdef __riscv_compressed -# if __riscv_xlen >= 64 - else if ((insn & MASK_C_LD) == MATCH_C_LD) - len = 8, shift = 8*(sizeof(uintptr_t) - len), insn = RVC_RS2S(insn) << SH_RD; - else if ((insn & MASK_C_LDSP) == MATCH_C_LDSP && ((insn >> SH_RD) & 0x1f)) - len = 8, shift = 8*(sizeof(uintptr_t) - len); -# endif - else if ((insn & MASK_C_LW) == MATCH_C_LW) - len = 4, shift = 8*(sizeof(uintptr_t) - len), insn = RVC_RS2S(insn) << SH_RD; - else if ((insn & MASK_C_LWSP) == MATCH_C_LWSP && ((insn >> SH_RD) & 0x1f)) - len = 4, shift = 8*(sizeof(uintptr_t) - len); -# ifdef PK_ENABLE_FP_EMULATION - else if ((insn & MASK_C_FLD) == MATCH_C_FLD) - fp = 1, len = 8, insn = RVC_RS2S(insn) << SH_RD; - else if ((insn & MASK_C_FLDSP) == MATCH_C_FLDSP) - fp = 1, len = 8; -# if __riscv_xlen == 32 - else if ((insn & MASK_C_FLW) == MATCH_C_FLW) - fp = 1, len = 4, insn = RVC_RS2S(insn) << SH_RD; - else if ((insn & MASK_C_FLWSP) == MATCH_C_FLWSP) - fp = 1, len = 4; -# endif -# endif -#endif - else { - mcause = CAUSE_LOAD_ACCESS; - write_csr(mcause, mcause); - return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); - } - - val.int64 = 0; - for (intptr_t i = 0; i < len; i++) - val.bytes[i] = load_uint8_t((void *)(addr + i), mepc); - - if (!fp) - SET_RD(insn, regs, (intptr_t)val.intx << shift >> shift); - - write_csr(mepc, npc); -} - -void misaligned_store_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc) -{ - union byte_array val; - uintptr_t mstatus; - insn_t insn = get_insn(mepc, &mstatus); - uintptr_t npc = mepc + insn_len(insn); - int len; - - val.intx = GET_RS2(insn, regs); - if ((insn & MASK_SW) == MATCH_SW) - len = 4; -#if __riscv_xlen == 64 - else if ((insn & MASK_SD) == MATCH_SD) - len = 8; -#endif -#ifdef PK_ENABLE_FP_EMULATION - else if ((insn & MASK_FSD) == MATCH_FSD) - len = 8, val.int64 = GET_F64_RS2(insn, regs); - else if ((insn & MASK_FSW) == MATCH_FSW) - len = 4, val.intx = GET_F32_RS2(insn, regs); -#endif - else if ((insn & MASK_SH) == MATCH_SH) - len = 2; -#ifdef __riscv_compressed -# if __riscv_xlen >= 64 - else if ((insn & MASK_C_SD) == MATCH_C_SD) - len = 8, val.intx = GET_RS2S(insn, regs); - else if ((insn & MASK_C_SDSP) == MATCH_C_SDSP && ((insn >> SH_RD) & 0x1f)) - len = 8, val.intx = GET_RS2C(insn, regs); -# endif - else if ((insn & MASK_C_SW) == MATCH_C_SW) - len = 4, val.intx = GET_RS2S(insn, regs); - else if ((insn & MASK_C_SWSP) == MATCH_C_SWSP && ((insn >> SH_RD) & 0x1f)) - len = 4, val.intx = GET_RS2C(insn, regs); -# ifdef PK_ENABLE_FP_EMULATION - else if ((insn & MASK_C_FSD) == MATCH_C_FSD) - len = 8, val.int64 = GET_F64_RS2S(insn, regs); - else if ((insn & MASK_C_FSDSP) == MATCH_C_FSDSP) - len = 8, val.int64 = GET_F64_RS2C(insn, regs); -# if __riscv_xlen == 32 - else if ((insn & MASK_C_FSW) == MATCH_C_FSW) - len = 4, val.intx = GET_F32_RS2S(insn, regs); - else if ((insn & MASK_C_FSWSP) == MATCH_C_FSWSP) - len = 4, val.intx = GET_F32_RS2C(insn, regs); -# endif -# endif -#endif - else { - mcause = CAUSE_STORE_ACCESS; - write_csr(mcause, mcause); - return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); - } - - uintptr_t addr = read_csr(mbadaddr); - for (int i = 0; i < len; i++) - store_uint8_t((void *)(addr + i), val.bytes[i], mepc); - - write_csr(mepc, npc); -} diff --git a/libraries/NEMU/resource/bbl/src/mtrap.c b/libraries/NEMU/resource/bbl/src/mtrap.c deleted file mode 100644 index 7260574..0000000 --- a/libraries/NEMU/resource/bbl/src/mtrap.c +++ /dev/null @@ -1,197 +0,0 @@ -// See LICENSE for license details. - -#include "mtrap.h" -#include "mcall.h" -#include "atomic.h" -#include "bits.h" -#include "vm.h" -#include "unprivileged_memory.h" -#include "disabled_hart_mask.h" -#include -#include -#include - -void __attribute__((noreturn)) bad_trap(uintptr_t* regs, uintptr_t dummy, uintptr_t mepc) -{ - die("machine mode: unhandlable trap %d @ %p", read_csr(mcause), mepc); -} - -static uintptr_t mcall_console_putchar(uint8_t ch) -{ - // only for NEMU - volatile uint8_t *p = (void *)(uintptr_t)0xa10003f8; - *p = ch; - return 0; -} - -void putstring(const char* s) -{ - while (*s) - mcall_console_putchar(*s++); -} - -void vprintm(const char* s, va_list vl) -{ - char buf[256]; - vsnprintf(buf, sizeof buf, s, vl); - putstring(buf); -} - -void printm(const char* s, ...) -{ - va_list vl; - - va_start(vl, s); - vprintm(s, vl); - va_end(vl); -} - -static uintptr_t mcall_console_getchar() -{ - return 0; -} - -static uintptr_t mcall_clear_ipi() -{ - return clear_csr(mip, MIP_SSIP) & MIP_SSIP; -} - -static uintptr_t mcall_shutdown() -{ - poweroff(0); -} - -static uintptr_t mcall_set_timer(uint64_t when) -{ - *HLS()->timecmp = when; - clear_csr(mip, MIP_STIP); - set_csr(mie, MIP_MTIP); - return 0; -} - -static void send_ipi_many(uintptr_t* pmask, int event) -{ - _Static_assert(MAX_HARTS <= 8 * sizeof(*pmask), "# harts > uintptr_t bits"); -} - -void mcall_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc) -{ - write_csr(mepc, mepc + 4); - - uintptr_t n = regs[17], arg0 = regs[10], retval, ipi_type; -#if __riscv_xlen == 32 - uintptr_t arg1 = regs[11]; -#endif - - switch (n) - { - case SBI_CONSOLE_PUTCHAR: - retval = mcall_console_putchar(arg0); - break; - case SBI_CONSOLE_GETCHAR: - retval = mcall_console_getchar(); - break; - case SBI_SEND_IPI: - ipi_type = IPI_SOFT; - goto send_ipi; - case SBI_REMOTE_SFENCE_VMA: - case SBI_REMOTE_SFENCE_VMA_ASID: - ipi_type = IPI_SFENCE_VMA; - goto send_ipi; - case SBI_REMOTE_FENCE_I: - ipi_type = IPI_FENCE_I; -send_ipi: - send_ipi_many((uintptr_t*)arg0, ipi_type); - retval = 0; - break; - case SBI_CLEAR_IPI: - retval = mcall_clear_ipi(); - break; - case SBI_SHUTDOWN: - retval = mcall_shutdown(); - break; - case SBI_SET_TIMER: -#if __riscv_xlen == 32 - retval = mcall_set_timer(arg0 + ((uint64_t)arg1 << 32)); -#else - retval = mcall_set_timer(arg0); -#endif - break; - default: - retval = -ENOSYS; - break; - } - regs[10] = retval; -} - -void redirect_trap(uintptr_t epc, uintptr_t mstatus, uintptr_t badaddr) -{ - write_csr(sbadaddr, badaddr); - write_csr(sepc, epc); - write_csr(scause, read_csr(mcause)); - write_csr(mepc, read_csr(stvec)); - - uintptr_t new_mstatus = mstatus & ~(MSTATUS_SPP | MSTATUS_SPIE | MSTATUS_SIE); - uintptr_t mpp_s = MSTATUS_MPP & (MSTATUS_MPP >> 1); - new_mstatus |= (mstatus * (MSTATUS_SPIE / MSTATUS_SIE)) & MSTATUS_SPIE; - new_mstatus |= (mstatus / (mpp_s / MSTATUS_SPP)) & MSTATUS_SPP; - new_mstatus |= mpp_s; - write_csr(mstatus, new_mstatus); - - extern void __redirect_trap(); - return __redirect_trap(); -} - -void pmp_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc) -{ - redirect_trap(mepc, read_csr(mstatus), read_csr(mbadaddr)); -} - -static void machine_page_fault(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc) -{ - // MPRV=1 iff this trap occurred while emulating an instruction on behalf - // of a lower privilege level. In that case, a2=epc and a3=mstatus. - // a1 holds MPRV if emulating a load or store, or MPRV | MXR if loading - // an instruction from memory. In the latter case, we should report an - // instruction fault instead of a load fault. - if (read_csr(mstatus) & MSTATUS_MPRV) { - if (regs[11] == (MSTATUS_MPRV | MSTATUS_MXR)) { - if (mcause == CAUSE_LOAD_PAGE_FAULT) - write_csr(mcause, CAUSE_FETCH_PAGE_FAULT); - else if (mcause == CAUSE_LOAD_ACCESS) - write_csr(mcause, CAUSE_FETCH_ACCESS); - else - goto fail; - } else if (regs[11] != MSTATUS_MPRV) { - goto fail; - } - - return redirect_trap(regs[12], regs[13], read_csr(mbadaddr)); - } - -fail: - bad_trap(regs, mcause, mepc); -} - -void trap_from_machine_mode(uintptr_t* regs, uintptr_t dummy, uintptr_t mepc) -{ - uintptr_t mcause = read_csr(mcause); - - switch (mcause) - { - case CAUSE_LOAD_PAGE_FAULT: - case CAUSE_STORE_PAGE_FAULT: - case CAUSE_FETCH_ACCESS: - case CAUSE_LOAD_ACCESS: - case CAUSE_STORE_ACCESS: - return machine_page_fault(regs, mcause, mepc); - default: - bad_trap(regs, dummy, mepc); - } -} - -void poweroff(uint16_t code) -{ - send_ipi_many(0, IPI_HALT); - while (1) { asm volatile ("wfi\n"); } -} diff --git a/libraries/NEMU/resource/bbl/src/mtrap.h b/libraries/NEMU/resource/bbl/src/mtrap.h deleted file mode 100644 index e1d6b9c..0000000 --- a/libraries/NEMU/resource/bbl/src/mtrap.h +++ /dev/null @@ -1,102 +0,0 @@ -// See LICENSE for license details. - -#ifndef _RISCV_MTRAP_H -#define _RISCV_MTRAP_H - -#include "encoding.h" - -#ifdef __riscv_atomic -# define MAX_HARTS 1 // arbitrary -#else -# define MAX_HARTS 1 -#endif - -#ifndef __ASSEMBLER__ - -#include -#include -#include - -#define read_const_csr(reg) ({ unsigned long __tmp; \ - asm ("csrr %0, " #reg : "=r"(__tmp)); \ - __tmp; }) - -static inline int supports_extension(char ext) -{ - return read_const_csr(misa) & (1 << (ext - 'A')); -} - -static inline int xlen() -{ - return read_const_csr(misa) < 0 ? 64 : 32; -} - -extern uintptr_t mem_size; -extern volatile uint64_t* mtime; -extern volatile uint32_t* plic_priorities; -extern size_t plic_ndevs; - -typedef struct { - volatile uint32_t* ipi; - volatile int mipi_pending; - - volatile uint64_t* timecmp; - - volatile uint32_t* plic_m_thresh; - volatile uintptr_t* plic_m_ie; - volatile uint32_t* plic_s_thresh; - volatile uintptr_t* plic_s_ie; -} hls_t; - -#define MACHINE_STACK_TOP() ({ \ - register uintptr_t sp asm ("sp"); \ - (void*)((sp + RISCV_PGSIZE) & -RISCV_PGSIZE); }) - -// hart-local storage, at top of stack -#define HLS() ((hls_t*)(MACHINE_STACK_TOP() - HLS_SIZE)) -#define OTHER_HLS(id) ((hls_t*)((void*)HLS() + RISCV_PGSIZE * ((id) - read_const_csr(mhartid)))) - -hls_t* hls_init(uintptr_t hart_id); -void parse_config_string(); -void poweroff(uint16_t code) __attribute((noreturn)); -void printm(const char* s, ...); -void vprintm(const char *s, va_list args); -void putstring(const char* s); -#define assert(x) ({ if (!(x)) die("assertion failed: %s", #x); }) -#define die(str, ...) ({ printm("%s:%d: " str "\n", __FILE__, __LINE__, ##__VA_ARGS__); poweroff(-1); }) - -void setup_pmp(); -void enter_supervisor_mode(void (*fn)(uintptr_t), uintptr_t arg0, uintptr_t arg1) - __attribute__((noreturn)); -void enter_machine_mode(void (*fn)(uintptr_t, uintptr_t), uintptr_t arg0, uintptr_t arg1) - __attribute__((noreturn)); -void boot_loader(uintptr_t dtb); -void boot_other_hart(uintptr_t dtb); - -static inline void wfi() -{ - asm volatile ("wfi" ::: "memory"); -} - -#endif // !__ASSEMBLER__ - -#define IPI_SOFT 0x1 -#define IPI_FENCE_I 0x2 -#define IPI_SFENCE_VMA 0x4 -#define IPI_HALT 0x8 - -#define MACHINE_STACK_SIZE RISCV_PGSIZE -#define MENTRY_HLS_OFFSET (INTEGER_CONTEXT_SIZE + SOFT_FLOAT_CONTEXT_SIZE) -#define MENTRY_FRAME_SIZE (MENTRY_HLS_OFFSET + HLS_SIZE) -#define MENTRY_IPI_OFFSET (MENTRY_HLS_OFFSET) -#define MENTRY_IPI_PENDING_OFFSET (MENTRY_HLS_OFFSET + REGBYTES) - -#ifdef __riscv_flen -# define SOFT_FLOAT_CONTEXT_SIZE 0 -#else -# define SOFT_FLOAT_CONTEXT_SIZE (8 * 32) -#endif -#define HLS_SIZE 64 -#define INTEGER_CONTEXT_SIZE (32 * REGBYTES) - -#endif diff --git a/libraries/NEMU/resource/bbl/src/muldiv_emulation.c b/libraries/NEMU/resource/bbl/src/muldiv_emulation.c deleted file mode 100644 index dba5c03..0000000 --- a/libraries/NEMU/resource/bbl/src/muldiv_emulation.c +++ /dev/null @@ -1,66 +0,0 @@ -// See LICENSE for license details. - -#include "emulation.h" - -#ifndef __riscv_muldiv - -#if __riscv_xlen == 64 -typedef __int128 double_int; -#else -typedef int64_t double_int; -#endif - -// These routines rely on the compiler to turn these operations into libcalls -// when not natively supported. So work on making those go fast. - -DECLARE_EMULATION_FUNC(emulate_mul_div) -{ - uintptr_t rs1 = GET_RS1(insn, regs), rs2 = GET_RS2(insn, regs), val; - - if ((insn & MASK_MUL) == MATCH_MUL) - val = rs1 * rs2; - else if ((insn & MASK_DIV) == MATCH_DIV) - val = (intptr_t)rs1 / (intptr_t)rs2; - else if ((insn & MASK_DIVU) == MATCH_DIVU) - val = rs1 / rs2; - else if ((insn & MASK_REM) == MATCH_REM) - val = (intptr_t)rs1 % (intptr_t)rs2; - else if ((insn & MASK_REMU) == MATCH_REMU) - val = rs1 % rs2; - else if ((insn & MASK_MULH) == MATCH_MULH) - val = ((double_int)(intptr_t)rs1 * (double_int)(intptr_t)rs2) >> (8 * sizeof(rs1)); - else if ((insn & MASK_MULHU) == MATCH_MULHU) - val = ((double_int)rs1 * (double_int)rs2) >> (8 * sizeof(rs1)); - else if ((insn & MASK_MULHSU) == MATCH_MULHSU) - val = ((double_int)(intptr_t)rs1 * (double_int)rs2) >> (8 * sizeof(rs1)); - else - return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); - - SET_RD(insn, regs, val); -} - -#if __riscv_xlen == 64 - -DECLARE_EMULATION_FUNC(emulate_mul_div32) -{ - uint32_t rs1 = GET_RS1(insn, regs), rs2 = GET_RS2(insn, regs); - int32_t val; - - if ((insn & MASK_MULW) == MATCH_MULW) - val = rs1 * rs2; - else if ((insn & MASK_DIVW) == MATCH_DIVW) - val = (int32_t)rs1 / (int32_t)rs2; - else if ((insn & MASK_DIVUW) == MATCH_DIVUW) - val = rs1 / rs2; - else if ((insn & MASK_REMW) == MATCH_REMW) - val = (int32_t)rs1 % (int32_t)rs2; - else if ((insn & MASK_REMUW) == MATCH_REMUW) - val = rs1 % rs2; - else - return truly_illegal_insn(regs, mcause, mepc, mstatus, insn); - - SET_RD(insn, regs, val); -} - -#endif -#endif diff --git a/libraries/NEMU/resource/bbl/src/pk.h b/libraries/NEMU/resource/bbl/src/pk.h deleted file mode 100644 index a55ab6c..0000000 --- a/libraries/NEMU/resource/bbl/src/pk.h +++ /dev/null @@ -1,110 +0,0 @@ -// See LICENSE for license details. - -#ifndef _PK_H -#define _PK_H - -#ifndef __ASSEMBLER__ - -#include "encoding.h" -#include -#include -#include - -typedef struct -{ - long gpr[32]; - long status; - long epc; - long badvaddr; - long cause; - long insn; -} trapframe_t; - -#define panic(s,...) do { do_panic(s"\n", ##__VA_ARGS__); } while(0) -#define kassert(cond) do { if(!(cond)) kassert_fail(""#cond); } while(0) -void do_panic(const char* s, ...) __attribute__((noreturn)); -void kassert_fail(const char* s) __attribute__((noreturn)); - -#ifdef __cplusplus -extern "C" { -#endif - -void printk(const char* s, ...); -void printm(const char* s, ...); -int vsnprintf(char* out, size_t n, const char* s, va_list vl); -int snprintf(char* out, size_t n, const char* s, ...); -void start_user(trapframe_t* tf) __attribute__((noreturn)); -void dump_tf(trapframe_t*); - -static inline int insn_len(long insn) -{ - return (insn & 0x3) < 0x3 ? 2 : 4; -} - -#if __riscv_xlen == 32 - -static inline uint64_t rdtime64() -{ - uint32_t time; - uint32_t timeh1; - uint32_t timeh2; - - do - { - timeh1 = read_csr(timeh); - time = read_csr(time); - timeh2 = read_csr(timeh); - } while(timeh1 != timeh2); - - return (((uint64_t) timeh1) << 32) | time; -} - -static inline uint64_t rdcycle64() -{ - uint32_t cycle; - uint32_t cycleh1; - uint32_t cycleh2; - - do - { - cycleh1 = read_csr(cycleh); - cycle = read_csr(cycle); - cycleh2 = read_csr(cycleh); - } while(cycleh1 != cycleh2); - - return (((uint64_t) cycleh1) << 32) | cycle; -} - -static inline uint64_t rdinstret64() -{ - uint32_t instret; - uint32_t instreth1; - uint32_t instreth2; - - do - { - instreth1 = read_csr(instreth); - instret = read_csr(instret); - instreth2 = read_csr(instreth); - } while(instreth1 != instreth2); - - return (((uint64_t) instreth1) << 32) | instret; -} - -#else - -#define rdtime64 rdtime -#define rdcycle64 rdcycle -#define rdinstret64 rdinstret - -#endif - -#define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0])) - -#ifdef __cplusplus -} -#endif - -#endif // !__ASSEMBLER__ - -#endif diff --git a/libraries/NEMU/resource/bbl/src/snprintf.c b/libraries/NEMU/resource/bbl/src/snprintf.c deleted file mode 100644 index a11a4f7..0000000 --- a/libraries/NEMU/resource/bbl/src/snprintf.c +++ /dev/null @@ -1,111 +0,0 @@ -// See LICENSE for license details. - -#include -#include -#include -#include - -int vsnprintf(char* out, size_t n, const char* s, va_list vl) -{ - bool format = false; - bool longarg = false; - bool longlongarg = false; - size_t pos = 0; - for( ; *s; s++) - { - if(format) - { - switch(*s) - { - case 'l': - if (s[1] == 'l') { - longlongarg = true; - s++; - } - else - longarg = true; - break; - case 'p': - longarg = true; - if (++pos < n) out[pos-1] = '0'; - if (++pos < n) out[pos-1] = 'x'; - case 'x': - { - long num = longarg ? va_arg(vl, long) : va_arg(vl, int); - for(int i = 2*(longarg ? sizeof(long) : sizeof(int))-1; i >= 0; i--) { - int d = (num >> (4*i)) & 0xF; - if (++pos < n) out[pos-1] = (d < 10 ? '0'+d : 'a'+d-10); - } - longarg = false; - format = false; - break; - } - case 'd': - { - long long num; - if (longarg) - num = va_arg(vl, long); - else if (longlongarg) - num = va_arg(vl, long long); - else - num = va_arg(vl, int); - if (num < 0) { - num = -num; - if (++pos < n) out[pos-1] = '-'; - } - long digits = 1; - for (long long nn = num; nn /= 10; digits++) - ; - for (int i = digits-1; i >= 0; i--) { - if (pos + i + 1 < n) out[pos + i] = '0' + (num % 10); - num /= 10; - } - pos += digits; - longarg = false; - longlongarg = false; - format = false; - break; - } - case 's': - { - const char* s2 = va_arg(vl, const char*); - while (*s2) { - if (++pos < n) - out[pos-1] = *s2; - s2++; - } - longarg = false; - format = false; - break; - } - case 'c': - { - if (++pos < n) out[pos-1] = (char)va_arg(vl,int); - longarg = false; - format = false; - break; - } - default: - break; - } - } - else if(*s == '%') - format = true; - else - if (++pos < n) out[pos-1] = *s; - } - if (pos < n) - out[pos] = 0; - else if (n) - out[n-1] = 0; - return pos; -} - -int snprintf(char* out, size_t n, const char* s, ...) -{ - va_list vl; - va_start(vl, s); - int res = vsnprintf(out, n, s, vl); - va_end(vl); - return res; -} diff --git a/libraries/NEMU/resource/bbl/src/unprivileged_memory.h b/libraries/NEMU/resource/bbl/src/unprivileged_memory.h deleted file mode 100644 index a0ab37e..0000000 --- a/libraries/NEMU/resource/bbl/src/unprivileged_memory.h +++ /dev/null @@ -1,108 +0,0 @@ -// See LICENSE for license details. - -#ifndef _RISCV_MISALIGNED_H -#define _RISCV_MISALIGNED_H - -#include "encoding.h" -#include "bits.h" -#include - -#define DECLARE_UNPRIVILEGED_LOAD_FUNCTION(type, insn) \ - static inline type load_##type(const type* addr, uintptr_t mepc) \ - { \ - register uintptr_t __mstatus_adjust asm ("a1") = MSTATUS_MPRV; \ - register uintptr_t __mepc asm ("a2") = mepc; \ - register uintptr_t __mstatus asm ("a3"); \ - type val; \ - asm ("csrrs %0, mstatus, %3\n" \ - #insn " %1, %2\n" \ - "csrw mstatus, %0" \ - : "+&r" (__mstatus), "=&r" (val) \ - : "m" (*addr), "r" (__mstatus_adjust), "r" (__mepc)); \ - return val; \ - } - -#define DECLARE_UNPRIVILEGED_STORE_FUNCTION(type, insn) \ - static inline void store_##type(type* addr, type val, uintptr_t mepc) \ - { \ - register uintptr_t __mstatus_adjust asm ("a1") = MSTATUS_MPRV; \ - register uintptr_t __mepc asm ("a2") = mepc; \ - register uintptr_t __mstatus asm ("a3"); \ - asm volatile ("csrrs %0, mstatus, %3\n" \ - #insn " %1, %2\n" \ - "csrw mstatus, %0" \ - : "+&r" (__mstatus) \ - : "r" (val), "m" (*addr), "r" (__mstatus_adjust), \ - "r" (__mepc)); \ - } - -DECLARE_UNPRIVILEGED_LOAD_FUNCTION(uint8_t, lbu) -DECLARE_UNPRIVILEGED_LOAD_FUNCTION(uint16_t, lhu) -DECLARE_UNPRIVILEGED_LOAD_FUNCTION(int8_t, lb) -DECLARE_UNPRIVILEGED_LOAD_FUNCTION(int16_t, lh) -DECLARE_UNPRIVILEGED_LOAD_FUNCTION(int32_t, lw) -DECLARE_UNPRIVILEGED_STORE_FUNCTION(uint8_t, sb) -DECLARE_UNPRIVILEGED_STORE_FUNCTION(uint16_t, sh) -DECLARE_UNPRIVILEGED_STORE_FUNCTION(uint32_t, sw) -#if __riscv_xlen == 64 -DECLARE_UNPRIVILEGED_LOAD_FUNCTION(uint32_t, lwu) -DECLARE_UNPRIVILEGED_LOAD_FUNCTION(uint64_t, ld) -DECLARE_UNPRIVILEGED_STORE_FUNCTION(uint64_t, sd) -DECLARE_UNPRIVILEGED_LOAD_FUNCTION(uintptr_t, ld) -#else -DECLARE_UNPRIVILEGED_LOAD_FUNCTION(uint32_t, lw) -DECLARE_UNPRIVILEGED_LOAD_FUNCTION(uintptr_t, lw) - -static inline uint64_t load_uint64_t(const uint64_t* addr, uintptr_t mepc) -{ - return load_uint32_t((uint32_t*)addr, mepc) - + ((uint64_t)load_uint32_t((uint32_t*)addr + 1, mepc) << 32); -} - -static inline void store_uint64_t(uint64_t* addr, uint64_t val, uintptr_t mepc) -{ - store_uint32_t((uint32_t*)addr, val, mepc); - store_uint32_t((uint32_t*)addr + 1, val >> 32, mepc); -} -#endif - -static inline uintptr_t get_insn(uintptr_t mepc, uintptr_t* mstatus) -{ - register uintptr_t __mstatus_adjust asm ("a1") = MSTATUS_MPRV | MSTATUS_MXR; - register uintptr_t __mepc asm ("a2") = mepc; - register uintptr_t __mstatus asm ("a3"); - uintptr_t val; -#ifndef __riscv_compressed - asm ("csrrs %[mstatus], mstatus, %[mprv]\n" - STR(LWU) " %[insn], (%[addr])\n" - "csrw mstatus, %[mstatus]" - : [mstatus] "+&r" (__mstatus), [insn] "=&r" (val) - : [mprv] "r" (__mstatus_adjust), [addr] "r" (__mepc)); -#else - uintptr_t rvc_mask = 3, tmp; - asm ("csrrs %[mstatus], mstatus, %[mprv]\n" - "and %[tmp], %[addr], 2\n" - "bnez %[tmp], 1f\n" - STR(LWU) " %[insn], (%[addr])\n" - "and %[tmp], %[insn], %[rvc_mask]\n" - "beq %[tmp], %[rvc_mask], 2f\n" - "sll %[insn], %[insn], %[xlen_minus_16]\n" - "srl %[insn], %[insn], %[xlen_minus_16]\n" - "j 2f\n" - "1:\n" - "lhu %[insn], (%[addr])\n" - "and %[tmp], %[insn], %[rvc_mask]\n" - "bne %[tmp], %[rvc_mask], 2f\n" - "lhu %[tmp], 2(%[addr])\n" - "sll %[tmp], %[tmp], 16\n" - "add %[insn], %[insn], %[tmp]\n" - "2: csrw mstatus, %[mstatus]" - : [mstatus] "+&r" (__mstatus), [insn] "=&r" (val), [tmp] "=&r" (tmp) - : [mprv] "r" (__mstatus_adjust), [addr] "r" (__mepc), - [rvc_mask] "r" (rvc_mask), [xlen_minus_16] "i" (__riscv_xlen - 16)); -#endif - *mstatus = __mstatus; - return val; -} - -#endif diff --git a/libraries/NEMU/resource/bbl/src/vm.h b/libraries/NEMU/resource/bbl/src/vm.h deleted file mode 100644 index 9436ffb..0000000 --- a/libraries/NEMU/resource/bbl/src/vm.h +++ /dev/null @@ -1,37 +0,0 @@ -// See LICENSE for license details. - -#ifndef _VM_H -#define _VM_H - -#include "encoding.h" -#include - -#define MEGAPAGE_SIZE ((uintptr_t)(RISCV_PGSIZE << RISCV_PGLEVEL_BITS)) -#if __riscv_xlen == 64 -# define SATP_MODE_CHOICE INSERT_FIELD(0, SATP64_MODE, SATP_MODE_SV39) -# define VA_BITS 39 -# define GIGAPAGE_SIZE (MEGAPAGE_SIZE << RISCV_PGLEVEL_BITS) -#else -# define SATP_MODE_CHOICE INSERT_FIELD(0, SATP32_MODE, SATP_MODE_SV32) -# define VA_BITS 32 -#endif - -typedef uintptr_t pte_t; -extern pte_t* root_page_table; - -static inline void flush_tlb() -{ - asm volatile ("sfence.vma"); -} - -static inline pte_t pte_create(uintptr_t ppn, int type) -{ - return (ppn << PTE_PPN_SHIFT) | PTE_V | type; -} - -static inline pte_t ptd_create(uintptr_t ppn) -{ - return pte_create(ppn, PTE_V); -} - -#endif diff --git a/libraries/NEMU/resource/debian/README.md b/libraries/NEMU/resource/debian/README.md deleted file mode 100644 index 41cc384..0000000 --- a/libraries/NEMU/resource/debian/README.md +++ /dev/null @@ -1,158 +0,0 @@ - -# riscv64 debian镜像制作 - -制作需要`qemu-riscv64-static`, 建议在debian 10或ubuntu 19.04的系统(可尝试使用docker)中进行操作. - -* 创建空镜像和分区 -``` -dd if=/dev/zero of=debian.img bs=1G count=16 # 此处镜像大小为16GB -sudo cfdisk debian.img # 可创建两个分区, 第一个分区12GB作为rootfs, 第二个分区4GB作为swap -sudo losetup --partscan --show --find debian.img # 将debian.img作为loop设备 -ls /dev/loop0* # 此时应该能看到/dev/loop0p1和/dev/loop0p2两个分区 -``` - -* 创建ext4和swap文件系统 -``` -sudo mkfs.ext4 /dev/loop0p1 -sudo mkswap /dev/loop0p2 -``` - -* 挂载ext4分区 -``` -sudo mount /dev/loop0p1 /mnt -``` - -* 安装debian base system. -下面两条命令的操作来自[debian社区的安装指南](https://wiki.debian.org/RISC-V#debootstrap). -``` -sudo apt-get install debootstrap qemu-user-static binfmt-support debian-ports-archive-keyring -sudo debootstrap --arch=riscv64 --keyring /usr/share/keyrings/debian-ports-archive-keyring.gpg --include=debian-ports-archive-keyring unstable /mnt http://deb.debian.org/debian-ports -``` -若要安装x86系统, 则输入 -``` -sudo debootstrap --arch=i386 --keyring /usr/share/keyrings/debian-archive-keyring.gpg --include=debian-archive-keyring stable /mnt http://deb.debian.org/debian -``` - -* 进入镜像 -``` -sudo chroot /mnt /bin/bash -``` -此时实际上是通过`qemu-riscv64-static`来执行镜像中的riscv64可执行文件. - -* 安装所需工具(根据实际情况选择) -``` -apt-get update -apt-get install gcc build-essential -apt-get install tmux libreadline-dev -apt-get install net-tools openssh-server -# fix long delay of openssh server -apt-get install haveged -agt-get install sbt -``` - -* 在`/etc/fstab`中添加swap分区 -``` -/dev/mmcblk0p2 none swap sw 0 0 -``` - -* 添加/root/目录的写和执行权限, 使得host上的普通用户可以访问 -``` -chmod +w,+x /root -``` - -* 在/root/目录下提前写入所需的测试文件, 如hello.c等. - -* 在/root/.bashrc中添加如下内容, 可以实现登录后自动运行命令(根据实际情况修改测试的命令): -``` -TMP_DIR=/run/mytest - -cmd=( -# enbale swap - "swapon -a" - -# show system information - "uname -a" - "cat /etc/issue" - "cat /proc/cpuinfo" - "df -ah" - "free -h" - -# show time - "date" - "uptime" - -# create and switch to tmp directory - "mkdir $TMP_DIR" - "cd $TMP_DIR" - -# compile and run hello - "ls /root" - "ls /root/hello" - "cat /root/hello/hello.c" - "gcc -time /root/hello/hello.c -o $TMP_DIR/hello" - "ls -lh $TMP_DIR" - "$TMP_DIR/hello" - -# compile and run x86-nemu - "ls /root/nemu" - "cp -r /root/nemu $TMP_DIR" - "export NEMU_HOME=$TMP_DIR/nemu" - "make -C $TMP_DIR/nemu ISA=x86" - "ls -lh /root/nemu-prog" - "file /root/nemu-prog/amtest-x86-nemu.elf" - "$TMP_DIR/nemu/build/x86-nemu --batch --mainargs=h /root/nemu-prog/amtest-x86-nemu.bin" - "file /root/nemu-prog/microbench-x86-nemu.elf" - "$TMP_DIR/nemu/build/x86-nemu --batch --mainargs=test /root/nemu-prog/microbench-x86-nemu.bin" - -# compile and run riscv64-nemu - "make -C $TMP_DIR/nemu clean" - "make -C $TMP_DIR/nemu ISA=riscv64" - "$TMP_DIR/nemu/build/riscv64-nemu --batch /root/nemu-prog/linux-hello-riscv64-nemu.bin" -) - -prompt="`whoami`@`hostname`:`pwd`#" - -echo -e "\n============ Now running preset commands =============\n" - -for ((i = 0; i < ${#cmd[@]}; i++)); do - c=${cmd[$i]} - echo "$prompt $c" - $c - echo "" -done - -echo -e "\n============ End of preset commands =============\n" - -/root/nemutrap/good-trap -``` - -* 若在不方便输入的环境(如NEMU, verilator仿真等)中测试, 可采用如下两种方式的其中一种, 避免登录时输入 - * 通过紧急模式登录 -``` -cd /lib/systemd/system -# 通过紧急模式登录, 不启动非必须的服务, 节省将近一半的登录时间 -ln -sf emergency.target default.target -# 跳过登录提示符, 直接运行bash -vim emergency.service - -ExecStart=-/lib/systemd/systemd-sulogin-shell emergency - +ExecStart=-/bin/bash -``` - * 免密码登录, 见[这里](https://superuser.com/questions/969923/automatic-root-login-in-debian-8-0-console-only) -``` -cd /lib/systemd/system -vim serial-getty@.service - -ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,57600,38400,9600 %I $TERM - +ExecStart=-/sbin/agetty -a root --keep-baud 115200,57600,38400,9600 %I $TERM -``` - -* 退出并卸载镜像 -``` -exit # 之前通过`chroot`方式进入 -sudo umount /mnt # 记得卸载! 在未卸载镜像的情况下通过可写方式再次打开`debian.img`(如作为qemu的文件系统), 镜像将会损坏! -sudo losetup -d /dev/loop0 # 删除loop设备 -``` - -* 修改`nemu/src/device/sdcard.c`中`init_sdcard()`中打开的镜像文件路径, 即可使用制作的镜像. -在i9-9900k上测试, 约90s后看到debian的登录提示符. - -* 当以可写方式启动镜像是, NEMU遇到错误或通过Ctrl+C直接退出NEMU时, 可能会损坏镜像的崩溃一致性, 此时可以通过fsck命令修复分区. diff --git a/libraries/NEMU/resource/mips-elf/README.md b/libraries/NEMU/resource/mips-elf/README.md deleted file mode 100644 index 57578e8..0000000 --- a/libraries/NEMU/resource/mips-elf/README.md +++ /dev/null @@ -1 +0,0 @@ -This is a dummy ELF file used by qemu-system-mips32 to start. diff --git a/libraries/NEMU/resource/sdcard/README.md b/libraries/NEMU/resource/sdcard/README.md deleted file mode 100644 index 80324e0..0000000 --- a/libraries/NEMU/resource/sdcard/README.md +++ /dev/null @@ -1,58 +0,0 @@ - -# NEMU sdhost驱动 - -本驱动裁剪自`linux/drivers/mmc/host/bcm2835.c`, 去除了DMA和中断, 改成直接轮询, 处理器无需支持DMA和中断即可运行. - -## 使用方法 - -* 将本目录下的`nemu.c`复制到`linux/drivers/mmc/host/`目录下 -* 在`linux/drivers/mmc/host/Makefile`中添加一行`obj-y += nemu.o` -* 在menuconfig中取消`General setup -> Initial RAM filesystem and RAM disk (initramfs/initrd) support` -* 在menuconfig中选中`Device Drivers -> MMC/SD/SDIO card support` -* 在dts中加入以下节点 -``` -/ { - soc { - sdhci: mmc { - compatible = "nemu-sdhost"; - reg = <0x0 0xa3000000 0x0 0x1000>; - }; - }; - - chosen { - bootargs = "root=/dev/mmcblk0p1 rootfstype=ext4 ro rootwait earlycon"; - }; -}; -``` - -## 在没有中断的处理器上访问SD卡 - -访问真实的SD卡需要等待一定的延迟, 这需要处理器的中断机制对内核支持计时的功能. -在没有中断机制的处理器上, 我们可以修改内核的部分代码, 使得无需等待这些延迟, -来达到确定性可重复的仿真效果. - -具体只需修改以下文件: -```diff ---- linux/drivers/mmc/core/block.c -+++ linux/drivers/mmc/core/block.c -@@ -983,6 +983,7 @@ static int card_busy_detect(struct mmc_card *card, unsigned int timeout_ms, - int err = 0; - u32 status; - -+ return err; - do { - bool done = time_after(jiffies, timeout); - ---- linux/drivers/mmc/core/core.h -+++ linux/drivers/mmc/core/core.h -@@ -64,6 +64,7 @@ void mmc_set_initial_state(struct mmc_host *host); - - static inline void mmc_delay(unsigned int ms) - { -+ return; - if (ms <= 20) - usleep_range(ms * 1000, ms * 1250); - else -``` - -注意: 上述修改仅能用于模拟和仿真, 修改后将不能在真实的SD卡上运行!!! diff --git a/libraries/NEMU/resource/sdcard/nemu.c b/libraries/NEMU/resource/sdcard/nemu.c deleted file mode 100644 index 8c823fa..0000000 --- a/libraries/NEMU/resource/sdcard/nemu.c +++ /dev/null @@ -1,542 +0,0 @@ -/* - * NEMU (NJU Emulator) sdhost driver. - * - * Author: Zihao Yu - * - * Based on - * bcm2835.c by Phil Elwell - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#define SDCMD 0x00 /* Command to SD card - 16 R/W */ -#define SDARG 0x04 /* Argument to SD card - 32 R/W */ -#define SDTOUT 0x08 /* Start value for timeout counter - 32 R/W */ -#define SDCDIV 0x0c /* Start value for clock divider - 11 R/W */ -#define SDRSP0 0x10 /* SD card response (31:0) - 32 R */ -#define SDRSP1 0x14 /* SD card response (63:32) - 32 R */ -#define SDRSP2 0x18 /* SD card response (95:64) - 32 R */ -#define SDRSP3 0x1c /* SD card response (127:96) - 32 R */ -#define SDHSTS 0x20 /* SD host status - 11 R/W */ -#define SDVDD 0x30 /* SD card power control - 1 R/W */ -#define SDEDM 0x34 /* Emergency Debug Mode - 13 R/W */ -#define SDHCFG 0x38 /* Host configuration - 2 R/W */ -#define SDHBCT 0x3c /* Host byte count (debug) - 32 R/W */ -#define SDDATA 0x40 /* Data to/from SD card - 32 R/W */ -#define SDHBLC 0x50 /* Host block count (SDIO/SDHC) - 9 R/W */ - -#define SDCMD_NEW_FLAG 0x8000 -#define SDCMD_FAIL_FLAG 0x4000 -#define SDCMD_BUSYWAIT 0x800 -#define SDCMD_NO_RESPONSE 0x400 -#define SDCMD_LONG_RESPONSE 0x200 -#define SDCMD_WRITE_CMD 0x80 -#define SDCMD_READ_CMD 0x40 -#define SDCMD_CMD_MASK 0x3f - -#define SDCDIV_MAX_CDIV 0x7ff - -#define SDDATA_FIFO_WORDS 16 - -#define FIFO_READ_THRESHOLD 4 -#define FIFO_WRITE_THRESHOLD 4 -#define SDDATA_FIFO_PIO_BURST 8 - -#define PIO_THRESHOLD 1 /* Maximum block count for PIO (0 = always DMA) */ - -struct nemu_host { - spinlock_t lock; - struct mutex mutex; - - void __iomem *ioaddr; - u32 phys_addr; - - struct mmc_host *mmc; - struct platform_device *pdev; - - int clock; /* Current clock speed */ - unsigned int max_clk; /* Max possible freq */ - struct sg_mapping_iter sg_miter; /* SG state for PIO */ - unsigned int blocks; /* remaining PIO blocks */ - - struct mmc_request *mrq; /* Current request */ - struct mmc_command *cmd; /* Current command */ - struct mmc_data *data; /* Current data request */ - bool data_complete:1;/* Data finished before cmd */ - bool use_sbc:1; /* Send CMD23 */ -}; - -static void nemu_reset(struct mmc_host *mmc) -{ -} - -static void nemu_finish_command(struct nemu_host *host); - -static void nemu_transfer_block_pio(struct nemu_host *host, bool is_read) -{ - unsigned long flags; - size_t blksize; - - blksize = host->data->blksz; - - local_irq_save(flags); - - while (blksize) { - int copy_words; - size_t len; - u32 *buf; - - if (!sg_miter_next(&host->sg_miter)) { - host->data->error = -EINVAL; - break; - } - - len = min(host->sg_miter.length, blksize); - if (len % 4) { - host->data->error = -EINVAL; - break; - } - - blksize -= len; - host->sg_miter.consumed = len; - - buf = (u32 *)host->sg_miter.addr; - - copy_words = len / 4; - - while (copy_words) { - int burst_words, words; - u32 edm; - - burst_words = min(SDDATA_FIFO_PIO_BURST, copy_words); - edm = (8 << 4); - if (is_read) - words = ((edm >> 4) & 0x1f); - else - words = SDDATA_FIFO_WORDS - ((edm >> 4) & 0x1f); - - if (words < burst_words) { - continue; - } else if (words > copy_words) { - words = copy_words; - } - - copy_words -= words; - - while (words) { - if (is_read) - *(buf++) = readl(host->ioaddr + SDDATA); - else - writel(*(buf++), host->ioaddr + SDDATA); - words--; - } - } - } - - sg_miter_stop(&host->sg_miter); - - local_irq_restore(flags); -} - -static void nemu_transfer_pio(struct nemu_host *host) -{ - bool is_read = (host->data->flags & MMC_DATA_READ) != 0; - nemu_transfer_block_pio(host, is_read); -} - -static -void nemu_prepare_data(struct nemu_host *host, struct mmc_command *cmd) -{ - struct mmc_data *data = cmd->data; - int flags = SG_MITER_ATOMIC; - - WARN_ON(host->data); - - host->data = data; - if (!data) - return; - - host->data_complete = false; - host->data->bytes_xfered = 0; - - /* Use PIO */ - if (data->flags & MMC_DATA_READ) - flags |= SG_MITER_TO_SG; - else - flags |= SG_MITER_FROM_SG; - sg_miter_start(&host->sg_miter, data->sg, data->sg_len, flags); - host->blocks = data->blocks; -} - -static void nemu_finish_request(struct nemu_host *host) -{ - struct mmc_request *mrq; - - mrq = host->mrq; - - host->mrq = NULL; - host->cmd = NULL; - host->data = NULL; - - mmc_request_done(host->mmc, mrq); -} - -static -bool nemu_send_command(struct nemu_host *host, struct mmc_command *cmd) -{ - u32 sdcmd; - - WARN_ON(host->cmd); - - host->cmd = cmd; - - nemu_prepare_data(host, cmd); - - writel(cmd->arg, host->ioaddr + SDARG); - - sdcmd = cmd->opcode & SDCMD_CMD_MASK; - - if (!(cmd->flags & MMC_RSP_PRESENT)) { - sdcmd |= SDCMD_NO_RESPONSE; - } else { - if (cmd->flags & MMC_RSP_136) - sdcmd |= SDCMD_LONG_RESPONSE; - if (cmd->flags & MMC_RSP_BUSY) { - sdcmd |= SDCMD_BUSYWAIT; - } - } - - if (cmd->data) { - if (cmd->data->flags & MMC_DATA_WRITE) { - sdcmd |= SDCMD_WRITE_CMD; - } - if (cmd->data->flags & MMC_DATA_READ) - sdcmd |= SDCMD_READ_CMD; - } - - writel(sdcmd | SDCMD_NEW_FLAG, host->ioaddr + SDCMD); - - return true; -} - -static void nemu_transfer_complete(struct nemu_host *host) -{ - struct mmc_data *data; - - WARN_ON(!host->data_complete); - - data = host->data; - host->data = NULL; - - /* Need to send CMD12 if - - * a) open-ended multiblock transfer (no CMD23) - * b) error in multiblock transfer - */ - if (host->mrq->stop && (data->error || !host->use_sbc)) { - if (nemu_send_command(host, host->mrq->stop)) { - nemu_finish_command(host); - } - } else { - nemu_finish_request(host); - } -} - -static void nemu_finish_data(struct nemu_host *host) -{ - struct device *dev = &host->pdev->dev; - struct mmc_data *data; - - data = host->data; - - data->bytes_xfered = data->error ? 0 : (data->blksz * data->blocks); - - host->data_complete = true; - - if (host->cmd) { - /* Data managed to finish before the - * command completed. Make sure we do - * things in the proper order. - */ - dev_dbg(dev, "Finished early - HSTS %08x\n", - readl(host->ioaddr + SDHSTS)); - } else { - nemu_transfer_complete(host); - } -} - -static void nemu_finish_command(struct nemu_host *host) -{ - struct mmc_command *cmd = host->cmd; - int i; - - if (cmd->flags & MMC_RSP_PRESENT) { - if (cmd->flags & MMC_RSP_136) { - for (i = 0; i < 4; i++) { - cmd->resp[3 - i] = - readl(host->ioaddr + SDRSP0 + i * 4); - } - } else { - cmd->resp[0] = readl(host->ioaddr + SDRSP0); - } - } - - if (cmd == host->mrq->sbc) { - /* Finished CMD23, now send actual command. */ - host->cmd = NULL; - if (nemu_send_command(host, host->mrq->cmd)) { - if (host->data) { - // start PIO right now - for (i = 0; i < host->data->blocks; i ++) { - nemu_transfer_pio(host); - } - - nemu_finish_data(host); - } - - nemu_finish_command(host); - } - } else if (cmd == host->mrq->stop) { - /* Finished CMD12 */ - nemu_finish_request(host); - } else { - /* Processed actual command. */ - host->cmd = NULL; - if (!host->data) { - nemu_finish_request(host); - } - else if (host->data_complete) { - nemu_transfer_complete(host); - } - } -} - -static void nemu_request(struct mmc_host *mmc, struct mmc_request *mrq) -{ - struct nemu_host *host = mmc_priv(mmc); - struct device *dev = &host->pdev->dev; - - /* Reset the error statuses in case this is a retry */ - if (mrq->sbc) - mrq->sbc->error = 0; - if (mrq->cmd) - mrq->cmd->error = 0; - if (mrq->data) - mrq->data->error = 0; - if (mrq->stop) - mrq->stop->error = 0; - - if (mrq->data && !is_power_of_2(mrq->data->blksz)) { - dev_err(dev, "unsupported block size (%d bytes)\n", - mrq->data->blksz); - - if (mrq->cmd) - mrq->cmd->error = -EINVAL; - - mmc_request_done(mmc, mrq); - return; - } - - mutex_lock(&host->mutex); - - WARN_ON(host->mrq); - host->mrq = mrq; - - host->use_sbc = !!mrq->sbc && host->mrq->data && - (host->mrq->data->flags & MMC_DATA_READ); - if (host->use_sbc) { - if (nemu_send_command(host, mrq->sbc)) { - nemu_finish_command(host); - } - } else if (mrq->cmd && nemu_send_command(host, mrq->cmd)) { - if (host->data) { - int i; - // start PIO right now - for (i = 0; i < host->data->blocks; i ++) { - nemu_transfer_pio(host); - } - nemu_finish_data(host); - } - - nemu_finish_command(host); - } - - mutex_unlock(&host->mutex); -} - -static void nemu_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) -{ -} - -static const struct mmc_host_ops nemu_ops = { - .request = nemu_request, - .set_ios = nemu_set_ios, - .hw_reset = nemu_reset, -}; - -static int nemu_add_host(struct nemu_host *host) -{ - struct mmc_host *mmc = host->mmc; - struct device *dev = &host->pdev->dev; - int ret; - - if (!mmc->f_max || mmc->f_max > host->max_clk) - mmc->f_max = host->max_clk; - mmc->f_min = host->max_clk / SDCDIV_MAX_CDIV; - - mmc->max_busy_timeout = ~0 / (mmc->f_max / 1000); - - dev_dbg(dev, "f_max %d, f_min %d, max_busy_timeout %d\n", - mmc->f_max, mmc->f_min, mmc->max_busy_timeout); - - /* host controller capabilities */ - mmc->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED | - MMC_CAP_NEEDS_POLL | MMC_CAP_HW_RESET | MMC_CAP_ERASE | - MMC_CAP_CMD23; - - spin_lock_init(&host->lock); - mutex_init(&host->mutex); - - mmc->max_segs = 128; - mmc->max_req_size = 524288; - mmc->max_seg_size = mmc->max_req_size; - mmc->max_blk_size = 1024; - mmc->max_blk_count = 65535; - - /* report supported voltage ranges */ - mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; - - ret = mmc_add_host(mmc); - if (ret) { - return ret; - } - - dev_info(dev, "loaded - DMA %s\n", "disabled"); - - return 0; -} - -static int nemu_probe(struct platform_device *pdev) -{ - struct device *dev = &pdev->dev; - struct resource *iomem; - struct nemu_host *host; - struct mmc_host *mmc; - const __be32 *regaddr_p; - int ret; - - dev_dbg(dev, "%s\n", __func__); - mmc = mmc_alloc_host(sizeof(*host), dev); - if (!mmc) - return -ENOMEM; - - mmc->ops = &nemu_ops; - host = mmc_priv(mmc); - host->mmc = mmc; - host->pdev = pdev; - spin_lock_init(&host->lock); - - iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0); - host->ioaddr = devm_ioremap_resource(dev, iomem); - if (IS_ERR(host->ioaddr)) { - ret = PTR_ERR(host->ioaddr); - goto err; - } - - /* Parse OF address directly to get the physical address for - * DMA to our registers. - */ - regaddr_p = of_get_address(pdev->dev.of_node, 0, NULL, NULL); - if (!regaddr_p) { - dev_err(dev, "Can't get phys address\n"); - ret = -EINVAL; - goto err; - } - - host->phys_addr = be32_to_cpup(regaddr_p); - - host->max_clk = 1000000; //clk_get_rate(clk); - - ret = mmc_of_parse(mmc); - if (ret) - goto err; - - ret = nemu_add_host(host); - if (ret) - goto err; - - platform_set_drvdata(pdev, host); - - dev_dbg(dev, "%s -> OK\n", __func__); - - return 0; - -err: - dev_dbg(dev, "%s -> err %d\n", __func__, ret); - mmc_free_host(mmc); - - return ret; -} - -static int nemu_remove(struct platform_device *pdev) -{ - struct nemu_host *host = platform_get_drvdata(pdev); - - mmc_remove_host(host->mmc); - - mmc_free_host(host->mmc); - platform_set_drvdata(pdev, NULL); - - return 0; -} - -static const struct of_device_id nemu_match[] = { - { .compatible = "nemu-sdhost" }, - { } -}; -MODULE_DEVICE_TABLE(of, nemu_match); - -static struct platform_driver nemu_driver = { - .probe = nemu_probe, - .remove = nemu_remove, - .driver = { - .name = "sdhost-nemu", - .of_match_table = nemu_match, - }, -}; -module_platform_driver(nemu_driver); - -MODULE_ALIAS("platform:sdhost-nemu"); -MODULE_DESCRIPTION("NEMU SDHost driver"); -MODULE_LICENSE("GPL v2"); -MODULE_AUTHOR("Zihao Yu"); diff --git a/libraries/NEMU/resource/softfloat/.gitignore b/libraries/NEMU/resource/softfloat/.gitignore deleted file mode 100644 index 7d37f1a..0000000 --- a/libraries/NEMU/resource/softfloat/.gitignore +++ /dev/null @@ -1 +0,0 @@ -repo/ diff --git a/libraries/NEMU/scripts/build.mk b/libraries/NEMU/scripts/build.mk deleted file mode 100644 index d055a65..0000000 --- a/libraries/NEMU/scripts/build.mk +++ /dev/null @@ -1,50 +0,0 @@ -.DEFAULT_GOAL = app - -ifdef SHARE -SO = -so -CFLAGS += -fPIC -D_SHARE=1 -LDFLAGS += -rdynamic -shared -fPIC -Wl,--no-undefined -endif - -WORK_DIR = $(shell pwd) -BUILD_DIR = $(WORK_DIR)/build - -INC_DIR += $(WORK_DIR)/include $(NEMU_HOME)/lib-include -OBJ_DIR = $(BUILD_DIR)/obj-$(NAME)$(SO) -BINARY = $(BUILD_DIR)/$(NAME)$(SO) - -CC ?= gcc - -CCACHE := $(if $(shell which ccache),ccache,) - -# Compilation flags -CC := $(CCACHE) $(CC) -LD := $(CCACHE) $(CC) -INCLUDES = $(addprefix -I, $(INC_DIR)) -CFLAGS := -O2 -MMD -Wall -Werror $(INCLUDES) $(CFLAGS) -LDFLAGS := -O2 $(LDFLAGS) - -OBJS = $(SRCS:%.c=$(OBJ_DIR)/%.o) - -# Compilation patterns -$(OBJ_DIR)/%.o: %.c - @echo + CC $< - @mkdir -p $(dir $@) - @$(CC) $(CFLAGS) $(SO_CFLAGS) -c -o $@ $< - $(call call_fixdep, $(@:.o=.d), $@) - -# Depencies --include $(OBJS:.o=.d) - -# Some convenient rules - -.PHONY: app clean - -app: $(BINARY) - -$(BINARY): $(OBJS) $(LIBS) - @echo + LD $@ - @$(LD) -o $@ $(OBJS) $(LDFLAGS) $(LIBS) - -clean: - -rm -rf $(BUILD_DIR) diff --git a/libraries/NEMU/scripts/config.mk b/libraries/NEMU/scripts/config.mk deleted file mode 100644 index c96e61d..0000000 --- a/libraries/NEMU/scripts/config.mk +++ /dev/null @@ -1,55 +0,0 @@ -COLOR_RED := $(shell echo "\033[1;31m") -COLOR_END := $(shell echo "\033[0m") - -ifeq ($(wildcard .config),) -$(warning $(COLOR_RED)Warning: .config does not exists!$(COLOR_END)) -$(warning $(COLOR_RED)To build the porject, first run 'make menuconfig'.$(COLOR_END)) -endif - -Q := @ -KCONFIG_PATH := $(NEMU_HOME)/tools/kconfig -FIXDEP_PATH := $(NEMU_HOME)/tools/fixdep -Kconfig := $(NEMU_HOME)/Kconfig -rm-distclean += include/generated include/config .config .config.old -silent := -s - -CONF := $(KCONFIG_PATH)/build/conf -MCONF := $(KCONFIG_PATH)/build/mconf -FIXDEP := $(FIXDEP_PATH)/build/fixdep - -$(CONF): - $(Q)$(MAKE) $(silent) -C $(KCONFIG_PATH) NAME=conf - -$(MCONF): - $(Q)$(MAKE) $(silent) -C $(KCONFIG_PATH) NAME=mconf - -$(FIXDEP): - $(Q)$(MAKE) $(silent) -C $(FIXDEP_PATH) - -menuconfig: $(MCONF) $(CONF) $(FIXDEP) - $(Q)$(MCONF) $(Kconfig) - $(Q)$(CONF) $(silent) --syncconfig $(Kconfig) - -savedefconfig: $(CONF) - $(Q)$< $(silent) --$@=configs/defconfig $(Kconfig) - -%defconfig: $(CONF) $(FIXDEP) - $(Q)$< $(silent) --defconfig=configs/$@ $(Kconfig) - $(Q)$< $(silent) --syncconfig $(Kconfig) - -.PHONY: menuconfig savedefconfig defconfig - -# Help text used by make help -help: - @echo ' menuconfig - Update current config utilising a menu based program' - @echo ' savedefconfig - Save current config as configs/defconfig (minimal config)' - -distclean: clean - -@rm -rf $(rm-distclean) - -.PHONY: help distclean - -define call_fixdep - @$(FIXDEP) $(1) $(2) unused > $(1).tmp - @mv $(1).tmp $(1) -endef diff --git a/libraries/NEMU/scripts/git.mk b/libraries/NEMU/scripts/git.mk deleted file mode 100644 index 673937d..0000000 --- a/libraries/NEMU/scripts/git.mk +++ /dev/null @@ -1,21 +0,0 @@ -STUID = 191220000 -STUNAME = 张三 - -# DO NOT modify the following code!!! - -GITFLAGS = -q --author='tracer-ics2020 ' --no-verify --allow-empty - -#ifndef __ICS_EXPORT -ifdef __NOT_DEFINED -#else -# prototype: git_commit(msg) -define git_commit - -@git add $(NEMU_HOME)/.. -A --ignore-errors - -@while (test -e .git/index.lock); do sleep 0.1; done - -@(echo "> $(1)" && echo $(STUID) && hostnamectl && uptime) | git commit -F - $(GITFLAGS) - -@sync -endef -#endif -#ifndef __ICS_EXPORT -endif -#endif diff --git a/libraries/NEMU/scripts/isa.mk b/libraries/NEMU/scripts/isa.mk deleted file mode 100644 index a39ab38..0000000 --- a/libraries/NEMU/scripts/isa.mk +++ /dev/null @@ -1,7 +0,0 @@ -ISA ?= x86 -ISAS = $(shell ls $(NEMU_HOME)/src/isa/) -ifeq ($(filter $(ISAS), $(ISA)), ) # ISA must be valid -$(error Invalid ISA=$(ISA). Supported: $(ISAS)) -endif -NAME := $(ISA)-$(NAME) -CFLAGS += -D__ISA_$(ISA)__=1 diff --git a/libraries/NEMU/scripts/runall.sh b/libraries/NEMU/scripts/runall.sh deleted file mode 100644 index 7b2d891..0000000 --- a/libraries/NEMU/scripts/runall.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -ISA=${1#*ISA=} -CPUTEST_PATH=$NEMU_HOME/../am-kernels/tests/cpu-tests - -echo "compiling NEMU..." -if make -C $NEMU_HOME ISA=$ISA; then - echo "NEMU compile OK" -else - echo "NEMU compile error... exit..." - exit -fi - -echo "compiling testcases..." -if make -C $CPUTEST_PATH ARCH=$ISA-nemu &> /dev/null; then - echo "testcases compile OK" -else - echo "testcases compile error... exit..." - exit -fi - -files=`ls $CPUTEST_PATH/build/*-$ISA-nemu.bin` -ori_log="$NEMU_HOME/build/nemu-log.txt" - -for file in $files; do - base=`basename $file | sed -e "s/-$ISA-nemu.bin//"` - printf "[%14s] " $base - logfile=$NEMU_HOME/build/$base-log.txt - make -C $NEMU_HOME ISA=$ISA run ARGS="-b -l $ori_log $file" &> $logfile - - if (grep 'nemu: .*HIT GOOD TRAP' $logfile > /dev/null) then - echo -e "\033[1;32mPASS!\033[0m" - rm $logfile - else - echo -e "\033[1;31mFAIL!\033[0m see $logfile for more information" - if (test -e $ori_log) then - echo -e "\n\n===== the original log.txt =====\n" >> $logfile - cat $ori_log >> $logfile - fi - fi -done diff --git a/libraries/NEMU/src/cpu/cpu-exec.c b/libraries/NEMU/src/cpu/cpu-exec.c deleted file mode 100644 index 687b315..0000000 --- a/libraries/NEMU/src/cpu/cpu-exec.c +++ /dev/null @@ -1,324 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -/* The assembly code of instructions executed is only output to the screen - * when the number of instructions executed is less than this value. - * This is useful when you use the `si' command. - * You can modify this value as you want. - */ -#define MAX_INSTR_TO_PRINT 10 -#ifndef CONFIG_SHARE -#define BATCH_SIZE 65536 -#else -#define BATCH_SIZE 1 -#endif - -CPU_state cpu = {}; -uint64_t g_nr_guest_instr = 0; -static uint64_t g_timer = 0; // unit: us -static bool g_print_step = false; -const rtlreg_t rzero = 0; -rtlreg_t tmp_reg[4]; - -#ifdef CONFIG_DEBUG -static inline void debug_hook(vaddr_t pc, const char *asmbuf) { - log_write("%s\n", asmbuf); - if (g_print_step) { puts(asmbuf); } - - void scan_watchpoint(vaddr_t pc); - scan_watchpoint(pc); -} -#endif - -static jmp_buf jbuf_exec = {}; -static uint64_t n_remain_total; -static int n_remain; -static Decode *prev_s; - -void save_globals(Decode *s) { - IFDEF(CONFIG_PERF_OPT, prev_s = s); -} - -static void update_instr_cnt() { -#if defined(CONFIG_ENABLE_INSTR_CNT) - int n_batch = n_remain_total >= BATCH_SIZE ? BATCH_SIZE : n_remain_total; - uint32_t n_executed = n_batch - n_remain; - n_remain_total -= (n_remain_total > n_executed) ? n_executed : n_remain_total; - IFNDEF(CONFIG_DEBUG, g_nr_guest_instr += n_executed); - n_remain = n_batch; // clean n_remain -#endif -} - -void monitor_statistic() { - update_instr_cnt(); - setlocale(LC_NUMERIC, ""); - Log("host time spent = %'ld us", g_timer); -#ifdef CONFIG_ENABLE_INSTR_CNT - Log("total guest instructions = %'ld", g_nr_guest_instr); - if (g_timer > 0) Log("simulation frequency = %'ld instr/s", g_nr_guest_instr * 1000000 / g_timer); - else Log("Finish running in less than 1 us and can not calculate the simulation frequency"); -#else - Log("CONFIG_ENABLE_INSTR_CNT is not defined"); -#endif -} - -static word_t g_ex_cause = 0; -static int g_sys_state_flag = 0; - -void set_sys_state_flag(int flag) { - g_sys_state_flag |= flag; -} - -void mmu_tlb_flush(vaddr_t vaddr) { - hosttlb_flush(vaddr); - if (vaddr == 0) set_sys_state_flag(SYS_STATE_FLUSH_TCACHE); -} - -void longjmp_exec(int cause) { - longjmp(jbuf_exec, cause); -} - -void longjmp_exception(int ex_cause) { -#ifdef CONFIG_GUIDED_EXEC - cpu.guided_exec = false; -#endif - g_ex_cause = ex_cause; - longjmp_exec(NEMU_EXEC_EXCEPTION); -} - -#ifdef CONFIG_PERF_OPT -#define FILL_EXEC_TABLE(name) [concat(EXEC_ID_, name)] = &&concat(exec_, name), - -#define rtl_j(s, target) do { \ - IFDEF(CONFIG_ENABLE_INSTR_CNT, n -= s->idx_in_bb); \ - s = s->tnext; \ - goto end_of_bb; \ -} while (0) -#define rtl_jr(s, target) do { \ - IFDEF(CONFIG_ENABLE_INSTR_CNT, n -= s->idx_in_bb); \ - s = jr_fetch(s, *(target)); \ - goto end_of_bb; \ -} while (0) -#define rtl_jrelop(s, relop, src1, src2, target) do { \ - IFDEF(CONFIG_ENABLE_INSTR_CNT, n -= s->idx_in_bb); \ - if (interpret_relop(relop, *src1, *src2)) s = s->tnext; \ - else s = s->ntnext; \ - goto end_of_bb; \ -} while (0) - -#define rtl_priv_next(s) do { \ - if (g_sys_state_flag) { \ - s = (g_sys_state_flag & SYS_STATE_FLUSH_TCACHE) ? \ - tcache_handle_flush(s->snpc) : s + 1; \ - g_sys_state_flag = 0; \ - goto end_of_loop; \ - } \ -} while (0) - -#define rtl_priv_jr(s, target) do { \ - IFDEF(CONFIG_ENABLE_INSTR_CNT, n -= s->idx_in_bb); \ - s = jr_fetch(s, *(target)); \ - if (g_sys_state_flag & SYS_STATE_FLUSH_TCACHE) { \ - s = tcache_handle_flush(s->pc); \ - g_sys_state_flag = 0; \ - } \ - goto end_of_loop; \ -} while (0) - -static const void **g_exec_table; - -Decode* tcache_jr_fetch(Decode *s, vaddr_t jpc); -Decode* tcache_decode(Decode *s); -void tcache_handle_exception(vaddr_t jpc); -Decode* tcache_handle_flush(vaddr_t snpc); - -static inline -Decode* jr_fetch(Decode *s, vaddr_t target) { - if (likely(s->tnext->pc == target)) return s->tnext; - if (likely(s->ntnext->pc == target)) return s->ntnext; - return tcache_jr_fetch(s, target); -} - -static inline void debug_difftest(Decode *_this, Decode *next) { - IFDEF(CONFIG_IQUEUE, iqueue_commit(_this->pc, (void *)&_this->isa.instr.val, _this->snpc - _this->pc)); - IFDEF(CONFIG_DEBUG, debug_hook(_this->pc, _this->logbuf)); - IFDEF(CONFIG_DIFFTEST, save_globals(next)); - IFDEF(CONFIG_DIFFTEST, cpu.pc = next->pc); - IFDEF(CONFIG_DIFFTEST, difftest_step(_this->pc, next->pc)); -} - -static int execute(int n) { - static const void* local_exec_table[TOTAL_INSTR] = { - MAP(INSTR_LIST, FILL_EXEC_TABLE) - }; - static int init_flag = 0; - Decode *s = prev_s; - - if (likely(init_flag == 0)) { - g_exec_table = local_exec_table; - extern Decode* tcache_init(const void *exec_nemu_decode, vaddr_t reset_vector); - s = tcache_init(&&exec_nemu_decode, cpu.pc); - IFDEF(CONFIG_MODE_SYSTEM, hosttlb_init()); - init_flag = 1; - } - - __attribute__((unused)) Decode *this_s = NULL; - while (true) { -#if defined(CONFIG_DEBUG) || defined(CONFIG_DIFFTEST) || defined(CONFIG_IQUEUE) - this_s = s; -#endif - __attribute__((unused)) rtlreg_t ls0, ls1, ls2; - - goto *(s->EHelper); - -#undef s0 -#undef s1 -#undef s2 -#define s0 &ls0 -#define s1 &ls1 -#define s2 &ls2 - -#include "isa-exec.h" - -def_EHelper(nemu_decode) { - s = tcache_decode(s); -#ifdef XIANGSHAN_DEBUG - printf("[NEMU] exec pc = 0x%lx\n", s->pc); -#endif - continue; -} - -end_of_bb: - IFDEF(CONFIG_ENABLE_INSTR_CNT, n_remain = n); - IFNDEF(CONFIG_ENABLE_INSTR_CNT, n --); - if (unlikely(n <= 0)) break; - - def_finish(); - debug_difftest(this_s, s); - } - -end_of_loop: - debug_difftest(this_s, s); - prev_s = s; - return n; -} -#else -#define FILL_EXEC_TABLE(name) [concat(EXEC_ID_, name)] = concat(exec_, name), - -#define rtl_priv_next(s) -#define rtl_priv_jr(s, target) rtl_jr(s, target) - -#include "isa-exec.h" -static const void* g_exec_table[TOTAL_INSTR] = { - MAP(INSTR_LIST, FILL_EXEC_TABLE) -}; - -static int execute(int n) { - static Decode s; - prev_s = &s; - for (;n > 0; n --) { - fetch_decode(&s, cpu.pc); - cpu.pc = s.snpc; -#ifdef XIANGSHAN_DEBUG - printf("[NEMU] exec pc = 0x%lx\n", s.pc); -#endif - s.EHelper(&s); - g_nr_guest_instr ++; - IFDEF(CONFIG_DEBUG, debug_hook(s.pc, s.logbuf)); - IFDEF(CONFIG_DIFFTEST, difftest_step(s.pc, cpu.pc)); - } - return n; -} -#endif - -void fetch_decode(Decode *s, vaddr_t pc) { - s->pc = pc; - s->snpc = pc; - IFDEF(CONFIG_DEBUG, log_bytebuf[0] = '\0'); - int idx = isa_fetch_decode(s); - IFDEF(CONFIG_DEBUG, snprintf(s->logbuf, sizeof(s->logbuf), FMT_WORD ": %s%*.s%s", - s->pc, log_bytebuf, 50 - (12 + 3 * (int)(s->snpc - s->pc)), "", log_asmbuf)); - s->EHelper = g_exec_table[idx]; -} - -#ifdef CONFIG_PERF_OPT -static void update_global() { - update_instr_cnt(); - cpu.pc = prev_s->pc; -} -#endif - -/* Simulate how the CPU works. */ -void cpu_exec(uint64_t n) { - IFDEF(CONFIG_SHARE, assert(n <= 1)); - g_print_step = (n < MAX_INSTR_TO_PRINT); - switch (nemu_state.state) { - case NEMU_END: case NEMU_ABORT: - printf("Program execution has ended. To restart the program, exit NEMU and run again.\n"); - return; - default: nemu_state.state = NEMU_RUNNING; - } - - uint64_t timer_start = get_time(); - - n_remain_total = n; // deal with setjmp() - int cause; - if ((cause = setjmp(jbuf_exec))) { - n_remain -= prev_s->idx_in_bb - 1; -#ifdef CONFIG_PERF_OPT - update_global(); -#endif - } - - while (nemu_state.state == NEMU_RUNNING && - MUXDEF(CONFIG_ENABLE_INSTR_CNT, n_remain_total > 0, true)) { -#ifdef CONFIG_DEVICE - extern void device_update(); - device_update(); -#endif - - if (cause == NEMU_EXEC_EXCEPTION) { - cause = 0; - cpu.pc = raise_intr(g_ex_cause, prev_s->pc); - IFDEF(CONFIG_PERF_OPT, tcache_handle_exception(cpu.pc)); - IFDEF(CONFIG_SHARE, break); - } else { - word_t intr = MUXDEF(CONFIG_SHARE, INTR_EMPTY, isa_query_intr()); - if (intr != INTR_EMPTY) { - cpu.pc = raise_intr(intr, cpu.pc); - IFDEF(CONFIG_DIFFTEST, ref_difftest_raise_intr(intr)); - IFDEF(CONFIG_PERF_OPT, tcache_handle_exception(cpu.pc)); - } - } - - int n_batch = n >= BATCH_SIZE ? BATCH_SIZE : n; - n_remain = execute(n_batch); -#ifdef CONFIG_PERF_OPT - update_global(); -#else - n_remain_total -= n_batch; -#endif - } - - uint64_t timer_end = get_time(); - g_timer += timer_end - timer_start; - - switch (nemu_state.state) { - case NEMU_RUNNING: nemu_state.state = NEMU_STOP; break; - - case NEMU_END: case NEMU_ABORT: - Log("nemu: %s\33[0m at pc = " FMT_WORD, - (nemu_state.state == NEMU_ABORT ? "\33[1;31mABORT" : - (nemu_state.halt_ret == 0 ? "\33[1;32mHIT GOOD TRAP" : "\33[1;31mHIT BAD TRAP")), - nemu_state.halt_pc); - // fall through - case NEMU_QUIT: - monitor_statistic(); - } -} diff --git a/libraries/NEMU/src/cpu/difftest/dut.c b/libraries/NEMU/src/cpu/difftest/dut.c deleted file mode 100644 index 9f62d44..0000000 --- a/libraries/NEMU/src/cpu/difftest/dut.c +++ /dev/null @@ -1,161 +0,0 @@ -#include - -#include -#include -#include -#include -#include - -void (*ref_difftest_memcpy)(paddr_t addr, void *buf, size_t n, bool direction) = NULL; -void (*ref_difftest_regcpy)(void *dut, bool direction) = NULL; -void (*ref_difftest_exec)(uint64_t n) = NULL; -void (*ref_difftest_raise_intr)(uint64_t NO) = NULL; - -#ifdef CONFIG_DIFFTEST - -IFDEF(CONFIG_DIFFTEST_REF_QEMU_DL, __thread uint8_t resereve_for_qemu_tls[4096]); - -static bool is_skip_ref = false; -static int skip_dut_nr_instr = 0; -void (*patch_fn)(void *arg) = NULL; -static void* patch_arg = NULL; -#ifndef __ICS_EXPORT -static bool is_detach = false; -#endif - -// this is used to let ref skip instructions which -// can not produce consistent behavior with NEMU -void difftest_skip_ref() { -#ifndef __ICS_EXPORT - if (is_detach) return; -#endif - is_skip_ref = true; - // If such an instruction is one of the instruction packing in QEMU - // (see below), we end the process of catching up with QEMU's pc to - // keep the consistent behavior in our best. - // Note that this is still not perfect: if the packed instructions - // already write some memory, and the incoming instruction in NEMU - // will load that memory, we will encounter false negative. But such - // situation is infrequent. - skip_dut_nr_instr = 0; -} - -// this is used to deal with instruction packing in QEMU. -// Sometimes letting QEMU step once will execute multiple instructions. -// We should skip checking until NEMU's pc catches up with QEMU's pc. -// The semantic is -// Let REF run `nr_ref` instructions first. -// We expect that DUT will catch up with REF within `nr_dut` instructions. -void difftest_skip_dut(int nr_ref, int nr_dut) { -#ifndef __ICS_EXPORT - if (is_detach) return; -#endif - skip_dut_nr_instr += nr_dut; - - while (nr_ref -- > 0) { - ref_difftest_exec(1); - } -} - -void difftest_set_patch(void (*fn)(void *arg), void *arg) { - patch_fn = fn; - patch_arg = arg; -} - -void init_difftest(char *ref_so_file, long img_size, int port) { - assert(ref_so_file != NULL); - - void *handle; - handle = dlopen(ref_so_file, RTLD_LAZY | MUXNDEF(CONFIG_CC_ASAN, RTLD_DEEPBIND, 0)); - assert(handle); - - ref_difftest_memcpy = dlsym(handle, "difftest_memcpy"); - assert(ref_difftest_memcpy); - - ref_difftest_regcpy = dlsym(handle, "difftest_regcpy"); - assert(ref_difftest_regcpy); - - ref_difftest_exec = dlsym(handle, "difftest_exec"); - assert(ref_difftest_exec); - - ref_difftest_raise_intr = dlsym(handle, "difftest_raise_intr"); - assert(ref_difftest_raise_intr); - - void (*ref_difftest_init)(int) = dlsym(handle, "difftest_init"); - assert(ref_difftest_init); - - Log("Differential testing: \33[1;32m%s\33[0m", "ON"); - Log("The result of every instruction will be compared with %s. " - "This will help you a lot for debugging, but also significantly reduce the performance. " - "If it is not necessary, you can turn it off in include/common.h.", ref_so_file); - - ref_difftest_init(port); - ref_difftest_memcpy(RESET_VECTOR, guest_to_host(RESET_VECTOR), img_size, DIFFTEST_TO_REF); - ref_difftest_regcpy(&cpu, DIFFTEST_TO_REF); -} - -static void checkregs(CPU_state *ref, vaddr_t pc) { - if (!isa_difftest_checkregs(ref, pc)) { - isa_reg_display(); - IFDEF(CONFIG_IQUEUE, iqueue_dump()); - nemu_state.state = NEMU_ABORT; - nemu_state.halt_pc = pc; - longjmp_exec(NEMU_EXEC_END); - } -} - -void difftest_step(vaddr_t pc, vaddr_t npc) { - CPU_state ref_r; - -#ifndef __ICS_EXPORT - if (is_detach) return; - -#endif - if (skip_dut_nr_instr > 0) { - ref_difftest_regcpy(&ref_r, DIFFTEST_TO_DUT); - if (ref_r.pc == npc) { - skip_dut_nr_instr = 0; - checkregs(&ref_r, npc); - return; - } - skip_dut_nr_instr --; - if (skip_dut_nr_instr == 0) - panic("can not catch up with ref.pc = " FMT_WORD " at pc = " FMT_WORD, ref_r.pc, pc); - return; - } - - if (is_skip_ref) { - // to skip the checking of an instruction, just copy the reg state to reference design - ref_difftest_regcpy(&cpu, DIFFTEST_TO_REF); - is_skip_ref = false; - return; - } - - ref_difftest_exec(1); - - if (patch_fn) { - patch_fn(patch_arg); - patch_fn = NULL; - } - - ref_difftest_regcpy(&ref_r, DIFFTEST_TO_DUT); - - checkregs(&ref_r, pc); -} -#ifndef __ICS_EXPORT -void difftest_detach() { - is_detach = true; -} - -void difftest_attach() { - is_detach = false; - is_skip_ref = false; - skip_dut_nr_instr = 0; - - isa_difftest_attach(); -} -#endif - -#else -void init_difftest(char *ref_so_file, long img_size, int port) { } -#endif diff --git a/libraries/NEMU/src/cpu/difftest/ref.c b/libraries/NEMU/src/cpu/difftest/ref.c deleted file mode 100644 index 1367237..0000000 --- a/libraries/NEMU/src/cpu/difftest/ref.c +++ /dev/null @@ -1,84 +0,0 @@ -#include -#include -#include -#include - -#ifdef CONFIG_LARGE_COPY -static void nemu_large_memcpy(void *dest, void *src, size_t n) { - uint64_t *_dest = (uint64_t *)dest; - uint64_t *_src = (uint64_t *)src; - while (n >= sizeof(uint64_t)) { - if (*_src != 0) { - *_dest = *_src; - } - _dest++; - _src++; - n -= sizeof(uint64_t); - } - if (n > 0) { - uint8_t *dest8 = (uint8_t *)_dest; - uint8_t *src8 = (uint8_t *)_src; - while (n > 0) { - *dest8 = *src8; - dest8++; - src8++; - n--; - } - } -} -#endif - -void difftest_memcpy(paddr_t nemu_addr, void *dut_buf, size_t n, bool direction) { -#ifdef CONFIG_LARGE_COPY - if (direction == DIFFTEST_TO_REF) nemu_large_memcpy(guest_to_host(nemu_addr), dut_buf, n); - else nemu_large_memcpy(dut_buf, guest_to_host(nemu_addr), n); -#else - if (direction == DIFFTEST_TO_REF) memcpy(guest_to_host(nemu_addr), dut_buf, n); - else memcpy(dut_buf, guest_to_host(nemu_addr), n); -#endif -} - -void difftest_regcpy(void *dut, bool direction) { - isa_difftest_regcpy(dut, direction); -} - -#ifdef RV64_FULL_DIFF -void difftest_csrcpy(void *dut, bool direction) { - isa_difftest_csrcpy(dut, direction); -} - -void difftest_uarchstatus_cpy(void *dut, bool direction) { - isa_difftest_uarchstatus_cpy(dut, direction); -} - -int difftest_store_commit(uint64_t *saddr, uint64_t *sdata, uint8_t *smask) { -#ifdef CONFIG_DIFFTEST_STORE_COMMIT - return check_store_commit(saddr, sdata, smask); -#else - return 0; -#endif -} -#endif - -void difftest_exec(uint64_t n) { - cpu_exec(n); -} - -#ifdef CONFIG_GUIDED_EXEC -void difftest_guided_exec(void * guide) { - isa_difftest_guided_exec(guide); -} -#endif - -void difftest_raise_intr(word_t NO) { - isa_difftest_raise_intr(NO); -} - -void difftest_init() { - init_mem(); - - /* Perform ISA dependent initialization. */ - init_isa(); - /* create dummy address space for serial */ - //add_mmio_map("difftest.serial", 0xa10003f8, new_space(8), 8, NULL); -} diff --git a/libraries/NEMU/src/cpu/tcache.c b/libraries/NEMU/src/cpu/tcache.c deleted file mode 100644 index 9d3788d..0000000 --- a/libraries/NEMU/src/cpu/tcache.c +++ /dev/null @@ -1,246 +0,0 @@ -#include -#include - -#ifdef CONFIG_PERF_OPT - -#define TCACHE_BB_SIZE (CONFIG_TCACHE_SIZE / 4 + 2) - -typedef struct bb_t { - Decode *s; - struct bb_t *next; - vaddr_t pc; -} bb_t; - -enum { BB_RECORD_TYPE_NTAKEN = 1, BB_RECORD_TYPE_TAKEN }; - -static Decode tcache_pool[CONFIG_TCACHE_SIZE] = {}; -static int tc_idx = 0; -static Decode tcache_bb_pool[TCACHE_BB_SIZE] = {}; -static Decode *tcache_bb_freelist = NULL; -static bb_t bb_pool[CONFIG_BB_POOL_SIZE] = {}; -static int bb_idx = 0; -static bb_t bb_list [CONFIG_BB_LIST_SIZE] = {}; -static const void *g_exec_nemu_decode; - -static inline Decode* tcache_entry_init(Decode *s, vaddr_t pc) { - s->tnext = s->ntnext = NULL; - s->type = 0; - s->pc = pc; - s->EHelper = g_exec_nemu_decode; - return s; -} - -static inline Decode* tcache_new(vaddr_t pc) { - if (tc_idx == CONFIG_TCACHE_SIZE) return NULL; - assert(tc_idx < CONFIG_TCACHE_SIZE); - Decode *s = &tcache_pool[tc_idx]; - tc_idx ++; - return tcache_entry_init(s, pc); -} - -#ifdef CONFIG_RT_CHECK -#define tcache_bb_check(s) do { \ - int idx = s - tcache_bb_pool; \ - Assert(idx >= 0 && idx < TCACHE_BB_SIZE, "idx = %d, s = %p", idx, s); \ -} while (0) -#else -#define tcache_bb_check(s) -#endif - -static inline Decode* tcache_bb_new(vaddr_t pc) { - Decode *s = tcache_bb_freelist; - assert(s != NULL); - tcache_bb_check(s); - tcache_bb_check(tcache_bb_freelist->tnext); - tcache_bb_freelist = tcache_bb_freelist->tnext; - tcache_bb_check(tcache_bb_freelist); - tcache_bb_check(tcache_bb_freelist->tnext); - return tcache_entry_init(s, pc); -} - -static inline void tcache_bb_free(Decode *s) { - tcache_bb_check(s); - tcache_bb_check(tcache_bb_freelist); - s->tnext = tcache_bb_freelist; - tcache_bb_freelist = s; - tcache_bb_check(tcache_bb_freelist->tnext); -} - - -static inline bb_t* bb_new(Decode *s, vaddr_t pc, bb_t *next) { - if (bb_idx == CONFIG_BB_POOL_SIZE) return NULL; - assert(bb_idx < CONFIG_BB_POOL_SIZE); - bb_t *bb = &bb_pool[bb_idx ++]; - bb->s = s; - bb->pc = pc; - bb->next = next; - return bb; -} - -static inline bb_t* bb_hash(vaddr_t pc) { - int idx = (pc / CONFIG_ILEN_MIN) % CONFIG_BB_LIST_SIZE; - return &bb_list[idx]; -} - -static struct bb_t* bb_insert(vaddr_t pc, Decode *fill) { - bb_t *head = bb_hash(pc); - if (head->next == (void *)-1ul) { - if (head->pc == (vaddr_t)-1ul) { - // first time - head->s = fill; - head->pc = pc; - return head; - } - } - // second time - bb_t *bb = bb_new(head->s, head->pc, head->next); - if (bb == NULL) return NULL; - head->s = fill; - head->pc = pc; - head->next = bb; - return head; -} - -static bb_t* bb_find(vaddr_t pc) { - bb_t *bb = bb_hash(pc); - if (likely(bb->pc == pc)) return bb; - bb_t *head = bb; - do { - bb = bb->next; - if (bb == (void *)-1ul) return NULL; - if (bb->pc == pc) { - Decode *tmp_s = bb->s; vaddr_t tmp_pc = bb->pc; - bb->s = head->s; bb->pc = head->pc; - head->s = tmp_s; head->pc = tmp_pc; - return head; - } - } while (1); -} - -static void tcache_bb_fetch(Decode *_this, int is_taken, vaddr_t jpc) { - bb_t* bb = bb_find(jpc); - if (bb != NULL) { - if (is_taken) { _this->tnext = bb->s; } - else { _this->ntnext = bb->s; } - } else { - Decode *ret = tcache_bb_new(jpc); - if (is_taken) { ret->type = BB_RECORD_TYPE_TAKEN; _this->tnext = ret; } - else { ret->type = BB_RECORD_TYPE_NTAKEN; _this->ntnext = ret; } - ret->bb_src = _this; - } -} - -static void tcache_flush() { - tc_idx = 0; - bb_idx = 0; - memset(bb_list, -1, sizeof(bb_list)); - - int i; - for (i = 0; i < TCACHE_BB_SIZE - 1; i ++) { - tcache_bb_pool[i].list_next = &tcache_bb_pool[i + 1]; - } - tcache_bb_pool[TCACHE_BB_SIZE - 1].list_next = NULL; - tcache_bb_freelist = &tcache_bb_pool[0]; -} - -enum { TCACHE_BB_BUILDING, TCACHE_RUNNING }; -static int tcache_state = TCACHE_RUNNING; -static Decode *bb_now = NULL, *bb_now_record = NULL; - -__attribute__((noinline)) -Decode* tcache_jr_fetch(Decode *s, vaddr_t jpc) { - s->ntnext = s->tnext; - tcache_bb_fetch(s, true, jpc); - return s->tnext; -} - -static inline void tcache_patch_and_free(Decode *bb_record, Decode *bb) { - Decode *src = bb_record->bb_src; - if (bb_record->type == BB_RECORD_TYPE_TAKEN) { src->tnext = bb; } - if (bb_record->type == BB_RECORD_TYPE_NTAKEN) { src->ntnext = bb; } - tcache_bb_free(bb_record); -} - -__attribute__((noinline)) -Decode* tcache_decode(Decode *s) { - static int idx_in_bb = 0; - vaddr_t thispc = s->pc; - - if (tcache_state == TCACHE_RUNNING) { // start of a basic block - // first check whether this basic block is already decoded - bb_t *bb = bb_find(thispc); - if (bb != NULL) { // already decoded - tcache_patch_and_free(s, bb->s); - return bb->s; - } - - Decode *old = s; - s = tcache_new(thispc); - idx_in_bb = 1; - if (s == NULL) { goto full; } - - bb_now_record = old; - bb_now = s; - tcache_state = TCACHE_BB_BUILDING; - } - - save_globals(s); - s->idx_in_bb = idx_in_bb; - fetch_decode(s, thispc); // note that exception may happen! - - if (s->type == INSTR_TYPE_N) { - Decode *next = tcache_new(s->snpc); - if (next == NULL) { goto full; } - assert(next == s + 1); - } else { - // the end of the basic block - bb_t *ret = bb_insert(bb_now->pc, bb_now); - if (ret == NULL) { goto full; } // basic block list is full - tcache_patch_and_free(bb_now_record, bb_now); - bb_now = bb_now_record = NULL; - - switch (s->type) { - case INSTR_TYPE_J: tcache_bb_fetch(s, true, s->jnpc); break; - case INSTR_TYPE_B: - tcache_bb_fetch(s, true, s->jnpc); - tcache_bb_fetch(s, false, s->snpc + MUXDEF(__ISA_mips32__, 4, 0)); - break; - case INSTR_TYPE_I: s->tnext = s->ntnext = s; break; // update dynamically - default: assert(0); - } - tcache_state = TCACHE_RUNNING; - } - - idx_in_bb ++; - return s; - -full: - tcache_flush(); - s = tcache_bb_new(thispc); // decode this instruction again - s->idx_in_bb = idx_in_bb; - save_globals(s); - bb_now = bb_now_record = NULL; - tcache_state = TCACHE_RUNNING; - longjmp_exec(NEMU_EXEC_AGAIN); -} - -static Decode ex = {}; - -void tcache_handle_exception(vaddr_t jpc) { - tcache_bb_fetch(&ex, true, jpc); - save_globals(ex.tnext); - tcache_state = TCACHE_RUNNING; -} - -Decode* tcache_handle_flush(vaddr_t snpc) { - tcache_flush(); - tcache_handle_exception(snpc); - return ex.tnext; -} - -Decode* tcache_init(const void *exec_nemu_decode, vaddr_t reset_vector) { - tcache_flush(); - g_exec_nemu_decode = exec_nemu_decode; - return tcache_bb_new(reset_vector); -} -#endif diff --git a/libraries/NEMU/src/device/Kconfig b/libraries/NEMU/src/device/Kconfig deleted file mode 100644 index c4bbd78..0000000 --- a/libraries/NEMU/src/device/Kconfig +++ /dev/null @@ -1,174 +0,0 @@ -menuconfig DEVICE - depends on !SHARE - bool "Devices" - default y - help - Provide device support for NEMU. - -if DEVICE - -config HAS_PORT_IO - bool - default y - -menuconfig HAS_SERIAL - bool "Enable serial" - default y - -menuconfig HAS_UARTLITE - bool "Enable uartlite" - default n - -if HAS_SERIAL -config SERIAL_PORT - depends on HAS_PORT_IO - hex "Port address of the serial controller" - default 0x3f8 - -config SERIAL_MMIO - hex "MMIO address of the serial controller" - default 0xa10003f8 - -config SERIAL_INPUT_FIFO - bool "Enable input FIFO with /tmp/nemu.serial" - default n - -config SERIAL_UARTLITE - bool "Use uartlite as the serial (default: 16550)" - default n -endif # HAS_SERIAL - -if HAS_UARTLITE -config UARTLITE_PORT - depends on HAS_PORT_IO - hex "Port address of uartlite controller" - default 0x3f8 - -config UARTLITE_MMIO - hex "MMIO address of uartlite controller" - default 0xa10003f8 - -config UARTLITE_INPUT_FIFO - bool "Enable input FIFO with /tmp/nemu.serial" - default n -endif # HAS_UARTLITE - -menuconfig HAS_TIMER - bool "Enable timer" - default y - -if HAS_TIMER -config RTC_PORT - depends on HAS_PORT_IO - hex "Port address of the timer" - default 0x48 - -config RTC_MMIO - hex "MMIO address of the timer" - default 0xa1000048 -endif # HAS_TIMER - -menuconfig HAS_KEYBOARD - bool "Enable keyboard" - default y - -if HAS_KEYBOARD -config I8042_DATA_PORT - depends on HAS_PORT_IO - hex "Port address of the keyboard controller" - default 0x60 - -config I8042_DATA_MMIO - hex "MMIO address of the keyboard controller" - default 0xa1000060 -endif # HAS_KEYBOARD - -menuconfig HAS_VGA - bool "Enable VGA" - default y - -if HAS_VGA -config FB_ADDR - hex "Physical address of the VGA frame buffer" - default 0xa0000000 - -config VGA_CTL_PORT - depends on HAS_PORT_IO - hex "Port address of the VGA controller" - default 0x100 - -config VGA_CTL_MMIO - hex "MMIO address of the VGA controller" - default 0xa1000100 - -config VGA_SHOW_SCREEN - bool "Enable SDL SCREEN" - default y - -choice - prompt "Screen Size" - default VGA_SIZE_400x300 -config VGA_SIZE_400x300 - bool "400 x 300" -config VGA_SIZE_800x600 - bool "800 x 600" -endchoice -endif # HAS_VGA - -menuconfig HAS_AUDIO - bool "Enable audio" - default y - -if HAS_AUDIO -config SB_ADDR - hex "Physical address of the audio stream buffer" - default 0xa0800000 - -config SB_SIZE - hex "Size of the audio stream buffer" - default 0x10000 - -config AUDIO_CTL_PORT - depends on HAS_PORT_IO - hex "Port address of the audio controller" - default 0x200 - -config AUDIO_CTL_MMIO - hex "MMIO address of the audio controller" - default 0xa1000200 -endif # HAS_AUDIO - -menuconfig HAS_DISK - bool "Enable disk" - default y - -if HAS_DISK -config DISK_CTL_PORT - depends on HAS_PORT_IO - hex "Port address of the disk controller" - default 0x300 - -config DISK_CTL_MMIO - hex "MMIO address of the disk controller" - default 0xa1000300 - -config DISK_IMG_PATH - string "The path of disk image" - default "" -endif # HAS_DISK - -menuconfig HAS_SDCARD - bool "Enable sdcard" - default y - -if HAS_SDCARD -config SDCARD_CTL_MMIO - hex "MMIO address of the sdcard controller" - default 0xa3000000 - -config SDCARD_IMG_PATH - string "The path of sdcard image" - default "" -endif # HAS_SDCARD - -endif # DEVICE diff --git a/libraries/NEMU/src/device/alarm.c b/libraries/NEMU/src/device/alarm.c deleted file mode 100644 index 74f68be..0000000 --- a/libraries/NEMU/src/device/alarm.c +++ /dev/null @@ -1,37 +0,0 @@ -#include -#include "device/alarm.h" -#include -#include - -#define TIMER_HZ 60 -#define MAX_HANDLER 8 - -static alarm_handler_t handler[MAX_HANDLER] = {}; -static int idx = 0; - -void add_alarm_handle(alarm_handler_t h) { - assert(idx < MAX_HANDLER); - handler[idx ++] = h; -} - -static void alarm_sig_handler(int signum) { - int i; - for (i = 0; i < idx; i ++) { - handler[i](); - } -} - -void init_alarm() { - struct sigaction s; - memset(&s, 0, sizeof(s)); - s.sa_handler = alarm_sig_handler; - int ret = sigaction(SIGVTALRM, &s, NULL); - Assert(ret == 0, "Can not set signal handler"); - - struct itimerval it = {}; - it.it_value.tv_sec = 0; - it.it_value.tv_usec = 1000000 / TIMER_HZ; - it.it_interval = it.it_value; - ret = setitimer(ITIMER_VIRTUAL, &it, NULL); - Assert(ret == 0, "Can not set timer"); -} diff --git a/libraries/NEMU/src/device/audio.c b/libraries/NEMU/src/device/audio.c deleted file mode 100644 index ea2db0c..0000000 --- a/libraries/NEMU/src/device/audio.c +++ /dev/null @@ -1,72 +0,0 @@ -#include -#include -#include - -enum { - reg_freq, - reg_channels, - reg_samples, - reg_sbuf_size, - reg_init, - reg_count, - nr_reg -}; - -static uint8_t *sbuf = NULL; -static uint32_t *audio_base = NULL; -#ifndef __ICS_EXPORT -static int tail = 0; -#endif - -static inline void audio_play(void *userdata, uint8_t *stream, int len) { -#ifndef __ICS_EXPORT - int nread = len; - int count = audio_base[reg_count]; - if (count < len) nread = count; - - if (nread + tail < CONFIG_SB_SIZE) { - memcpy(stream, sbuf + tail, nread); - tail += nread; - } else { - int first_cpy_len = CONFIG_SB_SIZE - tail; - memcpy(stream, sbuf + tail, first_cpy_len); - memcpy(stream + first_cpy_len, sbuf, nread - first_cpy_len); - tail = nread - first_cpy_len; - } - audio_base[reg_count] -= nread; - if (len > nread) memset(stream + nread, 0, len - nread); -#endif -} - -static void audio_io_handler(uint32_t offset, int len, bool is_write) { -#ifndef __ICS_EXPORT - if (offset == reg_init * sizeof(uint32_t) && len == 4 && is_write) { - SDL_AudioSpec s = {}; - s.freq = audio_base[reg_freq]; - s.format = AUDIO_S16SYS; - s.channels = audio_base[reg_channels]; - s.samples = audio_base[reg_samples]; - s.callback = audio_play; - s.userdata = NULL; - - tail = 0; - audio_base[reg_count] = 0; - SDL_InitSubSystem(SDL_INIT_AUDIO); - SDL_OpenAudio(&s, NULL); - SDL_PauseAudio(0); - } -#endif -} - -void init_audio() { - uint32_t space_size = sizeof(uint32_t) * nr_reg; - audio_base = (uint32_t *)new_space(space_size); - add_pio_map ("audio", CONFIG_AUDIO_CTL_PORT, audio_base, space_size, audio_io_handler); - add_mmio_map("audio", CONFIG_AUDIO_CTL_MMIO, audio_base, space_size, audio_io_handler); -#ifndef __ICS_EXPORT - audio_base[reg_sbuf_size] = CONFIG_SB_SIZE; -#endif - - sbuf = (uint8_t *)new_space(CONFIG_SB_SIZE); - add_mmio_map("audio-sbuf", CONFIG_SB_ADDR, sbuf, CONFIG_SB_SIZE, NULL); -} diff --git a/libraries/NEMU/src/device/device.c b/libraries/NEMU/src/device/device.c deleted file mode 100644 index ca1e140..0000000 --- a/libraries/NEMU/src/device/device.c +++ /dev/null @@ -1,70 +0,0 @@ -#include -#include -#include -#include - -void init_serial(); -void init_uartlite(); -void init_timer(); -void init_alarm(); -void init_vga(); -void init_i8042(); -void init_audio(); -void init_disk(); -void init_sdcard(); - -void send_key(uint8_t, bool); -void vga_update_screen(); - -static int device_update_flag = false; - -static void set_device_update_flag() { - device_update_flag = true; -} - -void device_update() { - if (!device_update_flag) { - return; - } - device_update_flag = false; - IFDEF(CONFIG_HAS_VGA, vga_update_screen()); - - SDL_Event event; - while (SDL_PollEvent(&event)) { - switch (event.type) { - case SDL_QUIT: - nemu_state.state = NEMU_QUIT; - break; -#ifdef CONFIG_HAS_KEYBOARD - // If a key was pressed - case SDL_KEYDOWN: - case SDL_KEYUP: { - uint8_t k = event.key.keysym.scancode; - bool is_keydown = (event.key.type == SDL_KEYDOWN); - send_key(k, is_keydown); - break; - } -#endif - default: break; - } - } -} - -void sdl_clear_event_queue() { - SDL_Event event; - while (SDL_PollEvent(&event)); -} - -void init_device() { - IFDEF(CONFIG_HAS_SERIAL, init_serial()); - IFDEF(CONFIG_HAS_UARTLITE, init_uartlite()); - IFDEF(CONFIG_HAS_TIMER, init_timer()); - IFDEF(CONFIG_HAS_VGA, init_vga()); - IFDEF(CONFIG_HAS_KEYBOARD, init_i8042()); - IFDEF(CONFIG_HAS_AUDIO, init_audio()); - IFDEF(CONFIG_HAS_DISK, init_disk()); - IFDEF(CONFIG_HAS_SDCARD, init_sdcard()); - - add_alarm_handle(set_device_update_flag); - init_alarm(); -} diff --git a/libraries/NEMU/src/device/disk.c b/libraries/NEMU/src/device/disk.c deleted file mode 100644 index 33095b5..0000000 --- a/libraries/NEMU/src/device/disk.c +++ /dev/null @@ -1,45 +0,0 @@ -#include -#include -#include -#include - -enum { - SIZE, - CMD, - BUF, - START, - COUNT, - NR_REG -}; - -static uint32_t *disk_base = NULL; -static FILE *fp = NULL; - -static void disk_io_handler(uint32_t offset, int len, bool is_write) { -#ifndef __ICS_EXPORT - if (offset == CMD * sizeof(uint32_t) && len == 4 && is_write) { - assert(disk_base[CMD] == 0); - fseek(fp, disk_base[START] * 512, SEEK_SET); - int ret = fread(guest_to_host(disk_base[BUF]), disk_base[COUNT] * 512l, 1, fp); - assert(ret == 1); - } -#endif -} - -void init_disk() { - uint32_t space_size = sizeof(uint32_t) * NR_REG; - disk_base = (uint32_t *)new_space(space_size); - add_pio_map ("disk", CONFIG_DISK_CTL_PORT, disk_base, space_size, disk_io_handler); - add_mmio_map("disk", CONFIG_DISK_CTL_MMIO, disk_base, space_size, disk_io_handler); - - const char *path = CONFIG_DISK_IMG_PATH; - fp = fopen(path, "r"); - if (fp) { - fseek(fp, 0, SEEK_END); - disk_base[SIZE] = ftell(fp) / 512 + 1; - fseek(fp, 0, SEEK_SET); - } else { - Log("Can not open %s. Disable disk...", path); - disk_base[SIZE] = 0; - } -} diff --git a/libraries/NEMU/src/device/intr.c b/libraries/NEMU/src/device/intr.c deleted file mode 100644 index 71edfd7..0000000 --- a/libraries/NEMU/src/device/intr.c +++ /dev/null @@ -1,7 +0,0 @@ -#include - -void dev_raise_intr() { -#ifndef __ICS_EXPORT - cpu.INTR = true; -#endif -} diff --git a/libraries/NEMU/src/device/io/map.c b/libraries/NEMU/src/device/io/map.c deleted file mode 100644 index d0b3ec2..0000000 --- a/libraries/NEMU/src/device/io/map.c +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include -#include -#include - -#define IO_SPACE_MAX (2 * 1024 * 1024) - -static uint8_t io_space[IO_SPACE_MAX] PG_ALIGN = {}; -static uint8_t *p_space = io_space; - -uint8_t* new_space(int size) { - uint8_t *p = p_space; - // page aligned; - size = (size + (PAGE_SIZE - 1)) & ~PAGE_MASK; - p_space += size; - assert(p_space - io_space < IO_SPACE_MAX); - return p; -} - -static inline void check_bound(IOMap *map, paddr_t addr) { - Assert(map != NULL && addr <= map->high && addr >= map->low, - "address (" FMT_PADDR ") is out of bound {%s} [" FMT_PADDR ", " FMT_PADDR "] at pc = " FMT_WORD, - addr, (map ? map->name : "???"), (map ? map->low : 0), (map ? map->high : 0), cpu.pc); -} - -static inline void invoke_callback(io_callback_t c, paddr_t offset, int len, bool is_write) { - if (c != NULL) { c(offset, len, is_write); } -} - -word_t map_read(paddr_t addr, int len, IOMap *map) { - assert(len >= 1 && len <= 8); - check_bound(map, addr); - paddr_t offset = addr - map->low; - invoke_callback(map->callback, offset, len, false); // prepare data to read - return host_read(map->space + offset, len); -} - -void map_write(paddr_t addr, int len, word_t data, IOMap *map) { - assert(len >= 1 && len <= 8); - check_bound(map, addr); - paddr_t offset = addr - map->low; - host_write(map->space + offset, len, data); - invoke_callback(map->callback, offset, len, true); -} diff --git a/libraries/NEMU/src/device/io/mmio.c b/libraries/NEMU/src/device/io/mmio.c deleted file mode 100644 index 1cd3265..0000000 --- a/libraries/NEMU/src/device/io/mmio.c +++ /dev/null @@ -1,34 +0,0 @@ -#include - -#define NR_MAP 16 - -static IOMap maps[NR_MAP] = {}; -static int nr_map = 0; - -static inline IOMap* fetch_mmio_map(paddr_t addr) { - int mapid = find_mapid_by_addr(maps, nr_map, addr); - return (mapid == -1 ? NULL : &maps[mapid]); -} - -/* device interface */ -void add_mmio_map(const char *name, paddr_t addr, void *space, uint32_t len, io_callback_t callback) { - assert(nr_map < NR_MAP); - maps[nr_map] = (IOMap){ .name = name, .low = addr, .high = addr + len - 1, - .space = space, .callback = callback }; - Log("Add mmio map '%s' at [" FMT_PADDR ", " FMT_PADDR "]", - maps[nr_map].name, maps[nr_map].low, maps[nr_map].high); - fflush(stdout); - - nr_map ++; -} - -/* bus interface */ -__attribute__((noinline)) -word_t mmio_read(paddr_t addr, int len) { - return map_read(addr, len, fetch_mmio_map(addr)); -} - -__attribute__((noinline)) -void mmio_write(paddr_t addr, int len, word_t data) { - map_write(addr, len, data, fetch_mmio_map(addr)); -} diff --git a/libraries/NEMU/src/device/io/port-io.c b/libraries/NEMU/src/device/io/port-io.c deleted file mode 100644 index 7663ddb..0000000 --- a/libraries/NEMU/src/device/io/port-io.c +++ /dev/null @@ -1,42 +0,0 @@ -#include - -#define PORT_IO_SPACE_MAX 65535 - -#define NR_MAP 16 -static IOMap maps[NR_MAP] = {}; -static int nr_map = 0; - -/* device interface */ -void add_pio_map(const char *name, ioaddr_t addr, void *space, uint32_t len, io_callback_t callback) { - assert(nr_map < NR_MAP); - assert(addr + len <= PORT_IO_SPACE_MAX); - maps[nr_map] = (IOMap){ .name = name, .low = addr, .high = addr + len - 1, - .space = space, .callback = callback }; - Log("Add port-io map '%s' at [" FMT_PADDR ", " FMT_PADDR "]", - maps[nr_map].name, maps[nr_map].low, maps[nr_map].high); - - nr_map ++; -} - -/* CPU interface */ -uint32_t pio_read(ioaddr_t addr, int len) { - assert(addr + len - 1 < PORT_IO_SPACE_MAX); - int mapid = find_mapid_by_addr(maps, nr_map, addr); -#ifdef CONFIG_PA - assert(mapid != -1); -#else - if (mapid == -1) return 0xffffffff; -#endif - return map_read(addr, len, &maps[mapid]); -} - -void pio_write(ioaddr_t addr, int len, uint32_t data) { - assert(addr + len - 1 < PORT_IO_SPACE_MAX); - int mapid = find_mapid_by_addr(maps, nr_map, addr); -#ifdef CONFIG_PA - assert(mapid != -1); -#else - if (mapid == -1) return; -#endif - map_write(addr, len, data, &maps[mapid]); -} diff --git a/libraries/NEMU/src/device/keyboard.c b/libraries/NEMU/src/device/keyboard.c deleted file mode 100644 index 86b8e4f..0000000 --- a/libraries/NEMU/src/device/keyboard.c +++ /dev/null @@ -1,65 +0,0 @@ -#include -#include -#include - -static uint32_t *i8042_data_port_base = NULL; - -// Note that this is not the standard -#define _KEYS(f) \ - f(ESCAPE) f(F1) f(F2) f(F3) f(F4) f(F5) f(F6) f(F7) f(F8) f(F9) f(F10) f(F11) f(F12) \ -f(GRAVE) f(1) f(2) f(3) f(4) f(5) f(6) f(7) f(8) f(9) f(0) f(MINUS) f(EQUALS) f(BACKSPACE) \ -f(TAB) f(Q) f(W) f(E) f(R) f(T) f(Y) f(U) f(I) f(O) f(P) f(LEFTBRACKET) f(RIGHTBRACKET) f(BACKSLASH) \ -f(CAPSLOCK) f(A) f(S) f(D) f(F) f(G) f(H) f(J) f(K) f(L) f(SEMICOLON) f(APOSTROPHE) f(RETURN) \ -f(LSHIFT) f(Z) f(X) f(C) f(V) f(B) f(N) f(M) f(COMMA) f(PERIOD) f(SLASH) f(RSHIFT) \ -f(LCTRL) f(APPLICATION) f(LALT) f(SPACE) f(RALT) f(RCTRL) \ -f(UP) f(DOWN) f(LEFT) f(RIGHT) f(INSERT) f(DELETE) f(HOME) f(END) f(PAGEUP) f(PAGEDOWN) - -#define _KEY_NAME(k) _KEY_##k, - -enum { - _KEY_NONE = 0, - MAP(_KEYS, _KEY_NAME) -}; - -#define SDL_KEYMAP(k) keymap[concat(SDL_SCANCODE_, k)] = concat(_KEY_, k); -static uint32_t keymap[256] = {}; - -static inline void init_keymap() { - MAP(_KEYS, SDL_KEYMAP) -} - -#define KEY_QUEUE_LEN 1024 -static int key_queue[KEY_QUEUE_LEN] = {}; -static int key_f = 0, key_r = 0; - -#define KEYDOWN_MASK 0x8000 - -void send_key(uint8_t scancode, bool is_keydown) { - if (nemu_state.state == NEMU_RUNNING && - keymap[scancode] != _KEY_NONE) { - uint32_t am_scancode = keymap[scancode] | (is_keydown ? KEYDOWN_MASK : 0); - key_queue[key_r] = am_scancode; - key_r = (key_r + 1) % KEY_QUEUE_LEN; - Assert(key_r != key_f, "key queue overflow!"); - } -} - -static void i8042_data_io_handler(uint32_t offset, int len, bool is_write) { - assert(!is_write); - assert(offset == 0); - if (key_f != key_r) { - i8042_data_port_base[0] = key_queue[key_f]; - key_f = (key_f + 1) % KEY_QUEUE_LEN; - } - else { - i8042_data_port_base[0] = _KEY_NONE; - } -} - -void init_i8042() { - i8042_data_port_base = (uint32_t *)new_space(4); - i8042_data_port_base[0] = _KEY_NONE; - add_pio_map ("keyboard", CONFIG_I8042_DATA_PORT, i8042_data_port_base, 4, i8042_data_io_handler); - add_mmio_map("keyboard", CONFIG_I8042_DATA_MMIO, i8042_data_port_base, 4, i8042_data_io_handler); - init_keymap(); -} diff --git a/libraries/NEMU/src/device/mmc.h b/libraries/NEMU/src/device/mmc.h deleted file mode 100644 index 7a68bb3..0000000 --- a/libraries/NEMU/src/device/mmc.h +++ /dev/null @@ -1,439 +0,0 @@ -/* - * Header for MultiMediaCard (MMC) - * - * Copyright 2002 Hewlett-Packard Company - * - * Use consistent with the GNU GPL is permitted, - * provided that this copyright notice is - * preserved in its entirety in all copies and derived works. - * - * HEWLETT-PACKARD COMPANY MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, - * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS - * FITNESS FOR ANY PARTICULAR PURPOSE. - * - * Many thanks to Alessandro Rubini and Jonathan Corbet! - * - * Based strongly on code by: - * - * Author: Yong-iL Joh - * - * Author: Andrew Christian - * 15 May 2002 - */ - -#ifndef LINUX_MMC_MMC_H -#define LINUX_MMC_MMC_H - -/* Standard MMC commands (4.1) type argument response */ - /* class 1 */ -#define MMC_GO_IDLE_STATE 0 /* bc */ -#define MMC_SEND_OP_COND 1 /* bcr [31:0] OCR R3 */ -#define MMC_ALL_SEND_CID 2 /* bcr R2 */ -#define MMC_SET_RELATIVE_ADDR 3 /* ac [31:16] RCA R1 */ -#define MMC_SET_DSR 4 /* bc [31:16] RCA */ -#define MMC_SLEEP_AWAKE 5 /* ac [31:16] RCA 15:flg R1b */ -#define MMC_SWITCH 6 /* ac [31:0] See below R1b */ -#define MMC_SELECT_CARD 7 /* ac [31:16] RCA R1 */ -#define MMC_SEND_EXT_CSD 8 /* adtc R1 */ -#define MMC_SEND_CSD 9 /* ac [31:16] RCA R2 */ -#define MMC_SEND_CID 10 /* ac [31:16] RCA R2 */ -#define MMC_READ_DAT_UNTIL_STOP 11 /* adtc [31:0] dadr R1 */ -#define MMC_STOP_TRANSMISSION 12 /* ac R1b */ -#define MMC_SEND_STATUS 13 /* ac [31:16] RCA R1 */ -#define MMC_BUS_TEST_R 14 /* adtc R1 */ -#define MMC_GO_INACTIVE_STATE 15 /* ac [31:16] RCA */ -#define MMC_BUS_TEST_W 19 /* adtc R1 */ -#define MMC_SPI_READ_OCR 58 /* spi spi_R3 */ -#define MMC_SPI_CRC_ON_OFF 59 /* spi [0:0] flag spi_R1 */ - - /* class 2 */ -#define MMC_SET_BLOCKLEN 16 /* ac [31:0] block len R1 */ -#define MMC_READ_SINGLE_BLOCK 17 /* adtc [31:0] data addr R1 */ -#define MMC_READ_MULTIPLE_BLOCK 18 /* adtc [31:0] data addr R1 */ -#define MMC_SEND_TUNING_BLOCK 19 /* adtc R1 */ -#define MMC_SEND_TUNING_BLOCK_HS200 21 /* adtc R1 */ - - /* class 3 */ -#define MMC_WRITE_DAT_UNTIL_STOP 20 /* adtc [31:0] data addr R1 */ - - /* class 4 */ -#define MMC_SET_BLOCK_COUNT 23 /* adtc [31:0] data addr R1 */ -#define MMC_WRITE_BLOCK 24 /* adtc [31:0] data addr R1 */ -#define MMC_WRITE_MULTIPLE_BLOCK 25 /* adtc R1 */ -#define MMC_PROGRAM_CID 26 /* adtc R1 */ -#define MMC_PROGRAM_CSD 27 /* adtc R1 */ - - /* class 6 */ -#define MMC_SET_WRITE_PROT 28 /* ac [31:0] data addr R1b */ -#define MMC_CLR_WRITE_PROT 29 /* ac [31:0] data addr R1b */ -#define MMC_SEND_WRITE_PROT 30 /* adtc [31:0] wpdata addr R1 */ - - /* class 5 */ -#define MMC_ERASE_GROUP_START 35 /* ac [31:0] data addr R1 */ -#define MMC_ERASE_GROUP_END 36 /* ac [31:0] data addr R1 */ -#define MMC_ERASE 38 /* ac R1b */ - - /* class 9 */ -#define MMC_FAST_IO 39 /* ac R4 */ -#define MMC_GO_IRQ_STATE 40 /* bcr R5 */ - - /* class 7 */ -#define MMC_LOCK_UNLOCK 42 /* adtc R1b */ - - /* class 8 */ -#define MMC_APP_CMD 55 /* ac [31:16] RCA R1 */ -#define MMC_GEN_CMD 56 /* adtc [0] RD/WR R1 */ - - /* class 11 */ -#define MMC_QUE_TASK_PARAMS 44 /* ac [20:16] task id R1 */ -#define MMC_QUE_TASK_ADDR 45 /* ac [31:0] data addr R1 */ -#define MMC_EXECUTE_READ_TASK 46 /* adtc [20:16] task id R1 */ -#define MMC_EXECUTE_WRITE_TASK 47 /* adtc [20:16] task id R1 */ -#define MMC_CMDQ_TASK_MGMT 48 /* ac [20:16] task id R1b */ - -//static inline bool mmc_op_multi(u32 opcode) -//{ -// return opcode == MMC_WRITE_MULTIPLE_BLOCK || -// opcode == MMC_READ_MULTIPLE_BLOCK; -//} - -/* - * MMC_SWITCH argument format: - * - * [31:26] Always 0 - * [25:24] Access Mode - * [23:16] Location of target Byte in EXT_CSD - * [15:08] Value Byte - * [07:03] Always 0 - * [02:00] Command Set - */ - -/* - MMC status in R1, for native mode (SPI bits are different) - Type - e : error bit - s : status bit - r : detected and set for the actual command response - x : detected and set during command execution. the host must poll - the card by sending status command in order to read these bits. - Clear condition - a : according to the card state - b : always related to the previous command. Reception of - a valid command will clear it (with a delay of one command) - c : clear by read - */ - -#define R1_OUT_OF_RANGE (1 << 31) /* er, c */ -#define R1_ADDRESS_ERROR (1 << 30) /* erx, c */ -#define R1_BLOCK_LEN_ERROR (1 << 29) /* er, c */ -#define R1_ERASE_SEQ_ERROR (1 << 28) /* er, c */ -#define R1_ERASE_PARAM (1 << 27) /* ex, c */ -#define R1_WP_VIOLATION (1 << 26) /* erx, c */ -#define R1_CARD_IS_LOCKED (1 << 25) /* sx, a */ -#define R1_LOCK_UNLOCK_FAILED (1 << 24) /* erx, c */ -#define R1_COM_CRC_ERROR (1 << 23) /* er, b */ -#define R1_ILLEGAL_COMMAND (1 << 22) /* er, b */ -#define R1_CARD_ECC_FAILED (1 << 21) /* ex, c */ -#define R1_CC_ERROR (1 << 20) /* erx, c */ -#define R1_ERROR (1 << 19) /* erx, c */ -#define R1_UNDERRUN (1 << 18) /* ex, c */ -#define R1_OVERRUN (1 << 17) /* ex, c */ -#define R1_CID_CSD_OVERWRITE (1 << 16) /* erx, c, CID/CSD overwrite */ -#define R1_WP_ERASE_SKIP (1 << 15) /* sx, c */ -#define R1_CARD_ECC_DISABLED (1 << 14) /* sx, a */ -#define R1_ERASE_RESET (1 << 13) /* sr, c */ -#define R1_STATUS(x) (x & 0xFFFFE000) -#define R1_CURRENT_STATE(x) ((x & 0x00001E00) >> 9) /* sx, b (4 bits) */ -#define R1_READY_FOR_DATA (1 << 8) /* sx, a */ -#define R1_SWITCH_ERROR (1 << 7) /* sx, c */ -#define R1_EXCEPTION_EVENT (1 << 6) /* sr, a */ -#define R1_APP_CMD (1 << 5) /* sr, c */ - -#define R1_STATE_IDLE 0 -#define R1_STATE_READY 1 -#define R1_STATE_IDENT 2 -#define R1_STATE_STBY 3 -#define R1_STATE_TRAN 4 -#define R1_STATE_DATA 5 -#define R1_STATE_RCV 6 -#define R1_STATE_PRG 7 -#define R1_STATE_DIS 8 - -/* - * MMC/SD in SPI mode reports R1 status always, and R2 for SEND_STATUS - * R1 is the low order byte; R2 is the next highest byte, when present. - */ -#define R1_SPI_IDLE (1 << 0) -#define R1_SPI_ERASE_RESET (1 << 1) -#define R1_SPI_ILLEGAL_COMMAND (1 << 2) -#define R1_SPI_COM_CRC (1 << 3) -#define R1_SPI_ERASE_SEQ (1 << 4) -#define R1_SPI_ADDRESS (1 << 5) -#define R1_SPI_PARAMETER (1 << 6) -/* R1 bit 7 is always zero */ -#define R2_SPI_CARD_LOCKED (1 << 8) -#define R2_SPI_WP_ERASE_SKIP (1 << 9) /* or lock/unlock fail */ -#define R2_SPI_LOCK_UNLOCK_FAIL R2_SPI_WP_ERASE_SKIP -#define R2_SPI_ERROR (1 << 10) -#define R2_SPI_CC_ERROR (1 << 11) -#define R2_SPI_CARD_ECC_ERROR (1 << 12) -#define R2_SPI_WP_VIOLATION (1 << 13) -#define R2_SPI_ERASE_PARAM (1 << 14) -#define R2_SPI_OUT_OF_RANGE (1 << 15) /* or CSD overwrite */ -#define R2_SPI_CSD_OVERWRITE R2_SPI_OUT_OF_RANGE - -/* - * OCR bits are mostly in host.h - */ -#define MMC_CARD_BUSY 0x80000000 /* Card Power up status bit */ - -/* - * Card Command Classes (CCC) - */ -#define CCC_BASIC (1<<0) /* (0) Basic protocol functions */ - /* (CMD0,1,2,3,4,7,9,10,12,13,15) */ - /* (and for SPI, CMD58,59) */ -#define CCC_STREAM_READ (1<<1) /* (1) Stream read commands */ - /* (CMD11) */ -#define CCC_BLOCK_READ (1<<2) /* (2) Block read commands */ - /* (CMD16,17,18) */ -#define CCC_STREAM_WRITE (1<<3) /* (3) Stream write commands */ - /* (CMD20) */ -#define CCC_BLOCK_WRITE (1<<4) /* (4) Block write commands */ - /* (CMD16,24,25,26,27) */ -#define CCC_ERASE (1<<5) /* (5) Ability to erase blocks */ - /* (CMD32,33,34,35,36,37,38,39) */ -#define CCC_WRITE_PROT (1<<6) /* (6) Able to write protect blocks */ - /* (CMD28,29,30) */ -#define CCC_LOCK_CARD (1<<7) /* (7) Able to lock down card */ - /* (CMD16,CMD42) */ -#define CCC_APP_SPEC (1<<8) /* (8) Application specific */ - /* (CMD55,56,57,ACMD*) */ -#define CCC_IO_MODE (1<<9) /* (9) I/O mode */ - /* (CMD5,39,40,52,53) */ -#define CCC_SWITCH (1<<10) /* (10) High speed switch */ - /* (CMD6,34,35,36,37,50) */ - /* (11) Reserved */ - /* (CMD?) */ - -/* - * CSD field definitions - */ - -#define CSD_STRUCT_VER_1_0 0 /* Valid for system specification 1.0 - 1.2 */ -#define CSD_STRUCT_VER_1_1 1 /* Valid for system specification 1.4 - 2.2 */ -#define CSD_STRUCT_VER_1_2 2 /* Valid for system specification 3.1 - 3.2 - 3.31 - 4.0 - 4.1 */ -#define CSD_STRUCT_EXT_CSD 3 /* Version is coded in CSD_STRUCTURE in EXT_CSD */ - -#define CSD_SPEC_VER_0 0 /* Implements system specification 1.0 - 1.2 */ -#define CSD_SPEC_VER_1 1 /* Implements system specification 1.4 */ -#define CSD_SPEC_VER_2 2 /* Implements system specification 2.0 - 2.2 */ -#define CSD_SPEC_VER_3 3 /* Implements system specification 3.1 - 3.2 - 3.31 */ -#define CSD_SPEC_VER_4 4 /* Implements system specification 4.0 - 4.1 */ - -/* - * EXT_CSD fields - */ - -#define EXT_CSD_CMDQ_MODE_EN 15 /* R/W */ -#define EXT_CSD_FLUSH_CACHE 32 /* W */ -#define EXT_CSD_CACHE_CTRL 33 /* R/W */ -#define EXT_CSD_POWER_OFF_NOTIFICATION 34 /* R/W */ -#define EXT_CSD_PACKED_FAILURE_INDEX 35 /* RO */ -#define EXT_CSD_PACKED_CMD_STATUS 36 /* RO */ -#define EXT_CSD_EXP_EVENTS_STATUS 54 /* RO, 2 bytes */ -#define EXT_CSD_EXP_EVENTS_CTRL 56 /* R/W, 2 bytes */ -#define EXT_CSD_DATA_SECTOR_SIZE 61 /* R */ -#define EXT_CSD_GP_SIZE_MULT 143 /* R/W */ -#define EXT_CSD_PARTITION_SETTING_COMPLETED 155 /* R/W */ -#define EXT_CSD_PARTITION_ATTRIBUTE 156 /* R/W */ -#define EXT_CSD_PARTITION_SUPPORT 160 /* RO */ -#define EXT_CSD_HPI_MGMT 161 /* R/W */ -#define EXT_CSD_RST_N_FUNCTION 162 /* R/W */ -#define EXT_CSD_BKOPS_EN 163 /* R/W */ -#define EXT_CSD_BKOPS_START 164 /* W */ -#define EXT_CSD_SANITIZE_START 165 /* W */ -#define EXT_CSD_WR_REL_PARAM 166 /* RO */ -#define EXT_CSD_RPMB_MULT 168 /* RO */ -#define EXT_CSD_FW_CONFIG 169 /* R/W */ -#define EXT_CSD_BOOT_WP 173 /* R/W */ -#define EXT_CSD_ERASE_GROUP_DEF 175 /* R/W */ -#define EXT_CSD_PART_CONFIG 179 /* R/W */ -#define EXT_CSD_ERASED_MEM_CONT 181 /* RO */ -#define EXT_CSD_BUS_WIDTH 183 /* R/W */ -#define EXT_CSD_STROBE_SUPPORT 184 /* RO */ -#define EXT_CSD_HS_TIMING 185 /* R/W */ -#define EXT_CSD_POWER_CLASS 187 /* R/W */ -#define EXT_CSD_REV 192 /* RO */ -#define EXT_CSD_STRUCTURE 194 /* RO */ -#define EXT_CSD_CARD_TYPE 196 /* RO */ -#define EXT_CSD_DRIVER_STRENGTH 197 /* RO */ -#define EXT_CSD_OUT_OF_INTERRUPT_TIME 198 /* RO */ -#define EXT_CSD_PART_SWITCH_TIME 199 /* RO */ -#define EXT_CSD_PWR_CL_52_195 200 /* RO */ -#define EXT_CSD_PWR_CL_26_195 201 /* RO */ -#define EXT_CSD_PWR_CL_52_360 202 /* RO */ -#define EXT_CSD_PWR_CL_26_360 203 /* RO */ -#define EXT_CSD_SEC_CNT 212 /* RO, 4 bytes */ -#define EXT_CSD_S_A_TIMEOUT 217 /* RO */ -#define EXT_CSD_REL_WR_SEC_C 222 /* RO */ -#define EXT_CSD_HC_WP_GRP_SIZE 221 /* RO */ -#define EXT_CSD_ERASE_TIMEOUT_MULT 223 /* RO */ -#define EXT_CSD_HC_ERASE_GRP_SIZE 224 /* RO */ -#define EXT_CSD_BOOT_MULT 226 /* RO */ -#define EXT_CSD_SEC_TRIM_MULT 229 /* RO */ -#define EXT_CSD_SEC_ERASE_MULT 230 /* RO */ -#define EXT_CSD_SEC_FEATURE_SUPPORT 231 /* RO */ -#define EXT_CSD_TRIM_MULT 232 /* RO */ -#define EXT_CSD_PWR_CL_200_195 236 /* RO */ -#define EXT_CSD_PWR_CL_200_360 237 /* RO */ -#define EXT_CSD_PWR_CL_DDR_52_195 238 /* RO */ -#define EXT_CSD_PWR_CL_DDR_52_360 239 /* RO */ -#define EXT_CSD_BKOPS_STATUS 246 /* RO */ -#define EXT_CSD_POWER_OFF_LONG_TIME 247 /* RO */ -#define EXT_CSD_GENERIC_CMD6_TIME 248 /* RO */ -#define EXT_CSD_CACHE_SIZE 249 /* RO, 4 bytes */ -#define EXT_CSD_PWR_CL_DDR_200_360 253 /* RO */ -#define EXT_CSD_FIRMWARE_VERSION 254 /* RO, 8 bytes */ -#define EXT_CSD_PRE_EOL_INFO 267 /* RO */ -#define EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_A 268 /* RO */ -#define EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B 269 /* RO */ -#define EXT_CSD_CMDQ_DEPTH 307 /* RO */ -#define EXT_CSD_CMDQ_SUPPORT 308 /* RO */ -#define EXT_CSD_SUPPORTED_MODE 493 /* RO */ -#define EXT_CSD_TAG_UNIT_SIZE 498 /* RO */ -#define EXT_CSD_DATA_TAG_SUPPORT 499 /* RO */ -#define EXT_CSD_MAX_PACKED_WRITES 500 /* RO */ -#define EXT_CSD_MAX_PACKED_READS 501 /* RO */ -#define EXT_CSD_BKOPS_SUPPORT 502 /* RO */ -#define EXT_CSD_HPI_FEATURES 503 /* RO */ - -/* - * EXT_CSD field definitions - */ - -#define EXT_CSD_WR_REL_PARAM_EN (1<<2) - -#define EXT_CSD_BOOT_WP_B_PWR_WP_DIS (0x40) -#define EXT_CSD_BOOT_WP_B_PERM_WP_DIS (0x10) -#define EXT_CSD_BOOT_WP_B_PERM_WP_EN (0x04) -#define EXT_CSD_BOOT_WP_B_PWR_WP_EN (0x01) - -#define EXT_CSD_PART_CONFIG_ACC_MASK (0x7) -#define EXT_CSD_PART_CONFIG_ACC_BOOT0 (0x1) -#define EXT_CSD_PART_CONFIG_ACC_RPMB (0x3) -#define EXT_CSD_PART_CONFIG_ACC_GP0 (0x4) - -#define EXT_CSD_PART_SETTING_COMPLETED (0x1) -#define EXT_CSD_PART_SUPPORT_PART_EN (0x1) - -#define EXT_CSD_CMD_SET_NORMAL (1<<0) -#define EXT_CSD_CMD_SET_SECURE (1<<1) -#define EXT_CSD_CMD_SET_CPSECURE (1<<2) - -#define EXT_CSD_CARD_TYPE_HS_26 (1<<0) /* Card can run at 26MHz */ -#define EXT_CSD_CARD_TYPE_HS_52 (1<<1) /* Card can run at 52MHz */ -#define EXT_CSD_CARD_TYPE_HS (EXT_CSD_CARD_TYPE_HS_26 | \ - EXT_CSD_CARD_TYPE_HS_52) -#define EXT_CSD_CARD_TYPE_DDR_1_8V (1<<2) /* Card can run at 52MHz */ - /* DDR mode @1.8V or 3V I/O */ -#define EXT_CSD_CARD_TYPE_DDR_1_2V (1<<3) /* Card can run at 52MHz */ - /* DDR mode @1.2V I/O */ -#define EXT_CSD_CARD_TYPE_DDR_52 (EXT_CSD_CARD_TYPE_DDR_1_8V \ - | EXT_CSD_CARD_TYPE_DDR_1_2V) -#define EXT_CSD_CARD_TYPE_HS200_1_8V (1<<4) /* Card can run at 200MHz */ -#define EXT_CSD_CARD_TYPE_HS200_1_2V (1<<5) /* Card can run at 200MHz */ - /* SDR mode @1.2V I/O */ -#define EXT_CSD_CARD_TYPE_HS200 (EXT_CSD_CARD_TYPE_HS200_1_8V | \ - EXT_CSD_CARD_TYPE_HS200_1_2V) -#define EXT_CSD_CARD_TYPE_HS400_1_8V (1<<6) /* Card can run at 200MHz DDR, 1.8V */ -#define EXT_CSD_CARD_TYPE_HS400_1_2V (1<<7) /* Card can run at 200MHz DDR, 1.2V */ -#define EXT_CSD_CARD_TYPE_HS400 (EXT_CSD_CARD_TYPE_HS400_1_8V | \ - EXT_CSD_CARD_TYPE_HS400_1_2V) -#define EXT_CSD_CARD_TYPE_HS400ES (1<<8) /* Card can run at HS400ES */ - -#define EXT_CSD_BUS_WIDTH_1 0 /* Card is in 1 bit mode */ -#define EXT_CSD_BUS_WIDTH_4 1 /* Card is in 4 bit mode */ -#define EXT_CSD_BUS_WIDTH_8 2 /* Card is in 8 bit mode */ -#define EXT_CSD_DDR_BUS_WIDTH_4 5 /* Card is in 4 bit DDR mode */ -#define EXT_CSD_DDR_BUS_WIDTH_8 6 /* Card is in 8 bit DDR mode */ -#define EXT_CSD_BUS_WIDTH_STROBE BIT(7) /* Enhanced strobe mode */ - -#define EXT_CSD_TIMING_BC 0 /* Backwards compatility */ -#define EXT_CSD_TIMING_HS 1 /* High speed */ -#define EXT_CSD_TIMING_HS200 2 /* HS200 */ -#define EXT_CSD_TIMING_HS400 3 /* HS400 */ -#define EXT_CSD_DRV_STR_SHIFT 4 /* Driver Strength shift */ - -#define EXT_CSD_SEC_ER_EN BIT(0) -#define EXT_CSD_SEC_BD_BLK_EN BIT(2) -#define EXT_CSD_SEC_GB_CL_EN BIT(4) -#define EXT_CSD_SEC_SANITIZE BIT(6) /* v4.5 only */ - -#define EXT_CSD_RST_N_EN_MASK 0x3 -#define EXT_CSD_RST_N_ENABLED 1 /* RST_n is enabled on card */ - -#define EXT_CSD_NO_POWER_NOTIFICATION 0 -#define EXT_CSD_POWER_ON 1 -#define EXT_CSD_POWER_OFF_SHORT 2 -#define EXT_CSD_POWER_OFF_LONG 3 - -#define EXT_CSD_PWR_CL_8BIT_MASK 0xF0 /* 8 bit PWR CLS */ -#define EXT_CSD_PWR_CL_4BIT_MASK 0x0F /* 8 bit PWR CLS */ -#define EXT_CSD_PWR_CL_8BIT_SHIFT 4 -#define EXT_CSD_PWR_CL_4BIT_SHIFT 0 - -#define EXT_CSD_PACKED_EVENT_EN BIT(3) - -/* - * EXCEPTION_EVENT_STATUS field - */ -#define EXT_CSD_URGENT_BKOPS BIT(0) -#define EXT_CSD_DYNCAP_NEEDED BIT(1) -#define EXT_CSD_SYSPOOL_EXHAUSTED BIT(2) -#define EXT_CSD_PACKED_FAILURE BIT(3) - -#define EXT_CSD_PACKED_GENERIC_ERROR BIT(0) -#define EXT_CSD_PACKED_INDEXED_ERROR BIT(1) - -/* - * BKOPS status level - */ -#define EXT_CSD_BKOPS_LEVEL_2 0x2 - -/* - * BKOPS modes - */ -#define EXT_CSD_MANUAL_BKOPS_MASK 0x01 -#define EXT_CSD_AUTO_BKOPS_MASK 0x02 - -/* - * Command Queue - */ -#define EXT_CSD_CMDQ_MODE_ENABLED BIT(0) -#define EXT_CSD_CMDQ_DEPTH_MASK GENMASK(4, 0) -#define EXT_CSD_CMDQ_SUPPORTED BIT(0) - -/* - * MMC_SWITCH access modes - */ -#define MMC_SWITCH_MODE_CMD_SET 0x00 /* Change the command set */ -#define MMC_SWITCH_MODE_SET_BITS 0x01 /* Set bits which are 1 in value */ -#define MMC_SWITCH_MODE_CLEAR_BITS 0x02 /* Clear bits which are 1 in value */ -#define MMC_SWITCH_MODE_WRITE_BYTE 0x03 /* Set target to value */ - -/* - * Erase/trim/discard - */ -#define MMC_ERASE_ARG 0x00000000 -#define MMC_SECURE_ERASE_ARG 0x80000000 -#define MMC_TRIM_ARG 0x00000001 -#define MMC_DISCARD_ARG 0x00000003 -#define MMC_SECURE_TRIM1_ARG 0x80000001 -#define MMC_SECURE_TRIM2_ARG 0x80008000 -#define MMC_SECURE_ARGS 0x80000000 -#define MMC_TRIM_ARGS 0x00008001 - -#define mmc_driver_type_mask(n) (1 << (n)) - -#endif /* LINUX_MMC_MMC_H */ diff --git a/libraries/NEMU/src/device/sdcard.c b/libraries/NEMU/src/device/sdcard.c deleted file mode 100644 index 45568db..0000000 --- a/libraries/NEMU/src/device/sdcard.c +++ /dev/null @@ -1,121 +0,0 @@ -#include -#include "mmc.h" - -// http://www.files.e-shop.co.il/pdastore/Tech-mmc-samsung/SEC%20MMC%20SPEC%20ver09.pdf - -// see page 26 of the manual above -#define MEMORY_SIZE (16ull * 1024 * 1024 * 1024) // 16GB -#define READ_BL_LEN 15 -#define BLOCK_LEN (1 << READ_BL_LEN) -#define NR_BLOCK (MEMORY_SIZE / BLOCK_LEN) -#define C_SIZE_MULT 7 // only 3 bits -#define MULT (1 << (C_SIZE_MULT + 2)) -#define C_SIZE (NR_BLOCK / MULT - 1) - -// This is a simple hardware implementation of linux/drivers/mmc/host/bcm2835.c -// No DMA and IRQ is supported, so the driver must be modified to start PIO -// right after sending the actual read/write commands. - -enum { - SDCMD, SDARG, SDTOUT, SDCDIV, - SDRSP0, SDRSP1, SDRSP2, SDRSP3, - SDHSTS, __PAD0, __PAD1, __PAD2, - SDVDD, SDEDM, SDHCFG, SDHBCT, - SDDATA, __PAD10, __PAD11, __PAD12, - SDHBLC -}; - -static FILE *fp = NULL; -static uint32_t *base = NULL; -static uint32_t blkcnt = 0; -static long blk_addr = 0; -static uint32_t addr = 0; -static bool write_cmd = 0; -static bool read_ext_csd = false; - -static inline void prepare_rw(int is_write) { - blk_addr = base[SDARG]; - addr = 0; - if (fp) fseek(fp, blk_addr << 9, SEEK_SET); - write_cmd = is_write; -} - -static void sdcard_handle_cmd(int cmd) { - switch (cmd) { - case MMC_GO_IDLE_STATE: break; - case MMC_SEND_OP_COND: base[SDRSP0] = 0x80ff8000; break; - case MMC_ALL_SEND_CID: - base[SDRSP0] = 0x00000001; - base[SDRSP1] = 0x00000000; - base[SDRSP2] = 0x00000000; - base[SDRSP3] = 0x15000000; - break; - case 52: // ??? - break; - case MMC_SEND_CSD: - base[SDRSP0] = 0x92404001; - base[SDRSP1] = 0x124b97e3 | ((C_SIZE & 0x3) << 30); - base[SDRSP2] = 0x0f508000 | (C_SIZE >> 2) | (READ_BL_LEN << 16); - base[SDRSP3] = 0x9026012a; - break; - case MMC_SEND_EXT_CSD: read_ext_csd = true; addr = 0; break; - case MMC_SLEEP_AWAKE: break; - case MMC_APP_CMD: break; - case MMC_SET_RELATIVE_ADDR: break; - case MMC_SELECT_CARD: break; - case MMC_SET_BLOCK_COUNT: blkcnt = base[SDARG] & 0xffff; break; - case MMC_READ_MULTIPLE_BLOCK: prepare_rw(false); break; - case MMC_WRITE_MULTIPLE_BLOCK: prepare_rw(true); break; - case MMC_SEND_STATUS: base[SDRSP0] = base[SDRSP1] = base[SDRSP2] = base[SDRSP3] = 0; break; - case MMC_STOP_TRANSMISSION: break; - default: - panic("unhandled command = %d", cmd); - } -} - -static void sdcard_io_handler(uint32_t offset, int len, bool is_write) { - int idx = offset / 4; - switch (idx) { - case SDCMD: sdcard_handle_cmd(base[SDCMD] & 0x3f); break; - case SDARG: - case SDRSP0: - case SDRSP1: - case SDRSP2: - case SDRSP3: - break; - case SDDATA: - if (read_ext_csd) { - // See section 8.1 JEDEC Standard JED84-A441 - uint32_t data; - switch (addr) { - case 192: data = 2; break; // EXT_CSD_REV - case 212: data = MEMORY_SIZE / 512; break; - default: data = 0; - } - base[SDDATA] = data; - if (addr == 512 - 4) read_ext_csd = false; - } else if (fp) { - __attribute__((unused)) int ret; - if (!write_cmd) { ret = fread(&base[SDDATA], 4, 1, fp); } - else { ret = fwrite(&base[SDDATA], 4, 1, fp); } - } - addr += 4; - break; - default: - Log("offset = 0x%x(idx = %d), is_write = %d, data = 0x%x", offset, idx, is_write, base[idx]); - panic("unhandle offset = %d", offset); - } -} - -void init_sdcard() { - base = (uint32_t *)new_space(0x80); - add_mmio_map("sdhci", CONFIG_SDCARD_CTL_MMIO, base, 0x80, sdcard_io_handler); - - //base[SDEDM] = (8 << 4); // number of data in fifo - - Assert(C_SIZE < (1 << 12), "shoule be fit in 12 bits"); - - const char *img = CONFIG_SDCARD_IMG_PATH; - fp = fopen(img, "r+"); - if (fp == NULL) Log("Can not find sdcard image: %s", img); -} diff --git a/libraries/NEMU/src/device/serial.c b/libraries/NEMU/src/device/serial.c deleted file mode 100644 index 4fa5a3d..0000000 --- a/libraries/NEMU/src/device/serial.c +++ /dev/null @@ -1,132 +0,0 @@ -#include -#include - -/* http://en.wikibooks.org/wiki/Serial_Programming/8250_UART_Programming */ -// NOTE: this is compatible to 16550 - -#define CH_OFFSET 0 -#define LSR_OFFSET 5 -#define LSR_TX_READY 0x20 -#define LSR_RX_READY 0x01 - -static uint8_t *serial_base = NULL; - -#ifdef CONFIG_SERIAL_INPUT_FIFO -#include -#include -#include -#include -#include - -#define QUEUE_SIZE 1024 -static char queue[QUEUE_SIZE] = {}; -static int f = 0, r = 0; -#define FIFO_PATH "/tmp/nemu-serial" -static int fifo_fd = 0; - -static void serial_enqueue(char ch) { - int next = (r + 1) % QUEUE_SIZE; - if (next != f) { - // not full - queue[r] = ch; - r = next; - } -} - -static char serial_dequeue() { - char ch = 0xff; - if (f != r) { - ch = queue[f]; - f = (f + 1) % QUEUE_SIZE; - } - return ch; -} - -static inline uint8_t serial_rx_ready_flag() { - static uint32_t last = 0; // unit: s - uint32_t now = get_time() / 1000000; - if (now > last) { - Log("now = %d", now); - last = now; - } - - if (f == r) { - char input[256]; - // First open in read only and read - int ret = read(fifo_fd, input, 256); - assert(ret < 256); - - if (ret > 0) { - int i; - for (i = 0; i < ret; i ++) { - serial_enqueue(input[i]); - } - } - } - return (f == r ? 0 : LSR_RX_READY); -} - -#define rt_thread_cmd "memtrace\n" -#define busybox_cmd "ls\n" \ - "cd /root\n" \ - "echo hello2\n" \ - "cd /root/benchmark\n" \ - "./stream\n" \ - "echo hello3\n" \ - "cd /root/redis\n" \ - "ls\n" \ - "ifconfig -a\n" \ - "ls\n" \ - "./redis-server\n" \ - -#define debian_cmd "root\n" \ - -static void preset_input() { - char buf[] = debian_cmd; - int i; - for (i = 0; i < strlen(buf); i ++) { - serial_enqueue(buf[i]); - } -} - -static void init_fifo() { - int ret = mkfifo(FIFO_PATH, 0666); - assert(ret == 0 || errno == EEXIST); - fifo_fd = open(FIFO_PATH, O_RDONLY | O_NONBLOCK); - assert(fifo_fd != -1); -} - -#endif - -static void serial_io_handler(uint32_t offset, int len, bool is_write) { - assert(len == 1); - switch (offset) { - /* We bind the serial port with the host stderr in NEMU. */ - case CH_OFFSET: - if (is_write) putc(serial_base[0], stderr); - else serial_base[0] = MUXDEF(CONFIG_SERIAL_INPUT_FIFO, serial_dequeue(), 0xff); - break; - case LSR_OFFSET: - if (!is_write) - serial_base[5] = LSR_TX_READY | MUXDEF(CONFIG_SERIAL_INPUT_FIFO, serial_rx_ready_flag(), 0); - break; - } -} - -void init_serial() { -#ifdef CONFIG_SERIAL_UARTLITE - void init_uartlite(); - init_uartlite(); - // to avoid unused-function warning - (void)serial_io_handler; -#else - serial_base = new_space(8); - add_pio_map ("serial", CONFIG_SERIAL_PORT, serial_base, 8, serial_io_handler); - add_mmio_map("serial", CONFIG_SERIAL_MMIO, serial_base, 8, serial_io_handler); - -#ifdef CONFIG_SERIAL_INPUT_FIFO - init_fifo(); - preset_input(); -#endif -#endif // CONFIG_SERIAL_UARTLITE -} diff --git a/libraries/NEMU/src/device/timer.c b/libraries/NEMU/src/device/timer.c deleted file mode 100644 index 22839b8..0000000 --- a/libraries/NEMU/src/device/timer.c +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include -#include - -static uint32_t *rtc_port_base = NULL; - -static void rtc_io_handler(uint32_t offset, int len, bool is_write) { - assert(offset == 0 || offset == 4); - if (!is_write && offset == 4) { - uint64_t us = get_time(); - rtc_port_base[0] = (uint32_t)us; - rtc_port_base[1] = us >> 32; - } -} - -static void timer_intr() { - if (nemu_state.state == NEMU_RUNNING) { - extern void dev_raise_intr(); - dev_raise_intr(); - } -} - -void init_timer() { - rtc_port_base = (uint32_t *)new_space(8); - add_pio_map ("rtc", CONFIG_RTC_PORT, rtc_port_base, 8, rtc_io_handler); - add_mmio_map("rtc", CONFIG_RTC_MMIO, rtc_port_base, 8, rtc_io_handler); - add_alarm_handle(timer_intr); -} diff --git a/libraries/NEMU/src/device/uartlite.c b/libraries/NEMU/src/device/uartlite.c deleted file mode 100644 index e955d1b..0000000 --- a/libraries/NEMU/src/device/uartlite.c +++ /dev/null @@ -1,126 +0,0 @@ -#include -#include - -#define CH_OFFSET 0 -#define UARTLITE_RX_FIFO 0x0 -#define UARTLITE_TX_FIFO 0x4 -#define UARTLITE_STAT_REG 0x8 -#define UARTLITE_CTRL_REG 0xc - -#define UARTLITE_RST_FIFO 0x03 -#define UARTLITE_TX_FULL 0x08 -#define UARTLITE_RX_VALID 0x01 - -static uint8_t *serial_base = NULL; - -#ifdef CONFIG_UARTLITE_INPUT_FIFO -#include -#include -#include -#include -#include - -#define QUEUE_SIZE 1024 -static char queue[QUEUE_SIZE] = {}; -static int f = 0, r = 0; -#define FIFO_PATH "/tmp/nemu-serial" -static int fifo_fd = 0; - -static void serial_enqueue(char ch) { - int next = (r + 1) % QUEUE_SIZE; - if (next != f) { - // not full - queue[r] = ch; - r = next; - } -} - -static char serial_dequeue() { - char ch = 0xff; - if (f != r) { - ch = queue[f]; - f = (f + 1) % QUEUE_SIZE; - } - return ch; -} - -static inline uint8_t serial_rx_ready_flag() { - static uint32_t last = 0; // unit: s - uint32_t now = get_time() / 1000000; - if (now > last) { - Log("now = %d", now); - last = now; - } - - if (f == r) { - char input[256]; - // First open in read only and read - int ret = read(fifo_fd, input, 256); - assert(ret < 256); - - if (ret > 0) { - int i; - for (i = 0; i < ret; i ++) { - serial_enqueue(input[i]); - } - } - } - return (f == r ? 0 : LSR_RX_READY); -} - -#define rt_thread_cmd "memtrace\n" -#define busybox_cmd "ls\n" \ - "cd /root\n" \ - "echo hello2\n" \ - "cd /root/benchmark\n" \ - "./stream\n" \ - "echo hello3\n" \ - "cd /root/redis\n" \ - "ls\n" \ - "ifconfig -a\n" \ - "ls\n" \ - "./redis-server\n" \ - -#define debian_cmd "root\n" \ - -static void preset_input() { - char buf[] = debian_cmd; - int i; - for (i = 0; i < strlen(buf); i ++) { - serial_enqueue(buf[i]); - } -} - -static void init_fifo() { - int ret = mkfifo(FIFO_PATH, 0666); - assert(ret == 0 || errno == EEXIST); - fifo_fd = open(FIFO_PATH, O_RDONLY | O_NONBLOCK); - assert(fifo_fd != -1); -} - -#endif - -static void serial_io_handler(uint32_t offset, int len, bool is_write) { - assert(len == 1); - switch (offset) { - /* We bind the serial port with the host stdout in NEMU. */ - case UARTLITE_TX_FIFO: - if (is_write) putc(serial_base[UARTLITE_TX_FIFO], stderr); - else panic("Cannot read UARTLITE_TX_FIFO"); - break; - case UARTLITE_STAT_REG: - if (!is_write) serial_base[UARTLITE_STAT_REG] = 0x0; - break; - } -} - -void init_uartlite() { - serial_base = new_space(0xd); - add_pio_map("uartlite", CONFIG_UARTLITE_PORT, serial_base, 0xd, serial_io_handler); - add_mmio_map("uartlite", CONFIG_UARTLITE_MMIO, serial_base, 0xd, serial_io_handler); - -#ifdef CONFIG_UARTLITE_INPUT_FIFO - init_fifo(); - preset_input(); -#endif -} diff --git a/libraries/NEMU/src/device/vga.c b/libraries/NEMU/src/device/vga.c deleted file mode 100644 index 49cb614..0000000 --- a/libraries/NEMU/src/device/vga.c +++ /dev/null @@ -1,60 +0,0 @@ -#include -#include -#include - -#define SCREEN_W (MUXDEF(CONFIG_VGA_SIZE_800x600, 800, 400)) -#define SCREEN_H (MUXDEF(CONFIG_VGA_SIZE_800x600, 600, 300)) -#define SCREEN_SIZE ((SCREEN_H * SCREEN_W) * sizeof(uint32_t)) - -static uint32_t (*vmem) [SCREEN_W] = NULL; -static uint32_t *vgactl_port_base = NULL; - -#ifdef CONFIG_VGA_SHOW_SCREEN -static SDL_Renderer *renderer = NULL; -static SDL_Texture *texture = NULL; - -static inline void init_screen() { - SDL_Window *window = NULL; - char title[128]; - sprintf(title, "%s-NEMU", str(__ISA__)); - SDL_Init(SDL_INIT_VIDEO); - SDL_CreateWindowAndRenderer( - SCREEN_W * (MUXDEF(CONFIG_VGA_SIZE_400x300, 2, 1)), - SCREEN_H * (MUXDEF(CONFIG_VGA_SIZE_400x300, 2, 1)), - 0, &window, &renderer); - SDL_SetWindowTitle(window, title); - texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, - SDL_TEXTUREACCESS_STATIC, SCREEN_W, SCREEN_H); -} - -static inline void update_screen() { - SDL_UpdateTexture(texture, NULL, vmem, SCREEN_W * sizeof(vmem[0][0])); - SDL_RenderClear(renderer); - SDL_RenderCopy(renderer, texture, NULL, NULL); - SDL_RenderPresent(renderer); -} -#endif - -void vga_update_screen() { -#ifdef __ICS_EXPORT - // TODO: call `update_screen()` when the sync register is non-zero, - // then zero out the sync register -#else - if (vgactl_port_base[1]) { - IFDEF(CONFIG_VGA_SHOW_SCREEN, update_screen()); - vgactl_port_base[1] = 0; - } -#endif -} - -void init_vga() { - IFDEF(CONFIG_VGA_SHOW_SCREEN, init_screen()); - - vgactl_port_base = (uint32_t *)new_space(8); - vgactl_port_base[0] = ((SCREEN_W) << 16) | (SCREEN_H); - add_pio_map ("screen", CONFIG_VGA_CTL_PORT, vgactl_port_base, 8, NULL); - add_mmio_map("screen", CONFIG_VGA_CTL_MMIO, vgactl_port_base, 8, NULL); - - vmem = (uint32_t (*)[SCREEN_W])new_space(SCREEN_SIZE); - add_mmio_map("vmem", CONFIG_FB_ADDR, vmem, SCREEN_SIZE, NULL); -} diff --git a/libraries/NEMU/src/engine/interpreter/c_op.h b/libraries/NEMU/src/engine/interpreter/c_op.h deleted file mode 100644 index 486651b..0000000 --- a/libraries/NEMU/src/engine/interpreter/c_op.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef __C_OP_H__ -#define __C_OP_H__ - -#include - -#define c_shift_mask MUXDEF(CONFIG_ISA64, 0x3f, 0x1f) - -#define c_add(a, b) ((a) + (b)) -#define c_sub(a, b) ((a) - (b)) -#define c_and(a, b) ((a) & (b)) -#define c_or(a, b) ((a) | (b)) -#define c_xor(a, b) ((a) ^ (b)) -#define c_shl(a, b) ((a) << ((b) & c_shift_mask)) -#define c_shr(a, b) ((a) >> ((b) & c_shift_mask)) -#define c_sar(a, b) ((sword_t)(a) >> ((b) & c_shift_mask)) - -#ifdef CONFIG_ISA64 -#define c_sext32to64(a) ((int64_t)(int32_t)(a)) -#define c_addw(a, b) c_sext32to64((a) + (b)) -#define c_subw(a, b) c_sext32to64((a) - (b)) -#define c_shlw(a, b) c_sext32to64((uint32_t)(a) << ((b) & 0x1f)) -#define c_shrw(a, b) c_sext32to64((uint32_t)(a) >> ((b) & 0x1f)) -#define c_sarw(a, b) c_sext32to64(( int32_t)(a) >> ((b) & 0x1f)) -#endif - -#define c_mulu_lo(a, b) ((a) * (b)) -#ifdef CONFIG_ISA64 -# define c_mulu_hi(a, b) (((__uint128_t)(a) * (__uint128_t)(b)) >> 64) -# define c_muls_hi(a, b) (((__int128_t)(sword_t)(a) * (__int128_t)(sword_t)(b)) >> 64) -# define c_mulw(a, b) c_sext32to64((a) * (b)) -# define c_divw(a, b) c_sext32to64(( int32_t)(a) / ( int32_t)(b)) -# define c_divuw(a, b) c_sext32to64((uint32_t)(a) / (uint32_t)(b)) -# define c_remw(a, b) c_sext32to64(( int32_t)(a) % ( int32_t)(b)) -# define c_remuw(a, b) c_sext32to64((uint32_t)(a) % (uint32_t)(b)) -#else -#define c_mulu_hi(a, b) (((uint64_t)(a) * (uint64_t)(b)) >> 32) -#define c_muls_hi(a, b) (((int64_t)(sword_t)(a) * (int64_t)(sword_t)(b)) >> 32) -#endif - -#define c_divu_q(a, b) ((a) / (b)) -#define c_divu_r(a, b) ((a) % (b)) -#define c_divs_q(a, b) ((sword_t)(a) / (sword_t)(b)) -#define c_divs_r(a, b) ((sword_t)(a) % (sword_t)(b)) - -static inline bool interpret_relop(uint32_t relop, const rtlreg_t src1, const rtlreg_t src2) { - switch (relop) { - case RELOP_FALSE: return false; - case RELOP_TRUE: return true; - case RELOP_EQ: return src1 == src2; - case RELOP_NE: return src1 != src2; - case RELOP_LT: return (sword_t)src1 < (sword_t)src2; - case RELOP_LE: return (sword_t)src1 <= (sword_t)src2; - case RELOP_GT: return (sword_t)src1 > (sword_t)src2; - case RELOP_GE: return (sword_t)src1 >= (sword_t)src2; - case RELOP_LTU: return src1 < src2; - case RELOP_LEU: return src1 <= src2; - case RELOP_GTU: return src1 > src2; - case RELOP_GEU: return src1 >= src2; - default: panic("unsupport relop = %d", relop); - } -} - -#endif diff --git a/libraries/NEMU/src/engine/interpreter/fp.c b/libraries/NEMU/src/engine/interpreter/fp.c deleted file mode 100644 index 079393f..0000000 --- a/libraries/NEMU/src/engine/interpreter/fp.c +++ /dev/null @@ -1,116 +0,0 @@ -#include -#include MUXDEF(CONFIG_FPU_SOFT, "softfloat-fp.h", "host-fp.h") - -#define BOX_MASK 0xFFFFFFFF00000000 - -static inline rtlreg_t unbox(rtlreg_t r) { - return MUXDEF(CONFIG_FPU_SOFT, (r & BOX_MASK) == BOX_MASK, true) - ? (r & ~BOX_MASK) : defaultNaNF32UI; -} - -static inline float32_t rtlToF32(rtlreg_t r) { - float32_t f = { .v = (uint32_t)unbox(r) }; - return f; -} - -static inline float64_t rtlToF64(rtlreg_t r) { - float64_t f = { .v = r }; - return f; -} - -uint32_t isa_fp_get_rm(Decode *s); -void isa_fp_set_ex(uint32_t ex); -void isa_fp_csr_check(); - -def_rtl(fpcall, rtlreg_t *dest, const rtlreg_t *src1, const rtlreg_t *src2, uint32_t cmd) { - uint32_t w = FPCALL_W(cmd); - uint32_t op = FPCALL_OP(cmd); - isa_fp_csr_check(); - if (op < FPCALL_NEED_RM) { - static uint32_t last_rm = -1; - uint32_t rm = isa_fp_get_rm(s); - if (unlikely(rm != last_rm)) { - fp_set_rm(rm); - last_rm = rm; - } - } - - if (w == FPCALL_W32) { - float32_t fsrc1 = rtlToF32(*src1); - float32_t fsrc2 = rtlToF32(*src2); - switch (op) { - case FPCALL_ADD: *dest = f32_add(fsrc1, fsrc2).v; break; - case FPCALL_SUB: *dest = f32_sub(fsrc1, fsrc2).v; break; - case FPCALL_MUL: *dest = f32_mul(fsrc1, fsrc2).v; break; - case FPCALL_DIV: *dest = f32_div(fsrc1, fsrc2).v; break; - case FPCALL_MIN: *dest = f32_min(fsrc1, fsrc2).v; break; - case FPCALL_MAX: *dest = f32_max(fsrc1, fsrc2).v; break; - - case FPCALL_SQRT: *dest = f32_sqrt(fsrc1).v; break; - - case FPCALL_MADD: *dest = f32_mulAdd(fsrc1, fsrc2, rtlToF32(*dest)).v; break; - - case FPCALL_LE: *dest = f32_le(fsrc1, fsrc2); break; - case FPCALL_LT: *dest = f32_lt(fsrc1, fsrc2); break; - case FPCALL_EQ: *dest = f32_eq(fsrc1, fsrc2); break; - - case FPCALL_I32ToF: *dest = i32_to_f32 (*src1).v; break; - case FPCALL_U32ToF: *dest = ui32_to_f32(*src1).v; break; - case FPCALL_I64ToF: *dest = i64_to_f32 (*src1).v; break; - case FPCALL_U64ToF: *dest = ui64_to_f32(*src1).v; break; - - case FPCALL_FToI32: *dest = my_f32_to_i32 (fsrc1); break; - case FPCALL_FToU32: *dest = my_f32_to_ui32(fsrc1); break; - case FPCALL_FToI64: *dest = my_f32_to_i64 (fsrc1); break; - case FPCALL_FToU64: *dest = my_f32_to_ui64(fsrc1); break; - default: panic("op = %d not supported", op); - } - } else if (w == FPCALL_W64) { - float64_t fsrc1 = rtlToF64(*src1); - float64_t fsrc2 = rtlToF64(*src2); - switch (op) { - case FPCALL_ADD: *dest = f64_add(fsrc1, fsrc2).v; break; - case FPCALL_SUB: *dest = f64_sub(fsrc1, fsrc2).v; break; - case FPCALL_MUL: *dest = f64_mul(fsrc1, fsrc2).v; break; - case FPCALL_DIV: *dest = f64_div(fsrc1, fsrc2).v; break; - case FPCALL_MAX: *dest = f64_max(fsrc1, fsrc2).v; break; - case FPCALL_MIN: *dest = f64_min(fsrc1, fsrc2).v; break; - - case FPCALL_SQRT: *dest = f64_sqrt(fsrc1).v; break; - - case FPCALL_MADD: *dest = f64_mulAdd(fsrc1, fsrc2, rtlToF64(*dest)).v; break; - - case FPCALL_LE: *dest = f64_le(fsrc1, fsrc2); break; - case FPCALL_LT: *dest = f64_lt(fsrc1, fsrc2); break; - case FPCALL_EQ: *dest = f64_eq(fsrc1, fsrc2); break; - - case FPCALL_I32ToF: *dest = i32_to_f64 (*src1).v; break; - case FPCALL_U32ToF: *dest = ui32_to_f64(*src1).v; break; - case FPCALL_I64ToF: *dest = i64_to_f64 (*src1).v; break; - case FPCALL_U64ToF: *dest = ui64_to_f64(*src1).v; break; - - case FPCALL_FToI32: *dest = my_f64_to_i32 (fsrc1); break; - case FPCALL_FToU32: *dest = my_f64_to_ui32(fsrc1); break; - case FPCALL_FToI64: *dest = my_f64_to_i64 (fsrc1); break; - case FPCALL_FToU64: *dest = my_f64_to_ui64(fsrc1); break; - - case FPCALL_F32ToF64: *dest = f32_to_f64(rtlToF32(*src1)).v; break; - case FPCALL_F64ToF32: *dest = f64_to_f32(fsrc1).v; break; - default: panic("op = %d not supported", op); - } - } - - uint32_t ex = fp_get_exception(); - if (ex) { - isa_fp_set_ex(ex); - fp_clear_exception(); - } -} - -def_rtl(fclass, rtlreg_t *fdest, rtlreg_t *src, int width) { - if (width == FPCALL_W32) { - *fdest = f32_classify(rtlToF32(*src)); - } else if (width == FPCALL_W64) { - *fdest = f64_classify(rtlToF64(*src)); - } else assert(0); -} diff --git a/libraries/NEMU/src/engine/interpreter/host-fp.h b/libraries/NEMU/src/engine/interpreter/host-fp.h deleted file mode 100644 index 25ac7c7..0000000 --- a/libraries/NEMU/src/engine/interpreter/host-fp.h +++ /dev/null @@ -1,100 +0,0 @@ -#ifndef __HOSTFP_H__ -#include -#include -#include - -#define defaultNaNF32UI 0x7FC00000 - -typedef union { uint32_t v; float f; } float32_t; -static inline float32_t float32(float f) { float32_t r = { .f = f }; return r; } - -static inline float32_t f32_add(float32_t a, float32_t b) { return float32(a.f + b.f); } -static inline float32_t f32_sub(float32_t a, float32_t b) { return float32(a.f - b.f); } -static inline float32_t f32_mul(float32_t a, float32_t b) { return float32(a.f * b.f); } -static inline float32_t f32_div(float32_t a, float32_t b) { return float32(a.f / b.f); } -static inline float32_t f32_sqrt(float32_t a) { return float32(sqrtf(a.f)); } -static inline float32_t f32_mulAdd(float32_t a, float32_t b, - float32_t c) { return float32(fmaf(a.f, b.f, c.f)); } -static inline float32_t f32_min(float32_t a, float32_t b) { return float32(a.f < b.f ? a.f : b.f); } -static inline float32_t f32_max(float32_t a, float32_t b) { return float32(a.f > b.f ? a.f : b.f); } -static inline bool f32_le(float32_t a, float32_t b) { return a.f <= b.f; } -static inline bool f32_lt(float32_t a, float32_t b) { return a.f < b.f; } -static inline bool f32_eq(float32_t a, float32_t b) { return a.f == b.f; } -static inline float32_t i32_to_f32 (rtlreg_t a) { return float32((int32_t)a); } -static inline float32_t ui32_to_f32(rtlreg_t a) { return float32((uint32_t)a); } -static inline float32_t i64_to_f32 (rtlreg_t a) { return float32((int64_t)a); } -static inline float32_t ui64_to_f32(rtlreg_t a) { return float32((uint64_t)a); } -static inline int32_t my_f32_to_i32 (float32_t a) { return llrintf(a.f); } -static inline uint32_t my_f32_to_ui32(float32_t a) { return llrintf(a.f); } -static inline int64_t my_f32_to_i64 (float32_t a) { return llrintf(a.f); } -static inline uint64_t my_f32_to_ui64(float32_t a) { return llrintf(a.f); } - - -typedef union { uint64_t v; double f; } float64_t; -static inline float64_t float64(double f) { float64_t r = { .f = f }; return r; } - -static inline float64_t f64_add(float64_t a, float64_t b) { return float64(a.f + b.f); } -static inline float64_t f64_sub(float64_t a, float64_t b) { return float64(a.f - b.f); } -static inline float64_t f64_mul(float64_t a, float64_t b) { return float64(a.f * b.f); } -static inline float64_t f64_div(float64_t a, float64_t b) { return float64(a.f / b.f); } -static inline float64_t f64_sqrt(float64_t a) { return float64(sqrt(a.f)); } -static inline float64_t f64_mulAdd(float64_t a, float64_t b, - float64_t c) { return float64(fma(a.f, b.f, c.f)); } -static inline float64_t f64_min(float64_t a, float64_t b) { return float64(a.f < b.f ? a.f : b.f); } -static inline float64_t f64_max(float64_t a, float64_t b) { return float64(a.f > b.f ? a.f : b.f); } -static inline bool f64_le(float64_t a, float64_t b) { return a.f <= b.f; } -static inline bool f64_lt(float64_t a, float64_t b) { return a.f < b.f; } -static inline bool f64_eq(float64_t a, float64_t b) { return a.f == b.f; } -static inline float64_t i32_to_f64 (rtlreg_t a) { return float64((int32_t)a); } -static inline float64_t ui32_to_f64(rtlreg_t a) { return float64((uint32_t)a); } -static inline float64_t i64_to_f64 (rtlreg_t a) { return float64((int64_t)a); } -static inline float64_t ui64_to_f64(rtlreg_t a) { return float64((uint64_t)a); } -static inline int32_t my_f64_to_i32 (float64_t a) { return llrint(a.f); } -static inline uint32_t my_f64_to_ui32(float64_t a) { return llrint(a.f); } -static inline int64_t my_f64_to_i64 (float64_t a) { return llrint(a.f); } -static inline uint64_t my_f64_to_ui64(float64_t a) { return llrint(a.f); } - -static inline float64_t f32_to_f64(float32_t a) { return float64(a.f); } -static inline float32_t f64_to_f32(float64_t a) { return float32(a.f); } - - -static inline void fp_set_rm(int rm) { - switch (rm) { - case FPCALL_RM_RNE: rm = FE_TONEAREST; break; - case FPCALL_RM_RTZ: rm = FE_TOWARDZERO; break; - case FPCALL_RM_RDN: rm = FE_DOWNWARD; break; - case FPCALL_RM_RUP: rm = FE_UPWARD; break; - case FPCALL_RM_RMM: rm = FE_TONEAREST; break; // x86 does not support RMM - default: assert(0); - } - fesetround(rm); -} - -static inline uint32_t fp_get_exception() { - uint32_t ex = 0; -#if 0 - uint32_t host_ex = fetestexcept(FE_ALL_EXCEPT); - if (host_ex & FE_INEXACT ) ex |= FPCALL_EX_NX; - if (host_ex & FE_UNDERFLOW) ex |= FPCALL_EX_UF; - if (host_ex & FE_OVERFLOW ) ex |= FPCALL_EX_OF; - if (host_ex & FE_DIVBYZERO) ex |= FPCALL_EX_DZ; - if (host_ex & FE_INVALID ) ex |= FPCALL_EX_NV; -#endif - return ex; -} - -static inline void fp_clear_exception() { - feclearexcept(FE_ALL_EXCEPT); -} - -uint_fast16_t f32_classify( float32_t a ) -{ - panic("host-fp does not support f32_classify"); -} - -uint_fast16_t f64_classify( float64_t a ) -{ - panic("host-fp does not support f64_classify"); -} - -#endif diff --git a/libraries/NEMU/src/engine/interpreter/hostcall.c b/libraries/NEMU/src/engine/interpreter/hostcall.c deleted file mode 100644 index 616bc91..0000000 --- a/libraries/NEMU/src/engine/interpreter/hostcall.c +++ /dev/null @@ -1,60 +0,0 @@ -#include -#include -#include -#include - -uint32_t pio_read(ioaddr_t addr, int len); -void pio_write(ioaddr_t addr, int len, uint32_t data); - -void set_nemu_state(int state, vaddr_t pc, int halt_ret) { - nemu_state.state = state; - nemu_state.halt_pc = pc; - nemu_state.halt_ret = halt_ret; -} - -static inline void invalid_instr(vaddr_t thispc) { - uint32_t temp[2]; - vaddr_t pc = thispc; - temp[0] = instr_fetch(&pc, 4); - temp[1] = instr_fetch(&pc, 4); - - uint8_t *p = (uint8_t *)temp; - printf("invalid opcode(PC = " FMT_WORD "):\n" - "\t%02x %02x %02x %02x %02x %02x %02x %02x ...\n" - "\t%08x %08x...\n", - thispc, p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], temp[0], temp[1]); - - printf("There are two cases which will trigger this unexpected exception:\n" - "1. The instruction at PC = " FMT_WORD " is not implemented.\n" - "2. Something is implemented incorrectly.\n", thispc); - printf("Find this PC(" FMT_WORD ") in the disassembling result to distinguish which case it is.\n\n", thispc); - printf("\33[1;31mIf it is the first case, see\n%s\nfor more details.\n\nIf it is the second case, remember:\n" - "* The machine is always right!\n" - "* Every line of untested code is always wrong!\33[0m\n\n", isa_logo); - - set_nemu_state(NEMU_ABORT, thispc, -1); -} - -def_rtl(fpcall, rtlreg_t *dest, const rtlreg_t *src1, const rtlreg_t *src2, uint32_t cmd); - -def_rtl(hostcall, uint32_t id, rtlreg_t *dest, const rtlreg_t *src1, - const rtlreg_t *src2, word_t imm) { - switch (id) { - case HOSTCALL_EXIT: - difftest_skip_ref(); - set_nemu_state(NEMU_END, s->pc, *src1); - break; - case HOSTCALL_INV: invalid_instr(s->pc); break; - case HOSTCALL_FP: rtl_fpcall(s, dest, src1, src2, imm); break; -#ifdef CONFIG_DEVICE - case HOSTCALL_PIO: { - int width = imm & 0xf; - bool is_in = ((imm & ~0xf) != 0); - if (is_in) *dest = pio_read(*src1, width); - else pio_write(*dest, width, *src1); - break; - } -#endif - default: isa_hostcall(id, dest, src1, src2, imm); break; - } -} diff --git a/libraries/NEMU/src/engine/interpreter/init.c b/libraries/NEMU/src/engine/interpreter/init.c deleted file mode 100644 index c82db36..0000000 --- a/libraries/NEMU/src/engine/interpreter/init.c +++ /dev/null @@ -1,10 +0,0 @@ -#include - -#ifndef CONFIG_SHARE -void ui_mainloop(); - -void engine_start() { - /* Receive commands from user. */ - ui_mainloop(); -} -#endif diff --git a/libraries/NEMU/src/engine/interpreter/rtl-basic.h b/libraries/NEMU/src/engine/interpreter/rtl-basic.h deleted file mode 100644 index 766dbd4..0000000 --- a/libraries/NEMU/src/engine/interpreter/rtl-basic.h +++ /dev/null @@ -1,163 +0,0 @@ -#ifndef __RTL_BASIC_H__ -#define __RTL_BASIC_H__ - -#include "c_op.h" -#include - -/* RTL basic instructions */ - -#define def_rtl_compute_reg(name) \ - static inline def_rtl(name, rtlreg_t* dest, const rtlreg_t* src1, const rtlreg_t* src2) { \ - *dest = concat(c_, name) (*src1, *src2); \ - } - -#define def_rtl_compute_imm(name) \ - static inline def_rtl(name ## i, rtlreg_t* dest, const rtlreg_t* src1, const sword_t imm) { \ - *dest = concat(c_, name) (*src1, imm); \ - } - -#define def_rtl_compute_reg_imm(name) \ - def_rtl_compute_reg(name) \ - def_rtl_compute_imm(name) \ - -// compute - -def_rtl_compute_reg_imm(add) -def_rtl_compute_reg_imm(sub) -def_rtl_compute_reg_imm(and) -def_rtl_compute_reg_imm(or) -def_rtl_compute_reg_imm(xor) -def_rtl_compute_reg_imm(shl) -def_rtl_compute_reg_imm(shr) -def_rtl_compute_reg_imm(sar) - -#ifdef CONFIG_ISA64 -def_rtl_compute_reg_imm(addw) -def_rtl_compute_reg_imm(subw) -def_rtl_compute_reg_imm(shlw) -def_rtl_compute_reg_imm(shrw) -def_rtl_compute_reg_imm(sarw) -#define rtl_addiw rtl_addwi -#define rtl_shliw rtl_shlwi -#define rtl_shriw rtl_shrwi -#define rtl_sariw rtl_sarwi -#endif - -static inline def_rtl(setrelop, uint32_t relop, rtlreg_t *dest, - const rtlreg_t *src1, const rtlreg_t *src2) { - *dest = interpret_relop(relop, *src1, *src2); -} - -static inline def_rtl(setrelopi, uint32_t relop, rtlreg_t *dest, - const rtlreg_t *src1, sword_t imm) { - *dest = interpret_relop(relop, *src1, imm); -} - -// mul/div - -def_rtl_compute_reg(mulu_lo) -def_rtl_compute_reg(mulu_hi) -def_rtl_compute_reg(muls_hi) -def_rtl_compute_reg(divu_q) -def_rtl_compute_reg(divu_r) -def_rtl_compute_reg(divs_q) -def_rtl_compute_reg(divs_r) - -#ifdef CONFIG_ISA64 -def_rtl_compute_reg(mulw) -def_rtl_compute_reg(divw) -def_rtl_compute_reg(divuw) -def_rtl_compute_reg(remw) -def_rtl_compute_reg(remuw) -#endif - -static inline def_rtl(div64u_q, rtlreg_t* dest, - const rtlreg_t* src1_hi, const rtlreg_t* src1_lo, const rtlreg_t* src2) { - uint64_t dividend = ((uint64_t)(*src1_hi) << 32) | (*src1_lo); - uint32_t divisor = (*src2); - *dest = dividend / divisor; -} - -static inline def_rtl(div64u_r, rtlreg_t* dest, - const rtlreg_t* src1_hi, const rtlreg_t* src1_lo, const rtlreg_t* src2) { - uint64_t dividend = ((uint64_t)(*src1_hi) << 32) | (*src1_lo); - uint32_t divisor = (*src2); - *dest = dividend % divisor; -} - -static inline def_rtl(div64s_q, rtlreg_t* dest, - const rtlreg_t* src1_hi, const rtlreg_t* src1_lo, const rtlreg_t* src2) { - int64_t dividend = ((uint64_t)(*src1_hi) << 32) | (*src1_lo); - int32_t divisor = (*src2); - *dest = dividend / divisor; -} - -static inline def_rtl(div64s_r, rtlreg_t* dest, - const rtlreg_t* src1_hi, const rtlreg_t* src1_lo, const rtlreg_t* src2) { - int64_t dividend = ((uint64_t)(*src1_hi) << 32) | (*src1_lo); - int32_t divisor = (*src2); - *dest = dividend % divisor; -} - -// memory - -static inline def_rtl(lm, rtlreg_t *dest, const rtlreg_t* addr, - word_t offset, int len, int mmu_mode) { - *dest = vaddr_read(s, *addr + offset, len, mmu_mode); -} - -static inline def_rtl(sm, const rtlreg_t *src1, const rtlreg_t* addr, - word_t offset, int len, int mmu_mode) { - vaddr_write(s, *addr + offset, len, *src1, mmu_mode); -} - -static inline def_rtl(lms, rtlreg_t *dest, const rtlreg_t* addr, - word_t offset, int len, int mmu_mode) { - word_t val = vaddr_read(s, *addr + offset, len, mmu_mode); - switch (len) { - case 4: *dest = (sword_t)(int32_t)val; return; - case 1: *dest = (sword_t)( int8_t)val; return; - case 2: *dest = (sword_t)(int16_t)val; return; - IFDEF(CONFIG_ISA64, case 8: *dest = (sword_t)(int64_t)val; return); - IFDEF(CONFIG_RT_CHECK, default: assert(0)); - } -} - -static inline def_rtl(host_lm, rtlreg_t* dest, const void *addr, int len) { - switch (len) { - case 4: *dest = *(uint32_t *)addr; return; - case 1: *dest = *( uint8_t *)addr; return; - case 2: *dest = *(uint16_t *)addr; return; - IFDEF(CONFIG_ISA64, case 8: *dest = *(uint64_t *)addr; return); - IFDEF(CONFIG_RT_CHECK, default: assert(0)); - } -} - -static inline def_rtl(host_sm, void *addr, const rtlreg_t *src1, int len) { - switch (len) { - case 4: *(uint32_t *)addr = *src1; return; - case 1: *( uint8_t *)addr = *src1; return; - case 2: *(uint16_t *)addr = *src1; return; - IFDEF(CONFIG_ISA64, case 8: *(uint64_t *)addr = *src1; return); - IFDEF(CONFIG_RT_CHECK, default: assert(0)); - } -} - -// control - -static inline def_rtl(j, vaddr_t target) { - cpu.pc = target; -} - -static inline def_rtl(jr, rtlreg_t *target) { - cpu.pc = *target; -} - -static inline def_rtl(jrelop, uint32_t relop, - const rtlreg_t *src1, const rtlreg_t *src2, vaddr_t target) { - bool is_jmp = interpret_relop(relop, *src1, *src2); - rtl_j(s, (is_jmp ? target : s->snpc)); -} - -//#include "rtl-fp.h" -#endif diff --git a/libraries/NEMU/src/engine/interpreter/rtl-fp.h b/libraries/NEMU/src/engine/interpreter/rtl-fp.h deleted file mode 100644 index 8974a76..0000000 --- a/libraries/NEMU/src/engine/interpreter/rtl-fp.h +++ /dev/null @@ -1,296 +0,0 @@ -#ifndef __RTL_FP_H__ -#define __RTL_FP_H__ - -#ifndef __RTL_RTL_H__ -#error "Should be only included by " -#endif - -#include "c_op.h" -#include -#include -#include -#include -#include - - -#define F32_SIGN ((uint32_t)1 << 31) -#define F64_SIGN ((uint64_t)1 << 63) - -// ------------- helper functions ------------- - - -// ------------- rtl code ------------- - -#ifdef __ISA_x86__ -//set pfreg, it's a pointer to cpu.fpr in interpreter -static inline def_rtl(pfr,Operand* op,int i){ - uint8_t sti = (cpu.ftop+i)&0x7; - op->pfreg = &cpu.fpr[sti]; -} - -static inline void rtl_popftop(void){ - cpu.ftop++; - cpu.ftop &= 0x7; -} -static inline void rtl_pop2ftop(void){ - cpu.ftop+=2; - cpu.ftop &= 0x7; -} -static inline void rtl_pushftop(void){ - cpu.ftop--; - cpu.ftop &= 0x7; -} - -static inline def_rtl(lr_fsw, rtlreg_t* dest){ - *dest = cpu.fsw; -} -static inline def_rtl(sr_fsw, rtlreg_t* src){ - cpu.fsw = *src; -} -static inline def_rtl(lr_fcw, rtlreg_t* dest){ - *dest = cpu.fcw; -} -static inline def_rtl(sr_fcw, rtlreg_t* src){ - cpu.fcw = *src; - rtlreg_t rm = BITS(cpu.fcw,11,10); - switch (rm) - { - case 0: - softfloat_roundingMode = softfloat_round_near_even; - break; - case 1: - softfloat_roundingMode = softfloat_round_min; - break; - case 2: - softfloat_roundingMode = softfloat_round_max; - break; - case 3: - softfloat_roundingMode = softfloat_round_minMag; - break; - default: - assert(0); - break; - } -} - - -static inline def_rtl(class387, rtlreg_t *dest, uint64_t *src){ - float64_t f; - f.v = *src; - uint32_t res = f64_classify(f); - switch (res) - { - case 0x1://-inf - *dest = 0x700; - break; - case 0x2://-normal - *dest = 0x600; - break; - case 0x4://-subnormal - *dest = 0x4600; - break; - case 0x8://-0 - *dest = 0x4200; - break; - case 0x10://+0 - *dest = 0x4000; - break; - case 0x20://+subnormal - *dest = 0x4400; - break; - case 0x40://+normal - *dest = 0x400; - break; - case 0x80://+inf - *dest = 0x500; - break; - case 0x100://sNaN - case 0x200://qNaN - if(((bool) (*src>>63 ))){ - *dest = 0x300; - } - else{ - *dest = 0x100; - } - break; - default: - if(((bool) (*src>>63 ))){ - *dest = 0x200; - } - break; - } -} - -//load fpr from fpr pointer -static inline def_rtl(lfr, uint64_t* target_ptr, uint64_t* fptr){ - *target_ptr = *fptr; -} -//store fpr from fpr pointer -static inline def_rtl(sfr, uint64_t* fptr, uint64_t* fsrc){ - *fptr = *fsrc; -} - -enum{fconst_1=0,fconst_l2t, fconst_l2e, fconst_pi,fconst_lg2, fconst_ln2, fconst_z}; -static inline def_rtl(fld_const, uint64_t *fdest, int type){ - switch (type) { - case fconst_1: *fdest = 0x3ff0000000000000ull; break; - case fconst_z: *fdest = 0x0; break; - case fconst_l2t: *fdest = 0x400A934F0979A372ull; break; - case fconst_l2e: *fdest = 0x3FF71547652B82FEull; break; - case fconst_pi: *fdest = 0x400921FB54442D18ull; break; - case fconst_lg2: *fdest = 0x3FD34413509F79FEull; break; - case fconst_ln2: *fdest = 0x3FE62E42FEFA39EFull; break; - default: assert(0); - } -} - -//load memory, convert to double-precision and store to fpr -static inline def_rtl(lmf, uint64_t *fdest, const rtlreg_t* addr, word_t offset) { - switch (s->isa.fpu_MF) - { - case 0://32bit real - { - word_t val = vaddr_read(*addr + offset, 4); - float32_t f32; - float64_t f64; - f32.v = val; - f64 = f32_to_f64(f32); - *fdest = f64.v; - break; - } - case 1://32bit int - { - word_t val = vaddr_read(*addr + offset, 4); - float64_t f64; - f64 = i32_to_f64((int32_t)val); - *fdest = f64.v; - break; - } - case 2://64bit real - { - word_t val_lo = vaddr_read(*addr + offset, 4); - word_t val_hi = vaddr_read(*addr + offset + 4, 4); - uint64_t val = val_hi; - val <<= 32; - val |= val_lo; - *fdest = val; - break; - } - case 3://16bit int - { - word_t val = vaddr_read(*addr + offset, 2); - float64_t f64; - f64 = i32_to_f64((int16_t)val); - *fdest = f64.v; - break; - } - case 4://64bit int - { - word_t val_lo = vaddr_read(*addr + offset, 4); - word_t val_hi = vaddr_read(*addr + offset + 4, 4); - uint64_t val = val_hi; - val <<= 32; - val |= val_lo; - float64_t f64; - f64 = i64_to_f64((int64_t)val); - *fdest = f64.v; - break; - } - default: - assert(0); - break; - } -} - -//load memory, convert to double-precision and store to fpr -static inline def_rtl(smf, const rtlreg_t* addr, word_t offset, const uint64_t *fsrc) { - switch (s->isa.fpu_MF) - { - case 0://32bit real - { - float32_t f32; - float64_t f64; - f64.v = *fsrc; - f32 = f64_to_f32(f64); - vaddr_write(*addr + offset, f32.v, 4); - break; - } - case 1://32bit int - { - float64_t f64; - f64.v = *fsrc; - word_t val = (uint32_t)f64_to_i32(f64, softfloat_roundingMode, false); - vaddr_write(*addr + offset, val, 4); - break; - } - case 2://64bit real - { - word_t val = *fsrc & 0xFFFFFFFF; - vaddr_write(*addr + offset, val, 4); - val = *fsrc >> 32; - vaddr_write(*addr + offset + 4, val, 4); - break; - } - case 3://16bit int - { - float64_t f64; - f64.v = *fsrc; - word_t val = (uint32_t)f64_to_i32(f64, softfloat_roundingMode, false); - assert(val <= 0xffff || val >= 0xffff0000); - vaddr_write(*addr + offset, val, 2); - break; - } - case 4://64bit int - { - word_t val; - float64_t f64; - f64.v = *fsrc; - uint64_t ival = (uint64_t)f64_to_i64(f64, softfloat_roundingMode, false); - val = ival & 0xFFFFFFFF; - vaddr_write(*addr + offset, val, 4); - val = ival >> 32; - vaddr_write(*addr + offset + 4, val, 4); - break; - } - default: - assert(0); - break; - } -} - -static inline float64_t fprToF64(uint64_t r){ - float64_t f; - f.v = r; - return f; -} - -#define BUILD_RTL_F(x) \ -static inline def_rtl(concat(f64_, x), uint64_t* dest, uint64_t* src1, uint64_t* src2) { \ - *dest = concat(f64_, x)(fprToF64(*src1), fprToF64(*src2)).v; \ -} - -BUILD_RTL_F(add); -BUILD_RTL_F(sub); -BUILD_RTL_F(mul); -BUILD_RTL_F(div); - -#define BUILD_RTL_FCMP(x) \ -static inline def_rtl(concat(f64_, x), rtlreg_t* res, uint64_t* src1, uint64_t* src2) { \ - *res = concat(f64_, x)(fprToF64(*src1),fprToF64(*src2)); \ -} - -BUILD_RTL_FCMP(le); -BUILD_RTL_FCMP(eq); -BUILD_RTL_FCMP(lt); - -#define F64_SIGN ((uint64_t)1 << 63) -static inline def_rtl(f64_chs, uint64_t* dest){ - *dest = *dest ^ F64_SIGN; -} -static inline def_rtl(f64_abs, uint64_t* dest){ - *dest = *dest & ~F64_SIGN; -} - -#endif - -#endif diff --git a/libraries/NEMU/src/engine/interpreter/softfloat-fp.h b/libraries/NEMU/src/engine/interpreter/softfloat-fp.h deleted file mode 100644 index 1115863..0000000 --- a/libraries/NEMU/src/engine/interpreter/softfloat-fp.h +++ /dev/null @@ -1,143 +0,0 @@ -#ifndef __SOFTFLOAT_FP_H__ -#define __SOFTFLOAT_FP_H__ - -#include -#include -#include - -#define F32_SIGN ((uint64_t)1ul << 31) -#define F64_SIGN ((uint64_t)1ul << 63) - -static inline float32_t rtlToF32(rtlreg_t r); -static inline float64_t rtlToF64(rtlreg_t r); - -static inline float32_t f32_min(float32_t a, float32_t b){ - bool less = f32_lt_quiet(a, b) || (f32_eq(a, b) && (a.v & F32_SIGN)); - if(isNaNF32UI(a.v) && isNaNF32UI(b.v)) return rtlToF32(defaultNaNF32UI); - else return(less || isNaNF32UI(b.v) ? a : b); -} - -static inline float32_t f32_max(float32_t a, float32_t b){ - bool greater = f32_lt_quiet(b, a) || (f32_eq(b, a) && (b.v & F32_SIGN)); - if(isNaNF32UI(a.v) && isNaNF32UI(b.v)) return rtlToF32(defaultNaNF32UI); - else return(greater || isNaNF32UI(b.v) ? a : b); -} - -static inline float64_t f64_min(float64_t a, float64_t b){ - bool less = f64_lt_quiet(a, b) || (f64_eq(a, b) && (a.v & F64_SIGN)); - if(isNaNF64UI(a.v) && isNaNF64UI(b.v)) return rtlToF64(defaultNaNF64UI); - else return(less || isNaNF64UI(b.v) ? a : b); -} - -static inline float64_t f64_max(float64_t a, float64_t b){ - bool greater = f64_lt_quiet(b, a) || (f64_eq(b, a) && (b.v & F64_SIGN)); - if(isNaNF64UI(a.v) && isNaNF64UI(b.v)) return rtlToF64(defaultNaNF64UI); - else return(greater || isNaNF64UI(b.v) ? a : b); -} - -static inline int32_t my_f32_to_i32 (float32_t a) { - return f32_to_i32 (a, softfloat_roundingMode, true); -} -static inline uint32_t my_f32_to_ui32(float32_t a) { - return f32_to_ui32(a, softfloat_roundingMode, true); -} -static inline int64_t my_f32_to_i64 (float32_t a) { - return f32_to_i64 (a, softfloat_roundingMode, true); -} -static inline uint64_t my_f32_to_ui64(float32_t a) { - return f32_to_ui64(a, softfloat_roundingMode, true); -} -static inline int32_t my_f64_to_i32 (float64_t a) { - return f64_to_i32 (a, softfloat_roundingMode, true); -} -static inline uint32_t my_f64_to_ui32(float64_t a) { - return f64_to_ui32(a, softfloat_roundingMode, true); -} -static inline int64_t my_f64_to_i64 (float64_t a) { - return f64_to_i64 (a, softfloat_roundingMode, true); -} -static inline uint64_t my_f64_to_ui64(float64_t a) { - return f64_to_ui64(a, softfloat_roundingMode, true); -} - -uint_fast16_t f32_classify( float32_t a ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - - uA.f = a; - uiA = uA.ui; - - uint_fast16_t infOrNaN = expF32UI( uiA ) == 0xFF; - uint_fast16_t subnormalOrZero = expF32UI( uiA ) == 0; - bool sign = signF32UI( uiA ); - bool fracZero = fracF32UI( uiA ) == 0; - bool isNaN = isNaNF32UI( uiA ); - bool isSNaN = softfloat_isSigNaNF32UI( uiA ); - - return - ( sign && infOrNaN && fracZero ) << 0 | - ( sign && !infOrNaN && !subnormalOrZero ) << 1 | - ( sign && subnormalOrZero && !fracZero ) << 2 | - ( sign && subnormalOrZero && fracZero ) << 3 | - ( !sign && infOrNaN && fracZero ) << 7 | - ( !sign && !infOrNaN && !subnormalOrZero ) << 6 | - ( !sign && subnormalOrZero && !fracZero ) << 5 | - ( !sign && subnormalOrZero && fracZero ) << 4 | - ( isNaN && isSNaN ) << 8 | - ( isNaN && !isSNaN ) << 9; -} - -static inline uint_fast16_t f64_classify( float64_t a ) { - union ui64_f64 uA; - uint_fast64_t uiA; - - uA.f = a; - uiA = uA.ui; - - uint_fast16_t infOrNaN = expF64UI( uiA ) == 0x7FF; - uint_fast16_t subnormalOrZero = expF64UI( uiA ) == 0; - bool sign = signF64UI( uiA ); - bool fracZero = fracF64UI( uiA ) == 0; - bool isNaN = isNaNF64UI( uiA ); - bool isSNaN = softfloat_isSigNaNF64UI( uiA ); - - return - ( sign && infOrNaN && fracZero ) << 0 | - ( sign && !infOrNaN && !subnormalOrZero ) << 1 | - ( sign && subnormalOrZero && !fracZero ) << 2 | - ( sign && subnormalOrZero && fracZero ) << 3 | - ( !sign && infOrNaN && fracZero ) << 7 | - ( !sign && !infOrNaN && !subnormalOrZero ) << 6 | - ( !sign && subnormalOrZero && !fracZero ) << 5 | - ( !sign && subnormalOrZero && fracZero ) << 4 | - ( isNaN && isSNaN ) << 8 | - ( isNaN && !isSNaN ) << 9; -} - -static inline void fp_set_rm(int rm) { - switch (rm) { - case FPCALL_RM_RNE: softfloat_roundingMode = softfloat_round_near_even; break; - case FPCALL_RM_RTZ: softfloat_roundingMode = softfloat_round_minMag; break; - case FPCALL_RM_RDN: softfloat_roundingMode = softfloat_round_min; break; - case FPCALL_RM_RUP: softfloat_roundingMode = softfloat_round_max; break; - case FPCALL_RM_RMM: softfloat_roundingMode = softfloat_round_near_maxMag; break; - default: assert(0); - } -} - -static inline uint32_t fp_get_exception() { - uint32_t ex = 0; - uint32_t softfp_ex = softfloat_exceptionFlags; - if (softfp_ex & softfloat_flag_inexact ) ex |= FPCALL_EX_NX; - if (softfp_ex & softfloat_flag_underflow) ex |= FPCALL_EX_UF; - if (softfp_ex & softfloat_flag_overflow ) ex |= FPCALL_EX_OF; - if (softfp_ex & softfloat_flag_infinite ) ex |= FPCALL_EX_DZ; - if (softfp_ex & softfloat_flag_invalid ) ex |= FPCALL_EX_NV; - return ex; -} - -static inline void fp_clear_exception() { - softfloat_exceptionFlags = 0; -} -#endif diff --git a/libraries/NEMU/src/isa/mips32/difftest/dut.c b/libraries/NEMU/src/isa/mips32/difftest/dut.c deleted file mode 100644 index 94fac6d..0000000 --- a/libraries/NEMU/src/isa/mips32/difftest/dut.c +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include -#include "../local-include/reg.h" -#include - -bool isa_difftest_checkregs(CPU_state *ref_r, vaddr_t pc) { -#ifndef __ICS_EXPORT -#define check_reg(r) same = difftest_check_reg(str(r), pc, ref_r->r, cpu.r) && same - bool same = true; - if (memcmp(&cpu, ref_r, sizeof(cpu.gpr))) { - int i; - for (i = 0; i < ARRLEN(cpu.gpr); i ++) { - difftest_check_reg(reg_name(i, 4), pc, ref_r->gpr[i]._32, cpu.gpr[i]._32); - } - same = false; - } - check_reg(pc); - check_reg(lo); - check_reg(hi); - - return same; -#else - return false; -#endif -} - -void isa_difftest_attach() { -} diff --git a/libraries/NEMU/src/isa/mips32/difftest/ref.c b/libraries/NEMU/src/isa/mips32/difftest/ref.c deleted file mode 100644 index fbfa827..0000000 --- a/libraries/NEMU/src/isa/mips32/difftest/ref.c +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include -#include "../local-include/intr.h" - -void isa_difftest_regcpy(void *dut, bool direction) { - if (direction == DIFFTEST_TO_REF) memcpy(&cpu, dut, DIFFTEST_REG_SIZE); - else memcpy(dut, &cpu, DIFFTEST_REG_SIZE); -} - -void isa_difftest_raise_intr(word_t NO) { - cpu.pc = raise_intr(NO, cpu.pc); -} diff --git a/libraries/NEMU/src/isa/mips32/include/isa-all-instr.h b/libraries/NEMU/src/isa/mips32/include/isa-all-instr.h deleted file mode 100644 index ad5cb82..0000000 --- a/libraries/NEMU/src/isa/mips32/include/isa-all-instr.h +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include "../local-include/rtl.h" - -#define INSTR_NULLARY(f) \ - f(inv) f(nemu_trap) f(syscall) f(eret) f(tlbwr) f(tlbwi) f(tlbp) f(ret) -#define INSTR_UNARY(f) \ - f(j) f(jal) f(mfhi) f(mflo) f(mthi) f(mtlo) -#define INSTR_BINARY(f) \ - f(lui) f(jr) f(jalr) f(clz) \ - f(lw) f(sw) f(lh) f(lb) f(lhu) f(lbu) f(sh) f(sb) f(swl) f(swr) f(lwl) f(lwr) -#define INSTR_TERNARY(f) \ - f(add) f(sub) f(slt) f(sltu) f(and) f(or) f(xor) f(nor) f(sll) f(srl) f(sra) \ - f(addi) f(slti) f(sltui) f(andi) f(ori) f(xori) f(slli) f(srli) f(srai) f(movz) f(movn) \ - f(beq) f(bne) f(blez) f(bltz) f(bgtz) f(bgez) \ - f(mul) f(mult) f(multu) f(div) f(divu) \ - f(mfc0) f(mtc0) - -def_all_EXEC_ID(); diff --git a/libraries/NEMU/src/isa/mips32/include/isa-def.h b/libraries/NEMU/src/isa/mips32/include/isa-def.h deleted file mode 100644 index caed593..0000000 --- a/libraries/NEMU/src/isa/mips32/include/isa-def.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef __ISA_MIPS32_H__ -#define __ISA_MIPS32_H__ - -#include - -// reg -typedef struct { - struct { - rtlreg_t _32; - } gpr[32]; - -#ifdef __ICS_EXPORT - rtlreg_t pad[5]; - - vaddr_t pc; -#else - union { - struct { - uint32_t ie: 1; - uint32_t exl: 1; - uint32_t dontcare: 30; - }; - uint32_t val; - } status; - - rtlreg_t lo, hi; - uint32_t badvaddr; - uint32_t cause; - vaddr_t pc; - uint32_t epc; - - union { - struct { - uint32_t ASID: 8; - uint32_t pad : 5; - uint32_t VPN2:19; - }; - uint32_t val; - } entryhi; - uint32_t entrylo0, entrylo1; - uint32_t index; - - bool INTR; -#endif -} mips32_CPU_state; - -// decode -typedef struct { - union { - struct { - int32_t simm : 16; - uint32_t rt : 5; - uint32_t rs : 5; - uint32_t opcode : 6; - } i; - struct { - uint32_t imm : 16; - uint32_t rt : 5; - uint32_t rs : 5; - uint32_t opcode : 6; - } iu; -#ifndef __ICS_EXPORT - struct { - uint32_t target : 26; - uint32_t opcode : 6; - } j; -#endif - struct { - uint32_t func : 6; - uint32_t sa : 5; - uint32_t rd : 5; - uint32_t rt : 5; - uint32_t rs : 5; - uint32_t opcode : 6; - } r; - uint32_t val; - } instr; -} mips32_ISADecodeInfo; - -#define isa_mmu_state() (MMU_DYNAMIC) -#ifdef __ICS_EXPORT -#define isa_mmu_check(vaddr, len, type) (MMU_DIRECT) -#else -#define isa_mmu_check(vaddr, len, type) ((vaddr & 0x80000000u) == 0 ? MMU_TRANSLATE : MMU_DIRECT) -#endif - -#endif diff --git a/libraries/NEMU/src/isa/mips32/include/isa-exec.h b/libraries/NEMU/src/isa/mips32/include/isa-exec.h deleted file mode 100644 index 5a2d5d2..0000000 --- a/libraries/NEMU/src/isa/mips32/include/isa-exec.h +++ /dev/null @@ -1,6 +0,0 @@ -#include "../instr/compute.h" -#include "../instr/control.h" -#include "../instr/ldst.h" -#include "../instr/muldiv.h" -#include "../instr/system.h" -#include "../instr/special.h" diff --git a/libraries/NEMU/src/isa/mips32/init.c b/libraries/NEMU/src/isa/mips32/init.c deleted file mode 100644 index a012653..0000000 --- a/libraries/NEMU/src/isa/mips32/init.c +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include - -// this is not consistent with uint8_t -// but it is ok since we do not access the array directly -static const uint32_t img [] = { - 0x3c048000, // lui a0, 0x8000 - 0xac800000, // sw zero, 0(a0) - 0x8c820000, // lw v0,0(a0) - 0xf0000000, // nemu_trap -}; - -static void restart() { - /* Set the initial program counter. */ - cpu.pc = RESET_VECTOR; - - /* The zero register is always 0. */ - cpu.gpr[0]._32 = 0; -} - -void init_isa() { - /* Load built-in image. */ - memcpy(guest_to_host(RESET_VECTOR), img, sizeof(img)); - - /* Initialize this virtual computer system. */ - restart(); -#ifndef __ICS_EXPORT - void init_mmu(); - init_mmu(); -#endif -} diff --git a/libraries/NEMU/src/isa/mips32/instr/compute.h b/libraries/NEMU/src/isa/mips32/instr/compute.h deleted file mode 100644 index 35c78a1..0000000 --- a/libraries/NEMU/src/isa/mips32/instr/compute.h +++ /dev/null @@ -1,108 +0,0 @@ -def_EHelper(lui) { - rtl_li(s, ddest, id_src1->imm); -} - -def_EHelper(add) { - rtl_add(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(sub) { - rtl_sub(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(slt) { - rtl_setrelop(s, RELOP_LT, ddest, dsrc1, dsrc2); -} - -def_EHelper(sltu) { - rtl_setrelop(s, RELOP_LTU, ddest, dsrc1, dsrc2); -} - -def_EHelper(and) { - rtl_and(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(or) { - rtl_or(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(xor) { - rtl_xor(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(nor) { - rtl_or(s, ddest, dsrc1, dsrc2); - rtl_not(s, ddest, ddest); -} - -def_EHelper(sll) { - rtl_shl(s, ddest, dsrc2, dsrc1); -} - -def_EHelper(srl) { - rtl_shr(s, ddest, dsrc2, dsrc1); -} - -def_EHelper(sra) { - rtl_sar(s, ddest, dsrc2, dsrc1); -} - -def_EHelper(addi) { - rtl_addi(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(slti) { - rtl_setrelopi(s, RELOP_LT, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(sltui) { - rtl_setrelopi(s, RELOP_LTU, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(andi) { - rtl_andi(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(ori) { - rtl_ori(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(xori) { - rtl_xori(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(slli) { - rtl_shli(s, ddest, dsrc2, id_src1->imm); -} - -def_EHelper(srli) { - rtl_shri(s, ddest, dsrc2, id_src1->imm); -} - -def_EHelper(srai) { - rtl_sari(s, ddest, dsrc2, id_src1->imm); -} - -def_EHelper(movz) { - rtl_mux(s, ddest, dsrc2, ddest, dsrc1); -} - -def_EHelper(movn) { - rtl_mux(s, ddest, dsrc2, dsrc1, ddest); -} - -def_EHelper(clz) { -#ifndef CONFIG_ENGINE_INTERPRETER - panic("not support in engines other than interpreter"); -#endif - - int bit = 32; - int i; - for (i = 31; i >= 0; i ++) { - if (*dsrc1 & (1u << i)) { - bit = 31 - i; - break; - } - } - *ddest = bit; -} diff --git a/libraries/NEMU/src/isa/mips32/instr/control.h b/libraries/NEMU/src/isa/mips32/instr/control.h deleted file mode 100644 index 9f999ba..0000000 --- a/libraries/NEMU/src/isa/mips32/instr/control.h +++ /dev/null @@ -1,59 +0,0 @@ -#define difftest_skip_delay_slot() \ - IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(2, 1)) - -def_EHelper(j) { - difftest_skip_delay_slot(); - rtl_j(s, id_dest->imm); -} - -def_EHelper(jal) { - difftest_skip_delay_slot(); - rtl_li(s, ®_l(31), id_src2->imm); - rtl_j(s, id_dest->imm); -} - -def_EHelper(ret) { - difftest_skip_delay_slot(); - rtl_jr(s, ®_l(31)); -} - -def_EHelper(jr) { - difftest_skip_delay_slot(); - rtl_jr(s, dsrc1); -} - -def_EHelper(jalr) { - difftest_skip_delay_slot(); - rtl_li(s, ddest, id_src2->imm); - rtl_jr(s, dsrc1); -} - -def_EHelper(bne) { - difftest_skip_delay_slot(); - rtl_jrelop(s, RELOP_NE, dsrc1, dsrc2, id_dest->imm); -} - -def_EHelper(beq) { - difftest_skip_delay_slot(); - rtl_jrelop(s, RELOP_EQ, dsrc1, dsrc2, id_dest->imm); -} - -def_EHelper(blez) { - difftest_skip_delay_slot(); - rtl_jrelop(s, RELOP_LE, dsrc1, dsrc2, id_dest->imm); -} - -def_EHelper(bltz) { - difftest_skip_delay_slot(); - rtl_jrelop(s, RELOP_LT, dsrc1, rz, id_dest->imm); -} - -def_EHelper(bgtz) { - difftest_skip_delay_slot(); - rtl_jrelop(s, RELOP_GT, dsrc1, dsrc2, id_dest->imm); -} - -def_EHelper(bgez) { - difftest_skip_delay_slot(); - rtl_jrelop(s, RELOP_GE, dsrc1, rz, id_dest->imm); -} diff --git a/libraries/NEMU/src/isa/mips32/instr/decode.c b/libraries/NEMU/src/isa/mips32/instr/decode.c deleted file mode 100644 index ea97c90..0000000 --- a/libraries/NEMU/src/isa/mips32/instr/decode.c +++ /dev/null @@ -1,214 +0,0 @@ -#include "../local-include/rtl.h" -#include -#include -#include - -def_all_THelper(); - -// decode operand helper -#define def_DopHelper(name) \ - void concat(decode_op_, name) (Decode *s, Operand *op, uint32_t val, bool flag) - -static inline def_DopHelper(i) { - op->imm = val; - print_Dop(op->str, OP_STR_SIZE, (flag ? "0x%x" : "%d"), op->imm); -} - -static inline def_DopHelper(r) { - bool load_val = flag; - static word_t zero_null = 0; - op->preg = (!load_val && val == 0) ? &zero_null : ®_l(val); - print_Dop(op->str, OP_STR_SIZE, "%s", reg_name(val, 4)); -} - -static inline def_DHelper(IU) { - decode_op_r(s, id_src1, s->isa.instr.iu.rs, true); - decode_op_i(s, id_src2, s->isa.instr.iu.imm, true); - decode_op_r(s, id_dest, s->isa.instr.iu.rt, false); -} - -static inline def_DHelper(ld) { - decode_op_r(s, id_src1, s->isa.instr.i.rs, true); - decode_op_i(s, id_src2, s->isa.instr.i.simm, false); - decode_op_r(s, id_dest, s->isa.instr.i.rt, false); - print_Dop(id_src1->str, OP_STR_SIZE, "%d(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs, 4)); -} - -static inline def_DHelper(st) { - decode_op_r(s, id_src1, s->isa.instr.i.rs, true); - decode_op_i(s, id_src2, s->isa.instr.i.simm, false); - decode_op_r(s, id_dest, s->isa.instr.i.rt, true); - print_Dop(id_src1->str, OP_STR_SIZE, "%d(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs, 4)); -} - -static inline def_DHelper(lui) { - decode_op_i(s, id_src1, s->isa.instr.iu.imm << 16, true); - decode_op_r(s, id_dest, s->isa.instr.iu.rt, false); -} - -#ifndef __ICS_EXPORT -static inline def_DHelper(I) { - decode_op_r(s, id_src1, s->isa.instr.i.rs, true); - decode_op_i(s, id_src2, s->isa.instr.i.simm, false); - decode_op_r(s, id_dest, s->isa.instr.i.rt, false); -} - -static inline def_DHelper(J) { - vaddr_t target = (s->pc & 0xf0000000) | (s->isa.instr.j.target << 2); - decode_op_i(s, id_dest, target, true); -} - -static inline def_DHelper(R) { - decode_op_r(s, id_src1, s->isa.instr.r.rs, true); - decode_op_r(s, id_src2, s->isa.instr.r.rt, true); - decode_op_r(s, id_dest, s->isa.instr.r.rd, false); -} - -static inline def_DHelper(B) { - sword_t offset = (s->isa.instr.i.simm << 2); - decode_op_i(s, id_dest, s->pc + offset + 4, true); - decode_op_r(s, id_src1, s->isa.instr.i.rs, true); - decode_op_r(s, id_src2, s->isa.instr.i.rt, true); - //s->snpc += 4; // skip the delay slot -} - -static inline def_DHelper(shift) { - decode_op_i(s, id_src1, s->isa.instr.r.sa, false); - decode_op_r(s, id_src2, s->isa.instr.r.rt, true); - decode_op_r(s, id_dest, s->isa.instr.r.rd, false); -} - -static inline def_DHelper(cmov) { - decode_op_r(s, id_src1, s->isa.instr.r.rs, true); - decode_op_r(s, id_src2, s->isa.instr.r.rt, true); - decode_op_r(s, id_dest, s->isa.instr.r.rd, true); -} - -static inline def_DHelper(jal) { - decode_J(s); - id_src2->imm = s->pc + 8; -} - -static inline def_DHelper(jalr) { - decode_op_r(s, id_src1, s->isa.instr.r.rs, true); - decode_op_r(s, id_dest, s->isa.instr.r.rd, false); - id_src2->imm = s->pc + 8; -} - -static inline def_DHelper(cp0) { -// decode_op_r(s, id_src1, s->isa.instr.r.rs, true); - decode_op_r(s, id_src2, s->isa.instr.r.rt, true); - decode_op_i(s, id_dest, s->isa.instr.r.rd, false); - print_Dop(id_dest->str, OP_STR_SIZE, "%s", cp0_name(id_dest->imm)); -} - -def_THelper(jr_dispatch) { - if (s->isa.instr.r.rs == 31) return table_ret(s); - return table_jr(s); -} -#endif - -def_THelper(special) { - switch (s->isa.instr.r.func) { -#ifndef __ICS_EXPORT - IDTAB(000, shift, slli) IDTAB(002, shift, srli)IDTAB(003, shift, srai) - IDTAB(004, R, sll) IDTAB(006, R, srl) IDTAB(007, R, sra) - IDTAB(010, R, jr_dispatch)IDTAB(011, jalr, jalr) IDTAB(012, cmov, movz) IDTAB(013, cmov, movn) - TAB (014, syscall) - IDTAB(020, R, mfhi) IDTAB(021, R, mthi) IDTAB(022, R, mflo) IDTAB(023, R, mtlo) - - IDTAB(030, R, mult) IDTAB(031, R, multu) IDTAB(032, R, div) IDTAB(033, R, divu) - - IDTAB(041, R, add) IDTAB(043, R, sub) - IDTAB(044, R, and) IDTAB(045, R, or) IDTAB(046, R, xor) IDTAB(047, R, nor) - IDTAB(052, R, slt) IDTAB(053, R, sltu) -#endif - } - return EXEC_ID_inv; -} - -#ifndef __ICS_EXPORT -def_THelper(special2) { - switch (s->isa.instr.r.func) { - IDTAB(2, R, mul) - IDTAB(040, R, clz) - } - return EXEC_ID_inv; -} - -def_THelper(regimm) { - switch (s->isa.instr.r.rt) { - IDTAB(0, B, bltz) - IDTAB(1, B, bgez) - } - return EXEC_ID_inv; -} - -def_THelper(cop0) { -#define pair(x, y) (((x) << 1) | (y)) - bool cop0co = (s->isa.instr.r.rs & 0x10) != 0; - uint32_t op = pair((cop0co ? s->isa.instr.r.func : s->isa.instr.r.rs), cop0co); - switch (op) { - TAB (pair(002, 1), tlbwi) - TAB (pair(006, 1), tlbwr) - TAB (pair(010, 1), tlbp) - TAB (pair(030, 1), eret) - IDTAB(pair(000, 0), cp0, mfc0) - IDTAB(pair(004, 0), cp0, mtc0) - } -#undef pair - return EXEC_ID_inv; -} -#endif - -def_THelper(main) { - switch (s->isa.instr.r.opcode) { -#ifdef __ICS_EXPORT - TAB (000, special) - IDTAB(017, IU, lui) - IDTAB(043, ld, lw) - IDTAB(053, st, sw) - TAB (074, nemu_trap) -#else - TAB (000, special) TAB (001, regimm) IDTAB(002, J, j) IDTAB(003, jal, jal) - IDTAB(004, B, beq) IDTAB(005, B, bne) IDTAB(006, B, blez) IDTAB(007, B, bgtz) - IDTAB(011, I, addi) IDTAB(012, I, slti) IDTAB(013, I, sltui) - IDTAB(014, IU, andi) IDTAB(015, IU, ori) IDTAB(016, IU, xori) IDTAB(017, lui, lui) - TAB (020, cop0) - - - TAB (034, special2) - IDTAB(040, ld, lb) IDTAB(041, ld, lh) IDTAB(042, st, lwl) IDTAB(043, ld, lw) - IDTAB(044, ld, lbu) IDTAB(045, ld, lhu) IDTAB(046, st, lwr) - IDTAB(050, st, sb) IDTAB(051, st, sh) IDTAB(052, st, swl) IDTAB(053, st, sw) - IDTAB(056, st, swr) - - - - TAB (074, nemu_trap) -#endif - } - return table_inv(s); -} - -int isa_fetch_decode(Decode *s) { - s->isa.instr.val = instr_fetch(&s->snpc, 4); - int idx = table_main(s); - - s->type = INSTR_TYPE_N; - switch (idx) { - case EXEC_ID_j: - case EXEC_ID_jal: s->jnpc = id_dest->imm; s->type = INSTR_TYPE_J; break; - case EXEC_ID_beq: - case EXEC_ID_bne: - case EXEC_ID_blez: - case EXEC_ID_bltz: - case EXEC_ID_bgez: - case EXEC_ID_bgtz: s->jnpc = id_dest->imm; s->type = INSTR_TYPE_B; break; - case EXEC_ID_ret: - case EXEC_ID_jr: - case EXEC_ID_jalr: s->type = INSTR_TYPE_I; - } - - return idx; -} diff --git a/libraries/NEMU/src/isa/mips32/instr/ldst.h b/libraries/NEMU/src/isa/mips32/instr/ldst.h deleted file mode 100644 index 7ca35fa..0000000 --- a/libraries/NEMU/src/isa/mips32/instr/ldst.h +++ /dev/null @@ -1,159 +0,0 @@ -def_EHelper(lw) { - rtl_lms(s, ddest, dsrc1, id_src2->imm, 4); -} - -def_EHelper(sw) { - rtl_sm(s, dsrc1, id_src2->imm, ddest, 4); -} -#ifndef __ICS_EXPORT - -def_EHelper(lh) { - rtl_lms(s, ddest, dsrc1, id_src2->imm, 2); -} - -def_EHelper(lb) { - rtl_lms(s, ddest, dsrc1, id_src2->imm, 1); -} - -def_EHelper(lhu) { - rtl_lm(s, ddest, dsrc1, id_src2->imm, 2); -} - -def_EHelper(lbu) { - rtl_lm(s, ddest, dsrc1, id_src2->imm, 1); -} - -def_EHelper(sh) { - rtl_sm(s, dsrc1, id_src2->imm, ddest, 2); -} - -def_EHelper(sb) { - rtl_sm(s, dsrc1, id_src2->imm, ddest, 1); -} - -def_EHelper(swl) { - rtl_addi(s, s0, dsrc1, id_src2->imm); - - // mem.shamt2 - rtl_andi(s, s1, s0, 0x3); - rtl_shli(s, s1, s1, 3); - - // load the aligned memory word - rtl_andi(s, s0, s0, ~0x3u); - rtl_lm(s, s0, s0, 0, 4); - - // prepare memory data - rtl_shri(s, s0, s0, 8); // shift 8 bit - rtl_shr(s, s0, s0, s1); // second shift - rtl_shl(s, s0, s0, s1); // shift back - rtl_shli(s, s0, s0, 8); // shift 8 bit - - // reg.shmat = 24 - mem.shmat2 - rtl_subi(s, s1, s1, 24); - rtl_neg(s, s1, s1); - - // prepare register data - rtl_shr(s, s1, ddest, s1); - - // merge the word - rtl_or(s, s1, s0, s1); - - // write back - rtl_addi(s, s0, dsrc1, id_src2->imm); - rtl_andi(s, s0, s0, ~0x3u); - rtl_sm(s, s0, 0, s1, 4); -} - -def_EHelper(swr) { - rtl_addi(s, s0, dsrc1, id_src2->imm); - - // mem.shmat2 - rtl_andi(s, s1, s0, 0x3); - rtl_shli(s, s1, s1, 3); - rtl_subi(s, s1, s1, 24); - rtl_neg(s, s1, s1); - - // load the aligned memory word - rtl_andi(s, s0, s0, ~0x3u); - rtl_lm(s, s0, s0, 0, 4); - - // prepare memory data - rtl_shli(s, s0, s0, 8); // shift 8 bit - rtl_shl(s, s0, s0, s1); // second shift - rtl_shr(s, s0, s0, s1); // shift back - rtl_shri(s, s0, s0, 8); // shift 8 bit - - // reg.shmat = 24 - mem.shmat2 - rtl_subi(s, s1, s1, 24); - rtl_neg(s, s1, s1); - - // prepare register data - rtl_shl(s, s1, ddest, s1); - - // merge the word - rtl_or(s, s1, s0, s1); - - // write back - rtl_addi(s, s0, dsrc1, id_src2->imm); - rtl_andi(s, s0, s0, ~0x3u); - rtl_sm(s, s0, 0, s1, 4); -} - -def_EHelper(lwl) { - rtl_addi(s, s0, dsrc1, id_src2->imm); - - // mem.shmat2 - rtl_andi(s, s1, s0, 0x3); - rtl_shli(s, s1, s1, 3); - rtl_subi(s, s1, s1, 24); - rtl_neg(s, s1, s1); - - // load the aligned memory word - rtl_andi(s, s0, s0, ~0x3u); - rtl_lm(s, s0, s0, 0, 4); - - // prepare memory data - rtl_shl(s, s0, s0, s1); - - // reg.shmat = 24 - mem.shmat2 - rtl_subi(s, s1, s1, 24); - rtl_neg(s, s1, s1); - - // prepare register data - rtl_shli(s, ddest, ddest, 8); // shift 8 bit - rtl_shl(s, ddest, ddest, s1); // second shift - rtl_shr(s, ddest, ddest, s1); // shift back - rtl_shri(s, ddest, ddest, 8); // shift 8 bit - - // merge the word - rtl_or(s, ddest, s0, ddest); -} - -def_EHelper(lwr) { - rtl_addi(s, s0, dsrc1, id_src2->imm); - - // mem.shmat2 - rtl_andi(s, s1, s0, 0x3); - rtl_shli(s, s1, s1, 3); - - // load the aligned memory word - rtl_andi(s, s0, s0, ~0x3u); - rtl_lm(s, s0, s0, 0, 4); - - // prepare memory data - rtl_shr(s, s0, s0, s1); - - // reg.shmat = 24 - mem.shmat2 - rtl_subi(s, s1, s1, 24); - rtl_neg(s, s1, s1); - - // prepare register data - rtl_shri(s, ddest, ddest, 8); // shift 8 bit - rtl_shr(s, ddest, ddest, s1); // second shift - rtl_shl(s, ddest, ddest, s1); // shift back - rtl_shli(s, ddest, ddest, 8); // shift 8 bit - - // merge the word - rtl_or(s, ddest, s0, ddest); -} -#endif diff --git a/libraries/NEMU/src/isa/mips32/instr/muldiv.h b/libraries/NEMU/src/isa/mips32/instr/muldiv.h deleted file mode 100644 index 937597e..0000000 --- a/libraries/NEMU/src/isa/mips32/instr/muldiv.h +++ /dev/null @@ -1,39 +0,0 @@ -def_EHelper(mfhi) { - rtl_mv(s, ddest, &cpu.hi); -} - -def_EHelper(mflo) { - rtl_mv(s, ddest, &cpu.lo); -} - -def_EHelper(mthi) { - rtl_mv(s, &cpu.hi, dsrc1); -} - -def_EHelper(mtlo) { - rtl_mv(s, &cpu.lo, dsrc1); -} - -def_EHelper(mul) { - rtl_mulu_lo(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(mult) { - rtl_mulu_lo(s, &cpu.lo, dsrc1, dsrc2); - rtl_muls_hi(s, &cpu.hi, dsrc1, dsrc2); -} - -def_EHelper(multu) { - rtl_mulu_lo(s, &cpu.lo, dsrc1, dsrc2); - rtl_mulu_hi(s, &cpu.hi, dsrc1, dsrc2); -} - -def_EHelper(div) { - rtl_divs_q(s, &cpu.lo, dsrc1, dsrc2); - rtl_divs_r(s, &cpu.hi, dsrc1, dsrc2); -} - -def_EHelper(divu) { - rtl_divu_q(s, &cpu.lo, dsrc1, dsrc2); - rtl_divu_r(s, &cpu.hi, dsrc1, dsrc2); -} diff --git a/libraries/NEMU/src/isa/mips32/instr/special.h b/libraries/NEMU/src/isa/mips32/instr/special.h deleted file mode 100644 index 70ab888..0000000 --- a/libraries/NEMU/src/isa/mips32/instr/special.h +++ /dev/null @@ -1,11 +0,0 @@ -def_EHelper(inv) { - save_globals(s); - rtl_hostcall(s, HOSTCALL_INV, NULL, NULL, 0); - longjmp_exec(NEMU_EXEC_END); -} - -def_EHelper(nemu_trap) { - save_globals(s); - rtl_hostcall(s, HOSTCALL_EXIT, NULL, &cpu.gpr[2]._32, 0); // gpr[2] is $v0 - longjmp_exec(NEMU_EXEC_END); -} diff --git a/libraries/NEMU/src/isa/mips32/instr/system.h b/libraries/NEMU/src/isa/mips32/instr/system.h deleted file mode 100644 index 64e51c2..0000000 --- a/libraries/NEMU/src/isa/mips32/instr/system.h +++ /dev/null @@ -1,30 +0,0 @@ -#include "../local-include/intr.h" - -def_EHelper(syscall) { - rtl_trap(s, s->pc, EX_SYSCALL); -} - -def_EHelper(eret) { - rtl_hostcall(s, HOSTCALL_PRIV, s0, NULL, PRIV_ERET); - rtl_jr(s, s0); -} - -def_EHelper(mfc0) { - rtl_hostcall(s, HOSTCALL_CSR, dsrc2, NULL, id_dest->imm); -} - -def_EHelper(mtc0) { - rtl_hostcall(s, HOSTCALL_CSR, NULL, dsrc2, id_dest->imm); -} - -def_EHelper(tlbwr) { - rtl_hostcall(s, HOSTCALL_PRIV, NULL, NULL, PRIV_TLBWR); -} - -def_EHelper(tlbwi) { - rtl_hostcall(s, HOSTCALL_PRIV, NULL, NULL, PRIV_TLBWI); -} - -def_EHelper(tlbp) { - rtl_hostcall(s, HOSTCALL_PRIV, NULL, NULL, PRIV_TLBP); -} diff --git a/libraries/NEMU/src/isa/mips32/local-include/intr.h b/libraries/NEMU/src/isa/mips32/local-include/intr.h deleted file mode 100644 index 2848237..0000000 --- a/libraries/NEMU/src/isa/mips32/local-include/intr.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef __MIPS32_INTR_H__ -#define __MIPS32_INTR_H__ - -#include - -#define EX_SYSCALL 8 -#define EX_TLB_LD 2 -#define EX_TLB_ST 3 -#define TLB_REFILL 0x80 - -#define MEM_OK 0 - -word_t raise_intr(uint32_t NO, vaddr_t epc); - -#endif diff --git a/libraries/NEMU/src/isa/mips32/local-include/reg.h b/libraries/NEMU/src/isa/mips32/local-include/reg.h deleted file mode 100644 index a22fbee..0000000 --- a/libraries/NEMU/src/isa/mips32/local-include/reg.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef __MIPS32_REG_H__ -#define __MIPS32_REG_H__ - -#include - -enum { PRIV_ERET, PRIV_TLBWR, PRIV_TLBWI, PRIV_TLBP }; - -static inline int check_reg_index(int index) { - IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); - return index; -} - -#define reg_l(index) (cpu.gpr[check_reg_index(index)]._32) - -static inline const char* reg_name(int index, int width) { - extern const char* regsl[]; - IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); - return regsl[index]; -} - -static inline const char* cp0_name(int index) { - extern const char* cp0[]; - IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); - return cp0[index]; -} - -#endif diff --git a/libraries/NEMU/src/isa/mips32/local-include/rtl.h b/libraries/NEMU/src/isa/mips32/local-include/rtl.h deleted file mode 100644 index a61a645..0000000 --- a/libraries/NEMU/src/isa/mips32/local-include/rtl.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef __MIPS32_RTL_H__ -#define __MIPS32_RTL_H__ - -#include -#include "reg.h" - -static inline def_rtl(mux, rtlreg_t* dest, const rtlreg_t* cond, - const rtlreg_t* src1, const rtlreg_t* src2) { - // dest <- (cond ? src1 : src2) - rtl_setrelopi(s, RELOP_EQ, s0, cond, 0); - rtl_subi(s, s0, s0, 1); - // s0 = mask - rtl_and(s, s1, src1, s0); - rtl_not(s, s0, s0); - rtl_and(s, dest, src2, s0); - rtl_or(s, dest, dest, s1); -} - -#endif diff --git a/libraries/NEMU/src/isa/mips32/logo.c b/libraries/NEMU/src/isa/mips32/logo.c deleted file mode 100644 index 3d9c56a..0000000 --- a/libraries/NEMU/src/isa/mips32/logo.c +++ /dev/null @@ -1,63 +0,0 @@ -// refer to http://www.patorjk.com/software/taag/#p=display&f=Big&t=Type%20Something%20 - -/* - _ ____ ___ __ __ _ - (_) |___ \__ \ | \/ | | | - _ __ ___ _ _ __ ___ __) | ) | | \ / | __ _ _ __ _ _ __ _| | - | '_ ` _ \| | '_ \/ __||__ < / / | |\/| |/ _` | '_ \| | | |/ _` | | - | | | | | | | |_) \__ \___) / /_ | | | | (_| | | | | |_| | (_| | | - |_| |_| |_|_| .__/|___/____/____| |_| |_|\__,_|_| |_|\__,_|\__,_|_| - | | - |_| - -*/ - -unsigned char isa_logo[] = { - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x5f, 0x5f, 0x5f, 0x5f, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, - 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x5f, 0x29, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x5f, 0x5f, - 0x5f, 0x20, 0x5c, 0x5f, 0x5f, 0x20, 0x5c, 0x20, 0x20, 0x7c, 0x20, 0x20, - 0x5c, 0x2f, 0x20, 0x20, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x20, 0x5f, 0x20, - 0x5f, 0x5f, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x20, 0x5f, 0x20, - 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x29, - 0x20, 0x7c, 0x20, 0x29, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x5c, 0x20, 0x20, - 0x2f, 0x20, 0x7c, 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x20, 0x5f, 0x20, 0x5f, - 0x5f, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x5f, 0x5f, - 0x20, 0x5f, 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x20, - 0x60, 0x20, 0x5f, 0x20, 0x5c, 0x7c, 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x20, - 0x5c, 0x2f, 0x20, 0x5f, 0x5f, 0x7c, 0x7c, 0x5f, 0x5f, 0x20, 0x3c, 0x20, - 0x2f, 0x20, 0x2f, 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x5c, 0x2f, 0x7c, 0x20, - 0x7c, 0x2f, 0x20, 0x5f, 0x60, 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x20, 0x5c, - 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x2f, 0x20, 0x5f, 0x60, 0x20, - 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, - 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x5f, 0x29, 0x20, 0x5c, - 0x5f, 0x5f, 0x20, 0x5c, 0x5f, 0x5f, 0x5f, 0x29, 0x20, 0x2f, 0x20, 0x2f, - 0x5f, 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x20, - 0x28, 0x5f, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, - 0x7c, 0x5f, 0x7c, 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x7c, 0x20, 0x7c, 0x20, - 0x7c, 0x0a, 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x7c, - 0x5f, 0x7c, 0x5f, 0x7c, 0x20, 0x2e, 0x5f, 0x5f, 0x2f, 0x7c, 0x5f, 0x5f, - 0x5f, 0x2f, 0x5f, 0x5f, 0x5f, 0x5f, 0x2f, 0x5f, 0x5f, 0x5f, 0x5f, 0x7c, - 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x20, 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, - 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x20, 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, - 0x2c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, - 0x5f, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0a -}; diff --git a/libraries/NEMU/src/isa/mips32/reg.c b/libraries/NEMU/src/isa/mips32/reg.c deleted file mode 100644 index 015bddf..0000000 --- a/libraries/NEMU/src/isa/mips32/reg.c +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include "local-include/reg.h" - -const char *regsl[] = { - "$0", "at", "v0", "v1", "a0", "a1", "a2", "a3", - "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", - "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", - "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra" -}; - -#ifndef __ICS_EXPORT -const char *cp0[] = { - "index", "???", "entrylo0", "entrylo1", - "???", "???", "???", "???", - "???", "entryhi", "???", "status", - "cause", "epc", "???", "???", - "???", "???", "???", "???", - "???", "???", "???", "???", - "???", "???", "???", "???", - "???", "???", "???", "???" -}; - -void isa_reg_display() { - int i; - for (i = 0; i < 32; i ++) { - printf("%s: 0x%08x ", regsl[i], cpu.gpr[i]._32); - if (i % 4 == 3) printf("\n"); - } - printf("pc: 0x%08x\n", cpu.pc); -} - -word_t isa_reg_str2val(const char *s, bool *success) { - int i; - *success = true; - for (i = 0; i < 32; i ++) { - if (strcmp(regsl[i], s) == 0) return reg_l(i); - } - - if (strcmp("pc", s) == 0) return cpu.pc; - - *success = false; - return 0; -} -#else -void isa_reg_display() { -} - -word_t isa_reg_str2val(const char *s, bool *success) { - return 0; -} -#endif diff --git a/libraries/NEMU/src/isa/mips32/system/intr.c b/libraries/NEMU/src/isa/mips32/system/intr.c deleted file mode 100644 index 1420ec2..0000000 --- a/libraries/NEMU/src/isa/mips32/system/intr.c +++ /dev/null @@ -1,37 +0,0 @@ -#include "../local-include/rtl.h" -#include "../local-include/intr.h" - -#ifndef __ICS_EXPORT -#include - -word_t raise_intr(uint32_t NO, vaddr_t epc) { -#define EX_ENTRY 0x80000180 - vaddr_t target = (NO & TLB_REFILL) ? 0x80000000 : EX_ENTRY; - NO &= ~TLB_REFILL; - cpu.cause = NO << 2; - cpu.epc = epc; - cpu.status.exl = 1; - - difftest_skip_dut(1, 2); - - return target; -} - -void isa_query_intr() { - if (cpu.INTR && (cpu.status.ie) && !(cpu.status.exl)) { - cpu.INTR = false; - cpu.pc = raise_intr(0, cpu.pc); - } -} -#else -word_t raise_intr(uint32_t NO, vaddr_t epc) { - /* TODO: Trigger an interrupt/exception with ``NO''. - * That is, use ``NO'' to index the IDT. - */ - - return 0; -} - -void isa_query_intr() { -} -#endif diff --git a/libraries/NEMU/src/isa/mips32/system/mmu.c b/libraries/NEMU/src/isa/mips32/system/mmu.c deleted file mode 100644 index fa7cff2..0000000 --- a/libraries/NEMU/src/isa/mips32/system/mmu.c +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include -#ifndef __ICS_EXPORT -#include -#include "../local-include/intr.h" -#include -#include - -#define NR_TLB 16 - -typedef union { - struct { - uint32_t ASID: 8; - uint32_t pad : 5; - uint32_t VPN2:19; - }; - uint32_t val; -} EntryHi; - -typedef union { - struct { - uint32_t G : 1; - uint32_t V : 1; - uint32_t D : 1; - uint32_t C : 3; - uint32_t PFN :24; - uint32_t pad : 2; - }; - uint32_t val; -} EntryLo; - -struct { - EntryHi hi; - EntryLo lo[2]; -} tlb [NR_TLB]; - -void init_mmu() { - int i; - for (i = 0; i < NR_TLB; i ++) { - tlb[i].lo[0].V = tlb[i].lo[1].V = 0; - } - srand(time(0)); -} - -static inline void update_tlb(int idx) { - tlb[idx].hi.val = cpu.entryhi.val; - tlb[idx].lo[0].val = cpu.entrylo0; - tlb[idx].lo[1].val = cpu.entrylo1; -} - -void tlbwr() { - update_tlb(rand() % NR_TLB); -} - -void tlbwi() { - update_tlb(cpu.index % NR_TLB); -} - -void tlbp() { - int i; - for (i = 0; i < NR_TLB; i ++) { - if (tlb[i].hi.VPN2 == cpu.entryhi.VPN2) { - Log("match, i = %d, cpu.pc = 0x%08x, va = 0x%08x", i, cpu.pc, cpu.entryhi.val); - cpu.index = i; - return; - } - } - cpu.index |= 0x80000000; -} - -static inline int32_t search_ppn(vaddr_t addr, int type) { - union { - struct { - uint32_t offset :12; - uint32_t lo_idx : 1; - uint32_t vpn :19; - }; - uint32_t val; - } a; - a.val = addr; - int i; - for (i = 0; i < NR_TLB; i ++) { - if (tlb[i].hi.VPN2 == a.vpn) { - if (!tlb[i].lo[a.lo_idx].V) { - cpu.entryhi.VPN2 = a.vpn; -// Log("tlb[%d] invalid at cpu.pc = 0x%08x, badaddr = 0x%08x", i, cpu.pc, addr); - longjmp_exec(type == MEM_TYPE_WRITE ? EX_TLB_ST : EX_TLB_LD); - } - //Assert(tlb[i].lo[a.lo_idx].V, "cpu.pc = 0x%08x, addr = 0x%08x, lo0 = 0x%08x, lo1 = 0x%08x", - // cpu.pc, addr, tlb[i].lo[0].val, tlb[i].lo[1].val); - return tlb[i].lo[a.lo_idx].PFN; - } - } - cpu.entryhi.VPN2 = a.vpn; -// Log("tlb refill at cpu.pc = 0x%08x, badaddr = 0x%08x", cpu.pc, addr); - longjmp_exec(TLB_REFILL | (type == MEM_TYPE_WRITE ? EX_TLB_ST : EX_TLB_LD)); - return -1; -} -#endif - -paddr_t isa_mmu_translate(vaddr_t vaddr, int len, int type) { -#ifdef __ICS_EXPORT - return MEM_RET_FAIL; -#else - int32_t ppn = search_ppn(vaddr, type); - if (ppn == -1) return MEM_RET_FAIL; - return ((uint32_t)(ppn << 12) + 0x80000000) | MEM_RET_OK; -#endif -} diff --git a/libraries/NEMU/src/isa/mips32/system/priv.c b/libraries/NEMU/src/isa/mips32/system/priv.c deleted file mode 100644 index f681c07..0000000 --- a/libraries/NEMU/src/isa/mips32/system/priv.c +++ /dev/null @@ -1,59 +0,0 @@ -#include "../local-include/rtl.h" -#include "../local-include/intr.h" -#include - -void tlbwr(); -void tlbwi(); -void tlbp(); - -static void csrrw(rtlreg_t *dest, const rtlreg_t *src, uint32_t csrid) { - if (dest != NULL) { - switch (csrid) { - case 0: *dest = cpu.index; break; - case 10: *dest = cpu.entryhi.val; break; - case 12: *dest = cpu.status.val; break; - case 13: *dest = cpu.cause; - // qemu may set cause.IP[7] - IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_ref()); - break; - case 14: *dest = cpu.epc; break; - default: panic("Reading from CSR = %d is not supported", csrid); - } - } - if (src != NULL) { - switch (csrid) { - case 0: cpu.index = *src; break; - case 2: cpu.entrylo0 = *src; break; - case 3: cpu.entrylo1 = *src; break; - case 10: cpu.entryhi.val = *src & ~0x1f00; break; - case 12: cpu.status.val = *src; break; - case 13: cpu.cause = *src; break; - case 14: cpu.epc = *src; break; - default: panic("Writing to CSR = %d is not supported", csrid); - } - } -} - -static word_t priv_instr(uint32_t op, const rtlreg_t *src) { - switch (op) { - case PRIV_ERET: - cpu.status.exl = 0; - return cpu.epc; - case PRIV_TLBWR: tlbwr(); break; - case PRIV_TLBWI: tlbwi(); break; - case PRIV_TLBP: tlbp(); break; - default: panic("Unsupported privilige operation = %d", op); - } - return 0; -} - -void isa_hostcall(uint32_t id, rtlreg_t *dest, const rtlreg_t *src, uint32_t imm) { - word_t ret = 0; - switch (id) { - case HOSTCALL_CSR: csrrw(dest, src, imm); return; - case HOSTCALL_TRAP: ret = raise_intr(imm, *src); break; - case HOSTCALL_PRIV: ret = priv_instr(imm, src); break; - default: panic("Unsupported hostcall ID = %d", id); - } - if (dest) *dest = ret; -} diff --git a/libraries/NEMU/src/isa/riscv32/difftest/dut.c b/libraries/NEMU/src/isa/riscv32/difftest/dut.c deleted file mode 100644 index 0eedf95..0000000 --- a/libraries/NEMU/src/isa/riscv32/difftest/dut.c +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include -#include "../local-include/reg.h" -#include - -bool isa_difftest_checkregs(CPU_state *ref_r, vaddr_t pc) { -#ifndef __ICS_EXPORT - if (memcmp(&cpu.gpr[1], &ref_r->gpr[1], DIFFTEST_REG_SIZE - sizeof(cpu.gpr[0]))) { - int i; - // do not check $0 - for (i = 1; i < ARRLEN(cpu.gpr); i ++) { - difftest_check_reg(reg_name(i, 4), pc, ref_r->gpr[i]._32, cpu.gpr[i]._32); - } - difftest_check_reg("pc", pc, ref_r->pc, cpu.pc); - return false; - } - return true; -#else - return false; -#endif -} - -void isa_difftest_attach() { -} diff --git a/libraries/NEMU/src/isa/riscv32/difftest/ref.c b/libraries/NEMU/src/isa/riscv32/difftest/ref.c deleted file mode 100644 index fbfa827..0000000 --- a/libraries/NEMU/src/isa/riscv32/difftest/ref.c +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include -#include "../local-include/intr.h" - -void isa_difftest_regcpy(void *dut, bool direction) { - if (direction == DIFFTEST_TO_REF) memcpy(&cpu, dut, DIFFTEST_REG_SIZE); - else memcpy(dut, &cpu, DIFFTEST_REG_SIZE); -} - -void isa_difftest_raise_intr(word_t NO) { - cpu.pc = raise_intr(NO, cpu.pc); -} diff --git a/libraries/NEMU/src/isa/riscv32/include/isa-all-instr.h b/libraries/NEMU/src/isa/riscv32/include/isa-all-instr.h deleted file mode 100644 index 34a7371..0000000 --- a/libraries/NEMU/src/isa/riscv32/include/isa-all-instr.h +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include - -#define INSTR_NULLARY(f) \ - f(inv) f(nemu_trap) f(ecall) f(sret) f(sfence_vma) f(p_ret) - -#define INSTR_UNARY(f) \ - f(p_li_0) f(p_li_1) \ - f(p_inc) f(p_dec) - -#define INSTR_BINARY(f) \ - f(lui) f(auipc) f(jal) \ - f(lw) f(sw) f(lh) f(lb) f(lhu) f(lbu) f(sh) f(sb) \ - f(c_j) f(c_jal) f(c_jr) \ - f(c_beqz) f(c_bnez) f(c_mv) \ - f(lw_mmu) f(sw_mmu) f(lh_mmu) f(lb_mmu) f(lhu_mmu) f(lbu_mmu) f(sh_mmu) f(sb_mmu) - -#define INSTR_TERNARY(f) \ - f(add) f(sll) f(srl) f(slt) f(sltu) f(xor) f(or) f(sub) f(sra) f(and) \ - f(addi) f(slli) f(srli) f(slti) f(sltui) f(xori) f(ori) f(srai) f(andi) \ - f(jalr) f(beq) f(bne) f(blt) f(bge) f(bltu) f(bgeu) \ - f(mul) f(mulh) f(mulhu) f(mulhsu) f(div) f(divu) f(rem) f(remu) \ - f(csrrw) f(csrrs) \ - f(c_li) f(c_addi) f(c_slli) f(c_srli) f(c_srai) f(c_andi) \ - f(c_add) f(c_and) f(c_or) f(c_xor) f(c_sub) \ - f(p_blez) f(p_bgez) f(p_bltz) f(p_bgtz) - -def_all_EXEC_ID(); diff --git a/libraries/NEMU/src/isa/riscv32/include/isa-def.h b/libraries/NEMU/src/isa/riscv32/include/isa-def.h deleted file mode 100644 index 6a3ae8d..0000000 --- a/libraries/NEMU/src/isa/riscv32/include/isa-def.h +++ /dev/null @@ -1,115 +0,0 @@ -#ifndef __ISA_RISCV32_H__ -#define __ISA_RISCV32_H__ - -#include - -typedef struct { - struct { - rtlreg_t _32; - } gpr[32]; - - vaddr_t pc; -#ifndef __ICS_EXPORT - vaddr_t stvec; - vaddr_t scause; - vaddr_t sepc; - vaddr_t sscratch; - union { - struct { - uint32_t uie : 1; - uint32_t sie : 1; - uint32_t pad0: 2; - uint32_t upie: 1; - uint32_t spie: 1; - uint32_t pad1: 2; - uint32_t spp : 1; - uint32_t dontcare :21; - }; - uint32_t val; - } sstatus; - union { - struct { - uint32_t ppn :22; - uint32_t asid: 9; - uint32_t mode: 1; - }; - uint32_t val; - } satp; - - bool INTR; -#endif -} riscv32_CPU_state; - -// decode -typedef struct { - union { - struct { - uint32_t opcode1_0 : 2; - uint32_t opcode6_2 : 5; - uint32_t rd : 5; - uint32_t funct3 : 3; - uint32_t rs1 : 5; - int32_t simm11_0 :12; - } i; - struct { - uint32_t opcode1_0 : 2; - uint32_t opcode6_2 : 5; - uint32_t imm4_0 : 5; - uint32_t funct3 : 3; - uint32_t rs1 : 5; - uint32_t rs2 : 5; - int32_t simm11_5 : 7; - } s; - struct { - uint32_t opcode1_0 : 2; - uint32_t opcode6_2 : 5; - uint32_t rd : 5; - uint32_t imm31_12 :20; - } u; -#ifndef __ICS_EXPORT - struct { - uint32_t opcode1_0 : 2; - uint32_t opcode6_2 : 5; - uint32_t rd : 5; - uint32_t funct3 : 3; - uint32_t rs1 : 5; - uint32_t rs2 : 5; - uint32_t funct7 : 7; - } r; - struct { - uint32_t opcode1_0 : 2; - uint32_t opcode6_2 : 5; - uint32_t imm11 : 1; - uint32_t imm4_1 : 4; - uint32_t funct3 : 3; - uint32_t rs1 : 5; - uint32_t rs2 : 5; - uint32_t imm10_5 : 6; - int32_t simm12 : 1; - } b; - struct { - uint32_t opcode1_0 : 2; - uint32_t opcode6_2 : 5; - uint32_t rd : 5; - uint32_t imm19_12 : 8; - uint32_t imm11 : 1; - uint32_t imm10_1 :10; - int32_t simm20 : 1; - } j; - struct { - uint32_t pad7 :20; - uint32_t csr :12; - } csr; -#endif - uint32_t val; - } instr; -} riscv32_ISADecodeInfo; - -#ifdef __ICS_EXPORT -#define isa_mmu_state() (MMU_DIRECT) -#else -#define isa_mmu_state() (cpu.satp.mode ? MMU_TRANSLATE : MMU_DIRECT) -#endif -#define isa_mmu_check(vaddr, len, type) isa_mmu_state() - -#endif diff --git a/libraries/NEMU/src/isa/riscv32/include/isa-exec.h b/libraries/NEMU/src/isa/riscv32/include/isa-exec.h deleted file mode 100644 index dbd86ef..0000000 --- a/libraries/NEMU/src/isa/riscv32/include/isa-exec.h +++ /dev/null @@ -1,8 +0,0 @@ -#include "../instr/pseudo.h" -#include "../instr/compress.h" -#include "../instr/compute.h" -#include "../instr/control.h" -#include "../instr/ldst.h" -#include "../instr/muldiv.h" -#include "../instr/system.h" -#include "../instr/special.h" diff --git a/libraries/NEMU/src/isa/riscv32/init.c b/libraries/NEMU/src/isa/riscv32/init.c deleted file mode 100644 index 1822ccc..0000000 --- a/libraries/NEMU/src/isa/riscv32/init.c +++ /dev/null @@ -1,30 +0,0 @@ -#include -#include - -// this is not consistent with uint8_t -// but it is ok since we do not access the array directly -static const uint32_t img [] = { - 0x800002b7, // lui t0,0x80000 - 0x0002a023, // sw zero,0(t0) - 0x0002a503, // lw a0,0(t0) - 0x0000006b, // nemu_trap -}; - -static void restart() { - /* Set the initial program counter. */ - cpu.pc = RESET_VECTOR; - - /* The zero register is always 0. */ - cpu.gpr[0]._32 = 0; -#ifndef __ICS_EXPORT - cpu.sstatus.val = 0x000c0100; -#endif -} - -void init_isa() { - /* Load built-in image. */ - memcpy(guest_to_host(RESET_VECTOR), img, sizeof(img)); - - /* Initialize this virtual computer system. */ - restart(); -} diff --git a/libraries/NEMU/src/isa/riscv32/instr/compress.h b/libraries/NEMU/src/isa/riscv32/instr/compress.h deleted file mode 100644 index 50eb70f..0000000 --- a/libraries/NEMU/src/isa/riscv32/instr/compress.h +++ /dev/null @@ -1,96 +0,0 @@ -// Although we do not support the decoding of RV32C, -// it still provide the idea of optimization for EHelpers. -// -// The following RVC instructions are excluded -// (1) not present in RV32 -// C.LDSP C.SDSP -// C.LQSP C.SQSP -// C.LD C.SD -// C.LQ C.SQ -// C.ADDIW -// C.ADDW C.SUBW -// (2) seem not frequently present during execution -// C.LWSP C.SWSP -// C.JALR -// C.ADDI4SPN -// (3) only expansion without optimization -// C.LW C.SW -// C.LUI -// (4) still not considered -// C.FLDSP C.FLWSP C.FSDSP C.FSWSP -// C.FLD C.FLW C.FSD C.FSW -// C.EBREAK -// (5) redundant from the aspect of EHelper -// C.ADDI16SP (the same as C.ADDI) -// C.NOP (the same as C.ADDI) - -def_EHelper(c_j) { - rtl_j(s, id_src1->imm); -} - -def_EHelper(c_jal) { - rtl_li(s, &cpu.gpr[1]._32, id_src2->imm); - rtl_j(s, id_src1->imm); -} - -def_EHelper(c_jr) { -// IFDEF(CONFIG_ENGINE_INTERPRETER, rtl_andi(s, s0, s0, ~0x1u)); - IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); - rtl_jr(s, dsrc1); -} - -def_EHelper(c_beqz) { - rtl_jrelop(s, RELOP_EQ, dsrc1, rz, id_dest->imm); -} - -def_EHelper(c_bnez) { - rtl_jrelop(s, RELOP_NE, dsrc1, rz, id_dest->imm); -} - -def_EHelper(c_li) { - rtl_li(s, ddest, id_src2->imm); -} - -def_EHelper(c_addi) { - rtl_addi(s, ddest, ddest, id_src2->imm); -} - -def_EHelper(c_slli) { - rtl_shli(s, ddest, ddest, id_src2->imm); -} - -def_EHelper(c_srli) { - rtl_shri(s, ddest, ddest, id_src2->imm); -} - -def_EHelper(c_srai) { - rtl_sari(s, ddest, ddest, id_src2->imm); -} - -def_EHelper(c_andi) { - rtl_andi(s, ddest, ddest, id_src2->imm); -} - -def_EHelper(c_mv) { - rtl_mv(s, ddest, dsrc1); -} - -def_EHelper(c_add) { - rtl_add(s, ddest, ddest, dsrc2); -} - -def_EHelper(c_and) { - rtl_and(s, ddest, ddest, dsrc2); -} - -def_EHelper(c_or) { - rtl_or(s, ddest, ddest, dsrc2); -} - -def_EHelper(c_xor) { - rtl_xor(s, ddest, ddest, dsrc2); -} - -def_EHelper(c_sub) { - rtl_sub(s, ddest, ddest, dsrc2); -} diff --git a/libraries/NEMU/src/isa/riscv32/instr/compute.h b/libraries/NEMU/src/isa/riscv32/instr/compute.h deleted file mode 100644 index e2fb297..0000000 --- a/libraries/NEMU/src/isa/riscv32/instr/compute.h +++ /dev/null @@ -1,86 +0,0 @@ -def_EHelper(lui) { - rtl_li(s, ddest, id_src1->imm); -} -#ifndef __ICS_EXPORT - -def_EHelper(add) { - rtl_add(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(sub) { - rtl_sub(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(sll) { - rtl_shl(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(srl) { - rtl_shr(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(sra) { - rtl_sar(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(slt) { - rtl_setrelop(s, RELOP_LT, ddest, dsrc1, dsrc2); -} - -def_EHelper(sltu) { - rtl_setrelop(s, RELOP_LTU, ddest, dsrc1, dsrc2); -} - -def_EHelper(xor) { - rtl_xor(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(or) { - rtl_or(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(and) { - rtl_and(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(addi) { - rtl_addi(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(slli) { - rtl_shli(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(srli) { - rtl_shri(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(srai) { - rtl_sari(s, ddest, dsrc1, id_src2->imm); -} - - -def_EHelper(slti) { - rtl_setrelopi(s, RELOP_LT, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(sltui) { - rtl_setrelopi(s, RELOP_LTU, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(xori) { - rtl_xori(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(ori) { - rtl_ori(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(andi) { - rtl_andi(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(auipc) { - rtl_li(s, ddest, id_src1->imm); -} -#endif diff --git a/libraries/NEMU/src/isa/riscv32/instr/control.h b/libraries/NEMU/src/isa/riscv32/instr/control.h deleted file mode 100644 index 858f733..0000000 --- a/libraries/NEMU/src/isa/riscv32/instr/control.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef __ICS_EXPORT - -def_EHelper(jal) { - rtl_li(s, ddest, id_src2->imm); - rtl_j(s, id_src1->imm); -} - -def_EHelper(jalr) { - rtl_addi(s, s0, dsrc1, id_src2->imm); -// IFDEF(CONFIG_ENGINE_INTERPRETER, rtl_andi(s, s0, s0, ~0x1u)); - rtl_li(s, ddest, s->snpc); - IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); - rtl_jr(s, s0); -} - -def_EHelper(beq) { - rtl_jrelop(s, RELOP_EQ, dsrc1, dsrc2, id_dest->imm); -} - -def_EHelper(bne) { - rtl_jrelop(s, RELOP_NE, dsrc1, dsrc2, id_dest->imm); -} - -def_EHelper(blt) { - rtl_jrelop(s, RELOP_LT, dsrc1, dsrc2, id_dest->imm); -} - -def_EHelper(bge) { - rtl_jrelop(s, RELOP_GE, dsrc1, dsrc2, id_dest->imm); -} - -def_EHelper(bltu) { - rtl_jrelop(s, RELOP_LTU, dsrc1, dsrc2, id_dest->imm); -} - -def_EHelper(bgeu) { - rtl_jrelop(s, RELOP_GEU, dsrc1, dsrc2, id_dest->imm); -} -#endif diff --git a/libraries/NEMU/src/isa/riscv32/instr/decode.c b/libraries/NEMU/src/isa/riscv32/instr/decode.c deleted file mode 100644 index 20c0013..0000000 --- a/libraries/NEMU/src/isa/riscv32/instr/decode.c +++ /dev/null @@ -1,271 +0,0 @@ -#include "../local-include/rtl.h" -#include -#include -#include - -def_all_THelper(); - -// decode operand helper -#define def_DopHelper(name) \ - void concat(decode_op_, name) (Decode *s, Operand *op, uint32_t val, bool flag) - -static inline def_DopHelper(i) { - op->imm = val; - print_Dop(op->str, OP_STR_SIZE, (flag ? "0x%x" : "%d"), op->imm); -} - -static inline def_DopHelper(r) { - bool load_val = flag; - static word_t zero_null = 0; - op->preg = (!load_val && val == 0) ? &zero_null : ®_l(val); - print_Dop(op->str, OP_STR_SIZE, "%s", reg_name(val, 4)); -} - -static inline def_DHelper(I) { - decode_op_r(s, id_src1, s->isa.instr.i.rs1, true); - decode_op_i(s, id_src2, s->isa.instr.i.simm11_0, false); - decode_op_r(s, id_dest, s->isa.instr.i.rd, false); -} - -static inline def_DHelper(U) { - decode_op_i(s, id_src1, s->isa.instr.u.imm31_12 << 12, true); - decode_op_r(s, id_dest, s->isa.instr.u.rd, false); -} - -static inline def_DHelper(S) { - decode_op_r(s, id_src1, s->isa.instr.s.rs1, true); - sword_t simm = (s->isa.instr.s.simm11_5 << 5) | s->isa.instr.s.imm4_0; - decode_op_i(s, id_src2, simm, false); - decode_op_r(s, id_dest, s->isa.instr.s.rs2, true); -} -#ifndef __ICS_EXPORT - -static inline def_DHelper(R) { - decode_op_r(s, id_src1, s->isa.instr.r.rs1, true); - decode_op_r(s, id_src2, s->isa.instr.r.rs2, true); - decode_op_r(s, id_dest, s->isa.instr.r.rd, false); -} - -static inline def_DHelper(J) { - sword_t offset = (s->isa.instr.j.simm20 << 20) | (s->isa.instr.j.imm19_12 << 12) | - (s->isa.instr.j.imm11 << 11) | (s->isa.instr.j.imm10_1 << 1); - decode_op_i(s, id_src1, s->pc + offset, true); - decode_op_r(s, id_dest, s->isa.instr.j.rd, false); - id_src2->imm = s->snpc; -} - -static inline def_DHelper(B) { - sword_t offset = (s->isa.instr.b.simm12 << 12) | (s->isa.instr.b.imm11 << 11) | - (s->isa.instr.b.imm10_5 << 5) | (s->isa.instr.b.imm4_1 << 1); - decode_op_i(s, id_dest, s->pc + offset, true); - decode_op_r(s, id_src1, s->isa.instr.b.rs1, true); - decode_op_r(s, id_src2, s->isa.instr.b.rs2, true); -} - -static inline def_DHelper(auipc) { - decode_U(s); - id_src1->imm += s->pc; -} - -static inline def_DHelper(csr) { - decode_op_r(s, id_src1, s->isa.instr.i.rs1, true); - decode_op_i(s, id_src2, s->isa.instr.csr.csr, true); - decode_op_r(s, id_dest, s->isa.instr.i.rd, false); -} -#endif - -def_THelper(load) { - print_Dop(id_src1->str, OP_STR_SIZE, "%d(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs1, 4)); - int mmu_mode = isa_mmu_state(); - if (mmu_mode == MMU_DIRECT) { - switch (s->isa.instr.i.funct3) { - TAB(0, lb) TAB(1, lh) TAB(2, lw) - TAB(4, lbu) TAB(5, lhu) - } - } else if (mmu_mode == MMU_TRANSLATE) { - switch (s->isa.instr.i.funct3) { - TAB(0, lb_mmu) TAB(1, lh_mmu) TAB(2, lw_mmu) - TAB(4, lbu_mmu) TAB(5, lhu_mmu) - } - } else { - assert(0); - } - return EXEC_ID_inv; -} - -def_THelper(store) { - print_Dop(id_src1->str, OP_STR_SIZE, "%d(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs1, 4)); - int mmu_mode = isa_mmu_state(); - if (mmu_mode == MMU_DIRECT) { - switch (s->isa.instr.i.funct3) { - TAB(0, sb) TAB(1, sh) TAB(2, sw) - } - } else if (mmu_mode == MMU_TRANSLATE) { - switch (s->isa.instr.i.funct3) { - TAB(0, sb_mmu) TAB(1, sh_mmu) TAB(2, sw_mmu) - } - } else { - assert(0); - } - return EXEC_ID_inv; -} - -def_THelper(c_addi_dispatch) { - if (id_src2->imm == 1) return table_p_inc(s); - if (id_src2->imm == -1u) return table_p_dec(s); - return table_c_addi(s); -} - -def_THelper(addi_dispatch) { - if (s->isa.instr.i.rs1 == 0) { - switch (id_src2->imm) { - TAB(0, p_li_0) TAB(1, p_li_1) - default: TAB(2, c_li); - } - } else { - switch (id_src2->imm) { - TAB(0, c_mv) - default: TAB(2, addi); - } - } -} - -def_THelper(op_imm_c) { - if (s->isa.instr.r.funct7 == 32) { - switch (s->isa.instr.r.funct3) { TAB(5, c_srai) } - } - switch (s->isa.instr.i.funct3) { - TAB(0, c_addi_dispatch) TAB(1, c_slli) TAB(2, slti) TAB(3, sltui) - TAB(4, xori) TAB(5, c_srli) TAB(6, ori) TAB(7, c_andi) - } - return EXEC_ID_inv; -} - -def_THelper(op_imm) { - if (s->isa.instr.i.rd == s->isa.instr.i.rs1) return table_op_imm_c(s); - if (s->isa.instr.r.funct7 == 32) { - switch (s->isa.instr.r.funct3) { TAB(5, srai) } - } - switch (s->isa.instr.i.funct3) { - TAB(0, addi_dispatch) TAB(1, slli) TAB(2, slti) TAB(3, sltui) - TAB(4, xori) TAB(5, srli) TAB(6, ori) TAB(7, andi) - } - return EXEC_ID_inv; -}; - -def_THelper(op) { - if (s->isa.instr.r.funct7 == 32) { - if (s->isa.instr.r.rd == s->isa.instr.r.rs1) { - switch (s->isa.instr.r.funct3) { - TAB(0, c_sub) - } - } - switch (s->isa.instr.r.funct3) { - TAB(0, sub) TAB(5, sra) - } - return EXEC_ID_inv; - } -#define pair(x, y) (((x) << 3) | (y)) - int index = pair(s->isa.instr.r.funct7 & 1, s->isa.instr.r.funct3); - if (s->isa.instr.r.rd == s->isa.instr.r.rs1) { - switch (index) { - TAB(pair(0, 0), c_add) - TAB(pair(0, 4), c_xor) - TAB(pair(0, 6), c_or) - TAB(pair(0, 7), c_and) - } - } - - switch (index) { - TAB(pair(0, 0), add) TAB(pair(0, 1), sll) TAB(pair(0, 2), slt) TAB(pair(0, 3), sltu) - TAB(pair(0, 4), xor) TAB(pair(0, 5), srl) TAB(pair(0, 6), or) TAB(pair(0, 7), and) - TAB(pair(1, 0), mul) TAB(pair(1, 1), mulh) TAB(pair(1, 2),mulhsu)TAB(pair(1, 3), mulhu) - TAB(pair(1, 4), div) TAB(pair(1, 5), divu) TAB(pair(1, 6), rem) TAB(pair(1, 7), remu) - } - return EXEC_ID_inv; -} - -def_THelper(branch) { - if (s->isa.instr.r.rs2 == 0) { - switch (s->isa.instr.i.funct3) { - TAB(0, c_beqz) TAB(1, c_bnez) - TAB(4, p_bltz) TAB(5, p_bgez) - } - } - if (s->isa.instr.r.rs1 == 0) { - switch (s->isa.instr.i.funct3) { - TAB(4, p_bgtz) TAB(5, p_blez) - } - } - switch (s->isa.instr.i.funct3) { - TAB(0, beq) TAB(1, bne) - TAB(4, blt) TAB(5, bge) TAB(6, bltu) TAB(7, bgeu) - } - return EXEC_ID_inv; -}; - -def_THelper(priv) { - switch (s->isa.instr.csr.csr) { - TAB(0, ecall) TAB (0x102, sret) TAB (0x120, sfence_vma) - } - return EXEC_ID_inv; -}; - -def_THelper(system) { - switch (s->isa.instr.i.funct3) { - TAB(0, priv) TAB (1, csrrw) TAB (2, csrrs) - } - return EXEC_ID_inv; -}; - -def_THelper(jal_dispatch) { - switch (s->isa.instr.j.rd) { - TAB(0, c_j) TAB(1, c_jal) - default: TAB(2, jal) - } -} - -def_THelper(jalr_dispatch) { - if (s->isa.instr.i.rd == 0 && id_src2->imm == 0) { - if (s->isa.instr.i.rs1 == 1) return table_p_ret(s); - else return table_c_jr(s); - } - return table_jalr(s); -} - -def_THelper(main) { - switch (s->isa.instr.i.opcode6_2) { - IDTAB(000, I, load) - IDTAB(004, I, op_imm) IDTAB(005, auipc, auipc) - IDTAB(010, S, store) - IDTAB(014, R, op) IDTAB(015, U, lui) - IDTAB(030, B, branch) IDTAB(031, I, jalr_dispatch) TAB (032, nemu_trap) IDTAB(033, J, jal_dispatch) - IDTAB(034, csr, system) - } - return table_inv(s); -}; - -int isa_fetch_decode(Decode *s) { - s->isa.instr.val = instr_fetch(&s->snpc, 4); - int idx = EXEC_ID_inv; - if (s->isa.instr.i.opcode1_0 == 0x3) { - idx = table_main(s); - } - - s->type = INSTR_TYPE_N; - switch (idx) { - case EXEC_ID_c_j: case EXEC_ID_c_jal: case EXEC_ID_jal: - s->jnpc = id_src1->imm; s->type = INSTR_TYPE_J; break; - - case EXEC_ID_beq: case EXEC_ID_bne: case EXEC_ID_blt: case EXEC_ID_bge: - case EXEC_ID_bltu: case EXEC_ID_bgeu: - case EXEC_ID_c_beqz: case EXEC_ID_c_bnez: - case EXEC_ID_p_bltz: case EXEC_ID_p_bgez: case EXEC_ID_p_blez: case EXEC_ID_p_bgtz: - s->jnpc = id_dest->imm; s->type = INSTR_TYPE_B; break; - - case EXEC_ID_p_ret: case EXEC_ID_c_jr: case EXEC_ID_jalr: - s->type = INSTR_TYPE_I; - } - - return idx; -} diff --git a/libraries/NEMU/src/isa/riscv32/instr/ldst.h b/libraries/NEMU/src/isa/riscv32/instr/ldst.h deleted file mode 100644 index ced4488..0000000 --- a/libraries/NEMU/src/isa/riscv32/instr/ldst.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifdef __ICS_EXPORT -def_EHelper(lw) { - rtl_lms(s, ddest, dsrc1, id_src2->imm, 4); -} - -def_EHelper(sw) { - rtl_sm(s, ddest, dsrc1, id_src2->imm, 4); -} -#else -#define def_ldst_template(name, rtl_instr, width, mmu_mode) \ - def_EHelper(name) { \ - concat(rtl_, rtl_instr) (s, ddest, dsrc1, id_src2->imm, width, mmu_mode); \ - } - -#define def_all_ldst(suffix, mmu_mode) \ - def_ldst_template(concat(lw , suffix), lms, 4, mmu_mode) \ - def_ldst_template(concat(lh , suffix), lms, 2, mmu_mode) \ - def_ldst_template(concat(lb , suffix), lms, 1, mmu_mode) \ - def_ldst_template(concat(lhu, suffix), lm , 2, mmu_mode) \ - def_ldst_template(concat(lbu, suffix), lm , 1, mmu_mode) \ - def_ldst_template(concat(sw , suffix), sm , 4, mmu_mode) \ - def_ldst_template(concat(sh , suffix), sm , 2, mmu_mode) \ - def_ldst_template(concat(sb , suffix), sm , 1, mmu_mode) - -def_all_ldst(, MMU_DIRECT) -def_all_ldst(_mmu, MMU_TRANSLATE) -#endif diff --git a/libraries/NEMU/src/isa/riscv32/instr/muldiv.h b/libraries/NEMU/src/isa/riscv32/instr/muldiv.h deleted file mode 100644 index 3f6ed69..0000000 --- a/libraries/NEMU/src/isa/riscv32/instr/muldiv.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef __ICS_EXPORT -def_EHelper(mul) { - rtl_mulu_lo(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(mulh) { - rtl_muls_hi(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(mulhu) { - rtl_mulu_hi(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(mulhsu) { - // Algorithm: - // We want to obtain ans = mulhsu(a, b). - // Consider mulhu(a, b). - // If a >= 0, then ans = mulhu(a, b); - // If a = -x < 0, then a = 2^32 - x in two's complement - // Then - // mulhu(a, b) = mulhu(2^32 -x , b) = ((2^32 - x)b) >> 32 - // = ((2^32b) >> 32) + ((-xb) >> 32) - // = b + mulhsu(a, b) = b + ans - // Therefore, ans = mulhu(a, b) - b - // - // In the end, ans = (a < 0 ? mulhu(a, b) - b : mulhu(a, b)) - // = mulhu(a, b) - (a < 0 ? b : 0) - - rtl_sari(s, s0, dsrc1, 31); - rtl_and(s, s0, dsrc2, s0); // s0 = (id_src1->val < 0 ? id_src2->val : 0) - rtl_mulu_hi(s, s1, dsrc1, dsrc2); - rtl_sub(s, ddest, s1, s0); -} - -def_EHelper(div) { - rtl_divs_q(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(divu) { - rtl_divu_q(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(rem) { - rtl_divs_r(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(remu) { - rtl_divu_r(s, ddest, dsrc1, dsrc2); -} -#endif diff --git a/libraries/NEMU/src/isa/riscv32/instr/pseudo.h b/libraries/NEMU/src/isa/riscv32/instr/pseudo.h deleted file mode 100644 index d0d346a..0000000 --- a/libraries/NEMU/src/isa/riscv32/instr/pseudo.h +++ /dev/null @@ -1,67 +0,0 @@ -// standard pseudo instructions -// See Chapter 25 "RISC-V Assembly Programmer's Handbook" in the RISC-V ISA manual -// -// The following pseudo instructions are excluded -// (1) not present in RV32 -// negw sext.w -// (2) seem not frequently present during execution -// nop not neg -// seqz snez sltz sgtz -// jalr(rs) -// [[all CSR instructions]] -// (3) only expansion without optimization -// la -// l{b|h|w|d} symbol -// s{b|h|w|d} symbol -// bgt ble bgtu bleu -// call tail -// fence -// (4) still not considered -// fmv.s fabs.s fneg.s -// fmv.d fabs.d fneg.d -// fl{w|d} symbol -// fs{w|d} symbol -// (5) already provided in RVC -// j jal(ra) -// beqz bnez -// li mv - -def_EHelper(p_blez) { - rtl_jrelop(s, RELOP_GE, rz, dsrc2, id_dest->imm); -} - -def_EHelper(p_bgtz) { - rtl_jrelop(s, RELOP_LT, rz, dsrc2, id_dest->imm); -} - -def_EHelper(p_bltz) { - rtl_jrelop(s, RELOP_LT, dsrc1, rz, id_dest->imm); -} - -def_EHelper(p_bgez) { - rtl_jrelop(s, RELOP_GE, dsrc1, rz, id_dest->imm); -} - -def_EHelper(p_ret) { -// IFDEF(CONFIG_ENGINE_INTERPRETER, rtl_andi(s, s0, s0, ~0x1u)); - IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); - rtl_jr(s, &cpu.gpr[1]._32); -} - -// non-standard pseudo instructions - -def_EHelper(p_li_0) { - rtl_li(s, ddest, 0); -} - -def_EHelper(p_li_1) { - rtl_li(s, ddest, 1); -} - -def_EHelper(p_inc) { - rtl_addi(s, ddest, ddest, 1); -} - -def_EHelper(p_dec) { - rtl_subi(s, ddest, ddest, 1); -} diff --git a/libraries/NEMU/src/isa/riscv32/instr/special.h b/libraries/NEMU/src/isa/riscv32/instr/special.h deleted file mode 100644 index 8d76970..0000000 --- a/libraries/NEMU/src/isa/riscv32/instr/special.h +++ /dev/null @@ -1,11 +0,0 @@ -def_EHelper(inv) { - save_globals(s); - rtl_hostcall(s, HOSTCALL_INV, NULL, NULL, 0); - longjmp_exec(NEMU_EXEC_END); -} - -def_EHelper(nemu_trap) { - save_globals(s); - rtl_hostcall(s, HOSTCALL_EXIT, NULL, &cpu.gpr[10]._32, 0); // gpr[10] is $a0 - longjmp_exec(NEMU_EXEC_END); -} diff --git a/libraries/NEMU/src/isa/riscv32/instr/system.h b/libraries/NEMU/src/isa/riscv32/instr/system.h deleted file mode 100644 index 7f610a1..0000000 --- a/libraries/NEMU/src/isa/riscv32/instr/system.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef __ICS_EXPORT - -#define csr_difftest() IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 3)) -#define priv_difftest() IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)) - -def_EHelper(csrrw) { - csr_difftest(); - rtl_hostcall(s, HOSTCALL_CSR, ddest, dsrc1, id_src2->imm); - rtl_priv_next(s); -} - -def_EHelper(csrrs) { - csr_difftest(); - rtl_hostcall(s, HOSTCALL_CSR, s0, NULL, id_src2->imm); - rtl_or(s, s1, s0, dsrc1); - rtl_mv(s, ddest, s0); - rtl_hostcall(s, HOSTCALL_CSR, NULL, s1, id_src2->imm); - rtl_priv_next(s); -} - -def_EHelper(ecall) { - priv_difftest(); - rtl_trap(s, s->pc, 9); - rtl_priv_jr(s, t0); -} - -def_EHelper(sret) { - priv_difftest(); - rtl_hostcall(s, HOSTCALL_PRIV, s0, NULL, 0x102); - rtl_priv_jr(s, s0); -} - -def_EHelper(sfence_vma) { - priv_difftest(); - rtl_hostcall(s, HOSTCALL_PRIV, NULL, NULL, 0x120); - rtl_priv_next(s); -} -#endif diff --git a/libraries/NEMU/src/isa/riscv32/local-include/intr.h b/libraries/NEMU/src/isa/riscv32/local-include/intr.h deleted file mode 100644 index 617da1f..0000000 --- a/libraries/NEMU/src/isa/riscv32/local-include/intr.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __RISCV32_INTR_H__ -#define __RISCV32_INTR_H__ - -#include - -word_t raise_intr(uint32_t NO, vaddr_t epc); - -#endif diff --git a/libraries/NEMU/src/isa/riscv32/local-include/reg.h b/libraries/NEMU/src/isa/riscv32/local-include/reg.h deleted file mode 100644 index 5c1d07d..0000000 --- a/libraries/NEMU/src/isa/riscv32/local-include/reg.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef __RISCV32_REG_H__ -#define __RISCV32_REG_H__ - -#include - -static inline int check_reg_index(int index) { - IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); - return index; -} - -#define reg_l(index) (cpu.gpr[check_reg_index(index)]._32) - -static inline const char* reg_name(int index, int width) { - extern const char* regsl[]; - IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); - return regsl[index]; -} - -#endif diff --git a/libraries/NEMU/src/isa/riscv32/local-include/rtl.h b/libraries/NEMU/src/isa/riscv32/local-include/rtl.h deleted file mode 100644 index 0afbb48..0000000 --- a/libraries/NEMU/src/isa/riscv32/local-include/rtl.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __RISCV32_RTL_H__ -#define __RISCV32_RTL_H__ - -#include -#include "reg.h" - -// no isa-dependent rtl instructions - -#endif diff --git a/libraries/NEMU/src/isa/riscv32/logo.c b/libraries/NEMU/src/isa/riscv32/logo.c deleted file mode 100644 index 3ea54c2..0000000 --- a/libraries/NEMU/src/isa/riscv32/logo.c +++ /dev/null @@ -1,48 +0,0 @@ -// refer to http://www.patorjk.com/software/taag/#p=display&f=Big&t=Type%20Something%20 - -/* - _ __ __ _ - (_) | \/ | | | - _ __ _ ___ ___ ________ __ | \ / | __ _ _ __ _ _ __ _| | - | '__| / __|/ __|______\ \ / / | |\/| |/ _` | '_ \| | | |/ _` | | - | | | \__ \ (__ \ V / | | | | (_| | | | | |_| | (_| | | - |_| |_|___/\___| \_/ |_| |_|\__,_|_| |_|\__,_|\__,_|_| - -*/ - -unsigned char isa_logo[] = { - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x20, - 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x28, 0x5f, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7c, 0x20, 0x20, 0x5c, 0x2f, 0x20, 0x20, 0x7c, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x20, - 0x7c, 0x0a, 0x20, 0x20, 0x5f, 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x20, 0x5f, - 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x5f, 0x5f, 0x5f, 0x5f, - 0x5f, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x20, 0x7c, 0x20, - 0x5c, 0x20, 0x20, 0x2f, 0x20, 0x7c, 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x20, - 0x5f, 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x20, 0x5f, 0x20, - 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x7c, 0x20, - 0x27, 0x5f, 0x5f, 0x7c, 0x20, 0x2f, 0x20, 0x5f, 0x5f, 0x7c, 0x2f, 0x20, - 0x5f, 0x5f, 0x7c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5c, 0x20, 0x5c, - 0x20, 0x2f, 0x20, 0x2f, 0x20, 0x7c, 0x20, 0x7c, 0x5c, 0x2f, 0x7c, 0x20, - 0x7c, 0x2f, 0x20, 0x5f, 0x60, 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x20, 0x5c, - 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x2f, 0x20, 0x5f, 0x60, 0x20, - 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x20, 0x7c, 0x20, - 0x5c, 0x5f, 0x5f, 0x20, 0x5c, 0x20, 0x28, 0x5f, 0x5f, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x20, 0x56, 0x20, 0x2f, 0x20, 0x20, - 0x7c, 0x20, 0x7c, 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x7c, - 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x5f, 0x7c, - 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x0a, 0x20, - 0x7c, 0x5f, 0x7c, 0x20, 0x20, 0x7c, 0x5f, 0x7c, 0x5f, 0x5f, 0x5f, 0x2f, - 0x5c, 0x5f, 0x5f, 0x5f, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x5c, 0x5f, 0x2f, 0x20, 0x20, 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x20, - 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x20, - 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, - 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x0a -}; diff --git a/libraries/NEMU/src/isa/riscv32/reg.c b/libraries/NEMU/src/isa/riscv32/reg.c deleted file mode 100644 index 7039531..0000000 --- a/libraries/NEMU/src/isa/riscv32/reg.c +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include "local-include/reg.h" - -const char *regsl[] = { - "$0", "ra", "sp", "gp", "tp", "t0", "t1", "t2", - "s0", "s1", "a0", "a1", "a2", "a3", "a4", "a5", - "a6", "a7", "s2", "s3", "s4", "s5", "s6", "s7", - "s8", "s9", "s10", "s11", "t3", "t4", "t5", "t6" -}; - -#ifndef __ICS_EXPORT -void isa_reg_display() { - int i; - for (i = 0; i < 32; i ++) { - printf("%s: 0x%08x ", regsl[i], cpu.gpr[i]._32); - if (i % 4 == 3) printf("\n"); - } - printf("pc: 0x%08x\n", cpu.pc); -} - -word_t isa_reg_str2val(const char *s, bool *success) { - int i; - *success = true; - for (i = 0; i < 32; i ++) { - if (strcmp(regsl[i], s) == 0) return reg_l(i); - } - - if (strcmp("pc", s) == 0) return cpu.pc; - - *success = false; - return 0; -} -#else -void isa_reg_display() { -} - -word_t isa_reg_str2val(const char *s, bool *success) { - return 0; -} -#endif diff --git a/libraries/NEMU/src/isa/riscv32/system/intr.c b/libraries/NEMU/src/isa/riscv32/system/intr.c deleted file mode 100644 index 8d4c62c..0000000 --- a/libraries/NEMU/src/isa/riscv32/system/intr.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "../local-include/rtl.h" -#include "../local-include/intr.h" - -#ifndef __ICS_EXPORT -word_t raise_intr(uint32_t NO, vaddr_t epc) { - cpu.scause = NO; - cpu.sepc = epc; - cpu.sstatus.spie = cpu.sstatus.sie; - cpu.sstatus.sie = 0; - return cpu.stvec; -} - -void isa_query_intr() { - if (cpu.INTR && cpu.sstatus.sie) { - cpu.INTR = false; - cpu.pc = raise_intr(0x80000005, cpu.pc); - } -} - -#else -word_t raise_intr(uint32_t NO, vaddr_t epc) { - /* TODO: Trigger an interrupt/exception with ``NO''. - * That is, use ``NO'' to index the IDT. - */ - - return 0; -} - -void isa_query_intr() { -} -#endif diff --git a/libraries/NEMU/src/isa/riscv32/system/mmu.c b/libraries/NEMU/src/isa/riscv32/system/mmu.c deleted file mode 100644 index b6419e8..0000000 --- a/libraries/NEMU/src/isa/riscv32/system/mmu.c +++ /dev/null @@ -1,90 +0,0 @@ -#include -#include -#include - -#ifndef __ICS_EXPORT -/* the 32bit Page Table Entry(second level page table) data structure */ -typedef union PageTableEntry { - struct { - uint32_t valid : 1; - uint32_t read : 1; - uint32_t write : 1; - uint32_t exec : 1; - uint32_t user : 1; - uint32_t global : 1; - uint32_t access : 1; - uint32_t dirty : 1; - uint32_t rsw : 2; - uint32_t ppn :22; - }; - uint32_t val; -} PTE; - -typedef union { - struct { - uint32_t pf_off :12; - uint32_t pt_idx :10; - uint32_t pdir_idx :10; - }; - uint32_t addr; -} PageAddr; - -typedef struct { - uint32_t vpn; - uint32_t ppage; -} TLBEntry; - -static TLBEntry TLB[4096] = {}; -static bool TLBValid[4096] = {}; - -static inline int TLB_hash(uint32_t vpn) { - return vpn % ARRLEN(TLB); -} - -static paddr_t ptw(vaddr_t vaddr, int type) { - uint32_t vpn = vaddr >> 12; - int idx = TLB_hash(vpn); - TLBEntry *e = &TLB[idx]; - //if (e->vpn == vpn && TLBValid[idx]) { - // if (cpu.pc == 0x40000120) Log("vaddr = 0x%x, ppage = 0x%x", vaddr, e->ppage); - // return e->ppage; - //} - - PageAddr *addr = (void *)&vaddr; - paddr_t pdir_base = cpu.satp.ppn << 12; - - PTE pde; - pde.val = paddr_read(pdir_base + addr->pdir_idx * 4, 4); - if (!pde.valid) { - panic("pc = %x, vaddr = %x, pdir_base = %x, pde = %x", cpu.pc, vaddr, pdir_base, pde.val); - } - - paddr_t pt_base = pde.ppn << 12; - PTE pte; - pte.val = paddr_read(pt_base + addr->pt_idx * 4, 4); - if (!pte.valid) { - panic("pc = %x, vaddr = %x, pt_base = %x, pte = %x", cpu.pc, vaddr, pt_base, pte.val); - } - - // update TLB - *e = (TLBEntry) { .vpn = vpn, .ppage = pte.ppn << 12 }; - TLBValid[idx] = true; - - //bool is_write = (type == MEM_TYPE_WRITE); - //if (!pte.access || (pte.dirty == 0 && is_write)) { - // pte.access = 1; - // pte.dirty |= is_write; - // paddr_write(pt_base + addr->pt_idx * 4, 4, pte.val); - //} - - return pte.ppn << 12; -} - -paddr_t isa_mmu_translate(vaddr_t vaddr, int len, int type) { - return ptw(vaddr, type) | MEM_RET_OK; -} -#else -paddr_t isa_mmu_translate(vaddr_t vaddr, int len, int type) { - return MEM_RET_FAIL; -} -#endif diff --git a/libraries/NEMU/src/isa/riscv32/system/priv.c b/libraries/NEMU/src/isa/riscv32/system/priv.c deleted file mode 100644 index ab56a7e..0000000 --- a/libraries/NEMU/src/isa/riscv32/system/priv.c +++ /dev/null @@ -1,48 +0,0 @@ -#include "../local-include/rtl.h" -#include "../local-include/intr.h" -#include - -static inline word_t* csr_decode(uint32_t csr) { - switch (csr) { - case 0x180: return &cpu.satp.val; - case 0x100: return &cpu.sstatus.val; - case 0x105: return &cpu.stvec; - case 0x140: return &cpu.sscratch; - case 0x141: return &cpu.sepc; - case 0x142: return &cpu.scause; - default: panic("unimplemented CSR 0x%x", csr); - } - return NULL; -} - -static void csrrw(rtlreg_t *dest, const rtlreg_t *src, uint32_t csrid) { - word_t *csr = csr_decode(csrid); - word_t tmp = (src != NULL ? *src : 0); - if (dest != NULL) { *dest = *csr; } - if (src != NULL) { *csr = tmp; } -} - -static word_t priv_instr(uint32_t op, const rtlreg_t *src) { - switch (op) { - case 0x102: // sret - cpu.sstatus.sie = cpu.sstatus.spie; - cpu.sstatus.spie = 1; - return cpu.sepc; - case 0x120:; // sfence.vma - mmu_tlb_flush(*src); - return 0; - default: panic("Unsupported privilige operation = %d", op); - } - return 0; -} - -void isa_hostcall(uint32_t id, rtlreg_t *dest, const rtlreg_t *src, uint32_t imm) { - word_t ret = 0; - switch (id) { - case HOSTCALL_CSR: csrrw(dest, src, imm); return; - case HOSTCALL_TRAP: ret = raise_intr(imm, *src); break; - case HOSTCALL_PRIV: ret = priv_instr(imm, src); break; - default: panic("Unsupported hostcall ID = %d", id); - } - if (dest) *dest = ret; -} diff --git a/libraries/NEMU/src/isa/riscv64/Kconfig b/libraries/NEMU/src/isa/riscv64/Kconfig deleted file mode 100644 index 385fb6a..0000000 --- a/libraries/NEMU/src/isa/riscv64/Kconfig +++ /dev/null @@ -1,9 +0,0 @@ -menu "ISA-dependent Options for riscv64" - -config CLINT_MMIO - hex "MMIO address of CLINT" - default 0xa2000000 - -config RVV_010 - bool "Experimental RISC-V Vector Extension v0.10" -endmenu diff --git a/libraries/NEMU/src/isa/riscv64/clint.c b/libraries/NEMU/src/isa/riscv64/clint.c deleted file mode 100644 index 127384a..0000000 --- a/libraries/NEMU/src/isa/riscv64/clint.c +++ /dev/null @@ -1,39 +0,0 @@ -#include -#include -#include -#include "local-include/csr.h" - -#ifndef CONFIG_SHARE -#define CLINT_MTIMECMP (0x4000 / sizeof(clint_base[0])) -#define CLINT_MTIME (0xBFF8 / sizeof(clint_base[0])) -#define TIMEBASE 10000000ul - -static uint64_t *clint_base = NULL; -static uint64_t boot_time = 0; - -void update_clint() { -#ifdef CONFIG_DETERMINISTIC - clint_base[CLINT_MTIME] += TIMEBASE / 10000; -#else - uint64_t now = get_time() - boot_time; - clint_base[CLINT_MTIME] = TIMEBASE * now / 1000000; -#endif - mip->mtip = (clint_base[CLINT_MTIME] >= clint_base[CLINT_MTIMECMP]); -} - -uint64_t clint_uptime() { - update_clint(); - return clint_base[CLINT_MTIME]; -} - -static void clint_io_handler(uint32_t offset, int len, bool is_write) { - update_clint(); -} - -void init_clint() { - clint_base = (uint64_t *)new_space(0x10000); - add_mmio_map("clint", CONFIG_CLINT_MMIO, (uint8_t *)clint_base, 0x10000, clint_io_handler); - IFNDEF(CONFIG_DETERMINISTIC, add_alarm_handle(update_clint)); - boot_time = get_time(); -} -#endif diff --git a/libraries/NEMU/src/isa/riscv64/difftest/dut.c b/libraries/NEMU/src/isa/riscv64/difftest/dut.c deleted file mode 100644 index 9c04307..0000000 --- a/libraries/NEMU/src/isa/riscv64/difftest/dut.c +++ /dev/null @@ -1,23 +0,0 @@ -#include -#include -#include -#include "../local-include/reg.h" -#include - -bool isa_difftest_checkregs(CPU_state *ref_r, vaddr_t pc) { - if (memcmp(&cpu.gpr[1], &ref_r->gpr[1], DIFFTEST_REG_SIZE - sizeof(cpu.gpr[0]))) { - int i; - // do not check $0 - for (i = 1; i < ARRLEN(cpu.gpr); i ++) { - difftest_check_reg(reg_name(i, 4), pc, ref_r->gpr[i]._64, cpu.gpr[i]._64); - } - difftest_check_reg("pc", pc, ref_r->pc, cpu.pc); - return false; - } - return true; -} - -void isa_difftest_attach() { - ref_difftest_memcpy(CONFIG_MBASE, guest_to_host(CONFIG_MBASE), CONFIG_MSIZE, DIFFTEST_TO_REF); - ref_difftest_regcpy(&cpu, DIFFTEST_TO_REF); -} diff --git a/libraries/NEMU/src/isa/riscv64/difftest/ref.c b/libraries/NEMU/src/isa/riscv64/difftest/ref.c deleted file mode 100644 index 36cf84a..0000000 --- a/libraries/NEMU/src/isa/riscv64/difftest/ref.c +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include -#include "../local-include/intr.h" -#include "../local-include/csr.h" - -// csr_prepare() & csr_writeback() are used to maintain -// a compact mirror of critical CSRs -// For processor difftest only -static void csr_prepare() { - cpu.mstatus = mstatus->val; - cpu.mcause = mcause->val; - cpu.mepc = mepc->val; - - cpu.sstatus = csrid_read(0x100); // sstatus - cpu.scause = scause->val; - cpu.sepc = sepc->val; - - cpu.satp = satp->val; - cpu.mip = mip->val; - cpu.mie = mie->val; - cpu.mscratch = mscratch->val; - cpu.sscratch = sscratch->val; - cpu.mideleg = mideleg->val; - cpu.medeleg = medeleg->val; - cpu.mtval = mtval->val; - cpu.stval = stval->val; - cpu.mtvec = mtvec->val; - cpu.stvec = stvec->val; -#ifdef CONFIG_RVV_010 - cpu.vtype = vtype->val; - cpu.vstart = vstart->val; - cpu.vxsat = vxsat->val; - cpu.vxrm = vxrm->val; - cpu.vl = vl->val; -#endif // CONFIG_RVV_010 -} - -static void csr_writeback() { - mstatus->val = cpu.mstatus; - mcause ->val = cpu.mcause ; - mepc ->val = cpu.mepc ; - //sstatus->val = cpu.sstatus; // sstatus is a shadow of mstatus - scause ->val = cpu.scause ; - sepc ->val = cpu.sepc ; - - satp->val = cpu.satp; - mip->val = cpu.mip; - mie->val = cpu.mie; - mscratch->val = cpu.mscratch; - sscratch->val = cpu.sscratch; - mideleg->val = cpu.mideleg; - medeleg->val = cpu.medeleg; - mtval->val = cpu.mtval; - stval->val = cpu.stval; - mtvec->val = cpu.mtvec; - stvec->val = cpu.stvec; -#ifdef CONFIG_RVV_010 - vtype->val = cpu.vtype; - vstart->val = cpu.vstart; - vxsat->val = cpu.vxsat; - vxrm->val = cpu.vxrm; - vl->val = cpu.vl; -#endif //CONFIG_RVV_010 -} - -void isa_difftest_regcpy(void *dut, bool direction) { - if (direction == DIFFTEST_TO_REF) { - memcpy(&cpu, dut, DIFFTEST_REG_SIZE); - csr_writeback(); - } else { - csr_prepare(); - memcpy(dut, &cpu, DIFFTEST_REG_SIZE); - } -} - -void isa_difftest_csrcpy(void *dut, bool direction) { - if (direction == DIFFTEST_TO_REF) { - memcpy(csr_array, dut, 4096 * sizeof(rtlreg_t)); - } else { - memcpy(dut, csr_array, 4096 * sizeof(rtlreg_t)); - } -} - -void isa_difftest_uarchstatus_cpy(void *dut, bool direction) { - if (direction == DIFFTEST_TO_REF) { - struct SyncState* ms = (struct SyncState*)dut; - cpu.lr_valid = ms->lrscValid; - cpu.lr_addr = ms->lrscAddr; - } else { - struct SyncState ms; - ms.lrscValid = cpu.lr_valid; - ms.lrscAddr = cpu.lr_addr; - memcpy(dut, &ms, sizeof(struct SyncState)); - } -} - -void isa_difftest_raise_intr(word_t NO) { - cpu.pc = raise_intr(NO, cpu.pc); -} - -#ifdef CONFIG_GUIDED_EXEC -void isa_difftest_guided_exec(void * guide) { - memcpy(&cpu.execution_guide, guide, sizeof(struct ExecutionGuide)); - - cpu.guided_exec = true; - cpu_exec(1); - cpu.guided_exec = false; -} -#endif \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/include/isa-all-instr.h b/libraries/NEMU/src/isa/riscv64/include/isa-all-instr.h deleted file mode 100644 index afb32a4..0000000 --- a/libraries/NEMU/src/isa/riscv64/include/isa-all-instr.h +++ /dev/null @@ -1,118 +0,0 @@ -#ifndef __RISCV64_ISA_ALL_INSTR_H__ -#define __RISCV64_ISA_ALL_INSTR_H__ -#include -#include "../local-include/rtl.h" - -#ifdef CONFIG_DEBUG -#define AMO_INSTR_BINARY(f) \ - f(lr_w) f(lr_d) -#define AMO_INSTR_TERNARY(f) \ - f(sc_w) f(sc_d) \ - f(amoadd_w) f(amoswap_w) f(amoxor_w) f(amoor_w) f(amoand_w) \ - f(amomin_w) f(amomax_w) f(amominu_w) f(amomaxu_w) \ - f(amoadd_d) f(amoswap_d) f(amoxor_d) f(amoor_d) f(amoand_d) \ - f(amomin_d) f(amomax_d) f(amominu_d) f(amomaxu_d) -#define SYS_INSTR_NULLARY(f) \ - f(ecall) f(mret) f(sret) f(sfence_vma) f(wfi) -#define SYS_INSTR_TERNARY(f) \ - f(csrrw) f(csrrs) f(csrrc) f(csrrwi) f(csrrsi) f(csrrci) -#else -#define AMO_INSTR_BINARY(f) -#define AMO_INSTR_TERNARY(f) f(atomic) -#define SYS_INSTR_NULLARY(f) -#define SYS_INSTR_TERNARY(f) f(system) -#endif - -#ifdef CONFIG_RVV_010 -#define VECTOR_INSTR_TERNARY(f) \ - f(vadd) f(vsub) f(vrsub) f(vminu) f(vmin) \ - f(vmaxu) f(vmax) f(vand) f(vor) f(vxor) \ - f(vrgather) \ - f(vadc) f(vmadc) f(vsbc) f(vmsbc) \ - f(vmerge) f(vmseq) f(vmsne) f(vmsltu) \ - f(vmslt) f(vmsleu) f(vmsle) f(vmsgtu) \ - f(vmsgt) f(vsaddu) f(vsadd) f(vssubu) \ - f(vssub) f(vaadd) f(vsll) f(vasub) \ - f(vsmul) f(vsrl) f(vsra) \ - f(vssra) f(vnsrl) f(vnsra) f(vnclipu) \ - f(vnclip) f(vssrl) f(vwredsumu) f(vwredsum) \ - f(vdotu) f(vdot) f(vwsmaccu) f(vwsmacc) \ - f(vwsmaccsu) f(vwsmaccus) f(vredsum) \ - f(vredand) f(vredor) f(vredxor) f(vredminu) \ - f(vredmin) f(vredmaxu) f(vredmax) f(vmpopc) \ - f(vmfirst) f(vmunaryo) f(vcompress) f(vmandnot) \ - f(vmand) f(vmor) f(vmxor) f(vmornot) f(vmnand) \ - f(vmnor) f(vmxnor) f(vdivu) f(vdiv) f(vremu) \ - f(vrem) f(vmulhu) f(vmul) f(vmulhsu) f(vmulh) \ - f(vmadd) f(vnmsub) f(vmacc) f(vnmsac) f(vwaddu) \ - f(vwadd) f(vwsub) f(vwsubu) f(vwaddu_w) f(vwadd_w) \ - f(vwsubu_w) f(vwsub_w) f(vwmulu) f(vwmulsu) \ - f(vwmul) f(vwmaccu) f(vwnmacc) f(vwmaccsu) \ - f(vwmaccus) f(vlduu) f(vldsu) f(vldxu) \ - f(vldus) f(vldss) f(vldxs) f(vstu) \ - f(vsts) f(vstx) f(vstxu) f(vsetvl) \ - f(vlduu_mmu) f(vldsu_mmu) f(vldxu_mmu) \ - f(vldus_mmu) f(vldss_mmu) f(vldxs_mmu) f(vstu_mmu) \ - f(vsts_mmu) f(vstx_mmu) f(vstxu_mmu) f(vslideup) f(vslidedown) -#else // CONFIG_RVV_010 -#define VECTOR_INSTR_TERNARY(f) -#endif // CONFIG_RVV_010 - -// - -#define FLOAT_INSTR_TERNARY(f) \ - f(fadds) f(fsubs) f(fmuls) f(fdivs) f(fmins) f(fmaxs) \ - f(faddd) f(fsubd) f(fmuld) f(fdivd) f(fmind) f(fmaxd) \ - f(fmadds) f(fmsubs) f(fnmsubs) f(fnmadds) f(fmaddd) f(fmsubd) f(fnmsubd) f(fnmaddd) - -#define INSTR_NULLARY(f) \ - f(inv) f(rt_inv) f(nemu_trap) \ - f(fence_i) f(fence) \ - SYS_INSTR_NULLARY(f) \ - f(p_ret) - -#define INSTR_UNARY(f) \ - f(p_li_0) f(p_li_1) - -#define INSTR_BINARY(f) \ - f(lui) f(auipc) f(jal) \ - f(ld) f(lw) f(lh) f(lb) f(lwu) f(lhu) f(lbu) f(sd) f(sw) f(sh) f(sb) \ - f(c_j) f(p_jal) f(c_jr) f(c_jalr) \ - f(c_beqz) f(c_bnez) f(c_mv) f(p_sext_w) \ - AMO_INSTR_BINARY(f) \ - f(ld_mmu) f(lw_mmu) f(lh_mmu) f(lb_mmu) f(lwu_mmu) f(lhu_mmu) f(lbu_mmu) \ - f(sd_mmu) f(sw_mmu) f(sh_mmu) f(sb_mmu) \ - f(flw) f(fsw) f(flw_mmu) f(fsw_mmu) \ - f(fsqrts) f(fles) f(flts) f(feqs) \ - f(fcvt_s_w) f(fcvt_s_wu) f(fcvt_s_l) f(fcvt_s_lu) \ - f(fcvt_w_s) f(fcvt_wu_s) f(fcvt_l_s) f(fcvt_lu_s) \ - f(fsgnjs) f(fsgnjns) f(fsgnjxs) \ - f(fmv_x_w) f(fmv_w_x) f(fclasss) f(fclassd)\ - f(fld) f(fsd) f(fld_mmu) f(fsd_mmu) \ - f(fsqrtd) f(fled) f(fltd) f(feqd) \ - f(fcvt_d_w) f(fcvt_d_wu) f(fcvt_d_l) f(fcvt_d_lu) \ - f(fcvt_w_d) f(fcvt_wu_d) f(fcvt_l_d) f(fcvt_lu_d) \ - f(fsgnjd) f(fsgnjnd) f(fsgnjxd) \ - f(fmv_x_d) f(fmv_d_x) \ - f(fcvt_d_s) f(fcvt_s_d) - -#define INSTR_TERNARY(f) \ - f(add) f(sll) f(srl) f(slt) f(sltu) f(xor) f(or) f(sub) f(sra) f(and) \ - f(addi) f(slli) f(srli) f(slti) f(sltui) f(xori) f(ori) f(srai) f(andi) \ - f(addw) f(sllw) f(srlw) f(subw) f(sraw) \ - f(addiw) f(slliw) f(srliw) f(sraiw) \ - f(jalr) f(beq) f(bne) f(blt) f(bge) f(bltu) f(bgeu) \ - f(mul) f(mulh) f(mulhu) f(mulhsu) f(div) f(divu) f(rem) f(remu) \ - f(mulw) f(divw) f(divuw) f(remw) f(remuw) \ - f(c_li) f(c_addi) f(c_slli) f(c_srli) f(c_srai) f(c_andi) f(c_addiw) \ - f(c_add) f(c_and) f(c_or) f(c_xor) f(c_sub) f(c_addw) f(c_subw) \ - f(p_blez) f(p_bgez) f(p_bltz) f(p_bgtz) \ - f(p_inc) f(p_dec) \ - AMO_INSTR_TERNARY(f) \ - SYS_INSTR_TERNARY(f) \ - FLOAT_INSTR_TERNARY(f) \ - VECTOR_INSTR_TERNARY(f) - -def_all_EXEC_ID(); - -#endif // __RISCV64_ISA_ALL_INSTR_H__ diff --git a/libraries/NEMU/src/isa/riscv64/include/isa-def.h b/libraries/NEMU/src/isa/riscv64/include/isa-def.h deleted file mode 100644 index e3792bf..0000000 --- a/libraries/NEMU/src/isa/riscv64/include/isa-def.h +++ /dev/null @@ -1,189 +0,0 @@ -#ifndef __ISA_RISCV64_H__ -#define __ISA_RISCV64_H__ - -#include -#ifdef CONFIG_RVV_010 -#include "../instr/rvv/vreg.h" -#endif // CONFIG_RVV_010 - -#define FORCE_RAISE_PF -// #define XIANGSHAN_DEBUG - -// Execution Guide generated by DUT -struct ExecutionGuide { - uint64_t exceptionNo; - uint64_t mtval; - uint64_t stval; -}; - -typedef struct { - union { - uint64_t _64; - } gpr[32]; - - union { - uint64_t _64; - } fpr[32]; - - // shadow CSRs for difftest - uint64_t pc; - uint64_t mstatus, mcause, mepc; - uint64_t sstatus, scause, sepc; - - uint64_t satp, mip, mie, mscratch, sscratch, mideleg, medeleg; -#ifdef CONFIG_RVV_010 - //vector - union { - uint64_t _64[VENUM64]; - uint32_t _32[VENUM32]; - uint16_t _16[VENUM16]; - uint8_t _8[VENUM8]; - } vr[32]; - - uint64_t vstart; - uint64_t vxsat, vxrm, vl, vtype; -#endif // CONFIG_RVV_010 - - uint64_t mtval, stval, mtvec, stvec; - uint64_t mode; - - // exec state - bool amo; - int mem_exception; - - // for LR/SC - uint64_t lr_addr; - uint64_t lr_valid; - - bool INTR; - - // Guided exec - bool guided_exec; - struct ExecutionGuide execution_guide; -} riscv64_CPU_state; - -// decode -typedef struct { - union { - struct { - uint32_t opcode1_0 : 2; - uint32_t opcode6_2 : 5; - uint32_t rd : 5; - uint32_t funct3 : 3; - uint32_t rs1 : 5; - uint32_t rs2 : 5; - uint32_t funct7 : 7; - } r; - struct { - uint32_t opcode1_0 : 2; - uint32_t opcode6_2 : 5; - uint32_t rd : 5; - uint32_t funct3 : 3; - uint32_t rs1 : 5; - int32_t simm11_0 :12; - } i; - struct { - uint32_t opcode1_0 : 2; - uint32_t opcode6_2 : 5; - uint32_t imm4_0 : 5; - uint32_t funct3 : 3; - uint32_t rs1 : 5; - uint32_t rs2 : 5; - int32_t simm11_5 : 7; - } s; - struct { - uint32_t opcode1_0 : 2; - uint32_t opcode6_2 : 5; - uint32_t imm11 : 1; - uint32_t imm4_1 : 4; - uint32_t funct3 : 3; - uint32_t rs1 : 5; - uint32_t rs2 : 5; - uint32_t imm10_5 : 6; - int32_t simm12 : 1; - } b; - struct { - uint32_t opcode1_0 : 2; - uint32_t opcode6_2 : 5; - uint32_t rd : 5; - int32_t simm31_12 :20; - } u; - struct { - uint32_t opcode1_0 : 2; - uint32_t opcode6_2 : 5; - uint32_t rd : 5; - uint32_t imm19_12 : 8; - uint32_t imm11 : 1; - uint32_t imm10_1 :10; - int32_t simm20 : 1; - } j; - struct { - uint32_t pad7 :20; - uint32_t csr :12; - } csr; - struct { - uint32_t opcode1_0 : 2; - uint32_t opcode6_2 : 5; - uint32_t rd : 5; - uint32_t rm : 3; - uint32_t rs1 : 5; - uint32_t rs2 : 5; - uint32_t fmt : 2; - uint32_t funct5 : 5; - } fp; - #ifdef CONFIG_RVV_010 - //vector-OP-V - struct { - uint32_t pad16 : 7; - uint32_t v_vd : 5; - uint32_t pad17 : 3; - uint32_t v_vs1 : 5; - uint32_t v_vs2 : 5; - uint32_t v_vm : 1; - uint32_t v_funct6 : 6; - } v_opv1; - struct { - uint32_t pad18 :15; - int32_t v_simm5 : 5; - uint32_t v_zimm :11; - uint32_t v_bigbit : 1; - } v_opv2; - struct { - uint32_t pad19 :15; - uint32_t v_imm5 : 5; - } v_opv3; - //vector-LOAD-FP - struct { - uint32_t pad20 :12; - uint32_t v_width : 3; - uint32_t pad21 : 5; - uint32_t v_lumop : 5; - uint32_t pad22 : 1; - uint32_t v_mop : 3; - uint32_t v_nf : 3; - } vldfp; - //vector-STORE-FP - struct { - uint32_t pad23 : 7; - uint32_t v_vs3 : 5; - uint32_t pad24 : 8; - uint32_t v_sumop : 5; - } vstfp; - //vector-AMO - struct { - uint32_t pad25 :26; - uint32_t v_wd : 1; - uint32_t v_amoop : 5; - } vamo; - #endif // CONFIG_RVV_010 - - uint32_t val; - } instr; -} riscv64_ISADecodeInfo; - -enum { MODE_U = 0, MODE_S, MODE_H, MODE_M }; - -int get_data_mmu_state(); -#define isa_mmu_state() get_data_mmu_state() - -#endif diff --git a/libraries/NEMU/src/isa/riscv64/include/isa-exec.h b/libraries/NEMU/src/isa/riscv64/include/isa-exec.h deleted file mode 100644 index cb9593a..0000000 --- a/libraries/NEMU/src/isa/riscv64/include/isa-exec.h +++ /dev/null @@ -1,12 +0,0 @@ -#include "../instr/pseudo.h" -#include "../instr/rvi/exec.h" -#include "../instr/rvc/exec.h" -#include "../instr/rvm/exec.h" -#include "../instr/rvf/exec.h" -#include "../instr/rvd/exec.h" -#include "../instr/rva/exec.h" -#include "../instr/priv/exec.h" -#ifdef CONFIG_RVV_010 -#include "../instr/rvv/exec.h" -#endif -#include "../instr/special.h" diff --git a/libraries/NEMU/src/isa/riscv64/init.c b/libraries/NEMU/src/isa/riscv64/init.c deleted file mode 100644 index 5d9b80b..0000000 --- a/libraries/NEMU/src/isa/riscv64/init.c +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include -#include "local-include/csr.h" - -static const uint32_t img [] = { - 0x800002b7, // lui t0,0x80000 - 0x0002a023, // sw zero,0(t0) - 0x0002a503, // lw a0,0(t0) - 0x0000006b, // nemu_trap -}; - -void init_csr(); -#ifndef CONFIG_SHARE -void init_clint(); -#endif - -void init_isa() { - init_csr(); - - cpu.gpr[0]._64 = 0; - cpu.pc = RESET_VECTOR; - - cpu.mode = MODE_M; - mstatus->val = 0; - -#define ext(e) (1 << ((e) - 'a')) - misa->extensions = ext('i') | ext('m') | ext('a') | ext('c') | ext('s') | ext('u'); - misa->extensions |= ext('d') | ext('f'); - misa->mxl = 2; // XLEN = 64 - - #ifdef CONFIG_RVV_010 - // vecotr - vl->val = 0; - vtype->val = 0; // actually should be 1 << 63 (set vill bit to forbidd) - #endif // CONFIG_RVV_010 - - memcpy(guest_to_host(RESET_VECTOR), img, sizeof(img)); - - IFNDEF(CONFIG_SHARE, init_clint()); -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/decode.c b/libraries/NEMU/src/isa/riscv64/instr/decode.c deleted file mode 100644 index 07ce249..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/decode.c +++ /dev/null @@ -1,107 +0,0 @@ -#include "../local-include/rtl.h" -#include -#include -#include - - -def_all_THelper(); - -__attribute__((always_inline)) -static inline uint32_t get_instr(Decode *s) { - return s->isa.instr.val; -} - -// decode operand helper -#define def_DopHelper(name) \ - void concat(decode_op_, name) (Decode *s, Operand *op, word_t val, bool flag) - -#include "rvi/decode.h" -#include "rvf/decode.h" -#include "rvm/decode.h" -#include "rva/decode.h" -#include "rvc/decode.h" -#include "rvd/decode.h" -#include "priv/decode.h" -#ifdef CONFIG_RVV_010 - #include "rvv/decode.h" -#endif // CONFIG_RVV_010 - -def_THelper(main) { - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 00000 ??", I , load); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 00001 ??", fload , fload); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 00011 ??", I , mem_fence); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 00100 ??", I , op_imm); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 00101 ??", auipc , auipc); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 00110 ??", I , op_imm32); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 01000 ??", S , store); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 01001 ??", fstore, fstore); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 01011 ??", R , atomic); - def_INSTR_IDTAB("0000001 ????? ????? ??? ????? 01100 ??", R , rvm); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 01100 ??", R , op); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 01101 ??", U , lui); - def_INSTR_IDTAB("0000001 ????? ????? ??? ????? 01110 ??", R , rvm32); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 01110 ??", R , op32); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 10000 ??", R4 , fmadd_dispatch); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 10001 ??", R4 , fmadd_dispatch); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 10010 ??", R4 , fmadd_dispatch); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 10011 ??", R4 , fmadd_dispatch); - def_INSTR_TAB ("??????? ????? ????? ??? ????? 10100 ??", op_fp); -#ifdef CONFIG_RVV_010 - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 10101 ??", OP_V , OP_V); -#endif // CONFIG_RVV_010 - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 11000 ??", B , branch); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 11001 ??", I , jalr_dispatch); - def_INSTR_TAB ("??????? ????? ????? ??? ????? 11010 ??", nemu_trap); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 11011 ??", J , jal_dispatch); - def_INSTR_IDTAB("??????? ????? ????? ??? ????? 11100 ??", csr , system); - return table_inv(s); -}; - -int isa_fetch_decode(Decode *s) { - int idx = EXEC_ID_inv; - - s->isa.instr.val = instr_fetch(&s->snpc, 2); - if (s->isa.instr.r.opcode1_0 != 0x3) { - // this is an RVC instruction - idx = table_rvc(s); - } else { - // this is a 4-byte instruction, should fetch the MSB part - // NOTE: The fetch here may cause IPF. - // If it is the case, we should have mepc = xxxffe and mtval = yyy000. - // Refer to `mtval` in the privileged manual for more details. - uint32_t hi = instr_fetch(&s->snpc, 2); - s->isa.instr.val |= (hi << 16); - idx = table_main(s); - } - - s->type = INSTR_TYPE_N; - switch (idx) { - case EXEC_ID_c_j: case EXEC_ID_p_jal: case EXEC_ID_jal: - s->jnpc = id_src1->imm; s->type = INSTR_TYPE_J; break; - - case EXEC_ID_beq: case EXEC_ID_bne: case EXEC_ID_blt: case EXEC_ID_bge: - case EXEC_ID_bltu: case EXEC_ID_bgeu: - case EXEC_ID_c_beqz: case EXEC_ID_c_bnez: - case EXEC_ID_p_bltz: case EXEC_ID_p_bgez: case EXEC_ID_p_blez: case EXEC_ID_p_bgtz: - s->jnpc = id_dest->imm; s->type = INSTR_TYPE_B; break; - - case EXEC_ID_p_ret: case EXEC_ID_c_jr: case EXEC_ID_c_jalr: case EXEC_ID_jalr: - IFDEF(CONFIG_DEBUG, case EXEC_ID_mret: case EXEC_ID_sret: case EXEC_ID_ecall:) - s->type = INSTR_TYPE_I; break; - -#ifndef CONFIG_DEBUG - case EXEC_ID_system: - if (s->isa.instr.i.funct3 == 0) { - switch (s->isa.instr.csr.csr) { - case 0: // ecall - case 0x102: // sret - case 0x302: // mret - s->type = INSTR_TYPE_I; - } - } - break; -#endif - } - - return idx; -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/fp.c b/libraries/NEMU/src/isa/riscv64/instr/fp.c deleted file mode 100644 index 1c1e917..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/fp.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "../local-include/csr.h" -#include "../local-include/intr.h" -#include -#include - -static uint32_t nemu_rm_cache = 0; -void fp_update_rm_cache(uint32_t rm) { - switch (rm) { - case 0: nemu_rm_cache = FPCALL_RM_RNE; return; - case 1: nemu_rm_cache = FPCALL_RM_RTZ; return; - case 2: nemu_rm_cache = FPCALL_RM_RDN; return; - case 3: nemu_rm_cache = FPCALL_RM_RUP; return; - case 4: nemu_rm_cache = FPCALL_RM_RMM; return; - default: assert(0); - } -} - -bool fp_enable() { - return MUXDEF(CONFIG_MODE_USER, true, mstatus->fs != 0); -} - -void fp_set_dirty() { - // lazily update mstatus->sd when reading mstatus - mstatus->fs = 3; -} - -uint32_t isa_fp_get_rm(Decode *s) { - uint32_t rm = s->isa.instr.fp.rm; - if (likely(rm == 7)) { return nemu_rm_cache; } - switch (rm) { - case 0: return FPCALL_RM_RNE; - case 1: return FPCALL_RM_RTZ; - case 2: return FPCALL_RM_RDN; - case 3: return FPCALL_RM_RUP; - case 4: return FPCALL_RM_RMM; - default: save_globals(s); longjmp_exception(EX_II); - } -} - -void isa_fp_set_ex(uint32_t ex) { - uint32_t f = 0; - if (ex & FPCALL_EX_NX) f |= 0x01; - if (ex & FPCALL_EX_UF) f |= 0x02; - if (ex & FPCALL_EX_OF) f |= 0x04; - if (ex & FPCALL_EX_DZ) f |= 0x08; - if (ex & FPCALL_EX_NV) f |= 0x10; - fcsr->fflags.val = fcsr->fflags.val | f; - fp_set_dirty(); -} - -void isa_fp_csr_check() { - if(unlikely(mstatus->fs == 0)){ - longjmp_exception(EX_II); - assert(0); - } -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/priv/decode.h b/libraries/NEMU/src/isa/riscv64/instr/priv/decode.h deleted file mode 100644 index 0f42b8b..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/priv/decode.h +++ /dev/null @@ -1,22 +0,0 @@ -static inline def_DHelper(csr) { - decode_op_r(s, id_src1, s->isa.instr.i.rs1, true); - decode_op_i(s, id_src2, s->isa.instr.csr.csr, true); - decode_op_r(s, id_dest, s->isa.instr.i.rd, false); -} - -#ifdef CONFIG_DEBUG -def_THelper(system) { - def_INSTR_TAB("000000000000 ????? 000 ????? ????? ??", ecall); - def_INSTR_TAB("000100000010 ????? 000 ????? ????? ??", sret); - def_INSTR_TAB("000100000101 ????? 000 ????? ????? ??", wfi); - def_INSTR_TAB("000100100000 ????? 000 ????? ????? ??", sfence_vma); - def_INSTR_TAB("001100000010 ????? 000 ????? ????? ??", mret); - def_INSTR_TAB("???????????? ????? 001 ????? ????? ??", csrrw); - def_INSTR_TAB("???????????? ????? 010 ????? ????? ??", csrrs); - def_INSTR_TAB("???????????? ????? 011 ????? ????? ??", csrrc); - def_INSTR_TAB("???????????? ????? 101 ????? ????? ??", csrrwi); - def_INSTR_TAB("???????????? ????? 110 ????? ????? ??", csrrsi); - def_INSTR_TAB("???????????? ????? 111 ????? ????? ??", csrrci); - return EXEC_ID_inv; -}; -#endif diff --git a/libraries/NEMU/src/isa/riscv64/instr/priv/exec.h b/libraries/NEMU/src/isa/riscv64/instr/priv/exec.h deleted file mode 100644 index 36ecfd0..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/priv/exec.h +++ /dev/null @@ -1,17 +0,0 @@ -#define def_SYS_EHelper(name) \ -def_EHelper(name) { \ - extern int rtl_sys_slow_path(Decode *s, rtlreg_t *dest, const rtlreg_t *src1, uint32_t id, rtlreg_t *jpc); \ - int jmp = rtl_sys_slow_path(s, ddest, dsrc1, id_src2->imm, s0); \ - if (jmp) rtl_priv_jr(s, s0); \ - else rtl_priv_next(s); \ -} - -#ifdef CONFIG_DEBUG -#define SYS_INSTR_LIST(f) \ - f(csrrw) f(csrrs) f(csrrc) f(csrrwi) f(csrrsi) f(csrrci) \ - f(ecall) f(mret) f(sret) f(sfence_vma) f(wfi) \ - -MAP(SYS_INSTR_LIST, def_SYS_EHelper) -#else -def_SYS_EHelper(system) -#endif diff --git a/libraries/NEMU/src/isa/riscv64/instr/priv/system.c b/libraries/NEMU/src/isa/riscv64/instr/priv/system.c deleted file mode 100644 index d0771eb..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/priv/system.c +++ /dev/null @@ -1,36 +0,0 @@ -#include -#include -#include - -__attribute__((cold)) -int rtl_sys_slow_path(Decode *s, rtlreg_t *dest, const rtlreg_t *src1, uint32_t id, rtlreg_t *jpc) { - uint32_t funct3 = s->isa.instr.i.funct3; - if (funct3 == 0) { - // priv - IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); - if (id == 0) { // ecall - rtl_trap(s, s->pc, 8 + cpu.mode); - rtl_mv(s, jpc, t0); - } else { - rtl_hostcall(s, HOSTCALL_PRIV, jpc, src1, NULL, id); - } - int is_jmp = (id != 0x120) && (id != 0x105); // sfence.vma and wfi - return is_jmp; - } - - save_globals(s); - IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 3)); - - rtl_hostcall(s, HOSTCALL_CSR, s0, NULL, NULL, id); - int imm = funct3 & 0x4; - int op = funct3 & 0x3; - if (imm) rtl_li(s, s1, s->isa.instr.i.rs1); - else rtl_mv(s, s1, src1); - switch (op) { - case 2: rtl_or(s, s1, s0, s1); break; - case 3: rtl_not(s, s1, s1); rtl_and(s, s1, s0, s1); break; - } - rtl_hostcall(s, HOSTCALL_CSR, NULL, s1, NULL, id); - rtl_mv(s, dest, s0); - return 0; -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/pseudo.h b/libraries/NEMU/src/isa/riscv64/instr/pseudo.h deleted file mode 100644 index 9f9f3de..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/pseudo.h +++ /dev/null @@ -1,73 +0,0 @@ -// standard pseudo instructions -// See Chapter 25 "RISC-V Assembly Programmer's Handbook" in the RISC-V ISA manual -// -// The following pseudo instructions are excluded -// (1) seem not frequently present during execution -// nop not neg negw -// seqz snez sltz sgtz -// [[all CSR instructions]] -// (2) only expansion without optimization -// la -// l{b|h|w|d} symbol -// s{b|h|w|d} symbol -// bgt ble bgtu bleu -// call tail -// fence -// (3) still not considered -// fmv.s fabs.s fneg.s -// fmv.d fabs.d fneg.d -// fl{w|d} symbol -// fs{w|d} symbol -// (4) already provided in RVC -// j jal(ra) jalr(rs) -// beqz bnez -// li mv - -def_EHelper(p_sext_w) { - rtl_addiw(s, ddest, dsrc1, 0); -} - -def_EHelper(p_blez) { - rtl_jrelop(s, RELOP_GE, rz, dsrc2, id_dest->imm); -} - -def_EHelper(p_bgtz) { - rtl_jrelop(s, RELOP_LT, rz, dsrc2, id_dest->imm); -} - -def_EHelper(p_bltz) { - rtl_jrelop(s, RELOP_LT, dsrc1, rz, id_dest->imm); -} - -def_EHelper(p_bgez) { - rtl_jrelop(s, RELOP_GE, dsrc1, rz, id_dest->imm); -} - -def_EHelper(p_jal) { - rtl_li(s, &cpu.gpr[1]._64, id_src2->imm); - rtl_j(s, id_src1->imm); -} - -def_EHelper(p_ret) { -// IFDEF(CONFIG_ENGINE_INTERPRETER, rtl_andi(s, s0, s0, ~0x1u)); - IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); - rtl_jr(s, &cpu.gpr[1]._64); -} - -// non-standard pseudo instructions - -def_EHelper(p_li_0) { - rtl_li(s, ddest, 0); -} - -def_EHelper(p_li_1) { - rtl_li(s, ddest, 1); -} - -def_EHelper(p_inc) { - rtl_addi(s, ddest, ddest, 1); -} - -def_EHelper(p_dec) { - rtl_subi(s, ddest, ddest, 1); -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rocc.h b/libraries/NEMU/src/isa/riscv64/instr/rocc.h deleted file mode 100644 index 50deac4..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rocc.h +++ /dev/null @@ -1,6 +0,0 @@ -rtlreg_t rocc_sdi(uint32_t funct7, uint32_t funct3, rtlreg_t rs1, rtlreg_t rs2); - -static inline def_EHelper(rocc3) { - *ddest = rocc_sdi(s->isa.instr.r.funct7, s->isa.instr.r.funct3, *dsrc1, *dsrc2); - print_asm_template3(rocc3); -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rva/amo.c b/libraries/NEMU/src/isa/riscv64/instr/rva/amo.c deleted file mode 100644 index 32a67fa..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rva/amo.c +++ /dev/null @@ -1,57 +0,0 @@ -#include -#include "../local-include/intr.h" - -__attribute__((cold)) -def_rtl(amo_slow_path, rtlreg_t *dest, const rtlreg_t *src1, const rtlreg_t *src2) { - uint32_t funct5 = s->isa.instr.r.funct7 >> 2; - int width = s->isa.instr.r.funct3 & 1 ? 8 : 4; - - if (funct5 == 0b00010) { // lr - rtl_lms(s, dest, src1, 0, width, MMU_DYNAMIC); - cpu.lr_addr = *src1; - cpu.lr_valid = 1; - return; - } else if (funct5 == 0b00011) { // sc -#ifdef CONFIG_DIFFTEST_STORE_COMMIT - // cpu.amu for sc instructions is set to true when store difftest is enabled. - // Atomic instructions don't commit through store queue and need to be skipped. - // Store difftest uses cpu.amo to skip atomic store instructions. - cpu.amo = true; -#endif - // should check overlapping instead of equality - int success = cpu.lr_addr == *src1 && cpu.lr_valid; - if (success) { - rtl_sm(s, src2, src1, 0, width, MMU_DYNAMIC); - cpu.lr_valid = 0; - } else { - // Even if scInvalid, SPF (if raised) also needs to be reported - if(isa_mmu_check(*dsrc1, width, MEM_TYPE_WRITE) == MMU_TRANSLATE) { - isa_mmu_translate(*dsrc1, width, MEM_TYPE_WRITE); - } - return_on_mem_ex(); - } - rtl_li(s, dest, !success); -#ifdef CONFIG_DIFFTEST_STORE_COMMIT - cpu.amo = false; -#endif - return; - } - - cpu.amo = true; - rtl_lms(s, s0, src1, 0, width, MMU_DYNAMIC); - switch (funct5) { - case 0b00001: rtl_mv (s, s1, src2); break; - case 0b00000: rtl_add(s, s1, s0, src2); break; - case 0b01000: rtl_or (s, s1, s0, src2); break; - case 0b01100: rtl_and(s, s1, s0, src2); break; - case 0b00100: rtl_xor(s, s1, s0, src2); break; - case 0b11100: *s1 = (*s0 > *src2 ? *s0 : *src2); break; - case 0b10100: *s1 = ((sword_t)*s0 > (sword_t)*src2 ? *s0 : *src2); break; - case 0b11000: *s1 = (*s0 < *src2 ? *s0 : *src2); break; - case 0b10000: *s1 = ((sword_t)*s0 < (sword_t)*src2 ? *s0 : *src2); break; - default: assert(0); - } - rtl_sm(s, s1, src1, 0, width, MMU_DYNAMIC); - rtl_mv(s, dest, s0); - cpu.amo = false; -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rva/decode.h b/libraries/NEMU/src/isa/riscv64/instr/rva/decode.h deleted file mode 100644 index 04e4597..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rva/decode.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifdef CONFIG_DEBUG -def_THelper(atomic) { - def_INSTR_TAB("00010 ?? 00000 ????? 011 ????? ????? ??", lr_d); - def_INSTR_TAB("00011 ?? ????? ????? 011 ????? ????? ??", sc_d); - def_INSTR_TAB("00001 ?? ????? ????? 011 ????? ????? ??", amoswap_d); - def_INSTR_TAB("00000 ?? ????? ????? 011 ????? ????? ??", amoadd_d); - def_INSTR_TAB("00100 ?? ????? ????? 011 ????? ????? ??", amoxor_d); - def_INSTR_TAB("01100 ?? ????? ????? 011 ????? ????? ??", amoand_d); - def_INSTR_TAB("01000 ?? ????? ????? 011 ????? ????? ??", amoor_d); - def_INSTR_TAB("10000 ?? ????? ????? 011 ????? ????? ??", amomin_d); - def_INSTR_TAB("10100 ?? ????? ????? 011 ????? ????? ??", amomax_d); - def_INSTR_TAB("11000 ?? ????? ????? 011 ????? ????? ??", amominu_d); - def_INSTR_TAB("11100 ?? ????? ????? 011 ????? ????? ??", amomaxu_d); - - def_INSTR_TAB("00010 ?? 00000 ????? 010 ????? ????? ??", lr_w); - def_INSTR_TAB("00011 ?? ????? ????? 010 ????? ????? ??", sc_w); - def_INSTR_TAB("00001 ?? ????? ????? 010 ????? ????? ??", amoswap_w); - def_INSTR_TAB("00000 ?? ????? ????? 010 ????? ????? ??", amoadd_w); - def_INSTR_TAB("00100 ?? ????? ????? 010 ????? ????? ??", amoxor_w); - def_INSTR_TAB("01100 ?? ????? ????? 010 ????? ????? ??", amoand_w); - def_INSTR_TAB("01000 ?? ????? ????? 010 ????? ????? ??", amoor_w); - def_INSTR_TAB("10000 ?? ????? ????? 010 ????? ????? ??", amomin_w); - def_INSTR_TAB("10100 ?? ????? ????? 010 ????? ????? ??", amomax_w); - def_INSTR_TAB("11000 ?? ????? ????? 010 ????? ????? ??", amominu_w); - def_INSTR_TAB("11100 ?? ????? ????? 010 ????? ????? ??", amomaxu_w); - - return EXEC_ID_inv; -} -#endif diff --git a/libraries/NEMU/src/isa/riscv64/instr/rva/exec.h b/libraries/NEMU/src/isa/riscv64/instr/rva/exec.h deleted file mode 100644 index 90a72d0..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rva/exec.h +++ /dev/null @@ -1,25 +0,0 @@ -#define def_AMO_EHelper(name) \ -def_EHelper(name) { \ - extern void rtl_amo_slow_path(Decode *s, rtlreg_t *dest, const rtlreg_t *src1, const rtlreg_t *src2); \ - rtl_amo_slow_path(s, ddest, dsrc1, dsrc2); \ -} - -#ifdef CONFIG_DEBUG -#define AMO_LIST(f, s) \ - f(concat3(lr , _, s)) \ - f(concat3(sc , _, s)) \ - f(concat3(amoswap, _, s)) \ - f(concat3(amoadd , _, s)) \ - f(concat3(amoor , _, s)) \ - f(concat3(amoand , _, s)) \ - f(concat3(amoxor , _, s)) \ - f(concat3(amomaxu, _, s)) \ - f(concat3(amomax , _, s)) \ - f(concat3(amominu, _, s)) \ - f(concat3(amomin , _, s)) - -AMO_LIST(def_AMO_EHelper, d) -AMO_LIST(def_AMO_EHelper, w) -#else -def_AMO_EHelper(atomic) -#endif diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvc/decode.h b/libraries/NEMU/src/isa/riscv64/instr/rvc/decode.h deleted file mode 100644 index c8164bd..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvc/decode.h +++ /dev/null @@ -1,388 +0,0 @@ -#define creg2reg(creg) (creg + 8) - -// rotate without shift, e.g. ror(0bxxxxyy, 6, 2) = 0byyxxxx00 -static inline uint32_t ror_imm(uint32_t imm, int len, int r) { - if (r == 0) return imm; - uint32_t copy = imm | (imm << len); - uint32_t mask = BITMASK(len) << r; - uint32_t res = copy & mask; - return res; -} - -static inline void decode_op_C_imm6(Decode *s, uint32_t imm6, bool sign, int shift, int rotate) { - uint64_t imm = (sign ? SEXT(imm6, 6) << shift : ror_imm(imm6, 6, rotate)); - decode_op_i(s, id_src2, imm, false); -} - -static inline void decode_op_C_rd_rs1(Decode *s, bool creg) { - uint32_t instr = s->isa.instr.val; - uint32_t rd_rs1 = (creg ? creg2reg(BITS(instr, 9, 7)) : BITS(instr, 11, 7)); - decode_op_r(s, id_src1, rd_rs1, true); - decode_op_r(s, id_dest, rd_rs1, false); -} - -// creg = false for CI, true for CB_shift and CB_andi -static inline void decode_op_rd_rs1_imm6(Decode *s, bool sign, int shift, int rotate, bool creg) { - uint32_t instr = s->isa.instr.val; - uint32_t imm6 = (BITS(instr, 12, 12) << 5) | BITS(instr, 6, 2); - decode_op_C_imm6(s, imm6, sign, shift, rotate); - decode_op_C_rd_rs1(s, creg); -} - -#if 0 -// ---------- CR ---------- - -static inline def_DHelper(CR) { - decode_op_C_rd_rs1(s, false); - uint32_t rs2 = BITS(s->isa.instr.val, 6, 2); - decode_op_r(s, id_src2, rs2, true); -} -#endif - -// ---------- CI ---------- - -static inline def_DHelper(CI_simm) { - decode_op_rd_rs1_imm6(s, true, 0, 0, false); -} - -static inline def_DHelper(CI_simm_lui) { - decode_CI_simm(s, width); - // the immediate of LUI is placed at id_src1->imm - id_src1->imm = id_src2->imm << 12; -} - -// for shift -static inline def_DHelper(CI_uimm) { - decode_op_rd_rs1_imm6(s, false, 0, 0, false); -} - -static inline def_DHelper(C_LI) { - decode_CI_simm(s, width); - decode_op_r(s, id_src1, 0, true); -} - -static inline def_DHelper(C_ADDI16SP) { - decode_op_r(s, id_src1, 2, true); - uint32_t instr = s->isa.instr.val; - sword_t simm = (SEXT(BITS(instr, 12, 12), 1) << 9) | (BITS(instr, 4, 3) << 7) | - (BITS(instr, 5, 5) << 6) | (BITS(instr, 2, 2) << 5) | (BITS(instr, 6, 6) << 4); - assert(simm != 0); - decode_op_i(s, id_src2, simm, false); - decode_op_r(s, id_dest, 2, false); -} - -// SP-relative load/store -static inline void decode_C_xxSP(Decode *s, uint32_t imm6, int rotate) { - decode_op_r(s, id_src1, 2, true); - decode_op_C_imm6(s, imm6, false, 0, rotate); -} - -static inline void decode_C_LxSP(Decode *s, int rotate, bool is_fp) { - uint32_t imm6 = (BITS(s->isa.instr.val, 12, 12) << 5) | BITS(s->isa.instr.val, 6, 2); - decode_C_xxSP(s, imm6, rotate); - uint32_t rd = BITS(s->isa.instr.val, 11, 7); - if (is_fp) decode_op_fr(s, id_dest, rd, false); - else decode_op_r(s, id_dest, rd, false); -} - -static inline def_DHelper(C_LWSP) { - decode_C_LxSP(s, 2, false); -} - -static inline def_DHelper(C_LDSP) { - decode_C_LxSP(s, 3, false); -} - -static inline def_DHelper(C_FLDSP) { - decode_C_LxSP(s, 3, true); -} - -// ---------- CSS ---------- - -static inline void decode_C_SxSP(Decode *s, int rotate, bool is_fp) { - uint32_t imm6 = BITS(s->isa.instr.val, 12, 7); - decode_C_xxSP(s, imm6, rotate); - uint32_t rs2 = BITS(s->isa.instr.val, 6, 2); - if (is_fp) decode_op_fr(s, id_dest, rs2, true); - else decode_op_r(s, id_dest, rs2, true); -} - -static inline def_DHelper(C_SWSP) { - decode_C_SxSP(s, 2, false); -} - -static inline def_DHelper(C_SDSP) { - decode_C_SxSP(s, 3, false); -} - -static inline def_DHelper(C_FSDSP) { - decode_C_SxSP(s, 3, true); -} - -// ---------- CIW ---------- - -static inline def_DHelper(C_ADDI4SPN) { - decode_op_r(s, id_src1, 2, true); - uint32_t instr = s->isa.instr.val; - uint32_t imm9_6 = ror_imm(BITS(instr, 12, 7), 6, 4); // already at the right place - uint32_t imm = imm9_6 | BITS(instr, 5, 5) << 3 | BITS(instr, 6, 6) << 2; - Assert(imm != 0, "pc = " FMT_WORD, s->pc); - decode_op_i(s, id_src2, imm, false); - decode_op_r(s, id_dest, creg2reg(BITS(instr, 4, 2)), false); -} - -// ---------- CL ---------- - -// load/store -static inline void decode_C_ldst_common(Decode *s, int rotate, bool is_store, bool is_fp) { - uint32_t instr = s->isa.instr.val; - decode_op_r(s, id_src1, creg2reg(BITS(instr, 9, 7)), true); - uint32_t imm5 = (BITS(instr, 12, 10) << 2) | BITS(instr, 6, 5); - uint32_t imm = ror_imm(imm5, 5, rotate) << 1; - decode_op_i(s, id_src2, imm, false); - if (is_fp) decode_op_fr(s, id_dest, creg2reg(BITS(instr, 4, 2)), is_store); - else decode_op_r(s, id_dest, creg2reg(BITS(instr, 4, 2)), is_store); -} - -static inline def_DHelper(C_LW) { - decode_C_ldst_common(s, 1, false, false); -} - -static inline def_DHelper(C_LD) { - decode_C_ldst_common(s, 2, false, false); -} - -static inline def_DHelper(C_FLD) { - decode_C_ldst_common(s, 2, false, true); -} - -// ---------- CS ---------- - -static inline def_DHelper(C_SW) { - decode_C_ldst_common(s, 1, true, false); -} - -static inline def_DHelper(C_SD) { - decode_C_ldst_common(s, 2, true, false); -} - -static inline def_DHelper(C_FSD) { - decode_C_ldst_common(s, 2, true, true); -} - -static inline def_DHelper(CS) { - decode_op_C_rd_rs1(s, true); - uint32_t rs2 = creg2reg(BITS(s->isa.instr.val, 4, 2)); - decode_op_r(s, id_src2, rs2, true); -} - -// ---------- CB ---------- - -static inline def_DHelper(CB) { - uint32_t instr = s->isa.instr.val; - sword_t simm8 = SEXT(BITS(instr, 12, 12), 1); - uint32_t imm7_6 = BITS(instr, 6, 5); - uint32_t imm5 = BITS(instr, 2, 2); - uint32_t imm4_3 = BITS(instr, 11, 10); - uint32_t imm2_1 = BITS(instr, 4, 3); - sword_t offset = (simm8 << 8) | (imm7_6 << 6) | (imm5 << 5) | (imm4_3 << 3) | (imm2_1 << 1); - decode_op_i(s, id_dest, s->pc + offset, true); - decode_op_r(s, id_src1, creg2reg(BITS(instr, 9, 7)), true); - decode_op_r(s, id_src2, 0, true); -} - -static inline def_DHelper(CB_shift) { - decode_op_rd_rs1_imm6(s, false, 0, 0, true); -} - -static inline def_DHelper(CB_andi) { - decode_op_rd_rs1_imm6(s, true, 0, 0, true); -} - -// ---------- CJ ---------- - -static inline def_DHelper(CJ) { - uint32_t instr = s->isa.instr.val; - sword_t simm11 = SEXT(BITS(instr, 12, 12), 1); - uint32_t imm10 = BITS(instr, 8, 8); - uint32_t imm9_8 = BITS(instr, 10, 9); - uint32_t imm7 = BITS(instr, 6, 6); - uint32_t imm6 = BITS(instr, 7, 7); - uint32_t imm5 = BITS(instr, 2, 2); - uint32_t imm4 = BITS(instr, 11, 11); - uint32_t imm3_1 = BITS(instr, 5, 3); - - sword_t offset = (simm11 << 11) | (imm10 << 10) | (imm9_8 << 8) | - (imm7 << 7) | (imm6 << 6) | (imm5 << 5) | (imm4 << 4) | (imm3_1 << 1); - decode_op_i(s, id_src1, s->pc + offset, true); -} - -static inline void decode_C_rs1_rs2_rd(Decode *s, bool is_rs1_zero, bool is_rs2_zero, bool is_rd_zero) { - decode_op_r(s, id_src1, (is_rs1_zero ? 0 : BITS(s->isa.instr.val, 11, 7)), true); - decode_op_r(s, id_src2, (is_rs2_zero ? 0 : BITS(s->isa.instr.val, 6, 2)), true); - decode_op_r(s, id_dest, (is_rd_zero ? 0 : BITS(s->isa.instr.val, 11, 7)), false); -} - -static inline def_DHelper(C_JR) { - decode_op_r(s, id_src1, BITS(s->isa.instr.val, 11, 7), true); -} - -static inline def_DHelper(C_MOV) { - // we should put the source at src1 to call c_mv() - decode_op_r(s, id_src1, BITS(s->isa.instr.val, 6, 2), true); - decode_op_r(s, id_src2, 0, true); - decode_op_r(s, id_dest, BITS(s->isa.instr.val, 11, 7), false); -} - -static inline def_DHelper(C_ADD) { - decode_C_rs1_rs2_rd(s, false, false, false); -} - -static inline def_DHelper(C_JALR) { - decode_op_r(s, id_src1, BITS(s->isa.instr.val, 11, 7), true); - decode_op_i(s, id_src2, 0, true); - decode_op_r(s, id_dest, 1, false); -} - - -def_THelper(c_addi_dispatch) { - if (id_src2->imm == 1) return table_p_inc(s); - if (id_src2->imm == -1ul) return table_p_dec(s); - return table_c_addi(s); -} - -def_THelper(c_addiw_dispatch) { - return table_c_addiw(s); -} - -def_THelper(c_ldst) { - int mmu_mode = isa_mmu_state(); - if (mmu_mode == MMU_DIRECT) { - def_INSTR_TAB("010 ??? ??? ?? ??? ??", lw); - def_INSTR_TAB("011 ??? ??? ?? ??? ??", ld); - def_INSTR_TAB("110 ??? ??? ?? ??? ??", sw); - def_INSTR_TAB("111 ??? ??? ?? ??? ??", sd); - } else if (mmu_mode == MMU_TRANSLATE) { - def_INSTR_TAB("010 ??? ??? ?? ??? ??", lw_mmu); - def_INSTR_TAB("011 ??? ??? ?? ??? ??", ld_mmu); - def_INSTR_TAB("110 ??? ??? ?? ??? ??", sw_mmu); - def_INSTR_TAB("111 ??? ??? ?? ??? ??", sd_mmu); - } else assert(0); - return EXEC_ID_inv; -} - -def_THelper(c_fldst) { - int mmu_mode = isa_mmu_state(); - if (mmu_mode == MMU_DIRECT) { - def_INSTR_TAB("001 ??? ??? ?? ??? ??", fld); - def_INSTR_TAB("101 ??? ??? ?? ??? ??", fsd); - } else if (mmu_mode == MMU_TRANSLATE) { - def_INSTR_TAB("001 ??? ??? ?? ??? ??", fld_mmu); - def_INSTR_TAB("101 ??? ??? ?? ??? ??", fsd_mmu); - } else assert(0); - return EXEC_ID_inv; -} - -def_THelper(c_li_dispatch) { - def_INSTR_TAB("??? 0 ????? 00000 ??", p_li_0); - def_INSTR_TAB("??? 0 ????? 00001 ??", p_li_1); - def_INSTR_TAB("??? ? ????? ????? ??", c_li); - return EXEC_ID_inv; -} - -def_THelper(rvc_Q1_lui_addi16sp) { - def_INSTR_IDTAB("??? ? 00010 ????? ??", C_ADDI16SP , c_addi); - def_INSTR_IDTAB("??? ? ????? ????? ??", CI_simm_lui, lui); - return EXEC_ID_inv; -} - -def_THelper(rvc_Q1_compute_more64) { - def_INSTR_TAB("??? ? ????? 00??? ??", c_sub); - def_INSTR_TAB("??? ? ????? 01??? ??", c_xor); - def_INSTR_TAB("??? ? ????? 10??? ??", c_or); - def_INSTR_TAB("??? ? ????? 11??? ??", c_and); - return EXEC_ID_inv; -} - -def_THelper(rvc_Q1_compute_more32) { - def_INSTR_TAB("??? ? ????? 00??? ??", c_subw); - def_INSTR_TAB("??? ? ????? 01??? ??", c_addw); - return EXEC_ID_inv; -} - -def_THelper(rvc_Q1_compute_more) { - def_INSTR_TAB("??? 0 ????? ????? ??", rvc_Q1_compute_more64); - def_INSTR_TAB("??? 1 ????? ????? ??", rvc_Q1_compute_more32); - return EXEC_ID_inv; -} - -def_THelper(rvc_Q1_compute) { - def_INSTR_IDTAB("??? ? 00??? ????? ??", CB_shift, c_srli); - def_INSTR_IDTAB("??? ? 01??? ????? ??", CB_shift, c_srai); - def_INSTR_IDTAB("??? ? 10??? ????? ??", CB_andi , c_andi); - def_INSTR_IDTAB("??? ? 11??? ????? ??", CS , rvc_Q1_compute_more); - return EXEC_ID_inv; -} - -def_THelper(rvc_Q2_jr_mov) { - def_INSTR_IDTAB("??? ? 00001 00000 ??", C_JR , p_ret); - def_INSTR_IDTAB("??? ? ????? 00000 ??", C_JR , c_jr); - def_INSTR_IDTAB("??? ? ????? ????? ??", C_MOV , c_mv); - return EXEC_ID_inv; -} - -def_THelper(rvc_Q2_jalr_add) { - def_INSTR_TAB ("??? ? 00000 00000 ??", inv); // ebreak - def_INSTR_IDTAB("??? ? 00001 00000 ??", C_JALR , jalr); // c_jalr can not handle correctly when rs1 == ra - def_INSTR_IDTAB("??? ? ????? 00000 ??", C_JALR , c_jalr); - def_INSTR_IDTAB("??? ? ????? ????? ??", C_ADD , c_add); - return EXEC_ID_inv; -} - -def_THelper(rvc_Q2_misc) { - def_INSTR_TAB("??? 0 ????? ????? ??", rvc_Q2_jr_mov); - def_INSTR_TAB("??? 1 ????? ????? ??", rvc_Q2_jalr_add); - return EXEC_ID_inv; -} - -def_THelper(rvc_Q0) { - def_INSTR_IDTAB("000 ???????? ??? ??", C_ADDI4SPN, addi); - def_INSTR_IDTAB("001 ??? ??? ?? ??? ??", C_FLD, c_fldst); - def_INSTR_IDTAB("010 ??? ??? ?? ??? ??", C_LW , c_ldst); - def_INSTR_IDTAB("011 ??? ??? ?? ??? ??", C_LD , c_ldst); - def_INSTR_IDTAB("101 ??? ??? ?? ??? ??", C_FSD, c_fldst); - def_INSTR_IDTAB("110 ??? ??? ?? ??? ??", C_SW , c_ldst); - def_INSTR_IDTAB("111 ??? ??? ?? ??? ??", C_SD , c_ldst); - return EXEC_ID_inv; -} - -def_THelper(rvc_Q1) { - def_INSTR_IDTAB("000 ? ????? ????? ??", CI_simm, c_addi_dispatch); - def_INSTR_IDTAB("001 ? ????? ????? ??", CI_simm, c_addiw_dispatch); - def_INSTR_IDTAB("010 ? ????? ????? ??", C_LI , c_li_dispatch); - def_INSTR_TAB ("011 ? ????? ????? ??", rvc_Q1_lui_addi16sp); - def_INSTR_TAB ("100 ? ????? ????? ??", rvc_Q1_compute); - def_INSTR_IDTAB("101 ??????????? ??" , CJ , c_j); - def_INSTR_IDTAB("110 ??? ??? ????? ??", CB , c_beqz); - def_INSTR_IDTAB("111 ??? ??? ????? ??", CB , c_bnez); - return EXEC_ID_inv; -} - -def_THelper(rvc_Q2) { - def_INSTR_IDTAB("000 ? ????? ????? ??", CI_uimm, c_slli); - def_INSTR_IDTAB("001 ? ????? ????? ??", C_FLDSP, c_fldst); - def_INSTR_IDTAB("010 ? ????? ????? ??", C_LWSP , c_ldst); - def_INSTR_IDTAB("011 ? ????? ????? ??", C_LDSP , c_ldst); - def_INSTR_TAB ("100 ? ????? ????? ??", rvc_Q2_misc); - def_INSTR_IDTAB("101 ? ????? ????? ??", C_FSDSP, c_fldst); - def_INSTR_IDTAB("110 ? ????? ????? ??", C_SWSP , c_ldst); - def_INSTR_IDTAB("111 ? ????? ????? ??", C_SDSP , c_ldst); - return EXEC_ID_inv; -} - -def_THelper(rvc) { - def_INSTR_TAB("?????????????? 00", rvc_Q0); - def_INSTR_TAB("?????????????? 01", rvc_Q1); - def_INSTR_TAB("?????????????? 10", rvc_Q2); - return table_inv(s); -}; diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvc/exec.h b/libraries/NEMU/src/isa/riscv64/instr/rvc/exec.h deleted file mode 100644 index 697d0ea..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvc/exec.h +++ /dev/null @@ -1,102 +0,0 @@ -// The following RVC instructions are excluded -// (1) not present in RV64 -// C.LQSP C.SQSP -// C.LQ C.SQ -// C.JAL -// (2) seem not frequently present during execution -// C.LDSP C.LWSP C.SDSP C.SWSP -// C.ADDI4SPN -// (3) only expansion without optimization -// C.LD C.LW C.SD C.SW -// C.LUI -// (4) still not considered -// C.FLDSP C.FLWSP C.FSDSP C.FSWSP -// C.FLD C.FLW C.FSD C.FSW -// (5) redundant from the aspect of EHelper -// C.ADDI16SP (the same as C.ADDI) -// C.NOP (the same as C.ADDI) - -def_EHelper(c_j) { - rtl_j(s, id_src1->imm); -} - -def_EHelper(c_jr) { -// IFDEF(CONFIG_ENGINE_INTERPRETER, rtl_andi(s, s0, s0, ~0x1u)); - IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); - rtl_jr(s, dsrc1); -} - -def_EHelper(c_jalr) { -// IFDEF(CONFIG_ENGINE_INTERPRETER, rtl_andi(s, s0, s0, ~0x1lu)); - rtl_li(s, &cpu.gpr[1]._64, s->snpc); - IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); - rtl_jr(s, dsrc1); -} - -def_EHelper(c_beqz) { - rtl_jrelop(s, RELOP_EQ, dsrc1, rz, id_dest->imm); -} - -def_EHelper(c_bnez) { - rtl_jrelop(s, RELOP_NE, dsrc1, rz, id_dest->imm); -} - -def_EHelper(c_li) { - rtl_li(s, ddest, id_src2->imm); -} - -def_EHelper(c_addi) { - rtl_addi(s, ddest, ddest, id_src2->imm); -} - -def_EHelper(c_addiw) { - rtl_addiw(s, ddest, ddest, id_src2->imm); -} - -def_EHelper(c_slli) { - rtl_shli(s, ddest, ddest, id_src2->imm); -} - -def_EHelper(c_srli) { - rtl_shri(s, ddest, ddest, id_src2->imm); -} - -def_EHelper(c_srai) { - rtl_sari(s, ddest, ddest, id_src2->imm); -} - -def_EHelper(c_andi) { - rtl_andi(s, ddest, ddest, id_src2->imm); -} - -def_EHelper(c_mv) { - rtl_mv(s, ddest, dsrc1); -} - -def_EHelper(c_add) { - rtl_add(s, ddest, ddest, dsrc2); -} - -def_EHelper(c_and) { - rtl_and(s, ddest, ddest, dsrc2); -} - -def_EHelper(c_or) { - rtl_or(s, ddest, ddest, dsrc2); -} - -def_EHelper(c_xor) { - rtl_xor(s, ddest, ddest, dsrc2); -} - -def_EHelper(c_sub) { - rtl_sub(s, ddest, ddest, dsrc2); -} - -def_EHelper(c_addw) { - rtl_addw(s, ddest, ddest, dsrc2); -} - -def_EHelper(c_subw) { - rtl_subw(s, ddest, ddest, dsrc2); -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvd/decode.h b/libraries/NEMU/src/isa/riscv64/instr/rvd/decode.h deleted file mode 100644 index 6a0c999..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvd/decode.h +++ /dev/null @@ -1,41 +0,0 @@ -def_THelper(op_fp_d) { - // RV32D - def_INSTR_IDTAB("00000 ?? ????? ????? ??? ????? ????? ??", fr , faddd); - def_INSTR_IDTAB("00001 ?? ????? ????? ??? ????? ????? ??", fr , fsubd); - def_INSTR_IDTAB("00010 ?? ????? ????? ??? ????? ????? ??", fr , fmuld); - def_INSTR_IDTAB("00011 ?? ????? ????? ??? ????? ????? ??", fr , fdivd); - def_INSTR_IDTAB("01011 ?? 00000 ????? ??? ????? ????? ??", fr , fsqrtd); - def_INSTR_IDTAB("00100 ?? ????? ????? 000 ????? ????? ??", fr , fsgnjd); - def_INSTR_IDTAB("00100 ?? ????? ????? 001 ????? ????? ??", fr , fsgnjnd); - def_INSTR_IDTAB("00100 ?? ????? ????? 010 ????? ????? ??", fr , fsgnjxd); - def_INSTR_IDTAB("00101 ?? ????? ????? 000 ????? ????? ??", fr , fmind); - def_INSTR_IDTAB("00101 ?? ????? ????? 001 ????? ????? ??", fr , fmaxd); - def_INSTR_IDTAB("01000 00 00001 ????? ??? ????? ????? ??", fr , fcvt_s_d); - def_INSTR_IDTAB("01000 01 00000 ????? ??? ????? ????? ??", fr , fcvt_d_s); - def_INSTR_IDTAB("10100 ?? ????? ????? 010 ????? ????? ??", fr2r, feqd); - def_INSTR_IDTAB("10100 ?? ????? ????? 001 ????? ????? ??", fr2r, fltd); - def_INSTR_IDTAB("10100 ?? ????? ????? 000 ????? ????? ??", fr2r, fled); - def_INSTR_IDTAB("11100 ?? 00000 ????? 001 ????? ????? ??", fr2r, fclassd); - def_INSTR_IDTAB("11000 ?? 00000 ????? ??? ????? ????? ??", fr2r, fcvt_w_d); - def_INSTR_IDTAB("11000 ?? 00001 ????? ??? ????? ????? ??", fr2r, fcvt_wu_d); - def_INSTR_IDTAB("11010 ?? 00000 ????? ??? ????? ????? ??", r2fr, fcvt_d_w); - def_INSTR_IDTAB("11010 ?? 00001 ????? ??? ????? ????? ??", r2fr, fcvt_d_wu); - - // RV64D - def_INSTR_IDTAB("11000 ?? 00010 ????? ??? ????? ????? ??", fr2r, fcvt_l_d); - def_INSTR_IDTAB("11000 ?? 00011 ????? ??? ????? ????? ??", fr2r, fcvt_lu_d); - def_INSTR_IDTAB("11100 ?? 00000 ????? 000 ????? ????? ??", fr2r, fmv_x_d); - def_INSTR_IDTAB("11010 ?? 00010 ????? ??? ????? ????? ??", r2fr, fcvt_d_l); - def_INSTR_IDTAB("11010 ?? 00011 ????? ??? ????? ????? ??", r2fr, fcvt_d_lu); - def_INSTR_IDTAB("11110 ?? 00000 ????? 000 ????? ????? ??", r2fr, fmv_d_x); - - return EXEC_ID_inv; -} - -def_THelper(fmadd_d_dispatch) { - def_INSTR_TAB("????? ?? ????? ????? ??? ????? 10000 11", fmaddd); - def_INSTR_TAB("????? ?? ????? ????? ??? ????? 10001 11", fmsubd); - def_INSTR_TAB("????? ?? ????? ????? ??? ????? 10010 11", fnmsubd); - def_INSTR_TAB("????? ?? ????? ????? ??? ????? 10011 11", fnmaddd); - return EXEC_ID_inv; -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvd/exec.h b/libraries/NEMU/src/isa/riscv64/instr/rvd/exec.h deleted file mode 100644 index 69c2b0c..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvd/exec.h +++ /dev/null @@ -1,154 +0,0 @@ -#define F64_SIGN ((uint64_t)1 << 63) - -def_EHelper(fld) { - rtl_lm(s, ddest, dsrc1, id_src2->imm, 8, MMU_DIRECT); - rtl_fsr(s, ddest, ddest, FPCALL_W64); -} - -def_EHelper(fsd) { - rtl_sm(s, ddest, dsrc1, id_src2->imm, 8, MMU_DIRECT); -} - -def_EHelper(fld_mmu) { - rtl_lm(s, ddest, dsrc1, id_src2->imm, 8, MMU_TRANSLATE); - rtl_fsr(s, ddest, ddest, FPCALL_W64); -} - -def_EHelper(fsd_mmu) { - rtl_sm(s, ddest, dsrc1, id_src2->imm, 8, MMU_TRANSLATE); -} - -def_fop_template(faddd, FPCALL_ADD, FPCALL_W64) -def_fop_template(fsubd, FPCALL_SUB, FPCALL_W64) -def_fop_template(fmuld, FPCALL_MUL, FPCALL_W64) -def_fop_template(fdivd, FPCALL_DIV, FPCALL_W64) -def_fop_template(fmaxd, FPCALL_MAX, FPCALL_W64) -def_fop_template(fmind, FPCALL_MIN, FPCALL_W64) - -def_EHelper(fsqrtd) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_SQRT, FPCALL_W64)); - rtl_fsr(s, ddest, ddest, FPCALL_W64); -} - -def_EHelper(fmaddd) { - rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 - rtl_hostcall(s, HOSTCALL_FP, s0, dsrc1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W64)); - rtl_fsr(s, ddest, s0, FPCALL_W64); -} - -def_EHelper(fmsubd) { - rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 - rtl_xori(s, s0, s0, F64_SIGN); - rtl_hostcall(s, HOSTCALL_FP, s0, dsrc1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W64)); - rtl_fsr(s, ddest, s0, FPCALL_W64); -} - -def_EHelper(fnmsubd) { - rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 - rtl_xori(s, s1, dsrc1, F64_SIGN); - rtl_hostcall(s, HOSTCALL_FP, s0, s1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W64)); - rtl_fsr(s, ddest, s0, FPCALL_W64); -} - -def_EHelper(fnmaddd) { - rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 - rtl_xori(s, s1, dsrc1, F64_SIGN); - rtl_xori(s, s0, s0, F64_SIGN); - rtl_hostcall(s, HOSTCALL_FP, s0, s1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W64)); - rtl_fsr(s, ddest, s0, FPCALL_W64); -} - -def_EHelper(fled) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, dsrc2, FPCALL_CMD(FPCALL_LE, FPCALL_W64)); -} - -def_EHelper(fltd) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, dsrc2, FPCALL_CMD(FPCALL_LT, FPCALL_W64)); -} - -def_EHelper(feqd) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, dsrc2, FPCALL_CMD(FPCALL_EQ, FPCALL_W64)); -} - -def_EHelper(fcvt_d_w) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_I32ToF, FPCALL_W64)); - rtl_fsr(s, ddest, ddest, FPCALL_W64); -} - -def_EHelper(fcvt_d_wu) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_U32ToF, FPCALL_W64)); - rtl_fsr(s, ddest, ddest, FPCALL_W64); -} - -def_EHelper(fcvt_d_l) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_I64ToF, FPCALL_W64)); - rtl_fsr(s, ddest, ddest, FPCALL_W64); -} - -def_EHelper(fcvt_d_lu) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_U64ToF, FPCALL_W64)); - rtl_fsr(s, ddest, ddest, FPCALL_W64); -} - -def_EHelper(fcvt_w_d) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToI32, FPCALL_W64)); - rtl_sext(s, ddest, ddest, 4); -} - -def_EHelper(fcvt_wu_d) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToU32, FPCALL_W64)); - rtl_sext(s, ddest, ddest, 4); -} - -def_EHelper(fcvt_l_d) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToI64, FPCALL_W64)); -} - -def_EHelper(fcvt_lu_d) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToU64, FPCALL_W64)); -} - -def_EHelper(fcvt_d_s) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_F32ToF64, FPCALL_W64)); - rtl_fsr(s, ddest, ddest, FPCALL_W64); -} - -def_EHelper(fcvt_s_d) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_F64ToF32, FPCALL_W64)); - rtl_fsr(s, ddest, ddest, FPCALL_W32); -} - -def_EHelper(fsgnjd) { - rtl_andi(s, s0, dsrc1, ~F64_SIGN); - rtl_andi(s, ddest, dsrc2, F64_SIGN); - rtl_or(s, ddest, s0, ddest); - rtl_fsr(s, ddest, ddest, FPCALL_W64); -} - -def_EHelper(fsgnjnd) { - rtl_andi(s, s0, dsrc1, ~F64_SIGN); - rtl_xori(s, ddest, dsrc2, F64_SIGN); - rtl_andi(s, ddest, ddest, F64_SIGN); - rtl_or(s, ddest, s0, ddest); - rtl_fsr(s, ddest, ddest, FPCALL_W64); -} - -def_EHelper(fsgnjxd) { - rtl_andi(s, s0, dsrc1, ~F64_SIGN); - rtl_xor(s, ddest, dsrc1, dsrc2); - rtl_andi(s, ddest, ddest, F64_SIGN); - rtl_or(s, ddest, s0, ddest); - rtl_fsr(s, ddest, ddest, FPCALL_W64); -} - -def_EHelper(fmv_x_d) { - rtl_sext(s, ddest, dsrc1, 8); -} - -def_EHelper(fmv_d_x) { - rtl_fsr(s, ddest, dsrc1, FPCALL_W64); -} - -def_EHelper(fclassd) { - rtl_fclass(s, ddest, dsrc1, FPCALL_W64); -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvf/decode.h b/libraries/NEMU/src/isa/riscv64/instr/rvf/decode.h deleted file mode 100644 index 29298c6..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvf/decode.h +++ /dev/null @@ -1,217 +0,0 @@ -bool fp_enable(); -static int table_op_fp_d(Decode *s); -static int table_fmadd_d_dispatch(Decode *s); - -static inline def_DopHelper(fr){ - op->preg = &fpreg_l(val); - print_Dop(op->str, OP_STR_SIZE, "%s", fpreg_name(val, 4)); -#ifdef CONFIG_RVV_010 - op->reg = val; -#endif // CONFIG_RVV_010 -} - -static inline def_DHelper(fr) { - decode_op_fr(s, id_src1, s->isa.instr.fp.rs1, false); - decode_op_fr(s, id_src2, s->isa.instr.fp.rs2, false); - decode_op_fr(s, id_dest, s->isa.instr.fp.rd, false); -} - -static inline def_DHelper(R4) { - decode_op_fr(s, id_src1, s->isa.instr.fp.rs1, false); - decode_op_fr(s, id_src2, s->isa.instr.fp.rs2, false); - decode_op_fr(s, id_dest, s->isa.instr.fp.rd, false); - // rs3 is decoded at exec.h -} - -static inline def_DHelper(fload) { - decode_op_r(s, id_src1, s->isa.instr.i.rs1, true); - decode_op_i(s, id_src2, (sword_t)s->isa.instr.i.simm11_0, false); - decode_op_fr(s, id_dest, s->isa.instr.i.rd, false); -} - -static inline def_DHelper(fstore) { - decode_op_r(s, id_src1, s->isa.instr.s.rs1, true); - sword_t simm = (s->isa.instr.s.simm11_5 << 5) | s->isa.instr.s.imm4_0; - decode_op_i(s, id_src2, simm, false); - decode_op_fr(s, id_dest, s->isa.instr.s.rs2, false); -} - -static inline def_DHelper(fr2r){ - decode_op_fr(s, id_src1, s->isa.instr.fp.rs1, true); - decode_op_fr(s, id_src2, s->isa.instr.fp.rs2, true); - decode_op_r(s, id_dest, s->isa.instr.fp.rd, false); -} - -static inline def_DHelper(r2fr){ - decode_op_r(s, id_src1, s->isa.instr.fp.rs1, true); - decode_op_r(s, id_src2, s->isa.instr.fp.rs2, true); - decode_op_fr(s, id_dest, s->isa.instr.fp.rd, false); -} - -#ifdef CONFIG_RVV_010 -bool vp_enable(); -def_THelper(vload) { - def_INSTR_TAB("??? 000 ? ????? ????? ??? ????? ????? ??", vlduu); - def_INSTR_TAB("??? 010 ? ????? ????? ??? ????? ????? ??", vldsu); - def_INSTR_TAB("??? 011 ? ????? ????? ??? ????? ????? ??", vldxu); - def_INSTR_TAB("??? 100 ? ????? ????? ??? ????? ????? ??", vldus); - def_INSTR_TAB("??? 110 ? ????? ????? ??? ????? ????? ??", vldss); - def_INSTR_TAB("??? 111 ? ????? ????? ??? ????? ????? ??", vldxs); - return EXEC_ID_inv; -} - -def_THelper(vstore) { - def_INSTR_TAB("??? 000 ? ????? ????? ??? ????? ????? ??", vstu); - def_INSTR_TAB("??? 010 ? ????? ????? ??? ????? ????? ??", vsts); - def_INSTR_TAB("??? 011 ? ????? ????? ??? ????? ????? ??", vstx); - def_INSTR_TAB("??? 111 ? ????? ????? ??? ????? ????? ??", vstxu); - return EXEC_ID_inv; -} - -def_THelper(vload_mmu) { - def_INSTR_TAB("??? 000 ? ????? ????? ??? ????? ????? ??", vlduu_mmu); - def_INSTR_TAB("??? 010 ? ????? ????? ??? ????? ????? ??", vldsu_mmu); - def_INSTR_TAB("??? 011 ? ????? ????? ??? ????? ????? ??", vldxu_mmu); - def_INSTR_TAB("??? 100 ? ????? ????? ??? ????? ????? ??", vldus_mmu); - def_INSTR_TAB("??? 110 ? ????? ????? ??? ????? ????? ??", vldss_mmu); - def_INSTR_TAB("??? 111 ? ????? ????? ??? ????? ????? ??", vldxs_mmu); - return EXEC_ID_inv; -} - -def_THelper(vstore_mmu) { - def_INSTR_TAB("??? 000 ? ????? ????? ??? ????? ????? ??", vstu_mmu); - def_INSTR_TAB("??? 010 ? ????? ????? ??? ????? ????? ??", vsts_mmu); - def_INSTR_TAB("??? 011 ? ????? ????? ??? ????? ????? ??", vstx_mmu); - def_INSTR_TAB("??? 111 ? ????? ????? ??? ????? ????? ??", vstxu_mmu); - return EXEC_ID_inv; -} - -#endif - -def_THelper(fload) { - print_Dop(id_src1->str, OP_STR_SIZE, "%ld(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs1, 4)); - - #ifdef CONFIG_RVV_010 - const int table [8] = {1, 0, 0, 0, 0, 2, 4, 0}; - s->vm = s->isa.instr.v_opv1.v_vm; //1 for without mask; 0 for with mask - s->v_width = table[s->isa.instr.vldfp.v_width]; - #endif // CONFIG_RVV_010 - - int mmu_mode = isa_mmu_state(); - if (mmu_mode == MMU_DIRECT) { - if (fp_enable()) { - def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", flw); - def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", fld); - } - - #ifdef CONFIG_RVV_010 - if (vp_enable()) { - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", vload); - def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", vload); - def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", vload); - } - #endif // CONFIG_RVV_010 - } else if (mmu_mode == MMU_TRANSLATE) { - if (fp_enable()) { - def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", flw_mmu); - def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", fld_mmu); - } - - #ifdef CONFIG_RVV_010 - if (vp_enable()) { - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", vload_mmu); - def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", vload_mmu); - def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", vload_mmu); - } - #endif // CONFIG_RVV_010 - } else { assert(0); } - return EXEC_ID_inv; -} - -def_THelper(fstore) { - print_Dop(id_src1->str, OP_STR_SIZE, "%ld(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs1, 4)); - - #ifdef CONFIG_RVV_010 - const int table [8] = {1, 0, 0, 0, 0, 2, 4, 0}; - s->vm = s->isa.instr.v_opv1.v_vm; //1 for without mask; 0 for with mask - s->v_width = table[s->isa.instr.vldfp.v_width]; - #endif // CONFIG_RVV_010 - - int mmu_mode = isa_mmu_state(); - if (mmu_mode == MMU_DIRECT) { - if (fp_enable()) { - def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", fsw); - def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", fsd); - } - - #ifdef CONFIG_RVV_010 - if (vp_enable()) { - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", vstore); - def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", vstore); - def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", vstore); - } - #endif // CONFIG_RVV_010 - } else if (mmu_mode == MMU_TRANSLATE) { - if (fp_enable()) { - def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", fsw_mmu); - def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", fsd_mmu); - } - - #ifdef CONFIG_RVV_010 - if (vp_enable()) { - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", vstore_mmu); - def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", vstore_mmu); - def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", vstore_mmu); - } - #endif // CONFIG_RVV_010 - } else { assert(0); } - return EXEC_ID_inv; -} - -def_THelper(op_fp) { - if (!fp_enable()) return table_rt_inv(s); - - if ((s->isa.instr.fp.fmt == 0b00 && s->isa.instr.fp.funct5 == 0b01000) || - s->isa.instr.fp.fmt == 0b01) return table_op_fp_d(s); - - // RV32F - def_INSTR_IDTAB("00000 00 ????? ????? ??? ????? ????? ??", fr , fadds); - def_INSTR_IDTAB("00001 00 ????? ????? ??? ????? ????? ??", fr , fsubs); - def_INSTR_IDTAB("00010 00 ????? ????? ??? ????? ????? ??", fr , fmuls); - def_INSTR_IDTAB("00011 00 ????? ????? ??? ????? ????? ??", fr , fdivs); - def_INSTR_IDTAB("01011 00 00000 ????? ??? ????? ????? ??", fr , fsqrts); - def_INSTR_IDTAB("00100 00 ????? ????? 000 ????? ????? ??", fr , fsgnjs); - def_INSTR_IDTAB("00100 00 ????? ????? 001 ????? ????? ??", fr , fsgnjns); - def_INSTR_IDTAB("00100 00 ????? ????? 010 ????? ????? ??", fr , fsgnjxs); - def_INSTR_IDTAB("00101 00 ????? ????? 000 ????? ????? ??", fr , fmins); - def_INSTR_IDTAB("00101 00 ????? ????? 001 ????? ????? ??", fr , fmaxs); - def_INSTR_IDTAB("11000 00 00000 ????? ??? ????? ????? ??", fr2r, fcvt_w_s); - def_INSTR_IDTAB("11000 00 00001 ????? ??? ????? ????? ??", fr2r, fcvt_wu_s); - def_INSTR_IDTAB("11100 00 00000 ????? 000 ????? ????? ??", fr2r, fmv_x_w); - def_INSTR_IDTAB("10100 00 ????? ????? 010 ????? ????? ??", fr2r, feqs); - def_INSTR_IDTAB("10100 00 ????? ????? 001 ????? ????? ??", fr2r, flts); - def_INSTR_IDTAB("10100 00 ????? ????? 000 ????? ????? ??", fr2r, fles); - def_INSTR_IDTAB("11100 00 00000 ????? 001 ????? ????? ??", fr2r, fclasss); - def_INSTR_IDTAB("11010 00 00000 ????? ??? ????? ????? ??", r2fr, fcvt_s_w); - def_INSTR_IDTAB("11010 00 00001 ????? ??? ????? ????? ??", r2fr, fcvt_s_wu); - def_INSTR_IDTAB("11110 00 00000 ????? 000 ????? ????? ??", r2fr, fmv_w_x); - - // RV32F - def_INSTR_IDTAB("11000 00 00010 ????? ??? ????? ????? ??", fr2r, fcvt_l_s); - def_INSTR_IDTAB("11000 00 00011 ????? ??? ????? ????? ??", fr2r, fcvt_lu_s); - def_INSTR_IDTAB("11010 00 00010 ????? ??? ????? ????? ??", r2fr, fcvt_s_l); - def_INSTR_IDTAB("11010 00 00011 ????? ??? ????? ????? ??", r2fr, fcvt_s_lu); - - return EXEC_ID_inv; -} - -def_THelper(fmadd_dispatch) { - if (!fp_enable()) return table_rt_inv(s); - def_INSTR_TAB("????? 01 ????? ????? ??? ????? ????? ??", fmadd_d_dispatch); - - def_INSTR_TAB("????? 00 ????? ????? ??? ????? 10000 ??", fmadds); - def_INSTR_TAB("????? 00 ????? ????? ??? ????? 10001 ??", fmsubs); - def_INSTR_TAB("????? 00 ????? ????? ??? ????? 10010 ??", fnmsubs); - def_INSTR_TAB("????? 00 ????? ????? ??? ????? 10011 ??", fnmadds); - return EXEC_ID_inv; -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvf/exec.h b/libraries/NEMU/src/isa/riscv64/instr/rvf/exec.h deleted file mode 100644 index 6ac6aa9..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvf/exec.h +++ /dev/null @@ -1,161 +0,0 @@ -#define F32_SIGN ((uint64_t)1 << 31) - -def_rtl(fclass, rtlreg_t *, rtlreg_t *, int); - -def_EHelper(flw) { - rtl_lm(s, ddest, dsrc1, id_src2->imm, 4, MMU_DIRECT); - rtl_fsr(s, ddest, ddest, FPCALL_W32); -} - -def_EHelper(fsw) { - rtl_sm(s, ddest, dsrc1, id_src2->imm, 4, MMU_DIRECT); -} - -def_EHelper(flw_mmu) { - rtl_lm(s, ddest, dsrc1, id_src2->imm, 4, MMU_TRANSLATE); - rtl_fsr(s, ddest, ddest, FPCALL_W32); -} - -def_EHelper(fsw_mmu) { - rtl_funbox(s, s0, ddest); - rtl_sm(s, s0, dsrc1, id_src2->imm, 4, MMU_TRANSLATE); -} - -#define def_fop_template(name, op, w) \ - def_EHelper(name) { \ - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, dsrc2, FPCALL_CMD(op, w)); \ - rtl_fsr(s, ddest, ddest, w); \ - } - -def_fop_template(fadds, FPCALL_ADD, FPCALL_W32) -def_fop_template(fsubs, FPCALL_SUB, FPCALL_W32) -def_fop_template(fmuls, FPCALL_MUL, FPCALL_W32) -def_fop_template(fdivs, FPCALL_DIV, FPCALL_W32) -def_fop_template(fmins, FPCALL_MIN, FPCALL_W32) -def_fop_template(fmaxs, FPCALL_MAX, FPCALL_W32) - -def_EHelper(fsqrts) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_SQRT, FPCALL_W32)); - rtl_fsr(s, ddest, ddest, FPCALL_W32); -} - -def_EHelper(fmadds) { - rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 - rtl_hostcall(s, HOSTCALL_FP, s0, dsrc1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W32)); - rtl_fsr(s, ddest, s0, FPCALL_W32); -} - -def_EHelper(fmsubs) { - rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 - rtl_xori(s, s0, s0, F32_SIGN); - rtl_hostcall(s, HOSTCALL_FP, s0, dsrc1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W32)); - rtl_fsr(s, ddest, s0, FPCALL_W32); -} - -def_EHelper(fnmsubs) { - rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 - rtl_xori(s, s1, dsrc1, F32_SIGN); - rtl_hostcall(s, HOSTCALL_FP, s0, s1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W32)); - rtl_fsr(s, ddest, s0, FPCALL_W32); -} - -def_EHelper(fnmadds) { - rtl_mv(s, s0, &fpreg_l(s->isa.instr.fp.funct5)); // rs3 - rtl_xori(s, s1, dsrc1, F32_SIGN); - rtl_xori(s, s0, s0, F32_SIGN); - rtl_hostcall(s, HOSTCALL_FP, s0, s1, dsrc2, FPCALL_CMD(FPCALL_MADD, FPCALL_W32)); - rtl_fsr(s, ddest, s0, FPCALL_W32); -} - -def_EHelper(fles) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, dsrc2, FPCALL_CMD(FPCALL_LE, FPCALL_W32)); -} - -def_EHelper(flts) { - rtl_mv(s, ddest, dsrc1); - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, dsrc2, FPCALL_CMD(FPCALL_LT, FPCALL_W32)); -} - -def_EHelper(feqs) { - rtl_mv(s, ddest, dsrc1); - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, dsrc2, FPCALL_CMD(FPCALL_EQ, FPCALL_W32)); -} - -def_EHelper(fcvt_s_w) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_I32ToF, FPCALL_W32)); - rtl_fsr(s, ddest, ddest, FPCALL_W32); -} - -def_EHelper(fcvt_s_wu) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_U32ToF, FPCALL_W32)); - rtl_fsr(s, ddest, ddest, FPCALL_W32); -} - -def_EHelper(fcvt_s_l) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_I64ToF, FPCALL_W32)); - rtl_fsr(s, ddest, ddest, FPCALL_W32); -} - -def_EHelper(fcvt_s_lu) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_U64ToF, FPCALL_W32)); - rtl_fsr(s, ddest, ddest, FPCALL_W32); -} - -def_EHelper(fcvt_w_s) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToI32, FPCALL_W32)); - rtl_sext(s, ddest, ddest, 4); -} - -def_EHelper(fcvt_wu_s) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToU32, FPCALL_W32)); - rtl_sext(s, ddest, ddest, 4); -} - -def_EHelper(fcvt_l_s) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToI64, FPCALL_W32)); -} - -def_EHelper(fcvt_lu_s) { - rtl_hostcall(s, HOSTCALL_FP, ddest, dsrc1, rz, FPCALL_CMD(FPCALL_FToU64, FPCALL_W32)); -} - -def_EHelper(fsgnjs) { - rtl_funbox(s, s0, dsrc1); - rtl_funbox(s, ddest, dsrc2); - rtl_andi(s, s0, s0, ~F32_SIGN); - rtl_andi(s, ddest, ddest, F32_SIGN); - rtl_or(s, ddest, s0, ddest); - rtl_fsr(s, ddest, ddest, FPCALL_W32); -} - -def_EHelper(fsgnjns) { - rtl_funbox(s, s0, dsrc1); - rtl_funbox(s, ddest, dsrc2); - rtl_andi(s, s0, s0, ~F32_SIGN); - rtl_xori(s, ddest, ddest, F32_SIGN); - rtl_andi(s, ddest, ddest, F32_SIGN); - rtl_or(s, ddest, s0, ddest); - rtl_fsr(s, ddest, ddest, FPCALL_W32); -} - -def_EHelper(fsgnjxs) { - rtl_funbox(s, s0, dsrc1); - rtl_funbox(s, ddest, dsrc2); - rtl_xor(s, ddest, s0, ddest); - rtl_andi(s, s0, s0, ~F32_SIGN); - rtl_andi(s, ddest, ddest, F32_SIGN); - rtl_or(s, ddest, s0, ddest); - rtl_fsr(s, ddest, ddest, FPCALL_W32); -} - -def_EHelper(fmv_x_w) { - rtl_sext(s, ddest, dsrc1, 4); -} - -def_EHelper(fmv_w_x) { - rtl_fsr(s, ddest, dsrc1, FPCALL_W32); -} - -def_EHelper(fclasss) { - rtl_fclass(s, ddest, dsrc1, FPCALL_W32); -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvi/compute.h b/libraries/NEMU/src/isa/riscv64/instr/rvi/compute.h deleted file mode 100644 index f557580..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvi/compute.h +++ /dev/null @@ -1,119 +0,0 @@ -def_EHelper(add) { - rtl_add(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(sub) { - rtl_sub(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(sll) { - rtl_shl(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(sra) { - rtl_sar(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(srl) { - rtl_shr(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(slt) { - rtl_setrelop(s, RELOP_LT, ddest, dsrc1, dsrc2); -} - -def_EHelper(sltu) { - rtl_setrelop(s, RELOP_LTU, ddest, dsrc1, dsrc2); -} - -def_EHelper(xor) { - rtl_xor(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(or) { - rtl_or(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(and) { - rtl_and(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(addi) { - rtl_addi(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(slli) { - rtl_shli(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(srai) { - rtl_sari(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(srli) { - rtl_shri(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(slti) { - rtl_setrelopi(s, RELOP_LT, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(sltui) { - rtl_setrelopi(s, RELOP_LTU, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(xori) { - rtl_xori(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(ori) { - rtl_ori(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(andi) { - rtl_andi(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(auipc) { - rtl_li(s, ddest, id_src1->imm); -} - -def_EHelper(lui) { - rtl_li(s, ddest, id_src1->imm); -} - -def_EHelper(addw) { - rtl_addw(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(subw) { - rtl_subw(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(sllw) { - rtl_shlw(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(srlw) { - rtl_shrw(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(sraw) { - rtl_sarw(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(addiw) { - rtl_addiw(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(slliw) { - rtl_shliw(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(srliw) { - rtl_shriw(s, ddest, dsrc1, id_src2->imm); -} - -def_EHelper(sraiw) { - rtl_sariw(s, ddest, dsrc1, id_src2->imm); -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvi/control.h b/libraries/NEMU/src/isa/riscv64/instr/rvi/control.h deleted file mode 100644 index f361bf6..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvi/control.h +++ /dev/null @@ -1,36 +0,0 @@ -def_EHelper(jal) { - rtl_li(s, ddest, id_src2->imm); - rtl_j(s, id_src1->imm); -} - -def_EHelper(jalr) { - rtl_addi(s, s0, dsrc1, id_src2->imm); -// IFDEF(CONFIG_ENGINE_INTERPRETER, rtl_andi(s, s0, s0, ~0x1lu)); - rtl_li(s, ddest, s->snpc); - IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); - rtl_jr(s, s0); -} - -def_EHelper(beq) { - rtl_jrelop(s, RELOP_EQ, dsrc1, dsrc2, id_dest->imm); -} - -def_EHelper(bne) { - rtl_jrelop(s, RELOP_NE, dsrc1, dsrc2, id_dest->imm); -} - -def_EHelper(blt) { - rtl_jrelop(s, RELOP_LT, dsrc1, dsrc2, id_dest->imm); -} - -def_EHelper(bge) { - rtl_jrelop(s, RELOP_GE, dsrc1, dsrc2, id_dest->imm); -} - -def_EHelper(bltu) { - rtl_jrelop(s, RELOP_LTU, dsrc1, dsrc2, id_dest->imm); -} - -def_EHelper(bgeu) { - rtl_jrelop(s, RELOP_GEU, dsrc1, dsrc2, id_dest->imm); -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvi/decode.h b/libraries/NEMU/src/isa/riscv64/instr/rvi/decode.h deleted file mode 100644 index a69e3d0..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvi/decode.h +++ /dev/null @@ -1,215 +0,0 @@ -static int table_c_addi_dispatch(Decode *s); -static int table_c_addiw_dispatch(Decode *s); - -static inline def_DopHelper(i) { - op->imm = val; - print_Dop(op->str, OP_STR_SIZE, (flag ? "0x%lx" : "%ld"), op->imm); -} - -static inline def_DopHelper(r) { - bool load_val = flag; - static word_t zero_null = 0; - op->preg = (!load_val && val == 0) ? &zero_null : ®_l(val); - print_Dop(op->str, OP_STR_SIZE, "%s", reg_name(val, 4)); -#ifdef CONFIG_RVV_010 - op->reg = val; -#endif // CONFIG_RVV_010 -} - -static inline def_DHelper(I) { - decode_op_r(s, id_src1, s->isa.instr.i.rs1, true); - decode_op_i(s, id_src2, (sword_t)s->isa.instr.i.simm11_0, false); - decode_op_r(s, id_dest, s->isa.instr.i.rd, false); -} - -static inline def_DHelper(R) { - decode_op_r(s, id_src1, s->isa.instr.r.rs1, true); - decode_op_r(s, id_src2, s->isa.instr.r.rs2, true); - decode_op_r(s, id_dest, s->isa.instr.r.rd, false); -} - -static inline def_DHelper(U) { - decode_op_i(s, id_src1, (sword_t)s->isa.instr.u.simm31_12 << 12, true); - decode_op_r(s, id_dest, s->isa.instr.u.rd, false); -} - -static inline def_DHelper(auipc) { - decode_U(s, width); - id_src1->imm += s->pc; -} - -static inline def_DHelper(J) { - sword_t offset = (s->isa.instr.j.simm20 << 20) | (s->isa.instr.j.imm19_12 << 12) | - (s->isa.instr.j.imm11 << 11) | (s->isa.instr.j.imm10_1 << 1); - decode_op_i(s, id_src1, s->pc + offset, true); - decode_op_r(s, id_dest, s->isa.instr.j.rd, false); - id_src2->imm = s->snpc; -} - -static inline def_DHelper(B) { - sword_t offset = (s->isa.instr.b.simm12 << 12) | (s->isa.instr.b.imm11 << 11) | - (s->isa.instr.b.imm10_5 << 5) | (s->isa.instr.b.imm4_1 << 1); - decode_op_i(s, id_dest, s->pc + offset, true); - decode_op_r(s, id_src1, s->isa.instr.b.rs1, true); - decode_op_r(s, id_src2, s->isa.instr.b.rs2, true); -} - -static inline def_DHelper(S) { - decode_op_r(s, id_src1, s->isa.instr.s.rs1, true); - sword_t simm = (s->isa.instr.s.simm11_5 << 5) | s->isa.instr.s.imm4_0; - decode_op_i(s, id_src2, simm, false); - decode_op_r(s, id_dest, s->isa.instr.s.rs2, true); -} - -def_THelper(load) { - print_Dop(id_src1->str, OP_STR_SIZE, "%ld(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs1, 4)); - int mmu_mode = isa_mmu_state(); - if (mmu_mode == MMU_DIRECT) { - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", lb); - def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", lh); - def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", lw); - def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", ld); - def_INSTR_TAB("??????? ????? ????? 100 ????? ????? ??", lbu); - def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", lhu); - def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", lwu); - } else if (mmu_mode == MMU_TRANSLATE) { - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", lb_mmu); - def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", lh_mmu); - def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", lw_mmu); - def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", ld_mmu); - def_INSTR_TAB("??????? ????? ????? 100 ????? ????? ??", lbu_mmu); - def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", lhu_mmu); - def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", lwu_mmu); - } else { assert(0); } - return EXEC_ID_inv; -} - -def_THelper(store) { - print_Dop(id_src1->str, OP_STR_SIZE, "%ld(%s)", id_src2->imm, reg_name(s->isa.instr.i.rs1, 4)); - int mmu_mode = isa_mmu_state(); - if (mmu_mode == MMU_DIRECT) { - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", sb); - def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", sh); - def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", sw); - def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", sd); - } else if (mmu_mode == MMU_TRANSLATE) { - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", sb_mmu); - def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", sh_mmu); - def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", sw_mmu); - def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", sd_mmu); - } else { assert(0); } - return EXEC_ID_inv; -} - -def_THelper(addi_dispatch) { - def_INSTR_TAB("0000000 00000 00000 ??? ????? ????? ??", p_li_0); - def_INSTR_TAB("0000000 00001 00000 ??? ????? ????? ??", p_li_1); - def_INSTR_TAB("??????? ????? 00000 ??? ????? ????? ??", c_li); - def_INSTR_TAB("0000000 00000 ????? ??? ????? ????? ??", c_mv); - def_INSTR_TAB("??????? ????? ????? ??? ????? ????? ??", addi); - return EXEC_ID_inv; -} - -def_THelper(op_imm) { - if (s->isa.instr.i.rd == s->isa.instr.i.rs1) { - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", c_addi_dispatch); - def_INSTR_TAB("??????? ????? ????? 111 ????? ????? ??", c_andi); - def_INSTR_TAB("000000? ????? ????? 001 ????? ????? ??", c_slli); - def_INSTR_TAB("010000? ????? ????? 101 ????? ????? ??", c_srai); - def_INSTR_TAB("000000? ????? ????? 101 ????? ????? ??", c_srli); - } - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", addi_dispatch); - def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", slti); - def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", sltui); - def_INSTR_TAB("??????? ????? ????? 100 ????? ????? ??", xori); - def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", ori); - def_INSTR_TAB("??????? ????? ????? 111 ????? ????? ??", andi); - def_INSTR_TAB("000000? ????? ????? 001 ????? ????? ??", slli); - def_INSTR_TAB("000000? ????? ????? 101 ????? ????? ??", srli); - def_INSTR_TAB("010000? ????? ????? 101 ????? ????? ??", srai); - return EXEC_ID_inv; -}; - -def_THelper(op_imm32) { - if (s->isa.instr.i.rd == s->isa.instr.i.rs1) { - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", c_addiw_dispatch); - } - def_INSTR_TAB("0000000 00000 ????? 000 ????? ????? ??", p_sext_w); - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", addiw); - def_INSTR_TAB("0000000 ????? ????? 001 ????? ????? ??", slliw); - def_INSTR_TAB("0000000 ????? ????? 101 ????? ????? ??", srliw); - def_INSTR_TAB("0100000 ????? ????? 101 ????? ????? ??", sraiw); - return EXEC_ID_inv; -} - -def_THelper(op) { - if (s->isa.instr.r.rd == s->isa.instr.r.rs1) { - def_INSTR_TAB("0000000 ????? ????? 000 ????? ????? ??", c_add); - def_INSTR_TAB("0100000 ????? ????? 000 ????? ????? ??", c_sub); - def_INSTR_TAB("0000000 ????? ????? 100 ????? ????? ??", c_xor); - def_INSTR_TAB("0000000 ????? ????? 110 ????? ????? ??", c_or); - def_INSTR_TAB("0000000 ????? ????? 111 ????? ????? ??", c_and); - } - def_INSTR_TAB("0000000 ????? ????? 000 ????? ????? ??", add); - def_INSTR_TAB("0000000 ????? ????? 001 ????? ????? ??", sll); - def_INSTR_TAB("0000000 ????? ????? 010 ????? ????? ??", slt); - def_INSTR_TAB("0000000 ????? ????? 011 ????? ????? ??", sltu); - def_INSTR_TAB("0000000 ????? ????? 100 ????? ????? ??", xor); - def_INSTR_TAB("0000000 ????? ????? 101 ????? ????? ??", srl); - def_INSTR_TAB("0000000 ????? ????? 110 ????? ????? ??", or); - def_INSTR_TAB("0000000 ????? ????? 111 ????? ????? ??", and); - def_INSTR_TAB("0100000 ????? ????? 000 ????? ????? ??", sub); - def_INSTR_TAB("0100000 ????? ????? 101 ????? ????? ??", sra); - return EXEC_ID_inv; -} - -def_THelper(op32) { - if (s->isa.instr.r.rd == s->isa.instr.r.rs1) { - def_INSTR_TAB("0000000 ????? ????? 000 ????? ????? ??", c_addw); - def_INSTR_TAB("0100000 ????? ????? 000 ????? ????? ??", c_subw); - } - def_INSTR_TAB("0000000 ????? ????? 000 ????? ????? ??", addw); - def_INSTR_TAB("0100000 ????? ????? 000 ????? ????? ??", subw); - def_INSTR_TAB("0000000 ????? ????? 001 ????? ????? ??", sllw); - def_INSTR_TAB("0000000 ????? ????? 101 ????? ????? ??", srlw); - def_INSTR_TAB("0100000 ????? ????? 101 ????? ????? ??", sraw); - return EXEC_ID_inv; -} - -def_THelper(branch) { - def_INSTR_TAB("??????? 00000 ????? 000 ????? ????? ??", c_beqz); - def_INSTR_TAB("??????? 00000 ????? 001 ????? ????? ??", c_bnez); - def_INSTR_TAB("??????? 00000 ????? 100 ????? ????? ??", p_bltz); - def_INSTR_TAB("??????? 00000 ????? 101 ????? ????? ??", p_bgez); - - def_INSTR_TAB("??????? ????? 00000 100 ????? ????? ??", p_bgtz); - def_INSTR_TAB("??????? ????? 00000 101 ????? ????? ??", p_blez); - - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", beq); - def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", bne); - def_INSTR_TAB("??????? ????? ????? 100 ????? ????? ??", blt); - def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", bge); - def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", bltu); - def_INSTR_TAB("??????? ????? ????? 111 ????? ????? ??", bgeu); - return EXEC_ID_inv; -}; - -def_THelper(jal_dispatch) { - def_INSTR_TAB("??????? ????? ????? ??? 00000 ????? ??", c_j); - def_INSTR_TAB("??????? ????? ????? ??? 00001 ????? ??", p_jal); - def_INSTR_TAB("??????? ????? ????? ??? ????? ????? ??", jal); - return EXEC_ID_inv; -} - -def_THelper(jalr_dispatch) { - def_INSTR_TAB("0000000 00000 00001 ??? 00000 ????? ??", p_ret); - def_INSTR_TAB("0000000 00000 ????? ??? 00000 ????? ??", c_jr); - def_INSTR_TAB("??????? ????? ????? ??? ????? ????? ??", jalr); - return EXEC_ID_inv; -} - -def_THelper(mem_fence) { - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", fence); - def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", fence_i); - return EXEC_ID_inv; -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvi/exec.h b/libraries/NEMU/src/isa/riscv64/instr/rvi/exec.h deleted file mode 100644 index be02443..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvi/exec.h +++ /dev/null @@ -1,4 +0,0 @@ -#include "compute.h" -#include "ldst.h" -#include "control.h" -#include "fence.h" diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvi/fence.h b/libraries/NEMU/src/isa/riscv64/instr/rvi/fence.h deleted file mode 100644 index 78ac28a..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvi/fence.h +++ /dev/null @@ -1,9 +0,0 @@ -def_EHelper(fence_i) { - IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); - rtl_hostcall(s, HOSTCALL_PRIV, NULL, NULL, NULL, -1); - rtl_priv_next(s); -} - -def_EHelper(fence) { - IFNDEF(CONFIG_DIFFTEST_REF_NEMU, difftest_skip_dut(1, 2)); -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvi/ldst.h b/libraries/NEMU/src/isa/riscv64/instr/rvi/ldst.h deleted file mode 100644 index fb772ef..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvi/ldst.h +++ /dev/null @@ -1,20 +0,0 @@ -#define def_ldst_template(name, rtl_instr, width, mmu_mode) \ - def_EHelper(name) { \ - concat(rtl_, rtl_instr) (s, ddest, dsrc1, id_src2->imm, width, mmu_mode); \ - } - -#define def_all_ldst(suffix, mmu_mode) \ - def_ldst_template(concat(ld , suffix), lms, 8, mmu_mode) \ - def_ldst_template(concat(lw , suffix), lms, 4, mmu_mode) \ - def_ldst_template(concat(lh , suffix), lms, 2, mmu_mode) \ - def_ldst_template(concat(lb , suffix), lms, 1, mmu_mode) \ - def_ldst_template(concat(lwu, suffix), lm , 4, mmu_mode) \ - def_ldst_template(concat(lhu, suffix), lm , 2, mmu_mode) \ - def_ldst_template(concat(lbu, suffix), lm , 1, mmu_mode) \ - def_ldst_template(concat(sd , suffix), sm , 8, mmu_mode) \ - def_ldst_template(concat(sw , suffix), sm , 4, mmu_mode) \ - def_ldst_template(concat(sh , suffix), sm , 2, mmu_mode) \ - def_ldst_template(concat(sb , suffix), sm , 1, mmu_mode) - -def_all_ldst(, MMU_DIRECT) -def_all_ldst(_mmu, MMU_TRANSLATE) diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvm/decode.h b/libraries/NEMU/src/isa/riscv64/instr/rvm/decode.h deleted file mode 100644 index 0e34b31..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvm/decode.h +++ /dev/null @@ -1,20 +0,0 @@ -def_THelper(rvm) { - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", mul); - def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", mulh); - def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", mulhsu); - def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", mulhu); - def_INSTR_TAB("??????? ????? ????? 100 ????? ????? ??", div); - def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", divu); - def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", rem); - def_INSTR_TAB("??????? ????? ????? 111 ????? ????? ??", remu); - return EXEC_ID_inv; -} - -def_THelper(rvm32) { - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", mulw); - def_INSTR_TAB("??????? ????? ????? 100 ????? ????? ??", divw); - def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", divuw); - def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", remw); - def_INSTR_TAB("??????? ????? ????? 111 ????? ????? ??", remuw); - return EXEC_ID_inv; -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvm/exec.h b/libraries/NEMU/src/isa/riscv64/instr/rvm/exec.h deleted file mode 100644 index 633ddeb..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvm/exec.h +++ /dev/null @@ -1,140 +0,0 @@ -def_EHelper(mul) { - rtl_mulu_lo(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(mulh) { - rtl_muls_hi(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(mulhu) { - rtl_mulu_hi(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(mulhsu) { - // Algorithm: - // We want to obtain ans = mulhsu(a, b). - // Consider mulhu(a, b). - // If a >= 0, then ans = mulhu(a, b); - // If a = -x < 0, then a = 2^64 - x in two's complement - // Then - // mulhu(a, b) = mulhu(2^64 -x , b) = ((2^64 - x)b) >> 64 - // = ((2^64b) >> 64) + ((-xb) >> 64) - // = b + mulhsu(a, b) = b + ans - // Therefore, ans = mulhu(a, b) - b - // - // In the end, ans = (a < 0 ? mulhu(a, b) - b : mulhu(a, b)) - // = mulhu(a, b) - (a < 0 ? b : 0) - - rtl_sari(s, s0, dsrc1, 63); - rtl_and(s, s0, dsrc2, s0); // s0 = (id_src1->val < 0 ? id_src2->val : 0) - rtl_mulu_hi(s, s1, dsrc1, dsrc2); - rtl_sub(s, ddest, s1, s0); -} - -def_EHelper(div) { -#ifdef CONFIG_ENGINE_INTERPRETER - if (*dsrc2 == 0) { - rtl_li(s, ddest, ~0lu); - } else if (*dsrc1 == 0x8000000000000000LL && *dsrc2 == ~(word_t)0) { - rtl_mv(s, ddest, dsrc1); - } else -#endif - rtl_divs_q(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(divu) { -#ifdef CONFIG_ENGINE_INTERPRETER - if (*dsrc2 == 0) { - rtl_li(s, ddest, ~0lu); - } else -#endif - rtl_divu_q(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(rem) { -#ifdef CONFIG_ENGINE_INTERPRETER - if (*dsrc2 == 0) { - rtl_mv(s, ddest, dsrc1); - } else if (*dsrc1 == 0x8000000000000000LL && *dsrc2 == ~(word_t)0) { - rtl_mv(s, ddest, rz); - } else -#endif - rtl_divs_r(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(remu) { -#ifdef CONFIG_ENGINE_INTERPRETER - if (*dsrc2 == 0) { - rtl_mv(s, ddest, dsrc1); - } else -#endif - rtl_divu_r(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(mulw) { - rtl_mulw(s, ddest, dsrc1, dsrc2); -} - -def_EHelper(divw) { -#ifdef CONFIG_ENGINE_INTERPRETER - rtl_sext(s, s0, dsrc1, 4); - rtl_sext(s, s1, dsrc2, 4); - if (*s1 == 0) { - rtl_li(s, s0, ~0lu); - } else if (*s0 == 0x80000000 && *s1 == ~(word_t)0) { - //rtl_mv(s, s0, s0); - } else { - rtl_divs_q(s, s0, s0, s1); - } - rtl_sext(s, ddest, s0, 4); -#else - rtl_divw(s, ddest, dsrc1, dsrc2); -#endif -} - -def_EHelper(remw) { -#ifdef CONFIG_ENGINE_INTERPRETER - rtl_sext(s, s0, dsrc1, 4); - rtl_sext(s, s1, dsrc2, 4); - if (*s1 == 0) { - //rtl_mv(s, s0, s0); - } else if (*s0 == 0x80000000 && *s1 == ~(word_t)0) { - rtl_mv(s, s0, rz); - } else { - rtl_divs_r(s, s0, s0, s1); - } - rtl_sext(s, ddest, s0, 4); -#else - rtl_remw(s, ddest, dsrc1, dsrc2); -#endif -} - -def_EHelper(divuw) { -#ifdef CONFIG_ENGINE_INTERPRETER - rtl_zext(s, s0, dsrc1, 4); - rtl_zext(s, s1, dsrc2, 4); - if (*s1 == 0) { - rtl_li(s, s0, ~0lu); - } else { - rtl_divu_q(s, s0, s0, s1); - } - rtl_sext(s, ddest, s0, 4); -#else - rtl_divuw(s, ddest, dsrc1, dsrc2); -#endif -} - -def_EHelper(remuw) { -#ifdef CONFIG_ENGINE_INTERPRETER - rtl_zext(s, s0, dsrc1, 4); - rtl_zext(s, s1, dsrc2, 4); - if (*s1 == 0) { - //rtl_mv(s, s0, s0); - } else { - rtl_divu_r(s, s0, s0, s1); - } - rtl_sext(s, ddest, s0, 4); -#else - rtl_remuw(s, ddest, dsrc1, dsrc2); -#endif -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/decode.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/decode.h deleted file mode 100644 index 3481384..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvv/decode.h +++ /dev/null @@ -1,175 +0,0 @@ -#ifdef CONFIG_RVV_010 -// vector -static inline def_DHelper(OP_V) { // 10_101, same to R - decode_op_r(s, id_src1, s->isa.instr.r.rs1, true); - decode_op_r(s, id_src2, s->isa.instr.r.rs2, true); - decode_op_r(s, id_dest, s->isa.instr.r.rd, false); - // decode_op_r(id_dest, decinfo.isa.instr.v_vd, false); -} - -static inline def_DHelper(vsetvl) { - rtl_li(s, &id_src2->val, s->isa.instr.v_opv2.v_bigbit ? id_src2->val : s->isa.instr.v_opv2.v_zimm); - if (s->isa.instr.v_opv2.v_bigbit) { - print_Dop(id_src2->str, OP_STR_SIZE, "%ld", id_src2->val); - } else { - print_Dop(id_src2->str, OP_STR_SIZE, "%ld", s->isa.instr.v_opv2.v_zimm); - } - -} - -//vector -def_THelper(vopi) { - def_INSTR_TAB("000000 ? ????? ????? ??? ????? ????? ??", vadd); - def_INSTR_TAB("000010 ? ????? ????? ??? ????? ????? ??", vsub); - def_INSTR_TAB("000011 ? ????? ????? ??? ????? ????? ??", vrsub); - def_INSTR_TAB("000100 ? ????? ????? ??? ????? ????? ??", vminu); - def_INSTR_TAB("000101 ? ????? ????? ??? ????? ????? ??", vmin); - def_INSTR_TAB("000110 ? ????? ????? ??? ????? ????? ??", vmaxu); - def_INSTR_TAB("000111 ? ????? ????? ??? ????? ????? ??", vmax); - def_INSTR_TAB("001001 ? ????? ????? ??? ????? ????? ??", vand); - def_INSTR_TAB("001010 ? ????? ????? ??? ????? ????? ??", vor); - def_INSTR_TAB("001011 ? ????? ????? ??? ????? ????? ??", vxor); - def_INSTR_TAB("001100 ? ????? ????? ??? ????? ????? ??", vrgather); - def_INSTR_TAB("001110 ? ????? ????? ??? ????? ????? ??", vslideup); - def_INSTR_TAB("001111 ? ????? ????? ??? ????? ????? ??", vslidedown); - def_INSTR_TAB("010000 ? ????? ????? ??? ????? ????? ??", vadc); - def_INSTR_TAB("010001 ? ????? ????? ??? ????? ????? ??", vmadc); - def_INSTR_TAB("010010 ? ????? ????? ??? ????? ????? ??", vsbc); - def_INSTR_TAB("010011 ? ????? ????? ??? ????? ????? ??", vmsbc); - def_INSTR_TAB("010111 ? ????? ????? ??? ????? ????? ??", vmerge); - def_INSTR_TAB("011000 ? ????? ????? ??? ????? ????? ??", vmseq); - def_INSTR_TAB("011001 ? ????? ????? ??? ????? ????? ??", vmsne); - def_INSTR_TAB("011010 ? ????? ????? ??? ????? ????? ??", vmsltu); - def_INSTR_TAB("011011 ? ????? ????? ??? ????? ????? ??", vmslt); - def_INSTR_TAB("011100 ? ????? ????? ??? ????? ????? ??", vmsleu); - def_INSTR_TAB("011101 ? ????? ????? ??? ????? ????? ??", vmsle); - def_INSTR_TAB("011110 ? ????? ????? ??? ????? ????? ??", vmsgtu); - def_INSTR_TAB("011111 ? ????? ????? ??? ????? ????? ??", vmsgt); - def_INSTR_TAB("100000 ? ????? ????? ??? ????? ????? ??", vsaddu); - def_INSTR_TAB("100001 ? ????? ????? ??? ????? ????? ??", vsadd); - def_INSTR_TAB("100010 ? ????? ????? ??? ????? ????? ??", vssubu); - def_INSTR_TAB("100011 ? ????? ????? ??? ????? ????? ??", vssub); - def_INSTR_TAB("100100 ? ????? ????? ??? ????? ????? ??", vaadd); - def_INSTR_TAB("100101 ? ????? ????? ??? ????? ????? ??", vsll); - def_INSTR_TAB("100110 ? ????? ????? ??? ????? ????? ??", vasub); - def_INSTR_TAB("100111 ? ????? ????? ??? ????? ????? ??", vsmul); - def_INSTR_TAB("101000 ? ????? ????? ??? ????? ????? ??", vsrl); - def_INSTR_TAB("101001 ? ????? ????? ??? ????? ????? ??", vsra); - def_INSTR_TAB("101011 ? ????? ????? ??? ????? ????? ??", vssra); - def_INSTR_TAB("101100 ? ????? ????? ??? ????? ????? ??", vnsrl); - def_INSTR_TAB("101101 ? ????? ????? ??? ????? ????? ??", vnsra); - def_INSTR_TAB("101110 ? ????? ????? ??? ????? ????? ??", vnclipu); - def_INSTR_TAB("101111 ? ????? ????? ??? ????? ????? ??", vnclip); - def_INSTR_TAB("101010 ? ????? ????? ??? ????? ????? ??", vssrl); - def_INSTR_TAB("110000 ? ????? ????? ??? ????? ????? ??", vwredsumu); - def_INSTR_TAB("110001 ? ????? ????? ??? ????? ????? ??", vwredsum); - def_INSTR_TAB("111000 ? ????? ????? ??? ????? ????? ??", vdotu); - def_INSTR_TAB("111001 ? ????? ????? ??? ????? ????? ??", vdot); - def_INSTR_TAB("111100 ? ????? ????? ??? ????? ????? ??", vwsmaccu); - def_INSTR_TAB("111101 ? ????? ????? ??? ????? ????? ??", vwsmacc); - def_INSTR_TAB("111110 ? ????? ????? ??? ????? ????? ??", vwsmaccsu); - def_INSTR_TAB("111111 ? ????? ????? ??? ????? ????? ??", vwsmaccus); - - return EXEC_ID_inv; - //longjmp_raise_intr(EX_II); -} - -def_THelper(vopm) { - def_INSTR_TAB("000000 ? ????? ????? ??? ????? ????? ??", vredsum); - def_INSTR_TAB("000001 ? ????? ????? ??? ????? ????? ??", vredand); - def_INSTR_TAB("000010 ? ????? ????? ??? ????? ????? ??", vredor); - def_INSTR_TAB("000011 ? ????? ????? ??? ????? ????? ??", vredxor); - def_INSTR_TAB("000100 ? ????? ????? ??? ????? ????? ??", vredminu); - def_INSTR_TAB("000101 ? ????? ????? ??? ????? ????? ??", vredmin); - def_INSTR_TAB("000110 ? ????? ????? ??? ????? ????? ??", vredmaxu); - def_INSTR_TAB("000111 ? ????? ????? ??? ????? ????? ??", vredmax); - - def_INSTR_TAB("010100 ? ????? ????? ??? ????? ????? ??", vmpopc); - def_INSTR_TAB("010101 ? ????? ????? ??? ????? ????? ??", vmfirst); - def_INSTR_TAB("010110 ? ????? ????? ??? ????? ????? ??", vmunaryo); - def_INSTR_TAB("010111 ? ????? ????? ??? ????? ????? ??", vcompress); - def_INSTR_TAB("011000 ? ????? ????? ??? ????? ????? ??", vmandnot); - def_INSTR_TAB("011001 ? ????? ????? ??? ????? ????? ??", vmand); - def_INSTR_TAB("011010 ? ????? ????? ??? ????? ????? ??", vmor); - def_INSTR_TAB("011011 ? ????? ????? ??? ????? ????? ??", vmxor); - def_INSTR_TAB("011100 ? ????? ????? ??? ????? ????? ??", vmornot); - def_INSTR_TAB("011101 ? ????? ????? ??? ????? ????? ??", vmnand); - def_INSTR_TAB("011110 ? ????? ????? ??? ????? ????? ??", vmnor); - def_INSTR_TAB("011111 ? ????? ????? ??? ????? ????? ??", vmxnor); - def_INSTR_TAB("100000 ? ????? ????? ??? ????? ????? ??", vdivu); - def_INSTR_TAB("100001 ? ????? ????? ??? ????? ????? ??", vdiv); - def_INSTR_TAB("100010 ? ????? ????? ??? ????? ????? ??", vremu); - def_INSTR_TAB("100011 ? ????? ????? ??? ????? ????? ??", vrem); - def_INSTR_TAB("100100 ? ????? ????? ??? ????? ????? ??", vmulhu); - def_INSTR_TAB("100101 ? ????? ????? ??? ????? ????? ??", vmul); - def_INSTR_TAB("100110 ? ????? ????? ??? ????? ????? ??", vmulhsu); - def_INSTR_TAB("100111 ? ????? ????? ??? ????? ????? ??", vmulh); - def_INSTR_TAB("101001 ? ????? ????? ??? ????? ????? ??", vmadd); - def_INSTR_TAB("101010 ? ????? ????? ??? ????? ????? ??", vnmsub); - def_INSTR_TAB("101101 ? ????? ????? ??? ????? ????? ??", vmacc); - def_INSTR_TAB("101111 ? ????? ????? ??? ????? ????? ??", vnmsac); - def_INSTR_TAB("110000 ? ????? ????? ??? ????? ????? ??", vwaddu); - def_INSTR_TAB("110001 ? ????? ????? ??? ????? ????? ??", vwadd); - def_INSTR_TAB("110010 ? ????? ????? ??? ????? ????? ??", vwsubu); - def_INSTR_TAB("110011 ? ????? ????? ??? ????? ????? ??", vwsub); - def_INSTR_TAB("110100 ? ????? ????? ??? ????? ????? ??", vwaddu_w); - def_INSTR_TAB("110101 ? ????? ????? ??? ????? ????? ??", vwadd_w); - def_INSTR_TAB("110110 ? ????? ????? ??? ????? ????? ??", vwsubu_w); - def_INSTR_TAB("110111 ? ????? ????? ??? ????? ????? ??", vwsub_w); - def_INSTR_TAB("111000 ? ????? ????? ??? ????? ????? ??", vwmulu); - def_INSTR_TAB("111010 ? ????? ????? ??? ????? ????? ??", vwmulsu); - def_INSTR_TAB("111011 ? ????? ????? ??? ????? ????? ??", vwmul); - def_INSTR_TAB("111100 ? ????? ????? ??? ????? ????? ??", vwmaccu); - def_INSTR_TAB("111101 ? ????? ????? ??? ????? ????? ??", vwnmacc); - def_INSTR_TAB("111110 ? ????? ????? ??? ????? ????? ??", vwmaccsu); - def_INSTR_TAB("111111 ? ????? ????? ??? ????? ????? ??", vwmaccus); - - return EXEC_ID_inv; -} - -def_THelper(vopf) { - // longjmp_raise_intr(EX_II); - return EXEC_ID_inv; -} - -def_THelper(vsetvl_dispatch) { - def_INSTR_TAB("??????? ????? ????? ??? ????? ????? ??", vsetvl); - return EXEC_ID_inv; -} - -// All RVV instructions decode start from here -def_THelper(OP_V) { // 10_101 - if (!vp_enable()) { - return EXEC_ID_inv; - } - switch (s->isa.instr.i.funct3) { - case 0 : s->src_vmode = SRC_VV; break; - case 1 : s->src_vmode = SRC_VV; break; - case 2 : s->src_vmode = SRC_VV; break; - case 3 : s->src_vmode = SRC_VI; break; - case 4 : s->src_vmode = SRC_VS; break; - case 5 : s->src_vmode = SRC_VS; break; - case 6 : s->src_vmode = SRC_VS; break; - case 7 : s->src_vmode = SRC_SI; break; - } - - s->v_width = 1 << vtype->vsew; - s->vm = s->isa.instr.v_opv1.v_vm; //1 for without mask; 0 for with mask - - /* - switch(s->isa.instr.i.funct3) { - EX(0x0, vopi) EX(0x1, vopf) EX(0x2, vopm) EX(0x3, vopi) EX(0x4, vopi) EX(0x5, vopf) EX(0x6, vopm) IDEX(0x7, vsetvl, vsetvl) - } - */ - def_INSTR_TAB("??????? ????? ????? 000 ????? ????? ??", vopi); - def_INSTR_TAB("??????? ????? ????? 001 ????? ????? ??", vopf); - def_INSTR_TAB("??????? ????? ????? 010 ????? ????? ??", vopm); - def_INSTR_TAB("??????? ????? ????? 011 ????? ????? ??", vopi); - def_INSTR_TAB("??????? ????? ????? 100 ????? ????? ??", vopi); - def_INSTR_TAB("??????? ????? ????? 101 ????? ????? ??", vopf); - def_INSTR_TAB("??????? ????? ????? 110 ????? ????? ??", vopm); - def_INSTR_IDTAB("??????? ????? ????? 111 ????? ????? ??", vsetvl, vsetvl_dispatch); - return EXEC_ID_inv; -} - -#endif // CONFIG_RVV_010 diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/exec.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/exec.h deleted file mode 100644 index 1f256ee..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvv/exec.h +++ /dev/null @@ -1,3 +0,0 @@ -#include "vcfg.h" -#include "vcompute.h" -#include "vldst.h" diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vcfg.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/vcfg.h deleted file mode 100644 index 236d1d1..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvv/vcfg.h +++ /dev/null @@ -1,37 +0,0 @@ -#include -#ifdef CONFIG_RVV_010 - -#include "cpu/exec.h" -#include "../local-include/vreg.h" -#include "../local-include/csr.h" -#include -#include "../local-include/intr.h" -#include "../local-include/rtl.h" -#include - -#define id_src (&s->src1) -#define id_src2 (&s->src2) -#define id_dest (&s->dest) -void vp_set_dirty(); - -def_EHelper(vsetvl) { - - vp_set_dirty(); - //vlmul+lg2(VLEN) <= vsew + vl - // previous decode does not load vals for us - rtl_lr(s, &(id_src->val), id_src1->reg, 4); - rtlreg_t vl = check_vsetvl(id_src2->val, id_src->val, id_src->reg==0); - rtlreg_t error = 1ul << 63; - if(vl==(uint64_t)-1) vcsr_write(IDXVTYPE, &error); //TODO: may cause error. - else vcsr_write(IDXVTYPE, &(id_src2->val)); - vcsr_write(IDXVL, &vl); - - rtl_sr(s, id_dest->reg, &vl, 8/*4*/); - - rtl_li(s, &(s->tmp_reg[0]), 0); - vcsr_write(IDXVSTART, &(s->tmp_reg[0])); - - // print_asm_template3(vsetvl); -} - -#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute.h deleted file mode 100644 index 76f47d8..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute.h +++ /dev/null @@ -1,532 +0,0 @@ -#include -#ifdef CONFIG_RVV_010 - -#include "vcompute_impl.h" - -// #define PERMInstr(opcode) permutation_instr(opcode, pc); -// static void permutation_instr(int opcode, vaddr_t* pc) { -// // only move/ext here, no slide -// switch (opcode) { -// case EXT_X_V : -// } -// } - -def_EHelper(vadd) { - ARTHI(ADD, SIGNED) - // print_asm_template3(vadd); -} - -def_EHelper(vsub) { - Assert(s->src_vmode != SRC_VI, "vsub.vi not supported\n"); - ARTHI(SUB, SIGNED) - // print_asm_template3(vsub); -} - -def_EHelper(vrsub) { - Assert(s->src_vmode != SRC_VV, "vrsub.vv not supported\n"); - ARTHI(RSUB, SIGNED) - // print_asm_template3(vrsub); -} - -def_EHelper(vminu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vmin) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vmaxu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vmax) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vand) { - ARTHI(AND, SIGNED) - // print_asm_template3(vand); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vor) { - ARTHI(OR, SIGNED) - // print_asm_template3(vor); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vxor) { - ARTHI(XOR, SIGNED) - // print_asm_template3(vxor); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vrgather) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vslideup) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vslidedown) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vadc) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vmadc) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vsbc) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vmsbc) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vmerge) { - ARTHI(MERGE, SIGNED) - // print_asm_template3(vmerge); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmseq) { - ARTHI_COMP(MSEQ, SIGNED) - // print_asm_template3(vmseq); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmsne) { - ARTHI_COMP(MSNE, SIGNED) - // print_asm_template3(vmsne); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmsltu) { - Assert(s->src_vmode != SRC_VI, "vmsltu not supprt SRC_VI\n"); - ARTHI_COMP(MSLTU, UNSIGNED) - // print_asm_template3(vmsltu); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmslt) { - Assert(s->src_vmode != SRC_VI, "vmslt not supprt SRC_VI\n"); - ARTHI_COMP(MSLT, SIGNED) - // print_asm_template3(vmslt); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmsleu) { - ARTHI_COMP(MSLEU, UNSIGNED) - // print_asm_template3(vmsleu); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmsle) { - ARTHI_COMP(MSLE, SIGNED); - // print_asm_template3(vmsle); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmsgtu) { - Assert(s->src_vmode != SRC_VV, "vmsgtu not support SRC_VV\n"); - ARTHI_COMP(MSGTU, UNSIGNED) - // print_asm_template3(vmsgtu); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmsgt) { - Assert(s->src_vmode != SRC_VV, "vmsgt not support SRC_VV\n"); - ARTHI_COMP(MSGT, SIGNED) - // print_asm_template3(vmsgt); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vsaddu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vsadd) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vssubu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vssub) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vaadd) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vsll) { - ARTHI(SLL, UNSIGNED) - // print_asm_template3(vsll); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vasub) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vsmul) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vsrl) { - ARTHI(SRL, UNSIGNED) - // print_asm_template3(vsrl); - //longjmp_raise_intr(EX_II); -} - -def_EHelper(vsra) { - ARTHI(SRA, UNSIGNED) - // print_asm_template3(vsra); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vssrl) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vssra) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vnsrl) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vnsra) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vnclipu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vnclip) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwredsumu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwredsum) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vdotu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vdot) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwsmaccu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwsmacc) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwsmaccsu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwsmaccus) { - longjmp_raise_intr(EX_II); -} - - -//op-m -def_EHelper(vredsum) { - REDInstr(REDSUM, SIGNED); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vredand) { - REDInstr(REDAND, UNSIGNED); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vredor) { - REDInstr(REDOR, UNSIGNED); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vredxor) { - REDInstr(REDXOR, UNSIGNED); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vredminu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vredmin) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vredmaxu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vredmax) { - longjmp_raise_intr(EX_II); -} - - - - -def_EHelper(vmpopc) { - // longjmp_raise_intr(EX_II); - if(vstart->val != 0) - longjmp_raise_intr(EX_II); - - int vlmax = ((VLEN >> 3) >> vtype->vsew) << vtype->vlmul; - rtl_li(s, s1, 0); - for(int idx = 0; idx < vlmax; idx ++) { - // mask - rtlreg_t mask = get_mask(0, idx, vtype->vsew, vtype->vlmul); - if(s->vm == 0 && mask == 0) - continue; - - *s0 = get_mask(id_src2->reg, idx, vtype->vsew, vtype->vlmul); - *s0 &= 1; - - if(*s0 == 1) - rtl_addi(s, s1, s1, 1); - } - rtl_sr(s, id_dest->reg, s1, 4); -} - -def_EHelper(vmfirst) { - // longjmp_raise_intr(EX_II); - if(vstart->val != 0) - longjmp_raise_intr(EX_II); - - int vlmax = ((VLEN >> 3) >> vtype->vsew) << vtype->vlmul; - int idx; - for(idx = 0; idx < vlmax; idx ++) { - *s0 = get_mask(id_src2->reg, idx, vtype->vsew, vtype->vlmul); - *s0 &= 1; - if(*s0 == 1) break; - } - if(idx < vlmax) - rtl_li(s, s1, idx); - else - rtl_li(s, s1, -1); - rtl_sr(s, id_dest->reg, s1, 4); -} - -def_EHelper(vmunaryo) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vcompress) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vmandnot) { - MASKINSTR(MANDNOT) - // print_asm_template3(vmandnot); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmand) { - MASKINSTR(MAND) - // print_asm_template3(vmand); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmor) { - MASKINSTR(MOR) - // print_asm_template3(vmor); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmxor) { - MASKINSTR(MXOR) - // print_asm_template3(vmxor); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmornot) { - MASKINSTR(MORNOT) - // print_asm_template3(vmornot); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmnand) { - MASKINSTR(MNAND) - // print_asm_template3(vmnand); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmnor) { - MASKINSTR(MNOR) - // print_asm_template3(vmnor); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmxnor) { - MASKINSTR(MXNOR); - // print_asm_template3(vmnor); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vdivu) { - Assert(s->src_vmode != SRC_VI, "vdivu does not support SRC_VI\n"); - ARTHI(DIVU, UNSIGNED) - // print_asm_template3(vdivu); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vdiv) { - Assert(s->src_vmode != SRC_VI, "vdiv does not support SRC_VI\n"); - ARTHI(DIV, SIGNED) - // print_asm_template3(vdiv); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vremu) { - Assert(s->src_vmode != SRC_VI, "vremu does not support SRC_VI\n"); - ARTHI(REMU, UNSIGNED) - // print_asm_template3(vremu); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vrem) { - Assert(s->src_vmode != SRC_VI, "vrem does not support SRC_VI\n"); - ARTHI(REM, SIGNED) - // print_asm_template3(vrem); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmulhu) { - Assert(s->src_vmode != SRC_VI, "vmulhu does not support SRC_VI\n"); - ARTHI(MULHU, UNSIGNED) - // print_asm_template3(vmulhu); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmul) { - Assert(s->src_vmode != SRC_VI, "vmul does not support SRC_VI\n"); - ARTHI(MUL, SIGNED) - // print_asm_template3(vmul); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmulhsu) { - Assert(s->src_vmode != SRC_VI, "vmulhsu does not support SRC_VI\n"); - ARTHI(MULHSU, UNSIGNED) - // print_asm_template3(vmulshu); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmulh) { - Assert(s->src_vmode != SRC_VI, "vmulh does not support SRC_VI\n"); - ARTHI(MULH, SIGNED) - // print_asm_template3(vmulh); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmadd) { - ARTHI(MADD, SIGNED) - // print_asm_template3(vmadd); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vnmsub) { - ARTHI(NMSUB, SIGNED) - // print_asm_template3(vnmsub); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vmacc) { - ARTHI(MACC, SIGNED) - // print_asm_template3(vmacc); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vnmsac) { - ARTHI(NMSAC, SIGNED) - // print_asm_template3(vmacc); - // longjmp_raise_intr(EX_II); -} - -def_EHelper(vwaddu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwadd) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwsubu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwsub) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwaddu_w) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwadd_w) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwsubu_w) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwsub_w) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwmulu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwmulsu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwmul) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwmaccu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwnmacc) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwmaccsu) { - longjmp_raise_intr(EX_II); -} - -def_EHelper(vwmaccus) { - longjmp_raise_intr(EX_II); -} - - -#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.c b/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.c deleted file mode 100644 index 1150d5c..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.c +++ /dev/null @@ -1,254 +0,0 @@ -#include -#ifdef CONFIG_RVV_010 - -#include "vcompute_impl.h" - -#undef s0 -#undef s1 - - -#define s0 (&tmp_reg[0]) -#define s1 (&tmp_reg[1]) - - - -void arthimetic_instr(int opcode, int is_signed, int dest_reg, Decode *s) { - vp_set_dirty(); - int idx; - for(idx = vstart->val; idx < vl->val; idx ++) { - // mask - rtlreg_t mask = get_mask(0, idx, vtype->vsew, vtype->vlmul); - if(s->vm == 0) { - // merge instr will exec no matter mask or not - // masked and mask off exec will left dest unmodified. - if(opcode != MERGE && mask==0) continue; - } else if(opcode == MERGE) { - mask = 1; // merge(mv) get the first operand (s1, rs1, imm); - } - - // operand - vs2 - get_vreg(id_src2->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); - if(is_signed) rtl_sext(s, s0, s0, 1 << vtype->vsew); - - // operand - s1 / rs1 / imm - switch (s->src_vmode) { - case SRC_VV : - get_vreg(id_src->reg, idx, s1, vtype->vsew, vtype->vlmul, is_signed, 1); - if(is_signed) rtl_sext(s, s1, s1, 1 << vtype->vsew); - break; - case SRC_VS : - rtl_lr(s, &(id_src->val), id_src1->reg, 4); - rtl_mv(s, s1, &id_src->val); - if(is_signed) rtl_sext(s, s1, s1, 1 << vtype->vsew); - break; - case SRC_VI : - if(is_signed) rtl_li(s, s1, s->isa.instr.v_opv2.v_simm5); - else rtl_li(s, s1, s->isa.instr.v_opv3.v_imm5 ); - break; - } - - // op - switch (opcode) { - case ADD : rtl_add(s, s1, s0, s1); break; - case SUB : rtl_sub(s, s1, s0, s1); break; - case RSUB: rtl_sub(s, s1, s1, s0); break; - case AND : rtl_and(s, s1, s0, s1); break; - case OR : rtl_or(s, s1, s0, s1); break; - case XOR : rtl_xor(s, s1, s0, s1); break; - case SLL : - rtl_andi(s, s1, s1, s->v_width*8-1); //low lg2(SEW) is valid - //rtl_sext(s0, s0, 8 - (1 << vtype->vsew)); //sext first - rtl_shl(s, s1, s0, s1); break; - case SRL : - rtl_andi(s, s1, s1, s->v_width*8-1); //low lg2(SEW) - rtl_shr(s, s1, s0, s1); break; - case SRA : - rtl_andi(s, s1, s1, s->v_width*8-1); //low lg2(SEW) - rtl_sext(s, s0, s0, s->v_width); - rtl_sar(s, s1, s0, s1); break; - case MULHU : - *s1 = (uint64_t)(((__uint128_t)(*s0) * (__uint128_t)(*s1))>>(s->v_width*8)); - break; - case MUL : rtl_mulu_lo(s, s1, s0, s1); break; - case MULHSU : - rtl_sext(s, t0, s0, s->v_width); - rtl_sari(s, t0, t0, s->v_width*8-1); - rtl_and(s, t0, s1, t0); - *s1 = (uint64_t)(((__uint128_t)(*s0) * (__uint128_t)(*s1))>>(s->v_width*8)); - rtl_sub(s, s1, s1, t0); - break; - case MULH : - rtl_sext(s, s0, s0, s->v_width); - rtl_sext(s, s1, s1, s->v_width); - *s1 = (uint64_t)(((__int128_t)(sword_t)(*s0) * (__int128_t)(sword_t)(*s1))>>(s->v_width*8)); - break; - case MACC : - rtl_mulu_lo(s, s1, s0, s1); - get_vreg(id_dest->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); - rtl_add(s, s1, s1, s0); - break; - case NMSAC : - rtl_mulu_lo(s, s1, s0, s1); - get_vreg(id_dest->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); - rtl_sub(s, s1, s0, s1); - break; - case MADD : - get_vreg(id_dest->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); - rtl_mulu_lo(s, s1, s0, s1); - get_vreg(id_src2->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); - rtl_add(s, s1, s1, s0); - break; - case NMSUB : - get_vreg(id_dest->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); - rtl_mulu_lo(s, s1, s1, s0); - get_vreg(id_src2->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); - rtl_sub(s, s1, s0, s1); - break; - case DIVU : - if(*s1 == 0) rtl_li(s, s1, ~0lu); - else rtl_divu_q(s, s1, s0, s1); - break; - case DIV : - rtl_sext(s, s0, s0, s->v_width); - rtl_sext(s, s1, s1, s->v_width); - if(*s1 == 0) rtl_li(s, s1, ~0lu); - else if(*s0 == 0x8000000000000000LL && *s1 == -1) //may be error - rtl_mv(s, s1, s0); - else rtl_divs_q(s, s1, s0, s1); - break; - case REMU : - if (*s1 == 0) rtl_mv(s, s1, s0); - else rtl_divu_r(s, s1, s0, s1); - break; - case REM : - rtl_sext(s, s0, s0, s->v_width); - rtl_sext(s, s1, s1, s->v_width); - if(*s1 == 0) rtl_mv(s, s1, s0); - else if(*s1 == 0x8000000000000000LL && *s1 == -1) //may be error - rtl_li(s, s1, 0); - else rtl_divs_r(s, s1, s0, s1); - break; - case MERGE : rtl_mux(s, s1, &mask, s1, s0); break; - case MSEQ : rtl_setrelop(s, RELOP_EQ, s1, s0, s1); break; - case MSNE : rtl_setrelop(s, RELOP_NE, s1, s0, s1); break; - case MSLTU : rtl_setrelop(s, RELOP_LTU, s1, s0, s1); break; - case MSLT : rtl_setrelop(s, RELOP_LT, s1, s0, s1); break; - case MSLEU : rtl_setrelop(s, RELOP_LEU, s1, s0, s1); break; - case MSLE : rtl_setrelop(s, RELOP_LE, s1, s0, s1); break; - case MSGTU : rtl_setrelop(s, RELOP_GTU, s1, s0, s1); break; - case MSGT : rtl_setrelop(s, RELOP_GT, s1, s0, s1); break; - } - - // store to vrf - if(dest_reg == 1) - set_mask(id_dest->reg, idx, *s1, vtype->vsew, vtype->vlmul); - else - set_vreg(id_dest->reg, idx, *s1, vtype->vsew, vtype->vlmul, 1); - } - - // idx gt the vl need to be zeroed. - // int vlmax = ((VLEN >> 3) >> vtype->vsew) << vtype->vlmul; - // for(idx = vl->val; idx < vlmax; idx ++) { - // rtl_li(s1, 0); - // if(dest_reg == 1) - // set_mask(id_dest->reg, idx, s1, vtype->vsew, vtype->vlmul); - // else - // set_vreg(id_dest->reg, idx, s1, vtype->vsew, vtype->vlmul, 1); - // } - - // TODO: the idx larger than vl need reset to zero. - rtl_li(s, s0, 0); - vcsr_write(IDXVSTART, s0); -} - - -void mask_instr(int opcode, Decode *s) { - vp_set_dirty(); - int idx; - for(idx = vstart->val; idx < vl->val; idx++) { - // operand - vs2 - *s0 = get_mask(id_src2->reg, idx, vtype->vsew, vtype->vlmul); // unproper usage of s0 - *s0 &= 1; // only LSB - - // operand - s1 - *s1 = get_mask(id_src->reg, idx, vtype->vsew, vtype->vlmul); // unproper usage of s1 - *s1 &= 1; // only LSB - - // op - switch (opcode) { - case MAND : rtl_and(s, s1, s0, s1); break; - case MNAND : rtl_and(s, s1, s0, s1); - *s1 = !(*s1); break; - case MANDNOT : *s1 = !(*s1); // unproper usage of not - rtl_and(s, s1, s0, s1); break; - case MXOR : rtl_xor(s, s1, s0, s1); break; - case MOR : rtl_or(s, s1, s0, s1); break; - case MNOR : rtl_or(s, s1, s0, s1); - *s1 = !(*s1); break; - case MORNOT : *s1 = !(*s1); - rtl_or(s, s1, s0, s1); break; - case MXNOR : rtl_xor(s, s1, s0, s1); - *s1 = !(*s1); break; - default : longjmp_raise_intr(EX_II); - } - // store to vrf - *s1 &= 1; // make sure the LSB - set_mask(id_dest->reg, idx, *s1, vtype->vsew, vtype->vlmul); - } - - int vlmax = ((VLEN >> 3) >> vtype->vsew) << vtype->vlmul; - rtl_li(s, s1, 0); - for( idx = vl->val; idx < vlmax; idx++) { - set_mask(id_dest->reg, idx, *s1, vtype->vsew, vtype->vlmul); - } - vcsr_write(IDXVSTART, s1); -} - - -void reduction_instr(int opcode, int is_signed, Decode *s) { - vp_set_dirty(); - // TODO: check here: does not need align?? - get_vreg(id_src->reg, 0, s1, vtype->vsew, vtype->vlmul, is_signed, 0); - if(is_signed) rtl_sext(s, s1, s1, 1 << vtype->vsew); - - int idx; - for(idx = vstart->val; idx < vl->val; idx ++) { - rtlreg_t mask = get_mask(0, idx, vtype->vsew, vtype->vlmul); - if(s->vm == 0) { - // merge instr will exec no matter mask or not - // masked and mask off exec will left dest unmodified. - if(opcode != MERGE && mask==0) continue; - } else if(opcode == MERGE) { - mask = 1; // merge(mv) get the first operand (s1, rs1, imm); - } - // operand - vs2 - get_vreg(id_src2->reg, idx, s0, vtype->vsew, vtype->vlmul, is_signed, 1); - if(is_signed) rtl_sext(s, s0, s0, 1 << vtype->vsew); - - - // op - switch (opcode) { - case REDSUM : rtl_add(s, s1, s0, s1); break; - case REDOR : rtl_or(s, s1, s0, s1); break; - case REDAND : rtl_and(s, s1, s0, s1); break; - case REDXOR : rtl_xor(s, s1, s0, s1); break; - // case MIN : - // MINU is hard to achieve parallel - } - - } - set_vreg(id_dest->reg, 0, *s1, vtype->vsew, vtype->vlmul, 0); - - int vlmax = ((VLEN >> 3) >> vtype->vsew); - for(int i=1; ireg, i, 0, vtype->vsew, vtype->vlmul, 0); - } -} - -// dirty job here -#undef s0 -#undef s1 -#define s0 &ls0 -#define s1 &ls1 - -#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.h deleted file mode 100644 index 643653a..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvv/vcompute_impl.h +++ /dev/null @@ -1,52 +0,0 @@ -#include -#ifdef CONFIG_RVV_010 - -#ifndef __RISCV64_VCOMPUTE_IMPL_H__ -#define __RISCV64_VCOMPUTE_IMPL_H__ - -#include "cpu/exec.h" -#include "vreg.h" -#include "../local-include/csr.h" -#include -#include "../local-include/intr.h" -#include "../local-include/rtl.h" -#include - -#define id_src (&s->src1) -#define id_src2 (&s->src2) -#define id_dest (&s->dest) - - - -enum op_t { - ADD, SUB, RSUB, MINU, MIN, MAXU, MAX, AND, - OR, XOR, RGATHER, SLIDEUP, SLIDEDOWN, ADC, MADC, SBC, - MSBC, MERGE, MSEQ, MSNE, MSLTU, MSLT, MSLEU, MSLE, - MSGTU, MSGT, SADDU, SADD, SSUBU, SSUB, AADD, SLL, - ASUB, SMUL, SRL, SRA, SSRL, SSRA, NSRL, NSRA, - NCLIPU, NCLIP, WREDSUMU, WREDSUM, DOTU, DOT, WSMACCU, WSMACC, - WSMAXXSU, WSMACCUS, - - REDSUM, REDAND, REDOR, REDXOR, REDMINU, REDMIN, REDMAXU, REDMAX, - EXT_X_V, MV_S_X, SLIDE1UP, SLIDE1DOWN, MPOPC, VMFIRST, MUNARYO, COMPRESS, - MANDNOT, MAND, MOR, MXOR, MORNOT, MNAND, MNOR, MXNOR, - DIVU, DIV, REMU, REM, MULHU, MUL, MULHSU, MULH, - MADD, NMSUB, MACC, NMSAC, WADDU, WADD, WSUBU, WSUB, - WADDU_W, WADD_W, WSUBU_W, WSUB_W, WMULU, WMULSU, WMUL, WMACCU, - WNMACC, WMACCSU, WMACCUS, -}; -void vp_set_dirty(); -void arthimetic_instr(int opcode, int is_signed, int dest_reg, Decode *s); -void mask_instr(int opcode, Decode *s); -void reduction_instr(int opcode, int is_signed, Decode *s); - -#define ARTHI(opcode, is_signed) arthimetic_instr(opcode, is_signed, 0, s); -#define ARTHI_COMP(opcode, is_signed) arthimetic_instr(opcode, is_signed, 1, s); - -#define MASKINSTR(opcode) mask_instr(opcode, s); - -#define REDInstr(opcode, is_signed) reduction_instr(opcode, is_signed, s); - -#endif // __RISCV64_VCOMPUTE_IMPL_H__ - -#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst.h deleted file mode 100644 index d99a73a..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst.h +++ /dev/null @@ -1,255 +0,0 @@ -#include -#ifdef CONFIG_RVV_010 - -#include "vldst_impl.h" - - -def_EHelper(vlduu) { //unit-strided - /* - switch (s->v_width) { - case 0 : print_asm_template3(vle.v); - case 1 : print_asm_template3(vlbu.v); - case 2 : print_asm_template3(vlhu.v); - case 4 : print_asm_template3(vlwu.v); - } - */ - VLD(MODE_UNIT, UNSIGNED, s, MMU_DIRECT) - //print_asm_template3(vlduu); -} - -def_EHelper(vldsu) { //strided unsigned - /* - switch (s->v_width) { - case 0 : print_asm_template3(vlse.v); - case 1 : print_asm_template3(vlsbu.v); - case 2 : print_asm_template3(vlshu.v); - case 4 : print_asm_template3(vlswu.v); - }*/ - VLD(MODE_STRIDED, UNSIGNED, s, MMU_DIRECT) - //print_asm_template3(vldsu); -} - -def_EHelper(vldxu) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vlxe.v); - case 1 : print_asm_template3(vlxbu.v); - case 2 : print_asm_template3(vlxhu.v); - case 4 : print_asm_template3(vlxwu.v); - } */ - VLD(MODE_INDEXED, UNSIGNED, s, MMU_DIRECT) - //print_asm_template3(vldxu); -} - -def_EHelper(vldus) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vle.v); - case 1 : print_asm_template3(vlb.v); - case 2 : print_asm_template3(vlh.v); - case 4 : print_asm_template3(vlw.v); - }*/ - VLD(MODE_UNIT, SIGNED, s, MMU_DIRECT) - //print_asm_template3(vldus); -} - -def_EHelper(vldss) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vlse.v); - case 1 : print_asm_template3(vlsb.v); - case 2 : print_asm_template3(vlsh.v); - case 4 : print_asm_template3(vlsw.v); - }*/ - VLD(MODE_STRIDED, SIGNED, s, MMU_DIRECT) - //print_asm_template3(vldss); -} - -def_EHelper(vldxs) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vlxe.v); - case 1 : print_asm_template3(vlxb.v); - case 2 : print_asm_template3(vlxh.v); - case 4 : print_asm_template3(vlxw.v); - }*/ - VLD(MODE_INDEXED, SIGNED, s, MMU_DIRECT) - //print_asm_template3(vldxs); -} - - - - -def_EHelper(vstu) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vse.v); - case 1 : print_asm_template3(vsb.v); - case 2 : print_asm_template3(vsh.v); - case 4 : print_asm_template3(vsw.v); - }*/ - VST(MODE_UNIT, MMU_DIRECT) - //print_asm_template3(vstu); -} - -def_EHelper(vsts) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vsse.v); - case 1 : print_asm_template3(vssb.v); - case 2 : print_asm_template3(vssh.v); - case 4 : print_asm_template3(vssw.v); - }*/ - VST(MODE_STRIDED, MMU_DIRECT) - //print_asm_template3(vsts); -} - -def_EHelper(vstx) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vsxe.v); - case 1 : print_asm_template3(vsxb.v); - case 2 : print_asm_template3(vsxh.v); - case 4 : print_asm_template3(vsxw.v); - }*/ - VST(MODE_INDEXED, MMU_DIRECT) - //print_asm_template3(vstx); -} - -def_EHelper(vstxu) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vsuxe.v); - case 1 : print_asm_template3(vsuxb.v); - case 2 : print_asm_template3(vsuxh.v); - case 4 : print_asm_template3(vsuxw.v); - }*/ - VST(MODE_INDEXED, MMU_DIRECT) - //print_asm_template3(vstxu); -} - -def_EHelper(vlduu_mmu) { //unit-strided - /* - switch (s->v_width) { - case 0 : print_asm_template3(vle.v); - case 1 : print_asm_template3(vlbu.v); - case 2 : print_asm_template3(vlhu.v); - case 4 : print_asm_template3(vlwu.v); - } - */ - VLD(MODE_UNIT, UNSIGNED, s, MMU_TRANSLATE) - //print_asm_template3(vlduu); -} - -def_EHelper(vldsu_mmu) { //strided unsigned - /* - switch (s->v_width) { - case 0 : print_asm_template3(vlse.v); - case 1 : print_asm_template3(vlsbu.v); - case 2 : print_asm_template3(vlshu.v); - case 4 : print_asm_template3(vlswu.v); - }*/ - VLD(MODE_STRIDED, UNSIGNED, s, MMU_TRANSLATE) - //print_asm_template3(vldsu); -} - -def_EHelper(vldxu_mmu) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vlxe.v); - case 1 : print_asm_template3(vlxbu.v); - case 2 : print_asm_template3(vlxhu.v); - case 4 : print_asm_template3(vlxwu.v); - } */ - VLD(MODE_INDEXED, UNSIGNED, s, MMU_TRANSLATE) - //print_asm_template3(vldxu); -} - -def_EHelper(vldus_mmu) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vle.v); - case 1 : print_asm_template3(vlb.v); - case 2 : print_asm_template3(vlh.v); - case 4 : print_asm_template3(vlw.v); - }*/ - VLD(MODE_UNIT, SIGNED, s, MMU_TRANSLATE) - //print_asm_template3(vldus); -} - -def_EHelper(vldss_mmu) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vlse.v); - case 1 : print_asm_template3(vlsb.v); - case 2 : print_asm_template3(vlsh.v); - case 4 : print_asm_template3(vlsw.v); - }*/ - VLD(MODE_STRIDED, SIGNED, s, MMU_TRANSLATE) - //print_asm_template3(vldss); -} - -def_EHelper(vldxs_mmu) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vlxe.v); - case 1 : print_asm_template3(vlxb.v); - case 2 : print_asm_template3(vlxh.v); - case 4 : print_asm_template3(vlxw.v); - }*/ - VLD(MODE_INDEXED, SIGNED, s, MMU_TRANSLATE) - //print_asm_template3(vldxs); -} - - - - -def_EHelper(vstu_mmu) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vse.v); - case 1 : print_asm_template3(vsb.v); - case 2 : print_asm_template3(vsh.v); - case 4 : print_asm_template3(vsw.v); - }*/ - VST(MODE_UNIT, MMU_TRANSLATE) - //print_asm_template3(vstu); -} - -def_EHelper(vsts_mmu) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vsse.v); - case 1 : print_asm_template3(vssb.v); - case 2 : print_asm_template3(vssh.v); - case 4 : print_asm_template3(vssw.v); - }*/ - VST(MODE_STRIDED, MMU_TRANSLATE) - //print_asm_template3(vsts); -} - -def_EHelper(vstx_mmu) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vsxe.v); - case 1 : print_asm_template3(vsxb.v); - case 2 : print_asm_template3(vsxh.v); - case 4 : print_asm_template3(vsxw.v); - }*/ - VST(MODE_INDEXED, MMU_TRANSLATE) - //print_asm_template3(vstx); -} - -def_EHelper(vstxu_mmu) { - /* - switch (s->v_width) { - case 0 : print_asm_template3(vsuxe.v); - case 1 : print_asm_template3(vsuxb.v); - case 2 : print_asm_template3(vsuxh.v); - case 4 : print_asm_template3(vsuxw.v); - }*/ - VST(MODE_INDEXED, MMU_TRANSLATE) - //print_asm_template3(vstxu); -} - -#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.c b/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.c deleted file mode 100644 index 7ae859d..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.c +++ /dev/null @@ -1,119 +0,0 @@ -#include -#ifdef CONFIG_RVV_010 - -#include "vldst_impl.h" -void vp_set_dirty(); - -void vld(int mode, int is_signed, Decode *s, int mmu_mode) { - vp_set_dirty(); - //TODO: raise instr when decinfo.v_width > SEW - //v_width 0 -> none SEW 0 -> 8 - // 1 -> 8 1 -> 16 - // 2 -> 16 2 -> 32 - // 4 -> 32 3 -> 64 - s->v_width = s->v_width == 0 ? 1 << vtype->vsew : s->v_width; - bool error = (s->v_width * 8) > (8 << vtype->vsew); - if(error) { - printf("vld encounter an instr: v_width > SEW: mode::%d is_signed:%d\n", mode, is_signed); - longjmp_raise_intr(EX_II); - } - // previous decode does not load vals for us - rtl_lr(s, &(s->src1.val), s->src1.reg, 4); - - word_t idx; - rtl_mv(s, &(tmp_reg[0]), &(s->src1.val)); - for(idx = vstart->val; idx < vl->val; idx ++) { - //TODO: SEW now only supports LE 64bit - //TODO: need special rtl function, but here ignore it - if(mode == MODE_INDEXED) { - rtl_mv(s, &(tmp_reg[0]), &(s->src1.val)); - get_vreg(id_src2->reg, idx, &tmp_reg[3], vtype->vsew, vtype->vlmul, 1, 1); - rtl_add(s, &tmp_reg[0], &tmp_reg[0], &tmp_reg[3]); - } - - // mask - rtlreg_t mask = get_mask(0, idx, vtype->vsew, vtype->vlmul); - - // op - if(s->vm != 0 || mask != 0) { - rtl_lm(s, &tmp_reg[1], &tmp_reg[0], 0, s->v_width, mmu_mode); - if (is_signed) rtl_sext(s, &tmp_reg[1], &tmp_reg[1], s->v_width); - - set_vreg(id_dest->reg, idx, *&tmp_reg[1], vtype->vsew, vtype->vlmul, 1); - } - - switch (mode) { - case MODE_UNIT : rtl_addi(s, &tmp_reg[0], &tmp_reg[0], s->v_width); break; - case MODE_STRIDED: rtl_add(s, &tmp_reg[0], &tmp_reg[0], &id_src2->val) ; break; - } - } - - // TODO: the idx larger than vl need reset to zero. - rtl_li(s, &tmp_reg[0], 0); - vcsr_write(IDXVSTART, &tmp_reg[0]); -} - -void vst(int mode, Decode *s, int mmu_mode) { - vp_set_dirty(); - //TODO: raise instr when decinfo.v_width > SEW - //v_width 0 -> none SEW 0 -> 8 - // 1 -> 8 1 -> 16 - // 2 -> 16 2 -> 32 - // 4 -> 32 3 -> 64 - s->v_width = s->v_width == 0 ? 1 << vtype->vsew : s->v_width; - bool error = (s->v_width * 8) < (8 << vtype->vsew); - if(error) { - printf("vst encounter an instr: v_width < SEW: mode::%d\n", mode); - longjmp_raise_intr(EX_II); - } - - word_t idx; - rtl_mv(s, &tmp_reg[0], &id_src->val); - for(idx = vstart->val; idx < vl->val; idx ++) { - //TODO: SEW now only supports LE 64bit - //TODO: need special rtl function, but here ignore it - if(mode == MODE_INDEXED) { - rtl_mv(s, &tmp_reg[0], &id_src->val); - get_vreg(id_src2->reg, idx, &tmp_reg[3], vtype->vsew, vtype->vlmul, 1, 1); - rtl_add(s, &tmp_reg[0], &tmp_reg[0], &tmp_reg[3]); - // switch(vtype->vsew) { - // case 0 : rtl_addi(&&tmp_reg[0], &&tmp_reg[0], vreg_b(id_src2->reg, idx)); break; - // case 1 : rtl_addi(&&tmp_reg[0], &&tmp_reg[0], vreg_s(id_src2->reg, idx)); break; - // case 2 : rtl_addi(&&tmp_reg[0], &&tmp_reg[0], vreg_i(id_src2->reg, idx)); break; - // case 3 : rtl_addi(&&tmp_reg[0], &&tmp_reg[0], vreg_l(id_src2->reg, idx)); break; - // } - } - - // mask - // uint8_t mask; - // switch (vtype->vsew) { - // case 0 : mask = (uint8_t)(vreg_b(0, idx) & 0x1); break; - // case 1 : mask = (uint8_t)(vreg_s(0, idx) & 0x1); break; - // case 2 : mask = (uint8_t)(vreg_i(0, idx) & 0x1); break; - // case 3 : mask = (uint8_t)(vreg_l(0, idx) & 0x1); break; - // default: mask = 0; - // } - rtlreg_t mask = get_mask(0, idx, vtype->vsew, vtype->vlmul); - - // op - if(s->vm != 0 || mask != 0) { - // switch (vtype->vsew) { - // case 0 : rtl_li(&&tmp_reg[1], vreg_b(id_dest->reg, idx)); break; - // case 1 : rtl_li(&&tmp_reg[1], vreg_s(id_dest->reg, idx)); break; - // case 2 : rtl_li(&&tmp_reg[1], vreg_i(id_dest->reg, idx)); break; - // case 3 : rtl_li(&&tmp_reg[1], vreg_l(id_dest->reg, idx)); break; - // } - get_vreg(id_dest->reg, idx, &tmp_reg[1], vtype->vsew, vtype->vlmul, 0, 1); - rtl_sm(s, &tmp_reg[0], &tmp_reg[1], 0, s->v_width, mmu_mode); - } - - switch (mode) { - case MODE_UNIT : rtl_addi(s, &tmp_reg[0], &tmp_reg[0], s->v_width); break; - case MODE_STRIDED: rtl_add(s, &tmp_reg[0], &tmp_reg[0], &id_src2->val) ; break; - } - } - // TODO: the idx larger than vl need reset to zero. - vstart->val = 0; -} - -#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.h deleted file mode 100644 index db3c6e3..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvv/vldst_impl.h +++ /dev/null @@ -1,33 +0,0 @@ -#include -#ifdef CONFIG_RVV_010 - -#ifndef __RISCV64_VLDST_IMPL_H__ -#define __RISCV64_VLDST_IMPL_H__ - -#include "cpu/exec.h" -#include "vreg.h" -#include "../local-include/csr.h" -#include "../local-include/rtl.h" -#include -#include "../local-include/intr.h" -#include - -#define id_src (&s->src1) -#define id_src2 (&s->src2) -#define id_dest (&s->dest) - -// vector load -#define MODE_UNIT 0 -#define MODE_STRIDED 1 -#define MODE_INDEXED 2 - -#define VLD(mode, is_signed, s, mmu_mode) vld(mode, is_signed, s, mmu_mode); - -void vld(int mode, int is_signed, Decode *s, int mmu_mode); -// vector store -#define VST(mode, mmu_mode) vst(mode, s, mmu_mode); -void vst(int mode, Decode *s, int mmu_mode); - -#endif // __RISCV64_VLDST_IMPL_H__ - -#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vreg.h b/libraries/NEMU/src/isa/riscv64/instr/rvv/vreg.h deleted file mode 100644 index 213a12b..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvv/vreg.h +++ /dev/null @@ -1,63 +0,0 @@ -#include -#ifdef CONFIG_RVV_010 - -#ifndef __RISCV64_VREG_H__ -#define __RISCV64_VREG_H__ - -#include "common.h" - -#define VLEN 256 -#define VLENLG 8 -#define MAXELEN 64 -#define VENUM64 (VLEN/64) -#define VENUM32 (VLEN/32) -#define VENUM16 (VLEN/16) -#define VENUM8 (VLEN/8) -#define SLEN 256 - -static inline int check_reg_index1(int index) { - assert(index >= 0 && index < 32); - return index; -} - -static inline int check_reg_index2(int index2, int elen) { - assert(index2 >= 0 && index2 < VLEN/elen); - return index2; -} - -// #define vreg_len(index1, index2, elen) (cpu.vr[check_reg_index1(index1)]._64[check_reg_index2(index2, elen)]) -#define vreg_ll(index) (cpu.vr[check_reg_index1(index)]) -// #define vreg_l(index1, index2) vreg_len(index1, index2, 64) -// #define vreg_i(index1, index2) vreg_len(index1, index2, 32) -// #define vreg_s(index1, index2) vreg_len(index1, index2, 16) -// #define vreg_b(index1, index2) vreg_len(index1, index2, 8) -#define vreg_l(index1, index2) (cpu.vr[check_reg_index1(index1)]._64[check_reg_index2(index2, 64)]) -#define vreg_i(index1, index2) (cpu.vr[check_reg_index1(index1)]._32[check_reg_index2(index2, 32)]) -#define vreg_s(index1, index2) (cpu.vr[check_reg_index1(index1)]._16[check_reg_index2(index2, 16)]) -#define vreg_b(index1, index2) (cpu.vr[check_reg_index1(index1)]._8[check_reg_index2(index2, 8)]) - -rtlreg_t get_mask(int reg, int idx, uint64_t vsew, uint64_t vlmul); - -static inline const char * vreg_name(int index, int width) { - extern const char * vregsl[]; - assert(index >= 0 && index < 32); - return vregsl[index]; -} - -void get_vreg(uint64_t reg, int idx, rtlreg_t *dst, uint64_t vsew, uint64_t vlmul, int is_signed, int needAlign); -void set_vreg(uint64_t reg, int idx, rtlreg_t src, uint64_t vsew, uint64_t vlmul, int needAlgin); - -void longjmp_raise_intr(uint32_t foo); - -#define SRC_VV 0 -#define SRC_VI 1 -#define SRC_VS 2 -#define SRC_SI 3 -#define UNSIGNED 0 -#define SIGNED 1 - -void vcsr_write(uint32_t addr, rtlreg_t *src); - -#endif //__RISCV64_VREG_H__ - -#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/rvv/vreg_impl.c b/libraries/NEMU/src/isa/riscv64/instr/rvv/vreg_impl.c deleted file mode 100644 index f58c974..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/rvv/vreg_impl.c +++ /dev/null @@ -1,106 +0,0 @@ -#include -#ifdef CONFIG_RVV_010 - -#include "vreg.h" -#include "../local-include/csr.h" -#include -#include "isa.h" - -const char * vregsl[] = { - "v0 ", "v1 ", "v2 ", "v3 ", "v4 ", "v5 ", "v6 ", "v7 ", - "v8 ", "v9 ", "v10", "v11", "v12", "v13", "v14", "v15", - "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", - "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31", -}; - - -rtlreg_t check_vsetvl(rtlreg_t vtype_req, rtlreg_t vl_req, bool max_req) { - vtype_t vt = (vtype_t )vtype_req; - rtlreg_t vl_group = ((VLEN >> 3) >> vt.vsew) << vt.vlmul; - if(max_req == true) { - return vl_group; - }else if(vt.vsew > 3) { //check if max-len supported - return (uint64_t)-1; //return 0 means error, including vl_req is 0, for vl_req should not be 0. - }else - return vl_req <= vl_group ? vl_req : vl_group; - // if(vl_group >= vl_req) { - // return vl_req; - // } else if(vl_req >= 2 * vl_group) { - // return vl_group; - // } else { - // return vl_req / 2 + 1; - // } -} - -rtlreg_t get_mask(int reg, int idx, uint64_t vsew, uint64_t vlmul) { - // int sum = VLEN / ((1 << vsew) * 8) * vlmul; - int sum = ((VLEN >> vsew) >> 3) << vlmul; - int single = VLEN / sum; //(1 << vsew * 8) / vlmul; - int bit_idx = idx * single; - int idx1 = bit_idx / 64; - int idx2 = bit_idx % 64; - - return (rtlreg_t)((cpu.vr[reg]._64[idx1] & (1lu << idx2)) != 0); -} - -void set_mask(uint32_t reg, int idx, uint64_t mask, uint64_t vsew, uint64_t vlmul) { - int sum = ((VLEN >> vsew) >> 3) << vlmul; - int single = VLEN / sum; //(1 << vsew * 8) / vlmul; - int bit_idx = idx * single; - int idx1 = bit_idx / 64; - int idx2 = bit_idx % 64; - - uint64_t clear_bit = 0; - for(int i=0; i < single; i++) { - clear_bit = clear_bit << 1; - clear_bit |= 1; - } // get single-bit 1-string - cpu.vr[(int)reg]._64[idx1] &= ~(clear_bit << idx2); // clear the dest position. - cpu.vr[(int)reg]._64[idx1] |= (mask==0) ? 0 : (1lu << idx2); -} - -void get_vreg(uint64_t reg, int idx, rtlreg_t *dst, uint64_t vsew, uint64_t vlmul, int is_signed, int needAlign) { - Assert(vlmul <= 3, "vlmul should be less than 4\n"); - Assert(vsew <= 3, "vsew should be less than 4\n"); - if(needAlign) Assert(reg % (1 << vlmul) == 0, "vreg is not aligned\n"); - int new_vlmul = 1 << vlmul; - int width = (1 << vsew); - int width_bit = width * 8; - int new_reg = reg + (idx * width_bit) / SLEN % new_vlmul; - int new_idx = (idx * width_bit) / (SLEN * new_vlmul) * (SLEN / width_bit) - + idx % (SLEN / width_bit); - switch (vsew) { - case 0 : *dst = is_signed ? (char)vreg_b(new_reg, new_idx) : vreg_b(new_reg, new_idx); break; - case 1 : *dst = is_signed ? (short)vreg_s(new_reg, new_idx) : vreg_s(new_reg, new_idx); break; - case 2 : *dst = is_signed ? (int)vreg_i(new_reg, new_idx) : vreg_i(new_reg, new_idx); break; - case 3 : *dst = is_signed ? (long)vreg_l(new_reg, new_idx) : vreg_l(new_reg, new_idx); break; - } - // printf("get_vreg: idx:%d reg:%lu new_idx:%d new_reg:%d vsew:%lu vlmul:%lu\n", - // idx, reg, new_idx, new_reg, vsew, vlmul); -} - -void set_vreg(uint64_t reg, int idx, rtlreg_t src, uint64_t vsew, uint64_t vlmul, int needAlign) { - Assert(vlmul <= 3, "vlmul should be less than 4\n"); - Assert(vsew <= 3, "vsew should be less than 4\n"); - if(needAlign) Assert(reg % (1 << vlmul) == 0, "vreg is not aligned\n"); - int new_vlmul = 1 << vlmul; - int width = (1 << vsew); - int width_bit = width * 8; - int new_reg = reg + (idx * width_bit) / SLEN % new_vlmul; - int new_idx = (idx * width_bit) / (SLEN * new_vlmul) * (SLEN / width_bit) - + idx % (SLEN / width_bit); - switch (vtype->vsew) { - case 0 : vreg_b(new_reg, new_idx) = (uint8_t )src; break; - case 1 : vreg_s(new_reg, new_idx) = (uint16_t )src; break; - case 2 : vreg_i(new_reg, new_idx) = (uint32_t )src; break; - case 3 : vreg_l(new_reg, new_idx) = (uint64_t )src; break; - } - // printf("set_vreg: idx:%d reg:%lu new_idx:%d new_reg:%d vsew:%lu vlmul:%lu\n", - // idx, reg, new_idx, new_reg, vsew, vlmul); -} - -void longjmp_raise_intr(uint32_t foo) { - assert(0); -} - -#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/instr/special.h b/libraries/NEMU/src/isa/riscv64/instr/special.h deleted file mode 100644 index 1df6ff0..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/special.h +++ /dev/null @@ -1,18 +0,0 @@ -#include "../local-include/intr.h" - -def_EHelper(inv) { - save_globals(s); - rtl_hostcall(s, HOSTCALL_INV, NULL, NULL, NULL, 0); - longjmp_exec(NEMU_EXEC_END); -} - -def_EHelper(rt_inv) { - save_globals(s); - longjmp_exception(EX_II); -} - -def_EHelper(nemu_trap) { - save_globals(s); - rtl_hostcall(s, HOSTCALL_EXIT, NULL, &cpu.gpr[10]._64, NULL, 0); // gpr[10] is $a0 - longjmp_exec(NEMU_EXEC_END); -} diff --git a/libraries/NEMU/src/isa/riscv64/instr/vp.c b/libraries/NEMU/src/isa/riscv64/instr/vp.c deleted file mode 100644 index fead56f..0000000 --- a/libraries/NEMU/src/isa/riscv64/instr/vp.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#ifdef CONFIG_RVV_010 -#include "../local-include/csr.h" -#include "../local-include/intr.h" -#include - -bool vp_enable() { - return MUXDEF(CONFIG_MODE_USER, true, mstatus->vs != 0); -} - -void vp_set_dirty() { - // lazily update - mstatus->vs = 3; -} -#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/local-include/csr.h b/libraries/NEMU/src/isa/riscv64/local-include/csr.h deleted file mode 100644 index 593352d..0000000 --- a/libraries/NEMU/src/isa/riscv64/local-include/csr.h +++ /dev/null @@ -1,300 +0,0 @@ -#ifndef __CSR_H__ -#define __CSR_H__ - -#include - -// SHARE mode does not support mtime -#ifndef CONFIG_SHARE -#define CSRS(f) \ - f(mstatus , 0x300) f(misa , 0x301) f(medeleg , 0x302) f(mideleg , 0x303) \ - f(mie , 0x304) f(mtvec , 0x305) f(mcounteren , 0x306) \ - f(mscratch , 0x340) f(mepc , 0x341) f(mcause , 0x342) \ - f(mtval , 0x343) f(mip , 0x344) \ - f(pmpcfg0 , 0x3a0) \ - f(pmpaddr0 , 0x3b0) f(pmpaddr1 , 0x3b1) f(pmpaddr2 , 0x3b2) f(pmpaddr3 , 0x3b3) \ - f(mhartid , 0xf14) \ - f(sstatus , 0x100) \ - f(sie , 0x104) f(stvec , 0x105) f(scounteren , 0x106) \ - f(sscratch , 0x140) f(sepc , 0x141) f(scause , 0x142) \ - f(stval , 0x143) f(sip , 0x144) \ - f(satp , 0x180) \ - f(fflags , 0x001) f(frm , 0x002) f(fcsr , 0x003) \ - f(mtime , 0xc01) -#else -#define CSRS(f) \ - f(mstatus , 0x300) f(misa , 0x301) f(medeleg , 0x302) f(mideleg , 0x303) \ - f(mie , 0x304) f(mtvec , 0x305) f(mcounteren , 0x306) \ - f(mscratch , 0x340) f(mepc , 0x341) f(mcause , 0x342) \ - f(mtval , 0x343) f(mip , 0x344) \ - f(pmpcfg0 , 0x3a0) \ - f(pmpaddr0 , 0x3b0) f(pmpaddr1 , 0x3b1) f(pmpaddr2 , 0x3b2) f(pmpaddr3 , 0x3b3) \ - f(mhartid , 0xf14) \ - f(sstatus , 0x100) \ - f(sie , 0x104) f(stvec , 0x105) f(scounteren , 0x106) \ - f(sscratch , 0x140) f(sepc , 0x141) f(scause , 0x142) \ - f(stval , 0x143) f(sip , 0x144) \ - f(satp , 0x180) \ - f(fflags , 0x001) f(frm , 0x002) f(fcsr , 0x003) -#endif - -#ifdef CONFIG_RVV_010 - #define VCSRS(f) \ - f(vstart, 0x008) \ - f(vxsat, 0x009) \ - f(vxrm, 0x00a) \ - f(vl, 0xc20) \ - f(vtype, 0xc21) -#endif - -#define CSR_STRUCT_START(name) \ - typedef union { \ - struct { - -#define CSR_STRUCT_END(name) \ - }; \ - word_t val; \ - } concat(name, _t); - -CSR_STRUCT_START(mstatus) - uint64_t uie : 1; - uint64_t sie : 1; - uint64_t pad0: 1; - uint64_t mie : 1; - uint64_t upie: 1; - uint64_t spie: 1; - uint64_t pad1: 1; - uint64_t mpie: 1; - uint64_t spp : 1; - uint64_t vs: 2; - uint64_t mpp : 2; - uint64_t fs : 2; - uint64_t xs : 2; - uint64_t mprv: 1; - uint64_t sum : 1; - uint64_t mxr : 1; - uint64_t tvm : 1; - uint64_t tw : 1; - uint64_t tsr : 1; - uint64_t pad3: 9; - uint64_t uxl : 2; - uint64_t sxl : 2; - uint64_t sbe : 1; - uint64_t mbe : 1; - uint64_t pad4:25; - uint64_t sd : 1; -CSR_STRUCT_END(mstatus) - -CSR_STRUCT_START(misa) - uint64_t extensions: 26; - uint64_t pad : 36; - uint64_t mxl : 2; -CSR_STRUCT_END(misa) - -CSR_STRUCT_START(mtvec) -CSR_STRUCT_END(mtvec) - -CSR_STRUCT_START(mcounteren) -CSR_STRUCT_END(mcounteren) - -CSR_STRUCT_START(mcause) - uint64_t code:63; - uint64_t intr: 1; -CSR_STRUCT_END(mcause) - -CSR_STRUCT_START(mepc) -CSR_STRUCT_END(mepc) - -CSR_STRUCT_START(medeleg) -CSR_STRUCT_END(medeleg) - -CSR_STRUCT_START(mideleg) -CSR_STRUCT_END(mideleg) - -CSR_STRUCT_START(mhartid) -CSR_STRUCT_END(mhartid) - -CSR_STRUCT_START(mscratch) -CSR_STRUCT_END(mscratch) - -CSR_STRUCT_START(mtval) -CSR_STRUCT_END(mtval) - -CSR_STRUCT_START(mie) - uint64_t usie : 1; - uint64_t ssie : 1; - uint64_t hsie : 1; - uint64_t msie : 1; - uint64_t utie : 1; - uint64_t stie : 1; - uint64_t htie : 1; - uint64_t mtie : 1; - uint64_t ueie : 1; - uint64_t seie : 1; - uint64_t heie : 1; - uint64_t meie : 1; -CSR_STRUCT_END(mie) - -CSR_STRUCT_START(mip) - uint64_t usip : 1; - uint64_t ssip : 1; - uint64_t hsip : 1; - uint64_t msip : 1; - uint64_t utip : 1; - uint64_t stip : 1; - uint64_t htip : 1; - uint64_t mtip : 1; - uint64_t ueip : 1; - uint64_t seip : 1; - uint64_t heip : 1; - uint64_t meip : 1; -CSR_STRUCT_END(mip) - -CSR_STRUCT_START(pmpcfg0) -CSR_STRUCT_END(pmpcfg0) - -CSR_STRUCT_START(pmpaddr0) -CSR_STRUCT_END(pmpaddr0) - -CSR_STRUCT_START(pmpaddr1) -CSR_STRUCT_END(pmpaddr1) - -CSR_STRUCT_START(pmpaddr2) -CSR_STRUCT_END(pmpaddr2) - -CSR_STRUCT_START(pmpaddr3) -CSR_STRUCT_END(pmpaddr3) - -CSR_STRUCT_START(sstatus) - uint64_t uie : 1; - uint64_t sie : 1; - uint64_t pad0: 2; - uint64_t upie: 1; - uint64_t spie: 1; - uint64_t pad1: 2; - uint64_t spp : 1; - uint64_t pad2: 4; -CSR_STRUCT_END(sstatus) - -CSR_STRUCT_START(stvec) -CSR_STRUCT_END(stvec) - -CSR_STRUCT_START(scounteren) -CSR_STRUCT_END(scounteren) - -CSR_STRUCT_START(sie) - uint64_t usie : 1; - uint64_t ssie : 1; - uint64_t pad0 : 2; - uint64_t utie : 1; - uint64_t stie : 1; - uint64_t pad1 : 2; - uint64_t ueie : 1; - uint64_t seie : 1; - uint64_t pad2 : 2; -CSR_STRUCT_END(sie) - -CSR_STRUCT_START(sip) - uint64_t usip : 1; - uint64_t ssip : 1; - uint64_t pad0 : 2; - uint64_t utip : 1; - uint64_t stip : 1; - uint64_t pad1 : 2; - uint64_t ueip : 1; - uint64_t seip : 1; - uint64_t pad2 : 2; -CSR_STRUCT_END(sip) - - -CSR_STRUCT_START(satp) - uint64_t ppn :44; - uint64_t asid:16; - uint64_t mode: 4; -CSR_STRUCT_END(satp) - -CSR_STRUCT_START(scause) - uint64_t code:63; - uint64_t intr: 1; -CSR_STRUCT_END(scause) - -CSR_STRUCT_START(sepc) -CSR_STRUCT_END(sepc) - -CSR_STRUCT_START(stval) -CSR_STRUCT_END(stval) - -CSR_STRUCT_START(sscratch) -CSR_STRUCT_END(sscratch) - -CSR_STRUCT_START(fflags) -CSR_STRUCT_END(fflags) - -CSR_STRUCT_START(frm) -CSR_STRUCT_END(frm) - -CSR_STRUCT_START(fcsr) - union { - struct { - uint64_t nv: 1; - uint64_t dz: 1; - uint64_t of: 1; - uint64_t uf: 1; - uint64_t nx: 1; - uint64_t frm : 3; - }; - struct { - uint64_t val: 5; - } fflags; - }; -CSR_STRUCT_END(fcsr) - -CSR_STRUCT_START(mtime) -CSR_STRUCT_END(mtime) - -#ifdef CONFIG_RVV_010 -// TODO: implement these vcsr -#define IDXVSTART 0x008 -#define IDXVXSAT 0x009 -#define IDXVXRM 0x00a -#define IDXVL 0xc20 -#define IDXVTYPE 0xc21 - -CSR_STRUCT_START(vstart) -CSR_STRUCT_END(vstart) - -CSR_STRUCT_START(vxsat) - uint64_t sat : 1; - uint64_t pad : 63; -CSR_STRUCT_END(vxsat) - -CSR_STRUCT_START(vxrm) - uint64_t rm : 2; - uint64_t pad : 62; -CSR_STRUCT_END(vxrm) - -CSR_STRUCT_START(vl) -CSR_STRUCT_END(vl) - -CSR_STRUCT_START(vtype) - uint64_t vlmul : 3; - uint64_t vsew : 3; - uint64_t vediv : 2; - uint64_t pad : 55; - uint64_t vill : 1; -CSR_STRUCT_END(vtype) - -rtlreg_t check_vsetvl(rtlreg_t vtype_req, rtlreg_t vl_req, bool max_req); -rtlreg_t get_mask(int reg, int idx, uint64_t vsew, uint64_t vlmul); -void set_mask(uint32_t reg, int idx, uint64_t mask, uint64_t vsew, uint64_t vlmul); - -#endif // CONFIG_RVV_010 - -#define CSRS_DECL(name, addr) extern concat(name, _t)* const name; -MAP(CSRS, CSRS_DECL) -#ifdef CONFIG_RVV_010 - MAP(VCSRS, CSRS_DECL) -#endif // CONFIG_RVV_010 - -word_t csrid_read(uint32_t csrid); - -#endif diff --git a/libraries/NEMU/src/isa/riscv64/local-include/intr.h b/libraries/NEMU/src/isa/riscv64/local-include/intr.h deleted file mode 100644 index 381e43d..0000000 --- a/libraries/NEMU/src/isa/riscv64/local-include/intr.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __INTR_H__ -#define __INTR_H__ - -#include - -enum { - EX_IAM, // instruction address misaligned - EX_IAF, // instruction address fault - EX_II, // illegal instruction - EX_BP, // breakpoint - EX_LAM, // load address misaligned - EX_LAF, // load address fault - EX_SAM, // store/amo address misaligned - EX_SAF, // store/amo address fault - EX_ECU, // ecall from U-mode - EX_ECS, // ecall from S-mode - EX_RS0, // reserved - EX_ECM, // ecall from M-mode - EX_IPF, // instruction page fault - EX_LPF, // load page fault - EX_RS1, // reserved - EX_SPF, // store/amo page fault -}; - -// now NEMU does not support EX_IAM, -// so it may ok to use EX_IAM to indicate a successful memory access -#define MEM_OK 0 - -word_t raise_intr(word_t NO, vaddr_t epc); -#define return_on_mem_ex() do { if (cpu.mem_exception != MEM_OK) return; } while (0) - - -#endif diff --git a/libraries/NEMU/src/isa/riscv64/local-include/reg.h b/libraries/NEMU/src/isa/riscv64/local-include/reg.h deleted file mode 100644 index a90081f..0000000 --- a/libraries/NEMU/src/isa/riscv64/local-include/reg.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef __RISCV64_REG_H__ -#define __RISCV64_REG_H__ - -#include - -static inline int check_reg_index(int index) { - IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); - return index; -} - -#define reg_l(index) (cpu.gpr[check_reg_index(index)]._64) - -static inline const char* reg_name(int index, int width) { - extern const char* regsl[]; - IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); - return regsl[index]; -} - -// Floating Point Regs -#define fpreg_l(index) (cpu.fpr[check_reg_index(index)]._64) - -static inline const char* fpreg_name(int index, int width){ - extern const char* fpregsl[]; - IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 32)); - return fpregsl[index]; -} - -#endif diff --git a/libraries/NEMU/src/isa/riscv64/local-include/rtl.h b/libraries/NEMU/src/isa/riscv64/local-include/rtl.h deleted file mode 100644 index cab2ea3..0000000 --- a/libraries/NEMU/src/isa/riscv64/local-include/rtl.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef __RISCV64_RTL_H__ -#define __RISCV64_RTL_H__ - -#include -#include "reg.h" -#include "csr.h" - -#define FBOX_MASK 0xFFFFFFFF00000000ull -// The bit pattern for a default generated 32-bit floating-point NaN -#define defaultNaNF32UI 0x7FC00000 - -static inline def_rtl(fbox, rtlreg_t *dest, rtlreg_t *src) { - rtl_ori(s, dest, src, FBOX_MASK); -} - -static inline def_rtl(funbox, rtlreg_t *dest, rtlreg_t *src) { - if((*src & FBOX_MASK) == FBOX_MASK){ - rtl_andi(s, dest, src, ~FBOX_MASK); - } else { - *dest = defaultNaNF32UI; - } -} - -static inline def_rtl(fsr, rtlreg_t *fdest, rtlreg_t *src, int width) { - if (width == FPCALL_W32) rtl_fbox(s, fdest, src); - else if (width == FPCALL_W64) rtl_mv(s, fdest, src); - else assert(0); - void fp_set_dirty(); - fp_set_dirty(); -} - -#ifdef CONFIG_RVV_010 - -static inline def_rtl(lr, rtlreg_t* dest, int r, int width) { - rtl_mv(s, dest, ®_l(r)); -} - -static inline def_rtl(sr, int r, const rtlreg_t *src1, int width) { - if (r != 0) { rtl_mv(s, ®_l(r), src1); } -} - -#endif // CONFIG_RVV_010 - - -#endif diff --git a/libraries/NEMU/src/isa/riscv64/local-include/vreg.h b/libraries/NEMU/src/isa/riscv64/local-include/vreg.h deleted file mode 100644 index c4656fb..0000000 --- a/libraries/NEMU/src/isa/riscv64/local-include/vreg.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifdef CONFIG_RVV_010 -#ifndef __RISCV64_VREG_H__ -#define __RISCV64_VREG_H__ - -#include "common.h" - -#define VLEN 256 -#define VLENLG 8 -#define MAXELEN 64 -#define VENUM64 (VLEN/64) -#define VENUM32 (VLEN/32) -#define VENUM16 (VLEN/16) -#define VENUM8 (VLEN/8) -#define SLEN 256 - -static inline int check_reg_index1(int index) { - assert(index >= 0 && index < 32); - return index; -} - -static inline int check_reg_index2(int index2, int elen) { - assert(index2 >= 0 && index2 < VLEN/elen); - return index2; -} - -// #define vreg_len(index1, index2, elen) (cpu.vr[check_reg_index1(index1)]._64[check_reg_index2(index2, elen)]) -#define vreg_ll(index) (cpu.vr[check_reg_index1(index)]) -// #define vreg_l(index1, index2) vreg_len(index1, index2, 64) -// #define vreg_i(index1, index2) vreg_len(index1, index2, 32) -// #define vreg_s(index1, index2) vreg_len(index1, index2, 16) -// #define vreg_b(index1, index2) vreg_len(index1, index2, 8) -#define vreg_l(index1, index2) (cpu.vr[check_reg_index1(index1)]._64[check_reg_index2(index2, 64)]) -#define vreg_i(index1, index2) (cpu.vr[check_reg_index1(index1)]._32[check_reg_index2(index2, 32)]) -#define vreg_s(index1, index2) (cpu.vr[check_reg_index1(index1)]._16[check_reg_index2(index2, 16)]) -#define vreg_b(index1, index2) (cpu.vr[check_reg_index1(index1)]._8[check_reg_index2(index2, 8)]) - - -static inline const char * vreg_name(int index, int width) { - extern const char * vregsl[]; - assert(index >= 0 && index < 32); - return vregsl[index]; -} - -void get_vreg(uint64_t reg, int idx, rtlreg_t *dst, uint64_t vsew, uint64_t vlmul, int is_signed, int needAlign); -void set_vreg(uint64_t reg, int idx, rtlreg_t src, uint64_t vsew, uint64_t vlmul, int needAlgin); - -void longjmp_raise_intr(uint32_t foo); - -#define SRC_VV 0 -#define SRC_VI 1 -#define SRC_VS 2 -#define SRC_SI 3 -#define UNSIGNED 0 -#define SIGNED 1 -#endif //__RISCV64_VREG_H__ - -#endif // CONFIG_RVV_010 \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/logo.c b/libraries/NEMU/src/isa/riscv64/logo.c deleted file mode 100644 index 3ea54c2..0000000 --- a/libraries/NEMU/src/isa/riscv64/logo.c +++ /dev/null @@ -1,48 +0,0 @@ -// refer to http://www.patorjk.com/software/taag/#p=display&f=Big&t=Type%20Something%20 - -/* - _ __ __ _ - (_) | \/ | | | - _ __ _ ___ ___ ________ __ | \ / | __ _ _ __ _ _ __ _| | - | '__| / __|/ __|______\ \ / / | |\/| |/ _` | '_ \| | | |/ _` | | - | | | \__ \ (__ \ V / | | | | (_| | | | | |_| | (_| | | - |_| |_|___/\___| \_/ |_| |_|\__,_|_| |_|\__,_|\__,_|_| - -*/ - -unsigned char isa_logo[] = { - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x20, - 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x28, 0x5f, 0x29, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x7c, 0x20, 0x20, 0x5c, 0x2f, 0x20, 0x20, 0x7c, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7c, 0x20, - 0x7c, 0x0a, 0x20, 0x20, 0x5f, 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x20, 0x5f, - 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x5f, 0x20, 0x5f, 0x5f, 0x5f, 0x5f, - 0x5f, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x20, 0x7c, 0x20, - 0x5c, 0x20, 0x20, 0x2f, 0x20, 0x7c, 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x20, - 0x5f, 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x20, 0x5f, 0x20, - 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x7c, 0x20, - 0x27, 0x5f, 0x5f, 0x7c, 0x20, 0x2f, 0x20, 0x5f, 0x5f, 0x7c, 0x2f, 0x20, - 0x5f, 0x5f, 0x7c, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5c, 0x20, 0x5c, - 0x20, 0x2f, 0x20, 0x2f, 0x20, 0x7c, 0x20, 0x7c, 0x5c, 0x2f, 0x7c, 0x20, - 0x7c, 0x2f, 0x20, 0x5f, 0x60, 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x20, 0x5c, - 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x2f, 0x20, 0x5f, 0x60, 0x20, - 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x20, 0x7c, 0x20, - 0x5c, 0x5f, 0x5f, 0x20, 0x5c, 0x20, 0x28, 0x5f, 0x5f, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x5c, 0x20, 0x56, 0x20, 0x2f, 0x20, 0x20, - 0x7c, 0x20, 0x7c, 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x7c, - 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x5f, 0x7c, - 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x0a, 0x20, - 0x7c, 0x5f, 0x7c, 0x20, 0x20, 0x7c, 0x5f, 0x7c, 0x5f, 0x5f, 0x5f, 0x2f, - 0x5c, 0x5f, 0x5f, 0x5f, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x5c, 0x5f, 0x2f, 0x20, 0x20, 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x20, - 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x20, - 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, - 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x0a -}; diff --git a/libraries/NEMU/src/isa/riscv64/reg.c b/libraries/NEMU/src/isa/riscv64/reg.c deleted file mode 100644 index f0fc7b7..0000000 --- a/libraries/NEMU/src/isa/riscv64/reg.c +++ /dev/null @@ -1,72 +0,0 @@ -#include -//#include -#include "local-include/reg.h" -#include "local-include/csr.h" -//#include "local-include/intr.h" - -const char *regsl[] = { - "$0", "ra", "sp", "gp", "tp", "t0", "t1", "t2", - "s0", "s1", "a0", "a1", "a2", "a3", "a4", "a5", - "a6", "a7", "s2", "s3", "s4", "s5", "s6", "s7", - "s8", "s9", "s10", "s11", "t3", "t4", "t5", "t6" -}; - -const char *fpregsl[] = { - "ft0", "ft1", "ft2", "ft3", "ft4", "ft5", "ft6", "ft7", - "fs0", "fs1", "fa0", "fa1", "fa2", "fa3", "fa4", "fa5", - "fa6", "fa7", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7", - "fs8", "fs9", "fs10", "fs11", "ft8", "ft9", "ft10", "ft11" -}; - -void isa_reg_display() { - int i; - for (i = 0; i < 32; i ++) { - printf("%4s: " FMT_WORD " ", regsl[i], cpu.gpr[i]._64); - if (i % 4 == 3) { - printf("\n"); - } - } - for (i = 0; i < 32; i ++) { - printf("%4s: " FMT_WORD " ", fpregsl[i], cpu.fpr[i]._64); - if (i % 4 == 3) { - printf("\n"); - } - } - printf("pc: " FMT_WORD " mstatus: " FMT_WORD " mcause: " FMT_WORD " mepc: " FMT_WORD "\n", - cpu.pc, mstatus->val, mcause->val, mepc->val); - printf("%22s sstatus: " FMT_WORD " scause: " FMT_WORD " sepc: " FMT_WORD "\n", - "", csrid_read(0x100), scause->val, sepc->val); - printf("satp: " FMT_WORD "\n", satp->val); - printf("mip: " FMT_WORD " mie: " FMT_WORD " mscratch: " FMT_WORD " sscratch: " FMT_WORD "\n", - mip->val, mie->val, mscratch->val, sscratch->val); - printf("mideleg: " FMT_WORD " medeleg: " FMT_WORD "\n", - mideleg->val, medeleg->val); - printf("mtval: " FMT_WORD " stval: " FMT_WORD " mtvec: " FMT_WORD " stvec: " FMT_WORD "\n", - mtval->val, stval->val, mtvec->val, stvec->val); -#ifdef CONFIG_RVV_010 - //vector register - extern const char * vregsl[]; - for(i = 0; i < 32; i ++) { - printf("%s: ", vregsl[i]); - printf("0x%016lx_%016lx_%016lx_%016lx ", - cpu.vr[i]._64[3], cpu.vr[i]._64[2], cpu.vr[i]._64[1], cpu.vr[i]._64[0]); - if(i%2) printf("\n"); - } - printf("vtype: " FMT_WORD " vstart: " FMT_WORD " vxsat: " FMT_WORD "\n", vtype->val, vstart->val, vxsat->val); - printf("vxrm: " FMT_WORD " vl: " FMT_WORD "\n", vxrm->val, vl->val); -#endif // CONFIG_RVV_010 - fflush(stdout); -} - -rtlreg_t isa_reg_str2val(const char *s, bool *success) { - int i; - *success = true; - for (i = 0; i < 32; i ++) { - if (strcmp(regsl[i], s) == 0) return reg_l(i); - } - - if (strcmp("pc", s) == 0) return cpu.pc; - - *success = false; - return 0; -} diff --git a/libraries/NEMU/src/isa/riscv64/system/intr.c b/libraries/NEMU/src/isa/riscv64/system/intr.c deleted file mode 100644 index baeda70..0000000 --- a/libraries/NEMU/src/isa/riscv64/system/intr.c +++ /dev/null @@ -1,78 +0,0 @@ -#include -#include "../local-include/csr.h" -#include "../local-include/intr.h" - -void update_mmu_state(); - -#define INTR_BIT (1ULL << 63) -enum { - IRQ_USIP, IRQ_SSIP, IRQ_HSIP, IRQ_MSIP, - IRQ_UTIP, IRQ_STIP, IRQ_HTIP, IRQ_MTIP, - IRQ_UEIP, IRQ_SEIP, IRQ_HEIP, IRQ_MEIP -}; - -word_t raise_intr(word_t NO, vaddr_t epc) { - switch (NO) { - case EX_II: - case EX_IPF: - case EX_LPF: - case EX_SPF: difftest_skip_dut(1, 2); break; - } - - word_t deleg = (NO & INTR_BIT ? mideleg->val : medeleg->val); - bool delegS = ((deleg & (1 << (NO & 0xf))) != 0) && (cpu.mode < MODE_M); - - if (delegS) { - scause->val = NO; - sepc->val = epc; - mstatus->spp = cpu.mode; - mstatus->spie = mstatus->sie; - mstatus->sie = 0; - switch (NO) { - case EX_IPF: case EX_LPF: case EX_SPF: - case EX_LAM: case EX_SAM: - break; - default: stval->val = 0; - } - cpu.mode = MODE_S; - update_mmu_state(); - return stvec->val; - } else { - mcause->val = NO; - mepc->val = epc; - mstatus->mpp = cpu.mode; - mstatus->mpie = mstatus->mie; - mstatus->mie = 0; - switch (NO) { - case EX_IPF: case EX_LPF: case EX_SPF: - case EX_LAM: case EX_SAM: - break; - default: mtval->val = 0; - } - cpu.mode = MODE_M; - update_mmu_state(); - return mtvec->val; - } -} - -word_t isa_query_intr() { - word_t intr_vec = mie->val & mip->val; - if (!intr_vec) return INTR_EMPTY; - - const int priority [] = { - IRQ_MEIP, IRQ_MSIP, IRQ_MTIP, - IRQ_SEIP, IRQ_SSIP, IRQ_STIP, - IRQ_UEIP, IRQ_USIP, IRQ_UTIP - }; - int i; - for (i = 0; i < 9; i ++) { - int irq = priority[i]; - if (intr_vec & (1 << irq)) { - bool deleg = (mideleg->val & (1 << irq)) != 0; - bool global_enable = (deleg ? ((cpu.mode == MODE_S) && mstatus->sie) || (cpu.mode < MODE_S) : - ((cpu.mode == MODE_M) && mstatus->mie) || (cpu.mode < MODE_M)); - if (global_enable) return irq | INTR_BIT; - } - } - return INTR_EMPTY; -} diff --git a/libraries/NEMU/src/isa/riscv64/system/mmu.c b/libraries/NEMU/src/isa/riscv64/system/mmu.c deleted file mode 100644 index b14cdec..0000000 --- a/libraries/NEMU/src/isa/riscv64/system/mmu.c +++ /dev/null @@ -1,266 +0,0 @@ -#include -#include -#include -#include -#include "../local-include/csr.h" -#include "../local-include/intr.h" - -typedef union PageTableEntry { - struct { - uint32_t v : 1; - uint32_t r : 1; - uint32_t w : 1; - uint32_t x : 1; - uint32_t u : 1; - uint32_t g : 1; - uint32_t a : 1; - uint32_t d : 1; - uint32_t rsw : 2; - uint64_t ppn :44; - uint32_t pad :10; - }; - uint64_t val; -} PTE; - -#define PGSHFT 12 -#define PGMASK ((1ull << PGSHFT) - 1) -#define PGBASE(pn) (pn << PGSHFT) - -// Sv39 page walk -#define PTW_LEVEL 3 -#define PTE_SIZE 8 -#define VPNMASK 0x1ff -static inline uintptr_t VPNiSHFT(int i) { - return (PGSHFT) + 9 * i; -} -static inline uintptr_t VPNi(vaddr_t va, int i) { - return (va >> VPNiSHFT(i)) & VPNMASK; -} - -static inline bool check_permission(PTE *pte, bool ok, vaddr_t vaddr, int type) { - bool ifetch = (type == MEM_TYPE_IFETCH); - uint32_t mode = (mstatus->mprv && !ifetch ? mstatus->mpp : cpu.mode); - assert(mode == MODE_U || mode == MODE_S); - ok = ok && pte->v; - ok = ok && !(mode == MODE_U && !pte->u); - ok = ok && !(pte->u && ((mode == MODE_S) && (!mstatus->sum || ifetch))); - if (ifetch) { - if (!(ok && pte->x)) { - assert(!cpu.amo); - stval->val = vaddr; - longjmp_exception(EX_IPF); - return false; - } - } else if (type == MEM_TYPE_READ) { - bool can_load = pte->r || (mstatus->mxr && pte->x); - if (!(ok && can_load)) { - if (cpu.mode == MODE_M) mtval->val = vaddr; - else stval->val = vaddr; - //if (cpu.amo) Log("redirect to AMO page fault exception at pc = " FMT_WORD, cpu.pc); - int ex = (cpu.amo ? EX_SPF : EX_LPF); - cpu.amo = false; - longjmp_exception(ex); - return false; - } - } else { - if (!(ok && pte->w)) { - if (cpu.mode == MODE_M) mtval->val = vaddr; - else stval->val = vaddr; - cpu.amo = false; - longjmp_exception(EX_SPF); - return false; - } - } - return true; -} - -static paddr_t ptw(vaddr_t vaddr, int type) { - - word_t pg_base = PGBASE(satp->ppn); - word_t p_pte; // pte pointer - PTE pte; - int level; - int64_t vaddr39 = vaddr << (64 - 39); - vaddr39 >>= (64 - 39); - if ((uint64_t)vaddr39 != vaddr) goto bad; - for (level = PTW_LEVEL - 1; level >= 0;) { - p_pte = pg_base + VPNi(vaddr, level) * PTE_SIZE; - pte.val = paddr_read(p_pte, PTE_SIZE); -#ifdef XIANGSHAN_DEBUG - printf("[NEMU] ptw: level %d, vaddr 0x%lx, pg_base 0x%lx, p_pte 0x%lx, pte.val 0x%lx\n", - level, vaddr, pg_base, p_pte, pte.val); -#endif - pg_base = PGBASE(pte.ppn); - if (!pte.v || (!pte.r && pte.w)) goto bad; - if (pte.r || pte.x) { break; } - else { - level --; - if (level < 0) { goto bad; } - } - } - - if (!check_permission(&pte, true, vaddr, type)) return MEM_RET_FAIL; - - if (level > 0) { - // superpage - word_t pg_mask = ((1ull << VPNiSHFT(level)) - 1); - if ((pg_base & pg_mask) != 0) { - // missaligned superpage - goto bad; - } - pg_base = (pg_base & ~pg_mask) | (vaddr & pg_mask & ~PGMASK); - } - -#if !CONFIG_SHARE - bool is_write = (type == MEM_TYPE_WRITE); - if (!pte.a || (!pte.d && is_write)) { - pte.a = true; - pte.d |= is_write; - paddr_write(p_pte, PTE_SIZE, pte.val); - } -#endif - - return pg_base | MEM_RET_OK; - -bad: - check_permission(&pte, false, vaddr, type); - return MEM_RET_FAIL; -} - -static int ifetch_mmu_state = MMU_DIRECT; -static int data_mmu_state = MMU_DIRECT; - -int get_data_mmu_state() { - return (data_mmu_state == MMU_DIRECT ? MMU_DIRECT : MMU_TRANSLATE); -} - -static inline int update_mmu_state_internal(bool ifetch) { - uint32_t mode = (mstatus->mprv && (!ifetch) ? mstatus->mpp : cpu.mode); - if (mode < MODE_M) { - assert(satp->mode == 0 || satp->mode == 8); - if (satp->mode == 8) return MMU_TRANSLATE; - } - return MMU_DIRECT; -} - -int update_mmu_state() { - ifetch_mmu_state = update_mmu_state_internal(true); - int data_mmu_state_old = data_mmu_state; - data_mmu_state = update_mmu_state_internal(false); - return (data_mmu_state ^ data_mmu_state_old) ? true : false; -} - -int isa_mmu_check(vaddr_t vaddr, int len, int type) { - bool is_ifetch = type == MEM_TYPE_IFETCH; - // riscv-privileged 4.4.1: Addressing and Memory Protection: - // Instruction fetch addresses and load and store effective addresses, - // which are 64 bits, must have bits 63–39 all equal to bit 38, or else a page-fault exception will occur. - bool vm_enable = (mstatus->mprv && (!is_ifetch) ? mstatus->mpp : cpu.mode) < MODE_M && satp->mode == 8; - word_t va_mask = ((((word_t)1) << (63 - 38 + 1)) - 1); - word_t va_msbs = vaddr >> 38; - bool va_msbs_ok = (va_msbs == va_mask) || va_msbs == 0 || !vm_enable; - - if(!va_msbs_ok){ - if(is_ifetch){ - stval->val = vaddr; - longjmp_exception(EX_IPF); - } else if(type == MEM_TYPE_READ){ - if (cpu.mode == MODE_M) mtval->val = vaddr; - else stval->val = vaddr; - longjmp_exception(cpu.amo ? EX_SPF : EX_LPF); - } else { - if (cpu.mode == MODE_M) mtval->val = vaddr; - else stval->val = vaddr; - longjmp_exception(EX_SPF); - } - return MEM_RET_FAIL; - } - - if (is_ifetch) return ifetch_mmu_state ? MMU_TRANSLATE : MMU_DIRECT; - if (ISDEF(CONFIG_AC_SOFT) && unlikely((vaddr & (len - 1)) != 0)) { - assert(0); - mtval->val = vaddr; - longjmp_exception(cpu.amo || type == MEM_TYPE_WRITE ? EX_SAM : EX_LAM); - return MEM_RET_FAIL; - } - return data_mmu_state ? MMU_TRANSLATE : MMU_DIRECT; -} - -paddr_t isa_mmu_translate(vaddr_t vaddr, int len, int type) { - paddr_t ptw_result = ptw(vaddr, type); -#ifdef FORCE_RAISE_PF - if(ptw_result != MEM_RET_FAIL && force_raise_pf(vaddr, type) != MEM_RET_OK) - return MEM_RET_FAIL; -#endif - return ptw_result; -} - -int force_raise_pf_record(vaddr_t vaddr, int type) { - static vaddr_t last_addr[3] = {0x0}; - static int force_count[3] = {0}; - if (vaddr != last_addr[type]) { - last_addr[type] = vaddr; - force_count[type] = 0; - } - force_count[type]++; - return force_count[type] == 5; -} - -int force_raise_pf(vaddr_t vaddr, int type){ - bool ifetch = (type == MEM_TYPE_IFETCH); - - if(cpu.guided_exec){ - if(ifetch && cpu.execution_guide.exceptionNo == EX_IPF){ - if (force_raise_pf_record(vaddr, type)) { - return MEM_RET_OK; - } - if (cpu.mode == MODE_M) { - mtval->val = cpu.execution_guide.mtval; - if( - vaddr != cpu.execution_guide.mtval && - // cross page ipf caused mismatch is legal - !((vaddr & 0xfff) == 0xffe && (cpu.execution_guide.mtval & 0xfff) == 0x000) - ){ - printf("[WRANING] nemu mtval %lx does not match core mtval %lx\n", - vaddr, - cpu.execution_guide.mtval - ); - } - } else { - stval->val = cpu.execution_guide.stval; - if( - vaddr != cpu.execution_guide.stval && - // cross page ipf caused mismatch is legal - !((vaddr & 0xfff) == 0xffe && (cpu.execution_guide.stval & 0xfff) == 0x000) - ){ - printf("[WRANING] nemu stval %lx does not match core stval %lx\n", - vaddr, - cpu.execution_guide.stval - ); - } - } - printf("force raise IPF\n"); - longjmp_exception(EX_IPF); - return MEM_RET_FAIL; - } else if(!ifetch && type == MEM_TYPE_READ && cpu.execution_guide.exceptionNo == EX_LPF){ - if (force_raise_pf_record(vaddr, type)) { - return MEM_RET_OK; - } - if (cpu.mode == MODE_M) mtval->val = vaddr; - else stval->val = vaddr; - printf("force raise LPF\n"); - longjmp_exception(EX_LPF); - return MEM_RET_FAIL; - } else if(type == MEM_TYPE_WRITE && cpu.execution_guide.exceptionNo == EX_SPF){ - if (force_raise_pf_record(vaddr, type)) { - return MEM_RET_OK; - } - if (cpu.mode == MODE_M) mtval->val = vaddr; - else stval->val = vaddr; - printf("force raise SPF\n"); - longjmp_exception(EX_SPF); - return MEM_RET_FAIL; - } - } - return MEM_RET_OK; -} \ No newline at end of file diff --git a/libraries/NEMU/src/isa/riscv64/system/priv.c b/libraries/NEMU/src/isa/riscv64/system/priv.c deleted file mode 100644 index e5b4c85..0000000 --- a/libraries/NEMU/src/isa/riscv64/system/priv.c +++ /dev/null @@ -1,217 +0,0 @@ -#include "../local-include/csr.h" -#include "../local-include/rtl.h" -#include "../local-include/intr.h" -#include -#include - -int update_mmu_state(); -uint64_t clint_uptime(); -void fp_set_dirty(); -void fp_update_rm_cache(uint32_t rm); - -rtlreg_t csr_array[4096] = {}; - -#define CSRS_DEF(name, addr) \ - concat(name, _t)* const name = (concat(name, _t) *)&csr_array[addr]; -MAP(CSRS, CSRS_DEF) -#ifdef CONFIG_RVV_010 -MAP(VCSRS, CSRS_DEF) -#endif // CONFIG_RVV_010 - -#define CSRS_EXIST(name, addr) csr_exist[addr] = 1; -static bool csr_exist[4096] = {}; -void init_csr() { - MAP(CSRS, CSRS_EXIST) - #ifdef CONFIG_RVV_010 - MAP(VCSRS, CSRS_EXIST) - #endif // CONFIG_RVV_010 -}; - -rtlreg_t csr_perf; - -static inline bool csr_is_legal(uint32_t addr) { - assert(addr < 4096); - // CSR does not exist - if(!csr_exist[addr]) { -#ifdef CONFIG_PANIC_ON_UNIMP_CSR - panic("[NEMU] unimplemented CSR 0x%x", addr); -#endif - return false; - } - // CSR exists, but access is not legal - int lowest_access_priv_level = (addr & 0b11 << 8) >> 8; // addr(9,8) - if (!(cpu.mode >= lowest_access_priv_level)) { - return false; - } - return true; -} - -static inline word_t* csr_decode(uint32_t addr) { - assert(addr < 4096); - // Now we check if CSR is implemented / legal to access in csr_is_legal() - // Assert(csr_exist[addr], "unimplemented CSR 0x%x at pc = " FMT_WORD, addr, cpu.pc); - - // Skip CSR for perfcnt - // TODO: dirty implementation - if ((addr >= 0xb00 && addr <= 0xb1f) || (addr >= 0x320 && addr <= 0x33f)) { - return &csr_perf; - } - return &csr_array[addr]; -} -#ifdef CONFIG_RVV_010 -#define SSTATUS_WMASK ((1 << 19) | (1 << 18) | (0x3 << 13) | (0x3 << 9) | (1 << 8) | (1 << 5) | (1 << 1)) -#else -#define SSTATUS_WMASK ((1 << 19) | (1 << 18) | (0x3 << 13) | (1 << 8) | (1 << 5) | (1 << 1)) -#endif // CONFIG_RVV_010 -#define SSTATUS_RMASK (SSTATUS_WMASK | (0x3 << 15) | (1ull << 63) | (3ull << 32)) -#define SIE_MASK (0x222 & mideleg->val) -#define SIP_MASK (0x222 & mideleg->val) - -#define FFLAGS_MASK 0x1f -#define FRM_MASK 0x07 -#define FCSR_MASK 0xff - -#define is_read(csr) (src == (void *)(csr)) -#define is_write(csr) (dest == (void *)(csr)) -#define mask_bitset(old, mask, new) (((old) & ~(mask)) | ((new) & (mask))) - -static inline void update_mstatus_sd() { - // mstatus.fs is always dirty or off in QEMU 3.1.0 - if (ISDEF(CONFIG_DIFFTEST_REF_QEMU) && mstatus->fs) { mstatus->fs = 3; } - mstatus->sd = (mstatus->fs == 3); -} - -static inline word_t csr_read(word_t *src) { - if (is_read(mstatus) || is_read(sstatus)) { update_mstatus_sd(); } - - if (is_read(sstatus)) { return mstatus->val & SSTATUS_RMASK; } - else if (is_read(sie)) { return mie->val & SIE_MASK; } - else if (is_read(sip)) { difftest_skip_ref(); return mip->val & SIP_MASK; } - else if (is_read(fcsr)) { return fcsr->val & FCSR_MASK; } - else if (is_read(fflags)) { return fcsr->fflags.val & FFLAGS_MASK; } - else if (is_read(frm)) { return fcsr->frm & FRM_MASK; } -#ifndef CONFIG_SHARE - else if (is_read(mtime)) { difftest_skip_ref(); return clint_uptime(); } -#endif - if (is_read(mip)) { difftest_skip_ref(); } - return *src; -} - -#ifdef CONFIG_RVV_010 -void vcsr_write(uint32_t addr, rtlreg_t *src) { - word_t *dest = csr_decode(addr); - *dest = *src; -} -#endif // CONFIG_RVV_010 - -static inline void csr_write(word_t *dest, word_t src) { - if (is_write(sstatus)) { mstatus->val = mask_bitset(mstatus->val, SSTATUS_WMASK, src); } - else if (is_write(sie)) { mie->val = mask_bitset(mie->val, SIE_MASK, src); } - else if (is_write(sip)) { mip->val = mask_bitset(mip->val, SIP_MASK, src); } - else if (is_write(medeleg)) { *dest = src & 0xf3ff; } - else if (is_write(mideleg)) { *dest = src & 0x222; } - else if (is_write(fflags)) { - *dest = src & FFLAGS_MASK; - fcsr->val = (frm->val)<<5 | fflags->val; - // fcsr->fflags.val = src; - } - else if (is_write(frm)) { - *dest = src & FRM_MASK; - fcsr->val = (frm->val)<<5 | fflags->val; - // fcsr->frm = src; - } - else if (is_write(fcsr)) { - *dest = src & FCSR_MASK; - fflags->val = src & FFLAGS_MASK; - frm->val = ((src)>>5) & FRM_MASK; - // *dest = src & FCSR_MASK; - } - else { *dest = src; } - - bool need_update_mstatus_sd = false; - if (is_write(fflags) || is_write(frm) || is_write(fcsr)) { - fp_set_dirty(); - fp_update_rm_cache(fcsr->frm); - need_update_mstatus_sd = true; - } - - if (is_write(sstatus) || is_write(mstatus) || need_update_mstatus_sd) { - update_mstatus_sd(); - } - - if (is_write(mstatus) || is_write(satp)) { update_mmu_state(); } - if (is_write(mstatus) || is_write(sstatus) || is_write(satp) || - is_write(mie) || is_write(sie) || is_write(mip) || is_write(sip)) { - set_sys_state_flag(SYS_STATE_UPDATE); - } -} - -word_t csrid_read(uint32_t csrid) { - return csr_read(csr_decode(csrid)); -} - -static void csrrw(rtlreg_t *dest, const rtlreg_t *src, uint32_t csrid) { - if (!csr_is_legal(csrid)) { - longjmp_exception(EX_II); - return; - } - word_t *csr = csr_decode(csrid); - word_t tmp = (src != NULL ? *src : 0); - if (dest != NULL) { *dest = csr_read(csr); } - if (src != NULL) { csr_write(csr, tmp); } -} - -static word_t priv_instr(uint32_t op, const rtlreg_t *src) { - switch (op) { -#ifndef CONFIG_MODE_USER - case 0x102: // sret - mstatus->sie = mstatus->spie; - mstatus->spie = (ISDEF(CONFIG_DIFFTEST_REF_QEMU) ? 0 // this is bug of QEMU - : 1); - cpu.mode = mstatus->spp; - mstatus->spp = MODE_U; - return sepc->val; - case 0x302: // mret - mstatus->mie = mstatus->mpie; - mstatus->mpie = (ISDEF(CONFIG_DIFFTEST_REF_QEMU) ? 0 // this is bug of QEMU - : 1); - cpu.mode = mstatus->mpp; - mstatus->mpp = MODE_U; - update_mmu_state(); - return mepc->val; - break; - case 0x120: // sfence.vma - mmu_tlb_flush(*src); - break; - case 0x105: break; // wfi -#endif - case -1: // fence.i - set_sys_state_flag(SYS_STATE_FLUSH_TCACHE); - break; - default: panic("Unsupported privilige operation = %d", op); - } - return 0; -} - -void isa_hostcall(uint32_t id, rtlreg_t *dest, const rtlreg_t *src1, - const rtlreg_t *src2, word_t imm) { - word_t ret = 0; - switch (id) { - case HOSTCALL_CSR: csrrw(dest, src1, imm); return; -#ifdef CONFIG_MODE_USER - case HOSTCALL_TRAP: - Assert(imm == 0x8, "Unsupport exception = %ld", imm); - uintptr_t host_syscall(uintptr_t id, uintptr_t arg1, uintptr_t arg2, - uintptr_t arg3, uintptr_t arg4, uintptr_t arg5, uintptr_t arg6); - cpu.gpr[10]._64 = host_syscall(cpu.gpr[17]._64, cpu.gpr[10]._64, cpu.gpr[11]._64, - cpu.gpr[12]._64, cpu.gpr[13]._64, cpu.gpr[14]._64, cpu.gpr[15]._64); - ret = *src1 + 4; - break; -#else - case HOSTCALL_TRAP: ret = raise_intr(imm, *src1); break; -#endif - case HOSTCALL_PRIV: ret = priv_instr(imm, src1); break; - default: panic("Unsupported hostcall ID = %d", id); - } - if (dest) *dest = ret; -} diff --git a/libraries/NEMU/src/isa/x86/Kconfig b/libraries/NEMU/src/isa/x86/Kconfig deleted file mode 100644 index ff2f5a3..0000000 --- a/libraries/NEMU/src/isa/x86/Kconfig +++ /dev/null @@ -1,18 +0,0 @@ -menu "ISA-dependent Options for x86" - -choice - prompt "Optimization for condition code evaulation" - default x86_CC_SKIP -config x86_CC_SKIP - bool "Skip CC" -config x86_CC_LAZY - bool "Lazy CC" -config x86_CC_NONE - bool "none" -endchoice - -config PA - bool "Enable PA version" - default n - -endmenu diff --git a/libraries/NEMU/src/isa/x86/device/i8237a.c b/libraries/NEMU/src/isa/x86/device/i8237a.c deleted file mode 100644 index 25a9a5f..0000000 --- a/libraries/NEMU/src/isa/x86/device/i8237a.c +++ /dev/null @@ -1,14 +0,0 @@ -#include - -#define I8237A_PAGE_0_PORT 0x87 - -static uint8_t *i8237a_base = NULL; - -static void i8237a_io_handler(uint32_t offset, int len, bool is_write) { -} - -void init_i8237a() { - i8237a_base = (void *)new_space(1); - add_pio_map("i8237a-page0", I8237A_PAGE_0_PORT, i8237a_base, 1, i8237a_io_handler); - i8237a_base[0] = 0xff; -} diff --git a/libraries/NEMU/src/isa/x86/device/i8253.c b/libraries/NEMU/src/isa/x86/device/i8253.c deleted file mode 100644 index f9b123c..0000000 --- a/libraries/NEMU/src/isa/x86/device/i8253.c +++ /dev/null @@ -1,13 +0,0 @@ -#include - -#define I8253_PORT 0x40 - -static uint8_t *i8253_base = NULL; - -static void i8253_io_handler(uint32_t offset, int len, bool is_write) { -} - -void init_i8253() { - i8253_base = (void *)new_space(4); - add_pio_map("i8253-pit", I8253_PORT, i8253_base, 4, i8253_io_handler); -} diff --git a/libraries/NEMU/src/isa/x86/device/i8259a.c b/libraries/NEMU/src/isa/x86/device/i8259a.c deleted file mode 100644 index 1141751..0000000 --- a/libraries/NEMU/src/isa/x86/device/i8259a.c +++ /dev/null @@ -1,15 +0,0 @@ -#include - -#define I8259A_MASTER_PORT 0x20 -#define I8259A_SLAVE_PORT 0xa0 - -static uint8_t *i8259a_base = NULL; - -static void i8259a_io_handler(uint32_t offset, int len, bool is_write) { -} - -void init_i8259a() { - i8259a_base = (void *)new_space(2); - add_pio_map("i8259a-master", I8259A_MASTER_PORT, i8259a_base, 2, i8259a_io_handler); - add_pio_map("i8259a-slave", I8259A_SLAVE_PORT, i8259a_base, 2, i8259a_io_handler); -} diff --git a/libraries/NEMU/src/isa/x86/device/ioport80.c b/libraries/NEMU/src/isa/x86/device/ioport80.c deleted file mode 100644 index 6613ab4..0000000 --- a/libraries/NEMU/src/isa/x86/device/ioport80.c +++ /dev/null @@ -1,14 +0,0 @@ -#include - -// this is an empty device in QEMU -#define IOPORT80_PORT 0x80 - -static uint8_t *ioport80_base = NULL; - -static void ioport80_io_handler(uint32_t offset, int len, bool is_write) { -} - -void init_ioport80() { - ioport80_base = (void *)new_space(1); - add_pio_map("ioport80", IOPORT80_PORT, ioport80_base, 1, ioport80_io_handler); -} diff --git a/libraries/NEMU/src/isa/x86/device/mc146818rtc.c b/libraries/NEMU/src/isa/x86/device/mc146818rtc.c deleted file mode 100644 index 9c074e0..0000000 --- a/libraries/NEMU/src/isa/x86/device/mc146818rtc.c +++ /dev/null @@ -1,13 +0,0 @@ -#include - -#define RTC_PORT 0x70 - -static uint8_t *rtc_base = NULL; - -static void rtc_io_handler(uint32_t offset, int len, bool is_write) { -} - -void init_mc146818rtc() { - rtc_base = (void *)new_space(2); - add_pio_map("mc146818rtc", RTC_PORT, rtc_base, 2, rtc_io_handler); -} diff --git a/libraries/NEMU/src/isa/x86/difftest/dut.c b/libraries/NEMU/src/isa/x86/difftest/dut.c deleted file mode 100644 index 38a3e32..0000000 --- a/libraries/NEMU/src/isa/x86/difftest/dut.c +++ /dev/null @@ -1,61 +0,0 @@ -#include -#include -#include "../local-include/reg.h" -#include - -#ifndef __ICS_EXPORT -#include - -bool isa_difftest_checkregs(CPU_state *ref_r, vaddr_t pc) { - if (memcmp(&cpu, ref_r, DIFFTEST_REG_SIZE)) { - int i; - for (i = 0; i < ARRLEN(cpu.gpr); i ++) { - difftest_check_reg(reg_name(i, 4), pc, ref_r->gpr[i]._32, cpu.gpr[i]._32); - } - difftest_check_reg("pc", pc, ref_r->pc, cpu.pc); - return false; - } - return true; -} - -void isa_difftest_attach() { - // first copy the image - ref_difftest_memcpy(CONFIG_MBASE, guest_to_host(CONFIG_MBASE), CONFIG_MSIZE, DIFFTEST_TO_REF); - - // then set some special registers - uint8_t code[] = { - // we put this code at 0x7e00 - 0xb8, 0x00, 0x00, 0x00, 0x00, // mov $0x0, %eax - 0x0f, 0x22, 0xd8, // mov %eax, %cr3 - 0xb8, 0x00, 0x00, 0x00, 0x00, // mov $0x0, %eax - 0x0f, 0x22, 0xc0, // mov %eax, %cr0 - 0x0f, 0x01, 0x1d, 0x40, 0x7e, 0x00, 0x00, // lidtl (0x7e40) - }; - uint8_t idtdesc[6]; - - *(uint32_t *)(code + 1) = cpu.cr3.val; - *(uint32_t *)(code + 9) = cpu.cr0.val; - - idtdesc[0] = cpu.idtr.limit & 0xff; - idtdesc[1] = cpu.idtr.limit >> 8; - *(uint32_t *)(idtdesc + 2) = cpu.idtr.base; - - assert(sizeof(code) < 0x40); - ref_difftest_memcpy(0x7e00, code, sizeof(code), DIFFTEST_TO_REF); - ref_difftest_memcpy(0x7e40, idtdesc, sizeof(idtdesc), DIFFTEST_TO_REF); - - CPU_state r = cpu; - r.pc = 0x7e00; - ref_difftest_regcpy(&r, DIFFTEST_TO_REF); - ref_difftest_exec(5); - - ref_difftest_regcpy(&cpu, DIFFTEST_TO_REF); -} -#else -bool isa_difftest_checkregs(CPU_state *ref_r, vaddr_t pc) { - return false; -} - -void isa_difftest_attach() { -} -#endif diff --git a/libraries/NEMU/src/isa/x86/difftest/ref.c b/libraries/NEMU/src/isa/x86/difftest/ref.c deleted file mode 100644 index fbfa827..0000000 --- a/libraries/NEMU/src/isa/x86/difftest/ref.c +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include -#include "../local-include/intr.h" - -void isa_difftest_regcpy(void *dut, bool direction) { - if (direction == DIFFTEST_TO_REF) memcpy(&cpu, dut, DIFFTEST_REG_SIZE); - else memcpy(dut, &cpu, DIFFTEST_REG_SIZE); -} - -void isa_difftest_raise_intr(word_t NO) { - cpu.pc = raise_intr(NO, cpu.pc); -} diff --git a/libraries/NEMU/src/isa/x86/exec/all-instr.h b/libraries/NEMU/src/isa/x86/exec/all-instr.h deleted file mode 100644 index 6b4af2b..0000000 --- a/libraries/NEMU/src/isa/x86/exec/all-instr.h +++ /dev/null @@ -1,17 +0,0 @@ -#include "../local-include/rtl.h" - -#include "arith.h" -#include "control.h" -#include "data-mov.h" -#include "logic.h" -#include "string.h" -#include "system.h" -#include "eflags.h" -#include "bit.h" -#include "misc.h" -#include "vector.h" -#include "fp.h" - -def_EHelper(nop); -def_EHelper(inv); -def_EHelper(nemu_trap); diff --git a/libraries/NEMU/src/isa/x86/exec/exec.c b/libraries/NEMU/src/isa/x86/exec/exec.c deleted file mode 100644 index cabf30e..0000000 --- a/libraries/NEMU/src/isa/x86/exec/exec.c +++ /dev/null @@ -1,476 +0,0 @@ -#if 0 -#include -#include "../local-include/decode.h" -#include "all-instr.h" - -#undef CASE_ENTRY -#define CASE_ENTRY(idx, id, ex, w) case idx: set_width(s, w); id(s); return_on_mem_ex(); ex(s); break; - -static inline void set_width(Decode *s, int width) { - if (width == -1) return; - if (width == 0) { - width = s->isa.is_operand_size_16 ? 2 : 4; - } - s->src1.width = s->dest.width = s->src2.width = width; -} - -/* 0x80, 0x81, 0x83 */ -static inline def_EHelper(gp1) { - switch (s->isa.ext_opcode) { -#ifdef __ICS_EXPORT - EMPTY(0) EMPTY(1) EMPTY(2) EMPTY(3) - EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) -#else - EXW(0, add, -1) EXW(1, or, -1) EXW(2, adc, -1) EXW(3, sbb, -1) - EXW(4, and, -1) EXW(5, sub, -1) EXW(6, xor, -1) EXW(7, cmp, -1) -#endif - } -} - -/* 0xc0, 0xc1, 0xd0, 0xd1, 0xd2, 0xd3 */ -static inline def_EHelper(gp2) { - switch (s->isa.ext_opcode) { -#ifdef __ICS_EXPORT - EMPTY(0) EMPTY(1) EMPTY(2) EMPTY(3) - EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) -#else - EXW(0, rol, -1) EXW(1, ror, -1) EXW (2, rcl, -1) EXW (3, rcr, -1) - EXW(4, shl, -1) EXW(5, shr, -1) EMPTY(6) EXW (7, sar, -1) -#endif - } -} - -/* 0xf6, 0xf7 */ -static inline def_EHelper(gp3) { - switch (s->isa.ext_opcode) { -#ifdef __ICS_EXPORT - EMPTY(0) EMPTY(1) EMPTY(2) EMPTY(3) - EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) -#else - IDEXW(0, test_I, test, -1) EMPTY(1) EXW(2, not, -1) EXW(3, neg, -1) - EXW (4, mul, -1) EXW (5, imul1, -1) EXW(6, div, -1) EXW(7, idiv, -1) -#endif - } -} - -/* 0xfe */ -static inline def_EHelper(gp4) { - switch (s->isa.ext_opcode) { -#ifdef __ICS_EXPORT - EMPTY(0) EMPTY(1) EMPTY(2) EMPTY(3) - EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) -#else - EXW (0, inc, -1) EXW (1, dec, -1) EMPTY(2) EMPTY(3) - EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) -#endif - } -} - -/* 0xff */ -static inline def_EHelper(gp5) { - switch (s->isa.ext_opcode) { -#ifdef __ICS_EXPORT - EMPTY(0) EMPTY(1) EMPTY(2) EMPTY(3) - EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) -#else - EXW(0, inc, -1) EXW (1, dec, -1) EXW(2, call_rm, -1) EMPTY(3) - EXW(4, jmp_rm, -1) EMPTY(5) EXW(6, push, -1) EMPTY(7) -#endif - } -} - -/* 0x0f 0x01*/ -static inline def_EHelper(gp7) { - switch (s->isa.ext_opcode) { -#ifdef __ICS_EXPORT - EMPTY(0) EMPTY(1) EMPTY(2) EMPTY(3) - EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) -#else - EMPTY(0) EMPTY(1) EXW (2, lgdt, -1) EXW (3, lidt, -1) - EMPTY(4) EMPTY(5) EMPTY(6) EXW (7, invlpg, -1) -#endif - } -} - -#ifndef __ICS_EXPORT -/* 0x0f 0x00*/ -static inline def_EHelper(gp6) { - switch (s->isa.ext_opcode) { - EMPTY(0) EMPTY(1) EXW (2, lldt, -1) EXW (3, ltr, -1) - EMPTY(4) EMPTY(5) EMPTY(6) EMPTY(7) - } -} - -/* 0x0f 0xba*/ -static inline def_EHelper(gp8) { - switch (s->isa.ext_opcode) { - EMPTY(0) EMPTY(1) EMPTY(2) EMPTY(3) - EXW (4, bt, -1) EXW (5, bts, -1) EXW (6, btr, -1) EMPTY(7) - } -} - -static inline def_EHelper(fp_gp1) { - uint8_t opb = BITS(s->isa.ext_opcode,2,0); - switch (opb) { - EX(0x00, fchs) EX(0x01, fabs) EMPTY(0x02) EMPTY(0x03) - EX(0x04, ftst) EX(0x05, fxam) EMPTY(0x06) EMPTY(0x07) - } -} - -static inline def_EHelper(fp_gp2) { - uint8_t opb = BITS(s->isa.ext_opcode,2,0); - switch (opb) { - EX(0x00, fld1) EX(0x01, fldl2t) EX(0x02, fldl2e) EX(0x03, fldpi) - EX(0x04, fldlg2) EX(0x05, fldln2) EX(0x06, fldz) EMPTY(0x07) - } -} - -static inline def_EHelper(fp_gp3) { - uint8_t opb = BITS(s->isa.ext_opcode,2,0); - switch (opb) { - EMPTY(0x00) IDEX(0x01,St0_St1,fucompp) EMPTY(0x02) EMPTY(0x03) - EMPTY(0x04) EMPTY(0x05) EMPTY(0x06) EMPTY(0x07) - } -} - -static inline def_EHelper(fp_gp4) { - uint8_t opb = BITS(s->isa.ext_opcode,2,0); - switch (opb) { - EMPTY(0x00) EMPTY(0x01) EMPTY(0x02) EX (0X03, finit) - EMPTY(0x04) EMPTY(0x05) EMPTY(0x06) EMPTY(0x07) - } -} - -static inline def_EHelper(fp_gp5) { - uint8_t opb = BITS(s->isa.ext_opcode,2,0); - switch (opb) { - EMPTY(0x00) IDEX(0x01,St0_St1,fcompp) EMPTY(0x02) EMPTY(0x03) - EMPTY(0x04) EMPTY(0x05) EMPTY(0x06) EMPTY(0x07) - } -} - -static inline def_EHelper(fp_gp6) { - uint8_t opb = BITS(s->isa.ext_opcode,2,0); - switch (opb) { - IDEXW(0x00, fsw2a, fstsw, 2) EMPTY(0x01) EMPTY(0x02) EMPTY(0x03) - EMPTY(0x04) EMPTY(0x05) EMPTY(0x06) EMPTY(0x07) - } -} - -static inline def_EHelper(fp_gp7) { - uint8_t opb = BITS(s->isa.ext_opcode,2,0); - switch (opb) { - IDEX(0x00, St0_St1, fprem) IDEX(0x01, St0_St1, fyl2xp1) EX(0x02, fsqrt) EMPTY(0x03) - EX(0x04, frndint) IDEX(0x05, St0_St1, fscale) EMPTY(0x06) EMPTY(0x07) - } -} - -static inline def_EHelper(fp_gp8) { - uint8_t opb = BITS(s->isa.ext_opcode,2,0); - switch (opb) { - EX(0x00, f2xm1) IDEX(0x01, St0_St1, fyl2x) EMPTY(0x02) IDEX(0x03, St0_St1, fpatan) - EMPTY(0x04) EMPTY(0x05) EMPTY(0x06) EMPTY(0x07) - } -} - -static inline def_EHelper(fp) { - uint8_t fp_opcode = BITS(s->opcode,2,0)<<4 | BITS(s->isa.ext_opcode,5,3); - uint8_t fp_mod = BITS(s->isa.ext_opcode,7,6); - if(fp_mod != 3){ - //if (cpu.pc == 0x82a46c9) Log("fp_opcode = 0x%x", fp_opcode); - switch (fp_opcode) - { - IDEX(0x00, St0_M_32r, fadd) IDEX(0x01, St0_M_32r, fmul) IDEX(0x02, St0_M_32r, fcom) IDEX(0x03, St0_M_32r, fcomp) - IDEX(0x04, St0_M_32r, fsub) IDEX(0x05, St0_M_32r, fsubr) IDEX(0x06, St0_M_32r, fdiv) IDEX(0x07, St0_M_32r, fdivr) - IDEX(0x10, ld_St0_M_32r, fld) EMPTY(0x11) IDEX(0x12, st_M_St0_32r, fst) IDEX(0x13, st_M_St0_32r, fstp) - IDEX(0x14, St0_Est, fldenv) IDEXW(0x15, M2fcw, fldcw, 2) IDEX(0x16, St0_Est, fstenv) IDEXW(0x17, fcw2M, fstcw, 2) - IDEX(0x20, St0_M_32i, fadd) IDEX(0x21, St0_M_32i, fmul) IDEX(0x22, St0_M_32i, fcom) IDEX(0x23, St0_M_32i, fcomp) - IDEX(0x24, St0_M_32i, fsub) IDEX(0x25, St0_M_32i, fsubr) IDEX(0x26, St0_M_32i, fdiv) IDEX(0x27, St0_M_32i, fdivr) - IDEX(0x30, ld_St0_M_32i, fld) EMPTY(0x31) IDEX(0x32, st_M_St0_32i, fst) IDEX(0x33, st_M_St0_32i, fstp) - EMPTY(0x34) EMPTY(0x35) /*IDEX(0x35, ld_St0_M_80r, fld)*/ EMPTY(0x36) /*IDEX(0x37, st_M_St0_64r, fstp)*/ EMPTY(0x37) - IDEX(0x40, St0_M_64r, fadd) IDEX(0x41, St0_M_64r, fmul) IDEX(0x42, St0_M_64r, fcom) IDEX(0x43, St0_M_64r, fcomp) - IDEX(0x44, St0_M_64r, fsub) IDEX(0x45, St0_M_64r, fsubr) IDEX(0x46, St0_M_64r, fdiv) IDEX(0x47, St0_M_64r, fdivr) - IDEX(0x50, ld_St0_M_64r, fld) EMPTY(0x51) IDEX(0x52, st_M_St0_64r, fst) IDEX(0x53, st_M_St0_64r, fstp) - EMPTY(0x54) EMPTY(0x55) EMPTY(0x56) IDEXW(0x57, fsw2M, fstsw, 2) - IDEX(0x60, St0_M_16i, fadd) IDEX(0x61, St0_M_16i, fmul) IDEX(0x62, St0_M_16i, fcom) IDEX(0x63, St0_M_16i, fcomp) - IDEX(0x64, St0_M_16i, fsub) IDEX(0x65, St0_M_16i, fsubr) IDEX(0x66, St0_M_16i, fdiv) IDEX(0x67, St0_M_16i, fdivr) - IDEX(0x70, ld_St0_M_16i, fld) EMPTY(0x71) IDEX(0x72, st_M_St0_16i, fst) IDEX(0x73, st_M_St0_16i, fstp) - EMPTY(0x74) IDEX(0x75, ld_St0_M_64i, fld) EMPTY(0x76) IDEX(0x77, st_M_St0_64i, fstp) - default: - exec_inv(s); - break; - } - } - else - { - //if (cpu.pc == 0x8094758) Log("fp_opcode = 0x%x", fp_opcode); - switch (fp_opcode) - { - IDEX(0x00, St0_Est, fadd) IDEX(0x01, St0_Est, fmul) IDEX(0x02, St0_Est, fcom) IDEX(0x03, St0_Est, fcomp) - IDEX(0x04, St0_Est, fsub) IDEX(0x05, St0_Est, fsubr) IDEX(0x06, St0_Est, fdiv) IDEX(0x07, St0_Est, fdivr) - IDEX(0x10, ld_Est_St0, fld) IDEX(0x11, St0_Est, fxch) EX (0x12, nop) EMPTY(0x13) - IDEX(0x14, St0, fp_gp1) IDEX(0x15, ld_St0, fp_gp2) IDEX(0x16, St0_Est, fp_gp8) IDEX(0x17, St0, fp_gp7) - IDEX(0x20, St0_Est, fcmovb) IDEX(0x21, St0_Est, fcmove) IDEX(0x22, St0_Est, fcmovbe) IDEX(0x23, St0_Est, fcmovu) - EMPTY(0x24) EX (0x25, fp_gp3) EMPTY(0x26) EMPTY(0x27) - IDEX(0x30, St0_Est, fcmovnb) IDEX(0x31, St0_Est, fcmovne) IDEX(0x32, St0_Est, fcmovnbe) IDEX(0x33, St0_Est, fcmovnu) - EX (0x34, fp_gp4) IDEX(0x35, St0_Est, fucomi) IDEX(0x36, St0_Est, fcomi) EMPTY(0x37) - IDEX(0x40, Est_St0, fadd) IDEX(0x41, Est_St0, fmul) EMPTY(0x42) EMPTY(0x43) - IDEX(0x44, Est_St0, fsubr) IDEX(0x45, Est_St0, fsub) IDEX(0x46, Est_St0, fdivr) IDEX(0x47, Est_St0, fdiv) - EMPTY(0x50) EMPTY(0x51) IDEX(0x52, st_Est_St0, fst) IDEX(0x53, st_Est_St0, fstp) - IDEX(0x54, St0_Est, fucom) IDEX(0x55, St0_Est, fucomp) EMPTY(0x56) EMPTY(0x57) - IDEX(0x60, Est_St0, faddp) IDEX(0x61, Est_St0, fmulp) EMPTY(0x62) EX (0x63, fp_gp5) - IDEX(0x64, Est_St0, fsubrp) IDEX(0x65, Est_St0, fsubp) IDEX(0x66, Est_St0, fdivrp) IDEX(0x67, Est_St0, fdivp) - EMPTY(0x70) EMPTY(0x71) EMPTY(0x72) EMPTY(0x73) - EX (0x74, fp_gp6) IDEX(0x75, St0_Est, fucomip) IDEX (0x76, St0_Est, fcomip) EMPTY(0x77) - default: - exec_inv(s); - break; - } - } - -} -#endif - -static inline def_EHelper(2byte_esc) { - uint8_t opcode = instr_fetch(&s->seq_pc, 1); - s->opcode = opcode | 0x100; - switch (opcode) { - /* TODO: Add more instructions!!! */ - IDEX (0x01, gp7_E, gp7) -#ifndef __ICS_EXPORT - IDEXW(0x00, gp6_E, gp6, 2) - IDEX (0x20, mov_G2E, mov_cr2r) - IDEX (0x22, mov_E2G, mov_r2cr) - IDEX (0x23, mov_E2G, mov_r2dr) - EX (0x31, rdtsc) - IDEXW(0x6f, E2xmm, movdqa_E2xmm, 4) - IDEXW(0x73, Ib2xmm, psrlq, 4) - IDEXW(0x7e, E2xmm, movq_E2xmm, 4) - IDEXW(0x80, J, jcc, 4) IDEXW(0x81, J, jcc, 4) IDEXW(0x82, J, jcc, 4) IDEXW(0x83, J, jcc, 4) - IDEXW(0x84, J, jcc, 4) IDEXW(0x85, J, jcc, 4) IDEXW(0x86, J, jcc, 4) IDEXW(0x87, J, jcc, 4) - IDEXW(0x88, J, jcc, 4) IDEXW(0x89, J, jcc, 4) IDEXW(0x8a, J, jcc, 4) IDEXW(0x8b, J, jcc, 4) - IDEXW(0x8c, J, jcc, 4) IDEXW(0x8d, J, jcc, 4) IDEXW(0x8e, J, jcc, 4) IDEXW(0x8f, J, jcc, 4) - IDEX (0x40, E2G, cmovcc) IDEX (0x41, E2G, cmovcc) IDEX (0x42, E2G, cmovcc) IDEX (0x43, E2G, cmovcc) - IDEX (0x44, E2G, cmovcc) IDEX (0x45, E2G, cmovcc) IDEX (0x46, E2G, cmovcc) IDEX (0x47, E2G, cmovcc) - IDEX (0x48, E2G, cmovcc) IDEX (0x49, E2G, cmovcc) IDEX (0x4a, E2G, cmovcc) IDEX (0x4b, E2G, cmovcc) - IDEX (0x4c, E2G, cmovcc) IDEX (0x4d, E2G, cmovcc) IDEX (0x4e, E2G, cmovcc) IDEX (0x4f, E2G, cmovcc) - IDEXW(0x90, setcc_E, setcc, 1) IDEXW(0x91, setcc_E, setcc, 1) IDEXW(0x92, setcc_E, setcc, 1) IDEXW(0x93, setcc_E, setcc, 1) - IDEXW(0x94, setcc_E, setcc, 1) IDEXW(0x95, setcc_E, setcc, 1) IDEXW(0x96, setcc_E, setcc, 1) IDEXW(0x97, setcc_E, setcc, 1) - IDEXW(0x98, setcc_E, setcc, 1) IDEXW(0x99, setcc_E, setcc, 1) IDEXW(0x9a, setcc_E, setcc, 1) IDEXW(0x9b, setcc_E, setcc, 1) - IDEXW(0x9c, setcc_E, setcc, 1) IDEXW(0x9d, setcc_E, setcc, 1) IDEXW(0x9e, setcc_E, setcc, 1) IDEXW(0x9f, setcc_E, setcc, 1) - EX (0xa0, push_fs) - EX (0xa1, pop_fs) - EX (0xa2, cpuid) - IDEX (0xa3, bit_G2E, bt) - IDEX (0xa4, Ib_G2E, shld) - IDEX (0xa5, cl_G2E, shld) - IDEX (0xab, bit_G2E, bts) - IDEX (0xac, Ib_G2E, shrd) - IDEX (0xad, cl_G2E, shrd) - IDEX (0xaf, E2G, imul2) - IDEX (0xb1, a_G2E, cmpxchg) - IDEX (0xb3, bit_G2E, btr) - IDEXW(0xb6, mov_E2G, movzx, 1) - IDEXW(0xb7, mov_E2G, movzx, 2) - IDEX (0xba, gp2_Ib2E, gp8) - IDEX (0xbb, bit_G2E, btc) - IDEX (0xbc, mov_E2G, bsf) - IDEX (0xbd, mov_E2G, bsr) - IDEXW(0xbe, mov_E2G, movsx, 1) - IDEXW(0xbf, mov_E2G, movsx, 2) - IDEX (0xc1, G2E, xadd) - IDEXW(0xc7, E, cmpxchg8b, 4) - IDEXW(0xc8, r, bswap, 4) IDEXW(0xc9, r, bswap, 4) IDEXW(0xca, r, bswap, 4) IDEXW(0xcb, r, bswap, 4) - IDEXW(0xcc, r, bswap, 4) IDEXW(0xcd, r, bswap, 4) IDEXW(0xce, r, bswap, 4) IDEXW(0xcf, r, bswap, 4) - IDEXW(0xd6, xmm2E, movq_xmm2E, 4) - IDEXW(0xef, E2xmm, pxor, 4) -#endif - default: exec_inv(s); - } -} - -static inline void fetch_decode_exec(Decode *s) { - uint8_t opcode; -again: - opcode = instr_fetch(&s->seq_pc, 1); - return_on_mem_ex(); - s->opcode = opcode; - switch (opcode) { -#ifdef __ICS_EXPORT - EX (0x0f, 2byte_esc) - IDEXW(0x80, I2E, gp1, 1) - IDEX (0x81, I2E, gp1) - IDEX (0x83, SI2E, gp1) - IDEXW(0x88, mov_G2E, mov, 1) - IDEX (0x89, mov_G2E, mov) - IDEXW(0x8a, mov_E2G, mov, 1) - IDEX (0x8b, mov_E2G, mov) - IDEXW(0xa0, O2a, mov, 1) - IDEX (0xa1, O2a, mov) - IDEXW(0xa2, a2O, mov, 1) - IDEX (0xa3, a2O, mov) - IDEXW(0xb0, mov_I2r, mov, 1) - IDEXW(0xb1, mov_I2r, mov, 1) - IDEXW(0xb2, mov_I2r, mov, 1) - IDEXW(0xb3, mov_I2r, mov, 1) - IDEXW(0xb4, mov_I2r, mov, 1) - IDEXW(0xb5, mov_I2r, mov, 1) - IDEXW(0xb6, mov_I2r, mov, 1) - IDEXW(0xb7, mov_I2r, mov, 1) - IDEX (0xb8, mov_I2r, mov) - IDEX (0xb9, mov_I2r, mov) - IDEX (0xba, mov_I2r, mov) - IDEX (0xbb, mov_I2r, mov) - IDEX (0xbc, mov_I2r, mov) - IDEX (0xbd, mov_I2r, mov) - IDEX (0xbe, mov_I2r, mov) - IDEX (0xbf, mov_I2r, mov) - IDEXW(0xc0, gp2_Ib2E, gp2, 1) - IDEX (0xc1, gp2_Ib2E, gp2) - IDEXW(0xc6, mov_I2E, mov, 1) - IDEX (0xc7, mov_I2E, mov) - IDEXW(0xd0, gp2_1_E, gp2, 1) - IDEX (0xd1, gp2_1_E, gp2) - IDEXW(0xd2, gp2_cl2E, gp2, 1) - IDEX (0xd3, gp2_cl2E, gp2) - EX (0xd6, nemu_trap) - IDEXW(0xf6, E, gp3, 1) - IDEX (0xf7, E, gp3) - IDEXW(0xfe, E, gp4, 1) - IDEX (0xff, E, gp5) -#else -// 1 2 3 4 5 6 7 8 9 -//34567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 -IDEXW(0x00, G2E, add, 1) IDEX (0x01, G2E, add) IDEXW(0x02, E2G, add, 1) IDEX (0x03, E2G, add) -IDEXW(0x04, I2a, add, 1) IDEX (0x05, I2a, add) EX (0x06, push_es) EX (0x07, pop_es) -IDEXW(0x08, G2E, or, 1) IDEX (0x09, G2E, or) IDEXW(0x0a, E2G, or, 1) IDEX (0x0b, E2G, or) -IDEXW(0x0c, I2a, or, 1) IDEX (0x0d, I2a, or) EMPTY(0x0e) EX (0x0f, 2byte_esc) -IDEXW(0x10, G2E, adc, 1) IDEX (0x11, G2E, adc) IDEXW(0x12, E2G, adc, 1) IDEX (0x13, E2G, adc) -IDEXW(0x14, I2a, adc, 1) IDEX (0x15, I2a, adc) -IDEXW(0x18, G2E, sbb, 1) IDEX (0x19, G2E, sbb) IDEXW(0x1a, E2G, sbb, 1) IDEX (0x1b, E2G, sbb) -IDEXW(0x1c, I2a, sbb, 1) EX (0x1e, push_ds) EX (0x1f, pop_ds) -IDEXW(0x20, G2E, and, 1) IDEX (0x21, G2E, and) IDEXW(0x22, E2G, and, 1) IDEX (0x23, E2G, and) -IDEXW(0x24, I2a, and, 1) IDEX (0x25, I2a, and) -IDEXW(0x28, G2E, sub, 1) IDEX (0x29, G2E, sub) IDEXW(0x2a, E2G, sub, 1) IDEX (0x2b, E2G, sub) -IDEXW(0x2c, I2a, sub, 1) IDEX (0x2d, I2a, sub) -IDEXW(0x30, G2E, xor, 1) IDEX (0x31, G2E, xor) IDEXW(0x32, E2G, xor, 1) IDEX (0x33, E2G, xor) -IDEXW(0x34, I2a, xor, 1) IDEX (0x35, I2a, xor) -IDEXW(0x38, G2E, cmp, 1) IDEX (0x39, G2E, cmp) IDEXW(0x3a, E2G, cmp, 1) IDEX (0x3b, E2G, cmp) -IDEXW(0x3c, I2a, cmp, 1) IDEX (0x3d, I2a, cmp) -IDEX (0x40, r, inc) IDEX (0x41, r, inc) IDEX (0x42, r, inc) IDEX (0x43, r, inc) -IDEX (0x44, r, inc) IDEX (0x45, r, inc) IDEX (0x46, r, inc) IDEX (0x47, r, inc) -IDEX (0x48, r, dec) IDEX (0x49, r, dec) IDEX (0x4a, r, dec) IDEX (0x4b, r, dec) -IDEX (0x4c, r, dec) IDEX (0x4d, r, dec) IDEX (0x4e, r, dec) IDEX (0x4f, r, dec) -IDEX (0x50, r, push) IDEX (0x51, r, push) IDEX (0x52, r, push) IDEX (0x53, r, push) -IDEX (0x54, r, push) IDEX (0x55, r, push) IDEX (0x56, r, push) IDEX (0x57, r, push) -IDEX (0x58, r, pop) IDEX (0x59, r, pop) IDEX (0x5a, r, pop) IDEX (0x5b, r, pop) -IDEX (0x5c, r, pop) IDEX (0x5d, r, pop) IDEX (0x5e, r, pop) IDEX (0x5f, r, pop) -EX (0x60, pusha) EX (0x61, popa) - //EX (0x66, operand_size) -IDEX (0x68, I, push) IDEX (0x69, I_E2G, imul3) IDEXW(0x6a, push_SI, push, 1)IDEX (0x6b, SI_E2G, imul3) - -IDEXW(0x70, J, jcc, 1) IDEXW(0x71, J, jcc, 1) IDEXW(0x72, J, jcc, 1) IDEXW(0x73, J, jcc, 1) -IDEXW(0x74, J, jcc, 1) IDEXW(0x75, J, jcc, 1) IDEXW(0x76, J, jcc, 1) IDEXW(0x77, J, jcc, 1) -IDEXW(0x78, J, jcc, 1) IDEXW(0x79, J, jcc, 1) IDEXW(0x7a, J, jcc, 1) IDEXW(0x7b, J, jcc, 1) -IDEXW(0x7c, J, jcc, 1) IDEXW(0x7d, J, jcc, 1) IDEXW(0x7e, J, jcc, 1) IDEXW(0x7f, J, jcc, 1) -IDEXW(0x80, I2E, gp1, 1) IDEX (0x81, I2E, gp1) EMPTY(0x82) IDEX (0x83, SI2E, gp1) -IDEXW(0x84, G2E, test, 1) IDEX (0x85, G2E, test) IDEXW(0x86, G2E, xchg, 1) IDEX (0x87, G2E, xchg) -IDEXW(0x88, mov_G2E, mov, 1)IDEX (0x89, mov_G2E, mov) IDEXW(0x8a, mov_E2G, mov, 1)IDEX (0x8b, mov_E2G, mov) -IDEX (0x8c, mov_G2E, mov_sreg2rm) IDEX (0x8d, lea_M2G, lea) IDEX (0x8e, mov_E2G, mov_rm2sreg) IDEX (0x8f, E, pop) -EX (0x90, nop) IDEX (0x91, a2r, xchg) IDEX (0x92, a2r, xchg) IDEX (0x93, a2r, xchg) -IDEX (0x94, a2r, xchg) IDEX (0x95, a2r, xchg) IDEX (0x96, a2r, xchg) IDEX (0x97, a2r, xchg) -EX (0x98, cwtl) EX (0x99, cltd) EX (0x9b, fwait) -EX (0x9c, pushf) EX (0x9d, popf) EX (0x9e, sahf) -IDEXW(0xa0, O2a, mov, 1) IDEX (0xa1, O2a, mov) IDEXW(0xa2, a2O, mov, 1) IDEX (0xa3, a2O, mov) -EXW (0xa4, movs, 1) EX (0xa5, movs) EXW (0xa6, cmps, 1) -IDEXW(0xa8, I2a, test, 1) IDEX (0xa9, I2a, test) IDEXW(0xaa, aSrc, stos, 1) IDEX (0xab, aSrc, stos) -IDEXW(0xac, aDest, lods, 1) IDEXW(0xae, aSrc, scas, 1) -IDEXW(0xb0, mov_I2r, mov, 1)IDEXW(0xb1, mov_I2r, mov, 1)IDEXW(0xb2, mov_I2r, mov, 1)IDEXW(0xb3, mov_I2r, mov, 1) -IDEXW(0xb4, mov_I2r, mov, 1)IDEXW(0xb5, mov_I2r, mov, 1)IDEXW(0xb6, mov_I2r, mov, 1)IDEXW(0xb7, mov_I2r, mov, 1) -IDEX (0xb8, mov_I2r, mov) IDEX (0xb9, mov_I2r, mov) IDEX (0xba, mov_I2r, mov) IDEX (0xbb, mov_I2r, mov) -IDEX (0xbc, mov_I2r, mov) IDEX (0xbd, mov_I2r, mov) IDEX (0xbe, mov_I2r, mov) IDEX (0xbf, mov_I2r, mov) -IDEXW(0xc0, gp2_Ib2E, gp2, 1)IDEX (0xc1, gp2_Ib2E, gp2) IDEXW(0xc2, I, ret_imm, 2) EX (0xc3, ret) - IDEXW(0xc6, mov_I2E, mov, 1)IDEX (0xc7, mov_I2E, mov) - EX (0xc9, leave) - IDEXW(0xcd, I, int, 1) EX (0xcf, iret) -IDEXW(0xd0, gp2_1_E, gp2, 1)IDEX (0xd1, gp2_1_E, gp2) IDEXW(0xd2, gp2_cl2E, gp2, 1)IDEX (0xd3, gp2_cl2E, gp2) - EX (0xd6, nemu_trap) -IDEX(0xd8, fp_ext, fp) IDEX(0xd9, fp_ext, fp) IDEX(0xda, fp_ext, fp) IDEX(0xdb, fp_ext, fp) -IDEX(0xdc, fp_ext, fp) IDEX(0xdd, fp_ext, fp) IDEX(0xde, fp_ext, fp) IDEX(0xdf, fp_ext, fp) - IDEXW(0xe3, J, jecxz, 1) -IDEXW(0xe4, in_I2a, in, 1) IDEXW(0xe6, out_a2I, out, 1) -IDEX (0xe8, J, call) IDEXW(0xe9, J, jmp, 4) IDEXW(0xea, LJ, ljmp, 4) IDEXW(0xeb, J, jmp, 1) -IDEXW(0xec, in_dx2a, in, 1) IDEX (0xed, in_dx2a, in) IDEXW(0xee, out_a2dx, out, 1)IDEX (0xef, out_a2dx, out) - -EX (0xf4, hlt) IDEXW(0xf6, E, gp3, 1) IDEX (0xf7, E, gp3) -EX (0xf8, clc) EX (0xf9, stc) EX (0xfa, cli) EX (0xfb, sti) -EX (0xfc, cld) EX (0xfd, std) IDEXW(0xfe, E, gp4, 1) IDEX (0xff, E, gp5) - case 0x64: s->isa.sreg_base = &cpu.sreg[CSR_FS].base; goto again; - case 0x65: s->isa.sreg_base = &cpu.sreg[CSR_GS].base; goto again; - case 0xf0: cpu.lock = 1; goto again; // LOCK prefix - case 0xf2: s->isa.rep_flags = PREFIX_REPNZ; goto again; - case 0xf3: s->isa.rep_flags = PREFIX_REP; goto again; -#endif - case 0x66: s->isa.is_operand_size_16 = true; goto again; - default: exec_inv(s); - } -} - -#ifdef ENABLE_DIFFTEST_INSTR_QUEUE -static uint8_t instr_buf[20]; -static uint8_t instr_len; - -void add_instr(uint8_t *instr, int len) { - int i; - for (i = 0; i < len; i ++) { - instr_buf[instr_len ++] = instr[i]; - } -} -#endif - -vaddr_t isa_exec_once() { -#ifndef __ICS_EXPORT -//#define USE_KVM -#ifdef USE_KVM - extern void kvm_exec(); - kvm_exec(); - return 0; -#endif -#endif - Decode s; - s.is_jmp = 0; - s.isa = (ISADecodeInfo) { 0 }; - s.seq_pc = cpu.pc; - -#ifdef ENABLE_DIFFTEST_INSTR_QUEUE - instr_len = 0; -#endif - - fetch_decode_exec(&s); - -#ifdef ENABLE_DIFFTEST_INSTR_QUEUE - void commit_instr(vaddr_t thispc, uint8_t *instr_buf, uint8_t instr_len); - commit_instr(cpu.pc, instr_buf, instr_len); -#endif - -#ifndef CONFIG_PA - if (cpu.mem_exception != 0) { - cpu.pc = raise_intr(cpu.mem_exception, cpu.pc); - cpu.mem_exception = 0; - } else { - update_pc(&s); - } - cpu.lock = 0; -#else - update_pc(&s); -#endif - -#ifndef __ICS_EXPORT -#if !defined(CONFIG_DIFFTEST) && !defined(CONFIG_SHARE) - void query_intr(); - query_intr(); -#endif -#endif - return s.seq_pc; -} -#endif diff --git a/libraries/NEMU/src/isa/x86/exec/fp.h b/libraries/NEMU/src/isa/x86/exec/fp.h deleted file mode 100644 index 68858ea..0000000 --- a/libraries/NEMU/src/isa/x86/exec/fp.h +++ /dev/null @@ -1,456 +0,0 @@ -#include -#include "cc.h" -#define dfdest (id_dest->pfreg) -#define dfsrc1 (id_src1->pfreg) -#define dfsrc2 (id_src2->pfreg) - -// ------------- dasm ------------- - -static inline const char* get_387_fomat(int subcode) { - static const char *fomat[] = { - "s", "i", "d", "wi", "li", " " - }; - return fomat[subcode]; -} - -#define print_asm_fpu_template(instr) \ - print_asm(str(instr) "%s %s", get_387_fomat(s->isa.fpu_MF), id_dest->str) -#define print_asm_fpu_template2(instr) \ - print_asm(str(instr) "%s %s,%s", get_387_fomat(s->isa.fpu_MF), id_src1->str, id_dest->str) - -// ------------- EHelpers ------------- - -// a macro to build exec_fadd/fsub/fmul/fmdiv/fmin/fmax -#define BUILD_EXEC_F(x) \ -static inline def_EHelper(concat(f, x)) { \ - concat(rtl_f64_, x)(s, dfdest, dfdest, dfsrc1); \ - print_asm_fpu_template2(concat(f, x)); \ -} - -#define BUILD_EXEC_F_R(x) \ -static inline def_EHelper(concat3(f, x, r)) { \ - concat(rtl_f64_, x)(s, dfdest, dfsrc1, dfdest); \ - print_asm_fpu_template2(concat3(f, x, r)); \ -} - -#define BUILD_EXEC_F_P(x) \ -static inline def_EHelper(concat3(f, x, p)) { \ - concat(rtl_f64_, x)(s, dfdest, dfdest, dfsrc1); \ - rtl_popftop(); \ - print_asm_fpu_template2(concat3(f, x, p)); \ -} - -#define BUILD_EXEC_F_RP(x) \ -static inline def_EHelper(concat3(f, x, rp)) { \ - concat(rtl_f64_, x)(s, dfdest, dfsrc1, dfdest); \ - rtl_popftop(); \ - print_asm_fpu_template2(concat3(f, x, rp)); \ -} - -BUILD_EXEC_F(add); -BUILD_EXEC_F(sub); -BUILD_EXEC_F(mul); -BUILD_EXEC_F(div); - -BUILD_EXEC_F_R(sub); -BUILD_EXEC_F_R(div); - -BUILD_EXEC_F_P(add); -BUILD_EXEC_F_P(sub); -BUILD_EXEC_F_P(mul); -BUILD_EXEC_F_P(div); - -BUILD_EXEC_F_RP(sub); -BUILD_EXEC_F_RP(div); - -//compare dest & src, save flag in fsw (use t0, s0) -static inline void fucom_helper(DecodeExecState *s, uint64_t* fp_dest, uint64_t* fp_src){ - rtl_li(s, t0, 0x4500); - rtl_lr_fsw(s,s0); - rtl_or(s, s0, s0, t0); - rtl_xor(s, s0, s0, t0); - rtl_f64_lt(s, t0, fp_dest, fp_src); - rtl_shli(s, t0, t0, 8); - rtl_or(s, s0, s0, t0); - rtl_f64_eq(s, t0, fp_dest, fp_src); - rtl_shli(s, t0, t0, 14); - rtl_or(s, s0, s0, t0); - rtl_sr_fsw(s,s0); -} -static inline def_EHelper(fcom){ - fucom_helper(s,dfdest,dfsrc1); - print_asm_fpu_template2(fcom); -} -static inline def_EHelper(fcomp){ - fucom_helper(s,dfdest,dfsrc1); - rtl_popftop(); - print_asm_fpu_template2(fcomp); -} -static inline def_EHelper(fcompp){ - fucom_helper(s,dfdest,dfsrc1); - rtl_pop2ftop(); - print_asm_fpu_template2(fcompp); -} -static inline def_EHelper(fucom){ - fucom_helper(s,dfdest,dfsrc1); - print_asm_fpu_template2(fucom); -} -static inline def_EHelper(fucomp){ - fucom_helper(s,dfdest,dfsrc1); - rtl_popftop(); - print_asm_fpu_template2(fucomp); -} -static inline def_EHelper(fucompp){ - fucom_helper(s,dfdest,dfsrc1); - rtl_pop2ftop(); - print_asm_fpu_template2(fucompp); -} - -//compare dest & src, save flag in eflags -static inline void fcom_helper(DecodeExecState *s, uint64_t* fp_dest, uint64_t* fp_src){ - rtl_f64_lt(s, t0, fp_dest, fp_src); - rtl_set_CF(s, t0); - rtl_f64_eq(s, t0, fp_dest, fp_src); - rtl_set_ZF(s, t0); - rtl_set_PF(s, rz); -} - -static inline def_EHelper(fcomip){ - fcom_helper(s, dfdest, dfsrc1); - rtl_popftop(); - print_asm_fpu_template2(fcomip); -} - -static inline def_EHelper(fcomi){ - fcom_helper(s, dfdest, dfsrc1); - print_asm_fpu_template2(fcomi); -} - -static inline def_EHelper(fucomi){ - fcom_helper(s, dfdest, dfsrc1); - print_asm_fpu_template2(fucomi); -} - -static inline def_EHelper(fucomip){ - fcom_helper(s, dfdest, dfsrc1); - rtl_popftop(); - print_asm_fpu_template2(fucomi); -} - -static inline def_EHelper(fld){ - operand_fwrite(s, id_dest, dfsrc1); - print_asm_fpu_template2(fld); -} -static inline def_EHelper(fld1){ - rtl_fld_const(s, dfdest, fconst_1); - print_asm_fpu_template(fld1); -} -static inline def_EHelper(fldl2t){ - rtl_fld_const(s, dfdest, fconst_l2t); - print_asm_fpu_template(fldl2t); -} -static inline def_EHelper(fldl2e){ - rtl_fld_const(s, dfdest, fconst_l2e); - print_asm_fpu_template(fldl2e); -} -static inline def_EHelper(fldpi){ - rtl_fld_const(s, dfdest, fconst_pi); - print_asm_fpu_template(fldpi); -} -static inline def_EHelper(fldlg2){ - rtl_fld_const(s, dfdest, fconst_lg2); - print_asm_fpu_template(fldlg2); -} -static inline def_EHelper(fldln2){ - rtl_fld_const(s, dfdest, fconst_ln2); - print_asm_fpu_template(fldln2); -} -static inline def_EHelper(fldz){ - rtl_fld_const(s, dfdest, fconst_z); - print_asm_fpu_template(fldz); -} - -static inline def_EHelper(fst){ - operand_fwrite(s, id_dest, dfsrc1); - print_asm_fpu_template2(fst); -} -static inline def_EHelper(fstp){ - operand_fwrite(s, id_dest, dfsrc1); - rtl_popftop(); - print_asm_fpu_template2(fstp); -} -static inline def_EHelper(fxch){ - rtl_sfr(s, &id_src2->fval, dfdest); - rtl_sfr(s, dfdest, dfsrc1); - rtl_sfr(s, dfsrc1, &id_src2->fval); - print_asm_fpu_template2(fxch); -} - -static inline def_EHelper(fchs){ - rtl_f64_chs(s, dfdest); - print_asm_fpu_template(fchs); -} -static inline def_EHelper(fabs){ - rtl_f64_abs(s, dfdest); - print_asm_fpu_template(fabs); -} -static inline def_EHelper(ftst){ - rtl_fld_const(s, &id_src1->fval, fconst_z); - fucom_helper(s,dfdest,&id_src1->fval); - print_asm_fpu_template(ftst); -} -static inline def_EHelper(fxam){ - //produce number in table as 80387 demand - rtl_class387(s, s2, dfdest); - rtl_li(s, t0, 0x4700); - rtl_lr_fsw(s, s0); - rtl_or(s, s0, s0, t0); - rtl_xor(s, s0, s0, t0); - rtl_or(s, s0, s0, s2); - rtl_sr_fsw(s, s0); - print_asm_fpu_template(fxam); -} - - -static inline def_EHelper(finit){ - rtl_mv(s,&cpu.ftop, rz); - rtl_mv(s,&cpu.fsw,rz); - rtl_li(s,&cpu.fcw,0x37f); - print_asm("finit"); -} -static inline def_EHelper(fstsw){ - operand_write(s, id_dest, dsrc1); - print_asm_template2(fnstsw); -#ifndef __DIFF_REF_NEMU__ - difftest_skip_ref(); -#endif -} - -static inline def_EHelper(fldcw){ - rtl_sr_fcw(s, dsrc1); - print_asm_template2(fldcw); -} -static inline def_EHelper(fstcw){ - operand_write(s, id_dest, dsrc1); - print_asm_template2(fnstcw); -} - -static inline def_EHelper(fldenv){ - rtl_lm(s, s0, s->isa.mbase, s->isa.moff + 0, 4); - rtl_sr_fcw(s, s0); - rtl_lm(s, s0, s->isa.mbase, s->isa.moff + 4, 4); - rtl_sr_fsw(s, s0); - cpu.ftop = (cpu.fsw >> 11) & 0x7; - // others are not loaded - print_asm_template2(fldenv); -} - -static inline def_EHelper(fstenv){ - rtl_sm(s, s->isa.mbase, s->isa.moff + 0, &cpu.fcw, 4); - cpu.fsw = (cpu.fsw & ~0x3800) | ((cpu.ftop & 0x7) << 11); - rtl_sm(s, s->isa.mbase, s->isa.moff + 4, &cpu.fsw, 4); - rtlreg_t ftag = 0; - int i; - for (i = 7; i >= 0; i --) { - ftag <<= 2; - if (i > cpu.ftop) { ftag |= 3; } // empty - else { - rtl_class387(s, s0, &cpu.fpr[i]); - if (*s0 == 0x4200 || *s0 == 0x4000) { ftag |= 1; } // zero - else if (*s0 == 0x700 || *s0 == 0x4600 || *s0 == 0x4400 || *s0 == 0x500 || - *s0 == 0x100 || *s0 == 0x300) { ftag |= 2; } // NaNs, INFs, denormal - } - } - rtl_sm(s, s->isa.mbase, s->isa.moff + 8, &ftag, 4); - rtl_sm(s, s->isa.mbase, s->isa.moff + 12, rz, 4); // fpip - rtl_sm(s, s->isa.mbase, s->isa.moff + 16, rz, 4); // fpcs - rtl_sm(s, s->isa.mbase, s->isa.moff + 20, rz, 4); // fpoo - rtl_sm(s, s->isa.mbase, s->isa.moff + 24, rz, 4); // fpos - print_asm_template2(fstenv); -} - -static inline def_EHelper(fcmovbe){ -#ifdef LAZY_CC - rtl_lazy_setcc(s, s0, CC_BE); -#else - rtl_setcc(s, s0, CC_BE); -#endif - if (*s0) { - *dfdest = *dfsrc1; - } - print_asm_fpu_template2(fcmovbe); -} - -static inline def_EHelper(fcmovnbe){ -#ifdef LAZY_CC - rtl_lazy_setcc(s, s0, CC_BE); -#else - rtl_setcc(s, s0, CC_BE); -#endif - if (!*s0) { - *dfdest = *dfsrc1; - } - print_asm_fpu_template2(fcmovnbe); -} - -static inline def_EHelper(fcmove){ -#ifdef LAZY_CC - rtl_lazy_setcc(s, s0, CC_E); -#else - rtl_setcc(s, s0, CC_E); -#endif - if (*s0) { - *dfdest = *dfsrc1; - } - print_asm_fpu_template2(fcmove); -} - -static inline def_EHelper(fcmovne){ -#ifdef LAZY_CC - rtl_lazy_setcc(s, s0, CC_NE); -#else - rtl_setcc(s, s0, CC_NE); -#endif - if (*s0) { - *dfdest = *dfsrc1; - } - print_asm_fpu_template2(fcmovne); -} - -static inline def_EHelper(fcmovb){ -#ifdef LAZY_CC - rtl_lazy_setcc(s, s0, CC_B); -#else - rtl_setcc(s, s0, CC_B); -#endif - if (*s0) { - *dfdest = *dfsrc1; - } - print_asm_fpu_template2(fcmovb); -} - -static inline def_EHelper(fcmovnb){ -#ifdef LAZY_CC - rtl_lazy_setcc(s, s0, CC_B); -#else - rtl_setcc(s, s0, CC_B); -#endif - if (!(*s0)) { - *dfdest = *dfsrc1; - } - print_asm_fpu_template2(fcmovb); -} - -static inline def_EHelper(fcmovu){ -#ifdef LAZY_CC - rtl_lazy_setcc(s, s0, CC_P); -#else - rtl_setcc(s, s0, CC_P); -#endif - if (*s0) { - *dfdest = *dfsrc1; - } - print_asm_fpu_template2(fcmovu); -} - -static inline def_EHelper(fcmovnu){ -#ifdef LAZY_CC - rtl_lazy_setcc(s, s0, CC_P); -#else - rtl_setcc(s, s0, CC_P); -#endif - if (!(*s0)) { - *dfdest = *dfsrc1; - } - print_asm_fpu_template2(fcmovnu); -} - -static inline def_EHelper(fsqrt) { - *dfdest = f64_sqrt(fprToF64(*dfdest)).v; - print_asm_fpu_template(fsqrt); -} - -static inline def_EHelper(fyl2x) { - union { - double f; - uint64_t i; - } a; - a.i = *dfdest; - a.f = log2(a.f); - *dfsrc1 = f64_mul(fprToF64(*dfsrc1), fprToF64(a.i)).v; - rtl_popftop(); - print_asm_fpu_template(fyl2x); -} - -static inline def_EHelper(frndint) { - *dfdest = f64_roundToInt(fprToF64(*dfdest), softfloat_roundingMode, false).v; - print_asm_fpu_template(frndint); -} - -static inline def_EHelper(fyl2xp1) { - union { - double f; - uint64_t i; - } a; - a.i = *dfdest; - a.f = log2(a.f + 1.0); - *dfsrc1 = f64_mul(fprToF64(*dfsrc1), fprToF64(a.i)).v; - rtl_popftop(); - print_asm_fpu_template(fyl2xp1); -} - -static inline def_EHelper(f2xm1) { - union { - double f; - uint64_t i; - } a; - a.i = *dfdest; - a.f = pow(2.0, a.f) - 1.0; - *dfsrc1 = a.i; - print_asm_fpu_template(f2xm1); -} - -static inline def_EHelper(fscale) { - union { - double f; - uint64_t i; - } a; - a.i = f64_roundToInt(fprToF64(*dfsrc1), softfloat_round_minMag, false).v; - a.f = pow(2.0, a.f); - *dfdest = f64_mul(fprToF64(*dfdest), fprToF64(a.i)).v; - print_asm_fpu_template(fscale); -} - -static inline def_EHelper(fpatan) { - union { - double f; - uint64_t i; - } dest, src; - dest.i = *dfdest; - src.i = *dfsrc1; - - double tmp = src.f / dest.f; - dest.f = atan(tmp); - if (src.f < 0 && dest.f > 0) { dest.f -= M_PI; } - else if (src.f > 0 && dest.f < 0) { dest.f += M_PI; } - assert(fabs(dest.f) < M_PI); - - *dfsrc1 = dest.i; - rtl_popftop(); - print_asm_fpu_template(fpatan); -} - -static inline def_EHelper(fprem) { - union { - double f; - uint64_t i; - } a, b; - a.i = *dfdest; - b.i = *dfsrc1; - a.f = fmod(a.f, b.f); - *dfdest = a.i; - rtl_lr_fsw(s, s0); - rtl_andi(s, s0, s0, ~0x4700); - rtl_sr_fsw(s, s0); - print_asm_fpu_template(fprem); -} diff --git a/libraries/NEMU/src/isa/x86/include/isa-all-instr.h b/libraries/NEMU/src/isa/x86/include/isa-all-instr.h deleted file mode 100644 index 9ce3062..0000000 --- a/libraries/NEMU/src/isa/x86/include/isa-all-instr.h +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include "../local-include/rtl.h" -#include "../instr/rt.h" - -#define INSTR_NULLARY(f) \ - f(inv) f(nemu_trap) f(nop) \ - f(ret) f(leave) \ - f(cwtl) f(cltd) \ - f(movs) \ - f(rep_movs) f(rep_stos) \ - f(pushf) f(pusha) f(popa) \ - f(clc) f(stc) f(cld) \ - f(iret) \ - f(cpuid) f(rdtsc) - -#define INSTR_UNARY(f) \ - f(call) f(jcc) f(jmp) f(setcc) f(call_E) f(jmp_E) f(ret_imm) f(jecxz) \ - f(push) f(pop) \ - f(inc) f(dec) f(neg) f(not) \ - f(mul) f(imul1) f(div) f(idiv) \ - f(lgdt) f(lidt) f(ltr) f(_int) - -#define INSTR_BINARY(f) \ - f(mov) f(add) f(sub) f(adc) f(sbb) f(cmp) \ - f(and) f(or) f(test) f(xor) f(shl) f(shr) f(sar) f(rol) f(ror) \ - f(lea) f(movzb) f(movzw) f(movsb) f(movsw) \ - f(imul2) \ - f(bsr) f(bt) f(xchg) f(cmpxchg) \ - f(in) f(out) f(mov_cr2r) f(mov_r2cr) \ - f(cmovcc) \ - f(mov_rm2sreg) \ - f(movq_E2xmm) f(movq_xmm2E) f(movdqa_E2xmm) f(psrlq) f(movd_xmm2E) f(pxor) \ - f(xadd) - -#define INSTR_TERNARY(f) \ - f(imul3) f(shld) f(shrd) - -def_all_EXEC_ID(); diff --git a/libraries/NEMU/src/isa/x86/include/isa-def.h b/libraries/NEMU/src/isa/x86/include/isa-def.h deleted file mode 100644 index ec2b5c7..0000000 --- a/libraries/NEMU/src/isa/x86/include/isa-def.h +++ /dev/null @@ -1,171 +0,0 @@ -#ifndef __ISA_X86_H__ -#define __ISA_X86_H__ - -#include - -#ifndef __ICS_EXPORT -/* the Control Register 0 */ -typedef union CR0 { - struct { - uint32_t protect_enable : 1; - uint32_t dont_care : 30; - uint32_t paging : 1; - }; - uint32_t val; -} CR0; - -/* the Control Register 3 (physical address of page directory) */ -typedef union CR3 { - struct { - uint32_t pad : 12; - uint32_t ppn : 20; - }; - uint32_t val; -} CR3; -#endif - -/* TODO: Re-organize the `CPU_state' structure to match the register - * encoding scheme in i386 instruction format. For example, if we - * access cpu.gpr[3]._16, we will get the `bx' register; if we access - * cpu.gpr[1]._8[1], we will get the 'ch' register. Hint: Use `union'. - * For more details about the register encoding scheme, see i386 manual. - */ - -typedef struct { -#ifdef __ICS_EXPORT - struct { - uint32_t _32; - uint16_t _16; - uint8_t _8[2]; - } gpr[8]; - - /* Do NOT change the order of the GPRs' definitions. */ - - /* In NEMU, rtlreg_t is exactly uint32_t. This makes RTL instructions - * in PA2 able to directly access these registers. - */ - rtlreg_t eax, ecx, edx, ebx, esp, ebp, esi, edi; - - vaddr_t pc; -#else - union { - union { - uint32_t _32; - uint16_t _16; - uint8_t _8[2]; - } gpr[8]; - - /* Do NOT change the order of the GPRs' definitions. */ - - /* In NEMU, rtlreg_t is exactly uint32_t. This makes RTL instructions - * in PA2 able to directly access these registers. - */ - struct { - rtlreg_t eax, ecx, edx, ebx, esp, ebp, esi, edi; - }; - }; - - vaddr_t pc; - uint32_t eflags; - - rtlreg_t OF, CF, SF, ZF, IF, DF, PF; - - uint64_t fpr[8]; - rtlreg_t ftop; - rtlreg_t fsw,fcw; - -#ifdef CONFIG_x86_CC_LAZY - rtlreg_t cc_dest, cc_src1, cc_src2; - uint32_t cc_width, cc_op, cc_dirty, cc_dynamic; -#endif - - union { - __uint128_t _128; - uint64_t _64[2]; - uint32_t _32[4]; - } xmm[8]; - - struct { - union { - struct { - uint32_t rpl : 2; - uint32_t ti : 1; - uint32_t idx :13; - }; - uint16_t val; - }; - // hidden part - rtlreg_t base; - } sreg[8]; - - struct { - uint32_t limit :16; - uint32_t base :32; - } idtr, gdtr; - - union { - uint32_t cr[4]; - struct { - CR0 cr0; - uint32_t cr1; - uint32_t cr2; - CR3 cr3; - }; - }; - - int mem_exception; - word_t error_code; - IFNDEF(CONFIG_PA, int lock); - - bool INTR; -#endif -} x86_CPU_state; - -// decode -typedef struct { - uint8_t instr[16]; - uint8_t *p_instr; - uint16_t opcode; -#define PREFIX_REP 1 -#define PREFIX_REPNZ 2 - int8_t width; - uint8_t rep_flags; - uint8_t flag_def; - uint8_t flag_use; - bool is_operand_size_16; - const rtlreg_t *sreg_base; - const rtlreg_t *mbase; - const rtlreg_t *midx; - word_t moff; - word_t mscale; - rtlreg_t mbr; -} x86_ISADecodeInfo; - -enum { R_EAX, R_ECX, R_EDX, R_EBX, R_ESP, R_EBP, R_ESI, R_EDI }; -enum { R_AX, R_CX, R_DX, R_BX, R_SP, R_BP, R_SI, R_DI }; -enum { R_AL, R_CL, R_DL, R_BL, R_AH, R_CH, R_DH, R_BH }; - -enum { MODE_R0, MODE_R1, MODE_R2, MODE_R3 }; - -enum { - // selectors - CSR_ES, CSR_CS, CSR_SS, CSR_DS, - CSR_FS, CSR_GS, CSR_TR, CSR_LDTR, - // table registers - CSR_IDTR, CSR_GDTR, - // control registers - CSR_CR0, CSR_CR1, CSR_CR2, CSR_CR3, CSR_CR4 -}; - - -enum { OP_TYPE_IMM, OP_TYPE_REG, OP_TYPE_MEM }; - -//#define suffix_char(width) ((width) == 4 ? 'l' : ((width) == 1 ? 'b' : ((width) == 2 ? 'w' : '?'))) -#ifdef __ICS_EXPORT -#define isa_mmu_state() (MMU_DIRECT) -#else -#define isa_mmu_state() (cpu.cr0.paging ? MMU_TRANSLATE : MMU_DIRECT) -#endif -#define isa_mmu_check(vaddr, len, type) isa_mmu_state() - -#endif diff --git a/libraries/NEMU/src/isa/x86/include/isa-exec.h b/libraries/NEMU/src/isa/x86/include/isa-exec.h deleted file mode 100644 index 9322d48..0000000 --- a/libraries/NEMU/src/isa/x86/include/isa-exec.h +++ /dev/null @@ -1,11 +0,0 @@ -#include "../instr/data-mov.h" -#include "../instr/arith.h" -#include "../instr/logic.h" -#include "../instr/control.h" -#include "../instr/string.h" -#include "../instr/bit.h" -#include "../instr/eflags.h" -#include "../instr/system.h" -#include "../instr/misc.h" -#include "../instr/special.h" -#include "../instr/vector.h" diff --git a/libraries/NEMU/src/isa/x86/init.c b/libraries/NEMU/src/isa/x86/init.c deleted file mode 100644 index 2193da9..0000000 --- a/libraries/NEMU/src/isa/x86/init.c +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include -#include "local-include/reg.h" - -static const uint8_t img [] = { - 0xb8, 0x34, 0x12, 0x00, 0x00, // 100000: movl $0x1234,%eax - 0xb9, 0x27, 0x00, 0x10, 0x00, // 100005: movl $0x100027,%ecx - 0x89, 0x01, // 10000a: movl %eax,(%ecx) - 0x66, 0xc7, 0x41, 0x04, 0x01, 0x00, // 10000c: movw $0x1,0x4(%ecx) - 0xbb, 0x02, 0x00, 0x00, 0x00, // 100012: movl $0x2,%ebx - 0x66, 0xc7, 0x84, 0x99, 0x00, 0xe0, // 100017: movw $0x1,-0x2000(%ecx,%ebx,4) - 0xff, 0xff, 0x01, 0x00, - 0xb8, 0x00, 0x00, 0x00, 0x00, // 100021: movl $0x0,%eax - 0xd6, // 100026: nemu_trap -}; - -static void restart() { - /* Set the initial instruction pointer. */ - cpu.pc = RESET_VECTOR; -#ifndef __ICS_EXPORT - cpu.sreg[CSR_CS].val = 0x8; - cpu.cr0.val = 0x60000011; - cpu.fcw = 0x37f; -#endif -} - -void init_i8259a(); -void init_mc146818rtc(); -void init_i8253(); -void init_ioport80(); -void init_i8237a(); - -void init_isa() { - /* Test the implementation of the `CPU_state' structure. */ - void reg_test(); -#ifndef CONFIG_DETERMINISTIC - reg_test(); -#endif - - /* Load built-in image. */ - memcpy(guest_to_host(RESET_VECTOR), img, sizeof(img)); - - /* Initialize this virtual computer system. */ - restart(); - - init_i8259a(); - init_mc146818rtc(); - init_i8253(); - init_ioport80(); - init_i8237a(); -} diff --git a/libraries/NEMU/src/isa/x86/instr/arith.h b/libraries/NEMU/src/isa/x86/instr/arith.h deleted file mode 100644 index 389cc6d..0000000 --- a/libraries/NEMU/src/isa/x86/instr/arith.h +++ /dev/null @@ -1,456 +0,0 @@ -def_EHelper(add) { - rtl_decode_binary(s, true, true); -#ifdef CONFIG_x86_CC_LAZY - rtl_set_lazycc_src1(s, dsrc1); // set src firstly cuz maybe $dest = $src - rtl_add(s, ddest, ddest, dsrc1); - rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_ADD, s->isa.width); - rtl_wb(s, ddest); -#else - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_add(s, s0, ddest, dsrc1); - rtl_update_ZFSF(s, s0, s->isa.width); - if (s->isa.width != 4) { - rtl_andi(s, s0, s0, 0xffffffffu >> ((4 - s->isa.width) * 8)); - } - rtl_is_add_carry(s, s1, s0, ddest); - rtl_set_CF(s, s1); - rtl_is_add_overflow(s, s1, s0, ddest, dsrc1, s->isa.width); - rtl_set_OF(s, s1); - rtl_wb(s, s0); - } else { - rtl_add(s, ddest, ddest, dsrc1); - rtl_wb(s, ddest); - } -#endif -} - -def_EHelper(sub) { - rtl_decode_binary(s, true, true); -#ifdef CONFIG_x86_CC_LAZY - rtl_set_lazycc(s, ddest, dsrc1, NULL, LAZYCC_SUB, s->isa.width); - rtl_sub(s, ddest, ddest, dsrc1); - rtl_wb(s, ddest); -#else - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_sub(s, s0, ddest, dsrc1); - rtl_update_ZFSF(s, s0, s->isa.width); - rtl_is_sub_carry(s, s1, ddest, dsrc1); - rtl_set_CF(s, s1); - rtl_is_sub_overflow(s, s1, s0, ddest, dsrc1, s->isa.width); - rtl_set_OF(s, s1); - rtl_wb(s, s0); - } else { - rtl_sub(s, ddest, ddest, dsrc1); - rtl_wb(s, ddest); - } -#endif -} - -def_EHelper(cmp) { - rtl_decode_binary(s, true, true); -#ifdef CONFIG_x86_CC_LAZY - rtl_set_lazycc(s, ddest, dsrc1, NULL, LAZYCC_SUB, s->isa.width); -#else - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_sub(s, s0, ddest, dsrc1); - rtl_update_ZFSF(s, s0, s->isa.width); - rtl_is_sub_carry(s, s1, ddest, dsrc1); - rtl_set_CF(s, s1); - rtl_is_sub_overflow(s, s1, s0, ddest, dsrc1, s->isa.width); - rtl_set_OF(s, s1); - } -#endif -} - -def_EHelper(inc) { - rtl_decode_unary(s, true); - rtl_addi(s, ddest, ddest, 1); -#ifdef CONFIG_x86_CC_LAZY - rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_INC, s->isa.width); -#else - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_update_ZFSF(s, ddest, s->isa.width); - rtl_setrelopi(s, RELOP_EQ, s1, ddest, 0x1u << (s->isa.width * 8 - 1)); - rtl_set_OF(s, s1); - } -#endif - rtl_wb(s, ddest); -} - -def_EHelper(dec) { - rtl_decode_unary(s, true); -#ifdef CONFIG_x86_CC_LAZY - rtl_subi(s, ddest, ddest, 1); - rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_DEC, s->isa.width); -#else - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_setrelopi(s, RELOP_EQ, s1, ddest, 0x1u << (s->isa.width * 8 - 1)); - rtl_set_OF(s, s1); - rtl_subi(s, ddest, ddest, 1); - rtl_update_ZFSF(s, ddest, s->isa.width); - } else { - rtl_subi(s, ddest, ddest, 1); - } -#endif - rtl_wb(s, ddest); -} - -def_EHelper(adc) { - rtl_decode_binary(s, true, true); -#ifdef CONFIG_x86_CC_LAZY - rtl_lazy_setcc(s, s0, CC_B); // reading CC_B is to read CF - rtl_add(s, s0, dsrc1, s0); - rtl_set_lazycc_src2(s, dsrc1); - rtl_add(s, ddest, ddest, s0); - rtl_set_lazycc(s, ddest, s0, NULL, LAZYCC_ADC, s->isa.width); - rtl_wb(s, ddest); -#else - rtl_get_CF(s, s0); - rtl_add(s, s0, dsrc1, s0); - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_add(s, s1, ddest, s0); - rtl_update_ZFSF(s, s1, s->isa.width); - rtl_is_add_overflow(s, s2, s1, ddest, dsrc1, s->isa.width); - rtl_set_OF(s, s2); - if (s->isa.width != 4) { - rtl_andi(s, s1, s1, 0xffffffffu >> ((4 - s->isa.width) * 8)); - } - rtl_is_add_carry(s, s2, s1, s0); - rtl_is_add_carry(s, s0, s0, dsrc1); - rtl_or(s, s0, s0, s2); - rtl_set_CF(s, s0); - rtl_wb(s, s1); - } else { - rtl_add(s, ddest, ddest, s0); - rtl_wb(s, ddest); - } -#endif -} - -def_EHelper(sbb) { - rtl_decode_binary(s, true, true); -#ifdef CONFIG_x86_CC_LAZY - rtl_lazy_setcc(s, s0, CC_B); // reading CC_B is to read CF - rtl_add(s, s0, dsrc1, s0); - rtl_set_lazycc_src2(s, dsrc1); - rtl_set_lazycc_src1(s, ddest); - rtl_sub(s, ddest, ddest, s0); - rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_SBB, s->isa.width); - rtl_wb(s, ddest); -#else - rtl_get_CF(s, s0); - rtl_add(s, s0, dsrc1, s0); - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_sub(s, s1, ddest, s0); - rtl_update_ZFSF(s, s1, s->isa.width); - rtl_is_sub_overflow(s, s2, s1, ddest, dsrc1, s->isa.width); - rtl_set_OF(s, s2); - rtl_is_add_carry(s, s2, s0, dsrc1); - rtl_is_sub_carry(s, s0, ddest, s0); - rtl_or(s, s0, s0, s2); - rtl_set_CF(s, s0); - rtl_wb(s, s1); - } else { - rtl_sub(s, ddest, ddest, s0); - rtl_wb(s, ddest); - } -#endif -} - -def_EHelper(neg) { - rtl_decode_unary(s, true); -#ifdef CONFIG_x86_CC_LAZY - rtl_sub(s, ddest, rz, ddest); - rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_NEG, s->isa.width); -#else - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_setrelopi(s, RELOP_NE, s1, ddest, 0); - rtl_set_CF(s, s1); - rtl_setrelopi(s, RELOP_EQ, s1, ddest, 0x1u << (s->isa.width * 8 - 1)); - rtl_set_OF(s, s1); - rtl_sub(s, ddest, rz, ddest); - rtl_update_ZFSF(s, ddest, s->isa.width); - } else { - rtl_sub(s, ddest, rz, ddest); - } -#endif - rtl_wb(s, ddest); -} - -def_EHelper(mul) { - rtl_decode_unary(s, true); - IFNDEF(CONFIG_PA, int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true)); - switch (s->isa.width) { - case 1: - rtl_lr(s, s0, R_EAX, 1); - rtl_mulu_lo(s, s1, ddest, s0); -#ifndef CONFIG_PA - if (need_update_eflags) { - rtl_update_ZFSF(s, s1, s->isa.width); - rtl_andi(s, s0, s1, 0xff00); - rtl_setrelopi(s, RELOP_NE, s0, s0, 0); - rtl_set_OF(s, s0); - rtl_set_CF(s, s0); - } -#endif - rtl_sr(s, R_AX, s1, 2); - break; - case 2: - rtl_lr(s, s0, R_EAX, 2); - rtl_mulu_lo(s, s1, ddest, s0); -#ifndef CONFIG_PA - if (need_update_eflags) { - rtl_update_ZFSF(s, s1, s->isa.width); - rtl_shri(s, s0, s1, 16); - rtl_setrelopi(s, RELOP_NE, s0, s0, 0); - rtl_set_OF(s, s0); - rtl_set_CF(s, s0); - } -#endif - rtl_sr(s, R_AX, s1, 2); - rtl_shri(s, s1, s1, 16); - rtl_sr(s, R_DX, s1, 2); - break; - case 4: - ; rtlreg_t *pdest = ddest; - if (ddest == &cpu.edx) { - rtl_mv(s, s0, ddest); - pdest = s0; - } - rtl_mulu_hi(s, &cpu.edx, pdest, &cpu.eax); - rtl_mulu_lo(s, &cpu.eax, pdest, &cpu.eax); -#ifndef CONFIG_PA - if (need_update_eflags) { - rtl_update_ZFSF(s, &cpu.eax, s->isa.width); - rtl_setrelopi(s, RELOP_NE, s0, &cpu.edx, 0); - rtl_set_OF(s, s0); - rtl_set_CF(s, s0); - } -#endif - break; - default: assert(0); - } -} - -// imul with one operand -def_EHelper(imul1) { - rtl_decode_unary(s, true); - IFNDEF(CONFIG_PA, int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true)); - switch (s->isa.width) { - case 1: - rtl_lr(s, s0, R_EAX, 1); - rtl_sext(s, s0, s0, 1); - rtl_sext(s, ddest, ddest, 1); - rtl_mulu_lo(s, s1, ddest, s0); -#ifndef CONFIG_PA - if (need_update_eflags) { - rtl_update_ZFSF(s, s1, 1); - rtl_sext(s, s0, s1, 1); - rtl_setrelop(s, RELOP_NE, s0, s0, s1); - } -#endif - rtl_sr(s, R_AX, s1, 2); - break; - case 2: - rtl_lr(s, s0, R_EAX, 2); - rtl_sext(s, s0, s0, 2); - rtl_sext(s, ddest, ddest, 2); - rtl_mulu_lo(s, s1, ddest, s0); -#ifndef CONFIG_PA - if (need_update_eflags) { - rtl_update_ZFSF(s, s1, 2); - rtl_sext(s, s0, s1, 2); - rtl_setrelop(s, RELOP_NE, s0, s0, s1); - } -#endif - rtl_sr(s, R_AX, s1, 2); - rtl_shri(s, s1, s1, 16); - rtl_sr(s, R_DX, s1, 2); - break; - case 4: - ; rtlreg_t *pdest = ddest; - if (ddest == &cpu.edx) { - rtl_mv(s, s0, ddest); - pdest = s0; - } - rtl_muls_hi(s, &cpu.edx, pdest, &cpu.eax); - rtl_mulu_lo(s, &cpu.eax, pdest, &cpu.eax); -#ifndef CONFIG_PA - if (need_update_eflags) { - rtl_update_ZFSF(s, &cpu.eax, 4); - rtl_msb(s, s0, &cpu.eax, 4); - rtl_add(s, s0, &cpu.edx, s0); - rtl_setrelopi(s, RELOP_NE, s0, s0, 0); - } -#endif - break; - default: assert(0); - } - - rtl_set_CF(s, s0); - rtl_set_OF(s, s0); -} - -// imul with two operands -def_EHelper(imul2) { - rtl_decode_binary(s, true, true); - rtl_sext(s, dsrc1, dsrc1, s->isa.width); - rtl_sext(s, ddest, ddest, s->isa.width); - - IFNDEF(CONFIG_PA, int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true)); -#ifndef CONFIG_PA - if (need_update_eflags) { - if (s->isa.width == 4) { rtl_muls_hi(s, s1, ddest, dsrc1); } - } -#endif - - rtl_mulu_lo(s, ddest, ddest, dsrc1); - -#ifndef CONFIG_PA - if (need_update_eflags) { - if (s->isa.width == 2) { - rtl_sext(s, s0, ddest, s->isa.width); - rtl_setrelop(s, RELOP_NE, s0, s0, ddest); - } else if (s->isa.width == 4) { - rtl_msb(s, s0, ddest, s->isa.width); - rtl_add(s, s0, s1, s0); - rtl_setrelopi(s, RELOP_NE, s0, s0, 0); - } else { - assert(0); - } - rtl_set_CF(s, s0); - rtl_set_OF(s, s0); - rtl_update_ZFSF(s, ddest, s->isa.width); - } -#endif - - rtl_wb_r(s, ddest); -} - -// imul with three operands -def_EHelper(imul3) { - rtl_decode_binary(s, false, true); // the 3rd operand is always immediate - rtl_sext(s, dsrc1, dsrc1, s->isa.width); - - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { -#if !defined(CONFIG_PA) && defined(CONFIG_DIFFTEST) - if (s->isa.width == 4) { rtl_muls_hi(s, s1, dsrc1, dsrc2); } -#endif - } - - rtl_mulu_lo(s, ddest, dsrc1, dsrc2); - - if (need_update_eflags) { -#if !defined(CONFIG_PA) && defined(CONFIG_DIFFTEST) - if (s->isa.width == 2) { - rtl_sext(s, s0, ddest, s->isa.width); - rtl_setrelop(s, RELOP_NE, s0, s0, ddest); - } else if (s->isa.width == 4) { - rtl_msb(s, s0, ddest, s->isa.width); - rtl_add(s, s0, s1, s0); - rtl_setrelopi(s, RELOP_NE, s0, s0, 0); - } else { - assert(0); - } - rtl_set_CF(s, s0); - rtl_set_OF(s, s0); - rtl_update_ZFSF(s, ddest, s->isa.width); -#endif - } - - rtl_wb_r(s, ddest); -} - -def_EHelper(div) { - rtl_decode_unary(s, true); - switch (s->isa.width) { - case 1: - rtl_lr(s, s0, R_AX, 2); - rtl_divu_q(s, s1, s0, ddest); - rtl_divu_r(s, s0, s0, ddest); - rtl_sr(s, R_AL, s1, 1); - rtl_sr(s, R_AH, s0, 1); - break; - case 2: - rtl_lr(s, s0, R_AX, 2); - rtl_lr(s, s1, R_DX, 2); - rtl_shli(s, s1, s1, 16); - rtl_or(s, s0, s0, s1); - rtl_divu_q(s, s1, s0, ddest); - rtl_divu_r(s, s0, s0, ddest); - rtl_sr(s, R_AX, s1, 2); - rtl_sr(s, R_DX, s0, 2); - break; - case 4: - ; rtlreg_t *pdest = ddest; - if (ddest == &cpu.eax) pdest = s0; - rtl_mv(s, s0, &cpu.eax); - rtl_div64u_q(s, &cpu.eax, &cpu.edx, s0, pdest); - rtl_div64u_r(s, &cpu.edx, &cpu.edx, s0, pdest); - break; - default: assert(0); - } -} - -def_EHelper(idiv) { - rtl_decode_unary(s, true); - switch (s->isa.width) { - case 1: - rtl_lr(s, s0, R_AX, 2); - rtl_divs_q(s, s1, s0, ddest); - rtl_divs_r(s, s0, s0, ddest); - rtl_sr(s, R_AL, s1, 1); - rtl_sr(s, R_AH, s0, 1); - break; - case 2: - rtl_lr(s, s0, R_AX, 2); - rtl_lr(s, s1, R_DX, 2); - rtl_shli(s, s1, s1, 16); - rtl_or(s, s0, s0, s1); - rtl_divs_q(s, s1, s0, ddest); - rtl_divs_r(s, s0, s0, ddest); - rtl_sr(s, R_AX, s1, 2); - rtl_sr(s, R_DX, s0, 2); - break; - case 4: - ; rtlreg_t *pdest = ddest; - if (ddest == &cpu.eax) pdest = s0; - rtl_mv(s, s0, &cpu.eax); - rtl_div64s_q(s, &cpu.eax, &cpu.edx, s0, pdest); - rtl_div64s_r(s, &cpu.edx, &cpu.edx, s0, pdest); - break; - default: assert(0); - } -} - -def_EHelper(xadd) { - rtl_decode_binary(s, true, true); - rtl_add(s, s0, ddest, dsrc1); -#ifdef CONFIG_x86_CC_LAZY - rtl_set_lazycc_src1(s, dsrc1); - rtl_set_lazycc(s, s0, NULL, NULL, LAZYCC_ADD, s->isa.width); -#else - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_update_ZFSF(s, s0, s->isa.width); - if (s->isa.width != 4) { - rtl_andi(s, s0, s0, 0xffffffffu >> ((4 - s->isa.width) * 8)); - } - rtl_is_add_carry(s, s1, s0, ddest); - rtl_set_CF(s, s1); - rtl_is_add_overflow(s, s1, s0, ddest, dsrc1, s->isa.width); - rtl_set_OF(s, s1); - } -#endif - rtl_sr(s, id_src1->reg, ddest, s->isa.width); - rtl_wb(s, s0); -} diff --git a/libraries/NEMU/src/isa/x86/instr/bit.h b/libraries/NEMU/src/isa/x86/instr/bit.h deleted file mode 100644 index e0a03fa..0000000 --- a/libraries/NEMU/src/isa/x86/instr/bit.h +++ /dev/null @@ -1,113 +0,0 @@ -def_EHelper(bsr) { -#ifndef CONFIG_ENGINE_INTERPRETER - panic("not support in engines other than interpreter"); -#endif - - rtl_decode_binary(s, false, true); - - rtl_setrelopi(s, RELOP_EQ, s0, dsrc1, 0); - rtl_set_ZF(s, s0); - - int bit = 31; - if (*dsrc1 != 0) { - while ((*dsrc1 & (1u << bit)) == 0) bit--; - *ddest = bit; - rtl_wb_r(s, ddest); - } -} - -def_EHelper(bt) { - if (id_dest->type == OP_TYPE_MEM) { - rtl_shri(s, s0, dsrc1, 5); - rtl_shli(s, s0, s0, 2); - rtl_add(s, s0, s->isa.mbase, s0); - s->isa.mbase = s0; - } - - rtl_decode_binary(s, true, true); - - rtl_li(s, s0, 1); - rtl_shl(s, s0, s0, dsrc1); - rtl_and(s, s0, s0, ddest); - rtl_setrelopi(s, RELOP_NE, s0, s0, 0); - rtl_set_CF(s, s0); -} - -#if 0 -static inline def_EHelper(bsf) { -#ifndef CONFIG_ENGINE_INTERPRETER - panic("not support in engines other than interpreter"); -#endif - - rtl_setrelopi(s, RELOP_EQ, s0, dsrc1, 0); - rtl_set_ZF(s, s0); - rtl_set_CF(s, rz); - - int bit = 0; - if (*dsrc1 != 0) { - while ((*dsrc1 & (1u << bit)) == 0) bit++; - *ddest = bit; - } else if (s->isa.rep_flags) { - *ddest = 32; - } - operand_write(s, id_dest, ddest); - print_asm_template2(bsf); -} - -static inline def_EHelper(btc) { - rtl_li(s, s0, 1); - rtl_shl(s, s0, s0, dsrc1); - rtl_and(s, s1, s0, ddest); - rtl_setrelopi(s, RELOP_NE, s1, s1, 0); - rtl_set_CF(s, s1); - rtl_xor(s, ddest, ddest, s0); - operand_write(s, id_dest, ddest); - print_asm_template2(btc); -} - -static inline def_EHelper(bts) { - rtl_li(s, s0, 1); - rtl_shl(s, s0, s0, dsrc1); - rtl_and(s, s1, s0, ddest); - rtl_setrelopi(s, RELOP_NE, s1, s1, 0); - rtl_set_CF(s, s1); - rtl_or(s, ddest, ddest, s0); - operand_write(s, id_dest, ddest); - print_asm_template2(bts); -} - -static inline def_EHelper(btr) { - rtl_li(s, s0, 1); - rtl_shl(s, s0, s0, dsrc1); - rtl_and(s, s1, s0, ddest); - rtl_setrelopi(s, RELOP_NE, s1, s1, 0); - rtl_set_CF(s, s1); - rtl_not(s, s0, s0); - rtl_and(s, ddest, ddest, s0); - operand_write(s, id_dest, ddest); - print_asm_template2(btr); -} - -static inline def_EHelper(bswap) { - // src[7:0] - rtl_shli(s, s1, ddest, 24); - - // src[31:24] - rtl_shri(s, s0, ddest, 24); - rtl_or(s, s1, s1, s0); - - // src[15:8] - rtl_shli(s, s0, ddest, 8); - rtl_andi(s, s0, s0, 0xff0000); - rtl_or(s, s1, s1, s0); - - // src[23:16] - rtl_shri(s, s0, ddest, 8); - rtl_andi(s, s0, s0, 0xff00); - rtl_or(s, ddest, s1, s0); - - operand_write(s, id_dest, ddest); - - print_asm_template1(bswap); -} -#endif diff --git a/libraries/NEMU/src/isa/x86/instr/cc.h b/libraries/NEMU/src/isa/x86/instr/cc.h deleted file mode 100644 index 862bf6c..0000000 --- a/libraries/NEMU/src/isa/x86/instr/cc.h +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef __CC_H__ -#define __CC_H__ - -#include "../local-include/rtl.h" - -enum { - CC_O, CC_NO, CC_B, CC_NB, - CC_E, CC_NE, CC_BE, CC_NBE, - CC_S, CC_NS, CC_P, CC_NP, - CC_L, CC_NL, CC_LE, CC_NLE -}; - -#ifndef __ICS_EXPORT -enum { - LAZYCC_ADD, - LAZYCC_SUB, - LAZYCC_INC, - LAZYCC_DEC, - LAZYCC_NEG, - LAZYCC_ADC, - LAZYCC_SBB, - LAZYCC_LOGIC, -}; - -#include "lazycc.h" -#endif - -/* Condition Code */ - -static inline const char* get_cc_name(int subcode) { - static const char *cc_name[] = { - "o", "no", "b", "nb", - "e", "ne", "be", "nbe", - "s", "ns", "p", "np", - "l", "nl", "le", "nle" - }; - return cc_name[subcode]; -} - -static inline void rtl_setcc(Decode *s, rtlreg_t* dest, uint32_t subcode) { - uint32_t invert = subcode & 0x1; - - // TODO: Query EFLAGS to determine whether the condition code is satisfied. - // dest <- ( cc is satisfied ? 1 : 0) - switch (subcode & 0xe) { -#ifdef __ICS_EXPORT - case CC_O: - case CC_B: - case CC_E: - case CC_BE: - case CC_S: - case CC_L: - case CC_LE: - TODO(); - case CC_P: panic("PF is not supported"); -#else - case CC_O: rtl_mv(s, dest, &cpu.OF); break; - case CC_B: rtl_mv(s, dest, &cpu.CF); break; - case CC_E: rtl_mv(s, dest, &cpu.ZF); break; - case CC_BE: rtl_or(s, dest, &cpu.CF, &cpu.ZF); break; - case CC_S: rtl_mv(s, dest, &cpu.SF); break; - case CC_L: rtl_xor(s, dest, &cpu.SF, &cpu.OF); break; - case CC_LE: rtl_xor(s, dest, &cpu.SF, &cpu.OF); - rtl_or(s, dest, dest, &cpu.ZF); - break; - case CC_P: rtl_mv(s, dest, &cpu.PF); break; -#endif - default: panic("should not reach here"); - } - - if (invert) { - rtl_xori(s, dest, dest, 0x1); - } -#ifdef __ICS_EXPORT - assert(*dest == 0 || *dest == 1); -#else -#ifdef CONFIG_ENGINE_INTERPRETER - // we can not do runtime checking in JIT for SDI - assert(*dest == 0 || *dest == 1); -#endif -#endif -} - -#endif diff --git a/libraries/NEMU/src/isa/x86/instr/control.h b/libraries/NEMU/src/isa/x86/instr/control.h deleted file mode 100644 index 5d5f60c..0000000 --- a/libraries/NEMU/src/isa/x86/instr/control.h +++ /dev/null @@ -1,89 +0,0 @@ -def_EHelper(call) { - IFDEF(CONFIG_x86_CC_LAZY, clean_lazycc()); - // the target address is calculated at the decode stage - rtl_push(s, dsrc1); - rtl_j(s, id_dest->imm); -} - -def_EHelper(ret) { - IFDEF(CONFIG_x86_CC_LAZY, clean_lazycc()); - rtl_pop(s, s0); - rtl_jr(s, s0); -} - -def_EHelper(jmp) { - // the target address is calculated at the decode stage - IFDEF(CONFIG_x86_CC_LAZY, clean_lazycc()); - rtl_j(s, id_dest->imm); -} - -def_EHelper(jcc) { - // the target address is calculated at the decode stage - uint32_t cc = s->isa.opcode & 0xf; -#ifdef CONFIG_x86_CC_LAZY - rtl_lazy_setcc(s, s2, cc); - rtl_mv(s, s0, s2); - clean_lazycc(); -#else - rtl_setcc(s, s0, cc); -#endif - rtl_jrelop(s, RELOP_NE, s0, rz, id_dest->simm); -} - -def_EHelper(call_E) { - IFDEF(CONFIG_x86_CC_LAZY, clean_lazycc()); - rtl_decode_unary(s, true); - rtl_li(s, s0, s->snpc); - rtl_push(s, s0); - rtl_jr(s, ddest); -} - -def_EHelper(jmp_E) { - rtl_decode_unary(s, true); - rtl_jr(s, ddest); -} - -def_EHelper(ret_imm) { - IFDEF(CONFIG_x86_CC_LAZY, clean_lazycc()); - rtl_pop(s, s0); - rtl_add(s, &cpu.esp, &cpu.esp, ddest); - rtl_jr(s, s0); -} - -def_EHelper(jecxz) { - rtl_jrelop(s, RELOP_EQ, &cpu.ecx, rz, id_dest->simm); -} - -#if 0 -#ifndef __ICS_EXPORT - -static inline def_EHelper(ljmp) { - rtl_j(s, s->jmp_pc); - rtl_li(s, s0, id_src1->imm); - rtl_hostcall(s, HOSTCALL_CSR, NULL, s0, CSR_CS); - print_asm("ljmp %s,%s", id_src1->str, id_dest->str); -} - -#else -static inline def_EHelper(call) { - // the target address is calculated at the decode stage - TODO(); - print_asm("call %x", s->jmp_pc); -} - -static inline def_EHelper(ret) { - TODO(); - print_asm("ret"); -} - -static inline def_EHelper(ret_imm) { - TODO(); - print_asm("ret %s", id_dest->str); -} - -static inline def_EHelper(call_rm) { - TODO(); - print_asm("call *%s", id_dest->str); -} -#endif -#endif diff --git a/libraries/NEMU/src/isa/x86/instr/data-mov.h b/libraries/NEMU/src/isa/x86/instr/data-mov.h deleted file mode 100644 index 9be2874..0000000 --- a/libraries/NEMU/src/isa/x86/instr/data-mov.h +++ /dev/null @@ -1,161 +0,0 @@ -def_EHelper(mov) { - rtl_decode_binary(s, false, true); - rtl_wb(s, dsrc1); -} - -def_EHelper(push) { - rtl_decode_unary(s, true); - rtl_push(s, ddest); -} - -def_EHelper(pop) { - rtl_decode_unary(s, false); - rtl_pop(s, ddest); -} - -def_EHelper(lea) { - rtl_decode_binary(s, false, false); - rtl_addi(s, ddest, &s->isa.mbr, s->isa.moff); - rtl_wb_r(s, ddest); -} - -def_EHelper(movzb) { - rt_decode(s, id_dest, false, s->isa.width); - rt_decode(s, id_src1, true, 1); - rtl_wb_r(s, dsrc1); -} - -def_EHelper(movzw) { - rt_decode(s, id_dest, false, s->isa.width); - rt_decode(s, id_src1, true, 2); - rtl_wb_r(s, dsrc1); -} - -def_EHelper(movsb) { - rt_decode(s, id_dest, false, s->isa.width); - rt_decode(s, id_src1, true, 1); - rtl_sext(s, ddest, dsrc1, 1); - rtl_wb_r(s, ddest); -} - -def_EHelper(movsw) { - rt_decode(s, id_dest, false, s->isa.width); - rt_decode(s, id_src1, true, 2); - rtl_sext(s, ddest, dsrc1, 2); - rtl_wb_r(s, ddest); -} - -def_EHelper(cwtl) { - if (s->isa.width == 2) { - rtl_sext(s, s0, &cpu.eax, 1); - rtl_sr(s, R_AX, s0, 2); - } - else { - rtl_sext(s, &cpu.eax, &cpu.eax, 2); - } -} - -def_EHelper(cltd) { - if (s->isa.width == 2) { TODO(); } - else { rtl_sari(s, &cpu.edx, &cpu.eax, 31); } -} - -def_EHelper(leave) { - rtl_mv(s, &cpu.esp, &cpu.ebp); - rtl_pop(s, &cpu.ebp); -} - -def_EHelper(pusha) { - rtl_mv(s, s0, &cpu.esp); - rtl_push(s, &cpu.eax); - rtl_push(s, &cpu.ecx); - rtl_push(s, &cpu.edx); - rtl_push(s, &cpu.ebx); - rtl_push(s, s0); - rtl_push(s, &cpu.ebp); - rtl_push(s, &cpu.esi); - rtl_push(s, &cpu.edi); -} - -def_EHelper(popa) { - rtl_pop(s, &cpu.edi); - rtl_pop(s, &cpu.esi); - rtl_pop(s, &cpu.ebp); - rtl_pop(s, s0); - rtl_pop(s, &cpu.ebx); - rtl_pop(s, &cpu.edx); - rtl_pop(s, &cpu.ecx); - rtl_pop(s, &cpu.eax); -} - -def_EHelper(xchg) { - rtl_decode_binary(s, true, true); - if (ddest != dsrc1) { - rtl_mv(s, s0, dsrc1); - if (id_src1->type == OP_TYPE_REG) rtl_sr(s, id_src1->reg, ddest, s->isa.width); - else if (id_src1->type == OP_TYPE_MEM) rtl_sm(s, ddest, &s->isa.mbr, s->isa.moff, s->isa.width, MMU_DYNAMIC); - rtl_wb(s, s0); - } -} - -def_EHelper(cmovcc) { - rtl_decode_binary(s, false, true); - - uint32_t cc = s->isa.opcode & 0xf; -#ifdef CONFIG_x86_CC_LAZY - rtl_lazy_setcc(s, s0, cc); -#else - rtl_setcc(s, s0, cc); -#endif - - // ddest <- (s0 ? dsrc1 : ddest) - rtl_setrelopi(s, RELOP_EQ, s0, s0, 0); - rtl_subi(s, s0, s0, 1); - // s0 = mask - rtl_and(s, s1, dsrc1, s0); - rtl_not(s, s0, s0); - rtl_and(s, ddest, ddest, s0); - rtl_or(s, ddest, ddest, s1); - rtl_wb(s, ddest); -} - -def_EHelper(cmpxchg) { -#ifndef CONFIG_ENGINE_INTERPRETER - panic("not support in engines other than interpreter"); -#endif - - assert(s->isa.width == 4); - rtl_decode_binary(s, true, true); - - rtl_setrelop(s, RELOP_EQ, s0, &cpu.eax, ddest); - rtl_set_ZF(s, s0); - if (cpu.ZF) { - rtl_wb(s, dsrc1); - } else { - rtl_sr(s, R_EAX, ddest, s->isa.width); - } -} - -#if 0 -static inline def_EHelper(cmpxchg8b) { -#ifndef CONFIG_ENGINE_INTERPRETER - panic("not support in engines other than interpreter"); -#endif - - // first 4 bytes of the memory operand is already loaded by the decode helper - rtl_lm(s, s0, s->isa.mbase, s->isa.moff + 4, 4); - rtl_setrelop(s, RELOP_EQ, &id_src1->val, &cpu.eax, ddest); - rtl_setrelop(s, RELOP_EQ, &id_src2->val, &cpu.edx, s0); - rtl_and(s, &id_src1->val, &id_src1->val, &id_src2->val); - rtl_set_ZF(s, &id_src1->val); - if (cpu.ZF) { - rtl_sm(s, s->isa.mbase, s->isa.moff + 0, &cpu.ebx, 4); - rtl_sm(s, s->isa.mbase, s->isa.moff + 4, &cpu.ecx, 4); - } else { - rtl_mv(s, &cpu.eax, ddest); - rtl_mv(s, &cpu.edx, s0); - } - - print_asm_template2(cmpxchg8b); -} -#endif diff --git a/libraries/NEMU/src/isa/x86/instr/decode.c b/libraries/NEMU/src/isa/x86/instr/decode.c deleted file mode 100644 index b337ef8..0000000 --- a/libraries/NEMU/src/isa/x86/instr/decode.c +++ /dev/null @@ -1,864 +0,0 @@ -#include "../local-include/rtl.h" -#include -#include -#include - -def_all_THelper(); - -static inline word_t x86_instr_fetch(Decode *s, int len) { - word_t ret = instr_fetch(&s->snpc, len); - word_t ret_save = ret; - int i; - for (i = 0; i < len; i ++) { - *(s->isa.p_instr) = ret & 0xff; - ret >>= 8; - s->isa.p_instr ++; - } - return ret_save; -} - -static inline word_t get_instr(Decode *s) { - return *(s->isa.p_instr - 1); -} - -enum { - F_CF = 0x1, - F_PF = 0x2, - F_ZF = 0x4, - F_SF = 0x8, - F_OF = 0x10, - F_ALL = F_CF | F_PF | F_ZF | F_SF | F_OF, -}; - -static const uint8_t cc2flag [16] = { - [CC_O] = F_OF, [CC_NO] = F_OF, - [CC_B] = F_CF, [CC_NB] = F_CF, - [CC_E] = F_ZF, [CC_NE] = F_ZF, - [CC_BE] = F_ZF | F_CF, [CC_NBE] = F_ZF | F_CF, - [CC_S] = F_SF, [CC_NS] = F_SF, - [CC_P] = F_PF, [CC_NP] = F_PF, - [CC_L] = F_SF | F_OF, [CC_NL] = F_SF | F_OF, - [CC_LE] = F_SF | F_OF | F_ZF, [CC_NLE] = F_SF | F_OF | F_ZF, -}; - -static const struct { - uint8_t def, use; -} flag_table[TOTAL_INSTR] = { - [EXEC_ID_add] = { F_ALL, 0 }, - [EXEC_ID_adc] = { F_ALL, F_CF }, - [EXEC_ID_and] = { F_ALL, 0 }, - [EXEC_ID_bsr] = { F_ALL, 0 }, - [EXEC_ID_cmp] = { F_ALL, 0 }, - [EXEC_ID_dec] = { F_ALL & ~F_CF, 0 }, - [EXEC_ID_div] = { F_ALL, 0 }, - [EXEC_ID_idiv] = { F_ALL, 0 }, - [EXEC_ID_imul1] = { F_ALL, 0 }, - [EXEC_ID_imul2] = { F_ALL, 0 }, - [EXEC_ID_imul3] = { F_ALL, 0 }, - [EXEC_ID_inc] = { F_ALL & ~F_CF, 0 }, - [EXEC_ID_jcc] = { 0, F_ALL }, // update `use` at the end of `isa_fetch_decode()` - [EXEC_ID_mul] = { F_ALL, 0 }, - [EXEC_ID_neg] = { F_ALL, 0 }, - [EXEC_ID_or] = { F_ALL, 0 }, - [EXEC_ID_sar] = { F_ALL, 0 }, - [EXEC_ID_shl] = { F_ALL, 0 }, - [EXEC_ID_shr] = { F_ALL, 0 }, - [EXEC_ID_sbb] = { F_ALL, F_CF }, - [EXEC_ID_setcc] = { 0, F_ALL }, // update `use` at the end of `isa_fetch_decode()` - [EXEC_ID_sub] = { F_ALL, 0 }, - [EXEC_ID_test] = { F_ALL, 0 }, - [EXEC_ID_xor] = { F_ALL, 0 }, - [EXEC_ID_pushf] = { 0, F_ALL }, - [EXEC_ID_clc] = { F_CF, 0 }, - [EXEC_ID_stc] = { F_CF, 0 }, - [EXEC_ID_cmovcc] = { 0, F_ALL }, // update `use` at the end of `isa_fetch_decode()` - [EXEC_ID_xadd] = { F_ALL, 0 }, - [EXEC_ID_bt] = { F_ALL, 0 }, -}; - -typedef union { - struct { - uint8_t R_M :3; - uint8_t reg :3; - uint8_t mod :2; - }; - struct { - uint8_t dont_care :3; - uint8_t opcode :3; - }; - uint8_t val; -} ModR_M; - -typedef union { - struct { - uint8_t base :3; - uint8_t index :3; - uint8_t ss :2; - }; - uint8_t val; -} SIB; - -static inline void load_addr(Decode *s, ModR_M *m, Operand *rm) { - assert(m->mod != 3); - - sword_t disp = 0; - int disp_size = 4; - int base_reg = -1, index_reg = -1, scale = 0; - - if (m->R_M == R_ESP) { - SIB sib; - sib.val = instr_fetch(&s->snpc, 1); - base_reg = sib.base; - scale = sib.ss; - - if (sib.index != R_ESP) { index_reg = sib.index; } - } - else { - /* no SIB */ - base_reg = m->R_M; - } - - if (m->mod == 0) { - if (base_reg == R_EBP) { base_reg = -1; } - else { disp_size = 0; } - } - else if (m->mod == 1) { disp_size = 1; } - - if (disp_size != 0) { - /* has disp */ - disp = instr_fetch(&s->snpc, disp_size); - if (disp_size == 1) { disp = (int8_t)disp; } - } - - s->isa.mbase = (base_reg != -1 ? ®_l(base_reg) : rz); - s->isa.midx = (index_reg != -1 ? ®_l(index_reg) : rz); - s->isa.mscale = scale; - s->isa.moff = disp; - rm->preg = &rm->val; - rm->type = OP_TYPE_MEM; - -#ifdef CONFIG_DEBUG - char disp_buf[16]; - char base_buf[8]; - char index_buf[8]; - - if (disp_size != 0) { - /* has disp */ - sprintf(disp_buf, "%s%#x", (disp < 0 ? "-" : ""), (disp < 0 ? -disp : disp)); - } - else { disp_buf[0] = '\0'; } - - if (base_reg == -1) { base_buf[0] = '\0'; } - else { sprintf(base_buf, "%%%s", reg_name(base_reg, 4)); } - - if (index_reg == -1) { index_buf[0] = '\0'; } - else { sprintf(index_buf, ",%%%s,%d", reg_name(index_reg, 4), 1 << scale); } - - if (base_reg == -1 && index_reg == -1) { sprintf(rm->str, "%s", disp_buf); } - else { sprintf(rm->str, "%s(%s%s)", disp_buf, base_buf, index_buf); } -#endif -} - -static inline void operand_reg(Decode *s, Operand *op, int r, int width) { - op->reg = r; - if (width == 4) { op->preg = ®_l(r); } - else { - assert(width == 1 || width == 2); - op->preg = &op->val; - } - op->type = OP_TYPE_REG; - print_Dop(op->str, OP_STR_SIZE, "%%%s", reg_name(r, width)); -} - -static inline void operand_imm(Decode *s, Operand *op, word_t imm) { - op->preg = &op->val; - op->val = imm; - op->type = OP_TYPE_IMM; - print_Dop(op->str, OP_STR_SIZE, "$0x%x", imm); -} - -// decode operand helper -#define def_DopHelper(name) \ - static inline void concat(decode_op_, name) (Decode *s, Operand *op, int width) - -/* Refer to Appendix A in i386 manual for the explanations of these abbreviations */ - -/* Ib, Iv */ -def_DopHelper(I) { - /* pc here is pointing to the immediate */ - word_t imm = instr_fetch(&s->snpc, width); - operand_imm(s, op, imm); -} - -/* I386 manual does not contain this abbreviation, but it is different from - * the one above from the view of implementation. So we use another helper - * function to decode it. - */ -/* sign immediate */ -def_DopHelper(SI) { -#ifdef __ICS_EXPORT - /* TODO: Use x86_instr_fetch() to read `op->width' bytes of memory - * pointed by 's->seq_pc'. Interpret the result as a signed immediate, - * and call `operand_imm()` as following. - * - operand_imm(s, op, ???); - */ - TODO(); -#else - word_t imm = instr_fetch(&s->snpc, width); - if (width == 1) imm = (int8_t)imm; - else if (width == 2) imm = (int16_t)imm; - operand_imm(s, op, imm); -#endif -} - -/* I386 manual does not contain this abbreviation. - * It is convenient to merge them into a single helper function. - */ -/* AL/eAX */ -def_DopHelper(a) { - operand_reg(s, op, R_EAX, width); -} - -/* This helper function is use to decode register encoded in the opcode. */ -/* XX: AL, AH, BL, BH, CL, CH, DL, DH - * eXX: eAX, eCX, eDX, eBX, eSP, eBP, eSI, eDI - */ -def_DopHelper(r) { - int r = s->isa.opcode & 0x7; - operand_reg(s, op, r, width); -} - -/* I386 manual does not contain this abbreviation. - * We decode everything of modR/M byte in one time. - */ -/* Eb, Ew, Ev - * Gb, Gv - * Cd, - * M - * Rd - * Sw - */ -static inline void operand_rm(Decode *s, Operand *rm, Operand *reg, int width) { - ModR_M m; - m.val = x86_instr_fetch(s, 1); - if (reg != NULL) operand_reg(s, reg, m.reg, width); - if (m.mod == 3) operand_reg(s, rm, m.R_M, width); - else { load_addr(s, &m, rm); } - //s->isa.is_rm_memory = (m.mod != 3); -} - -/* Ob, Ov */ -def_DopHelper(O) { - s->isa.moff = instr_fetch(&s->snpc, 4); - s->isa.mbase = rz; - s->isa.midx = rz; - op->preg = &op->val; - op->type = OP_TYPE_MEM; - print_Dop(op->str, OP_STR_SIZE, "0x%x", s->isa.moff); -} - -/* Eb <- Gb - * Ev <- Gv - */ -static inline def_DHelper(G2E) { - operand_rm(s, id_dest, id_src1, width); -} - -#if 0 -// for bts and btr -static inline def_DHelper(bit_G2E) { - operand_rm(s, id_dest, false, id_src1, true); - if (s->isa.mbase) { - rtl_shri(s, s0, dsrc1, 5); - rtl_shli(s, s0, s0, 2); - rtl_add(s, &s->isa.mbr, s->isa.mbase, s0); - s->isa.mbase = &s->isa.mbr; - if (s->opcode != 0x1a3) { // bt - IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 1)); - } - rtl_lm(s, &id_dest->val, s->isa.mbase, s->isa.moff, id_dest->width); - } - rtl_andi(s, &id_src1->val, dsrc1, 0x1f); - id_src1->preg = &id_src1->val; -} -#endif - -/* Gb <- Eb - * Gv <- Ev - */ -static inline def_DHelper(E2G) { - operand_rm(s, id_src1, id_dest, width); -} - -static inline def_DHelper(Eb2G) { - operand_rm(s, id_src1, id_dest, 1); - // overwrite the wrong decode result by `operand_rm()` with the correct width - operand_reg(s, id_dest, id_dest->reg, width); -} - -static inline def_DHelper(Ew2G) { - operand_rm(s, id_src1, id_dest, 2); - // overwrite the wrong decode result by `operand_rm()` with the correct width - operand_reg(s, id_dest, id_dest->reg, width); -} - -/* AL <- Ib - * eAX <- Iv - */ -static inline def_DHelper(I2a) { - decode_op_a(s, id_dest, width); - decode_op_I(s, id_src1, width); -} - -/* Gv <- EvIb - * Gv <- EvIv - * use for imul */ -static inline def_DHelper(I_E2G) { - operand_rm(s, id_src1, id_dest, width); - decode_op_SI(s, id_src2, width); // imul takes the imm as signed -} - -/* Eb <- Ib - * Ev <- Iv - */ - -static inline def_DHelper(I2E) { - IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 1)); - operand_rm(s, id_dest, NULL, width); - decode_op_I(s, id_src1, width); -} - -/* XX <- Ib - * eXX <- Iv - */ -static inline def_DHelper(I2r) { - decode_op_r(s, id_dest, width); - decode_op_I(s, id_src1, width); -} - -/* used by unary operations */ -static inline def_DHelper(I) { - decode_op_I(s, id_dest, width); -} - -static inline def_DHelper(SI) { - decode_op_SI(s, id_dest, width); -} - -static inline def_DHelper(r) { - decode_op_r(s, id_dest, width); -} - -static inline def_DHelper(E) { - operand_rm(s, id_dest, NULL, width); -} - -#if 0 -static inline def_DHelper(gp6_E) { - operand_rm(s, id_dest, true, NULL, false); -} -#endif - -/* used by test in group3 */ -static inline def_DHelper(test_I) { - decode_op_I(s, id_src1, width); -} - -static inline def_DHelper(SI2E) { - assert(width == 2 || width == 4); - operand_rm(s, id_dest, NULL, width); - decode_op_SI(s, id_src1, 1); - if (width == 2) { *dsrc1 &= 0xffff; } -} - -static inline def_DHelper(SI_E2G) { - assert(width == 2 || width == 4); - operand_rm(s, id_src1, id_dest, width); - decode_op_SI(s, id_src2, 1); -} - -static inline def_DHelper(1_E) { // use by gp2 - operand_rm(s, id_dest, NULL, width); - operand_imm(s, id_src1, 1); -} - -static inline def_DHelper(cl2E) { // use by gp2 - //IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 1)); - operand_rm(s, id_dest, NULL, width); - // shift instructions will eventually use the lower - // 5 bits of %cl, therefore it is OK to load %ecx - operand_reg(s, id_src1, R_ECX, 4); -} - -static inline def_DHelper(Ib2E) { // use by gp2 - //IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 1)); - operand_rm(s, id_dest, NULL, width); - decode_op_I(s, id_src1, 1); -} - -/* Ev <- GvIb - * use for shld/shrd */ -static inline def_DHelper(Ib_G2E) { - //IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 1)); - operand_rm(s, id_dest, id_src1, width); - decode_op_I(s, id_src2, 1); -} - -/* Ev <- GvCL - * use for shld/shrd */ -static inline def_DHelper(cl_G2E) { - //IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 1)); - operand_rm(s, id_dest, id_src1, width); - // shift instructions will eventually use the lower - // 5 bits of %cl, therefore it is OK to load %ecx - operand_reg(s, id_src2, R_ECX, 4); -} - -#if 0 -// for cmpxchg -static inline def_DHelper(a_G2E) { - IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 1)); - operand_rm(s, id_dest, true, id_src2, true); - operand_reg(s, id_src1, true, R_EAX, 4); -} -#endif - -static inline def_DHelper(O2a) { - decode_op_O(s, id_src1, 0); - decode_op_a(s, id_dest, width); -} - -static inline def_DHelper(a2O) { - decode_op_a(s, id_src1, width); - decode_op_O(s, id_dest, 0); -} - -#if 0 -// for scas and stos -static inline def_DHelper(aSrc) { - decode_op_a(s, id_src1, true); -} - -// for lods -static inline def_DHelper(aDest) { - decode_op_a(s, id_dest, false); -} -#endif - -// for xchg -static inline def_DHelper(a2r) { - decode_op_a(s, id_src1, width); - decode_op_r(s, id_dest, width); -} - -static inline def_DHelper(J) { - // the target address can be computed in the decode stage - decode_op_SI(s, id_dest, width); - id_dest->imm = id_dest->val + s->snpc; - operand_imm(s, id_src1, s->snpc); // for call -} -#if 0 -#ifndef __ICS_EXPORT - -// for long jump -static inline def_DHelper(LJ) { - decode_op_I(s, id_dest, false); // offset - id_src1->width = 2; - decode_op_I(s, id_src1, false); // CS - // the target address can be computed in the decode stage - s->jmp_pc = id_dest->imm; -} -#endif - -static inline def_DHelper(in_I2a) { - id_src1->width = 1; - decode_op_I(s, id_src1, true); - decode_op_a(s, id_dest, false); -} -#endif - -static inline def_DHelper(dx2a) { - operand_reg(s, id_src1, R_DX, 2); - decode_op_a(s, id_dest, width); -} - -#if 0 -static inline def_DHelper(out_a2I) { - decode_op_a(s, id_src1, true); - id_dest->width = 1; - decode_op_I(s, id_dest, true); -} -#endif - -static inline def_DHelper(a2dx) { - decode_op_a(s, id_src1, width); - operand_reg(s, id_dest, R_DX, 2); -} - -#if 0 -#ifndef __ICS_EXPORT -static inline def_DHelper(Ib2xmm) { - operand_rm(s, id_dest, false, NULL, false); - id_src1->width = 1; - decode_op_I(s, id_src1, true); -} -#endif -#endif - - -static inline int SSEprefix(Decode *s) { - assert(!(s->isa.rep_flags != 0 && s->isa.is_operand_size_16)); - if (s->isa.is_operand_size_16) return 1; - else if (s->isa.rep_flags == PREFIX_REP) return 2; - else if (s->isa.rep_flags == PREFIX_REPNZ) return 3; - else return 0; -} - -def_THelper(sse_0x6f) { - int pfx = SSEprefix(s); - switch (pfx) { - case 1: decode_E2G(s, s->isa.width); return table_movdqa_E2xmm(s); - } - return EXEC_ID_inv; -} - -def_THelper(sse_0x73) { - int pfx = SSEprefix(s); - assert(pfx == 1); - def_INSTR_TABW("?? 010 ???", psrlq, -1); - return EXEC_ID_inv; -} - -def_THelper(sse_0x7e) { - int pfx = SSEprefix(s); - switch (pfx) { - case 1: s->isa.width = 4; decode_G2E(s, s->isa.width); return table_movd_xmm2E(s); - case 2: decode_E2G(s, s->isa.width); return table_movq_E2xmm(s); - } - return EXEC_ID_inv; -} - -def_THelper(sse_0xd6) { - int pfx = SSEprefix(s); - switch (pfx) { - case 1: decode_G2E(s, s->isa.width); return table_movq_xmm2E(s); - } - return EXEC_ID_inv; -} - -def_THelper(sse_0xef) { - int pfx = SSEprefix(s); - switch (pfx) { - case 1: decode_E2G(s, s->isa.width); return table_pxor(s); - } - return EXEC_ID_inv; -} - -def_THelper(main); - -def_THelper(operand_size) { - s->isa.is_operand_size_16 = true; - return table_main(s); -} - -def_THelper(rep) { -#ifndef CONFIG_ENGINE_INTERPRETER - panic("not support REP in engines other than interpreter"); -#endif - s->isa.rep_flags = PREFIX_REP; - return table_main(s); -} - -def_THelper(lock) { - return table_main(s); -} - -def_THelper(gs) { - s->isa.sreg_base = &cpu.sreg[CSR_GS].base; - return table_main(s); -} - -#undef def_INSTR_IDTABW -#define def_INSTR_IDTABW(pattern, id, tab, w) \ - def_INSTR_raw(pattern, { \ - if (w != -1) s->isa.width = (w == 0 ? (s->isa.is_operand_size_16 ? 2 : 4) : w); \ - concat(decode_, id)(s, s->isa.width); \ - return concat(table_, tab)(s); \ - }) - -def_THelper(gp1) { - def_INSTR_TABW("?? 000 ???", add, -1); - def_INSTR_TABW("?? 001 ???", or , -1); - def_INSTR_TABW("?? 010 ???", adc, -1); - def_INSTR_TABW("?? 011 ???", sbb, -1); - def_INSTR_TABW("?? 100 ???", and, -1); - def_INSTR_TABW("?? 101 ???", sub, -1); - def_INSTR_TABW("?? 110 ???", xor, -1); - def_INSTR_TABW("?? 111 ???", cmp, -1); - return EXEC_ID_inv; -} - -def_THelper(gp2) { - def_INSTR_TABW("?? 000 ???", rol, -1); - def_INSTR_TABW("?? 001 ???", ror, -1); - def_INSTR_TABW("?? 100 ???", shl, -1); - def_INSTR_TABW("?? 101 ???", shr, -1); - def_INSTR_TABW("?? 111 ???", sar, -1); - return EXEC_ID_inv; -} - -def_THelper(gp3) { - def_INSTR_IDTABW("?? 000 ???", test_I, test, s->isa.width); - def_INSTR_TABW ("?? 010 ???", not, -1); - def_INSTR_TABW ("?? 011 ???", neg, -1); - def_INSTR_TABW ("?? 100 ???", mul, -1); - def_INSTR_TABW ("?? 101 ???", imul1, -1); - def_INSTR_TABW ("?? 110 ???", div, -1); - def_INSTR_TABW ("?? 111 ???", idiv, -1); - return EXEC_ID_inv; -} - -def_THelper(gp4) { - def_INSTR_TABW("?? 000 ???", inc, -1); - def_INSTR_TABW("?? 001 ???", dec, -1); - return EXEC_ID_inv; -} - -def_THelper(gp5) { - def_INSTR_TABW("?? 000 ???", inc, -1); - def_INSTR_TABW("?? 001 ???", dec, -1); - def_INSTR_TABW("?? 010 ???", call_E, -1); - def_INSTR_TABW("?? 100 ???", jmp_E, -1); - def_INSTR_TABW("?? 110 ???", push, -1); - return EXEC_ID_inv; -} - -def_THelper(gp6) { - def_INSTR_TABW("?? 011 ???", ltr, -1); - return EXEC_ID_inv; -} - -def_THelper(gp7) { - def_INSTR_TABW("?? 010 ???", lgdt, -1); - def_INSTR_TABW("?? 011 ???", lidt, -1); - return EXEC_ID_inv; -} - -def_THelper(_2byte_esc) { - x86_instr_fetch(s, 1); - s->isa.opcode = get_instr(s) | 0x100; - - def_INSTR_IDTABW("0000 0000", E, gp6, 2); - def_INSTR_IDTABW("0000 0001", E, gp7, 4); - def_INSTR_IDTABW("0010 0000", G2E, mov_cr2r, 4); - def_INSTR_IDTABW("0010 0010", E2G, mov_r2cr, 4); - def_INSTR_TAB ("0011 0001", rdtsc); - def_INSTR_IDTAB ("0100 ????", E2G, cmovcc); - def_INSTR_TAB ("0110 1111", sse_0x6f); - def_INSTR_IDTAB ("0111 0011", Ib2E, sse_0x73); - def_INSTR_TAB ("0111 1110", sse_0x7e); - def_INSTR_IDTABW("1000 ????", J, jcc, 4); - def_INSTR_IDTABW("1001 ????", E, setcc, 1); - def_INSTR_TAB ("1010 0010", cpuid); - def_INSTR_IDTAB ("1010 0011", G2E, bt); - def_INSTR_IDTAB ("1010 0100",Ib_G2E,shld); - def_INSTR_IDTAB ("1010 0101",cl_G2E,shld); - def_INSTR_IDTAB ("1010 1100",Ib_G2E,shrd); - def_INSTR_IDTAB ("1010 1111", E2G, imul2); - def_INSTR_IDTAB ("1011 0001", G2E, cmpxchg); - def_INSTR_IDTAB ("1011 0110", Eb2G, movzb); - def_INSTR_IDTABW("1011 0111", Ew2G, movzw, 4); - def_INSTR_IDTAB ("1011 1101", E2G, bsr); - def_INSTR_IDTAB ("1011 1110", Eb2G, movsb); - def_INSTR_IDTABW("1011 1111", Ew2G, movsw, 4); - def_INSTR_IDTAB ("1100 0001", G2E, xadd); - def_INSTR_TAB ("1101 0110", sse_0xd6); - def_INSTR_TAB ("1110 1111", sse_0xef); - return EXEC_ID_inv; -} - -def_THelper(main) { - x86_instr_fetch(s, 1); - s->isa.opcode = get_instr(s); - - def_INSTR_IDTABW("0000 0000", G2E, add, 1); - def_INSTR_IDTAB ("0000 0001", G2E, add); - def_INSTR_IDTABW("0000 0010", E2G, add, 1); - def_INSTR_IDTAB ("0000 0011", E2G, add); - def_INSTR_IDTAB ("0000 0101", I2a, add); - def_INSTR_IDTABW("0000 1000", G2E, or, 1); - def_INSTR_IDTAB ("0000 1001", G2E, or); - def_INSTR_IDTAB ("0000 1011", E2G, or); - def_INSTR_IDTABW("0000 1100", I2a, or, 1); - def_INSTR_IDTAB ("0000 1101", I2a, or); - def_INSTR_IDTABW("0000 1010", E2G, or, 1); - def_INSTR_TAB ("0000 1111", _2byte_esc); - def_INSTR_IDTABW("0001 0000", G2E, adc, 1); - def_INSTR_IDTAB ("0001 0001", G2E, adc); - def_INSTR_IDTAB ("0001 0011", E2G, adc); - def_INSTR_IDTABW("0001 1000", G2E, sbb, 1); - def_INSTR_IDTAB ("0001 1001", G2E, sbb); - def_INSTR_IDTAB ("0001 1011", E2G, sbb); - def_INSTR_IDTABW("0010 0000", G2E, and, 1); - def_INSTR_IDTAB ("0010 0001", G2E, and); - def_INSTR_IDTABW("0010 0010", E2G, and, 1); - def_INSTR_IDTAB ("0010 0011", E2G, and); - def_INSTR_IDTABW("0010 0100", I2a, and, 1); - def_INSTR_IDTAB ("0010 0101", I2a, and); - def_INSTR_IDTABW("0010 1000", G2E, sub, 1); - def_INSTR_IDTAB ("0010 1001", G2E, sub); - def_INSTR_IDTABW("0010 1010", E2G, sub, 1); - def_INSTR_IDTAB ("0010 1011", E2G, sub); - def_INSTR_IDTAB ("0010 1101", I2a, sub); - def_INSTR_IDTABW("0011 0000", G2E, xor, 1); - def_INSTR_IDTAB ("0011 0001", G2E, xor); - def_INSTR_IDTABW("0011 0010", E2G, xor, 1); - def_INSTR_IDTAB ("0011 0011", E2G, xor); - def_INSTR_IDTAB ("0011 0101", I2a, xor); - def_INSTR_IDTABW("0011 1000", G2E, cmp, 1); - def_INSTR_IDTAB ("0011 1001", G2E, cmp); - def_INSTR_IDTABW("0011 1010", E2G, cmp, 1); - def_INSTR_IDTAB ("0011 1011", E2G, cmp); - def_INSTR_IDTABW("0011 1100", I2a, cmp, 1); - def_INSTR_IDTAB ("0011 1101", I2a, cmp); - def_INSTR_IDTAB ("0100 0???", r, inc); - def_INSTR_IDTAB ("0100 1???", r, dec); - def_INSTR_IDTAB ("0101 0???", r, push); - def_INSTR_IDTAB ("0101 1???", r, pop); - def_INSTR_TAB ("0110 0000", pusha); - def_INSTR_TAB ("0110 0001", popa); - def_INSTR_TAB ("0110 0101", gs); - def_INSTR_TAB ("0110 0110", operand_size); - def_INSTR_IDTAB ("0110 1000", I, push); - def_INSTR_IDTAB ("0110 1001",I_E2G, imul3); - def_INSTR_IDTABW("0110 1010", SI, push, 1); - def_INSTR_IDTAB ("0110 1011",SI_E2G,imul3); - def_INSTR_IDTABW("0111 ????", J, jcc, 1); - def_INSTR_IDTABW("1000 0000", I2E, gp1, 1); - def_INSTR_IDTAB ("1000 0001", I2E, gp1); - def_INSTR_IDTAB ("1000 0011", SI2E, gp1); - def_INSTR_IDTABW("1000 0100", G2E, test, 1); - def_INSTR_IDTAB ("1000 0101", G2E, test); - def_INSTR_IDTABW("1000 0110", G2E, xchg, 1); - def_INSTR_IDTABW("1000 1000", G2E, mov, 1); - def_INSTR_IDTAB ("1000 1001", G2E, mov); - def_INSTR_IDTABW("1000 1010", E2G, mov, 1); - def_INSTR_IDTAB ("1000 1011", E2G, mov); - def_INSTR_IDTABW("1000 1101", E2G, lea, 4); - def_INSTR_IDTABW("1000 1110", E2G, mov_rm2sreg, 2); - def_INSTR_TAB ("1001 0000", nop); - def_INSTR_IDTAB ("1001 0???", a2r, xchg); - def_INSTR_TAB ("1001 1000", cwtl); - def_INSTR_TAB ("1001 1001", cltd); - def_INSTR_TAB ("1001 1100", pushf); - def_INSTR_IDTABW("1010 0000", O2a, mov, 1); - def_INSTR_IDTAB ("1010 0001", O2a, mov); - def_INSTR_IDTABW("1010 0010", a2O, mov, 1); - def_INSTR_IDTAB ("1010 0011", a2O, mov); - - if (s->isa.rep_flags == PREFIX_REP) { - def_INSTR_TABW ("1010 0100", rep_movs, 1); - def_INSTR_TAB ("1010 0101", rep_movs); - def_INSTR_TABW ("1010 1010", rep_stos, 1); - def_INSTR_TAB ("1010 1011", rep_stos); - } - - def_INSTR_TABW ("1010 0100", movs, 1); - def_INSTR_TAB ("1010 0101", movs); - def_INSTR_IDTABW("1010 1000", I2a, test, 1); - def_INSTR_IDTAB ("1010 1001", I2a, test); - def_INSTR_IDTABW("1011 0???", I2r, mov, 1); - def_INSTR_IDTAB ("1011 1???", I2r, mov); - def_INSTR_IDTABW("1100 0000", Ib2E, gp2, 1); - def_INSTR_IDTAB ("1100 0001", Ib2E, gp2); - def_INSTR_IDTABW("1100 0010", I, ret_imm, 2); - def_INSTR_TAB ("1100 0011", ret); - def_INSTR_IDTABW("1100 0110", I2E, mov, 1); - def_INSTR_IDTAB ("1100 0111", I2E, mov); - def_INSTR_TAB ("1100 1001", leave); - def_INSTR_IDTABW("1100 1101", I, _int, 1); - def_INSTR_TAB ("1100 1111", iret); - def_INSTR_IDTABW("1101 0000", 1_E, gp2, 1); - def_INSTR_IDTAB ("1101 0001", 1_E, gp2); - def_INSTR_IDTABW("1101 0010", cl2E, gp2, 1); - def_INSTR_IDTAB ("1101 0011", cl2E, gp2); - def_INSTR_TAB ("1101 0110", nemu_trap); - def_INSTR_IDTABW("1110 0011", J, jecxz, 1); - def_INSTR_IDTABW("1110 1000", J, call, 4); - def_INSTR_IDTABW("1110 1001", J, jmp, 4); - def_INSTR_IDTABW("1110 1011", J, jmp, 1); - def_INSTR_IDTAB ("1110 1101", dx2a, in); - def_INSTR_IDTABW("1110 1110", a2dx, out, 1); - def_INSTR_IDTAB ("1110 1111", a2dx, out); - def_INSTR_TAB ("1111 0000", lock); - def_INSTR_IDTABW("1111 0110", E, gp3, 1); - def_INSTR_IDTAB ("1111 0111", E, gp3); - //def_INSTR_TAB ("1111 0010", repnz); - def_INSTR_TAB ("1111 0011", rep); - def_INSTR_TAB ("1111 1000", clc); - def_INSTR_TAB ("1111 1001", stc); - def_INSTR_TAB ("1111 1100", cld); - def_INSTR_IDTABW("1111 1110", E, gp4, 1); - def_INSTR_IDTAB ("1111 1111", E, gp5); - return table_inv(s); -} - -int isa_fetch_decode(Decode *s) { - int idx = EXEC_ID_inv; - s->isa.p_instr = s->isa.instr; - s->isa.is_operand_size_16 = 0; - s->isa.rep_flags = 0; - s->isa.sreg_base = NULL; - - idx = table_main(s); - - s->type = INSTR_TYPE_N; - switch (idx) { - case EXEC_ID_call: case EXEC_ID_jmp: - s->jnpc = id_dest->imm; s->type = INSTR_TYPE_J; break; - - case EXEC_ID_jcc: case EXEC_ID_jecxz: - s->jnpc = id_dest->imm; s->type = INSTR_TYPE_B; break; - case EXEC_ID_rep_movs: - case EXEC_ID_rep_stos: - s->jnpc = s->pc; s->type = INSTR_TYPE_B; break; - - case EXEC_ID_ret: case EXEC_ID_call_E: case EXEC_ID_jmp_E: case EXEC_ID_ret_imm: - case EXEC_ID__int: case EXEC_ID_iret: - s->type = INSTR_TYPE_I; break; - } - -#ifdef CONFIG_PERF_OPT - s->isa.flag_def = flag_table[idx].def; - s->isa.flag_use = flag_table[idx].use; - if (idx == EXEC_ID_jcc || idx == EXEC_ID_setcc || idx == EXEC_ID_cmovcc) { - s->isa.flag_use = cc2flag[s->isa.opcode & 0xf]; - } - - static Decode *bb_start = NULL; - static int bb_idx = 0; - - if (bb_idx == 0) bb_start = s; - - if (s->type != INSTR_TYPE_N) { // the end of a basic block - if (s - bb_start == bb_idx) { - // now scan and update `flag_def` - Decode *p; - //uint32_t use = s->isa.flag_use; - uint32_t use = F_ALL; //s->isa.flag_use; - for (p = s - 1; p >= bb_start; p --) { - uint32_t real_def = p->isa.flag_def & use; - use &= ~p->isa.flag_def; - use |= p->isa.flag_use; - p->isa.flag_def = real_def; - } - } - bb_idx = 0; - } else { - bb_idx ++; - } -#endif - - return idx; -} diff --git a/libraries/NEMU/src/isa/x86/instr/eflags.c b/libraries/NEMU/src/isa/x86/instr/eflags.c deleted file mode 100644 index 1774d29..0000000 --- a/libraries/NEMU/src/isa/x86/instr/eflags.c +++ /dev/null @@ -1,69 +0,0 @@ -#include "../local-include/rtl.h" -#include "../local-include/reg.h" -#include - -#define EFLAGS_BIT_CF 0 -#define EFLAGS_BIT_PF 2 -#define EFLAGS_BIT_ZF 6 -#define EFLAGS_BIT_SF 7 -#define EFLAGS_BIT_IF 9 -#define EFLAGS_BIT_DF 10 -#define EFLAGS_BIT_OF 11 - -#define _EFLAGS(f) f(OF) f(IF) f(SF) f(ZF) f(CF) f(DF) f(PF) -#define __f(flag) concat(EFLAGS_MASK_, flag) = 1 << concat(EFLAGS_BIT_, flag), -enum { - MAP(_EFLAGS, __f) -#undef __f -#define __f(flag) | concat(EFLAGS_MASK_, flag) - EFLAGS_MASK_ALL = 0 MAP(_EFLAGS, __f) -#undef __f -}; - -#define RTL_ENCODE(flag) \ - rtl_shli(s, t0, &cpu.flag, concat(EFLAGS_BIT_, flag)); \ - rtl_or(s, dest, dest, t0); - -#define RTL_DECODE(flag) \ - rtl_shri(s, &cpu.flag, src, concat(EFLAGS_BIT_, flag)); \ - rtl_andi(s, &cpu.flag, &cpu.flag, 0x1); - -#define ENCODE(flag) | (cpu.flag << (concat(EFLAGS_BIT_, flag))) -#define DECODE(flag) cpu.flag = (val >> (concat(EFLAGS_BIT_, flag))) & 1; - -void rtl_compute_eflags(Decode *s, rtlreg_t *dest) { - rtl_mv(s, dest, rz); - MAP(_EFLAGS, RTL_ENCODE) - rtl_ori(s, dest, dest, 0x2); -} - -void rtl_set_eflags(Decode *s, const rtlreg_t *src) { - MAP(_EFLAGS, RTL_DECODE) -} - -uint32_t compute_eflags() { - return 0x2 MAP(_EFLAGS, ENCODE); -} - -void set_eflags(uint32_t val) { - MAP(_EFLAGS, DECODE); -} - -void difftest_fix_eflags(void *arg) { -#if defined(CONFIG_ENGINE_INTERPRETER) && !defined(CONFIG_DIFFTEST_REF_KVM) -#define EFLAGS_MASK_ID (1 << 21) -#define EFLAGS_MASK_AC (1 << 18) -#define EFLAGS_MASK_AF (1 << 4) -#define EFLAGS_FIX_MASK (EFLAGS_MASK_ID | EFLAGS_MASK_AC | EFLAGS_MASK_AF) - uint32_t esp = (uintptr_t)arg; - if (cpu.cr0.paging) { - paddr_t pg_base = isa_mmu_translate(esp, 4, MEM_TYPE_WRITE); - assert((pg_base & PAGE_MASK) == MEM_RET_OK); - esp = pg_base | (esp & PAGE_MASK); - } - uint32_t flags; - ref_difftest_memcpy(esp, &flags, 4, DIFFTEST_TO_DUT); - flags &= ~EFLAGS_FIX_MASK; - ref_difftest_memcpy(esp, &flags, 4, DIFFTEST_TO_REF); -#endif -} diff --git a/libraries/NEMU/src/isa/x86/instr/eflags.h b/libraries/NEMU/src/isa/x86/instr/eflags.h deleted file mode 100644 index ba8476b..0000000 --- a/libraries/NEMU/src/isa/x86/instr/eflags.h +++ /dev/null @@ -1,60 +0,0 @@ -def_EHelper(pushf) { - void rtl_compute_eflags(Decode *s, rtlreg_t *dest); - rtl_compute_eflags(s, s0); - rtl_push(s, s0); - - extern void difftest_fix_eflags(void *arg); - difftest_set_patch(difftest_fix_eflags, (void *)(uintptr_t)cpu.esp); -} - -def_EHelper(clc) { - rtl_set_CF(s, rz); -} - -def_EHelper(stc) { - rtl_li(s, s0, 1); - rtl_set_CF(s, s0); -} - -def_EHelper(cld) { - rtl_set_DF(s, rz); -} - -#if 0 -static inline def_EHelper(std) { - rtl_li(s, s0, 1); - rtl_set_DF(s, s0); - print_asm("std"); -} - -static inline def_EHelper(cli) { - rtl_set_IF(s, rz); - print_asm("cli"); -} - -static inline def_EHelper(sti) { - rtl_li(s, s0, 1); - rtl_set_IF(s, s0); - print_asm("sti"); -} - -static inline def_EHelper(popf) { - void rtl_set_eflags(Decode *s, const rtlreg_t *src); - rtl_pop(s, s0); - rtl_set_eflags(s, s0); - print_asm("popf"); -} - -static inline def_EHelper(sahf) { - void rtl_set_eflags(Decode *s, const rtlreg_t *src); - void rtl_compute_eflags(Decode *s, rtlreg_t *dest); - - rtl_compute_eflags(s, s0); - rtl_andi(s, s0, s0, ~0xff); - rtl_lr(s, s1, R_AH, 1); - rtl_or(s, s0, s0, s1); - rtl_set_eflags(s, s0); - - print_asm("sahf"); -} -#endif diff --git a/libraries/NEMU/src/isa/x86/instr/fp.c b/libraries/NEMU/src/isa/x86/instr/fp.c deleted file mode 100644 index 8b80888..0000000 --- a/libraries/NEMU/src/isa/x86/instr/fp.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "../local-include/intr.h" -#include -#include -#include - -uint32_t isa_fp_get_rm(Decode *s) { - assert(0); -} - -void isa_fp_set_ex(uint32_t ex) { - assert(0); -} diff --git a/libraries/NEMU/src/isa/x86/instr/lazycc.h b/libraries/NEMU/src/isa/x86/instr/lazycc.h deleted file mode 100644 index 77ef4b2..0000000 --- a/libraries/NEMU/src/isa/x86/instr/lazycc.h +++ /dev/null @@ -1,312 +0,0 @@ -#include -#include "cc.h" - -#ifdef CONFIG_x86_CC_LAZY -static inline def_rtl(set_lazycc_dest, const rtlreg_t *dest) { - rtl_mv(s, &cpu.cc_dest, dest); -} - -static inline def_rtl(set_lazycc_src1, const rtlreg_t *src1) { - rtl_mv(s, &cpu.cc_src1, src1); -} - -static inline def_rtl(set_lazycc_src2, const rtlreg_t *src2) { - rtl_mv(s, &cpu.cc_src2, src2); -} - -static inline def_rtl(set_lazycc, const rtlreg_t *dest, const rtlreg_t *src1, const rtlreg_t *src2, - uint32_t cc_op, uint32_t width) { - rtl_set_lazycc_dest(s, dest); - if (src1 != NULL) rtl_set_lazycc_src1(s, src1); - if (src2 != NULL) rtl_set_lazycc_src2(s, src2); - cpu.cc_op = cc_op; - cpu.cc_width = width; - cpu.cc_dirty = true; -} - -static inline void clean_lazycc() { - cpu.cc_dirty = false; -} - -#define NEGCC(cc) ((cc)%2 == 1) -#define NEGCCRELOP(cc) (NEGCC(cc) ? RELOP_NE : RELOP_EQ) -#define MASKDEST(reg) \ - p = &cpu.cc_dest; \ - if (cpu.cc_width != 4) { rtl_andi(s, reg, &cpu.cc_dest, 0xffffffffu >> ((4 - cpu.cc_width) * 8)); p = reg;} - -#define UNARY 0x100 // compare with cpu.cc_dest and rz -static const int cc2relop [] = { - [CC_O] = 0, [CC_NO] = 0, - [CC_B] = RELOP_LTU, [CC_NB] = RELOP_GEU, - [CC_E] = UNARY | RELOP_EQ, [CC_NE] = UNARY | RELOP_NE, - [CC_BE] = RELOP_LEU, [CC_NBE] = RELOP_GTU, - [CC_S] = UNARY | RELOP_LT, [CC_NS] = UNARY | RELOP_GE, - [CC_P] = 0, [CC_NP] = 0, - [CC_L] = RELOP_LT, [CC_NL] = RELOP_GE, - [CC_LE] = RELOP_LE, [CC_NLE] = RELOP_GT, -}; - -static const int cc2relop_logic [] = { - [CC_O] = RELOP_FALSE, [CC_NO] = RELOP_TRUE, - [CC_B] = RELOP_LTU, [CC_NB] = RELOP_GEU, - [CC_E] = RELOP_EQ, [CC_NE] = RELOP_NE, - [CC_BE] = RELOP_LEU, [CC_NBE] = RELOP_GTU, - [CC_S] = RELOP_LT, [CC_NS] = RELOP_GE, - [CC_P] = 0, [CC_NP] = 0, - [CC_L] = RELOP_LT, [CC_NL] = RELOP_GE, - [CC_LE] = RELOP_LE, [CC_NLE] = RELOP_GT, -}; - - -static inline def_rtl(lazy_setcc_internal, rtlreg_t *dest, uint32_t cc) { - rtlreg_t *p = NULL; - int exception = (cpu.cc_op == LAZYCC_SUB) && (cc == CC_E || cc == CC_NE); - if ((cc2relop[cc] & UNARY) && !exception) { - uint32_t relop = cc2relop[cc] ^ UNARY; - p = &cpu.cc_dest; - if (cpu.cc_op == LAZYCC_SUB) { - // sub && (CC_S || CC_NS) - rtl_sub(s, dest, &cpu.cc_dest, &cpu.cc_src1); - p = dest; - } - int exception = (cpu.cc_op == LAZYCC_LOGIC) && (cc == CC_E || cc == CC_NE); - if (cpu.cc_width != 4 && !exception) { - rtl_shli(s, dest, p, 32 - cpu.cc_width * 8); - p = dest; - } - rtl_setrelop(s, relop, dest, p, rz); - return; - } - - switch (cpu.cc_op) { - case LAZYCC_ADD: - switch (cc) { - case CC_O: case CC_NO: - rtl_sub(s, dest, &cpu.cc_dest, &cpu.cc_src1); - rtl_is_add_overflow(s, dest, &cpu.cc_dest, &cpu.cc_src1, dest, cpu.cc_width); - goto negcc_reverse; - return; - case CC_LE: case CC_NLE: - rtl_sub(s, dest, &cpu.cc_dest, &cpu.cc_src1); - rtl_is_add_overflow(s, s0, &cpu.cc_dest, &cpu.cc_src1, dest, cpu.cc_width); - rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); - rtl_xor(s, dest, s0, s1); - MASKDEST(s0); - rtl_setrelopi(s, RELOP_EQ, s0, p, 0); - rtl_or(s, dest, dest, s0); - goto negcc_reverse; - return; - case CC_BE: case CC_NBE: - MASKDEST(s0); - rtl_is_add_carry(s, s1, p, &cpu.cc_src1); - rtl_setrelopi(s, RELOP_EQ, s0, p, 0); - rtl_or(s, dest, s0, s1); - goto negcc_reverse; - return; - default: - if (cc2relop[cc] != 0) { - MASKDEST(s0); - rtl_setrelop(s, cc2relop[cc], dest, p, &cpu.cc_src1); - return; - } - } - break; - case LAZYCC_SUB: - switch (cc) { - case CC_O: case CC_NO: - rtl_sub(s, dest, &cpu.cc_dest, &cpu.cc_src1); - rtl_is_sub_overflow(s, dest, dest, &cpu.cc_dest, &cpu.cc_src1, cpu.cc_width); - goto negcc_reverse; - return; - default: - if (cc2relop[cc] != 0) { - rtl_setrelop(s, cc2relop[cc] & 0xf, dest, &cpu.cc_dest, &cpu.cc_src1); - return; - } - } - break; - case LAZYCC_NEG: - switch (cc) { - case CC_B: case CC_NB: - rtl_setrelopi(s, RELOP_NE, dest, &cpu.cc_dest, 0); - goto negcc_reverse; - return; - case CC_O: case CC_NO: - rtl_setrelopi(s, NEGCCRELOP(cc), dest, &cpu.cc_dest, -(0x1u << (cpu.cc_width * 8 - 1))); - return; - case CC_L: case CC_NL: - rtl_setrelopi(s, NEGCCRELOP(cc), s0, &cpu.cc_dest, -(0x1u << (cpu.cc_width * 8 - 1))); - rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); - rtl_xor(s, dest, s0, s1); - return; - case CC_LE: case CC_NLE: - rtl_setrelopi(s, RELOP_EQ, s0, &cpu.cc_dest, -(0x1u << (cpu.cc_width * 8 - 1))); - rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); - rtl_xor(s, dest, s0, s1); - rtl_setrelopi(s, RELOP_EQ, s0, &cpu.cc_dest, 0); - rtl_or(s, dest, dest, s0); - goto negcc_reverse; - return; - case CC_BE: - rtl_li(s, dest, 1); - return; - case CC_NBE: - rtl_li(s, dest, 0); - return; - } - break; - case LAZYCC_INC: - switch (cc) { - case CC_O: case CC_NO: - rtl_setrelopi(s, NEGCCRELOP(cc), dest, &cpu.cc_dest, 0x1u << (cpu.cc_width * 8 - 1)); - return; - case CC_L: case CC_NL: - rtl_setrelopi(s, NEGCCRELOP(cc), s0, &cpu.cc_dest, 0x1u << (cpu.cc_width * 8 - 1)); - rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); - rtl_xor(s, dest, s0, s1); - return; - case CC_LE: case CC_NLE: - rtl_setrelopi(s, RELOP_EQ, s0, &cpu.cc_dest, 0x1u << (cpu.cc_width * 8 - 1)); - rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); - rtl_xor(s, dest, s0, s1); - MASKDEST(s0); - rtl_setrelopi(s, RELOP_EQ, s0, p, 0); - rtl_or(s, dest, dest, s0); - goto negcc_reverse; - return; - } - break; - case LAZYCC_DEC: - switch (cc) { - case CC_O: case CC_NO: - rtl_addi(s, dest, &cpu.cc_dest, 1); - rtl_setrelopi(s, NEGCCRELOP(cc), dest, dest, 0x1u << (cpu.cc_width * 8 - 1)); - return; - case CC_L: case CC_NL: - rtl_addi(s, s0, &cpu.cc_dest, 1); - rtl_setrelopi(s, NEGCCRELOP(cc), s0, s0, 0x1u << (cpu.cc_width * 8 - 1)); - rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); - rtl_xor(s, dest, s0, s1); - return; - case CC_LE: case CC_NLE: - rtl_addi(s, s0, &cpu.cc_dest, 1); - rtl_setrelopi(s, RELOP_EQ, s0, s0, 0x1u << (cpu.cc_width * 8 - 1)); - rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); - rtl_xor(s, dest, s0, s1); - rtl_setrelopi(s, RELOP_EQ, s0, &cpu.cc_dest, 0); - rtl_or(s, dest, dest, s0); - goto negcc_reverse; - return; - } - break; - case LAZYCC_ADC: - switch (cc) { - case CC_B: case CC_NB: - MASKDEST(s0); - rtl_is_add_carry(s, s1, &cpu.cc_src1, &cpu.cc_src2); - rtl_is_add_carry(s, dest, p, &cpu.cc_src1); - rtl_or(s, dest, s1, dest); - goto negcc_reverse; - return; - case CC_O: case CC_NO: - rtl_sub(s, dest, &cpu.cc_dest, &cpu.cc_src1); - rtl_is_add_overflow(s, dest, &cpu.cc_dest, dest, &cpu.cc_src2, cpu.cc_width); - goto negcc_reverse; - return; - case CC_L: case CC_NL: - rtl_sub(s, dest, &cpu.cc_dest, &cpu.cc_src1); - rtl_is_add_overflow(s, s0, &cpu.cc_dest, dest, &cpu.cc_src2, cpu.cc_width); - rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); - rtl_xor(s, dest, s0, s1); - goto negcc_reverse; - return; - case CC_LE: case CC_NLE: - rtl_sub(s, dest, &cpu.cc_dest, &cpu.cc_src1); - rtl_is_add_overflow(s, s0, &cpu.cc_dest, dest, &cpu.cc_src2, cpu.cc_width); - rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); - rtl_xor(s, dest, s0, s1); - MASKDEST(s0); - rtl_setrelopi(s, RELOP_EQ, s0, p, 0); - rtl_or(s, dest, dest, s0); - goto negcc_reverse; - return; - case CC_BE: case CC_NBE: - MASKDEST(s0); - rtl_setrelopi(s, RELOP_EQ, s1, p, 0); - rtl_is_add_carry(s, t0, &cpu.cc_src1, &cpu.cc_src2); - rtl_is_add_carry(s, s0, p, &cpu.cc_src1); - rtl_or(s, dest, t0, s0); - rtl_or(s, dest, dest, s1); - goto negcc_reverse; - return; - } - break; - case LAZYCC_SBB: - switch (cc) { - case CC_B: case CC_NB: - rtl_sub(s, s0, &cpu.cc_src1, &cpu.cc_dest); - rtl_is_add_carry(s, s0, s0, &cpu.cc_src2); - rtl_is_sub_carry(s, s1, &cpu.cc_src1, &cpu.cc_dest); - rtl_or(s, dest, s0, s1); - goto negcc_reverse; - return; - case CC_O: case CC_NO: - rtl_is_sub_overflow(s, dest, &cpu.cc_dest, &cpu.cc_src1, &cpu.cc_src2, cpu.cc_width); - goto negcc_reverse; - return; - case CC_L: case CC_NL: - rtl_is_sub_overflow(s, s0, &cpu.cc_dest, &cpu.cc_src1, &cpu.cc_src2, cpu.cc_width); - rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); - rtl_xor(s, dest, s0, s1); - goto negcc_reverse; - return; - case CC_LE: case CC_NLE: - rtl_is_sub_overflow(s, s0, &cpu.cc_dest, &cpu.cc_src1, &cpu.cc_src2, cpu.cc_width); - rtl_msb(s, s1, &cpu.cc_dest, cpu.cc_width); - rtl_xor(s, dest, s0, s1); - MASKDEST(s0); - rtl_setrelopi(s, RELOP_EQ, s0, p, 0); - rtl_or(s, dest, dest, s0); - goto negcc_reverse; - return; - case CC_BE: case CC_NBE: - rtl_sub(s, s0, &cpu.cc_src1, &cpu.cc_dest); - rtl_is_add_carry(s, s0, s0, &cpu.cc_src2); - rtl_is_sub_carry(s, s1, &cpu.cc_src1, &cpu.cc_dest); - rtl_or(s, dest, s0, s1); - rtl_setrelopi(s, RELOP_EQ, s0, &cpu.cc_dest, 0); - rtl_or(s, dest, dest, s0); - goto negcc_reverse; - return; - } - break; - case LAZYCC_LOGIC: - switch (cc) { - case CC_LE: case CC_NLE: case CC_L: case CC_NL: - p = &cpu.cc_dest; - if (cpu.cc_width != 4) { - rtl_shli(s, dest, p, 32 - cpu.cc_width * 8); - p = dest; - } - default: - if (p != dest) p = &cpu.cc_dest; - rtl_setrelop(s, cc2relop_logic[cc], dest, p, rz); - return; - } - break; - default: panic("unhandle cc_op = %d", cpu.cc_op); - } - panic("unhandle cc_op = %d, cc = %d", cpu.cc_op, cc); -negcc_reverse: - if NEGCC(cc) rtl_xori(s, dest, dest, 1); - return; -} - -static inline def_rtl(lazy_setcc, rtlreg_t *dest, uint32_t cc) { - if (cpu.cc_dirty == false) { - cpu.cc_dynamic = cpu.cc_op | 0x100; - // printf("dynamic hit\n"); - } - rtl_lazy_setcc_internal(s, dest, cc); -} -#endif diff --git a/libraries/NEMU/src/isa/x86/instr/logic.h b/libraries/NEMU/src/isa/x86/instr/logic.h deleted file mode 100644 index b30f675..0000000 --- a/libraries/NEMU/src/isa/x86/instr/logic.h +++ /dev/null @@ -1,327 +0,0 @@ -def_EHelper(and) { - rtl_decode_binary(s, true, true); - rtl_and(s, ddest, ddest, dsrc1); -#ifdef CONFIG_x86_CC_LAZY - rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_LOGIC, s->isa.width); -#else - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_update_ZFSF(s, ddest, s->isa.width); - rtl_mv(s, &cpu.CF, rz); - rtl_mv(s, &cpu.OF, rz); - } -#endif - rtl_wb(s, ddest); -} - -def_EHelper(or) { - rtl_decode_binary(s, true, true); - rtl_or(s, ddest, ddest, dsrc1); -#ifdef CONFIG_x86_CC_LAZY - rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_LOGIC, s->isa.width); -#else - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_update_ZFSF(s, ddest, s->isa.width); - rtl_mv(s, &cpu.CF, rz); - rtl_mv(s, &cpu.OF, rz); - } -#endif - rtl_wb(s, ddest); -} - -def_EHelper(test) { - rtl_decode_binary(s, true, true); - rtl_and(s, s0, ddest, dsrc1); -#ifdef CONFIG_x86_CC_LAZY - rtl_set_lazycc(s, s0, NULL, NULL, LAZYCC_LOGIC, s->isa.width); -#else - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_update_ZFSF(s, s0, s->isa.width); - rtl_mv(s, &cpu.CF, rz); - rtl_mv(s, &cpu.OF, rz); - } -#endif -} - -def_EHelper(xor) { - rtl_decode_binary(s, true, true); - rtl_xor(s, ddest, ddest, dsrc1); -#ifdef CONFIG_x86_CC_LAZY - rtl_set_lazycc(s, ddest, NULL, NULL, LAZYCC_LOGIC, s->isa.width); -#else - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_update_ZFSF(s, ddest, s->isa.width); - rtl_mv(s, &cpu.CF, rz); - rtl_mv(s, &cpu.OF, rz); - } -#endif - rtl_wb(s, ddest); -} - -def_EHelper(not) { - rtl_decode_unary(s, true); - rtl_not(s, ddest, ddest); - rtl_wb(s, ddest); -} - -def_EHelper(setcc) { - rtl_decode_unary(s, false); - uint32_t cc = s->isa.opcode & 0xf; -#ifdef CONFIG_x86_CC_LAZY - rtl_lazy_setcc(s, ddest, cc); -#else - rtl_setcc(s, ddest, cc); -#endif - rtl_wb(s, ddest); -} - -def_EHelper(shl) { - rtl_decode_binary(s, true, true); -#ifndef CONFIG_PA -#ifdef CONFIG_ENGINE_INTERPRETER -// int count = *dsrc1 & 0x1f; -// if (count == 0) return; -#endif - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_subi(s, s0, dsrc1, 1); - rtl_shl(s, s1, ddest, s0); // shift (cnt - 1) - rtl_msb(s, s0, s1, s->isa.width); - rtl_set_CF(s, s0); - rtl_shl(s, ddest, ddest, dsrc1); - - if (MUXDEF(CONFIG_DIFFTEST_REF_KVM, count == 1, 1)) { - rtl_xor(s, s0, s1, ddest); - rtl_msb(s, s0, s0, s->isa.width); - rtl_set_OF(s, s0); - } - - rtl_update_ZFSF(s, ddest, s->isa.width); - } else { - rtl_shl(s, ddest, ddest, dsrc1); - } -#else - rtl_shl(s, ddest, ddest, dsrc1); - rtl_update_ZFSF(s, ddest, s->isa.width); -#endif -#ifdef CONFIG_x86_CC_LAZY - //panic("TODO: implement CF and OF with lazy cc"); -#endif - rtl_wb(s, ddest); -} - -def_EHelper(shr) { - rtl_decode_binary(s, true, true); -#ifndef CONFIG_PA -#ifdef CONFIG_ENGINE_INTERPRETER -// int count = *dsrc1 & 0x1f; -// if (count == 0) return; -#endif - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_subi(s, s0, dsrc1, 1); - rtl_shr(s, s1, ddest, s0); // shift (cnt - 1) - rtl_andi(s, s0, s1, 0x1); - rtl_set_CF(s, s0); - rtl_shr(s, ddest, ddest, dsrc1); - - if (MUXDEF(CONFIG_DIFFTEST_REF_KVM, count == 1, 1)) { - rtl_xor(s, s0, s1, ddest); - rtl_msb(s, s0, s0, s->isa.width); - rtl_set_OF(s, s0); - } - - rtl_update_ZFSF(s, ddest, s->isa.width); - } else { - rtl_shr(s, ddest, ddest, dsrc1); - } -#else - rtl_shr(s, ddest, ddest, dsrc1); - rtl_update_ZFSF(s, ddest, s->isa.width); -#endif -#ifdef CONFIG_x86_CC_LAZY - //panic("TODO: implement CF and OF with lazy cc"); -#endif - rtl_wb(s, ddest); -} - -def_EHelper(sar) { - rtl_decode_binary(s, true, true); - - // if ddest == dsrc1, rtl_sar() still only use the - // lower 5 bits of dsrc1, which do not change after - // rtl_sext(), and it is still sematically correct - rtl_sext(s, ddest, ddest, s->isa.width); -#ifndef CONFIG_PA -#ifdef CONFIG_ENGINE_INTERPRETER -// int count = *dsrc1 & 0x1f; -// if (count == 0) return; -#endif - int need_update_eflags = MUXDEF(CONFIG_x86_CC_SKIP, s->isa.flag_def != 0, true); - if (need_update_eflags) { - rtl_subi(s, s0, dsrc1, 1); - rtl_sar(s, s1, ddest, s0); // shift (cnt - 1) - rtl_andi(s, s0, s1, 0x1); - rtl_set_CF(s, s0); - rtl_sar(s, ddest, ddest, dsrc1); - - if (MUXDEF(CONFIG_DIFFTEST_REF_KVM, count == 1, 1)) { - rtl_xor(s, s0, s1, ddest); - rtl_msb(s, s0, s0, s->isa.width); - rtl_set_OF(s, s0); - } - - rtl_update_ZFSF(s, ddest, s->isa.width); - } else { - rtl_sar(s, ddest, ddest, dsrc1); - } -#else - rtl_sar(s, ddest, ddest, dsrc1); - rtl_update_ZFSF(s, ddest, s->isa.width); -#endif -#ifdef CONFIG_x86_CC_LAZY - //panic("TODO: implement CF and OF with lazy cc"); -#endif - rtl_wb(s, ddest); -} - -def_EHelper(rol) { - rtl_decode_binary(s, true, true); - rtl_shl(s, s0, ddest, dsrc1); - rtl_li(s, s1, s->isa.width * 8); - rtl_sub(s, s1, s1, dsrc1); - rtl_shr(s, s1, ddest, s1); - rtl_or(s, ddest, s0, s1); - rtl_wb(s, ddest); - // unnecessary to update eflags in NEMU - //difftest_skip_eflags(EFLAGS_MASK_ALL); -} - -def_EHelper(ror) { - rtl_decode_binary(s, true, true); - rtl_shr(s, s0, ddest, dsrc1); - rtl_li(s, s1, s->isa.width * 8); - rtl_sub(s, s1, s1, dsrc1); - rtl_shl(s, s1, ddest, s1); - rtl_or(s, ddest, s0, s1); - rtl_wb(s, ddest); - // unnecessary to update eflags in NEMU - //difftest_skip_eflags(EFLAGS_MASK_ALL); -} - -def_EHelper(shld) { - assert(s->isa.width == 4); - rtl_decode_binary(s, true, true); - - rtl_shl(s, s0, ddest, dsrc2); - - rtl_li(s, s1, 31); - rtl_sub(s, s1, s1, dsrc2); - // shift twice to deal with dsrc1 = 0 - // the first shift is still right even if we do not - // mask out the high part of `dsrc1`, since we have - // (31 - (dsrc1 & 0x1f)) = (31 - dsrc1 % 32) = (31 - dsrc1) mod 32 - rtl_shr(s, s1, dsrc1, s1); - rtl_shri(s, s1, s1, 1); - - rtl_or(s, ddest, s0, s1); - rtl_wb(s, ddest); - -#ifndef CONFIG_x86_CC_LAZY - rtl_update_ZFSF(s, ddest, s->isa.width); - // unnecessary to update CF and OF in NEMU -#endif - print_asm_template3(shld); -} - -def_EHelper(shrd) { - assert(s->isa.width == 4); - rtl_decode_binary(s, true, true); - -#ifdef CONFIG_ENGINE_INTERPRETER - int count = *dsrc2 & 0x1f; - if (count == 0) { - rtl_wb(s, ddest); - assert(0); - //return; - } -#endif - rtl_subi(s, s0, dsrc2, 1); - rtl_shr(s, s1, ddest, s0); // shift (cnt - 1) - rtl_andi(s, s0, s1, 0x1); - rtl_set_CF(s, s0); - rtl_shr(s, s0, ddest, dsrc2); - - rtl_li(s, s1, 31); - rtl_sub(s, s1, s1, dsrc2); - // shift twice to deal with dsrc1 = 0 - // the first shift is still right even if we do not - // mask out the high part of `dsrc1`, since we have - // (31 - (dsrc1 & 0x1f)) = (31 - dsrc1 % 32) = (31 - dsrc1) mod 32 - rtl_shl(s, s1, dsrc1, s1); - rtl_shli(s, s1, s1, 1); - - rtl_or(s, ddest, s0, s1); - rtl_wb(s, ddest); - -#ifndef CONFIG_x86_CC_LAZY - rtl_update_ZFSF(s, ddest, s->isa.width); - // unnecessary to update CF and OF in NEMU -#endif -} - -#if 0 -static inline def_EHelper(rcr) { - rtl_shr(s, s0, ddest, dsrc1); - - rtl_get_CF(s, s1); - rtl_shli(s, s1, s1, 31); - rtl_shr(s, s1, s1, dsrc1); - rtl_shli(s, s1, s1, 1); - rtl_or(s, s0, s0, s1); - - rtl_li(s, s1, 1); - rtl_shl(s, s1, s1, dsrc1); - rtl_shri(s, s1, s1, 1); - rtl_and(s, s1, ddest, s1); - rtl_setrelopi(s, RELOP_NE, s1, s1, 0); - rtl_set_CF(s, s1); - - rtl_li(s, s1, id_dest->s->isa.width * 8); - rtl_sub(s, s1, s1, dsrc1); - rtl_shl(s, s1, ddest, s1); - rtl_shli(s, s1, s1, 1); - rtl_or(s, ddest, s0, s1); - - operand_write(s, id_dest, ddest); - print_asm_template2(rcr); -} - -static inline def_EHelper(rcl) { - rtl_shl(s, s0, ddest, dsrc1); - - rtl_get_CF(s, s1); - rtl_shl(s, s1, s1, dsrc1); - rtl_shri(s, s1, s1, 1); - rtl_or(s, s0, s0, s1); - - rtl_li(s, s1, 0x80000000); - rtl_shr(s, s1, s1, dsrc1); - rtl_shli(s, s1, s1, 1); - rtl_and(s, s1, ddest, s1); - rtl_setrelopi(s, RELOP_NE, s1, s1, 0); - rtl_set_CF(s, s1); - - rtl_li(s, s1, id_dest->s->isa.width * 8); - rtl_sub(s, s1, s1, dsrc1); - rtl_shr(s, s1, ddest, s1); - rtl_shri(s, s1, s1, 1); - rtl_or(s, ddest, s0, s1); - - operand_write(s, id_dest, ddest); - print_asm_template2(rcl); -} -#endif diff --git a/libraries/NEMU/src/isa/x86/instr/misc.h b/libraries/NEMU/src/isa/x86/instr/misc.h deleted file mode 100644 index 5a2a8ea..0000000 --- a/libraries/NEMU/src/isa/x86/instr/misc.h +++ /dev/null @@ -1,36 +0,0 @@ -def_EHelper(cpuid) { - rtl_mv(s, &cpu.eax, rz); - rtl_mv(s, &cpu.ebx, rz); - rtl_mv(s, &cpu.ecx, rz); - rtl_mv(s, &cpu.edx, rz); - difftest_skip_ref(); -} - -def_EHelper(rdtsc) { -#if defined(CONFIG_DETERMINISTIC) || defined(CONFIG_ENGINE_INTERPRETER) - rtl_li(s, &cpu.edx, 0); - rtl_li(s, &cpu.eax, 0); -#else - uint64_t tsc = get_time(); - cpu.edx = tsc >> 32; - cpu.eax = tsc & 0xffffffff; -#endif - - difftest_skip_ref(); -} - -#if 0 -static inline def_EHelper(fwait) { - print_asm("fwait"); -} - -static inline def_EHelper(fpu) { - rtl_trap(s, cpu.pc, 7); -} - -static inline def_EHelper(hlt) { - rtl_trap(s, s->seq_pc, IRQ_TIMER); - if (ref_difftest_raise_intr) ref_difftest_raise_intr(IRQ_TIMER); - print_asm("hlt"); -} -#endif diff --git a/libraries/NEMU/src/isa/x86/instr/rt.h b/libraries/NEMU/src/isa/x86/instr/rt.h deleted file mode 100644 index aa742c7..0000000 --- a/libraries/NEMU/src/isa/x86/instr/rt.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef __RT_H__ -#define __RT_H__ - -static inline void rt_decode_reg(Decode *s, Operand *op, bool load, int width) { - if (load && (width == 1 || width == 2)) { rtl_lr(s, op->preg, op->reg, width); } -} - -static inline void rt_decode_mem(Decode *s, Operand *op, bool load, int width) { -#if 0 - if (((s->opcode == 0x80 || s->opcode == 0x81 || s->opcode == 0x83) && s->isa.ext_opcode == 7) || - (s->opcode == 0x1ba && s->isa.ext_opcode == 4)) { - // fix with cmp and bt, since they do not write memory - IFDEF(CONFIG_DIFFTEST_REF_KVM, IFNDEF(CONFIG_PA, cpu.lock = 0)); - } -#endif - - rtl_mv(s, &s->isa.mbr, s->isa.mbase); - if (s->isa.midx != rz) { - rtl_shli(s, s1, s->isa.midx, s->isa.mscale); - rtl_add(s, &s->isa.mbr, &s->isa.mbr, s1); - } - if (ISNDEF(CONFIG_PA) && s->isa.sreg_base != NULL) { - rtl_add(s, &s->isa.mbr, &s->isa.mbr, s->isa.sreg_base); - } - - if (load) rtl_lm(s, &op->val, &s->isa.mbr, s->isa.moff, width, MMU_DYNAMIC); -} - -static inline void rt_decode(Decode *s, Operand *op, bool load, int width) { - if (op->type == OP_TYPE_REG) rt_decode_reg(s, op, load, width); - else if (op->type == OP_TYPE_MEM) rt_decode_mem(s, op, load, width); -} - -static inline def_rtl(decode_unary, bool load) { - rt_decode(s, id_dest, load, s->isa.width); -} - -static inline def_rtl(decode_binary, bool load_dest, bool load_src1) { - rt_decode(s, id_dest, load_dest, s->isa.width); - rt_decode(s, id_src1, load_src1, s->isa.width); -} - - - -static inline def_rtl(wb_r, rtlreg_t *src) { - rtl_sr(s, id_dest->reg, src, s->isa.width); -} - -static inline def_rtl(wb_m, rtlreg_t *src) { - rtl_sm(s, src, &s->isa.mbr, s->isa.moff, s->isa.width, MMU_DYNAMIC); -} - -static inline def_rtl(wb, rtlreg_t *src) { - if (id_dest->type == OP_TYPE_REG) rtl_wb_r(s, src); - else if (id_dest->type == OP_TYPE_MEM) rtl_wb_m(s, src); -} - -#include "cc.h" - -#endif diff --git a/libraries/NEMU/src/isa/x86/instr/special.h b/libraries/NEMU/src/isa/x86/instr/special.h deleted file mode 100644 index db4d52e..0000000 --- a/libraries/NEMU/src/isa/x86/instr/special.h +++ /dev/null @@ -1,13 +0,0 @@ -def_EHelper(nop) { -} - -def_EHelper(inv) { - save_globals(s); - rtl_hostcall(s, HOSTCALL_INV, NULL, NULL, NULL, 0); - longjmp_exec(NEMU_EXEC_END); -} - -def_EHelper(nemu_trap) { - rtl_hostcall(s, HOSTCALL_EXIT, NULL, &cpu.eax, NULL, 0); - longjmp_exec(NEMU_EXEC_END); -} diff --git a/libraries/NEMU/src/isa/x86/instr/string.h b/libraries/NEMU/src/isa/x86/instr/string.h deleted file mode 100644 index 080c118..0000000 --- a/libraries/NEMU/src/isa/x86/instr/string.h +++ /dev/null @@ -1,122 +0,0 @@ -def_EHelper(movs) { - rtl_lm(s, s0, &cpu.esi, 0, s->isa.width, MMU_DYNAMIC); - rtl_sm(s, s0, &cpu.edi, 0, s->isa.width, MMU_DYNAMIC); - rtl_addi(s, &cpu.esi, &cpu.esi, (cpu.DF ? -1 : 1) * s->isa.width); - rtl_addi(s, &cpu.edi, &cpu.edi, (cpu.DF ? -1 : 1) * s->isa.width); -} - -def_EHelper(rep_movs) { - if (cpu.ecx != 0) { - rtl_lm(s, s0, &cpu.esi, 0, s->isa.width, MMU_DYNAMIC); - rtl_sm(s, s0, &cpu.edi, 0, s->isa.width, MMU_DYNAMIC); - rtl_addi(s, &cpu.esi, &cpu.esi, (cpu.DF ? -1 : 1) * s->isa.width); - rtl_addi(s, &cpu.edi, &cpu.edi, (cpu.DF ? -1 : 1) * s->isa.width); - - rtl_subi(s, &cpu.ecx, &cpu.ecx, 1); - } - - rtl_jrelop(s, RELOP_NE, &cpu.ecx, rz, s->pc); -} - -def_EHelper(rep_stos) { - if (cpu.ecx != 0) { - rtl_sm(s, &cpu.eax, &cpu.edi, 0, s->isa.width, MMU_DYNAMIC); - rtl_addi(s, &cpu.edi, &cpu.edi, (cpu.DF ? -1 : 1) * s->isa.width); - - rtl_subi(s, &cpu.ecx, &cpu.ecx, 1); - } - - rtl_jrelop(s, RELOP_NE, &cpu.ecx, rz, s->pc); -} - -#if 0 -static inline def_EHelper(lods) { - rtl_lm(s, ddest, &cpu.esi, 0, id_dest->width); - rtl_addi(s, &cpu.esi, &cpu.esi, (cpu.DF ? -1 : 1) * id_dest->width); - operand_write(s, id_dest, ddest); - - print_asm("lods (%%esi), %%eax"); -} - -static inline def_EHelper(stos) { -#ifndef CONFIG_ENGINE_INTERPRETER - Assert(s->isa.rep_flags == 0, "not support REP in engines other than interpreter"); -#endif - - word_t count = (s->isa.rep_flags ? cpu.ecx : 1); - if (count != 0) { - rtl_sm(s, &cpu.edi, 0, dsrc1, id_dest->width); - return_on_mem_ex(); - rtl_addi(s, &cpu.edi, &cpu.edi, (cpu.DF ? -1 : 1) * id_dest->width); - } - if (s->isa.rep_flags && count != 0) { - cpu.ecx --; - if (count - 1 != 0) rtl_j(s, cpu.pc); - } - - print_asm("stos %%eax, (%%edi)"); -} - -static inline def_EHelper(scas) { -#ifndef CONFIG_ENGINE_INTERPRETER - Assert(s->isa.rep_flags == 0, "not support REP in engines other than interpreter"); -#endif - - int is_repnz = (s->isa.rep_flags == PREFIX_REPNZ); - word_t count = (s->isa.rep_flags ? cpu.ecx : 1); - if (count != 0) { - rtl_lm(s, s0, &cpu.edi, 0, id_dest->width); - return_on_mem_ex(); - rtl_setrelop(s, RELOP_EQ, s1, s0, dsrc1); - rtl_set_ZF(s, s1); - rtl_addi(s, &cpu.edi, &cpu.edi, (cpu.DF ? -1 : 1) * id_dest->width); - } - if (s->isa.rep_flags && count != 0) { - cpu.ecx --; - if ((count - 1 != 0) && (is_repnz ^ cpu.ZF)) rtl_j(s, cpu.pc); - } else { - rtl_sub(s, s1, dsrc1, s0); - rtl_update_ZFSF(s, s1, id_dest->width); - rtl_is_sub_carry(s, s1, dsrc1, s0); - rtl_set_CF(s, s1); - rtl_sub(s, s1, dsrc1, s0); - rtl_is_sub_overflow(s, s1, s1, dsrc1, s0, id_dest->width); - rtl_set_OF(s, s1); - } - - print_asm("stos %%eax, (%%edi)"); -} - -static inline def_EHelper(cmps) { -#ifndef CONFIG_ENGINE_INTERPRETER - Assert(s->isa.rep_flags == 0, "not support REP in engines other than interpreter"); -#endif - - int is_repnz = (s->isa.rep_flags == PREFIX_REPNZ); - word_t count = (s->isa.rep_flags ? cpu.ecx : 1); - if (count != 0) { - rtl_lm(s, &id_dest->val, &cpu.edi, 0, id_dest->width); - return_on_mem_ex(); - rtl_lm(s, &id_src1->val, &cpu.esi, 0, id_dest->width); - return_on_mem_ex(); - rtl_setrelop(s, RELOP_EQ, s0, &id_dest->val, &id_src1->val); - rtl_set_ZF(s, s0); - rtl_addi(s, &cpu.esi, &cpu.esi, (cpu.DF ? -1 : 1) * id_dest->width); - rtl_addi(s, &cpu.edi, &cpu.edi, (cpu.DF ? -1 : 1) * id_dest->width); - } - if (s->isa.rep_flags && count != 0) { - cpu.ecx --; - if ((count - 1 != 0) && (is_repnz ^ cpu.ZF)) rtl_j(s, cpu.pc); - else { - rtl_sub(s, s0, &id_src1->val, &id_dest->val); - rtl_update_ZFSF(s, s0, id_dest->width); - rtl_is_sub_carry(s, s1, &id_src1->val, &id_dest->val); - rtl_set_CF(s, s1); - rtl_is_sub_overflow(s, s0, s0, &id_src1->val, &id_dest->val, id_dest->width); - rtl_set_OF(s, s0); - } - } - - print_asm("cmps (%%edi), (%%esi)"); -} -#endif diff --git a/libraries/NEMU/src/isa/x86/instr/system.h b/libraries/NEMU/src/isa/x86/instr/system.h deleted file mode 100644 index 2306953..0000000 --- a/libraries/NEMU/src/isa/x86/instr/system.h +++ /dev/null @@ -1,117 +0,0 @@ -def_EHelper(in) { - rt_decode(s, id_dest, false, s->isa.width); - rt_decode(s, id_src1, true, 2); - rtl_hostcall(s, HOSTCALL_PIO, ddest, dsrc1, NULL, (1 << 4) | s->isa.width); - rtl_wb_r(s, ddest); -} - -def_EHelper(out) { - rt_decode(s, id_dest, true, 2); - rt_decode(s, id_src1, true, s->isa.width); - rtl_hostcall(s, HOSTCALL_PIO, ddest, dsrc1, NULL, (0 << 4) | s->isa.width); -} - -def_EHelper(mov_r2cr) { - rtl_decode_binary(s, false, true); - rtl_hostcall(s, HOSTCALL_CSR, NULL, dsrc1, NULL, CSR_CR0 + id_dest->reg); -} - -def_EHelper(mov_cr2r) { - rtl_decode_binary(s, false, false); - rtl_hostcall(s, HOSTCALL_CSR, ddest, NULL, NULL, CSR_CR0 + id_src1->reg); - rtl_priv_next(s); -} - -def_EHelper(lidt) { - rtl_decode_unary(s, false); - rtl_addi(s, ddest, &s->isa.mbr, s->isa.moff); - rtl_hostcall(s, HOSTCALL_CSR, NULL, ddest, NULL, CSR_IDTR); -} - -def_EHelper(lgdt) { - rtl_decode_unary(s, false); - rtl_addi(s, ddest, &s->isa.mbr, s->isa.moff); - rtl_hostcall(s, HOSTCALL_CSR, NULL, ddest, NULL, CSR_GDTR); -} - -def_EHelper(ltr) { - rtl_decode_unary(s, true); - rtl_hostcall(s, HOSTCALL_CSR, NULL, ddest, NULL, CSR_TR); -} - -def_EHelper(_int) { - rtl_trap(s, s->snpc, id_dest->val); - rtl_priv_jr(s, t0); -} - -def_EHelper(iret) { - rtl_hostcall(s, HOSTCALL_PRIV, s0, NULL, NULL, PRIV_IRET); - rtl_priv_jr(s, s0); -} - -def_EHelper(mov_rm2sreg) { - rtl_decode_binary(s, false, true); - rtl_hostcall(s, HOSTCALL_CSR, NULL, dsrc1, NULL, id_dest->reg); - if (ISNDEF(CONFIG_DIFFTEST_REF_NEMU) && id_dest->reg == 2) { difftest_skip_dut(1, 2); } // SS -} - -#if 0 -static inline def_EHelper(lldt) { - rtl_hostcall(s, HOSTCALL_CSR, NULL, ddest, CSR_LDTR); - print_asm_template1(lldt); -} - -static inline def_EHelper(mov_sreg2rm) { - rtl_hostcall(s, HOSTCALL_CSR, s0, NULL, id_src1->reg); - operand_write(s, id_dest, s0); - print_asm("movw %%%s,%s", sreg_name(id_src1->reg), id_dest->str); -} - -static inline def_EHelper(push_sreg_internal) { - rtl_hostcall(s, HOSTCALL_CSR, s0, NULL, id_dest->reg); - rtl_push(s, s0); - print_asm("push %%%s", sreg_name(id_dest->reg)); -} - -static inline def_EHelper(pop_sreg_internal) { - rtl_pop(s, s0); - rtl_hostcall(s, HOSTCALL_CSR, NULL, s0, id_dest->reg); - print_asm("pop %%%s", sreg_name(id_dest->reg)); -} - -static inline def_EHelper(push_fs) { - id_dest->reg = CSR_FS; - exec_push_sreg_internal(s); -} - -static inline def_EHelper(push_es) { - id_dest->reg = CSR_ES; - exec_push_sreg_internal(s); -} - -static inline def_EHelper(push_ds) { - id_dest->reg = CSR_DS; - exec_push_sreg_internal(s); -} - -static inline def_EHelper(pop_ds) { - id_dest->reg = CSR_DS; - exec_pop_sreg_internal(s); -} - -static inline def_EHelper(pop_es) { - id_dest->reg = CSR_ES; - exec_pop_sreg_internal(s); -} - -static inline def_EHelper(pop_fs) { - id_dest->reg = CSR_FS; - exec_pop_sreg_internal(s); -} - -static inline def_EHelper(invlpg) { -} - -static inline def_EHelper(mov_r2dr) { -} -#endif diff --git a/libraries/NEMU/src/isa/x86/instr/vector.h b/libraries/NEMU/src/isa/x86/instr/vector.h deleted file mode 100644 index 3f5801b..0000000 --- a/libraries/NEMU/src/isa/x86/instr/vector.h +++ /dev/null @@ -1,70 +0,0 @@ -def_EHelper(movq_E2xmm) { - rtl_decode_binary(s, false, false); - - rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 0, 4, MMU_DYNAMIC); - cpu.xmm[id_dest->reg]._32[0] = *s0; - rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 4, 4, MMU_DYNAMIC); - cpu.xmm[id_dest->reg]._32[1] = *s0; - - //rtl_li(s, s0, cpu.xmm[id_dest->reg]._32[0]); - //operand_write(s, id_src1, s0); -} - -def_EHelper(movq_xmm2E) { - rtl_decode_binary(s, false, false); - *s0 = cpu.xmm[id_src1->reg]._32[0]; - rtl_sm(s, s0, &s->isa.mbr, s->isa.moff + 0, 4, MMU_DYNAMIC); - *s0 = cpu.xmm[id_src1->reg]._32[1]; - rtl_sm(s, s0, &s->isa.mbr, s->isa.moff + 4, 4, MMU_DYNAMIC); -} - -def_EHelper(movdqa_E2xmm) { - rtl_decode_binary(s, false, false); - if (id_src1->type == OP_TYPE_REG) { - cpu.xmm[id_dest->reg] = cpu.xmm[id_src1->reg]; - } else { - assert(0); - rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 0, 4, MMU_DYNAMIC); - cpu.xmm[id_dest->reg]._32[0] = *s0; - rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 4, 4, MMU_DYNAMIC); - cpu.xmm[id_dest->reg]._32[1] = *s0; - rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 8, 4, MMU_DYNAMIC); - cpu.xmm[id_dest->reg]._32[2] = *s0; - rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 12, 4, MMU_DYNAMIC); - cpu.xmm[id_dest->reg]._32[3] = *s0; - } -} - -def_EHelper(psrlq) { - rtl_decode_unary(s, false); - assert(id_dest->type == OP_TYPE_REG); - cpu.xmm[id_dest->reg]._128 >>= id_src1->imm; -} - -def_EHelper(movd_xmm2E) { - rtl_decode_binary(s, false, false); - rtl_li(s, s0, cpu.xmm[id_src1->reg]._32[0]); - rtl_wb(s, s0); -} - -def_EHelper(pxor) { - rtl_decode_binary(s, false, false); - union { - __uint128_t _128; - uint32_t _32[4]; - } src; - if (id_src1->type == OP_TYPE_REG) { - assert(0); - src._128 = cpu.xmm[id_src1->reg]._128; - } else { - rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 0, 4, MMU_DYNAMIC); - src._32[0] = *s0; - rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 4, 4, MMU_DYNAMIC); - src._32[1] = *s0; - rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 8, 4, MMU_DYNAMIC); - src._32[2] = *s0; - rtl_lm(s, s0, &s->isa.mbr, s->isa.moff + 12, 4, MMU_DYNAMIC); - src._32[3] = *s0; - } - cpu.xmm[id_dest->reg]._128 ^= src._128; -} diff --git a/libraries/NEMU/src/isa/x86/kvm/kvm.c b/libraries/NEMU/src/isa/x86/kvm/kvm.c deleted file mode 100644 index 5c42170..0000000 --- a/libraries/NEMU/src/isa/x86/kvm/kvm.c +++ /dev/null @@ -1,224 +0,0 @@ -#if 0 -//#include -#include -#include -#include - -#include -#include -#include -#include -#include - -uint32_t pio_read(ioaddr_t addr, int len); -void pio_write(ioaddr_t addr, int len, uint32_t data); - -/* CR0 bits */ -#define CR0_PE 1u - -struct vm { - int sys_fd; - int fd; - char *mem; -}; - -void vm_init(struct vm *vm, size_t mem_size) { - int api_ver; - struct kvm_userspace_memory_region memreg; - - vm->sys_fd = open("/dev/kvm", O_RDWR); - if (vm->sys_fd < 0) { - perror("open /dev/kvm"); - assert(0); - } - - api_ver = ioctl(vm->sys_fd, KVM_GET_API_VERSION, 0); - if (api_ver < 0) { - perror("KVM_GET_API_VERSION"); - assert(0); - } - - if (api_ver != KVM_API_VERSION) { - fprintf(stderr, "Got KVM api version %d, expected %d\n", - api_ver, KVM_API_VERSION); - assert(0); - } - - vm->fd = ioctl(vm->sys_fd, KVM_CREATE_VM, 0); - if (vm->fd < 0) { - perror("KVM_CREATE_VM"); - assert(0); - } - - if (ioctl(vm->fd, KVM_SET_TSS_ADDR, 0xfffbd000) < 0) { - perror("KVM_SET_TSS_ADDR"); - assert(0); - } - - vm->mem = mmap(NULL, mem_size, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0); - if (vm->mem == MAP_FAILED) { - perror("mmap mem"); - assert(0); - } - - madvise(vm->mem, mem_size, MADV_MERGEABLE); - - memreg.slot = 0; - memreg.flags = 0; - memreg.guest_phys_addr = 0; - memreg.memory_size = mem_size; - memreg.userspace_addr = (unsigned long)vm->mem; - if (ioctl(vm->fd, KVM_SET_USER_MEMORY_REGION, &memreg) < 0) { - perror("KVM_SET_USER_MEMORY_REGION"); - assert(0); - } -} - -struct vcpu { - int fd; - struct kvm_run *kvm_run; -}; - -void vcpu_init(struct vm *vm, struct vcpu *vcpu) { - int vcpu_mmap_size; - - vcpu->fd = ioctl(vm->fd, KVM_CREATE_VCPU, 0); - if (vcpu->fd < 0) { - perror("KVM_CREATE_VCPU"); - assert(0); - } - - vcpu_mmap_size = ioctl(vm->sys_fd, KVM_GET_VCPU_MMAP_SIZE, 0); - if (vcpu_mmap_size <= 0) { - perror("KVM_GET_VCPU_MMAP_SIZE"); - assert(0); - } - - vcpu->kvm_run = mmap(NULL, vcpu_mmap_size, PROT_READ | PROT_WRITE, - MAP_SHARED, vcpu->fd, 0); - if (vcpu->kvm_run == MAP_FAILED) { - perror("mmap kvm_run"); - assert(0); - } -} - -int run_vm(struct vm *vm, struct vcpu *vcpu, size_t sz) { - struct kvm_regs regs; - - for (;;) { - if (ioctl(vcpu->fd, KVM_RUN, 0) < 0) { - if (errno == EINTR) continue; - perror("KVM_RUN"); - assert(0); - } - - switch (vcpu->kvm_run->exit_reason) { - case KVM_EXIT_HLT: { - struct kvm_interrupt intr = { .irq = 48 }; - int ret = ioctl(vcpu->fd, KVM_INTERRUPT, &intr); - assert(ret == 0); - continue; - } - - case KVM_EXIT_IO: { - struct kvm_run *p = vcpu->kvm_run; - uint8_t *p_data = (uint8_t *)p + p->io.data_offset; - if (p->io.direction == KVM_EXIT_IO_OUT) { - pio_write(p->io.port, p->io.size, *(uint32_t *)p_data); - } - else { - // FIXME - *(uint32_t *)p_data = pio_read(p->io.port, p->io.size); - } - continue; - } - - case KVM_EXIT_MMIO: { - struct kvm_run *p = vcpu->kvm_run; - if (p->mmio.is_write) { - uint64_t data = *(uint64_t *)p->mmio.data; - paddr_write(p->mmio.phys_addr, p->mmio.len, data); - } else { - uint64_t data = paddr_read(p->mmio.phys_addr, p->mmio.len); - memcpy(p->mmio.data, &data, p->mmio.len); - } - continue; - } - - /* fall through */ - default: - if (ioctl(vcpu->fd, KVM_GET_REGS, ®s) < 0) { - perror("KVM_GET_REGS"); - assert(0); - } - fprintf(stderr, "Got exit_reason %d at pc = 0x%llx," - " expected KVM_EXIT_HLT (%d)\n", - vcpu->kvm_run->exit_reason, regs.rip, KVM_EXIT_HLT); - assert(0); - } - } -} - -static void setup_protected_mode(struct kvm_sregs *sregs) { - struct kvm_segment seg = { - .base = 0, - .limit = 0xffffffff, - .selector = 1 << 3, - .present = 1, - .type = 11, /* Code: execute, read, accessed */ - .dpl = 0, - .db = 1, - .s = 1, /* Code/data */ - .l = 0, - .g = 1, /* 4KB granularity */ - }; - - sregs->cr0 |= CR0_PE; /* enter protected mode */ - - sregs->cs = seg; - - seg.type = 3; /* Data: read/write, accessed */ - seg.selector = 2 << 3; - sregs->ds = sregs->es = sregs->fs = sregs->gs = sregs->ss = seg; -} - -int run_protected_mode(struct vm *vm, struct vcpu *vcpu) { - struct kvm_sregs sregs; - struct kvm_regs regs; - - if (ioctl(vcpu->fd, KVM_GET_SREGS, &sregs) < 0) { - perror("KVM_GET_SREGS"); - assert(0); - } - - setup_protected_mode(&sregs); - - if (ioctl(vcpu->fd, KVM_SET_SREGS, &sregs) < 0) { - perror("KVM_SET_SREGS"); - assert(0); - } - - memset(®s, 0, sizeof(regs)); - /* Clear all FLAGS bits, except bit 1 which is always set. */ - regs.rflags = 2; - regs.rip = RESET_VECTOR; - - if (ioctl(vcpu->fd, KVM_SET_REGS, ®s) < 0) { - perror("KVM_SET_REGS"); - assert(0); - } - - memcpy(vm->mem, guest_to_host(CONFIG_MBASE), CONFIG_MSIZE); - return run_vm(vm, vcpu, 4); -} - -void kvm_exec() { - struct vm vm; - struct vcpu vcpu; - vm_init(&vm, CONFIG_MSIZE); - vcpu_init(&vm, &vcpu); - - run_protected_mode(&vm, &vcpu); -} -#endif diff --git a/libraries/NEMU/src/isa/x86/local-include/intr.h b/libraries/NEMU/src/isa/x86/local-include/intr.h deleted file mode 100644 index 6617f3d..0000000 --- a/libraries/NEMU/src/isa/x86/local-include/intr.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef __X86_INTR_H__ -#define __X86_INTR_H__ - -#include - -#ifdef CONFIG_PA -#define IRQ_TIMER 32 -#else -#define IRQ_TIMER 48 -#endif - -word_t raise_intr(word_t NO, vaddr_t ret_addr); -#ifndef CONFIG_PA -#define return_on_mem_ex() do { if (cpu.mem_exception != 0) return; } while (0) -#else -#define return_on_mem_ex() -#endif - -#endif diff --git a/libraries/NEMU/src/isa/x86/local-include/reg.h b/libraries/NEMU/src/isa/x86/local-include/reg.h deleted file mode 100644 index 104113f..0000000 --- a/libraries/NEMU/src/isa/x86/local-include/reg.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef __X86_REG_H__ -#define __X86_REG_H__ - -#include - -enum { PRIV_IRET }; - -static inline int check_reg_index(int index) { - IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 8)); - return index; -} - -#define reg_l(index) (cpu.gpr[check_reg_index(index)]._32) -#define reg_w(index) (cpu.gpr[check_reg_index(index)]._16) -#define reg_b(index) (cpu.gpr[check_reg_index(index) & 0x3]._8[index >> 2]) - -static inline const char* reg_name(int index, int width) { - extern const char* regsl[]; - extern const char* regsw[]; - extern const char* regsb[]; - IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < 8)); - - switch (width) { - case 4: return regsl[index]; - case 1: return regsb[index]; - case 2: return regsw[index]; - default: assert(0); - } -} - -static inline const char* sreg_name(int index) { - const char *name[] = { "es", "cs", "ss", "ds", "fs", "gs" }; - IFDEF(CONFIG_RT_CHECK, assert(index >= 0 && index < ARRLEN(name))); - return name[index]; -} - -#endif diff --git a/libraries/NEMU/src/isa/x86/local-include/rtl.h b/libraries/NEMU/src/isa/x86/local-include/rtl.h deleted file mode 100644 index d79b3fc..0000000 --- a/libraries/NEMU/src/isa/x86/local-include/rtl.h +++ /dev/null @@ -1,193 +0,0 @@ -#ifndef __X86_RTL_H__ -#define __X86_RTL_H__ - -#include -#include "reg.h" -#include "intr.h" - -/* RTL pseudo instructions */ - -static inline def_rtl(lr, rtlreg_t* dest, int r, int width) { - switch (width) { - case 4: rtl_mv(s, dest, ®_l(r)); return; - case 1: rtl_host_lm(s, dest, ®_b(r), 1); return; - case 2: rtl_host_lm(s, dest, ®_w(r), 2); return; - IFDEF(CONFIG_RT_CHECK, default: assert(0)); - } -} - -static inline def_rtl(sr, int r, const rtlreg_t* src1, int width) { - switch (width) { - case 4: rtl_mv(s, ®_l(r), src1); return; - case 1: rtl_host_sm(s, ®_b(r), src1, 1); return; - case 2: rtl_host_sm(s, ®_w(r), src1, 2); return; - IFDEF(CONFIG_RT_CHECK, default: assert(0)); - } -} - -#ifndef __ICS_EXPORT -static inline def_rtl(push, const rtlreg_t* src1) { - // esp <- esp - 4 - // M[esp] <- src1 - rtl_sm(s, src1, &cpu.esp, -4, 4, MMU_DYNAMIC); - rtl_subi(s, &cpu.esp, &cpu.esp, 4); -} - -static inline def_rtl(pop, rtlreg_t* dest) { - // dest <- M[esp] - // esp <- esp + 4 - rtl_lm(s, dest, &cpu.esp, 0, 4, MMU_DYNAMIC); - rtl_addi(s, &cpu.esp, &cpu.esp, 4); -} - -static inline def_rtl(is_sub_overflow, rtlreg_t* dest, - const rtlreg_t* res, const rtlreg_t* src1, const rtlreg_t* src2, int width) { - // dest <- is_overflow(src1 - src2) - rtl_xor(s, t0, src1, src2); - rtl_xor(s, dest, src1, res); - rtl_and(s, dest, t0, dest); - rtl_msb(s, dest, dest, width); -} - -static inline def_rtl(is_sub_carry, rtlreg_t* dest, - const rtlreg_t* src1, const rtlreg_t* src2) { - // dest <- is_carry(src1 - src2) - rtl_setrelop(s, RELOP_LTU, dest, src1, src2); -} - -static inline def_rtl(is_add_overflow, rtlreg_t* dest, - const rtlreg_t* res, const rtlreg_t* src1, const rtlreg_t* src2, int width) { - // dest <- is_overflow(src1 + src2) - rtl_is_sub_overflow(s, dest, src1, res, src2, width); -} - -static inline def_rtl(is_add_carry, rtlreg_t* dest, - const rtlreg_t* res, const rtlreg_t* src1) { - // dest <- is_carry(src1 + src2) - rtl_is_sub_carry(s, dest, res, src1); -} - -#else -static inline def_rtl(push, const rtlreg_t* src1) { - // esp <- esp - 4 - // M[esp] <- src1 - TODO(); -} - -static inline def_rtl(pop, rtlreg_t* dest) { - // dest <- M[esp] - // esp <- esp + 4 - TODO(); -} - -static inline def_rtl(is_sub_overflow, rtlreg_t* dest, - const rtlreg_t* res, const rtlreg_t* src1, const rtlreg_t* src2, int width) { - // dest <- is_overflow(src1 - src2) - TODO(); -} - -static inline def_rtl(is_sub_carry, rtlreg_t* dest, - const rtlreg_t* src1, const rtlreg_t* src2) { - // dest <- is_carry(src1 - src2) - TODO(); -} - -static inline def_rtl(is_add_overflow, rtlreg_t* dest, - const rtlreg_t* res, const rtlreg_t* src1, const rtlreg_t* src2, int width) { - // dest <- is_overflow(src1 + src2) - TODO(); -} - -static inline def_rtl(is_add_carry, rtlreg_t* dest, - const rtlreg_t* res, const rtlreg_t* src1) { - // dest <- is_carry(src1 + src2) - TODO(); -} -#endif - -#ifndef __ICS_EXPORT -#define def_rtl_setget_eflags(f) \ - static inline def_rtl(concat(set_, f), const rtlreg_t* src) { \ - rtl_mv(s, &cpu.f, src); \ - } \ - static inline def_rtl(concat(get_, f), rtlreg_t* dest) { \ - rtl_mv(s, dest, &cpu.f); \ - } - -def_rtl_setget_eflags(CF) -def_rtl_setget_eflags(OF) -def_rtl_setget_eflags(ZF) -def_rtl_setget_eflags(SF) -def_rtl_setget_eflags(DF) -def_rtl_setget_eflags(IF) -def_rtl_setget_eflags(PF) - -static inline def_rtl(update_ZF, const rtlreg_t* result, int width) { - // eflags.ZF <- is_zero(result[width * 8 - 1 .. 0]) - if (width != 4) { - rtl_andi(s, t0, result, 0xffffffffu >> ((4 - width) * 8)); - rtl_setrelopi(s, RELOP_EQ, t0, t0, 0); - } - else { - rtl_setrelopi(s, RELOP_EQ, t0, result, 0); - } - rtl_set_ZF(s, t0); -} - -static inline def_rtl(update_SF, const rtlreg_t* result, int width) { - // eflags.SF <- is_sign(result[width * 8 - 1 .. 0]) - rtl_msb(s, t0, result, width); - rtl_set_SF(s, t0); -} - -static inline def_rtl(update_PF, const rtlreg_t* result) { - // eflags.PF <- is_parity(result[7 .. 0]) - // HACK: `s2` is rarely used, so we use it here - rtl_shri(s, t0, result, 4); - rtl_xor(s, t0, t0, result); - rtl_shri(s, s2, t0, 2); - rtl_xor(s, t0, t0, s2); - rtl_shri(s, s2, t0, 1); - rtl_xor(s, t0, t0, s2); - rtl_not(s, t0, t0); - rtl_andi(s, t0, t0, 1); - rtl_set_PF(s, t0); -} - -static inline def_rtl(update_ZFSF, const rtlreg_t* result, int width) { - rtl_update_ZF(s, result, width); - rtl_update_SF(s, result, width); -#ifndef CONFIG_PA - rtl_update_PF(s, result); -#endif -} -#else -#define def_rtl_setget_eflags(f) \ - static inline def_rtl(concat(set_, f), const rtlreg_t* src) { \ - TODO(); \ - } \ - static inline def_rtl(concat(get_, f), rtlreg_t* dest) { \ - TODO(); \ - } - -def_rtl_setget_eflags(CF) -def_rtl_setget_eflags(OF) -def_rtl_setget_eflags(ZF) -def_rtl_setget_eflags(SF) - -static inline def_rtl(update_ZF, const rtlreg_t* result, int width) { - // eflags.ZF <- is_zero(result[width * 8 - 1 .. 0]) - TODO(); -} - -static inline def_rtl(update_SF, const rtlreg_t* result, int width) { - // eflags.SF <- is_sign(result[width * 8 - 1 .. 0]) - TODO(); -} - -static inline def_rtl(update_ZFSF, const rtlreg_t* result, int width) { - rtl_update_ZF(s, result, width); - rtl_update_SF(s, result, width); -} -#endif -#endif diff --git a/libraries/NEMU/src/isa/x86/logo.c b/libraries/NEMU/src/isa/x86/logo.c deleted file mode 100644 index 764675a..0000000 --- a/libraries/NEMU/src/isa/x86/logo.c +++ /dev/null @@ -1,43 +0,0 @@ -// refer to http://www.patorjk.com/software/taag/#p=display&f=Big&t=Type%20Something%20 - -/* - _ ____ ___ __ __ __ _ - (_)___ \ / _ \ / / | \/ | | | - _ __) | (_) |/ /_ | \ / | __ _ _ __ _ _ __ _| | - | ||__ < > _ <| '_ \ | |\/| |/ _` | '_ \| | | |/ _` | | - | |___) | (_) | (_) | | | | | (_| | | | | |_| | (_| | | - |_|____/ \___/ \___/ |_| |_|\__,_|_| |_|\__,_|\__,_|_| - -*/ - -unsigned char isa_logo[] = { - 0x20, 0x5f, 0x20, 0x5f, 0x5f, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x5f, 0x5f, - 0x5f, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x5f, - 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x0a, 0x28, 0x5f, 0x29, - 0x5f, 0x5f, 0x5f, 0x20, 0x5c, 0x20, 0x2f, 0x20, 0x5f, 0x20, 0x5c, 0x20, - 0x20, 0x2f, 0x20, 0x2f, 0x20, 0x20, 0x20, 0x7c, 0x20, 0x20, 0x5c, 0x2f, - 0x20, 0x20, 0x7c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x0a, 0x20, 0x5f, 0x20, 0x20, 0x5f, 0x5f, - 0x29, 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x29, 0x20, 0x7c, 0x2f, 0x20, 0x2f, - 0x5f, 0x20, 0x20, 0x20, 0x7c, 0x20, 0x5c, 0x20, 0x20, 0x2f, 0x20, 0x7c, - 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x20, 0x5f, 0x20, 0x5f, 0x5f, 0x20, 0x20, - 0x5f, 0x20, 0x20, 0x20, 0x5f, 0x20, 0x20, 0x5f, 0x5f, 0x20, 0x5f, 0x7c, - 0x20, 0x7c, 0x0a, 0x7c, 0x20, 0x7c, 0x7c, 0x5f, 0x5f, 0x20, 0x3c, 0x20, - 0x3e, 0x20, 0x5f, 0x20, 0x3c, 0x7c, 0x20, 0x27, 0x5f, 0x20, 0x5c, 0x20, - 0x20, 0x7c, 0x20, 0x7c, 0x5c, 0x2f, 0x7c, 0x20, 0x7c, 0x2f, 0x20, 0x5f, - 0x60, 0x20, 0x7c, 0x20, 0x27, 0x5f, 0x20, 0x5c, 0x7c, 0x20, 0x7c, 0x20, - 0x7c, 0x20, 0x7c, 0x2f, 0x20, 0x5f, 0x60, 0x20, 0x7c, 0x20, 0x7c, 0x0a, - 0x7c, 0x20, 0x7c, 0x5f, 0x5f, 0x5f, 0x29, 0x20, 0x7c, 0x20, 0x28, 0x5f, - 0x29, 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x29, 0x20, 0x7c, 0x20, 0x7c, 0x20, - 0x7c, 0x20, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x28, 0x5f, 0x7c, 0x20, 0x7c, - 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x7c, - 0x20, 0x28, 0x5f, 0x7c, 0x20, 0x7c, 0x20, 0x7c, 0x0a, 0x7c, 0x5f, 0x7c, - 0x5f, 0x5f, 0x5f, 0x5f, 0x2f, 0x20, 0x5c, 0x5f, 0x5f, 0x5f, 0x2f, 0x20, - 0x5c, 0x5f, 0x5f, 0x5f, 0x2f, 0x20, 0x20, 0x7c, 0x5f, 0x7c, 0x20, 0x20, - 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x20, - 0x7c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, 0x2c, 0x5f, 0x7c, 0x5c, 0x5f, 0x5f, - 0x2c, 0x5f, 0x7c, 0x5f, 0x7c, 0x0a, 0x00 -}; diff --git a/libraries/NEMU/src/isa/x86/reg.c b/libraries/NEMU/src/isa/x86/reg.c deleted file mode 100644 index b436f4e..0000000 --- a/libraries/NEMU/src/isa/x86/reg.c +++ /dev/null @@ -1,85 +0,0 @@ -#include -#include -#include -#include "local-include/reg.h" - -const char *regsl[] = {"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"}; -const char *regsw[] = {"ax", "cx", "dx", "bx", "sp", "bp", "si", "di"}; -const char *regsb[] = {"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh"}; - -void reg_test() { - srand(time(0)); - word_t sample[8]; - word_t pc_sample = rand(); - cpu.pc = pc_sample; - - int i; - for (i = R_EAX; i <= R_EDI; i ++) { - sample[i] = rand(); - reg_l(i) = sample[i]; - assert(reg_w(i) == (sample[i] & 0xffff)); - } - - assert(reg_b(R_AL) == (sample[R_EAX] & 0xff)); - assert(reg_b(R_AH) == ((sample[R_EAX] >> 8) & 0xff)); - assert(reg_b(R_BL) == (sample[R_EBX] & 0xff)); - assert(reg_b(R_BH) == ((sample[R_EBX] >> 8) & 0xff)); - assert(reg_b(R_CL) == (sample[R_ECX] & 0xff)); - assert(reg_b(R_CH) == ((sample[R_ECX] >> 8) & 0xff)); - assert(reg_b(R_DL) == (sample[R_EDX] & 0xff)); - assert(reg_b(R_DH) == ((sample[R_EDX] >> 8) & 0xff)); - - assert(sample[R_EAX] == cpu.eax); - assert(sample[R_ECX] == cpu.ecx); - assert(sample[R_EDX] == cpu.edx); - assert(sample[R_EBX] == cpu.ebx); - assert(sample[R_ESP] == cpu.esp); - assert(sample[R_EBP] == cpu.ebp); - assert(sample[R_ESI] == cpu.esi); - assert(sample[R_EDI] == cpu.edi); - - assert(pc_sample == cpu.pc); -} - -#ifndef __ICS_EXPORT -#include - -void isa_reg_display() { - int i; - for (i = 0; i < 8; i ++) { - printf("%s: 0x%08x\n", regsl[i], cpu.gpr[i]._32); - } - printf("fpu st top: %d\n", cpu.ftop); - for (i = 0; i< 8; i ++) { - union { - uint64_t i; - double f; - } u; - u.i = cpu.fpr[i]; - printf("fpr[%d]: 0x%016lx %lf\n", i, u.i, u.f); - } - printf("pc: 0x%08x\n", cpu.pc); -} - -word_t isa_reg_str2val(const char *s, bool *success) { - int i; - *success = true; - for (i = 0; i < 8; i ++) { - if (strcmp(regsl[i], s) == 0) return reg_l(i); - if (strcmp(regsw[i], s) == 0) return reg_w(i); - if(strcmp(regsb[i], s) == 0) return reg_b(i); - } - - if (strcmp("pc", s) == 0) return cpu.pc; - - *success = false; - return 0; -} -#else -void isa_reg_display() { -} - -word_t isa_reg_str2val(const char *s, bool *success) { - return 0; -} -#endif diff --git a/libraries/NEMU/src/isa/x86/system/intr.c b/libraries/NEMU/src/isa/x86/system/intr.c deleted file mode 100644 index 9ba4f23..0000000 --- a/libraries/NEMU/src/isa/x86/system/intr.c +++ /dev/null @@ -1,101 +0,0 @@ -#include "../local-include/rtl.h" -#include "../local-include/intr.h" - -#if !defined(__ICS_EXPORT) && defined(CONFIG_ENGINE_INTERPRETER) -#include - -typedef union GateDescriptor { - struct { - uint32_t offset_15_0 : 16; - uint32_t selector : 16; - uint32_t dont_care1 : 15; - uint32_t present : 1; - uint32_t offset_31_16 : 16; - }; - uint32_t val[2]; -} GateDesc; - -uint32_t compute_eflags(); - -word_t raise_intr(uint32_t NO, vaddr_t ret_addr) { - assert(NO < 256); - int old_cs = cpu.sreg[CSR_CS].val; - // fetch the gate descriptor with ring 0 - cpu.sreg[CSR_CS].rpl = 0; - cpu.mem_exception = 0; - - GateDesc gate; - gate.val[0] = vaddr_read(NULL, cpu.idtr.base + NO * 8 + 0, 4, MMU_DYNAMIC); - gate.val[1] = vaddr_read(NULL, cpu.idtr.base + NO * 8 + 4, 4, MMU_DYNAMIC); - assert(gate.present); // check the present bit - - uint16_t new_cs = gate.selector; - uint32_t new_pc = (gate.offset_31_16 << 16) | gate.offset_15_0; - - if ((new_cs & 0x3) < (old_cs & 0x3)) { - // stack switch - assert(cpu.sreg[CSR_TR].ti == 0); // check the table bit - assert((old_cs & 0x3) == 3); // only support switching from ring 3 - assert((new_cs & 0x3) == 0); // only support switching to ring 0 - - uint32_t esp3 = cpu.esp; - uint32_t ss3 = cpu.sreg[CSR_SS].val; - cpu.esp = vaddr_read(NULL, cpu.sreg[CSR_TR].base + 4, 4, MMU_DYNAMIC); - cpu.sreg[CSR_SS].val = vaddr_read(NULL, cpu.sreg[CSR_TR].base + 8, 2, MMU_DYNAMIC); - - vaddr_write(NULL, cpu.esp - 4, 4, ss3, MMU_DYNAMIC); - vaddr_write(NULL, cpu.esp - 8, 4, esp3, MMU_DYNAMIC); - cpu.esp -= 8; - } - - vaddr_write(NULL, cpu.esp - 4, 4, compute_eflags(), MMU_DYNAMIC); - __attribute__((unused)) word_t eflags_esp = cpu.esp - 4; - vaddr_write(NULL, cpu.esp - 8, 4, old_cs, MMU_DYNAMIC); - vaddr_write(NULL, cpu.esp - 12, 4, ret_addr, MMU_DYNAMIC); - cpu.esp -= 12; - - if (ISNDEF(CONFIG_PA) && NO == 14) { - // page fault has error code - vaddr_write(NULL, cpu.esp - 4, 4, cpu.error_code, MMU_DYNAMIC); - cpu.esp -= 4; - } - - cpu.IF = 0; - cpu.sreg[CSR_CS].val = new_cs; - -#if defined(CONFIG_DIFFTEST_REF_KVM) - if (ref_difftest_raise_intr) ref_difftest_raise_intr(NO); -#elif !defined(CONFIG_DIFFTEST_REF_NEMU) - difftest_skip_dut(1, 2); - void difftest_fix_eflags(void *arg); - difftest_set_patch(difftest_fix_eflags, (void *)(uintptr_t)eflags_esp); -#endif - - return new_pc; -} - -word_t isa_query_intr() { - if (cpu.INTR && cpu.IF) { - cpu.INTR = false; - return IRQ_TIMER; - } - return INTR_EMPTY; -} -#else -word_t raise_intr(uint32_t NO, vaddr_t ret_addr) { - /* TODO: Trigger an interrupt/exception with ``NO''. - * That is, use ``NO'' to index the IDT. - */ - -#if !defined(CONFIG_ENGINE_INTERPRETER) - panic("not support in non-interpreter mode"); -#endif - return 0; -} - -void query_intr() { -#if !defined(CONFIG_ENGINE_INTERPRETER) - panic("not support in non-interpreter mode"); -#endif -} -#endif diff --git a/libraries/NEMU/src/isa/x86/system/mmu.c b/libraries/NEMU/src/isa/x86/system/mmu.c deleted file mode 100644 index 0161366..0000000 --- a/libraries/NEMU/src/isa/x86/system/mmu.c +++ /dev/null @@ -1,114 +0,0 @@ -#include -#include -#include -#ifndef __ICS_EXPORT -#include "../local-include/reg.h" -#include - -typedef union PageTableEntry { - struct { - uint32_t p : 1; - uint32_t w : 1; - uint32_t u : 1; - uint32_t pwt : 1; - uint32_t pcd : 1; - uint32_t a : 1; - uint32_t d : 1; - uint32_t pat : 1; - uint32_t g : 1; - uint32_t pad : 3; - uint32_t ppn :20; - }; - uint32_t val; -} PTE; - -#define PGSHFT 12 -#define PGMASK ((1u << PGSHFT) - 1) -#define PGBASE(pn) (pn << PGSHFT) - -#define PTW_LEVEL 2 -#define PTE_SIZE 4 -#define VPNMASK 0x3ff - -static inline word_t VPNiSHFT(int i) { - return PGSHFT + 10 * i; -} - -static inline word_t VPNi(vaddr_t va, int i) { - return (va >> VPNiSHFT(i)) & VPNMASK; -} - -#ifdef CONFIG_PA -static inline bool check_permission(PTE *pte, bool ok, vaddr_t vaddr, int type) { - Assert(pte->p, "vaddr = %x, cpu.pc = %x", vaddr, cpu.pc); - return true; -} -#else -static inline bool check_permission(PTE *pte, bool ok, vaddr_t vaddr, int type) { - int is_user = cpu.sreg[CSR_CS].rpl == MODE_R3; - int is_write = (type == MEM_TYPE_WRITE) || (type == MEM_TYPE_READ && cpu.lock); - ok = ok && pte->p; - ok = ok && !(is_user && !pte->u); - ok = ok && !(is_write && !pte->w); // assume that CR0.WP is always enabled - if (!ok && cpu.mem_exception == 0) { - cpu.cr2 = vaddr; - cpu.mem_exception = 14; - cpu.lock = 0; - cpu.error_code = pte->p | (is_write << 1) | (is_user << 2); - } - return ok; -} -#endif - -static inline paddr_t ptw(vaddr_t vaddr, int type) { - word_t pg_base = PGBASE(cpu.cr3.ppn); - word_t p_pte[PTW_LEVEL]; // pte pointer - PTE pte[PTW_LEVEL]; - int level; - - for (level = PTW_LEVEL - 1; level >= 0; level --) { - p_pte[level] = pg_base + VPNi(vaddr, level) * PTE_SIZE; - pte[level].val = paddr_read(p_pte[level], PTE_SIZE); - pg_base = PGBASE(pte[level].ppn); - if (!pte[level].p) goto bad; - } - - level ++; - assert(level == 0); - if (!check_permission(&pte[0], true, vaddr, type)) return MEM_RET_FAIL; - -#if !defined(CONFIG_PA) || defined(CONFIG_DIFFTEST) - if (!pte[1].a) { - pte[1].a = 1; - paddr_write(p_pte[1], PTE_SIZE, pte[1].val); - IFDEF(CONFIG_DIFFTEST, - ref_difftest_memcpy(p_pte[1], &pte[1].val, PTE_SIZE, DIFFTEST_TO_REF)); - } - bool is_write = (type == MEM_TYPE_WRITE); - if (!pte[0].a || (!pte[0].d && is_write)) { - pte[0].a = 1; - pte[0].d |= is_write; - paddr_write(p_pte[0], PTE_SIZE, pte[0].val); - IFDEF(CONFIG_DIFFTEST, - ref_difftest_memcpy(p_pte[0], &pte[0].val, PTE_SIZE, DIFFTEST_TO_REF)); - } -#endif - - return pg_base | MEM_RET_OK; - -bad: - check_permission(&pte[level], false, vaddr, type); - return MEM_RET_FAIL; -} - -paddr_t isa_mmu_translate(vaddr_t vaddr, int len, int type) { - bool is_cross_page = ((vaddr & PAGE_MASK) + len) > PAGE_SIZE; - if (is_cross_page) return MEM_RET_CROSS_PAGE; - return ptw(vaddr, type); -} -#else - -paddr_t isa_mmu_translate(vaddr_t vaddr, int len, int type) { - return MEM_RET_FAIL; -} -#endif diff --git a/libraries/NEMU/src/isa/x86/system/priv.c b/libraries/NEMU/src/isa/x86/system/priv.c deleted file mode 100644 index f5fcb95..0000000 --- a/libraries/NEMU/src/isa/x86/system/priv.c +++ /dev/null @@ -1,117 +0,0 @@ -#include "../local-include/rtl.h" -#include "../local-include/intr.h" -#include - -#if defined(CONFIG_ENGINE_INTERPRETER) - -void set_eflags(uint32_t val); - -static void load_sreg(int idx, uint16_t val) { - cpu.sreg[idx].val = val; - - if (val == 0) return; - -#ifdef CONFIG_MODE_USER - assert(cpu.sreg[idx].ti == 0); // check the table bit - extern uint32_t GDT[]; - cpu.sreg[idx].base = GDT[cpu.sreg[idx].idx]; -#else - uint16_t old_cpl = cpu.sreg[CSR_CS].val; - cpu.sreg[CSR_CS].rpl = 0; // use ring 0 to index GDT - - assert(cpu.sreg[idx].ti == 0); // check the table bit - uint32_t desc_base = cpu.gdtr.base + (cpu.sreg[idx].idx << 3); - uint32_t desc_lo = vaddr_read(NULL, desc_base + 0, 4, MMU_DYNAMIC); - uint32_t desc_hi = vaddr_read(NULL, desc_base + 4, 4, MMU_DYNAMIC); - assert((desc_hi >> 15) & 0x1); // check the present bit - - cpu.sreg[CSR_CS].rpl = old_cpl; // restore CPL - - uint32_t base = (desc_hi & 0xff000000) | ((desc_hi & 0xff) << 16) | (desc_lo >> 16); - cpu.sreg[idx].base = base; -#endif -} - -static inline void csrrw(rtlreg_t *dest, const rtlreg_t *src, uint32_t csrid) { - if (dest != NULL) { - switch (csrid) { -#ifndef CONFIG_MODE_USER - case 0 ... CSR_LDTR: *dest = cpu.sreg[csrid].val; break; - case CSR_CR0 ... CSR_CR4: *dest = cpu.cr[csrid - CSR_CR0]; break; -#endif - default: panic("Reading from CSR = %d is not supported", csrid); - } - } - if (src != NULL) { - switch (csrid) { -#ifndef CONFIG_MODE_USER - case CSR_IDTR: - cpu.idtr.limit = vaddr_read(NULL, *src, 2, MMU_DYNAMIC); - cpu.idtr.base = vaddr_read(NULL, *src + 2, 4, MMU_DYNAMIC); - break; - case CSR_GDTR: - cpu.gdtr.limit = vaddr_read(NULL, *src, 2, MMU_DYNAMIC); - cpu.gdtr.base = vaddr_read(NULL, *src + 2, 4, MMU_DYNAMIC); - break; - case CSR_CR0 ... CSR_CR4: cpu.cr[csrid - CSR_CR0] = *src; break; -#endif - case 0 ... CSR_LDTR: load_sreg(csrid, *src); break; - default: panic("Writing to CSR = %d is not supported", csrid); - } - if (csrid == CSR_CR3) mmu_tlb_flush(0); - } -} - -#ifndef CONFIG_MODE_USER -static inline word_t iret() { - int old_cpl = cpu.sreg[CSR_CS].rpl; - uint32_t new_pc = vaddr_read(NULL, cpu.esp + 0, 4, MMU_DYNAMIC); - uint32_t new_cs = vaddr_read(NULL, cpu.esp + 4, 4, MMU_DYNAMIC); - uint32_t eflags = vaddr_read(NULL, cpu.esp + 8, 4, MMU_DYNAMIC); - cpu.esp += 12; - set_eflags(eflags); - int new_cpl = new_cs & 0x3; - if (new_cpl > old_cpl) { - // return to user - uint32_t esp3 = vaddr_read(NULL, cpu.esp + 0, 4, MMU_DYNAMIC); - uint32_t ss3 = vaddr_read(NULL, cpu.esp + 4, 4, MMU_DYNAMIC); - cpu.esp = esp3; - cpu.sreg[CSR_SS].val = ss3; - } - cpu.sreg[CSR_CS].val = new_cs; - - set_sys_state_flag(SYS_STATE_FLUSH_TCACHE); - return new_pc; -} - -static inline word_t priv_instr(uint32_t op, const rtlreg_t *src) { - switch (op) { - case PRIV_IRET: return iret(); - default: panic("Unsupported privilige operation = %d", op); - } -} -#endif - -void isa_hostcall(uint32_t id, rtlreg_t *dest, const rtlreg_t *src1, - const rtlreg_t *src2, word_t imm) { - word_t ret = 0; - switch (id) { - case HOSTCALL_CSR: csrrw(dest, src1, imm); return; -#ifdef CONFIG_MODE_USER - case HOSTCALL_TRAP: - Assert(imm == 0x80, "Unsupport exception = %d", imm); - uintptr_t host_syscall(uintptr_t id, uintptr_t arg1, uintptr_t arg2, - uintptr_t arg3, uintptr_t arg4, uintptr_t arg5, uintptr_t arg6); - cpu.eax = host_syscall(cpu.eax, cpu.ebx, cpu.ecx, cpu.edx, cpu.esi, cpu.edi, cpu.ebp); - ret = *src1; - break; -#else - case HOSTCALL_TRAP: ret = raise_intr(imm, *src1); break; - case HOSTCALL_PRIV: ret = priv_instr(imm, src1); break; -#endif - default: panic("Unsupported hostcall ID = %d", id); - } - if (dest) *dest = ret; -} - -#endif diff --git a/libraries/NEMU/src/memory/Kconfig b/libraries/NEMU/src/memory/Kconfig deleted file mode 100644 index d379d09..0000000 --- a/libraries/NEMU/src/memory/Kconfig +++ /dev/null @@ -1,35 +0,0 @@ -menu "Memory Configuration" - -config MBASE - hex "Memory base address" - default 0x08048000 if MODE_USER - default 0x80000000 - -config MSIZE - hex "Memory size" - default 0x8000000 - -config PC_RESET_OFFSET - hex "Offset of reset vector from the base of memory" - default 0 if MODE_USER - default 0x100000 - -config USE_MMAP - bool "Allocate guest physical memory with mmap()" - default y - -config MEM_RANDOM - depends on MODE_SYSTEM && !DIFFTEST - bool "Initialize the memory with random values" - default y - help - This may help to find undefined behaviors. - -config MEM_COMPRESS - depends on MODE_SYSTEM && !DIFFTEST - bool "Initialize the memory with a compressed gz file" - default n - help - Must have zlib installed. - -endmenu #MEMORY diff --git a/libraries/NEMU/src/memory/host-tlb.c b/libraries/NEMU/src/memory/host-tlb.c deleted file mode 100644 index 031d77f..0000000 --- a/libraries/NEMU/src/memory/host-tlb.c +++ /dev/null @@ -1,89 +0,0 @@ -#include -#include -#include -#include -#include - -#define HOSTTLB_SIZE_SHIFT 12 -#define HOSTTLB_SIZE (1 << HOSTTLB_SIZE_SHIFT) - -typedef struct { - uint8_t *offset; // offset from the guest virtual address of the data page to the host virtual address - vaddr_t gvpn; // guest virtual page number -} HostTLBEntry; - -static HostTLBEntry hosttlb[HOSTTLB_SIZE * 2]; -static HostTLBEntry* const hostrtlb = &hosttlb[0]; -static HostTLBEntry* const hostwtlb = &hosttlb[HOSTTLB_SIZE]; - -static inline vaddr_t hosttlb_vpn(vaddr_t vaddr) { - return (vaddr >> PAGE_SHIFT); -} - -static inline int hosttlb_idx(vaddr_t vaddr) { - return (hosttlb_vpn(vaddr) % HOSTTLB_SIZE); -} - -void hosttlb_flush(vaddr_t vaddr) { - if (vaddr == 0) { - memset(hosttlb, -1, sizeof(hosttlb)); - } else { - vaddr_t gvpn = hosttlb_vpn(vaddr); - int idx = hosttlb_idx(vaddr); - if (hostrtlb[idx].gvpn == gvpn) hostrtlb[idx].gvpn = (sword_t)-1; - if (hostwtlb[idx].gvpn == gvpn) hostwtlb[idx].gvpn = (sword_t)-1; - } -} - -void hosttlb_init() { - hosttlb_flush(0); -} - -static paddr_t va2pa(struct Decode *s, vaddr_t vaddr, int len, int type) { - if (type != MEM_TYPE_IFETCH) save_globals(s); - int ret = isa_mmu_check(vaddr, len, type); - if (ret == MMU_DIRECT) return vaddr; - paddr_t pg_base = isa_mmu_translate(vaddr, len, type); - ret = pg_base & PAGE_MASK; - assert(ret == MEM_RET_OK); - return pg_base | (vaddr & PAGE_MASK); -} - -__attribute__((noinline)) -static word_t hosttlb_read_slowpath(struct Decode *s, vaddr_t vaddr, int len, int type) { - paddr_t paddr = va2pa(s, vaddr, len, type); - if (likely(in_pmem(paddr))) { - HostTLBEntry *e = &hostrtlb[hosttlb_idx(vaddr)]; - e->offset = guest_to_host(paddr) - vaddr; - e->gvpn = hosttlb_vpn(vaddr); - } - return paddr_read(paddr, len); -} - -__attribute__((noinline)) -static void hosttlb_write_slowpath(struct Decode *s, vaddr_t vaddr, int len, word_t data) { - paddr_t paddr = va2pa(s, vaddr, len, MEM_TYPE_WRITE); - if (likely(in_pmem(paddr))) { - HostTLBEntry *e = &hostwtlb[hosttlb_idx(vaddr)]; - e->offset = guest_to_host(paddr) - vaddr; - e->gvpn = hosttlb_vpn(vaddr); - } - paddr_write(paddr, len, data); -} - -word_t hosttlb_read(struct Decode *s, vaddr_t vaddr, int len, int type) { - vaddr_t gvpn = hosttlb_vpn(vaddr); - HostTLBEntry *e = &hostrtlb[hosttlb_idx(vaddr)]; - if (unlikely(e->gvpn != gvpn)) return hosttlb_read_slowpath(s, vaddr, len, type); - return host_read(e->offset + vaddr, len); -} - -void hosttlb_write(struct Decode *s, vaddr_t vaddr, int len, word_t data) { - vaddr_t gvpn = hosttlb_vpn(vaddr); - HostTLBEntry *e = &hostwtlb[hosttlb_idx(vaddr)]; - if (unlikely(e->gvpn != gvpn)) { - hosttlb_write_slowpath(s, vaddr, len, data); - return; - } - host_write(e->offset + vaddr, len, data); -} diff --git a/libraries/NEMU/src/memory/paddr.c b/libraries/NEMU/src/memory/paddr.c deleted file mode 100644 index 74e056c..0000000 --- a/libraries/NEMU/src/memory/paddr.c +++ /dev/null @@ -1,146 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#ifdef CONFIG_USE_MMAP -#include -static const uint8_t *pmem = (uint8_t *)0x100000000ul; -#else -static uint8_t pmem[CONFIG_MSIZE] PG_ALIGN = {}; -#endif -#define HOST_PMEM_OFFSET (uint8_t *)(pmem - CONFIG_MBASE) - -uint8_t* guest_to_host(paddr_t paddr) { return paddr + HOST_PMEM_OFFSET; } -paddr_t host_to_guest(uint8_t *haddr) { return haddr - HOST_PMEM_OFFSET; } - -static inline word_t pmem_read(paddr_t addr, int len) { - return host_read(guest_to_host(addr), len); -} - -static inline void pmem_write(paddr_t addr, int len, word_t data) { -#ifdef CONFIG_DIFFTEST_STORE_COMMIT - store_commit_queue_push(addr, data, len); -#endif - host_write(guest_to_host(addr), len, data); -} - -void init_mem() { -#ifdef CONFIG_USE_MMAP - void *ret = mmap((void *)pmem, CONFIG_MSIZE, PROT_READ | PROT_WRITE, - MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0); - if (ret != pmem) { - perror("mmap"); - assert(0); - } -#endif - -#ifdef CONFIG_DIFFTEST_STORE_COMMIT - for (int i = 0; i < STORE_QUEUE_SIZE; i++) { - store_commit_queue[i].valid = 0; - } -#endif - -#ifdef CONFIG_MEM_RANDOM - srand(time(0)); - uint32_t *p = (uint32_t *)pmem; - int i; - for (i = 0; i < (int) (CONFIG_MSIZE / sizeof(p[0])); i ++) { - p[i] = rand(); - } -#endif -} - -/* Memory accessing interfaces */ - -word_t paddr_read(paddr_t addr, int len) { -#ifndef CONFIG_SHARE - if (likely(in_pmem(addr))) return pmem_read(addr, len); - else return mmio_read(addr, len); -#else - if (likely(in_pmem(addr))) return pmem_read(addr, len); - else printf("ERROR: invalid mem access to paddr " FMT_PADDR ", NEMU loaded 0 to continue difftest\n", addr); - return 0; -#endif -} - -void paddr_write(paddr_t addr, int len, word_t data) { -#ifndef CONFIG_SHARE - if (likely(in_pmem(addr))) pmem_write(addr, len, data); - else mmio_write(addr, len, data); -#else - return pmem_write(addr, len, data); -#endif -} - - -#ifdef CONFIG_DIFFTEST_STORE_COMMIT -store_commit_t store_commit_queue[STORE_QUEUE_SIZE]; -static uint64_t head = 0, tail = 0; - -void store_commit_queue_push(uint64_t addr, uint64_t data, int len) { - static int overflow = 0; - if (cpu.amo || overflow) { - return; - } - store_commit_t *commit = store_commit_queue + tail; - if(commit->valid){ // store commit queue overflow - overflow = 1; - printf("[WARNING] difftest store queue overflow, difftest store commit disabled\n"); - }; - uint64_t offset = addr % 8ULL; - commit->addr = addr - offset; - commit->valid = 1; - switch (len) { - case 1: - commit->data = (data & 0xffULL) << (offset << 3); - commit->mask = 0x1 << offset; - break; - case 2: - commit->data = (data & 0xffffULL) << (offset << 3); - commit->mask = 0x3 << offset; - break; - case 4: - commit->data = (data & 0xffffffffULL) << (offset << 3); - commit->mask = 0xf << offset; - break; - case 8: - commit->data = data; - commit->mask = 0xff; - break; - default: - assert(0); - } - tail = (tail + 1) % STORE_QUEUE_SIZE; -} - -store_commit_t *store_commit_queue_pop() { - store_commit_t *result = store_commit_queue + head; - if (!result->valid) { - return NULL; - } - result->valid = 0; - head = (head + 1) % STORE_QUEUE_SIZE; - return result; -} - -int check_store_commit(uint64_t *addr, uint64_t *data, uint8_t *mask) { - *addr = *addr - (*addr % 0x8ULL); - store_commit_t *commit = store_commit_queue_pop(); - int result = 0; - if (!commit) { - printf("NEMU does not commit any store instruction.\n"); - result = 1; - } - else if (*addr != commit->addr || *data != commit->data || *mask != commit->mask) { - *addr = commit->addr; - *data = commit->data; - *mask = commit->mask; - result = 1; - } - return result; -} - -#endif \ No newline at end of file diff --git a/libraries/NEMU/src/memory/vaddr.c b/libraries/NEMU/src/memory/vaddr.c deleted file mode 100644 index 6f4e6a5..0000000 --- a/libraries/NEMU/src/memory/vaddr.c +++ /dev/null @@ -1,109 +0,0 @@ -#include - -#ifdef CONFIG_PERF_OPT -#define ENABLE_HOSTTLB 1 -#endif - -#include -#include -#include - -#ifndef __ICS_EXPORT -#ifndef ENABLE_HOSTTLB -static word_t vaddr_read_cross_page(vaddr_t addr, int len, int type) { - word_t data = 0; - int i; - for (i = 0; i < len; i ++, addr ++) { - paddr_t mmu_ret = isa_mmu_translate(addr, 1, type); - int ret = mmu_ret & PAGE_MASK; - if (ret != MEM_RET_OK) return 0; - paddr_t paddr = (mmu_ret & ~PAGE_MASK) | (addr & PAGE_MASK); - word_t byte = (type == MEM_TYPE_IFETCH ? paddr_read : paddr_read)(paddr, 1); - data |= byte << (i << 3); - } - return data; -} - -static void vaddr_write_cross_page(vaddr_t addr, int len, word_t data) { - int i; - for (i = 0; i < len; i ++, addr ++) { - paddr_t mmu_ret = isa_mmu_translate(addr, 1, MEM_TYPE_WRITE); - int ret = mmu_ret & PAGE_MASK; - if (ret != MEM_RET_OK) return; - paddr_t paddr = (mmu_ret & ~PAGE_MASK) | (addr & PAGE_MASK); - paddr_write(paddr, 1, data & 0xff); - data >>= 8; - } -} - -__attribute__((noinline)) -static word_t vaddr_mmu_read(struct Decode *s, vaddr_t addr, int len, int type) { -#ifdef XIANGSHAN_DEBUG - vaddr_t vaddr = addr; -#endif - paddr_t pg_base = isa_mmu_translate(addr, len, type); - int ret = pg_base & PAGE_MASK; - if (ret == MEM_RET_OK) { - addr = pg_base | (addr & PAGE_MASK); - word_t rdata = paddr_read(addr, len); -#ifdef XIANGSHAN_DEBUG - printf("[NEMU] mmu_read: vaddr 0x%lx, paddr 0x%lx, rdata 0x%lx\n", - vaddr, addr, rdata); -#endif - return rdata; - } else if (len != 1 && ret == MEM_RET_CROSS_PAGE) { - return vaddr_read_cross_page(addr, len, type); - } - return 0; -} - -__attribute__((noinline)) -static void vaddr_mmu_write(struct Decode *s, vaddr_t addr, int len, word_t data) { -#ifdef XIANGSHAN_DEBUG - vaddr_t vaddr = addr; -#endif - paddr_t pg_base = isa_mmu_translate(addr, len, MEM_TYPE_WRITE); - int ret = pg_base & PAGE_MASK; - if (ret == MEM_RET_OK) { - addr = pg_base | (addr & PAGE_MASK); -#ifdef XIANGSHAN_DEBUG - printf("[NEMU] mmu_write: vaddr 0x%lx, paddr 0x%lx, len %d, data 0x%lx\n", - vaddr, addr, len, data); -#endif - paddr_write(addr, len, data); - } else if (len != 1 && ret == MEM_RET_CROSS_PAGE) { - vaddr_write_cross_page(addr, len, data); - } -} -#endif -#endif - -static inline word_t vaddr_read_internal(void *s, vaddr_t addr, int len, int type, int mmu_mode) { - if (unlikely(mmu_mode == MMU_DYNAMIC)) mmu_mode = isa_mmu_check(addr, len, type); - if (mmu_mode == MMU_DIRECT) return paddr_read(addr, len); -#ifndef __ICS_EXPORT - return MUXDEF(ENABLE_HOSTTLB, hosttlb_read, vaddr_mmu_read) ((struct Decode *)s, addr, len, type); -#endif - return 0; -} - -word_t vaddr_ifetch(vaddr_t addr, int len) { - return vaddr_read_internal(NULL, addr, len, MEM_TYPE_IFETCH, MMU_DYNAMIC); -} - -word_t vaddr_read(struct Decode *s, vaddr_t addr, int len, int mmu_mode) { - return vaddr_read_internal(s, addr, len, MEM_TYPE_READ, mmu_mode); -} - -void vaddr_write(struct Decode *s, vaddr_t addr, int len, word_t data, int mmu_mode) { - if (unlikely(mmu_mode == MMU_DYNAMIC)) mmu_mode = isa_mmu_check(addr, len, MEM_TYPE_WRITE); - if (mmu_mode == MMU_DIRECT) { paddr_write(addr, len, data); return; } -#ifndef __ICS_EXPORT - MUXDEF(ENABLE_HOSTTLB, hosttlb_write, vaddr_mmu_write) (s, addr, len, data); -#endif -} - -word_t vaddr_read_safe(vaddr_t addr, int len) { - // FIXME: when reading fails, return an error instead of raising exceptions - return vaddr_read_internal(NULL, addr, len, MEM_TYPE_READ, MMU_DYNAMIC); -} diff --git a/libraries/NEMU/src/monitor/aligncheck.c b/libraries/NEMU/src/monitor/aligncheck.c deleted file mode 100644 index dee2935..0000000 --- a/libraries/NEMU/src/monitor/aligncheck.c +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif -#include - -#ifdef CONFIG_AC_HOST -#ifndef CONFIG_SHARE -#include - -#define RFLAGS_AC (1u << 18) -#define RFLAGS_TF (1u << 8) - -static void aligncheck_sig_handler(int sig, siginfo_t *info, void *ucontext) { - ucontext_t *uc = (ucontext_t *)ucontext; - uint8_t *rip = (uint8_t *)uc->uc_mcontext.gregs[REG_RIP]; - extern uint8_t _start, _etext; - if (&_start <= rip && rip < &_etext) { - panic("handle misaligned memory accessing"); - } - uc->uc_mcontext.gregs[REG_EFL] &= ~RFLAGS_AC; - uc->uc_mcontext.gregs[REG_EFL] |= RFLAGS_TF; -} - -static void trap_sig_handler(int sig, siginfo_t *info, void *ucontext) { - ucontext_t *uc = (ucontext_t *)ucontext; - uc->uc_mcontext.gregs[REG_EFL] |= RFLAGS_AC; - uc->uc_mcontext.gregs[REG_EFL] &= ~RFLAGS_TF; -} - -static inline void aligncheck_enable() { - asm volatile( - "add $-128, %%rsp \n" // skip past the red-zone - "pushf\n" - "orl $0x40000,(%%rsp)\n" - "popf \n" - "sub $-128, %%rsp" // and restore the stack pointer. - ::: "memory"); // ordered wrt. other mem access -} - -void init_aligncheck() { - struct sigaction s; - memset(&s, 0, sizeof(s)); - s.sa_sigaction = aligncheck_sig_handler; - s.sa_flags = SA_SIGINFO; - int ret = sigaction(SIGBUS, &s, NULL); - Assert(ret == 0, "Can not set signal handler"); - - memset(&s, 0, sizeof(s)); - s.sa_sigaction = trap_sig_handler; - s.sa_flags = SA_SIGINFO; - ret = sigaction(SIGTRAP, &s, NULL); - Assert(ret == 0, "Can not set signal handler"); - - aligncheck_enable(); -} -#else -void init_aligncheck() { -} -#endif -#else -void init_aligncheck() { -} -#endif diff --git a/libraries/NEMU/src/monitor/monitor.c b/libraries/NEMU/src/monitor/monitor.c deleted file mode 100644 index f6dd13b..0000000 --- a/libraries/NEMU/src/monitor/monitor.c +++ /dev/null @@ -1,195 +0,0 @@ -#include -#include -#include -#include - -#ifndef CONFIG_SHARE -void init_aligncheck(); -void init_log(const char *log_file); -void init_mem(); -void init_regex(); -void init_wp_pool(); -void init_difftest(char *ref_so_file, long img_size, int port); -void init_device(); - -static char *log_file = NULL; -static char *diff_so_file = NULL; -static char *img_file = NULL; -static int batch_mode = false; -static int difftest_port = 1234; -char *max_instr = NULL; - -int is_batch_mode() { return batch_mode; } - -static inline void welcome() { - Log("Debug: \33[1;32m%s\33[0m", MUXDEF(CONFIG_DEBUG, "ON","OFF")); - IFDEF(CONFIG_DEBUG, Log("If debug mode is on, a log file will be generated " - "to record every instruction NEMU executes. This may lead to a large log file. " - "If it is not necessary, you can turn it off in include/common.h.") - ); - Log("Build time: %s, %s", __TIME__, __DATE__); - printf("Welcome to \33[1;41m\33[1;33m%s\33[0m-NEMU!\n", str(__ISA__)); - printf("For help, type \"help\"\n"); -} - -#ifndef CONFIG_MODE_USER - -#ifdef CONFIG_MEM_COMPRESS -#include - -static long load_gz_img(const char *filename) { - gzFile compressed_mem = gzopen(filename, "rb"); - Assert(compressed_mem, "Can not open '%s'", filename); - - const uint32_t chunk_size = 16384; - uint8_t *temp_page = (uint8_t *)calloc(chunk_size, sizeof(long)); - uint8_t *pmem_start = (uint8_t *)guest_to_host(RESET_VECTOR); - uint8_t *pmem_current; - - // load file byte by byte to pmem - uint64_t curr_size = 0; - while (curr_size < CONFIG_MSIZE) { - uint32_t bytes_read = gzread(compressed_mem, temp_page, chunk_size); - if (bytes_read == 0) { - break; - } - for (uint32_t x = 0; x < bytes_read; x++) { - pmem_current = pmem_start + curr_size + x; - uint8_t read_data = *(temp_page + x); - if (read_data != 0 || *pmem_current != 0) { - *pmem_current = read_data; - } - } - curr_size += bytes_read; - } - - // check again to ensure the bin has been fully loaded - uint32_t left_bytes = gzread(compressed_mem, temp_page, chunk_size); - Assert(left_bytes == 0, "File size is larger than buf_size!\n"); - - free(temp_page); - Assert(!gzclose(compressed_mem), "Error closing '%s'\n", filename); - return curr_size; -} - -// Return whether a file is a gz file, determined by its name. -// If the filename ends with ".gz", we treat it as a gz file. -bool is_gz_file(const char *filename) { - if (filename == NULL || strlen(filename) < 3) { - return false; - } - return !strcmp(filename + (strlen(filename) - 3), ".gz"); -} -#endif // CONFIG_MEM_COMPRESS - -static inline long load_img() { - if (img_file == NULL) { - Log("No image is given. Use the default build-in image."); - return 4096; // built-in image size - } - -#ifdef CONFIG_MEM_COMPRESS - if (is_gz_file(img_file)) { - Log("The image is %s", img_file); - return load_gz_img(img_file); - } -#endif - - FILE *fp = fopen(img_file, "rb"); - Assert(fp, "Can not open '%s'", img_file); - - Log("The image is %s", img_file); - - fseek(fp, 0, SEEK_END); - long size = ftell(fp); - - fseek(fp, 0, SEEK_SET); - int ret = fread(guest_to_host(RESET_VECTOR), size, 1, fp); - assert(ret == 1); - - fclose(fp); - return size; -} -#endif // CONFIG_MODE_USER - -static inline int parse_args(int argc, char *argv[]) { - const struct option table[] = { - {"batch" , no_argument , NULL, 'b'}, - {"max-instr", required_argument, NULL, 'I'}, - {"log" , required_argument, NULL, 'l'}, - {"diff" , required_argument, NULL, 'd'}, - {"port" , required_argument, NULL, 'p'}, - {"help" , no_argument , NULL, 'h'}, - {0 , 0 , NULL, 0 }, - }; - int o; - while ( (o = getopt_long(argc, argv, "-bI:hl:d:p:", table, NULL)) != -1) { - switch (o) { - case 'b': batch_mode = true; break; - case 'I': max_instr = optarg; break; - case 'p': sscanf(optarg, "%d", &difftest_port); break; - case 'l': log_file = optarg; break; - case 'd': diff_so_file = optarg; break; - case 1: img_file = optarg; return optind - 1; - default: - printf("Usage: %s [OPTION...] IMAGE [args]\n\n", argv[0]); - printf("\t-b,--batch run with batch mode\n"); - printf("\t-I,--max-instr max number of instructions executed\n"); - printf("\t-l,--log=FILE output log to FILE\n"); - printf("\t-d,--diff=REF_SO run DiffTest with reference REF_SO\n"); - printf("\t-p,--port=PORT run DiffTest with port PORT\n"); - printf("\n"); - exit(0); - } - } - return 0; -} - -void init_monitor(int argc, char *argv[]) { - /* Perform some global initialization. */ - - /* Parse arguments. */ -#ifdef CONFIG_MODE_USER - int user_argidx = parse_args(argc, argv); -#else - parse_args(argc, argv); -#endif - - /* Open the log file. */ - init_log(log_file); - - /* Initialize memory. */ - init_mem(); - - /* Load the image to memory. This will overwrite the built-in image. */ -#ifdef CONFIG_MODE_USER - int user_argc = argc - user_argidx; - char **user_argv = argv + user_argidx; - void init_user(char *elfpath, int argc, char *argv[]); - init_user(img_file, user_argc, user_argv); -#else - /* Perform ISA dependent initialization. */ - init_isa(); - - long img_size = load_img(); - - /* Initialize differential testing. */ - init_difftest(diff_so_file, img_size, difftest_port); - - /* Initialize devices. */ - init_device(); -#endif - - /* Compile the regular expressions. */ - init_regex(); - - /* Initialize the watchpoint pool. */ - init_wp_pool(); - - /* Enable alignment checking for in a x86 host */ - init_aligncheck(); - - /* Display welcome message. */ - welcome(); -} -#endif \ No newline at end of file diff --git a/libraries/NEMU/src/monitor/ui.c b/libraries/NEMU/src/monitor/ui.c deleted file mode 100644 index 9e90be8..0000000 --- a/libraries/NEMU/src/monitor/ui.c +++ /dev/null @@ -1,297 +0,0 @@ -#include -#include -#include -#ifndef __ICS_EXPORT -#include -#include -#include -#endif - -#include -#include -#include - -#ifndef CONFIG_SHARE -int is_batch_mode(); -int set_watchpoint(char *e); -bool delete_watchpoint(int NO); -void list_watchpoint(); - -/* We use the `readline' library to provide more flexibility to read from stdin. */ -static char* rl_gets() { - static char *line_read = NULL; - - if (line_read) { - free(line_read); - line_read = NULL; - } - - line_read = readline("(nemu) "); - - if (line_read && *line_read) { - add_history(line_read); - } - - return line_read; -} - -static int cmd_c(char *args) { - cpu_exec((args == NULL) ? -1 : atoi(args)); - return 0; -} - -#ifndef __ICS_EXPORT -static int cmd_si(char *args) { - /* extract the first argument */ - char *arg = strtok(NULL, " "); - - if (arg == NULL) { - /* no argument given */ - cpu_exec(1); - } - else { - int n = strtol(arg, NULL, 10); - printf("si %d\n", n); - cpu_exec(n); - } - return 0; -} - -static int cmd_info(char *args) { - char *arg = strtok(NULL, " "); - - if (arg == NULL) { - /* no argument given */ - Log("usage: info [r|w]"); - } - else { - if (strcmp(arg, "r") == 0) { - isa_reg_display(); - } - else if (strcmp(arg, "w") == 0) { - list_watchpoint(); - } - } - return 0; -} - -static int cmd_d(char *args) { - char *arg = strtok(NULL, " "); - - if (arg == NULL) { - /* no argument given */ - Log("usage: d n"); - } - else { - int NO; - sscanf(args, "%d", &NO); - if (!delete_watchpoint(NO)) { - printf("Watchpoint #%d does not exist\n", NO); - } - } - - return 0; -} - -static int cmd_p(char *args) { - if (args != NULL) { - bool success; - word_t r = expr(args, &success); - if(success) { printf(FMT_WORD "\n", r); } - else { printf("Bad expression\n"); } - } - return 0; -} - -static int cmd_w(char *args) { - if (args != NULL) { - int NO = set_watchpoint(args); - if (NO != -1) { printf("Set watchpoint #%d\n", NO); } - else { printf("Bad expression\n"); } - } - return 0; -} - -static int cmd_x(char *args) { - char *arg = strtok(NULL, " "); - - if (arg == NULL) { - /* no argument given */ - Log("usage: x n addr"); - } - else { - int n; - vaddr_t addr; - int i; - sscanf(arg, "%d", &n); - - bool success; - addr = expr(arg + strlen(arg) + 1, &success); - if (success) { - for (i = 0; i < n; i ++) { - if (i % 4 == 0) { - printf(FMT_WORD ": ", addr); - } - - printf("0x%08x ", (uint32_t)vaddr_read_safe(addr, 4)); - addr += 4; - if (i % 4 == 3) { - printf("\n"); - } - } - printf("\n"); - } - else { printf("Bad expression\n"); } - } - return 0; -} - -#ifdef CONFIG_MODE_SYSTEM -static int cmd_detach(char *args) { - difftest_detach(); - return 0; -} - -static int cmd_attach(char *args) { - difftest_attach(); - return 0; -} - -static int cmd_save(char *args) { - /* extract the first argument */ - char *arg = strtok(NULL, " "); - - if (arg == NULL) { - /* no argument given */ - Log("no path"); - } - else { - FILE *fp = fopen(arg, "w"); - assert(fp != NULL); - fwrite(&cpu, sizeof(cpu), 1, fp); - fwrite(guest_to_host(CONFIG_MBASE), CONFIG_MSIZE, 1, fp); - fclose(fp); - } - return 0; -} - -static int cmd_load(char *args) { - /* extract the first argument */ - char *arg = strtok(NULL, " "); - - if (arg == NULL) { - /* no argument given */ - Log("no path"); - } - else { - FILE *fp = fopen(arg, "r"); - assert(fp != NULL); - __attribute__((unused)) int ret; - ret = fread(&cpu, sizeof(cpu), 1, fp); - ret = fread(guest_to_host(CONFIG_MBASE), CONFIG_MSIZE, 1, fp); - fclose(fp); - } - return 0; -} -#else -#endif - -#endif - -static int cmd_q(char *args) { - return -1; -} - -static int cmd_help(char *args); - -static struct { - const char *name; - const char *description; - int (*handler) (char *); -} cmd_table [] = { - { "help", "Display informations about all supported commands", cmd_help }, - { "c", "Continue the execution of the program", cmd_c }, -#ifndef __ICS_EXPORT - { "si", "step", cmd_si }, - { "info", "info r - print register values; info w - show watch point state", cmd_info }, - { "x", "Examine memory", cmd_x }, - { "p", "Evaluate the value of expression", cmd_p }, - { "w", "Set watchpoint", cmd_w }, - { "d", "Delete watchpoint", cmd_d }, -#ifdef CONFIG_MODE_SYSTEM - { "detach", "detach diff test", cmd_detach }, - { "attach", "attach diff test", cmd_attach }, - { "save", "save snapshot", cmd_save }, - { "load", "load snapshot", cmd_load }, -#endif -#endif - { "q", "Exit NEMU", cmd_q }, - - /* TODO: Add more commands */ - -}; - -#define NR_CMD ARRLEN(cmd_table) - -static int cmd_help(char *args) { - /* extract the first argument */ - char *arg = strtok(NULL, " "); - int i; - - if (arg == NULL) { - /* no argument given */ - for (i = 0; i < NR_CMD; i ++) { - printf("%s - %s\n", cmd_table[i].name, cmd_table[i].description); - } - } - else { - for (i = 0; i < NR_CMD; i ++) { - if (strcmp(arg, cmd_table[i].name) == 0) { - printf("%s - %s\n", cmd_table[i].name, cmd_table[i].description); - return 0; - } - } - printf("Unknown command '%s'\n", arg); - } - return 0; -} - -void ui_mainloop() { - if (is_batch_mode()) { - extern char *max_instr; - cmd_c(max_instr); - return; - } - - for (char *str; (str = rl_gets()) != NULL; ) { - char *str_end = str + strlen(str); - - /* extract the first token as the command */ - char *cmd = strtok(str, " "); - if (cmd == NULL) { continue; } - - /* treat the remaining string as the arguments, - * which may need further parsing - */ - char *args = cmd + strlen(cmd) + 1; - if (args >= str_end) { - args = NULL; - } - -#ifdef CONFIG_DEVICE - extern void sdl_clear_event_queue(); - sdl_clear_event_queue(); -#endif - - int i; - for (i = 0; i < NR_CMD; i ++) { - if (strcmp(cmd, cmd_table[i].name) == 0) { - if (cmd_table[i].handler(args) < 0) { return; } - break; - } - } - - if (i == NR_CMD) { printf("Unknown command '%s'\n", cmd); } - } -} -#endif diff --git a/libraries/NEMU/src/monitor/watchpoint.c b/libraries/NEMU/src/monitor/watchpoint.c deleted file mode 100644 index 66ac5ef..0000000 --- a/libraries/NEMU/src/monitor/watchpoint.c +++ /dev/null @@ -1,108 +0,0 @@ -#include -#ifndef __ICS_EXPORT -#include -#endif - -#define NR_WP 32 - -typedef struct watchpoint { - int NO; - struct watchpoint *next; - - /* TODO: Add more members if necessary */ - -#ifndef __ICS_EXPORT - char *expr; - word_t old_val; -#endif -} WP; - -static WP wp_pool[NR_WP] = {}; -static WP *head = NULL, *free_ = NULL; - -void init_wp_pool() { - int i; - for (i = 0; i < NR_WP; i ++) { - wp_pool[i].NO = i; - wp_pool[i].next = &wp_pool[i + 1]; - } - wp_pool[NR_WP - 1].next = NULL; - - head = NULL; - free_ = wp_pool; -} - -/* TODO: Implement the functionality of watchpoint */ - -#ifndef __ICS_EXPORT -static WP* new_WP() { - assert(free_ != NULL); - WP *p = free_; - free_ = free_->next; - return p; -} - -static void free_WP(WP *p) { - assert(p >= wp_pool && p < wp_pool + NR_WP); - free(p->expr); - p->next = free_; - free_ = p; -} - -int set_watchpoint(char *e) { - bool success; - word_t val = expr(e, &success); - if (!success) return -1; - - WP *p = new_WP(); - p->expr = strdup(e); - p->old_val = val; - - p->next = head; - head = p; - - return p->NO; -} - -bool delete_watchpoint(int NO) { - WP *p, *prev = NULL; - for (p = head; p != NULL; prev = p, p = p->next) { - if (p->NO == NO) { break; } - } - - if (p == NULL) { return false; } - if (prev == NULL) { head = p->next; } - else { prev->next = p->next; } - - free_WP(p); - return true; -} - -void list_watchpoint() { - if (head == NULL) { - printf("No watchpoints\n"); - return; - } - - printf("%8s\t%8s\t%8s\n", "NO", "Address", "Enable"); - WP *p; - for (p = head; p != NULL; p = p->next) { - printf("%8d\t%s\t" FMT_WORD "\n", p->NO, p->expr, p->old_val); - } -} - -void scan_watchpoint(vaddr_t pc) { - WP *p; - for (p = head; p != NULL; p = p->next) { - bool success; - word_t new_val = expr(p->expr, &success); - if (p->old_val != new_val) { - printf("\n\nHint watchpoint %d at address " FMT_WORD ", expr = %s\n", p->NO, pc, p->expr); - printf("old value = " FMT_WORD "\nnew value = " FMT_WORD "\n", p->old_val, new_val); - p->old_val = new_val; - nemu_state.state = NEMU_STOP; - return; - } - } -} -#endif diff --git a/libraries/NEMU/src/nemu-main.c b/libraries/NEMU/src/nemu-main.c deleted file mode 100644 index ae94550..0000000 --- a/libraries/NEMU/src/nemu-main.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#ifndef CONFIG_SHARE -void init_monitor(int, char *[]); -void engine_start(); -int is_exit_status_bad(); - -int main(int argc, char *argv[]) { - /* Initialize the monitor. */ - init_monitor(argc, argv); - - /* Start engine. */ - engine_start(); - - return is_exit_status_bad(); -} -#endif \ No newline at end of file diff --git a/libraries/NEMU/src/user/init/riscv64.c b/libraries/NEMU/src/user/init/riscv64.c deleted file mode 100644 index b1236f5..0000000 --- a/libraries/NEMU/src/user/init/riscv64.c +++ /dev/null @@ -1,12 +0,0 @@ -#include - -#ifdef CONFIG_ISA_riscv64 -void init_csr(); - -void isa_init_user(word_t sp) { - init_csr(); - cpu.mode = MODE_U; - cpu.gpr[2]._64 = sp; - //cpu.edx = 0; // no handler for atexit() -} -#endif diff --git a/libraries/NEMU/src/user/init/x86.c b/libraries/NEMU/src/user/init/x86.c deleted file mode 100644 index 595a141..0000000 --- a/libraries/NEMU/src/user/init/x86.c +++ /dev/null @@ -1,15 +0,0 @@ -#include - -#ifdef CONFIG_ISA_x86 -// we only maintain base of the segment here -uint32_t GDT[4] = {0}; - -void isa_init_user(word_t sp) { - cpu.esp = sp; - cpu.edx = 0; // no handler for atexit() - cpu.sreg[CSR_CS].val = 0xb; cpu.sreg[CSR_CS].base = 0; - cpu.sreg[CSR_DS].val = 0xb; cpu.sreg[CSR_DS].base = 0; - cpu.sreg[CSR_ES].val = 0xb; cpu.sreg[CSR_ES].base = 0; - cpu.sreg[CSR_FS].val = 0xb; cpu.sreg[CSR_FS].base = 0; -} -#endif diff --git a/libraries/NEMU/src/user/loader.c b/libraries/NEMU/src/user/loader.c deleted file mode 100644 index 4f25e2c..0000000 --- a/libraries/NEMU/src/user/loader.c +++ /dev/null @@ -1,157 +0,0 @@ -#include -#include -#include -#include -#include -#include "user.h" - -# define Elf_Ehdr MUXDEF(CONFIG_ISA64, Elf64_Ehdr, Elf32_Ehdr) -# define Elf_Phdr MUXDEF(CONFIG_ISA64, Elf64_Phdr, Elf32_Phdr) - -#if defined(CONFIG_ISA_x86) -# define ELF_TYPE EM_386 -#elif defined(CONFIG_ISA_mips32) -# define ELF_TYPE EM_MIPS -#elif defined(CONFIG_ISA_riscv32) || defined(CONFIG_ISA_riscv64) -# define ELF_TYPE EM_RISCV -#else -# error Unsupported ISA -#endif - -void isa_init_user(word_t sp); - -user_state_t user_state = {}; - -static void load_elf(char *elfpath) { - Assert(elfpath != NULL, "User program is not given"); - FILE *fp = fopen(elfpath, "rb"); - Assert(fp, "Can not open '%s'", elfpath); - - Elf_Ehdr *elf; - Elf_Phdr *ph, *eph; - - uint8_t buf[512]; - int ret = fread(buf, 512, 1, fp); - assert(ret == 1); - elf = (Elf_Ehdr *)buf; - assert(buf[0] == 0x7f && buf[1] == 'E' && buf[2] == 'L' && buf[3] == 'F'); - assert(elf->e_machine == ELF_TYPE); - - /* Load each program segment */ - ph = (Elf_Phdr *)((uint8_t *)elf + elf->e_phoff); - eph = ph + elf->e_phnum; - vaddr_t brk = 0; - for (; ph < eph; ph ++) { - if (ph->p_type == PT_LOAD) { - uint32_t pad_byte = ph->p_vaddr % PAGE_SIZE; - ph->p_vaddr -= pad_byte; - ph->p_offset -= pad_byte; - ph->p_filesz += pad_byte; - ph->p_memsz += pad_byte; - - uint8_t *haddr = user_to_host(ph->p_vaddr); - if (ph->p_filesz != 0) { - user_mmap(haddr, ph->p_filesz, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_FIXED, fileno(fp), ph->p_offset); - } - if (ph->p_flags & PF_W) { - // bss - memset(haddr + ph->p_filesz, 0, PAGE_SIZE - ph->p_filesz % PAGE_SIZE); - void *bss_page = haddr + ROUNDUP(ph->p_filesz, PAGE_SIZE); - sword_t memsz = ph->p_memsz - ROUNDUP(ph->p_filesz, PAGE_SIZE); - if (memsz > 0) { - user_mmap(bss_page, memsz, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS, -1, 0); - } - } - - if (ph->p_vaddr + ph->p_memsz > brk) brk = ph->p_vaddr + ph->p_memsz; - if (ph->p_offset == 0) { user_state.phdr = ph->p_vaddr + elf->e_phoff; } - } - } - fclose(fp); - user_state.brk = brk; - user_state.brk_page = ROUNDUP(brk, PAGE_SIZE); - user_state.program_brk = brk; - user_state.entry = elf->e_entry; - user_state.phent = elf->e_phentsize; - user_state.phnum = elf->e_phnum; - cpu.pc = elf->e_entry; -} - -static inline word_t init_stack(int argc, char *argv[]) { - uint8_t *sp = user_to_host(0xc0000000); - uint32_t stack_size = 8 * 1024 * 1024; - user_mmap(sp - stack_size, stack_size, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS, -1, 0); - - word_t strs[128] = {}; - int i = 0; - char *envp[] = { NULL }; -#define push(data) { sp -= sizeof(word_t); *(word_t *)sp = (data); } -#define push_auxv(type, data) { push(data); push(type); } -#define push_mem(src, size) { \ - sp -= (size); \ - memcpy(sp, (src), (size)); \ -} -#define push_str(s) push_mem(s, strlen(s) + 1) -#define push_str_array(arr) { \ - char **p = arr; \ - for (; *p != NULL; p ++) { \ - push_str(*p); \ - assert(i < ARRLEN(strs)); \ - strs[i ++] = host_to_user(sp); \ - } \ - strs[i ++] = 0; \ -} - - push_str_array(argv); - push_str_array(envp); - - // aligning - sp = (uint8_t *)ROUNDDOWN(sp, sizeof(word_t)); - - // AT_RANDOM - push(0xdeadbeef); push(0xdeadbeef); push(0xdeadbeef); push(0xdeadbeef); - word_t random_ptr = host_to_user(sp); - - push_auxv(AT_NULL, 0); - //push_auxv(AT_HWCAP, 0xbfebfbff); - push_auxv(AT_PAGESZ, 0x1000); - push_auxv(AT_CLKTCK, getauxval(AT_CLKTCK)); - push_auxv(AT_PHDR, user_state.phdr); - push_auxv(AT_PHENT, user_state.phent); - push_auxv(AT_PHNUM, user_state.phnum); - push_auxv(AT_BASE, 0); - push_auxv(AT_FLAGS, 0); - push_auxv(AT_ENTRY, user_state.entry); - push_auxv(AT_UID, getauxval(AT_UID)); - push_auxv(AT_EUID, getauxval(AT_EUID)); - push_auxv(AT_GID, getauxval(AT_GID)); - push_auxv(AT_EGID, getauxval(AT_EGID)); - push_auxv(AT_SECURE, getauxval(AT_SECURE)); - push_auxv(AT_RANDOM, random_ptr); - //push_auxv(AT_HWCAP2, 0); - - push_mem(strs, sizeof(strs[0]) * i); - push(argc); - - return host_to_user(sp); -} - -static void redirction_std() { - user_state.std_fd[0] = dup(0); - user_state.std_fd[1] = dup(1); - user_state.std_fd[2] = dup(2); - FILE *fp; - fp = freopen("/dev/tty", "r", stdin); assert(fp); - fp = freopen("/dev/tty", "w", stdout); assert(fp); - fp = freopen("/dev/tty", "w", stdout); assert(fp); -} - -void init_user(char *elfpath, int argc, char *argv[]) { - redirction_std(); - load_elf(elfpath); - word_t sp = init_stack(argc, argv); - isa_init_user(sp); -} diff --git a/libraries/NEMU/src/user/memory.c b/libraries/NEMU/src/user/memory.c deleted file mode 100644 index dfef1fa..0000000 --- a/libraries/NEMU/src/user/memory.c +++ /dev/null @@ -1,169 +0,0 @@ -#include "user.h" -#include -#include -#include - -#define ROUNDUP(a, sz) ((((uintptr_t)a) + (sz) - 1) & ~((sz) - 1)) -#define ROUNDDOWN(a, sz) ((((uintptr_t)a)) & ~((sz) - 1)) - -word_t vaddr_read(struct Decode *s, vaddr_t addr, int len, int mmu_mode) { - return host_read(user_to_host(addr), len); -} - -void vaddr_write(struct Decode *s, vaddr_t addr, int len, word_t data, int mmu_mode) { - host_write(user_to_host(addr), len, data); -} - -word_t vaddr_ifetch(vaddr_t addr, int len) { - return vaddr_read(NULL, addr, len, MMU_DYNAMIC); -} - -word_t vaddr_read_safe(vaddr_t addr, int len) { - return vaddr_read(NULL, addr, len, MMU_DYNAMIC); -} - - -typedef struct vma_t { - uintptr_t addr; - size_t length; - int prot; - int flags; - int fd; - off_t offset; - struct vma_t *next; - struct vma_t *prev; -} vma_t; - -static vma_t vma_list = { }; -static vma_t *dyn_start; - -#define vma_foreach(p) for (p = vma_list.next; !vma_list_is_end(p); p = p->next) - -static inline void vma_list_add_after(vma_t *left, vma_t *_new) { - vma_t *right = left->next; - _new->next = right; - _new->prev = left; - left->next = _new; - right->prev = _new; -} - -static inline bool vma_list_is_end(vma_t *p) { - return (p == &vma_list); -} - -static inline vma_t* vma_list_find_fix_area(uintptr_t addr, size_t length) { - vma_t *p; - vma_foreach(p) { - if (p->addr == addr && p->length == length) return p; - } - return NULL; -} - -static inline vma_t* vma_list_new_fix_area(uintptr_t addr, size_t length) { - vma_t *candidate = NULL; - vma_t *p; - vma_foreach(p) { - uintptr_t l = p->addr; - uintptr_t r = p->addr + p->length; - if (!((addr + length <= l) || (addr >= r))) { - // overlap - return NULL; - } - vma_t *right = p->next; - if (p->addr < addr && addr < right->addr) { candidate = p; } - } - assert(candidate != NULL); - return candidate; -} - -// return the vma_t whose right is suitable -static inline vma_t* vma_list_new_dyn_area(size_t length) { - vma_t *p = dyn_start; - for (; !vma_list_is_end(p); p = p->next) { - vma_t *right = p->next; - size_t free = (uint8_t *)right->addr - ((uint8_t *)p->addr + p->length); - if (free >= length) return p; - } - assert(0); - return NULL; -} - -static inline vma_t* vma_new(uintptr_t addr, size_t length, int prot, - int flags, int fd, off_t offset) { - vma_t *vma = (vma_t *) malloc(sizeof(vma_t)); - assert(vma); - *vma = (vma_t) { .addr = addr, .length = length, .prot = prot, - .flags = flags, .fd = fd, .offset = offset }; - return vma; -} - -void init_mem() { - vma_t *p = &vma_list; - p->next = p->prev = p; - - vma_t *zero = vma_new(0ul, 0ul, 0, 0, -1, 0); - vma_list_add_after(p, zero); - - dyn_start = vma_new(0x80000000ul, 0ul, 0, 0, -1, 0); - vma_list_add_after(zero, dyn_start); - - vma_t *kernel = vma_new(0xc0000000ul, 0x40000000ul, 0, 0, -1, 0); - vma_list_add_after(dyn_start, kernel); -} - -void *user_mmap(void *addr, size_t length, int prot, - int flags, int fd, off_t offset) { - vma_t *left = NULL; - length = ROUNDUP(length, 4096); - if (flags & MAP_FIXED) { - left = vma_list_new_fix_area((uintptr_t)addr, length); - assert(left != NULL); - } else { - left = vma_list_new_dyn_area(length); - addr = (uint8_t *)left->addr + left->length; - flags |= MAP_FIXED; - } - vma_t *vma = vma_new((uintptr_t)addr, length, prot, flags, fd, offset); - vma_list_add_after(left, vma); - - void *ret = mmap(addr, length, prot, flags, fd, offset); - if (flags & MAP_FIXED) { assert(ret == addr); } - return ret; -} - -int user_munmap(void *addr, size_t length) { - vma_t *p = vma_list_find_fix_area((uintptr_t)addr, length); - assert(p != NULL); - vma_t *prev = p->prev; - vma_t *next = p->next; - prev->next = next; - next->prev = prev; - - int ret = munmap(addr, length); - assert(ret == 0); - free(p); - return ret; -} - -void *user_mremap(void *old_addr, size_t old_size, size_t new_size, - int flags, void *new_addr) { - vma_t *p = vma_list_find_fix_area((uintptr_t)old_addr, old_size); - assert(p != NULL); - assert(!(flags & MREMAP_FIXED)); - vma_t *next = p->next; - size_t free_size_to_expand = next->addr - p->addr; - new_size = ROUNDUP(new_size, 4096); - if (free_size_to_expand >= new_size) { - p->length = new_size; - void *ret = mremap(old_addr, old_size, new_size, 0); // dont move - if (ret != old_addr) perror("mremap"); - assert(ret == old_addr); - return old_addr; - } else { - // should move - new_addr = user_mmap(NULL, new_size, p->prot, p->flags & ~MAP_FIXED, -1, 0); - memcpy(new_addr, old_addr, old_size); - user_munmap(old_addr, p->length); - return new_addr; - } -} diff --git a/libraries/NEMU/src/user/syscall-riscv64.h b/libraries/NEMU/src/user/syscall-riscv64.h deleted file mode 100644 index cd99f22..0000000 --- a/libraries/NEMU/src/user/syscall-riscv64.h +++ /dev/null @@ -1,77 +0,0 @@ -#define USER_SYS_getcwd 17 -#define USER_SYS_fcntl 25 -#define USER_SYS_ioctl 29 -#define USER_SYS_unlinkat 35 -#define USER_SYS_ftruncate 46 -#define USER_SYS_faccessat 48 -#define USER_SYS_openat 56 -#define USER_SYS_close 57 -#define USER_SYS_lseek 62 -#define USER_SYS_read 63 -#define USER_SYS_write 64 -#define USER_SYS_writev 66 -#define USER_SYS_readlinkat 78 -#define USER_SYS_fstatat 79 -#define USER_SYS_fstat 80 -#define USER_SYS_exit 93 -#define USER_SYS_exit_group 94 -#define USER_SYS_clock_gettime 113 -#define USER_SYS_rt_sigaction 134 -#define USER_SYS_times 153 -#define USER_SYS_uname 160 -#define USER_SYS_getrusage 165 -#define USER_SYS_gettimeofday 169 -#define USER_SYS_getpid 172 -#define USER_SYS_getuid 174 -#define USER_SYS_geteuid 175 -#define USER_SYS_getgid 176 -#define USER_SYS_getegid 177 -#define USER_SYS_sysinfo 179 -#define USER_SYS_brk 214 -#define USER_SYS_munmap 215 -#define USER_SYS_mremap 216 -#define USER_SYS_mmap 222 -#define USER_SYS_mprotect 226 -#define USER_SYS_prlimit64 261 - -struct user_stat { - uint64_t st_dev; - uint64_t st_ino; - uint32_t st_mode; - uint32_t st_nlink; - uint32_t st_uid; - uint32_t st_gid; - uint64_t st_rdev; - uint64_t pad1; - uint64_t st_size; - uint32_t st_blksize; - uint32_t pad2; - uint64_t st_blocks; /* Number 512-byte blocks allocated. */ - uint64_t target_st_atime; - uint64_t target_st_atime_nsec; - uint64_t target_st_mtime; - uint64_t target_st_mtime_nsec; - uint64_t target_st_ctime; - uint64_t target_st_ctime_nsec; - uint32_t unused3; - uint32_t unused4; -} __attribute__((packed)); - -static inline void translate_stat(struct stat *hostbuf, struct user_stat *userbuf) { - userbuf->st_dev = hostbuf->st_dev; - userbuf->st_ino = hostbuf->st_ino; - userbuf->st_mode = hostbuf->st_mode; - userbuf->st_nlink = hostbuf->st_nlink; - userbuf->st_uid = hostbuf->st_uid; - userbuf->st_gid = hostbuf->st_gid; - userbuf->st_rdev = hostbuf->st_rdev; - userbuf->st_size = hostbuf->st_size; - userbuf->st_blksize = hostbuf->st_blksize; - userbuf->st_blocks = hostbuf->st_blocks; - userbuf->target_st_atime = hostbuf->st_atime; - userbuf->target_st_atime_nsec = hostbuf->st_atim.tv_nsec; - userbuf->target_st_mtime = hostbuf->st_mtime; - userbuf->target_st_mtime_nsec = hostbuf->st_mtim.tv_nsec; - userbuf->target_st_ctime = hostbuf->st_ctime; - userbuf->target_st_ctime_nsec = hostbuf->st_ctim.tv_nsec; -} diff --git a/libraries/NEMU/src/user/syscall-x86.h b/libraries/NEMU/src/user/syscall-x86.h deleted file mode 100644 index 076b755..0000000 --- a/libraries/NEMU/src/user/syscall-x86.h +++ /dev/null @@ -1,220 +0,0 @@ -#define USER_SYS_exit_group 252 -#define USER_SYS_exit 1 -#define USER_SYS_read 3 -#define USER_SYS_write 4 -#define USER_SYS_close 6 -#define USER_SYS_unlink 10 -#define USER_SYS_time 13 -#define USER_SYS_getpid 20 -#define USER_SYS_access 33 -#define USER_SYS_times 43 -#define USER_SYS_brk 45 -#define USER_SYS_ioctl 54 -#define USER_SYS_getrusage 77 -#define USER_SYS_gettimeofday 78 -#define USER_SYS_readlink 85 -#define USER_SYS_munmap 91 -#define USER_SYS_sysinfo 116 -#define USER_SYS_uname 122 -#define USER_SYS_llseek 140 -#define USER_SYS_writev 146 -#define USER_SYS_mremap 163 -#define USER_SYS_sigaction 174 -#define USER_SYS_getcwd 183 -#define USER_SYS_getrlimit 191 -#define USER_SYS_mmap2 192 -#define USER_SYS_ftruncate64 194 -#define USER_SYS_stat64 195 -#define USER_SYS_lstat64 196 -#define USER_SYS_fstat64 197 -#define USER_SYS_getuid 199 -#define USER_SYS_getgid 200 -#define USER_SYS_geteuid 201 -#define USER_SYS_getegid 202 -#define USER_SYS_fcntl 221 -#define USER_SYS_set_thread_area 243 -#define USER_SYS_clock_gettime 265 -#define USER_SYS_openat 295 -#define USER_SYS_prlimit64 340 - - -struct user_stat64 { - uint64_t st_dev; - unsigned char __pad0[4]; - uint32_t __st_ino; - unsigned int st_mode; - unsigned int st_nlink; - uint32_t st_uid; - uint32_t st_gid; - uint64_t st_rdev; - unsigned char __pad3[4]; - long long st_size; - uint32_t st_blksize; - uint64_t st_blocks; /* Number 512-byte blocks allocated. */ - uint32_t target_st_atime; - uint32_t target_st_atime_nsec; - uint32_t target_st_mtime; - uint32_t target_st_mtime_nsec; - uint32_t target_st_ctime; - uint32_t target_st_ctime_nsec; - unsigned long long st_ino; -} __attribute__((packed)); - -static inline void translate_stat64(struct stat *hostbuf, struct user_stat64 *userbuf) { - userbuf->st_dev = hostbuf->st_dev; - userbuf->__st_ino = hostbuf->st_ino; - userbuf->st_mode = hostbuf->st_mode; - userbuf->st_nlink = hostbuf->st_nlink; - userbuf->st_uid = hostbuf->st_uid; - userbuf->st_gid = hostbuf->st_gid; - userbuf->st_rdev = hostbuf->st_rdev; - userbuf->st_size = hostbuf->st_size; - userbuf->st_blksize = hostbuf->st_blksize; - userbuf->st_blocks = hostbuf->st_blocks; - userbuf->target_st_atime = hostbuf->st_atime; - userbuf->target_st_atime_nsec = hostbuf->st_atim.tv_nsec; - userbuf->target_st_mtime = hostbuf->st_mtime; - userbuf->target_st_mtime_nsec = hostbuf->st_mtim.tv_nsec; - userbuf->target_st_ctime = hostbuf->st_ctime; - userbuf->target_st_ctime_nsec = hostbuf->st_ctim.tv_nsec; - userbuf->st_ino = hostbuf->st_ino; -} - -struct user_desc { - uint32_t entry_number; - vaddr_t base_addr; - uint32_t limit; - uint32_t seg_32bit:1; - uint32_t contents:2; - uint32_t read_exec_only:1; - uint32_t limit_in_pages:1; - uint32_t seg_not_present:1; - uint32_t useable:1; -}; - -struct user_sysinfo { - sword_t uptime; - word_t loads[3]; - word_t totalram; - word_t freeram; - word_t sharedram; - word_t bufferram; - word_t totalswap; - word_t freeswap; - uint16_t procs; - uint16_t pad; - word_t totalhigh; - word_t freehigh; - uint32_t mem_unit; - char _f[20-2*sizeof(long)-sizeof(int)]; -}; - -static inline void translate_sysinfo(struct sysinfo *host_info, struct user_sysinfo *user_info) { - user_info->uptime = host_info->uptime; - user_info->loads[0] = host_info->loads[0]; - user_info->loads[1] = host_info->loads[1]; - user_info->loads[2] = host_info->loads[2]; - user_info->totalram = host_info->totalram; - user_info->freeram = host_info->freeram; - user_info->sharedram = host_info->sharedram; - user_info->bufferram = host_info->bufferram; - user_info->totalswap = host_info->totalswap; - user_info->freeswap = host_info->freeswap; - user_info->procs = host_info->procs; - user_info->pad = host_info->pad; - user_info->totalhigh = host_info->totalhigh; - user_info->freehigh = host_info->freehigh; - user_info->mem_unit = host_info->mem_unit; -} - -struct user_timespec { - sword_t tv_sec; - sword_t tv_nsec; -}; - -static inline void translate_timespec(struct timespec *host_tp, struct user_timespec *user_tp) { - user_tp->tv_sec = host_tp->tv_sec; - user_tp->tv_nsec = host_tp->tv_nsec; -} - -struct user_timeval { - sword_t tv_sec; - sword_t tv_usec; -}; - -static inline void translate_timeval(struct timeval *host_tv, struct user_timeval *user_tv) { - user_tv->tv_sec = host_tv->tv_sec; - user_tv->tv_usec = host_tv->tv_usec; -} - -struct user_tms{ - sword_t tms_utime; - sword_t tms_stime; - sword_t tms_cutime; - sword_t tms_cstime; -}; - -static inline void translate_tms(struct tms *host_tms, struct user_tms *user_tms) { - user_tms->tms_utime = host_tms->tms_utime; - user_tms->tms_stime = host_tms->tms_stime; - user_tms->tms_cutime = host_tms->tms_cutime; - user_tms->tms_cstime = host_tms->tms_cstime; -} - -struct user_iovec { - word_t iov_base; - word_t iov_len; -}; - -static inline void translate_iovec(struct iovec *host_iov, struct user_iovec *user_iov) { - host_iov->iov_base = user_to_host(user_iov->iov_base); - host_iov->iov_len = user_iov->iov_len; -} - -struct user_rusage { - struct user_timeval ru_utime; - struct user_timeval ru_stime; - sword_t ru_maxrss; - sword_t ru_ixrss; - sword_t ru_idrss; - sword_t ru_isrss; - sword_t ru_minflt; - sword_t ru_majflt; - sword_t ru_nswap; - sword_t ru_inblock; - sword_t ru_oublock; - sword_t ru_msgsnd; - sword_t ru_msgrcv; - sword_t ru_nsignals; - sword_t ru_nvcsw; - sword_t ru_nivcsw; -}; - -static inline void translate_rusage(struct rusage *host_usage, struct user_rusage *user_usage) { - translate_timeval(&host_usage->ru_utime, &user_usage->ru_utime); - translate_timeval(&host_usage->ru_stime, &user_usage->ru_stime); - user_usage->ru_maxrss = host_usage->ru_maxrss; - user_usage->ru_ixrss = host_usage->ru_ixrss; - user_usage->ru_idrss = host_usage->ru_idrss; - user_usage->ru_isrss = host_usage->ru_isrss; - user_usage->ru_minflt = host_usage->ru_minflt; - user_usage->ru_majflt = host_usage->ru_majflt; - user_usage->ru_nswap = host_usage->ru_nswap; - user_usage->ru_inblock = host_usage->ru_inblock; - user_usage->ru_oublock = host_usage->ru_oublock; - user_usage->ru_msgsnd = host_usage->ru_msgsnd; - user_usage->ru_msgrcv = host_usage->ru_msgrcv; - user_usage->ru_nsignals = host_usage->ru_nsignals; - user_usage->ru_nvcsw = host_usage->ru_nvcsw; - user_usage->ru_nivcsw = host_usage->ru_nivcsw; -} - -struct user_rlimit { - word_t rlim_cur; - word_t rlim_max; -}; - -static inline void translate_rlimit(struct rlimit *host_rlim, struct user_rlimit *user_rlim) { - user_rlim->rlim_cur = host_rlim->rlim_cur; - user_rlim->rlim_max = host_rlim->rlim_max; -} diff --git a/libraries/NEMU/src/user/syscall.c b/libraries/NEMU/src/user/syscall.c deleted file mode 100644 index bbca15e..0000000 --- a/libraries/NEMU/src/user/syscall.c +++ /dev/null @@ -1,304 +0,0 @@ -#ifndef __cplusplus -#define _GNU_SOURCE -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "user.h" -#include MUXDEF(CONFIG_ISA_x86, "syscall-x86.h", \ - MUXDEF(CONFIG_ISA_mips32, "syscall-mips32.h", \ - MUXDEF(CONFIG_ISA_riscv32, "syscall-riscv32.h", \ - MUXDEF(CONFIG_ISA_riscv64, "syscall-riscv64.h", \ - )))) - - -static inline int user_fd(int fd) { - if (fd >= 0 && fd <= 2) return user_state.std_fd[fd]; - return fd; -} - -static inline sword_t get_syscall_ret(intptr_t ret) { - return (ret == -1) ? -errno : ret; -} - -#if 0 -static inline uint64_t gen_uint64(uint32_t lo, uint32_t hi) { - return ((uint64_t)hi << 32) | lo; -} -#endif - -static inline void user_sys_exit(int status) { - void set_nemu_state(int state, vaddr_t pc, int halt_ret); - set_nemu_state(NEMU_END, cpu.pc, status); - longjmp_exec(NEMU_EXEC_END); -} - -static inline word_t user_sys_brk(word_t new_brk) { - if (new_brk == 0) return user_state.brk; - if (new_brk >= user_state.brk_page) { - uint32_t size = ROUNDUP(new_brk - user_state.brk_page + 1, PAGE_SIZE); - user_mmap(user_to_host(user_state.brk_page), size, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS, -1, 0); - user_state.brk_page += size; - } - user_state.brk = new_brk; - return new_brk; -} - -#ifdef CONFIG_ISA64 -static inline word_t user_sys_fstat(int fd, void *statbuf) { - struct stat buf; - int ret = get_syscall_ret(fstat(fd, &buf)); - if (ret == 0) translate_stat(&buf, (struct user_stat *) statbuf); - return ret; -} - -static inline word_t user_sys_fstatat(int dirfd, - const char *pathname, void *statbuf, int flags) { - struct stat buf; - int ret = get_syscall_ret(fstatat(dirfd, pathname, &buf, flags)); - if (ret == 0) translate_stat(&buf, (struct user_stat *) statbuf); - return ret; -} -#endif - -static inline word_t user_gettimeofday(void *tv, void *tz) { -#ifdef CONFIG_ISA64 - return gettimeofday((struct timeval *) tv, (__timezone_ptr_t) tz); -#else - struct timeval host_tv; - int ret = gettimeofday(&host_tv, tz); - assert(ret == 0); - if (tv != NULL) { translate_timeval(&host_tv, tv); } - return ret; -#endif -} - -static inline word_t user_clock_gettime(clockid_t id, void *tp) { -#ifdef CONFIG_ISA64 - return clock_gettime(id, (struct timespec *) tp); -#else - struct timespec host_tp; - int ret = clock_gettime(id, &host_tp); - assert(ret == 0); - translate_timespec(&host_tp, tp); - return ret; -#endif -} - -static inline word_t user_sysinfo(void *info) { -#ifdef CONFIG_ISA64 - return sysinfo((struct sysinfo *) info); -#else - struct sysinfo host_info; - int ret = sysinfo(&host_info); - assert(ret == 0); - translate_sysinfo(&host_info, info); - return ret; -#endif -} - -static inline word_t user_writev(int fd, void *iov, int iovcnt) { -#ifdef CONFIG_ISA64 - return writev(fd, (const struct iovec*) iov, iovcnt); -#else - struct user_iovec *user_iov = iov; - struct iovec *host_iov = malloc(sizeof(*host_iov) * iovcnt); - assert(host_iov != NULL); - int i; - for (i = 0; i < iovcnt; i ++) { - translate_iovec(&host_iov[i], &user_iov[i]); - } - ssize_t ret = writev(fd, host_iov, iovcnt); - free(host_iov); - return ret; -#endif -} - -static inline word_t user_times(void *buf) { -#ifdef CONFIG_ISA64 - return times((struct tms *) buf); -#else - struct tms host_buf; - clock_t ret = times(&host_buf); - assert(ret != (clock_t)-1); - translate_tms(&host_buf, buf); - return ret; -#endif -} - -static inline word_t user_getrusage(int who, void *usage) { -#ifdef CONFIG_ISA64 - return getrusage(who, (struct rusage *) usage); -#else - struct rusage host_usage; - int ret = getrusage(who, &host_usage); - assert(ret == 0); - translate_rusage(&host_usage, usage); - return ret; -#endif -} - -#if 0 -static inline word_t user_sys_stat64(const char *pathname, void *statbuf) { - struct stat buf; - int ret = get_syscall_ret(stat(pathname, &buf)); - if (ret == 0) translate_stat64(&buf, statbuf); - return ret; -} - -static inline word_t user_sys_lstat64(const char *pathname, void *statbuf) { - struct stat buf; - int ret = get_syscall_ret(lstat(pathname, &buf)); - if (ret == 0) translate_stat64(&buf, statbuf); - return ret; -} -#endif - -#ifndef CONFIG_ISA64 -static inline word_t user_sys_fstat64(int fd, void *statbuf) { - struct stat buf; - int ret = get_syscall_ret(fstat(fd, &buf)); - if (ret == 0) translate_stat64(&buf, statbuf); - return ret; -} -#endif - -#ifdef CONFIG_ISA_x86 -static inline word_t user_set_thread_area(void *u_info) { - struct user_desc *info = u_info; - assert(info->entry_number == -1); - assert(info->seg_32bit); - assert(!info->contents); - assert(!info->read_exec_only); - assert(info->limit_in_pages); - assert(!info->seg_not_present); - assert(info->useable); - extern uint32_t GDT[]; - static int flag = 0; - Assert(flag == 0, "call more than once!"); - flag ++; - GDT[2] = info->base_addr; - info->entry_number = 2; - return 0; -} -#endif - -#if 0 -static inline word_t user_sys_llseek(int fd, uint32_t offset_high, - uint32_t offset_low, uint64_t *result, uint32_t whence) { - off_t ret = lseek(fd, ((off_t)offset_high << 32) | offset_low, whence); - if (ret != (off_t)-1) { - *result = ret; - return 0; - } - return -1; -} - -static inline word_t user_ftruncate64(int fd, uint32_t lo, uint32_t hi) { - return ftruncate(fd, gen_uint64(lo, hi)); -} - -static inline word_t user_getrlimit(int resource, void *rlim) { - struct rlimit host_rlim; - int ret = getrlimit(resource, &host_rlim); - assert(ret == 0); - translate_rlimit(&host_rlim, rlim); - return ret; -} -#endif - -static inline word_t user_prlimit64(pid_t pid, int resource, - const void *new_limit, void *old_limit) { - return prlimit(pid, (enum __rlimit_resource) resource, - (const struct rlimit *) new_limit, (struct rlimit *) old_limit); -} - -uintptr_t host_syscall(uintptr_t id, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, - uintptr_t arg4, uintptr_t arg5, uintptr_t arg6) { - uintptr_t ret = 0; - switch (id) { -#if 0 - case 10: ret = unlink(user_to_host(arg1)); break; - case 13: ret = time(user_to_host(arg1)); break; - case 140: ret = user_sys_llseek(user_fd(arg1), arg2, arg3, user_to_host(arg4), arg5); break; - case 191: ret = user_getrlimit(arg1, user_to_host(arg2)); break; - case 194: ret = user_ftruncate64(user_fd(arg1), arg2, arg3); break; - case 195: return user_sys_stat64(user_to_host(arg1), user_to_host(arg2)); - case 196: return user_sys_lstat64(user_to_host(arg1), user_to_host(arg2)); -#endif - IFDEF(CONFIG_ISA_x86, case USER_SYS_set_thread_area: - ret = user_set_thread_area(user_to_host(arg1)); break); - case USER_SYS_exit_group: - case USER_SYS_exit: user_sys_exit(arg1); break; - case USER_SYS_brk: ret = user_sys_brk(arg1); break; - case USER_SYS_write: ret = write(user_fd(arg1), user_to_host(arg2), arg3); break; - case USER_SYS_uname: ret = uname((struct utsname *) user_to_host(arg1)); break; - case USER_SYS_gettimeofday: ret = user_gettimeofday(user_to_host(arg1), user_to_host(arg2)); break; - case USER_SYS_sysinfo: ret = user_sysinfo(user_to_host(arg1)); break; - case USER_SYS_clock_gettime: ret = user_clock_gettime(arg1, user_to_host(arg2)); break; - case USER_SYS_writev: ret = user_writev(user_fd(arg1), user_to_host(arg2), arg3); break; - case USER_SYS_times: ret = user_times(user_to_host(arg1)); break; - case USER_SYS_getrusage: ret = user_getrusage(arg1, user_to_host(arg2)); break; - case USER_SYS_prlimit64: ret = user_prlimit64(arg1, arg2, user_to_host(arg3), user_to_host(arg4)); break; - case USER_SYS_openat: ret = openat(user_fd(arg1), - (const char *) user_to_host(arg2), arg3, arg4); break; - case USER_SYS_read: ret = read(user_fd(arg1), user_to_host(arg2), arg3); break; - case USER_SYS_close: ret = close(user_fd(arg1)); break; - case USER_SYS_munmap: ret = user_munmap(user_to_host(arg1), arg2); break; -#ifdef CONFIG_ISA64 - case USER_SYS_readlinkat: ret = readlinkat(user_fd(arg1), - (const char*) user_to_host(arg2), (char*) user_to_host(arg3), arg4); break; - case USER_SYS_fstat: ret = user_sys_fstat(user_fd(arg1), user_to_host(arg2)); break; - case USER_SYS_fstatat: ret = user_sys_fstatat(user_fd(arg1), - (const char*) user_to_host(arg2), user_to_host(arg3), arg4); break; - case USER_SYS_mmap: ret = (uintptr_t)user_mmap(user_to_host(arg1), arg2, - arg3, arg4, user_fd(arg5), arg6); break; - case USER_SYS_rt_sigaction: return 0; // not implemented - case USER_SYS_mremap: ret = (uintptr_t)user_mremap(user_to_host(arg1), - arg2, arg3, arg4, user_to_host(arg5)); break; - case USER_SYS_lseek: ret = lseek(user_fd(arg1), arg2, arg3); break; - case USER_SYS_unlinkat: ret = unlinkat(user_fd(arg1), - (const char *) user_to_host(arg2), arg3); break; - case USER_SYS_getcwd: - ret = (uintptr_t)getcwd((char *)user_to_host(arg1), arg2); - assert(ret != 0); // should success - ret = strlen((const char *) user_to_host(arg1)) + 1; - break; - case USER_SYS_getuid: return getuid(); - case USER_SYS_getgid: return getgid(); - case USER_SYS_geteuid: return geteuid(); - case USER_SYS_getegid: return getegid(); - case USER_SYS_ioctl: ret = ioctl(user_fd(arg1), arg2, arg3); break; - case USER_SYS_fcntl: ret = fcntl(user_fd(arg1), arg2, arg3); break; - case USER_SYS_getpid: return getpid(); - case USER_SYS_mprotect: return 0; // not implemented - case USER_SYS_ftruncate: ret = ftruncate(user_fd(arg1), arg2); break; - case USER_SYS_faccessat: ret = faccessat(user_fd(arg1), - (const char *)user_to_host(arg2), arg3, 0); break; -#else - case USER_SYS_readlink: ret = readlink(user_to_host(arg1), user_to_host(arg2), arg3); break; - case USER_SYS_access: ret = access(user_to_host(arg1), arg2); break; - case USER_SYS_fstat64: return user_sys_fstat64(user_fd(arg1), user_to_host(arg2)); - case USER_SYS_mmap2: ret = (uintptr_t)user_mmap(user_to_host(arg1), arg2, - arg3, arg4, user_fd(arg5), arg6 << 12); break; -#endif - default: panic("Unsupported syscall ID = %ld", id); - } - ret = get_syscall_ret(ret); - return ret; -} diff --git a/libraries/NEMU/src/user/user.h b/libraries/NEMU/src/user/user.h deleted file mode 100644 index 789e9f8..0000000 --- a/libraries/NEMU/src/user/user.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef __USER_H__ -#define __USER_H__ - -#ifndef __cplusplus -#define _GNU_SOURCE -#endif - -#include -#include - -typedef struct { - word_t entry; - word_t brk; - word_t brk_page; - word_t program_brk; - word_t phdr; - int phent; - int phnum; - int std_fd[3]; -} user_state_t; - -extern user_state_t user_state; - -void *user_mmap(void *addr, size_t length, int prot, - int flags, int fd, off_t offset); -int user_munmap(void *addr, size_t length); -void *user_mremap(void *old_addr, size_t old_size, size_t new_size, - int flags, void *new_addr); - -static inline uint8_t* user_to_host(word_t uaddr) { - return (uint8_t *)(uintptr_t)uaddr; -} - -static inline word_t host_to_user(void *haddr) { - return (word_t)(uintptr_t)haddr; -} - -#endif diff --git a/libraries/NEMU/src/utils/expr.c b/libraries/NEMU/src/utils/expr.c deleted file mode 100644 index 7ad4d99..0000000 --- a/libraries/NEMU/src/utils/expr.c +++ /dev/null @@ -1,299 +0,0 @@ -#include -#ifndef __ICS_EXPORT -#include -#include -#endif - -/* We use the POSIX regex functions to process regular expressions. - * Type 'man regex' for more information about POSIX regex functions. - */ -#include - -enum { - TK_NOTYPE = 256, TK_EQ, - - /* TODO: Add more token types */ - -#ifndef __ICS_EXPORT - TK_NEQ, TK_OR, TK_AND, TK_NUM, TK_REG, TK_REF, TK_NEG -#endif -}; - -static struct rule { - const char *regex; - int token_type; -} rules[] = { - - /* TODO: Add more rules. - * Pay attention to the precedence level of different rules. - */ - - {" +", TK_NOTYPE}, // spaces - {"\\+", '+'}, // plus - {"==", TK_EQ}, // equal -#ifndef __ICS_EXPORT - {"0x[0-9a-fA-F]{1,16}", TK_NUM}, // hex - {"[0-9]{1,10}", TK_NUM}, // dec - {"\\$[a-z0-9]{1,31}", TK_REG}, // register names - {"\\+", '+'}, - {"-", '-'}, - {"\\*", '*'}, - {"/", '/'}, - {"%", '%'}, - {"==", TK_EQ}, - {"!=", TK_NEQ}, - {"&&", TK_AND}, - {"\\|\\|", TK_OR}, - {"!", '!'}, - {"\\(", '('}, - {"\\)", ')'} -#endif -}; - -#define NR_REGEX ARRLEN(rules) - -static regex_t re[NR_REGEX] = {}; - -/* Rules are used for many times. - * Therefore we compile them only once before any usage. - */ -void init_regex() { - int i; - char error_msg[128]; - int ret; - - for (i = 0; i < NR_REGEX; i ++) { - ret = regcomp(&re[i], rules[i].regex, REG_EXTENDED); - if (ret != 0) { - regerror(ret, &re[i], error_msg, 128); - panic("regex compilation failed: %s\n%s", error_msg, rules[i].regex); - } - } -} - -typedef struct token { - int type; - char str[32]; -} Token; - -static Token tokens[32] __attribute__((used)) = {}; -static int nr_token __attribute__((used)) = 0; - -static bool make_token(char *e) { - int position = 0; - int i; - regmatch_t pmatch; - - nr_token = 0; - - while (e[position] != '\0') { - /* Try all rules one by one. */ - for (i = 0; i < NR_REGEX; i ++) { - if (regexec(&re[i], e + position, 1, &pmatch, 0) == 0 && pmatch.rm_so == 0) { - char *substr_start = e + position; - int substr_len = pmatch.rm_eo; - -#ifdef __ICS_EXPORT - Log("match rules[%d] = \"%s\" at position %d with len %d: %.*s", - i, rules[i].regex, position, substr_len, substr_len, substr_start); -#else - //Log("match rules[%d] = \"%s\" at position %d with len %d: %.*s", - // i, rules[i].regex, position, substr_len, substr_len, substr_start); -#endif - - position += substr_len; - - /* TODO: Now a new token is recognized with rules[i]. Add codes - * to record the token in the array `tokens'. For certain types - * of tokens, some extra actions should be performed. - */ - - switch (rules[i].token_type) { -#ifdef __ICS_EXPORT - default: TODO(); -#else - case TK_NOTYPE: break; - case TK_NUM: - case TK_REG: sprintf(tokens[nr_token].str, "%.*s", substr_len, substr_start); - default: tokens[nr_token].type = rules[i].token_type; - nr_token ++; -#endif - } - - break; - } - } - - if (i == NR_REGEX) { - printf("no match at position %d\n%s\n%*.s^\n", position, e, position, ""); - return false; - } - } - - return true; -} - -#ifndef __ICS_EXPORT -static int op_prec(int t) { - switch (t) { - case '!': case TK_NEG: case TK_REF: return 0; - case '*': case '/': case '%': return 1; - case '+': case '-': return 2; - case TK_EQ: case TK_NEQ: return 4; - case TK_AND: return 8; - case TK_OR: return 9; - default: assert(0); - } -} - -static inline int op_prec_cmp(int t1, int t2) { - return op_prec(t1) - op_prec(t2); -} - -static int find_dominated_op(int s, int e, bool *success) { - int i; - int bracket_level = 0; - int dominated_op = -1; - for (i = s; i <= e; i ++) { - switch (tokens[i].type) { - case TK_REG: case TK_NUM: break; - - case '(': - bracket_level ++; - break; - - case ')': - bracket_level --; - if (bracket_level < 0) { - *success = false; - return 0; - } - break; - - default: - if (bracket_level == 0) { - if (dominated_op == -1 || - op_prec_cmp(tokens[dominated_op].type, tokens[i].type) < 0 || - (op_prec_cmp(tokens[dominated_op].type, tokens[i].type) == 0 && - tokens[i].type != '!' && tokens[i].type != '~' && - tokens[i].type != TK_NEG && tokens[i].type != TK_REF) ) { - dominated_op = i; - } - } - break; - } - } - - *success = (dominated_op != -1); - return dominated_op; -} - -static rtlreg_t eval(int s, int e, bool *success) { - if (s > e) { - // bad expression - *success = false; - return 0; - } - else if (s == e) { - // single token - rtlreg_t val; - switch (tokens[s].type) { - case TK_REG: val = isa_reg_str2val(tokens[s].str + 1, success); // +1 to skip '$' - if (!*success) { return 0; } - break; - - case TK_NUM: val = strtoul(tokens[s].str, NULL, 0); break; - default: assert(0); - } - - *success = true; - return val; - } - else if (tokens[s].type == '(' && tokens[e].type == ')') { - return eval(s + 1, e - 1, success); - } - else { - int dominated_op = find_dominated_op(s, e, success); - if (!*success) { return 0; } - - int op_type = tokens[dominated_op].type; - if (op_type == '!' || op_type == TK_NEG || op_type == TK_REF) { - rtlreg_t val = eval(dominated_op + 1, e, success); - if (!*success) { return 0; } - - switch (op_type) { - case '!': return !val; - case TK_NEG: return -val; - case TK_REF: return vaddr_read_safe(val, 4); - default: assert(0); - } - } - - rtlreg_t val1 = eval(s, dominated_op - 1, success); - if (!*success) { return 0; } - rtlreg_t val2 = eval(dominated_op + 1, e, success); - if (!*success) { return 0; } - - switch (op_type) { - case '+': return val1 + val2; - case '-': return val1 - val2; - case '*': return val1 * val2; - case '/': return val1 / val2; - case '%': return val1 % val2; - case TK_EQ: return val1 == val2; - case TK_NEQ: return val1 != val2; - case TK_AND: return val1 && val2; - case TK_OR: return val1 || val2; - default: assert(0); - } - } -} -#endif - -word_t expr(char *e, bool *success) { - if (!make_token(e)) { - *success = false; - return 0; - } - - /* TODO: Insert codes to evaluate the expression. */ -#ifdef __ICS_EXPORT - TODO(); - - return 0; -#else - - /* Detect TK_REF and TK_NEG tokens */ - int i; - int prev_type; - for (i = 0; i < nr_token; i ++) { - if (tokens[i].type == '-') { - if (i == 0) { - tokens[i].type = TK_NEG; - continue; - } - - prev_type = tokens[i - 1].type; - if ( !(prev_type == ')' || prev_type == TK_NUM || - prev_type == TK_REG) ) { - tokens[i].type = TK_NEG; - } - } - - else if (tokens[i].type == '*') { - if (i == 0) { - tokens[i].type = TK_REF; - continue; - } - - prev_type = tokens[i - 1].type; - if ( !(prev_type == ')' || prev_type == TK_NUM || - prev_type == TK_REG) ) { - tokens[i].type = TK_REF; - } - } - } - - return eval(0, nr_token - 1, success); -#endif -} diff --git a/libraries/NEMU/src/utils/iqueue.c b/libraries/NEMU/src/utils/iqueue.c deleted file mode 100644 index 1cf8274..0000000 --- a/libraries/NEMU/src/utils/iqueue.c +++ /dev/null @@ -1,33 +0,0 @@ -#include - -#define INSTR_QUEUE_SIZE (1 << 5) - -static struct { - vaddr_t pc; - uint8_t instr[20]; - uint8_t ilen; -} iqueue[INSTR_QUEUE_SIZE]; -static uint32_t q_idx = 0; - -void iqueue_commit(vaddr_t pc, uint8_t *instr_buf, uint8_t ilen) { - iqueue[q_idx].pc = pc; - iqueue[q_idx].ilen = ilen; - assert(ilen < 20); - memcpy(iqueue[q_idx].instr, instr_buf, ilen); - q_idx = (q_idx + 1) % INSTR_QUEUE_SIZE; -} - -void iqueue_dump() { - int i; - int victim_idx = (q_idx - 1) % INSTR_QUEUE_SIZE; - printf("======== instruction queue =========\n"); - for (i = 0; i < INSTR_QUEUE_SIZE; i ++) { - printf("%5s " FMT_WORD ": ", (i == victim_idx ? "-->" : ""), iqueue[i].pc); - int j; - for (j = 0; j < iqueue[i].ilen; j ++) { - printf("%02x ", iqueue[i].instr[j]); - } - printf("\n"); - } - printf("======== instruction queue end =========\n"); -} diff --git a/libraries/NEMU/src/utils/log.c b/libraries/NEMU/src/utils/log.c deleted file mode 100644 index 10efab5..0000000 --- a/libraries/NEMU/src/utils/log.c +++ /dev/null @@ -1,22 +0,0 @@ -#include - -// control when the log is printed, unit: number of instructions -#define LOG_START (0) -// restrict the size of log file -#define LOG_END (1024 * 1024 * 50) - -FILE *log_fp = NULL; - -void init_log(const char *log_file) { - if (log_file == NULL) return; - log_fp = fopen(log_file, "w"); - Assert(log_fp, "Can not open '%s'", log_file); -} - -bool log_enable() { - extern uint64_t g_nr_guest_instr; - return (g_nr_guest_instr >= LOG_START) && (g_nr_guest_instr <= LOG_END); -} - -char log_bytebuf[80] = {}; -char log_asmbuf[80] = {}; diff --git a/libraries/NEMU/src/utils/state.c b/libraries/NEMU/src/utils/state.c deleted file mode 100644 index 1526cf7..0000000 --- a/libraries/NEMU/src/utils/state.c +++ /dev/null @@ -1,9 +0,0 @@ -#include - -NEMUState nemu_state = { .state = NEMU_STOP }; - -int is_exit_status_bad() { - int good = (nemu_state.state == NEMU_END && nemu_state.halt_ret == 0) || - (nemu_state.state == NEMU_QUIT); - return !good; -} diff --git a/libraries/NEMU/src/utils/timer.c b/libraries/NEMU/src/utils/timer.c deleted file mode 100644 index ca8c845..0000000 --- a/libraries/NEMU/src/utils/timer.c +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include MUXDEF(CONFIG_TIMER_GETTIMEOFDAY, , ) - -IFDEF(CONFIG_TIMER_CLOCK_GETTIME, - static_assert(CLOCKS_PER_SEC == 1000000, "CLOCKS_PER_SEC != 1000000")); -IFDEF(CONFIG_TIMER_CLOCK_GETTIME, - static_assert(sizeof(clock_t) == 8, "sizeof(clock_t) != 8")); - -static uint64_t boot_time = 0; - -static uint64_t get_time_internal() { -#ifdef CONFIG_TIMER_GETTIMEOFDAY - struct timeval now; - gettimeofday(&now, NULL); - uint64_t us = now.tv_sec * 1000000 + now.tv_usec; -#else - struct timespec now; - clock_gettime(CLOCK_MONOTONIC_COARSE, &now); - uint64_t us = now.tv_sec * 1000000 + now.tv_nsec / 1000; -#endif - return us; -} - -uint64_t get_time() { - if (boot_time == 0) boot_time = get_time_internal(); - uint64_t now = get_time_internal(); - return now - boot_time; -} diff --git a/libraries/NEMU/tools/export/.gitignore b/libraries/NEMU/tools/export/.gitignore deleted file mode 100644 index ea1472e..0000000 --- a/libraries/NEMU/tools/export/.gitignore +++ /dev/null @@ -1 +0,0 @@ -output/ diff --git a/libraries/NEMU/tools/fixdep/Makefile b/libraries/NEMU/tools/fixdep/Makefile deleted file mode 100644 index b8641b0..0000000 --- a/libraries/NEMU/tools/fixdep/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -NAME = fixdep -SRCS = fixdep.c -include $(NEMU_HOME)/scripts/build.mk diff --git a/libraries/NEMU/tools/fixdep/fixdep.c b/libraries/NEMU/tools/fixdep/fixdep.c deleted file mode 100644 index d985405..0000000 --- a/libraries/NEMU/tools/fixdep/fixdep.c +++ /dev/null @@ -1,404 +0,0 @@ -/* - * "Optimize" a list of dependencies as spit out by gcc -MD - * for the kernel build - * =========================================================================== - * - * Author Kai Germaschewski - * Copyright 2002 by Kai Germaschewski - * - * This software may be used and distributed according to the terms - * of the GNU General Public License, incorporated herein by reference. - * - * - * Introduction: - * - * gcc produces a very nice and correct list of dependencies which - * tells make when to remake a file. - * - * To use this list as-is however has the drawback that virtually - * every file in the kernel includes autoconf.h. - * - * If the user re-runs make *config, autoconf.h will be - * regenerated. make notices that and will rebuild every file which - * includes autoconf.h, i.e. basically all files. This is extremely - * annoying if the user just changed CONFIG_HIS_DRIVER from n to m. - * - * So we play the same trick that "mkdep" played before. We replace - * the dependency on autoconf.h by a dependency on every config - * option which is mentioned in any of the listed prerequisites. - * - * kconfig populates a tree in include/config/ with an empty file - * for each config symbol and when the configuration is updated - * the files representing changed config options are touched - * which then let make pick up the changes and the files that use - * the config symbols are rebuilt. - * - * So if the user changes his CONFIG_HIS_DRIVER option, only the objects - * which depend on "include/config/his/driver.h" will be rebuilt, - * so most likely only his driver ;-) - * - * The idea above dates, by the way, back to Michael E Chastain, AFAIK. - * - * So to get dependencies right, there are two issues: - * o if any of the files the compiler read changed, we need to rebuild - * o if the command line given to the compile the file changed, we - * better rebuild as well. - * - * The former is handled by using the -MD output, the later by saving - * the command line used to compile the old object and comparing it - * to the one we would now use. - * - * Again, also this idea is pretty old and has been discussed on - * kbuild-devel a long time ago. I don't have a sensibly working - * internet connection right now, so I rather don't mention names - * without double checking. - * - * This code here has been based partially based on mkdep.c, which - * says the following about its history: - * - * Copyright abandoned, Michael Chastain, . - * This is a C version of syncdep.pl by Werner Almesberger. - * - * - * It is invoked as - * - * fixdep - * - * and will read the dependency file - * - * The transformed dependency snipped is written to stdout. - * - * It first generates a line - * - * cmd_ = - * - * and then basically copies the ..d file to stdout, in the - * process filtering out the dependency on autoconf.h and adding - * dependencies on include/config/my/option.h for every - * CONFIG_MY_OPTION encountered in any of the prerequisites. - * - * We don't even try to really parse the header files, but - * merely grep, i.e. if CONFIG_FOO is mentioned in a comment, it will - * be picked up as well. It's not a problem with respect to - * correctness, since that can only give too many dependencies, thus - * we cannot miss a rebuild. Since people tend to not mention totally - * unrelated CONFIG_ options all over the place, it's not an - * efficiency problem either. - * - * (Note: it'd be easy to port over the complete mkdep state machine, - * but I don't think the added complexity is worth it) - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static void usage(void) -{ - fprintf(stderr, "Usage: fixdep \n"); - exit(1); -} - -/* - * In the intended usage of this program, the stdout is redirected to .*.cmd - * files. The return value of printf() and putchar() must be checked to catch - * any error, e.g. "No space left on device". - */ -static void xprintf(const char *format, ...) -{ - va_list ap; - int ret; - - va_start(ap, format); - ret = vprintf(format, ap); - if (ret < 0) { - perror("fixdep"); - exit(1); - } - va_end(ap); -} - -static void xputchar(int c) -{ - int ret; - - ret = putchar(c); - if (ret == EOF) { - perror("fixdep"); - exit(1); - } -} - -/* - * Print out a dependency path from a symbol name - */ -static void print_dep(const char *m, int slen, const char *dir) -{ - int c, prev_c = '/', i; - - xprintf(" $(wildcard %s/", dir); - for (i = 0; i < slen; i++) { - c = m[i]; - if (c == '_') - c = '/'; - else - c = tolower(c); - if (c != '/' || prev_c != '/') - xputchar(c); - prev_c = c; - } - xprintf(".h) \\\n"); -} - -struct item { - struct item *next; - unsigned int len; - unsigned int hash; - char name[]; -}; - -#define HASHSZ 256 -static struct item *hashtab[HASHSZ]; - -static unsigned int strhash(const char *str, unsigned int sz) -{ - /* fnv32 hash */ - unsigned int i, hash = 2166136261U; - - for (i = 0; i < sz; i++) - hash = (hash ^ str[i]) * 0x01000193; - return hash; -} - -/* - * Lookup a value in the configuration string. - */ -static int is_defined_config(const char *name, int len, unsigned int hash) -{ - struct item *aux; - - for (aux = hashtab[hash % HASHSZ]; aux; aux = aux->next) { - if (aux->hash == hash && aux->len == len && - memcmp(aux->name, name, len) == 0) - return 1; - } - return 0; -} - -/* - * Add a new value to the configuration string. - */ -static void define_config(const char *name, int len, unsigned int hash) -{ - struct item *aux = malloc(sizeof(*aux) + len); - - if (!aux) { - perror("fixdep:malloc"); - exit(1); - } - memcpy(aux->name, name, len); - aux->len = len; - aux->hash = hash; - aux->next = hashtab[hash % HASHSZ]; - hashtab[hash % HASHSZ] = aux; -} - -/* - * Record the use of a CONFIG_* word. - */ -static void use_config(const char *m, int slen) -{ - unsigned int hash = strhash(m, slen); - - if (is_defined_config(m, slen, hash)) - return; - - define_config(m, slen, hash); - print_dep(m, slen, "include/config"); -} - -/* test if s ends in sub */ -static int str_ends_with(const char *s, int slen, const char *sub) -{ - int sublen = strlen(sub); - - if (sublen > slen) - return 0; - - return !memcmp(s + slen - sublen, sub, sublen); -} - -static void parse_config_file(const char *p) -{ - const char *q, *r; - const char *start = p; - - while ((p = strstr(p, "CONFIG_"))) { - if (p > start && (isalnum(p[-1]) || p[-1] == '_')) { - p += 7; - continue; - } - p += 7; - q = p; - while (isalnum(*q) || *q == '_') - q++; - if (str_ends_with(p, q - p, "_MODULE")) - r = q - 7; - else - r = q; - if (r > p) - use_config(p, r - p); - p = q; - } -} - -static void *read_file(const char *filename) -{ - struct stat st; - int fd; - char *buf; - - fd = open(filename, O_RDONLY); - if (fd < 0) { - fprintf(stderr, "fixdep: error opening file: "); - perror(filename); - exit(2); - } - if (fstat(fd, &st) < 0) { - fprintf(stderr, "fixdep: error fstat'ing file: "); - perror(filename); - exit(2); - } - buf = malloc(st.st_size + 1); - if (!buf) { - perror("fixdep: malloc"); - exit(2); - } - if (read(fd, buf, st.st_size) != st.st_size) { - perror("fixdep: read"); - exit(2); - } - buf[st.st_size] = '\0'; - close(fd); - - return buf; -} - -/* Ignore certain dependencies */ -static int is_ignored_file(const char *s, int len) -{ - return str_ends_with(s, len, "include/generated/autoconf.h") || - str_ends_with(s, len, "include/generated/autoksyms.h"); -} - -/* - * Important: The below generated source_foo.o and deps_foo.o variable - * assignments are parsed not only by make, but also by the rather simple - * parser in scripts/mod/sumversion.c. - */ -static void parse_dep_file(char *m, const char *target) -{ - char *p; - int is_last, is_target; - int saw_any_target = 0; - int is_first_dep = 0; - void *buf; - - while (1) { - /* Skip any "white space" */ - while (*m == ' ' || *m == '\\' || *m == '\n') - m++; - - if (!*m) - break; - - /* Find next "white space" */ - p = m; - while (*p && *p != ' ' && *p != '\\' && *p != '\n') - p++; - is_last = (*p == '\0'); - /* Is the token we found a target name? */ - is_target = (*(p-1) == ':'); - /* Don't write any target names into the dependency file */ - if (is_target) { - /* The /next/ file is the first dependency */ - is_first_dep = 1; - } else if (!is_ignored_file(m, p - m)) { - *p = '\0'; - - /* - * Do not list the source file as dependency, so that - * kbuild is not confused if a .c file is rewritten - * into .S or vice versa. Storing it in source_* is - * needed for modpost to compute srcversions. - */ - if (is_first_dep) { - /* - * If processing the concatenation of multiple - * dependency files, only process the first - * target name, which will be the original - * source name, and ignore any other target - * names, which will be intermediate temporary - * files. - */ - if (!saw_any_target) { - saw_any_target = 1; - xprintf("source_%s := %s\n\n", - target, m); - xprintf("deps_%s := \\\n", target); - } - is_first_dep = 0; - } else { - xprintf(" %s \\\n", m); - } - - buf = read_file(m); - parse_config_file(buf); - free(buf); - } - - if (is_last) - break; - - /* - * Start searching for next token immediately after the first - * "whitespace" character that follows this token. - */ - m = p + 1; - } - - if (!saw_any_target) { - fprintf(stderr, "fixdep: parse error; no targets found\n"); - exit(1); - } - - xprintf("\n%s: $(deps_%s)\n\n", target, target); - xprintf("$(deps_%s):\n", target); -} - -int main(int argc, char *argv[]) -{ - const char *depfile, *target, *cmdline; - void *buf; - - if (argc != 4) - usage(); - - depfile = argv[1]; - target = argv[2]; - cmdline = argv[3]; - - xprintf("cmd_%s := %s\n\n", target, cmdline); - - buf = read_file(depfile); - parse_dep_file(buf, target); - free(buf); - - return 0; -} diff --git a/libraries/NEMU/tools/gen-expr/.gitignore b/libraries/NEMU/tools/gen-expr/.gitignore deleted file mode 100644 index 90b7a4a..0000000 --- a/libraries/NEMU/tools/gen-expr/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.code.c diff --git a/libraries/NEMU/tools/gen-expr/Makefile b/libraries/NEMU/tools/gen-expr/Makefile deleted file mode 100644 index 051bbc8..0000000 --- a/libraries/NEMU/tools/gen-expr/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -NAME = gen-expr -SRCS = gen-expr.c -include $(NEMU_HOME)/scripts/build.mk diff --git a/libraries/NEMU/tools/gen-expr/gen-expr.c b/libraries/NEMU/tools/gen-expr/gen-expr.c deleted file mode 100644 index ed4426d..0000000 --- a/libraries/NEMU/tools/gen-expr/gen-expr.c +++ /dev/null @@ -1,132 +0,0 @@ -#include -#include -#include -#include -#include -#include - -// this should be enough -static char buf[65536] = {}; -static char code_buf[65536 + 128] = {}; // a little larger than `buf` -static char *code_format = -"#include \n" -"int main() { " -" unsigned result = %s; " -" printf(\"%%u\", result); " -" return 0; " -"}"; - -#ifdef __ICS_EXPORT -static inline void gen_rand_expr() { - buf[0] = '\0'; -} -#else -static char *pbuf; - -#define format_buf(fmt, ...) pbuf += sprintf(pbuf, fmt, ##__VA_ARGS__) - -static inline uint32_t choose(uint32_t max) { - return rand() % max; -} - -static inline void gen_rand_op() { - char op_list[] = {'+', '-', '*', '/', '+', '-', '*'}; - format_buf("%c", op_list[choose(7)]); -} - -static inline void gen_num() { - format_buf("%uu", rand()); -} - -static inline void gen_space() { - char *space_list[3] = { - "", - " ", - " ", - }; - format_buf("%s", space_list[choose(3)]); -} - -static int nr_op = 0; - -static inline void gen_rand_expr() { - gen_space(); - switch (choose(3)) { - default: - if (nr_op == 0) gen_rand_expr(); - else gen_num(); - break; - case 1: - format_buf("("); - gen_rand_expr(); - format_buf(")"); - break; - case 0: - nr_op ++; - if (pbuf - buf >= sizeof(buf) / 2) { - gen_num(); - break; - } - gen_rand_expr(); - gen_space(); - gen_rand_op(); - gen_space(); - gen_rand_expr(); - break; - } - gen_space(); -} - -void remove_u(char *p) { - char *q = p; - while ((q = strchr(q, 'u')) != NULL) { - // reuse code_buf - strcpy(code_buf, q + 1); - strcpy(q, code_buf); - } -} -#endif - -int main(int argc, char *argv[]) { - int seed = time(0); - srand(seed); - int loop = 1; - if (argc > 1) { - sscanf(argv[1], "%d", &loop); - } - int i; - for (i = 0; i < loop; i ++) { -#ifndef __ICS_EXPORT - nr_op = 0; - pbuf = buf; -#endif - gen_rand_expr(); - - sprintf(code_buf, code_format, buf); - - FILE *fp = fopen("/tmp/.code.c", "w"); - assert(fp != NULL); - fputs(code_buf, fp); - fclose(fp); - - int ret = system("gcc /tmp/.code.c -o /tmp/.expr"); - if (ret != 0) continue; - - fp = popen("/tmp/.expr", "r"); - assert(fp != NULL); - - int result; - fscanf(fp, "%d", &result); -#ifndef __ICS_EXPORT - ret = pclose(fp); - if (ret != 0) continue; - - remove_u(buf); -#else - pclose(fp); -#endif - - printf("%u %s\n", result, buf); - } - return 0; -} diff --git a/libraries/NEMU/tools/kconfig/.gitignore b/libraries/NEMU/tools/kconfig/.gitignore deleted file mode 100644 index 14779be..0000000 --- a/libraries/NEMU/tools/kconfig/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -build/ -!lexer.l -!parser.y diff --git a/libraries/NEMU/tools/kconfig/Makefile b/libraries/NEMU/tools/kconfig/Makefile deleted file mode 100644 index 85ea807..0000000 --- a/libraries/NEMU/tools/kconfig/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -NAME = conf -obj := build -SRCS += confdata.c expr.c preprocess.c symbol.c util.c -SRCS += $(obj)/lexer.lex.c $(obj)/parser.tab.c -CFLAGS += -DYYDEBUG -INC_DIR += . - -ifeq ($(NAME),conf) -SRCS += conf.c -else ifeq ($(NAME),mconf) -SRCS += mconf.c $(shell find lxdialog/ -name "*.c") -LIBS += -lncurses -ltinfo -else -$(error bad target=$(NAME)) -endif - -include $(NEMU_HOME)/scripts/build.mk - -$(obj)/lexer.lex.o: $(obj)/parser.tab.h -$(obj)/lexer.lex.c: lexer.l $(obj)/parser.tab.h - @echo + LEX $@ - @flex -o $@ $< - -$(obj)/parser.tab.c $(obj)/parser.tab.h: parser.y - @echo + YACC $@ - @bison -v $< --defines=$(obj)/parser.tab.h -o $(obj)/parser.tab.c - -conf: - @$(MAKE) -s - -mconf: - @$(MAKE) -s NAME=mconf - -.PHONY: conf mconf diff --git a/libraries/NEMU/tools/kconfig/conf.c b/libraries/NEMU/tools/kconfig/conf.c deleted file mode 100644 index f6e548b..0000000 --- a/libraries/NEMU/tools/kconfig/conf.c +++ /dev/null @@ -1,727 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Copyright (C) 2002 Roman Zippel - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "lkc.h" - -static void conf(struct menu *menu); -static void check_conf(struct menu *menu); - -enum input_mode { - oldaskconfig, - syncconfig, - oldconfig, - allnoconfig, - allyesconfig, - allmodconfig, - alldefconfig, - randconfig, - defconfig, - savedefconfig, - listnewconfig, - helpnewconfig, - olddefconfig, - yes2modconfig, - mod2yesconfig, -}; -static enum input_mode input_mode = oldaskconfig; - -static int indent = 1; -static int tty_stdio; -static int sync_kconfig; -static int conf_cnt; -static char line[PATH_MAX]; -static struct menu *rootEntry; - -static void print_help(struct menu *menu) -{ - struct gstr help = str_new(); - - menu_get_ext_help(menu, &help); - - printf("\n%s\n", str_get(&help)); - str_free(&help); -} - -static void strip(char *str) -{ - char *p = str; - int l; - - while ((isspace(*p))) - p++; - l = strlen(p); - if (p != str) - memmove(str, p, l + 1); - if (!l) - return; - p = str + l - 1; - while ((isspace(*p))) - *p-- = 0; -} - -/* Helper function to facilitate fgets() by Jean Sacren. */ -static void xfgets(char *str, int size, FILE *in) -{ - if (!fgets(str, size, in)) - fprintf(stderr, "\nError in reading or end of file.\n"); - - if (!tty_stdio) - printf("%s", str); -} - -static int conf_askvalue(struct symbol *sym, const char *def) -{ - enum symbol_type type = sym_get_type(sym); - - if (!sym_has_value(sym)) - printf("(NEW) "); - - line[0] = '\n'; - line[1] = 0; - - if (!sym_is_changeable(sym)) { - printf("%s\n", def); - line[0] = '\n'; - line[1] = 0; - return 0; - } - - switch (input_mode) { - case oldconfig: - case syncconfig: - if (sym_has_value(sym)) { - printf("%s\n", def); - return 0; - } - /* fall through */ - case oldaskconfig: - fflush(stdout); - xfgets(line, sizeof(line), stdin); - return 1; - default: - break; - } - - switch (type) { - case S_INT: - case S_HEX: - case S_STRING: - printf("%s\n", def); - return 1; - default: - ; - } - printf("%s", line); - return 1; -} - -static int conf_string(struct menu *menu) -{ - struct symbol *sym = menu->sym; - const char *def; - - while (1) { - printf("%*s%s ", indent - 1, "", menu->prompt->text); - printf("(%s) ", sym->name); - def = sym_get_string_value(sym); - if (sym_get_string_value(sym)) - printf("[%s] ", def); - if (!conf_askvalue(sym, def)) - return 0; - switch (line[0]) { - case '\n': - break; - case '?': - /* print help */ - if (line[1] == '\n') { - print_help(menu); - def = NULL; - break; - } - /* fall through */ - default: - line[strlen(line)-1] = 0; - def = line; - } - if (def && sym_set_string_value(sym, def)) - return 0; - } -} - -static int conf_sym(struct menu *menu) -{ - struct symbol *sym = menu->sym; - tristate oldval, newval; - - while (1) { - printf("%*s%s ", indent - 1, "", menu->prompt->text); - if (sym->name) - printf("(%s) ", sym->name); - putchar('['); - oldval = sym_get_tristate_value(sym); - switch (oldval) { - case no: - putchar('N'); - break; - case mod: - putchar('M'); - break; - case yes: - putchar('Y'); - break; - } - if (oldval != no && sym_tristate_within_range(sym, no)) - printf("/n"); - if (oldval != mod && sym_tristate_within_range(sym, mod)) - printf("/m"); - if (oldval != yes && sym_tristate_within_range(sym, yes)) - printf("/y"); - printf("/?] "); - if (!conf_askvalue(sym, sym_get_string_value(sym))) - return 0; - strip(line); - - switch (line[0]) { - case 'n': - case 'N': - newval = no; - if (!line[1] || !strcmp(&line[1], "o")) - break; - continue; - case 'm': - case 'M': - newval = mod; - if (!line[1]) - break; - continue; - case 'y': - case 'Y': - newval = yes; - if (!line[1] || !strcmp(&line[1], "es")) - break; - continue; - case 0: - newval = oldval; - break; - case '?': - goto help; - default: - continue; - } - if (sym_set_tristate_value(sym, newval)) - return 0; -help: - print_help(menu); - } -} - -static int conf_choice(struct menu *menu) -{ - struct symbol *sym, *def_sym; - struct menu *child; - bool is_new; - - sym = menu->sym; - is_new = !sym_has_value(sym); - if (sym_is_changeable(sym)) { - conf_sym(menu); - sym_calc_value(sym); - switch (sym_get_tristate_value(sym)) { - case no: - return 1; - case mod: - return 0; - case yes: - break; - } - } else { - switch (sym_get_tristate_value(sym)) { - case no: - return 1; - case mod: - printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu)); - return 0; - case yes: - break; - } - } - - while (1) { - int cnt, def; - - printf("%*s%s\n", indent - 1, "", menu_get_prompt(menu)); - def_sym = sym_get_choice_value(sym); - cnt = def = 0; - line[0] = 0; - for (child = menu->list; child; child = child->next) { - if (!menu_is_visible(child)) - continue; - if (!child->sym) { - printf("%*c %s\n", indent, '*', menu_get_prompt(child)); - continue; - } - cnt++; - if (child->sym == def_sym) { - def = cnt; - printf("%*c", indent, '>'); - } else - printf("%*c", indent, ' '); - printf(" %d. %s", cnt, menu_get_prompt(child)); - if (child->sym->name) - printf(" (%s)", child->sym->name); - if (!sym_has_value(child->sym)) - printf(" (NEW)"); - printf("\n"); - } - printf("%*schoice", indent - 1, ""); - if (cnt == 1) { - printf("[1]: 1\n"); - goto conf_childs; - } - printf("[1-%d?]: ", cnt); - switch (input_mode) { - case oldconfig: - case syncconfig: - if (!is_new) { - cnt = def; - printf("%d\n", cnt); - break; - } - /* fall through */ - case oldaskconfig: - fflush(stdout); - xfgets(line, sizeof(line), stdin); - strip(line); - if (line[0] == '?') { - print_help(menu); - continue; - } - if (!line[0]) - cnt = def; - else if (isdigit(line[0])) - cnt = atoi(line); - else - continue; - break; - default: - break; - } - - conf_childs: - for (child = menu->list; child; child = child->next) { - if (!child->sym || !menu_is_visible(child)) - continue; - if (!--cnt) - break; - } - if (!child) - continue; - if (line[0] && line[strlen(line) - 1] == '?') { - print_help(child); - continue; - } - sym_set_choice_value(sym, child->sym); - for (child = child->list; child; child = child->next) { - indent += 2; - conf(child); - indent -= 2; - } - return 1; - } -} - -static void conf(struct menu *menu) -{ - struct symbol *sym; - struct property *prop; - struct menu *child; - - if (!menu_is_visible(menu)) - return; - - sym = menu->sym; - prop = menu->prompt; - if (prop) { - const char *prompt; - - switch (prop->type) { - case P_MENU: - /* - * Except in oldaskconfig mode, we show only menus that - * contain new symbols. - */ - if (input_mode != oldaskconfig && rootEntry != menu) { - check_conf(menu); - return; - } - /* fall through */ - case P_COMMENT: - prompt = menu_get_prompt(menu); - if (prompt) - printf("%*c\n%*c %s\n%*c\n", - indent, '*', - indent, '*', prompt, - indent, '*'); - default: - ; - } - } - - if (!sym) - goto conf_childs; - - if (sym_is_choice(sym)) { - conf_choice(menu); - if (sym->curr.tri != mod) - return; - goto conf_childs; - } - - switch (sym->type) { - case S_INT: - case S_HEX: - case S_STRING: - conf_string(menu); - break; - default: - conf_sym(menu); - break; - } - -conf_childs: - if (sym) - indent += 2; - for (child = menu->list; child; child = child->next) - conf(child); - if (sym) - indent -= 2; -} - -static void check_conf(struct menu *menu) -{ - struct symbol *sym; - struct menu *child; - - if (!menu_is_visible(menu)) - return; - - sym = menu->sym; - if (sym && !sym_has_value(sym)) { - if (sym_is_changeable(sym) || - (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) { - if (input_mode == listnewconfig) { - if (sym->name) { - const char *str; - - if (sym->type == S_STRING) { - str = sym_get_string_value(sym); - str = sym_escape_string_value(str); - printf("%s%s=%s\n", CONFIG_, sym->name, str); - free((void *)str); - } else { - str = sym_get_string_value(sym); - printf("%s%s=%s\n", CONFIG_, sym->name, str); - } - } - } else if (input_mode == helpnewconfig) { - printf("-----\n"); - print_help(menu); - printf("-----\n"); - - } else { - if (!conf_cnt++) - printf("*\n* Restart config...\n*\n"); - rootEntry = menu_get_parent_menu(menu); - conf(rootEntry); - } - } - } - - for (child = menu->list; child; child = child->next) - check_conf(child); -} - -static struct option long_opts[] = { - {"oldaskconfig", no_argument, NULL, oldaskconfig}, - {"oldconfig", no_argument, NULL, oldconfig}, - {"syncconfig", no_argument, NULL, syncconfig}, - {"defconfig", required_argument, NULL, defconfig}, - {"savedefconfig", required_argument, NULL, savedefconfig}, - {"allnoconfig", no_argument, NULL, allnoconfig}, - {"allyesconfig", no_argument, NULL, allyesconfig}, - {"allmodconfig", no_argument, NULL, allmodconfig}, - {"alldefconfig", no_argument, NULL, alldefconfig}, - {"randconfig", no_argument, NULL, randconfig}, - {"listnewconfig", no_argument, NULL, listnewconfig}, - {"helpnewconfig", no_argument, NULL, helpnewconfig}, - {"olddefconfig", no_argument, NULL, olddefconfig}, - {"yes2modconfig", no_argument, NULL, yes2modconfig}, - {"mod2yesconfig", no_argument, NULL, mod2yesconfig}, - {NULL, 0, NULL, 0} -}; - -static void conf_usage(const char *progname) -{ - - printf("Usage: %s [-s] [option] \n", progname); - printf("[option] is _one_ of the following:\n"); - printf(" --listnewconfig List new options\n"); - printf(" --helpnewconfig List new options and help text\n"); - printf(" --oldaskconfig Start a new configuration using a line-oriented program\n"); - printf(" --oldconfig Update a configuration using a provided .config as base\n"); - printf(" --syncconfig Similar to oldconfig but generates configuration in\n" - " include/{generated/,config/}\n"); - printf(" --olddefconfig Same as oldconfig but sets new symbols to their default value\n"); - printf(" --defconfig New config with default defined in \n"); - printf(" --savedefconfig Save the minimal current configuration to \n"); - printf(" --allnoconfig New config where all options are answered with no\n"); - printf(" --allyesconfig New config where all options are answered with yes\n"); - printf(" --allmodconfig New config where all options are answered with mod\n"); - printf(" --alldefconfig New config with all symbols set to default\n"); - printf(" --randconfig New config with random answer to all options\n"); - printf(" --yes2modconfig Change answers from yes to mod if possible\n"); - printf(" --mod2yesconfig Change answers from mod to yes if possible\n"); -} - -int main(int ac, char **av) -{ - const char *progname = av[0]; - int opt; - const char *name, *defconfig_file = NULL /* gcc uninit */; - int no_conf_write = 0; - - tty_stdio = isatty(0) && isatty(1); - - while ((opt = getopt_long(ac, av, "s", long_opts, NULL)) != -1) { - if (opt == 's') { - conf_set_message_callback(NULL); - continue; - } - input_mode = (enum input_mode)opt; - switch (opt) { - case syncconfig: - /* - * syncconfig is invoked during the build stage. - * Suppress distracting "configuration written to ..." - */ - conf_set_message_callback(NULL); - sync_kconfig = 1; - break; - case defconfig: - case savedefconfig: - defconfig_file = optarg; - break; - case randconfig: - { - struct timeval now; - unsigned int seed; - char *seed_env; - - /* - * Use microseconds derived seed, - * compensate for systems where it may be zero - */ - gettimeofday(&now, NULL); - seed = (unsigned int)((now.tv_sec + 1) * (now.tv_usec + 1)); - - seed_env = getenv("KCONFIG_SEED"); - if( seed_env && *seed_env ) { - char *endp; - int tmp = (int)strtol(seed_env, &endp, 0); - if (*endp == '\0') { - seed = tmp; - } - } - fprintf( stderr, "KCONFIG_SEED=0x%X\n", seed ); - srand(seed); - break; - } - case oldaskconfig: - case oldconfig: - case allnoconfig: - case allyesconfig: - case allmodconfig: - case alldefconfig: - case listnewconfig: - case helpnewconfig: - case olddefconfig: - case yes2modconfig: - case mod2yesconfig: - break; - case '?': - conf_usage(progname); - exit(1); - break; - } - } - if (ac == optind) { - fprintf(stderr, "%s: Kconfig file missing\n", av[0]); - conf_usage(progname); - exit(1); - } - name = av[optind]; - conf_parse(name); - //zconfdump(stdout); - - switch (input_mode) { - case defconfig: - if (conf_read(defconfig_file)) { - fprintf(stderr, - "***\n" - "*** Can't find default configuration \"%s\"!\n" - "***\n", - defconfig_file); - exit(1); - } - break; - case savedefconfig: - case syncconfig: - case oldaskconfig: - case oldconfig: - case listnewconfig: - case helpnewconfig: - case olddefconfig: - case yes2modconfig: - case mod2yesconfig: - conf_read(NULL); - break; - case allnoconfig: - case allyesconfig: - case allmodconfig: - case alldefconfig: - case randconfig: - name = getenv("KCONFIG_ALLCONFIG"); - if (!name) - break; - if ((strcmp(name, "") != 0) && (strcmp(name, "1") != 0)) { - if (conf_read_simple(name, S_DEF_USER)) { - fprintf(stderr, - "*** Can't read seed configuration \"%s\"!\n", - name); - exit(1); - } - break; - } - switch (input_mode) { - case allnoconfig: name = "allno.config"; break; - case allyesconfig: name = "allyes.config"; break; - case allmodconfig: name = "allmod.config"; break; - case alldefconfig: name = "alldef.config"; break; - case randconfig: name = "allrandom.config"; break; - default: break; - } - if (conf_read_simple(name, S_DEF_USER) && - conf_read_simple("all.config", S_DEF_USER)) { - fprintf(stderr, - "*** KCONFIG_ALLCONFIG set, but no \"%s\" or \"all.config\" file found\n", - name); - exit(1); - } - break; - default: - break; - } - - if (sync_kconfig) { - name = getenv("KCONFIG_NOSILENTUPDATE"); - if (name && *name) { - if (conf_get_changed()) { - fprintf(stderr, - "\n*** The configuration requires explicit update.\n\n"); - return 1; - } - no_conf_write = 1; - } - } - - switch (input_mode) { - case allnoconfig: - conf_set_all_new_symbols(def_no); - break; - case allyesconfig: - conf_set_all_new_symbols(def_yes); - break; - case allmodconfig: - conf_set_all_new_symbols(def_mod); - break; - case alldefconfig: - conf_set_all_new_symbols(def_default); - break; - case randconfig: - /* Really nothing to do in this loop */ - while (conf_set_all_new_symbols(def_random)) ; - break; - case defconfig: - conf_set_all_new_symbols(def_default); - break; - case savedefconfig: - break; - case yes2modconfig: - conf_rewrite_mod_or_yes(def_y2m); - break; - case mod2yesconfig: - conf_rewrite_mod_or_yes(def_m2y); - break; - case oldaskconfig: - rootEntry = &rootmenu; - conf(&rootmenu); - input_mode = oldconfig; - /* fall through */ - case oldconfig: - case listnewconfig: - case helpnewconfig: - case syncconfig: - /* Update until a loop caused no more changes */ - do { - conf_cnt = 0; - check_conf(&rootmenu); - } while (conf_cnt); - break; - case olddefconfig: - default: - break; - } - - if (input_mode == savedefconfig) { - if (conf_write_defconfig(defconfig_file)) { - fprintf(stderr, "n*** Error while saving defconfig to: %s\n\n", - defconfig_file); - return 1; - } - } else if (input_mode != listnewconfig && input_mode != helpnewconfig) { - if (!no_conf_write && conf_write(NULL)) { - fprintf(stderr, "\n*** Error during writing of the configuration.\n\n"); - exit(1); - } - - /* - * Create auto.conf if it does not exist. - * This prevents GNU Make 4.1 or older from emitting - * "include/config/auto.conf: No such file or directory" - * in the top-level Makefile - * - * syncconfig always creates or updates auto.conf because it is - * used during the build. - */ - if (conf_write_autoconf(sync_kconfig) && sync_kconfig) { - fprintf(stderr, - "\n*** Error during sync of the configuration.\n\n"); - return 1; - } - } - return 0; -} diff --git a/libraries/NEMU/tools/kconfig/confdata.c b/libraries/NEMU/tools/kconfig/confdata.c deleted file mode 100644 index a39d93e..0000000 --- a/libraries/NEMU/tools/kconfig/confdata.c +++ /dev/null @@ -1,1338 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Copyright (C) 2002 Roman Zippel - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "lkc.h" - -/* return true if 'path' exists, false otherwise */ -static bool is_present(const char *path) -{ - struct stat st; - - return !stat(path, &st); -} - -/* return true if 'path' exists and it is a directory, false otherwise */ -static bool is_dir(const char *path) -{ - struct stat st; - - if (stat(path, &st)) - return 0; - - return S_ISDIR(st.st_mode); -} - -/* return true if the given two files are the same, false otherwise */ -static bool is_same(const char *file1, const char *file2) -{ - int fd1, fd2; - struct stat st1, st2; - void *map1, *map2; - bool ret = false; - - fd1 = open(file1, O_RDONLY); - if (fd1 < 0) - return ret; - - fd2 = open(file2, O_RDONLY); - if (fd2 < 0) - goto close1; - - ret = fstat(fd1, &st1); - if (ret) - goto close2; - ret = fstat(fd2, &st2); - if (ret) - goto close2; - - if (st1.st_size != st2.st_size) - goto close2; - - map1 = mmap(NULL, st1.st_size, PROT_READ, MAP_PRIVATE, fd1, 0); - if (map1 == MAP_FAILED) - goto close2; - - map2 = mmap(NULL, st2.st_size, PROT_READ, MAP_PRIVATE, fd2, 0); - if (map2 == MAP_FAILED) - goto close2; - - if (bcmp(map1, map2, st1.st_size)) - goto close2; - - ret = true; -close2: - close(fd2); -close1: - close(fd1); - - return ret; -} - -/* - * Create the parent directory of the given path. - * - * For example, if 'include/config/auto.conf' is given, create 'include/config'. - */ -static int make_parent_dir(const char *path) -{ - char tmp[PATH_MAX + 1]; - char *p; - - strncpy(tmp, path, sizeof(tmp)); - tmp[sizeof(tmp) - 1] = 0; - - /* Remove the base name. Just return if nothing is left */ - p = strrchr(tmp, '/'); - if (!p) - return 0; - *(p + 1) = 0; - - /* Just in case it is an absolute path */ - p = tmp; - while (*p == '/') - p++; - - while ((p = strchr(p, '/'))) { - *p = 0; - - /* skip if the directory exists */ - if (!is_dir(tmp) && mkdir(tmp, 0755)) - return -1; - - *p = '/'; - while (*p == '/') - p++; - } - - return 0; -} - -static char depfile_path[PATH_MAX]; -static size_t depfile_prefix_len; - -/* touch depfile for symbol 'name' */ -static int conf_touch_dep(const char *name) -{ - int fd, ret; - const char *s; - char *d, c; - - /* check overflow: prefix + name + ".h" + '\0' must fit in buffer. */ - if (depfile_prefix_len + strlen(name) + 3 > sizeof(depfile_path)) - return -1; - - d = depfile_path + depfile_prefix_len; - s = name; - - while ((c = *s++)) - *d++ = (c == '_') ? '/' : tolower(c); - strcpy(d, ".h"); - - /* Assume directory path already exists. */ - fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644); - if (fd == -1) { - if (errno != ENOENT) - return -1; - - ret = make_parent_dir(depfile_path); - if (ret) - return ret; - - /* Try it again. */ - fd = open(depfile_path, O_WRONLY | O_CREAT | O_TRUNC, 0644); - if (fd == -1) - return -1; - } - close(fd); - - return 0; -} - -struct conf_printer { - void (*print_symbol)(FILE *, struct symbol *, const char *, void *); - void (*print_comment)(FILE *, const char *, void *); -}; - -static void conf_warning(const char *fmt, ...) - __attribute__ ((format (printf, 1, 2))); - -static void conf_message(const char *fmt, ...) - __attribute__ ((format (printf, 1, 2))); - -static const char *conf_filename; -static int conf_lineno, conf_warnings; - -static void conf_warning(const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - fprintf(stderr, "%s:%d:warning: ", conf_filename, conf_lineno); - vfprintf(stderr, fmt, ap); - fprintf(stderr, "\n"); - va_end(ap); - conf_warnings++; -} - -static void conf_default_message_callback(const char *s) -{ - printf("#\n# "); - printf("%s", s); - printf("\n#\n"); -} - -static void (*conf_message_callback)(const char *s) = - conf_default_message_callback; -void conf_set_message_callback(void (*fn)(const char *s)) -{ - conf_message_callback = fn; -} - -static void conf_message(const char *fmt, ...) -{ - va_list ap; - char buf[4096]; - - if (!conf_message_callback) - return; - - va_start(ap, fmt); - - vsnprintf(buf, sizeof(buf), fmt, ap); - conf_message_callback(buf); - va_end(ap); -} - -const char *conf_get_configname(void) -{ - char *name = getenv("KCONFIG_CONFIG"); - - return name ? name : ".config"; -} - -static const char *conf_get_autoconfig_name(void) -{ - char *name = getenv("KCONFIG_AUTOCONFIG"); - - return name ? name : "include/config/auto.conf"; -} - -static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p) -{ - char *p2; - - switch (sym->type) { - case S_TRISTATE: - if (p[0] == 'm') { - sym->def[def].tri = mod; - sym->flags |= def_flags; - break; - } - /* fall through */ - case S_BOOLEAN: - if (p[0] == 'y') { - sym->def[def].tri = yes; - sym->flags |= def_flags; - break; - } - if (p[0] == 'n') { - sym->def[def].tri = no; - sym->flags |= def_flags; - break; - } - if (def != S_DEF_AUTO) - conf_warning("symbol value '%s' invalid for %s", - p, sym->name); - return 1; - case S_STRING: - if (*p++ != '"') - break; - for (p2 = p; (p2 = strpbrk(p2, "\"\\")); p2++) { - if (*p2 == '"') { - *p2 = 0; - break; - } - memmove(p2, p2 + 1, strlen(p2)); - } - if (!p2) { - if (def != S_DEF_AUTO) - conf_warning("invalid string found"); - return 1; - } - /* fall through */ - case S_INT: - case S_HEX: - if (sym_string_valid(sym, p)) { - sym->def[def].val = xstrdup(p); - sym->flags |= def_flags; - } else { - if (def != S_DEF_AUTO) - conf_warning("symbol value '%s' invalid for %s", - p, sym->name); - return 1; - } - break; - default: - ; - } - return 0; -} - -#define LINE_GROWTH 16 -static int add_byte(int c, char **lineptr, size_t slen, size_t *n) -{ - char *nline; - size_t new_size = slen + 1; - if (new_size > *n) { - new_size += LINE_GROWTH - 1; - new_size *= 2; - nline = xrealloc(*lineptr, new_size); - if (!nline) - return -1; - - *lineptr = nline; - *n = new_size; - } - - (*lineptr)[slen] = c; - - return 0; -} - -static ssize_t compat_getline(char **lineptr, size_t *n, FILE *stream) -{ - char *line = *lineptr; - size_t slen = 0; - - for (;;) { - int c = getc(stream); - - switch (c) { - case '\n': - if (add_byte(c, &line, slen, n) < 0) - goto e_out; - slen++; - /* fall through */ - case EOF: - if (add_byte('\0', &line, slen, n) < 0) - goto e_out; - *lineptr = line; - if (slen == 0) - return -1; - return slen; - default: - if (add_byte(c, &line, slen, n) < 0) - goto e_out; - slen++; - } - } - -e_out: - line[slen-1] = '\0'; - *lineptr = line; - return -1; -} - -int conf_read_simple(const char *name, int def) -{ - FILE *in = NULL; - char *line = NULL; - size_t line_asize = 0; - char *p, *p2; - struct symbol *sym; - int i, def_flags; - - if (name) { - in = zconf_fopen(name); - } else { - struct property *prop; - - name = conf_get_configname(); - in = zconf_fopen(name); - if (in) - goto load; - sym_add_change_count(1); - if (!sym_defconfig_list) - return 1; - - for_all_defaults(sym_defconfig_list, prop) { - if (expr_calc_value(prop->visible.expr) == no || - prop->expr->type != E_SYMBOL) - continue; - sym_calc_value(prop->expr->left.sym); - name = sym_get_string_value(prop->expr->left.sym); - in = zconf_fopen(name); - if (in) { - conf_message("using defaults found in %s", - name); - goto load; - } - } - } - if (!in) - return 1; - -load: - conf_filename = name; - conf_lineno = 0; - conf_warnings = 0; - - def_flags = SYMBOL_DEF << def; - for_all_symbols(i, sym) { - sym->flags |= SYMBOL_CHANGED; - sym->flags &= ~(def_flags|SYMBOL_VALID); - if (sym_is_choice(sym)) - sym->flags |= def_flags; - switch (sym->type) { - case S_INT: - case S_HEX: - case S_STRING: - if (sym->def[def].val) - free(sym->def[def].val); - /* fall through */ - default: - sym->def[def].val = NULL; - sym->def[def].tri = no; - } - } - - while (compat_getline(&line, &line_asize, in) != -1) { - conf_lineno++; - sym = NULL; - if (line[0] == '#') { - if (memcmp(line + 2, CONFIG_, strlen(CONFIG_))) - continue; - p = strchr(line + 2 + strlen(CONFIG_), ' '); - if (!p) - continue; - *p++ = 0; - if (strncmp(p, "is not set", 10)) - continue; - if (def == S_DEF_USER) { - sym = sym_find(line + 2 + strlen(CONFIG_)); - if (!sym) { - sym_add_change_count(1); - continue; - } - } else { - sym = sym_lookup(line + 2 + strlen(CONFIG_), 0); - if (sym->type == S_UNKNOWN) - sym->type = S_BOOLEAN; - } - if (sym->flags & def_flags) { - conf_warning("override: reassigning to symbol %s", sym->name); - } - switch (sym->type) { - case S_BOOLEAN: - case S_TRISTATE: - sym->def[def].tri = no; - sym->flags |= def_flags; - break; - default: - ; - } - } else if (memcmp(line, CONFIG_, strlen(CONFIG_)) == 0) { - p = strchr(line + strlen(CONFIG_), '='); - if (!p) - continue; - *p++ = 0; - p2 = strchr(p, '\n'); - if (p2) { - *p2-- = 0; - if (*p2 == '\r') - *p2 = 0; - } - - sym = sym_find(line + strlen(CONFIG_)); - if (!sym) { - if (def == S_DEF_AUTO) - /* - * Reading from include/config/auto.conf - * If CONFIG_FOO previously existed in - * auto.conf but it is missing now, - * include/config/foo.h must be touched. - */ - conf_touch_dep(line + strlen(CONFIG_)); - else - sym_add_change_count(1); - continue; - } - - if (sym->flags & def_flags) { - conf_warning("override: reassigning to symbol %s", sym->name); - } - if (conf_set_sym_val(sym, def, def_flags, p)) - continue; - } else { - if (line[0] != '\r' && line[0] != '\n') - conf_warning("unexpected data: %.*s", - (int)strcspn(line, "\r\n"), line); - - continue; - } - - if (sym && sym_is_choice_value(sym)) { - struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); - switch (sym->def[def].tri) { - case no: - break; - case mod: - if (cs->def[def].tri == yes) { - conf_warning("%s creates inconsistent choice state", sym->name); - cs->flags &= ~def_flags; - } - break; - case yes: - if (cs->def[def].tri != no) - conf_warning("override: %s changes choice state", sym->name); - cs->def[def].val = sym; - break; - } - cs->def[def].tri = EXPR_OR(cs->def[def].tri, sym->def[def].tri); - } - } - free(line); - fclose(in); - return 0; -} - -int conf_read(const char *name) -{ - struct symbol *sym; - int conf_unsaved = 0; - int i; - - sym_set_change_count(0); - - if (conf_read_simple(name, S_DEF_USER)) { - sym_calc_value(modules_sym); - return 1; - } - - sym_calc_value(modules_sym); - - for_all_symbols(i, sym) { - sym_calc_value(sym); - if (sym_is_choice(sym) || (sym->flags & SYMBOL_NO_WRITE)) - continue; - if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) { - /* check that calculated value agrees with saved value */ - switch (sym->type) { - case S_BOOLEAN: - case S_TRISTATE: - if (sym->def[S_DEF_USER].tri == sym_get_tristate_value(sym)) - continue; - break; - default: - if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val)) - continue; - break; - } - } else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE)) - /* no previous value and not saved */ - continue; - conf_unsaved++; - /* maybe print value in verbose mode... */ - } - - for_all_symbols(i, sym) { - if (sym_has_value(sym) && !sym_is_choice_value(sym)) { - /* Reset values of generates values, so they'll appear - * as new, if they should become visible, but that - * doesn't quite work if the Kconfig and the saved - * configuration disagree. - */ - if (sym->visible == no && !conf_unsaved) - sym->flags &= ~SYMBOL_DEF_USER; - switch (sym->type) { - case S_STRING: - case S_INT: - case S_HEX: - /* Reset a string value if it's out of range */ - if (sym_string_within_range(sym, sym->def[S_DEF_USER].val)) - break; - sym->flags &= ~(SYMBOL_VALID|SYMBOL_DEF_USER); - conf_unsaved++; - break; - default: - break; - } - } - } - - sym_add_change_count(conf_warnings || conf_unsaved); - - return 0; -} - -/* - * Kconfig configuration printer - * - * This printer is used when generating the resulting configuration after - * kconfig invocation and `defconfig' files. Unset symbol might be omitted by - * passing a non-NULL argument to the printer. - * - */ -static void -kconfig_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg) -{ - - switch (sym->type) { - case S_BOOLEAN: - case S_TRISTATE: - if (*value == 'n') { - bool skip_unset = (arg != NULL); - - if (!skip_unset) - fprintf(fp, "# %s%s is not set\n", - CONFIG_, sym->name); - return; - } - break; - default: - break; - } - - fprintf(fp, "%s%s=%s\n", CONFIG_, sym->name, value); -} - -static void -kconfig_print_comment(FILE *fp, const char *value, void *arg) -{ - const char *p = value; - size_t l; - - for (;;) { - l = strcspn(p, "\n"); - fprintf(fp, "#"); - if (l) { - fprintf(fp, " "); - xfwrite(p, l, 1, fp); - p += l; - } - fprintf(fp, "\n"); - if (*p++ == '\0') - break; - } -} - -static struct conf_printer kconfig_printer_cb = -{ - .print_symbol = kconfig_print_symbol, - .print_comment = kconfig_print_comment, -}; - -/* - * Header printer - * - * This printer is used when generating the `include/generated/autoconf.h' file. - */ -static void -header_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg) -{ - - switch (sym->type) { - case S_BOOLEAN: - case S_TRISTATE: { - const char *suffix = ""; - - switch (*value) { - case 'n': - break; - case 'm': - suffix = "_MODULE"; - /* fall through */ - default: - fprintf(fp, "#define %s%s%s 1\n", - CONFIG_, sym->name, suffix); - } - break; - } - case S_HEX: { - const char *prefix = ""; - - if (value[0] != '0' || (value[1] != 'x' && value[1] != 'X')) - prefix = "0x"; - fprintf(fp, "#define %s%s %s%s\n", - CONFIG_, sym->name, prefix, value); - break; - } - case S_STRING: - case S_INT: - fprintf(fp, "#define %s%s %s\n", - CONFIG_, sym->name, value); - break; - default: - break; - } - -} - -static void -header_print_comment(FILE *fp, const char *value, void *arg) -{ - const char *p = value; - size_t l; - - fprintf(fp, "/*\n"); - for (;;) { - l = strcspn(p, "\n"); - fprintf(fp, " *"); - if (l) { - fprintf(fp, " "); - xfwrite(p, l, 1, fp); - p += l; - } - fprintf(fp, "\n"); - if (*p++ == '\0') - break; - } - fprintf(fp, " */\n"); -} - -static struct conf_printer header_printer_cb = -{ - .print_symbol = header_print_symbol, - .print_comment = header_print_comment, -}; - -static void conf_write_symbol(FILE *fp, struct symbol *sym, - struct conf_printer *printer, void *printer_arg) -{ - const char *str; - - switch (sym->type) { - case S_UNKNOWN: - break; - case S_STRING: - str = sym_get_string_value(sym); - str = sym_escape_string_value(str); - printer->print_symbol(fp, sym, str, printer_arg); - free((void *)str); - break; - default: - str = sym_get_string_value(sym); - printer->print_symbol(fp, sym, str, printer_arg); - } -} - -static void -conf_write_heading(FILE *fp, struct conf_printer *printer, void *printer_arg) -{ - char buf[256]; - - snprintf(buf, sizeof(buf), - "\n" - "Automatically generated file; DO NOT EDIT.\n" - "%s\n", - rootmenu.prompt->text); - - printer->print_comment(fp, buf, printer_arg); -} - -/* - * Write out a minimal config. - * All values that has default values are skipped as this is redundant. - */ -int conf_write_defconfig(const char *filename) -{ - struct symbol *sym; - struct menu *menu; - FILE *out; - - out = fopen(filename, "w"); - if (!out) - return 1; - - sym_clear_all_valid(); - - /* Traverse all menus to find all relevant symbols */ - menu = rootmenu.list; - - while (menu != NULL) - { - sym = menu->sym; - if (sym == NULL) { - if (!menu_is_visible(menu)) - goto next_menu; - } else if (!sym_is_choice(sym)) { - sym_calc_value(sym); - if (!(sym->flags & SYMBOL_WRITE)) - goto next_menu; - sym->flags &= ~SYMBOL_WRITE; - /* If we cannot change the symbol - skip */ - if (!sym_is_changeable(sym)) - goto next_menu; - /* If symbol equals to default value - skip */ - if (strcmp(sym_get_string_value(sym), sym_get_string_default(sym)) == 0) - goto next_menu; - - /* - * If symbol is a choice value and equals to the - * default for a choice - skip. - * But only if value is bool and equal to "y" and - * choice is not "optional". - * (If choice is "optional" then all values can be "n") - */ - if (sym_is_choice_value(sym)) { - struct symbol *cs; - struct symbol *ds; - - cs = prop_get_symbol(sym_get_choice_prop(sym)); - ds = sym_choice_default(cs); - if (!sym_is_optional(cs) && sym == ds) { - if ((sym->type == S_BOOLEAN) && - sym_get_tristate_value(sym) == yes) - goto next_menu; - } - } - conf_write_symbol(out, sym, &kconfig_printer_cb, NULL); - } -next_menu: - if (menu->list != NULL) { - menu = menu->list; - } - else if (menu->next != NULL) { - menu = menu->next; - } else { - while ((menu = menu->parent)) { - if (menu->next != NULL) { - menu = menu->next; - break; - } - } - } - } - fclose(out); - return 0; -} - -int conf_write(const char *name) -{ - FILE *out; - struct symbol *sym; - struct menu *menu; - const char *str; - char tmpname[PATH_MAX + 1], oldname[PATH_MAX + 1]; - char *env; - int i; - bool need_newline = false; - - if (!name) - name = conf_get_configname(); - - if (!*name) { - fprintf(stderr, "config name is empty\n"); - return -1; - } - - if (is_dir(name)) { - fprintf(stderr, "%s: Is a directory\n", name); - return -1; - } - - if (make_parent_dir(name)) - return -1; - - env = getenv("KCONFIG_OVERWRITECONFIG"); - if (env && *env) { - *tmpname = 0; - out = fopen(name, "w"); - } else { - snprintf(tmpname, sizeof(tmpname), "%s.%d.tmp", - name, (int)getpid()); - out = fopen(tmpname, "w"); - } - if (!out) - return 1; - - conf_write_heading(out, &kconfig_printer_cb, NULL); - - if (!conf_get_changed()) - sym_clear_all_valid(); - - menu = rootmenu.list; - while (menu) { - sym = menu->sym; - if (!sym) { - if (!menu_is_visible(menu)) - goto next; - str = menu_get_prompt(menu); - fprintf(out, "\n" - "#\n" - "# %s\n" - "#\n", str); - need_newline = false; - } else if (!(sym->flags & SYMBOL_CHOICE) && - !(sym->flags & SYMBOL_WRITTEN)) { - sym_calc_value(sym); - if (!(sym->flags & SYMBOL_WRITE)) - goto next; - if (need_newline) { - fprintf(out, "\n"); - need_newline = false; - } - sym->flags |= SYMBOL_WRITTEN; - conf_write_symbol(out, sym, &kconfig_printer_cb, NULL); - } - -next: - if (menu->list) { - menu = menu->list; - continue; - } - if (menu->next) - menu = menu->next; - else while ((menu = menu->parent)) { - if (!menu->sym && menu_is_visible(menu) && - menu != &rootmenu) { - str = menu_get_prompt(menu); - fprintf(out, "# end of %s\n", str); - need_newline = true; - } - if (menu->next) { - menu = menu->next; - break; - } - } - } - fclose(out); - - for_all_symbols(i, sym) - sym->flags &= ~SYMBOL_WRITTEN; - - if (*tmpname) { - if (is_same(name, tmpname)) { - conf_message("No change to %s", name); - unlink(tmpname); - sym_set_change_count(0); - return 0; - } - - snprintf(oldname, sizeof(oldname), "%s.old", name); - rename(name, oldname); - if (rename(tmpname, name)) - return 1; - } - - conf_message("configuration written to %s", name); - - sym_set_change_count(0); - - return 0; -} - -/* write a dependency file as used by kbuild to track dependencies */ -static int conf_write_dep(const char *name) -{ - struct file *file; - FILE *out; - - out = fopen("..config.tmp", "w"); - if (!out) - return 1; - fprintf(out, "deps_config := \\\n"); - for (file = file_list; file; file = file->next) { - if (file->next) - fprintf(out, "\t%s \\\n", file->name); - else - fprintf(out, "\t%s\n", file->name); - } - fprintf(out, "\n%s: \\\n" - "\t$(deps_config)\n\n", conf_get_autoconfig_name()); - - env_write_dep(out, conf_get_autoconfig_name()); - - fprintf(out, "\n$(deps_config): ;\n"); - fclose(out); - - if (make_parent_dir(name)) - return 1; - rename("..config.tmp", name); - return 0; -} - -static int conf_touch_deps(void) -{ - const char *name; - struct symbol *sym; - int res, i; - - strcpy(depfile_path, "include/config/"); - depfile_prefix_len = strlen(depfile_path); - - name = conf_get_autoconfig_name(); - conf_read_simple(name, S_DEF_AUTO); - sym_calc_value(modules_sym); - - for_all_symbols(i, sym) { - sym_calc_value(sym); - if ((sym->flags & SYMBOL_NO_WRITE) || !sym->name) - continue; - if (sym->flags & SYMBOL_WRITE) { - if (sym->flags & SYMBOL_DEF_AUTO) { - /* - * symbol has old and new value, - * so compare them... - */ - switch (sym->type) { - case S_BOOLEAN: - case S_TRISTATE: - if (sym_get_tristate_value(sym) == - sym->def[S_DEF_AUTO].tri) - continue; - break; - case S_STRING: - case S_HEX: - case S_INT: - if (!strcmp(sym_get_string_value(sym), - sym->def[S_DEF_AUTO].val)) - continue; - break; - default: - break; - } - } else { - /* - * If there is no old value, only 'no' (unset) - * is allowed as new value. - */ - switch (sym->type) { - case S_BOOLEAN: - case S_TRISTATE: - if (sym_get_tristate_value(sym) == no) - continue; - break; - default: - break; - } - } - } else if (!(sym->flags & SYMBOL_DEF_AUTO)) - /* There is neither an old nor a new value. */ - continue; - /* else - * There is an old value, but no new value ('no' (unset) - * isn't saved in auto.conf, so the old value is always - * different from 'no'). - */ - - res = conf_touch_dep(sym->name); - if (res) - return res; - } - - return 0; -} - -int conf_write_autoconf(int overwrite) -{ - struct symbol *sym; - const char *name; - const char *autoconf_name = conf_get_autoconfig_name(); - FILE *out, *out_h; - int i; - - if (!overwrite && is_present(autoconf_name)) - return 0; - - conf_write_dep("include/config/auto.conf.cmd"); - - if (conf_touch_deps()) - return 1; - - out = fopen(".tmpconfig", "w"); - if (!out) - return 1; - - out_h = fopen(".tmpconfig.h", "w"); - if (!out_h) { - fclose(out); - return 1; - } - - conf_write_heading(out, &kconfig_printer_cb, NULL); - conf_write_heading(out_h, &header_printer_cb, NULL); - - for_all_symbols(i, sym) { - sym_calc_value(sym); - if (!(sym->flags & SYMBOL_WRITE) || !sym->name) - continue; - - /* write symbols to auto.conf and autoconf.h */ - conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1); - conf_write_symbol(out_h, sym, &header_printer_cb, NULL); - } - fclose(out); - fclose(out_h); - - name = getenv("KCONFIG_AUTOHEADER"); - if (!name) - name = "include/generated/autoconf.h"; - if (make_parent_dir(name)) - return 1; - if (rename(".tmpconfig.h", name)) - return 1; - - if (make_parent_dir(autoconf_name)) - return 1; - /* - * This must be the last step, kbuild has a dependency on auto.conf - * and this marks the successful completion of the previous steps. - */ - if (rename(".tmpconfig", autoconf_name)) - return 1; - - return 0; -} - -static int sym_change_count; -static void (*conf_changed_callback)(void); - -void sym_set_change_count(int count) -{ - int _sym_change_count = sym_change_count; - sym_change_count = count; - if (conf_changed_callback && - (bool)_sym_change_count != (bool)count) - conf_changed_callback(); -} - -void sym_add_change_count(int count) -{ - sym_set_change_count(count + sym_change_count); -} - -bool conf_get_changed(void) -{ - return sym_change_count; -} - -void conf_set_changed_callback(void (*fn)(void)) -{ - conf_changed_callback = fn; -} - -static bool randomize_choice_values(struct symbol *csym) -{ - struct property *prop; - struct symbol *sym; - struct expr *e; - int cnt, def; - - /* - * If choice is mod then we may have more items selected - * and if no then no-one. - * In both cases stop. - */ - if (csym->curr.tri != yes) - return false; - - prop = sym_get_choice_prop(csym); - - /* count entries in choice block */ - cnt = 0; - expr_list_for_each_sym(prop->expr, e, sym) - cnt++; - - /* - * find a random value and set it to yes, - * set the rest to no so we have only one set - */ - def = (rand() % cnt); - - cnt = 0; - expr_list_for_each_sym(prop->expr, e, sym) { - if (def == cnt++) { - sym->def[S_DEF_USER].tri = yes; - csym->def[S_DEF_USER].val = sym; - } - else { - sym->def[S_DEF_USER].tri = no; - } - sym->flags |= SYMBOL_DEF_USER; - /* clear VALID to get value calculated */ - sym->flags &= ~SYMBOL_VALID; - } - csym->flags |= SYMBOL_DEF_USER; - /* clear VALID to get value calculated */ - csym->flags &= ~(SYMBOL_VALID); - - return true; -} - -void set_all_choice_values(struct symbol *csym) -{ - struct property *prop; - struct symbol *sym; - struct expr *e; - - prop = sym_get_choice_prop(csym); - - /* - * Set all non-assinged choice values to no - */ - expr_list_for_each_sym(prop->expr, e, sym) { - if (!sym_has_value(sym)) - sym->def[S_DEF_USER].tri = no; - } - csym->flags |= SYMBOL_DEF_USER; - /* clear VALID to get value calculated */ - csym->flags &= ~(SYMBOL_VALID | SYMBOL_NEED_SET_CHOICE_VALUES); -} - -bool conf_set_all_new_symbols(enum conf_def_mode mode) -{ - struct symbol *sym, *csym; - int i, cnt, pby, pty, ptm; /* pby: probability of bool = y - * pty: probability of tristate = y - * ptm: probability of tristate = m - */ - - pby = 50; pty = ptm = 33; /* can't go as the default in switch-case - * below, otherwise gcc whines about - * -Wmaybe-uninitialized */ - if (mode == def_random) { - int n, p[3]; - char *env = getenv("KCONFIG_PROBABILITY"); - n = 0; - while( env && *env ) { - char *endp; - int tmp = strtol( env, &endp, 10 ); - if( tmp >= 0 && tmp <= 100 ) { - p[n++] = tmp; - } else { - errno = ERANGE; - perror( "KCONFIG_PROBABILITY" ); - exit( 1 ); - } - env = (*endp == ':') ? endp+1 : endp; - if( n >=3 ) { - break; - } - } - switch( n ) { - case 1: - pby = p[0]; ptm = pby/2; pty = pby-ptm; - break; - case 2: - pty = p[0]; ptm = p[1]; pby = pty + ptm; - break; - case 3: - pby = p[0]; pty = p[1]; ptm = p[2]; - break; - } - - if( pty+ptm > 100 ) { - errno = ERANGE; - perror( "KCONFIG_PROBABILITY" ); - exit( 1 ); - } - } - bool has_changed = false; - - for_all_symbols(i, sym) { - if (sym_has_value(sym) || (sym->flags & SYMBOL_VALID)) - continue; - switch (sym_get_type(sym)) { - case S_BOOLEAN: - case S_TRISTATE: - has_changed = true; - switch (mode) { - case def_yes: - sym->def[S_DEF_USER].tri = yes; - break; - case def_mod: - sym->def[S_DEF_USER].tri = mod; - break; - case def_no: - if (sym->flags & SYMBOL_ALLNOCONFIG_Y) - sym->def[S_DEF_USER].tri = yes; - else - sym->def[S_DEF_USER].tri = no; - break; - case def_random: - sym->def[S_DEF_USER].tri = no; - cnt = rand() % 100; - if (sym->type == S_TRISTATE) { - if (cnt < pty) - sym->def[S_DEF_USER].tri = yes; - else if (cnt < (pty+ptm)) - sym->def[S_DEF_USER].tri = mod; - } else if (cnt < pby) - sym->def[S_DEF_USER].tri = yes; - break; - default: - continue; - } - if (!(sym_is_choice(sym) && mode == def_random)) - sym->flags |= SYMBOL_DEF_USER; - break; - default: - break; - } - - } - - sym_clear_all_valid(); - - /* - * We have different type of choice blocks. - * If curr.tri equals to mod then we can select several - * choice symbols in one block. - * In this case we do nothing. - * If curr.tri equals yes then only one symbol can be - * selected in a choice block and we set it to yes, - * and the rest to no. - */ - if (mode != def_random) { - for_all_symbols(i, csym) { - if ((sym_is_choice(csym) && !sym_has_value(csym)) || - sym_is_choice_value(csym)) - csym->flags |= SYMBOL_NEED_SET_CHOICE_VALUES; - } - } - - for_all_symbols(i, csym) { - if (sym_has_value(csym) || !sym_is_choice(csym)) - continue; - - sym_calc_value(csym); - if (mode == def_random) - has_changed |= randomize_choice_values(csym); - else { - set_all_choice_values(csym); - has_changed = true; - } - } - - return has_changed; -} - -void conf_rewrite_mod_or_yes(enum conf_def_mode mode) -{ - struct symbol *sym; - int i; - tristate old_val = (mode == def_y2m) ? yes : mod; - tristate new_val = (mode == def_y2m) ? mod : yes; - - for_all_symbols(i, sym) { - if (sym_get_type(sym) == S_TRISTATE && - sym->def[S_DEF_USER].tri == old_val) - sym->def[S_DEF_USER].tri = new_val; - } - sym_clear_all_valid(); -} diff --git a/libraries/NEMU/tools/kconfig/expr.c b/libraries/NEMU/tools/kconfig/expr.c deleted file mode 100644 index 81ebf81..0000000 --- a/libraries/NEMU/tools/kconfig/expr.c +++ /dev/null @@ -1,1303 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Copyright (C) 2002 Roman Zippel - */ - -#include -#include -#include -#include -#include - -#include "lkc.h" - -#define DEBUG_EXPR 0 - -static struct expr *expr_eliminate_yn(struct expr *e); - -struct expr *expr_alloc_symbol(struct symbol *sym) -{ - struct expr *e = xcalloc(1, sizeof(*e)); - e->type = E_SYMBOL; - e->left.sym = sym; - return e; -} - -struct expr *expr_alloc_one(enum expr_type type, struct expr *ce) -{ - struct expr *e = xcalloc(1, sizeof(*e)); - e->type = type; - e->left.expr = ce; - return e; -} - -struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2) -{ - struct expr *e = xcalloc(1, sizeof(*e)); - e->type = type; - e->left.expr = e1; - e->right.expr = e2; - return e; -} - -struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2) -{ - struct expr *e = xcalloc(1, sizeof(*e)); - e->type = type; - e->left.sym = s1; - e->right.sym = s2; - return e; -} - -struct expr *expr_alloc_and(struct expr *e1, struct expr *e2) -{ - if (!e1) - return e2; - return e2 ? expr_alloc_two(E_AND, e1, e2) : e1; -} - -struct expr *expr_alloc_or(struct expr *e1, struct expr *e2) -{ - if (!e1) - return e2; - return e2 ? expr_alloc_two(E_OR, e1, e2) : e1; -} - -struct expr *expr_copy(const struct expr *org) -{ - struct expr *e; - - if (!org) - return NULL; - - e = xmalloc(sizeof(*org)); - memcpy(e, org, sizeof(*org)); - switch (org->type) { - case E_SYMBOL: - e->left = org->left; - break; - case E_NOT: - e->left.expr = expr_copy(org->left.expr); - break; - case E_EQUAL: - case E_GEQ: - case E_GTH: - case E_LEQ: - case E_LTH: - case E_UNEQUAL: - e->left.sym = org->left.sym; - e->right.sym = org->right.sym; - break; - case E_AND: - case E_OR: - case E_LIST: - e->left.expr = expr_copy(org->left.expr); - e->right.expr = expr_copy(org->right.expr); - break; - default: - fprintf(stderr, "can't copy type %d\n", e->type); - free(e); - e = NULL; - break; - } - - return e; -} - -void expr_free(struct expr *e) -{ - if (!e) - return; - - switch (e->type) { - case E_SYMBOL: - break; - case E_NOT: - expr_free(e->left.expr); - break; - case E_EQUAL: - case E_GEQ: - case E_GTH: - case E_LEQ: - case E_LTH: - case E_UNEQUAL: - break; - case E_OR: - case E_AND: - expr_free(e->left.expr); - expr_free(e->right.expr); - break; - default: - fprintf(stderr, "how to free type %d?\n", e->type); - break; - } - free(e); -} - -static int trans_count; - -#define e1 (*ep1) -#define e2 (*ep2) - -/* - * expr_eliminate_eq() helper. - * - * Walks the two expression trees given in 'ep1' and 'ep2'. Any node that does - * not have type 'type' (E_OR/E_AND) is considered a leaf, and is compared - * against all other leaves. Two equal leaves are both replaced with either 'y' - * or 'n' as appropriate for 'type', to be eliminated later. - */ -static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2) -{ - /* Recurse down to leaves */ - - if (e1->type == type) { - __expr_eliminate_eq(type, &e1->left.expr, &e2); - __expr_eliminate_eq(type, &e1->right.expr, &e2); - return; - } - if (e2->type == type) { - __expr_eliminate_eq(type, &e1, &e2->left.expr); - __expr_eliminate_eq(type, &e1, &e2->right.expr); - return; - } - - /* e1 and e2 are leaves. Compare them. */ - - if (e1->type == E_SYMBOL && e2->type == E_SYMBOL && - e1->left.sym == e2->left.sym && - (e1->left.sym == &symbol_yes || e1->left.sym == &symbol_no)) - return; - if (!expr_eq(e1, e2)) - return; - - /* e1 and e2 are equal leaves. Prepare them for elimination. */ - - trans_count++; - expr_free(e1); expr_free(e2); - switch (type) { - case E_OR: - e1 = expr_alloc_symbol(&symbol_no); - e2 = expr_alloc_symbol(&symbol_no); - break; - case E_AND: - e1 = expr_alloc_symbol(&symbol_yes); - e2 = expr_alloc_symbol(&symbol_yes); - break; - default: - ; - } -} - -/* - * Rewrites the expressions 'ep1' and 'ep2' to remove operands common to both. - * Example reductions: - * - * ep1: A && B -> ep1: y - * ep2: A && B && C -> ep2: C - * - * ep1: A || B -> ep1: n - * ep2: A || B || C -> ep2: C - * - * ep1: A && (B && FOO) -> ep1: FOO - * ep2: (BAR && B) && A -> ep2: BAR - * - * ep1: A && (B || C) -> ep1: y - * ep2: (C || B) && A -> ep2: y - * - * Comparisons are done between all operands at the same "level" of && or ||. - * For example, in the expression 'e1 && (e2 || e3) && (e4 || e5)', the - * following operands will be compared: - * - * - 'e1', 'e2 || e3', and 'e4 || e5', against each other - * - e2 against e3 - * - e4 against e5 - * - * Parentheses are irrelevant within a single level. 'e1 && (e2 && e3)' and - * '(e1 && e2) && e3' are both a single level. - * - * See __expr_eliminate_eq() as well. - */ -void expr_eliminate_eq(struct expr **ep1, struct expr **ep2) -{ - if (!e1 || !e2) - return; - switch (e1->type) { - case E_OR: - case E_AND: - __expr_eliminate_eq(e1->type, ep1, ep2); - default: - ; - } - if (e1->type != e2->type) switch (e2->type) { - case E_OR: - case E_AND: - __expr_eliminate_eq(e2->type, ep1, ep2); - default: - ; - } - e1 = expr_eliminate_yn(e1); - e2 = expr_eliminate_yn(e2); -} - -#undef e1 -#undef e2 - -/* - * Returns true if 'e1' and 'e2' are equal, after minor simplification. Two - * &&/|| expressions are considered equal if every operand in one expression - * equals some operand in the other (operands do not need to appear in the same - * order), recursively. - */ -int expr_eq(struct expr *e1, struct expr *e2) -{ - int res, old_count; - - /* - * A NULL expr is taken to be yes, but there's also a different way to - * represent yes. expr_is_yes() checks for either representation. - */ - if (!e1 || !e2) - return expr_is_yes(e1) && expr_is_yes(e2); - - if (e1->type != e2->type) - return 0; - switch (e1->type) { - case E_EQUAL: - case E_GEQ: - case E_GTH: - case E_LEQ: - case E_LTH: - case E_UNEQUAL: - return e1->left.sym == e2->left.sym && e1->right.sym == e2->right.sym; - case E_SYMBOL: - return e1->left.sym == e2->left.sym; - case E_NOT: - return expr_eq(e1->left.expr, e2->left.expr); - case E_AND: - case E_OR: - e1 = expr_copy(e1); - e2 = expr_copy(e2); - old_count = trans_count; - expr_eliminate_eq(&e1, &e2); - res = (e1->type == E_SYMBOL && e2->type == E_SYMBOL && - e1->left.sym == e2->left.sym); - expr_free(e1); - expr_free(e2); - trans_count = old_count; - return res; - case E_LIST: - case E_RANGE: - case E_NONE: - /* panic */; - } - - if (DEBUG_EXPR) { - expr_fprint(e1, stdout); - printf(" = "); - expr_fprint(e2, stdout); - printf(" ?\n"); - } - - return 0; -} - -/* - * Recursively performs the following simplifications in-place (as well as the - * corresponding simplifications with swapped operands): - * - * expr && n -> n - * expr && y -> expr - * expr || n -> expr - * expr || y -> y - * - * Returns the optimized expression. - */ -static struct expr *expr_eliminate_yn(struct expr *e) -{ - struct expr *tmp; - - if (e) switch (e->type) { - case E_AND: - e->left.expr = expr_eliminate_yn(e->left.expr); - e->right.expr = expr_eliminate_yn(e->right.expr); - if (e->left.expr->type == E_SYMBOL) { - if (e->left.expr->left.sym == &symbol_no) { - expr_free(e->left.expr); - expr_free(e->right.expr); - e->type = E_SYMBOL; - e->left.sym = &symbol_no; - e->right.expr = NULL; - return e; - } else if (e->left.expr->left.sym == &symbol_yes) { - free(e->left.expr); - tmp = e->right.expr; - *e = *(e->right.expr); - free(tmp); - return e; - } - } - if (e->right.expr->type == E_SYMBOL) { - if (e->right.expr->left.sym == &symbol_no) { - expr_free(e->left.expr); - expr_free(e->right.expr); - e->type = E_SYMBOL; - e->left.sym = &symbol_no; - e->right.expr = NULL; - return e; - } else if (e->right.expr->left.sym == &symbol_yes) { - free(e->right.expr); - tmp = e->left.expr; - *e = *(e->left.expr); - free(tmp); - return e; - } - } - break; - case E_OR: - e->left.expr = expr_eliminate_yn(e->left.expr); - e->right.expr = expr_eliminate_yn(e->right.expr); - if (e->left.expr->type == E_SYMBOL) { - if (e->left.expr->left.sym == &symbol_no) { - free(e->left.expr); - tmp = e->right.expr; - *e = *(e->right.expr); - free(tmp); - return e; - } else if (e->left.expr->left.sym == &symbol_yes) { - expr_free(e->left.expr); - expr_free(e->right.expr); - e->type = E_SYMBOL; - e->left.sym = &symbol_yes; - e->right.expr = NULL; - return e; - } - } - if (e->right.expr->type == E_SYMBOL) { - if (e->right.expr->left.sym == &symbol_no) { - free(e->right.expr); - tmp = e->left.expr; - *e = *(e->left.expr); - free(tmp); - return e; - } else if (e->right.expr->left.sym == &symbol_yes) { - expr_free(e->left.expr); - expr_free(e->right.expr); - e->type = E_SYMBOL; - e->left.sym = &symbol_yes; - e->right.expr = NULL; - return e; - } - } - break; - default: - ; - } - return e; -} - -/* - * bool FOO!=n => FOO - */ -struct expr *expr_trans_bool(struct expr *e) -{ - if (!e) - return NULL; - switch (e->type) { - case E_AND: - case E_OR: - case E_NOT: - e->left.expr = expr_trans_bool(e->left.expr); - e->right.expr = expr_trans_bool(e->right.expr); - break; - case E_UNEQUAL: - // FOO!=n -> FOO - if (e->left.sym->type == S_TRISTATE) { - if (e->right.sym == &symbol_no) { - e->type = E_SYMBOL; - e->right.sym = NULL; - } - } - break; - default: - ; - } - return e; -} - -/* - * e1 || e2 -> ? - */ -static struct expr *expr_join_or(struct expr *e1, struct expr *e2) -{ - struct expr *tmp; - struct symbol *sym1, *sym2; - - if (expr_eq(e1, e2)) - return expr_copy(e1); - if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT) - return NULL; - if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT) - return NULL; - if (e1->type == E_NOT) { - tmp = e1->left.expr; - if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL) - return NULL; - sym1 = tmp->left.sym; - } else - sym1 = e1->left.sym; - if (e2->type == E_NOT) { - if (e2->left.expr->type != E_SYMBOL) - return NULL; - sym2 = e2->left.expr->left.sym; - } else - sym2 = e2->left.sym; - if (sym1 != sym2) - return NULL; - if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE) - return NULL; - if (sym1->type == S_TRISTATE) { - if (e1->type == E_EQUAL && e2->type == E_EQUAL && - ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || - (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) { - // (a='y') || (a='m') -> (a!='n') - return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_no); - } - if (e1->type == E_EQUAL && e2->type == E_EQUAL && - ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || - (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) { - // (a='y') || (a='n') -> (a!='m') - return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_mod); - } - if (e1->type == E_EQUAL && e2->type == E_EQUAL && - ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || - (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) { - // (a='m') || (a='n') -> (a!='y') - return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_yes); - } - } - if (sym1->type == S_BOOLEAN && sym1 == sym2) { - if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) || - (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL)) - return expr_alloc_symbol(&symbol_yes); - } - - if (DEBUG_EXPR) { - printf("optimize ("); - expr_fprint(e1, stdout); - printf(") || ("); - expr_fprint(e2, stdout); - printf(")?\n"); - } - return NULL; -} - -static struct expr *expr_join_and(struct expr *e1, struct expr *e2) -{ - struct expr *tmp; - struct symbol *sym1, *sym2; - - if (expr_eq(e1, e2)) - return expr_copy(e1); - if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT) - return NULL; - if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT) - return NULL; - if (e1->type == E_NOT) { - tmp = e1->left.expr; - if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL) - return NULL; - sym1 = tmp->left.sym; - } else - sym1 = e1->left.sym; - if (e2->type == E_NOT) { - if (e2->left.expr->type != E_SYMBOL) - return NULL; - sym2 = e2->left.expr->left.sym; - } else - sym2 = e2->left.sym; - if (sym1 != sym2) - return NULL; - if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE) - return NULL; - - if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_yes) || - (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_yes)) - // (a) && (a='y') -> (a='y') - return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes); - - if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_no) || - (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_no)) - // (a) && (a!='n') -> (a) - return expr_alloc_symbol(sym1); - - if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_mod) || - (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_mod)) - // (a) && (a!='m') -> (a='y') - return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes); - - if (sym1->type == S_TRISTATE) { - if (e1->type == E_EQUAL && e2->type == E_UNEQUAL) { - // (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b' - sym2 = e1->right.sym; - if ((e2->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST)) - return sym2 != e2->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2) - : expr_alloc_symbol(&symbol_no); - } - if (e1->type == E_UNEQUAL && e2->type == E_EQUAL) { - // (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b' - sym2 = e2->right.sym; - if ((e1->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST)) - return sym2 != e1->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2) - : expr_alloc_symbol(&symbol_no); - } - if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && - ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) || - (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) - // (a!='y') && (a!='n') -> (a='m') - return expr_alloc_comp(E_EQUAL, sym1, &symbol_mod); - - if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && - ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) || - (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) - // (a!='y') && (a!='m') -> (a='n') - return expr_alloc_comp(E_EQUAL, sym1, &symbol_no); - - if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL && - ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) || - (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) - // (a!='m') && (a!='n') -> (a='m') - return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes); - - if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_mod) || - (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_mod) || - (e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_yes) || - (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_yes)) - return NULL; - } - - if (DEBUG_EXPR) { - printf("optimize ("); - expr_fprint(e1, stdout); - printf(") && ("); - expr_fprint(e2, stdout); - printf(")?\n"); - } - return NULL; -} - -/* - * expr_eliminate_dups() helper. - * - * Walks the two expression trees given in 'ep1' and 'ep2'. Any node that does - * not have type 'type' (E_OR/E_AND) is considered a leaf, and is compared - * against all other leaves to look for simplifications. - */ -static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2) -{ -#define e1 (*ep1) -#define e2 (*ep2) - struct expr *tmp; - - /* Recurse down to leaves */ - - if (e1->type == type) { - expr_eliminate_dups1(type, &e1->left.expr, &e2); - expr_eliminate_dups1(type, &e1->right.expr, &e2); - return; - } - if (e2->type == type) { - expr_eliminate_dups1(type, &e1, &e2->left.expr); - expr_eliminate_dups1(type, &e1, &e2->right.expr); - return; - } - - /* e1 and e2 are leaves. Compare and process them. */ - - if (e1 == e2) - return; - - switch (e1->type) { - case E_OR: case E_AND: - expr_eliminate_dups1(e1->type, &e1, &e1); - default: - ; - } - - switch (type) { - case E_OR: - tmp = expr_join_or(e1, e2); - if (tmp) { - expr_free(e1); expr_free(e2); - e1 = expr_alloc_symbol(&symbol_no); - e2 = tmp; - trans_count++; - } - break; - case E_AND: - tmp = expr_join_and(e1, e2); - if (tmp) { - expr_free(e1); expr_free(e2); - e1 = expr_alloc_symbol(&symbol_yes); - e2 = tmp; - trans_count++; - } - break; - default: - ; - } -#undef e1 -#undef e2 -} - -/* - * Rewrites 'e' in-place to remove ("join") duplicate and other redundant - * operands. - * - * Example simplifications: - * - * A || B || A -> A || B - * A && B && A=y -> A=y && B - * - * Returns the deduplicated expression. - */ -struct expr *expr_eliminate_dups(struct expr *e) -{ - int oldcount; - if (!e) - return e; - - oldcount = trans_count; - while (1) { - trans_count = 0; - switch (e->type) { - case E_OR: case E_AND: - expr_eliminate_dups1(e->type, &e, &e); - default: - ; - } - if (!trans_count) - /* No simplifications done in this pass. We're done */ - break; - e = expr_eliminate_yn(e); - } - trans_count = oldcount; - return e; -} - -/* - * Performs various simplifications involving logical operators and - * comparisons. - * - * Allocates and returns a new expression. - */ -struct expr *expr_transform(struct expr *e) -{ - struct expr *tmp; - - if (!e) - return NULL; - switch (e->type) { - case E_EQUAL: - case E_GEQ: - case E_GTH: - case E_LEQ: - case E_LTH: - case E_UNEQUAL: - case E_SYMBOL: - case E_LIST: - break; - default: - e->left.expr = expr_transform(e->left.expr); - e->right.expr = expr_transform(e->right.expr); - } - - switch (e->type) { - case E_EQUAL: - if (e->left.sym->type != S_BOOLEAN) - break; - if (e->right.sym == &symbol_no) { - e->type = E_NOT; - e->left.expr = expr_alloc_symbol(e->left.sym); - e->right.sym = NULL; - break; - } - if (e->right.sym == &symbol_mod) { - printf("boolean symbol %s tested for 'm'? test forced to 'n'\n", e->left.sym->name); - e->type = E_SYMBOL; - e->left.sym = &symbol_no; - e->right.sym = NULL; - break; - } - if (e->right.sym == &symbol_yes) { - e->type = E_SYMBOL; - e->right.sym = NULL; - break; - } - break; - case E_UNEQUAL: - if (e->left.sym->type != S_BOOLEAN) - break; - if (e->right.sym == &symbol_no) { - e->type = E_SYMBOL; - e->right.sym = NULL; - break; - } - if (e->right.sym == &symbol_mod) { - printf("boolean symbol %s tested for 'm'? test forced to 'y'\n", e->left.sym->name); - e->type = E_SYMBOL; - e->left.sym = &symbol_yes; - e->right.sym = NULL; - break; - } - if (e->right.sym == &symbol_yes) { - e->type = E_NOT; - e->left.expr = expr_alloc_symbol(e->left.sym); - e->right.sym = NULL; - break; - } - break; - case E_NOT: - switch (e->left.expr->type) { - case E_NOT: - // !!a -> a - tmp = e->left.expr->left.expr; - free(e->left.expr); - free(e); - e = tmp; - e = expr_transform(e); - break; - case E_EQUAL: - case E_UNEQUAL: - // !a='x' -> a!='x' - tmp = e->left.expr; - free(e); - e = tmp; - e->type = e->type == E_EQUAL ? E_UNEQUAL : E_EQUAL; - break; - case E_LEQ: - case E_GEQ: - // !a<='x' -> a>'x' - tmp = e->left.expr; - free(e); - e = tmp; - e->type = e->type == E_LEQ ? E_GTH : E_LTH; - break; - case E_LTH: - case E_GTH: - // !a<'x' -> a>='x' - tmp = e->left.expr; - free(e); - e = tmp; - e->type = e->type == E_LTH ? E_GEQ : E_LEQ; - break; - case E_OR: - // !(a || b) -> !a && !b - tmp = e->left.expr; - e->type = E_AND; - e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); - tmp->type = E_NOT; - tmp->right.expr = NULL; - e = expr_transform(e); - break; - case E_AND: - // !(a && b) -> !a || !b - tmp = e->left.expr; - e->type = E_OR; - e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr); - tmp->type = E_NOT; - tmp->right.expr = NULL; - e = expr_transform(e); - break; - case E_SYMBOL: - if (e->left.expr->left.sym == &symbol_yes) { - // !'y' -> 'n' - tmp = e->left.expr; - free(e); - e = tmp; - e->type = E_SYMBOL; - e->left.sym = &symbol_no; - break; - } - if (e->left.expr->left.sym == &symbol_mod) { - // !'m' -> 'm' - tmp = e->left.expr; - free(e); - e = tmp; - e->type = E_SYMBOL; - e->left.sym = &symbol_mod; - break; - } - if (e->left.expr->left.sym == &symbol_no) { - // !'n' -> 'y' - tmp = e->left.expr; - free(e); - e = tmp; - e->type = E_SYMBOL; - e->left.sym = &symbol_yes; - break; - } - break; - default: - ; - } - break; - default: - ; - } - return e; -} - -int expr_contains_symbol(struct expr *dep, struct symbol *sym) -{ - if (!dep) - return 0; - - switch (dep->type) { - case E_AND: - case E_OR: - return expr_contains_symbol(dep->left.expr, sym) || - expr_contains_symbol(dep->right.expr, sym); - case E_SYMBOL: - return dep->left.sym == sym; - case E_EQUAL: - case E_GEQ: - case E_GTH: - case E_LEQ: - case E_LTH: - case E_UNEQUAL: - return dep->left.sym == sym || - dep->right.sym == sym; - case E_NOT: - return expr_contains_symbol(dep->left.expr, sym); - default: - ; - } - return 0; -} - -bool expr_depends_symbol(struct expr *dep, struct symbol *sym) -{ - if (!dep) - return false; - - switch (dep->type) { - case E_AND: - return expr_depends_symbol(dep->left.expr, sym) || - expr_depends_symbol(dep->right.expr, sym); - case E_SYMBOL: - return dep->left.sym == sym; - case E_EQUAL: - if (dep->left.sym == sym) { - if (dep->right.sym == &symbol_yes || dep->right.sym == &symbol_mod) - return true; - } - break; - case E_UNEQUAL: - if (dep->left.sym == sym) { - if (dep->right.sym == &symbol_no) - return true; - } - break; - default: - ; - } - return false; -} - -/* - * Inserts explicit comparisons of type 'type' to symbol 'sym' into the - * expression 'e'. - * - * Examples transformations for type == E_UNEQUAL, sym == &symbol_no: - * - * A -> A!=n - * !A -> A=n - * A && B -> !(A=n || B=n) - * A || B -> !(A=n && B=n) - * A && (B || C) -> !(A=n || (B=n && C=n)) - * - * Allocates and returns a new expression. - */ -struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym) -{ - struct expr *e1, *e2; - - if (!e) { - e = expr_alloc_symbol(sym); - if (type == E_UNEQUAL) - e = expr_alloc_one(E_NOT, e); - return e; - } - switch (e->type) { - case E_AND: - e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); - e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); - if (sym == &symbol_yes) - e = expr_alloc_two(E_AND, e1, e2); - if (sym == &symbol_no) - e = expr_alloc_two(E_OR, e1, e2); - if (type == E_UNEQUAL) - e = expr_alloc_one(E_NOT, e); - return e; - case E_OR: - e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym); - e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym); - if (sym == &symbol_yes) - e = expr_alloc_two(E_OR, e1, e2); - if (sym == &symbol_no) - e = expr_alloc_two(E_AND, e1, e2); - if (type == E_UNEQUAL) - e = expr_alloc_one(E_NOT, e); - return e; - case E_NOT: - return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym); - case E_UNEQUAL: - case E_LTH: - case E_LEQ: - case E_GTH: - case E_GEQ: - case E_EQUAL: - if (type == E_EQUAL) { - if (sym == &symbol_yes) - return expr_copy(e); - if (sym == &symbol_mod) - return expr_alloc_symbol(&symbol_no); - if (sym == &symbol_no) - return expr_alloc_one(E_NOT, expr_copy(e)); - } else { - if (sym == &symbol_yes) - return expr_alloc_one(E_NOT, expr_copy(e)); - if (sym == &symbol_mod) - return expr_alloc_symbol(&symbol_yes); - if (sym == &symbol_no) - return expr_copy(e); - } - break; - case E_SYMBOL: - return expr_alloc_comp(type, e->left.sym, sym); - case E_LIST: - case E_RANGE: - case E_NONE: - /* panic */; - } - return NULL; -} - -enum string_value_kind { - k_string, - k_signed, - k_unsigned, -}; - -union string_value { - unsigned long long u; - signed long long s; -}; - -static enum string_value_kind expr_parse_string(const char *str, - enum symbol_type type, - union string_value *val) -{ - char *tail; - enum string_value_kind kind; - - errno = 0; - switch (type) { - case S_BOOLEAN: - case S_TRISTATE: - val->s = !strcmp(str, "n") ? 0 : - !strcmp(str, "m") ? 1 : - !strcmp(str, "y") ? 2 : -1; - return k_signed; - case S_INT: - val->s = strtoll(str, &tail, 10); - kind = k_signed; - break; - case S_HEX: - val->u = strtoull(str, &tail, 16); - kind = k_unsigned; - break; - default: - val->s = strtoll(str, &tail, 0); - kind = k_signed; - break; - } - return !errno && !*tail && tail > str && isxdigit(tail[-1]) - ? kind : k_string; -} - -tristate expr_calc_value(struct expr *e) -{ - tristate val1, val2; - const char *str1, *str2; - enum string_value_kind k1 = k_string, k2 = k_string; - union string_value lval = {}, rval = {}; - int res; - - if (!e) - return yes; - - switch (e->type) { - case E_SYMBOL: - sym_calc_value(e->left.sym); - return e->left.sym->curr.tri; - case E_AND: - val1 = expr_calc_value(e->left.expr); - val2 = expr_calc_value(e->right.expr); - return EXPR_AND(val1, val2); - case E_OR: - val1 = expr_calc_value(e->left.expr); - val2 = expr_calc_value(e->right.expr); - return EXPR_OR(val1, val2); - case E_NOT: - val1 = expr_calc_value(e->left.expr); - return EXPR_NOT(val1); - case E_EQUAL: - case E_GEQ: - case E_GTH: - case E_LEQ: - case E_LTH: - case E_UNEQUAL: - break; - default: - printf("expr_calc_value: %d?\n", e->type); - return no; - } - - sym_calc_value(e->left.sym); - sym_calc_value(e->right.sym); - str1 = sym_get_string_value(e->left.sym); - str2 = sym_get_string_value(e->right.sym); - - if (e->left.sym->type != S_STRING || e->right.sym->type != S_STRING) { - k1 = expr_parse_string(str1, e->left.sym->type, &lval); - k2 = expr_parse_string(str2, e->right.sym->type, &rval); - } - - if (k1 == k_string || k2 == k_string) - res = strcmp(str1, str2); - else if (k1 == k_unsigned || k2 == k_unsigned) - res = (lval.u > rval.u) - (lval.u < rval.u); - else /* if (k1 == k_signed && k2 == k_signed) */ - res = (lval.s > rval.s) - (lval.s < rval.s); - - switch(e->type) { - case E_EQUAL: - return res ? no : yes; - case E_GEQ: - return res >= 0 ? yes : no; - case E_GTH: - return res > 0 ? yes : no; - case E_LEQ: - return res <= 0 ? yes : no; - case E_LTH: - return res < 0 ? yes : no; - case E_UNEQUAL: - return res ? yes : no; - default: - printf("expr_calc_value: relation %d?\n", e->type); - return no; - } -} - -static int expr_compare_type(enum expr_type t1, enum expr_type t2) -{ - if (t1 == t2) - return 0; - switch (t1) { - case E_LEQ: - case E_LTH: - case E_GEQ: - case E_GTH: - if (t2 == E_EQUAL || t2 == E_UNEQUAL) - return 1; - case E_EQUAL: - case E_UNEQUAL: - if (t2 == E_NOT) - return 1; - case E_NOT: - if (t2 == E_AND) - return 1; - case E_AND: - if (t2 == E_OR) - return 1; - case E_OR: - if (t2 == E_LIST) - return 1; - case E_LIST: - if (t2 == 0) - return 1; - default: - return -1; - } - printf("[%dgt%d?]", t1, t2); - return 0; -} - -void expr_print(struct expr *e, - void (*fn)(void *, struct symbol *, const char *), - void *data, int prevtoken) -{ - if (!e) { - fn(data, NULL, "y"); - return; - } - - if (expr_compare_type(prevtoken, e->type) > 0) - fn(data, NULL, "("); - switch (e->type) { - case E_SYMBOL: - if (e->left.sym->name) - fn(data, e->left.sym, e->left.sym->name); - else - fn(data, NULL, ""); - break; - case E_NOT: - fn(data, NULL, "!"); - expr_print(e->left.expr, fn, data, E_NOT); - break; - case E_EQUAL: - if (e->left.sym->name) - fn(data, e->left.sym, e->left.sym->name); - else - fn(data, NULL, ""); - fn(data, NULL, "="); - fn(data, e->right.sym, e->right.sym->name); - break; - case E_LEQ: - case E_LTH: - if (e->left.sym->name) - fn(data, e->left.sym, e->left.sym->name); - else - fn(data, NULL, ""); - fn(data, NULL, e->type == E_LEQ ? "<=" : "<"); - fn(data, e->right.sym, e->right.sym->name); - break; - case E_GEQ: - case E_GTH: - if (e->left.sym->name) - fn(data, e->left.sym, e->left.sym->name); - else - fn(data, NULL, ""); - fn(data, NULL, e->type == E_GEQ ? ">=" : ">"); - fn(data, e->right.sym, e->right.sym->name); - break; - case E_UNEQUAL: - if (e->left.sym->name) - fn(data, e->left.sym, e->left.sym->name); - else - fn(data, NULL, ""); - fn(data, NULL, "!="); - fn(data, e->right.sym, e->right.sym->name); - break; - case E_OR: - expr_print(e->left.expr, fn, data, E_OR); - fn(data, NULL, " || "); - expr_print(e->right.expr, fn, data, E_OR); - break; - case E_AND: - expr_print(e->left.expr, fn, data, E_AND); - fn(data, NULL, " && "); - expr_print(e->right.expr, fn, data, E_AND); - break; - case E_LIST: - fn(data, e->right.sym, e->right.sym->name); - if (e->left.expr) { - fn(data, NULL, " ^ "); - expr_print(e->left.expr, fn, data, E_LIST); - } - break; - case E_RANGE: - fn(data, NULL, "["); - fn(data, e->left.sym, e->left.sym->name); - fn(data, NULL, " "); - fn(data, e->right.sym, e->right.sym->name); - fn(data, NULL, "]"); - break; - default: - { - char buf[32]; - sprintf(buf, "", e->type); - fn(data, NULL, buf); - break; - } - } - if (expr_compare_type(prevtoken, e->type) > 0) - fn(data, NULL, ")"); -} - -static void expr_print_file_helper(void *data, struct symbol *sym, const char *str) -{ - xfwrite(str, strlen(str), 1, data); -} - -void expr_fprint(struct expr *e, FILE *out) -{ - expr_print(e, expr_print_file_helper, out, E_NONE); -} - -static void expr_print_gstr_helper(void *data, struct symbol *sym, const char *str) -{ - struct gstr *gs = (struct gstr*)data; - const char *sym_str = NULL; - - if (sym) - sym_str = sym_get_string_value(sym); - - if (gs->max_width) { - unsigned extra_length = strlen(str); - const char *last_cr = strrchr(gs->s, '\n'); - unsigned last_line_length; - - if (sym_str) - extra_length += 4 + strlen(sym_str); - - if (!last_cr) - last_cr = gs->s; - - last_line_length = strlen(gs->s) - (last_cr - gs->s); - - if ((last_line_length + extra_length) > gs->max_width) - str_append(gs, "\\\n"); - } - - str_append(gs, str); - if (sym && sym->type != S_UNKNOWN) - str_printf(gs, " [=%s]", sym_str); -} - -void expr_gstr_print(struct expr *e, struct gstr *gs) -{ - expr_print(e, expr_print_gstr_helper, gs, E_NONE); -} - -/* - * Transform the top level "||" tokens into newlines and prepend each - * line with a minus. This makes expressions much easier to read. - * Suitable for reverse dependency expressions. - */ -static void expr_print_revdep(struct expr *e, - void (*fn)(void *, struct symbol *, const char *), - void *data, tristate pr_type, const char **title) -{ - if (e->type == E_OR) { - expr_print_revdep(e->left.expr, fn, data, pr_type, title); - expr_print_revdep(e->right.expr, fn, data, pr_type, title); - } else if (expr_calc_value(e) == pr_type) { - if (*title) { - fn(data, NULL, *title); - *title = NULL; - } - - fn(data, NULL, " - "); - expr_print(e, fn, data, E_NONE); - fn(data, NULL, "\n"); - } -} - -void expr_gstr_print_revdep(struct expr *e, struct gstr *gs, - tristate pr_type, const char *title) -{ - expr_print_revdep(e, expr_print_gstr_helper, gs, pr_type, &title); -} diff --git a/libraries/NEMU/tools/kconfig/expr.h b/libraries/NEMU/tools/kconfig/expr.h deleted file mode 100644 index 5c34436..0000000 --- a/libraries/NEMU/tools/kconfig/expr.h +++ /dev/null @@ -1,332 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* - * Copyright (C) 2002 Roman Zippel - */ - -#ifndef EXPR_H -#define EXPR_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include "list.h" -#ifndef __cplusplus -#include -#endif - -struct file { - struct file *next; - struct file *parent; - const char *name; - int lineno; -}; - -typedef enum tristate { - no, mod, yes -} tristate; - -enum expr_type { - E_NONE, E_OR, E_AND, E_NOT, - E_EQUAL, E_UNEQUAL, E_LTH, E_LEQ, E_GTH, E_GEQ, - E_LIST, E_SYMBOL, E_RANGE -}; - -union expr_data { - struct expr *expr; - struct symbol *sym; -}; - -struct expr { - enum expr_type type; - union expr_data left, right; -}; - -#define EXPR_OR(dep1, dep2) (((dep1)>(dep2))?(dep1):(dep2)) -#define EXPR_AND(dep1, dep2) (((dep1)<(dep2))?(dep1):(dep2)) -#define EXPR_NOT(dep) (2-(dep)) - -#define expr_list_for_each_sym(l, e, s) \ - for (e = (l); e && (s = e->right.sym); e = e->left.expr) - -struct expr_value { - struct expr *expr; - tristate tri; -}; - -struct symbol_value { - void *val; - tristate tri; -}; - -enum symbol_type { - S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING -}; - -/* enum values are used as index to symbol.def[] */ -enum { - S_DEF_USER, /* main user value */ - S_DEF_AUTO, /* values read from auto.conf */ - S_DEF_DEF3, /* Reserved for UI usage */ - S_DEF_DEF4, /* Reserved for UI usage */ - S_DEF_COUNT -}; - -/* - * Represents a configuration symbol. - * - * Choices are represented as a special kind of symbol and have the - * SYMBOL_CHOICE bit set in 'flags'. - */ -struct symbol { - /* The next symbol in the same bucket in the symbol hash table */ - struct symbol *next; - - /* The name of the symbol, e.g. "FOO" for 'config FOO' */ - char *name; - - /* S_BOOLEAN, S_TRISTATE, ... */ - enum symbol_type type; - - /* - * The calculated value of the symbol. The SYMBOL_VALID bit is set in - * 'flags' when this is up to date. Note that this value might differ - * from the user value set in e.g. a .config file, due to visibility. - */ - struct symbol_value curr; - - /* - * Values for the symbol provided from outside. def[S_DEF_USER] holds - * the .config value. - */ - struct symbol_value def[S_DEF_COUNT]; - - /* - * An upper bound on the tristate value the user can set for the symbol - * if it is a boolean or tristate. Calculated from prompt dependencies, - * which also inherit dependencies from enclosing menus, choices, and - * ifs. If 'n', the user value will be ignored. - * - * Symbols lacking prompts always have visibility 'n'. - */ - tristate visible; - - /* SYMBOL_* flags */ - int flags; - - /* List of properties. See prop_type. */ - struct property *prop; - - /* Dependencies from enclosing menus, choices, and ifs */ - struct expr_value dir_dep; - - /* Reverse dependencies through being selected by other symbols */ - struct expr_value rev_dep; - - /* - * "Weak" reverse dependencies through being implied by other symbols - */ - struct expr_value implied; -}; - -#define for_all_symbols(i, sym) for (i = 0; i < SYMBOL_HASHSIZE; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) - -#define SYMBOL_CONST 0x0001 /* symbol is const */ -#define SYMBOL_CHECK 0x0008 /* used during dependency checking */ -#define SYMBOL_CHOICE 0x0010 /* start of a choice block (null name) */ -#define SYMBOL_CHOICEVAL 0x0020 /* used as a value in a choice block */ -#define SYMBOL_VALID 0x0080 /* set when symbol.curr is calculated */ -#define SYMBOL_OPTIONAL 0x0100 /* choice is optional - values can be 'n' */ -#define SYMBOL_WRITE 0x0200 /* write symbol to file (KCONFIG_CONFIG) */ -#define SYMBOL_CHANGED 0x0400 /* ? */ -#define SYMBOL_WRITTEN 0x0800 /* track info to avoid double-write to .config */ -#define SYMBOL_NO_WRITE 0x1000 /* Symbol for internal use only; it will not be written */ -#define SYMBOL_CHECKED 0x2000 /* used during dependency checking */ -#define SYMBOL_WARNED 0x8000 /* warning has been issued */ - -/* Set when symbol.def[] is used */ -#define SYMBOL_DEF 0x10000 /* First bit of SYMBOL_DEF */ -#define SYMBOL_DEF_USER 0x10000 /* symbol.def[S_DEF_USER] is valid */ -#define SYMBOL_DEF_AUTO 0x20000 /* symbol.def[S_DEF_AUTO] is valid */ -#define SYMBOL_DEF3 0x40000 /* symbol.def[S_DEF_3] is valid */ -#define SYMBOL_DEF4 0x80000 /* symbol.def[S_DEF_4] is valid */ - -/* choice values need to be set before calculating this symbol value */ -#define SYMBOL_NEED_SET_CHOICE_VALUES 0x100000 - -/* Set symbol to y if allnoconfig; used for symbols that hide others */ -#define SYMBOL_ALLNOCONFIG_Y 0x200000 - -#define SYMBOL_MAXLENGTH 256 -#define SYMBOL_HASHSIZE 9973 - -/* A property represent the config options that can be associated - * with a config "symbol". - * Sample: - * config FOO - * default y - * prompt "foo prompt" - * select BAR - * config BAZ - * int "BAZ Value" - * range 1..255 - * - * Please, also check parser.y:print_symbol() when modifying the - * list of property types! - */ -enum prop_type { - P_UNKNOWN, - P_PROMPT, /* prompt "foo prompt" or "BAZ Value" */ - P_COMMENT, /* text associated with a comment */ - P_MENU, /* prompt associated with a menu or menuconfig symbol */ - P_DEFAULT, /* default y */ - P_CHOICE, /* choice value */ - P_SELECT, /* select BAR */ - P_IMPLY, /* imply BAR */ - P_RANGE, /* range 7..100 (for a symbol) */ - P_SYMBOL, /* where a symbol is defined */ -}; - -struct property { - struct property *next; /* next property - null if last */ - enum prop_type type; /* type of property */ - const char *text; /* the prompt value - P_PROMPT, P_MENU, P_COMMENT */ - struct expr_value visible; - struct expr *expr; /* the optional conditional part of the property */ - struct menu *menu; /* the menu the property are associated with - * valid for: P_SELECT, P_RANGE, P_CHOICE, - * P_PROMPT, P_DEFAULT, P_MENU, P_COMMENT */ - struct file *file; /* what file was this property defined */ - int lineno; /* what lineno was this property defined */ -}; - -#define for_all_properties(sym, st, tok) \ - for (st = sym->prop; st; st = st->next) \ - if (st->type == (tok)) -#define for_all_defaults(sym, st) for_all_properties(sym, st, P_DEFAULT) -#define for_all_choices(sym, st) for_all_properties(sym, st, P_CHOICE) -#define for_all_prompts(sym, st) \ - for (st = sym->prop; st; st = st->next) \ - if (st->text) - -/* - * Represents a node in the menu tree, as seen in e.g. menuconfig (though used - * for all front ends). Each symbol, menu, etc. defined in the Kconfig files - * gets a node. A symbol defined in multiple locations gets one node at each - * location. - */ -struct menu { - /* The next menu node at the same level */ - struct menu *next; - - /* The parent menu node, corresponding to e.g. a menu or choice */ - struct menu *parent; - - /* The first child menu node, for e.g. menus and choices */ - struct menu *list; - - /* - * The symbol associated with the menu node. Choices are implemented as - * a special kind of symbol. NULL for menus, comments, and ifs. - */ - struct symbol *sym; - - /* - * The prompt associated with the node. This holds the prompt for a - * symbol as well as the text for a menu or comment, along with the - * type (P_PROMPT, P_MENU, etc.) - */ - struct property *prompt; - - /* - * 'visible if' dependencies. If more than one is given, they will be - * ANDed together. - */ - struct expr *visibility; - - /* - * Ordinary dependencies from e.g. 'depends on' and 'if', ANDed - * together - */ - struct expr *dep; - - /* MENU_* flags */ - unsigned int flags; - - /* Any help text associated with the node */ - char *help; - - /* The location where the menu node appears in the Kconfig files */ - struct file *file; - int lineno; - - /* For use by front ends that need to store auxiliary data */ - void *data; -}; - -/* - * Set on a menu node when the corresponding symbol changes state in some way. - * Can be checked by front ends. - */ -#define MENU_CHANGED 0x0001 - -#define MENU_ROOT 0x0002 - -struct jump_key { - struct list_head entries; - size_t offset; - struct menu *target; - int index; -}; - -#define JUMP_NB 9 - -extern struct file *file_list; -extern struct file *current_file; -struct file *lookup_file(const char *name); - -extern struct symbol symbol_yes, symbol_no, symbol_mod; -extern struct symbol *modules_sym; -extern struct symbol *sym_defconfig_list; -extern int cdebug; -struct expr *expr_alloc_symbol(struct symbol *sym); -struct expr *expr_alloc_one(enum expr_type type, struct expr *ce); -struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2); -struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2); -struct expr *expr_alloc_and(struct expr *e1, struct expr *e2); -struct expr *expr_alloc_or(struct expr *e1, struct expr *e2); -struct expr *expr_copy(const struct expr *org); -void expr_free(struct expr *e); -void expr_eliminate_eq(struct expr **ep1, struct expr **ep2); -int expr_eq(struct expr *e1, struct expr *e2); -tristate expr_calc_value(struct expr *e); -struct expr *expr_trans_bool(struct expr *e); -struct expr *expr_eliminate_dups(struct expr *e); -struct expr *expr_transform(struct expr *e); -int expr_contains_symbol(struct expr *dep, struct symbol *sym); -bool expr_depends_symbol(struct expr *dep, struct symbol *sym); -struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym); - -void expr_fprint(struct expr *e, FILE *out); -struct gstr; /* forward */ -void expr_gstr_print(struct expr *e, struct gstr *gs); -void expr_gstr_print_revdep(struct expr *e, struct gstr *gs, - tristate pr_type, const char *title); - -static inline int expr_is_yes(struct expr *e) -{ - return !e || (e->type == E_SYMBOL && e->left.sym == &symbol_yes); -} - -static inline int expr_is_no(struct expr *e) -{ - return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no); -} - -#ifdef __cplusplus -} -#endif - -#endif /* EXPR_H */ diff --git a/libraries/NEMU/tools/kconfig/lexer.l b/libraries/NEMU/tools/kconfig/lexer.l deleted file mode 100644 index 240109f..0000000 --- a/libraries/NEMU/tools/kconfig/lexer.l +++ /dev/null @@ -1,471 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* - * Copyright (C) 2002 Roman Zippel - */ -%option nostdinit noyywrap never-interactive full ecs -%option 8bit nodefault yylineno -%x ASSIGN_VAL HELP STRING -%{ - -#include -#include -#include -#include -#include -#include - -#include "lkc.h" -#include "parser.tab.h" - -#define YY_DECL static int yylex1(void) - -#define START_STRSIZE 16 - -static struct { - struct file *file; - int lineno; -} current_pos; - -static int prev_prev_token = T_EOL; -static int prev_token = T_EOL; -static char *text; -static int text_size, text_asize; - -struct buffer { - struct buffer *parent; - YY_BUFFER_STATE state; -}; - -static struct buffer *current_buf; - -static int last_ts, first_ts; - -static char *expand_token(const char *in, size_t n); -static void append_expanded_string(const char *in); -static void zconf_endhelp(void); -static void zconf_endfile(void); - -static void new_string(void) -{ - text = xmalloc(START_STRSIZE); - text_asize = START_STRSIZE; - text_size = 0; - *text = 0; -} - -static void append_string(const char *str, int size) -{ - int new_size = text_size + size + 1; - if (new_size > text_asize) { - new_size += START_STRSIZE - 1; - new_size &= -START_STRSIZE; - text = xrealloc(text, new_size); - text_asize = new_size; - } - memcpy(text + text_size, str, size); - text_size += size; - text[text_size] = 0; -} - -static void alloc_string(const char *str, int size) -{ - text = xmalloc(size + 1); - memcpy(text, str, size); - text[size] = 0; -} - -static void warn_ignored_character(char chr) -{ - fprintf(stderr, - "%s:%d:warning: ignoring unsupported character '%c'\n", - current_file->name, yylineno, chr); -} -%} - -n [A-Za-z0-9_-] - -%% - int str = 0; - int ts, i; - -#.* /* ignore comment */ -[ \t]* /* whitespaces */ -\\\n /* escaped new line */ -\n return T_EOL; -"allnoconfig_y" return T_ALLNOCONFIG_Y; -"bool" return T_BOOL; -"choice" return T_CHOICE; -"comment" return T_COMMENT; -"config" return T_CONFIG; -"def_bool" return T_DEF_BOOL; -"def_tristate" return T_DEF_TRISTATE; -"default" return T_DEFAULT; -"defconfig_list" return T_DEFCONFIG_LIST; -"depends" return T_DEPENDS; -"endchoice" return T_ENDCHOICE; -"endif" return T_ENDIF; -"endmenu" return T_ENDMENU; -"help" return T_HELP; -"hex" return T_HEX; -"if" return T_IF; -"imply" return T_IMPLY; -"int" return T_INT; -"mainmenu" return T_MAINMENU; -"menu" return T_MENU; -"menuconfig" return T_MENUCONFIG; -"modules" return T_MODULES; -"on" return T_ON; -"option" return T_OPTION; -"optional" return T_OPTIONAL; -"prompt" return T_PROMPT; -"range" return T_RANGE; -"select" return T_SELECT; -"source" return T_SOURCE; -"string" return T_STRING; -"tristate" return T_TRISTATE; -"visible" return T_VISIBLE; -"||" return T_OR; -"&&" return T_AND; -"=" return T_EQUAL; -"!=" return T_UNEQUAL; -"<" return T_LESS; -"<=" return T_LESS_EQUAL; -">" return T_GREATER; -">=" return T_GREATER_EQUAL; -"!" return T_NOT; -"(" return T_OPEN_PAREN; -")" return T_CLOSE_PAREN; -":=" return T_COLON_EQUAL; -"+=" return T_PLUS_EQUAL; -\"|\' { - str = yytext[0]; - new_string(); - BEGIN(STRING); - } -{n}+ { - alloc_string(yytext, yyleng); - yylval.string = text; - return T_WORD; - } -({n}|$)+ { - /* this token includes at least one '$' */ - yylval.string = expand_token(yytext, yyleng); - if (strlen(yylval.string)) - return T_WORD; - free(yylval.string); - } -. warn_ignored_character(*yytext); - -{ - [^[:blank:]\n]+.* { - alloc_string(yytext, yyleng); - yylval.string = text; - return T_ASSIGN_VAL; - } - \n { BEGIN(INITIAL); return T_EOL; } - . -} - -{ - "$".* append_expanded_string(yytext); - [^$'"\\\n]+ { - append_string(yytext, yyleng); - } - \\.? { - append_string(yytext + 1, yyleng - 1); - } - \'|\" { - if (str == yytext[0]) { - BEGIN(INITIAL); - yylval.string = text; - return T_WORD_QUOTE; - } else - append_string(yytext, 1); - } - \n { - fprintf(stderr, - "%s:%d:warning: multi-line strings not supported\n", - zconf_curname(), zconf_lineno()); - unput('\n'); - BEGIN(INITIAL); - yylval.string = text; - return T_WORD_QUOTE; - } - <> { - BEGIN(INITIAL); - yylval.string = text; - return T_WORD_QUOTE; - } -} - -{ - [ \t]+ { - ts = 0; - for (i = 0; i < yyleng; i++) { - if (yytext[i] == '\t') - ts = (ts & ~7) + 8; - else - ts++; - } - last_ts = ts; - if (first_ts) { - if (ts < first_ts) { - zconf_endhelp(); - return T_HELPTEXT; - } - ts -= first_ts; - while (ts > 8) { - append_string(" ", 8); - ts -= 8; - } - append_string(" ", ts); - } - } - [ \t]*\n/[^ \t\n] { - zconf_endhelp(); - return T_HELPTEXT; - } - [ \t]*\n { - append_string("\n", 1); - } - [^ \t\n].* { - while (yyleng) { - if ((yytext[yyleng-1] != ' ') && (yytext[yyleng-1] != '\t')) - break; - yyleng--; - } - append_string(yytext, yyleng); - if (!first_ts) - first_ts = last_ts; - } - <> { - zconf_endhelp(); - return T_HELPTEXT; - } -} - -<> { - BEGIN(INITIAL); - - if (prev_token != T_EOL && prev_token != T_HELPTEXT) - fprintf(stderr, "%s:%d:warning: no new line at end of file\n", - current_file->name, yylineno); - - if (current_file) { - zconf_endfile(); - return T_EOL; - } - fclose(yyin); - yyterminate(); -} - -%% - -/* second stage lexer */ -int yylex(void) -{ - int token; - -repeat: - token = yylex1(); - - if (prev_token == T_EOL || prev_token == T_HELPTEXT) { - if (token == T_EOL) { - /* Do not pass unneeded T_EOL to the parser. */ - goto repeat; - } else { - /* - * For the parser, update file/lineno at the first token - * of each statement. Generally, \n is a statement - * terminator in Kconfig, but it is not always true - * because \n could be escaped by a backslash. - */ - current_pos.file = current_file; - current_pos.lineno = yylineno; - } - } - - if (prev_prev_token == T_EOL && prev_token == T_WORD && - (token == T_EQUAL || token == T_COLON_EQUAL || token == T_PLUS_EQUAL)) - BEGIN(ASSIGN_VAL); - - prev_prev_token = prev_token; - prev_token = token; - - return token; -} - -static char *expand_token(const char *in, size_t n) -{ - char *out; - int c; - char c2; - const char *rest, *end; - - new_string(); - append_string(in, n); - - /* get the whole line because we do not know the end of token. */ - while ((c = input()) != EOF) { - if (c == '\n') { - unput(c); - break; - } - c2 = c; - append_string(&c2, 1); - } - - rest = text; - out = expand_one_token(&rest); - - /* push back unused characters to the input stream */ - end = rest + strlen(rest); - while (end > rest) - unput(*--end); - - free(text); - - return out; -} - -static void append_expanded_string(const char *str) -{ - const char *end; - char *res; - - str++; - - res = expand_dollar(&str); - - /* push back unused characters to the input stream */ - end = str + strlen(str); - while (end > str) - unput(*--end); - - append_string(res, strlen(res)); - - free(res); -} - -void zconf_starthelp(void) -{ - new_string(); - last_ts = first_ts = 0; - BEGIN(HELP); -} - -static void zconf_endhelp(void) -{ - yylval.string = text; - BEGIN(INITIAL); -} - - -/* - * Try to open specified file with following names: - * ./name - * $(srctree)/name - * The latter is used when srctree is separate from objtree - * when compiling the kernel. - * Return NULL if file is not found. - */ -FILE *zconf_fopen(const char *name) -{ - char *env, fullname[PATH_MAX+1]; - FILE *f; - - f = fopen(name, "r"); - if (!f && name != NULL && name[0] != '/') { - env = getenv(SRCTREE); - if (env) { - snprintf(fullname, sizeof(fullname), - "%s/%s", env, name); - f = fopen(fullname, "r"); - } - } - return f; -} - -void zconf_initscan(const char *name) -{ - yyin = zconf_fopen(name); - if (!yyin) { - fprintf(stderr, "can't find file %s\n", name); - exit(1); - } - - current_buf = xmalloc(sizeof(*current_buf)); - memset(current_buf, 0, sizeof(*current_buf)); - - current_file = file_lookup(name); - yylineno = 1; -} - -void zconf_nextfile(const char *name) -{ - struct file *iter; - struct file *file = file_lookup(name); - struct buffer *buf = xmalloc(sizeof(*buf)); - memset(buf, 0, sizeof(*buf)); - - current_buf->state = YY_CURRENT_BUFFER; - yyin = zconf_fopen(file->name); - if (!yyin) { - fprintf(stderr, "%s:%d: can't open file \"%s\"\n", - zconf_curname(), zconf_lineno(), file->name); - exit(1); - } - yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE)); - buf->parent = current_buf; - current_buf = buf; - - current_file->lineno = yylineno; - file->parent = current_file; - - for (iter = current_file; iter; iter = iter->parent) { - if (!strcmp(iter->name, file->name)) { - fprintf(stderr, - "Recursive inclusion detected.\n" - "Inclusion path:\n" - " current file : %s\n", file->name); - iter = file; - do { - iter = iter->parent; - fprintf(stderr, " included from: %s:%d\n", - iter->name, iter->lineno - 1); - } while (strcmp(iter->name, file->name)); - exit(1); - } - } - - yylineno = 1; - current_file = file; -} - -static void zconf_endfile(void) -{ - struct buffer *parent; - - current_file = current_file->parent; - if (current_file) - yylineno = current_file->lineno; - - parent = current_buf->parent; - if (parent) { - fclose(yyin); - yy_delete_buffer(YY_CURRENT_BUFFER); - yy_switch_to_buffer(parent->state); - } - free(current_buf); - current_buf = parent; -} - -int zconf_lineno(void) -{ - return current_pos.lineno; -} - -const char *zconf_curname(void) -{ - return current_pos.file ? current_pos.file->name : ""; -} diff --git a/libraries/NEMU/tools/kconfig/list.h b/libraries/NEMU/tools/kconfig/list.h deleted file mode 100644 index 45cb237..0000000 --- a/libraries/NEMU/tools/kconfig/list.h +++ /dev/null @@ -1,132 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#ifndef LIST_H -#define LIST_H - -/* - * Copied from include/linux/... - */ - -#undef offsetof -#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) - -/** - * container_of - cast a member of a structure out to the containing structure - * @ptr: the pointer to the member. - * @type: the type of the container struct this is embedded in. - * @member: the name of the member within the struct. - * - */ -#define container_of(ptr, type, member) ({ \ - const typeof( ((type *)0)->member ) *__mptr = (ptr); \ - (type *)( (char *)__mptr - offsetof(type,member) );}) - - -struct list_head { - struct list_head *next, *prev; -}; - - -#define LIST_HEAD_INIT(name) { &(name), &(name) } - -#define LIST_HEAD(name) \ - struct list_head name = LIST_HEAD_INIT(name) - -/** - * list_entry - get the struct for this entry - * @ptr: the &struct list_head pointer. - * @type: the type of the struct this is embedded in. - * @member: the name of the list_head within the struct. - */ -#define list_entry(ptr, type, member) \ - container_of(ptr, type, member) - -/** - * list_for_each_entry - iterate over list of given type - * @pos: the type * to use as a loop cursor. - * @head: the head for your list. - * @member: the name of the list_head within the struct. - */ -#define list_for_each_entry(pos, head, member) \ - for (pos = list_entry((head)->next, typeof(*pos), member); \ - &pos->member != (head); \ - pos = list_entry(pos->member.next, typeof(*pos), member)) - -/** - * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry - * @pos: the type * to use as a loop cursor. - * @n: another type * to use as temporary storage - * @head: the head for your list. - * @member: the name of the list_head within the struct. - */ -#define list_for_each_entry_safe(pos, n, head, member) \ - for (pos = list_entry((head)->next, typeof(*pos), member), \ - n = list_entry(pos->member.next, typeof(*pos), member); \ - &pos->member != (head); \ - pos = n, n = list_entry(n->member.next, typeof(*n), member)) - -/** - * list_empty - tests whether a list is empty - * @head: the list to test. - */ -static inline int list_empty(const struct list_head *head) -{ - return head->next == head; -} - -/* - * Insert a new entry between two known consecutive entries. - * - * This is only for internal list manipulation where we know - * the prev/next entries already! - */ -static inline void __list_add(struct list_head *_new, - struct list_head *prev, - struct list_head *next) -{ - next->prev = _new; - _new->next = next; - _new->prev = prev; - prev->next = _new; -} - -/** - * list_add_tail - add a new entry - * @new: new entry to be added - * @head: list head to add it before - * - * Insert a new entry before the specified head. - * This is useful for implementing queues. - */ -static inline void list_add_tail(struct list_head *_new, struct list_head *head) -{ - __list_add(_new, head->prev, head); -} - -/* - * Delete a list entry by making the prev/next entries - * point to each other. - * - * This is only for internal list manipulation where we know - * the prev/next entries already! - */ -static inline void __list_del(struct list_head *prev, struct list_head *next) -{ - next->prev = prev; - prev->next = next; -} - -#define LIST_POISON1 ((void *) 0x00100100) -#define LIST_POISON2 ((void *) 0x00200200) -/** - * list_del - deletes entry from list. - * @entry: the element to delete from the list. - * Note: list_empty() on entry does not return true after this, the entry is - * in an undefined state. - */ -static inline void list_del(struct list_head *entry) -{ - __list_del(entry->prev, entry->next); - entry->next = (struct list_head*)LIST_POISON1; - entry->prev = (struct list_head*)LIST_POISON2; -} -#endif diff --git a/libraries/NEMU/tools/kconfig/lkc.h b/libraries/NEMU/tools/kconfig/lkc.h deleted file mode 100644 index 8454649..0000000 --- a/libraries/NEMU/tools/kconfig/lkc.h +++ /dev/null @@ -1,173 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* - * Copyright (C) 2002 Roman Zippel - */ - -#ifndef LKC_H -#define LKC_H - -#include "expr.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#include "lkc_proto.h" - -#define SRCTREE "srctree" - -#ifndef PACKAGE -#define PACKAGE "linux" -#endif - -#ifndef CONFIG_ -#define CONFIG_ "CONFIG_" -#endif -static inline const char *CONFIG_prefix(void) -{ - return getenv( "CONFIG_" ) ?: CONFIG_; -} -#undef CONFIG_ -#define CONFIG_ CONFIG_prefix() - -enum conf_def_mode { - def_default, - def_yes, - def_mod, - def_y2m, - def_m2y, - def_no, - def_random -}; - -extern int yylineno; -void zconfdump(FILE *out); -void zconf_starthelp(void); -FILE *zconf_fopen(const char *name); -void zconf_initscan(const char *name); -void zconf_nextfile(const char *name); -int zconf_lineno(void); -const char *zconf_curname(void); - -/* confdata.c */ -const char *conf_get_configname(void); -void sym_set_change_count(int count); -void sym_add_change_count(int count); -bool conf_set_all_new_symbols(enum conf_def_mode mode); -void conf_rewrite_mod_or_yes(enum conf_def_mode mode); -void set_all_choice_values(struct symbol *csym); - -/* confdata.c and expr.c */ -static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out) -{ - assert(len != 0); - - if (fwrite(str, len, count, out) != count) - fprintf(stderr, "Error in writing or end of file.\n"); -} - -/* util.c */ -struct file *file_lookup(const char *name); -void *xmalloc(size_t size); -void *xcalloc(size_t nmemb, size_t size); -void *xrealloc(void *p, size_t size); -char *xstrdup(const char *s); -char *xstrndup(const char *s, size_t n); - -/* lexer.l */ -int yylex(void); - -struct gstr { - size_t len; - char *s; - /* - * when max_width is not zero long lines in string s (if any) get - * wrapped not to exceed the max_width value - */ - int max_width; -}; -struct gstr str_new(void); -void str_free(struct gstr *gs); -void str_append(struct gstr *gs, const char *s); -void str_printf(struct gstr *gs, const char *fmt, ...); -const char *str_get(struct gstr *gs); - -/* menu.c */ -void _menu_init(void); -void menu_warn(struct menu *menu, const char *fmt, ...); -struct menu *menu_add_menu(void); -void menu_end_menu(void); -void menu_add_entry(struct symbol *sym); -void menu_add_dep(struct expr *dep); -void menu_add_visibility(struct expr *dep); -struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep); -void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep); -void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep); -void menu_add_option_modules(void); -void menu_add_option_defconfig_list(void); -void menu_add_option_allnoconfig_y(void); -void menu_finalize(struct menu *parent); -void menu_set_type(int type); - -extern struct menu rootmenu; - -bool menu_is_empty(struct menu *menu); -bool menu_is_visible(struct menu *menu); -bool menu_has_prompt(struct menu *menu); -const char *menu_get_prompt(struct menu *menu); -struct menu *menu_get_root_menu(struct menu *menu); -struct menu *menu_get_parent_menu(struct menu *menu); -bool menu_has_help(struct menu *menu); -const char *menu_get_help(struct menu *menu); -struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head); -void menu_get_ext_help(struct menu *menu, struct gstr *help); - -/* symbol.c */ -void sym_clear_all_valid(void); -struct symbol *sym_choice_default(struct symbol *sym); -struct property *sym_get_range_prop(struct symbol *sym); -const char *sym_get_string_default(struct symbol *sym); -struct symbol *sym_check_deps(struct symbol *sym); -struct symbol *prop_get_symbol(struct property *prop); - -static inline tristate sym_get_tristate_value(struct symbol *sym) -{ - return sym->curr.tri; -} - - -static inline struct symbol *sym_get_choice_value(struct symbol *sym) -{ - return (struct symbol *)sym->curr.val; -} - -static inline bool sym_set_choice_value(struct symbol *ch, struct symbol *chval) -{ - return sym_set_tristate_value(chval, yes); -} - -static inline bool sym_is_choice(struct symbol *sym) -{ - return sym->flags & SYMBOL_CHOICE ? true : false; -} - -static inline bool sym_is_choice_value(struct symbol *sym) -{ - return sym->flags & SYMBOL_CHOICEVAL ? true : false; -} - -static inline bool sym_is_optional(struct symbol *sym) -{ - return sym->flags & SYMBOL_OPTIONAL ? true : false; -} - -static inline bool sym_has_value(struct symbol *sym) -{ - return sym->flags & SYMBOL_DEF_USER ? true : false; -} - -#ifdef __cplusplus -} -#endif - -#endif /* LKC_H */ diff --git a/libraries/NEMU/tools/kconfig/lkc_proto.h b/libraries/NEMU/tools/kconfig/lkc_proto.h deleted file mode 100644 index 9e81be3..0000000 --- a/libraries/NEMU/tools/kconfig/lkc_proto.h +++ /dev/null @@ -1,51 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#include - -/* confdata.c */ -void conf_parse(const char *name); -int conf_read(const char *name); -int conf_read_simple(const char *name, int); -int conf_write_defconfig(const char *name); -int conf_write(const char *name); -int conf_write_autoconf(int overwrite); -bool conf_get_changed(void); -void conf_set_changed_callback(void (*fn)(void)); -void conf_set_message_callback(void (*fn)(const char *s)); - -/* symbol.c */ -extern struct symbol * symbol_hash[SYMBOL_HASHSIZE]; - -struct symbol * sym_lookup(const char *name, int flags); -struct symbol * sym_find(const char *name); -const char * sym_escape_string_value(const char *in); -struct symbol ** sym_re_search(const char *pattern); -const char * sym_type_name(enum symbol_type type); -void sym_calc_value(struct symbol *sym); -enum symbol_type sym_get_type(struct symbol *sym); -bool sym_tristate_within_range(struct symbol *sym,tristate tri); -bool sym_set_tristate_value(struct symbol *sym,tristate tri); -tristate sym_toggle_tristate_value(struct symbol *sym); -bool sym_string_valid(struct symbol *sym, const char *newval); -bool sym_string_within_range(struct symbol *sym, const char *str); -bool sym_set_string_value(struct symbol *sym, const char *newval); -bool sym_is_changeable(struct symbol *sym); -struct property * sym_get_choice_prop(struct symbol *sym); -const char * sym_get_string_value(struct symbol *sym); - -const char * prop_get_type_name(enum prop_type type); - -/* preprocess.c */ -enum variable_flavor { - VAR_SIMPLE, - VAR_RECURSIVE, - VAR_APPEND, -}; -void env_write_dep(FILE *f, const char *auto_conf_name); -void variable_add(const char *name, const char *value, - enum variable_flavor flavor); -void variable_all_del(void); -char *expand_dollar(const char **str); -char *expand_one_token(const char **str); - -/* expr.c */ -void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken); diff --git a/libraries/NEMU/tools/kconfig/lxdialog/checklist.c b/libraries/NEMU/tools/kconfig/lxdialog/checklist.c deleted file mode 100644 index fd161cf..0000000 --- a/libraries/NEMU/tools/kconfig/lxdialog/checklist.c +++ /dev/null @@ -1,319 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0+ -/* - * checklist.c -- implements the checklist box - * - * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension - * Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two - * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) - */ - -#include "dialog.h" - -static int list_width, check_x, item_x; - -/* - * Print list item - */ -static void print_item(WINDOW * win, int choice, int selected) -{ - int i; - char *list_item = malloc(list_width + 1); - - strncpy(list_item, item_str(), list_width - item_x); - list_item[list_width - item_x] = '\0'; - - /* Clear 'residue' of last item */ - wattrset(win, dlg.menubox.atr); - wmove(win, choice, 0); - for (i = 0; i < list_width; i++) - waddch(win, ' '); - - wmove(win, choice, check_x); - wattrset(win, selected ? dlg.check_selected.atr - : dlg.check.atr); - if (!item_is_tag(':')) - wprintw(win, "(%c)", item_is_tag('X') ? 'X' : ' '); - - wattrset(win, selected ? dlg.tag_selected.atr : dlg.tag.atr); - mvwaddch(win, choice, item_x, list_item[0]); - wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr); - waddstr(win, list_item + 1); - if (selected) { - wmove(win, choice, check_x + 1); - wrefresh(win); - } - free(list_item); -} - -/* - * Print the scroll indicators. - */ -static void print_arrows(WINDOW * win, int choice, int item_no, int scroll, - int y, int x, int height) -{ - wmove(win, y, x); - - if (scroll > 0) { - wattrset(win, dlg.uarrow.atr); - waddch(win, ACS_UARROW); - waddstr(win, "(-)"); - } else { - wattrset(win, dlg.menubox.atr); - waddch(win, ACS_HLINE); - waddch(win, ACS_HLINE); - waddch(win, ACS_HLINE); - waddch(win, ACS_HLINE); - } - - y = y + height + 1; - wmove(win, y, x); - - if ((height < item_no) && (scroll + choice < item_no - 1)) { - wattrset(win, dlg.darrow.atr); - waddch(win, ACS_DARROW); - waddstr(win, "(+)"); - } else { - wattrset(win, dlg.menubox_border.atr); - waddch(win, ACS_HLINE); - waddch(win, ACS_HLINE); - waddch(win, ACS_HLINE); - waddch(win, ACS_HLINE); - } -} - -/* - * Display the termination buttons - */ -static void print_buttons(WINDOW * dialog, int height, int width, int selected) -{ - int x = width / 2 - 11; - int y = height - 2; - - print_button(dialog, "Select", y, x, selected == 0); - print_button(dialog, " Help ", y, x + 14, selected == 1); - - wmove(dialog, y, x + 1 + 14 * selected); - wrefresh(dialog); -} - -/* - * Display a dialog box with a list of options that can be turned on or off - * in the style of radiolist (only one option turned on at a time). - */ -int dialog_checklist(const char *title, const char *prompt, int height, - int width, int list_height) -{ - int i, x, y, box_x, box_y; - int key = 0, button = 0, choice = 0, scroll = 0, max_choice; - WINDOW *dialog, *list; - - /* which item to highlight */ - item_foreach() { - if (item_is_tag('X')) - choice = item_n(); - if (item_is_selected()) { - choice = item_n(); - break; - } - } - -do_resize: - if (getmaxy(stdscr) < (height + CHECKLIST_HEIGTH_MIN)) - return -ERRDISPLAYTOOSMALL; - if (getmaxx(stdscr) < (width + CHECKLIST_WIDTH_MIN)) - return -ERRDISPLAYTOOSMALL; - - max_choice = MIN(list_height, item_count()); - - /* center dialog box on screen */ - x = (getmaxx(stdscr) - width) / 2; - y = (getmaxy(stdscr) - height) / 2; - - draw_shadow(stdscr, y, x, height, width); - - dialog = newwin(height, width, y, x); - keypad(dialog, TRUE); - - draw_box(dialog, 0, 0, height, width, - dlg.dialog.atr, dlg.border.atr); - wattrset(dialog, dlg.border.atr); - mvwaddch(dialog, height - 3, 0, ACS_LTEE); - for (i = 0; i < width - 2; i++) - waddch(dialog, ACS_HLINE); - wattrset(dialog, dlg.dialog.atr); - waddch(dialog, ACS_RTEE); - - print_title(dialog, title, width); - - wattrset(dialog, dlg.dialog.atr); - print_autowrap(dialog, prompt, width - 2, 1, 3); - - list_width = width - 6; - box_y = height - list_height - 5; - box_x = (width - list_width) / 2 - 1; - - /* create new window for the list */ - list = subwin(dialog, list_height, list_width, y + box_y + 1, - x + box_x + 1); - - keypad(list, TRUE); - - /* draw a box around the list items */ - draw_box(dialog, box_y, box_x, list_height + 2, list_width + 2, - dlg.menubox_border.atr, dlg.menubox.atr); - - /* Find length of longest item in order to center checklist */ - check_x = 0; - item_foreach() - check_x = MAX(check_x, strlen(item_str()) + 4); - check_x = MIN(check_x, list_width); - - check_x = (list_width - check_x) / 2; - item_x = check_x + 4; - - if (choice >= list_height) { - scroll = choice - list_height + 1; - choice -= scroll; - } - - /* Print the list */ - for (i = 0; i < max_choice; i++) { - item_set(scroll + i); - print_item(list, i, i == choice); - } - - print_arrows(dialog, choice, item_count(), scroll, - box_y, box_x + check_x + 5, list_height); - - print_buttons(dialog, height, width, 0); - - wnoutrefresh(dialog); - wnoutrefresh(list); - doupdate(); - - while (key != KEY_ESC) { - key = wgetch(dialog); - - for (i = 0; i < max_choice; i++) { - item_set(i + scroll); - if (toupper(key) == toupper(item_str()[0])) - break; - } - - if (i < max_choice || key == KEY_UP || key == KEY_DOWN || - key == '+' || key == '-') { - if (key == KEY_UP || key == '-') { - if (!choice) { - if (!scroll) - continue; - /* Scroll list down */ - if (list_height > 1) { - /* De-highlight current first item */ - item_set(scroll); - print_item(list, 0, FALSE); - scrollok(list, TRUE); - wscrl(list, -1); - scrollok(list, FALSE); - } - scroll--; - item_set(scroll); - print_item(list, 0, TRUE); - print_arrows(dialog, choice, item_count(), - scroll, box_y, box_x + check_x + 5, list_height); - - wnoutrefresh(dialog); - wrefresh(list); - - continue; /* wait for another key press */ - } else - i = choice - 1; - } else if (key == KEY_DOWN || key == '+') { - if (choice == max_choice - 1) { - if (scroll + choice >= item_count() - 1) - continue; - /* Scroll list up */ - if (list_height > 1) { - /* De-highlight current last item before scrolling up */ - item_set(scroll + max_choice - 1); - print_item(list, - max_choice - 1, - FALSE); - scrollok(list, TRUE); - wscrl(list, 1); - scrollok(list, FALSE); - } - scroll++; - item_set(scroll + max_choice - 1); - print_item(list, max_choice - 1, TRUE); - - print_arrows(dialog, choice, item_count(), - scroll, box_y, box_x + check_x + 5, list_height); - - wnoutrefresh(dialog); - wrefresh(list); - - continue; /* wait for another key press */ - } else - i = choice + 1; - } - if (i != choice) { - /* De-highlight current item */ - item_set(scroll + choice); - print_item(list, choice, FALSE); - /* Highlight new item */ - choice = i; - item_set(scroll + choice); - print_item(list, choice, TRUE); - wnoutrefresh(dialog); - wrefresh(list); - } - continue; /* wait for another key press */ - } - switch (key) { - case 'H': - case 'h': - case '?': - button = 1; - /* fall-through */ - case 'S': - case 's': - case ' ': - case '\n': - item_foreach() - item_set_selected(0); - item_set(scroll + choice); - item_set_selected(1); - delwin(list); - delwin(dialog); - return button; - case TAB: - case KEY_LEFT: - case KEY_RIGHT: - button = ((key == KEY_LEFT ? --button : ++button) < 0) - ? 1 : (button > 1 ? 0 : button); - - print_buttons(dialog, height, width, button); - wrefresh(dialog); - break; - case 'X': - case 'x': - key = KEY_ESC; - break; - case KEY_ESC: - key = on_key_esc(dialog); - break; - case KEY_RESIZE: - delwin(list); - delwin(dialog); - on_key_resize(); - goto do_resize; - } - - /* Now, update everything... */ - doupdate(); - } - delwin(list); - delwin(dialog); - return key; /* ESC pressed */ -} diff --git a/libraries/NEMU/tools/kconfig/lxdialog/dialog.h b/libraries/NEMU/tools/kconfig/lxdialog/dialog.h deleted file mode 100644 index 68b565e..0000000 --- a/libraries/NEMU/tools/kconfig/lxdialog/dialog.h +++ /dev/null @@ -1,238 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0+ */ -/* - * dialog.h -- common declarations for all dialog modules - * - * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - */ - -#include -#include -#include -#include -#include -#include -#include - -#ifdef __sun__ -#define CURS_MACROS -#endif -#include - -/* - * Colors in ncurses 1.9.9e do not work properly since foreground and - * background colors are OR'd rather than separately masked. This version - * of dialog was hacked to work with ncurses 1.9.9e, making it incompatible - * with standard curses. The simplest fix (to make this work with standard - * curses) uses the wbkgdset() function, not used in the original hack. - * Turn it off if we're building with 1.9.9e, since it just confuses things. - */ -#if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE) -#define OLD_NCURSES 1 -#undef wbkgdset -#define wbkgdset(w,p) /*nothing */ -#else -#define OLD_NCURSES 0 -#endif - -#define TR(params) _tracef params - -#define KEY_ESC 27 -#define TAB 9 -#define MAX_LEN 2048 -#define BUF_SIZE (10*1024) -#define MIN(x,y) (x < y ? x : y) -#define MAX(x,y) (x > y ? x : y) - -#ifndef ACS_ULCORNER -#define ACS_ULCORNER '+' -#endif -#ifndef ACS_LLCORNER -#define ACS_LLCORNER '+' -#endif -#ifndef ACS_URCORNER -#define ACS_URCORNER '+' -#endif -#ifndef ACS_LRCORNER -#define ACS_LRCORNER '+' -#endif -#ifndef ACS_HLINE -#define ACS_HLINE '-' -#endif -#ifndef ACS_VLINE -#define ACS_VLINE '|' -#endif -#ifndef ACS_LTEE -#define ACS_LTEE '+' -#endif -#ifndef ACS_RTEE -#define ACS_RTEE '+' -#endif -#ifndef ACS_UARROW -#define ACS_UARROW '^' -#endif -#ifndef ACS_DARROW -#define ACS_DARROW 'v' -#endif - -/* error return codes */ -#define ERRDISPLAYTOOSMALL (KEY_MAX + 1) - -/* - * Color definitions - */ -struct dialog_color { - chtype atr; /* Color attribute */ - int fg; /* foreground */ - int bg; /* background */ - int hl; /* highlight this item */ -}; - -struct subtitle_list { - struct subtitle_list *next; - const char *text; -}; - -struct dialog_info { - const char *backtitle; - struct subtitle_list *subtitles; - struct dialog_color screen; - struct dialog_color shadow; - struct dialog_color dialog; - struct dialog_color title; - struct dialog_color border; - struct dialog_color button_active; - struct dialog_color button_inactive; - struct dialog_color button_key_active; - struct dialog_color button_key_inactive; - struct dialog_color button_label_active; - struct dialog_color button_label_inactive; - struct dialog_color inputbox; - struct dialog_color inputbox_border; - struct dialog_color searchbox; - struct dialog_color searchbox_title; - struct dialog_color searchbox_border; - struct dialog_color position_indicator; - struct dialog_color menubox; - struct dialog_color menubox_border; - struct dialog_color item; - struct dialog_color item_selected; - struct dialog_color tag; - struct dialog_color tag_selected; - struct dialog_color tag_key; - struct dialog_color tag_key_selected; - struct dialog_color check; - struct dialog_color check_selected; - struct dialog_color uarrow; - struct dialog_color darrow; -}; - -/* - * Global variables - */ -extern struct dialog_info dlg; -extern char dialog_input_result[]; -extern int saved_x, saved_y; /* Needed in signal handler in mconf.c */ - -/* - * Function prototypes - */ - -/* item list as used by checklist and menubox */ -void item_reset(void); -void item_make(const char *fmt, ...); -void item_add_str(const char *fmt, ...); -void item_set_tag(char tag); -void item_set_data(void *p); -void item_set_selected(int val); -int item_activate_selected(void); -void *item_data(void); -char item_tag(void); - -/* item list manipulation for lxdialog use */ -#define MAXITEMSTR 200 -struct dialog_item { - char str[MAXITEMSTR]; /* prompt displayed */ - char tag; - void *data; /* pointer to menu item - used by menubox+checklist */ - int selected; /* Set to 1 by dialog_*() function if selected. */ -}; - -/* list of lialog_items */ -struct dialog_list { - struct dialog_item node; - struct dialog_list *next; -}; - -extern struct dialog_list *item_cur; -extern struct dialog_list item_nil; -extern struct dialog_list *item_head; - -int item_count(void); -void item_set(int n); -int item_n(void); -const char *item_str(void); -int item_is_selected(void); -int item_is_tag(char tag); -#define item_foreach() \ - for (item_cur = item_head ? item_head: item_cur; \ - item_cur && (item_cur != &item_nil); item_cur = item_cur->next) - -/* generic key handlers */ -int on_key_esc(WINDOW *win); -int on_key_resize(void); - -/* minimum (re)size values */ -#define CHECKLIST_HEIGTH_MIN 6 /* For dialog_checklist() */ -#define CHECKLIST_WIDTH_MIN 6 -#define INPUTBOX_HEIGTH_MIN 2 /* For dialog_inputbox() */ -#define INPUTBOX_WIDTH_MIN 2 -#define MENUBOX_HEIGTH_MIN 15 /* For dialog_menu() */ -#define MENUBOX_WIDTH_MIN 65 -#define TEXTBOX_HEIGTH_MIN 8 /* For dialog_textbox() */ -#define TEXTBOX_WIDTH_MIN 8 -#define YESNO_HEIGTH_MIN 4 /* For dialog_yesno() */ -#define YESNO_WIDTH_MIN 4 -#define WINDOW_HEIGTH_MIN 19 /* For init_dialog() */ -#define WINDOW_WIDTH_MIN 80 - -int init_dialog(const char *backtitle); -void set_dialog_backtitle(const char *backtitle); -void set_dialog_subtitles(struct subtitle_list *subtitles); -void end_dialog(int x, int y); -void attr_clear(WINDOW * win, int height, int width, chtype attr); -void dialog_clear(void); -void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x); -void print_button(WINDOW * win, const char *label, int y, int x, int selected); -void print_title(WINDOW *dialog, const char *title, int width); -void draw_box(WINDOW * win, int y, int x, int height, int width, chtype box, - chtype border); -void draw_shadow(WINDOW * win, int y, int x, int height, int width); - -int first_alpha(const char *string, const char *exempt); -int dialog_yesno(const char *title, const char *prompt, int height, int width); -int dialog_msgbox(const char *title, const char *prompt, int height, - int width, int pause); - - -typedef void (*update_text_fn)(char *buf, size_t start, size_t end, void - *_data); -int dialog_textbox(const char *title, char *tbuf, int initial_height, - int initial_width, int *keys, int *_vscroll, int *_hscroll, - update_text_fn update_text, void *data); -int dialog_menu(const char *title, const char *prompt, - const void *selected, int *s_scroll); -int dialog_checklist(const char *title, const char *prompt, int height, - int width, int list_height); -int dialog_inputbox(const char *title, const char *prompt, int height, - int width, const char *init); - -/* - * This is the base for fictitious keys, which activate - * the buttons. - * - * Mouse-generated keys are the following: - * -- the first 32 are used as numbers, in addition to '0'-'9' - * -- the lowercase are used to signal mouse-enter events (M_EVENT + 'o') - * -- uppercase chars are used to invoke the button (M_EVENT + 'O') - */ -#define M_EVENT (KEY_MAX+1) diff --git a/libraries/NEMU/tools/kconfig/lxdialog/inputbox.c b/libraries/NEMU/tools/kconfig/lxdialog/inputbox.c deleted file mode 100644 index 1dcfb28..0000000 --- a/libraries/NEMU/tools/kconfig/lxdialog/inputbox.c +++ /dev/null @@ -1,289 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0+ -/* - * inputbox.c -- implements the input box - * - * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) - */ - -#include "dialog.h" - -char dialog_input_result[MAX_LEN + 1]; - -/* - * Print the termination buttons - */ -static void print_buttons(WINDOW * dialog, int height, int width, int selected) -{ - int x = width / 2 - 11; - int y = height - 2; - - print_button(dialog, " Ok ", y, x, selected == 0); - print_button(dialog, " Help ", y, x + 14, selected == 1); - - wmove(dialog, y, x + 1 + 14 * selected); - wrefresh(dialog); -} - -/* - * Display a dialog box for inputing a string - */ -int dialog_inputbox(const char *title, const char *prompt, int height, int width, - const char *init) -{ - int i, x, y, box_y, box_x, box_width; - int input_x = 0, key = 0, button = -1; - int show_x, len, pos; - char *instr = dialog_input_result; - WINDOW *dialog; - - if (!init) - instr[0] = '\0'; - else - strcpy(instr, init); - -do_resize: - if (getmaxy(stdscr) <= (height - INPUTBOX_HEIGTH_MIN)) - return -ERRDISPLAYTOOSMALL; - if (getmaxx(stdscr) <= (width - INPUTBOX_WIDTH_MIN)) - return -ERRDISPLAYTOOSMALL; - - /* center dialog box on screen */ - x = (getmaxx(stdscr) - width) / 2; - y = (getmaxy(stdscr) - height) / 2; - - draw_shadow(stdscr, y, x, height, width); - - dialog = newwin(height, width, y, x); - keypad(dialog, TRUE); - - draw_box(dialog, 0, 0, height, width, - dlg.dialog.atr, dlg.border.atr); - wattrset(dialog, dlg.border.atr); - mvwaddch(dialog, height - 3, 0, ACS_LTEE); - for (i = 0; i < width - 2; i++) - waddch(dialog, ACS_HLINE); - wattrset(dialog, dlg.dialog.atr); - waddch(dialog, ACS_RTEE); - - print_title(dialog, title, width); - - wattrset(dialog, dlg.dialog.atr); - print_autowrap(dialog, prompt, width - 2, 1, 3); - - /* Draw the input field box */ - box_width = width - 6; - getyx(dialog, y, x); - box_y = y + 2; - box_x = (width - box_width) / 2; - draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2, - dlg.dialog.atr, dlg.border.atr); - - print_buttons(dialog, height, width, 0); - - /* Set up the initial value */ - wmove(dialog, box_y, box_x); - wattrset(dialog, dlg.inputbox.atr); - - len = strlen(instr); - pos = len; - - if (len >= box_width) { - show_x = len - box_width + 1; - input_x = box_width - 1; - for (i = 0; i < box_width - 1; i++) - waddch(dialog, instr[show_x + i]); - } else { - show_x = 0; - input_x = len; - waddstr(dialog, instr); - } - - wmove(dialog, box_y, box_x + input_x); - - wrefresh(dialog); - - while (key != KEY_ESC) { - key = wgetch(dialog); - - if (button == -1) { /* Input box selected */ - switch (key) { - case TAB: - case KEY_UP: - case KEY_DOWN: - break; - case KEY_BACKSPACE: - case 8: /* ^H */ - case 127: /* ^? */ - if (pos) { - wattrset(dialog, dlg.inputbox.atr); - if (input_x == 0) { - show_x--; - } else - input_x--; - - if (pos < len) { - for (i = pos - 1; i < len; i++) { - instr[i] = instr[i+1]; - } - } - - pos--; - len--; - instr[len] = '\0'; - wmove(dialog, box_y, box_x); - for (i = 0; i < box_width; i++) { - if (!instr[show_x + i]) { - waddch(dialog, ' '); - break; - } - waddch(dialog, instr[show_x + i]); - } - wmove(dialog, box_y, input_x + box_x); - wrefresh(dialog); - } - continue; - case KEY_LEFT: - if (pos > 0) { - if (input_x > 0) { - wmove(dialog, box_y, --input_x + box_x); - } else if (input_x == 0) { - show_x--; - wmove(dialog, box_y, box_x); - for (i = 0; i < box_width; i++) { - if (!instr[show_x + i]) { - waddch(dialog, ' '); - break; - } - waddch(dialog, instr[show_x + i]); - } - wmove(dialog, box_y, box_x); - } - pos--; - } - continue; - case KEY_RIGHT: - if (pos < len) { - if (input_x < box_width - 1) { - wmove(dialog, box_y, ++input_x + box_x); - } else if (input_x == box_width - 1) { - show_x++; - wmove(dialog, box_y, box_x); - for (i = 0; i < box_width; i++) { - if (!instr[show_x + i]) { - waddch(dialog, ' '); - break; - } - waddch(dialog, instr[show_x + i]); - } - wmove(dialog, box_y, input_x + box_x); - } - pos++; - } - continue; - default: - if (key < 0x100 && isprint(key)) { - if (len < MAX_LEN) { - wattrset(dialog, dlg.inputbox.atr); - if (pos < len) { - for (i = len; i > pos; i--) - instr[i] = instr[i-1]; - instr[pos] = key; - } else { - instr[len] = key; - } - pos++; - len++; - instr[len] = '\0'; - - if (input_x == box_width - 1) { - show_x++; - } else { - input_x++; - } - - wmove(dialog, box_y, box_x); - for (i = 0; i < box_width; i++) { - if (!instr[show_x + i]) { - waddch(dialog, ' '); - break; - } - waddch(dialog, instr[show_x + i]); - } - wmove(dialog, box_y, input_x + box_x); - wrefresh(dialog); - } else - flash(); /* Alarm user about overflow */ - continue; - } - } - } - switch (key) { - case 'O': - case 'o': - delwin(dialog); - return 0; - case 'H': - case 'h': - delwin(dialog); - return 1; - case KEY_UP: - case KEY_LEFT: - switch (button) { - case -1: - button = 1; /* Indicates "Help" button is selected */ - print_buttons(dialog, height, width, 1); - break; - case 0: - button = -1; /* Indicates input box is selected */ - print_buttons(dialog, height, width, 0); - wmove(dialog, box_y, box_x + input_x); - wrefresh(dialog); - break; - case 1: - button = 0; /* Indicates "OK" button is selected */ - print_buttons(dialog, height, width, 0); - break; - } - break; - case TAB: - case KEY_DOWN: - case KEY_RIGHT: - switch (button) { - case -1: - button = 0; /* Indicates "OK" button is selected */ - print_buttons(dialog, height, width, 0); - break; - case 0: - button = 1; /* Indicates "Help" button is selected */ - print_buttons(dialog, height, width, 1); - break; - case 1: - button = -1; /* Indicates input box is selected */ - print_buttons(dialog, height, width, 0); - wmove(dialog, box_y, box_x + input_x); - wrefresh(dialog); - break; - } - break; - case ' ': - case '\n': - delwin(dialog); - return (button == -1 ? 0 : button); - case 'X': - case 'x': - key = KEY_ESC; - break; - case KEY_ESC: - key = on_key_esc(dialog); - break; - case KEY_RESIZE: - delwin(dialog); - on_key_resize(); - goto do_resize; - } - } - - delwin(dialog); - return KEY_ESC; /* ESC pressed */ -} diff --git a/libraries/NEMU/tools/kconfig/lxdialog/menubox.c b/libraries/NEMU/tools/kconfig/lxdialog/menubox.c deleted file mode 100644 index 58c2f8a..0000000 --- a/libraries/NEMU/tools/kconfig/lxdialog/menubox.c +++ /dev/null @@ -1,424 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0+ -/* - * menubox.c -- implements the menu box - * - * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com) - */ - -/* - * Changes by Clifford Wolf (god@clifford.at) - * - * [ 1998-06-13 ] - * - * *) A bugfix for the Page-Down problem - * - * *) Formerly when I used Page Down and Page Up, the cursor would be set - * to the first position in the menu box. Now lxdialog is a bit - * smarter and works more like other menu systems (just have a look at - * it). - * - * *) Formerly if I selected something my scrolling would be broken because - * lxdialog is re-invoked by the Menuconfig shell script, can't - * remember the last scrolling position, and just sets it so that the - * cursor is at the bottom of the box. Now it writes the temporary file - * lxdialog.scrltmp which contains this information. The file is - * deleted by lxdialog if the user leaves a submenu or enters a new - * one, but it would be nice if Menuconfig could make another "rm -f" - * just to be sure. Just try it out - you will recognise a difference! - * - * [ 1998-06-14 ] - * - * *) Now lxdialog is crash-safe against broken "lxdialog.scrltmp" files - * and menus change their size on the fly. - * - * *) If for some reason the last scrolling position is not saved by - * lxdialog, it sets the scrolling so that the selected item is in the - * middle of the menu box, not at the bottom. - * - * 02 January 1999, Michael Elizabeth Chastain (mec@shout.net) - * Reset 'scroll' to 0 if the value from lxdialog.scrltmp is bogus. - * This fixes a bug in Menuconfig where using ' ' to descend into menus - * would leave mis-synchronized lxdialog.scrltmp files lying around, - * fscanf would read in 'scroll', and eventually that value would get used. - */ - -#include "dialog.h" - -static int menu_width, item_x; - -/* - * Print menu item - */ -static void do_print_item(WINDOW * win, const char *item, int line_y, - int selected, int hotkey) -{ - int j; - char *menu_item = malloc(menu_width + 1); - - strncpy(menu_item, item, menu_width - item_x); - menu_item[menu_width - item_x] = '\0'; - j = first_alpha(menu_item, "YyNnMmHh"); - - /* Clear 'residue' of last item */ - wattrset(win, dlg.menubox.atr); - wmove(win, line_y, 0); -#if OLD_NCURSES - { - int i; - for (i = 0; i < menu_width; i++) - waddch(win, ' '); - } -#else - wclrtoeol(win); -#endif - wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr); - mvwaddstr(win, line_y, item_x, menu_item); - if (hotkey) { - wattrset(win, selected ? dlg.tag_key_selected.atr - : dlg.tag_key.atr); - mvwaddch(win, line_y, item_x + j, menu_item[j]); - } - if (selected) { - wmove(win, line_y, item_x + 1); - } - free(menu_item); - wrefresh(win); -} - -#define print_item(index, choice, selected) \ -do { \ - item_set(index); \ - do_print_item(menu, item_str(), choice, selected, !item_is_tag(':')); \ -} while (0) - -/* - * Print the scroll indicators. - */ -static void print_arrows(WINDOW * win, int item_no, int scroll, int y, int x, - int height) -{ - int cur_y, cur_x; - - getyx(win, cur_y, cur_x); - - wmove(win, y, x); - - if (scroll > 0) { - wattrset(win, dlg.uarrow.atr); - waddch(win, ACS_UARROW); - waddstr(win, "(-)"); - } else { - wattrset(win, dlg.menubox.atr); - waddch(win, ACS_HLINE); - waddch(win, ACS_HLINE); - waddch(win, ACS_HLINE); - waddch(win, ACS_HLINE); - } - - y = y + height + 1; - wmove(win, y, x); - wrefresh(win); - - if ((height < item_no) && (scroll + height < item_no)) { - wattrset(win, dlg.darrow.atr); - waddch(win, ACS_DARROW); - waddstr(win, "(+)"); - } else { - wattrset(win, dlg.menubox_border.atr); - waddch(win, ACS_HLINE); - waddch(win, ACS_HLINE); - waddch(win, ACS_HLINE); - waddch(win, ACS_HLINE); - } - - wmove(win, cur_y, cur_x); - wrefresh(win); -} - -/* - * Display the termination buttons. - */ -static void print_buttons(WINDOW * win, int height, int width, int selected) -{ - int x = width / 2 - 28; - int y = height - 2; - - print_button(win, "Select", y, x, selected == 0); - print_button(win, " Exit ", y, x + 12, selected == 1); - print_button(win, " Help ", y, x + 24, selected == 2); - print_button(win, " Save ", y, x + 36, selected == 3); - print_button(win, " Load ", y, x + 48, selected == 4); - - wmove(win, y, x + 1 + 12 * selected); - wrefresh(win); -} - -/* scroll up n lines (n may be negative) */ -static void do_scroll(WINDOW *win, int *scroll, int n) -{ - /* Scroll menu up */ - scrollok(win, TRUE); - wscrl(win, n); - scrollok(win, FALSE); - *scroll = *scroll + n; - wrefresh(win); -} - -/* - * Display a menu for choosing among a number of options - */ -int dialog_menu(const char *title, const char *prompt, - const void *selected, int *s_scroll) -{ - int i, j, x, y, box_x, box_y; - int height, width, menu_height; - int key = 0, button = 0, scroll = 0, choice = 0; - int first_item = 0, max_choice; - WINDOW *dialog, *menu; - -do_resize: - height = getmaxy(stdscr); - width = getmaxx(stdscr); - if (height < MENUBOX_HEIGTH_MIN || width < MENUBOX_WIDTH_MIN) - return -ERRDISPLAYTOOSMALL; - - height -= 4; - width -= 5; - menu_height = height - 10; - - max_choice = MIN(menu_height, item_count()); - - /* center dialog box on screen */ - x = (getmaxx(stdscr) - width) / 2; - y = (getmaxy(stdscr) - height) / 2; - - draw_shadow(stdscr, y, x, height, width); - - dialog = newwin(height, width, y, x); - keypad(dialog, TRUE); - - draw_box(dialog, 0, 0, height, width, - dlg.dialog.atr, dlg.border.atr); - wattrset(dialog, dlg.border.atr); - mvwaddch(dialog, height - 3, 0, ACS_LTEE); - for (i = 0; i < width - 2; i++) - waddch(dialog, ACS_HLINE); - wattrset(dialog, dlg.dialog.atr); - wbkgdset(dialog, dlg.dialog.atr & A_COLOR); - waddch(dialog, ACS_RTEE); - - print_title(dialog, title, width); - - wattrset(dialog, dlg.dialog.atr); - print_autowrap(dialog, prompt, width - 2, 1, 3); - - menu_width = width - 6; - box_y = height - menu_height - 5; - box_x = (width - menu_width) / 2 - 1; - - /* create new window for the menu */ - menu = subwin(dialog, menu_height, menu_width, - y + box_y + 1, x + box_x + 1); - keypad(menu, TRUE); - - /* draw a box around the menu items */ - draw_box(dialog, box_y, box_x, menu_height + 2, menu_width + 2, - dlg.menubox_border.atr, dlg.menubox.atr); - - if (menu_width >= 80) - item_x = (menu_width - 70) / 2; - else - item_x = 4; - - /* Set choice to default item */ - item_foreach() - if (selected && (selected == item_data())) - choice = item_n(); - /* get the saved scroll info */ - scroll = *s_scroll; - if ((scroll <= choice) && (scroll + max_choice > choice) && - (scroll >= 0) && (scroll + max_choice <= item_count())) { - first_item = scroll; - choice = choice - scroll; - } else { - scroll = 0; - } - if ((choice >= max_choice)) { - if (choice >= item_count() - max_choice / 2) - scroll = first_item = item_count() - max_choice; - else - scroll = first_item = choice - max_choice / 2; - choice = choice - scroll; - } - - /* Print the menu */ - for (i = 0; i < max_choice; i++) { - print_item(first_item + i, i, i == choice); - } - - wnoutrefresh(menu); - - print_arrows(dialog, item_count(), scroll, - box_y, box_x + item_x + 1, menu_height); - - print_buttons(dialog, height, width, 0); - wmove(menu, choice, item_x + 1); - wrefresh(menu); - - while (key != KEY_ESC) { - key = wgetch(menu); - - if (key < 256 && isalpha(key)) - key = tolower(key); - - if (strchr("ynmh", key)) - i = max_choice; - else { - for (i = choice + 1; i < max_choice; i++) { - item_set(scroll + i); - j = first_alpha(item_str(), "YyNnMmHh"); - if (key == tolower(item_str()[j])) - break; - } - if (i == max_choice) - for (i = 0; i < max_choice; i++) { - item_set(scroll + i); - j = first_alpha(item_str(), "YyNnMmHh"); - if (key == tolower(item_str()[j])) - break; - } - } - - if (item_count() != 0 && - (i < max_choice || - key == KEY_UP || key == KEY_DOWN || - key == '-' || key == '+' || - key == KEY_PPAGE || key == KEY_NPAGE)) { - /* Remove highligt of current item */ - print_item(scroll + choice, choice, FALSE); - - if (key == KEY_UP || key == '-') { - if (choice < 2 && scroll) { - /* Scroll menu down */ - do_scroll(menu, &scroll, -1); - - print_item(scroll, 0, FALSE); - } else - choice = MAX(choice - 1, 0); - - } else if (key == KEY_DOWN || key == '+') { - print_item(scroll+choice, choice, FALSE); - - if ((choice > max_choice - 3) && - (scroll + max_choice < item_count())) { - /* Scroll menu up */ - do_scroll(menu, &scroll, 1); - - print_item(scroll+max_choice - 1, - max_choice - 1, FALSE); - } else - choice = MIN(choice + 1, max_choice - 1); - - } else if (key == KEY_PPAGE) { - scrollok(menu, TRUE); - for (i = 0; (i < max_choice); i++) { - if (scroll > 0) { - do_scroll(menu, &scroll, -1); - print_item(scroll, 0, FALSE); - } else { - if (choice > 0) - choice--; - } - } - - } else if (key == KEY_NPAGE) { - for (i = 0; (i < max_choice); i++) { - if (scroll + max_choice < item_count()) { - do_scroll(menu, &scroll, 1); - print_item(scroll+max_choice-1, - max_choice - 1, FALSE); - } else { - if (choice + 1 < max_choice) - choice++; - } - } - } else - choice = i; - - print_item(scroll + choice, choice, TRUE); - - print_arrows(dialog, item_count(), scroll, - box_y, box_x + item_x + 1, menu_height); - - wnoutrefresh(dialog); - wrefresh(menu); - - continue; /* wait for another key press */ - } - - switch (key) { - case KEY_LEFT: - case TAB: - case KEY_RIGHT: - button = ((key == KEY_LEFT ? --button : ++button) < 0) - ? 4 : (button > 4 ? 0 : button); - - print_buttons(dialog, height, width, button); - wrefresh(menu); - break; - case ' ': - case 's': - case 'y': - case 'n': - case 'm': - case '/': - case 'h': - case '?': - case 'z': - case '\n': - /* save scroll info */ - *s_scroll = scroll; - delwin(menu); - delwin(dialog); - item_set(scroll + choice); - item_set_selected(1); - switch (key) { - case 'h': - case '?': - return 2; - case 's': - case 'y': - return 5; - case 'n': - return 6; - case 'm': - return 7; - case ' ': - return 8; - case '/': - return 9; - case 'z': - return 10; - case '\n': - return button; - } - return 0; - case 'e': - case 'x': - key = KEY_ESC; - break; - case KEY_ESC: - key = on_key_esc(menu); - break; - case KEY_RESIZE: - on_key_resize(); - delwin(menu); - delwin(dialog); - goto do_resize; - } - } - delwin(menu); - delwin(dialog); - return key; /* ESC pressed */ -} diff --git a/libraries/NEMU/tools/kconfig/lxdialog/textbox.c b/libraries/NEMU/tools/kconfig/lxdialog/textbox.c deleted file mode 100644 index 4e339b1..0000000 --- a/libraries/NEMU/tools/kconfig/lxdialog/textbox.c +++ /dev/null @@ -1,395 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0+ -/* - * textbox.c -- implements the text box - * - * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) - */ - -#include "dialog.h" - -static void back_lines(int n); -static void print_page(WINDOW *win, int height, int width, update_text_fn - update_text, void *data); -static void print_line(WINDOW *win, int row, int width); -static char *get_line(void); -static void print_position(WINDOW * win); - -static int hscroll; -static int begin_reached, end_reached, page_length; -static char *buf; -static char *page; - -/* - * refresh window content - */ -static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw, - int cur_y, int cur_x, update_text_fn update_text, - void *data) -{ - print_page(box, boxh, boxw, update_text, data); - print_position(dialog); - wmove(dialog, cur_y, cur_x); /* Restore cursor position */ - wrefresh(dialog); -} - - -/* - * Display text from a file in a dialog box. - * - * keys is a null-terminated array - * update_text() may not add or remove any '\n' or '\0' in tbuf - */ -int dialog_textbox(const char *title, char *tbuf, int initial_height, - int initial_width, int *keys, int *_vscroll, int *_hscroll, - update_text_fn update_text, void *data) -{ - int i, x, y, cur_x, cur_y, key = 0; - int height, width, boxh, boxw; - WINDOW *dialog, *box; - bool done = false; - - begin_reached = 1; - end_reached = 0; - page_length = 0; - hscroll = 0; - buf = tbuf; - page = buf; /* page is pointer to start of page to be displayed */ - - if (_vscroll && *_vscroll) { - begin_reached = 0; - - for (i = 0; i < *_vscroll; i++) - get_line(); - } - if (_hscroll) - hscroll = *_hscroll; - -do_resize: - getmaxyx(stdscr, height, width); - if (height < TEXTBOX_HEIGTH_MIN || width < TEXTBOX_WIDTH_MIN) - return -ERRDISPLAYTOOSMALL; - if (initial_height != 0) - height = initial_height; - else - if (height > 4) - height -= 4; - else - height = 0; - if (initial_width != 0) - width = initial_width; - else - if (width > 5) - width -= 5; - else - width = 0; - - /* center dialog box on screen */ - x = (getmaxx(stdscr) - width) / 2; - y = (getmaxy(stdscr) - height) / 2; - - draw_shadow(stdscr, y, x, height, width); - - dialog = newwin(height, width, y, x); - keypad(dialog, TRUE); - - /* Create window for box region, used for scrolling text */ - boxh = height - 4; - boxw = width - 2; - box = subwin(dialog, boxh, boxw, y + 1, x + 1); - wattrset(box, dlg.dialog.atr); - wbkgdset(box, dlg.dialog.atr & A_COLOR); - - keypad(box, TRUE); - - /* register the new window, along with its borders */ - draw_box(dialog, 0, 0, height, width, - dlg.dialog.atr, dlg.border.atr); - - wattrset(dialog, dlg.border.atr); - mvwaddch(dialog, height - 3, 0, ACS_LTEE); - for (i = 0; i < width - 2; i++) - waddch(dialog, ACS_HLINE); - wattrset(dialog, dlg.dialog.atr); - wbkgdset(dialog, dlg.dialog.atr & A_COLOR); - waddch(dialog, ACS_RTEE); - - print_title(dialog, title, width); - - print_button(dialog, " Exit ", height - 2, width / 2 - 4, TRUE); - wnoutrefresh(dialog); - getyx(dialog, cur_y, cur_x); /* Save cursor position */ - - /* Print first page of text */ - attr_clear(box, boxh, boxw, dlg.dialog.atr); - refresh_text_box(dialog, box, boxh, boxw, cur_y, cur_x, update_text, - data); - - while (!done) { - key = wgetch(dialog); - switch (key) { - case 'E': /* Exit */ - case 'e': - case 'X': - case 'x': - case 'q': - case '\n': - done = true; - break; - case 'g': /* First page */ - case KEY_HOME: - if (!begin_reached) { - begin_reached = 1; - page = buf; - refresh_text_box(dialog, box, boxh, boxw, - cur_y, cur_x, update_text, - data); - } - break; - case 'G': /* Last page */ - case KEY_END: - - end_reached = 1; - /* point to last char in buf */ - page = buf + strlen(buf); - back_lines(boxh); - refresh_text_box(dialog, box, boxh, boxw, cur_y, - cur_x, update_text, data); - break; - case 'K': /* Previous line */ - case 'k': - case KEY_UP: - if (begin_reached) - break; - - back_lines(page_length + 1); - refresh_text_box(dialog, box, boxh, boxw, cur_y, - cur_x, update_text, data); - break; - case 'B': /* Previous page */ - case 'b': - case 'u': - case KEY_PPAGE: - if (begin_reached) - break; - back_lines(page_length + boxh); - refresh_text_box(dialog, box, boxh, boxw, cur_y, - cur_x, update_text, data); - break; - case 'J': /* Next line */ - case 'j': - case KEY_DOWN: - if (end_reached) - break; - - back_lines(page_length - 1); - refresh_text_box(dialog, box, boxh, boxw, cur_y, - cur_x, update_text, data); - break; - case KEY_NPAGE: /* Next page */ - case ' ': - case 'd': - if (end_reached) - break; - - begin_reached = 0; - refresh_text_box(dialog, box, boxh, boxw, cur_y, - cur_x, update_text, data); - break; - case '0': /* Beginning of line */ - case 'H': /* Scroll left */ - case 'h': - case KEY_LEFT: - if (hscroll <= 0) - break; - - if (key == '0') - hscroll = 0; - else - hscroll--; - /* Reprint current page to scroll horizontally */ - back_lines(page_length); - refresh_text_box(dialog, box, boxh, boxw, cur_y, - cur_x, update_text, data); - break; - case 'L': /* Scroll right */ - case 'l': - case KEY_RIGHT: - if (hscroll >= MAX_LEN) - break; - hscroll++; - /* Reprint current page to scroll horizontally */ - back_lines(page_length); - refresh_text_box(dialog, box, boxh, boxw, cur_y, - cur_x, update_text, data); - break; - case KEY_ESC: - if (on_key_esc(dialog) == KEY_ESC) - done = true; - break; - case KEY_RESIZE: - back_lines(height); - delwin(box); - delwin(dialog); - on_key_resize(); - goto do_resize; - default: - for (i = 0; keys[i]; i++) { - if (key == keys[i]) { - done = true; - break; - } - } - } - } - delwin(box); - delwin(dialog); - if (_vscroll) { - const char *s; - - s = buf; - *_vscroll = 0; - back_lines(page_length); - while (s < page && (s = strchr(s, '\n'))) { - (*_vscroll)++; - s++; - } - } - if (_hscroll) - *_hscroll = hscroll; - return key; -} - -/* - * Go back 'n' lines in text. Called by dialog_textbox(). - * 'page' will be updated to point to the desired line in 'buf'. - */ -static void back_lines(int n) -{ - int i; - - begin_reached = 0; - /* Go back 'n' lines */ - for (i = 0; i < n; i++) { - if (*page == '\0') { - if (end_reached) { - end_reached = 0; - continue; - } - } - if (page == buf) { - begin_reached = 1; - return; - } - page--; - do { - if (page == buf) { - begin_reached = 1; - return; - } - page--; - } while (*page != '\n'); - page++; - } -} - -/* - * Print a new page of text. - */ -static void print_page(WINDOW *win, int height, int width, update_text_fn - update_text, void *data) -{ - int i, passed_end = 0; - - if (update_text) { - char *end; - - for (i = 0; i < height; i++) - get_line(); - end = page; - back_lines(height); - update_text(buf, page - buf, end - buf, data); - } - - page_length = 0; - for (i = 0; i < height; i++) { - print_line(win, i, width); - if (!passed_end) - page_length++; - if (end_reached && !passed_end) - passed_end = 1; - } - wnoutrefresh(win); -} - -/* - * Print a new line of text. - */ -static void print_line(WINDOW * win, int row, int width) -{ - char *line; - - line = get_line(); - line += MIN(strlen(line), hscroll); /* Scroll horizontally */ - wmove(win, row, 0); /* move cursor to correct line */ - waddch(win, ' '); - waddnstr(win, line, MIN(strlen(line), width - 2)); - - /* Clear 'residue' of previous line */ -#if OLD_NCURSES - { - int x = getcurx(win); - int i; - for (i = 0; i < width - x; i++) - waddch(win, ' '); - } -#else - wclrtoeol(win); -#endif -} - -/* - * Return current line of text. Called by dialog_textbox() and print_line(). - * 'page' should point to start of current line before calling, and will be - * updated to point to start of next line. - */ -static char *get_line(void) -{ - int i = 0; - static char line[MAX_LEN + 1]; - - end_reached = 0; - while (*page != '\n') { - if (*page == '\0') { - end_reached = 1; - break; - } else if (i < MAX_LEN) - line[i++] = *(page++); - else { - /* Truncate lines longer than MAX_LEN characters */ - if (i == MAX_LEN) - line[i++] = '\0'; - page++; - } - } - if (i <= MAX_LEN) - line[i] = '\0'; - if (!end_reached) - page++; /* move past '\n' */ - - return line; -} - -/* - * Print current position - */ -static void print_position(WINDOW * win) -{ - int percent; - - wattrset(win, dlg.position_indicator.atr); - wbkgdset(win, dlg.position_indicator.atr & A_COLOR); - percent = (page - buf) * 100 / strlen(buf); - wmove(win, getmaxy(win) - 3, getmaxx(win) - 9); - wprintw(win, "(%3d%%)", percent); -} diff --git a/libraries/NEMU/tools/kconfig/lxdialog/util.c b/libraries/NEMU/tools/kconfig/lxdialog/util.c deleted file mode 100644 index 1b490d4..0000000 --- a/libraries/NEMU/tools/kconfig/lxdialog/util.c +++ /dev/null @@ -1,700 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0+ -/* - * util.c - * - * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) - */ - -#include - -#include "dialog.h" - -/* Needed in signal handler in mconf.c */ -int saved_x, saved_y; - -struct dialog_info dlg; - -static void set_mono_theme(void) -{ - dlg.screen.atr = A_NORMAL; - dlg.shadow.atr = A_NORMAL; - dlg.dialog.atr = A_NORMAL; - dlg.title.atr = A_BOLD; - dlg.border.atr = A_NORMAL; - dlg.button_active.atr = A_REVERSE; - dlg.button_inactive.atr = A_DIM; - dlg.button_key_active.atr = A_REVERSE; - dlg.button_key_inactive.atr = A_BOLD; - dlg.button_label_active.atr = A_REVERSE; - dlg.button_label_inactive.atr = A_NORMAL; - dlg.inputbox.atr = A_NORMAL; - dlg.inputbox_border.atr = A_NORMAL; - dlg.searchbox.atr = A_NORMAL; - dlg.searchbox_title.atr = A_BOLD; - dlg.searchbox_border.atr = A_NORMAL; - dlg.position_indicator.atr = A_BOLD; - dlg.menubox.atr = A_NORMAL; - dlg.menubox_border.atr = A_NORMAL; - dlg.item.atr = A_NORMAL; - dlg.item_selected.atr = A_REVERSE; - dlg.tag.atr = A_BOLD; - dlg.tag_selected.atr = A_REVERSE; - dlg.tag_key.atr = A_BOLD; - dlg.tag_key_selected.atr = A_REVERSE; - dlg.check.atr = A_BOLD; - dlg.check_selected.atr = A_REVERSE; - dlg.uarrow.atr = A_BOLD; - dlg.darrow.atr = A_BOLD; -} - -#define DLG_COLOR(dialog, f, b, h) \ -do { \ - dlg.dialog.fg = (f); \ - dlg.dialog.bg = (b); \ - dlg.dialog.hl = (h); \ -} while (0) - -static void set_classic_theme(void) -{ - DLG_COLOR(screen, COLOR_CYAN, COLOR_BLUE, true); - DLG_COLOR(shadow, COLOR_BLACK, COLOR_BLACK, true); - DLG_COLOR(dialog, COLOR_BLACK, COLOR_WHITE, false); - DLG_COLOR(title, COLOR_YELLOW, COLOR_WHITE, true); - DLG_COLOR(border, COLOR_WHITE, COLOR_WHITE, true); - DLG_COLOR(button_active, COLOR_WHITE, COLOR_BLUE, true); - DLG_COLOR(button_inactive, COLOR_BLACK, COLOR_WHITE, false); - DLG_COLOR(button_key_active, COLOR_WHITE, COLOR_BLUE, true); - DLG_COLOR(button_key_inactive, COLOR_RED, COLOR_WHITE, false); - DLG_COLOR(button_label_active, COLOR_YELLOW, COLOR_BLUE, true); - DLG_COLOR(button_label_inactive, COLOR_BLACK, COLOR_WHITE, true); - DLG_COLOR(inputbox, COLOR_BLACK, COLOR_WHITE, false); - DLG_COLOR(inputbox_border, COLOR_BLACK, COLOR_WHITE, false); - DLG_COLOR(searchbox, COLOR_BLACK, COLOR_WHITE, false); - DLG_COLOR(searchbox_title, COLOR_YELLOW, COLOR_WHITE, true); - DLG_COLOR(searchbox_border, COLOR_WHITE, COLOR_WHITE, true); - DLG_COLOR(position_indicator, COLOR_YELLOW, COLOR_WHITE, true); - DLG_COLOR(menubox, COLOR_BLACK, COLOR_WHITE, false); - DLG_COLOR(menubox_border, COLOR_WHITE, COLOR_WHITE, true); - DLG_COLOR(item, COLOR_BLACK, COLOR_WHITE, false); - DLG_COLOR(item_selected, COLOR_WHITE, COLOR_BLUE, true); - DLG_COLOR(tag, COLOR_YELLOW, COLOR_WHITE, true); - DLG_COLOR(tag_selected, COLOR_YELLOW, COLOR_BLUE, true); - DLG_COLOR(tag_key, COLOR_YELLOW, COLOR_WHITE, true); - DLG_COLOR(tag_key_selected, COLOR_YELLOW, COLOR_BLUE, true); - DLG_COLOR(check, COLOR_BLACK, COLOR_WHITE, false); - DLG_COLOR(check_selected, COLOR_WHITE, COLOR_BLUE, true); - DLG_COLOR(uarrow, COLOR_GREEN, COLOR_WHITE, true); - DLG_COLOR(darrow, COLOR_GREEN, COLOR_WHITE, true); -} - -static void set_blackbg_theme(void) -{ - DLG_COLOR(screen, COLOR_RED, COLOR_BLACK, true); - DLG_COLOR(shadow, COLOR_BLACK, COLOR_BLACK, false); - DLG_COLOR(dialog, COLOR_WHITE, COLOR_BLACK, false); - DLG_COLOR(title, COLOR_RED, COLOR_BLACK, false); - DLG_COLOR(border, COLOR_BLACK, COLOR_BLACK, true); - - DLG_COLOR(button_active, COLOR_YELLOW, COLOR_RED, false); - DLG_COLOR(button_inactive, COLOR_YELLOW, COLOR_BLACK, false); - DLG_COLOR(button_key_active, COLOR_YELLOW, COLOR_RED, true); - DLG_COLOR(button_key_inactive, COLOR_RED, COLOR_BLACK, false); - DLG_COLOR(button_label_active, COLOR_WHITE, COLOR_RED, false); - DLG_COLOR(button_label_inactive, COLOR_BLACK, COLOR_BLACK, true); - - DLG_COLOR(inputbox, COLOR_YELLOW, COLOR_BLACK, false); - DLG_COLOR(inputbox_border, COLOR_YELLOW, COLOR_BLACK, false); - - DLG_COLOR(searchbox, COLOR_YELLOW, COLOR_BLACK, false); - DLG_COLOR(searchbox_title, COLOR_YELLOW, COLOR_BLACK, true); - DLG_COLOR(searchbox_border, COLOR_BLACK, COLOR_BLACK, true); - - DLG_COLOR(position_indicator, COLOR_RED, COLOR_BLACK, false); - - DLG_COLOR(menubox, COLOR_YELLOW, COLOR_BLACK, false); - DLG_COLOR(menubox_border, COLOR_BLACK, COLOR_BLACK, true); - - DLG_COLOR(item, COLOR_WHITE, COLOR_BLACK, false); - DLG_COLOR(item_selected, COLOR_WHITE, COLOR_RED, false); - - DLG_COLOR(tag, COLOR_RED, COLOR_BLACK, false); - DLG_COLOR(tag_selected, COLOR_YELLOW, COLOR_RED, true); - DLG_COLOR(tag_key, COLOR_RED, COLOR_BLACK, false); - DLG_COLOR(tag_key_selected, COLOR_YELLOW, COLOR_RED, true); - - DLG_COLOR(check, COLOR_YELLOW, COLOR_BLACK, false); - DLG_COLOR(check_selected, COLOR_YELLOW, COLOR_RED, true); - - DLG_COLOR(uarrow, COLOR_RED, COLOR_BLACK, false); - DLG_COLOR(darrow, COLOR_RED, COLOR_BLACK, false); -} - -static void set_bluetitle_theme(void) -{ - set_classic_theme(); - DLG_COLOR(title, COLOR_BLUE, COLOR_WHITE, true); - DLG_COLOR(button_key_active, COLOR_YELLOW, COLOR_BLUE, true); - DLG_COLOR(button_label_active, COLOR_WHITE, COLOR_BLUE, true); - DLG_COLOR(searchbox_title, COLOR_BLUE, COLOR_WHITE, true); - DLG_COLOR(position_indicator, COLOR_BLUE, COLOR_WHITE, true); - DLG_COLOR(tag, COLOR_BLUE, COLOR_WHITE, true); - DLG_COLOR(tag_key, COLOR_BLUE, COLOR_WHITE, true); - -} - -/* - * Select color theme - */ -static int set_theme(const char *theme) -{ - int use_color = 1; - if (!theme) - set_bluetitle_theme(); - else if (strcmp(theme, "classic") == 0) - set_classic_theme(); - else if (strcmp(theme, "bluetitle") == 0) - set_bluetitle_theme(); - else if (strcmp(theme, "blackbg") == 0) - set_blackbg_theme(); - else if (strcmp(theme, "mono") == 0) - use_color = 0; - - return use_color; -} - -static void init_one_color(struct dialog_color *color) -{ - static int pair = 0; - - pair++; - init_pair(pair, color->fg, color->bg); - if (color->hl) - color->atr = A_BOLD | COLOR_PAIR(pair); - else - color->atr = COLOR_PAIR(pair); -} - -static void init_dialog_colors(void) -{ - init_one_color(&dlg.screen); - init_one_color(&dlg.shadow); - init_one_color(&dlg.dialog); - init_one_color(&dlg.title); - init_one_color(&dlg.border); - init_one_color(&dlg.button_active); - init_one_color(&dlg.button_inactive); - init_one_color(&dlg.button_key_active); - init_one_color(&dlg.button_key_inactive); - init_one_color(&dlg.button_label_active); - init_one_color(&dlg.button_label_inactive); - init_one_color(&dlg.inputbox); - init_one_color(&dlg.inputbox_border); - init_one_color(&dlg.searchbox); - init_one_color(&dlg.searchbox_title); - init_one_color(&dlg.searchbox_border); - init_one_color(&dlg.position_indicator); - init_one_color(&dlg.menubox); - init_one_color(&dlg.menubox_border); - init_one_color(&dlg.item); - init_one_color(&dlg.item_selected); - init_one_color(&dlg.tag); - init_one_color(&dlg.tag_selected); - init_one_color(&dlg.tag_key); - init_one_color(&dlg.tag_key_selected); - init_one_color(&dlg.check); - init_one_color(&dlg.check_selected); - init_one_color(&dlg.uarrow); - init_one_color(&dlg.darrow); -} - -/* - * Setup for color display - */ -static void color_setup(const char *theme) -{ - int use_color; - - use_color = set_theme(theme); - if (use_color && has_colors()) { - start_color(); - init_dialog_colors(); - } else - set_mono_theme(); -} - -/* - * Set window to attribute 'attr' - */ -void attr_clear(WINDOW * win, int height, int width, chtype attr) -{ - int i, j; - - wattrset(win, attr); - for (i = 0; i < height; i++) { - wmove(win, i, 0); - for (j = 0; j < width; j++) - waddch(win, ' '); - } - touchwin(win); -} - -void dialog_clear(void) -{ - int lines, columns; - - lines = getmaxy(stdscr); - columns = getmaxx(stdscr); - - attr_clear(stdscr, lines, columns, dlg.screen.atr); - /* Display background title if it exists ... - SLH */ - if (dlg.backtitle != NULL) { - int i, len = 0, skip = 0; - struct subtitle_list *pos; - - wattrset(stdscr, dlg.screen.atr); - mvwaddstr(stdscr, 0, 1, (char *)dlg.backtitle); - - for (pos = dlg.subtitles; pos != NULL; pos = pos->next) { - /* 3 is for the arrow and spaces */ - len += strlen(pos->text) + 3; - } - - wmove(stdscr, 1, 1); - if (len > columns - 2) { - const char *ellipsis = "[...] "; - waddstr(stdscr, ellipsis); - skip = len - (columns - 2 - strlen(ellipsis)); - } - - for (pos = dlg.subtitles; pos != NULL; pos = pos->next) { - if (skip == 0) - waddch(stdscr, ACS_RARROW); - else - skip--; - - if (skip == 0) - waddch(stdscr, ' '); - else - skip--; - - if (skip < strlen(pos->text)) { - waddstr(stdscr, pos->text + skip); - skip = 0; - } else - skip -= strlen(pos->text); - - if (skip == 0) - waddch(stdscr, ' '); - else - skip--; - } - - for (i = len + 1; i < columns - 1; i++) - waddch(stdscr, ACS_HLINE); - } - wnoutrefresh(stdscr); -} - -/* - * Do some initialization for dialog - */ -int init_dialog(const char *backtitle) -{ - int height, width; - - initscr(); /* Init curses */ - - /* Get current cursor position for signal handler in mconf.c */ - getyx(stdscr, saved_y, saved_x); - - getmaxyx(stdscr, height, width); - if (height < WINDOW_HEIGTH_MIN || width < WINDOW_WIDTH_MIN) { - endwin(); - return -ERRDISPLAYTOOSMALL; - } - - dlg.backtitle = backtitle; - color_setup(getenv("MENUCONFIG_COLOR")); - - keypad(stdscr, TRUE); - cbreak(); - noecho(); - dialog_clear(); - - return 0; -} - -void set_dialog_backtitle(const char *backtitle) -{ - dlg.backtitle = backtitle; -} - -void set_dialog_subtitles(struct subtitle_list *subtitles) -{ - dlg.subtitles = subtitles; -} - -/* - * End using dialog functions. - */ -void end_dialog(int x, int y) -{ - /* move cursor back to original position */ - move(y, x); - refresh(); - endwin(); -} - -/* Print the title of the dialog. Center the title and truncate - * tile if wider than dialog (- 2 chars). - **/ -void print_title(WINDOW *dialog, const char *title, int width) -{ - if (title) { - int tlen = MIN(width - 2, strlen(title)); - wattrset(dialog, dlg.title.atr); - mvwaddch(dialog, 0, (width - tlen) / 2 - 1, ' '); - mvwaddnstr(dialog, 0, (width - tlen)/2, title, tlen); - waddch(dialog, ' '); - } -} - -/* - * Print a string of text in a window, automatically wrap around to the - * next line if the string is too long to fit on one line. Newline - * characters '\n' are propperly processed. We start on a new line - * if there is no room for at least 4 nonblanks following a double-space. - */ -void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x) -{ - int newl, cur_x, cur_y; - int prompt_len, room, wlen; - char tempstr[MAX_LEN + 1], *word, *sp, *sp2, *newline_separator = 0; - - strcpy(tempstr, prompt); - - prompt_len = strlen(tempstr); - - if (prompt_len <= width - x * 2) { /* If prompt is short */ - wmove(win, y, (width - prompt_len) / 2); - waddstr(win, tempstr); - } else { - cur_x = x; - cur_y = y; - newl = 1; - word = tempstr; - while (word && *word) { - sp = strpbrk(word, "\n "); - if (sp && *sp == '\n') - newline_separator = sp; - - if (sp) - *sp++ = 0; - - /* Wrap to next line if either the word does not fit, - or it is the first word of a new sentence, and it is - short, and the next word does not fit. */ - room = width - cur_x; - wlen = strlen(word); - if (wlen > room || - (newl && wlen < 4 && sp - && wlen + 1 + strlen(sp) > room - && (!(sp2 = strpbrk(sp, "\n ")) - || wlen + 1 + (sp2 - sp) > room))) { - cur_y++; - cur_x = x; - } - wmove(win, cur_y, cur_x); - waddstr(win, word); - getyx(win, cur_y, cur_x); - - /* Move to the next line if the word separator was a newline */ - if (newline_separator) { - cur_y++; - cur_x = x; - newline_separator = 0; - } else - cur_x++; - - if (sp && *sp == ' ') { - cur_x++; /* double space */ - while (*++sp == ' ') ; - newl = 1; - } else - newl = 0; - word = sp; - } - } -} - -/* - * Print a button - */ -void print_button(WINDOW * win, const char *label, int y, int x, int selected) -{ - int i, temp; - - wmove(win, y, x); - wattrset(win, selected ? dlg.button_active.atr - : dlg.button_inactive.atr); - waddstr(win, "<"); - temp = strspn(label, " "); - label += temp; - wattrset(win, selected ? dlg.button_label_active.atr - : dlg.button_label_inactive.atr); - for (i = 0; i < temp; i++) - waddch(win, ' '); - wattrset(win, selected ? dlg.button_key_active.atr - : dlg.button_key_inactive.atr); - waddch(win, label[0]); - wattrset(win, selected ? dlg.button_label_active.atr - : dlg.button_label_inactive.atr); - waddstr(win, (char *)label + 1); - wattrset(win, selected ? dlg.button_active.atr - : dlg.button_inactive.atr); - waddstr(win, ">"); - wmove(win, y, x + temp + 1); -} - -/* - * Draw a rectangular box with line drawing characters - */ -void -draw_box(WINDOW * win, int y, int x, int height, int width, - chtype box, chtype border) -{ - int i, j; - - wattrset(win, 0); - for (i = 0; i < height; i++) { - wmove(win, y + i, x); - for (j = 0; j < width; j++) - if (!i && !j) - waddch(win, border | ACS_ULCORNER); - else if (i == height - 1 && !j) - waddch(win, border | ACS_LLCORNER); - else if (!i && j == width - 1) - waddch(win, box | ACS_URCORNER); - else if (i == height - 1 && j == width - 1) - waddch(win, box | ACS_LRCORNER); - else if (!i) - waddch(win, border | ACS_HLINE); - else if (i == height - 1) - waddch(win, box | ACS_HLINE); - else if (!j) - waddch(win, border | ACS_VLINE); - else if (j == width - 1) - waddch(win, box | ACS_VLINE); - else - waddch(win, box | ' '); - } -} - -/* - * Draw shadows along the right and bottom edge to give a more 3D look - * to the boxes - */ -void draw_shadow(WINDOW * win, int y, int x, int height, int width) -{ - int i; - - if (has_colors()) { /* Whether terminal supports color? */ - wattrset(win, dlg.shadow.atr); - wmove(win, y + height, x + 2); - for (i = 0; i < width; i++) - waddch(win, winch(win) & A_CHARTEXT); - for (i = y + 1; i < y + height + 1; i++) { - wmove(win, i, x + width); - waddch(win, winch(win) & A_CHARTEXT); - waddch(win, winch(win) & A_CHARTEXT); - } - wnoutrefresh(win); - } -} - -/* - * Return the position of the first alphabetic character in a string. - */ -int first_alpha(const char *string, const char *exempt) -{ - int i, in_paren = 0, c; - - for (i = 0; i < strlen(string); i++) { - c = tolower(string[i]); - - if (strchr("<[(", c)) - ++in_paren; - if (strchr(">])", c) && in_paren > 0) - --in_paren; - - if ((!in_paren) && isalpha(c) && strchr(exempt, c) == 0) - return i; - } - - return 0; -} - -/* - * ncurses uses ESC to detect escaped char sequences. This resutl in - * a small timeout before ESC is actually delivered to the application. - * lxdialog suggest which is correctly translated to two - * times esc. But then we need to ignore the second esc to avoid stepping - * out one menu too much. Filter away all escaped key sequences since - * keypad(FALSE) turn off ncurses support for escape sequences - and thats - * needed to make notimeout() do as expected. - */ -int on_key_esc(WINDOW *win) -{ - int key; - int key2; - int key3; - - nodelay(win, TRUE); - keypad(win, FALSE); - key = wgetch(win); - key2 = wgetch(win); - do { - key3 = wgetch(win); - } while (key3 != ERR); - nodelay(win, FALSE); - keypad(win, TRUE); - if (key == KEY_ESC && key2 == ERR) - return KEY_ESC; - else if (key != ERR && key != KEY_ESC && key2 == ERR) - ungetch(key); - - return -1; -} - -/* redraw screen in new size */ -int on_key_resize(void) -{ - dialog_clear(); - return KEY_RESIZE; -} - -struct dialog_list *item_cur; -struct dialog_list item_nil; -struct dialog_list *item_head; - -void item_reset(void) -{ - struct dialog_list *p, *next; - - for (p = item_head; p; p = next) { - next = p->next; - free(p); - } - item_head = NULL; - item_cur = &item_nil; -} - -void item_make(const char *fmt, ...) -{ - va_list ap; - struct dialog_list *p = malloc(sizeof(*p)); - - if (item_head) - item_cur->next = p; - else - item_head = p; - item_cur = p; - memset(p, 0, sizeof(*p)); - - va_start(ap, fmt); - vsnprintf(item_cur->node.str, sizeof(item_cur->node.str), fmt, ap); - va_end(ap); -} - -void item_add_str(const char *fmt, ...) -{ - va_list ap; - size_t avail; - - avail = sizeof(item_cur->node.str) - strlen(item_cur->node.str); - - va_start(ap, fmt); - vsnprintf(item_cur->node.str + strlen(item_cur->node.str), - avail, fmt, ap); - item_cur->node.str[sizeof(item_cur->node.str) - 1] = '\0'; - va_end(ap); -} - -void item_set_tag(char tag) -{ - item_cur->node.tag = tag; -} -void item_set_data(void *ptr) -{ - item_cur->node.data = ptr; -} - -void item_set_selected(int val) -{ - item_cur->node.selected = val; -} - -int item_activate_selected(void) -{ - item_foreach() - if (item_is_selected()) - return 1; - return 0; -} - -void *item_data(void) -{ - return item_cur->node.data; -} - -char item_tag(void) -{ - return item_cur->node.tag; -} - -int item_count(void) -{ - int n = 0; - struct dialog_list *p; - - for (p = item_head; p; p = p->next) - n++; - return n; -} - -void item_set(int n) -{ - int i = 0; - item_foreach() - if (i++ == n) - return; -} - -int item_n(void) -{ - int n = 0; - struct dialog_list *p; - - for (p = item_head; p; p = p->next) { - if (p == item_cur) - return n; - n++; - } - return 0; -} - -const char *item_str(void) -{ - return item_cur->node.str; -} - -int item_is_selected(void) -{ - return (item_cur->node.selected != 0); -} - -int item_is_tag(char tag) -{ - return (item_cur->node.tag == tag); -} diff --git a/libraries/NEMU/tools/kconfig/lxdialog/yesno.c b/libraries/NEMU/tools/kconfig/lxdialog/yesno.c deleted file mode 100644 index bcaac9b..0000000 --- a/libraries/NEMU/tools/kconfig/lxdialog/yesno.c +++ /dev/null @@ -1,101 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0+ -/* - * yesno.c -- implements the yes/no box - * - * ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk) - * MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com) - */ - -#include "dialog.h" - -/* - * Display termination buttons - */ -static void print_buttons(WINDOW * dialog, int height, int width, int selected) -{ - int x = width / 2 - 10; - int y = height - 2; - - print_button(dialog, " Yes ", y, x, selected == 0); - print_button(dialog, " No ", y, x + 13, selected == 1); - - wmove(dialog, y, x + 1 + 13 * selected); - wrefresh(dialog); -} - -/* - * Display a dialog box with two buttons - Yes and No - */ -int dialog_yesno(const char *title, const char *prompt, int height, int width) -{ - int i, x, y, key = 0, button = 0; - WINDOW *dialog; - -do_resize: - if (getmaxy(stdscr) < (height + YESNO_HEIGTH_MIN)) - return -ERRDISPLAYTOOSMALL; - if (getmaxx(stdscr) < (width + YESNO_WIDTH_MIN)) - return -ERRDISPLAYTOOSMALL; - - /* center dialog box on screen */ - x = (getmaxx(stdscr) - width) / 2; - y = (getmaxy(stdscr) - height) / 2; - - draw_shadow(stdscr, y, x, height, width); - - dialog = newwin(height, width, y, x); - keypad(dialog, TRUE); - - draw_box(dialog, 0, 0, height, width, - dlg.dialog.atr, dlg.border.atr); - wattrset(dialog, dlg.border.atr); - mvwaddch(dialog, height - 3, 0, ACS_LTEE); - for (i = 0; i < width - 2; i++) - waddch(dialog, ACS_HLINE); - wattrset(dialog, dlg.dialog.atr); - waddch(dialog, ACS_RTEE); - - print_title(dialog, title, width); - - wattrset(dialog, dlg.dialog.atr); - print_autowrap(dialog, prompt, width - 2, 1, 3); - - print_buttons(dialog, height, width, 0); - - while (key != KEY_ESC) { - key = wgetch(dialog); - switch (key) { - case 'Y': - case 'y': - delwin(dialog); - return 0; - case 'N': - case 'n': - delwin(dialog); - return 1; - - case TAB: - case KEY_LEFT: - case KEY_RIGHT: - button = ((key == KEY_LEFT ? --button : ++button) < 0) ? 1 : (button > 1 ? 0 : button); - - print_buttons(dialog, height, width, button); - wrefresh(dialog); - break; - case ' ': - case '\n': - delwin(dialog); - return button; - case KEY_ESC: - key = on_key_esc(dialog); - break; - case KEY_RESIZE: - delwin(dialog); - on_key_resize(); - goto do_resize; - } - } - - delwin(dialog); - return key; /* ESC pressed */ -} diff --git a/libraries/NEMU/tools/kconfig/mconf.c b/libraries/NEMU/tools/kconfig/mconf.c deleted file mode 100644 index 4063dbc..0000000 --- a/libraries/NEMU/tools/kconfig/mconf.c +++ /dev/null @@ -1,1040 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Copyright (C) 2002 Roman Zippel - * - * Introduced single menu mode (show all sub-menus in one large tree). - * 2002-11-06 Petr Baudis - * - * i18n, 2005, Arnaldo Carvalho de Melo - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "lkc.h" -#include "lxdialog/dialog.h" - -static const char mconf_readme[] = -"Overview\n" -"--------\n" -"This interface lets you select features and parameters for the build.\n" -"Features can either be built-in, modularized, or ignored. Parameters\n" -"must be entered in as decimal or hexadecimal numbers or text.\n" -"\n" -"Menu items beginning with following braces represent features that\n" -" [ ] can be built in or removed\n" -" < > can be built in, modularized or removed\n" -" { } can be built in or modularized (selected by other feature)\n" -" - - are selected by other feature,\n" -"while *, M or whitespace inside braces means to build in, build as\n" -"a module or to exclude the feature respectively.\n" -"\n" -"To change any of these features, highlight it with the cursor\n" -"keys and press to build it in, to make it a module or\n" -" to remove it. You may also press the to cycle\n" -"through the available options (i.e. Y->N->M->Y).\n" -"\n" -"Some additional keyboard hints:\n" -"\n" -"Menus\n" -"----------\n" -"o Use the Up/Down arrow keys (cursor keys) to highlight the item you\n" -" wish to change or the submenu you wish to select and press .\n" -" Submenus are designated by \"--->\", empty ones by \"----\".\n" -"\n" -" Shortcut: Press the option's highlighted letter (hotkey).\n" -" Pressing a hotkey more than once will sequence\n" -" through all visible items which use that hotkey.\n" -"\n" -" You may also use the and keys to scroll\n" -" unseen options into view.\n" -"\n" -"o To exit a menu use the cursor keys to highlight the button\n" -" and press .\n" -"\n" -" Shortcut: Press or or if there is no hotkey\n" -" using those letters. You may press a single , but\n" -" there is a delayed response which you may find annoying.\n" -"\n" -" Also, the and cursor keys will cycle between and\n" -" \n" -"\n" -"\n" -"Data Entry\n" -"-----------\n" -"o Enter the requested information and press \n" -" If you are entering hexadecimal values, it is not necessary to\n" -" add the '0x' prefix to the entry.\n" -"\n" -"o For help, use the or cursor keys to highlight the help option\n" -" and press . You can try as well.\n" -"\n" -"\n" -"Text Box (Help Window)\n" -"--------\n" -"o Use the cursor keys to scroll up/down/left/right. The VI editor\n" -" keys h,j,k,l function here as do , , and for\n" -" those who are familiar with less and lynx.\n" -"\n" -"o Press , , , or to exit.\n" -"\n" -"\n" -"Alternate Configuration Files\n" -"-----------------------------\n" -"Menuconfig supports the use of alternate configuration files for\n" -"those who, for various reasons, find it necessary to switch\n" -"between different configurations.\n" -"\n" -"The button will let you save the current configuration to\n" -"a file of your choosing. Use the button to load a previously\n" -"saved alternate configuration.\n" -"\n" -"Even if you don't use alternate configuration files, but you find\n" -"during a Menuconfig session that you have completely messed up your\n" -"settings, you may use the button to restore your previously\n" -"saved settings from \".config\" without restarting Menuconfig.\n" -"\n" -"Other information\n" -"-----------------\n" -"If you use Menuconfig in an XTERM window, make sure you have your\n" -"$TERM variable set to point to an xterm definition which supports\n" -"color. Otherwise, Menuconfig will look rather bad. Menuconfig will\n" -"not display correctly in an RXVT window because rxvt displays only one\n" -"intensity of color, bright.\n" -"\n" -"Menuconfig will display larger menus on screens or xterms which are\n" -"set to display more than the standard 25 row by 80 column geometry.\n" -"In order for this to work, the \"stty size\" command must be able to\n" -"display the screen's current row and column geometry. I STRONGLY\n" -"RECOMMEND that you make sure you do NOT have the shell variables\n" -"LINES and COLUMNS exported into your environment. Some distributions\n" -"export those variables via /etc/profile. Some ncurses programs can\n" -"become confused when those variables (LINES & COLUMNS) don't reflect\n" -"the true screen size.\n" -"\n" -"Optional personality available\n" -"------------------------------\n" -"If you prefer to have all of the options listed in a single menu,\n" -"rather than the default multimenu hierarchy, run the menuconfig with\n" -"MENUCONFIG_MODE environment variable set to single_menu. Example:\n" -"\n" -"make MENUCONFIG_MODE=single_menu menuconfig\n" -"\n" -" will then unroll the appropriate category, or enfold it if it\n" -"is already unrolled.\n" -"\n" -"Note that this mode can eventually be a little more CPU expensive\n" -"(especially with a larger number of unrolled categories) than the\n" -"default mode.\n" -"\n" -"Different color themes available\n" -"--------------------------------\n" -"It is possible to select different color themes using the variable\n" -"MENUCONFIG_COLOR. To select a theme use:\n" -"\n" -"make MENUCONFIG_COLOR= menuconfig\n" -"\n" -"Available themes are\n" -" mono => selects colors suitable for monochrome displays\n" -" blackbg => selects a color scheme with black background\n" -" classic => theme with blue background. The classic look\n" -" bluetitle => an LCD friendly version of classic. (default)\n" -"\n", -menu_instructions[] = - "Arrow keys navigate the menu. " - " selects submenus ---> (or empty submenus ----). " - "Highlighted letters are hotkeys. " - "Pressing includes, excludes, modularizes features. " - "Press to exit, for Help, for Search. " - "Legend: [*] built-in [ ] excluded module < > module capable", -radiolist_instructions[] = - "Use the arrow keys to navigate this window or " - "press the hotkey of the item you wish to select " - "followed by the . " - "Press for additional information about this option.", -inputbox_instructions_int[] = - "Please enter a decimal value. " - "Fractions will not be accepted. " - "Use the key to move from the input field to the buttons below it.", -inputbox_instructions_hex[] = - "Please enter a hexadecimal value. " - "Use the key to move from the input field to the buttons below it.", -inputbox_instructions_string[] = - "Please enter a string value. " - "Use the key to move from the input field to the buttons below it.", -setmod_text[] = - "This feature depends on another which has been configured as a module.\n" - "As a result, this feature will be built as a module.", -load_config_text[] = - "Enter the name of the configuration file you wish to load. " - "Accept the name shown to restore the configuration you " - "last retrieved. Leave blank to abort.", -load_config_help[] = - "\n" - "For various reasons, one may wish to keep several different\n" - "configurations available on a single machine.\n" - "\n" - "If you have saved a previous configuration in a file other than the\n" - "default one, entering its name here will allow you to modify that\n" - "configuration.\n" - "\n" - "If you are uncertain, then you have probably never used alternate\n" - "configuration files. You should therefore leave this blank to abort.\n", -save_config_text[] = - "Enter a filename to which this configuration should be saved " - "as an alternate. Leave blank to abort.", -save_config_help[] = - "\n" - "For various reasons, one may wish to keep different configurations\n" - "available on a single machine.\n" - "\n" - "Entering a file name here will allow you to later retrieve, modify\n" - "and use the current configuration as an alternate to whatever\n" - "configuration options you have selected at that time.\n" - "\n" - "If you are uncertain what all this means then you should probably\n" - "leave this blank.\n", -search_help[] = - "\n" - "Search for symbols and display their relations.\n" - "Regular expressions are allowed.\n" - "Example: search for \"^FOO\"\n" - "Result:\n" - "-----------------------------------------------------------------\n" - "Symbol: FOO [=m]\n" - "Type : tristate\n" - "Prompt: Foo bus is used to drive the bar HW\n" - " Location:\n" - " -> Bus options (PCI, PCMCIA, EISA, ISA)\n" - " -> PCI support (PCI [=y])\n" - "(1) -> PCI access mode ( [=y])\n" - " Defined at drivers/pci/Kconfig:47\n" - " Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n" - " Selects: LIBCRC32\n" - " Selected by: BAR [=n]\n" - "-----------------------------------------------------------------\n" - "o The line 'Type:' shows the type of the configuration option for\n" - " this symbol (bool, tristate, string, ...)\n" - "o The line 'Prompt:' shows the text used in the menu structure for\n" - " this symbol\n" - "o The 'Defined at' line tells at what file / line number the symbol\n" - " is defined\n" - "o The 'Depends on:' line tells what symbols need to be defined for\n" - " this symbol to be visible in the menu (selectable)\n" - "o The 'Location:' lines tells where in the menu structure this symbol\n" - " is located\n" - " A location followed by a [=y] indicates that this is a\n" - " selectable menu item - and the current value is displayed inside\n" - " brackets.\n" - " Press the key in the (#) prefix to jump directly to that\n" - " location. You will be returned to the current search results\n" - " after exiting this new menu.\n" - "o The 'Selects:' line tells what symbols will be automatically\n" - " selected if this symbol is selected (y or m)\n" - "o The 'Selected by' line tells what symbol has selected this symbol\n" - "\n" - "Only relevant lines are shown.\n" - "\n\n" - "Search examples:\n" - "Examples: USB => find all symbols containing USB\n" - " ^USB => find all symbols starting with USB\n" - " USB$ => find all symbols ending with USB\n" - "\n"; - -static int indent; -static struct menu *current_menu; -static int child_count; -static int single_menu_mode; -static int show_all_options; -static int save_and_exit; -static int silent; - -static void conf(struct menu *menu, struct menu *active_menu); -static void conf_choice(struct menu *menu); -static void conf_string(struct menu *menu); -static void conf_load(void); -static void conf_save(void); -static int show_textbox_ext(const char *title, char *text, int r, int c, - int *keys, int *vscroll, int *hscroll, - update_text_fn update_text, void *data); -static void show_textbox(const char *title, const char *text, int r, int c); -static void show_helptext(const char *title, const char *text); -static void show_help(struct menu *menu); - -static char filename[PATH_MAX+1]; -static void set_config_filename(const char *config_filename) -{ - static char menu_backtitle[PATH_MAX+128]; - int size; - - size = snprintf(menu_backtitle, sizeof(menu_backtitle), - "%s - %s", config_filename, rootmenu.prompt->text); - if (size >= sizeof(menu_backtitle)) - menu_backtitle[sizeof(menu_backtitle)-1] = '\0'; - set_dialog_backtitle(menu_backtitle); - - size = snprintf(filename, sizeof(filename), "%s", config_filename); - if (size >= sizeof(filename)) - filename[sizeof(filename)-1] = '\0'; -} - -struct subtitle_part { - struct list_head entries; - const char *text; -}; -static LIST_HEAD(trail); - -static struct subtitle_list *subtitles; -static void set_subtitle(void) -{ - struct subtitle_part *sp; - struct subtitle_list *pos, *tmp; - - for (pos = subtitles; pos != NULL; pos = tmp) { - tmp = pos->next; - free(pos); - } - - subtitles = NULL; - list_for_each_entry(sp, &trail, entries) { - if (sp->text) { - if (pos) { - pos->next = xcalloc(1, sizeof(*pos)); - pos = pos->next; - } else { - subtitles = pos = xcalloc(1, sizeof(*pos)); - } - pos->text = sp->text; - } - } - - set_dialog_subtitles(subtitles); -} - -static void reset_subtitle(void) -{ - struct subtitle_list *pos, *tmp; - - for (pos = subtitles; pos != NULL; pos = tmp) { - tmp = pos->next; - free(pos); - } - subtitles = NULL; - set_dialog_subtitles(subtitles); -} - -struct search_data { - struct list_head *head; - struct menu **targets; - int *keys; -}; - -static void update_text(char *buf, size_t start, size_t end, void *_data) -{ - struct search_data *data = _data; - struct jump_key *pos; - int k = 0; - - list_for_each_entry(pos, data->head, entries) { - if (pos->offset >= start && pos->offset < end) { - char header[4]; - - if (k < JUMP_NB) { - int key = '0' + (pos->index % JUMP_NB) + 1; - - sprintf(header, "(%c)", key); - data->keys[k] = key; - data->targets[k] = pos->target; - k++; - } else { - sprintf(header, " "); - } - - memcpy(buf + pos->offset, header, sizeof(header) - 1); - } - } - data->keys[k] = 0; -} - -static void search_conf(void) -{ - struct symbol **sym_arr; - struct gstr res; - struct gstr title; - char *dialog_input; - int dres, vscroll = 0, hscroll = 0; - bool again; - struct gstr sttext; - struct subtitle_part stpart; - - title = str_new(); - str_printf( &title, "Enter (sub)string or regexp to search for " - "(with or without \"%s\")", CONFIG_); - -again: - dialog_clear(); - dres = dialog_inputbox("Search Configuration Parameter", - str_get(&title), - 10, 75, ""); - switch (dres) { - case 0: - break; - case 1: - show_helptext("Search Configuration", search_help); - goto again; - default: - str_free(&title); - return; - } - - /* strip the prefix if necessary */ - dialog_input = dialog_input_result; - if (strncasecmp(dialog_input_result, CONFIG_, strlen(CONFIG_)) == 0) - dialog_input += strlen(CONFIG_); - - sttext = str_new(); - str_printf(&sttext, "Search (%s)", dialog_input_result); - stpart.text = str_get(&sttext); - list_add_tail(&stpart.entries, &trail); - - sym_arr = sym_re_search(dialog_input); - do { - LIST_HEAD(head); - struct menu *targets[JUMP_NB]; - int keys[JUMP_NB + 1], i; - struct search_data data = { - .head = &head, - .targets = targets, - .keys = keys, - }; - struct jump_key *pos, *tmp; - - res = get_relations_str(sym_arr, &head); - set_subtitle(); - dres = show_textbox_ext("Search Results", (char *) - str_get(&res), 0, 0, keys, &vscroll, - &hscroll, &update_text, (void *) - &data); - again = false; - for (i = 0; i < JUMP_NB && keys[i]; i++) - if (dres == keys[i]) { - conf(targets[i]->parent, targets[i]); - again = true; - } - str_free(&res); - list_for_each_entry_safe(pos, tmp, &head, entries) - free(pos); - } while (again); - free(sym_arr); - str_free(&title); - list_del(trail.prev); - str_free(&sttext); -} - -static void build_conf(struct menu *menu) -{ - struct symbol *sym; - struct property *prop; - struct menu *child; - int type, tmp, doint = 2; - tristate val; - char ch; - bool visible; - - /* - * note: menu_is_visible() has side effect that it will - * recalc the value of the symbol. - */ - visible = menu_is_visible(menu); - if (show_all_options && !menu_has_prompt(menu)) - return; - else if (!show_all_options && !visible) - return; - - sym = menu->sym; - prop = menu->prompt; - if (!sym) { - if (prop && menu != current_menu) { - const char *prompt = menu_get_prompt(menu); - switch (prop->type) { - case P_MENU: - child_count++; - if (single_menu_mode) { - item_make("%s%*c%s", - menu->data ? "-->" : "++>", - indent + 1, ' ', prompt); - } else - item_make(" %*c%s %s", - indent + 1, ' ', prompt, - menu_is_empty(menu) ? "----" : "--->"); - item_set_tag('m'); - item_set_data(menu); - if (single_menu_mode && menu->data) - goto conf_childs; - return; - case P_COMMENT: - if (prompt) { - child_count++; - item_make(" %*c*** %s ***", indent + 1, ' ', prompt); - item_set_tag(':'); - item_set_data(menu); - } - break; - default: - if (prompt) { - child_count++; - item_make("---%*c%s", indent + 1, ' ', prompt); - item_set_tag(':'); - item_set_data(menu); - } - } - } else - doint = 0; - goto conf_childs; - } - - type = sym_get_type(sym); - if (sym_is_choice(sym)) { - struct symbol *def_sym = sym_get_choice_value(sym); - struct menu *def_menu = NULL; - - child_count++; - for (child = menu->list; child; child = child->next) { - if (menu_is_visible(child) && child->sym == def_sym) - def_menu = child; - } - - val = sym_get_tristate_value(sym); - if (sym_is_changeable(sym)) { - switch (type) { - case S_BOOLEAN: - item_make("[%c]", val == no ? ' ' : '*'); - break; - case S_TRISTATE: - switch (val) { - case yes: ch = '*'; break; - case mod: ch = 'M'; break; - default: ch = ' '; break; - } - item_make("<%c>", ch); - break; - } - item_set_tag('t'); - item_set_data(menu); - } else { - item_make(" "); - item_set_tag(def_menu ? 't' : ':'); - item_set_data(menu); - } - - item_add_str("%*c%s", indent + 1, ' ', menu_get_prompt(menu)); - if (val == yes) { - if (def_menu) { - item_add_str(" (%s)", menu_get_prompt(def_menu)); - item_add_str(" --->"); - if (def_menu->list) { - indent += 2; - build_conf(def_menu); - indent -= 2; - } - } - return; - } - } else { - if (menu == current_menu) { - item_make("---%*c%s", indent + 1, ' ', menu_get_prompt(menu)); - item_set_tag(':'); - item_set_data(menu); - goto conf_childs; - } - child_count++; - val = sym_get_tristate_value(sym); - if (sym_is_choice_value(sym) && val == yes) { - item_make(" "); - item_set_tag(':'); - item_set_data(menu); - } else { - switch (type) { - case S_BOOLEAN: - if (sym_is_changeable(sym)) - item_make("[%c]", val == no ? ' ' : '*'); - else - item_make("-%c-", val == no ? ' ' : '*'); - item_set_tag('t'); - item_set_data(menu); - break; - case S_TRISTATE: - switch (val) { - case yes: ch = '*'; break; - case mod: ch = 'M'; break; - default: ch = ' '; break; - } - if (sym_is_changeable(sym)) { - if (sym->rev_dep.tri == mod) - item_make("{%c}", ch); - else - item_make("<%c>", ch); - } else - item_make("-%c-", ch); - item_set_tag('t'); - item_set_data(menu); - break; - default: - tmp = 2 + strlen(sym_get_string_value(sym)); /* () = 2 */ - item_make("(%s)", sym_get_string_value(sym)); - tmp = indent - tmp + 4; - if (tmp < 0) - tmp = 0; - item_add_str("%*c%s%s", tmp, ' ', menu_get_prompt(menu), - (sym_has_value(sym) || !sym_is_changeable(sym)) ? - "" : " (NEW)"); - item_set_tag('s'); - item_set_data(menu); - goto conf_childs; - } - } - item_add_str("%*c%s%s", indent + 1, ' ', menu_get_prompt(menu), - (sym_has_value(sym) || !sym_is_changeable(sym)) ? - "" : " (NEW)"); - if (menu->prompt->type == P_MENU) { - item_add_str(" %s", menu_is_empty(menu) ? "----" : "--->"); - return; - } - } - -conf_childs: - indent += doint; - for (child = menu->list; child; child = child->next) - build_conf(child); - indent -= doint; -} - -static void conf(struct menu *menu, struct menu *active_menu) -{ - struct menu *submenu; - const char *prompt = menu_get_prompt(menu); - struct subtitle_part stpart; - struct symbol *sym; - int res; - int s_scroll = 0; - - if (menu != &rootmenu) - stpart.text = menu_get_prompt(menu); - else - stpart.text = NULL; - list_add_tail(&stpart.entries, &trail); - - while (1) { - item_reset(); - current_menu = menu; - build_conf(menu); - if (!child_count) - break; - set_subtitle(); - dialog_clear(); - res = dialog_menu(prompt ? prompt : "Main Menu", - menu_instructions, - active_menu, &s_scroll); - if (res == 1 || res == KEY_ESC || res == -ERRDISPLAYTOOSMALL) - break; - if (item_count() != 0) { - if (!item_activate_selected()) - continue; - if (!item_tag()) - continue; - } - submenu = item_data(); - active_menu = item_data(); - if (submenu) - sym = submenu->sym; - else - sym = NULL; - - switch (res) { - case 0: - switch (item_tag()) { - case 'm': - if (single_menu_mode) - submenu->data = (void *) (long) !submenu->data; - else - conf(submenu, NULL); - break; - case 't': - if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes) - conf_choice(submenu); - else if (submenu->prompt->type == P_MENU) - conf(submenu, NULL); - break; - case 's': - conf_string(submenu); - break; - } - break; - case 2: - if (sym) - show_help(submenu); - else { - reset_subtitle(); - show_helptext("README", mconf_readme); - } - break; - case 3: - reset_subtitle(); - conf_save(); - break; - case 4: - reset_subtitle(); - conf_load(); - break; - case 5: - if (item_is_tag('t')) { - if (sym_set_tristate_value(sym, yes)) - break; - if (sym_set_tristate_value(sym, mod)) - show_textbox(NULL, setmod_text, 6, 74); - } - break; - case 6: - if (item_is_tag('t')) - sym_set_tristate_value(sym, no); - break; - case 7: - if (item_is_tag('t')) - sym_set_tristate_value(sym, mod); - break; - case 8: - if (item_is_tag('t')) - sym_toggle_tristate_value(sym); - else if (item_is_tag('m')) - conf(submenu, NULL); - break; - case 9: - search_conf(); - break; - case 10: - show_all_options = !show_all_options; - break; - } - } - - list_del(trail.prev); -} - -static int show_textbox_ext(const char *title, char *text, int r, int c, int - *keys, int *vscroll, int *hscroll, update_text_fn - update_text, void *data) -{ - dialog_clear(); - return dialog_textbox(title, text, r, c, keys, vscroll, hscroll, - update_text, data); -} - -static void show_textbox(const char *title, const char *text, int r, int c) -{ - show_textbox_ext(title, (char *) text, r, c, (int []) {0}, NULL, NULL, - NULL, NULL); -} - -static void show_helptext(const char *title, const char *text) -{ - show_textbox(title, text, 0, 0); -} - -static void conf_message_callback(const char *s) -{ - if (save_and_exit) { - if (!silent) - printf("%s", s); - } else { - show_textbox(NULL, s, 6, 60); - } -} - -static void show_help(struct menu *menu) -{ - struct gstr help = str_new(); - - help.max_width = getmaxx(stdscr) - 10; - menu_get_ext_help(menu, &help); - - show_helptext(menu_get_prompt(menu), str_get(&help)); - str_free(&help); -} - -static void conf_choice(struct menu *menu) -{ - const char *prompt = menu_get_prompt(menu); - struct menu *child; - struct symbol *active; - - active = sym_get_choice_value(menu->sym); - while (1) { - int res; - int selected; - item_reset(); - - current_menu = menu; - for (child = menu->list; child; child = child->next) { - if (!menu_is_visible(child)) - continue; - if (child->sym) - item_make("%s", menu_get_prompt(child)); - else { - item_make("*** %s ***", menu_get_prompt(child)); - item_set_tag(':'); - } - item_set_data(child); - if (child->sym == active) - item_set_selected(1); - if (child->sym == sym_get_choice_value(menu->sym)) - item_set_tag('X'); - } - dialog_clear(); - res = dialog_checklist(prompt ? prompt : "Main Menu", - radiolist_instructions, - MENUBOX_HEIGTH_MIN, - MENUBOX_WIDTH_MIN, - CHECKLIST_HEIGTH_MIN); - selected = item_activate_selected(); - switch (res) { - case 0: - if (selected) { - child = item_data(); - if (!child->sym) - break; - - sym_set_tristate_value(child->sym, yes); - } - return; - case 1: - if (selected) { - child = item_data(); - show_help(child); - active = child->sym; - } else - show_help(menu); - break; - case KEY_ESC: - return; - case -ERRDISPLAYTOOSMALL: - return; - } - } -} - -static void conf_string(struct menu *menu) -{ - const char *prompt = menu_get_prompt(menu); - - while (1) { - int res; - const char *heading; - - switch (sym_get_type(menu->sym)) { - case S_INT: - heading = inputbox_instructions_int; - break; - case S_HEX: - heading = inputbox_instructions_hex; - break; - case S_STRING: - heading = inputbox_instructions_string; - break; - default: - heading = "Internal mconf error!"; - } - dialog_clear(); - res = dialog_inputbox(prompt ? prompt : "Main Menu", - heading, 10, 75, - sym_get_string_value(menu->sym)); - switch (res) { - case 0: - if (sym_set_string_value(menu->sym, dialog_input_result)) - return; - show_textbox(NULL, "You have made an invalid entry.", 5, 43); - break; - case 1: - show_help(menu); - break; - case KEY_ESC: - return; - } - } -} - -static void conf_load(void) -{ - - while (1) { - int res; - dialog_clear(); - res = dialog_inputbox(NULL, load_config_text, - 11, 55, filename); - switch(res) { - case 0: - if (!dialog_input_result[0]) - return; - if (!conf_read(dialog_input_result)) { - set_config_filename(dialog_input_result); - sym_set_change_count(1); - return; - } - show_textbox(NULL, "File does not exist!", 5, 38); - break; - case 1: - show_helptext("Load Alternate Configuration", load_config_help); - break; - case KEY_ESC: - return; - } - } -} - -static void conf_save(void) -{ - while (1) { - int res; - dialog_clear(); - res = dialog_inputbox(NULL, save_config_text, - 11, 55, filename); - switch(res) { - case 0: - if (!dialog_input_result[0]) - return; - if (!conf_write(dialog_input_result)) { - set_config_filename(dialog_input_result); - return; - } - show_textbox(NULL, "Can't create file!", 5, 60); - break; - case 1: - show_helptext("Save Alternate Configuration", save_config_help); - break; - case KEY_ESC: - return; - } - } -} - -static int handle_exit(void) -{ - int res; - - save_and_exit = 1; - reset_subtitle(); - dialog_clear(); - if (conf_get_changed()) - res = dialog_yesno(NULL, - "Do you wish to save your new configuration?\n" - "(Press to continue kernel configuration.)", - 6, 60); - else - res = -1; - - end_dialog(saved_x, saved_y); - - switch (res) { - case 0: - if (conf_write(filename)) { - fprintf(stderr, "\n\n" - "Error while writing of the configuration.\n" - "Your configuration changes were NOT saved." - "\n\n"); - return 1; - } - conf_write_autoconf(0); - /* fall through */ - case -1: - if (!silent) - printf("\n\n" - "*** End of the configuration.\n" - "*** Execute 'make' to start the build or try 'make help'." - "\n\n"); - res = 0; - break; - default: - if (!silent) - fprintf(stderr, "\n\n" - "Your configuration changes were NOT saved." - "\n\n"); - if (res != KEY_ESC) - res = 0; - } - - return res; -} - -static void sig_handler(int signo) -{ - exit(handle_exit()); -} - -int main(int ac, char **av) -{ - char *mode; - int res; - - signal(SIGINT, sig_handler); - - if (ac > 1 && strcmp(av[1], "-s") == 0) { - silent = 1; - /* Silence conf_read() until the real callback is set up */ - conf_set_message_callback(NULL); - av++; - } - conf_parse(av[1]); - conf_read(NULL); - - mode = getenv("MENUCONFIG_MODE"); - if (mode) { - if (!strcasecmp(mode, "single_menu")) - single_menu_mode = 1; - } - - if (init_dialog(NULL)) { - fprintf(stderr, "Your display is too small to run Menuconfig!\n"); - fprintf(stderr, "It must be at least 19 lines by 80 columns.\n"); - return 1; - } - - set_config_filename(conf_get_configname()); - conf_set_message_callback(conf_message_callback); - do { - conf(&rootmenu, NULL); - res = handle_exit(); - } while (res == KEY_ESC); - - return res; -} diff --git a/libraries/NEMU/tools/kconfig/menu.c b/libraries/NEMU/tools/kconfig/menu.c deleted file mode 100644 index a5fbd6c..0000000 --- a/libraries/NEMU/tools/kconfig/menu.c +++ /dev/null @@ -1,899 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Copyright (C) 2002 Roman Zippel - */ - -#include -#include -#include -#include - -#include "lkc.h" - -static const char nohelp_text[] = "There is no help available for this option."; - -struct menu rootmenu; -static struct menu **last_entry_ptr; - -struct file *file_list; -struct file *current_file; - -void menu_warn(struct menu *menu, const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - fprintf(stderr, "%s:%d:warning: ", menu->file->name, menu->lineno); - vfprintf(stderr, fmt, ap); - fprintf(stderr, "\n"); - va_end(ap); -} - -static void prop_warn(struct property *prop, const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - fprintf(stderr, "%s:%d:warning: ", prop->file->name, prop->lineno); - vfprintf(stderr, fmt, ap); - fprintf(stderr, "\n"); - va_end(ap); -} - -void _menu_init(void) -{ - current_entry = current_menu = &rootmenu; - last_entry_ptr = &rootmenu.list; -} - -void menu_add_entry(struct symbol *sym) -{ - struct menu *menu; - - menu = xmalloc(sizeof(*menu)); - memset(menu, 0, sizeof(*menu)); - menu->sym = sym; - menu->parent = current_menu; - menu->file = current_file; - menu->lineno = zconf_lineno(); - - *last_entry_ptr = menu; - last_entry_ptr = &menu->next; - current_entry = menu; - if (sym) - menu_add_symbol(P_SYMBOL, sym, NULL); -} - -struct menu *menu_add_menu(void) -{ - last_entry_ptr = ¤t_entry->list; - current_menu = current_entry; - return current_menu; -} - -void menu_end_menu(void) -{ - last_entry_ptr = ¤t_menu->next; - current_menu = current_menu->parent; -} - -/* - * Rewrites 'm' to 'm' && MODULES, so that it evaluates to 'n' when running - * without modules - */ -static struct expr *rewrite_m(struct expr *e) -{ - if (!e) - return e; - - switch (e->type) { - case E_NOT: - e->left.expr = rewrite_m(e->left.expr); - break; - case E_OR: - case E_AND: - e->left.expr = rewrite_m(e->left.expr); - e->right.expr = rewrite_m(e->right.expr); - break; - case E_SYMBOL: - /* change 'm' into 'm' && MODULES */ - if (e->left.sym == &symbol_mod) - return expr_alloc_and(e, expr_alloc_symbol(modules_sym)); - break; - default: - break; - } - return e; -} - -void menu_add_dep(struct expr *dep) -{ - current_entry->dep = expr_alloc_and(current_entry->dep, dep); -} - -void menu_set_type(int type) -{ - struct symbol *sym = current_entry->sym; - - if (sym->type == type) - return; - if (sym->type == S_UNKNOWN) { - sym->type = type; - return; - } - menu_warn(current_entry, - "ignoring type redefinition of '%s' from '%s' to '%s'", - sym->name ? sym->name : "", - sym_type_name(sym->type), sym_type_name(type)); -} - -static struct property *menu_add_prop(enum prop_type type, struct expr *expr, - struct expr *dep) -{ - struct property *prop; - - prop = xmalloc(sizeof(*prop)); - memset(prop, 0, sizeof(*prop)); - prop->type = type; - prop->file = current_file; - prop->lineno = zconf_lineno(); - prop->menu = current_entry; - prop->expr = expr; - prop->visible.expr = dep; - - /* append property to the prop list of symbol */ - if (current_entry->sym) { - struct property **propp; - - for (propp = ¤t_entry->sym->prop; - *propp; - propp = &(*propp)->next) - ; - *propp = prop; - } - - return prop; -} - -struct property *menu_add_prompt(enum prop_type type, char *prompt, - struct expr *dep) -{ - struct property *prop = menu_add_prop(type, NULL, dep); - - if (isspace(*prompt)) { - prop_warn(prop, "leading whitespace ignored"); - while (isspace(*prompt)) - prompt++; - } - if (current_entry->prompt) - prop_warn(prop, "prompt redefined"); - - /* Apply all upper menus' visibilities to actual prompts. */ - if (type == P_PROMPT) { - struct menu *menu = current_entry; - - while ((menu = menu->parent) != NULL) { - struct expr *dup_expr; - - if (!menu->visibility) - continue; - /* - * Do not add a reference to the menu's visibility - * expression but use a copy of it. Otherwise the - * expression reduction functions will modify - * expressions that have multiple references which - * can cause unwanted side effects. - */ - dup_expr = expr_copy(menu->visibility); - - prop->visible.expr = expr_alloc_and(prop->visible.expr, - dup_expr); - } - } - - current_entry->prompt = prop; - prop->text = prompt; - - return prop; -} - -void menu_add_visibility(struct expr *expr) -{ - current_entry->visibility = expr_alloc_and(current_entry->visibility, - expr); -} - -void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep) -{ - menu_add_prop(type, expr, dep); -} - -void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep) -{ - menu_add_prop(type, expr_alloc_symbol(sym), dep); -} - -void menu_add_option_modules(void) -{ - if (modules_sym) - zconf_error("symbol '%s' redefines option 'modules' already defined by symbol '%s'", - current_entry->sym->name, modules_sym->name); - modules_sym = current_entry->sym; -} - -void menu_add_option_defconfig_list(void) -{ - if (!sym_defconfig_list) - sym_defconfig_list = current_entry->sym; - else if (sym_defconfig_list != current_entry->sym) - zconf_error("trying to redefine defconfig symbol"); - sym_defconfig_list->flags |= SYMBOL_NO_WRITE; -} - -void menu_add_option_allnoconfig_y(void) -{ - current_entry->sym->flags |= SYMBOL_ALLNOCONFIG_Y; -} - -static int menu_validate_number(struct symbol *sym, struct symbol *sym2) -{ - return sym2->type == S_INT || sym2->type == S_HEX || - (sym2->type == S_UNKNOWN && sym_string_valid(sym, sym2->name)); -} - -static void sym_check_prop(struct symbol *sym) -{ - struct property *prop; - struct symbol *sym2; - char *use; - - for (prop = sym->prop; prop; prop = prop->next) { - switch (prop->type) { - case P_DEFAULT: - if ((sym->type == S_STRING || sym->type == S_INT || sym->type == S_HEX) && - prop->expr->type != E_SYMBOL) - prop_warn(prop, - "default for config symbol '%s'" - " must be a single symbol", sym->name); - if (prop->expr->type != E_SYMBOL) - break; - sym2 = prop_get_symbol(prop); - if (sym->type == S_HEX || sym->type == S_INT) { - if (!menu_validate_number(sym, sym2)) - prop_warn(prop, - "'%s': number is invalid", - sym->name); - } - if (sym_is_choice(sym)) { - struct property *choice_prop = - sym_get_choice_prop(sym2); - - if (!choice_prop || - prop_get_symbol(choice_prop) != sym) - prop_warn(prop, - "choice default symbol '%s' is not contained in the choice", - sym2->name); - } - break; - case P_SELECT: - case P_IMPLY: - use = prop->type == P_SELECT ? "select" : "imply"; - sym2 = prop_get_symbol(prop); - if (sym->type != S_BOOLEAN && sym->type != S_TRISTATE) - prop_warn(prop, - "config symbol '%s' uses %s, but is " - "not bool or tristate", sym->name, use); - else if (sym2->type != S_UNKNOWN && - sym2->type != S_BOOLEAN && - sym2->type != S_TRISTATE) - prop_warn(prop, - "'%s' has wrong type. '%s' only " - "accept arguments of bool and " - "tristate type", sym2->name, use); - break; - case P_RANGE: - if (sym->type != S_INT && sym->type != S_HEX) - prop_warn(prop, "range is only allowed " - "for int or hex symbols"); - if (!menu_validate_number(sym, prop->expr->left.sym) || - !menu_validate_number(sym, prop->expr->right.sym)) - prop_warn(prop, "range is invalid"); - break; - default: - ; - } - } -} - -void menu_finalize(struct menu *parent) -{ - struct menu *menu, *last_menu; - struct symbol *sym; - struct property *prop; - struct expr *parentdep, *basedep, *dep, *dep2, **ep; - - sym = parent->sym; - if (parent->list) { - /* - * This menu node has children. We (recursively) process them - * and propagate parent dependencies before moving on. - */ - - if (sym && sym_is_choice(sym)) { - if (sym->type == S_UNKNOWN) { - /* find the first choice value to find out choice type */ - current_entry = parent; - for (menu = parent->list; menu; menu = menu->next) { - if (menu->sym && menu->sym->type != S_UNKNOWN) { - menu_set_type(menu->sym->type); - break; - } - } - } - /* set the type of the remaining choice values */ - for (menu = parent->list; menu; menu = menu->next) { - current_entry = menu; - if (menu->sym && menu->sym->type == S_UNKNOWN) - menu_set_type(sym->type); - } - - /* - * Use the choice itself as the parent dependency of - * the contained items. This turns the mode of the - * choice into an upper bound on the visibility of the - * choice value symbols. - */ - parentdep = expr_alloc_symbol(sym); - } else { - /* Menu node for 'menu', 'if' */ - parentdep = parent->dep; - } - - /* For each child menu node... */ - for (menu = parent->list; menu; menu = menu->next) { - /* - * Propagate parent dependencies to the child menu - * node, also rewriting and simplifying expressions - */ - basedep = rewrite_m(menu->dep); - basedep = expr_transform(basedep); - basedep = expr_alloc_and(expr_copy(parentdep), basedep); - basedep = expr_eliminate_dups(basedep); - menu->dep = basedep; - - if (menu->sym) - /* - * Note: For symbols, all prompts are included - * too in the symbol's own property list - */ - prop = menu->sym->prop; - else - /* - * For non-symbol menu nodes, we just need to - * handle the prompt - */ - prop = menu->prompt; - - /* For each property... */ - for (; prop; prop = prop->next) { - if (prop->menu != menu) - /* - * Two possibilities: - * - * 1. The property lacks dependencies - * and so isn't location-specific, - * e.g. an 'option' - * - * 2. The property belongs to a symbol - * defined in multiple locations and - * is from some other location. It - * will be handled there in that - * case. - * - * Skip the property. - */ - continue; - - /* - * Propagate parent dependencies to the - * property's condition, rewriting and - * simplifying expressions at the same time - */ - dep = rewrite_m(prop->visible.expr); - dep = expr_transform(dep); - dep = expr_alloc_and(expr_copy(basedep), dep); - dep = expr_eliminate_dups(dep); - if (menu->sym && menu->sym->type != S_TRISTATE) - dep = expr_trans_bool(dep); - prop->visible.expr = dep; - - /* - * Handle selects and implies, which modify the - * dependencies of the selected/implied symbol - */ - if (prop->type == P_SELECT) { - struct symbol *es = prop_get_symbol(prop); - es->rev_dep.expr = expr_alloc_or(es->rev_dep.expr, - expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep))); - } else if (prop->type == P_IMPLY) { - struct symbol *es = prop_get_symbol(prop); - es->implied.expr = expr_alloc_or(es->implied.expr, - expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep))); - } - } - } - - if (sym && sym_is_choice(sym)) - expr_free(parentdep); - - /* - * Recursively process children in the same fashion before - * moving on - */ - for (menu = parent->list; menu; menu = menu->next) - menu_finalize(menu); - } else if (sym) { - /* - * Automatic submenu creation. If sym is a symbol and A, B, C, - * ... are consecutive items (symbols, menus, ifs, etc.) that - * all depend on sym, then the following menu structure is - * created: - * - * sym - * +-A - * +-B - * +-C - * ... - * - * This also works recursively, giving the following structure - * if A is a symbol and B depends on A: - * - * sym - * +-A - * | +-B - * +-C - * ... - */ - - basedep = parent->prompt ? parent->prompt->visible.expr : NULL; - basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no); - basedep = expr_eliminate_dups(expr_transform(basedep)); - - /* Examine consecutive elements after sym */ - last_menu = NULL; - for (menu = parent->next; menu; menu = menu->next) { - dep = menu->prompt ? menu->prompt->visible.expr : menu->dep; - if (!expr_contains_symbol(dep, sym)) - /* No dependency, quit */ - break; - if (expr_depends_symbol(dep, sym)) - /* Absolute dependency, put in submenu */ - goto next; - - /* - * Also consider it a dependency on sym if our - * dependencies contain sym and are a "superset" of - * sym's dependencies, e.g. '(sym || Q) && R' when sym - * depends on R. - * - * Note that 'R' might be from an enclosing menu or if, - * making this a more common case than it might seem. - */ - dep = expr_trans_compare(dep, E_UNEQUAL, &symbol_no); - dep = expr_eliminate_dups(expr_transform(dep)); - dep2 = expr_copy(basedep); - expr_eliminate_eq(&dep, &dep2); - expr_free(dep); - if (!expr_is_yes(dep2)) { - /* Not superset, quit */ - expr_free(dep2); - break; - } - /* Superset, put in submenu */ - expr_free(dep2); - next: - menu_finalize(menu); - menu->parent = parent; - last_menu = menu; - } - expr_free(basedep); - if (last_menu) { - parent->list = parent->next; - parent->next = last_menu->next; - last_menu->next = NULL; - } - - sym->dir_dep.expr = expr_alloc_or(sym->dir_dep.expr, parent->dep); - } - for (menu = parent->list; menu; menu = menu->next) { - if (sym && sym_is_choice(sym) && - menu->sym && !sym_is_choice_value(menu->sym)) { - current_entry = menu; - menu->sym->flags |= SYMBOL_CHOICEVAL; - if (!menu->prompt) - menu_warn(menu, "choice value must have a prompt"); - for (prop = menu->sym->prop; prop; prop = prop->next) { - if (prop->type == P_DEFAULT) - prop_warn(prop, "defaults for choice " - "values not supported"); - if (prop->menu == menu) - continue; - if (prop->type == P_PROMPT && - prop->menu->parent->sym != sym) - prop_warn(prop, "choice value used outside its choice group"); - } - /* Non-tristate choice values of tristate choices must - * depend on the choice being set to Y. The choice - * values' dependencies were propagated to their - * properties above, so the change here must be re- - * propagated. - */ - if (sym->type == S_TRISTATE && menu->sym->type != S_TRISTATE) { - basedep = expr_alloc_comp(E_EQUAL, sym, &symbol_yes); - menu->dep = expr_alloc_and(basedep, menu->dep); - for (prop = menu->sym->prop; prop; prop = prop->next) { - if (prop->menu != menu) - continue; - prop->visible.expr = expr_alloc_and(expr_copy(basedep), - prop->visible.expr); - } - } - menu_add_symbol(P_CHOICE, sym, NULL); - prop = sym_get_choice_prop(sym); - for (ep = &prop->expr; *ep; ep = &(*ep)->left.expr) - ; - *ep = expr_alloc_one(E_LIST, NULL); - (*ep)->right.sym = menu->sym; - } - - /* - * This code serves two purposes: - * - * (1) Flattening 'if' blocks, which do not specify a submenu - * and only add dependencies. - * - * (Automatic submenu creation might still create a submenu - * from an 'if' before this code runs.) - * - * (2) "Undoing" any automatic submenus created earlier below - * promptless symbols. - * - * Before: - * - * A - * if ... (or promptless symbol) - * +-B - * +-C - * D - * - * After: - * - * A - * if ... (or promptless symbol) - * B - * C - * D - */ - if (menu->list && (!menu->prompt || !menu->prompt->text)) { - for (last_menu = menu->list; ; last_menu = last_menu->next) { - last_menu->parent = parent; - if (!last_menu->next) - break; - } - last_menu->next = menu->next; - menu->next = menu->list; - menu->list = NULL; - } - } - - if (sym && !(sym->flags & SYMBOL_WARNED)) { - if (sym->type == S_UNKNOWN) - menu_warn(parent, "config symbol defined without type"); - - if (sym_is_choice(sym) && !parent->prompt) - menu_warn(parent, "choice must have a prompt"); - - /* Check properties connected to this symbol */ - sym_check_prop(sym); - sym->flags |= SYMBOL_WARNED; - } - - /* - * For non-optional choices, add a reverse dependency (corresponding to - * a select) of ' && m'. This prevents the user from - * setting the choice mode to 'n' when the choice is visible. - * - * This would also work for non-choice symbols, but only non-optional - * choices clear SYMBOL_OPTIONAL as of writing. Choices are implemented - * as a type of symbol. - */ - if (sym && !sym_is_optional(sym) && parent->prompt) { - sym->rev_dep.expr = expr_alloc_or(sym->rev_dep.expr, - expr_alloc_and(parent->prompt->visible.expr, - expr_alloc_symbol(&symbol_mod))); - } -} - -bool menu_has_prompt(struct menu *menu) -{ - if (!menu->prompt) - return false; - return true; -} - -/* - * Determine if a menu is empty. - * A menu is considered empty if it contains no or only - * invisible entries. - */ -bool menu_is_empty(struct menu *menu) -{ - struct menu *child; - - for (child = menu->list; child; child = child->next) { - if (menu_is_visible(child)) - return(false); - } - return(true); -} - -bool menu_is_visible(struct menu *menu) -{ - struct menu *child; - struct symbol *sym; - tristate visible; - - if (!menu->prompt) - return false; - - if (menu->visibility) { - if (expr_calc_value(menu->visibility) == no) - return false; - } - - sym = menu->sym; - if (sym) { - sym_calc_value(sym); - visible = menu->prompt->visible.tri; - } else - visible = menu->prompt->visible.tri = expr_calc_value(menu->prompt->visible.expr); - - if (visible != no) - return true; - - if (!sym || sym_get_tristate_value(menu->sym) == no) - return false; - - for (child = menu->list; child; child = child->next) { - if (menu_is_visible(child)) { - if (sym) - sym->flags |= SYMBOL_DEF_USER; - return true; - } - } - - return false; -} - -const char *menu_get_prompt(struct menu *menu) -{ - if (menu->prompt) - return menu->prompt->text; - else if (menu->sym) - return menu->sym->name; - return NULL; -} - -struct menu *menu_get_root_menu(struct menu *menu) -{ - return &rootmenu; -} - -struct menu *menu_get_parent_menu(struct menu *menu) -{ - enum prop_type type; - - for (; menu != &rootmenu; menu = menu->parent) { - type = menu->prompt ? menu->prompt->type : 0; - if (type == P_MENU) - break; - } - return menu; -} - -bool menu_has_help(struct menu *menu) -{ - return menu->help != NULL; -} - -const char *menu_get_help(struct menu *menu) -{ - if (menu->help) - return menu->help; - else - return ""; -} - -static void get_def_str(struct gstr *r, struct menu *menu) -{ - str_printf(r, "Defined at %s:%d\n", - menu->file->name, menu->lineno); -} - -static void get_dep_str(struct gstr *r, struct expr *expr, const char *prefix) -{ - if (!expr_is_yes(expr)) { - str_append(r, prefix); - expr_gstr_print(expr, r); - str_append(r, "\n"); - } -} - -static void get_prompt_str(struct gstr *r, struct property *prop, - struct list_head *head) -{ - int i, j; - struct menu *submenu[8], *menu, *location = NULL; - struct jump_key *jump = NULL; - - str_printf(r, " Prompt: %s\n", prop->text); - - get_dep_str(r, prop->menu->dep, " Depends on: "); - /* - * Most prompts in Linux have visibility that exactly matches their - * dependencies. For these, we print only the dependencies to improve - * readability. However, prompts with inline "if" expressions and - * prompts with a parent that has a "visible if" expression have - * differing dependencies and visibility. In these rare cases, we - * print both. - */ - if (!expr_eq(prop->menu->dep, prop->visible.expr)) - get_dep_str(r, prop->visible.expr, " Visible if: "); - - menu = prop->menu->parent; - for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) { - bool accessible = menu_is_visible(menu); - - submenu[i++] = menu; - if (location == NULL && accessible) - location = menu; - } - if (head && location) { - jump = xmalloc(sizeof(struct jump_key)); - - if (menu_is_visible(prop->menu)) { - /* - * There is not enough room to put the hint at the - * beginning of the "Prompt" line. Put the hint on the - * last "Location" line even when it would belong on - * the former. - */ - jump->target = prop->menu; - } else - jump->target = location; - - if (list_empty(head)) - jump->index = 0; - else - jump->index = list_entry(head->prev, struct jump_key, - entries)->index + 1; - - list_add_tail(&jump->entries, head); - } - - if (i > 0) { - str_printf(r, " Location:\n"); - for (j = 4; --i >= 0; j += 2) { - menu = submenu[i]; - if (jump && menu == location) - jump->offset = strlen(r->s); - str_printf(r, "%*c-> %s", j, ' ', - menu_get_prompt(menu)); - if (menu->sym) { - str_printf(r, " (%s [=%s])", menu->sym->name ? - menu->sym->name : "", - sym_get_string_value(menu->sym)); - } - str_append(r, "\n"); - } - } -} - -static void get_symbol_props_str(struct gstr *r, struct symbol *sym, - enum prop_type tok, const char *prefix) -{ - bool hit = false; - struct property *prop; - - for_all_properties(sym, prop, tok) { - if (!hit) { - str_append(r, prefix); - hit = true; - } else - str_printf(r, " && "); - expr_gstr_print(prop->expr, r); - } - if (hit) - str_append(r, "\n"); -} - -/* - * head is optional and may be NULL - */ -static void get_symbol_str(struct gstr *r, struct symbol *sym, - struct list_head *head) -{ - struct property *prop; - - if (sym && sym->name) { - str_printf(r, "Symbol: %s [=%s]\n", sym->name, - sym_get_string_value(sym)); - str_printf(r, "Type : %s\n", sym_type_name(sym->type)); - if (sym->type == S_INT || sym->type == S_HEX) { - prop = sym_get_range_prop(sym); - if (prop) { - str_printf(r, "Range : "); - expr_gstr_print(prop->expr, r); - str_append(r, "\n"); - } - } - } - - /* Print the definitions with prompts before the ones without */ - for_all_properties(sym, prop, P_SYMBOL) { - if (prop->menu->prompt) { - get_def_str(r, prop->menu); - get_prompt_str(r, prop->menu->prompt, head); - } - } - - for_all_properties(sym, prop, P_SYMBOL) { - if (!prop->menu->prompt) { - get_def_str(r, prop->menu); - get_dep_str(r, prop->menu->dep, " Depends on: "); - } - } - - get_symbol_props_str(r, sym, P_SELECT, "Selects: "); - if (sym->rev_dep.expr) { - expr_gstr_print_revdep(sym->rev_dep.expr, r, yes, "Selected by [y]:\n"); - expr_gstr_print_revdep(sym->rev_dep.expr, r, mod, "Selected by [m]:\n"); - expr_gstr_print_revdep(sym->rev_dep.expr, r, no, "Selected by [n]:\n"); - } - - get_symbol_props_str(r, sym, P_IMPLY, "Implies: "); - if (sym->implied.expr) { - expr_gstr_print_revdep(sym->implied.expr, r, yes, "Implied by [y]:\n"); - expr_gstr_print_revdep(sym->implied.expr, r, mod, "Implied by [m]:\n"); - expr_gstr_print_revdep(sym->implied.expr, r, no, "Implied by [n]:\n"); - } - - str_append(r, "\n\n"); -} - -struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head) -{ - struct symbol *sym; - struct gstr res = str_new(); - int i; - - for (i = 0; sym_arr && (sym = sym_arr[i]); i++) - get_symbol_str(&res, sym, head); - if (!i) - str_append(&res, "No matches found.\n"); - return res; -} - - -void menu_get_ext_help(struct menu *menu, struct gstr *help) -{ - struct symbol *sym = menu->sym; - const char *help_text = nohelp_text; - - if (menu_has_help(menu)) { - if (sym->name) - str_printf(help, "%s%s:\n\n", CONFIG_, sym->name); - help_text = menu_get_help(menu); - } - str_printf(help, "%s\n", help_text); - if (sym) - get_symbol_str(help, sym, NULL); -} diff --git a/libraries/NEMU/tools/kconfig/parser.y b/libraries/NEMU/tools/kconfig/parser.y deleted file mode 100644 index 190f111..0000000 --- a/libraries/NEMU/tools/kconfig/parser.y +++ /dev/null @@ -1,727 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* - * Copyright (C) 2002 Roman Zippel - */ -%{ - -#include -#include -#include -#include -#include -#include - -#include "lkc.h" - -#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt) - -#define PRINTD 0x0001 -#define DEBUG_PARSE 0x0002 - -int cdebug = PRINTD; - -static void yyerror(const char *err); -static void zconfprint(const char *err, ...); -static void zconf_error(const char *err, ...); -static bool zconf_endtoken(const char *tokenname, - const char *expected_tokenname); - -struct symbol *symbol_hash[SYMBOL_HASHSIZE]; - -static struct menu *current_menu, *current_entry; - -%} - -%union -{ - char *string; - struct symbol *symbol; - struct expr *expr; - struct menu *menu; - enum symbol_type type; - enum variable_flavor flavor; -} - -%token T_HELPTEXT -%token T_WORD -%token T_WORD_QUOTE -%token T_ALLNOCONFIG_Y -%token T_BOOL -%token T_CHOICE -%token T_CLOSE_PAREN -%token T_COLON_EQUAL -%token T_COMMENT -%token T_CONFIG -%token T_DEFAULT -%token T_DEFCONFIG_LIST -%token T_DEF_BOOL -%token T_DEF_TRISTATE -%token T_DEPENDS -%token T_ENDCHOICE -%token T_ENDIF -%token T_ENDMENU -%token T_HELP -%token T_HEX -%token T_IF -%token T_IMPLY -%token T_INT -%token T_MAINMENU -%token T_MENU -%token T_MENUCONFIG -%token T_MODULES -%token T_ON -%token T_OPEN_PAREN -%token T_OPTION -%token T_OPTIONAL -%token T_PLUS_EQUAL -%token T_PROMPT -%token T_RANGE -%token T_SELECT -%token T_SOURCE -%token T_STRING -%token T_TRISTATE -%token T_VISIBLE -%token T_EOL -%token T_ASSIGN_VAL - -%left T_OR -%left T_AND -%left T_EQUAL T_UNEQUAL -%left T_LESS T_LESS_EQUAL T_GREATER T_GREATER_EQUAL -%nonassoc T_NOT - -%type nonconst_symbol -%type symbol -%type type logic_type default -%type expr -%type if_expr -%type end -%type if_entry menu_entry choice_entry -%type word_opt assign_val -%type assign_op - -%destructor { - fprintf(stderr, "%s:%d: missing end statement for this entry\n", - $$->file->name, $$->lineno); - if (current_menu == $$) - menu_end_menu(); -} if_entry menu_entry choice_entry - -%% -input: mainmenu_stmt stmt_list | stmt_list; - -/* mainmenu entry */ - -mainmenu_stmt: T_MAINMENU T_WORD_QUOTE T_EOL -{ - menu_add_prompt(P_MENU, $2, NULL); -}; - -stmt_list: - /* empty */ - | stmt_list assignment_stmt - | stmt_list choice_stmt - | stmt_list comment_stmt - | stmt_list config_stmt - | stmt_list if_stmt - | stmt_list menu_stmt - | stmt_list menuconfig_stmt - | stmt_list source_stmt - | stmt_list T_WORD error T_EOL { zconf_error("unknown statement \"%s\"", $2); } - | stmt_list error T_EOL { zconf_error("invalid statement"); } -; - -stmt_list_in_choice: - /* empty */ - | stmt_list_in_choice comment_stmt - | stmt_list_in_choice config_stmt - | stmt_list_in_choice if_stmt_in_choice - | stmt_list_in_choice error T_EOL { zconf_error("invalid statement"); } -; - -/* config/menuconfig entry */ - -config_entry_start: T_CONFIG nonconst_symbol T_EOL -{ - $2->flags |= SYMBOL_OPTIONAL; - menu_add_entry($2); - printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), $2->name); -}; - -config_stmt: config_entry_start config_option_list -{ - printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); -}; - -menuconfig_entry_start: T_MENUCONFIG nonconst_symbol T_EOL -{ - $2->flags |= SYMBOL_OPTIONAL; - menu_add_entry($2); - printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), $2->name); -}; - -menuconfig_stmt: menuconfig_entry_start config_option_list -{ - if (current_entry->prompt) - current_entry->prompt->type = P_MENU; - else - zconfprint("warning: menuconfig statement without prompt"); - printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno()); -}; - -config_option_list: - /* empty */ - | config_option_list config_option - | config_option_list depends - | config_option_list help -; - -config_option: type prompt_stmt_opt T_EOL -{ - menu_set_type($1); - printd(DEBUG_PARSE, "%s:%d:type(%u)\n", - zconf_curname(), zconf_lineno(), - $1); -}; - -config_option: T_PROMPT T_WORD_QUOTE if_expr T_EOL -{ - menu_add_prompt(P_PROMPT, $2, $3); - printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); -}; - -config_option: default expr if_expr T_EOL -{ - menu_add_expr(P_DEFAULT, $2, $3); - if ($1 != S_UNKNOWN) - menu_set_type($1); - printd(DEBUG_PARSE, "%s:%d:default(%u)\n", - zconf_curname(), zconf_lineno(), - $1); -}; - -config_option: T_SELECT nonconst_symbol if_expr T_EOL -{ - menu_add_symbol(P_SELECT, $2, $3); - printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno()); -}; - -config_option: T_IMPLY nonconst_symbol if_expr T_EOL -{ - menu_add_symbol(P_IMPLY, $2, $3); - printd(DEBUG_PARSE, "%s:%d:imply\n", zconf_curname(), zconf_lineno()); -}; - -config_option: T_RANGE symbol symbol if_expr T_EOL -{ - menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,$2, $3), $4); - printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno()); -}; - -config_option: T_OPTION T_MODULES T_EOL -{ - menu_add_option_modules(); -}; - -config_option: T_OPTION T_DEFCONFIG_LIST T_EOL -{ - menu_add_option_defconfig_list(); -}; - -config_option: T_OPTION T_ALLNOCONFIG_Y T_EOL -{ - menu_add_option_allnoconfig_y(); -}; - -/* choice entry */ - -choice: T_CHOICE word_opt T_EOL -{ - struct symbol *sym = sym_lookup($2, SYMBOL_CHOICE); - sym->flags |= SYMBOL_NO_WRITE; - menu_add_entry(sym); - menu_add_expr(P_CHOICE, NULL, NULL); - free($2); - printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno()); -}; - -choice_entry: choice choice_option_list -{ - $$ = menu_add_menu(); -}; - -choice_end: end -{ - if (zconf_endtoken($1, "choice")) { - menu_end_menu(); - printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno()); - } -}; - -choice_stmt: choice_entry stmt_list_in_choice choice_end -; - -choice_option_list: - /* empty */ - | choice_option_list choice_option - | choice_option_list depends - | choice_option_list help -; - -choice_option: T_PROMPT T_WORD_QUOTE if_expr T_EOL -{ - menu_add_prompt(P_PROMPT, $2, $3); - printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno()); -}; - -choice_option: logic_type prompt_stmt_opt T_EOL -{ - menu_set_type($1); - printd(DEBUG_PARSE, "%s:%d:type(%u)\n", - zconf_curname(), zconf_lineno(), $1); -}; - -choice_option: T_OPTIONAL T_EOL -{ - current_entry->sym->flags |= SYMBOL_OPTIONAL; - printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno()); -}; - -choice_option: T_DEFAULT nonconst_symbol if_expr T_EOL -{ - menu_add_symbol(P_DEFAULT, $2, $3); - printd(DEBUG_PARSE, "%s:%d:default\n", - zconf_curname(), zconf_lineno()); -}; - -type: - logic_type - | T_INT { $$ = S_INT; } - | T_HEX { $$ = S_HEX; } - | T_STRING { $$ = S_STRING; } - -logic_type: - T_BOOL { $$ = S_BOOLEAN; } - | T_TRISTATE { $$ = S_TRISTATE; } - -default: - T_DEFAULT { $$ = S_UNKNOWN; } - | T_DEF_BOOL { $$ = S_BOOLEAN; } - | T_DEF_TRISTATE { $$ = S_TRISTATE; } - -/* if entry */ - -if_entry: T_IF expr T_EOL -{ - printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno()); - menu_add_entry(NULL); - menu_add_dep($2); - $$ = menu_add_menu(); -}; - -if_end: end -{ - if (zconf_endtoken($1, "if")) { - menu_end_menu(); - printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno()); - } -}; - -if_stmt: if_entry stmt_list if_end -; - -if_stmt_in_choice: if_entry stmt_list_in_choice if_end -; - -/* menu entry */ - -menu: T_MENU T_WORD_QUOTE T_EOL -{ - menu_add_entry(NULL); - menu_add_prompt(P_MENU, $2, NULL); - printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno()); -}; - -menu_entry: menu menu_option_list -{ - $$ = menu_add_menu(); -}; - -menu_end: end -{ - if (zconf_endtoken($1, "menu")) { - menu_end_menu(); - printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno()); - } -}; - -menu_stmt: menu_entry stmt_list menu_end -; - -menu_option_list: - /* empty */ - | menu_option_list visible - | menu_option_list depends -; - -source_stmt: T_SOURCE T_WORD_QUOTE T_EOL -{ - printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2); - zconf_nextfile($2); - free($2); -}; - -/* comment entry */ - -comment: T_COMMENT T_WORD_QUOTE T_EOL -{ - menu_add_entry(NULL); - menu_add_prompt(P_COMMENT, $2, NULL); - printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno()); -}; - -comment_stmt: comment comment_option_list -; - -comment_option_list: - /* empty */ - | comment_option_list depends -; - -/* help option */ - -help_start: T_HELP T_EOL -{ - printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno()); - zconf_starthelp(); -}; - -help: help_start T_HELPTEXT -{ - if (current_entry->help) { - free(current_entry->help); - zconfprint("warning: '%s' defined with more than one help text -- only the last one will be used", - current_entry->sym->name ?: ""); - } - - /* Is the help text empty or all whitespace? */ - if ($2[strspn($2, " \f\n\r\t\v")] == '\0') - zconfprint("warning: '%s' defined with blank help text", - current_entry->sym->name ?: ""); - - current_entry->help = $2; -}; - -/* depends option */ - -depends: T_DEPENDS T_ON expr T_EOL -{ - menu_add_dep($3); - printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno()); -}; - -/* visibility option */ -visible: T_VISIBLE if_expr T_EOL -{ - menu_add_visibility($2); -}; - -/* prompt statement */ - -prompt_stmt_opt: - /* empty */ - | T_WORD_QUOTE if_expr -{ - menu_add_prompt(P_PROMPT, $1, $2); -}; - -end: T_ENDMENU T_EOL { $$ = "menu"; } - | T_ENDCHOICE T_EOL { $$ = "choice"; } - | T_ENDIF T_EOL { $$ = "if"; } -; - -if_expr: /* empty */ { $$ = NULL; } - | T_IF expr { $$ = $2; } -; - -expr: symbol { $$ = expr_alloc_symbol($1); } - | symbol T_LESS symbol { $$ = expr_alloc_comp(E_LTH, $1, $3); } - | symbol T_LESS_EQUAL symbol { $$ = expr_alloc_comp(E_LEQ, $1, $3); } - | symbol T_GREATER symbol { $$ = expr_alloc_comp(E_GTH, $1, $3); } - | symbol T_GREATER_EQUAL symbol { $$ = expr_alloc_comp(E_GEQ, $1, $3); } - | symbol T_EQUAL symbol { $$ = expr_alloc_comp(E_EQUAL, $1, $3); } - | symbol T_UNEQUAL symbol { $$ = expr_alloc_comp(E_UNEQUAL, $1, $3); } - | T_OPEN_PAREN expr T_CLOSE_PAREN { $$ = $2; } - | T_NOT expr { $$ = expr_alloc_one(E_NOT, $2); } - | expr T_OR expr { $$ = expr_alloc_two(E_OR, $1, $3); } - | expr T_AND expr { $$ = expr_alloc_two(E_AND, $1, $3); } -; - -/* For symbol definitions, selects, etc., where quotes are not accepted */ -nonconst_symbol: T_WORD { $$ = sym_lookup($1, 0); free($1); }; - -symbol: nonconst_symbol - | T_WORD_QUOTE { $$ = sym_lookup($1, SYMBOL_CONST); free($1); } -; - -word_opt: /* empty */ { $$ = NULL; } - | T_WORD - -/* assignment statement */ - -assignment_stmt: T_WORD assign_op assign_val T_EOL { variable_add($1, $3, $2); free($1); free($3); } - -assign_op: - T_EQUAL { $$ = VAR_RECURSIVE; } - | T_COLON_EQUAL { $$ = VAR_SIMPLE; } - | T_PLUS_EQUAL { $$ = VAR_APPEND; } -; - -assign_val: - /* empty */ { $$ = xstrdup(""); }; - | T_ASSIGN_VAL -; - -%% - -void conf_parse(const char *name) -{ - struct symbol *sym; - int i; - - zconf_initscan(name); - - _menu_init(); - - if (getenv("ZCONF_DEBUG")) - yydebug = 1; - yyparse(); - - /* Variables are expanded in the parse phase. We can free them here. */ - variable_all_del(); - - if (yynerrs) - exit(1); - if (!modules_sym) - modules_sym = sym_find( "n" ); - - if (!menu_has_prompt(&rootmenu)) { - current_entry = &rootmenu; - menu_add_prompt(P_MENU, "Main menu", NULL); - } - - menu_finalize(&rootmenu); - for_all_symbols(i, sym) { - if (sym_check_deps(sym)) - yynerrs++; - } - if (yynerrs) - exit(1); - sym_set_change_count(1); -} - -static bool zconf_endtoken(const char *tokenname, - const char *expected_tokenname) -{ - if (strcmp(tokenname, expected_tokenname)) { - zconf_error("unexpected '%s' within %s block", - tokenname, expected_tokenname); - yynerrs++; - return false; - } - if (current_menu->file != current_file) { - zconf_error("'%s' in different file than '%s'", - tokenname, expected_tokenname); - fprintf(stderr, "%s:%d: location of the '%s'\n", - current_menu->file->name, current_menu->lineno, - expected_tokenname); - yynerrs++; - return false; - } - return true; -} - -static void zconfprint(const char *err, ...) -{ - va_list ap; - - fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno()); - va_start(ap, err); - vfprintf(stderr, err, ap); - va_end(ap); - fprintf(stderr, "\n"); -} - -static void zconf_error(const char *err, ...) -{ - va_list ap; - - yynerrs++; - fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno()); - va_start(ap, err); - vfprintf(stderr, err, ap); - va_end(ap); - fprintf(stderr, "\n"); -} - -static void yyerror(const char *err) -{ - fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err); -} - -static void print_quoted_string(FILE *out, const char *str) -{ - const char *p; - int len; - - putc('"', out); - while ((p = strchr(str, '"'))) { - len = p - str; - if (len) - fprintf(out, "%.*s", len, str); - fputs("\\\"", out); - str = p + 1; - } - fputs(str, out); - putc('"', out); -} - -static void print_symbol(FILE *out, struct menu *menu) -{ - struct symbol *sym = menu->sym; - struct property *prop; - - if (sym_is_choice(sym)) - fprintf(out, "\nchoice\n"); - else - fprintf(out, "\nconfig %s\n", sym->name); - switch (sym->type) { - case S_BOOLEAN: - fputs(" bool\n", out); - break; - case S_TRISTATE: - fputs(" tristate\n", out); - break; - case S_STRING: - fputs(" string\n", out); - break; - case S_INT: - fputs(" integer\n", out); - break; - case S_HEX: - fputs(" hex\n", out); - break; - default: - fputs(" ???\n", out); - break; - } - for (prop = sym->prop; prop; prop = prop->next) { - if (prop->menu != menu) - continue; - switch (prop->type) { - case P_PROMPT: - fputs(" prompt ", out); - print_quoted_string(out, prop->text); - if (!expr_is_yes(prop->visible.expr)) { - fputs(" if ", out); - expr_fprint(prop->visible.expr, out); - } - fputc('\n', out); - break; - case P_DEFAULT: - fputs( " default ", out); - expr_fprint(prop->expr, out); - if (!expr_is_yes(prop->visible.expr)) { - fputs(" if ", out); - expr_fprint(prop->visible.expr, out); - } - fputc('\n', out); - break; - case P_CHOICE: - fputs(" #choice value\n", out); - break; - case P_SELECT: - fputs( " select ", out); - expr_fprint(prop->expr, out); - fputc('\n', out); - break; - case P_IMPLY: - fputs( " imply ", out); - expr_fprint(prop->expr, out); - fputc('\n', out); - break; - case P_RANGE: - fputs( " range ", out); - expr_fprint(prop->expr, out); - fputc('\n', out); - break; - case P_MENU: - fputs( " menu ", out); - print_quoted_string(out, prop->text); - fputc('\n', out); - break; - case P_SYMBOL: - fputs( " symbol ", out); - fprintf(out, "%s\n", prop->menu->sym->name); - break; - default: - fprintf(out, " unknown prop %d!\n", prop->type); - break; - } - } - if (menu->help) { - int len = strlen(menu->help); - while (menu->help[--len] == '\n') - menu->help[len] = 0; - fprintf(out, " help\n%s\n", menu->help); - } -} - -void zconfdump(FILE *out) -{ - struct property *prop; - struct symbol *sym; - struct menu *menu; - - menu = rootmenu.list; - while (menu) { - if ((sym = menu->sym)) - print_symbol(out, menu); - else if ((prop = menu->prompt)) { - switch (prop->type) { - case P_COMMENT: - fputs("\ncomment ", out); - print_quoted_string(out, prop->text); - fputs("\n", out); - break; - case P_MENU: - fputs("\nmenu ", out); - print_quoted_string(out, prop->text); - fputs("\n", out); - break; - default: - ; - } - if (!expr_is_yes(prop->visible.expr)) { - fputs(" depends ", out); - expr_fprint(prop->visible.expr, out); - fputc('\n', out); - } - } - - if (menu->list) - menu = menu->list; - else if (menu->next) - menu = menu->next; - else while ((menu = menu->parent)) { - if (menu->prompt && menu->prompt->type == P_MENU) - fputs("\nendmenu\n", out); - if (menu->next) { - menu = menu->next; - break; - } - } - } -} - -#include "menu.c" diff --git a/libraries/NEMU/tools/kconfig/preprocess.c b/libraries/NEMU/tools/kconfig/preprocess.c deleted file mode 100644 index 0590f86..0000000 --- a/libraries/NEMU/tools/kconfig/preprocess.c +++ /dev/null @@ -1,574 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -// -// Copyright (C) 2018 Masahiro Yamada - -#include -#include -#include -#include -#include -#include - -#include "list.h" -#include "lkc.h" - -#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) - -static char *expand_string_with_args(const char *in, int argc, char *argv[]); -static char *expand_string(const char *in); - -static void __attribute__((noreturn)) pperror(const char *format, ...) -{ - va_list ap; - - fprintf(stderr, "%s:%d: ", current_file->name, yylineno); - va_start(ap, format); - vfprintf(stderr, format, ap); - va_end(ap); - fprintf(stderr, "\n"); - - exit(1); -} - -/* - * Environment variables - */ -static LIST_HEAD(env_list); - -struct env { - char *name; - char *value; - struct list_head node; -}; - -static void env_add(const char *name, const char *value) -{ - struct env *e; - - e = xmalloc(sizeof(*e)); - e->name = xstrdup(name); - e->value = xstrdup(value); - - list_add_tail(&e->node, &env_list); -} - -static void env_del(struct env *e) -{ - list_del(&e->node); - free(e->name); - free(e->value); - free(e); -} - -/* The returned pointer must be freed when done */ -static char *env_expand(const char *name) -{ - struct env *e; - const char *value; - - if (!*name) - return NULL; - - list_for_each_entry(e, &env_list, node) { - if (!strcmp(name, e->name)) - return xstrdup(e->value); - } - - value = getenv(name); - if (!value) - return NULL; - - /* - * We need to remember all referenced environment variables. - * They will be written out to include/config/auto.conf.cmd - */ - env_add(name, value); - - return xstrdup(value); -} - -void env_write_dep(FILE *f, const char *autoconfig_name) -{ - struct env *e, *tmp; - - list_for_each_entry_safe(e, tmp, &env_list, node) { - fprintf(f, "ifneq \"$(%s)\" \"%s\"\n", e->name, e->value); - fprintf(f, "%s: FORCE\n", autoconfig_name); - fprintf(f, "endif\n"); - env_del(e); - } -} - -/* - * Built-in functions - */ -struct function { - const char *name; - unsigned int min_args; - unsigned int max_args; - char *(*func)(int argc, char *argv[]); -}; - -static char *do_error_if(int argc, char *argv[]) -{ - if (!strcmp(argv[0], "y")) - pperror("%s", argv[1]); - - return xstrdup(""); -} - -static char *do_filename(int argc, char *argv[]) -{ - return xstrdup(current_file->name); -} - -static char *do_info(int argc, char *argv[]) -{ - printf("%s\n", argv[0]); - - return xstrdup(""); -} - -static char *do_lineno(int argc, char *argv[]) -{ - char buf[16]; - - sprintf(buf, "%d", yylineno); - - return xstrdup(buf); -} - -static char *do_shell(int argc, char *argv[]) -{ - FILE *p; - char buf[256]; - char *cmd; - size_t nread; - int i; - - cmd = argv[0]; - - p = popen(cmd, "r"); - if (!p) { - perror(cmd); - exit(1); - } - - nread = fread(buf, 1, sizeof(buf), p); - if (nread == sizeof(buf)) - nread--; - - /* remove trailing new lines */ - while (nread > 0 && buf[nread - 1] == '\n') - nread--; - - buf[nread] = 0; - - /* replace a new line with a space */ - for (i = 0; i < nread; i++) { - if (buf[i] == '\n') - buf[i] = ' '; - } - - if (pclose(p) == -1) { - perror(cmd); - exit(1); - } - - return xstrdup(buf); -} - -static char *do_warning_if(int argc, char *argv[]) -{ - if (!strcmp(argv[0], "y")) - fprintf(stderr, "%s:%d: %s\n", - current_file->name, yylineno, argv[1]); - - return xstrdup(""); -} - -static const struct function function_table[] = { - /* Name MIN MAX Function */ - { "error-if", 2, 2, do_error_if }, - { "filename", 0, 0, do_filename }, - { "info", 1, 1, do_info }, - { "lineno", 0, 0, do_lineno }, - { "shell", 1, 1, do_shell }, - { "warning-if", 2, 2, do_warning_if }, -}; - -#define FUNCTION_MAX_ARGS 16 - -static char *function_expand(const char *name, int argc, char *argv[]) -{ - const struct function *f; - int i; - - for (i = 0; i < ARRAY_SIZE(function_table); i++) { - f = &function_table[i]; - if (strcmp(f->name, name)) - continue; - - if (argc < f->min_args) - pperror("too few function arguments passed to '%s'", - name); - - if (argc > f->max_args) - pperror("too many function arguments passed to '%s'", - name); - - return f->func(argc, argv); - } - - return NULL; -} - -/* - * Variables (and user-defined functions) - */ -static LIST_HEAD(variable_list); - -struct variable { - char *name; - char *value; - enum variable_flavor flavor; - int exp_count; - struct list_head node; -}; - -static struct variable *variable_lookup(const char *name) -{ - struct variable *v; - - list_for_each_entry(v, &variable_list, node) { - if (!strcmp(name, v->name)) - return v; - } - - return NULL; -} - -static char *variable_expand(const char *name, int argc, char *argv[]) -{ - struct variable *v; - char *res; - - v = variable_lookup(name); - if (!v) - return NULL; - - if (argc == 0 && v->exp_count) - pperror("Recursive variable '%s' references itself (eventually)", - name); - - if (v->exp_count > 1000) - pperror("Too deep recursive expansion"); - - v->exp_count++; - - if (v->flavor == VAR_RECURSIVE) - res = expand_string_with_args(v->value, argc, argv); - else - res = xstrdup(v->value); - - v->exp_count--; - - return res; -} - -void variable_add(const char *name, const char *value, - enum variable_flavor flavor) -{ - struct variable *v; - char *new_value; - bool append = false; - - v = variable_lookup(name); - if (v) { - /* For defined variables, += inherits the existing flavor */ - if (flavor == VAR_APPEND) { - flavor = v->flavor; - append = true; - } else { - free(v->value); - } - } else { - /* For undefined variables, += assumes the recursive flavor */ - if (flavor == VAR_APPEND) - flavor = VAR_RECURSIVE; - - v = xmalloc(sizeof(*v)); - v->name = xstrdup(name); - v->exp_count = 0; - list_add_tail(&v->node, &variable_list); - } - - v->flavor = flavor; - - if (flavor == VAR_SIMPLE) - new_value = expand_string(value); - else - new_value = xstrdup(value); - - if (append) { - v->value = xrealloc(v->value, - strlen(v->value) + strlen(new_value) + 2); - strcat(v->value, " "); - strcat(v->value, new_value); - free(new_value); - } else { - v->value = new_value; - } -} - -static void variable_del(struct variable *v) -{ - list_del(&v->node); - free(v->name); - free(v->value); - free(v); -} - -void variable_all_del(void) -{ - struct variable *v, *tmp; - - list_for_each_entry_safe(v, tmp, &variable_list, node) - variable_del(v); -} - -/* - * Evaluate a clause with arguments. argc/argv are arguments from the upper - * function call. - * - * Returned string must be freed when done - */ -static char *eval_clause(const char *str, size_t len, int argc, char *argv[]) -{ - char *tmp, *name, *res, *endptr, *prev, *p; - int new_argc = 0; - char *new_argv[FUNCTION_MAX_ARGS]; - int nest = 0; - int i; - unsigned long n; - - tmp = xstrndup(str, len); - - /* - * If variable name is '1', '2', etc. It is generally an argument - * from a user-function call (i.e. local-scope variable). If not - * available, then look-up global-scope variables. - */ - n = strtoul(tmp, &endptr, 10); - if (!*endptr && n > 0 && n <= argc) { - res = xstrdup(argv[n - 1]); - goto free_tmp; - } - - prev = p = tmp; - - /* - * Split into tokens - * The function name and arguments are separated by a comma. - * For example, if the function call is like this: - * $(foo,$(x),$(y)) - * - * The input string for this helper should be: - * foo,$(x),$(y) - * - * and split into: - * new_argv[0] = 'foo' - * new_argv[1] = '$(x)' - * new_argv[2] = '$(y)' - */ - while (*p) { - if (nest == 0 && *p == ',') { - *p = 0; - if (new_argc >= FUNCTION_MAX_ARGS) - pperror("too many function arguments"); - new_argv[new_argc++] = prev; - prev = p + 1; - } else if (*p == '(') { - nest++; - } else if (*p == ')') { - nest--; - } - - p++; - } - new_argv[new_argc++] = prev; - - /* - * Shift arguments - * new_argv[0] represents a function name or a variable name. Put it - * into 'name', then shift the rest of the arguments. This simplifies - * 'const' handling. - */ - name = expand_string_with_args(new_argv[0], argc, argv); - new_argc--; - for (i = 0; i < new_argc; i++) - new_argv[i] = expand_string_with_args(new_argv[i + 1], - argc, argv); - - /* Search for variables */ - res = variable_expand(name, new_argc, new_argv); - if (res) - goto free; - - /* Look for built-in functions */ - res = function_expand(name, new_argc, new_argv); - if (res) - goto free; - - /* Last, try environment variable */ - if (new_argc == 0) { - res = env_expand(name); - if (res) - goto free; - } - - res = xstrdup(""); -free: - for (i = 0; i < new_argc; i++) - free(new_argv[i]); - free(name); -free_tmp: - free(tmp); - - return res; -} - -/* - * Expand a string that follows '$' - * - * For example, if the input string is - * ($(FOO)$($(BAR)))$(BAZ) - * this helper evaluates - * $($(FOO)$($(BAR))) - * and returns a new string containing the expansion (note that the string is - * recursively expanded), also advancing 'str' to point to the next character - * after the corresponding closing parenthesis, in this case, *str will be - * $(BAR) - */ -static char *expand_dollar_with_args(const char **str, int argc, char *argv[]) -{ - const char *p = *str; - const char *q; - int nest = 0; - - /* - * In Kconfig, variable/function references always start with "$(". - * Neither single-letter variables as in $A nor curly braces as in ${CC} - * are supported. '$' not followed by '(' loses its special meaning. - */ - if (*p != '(') { - *str = p; - return xstrdup("$"); - } - - p++; - q = p; - while (*q) { - if (*q == '(') { - nest++; - } else if (*q == ')') { - if (nest-- == 0) - break; - } - q++; - } - - if (!*q) - pperror("unterminated reference to '%s': missing ')'", p); - - /* Advance 'str' to after the expanded initial portion of the string */ - *str = q + 1; - - return eval_clause(p, q - p, argc, argv); -} - -char *expand_dollar(const char **str) -{ - return expand_dollar_with_args(str, 0, NULL); -} - -static char *__expand_string(const char **str, bool (*is_end)(char c), - int argc, char *argv[]) -{ - const char *in, *p; - char *expansion, *out; - size_t in_len, out_len; - - out = xmalloc(1); - *out = 0; - out_len = 1; - - p = in = *str; - - while (1) { - if (*p == '$') { - in_len = p - in; - p++; - expansion = expand_dollar_with_args(&p, argc, argv); - out_len += in_len + strlen(expansion); - out = xrealloc(out, out_len); - strncat(out, in, in_len); - strcat(out, expansion); - free(expansion); - in = p; - continue; - } - - if (is_end(*p)) - break; - - p++; - } - - in_len = p - in; - out_len += in_len; - out = xrealloc(out, out_len); - strncat(out, in, in_len); - - /* Advance 'str' to the end character */ - *str = p; - - return out; -} - -static bool is_end_of_str(char c) -{ - return !c; -} - -/* - * Expand variables and functions in the given string. Undefined variables - * expand to an empty string. - * The returned string must be freed when done. - */ -static char *expand_string_with_args(const char *in, int argc, char *argv[]) -{ - return __expand_string(&in, is_end_of_str, argc, argv); -} - -static char *expand_string(const char *in) -{ - return expand_string_with_args(in, 0, NULL); -} - -static bool is_end_of_token(char c) -{ - return !(isalnum(c) || c == '_' || c == '-'); -} - -/* - * Expand variables in a token. The parsing stops when a token separater - * (in most cases, it is a whitespace) is encountered. 'str' is updated to - * point to the next character. - * - * The returned string must be freed when done. - */ -char *expand_one_token(const char **str) -{ - return __expand_string(str, is_end_of_token, 0, NULL); -} diff --git a/libraries/NEMU/tools/kconfig/symbol.c b/libraries/NEMU/tools/kconfig/symbol.c deleted file mode 100644 index ffa3ec6..0000000 --- a/libraries/NEMU/tools/kconfig/symbol.c +++ /dev/null @@ -1,1314 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Copyright (C) 2002 Roman Zippel - */ - -#include -#include -#include -#include -#include - -#include "lkc.h" - -struct symbol symbol_yes = { - .name = "y", - .curr = { "y", yes }, - .flags = SYMBOL_CONST|SYMBOL_VALID, -}; - -struct symbol symbol_mod = { - .name = "m", - .curr = { "m", mod }, - .flags = SYMBOL_CONST|SYMBOL_VALID, -}; - -struct symbol symbol_no = { - .name = "n", - .curr = { "n", no }, - .flags = SYMBOL_CONST|SYMBOL_VALID, -}; - -static struct symbol symbol_empty = { - .name = "", - .curr = { "", no }, - .flags = SYMBOL_VALID, -}; - -struct symbol *sym_defconfig_list; -struct symbol *modules_sym; -static tristate modules_val; - -enum symbol_type sym_get_type(struct symbol *sym) -{ - enum symbol_type type = sym->type; - - if (type == S_TRISTATE) { - if (sym_is_choice_value(sym) && sym->visible == yes) - type = S_BOOLEAN; - else if (modules_val == no) - type = S_BOOLEAN; - } - return type; -} - -const char *sym_type_name(enum symbol_type type) -{ - switch (type) { - case S_BOOLEAN: - return "bool"; - case S_TRISTATE: - return "tristate"; - case S_INT: - return "integer"; - case S_HEX: - return "hex"; - case S_STRING: - return "string"; - case S_UNKNOWN: - return "unknown"; - } - return "???"; -} - -struct property *sym_get_choice_prop(struct symbol *sym) -{ - struct property *prop; - - for_all_choices(sym, prop) - return prop; - return NULL; -} - -static struct property *sym_get_default_prop(struct symbol *sym) -{ - struct property *prop; - - for_all_defaults(sym, prop) { - prop->visible.tri = expr_calc_value(prop->visible.expr); - if (prop->visible.tri != no) - return prop; - } - return NULL; -} - -struct property *sym_get_range_prop(struct symbol *sym) -{ - struct property *prop; - - for_all_properties(sym, prop, P_RANGE) { - prop->visible.tri = expr_calc_value(prop->visible.expr); - if (prop->visible.tri != no) - return prop; - } - return NULL; -} - -static long long sym_get_range_val(struct symbol *sym, int base) -{ - sym_calc_value(sym); - switch (sym->type) { - case S_INT: - base = 10; - break; - case S_HEX: - base = 16; - break; - default: - break; - } - return strtoll(sym->curr.val, NULL, base); -} - -static void sym_validate_range(struct symbol *sym) -{ - struct property *prop; - int base; - long long val, val2; - char str[64]; - - switch (sym->type) { - case S_INT: - base = 10; - break; - case S_HEX: - base = 16; - break; - default: - return; - } - prop = sym_get_range_prop(sym); - if (!prop) - return; - val = strtoll(sym->curr.val, NULL, base); - val2 = sym_get_range_val(prop->expr->left.sym, base); - if (val >= val2) { - val2 = sym_get_range_val(prop->expr->right.sym, base); - if (val <= val2) - return; - } - if (sym->type == S_INT) - sprintf(str, "%lld", val2); - else - sprintf(str, "0x%llx", val2); - sym->curr.val = xstrdup(str); -} - -static void sym_set_changed(struct symbol *sym) -{ - struct property *prop; - - sym->flags |= SYMBOL_CHANGED; - for (prop = sym->prop; prop; prop = prop->next) { - if (prop->menu) - prop->menu->flags |= MENU_CHANGED; - } -} - -static void sym_set_all_changed(void) -{ - struct symbol *sym; - int i; - - for_all_symbols(i, sym) - sym_set_changed(sym); -} - -static void sym_calc_visibility(struct symbol *sym) -{ - struct property *prop; - struct symbol *choice_sym = NULL; - tristate tri; - - /* any prompt visible? */ - tri = no; - - if (sym_is_choice_value(sym)) - choice_sym = prop_get_symbol(sym_get_choice_prop(sym)); - - for_all_prompts(sym, prop) { - prop->visible.tri = expr_calc_value(prop->visible.expr); - /* - * Tristate choice_values with visibility 'mod' are - * not visible if the corresponding choice's value is - * 'yes'. - */ - if (choice_sym && sym->type == S_TRISTATE && - prop->visible.tri == mod && choice_sym->curr.tri == yes) - prop->visible.tri = no; - - tri = EXPR_OR(tri, prop->visible.tri); - } - if (tri == mod && (sym->type != S_TRISTATE || modules_val == no)) - tri = yes; - if (sym->visible != tri) { - sym->visible = tri; - sym_set_changed(sym); - } - if (sym_is_choice_value(sym)) - return; - /* defaulting to "yes" if no explicit "depends on" are given */ - tri = yes; - if (sym->dir_dep.expr) - tri = expr_calc_value(sym->dir_dep.expr); - if (tri == mod && sym_get_type(sym) == S_BOOLEAN) - tri = yes; - if (sym->dir_dep.tri != tri) { - sym->dir_dep.tri = tri; - sym_set_changed(sym); - } - tri = no; - if (sym->rev_dep.expr) - tri = expr_calc_value(sym->rev_dep.expr); - if (tri == mod && sym_get_type(sym) == S_BOOLEAN) - tri = yes; - if (sym->rev_dep.tri != tri) { - sym->rev_dep.tri = tri; - sym_set_changed(sym); - } - tri = no; - if (sym->implied.expr) - tri = expr_calc_value(sym->implied.expr); - if (tri == mod && sym_get_type(sym) == S_BOOLEAN) - tri = yes; - if (sym->implied.tri != tri) { - sym->implied.tri = tri; - sym_set_changed(sym); - } -} - -/* - * Find the default symbol for a choice. - * First try the default values for the choice symbol - * Next locate the first visible choice value - * Return NULL if none was found - */ -struct symbol *sym_choice_default(struct symbol *sym) -{ - struct symbol *def_sym; - struct property *prop; - struct expr *e; - - /* any of the defaults visible? */ - for_all_defaults(sym, prop) { - prop->visible.tri = expr_calc_value(prop->visible.expr); - if (prop->visible.tri == no) - continue; - def_sym = prop_get_symbol(prop); - if (def_sym->visible != no) - return def_sym; - } - - /* just get the first visible value */ - prop = sym_get_choice_prop(sym); - expr_list_for_each_sym(prop->expr, e, def_sym) - if (def_sym->visible != no) - return def_sym; - - /* failed to locate any defaults */ - return NULL; -} - -static struct symbol *sym_calc_choice(struct symbol *sym) -{ - struct symbol *def_sym; - struct property *prop; - struct expr *e; - int flags; - - /* first calculate all choice values' visibilities */ - flags = sym->flags; - prop = sym_get_choice_prop(sym); - expr_list_for_each_sym(prop->expr, e, def_sym) { - sym_calc_visibility(def_sym); - if (def_sym->visible != no) - flags &= def_sym->flags; - } - - sym->flags &= flags | ~SYMBOL_DEF_USER; - - /* is the user choice visible? */ - def_sym = sym->def[S_DEF_USER].val; - if (def_sym && def_sym->visible != no) - return def_sym; - - def_sym = sym_choice_default(sym); - - if (def_sym == NULL) - /* no choice? reset tristate value */ - sym->curr.tri = no; - - return def_sym; -} - -static void sym_warn_unmet_dep(struct symbol *sym) -{ - struct gstr gs = str_new(); - - str_printf(&gs, - "\nWARNING: unmet direct dependencies detected for %s\n", - sym->name); - str_printf(&gs, - " Depends on [%c]: ", - sym->dir_dep.tri == mod ? 'm' : 'n'); - expr_gstr_print(sym->dir_dep.expr, &gs); - str_printf(&gs, "\n"); - - expr_gstr_print_revdep(sym->rev_dep.expr, &gs, yes, - " Selected by [y]:\n"); - expr_gstr_print_revdep(sym->rev_dep.expr, &gs, mod, - " Selected by [m]:\n"); - - fputs(str_get(&gs), stderr); -} - -void sym_calc_value(struct symbol *sym) -{ - struct symbol_value newval, oldval; - struct property *prop; - struct expr *e; - - if (!sym) - return; - - if (sym->flags & SYMBOL_VALID) - return; - - if (sym_is_choice_value(sym) && - sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES) { - sym->flags &= ~SYMBOL_NEED_SET_CHOICE_VALUES; - prop = sym_get_choice_prop(sym); - sym_calc_value(prop_get_symbol(prop)); - } - - sym->flags |= SYMBOL_VALID; - - oldval = sym->curr; - - switch (sym->type) { - case S_INT: - case S_HEX: - case S_STRING: - newval = symbol_empty.curr; - break; - case S_BOOLEAN: - case S_TRISTATE: - newval = symbol_no.curr; - break; - default: - sym->curr.val = sym->name; - sym->curr.tri = no; - return; - } - sym->flags &= ~SYMBOL_WRITE; - - sym_calc_visibility(sym); - - if (sym->visible != no) - sym->flags |= SYMBOL_WRITE; - - /* set default if recursively called */ - sym->curr = newval; - - switch (sym_get_type(sym)) { - case S_BOOLEAN: - case S_TRISTATE: - if (sym_is_choice_value(sym) && sym->visible == yes) { - prop = sym_get_choice_prop(sym); - newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no; - } else { - if (sym->visible != no) { - /* if the symbol is visible use the user value - * if available, otherwise try the default value - */ - if (sym_has_value(sym)) { - newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri, - sym->visible); - goto calc_newval; - } - } - if (sym->rev_dep.tri != no) - sym->flags |= SYMBOL_WRITE; - if (!sym_is_choice(sym)) { - prop = sym_get_default_prop(sym); - if (prop) { - newval.tri = EXPR_AND(expr_calc_value(prop->expr), - prop->visible.tri); - if (newval.tri != no) - sym->flags |= SYMBOL_WRITE; - } - if (sym->implied.tri != no) { - sym->flags |= SYMBOL_WRITE; - newval.tri = EXPR_OR(newval.tri, sym->implied.tri); - newval.tri = EXPR_AND(newval.tri, - sym->dir_dep.tri); - } - } - calc_newval: - if (sym->dir_dep.tri < sym->rev_dep.tri) - sym_warn_unmet_dep(sym); - newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri); - } - if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN) - newval.tri = yes; - break; - case S_STRING: - case S_HEX: - case S_INT: - if (sym->visible != no && sym_has_value(sym)) { - newval.val = sym->def[S_DEF_USER].val; - break; - } - prop = sym_get_default_prop(sym); - if (prop) { - struct symbol *ds = prop_get_symbol(prop); - if (ds) { - sym->flags |= SYMBOL_WRITE; - sym_calc_value(ds); - newval.val = ds->curr.val; - } - } - break; - default: - ; - } - - sym->curr = newval; - if (sym_is_choice(sym) && newval.tri == yes) - sym->curr.val = sym_calc_choice(sym); - sym_validate_range(sym); - - if (memcmp(&oldval, &sym->curr, sizeof(oldval))) { - sym_set_changed(sym); - if (modules_sym == sym) { - sym_set_all_changed(); - modules_val = modules_sym->curr.tri; - } - } - - if (sym_is_choice(sym)) { - struct symbol *choice_sym; - - prop = sym_get_choice_prop(sym); - expr_list_for_each_sym(prop->expr, e, choice_sym) { - if ((sym->flags & SYMBOL_WRITE) && - choice_sym->visible != no) - choice_sym->flags |= SYMBOL_WRITE; - if (sym->flags & SYMBOL_CHANGED) - sym_set_changed(choice_sym); - } - } - - if (sym->flags & SYMBOL_NO_WRITE) - sym->flags &= ~SYMBOL_WRITE; - - if (sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES) - set_all_choice_values(sym); -} - -void sym_clear_all_valid(void) -{ - struct symbol *sym; - int i; - - for_all_symbols(i, sym) - sym->flags &= ~SYMBOL_VALID; - sym_add_change_count(1); - sym_calc_value(modules_sym); -} - -bool sym_tristate_within_range(struct symbol *sym, tristate val) -{ - int type = sym_get_type(sym); - - if (sym->visible == no) - return false; - - if (type != S_BOOLEAN && type != S_TRISTATE) - return false; - - if (type == S_BOOLEAN && val == mod) - return false; - if (sym->visible <= sym->rev_dep.tri) - return false; - if (sym_is_choice_value(sym) && sym->visible == yes) - return val == yes; - return val >= sym->rev_dep.tri && val <= sym->visible; -} - -bool sym_set_tristate_value(struct symbol *sym, tristate val) -{ - tristate oldval = sym_get_tristate_value(sym); - - if (oldval != val && !sym_tristate_within_range(sym, val)) - return false; - - if (!(sym->flags & SYMBOL_DEF_USER)) { - sym->flags |= SYMBOL_DEF_USER; - sym_set_changed(sym); - } - /* - * setting a choice value also resets the new flag of the choice - * symbol and all other choice values. - */ - if (sym_is_choice_value(sym) && val == yes) { - struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym)); - struct property *prop; - struct expr *e; - - cs->def[S_DEF_USER].val = sym; - cs->flags |= SYMBOL_DEF_USER; - prop = sym_get_choice_prop(cs); - for (e = prop->expr; e; e = e->left.expr) { - if (e->right.sym->visible != no) - e->right.sym->flags |= SYMBOL_DEF_USER; - } - } - - sym->def[S_DEF_USER].tri = val; - if (oldval != val) - sym_clear_all_valid(); - - return true; -} - -tristate sym_toggle_tristate_value(struct symbol *sym) -{ - tristate oldval, newval; - - oldval = newval = sym_get_tristate_value(sym); - do { - switch (newval) { - case no: - newval = mod; - break; - case mod: - newval = yes; - break; - case yes: - newval = no; - break; - } - if (sym_set_tristate_value(sym, newval)) - break; - } while (oldval != newval); - return newval; -} - -bool sym_string_valid(struct symbol *sym, const char *str) -{ - signed char ch; - - switch (sym->type) { - case S_STRING: - return true; - case S_INT: - ch = *str++; - if (ch == '-') - ch = *str++; - if (!isdigit(ch)) - return false; - if (ch == '0' && *str != 0) - return false; - while ((ch = *str++)) { - if (!isdigit(ch)) - return false; - } - return true; - case S_HEX: - if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) - str += 2; - ch = *str++; - do { - if (!isxdigit(ch)) - return false; - } while ((ch = *str++)); - return true; - case S_BOOLEAN: - case S_TRISTATE: - switch (str[0]) { - case 'y': case 'Y': - case 'm': case 'M': - case 'n': case 'N': - return true; - } - return false; - default: - return false; - } -} - -bool sym_string_within_range(struct symbol *sym, const char *str) -{ - struct property *prop; - long long val; - - switch (sym->type) { - case S_STRING: - return sym_string_valid(sym, str); - case S_INT: - if (!sym_string_valid(sym, str)) - return false; - prop = sym_get_range_prop(sym); - if (!prop) - return true; - val = strtoll(str, NULL, 10); - return val >= sym_get_range_val(prop->expr->left.sym, 10) && - val <= sym_get_range_val(prop->expr->right.sym, 10); - case S_HEX: - if (!sym_string_valid(sym, str)) - return false; - prop = sym_get_range_prop(sym); - if (!prop) - return true; - val = strtoll(str, NULL, 16); - return val >= sym_get_range_val(prop->expr->left.sym, 16) && - val <= sym_get_range_val(prop->expr->right.sym, 16); - case S_BOOLEAN: - case S_TRISTATE: - switch (str[0]) { - case 'y': case 'Y': - return sym_tristate_within_range(sym, yes); - case 'm': case 'M': - return sym_tristate_within_range(sym, mod); - case 'n': case 'N': - return sym_tristate_within_range(sym, no); - } - return false; - default: - return false; - } -} - -bool sym_set_string_value(struct symbol *sym, const char *newval) -{ - const char *oldval; - char *val; - int size; - - switch (sym->type) { - case S_BOOLEAN: - case S_TRISTATE: - switch (newval[0]) { - case 'y': case 'Y': - return sym_set_tristate_value(sym, yes); - case 'm': case 'M': - return sym_set_tristate_value(sym, mod); - case 'n': case 'N': - return sym_set_tristate_value(sym, no); - } - return false; - default: - ; - } - - if (!sym_string_within_range(sym, newval)) - return false; - - if (!(sym->flags & SYMBOL_DEF_USER)) { - sym->flags |= SYMBOL_DEF_USER; - sym_set_changed(sym); - } - - oldval = sym->def[S_DEF_USER].val; - size = strlen(newval) + 1; - if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) { - size += 2; - sym->def[S_DEF_USER].val = val = xmalloc(size); - *val++ = '0'; - *val++ = 'x'; - } else if (!oldval || strcmp(oldval, newval)) - sym->def[S_DEF_USER].val = val = xmalloc(size); - else - return true; - - strcpy(val, newval); - free((void *)oldval); - sym_clear_all_valid(); - - return true; -} - -/* - * Find the default value associated to a symbol. - * For tristate symbol handle the modules=n case - * in which case "m" becomes "y". - * If the symbol does not have any default then fallback - * to the fixed default values. - */ -const char *sym_get_string_default(struct symbol *sym) -{ - struct property *prop; - struct symbol *ds; - const char *str; - tristate val; - - sym_calc_visibility(sym); - sym_calc_value(modules_sym); - val = symbol_no.curr.tri; - str = symbol_empty.curr.val; - - /* If symbol has a default value look it up */ - prop = sym_get_default_prop(sym); - if (prop != NULL) { - switch (sym->type) { - case S_BOOLEAN: - case S_TRISTATE: - /* The visibility may limit the value from yes => mod */ - val = EXPR_AND(expr_calc_value(prop->expr), prop->visible.tri); - break; - default: - /* - * The following fails to handle the situation - * where a default value is further limited by - * the valid range. - */ - ds = prop_get_symbol(prop); - if (ds != NULL) { - sym_calc_value(ds); - str = (const char *)ds->curr.val; - } - } - } - - /* Handle select statements */ - val = EXPR_OR(val, sym->rev_dep.tri); - - /* transpose mod to yes if modules are not enabled */ - if (val == mod) - if (!sym_is_choice_value(sym) && modules_sym->curr.tri == no) - val = yes; - - /* transpose mod to yes if type is bool */ - if (sym->type == S_BOOLEAN && val == mod) - val = yes; - - /* adjust the default value if this symbol is implied by another */ - if (val < sym->implied.tri) - val = sym->implied.tri; - - switch (sym->type) { - case S_BOOLEAN: - case S_TRISTATE: - switch (val) { - case no: return "n"; - case mod: return "m"; - case yes: return "y"; - } - case S_INT: - case S_HEX: - return str; - case S_STRING: - return str; - case S_UNKNOWN: - break; - } - return ""; -} - -const char *sym_get_string_value(struct symbol *sym) -{ - tristate val; - - switch (sym->type) { - case S_BOOLEAN: - case S_TRISTATE: - val = sym_get_tristate_value(sym); - switch (val) { - case no: - return "n"; - case mod: - sym_calc_value(modules_sym); - return (modules_sym->curr.tri == no) ? "n" : "m"; - case yes: - return "y"; - } - break; - default: - ; - } - return (const char *)sym->curr.val; -} - -bool sym_is_changeable(struct symbol *sym) -{ - return sym->visible > sym->rev_dep.tri; -} - -static unsigned strhash(const char *s) -{ - /* fnv32 hash */ - unsigned hash = 2166136261U; - for (; *s; s++) - hash = (hash ^ *s) * 0x01000193; - return hash; -} - -struct symbol *sym_lookup(const char *name, int flags) -{ - struct symbol *symbol; - char *new_name; - int hash; - - if (name) { - if (name[0] && !name[1]) { - switch (name[0]) { - case 'y': return &symbol_yes; - case 'm': return &symbol_mod; - case 'n': return &symbol_no; - } - } - hash = strhash(name) % SYMBOL_HASHSIZE; - - for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) { - if (symbol->name && - !strcmp(symbol->name, name) && - (flags ? symbol->flags & flags - : !(symbol->flags & (SYMBOL_CONST|SYMBOL_CHOICE)))) - return symbol; - } - new_name = xstrdup(name); - } else { - new_name = NULL; - hash = 0; - } - - symbol = xmalloc(sizeof(*symbol)); - memset(symbol, 0, sizeof(*symbol)); - symbol->name = new_name; - symbol->type = S_UNKNOWN; - symbol->flags = flags; - - symbol->next = symbol_hash[hash]; - symbol_hash[hash] = symbol; - - return symbol; -} - -struct symbol *sym_find(const char *name) -{ - struct symbol *symbol = NULL; - int hash = 0; - - if (!name) - return NULL; - - if (name[0] && !name[1]) { - switch (name[0]) { - case 'y': return &symbol_yes; - case 'm': return &symbol_mod; - case 'n': return &symbol_no; - } - } - hash = strhash(name) % SYMBOL_HASHSIZE; - - for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) { - if (symbol->name && - !strcmp(symbol->name, name) && - !(symbol->flags & SYMBOL_CONST)) - break; - } - - return symbol; -} - -const char *sym_escape_string_value(const char *in) -{ - const char *p; - size_t reslen; - char *res; - size_t l; - - reslen = strlen(in) + strlen("\"\"") + 1; - - p = in; - for (;;) { - l = strcspn(p, "\"\\"); - p += l; - - if (p[0] == '\0') - break; - - reslen++; - p++; - } - - res = xmalloc(reslen); - res[0] = '\0'; - - strcat(res, "\""); - - p = in; - for (;;) { - l = strcspn(p, "\"\\"); - strncat(res, p, l); - p += l; - - if (p[0] == '\0') - break; - - strcat(res, "\\"); - strncat(res, p++, 1); - } - - strcat(res, "\""); - return res; -} - -struct sym_match { - struct symbol *sym; - off_t so, eo; -}; - -/* Compare matched symbols as thus: - * - first, symbols that match exactly - * - then, alphabetical sort - */ -static int sym_rel_comp(const void *sym1, const void *sym2) -{ - const struct sym_match *s1 = sym1; - const struct sym_match *s2 = sym2; - int exact1, exact2; - - /* Exact match: - * - if matched length on symbol s1 is the length of that symbol, - * then this symbol should come first; - * - if matched length on symbol s2 is the length of that symbol, - * then this symbol should come first. - * Note: since the search can be a regexp, both symbols may match - * exactly; if this is the case, we can't decide which comes first, - * and we fallback to sorting alphabetically. - */ - exact1 = (s1->eo - s1->so) == strlen(s1->sym->name); - exact2 = (s2->eo - s2->so) == strlen(s2->sym->name); - if (exact1 && !exact2) - return -1; - if (!exact1 && exact2) - return 1; - - /* As a fallback, sort symbols alphabetically */ - return strcmp(s1->sym->name, s2->sym->name); -} - -struct symbol **sym_re_search(const char *pattern) -{ - struct symbol *sym, **sym_arr = NULL; - struct sym_match *sym_match_arr = NULL; - int i, cnt, size; - regex_t re; - regmatch_t match[1]; - - cnt = size = 0; - /* Skip if empty */ - if (strlen(pattern) == 0) - return NULL; - if (regcomp(&re, pattern, REG_EXTENDED|REG_ICASE)) - return NULL; - - for_all_symbols(i, sym) { - if (sym->flags & SYMBOL_CONST || !sym->name) - continue; - if (regexec(&re, sym->name, 1, match, 0)) - continue; - if (cnt >= size) { - void *tmp; - size += 16; - tmp = realloc(sym_match_arr, size * sizeof(struct sym_match)); - if (!tmp) - goto sym_re_search_free; - sym_match_arr = tmp; - } - sym_calc_value(sym); - /* As regexec returned 0, we know we have a match, so - * we can use match[0].rm_[se]o without further checks - */ - sym_match_arr[cnt].so = match[0].rm_so; - sym_match_arr[cnt].eo = match[0].rm_eo; - sym_match_arr[cnt++].sym = sym; - } - if (sym_match_arr) { - qsort(sym_match_arr, cnt, sizeof(struct sym_match), sym_rel_comp); - sym_arr = malloc((cnt+1) * sizeof(struct symbol *)); - if (!sym_arr) - goto sym_re_search_free; - for (i = 0; i < cnt; i++) - sym_arr[i] = sym_match_arr[i].sym; - sym_arr[cnt] = NULL; - } -sym_re_search_free: - /* sym_match_arr can be NULL if no match, but free(NULL) is OK */ - free(sym_match_arr); - regfree(&re); - - return sym_arr; -} - -/* - * When we check for recursive dependencies we use a stack to save - * current state so we can print out relevant info to user. - * The entries are located on the call stack so no need to free memory. - * Note insert() remove() must always match to properly clear the stack. - */ -static struct dep_stack { - struct dep_stack *prev, *next; - struct symbol *sym; - struct property *prop; - struct expr **expr; -} *check_top; - -static void dep_stack_insert(struct dep_stack *stack, struct symbol *sym) -{ - memset(stack, 0, sizeof(*stack)); - if (check_top) - check_top->next = stack; - stack->prev = check_top; - stack->sym = sym; - check_top = stack; -} - -static void dep_stack_remove(void) -{ - check_top = check_top->prev; - if (check_top) - check_top->next = NULL; -} - -/* - * Called when we have detected a recursive dependency. - * check_top point to the top of the stact so we use - * the ->prev pointer to locate the bottom of the stack. - */ -static void sym_check_print_recursive(struct symbol *last_sym) -{ - struct dep_stack *stack; - struct symbol *sym, *next_sym; - struct menu *menu = NULL; - struct property *prop; - struct dep_stack cv_stack; - - if (sym_is_choice_value(last_sym)) { - dep_stack_insert(&cv_stack, last_sym); - last_sym = prop_get_symbol(sym_get_choice_prop(last_sym)); - } - - for (stack = check_top; stack != NULL; stack = stack->prev) - if (stack->sym == last_sym) - break; - if (!stack) { - fprintf(stderr, "unexpected recursive dependency error\n"); - return; - } - - for (; stack; stack = stack->next) { - sym = stack->sym; - next_sym = stack->next ? stack->next->sym : last_sym; - prop = stack->prop; - if (prop == NULL) - prop = stack->sym->prop; - - /* for choice values find the menu entry (used below) */ - if (sym_is_choice(sym) || sym_is_choice_value(sym)) { - for (prop = sym->prop; prop; prop = prop->next) { - menu = prop->menu; - if (prop->menu) - break; - } - } - if (stack->sym == last_sym) - fprintf(stderr, "%s:%d:error: recursive dependency detected!\n", - prop->file->name, prop->lineno); - - if (sym_is_choice(sym)) { - fprintf(stderr, "%s:%d:\tchoice %s contains symbol %s\n", - menu->file->name, menu->lineno, - sym->name ? sym->name : "", - next_sym->name ? next_sym->name : ""); - } else if (sym_is_choice_value(sym)) { - fprintf(stderr, "%s:%d:\tsymbol %s is part of choice %s\n", - menu->file->name, menu->lineno, - sym->name ? sym->name : "", - next_sym->name ? next_sym->name : ""); - } else if (stack->expr == &sym->dir_dep.expr) { - fprintf(stderr, "%s:%d:\tsymbol %s depends on %s\n", - prop->file->name, prop->lineno, - sym->name ? sym->name : "", - next_sym->name ? next_sym->name : ""); - } else if (stack->expr == &sym->rev_dep.expr) { - fprintf(stderr, "%s:%d:\tsymbol %s is selected by %s\n", - prop->file->name, prop->lineno, - sym->name ? sym->name : "", - next_sym->name ? next_sym->name : ""); - } else if (stack->expr == &sym->implied.expr) { - fprintf(stderr, "%s:%d:\tsymbol %s is implied by %s\n", - prop->file->name, prop->lineno, - sym->name ? sym->name : "", - next_sym->name ? next_sym->name : ""); - } else if (stack->expr) { - fprintf(stderr, "%s:%d:\tsymbol %s %s value contains %s\n", - prop->file->name, prop->lineno, - sym->name ? sym->name : "", - prop_get_type_name(prop->type), - next_sym->name ? next_sym->name : ""); - } else { - fprintf(stderr, "%s:%d:\tsymbol %s %s is visible depending on %s\n", - prop->file->name, prop->lineno, - sym->name ? sym->name : "", - prop_get_type_name(prop->type), - next_sym->name ? next_sym->name : ""); - } - } - - fprintf(stderr, - "For a resolution refer to Documentation/kbuild/kconfig-language.rst\n" - "subsection \"Kconfig recursive dependency limitations\"\n" - "\n"); - - if (check_top == &cv_stack) - dep_stack_remove(); -} - -static struct symbol *sym_check_expr_deps(struct expr *e) -{ - struct symbol *sym; - - if (!e) - return NULL; - switch (e->type) { - case E_OR: - case E_AND: - sym = sym_check_expr_deps(e->left.expr); - if (sym) - return sym; - return sym_check_expr_deps(e->right.expr); - case E_NOT: - return sym_check_expr_deps(e->left.expr); - case E_EQUAL: - case E_GEQ: - case E_GTH: - case E_LEQ: - case E_LTH: - case E_UNEQUAL: - sym = sym_check_deps(e->left.sym); - if (sym) - return sym; - return sym_check_deps(e->right.sym); - case E_SYMBOL: - return sym_check_deps(e->left.sym); - default: - break; - } - fprintf(stderr, "Oops! How to check %d?\n", e->type); - return NULL; -} - -/* return NULL when dependencies are OK */ -static struct symbol *sym_check_sym_deps(struct symbol *sym) -{ - struct symbol *sym2; - struct property *prop; - struct dep_stack stack; - - dep_stack_insert(&stack, sym); - - stack.expr = &sym->dir_dep.expr; - sym2 = sym_check_expr_deps(sym->dir_dep.expr); - if (sym2) - goto out; - - stack.expr = &sym->rev_dep.expr; - sym2 = sym_check_expr_deps(sym->rev_dep.expr); - if (sym2) - goto out; - - stack.expr = &sym->implied.expr; - sym2 = sym_check_expr_deps(sym->implied.expr); - if (sym2) - goto out; - - stack.expr = NULL; - - for (prop = sym->prop; prop; prop = prop->next) { - if (prop->type == P_CHOICE || prop->type == P_SELECT || - prop->type == P_IMPLY) - continue; - stack.prop = prop; - sym2 = sym_check_expr_deps(prop->visible.expr); - if (sym2) - break; - if (prop->type != P_DEFAULT || sym_is_choice(sym)) - continue; - stack.expr = &prop->expr; - sym2 = sym_check_expr_deps(prop->expr); - if (sym2) - break; - stack.expr = NULL; - } - -out: - dep_stack_remove(); - - return sym2; -} - -static struct symbol *sym_check_choice_deps(struct symbol *choice) -{ - struct symbol *sym, *sym2; - struct property *prop; - struct expr *e; - struct dep_stack stack; - - dep_stack_insert(&stack, choice); - - prop = sym_get_choice_prop(choice); - expr_list_for_each_sym(prop->expr, e, sym) - sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); - - choice->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); - sym2 = sym_check_sym_deps(choice); - choice->flags &= ~SYMBOL_CHECK; - if (sym2) - goto out; - - expr_list_for_each_sym(prop->expr, e, sym) { - sym2 = sym_check_sym_deps(sym); - if (sym2) - break; - } -out: - expr_list_for_each_sym(prop->expr, e, sym) - sym->flags &= ~SYMBOL_CHECK; - - if (sym2 && sym_is_choice_value(sym2) && - prop_get_symbol(sym_get_choice_prop(sym2)) == choice) - sym2 = choice; - - dep_stack_remove(); - - return sym2; -} - -struct symbol *sym_check_deps(struct symbol *sym) -{ - struct symbol *sym2; - struct property *prop; - - if (sym->flags & SYMBOL_CHECK) { - sym_check_print_recursive(sym); - return sym; - } - if (sym->flags & SYMBOL_CHECKED) - return NULL; - - if (sym_is_choice_value(sym)) { - struct dep_stack stack; - - /* for choice groups start the check with main choice symbol */ - dep_stack_insert(&stack, sym); - prop = sym_get_choice_prop(sym); - sym2 = sym_check_deps(prop_get_symbol(prop)); - dep_stack_remove(); - } else if (sym_is_choice(sym)) { - sym2 = sym_check_choice_deps(sym); - } else { - sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED); - sym2 = sym_check_sym_deps(sym); - sym->flags &= ~SYMBOL_CHECK; - } - - return sym2; -} - -struct symbol *prop_get_symbol(struct property *prop) -{ - if (prop->expr && (prop->expr->type == E_SYMBOL || - prop->expr->type == E_LIST)) - return prop->expr->left.sym; - return NULL; -} - -const char *prop_get_type_name(enum prop_type type) -{ - switch (type) { - case P_PROMPT: - return "prompt"; - case P_COMMENT: - return "comment"; - case P_MENU: - return "menu"; - case P_DEFAULT: - return "default"; - case P_CHOICE: - return "choice"; - case P_SELECT: - return "select"; - case P_IMPLY: - return "imply"; - case P_RANGE: - return "range"; - case P_SYMBOL: - return "symbol"; - case P_UNKNOWN: - break; - } - return "unknown"; -} diff --git a/libraries/NEMU/tools/kconfig/util.c b/libraries/NEMU/tools/kconfig/util.c deleted file mode 100644 index 2958539..0000000 --- a/libraries/NEMU/tools/kconfig/util.c +++ /dev/null @@ -1,129 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Copyright (C) 2002-2005 Roman Zippel - * Copyright (C) 2002-2005 Sam Ravnborg - */ - -#include -#include -#include -#include "lkc.h" - -/* file already present in list? If not add it */ -struct file *file_lookup(const char *name) -{ - struct file *file; - - for (file = file_list; file; file = file->next) { - if (!strcmp(name, file->name)) { - return file; - } - } - - file = xmalloc(sizeof(*file)); - memset(file, 0, sizeof(*file)); - file->name = xstrdup(name); - file->next = file_list; - file_list = file; - return file; -} - -/* Allocate initial growable string */ -struct gstr str_new(void) -{ - struct gstr gs; - gs.s = xmalloc(sizeof(char) * 64); - gs.len = 64; - gs.max_width = 0; - strcpy(gs.s, "\0"); - return gs; -} - -/* Free storage for growable string */ -void str_free(struct gstr *gs) -{ - if (gs->s) - free(gs->s); - gs->s = NULL; - gs->len = 0; -} - -/* Append to growable string */ -void str_append(struct gstr *gs, const char *s) -{ - size_t l; - if (s) { - l = strlen(gs->s) + strlen(s) + 1; - if (l > gs->len) { - gs->s = xrealloc(gs->s, l); - gs->len = l; - } - strcat(gs->s, s); - } -} - -/* Append printf formatted string to growable string */ -void str_printf(struct gstr *gs, const char *fmt, ...) -{ - va_list ap; - char s[10000]; /* big enough... */ - va_start(ap, fmt); - vsnprintf(s, sizeof(s), fmt, ap); - str_append(gs, s); - va_end(ap); -} - -/* Retrieve value of growable string */ -const char *str_get(struct gstr *gs) -{ - return gs->s; -} - -void *xmalloc(size_t size) -{ - void *p = malloc(size); - if (p) - return p; - fprintf(stderr, "Out of memory.\n"); - exit(1); -} - -void *xcalloc(size_t nmemb, size_t size) -{ - void *p = calloc(nmemb, size); - if (p) - return p; - fprintf(stderr, "Out of memory.\n"); - exit(1); -} - -void *xrealloc(void *p, size_t size) -{ - p = realloc(p, size); - if (p) - return p; - fprintf(stderr, "Out of memory.\n"); - exit(1); -} - -char *xstrdup(const char *s) -{ - char *p; - - p = strdup(s); - if (p) - return p; - fprintf(stderr, "Out of memory.\n"); - exit(1); -} - -char *xstrndup(const char *s, size_t n) -{ - char *p; - - p = strndup(s, n); - if (p) - return p; - fprintf(stderr, "Out of memory.\n"); - exit(1); -} diff --git a/libraries/NEMU/tools/kvm-diff/Makefile b/libraries/NEMU/tools/kvm-diff/Makefile deleted file mode 100644 index 2256fab..0000000 --- a/libraries/NEMU/tools/kvm-diff/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -NAME = kvm -SRCS = $(shell find src/ -name "*.c") - -SHARE = 1 -INC_DIR += $(NEMU_HOME)/include $(NEMU_HOME)/src/isa/x86/include -ISA = x86 - -include $(NEMU_HOME)/scripts/isa.mk -include $(NEMU_HOME)/scripts/build.mk diff --git a/libraries/NEMU/tools/kvm-diff/include/paddr.h b/libraries/NEMU/tools/kvm-diff/include/paddr.h deleted file mode 100644 index d3dcfa7..0000000 --- a/libraries/NEMU/tools/kvm-diff/include/paddr.h +++ /dev/null @@ -1 +0,0 @@ -// this is an empty file to avoid compile error diff --git a/libraries/NEMU/tools/kvm-diff/src/kvm.c b/libraries/NEMU/tools/kvm-diff/src/kvm.c deleted file mode 100644 index 5b292c4..0000000 --- a/libraries/NEMU/tools/kvm-diff/src/kvm.c +++ /dev/null @@ -1,401 +0,0 @@ -// from NEMU -#include -#include - -#include - -#include -#include -#include -#include -#include - -/* CR0 bits */ -#define CR0_PE 1u -#define CR0_PG (1u << 31) - -#define RFLAGS_ID (1u << 21) -#define RFLAGS_AC (1u << 18) -#define RFLAGS_RF (1u << 16) -#define RFLAGS_TF (1u << 8) -#define RFLAGS_AF (1u << 4) -#define RFLAGS_FIX_MASK (RFLAGS_ID | RFLAGS_AC | RFLAGS_RF | RFLAGS_TF | RFLAGS_AF) - -struct vm { - int sys_fd; - int fd; - uint8_t *mem; - uint8_t *mmio; -}; - -struct vcpu { - int fd; - struct kvm_run *kvm_run; - int int_wp_state; - int has_error_code; - uint32_t entry; -}; - -enum { - STATE_IDLE, // if encounter an int instruction, then set watchpoint - STATE_INT_INSTR, // if hit the watchpoint, then delete the watchpoint - STATE_IRET_INSTR,// if hit the watchpoint, then delete the watchpoint -}; - -static struct vm vm; -static struct vcpu vcpu; - -// This should be called everytime after KVM_SET_REGS. -// It seems that KVM_SET_REGS will clean the state of single step. -static void kvm_set_step_mode(bool watch, uint32_t watch_addr) { - struct kvm_guest_debug debug = {}; - debug.control = KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_USE_HW_BP; - debug.arch.debugreg[0] = watch_addr; - debug.arch.debugreg[7] = (watch ? 0x1 : 0x0); // watch instruction fetch at `watch_addr` - if (ioctl(vcpu.fd, KVM_SET_GUEST_DEBUG, &debug) < 0) { - perror("KVM_SET_GUEST_DEBUG"); - assert(0); - } -} - -static inline void kvm_getregs(struct kvm_regs *r) { - if (ioctl(vcpu.fd, KVM_GET_REGS, r) < 0) { - perror("KVM_GET_REGS"); - assert(0); - } -} - -static void kvm_setregs(const struct kvm_regs *r) { - if (ioctl(vcpu.fd, KVM_SET_REGS, r) < 0) { - perror("KVM_SET_REGS"); - assert(0); - } - kvm_set_step_mode(false, 0); -} - -static void kvm_getsregs(struct kvm_sregs *r) { - if (ioctl(vcpu.fd, KVM_GET_SREGS, r) < 0) { - perror("KVM_GET_SREGS"); - assert(0); - } -} - -static void kvm_setsregs(const struct kvm_sregs *r) { - if (ioctl(vcpu.fd, KVM_SET_SREGS, r) < 0) { - perror("KVM_SET_SREGS"); - assert(0); - } -} - -static void* create_mem(int slot, uintptr_t base, size_t mem_size) { - void *mem = mmap(NULL, mem_size, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0); - if (mem == MAP_FAILED) { - perror("mmap mem"); - assert(0); - } - - madvise(mem, mem_size, MADV_MERGEABLE); - - struct kvm_userspace_memory_region memreg; - memreg.slot = slot; - memreg.flags = 0; - memreg.guest_phys_addr = base; - memreg.memory_size = mem_size; - memreg.userspace_addr = (unsigned long)mem; - if (ioctl(vm.fd, KVM_SET_USER_MEMORY_REGION, &memreg) < 0) { - perror("KVM_SET_USER_MEMORY_REGION"); - assert(0); - } - return mem; -} - -static void vm_init(size_t mem_size) { - int api_ver; - - vm.sys_fd = open("/dev/kvm", O_RDWR); - if (vm.sys_fd < 0) { - perror("open /dev/kvm"); - assert(0); - } - - api_ver = ioctl(vm.sys_fd, KVM_GET_API_VERSION, 0); - if (api_ver < 0) { - perror("KVM_GET_API_VERSION"); - assert(0); - } - - if (api_ver != KVM_API_VERSION) { - fprintf(stderr, "Got KVM api version %d, expected %d\n", - api_ver, KVM_API_VERSION); - assert(0); - } - - vm.fd = ioctl(vm.sys_fd, KVM_CREATE_VM, 0); - if (vm.fd < 0) { - perror("KVM_CREATE_VM"); - assert(0); - } - - if (ioctl(vm.fd, KVM_SET_TSS_ADDR, 0xfffbd000) < 0) { - perror("KVM_SET_TSS_ADDR"); - assert(0); - } - - vm.mem = create_mem(0, 0, mem_size); - vm.mmio = create_mem(1, 0xa1000000, 0x1000); -} - -static void vcpu_init() { - int vcpu_mmap_size; - - vcpu.fd = ioctl(vm.fd, KVM_CREATE_VCPU, 0); - if (vcpu.fd < 0) { - perror("KVM_CREATE_VCPU"); - assert(0); - } - - vcpu_mmap_size = ioctl(vm.sys_fd, KVM_GET_VCPU_MMAP_SIZE, 0); - if (vcpu_mmap_size <= 0) { - perror("KVM_GET_VCPU_MMAP_SIZE"); - assert(0); - } - - vcpu.kvm_run = mmap(NULL, vcpu_mmap_size, PROT_READ | PROT_WRITE, - MAP_SHARED, vcpu.fd, 0); - if (vcpu.kvm_run == MAP_FAILED) { - perror("mmap kvm_run"); - assert(0); - } - - vcpu.kvm_run->kvm_valid_regs = KVM_SYNC_X86_REGS | KVM_SYNC_X86_SREGS; - vcpu.int_wp_state = STATE_IDLE; -} - -static const uint8_t mbr[] = { - // start32: - 0x0f, 0x01, 0x15, 0x28, 0x7c, 0x00, 0x00, // lgdtl 0x7c28 - 0xea, 0x0e, 0x7c, 0x00, 0x00, 0x08, 0x00, // ljmp $0x8, 0x7c0e - - // here: - 0xeb, 0xfe, // jmp here - - // GDT - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, - - // GDT descriptor - 0x17, 0x00, 0x10, 0x7c, 0x00, 0x00 -}; - -static void setup_protected_mode(struct kvm_sregs *sregs) { - struct kvm_segment seg = { - .base = 0, - .limit = 0xffffffff, - .selector = 1 << 3, - .present = 1, - .type = 11, /* Code: execute, read, accessed */ - .dpl = 0, - .db = 1, - .s = 1, /* Code/data */ - .l = 0, - .g = 1, /* 4KB granularity */ - }; - - sregs->cr0 |= CR0_PE; /* enter protected mode */ - - sregs->cs = seg; - - seg.type = 3; /* Data: read/write, accessed */ - seg.selector = 2 << 3; - sregs->ds = sregs->es = sregs->fs = sregs->gs = sregs->ss = seg; -} - -static inline uint64_t va2pa(uint64_t va) { - if (vcpu.kvm_run->s.regs.sregs.cr0 & CR0_PG) { - struct kvm_translation t = { .linear_address = va }; - int ret = ioctl(vcpu.fd, KVM_TRANSLATE, &t); - assert(ret == 0); - return t.valid ? t.physical_address : -1ull; - } - return va; -} - -static inline int patching() { - // patching for special instructions - uint32_t pc = va2pa(vcpu.kvm_run->s.regs.regs.rip); - if (pc == 0xffffffff) return 0; - if (vm.mem[pc] == 0x9c) { // pushf - if (vcpu.int_wp_state == STATE_INT_INSTR) return 0; - vcpu.kvm_run->s.regs.regs.rsp -= 4; - uint32_t esp = va2pa(vcpu.kvm_run->s.regs.regs.rsp); - *(uint32_t *)(vm.mem + esp) = vcpu.kvm_run->s.regs.regs.rflags & ~RFLAGS_FIX_MASK; - vcpu.kvm_run->s.regs.regs.rflags |= RFLAGS_TF; - vcpu.kvm_run->s.regs.regs.rip ++; - vcpu.kvm_run->kvm_dirty_regs = KVM_SYNC_X86_REGS; - return 1; - } - else if (vm.mem[pc] == 0x9d) { // popf - if (vcpu.int_wp_state == STATE_INT_INSTR) return 0; - uint32_t esp = va2pa(vcpu.kvm_run->s.regs.regs.rsp); - vcpu.kvm_run->s.regs.regs.rflags = *(uint32_t *)(vm.mem + esp) | RFLAGS_TF | 2; - vcpu.kvm_run->s.regs.regs.rsp += 4; - vcpu.kvm_run->s.regs.regs.rip ++; - vcpu.kvm_run->kvm_dirty_regs = KVM_SYNC_X86_REGS; - return 1; - } - else if (vm.mem[pc] == 0xcf) { // iret - uint32_t ret_addr = va2pa(vcpu.kvm_run->s.regs.regs.rsp); - uint32_t eip = *(uint32_t *)(vm.mem + ret_addr); - vcpu.entry = eip; - kvm_set_step_mode(true, eip); - vcpu.int_wp_state = STATE_IRET_INSTR; - return 0; - } - return 0; -} - -static inline void fix_push_sreg() { - uint32_t esp = va2pa(vcpu.kvm_run->s.regs.regs.rsp); - *(uint32_t *)(vm.mem + esp) &= 0x0000ffff; -} - -static inline void patching_after(uint64_t last_pc) { - uint32_t pc = va2pa(last_pc); - if (pc == 0xffffffff) return; - uint8_t opcode = vm.mem[pc]; - if (opcode == 0x1e || opcode == 0x06) { // push %ds/%es - fix_push_sreg(); - assert(vcpu.kvm_run->s.regs.regs.rip == last_pc + 1); - } - else if (opcode == 0x0f) { - uint8_t opcode2 = vm.mem[pc + 1]; - if (opcode2 == 0xa0) { // push %fs - fix_push_sreg(); - assert(vcpu.kvm_run->s.regs.regs.rip == last_pc + 2); - } - } -} - -static void kvm_exec(uint64_t n) { - for (; n > 0; n --) { - if (patching()) continue; - - uint64_t pc = vcpu.kvm_run->s.regs.regs.rip; - if (ioctl(vcpu.fd, KVM_RUN, 0) < 0) { - if (errno == EINTR) { - n ++; - continue; - } - perror("KVM_RUN"); - assert(0); - } - - if (vcpu.kvm_run->exit_reason != KVM_EXIT_DEBUG) { - if (vcpu.kvm_run->exit_reason == KVM_EXIT_HLT) return; - fprintf(stderr, "Got exit_reason %d at pc = 0x%llx, expected KVM_EXIT_DEBUG (%d)\n", - vcpu.kvm_run->exit_reason, vcpu.kvm_run->s.regs.regs.rip, KVM_EXIT_DEBUG); - assert(0); - } else { - patching_after(pc); - if (vcpu.int_wp_state == STATE_INT_INSTR) { - uint32_t eflag_offset = 8 + (vcpu.has_error_code ? 4 : 0); - uint32_t eflag_addr = va2pa(vcpu.kvm_run->s.regs.regs.rsp + eflag_offset); - *(uint32_t *)(vm.mem + eflag_addr) &= ~RFLAGS_FIX_MASK; - - Assert(vcpu.entry == vcpu.kvm_run->debug.arch.pc, - "entry not match, right = 0x%llx, wrong = 0x%x", vcpu.kvm_run->debug.arch.pc, vcpu.entry); - kvm_set_step_mode(false, 0); - vcpu.int_wp_state = STATE_IDLE; - //Log("exception = %d, pc = %llx, dr6 = %llx, dr7 = %llx", vcpu.kvm_run->debug.arch.exception, - // vcpu.kvm_run->debug.arch.pc, vcpu.kvm_run->debug.arch.dr6, vcpu.kvm_run->debug.arch.dr7); - } else if (vcpu.int_wp_state == STATE_IRET_INSTR) { - Assert(vcpu.entry == vcpu.kvm_run->debug.arch.pc, - "entry not match, right = 0x%llx, wrong = 0x%x", vcpu.kvm_run->debug.arch.pc, vcpu.entry); - kvm_set_step_mode(false, 0); - vcpu.int_wp_state = STATE_IDLE; - } - } - } -} - -static void run_protected_mode() { - struct kvm_sregs sregs; - kvm_getsregs(&sregs); - setup_protected_mode(&sregs); - kvm_setsregs(&sregs); - - struct kvm_regs regs; - memset(®s, 0, sizeof(regs)); - regs.rflags = 2; - regs.rip = 0x7c00; - // this will also set KVM_GUESTDBG_ENABLE - kvm_setregs(®s); - - memcpy(vm.mem + 0x7c00, mbr, sizeof(mbr)); - // run enough instructions to load GDT - kvm_exec(10); -} - -void difftest_memcpy(paddr_t addr, void *buf, size_t n, bool direction) { - if (direction == DIFFTEST_TO_REF) memcpy(vm.mem + addr, buf, n); - else memcpy(buf, vm.mem + addr, n); -} - -void difftest_regcpy(void *r, bool direction) { - struct kvm_regs *ref = &(vcpu.kvm_run->s.regs.regs); - x86_CPU_state *x86 = r; - if (direction == DIFFTEST_TO_REF) { - ref->rax = x86->eax; - ref->rbx = x86->ebx; - ref->rcx = x86->ecx; - ref->rdx = x86->edx; - ref->rsp = x86->esp; - ref->rbp = x86->ebp; - ref->rsi = x86->esi; - ref->rdi = x86->edi; - ref->rip = x86->pc; - ref->rflags |= RFLAGS_TF; - vcpu.kvm_run->kvm_dirty_regs = KVM_SYNC_X86_REGS; - } else { - x86->eax = ref->rax; - x86->ebx = ref->rbx; - x86->ecx = ref->rcx; - x86->edx = ref->rdx; - x86->esp = ref->rsp; - x86->ebp = ref->rbp; - x86->esi = ref->rsi; - x86->edi = ref->rdi; - x86->pc = ref->rip; - } -} - -void difftest_exec(uint64_t n) { - kvm_exec(n); -} - -void difftest_raise_intr(word_t NO) { - uint32_t pgate_vaddr = vcpu.kvm_run->s.regs.sregs.idt.base + NO * 8; - uint32_t pgate = va2pa(pgate_vaddr); - // assume code.base = 0 - uint32_t entry = vm.mem[pgate] | (vm.mem[pgate + 1] << 8) | - (vm.mem[pgate + 6] << 16) | (vm.mem[pgate + 7] << 24); - kvm_set_step_mode(true, entry); - vcpu.int_wp_state = STATE_INT_INSTR; - vcpu.has_error_code = (NO == 14); - vcpu.entry = entry; - - if (NO == 48) { - // inject timer interrupt - struct kvm_interrupt intr = { .irq = NO }; - int ret = ioctl(vcpu.fd, KVM_INTERRUPT, &intr); - assert(ret == 0); - } -} - -void difftest_init(int port) { - vm_init(CONFIG_MSIZE); - vcpu_init(); - run_protected_mode(); -} diff --git a/libraries/NEMU/tools/qemu-dl-diff/Makefile b/libraries/NEMU/tools/qemu-dl-diff/Makefile deleted file mode 100644 index aac201f..0000000 --- a/libraries/NEMU/tools/qemu-dl-diff/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -NAME = qemu -SRCS = $(shell find src/ -name "*.c" | grep -v "isa") -SRCS += $(shell find src/isa/$(ISA) -name "*.c") - -SHARE = 1 -CFLAGS += -DNEMU_HOME=$(NEMU_HOME) - -include $(NEMU_HOME)/scripts/isa.mk -include $(NEMU_HOME)/scripts/build.mk diff --git a/libraries/NEMU/tools/qemu-dl-diff/include/common.h b/libraries/NEMU/tools/qemu-dl-diff/include/common.h deleted file mode 100644 index b4a3e89..0000000 --- a/libraries/NEMU/tools/qemu-dl-diff/include/common.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef __COMMON_H__ -#define __COMMON_H__ - -#include -#include -#include -#include -#include -#include -#include - -typedef uint32_t paddr_t; - -#endif diff --git a/libraries/NEMU/tools/qemu-dl-diff/src/diff-test.c b/libraries/NEMU/tools/qemu-dl-diff/src/diff-test.c deleted file mode 100644 index d458e28..0000000 --- a/libraries/NEMU/tools/qemu-dl-diff/src/diff-test.c +++ /dev/null @@ -1,100 +0,0 @@ -#include -#include -#include -#include - -static void (*qemu_cpu_physical_memory_rw)(long addr, uint8_t *buf, int len, int is_write) = NULL; -static int (*qemu_gdb_write_register)(void *cpu, uint8_t *buf, int reg) = NULL; -static int (*qemu_gdb_read_register)(void *cpu, uint8_t *buf, int reg) = NULL; -static int (*qemu_cpu_exec)(void *) = NULL; -static void *qemu_cpu = NULL; - -extern char *isa_qemu_argv[]; -void isa_raise_intr(uint64_t NO); -void init_isa(); -void dl_load(char *argv[]); - -void difftest_memcpy(paddr_t addr, void *buf, size_t n, bool direction) { -#ifdef __ISA_mips32__ - // It seems that qemu-system-mips treat 0x80000000 as a virtual address. - // We should do the subtraction to get the address - // which qemu-system-mips considers physical. - addr -= 0x80000000; -#endif - int is_write = direction == DIFFTEST_TO_REF ? true : false; - qemu_cpu_physical_memory_rw(addr, buf, n, is_write); -} - -void difftest_regcpy(void *dut, bool direction) { - int (*fn)(void *cpu, uint8_t *buf, int reg) = - (direction == DIFFTEST_TO_REF ? qemu_gdb_write_register : qemu_gdb_read_register); - int total_size = DIFFTEST_REG_SIZE; - int i = 0; - while (total_size > 0) { - int reg_size = fn(qemu_cpu, dut, i); - dut += reg_size; - total_size -= reg_size; - i ++; - } -} - -void difftest_raise_intr(uint64_t NO) { - isa_raise_intr(NO); -} - -#define EXCP_INTERRUPT 0x10000 -#define EXCP_HLT 0x10001 -#define EXCP_DEBUG 0x10002 -#define EXCP_ATOMIC 0x10005 -void difftest_exec(uint64_t n) { - for (; n > 0; n --) { - int ret = qemu_cpu_exec(qemu_cpu); - switch (ret) { - case EXCP_ATOMIC: - case EXCP_INTERRUPT: n ++; // fall through - case EXCP_HLT: - case EXCP_DEBUG: break; - default: assert(0); - } - } -} - -static jmp_buf jbuf = {}; - -void difftest_init(int port) { - if (setjmp(jbuf) == 0) { - // first path - dl_load(isa_qemu_argv); // never return - } -} - -void* get_loaded_addr(char *sym, int type); - -void difftest_init_late() { - qemu_cpu_physical_memory_rw = get_loaded_addr("cpu_physical_memory_rw", STT_FUNC); - qemu_gdb_write_register = get_loaded_addr("gdb_write_register", STT_FUNC); - qemu_gdb_read_register = get_loaded_addr("gdb_read_register", STT_FUNC); - qemu_cpu_exec = get_loaded_addr("cpu_exec", STT_FUNC); - - int (*qemu_cpu_single_step)(void *cpu, int enabled) = get_loaded_addr("cpu_single_step", STT_FUNC); - void (*qemu_mutex_unlock_iothread)() = get_loaded_addr("qemu_mutex_unlock_iothread", STT_FUNC); - void* (*qemu_get_cpu)(int) = get_loaded_addr("qemu_get_cpu", STT_FUNC); - int qemu_sstep_flags = *(int *)get_loaded_addr("sstep_flags", STT_OBJECT); - - qemu_cpu = qemu_get_cpu(0); - assert(qemu_cpu); - qemu_cpu_single_step(qemu_cpu, qemu_sstep_flags); - qemu_mutex_unlock_iothread(); - - init_isa(); - - longjmp(jbuf, 1); -} - -void qemu_write_reg(void *val, int idx) { - qemu_gdb_write_register(qemu_cpu, val, idx); -} - -void* qemu_get_cpu() { - return qemu_cpu; -} diff --git a/libraries/NEMU/tools/qemu-dl-diff/src/hack.c b/libraries/NEMU/tools/qemu-dl-diff/src/hack.c deleted file mode 100644 index cdd1eb1..0000000 --- a/libraries/NEMU/tools/qemu-dl-diff/src/hack.c +++ /dev/null @@ -1,311 +0,0 @@ -#define _GNU_SOURCE -#include -#include -#include -#include - -#define ALIGN_UP(a, sz) ((((uintptr_t)a) + (sz) - 1) & ~((sz) - 1)) - -static char *strtab = NULL; -static int strtab_size = 0; -static Elf64_Sym *symtab = NULL; -static int symtab_nr_entry = 0; -static uintptr_t elf_base = 0; -static uintptr_t qemu_tls_size = 0; - -static void mprotect_page(uintptr_t addr, int prot) { - addr &= ~0xfffl; - int ret = mprotect((void *)addr, 4096, prot); - assert(ret == 0); -} - -typedef struct { - char *name; - uintptr_t base; - uintptr_t tls_offset_diff; - int next_tls_modid; - char *debug_elf_path; -} Info; - -typedef int (*ELF_sh_handler)(void *buf, int size, void **); -typedef struct { - char *name; - ELF_sh_handler h; - void *userdata; -} ELF_sh_callback; - -static int build_symtab(void *buf, int size, void **userdata) { - assert(size > 0); - symtab = buf; - symtab_nr_entry = size / sizeof(Elf64_Sym); - return 0; -} - -static int build_strtab(void *buf, int size, void **userdata) { - assert(size > 0); - strtab = buf; - strtab_size = size; - return 0; -} - -static void ELF_sh_foreach(char *filename, ELF_sh_callback *cb_list) { - FILE *fp = fopen(filename, "r"); - assert(fp != NULL); - - Elf64_Ehdr elf; - fread(&elf, sizeof(elf), 1, fp); - assert(elf.e_ident[EI_MAG0] == ELFMAG0); - assert(elf.e_ident[EI_MAG1] == ELFMAG1); - assert(elf.e_ident[EI_MAG2] == ELFMAG2); - assert(elf.e_ident[EI_MAG3] == ELFMAG3); - - Elf64_Shdr *sh = NULL; - int shdr_size = sizeof(*sh) * elf.e_shnum; - sh = malloc(shdr_size); - assert(sh); - fseek(fp, elf.e_shoff, SEEK_SET); - int ret = fread(sh, shdr_size, 1, fp); - assert(ret == 1); - - int shstrtab_size = sh[elf.e_shstrndx].sh_size; - assert(shstrtab_size > 0); - char *shstrtab = malloc(shstrtab_size); - assert(shstrtab); - fseek(fp, sh[elf.e_shstrndx].sh_offset, SEEK_SET); - ret = fread(shstrtab, sh[elf.e_shstrndx].sh_size, 1, fp); - assert(ret == 1); - - int i; - for (i = 0; i < elf.e_shnum; i ++) { - ELF_sh_callback *cb; - for (cb = cb_list; cb->name != NULL; cb ++) { - if (strcmp(shstrtab + sh[i].sh_name, cb->name) == 0) { - void *buf = malloc(sh[i].sh_size); - assert(buf); - fseek(fp, sh[i].sh_offset, SEEK_SET); - int ret = fread(buf, sh[i].sh_size, 1, fp); - assert(ret == 1); - int needfree = cb->h(buf, sh[i].sh_size, &cb->userdata); - if (needfree) free(buf); - } - } - } - free(shstrtab); - free(sh); - fclose(fp); -} - -static void parse_debug_elf(char *filename) { - ELF_sh_callback cb_list[3] = { - { .name = ".symtab", .h = build_symtab }, - { .name = ".strtab", .h = build_strtab }, - { .name = NULL}, - }; - ELF_sh_foreach(filename, cb_list); - assert(symtab != NULL && strtab != NULL); -} - -static int fix_tls_offset(void *buf, int size, void **userdata) { - Info *info = *userdata; - Elf64_Rela *rela_dyn = NULL; - int nr_rela_dyn = 0; - - Elf64_Dyn *dyn = buf; - int nr_dyn = size / sizeof(dyn[0]); - int i; - for (i = 0; i < nr_dyn; i ++ ) { - switch (dyn[i].d_tag) { - case DT_RELA: rela_dyn = (void *)info->base + dyn[i].d_un.d_ptr; break; - case DT_RELASZ: nr_rela_dyn = dyn[i].d_un.d_val / sizeof(rela_dyn[0]); break; - case DT_RELAENT: assert(dyn[i].d_un.d_val == sizeof(rela_dyn[0])); break; - } - } - - for (i = 0; i < nr_rela_dyn; i ++) { - if (ELF64_R_TYPE(rela_dyn[i].r_info) == R_X86_64_TPOFF64) { - uintptr_t ptr = info->base + rela_dyn[i].r_offset; - mprotect_page(ptr, PROT_READ|PROT_WRITE); - *(uintptr_t *)ptr += info->tls_offset_diff; - mprotect_page(ptr, PROT_READ); - } - } - return 1; -} - -static int get_build_id(void *buf, int size, void **userdata) { - assert(size > 0); - void *name, *desc; - Elf64_Nhdr *note = buf; - name = note->n_namesz == 0 ? NULL : buf + sizeof(*note); - assert(strcmp(name, ELF_NOTE_GNU) == 0); - assert(note->n_descsz == 160 / 8); // SHA1 is of 160-bit length - desc = note->n_descsz == 0 ? NULL : - buf + sizeof(*note) + ALIGN_UP(note->n_namesz, 4); - char *id = malloc(note->n_descsz + 1); // +1 for '\0' - memcpy(id, desc, note->n_descsz); - id[note->n_descsz] = '\0'; - *userdata = id; - return 1; -} - -static void parse_origin_elf(Info *info) { - ELF_sh_callback cb_list[3] = { - { .name = ".dynamic", fix_tls_offset }, - { .name = ".note.gnu.build-id", .h = get_build_id }, - { .name = NULL } - }; - - const char *prefix = "/usr/bin/"; - bool need_dbgsym = (strncmp(info->name, prefix, strlen(prefix)) == 0); - if (!need_dbgsym) { - cb_list[1].name = NULL; - } - - cb_list[0].userdata = info; - - ELF_sh_foreach(info->name, cb_list); - - if (!need_dbgsym) { - info->debug_elf_path = strdup(info->name); - return; - } - - uint8_t *id = cb_list[1].userdata; - char *path = malloc(512); - int len = sprintf(path, "/usr/lib/debug/.build-id/%02x/", id[0]); - int i; - for (i = 1; i < 20; i ++) { - len += sprintf(path + len, "%02x", id[i]); - } - strcat(path, ".debug"); - free(id); - info->debug_elf_path = path; -} - -static uintptr_t get_sym_addr(const char *sym, int type) { - int i; - for (i = 0; i < symtab_nr_entry; i ++) { - if ((strcmp(strtab + symtab[i].st_name, sym) == 0) && - ELF64_ST_TYPE(symtab[i].st_info) == type) { - return symtab[i].st_value; - } - } - printf("symbol not found: sym = %s\n", sym); - assert(0); -} - -void* get_loaded_addr(const char *sym, int type) { - return (void *)get_sym_addr(sym, type) + elf_base; -} - -static int callback(struct dl_phdr_info *info, size_t size, void *data) { - Info *arg = data; - int found = 0; - if (strcmp(info->dlpi_name, arg->name) == 0) { - arg->base = info->dlpi_addr; - found = 1; - } - - int i; - for (i = 0; i < info->dlpi_phnum; i ++) { - if (info->dlpi_phdr[i].p_type == PT_TLS) { - assert(info->dlpi_tls_modid == arg->next_tls_modid); - uintptr_t size = ALIGN_UP(info->dlpi_phdr[i].p_memsz, info->dlpi_phdr[i].p_align); - if (!found) { - arg->tls_offset_diff += size; - arg->next_tls_modid ++; - } else { - qemu_tls_size = size; - } - break; - } - } - return found; -} - -static inline void hack_fun_entry(const char *funname, const void *code, int len, bool protect) { - void *fun = get_loaded_addr(funname, STT_FUNC); - if (len) { - mprotect_page((uintptr_t)fun, PROT_READ | PROT_WRITE | PROT_EXEC); - memcpy(fun, code, len); - } - if (protect) mprotect_page((uintptr_t)fun, PROT_READ | PROT_EXEC); -} - -static void hack_entry() { - hack_fun_entry("main_loop_wait", NULL, 0, true); - - void *volatile **tcg_ctxs = (void *)get_loaded_addr("tcg_ctxs", STT_OBJECT); - uintptr_t tcg_ctx = get_sym_addr("tcg_ctx", STT_TLS); - void *tp; - asm volatile ("mov %%fs:0, %0" : "=r"(tp)); - void **this_tcg_ctx = tp - qemu_tls_size + tcg_ctx; - - while ((*tcg_ctxs)[0] == NULL) usleep(1); - *this_tcg_ctx = (*tcg_ctxs)[0]; - - extern void difftest_init_late(); - difftest_init_late(); -} - -static inline void hack_main_loop_wait() { - uint8_t code[] = { - 0x48, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // movabs $imm, %rax - 0xff, 0xe0, // jmp *%rax - }; - *(uintptr_t *)(code + 2) = (uintptr_t)hack_entry; - assert(sizeof(code) == 12); - hack_fun_entry("main_loop_wait", code, sizeof(code), false); -} - -static inline void hack_fun_return_void(char *funname) { - const uint8_t code[] = { 0xc3 }; // ret - assert(sizeof(code) == 1); - hack_fun_entry(funname, code, sizeof(code), true); -} - -void hack_fun_return_1(char *funname) { - const uint8_t code[] = { - 0xb8, 0x01, 0x00, 0x00, 0x00, // mov $0x1, %eax - 0xc3, // ret - }; - assert(sizeof(code) == 6); - hack_fun_entry(funname, code, sizeof(code), true); -} - -static void hack_prepare(Info *info) { - parse_origin_elf(info); - if (access(info->debug_elf_path, R_OK) != 0) { - printf("File '%s' does not exist!\n", info->debug_elf_path); - printf("Make sure you are using QEMU installed by apt-get, " - "and you have already installed the debug symbol package for qemu\n"); - assert(0); - } - - parse_debug_elf(info->debug_elf_path); - free(info->debug_elf_path); - - hack_main_loop_wait(); - hack_fun_return_1("qemu_cpu_is_self"); - hack_fun_return_void("os_setup_signal_handling"); -} - -void dl_load(char *argv[]) { - void *qemu = dlopen(argv[0], RTLD_LAZY); - assert(qemu); - int (*qemu_main)(int, char **, char **) = dlsym(qemu, "main"); - assert(qemu_main); - - Info info = { .name = argv[0], .next_tls_modid = 1, .tls_offset_diff = 0 }; - dl_iterate_phdr(callback, &info); - elf_base = info.base; - - hack_prepare(&info); - - char **p = argv; - while (*p != NULL) p ++; - int argc = p - argv; - extern char **environ; - qemu_main(argc, argv, environ); - assert(0); -} diff --git a/libraries/NEMU/tools/qemu-dl-diff/src/isa/mips32/init.c b/libraries/NEMU/tools/qemu-dl-diff/src/isa/mips32/init.c deleted file mode 100644 index a9f4dcf..0000000 --- a/libraries/NEMU/tools/qemu-dl-diff/src/isa/mips32/init.c +++ /dev/null @@ -1,14 +0,0 @@ -#include - -#define _str(x) # x -#define str(x) _str(x) - -char *isa_qemu_argv[] = { - "/usr/bin/qemu-system-mipsel", - "-nographic", "-S", "-serial", "none", "-monitor", "none", - "-machine", "mipssim", "-kernel", str(NEMU_HOME) "/resource/mips-elf/mips.dummy", - NULL -}; - -void init_isa() { -} diff --git a/libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv32/init.c b/libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv32/init.c deleted file mode 100644 index 6f9914b..0000000 --- a/libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv32/init.c +++ /dev/null @@ -1,51 +0,0 @@ -#include - -void difftest_memcpy(paddr_t addr, void *buf, size_t n, bool direction); -void difftest_exec(uint64_t n); -void qemu_write_reg(void *val, int idx); - -char *isa_qemu_argv[] = { - "/usr/bin/qemu-system-riscv32", - "-nographic", "-S", "-serial", "none", "-monitor", "none", - NULL -}; - -void init_isa() { - uint32_t initcode[] = { - 0x800006b7, // lui a3,0x8000 - 0x03c68693, // addi a3,a3,0x3c # 800003c - 0x30569073, // csrw mtvec,a3 - - 0xfff00513, // li a0, -1 - 0x01f00593, // li a1, 31 - 0x3b051073, // csrw pmpaddr0, a0 - 0x3a059073, // csrw pmpcfg0, a1 - - 0x000c1637, // lui a2,0xc2 # c0001 - 0x80060613, // addi a2,a2,-2048 # c0800 - 0x30061073, // csrw mstatus,a2 - - 0x00468693, // addi a3,a3,0x10 # 8000040 - 0x34169073, // csrw mepc,a3 - - 0x30251073, // csrw medeleg, a0 - - 0x30200073, // mret - - // here: - 0x0000006f, // j here # spin - 0x0000006f, // # spin - 0x0000006f, // # spin - 0x0000006f, // # spin - }; - - // put initcode to QEMU to setup a PMP to permit access to all of memory in S mode - difftest_memcpy(0x80000000, initcode, sizeof(initcode), true); - - // set pc to 0x80000000 - uint32_t val = 0x80000000; - qemu_write_reg((void *)&val, 32); // pc - - // execute enough instructions to enter protected mode - difftest_exec(20); -} diff --git a/libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv64/init.c b/libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv64/init.c deleted file mode 100644 index d962385..0000000 --- a/libraries/NEMU/tools/qemu-dl-diff/src/isa/riscv64/init.c +++ /dev/null @@ -1,10 +0,0 @@ -#include - -char *isa_qemu_argv[] = { - "/usr/bin/qemu-system-riscv64", - "-nographic", "-S", "-serial", "none", "-monitor", "none", - NULL -}; - -void init_isa() { -} diff --git a/libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/init.c b/libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/init.c deleted file mode 100644 index 0d10c36..0000000 --- a/libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/init.c +++ /dev/null @@ -1,59 +0,0 @@ -#include - -void difftest_memcpy(paddr_t addr, void *buf, size_t n, bool direction); -void difftest_exec(uint64_t n); -void qemu_write_reg(void *val, int idx); -void init_intr(); - -char *isa_qemu_argv[] = { - "/usr/bin/qemu-system-i386", - "-nographic", "-S", "-serial", "none", "-monitor", "none", - "-cpu", "Broadwell", - NULL -}; - -void init_isa() { - uint8_t mbr[] = { - // start16: - 0xfa, // cli - 0x31, 0xc0, // xorw %ax,%ax - 0x8e, 0xd8, // movw %ax,%ds - 0x8e, 0xc0, // movw %ax,%es - 0x8e, 0xd0, // movw %ax,%ss - 0x0f, 0x01, 0x16, 0x44, 0x7c, // lgdt gdtdesc - 0x0f, 0x20, 0xc0, // movl %cr0,%eax - 0x66, 0x83, 0xc8, 0x01, // orl $CR0_PE,%eax - 0x0f, 0x22, 0xc0, // movl %eax,%cr0 - 0xea, 0x1d, 0x7c, 0x08, 0x00, // ljmp $GDT_ENTRY(1),$start32 - - // start32: - 0x66, 0xb8, 0x10, 0x00, // movw $0x10,%ax - 0x8e, 0xd8, // movw %ax, %ds - 0x8e, 0xc0, // movw %ax, %es - 0x8e, 0xd0, // movw %ax, %ss - 0xeb, 0xfe, // jmp 7c27 - 0x8d, 0x76, 0x00, // lea 0x0(%esi),%esi - - // GDT - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, - - // GDT descriptor - 0x17, 0x00, 0x2c, 0x7c, 0x00, 0x00 - }; - - // put the MBR code to QEMU to enable protected mode - difftest_memcpy(0x7c00, mbr, sizeof(mbr), true); - - // set cs:eip to 0000:7c00 - uint32_t val = 0; - qemu_write_reg((void *)&val, 10); // cs - val = 0x7c00; - qemu_write_reg((void *)&val, 8); // pc - - // execute enough instructions to enter protected mode - difftest_exec(20); - - init_intr(); -} diff --git a/libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/intr.c b/libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/intr.c deleted file mode 100644 index 40e71db..0000000 --- a/libraries/NEMU/tools/qemu-dl-diff/src/isa/x86/intr.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include - -static void (*qemu_do_interrupt_all)(void *cpu, int intno, - int is_int, int error_code, uint32_t next_eip, int is_hw) = NULL; - -void* get_loaded_addr(char *sym, int type); -void* qemu_get_cpu(); -void hack_fun_return_1(char *funname); - -void isa_raise_intr(uint64_t NO) { - qemu_do_interrupt_all(qemu_get_cpu(), NO, 0, 0, 0, 1); -} - -void init_intr() { - qemu_do_interrupt_all = get_loaded_addr("do_interrupt_all", STT_FUNC); - hack_fun_return_1("x86_cpu_has_work"); -} diff --git a/libraries/NEMU/tools/qemu-socket-diff/Makefile b/libraries/NEMU/tools/qemu-socket-diff/Makefile deleted file mode 100644 index cc64dba..0000000 --- a/libraries/NEMU/tools/qemu-socket-diff/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -NAME = qemu -SRCS = $(shell find src/ -name "*.c" | grep -v "isa") -SRCS += $(shell find src/isa/$(ISA) -name "*.c") - -SHARE = 1 -CFLAGS += -DNEMU_HOME=$(NEMU_HOME) -D_ISA_H_=\"isa/$(ISA).h\" - -include $(NEMU_HOME)/scripts/isa.mk -include $(NEMU_HOME)/scripts/build.mk diff --git a/libraries/NEMU/tools/qemu-socket-diff/include/common.h b/libraries/NEMU/tools/qemu-socket-diff/include/common.h deleted file mode 100644 index 6f6b637..0000000 --- a/libraries/NEMU/tools/qemu-socket-diff/include/common.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef __COMMON_H__ -#define __COMMON_H__ - -#include -#include -#include -#include -#include -#include -#include - -typedef uint32_t paddr_t; - -#include "protocol.h" - -#endif diff --git a/libraries/NEMU/tools/qemu-socket-diff/include/isa/mips32.h b/libraries/NEMU/tools/qemu-socket-diff/include/isa/mips32.h deleted file mode 100644 index e0271d2..0000000 --- a/libraries/NEMU/tools/qemu-socket-diff/include/isa/mips32.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __MIPS32_H__ -#define __MIPS32_H__ - -#define _str(x) # x -#define str(x) _str(x) - -#define ISA_QEMU_BIN "qemu-system-mipsel" -#define ISA_QEMU_ARGS "-machine", "mipssim",\ - "-kernel", str(NEMU_HOME) "/resource/mips-elf/mips.dummy", - -union isa_gdb_regs { - struct { - uint32_t gpr[32]; - uint32_t status, lo, hi, badvaddr, cause, pc; - }; - struct { - uint32_t array[77]; - }; -}; - -#endif diff --git a/libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv32.h b/libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv32.h deleted file mode 100644 index 46eaec1..0000000 --- a/libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv32.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef __RISCV32_H__ -#define __RISCV32_H__ - -#define ISA_QEMU_BIN "qemu-system-riscv32" -#define ISA_QEMU_ARGS - -union isa_gdb_regs { - struct { - uint32_t gpr[32]; - uint32_t pc; - }; - struct { - uint32_t array[77]; - }; -}; - -#endif diff --git a/libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv64.h b/libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv64.h deleted file mode 100644 index 79c7b7b..0000000 --- a/libraries/NEMU/tools/qemu-socket-diff/include/isa/riscv64.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef __RISCV64_H__ -#define __RISCV64_H__ - -#define ISA_QEMU_BIN "qemu-system-riscv64" -#define ISA_QEMU_ARGS - -union isa_gdb_regs { - struct { - uint64_t gpr[32]; - uint64_t fpr[32]; - uint64_t pc; - }; - struct { - uint32_t array[DIFFTEST_REG_SIZE/sizeof(uint32_t)]; - }; -}; - -#endif diff --git a/libraries/NEMU/tools/qemu-socket-diff/include/isa/x86.h b/libraries/NEMU/tools/qemu-socket-diff/include/isa/x86.h deleted file mode 100644 index c1f4627..0000000 --- a/libraries/NEMU/tools/qemu-socket-diff/include/isa/x86.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef __X86_H__ -#define __X86_H__ - -#define ISA_QEMU_BIN "qemu-system-i386" -#define ISA_QEMU_ARGS - -union isa_gdb_regs { - struct { - uint32_t eax, ecx, edx, ebx, esp, ebp, esi, edi; - uint32_t eip, eflags; - uint32_t cs, ss, ds, es, fs, gs; - }; - struct { - uint32_t array[77]; - }; -}; - -#endif diff --git a/libraries/NEMU/tools/qemu-socket-diff/include/protocol.h b/libraries/NEMU/tools/qemu-socket-diff/include/protocol.h deleted file mode 100644 index ec98ed3..0000000 --- a/libraries/NEMU/tools/qemu-socket-diff/include/protocol.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Simple interface of a GDB remote protocol client. - * Copyright (C) 2015 Red Hat Inc. - * - * This file is part of gdb-toys. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see . - */ - -#include -#include _ISA_H_ - -struct gdb_conn; - -uint16_t gdb_decode_hex(uint8_t msb, uint8_t lsb); -uint64_t gdb_decode_hex_str(uint8_t *bytes); - -uint8_t hex_encode(uint8_t digit); - -struct gdb_conn *gdb_begin_inet(const char *addr, uint16_t port); - -void gdb_end(struct gdb_conn *conn); - -void gdb_send(struct gdb_conn *conn, const uint8_t *command, size_t size); - -uint8_t *gdb_recv(struct gdb_conn *conn, size_t *size); - -const char * gdb_start_noack(struct gdb_conn *conn); diff --git a/libraries/NEMU/tools/qemu-socket-diff/src/diff-test.c b/libraries/NEMU/tools/qemu-socket-diff/src/diff-test.c deleted file mode 100644 index 87d239f..0000000 --- a/libraries/NEMU/tools/qemu-socket-diff/src/diff-test.c +++ /dev/null @@ -1,84 +0,0 @@ -#include "common.h" -#include -#include -#include -#include _ISA_H_ - -bool gdb_connect_qemu(int); -bool gdb_memcpy_to_qemu(uint32_t, void *, int); -bool gdb_getregs(union isa_gdb_regs *); -bool gdb_setregs(union isa_gdb_regs *); -bool gdb_si(); -void gdb_exit(); - -void init_isa(); - -void difftest_memcpy(paddr_t addr, void *buf, size_t n, bool direction) { - assert(direction == DIFFTEST_TO_REF); - if (direction == DIFFTEST_TO_REF) { - bool ok = gdb_memcpy_to_qemu(addr, buf, n); - assert(ok == 1); - } -} - -void difftest_regcpy(void *dut, bool direction) { - union isa_gdb_regs qemu_r; - gdb_getregs(&qemu_r); - if (direction == DIFFTEST_TO_REF) { - memcpy(&qemu_r, dut, DIFFTEST_REG_SIZE); - gdb_setregs(&qemu_r); - } else { - memcpy(dut, &qemu_r, DIFFTEST_REG_SIZE); - } -} - -void difftest_exec(uint64_t n) { - while (n --) gdb_si(); -} - -void difftest_init(int port) { - char buf[32]; - sprintf(buf, "tcp::%d", port); - - int ppid_before_fork = getpid(); - int pid = fork(); - if (pid == -1) { - perror("fork"); - assert(0); - } - else if (pid == 0) { - // child - - // install a parent death signal in the chlid - int r = prctl(PR_SET_PDEATHSIG, SIGTERM); - if (r == -1) { - perror("prctl error"); - assert(0); - } - - if (getppid() != ppid_before_fork) { - printf("parent has died!\n"); - assert(0); - } - - close(STDIN_FILENO); - execlp(ISA_QEMU_BIN, ISA_QEMU_BIN, ISA_QEMU_ARGS "-S", "-gdb", buf, "-nographic", NULL); - perror("exec"); - assert(0); - } - else { - // father - - gdb_connect_qemu(port); - printf("Connect to QEMU with %s tcpsuccessfully\n", buf); - - atexit(gdb_exit); - - init_isa(); - } -} - -void difftest_raise_intr(uint64_t NO) { - printf("raise_intr is not supported in QEMU-socket\n"); - assert(0); -} diff --git a/libraries/NEMU/tools/qemu-socket-diff/src/gdb-host.c b/libraries/NEMU/tools/qemu-socket-diff/src/gdb-host.c deleted file mode 100644 index 624c199..0000000 --- a/libraries/NEMU/tools/qemu-socket-diff/src/gdb-host.c +++ /dev/null @@ -1,103 +0,0 @@ -#include "common.h" - -static struct gdb_conn *conn; - -bool gdb_connect_qemu(int port) { - // connect to gdbserver on localhost port 1234 - while ((conn = gdb_begin_inet("127.0.0.1", port)) == NULL) { - usleep(1); - } - - return true; -} - -static bool gdb_memcpy_to_qemu_small(uint32_t dest, void *src, int len) { - char *buf = malloc(len * 2 + 128); - assert(buf != NULL); - int p = sprintf(buf, "M0x%x,%x:", dest, len); - int i; - for (i = 0; i < len; i ++) { - p += sprintf(buf + p, "%c%c", hex_encode(((uint8_t *)src)[i] >> 4), hex_encode(((uint8_t *)src)[i] & 0xf)); - } - - gdb_send(conn, (const uint8_t *)buf, strlen(buf)); - free(buf); - - size_t size; - uint8_t *reply = gdb_recv(conn, &size); - bool ok = !strcmp((const char*)reply, "OK"); - free(reply); - - return ok; -} - -bool gdb_memcpy_to_qemu(uint32_t dest, void *src, int len) { - const int mtu = 1500; - bool ok = true; - while (len > mtu) { - ok &= gdb_memcpy_to_qemu_small(dest, src, mtu); - dest += mtu; - src += mtu; - len -= mtu; - } - ok &= gdb_memcpy_to_qemu_small(dest, src, len); - return ok; -} - -bool gdb_getregs(union isa_gdb_regs *r) { - gdb_send(conn, (const uint8_t *)"g", 1); - size_t size; - uint8_t *reply = gdb_recv(conn, &size); - - int i; - uint8_t *p = reply; - uint8_t c; - for (i = 0; i < sizeof(union isa_gdb_regs) / sizeof(uint32_t); i ++) { - c = p[8]; - p[8] = '\0'; - r->array[i] = gdb_decode_hex_str(p); - p[8] = c; - p += 8; - } - - free(reply); - - return true; -} - -bool gdb_setregs(union isa_gdb_regs *r) { - int len = sizeof(union isa_gdb_regs); - char *buf = malloc(len * 2 + 128); - assert(buf != NULL); - buf[0] = 'G'; - - void *src = r; - int p = 1; - int i; - for (i = 0; i < len; i ++) { - p += sprintf(buf + p, "%c%c", hex_encode(((uint8_t *)src)[i] >> 4), hex_encode(((uint8_t *)src)[i] & 0xf)); - } - - gdb_send(conn, (const uint8_t *)buf, strlen(buf)); - free(buf); - - size_t size; - uint8_t *reply = gdb_recv(conn, &size); - bool ok = !strcmp((const char*)reply, "OK"); - free(reply); - - return ok; -} - -bool gdb_si() { - char buf[] = "vCont;s:1"; - gdb_send(conn, (const uint8_t *)buf, strlen(buf)); - size_t size; - uint8_t *reply = gdb_recv(conn, &size); - free(reply); - return true; -} - -void gdb_exit() { - gdb_end(conn); -} diff --git a/libraries/NEMU/tools/qemu-socket-diff/src/isa/mips32/init.c b/libraries/NEMU/tools/qemu-socket-diff/src/isa/mips32/init.c deleted file mode 100644 index b051e60..0000000 --- a/libraries/NEMU/tools/qemu-socket-diff/src/isa/mips32/init.c +++ /dev/null @@ -1,2 +0,0 @@ -void init_isa() { -} diff --git a/libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv32/init.c b/libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv32/init.c deleted file mode 100644 index 4784d57..0000000 --- a/libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv32/init.c +++ /dev/null @@ -1,51 +0,0 @@ -#include "common.h" - -bool gdb_memcpy_to_qemu(uint32_t, void *, int); -bool gdb_getregs(union isa_gdb_regs *); -bool gdb_setregs(union isa_gdb_regs *); -void difftest_exec(uint64_t n); - -static uint32_t initcode[] = { - 0x800006b7, // lui a3,0x8000 - 0x03c68693, // addi a3,a3,0x3c # 800003c - 0x30569073, // csrw mtvec,a3 - - 0xfff00513, // li a0, -1 - 0x01f00593, // li a1, 31 - 0x3b051073, // csrw pmpaddr0, a0 - 0x3a059073, // csrw pmpcfg0, a1 - - 0x000c1637, // lui a2,0xc2 # c0001 - 0x80060613, // addi a2,a2,-2048 # c0800 - 0x30061073, // csrw mstatus,a2 - - 0x00468693, // addi a3,a3,0x10 # 8000040 - 0x34169073, // csrw mepc,a3 - - 0x30251073, // csrw medeleg, a0 - - 0x30200073, // mret - -// here: - 0x0000006f, // j here # spin - 0x0000006f, // # spin - 0x0000006f, // # spin - 0x0000006f, // # spin -}; - - -void init_isa() { - // put initcode to QEMU to setup a PMP to permit access to all of memory in S mode - bool ok = gdb_memcpy_to_qemu(0x80000000, initcode, sizeof(initcode)); - assert(ok == 1); - - union isa_gdb_regs r; - gdb_getregs(&r); - - r.pc = 0x80000000; - ok = gdb_setregs(&r); - assert(ok == 1); - - // execute enough instructions - difftest_exec(20); -} diff --git a/libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv64/init.c b/libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv64/init.c deleted file mode 100644 index b051e60..0000000 --- a/libraries/NEMU/tools/qemu-socket-diff/src/isa/riscv64/init.c +++ /dev/null @@ -1,2 +0,0 @@ -void init_isa() { -} diff --git a/libraries/NEMU/tools/qemu-socket-diff/src/isa/x86/init.c b/libraries/NEMU/tools/qemu-socket-diff/src/isa/x86/init.c deleted file mode 100644 index f6f98d2..0000000 --- a/libraries/NEMU/tools/qemu-socket-diff/src/isa/x86/init.c +++ /dev/null @@ -1,54 +0,0 @@ -#include "common.h" - -bool gdb_memcpy_to_qemu(uint32_t, void *, int); -bool gdb_getregs(union isa_gdb_regs *); -bool gdb_setregs(union isa_gdb_regs *); -void difftest_exec(uint64_t n); - -static uint8_t mbr[] = { - // start16: - 0xfa, // cli - 0x31, 0xc0, // xorw %ax,%ax - 0x8e, 0xd8, // movw %ax,%ds - 0x8e, 0xc0, // movw %ax,%es - 0x8e, 0xd0, // movw %ax,%ss - 0x0f, 0x01, 0x16, 0x44, 0x7c, // lgdt gdtdesc - 0x0f, 0x20, 0xc0, // movl %cr0,%eax - 0x66, 0x83, 0xc8, 0x01, // orl $CR0_PE,%eax - 0x0f, 0x22, 0xc0, // movl %eax,%cr0 - 0xea, 0x1d, 0x7c, 0x08, 0x00, // ljmp $GDT_ENTRY(1),$start32 - - // start32: - 0x66, 0xb8, 0x10, 0x00, // movw $0x10,%ax - 0x8e, 0xd8, // movw %ax, %ds - 0x8e, 0xc0, // movw %ax, %es - 0x8e, 0xd0, // movw %ax, %ss - 0xeb, 0xfe, // jmp 7c27 - 0x8d, 0x76, 0x00, // lea 0x0(%esi),%esi - - // GDT - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, - - // GDT descriptor - 0x17, 0x00, 0x2c, 0x7c, 0x00, 0x00 -}; - -void init_isa() { - // put the MBR code to QEMU to enable protected mode - bool ok = gdb_memcpy_to_qemu(0x7c00, mbr, sizeof(mbr)); - assert(ok == 1); - - union isa_gdb_regs r; - gdb_getregs(&r); - - // set cs:eip to 0000:7c00 - r.eip = 0x7c00; - r.cs = 0x0000; - ok = gdb_setregs(&r); - assert(ok == 1); - - // execute enough instructions to enter protected mode - difftest_exec(20); -} diff --git a/libraries/NEMU/tools/qemu-socket-diff/src/protocol.c b/libraries/NEMU/tools/qemu-socket-diff/src/protocol.c deleted file mode 100644 index 9b42e14..0000000 --- a/libraries/NEMU/tools/qemu-socket-diff/src/protocol.c +++ /dev/null @@ -1,306 +0,0 @@ -/* Simple implementation of a GDB remote protocol client. - * Copyright (C) 2015 Red Hat Inc. - * - * This file is part of gdb-toys. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see . - */ - -#include "common.h" -#include -#include -#include - -#include - -#include -#include - -#include -#include - -struct gdb_conn { - FILE *in; - FILE *out; - bool ack; -}; - - -static uint8_t -hex_nibble(uint8_t hex) { - return isdigit(hex) ? hex - '0' : tolower(hex) - 'a' + 10; -} - -uint8_t hex_encode(uint8_t digit) { - return digit > 9 ? 'a' + digit - 10 : '0' + digit; -} - -uint16_t gdb_decode_hex(uint8_t msb, uint8_t lsb) { - if (!isxdigit(msb) || !isxdigit(lsb)) - return UINT16_MAX; - return 16 * hex_nibble(msb) + hex_nibble(lsb); -} - -uint64_t gdb_decode_hex_str(uint8_t *bytes) { - uint64_t value = 0; - uint64_t weight = 1; - while (isxdigit(bytes[0]) && isxdigit(bytes[1])) { - value += weight * gdb_decode_hex(bytes[0], bytes[1]); - bytes += 2; - weight *= 16 * 16; - } - return value; -} - - -static struct gdb_conn* gdb_begin(int fd) { - struct gdb_conn *conn = calloc(1, sizeof(struct gdb_conn *)); - if (conn == NULL) - err(1, "calloc"); - - conn->ack = true; - - // duplicate the handle to separate read/write state - int fd2 = dup(fd); - if (fd2 < 0) - err(1, "dup"); - - // open a FILE* for reading - conn->in = fdopen(fd, "rb"); - if (conn->in == NULL) - err(1, "fdopen"); - - // open a FILE* for writing - conn->out = fdopen(fd2, "wb"); - if (conn->out == NULL) - err(1, "fdopen"); - - // reset line state by acking any earlier input - fputc('+', conn->out); - fflush(conn->out); - - return conn; -} - -struct gdb_conn* gdb_begin_inet(const char *addr, uint16_t port) { - // fill the socket information - struct sockaddr_in sa = { - .sin_family = AF_INET, - .sin_port = htons(port), - }; - if (inet_aton(addr, &sa.sin_addr) == 0) - errx(1, "Invalid address: %s", addr); - - // open the socket and start the tcp connection - int fd = socket(AF_INET, SOCK_STREAM, 0); - if (fd < 0) - err(1, "socket"); - if (connect(fd, (const struct sockaddr *)&sa, sizeof(sa)) != 0) { - close(fd); - return NULL; - } - - socklen_t tmp; - tmp = 1; - int r = setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (char *)&tmp, sizeof(tmp)); - if (r) { - perror("setsockopt"); - assert(0); - } - tmp = 1; - r = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *)&tmp, sizeof(tmp)); - if (r) { - perror("setsockopt"); - assert(0); - } - - // initialize the rest of gdb on this handle - return gdb_begin(fd); -} - - -void gdb_end(struct gdb_conn *conn) { - fclose(conn->in); - fclose(conn->out); - free(conn); -} - -static void send_packet(FILE *out, const uint8_t *command, size_t size) { - // compute the checksum -- simple mod256 addition - uint8_t sum = 0; - size_t i; - for (i = 0; i < size; ++i) - sum += command[i]; - - // NB: seems neither escaping nor RLE is generally expected by - // gdbserver. e.g. giving "invalid hex digit" on an RLE'd address. - // So just write raw here, and maybe let higher levels escape/RLE. - - fputc('$', out); // packet start - fwrite(command, 1, size, out); // payload - fprintf(out, "#%02X", sum); // packet end, checksum - fflush(out); - - if (ferror(out)) - err(1, "send"); - else if (feof(out)) - errx(0, "send: Connection closed"); -} - -void gdb_send(struct gdb_conn *conn, const uint8_t *command, size_t size) { - bool acked = false; - do { - send_packet(conn->out, command, size); - - if (!conn->ack) - break; - - // look for '+' ACK or '-' NACK/resend - acked = fgetc(conn->in) == '+'; - } while (!acked); -} - -static uint8_t* recv_packet(FILE *in, size_t *ret_size, bool* ret_sum_ok) { - size_t i = 0; - size_t size = 4096; - uint8_t *reply = malloc(size); - if (reply == NULL) - err(1, "malloc"); - - int c; - uint8_t sum = 0; - bool escape = false; - - // fast-forward to the first start of packet - while ((c = fgetc(in)) != EOF && c != '$'); - - while ((c = fgetc(in)) != EOF) { - sum += c; - switch (c) { - case '$': // new packet? start over... - i = 0; - sum = 0; - escape = false; - continue; - - case '#': // end of packet - sum -= c; // not part of the checksum - { - uint8_t msb = fgetc(in); - uint8_t lsb = fgetc(in); - *ret_sum_ok = sum == gdb_decode_hex(msb, lsb); - } - *ret_size = i; - - // terminate it for good measure - if (i == size) { - reply = realloc(reply, size + 1); - if (reply == NULL) - err(1, "realloc"); - } - reply[i] = '\0'; - - return reply; - - case '}': // escape: next char is XOR 0x20 - escape = true; - continue; - - case '*': // run-length-encoding - // The next character tells how many times to repeat the last - // character we saw. The count is added to 29, so that the - // minimum-beneficial RLE 3 is the first printable character ' '. - // The count character can't be >126 or '$'/'#' packet markers. - - if (i > 0) { // need something to repeat! - int c2 = fgetc(in); - if (c2 < 29 || c2 > 126 || c2 == '$' || c2 == '#') { - // invalid count character! - ungetc(c2, in); - } else { - int count = c2 - 29; - - // get a bigger buffer if needed - if (i + count > size) { - size *= 2; - reply = realloc(reply, size); - if (reply == NULL) - err(1, "realloc"); - } - - // fill the repeated character - memset(&reply[i], reply[i - 1], count); - i += count; - sum += c2; - continue; - } - } - } - - // XOR an escaped character - if (escape) { - c ^= 0x20; - escape = false; - } - - // get a bigger buffer if needed - if (i == size) { - size *= 2; - reply = realloc(reply, size); - if (reply == NULL) - err(1, "realloc"); - } - - // add one character - reply[i++] = c; - } - - if (ferror(in)) - err(1, "recv"); - else if (feof(in)) - errx(0, "recv: Connection closed"); - else - errx(1, "recv: Unknown connection error"); -} - -uint8_t* gdb_recv(struct gdb_conn *conn, size_t *size) { - uint8_t *reply; - bool acked = false; - do { - reply = recv_packet(conn->in, size, &acked); - - if (!conn->ack) - break; - - // send +/- depending on checksum result, retry if needed - fputc(acked ? '+' : '-', conn->out); - fflush(conn->out); - } while (!acked); - - return reply; -} - -const char* gdb_start_noack(struct gdb_conn *conn) { - static const char cmd[] = "QStartNoAckMode"; - gdb_send(conn, (const uint8_t *)cmd, sizeof(cmd) - 1); - - size_t size; - uint8_t *reply = gdb_recv(conn, &size); - bool ok = size == 2 && !strcmp((const char*)reply, "OK"); - free(reply); - - if (ok) - conn->ack = false; - return ok ? "OK" : ""; -} diff --git a/libraries/difftest b/libraries/difftest new file mode 160000 index 0000000..36dfe26 --- /dev/null +++ b/libraries/difftest @@ -0,0 +1 @@ +Subproject commit 36dfe26d66ca0b4adc4ed06351329b1432e7f54a diff --git a/libraries/difftest/.gitignore b/libraries/difftest/.gitignore deleted file mode 100644 index 31099c9..0000000 --- a/libraries/difftest/.gitignore +++ /dev/null @@ -1,364 +0,0 @@ -### Project Specific stuff -test_run_dir/* -### XilinxISE template -# intermediate build files -*.bgn -*.bit -*.bld -*.cmd_log -*.drc -*.ll -*.lso -*.msd -*.msk -*.ncd -*.ngc -*.ngd -*.ngr -*.pad -*.par -*.pcf -*.prj -*.ptwx -*.rbb -*.rbd -*.stx -*.syr -*.twr -*.twx -*.unroutes -*.ut -*.xpi -*.xst -*_bitgen.xwbt -*_envsettings.html -*_map.map -*_map.mrp -*_map.ngm -*_map.xrpt -*_ngdbuild.xrpt -*_pad.csv -*_pad.txt -*_par.xrpt -*_summary.html -*_summary.xml -*_usage.xml -*_xst.xrpt - -# project-wide generated files -*.gise -par_usage_statistics.html -usage_statistics_webtalk.html -webtalk.log -webtalk_pn.xml - -# generated folders -iseconfig/ -xlnx_auto_0_xdb/ -xst/ -_ngo/ -_xmsgs/ -### Eclipse template -*.pydevproject -.metadata -.gradle -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath - -# Eclipse Core -.project - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# CDT-specific -.cproject - -# JDT-specific (Eclipse Java Development Tools) -.classpath - -# Java annotation processor (APT) -.factorypath - -# PDT-specific -.buildpath - -# sbteclipse plugin -.target - -# TeXlipse plugin -.texlipse -### C template -# Object files -*.o -*.ko -*.obj -*.elf - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - -# Debug files -*.dSYM/ -### SBT template -# Simple Build Tool -# http://www.scala-sbt.org/release/docs/Getting-Started/Directories.html#configuring-version-control - -target/ -lib_managed/ -src_managed/ -project/boot/ -.history -.cache -### Emacs template -# -*- mode: gitignore; -*- -*~ -\#*\# -/.emacs.desktop -/.emacs.desktop.lock -*.elc -auto-save-list -tramp -.\#* - -# Org-mode -.org-id-locations -*_archive - -# flymake-mode -*_flymake.* - -# eshell files -/eshell/history -/eshell/lastdir - -# elpa packages -/elpa/ - -# reftex files -*.rel - -# AUCTeX auto folder -/auto/ - -# cask packages -.cask/ -### Vim template -[._]*.s[a-w][a-z] -[._]s[a-w][a-z] -*.un~ -Session.vim -.netrwhist -*~ -### JetBrains template -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio - -*.iml - -## Directory-based project format: -.idea/ -# if you remove the above rule, at least ignore the following: - -# User-specific stuff: -# .idea/workspace.xml -# .idea/tasks.xml -# .idea/dictionaries - -# Sensitive or high-churn files: -# .idea/dataSources.ids -# .idea/dataSources.xml -# .idea/sqlDataSources.xml -# .idea/dynamic.xml -# .idea/uiDesigner.xml - -# Gradle: -# .idea/gradle.xml -# .idea/libraries - -# Mongo Explorer plugin: -# .idea/mongoSettings.xml - -## File-based project format: -*.ipr -*.iws - -## Plugin-specific files: - -# IntelliJ -/out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -### C++ template -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.exe -*.out -*.app -### OSX template -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk -### Xcode template -# Xcode -# -# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore - -## Build generated -build/ -DerivedData - -## Various settings -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata - -## Other -*.xccheckout -*.moved-aside -*.xcuserstate -### Scala template -*.class -*.log - -# sbt specific -.cache -.history -.lib/ -dist/* -target/ -lib_managed/ -src_managed/ -project/boot/ -project/plugins/project/ - -# Scala-IDE specific -.scala_dependencies -.worksheet -### Java template -*.class - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.ear - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -# vscode environment -.vscode -.metals -.bloop -.bsp -.coursier -mill.rdiB - -stale_outputs_checked - -*.snapshot -__pycache__ -overnight.sh - -# VCS files -simv -simv.daidir -ucli.key -stack.info* -*.vpd -*.bin - -!ready-to-run/* - diff --git a/libraries/difftest/LICENSE b/libraries/difftest/LICENSE deleted file mode 100644 index f167963..0000000 --- a/libraries/difftest/LICENSE +++ /dev/null @@ -1,127 +0,0 @@ - 木兰宽松许可证, 第2版 - - 木兰宽松许可证, 第2版 - 2020年1月 http://license.coscl.org.cn/MulanPSL2 - - - 您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第2版(“本许可证”)的如下条款的约束: - - 0. 定义 - - “软件”是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。 - - “贡献”是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。 - - “贡献者”是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。 - - “法人实体”是指提交贡献的机构及其“关联实体”。 - - “关联实体”是指,对“本许可证”下的行为方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。 - - 1. 授予版权许可 - - 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。 - - 2. 授予专利许可 - - 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括对“贡献”的修改或包含“贡献”的其他结合。如果您或您的“关联实体”直接或间接地,就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。 - - 3. 无商标许可 - - “本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。 - - 4. 分发限制 - - 您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。 - - 5. 免责声明与责任限制 - - “软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。 - - 6. 语言 - “本许可证”以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲突不一致,以中文版为准。 - - 条款结束 - - 如何将木兰宽松许可证,第2版,应用到您的软件 - - 如果您希望将木兰宽松许可证,第2版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步: - - 1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字; - - 2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中; - - 3, 请将如下声明文本放入每个源文件的头部注释中。 - - Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences - XiangShan is licensed under Mulan PSL v2. - You can use this software according to the terms and conditions of the Mulan PSL v2. - You may obtain a copy of Mulan PSL v2 at: - http://license.coscl.org.cn/MulanPSL2 - THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - See the Mulan PSL v2 for more details. - - - Mulan Permissive Software License,Version 2 - - Mulan Permissive Software License,Version 2 (Mulan PSL v2) - January 2020 http://license.coscl.org.cn/MulanPSL2 - - Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v2 (this License) with the following terms and conditions: - - 0. Definition - - Software means the program and related documents which are licensed under this License and comprise all Contribution(s). - - Contribution means the copyrightable work licensed by a particular Contributor under this License. - - Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License. - - Legal Entity means the entity making a Contribution and all its Affiliates. - - Affiliates means entities that control, are controlled by, or are under common control with the acting entity under this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity. - - 1. Grant of Copyright License - - Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not. - - 2. Grant of Patent License - - Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution, where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed. The patent license shall not apply to any modification of the Contribution, and any other combination which includes the Contribution. If you or your Affiliates directly or indirectly institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken. - - 3. No Trademark License - - No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in Section 4. - - 4. Distribution Restriction - - You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software. - - 5. Disclaimer of Warranty and Limitation of Liability - - THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER HOW IT’S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - - 6. Language - - THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH VERSIONS, THE CHINESE VERSION SHALL PREVAIL. - - END OF THE TERMS AND CONDITIONS - - How to Apply the Mulan Permissive Software License,Version 2 (Mulan PSL v2) to Your Software - - To apply the Mulan PSL v2 to your work, for easy identification by recipients, you are suggested to complete following three steps: - - i Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner; - - ii Create a file named “LICENSE” which contains the whole context of this License in the first directory of your software package; - - iii Attach the statement to the appropriate annotated syntax at the beginning of each source file. - - - Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences - XiangShan is licensed under Mulan PSL v2. - You can use this software according to the terms and conditions of the Mulan PSL v2. - You may obtain a copy of Mulan PSL v2 at: - http://license.coscl.org.cn/MulanPSL2 - THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. - See the Mulan PSL v2 for more details. \ No newline at end of file diff --git a/libraries/difftest/Makefile b/libraries/difftest/Makefile deleted file mode 100644 index 1d0feaf..0000000 --- a/libraries/difftest/Makefile +++ /dev/null @@ -1,76 +0,0 @@ -#*************************************************************************************** -# Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -# Copyright (c) 2020-2021 Peng Cheng Laboratory -# -# XiangShan is licensed under Mulan PSL v2. -# You can use this software according to the terms and conditions of the Mulan PSL v2. -# You may obtain a copy of Mulan PSL v2 at: -# http://license.coscl.org.cn/MulanPSL2 -# -# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -# -# See the Mulan PSL v2 for more details. -#*************************************************************************************** - -SIM_TOP ?= SimTop -DESIGN_DIR ?= .. -NUM_CORES ?= 1 - -BUILD_DIR = $(DESIGN_DIR)/build -SIM_TOP_V = $(BUILD_DIR)/$(SIM_TOP).v - -DIFF_SCALA_FILE = $(shell find ./src/main/scala -name '*.scala') -SCALA_FILE = $(shell find $(DESIGN_DIR)/src/main/scala -name '*.scala') - -# generate SimTop.v -$(SIM_TOP_V): $(DIFF_SCALA_FILE) $(SCALA_FILE) - $(MAKE) -C $(DESIGN_DIR) sim-verilog - -# co-simulation with DRAMsim3 -ifeq ($(WITH_DRAMSIM3),1) -ifndef DRAMSIM3_HOME -$(error DRAMSIM3_HOME is not set) -endif -override SIM_ARGS += --with-dramsim3 -endif - -TIMELOG = $(BUILD_DIR)/time.log -TIME_CMD = time -a -o $(TIMELOG) - -# remote machine with more cores to speedup c++ build -REMOTE ?= localhost -.DEFAULT_GOAL = emu - -sim-verilog: $(SIM_TOP_V) - -SIM_CSRC_DIR = $(abspath ./src/test/csrc/common) -SIM_CXXFILES = $(shell find $(SIM_CSRC_DIR) -name "*.cpp") - -DIFFTEST_CSRC_DIR = $(abspath ./src/test/csrc/difftest) -DIFFTEST_CXXFILES = $(shell find $(DIFFTEST_CSRC_DIR) -name "*.cpp") - -SIM_VSRC = $(shell find ./src/test/vsrc/common -name "*.v" -or -name "*.sv") - -include verilator.mk -include vcs.mk - -ifndef NEMU_HOME -$(error NEMU_HOME is not set) -endif -REF_SO := $(NEMU_HOME)/build/riscv64-nemu-interpreter-so -$(REF_SO): - $(MAKE) -C $(NEMU_HOME) defconfig riscv64-xs-ref_defconfig - $(MAKE) -C $(NEMU_HOME) - -SEED ?= $(shell shuf -i 1-10000 -n 1) - -release-lock: - ssh -tt $(REMOTE) 'rm -f $(LOCK)' - -clean: vcs-clean - rm -rf $(BUILD_DIR) - -.PHONY: sim-verilog emu clean$(REF_SO) - diff --git a/libraries/difftest/README.md b/libraries/difftest/README.md deleted file mode 100644 index c52946e..0000000 --- a/libraries/difftest/README.md +++ /dev/null @@ -1,55 +0,0 @@ -Difftest Submodule -=================== - -Difftest (差分测试) co-sim framework - -# Usage - -1. Init this submodule in your design, add it to dependency list. -2. Add difftest to your design. -3. Generate verilog files for simulation. -4. Assign `SIM_TOP`, `DESIGN_DIR` for `difftest/Makefile` -5. `cd difftest` and `make emu`, then start simulating & debugging! - -To use difftest in XiangShan project: -```sh -cd XiangShan -make init -# cd difftest -make emu -``` - -# API - -Difftest functions: - -* DifftestArchEvent (essential) -* DifftestInstrCommit (essential) -* DifftestTrapEvent (essential) -* DifftestCSRState (essential) -* DifftestArchIntRegState (essential) -* DifftestArchFpRegState -* DifftestSbufferEvent -* DifftestStoreEvent -* DifftestLoadEvent -* DifftestAtomicEvent -* DifftestPtwEvent - -Simulation top: - -* LogCtrlIO -* PerfInfoIO -* UARTIO - -Simulation memory: - -* RAMHelper (essential) - -To use `difftest`, include all these modules / simtopIO in your design. - -# Further reference - -* [Difftest: detailed usage (Chinese)](./doc/usage.md) -* [Example: difftest in XiangShan project (Chinese) ](./doc/example-xiangshan.md) -* [Example: difftest in NutShell project (Chinese) ](./doc/example-nutshell.md) -* [SMP-Difftest 支持多处理器的差分测试方法](https://github.com/OpenXiangShan/XiangShan-doc/blob/main/slides/20210624-RVWC-SMP-Difftest%20%E6%94%AF%E6%8C%81%E5%A4%9A%E5%A4%84%E7%90%86%E5%99%A8%E7%9A%84%E5%B7%AE%E5%88%86%E6%B5%8B%E8%AF%95%E6%96%B9%E6%B3%95.pdf) \ No newline at end of file diff --git a/libraries/difftest/scripts/utils/lock-emu.c b/libraries/difftest/scripts/utils/lock-emu.c deleted file mode 100644 index 41831ca..0000000 --- a/libraries/difftest/scripts/utils/lock-emu.c +++ /dev/null @@ -1,59 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#include -#include -#include -#include -#include -#include - -#define BUF_SIZE 32 - -int tryLock(char * file){ - return open(file, O_CREAT | O_EXCL | O_WRONLY, 0666); -} - -int main(int argc, char* argv[]){ - int fd; - char user[BUF_SIZE]; - if(argc < 2){ - printf("arguments are not right!\n"); - exit(-1); - } - - do{ - fd = tryLock(argv[1]); - if(fd > 0){ - getlogin_r(user, BUF_SIZE); - int len = strlen(user); - user[len] = '\0'; - write(fd, user, len+1); - break; - } else { - // someone is holding the lock... - fd = open(argv[1], O_RDONLY); - if(fd > 0){ - read(fd, user, BUF_SIZE); - printf("%s is holding the lock, waiting ...\n", user); - } - } - sleep(10); - } while(1); - - return 0; -} - diff --git a/libraries/difftest/src/test/csrc/common/axi4.cpp b/libraries/difftest/src/test/csrc/common/axi4.cpp deleted file mode 100644 index 800ab63..0000000 --- a/libraries/difftest/src/test/csrc/common/axi4.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#include -#include -#include -#include "axi4.h" - - -// ar channel: (1) read raddr; (2) try to accept the address; (3) check raddr fire -bool axi_get_raddr(const axi_channel &axi, axi_addr_t &addr) { - if (axi.ar.valid) { - addr = axi.ar.addr; - return true; - } - return false; -} - -void axi_accept_raddr(axi_channel &axi) { - axi.ar.ready = 1; -} - -bool axi_check_raddr_fire(const axi_channel &axi) { - if (axi.ar.valid && axi.ar.ready) { -#ifdef DEBUG_LOG_AXI4 - printf("axi ar channel fired addr = 0x%lx, id = %d\n", axi.ar.addr, axi.ar.id); -#endif - return true; - } - return false; -} - - -// r channel: (1) put rdata; (2) check rdata fire -void axi_put_rdata(axi_channel &axi, void *src, size_t n, bool last, uint8_t id) { - memcpy(axi.r.data, src, n); - axi.r.valid = 1; - axi.r.last = (last) ? 1 : 0; - axi.r.id = id; -} - -bool axi_check_rdata_fire(const axi_channel &axi) { - if (axi.r.ready && axi.r.valid) { -#ifdef DEBUG_LOG_AXI4 - printf("axi r channel fired data = %lx, id = %d\n", axi.r.data[0], axi.r.id); -#endif - return true; - } - return false; -} - - -// aw channel: (1) read waddr; (2) try to accept the address; (3) check waddr fire -bool axi_get_waddr(const axi_channel &axi, axi_addr_t &addr) { - if (axi.aw.valid) { - addr = axi.aw.addr; - return true; - } - return false; -} - -void axi_accept_waddr(axi_channel &axi) { - axi.aw.ready = 1; -} - -bool axi_check_waddr_fire(const axi_channel &axi) { - if (axi.aw.valid && axi.aw.ready) { - assert(axi.aw.burst == 1 || (axi.aw.burst == 2 && ((axi.aw.addr & 0x3f) == 0))); -#ifdef DEBUG_LOG_AXI4 - printf("axi aw channel fired\n"); -#endif - return true; - } - return false; -} - - -// w channel: (1) accept wdata; (2) get wdata; (3) check wdata fire -void axi_accept_wdata(axi_channel &axi) { - axi.w.ready = 1; -} - -bool axi_check_wdata_fire(const axi_channel &axi) { - if (axi.w.valid && axi.w.ready) { -#ifdef DEBUG_LOG_AXI4 - printf("axi w channel fired\n"); -#endif - return true; - } - return false; -} - -void axi_get_wdata(const axi_channel &axi, void *dest, size_t n) { - memcpy(dest, axi.w.data, n); -} - - -// b channel: (1) put response; (2) check response fire -void axi_put_wack(axi_channel &axi, uint8_t id) { - axi.b.valid = 1; - axi.b.id = id; -} - -bool axi_check_wack_fire(const axi_channel &axi) { - if (axi.b.valid && axi.b.ready) { -#ifdef DEBUG_LOG_AXI4 - printf("axi b channel fired\n"); -#endif - return true; - } - return false; -} diff --git a/libraries/difftest/src/test/csrc/common/axi4.h b/libraries/difftest/src/test/csrc/common/axi4.h deleted file mode 100644 index 67f102b..0000000 --- a/libraries/difftest/src/test/csrc/common/axi4.h +++ /dev/null @@ -1,230 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#ifndef __AXI4_H -#define __AXI4_h - -#include - -// #define DEBUG_LOG_AXI4 - -// 4*64 bits -#define AXI_DATA_WIDTH_64 4 - -typedef uint64_t axi_addr_t; -typedef uint64_t axi_data_t[AXI_DATA_WIDTH_64]; -#define axi_copy_data(dest, src) \ - memcpy(dest, src, sizeof(uint64_t)*AXI_DATA_WIDTH_64); - -struct axi_aw_channel { - uint8_t ready; - uint8_t valid; - axi_addr_t addr; - uint8_t prot; - uint8_t id; - uint8_t user; - uint8_t len; - uint8_t size; - uint8_t burst; - uint8_t lock; - uint8_t cache; - uint8_t qos; -}; - -struct axi_w_channel { - uint8_t ready; - uint8_t valid; - axi_data_t data; - uint8_t strb; - uint8_t last; -}; - -struct axi_b_channel { - uint8_t ready; - uint8_t valid; - uint8_t resp; - uint8_t id; - uint8_t user; -}; - -struct axi_ar_channel { - uint8_t ready; - uint8_t valid; - axi_addr_t addr; - uint8_t prot; - uint8_t id; - uint8_t user; - uint8_t len; - uint8_t size; - uint8_t burst; - uint8_t lock; - uint8_t cache; - uint8_t qos; -}; - -struct axi_r_channel { - uint8_t ready; - uint8_t valid; - uint8_t resp; - axi_data_t data; - uint8_t last; - uint8_t id; - uint8_t user; -}; - -struct axi_channel { - struct axi_aw_channel aw; - struct axi_w_channel w; - struct axi_b_channel b; - struct axi_ar_channel ar; - struct axi_r_channel r; -}; - -// dut helper for AXI - -// NOTE: change this when migrating between different hardware designs -#define DUT_AXI(name) io_memAXI_0_##name - -#define axi_aw_copy_from_dut_ptr(dut_ptr, aw) \ - do { \ - aw.ready = dut_ptr->DUT_AXI(aw_ready); \ - aw.valid = dut_ptr->DUT_AXI(aw_valid); \ - aw.addr = dut_ptr->DUT_AXI(aw_bits_addr); \ - aw.prot = dut_ptr->DUT_AXI(aw_bits_prot); \ - aw.id = dut_ptr->DUT_AXI(aw_bits_id); \ - aw.len = dut_ptr->DUT_AXI(aw_bits_len); \ - aw.size = dut_ptr->DUT_AXI(aw_bits_size); \ - aw.burst = dut_ptr->DUT_AXI(aw_bits_burst); \ - aw.lock = dut_ptr->DUT_AXI(aw_bits_lock); \ - aw.cache = dut_ptr->DUT_AXI(aw_bits_cache); \ - aw.qos = dut_ptr->DUT_AXI(aw_bits_qos); \ - } while (0); - -#define axi_aw_set_dut_ptr(dut_ptr, aw) \ - do { \ - dut_ptr->DUT_AXI(aw_ready) = aw.ready; \ - } while (0); - -#define axi_w_copy_from_dut_ptr(dut_ptr, w) \ - do { \ - w.ready = dut_ptr->DUT_AXI(w_ready); \ - w.valid = dut_ptr->DUT_AXI(w_valid); \ - axi_copy_data(w.data, dut_ptr->DUT_AXI(w_bits_data)) \ - w.strb = dut_ptr->DUT_AXI(w_bits_strb); \ - w.last = dut_ptr->DUT_AXI(w_bits_last); \ - } while (0); - -#define axi_w_set_dut_ptr(dut_ptr, w) \ - do { \ - dut_ptr->DUT_AXI(w_ready) = w.ready; \ - } while (0); - -#define axi_b_copy_from_dut_ptr(dut_ptr, b) \ - do { \ - b.ready = dut_ptr->DUT_AXI(b_ready); \ - b.valid = dut_ptr->DUT_AXI(b_valid); \ - b.resp = dut_ptr->DUT_AXI(b_bits_resp); \ - b.id = dut_ptr->DUT_AXI(b_bits_id); \ - } while (0); - -#define axi_b_set_dut_ptr(dut_ptr, b) \ - do { \ - dut_ptr->DUT_AXI(b_valid) = b.valid; \ - dut_ptr->DUT_AXI(b_bits_resp) = b.resp; \ - dut_ptr->DUT_AXI(b_bits_id) = b.id; \ - } while (0); - -#define axi_ar_copy_from_dut_ptr(dut_ptr, ar) \ - do { \ - ar.ready = dut_ptr->DUT_AXI(ar_ready); \ - ar.valid = dut_ptr->DUT_AXI(ar_valid); \ - ar.addr = dut_ptr->DUT_AXI(ar_bits_addr); \ - ar.prot = dut_ptr->DUT_AXI(ar_bits_prot); \ - ar.id = dut_ptr->DUT_AXI(ar_bits_id); \ - ar.len = dut_ptr->DUT_AXI(ar_bits_len); \ - ar.size = dut_ptr->DUT_AXI(ar_bits_size); \ - ar.burst = dut_ptr->DUT_AXI(ar_bits_burst); \ - ar.lock = dut_ptr->DUT_AXI(ar_bits_lock); \ - ar.cache = dut_ptr->DUT_AXI(ar_bits_cache); \ - ar.qos = dut_ptr->DUT_AXI(ar_bits_qos); \ - } while (0); - -#define axi_ar_set_dut_ptr(dut_ptr, ar) \ - do { \ - dut_ptr->DUT_AXI(ar_ready) = ar.ready; \ - } while (0); - -#define axi_r_copy_from_dut_ptr(dut_ptr, r) \ - do { \ - r.ready = dut_ptr->DUT_AXI(r_ready); \ - r.valid = dut_ptr->DUT_AXI(r_valid); \ - r.resp = dut_ptr->DUT_AXI(r_bits_resp); \ - axi_copy_data(r.data, dut_ptr->DUT_AXI(r_bits_data)) \ - r.last = dut_ptr->DUT_AXI(r_bits_last); \ - r.id = dut_ptr->DUT_AXI(r_bits_id); \ - } while (0); - -#define axi_r_set_dut_ptr(dut_ptr, r) \ - do { \ - dut_ptr->DUT_AXI(r_valid) = r.valid; \ - dut_ptr->DUT_AXI(r_bits_resp) = r.resp; \ - axi_copy_data(dut_ptr->DUT_AXI(r_bits_data), r.data) \ - dut_ptr->DUT_AXI(r_bits_last) = r.last; \ - dut_ptr->DUT_AXI(r_bits_id) = r.id; \ - } while (0); - -#define axi_copy_from_dut_ptr(dut_ptr, axi) \ - do { \ - axi_aw_copy_from_dut_ptr(dut_ptr, axi.aw) \ - axi_w_copy_from_dut_ptr(dut_ptr, axi.w) \ - axi_b_copy_from_dut_ptr(dut_ptr, axi.b) \ - axi_ar_copy_from_dut_ptr(dut_ptr, axi.ar) \ - axi_r_copy_from_dut_ptr(dut_ptr, axi.r) \ - } while (0); - -#define axi_set_dut_ptr(dut_ptr, axi) \ - do { \ - axi_aw_set_dut_ptr(dut_ptr, axi.aw) \ - axi_w_set_dut_ptr(dut_ptr, axi.w) \ - axi_b_set_dut_ptr(dut_ptr, axi.b) \ - axi_ar_set_dut_ptr(dut_ptr, axi.ar) \ - axi_r_set_dut_ptr(dut_ptr, axi.r) \ - } while (0); - -// ar channel: (1) read raddr; (2) try to accept the address; (3) check raddr fire -bool axi_get_raddr(const axi_channel &axi, axi_addr_t &addr); -void axi_accept_raddr(axi_channel &axi); -bool axi_check_raddr_fire(const axi_channel &axi); - -// r channel: (1) put rdata; (2) check rdata fire -void axi_put_rdata(axi_channel &axi, void *src, size_t n, bool last, uint8_t id); -bool axi_check_rdata_fire(const axi_channel &axi); - -// aw channel: (1) read waddr; (2) try to accept the address; (3) check waddr fire -bool axi_get_waddr(const axi_channel &axi, axi_addr_t &addr); -void axi_accept_waddr(axi_channel &axi); -bool axi_check_waddr_fire(const axi_channel &axi); - -// w channel: (1) accept wdata; (2) get wdata; (3) check wdata fire -void axi_accept_wdata(axi_channel &axi); -void axi_get_wdata(const axi_channel &axi, void *dest, size_t n); -bool axi_check_wdata_fire(const axi_channel &axi); - -// b channel: (1) put response; (2) check response fire -void axi_put_wack(axi_channel &axi, uint8_t id); -bool axi_check_wack_fire(const axi_channel &axi); - -#endif diff --git a/libraries/difftest/src/test/csrc/common/common.cpp b/libraries/difftest/src/test/csrc/common/common.cpp deleted file mode 100644 index b2f16b9..0000000 --- a/libraries/difftest/src/test/csrc/common/common.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#include -#include "common.h" - -int assert_count = 0; -static pthread_mutex_t assert_mutex; -int signal_num = 0; - -void assert_init() { - pthread_mutex_init(&assert_mutex, 0); -} - -void assert_finish() { - pthread_mutex_destroy(&assert_mutex); -} - -extern "C" void xs_assert(long long line) { - pthread_mutex_lock(&assert_mutex); - if (assert_count >= 0) { - printf("Assertion failed at line %lld.\n", line); - assert_count++; - } - pthread_mutex_unlock(&assert_mutex); -} - -void sig_handler(int signo) { - if (signal_num != 0) - exit(0); - signal_num = signo; -} diff --git a/libraries/difftest/src/test/csrc/common/common.h b/libraries/difftest/src/test/csrc/common/common.h deleted file mode 100644 index 0f8f25d..0000000 --- a/libraries/difftest/src/test/csrc/common/common.h +++ /dev/null @@ -1,57 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#ifndef __COMMON_H -#define __COMMON_H - -#include -#include -#include -#include -#include -#include - -#ifndef NUM_CORES -#define NUM_CORES 1 -#endif - -#define ANSI_COLOR_RED "\x1b[31m" -#define ANSI_COLOR_GREEN "\x1b[32m" -#define ANSI_COLOR_YELLOW "\x1b[33m" -#define ANSI_COLOR_BLUE "\x1b[34m" -#define ANSI_COLOR_MAGENTA "\x1b[35m" -#define ANSI_COLOR_CYAN "\x1b[36m" -#define ANSI_COLOR_RESET "\x1b[0m" - -#define eprintf(...) fprintf(stdout, ## __VA_ARGS__) - -#ifdef WITH_DRAMSIM3 -#include "cosimulation.h" -#endif - -extern int assert_count; -void assert_init(); -void assert_finish(); - -extern int signal_num; -void sig_handler(int signo); - -typedef uint64_t rtlreg_t; -typedef uint64_t paddr_t; -typedef uint64_t vaddr_t; -typedef uint16_t ioaddr_t; - -#endif // __COMMON_H diff --git a/libraries/difftest/src/test/csrc/common/compress.cpp b/libraries/difftest/src/test/csrc/common/compress.cpp deleted file mode 100644 index 70ba6c0..0000000 --- a/libraries/difftest/src/test/csrc/common/compress.cpp +++ /dev/null @@ -1,142 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#include "compress.h" - -double calcTime(timeval s, timeval e) { - double sec, usec; - sec = e.tv_sec - s.tv_sec; - usec = e.tv_usec - s.tv_usec; - return 1000*sec + usec/1000.0; -} - -// Return whether the file is a gz file -int isGzFile(const char *filename) { - assert(filename != NULL && strlen(filename) >= 4); - return !strcmp(filename + (strlen(filename) - 3), ".gz"); -} - -long snapshot_compressToFile(uint8_t *ptr, const char *filename, long buf_size) { - gzFile compressed_mem = gzopen(filename, "wb"); - - if (compressed_mem == NULL) { - printf("Can't open compressed binary file '%s'", filename); - return -1; - } - - long curr_size = 0; - const uint32_t chunk_size = 16384; - long *temp_page = new long[chunk_size]; - long *pmem_current = (long*)ptr; - - while (curr_size < buf_size) { - memset(temp_page, 0, chunk_size * sizeof(long)); - for (uint32_t x = 0; x < chunk_size / sizeof(long); x++) { - pmem_current = (long*)((uint8_t*)ptr + curr_size + x * sizeof(long)); - if (*pmem_current != 0) { - *(temp_page + x) = *pmem_current; - } - } - uint32_t bytes_write = gzwrite(compressed_mem, temp_page, chunk_size); - if (bytes_write <= 0) { printf("Compress failed\n"); break; } - curr_size += bytes_write; - // assert(bytes_write % sizeof(long) == 0); - - } - // printf("Write %lu bytes from gz stream in total\n", curr_size); - - delete [] temp_page; - - if (gzclose(compressed_mem)) { - printf("Error closing '%s'\n", filename); - return -1; - } - return curr_size; -} - -long readFromGz(void* ptr, const char *file_name, long buf_size, uint8_t load_type) { - assert(buf_size > 0); - gzFile compressed_mem = gzopen(file_name, "rb"); - - if (compressed_mem == NULL) { - printf("Can't open compressed binary file '%s'", file_name); - return -1; - } - - uint64_t curr_size = 0; - const uint32_t chunk_size = 16384; - - // Only load from RAM need check - if (load_type == LOAD_RAM && (buf_size % chunk_size) != 0) { - printf("buf_size must be divisible by chunk_size\n"); - assert(0); - } - - long *temp_page = new long[chunk_size]; - long *pmem_current = (long*)ptr; - - while (curr_size < buf_size) { - uint32_t bytes_read = gzread(compressed_mem, temp_page, chunk_size); - if (bytes_read == 0) { - break; - } - assert(load_type != LOAD_RAM || bytes_read % sizeof(long) == 0); - for (uint32_t x = 0; x < bytes_read / sizeof(long) + 1; x++) { - if (*(temp_page + x) != 0) { - pmem_current = (long*)((uint8_t*)ptr + curr_size + x * sizeof(long)); - *pmem_current = *(temp_page + x); - } - } - curr_size += bytes_read; - } - - if(gzread(compressed_mem, temp_page, chunk_size) > 0) { - printf("File size is larger than buf_size!\n"); - assert(0); - } - // printf("Read %lu bytes from gz stream in total\n", curr_size); - - delete [] temp_page; - - if(gzclose(compressed_mem)) { - printf("Error closing '%s'\n", file_name); - return -1; - } - return curr_size; -} - -void nonzero_large_memcpy(const void* __restrict dest, const void* __restrict src, size_t n) { - uint64_t *_dest = (uint64_t *)dest; - uint64_t *_src = (uint64_t *)src; - while (n >= sizeof(uint64_t)) { - if (*_src != 0) { - *_dest = *_src; - } - _dest++; - _src++; - n -= sizeof(uint64_t); - } - if (n > 0) { - uint8_t *dest8 = (uint8_t *)_dest; - uint8_t *src8 = (uint8_t *)_src; - while (n > 0) { - *dest8 = *src8; - dest8++; - src8++; - n--; - } - } -} diff --git a/libraries/difftest/src/test/csrc/common/compress.h b/libraries/difftest/src/test/csrc/common/compress.h deleted file mode 100644 index b49bd1c..0000000 --- a/libraries/difftest/src/test/csrc/common/compress.h +++ /dev/null @@ -1,36 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#ifndef COMPRESS_H -#define COMPRESS_H - -#include "common.h" - -#include -#include - -#define LOAD_SNAPSHOT 0 -#define LOAD_RAM 1 - -double calcTime(timeval s, timeval e); - -int isGzFile(const char *filename); -long snapshot_compressToFile(uint8_t *ptr, const char *filename, long buf_size); -long readFromGz(void* ptr, const char *file_name, long buf_size, uint8_t load_type); - -void nonzero_large_memcpy(const void* __restrict dest, const void* __restrict src, size_t n); - -#endif diff --git a/libraries/difftest/src/test/csrc/common/device.cpp b/libraries/difftest/src/test/csrc/common/device.cpp deleted file mode 100644 index 570f7ad..0000000 --- a/libraries/difftest/src/test/csrc/common/device.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#include -#include - -#include "device.h" - -void send_key(uint8_t, bool); -void init_sdl(void); - -void init_uart(void); -extern "C" void init_sd(void); -extern "C" void init_flash(void); - -static struct timeval boot = {}; - -void init_device(void) { - init_sdl(); - init_uart(); - init_sd(); - // init_flash(); - gettimeofday(&boot, NULL); -} - -void poll_event() { - SDL_Event event; - while (SDL_PollEvent(&event)) { - switch (event.type) { - case SDL_QUIT: break; //set_abort(); - - // If a key was pressed - case SDL_KEYDOWN: - case SDL_KEYUP: { - uint8_t k = event.key.keysym.scancode; - bool is_keydown = (event.key.type == SDL_KEYDOWN); - send_key(k, is_keydown); - break; - } - default: break; - } - } -} - -uint32_t uptime(void) { - struct timeval t; - gettimeofday(&t, NULL); - - int s = t.tv_sec - boot.tv_sec; - int us = t.tv_usec - boot.tv_usec; - if (us < 0) { - s --; - us += 1000000; - } - - return s * 1000 + (us + 500) / 1000; -} diff --git a/libraries/difftest/src/test/csrc/common/device.h b/libraries/difftest/src/test/csrc/common/device.h deleted file mode 100644 index 240a579..0000000 --- a/libraries/difftest/src/test/csrc/common/device.h +++ /dev/null @@ -1,26 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#ifndef __DEVICE_H__ -#define __DEVICE_H__ - -#include "common.h" - -void init_device(); -void poll_event(); -uint32_t uptime(void); - -#endif diff --git a/libraries/difftest/src/test/csrc/common/flash.cpp b/libraries/difftest/src/test/csrc/common/flash.cpp deleted file mode 100644 index a768db8..0000000 --- a/libraries/difftest/src/test/csrc/common/flash.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#include "common.h" -#include "flash.h" - -FILE *flash_fp = NULL; - -extern "C" { - -void flash_read(uint32_t addr, uint64_t *data) { -#ifdef USE_BIN - fseek(flash_fp, addr, SEEK_SET); - fread(data, 8, 1, flash_fp); -#else - uint32_t index = addr & 0x00000fff; - switch(index>>3){ - case 0 : - *data = 0x01f292930010029b; - break; - case 1 : - *data = 0x00028067; - break; - default : - *data = 0; - } -#endif -} - -void init_flash(void) { -#ifdef USE_BIN - - flash_fp = fopen("/home/jy/Project/nexus-am/tests/cputest/build/dummy-riscv64-noop.bin", "r"); - if(!flash_fp) - { - eprintf(ANSI_COLOR_MAGENTA "[warning] flash img not found\n"); - } - printf("use bin as a flash!\n"); -#else - printf("use fixed 3 instructions!\n"); -#endif -} - -} diff --git a/libraries/difftest/src/test/csrc/common/flash.h b/libraries/difftest/src/test/csrc/common/flash.h deleted file mode 100644 index 6284add..0000000 --- a/libraries/difftest/src/test/csrc/common/flash.h +++ /dev/null @@ -1,22 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#ifndef __FLASH_H -#define __FLASH_H - -#include "common.h" - -#endif // __FLASH_H diff --git a/libraries/difftest/src/test/csrc/common/keyboard.cpp b/libraries/difftest/src/test/csrc/common/keyboard.cpp deleted file mode 100644 index 6e6e632..0000000 --- a/libraries/difftest/src/test/csrc/common/keyboard.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#include "common.h" -#include "macro.h" -#include - -// Note that this is not the standard -#define _KEYS(f) \ - f(ESCAPE) f(F1) f(F2) f(F3) f(F4) f(F5) f(F6) f(F7) f(F8) f(F9) f(F10) f(F11) f(F12) \ -f(GRAVE) f(1) f(2) f(3) f(4) f(5) f(6) f(7) f(8) f(9) f(0) f(MINUS) f(EQUALS) f(BACKSPACE) \ -f(TAB) f(Q) f(W) f(E) f(R) f(T) f(Y) f(U) f(I) f(O) f(P) f(LEFTBRACKET) f(RIGHTBRACKET) f(BACKSLASH) \ -f(CAPSLOCK) f(A) f(S) f(D) f(F) f(G) f(H) f(J) f(K) f(L) f(SEMICOLON) f(APOSTROPHE) f(RETURN) \ -f(LSHIFT) f(Z) f(X) f(C) f(V) f(B) f(N) f(M) f(COMMA) f(PERIOD) f(SLASH) f(RSHIFT) \ -f(LCTRL) f(APPLICATION) f(LALT) f(SPACE) f(RALT) f(RCTRL) \ -f(UP) f(DOWN) f(LEFT) f(RIGHT) f(INSERT) f(DELETE) f(HOME) f(END) f(PAGEUP) f(PAGEDOWN) - -#define _KEY_NAME(k) _KEY_##k, - -enum { - _KEY_NONE = 0, - MAP(_KEYS, _KEY_NAME) -}; - -#define SDL_KEYMAP(k) [concat(SDL_SCANCODE_, k)] = concat(_KEY_, k), -static const uint32_t keymap[256] = { -// MAP(_KEYS, SDL_KEYMAP) - 0, 0, 0, 0, 43, 60, 58, 45, 31, 46, 47, 48, 36, 49, 50, 51, - 62, 61, 37, 38, 29, 32, 44, 33, 35, 59, 30, 57, 34, 56, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 54, 1, 27, 28, 70, 25, 26, 39, - 40, 41, 0, 52, 53, 14, 63, 64, 65, 42, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 0, 0, 0, 77, 79, 81, 78, 80, 82, 76, - 75, 74, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 67, 55, 69, 0, 72, 66, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; - -#define KEY_QUEUE_LEN 1024 -static int key_queue[KEY_QUEUE_LEN]; -static int key_f = 0, key_r = 0; - -#define KEYDOWN_MASK 0x8000 - -void send_key(uint8_t scancode, bool is_keydown) { - if (keymap[scancode] != _KEY_NONE) { - uint32_t am_scancode = keymap[scancode] | (is_keydown ? KEYDOWN_MASK : 0); - key_queue[key_r] = am_scancode; - key_r = (key_r + 1) % KEY_QUEUE_LEN; - // detect key queue overflow - assert(key_r != key_f); - } -} - -uint32_t read_key(void) { - uint32_t key = _KEY_NONE; - if (key_f != key_r) { - key = key_queue[key_f]; - key_f = (key_f + 1) % KEY_QUEUE_LEN; - } - return key; -} diff --git a/libraries/difftest/src/test/csrc/common/macro.h b/libraries/difftest/src/test/csrc/common/macro.h deleted file mode 100644 index 9043474..0000000 --- a/libraries/difftest/src/test/csrc/common/macro.h +++ /dev/null @@ -1,31 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#ifndef __MACRO_H__ -#define __MACRO_H__ - -#define str_temp(x) #x -#define str(x) str_temp(x) - -#define concat_temp(x, y) x ## y -#define concat(x, y) concat_temp(x, y) -#define concat3(x, y, z) concat(concat(x, y), z) -#define concat4(x, y, z, w) concat3(concat(x, y), z, w) -#define concat5(x, y, z, v, w) concat4(concat(x, y), z, v, w) - -#define MAP(c, f) c(f) - -#endif diff --git a/libraries/difftest/src/test/csrc/common/ram.cpp b/libraries/difftest/src/test/csrc/common/ram.cpp deleted file mode 100644 index e452527..0000000 --- a/libraries/difftest/src/test/csrc/common/ram.cpp +++ /dev/null @@ -1,453 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#include - -#include "common.h" -#include "ram.h" -#include "compress.h" - -// #define TLB_UNITTEST - -#ifdef WITH_DRAMSIM3 -#include "cosimulation.h" -CoDRAMsim3 *dram = NULL; -#endif - -static uint64_t *ram; -static long img_size = 0; -static pthread_mutex_t ram_mutex; - -void* get_img_start() { return &ram[0]; } -long get_img_size() { return img_size; } -void* get_ram_start() { return &ram[0]; } -long get_ram_size() { return EMU_RAM_SIZE; } - -#ifdef TLB_UNITTEST -void addpageSv39() { -//three layers -//addr range: 0x0000000080000000 - 0x0000000088000000 for 128MB from 2GB - 2GB128MB -//the first layer: one entry for 1GB. (512GB in total by 512 entries). need the 2th entries -//the second layer: one entry for 2MB. (1GB in total by 512 entries). need the 0th-63rd entries -//the third layer: one entry for 4KB (2MB in total by 512 entries). need 64 with each one all -#define TOPSIZE (128 * 1024 * 1024) -#define PAGESIZE (4 * 1024) // 4KB = 2^12B -#define ENTRYNUM (PAGESIZE / 8) //512 2^9 -#define PTEVOLUME (PAGESIZE * ENTRYNUM) // 2MB -#define PTENUM (TOPSIZE / PTEVOLUME) // 128MB / 2MB = 64 -#define PDDENUM 1 -#define PDENUM 1 -#define PDDEADDR (0x88000000 - (PAGESIZE * (PTENUM + 2))) //0x88000000 - 0x1000*66 -#define PDEADDR (0x88000000 - (PAGESIZE * (PTENUM + 1))) //0x88000000 - 0x1000*65 -#define PTEADDR(i) (0x88000000 - (PAGESIZE * PTENUM) + (PAGESIZE * i)) //0x88000000 - 0x100*64 -#define PTEMMIONUM 128 -#define PDEMMIONUM 1 -#define PTEDEVNUM 128 -#define PDEDEVNUM 1 - - uint64_t pdde[ENTRYNUM]; - uint64_t pde[ENTRYNUM]; - uint64_t pte[PTENUM][ENTRYNUM]; - - // special addr for mmio 0x40000000 - 0x4fffffff - uint64_t pdemmio[ENTRYNUM]; - uint64_t ptemmio[PTEMMIONUM][ENTRYNUM]; - - // special addr for internal devices 0x30000000-0x3fffffff - uint64_t pdedev[ENTRYNUM]; - uint64_t ptedev[PTEDEVNUM][ENTRYNUM]; - - // dev: 0x30000000-0x3fffffff - pdde[0] = (((PDDEADDR-PAGESIZE*(PDEMMIONUM+PTEMMIONUM+PDEDEVNUM)) & 0xfffff000) >> 2) | 0x1; - - for (int i = 0; i < PTEDEVNUM; i++) { - pdedev[ENTRYNUM-PTEDEVNUM+i] = (((PDDEADDR-PAGESIZE*(PDEMMIONUM+PTEMMIONUM+PDEDEVNUM+PTEDEVNUM-i)) & 0xfffff000) >> 2) | 0x1; - } - - for(int outidx = 0; outidx < PTEDEVNUM; outidx++) { - for(int inidx = 0; inidx < ENTRYNUM; inidx++) { - ptedev[outidx][inidx] = (((0x30000000 + outidx*PTEVOLUME + inidx*PAGESIZE) & 0xfffff000) >> 2) | 0xf; - } - } - - // mmio: 0x40000000 - 0x4fffffff - pdde[1] = (((PDDEADDR-PAGESIZE*PDEMMIONUM) & 0xfffff000) >> 2) | 0x1; - - for(int i = 0; i < PTEMMIONUM; i++) { - pdemmio[i] = (((PDDEADDR-PAGESIZE*(PTEMMIONUM+PDEMMIONUM-i)) & 0xfffff000) >> 2) | 0x1; - } - - for(int outidx = 0; outidx < PTEMMIONUM; outidx++) { - for(int inidx = 0; inidx < ENTRYNUM; inidx++) { - ptemmio[outidx][inidx] = (((0x40000000 + outidx*PTEVOLUME + inidx*PAGESIZE) & 0xfffff000) >> 2) | 0xf; - } - } - - //0x800000000 - 0x87ffffff - pdde[2] = ((PDEADDR & 0xfffff000) >> 2) | 0x1; - //pdde[2] = ((0x80000000&0xc0000000) >> 2) | 0xf; - - for(int i = 0; i < PTENUM ;i++) { - // pde[i] = ((PTEADDR(i)&0xfffff000)>>2) | 0x1; - pde[i] = (((0x80000000+i*2*1024*1024)&0xffe00000)>>2) | 0xf; - } - - for(int outidx = 0; outidx < PTENUM; outidx++ ) { - for(int inidx = 0; inidx < ENTRYNUM; inidx++ ) { - pte[outidx][inidx] = (((0x80000000 + outidx*PTEVOLUME + inidx*PAGESIZE) & 0xfffff000)>>2) | 0xf; - } - } - - printf("try to add identical tlb page to ram\n"); - memcpy((char *)ram+(TOPSIZE-PAGESIZE*(PTENUM+PDDENUM+PDENUM+PDEMMIONUM+PTEMMIONUM+PDEDEVNUM+PTEDEVNUM)),ptedev,PAGESIZE*PTEDEVNUM); - memcpy((char *)ram+(TOPSIZE-PAGESIZE*(PTENUM+PDDENUM+PDENUM+PDEMMIONUM+PTEMMIONUM+PDEDEVNUM)),pdedev,PAGESIZE*PDEDEVNUM); - memcpy((char *)ram+(TOPSIZE-PAGESIZE*(PTENUM+PDDENUM+PDENUM+PDEMMIONUM+PTEMMIONUM)),ptemmio, PAGESIZE*PTEMMIONUM); - memcpy((char *)ram+(TOPSIZE-PAGESIZE*(PTENUM+PDDENUM+PDENUM+PDEMMIONUM)), pdemmio, PAGESIZE*PDEMMIONUM); - memcpy((char *)ram+(TOPSIZE-PAGESIZE*(PTENUM+PDDENUM+PDENUM)), pdde, PAGESIZE*PDDENUM); - memcpy((char *)ram+(TOPSIZE-PAGESIZE*(PTENUM+PDENUM)), pde, PAGESIZE*PDENUM); - memcpy((char *)ram+(TOPSIZE-PAGESIZE*PTENUM), pte, PAGESIZE*PTENUM); -} -#endif - -void init_ram(const char *img) { - assert(img != NULL); - - printf("The image is %s\n", img); - - // initialize memory using Linux mmap - printf("Using simulated %luMB RAM\n", EMU_RAM_SIZE / (1024 * 1024)); - ram = (uint64_t *)mmap(NULL, EMU_RAM_SIZE, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); - if (ram == (uint64_t *)MAP_FAILED) { - printf("Cound not mmap 0x%lx bytes\n", EMU_RAM_SIZE); - assert(0); - } - -#ifdef TLB_UNITTEST - //new add - addpageSv39(); - //new end -#endif - - int ret; - if (isGzFile(img)) { - printf("Gzip file detected and loading image from extracted gz file\n"); - img_size = readFromGz(ram, img, EMU_RAM_SIZE, LOAD_RAM); - assert(img_size >= 0); - } - else { - FILE *fp = fopen(img, "rb"); - if (fp == NULL) { - printf("Can not open '%s'\n", img); - assert(0); - } - - fseek(fp, 0, SEEK_END); - img_size = ftell(fp); - if (img_size > EMU_RAM_SIZE) { - img_size = EMU_RAM_SIZE; - } - - fseek(fp, 0, SEEK_SET); - ret = fread(ram, img_size, 1, fp); - - assert(ret == 1); - fclose(fp); - } - -#ifdef WITH_DRAMSIM3 - #if !defined(DRAMSIM3_CONFIG) || !defined(DRAMSIM3_OUTDIR) - #error DRAMSIM3_CONFIG or DRAMSIM3_OUTDIR is not defined - #endif - assert(dram == NULL); - dram = new ComplexCoDRAMsim3(DRAMSIM3_CONFIG, DRAMSIM3_OUTDIR); - // dram = new SimpleCoDRAMsim3(90); -#endif - - pthread_mutex_init(&ram_mutex, 0); - -} - -void ram_finish() { - munmap(ram, EMU_RAM_SIZE); -#ifdef WITH_DRAMSIM3 - dramsim3_finish(); -#endif - pthread_mutex_destroy(&ram_mutex); -} - - -extern "C" uint64_t ram_read_helper(uint8_t en, uint64_t rIdx) { - if (!ram) - return 0; - if (en && rIdx >= EMU_RAM_SIZE / sizeof(uint64_t)) { - rIdx %= EMU_RAM_SIZE / sizeof(uint64_t); - } - pthread_mutex_lock(&ram_mutex); - uint64_t rdata = (en) ? ram[rIdx] : 0; - pthread_mutex_unlock(&ram_mutex); - return rdata; -} - -extern "C" void ram_write_helper(uint64_t wIdx, uint64_t wdata, uint64_t wmask, uint8_t wen) { - if (wen && ram) { - if (wIdx >= EMU_RAM_SIZE / sizeof(uint64_t)) { - printf("ERROR: ram wIdx = 0x%lx out of bound!\n", wIdx); - assert(wIdx < EMU_RAM_SIZE / sizeof(uint64_t)); - } - pthread_mutex_lock(&ram_mutex); - ram[wIdx] = (ram[wIdx] & ~wmask) | (wdata & wmask); - pthread_mutex_unlock(&ram_mutex); - } -} - -uint64_t pmem_read(uint64_t raddr) { - if (raddr % sizeof(uint64_t)) { - printf("Warning: pmem_read only supports 64-bit aligned memory access\n"); - } - raddr -= 0x80000000; - return ram_read_helper(1, raddr / sizeof(uint64_t)); -} - -void pmem_write(uint64_t waddr, uint64_t wdata) { - if (waddr % sizeof(uint64_t)) { - printf("Warning: pmem_write only supports 64-bit aligned memory access\n"); - } - waddr -= 0x80000000; - return ram_write_helper(waddr / sizeof(uint64_t), wdata, -1UL, 1); -} - -#ifdef WITH_DRAMSIM3 -#include - -void dramsim3_finish() { - delete dram; -} - -#define MAX_AXI_DATA_LEN 8 - -// currently does not support masked read or write -struct dramsim3_meta { - uint8_t len; - uint8_t size; - uint8_t offset; - uint8_t id; - uint64_t data[MAX_AXI_DATA_LEN]; -}; - -void axi_read_data(const axi_ar_channel &ar, dramsim3_meta *meta) { - uint64_t address = ar.addr % EMU_RAM_SIZE; - uint64_t beatsize = 1 << ar.size; - uint8_t beatlen = ar.len + 1; - uint64_t transaction_size = beatsize * beatlen; - assert((transaction_size % sizeof(uint64_t)) == 0); - // axi burst FIXED - if (ar.burst == 0x0) { - std::cout << "axi burst FIXED not supported!" << std::endl; - assert(0); - } - // axi burst INCR - else if (ar.burst == 1) { - assert(transaction_size / sizeof(uint64_t) <= MAX_AXI_DATA_LEN); - for (int i = 0; i < transaction_size / sizeof(uint64_t); i++) { - meta->data[i] = ram[address / sizeof(uint64_t)]; - address += sizeof(uint64_t); - } - } - // axi burst WRAP - else if (ar.burst == 2) { - uint64_t low = (address / transaction_size) * transaction_size; - uint64_t high = low + transaction_size; - assert(transaction_size / sizeof(uint64_t) <= MAX_AXI_DATA_LEN); - for (int i = 0; i < transaction_size / sizeof(uint64_t); i++) { - if (address == high) { - address = low; - } - meta->data[i] = ram[address / sizeof(uint64_t)]; - address += sizeof(uint64_t); - } - } - else { - std::cout << "reserved arburst!" << std::endl; - assert(0); - } - meta->len = beatlen; - meta->size = beatsize; - meta->offset = 0; - meta->id = ar.id; -} - -CoDRAMRequest *dramsim3_request(const axi_channel &axi, bool is_write) { - uint64_t address = (is_write) ? axi.aw.addr : axi.ar.addr; - dramsim3_meta *meta = new dramsim3_meta; - // WRITE - if (is_write) { - meta->len = axi.aw.len + 1; - meta->size = 1 << axi.aw.size; - meta->offset = 0; - meta->id = axi.aw.id; - } - else { - axi_read_data(axi.ar, meta); - } - CoDRAMRequest *req = new CoDRAMRequest(); - req->address = address; - req->is_write = is_write; - req->meta = meta; - return req; -} - -static CoDRAMResponse *wait_resp_r = NULL; -static CoDRAMResponse *wait_resp_b = NULL; -static CoDRAMRequest *wait_req_w = NULL; -// currently only accept one in-flight read + one in-flight write -static uint64_t raddr, roffset = 0, rlen; -static uint64_t waddr, woffset = 0, wlen; - -void dramsim3_helper_rising(const axi_channel &axi) { - // ticks DRAMsim3 according to CPU_FREQ:DRAM_FREQ - dram->tick(); - - // read data fire: check the last read request - if (axi_check_rdata_fire(axi)) { - if (wait_resp_r == NULL) { - printf("ERROR: There's no in-flight read request.\n"); - assert(wait_resp_r != NULL); - } - dramsim3_meta *meta = static_cast(wait_resp_r->req->meta); - meta->offset++; - // check whether the last rdata response has finished - if (meta->offset == meta->len) { - delete meta; - delete wait_resp_r->req; - delete wait_resp_r; - wait_resp_r = NULL; - } - } - - // read address fire: accept a new request - if (axi_check_raddr_fire(axi)) { - dram->add_request(dramsim3_request(axi, false)); - } - - // the last write transaction is acknowledged - if (axi_check_wack_fire(axi)) { - if (wait_resp_b == NULL) { - printf("ERROR: write response fire for nothing in-flight.\n"); - assert(wait_resp_b != NULL); - } - // flush data to memory - uint64_t waddr = wait_resp_b->req->address % EMU_RAM_SIZE; - dramsim3_meta *meta = static_cast(wait_resp_b->req->meta); - void *start_addr = ram + (waddr / sizeof(uint64_t)); - memcpy(start_addr, meta->data, meta->len * meta->size); - for (int i = 0; i < meta->len; i++) { - // uint64_t address = wait_resp_b->req->address % EMU_RAM_SIZE; - // ram[address / sizeof(uint64_t) + i] = meta->data[i]; - // printf("flush write to memory[0x%ld] = 0x%lx\n", address) - } - delete meta; - delete wait_resp_b->req; - delete wait_resp_b; - wait_resp_b = NULL; - } - - // write address fire: accept a new write request - if (axi_check_waddr_fire(axi)) { - if (wait_req_w != NULL) { - printf("ERROR: The last write request has not finished.\n"); - assert(wait_req_w == NULL); - } - wait_req_w = dramsim3_request(axi, true); - // printf("accept a new write request to addr = 0x%lx, len = %d\n", axi.aw.addr, axi.aw.len); - } - - // write data fire: for the last write transaction - if (axi_check_wdata_fire(axi)) { - if (wait_req_w == NULL) { - printf("ERROR: wdata fire for nothing in-flight.\n"); - assert(wait_req_w != NULL); - } - dramsim3_meta *meta = static_cast(wait_req_w->meta); - void *data_start = meta->data + meta->offset * meta->size / sizeof(uint64_t); - axi_get_wdata(axi, data_start, meta->size); - meta->offset++; - // printf("accept a new write data\n"); - } - if (wait_req_w) { - dramsim3_meta *meta = static_cast(wait_req_w->meta); - // if this is the last beat - if (meta->offset == meta->len && dram->will_accept(wait_req_w->address, true)) { - dram->add_request(wait_req_w); - wait_req_w = NULL; - } - } -} - -void dramsim3_helper_falling(axi_channel &axi) { - // default branch to avoid wrong handshake - axi.aw.ready = 0; - axi.w.ready = 0; - axi.b.valid = 0; - axi.ar.ready = 0; - axi.r.valid = 0; - - // RDATA: if finished, we try the next rdata response - if (!wait_resp_r) - wait_resp_r = dram->check_read_response(); - // if there's some data response, put it onto axi bus - if (wait_resp_r) { - dramsim3_meta *meta = static_cast(wait_resp_r->req->meta); - // printf("meta->size %d offset %d\n", meta->size, meta->offset*meta->size/sizeof(uint64_t)); - void *data_start = meta->data + meta->offset*meta->size / sizeof(uint64_t); - axi_put_rdata(axi, data_start, meta->size, meta->offset == meta->len - 1, meta->id); - } - - // RADDR: check whether the read request can be accepted - axi_addr_t raddr; - if (axi_get_raddr(axi, raddr) && dram->will_accept(raddr, false)) { - axi_accept_raddr(axi); - // printf("try to accept read request to 0x%lx\n", raddr); - } - - // WREQ: check whether the write request can be accepted - // Note: block the next write here to simplify logic - axi_addr_t waddr; - if (wait_req_w == NULL && axi_get_waddr(axi, waddr) && dram->will_accept(waddr, true)) { - axi_accept_waddr(axi); - axi_accept_wdata(axi); - // printf("try to accept write request to 0x%lx\n", waddr); - } - - // WDATA: check whether the write data can be accepted - if (wait_req_w != NULL && dram->will_accept(wait_req_w->address, true)) { - dramsim3_meta *meta = static_cast(wait_req_w->meta); - // we have to check whether the last finished write request has been accepted by dram - if (meta->offset != meta->len) { - axi_accept_wdata(axi); - } - } - - // WRESP: if finished, we try the next write response - if (!wait_resp_b) - wait_resp_b = dram->check_write_response(); - // if there's some write response, put it onto axi bus - if (wait_resp_b) { - dramsim3_meta *meta = static_cast(wait_resp_b->req->meta); - axi_put_wack(axi, meta->id); - } -} - -#endif diff --git a/libraries/difftest/src/test/csrc/common/ram.h b/libraries/difftest/src/test/csrc/common/ram.h deleted file mode 100644 index e9aa4a7..0000000 --- a/libraries/difftest/src/test/csrc/common/ram.h +++ /dev/null @@ -1,44 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#ifndef __RAM_H -#define __RAM_H - -#include "common.h" - -// #define EMU_RAM_SIZE (256 * 1024 * 1024UL) -#define EMU_RAM_SIZE (8 * 1024 * 1024 * 1024UL) - -void init_ram(const char *img); -void ram_finish(); -void* get_ram_start(); -long get_ram_size(); - -void* get_img_start(); -long get_img_size(); - -uint64_t pmem_read(uint64_t raddr); -void pmem_write(uint64_t waddr, uint64_t wdata); - -#ifdef WITH_DRAMSIM3 -#include "axi4.h" - -void dramsim3_finish(); -void dramsim3_helper_rising(const struct axi_channel &axi); -void dramsim3_helper_falling(struct axi_channel &axi); -#endif - -#endif diff --git a/libraries/difftest/src/test/csrc/common/sdcard.cpp b/libraries/difftest/src/test/csrc/common/sdcard.cpp deleted file mode 100644 index 111577d..0000000 --- a/libraries/difftest/src/test/csrc/common/sdcard.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#include "common.h" -#include "sdcard.h" - -FILE *fp = NULL; - -extern "C" { - -void sd_setaddr(uint32_t addr) { - fseek(fp, addr, SEEK_SET); - //printf("set addr to 0x%08x\n", addr); - //assert(0); -} - -void sd_read(uint32_t *data) { - fread(data, 4, 1, fp); - //printf("read data = 0x%08x\n", *data); - //assert(0); -} - -void init_sd(void) { - fp = fopen("/home/xyn/workloads/debian/riscv-debian.img", "r"); - if(!fp) - { - eprintf(ANSI_COLOR_MAGENTA "[warning] sdcard img not found\n"); - } -} - -} diff --git a/libraries/difftest/src/test/csrc/common/sdcard.h b/libraries/difftest/src/test/csrc/common/sdcard.h deleted file mode 100644 index 46cfe16..0000000 --- a/libraries/difftest/src/test/csrc/common/sdcard.h +++ /dev/null @@ -1,24 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#ifndef __SDCARD_H -#define __SDCARD_H - -#include "common.h" - -extern FILE *fp; - -#endif // __SDCARD_H diff --git a/libraries/difftest/src/test/csrc/common/uart.cpp b/libraries/difftest/src/test/csrc/common/uart.cpp deleted file mode 100644 index 3c8d8cf..0000000 --- a/libraries/difftest/src/test/csrc/common/uart.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#include "common.h" -#include "stdlib.h" - -#define QUEUE_SIZE 1024 -static char queue[QUEUE_SIZE] = {}; -static int f = 0, r = 0; - -static void uart_enqueue(char ch) { - int next = (r + 1) % QUEUE_SIZE; - if (next != f) { - // not full - queue[r] = ch; - r = next; - } -} - -static int uart_dequeue(void) { - int k = 0; - if (f != r) { - k = queue[f]; - f = (f + 1) % QUEUE_SIZE; - } else { - static int last = 0; - k = "root\n"[last ++]; - if (last == 5) last = 0; - // generate a random key every 1s for pal - //k = -1;//"uiojkl"[rand()% 6]; - } - return k; -} - -uint32_t uptime(void); -uint8_t uart_getc() { - static uint32_t lasttime = 0; - uint32_t now = uptime(); - - uint8_t ch = -1; - if (now - lasttime > 60 * 1000) { - // 1 minute - eprintf(ANSI_COLOR_RED "now = %ds\n" ANSI_COLOR_RESET, now / 1000); - lasttime = now; - } - // if (now > 4 * 3600 * 1000) { // 4 hours - // ch = uart_dequeue(); - // } - return ch; -} - -extern "C" void uart_getc_legacy(uint8_t *ch) { - static uint32_t lasttime = 0; - uint32_t now = uptime(); - - *ch = -1; - if (now - lasttime > 60 * 1000) { - // 1 minute - eprintf(ANSI_COLOR_RED "now = %ds\n" ANSI_COLOR_RESET, now / 1000); - lasttime = now; - } - if (now > 4 * 3600 * 1000) { // 4 hours - *ch = uart_dequeue(); - } -} - -static void preset_input() { - char rtthread_cmd[128] = "memtrace\n"; - char init_cmd[128] = "2" // choose PAL - "jjjjjjjkkkkkk" // walk to enemy - ; - char busybox_cmd[128] = - "ls\n" - "echo 123\n" - "cd /root/benchmark\n" - "ls\n" - "./stream\n" - "ls\n" - "cd /root/redis\n" - "ls\n" - "ifconfig -a\n" - "./redis-server\n"; - char debian_cmd[128] = "root\n"; - char *buf = debian_cmd; - int i; - for (i = 0; i < strlen(buf); i ++) { - uart_enqueue(buf[i]); - } -} - -void init_uart(void) { - preset_input(); -} diff --git a/libraries/difftest/src/test/csrc/common/vga.cpp b/libraries/difftest/src/test/csrc/common/vga.cpp deleted file mode 100644 index a001424..0000000 --- a/libraries/difftest/src/test/csrc/common/vga.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#include "common.h" - -#include - -//#define SHOW_SCREEN - -#define SCREEN_PORT 0x100 // Note that this is not the standard -#define SCREEN_MMIO 0x4100 -#define SCREEN_H 600 -#define SCREEN_W 800 - -static uint32_t vmem[800 * 600]; - -static SDL_Window *window; -static SDL_Renderer *renderer; -static SDL_Texture *texture; - -extern "C" void put_pixel(uint32_t pixel) { - static int i = 0; - vmem[i++] = pixel; - if (i >= 800 * 600) i = 0; -} - -extern "C" void vmem_sync(void) { -#ifndef SHOW_SCREEN - return; -#endif - SDL_UpdateTexture(texture, NULL, vmem, SCREEN_W * sizeof(uint32_t)); - SDL_RenderClear(renderer); - SDL_RenderCopy(renderer, texture, NULL, NULL); - SDL_RenderPresent(renderer); -} - -void init_sdl() { -#ifndef SHOW_SCREEN - return; -#endif - SDL_Init(SDL_INIT_VIDEO); - SDL_CreateWindowAndRenderer(SCREEN_W, SCREEN_H, 0, &window, &renderer); - SDL_SetWindowTitle(window, "NOOP"); - texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, - SDL_TEXTUREACCESS_STATIC, SCREEN_W, SCREEN_H); -} diff --git a/libraries/difftest/src/test/csrc/vcs/main.cpp b/libraries/difftest/src/test/csrc/vcs/main.cpp deleted file mode 100644 index 29a20a7..0000000 --- a/libraries/difftest/src/test/csrc/vcs/main.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#include -#include -#include "difftest.h" -#include "device.h" -#include "goldenmem.h" -#include "ram.h" - -static bool has_reset = false; -static char bin_file[64] = "ram.bin"; - -extern "C" void set_bin_file(char *s) { - strcpy(bin_file, s); -} - -extern "C" void simv_init() { - printf("simv compiled at %s, %s\n", __DATE__, __TIME__); - setlocale(LC_NUMERIC, ""); - - difftest_init(); - init_goldenmem(); - init_nemuproxy(); - init_device(); - - assert_init(); - init_ram(bin_file); - -} - -extern "C" int simv_step() { - if (assert_count > 0) { - return 1; - } - if (difftest_state() != -1) { - int trapCode = difftest_state(); - switch (trapCode) { - case 0: - eprintf(ANSI_COLOR_GREEN "HIT GOOD TRAP\n" ANSI_COLOR_RESET); - break; - default: - eprintf(ANSI_COLOR_RED "Unknown trap code: %d\n", trapCode); - } - return trapCode + 1; - } - return difftest_step(); -} diff --git a/libraries/difftest/src/test/csrc/verilator/emu.cpp b/libraries/difftest/src/test/csrc/verilator/emu.cpp deleted file mode 100644 index 6053e61..0000000 --- a/libraries/difftest/src/test/csrc/verilator/emu.cpp +++ /dev/null @@ -1,649 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#include "emu.h" -#include "device.h" -#include "sdcard.h" -#include "difftest.h" -#include "nemuproxy.h" -#include "goldenmem.h" -#include "device.h" -#include -#include -#include -#include "ram.h" -#include "zlib.h" -#include "compress.h" -#include - -static inline void print_help(const char *file) { - printf("Usage: %s [OPTION...]\n", file); - printf("\n"); - printf(" -s, --seed=NUM use this seed\n"); - printf(" -C, --max-cycles=NUM execute at most NUM cycles\n"); - printf(" -I, --max-instr=NUM execute at most NUM instructions\n"); - printf(" -W, --warmup-instr=NUM the number of warmup instructions\n"); - printf(" -D, --stat-cycles=NUM the interval cycles of dumping statistics\n"); - printf(" -i, --image=FILE run with this image file\n"); - printf(" -b, --log-begin=NUM display log from NUM th cycle\n"); - printf(" -e, --log-end=NUM stop display log at NUM th cycle\n"); - printf(" --force-dump-result force dump performance counter result in the end\n"); - printf(" --load-snapshot=PATH load snapshot from PATH\n"); - printf(" --no-snapshot disable saving snapshots\n"); - printf(" --dump-wave dump waveform when log is enabled\n"); - printf(" --no-diff disable differential testing\n"); - printf(" --diff=PATH set the path of REF for differential testing\n"); - printf(" -h, --help print program help info\n"); - printf("\n"); -} - -inline EmuArgs parse_args(int argc, const char *argv[]) { - EmuArgs args; - int long_index = 0; - extern const char *difftest_ref_so; - const struct option long_options[] = { - { "load-snapshot", 1, NULL, 0 }, - { "dump-wave", 0, NULL, 0 }, - { "no-snapshot", 0, NULL, 0 }, - { "force-dump-result", 0, NULL, 0 }, - { "diff", 1, NULL, 0 }, - { "no-diff", 0, NULL, 0 }, - { "seed", 1, NULL, 's' }, - { "max-cycles", 1, NULL, 'C' }, - { "max-instr", 1, NULL, 'I' }, - { "warmup-instr", 1, NULL, 'W' }, - { "stat-cycles", 1, NULL, 'D' }, - { "image", 1, NULL, 'i' }, - { "log-begin", 1, NULL, 'b' }, - { "log-end", 1, NULL, 'e' }, - { "help", 0, NULL, 'h' }, - { 0, 0, NULL, 0 } - }; - - int o; - while ( (o = getopt_long(argc, const_cast(argv), - "-s:C:I:W:hi:m:b:e:", long_options, &long_index)) != -1) { - switch (o) { - case 0: - switch (long_index) { - case 0: args.snapshot_path = optarg; continue; - case 1: args.enable_waveform = true; continue; - case 2: args.enable_snapshot = false; continue; - case 3: args.force_dump_result = true; continue; - case 4: difftest_ref_so = optarg; continue; - case 5: args.enable_diff = false; continue; - } - // fall through - default: - print_help(argv[0]); - exit(0); - case 's': - if(std::string(optarg) != "NO_SEED") { - args.seed = atoll(optarg); - printf("Using seed = %d\n", args.seed); - } - break; - case 'C': args.max_cycles = atoll(optarg); break; - case 'I': args.max_instr = atoll(optarg); break; - case 'W': args.warmup_instr = atoll(optarg); break; - case 'D': args.stat_cycles = atoll(optarg); break; - case 'i': args.image = optarg; break; - case 'b': args.log_begin = atoll(optarg); break; - case 'e': args.log_end = atoll(optarg); break; - } - } - - Verilated::commandArgs(argc, argv); // Prepare extra args for TLMonitor - return args; -} - - -Emulator::Emulator(int argc, const char *argv[]): - dut_ptr(new VSimTop), - cycles(0), trapCode(STATE_RUNNING) -{ - args = parse_args(argc, argv); - - // srand - srand(args.seed); - srand48(args.seed); - Verilated::randReset(2); - assert_init(); - - // init core - reset_ncycles(10); - - // init ram - init_ram(args.image); - - difftest_init(); - init_device(); - if (args.enable_diff) { - init_goldenmem(); - init_nemuproxy(); - } - -#if VM_TRACE == 1 -#ifndef EN_FORKWAIT - enable_waveform = args.enable_waveform; - if (enable_waveform) { - Verilated::traceEverOn(true); // Verilator must compute traced signals - tfp = new VerilatedVcdC; - dut_ptr->trace(tfp, 99); // Trace 99 levels of hierarchy - time_t now = time(NULL); - tfp->open(waveform_filename(now)); // Open the dump file - } -#else - // VM_TRACE =1 && EN_FORKWAIT - enable_waveform = false; -#endif -#else - // VM_TRACE =0 - enable_waveform = false; -#endif - -#ifdef VM_SAVABLE - if (args.snapshot_path != NULL) { - printf("loading from snapshot `%s`...\n", args.snapshot_path); - snapshot_load(args.snapshot_path); - auto cycleCnt = difftest[0]->get_trap_event()->cycleCnt; - printf("model cycleCnt = %" PRIu64 "\n", cycleCnt); - } -#endif - - // set log time range and log level - dut_ptr->io_logCtrl_log_begin = args.log_begin; - dut_ptr->io_logCtrl_log_end = args.log_end; -} - -Emulator::~Emulator() { - ram_finish(); - assert_finish(); - -#ifdef VM_SAVABLE - if (args.enable_snapshot && trapCode != STATE_GOODTRAP && trapCode != STATE_LIMIT_EXCEEDED) { - printf("Saving snapshots to file system. Please wait.\n"); - snapshot_slot[0].save(); - snapshot_slot[1].save(); - printf("Please remove unused snapshots manually\n"); - } -#endif -} - -inline void Emulator::reset_ncycles(size_t cycles) { - for(int i = 0; i < cycles; i++) { - dut_ptr->reset = 1; - dut_ptr->clock = 0; - dut_ptr->eval(); - dut_ptr->clock = 1; - dut_ptr->eval(); - dut_ptr->reset = 0; - } -} - -inline void Emulator::single_cycle() { - dut_ptr->clock = 0; - dut_ptr->eval(); - -#ifdef WITH_DRAMSIM3 - axi_channel axi; - axi_copy_from_dut_ptr(dut_ptr, axi); - axi.aw.addr -= 0x80000000UL; - axi.ar.addr -= 0x80000000UL; - dramsim3_helper_rising(axi); -#endif - - dut_ptr->clock = 1; - dut_ptr->eval(); - -#ifdef WITH_DRAMSIM3 - axi_copy_from_dut_ptr(dut_ptr, axi); - axi.aw.addr -= 0x80000000UL; - axi.ar.addr -= 0x80000000UL; - dramsim3_helper_falling(axi); - axi_set_dut_ptr(dut_ptr, axi); -#endif - -#if VM_TRACE == 1 - if (enable_waveform) { - auto trap = difftest[0]->get_trap_event(); - uint64_t cycle = trap->cycleCnt; - uint64_t begin = dut_ptr->io_logCtrl_log_begin; - uint64_t end = dut_ptr->io_logCtrl_log_end; - bool in_range = (begin <= cycle) && (cycle <= end); - if (in_range) { tfp->dump(cycle); } - } -#endif - - if (dut_ptr->io_uart_out_valid) { - printf("%c", dut_ptr->io_uart_out_ch); - fflush(stdout); - } - if (dut_ptr->io_uart_in_valid) { - extern uint8_t uart_getc(); - dut_ptr->io_uart_in_ch = uart_getc(); - } - - cycles++; -} - -uint64_t Emulator::execute(uint64_t max_cycle, uint64_t max_instr) { - - uint32_t t = uptime(); - uint32_t lasttime_poll = 0; - uint32_t lasttime_snapshot = 0; - uint64_t core_max_instr[NUM_CORES]; - for (int i = 0; i < NUM_CORES; i++) { - core_max_instr[i] = max_instr; - } - -#ifdef EN_FORKWAIT - printf("[INFO] enable fork wait..\n"); - pid_t pid =-1; - pid_t originPID = getpid(); - int status = -1; - int slotCnt = 1; - int waitProcess = 0; - uint32_t timer = 0; - std::list pidSlot = {}; - enable_waveform = false; - - //first process as a control process - if ((pid = fork()) < 0) { - perror("First fork failed..\n"); - FAIT_EXIT; - } else if (pid > 0) { //parent process - printf("[%d] Control process first fork...child: %d\n ", getpid(), pid); - prctl(PR_SET_CHILD_SUBREAPER, 1, 0, 0, 0); - forkshm.shwait(); - printf("[%d] Simulation finished, Control process exit..", getpid()); - return cycles; - } else { - forkshm.info->exitNum++; - forkshm.info->flag = true; - pidSlot.insert(pidSlot.begin(), getpid()); - } -#endif - -#if VM_COVERAGE == 1 - // we dump coverage into files at the end - // since we are not sure when an emu will stop - // we distinguish multiple dat files by emu start time - time_t coverage_start_time = time(NULL); -#endif - - while (!Verilated::gotFinish() && trapCode == STATE_RUNNING) { - t = uptime(); - - if (t - lasttime_poll > 100) { - poll_event(); - lasttime_poll = t; - } - - // cycle limitation - if (!max_cycle) { - trapCode = STATE_LIMIT_EXCEEDED; - break; - } - // instruction limitation - for (int i = 0; i < NUM_CORES; i++) { - auto trap = difftest[i]->get_trap_event(); - if (trap->instrCnt >= core_max_instr[i]) { - trapCode = STATE_LIMIT_EXCEEDED; - break; - } - } - // assertions - if (assert_count > 0) { - eprintf("The simulation stopped. There might be some assertion failed.\n"); - trapCode = STATE_ABORT; - break; - } - // signals - if (signal_num != 0) { - trapCode = STATE_SIG; - } - if (trapCode != STATE_RUNNING) { - break; - } - - for (int i = 0; i < NUM_CORES; i++) { - auto trap = difftest[i]->get_trap_event(); - if (trap->instrCnt >= args.warmup_instr) { - printf("Warmup finished. The performance counters will be dumped and then reset.\n"); - dut_ptr->io_perfInfo_clean = 1; - dut_ptr->io_perfInfo_dump = 1; - args.warmup_instr = -1; - } - if (trap->cycleCnt % args.stat_cycles == args.stat_cycles - 1) { - dut_ptr->io_perfInfo_clean = 1; - dut_ptr->io_perfInfo_dump = 1; - } - } - - single_cycle(); - - max_cycle --; - dut_ptr->io_perfInfo_clean = 0; - dut_ptr->io_perfInfo_dump = 0; - - if (args.enable_diff) { - trapCode = difftest_state(); - if (trapCode != STATE_RUNNING) break; - if (difftest_step()) { - trapCode = STATE_ABORT; - break; - } - } - -#ifdef VM_SAVABLE - static int snapshot_count = 0; - if (args.enable_snapshot && trapCode != STATE_GOODTRAP && t - lasttime_snapshot > 1000 * SNAPSHOT_INTERVAL) { - time_t now = time(NULL); - snapshot_save(snapshot_filename(now)); - lasttime_snapshot = t; - // dump one snapshot to file every 60 snapshots - snapshot_count++; - if (snapshot_count == 60) { - snapshot_slot[0].save(); - snapshot_count = 0; - } - } -#endif - -#ifdef EN_FORKWAIT - timer = uptime(); - if (timer - lasttime_snapshot > 1000 * FORK_INTERVAL && !waitProcess) { // time out need to fork - lasttime_snapshot = timer; - if (slotCnt == SLOT_SIZE) { // kill first wait process - pid_t temp = pidSlot.back(); - pidSlot.pop_back(); - kill(temp, SIGKILL); - slotCnt--; - forkshm.info->exitNum--; - } - // fork-wait - if ((pid = fork()) < 0) { - eprintf("[%d]Error: could not fork process!\n",getpid()); - return -1; - } else if (pid != 0) { // father fork and wait. - waitProcess = 1; - wait(&status); - enable_waveform = forkshm.info->resInfo != STATE_GOODTRAP; - if (enable_waveform) { - Verilated::traceEverOn(true); // Verilator must compute traced signals - tfp = new VerilatedVcdC; - dut_ptr->trace(tfp, 99); // Trace 99 levels of hierarchy - time_t now = time(NULL); - tfp->open(waveform_filename(now)); // Open the dump file - } - } else { //child insert its pid - slotCnt++; - forkshm.info->exitNum++; - pidSlot.insert(pidSlot.begin(), getpid()); - } - } -#endif -} - -#if VM_TRACE == 1 - if (enable_waveform) tfp->close(); -#endif - -#if VM_COVERAGE == 1 - save_coverage(coverage_start_time); -#endif - -#ifdef EN_FORKWAIT - if(!waitProcess) display_trapinfo(); - else printf("[%d] checkpoint process: dump wave complete, exit.\n",getpid()); - forkshm.info->exitNum--; - forkshm.info->resInfo = trapCode; -#endif - - display_trapinfo(); - - return cycles; -} - - -inline char* Emulator::timestamp_filename(time_t t, char *buf) { - char buf_time[64]; - strftime(buf_time, sizeof(buf_time), "%F@%T", localtime(&t)); - char *noop_home = getenv("NOOP_HOME"); - assert(noop_home != NULL); - int len = snprintf(buf, 1024, "%s/build/%s", noop_home, buf_time); - return buf + len; -} - -#ifdef VM_SAVABLE -inline char* Emulator::snapshot_filename(time_t t) { - static char buf[1024]; - char *p = timestamp_filename(t, buf); - strcpy(p, ".snapshot"); - return buf; -} -#endif - - -inline char* Emulator::waveform_filename(time_t t) { - static char buf[1024]; - char *p = timestamp_filename(t, buf); - strcpy(p, ".vcd"); - printf("dump wave to %s...\n", buf); - return buf; -} - - -#if VM_COVERAGE == 1 -inline char* Emulator::coverage_filename(time_t t) { - static char buf[1024]; - char *p = timestamp_filename(t, buf); - strcpy(p, ".coverage.dat"); - return buf; -} - -inline void Emulator::save_coverage(time_t t) { - char *p = coverage_filename(t); - VerilatedCov::write(p); -} -#endif - -void Emulator::trigger_stat_dump() { - dut_ptr->io_perfInfo_dump = 1; - if(get_args().force_dump_result) { - dut_ptr->io_logCtrl_log_end = -1; - } - single_cycle(); -} - -void Emulator::display_trapinfo() { - for (int i = 0; i < NUM_CORES; i++) { - printf("Core %d: ", i); - auto trap = difftest[i]->get_trap_event(); - uint64_t pc = trap->pc; - uint64_t instrCnt = trap->instrCnt; - uint64_t cycleCnt = trap->cycleCnt; - - switch (trapCode) { - case STATE_GOODTRAP: - eprintf(ANSI_COLOR_GREEN "HIT GOOD TRAP at pc = 0x%" PRIx64 "\n" ANSI_COLOR_RESET, pc); - break; - case STATE_BADTRAP: - eprintf(ANSI_COLOR_RED "HIT BAD TRAP at pc = 0x%" PRIx64 "\n" ANSI_COLOR_RESET, pc); - break; - case STATE_ABORT: - eprintf(ANSI_COLOR_RED "ABORT at pc = 0x%" PRIx64 "\n" ANSI_COLOR_RESET, pc); - break; - case STATE_LIMIT_EXCEEDED: - eprintf(ANSI_COLOR_YELLOW "EXCEEDING CYCLE/INSTR LIMIT at pc = 0x%" PRIx64 "\n" ANSI_COLOR_RESET, pc); - break; - case STATE_SIG: - eprintf(ANSI_COLOR_YELLOW "SOME SIGNAL STOPS THE PROGRAM at pc = 0x%" PRIx64 "\n" ANSI_COLOR_RESET, pc); - break; - default: - eprintf(ANSI_COLOR_RED "Unknown trap code: %d\n", trapCode); - } - - double ipc = (double)instrCnt / cycleCnt; - eprintf(ANSI_COLOR_MAGENTA "total guest instructions = %'" PRIu64 "\n" ANSI_COLOR_RESET, instrCnt); - eprintf(ANSI_COLOR_MAGENTA "instrCnt = %'" PRIu64 ", cycleCnt = %'" PRIu64 ", IPC = %lf\n" ANSI_COLOR_RESET, - instrCnt, cycleCnt, ipc); - } - - if (trapCode != STATE_ABORT) { - trigger_stat_dump(); - } -} - -#ifdef EN_FORKWAIT -ForkShareMemory::ForkShareMemory() { - if ((key_n = ftok(".", 's') < 0)) { - perror("Fail to ftok\n"); - FAIT_EXIT - } - printf("key num:%d\n", key_n); - - if ((shm_id = shmget(key_n, 1024, 0666 | IPC_CREAT))==-1) { - perror("shmget failed...\n"); - FAIT_EXIT - } - printf("share memory id:%d\n", shm_id); - - if ((info = (shinfo*)(shmat(shm_id, NULL, 0))) == NULL ) { - perror("shmat failed...\n"); - FAIT_EXIT - } - - info->exitNum = 0; - info->flag = false; - info->resInfo = -1; //STATE_RUNNING -} - -ForkShareMemory::~ForkShareMemory() { - if (shmdt(info) == -1) { - perror("detach error\n"); - } - shmctl(shm_id, IPC_RMID, NULL); -} - -void ForkShareMemory::shwait() { - while (true) { - if (info->exitNum == 0 && info->flag) { - break; - } - else { - sleep(WAIT_INTERVAL); - } - } -} -#endif - -#ifdef VM_SAVABLE - -// currently only support single core snapshot -#if NUM_CORES != 1 - #error "unsupported multicore" -#endif - -void Emulator::snapshot_save(const char *filename) { - static int last_slot = 0; - VerilatedSaveMem &stream = snapshot_slot[last_slot]; - last_slot = !last_slot; - - stream.init(filename); - stream << *dut_ptr; - stream.flush(); - - long size = get_ram_size(); - stream.unbuf_write(&size, sizeof(size)); - stream.unbuf_write(get_ram_start(), size); - - auto diff = difftest[0]; - uint64_t cycleCnt = diff->get_trap_event()->cycleCnt; - stream.unbuf_write(&cycleCnt, sizeof(cycleCnt)); - - auto proxy = diff->proxy; - - uint64_t ref_r[DIFFTEST_NR_REG]; - proxy->regcpy(&ref_r, REF_TO_DUT); - stream.unbuf_write(ref_r, sizeof(ref_r)); - - char *buf = (char *)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); - proxy->memcpy(0x80000000, buf, size, DIFFTEST_TO_DUT); - stream.unbuf_write(buf, size); - munmap(buf, size); - - struct SyncState sync_mastate; - proxy->uarchstatus_cpy(&sync_mastate, REF_TO_DUT); - stream.unbuf_write(&sync_mastate, sizeof(struct SyncState)); - - uint64_t csr_buf[4096]; - proxy->csrcpy(csr_buf, REF_TO_DIFFTEST); - stream.unbuf_write(&csr_buf, sizeof(csr_buf)); - - long sdcard_offset; - if(fp) - sdcard_offset = ftell(fp); - else - sdcard_offset = 0; - stream.unbuf_write(&sdcard_offset, sizeof(sdcard_offset)); - - // actually write to file in snapshot_finalize() -} - -void Emulator::snapshot_load(const char *filename) { - VerilatedRestoreMem stream; - stream.open(filename); - stream >> *dut_ptr; - - long size; - stream.read(&size, sizeof(size)); - assert(size == get_ram_size()); - stream.read(get_ram_start(), size); - - auto diff = difftest[0]; - uint64_t *cycleCnt = &(diff->get_trap_event()->cycleCnt); - stream.read(cycleCnt, sizeof(*cycleCnt)); - - auto proxy = diff->proxy; - - uint64_t ref_r[DIFFTEST_NR_REG]; - stream.read(ref_r, sizeof(ref_r)); - proxy->regcpy(&ref_r, DUT_TO_REF); - - char *buf = (char *)mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); - stream.read(buf, size); - proxy->memcpy(0x80000000, buf, size, DIFFTEST_TO_REF); - munmap(buf, size); - - struct SyncState sync_mastate; - stream.read(&sync_mastate, sizeof(struct SyncState)); - proxy->uarchstatus_cpy(&sync_mastate, DUT_TO_REF); - - uint64_t csr_buf[4096]; - stream.read(&csr_buf, sizeof(csr_buf)); - proxy->csrcpy(csr_buf, DIFFTEST_TO_REF); - - long sdcard_offset = 0; - stream.read(&sdcard_offset, sizeof(sdcard_offset)); - if(fp) - fseek(fp, sdcard_offset, SEEK_SET); - - // No one uses snapshot when !has_commit, isn't it? - has_commit = 1; -} -#endif diff --git a/libraries/difftest/src/test/csrc/verilator/emu.h b/libraries/difftest/src/test/csrc/verilator/emu.h deleted file mode 100644 index e513cb9..0000000 --- a/libraries/difftest/src/test/csrc/verilator/emu.h +++ /dev/null @@ -1,142 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#ifndef __EMU_H -#define __EMU_H - -#include "common.h" -#include "snapshot.h" -#include "VSimTop.h" -#include // Trace file format header -#include -#include -#include -#include -#include -#include -#include - -#define FORK_INTERVAL 10 // unit: second -#define SLOT_SIZE 3 -#define FAIT_EXIT exit(EXIT_FAILURE); -#define WAIT_INTERVAL 1 -#define SNAPSHOT_INTERVAL 60 // unit: second - -typedef struct shinfo{ - int exitNum; - int resInfo; - bool flag; -} shinfo; - -class ForkShareMemory{ - //private - key_t key_n ; - int shm_id; - -public: - shinfo *info; - - ForkShareMemory(); - ~ForkShareMemory(); - - void shwait(); -}; - - -struct EmuArgs { - uint32_t seed; - uint64_t max_cycles; - uint64_t max_instr; - uint64_t warmup_instr; - uint64_t stat_cycles; - uint64_t log_begin, log_end; - const char *image; - const char *snapshot_path; - bool enable_waveform; - bool enable_snapshot; - bool force_dump_result; - bool enable_diff; - - EmuArgs() { - seed = 0; - max_cycles = -1; - max_instr = -1; - warmup_instr = -1; - stat_cycles = -1; - log_begin = 1; - log_end = -1; - snapshot_path = NULL; - image = NULL; - enable_waveform = false; - enable_snapshot = true; - force_dump_result = false; - enable_diff = true; - } -}; - -class Emulator { -private: - VSimTop *dut_ptr; - VerilatedVcdC* tfp; - bool enable_waveform; -#ifdef VM_SAVABLE - VerilatedSaveMem snapshot_slot[2]; -#endif - EmuArgs args; -#ifdef EN_FORKWAIT - ForkShareMemory forkshm; -#endif - - enum { - STATE_GOODTRAP = 0, - STATE_BADTRAP = 1, - STATE_ABORT = 2, - STATE_LIMIT_EXCEEDED = 3, - STATE_SIG = 4, - STATE_RUNNING = -1 - }; - - // emu control variable - uint64_t cycles; - int trapCode; - - inline void reset_ncycles(size_t cycles); - inline void single_cycle(); - void trigger_stat_dump(); - void display_trapinfo(); - inline char* timestamp_filename(time_t t, char *buf); - inline char* snapshot_filename(time_t t); - inline char* coverage_filename(time_t t); - void snapshot_save(const char *filename); - void snapshot_load(const char *filename); - inline char* waveform_filename(time_t t); -#if VM_COVERAGE == 1 - inline void save_coverage(time_t t); -#endif - -public: - Emulator(int argc, const char *argv[]); - ~Emulator(); - uint64_t execute(uint64_t max_cycle, uint64_t max_instr); - uint64_t get_cycles() const { return cycles; } - EmuArgs get_args() const { return args; } - bool is_good_trap() { - return trapCode == STATE_GOODTRAP || trapCode == STATE_LIMIT_EXCEEDED; - }; - int get_trapcode() { return trapCode; } -}; - -#endif diff --git a/libraries/difftest/src/test/csrc/verilator/main.cpp b/libraries/difftest/src/test/csrc/verilator/main.cpp deleted file mode 100644 index f226e8f..0000000 --- a/libraries/difftest/src/test/csrc/verilator/main.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#include -#include -#include -#include "emu.h" - -static char mybuf[BUFSIZ]; - -// junk, link for verilator -std::function get_sc_time_stamp = []() -> double { return 0; }; -double sc_time_stamp() { return get_sc_time_stamp(); } - -int main(int argc, const char** argv) { - printf("Emu compiled at %s, %s\n", __DATE__, __TIME__); - - setbuf(stderr, mybuf); - - // enable thousands separator for printf() - setlocale(LC_NUMERIC, ""); - - if (signal(SIGINT, sig_handler) == SIG_ERR) { - printf("\ncan't catch SIGINT\n"); - } - - auto emu = new Emulator(argc, argv); - - get_sc_time_stamp = [&emu]() -> double { - return emu->get_cycles(); - }; - - auto args = emu->get_args(); - uint64_t cycles = emu->execute(args.max_cycles, args.max_instr); - bool is_good_trap = emu->is_good_trap(); - delete emu; - - extern uint32_t uptime(void); - uint32_t ms = uptime(); - - eprintf(ANSI_COLOR_BLUE "Seed=%d Guest cycle spent: %'" PRIu64 - " (this will be different from cycleCnt if emu loads a snapshot)\n" ANSI_COLOR_RESET, args.seed, cycles); - eprintf(ANSI_COLOR_BLUE "Host time spent: %'dms\n" ANSI_COLOR_RESET, ms); - - return !is_good_trap; -} diff --git a/libraries/difftest/src/test/csrc/verilator/snapshot.cpp b/libraries/difftest/src/test/csrc/verilator/snapshot.cpp deleted file mode 100644 index c63e723..0000000 --- a/libraries/difftest/src/test/csrc/verilator/snapshot.cpp +++ /dev/null @@ -1,142 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#include "snapshot.h" -#include "compress.h" - -#ifdef VM_SAVABLE - -void VerilatedSaveMem::flush() { - long flush_size = m_cp - m_bufp; - assert(buf_size - size > flush_size); - memcpy(buf + size, m_bufp, flush_size); - size += flush_size; - m_cp = m_bufp; -} - -void VerilatedSaveMem::save() { - if (size == 0) return; - trailer(); - flush(); - auto saved_filename = m_filename; - if (size <= (512 * 1024 * 1024UL)) { - FILE *fp = fopen(saved_filename.c_str(), "w"); - assert(fp != NULL); - fwrite(buf, size, 1, fp); - fclose(fp); - } - else { - saved_filename = saved_filename + ".gz"; - // timeval s, e; - // gettimeofday(&s, NULL); - snapshot_compressToFile(buf, saved_filename.c_str(), size); - // gettimeofday(&e, NULL); - // printf("Compress cost time (msec.usec): %lf\n", calcTime(s, e)); - } - size = 0; - printf("save snapshot to %s...\n", saved_filename.c_str()); -} - -void VerilatedRestoreMem::fill() { - m_assertOne.check(); - if (VL_UNLIKELY(!isOpen())) return; - // Move remaining characters down to start of buffer. (No memcpy, overlaps allowed) - vluint8_t* rp = m_bufp; - for (vluint8_t* sp = m_cp; sp < m_endp; *rp++ = *sp++) {} // Overlaps - m_endp = m_bufp + (m_endp - m_cp); - m_cp = m_bufp; // Reset buffer - // Read into buffer starting at m_endp - while (true) { - ssize_t remaining = (m_bufp + bufferSize() - m_endp); - if (remaining == 0) break; - errno = 0; - ssize_t got = unbuf_read(m_endp, remaining); - if (got > 0) { - m_endp += got; - } else if (VL_UNCOVERABLE(got < 0)) { - if (VL_UNCOVERABLE(errno != EAGAIN && errno != EINTR)) { - // LCOV_EXCL_START - // write failed, presume error (perhaps out of disk space) - std::string msg = std::string(__FUNCTION__) + ": " + strerror(errno); - VL_FATAL_MT("", 0, "", msg.c_str()); - close(); - break; - // LCOV_EXCL_STOP - } - } else { // got==0, EOF - // Fill buffer from here to end with NULLs so reader's don't - // need to check eof each character. - while (m_endp < m_bufp + bufferSize()) *m_endp++ = '\0'; - break; - } - } -} - -void VerilatedRestoreMem::open(const char* filename) { - m_assertOne.check(); - if (isOpen()) return; - VL_DEBUG_IF(VL_DBG_MSGF("- restore: opening restore file %s\n", filenamep);); - - if (VL_UNCOVERABLE(filename[0] == '|')) { - assert(0); // LCOV_EXCL_LINE // Not supported yet. - } else { - if(isGzFile(filename)) { - timeval s, e; - gettimeofday(&s, NULL); - size = readFromGz(buf, filename, buf_size, LOAD_SNAPSHOT); - gettimeofday(&e, NULL); - // printf("Uncompress cost time (msec.usec): %lf\n", calcTime(s, e)); - assert(size > 0); - } else { - FILE *fp = fopen(filename, "r"); - assert(fp != NULL); - - fseek(fp, 0, SEEK_END); - size = ftell(fp); - rewind(fp); - assert(fread(buf, size, 1, fp) > 0); - fclose(fp); - } - } - m_isOpen = true; - m_filename = filename; - m_cp = m_bufp; - m_endp = m_bufp; - header(); -} - -void VerilatedRestoreMem::close() { - if (!isOpen()) return; - trailer(); - flush(); - m_isOpen = false; -} - -long VerilatedRestoreMem::unbuf_read(uint8_t* dest, long rsize) { - assert(rsize > 0); - assert(buf_size > 0); - assert(buf_ptr >= 0); - if(buf_ptr + rsize > size) { - rsize = size - buf_ptr; - } - for(long i = 0; i < rsize; i++) { - dest[i] = buf[buf_ptr + i]; - } - buf_ptr += rsize; - - return rsize; -} -#endif diff --git a/libraries/difftest/src/test/csrc/verilator/snapshot.h b/libraries/difftest/src/test/csrc/verilator/snapshot.h deleted file mode 100644 index a9bf65d..0000000 --- a/libraries/difftest/src/test/csrc/verilator/snapshot.h +++ /dev/null @@ -1,95 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -#ifndef SNAPSHOT_H -#define SNAPSHOT_H - -#ifdef VM_SAVABLE -#include "VSimTop.h" -#include -#include -#include "compress.h" -#include "ram.h" - -#define SNAPSHOT_SIZE (3UL * EMU_RAM_SIZE) - -class VerilatedSaveMem : public VerilatedSerialize { - const static long buf_size = SNAPSHOT_SIZE; - uint8_t *buf = NULL; - long size; - -public: - VerilatedSaveMem() { - buf = NULL; - size = 0; - } - ~VerilatedSaveMem() { } - - void init(const char *filename) { - if (buf != NULL) { - munmap(buf, SNAPSHOT_SIZE); - buf = NULL; - } - buf = (uint8_t*)mmap(NULL, buf_size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); - if (buf == (uint8_t *)MAP_FAILED) { - printf("Cound not mmap 0x%lx bytes\n", SNAPSHOT_SIZE); - assert(0); - } - size = 0; - m_filename = filename; - header(); - } - - void unbuf_write(const void* __restrict datap, size_t size) VL_MT_UNSAFE_ONE { - nonzero_large_memcpy(buf + this->size, datap, size); - this->size += size; - } - - void close() { } - void flush(); - void save(); -}; - -class VerilatedRestoreMem : public VerilatedDeserialize { - const static long buf_size = SNAPSHOT_SIZE; - uint8_t *buf; - long size, buf_ptr; - // gzFile compressed_mem; - -public: - VerilatedRestoreMem() { - buf = (uint8_t*)mmap(NULL, buf_size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); - if (buf == (uint8_t *)MAP_FAILED) { - printf("Cound not mmap 0x%lx bytes\n", SNAPSHOT_SIZE); - assert(0); - } - size = 0; - buf_ptr = 0; - } - ~VerilatedRestoreMem() { close(); } - - void open(const char* filenamep) VL_MT_UNSAFE_ONE; - void open(const std::string& filename) VL_MT_UNSAFE_ONE { open(filename.c_str()); } - - long unbuf_read(uint8_t* dest, long rsize); - - void close() override VL_MT_UNSAFE_ONE; - void flush() override VL_MT_UNSAFE_ONE {} - void fill() override VL_MT_UNSAFE_ONE; -}; -#endif - -#endif diff --git a/libraries/difftest/src/test/vsrc/common/assert.v b/libraries/difftest/src/test/vsrc/common/assert.v deleted file mode 100644 index f84d946..0000000 --- a/libraries/difftest/src/test/vsrc/common/assert.v +++ /dev/null @@ -1,20 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -import "DPI-C" function void xs_assert -( - input longint line -); diff --git a/libraries/difftest/src/test/vsrc/common/difftest.v b/libraries/difftest/src/test/vsrc/common/difftest.v deleted file mode 100644 index 3c37a55..0000000 --- a/libraries/difftest/src/test/vsrc/common/difftest.v +++ /dev/null @@ -1,590 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -`define DIFFTEST_DPIC_FUNC_NAME(name) \ - v_difftest_``name - -`define DIFFTEST_DPIC_FUNC_DECL(name) \ - import "DPI-C" function void `DIFFTEST_DPIC_FUNC_NAME(name) - -`define DIFFTEST_MOD_NAME(name) \ - Difftest``name - -`define DIFFTEST_MOD_DECL(name) \ - module `DIFFTEST_MOD_NAME(name) - -`define DIFFTEST_MOD_DPIC_CALL_BEGIN(name) \ - always @(posedge clock) begin \ - `DIFFTEST_DPIC_FUNC_NAME(name) - -`define DIFFTEST_MOD_DPIC_CALL_BEGIN_WITH_EN(enable, name) \ - always @(posedge clock) begin \ - if (enable) begin \ - `DIFFTEST_DPIC_FUNC_NAME(name) - -`define DIFFTEST_MOD_DPIC_CALL_END(name) \ - ; end - -`define DIFFTEST_MOD_DPIC_CALL_END_WITH_EN(name) \ - ; end end - -`define DPIC_ARG_BIT input bit -`define DPIC_ARG_BYTE input byte -`define DPIC_ARG_INT input int -`define DPIC_ARG_LONG input longint - -// DifftestArchEvent -`DIFFTEST_DPIC_FUNC_DECL(ArchEvent) ( - `DPIC_ARG_BYTE coreid, - `DPIC_ARG_INT intrNo, - `DPIC_ARG_INT cause, - `DPIC_ARG_LONG exceptionPC -); -`DIFFTEST_MOD_DECL(ArchEvent) ( - input clock, - input [ 7:0] coreid, - input [31:0] intrNO, - input [31:0] cause, - input [63:0] exceptionPC -); - `DIFFTEST_MOD_DPIC_CALL_BEGIN(ArchEvent) ( - coreid, intrNO, cause, exceptionPC - ) `DIFFTEST_MOD_DPIC_CALL_END(ArchEvent) -endmodule - -// DifftestInstrCommit -`DIFFTEST_DPIC_FUNC_DECL(InstrCommit) ( - `DPIC_ARG_BYTE coreid, - `DPIC_ARG_BYTE index, - `DPIC_ARG_BIT valid, - `DPIC_ARG_LONG pc, - `DPIC_ARG_INT instr, - `DPIC_ARG_BIT skip, - `DPIC_ARG_BIT isRVC, - `DPIC_ARG_BIT scFailed, - `DPIC_ARG_BIT wen, - `DPIC_ARG_BYTE wdest, - `DPIC_ARG_LONG wdata -); -`DIFFTEST_MOD_DECL(InstrCommit)( - input clock, - input [ 7:0] coreid, - input [ 7:0] index, - input valid, - input [63:0] pc, - input [31:0] instr, - input skip, - input isRVC, - input scFailed, - input wen, - input [ 7:0] wdest, - input [63:0] wdata -); - `DIFFTEST_MOD_DPIC_CALL_BEGIN_WITH_EN(valid, InstrCommit) ( - coreid, index, - valid, pc, instr, skip, isRVC, scFailed, wen, wdest, wdata - ) `DIFFTEST_MOD_DPIC_CALL_END_WITH_EN(InstrCommit) -endmodule - -// DifftesTrapEvent -`DIFFTEST_DPIC_FUNC_DECL(TrapEvent) ( - `DPIC_ARG_BYTE coreid, - `DPIC_ARG_BIT valid, - `DPIC_ARG_BYTE code, - `DPIC_ARG_LONG pc, - `DPIC_ARG_LONG cycleCnt, - `DPIC_ARG_LONG instrCnt -); -`DIFFTEST_MOD_DECL(TrapEvent)( - input clock, - input [ 7:0] coreid, - input valid, - input [ 2:0] code, - input [63:0] pc, - input [63:0] cycleCnt, - input [63:0] instrCnt -); - `DIFFTEST_MOD_DPIC_CALL_BEGIN(TrapEvent) ( - coreid, valid, {5'd0, code}, pc, cycleCnt, instrCnt - ) `DIFFTEST_MOD_DPIC_CALL_END(TrapEvent) -endmodule - -// DifftestCSRState -`DIFFTEST_DPIC_FUNC_DECL(CSRState) ( - `DPIC_ARG_BYTE coreid, - `DPIC_ARG_BYTE priviledgeMode, - `DPIC_ARG_LONG mstatus, - `DPIC_ARG_LONG sstatus, - `DPIC_ARG_LONG mepc, - `DPIC_ARG_LONG sepc, - `DPIC_ARG_LONG mtval, - `DPIC_ARG_LONG stval, - `DPIC_ARG_LONG mtvec, - `DPIC_ARG_LONG stvec, - `DPIC_ARG_LONG mcause, - `DPIC_ARG_LONG scause, - `DPIC_ARG_LONG satp, - `DPIC_ARG_LONG mip, - `DPIC_ARG_LONG mie, - `DPIC_ARG_LONG mscratch, - `DPIC_ARG_LONG sscratch, - `DPIC_ARG_LONG mideleg, - `DPIC_ARG_LONG medeleg -); -`DIFFTEST_MOD_DECL(CSRState)( - input clock, - input [ 7:0] coreid, - input [ 1:0] priviledgeMode, - input [63:0] mstatus, - input [63:0] sstatus, - input [63:0] mepc, - input [63:0] sepc, - input [63:0] mtval, - input [63:0] stval, - input [63:0] mtvec, - input [63:0] stvec, - input [63:0] mcause, - input [63:0] scause, - input [63:0] satp, - input [63:0] mip, - input [63:0] mie, - input [63:0] mscratch, - input [63:0] sscratch, - input [63:0] mideleg, - input [63:0] medeleg -); - `DIFFTEST_MOD_DPIC_CALL_BEGIN(CSRState) ( - coreid, {6'd0, priviledgeMode}, - mstatus, sstatus, mepc, sepc, mtval, stval, mtvec, stvec, - mcause, scause, satp, mip, mie, mscratch, sscratch, mideleg, medeleg - ) `DIFFTEST_MOD_DPIC_CALL_END(CSRState) -endmodule - -// DifftestArchIntRegState -`DIFFTEST_DPIC_FUNC_DECL(ArchIntRegState) ( - `DPIC_ARG_BYTE coreid, - `DPIC_ARG_LONG gpr_0, - `DPIC_ARG_LONG gpr_1, - `DPIC_ARG_LONG gpr_2, - `DPIC_ARG_LONG gpr_3, - `DPIC_ARG_LONG gpr_4, - `DPIC_ARG_LONG gpr_5, - `DPIC_ARG_LONG gpr_6, - `DPIC_ARG_LONG gpr_7, - `DPIC_ARG_LONG gpr_8, - `DPIC_ARG_LONG gpr_9, - `DPIC_ARG_LONG gpr_10, - `DPIC_ARG_LONG gpr_11, - `DPIC_ARG_LONG gpr_12, - `DPIC_ARG_LONG gpr_13, - `DPIC_ARG_LONG gpr_14, - `DPIC_ARG_LONG gpr_15, - `DPIC_ARG_LONG gpr_16, - `DPIC_ARG_LONG gpr_17, - `DPIC_ARG_LONG gpr_18, - `DPIC_ARG_LONG gpr_19, - `DPIC_ARG_LONG gpr_20, - `DPIC_ARG_LONG gpr_21, - `DPIC_ARG_LONG gpr_22, - `DPIC_ARG_LONG gpr_23, - `DPIC_ARG_LONG gpr_24, - `DPIC_ARG_LONG gpr_25, - `DPIC_ARG_LONG gpr_26, - `DPIC_ARG_LONG gpr_27, - `DPIC_ARG_LONG gpr_28, - `DPIC_ARG_LONG gpr_29, - `DPIC_ARG_LONG gpr_30, - `DPIC_ARG_LONG gpr_31 -); -`DIFFTEST_MOD_DECL(ArchIntRegState)( - input clock, - input [ 7:0] coreid, - input [63:0] gpr_0, - input [63:0] gpr_1, - input [63:0] gpr_2, - input [63:0] gpr_3, - input [63:0] gpr_4, - input [63:0] gpr_5, - input [63:0] gpr_6, - input [63:0] gpr_7, - input [63:0] gpr_8, - input [63:0] gpr_9, - input [63:0] gpr_10, - input [63:0] gpr_11, - input [63:0] gpr_12, - input [63:0] gpr_13, - input [63:0] gpr_14, - input [63:0] gpr_15, - input [63:0] gpr_16, - input [63:0] gpr_17, - input [63:0] gpr_18, - input [63:0] gpr_19, - input [63:0] gpr_20, - input [63:0] gpr_21, - input [63:0] gpr_22, - input [63:0] gpr_23, - input [63:0] gpr_24, - input [63:0] gpr_25, - input [63:0] gpr_26, - input [63:0] gpr_27, - input [63:0] gpr_28, - input [63:0] gpr_29, - input [63:0] gpr_30, - input [63:0] gpr_31 -); - `DIFFTEST_MOD_DPIC_CALL_BEGIN(ArchIntRegState) ( - coreid, - gpr_0, gpr_1, gpr_2, gpr_3, gpr_4, gpr_5, gpr_6, gpr_7, - gpr_8, gpr_9, gpr_10, gpr_11, gpr_12, gpr_13, gpr_14, gpr_15, - gpr_16, gpr_17, gpr_18, gpr_19, gpr_20, gpr_21, gpr_22, gpr_23, - gpr_24, gpr_25, gpr_26, gpr_27, gpr_28, gpr_29, gpr_30, gpr_31 - ) `DIFFTEST_MOD_DPIC_CALL_END(ArchIntRegState) -endmodule - -// DifftestArchFpRegState -`DIFFTEST_DPIC_FUNC_DECL(ArchFpRegState) ( - `DPIC_ARG_BYTE coreid, - `DPIC_ARG_LONG fpr_0, - `DPIC_ARG_LONG fpr_1, - `DPIC_ARG_LONG fpr_2, - `DPIC_ARG_LONG fpr_3, - `DPIC_ARG_LONG fpr_4, - `DPIC_ARG_LONG fpr_5, - `DPIC_ARG_LONG fpr_6, - `DPIC_ARG_LONG fpr_7, - `DPIC_ARG_LONG fpr_8, - `DPIC_ARG_LONG fpr_9, - `DPIC_ARG_LONG fpr_10, - `DPIC_ARG_LONG fpr_11, - `DPIC_ARG_LONG fpr_12, - `DPIC_ARG_LONG fpr_13, - `DPIC_ARG_LONG fpr_14, - `DPIC_ARG_LONG fpr_15, - `DPIC_ARG_LONG fpr_16, - `DPIC_ARG_LONG fpr_17, - `DPIC_ARG_LONG fpr_18, - `DPIC_ARG_LONG fpr_19, - `DPIC_ARG_LONG fpr_20, - `DPIC_ARG_LONG fpr_21, - `DPIC_ARG_LONG fpr_22, - `DPIC_ARG_LONG fpr_23, - `DPIC_ARG_LONG fpr_24, - `DPIC_ARG_LONG fpr_25, - `DPIC_ARG_LONG fpr_26, - `DPIC_ARG_LONG fpr_27, - `DPIC_ARG_LONG fpr_28, - `DPIC_ARG_LONG fpr_29, - `DPIC_ARG_LONG fpr_30, - `DPIC_ARG_LONG fpr_31 -); -`DIFFTEST_MOD_DECL(ArchFpRegState)( - input clock, - input [ 7:0] coreid, - input [63:0] fpr_0, - input [63:0] fpr_1, - input [63:0] fpr_2, - input [63:0] fpr_3, - input [63:0] fpr_4, - input [63:0] fpr_5, - input [63:0] fpr_6, - input [63:0] fpr_7, - input [63:0] fpr_8, - input [63:0] fpr_9, - input [63:0] fpr_10, - input [63:0] fpr_11, - input [63:0] fpr_12, - input [63:0] fpr_13, - input [63:0] fpr_14, - input [63:0] fpr_15, - input [63:0] fpr_16, - input [63:0] fpr_17, - input [63:0] fpr_18, - input [63:0] fpr_19, - input [63:0] fpr_20, - input [63:0] fpr_21, - input [63:0] fpr_22, - input [63:0] fpr_23, - input [63:0] fpr_24, - input [63:0] fpr_25, - input [63:0] fpr_26, - input [63:0] fpr_27, - input [63:0] fpr_28, - input [63:0] fpr_29, - input [63:0] fpr_30, - input [63:0] fpr_31 -); - `DIFFTEST_MOD_DPIC_CALL_BEGIN(ArchFpRegState) ( - coreid, - fpr_0, fpr_1, fpr_2, fpr_3, fpr_4, fpr_5, fpr_6, fpr_7, - fpr_8, fpr_9, fpr_10, fpr_11, fpr_12, fpr_13, fpr_14, fpr_15, - fpr_16, fpr_17, fpr_18, fpr_19, fpr_20, fpr_21, fpr_22, fpr_23, - fpr_24, fpr_25, fpr_26, fpr_27, fpr_28, fpr_29, fpr_30, fpr_31 - ) `DIFFTEST_MOD_DPIC_CALL_END(ArchFpRegState) -endmodule - -// DifftestSbufferEvent -`DIFFTEST_DPIC_FUNC_DECL(SbufferEvent) ( - `DPIC_ARG_BYTE coreid, - `DPIC_ARG_BIT sbufferResp, - `DPIC_ARG_LONG sbufferAddr, - `DPIC_ARG_BYTE sbufferData_0, - `DPIC_ARG_BYTE sbufferData_1, - `DPIC_ARG_BYTE sbufferData_2, - `DPIC_ARG_BYTE sbufferData_3, - `DPIC_ARG_BYTE sbufferData_4, - `DPIC_ARG_BYTE sbufferData_5, - `DPIC_ARG_BYTE sbufferData_6, - `DPIC_ARG_BYTE sbufferData_7, - `DPIC_ARG_BYTE sbufferData_8, - `DPIC_ARG_BYTE sbufferData_9, - `DPIC_ARG_BYTE sbufferData_10, - `DPIC_ARG_BYTE sbufferData_11, - `DPIC_ARG_BYTE sbufferData_12, - `DPIC_ARG_BYTE sbufferData_13, - `DPIC_ARG_BYTE sbufferData_14, - `DPIC_ARG_BYTE sbufferData_15, - `DPIC_ARG_BYTE sbufferData_16, - `DPIC_ARG_BYTE sbufferData_17, - `DPIC_ARG_BYTE sbufferData_18, - `DPIC_ARG_BYTE sbufferData_19, - `DPIC_ARG_BYTE sbufferData_20, - `DPIC_ARG_BYTE sbufferData_21, - `DPIC_ARG_BYTE sbufferData_22, - `DPIC_ARG_BYTE sbufferData_23, - `DPIC_ARG_BYTE sbufferData_24, - `DPIC_ARG_BYTE sbufferData_25, - `DPIC_ARG_BYTE sbufferData_26, - `DPIC_ARG_BYTE sbufferData_27, - `DPIC_ARG_BYTE sbufferData_28, - `DPIC_ARG_BYTE sbufferData_29, - `DPIC_ARG_BYTE sbufferData_30, - `DPIC_ARG_BYTE sbufferData_31, - `DPIC_ARG_BYTE sbufferData_32, - `DPIC_ARG_BYTE sbufferData_33, - `DPIC_ARG_BYTE sbufferData_34, - `DPIC_ARG_BYTE sbufferData_35, - `DPIC_ARG_BYTE sbufferData_36, - `DPIC_ARG_BYTE sbufferData_37, - `DPIC_ARG_BYTE sbufferData_38, - `DPIC_ARG_BYTE sbufferData_39, - `DPIC_ARG_BYTE sbufferData_40, - `DPIC_ARG_BYTE sbufferData_41, - `DPIC_ARG_BYTE sbufferData_42, - `DPIC_ARG_BYTE sbufferData_43, - `DPIC_ARG_BYTE sbufferData_44, - `DPIC_ARG_BYTE sbufferData_45, - `DPIC_ARG_BYTE sbufferData_46, - `DPIC_ARG_BYTE sbufferData_47, - `DPIC_ARG_BYTE sbufferData_48, - `DPIC_ARG_BYTE sbufferData_49, - `DPIC_ARG_BYTE sbufferData_50, - `DPIC_ARG_BYTE sbufferData_51, - `DPIC_ARG_BYTE sbufferData_52, - `DPIC_ARG_BYTE sbufferData_53, - `DPIC_ARG_BYTE sbufferData_54, - `DPIC_ARG_BYTE sbufferData_55, - `DPIC_ARG_BYTE sbufferData_56, - `DPIC_ARG_BYTE sbufferData_57, - `DPIC_ARG_BYTE sbufferData_58, - `DPIC_ARG_BYTE sbufferData_59, - `DPIC_ARG_BYTE sbufferData_60, - `DPIC_ARG_BYTE sbufferData_61, - `DPIC_ARG_BYTE sbufferData_62, - `DPIC_ARG_BYTE sbufferData_63, - `DPIC_ARG_LONG sbufferMask -); -`DIFFTEST_MOD_DECL(SbufferEvent)( - input clock, - input [ 7:0] coreid, - input sbufferResp, - input [63:0] sbufferAddr, - input [ 7:0] sbufferData_0, - input [ 7:0] sbufferData_1, - input [ 7:0] sbufferData_2, - input [ 7:0] sbufferData_3, - input [ 7:0] sbufferData_4, - input [ 7:0] sbufferData_5, - input [ 7:0] sbufferData_6, - input [ 7:0] sbufferData_7, - input [ 7:0] sbufferData_8, - input [ 7:0] sbufferData_9, - input [ 7:0] sbufferData_10, - input [ 7:0] sbufferData_11, - input [ 7:0] sbufferData_12, - input [ 7:0] sbufferData_13, - input [ 7:0] sbufferData_14, - input [ 7:0] sbufferData_15, - input [ 7:0] sbufferData_16, - input [ 7:0] sbufferData_17, - input [ 7:0] sbufferData_18, - input [ 7:0] sbufferData_19, - input [ 7:0] sbufferData_20, - input [ 7:0] sbufferData_21, - input [ 7:0] sbufferData_22, - input [ 7:0] sbufferData_23, - input [ 7:0] sbufferData_24, - input [ 7:0] sbufferData_25, - input [ 7:0] sbufferData_26, - input [ 7:0] sbufferData_27, - input [ 7:0] sbufferData_28, - input [ 7:0] sbufferData_29, - input [ 7:0] sbufferData_30, - input [ 7:0] sbufferData_31, - input [ 7:0] sbufferData_32, - input [ 7:0] sbufferData_33, - input [ 7:0] sbufferData_34, - input [ 7:0] sbufferData_35, - input [ 7:0] sbufferData_36, - input [ 7:0] sbufferData_37, - input [ 7:0] sbufferData_38, - input [ 7:0] sbufferData_39, - input [ 7:0] sbufferData_40, - input [ 7:0] sbufferData_41, - input [ 7:0] sbufferData_42, - input [ 7:0] sbufferData_43, - input [ 7:0] sbufferData_44, - input [ 7:0] sbufferData_45, - input [ 7:0] sbufferData_46, - input [ 7:0] sbufferData_47, - input [ 7:0] sbufferData_48, - input [ 7:0] sbufferData_49, - input [ 7:0] sbufferData_50, - input [ 7:0] sbufferData_51, - input [ 7:0] sbufferData_52, - input [ 7:0] sbufferData_53, - input [ 7:0] sbufferData_54, - input [ 7:0] sbufferData_55, - input [ 7:0] sbufferData_56, - input [ 7:0] sbufferData_57, - input [ 7:0] sbufferData_58, - input [ 7:0] sbufferData_59, - input [ 7:0] sbufferData_60, - input [ 7:0] sbufferData_61, - input [ 7:0] sbufferData_62, - input [ 7:0] sbufferData_63, - input [63:0] sbufferMask -); - `DIFFTEST_MOD_DPIC_CALL_BEGIN_WITH_EN(sbufferResp, SbufferEvent) ( - coreid, sbufferResp, sbufferAddr, - sbufferData_0, sbufferData_1, sbufferData_2, sbufferData_3, sbufferData_4, sbufferData_5, - sbufferData_6, sbufferData_7, sbufferData_8, sbufferData_9, sbufferData_10, sbufferData_11, - sbufferData_12, sbufferData_13, sbufferData_14, sbufferData_15, sbufferData_16, sbufferData_17, - sbufferData_18, sbufferData_19, sbufferData_20, sbufferData_21, sbufferData_22, sbufferData_23, - sbufferData_24, sbufferData_25, sbufferData_26, sbufferData_27, sbufferData_28, sbufferData_29, - sbufferData_30, sbufferData_31, sbufferData_32, sbufferData_33, sbufferData_34, sbufferData_35, - sbufferData_36, sbufferData_37, sbufferData_38, sbufferData_39, sbufferData_40, sbufferData_41, - sbufferData_42, sbufferData_43, sbufferData_44, sbufferData_45, sbufferData_46, sbufferData_47, - sbufferData_48, sbufferData_49, sbufferData_50, sbufferData_51, sbufferData_52, sbufferData_53, - sbufferData_54, sbufferData_55, sbufferData_56, sbufferData_57, sbufferData_58, sbufferData_59, - sbufferData_60, sbufferData_61, sbufferData_62, sbufferData_63, sbufferMask - ) `DIFFTEST_MOD_DPIC_CALL_END_WITH_EN(SbufferEvent) -endmodule - -// DifftestStoreEvent -`DIFFTEST_DPIC_FUNC_DECL(StoreEvent) ( - `DPIC_ARG_BYTE coreid, - `DPIC_ARG_BYTE index, - `DPIC_ARG_BIT valid, - `DPIC_ARG_LONG storeAddr, - `DPIC_ARG_LONG storeData, - `DPIC_ARG_BYTE storeMask -); -`DIFFTEST_MOD_DECL(StoreEvent)( - input clock, - input [ 7:0] coreid, - input [ 7:0] index, - input valid, - input [63:0] storeAddr, - input [63:0] storeData, - input [ 7:0] storeMask -); - `DIFFTEST_MOD_DPIC_CALL_BEGIN_WITH_EN(valid, StoreEvent) ( - coreid, index, valid, storeAddr, storeData, storeMask - ) `DIFFTEST_MOD_DPIC_CALL_END_WITH_EN(StoreEvent) -endmodule - -// DifftestLoadEvent -`DIFFTEST_DPIC_FUNC_DECL(LoadEvent) ( - `DPIC_ARG_BYTE coreid, - `DPIC_ARG_BYTE index, - `DPIC_ARG_BIT valid, - `DPIC_ARG_LONG paddr, - `DPIC_ARG_BYTE opType, - `DPIC_ARG_BYTE fuType -); -`DIFFTEST_MOD_DECL(LoadEvent)( - input clock, - input [ 7:0] coreid, - input [ 7:0] index, - input valid, - input [63:0] paddr, - input [ 7:0] opType, - input [ 7:0] fuType -); - `DIFFTEST_MOD_DPIC_CALL_BEGIN_WITH_EN(valid, LoadEvent) ( - coreid, index, valid, paddr, opType, fuType - ) `DIFFTEST_MOD_DPIC_CALL_END_WITH_EN(LoadEvent) -endmodule - -// DifftestAtomicEvent -`DIFFTEST_DPIC_FUNC_DECL(AtomicEvent) ( - `DPIC_ARG_BYTE coreid, - `DPIC_ARG_BIT atomicResp, - `DPIC_ARG_LONG atomicAddr, - `DPIC_ARG_LONG atomicData, - `DPIC_ARG_BYTE atomicMask, - `DPIC_ARG_BYTE atomicFuop, - `DPIC_ARG_LONG atomicOut -); -`DIFFTEST_MOD_DECL(AtomicEvent)( - input clock, - input [ 7:0] coreid, - input atomicResp, - input [63:0] atomicAddr, - input [63:0] atomicData, - input [ 7:0] atomicMask, - input [ 7:0] atomicFuop, - input [63:0] atomicOut -); - `DIFFTEST_MOD_DPIC_CALL_BEGIN_WITH_EN(atomicResp, AtomicEvent) ( - coreid, atomicResp, atomicAddr, atomicData, atomicMask, atomicFuop, atomicOut - ) `DIFFTEST_MOD_DPIC_CALL_END_WITH_EN(AtomicEvent) -endmodule - -// DifftestPtwEvent -`DIFFTEST_DPIC_FUNC_DECL(PtwEvent) ( - `DPIC_ARG_BYTE coreid, - `DPIC_ARG_BIT ptwResp, - `DPIC_ARG_LONG ptwAddr, - `DPIC_ARG_LONG ptwData_0, - `DPIC_ARG_LONG ptwData_1, - `DPIC_ARG_LONG ptwData_2, - `DPIC_ARG_LONG ptwData_3 -); -`DIFFTEST_MOD_DECL(PtwEvent)( - input clock, - input [ 7:0] coreid, - input ptwResp, - input [63:0] ptwAddr, - input [63:0] ptwData_0, - input [63:0] ptwData_1, - input [63:0] ptwData_2, - input [63:0] ptwData_3 -); - `DIFFTEST_MOD_DPIC_CALL_BEGIN_WITH_EN(ptwResp, PtwEvent) ( - coreid, ptwResp, ptwAddr, ptwData_0, ptwData_1, ptwData_2, ptwData_3 - ) `DIFFTEST_MOD_DPIC_CALL_END_WITH_EN(PtwEvent) -endmodule diff --git a/libraries/difftest/src/test/vsrc/common/ram.v b/libraries/difftest/src/test/vsrc/common/ram.v deleted file mode 100644 index c323c8c..0000000 --- a/libraries/difftest/src/test/vsrc/common/ram.v +++ /dev/null @@ -1,49 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -import "DPI-C" function void ram_write_helper -( - input longint wIdx, - input longint wdata, - input longint wmask, - input bit wen -); - -import "DPI-C" function longint ram_read_helper -( - input bit en, - input longint rIdx -); - -module RAMHelper( - input clk, - input en, - input [63:0] rIdx, - output [63:0] rdata, - input [63:0] wIdx, - input [63:0] wdata, - input [63:0] wmask, - input wen -); - - assign rdata = ram_read_helper(en, rIdx); - - always @(posedge clk) begin - ram_write_helper(wIdx, wdata, wmask, wen && en); - end - -endmodule - diff --git a/libraries/difftest/src/test/vsrc/common/ref.v b/libraries/difftest/src/test/vsrc/common/ref.v deleted file mode 100644 index 9d0e9b2..0000000 --- a/libraries/difftest/src/test/vsrc/common/ref.v +++ /dev/null @@ -1,63 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -import "DPI-C" function byte pte_helper ( - input longint satp, - input longint vpn, - output longint pte, - output byte level -); - -module PTEHelper( - input clock, - input enable, - input [63:0] satp, - input [63:0] vpn, - output reg [63:0] pte, - output reg [ 7:0] level, - output reg [ 7:0] pf -); - always @(posedge clock) begin - if (enable) begin - pf <= pte_helper(satp, vpn, pte, level); - end - end -endmodule - -import "DPI-C" function longint amo_helper( - input byte cmd, - input longint addr, - input longint wdata, - input byte mask -); - -module AMOHelper( - input clock, - input enable, - input [ 4:0] cmd, - input [63:0] addr, - input [63:0] wdata, - input [ 7:0] mask, - output reg [63:0] rdata -); - - always @(posedge clock) begin - if (enable) begin - rdata <= amo_helper(cmd, addr, wdata, mask); - end - end - -endmodule diff --git a/libraries/difftest/src/test/vsrc/vcs/top.v b/libraries/difftest/src/test/vsrc/vcs/top.v deleted file mode 100644 index dbc864a..0000000 --- a/libraries/difftest/src/test/vsrc/vcs/top.v +++ /dev/null @@ -1,114 +0,0 @@ -/*************************************************************************************** -* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -* Copyright (c) 2020-2021 Peng Cheng Laboratory -* -* XiangShan is licensed under Mulan PSL v2. -* You can use this software according to the terms and conditions of the Mulan PSL v2. -* You may obtain a copy of Mulan PSL v2 at: -* http://license.coscl.org.cn/MulanPSL2 -* -* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -* -* See the Mulan PSL v2 for more details. -***************************************************************************************/ - -import "DPI-C" function void set_bin_file(string bin); -import "DPI-C" function void simv_init(); -import "DPI-C" function int simv_step(); - -module tb_top(); - -reg clock; -reg reset; -reg [63:0] io_logCtrl_log_begin; -reg [63:0] io_logCtrl_log_end; -wire [63:0] io_logCtrl_log_level; -wire io_perfInfo_clean; -wire io_perfInfo_dump; -wire io_uart_out_valid; -wire [ 7:0] io_uart_out_ch; -wire io_uart_in_valid; -wire [ 7:0] io_uart_in_ch; - -string bin_file; -initial begin - clock = 0; - reset = 1; - // enable waveform - if ($test$plusargs("dump-wave")) begin - $vcdplusfile("simv.vpd"); - $vcdpluson; - end - // log begin - if ($test$plusargs("b")) begin - $value$plusargs("b=%d", io_logCtrl_log_begin); - end - else begin - io_logCtrl_log_begin = 0; - end - // log end - if ($test$plusargs("e")) begin - $value$plusargs("e=%d", io_logCtrl_log_end); - end - else begin - io_logCtrl_log_end = 0; - end - // workload: bin file - if ($test$plusargs("workload")) begin - $value$plusargs("workload=%s", bin_file); - set_bin_file(bin_file); - end - - #100 reset = 0; -end -always #1 clock <= ~clock; - -SimTop sim( - .clock(clock), - .reset(reset), - .io_logCtrl_log_begin(io_logCtrl_log_begin), - .io_logCtrl_log_end(io_logCtrl_log_end), - .io_logCtrl_log_level(io_logCtrl_log_level), - .io_perfInfo_clean(io_perfInfo_clean), - .io_perfInfo_dump(io_perfInfo_dump), - .io_uart_out_valid(io_uart_out_valid), - .io_uart_out_ch(io_uart_out_ch), - .io_uart_in_valid(io_uart_in_valid), - .io_uart_in_ch(io_uart_in_ch) -); - -assign io_logCtrl_log_level = 0; -assign io_perfInfo_clean = 0; -assign io_perfInfo_dump = 0; -assign io_uart_in_ch = 8'hff; - -always @(posedge clock) begin - if (!reset && io_uart_out_valid) begin - $fwrite(32'h8000_0001, "%c", io_uart_out_ch); - $fflush(); - end -end - -reg has_init; -always @(posedge clock) begin - if (reset) begin - has_init <= 1'b0; - end - else if (!has_init) begin - simv_init(); - has_init <= 1'b1; - end - - // check errors - if (!reset && has_init) begin - if (simv_step()) begin - $finish(); - end - end - -end - -endmodule - diff --git a/libraries/difftest/vcs.mk b/libraries/difftest/vcs.mk deleted file mode 100644 index 459b0a8..0000000 --- a/libraries/difftest/vcs.mk +++ /dev/null @@ -1,49 +0,0 @@ -#*************************************************************************************** -# Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -# Copyright (c) 2020-2021 Peng Cheng Laboratory -# -# XiangShan is licensed under Mulan PSL v2. -# You can use this software according to the terms and conditions of the Mulan PSL v2. -# You may obtain a copy of Mulan PSL v2 at: -# http://license.coscl.org.cn/MulanPSL2 -# -# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -# -# See the Mulan PSL v2 for more details. -#*************************************************************************************** - -VCS_TARGET = simv - -VCS_CSRC_DIR = $(abspath ./src/test/csrc/vcs) -VCS_CXXFILES = $(SIM_CXXFILES) $(DIFFTEST_CXXFILES) $(shell find $(VCS_CSRC_DIR) -name "*.cpp") -VCS_CXXFLAGS += -std=c++11 -static -Wall -I$(VCS_CSRC_DIR) -I$(SIM_CSRC_DIR) -I$(DIFFTEST_CSRC_DIR) -VCS_LDFLAGS += -lpthread -lSDL2 -ldl -lz - -VCS_VSRC_DIR = $(abspath ./src/test/vsrc/vcs) -VCS_VFILES = $(SIM_VSRC) $(shell find $(VCS_VSRC_DIR) -name "*.v") - -VCS_SEARCH_DIR = $(abspath $(BUILD_DIR)) -VCS_BUILD_DIR = $(abspath $(BUILD_DIR)/simv-compile) - -VCS_FLAGS += -full64 +v2k -timescale=1ns/1ns -sverilog -debug_access+all +lint=TFIPC-L -# randomize all undefined signals (instead of using X) -VCS_FLAGS += +vcs+initreg+random -# VCS_FLAGS += +define+RANDOMIZE_GARBAGE_ASSIGN +define+RANDOMIZE_INVALID_ASSIGN -# VCS_FLAGS += +define+RANDOMIZE_MEM_INIT +define+RANDOMIZE_DELAY=0 +define+RANDOMIZE_REG_INIT -# SRAM lib defines -# VCS_FLAGS += +define+UNIT_DELAY +define+no_warning -# C++ flags -VCS_FLAGS += -CFLAGS "$(VCS_CXXFLAGS)" -LDFLAGS "$(VCS_LDFLAGS)" -j200 -# search build for other missing verilog files -VCS_FLAGS += -y $(VCS_SEARCH_DIR) +libext+.v -# build files put into $(VCS_BUILD_DIR) -VCS_FLAGS += -Mdir=$(VCS_BUILD_DIR) - -$(VCS_TARGET): $(SIM_TOP_V) $(VCS_CXXFILES) $(VCS_VFILES) - vcs $(VCS_FLAGS) $(SIM_TOP_V) $(VCS_CXXFILES) $(VCS_VFILES) - -vcs-clean: - rm -rf simv csrc DVEfiles simv.daidir stack.info.* ucli.key $(VCS_BUILD_DIR) - diff --git a/libraries/difftest/verilator.mk b/libraries/difftest/verilator.mk deleted file mode 100644 index 6062f80..0000000 --- a/libraries/difftest/verilator.mk +++ /dev/null @@ -1,160 +0,0 @@ -#*************************************************************************************** -# Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences -# Copyright (c) 2020-2021 Peng Cheng Laboratory -# -# XiangShan is licensed under Mulan PSL v2. -# You can use this software according to the terms and conditions of the Mulan PSL v2. -# You may obtain a copy of Mulan PSL v2 at: -# http://license.coscl.org.cn/MulanPSL2 -# -# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, -# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, -# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. -# -# See the Mulan PSL v2 for more details. -#*************************************************************************************** - -EMU_TOP = SimTop - -EMU_CSRC_DIR = $(abspath ./src/test/csrc) -EMU_CXXFILES = $(shell find $(EMU_CSRC_DIR) -name "*.cpp") $(SIM_CXXFILES) $(DIFFTEST_CXXFILES) -EMU_CXXFLAGS += -std=c++11 -static -Wall -I$(EMU_CSRC_DIR) -I$(SIM_CSRC_DIR) -I$(DIFFTEST_CSRC_DIR) -EMU_CXXFLAGS += -DVERILATOR -Wno-maybe-uninitialized -DNUM_CORES=$(NUM_CORES) -EMU_LDFLAGS += -lpthread -lSDL2 -ldl -lz - -EMU_VFILES = $(SIM_VSRC) - -CCACHE := $(if $(shell which ccache),ccache,) -ifneq ($(CCACHE),) -export OBJCACHE = ccache -endif - -VEXTRA_FLAGS = -I$(abspath $(BUILD_DIR)) --x-assign unique -O3 -CFLAGS "$(EMU_CXXFLAGS)" -LDFLAGS "$(EMU_LDFLAGS)" - -# Verilator trace support -EMU_TRACE ?= -ifeq ($(EMU_TRACE),1) -VEXTRA_FLAGS += --trace -endif - -# Verilator multi-thread support -EMU_THREADS ?= 0 -ifneq ($(EMU_THREADS),0) -VEXTRA_FLAGS += --threads $(EMU_THREADS) --threads-dpi all -endif - -# Verilator savable -EMU_SNAPSHOT ?= -ifeq ($(EMU_SNAPSHOT),1) -VEXTRA_FLAGS += --savable -EMU_CXXFLAGS += -DVM_SAVABLE -endif - -# Fork-wait -EMU_FORKWAIT ?= -ifeq ($(EMU_FORKWAIT),1) -EMU_CXXFLAGS += -DEN_FORKWAIT -endif - -# Verilator coverage -EMU_COVERAGE ?= -ifeq ($(EMU_COVERAGE),1) -VEXTRA_FLAGS += --coverage-line --coverage-toggle -endif - -# co-simulation with DRAMsim3 -ifeq ($(WITH_DRAMSIM3),1) -EMU_CXXFLAGS += -I$(DRAMSIM3_HOME)/src -EMU_CXXFLAGS += -DWITH_DRAMSIM3 -DDRAMSIM3_CONFIG=\\\"$(DRAMSIM3_HOME)/configs/XiangShan.ini\\\" -DDRAMSIM3_OUTDIR=\\\"$(BUILD_DIR)\\\" -EMU_LDFLAGS += $(DRAMSIM3_HOME)/build/libdramsim3.a -endif - -ifeq ($(DUALCORE),1) -EMU_CXXFLAGS += -DDUALCORE -endif - -USE_BIN ?= 0 -ifeq ($(USE_BIN),1) -EMU_CXXFLAGS += -DUSE_BIN -endif - -# --trace -VERILATOR_FLAGS = \ - --top-module $(EMU_TOP) \ - +define+VERILATOR=1 \ - +define+PRINTF_COND=1 \ - +define+RANDOMIZE_REG_INIT \ - +define+RANDOMIZE_MEM_INIT \ - +define+RANDOMIZE_GARBAGE_ASSIGN \ - +define+RANDOMIZE_DELAY=0 \ - -Wno-STMTDLY -Wno-WIDTH \ - $(VEXTRA_FLAGS) \ - --assert \ - --stats-vars \ - --output-split 30000 \ - --output-split-cfuncs 30000 - -EMU_MK := $(BUILD_DIR)/emu-compile/V$(EMU_TOP).mk -EMU_DEPS := $(EMU_VFILES) $(EMU_CXXFILES) -EMU_HEADERS := $(shell find $(EMU_CSRC_DIR) -name "*.h") \ - $(shell find $(SIM_CSRC_DIR) -name "*.h") \ - $(shell find $(DIFFTEST_CSRC_DIR) -name "*.h") -EMU := $(BUILD_DIR)/emu - -$(EMU_MK): $(SIM_TOP_V) | $(EMU_DEPS) - @mkdir -p $(@D) - @echo "\n[verilator] Generating C++ files..." >> $(TIMELOG) - @date -R | tee -a $(TIMELOG) - $(TIME_CMD) verilator --cc --exe $(VERILATOR_FLAGS) \ - -o $(abspath $(EMU)) -Mdir $(@D) $^ $(EMU_DEPS) - -LOCK = /var/emu/emu.lock -LOCK_BIN = $(abspath $(BUILD_DIR)/lock-emu) -EMU_COMPILE_FILTER = -# 2> $(BUILD_DIR)/g++.err.log | tee $(BUILD_DIR)/g++.out.log | grep 'g++' | awk '{print "Compiling/Generating", $$NF}' - -build_emu_local: $(EMU_MK) - @echo "\n[g++] Compiling C++ files..." >> $(TIMELOG) - @date -R | tee -a $(TIMELOG) - $(TIME_CMD) $(MAKE) VM_PARALLEL_BUILDS=1 OPT_FAST="-O3" -C $(build/coverage.log - -.PHONY: build_emu_local From 38509ed7c593ec92065d8fb12b0a5c19ee529c54 Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Fri, 13 Aug 2021 09:39:45 +0000 Subject: [PATCH 03/62] Modify description --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d28f0ab..6849c5d 100755 --- a/README.md +++ b/README.md @@ -193,7 +193,7 @@ Enter the test cycle: [cpu-tests](https://github.com/NJU-ProjectN/am-kernels) -[riscv-test](https://github.com/NJU-ProjectN/riscv-tests) +[riscv-tests](https://github.com/NJU-ProjectN/riscv-tests) [香山difftest框架](https://github.com/OpenXiangShan/difftest) From 22b7cffaa73aeddbd552d6c9b2135b8e4b3545c7 Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Fri, 13 Aug 2021 21:00:15 +0800 Subject: [PATCH 04/62] Update myinfo.txt --- myinfo.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/myinfo.txt b/myinfo.txt index f6cd159..3833aa0 100755 --- a/myinfo.txt +++ b/myinfo.txt @@ -1,2 +1,2 @@ -ID=202100001 -Name=Leon \ No newline at end of file +ID= +Name= From 421d2ed9c402c8adfe69e5023e81470432303053 Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Fri, 13 Aug 2021 21:09:25 +0800 Subject: [PATCH 05/62] Modify description --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6849c5d..827a11f 100755 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ make clean -a 传入仿真程序的参数,比如:-a "1 2 3 ......",多个参数需要使用双引号 -f 传入c++编译器的参数,比如:-f "-DGLOBAL_DEFINE=1 -ggdb3",多个参数需要使用双引号,该参数在接入difftest时无效 -l 传入c++链接器的参数,比如:-l "-ldl -lm",多个参数需要使用双引号,该参数在接入difftest时无效 --g 使用gdb调试仿真程序,该参数在接入difftest时无效 +-g 使用gdb调试仿真程序 -w 使用gtkwave打开工作目录下修改时间最新的.vcd波形文件 -c 删除工程目录下编译生成的"build"文件夹 -d 接入香山difftest框架 From b1bc64a0b78c37c4475cfb2efadfb6a23f10eda2 Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Fri, 13 Aug 2021 21:09:51 +0800 Subject: [PATCH 06/62] Modify description --- build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sh b/build.sh index f895de9..906b2eb 100755 --- a/build.sh +++ b/build.sh @@ -14,7 +14,7 @@ help() { echo "-a: Parameters passed to the simulation program. For example: -a \"1 2 3 ......\". Multiple parameters require double quotes." echo "-f: C++ compiler arguments for makefile. For example: -f \"-DGLOBAL_DEFINE=1 -ggdb3\". Multiple parameters require double quotes. This option is invalid when connected difftest." echo "-l: C++ linker arguments for makefile. For example: -l \"-ldl -lm\". Multiple parameters require double quotes. This option is invalid when connected difftest." - echo "-g: Debug the simulation program with GDB. This option is invalid when connected difftest." + echo "-g: Debug the simulation program with GDB." echo "-w: Open the latest waveform file(.vcd) using gtkwave under work path. Use the \"build_test\" or \"build\"(difftest) folder as work path." echo "-c: Delete \"build\" and \"build_test\" folders under the project directory." echo "-d: Connect to XiangShan difftest framework." From 475ae6fc7236bb32ce4fcf7870d0f515ac3cc3e7 Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Sun, 15 Aug 2021 08:33:22 +0000 Subject: [PATCH 07/62] Automatically install dependencies & Remove w_id signal --- README.md | 5 ++++- build.sh | 28 ++++++++++++++++++++-------- projects/cpu_axi_diff/vsrc/SimTop.v | 3 --- projects/cpu_axi_diff/vsrc/axi_rw.v | 5 ++--- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 827a11f..bb2a001 100755 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ make clean -a 传入仿真程序的参数,比如:-a "1 2 3 ......",多个参数需要使用双引号 -f 传入c++编译器的参数,比如:-f "-DGLOBAL_DEFINE=1 -ggdb3",多个参数需要使用双引号,该参数在接入difftest时无效 -l 传入c++链接器的参数,比如:-l "-ldl -lm",多个参数需要使用双引号,该参数在接入difftest时无效 --g 使用gdb调试仿真程序 +-g 使用gdb调试仿真程序,该参数在接入difftest时无效 -w 使用gtkwave打开工作目录下修改时间最新的.vcd波形文件 -c 删除工程目录下编译生成的"build"文件夹 -d 接入香山difftest框架 @@ -174,7 +174,10 @@ Enter the test cycle: 在实现了能够运行所有`cpu-tests`和`riscv-tests`测试用例的指令后,可以通过以下命令对CPU进行一键回归测试。该命令会将`bin`目录下的所有`.bin`文件作为参数来调用接入了`香山difftest框架`的仿真程序,其中`xxx`表示例程名。 ``` +# 未接入AXI总线 ./build.sh -e xxx -b -r +# 接入AXI总线 +./build.sh -e xxx -b -r -m "WITH_DRAMSIM3=1" ``` 通过测试的用例,将打印`PASS`。测试失败的用例,打印`FAIL`并生成对应的log文件,可以查看log文件来调试,也可以另外开启波形输出来调试。 diff --git a/build.sh b/build.sh index 906b2eb..2133ec6 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION="1.10" +VERSION="1.11" help() { echo "Version v"$VERSION @@ -14,7 +14,7 @@ help() { echo "-a: Parameters passed to the simulation program. For example: -a \"1 2 3 ......\". Multiple parameters require double quotes." echo "-f: C++ compiler arguments for makefile. For example: -f \"-DGLOBAL_DEFINE=1 -ggdb3\". Multiple parameters require double quotes. This option is invalid when connected difftest." echo "-l: C++ linker arguments for makefile. For example: -l \"-ldl -lm\". Multiple parameters require double quotes. This option is invalid when connected difftest." - echo "-g: Debug the simulation program with GDB." + echo "-g: Debug the simulation program with GDB. This option is invalid when connected difftest." echo "-w: Open the latest waveform file(.vcd) using gtkwave under work path. Use the \"build_test\" or \"build\"(difftest) folder as work path." echo "-c: Delete \"build\" and \"build_test\" folders under the project directory." echo "-d: Connect to XiangShan difftest framework." @@ -33,8 +33,17 @@ create_soft_link() { done } +install_packages() { + for ARG in $* + do + [[ ! `dpkg -l | grep $ARG` ]] && sudo apt-get --yes install $ARG + done +} + compile_dramsim3() { if [[ ! -f $OSCPU_PATH/$DRAMSIM3_FOLDER/build/libdramsim3.a ]]; then + install_packages cmake + [[ ! `dpkg -l | grep cmake` ]] && sudo apt-get --yes install cmake mkdir $OSCPU_PATH/$DRAMSIM3_FOLDER/build cd $OSCPU_PATH/$DRAMSIM3_FOLDER/build cmake -D COSIM=1 .. @@ -44,13 +53,16 @@ compile_dramsim3() { } compile_nemu() { - cd $OSCPU_PATH/$DIFFTEST_FOLDER - make $OSCPU_PATH/$NEMU_FOLDER/build/riscv64-nemu-interpreter-so - if [ $? -ne 0 ]; then - echo "Failed to build nemu!!!" - exit 1 + if [[ ! -f $OSCPU_PATH/$NEMU_FOLDER/build/riscv64-nemu-interpreter-so ]]; then + install_packages libreadline-dev libsdl2-dev bison + cd $OSCPU_PATH/$DIFFTEST_FOLDER + make $OSCPU_PATH/$NEMU_FOLDER/build/riscv64-nemu-interpreter-so + if [ $? -ne 0 ]; then + echo "Failed to build nemu!!!" + exit 1 + fi + cd $OSCPU_PATH fi - cd $OSCPU_PATH } compile_difftest() { diff --git a/projects/cpu_axi_diff/vsrc/SimTop.v b/projects/cpu_axi_diff/vsrc/SimTop.v index a5adf97..6a686f1 100755 --- a/projects/cpu_axi_diff/vsrc/SimTop.v +++ b/projects/cpu_axi_diff/vsrc/SimTop.v @@ -35,7 +35,6 @@ module SimTop( output [`AXI_DATA_WIDTH-1:0] `AXI_TOP_INTERFACE(w_bits_data) [3:0], output [`AXI_DATA_WIDTH/8-1:0] `AXI_TOP_INTERFACE(w_bits_strb), output `AXI_TOP_INTERFACE(w_bits_last), - output [`AXI_ID_WIDTH-1:0] `AXI_TOP_INTERFACE(w_bits_id), output `AXI_TOP_INTERFACE(b_ready), input `AXI_TOP_INTERFACE(b_valid), @@ -83,7 +82,6 @@ module SimTop( wire [`AXI_DATA_WIDTH-1:0] w_data [0:0]; wire [`AXI_DATA_WIDTH/8-1:0] w_strb; wire w_last; - wire [`AXI_ID_WIDTH-1:0] w_id; wire b_ready; wire b_valid; @@ -164,7 +162,6 @@ module SimTop( .axi_w_data_o (w_data[0]), .axi_w_strb_o (w_strb), .axi_w_last_o (w_last), - .axi_w_id_o (w_id), .axi_b_ready_o (b_ready), .axi_b_valid_i (b_valid), diff --git a/projects/cpu_axi_diff/vsrc/axi_rw.v b/projects/cpu_axi_diff/vsrc/axi_rw.v index ad3e673..ccc4f3f 100755 --- a/projects/cpu_axi_diff/vsrc/axi_rw.v +++ b/projects/cpu_axi_diff/vsrc/axi_rw.v @@ -88,7 +88,6 @@ module axi_rw # ( output [AXI_DATA_WIDTH-1:0] axi_w_data_o, output [AXI_DATA_WIDTH/8-1:0] axi_w_strb_o, output axi_w_last_o, - output [AXI_ID_WIDTH-1:0] axi_w_id_o, output axi_b_ready_o, input axi_b_valid_i, @@ -120,7 +119,7 @@ module axi_rw # ( wire w_trans = rw_req_i == `REQ_WRITE; wire r_trans = rw_req_i == `REQ_READ; - wire w_valid = rw_valid_i & r_trans; + wire w_valid = rw_valid_i & w_trans; wire r_valid = rw_valid_i & r_trans; // handshake @@ -146,7 +145,7 @@ module axi_rw # ( // Wirte State Machine always @(posedge clock) begin if (reset) begin - w_state <= R_STATE_IDLE; + w_state <= W_STATE_IDLE; end else begin if (w_valid) begin From 10a14cdcdf77fa9c9b6562a722892a741da9bbdb Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Mon, 16 Aug 2021 09:07:26 +0000 Subject: [PATCH 08/62] Modify AXI signals --- projects/cpu_axi_diff/vsrc/SimTop.v | 10 ++++++++-- projects/cpu_axi_diff/vsrc/axi_rw.v | 17 +++++++++++------ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/projects/cpu_axi_diff/vsrc/SimTop.v b/projects/cpu_axi_diff/vsrc/SimTop.v index 6a686f1..54d4b05 100755 --- a/projects/cpu_axi_diff/vsrc/SimTop.v +++ b/projects/cpu_axi_diff/vsrc/SimTop.v @@ -76,12 +76,14 @@ module SimTop( wire aw_lock; wire [3:0] aw_cache; wire [3:0] aw_qos; + wire [3:0] aw_region; wire w_ready; wire w_valid; - wire [`AXI_DATA_WIDTH-1:0] w_data [0:0]; + wire [`AXI_DATA_WIDTH-1:0] w_data; wire [`AXI_DATA_WIDTH/8-1:0] w_strb; wire w_last; + wire [`AXI_USER_WIDTH-1:0] w_user; wire b_ready; wire b_valid; @@ -101,6 +103,7 @@ module SimTop( wire ar_lock; wire [3:0] ar_cache; wire [3:0] ar_qos; + wire [3:0] ar_region; wire r_ready; wire r_valid; @@ -156,12 +159,14 @@ module SimTop( .axi_aw_lock_o (aw_lock), .axi_aw_cache_o (aw_cache), .axi_aw_qos_o (aw_qos), + .axi_aw_region_o (aw_region), .axi_w_ready_i (w_ready), .axi_w_valid_o (w_valid), - .axi_w_data_o (w_data[0]), + .axi_w_data_o (w_data), .axi_w_strb_o (w_strb), .axi_w_last_o (w_last), + .axi_w_user_o (w_user), .axi_b_ready_o (b_ready), .axi_b_valid_i (b_valid), @@ -181,6 +186,7 @@ module SimTop( .axi_ar_lock_o (ar_lock), .axi_ar_cache_o (ar_cache), .axi_ar_qos_o (ar_qos), + .axi_ar_region_o (ar_region), .axi_r_ready_o (r_ready), .axi_r_valid_i (r_valid), diff --git a/projects/cpu_axi_diff/vsrc/axi_rw.v b/projects/cpu_axi_diff/vsrc/axi_rw.v index ccc4f3f..7cd0b8e 100755 --- a/projects/cpu_axi_diff/vsrc/axi_rw.v +++ b/projects/cpu_axi_diff/vsrc/axi_rw.v @@ -82,12 +82,14 @@ module axi_rw # ( output axi_aw_lock_o, output [3:0] axi_aw_cache_o, output [3:0] axi_aw_qos_o, + output [3:0] axi_aw_region_o, input axi_w_ready_i, output axi_w_valid_o, output [AXI_DATA_WIDTH-1:0] axi_w_data_o, output [AXI_DATA_WIDTH/8-1:0] axi_w_strb_o, output axi_w_last_o, + output [AXI_USER_WIDTH-1:0] axi_w_user_o, output axi_b_ready_o, input axi_b_valid_i, @@ -107,6 +109,7 @@ module axi_rw # ( output axi_ar_lock_o, output [3:0] axi_ar_cache_o, output [3:0] axi_ar_qos_o, + output [3:0] axi_ar_region_o, output axi_r_ready_o, input axi_r_valid_i, @@ -197,8 +200,9 @@ module axi_rw # ( parameter AXI_SIZE = $clog2(AXI_DATA_WIDTH / 8); parameter MASK_WIDTH = AXI_DATA_WIDTH * 2; parameter TRANS_LEN = RW_DATA_WIDTH / AXI_DATA_WIDTH; + parameter BLOCK_TRANS = TRANS_LEN > 1 ? 1'b1 : 0'b0; - wire aligned = TRANS_LEN != 1 | rw_addr_i[ALIGNED_WIDTH-1:0] == 0; + wire aligned = BLOCK_TRANS | rw_addr_i[ALIGNED_WIDTH-1:0] == 0; wire size_b = rw_size_i == `SIZE_B; wire size_h = rw_size_i == `SIZE_H; wire size_w = rw_size_i == `SIZE_W; @@ -214,7 +218,8 @@ module axi_rw # ( wire [7:0] axi_len = aligned ? TRANS_LEN - 1 : {{7{1'b0}}, overstep}; wire [2:0] axi_size = AXI_SIZE[2:0]; - wire [AXI_ADDR_WIDTH-1:0] axi_addr = {rw_addr_i[AXI_ADDR_WIDTH-1:ALIGNED_WIDTH], {ALIGNED_WIDTH{1'b0}}}; + + wire [AXI_ADDR_WIDTH-1:0] axi_addr = {rw_addr_i[AXI_ADDR_WIDTH-1:ALIGNED_WIDTH], {ALIGNED_WIDTH{1'b0}}}; wire [OFFSET_WIDTH-1:0] aligned_offset_l = {{OFFSET_WIDTH-ALIGNED_WIDTH{1'b0}}, {rw_addr_i[ALIGNED_WIDTH-1:0]}} << 3; wire [OFFSET_WIDTH-1:0] aligned_offset_h = AXI_DATA_WIDTH - aligned_offset_l; wire [MASK_WIDTH-1:0] mask = (({MASK_WIDTH{size_b}} & {{MASK_WIDTH-8{1'b0}}, 8'hff}) @@ -222,11 +227,11 @@ module axi_rw # ( | ({MASK_WIDTH{size_w}} & {{MASK_WIDTH-32{1'b0}}, 32'hffffffff}) | ({MASK_WIDTH{size_d}} & {{MASK_WIDTH-64{1'b0}}, 64'hffffffff_ffffffff}) ) << aligned_offset_l; - wire [AXI_DATA_WIDTH-1:0] mask_l = mask[AXI_DATA_WIDTH-1:0]; - wire [AXI_DATA_WIDTH-1:0] mask_h = mask[MASK_WIDTH-1:AXI_DATA_WIDTH]; + wire [AXI_DATA_WIDTH-1:0] mask_l = mask[AXI_DATA_WIDTH-1:0]; + wire [AXI_DATA_WIDTH-1:0] mask_h = mask[MASK_WIDTH-1:AXI_DATA_WIDTH]; - wire [AXI_ID_WIDTH-1:0] axi_id = {AXI_ID_WIDTH{1'b0}}; - wire [AXI_USER_WIDTH-1:0] axi_user = {AXI_USER_WIDTH{1'b0}}; + wire [AXI_ID_WIDTH-1:0] axi_id = {AXI_ID_WIDTH{1'b0}}; + wire [AXI_USER_WIDTH-1:0] axi_user = {AXI_USER_WIDTH{1'b0}}; reg rw_ready; wire rw_ready_nxt = trans_done; From 0dfa9caea5e2aee34303e509f0befac488e85a91 Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Mon, 16 Aug 2021 12:22:32 +0000 Subject: [PATCH 09/62] Change default difftest priv mode to M mode --- projects/cpu_axi_diff/vsrc/cpu.v | 2 +- projects/cpu_axi_diff/vsrc/defines.v | 4 ++++ projects/cpu_diff/vsrc/SimTop.v | 2 +- projects/cpu_diff/vsrc/defines.v | 4 ++++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/projects/cpu_axi_diff/vsrc/cpu.v b/projects/cpu_axi_diff/vsrc/cpu.v index 4b1ad7a..c3b4f76 100755 --- a/projects/cpu_axi_diff/vsrc/cpu.v +++ b/projects/cpu_axi_diff/vsrc/cpu.v @@ -213,7 +213,7 @@ DifftestTrapEvent DifftestTrapEvent( DifftestCSRState DifftestCSRState( .clock (clock), .coreid (0), - .priviledgeMode (0), + .priviledgeMode (`RISCV_PRIV_MODE_M), .mstatus (0), .sstatus (0), .mepc (0), diff --git a/projects/cpu_axi_diff/vsrc/defines.v b/projects/cpu_axi_diff/vsrc/defines.v index 86731fd..a96d66b 100755 --- a/projects/cpu_axi_diff/vsrc/defines.v +++ b/projects/cpu_axi_diff/vsrc/defines.v @@ -19,3 +19,7 @@ `define REQ_READ 1'b0 `define REQ_WRITE 1'b1 +`define RISCV_PRIV_MODE_U 0 +`define RISCV_PRIV_MODE_S 1 +`define RISCV_PRIV_MODE_M 3 + diff --git a/projects/cpu_diff/vsrc/SimTop.v b/projects/cpu_diff/vsrc/SimTop.v index 8f892c4..8159487 100755 --- a/projects/cpu_diff/vsrc/SimTop.v +++ b/projects/cpu_diff/vsrc/SimTop.v @@ -206,7 +206,7 @@ DifftestTrapEvent DifftestTrapEvent( DifftestCSRState DifftestCSRState( .clock (clock), .coreid (0), - .priviledgeMode (0), + .priviledgeMode (`RISCV_PRIV_MODE_M), .mstatus (0), .sstatus (0), .mepc (0), diff --git a/projects/cpu_diff/vsrc/defines.v b/projects/cpu_diff/vsrc/defines.v index b98132d..d5ac14a 100755 --- a/projects/cpu_diff/vsrc/defines.v +++ b/projects/cpu_diff/vsrc/defines.v @@ -5,3 +5,7 @@ `define PC_START 64'h00000000_80000000 `define REG_BUS 63 : 0 `define INST_ADD 8'h11 + +`define RISCV_PRIV_MODE_U 0 +`define RISCV_PRIV_MODE_S 1 +`define RISCV_PRIV_MODE_M 3 From 43192d512988d1d5c37b1d9f9abd1660dbb474a5 Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Tue, 17 Aug 2021 12:53:51 +0000 Subject: [PATCH 10/62] Support 8-bytes AXI write strobes match --- README.md | 2 +- libraries/difftest | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bb2a001..238878d 100755 --- a/README.md +++ b/README.md @@ -117,7 +117,7 @@ make clean ./build.sh -e counter -b -s ``` -如果`Verilator `安装正确,你会看到下面的输出 +如果`verilator`安装正确,你会看到下面的输出 ``` Simulating... diff --git a/libraries/difftest b/libraries/difftest index 36dfe26..0d666c3 160000 --- a/libraries/difftest +++ b/libraries/difftest @@ -1 +1 @@ -Subproject commit 36dfe26d66ca0b4adc4ed06351329b1432e7f54a +Subproject commit 0d666c3ef08190cc7cebab753c1b3b8709c4418c From c5ac732f7f67d65e6a5784f0a39139e9bb910db3 Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Tue, 17 Aug 2021 13:49:58 +0000 Subject: [PATCH 11/62] Change default RAM of NEMU and Difftest to 256MB during compilation --- README.md | 38 -------------------------------------- build.sh | 9 ++++++--- 2 files changed, 6 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 238878d..7b695c7 100755 --- a/README.md +++ b/README.md @@ -48,44 +48,6 @@ git config --global user.name "2021000001-Zhang San" git config --global user.email "zhangsan@foo.com" ``` -# 编译NEMU - -`香山difftest框架`依赖`NEMU`的支持,本项目已经集成`NEMU`和`香山difftest框架`,编译`香山difftest框架`之前,需要安装编译`NEMU`所需的软件包。 - -``` -sudo apt-get install libreadline-dev libsdl2-dev bison -``` - -如果内存小于8G,编译该工程之前,需要修改`NEMU`和`香山difftest框架`的ram大小。 - -修改`NEMU`的ram大小: - -``` -cd libraries/NEMU -export NEMU_HOME=`pwd` -make defconfig riscv64-xs-ref_defconfig -make menuconfig -#进入Memory Configuration菜单,将Memory size的值修改为0x10000000,回车,保存,退出 -make -``` - -修改`香山difftest框架`的ram大小,文件:`libraries/difftest/src/test/csrc/common/ram.h`。 - -``` -#define EMU_RAM_SIZE (256 * 1024 * 1024UL) -//#define EMU_RAM_SIZE (8 * 1024 * 1024 * 1024UL) -``` - -对于`NEMU`更新后导致的`香山difftest框架`编译或运行报错,可以在清除`NEMU`编译的文件后运行build.sh来重新编译`NEMU`。 - -``` -cd libraries/NEMU -export NEMU_HOME=`pwd` -make clean -``` - -对于`香山difftest框架`更新导致的编译或运行报错,也可通过`build.sh`中的`-c`选项删除`build`目录后重新编译工程。 - # 例程 我们提供了脚本`build.sh`用于自动化编译、仿真和查看波形。下面是`build.sh`的参数说明,也可在oscpu目录下使用`./build.sh -h`命令查看帮助。 diff --git a/build.sh b/build.sh index 2133ec6..0c8602e 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION="1.11" +VERSION="1.12" help() { echo "Version v"$VERSION @@ -55,8 +55,10 @@ compile_dramsim3() { compile_nemu() { if [[ ! -f $OSCPU_PATH/$NEMU_FOLDER/build/riscv64-nemu-interpreter-so ]]; then install_packages libreadline-dev libsdl2-dev bison - cd $OSCPU_PATH/$DIFFTEST_FOLDER - make $OSCPU_PATH/$NEMU_FOLDER/build/riscv64-nemu-interpreter-so + cd $OSCPU_PATH/$NEMU_FOLDER + make riscv64-xs-ref_defconfig + sed -i 's/CONFIG_MSIZE=0x200000000/CONFIG_MSIZE=0x10000000/' .config + make if [ $? -ne 0 ]; then echo "Failed to build nemu!!!" exit 1 @@ -67,6 +69,7 @@ compile_nemu() { compile_difftest() { cd $OSCPU_PATH/$DIFFTEST_FOLDER + sed -i 's/#define EMU_RAM_SIZE (8 \* 1024 \* 1024 \* 1024UL)/#define EMU_RAM_SIZE (256 \* 1024 \* 1024UL)/' src/test/csrc/common/ram.h make DESIGN_DIR=$PROJECT_PATH $DIFFTEST_PARAM if [ $? -ne 0 ]; then echo "Failed to build difftest!!!" From 74359433fbcad7eb24db9e77cd57a13f93f63c22 Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Wed, 18 Aug 2021 04:56:51 +0000 Subject: [PATCH 12/62] Optimize logic of build.sh --- build.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/build.sh b/build.sh index 0c8602e..d2741e1 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION="1.12" +VERSION="1.13" help() { echo "Version v"$VERSION @@ -48,6 +48,10 @@ compile_dramsim3() { cd $OSCPU_PATH/$DRAMSIM3_FOLDER/build cmake -D COSIM=1 .. make + if [ $? -ne 0 ]; then + echo "Failed to build dramsim3!!!" + exit 1 + fi cd $OSCPU_PATH fi } @@ -196,7 +200,7 @@ NAME="${NAME##*\r}" # Clean if [[ "$CLEAN" == "true" ]]; then - rm -rf $BUILD_PATH + rm -rf $PROJECT_PATH/$BUILD_FOLDER $PROJECT_PATH/$DIFF_BUILD_FOLDER [[ "$DIFFTEST" == "true" ]] && unlink $PROJECT_PATH/$DIFFTEST_FOLDER 1>/dev/null 2>&1 exit 0 fi From 872cdee35813c1976a7f2aeab8403a2d92db33b6 Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Wed, 18 Aug 2021 05:33:08 +0000 Subject: [PATCH 13/62] Modify description --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b695c7..689ad25 100755 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ git config --global user.email "zhangsan@foo.com" ## 编译和仿真 -`projects`目录下几个例程可用于了解如何基于`Verilator`和`香山difftest框架`来开发仿真CPU。 +`projects`目录下几个例程可用于了解如何基于`verilator`和`香山difftest框架`来开发仿真CPU。 ### counter From 8bde5e89631b18a7a3d62f7cd8e2dd51335108a6 Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Thu, 19 Aug 2021 08:49:26 +0000 Subject: [PATCH 14/62] Optimize logic --- README.md | 2 +- build.sh | 28 +++++++++++++++++----------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 689ad25..e931acf 100755 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ Enter the test cycle: # 编译仿真 ./build.sh -e cpu_diff -d -b -s -a "-i inst_diff.bin" # 编译仿真,并从CPU上报至difftest的时钟周期0开始输出波形 -./build.sh -e cpu_diff -d -b -s -a "-i inst_diff.bin --dump-wave -b 0" -m "EMU_TRACE=1" +./build.sh -e cpu_diff -d -b -s -a "-i inst_diff.bin --dump-wave -b 0" -m "EMU_TRACE=1" ``` 仿真程序运行后,终端将打印绿色的提示内容`HIT GOOD TRAP at pc = 0x8000000c`。说明程序运行到自定义的`0x6b`指令,并且此时存放错误码的`a0`寄存器的值为0,即程序按照预期结果成功退出。关于`0x6b`自定义指令作用,可参考[讲座-AM运行环境介绍](https://oscpu.github.io/ysyx/events/events.html?EID=2021-07-13_AM_Difftest)。如果指定输出波形,将在`projects/cpu_diff/build/`路径下生成`.vcd`波形文件。 diff --git a/build.sh b/build.sh index d2741e1..2ca2e6b 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION="1.13" +VERSION="1.14" help() { echo "Version v"$VERSION @@ -57,9 +57,9 @@ compile_dramsim3() { } compile_nemu() { - if [[ ! -f $OSCPU_PATH/$NEMU_FOLDER/build/riscv64-nemu-interpreter-so ]]; then + if [[ ! -f $NEMU_HOME/build/riscv64-nemu-interpreter-so ]]; then install_packages libreadline-dev libsdl2-dev bison - cd $OSCPU_PATH/$NEMU_FOLDER + cd $NEMU_HOME make riscv64-xs-ref_defconfig sed -i 's/CONFIG_MSIZE=0x200000000/CONFIG_MSIZE=0x10000000/' .config make @@ -72,7 +72,7 @@ compile_nemu() { } compile_difftest() { - cd $OSCPU_PATH/$DIFFTEST_FOLDER + cd $DIFFTEST_HOME sed -i 's/#define EMU_RAM_SIZE (8 \* 1024 \* 1024 \* 1024UL)/#define EMU_RAM_SIZE (256 \* 1024 \* 1024UL)/' src/test/csrc/common/ram.h make DESIGN_DIR=$PROJECT_PATH $DIFFTEST_PARAM if [ $? -ne 0 ]; then @@ -87,8 +87,8 @@ build_diff_proj() { touch -m `find $BUILD_PATH -name $DIFFTEST_TOP_FILE` 1>/dev/null 2>&1 # create soft link ($BUILD_PATH/*.v -> $PROJECT_PATH/$VSRC_FOLDER/*.v) create_soft_link $BUILD_PATH $PROJECT_PATH/$VSRC_FOLDER \"*.v\" - # create soft link ($PROJECT_PATH/difftest -> $OSCPU_PATH/difftest) - eval "ln -s \"`realpath --relative-to="$OSCPU_PATH/$DIFFTEST_FOLDER" "$PROJECT_PATH"`/$DIFFTEST_FOLDER\" \"$PROJECT_PATH/$DIFFTEST_FOLDER\" 1>/dev/null 2>&1" + # create soft link ($PROJECT_PATH/difftest -> $LIBRARIES_HOME/difftest) + eval "ln -s \"`realpath --relative-to="$PROJECT_PATH" "$LIBRARIES_HOME"`/$DIFFTEST_FOLDER\" \"$PROJECT_PATH/$DIFFTEST_FOLDER\" 1>/dev/null 2>&1" compile_dramsim3 compile_nemu @@ -148,10 +148,12 @@ PARAMETERS= CFLAGS= LDFLAGS= GDB="false" +LIBRARIES_FOLDER="libraries" DIFFTEST="false" -DIFFTEST_FOLDER="libraries/difftest" +DIFFTEST_FOLDER="difftest" +DIFFTEST_PATH=$LIBRARIES_FOLDER/$DIFFTEST_FOLDER DIFFTEST_TOP_FILE="SimTop.v" -NEMU_FOLDER="libraries/NEMU" +NEMU_PATH=$LIBRARIES_FOLDER"/NEMU" DIFFTEST_HELPER_PATH="src/test/vsrc/common" DIFFTEST_PARAM= RUNALL="false" @@ -184,9 +186,13 @@ done PROJECT_PATH=$OSCPU_PATH/projects/$PROJECT_FOLDER [[ "$DIFFTEST" == "true" ]] && BUILD_PATH=$PROJECT_PATH/$DIFF_BUILD_FOLDER || BUILD_PATH=$PROJECT_PATH/$BUILD_FOLDER [[ "$DIFFTEST" == "true" ]] && V_TOP_FILE=$DIFFTEST_TOP_FILE -export NEMU_HOME=$OSCPU_PATH/$NEMU_FOLDER +NEMU_HOME=$OSCPU_PATH/$NEMU_PATH +DIFFTEST_HOME=$OSCPU_PATH/$DIFFTEST_PATH +DRAMSIM3_HOME=$OSCPU_PATH/$DRAMSIM3_FOLDER +LIBRARIES_HOME=$OSCPU_PATH/$LIBRARIES_FOLDER +export NEMU_HOME=$NEMU_HOME export NOOP_HOME=$PROJECT_PATH -export DRAMSIM3_HOME=$OSCPU_PATH/$DRAMSIM3_FOLDER +export DRAMSIM3_HOME=$DRAMSIM3_HOME # Get id and name ID=`sed '/^ID=/!d;s/.*=//' $MYINFO_FILE` @@ -201,7 +207,7 @@ NAME="${NAME##*\r}" # Clean if [[ "$CLEAN" == "true" ]]; then rm -rf $PROJECT_PATH/$BUILD_FOLDER $PROJECT_PATH/$DIFF_BUILD_FOLDER - [[ "$DIFFTEST" == "true" ]] && unlink $PROJECT_PATH/$DIFFTEST_FOLDER 1>/dev/null 2>&1 + unlink $PROJECT_PATH/$DIFFTEST_FOLDER 1>/dev/null 2>&1 exit 0 fi From dcc41e2fbd28346237832685138d0309403f2ebf Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Sat, 21 Aug 2021 09:20:34 +0000 Subject: [PATCH 15/62] Optimize logic --- build.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/build.sh b/build.sh index 2ca2e6b..0b15096 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION="1.14" +VERSION="1.15" help() { echo "Version v"$VERSION @@ -88,7 +88,9 @@ build_diff_proj() { # create soft link ($BUILD_PATH/*.v -> $PROJECT_PATH/$VSRC_FOLDER/*.v) create_soft_link $BUILD_PATH $PROJECT_PATH/$VSRC_FOLDER \"*.v\" # create soft link ($PROJECT_PATH/difftest -> $LIBRARIES_HOME/difftest) - eval "ln -s \"`realpath --relative-to="$PROJECT_PATH" "$LIBRARIES_HOME"`/$DIFFTEST_FOLDER\" \"$PROJECT_PATH/$DIFFTEST_FOLDER\" 1>/dev/null 2>&1" + if [[ ! -L $PROJECT_PATH/$DIFFTEST_FOLDER ]]; then + eval "ln -s \"`realpath --relative-to="$PROJECT_PATH" "$LIBRARIES_HOME"`/$DIFFTEST_FOLDER\" \"$PROJECT_PATH/$DIFFTEST_FOLDER\" 1>/dev/null 2>&1" + fi compile_dramsim3 compile_nemu From 9641244c7cc3fd040fc2ed1cc363c8b84ab40a05 Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Fri, 27 Aug 2021 15:45:53 +0000 Subject: [PATCH 16/62] Update submodule --- libraries/NEMU | 2 +- libraries/difftest | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/NEMU b/libraries/NEMU index b537550..e1f8965 160000 --- a/libraries/NEMU +++ b/libraries/NEMU @@ -1 +1 @@ -Subproject commit b5375505a157ae8bd0d945ffbc90915727133a43 +Subproject commit e1f89656d4ea0eafde9d69d18eacf1f7a0fe125d diff --git a/libraries/difftest b/libraries/difftest index 0d666c3..d01e34a 160000 --- a/libraries/difftest +++ b/libraries/difftest @@ -1 +1 @@ -Subproject commit 0d666c3ef08190cc7cebab753c1b3b8709c4418c +Subproject commit d01e34a0bbfa72072e4ab9aeda151d1ccdc30f05 From c98fe615ff05ff2c724c900a34afc86f8d8799ad Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Mon, 30 Aug 2021 05:26:17 +0000 Subject: [PATCH 17/62] Adapt new difftest --- build.sh | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/build.sh b/build.sh index 0b15096..cd7eeda 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION="1.15" +VERSION="1.16" help() { echo "Version v"$VERSION @@ -73,7 +73,7 @@ compile_nemu() { compile_difftest() { cd $DIFFTEST_HOME - sed -i 's/#define EMU_RAM_SIZE (8 \* 1024 \* 1024 \* 1024UL)/#define EMU_RAM_SIZE (256 \* 1024 \* 1024UL)/' src/test/csrc/common/ram.h + sed -i 's/#define EMU_RAM_SIZE (8 \* 1024 \* 1024 \* 1024UL)/#define EMU_RAM_SIZE (256 \* 1024 \* 1024UL)/' config/config.h make DESIGN_DIR=$PROJECT_PATH $DIFFTEST_PARAM if [ $? -ne 0 ]; then echo "Failed to build difftest!!!" @@ -218,9 +218,11 @@ if [[ "$BUILD" == "true" ]]; then [[ "$DIFFTEST" == "true" ]] && build_diff_proj || build_proj #git commit - git add . -A --ignore-errors - (echo $NAME && echo $ID && hostnamectl && uptime) | git commit -F - -q --author='tracer-oscpu2021 ' --no-verify --allow-empty 1>/dev/null 2>&1 - sync + if [[ ! -f $OSCPU_PATH/.no_commit ]]; then + git add . -A --ignore-errors + (echo $NAME && echo $ID && hostnamectl && uptime) | git commit -F - -q --author='tracer-oscpu2021 ' --no-verify --allow-empty 1>/dev/null 2>&1 + sync + fi fi # Simulate From 0f74c361c4158aba78f9afa31842c111b74ae8bf Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Tue, 31 Aug 2021 16:15:34 +0000 Subject: [PATCH 18/62] Modify submodule url --- .gitmodules | 6 +++--- libraries/NEMU | 2 +- libraries/difftest | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.gitmodules b/.gitmodules index f2fcaa7..1edc84f 100755 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,9 @@ [submodule "libraries/DRAMsim3"] path = libraries/DRAMsim3 - url = https://github.com/OpenXiangShan/DRAMsim3.git + url = https://gitee.com/oscpu/DRAMsim3.git [submodule "libraries/NEMU"] path = libraries/NEMU - url = https://github.com/OpenXiangShan/NEMU.git + url = https://gitee.com/oscpu/NEMU.git [submodule "libraries/difftest"] path = libraries/difftest - url = https://github.com/OpenXiangShan/difftest.git + url = https://gitee.com/oscpu/difftest.git diff --git a/libraries/NEMU b/libraries/NEMU index e1f8965..1b199ca 160000 --- a/libraries/NEMU +++ b/libraries/NEMU @@ -1 +1 @@ -Subproject commit e1f89656d4ea0eafde9d69d18eacf1f7a0fe125d +Subproject commit 1b199ca69fa7c66ecd2e10b0613d385fb7c13e92 diff --git a/libraries/difftest b/libraries/difftest index d01e34a..c8e5f87 160000 --- a/libraries/difftest +++ b/libraries/difftest @@ -1 +1 @@ -Subproject commit d01e34a0bbfa72072e4ab9aeda151d1ccdc30f05 +Subproject commit c8e5f873ab8b3a7ebb492eaa1128bb92f1acfa3b From 31343c7ae3da69fab0d5212afc5e6c2ce1c7a27f Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Wed, 1 Sep 2021 07:26:44 +0000 Subject: [PATCH 19/62] Update build.sh & Add chisel_cpu_diff demo & Add test cases --- README.md | 94 ++++++++++------- bin/README.md | 36 +++++++ .../benchmark/coremark/coremark.bin | Bin 0 -> 20584 bytes .../benchmark/dhrystone/dhrystone.bin | Bin 0 -> 23580 bytes .../benchmark/microbench/microbench-huge.bin | Bin 0 -> 31448 bytes .../benchmark/microbench/microbench-ref.bin | Bin 0 -> 31448 bytes .../benchmark/microbench/microbench-test.bin | Bin 0 -> 31448 bytes .../benchmark/microbench/microbench-train.bin | Bin 0 -> 31448 bytes bin/custom-output/hello/amtest-hello.bin | Bin 0 -> 617432 bytes .../interrupt-test/amtest-interrupt-test.bin | Bin 0 -> 617432 bytes bin/custom-output/mario/fceux-mario.bin | Bin 0 -> 1886136 bytes bin/custom-output/rt-thread/rtthread.bin | Bin 0 -> 106401 bytes .../time-test/amtest-time-test.bin | Bin 0 -> 617432 bytes .../yield-test/amtest-yield-test.bin | Bin 0 -> 617400 bytes bin/non-output/coremark/coremark.bin | Bin 0 -> 20400 bytes bin/non-output/cpu-tests/add-cpu-tests.bin | Bin 0 -> 1176 bytes .../cpu-tests/add-longlong-cpu-tests.bin | Bin 0 -> 1448 bytes bin/non-output/cpu-tests/bit-cpu-tests.bin | Bin 0 -> 1136 bytes .../cpu-tests/bubble-sort-cpu-tests.bin | Bin 0 -> 1072 bytes bin/non-output/cpu-tests/div-cpu-tests.bin | Bin 0 -> 1256 bytes bin/non-output/cpu-tests/dummy-cpu-tests.bin | Bin 0 -> 648 bytes bin/non-output/cpu-tests/fact-cpu-tests.bin | Bin 0 -> 1036 bytes bin/non-output/cpu-tests/fib-cpu-tests.bin | Bin 0 -> 1120 bytes .../cpu-tests/goldbach-cpu-tests.bin | Bin 0 -> 1248 bytes .../cpu-tests/hello-str-cpu-tests.bin | Bin 0 -> 6152 bytes .../cpu-tests/if-else-cpu-tests.bin | Bin 0 -> 984 bytes .../cpu-tests/leap-year-cpu-tests.bin | Bin 0 -> 1592 bytes .../cpu-tests/load-store-cpu-tests.bin | Bin 0 -> 1240 bytes .../cpu-tests/matrix-mul-cpu-tests.bin | Bin 0 -> 2608 bytes bin/non-output/cpu-tests/max-cpu-tests.bin | Bin 0 -> 1192 bytes bin/non-output/cpu-tests/min3-cpu-tests.bin | Bin 0 -> 1224 bytes bin/non-output/cpu-tests/mov-c-cpu-tests.bin | Bin 0 -> 960 bytes bin/non-output/cpu-tests/movsx-cpu-tests.bin | Bin 0 -> 1138 bytes .../cpu-tests/mul-longlong-cpu-tests.bin | Bin 0 -> 1072 bytes bin/non-output/cpu-tests/pascal-cpu-tests.bin | Bin 0 -> 1148 bytes bin/non-output/cpu-tests/prime-cpu-tests.bin | Bin 0 -> 1136 bytes .../cpu-tests/quick-sort-cpu-tests.bin | Bin 0 -> 1240 bytes .../cpu-tests/recursion-cpu-tests.bin | Bin 0 -> 1568 bytes .../cpu-tests/select-sort-cpu-tests.bin | Bin 0 -> 1128 bytes bin/non-output/cpu-tests/shift-cpu-tests.bin | Bin 0 -> 1048 bytes .../cpu-tests/shuixianhua-cpu-tests.bin | Bin 0 -> 1312 bytes bin/non-output/cpu-tests/string-cpu-tests.bin | Bin 0 -> 2540 bytes .../cpu-tests/sub-longlong-cpu-tests.bin | Bin 0 -> 1448 bytes bin/non-output/cpu-tests/sum-cpu-tests.bin | Bin 0 -> 760 bytes bin/non-output/cpu-tests/switch-cpu-tests.bin | Bin 0 -> 952 bytes .../cpu-tests/to-lower-case-cpu-tests.bin | Bin 0 -> 944 bytes .../cpu-tests/unalign-cpu-tests.bin | Bin 0 -> 960 bytes bin/non-output/cpu-tests/wanshu-cpu-tests.bin | Bin 0 -> 1160 bytes bin/non-output/dhrystone/dhrystone.bin | Bin 0 -> 23404 bytes bin/non-output/microbench/microbench-huge.bin | Bin 0 -> 31264 bytes bin/non-output/microbench/microbench-ref.bin | Bin 0 -> 31264 bytes bin/non-output/microbench/microbench-test.bin | Bin 0 -> 31264 bytes .../microbench/microbench-train.bin | Bin 0 -> 31264 bytes .../riscv-tests/add-riscv-tests.bin | Bin 0 -> 1360 bytes .../riscv-tests/addi-riscv-tests.bin | Bin 0 -> 720 bytes .../riscv-tests/addiw-riscv-tests.bin | Bin 0 -> 720 bytes .../riscv-tests/addw-riscv-tests.bin | Bin 0 -> 1296 bytes .../riscv-tests/and-riscv-tests.bin | Bin 0 -> 1424 bytes .../riscv-tests/andi-riscv-tests.bin | Bin 0 -> 592 bytes .../riscv-tests/auipc-riscv-tests.bin | Bin 0 -> 136 bytes .../riscv-tests/beq-riscv-tests.bin | Bin 0 -> 784 bytes .../riscv-tests/bge-riscv-tests.bin | Bin 0 -> 848 bytes .../riscv-tests/bgeu-riscv-tests.bin | Bin 0 -> 1104 bytes .../riscv-tests/blt-riscv-tests.bin | Bin 0 -> 784 bytes .../riscv-tests/bltu-riscv-tests.bin | Bin 0 -> 976 bytes .../riscv-tests/bne-riscv-tests.bin | Bin 0 -> 784 bytes .../riscv-tests/jal-riscv-tests.bin | Bin 0 -> 144 bytes .../riscv-tests/jalr-riscv-tests.bin | Bin 0 -> 336 bytes bin/non-output/riscv-tests/lb-riscv-tests.bin | Bin 0 -> 672 bytes .../riscv-tests/lbu-riscv-tests.bin | Bin 0 -> 672 bytes bin/non-output/riscv-tests/ld-riscv-tests.bin | Bin 0 -> 1072 bytes bin/non-output/riscv-tests/lh-riscv-tests.bin | Bin 0 -> 672 bytes .../riscv-tests/lhu-riscv-tests.bin | Bin 0 -> 736 bytes .../riscv-tests/lui-riscv-tests.bin | Bin 0 -> 144 bytes bin/non-output/riscv-tests/lw-riscv-tests.bin | Bin 0 -> 736 bytes .../riscv-tests/lwu-riscv-tests.bin | Bin 0 -> 800 bytes bin/non-output/riscv-tests/or-riscv-tests.bin | Bin 0 -> 1552 bytes .../riscv-tests/ori-riscv-tests.bin | Bin 0 -> 528 bytes bin/non-output/riscv-tests/sb-riscv-tests.bin | Bin 0 -> 1120 bytes bin/non-output/riscv-tests/sd-riscv-tests.bin | Bin 0 -> 1760 bytes bin/non-output/riscv-tests/sh-riscv-tests.bin | Bin 0 -> 1264 bytes .../riscv-tests/simple-riscv-tests.bin | Bin 0 -> 80 bytes .../riscv-tests/sll-riscv-tests.bin | Bin 0 -> 1616 bytes .../riscv-tests/slli-riscv-tests.bin | Bin 0 -> 848 bytes .../riscv-tests/slliw-riscv-tests.bin | Bin 0 -> 848 bytes .../riscv-tests/sllw-riscv-tests.bin | Bin 0 -> 1616 bytes .../riscv-tests/slt-riscv-tests.bin | Bin 0 -> 1296 bytes .../riscv-tests/slti-riscv-tests.bin | Bin 0 -> 720 bytes .../riscv-tests/sltiu-riscv-tests.bin | Bin 0 -> 720 bytes .../riscv-tests/sltu-riscv-tests.bin | Bin 0 -> 1360 bytes .../riscv-tests/sra-riscv-tests.bin | Bin 0 -> 1488 bytes .../riscv-tests/srai-riscv-tests.bin | Bin 0 -> 784 bytes .../riscv-tests/sraiw-riscv-tests.bin | Bin 0 -> 976 bytes .../riscv-tests/sraw-riscv-tests.bin | Bin 0 -> 1680 bytes .../riscv-tests/srl-riscv-tests.bin | Bin 0 -> 1616 bytes .../riscv-tests/srli-riscv-tests.bin | Bin 0 -> 848 bytes .../riscv-tests/srliw-riscv-tests.bin | Bin 0 -> 848 bytes .../riscv-tests/srlw-riscv-tests.bin | Bin 0 -> 1616 bytes .../riscv-tests/sub-riscv-tests.bin | Bin 0 -> 1296 bytes .../riscv-tests/subw-riscv-tests.bin | Bin 0 -> 1296 bytes bin/non-output/riscv-tests/sw-riscv-tests.bin | Bin 0 -> 1280 bytes .../riscv-tests/xor-riscv-tests.bin | Bin 0 -> 1552 bytes .../riscv-tests/xori-riscv-tests.bin | Bin 0 -> 528 bytes build.sh | 95 ++++++++++-------- libraries/difftest | 2 +- .../src/main/resources/vsrc/ram_2r1w.v | 58 +++++++++++ projects/cpu_axi_diff/vsrc/axi_rw.v | 2 +- 107 files changed, 206 insertions(+), 81 deletions(-) create mode 100755 bin/README.md create mode 100755 bin/custom-output/benchmark/coremark/coremark.bin create mode 100755 bin/custom-output/benchmark/dhrystone/dhrystone.bin create mode 100755 bin/custom-output/benchmark/microbench/microbench-huge.bin create mode 100755 bin/custom-output/benchmark/microbench/microbench-ref.bin create mode 100755 bin/custom-output/benchmark/microbench/microbench-test.bin create mode 100755 bin/custom-output/benchmark/microbench/microbench-train.bin create mode 100755 bin/custom-output/hello/amtest-hello.bin create mode 100755 bin/custom-output/interrupt-test/amtest-interrupt-test.bin create mode 100755 bin/custom-output/mario/fceux-mario.bin create mode 100755 bin/custom-output/rt-thread/rtthread.bin create mode 100755 bin/custom-output/time-test/amtest-time-test.bin create mode 100755 bin/custom-output/yield-test/amtest-yield-test.bin create mode 100755 bin/non-output/coremark/coremark.bin create mode 100755 bin/non-output/cpu-tests/add-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/add-longlong-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/bit-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/bubble-sort-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/div-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/dummy-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/fact-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/fib-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/goldbach-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/hello-str-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/if-else-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/leap-year-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/load-store-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/matrix-mul-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/max-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/min3-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/mov-c-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/movsx-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/mul-longlong-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/pascal-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/prime-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/quick-sort-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/recursion-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/select-sort-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/shift-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/shuixianhua-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/string-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/sub-longlong-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/sum-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/switch-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/to-lower-case-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/unalign-cpu-tests.bin create mode 100755 bin/non-output/cpu-tests/wanshu-cpu-tests.bin create mode 100755 bin/non-output/dhrystone/dhrystone.bin create mode 100755 bin/non-output/microbench/microbench-huge.bin create mode 100755 bin/non-output/microbench/microbench-ref.bin create mode 100755 bin/non-output/microbench/microbench-test.bin create mode 100755 bin/non-output/microbench/microbench-train.bin create mode 100755 bin/non-output/riscv-tests/add-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/addi-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/addiw-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/addw-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/and-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/andi-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/auipc-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/beq-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/bge-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/bgeu-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/blt-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/bltu-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/bne-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/jal-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/jalr-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/lb-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/lbu-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/ld-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/lh-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/lhu-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/lui-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/lw-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/lwu-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/or-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/ori-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/sb-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/sd-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/sh-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/simple-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/sll-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/slli-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/slliw-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/sllw-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/slt-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/slti-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/sltiu-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/sltu-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/sra-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/srai-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/sraiw-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/sraw-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/srl-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/srli-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/srliw-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/srlw-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/sub-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/subw-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/sw-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/xor-riscv-tests.bin create mode 100755 bin/non-output/riscv-tests/xori-riscv-tests.bin create mode 100755 projects/chisel_cpu_diff/src/main/resources/vsrc/ram_2r1w.v diff --git a/README.md b/README.md index e931acf..8130956 100755 --- a/README.md +++ b/README.md @@ -13,35 +13,35 @@ Name=张三 操作系统:[Linux Ubuntu v20.04](https://ubuntu.com/download/desktop) -开发软件:[verilator](https://verilator.org/guide/latest/)、[gtkwave](http://gtkwave.sourceforge.net/) +开发软件:[verilator](https://verilator.org/guide/latest/)、[gtkwave](http://gtkwave.sourceforge.net/)、[mill](https://github.com/com-lihaoyi/mil) -verilator要求统一使用`v4.204`版本,可以从[这里](https://oscpu.github.io/ysyx/events/2021-07-09_Verilator/verilator_installer.tar.gz)下载安装包。使用下面的命令安装`verilator`和`gtkwave`。 +可以使用下面的命令一键安装搭建开发环境。 +```shell +# 选择使用verilog语言开发 +wget https://gitee.com/oscpu/oscpu-env-setup/raw/master/oscpu-env-setup.sh && chmod +x oscpu-env-setup.sh && ./oscpu-env-setup.sh -g && rm oscpu-env-setup.sh +# 选择使用chisel语言开发 +wget https://gitee.com/oscpu/oscpu-env-setup/raw/master/oscpu-env-setup.sh && chmod +x oscpu-env-setup.sh && ./oscpu-env-setup.sh -g -c && rm oscpu-env-setup.sh ``` -# 安装verilator,需要先下载verilator的安装包 -tar vxf verilator_installer.tar.gz -./install_verilator.sh -# 安装gtkwave -sudo apt-get install gtkwave -``` - -关于开发环境的详细安装流程,可参考[讲座-Verilator介绍](https://oscpu.github.io/ysyx/events/events.html?EID=2021-07-09_Verilator)。 # 获取代码 -``` +```shell +# 从gitee上克隆代码 +git clone --recursive -b 2021 https://gitee.com/oscpu/oscpu-framework.git oscpu +# 从github上克隆代码 git clone --recursive -b 2021 https://github.com/OSCPU/oscpu-framework.git oscpu ``` 如果子仓库克隆失败,可在`oscpu`目录下使用下面的命令重新克隆子仓库。 -``` +```shell git submodule update --init --recursive ``` 参与`一生一芯`还需要设置git信息。 -``` +```shell # 使用你的编号和姓名拼音代替双引号中内容 git config --global user.name "2021000001-Zhang San" # 使用你的邮箱代替双引号中内容 @@ -50,38 +50,47 @@ git config --global user.email "zhangsan@foo.com" # 例程 -我们提供了脚本`build.sh`用于自动化编译、仿真和查看波形。下面是`build.sh`的参数说明,也可在oscpu目录下使用`./build.sh -h`命令查看帮助。 +`projects`目录用于存放工程文件夹,`projects`目录下的几个例程可用于了解如何基于`verilator`和`香山difftest框架`来开发仿真CPU。你可以在该目录下创建自己的工程。工程目录结构如下: +```shell +. +├── build.sc # 存放chisel编译信息的文件,选择chisel语言时需要该文件 +├── csrc # 存放仿真c++源码的文件夹,接入香山difftest框架时不需要该文件夹 +├── src # 存放chisel源码的文件夹,选择chisel语言时需要该文件夹 +└── vsrc # 存放verilog源码的文件夹,选择verilog语言时需要该文件夹 ``` + +我们提供了脚本`build.sh`用于自动化编译、仿真和查看波形。下面是`build.sh`的参数说明,也可在oscpu目录下使用`./build.sh -h`命令查看帮助。 + +```shell -e 指定一个例程作为工程目录,如果不指定,将使用"cpu"目录作为工程目录 -b 编译工程,编译后会在工程目录下生成"build"(difftest)或"build_test"子目录,里面存放编译后生成的文件 --t 指定verilog顶层文件名,如果不指定,将使用"top.v" 或"SimTop.v"(difftest)作为顶层文件名,该参数在接入difftest时无效 +-t 指定verilog顶层文件名,如果不指定,将使用"top.v" 或"SimTop.v"(difftest)作为顶层文件名,该选项在接入difftest时无效 -s 运行仿真程序,即"build/emu"程序,运行时工作目录为"build"(difftest)或"build_test"子目录 -a 传入仿真程序的参数,比如:-a "1 2 3 ......",多个参数需要使用双引号 --f 传入c++编译器的参数,比如:-f "-DGLOBAL_DEFINE=1 -ggdb3",多个参数需要使用双引号,该参数在接入difftest时无效 --l 传入c++链接器的参数,比如:-l "-ldl -lm",多个参数需要使用双引号,该参数在接入difftest时无效 --g 使用gdb调试仿真程序,该参数在接入difftest时无效 +-f 传入c++编译器的参数,比如:-f "-DGLOBAL_DEFINE=1 -ggdb3",多个参数需要使用双引号,该选项在接入difftest时无效 +-l 传入c++链接器的参数,比如:-l "-ldl -lm",多个参数需要使用双引号,该选项在接入difftest时无效 +-g 使用gdb调试仿真程序,该选项在接入difftest时无效 -w 使用gtkwave打开工作目录下修改时间最新的.vcd波形文件 -c 删除工程目录下编译生成的"build"文件夹 -d 接入香山difftest框架 -m 传入difftest框架makefile的参数,比如:-m "EMU_TRACE=1 EMU_THREADS=4",多个参数需要使用双引号 +-r 使用给定的测试用例集合进行回归测试,比如:-r "case1 case2",该选项要求工程能够接入difftest ``` -## 编译和仿真 - -`projects`目录下几个例程可用于了解如何基于`verilator`和`香山difftest框架`来开发仿真CPU。 +## 编译和仿真 ### counter `examples/counter`目录下存放了4位计数器的例程源码。可以使用下面的命令编译和仿真。 -``` +```shell ./build.sh -e counter -b -s ``` 如果`verilator`安装正确,你会看到下面的输出 -``` +```shell Simulating... Enabling waves ... Enter the test cycle: @@ -91,9 +100,9 @@ Enter the test cycle: ### cpu -`projects/cpu`目录下存放了单周期`RISC-V`CPU例程源码,源码实现了`RV64I`指令`addi`。可以使用下面的命令编译和仿真。 +`projects/cpu`目录下存放了`verilog`版本单周期`RISC-V`CPU例程源码,源码实现了`RV64I`指令`addi`。可以使用下面的命令编译和仿真。 -``` +```shell ./build.sh -b -t rvcpu.v -s ``` @@ -101,9 +110,9 @@ Enter the test cycle: ### cpu_diff -`projects/cpu_diff`目录下存放了接入`香山difftest框架`的单周期`RISC-V` CPU例程源码,源码实现了`RV64I`指令`addi`。关于`香山difftest框架`的详细介绍,可参考[讲座-Difftest 处理器验证方法介绍](https://oscpu.github.io/ysyx/events/events.html?EID=2021-07-17_Difftest)。可以使用下面的命令编译和仿真。 +`projects/cpu_diff`目录下存放了接入`香山difftest框架`的`verilog`版本单周期`RISC-V` CPU例程源码,源码实现了`RV64I`指令`addi`。关于`香山difftest框架`的详细介绍,可参考[讲座-Difftest 处理器验证方法介绍](https://oscpu.github.io/ysyx/events/events.html?EID=2021-07-17_Difftest),接口说明可参考[difftest_api.md](./doc/difftest_api.md)和[chisel_difftest.md](./doc/chisel_difftest.md)。可以使用下面的命令编译和仿真。 -``` +```shell # 编译仿真 ./build.sh -e cpu_diff -d -b -s -a "-i inst_diff.bin" # 编译仿真,并从CPU上报至difftest的时钟周期0开始输出波形 @@ -114,32 +123,44 @@ Enter the test cycle: ### cpu_axi_diff -`projects/cpu_diff`目录下存放了通过`AXI总线`接入`香山difftest框架`的单周期`RISC-V`CPU例程源码,源码实现了`RV64I`指令`addi`和`AXI总线`读逻辑。可以使用下面的命令编译和仿真。 +`projects/cpu_diff`目录下存放了通过`AXI总线`接入`香山difftest框架`的`verilog`版本单周期`RISC-V`CPU例程源码,源码实现了`RV64I`指令`addi`和`AXI总线`读逻辑。可以使用下面的命令编译和仿真。 -``` +```shell ./build.sh -e cpu_axi_diff -d -s -a "-i inst_diff.bin --dump-wave -b 0" -m "EMU_TRACE=1 WITH_DRAMSIM3=1" -b ``` +### chisel_cpu_diff + +`projects/cpu_diff`目录下存放了接入`香山difftest框架`的`chisel`版本单周期`RISC-V` CPU例程源码,源码实现了`RV64I`指令`addi`。可以使用下面的命令编译和仿真。 + +```shell +./build.sh -e chisel_cpu_diff -d -s -a "-i inst_diff.bin" -m "EMU_TRACE=1" -b +``` + ## 查看波形 在`oscpu`目录下使用命令可以通过`gtkwave`查看输出的波形,其中`xxx`表示例程名。 -``` +```shell # 未接入difftest ./build.sh -e xxx -w # 接入difftest ./build.sh -e xxx -d -w ``` +# 测试用例 + +`bin`目录下存放了`一生一芯`[基础任务](https://oscpu.github.io/ysyx/wiki/tasks/basic.html)需要使用的测试用例,具体说明详见[一生一芯基础任务测试用例说明](./bin/README.md)。 + # 回归测试 -在实现了能够运行所有`cpu-tests`和`riscv-tests`测试用例的指令后,可以通过以下命令对CPU进行一键回归测试。该命令会将`bin`目录下的所有`.bin`文件作为参数来调用接入了`香山difftest框架`的仿真程序,其中`xxx`表示例程名。 +一键回归测试用于自动化测试给定的测试用例集合,可以通过以下命令对CPU进行一键回归测试。该命令会将`bin`目录下指定子目录中所有`.bin`文件作为参数来调用接入了`香山difftest框架`的仿真程序,其中`xxx`表示例程名。 -``` -# 未接入AXI总线 -./build.sh -e xxx -b -r -# 接入AXI总线 -./build.sh -e xxx -b -r -m "WITH_DRAMSIM3=1" +```shell +# 未接入AXI总线的情况下使用"non-output/cpu-tests"和"non-output/riscv-tests"目录下的bin进行回归测试 +./build.sh -e xxx -b -r "non-output/cpu-tests non-output/riscv-tests" +# 接入AXI总线的情况下使用"non-output/cpu-tests"和"non-output/riscv-tests"目录下的bin进行回归测试 +./build.sh -e xxx -b -r "non-output/cpu-tests non-output/riscv-tests" -m "WITH_DRAMSIM3=1" ``` 通过测试的用例,将打印`PASS`。测试失败的用例,打印`FAIL`并生成对应的log文件,可以查看log文件来调试,也可以另外开启波形输出来调试。 @@ -167,4 +188,3 @@ Enter the test cycle: [DRAMsim3](https://github.com/OpenXiangShan/DRAMsim3) [AXI4 specification](http://www.gstitt.ece.ufl.edu/courses/fall15/eel4720_5721/labs/refs/AXI4_specification.pdf) - diff --git a/bin/README.md b/bin/README.md new file mode 100755 index 0000000..0239c4c --- /dev/null +++ b/bin/README.md @@ -0,0 +1,36 @@ +# 一生一芯基础任务测试用例 + +本目录存放`一生一芯`[基础任务](https://oscpu.github.io/ysyx/wiki/tasks/basic.html)需要使用的测试用例。目录结构如下: + +```shell +. +├── custom-output # 0x7b自定义打印指令测试用例 +│   ├── benchmark +│   ├── hello +│   ├── interrupt-test +│   ├── mario +│   ├── rt-thread +│   ├── time-test +│   └── yield-test +├── inst.bin # 包含3条addi指令,可用于测试cpu例程 +├── inst_diff.bin # 包含3条addi指令和1条0x6b,可用于测试cpu_diff和chisel_cpu_diff例程 +├── non-output # 无输出测试用例 +│   ├── coremark +│   ├── cpu-tests +│   ├── dhrystone +│   ├── microbench +│   └── riscv-tests +└── README.md +``` + +# 测试用例说明 + +所有测试用例使用`0x6b`指令作为结束指令,当执行到`0x6b`指令时,将`a0`寄存器的值作为`trap code`提交给difftest即可。`trap code`为0表示正确执行并退出程序,非0表示断言失败。 + +## non-output + +该目录下的测试用例运行时无输出,可用于测试CPU指令实现的正确性。 + +## custom-output + +该目录下的测试用例使用`0x7b`指令作为输出指令,,可用于测试CPU指令实现的正确性。CPU在执行该指令时,将`a0`寄存器的值作为[ASCII](https://en.wikipedia.org/wiki/ASCII)字符打印出来。 \ No newline at end of file diff --git a/bin/custom-output/benchmark/coremark/coremark.bin b/bin/custom-output/benchmark/coremark/coremark.bin new file mode 100755 index 0000000000000000000000000000000000000000..c79c66f2f1e38ea053d735b9dd5094d00b363b71 GIT binary patch literal 20584 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 J;O|oc{|Vj-`CI@1 literal 0 HcmV?d00001 diff --git a/bin/custom-output/benchmark/dhrystone/dhrystone.bin b/bin/custom-output/benchmark/dhrystone/dhrystone.bin new file mode 100755 index 0000000000000000000000000000000000000000..8ea9f9cf016c95218127dae828b39e8e8a20fa30 GIT binary patch literal 23580 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 literal 0 HcmV?d00001 diff --git a/bin/custom-output/benchmark/microbench/microbench-huge.bin b/bin/custom-output/benchmark/microbench/microbench-huge.bin new file mode 100755 index 0000000000000000000000000000000000000000..d8feab23064906f5bca71324e36c335b2c5511b7 GIT binary patch literal 31448 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 z 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 z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1pYq-{tK`O BF5v(G literal 0 HcmV?d00001 diff --git a/bin/custom-output/interrupt-test/amtest-interrupt-test.bin b/bin/custom-output/interrupt-test/amtest-interrupt-test.bin new file mode 100755 index 0000000000000000000000000000000000000000..d26fb174db8ddf6b93aeca5661859a8d871b69e7 GIT binary patch literal 617432 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 z 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

{$@9&&q}#k*(gfeS)%Hz$!KawnMpWd{bv8sSDQn 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�^D{D)Vez+ZoF!~3^9m(it!aRXfh_u4zD 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 zVI`7pDK_r25(BeEA)pZ%m)Or!k#fn7{tMM*QC_L?QtK z|1JfN4fy_DZk>%HK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ a009C72oNAZfB*pk1PBlyK;ZvJ;Qs>N`Gp1m literal 0 HcmV?d00001 diff --git a/bin/custom-output/rt-thread/rtthread.bin b/bin/custom-output/rt-thread/rtthread.bin new file mode 100755 index 0000000000000000000000000000000000000000..20439014a399355c8745e9c6f8735249dafe3cfe GIT binary patch literal 106401 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 z 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ȉ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

}} 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%0A~W`QBUd_=m`2`%doD2eO;#ggaV};m@*)&y~lp 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

CkEher;;Nc(!^s`HAzX;;Y#W1A|OsqqbF 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 z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ d0R#|0009ILKmY**5I_I{1Q0*~f&Wi|{{p%qC)of1 literal 0 HcmV?d00001 diff --git a/bin/non-output/coremark/coremark.bin b/bin/non-output/coremark/coremark.bin new file mode 100755 index 0000000000000000000000000000000000000000..2a08d7b16e0978429c6abdedb293082ef34f7300 GIT binary patch literal 20400 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 Mz*PzS{Yv2f0*cAe6951J literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/add-cpu-tests.bin b/bin/non-output/cpu-tests/add-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..dde003ff77db6685710fe51d5a43944fa8419421 GIT binary patch literal 1176 zcmZuw%}Z2K6hC+FeLkG&L%YV1L4I7d?bwXq*FwpVYSqf6#1Jl8NRha7h8dZhS}1oh zQ9&&VaW|l%3m3JB{scFL&=eI?Gtf*Us5AY}8%GShaNfP=`<&l7Pb;F}5|I|~t9cq} zjw*+yV$6%GcACgUnki4Qv*7nlst6=^j_Lr%8{JEalbcaidi z$+At3QEqXe!nIuXry*bh|7Ni}oH^=MIap*n~O@pGX4q3N}^t^j4tK(3^;GGDvuk)c3b>;O5-;9gC zQXj)|-KE5O%EQh!z!tPR|90dELxCEJZB2Ih8t@bxKYGq-#rqJr`G6bQ*%IT(_~Gsa zuA{~;{mItcfb5bM=%T`G#&Ja&G0JCRjg zW(~BN>@rVrXH^gQ9?W647H4u-uB&dHR$aQ!QThgIo8fux{Pg5AC3zI@hul!z9_|xU z6g~Lvw~S>&6TL{GhKV5Aa`}9&b-Q90P~*C*!k5b2-#42Xpw(271nV zacQ#S0(siQ_f~-QoAz+uYxuN%(esMTR+4e)gioj01Z}BK%*BV@@nLrac1K`$2)n~` zl(jv^Ap4U6}lfb^7lJa6VAATAjlc10Sn^ z;ZxVinun)@ZH#p+Vn5d5HzoFC9rzen=1+~ux4LUM^lnOe;rzADdNdqdMxsg9y}Dq(qj{n5)(bN z>>;9p9u(;<(1uj#K@Z}e(2G(qib~N0OiaNxaW-$aXiL!t!|d$tH}lQ6^Ed+tt^siJ zx><(tfWs`9kE@t8xfK8rJqKlow`2TEL~oItA3)yo&xq(C72ydg#;y@Dbe)KBg5X_- zo{6zFj~MEuLA=ZTS1-$~AGi-7*M`{4l^Na+jK1`NWVoO51C23A78!7sf{3+_RvYKB z^H8qL)nzILrPWO1qAv?Fo5g&7R_e$eCb15U5|)f6C>9RoD0pKh4(Vpqs?fDf6Dy;P;ggh$z4{XlHKGJWeXu*bL zA>GnSdhssW#>(??trjxvmTL0+nnqbThU$-cJ(YhPB)}o zX>!)~PUh;=*-v-yl#RIqh}$hoJG?J^wLJpM6qk z=?%c6G;){?f~?oimb!KtGJ_loHj7-StNuR8+%RmUt3Zo3sM;d`alm1?j!sjNpC(wR zCvsyQwSLwUi9JP3_XobhKy0U!E+NE(#1`5%3*ozXaCSU6I|OHk;Oqd-j(SJx&I!&1 zt2UAUd%0Alr3ZFnq0)_7fctN>1wi5~tKJtXb3bvMPJBe~c(iZ2-?9$l`aIsy2gV)8 z(Z4ev;dI`(!I^8Op26Yo-TF*DgVX16eGI0q&i7BA26yNJmUSN|aHigIo~E9`nY#bW z)AVU@n$HP6PvdED2YR9V&{4B#aHsJ!^$gCu<8j<+JWZblX9~kA#C49lCYSQR0s3~v A{r~^~ literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/bit-cpu-tests.bin b/bin/non-output/cpu-tests/bit-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..46bc9d0f8373d42af9c6c9a2e51414e2e200a2e7 GIT binary patch literal 1136 zcmYjRO-NKx6h3#}z4OpTYFCkj(($ToCuW8+TuhL-ZRc`=N4RKVM1$KIW@Iv2C>Jp* z(4dHR1LH7)61Ir8?c5ZGCTjk?XU$6qb2{g}nVt_0_kQ>M-t(RNBnRl60g&uN%?5~A zT)3Aj8-vk)aw7eGG`F2_FRd1;YD*zDW3-|0>}h zf&Me$-N64F;hjM55Z*S1XRw~~ADQStyuOi(W|^ekF&6Up6$0)9z&MK4<#Q@0&HrbO z8SwdEWu0E%CwnQjJm))S;++bGh*35nS1x#Sqr;d7r8M~_>HB9G<_EG>@84d*8a%$O z3!)46e^oRaQbRMKCtQa1A$22y>oumLx0uFxlq8tndTzE$)43|A5M!;@!%Dk!9|7G_ zHitn^h4HS)d4cz+BFf_Jh+2wARFq?kJZ!!!;0!r6$(z3DxnsjRDO{9!6Jxhhk8Ev5 zPxM+RVtyJ+xYWl(=~h|2hsYVeha&G&izrL^KJ^sWA|F6J;B!uKQhP?3_sb`|PbLKS zXT;-R*E>(UMm^q+QQ`gcmgMLdSf|^~ntF*d^P+$?jCSJtId0kPT07HISYz4bu}jAk ze@o8|La9&%qhbQ(R>kiF7RP;j#8AZ%hIx8o_ugTxuY2fi;#=5|lN{7ap8C>@KD}xQ zWrg=5FCin&Lb-UB8H0@F2D4z?WW=N4&k5GYt2MmeS3OZRHlLYi<4!mB0{s6(6V7-O Y@{PS2cT&G`ocwPZGWFf#`sywJ05Aq+6aWAK literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/bubble-sort-cpu-tests.bin b/bin/non-output/cpu-tests/bubble-sort-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..83167bf198c3e19f0983253515396f67ced7e815 GIT binary patch literal 1072 zcmah|O;1xn6ur|ouVbr1VQQ+l;A2W%TGOInTwsDB{sCEb@nTrGATbiQ5ZXL3#z+Ri zSQCg5h`T0GVZlNd#(y9i4T)925Ns1$%K}@^yeeU1oaDUw?!3;qXU@HqoG3C)B-z_~ zk?5?$Z5kdoIjc)ML@L=rMd}YD|E1y+KIA@iZJJbXCsWBwOvSG=E#fQ!9?5xc#74B= zU2(<*&t|H1Icxjmt!*|Zh_ov%C;UrfEeo1l8YJh#HmQY8QZIJ!ZIB8x?`v7tMihsU z0C)m{gboBq8}48~vlj6_b(0eIlYZHAhO+4}6-(`v!pwlDwOC4(JuRMw%thys@EzA+ zYHPv&Uw>8{O4QUGHM;}QVQOZ)n&-KxxwT&i&(w@RsJ}l6U#ukaO(rLp)yLRm-vn7# z8GL|l#w^cI+on52Gy*tnHgtqYX2j9nU(XwUzhMm@GhM~f{H{E9w&9~2v-0pT?|OaG ze$)Y0GK>9<^WzMf$oy8lUXDToGyG1I-FDPR^iYpg&_nd|crVd^X#nlcGZB`ebU{ub zhgRqAT3A-@k?~#z{pf`s_fP%MF7Hq|V0EBVttUHGoP#4xh39Tfi&9_V@t CPZRV2 literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/div-cpu-tests.bin b/bin/non-output/cpu-tests/div-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..cd540c035b0ea69ce26cba9b56a4e6cb3ae901ce GIT binary patch literal 1256 zcma)6Pe@cj82@J9%zNw-wl=F<3b{IJS7Ub}qr(b?30*C39)=L=AVd*#T64F}=uk~% zSdfPzx;;?SLx(z8REG|s5*ZRN>J)CV>ni2jzL~e$rJx5N?|pyg_kHj84W|I{>j0cQ zudYItOUhs!=;e{|L z2mSUWh(rbM7UIC2UhpQC{CEUwMj}V!n9sxEBZ|6Ub%cS_C@4np45(|SF=%ECyxli_ zk$8-8ecO~`2X2v`RRaAx|q%p4HUX#f~TkxdNyivrI(+qSJ)1#^N}T<0>DUM;qK!}oR^ zx0$J{)*3+OY{WAUYM}vmVG*+$4*9_z_hI77O*~-7={*vy0Tyv-JvelY#V05NnIH+u#C(2a*VJ4Vymf(LgvBG_n zKwc7^E9+R3;b@JM>U^0Pj%scqZ#6#^a+_<>eNQ+s?iBa&G1T#Y$}_VuUOo$&BRpaw zXKcjZ@<|nFLbxc?hg-#5s#SDRtdRrnUcpyRvC3(9S&dgLxn9`Ca}L&y>b^fJr)ym; zA^#cul}wk>Hn_~oC8F!2|AW~rm$r*(l(}5HxQcI=cB0;i{`WzhmiN{S?ci5vJ5Mvp zk07>lCV$D;&y}rOy+v!5b{KA+7y|k0Yb4miXt0AP;-D&(onF(Duf`DLj6;)qD!RXS zYP=h!3MH^+9nfbB_j9MD_?_ytgxgE-oJ8{EV-W6xL^3^zIV*2@o`QIq({pLVoHj9s z@|3pybDs#Q?Go+|Emg6ML&5#~6`YOR(nq<;=UC9QFc&MQCC-j)ZB0YErh^5zrB&;bOEOUsc zpa(^~Ewmvy^q>dvC-kBejG|I>7tER-V&a=^umc}6@6G$Z_vXz*0g%}RK=y7Pz*+(= zfXxPgo3%j8G+;-z*Pj2{`BE9U|P@RnsL7OnS%AUv9)W&MxqNdWDA$n(C0R^N*` zI!UpFz0Rw(Q+|WB>?W94<-g96E{pS?v$AyltL$b%-Pi@a9WjbesB3xJuQFxdWLj8& z29)1@B9~EySFlSq)#~0GEMs&ZuyP4-DG9opgdnW_)}F{IpRj)`uZB)u*@86MFnZ?A zv<&AcQXh41!rc?^BDN)Ir-^qIXlbA5!wlJCTCPOod;SZfF*Evf|I@^gZc*(MhV7zy zNV_jeWS8jv_*AEM%==;$cSI2@mcZLo+g8l~5&O3yzR>&52Vynu`^F}?({D@K^fH-- zrykX?kpVrKoF8QmXSz!@_N6Fao|yN2)x9e0d1K%M2`0Dlzm!}-XJ?%&f1OdDT=~u$ zs`X{ATzNs9mCx7_pbpxmF9qTh)R1r>3iK}t?yyA5X)<1AtW|9Szs}4*@^}X5%_zom sdfz9#J?5jwa#jyls27VFNu@!j%xt8g9@hTQ=$x%b&{!A`&YS@M0J%@KUH||9 literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/fact-cpu-tests.bin b/bin/non-output/cpu-tests/fact-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..34321bb9504ddd65ed363ea792c1f28d496cac03 GIT binary patch literal 1036 zcmbtTO-NKx6h8Oe`{pqN)!0?XpFn4>W80CL!5>^G6k@wp;!5HXE?NkY*wSG}Cc{N? zBP$DAB++g_2PIt8qD?C|;iACBL?R_K!AxVMW8Zya(!PO@d(XXdzH`raz9$7yXpu;= zcPB-n23OcLIcs8eBJCilL<1FR=p5oBHQ2+J{6u=*pX954(&j!E=5aeeByq0#hM7uS zXQ2S{10Q;IV4K?gtt698;90cPV1uRlQkE9T>wH7S(!?)UjN7j7iBF0;pR@()y$!UB z^2xGoQ=#QyjjxW@c>>qSs|7wiKYGg1Q7Ht+kJGUf=LyEsiIm0rnU(HOF+RXpdLTv8 z_WBW~FZ1T9Qpaxz?ps7O1-NZCX(vc>&N(~#t3kbg5+TE3+tFfarTA~I^w}Q2{@Fxs z#)tR4C;hRBWOFkW9@#a+v*e&|b|lL44yE&1Ph0H+AFwvJI#jPQ%g}@OU$ylr0==2Z zbUQo~b}%qhlCr4^y#WrZF>VfH%5Nokr=DF3Wku=*PXi(I_i-ycx)V z54!oFd&du*6`d*vtX~PM%|uwm1UNEOc$Tecr*wjOeAY`pTELnU-H5w!zhCF+*yni>mG?!LOxi+T zgf2v@lghB}?`o3BabUUtTlFOajlE9V5Mt&Gtnf}Duj z1hzy3bFttp3*KVz7K674-ZFFKo=>2SgkRC$Cp}Z7e@b3LV()d11?^C6T zpRnB7k6~wE0k8wL0C$0H9ONX?>~jFKq={alrW+O=EnLDi(F2whnQ0N`Eq A)c^nh literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/fib-cpu-tests.bin b/bin/non-output/cpu-tests/fib-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..0b5a190780a70a0accfa50a2f7b716c59d030ff7 GIT binary patch literal 1120 zcmd5)OKVd>7(J6aH`mrz>QtgZu+5~cieMy(wm$GdMBFRIRly)GL@GWIH`0=n*wRJI zEGjB0qKLbohIY|K6-7ihu6!eymRgD?Vqz<3;<<^6Kfw!!JKx+n-<#}a|WjzcXZWel51N`JF`Eb(+-zN2Ny}yoi-M$^k zwm7Ud3G1fh_c*qurxCHIcBo374i zygW)NH)Zt!_-Zl(#rX+aYquc34bfeJWUBb{i z<%0JoE;^0MDYU76*3_CfG1{m~r{H>^>b)@iUe4Y1)ud&U&Jg$F&3Y`_ti!HnDdaAv z%f=~Gl&pJeM&_)`tLF_r0)@9 zsgNGzJ0n|JxAOaJtxwmim6a`OK!#MzmTC{Rov!j{s{5x)*6)5Ftx?%h^}X{55RU%;~1u8C!RbTMCN%8XRjO=Yme{uTwn6YdU|f9_m4ha`+q(|==m+| I{J#Q!0j8Vv;s5{u literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/goldbach-cpu-tests.bin b/bin/non-output/cpu-tests/goldbach-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..7d0ba2dbe64c13ac502ea631fc80e7c4ad09af27 GIT binary patch literal 1248 zcmYjQKWtk?82|3QJHOgg#o?S-jR)JgG+kZnNJ+`yN<{^Ug(0+Cgicii43SW)NK7%d z>n7?zdZht^)DEDE%~F~sLkBYiBqWwfp`cPSycQOaEo8@y2sXcab`qZS>E8F<{l5P{ z$%*32M3Q~mty3+oxuDqvtFx{YQBt`9suRVGmm>Y>-U-fNb)=xPL9p7 z-k7ON(ds7nD9Q0b=sSP$@9$f*R^G~IFK?6iX^7-IxVs(d z*qnnr8Z-aMew?hho7ZntX-!n~bB&!nd-mQW_w1d`)#~~O%=|5ZzTIgbVC`G~lIYlX z^+s|x3q5#$^Ka(Irkgh2iien$@6+zON5%C@u%jk~UP0E%U*~)MTVR+&@K#mtr7&w| zvHFA<#{a)6gWa84CNtl{?qX*r(m2mxhtDyC-IrEu-CuYy=`~KvMd+B7{%|8ETUUa4 z%SedKV#w}+Zz?>cs*wBV(`qx9Rv8W-CGx+lbd1*k2g1LamA0#2R9=xK55A*zUv`X_ zd0`&Mq4WLhc+2+UH`!{k{yseoxL4()>ON$%G^%dktnxAFW57S@`I&j*uJcoJiI2*0 z!R70NB(Dbh_)B2F+H(8;es(wbsbKFe&XV5$BVueXG56I9a<~{L({8`)4?pghMdY~d z@$AXAt#8|`OwwAVN$!S6Hnyrh8`B*BxeKnUUSNom%3l74RQ0P=cKj|d$wv|#Ru4P8{UDWrZnQyxOXI^Knk^JkBli?_t Yu;oS+T%FkkosPawXrZrMKQa>i2lA^~RsaA1 literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/hello-str-cpu-tests.bin b/bin/non-output/cpu-tests/hello-str-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..f601ed3f80371ccfa1bb28136cc599bb657cb0a9 GIT binary patch literal 6152 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 literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/leap-year-cpu-tests.bin b/bin/non-output/cpu-tests/leap-year-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..30649c9581678e85aa6fe8ac2bacfbedd2ee55df GIT binary patch literal 1592 zcmeHG&r6eG9REIhpXYtq2(zBKp&mAU)vl{e$OxHWSkTq<5*{8zsDluh&}p`kb_luzW?{9%qE6w9Y);X(zRx=qwf=w(4Zghl{{DQw&*#f2fOi;x zlh?%!fHFZD^hA_Siky{$89D0)fz)wVC^PXF;nMyh1mDAsHD66PBR7c36=kgI zC{JX6?vN)oX96umBEPs2HTRg|=7x2S52B85CGIS^dG4;w1@6+3Pdei7%E$!un<^zu5dv(K>S$WieJ~4&gUN8&Ge+{Pj|uu61pW*7L`-jyE#OuT%iCz)h_Yf#}kO5!wWK>Kb@&sE672_IA_pcWnRs-^u>0mKik)y_WB%dJp?XoaG?#meuUNR@WAu)3F~prU9JPPq_c^ XpN#*nAK%!&whwp$k$r@Zjw1aH#~Uz@ literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/load-store-cpu-tests.bin b/bin/non-output/cpu-tests/load-store-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..2ff4674a677e4f2088f966816753fdbc08cd7e19 GIT binary patch literal 1240 zcmZ`(O=wd=5T5Ps>*MvH(X~YDA#Jxm=&70%Y*nmK4fZaImmY!?^iU8*@X~}NJX<_i zwh&Q44~nRlKrJn{h=L#ro_kS(My*=35tBxx?ep80Sd`j@k9|8k-^|X;mqZ^k2Ac9jIVlhrwy86CVp&#)!^%=su_L0vTj@bvE%aAwwDVoNqETgm2fa;dD$=An1Y)Epf8AZtcEOXvd8IRD z9{b^LmMI&tP5*NX+V1$FXM;G4rEq5nwi{n%smLmt%zg27pA{|Y0Wg(nQJ1i1MH|j- z;Llg$^w0AN(JDtoi|n+7JcRk2Gn&qQ^6lqJyc+K#pA@Zr-;WJYY-z4en_kui=$eZ+ z91D^zmpA4cW>@qu-Z){4@V2t4@4e1+(YRYAK53K5t+MahVglchC|B7iL!QR)$-AVo zw;IEpH^B+Lm1#k0CT0543{JC}0%k<>x>{kZsuSo!6g|BEwLV|u`78FyU?GHFQ04!? z36M6wZ}f1m(7y;dt*+xWL^FLv-VjW2&!dFry}a-F%Q*de4?}|J<$d^j{^d*`h;d37 f${NEmOl2Sk3<2IUPzG|q5Zo_=T3HvXyTAPgX`o#e literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/matrix-mul-cpu-tests.bin b/bin/non-output/cpu-tests/matrix-mul-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..f7b8110b36dbfb544151fed360725e7b0231fc5b GIT binary patch literal 2608 zcmeH|>2FkJ6voe;d+!WwDcda_sbUM4RzV2GPNk(qL5dhKK@f$AT5)1XfP}aplJKF; z6f0XIxrrqT0Rj~@NI)o5#0Vj{5~30oMN-2c$YzVQ6a@PEJJZVF;0K#LJm?-vwzv_G7Queqpukm#?z?k`0z0 z+YWk%Sqrn~_$32eKQ_Yk3&*;C`4l^vL9C4BBkS%F30AB~M7!g6Uop8Z6Mtpq?49SH1L!5-gi2$<<{yb&Y&N>|Y_D5V?es*`MF& zJX_h4pbk4`g%h!A*Dkf(L}|5SkFuP^sA}6Tv+P7!b;vHaLW%Nf%N}i6iP6>Kxv73d zQhjq>nJXgmK|IHmAj0>SMDDEp+uP2*iWAkluA5Ju7vMYRys(>!8(ixv@tQDo9hBf` zU-7cDCHbz~p>gUW^se^nd3HlY5)HMfnFV3ufgMZg$8>(9%A%&!S-)}f9Oh{0-FOc- z2m3a23o$nd7PjdeL(C5zVKF}|KntFN9OLgrvb;#kecn=h>WRO)JIiZ(U9{I;dRT&` zVeR#mpw`Lrw}G7%1N_F=0KYIbGfA$g?Fb?*#&gns4eHwM`1RU8UQLA9I-_-$gGk}^ z;CK|@xm8r$##-eiudUVUn&m}3N8CaFPS990$X@|(a|-YaxPQJgPVRZT!O8cQIfJ}n z*YU=a+k%u9&ZX8DwAo$p&f2@3{M2lw&zAVDbLoNhGTckvuO)}+Q3=}HdnR*^cLYnx zu_59V^=sGql0jXm?5J%Odv`?i+y1sQ1#t&EHo^9{O|bY*UeU`Rk?W?sqT==3X=?J8 zIO6ZE(Y_4i&OpBr>~#h*mk?SDp*0JwS!hkrn$FSg)DqfpS`GD`3>LQ9$<>jL`7ODZ zbsnkxv|bYMHnjHnEtS`h+?~H%tlh?#FTfcv9lsgA0#1SN!FM3W`XE3UsmK2vd}L%a4q!QKFlfCpJqdo;Wsei&|n zHJAIrbKp1pvtVu4`irbR0vhmlfvrIE(>R(dKQnRxo1YWW8WcOhXJ8a-C*Uu^Ol+-P z`|>!p*1iM#Hh3QU4|o==^|b-r+XyxR-Fu9^KA;5507qFn4m4NIVGI0M*V|`^q`U14CB~U`t!3fi#SwIvlj4yhbU;{En^P#6nTe14B+k?w#d*QInPHf zd~3|q&*paV2w@LeK%5Wz4s zG^>|L|3^jE?J*{tF7g_`&E3ec?Ou_soLkA665{P;pp`!uQ^x-l2M;qZ27h9T$YvUN z`-U-NQ~(ts({e=KO7B*gFPD z$*8UsjKt_!N|8x`(HY7$`mXdn%mAvL@gNFldkU%zeGlV+>gp@}CtymGVIU9m1NxR3 zg{W?6ohim{f?t9^hBfymv1y_Cu*=>DtM<3R$i^TwgXB_g<0RaTz4h=kcr&bTTYI5* zXqTw2H6Pk3nv=fiB+&ey0gS>RA^8*5^Ung>Eg#@N0PAnUFW8rX_F3PnzDcb^<8*+@ W*g6Y&N2)OO@9j?d|KI;&2mS$35`85A literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/max-cpu-tests.bin b/bin/non-output/cpu-tests/max-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..e548cc0f5b0b8581c73c0258d894c9720c9d6977 GIT binary patch literal 1192 zcmaJ=&1+LZ5TAX!FOPgs+ioS;OPg#{@s^qd`jJB`ksdq=LXSlr(u0ShSb8+!rNmSZ zmOVtOs0XEZ3$&p<^q>dvPv}J{7)7Pn1Wb%*O`J&@Nvm{W-t2E?XLj~C^P~XquK-B) zs!@W;UR#(jmn6&@((DEm?ST>`yAc0WqbcV1q0i?_sQ3t1(aT(guW}W?!BljGsd$gT zGXnQQg#)G`adx`QJ#nshcWG|HmDo!|M@+dQ%XiD%g zCY-Sp=i`h!<0*qrFvFQhF&<~kiKjrC&9}OmZ#GT14gm8gcE1VQ>IS)F{k64uX>szB z`6jXNh@@wajUq<=uF0&u^ zzg0M8sQ3!##VT^!W2n&p>Jg^GQ%qxzBnjScuUdW5DxZ~E#8|6+bF)uYZvpWoJuc+h zMLd1e88N8xC>x1@+KL8Ln7B?u@lmF(t#U&O_gkH-ar;N6SEen@OrnioF9hs!*G58=ZE^pTXTYQAu0{5|D9f}@ZtljK3^U{E}-@AxVu5)oYULq zab|Ixjx2`AKxs4@w~sgwkgwC<#%)b;ZK3$~zOBi2lF)sf`4J`&C+iqQ>$snMC;2I^ ZE&q!rTjx5S|DXHsLz2$my39bepgDno;UZiFflG-;v}hqk(y|%e$YdEL z7cw%az=&EIDY|e`i|8K++!R7nR7lN~Gij7g-+j)Qh^r2qckXxYJ?EbHopYriicAnm z_OhI(-UdflbUtM;D@&`ERHBaZl&S;%rMk}YNCJO=}?H=rya?VVXw1VV5uEG8Q#jR4W>};TXVY!$)bY#QSt22EDuj;V?%iWp& z?fGt;g75wh84iow?WuL+1OD!!W}aYvH<7k@H?!RCwBW~>aF3-q?_u2SN&9$``P^ih z@#BoS$J4mqANy_Fs?)Jx{9T6i2oKbXny?6VrN-T?nT@J;$k34GW2&>z?i zhF&m@o=T&*-??koOS^Dbjsc@q=hA$=EL|qUqYU~<9+Zv zIe$I{wc*lVOH*0YFc=}dwzfalxU{LqP~)5};s@7E{*QXHo1SNj#OG}?cdMBX?T)}Y z(a+UPKf^uE@pDg5>vVIx^8sR--pf%zYB6JYi6SPd7NCnFioW@$Q^^>=S(d>b>RFiZHrnK2`Y( DO!;On literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/mov-c-cpu-tests.bin b/bin/non-output/cpu-tests/mov-c-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..cdcf756633ba5636b6fd7926900ec174a8c607ee GIT binary patch literal 960 zcmb7DzfV(96h622zP`X9l?!Rafws3TM3+iiBgO#}41WS+hZn=(Kw>1UkhZB92gw~U zYJ!7?xHW+W1_n$Z{so3bLn0D2L|dhgG9dN4@4bqvO-{}|U(fIJJt>Hyi$s#WZP#h5 z*AW&?%^91ur4=ESyGV7S9%HM_JVoIzMd`YV3DP$HPc)%pq>@HwNTrP)BQ@Nl;?TAi zAGHa1Yh($!xH2)Kt~80K1YNc)lKFnBH}+0=YTUOix9wxgEuJa`*g=35j(KW3z}^Sg zpo?70%Vq5Z*xpgpBGf2fl~%`Z`4?&gejTjvvxu2^j*)~vW@O&%=<6O4O+%ak%bQb{ z?Y~%OKmKmEn5iYLodo9iF8_%&^XkgGIIr1MtW~_7>M(pEtL4{Ye*7FWJs4kAU5Ryi za4uK_c>l)EL+aKd=~|gC5@oI^UUs(c4J5`z(%jm{q;WSKJfM{ zyThax!q{`+NLNHmRUvERakY_)tBf%Br2Q9_Gi^88QgnULOD*o4RC;B}M(&8YPaU^C z(YsOD;xwCgfi3@#Zj%M~!`$FPRV39KWTTW+kD;p~4LgnaLqAX9kk>>?J`zcpw}iaY zPjbe)|2Gexae0vMD_<8W!!J2GMb7D$Zf$lMj?nW8dYFuoZnb*$2X@c&0(z|3B73Q2 z<~z_!qqJH9zt(LswN>?V+7Wo?Cb+6jFw}`<@4i8=uVUH!OT-L*l4U_^vt;&?Kukhy zKsH4JcL{+Tp<-^H@lnQ#qu|O-aD_4M^922gW*hT;)U!>#|I|L4ZVX}<7;Qzn=0H~k%xc~qF literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/movsx-cpu-tests.bin b/bin/non-output/cpu-tests/movsx-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..71e47d73cdb90b2d2a61c299ba830f83eaf1a711 GIT binary patch literal 1138 zcmbtT&1(}u6n~SM&DtI`by7lGBp;Kc;z1%wpp_g_i1aUz9&=cv2M-0Y^qP=_wc^1t zhlmv_s1$F3HnfKx6dL*$NH0pjSX!xVf+nVdCcepTOc8G`Jl?$Dysvrhx10fZRscA8 z+pR+H_kkvAABdpR5fEXelOV1( zAvd{;@heco7@1EcJv!ihJ5fZPTc1scYs%N<6qzQ_3ImZCfr-%qnYdk;;acklkB>sV z;ce&k7`*8Dxc_zEQunJxldSHW*cavsF__Ra804sal{%cM9JxLBU%sinZ`ZEZprO2t z9oSg)l!kU~?46CRonRee)v4H6`in;ctY5g!wZ5PCn1)ieUmvS}rj_$=(JolE(?^5e z`qHGjiC2bB6>;sgqD6RXD4@BiRE^6a={v{$=he)h|Txt>Y zcZexJ>KjBvW{5;iaV1#ac&fX(-k9XeXk)L&y)8Fy-3Rr4KI{a!?8Kd?ze$t%L4^nR%J#bTU LjRynpe@?#vn=>xm literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/mul-longlong-cpu-tests.bin b/bin/non-output/cpu-tests/mul-longlong-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..da76bf543e2dce9136f5cb4644bc7a509b294137 GIT binary patch literal 1072 zcmYjQO>7fK6n^8G^RuJJfC;_yg{Z51@nTQQi5gDN({3#X27gWTK z5)rY8^Z1^yuHpUn=i^GhWWsn|khb(y%ldCR#FVF*;0Ga@e9YN@y}_ zx#%|HN^Y|VjS-TJS(x9!#O+|CX>b?-#!<{p4W!-*JgxtC_b+~H*s*|$)fR%Ka^X+@ zzgX_ZdC@0V{9vZs5YiSvKK29Ov{Wf zg0nbp#V=QbxGSP!&GlL*>hFbNxkPLd2bSu9pXR z25p?j{BpLPSC4_hoqOFNGj4_dYiYA?kw>|+vq#K@dxXI-M+%CU?7Gy;4bD7&$f+7N z-`X2_O2^y^``jz38*k-e0ByD!8mg*&{Kcyk(%fqfu|dA&Sy0?TnM(!5X*~0+AMJjO zUvB2I<(_Sh`ywYhw>% z0g$!YhGOSpU1qSy8J&eXYHGfsoEnDPb_M9H4yv}uFZG)Y_3&;g^1BJv=?)#Zj=f&# z4h>z#m_mW48Ho9m!lf5udc_>dJnO~1xR7Hm)4LZRb(~rEAbRA2|K-O&eXyEX9_=^2 z-s}B+$G&&Nw?5x;CiC6K1Ji@v$HFQcdgkAEt?-0>Kel5!ySNb9vwd~*Z<2`-2UoyPswLrKn zNMTGSlYOZ=^wXCva{R{YoZ!MboW2Q5MnT%05QQnw78vx|H$cp-gES);XOMf8EsHru zWHJKA-BzOch9O!QJ4|7|Owb;e192Re1FB{e)*$Yqh&u$@JmMyXAfQ_VJk$#L!i)V} z^OLfgAz#?~8TZGC79=DdjDZ#=*mreCTXj}lhnoP12Vk`6ps;z8oy7j~QR8Cmc<#4e z#NFfn;gLu@2f&a(6u!}*x8eRs_+vKF zKMQiwB6!~>dOhgR5#b*s65oa^!`_XjtcA0JkIdo^xlTex)x)a<<84synhbC2yy zle$G3ZF$HeR)QYkS9~QP_uMQ?R;Y05*p#V~W*nH!Ji!pV%2!@8|AE|a;h7!=LYCrl zk6T4j<96#uRU2vAA(qir5*^|J`ZVpra~JZmTf-UK)iSh`-=iHoq*FeOy-ldM+4@$E zPgvS9-d8P4JFC2pj)QTyQ!f>lsFPQ=+BV8^27Amf8aQ22^L>%2Ff5rx z(6S6vZIRyYGAQnY5ly5c1nam1H(nvvFWrIA9Okrt=1B@-HKBO%Vvbj=psi9bzKabt zVndA()Ch@(Q7h+BD}-n@ouDpgv4Z`7l9NR(_n4KVg?8iuYX6MG2~z13IYiC=LOGo* zg1a+lOSsu=1UQ9)TkNqxw9x_Aob7Nlavesle1y^4@5%Q4L9P3pPycQRcJ=pS-G`kE p4&~KZ#npFpPu*8}DqrC!JcX<9RUK7N)vd0F_`}uK^s)c%?hoIh5BLB8 literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/prime-cpu-tests.bin b/bin/non-output/cpu-tests/prime-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..376ea88b0ebf7f6325441a0c1f212e675817a91e GIT binary patch literal 1136 zcmZ`&O-vI(6n?Wivzsjvuqy1MLxeww{6A{q^M6?~lwaO4}!v^;OD0;>U z`O(jR>ZtNv@^RV-ic#Pr6#ZkNdd8rh20+vGna9=iIAe?p0ML(+bqtgp z!1(s|-d0}aoEEA=+LtXJTy^7Xe1|WuW`-I=+yLahU~2AtLk4W^^DaDF+CC@sBjs~t zxFvbF%P(Whl5d#BZz2cu{$R_Qv+(e2AuOVMV*8Ez6hC-#aN_w z3Dk!g;Ain{+$w6$9uGJEn^)pQ*z=e?nT8BY$NJsure4c;8aDNr=BjP^mVrFYu%^!n zTfX|P)5D7T9@ct2g0^@6!5VRbT{#_Z!p4}X&agRcLt;ARX+c?7D@0~wGFH(9!Jc?` z#nj7Y)CbYNayP5dEgFJr~blX$!wi!@QkQ zege4-Xsu>HdHVx-v+}=><}7XTbl2Sn^3M;y(zV3CKS?2n?hvR#VUJU{TvVgTaoVPl z+Jeq+NlkP>CY1wo)&?D0q`$RFir>*rQ=~fy#%YZ7z57~nkymycWN+aI*;sPzuWLr_rseJUjP)&w9dWXjj!W4Z9l#E h)rZh?b`fzIaUGFBj3VwJ#t?81hV+8Zt@2WS{{ui%H$eaZ literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/quick-sort-cpu-tests.bin b/bin/non-output/cpu-tests/quick-sort-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..b305d52f1ecdc0f5949c2465466bf45a86af0266 GIT binary patch literal 1240 zcmZuw&ubGw82u(YyW3Q)sgoLPz_yt*9=t@8f)x)Hsv>ysWRE>8(u0SBC|( zj95`Y4~lvVq@_9Zpoic;pyeKNO3DnfNl>3>y z)0m$>M#X%IqGliZpvNqLm=`E-cxM_-UBeqMH#X}|R|kG;E}M0o=Vc3fY05(x>}8&0 za)`+zy(Ds|!z~g)j3y^B3z$KwRPX*!b~_feYOQE4vKjyFow~k}O=g&pW-Ob|kTJ@% zP65roquHN`3GGbtpgb~9!b&m)Jr!aynF+{4=$$?Q^ajKnN3Y3s0sU2Qj2Xj0a5+gS zGe0Iq`Y6i7I=||L)BZVt*C)RoYPEZm_apyPuNQj#15PS8{_lFv3&%ItzX$gKxCg+U zfji5NX28`yYs2SnnskncrU9oPyzLOq)!vGA_SkBB;tA{Uh=E%bd)}J2U}I12vxKo^ zQ+CPqy`(Jk0gCwtV;xU1@F6`{mLA5TqwfQ!$Lz=VA73wMs4mrfy|%PV9`!X9&{cDH zZrNdBSNDlI{DZ4=emN{^7f5R;y5ZG1OY8VcxqMI-fW`44SxOJdB+i@X$h+eW0&BcZnSQ4DVN}?<&epHq=Y)0ltwMsUddvyQr-(T_5>x{v9dsxLgEExwyQF zvA`4fPayxbU1##EvBZbP6&@EOCKt!R?V`W_iyyyOGdlG?8_Rsy*L`A&oQ>6PrM0v| zblU}oi3q8BeW%y|vZ?04amnVXJ$1dmk7{9*itZX2%QorWvhX3{aD1mv7_xAJq0eCI z>|>IJ`-7>Gdss8@UgSB+m7LZkhBYx+0#;ytUH=v(gz&1btC_@Z@421FoyORNQ R0lffSqZvKmx!fMw@4wz8M@awx literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/recursion-cpu-tests.bin b/bin/non-output/cpu-tests/recursion-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..c2756d99031ec8fac7cf0f44f0ce961b176584a4 GIT binary patch literal 1568 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 DUNa*M literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/shuixianhua-cpu-tests.bin b/bin/non-output/cpu-tests/shuixianhua-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..3f07ffc4579154cfbf75906399247ed744329eec GIT binary patch literal 1312 zcmYjRO>7%Q6n?WiyDK~WaTzD34wCIm8YE7xY)hocVJig{Aub$3dyCMjic}7f3RNXe zHnwY0^*|U}13@H*R*0J=H%$&bm_tA+2M#EWDvBaxRJfF^z>Zrr*nG2g11mkfdGp?z z_suu&t>8qlB_hGT?d?+jMUPuFpVv0)2`fS}dyICe5rw@kvrC42^)!>&x0p=7!{qca z*abtTQ>L6g$rN{O6-I8@O~i(vhlbu*E=5UMt}V)(yel(@aaLS~EbOh4-h+KyuSYEl zYd0lO|39Cb9OWD~CxILR4U7?m*#5e4ba^pEK~5PO0{@Y~AFLaPM?)b}jy@B9$P{ns zI*0ma1o1;t{3bPD`n090uTb52M&>PtmaoPsV_kPeZkTrcoj?D7kLFi1e~a?HUf-8^ zTuc{CGt10kwqTf(%qUJ4n0bn^;;90eQw((jK6$_^u)j-03lJ|3TuubIorAsS-1m8> zXiVo?R&Li%`~iIsCv43Dk=h$3uVe%3CaJAq5+ftjykT{NbA~NLU59)~xO2nQ9M9(s z5`%p)3*Xj(pN*FLer5PQ@7iqGb1mEZ&a%Z7&7ZD^{X@2)>Uyu&sBYEV1%KzM*8P~oQ|;4O zwe8)r$a@q0;jeU_=jzzzIjgJVz|CF;b`bx`U#uCOZRz`09q?26e#~5RsJK=MdRp1w z6H+hVa{Cssk|Uc4$h9~d;g-G^b@rmgU$Cdxi|bh|gY)j2>-LfGgzad$>nat!?k+buo{tw8zCC$qia>nEayBL@&19QbNR}6DSm@EB`X3*c@ zM(|b-_=>tJb}fXS2D6zn9kBOdW9*c9e<)y7oVx=$fHxhOYbhKsQu; zqDw-T6mdKk=%(_6bwqAPJrl#s)y!F(cL4SbzAeNiL9Pm7YMA5N+vKWoDX<+s1)E*4 zmBc!HRtI)NIUD%o1cN^xKl6D|ReFzz(iqlSm0UeaJflBeTjDC#jtKEDr&iaTcnxBw+v~t0JBV@|;_T{7UDB3f@Wmk7Zm5jtCqfmM&!_9Hnzp z5A9ZPHzv5wAXW!l$4G9|82D#iZ|DK?30yPwG_Dcf1J@~*mwZ`0dM*3`lOufjcj=uB z6<6kKXxi)5r+psV9`i`%kAlAq%6C_&%Npy9@btQY1F@e zZ+)@k*EZB8yn{kk8%fEiBU$IJUq_7Y8S>WXz6}R%`z;;#Q6u#jc^9>kfA6pt_(a`V zZg177Yf(4;K|hp?*UyrBEYEO{lF{0P`4zmU?aW0V}m`3A;Lah!&+wA{X|6 zuVOLct(`2n{fKcySIifR0^fi;xE1`*lRT;;A8`Kg^kz%J|A`&4F}#D}oJRBDSICbq z8qMVA*wfI@Gx&{hqet+v5qmZoV;DD-jp%<8dbMOHPB3{ZWA;|`?$^+}8I%2<3~snG zUq<{r?y-5<`%Et(_tBGsp2w@A|f$cHNP@yhJ`6C2J1`|w|%5TEw_3%4}T7ytkO literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/sub-longlong-cpu-tests.bin b/bin/non-output/cpu-tests/sub-longlong-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..71ae52567e7bf3542950f353f35a00c5fb3b7853 GIT binary patch literal 1448 zcma)5&ubGw6n>ML&C;Z3>{NpF&^FW7qb*6GzYZz16!By)Jr-G{2M_FG(1Z9V^r94uqEa*g6H~BFe3P9i5-D_Hn4P!peee6edCM6CA`^8SAUktl`mY${? z(ylZ)>-ZpZb?O|ZyLie*>;Ts7m!&;?DEESRW=G*@4P(!K@>-R+{_p>2%|M>=mJRTz#rOFdqb2ub(gV>@{QtITmadzEoHGzR27dY^AF}i#Dj%_PYuX=Pq ze+RScFc=)27jMU*I?>>my&XsA#oKZ4_isH0$MDj;SC8Gms!luMbDA!lccRbWwDUPl zSGzvL=d8L6FU`AoWEyE5hRzI B$36f6 literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/sum-cpu-tests.bin b/bin/non-output/cpu-tests/sum-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..17d5ad93eadfe67a49d05e035b3d5574e459b925 GIT binary patch literal 760 zcmYjPL2DC16n>ML-61__>QsX9&?J+j*GLjDwucBxuikphVUZp@1jN#7LK4=92g@8% zRM3M`ye+gLIrLx-;!ns$2^vMEXaZ*4A~o^NCblj-X5QO*-}~P8o?rms9RNYP(;*as z7BgV8tbH;SMhIkf5r$AU(4WY)MUW{1iibd%w@kXyg;nlh>;pWp!!X$GO=z+U?J$6{ z_f{_(24oDkAaWOBIC}QGnywIG_}Brz2L8VT03|dlV)(eC&QD|ic+5DwCSjdxyonD- zMNj;f+vK|5+Zb(esJ3jMyE5@D+J60IVcrA5`k>!RXD^EV5RGr0Ga`8ZBh!_DT-yP) z?Gk(+kXK`PULi7lohZ~qXv6x}W4||py%@CsogQxaH@zGSU;5*gysC8^#5H*h2Ag3?-=A%C7?BMi#(&JQBJiE1Fn7H64Dp6>6nYUW|z9s_N2(6y!W zDP=LdXV1{!BV^h+Rz?)sNf&qtrw+YEGk74G%+o-jo;a%B^M74yu5sO=l%NZlY%I^OeERc zPMx+dxWb~Dd81iJS`kvtAk~S&(8nsX5Ky<4N!>^=<%}|wxeY%UC?kh1y&IMA(r$Eg z=o88Cdy0mjLwBz86@m8?l(qK8W$rT78@q=(nxZxPklgbQGcm51V0_gkDTb)f7(O<& z>y7Dl5jDBP0!3$m@iE4VV++J@GLn|xBlml?EV@TT1(+MNNZS#Ti}u;G(|NkHY_q6| zwIXP|?)3tL-U8Slo=GxS8}uG(5ng9|hH-HTSNpOKzx z`E2@GX|R>XP~UxK4`J@BatRu}y7xDRWa|MLJ~A96y%aR_|JI&}s|sv=BB3^&gvtoy zC{gW&ccQ^fiqHpLZgcm*yCh5C=X2YwYddqGccReZD4S~`*UO)>)nq;XKm2c75h=9} z+bpHjWB7_lLmMvpJ^uT=Dn{fZk&-z}$Vv1z>wmxR{`1)u@8$c(H^hj~eQJi>qpx9Y zSOz2X+(QpjQPS=9KrOa&qLkWfPKkuNg^hxHep*L`OjTpthXoF3(@RgzK?pY$!kyT6YLsT zPU`>EIaszd26h=n2jD@;&T%-~9zX CA?M%# literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/to-lower-case-cpu-tests.bin b/bin/non-output/cpu-tests/to-lower-case-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..96f690cb822bd130d9aebe5d9e4a4d4a291d11ea GIT binary patch literal 944 zcmZ`%O-~b16ur}V)1ipA@QRh9_G3x`6)m<^il~@K_z5ihs5&AlY89#VTS$ww#s%b= zV8jF$8sn}BG_YWS3*%2G`S5f3M5qoHmqtP@l0wqi{ z$T`Ib@NFVg6FpFWM(Y$Zt<+r!$&~3Q3#7Hx;p{IO$ZAI(iYmF}DI{j+axA;3^`%C0 zL7c<8I91Tq&+#6P3wrv23I$DkL7N~zHvsq$vQfbKI-mpM>e^rZMeWm^LE#GTt;tk; zfv)2Yqiz=dP|wFi2*$#NGcz^rMT`x+ZY}crIMf5mUMc#f4t?O1{_-ZlxZV>M$Q1lo z^~Q08W9TJSfb-?&qMnMWS{lI`waPscdYb74#S>bp1{P7HH{JynCT1y$7(Z%}CS4ZE zL9j;%5--BbOibk|(R^gXSzcZWSJ04%y>-ZoCz{z4^T0aJ2|9{N(=MU2zh!>M>8sKpXZ>4vh6o3y&}3aYQ% zY}is|tlqk9yUA>^O12t%ZC(A2ox2)#?{PHlb-LX9_BVN&540RSbh!2O8ToAIxvujU vE_PqKe8qS5TF>=f|Bb-STepuLKXKA~>i_@m+`V`I0SrRlikL@hq5%E?$V38t literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/unalign-cpu-tests.bin b/bin/non-output/cpu-tests/unalign-cpu-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..b5b33c5cd8c758760cb5e506ac1ac1e32057c72d GIT binary patch literal 960 zcmZuwO=uHA6n?Wa+a(E@)M*K}Vw+4_p{JB=pnr!5u{n4W3OyEy(u0ShSbJ^Q#I;q# zGH67F7HSba1=^5;Me4M4J|Fu%+H znN=91ZTo1}04r@w13+Qt7t!wcejB(W8A| zXpVK&c^@5z`2LPlDlVHms6S#D^@8%ncH8EmoI#9PgN061)c#L0-4Dxl5oiv5f_IC| z$L=`8vl*iz6C-#}XXw&15Sb^Pq3{CEbbR0`24XF#c=6+mU#w!RF+b{}p>H(w4ME=! z^bMeIl#aCF6Z8cu))4=DIaQ?F4~)Z!LI-jIjsMKy0qIcQ@W4c2tc-So8a{9rP~rM> J^Cs!dZ>pLFGBr;yGHm#LC}7?B#m8bvhRIqiyu7Zd-LYKd4GPt zQ39ZO8bGl}wN+SZG(y7280oC0WCV1g5mo_qp}wJG9b7fg-n66lA7(mnoaxvprVllu zo^te|UZ%ot*{o;*8^*XhFwTxANi#kmm56|C02qZaP#G7j6ri$#Vz=y-5=>OWgN6i~ zb)(=#x@snKO{fV06wA9b@J(eu)>PjfSoPc1(ykm zdM}n5n<>6r{(03ee*WH9?U9bXj4}>b*Al0?M#dc2+E+tpTiLd=z1h0mI)2Se4TVio zhRkCbQh#6$=&K~|?+iIM6an-5eK04NKs7aiz0w5Unfq0$)4X4XLUuVBKfMC>c@wB# z&~_zM4Qi)6{Nb-^^Paf8l{825P>}iLs9#*CHOSR(TPGXkO1k+I=W$G;@6F1VFP-&H z$|{|s8N^W!&R_bMdC{Q~-8bW6zjK3~eBOohd@jI{4PmcP3fVi!djG~4&M!Et=kB&6 zt{C~6U9uJbzv&p^Xd3MKGUAJH)q!g-;_NW9h)qR8bzgU*%JqL#6R6{?%&!YkRsIcV zt|}Y?I}xJVJ)0BlI*&3p(4iL-9Xf`%6B+Psa=nimqVg$^_hp?qy;@oF*n8S%?u$9Vguk}UMPGFAn zu86l(sJ<0D(+`DQ3HX8wbhpmG>oEfV6N6mm2N~Ye9zT5#bpCdGyzdtJv^^u<>4zEW zODFnt>P3`?q7&!hAg>(c6+>PzoEbuh<%6Uu(;2wV{0~=nw{NHIZgA0Ym2f_PsM?K(uwe z)j!@_leO-;_nfoO{`j4J_TJ}AxXhUM9mcruQnH^tftnQgP1?^sCVWu~B`yV)fG)&7=AB%>`jpFMXJWtI*%P zn#Uh+B%E>M_WT7@|i z1byLQ^veR*R$y$GsF%Jh>NERnI`9fZr{K;|M4x%s>XRTV66#_4%mfP-H#1|aCI`zP zx1>psN(BKj8DuiZ6d+T8KBCkW5`)l5FPSLlr3z&3X8Pi8@OuOD`b2$UTnv^rkzFF$ zClz(W-fuw0ATyPhS^vPnzmVKuu`F0}%CwXYgWz!(c0+E)`~qz?GreBc8HzD8TxPww zL$khl{tU*w#muktF+bVidxPoI@XS&)f2fZIXJ~?cA)Z;95NXYa4!u|t1w7(-dRW&) zW_|0=#!i^PjMhw_m1s+?OHwaAhk4gwjT~)l!KFn^>Y2}^FFKg1GG=UxiAJ-^boMIi zXDhyJYUsOhJ8a!<^O>1wrgesmjJIfnhhVL}n#Xvn#%c!&N6yUUGhp zzId)vUs&$cOTXgOOV&8`#oyL2u3=o$OMa;7i=S5@Z+v(G{H67kwqTdac%lq`2pJ(S z2jNy4JzEg{LK4NFAJl`-1zjo`V}b(h}pEY`yIZ!_%0 zy3%)}$h8(ppBZQ2BG9$8oa9P{pm!W${dp_CX7^Q$azzl(zRAL&jAVzz6#b|d^SGiU z_1TH4vL9=h_fUnYenM8?$;7M@S`D{)i3jd`ylo4VK1 z-2Q>eH>BMzX1eoao(o+EDt{5|&H)BYrg_F4T{lQQIq>%>%p6I0j15==@|)&u*GDIO zFls6;OFr;hnx@mYZ?R~3F65{(i{24F8S&<`MJ+wpPq#sq0!-M=kOXo`arm?K{dCW2y<~#G)fKR(TeR1- z;=OP&*7Pau>%ek`sbG&;KG6Lh+C{-4Cu~9t9ixBWqW`IOBgS=8$xG88L3>)TTPAur zgFemw28{baFK6&Cw6Irwne=J?t3ZFAsrb_L#D7W{YZ-h}xte2L$7CqBj2+ra`0HfC z+?LVu7TV|97%hE0_+(FY*;BwteQLaM-zocJDf^d$f4)6WIST*Im-e_=u&5PsloVDi zww&$SRT!UOD##)Be(6P<2jN#-^+CVx4BfhqruZ)d|2)`}#_JDgd+a%R0&Eg8?6K!O zr!9g0xxh?F*|Q&QH~DWEaeJLEbYnQ~Smd-`4v3%kTJ8c|)q+J4e;+S7lbfYcUb3+%| zbA4yn+hXgxLtD_F*LW{5O56Jq+TXF`#>*E-yXBPKN{4MXtFi5t({>-W?B1@;v+dq@ zr){@#pg)h@Y59HYZ$z`jonAMa{%LJC#y5}ozVb7)Z|B;6X0(0)`rI^qG{t`w#v4p! zf4aX5?Rq0W7j~y0-eZytv6JT_QMxmozz~MS>%^s7aF+3tDh-lPX;*sKHB{6pnp_JnN?1 zt2cfhwNW06PW|Ai+JVYv%-sDHtC5S_e`4i)MPc7!jMd^XCPNp{QtnRoW!44Q7t2$) zc=`w0gUD;A==en7{jYfLW0bF?0*tL~6j{2TUx%?bPK^r%E%vx64kV3j*SU;2lkRNS}{(HxS=!EMAEqTCAXL0rfp3L?s{7@5FwH5q;%gwKG#BGk8gxWAB zRUpSrRz|(n*vr4cm}-v|9yxtX#ylq4W0i-~W1uH}qgZpRej~p#LraIlGw^PGrOb=k zjjQT#E!&6w5b8M8gk2hBYNL7waw__wkM@qj|0Sz-13&PxYd7!w)Sj&Pn_r1D$&a-m zOqpcash8L_KIlhK#|h>Z@*&Wuji_HBx5Y`dy@)zbl6GnME*DV$p}u+;&sPvj_g#$I z<8J*~)FDpa-Kl!zefXo`mk$T@XaB_b7L`S0C;TFya_kk@+D9@XA;e9z&4!CH#?Cc& zO<=~OsIh=WM1~${o7i}r+6gAbP;;y2vgqo=C%Uc^sFs<;6^qvaGdzKHHitpGB(+bQ zf7aPN$bvDMkss?neTErJ1}D%y^2>vPU~CC1aG@S=USijrs|QDkr~dSn!WiGeKhWHW zHj!ClPaQucvuiSA1a4#J}p4^zB3koD?T`R{lD&>H-$=Dng`J6ZSSw7YHXB z<9D6#>}?(l6u3?#;e)T*KBGO)Ctt|?TbByKVizlzs0anuDVVo|ftK-2gPuh#JHY=o z;{6(YMM7+n_@=l=f9@Ha@0@fF5)r3F#3%tV%36QKECK!@TYJHUSTk_&L$pu8FJx1} z80_b$%itHXUJ4u+3WUdhOT|slqe+AuMZXZ|q~e!^29C7%YBC)MwCl zxv2ZlKixV{Dd4Y?Je^_vrrACkTne9PK|QNX#JMJ(G}^EST4SS&T4LDGj4e_QS?|>T z`K5%s9NZnEy^u7mJ%qDU%aZ}x$B6G!p%)`s{l%RD&{+E=wck%jx`1=bTnYXz!OwAa zTqEIJgR^53&X5la{9c`z_e!)EWWoV`GWLif%@I^-R+GwI&~+=G9GrFTSDERA|GLMq z$alvvW6C(y%=d_V6Gz-rMPsUak}=eavkDW9@5UBzmC@c4Ygr@Cw_VuZUYr$=vnM<~ zqtTY5e5+924pXYj6SPWm;_;p_? zbkmse_yN}0`X0V<=GA zL?73V)ecmC2;UQ-t89%o$Bxl_l4Gik8rcn+ejZ9Bqq6o#eE)TfKTGpJ0IWq|jk_z% zN%<<#T0FPLtU2JPq;Z5!@2B*B9dneiIfd_;)*9IU4!Wbr;qUToZs^fIXx=V~JQPbB zkE&Q3tQqt|f1K747#ugSkFC8l73(@KDMqJ^9HuqL*dbe9G00e7$rdvU&iyExPrrSIS_=OY$r1K&0`FhRW?qS)d_ zj6r-+avyM zD)=bQzPEO1s131Kxod^!od7!dBabM&8zxQ8PhzU)Y~07&=jJ2X|`Ldu^jNev-zy;~{3;GdvFWh@v6K zeU`7%-pRq<(hiBH8#>DI@e!@%xJ9q|1fwe9@OmLr3r(?k$5OmwjCh-U6IlfHI`M#y z4w-#LneDjQSCQEsH2Y91j?w?k>}$y!KPFY+45l@zh8kZ9T8Bjo+aua;+Xk&fiEc>z z)z(RybT*wV9(_t)dM@JCh)H*Su%Buc%EgiJMQm@VONfNMc<)5Mhb?WmM|?m#i8J#_ ze*2JzY>M9X>Ih*&IGgv+#Mzc%9pWFRWCXbO5aDm>M)Hh%5~_voxcEE^U+9h)`IiDY zml;(L2t0QLwI1RGtu?JP)|1v5zU-v)0%`y!Y5)gvyaRQBhB`n)9iXBPP*Ddcr~?$# z0W!|wGS1=>VuFim!bo@)+uIfvIN9*%B)X?X`)SL6BHJ7%(>g})NsL%}<;=}ey^d*F+xJ=+g(oToqw zEH(UIkz-+Q+}o8K37t$X3dP88MWQ7i^XF)S6^|T~tayNPX@>72ALKeLtR?hEr{m= zjAZbX9+uxiwxv&|?@rx#lKe0dI?s|Foua(Sb8;c4eaPAigIxugd!ciy>mTR+__HVZ z1C!xT@E_VYt@zCcvaQ$%yCLJjAbcym-#Ph2MFM_h?|b-&gx@CvG}qp5bU)$wU~KQV z-w(e)+(CT_p8$r3DE?p%zRexT2@fJ3ZT1AX8bJK^umTN!J*9hGbiDSanb53xpxsUW zoz~%$Y^*=@8@6&L_=EQzsmDpY-x^!9_TWFFKj!S>4j<+gCOGyk>0#}eID8vAVsHN* zvi|VtdQ^5GPL`+RB>4Ok>qz?joctK=*G(7dRje;$y+=M2ouur;c+|$@V85w&i0-&C z!M@k1J=FdL^2`Y?HK9&_9yRbw_)Yx3aOd`pY|{O*A|R(qz-1umrTRqa#$DYx6jN~b zAW;3J=%s6DJ>Ey2qq`dG?u2XjtxZGDysO7$4#z#_BW&X8B&2Np1X#~rA(93szOcp4w;{&LFDsOep3(+=H^ z{1Erh@8gC8`>?Ugj=NJ5_T8|m0>6Vpo$Bs@)I-0Gt?&j>fE7WB_&~QIEP|R`vN%!YQUDpI2Z(w{r?weew zJ#mNGf2eS)8IpZ^2cBI^&evZkJzpyWK)Y_|kY}Jh1LODEdQ4_g~@784hxe4gu88O2b1J6P0ewk$J9fxPoy@y`9RMI<^3XtRTSL3d*V~5W_ ze>>*x@V(%YTW(w zA9`@m+&m~nAJs;&FFv4}%^G*+;ogk=oqq4A9Kuf=Y(@FC*V6lo`Qo z>+0^TZ>X)Q_FZ0GW31b_rtVu~6h-y8{j~p9)!n(iX05NN%2&6krry`EuC8{|+I7BD z(`TnB&!XSF;^j+D$v?}uzj)=?_?0ycl}k6&-g1dARjki?SRbF#z0p3KR>P+o8Q8f_tP34=p zzU-p1vXYW7`vShw+4D-4F1zajn>%CWSNm41sacQZv*X(u!>F#W_thX0-m$*E!BAG6%UQm_kj)ePfBOzefK%0&96! zST+ZTdi;?uSbvA?Hon_ZJ)iknm}Aqg8)v^u-1d7}s(*i~|1+6n2eSxd5y&EtMIehn z7J)1RSp>2OWD&?BkVPPiKo)^40$BvI2xJk+B9KKOi$E5EECN{svIt}m$RdzMAd5g2 rfh+=91hNQZ5y&EtMIehn7J)1RSp>2OWD&?BkVPPiKo)_2Is*R#sk07s literal 0 HcmV?d00001 diff --git a/bin/non-output/microbench/microbench-huge.bin b/bin/non-output/microbench/microbench-huge.bin new file mode 100755 index 0000000000000000000000000000000000000000..3b23fffaed7e1e0aa59f99ef15aec7a398b26afc GIT binary patch literal 31264 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 literal 0 HcmV?d00001 diff --git a/bin/non-output/microbench/microbench-ref.bin b/bin/non-output/microbench/microbench-ref.bin new file mode 100755 index 0000000000000000000000000000000000000000..75e6b7c00d12d42ec26eb0f4b1e6778fd84a1f6a GIT binary patch literal 31264 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 literal 0 HcmV?d00001 diff --git a/bin/non-output/microbench/microbench-test.bin b/bin/non-output/microbench/microbench-test.bin new file mode 100755 index 0000000000000000000000000000000000000000..e4173ad4b61aca3b64cd3bbaa4b5bc54802ed19e GIT binary patch literal 31264 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 literal 0 HcmV?d00001 diff --git a/bin/non-output/microbench/microbench-train.bin b/bin/non-output/microbench/microbench-train.bin new file mode 100755 index 0000000000000000000000000000000000000000..899a05caa670f09febfc0293fe4822c1bac1a522 GIT binary patch literal 31264 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 literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/add-riscv-tests.bin b/bin/non-output/riscv-tests/add-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..3204754417e946aabaa1f82cbd89bb641ae6e60d GIT binary patch literal 1360 zcmbW1!HN?>5QeLI5)=Y3@xZ1!Ye2vq(3_gB?jZHOpfqS4O*8IQ>DfV3ZdHRL1i z7jfixNV*+;F*HOxEaDr)C#1X4X9J({GRwqgzsfShQ_{WY)1D|U{r4WlhG*h$<4*5o z+12VMGv)?qH5^O+gZN&>X;$^l^J~e!FZ1JN#lvHG1Z4MFU4wB$ z`cd>wv^Cud-onFM$-g~$x%z(O`Ge%&2y4Kp zF+98tVnf!y!eOAmQTWJN1>QXhREvxn&~^LU-`sbC^@|s|w(u6M)LGTHL@)bI!MAvx z>(iX2)Zbp?%NpUCvFCgz8g#Srn;nM-j|N9p-oAe#4FY)~YU6@Q8 literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/addi-riscv-tests.bin b/bin/non-output/riscv-tests/addi-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..12c76305304695bfa08f8b14bb32f0b67b0c703f GIT binary patch literal 720 zcmZ{hK}y3w7=_vI8#M7RFscdW7z}?Gbu} zf)@yMZ+w5!G%6Sv0&l+my_Y``fO`XC!Xp`cT0BHpYL;3?Z45sw?jy$3a%wAT6Zo6r zE;h4)vmweOe80Hc073mWwKjzx6}Lw%ER(W|@gVUvA)muv7g^&`&SSzOLGv@^m!Yg$ zpXKYJin37uo9?chFB5jG{XRLn();TstDI{-=cuo>|EQZo*c_^PbGOxg!()ev9hkF& zx2kEr?m+jlhaVJ!MkAB#$(7o_-}zdc`Ur&kNh5ZMVNH)9QLOm)JavYC)ZN<}E;)xY zDWb{nIe7YNxJ7IYGePwfcj>V5=R~@@(*uQ+L{FMAed^)@Acy?&>hi(2N z^NWiUQ~zUjXt}zlW>1CRfA)*3S$1gIx~Jym!u=WU*>InR|5^M;&OKP;LY6c;UWo7K f-18W&XYqoqaXs)oF*A!Tt^a*ouZL&ezVLhldv3uT literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/addiw-riscv-tests.bin b/bin/non-output/riscv-tests/addiw-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..e24e2ff2bd5a368593783d1d7341b8e79bc6256c GIT binary patch literal 720 zcma))F>1p=6hvpGh=h=0k%TdpF(QQ2I)aZ7astDaDI!pz(hDx!8aACE_z3RY`UpOP z!50v?k22q~A}3V@i(vN6pTB?C0Z5jB^SM+CGcKPUG&M~vrIx{jqGi-_YHMm!m|^+k zTCb(oI`slGDId3hm3rH=HiL2KWTcKV6>24+x>uIkzCshP7L_jZy$yyQ2`XU1Og2M&@gXP0>#r2mUX z#y^m&VMb-#*VUJ^LeU>O>`~bb{Z=`pmHEiS$YU+)$#R3pzeVJQa9)bz;PtEJQe||Z zdv1-0v;D=!!se`*DKjb_dUn;afB8`O8TqL)VR7H{?4ipacKI*NFYh`=vXdoy=(uyA zl08#=A2-)r%d&@#J@+ZOx#Il23h+2fkN2z0C*KdWm)O*A=etrS&UsH6qCn#v){g@4 T55LgZv5kLyQ4rvbBz^b>(%QP` literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/addw-riscv-tests.bin b/bin/non-output/riscv-tests/addw-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..ba36c1bd2de9ea68220fc26bbb964220d1107043 GIT binary patch literal 1296 zcmZvczp4{K6voe)7`#}>k_{nf2#bh?SS%t&j7SiXi&zAoATXtc8&Yg}C#0|qjFoBf z2rkCgdP?88v2NIKfboe8O)DI$=NQBN6TZVIhv+Ha69KR#?k?MY-ndN`-Wl59_v5RYfDL{59gvUp$Dw{(@^|7<3U?P3t9h;LSKQQ$dPmL z8xP4>EwU=0+xGW=dF}}7XRmT^ku6^7vFdM$U-lb=Z}u|xr#VaMKVRd?8sV9+?#*6Y z@RTf_k|koy_j#2?I5PIqn{f+=VSHcDsvH^fxj*9;h9%?s=sN~s#e6TbW!7uP`Sct| z;k{sSGufcOxa(NNe_y_1*-L&${K6n-RO4{-I557S_Q{uIxiznwM zLn`xoT>8a(!Qs9UQt0nd-FpvM&O$u*~(%q@r32XLNjg?+T3Lf@3;bC@HP~!>qkMPdmt!jGo6B&M!@NanL(H_fd MKfl?eA5h?<|KSEh)&Kwi literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/and-riscv-tests.bin b/bin/non-output/riscv-tests/and-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..855365e059fde291aa6627dfaf539a6dec03e467 GIT binary patch literal 1424 zcmai!ziQi16vn?R)h%?0u6&CLNeGUI4joFUp@9x1l+vL?FnNN&9XnLUgH}Oa!1Q)A zlsrPfgI1TmKp&yd7r3TFmqK!mYR?h3==59CuXLMqa%zBF!Hd zaSkohiyZV!8Z%$PWES0ZHy-nYd=uzr>BoEv^U~Itub{srAGR{DNn0@|G~e`nv+mML z(ojCv${G_2Q)H1re@Wh{0BGv#v#Rh3RM3YBhWLGS`R^giIps5ZTljb6sQ`F24yZ=O zdqern-jodOoC|N$&kR-mx9orY-x(bLah-p~>-%aKKlkT7;mu#M|78EmE_TQ5dAWDR z{fpQCMHe@Fz5E@!m%U~G^E&&+=k4bfzn47(@sH~Kj=QtJ$1er-KW4AfHuq3#_J=bl z^dLRhcs*XX$6MURnpfwN{R6*uxpy3Yt9OKcG8!FzhCiPN8}dpOFQs2l_`alUPw?oj=v<;S+r!9qs`^;)cEe literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/andi-riscv-tests.bin b/bin/non-output/riscv-tests/andi-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..27ffa0c17e0b585ecc9d439a7e6f24747d8b9592 GIT binary patch literal 592 zcmbV}F>1p=5JmrLtt6ybp*6x7VSEH1Ax8*0L14=i5vWir&;|2+Nap|EWdrVff4u-!BFT57FjBCV*^Oll3csPjHyvu$v+ zdl=I4stsITFMAxtgNea^zVIt(NA_02Vdzwz;$J2Bj9Hz zmsVfHMky#-<6~ZY3PVY%gj-f=m_2jASO6FEX_y!01}?3V)BKc=Iq0U^yg2k)X4{=1 zdIhyRVeH^m)$K3FkuMwho`tWzx#08ulHufEgzW`xUSIvm<~2blIgC42#o?6q;O`Sr uIp+7~^NY@RVSg70^Sk&>~|9xKa(6VVZUkQ{7lqx%{&LXj*NHd z0TcGSikx??`&{F*H0g1C*UXgvpOt^VW4@1KBh34*x<^on#1k-43HWQr&k`qA|Lajn Jf-P6D2fy=csRjT5 literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/bge-riscv-tests.bin b/bin/non-output/riscv-tests/bge-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..4e59f198288269d39e7d0abbb919f84b7e8cee5b GIT binary patch literal 848 zcmZvaQEI|K5Qb;crj*i$B`Xr7$WV%ii0lzOg7gH!KKf9h7swF`+XM6nJ%UHbgB0;W z1TWwTYA2iB%`P?&0{OoA^AA~r1O@;k0_YzCT`Hyf3Qh<5)rC?96?4H{cs`5x%;22) z`6BUrar4uNPYo{Ie8`_fd}46vc$gnYd~9&-@{c}$6!DS4ih0wY`)#>@PXY6nroX`t zHyg21J-6(O*|F{I=LU*e_U%|S_oRj`+kni#E74P{n<$p}vUSN>+5aLL{Dfd;|p zHO}$MvEH7_;1!K`?mYjGcGM4!%>oR4oMW@L)C-=?5~=6&YARBXI63c=;V@l4l91c9{d4APShv> literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/bgeu-riscv-tests.bin b/bin/non-output/riscv-tests/bgeu-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..69f87b209d49c808842bfe31893651a0050e9b64 GIT binary patch literal 1104 zcmbW0PfEj35XNU><3e1-zEX+}WpE)PB0~`=Qlv*HJwYK$7Z$ugj!<~+y736^+}0a- zgi0@vN-0uG>g1(;H2sr>fe^_2zWL^x$J0ol0YD)@Fe3;`{1}uO#xcb~jhh-->YmiS zb-lS!f6&;1fz)*$934i>s&MKI9fgyn>F0C9@?~ylY_IyQ{CvLOsNZYs9_aU-_ABw7 znp4ee;`OfeNL zYxcwkSu@X!JjT^r(g*$k4QVW~ literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/blt-riscv-tests.bin b/bin/non-output/riscv-tests/blt-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..170e06efbab137535252309ca7793c43cd1357f6 GIT binary patch literal 784 zcmb7?K}y3w6o&sv8xe6aWI_o=%0r}-uI30`yAn?z%+iGgFOVY$;{iN^N64Z`aZx-% zpclvqtS^(vBq4NRV94V8-v8!@v4UU$C?R3K2qx2OGt)R8=+`8AZG~oDoqBxL<0~sR z%uD9g$QfV!Theyx8lh&o^4sCZyUDtd&`c^H8m{vb3JyW7Y%!Z ziom??#JL46RFuF*gyZaycYX}GV$U3C9-OpxK1Yu8z9|b{QhP<`wfpuo3y#bB896R% zM``d}Ryp+Ayn>RUS9M;~PX_M#LG=6ke%HZqcakH=_qz(7yAyR@d!IdB2FGRTk>mSa z1kYt{hF+Uj&~)JOTQT<%Ha~MF8vLe&dEeIW2r8C%0j4Sj|MSVKM8VPj`cxd_nI||0 Ee+z%LV*mgE literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/bltu-riscv-tests.bin b/bin/non-output/riscv-tests/bltu-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..3f8185e97d1b72e861ea5a9589eeedc3167daa3e GIT binary patch literal 976 zcma)*!AiqG5Qb+`<3T*E-BOAzW$+*(B1@5a?ITE^K-ileEcgO>gu;6B;v@J7^$mQ4 zXiJeICEmq4nd;IdCKw2N`M&vQCRv9B4gfSNuyX?2F@4)KFkR9YpM8f0?m>YYL*$Zl z)n-obVWjb6C49r2dA@6U4hK@Nz$w%7+`cgmFPP(62w-QN+c03e<}}ZBc)5|8ZDhWz zJlirSYjzZ{LA|CqUNgxLli@i+($0JT&1{&XH8Tbs0dpD8I>9z(Jm(Y2oUe4KqdK^V zV5)}P-$N;@d6#xU2cGW^KOH_+^5UdK-s$AdBye&j=;@6*o|la0N?tOS)bfsGqy?vt zGoxnc@LtOHw4}OcWlw-*tn@P{<$0MwRr2Dz)2?@91`3=%`rq-qWSB}`G8VM$9myCJ zoI*}YTYw!Pwela#zQ1AGV2-i;u?7dlpO14&KCz$esh6-@Y(|Lf6l4A)Gu2j6dB B{wDwc literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/bne-riscv-tests.bin b/bin/non-output/riscv-tests/bne-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..8c113da6836b07095d2821fd07a4094fa872bd2a GIT binary patch literal 784 zcma))!D+)V6o#Mdx|Gs`u#5?&ghvS>K78!Og@?Vn(f?P>dj}B#A~*9b;;|qM>)S{ z4TuB=Z-aA@wC<3UxWFW>j%!OHLR! z-)-Qms~&US*Wk^FqxYtcbbovP_e$wavJF%14$NB;8HX)&smOr-b^6AkBlW*Ok!A2o H^p@5yS9X

8hQH%^Xncr&h8iUktB1Ed-&NLsX8e7tZ?Ad&MY{1{82?5O1D;cs+CMe^ znjPo_VbeRcRqwtU+IsBwJS_V}i!?DPoH z?7dQ6(r>we$pUuBy*ZQQX<5o4l3vT!xkZO9`i4F5lwp({wLIls(>`?e)Z=dsBs2e) y4hxtXzB;y+9oIGE)7C>%hw?&5S745aOBZw(PApIm`tK)Q7cWH3=~O7syA8jlPL(+T literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/lbu-riscv-tests.bin b/bin/non-output/riscv-tests/lbu-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..e48e46848f28b9650ee8f8f0372199539228eff3 GIT binary patch literal 672 zcmaixPfEi;6vn^F7%fHV&?%wTSmGZPcR51v1kw`}X6d4}S!5g93kb6)h>ISfM~K~I z+anabKn@_SZ!$5>&cHD6z2E!hdoN1>I>i&u>E=a8vjECZZkMH=KJr|UPBj)ni9a0= zJP(Xcd<4}?f{MTAd1!oye}U>JL#u~(Jl`Iy|JeBZR$t%nd`G(RpBn#44+EYTMkoK& z_zx<6Smh-C-T3#dj%%G_zu3UBZ>*p`W}dA@S2|rC7Mp1`#~SK$*3&G5bO6hUOEahB zXXQ-FkGs<8LOTJz#b~eDw!x0QlBNAvzMy=usQKaON3&gnk7Ui)J%Ad-=XH;7dWuGm z5Y^s0%1hcc*ELzdj=5JCk~}R-IYiQ`*)q3iuvy!%N1ihDlardK+)LVroC_2rCUs!XK ADF6Tf literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/ld-riscv-tests.bin b/bin/non-output/riscv-tests/ld-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..9af38b6f932c0c82da751490ad4fb2639446a2be GIT binary patch literal 1072 zcmaiyPfEi;6vn^F80|tZc52Zg8dO9DrJ{%^Nc05a34~d?@J|-mhUNl=Sybr8BdD8h z175%*2wouIR*Y|wY0Sbj8HN{l-}}w?=FI?r3USUyz=)?9MqhJEai+?Vxsc7^WRPjS zGd>DQ%hF*al3Y8EJW;F*xf~qj+VGUPjI_iZYs&ErD&nbPp5`AK{xR{XCMEtqUX-r+ zf?}7Di$T|%b3`>i)&8$Fe=pa@2jnTO_J61S@8nwS6IW|%{D+#qW%#@1E^GYvwf_xs z&bA8i6TQN!?%@ft|FCBCn<{)yqu1vNb9jb)d{|K|hOhurx2|U=_>8Wb*puw|9bq-0 zEEk{6t8c~L%beAWL+>GHO`er(`R#(`Xx2xGbG_=^R>TqsVP zxlFe1tvuJ8&T^Vv9R>x5){dyn^*3Ut`A+6}w#f%)y+<)Ajiy6{)N%pQZA5 zOa22D$Nb_GgL%2;lv^}@bw^uP@tKi=$@lkWyUxG(r}W`(BA&YaMyHLlVe8=Ca4)|5Jx zpLt>Dzb0#FcDG7X%|p)brsi6+GbbRI4Cu(ugMwf6V@2(nUu3Wv{Isq3m8R&$iCRs* zkn`c|mn-^dz$WUykc;?)_1_JRty=}A&Z+UK!odbp*rtUA0%Dtxdy3GK55+Z2yvcnb NS1#|Y+s#y6U4KqIv1|YU literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/lhu-riscv-tests.bin b/bin/non-output/riscv-tests/lhu-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..9f50497f8e3b508846db9cc5e39fe686fb815876 GIT binary patch literal 736 zcmb7?OG?8)9LB%NH24A&n_5bZHNJ`>LXS{9f%F7{S-P;AMYh3SK$t}ZH#tIg-R20| zO|}Iu5a?DKXEMnoTSLOYeBbZ?%p3rZa8FZl(#+z-1M7yvd2t`z(bU6|5`4~R#>oh* z7hWkXxuxkCO9xWRIT?fX!waS1hNeE28>wx;$s?E>dP<9jG>vnW%LlWod+(a2NnYog zg0;heV*E>*uJbxq1l9@NGTynYz0UP6>+dTqI^z+xvlR@LF9!Q~?I|re<>v2pIPl6C}kc&67tgH&~2d+D`UjP6A literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/lui-riscv-tests.bin b/bin/non-output/riscv-tests/lui-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..109777c9773241483ee3a451bd986e1392d264d0 GIT binary patch literal 144 zcmdnaz`!t>8HgDb7?Nidux$VE|NrC*0uDg2hRKWu49OF~V)c_RI5eHY*qq8vPc0#vX}vbFslGVJ_7@jFe?L)ZeT1HU^oD@ Q5(NmevNB`?MS$uU0O5Hfi2wiq literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/lw-riscv-tests.bin b/bin/non-output/riscv-tests/lw-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..d341eda284a6cb1f6edce87129b30954e67f862b GIT binary patch literal 736 zcmaixO-jQ+9L3*ctQLhPc1j7Q*7#Ks5qgB+38W_wX6d5UE@m6r3kb8Q(2ct3)?K$b zLXRMLfk3y?_@8`Cvopygi}!x-|B*QW9pR2IffY}&m~C9m0?3Z)&oeE&<;##XmM&&I z(QE+ORhPLI-SB0El}KFDQq4lho;uI9_?jFN zNm^NN4B1k>qL&NGOn3Dn$hPVhy_{t;*m|#!zUma2r#ixR_6cWK^BwZ-#V_;|9j(*Z z=eRQGm(kmr#SjjV`{It-h2RHvX4#&!gwup}0{rxbznZNpe)yT6_Lwn6Z?Ze_EYmg2 zcZCUCmMOVn7t)(FEY~qyQsHoHxNF!8*ViN+szR*1Z8LbvZto1TYol(SMlS> z_$^cRVBxlb+t!`G*6+0%%T$1x&V{om`vlXPU{f`oQS)9|sUM4P?X>>x`(tN_U+1wT`yjmQR&ZZSwuumn2V z2sXeH_$j81M2iU5NpR*xki<@L&UcS}MgS5NDTN>oN-0Mm;$OAmI{IL5usyz4~eBtpw?RQ!$_r_6ihYN@#~zC*ZHyK`xU=d-mRH`Y588|S)~}C$tz@ihFh4M^W{ok zq4+6JUQd7M;ST2Nyh|d5mO$wbd$u#Jrd=n-ANpE$Kr+Bv|L}vv(}X`>D*W7c!8E!u z-C@VEUCTaCu;HR(9shq<%+EXCw|q9i$A2yV-JR(~bI#j7{3HQU-wU4RjKbeMqaV#U zZrNtEC%IY6)ok;8(UfEPek1OYE*_@Ui-Z;dNbwSZFbik0)a0K+vooDOusV!CfNr&M hf>i1j_#et)8!20VeRQjZV^&Xi<^0+$^D>XW>*Pz(!?#&_LE`(gLvXEfF0}Bb-h=l|Z3#-VK7PleAwt;+s;Mk?P zk8qG;+lXJlkC4N{cI8@OeKVVZ?9LNTmwU7@H4`6&C8$3?W7qvTrXT9JH*Ac~A8WIv+`Sre9u29TZXV~&#F zQ$%(DGFmO}xMl=-mVL+(nHsg+K+Owy{RP)(jrsxZDN;1n{^R@r$9n7Im_U9_-yPBn zZ+)5+vORs<)U3BL@`|}o$}sbs=Gy;_2!Lk&KEDX>Lj)&KK@Yz=@Bg~~r(HhO=aALG$|=sl{<#bNmg zd6GTzu~?3phv~&~Y#~pxr#=p?t>t4`yxA0xarR`NWv8#535Um<4T$&u@jj2`@b**V ziHY~Wr?s}WxpVF;oO7+;-`RQ8`nPA@;m|X2av2ck+phOg?V9Crd$GBUNVc=neXZ6U zW%1@RCeAnZu^7MIIdXWsxlBlQvxm)|s=g|&!#pYRemrpc|Lnalc>dFS_KqChGIz-S z=6+jpzSCem0aVBjU6cHl26>z$d~YY07ybS@UG#^1&sG25Fn`MDYyi=UafMMJTHx;u T&0=hLq|QgQTKK}hUh(q}%ca*M literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/ori-riscv-tests.bin b/bin/non-output/riscv-tests/ori-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..057e52ed3a005df4db7afbb9c49c6fa882342a20 GIT binary patch literal 528 zcmZXRF>1p=5JmrLQ4&&Qh1M8jOz;tW1Ro*f1cohBSfE0s1-gJ>N~g#X(y8?kas)vN zw+rf{{1rrzl47;P?EINGUky}$F5&Ifd(k{<3%4mYP2vsny}iOTmT{$fQ9HQDV%?y} zx%7sbtkI0C?j&jtm+;LS&o>OZj&ao)QBQDbv1*{GOT5%j!kN;tw`Q)gUPLPyW*p#N zvxSX-DTCFwuu%$$w)k8;fBiCLaEm-0>L*+lz)X`;GqRR&>-=HROn3*)UtL1oxJS+X z^ZS2nKU~Wx*BjibxSMf>-t>982R)~+@4=s&8BeGk>S4zEu*1l53H>8Ez=-BiA8>UR mjsK?g8S@a;(jR)X+`+~Pj@T<3gZBk_!cUkH$9Um=waE@s7&2jBPo-uLeF003kJFI+avyhwo6$8T$x zNhTm@gvSG|KX(~GqI3s!^e~_FqeAbre&zW(W0@D@jDdi!zw`W4&%!xv2-d!oPDnq{`sA4QNZyGXt3S^59%rQQ7y1$H;k_sQ3U%7!obDuM;c4r1zq-!iSMDX;c<_k#E~$@bNg@|~ym+F0(O#qyxQz>PX0fVjUf1Zu_IZE=Qsn#*EQVTWu09Qmcd$L=o?=L^>7mk!6ei1jGGq8%AZFm6-UxX0RLjSEfIQVSg3FsjTx7$L^B9U}4dp1K1xg zbFMvkFtBm2x8H9i@fQeIeQ<3Dx{y{}Jnurg^2UJ_$Nl%?+BUpKx{L2m^XPGZ0od{K ACjbBd literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/sd-riscv-tests.bin b/bin/non-output/riscv-tests/sd-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..85372d8092e614f4c3bfcd16e8e5dad54121fc9a GIT binary patch literal 1760 zcmb`G&r2IY6vyA}HlSi5n-L8vvSvk!2iclHinI{1hf-+KS}ESBMpYQv=@4Q_F0Peu^ zG?|4yG995BAylp!u4^4eQ3urpaMfAJv6%?xD&caaxUP3_qJtH+=T@bT^DIpc8)tP6 zfRat1+AgjnZ)^!Y2lWmcXZ7m9SqV6=;;QC3F~RDxpLn|PwCS%^Ps{td1!G(KBu$^K zdNl9r7C6a(6}KPyejlgF$vMA4|Dw(s7-i`fbx+Ru4RR25)`62Lu=?%$zV4%@-$2jL zb4x$P{!g1e1DznxIpOcF-}lU=d2S0mXk4D>qVRXy_jj-9?}9wb(kJQ$_kK~Hj=2Af z@AuB7d4}_JS)Q-O{g3;)lj)a3IG+bARQrzi@}@#H;d?se-G6qTzJgQ3OepLF&g$|I z&T4&y^JBalUg2DLpGkQ$z~(v0gY|AHQ^Q0&X4mS$*Fcut%s81FqP=* z#sz!ivxTcUr&9LV-4Ve`{)Vhg+$x^4Y8m;Vkna}!PmeEt5&Vu|{QASjO<9|`B|Kx* z9V=$*AuDSGk^L6GcIKSoMw8u5$l9i+VBd;c!gE&IK)yfZW$mcPAMFdiAeg2`b^v=v zKC8ILc+N@%~UGl!)K3CTu=a@#Aw}J00X;|HMSIEh{%@&Tt-6%1U^E?N6Q`}?8 z1b&~9NT~&cPf}2mAK&R&kF}g8Y?`m$esL`L@8bYZ@`s5VPjxoy2!W0ePGa se@>CNx=o;wC@erlr4hh2qb^6Gf~EiYM=f|h_-~Q+G7cngI4gdfE literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/sh-riscv-tests.bin b/bin/non-output/riscv-tests/sh-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..057101733970410525dd23efa9f020342bbe307a GIT binary patch literal 1264 zcmbW$OKTHR6bJBgXPQET$UM@AZPBq;P*60Q(kb{#OA$eYs$U>7i!NNW)WvKkhVE-G zn1!e*MTB${>0%ZwC8fA)q0lc7?B2R@CmqkZcXBi0&Xg>sbAIRk&zVUb07L{&UDn9+ zRS(QMUYm`)U>*b)!#TX9`%nC@NixP*gTJL358|yPd0#Udf)ybc4QEwd^w_sgcd@R? z*RbwO8DjTz7wejWl_3}k%W1zy{yOzr2QH{z1>z0rw*i99L*RrDR9$6G=KA2Bne|4Z za#iU5z4ZR9&h?RM+DR|h66K#(b)AR44Ip!UqPk8Jy8tRzMER%Ee)n~*bQir`tCW9I z)xll=*`zbZstfKLIOEoYQCkCuUr^85f?y2@R+sOn+VZr2o6fEdh^Uop;Jm{IfNOl8 zsyPP4C20l(YeDdC`KDlPyobGxa39gp;V{Em#!B3>!NiOBnD%sh7+B#A*Kj}>9-NFm z|1H>&a&74jl&jvtF@f7;FGIX9?E&uZnzkckI~m*FQFiY-S?L|}GpXO-L4QU2A@VJfHP8IRT#C-L)`18{dz-Hskb+ zDjCDhD}%d3%hMeT(_*-ve(mI(OBq+qQ$2m-BF$@o-fxL!bpgGhJ!bX4;k%#v^`oA{ vj4LbsTztmgQ4!pn1&a{%x%mG@fWFrjw6X1fecW6QUZKQ3aJu{NU$*HVrG`zt literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/simple-riscv-tests.bin b/bin/non-output/riscv-tests/simple-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..aac87a9832e6bf51e9d8f9ee24527f6fd079100b GIT binary patch literal 80 gcmWe;Wnjo>U|=a0U^u`)CJ<(2Wyl8V1)9SE0Eo;2#sB~S literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/sll-riscv-tests.bin b/bin/non-output/riscv-tests/sll-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..ff61ddccd4254133f0c86d9685f412c9352ac6ce GIT binary patch literal 1616 zcmah}!D9s$=7{2z!B>ON%Xqd!!0%Fgd+^1?3zq(4>95aN^B%=(gU_0Z zg_~V0G$$0_9egrzJ3B`_rMPY5_3U4oM-;CPJ{o*A`*;ETMEdtk+|15AN;OZV|85p; zY>ZRCZD(hjcpe6A&2!0raCyTa+u7b84>#{?K9T%;mp5Fp;0BL}dZhI+>7fTra+&|m z;VN!+jy{Dxh3NCvVJeNj_ktmnzE9{kr{dw;CPRo3@$y9ox zXTU^K|J3wOXf~2vmEGIp_($@@#G&yav?+Hl;dt#}OH&6}?3|ZE%ar3$vK1)oX1UwO zyTH3nfohXhA)T)D&Q0GD>idr!*7z3?Q3K!Zott?R=+}Sb@W#s$f3e2zox3}j!k_*_ zS66Yed{!-=x%l(I;c}ARqT}D(4VM$f{oZrff-R2*9^4&|T>6J~jc~>-Ht@AJh4f!< zVz1y+YeNeDt~Kyw|4JkKt_?oE!u_mDjqnh^8eD2!LWTWaF}U3L`cGXt3j5hM*n-O) z5FQut4IYv7zh!v{_7ay`mtE<9({i!ctNI(C_7v`a$?_4Lt!cb#gHNLH|8os@MBQcC zYw+O|`W_%gs(XlMk8m#|=y#xIe)$Z{M8!vm0w#L4Omv4i?V1}xZi@N@|DzoWT0ZSl Z+e^j)G-lsjNLV@(0?8|%rR)|6X$M2{Vdj*>7^d#hp;|7?#0xG^Xs$W zu8p4;)8o8Jk8cw0+i<>V)Voibg`k^7f3dy_^-0jvs@oGYTJhiW)Fr$_ce@fkRFRn#m1 literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/slliw-riscv-tests.bin b/bin/non-output/riscv-tests/slliw-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..17ce471304e0917994beff67aba04e8f0be2d172 GIT binary patch literal 848 zcmZ{iK}zI66o&s-u^C5P6qTlFx<#Tb!!Qg(FFZh_47hCc0zxfZxG>O*xD4b1VQRod zV3;G!uC@U$;1L2|Ansh*zDij{otZ#L^4FL5|F2#dNK9`46G<3Kpj9?EoyOl$!rB~q zoPG0J${IEeEueR^uU>0lkNJOELJx!1l8ulXI)|QQUkuu{_h{FKQfL`8=h3j1Lyxl0 zp6fgw4VBP4*(a~D$L*TA-!9*a7CipAdI;x7< zfuTEBKk3&}SW}i&5pjQw>u_&SZ?{TtcxJ=4`OzD_GRzjE`b$}lrY z`e&+Q!L#b-n<9=rAQlQnB)A`)KKa=uq~%KXT!R>R%MMSU{LJU1C#&tAZK-45^NRWI zJS<47)mG1QhTuOA{!8}HHUs18O>a0u;5euEJ|~{v#%s>AoFT9-XXl%``G`uk#69v^ v%}M{_eL+jpvVPG@(!-R`;T-Wm;tI8h2jJ&ItR!lV@!u;R3~$y4aMB; zTg){^tY6jZeRHZOtpCCA?Y@6CrmX+o)T@1e&51u@{eh{U-*?LTgDhBIA1AV1@11SX z`^ax=oH5>axbcwfY;TW88=D$W8Gq|=<0aE+Iv#nHL(cdchu2x`?rJPRwd2#NK7w!`ykJ^Kn#b>h%r#oYC&kCgB8Eci1Y zC;cs*&Oj&0zRm63R(m`e?Ne@o^q*bkg=QAi%MHrs8|5b`pQl-H3$D>SHhQ_B{yomp zi#)5Rjb0(h-yt?#g+LP{~88cZo}L?j=aGh3b3M^##pq zIq#;YzIPLR(FQF7_`NhZGrB3QA3k(k(_bF|8vOR)%qQFE?=YV|aE}^3Y#xE2`?X|vx#{J#d31Tc zq~R7=_MJUkKHTO#Gawhlqd<(S~=GAK&=d@lT*1tjD zHs~$#43ig3$loE=K=h92-2*}2Mxj;?#fdE6i8B%EI1apFfEOpan4gp22niD>9hV@`Ht$;)s^*XdqfU-9~D-!ENb-8IaxeAVnt{cqU+ zOZKBhoy@gm|K}F$Bjm}X$?7_+mKl>kl`~4HzKY!*~-;>Wo^BgJPW1jQ5B7gIz zo?m+}fj``%LXW91XY(gVJ%X1(&@Ke!`#AN@KAfMxM&Fg7{2qC>c0QcvLq7Um2s)pU z=a+sy%J=WuOF{SN%(DGJo#yc!cZ{}+^2@g|whE5?e8jZ)HmT3wp;nbXVas Zs*di0{?VB$tZCH$`sr>LpNOP=_yZ3%8ub7G literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/slti-riscv-tests.bin b/bin/non-output/riscv-tests/slti-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..20e6eae40b1a1508b5eec062d9261826fefba9c4 GIT binary patch literal 720 zcmbV~F>1p=5JmsW76~DcMJtRk#)uG7>j*xA$q5WwrtpG_Eu$j{7Sg0qr`DZY9l=L1 zH|5A(du|o&XDVDf<~FC1z4mm9{*NeR!+uI-D;FJb p2Ho3}sRzBHeva-rhlw?IXs0Fyz1P!1qovRK_haH1@8sUm`2}-1qlW+h literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/sltiu-riscv-tests.bin b/bin/non-output/riscv-tests/sltiu-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..1edad1d5b30ac7318c7b8605d4b171ef801aa035 GIT binary patch literal 720 zcmbV~L283Q6o&sXk(N^E;E03}f|Sy=N5~OEPY{@87ZF^ztVa+Ay6GlIaOc(|d%w^ApRR&cnrmXwQ*pp^WV7mW_p#nwhez;?c9@+8P)3FCUGyH_FDv zgXbI8W*=kzVywAketGX1?X%lz;;wz}6!$atTsP&mr-{AxnJfMufy-n+(s!k7od+$> o;JrPWX53rN{&L=P1`}%R(alW=zBltiqvKfreoPqRo$fu)FCoUI7XSbN literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/sltu-riscv-tests.bin b/bin/non-output/riscv-tests/sltu-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..141c2dab32d5b4ce646ce93bf1c44584269f0c1a GIT binary patch literal 1360 zcmah|!HN?>5UuJM6c5sy4k5T<8ALpYht@2vEFy!5h=>HgAkaq-J0XX;j(;%Fp4>}5 zAeZ|FUUypnPzW%-Nx*ghEGA$^`Bw{)>ateX zU?kTy)w92KN%#~@KmTGOqq?r)Ct!y8XG{ENDBu`xx9aG&HaF$|r%T#n%L=m){dZM5V$j>^M6{`%{rW(fQ`BfG`;+Z z$5u{<)4Y$5x=W<|Pdt9%{ZYP$xfe+Hf8?=%j+d}4Es=Xk{_>&6m!6xm*yne6KC>0` z4;arFdY9PH5%X9hz0dv*SF|<6JT~l4?y!m1{m(oq&hJscvp0V44IPmi1o?Z|#A?Ui zz{fnKAb$_)c+Wp=^2a<9=D%m5+KylH9p;R*Fuj?tU6D3-_flboGjXlM|A{bVCM?hy p;ReU?txRcu245QeLI42p=f=@7!YgdpOKm$$KucSn=MofF$j>lQMQj4PosD_TJg>I@ zK7T&@O*~~j3fy}nmgmer1nzy%@)PFo19x5mEMG8x7r1i+Fu3INzg^|W$K>7fZZrBn zQ$2$P^EZL-+4?MLza&9s6XMvYH?%WdQPXe#D;Z8?L^YNH_s_6dC*7ZE` zU8DY<9@sja^_=TGA1P{ibYOt9lIDVYpQHYk#!3LVeRzKrT?ZxFV8j4^b;cW-Q(AvQ z>!*)G*7i{WKqKGgJU?$ie$$5`Z~I#3FRqc}jh)ja>i+aWSYz+fyL6pPfqE~yA95w| zzO{S9n?2S@_j@m7D|8NxJb7D(66yWw`#if+e;ZlflZx+WznQ(l#rFh+?q|J5zTSV= z8|Us_q@ew~oM#8VqlSm?$3W2g)v>wK-sOM$5eqt>wAl*lduNA>dGC-2>fdeWz`08v zz8@n#-%aP?vRCbGXJo?XyWw0o=higN>0MIZ|C)gch9CV5liv~5Kn%};=UULL3cYtE z&PMfrn)8Lwr>US!^7IbCUBrAy?~8p0mb5+v-Hk!DBpgB_R14_0z^R0SlrDW#s|8=F HdPv{DQCqD8 literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/srai-riscv-tests.bin b/bin/non-output/riscv-tests/srai-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..e4947f6e7634371ebb68bb922a72a8b5d88c7796 GIT binary patch literal 784 zcmb7>!AiqG5QhIvEQ<87bVCVJN)Zw9RPY7XHz+rke z#PQxVbrlb-*fM|Gd(06Z>gsN8#g6&Mz2|pPS7vEN$NWj}g?&H}U&4HL>;8%MAcc9( zMk)eWS8b+Mdfv3eAxS2 zY3_d>Y8*#kNCU%y`Ol6S?$r`U$T?P?zohxaNyxeRoOSu`{+J(y*_ojGM0TOIzgH>D rO9l%WsqO2xwkE!e?l^}UNIU^2Y5;ndaW2tN>wi6JFu)^KP#=5&)vWKw literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/sraiw-riscv-tests.bin b/bin/non-output/riscv-tests/sraiw-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..86eea84ab6205c7fa3a51dfe6df586cb0df433c2 GIT binary patch literal 976 zcmbW0v5M6|6o${4+>5Jh5t1c@&9Vd)5fKS`**fA2gcYnWOtFQ9fm@`VB`**hu$g8b zVY{>eU*L9WFZcoxE1P>gXT~w=TA3!{|NlAX%gIR(pt2FlJ^-aL2YJ$5^i~U58#ERm zPn(s~YSs=KOOT=0cBJh|t3W2rOU@Y;LN-pXbuf{>=JSQqr-Sch+Hd65AkUf?vuAsj z&Ql=Io9DA23h6 z)RpCVyNXQPUJ;L=_dCCvDa-!NBbveH9dQY&f7<8w;U9HAx;i^SeCgect@GX0nFPIG zV&}EBGp6qnqU`D<767bgV_n92=Rj{E!GysN+R zk?&n2&39oczds7)r+T4b!fZSI+^LTEYGI%T-Bm$0di@6J`;k78K43P|yzPH;i}Zid g9u^QUL-+t{5if!6u-Jq!5c+>z@p1|8=_J*GAN<@m;s5{u literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/sraw-riscv-tests.bin b/bin/non-output/riscv-tests/sraw-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..1b10233712935c32f44155fc1e14e87f34aadada GIT binary patch literal 1680 zcmb7@&uSA<6vofF)8HRO#!LyJmNKZga3P@<1tT)3h=@q6Qba_8chQB5PRU}nQ|1Lq zFSr>Od4%q==w`qdNLOwLe1Q>HZW7O#n|rU*KMMmPw2F05MYJ;4CPg%4MDb( zk9;OitNFjr&$Hj8$E<&Fy5)$pp0fVl>6QnzzR&uW(+!sZt&drM=XApcpzx6Izd1?w z_K3S{*)sZ{1zm*&>jS4R*uED2j#BV*RDl z4I9r5Py!H_PU;{@m%l)-7Ae`ZK4;TK5cFkM$=`FBiIDi&&4GUd`Q32T1vN zJPCiz^K`JG_6tyHx^3t8cB7qV**48j(ET2r_C-27PjAu=M_V*ULHT(&2`|Ap{SI`$ zQc(WxpZ3{)e{{b}5Z?yxJfM6XP3ydK7EykS*L9tCam;njZ;aC4U01+fpK{CDNKt-` zdw~Ejefa)?cL4&?1|>rHxx6`}_lVB#)A`X|=hb@-0HEP-v!961Z>8-r#1ADbjv!IB$i9q2VWP%}^rEf6e-t zmFC;<+L=_GpVg-K3>G^R5OOW)HvDz}#cT|_W$^{|@35a4ct;HmJC9J%`@gJxrQYSa z^XPHDeC@5U-a9j#^jn6A^L^DYu zZ{nJ={x%Eu_J}>OY+0MWQyFNSvHqsg4P&Oq{v`G8YMirvQt5^BlD;3)Wv%x?$8FfJQ*-&rzkpb=hCX=Cj_bbl>QXEoA*=rAJ10Y#r8LRC;c7 z$JS&0d8HQ%KHsqQk>=~!1Zbwl1xo7U`MjJxnuj5(U(sQuQO*~v3Cbx#)jB=UzD_- z3{Ot=i^EzB`>FoxXK<|w;*VSF{taBNRv^@Fyt5Wlp0li(&Bbx~g6{V=$1scSV~xqx zDdhc|#+y6uTFzy^xlSEH?@M6(1=_v;U8kO)`Mhs=*lXizOm3$7%zw`^t@_uvT%Cr3 z`gg~2S)PsOxH?6G`ge=oBj~<&^H2Gm(i({F1>JiO1kE_{pNjK-`OWhy)Q?Dzr}y*$ tz(d5OOZUy(pDD#h^p12uHhlOFi6$m{IEg^^=VTd?P2t!Cy^UnWX># literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/srli-riscv-tests.bin b/bin/non-output/riscv-tests/srli-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..93742cf711ed74c354613275795477af5b2e494b GIT binary patch literal 848 zcmb7?y=vn?5Xb+cjqj2a$D%bNm|&E12*+_8egt!AQW`%&V9OK{xKJz53mE1)!I4Ku zr`C_)&aELYAV_<}nbAl5(M2F6=J%h`Z+BG!nOg&;LB~sFmM!3I$2yl$%bwuFG;aEi9iHL)>9CBiuEa5{_huyTxeJ+=>UX(g z79}rik()E775qgy*s%oV?H?5R=$dH*KS(cjY=bg~u-iMPO4k?dSVe4P?F174sDPZo zLTW3SXCQlM$^T9IE|C6~xpe|(zQP3|IEeAmpS?BNnEY^V53?IM;4mL*K9FyY$w%{V z`+089sqQ)M8_xc-{v$LYKbW8I_tj3FPt^HLWqx{kkkgrKaq6ibPqG~{}M24;8ss?-7XT?f?J) literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/srliw-riscv-tests.bin b/bin/non-output/riscv-tests/srliw-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..e2167450660024ee6afd51d30731f204ec403b82 GIT binary patch literal 848 zcmZuvv1%JZ5Ph>}VJoCq?t~CNBhHZtAs8cqKS0=xOJPH5!xk=53-<#e+XN0m zKEd6!`UG`q1^Iys=`GLPdULUz>W(*W-g~n%HDJ>XP)D$iG8kQas#{D8HghzE85UEI z<${r;8O%{}=CLhf3XbM5vBxT_k!~7tk!Ji>`cEC2o%pz@**VIk|D(rRA6u1w7`Nj8 zgtuPG<4c%9@xk-OZx0^-2{S6*dp!8v!;FiQIy*k*9C16_g#XJVcC-@xe`@UQmbxmV zzN59|f7kV~|K$byOimna#Xsw6oS_8QF0ULlGT*qXNe-TqK<2PGsE8vQmj9!vp)W#^UdpQ73Uki=CnF}uhS@=Zy-CX z*6rK!9yOWod7LO9>^F(_k*F9>W%xC`e(?Lw$P5;`<86@uc*Y$FSMFd+X1sVCxZxIB z{>vVH{orq8Ci-tePrAvw45N@?PMrTBa6~WNaE@nL#s8N5i@m@T|KKe*`IjFD@0|F3 uRW%QLvt)kc;G3d!y?WZ^lJn)f=P8n&##exn9{6jq&{!qC9=>oM#_U=yAwi)Axup0;6auU6kL%Z5eXu)MhPM!3w_AJLuT2-TnFX_ zmNa--4|#;#=8(%i!sg_4z!wFUk#)|c~ zUbk#O^#P>%?0XF^>;5=4$@&|wOQSosi1pWAPmJ!^I;`({y)?RGi&>AoUd>GJn5~C2 zAFqn&&upCacJychI?Ik+{XXur$9aB4^%Hcym)Cu**0%+%>jhQvavTRu+7#q+b)^xnYYY661p?@Gg8=bzWcvO5+jDE~71nSp!M;BfVbgleZt##fqN z-dc|i&zCgb3hTZz!&SdyhOfYN#{l_?zFd-!O3tKJtPH)Hb`~%gqoB#j- literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/sub-riscv-tests.bin b/bin/non-output/riscv-tests/sub-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..4d62bf69e43f7f21247cab1381abfa1499d7f821 GIT binary patch literal 1296 zcmaKsv5FH>6o${aV^A#Qk_jQ`5`u_@SPVv7v5-L)5v$-6EZow<2`Q#@LJHf!wKB~< z!a|C)d4xQ|fG;qzz2o`s%-qau7Sn|M_doyr&N-8@L=-a7^v5K&0g>einQ{8rk``UJ z^oUF!dL(*M>-*AjOlFvVvXXPYEKB6+x=d7OUS5oJyOE}+cvCGszzxBQ|f$iJv^ zh@SADI;$)d1Wbg`g93B5?!+y&m;J^nQnH*=4TRxO7iL)>>&*9Q>gl6)r5WzzWl9n zBdK4!th{wLyy&Ct@57J#Vm8CYi^^YAERFwmjYdr@H8VD6i{~di4a=}$xnwg+pS4-Q z;n*9m;|52|3D32%94RxJt1Y?T z;)#`6CrUgVa?VrtUy(j|Cif@uKazJ-Pt!M|AncKRXKJBoFRlLf6ZU%aRUA@B{{YGm BJk|gJ literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/subw-riscv-tests.bin b/bin/non-output/riscv-tests/subw-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..f738c437ec05666729edbad123a7f684a0ee8d1a GIT binary patch literal 1296 zcmb7^&x+Gf6vofFnWDImOH)eGp#%{Z;v$GRgB1xPgSaX_!N6U*Fr|wuP3gjI;kvS$ zd4%q|=%$a*M+o==5%k(NF$PANDmbB=) zrH5o5B_Az?qQ|wqFDyr7#>thHoQp+KAZNQo&Xi0)x!Mw?P5#!S)bcg*KR|E!MURpH zzRDqb%)jfbqF66|$xBg>(6>(WqMf;3{t=E9>hGHR#iEn(&GHTEZ>#%uYgPUR^*6_U zH%nUO?@_-5pU-*8W<4!j2h9K45}2BOWx|tT{#tMR*h`N2Us*ax&W3g=_8y2%Y<|Ws zEoG%XSwIg(*KEeK5dK}Nn=@kbBMyBfd36rvl%5%+brNH*&A=k4UU*) ze^1&RCG%~6$qj~-<$T7D0j#p$(`@W|#b%J4JC53W!s2#vBl9IA#{&Od`Hp3S{2}~c zz!`No+&=bfbTT;lvNE^hb^ADAK7I7c+0+~zzhlU-zlV(<-V+Y@jO3W_LDzc+i`xe& zneTqvU*+fBIUS2ul7A-Olw!hohI2WCK$-qbG*XiV;kj0pLuE!YwWIRCcp_z1u@Vpa tobjZ5S7Z*J%Kc+`kK|j_)AW_-%XOhfrZw5k`d7t0=KJ#RD0l@d*rA;EJ zki8-eO;Eo8#A*ZqYZiTCf}^?5c7@J+VgG=rLP$vWxvmaz8=`=zp-(JuCf$`(2hZ(N zSVUb!KXIK0u@M$g7x|>ME@dqyvDg0EQ&o!GH(^vjFy}UcSy2g_WA(Z7)jY$HSjP;>_hXsRor6+ zLH?HH#q6y?ekk`GTU5s$AoH%_ni+sR-i_>@BJYe@U=%dighVw8fZw{hqd|hBZ~PdA T0=z}_CceLae*1NkH*fwAFf&)h literal 0 HcmV?d00001 diff --git a/bin/non-output/riscv-tests/xor-riscv-tests.bin b/bin/non-output/riscv-tests/xor-riscv-tests.bin new file mode 100755 index 0000000000000000000000000000000000000000..ec732700a891a655733abc099a50b01caf140ec9 GIT binary patch literal 1552 zcma)+F^dyH6vzK>*Pz(!?9CzJE`(gLvXEfF0}F{(A{IeJEDxr%a6^i17xoJT$1WE4 z5e`ypyTQWNk0AI3My?g&o84^4?oOgdv2+p4xpcG@3fr(=Lx2TmS5zOchVx#gp57o*v_|KJ3iY`_g3jVdv+Gi>2bI zX;?2ij-ODc@naWP7nv+xvT4jhg@JUAH)jo-}hA5$D^jdnsqF;%Rx=S&6A{nHy_WwMf_G@MZwdE*cBk5h<27^p)lOS* zzB6w%;k{DqmTOX9A}0&tM-B$j8!~7Ayvk_!R;1d#GcEDfwbAg;& P`d>fU>EI)uD?E&vFYkN5R!!&{I2xR@Bc`q$VZrup-&{F)7hjzD!uUBBpWf#mnF7+pT;c=zTt*fl2T7bO jzvqAW37z?z4xmKgh+a?vz89iW=()vmQIg<=pN?EV-YTq& literal 0 HcmV?d00001 diff --git a/build.sh b/build.sh index cd7eeda..2cee65f 100755 --- a/build.sh +++ b/build.sh @@ -1,11 +1,11 @@ #!/bin/bash -VERSION="1.16" +VERSION="1.17" help() { echo "Version v"$VERSION echo "Usage:" - echo "build.sh [-e project_name] [-b] [-t top_file] [-s] [-a parameters_list] [-f] [-l] [-g] [-w] [-c] [-d] [-m]" + echo "build.sh [-e project_name] [-b] [-t top_file] [-s] [-a parameters_list] [-f] [-l] [-g] [-w] [-c] [-d] [-m] [-r test_cases]" echo "Description:" echo "-e: Specify a example project. For example: -e counter. If not specified, the default directory \"cpu\" will be used." echo "-b: Build project using verilator and make tools automatically. It will generate the \"build\"(difftest) or \"build_test\" subfolder under the project directory." @@ -19,30 +19,22 @@ help() { echo "-c: Delete \"build\" and \"build_test\" folders under the project directory." echo "-d: Connect to XiangShan difftest framework." echo "-m: Parameters passed to the difftest makefile. For example: -m \"EMU_TRACE=1 EMU_THREADS=4\". Multiple parameters require double quotes." - echo "-r: Run all test cases in the \"bin\" directory. This option requires the project to be able to connect to difftest." + echo "-r: Run all test cases of the specified directory in the \"bin\" directory. For example: -r \"case1 case2\". This option requires the project to be able to connect to difftest." exit 0 } create_soft_link() { mkdir ${1} 1>/dev/null 2>&1 find -L ${1} -type l -delete - FILES=`eval "find ${2} -name ${3}"` + FILES=`eval "find ${2} -mindepth 1 -maxdepth 1 -name ${3}"` for FILE in ${FILES[@]} do eval "ln -s \"`realpath --relative-to="${1}" "$FILE"`\" \"${1}/${FILE##*/}\" 1>/dev/null 2>&1" done } -install_packages() { - for ARG in $* - do - [[ ! `dpkg -l | grep $ARG` ]] && sudo apt-get --yes install $ARG - done -} - compile_dramsim3() { if [[ ! -f $OSCPU_PATH/$DRAMSIM3_FOLDER/build/libdramsim3.a ]]; then - install_packages cmake [[ ! `dpkg -l | grep cmake` ]] && sudo apt-get --yes install cmake mkdir $OSCPU_PATH/$DRAMSIM3_FOLDER/build cd $OSCPU_PATH/$DRAMSIM3_FOLDER/build @@ -58,10 +50,8 @@ compile_dramsim3() { compile_nemu() { if [[ ! -f $NEMU_HOME/build/riscv64-nemu-interpreter-so ]]; then - install_packages libreadline-dev libsdl2-dev bison cd $NEMU_HOME - make riscv64-xs-ref_defconfig - sed -i 's/CONFIG_MSIZE=0x200000000/CONFIG_MSIZE=0x10000000/' .config + make riscv64-ysyx-ref_defconfig make if [ $? -ne 0 ]; then echo "Failed to build nemu!!!" @@ -71,9 +61,22 @@ compile_nemu() { fi } +compile_chisel() { + if [[ -f $PROJECT_PATH/build.sc ]]; then + # create soft link ($PROJECT_PATH/difftest -> $LIBRARIES_HOME/difftest) + if [[ ! -L $PROJECT_PATH/$DIFFTEST_FOLDER ]]; then + eval "ln -s \"`realpath --relative-to="$PROJECT_PATH" "$LIBRARIES_HOME"`/$DIFFTEST_FOLDER\" \"$PROJECT_PATH/$DIFFTEST_FOLDER\" 1>/dev/null 2>&1" + fi + + cd $PROJECT_PATH + mkdir vsrc 1>/dev/null 2>&1 + mill -i oscpu.runMain TopMain -td vsrc + cd $OSCPU_PATH + fi +} + compile_difftest() { cd $DIFFTEST_HOME - sed -i 's/#define EMU_RAM_SIZE (8 \* 1024 \* 1024 \* 1024UL)/#define EMU_RAM_SIZE (256 \* 1024 \* 1024UL)/' config/config.h make DESIGN_DIR=$PROJECT_PATH $DIFFTEST_PARAM if [ $? -ne 0 ]; then echo "Failed to build difftest!!!" @@ -83,17 +86,15 @@ compile_difftest() { } build_diff_proj() { + compile_dramsim3 + compile_nemu + compile_chisel + # Refresh the modification time of the top file, otherwise some changes to the RTL source code will not take effect in next compilation. touch -m `find $BUILD_PATH -name $DIFFTEST_TOP_FILE` 1>/dev/null 2>&1 # create soft link ($BUILD_PATH/*.v -> $PROJECT_PATH/$VSRC_FOLDER/*.v) create_soft_link $BUILD_PATH $PROJECT_PATH/$VSRC_FOLDER \"*.v\" - # create soft link ($PROJECT_PATH/difftest -> $LIBRARIES_HOME/difftest) - if [[ ! -L $PROJECT_PATH/$DIFFTEST_FOLDER ]]; then - eval "ln -s \"`realpath --relative-to="$PROJECT_PATH" "$LIBRARIES_HOME"`/$DIFFTEST_FOLDER\" \"$PROJECT_PATH/$DIFFTEST_FOLDER\" 1>/dev/null 2>&1" - fi - compile_dramsim3 - compile_nemu compile_difftest } @@ -158,11 +159,12 @@ DIFFTEST_TOP_FILE="SimTop.v" NEMU_PATH=$LIBRARIES_FOLDER"/NEMU" DIFFTEST_HELPER_PATH="src/test/vsrc/common" DIFFTEST_PARAM= -RUNALL="false" +TEST_CASES="false" DRAMSIM3_FOLDER="libraries/DRAMsim3" +TEST_CASES= # Check parameters -while getopts 'he:bt:sa:f:l:gwcdm:r' OPT; do +while getopts 'he:bt:sa:f:l:gwcdm:r:' OPT; do case $OPT in h) help;; e) PROJECT_FOLDER="$OPTARG";; @@ -177,12 +179,11 @@ while getopts 'he:bt:sa:f:l:gwcdm:r' OPT; do c) CLEAN="true";; d) DIFFTEST="true";; m) DIFFTEST_PARAM="$OPTARG";; - r) RUNALL="true";; + r) TEST_CASES="$OPTARG"; DIFFTEST="true";; ?) help;; esac done -[[ $RUNALL == "true" ]] && DIFFTEST="true" [[ $LDFLAGS ]] && LDFLAGS="-LDFLAGS "\"$LDFLAGS\" PROJECT_PATH=$OSCPU_PATH/projects/$PROJECT_FOLDER @@ -208,7 +209,7 @@ NAME="${NAME##*\r}" # Clean if [[ "$CLEAN" == "true" ]]; then - rm -rf $PROJECT_PATH/$BUILD_FOLDER $PROJECT_PATH/$DIFF_BUILD_FOLDER + rm -rf $PROJECT_PATH/$BUILD_FOLDER $PROJECT_PATH/$DIFF_BUILD_FOLDER $PROJECT_PATH/out unlink $PROJECT_PATH/$DIFFTEST_FOLDER 1>/dev/null 2>&1 exit 0 fi @@ -258,25 +259,35 @@ fi [[ "$FAILED" == "true" ]] && exit 1 # Run all -if [[ $RUNALL == "true" ]]; then - cd $BUILD_PATH +if [[ -n $TEST_CASES ]]; then + find -L $BUILD_PATH -maxdepth 1 -type l -delete + FOLDERS=`find bin -mindepth 1 -maxdepth 1 -type d` + for FOLDER in ${FOLDERS[@]} + do + SUBFOLDER=${FOLDER##*/} + eval "ln -s \"`realpath --relative-to="$BUILD_PATH" "$OSCPU_PATH/$FOLDER"`\" \"$BUILD_PATH/${FOLDER##*/}\" 1>/dev/null 2>&1" + done create_soft_link $BUILD_PATH $OSCPU_PATH/$BIN_FOLDER \"*.bin\" + cd $BUILD_PATH + mkdir log 1>/dev/null 2>&1 - BIN_FILES=`ls *.bin` - - for BIN_FILE in $BIN_FILES; do - FILE_NAME=${BIN_FILE%.*} - printf "[%30s] " $FILE_NAME - LOG_FILE=log/$FILE_NAME-log.txt - ./$EMU_FILE -i $BIN_FILE &> $LOG_FILE - if (grep 'HIT GOOD TRAP' $LOG_FILE > /dev/null) then - echo -e "\033[1;32mPASS!\033[0m" - rm $LOG_FILE - else - echo -e "\033[1;31mFAIL!\033[0m see $BUILD_PATH/$LOG_FILE for more information" - fi + for FOLDER in ${TEST_CASES[@]} + do + BIN_FILES=`eval "find $FOLDER -mindepth 1 -maxdepth 1 -regex \".*\.\(bin\)\""` + for BIN_FILE in $BIN_FILES; do + FILE_NAME=`basename ${BIN_FILE%.*}` + printf "[%30s] " $FILE_NAME + LOG_FILE=log/$FILE_NAME-log.txt + ./$EMU_FILE -i $BIN_FILE &> $LOG_FILE + if (grep 'HIT GOOD TRAP' $LOG_FILE > /dev/null) then + echo -e "\033[1;32mPASS!\033[0m" + rm $LOG_FILE + else + echo -e "\033[1;31mFAIL!\033[0m see $BUILD_PATH/$LOG_FILE for more information" + fi + done done cd $OSCPU_PATH diff --git a/libraries/difftest b/libraries/difftest index c8e5f87..706b571 160000 --- a/libraries/difftest +++ b/libraries/difftest @@ -1 +1 @@ -Subproject commit c8e5f873ab8b3a7ebb492eaa1128bb92f1acfa3b +Subproject commit 706b5713df4614bcca18eee691996d35849b93af diff --git a/projects/chisel_cpu_diff/src/main/resources/vsrc/ram_2r1w.v b/projects/chisel_cpu_diff/src/main/resources/vsrc/ram_2r1w.v new file mode 100755 index 0000000..9aab271 --- /dev/null +++ b/projects/chisel_cpu_diff/src/main/resources/vsrc/ram_2r1w.v @@ -0,0 +1,58 @@ +/*************************************************************************************** +* Copyright (c) 2020-2021 Institute of Computing Technology, Chinese Academy of Sciences +* Copyright (c) 2020-2021 Peng Cheng Laboratory +* +* XiangShan is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* +* See the Mulan PSL v2 for more details. +***************************************************************************************/ + +// Already defined in ram.v +// import "DPI-C" function void ram_write_helper +// ( +// input longint wIdx, +// input longint wdata, +// input longint wmask, +// input bit wen +// ); + +// import "DPI-C" function longint ram_read_helper +// ( +// input bit en, +// input longint rIdx +// ); + +// ref: https://github.com/OSCPU/ysyx/issues/9 +module ram_2r1w ( + input clk, + + input imem_en, + input [63:0] imem_addr, + output [63:0] imem_data, + + input dmem_en, + input [63:0] dmem_addr, + output [63:0] dmem_rdata, + input [63:0] dmem_wdata, + input [63:0] dmem_wmask, + input dmem_wen +); + + wire [63:0] imem_data_0 = ram_read_helper(imem_en, {3'b000, (imem_addr - 64'h0000_0000_8000_0000) >> 3}); + + assign imem_data = {32'b0000_0000_0000_0000, (imem_addr[2] ? imem_data_0[63:32] : imem_data_0[31:0])}; + + assign dmem_rdata = ram_read_helper(dmem_en, {3'b000, (dmem_addr-64'h0000_0000_8000_0000) >> 3}); + + always @(posedge clk) begin + ram_write_helper((dmem_addr - 64'h0000_0000_8000_0000) >> 3, dmem_wdata, dmem_wmask, dmem_en & dmem_wen); + end + +endmodule diff --git a/projects/cpu_axi_diff/vsrc/axi_rw.v b/projects/cpu_axi_diff/vsrc/axi_rw.v index 7cd0b8e..e572329 100755 --- a/projects/cpu_axi_diff/vsrc/axi_rw.v +++ b/projects/cpu_axi_diff/vsrc/axi_rw.v @@ -200,7 +200,7 @@ module axi_rw # ( parameter AXI_SIZE = $clog2(AXI_DATA_WIDTH / 8); parameter MASK_WIDTH = AXI_DATA_WIDTH * 2; parameter TRANS_LEN = RW_DATA_WIDTH / AXI_DATA_WIDTH; - parameter BLOCK_TRANS = TRANS_LEN > 1 ? 1'b1 : 0'b0; + parameter BLOCK_TRANS = TRANS_LEN > 1 ? 1'b1 : 1'b0; wire aligned = BLOCK_TRANS | rw_addr_i[ALIGNED_WIDTH-1:0] == 0; wire size_b = rw_size_i == `SIZE_B; From 911682914a349421de4d518597049e111893a644 Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Wed, 1 Sep 2021 07:45:05 +0000 Subject: [PATCH 20/62] Add chisel_cpu_diff demo --- .gitignore | 1 + .../chisel_cpu_diff/src/main/scala/Core.scala | 92 +++++++++++++++++++ .../src/main/scala/Decode.scala | 43 +++++++++ .../src/main/scala/Execution.scala | 26 ++++++ .../src/main/scala/InstFetch.scala | 22 +++++ .../src/main/scala/Instructions.scala | 6 ++ .../chisel_cpu_diff/src/main/scala/Ram.scala | 48 ++++++++++ .../src/main/scala/RegFile.scala | 31 +++++++ .../src/main/scala/SimTop.scala | 22 +++++ .../src/main/scala/TopMain.scala | 3 + 10 files changed, 294 insertions(+) create mode 100755 projects/chisel_cpu_diff/src/main/scala/Core.scala create mode 100755 projects/chisel_cpu_diff/src/main/scala/Decode.scala create mode 100755 projects/chisel_cpu_diff/src/main/scala/Execution.scala create mode 100755 projects/chisel_cpu_diff/src/main/scala/InstFetch.scala create mode 100755 projects/chisel_cpu_diff/src/main/scala/Instructions.scala create mode 100755 projects/chisel_cpu_diff/src/main/scala/Ram.scala create mode 100755 projects/chisel_cpu_diff/src/main/scala/RegFile.scala create mode 100755 projects/chisel_cpu_diff/src/main/scala/SimTop.scala create mode 100755 projects/chisel_cpu_diff/src/main/scala/TopMain.scala diff --git a/.gitignore b/.gitignore index f2d07a2..84081cd 100755 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ !*.py !*.mk !*.bin +!*.scala !Makefile !README !README.md diff --git a/projects/chisel_cpu_diff/src/main/scala/Core.scala b/projects/chisel_cpu_diff/src/main/scala/Core.scala new file mode 100755 index 0000000..8d71811 --- /dev/null +++ b/projects/chisel_cpu_diff/src/main/scala/Core.scala @@ -0,0 +1,92 @@ +import chisel3._ +import chisel3.util.experimental._ +import difftest._ + +class Core extends Module { + val io = IO(new Bundle { + val imem = new RomIO + val dmem = new RamIO + }) + + val fetch = Module(new InstFetch) + fetch.io.imem <> io.imem + + val decode = Module(new Decode) + decode.io.inst := fetch.io.inst + + val rf = Module(new RegFile) + rf.io.rs1_addr := decode.io.rs1_addr + rf.io.rs2_addr := decode.io.rs2_addr + rf.io.rd_addr := decode.io.rd_addr + rf.io.rd_en := decode.io.rd_en + + val execution = Module(new Execution) + execution.io.opcode := decode.io.opcode + execution.io.in1 := Mux(decode.io.rs1_en, rf.io.rs1_data, 0.U) + execution.io.in2 := Mux(decode.io.rs2_en, rf.io.rs2_data, decode.io.imm) + execution.io.dmem <> io.dmem + rf.io.rd_data := execution.io.out + + /* ----- Difftest ------------------------------ */ + + val dt_ic = Module(new DifftestInstrCommit) + dt_ic.io.clock := clock + dt_ic.io.coreid := 0.U + dt_ic.io.index := 0.U + dt_ic.io.valid := true.B + dt_ic.io.pc := RegNext(fetch.io.pc) + dt_ic.io.instr := RegNext(fetch.io.inst) + dt_ic.io.skip := false.B + dt_ic.io.isRVC := false.B + dt_ic.io.scFailed := false.B + dt_ic.io.wen := RegNext(decode.io.rd_en) + dt_ic.io.wdata := RegNext(execution.io.out) + dt_ic.io.wdest := RegNext(decode.io.rd_addr) + + val dt_ae = Module(new DifftestArchEvent) + dt_ae.io.clock := clock + dt_ae.io.coreid := 0.U + dt_ae.io.intrNO := 0.U + dt_ae.io.cause := 0.U + dt_ae.io.exceptionPC := 0.U + + val cycle_cnt = RegInit(0.U(64.W)) + val instr_cnt = RegInit(0.U(64.W)) + + cycle_cnt := cycle_cnt + 1.U + instr_cnt := instr_cnt + 1.U + + val rf_a0 = WireInit(0.U(64.W)) + BoringUtils.addSink(rf_a0, "rf_a0") + + val dt_te = Module(new DifftestTrapEvent) + dt_te.io.clock := clock + dt_te.io.coreid := 0.U + dt_te.io.valid := (fetch.io.inst === "h0000006b".U) + dt_te.io.code := rf_a0(2, 0) + dt_te.io.pc := fetch.io.pc + dt_te.io.cycleCnt := cycle_cnt + dt_te.io.instrCnt := instr_cnt + + val dt_cs = Module(new DifftestCSRState) + dt_cs.io.clock := clock + dt_cs.io.coreid := 0.U + dt_cs.io.priviledgeMode := 3.U // Machine mode + dt_cs.io.mstatus := 0.U + dt_cs.io.sstatus := 0.U + dt_cs.io.mepc := 0.U + dt_cs.io.sepc := 0.U + dt_cs.io.mtval := 0.U + dt_cs.io.stval := 0.U + dt_cs.io.mtvec := 0.U + dt_cs.io.stvec := 0.U + dt_cs.io.mcause := 0.U + dt_cs.io.scause := 0.U + dt_cs.io.satp := 0.U + dt_cs.io.mip := 0.U + dt_cs.io.mie := 0.U + dt_cs.io.mscratch := 0.U + dt_cs.io.sscratch := 0.U + dt_cs.io.mideleg := 0.U + dt_cs.io.medeleg := 0.U +} diff --git a/projects/chisel_cpu_diff/src/main/scala/Decode.scala b/projects/chisel_cpu_diff/src/main/scala/Decode.scala new file mode 100755 index 0000000..52dd7cb --- /dev/null +++ b/projects/chisel_cpu_diff/src/main/scala/Decode.scala @@ -0,0 +1,43 @@ +import chisel3._ +import chisel3.util._ +import Instructions._ + +class Decode extends Module { + val io = IO(new Bundle { + val inst = Input(UInt(32.W)) + val rs1_addr = Output(UInt(5.W)) + val rs1_en = Output(Bool()) + val rs2_addr = Output(UInt(5.W)) + val rs2_en = Output(Bool()) + val rd_addr = Output(UInt(5.W)) + val rd_en = Output(Bool()) + val opcode = Output(UInt(8.W)) + val imm = Output(UInt(64.W)) + }) + + val inst = io.inst + val opcode = WireInit(UInt(8.W), 0.U) + val imm_i = Cat(Fill(53, inst(31)), inst(30, 20)) + + // Only example here, use your own control flow! + when (inst === ADDI) { + opcode := 1.U + } + + io.rs1_addr := inst(19, 15) + io.rs2_addr := inst(24, 20) + io.rd_addr := inst(11, 7) + + io.rs1_en := false.B + io.rs2_en := false.B + io.rd_en := false.B + + when (inst === ADDI) { + io.rs1_en := true.B + io.rs2_en := false.B + io.rd_en := true.B + } + + io.opcode := opcode + io.imm := imm_i +} diff --git a/projects/chisel_cpu_diff/src/main/scala/Execution.scala b/projects/chisel_cpu_diff/src/main/scala/Execution.scala new file mode 100755 index 0000000..1b67eba --- /dev/null +++ b/projects/chisel_cpu_diff/src/main/scala/Execution.scala @@ -0,0 +1,26 @@ +import chisel3._ +import chisel3.util._ + +class Execution extends Module { + val io = IO(new Bundle { + val opcode = Input(UInt(8.W)) + val in1 = Input(UInt(64.W)) + val in2 = Input(UInt(64.W)) + val out = Output(UInt(64.W)) + val dmem = new RamIO + }) + + io.out := 0.U + + // ADDI + when (io.opcode === 1.U) { + io.out := io.in1 + io.in2 + } + + io.dmem.en := false.B + io.dmem.addr := 0.U + io.dmem.wen := false.B + io.dmem.wdata := 0.U + io.dmem.wmask := 0.U + +} diff --git a/projects/chisel_cpu_diff/src/main/scala/InstFetch.scala b/projects/chisel_cpu_diff/src/main/scala/InstFetch.scala new file mode 100755 index 0000000..2ccae02 --- /dev/null +++ b/projects/chisel_cpu_diff/src/main/scala/InstFetch.scala @@ -0,0 +1,22 @@ +import chisel3._ +import chisel3.util._ + +class InstFetch extends Module { + val io = IO(new Bundle { + val imem = new RomIO + val pc = Output(UInt(32.W)) + val inst = Output(UInt(32.W)) + }) + + val pc_en = RegInit(false.B) + pc_en := true.B + + val pc = RegInit("h80000000".U(32.W)) + pc := pc + 4.U + + io.imem.en := true.B + io.imem.addr := pc.asUInt() + + io.pc := Mux(pc_en, pc, 0.U) + io.inst := Mux(pc_en, io.imem.rdata(31, 0), 0.U) +} diff --git a/projects/chisel_cpu_diff/src/main/scala/Instructions.scala b/projects/chisel_cpu_diff/src/main/scala/Instructions.scala new file mode 100755 index 0000000..65d91e2 --- /dev/null +++ b/projects/chisel_cpu_diff/src/main/scala/Instructions.scala @@ -0,0 +1,6 @@ +import chisel3._ +import chisel3.util._ + +object Instructions { + def ADDI = BitPat("b?????????????????000?????0010011") +} diff --git a/projects/chisel_cpu_diff/src/main/scala/Ram.scala b/projects/chisel_cpu_diff/src/main/scala/Ram.scala new file mode 100755 index 0000000..aa7cb0d --- /dev/null +++ b/projects/chisel_cpu_diff/src/main/scala/Ram.scala @@ -0,0 +1,48 @@ +import chisel3._ +import chisel3.util._ + +class RomIO extends Bundle { + val en = Output(Bool()) + val addr = Output(UInt(64.W)) + val rdata = Input(UInt(64.W)) +} + +class RamIO extends RomIO { + val wdata = Output(UInt(64.W)) + val wmask = Output(UInt(64.W)) + val wen = Output(Bool()) +} + +class ram_2r1w extends BlackBox with HasBlackBoxResource { + val io = IO(new Bundle { + val clk = Input(Clock()) + val imem_en = Input(Bool()) + val imem_addr = Input(UInt(64.W)) + val imem_data = Output(UInt(32.W)) + val dmem_en = Input(Bool()) + val dmem_addr = Input(UInt(64.W)) + val dmem_rdata = Output(UInt(64.W)) + val dmem_wdata = Input(UInt(64.W)) + val dmem_wmask = Input(UInt(64.W)) + val dmem_wen = Input(Bool()) + }) + addResource("/vsrc/ram_2r1w.v") +} + +class Ram2r1w extends Module { + val io = IO(new Bundle { + val imem = Flipped(new RomIO) + val dmem = Flipped(new RamIO) + }) + val mem = Module(new ram_2r1w) + mem.io.clk := clock + mem.io.imem_en := io.imem.en + mem.io.imem_addr := io.imem.addr + io.imem.rdata := mem.io.imem_data + mem.io.dmem_en := io.dmem.en + mem.io.dmem_addr := io.dmem.addr + io.dmem.rdata := mem.io.dmem_rdata + mem.io.dmem_wdata := io.dmem.wdata + mem.io.dmem_wmask := io.dmem.wmask + mem.io.dmem_wen := io.dmem.wen +} diff --git a/projects/chisel_cpu_diff/src/main/scala/RegFile.scala b/projects/chisel_cpu_diff/src/main/scala/RegFile.scala new file mode 100755 index 0000000..5e24904 --- /dev/null +++ b/projects/chisel_cpu_diff/src/main/scala/RegFile.scala @@ -0,0 +1,31 @@ +import chisel3._ +import chisel3.util.experimental._ +import difftest._ + +class RegFile extends Module { + val io = IO(new Bundle { + val rs1_addr = Input(UInt(5.W)) + val rs2_addr = Input(UInt(5.W)) + val rs1_data = Output(UInt(64.W)) + val rs2_data = Output(UInt(64.W)) + val rd_addr = Input(UInt(5.W)) + val rd_data = Input(UInt(64.W)) + val rd_en = Input(Bool()) + }) + + val rf = RegInit(VecInit(Seq.fill(32)(0.U(64.W)))) + + when (io.rd_en && (io.rd_addr =/= 0.U)) { + rf(io.rd_addr) := io.rd_data; + } + + io.rs1_data := Mux((io.rs1_addr =/= 0.U), rf(io.rs1_addr), 0.U) + io.rs2_data := Mux((io.rs2_addr =/= 0.U), rf(io.rs2_addr), 0.U) + + val dt_ar = Module(new DifftestArchIntRegState) + dt_ar.io.clock := clock + dt_ar.io.coreid := 0.U + dt_ar.io.gpr := rf + + BoringUtils.addSource(rf(10), "rf_a0") +} diff --git a/projects/chisel_cpu_diff/src/main/scala/SimTop.scala b/projects/chisel_cpu_diff/src/main/scala/SimTop.scala new file mode 100755 index 0000000..a454992 --- /dev/null +++ b/projects/chisel_cpu_diff/src/main/scala/SimTop.scala @@ -0,0 +1,22 @@ +import chisel3._ +import chisel3.util._ +import difftest._ + +class SimTop extends Module { + val io = IO(new Bundle { + val logCtrl = new LogCtrlIO + val perfInfo = new PerfInfoIO + val uart = new UARTIO + }) + + val core = Module(new Core) + + val mem = Module(new Ram2r1w) + mem.io.imem <> core.io.imem + mem.io.dmem <> core.io.dmem + + io.uart.out.valid := false.B + io.uart.out.ch := 0.U + io.uart.in.valid := false.B + +} diff --git a/projects/chisel_cpu_diff/src/main/scala/TopMain.scala b/projects/chisel_cpu_diff/src/main/scala/TopMain.scala new file mode 100755 index 0000000..62b4675 --- /dev/null +++ b/projects/chisel_cpu_diff/src/main/scala/TopMain.scala @@ -0,0 +1,3 @@ +object TopMain extends App { + (new chisel3.stage.ChiselStage).execute(args, Seq(chisel3.stage.ChiselGeneratorAnnotation(() => new SimTop()))) +} From 24c2fe6ed0c125d31c051c7d04cf4b67d981c13d Mon Sep 17 00:00:00 2001 From: 5265325 <541959102@qq.com> Date: Wed, 1 Sep 2021 08:41:22 +0000 Subject: [PATCH 21/62] Add test cases elf and txt files --- .gitignore | 2 + .../benchmark/coremark/coremark.elf | Bin 0 -> 168936 bytes .../benchmark/coremark/coremark.txt | 3954 + .../benchmark/dhrystone/dhrystone.elf | Bin 0 -> 117208 bytes .../benchmark/dhrystone/dhrystone.txt | 2359 + .../benchmark/microbench/microbench-huge.elf | Bin 0 -> 256912 bytes .../benchmark/microbench/microbench-huge.txt | 6486 ++ .../benchmark/microbench/microbench-ref.elf | Bin 0 -> 256912 bytes .../benchmark/microbench/microbench-ref.txt | 6486 ++ .../benchmark/microbench/microbench-test.elf | Bin 0 -> 256912 bytes .../benchmark/microbench/microbench-test.txt | 6486 ++ .../benchmark/microbench/microbench-train.elf | Bin 0 -> 256912 bytes .../benchmark/microbench/microbench-train.txt | 6486 ++ bin/custom-output/hello/amtest-hello.elf | Bin 0 -> 218320 bytes bin/custom-output/hello/amtest-hello.txt | 3311 + .../interrupt-test/amtest-interrupt-test.elf | Bin 0 -> 218320 bytes .../interrupt-test/amtest-interrupt-test.txt | 3311 + bin/custom-output/mario/fceux-mario.elf | Bin 0 -> 2427168 bytes bin/custom-output/mario/fceux-mario.txt | 65084 ++++++++++++++++ bin/custom-output/rt-thread/rtthread.elf | Bin 0 -> 647992 bytes bin/custom-output/rt-thread/rtthread.txt | 28538 +++++++ .../time-test/amtest-time-test.elf | Bin 0 -> 218320 bytes .../time-test/amtest-time-test.txt | 3311 + .../yield-test/amtest-yield-test.elf | Bin 0 -> 218008 bytes .../yield-test/amtest-yield-test.txt | 3303 + bin/non-output/coremark/coremark.elf | Bin 0 -> 167632 bytes bin/non-output/coremark/coremark.txt | 3909 + bin/non-output/cpu-tests/add-cpu-tests.elf | Bin 0 -> 42040 bytes bin/non-output/cpu-tests/add-cpu-tests.txt | 234 + .../cpu-tests/add-longlong-cpu-tests.elf | Bin 0 -> 42328 bytes .../cpu-tests/add-longlong-cpu-tests.txt | 230 + bin/non-output/cpu-tests/bit-cpu-tests.elf | Bin 0 -> 43064 bytes bin/non-output/cpu-tests/bit-cpu-tests.txt | 301 + .../cpu-tests/bubble-sort-cpu-tests.elf | Bin 0 -> 42688 bytes .../cpu-tests/bubble-sort-cpu-tests.txt | 261 + bin/non-output/cpu-tests/div-cpu-tests.elf | Bin 0 -> 41848 bytes bin/non-output/cpu-tests/div-cpu-tests.txt | 332 + bin/non-output/cpu-tests/dummy-cpu-tests.elf | Bin 0 -> 39232 bytes bin/non-output/cpu-tests/dummy-cpu-tests.txt | 170 + bin/non-output/cpu-tests/fact-cpu-tests.elf | Bin 0 -> 41680 bytes bin/non-output/cpu-tests/fact-cpu-tests.txt | 244 + bin/non-output/cpu-tests/fib-cpu-tests.elf | Bin 0 -> 41144 bytes bin/non-output/cpu-tests/fib-cpu-tests.txt | 212 + .../cpu-tests/goldbach-cpu-tests.elf | Bin 0 -> 43288 bytes .../cpu-tests/goldbach-cpu-tests.txt | 340 + .../cpu-tests/hello-str-cpu-tests.elf | Bin 0 -> 74416 bytes .../cpu-tests/hello-str-cpu-tests.txt | 1410 + .../cpu-tests/if-else-cpu-tests.elf | Bin 0 -> 42176 bytes .../cpu-tests/if-else-cpu-tests.txt | 230 + .../cpu-tests/leap-year-cpu-tests.elf | Bin 0 -> 42296 bytes .../cpu-tests/leap-year-cpu-tests.txt | 299 + .../cpu-tests/load-store-cpu-tests.elf | Bin 0 -> 42584 bytes .../cpu-tests/load-store-cpu-tests.txt | 291 + .../cpu-tests/matrix-mul-cpu-tests.elf | Bin 0 -> 42792 bytes .../cpu-tests/matrix-mul-cpu-tests.txt | 266 + bin/non-output/cpu-tests/max-cpu-tests.elf | Bin 0 -> 42096 bytes bin/non-output/cpu-tests/max-cpu-tests.txt | 238 + bin/non-output/cpu-tests/min3-cpu-tests.elf | Bin 0 -> 42272 bytes bin/non-output/cpu-tests/min3-cpu-tests.txt | 250 + bin/non-output/cpu-tests/mov-c-cpu-tests.elf | Bin 0 -> 40880 bytes bin/non-output/cpu-tests/mov-c-cpu-tests.txt | 240 + bin/non-output/cpu-tests/movsx-cpu-tests.elf | Bin 0 -> 41424 bytes bin/non-output/cpu-tests/movsx-cpu-tests.txt | 282 + .../cpu-tests/mul-longlong-cpu-tests.elf | Bin 0 -> 42320 bytes .../cpu-tests/mul-longlong-cpu-tests.txt | 259 + bin/non-output/cpu-tests/pascal-cpu-tests.elf | Bin 0 -> 41288 bytes bin/non-output/cpu-tests/pascal-cpu-tests.txt | 236 + bin/non-output/cpu-tests/prime-cpu-tests.elf | Bin 0 -> 41656 bytes bin/non-output/cpu-tests/prime-cpu-tests.txt | 300 + .../cpu-tests/quick-sort-cpu-tests.elf | Bin 0 -> 43280 bytes .../cpu-tests/quick-sort-cpu-tests.txt | 306 + .../cpu-tests/recursion-cpu-tests.elf | Bin 0 -> 45144 bytes .../cpu-tests/recursion-cpu-tests.txt | 412 + .../cpu-tests/select-sort-cpu-tests.elf | Bin 0 -> 43040 bytes .../cpu-tests/select-sort-cpu-tests.txt | 274 + bin/non-output/cpu-tests/shift-cpu-tests.elf | Bin 0 -> 41632 bytes bin/non-output/cpu-tests/shift-cpu-tests.txt | 243 + .../cpu-tests/shuixianhua-cpu-tests.elf | Bin 0 -> 42936 bytes .../cpu-tests/shuixianhua-cpu-tests.txt | 352 + bin/non-output/cpu-tests/string-cpu-tests.elf | Bin 0 -> 61752 bytes bin/non-output/cpu-tests/string-cpu-tests.txt | 609 + .../cpu-tests/sub-longlong-cpu-tests.elf | Bin 0 -> 42328 bytes .../cpu-tests/sub-longlong-cpu-tests.txt | 230 + bin/non-output/cpu-tests/sum-cpu-tests.elf | Bin 0 -> 40432 bytes bin/non-output/cpu-tests/sum-cpu-tests.txt | 202 + bin/non-output/cpu-tests/switch-cpu-tests.elf | Bin 0 -> 41616 bytes bin/non-output/cpu-tests/switch-cpu-tests.txt | 220 + .../cpu-tests/to-lower-case-cpu-tests.elf | Bin 0 -> 41424 bytes .../cpu-tests/to-lower-case-cpu-tests.txt | 216 + .../cpu-tests/unalign-cpu-tests.elf | Bin 0 -> 41048 bytes .../cpu-tests/unalign-cpu-tests.txt | 249 + bin/non-output/cpu-tests/wanshu-cpu-tests.elf | Bin 0 -> 41880 bytes bin/non-output/cpu-tests/wanshu-cpu-tests.txt | 314 + bin/non-output/dhrystone/dhrystone.elf | Bin 0 -> 115912 bytes bin/non-output/dhrystone/dhrystone.txt | 2314 + bin/non-output/microbench/microbench-huge.elf | Bin 0 -> 255608 bytes bin/non-output/microbench/microbench-huge.txt | 6441 ++ bin/non-output/microbench/microbench-ref.elf | Bin 0 -> 255608 bytes bin/non-output/microbench/microbench-ref.txt | 6441 ++ bin/non-output/microbench/microbench-test.elf | Bin 0 -> 255608 bytes bin/non-output/microbench/microbench-test.txt | 6441 ++ .../microbench/microbench-train.elf | Bin 0 -> 255608 bytes .../microbench/microbench-train.txt | 6441 ++ .../riscv-tests/add-riscv-tests.elf | Bin 0 -> 10632 bytes .../riscv-tests/add-riscv-tests.txt | 411 + .../riscv-tests/addi-riscv-tests.elf | Bin 0 -> 9576 bytes .../riscv-tests/addi-riscv-tests.txt | 233 + .../riscv-tests/addiw-riscv-tests.elf | Bin 0 -> 9584 bytes .../riscv-tests/addiw-riscv-tests.txt | 230 + .../riscv-tests/addw-riscv-tests.elf | Bin 0 -> 10568 bytes .../riscv-tests/addw-riscv-tests.txt | 406 + .../riscv-tests/and-riscv-tests.elf | Bin 0 -> 10344 bytes .../riscv-tests/and-riscv-tests.txt | 414 + .../riscv-tests/andi-riscv-tests.elf | Bin 0 -> 9096 bytes .../riscv-tests/andi-riscv-tests.txt | 172 + .../riscv-tests/auipc-riscv-tests.elf | Bin 0 -> 8296 bytes .../riscv-tests/auipc-riscv-tests.txt | 41 + .../riscv-tests/beq-riscv-tests.elf | Bin 0 -> 9512 bytes .../riscv-tests/beq-riscv-tests.txt | 236 + .../riscv-tests/bge-riscv-tests.elf | Bin 0 -> 9672 bytes .../riscv-tests/bge-riscv-tests.txt | 266 + .../riscv-tests/bgeu-riscv-tests.elf | Bin 0 -> 9928 bytes .../riscv-tests/bgeu-riscv-tests.txt | 320 + .../riscv-tests/blt-riscv-tests.elf | Bin 0 -> 9512 bytes .../riscv-tests/blt-riscv-tests.txt | 236 + .../riscv-tests/bltu-riscv-tests.elf | Bin 0 -> 9704 bytes .../riscv-tests/bltu-riscv-tests.txt | 286 + .../riscv-tests/bne-riscv-tests.elf | Bin 0 -> 9512 bytes .../riscv-tests/bne-riscv-tests.txt | 237 + .../riscv-tests/jal-riscv-tests.elf | Bin 0 -> 8376 bytes .../riscv-tests/jal-riscv-tests.txt | 49 + .../riscv-tests/jalr-riscv-tests.elf | Bin 0 -> 8760 bytes .../riscv-tests/jalr-riscv-tests.txt | 101 + bin/non-output/riscv-tests/lb-riscv-tests.elf | Bin 0 -> 9656 bytes bin/non-output/riscv-tests/lb-riscv-tests.txt | 203 + .../riscv-tests/lbu-riscv-tests.elf | Bin 0 -> 9656 bytes .../riscv-tests/lbu-riscv-tests.txt | 203 + bin/non-output/riscv-tests/ld-riscv-tests.elf | Bin 0 -> 10056 bytes bin/non-output/riscv-tests/ld-riscv-tests.txt | 299 + bin/non-output/riscv-tests/lh-riscv-tests.elf | Bin 0 -> 9656 bytes bin/non-output/riscv-tests/lh-riscv-tests.txt | 212 + .../riscv-tests/lhu-riscv-tests.elf | Bin 0 -> 9720 bytes .../riscv-tests/lhu-riscv-tests.txt | 216 + .../riscv-tests/lui-riscv-tests.elf | Bin 0 -> 8400 bytes .../riscv-tests/lui-riscv-tests.txt | 54 + bin/non-output/riscv-tests/lw-riscv-tests.elf | Bin 0 -> 9720 bytes bin/non-output/riscv-tests/lw-riscv-tests.txt | 219 + .../riscv-tests/lwu-riscv-tests.elf | Bin 0 -> 9784 bytes .../riscv-tests/lwu-riscv-tests.txt | 237 + bin/non-output/riscv-tests/or-riscv-tests.elf | Bin 0 -> 10472 bytes bin/non-output/riscv-tests/or-riscv-tests.txt | 447 + .../riscv-tests/ori-riscv-tests.elf | Bin 0 -> 9032 bytes .../riscv-tests/ori-riscv-tests.txt | 170 + bin/non-output/riscv-tests/sb-riscv-tests.elf | Bin 0 -> 10416 bytes bin/non-output/riscv-tests/sb-riscv-tests.txt | 317 + bin/non-output/riscv-tests/sd-riscv-tests.elf | Bin 0 -> 11056 bytes bin/non-output/riscv-tests/sd-riscv-tests.txt | 465 + bin/non-output/riscv-tests/sh-riscv-tests.elf | Bin 0 -> 10560 bytes bin/non-output/riscv-tests/sh-riscv-tests.txt | 350 + .../riscv-tests/simple-riscv-tests.elf | Bin 0 -> 8024 bytes .../riscv-tests/simple-riscv-tests.txt | 16 + .../riscv-tests/sll-riscv-tests.elf | Bin 0 -> 11144 bytes .../riscv-tests/sll-riscv-tests.txt | 497 + .../riscv-tests/slli-riscv-tests.elf | Bin 0 -> 9800 bytes .../riscv-tests/slli-riscv-tests.txt | 264 + .../riscv-tests/slliw-riscv-tests.elf | Bin 0 -> 9840 bytes .../riscv-tests/slliw-riscv-tests.txt | 273 + .../riscv-tests/sllw-riscv-tests.elf | Bin 0 -> 11176 bytes .../riscv-tests/sllw-riscv-tests.txt | 499 + .../riscv-tests/slt-riscv-tests.elf | Bin 0 -> 10568 bytes .../riscv-tests/slt-riscv-tests.txt | 400 + .../riscv-tests/slti-riscv-tests.elf | Bin 0 -> 9576 bytes .../riscv-tests/slti-riscv-tests.txt | 225 + .../riscv-tests/sltiu-riscv-tests.elf | Bin 0 -> 9584 bytes .../riscv-tests/sltiu-riscv-tests.txt | 225 + .../riscv-tests/sltu-riscv-tests.elf | Bin 0 -> 10632 bytes .../riscv-tests/sltu-riscv-tests.txt | 417 + .../riscv-tests/sra-riscv-tests.elf | Bin 0 -> 10920 bytes .../riscv-tests/sra-riscv-tests.txt | 463 + .../riscv-tests/srai-riscv-tests.elf | Bin 0 -> 9640 bytes .../riscv-tests/srai-riscv-tests.txt | 244 + .../riscv-tests/sraiw-riscv-tests.elf | Bin 0 -> 10032 bytes .../riscv-tests/sraiw-riscv-tests.txt | 302 + .../riscv-tests/sraw-riscv-tests.elf | Bin 0 -> 11240 bytes .../riscv-tests/sraw-riscv-tests.txt | 511 + .../riscv-tests/srl-riscv-tests.elf | Bin 0 -> 11048 bytes .../riscv-tests/srl-riscv-tests.txt | 490 + .../riscv-tests/srli-riscv-tests.elf | Bin 0 -> 9704 bytes .../riscv-tests/srli-riscv-tests.txt | 259 + .../riscv-tests/srliw-riscv-tests.elf | Bin 0 -> 9840 bytes .../riscv-tests/srliw-riscv-tests.txt | 279 + .../riscv-tests/srlw-riscv-tests.elf | Bin 0 -> 11176 bytes .../riscv-tests/srlw-riscv-tests.txt | 505 + .../riscv-tests/sub-riscv-tests.elf | Bin 0 -> 10536 bytes .../riscv-tests/sub-riscv-tests.txt | 400 + .../riscv-tests/subw-riscv-tests.elf | Bin 0 -> 10536 bytes .../riscv-tests/subw-riscv-tests.txt | 396 + bin/non-output/riscv-tests/sw-riscv-tests.elf | Bin 0 -> 10576 bytes bin/non-output/riscv-tests/sw-riscv-tests.txt | 353 + .../riscv-tests/xor-riscv-tests.elf | Bin 0 -> 10472 bytes .../riscv-tests/xor-riscv-tests.txt | 442 + .../riscv-tests/xori-riscv-tests.elf | Bin 0 -> 9032 bytes .../riscv-tests/xori-riscv-tests.txt | 167 + 203 files changed, 196013 insertions(+) create mode 100755 bin/custom-output/benchmark/coremark/coremark.elf create mode 100755 bin/custom-output/benchmark/coremark/coremark.txt create mode 100755 bin/custom-output/benchmark/dhrystone/dhrystone.elf create mode 100755 bin/custom-output/benchmark/dhrystone/dhrystone.txt create mode 100755 bin/custom-output/benchmark/microbench/microbench-huge.elf create mode 100755 bin/custom-output/benchmark/microbench/microbench-huge.txt create mode 100755 bin/custom-output/benchmark/microbench/microbench-ref.elf create mode 100755 bin/custom-output/benchmark/microbench/microbench-ref.txt create mode 100755 bin/custom-output/benchmark/microbench/microbench-test.elf create mode 100755 bin/custom-output/benchmark/microbench/microbench-test.txt create mode 100755 bin/custom-output/benchmark/microbench/microbench-train.elf create mode 100755 bin/custom-output/benchmark/microbench/microbench-train.txt create mode 100755 bin/custom-output/hello/amtest-hello.elf create mode 100755 bin/custom-output/hello/amtest-hello.txt create mode 100755 bin/custom-output/interrupt-test/amtest-interrupt-test.elf create mode 100755 bin/custom-output/interrupt-test/amtest-interrupt-test.txt create mode 100755 bin/custom-output/mario/fceux-mario.elf create mode 100755 bin/custom-output/mario/fceux-mario.txt create mode 100755 bin/custom-output/rt-thread/rtthread.elf create mode 100755 bin/custom-output/rt-thread/rtthread.txt create mode 100755 bin/custom-output/time-test/amtest-time-test.elf create mode 100755 bin/custom-output/time-test/amtest-time-test.txt create mode 100755 bin/custom-output/yield-test/amtest-yield-test.elf create mode 100755 bin/custom-output/yield-test/amtest-yield-test.txt create mode 100755 bin/non-output/coremark/coremark.elf create mode 100755 bin/non-output/coremark/coremark.txt create mode 100755 bin/non-output/cpu-tests/add-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/add-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/add-longlong-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/add-longlong-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/bit-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/bit-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/bubble-sort-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/bubble-sort-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/div-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/div-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/dummy-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/dummy-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/fact-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/fact-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/fib-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/fib-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/goldbach-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/goldbach-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/hello-str-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/hello-str-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/if-else-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/if-else-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/leap-year-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/leap-year-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/load-store-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/load-store-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/matrix-mul-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/matrix-mul-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/max-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/max-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/min3-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/min3-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/mov-c-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/mov-c-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/movsx-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/movsx-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/mul-longlong-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/mul-longlong-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/pascal-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/pascal-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/prime-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/prime-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/quick-sort-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/quick-sort-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/recursion-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/recursion-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/select-sort-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/select-sort-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/shift-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/shift-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/shuixianhua-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/shuixianhua-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/string-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/string-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/sub-longlong-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/sub-longlong-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/sum-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/sum-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/switch-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/switch-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/to-lower-case-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/to-lower-case-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/unalign-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/unalign-cpu-tests.txt create mode 100755 bin/non-output/cpu-tests/wanshu-cpu-tests.elf create mode 100755 bin/non-output/cpu-tests/wanshu-cpu-tests.txt create mode 100755 bin/non-output/dhrystone/dhrystone.elf create mode 100755 bin/non-output/dhrystone/dhrystone.txt create mode 100755 bin/non-output/microbench/microbench-huge.elf create mode 100755 bin/non-output/microbench/microbench-huge.txt create mode 100755 bin/non-output/microbench/microbench-ref.elf create mode 100755 bin/non-output/microbench/microbench-ref.txt create mode 100755 bin/non-output/microbench/microbench-test.elf create mode 100755 bin/non-output/microbench/microbench-test.txt create mode 100755 bin/non-output/microbench/microbench-train.elf create mode 100755 bin/non-output/microbench/microbench-train.txt create mode 100755 bin/non-output/riscv-tests/add-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/add-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/addi-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/addi-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/addiw-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/addiw-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/addw-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/addw-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/and-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/and-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/andi-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/andi-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/auipc-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/auipc-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/beq-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/beq-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/bge-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/bge-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/bgeu-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/bgeu-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/blt-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/blt-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/bltu-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/bltu-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/bne-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/bne-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/jal-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/jal-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/jalr-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/jalr-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/lb-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/lb-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/lbu-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/lbu-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/ld-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/ld-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/lh-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/lh-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/lhu-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/lhu-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/lui-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/lui-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/lw-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/lw-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/lwu-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/lwu-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/or-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/or-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/ori-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/ori-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/sb-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/sb-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/sd-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/sd-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/sh-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/sh-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/simple-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/simple-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/sll-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/sll-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/slli-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/slli-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/slliw-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/slliw-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/sllw-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/sllw-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/slt-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/slt-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/slti-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/slti-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/sltiu-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/sltiu-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/sltu-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/sltu-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/sra-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/sra-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/srai-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/srai-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/sraiw-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/sraiw-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/sraw-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/sraw-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/srl-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/srl-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/srli-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/srli-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/srliw-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/srliw-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/srlw-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/srlw-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/sub-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/sub-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/subw-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/subw-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/sw-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/sw-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/xor-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/xor-riscv-tests.txt create mode 100755 bin/non-output/riscv-tests/xori-riscv-tests.elf create mode 100755 bin/non-output/riscv-tests/xori-riscv-tests.txt diff --git a/.gitignore b/.gitignore index 84081cd..2bd952a 100755 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,8 @@ !*.mk !*.bin !*.scala +!*.elf +!*.txt !Makefile !README !README.md diff --git a/bin/custom-output/benchmark/coremark/coremark.elf b/bin/custom-output/benchmark/coremark/coremark.elf new file mode 100755 index 0000000000000000000000000000000000000000..7da128fc9402aee623de6b27655399e6a9f88874 GIT binary patch literal 168936 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 O: + 80000000: 00000413 li s0,0 + 80000004: 0000e117 auipc sp,0xe + 80000008: ffc10113 addi sp,sp,-4 # 8000e000 <_end> + 8000000c: 264020ef jal ra,80002270 <_trm_init> + +0000000080000010 : + 80000010: 00060a63 beqz a2,80000024 + 80000014: 00251503 lh a0,2(a0) + 80000018: 00259783 lh a5,2(a1) + 8000001c: 40f5053b subw a0,a0,a5 + 80000020: 00008067 ret + 80000024: 00051783 lh a5,0(a0) + 80000028: 0087d713 srli a4,a5,0x8 + 8000002c: 0ff77713 andi a4,a4,255 + 80000030: f007f793 andi a5,a5,-256 + 80000034: 00e7e7b3 or a5,a5,a4 + 80000038: 00f51023 sh a5,0(a0) + 8000003c: 00059783 lh a5,0(a1) + 80000040: 00251503 lh a0,2(a0) + 80000044: 0087d713 srli a4,a5,0x8 + 80000048: 0ff77713 andi a4,a4,255 + 8000004c: f007f793 andi a5,a5,-256 + 80000050: 00e7e7b3 or a5,a5,a4 + 80000054: 00f59023 sh a5,0(a1) + 80000058: 00259783 lh a5,2(a1) + 8000005c: 40f5053b subw a0,a0,a5 + 80000060: 00008067 ret + +0000000080000064 : + 80000064: fd010113 addi sp,sp,-48 + 80000068: 02813023 sd s0,32(sp) + 8000006c: 00051403 lh s0,0(a0) + 80000070: 02113423 sd ra,40(sp) + 80000074: 00913c23 sd s1,24(sp) + 80000078: 4074579b sraiw a5,s0,0x7 + 8000007c: 01213823 sd s2,16(sp) + 80000080: 01313423 sd s3,8(sp) + 80000084: 0017f793 andi a5,a5,1 + 80000088: 02078263 beqz a5,800000ac + 8000008c: 02813083 ld ra,40(sp) + 80000090: 07f47513 andi a0,s0,127 + 80000094: 02013403 ld s0,32(sp) + 80000098: 01813483 ld s1,24(sp) + 8000009c: 01013903 ld s2,16(sp) + 800000a0: 00813983 ld s3,8(sp) + 800000a4: 03010113 addi sp,sp,48 + 800000a8: 00008067 ret + 800000ac: 00058493 mv s1,a1 + 800000b0: 4034559b sraiw a1,s0,0x3 + 800000b4: 00f5f593 andi a1,a1,15 + 800000b8: 00459713 slli a4,a1,0x4 + 800000bc: 00747693 andi a3,s0,7 + 800000c0: 0604d783 lhu a5,96(s1) + 800000c4: 00050993 mv s3,a0 + 800000c8: 00b765b3 or a1,a4,a1 + 800000cc: 08068063 beqz a3,8000014c + 800000d0: 00100713 li a4,1 + 800000d4: 04e68863 beq a3,a4,80000124 + 800000d8: 03041513 slli a0,s0,0x30 + 800000dc: 03055513 srli a0,a0,0x30 + 800000e0: 00040913 mv s2,s0 + 800000e4: 00078593 mv a1,a5 + 800000e8: 730000ef jal ra,80000818 + 800000ec: 00050793 mv a5,a0 + 800000f0: f0047413 andi s0,s0,-256 + 800000f4: 07f97513 andi a0,s2,127 + 800000f8: 00856433 or s0,a0,s0 + 800000fc: 06f49023 sh a5,96(s1) + 80000100: 08046413 ori s0,s0,128 + 80000104: 00899023 sh s0,0(s3) + 80000108: 02813083 ld ra,40(sp) + 8000010c: 02013403 ld s0,32(sp) + 80000110: 01813483 ld s1,24(sp) + 80000114: 01013903 ld s2,16(sp) + 80000118: 00813983 ld s3,8(sp) + 8000011c: 03010113 addi sp,sp,48 + 80000120: 00008067 ret + 80000124: 00078613 mv a2,a5 + 80000128: 04048513 addi a0,s1,64 + 8000012c: 158010ef jal ra,80001284 + 80000130: 0644d783 lhu a5,100(s1) + 80000134: 0105191b slliw s2,a0,0x10 + 80000138: 4109591b sraiw s2,s2,0x10 + 8000013c: 04079a63 bnez a5,80000190 + 80000140: 0604d783 lhu a5,96(s1) + 80000144: 06a49223 sh a0,100(s1) + 80000148: f9dff06f j 800000e4 + 8000014c: 02200693 li a3,34 + 80000150: 00058713 mv a4,a1 + 80000154: 00d5d463 bge a1,a3,8000015c + 80000158: 02200713 li a4,34 + 8000015c: 00249683 lh a3,2(s1) + 80000160: 00049603 lh a2,0(s1) + 80000164: 0204b583 ld a1,32(s1) + 80000168: 0284a503 lw a0,40(s1) + 8000016c: 0ff77713 andi a4,a4,255 + 80000170: 608010ef jal ra,80001778 + 80000174: 0664d783 lhu a5,102(s1) + 80000178: 0105191b slliw s2,a0,0x10 + 8000017c: 4109591b sraiw s2,s2,0x10 + 80000180: 00079863 bnez a5,80000190 + 80000184: 0604d783 lhu a5,96(s1) + 80000188: 06a49323 sh a0,102(s1) + 8000018c: f59ff06f j 800000e4 + 80000190: 0604d783 lhu a5,96(s1) + 80000194: f51ff06f j 800000e4 + +0000000080000198 : + 80000198: fe010113 addi sp,sp,-32 + 8000019c: 00913423 sd s1,8(sp) + 800001a0: 00058493 mv s1,a1 + 800001a4: 00060593 mv a1,a2 + 800001a8: 00113c23 sd ra,24(sp) + 800001ac: 00813823 sd s0,16(sp) + 800001b0: 00060413 mv s0,a2 + 800001b4: eb1ff0ef jal ra,80000064 + 800001b8: 00050793 mv a5,a0 + 800001bc: 00040593 mv a1,s0 + 800001c0: 00048513 mv a0,s1 + 800001c4: 00078413 mv s0,a5 + 800001c8: e9dff0ef jal ra,80000064 + 800001cc: 01813083 ld ra,24(sp) + 800001d0: 40a4053b subw a0,s0,a0 + 800001d4: 01013403 ld s0,16(sp) + 800001d8: 00813483 ld s1,8(sp) + 800001dc: 02010113 addi sp,sp,32 + 800001e0: 00008067 ret + +00000000800001e4 : + 800001e4: 00259703 lh a4,2(a1) + 800001e8: 02074263 bltz a4,8000020c + 800001ec: 00051863 bnez a0,800001fc + 800001f0: 0480006f j 80000238 + 800001f4: 00053503 ld a0,0(a0) + 800001f8: 02050c63 beqz a0,80000230 + 800001fc: 00853783 ld a5,8(a0) + 80000200: 00279783 lh a5,2(a5) + 80000204: fee798e3 bne a5,a4,800001f4 + 80000208: 00008067 ret + 8000020c: 02050263 beqz a0,80000230 + 80000210: 00059703 lh a4,0(a1) + 80000214: 00c0006f j 80000220 + 80000218: 00053503 ld a0,0(a0) + 8000021c: 00050c63 beqz a0,80000234 + 80000220: 00853783 ld a5,8(a0) + 80000224: 0007c783 lbu a5,0(a5) + 80000228: fee798e3 bne a5,a4,80000218 + 8000022c: 00008067 ret + 80000230: 00000513 li a0,0 + 80000234: 00008067 ret + 80000238: 00008067 ret + +000000008000023c : + 8000023c: fa010113 addi sp,sp,-96 + 80000240: 04913423 sd s1,72(sp) + 80000244: 03513423 sd s5,40(sp) + 80000248: 01713c23 sd s7,24(sp) + 8000024c: 01913423 sd s9,8(sp) + 80000250: 01a13023 sd s10,0(sp) + 80000254: 04113c23 sd ra,88(sp) + 80000258: 04813823 sd s0,80(sp) + 8000025c: 05213023 sd s2,64(sp) + 80000260: 03313c23 sd s3,56(sp) + 80000264: 03413823 sd s4,48(sp) + 80000268: 03613023 sd s6,32(sp) + 8000026c: 01813823 sd s8,16(sp) + 80000270: 00050493 mv s1,a0 + 80000274: 00058b93 mv s7,a1 + 80000278: 00060d13 mv s10,a2 + 8000027c: 00100a93 li s5,1 + 80000280: 00100c93 li s9,1 + 80000284: 0c048063 beqz s1,80000344 + 80000288: 00000c13 li s8,0 + 8000028c: 00000913 li s2,0 + 80000290: 00000b13 li s6,0 + 80000294: 001c0c1b addiw s8,s8,1 + 80000298: 00048793 mv a5,s1 + 8000029c: 00000413 li s0,0 + 800002a0: 0007b783 ld a5,0(a5) + 800002a4: 0014041b addiw s0,s0,1 + 800002a8: 00078463 beqz a5,800002b0 + 800002ac: fe8a9ae3 bne s5,s0,800002a0 + 800002b0: 00048a13 mv s4,s1 + 800002b4: 000a8993 mv s3,s5 + 800002b8: 00078493 mv s1,a5 + 800002bc: 02040e63 beqz s0,800002f8 + 800002c0: 04098e63 beqz s3,8000031c + 800002c4: 04048c63 beqz s1,8000031c + 800002c8: 0084b583 ld a1,8(s1) + 800002cc: 008a3503 ld a0,8(s4) + 800002d0: 000d0613 mv a2,s10 + 800002d4: 000b80e7 jalr s7 + 800002d8: 04a05263 blez a0,8000031c + 800002dc: 00048793 mv a5,s1 + 800002e0: 0004b483 ld s1,0(s1) + 800002e4: fff9899b addiw s3,s3,-1 + 800002e8: 02090463 beqz s2,80000310 + 800002ec: 00f93023 sd a5,0(s2) + 800002f0: 00078913 mv s2,a5 + 800002f4: fc0416e3 bnez s0,800002c0 + 800002f8: 02098a63 beqz s3,8000032c + 800002fc: 02048a63 beqz s1,80000330 + 80000300: 00048793 mv a5,s1 + 80000304: fff9899b addiw s3,s3,-1 + 80000308: 0004b483 ld s1,0(s1) + 8000030c: fe0910e3 bnez s2,800002ec + 80000310: 00078b13 mv s6,a5 + 80000314: 00078913 mv s2,a5 + 80000318: fddff06f j 800002f4 + 8000031c: 000a0793 mv a5,s4 + 80000320: fff4041b addiw s0,s0,-1 + 80000324: 000a3a03 ld s4,0(s4) + 80000328: fc1ff06f j 800002e8 + 8000032c: f60494e3 bnez s1,80000294 + 80000330: 00093023 sd zero,0(s2) + 80000334: 019c0c63 beq s8,s9,8000034c + 80000338: 001a9a9b slliw s5,s5,0x1 + 8000033c: 000b0493 mv s1,s6 + 80000340: f45ff06f j 80000284 + 80000344: 00003023 sd zero,0(zero) # 0 <_entry_offset> + 80000348: 00100073 ebreak + 8000034c: 05813083 ld ra,88(sp) + 80000350: 05013403 ld s0,80(sp) + 80000354: 04813483 ld s1,72(sp) + 80000358: 04013903 ld s2,64(sp) + 8000035c: 03813983 ld s3,56(sp) + 80000360: 03013a03 ld s4,48(sp) + 80000364: 02813a83 ld s5,40(sp) + 80000368: 01813b83 ld s7,24(sp) + 8000036c: 01013c03 ld s8,16(sp) + 80000370: 00813c83 ld s9,8(sp) + 80000374: 00013d03 ld s10,0(sp) + 80000378: 000b0513 mv a0,s6 + 8000037c: 02013b03 ld s6,32(sp) + 80000380: 06010113 addi sp,sp,96 + 80000384: 00008067 ret + +0000000080000388 : + 80000388: f9010113 addi sp,sp,-112 + 8000038c: 03813023 sd s8,32(sp) + 80000390: 00451c03 lh s8,4(a0) + 80000394: 06813023 sd s0,96(sp) + 80000398: 05413023 sd s4,64(sp) + 8000039c: 03513c23 sd s5,56(sp) + 800003a0: 06113423 sd ra,104(sp) + 800003a4: 04913c23 sd s1,88(sp) + 800003a8: 05213823 sd s2,80(sp) + 800003ac: 05313423 sd s3,72(sp) + 800003b0: 03613823 sd s6,48(sp) + 800003b4: 03713423 sd s7,40(sp) + 800003b8: 01913c23 sd s9,24(sp) + 800003bc: 00011423 sh zero,8(sp) + 800003c0: 00b11523 sh a1,10(sp) + 800003c4: 03853403 ld s0,56(a0) + 800003c8: 00050a93 mv s5,a0 + 800003cc: 00058a13 mv s4,a1 + 800003d0: 21805a63 blez s8,800005e4 + 800003d4: 00058c93 mv s9,a1 + 800003d8: 00000913 li s2,0 + 800003dc: 00000b93 li s7,0 + 800003e0: 00000493 li s1,0 + 800003e4: 00000b13 li s6,0 + 800003e8: 00810993 addi s3,sp,8 + 800003ec: 0ff97793 andi a5,s2,255 + 800003f0: 00098593 mv a1,s3 + 800003f4: 00040513 mv a0,s0 + 800003f8: 00f11423 sh a5,8(sp) + 800003fc: de9ff0ef jal ra,800001e4 + 80000400: 02040063 beqz s0,80000420 + 80000404: 00000713 li a4,0 + 80000408: 0080006f j 80000410 + 8000040c: 00078413 mv s0,a5 + 80000410: 00043783 ld a5,0(s0) + 80000414: 00e43023 sd a4,0(s0) + 80000418: 00040713 mv a4,s0 + 8000041c: fe0798e3 bnez a5,8000040c + 80000420: 06050a63 beqz a0,80000494 + 80000424: 00853783 ld a5,8(a0) + 80000428: 0014849b addiw s1,s1,1 + 8000042c: 03049493 slli s1,s1,0x30 + 80000430: 00079783 lh a5,0(a5) + 80000434: 0304d493 srli s1,s1,0x30 + 80000438: 0017f713 andi a4,a5,1 + 8000043c: 00070c63 beqz a4,80000454 + 80000440: 4097d79b sraiw a5,a5,0x9 + 80000444: 0017f793 andi a5,a5,1 + 80000448: 01678b3b addw s6,a5,s6 + 8000044c: 030b1b13 slli s6,s6,0x30 + 80000450: 030b5b13 srli s6,s6,0x30 + 80000454: 00053783 ld a5,0(a0) + 80000458: 00078c63 beqz a5,80000470 + 8000045c: 0007b703 ld a4,0(a5) + 80000460: 00e53023 sd a4,0(a0) + 80000464: 00043703 ld a4,0(s0) + 80000468: 00e7b023 sd a4,0(a5) + 8000046c: 00f43023 sd a5,0(s0) + 80000470: 000cc663 bltz s9,8000047c + 80000474: 001c8c9b addiw s9,s9,1 + 80000478: 01911523 sh s9,10(sp) + 8000047c: 0019091b addiw s2,s2,1 + 80000480: 0109191b slliw s2,s2,0x10 + 80000484: 4109591b sraiw s2,s2,0x10 + 80000488: 032c0c63 beq s8,s2,800004c0 + 8000048c: 00a11c83 lh s9,10(sp) + 80000490: f5dff06f j 800003ec + 80000494: 00043783 ld a5,0(s0) + 80000498: 001b8b9b addiw s7,s7,1 + 8000049c: 030b9b93 slli s7,s7,0x30 + 800004a0: 0087b783 ld a5,8(a5) + 800004a4: 030bdb93 srli s7,s7,0x30 + 800004a8: 00178783 lb a5,1(a5) + 800004ac: 0017f793 andi a5,a5,1 + 800004b0: 01678b3b addw s6,a5,s6 + 800004b4: 030b1b13 slli s6,s6,0x30 + 800004b8: 030b5b13 srli s6,s6,0x30 + 800004bc: fb5ff06f j 80000470 + 800004c0: 0024949b slliw s1,s1,0x2 + 800004c4: 417484bb subw s1,s1,s7 + 800004c8: 016484bb addw s1,s1,s6 + 800004cc: 03049493 slli s1,s1,0x30 + 800004d0: 0304d493 srli s1,s1,0x30 + 800004d4: 01405e63 blez s4,800004f0 + 800004d8: 00040513 mv a0,s0 + 800004dc: 000a8613 mv a2,s5 + 800004e0: 00000597 auipc a1,0x0 + 800004e4: cb858593 addi a1,a1,-840 # 80000198 + 800004e8: d55ff0ef jal ra,8000023c + 800004ec: 00050413 mv s0,a0 + 800004f0: 00043783 ld a5,0(s0) + 800004f4: 00098593 mv a1,s3 + 800004f8: 00040513 mv a0,s0 + 800004fc: 0007b983 ld s3,0(a5) + 80000500: 0087ba03 ld s4,8(a5) + 80000504: 0089b683 ld a3,8(s3) + 80000508: 0009b703 ld a4,0(s3) + 8000050c: 00d7b423 sd a3,8(a5) + 80000510: 0149b423 sd s4,8(s3) + 80000514: 00e7b023 sd a4,0(a5) + 80000518: 0009b023 sd zero,0(s3) + 8000051c: cc9ff0ef jal ra,800001e4 + 80000520: 00050913 mv s2,a0 + 80000524: 0a050a63 beqz a0,800005d8 + 80000528: 00843783 ld a5,8(s0) + 8000052c: 00048593 mv a1,s1 + 80000530: 00079503 lh a0,0(a5) + 80000534: 39c000ef jal ra,800008d0 + 80000538: 00093903 ld s2,0(s2) + 8000053c: 00050493 mv s1,a0 + 80000540: fe0914e3 bnez s2,80000528 + 80000544: 00043903 ld s2,0(s0) + 80000548: 0089ba03 ld s4,8(s3) + 8000054c: 00893703 ld a4,8(s2) + 80000550: 00093783 ld a5,0(s2) + 80000554: 00040513 mv a0,s0 + 80000558: 00e9b423 sd a4,8(s3) + 8000055c: 01493423 sd s4,8(s2) + 80000560: 00f9b023 sd a5,0(s3) + 80000564: 01393023 sd s3,0(s2) + 80000568: 00000613 li a2,0 + 8000056c: 00000597 auipc a1,0x0 + 80000570: aa458593 addi a1,a1,-1372 # 80000010 + 80000574: cc9ff0ef jal ra,8000023c + 80000578: 00053403 ld s0,0(a0) + 8000057c: 00050913 mv s2,a0 + 80000580: 02040063 beqz s0,800005a0 + 80000584: 00893783 ld a5,8(s2) + 80000588: 00048593 mv a1,s1 + 8000058c: 00079503 lh a0,0(a5) + 80000590: 340000ef jal ra,800008d0 + 80000594: 00043403 ld s0,0(s0) + 80000598: 00050493 mv s1,a0 + 8000059c: fe0414e3 bnez s0,80000584 + 800005a0: 06813083 ld ra,104(sp) + 800005a4: 06013403 ld s0,96(sp) + 800005a8: 05013903 ld s2,80(sp) + 800005ac: 04813983 ld s3,72(sp) + 800005b0: 04013a03 ld s4,64(sp) + 800005b4: 03813a83 ld s5,56(sp) + 800005b8: 03013b03 ld s6,48(sp) + 800005bc: 02813b83 ld s7,40(sp) + 800005c0: 02013c03 ld s8,32(sp) + 800005c4: 01813c83 ld s9,24(sp) + 800005c8: 00048513 mv a0,s1 + 800005cc: 05813483 ld s1,88(sp) + 800005d0: 07010113 addi sp,sp,112 + 800005d4: 00008067 ret + 800005d8: 00043903 ld s2,0(s0) + 800005dc: f40916e3 bnez s2,80000528 + 800005e0: f6dff06f j 8000054c + 800005e4: 00000493 li s1,0 + 800005e8: 00810993 addi s3,sp,8 + 800005ec: ee9ff06f j 800004d4 + +00000000800005f0 : + 800005f0: fd010113 addi sp,sp,-48 + 800005f4: 02051513 slli a0,a0,0x20 + 800005f8: 01213823 sd s2,16(sp) + 800005fc: 02055513 srli a0,a0,0x20 + 80000600: 00058913 mv s2,a1 + 80000604: 01400593 li a1,20 + 80000608: 02813023 sd s0,32(sp) + 8000060c: 01313423 sd s3,8(sp) + 80000610: 02113423 sd ra,40(sp) + 80000614: 00060993 mv s3,a2 + 80000618: 00913c23 sd s1,24(sp) + 8000061c: 4e5010ef jal ra,80002300 <__udivdi3> + 80000620: ffe50e1b addiw t3,a0,-2 + 80000624: 020e1513 slli a0,t3,0x20 + 80000628: 02055513 srli a0,a0,0x20 + 8000062c: 00451613 slli a2,a0,0x4 + 80000630: 00c90633 add a2,s2,a2 + 80000634: ffff87b7 lui a5,0xffff8 + 80000638: 00093023 sd zero,0(s2) + 8000063c: 00c93423 sd a2,8(s2) + 80000640: 0807871b addiw a4,a5,128 + 80000644: 00251e93 slli t4,a0,0x2 + 80000648: 00e61023 sh a4,0(a2) + 8000064c: 00061123 sh zero,2(a2) + 80000650: 02090693 addi a3,s2,32 + 80000654: 01d60eb3 add t4,a2,t4 + 80000658: 01090413 addi s0,s2,16 + 8000065c: 00460713 addi a4,a2,4 + 80000660: 14c6f063 bgeu a3,a2,800007a0 + 80000664: 00860893 addi a7,a2,8 + 80000668: 13d8fc63 bgeu a7,t4,800007a0 + 8000066c: 00e93c23 sd a4,24(s2) + 80000670: 00093823 sd zero,16(s2) + 80000674: 00893023 sd s0,0(s2) + 80000678: fff7c793 not a5,a5 + 8000067c: fff00713 li a4,-1 + 80000680: 00e61223 sh a4,4(a2) + 80000684: 00f61323 sh a5,6(a2) + 80000688: 060e0a63 beqz t3,800006fc + 8000068c: 03099f13 slli t5,s3,0x30 + 80000690: ffff8fb7 lui t6,0xffff8 + 80000694: 030f5f13 srli t5,t5,0x30 + 80000698: 00000813 li a6,0 + 8000069c: ffffcf93 not t6,t6 + 800006a0: 03081713 slli a4,a6,0x30 + 800006a4: 03075713 srli a4,a4,0x30 + 800006a8: 00ef47b3 xor a5,t5,a4 + 800006ac: 00379793 slli a5,a5,0x3 + 800006b0: 00777713 andi a4,a4,7 + 800006b4: 0787f793 andi a5,a5,120 + 800006b8: 00e7e7b3 or a5,a5,a4 + 800006bc: 00879593 slli a1,a5,0x8 + 800006c0: 01068713 addi a4,a3,16 + 800006c4: 0018081b addiw a6,a6,1 + 800006c8: 00488313 addi t1,a7,4 + 800006cc: 00b7e7b3 or a5,a5,a1 + 800006d0: 02c77463 bgeu a4,a2,800006f8 + 800006d4: 03d37263 bgeu t1,t4,800006f8 + 800006d8: 0086b023 sd s0,0(a3) + 800006dc: 00d93023 sd a3,0(s2) + 800006e0: 0116b423 sd a7,8(a3) + 800006e4: 00f89023 sh a5,0(a7) + 800006e8: 01f89123 sh t6,2(a7) + 800006ec: 00068413 mv s0,a3 + 800006f0: 00030893 mv a7,t1 + 800006f4: 00070693 mv a3,a4 + 800006f8: fb0e14e3 bne t3,a6,800006a0 + 800006fc: 00043483 ld s1,0(s0) + 80000700: 06048a63 beqz s1,80000774 + 80000704: 00500593 li a1,5 + 80000708: 3f9010ef jal ra,80002300 <__udivdi3> + 8000070c: 00004637 lui a2,0x4 + 80000710: 0005051b sext.w a0,a0 + 80000714: 00100693 li a3,1 + 80000718: fff60613 addi a2,a2,-1 # 3fff <_entry_offset+0x3fff> + 8000071c: 01c0006f j 80000738 + 80000720: 0004b783 ld a5,0(s1) + 80000724: 00d71123 sh a3,2(a4) + 80000728: 00048413 mv s0,s1 + 8000072c: 0016869b addiw a3,a3,1 + 80000730: 04078263 beqz a5,80000774 + 80000734: 00078493 mv s1,a5 + 80000738: 03069713 slli a4,a3,0x30 + 8000073c: 03075713 srli a4,a4,0x30 + 80000740: 0017079b addiw a5,a4,1 + 80000744: 0087979b slliw a5,a5,0x8 + 80000748: 01374733 xor a4,a4,s3 + 8000074c: 7007f793 andi a5,a5,1792 + 80000750: 00e7e7b3 or a5,a5,a4 + 80000754: 00c7f7b3 and a5,a5,a2 + 80000758: 00843703 ld a4,8(s0) + 8000075c: fca6e2e3 bltu a3,a0,80000720 + 80000760: 00f71123 sh a5,2(a4) + 80000764: 0004b783 ld a5,0(s1) + 80000768: 00048413 mv s0,s1 + 8000076c: 0016869b addiw a3,a3,1 + 80000770: fc0792e3 bnez a5,80000734 + 80000774: 02013403 ld s0,32(sp) + 80000778: 02813083 ld ra,40(sp) + 8000077c: 01813483 ld s1,24(sp) + 80000780: 00813983 ld s3,8(sp) + 80000784: 00090513 mv a0,s2 + 80000788: 01013903 ld s2,16(sp) + 8000078c: 00000613 li a2,0 + 80000790: 00000597 auipc a1,0x0 + 80000794: 88058593 addi a1,a1,-1920 # 80000010 + 80000798: 03010113 addi sp,sp,48 + 8000079c: aa1ff06f j 8000023c + 800007a0: 00040693 mv a3,s0 + 800007a4: 00070893 mv a7,a4 + 800007a8: 00000413 li s0,0 + 800007ac: eddff06f j 80000688 + +00000000800007b0 : + 800007b0: 00500793 li a5,5 + 800007b4: 04a7ee63 bltu a5,a0,80000810 + 800007b8: 00003717 auipc a4,0x3 + 800007bc: 41070713 addi a4,a4,1040 # 80003bc8 <_etext+0x4> + 800007c0: 00251513 slli a0,a0,0x2 + 800007c4: 00e50533 add a0,a0,a4 + 800007c8: 00052783 lw a5,0(a0) + 800007cc: 00e787b3 add a5,a5,a4 + 800007d0: 00078067 jr a5 # ffffffffffff8000 <_end+0xffffffff7ffea000> + 800007d4: 00004517 auipc a0,0x4 + 800007d8: 0a452503 lw a0,164(a0) # 80004878 + 800007dc: 00008067 ret + 800007e0: 00004517 auipc a0,0x4 + 800007e4: 09052503 lw a0,144(a0) # 80004870 + 800007e8: 00008067 ret + 800007ec: 00004517 auipc a0,0x4 + 800007f0: 08852503 lw a0,136(a0) # 80004874 + 800007f4: 00008067 ret + 800007f8: 00004517 auipc a0,0x4 + 800007fc: c5c52503 lw a0,-932(a0) # 80004454 + 80000800: 00008067 ret + 80000804: 00004517 auipc a0,0x4 + 80000808: c5452503 lw a0,-940(a0) # 80004458 + 8000080c: 00008067 ret + 80000810: 00000513 li a0,0 + 80000814: 00008067 ret + +0000000080000818 : + 80000818: 00050693 mv a3,a0 + 8000081c: ffffa837 lui a6,0xffffa + 80000820: 00058513 mv a0,a1 + 80000824: 0ff6f613 andi a2,a3,255 + 80000828: 00800793 li a5,8 + 8000082c: 00180813 addi a6,a6,1 # ffffffffffffa001 <_end+0xffffffff7ffec001> + 80000830: 00c54733 xor a4,a0,a2 + 80000834: fff7879b addiw a5,a5,-1 + 80000838: 00155513 srli a0,a0,0x1 + 8000083c: 00177713 andi a4,a4,1 + 80000840: 0ff7f793 andi a5,a5,255 + 80000844: 010545b3 xor a1,a0,a6 + 80000848: 00165613 srli a2,a2,0x1 + 8000084c: 00070663 beqz a4,80000858 + 80000850: 03059513 slli a0,a1,0x30 + 80000854: 03055513 srli a0,a0,0x30 + 80000858: fc079ce3 bnez a5,80000830 + 8000085c: ffffa5b7 lui a1,0xffffa + 80000860: 0086d693 srli a3,a3,0x8 + 80000864: 00800793 li a5,8 + 80000868: 00158593 addi a1,a1,1 # ffffffffffffa001 <_end+0xffffffff7ffec001> + 8000086c: 00d54733 xor a4,a0,a3 + 80000870: fff7879b addiw a5,a5,-1 + 80000874: 00155513 srli a0,a0,0x1 + 80000878: 00177713 andi a4,a4,1 + 8000087c: 0ff7f793 andi a5,a5,255 + 80000880: 00b54633 xor a2,a0,a1 + 80000884: 0016d693 srli a3,a3,0x1 + 80000888: 00070663 beqz a4,80000894 + 8000088c: 03061513 slli a0,a2,0x30 + 80000890: 03055513 srli a0,a0,0x30 + 80000894: fc079ce3 bnez a5,8000086c + 80000898: 00008067 ret + +000000008000089c : + 8000089c: ff010113 addi sp,sp,-16 + 800008a0: 00813023 sd s0,0(sp) + 800008a4: 00050413 mv s0,a0 + 800008a8: 03051513 slli a0,a0,0x30 + 800008ac: 03055513 srli a0,a0,0x30 + 800008b0: 00113423 sd ra,8(sp) + 800008b4: f65ff0ef jal ra,80000818 + 800008b8: 00050593 mv a1,a0 + 800008bc: 0104551b srliw a0,s0,0x10 + 800008c0: 00013403 ld s0,0(sp) + 800008c4: 00813083 ld ra,8(sp) + 800008c8: 01010113 addi sp,sp,16 + 800008cc: f4dff06f j 80000818 + +00000000800008d0 : + 800008d0: 03051513 slli a0,a0,0x30 + 800008d4: 03055513 srli a0,a0,0x30 + 800008d8: f41ff06f j 80000818 + +00000000800008dc : + 800008dc: 00000513 li a0,0 + 800008e0: 00008067 ret + +00000000800008e4 : + 800008e4: f7010113 addi sp,sp,-144 + 800008e8: 07413023 sd s4,96(sp) + 800008ec: 03b13423 sd s11,40(sp) + 800008f0: 08113423 sd ra,136(sp) + 800008f4: 08813023 sd s0,128(sp) + 800008f8: 06913c23 sd s1,120(sp) + 800008fc: 07213823 sd s2,112(sp) + 80000900: 07313423 sd s3,104(sp) + 80000904: 05513c23 sd s5,88(sp) + 80000908: 05613823 sd s6,80(sp) + 8000090c: 05713423 sd s7,72(sp) + 80000910: 05813023 sd s8,64(sp) + 80000914: 03913c23 sd s9,56(sp) + 80000918: 03a13823 sd s10,48(sp) + 8000091c: 00d13c23 sd a3,24(sp) + 80000920: 00050a13 mv s4,a0 + 80000924: 00100d93 li s11,1 + 80000928: 00060463 beqz a2,80000930 + 8000092c: 00060d93 mv s11,a2 + 80000930: fff58593 addi a1,a1,-1 + 80000934: ffc5f493 andi s1,a1,-4 + 80000938: 00448993 addi s3,s1,4 + 8000093c: 00000913 li s2,0 + 80000940: 160a0663 beqz s4,80000aac + 80000944: 0019079b addiw a5,s2,1 + 80000948: 00078593 mv a1,a5 + 8000094c: 00078513 mv a0,a5 + 80000950: 0009041b sext.w s0,s2 + 80000954: 0007891b sext.w s2,a5 + 80000958: 13d010ef jal ra,80002294 <__muldi3> + 8000095c: 0035179b slliw a5,a0,0x3 + 80000960: ff47e2e3 bltu a5,s4,80000944 + 80000964: 00040593 mv a1,s0 + 80000968: 00040513 mv a0,s0 + 8000096c: 129010ef jal ra,80002294 <__muldi3> + 80000970: 02051c13 slli s8,a0,0x20 + 80000974: 01fc5793 srli a5,s8,0x1f + 80000978: 00f13823 sd a5,16(sp) + 8000097c: 00f984b3 add s1,s3,a5 + 80000980: 0004079b sext.w a5,s0 + 80000984: 00f13423 sd a5,8(sp) + 80000988: 14040063 beqz s0,80000ac8 + 8000098c: 00010a37 lui s4,0x10 + 80000990: 00000b93 li s7,0 + 80000994: 00000b13 li s6,0 + 80000998: 00100a93 li s5,1 + 8000099c: fffa0a13 addi s4,s4,-1 # ffff <_entry_offset+0xffff> + 800009a0: fff40d1b addiw s10,s0,-1 + 800009a4: 000a8c93 mv s9,s5 + 800009a8: 00000c13 li s8,0 + 800009ac: 415b893b subw s2,s7,s5 + 800009b0: 000c8593 mv a1,s9 + 800009b4: 000d8513 mv a0,s11 + 800009b8: 0dd010ef jal ra,80002294 <__muldi3> + 800009bc: 0005051b sext.w a0,a0 + 800009c0: 41f5561b sraiw a2,a0,0x1f + 800009c4: 0106561b srliw a2,a2,0x10 + 800009c8: 00a6053b addw a0,a2,a0 + 800009cc: 030c9713 slli a4,s9,0x30 + 800009d0: 01457533 and a0,a0,s4 + 800009d4: 03075713 srli a4,a4,0x30 + 800009d8: 019907bb addw a5,s2,s9 + 800009dc: 40c50dbb subw s11,a0,a2 + 800009e0: 00ed863b addw a2,s11,a4 + 800009e4: 02079793 slli a5,a5,0x20 + 800009e8: 0207d793 srli a5,a5,0x20 + 800009ec: 03061613 slli a2,a2,0x30 + 800009f0: 03065613 srli a2,a2,0x30 + 800009f4: 00179793 slli a5,a5,0x1 + 800009f8: 00f48833 add a6,s1,a5 + 800009fc: 00e6073b addw a4,a2,a4 + 80000a00: 00c81023 sh a2,0(a6) + 80000a04: 00f987b3 add a5,s3,a5 + 80000a08: 0ff77713 andi a4,a4,255 + 80000a0c: 00e79023 sh a4,0(a5) + 80000a10: 001c0c1b addiw s8,s8,1 + 80000a14: 001c8c9b addiw s9,s9,1 + 80000a18: f88c6ce3 bltu s8,s0,800009b0 + 80000a1c: 001a8a9b addiw s5,s5,1 + 80000a20: 00000793 li a5,0 + 80000a24: 00040463 beqz s0,80000a2c + 80000a28: 000d0793 mv a5,s10 + 80000a2c: 001b0b1b addiw s6,s6,1 + 80000a30: 01578abb addw s5,a5,s5 + 80000a34: 01740bbb addw s7,s0,s7 + 80000a38: f68b66e3 bltu s6,s0,800009a4 + 80000a3c: 01013783 ld a5,16(sp) + 80000a40: 01813703 ld a4,24(sp) + 80000a44: 08813083 ld ra,136(sp) + 80000a48: 00f487b3 add a5,s1,a5 + 80000a4c: fff78793 addi a5,a5,-1 + 80000a50: ffc7f793 andi a5,a5,-4 + 80000a54: 00478793 addi a5,a5,4 + 80000a58: 01373423 sd s3,8(a4) + 80000a5c: 00973823 sd s1,16(a4) + 80000a60: 00f73c23 sd a5,24(a4) + 80000a64: 00070793 mv a5,a4 + 80000a68: 00813703 ld a4,8(sp) + 80000a6c: 00040513 mv a0,s0 + 80000a70: 08013403 ld s0,128(sp) + 80000a74: 00e7a023 sw a4,0(a5) + 80000a78: 07813483 ld s1,120(sp) + 80000a7c: 07013903 ld s2,112(sp) + 80000a80: 06813983 ld s3,104(sp) + 80000a84: 06013a03 ld s4,96(sp) + 80000a88: 05813a83 ld s5,88(sp) + 80000a8c: 05013b03 ld s6,80(sp) + 80000a90: 04813b83 ld s7,72(sp) + 80000a94: 04013c03 ld s8,64(sp) + 80000a98: 03813c83 ld s9,56(sp) + 80000a9c: 03013d03 ld s10,48(sp) + 80000aa0: 02813d83 ld s11,40(sp) + 80000aa4: 09010113 addi sp,sp,144 + 80000aa8: 00008067 ret + 80000aac: fff00793 li a5,-1 + 80000ab0: 00f13423 sd a5,8(sp) + 80000ab4: 00200793 li a5,2 + 80000ab8: 00648493 addi s1,s1,6 + 80000abc: fff00413 li s0,-1 + 80000ac0: 00f13823 sd a5,16(sp) + 80000ac4: ec9ff06f j 8000098c + 80000ac8: 00013423 sd zero,8(sp) + 80000acc: f71ff06f j 80000a3c + +0000000080000ad0 : + 80000ad0: 0c050e63 beqz a0,80000bac + 80000ad4: fa010113 addi sp,sp,-96 + 80000ad8: 01713c23 sd s7,24(sp) + 80000adc: fff50b9b addiw s7,a0,-1 + 80000ae0: 020b9b93 slli s7,s7,0x20 + 80000ae4: 01ebdb93 srli s7,s7,0x1e + 80000ae8: 00458793 addi a5,a1,4 + 80000aec: 05213023 sd s2,64(sp) + 80000af0: 03313c23 sd s3,56(sp) + 80000af4: 03413823 sd s4,48(sp) + 80000af8: 03513423 sd s5,40(sp) + 80000afc: 03613023 sd s6,32(sp) + 80000b00: 01813823 sd s8,16(sp) + 80000b04: 04113c23 sd ra,88(sp) + 80000b08: 04813823 sd s0,80(sp) + 80000b0c: 04913423 sd s1,72(sp) + 80000b10: 01913423 sd s9,8(sp) + 80000b14: 00050b13 mv s6,a0 + 80000b18: 00060993 mv s3,a2 + 80000b1c: 00068c13 mv s8,a3 + 80000b20: 00058a13 mv s4,a1 + 80000b24: 00fb8bb3 add s7,s7,a5 + 80000b28: 00050913 mv s2,a0 + 80000b2c: 00000a93 li s5,0 + 80000b30: 000c0493 mv s1,s8 + 80000b34: 000a8413 mv s0,s5 + 80000b38: 00000c93 li s9,0 + 80000b3c: 02041793 slli a5,s0,0x20 + 80000b40: 01f7d793 srli a5,a5,0x1f + 80000b44: 00f987b3 add a5,s3,a5 + 80000b48: 00049583 lh a1,0(s1) + 80000b4c: 00079503 lh a0,0(a5) + 80000b50: 0014041b addiw s0,s0,1 + 80000b54: 00248493 addi s1,s1,2 + 80000b58: 73c010ef jal ra,80002294 <__muldi3> + 80000b5c: 01950cbb addw s9,a0,s9 + 80000b60: fc891ee3 bne s2,s0,80000b3c + 80000b64: 019a2023 sw s9,0(s4) + 80000b68: 004a0a13 addi s4,s4,4 + 80000b6c: 015b0abb addw s5,s6,s5 + 80000b70: 012b093b addw s2,s6,s2 + 80000b74: fb4b9ee3 bne s7,s4,80000b30 + 80000b78: 05813083 ld ra,88(sp) + 80000b7c: 05013403 ld s0,80(sp) + 80000b80: 04813483 ld s1,72(sp) + 80000b84: 04013903 ld s2,64(sp) + 80000b88: 03813983 ld s3,56(sp) + 80000b8c: 03013a03 ld s4,48(sp) + 80000b90: 02813a83 ld s5,40(sp) + 80000b94: 02013b03 ld s6,32(sp) + 80000b98: 01813b83 ld s7,24(sp) + 80000b9c: 01013c03 ld s8,16(sp) + 80000ba0: 00813c83 ld s9,8(sp) + 80000ba4: 06010113 addi sp,sp,96 + 80000ba8: 00008067 ret + 80000bac: 00008067 ret + +0000000080000bb0 : + 80000bb0: 10050e63 beqz a0,80000ccc + 80000bb4: f9010113 addi sp,sp,-112 + 80000bb8: 06813023 sd s0,96(sp) + 80000bbc: 04913c23 sd s1,88(sp) + 80000bc0: 05213823 sd s2,80(sp) + 80000bc4: 05313423 sd s3,72(sp) + 80000bc8: 03613823 sd s6,48(sp) + 80000bcc: 03713423 sd s7,40(sp) + 80000bd0: 03813023 sd s8,32(sp) + 80000bd4: 06113423 sd ra,104(sp) + 80000bd8: 05413023 sd s4,64(sp) + 80000bdc: 03513c23 sd s5,56(sp) + 80000be0: 01913c23 sd s9,24(sp) + 80000be4: 01a13823 sd s10,16(sp) + 80000be8: 01b13423 sd s11,8(sp) + 80000bec: 00050413 mv s0,a0 + 80000bf0: 00058b93 mv s7,a1 + 80000bf4: 00060993 mv s3,a2 + 80000bf8: 00068913 mv s2,a3 + 80000bfc: 00050493 mv s1,a0 + 80000c00: 00000b13 li s6,0 + 80000c04: 00000c13 li s8,0 + 80000c08: 00000a93 li s5,0 + 80000c0c: 016a8a3b addw s4,s5,s6 + 80000c10: 020a1a13 slli s4,s4,0x20 + 80000c14: 01ea5a13 srli s4,s4,0x1e + 80000c18: 014b8a33 add s4,s7,s4 + 80000c1c: 000a8d13 mv s10,s5 + 80000c20: 000b0c93 mv s9,s6 + 80000c24: 00000d93 li s11,0 + 80000c28: 020c9793 slli a5,s9,0x20 + 80000c2c: 020d1713 slli a4,s10,0x20 + 80000c30: 0207d793 srli a5,a5,0x20 + 80000c34: 02075713 srli a4,a4,0x20 + 80000c38: 00179793 slli a5,a5,0x1 + 80000c3c: 00171713 slli a4,a4,0x1 + 80000c40: 00f987b3 add a5,s3,a5 + 80000c44: 00e90733 add a4,s2,a4 + 80000c48: 00071583 lh a1,0(a4) + 80000c4c: 00079503 lh a0,0(a5) + 80000c50: 001c8c9b addiw s9,s9,1 + 80000c54: 01a40d3b addw s10,s0,s10 + 80000c58: 63c010ef jal ra,80002294 <__muldi3> + 80000c5c: 01b50dbb addw s11,a0,s11 + 80000c60: fd9494e3 bne s1,s9,80000c28 + 80000c64: 01ba2023 sw s11,0(s4) + 80000c68: 001a879b addiw a5,s5,1 + 80000c6c: 00f40663 beq s0,a5,80000c78 + 80000c70: 00078a93 mv s5,a5 + 80000c74: f99ff06f j 80000c0c + 80000c78: 001c079b addiw a5,s8,1 + 80000c7c: 01640b3b addw s6,s0,s6 + 80000c80: 009404bb addw s1,s0,s1 + 80000c84: 015c0663 beq s8,s5,80000c90 + 80000c88: 00078c13 mv s8,a5 + 80000c8c: f7dff06f j 80000c08 + 80000c90: 06813083 ld ra,104(sp) + 80000c94: 06013403 ld s0,96(sp) + 80000c98: 05813483 ld s1,88(sp) + 80000c9c: 05013903 ld s2,80(sp) + 80000ca0: 04813983 ld s3,72(sp) + 80000ca4: 04013a03 ld s4,64(sp) + 80000ca8: 03813a83 ld s5,56(sp) + 80000cac: 03013b03 ld s6,48(sp) + 80000cb0: 02813b83 ld s7,40(sp) + 80000cb4: 02013c03 ld s8,32(sp) + 80000cb8: 01813c83 ld s9,24(sp) + 80000cbc: 01013d03 ld s10,16(sp) + 80000cc0: 00813d83 ld s11,8(sp) + 80000cc4: 07010113 addi sp,sp,112 + 80000cc8: 00008067 ret + 80000ccc: 00008067 ret + +0000000080000cd0 : + 80000cd0: 12050863 beqz a0,80000e00 + 80000cd4: f9010113 addi sp,sp,-112 + 80000cd8: 06813023 sd s0,96(sp) + 80000cdc: 04913c23 sd s1,88(sp) + 80000ce0: 05213823 sd s2,80(sp) + 80000ce4: 05313423 sd s3,72(sp) + 80000ce8: 03613823 sd s6,48(sp) + 80000cec: 03713423 sd s7,40(sp) + 80000cf0: 03813023 sd s8,32(sp) + 80000cf4: 06113423 sd ra,104(sp) + 80000cf8: 05413023 sd s4,64(sp) + 80000cfc: 03513c23 sd s5,56(sp) + 80000d00: 01913c23 sd s9,24(sp) + 80000d04: 01a13823 sd s10,16(sp) + 80000d08: 01b13423 sd s11,8(sp) + 80000d0c: 00050413 mv s0,a0 + 80000d10: 00058b93 mv s7,a1 + 80000d14: 00060993 mv s3,a2 + 80000d18: 00068913 mv s2,a3 + 80000d1c: 00050493 mv s1,a0 + 80000d20: 00000b13 li s6,0 + 80000d24: 00000c13 li s8,0 + 80000d28: 00000a93 li s5,0 + 80000d2c: 016a8a3b addw s4,s5,s6 + 80000d30: 020a1a13 slli s4,s4,0x20 + 80000d34: 01ea5a13 srli s4,s4,0x1e + 80000d38: 014b8a33 add s4,s7,s4 + 80000d3c: 000a8d13 mv s10,s5 + 80000d40: 000b0c93 mv s9,s6 + 80000d44: 00000d93 li s11,0 + 80000d48: 020c9793 slli a5,s9,0x20 + 80000d4c: 020d1713 slli a4,s10,0x20 + 80000d50: 0207d793 srli a5,a5,0x20 + 80000d54: 02075713 srli a4,a4,0x20 + 80000d58: 00179793 slli a5,a5,0x1 + 80000d5c: 00171713 slli a4,a4,0x1 + 80000d60: 00f987b3 add a5,s3,a5 + 80000d64: 00e90733 add a4,s2,a4 + 80000d68: 00071583 lh a1,0(a4) + 80000d6c: 00079503 lh a0,0(a5) + 80000d70: 001c8c9b addiw s9,s9,1 + 80000d74: 01a40d3b addw s10,s0,s10 + 80000d78: 51c010ef jal ra,80002294 <__muldi3> + 80000d7c: 4025579b sraiw a5,a0,0x2 + 80000d80: 4055559b sraiw a1,a0,0x5 + 80000d84: 07f5f593 andi a1,a1,127 + 80000d88: 00f7f513 andi a0,a5,15 + 80000d8c: 508010ef jal ra,80002294 <__muldi3> + 80000d90: 01b50dbb addw s11,a0,s11 + 80000d94: fb949ae3 bne s1,s9,80000d48 + 80000d98: 01ba2023 sw s11,0(s4) + 80000d9c: 001a879b addiw a5,s5,1 + 80000da0: 00f40663 beq s0,a5,80000dac + 80000da4: 00078a93 mv s5,a5 + 80000da8: f85ff06f j 80000d2c + 80000dac: 001c079b addiw a5,s8,1 + 80000db0: 01640b3b addw s6,s0,s6 + 80000db4: 009404bb addw s1,s0,s1 + 80000db8: 015c0663 beq s8,s5,80000dc4 + 80000dbc: 00078c13 mv s8,a5 + 80000dc0: f69ff06f j 80000d28 + 80000dc4: 06813083 ld ra,104(sp) + 80000dc8: 06013403 ld s0,96(sp) + 80000dcc: 05813483 ld s1,88(sp) + 80000dd0: 05013903 ld s2,80(sp) + 80000dd4: 04813983 ld s3,72(sp) + 80000dd8: 04013a03 ld s4,64(sp) + 80000ddc: 03813a83 ld s5,56(sp) + 80000de0: 03013b03 ld s6,48(sp) + 80000de4: 02813b83 ld s7,40(sp) + 80000de8: 02013c03 ld s8,32(sp) + 80000dec: 01813c83 ld s9,24(sp) + 80000df0: 01013d03 ld s10,16(sp) + 80000df4: 00813d83 ld s11,8(sp) + 80000df8: 07010113 addi sp,sp,112 + 80000dfc: 00008067 ret + 80000e00: 00008067 ret + +0000000080000e04 : + 80000e04: f8010113 addi sp,sp,-128 + 80000e08: 05313c23 sd s3,88(sp) + 80000e0c: fffff9b7 lui s3,0xfffff + 80000e10: 013767b3 or a5,a4,s3 + 80000e14: 05413823 sd s4,80(sp) + 80000e18: 05613023 sd s6,64(sp) + 80000e1c: 01b13c23 sd s11,24(sp) + 80000e20: 06113c23 sd ra,120(sp) + 80000e24: 06813823 sd s0,112(sp) + 80000e28: 06913423 sd s1,104(sp) + 80000e2c: 07213023 sd s2,96(sp) + 80000e30: 05513423 sd s5,72(sp) + 80000e34: 03713c23 sd s7,56(sp) + 80000e38: 03813823 sd s8,48(sp) + 80000e3c: 03913423 sd s9,40(sp) + 80000e40: 03a13023 sd s10,32(sp) + 80000e44: 00f13423 sd a5,8(sp) + 80000e48: 00058d93 mv s11,a1 + 80000e4c: 00060a13 mv s4,a2 + 80000e50: 00068b13 mv s6,a3 + 80000e54: 3a050c63 beqz a0,8000120c + 80000e58: 03071413 slli s0,a4,0x30 + 80000e5c: 00050813 mv a6,a0 + 80000e60: 00050593 mv a1,a0 + 80000e64: 03045413 srli s0,s0,0x30 + 80000e68: 00000513 li a0,0 + 80000e6c: 00000c13 li s8,0 + 80000e70: 00050693 mv a3,a0 + 80000e74: 02069793 slli a5,a3,0x20 + 80000e78: 01f7d793 srli a5,a5,0x1f + 80000e7c: 00fa07b3 add a5,s4,a5 + 80000e80: 0007d603 lhu a2,0(a5) + 80000e84: 0016869b addiw a3,a3,1 + 80000e88: 0086063b addw a2,a2,s0 + 80000e8c: 00c79023 sh a2,0(a5) + 80000e90: fed592e3 bne a1,a3,80000e74 + 80000e94: 001c091b addiw s2,s8,1 + 80000e98: 00a8053b addw a0,a6,a0 + 80000e9c: 00b805bb addw a1,a6,a1 + 80000ea0: 01280663 beq a6,s2,80000eac + 80000ea4: 00090c13 mv s8,s2 + 80000ea8: fc9ff06f j 80000e70 + 80000eac: 00070b9b sext.w s7,a4 + 80000eb0: 00090a93 mv s5,s2 + 80000eb4: 00000c93 li s9,0 + 80000eb8: 00000d13 li s10,0 + 80000ebc: 000c8993 mv s3,s9 + 80000ec0: 02099793 slli a5,s3,0x20 + 80000ec4: 0207d793 srli a5,a5,0x20 + 80000ec8: 00179693 slli a3,a5,0x1 + 80000ecc: 00da06b3 add a3,s4,a3 + 80000ed0: 00069583 lh a1,0(a3) + 80000ed4: 00279793 slli a5,a5,0x2 + 80000ed8: 000b8513 mv a0,s7 + 80000edc: 00fd84b3 add s1,s11,a5 + 80000ee0: 3b4010ef jal ra,80002294 <__muldi3> + 80000ee4: 00a4a023 sw a0,0(s1) + 80000ee8: 0019899b addiw s3,s3,1 + 80000eec: fd3a9ae3 bne s5,s3,80000ec0 + 80000ef0: 001d079b addiw a5,s10,1 + 80000ef4: 01990cbb addw s9,s2,s9 + 80000ef8: 01590abb addw s5,s2,s5 + 80000efc: 018d0663 beq s10,s8,80000f08 + 80000f00: 00078d13 mv s10,a5 + 80000f04: fb9ff06f j 80000ebc + 80000f08: 00812983 lw s3,8(sp) + 80000f0c: 00090813 mv a6,s2 + 80000f10: 00000893 li a7,0 + 80000f14: 00000513 li a0,0 + 80000f18: 00000613 li a2,0 + 80000f1c: 00000593 li a1,0 + 80000f20: 00000313 li t1,0 + 80000f24: 00088693 mv a3,a7 + 80000f28: 0180006f j 80000f40 + 80000f2c: 0107951b slliw a0,a5,0x10 + 80000f30: 0016869b addiw a3,a3,1 + 80000f34: 4105551b sraiw a0,a0,0x10 + 80000f38: 00000593 li a1,0 + 80000f3c: 04d80263 beq a6,a3,80000f80 + 80000f40: 02069793 slli a5,a3,0x20 + 80000f44: 01e7d793 srli a5,a5,0x1e + 80000f48: 00fd87b3 add a5,s11,a5 + 80000f4c: 00060713 mv a4,a2 + 80000f50: 0007a603 lw a2,0(a5) + 80000f54: 03051513 slli a0,a0,0x30 + 80000f58: 03055513 srli a0,a0,0x30 + 80000f5c: 00c72733 slt a4,a4,a2 + 80000f60: 00b605bb addw a1,a2,a1 + 80000f64: 00a5079b addiw a5,a0,10 + 80000f68: 00a7073b addw a4,a4,a0 + 80000f6c: fcb9c0e3 blt s3,a1,80000f2c + 80000f70: 0107151b slliw a0,a4,0x10 + 80000f74: 0016869b addiw a3,a3,1 + 80000f78: 4105551b sraiw a0,a0,0x10 + 80000f7c: fcd812e3 bne a6,a3,80000f40 + 80000f80: 0013079b addiw a5,t1,1 + 80000f84: 0109083b addw a6,s2,a6 + 80000f88: 011908bb addw a7,s2,a7 + 80000f8c: 01830663 beq t1,s8,80000f98 + 80000f90: 00078313 mv t1,a5 + 80000f94: f91ff06f j 80000f24 + 80000f98: 00000593 li a1,0 + 80000f9c: 935ff0ef jal ra,800008d0 + 80000fa0: 000a0613 mv a2,s4 + 80000fa4: 000d8593 mv a1,s11 + 80000fa8: 00050493 mv s1,a0 + 80000fac: 000b0693 mv a3,s6 + 80000fb0: 00090513 mv a0,s2 + 80000fb4: b1dff0ef jal ra,80000ad0 + 80000fb8: 00090813 mv a6,s2 + 80000fbc: 00000893 li a7,0 + 80000fc0: 00000513 li a0,0 + 80000fc4: 00000613 li a2,0 + 80000fc8: 00000593 li a1,0 + 80000fcc: 00000313 li t1,0 + 80000fd0: 00088693 mv a3,a7 + 80000fd4: 0180006f j 80000fec + 80000fd8: 0107951b slliw a0,a5,0x10 + 80000fdc: 0016869b addiw a3,a3,1 + 80000fe0: 4105551b sraiw a0,a0,0x10 + 80000fe4: 00000593 li a1,0 + 80000fe8: 04d80263 beq a6,a3,8000102c + 80000fec: 02069793 slli a5,a3,0x20 + 80000ff0: 01e7d793 srli a5,a5,0x1e + 80000ff4: 00fd87b3 add a5,s11,a5 + 80000ff8: 00060713 mv a4,a2 + 80000ffc: 0007a603 lw a2,0(a5) + 80001000: 03051513 slli a0,a0,0x30 + 80001004: 03055513 srli a0,a0,0x30 + 80001008: 00c72733 slt a4,a4,a2 + 8000100c: 00b605bb addw a1,a2,a1 + 80001010: 00a5079b addiw a5,a0,10 + 80001014: 00a7073b addw a4,a4,a0 + 80001018: fcb9c0e3 blt s3,a1,80000fd8 + 8000101c: 0107151b slliw a0,a4,0x10 + 80001020: 0016869b addiw a3,a3,1 + 80001024: 4105551b sraiw a0,a0,0x10 + 80001028: fcd812e3 bne a6,a3,80000fec + 8000102c: 0013079b addiw a5,t1,1 + 80001030: 0109083b addw a6,s2,a6 + 80001034: 011908bb addw a7,s2,a7 + 80001038: 01830663 beq t1,s8,80001044 + 8000103c: 00078313 mv t1,a5 + 80001040: f91ff06f j 80000fd0 + 80001044: 00048593 mv a1,s1 + 80001048: 889ff0ef jal ra,800008d0 + 8000104c: 000a0613 mv a2,s4 + 80001050: 000d8593 mv a1,s11 + 80001054: 00050493 mv s1,a0 + 80001058: 000b0693 mv a3,s6 + 8000105c: 00090513 mv a0,s2 + 80001060: b51ff0ef jal ra,80000bb0 + 80001064: 00000813 li a6,0 + 80001068: 00000513 li a0,0 + 8000106c: 00000613 li a2,0 + 80001070: 00000593 li a1,0 + 80001074: 00000893 li a7,0 + 80001078: 00000693 li a3,0 + 8000107c: 0180006f j 80001094 + 80001080: 0107951b slliw a0,a5,0x10 + 80001084: 0016869b addiw a3,a3,1 + 80001088: 4105551b sraiw a0,a0,0x10 + 8000108c: 00000593 li a1,0 + 80001090: 0526f463 bgeu a3,s2,800010d8 + 80001094: 010687bb addw a5,a3,a6 + 80001098: 02079793 slli a5,a5,0x20 + 8000109c: 01e7d793 srli a5,a5,0x1e + 800010a0: 00fd87b3 add a5,s11,a5 + 800010a4: 00060713 mv a4,a2 + 800010a8: 0007a603 lw a2,0(a5) + 800010ac: 03051513 slli a0,a0,0x30 + 800010b0: 03055513 srli a0,a0,0x30 + 800010b4: 00c72733 slt a4,a4,a2 + 800010b8: 00b605bb addw a1,a2,a1 + 800010bc: 00a5079b addiw a5,a0,10 + 800010c0: 00a7073b addw a4,a4,a0 + 800010c4: fab9cee3 blt s3,a1,80001080 + 800010c8: 0107151b slliw a0,a4,0x10 + 800010cc: 0016869b addiw a3,a3,1 + 800010d0: 4105551b sraiw a0,a0,0x10 + 800010d4: fd26e0e3 bltu a3,s2,80001094 + 800010d8: 0018889b addiw a7,a7,1 + 800010dc: 0109083b addw a6,s2,a6 + 800010e0: f928ece3 bltu a7,s2,80001078 + 800010e4: 00048593 mv a1,s1 + 800010e8: fe8ff0ef jal ra,800008d0 + 800010ec: 000a0613 mv a2,s4 + 800010f0: 000d8593 mv a1,s11 + 800010f4: 00050493 mv s1,a0 + 800010f8: 000b0693 mv a3,s6 + 800010fc: 00090513 mv a0,s2 + 80001100: bd1ff0ef jal ra,80000cd0 + 80001104: 00000813 li a6,0 + 80001108: 00000513 li a0,0 + 8000110c: 00000613 li a2,0 + 80001110: 00000593 li a1,0 + 80001114: 00000893 li a7,0 + 80001118: 00000693 li a3,0 + 8000111c: 0180006f j 80001134 + 80001120: 0107951b slliw a0,a5,0x10 + 80001124: 0016869b addiw a3,a3,1 + 80001128: 4105551b sraiw a0,a0,0x10 + 8000112c: 00000593 li a1,0 + 80001130: 0526f463 bgeu a3,s2,80001178 + 80001134: 010687bb addw a5,a3,a6 + 80001138: 02079793 slli a5,a5,0x20 + 8000113c: 01e7d793 srli a5,a5,0x1e + 80001140: 00fd87b3 add a5,s11,a5 + 80001144: 00060713 mv a4,a2 + 80001148: 0007a603 lw a2,0(a5) + 8000114c: 03051513 slli a0,a0,0x30 + 80001150: 03055513 srli a0,a0,0x30 + 80001154: 00c72733 slt a4,a4,a2 + 80001158: 00b605bb addw a1,a2,a1 + 8000115c: 00a5079b addiw a5,a0,10 + 80001160: 00a7073b addw a4,a4,a0 + 80001164: fab9cee3 blt s3,a1,80001120 + 80001168: 0107151b slliw a0,a4,0x10 + 8000116c: 0016869b addiw a3,a3,1 + 80001170: 4105551b sraiw a0,a0,0x10 + 80001174: fd26e0e3 bltu a3,s2,80001134 + 80001178: 0018889b addiw a7,a7,1 + 8000117c: 0109083b addw a6,s2,a6 + 80001180: f928ece3 bltu a7,s2,80001118 + 80001184: 00048593 mv a1,s1 + 80001188: f48ff0ef jal ra,800008d0 + 8000118c: 00000613 li a2,0 + 80001190: 00000593 li a1,0 + 80001194: 00000713 li a4,0 + 80001198: 00c707bb addw a5,a4,a2 + 8000119c: 02079793 slli a5,a5,0x20 + 800011a0: 01f7d793 srli a5,a5,0x1f + 800011a4: 00fa07b3 add a5,s4,a5 + 800011a8: 0007d683 lhu a3,0(a5) + 800011ac: 0017071b addiw a4,a4,1 + 800011b0: 408686bb subw a3,a3,s0 + 800011b4: 00d79023 sh a3,0(a5) + 800011b8: ff2760e3 bltu a4,s2,80001198 + 800011bc: 0015859b addiw a1,a1,1 + 800011c0: 00c9063b addw a2,s2,a2 + 800011c4: fd25e8e3 bltu a1,s2,80001194 + 800011c8: 07813083 ld ra,120(sp) + 800011cc: 07013403 ld s0,112(sp) + 800011d0: 0105151b slliw a0,a0,0x10 + 800011d4: 06813483 ld s1,104(sp) + 800011d8: 06013903 ld s2,96(sp) + 800011dc: 05813983 ld s3,88(sp) + 800011e0: 05013a03 ld s4,80(sp) + 800011e4: 04813a83 ld s5,72(sp) + 800011e8: 04013b03 ld s6,64(sp) + 800011ec: 03813b83 ld s7,56(sp) + 800011f0: 03013c03 ld s8,48(sp) + 800011f4: 02813c83 ld s9,40(sp) + 800011f8: 02013d03 ld s10,32(sp) + 800011fc: 01813d83 ld s11,24(sp) + 80001200: 4105551b sraiw a0,a0,0x10 + 80001204: 08010113 addi sp,sp,128 + 80001208: 00008067 ret + 8000120c: 00000593 li a1,0 + 80001210: ec0ff0ef jal ra,800008d0 + 80001214: 000b0693 mv a3,s6 + 80001218: 000a0613 mv a2,s4 + 8000121c: 00050413 mv s0,a0 + 80001220: 000d8593 mv a1,s11 + 80001224: 00000513 li a0,0 + 80001228: 8a9ff0ef jal ra,80000ad0 + 8000122c: 00040593 mv a1,s0 + 80001230: 00000513 li a0,0 + 80001234: e9cff0ef jal ra,800008d0 + 80001238: 000b0693 mv a3,s6 + 8000123c: 000a0613 mv a2,s4 + 80001240: 00050413 mv s0,a0 + 80001244: 000d8593 mv a1,s11 + 80001248: 00000513 li a0,0 + 8000124c: 965ff0ef jal ra,80000bb0 + 80001250: 00040593 mv a1,s0 + 80001254: 00000513 li a0,0 + 80001258: e78ff0ef jal ra,800008d0 + 8000125c: 00050413 mv s0,a0 + 80001260: 000d8593 mv a1,s11 + 80001264: 000b0693 mv a3,s6 + 80001268: 000a0613 mv a2,s4 + 8000126c: 00000513 li a0,0 + 80001270: a61ff0ef jal ra,80000cd0 + 80001274: 00040593 mv a1,s0 + 80001278: 00000513 li a0,0 + 8000127c: e54ff0ef jal ra,800008d0 + 80001280: f49ff06f j 800011c8 + +0000000080001284 : + 80001284: ff010113 addi sp,sp,-16 + 80001288: 00813023 sd s0,0(sp) + 8000128c: 01053683 ld a3,16(a0) + 80001290: 00060413 mv s0,a2 + 80001294: 00058713 mv a4,a1 + 80001298: 00853603 ld a2,8(a0) + 8000129c: 01853583 ld a1,24(a0) + 800012a0: 00052503 lw a0,0(a0) + 800012a4: 00113423 sd ra,8(sp) + 800012a8: b5dff0ef jal ra,80000e04 + 800012ac: 00040593 mv a1,s0 + 800012b0: 00013403 ld s0,0(sp) + 800012b4: 00813083 ld ra,8(sp) + 800012b8: 01010113 addi sp,sp,16 + 800012bc: e14ff06f j 800008d0 + +00000000800012c0 : + 800012c0: fd010113 addi sp,sp,-48 + 800012c4: fff5081b addiw a6,a0,-1 + 800012c8: 02813423 sd s0,40(sp) + 800012cc: 02913023 sd s1,32(sp) + 800012d0: 01213c23 sd s2,24(sp) + 800012d4: 01313823 sd s3,16(sp) + 800012d8: 01413423 sd s4,8(sp) + 800012dc: 00100713 li a4,1 + 800012e0: 00080e93 mv t4,a6 + 800012e4: 17077a63 bgeu a4,a6,80001458 + 800012e8: 0015859b addiw a1,a1,1 + 800012ec: 03059693 slli a3,a1,0x30 + 800012f0: 0306d693 srli a3,a3,0x30 + 800012f4: 0036d793 srli a5,a3,0x3 + 800012f8: 00700313 li t1,7 + 800012fc: 0076f493 andi s1,a3,7 + 80001300: 00000413 li s0,0 + 80001304: 00003397 auipc t2,0x3 + 80001308: 9bc38393 addi t2,t2,-1604 # 80003cc0 + 8000130c: 00400893 li a7,4 + 80001310: 00003297 auipc t0,0x3 + 80001314: a1028293 addi t0,t0,-1520 # 80003d20 + 80001318: 00100593 li a1,1 + 8000131c: 00003f97 auipc t6,0x3 + 80001320: 9c4f8f93 addi t6,t6,-1596 # 80003ce0 + 80001324: 00003f17 auipc t5,0x3 + 80001328: 9dcf0f13 addi t5,t5,-1572 # 80003d00 + 8000132c: 02c00e13 li t3,44 + 80001330: 0037f793 andi a5,a5,3 + 80001334: 08648663 beq s1,t1,800013c0 + 80001338: 1098e463 bltu a7,s1,80001440 + 8000133c: ffd4871b addiw a4,s1,-3 + 80001340: 03071713 slli a4,a4,0x30 + 80001344: 03075713 srli a4,a4,0x30 + 80001348: 00379793 slli a5,a5,0x3 + 8000134c: 0ee5e063 bltu a1,a4,8000142c + 80001350: 00ff87b3 add a5,t6,a5 + 80001354: 0007b783 ld a5,0(a5) + 80001358: 00900913 li s2,9 + 8000135c: 00800493 li s1,8 + 80001360: 0124093b addw s2,s0,s2 + 80001364: 07097c63 bgeu s2,a6,800013dc + 80001368: 02041a13 slli s4,s0,0x20 + 8000136c: 020a5a13 srli s4,s4,0x20 + 80001370: 02049413 slli s0,s1,0x20 + 80001374: 01460733 add a4,a2,s4 + 80001378: 02045413 srli s0,s0,0x20 + 8000137c: 009784b3 add s1,a5,s1 + 80001380: 0007c983 lbu s3,0(a5) + 80001384: 00178793 addi a5,a5,1 + 80001388: 00170713 addi a4,a4,1 + 8000138c: ff370fa3 sb s3,-1(a4) + 80001390: fef498e3 bne s1,a5,80001380 + 80001394: 0016869b addiw a3,a3,1 + 80001398: 008607b3 add a5,a2,s0 + 8000139c: 03069693 slli a3,a3,0x30 + 800013a0: 01478433 add s0,a5,s4 + 800013a4: 0306d693 srli a3,a3,0x30 + 800013a8: 01c40023 sb t3,0(s0) + 800013ac: 0036d793 srli a5,a3,0x3 + 800013b0: 0076f493 andi s1,a3,7 + 800013b4: 00090413 mv s0,s2 + 800013b8: 0037f793 andi a5,a5,3 + 800013bc: f6649ee3 bne s1,t1,80001338 + 800013c0: 00379793 slli a5,a5,0x3 + 800013c4: 00900913 li s2,9 + 800013c8: 00f387b3 add a5,t2,a5 + 800013cc: 0124093b addw s2,s0,s2 + 800013d0: 0007b783 ld a5,0(a5) + 800013d4: 00800493 li s1,8 + 800013d8: f90968e3 bltu s2,a6,80001368 + 800013dc: 02a47a63 bgeu s0,a0,80001410 + 800013e0: 02041793 slli a5,s0,0x20 + 800013e4: 408e8ebb subw t4,t4,s0 + 800013e8: 0207d793 srli a5,a5,0x20 + 800013ec: 00160713 addi a4,a2,1 + 800013f0: 020e9e93 slli t4,t4,0x20 + 800013f4: 00f70733 add a4,a4,a5 + 800013f8: 020ede93 srli t4,t4,0x20 + 800013fc: 00f607b3 add a5,a2,a5 + 80001400: 01d70733 add a4,a4,t4 + 80001404: 00078023 sb zero,0(a5) + 80001408: 00178793 addi a5,a5,1 + 8000140c: fef71ce3 bne a4,a5,80001404 + 80001410: 02813403 ld s0,40(sp) + 80001414: 02013483 ld s1,32(sp) + 80001418: 01813903 ld s2,24(sp) + 8000141c: 01013983 ld s3,16(sp) + 80001420: 00813a03 ld s4,8(sp) + 80001424: 03010113 addi sp,sp,48 + 80001428: 00008067 ret + 8000142c: 00ff07b3 add a5,t5,a5 + 80001430: 0007b783 ld a5,0(a5) + 80001434: 00500913 li s2,5 + 80001438: 00400493 li s1,4 + 8000143c: f25ff06f j 80001360 + 80001440: 00379793 slli a5,a5,0x3 + 80001444: 00f287b3 add a5,t0,a5 + 80001448: 0007b783 ld a5,0(a5) + 8000144c: 00900913 li s2,9 + 80001450: 00800493 li s1,8 + 80001454: f0dff06f j 80001360 + 80001458: 00000413 li s0,0 + 8000145c: f85ff06f j 800013e0 + +0000000080001460 : + 80001460: 00053783 ld a5,0(a0) + 80001464: 00050e13 mv t3,a0 + 80001468: 00000513 li a0,0 + 8000146c: 0007c703 lbu a4,0(a5) + 80001470: 00078813 mv a6,a5 + 80001474: 0c070c63 beqz a4,8000154c + 80001478: 02c00693 li a3,44 + 8000147c: 00178813 addi a6,a5,1 + 80001480: 2ad70863 beq a4,a3,80001730 + 80001484: 0005a503 lw a0,0(a1) + 80001488: fd07061b addiw a2,a4,-48 + 8000148c: 0ff67613 andi a2,a2,255 + 80001490: 00900893 li a7,9 + 80001494: 0015051b addiw a0,a0,1 + 80001498: 0ac8ee63 bltu a7,a2,80001554 + 8000149c: 00a5a023 sw a0,0(a1) + 800014a0: 0017c883 lbu a7,1(a5) + 800014a4: 16088063 beqz a7,80001604 + 800014a8: 00278713 addi a4,a5,2 + 800014ac: 14d88a63 beq a7,a3,80001600 + 800014b0: fd08851b addiw a0,a7,-48 + 800014b4: 02e00793 li a5,46 + 800014b8: 00900693 li a3,9 + 800014bc: 02c00613 li a2,44 + 800014c0: 0ff57513 andi a0,a0,255 + 800014c4: 02f88663 beq a7,a5,800014f0 + 800014c8: 0ca6e063 bltu a3,a0,80001588 + 800014cc: 00184883 lbu a7,1(a6) + 800014d0: 00170513 addi a0,a4,1 + 800014d4: 00070813 mv a6,a4 + 800014d8: 12088463 beqz a7,80001600 + 800014dc: 28c88863 beq a7,a2,8000176c + 800014e0: 00050713 mv a4,a0 + 800014e4: fd08851b addiw a0,a7,-48 + 800014e8: 0ff57513 andi a0,a0,255 + 800014ec: fcf89ee3 bne a7,a5,800014c8 + 800014f0: 0105a783 lw a5,16(a1) + 800014f4: 00500513 li a0,5 + 800014f8: 0017879b addiw a5,a5,1 + 800014fc: 00f5a823 sw a5,16(a1) + 80001500: 00184303 lbu t1,1(a6) + 80001504: 00070813 mv a6,a4 + 80001508: 04030263 beqz t1,8000154c + 8000150c: 02c00793 li a5,44 + 80001510: 00170893 addi a7,a4,1 + 80001514: 20f30863 beq t1,a5,80001724 + 80001518: 04500793 li a5,69 + 8000151c: 00900693 li a3,9 + 80001520: 02c00613 li a2,44 + 80001524: fd03051b addiw a0,t1,-48 + 80001528: 0df37313 andi t1,t1,223 + 8000152c: 0ff57513 andi a0,a0,255 + 80001530: 0cf30e63 beq t1,a5,8000160c + 80001534: 1aa6f063 bgeu a3,a0,800016d4 + 80001538: 0145a783 lw a5,20(a1) + 8000153c: 00088813 mv a6,a7 + 80001540: 00100513 li a0,1 + 80001544: 0017879b addiw a5,a5,1 + 80001548: 00f5aa23 sw a5,20(a1) + 8000154c: 010e3023 sd a6,0(t3) + 80001550: 00008067 ret + 80001554: 02b00613 li a2,43 + 80001558: 04c70663 beq a4,a2,800015a4 + 8000155c: 02d00613 li a2,45 + 80001560: 04c70263 beq a4,a2,800015a4 + 80001564: 02e00613 li a2,46 + 80001568: 18c70463 beq a4,a2,800016f0 + 8000156c: 0045a783 lw a5,4(a1) + 80001570: 00a5a023 sw a0,0(a1) + 80001574: 00100513 li a0,1 + 80001578: 0017879b addiw a5,a5,1 + 8000157c: 00f5a223 sw a5,4(a1) + 80001580: 010e3023 sd a6,0(t3) + 80001584: 00008067 ret + 80001588: 0105a783 lw a5,16(a1) + 8000158c: 00070813 mv a6,a4 + 80001590: 00100513 li a0,1 + 80001594: 0017879b addiw a5,a5,1 + 80001598: 00f5a823 sw a5,16(a1) + 8000159c: 010e3023 sd a6,0(t3) + 800015a0: 00008067 ret + 800015a4: 00a5a023 sw a0,0(a1) + 800015a8: 0017c603 lbu a2,1(a5) + 800015ac: 1a060663 beqz a2,80001758 + 800015b0: 00278813 addi a6,a5,2 + 800015b4: 1ad60263 beq a2,a3,80001758 + 800015b8: 0085a683 lw a3,8(a1) + 800015bc: fd06071b addiw a4,a2,-48 + 800015c0: 0ff77713 andi a4,a4,255 + 800015c4: 00900513 li a0,9 + 800015c8: 0016869b addiw a3,a3,1 + 800015cc: 00e57e63 bgeu a0,a4,800015e8 + 800015d0: 02e00713 li a4,46 + 800015d4: 12e60c63 beq a2,a4,8000170c + 800015d8: 00d5a423 sw a3,8(a1) + 800015dc: 00100513 li a0,1 + 800015e0: 010e3023 sd a6,0(t3) + 800015e4: 00008067 ret + 800015e8: 00d5a423 sw a3,8(a1) + 800015ec: 0027c883 lbu a7,2(a5) + 800015f0: 00088a63 beqz a7,80001604 + 800015f4: 02c00793 li a5,44 + 800015f8: 00180713 addi a4,a6,1 + 800015fc: eaf89ae3 bne a7,a5,800014b0 + 80001600: 00070813 mv a6,a4 + 80001604: 00400513 li a0,4 + 80001608: f45ff06f j 8000154c + 8000160c: 0145a783 lw a5,20(a1) + 80001610: 0017879b addiw a5,a5,1 + 80001614: 00f5aa23 sw a5,20(a1) + 80001618: 00174783 lbu a5,1(a4) + 8000161c: 12078463 beqz a5,80001744 + 80001620: 02c00693 li a3,44 + 80001624: 00188813 addi a6,a7,1 + 80001628: 12d78063 beq a5,a3,80001748 + 8000162c: 00c5a703 lw a4,12(a1) + 80001630: fd57879b addiw a5,a5,-43 + 80001634: 0fd7f793 andi a5,a5,253 + 80001638: 0017071b addiw a4,a4,1 + 8000163c: 00e5a623 sw a4,12(a1) + 80001640: 00078863 beqz a5,80001650 + 80001644: 00100513 li a0,1 + 80001648: 010e3023 sd a6,0(t3) + 8000164c: 00008067 ret + 80001650: 0018c783 lbu a5,1(a7) + 80001654: 0e078e63 beqz a5,80001750 + 80001658: 00288813 addi a6,a7,2 + 8000165c: 0ed78a63 beq a5,a3,80001750 + 80001660: 0185a703 lw a4,24(a1) + 80001664: fd07879b addiw a5,a5,-48 + 80001668: 0ff7f793 andi a5,a5,255 + 8000166c: 0017071b addiw a4,a4,1 + 80001670: 00900613 li a2,9 + 80001674: 00e5ac23 sw a4,24(a1) + 80001678: fcf666e3 bltu a2,a5,80001644 + 8000167c: 0028c703 lbu a4,2(a7) + 80001680: 0a070e63 beqz a4,8000173c + 80001684: 00388793 addi a5,a7,3 + 80001688: 0ad70863 beq a4,a3,80001738 + 8000168c: 00900693 li a3,9 + 80001690: 02c00513 li a0,44 + 80001694: fd07071b addiw a4,a4,-48 + 80001698: 0ff77713 andi a4,a4,255 + 8000169c: 00e6fe63 bgeu a3,a4,800016b8 + 800016a0: 0045a703 lw a4,4(a1) + 800016a4: 00078813 mv a6,a5 + 800016a8: 00100513 li a0,1 + 800016ac: 0017079b addiw a5,a4,1 + 800016b0: 00f5a223 sw a5,4(a1) + 800016b4: e99ff06f j 8000154c + 800016b8: 00184703 lbu a4,1(a6) + 800016bc: 00178613 addi a2,a5,1 + 800016c0: 00078813 mv a6,a5 + 800016c4: 06070a63 beqz a4,80001738 + 800016c8: 08a70c63 beq a4,a0,80001760 + 800016cc: 00060793 mv a5,a2 + 800016d0: fc5ff06f j 80001694 + 800016d4: 00174303 lbu t1,1(a4) + 800016d8: 00188813 addi a6,a7,1 + 800016dc: 00088713 mv a4,a7 + 800016e0: 04030263 beqz t1,80001724 + 800016e4: 04c30263 beq t1,a2,80001728 + 800016e8: 00080893 mv a7,a6 + 800016ec: e39ff06f j 80001524 + 800016f0: 00a5a023 sw a0,0(a1) + 800016f4: 0017c303 lbu t1,1(a5) + 800016f8: 02030863 beqz t1,80001728 + 800016fc: 00278893 addi a7,a5,2 + 80001700: 02d30263 beq t1,a3,80001724 + 80001704: 00080713 mv a4,a6 + 80001708: e11ff06f j 80001518 + 8000170c: 00d5a423 sw a3,8(a1) + 80001710: 0027c303 lbu t1,2(a5) + 80001714: 00030a63 beqz t1,80001728 + 80001718: 02c00793 li a5,44 + 8000171c: 00180893 addi a7,a6,1 + 80001720: fef312e3 bne t1,a5,80001704 + 80001724: 00088813 mv a6,a7 + 80001728: 00500513 li a0,5 + 8000172c: e21ff06f j 8000154c + 80001730: 00000513 li a0,0 + 80001734: e19ff06f j 8000154c + 80001738: 00078813 mv a6,a5 + 8000173c: 00700513 li a0,7 + 80001740: e0dff06f j 8000154c + 80001744: 00088813 mv a6,a7 + 80001748: 00300513 li a0,3 + 8000174c: e01ff06f j 8000154c + 80001750: 00600513 li a0,6 + 80001754: df9ff06f j 8000154c + 80001758: 00200513 li a0,2 + 8000175c: df1ff06f j 8000154c + 80001760: 00060813 mv a6,a2 + 80001764: 00700513 li a0,7 + 80001768: de5ff06f j 8000154c + 8000176c: 00050813 mv a6,a0 + 80001770: 00400513 li a0,4 + 80001774: dd9ff06f j 8000154c + +0000000080001778 : + 80001778: f6010113 addi sp,sp,-160 + 8000177c: 08813823 sd s0,144(sp) + 80001780: 09213023 sd s2,128(sp) + 80001784: 01010413 addi s0,sp,16 + 80001788: 03010913 addi s2,sp,48 + 8000178c: 08913423 sd s1,136(sp) + 80001790: 07313c23 sd s3,120(sp) + 80001794: 07413823 sd s4,112(sp) + 80001798: 07513423 sd s5,104(sp) + 8000179c: 07613023 sd s6,96(sp) + 800017a0: 05713c23 sd s7,88(sp) + 800017a4: 00068a13 mv s4,a3 + 800017a8: 00070993 mv s3,a4 + 800017ac: 00078493 mv s1,a5 + 800017b0: 08113c23 sd ra,152(sp) + 800017b4: 05813823 sd s8,80(sp) + 800017b8: 00058a93 mv s5,a1 + 800017bc: 00050b93 mv s7,a0 + 800017c0: 00060b13 mv s6,a2 + 800017c4: 00b13423 sd a1,8(sp) + 800017c8: 05010693 addi a3,sp,80 + 800017cc: 00040713 mv a4,s0 + 800017d0: 00090793 mv a5,s2 + 800017d4: 0007a023 sw zero,0(a5) + 800017d8: 00072023 sw zero,0(a4) + 800017dc: 00478793 addi a5,a5,4 + 800017e0: 00470713 addi a4,a4,4 + 800017e4: fed798e3 bne a5,a3,800017d4 + 800017e8: 000ac703 lbu a4,0(s5) + 800017ec: 14070663 beqz a4,80001938 + 800017f0: 00810c13 addi s8,sp,8 + 800017f4: 03010593 addi a1,sp,48 + 800017f8: 000c0513 mv a0,s8 + 800017fc: c65ff0ef jal ra,80001460 + 80001800: 02051813 slli a6,a0,0x20 + 80001804: 05010793 addi a5,sp,80 + 80001808: 01e85813 srli a6,a6,0x1e + 8000180c: 01078833 add a6,a5,a6 + 80001810: 00813703 ld a4,8(sp) + 80001814: fc082783 lw a5,-64(a6) + 80001818: 00074703 lbu a4,0(a4) + 8000181c: 0017879b addiw a5,a5,1 + 80001820: fcf82023 sw a5,-64(a6) + 80001824: fc0718e3 bnez a4,800017f4 + 80001828: 020b9b93 slli s7,s7,0x20 + 8000182c: 020bdb93 srli s7,s7,0x20 + 80001830: 01513423 sd s5,8(sp) + 80001834: 017a8bb3 add s7,s5,s7 + 80001838: 000ac703 lbu a4,0(s5) + 8000183c: 117afa63 bgeu s5,s7,80001950 + 80001840: 000a8793 mv a5,s5 + 80001844: 02c00613 li a2,44 + 80001848: 0080006f j 80001850 + 8000184c: 0007c703 lbu a4,0(a5) + 80001850: 016746b3 xor a3,a4,s6 + 80001854: 00c70463 beq a4,a2,8000185c + 80001858: 00d78023 sb a3,0(a5) + 8000185c: 00813783 ld a5,8(sp) + 80001860: 013787b3 add a5,a5,s3 + 80001864: 00f13423 sd a5,8(sp) + 80001868: ff77e2e3 bltu a5,s7,8000184c + 8000186c: 000ac783 lbu a5,0(s5) + 80001870: 01513423 sd s5,8(sp) + 80001874: 00810c13 addi s8,sp,8 + 80001878: 04078063 beqz a5,800018b8 + 8000187c: 03010593 addi a1,sp,48 + 80001880: 000c0513 mv a0,s8 + 80001884: bddff0ef jal ra,80001460 + 80001888: 02051613 slli a2,a0,0x20 + 8000188c: 05010793 addi a5,sp,80 + 80001890: 01e65613 srli a2,a2,0x1e + 80001894: 00c78633 add a2,a5,a2 + 80001898: 00813703 ld a4,8(sp) + 8000189c: fc062783 lw a5,-64(a2) + 800018a0: 00074703 lbu a4,0(a4) + 800018a4: 0017879b addiw a5,a5,1 + 800018a8: fcf62023 sw a5,-64(a2) + 800018ac: fc0718e3 bnez a4,8000187c + 800018b0: 01513423 sd s5,8(sp) + 800018b4: 037af463 bgeu s5,s7,800018dc + 800018b8: 02c00693 li a3,44 + 800018bc: 000ac783 lbu a5,0(s5) + 800018c0: 0147c733 xor a4,a5,s4 + 800018c4: 00d78463 beq a5,a3,800018cc + 800018c8: 00ea8023 sb a4,0(s5) + 800018cc: 00813a83 ld s5,8(sp) + 800018d0: 013a8ab3 add s5,s5,s3 + 800018d4: 01513423 sd s5,8(sp) + 800018d8: ff7ae2e3 bltu s5,s7,800018bc + 800018dc: 02040993 addi s3,s0,32 + 800018e0: 00042503 lw a0,0(s0) + 800018e4: 00048593 mv a1,s1 + 800018e8: 00440413 addi s0,s0,4 + 800018ec: fb1fe0ef jal ra,8000089c + 800018f0: 00050593 mv a1,a0 + 800018f4: 00092503 lw a0,0(s2) + 800018f8: 00490913 addi s2,s2,4 + 800018fc: fa1fe0ef jal ra,8000089c + 80001900: 00050493 mv s1,a0 + 80001904: fc899ee3 bne s3,s0,800018e0 + 80001908: 09813083 ld ra,152(sp) + 8000190c: 09013403 ld s0,144(sp) + 80001910: 08813483 ld s1,136(sp) + 80001914: 08013903 ld s2,128(sp) + 80001918: 07813983 ld s3,120(sp) + 8000191c: 07013a03 ld s4,112(sp) + 80001920: 06813a83 ld s5,104(sp) + 80001924: 06013b03 ld s6,96(sp) + 80001928: 05813b83 ld s7,88(sp) + 8000192c: 05013c03 ld s8,80(sp) + 80001930: 0a010113 addi sp,sp,160 + 80001934: 00008067 ret + 80001938: 020b9b93 slli s7,s7,0x20 + 8000193c: 020bdb93 srli s7,s7,0x20 + 80001940: 01513423 sd s5,8(sp) + 80001944: 017a8bb3 add s7,s5,s7 + 80001948: ef7aece3 bltu s5,s7,80001840 + 8000194c: f91ff06f j 800018dc + 80001950: f20716e3 bnez a4,8000187c + 80001954: f89ff06f j 800018dc + +0000000080001958 : + 80001958: fe010113 addi sp,sp,-32 + 8000195c: 01213023 sd s2,0(sp) + 80001960: 02c52903 lw s2,44(a0) + 80001964: 00113c23 sd ra,24(sp) + 80001968: 00813823 sd s0,16(sp) + 8000196c: 00913423 sd s1,8(sp) + 80001970: 06053023 sd zero,96(a0) + 80001974: 04090663 beqz s2,800019c0 + 80001978: 00050413 mv s0,a0 + 8000197c: 00000493 li s1,0 + 80001980: 00100593 li a1,1 + 80001984: 00040513 mv a0,s0 + 80001988: a01fe0ef jal ra,80000388 + 8000198c: 06045583 lhu a1,96(s0) + 80001990: e89fe0ef jal ra,80000818 + 80001994: fff00593 li a1,-1 + 80001998: 06a41023 sh a0,96(s0) + 8000199c: 00040513 mv a0,s0 + 800019a0: 9e9fe0ef jal ra,80000388 + 800019a4: 06045583 lhu a1,96(s0) + 800019a8: e71fe0ef jal ra,80000818 + 800019ac: 06a41023 sh a0,96(s0) + 800019b0: 00049463 bnez s1,800019b8 + 800019b4: 06a41123 sh a0,98(s0) + 800019b8: 0014849b addiw s1,s1,1 + 800019bc: fc9912e3 bne s2,s1,80001980 + 800019c0: 01813083 ld ra,24(sp) + 800019c4: 01013403 ld s0,16(sp) + 800019c8: 00813483 ld s1,8(sp) + 800019cc: 00013903 ld s2,0(sp) + 800019d0: 00000513 li a0,0 + 800019d4: 02010113 addi sp,sp,32 + 800019d8: 00008067 ret + +00000000800019dc

: + 800019dc: f2010113 addi sp,sp,-224 + 800019e0: 0c113c23 sd ra,216(sp) + 800019e4: 0c813823 sd s0,208(sp) + 800019e8: 0c913423 sd s1,200(sp) + 800019ec: 00058413 mv s0,a1 + 800019f0: 0d213023 sd s2,192(sp) + 800019f4: 0b313c23 sd s3,184(sp) + 800019f8: 0b413823 sd s4,176(sp) + 800019fc: 0b513423 sd s5,168(sp) + 80001a00: 0b613023 sd s6,160(sp) + 80001a04: 09713c23 sd s7,152(sp) + 80001a08: 09813823 sd s8,144(sp) + 80001a0c: 09913423 sd s9,136(sp) + 80001a10: 09a13023 sd s10,128(sp) + 80001a14: 00a12623 sw a0,12(sp) + 80001a18: 225000ef jal ra,8000243c + 80001a1c: 3e800593 li a1,1000 + 80001a20: 00002517 auipc a0,0x2 + 80001a24: 32050513 addi a0,a0,800 # 80003d40 + 80001a28: 695010ef jal ra,800038bc + 80001a2c: 00040613 mv a2,s0 + 80001a30: 00c10593 addi a1,sp,12 + 80001a34: 07a10513 addi a0,sp,122 + 80001a38: 7f4000ef jal ra,8000222c + 80001a3c: 00100513 li a0,1 + 80001a40: d71fe0ef jal ra,800007b0 + 80001a44: 00050793 mv a5,a0 + 80001a48: 00200513 li a0,2 + 80001a4c: 00f11823 sh a5,16(sp) + 80001a50: d61fe0ef jal ra,800007b0 + 80001a54: 00050793 mv a5,a0 + 80001a58: 00300513 li a0,3 + 80001a5c: 00f11923 sh a5,18(sp) + 80001a60: d51fe0ef jal ra,800007b0 + 80001a64: 00050793 mv a5,a0 + 80001a68: 00400513 li a0,4 + 80001a6c: 00f11a23 sh a5,20(sp) + 80001a70: d41fe0ef jal ra,800007b0 + 80001a74: 00050793 mv a5,a0 + 80001a78: 00500513 li a0,5 + 80001a7c: 02f12e23 sw a5,60(sp) + 80001a80: d31fe0ef jal ra,800007b0 + 80001a84: 0005051b sext.w a0,a0 + 80001a88: 5e050263 beqz a0,8000206c + 80001a8c: 04a12023 sw a0,64(sp) + 80001a90: 01013783 ld a5,16(sp) + 80001a94: 01079713 slli a4,a5,0x10 + 80001a98: 00071a63 bnez a4,80001aac + 80001a9c: 06600793 li a5,102 + 80001aa0: 00012823 sw zero,16(sp) + 80001aa4: 00f11a23 sh a5,20(sp) + 80001aa8: 01013783 ld a5,16(sp) + 80001aac: 01079793 slli a5,a5,0x10 + 80001ab0: 0107d793 srli a5,a5,0x10 + 80001ab4: 00100713 li a4,1 + 80001ab8: 00e79c63 bne a5,a4,80001ad0 + 80001abc: 341537b7 lui a5,0x34153 + 80001ac0: 4157879b addiw a5,a5,1045 + 80001ac4: 00f12823 sw a5,16(sp) + 80001ac8: 06600793 li a5,102 + 80001acc: 00f11a23 sh a5,20(sp) + 80001ad0: 04012403 lw s0,64(sp) + 80001ad4: 00003a17 auipc s4,0x3 + 80001ad8: db4a0a13 addi s4,s4,-588 # 80004888 + 80001adc: 01413c23 sd s4,24(sp) + 80001ae0: 00147a93 andi s5,s0,1 + 80001ae4: 06011c23 sh zero,120(sp) + 80001ae8: 00247493 andi s1,s0,2 + 80001aec: 000a8593 mv a1,s5 + 80001af0: 00048863 beqz s1,80001b00 + 80001af4: 001a859b addiw a1,s5,1 + 80001af8: 03059593 slli a1,a1,0x30 + 80001afc: 0305d593 srli a1,a1,0x30 + 80001b00: 00447793 andi a5,s0,4 + 80001b04: 00078863 beqz a5,80001b14 + 80001b08: 0015859b addiw a1,a1,1 + 80001b0c: 03059593 slli a1,a1,0x30 + 80001b10: 0305d593 srli a1,a1,0x30 + 80001b14: 7d000513 li a0,2000 + 80001b18: 7e0000ef jal ra,800022f8 <__divdi3> + 80001b1c: 0005099b sext.w s3,a0 + 80001b20: 03312c23 sw s3,56(sp) + 80001b24: 00000913 li s2,0 + 80001b28: 00000b13 li s6,0 + 80001b2c: 00100c93 li s9,1 + 80001b30: 00300c13 li s8,3 + 80001b34: 012c97bb sllw a5,s9,s2 + 80001b38: 00f477b3 and a5,s0,a5 + 80001b3c: 0007879b sext.w a5,a5 + 80001b40: 4e079a63 bnez a5,80002034 + 80001b44: 00190913 addi s2,s2,1 + 80001b48: ff8916e3 bne s2,s8,80001b34 + 80001b4c: 260a9663 bnez s5,80001db8 + 80001b50: 28049463 bnez s1,80001dd8 + 80001b54: 00447413 andi s0,s0,4 + 80001b58: 00040a63 beqz s0,80001b6c + 80001b5c: 03013603 ld a2,48(sp) + 80001b60: 01011583 lh a1,16(sp) + 80001b64: 03812503 lw a0,56(sp) + 80001b68: f58ff0ef jal ra,800012c0 + 80001b6c: 03c12783 lw a5,60(sp) + 80001b70: 06079463 bnez a5,80001bd8 + 80001b74: 00100793 li a5,1 + 80001b78: 02f12e23 sw a5,60(sp) + 80001b7c: 03c12703 lw a4,60(sp) + 80001b80: 0027179b slliw a5,a4,0x2 + 80001b84: 00e787bb addw a5,a5,a4 + 80001b88: 0017979b slliw a5,a5,0x1 + 80001b8c: 02f12e23 sw a5,60(sp) + 80001b90: 608000ef jal ra,80002198 + 80001b94: 01010513 addi a0,sp,16 + 80001b98: dc1ff0ef jal ra,80001958 + 80001b9c: 638000ef jal ra,800021d4 + 80001ba0: 670000ef jal ra,80002210 + 80001ba4: 0005051b sext.w a0,a0 + 80001ba8: 680000ef jal ra,80002228 + 80001bac: 0005051b sext.w a0,a0 + 80001bb0: fc0506e3 beqz a0,80001b7c + 80001bb4: 02051593 slli a1,a0,0x20 + 80001bb8: 0205d593 srli a1,a1,0x20 + 80001bbc: 00a00513 li a0,10 + 80001bc0: 740000ef jal ra,80002300 <__udivdi3> + 80001bc4: 00050593 mv a1,a0 + 80001bc8: 03c12503 lw a0,60(sp) + 80001bcc: 0015859b addiw a1,a1,1 + 80001bd0: 6c4000ef jal ra,80002294 <__muldi3> + 80001bd4: 02a12e23 sw a0,60(sp) + 80001bd8: 5c0000ef jal ra,80002198 + 80001bdc: 01010513 addi a0,sp,16 + 80001be0: d79ff0ef jal ra,80001958 + 80001be4: 5f0000ef jal ra,800021d4 + 80001be8: 628000ef jal ra,80002210 + 80001bec: 00050993 mv s3,a0 + 80001bf0: 01011503 lh a0,16(sp) + 80001bf4: 00000593 li a1,0 + 80001bf8: 0009899b sext.w s3,s3 + 80001bfc: cd5fe0ef jal ra,800008d0 + 80001c00: 00050593 mv a1,a0 + 80001c04: 01211503 lh a0,18(sp) + 80001c08: cc9fe0ef jal ra,800008d0 + 80001c0c: 00050593 mv a1,a0 + 80001c10: 01411503 lh a0,20(sp) + 80001c14: cbdfe0ef jal ra,800008d0 + 80001c18: 00050593 mv a1,a0 + 80001c1c: 03811503 lh a0,56(sp) + 80001c20: cb1fe0ef jal ra,800008d0 + 80001c24: 000087b7 lui a5,0x8 + 80001c28: 00050a1b sext.w s4,a0 + 80001c2c: b0578793 addi a5,a5,-1275 # 7b05 <_entry_offset+0x7b05> + 80001c30: 54fa0663 beq s4,a5,8000217c + 80001c34: 3d47ea63 bltu a5,s4,80002008 + 80001c38: 000027b7 lui a5,0x2 + 80001c3c: 8f278793 addi a5,a5,-1806 # 18f2 <_entry_offset+0x18f2> + 80001c40: 50fa0a63 beq s4,a5,80002154 + 80001c44: 000057b7 lui a5,0x5 + 80001c48: eaf78793 addi a5,a5,-337 # 4eaf <_entry_offset+0x4eaf> + 80001c4c: 1afa1c63 bne s4,a5,80001e04 + 80001c50: 00002517 auipc a0,0x2 + 80001c54: 17850513 addi a0,a0,376 # 80003dc8 + 80001c58: 465010ef jal ra,800038bc + 80001c5c: 00200a93 li s5,2 + 80001c60: 00002917 auipc s2,0x2 + 80001c64: 7f090913 addi s2,s2,2032 # 80004450 + 80001c68: 00092783 lw a5,0(s2) + 80001c6c: 00000c93 li s9,0 + 80001c70: 00000c13 li s8,0 + 80001c74: 00000d13 li s10,0 + 80001c78: 50078c63 beqz a5,80002190 + 80001c7c: 001a9793 slli a5,s5,0x1 + 80001c80: 00002b97 auipc s7,0x2 + 80001c84: 4b0b8b93 addi s7,s7,1200 # 80004130 + 80001c88: 00002b17 auipc s6,0x2 + 80001c8c: 4b8b0b13 addi s6,s6,1208 # 80004140 + 80001c90: 00002a97 auipc s5,0x2 + 80001c94: 4c0a8a93 addi s5,s5,1216 # 80004150 + 80001c98: 00fb8bb3 add s7,s7,a5 + 80001c9c: 00fb0b33 add s6,s6,a5 + 80001ca0: 00fa8ab3 add s5,s5,a5 + 80001ca4: 0600006f j 80001d04 + 80001ca8: ff645603 lhu a2,-10(s0) + 80001cac: 000ad683 lhu a3,0(s5) + 80001cb0: 10d60063 beq a2,a3,80001db0 + 80001cb4: 000d0593 mv a1,s10 + 80001cb8: 00002517 auipc a0,0x2 + 80001cbc: 21050513 addi a0,a0,528 # 80003ec8 + 80001cc0: 3fd010ef jal ra,800038bc + 80001cc4: ff845783 lhu a5,-8(s0) + 80001cc8: 0017879b addiw a5,a5,1 + 80001ccc: 03079793 slli a5,a5,0x30 + 80001cd0: 0307d793 srli a5,a5,0x30 + 80001cd4: fef41c23 sh a5,-8(s0) + 80001cd8: 001c0c1b addiw s8,s8,1 + 80001cdc: 00092703 lw a4,0(s2) + 80001ce0: 00fc87bb addw a5,s9,a5 + 80001ce4: 030c1c13 slli s8,s8,0x30 + 80001ce8: 030c5c13 srli s8,s8,0x30 + 80001cec: 03079493 slli s1,a5,0x30 + 80001cf0: 01079c9b slliw s9,a5,0x10 + 80001cf4: 0304d493 srli s1,s1,0x30 + 80001cf8: 410cdc9b sraiw s9,s9,0x10 + 80001cfc: 000c0d1b sext.w s10,s8 + 80001d00: 10ec7a63 bgeu s8,a4,80001e14 + 80001d04: 003d1413 slli s0,s10,0x3 + 80001d08: 41a404b3 sub s1,s0,s10 + 80001d0c: 08010793 addi a5,sp,128 + 80001d10: 00449493 slli s1,s1,0x4 + 80001d14: 009784b3 add s1,a5,s1 + 80001d18: fc04a783 lw a5,-64(s1) + 80001d1c: fe049c23 sh zero,-8(s1) + 80001d20: 0017f793 andi a5,a5,1 + 80001d24: 02078663 beqz a5,80001d50 + 80001d28: ff24d603 lhu a2,-14(s1) + 80001d2c: 000bd683 lhu a3,0(s7) + 80001d30: 02d60063 beq a2,a3,80001d50 + 80001d34: 000d0593 mv a1,s10 + 80001d38: 00002517 auipc a0,0x2 + 80001d3c: 12850513 addi a0,a0,296 # 80003e60 + 80001d40: 37d010ef jal ra,800038bc + 80001d44: ff84d783 lhu a5,-8(s1) + 80001d48: 0017879b addiw a5,a5,1 + 80001d4c: fef49c23 sh a5,-8(s1) + 80001d50: 41a404b3 sub s1,s0,s10 + 80001d54: 08010793 addi a5,sp,128 + 80001d58: 00449493 slli s1,s1,0x4 + 80001d5c: 009784b3 add s1,a5,s1 + 80001d60: fc04a703 lw a4,-64(s1) + 80001d64: 00277793 andi a5,a4,2 + 80001d68: 02078863 beqz a5,80001d98 + 80001d6c: ff44d603 lhu a2,-12(s1) + 80001d70: 000b5683 lhu a3,0(s6) + 80001d74: 02d60263 beq a2,a3,80001d98 + 80001d78: 000d0593 mv a1,s10 + 80001d7c: 00002517 auipc a0,0x2 + 80001d80: 11450513 addi a0,a0,276 # 80003e90 + 80001d84: 339010ef jal ra,800038bc + 80001d88: ff84d783 lhu a5,-8(s1) + 80001d8c: fc04a703 lw a4,-64(s1) + 80001d90: 0017879b addiw a5,a5,1 + 80001d94: fef49c23 sh a5,-8(s1) + 80001d98: 41a40433 sub s0,s0,s10 + 80001d9c: 00441413 slli s0,s0,0x4 + 80001da0: 08010793 addi a5,sp,128 + 80001da4: 00477713 andi a4,a4,4 + 80001da8: 00878433 add s0,a5,s0 + 80001dac: ee071ee3 bnez a4,80001ca8 + 80001db0: ff845783 lhu a5,-8(s0) + 80001db4: f25ff06f j 80001cd8 + 80001db8: 01011603 lh a2,16(sp) + 80001dbc: 02013583 ld a1,32(sp) + 80001dc0: 00098513 mv a0,s3 + 80001dc4: 82dfe0ef jal ra,800005f0 + 80001dc8: 04012403 lw s0,64(sp) + 80001dcc: 04a13423 sd a0,72(sp) + 80001dd0: 00247493 andi s1,s0,2 + 80001dd4: d80480e3 beqz s1,80001b54 + 80001dd8: 01211603 lh a2,18(sp) + 80001ddc: 01011783 lh a5,16(sp) + 80001de0: 02813583 ld a1,40(sp) + 80001de4: 03812503 lw a0,56(sp) + 80001de8: 0106161b slliw a2,a2,0x10 + 80001dec: 00f66633 or a2,a2,a5 + 80001df0: 05010693 addi a3,sp,80 + 80001df4: 0006061b sext.w a2,a2 + 80001df8: aedfe0ef jal ra,800008e4 + 80001dfc: 04012403 lw s0,64(sp) + 80001e00: d55ff06f j 80001b54 + 80001e04: 00010437 lui s0,0x10 + 80001e08: fff40493 addi s1,s0,-1 # ffff <_entry_offset+0xffff> + 80001e0c: 00002917 auipc s2,0x2 + 80001e10: 64490913 addi s2,s2,1604 # 80004450 + 80001e14: ac9fe0ef jal ra,800008dc + 80001e18: 03812583 lw a1,56(sp) + 80001e1c: 009504bb addw s1,a0,s1 + 80001e20: 00002517 auipc a0,0x2 + 80001e24: 0d850513 addi a0,a0,216 # 80003ef8 + 80001e28: 295010ef jal ra,800038bc + 80001e2c: 00098513 mv a0,s3 + 80001e30: 3f8000ef jal ra,80002228 + 80001e34: 0005059b sext.w a1,a0 + 80001e38: 00002517 auipc a0,0x2 + 80001e3c: 0d850513 addi a0,a0,216 # 80003f10 + 80001e40: 27d010ef jal ra,800038bc + 80001e44: 00092583 lw a1,0(s2) + 80001e48: 03c12503 lw a0,60(sp) + 80001e4c: 0104949b slliw s1,s1,0x10 + 80001e50: 4104d49b sraiw s1,s1,0x10 + 80001e54: 440000ef jal ra,80002294 <__muldi3> + 80001e58: 0005059b sext.w a1,a0 + 80001e5c: 00002517 auipc a0,0x2 + 80001e60: 0cc50513 addi a0,a0,204 # 80003f28 + 80001e64: 259010ef jal ra,800038bc + 80001e68: 00002597 auipc a1,0x2 + 80001e6c: 0d858593 addi a1,a1,216 # 80003f40 + 80001e70: 00002517 auipc a0,0x2 + 80001e74: 0e050513 addi a0,a0,224 # 80003f50 + 80001e78: 245010ef jal ra,800038bc + 80001e7c: 000a0593 mv a1,s4 + 80001e80: 00002517 auipc a0,0x2 + 80001e84: 0e850513 addi a0,a0,232 # 80003f68 + 80001e88: 235010ef jal ra,800038bc + 80001e8c: 04012783 lw a5,64(sp) + 80001e90: 0017f713 andi a4,a5,1 + 80001e94: 04070c63 beqz a4,80001eec + 80001e98: 00092703 lw a4,0(s2) + 80001e9c: 04070863 beqz a4,80001eec + 80001ea0: 00000413 li s0,0 + 80001ea4: 00000593 li a1,0 + 80001ea8: 00002a17 auipc s4,0x2 + 80001eac: 0e0a0a13 addi s4,s4,224 # 80003f88 + 80001eb0: 00359793 slli a5,a1,0x3 + 80001eb4: 40b787b3 sub a5,a5,a1 + 80001eb8: 08010713 addi a4,sp,128 + 80001ebc: 00479793 slli a5,a5,0x4 + 80001ec0: 00f707b3 add a5,a4,a5 + 80001ec4: ff27d603 lhu a2,-14(a5) + 80001ec8: 000a0513 mv a0,s4 + 80001ecc: 0014041b addiw s0,s0,1 + 80001ed0: 1ed010ef jal ra,800038bc + 80001ed4: 00092783 lw a5,0(s2) + 80001ed8: 03041413 slli s0,s0,0x30 + 80001edc: 03045413 srli s0,s0,0x30 + 80001ee0: 0004059b sext.w a1,s0 + 80001ee4: fcf466e3 bltu s0,a5,80001eb0 + 80001ee8: 04012783 lw a5,64(sp) + 80001eec: 0027f713 andi a4,a5,2 + 80001ef0: 04070c63 beqz a4,80001f48 + 80001ef4: 00092703 lw a4,0(s2) + 80001ef8: 24070863 beqz a4,80002148 + 80001efc: 00000413 li s0,0 + 80001f00: 00000593 li a1,0 + 80001f04: 00002a17 auipc s4,0x2 + 80001f08: 0a4a0a13 addi s4,s4,164 # 80003fa8 + 80001f0c: 00359793 slli a5,a1,0x3 + 80001f10: 40b787b3 sub a5,a5,a1 + 80001f14: 08010713 addi a4,sp,128 + 80001f18: 00479793 slli a5,a5,0x4 + 80001f1c: 00f707b3 add a5,a4,a5 + 80001f20: ff47d603 lhu a2,-12(a5) + 80001f24: 000a0513 mv a0,s4 + 80001f28: 0014041b addiw s0,s0,1 + 80001f2c: 191010ef jal ra,800038bc + 80001f30: 00092783 lw a5,0(s2) + 80001f34: 03041413 slli s0,s0,0x30 + 80001f38: 03045413 srli s0,s0,0x30 + 80001f3c: 0004059b sext.w a1,s0 + 80001f40: fcf466e3 bltu s0,a5,80001f0c + 80001f44: 04012783 lw a5,64(sp) + 80001f48: 0047f793 andi a5,a5,4 + 80001f4c: 12079663 bnez a5,80002078 + 80001f50: 00092783 lw a5,0(s2) + 80001f54: 00000413 li s0,0 + 80001f58: 00000593 li a1,0 + 80001f5c: 00002a17 auipc s4,0x2 + 80001f60: 0a4a0a13 addi s4,s4,164 # 80004000 + 80001f64: 02078e63 beqz a5,80001fa0 + 80001f68: 00359793 slli a5,a1,0x3 + 80001f6c: 40b787b3 sub a5,a5,a1 + 80001f70: 08010713 addi a4,sp,128 + 80001f74: 00479793 slli a5,a5,0x4 + 80001f78: 00f707b3 add a5,a4,a5 + 80001f7c: ff07d603 lhu a2,-16(a5) + 80001f80: 000a0513 mv a0,s4 + 80001f84: 0014041b addiw s0,s0,1 + 80001f88: 135010ef jal ra,800038bc + 80001f8c: 00092783 lw a5,0(s2) + 80001f90: 03041413 slli s0,s0,0x30 + 80001f94: 03045413 srli s0,s0,0x30 + 80001f98: 0004059b sext.w a1,s0 + 80001f9c: fcf466e3 bltu s0,a5,80001f68 + 80001fa0: 00098593 mv a1,s3 + 80001fa4: 00002517 auipc a0,0x2 + 80001fa8: 02450513 addi a0,a0,36 # 80003fc8 + 80001fac: 111010ef jal ra,800038bc + 80001fb0: 12048663 beqz s1,800020dc + 80001fb4: 10905c63 blez s1,800020cc + 80001fb8: 00002517 auipc a0,0x2 + 80001fbc: 0f850513 addi a0,a0,248 # 800040b0 + 80001fc0: 0fd010ef jal ra,800038bc + 80001fc4: 07a10513 addi a0,sp,122 + 80001fc8: 270000ef jal ra,80002238 + 80001fcc: 0d813083 ld ra,216(sp) + 80001fd0: 0d013403 ld s0,208(sp) + 80001fd4: 0c813483 ld s1,200(sp) + 80001fd8: 0c013903 ld s2,192(sp) + 80001fdc: 0b813983 ld s3,184(sp) + 80001fe0: 0b013a03 ld s4,176(sp) + 80001fe4: 0a813a83 ld s5,168(sp) + 80001fe8: 0a013b03 ld s6,160(sp) + 80001fec: 09813b83 ld s7,152(sp) + 80001ff0: 09013c03 ld s8,144(sp) + 80001ff4: 08813c83 ld s9,136(sp) + 80001ff8: 08013d03 ld s10,128(sp) + 80001ffc: 00000513 li a0,0 + 80002000: 0e010113 addi sp,sp,224 + 80002004: 00008067 ret + 80002008: 000097b7 lui a5,0x9 + 8000200c: a0278793 addi a5,a5,-1534 # 8a02 <_entry_offset+0x8a02> + 80002010: 14fa0c63 beq s4,a5,80002168 + 80002014: 0000f7b7 lui a5,0xf + 80002018: 9f578793 addi a5,a5,-1547 # e9f5 <_entry_offset+0xe9f5> + 8000201c: defa14e3 bne s4,a5,80001e04 + 80002020: 00002517 auipc a0,0x2 + 80002024: de050513 addi a0,a0,-544 # 80003e00 + 80002028: 095010ef jal ra,800038bc + 8000202c: 00300a93 li s5,3 + 80002030: c31ff06f j 80001c60 + 80002034: 01010793 addi a5,sp,16 + 80002038: 000b0513 mv a0,s6 + 8000203c: 00391b93 slli s7,s2,0x3 + 80002040: 00098593 mv a1,s3 + 80002044: 01778bb3 add s7,a5,s7 + 80002048: 24c000ef jal ra,80002294 <__muldi3> + 8000204c: 02051793 slli a5,a0,0x20 + 80002050: 0207d793 srli a5,a5,0x20 + 80002054: 001b0b1b addiw s6,s6,1 + 80002058: 00fa07b3 add a5,s4,a5 + 8000205c: 030b1b13 slli s6,s6,0x30 + 80002060: 00fbb823 sd a5,16(s7) + 80002064: 030b5b13 srli s6,s6,0x30 + 80002068: addff06f j 80001b44 + 8000206c: 00700793 li a5,7 + 80002070: 04f12023 sw a5,64(sp) + 80002074: a1dff06f j 80001a90 + 80002078: 00092783 lw a5,0(s2) + 8000207c: 00000413 li s0,0 + 80002080: 00000593 li a1,0 + 80002084: 00002a17 auipc s4,0x2 + 80002088: f5ca0a13 addi s4,s4,-164 # 80003fe0 + 8000208c: f0078ae3 beqz a5,80001fa0 + 80002090: 00359793 slli a5,a1,0x3 + 80002094: 40b787b3 sub a5,a5,a1 + 80002098: 08010713 addi a4,sp,128 + 8000209c: 00479793 slli a5,a5,0x4 + 800020a0: 00f707b3 add a5,a4,a5 + 800020a4: ff67d603 lhu a2,-10(a5) + 800020a8: 000a0513 mv a0,s4 + 800020ac: 0014041b addiw s0,s0,1 + 800020b0: 00d010ef jal ra,800038bc + 800020b4: 00092783 lw a5,0(s2) + 800020b8: 03041413 slli s0,s0,0x30 + 800020bc: 03045413 srli s0,s0,0x30 + 800020c0: 0004059b sext.w a1,s0 + 800020c4: fcf466e3 bltu s0,a5,80002090 + 800020c8: e89ff06f j 80001f50 + 800020cc: 00002517 auipc a0,0x2 + 800020d0: ffc50513 addi a0,a0,-4 # 800040c8 + 800020d4: 7e8010ef jal ra,800038bc + 800020d8: eedff06f j 80001fc4 + 800020dc: 00002517 auipc a0,0x2 + 800020e0: f4450513 addi a0,a0,-188 # 80004020 + 800020e4: 7d8010ef jal ra,800038bc + 800020e8: 00098513 mv a0,s3 + 800020ec: 13c000ef jal ra,80002228 + 800020f0: 02051593 slli a1,a0,0x20 + 800020f4: 002c9537 lui a0,0x2c9 + 800020f8: 0205d593 srli a1,a1,0x20 + 800020fc: 3b850513 addi a0,a0,952 # 2c93b8 <_entry_offset+0x2c93b8> + 80002100: 200000ef jal ra,80002300 <__udivdi3> + 80002104: 0055179b slliw a5,a0,0x5 + 80002108: 40a787bb subw a5,a5,a0 + 8000210c: 0027979b slliw a5,a5,0x2 + 80002110: 00a7853b addw a0,a5,a0 + 80002114: 0035151b slliw a0,a0,0x3 + 80002118: 02051513 slli a0,a0,0x20 + 8000211c: 3e800593 li a1,1000 + 80002120: 02055513 srli a0,a0,0x20 + 80002124: 1dc000ef jal ra,80002300 <__udivdi3> + 80002128: 0005059b sext.w a1,a0 + 8000212c: 00002517 auipc a0,0x2 + 80002130: f2c50513 addi a0,a0,-212 # 80004058 + 80002134: 788010ef jal ra,800038bc + 80002138: 00002517 auipc a0,0x2 + 8000213c: f4050513 addi a0,a0,-192 # 80004078 + 80002140: 77c010ef jal ra,800038bc + 80002144: e81ff06f j 80001fc4 + 80002148: 0047f793 andi a5,a5,4 + 8000214c: e4079ae3 bnez a5,80001fa0 + 80002150: e01ff06f j 80001f50 + 80002154: 00002517 auipc a0,0x2 + 80002158: cdc50513 addi a0,a0,-804 # 80003e30 + 8000215c: 760010ef jal ra,800038bc + 80002160: 00400a93 li s5,4 + 80002164: afdff06f j 80001c60 + 80002168: 00002517 auipc a0,0x2 + 8000216c: c0050513 addi a0,a0,-1024 # 80003d68 + 80002170: 74c010ef jal ra,800038bc + 80002174: 00000a93 li s5,0 + 80002178: ae9ff06f j 80001c60 + 8000217c: 00002517 auipc a0,0x2 + 80002180: c1c50513 addi a0,a0,-996 # 80003d98 + 80002184: 738010ef jal ra,800038bc + 80002188: 00100a93 li s5,1 + 8000218c: ad5ff06f j 80001c60 + 80002190: 00000493 li s1,0 + 80002194: c81ff06f j 80001e14 + +0000000080002198 : + 80002198: fe010113 addi sp,sp,-32 + 8000219c: 00810593 addi a1,sp,8 + 800021a0: 00600513 li a0,6 + 800021a4: 00113c23 sd ra,24(sp) + 800021a8: 2e8000ef jal ra,80002490 + 800021ac: 00813503 ld a0,8(sp) + 800021b0: 3e800593 li a1,1000 + 800021b4: 14c000ef jal ra,80002300 <__udivdi3> + 800021b8: 01813083 ld ra,24(sp) + 800021bc: 02051513 slli a0,a0,0x20 + 800021c0: 02055513 srli a0,a0,0x20 + 800021c4: 00003797 auipc a5,0x3 + 800021c8: e8a7ba23 sd a0,-364(a5) # 80005058 + 800021cc: 02010113 addi sp,sp,32 + 800021d0: 00008067 ret + +00000000800021d4 : + 800021d4: fe010113 addi sp,sp,-32 + 800021d8: 00810593 addi a1,sp,8 + 800021dc: 00600513 li a0,6 + 800021e0: 00113c23 sd ra,24(sp) + 800021e4: 2ac000ef jal ra,80002490 + 800021e8: 00813503 ld a0,8(sp) + 800021ec: 3e800593 li a1,1000 + 800021f0: 110000ef jal ra,80002300 <__udivdi3> + 800021f4: 01813083 ld ra,24(sp) + 800021f8: 02051513 slli a0,a0,0x20 + 800021fc: 02055513 srli a0,a0,0x20 + 80002200: 00003797 auipc a5,0x3 + 80002204: e6a7b023 sd a0,-416(a5) # 80005060 + 80002208: 02010113 addi sp,sp,32 + 8000220c: 00008067 ret + +0000000080002210 : + 80002210: 00003517 auipc a0,0x3 + 80002214: e5053503 ld a0,-432(a0) # 80005060 + 80002218: 00003797 auipc a5,0x3 + 8000221c: e407b783 ld a5,-448(a5) # 80005058 + 80002220: 40f5053b subw a0,a0,a5 + 80002224: 00008067 ret + +0000000080002228 : + 80002228: 00008067 ret + +000000008000222c : + 8000222c: 00100793 li a5,1 + 80002230: 00f50023 sb a5,0(a0) + 80002234: 00008067 ret + +0000000080002238 : + 80002238: 00050023 sb zero,0(a0) + 8000223c: 00008067 ret + +0000000080002240 : + 80002240: 00050513 mv a0,a0 + 80002244: 0000007b 0x7b + 80002248: 00008067 ret + +000000008000224c : + 8000224c: 00050513 mv a0,a0 + 80002250: 0000006b 0x6b + 80002254: 0000006f j 80002254 + +0000000080002258 <_assert>: + 80002258: 00051a63 bnez a0,8000226c <_assert+0x14> + 8000225c: 00100793 li a5,1 + 80002260: 00078513 mv a0,a5 + 80002264: 0000006b 0x6b + 80002268: 0000006f j 80002268 <_assert+0x10> + 8000226c: 00008067 ret + +0000000080002270 <_trm_init>: + 80002270: ff010113 addi sp,sp,-16 + 80002274: 00113423 sd ra,8(sp) + 80002278: 590000ef jal ra,80002808 + 8000227c: 00002517 auipc a0,0x2 + 80002280: 1c450513 addi a0,a0,452 # 80004440 + 80002284: f58ff0ef jal ra,800019dc
+ 80002288: 00050513 mv a0,a0 + 8000228c: 0000006b 0x6b + 80002290: 0000006f j 80002290 <_trm_init+0x20> + +0000000080002294 <__muldi3>: + 80002294: 00050613 mv a2,a0 + 80002298: 00000513 li a0,0 + 8000229c: 0015f693 andi a3,a1,1 + 800022a0: 00068463 beqz a3,800022a8 <__muldi3+0x14> + 800022a4: 00c50533 add a0,a0,a2 + 800022a8: 0015d593 srli a1,a1,0x1 + 800022ac: 00161613 slli a2,a2,0x1 + 800022b0: fe0596e3 bnez a1,8000229c <__muldi3+0x8> + 800022b4: 00008067 ret + +00000000800022b8 <__udivsi3>: + 800022b8: 02051513 slli a0,a0,0x20 + 800022bc: 02059593 slli a1,a1,0x20 + 800022c0: 00008293 mv t0,ra + 800022c4: 03c000ef jal ra,80002300 <__udivdi3> + 800022c8: 0005051b sext.w a0,a0 + 800022cc: 00028067 jr t0 + +00000000800022d0 <__umodsi3>: + 800022d0: 02051513 slli a0,a0,0x20 + 800022d4: 02059593 slli a1,a1,0x20 + 800022d8: 02055513 srli a0,a0,0x20 + 800022dc: 0205d593 srli a1,a1,0x20 + 800022e0: 00008293 mv t0,ra + 800022e4: 01c000ef jal ra,80002300 <__udivdi3> + 800022e8: 0005851b sext.w a0,a1 + 800022ec: 00028067 jr t0 + +00000000800022f0 <__divsi3>: + 800022f0: fff00293 li t0,-1 + 800022f4: 0a558c63 beq a1,t0,800023ac <__moddi3+0x30> + +00000000800022f8 <__divdi3>: + 800022f8: 06054063 bltz a0,80002358 <__umoddi3+0x10> + 800022fc: 0605c663 bltz a1,80002368 <__umoddi3+0x20> + +0000000080002300 <__udivdi3>: + 80002300: 00058613 mv a2,a1 + 80002304: 00050593 mv a1,a0 + 80002308: fff00513 li a0,-1 + 8000230c: 02060c63 beqz a2,80002344 <__udivdi3+0x44> + 80002310: 00100693 li a3,1 + 80002314: 00b67a63 bgeu a2,a1,80002328 <__udivdi3+0x28> + 80002318: 00c05863 blez a2,80002328 <__udivdi3+0x28> + 8000231c: 00161613 slli a2,a2,0x1 + 80002320: 00169693 slli a3,a3,0x1 + 80002324: feb66ae3 bltu a2,a1,80002318 <__udivdi3+0x18> + 80002328: 00000513 li a0,0 + 8000232c: 00c5e663 bltu a1,a2,80002338 <__udivdi3+0x38> + 80002330: 40c585b3 sub a1,a1,a2 + 80002334: 00d56533 or a0,a0,a3 + 80002338: 0016d693 srli a3,a3,0x1 + 8000233c: 00165613 srli a2,a2,0x1 + 80002340: fe0696e3 bnez a3,8000232c <__udivdi3+0x2c> + 80002344: 00008067 ret + +0000000080002348 <__umoddi3>: + 80002348: 00008293 mv t0,ra + 8000234c: fb5ff0ef jal ra,80002300 <__udivdi3> + 80002350: 00058513 mv a0,a1 + 80002354: 00028067 jr t0 + 80002358: 40a00533 neg a0,a0 + 8000235c: 00b04863 bgtz a1,8000236c <__umoddi3+0x24> + 80002360: 40b005b3 neg a1,a1 + 80002364: f9dff06f j 80002300 <__udivdi3> + 80002368: 40b005b3 neg a1,a1 + 8000236c: 00008293 mv t0,ra + 80002370: f91ff0ef jal ra,80002300 <__udivdi3> + 80002374: 40a00533 neg a0,a0 + 80002378: 00028067 jr t0 + +000000008000237c <__moddi3>: + 8000237c: 00008293 mv t0,ra + 80002380: 0005ca63 bltz a1,80002394 <__moddi3+0x18> + 80002384: 00054c63 bltz a0,8000239c <__moddi3+0x20> + 80002388: f79ff0ef jal ra,80002300 <__udivdi3> + 8000238c: 00058513 mv a0,a1 + 80002390: 00028067 jr t0 + 80002394: 40b005b3 neg a1,a1 + 80002398: fe0558e3 bgez a0,80002388 <__moddi3+0xc> + 8000239c: 40a00533 neg a0,a0 + 800023a0: f61ff0ef jal ra,80002300 <__udivdi3> + 800023a4: 40b00533 neg a0,a1 + 800023a8: 00028067 jr t0 + 800023ac: 01f29293 slli t0,t0,0x1f + 800023b0: f45514e3 bne a0,t0,800022f8 <__divdi3> + 800023b4: 00008067 ret + +00000000800023b8 <__am_timer_config>: + 800023b8: 00100793 li a5,1 + 800023bc: 00f50023 sb a5,0(a0) + 800023c0: 00f500a3 sb a5,1(a0) + 800023c4: 00008067 ret + +00000000800023c8 <__am_input_config>: + 800023c8: 00100793 li a5,1 + 800023cc: 00f50023 sb a5,0(a0) + 800023d0: 00008067 ret + +00000000800023d4 : + 800023d4: ff010113 addi sp,sp,-16 + 800023d8: 00813023 sd s0,0(sp) + 800023dc: 00113423 sd ra,8(sp) + 800023e0: 00002417 auipc s0,0x2 + 800023e4: d8040413 addi s0,s0,-640 # 80004160 + 800023e8: 04100513 li a0,65 + 800023ec: 00140413 addi s0,s0,1 + 800023f0: e51ff0ef jal ra,80002240 + 800023f4: 00044503 lbu a0,0(s0) + 800023f8: fe051ae3 bnez a0,800023ec + 800023fc: 00002417 auipc s0,0x2 + 80002400: d7440413 addi s0,s0,-652 # 80004170 + 80002404: 06100513 li a0,97 + 80002408: 00140413 addi s0,s0,1 + 8000240c: e35ff0ef jal ra,80002240 + 80002410: 00044503 lbu a0,0(s0) + 80002414: fe051ae3 bnez a0,80002408 + 80002418: 00002417 auipc s0,0x2 + 8000241c: d7840413 addi s0,s0,-648 # 80004190 + 80002420: 02000513 li a0,32 + 80002424: 00140413 addi s0,s0,1 + 80002428: e19ff0ef jal ra,80002240 + 8000242c: 00044503 lbu a0,0(s0) + 80002430: fe051ae3 bnez a0,80002424 + 80002434: 00100513 li a0,1 + 80002438: e15ff0ef jal ra,8000224c + +000000008000243c : + 8000243c: ff010113 addi sp,sp,-16 + 80002440: 00113423 sd ra,8(sp) + 80002444: 00002797 auipc a5,0x2 + 80002448: 02c78793 addi a5,a5,44 # 80004470 + 8000244c: 00002697 auipc a3,0x2 + 80002450: 42468693 addi a3,a3,1060 # 80004870 + 80002454: 00000617 auipc a2,0x0 + 80002458: f8060613 addi a2,a2,-128 # 800023d4 + 8000245c: 00c0006f j 80002468 + 80002460: 00878793 addi a5,a5,8 + 80002464: 00d78c63 beq a5,a3,8000247c + 80002468: 0007b703 ld a4,0(a5) + 8000246c: fe071ae3 bnez a4,80002460 + 80002470: 00c7b023 sd a2,0(a5) + 80002474: 00878793 addi a5,a5,8 + 80002478: fed798e3 bne a5,a3,80002468 + 8000247c: 030000ef jal ra,800024ac <__am_timer_init> + 80002480: 00813083 ld ra,8(sp) + 80002484: 00100513 li a0,1 + 80002488: 01010113 addi sp,sp,16 + 8000248c: 00008067 ret + +0000000080002490 : + 80002490: 00351793 slli a5,a0,0x3 + 80002494: 00002517 auipc a0,0x2 + 80002498: fdc50513 addi a0,a0,-36 # 80004470 + 8000249c: 00f50533 add a0,a0,a5 + 800024a0: 00053303 ld t1,0(a0) + 800024a4: 00058513 mv a0,a1 + 800024a8: 00030067 jr t1 + +00000000800024ac <__am_timer_init>: + 800024ac: 00008067 ret + +00000000800024b0 <__am_timer_uptime>: + 800024b0: fd010113 addi sp,sp,-48 + 800024b4: 00913c23 sd s1,24(sp) + 800024b8: 02113423 sd ra,40(sp) + 800024bc: 02813023 sd s0,32(sp) + 800024c0: 01213823 sd s2,16(sp) + 800024c4: 01313423 sd s3,8(sp) + 800024c8: 00050493 mv s1,a0 + 800024cc: b0002973 csrr s2,mcycle + 800024d0: 000f49b7 lui s3,0xf4 + 800024d4: 24098593 addi a1,s3,576 # f4240 <_entry_offset+0xf4240> + 800024d8: 00090513 mv a0,s2 + 800024dc: e25ff0ef jal ra,80002300 <__udivdi3> + 800024e0: 00551413 slli s0,a0,0x5 + 800024e4: 40a407b3 sub a5,s0,a0 + 800024e8: 00679413 slli s0,a5,0x6 + 800024ec: 40f40433 sub s0,s0,a5 + 800024f0: 00341413 slli s0,s0,0x3 + 800024f4: 00a40433 add s0,s0,a0 + 800024f8: 24098593 addi a1,s3,576 + 800024fc: 00090513 mv a0,s2 + 80002500: e49ff0ef jal ra,80002348 <__umoddi3> + 80002504: 00641413 slli s0,s0,0x6 + 80002508: 00a40433 add s0,s0,a0 + 8000250c: 0084b023 sd s0,0(s1) + 80002510: 02813083 ld ra,40(sp) + 80002514: 02013403 ld s0,32(sp) + 80002518: 01813483 ld s1,24(sp) + 8000251c: 01013903 ld s2,16(sp) + 80002520: 00813983 ld s3,8(sp) + 80002524: 03010113 addi sp,sp,48 + 80002528: 00008067 ret + +000000008000252c : + 8000252c: fc010113 addi sp,sp,-64 + 80002530: 01313c23 sd s3,24(sp) + 80002534: 00058993 mv s3,a1 + 80002538: 00050793 mv a5,a0 + 8000253c: 03800613 li a2,56 + 80002540: 00000593 li a1,0 + 80002544: 00098513 mv a0,s3 + 80002548: 02813823 sd s0,48(sp) + 8000254c: 03213023 sd s2,32(sp) + 80002550: 0007b403 ld s0,0(a5) + 80002554: 01413823 sd s4,16(sp) + 80002558: 02113c23 sd ra,56(sp) + 8000255c: 02913423 sd s1,40(sp) + 80002560: 01513423 sd s5,8(sp) + 80002564: 3ac010ef jal ra,80003910 + 80002568: 7b200793 li a5,1970 + 8000256c: 00f9aa23 sw a5,20(s3) + 80002570: 7b200913 li s2,1970 + 80002574: 00002a17 auipc s4,0x2 + 80002578: ed4a0a13 addi s4,s4,-300 # 80004448 + 8000257c: 0100006f j 8000258c + 80002580: 40e40433 sub s0,s0,a4 + 80002584: 00d9aa23 sw a3,20(s3) + 80002588: 00068913 mv s2,a3 + 8000258c: 0009049b sext.w s1,s2 + 80002590: 06400593 li a1,100 + 80002594: 00048513 mv a0,s1 + 80002598: de5ff0ef jal ra,8000237c <__moddi3> + 8000259c: 00050793 mv a5,a0 + 800025a0: 0007879b sext.w a5,a5 + 800025a4: 00048513 mv a0,s1 + 800025a8: 00397493 andi s1,s2,3 + 800025ac: 19000593 li a1,400 + 800025b0: 0014b493 seqz s1,s1 + 800025b4: 00079863 bnez a5,800025c4 + 800025b8: dc5ff0ef jal ra,8000237c <__moddi3> + 800025bc: 0005049b sext.w s1,a0 + 800025c0: 0014b493 seqz s1,s1 + 800025c4: 00249793 slli a5,s1,0x2 + 800025c8: 00fa07b3 add a5,s4,a5 + 800025cc: 0007e703 lwu a4,0(a5) + 800025d0: 0019069b addiw a3,s2,1 + 800025d4: fae456e3 bge s0,a4,80002580 + 800025d8: 000155b7 lui a1,0x15 + 800025dc: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 800025e0: 00040513 mv a0,s0 + 800025e4: d15ff0ef jal ra,800022f8 <__divdi3> + 800025e8: 00149793 slli a5,s1,0x1 + 800025ec: 009784b3 add s1,a5,s1 + 800025f0: 00449793 slli a5,s1,0x4 + 800025f4: 00002497 auipc s1,0x2 + 800025f8: bdc48493 addi s1,s1,-1060 # 800041d0 + 800025fc: 00f484b3 add s1,s1,a5 + 80002600: 0004e783 lwu a5,0(s1) + 80002604: 0005051b sext.w a0,a0 + 80002608: 00a9ae23 sw a0,28(s3) + 8000260c: 14f44463 blt s0,a5,80002754 + 80002610: 00100713 li a4,1 + 80002614: 40f40433 sub s0,s0,a5 + 80002618: 0044e783 lwu a5,4(s1) + 8000261c: 00070a1b sext.w s4,a4 + 80002620: 00448493 addi s1,s1,4 + 80002624: 00170713 addi a4,a4,1 + 80002628: fef456e3 bge s0,a5,80002614 + 8000262c: 000155b7 lui a1,0x15 + 80002630: 0149a823 sw s4,16(s3) + 80002634: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80002638: 00040513 mv a0,s0 + 8000263c: cbdff0ef jal ra,800022f8 <__divdi3> + 80002640: 0005051b sext.w a0,a0 + 80002644: 0015079b addiw a5,a0,1 + 80002648: 000155b7 lui a1,0x15 + 8000264c: 00f9a623 sw a5,12(s3) + 80002650: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80002654: 00040513 mv a0,s0 + 80002658: 00001ab7 lui s5,0x1 + 8000265c: 0007841b sext.w s0,a5 + 80002660: d1dff0ef jal ra,8000237c <__moddi3> + 80002664: e10a8593 addi a1,s5,-496 # e10 <_entry_offset+0xe10> + 80002668: 00050493 mv s1,a0 + 8000266c: c8dff0ef jal ra,800022f8 <__divdi3> + 80002670: e10a8593 addi a1,s5,-496 + 80002674: 00a9a423 sw a0,8(s3) + 80002678: 00048513 mv a0,s1 + 8000267c: d01ff0ef jal ra,8000237c <__moddi3> + 80002680: 03c00593 li a1,60 + 80002684: 00050493 mv s1,a0 + 80002688: c71ff0ef jal ra,800022f8 <__divdi3> + 8000268c: 00a9a223 sw a0,4(s3) + 80002690: 03c00593 li a1,60 + 80002694: 00048513 mv a0,s1 + 80002698: ce5ff0ef jal ra,8000237c <__moddi3> + 8000269c: 001a0a1b addiw s4,s4,1 + 800026a0: 0ffa7793 andi a5,s4,255 + 800026a4: 0037b793 sltiu a5,a5,3 + 800026a8: 40f9093b subw s2,s2,a5 + 800026ac: 03091913 slli s2,s2,0x30 + 800026b0: 03095913 srli s2,s2,0x30 + 800026b4: 00a9a023 sw a0,0(s3) + 800026b8: 06400593 li a1,100 + 800026bc: 00090513 mv a0,s2 + 800026c0: c41ff0ef jal ra,80002300 <__udivdi3> + 800026c4: 0029549b srliw s1,s2,0x2 + 800026c8: 0105179b slliw a5,a0,0x10 + 800026cc: 0107d79b srliw a5,a5,0x10 + 800026d0: 012484bb addw s1,s1,s2 + 800026d4: 19000593 li a1,400 + 800026d8: 00090513 mv a0,s2 + 800026dc: 0ffa7a13 andi s4,s4,255 + 800026e0: 40f484bb subw s1,s1,a5 + 800026e4: fffa0a1b addiw s4,s4,-1 + 800026e8: c19ff0ef jal ra,80002300 <__udivdi3> + 800026ec: 00002797 auipc a5,0x2 + 800026f0: b4478793 addi a5,a5,-1212 # 80004230 + 800026f4: 002a1a13 slli s4,s4,0x2 + 800026f8: 01478a33 add s4,a5,s4 + 800026fc: 000a2783 lw a5,0(s4) + 80002700: 0105151b slliw a0,a0,0x10 + 80002704: 0105551b srliw a0,a0,0x10 + 80002708: 00a484bb addw s1,s1,a0 + 8000270c: 00f484bb addw s1,s1,a5 + 80002710: 0ff47513 andi a0,s0,255 + 80002714: 00a4853b addw a0,s1,a0 + 80002718: 00700593 li a1,7 + 8000271c: c61ff0ef jal ra,8000237c <__moddi3> + 80002720: 03813083 ld ra,56(sp) + 80002724: 03013403 ld s0,48(sp) + 80002728: 0ff57513 andi a0,a0,255 + 8000272c: 00a9ac23 sw a0,24(s3) + 80002730: 0209a023 sw zero,32(s3) + 80002734: 02813483 ld s1,40(sp) + 80002738: 02013903 ld s2,32(sp) + 8000273c: 01013a03 ld s4,16(sp) + 80002740: 00813a83 ld s5,8(sp) + 80002744: 00098513 mv a0,s3 + 80002748: 01813983 ld s3,24(sp) + 8000274c: 04010113 addi sp,sp,64 + 80002750: 00008067 ret + 80002754: 00000a13 li s4,0 + 80002758: eedff06f j 80002644 + +000000008000275c <__am_timer_rtc>: + 8000275c: f9010113 addi sp,sp,-112 + 80002760: 06813023 sd s0,96(sp) + 80002764: 06113423 sd ra,104(sp) + 80002768: 04913c23 sd s1,88(sp) + 8000276c: 05213823 sd s2,80(sp) + 80002770: 00050413 mv s0,a0 + 80002774: b00024f3 csrr s1,mcycle + 80002778: 000f4937 lui s2,0xf4 + 8000277c: 24090593 addi a1,s2,576 # f4240 <_entry_offset+0xf4240> + 80002780: 00048513 mv a0,s1 + 80002784: b7dff0ef jal ra,80002300 <__udivdi3> + 80002788: 00050793 mv a5,a0 + 8000278c: 24090593 addi a1,s2,576 + 80002790: 00048513 mv a0,s1 + 80002794: 00f13423 sd a5,8(sp) + 80002798: bb1ff0ef jal ra,80002348 <__umoddi3> + 8000279c: 00050793 mv a5,a0 + 800027a0: 01810593 addi a1,sp,24 + 800027a4: 00810513 addi a0,sp,8 + 800027a8: 00f13823 sd a5,16(sp) + 800027ac: d81ff0ef jal ra,8000252c + 800027b0: 01812703 lw a4,24(sp) + 800027b4: 02812783 lw a5,40(sp) + 800027b8: 06813083 ld ra,104(sp) + 800027bc: 00e42a23 sw a4,20(s0) + 800027c0: 01c12703 lw a4,28(sp) + 800027c4: 0017879b addiw a5,a5,1 + 800027c8: 00f42223 sw a5,4(s0) + 800027cc: 00e42823 sw a4,16(s0) + 800027d0: 02012703 lw a4,32(sp) + 800027d4: 02c12783 lw a5,44(sp) + 800027d8: 05813483 ld s1,88(sp) + 800027dc: 00e42623 sw a4,12(s0) + 800027e0: 02412703 lw a4,36(sp) + 800027e4: 00f42023 sw a5,0(s0) + 800027e8: 05013903 ld s2,80(sp) + 800027ec: 00e42423 sw a4,8(s0) + 800027f0: 06013403 ld s0,96(sp) + 800027f4: 07010113 addi sp,sp,112 + 800027f8: 00008067 ret + +00000000800027fc <__am_input_keybrd>: + 800027fc: 00050023 sb zero,0(a0) + 80002800: 00052223 sw zero,4(a0) + 80002804: 00008067 ret + +0000000080002808 : + 80002808: 00002797 auipc a5,0x2 + 8000280c: c5878793 addi a5,a5,-936 # 80004460 + 80002810: 0007b503 ld a0,0(a5) + 80002814: 0087b583 ld a1,8(a5) + 80002818: ff010113 addi sp,sp,-16 + 8000281c: 00000693 li a3,0 + 80002820: 00000613 li a2,0 + 80002824: 40a585b3 sub a1,a1,a0 + 80002828: 00113423 sd ra,8(sp) + 8000282c: 1c4010ef jal ra,800039f0 + 80002830: 00813083 ld ra,8(sp) + 80002834: 00002797 auipc a5,0x2 + 80002838: 04a7b623 sd a0,76(a5) # 80004880 + 8000283c: 01010113 addi sp,sp,16 + 80002840: 00008067 ret + +0000000080002844 <_out_null>: + 80002844: 00008067 ret + +0000000080002848 <_ntoa_format>: + 80002848: fa010113 addi sp,sp,-96 + 8000284c: 07012303 lw t1,112(sp) + 80002850: 03313c23 sd s3,56(sp) + 80002854: 03413823 sd s4,48(sp) + 80002858: 03513423 sd s5,40(sp) + 8000285c: 03613023 sd s6,32(sp) + 80002860: 01713c23 sd s7,24(sp) + 80002864: 01813823 sd s8,16(sp) + 80002868: 01913423 sd s9,8(sp) + 8000286c: 00237e13 andi t3,t1,2 + 80002870: 01037e93 andi t4,t1,16 + 80002874: 04113c23 sd ra,88(sp) + 80002878: 04813823 sd s0,80(sp) + 8000287c: 04913423 sd s1,72(sp) + 80002880: 05213023 sd s2,64(sp) + 80002884: 06012f03 lw t5,96(sp) + 80002888: 06812c03 lw s8,104(sp) + 8000288c: 00050a13 mv s4,a0 + 80002890: 00058a93 mv s5,a1 + 80002894: 00060b93 mv s7,a2 + 80002898: 00068b13 mv s6,a3 + 8000289c: 00070993 mv s3,a4 + 800028a0: 000e0c9b sext.w s9,t3 + 800028a4: 000e8e9b sext.w t4,t4 + 800028a8: 060e1c63 bnez t3,80002920 <_ntoa_format+0xd8> + 800028ac: 020f1693 slli a3,t5,0x20 + 800028b0: 00137513 andi a0,t1,1 + 800028b4: 0206d693 srli a3,a3,0x20 + 800028b8: 180c1e63 bnez s8,80002a54 <_ntoa_format+0x20c> + 800028bc: 02d7f663 bgeu a5,a3,800028e8 <_ntoa_format+0xa0> + 800028c0: 02000713 li a4,32 + 800028c4: 36e78e63 beq a5,a4,80002c40 <_ntoa_format+0x3f8> + 800028c8: 03000613 li a2,48 + 800028cc: 02000593 li a1,32 + 800028d0: 0080006f j 800028d8 <_ntoa_format+0x90> + 800028d4: 00b78a63 beq a5,a1,800028e8 <_ntoa_format+0xa0> + 800028d8: 00178793 addi a5,a5,1 + 800028dc: 00f98733 add a4,s3,a5 + 800028e0: fec70fa3 sb a2,-1(a4) + 800028e4: fed7e8e3 bltu a5,a3,800028d4 <_ntoa_format+0x8c> + 800028e8: 02050c63 beqz a0,80002920 <_ntoa_format+0xd8> + 800028ec: 020c1913 slli s2,s8,0x20 + 800028f0: 02095913 srli s2,s2,0x20 + 800028f4: 0327f663 bgeu a5,s2,80002920 <_ntoa_format+0xd8> + 800028f8: 02000713 li a4,32 + 800028fc: 36e78863 beq a5,a4,80002c6c <_ntoa_format+0x424> + 80002900: 03000693 li a3,48 + 80002904: 02000613 li a2,32 + 80002908: 0080006f j 80002910 <_ntoa_format+0xc8> + 8000290c: 16c78463 beq a5,a2,80002a74 <_ntoa_format+0x22c> + 80002910: 00178793 addi a5,a5,1 + 80002914: 00f98733 add a4,s3,a5 + 80002918: fed70fa3 sb a3,-1(a4) + 8000291c: ff2798e3 bne a5,s2,8000290c <_ntoa_format+0xc4> + 80002920: 1a0e8663 beqz t4,80002acc <_ntoa_format+0x284> + 80002924: 40037713 andi a4,t1,1024 + 80002928: 20071463 bnez a4,80002b30 <_ntoa_format+0x2e8> + 8000292c: 1e079663 bnez a5,80002b18 <_ntoa_format+0x2d0> + 80002930: 01000793 li a5,16 + 80002934: 2af88863 beq a7,a5,80002be4 <_ntoa_format+0x39c> + 80002938: 00200793 li a5,2 + 8000293c: 2ef88a63 beq a7,a5,80002c30 <_ntoa_format+0x3e8> + 80002940: 03000793 li a5,48 + 80002944: 00f98023 sb a5,0(s3) + 80002948: 00100793 li a5,1 + 8000294c: 1a080463 beqz a6,80002af4 <_ntoa_format+0x2ac> + 80002950: 00f98733 add a4,s3,a5 + 80002954: 00178413 addi s0,a5,1 + 80002958: 02d00793 li a5,45 + 8000295c: 00f70023 sb a5,0(a4) + 80002960: 00337313 andi t1,t1,3 + 80002964: 20031263 bnez t1,80002b68 <_ntoa_format+0x320> + 80002968: 020c1913 slli s2,s8,0x20 + 8000296c: 02095913 srli s2,s2,0x20 + 80002970: 1f247c63 bgeu s0,s2,80002b68 <_ntoa_format+0x320> + 80002974: 40890933 sub s2,s2,s0 + 80002978: 01790933 add s2,s2,s7 + 8000297c: 000b8493 mv s1,s7 + 80002980: 00048613 mv a2,s1 + 80002984: 000b0693 mv a3,s6 + 80002988: 00148493 addi s1,s1,1 + 8000298c: 000a8593 mv a1,s5 + 80002990: 02000513 li a0,32 + 80002994: 000a00e7 jalr s4 + 80002998: ff2494e3 bne s1,s2,80002980 <_ntoa_format+0x138> + 8000299c: 02040663 beqz s0,800029c8 <_ntoa_format+0x180> + 800029a0: 01240933 add s2,s0,s2 + 800029a4: 012984b3 add s1,s3,s2 + 800029a8: 00898433 add s0,s3,s0 + 800029ac: fff44503 lbu a0,-1(s0) + 800029b0: 40848633 sub a2,s1,s0 + 800029b4: 000b0693 mv a3,s6 + 800029b8: fff40413 addi s0,s0,-1 + 800029bc: 000a8593 mv a1,s5 + 800029c0: 000a00e7 jalr s4 + 800029c4: fe8994e3 bne s3,s0,800029ac <_ntoa_format+0x164> + 800029c8: 040c8a63 beqz s9,80002a1c <_ntoa_format+0x1d4> + 800029cc: 020c1c13 slli s8,s8,0x20 + 800029d0: 41790433 sub s0,s2,s7 + 800029d4: 020c5c13 srli s8,s8,0x20 + 800029d8: 05847263 bgeu s0,s8,80002a1c <_ntoa_format+0x1d4> + 800029dc: 01740633 add a2,s0,s7 + 800029e0: 000b0693 mv a3,s6 + 800029e4: 00140413 addi s0,s0,1 + 800029e8: 000a8593 mv a1,s5 + 800029ec: 02000513 li a0,32 + 800029f0: 000a00e7 jalr s4 + 800029f4: ff8464e3 bltu s0,s8,800029dc <_ntoa_format+0x194> + 800029f8: 41790733 sub a4,s2,s7 + 800029fc: 00170713 addi a4,a4,1 + 80002a00: 00000793 li a5,0 + 80002a04: 00ec6863 bltu s8,a4,80002a14 <_ntoa_format+0x1cc> + 80002a08: fffb8793 addi a5,s7,-1 + 80002a0c: 01878c33 add s8,a5,s8 + 80002a10: 412c07b3 sub a5,s8,s2 + 80002a14: 00190913 addi s2,s2,1 + 80002a18: 00f90933 add s2,s2,a5 + 80002a1c: 05813083 ld ra,88(sp) + 80002a20: 05013403 ld s0,80(sp) + 80002a24: 04813483 ld s1,72(sp) + 80002a28: 03813983 ld s3,56(sp) + 80002a2c: 03013a03 ld s4,48(sp) + 80002a30: 02813a83 ld s5,40(sp) + 80002a34: 02013b03 ld s6,32(sp) + 80002a38: 01813b83 ld s7,24(sp) + 80002a3c: 01013c03 ld s8,16(sp) + 80002a40: 00813c83 ld s9,8(sp) + 80002a44: 00090513 mv a0,s2 + 80002a48: 04013903 ld s2,64(sp) + 80002a4c: 06010113 addi sp,sp,96 + 80002a50: 00008067 ret + 80002a54: 12050863 beqz a0,80002b84 <_ntoa_format+0x33c> + 80002a58: 00081663 bnez a6,80002a64 <_ntoa_format+0x21c> + 80002a5c: 00c37713 andi a4,t1,12 + 80002a60: 00070463 beqz a4,80002a68 <_ntoa_format+0x220> + 80002a64: fffc0c1b addiw s8,s8,-1 + 80002a68: e8d7f2e3 bgeu a5,a3,800028ec <_ntoa_format+0xa4> + 80002a6c: 02000713 li a4,32 + 80002a70: e4e79ce3 bne a5,a4,800028c8 <_ntoa_format+0x80> + 80002a74: 0e0e8063 beqz t4,80002b54 <_ntoa_format+0x30c> + 80002a78: 40037793 andi a5,t1,1024 + 80002a7c: 04079c63 bnez a5,80002ad4 <_ntoa_format+0x28c> + 80002a80: 02000793 li a5,32 + 80002a84: 0aff1063 bne t5,a5,80002b24 <_ntoa_format+0x2dc> + 80002a88: 02000793 li a5,32 + 80002a8c: 01f00713 li a4,31 + 80002a90: 01000693 li a3,16 + 80002a94: 1ad88c63 beq a7,a3,80002c4c <_ntoa_format+0x404> + 80002a98: 00200693 li a3,2 + 80002a9c: 00070793 mv a5,a4 + 80002aa0: 00d89e63 bne a7,a3,80002abc <_ntoa_format+0x274> + 80002aa4: 00e986b3 add a3,s3,a4 + 80002aa8: 00170793 addi a5,a4,1 + 80002aac: 06200713 li a4,98 + 80002ab0: 00e68023 sb a4,0(a3) + 80002ab4: 02000713 li a4,32 + 80002ab8: 00e78e63 beq a5,a4,80002ad4 <_ntoa_format+0x28c> + 80002abc: 00f98733 add a4,s3,a5 + 80002ac0: 03000693 li a3,48 + 80002ac4: 00d70023 sb a3,0(a4) + 80002ac8: 00178793 addi a5,a5,1 + 80002acc: 02000713 li a4,32 + 80002ad0: e6e79ee3 bne a5,a4,8000294c <_ntoa_format+0x104> + 80002ad4: 00337313 andi t1,t1,3 + 80002ad8: 08031263 bnez t1,80002b5c <_ntoa_format+0x314> + 80002adc: 02000413 li s0,32 + 80002ae0: 020c1913 slli s2,s8,0x20 + 80002ae4: 02095913 srli s2,s2,0x20 + 80002ae8: e92466e3 bltu s0,s2,80002974 <_ntoa_format+0x12c> + 80002aec: 000b8913 mv s2,s7 + 80002af0: eadff06f j 8000299c <_ntoa_format+0x154> + 80002af4: 00437713 andi a4,t1,4 + 80002af8: 06071c63 bnez a4,80002b70 <_ntoa_format+0x328> + 80002afc: 00837713 andi a4,t1,8 + 80002b00: 0c071863 bnez a4,80002bd0 <_ntoa_format+0x388> + 80002b04: 00337313 andi t1,t1,3 + 80002b08: 00078413 mv s0,a5 + 80002b0c: fc030ae3 beqz t1,80002ae0 <_ntoa_format+0x298> + 80002b10: 000b8913 mv s2,s7 + 80002b14: e89ff06f j 8000299c <_ntoa_format+0x154> + 80002b18: 020f1f13 slli t5,t5,0x20 + 80002b1c: 020f5f13 srli t5,t5,0x20 + 80002b20: 0aff0263 beq t5,a5,80002bc4 <_ntoa_format+0x37c> + 80002b24: 020c1913 slli s2,s8,0x20 + 80002b28: 02095913 srli s2,s2,0x20 + 80002b2c: 08f90c63 beq s2,a5,80002bc4 <_ntoa_format+0x37c> + 80002b30: 01000713 li a4,16 + 80002b34: 06e88663 beq a7,a4,80002ba0 <_ntoa_format+0x358> + 80002b38: 00200713 li a4,2 + 80002b3c: f6e89ce3 bne a7,a4,80002ab4 <_ntoa_format+0x26c> + 80002b40: 02000713 li a4,32 + 80002b44: f8e788e3 beq a5,a4,80002ad4 <_ntoa_format+0x28c> + 80002b48: 00f986b3 add a3,s3,a5 + 80002b4c: 00178793 addi a5,a5,1 + 80002b50: f5dff06f j 80002aac <_ntoa_format+0x264> + 80002b54: 00337313 andi t1,t1,3 + 80002b58: 0c030063 beqz t1,80002c18 <_ntoa_format+0x3d0> + 80002b5c: 000b8913 mv s2,s7 + 80002b60: 02000413 li s0,32 + 80002b64: e3dff06f j 800029a0 <_ntoa_format+0x158> + 80002b68: 000b8913 mv s2,s7 + 80002b6c: e35ff06f j 800029a0 <_ntoa_format+0x158> + 80002b70: 00f98733 add a4,s3,a5 + 80002b74: 00178413 addi s0,a5,1 + 80002b78: 02b00793 li a5,43 + 80002b7c: 00f70023 sb a5,0(a4) + 80002b80: de1ff06f j 80002960 <_ntoa_format+0x118> + 80002b84: d8d7fee3 bgeu a5,a3,80002920 <_ntoa_format+0xd8> + 80002b88: 02000713 li a4,32 + 80002b8c: d2e79ee3 bne a5,a4,800028c8 <_ntoa_format+0x80> + 80002b90: 0e0e8c63 beqz t4,80002c88 <_ntoa_format+0x440> + 80002b94: 40037793 andi a5,t1,1024 + 80002b98: f2079ee3 bnez a5,80002ad4 <_ntoa_format+0x28c> + 80002b9c: ee5ff06f j 80002a80 <_ntoa_format+0x238> + 80002ba0: 02037713 andi a4,t1,32 + 80002ba4: 04071c63 bnez a4,80002bfc <_ntoa_format+0x3b4> + 80002ba8: 02000713 li a4,32 + 80002bac: f2e784e3 beq a5,a4,80002ad4 <_ntoa_format+0x28c> + 80002bb0: 00f98733 add a4,s3,a5 + 80002bb4: 00178793 addi a5,a5,1 + 80002bb8: 07800693 li a3,120 + 80002bbc: 00d70023 sb a3,0(a4) + 80002bc0: ef5ff06f j 80002ab4 <_ntoa_format+0x26c> + 80002bc4: fff78713 addi a4,a5,-1 + 80002bc8: d60704e3 beqz a4,80002930 <_ntoa_format+0xe8> + 80002bcc: ec5ff06f j 80002a90 <_ntoa_format+0x248> + 80002bd0: 00f98733 add a4,s3,a5 + 80002bd4: 00178413 addi s0,a5,1 + 80002bd8: 02000793 li a5,32 + 80002bdc: 00f70023 sb a5,0(a4) + 80002be0: d81ff06f j 80002960 <_ntoa_format+0x118> + 80002be4: 02037793 andi a5,t1,32 + 80002be8: 02079c63 bnez a5,80002c20 <_ntoa_format+0x3d8> + 80002bec: 07800793 li a5,120 + 80002bf0: 00f98023 sb a5,0(s3) + 80002bf4: 00100793 li a5,1 + 80002bf8: ec5ff06f j 80002abc <_ntoa_format+0x274> + 80002bfc: 02000713 li a4,32 + 80002c00: ece78ae3 beq a5,a4,80002ad4 <_ntoa_format+0x28c> + 80002c04: 00f98733 add a4,s3,a5 + 80002c08: 05800693 li a3,88 + 80002c0c: 00d70023 sb a3,0(a4) + 80002c10: 00178793 addi a5,a5,1 + 80002c14: ea1ff06f j 80002ab4 <_ntoa_format+0x26c> + 80002c18: 02000413 li s0,32 + 80002c1c: d4dff06f j 80002968 <_ntoa_format+0x120> + 80002c20: 05800793 li a5,88 + 80002c24: 00f98023 sb a5,0(s3) + 80002c28: 00100793 li a5,1 + 80002c2c: e91ff06f j 80002abc <_ntoa_format+0x274> + 80002c30: 06200793 li a5,98 + 80002c34: 00f98023 sb a5,0(s3) + 80002c38: 00100793 li a5,1 + 80002c3c: e81ff06f j 80002abc <_ntoa_format+0x274> + 80002c40: e2051ae3 bnez a0,80002a74 <_ntoa_format+0x22c> + 80002c44: 000c8c13 mv s8,s9 + 80002c48: f49ff06f j 80002b90 <_ntoa_format+0x348> + 80002c4c: 02037693 andi a3,t1,32 + 80002c50: ffe78713 addi a4,a5,-2 + 80002c54: 00069863 bnez a3,80002c64 <_ntoa_format+0x41c> + 80002c58: 00e98733 add a4,s3,a4 + 80002c5c: fff78793 addi a5,a5,-1 + 80002c60: f59ff06f j 80002bb8 <_ntoa_format+0x370> + 80002c64: 00070793 mv a5,a4 + 80002c68: f9dff06f j 80002c04 <_ntoa_format+0x3bc> + 80002c6c: 000e8e63 beqz t4,80002c88 <_ntoa_format+0x440> + 80002c70: 40037713 andi a4,t1,1024 + 80002c74: 00071e63 bnez a4,80002c90 <_ntoa_format+0x448> + 80002c78: 02ff0e63 beq t5,a5,80002cb4 <_ntoa_format+0x46c> + 80002c7c: e4fc1ce3 bne s8,a5,80002ad4 <_ntoa_format+0x28c> + 80002c80: 01f00713 li a4,31 + 80002c84: e0dff06f j 80002a90 <_ntoa_format+0x248> + 80002c88: 02000413 li s0,32 + 80002c8c: cd5ff06f j 80002960 <_ntoa_format+0x118> + 80002c90: 01000793 li a5,16 + 80002c94: 02f88c63 beq a7,a5,80002ccc <_ntoa_format+0x484> + 80002c98: 00200793 li a5,2 + 80002c9c: e2f88ce3 beq a7,a5,80002ad4 <_ntoa_format+0x28c> + 80002ca0: 00337313 andi t1,t1,3 + 80002ca4: ea031ce3 bnez t1,80002b5c <_ntoa_format+0x314> + 80002ca8: 02000413 li s0,32 + 80002cac: cd2464e3 bltu s0,s2,80002974 <_ntoa_format+0x12c> + 80002cb0: e3dff06f j 80002aec <_ntoa_format+0x2a4> + 80002cb4: 01000713 li a4,16 + 80002cb8: f8e88ae3 beq a7,a4,80002c4c <_ntoa_format+0x404> + 80002cbc: 00200793 li a5,2 + 80002cc0: 00f88c63 beq a7,a5,80002cd8 <_ntoa_format+0x490> + 80002cc4: 01f00793 li a5,31 + 80002cc8: df5ff06f j 80002abc <_ntoa_format+0x274> + 80002ccc: 02037793 andi a5,t1,32 + 80002cd0: fc0788e3 beqz a5,80002ca0 <_ntoa_format+0x458> + 80002cd4: e01ff06f j 80002ad4 <_ntoa_format+0x28c> + 80002cd8: 01f00713 li a4,31 + 80002cdc: dc9ff06f j 80002aa4 <_ntoa_format+0x25c> + +0000000080002ce0 <_ntoa_long>: + 80002ce0: f4010113 addi sp,sp,-192 + 80002ce4: 09413823 sd s4,144(sp) + 80002ce8: 09513423 sd s5,136(sp) + 80002cec: 09613023 sd s6,128(sp) + 80002cf0: 07713c23 sd s7,120(sp) + 80002cf4: 07813823 sd s8,112(sp) + 80002cf8: 07913423 sd s9,104(sp) + 80002cfc: 05b13c23 sd s11,88(sp) + 80002d00: 0a113c23 sd ra,184(sp) + 80002d04: 0a813823 sd s0,176(sp) + 80002d08: 0a913423 sd s1,168(sp) + 80002d0c: 0b213023 sd s2,160(sp) + 80002d10: 09313c23 sd s3,152(sp) + 80002d14: 07a13023 sd s10,96(sp) + 80002d18: 02a13023 sd a0,32(sp) + 80002d1c: 03113423 sd a7,40(sp) + 80002d20: 0c812a03 lw s4,200(sp) + 80002d24: 00070d93 mv s11,a4 + 80002d28: 00058b13 mv s6,a1 + 80002d2c: 00060b93 mv s7,a2 + 80002d30: 00068c13 mv s8,a3 + 80002d34: 00078c93 mv s9,a5 + 80002d38: 00080a93 mv s5,a6 + 80002d3c: 00071863 bnez a4,80002d4c <_ntoa_long+0x6c> + 80002d40: 400a7793 andi a5,s4,1024 + 80002d44: fefa7a13 andi s4,s4,-17 + 80002d48: 0e079663 bnez a5,80002e34 <_ntoa_long+0x154> + 80002d4c: 020a7793 andi a5,s4,32 + 80002d50: 06100413 li s0,97 + 80002d54: 0c079c63 bnez a5,80002e2c <_ntoa_long+0x14c> + 80002d58: 00000d13 li s10,0 + 80002d5c: 03010493 addi s1,sp,48 + 80002d60: 00900913 li s2,9 + 80002d64: ff64041b addiw s0,s0,-10 + 80002d68: 02000993 li s3,32 + 80002d6c: 00c0006f j 80002d78 <_ntoa_long+0x98> + 80002d70: 053d0463 beq s10,s3,80002db8 <_ntoa_long+0xd8> + 80002d74: 00050d93 mv s11,a0 + 80002d78: 000a8593 mv a1,s5 + 80002d7c: 000d8513 mv a0,s11 + 80002d80: dc8ff0ef jal ra,80002348 <__umoddi3> + 80002d84: 0ff57313 andi t1,a0,255 + 80002d88: 0303071b addiw a4,t1,48 + 80002d8c: 0064033b addw t1,s0,t1 + 80002d90: 0ff37313 andi t1,t1,255 + 80002d94: 00a96463 bltu s2,a0,80002d9c <_ntoa_long+0xbc> + 80002d98: 0ff77313 andi t1,a4,255 + 80002d9c: 001d0d13 addi s10,s10,1 + 80002da0: 01a48733 add a4,s1,s10 + 80002da4: 000d8513 mv a0,s11 + 80002da8: 000a8593 mv a1,s5 + 80002dac: fe670fa3 sb t1,-1(a4) + 80002db0: d50ff0ef jal ra,80002300 <__udivdi3> + 80002db4: fb5dfee3 bgeu s11,s5,80002d70 <_ntoa_long+0x90> + 80002db8: 0c012703 lw a4,192(sp) + 80002dbc: 02813783 ld a5,40(sp) + 80002dc0: 02013503 ld a0,32(sp) + 80002dc4: 01413823 sd s4,16(sp) + 80002dc8: 00e13423 sd a4,8(sp) + 80002dcc: 00f13023 sd a5,0(sp) + 80002dd0: 000a889b sext.w a7,s5 + 80002dd4: 000c8813 mv a6,s9 + 80002dd8: 000d0793 mv a5,s10 + 80002ddc: 00048713 mv a4,s1 + 80002de0: 000c0693 mv a3,s8 + 80002de4: 000b8613 mv a2,s7 + 80002de8: 000b0593 mv a1,s6 + 80002dec: a5dff0ef jal ra,80002848 <_ntoa_format> + 80002df0: 0b813083 ld ra,184(sp) + 80002df4: 0b013403 ld s0,176(sp) + 80002df8: 0a813483 ld s1,168(sp) + 80002dfc: 0a013903 ld s2,160(sp) + 80002e00: 09813983 ld s3,152(sp) + 80002e04: 09013a03 ld s4,144(sp) + 80002e08: 08813a83 ld s5,136(sp) + 80002e0c: 08013b03 ld s6,128(sp) + 80002e10: 07813b83 ld s7,120(sp) + 80002e14: 07013c03 ld s8,112(sp) + 80002e18: 06813c83 ld s9,104(sp) + 80002e1c: 06013d03 ld s10,96(sp) + 80002e20: 05813d83 ld s11,88(sp) + 80002e24: 0c010113 addi sp,sp,192 + 80002e28: 00008067 ret + 80002e2c: 04100413 li s0,65 + 80002e30: f29ff06f j 80002d58 <_ntoa_long+0x78> + 80002e34: 00000d13 li s10,0 + 80002e38: 03010493 addi s1,sp,48 + 80002e3c: f7dff06f j 80002db8 <_ntoa_long+0xd8> + +0000000080002e40 <_ntoa_long_long>: + 80002e40: f4010113 addi sp,sp,-192 + 80002e44: 09413823 sd s4,144(sp) + 80002e48: 09513423 sd s5,136(sp) + 80002e4c: 09613023 sd s6,128(sp) + 80002e50: 07713c23 sd s7,120(sp) + 80002e54: 07813823 sd s8,112(sp) + 80002e58: 07913423 sd s9,104(sp) + 80002e5c: 05b13c23 sd s11,88(sp) + 80002e60: 0a113c23 sd ra,184(sp) + 80002e64: 0a813823 sd s0,176(sp) + 80002e68: 0a913423 sd s1,168(sp) + 80002e6c: 0b213023 sd s2,160(sp) + 80002e70: 09313c23 sd s3,152(sp) + 80002e74: 07a13023 sd s10,96(sp) + 80002e78: 02a13023 sd a0,32(sp) + 80002e7c: 03113423 sd a7,40(sp) + 80002e80: 0c812a03 lw s4,200(sp) + 80002e84: 00070d93 mv s11,a4 + 80002e88: 00058b13 mv s6,a1 + 80002e8c: 00060b93 mv s7,a2 + 80002e90: 00068c13 mv s8,a3 + 80002e94: 00078c93 mv s9,a5 + 80002e98: 00080a93 mv s5,a6 + 80002e9c: 00071863 bnez a4,80002eac <_ntoa_long_long+0x6c> + 80002ea0: 400a7793 andi a5,s4,1024 + 80002ea4: fefa7a13 andi s4,s4,-17 + 80002ea8: 0e079663 bnez a5,80002f94 <_ntoa_long_long+0x154> + 80002eac: 020a7793 andi a5,s4,32 + 80002eb0: 06100413 li s0,97 + 80002eb4: 0c079c63 bnez a5,80002f8c <_ntoa_long_long+0x14c> + 80002eb8: 00000d13 li s10,0 + 80002ebc: 03010493 addi s1,sp,48 + 80002ec0: 00900913 li s2,9 + 80002ec4: ff64041b addiw s0,s0,-10 + 80002ec8: 02000993 li s3,32 + 80002ecc: 00c0006f j 80002ed8 <_ntoa_long_long+0x98> + 80002ed0: 053d0463 beq s10,s3,80002f18 <_ntoa_long_long+0xd8> + 80002ed4: 00050d93 mv s11,a0 + 80002ed8: 000a8593 mv a1,s5 + 80002edc: 000d8513 mv a0,s11 + 80002ee0: c68ff0ef jal ra,80002348 <__umoddi3> + 80002ee4: 0ff57313 andi t1,a0,255 + 80002ee8: 0303071b addiw a4,t1,48 + 80002eec: 0064033b addw t1,s0,t1 + 80002ef0: 0ff37313 andi t1,t1,255 + 80002ef4: 00a96463 bltu s2,a0,80002efc <_ntoa_long_long+0xbc> + 80002ef8: 0ff77313 andi t1,a4,255 + 80002efc: 001d0d13 addi s10,s10,1 + 80002f00: 01a48733 add a4,s1,s10 + 80002f04: 000d8513 mv a0,s11 + 80002f08: 000a8593 mv a1,s5 + 80002f0c: fe670fa3 sb t1,-1(a4) + 80002f10: bf0ff0ef jal ra,80002300 <__udivdi3> + 80002f14: fb5dfee3 bgeu s11,s5,80002ed0 <_ntoa_long_long+0x90> + 80002f18: 0c012703 lw a4,192(sp) + 80002f1c: 02813783 ld a5,40(sp) + 80002f20: 02013503 ld a0,32(sp) + 80002f24: 01413823 sd s4,16(sp) + 80002f28: 00e13423 sd a4,8(sp) + 80002f2c: 00f13023 sd a5,0(sp) + 80002f30: 000a889b sext.w a7,s5 + 80002f34: 000c8813 mv a6,s9 + 80002f38: 000d0793 mv a5,s10 + 80002f3c: 00048713 mv a4,s1 + 80002f40: 000c0693 mv a3,s8 + 80002f44: 000b8613 mv a2,s7 + 80002f48: 000b0593 mv a1,s6 + 80002f4c: 8fdff0ef jal ra,80002848 <_ntoa_format> + 80002f50: 0b813083 ld ra,184(sp) + 80002f54: 0b013403 ld s0,176(sp) + 80002f58: 0a813483 ld s1,168(sp) + 80002f5c: 0a013903 ld s2,160(sp) + 80002f60: 09813983 ld s3,152(sp) + 80002f64: 09013a03 ld s4,144(sp) + 80002f68: 08813a83 ld s5,136(sp) + 80002f6c: 08013b03 ld s6,128(sp) + 80002f70: 07813b83 ld s7,120(sp) + 80002f74: 07013c03 ld s8,112(sp) + 80002f78: 06813c83 ld s9,104(sp) + 80002f7c: 06013d03 ld s10,96(sp) + 80002f80: 05813d83 ld s11,88(sp) + 80002f84: 0c010113 addi sp,sp,192 + 80002f88: 00008067 ret + 80002f8c: 04100413 li s0,65 + 80002f90: f29ff06f j 80002eb8 <_ntoa_long_long+0x78> + 80002f94: 00000d13 li s10,0 + 80002f98: 03010493 addi s1,sp,48 + 80002f9c: f7dff06f j 80002f18 <_ntoa_long_long+0xd8> + +0000000080002fa0 <_vsnprintf>: + 80002fa0: f6010113 addi sp,sp,-160 + 80002fa4: 08913423 sd s1,136(sp) + 80002fa8: 09213023 sd s2,128(sp) + 80002fac: 07313c23 sd s3,120(sp) + 80002fb0: 05713c23 sd s7,88(sp) + 80002fb4: 05813823 sd s8,80(sp) + 80002fb8: 08113c23 sd ra,152(sp) + 80002fbc: 08813823 sd s0,144(sp) + 80002fc0: 07413823 sd s4,112(sp) + 80002fc4: 07513423 sd s5,104(sp) + 80002fc8: 07613023 sd s6,96(sp) + 80002fcc: 05913423 sd s9,72(sp) + 80002fd0: 05a13023 sd s10,64(sp) + 80002fd4: 03b13c23 sd s11,56(sp) + 80002fd8: 00058493 mv s1,a1 + 80002fdc: 00060c13 mv s8,a2 + 80002fe0: 00068b93 mv s7,a3 + 80002fe4: 00070993 mv s3,a4 + 80002fe8: 00000917 auipc s2,0x0 + 80002fec: 85c90913 addi s2,s2,-1956 # 80002844 <_out_null> + 80002ff0: 00058463 beqz a1,80002ff8 <_vsnprintf+0x58> + 80002ff4: 00050913 mv s2,a0 + 80002ff8: 000bc503 lbu a0,0(s7) + 80002ffc: 00000d13 li s10,0 + 80003000: 66050663 beqz a0,8000366c <_vsnprintf+0x6cc> + 80003004: 000107b7 lui a5,0x10 + 80003008: fff78793 addi a5,a5,-1 # ffff <_entry_offset+0xffff> + 8000300c: 02500a13 li s4,37 + 80003010: 00001417 auipc s0,0x1 + 80003014: 25040413 addi s0,s0,592 # 80004260 + 80003018: 00f13c23 sd a5,24(sp) + 8000301c: 0200006f j 8000303c <_vsnprintf+0x9c> + 80003020: 000d0613 mv a2,s10 + 80003024: 000c0693 mv a3,s8 + 80003028: 00048593 mv a1,s1 + 8000302c: 001d0d13 addi s10,s10,1 + 80003030: 000900e7 jalr s2 + 80003034: 000bc503 lbu a0,0(s7) + 80003038: 1c050263 beqz a0,800031fc <_vsnprintf+0x25c> + 8000303c: 001b8b93 addi s7,s7,1 + 80003040: ff4510e3 bne a0,s4,80003020 <_vsnprintf+0x80> + 80003044: 00000593 li a1,0 + 80003048: 01000813 li a6,16 + 8000304c: 000bc503 lbu a0,0(s7) + 80003050: 001b8713 addi a4,s7,1 + 80003054: 00070613 mv a2,a4 + 80003058: fe05079b addiw a5,a0,-32 + 8000305c: 0ff7f793 andi a5,a5,255 + 80003060: 00f86c63 bltu a6,a5,80003078 <_vsnprintf+0xd8> + 80003064: 00279793 slli a5,a5,0x2 + 80003068: 008787b3 add a5,a5,s0 + 8000306c: 0007a783 lw a5,0(a5) + 80003070: 008787b3 add a5,a5,s0 + 80003074: 00078067 jr a5 + 80003078: fd05079b addiw a5,a0,-48 + 8000307c: 0ff7f793 andi a5,a5,255 + 80003080: 00900813 li a6,9 + 80003084: 0ef87c63 bgeu a6,a5,8000317c <_vsnprintf+0x1dc> + 80003088: 02a00793 li a5,42 + 8000308c: 20f50463 beq a0,a5,80003294 <_vsnprintf+0x2f4> + 80003090: 000b8613 mv a2,s7 + 80003094: 00000d93 li s11,0 + 80003098: 00070b93 mv s7,a4 + 8000309c: 02e00793 li a5,46 + 800030a0: 00000c93 li s9,0 + 800030a4: 12f50463 beq a0,a5,800031cc <_vsnprintf+0x22c> + 800030a8: f985079b addiw a5,a0,-104 + 800030ac: 0ff7f793 andi a5,a5,255 + 800030b0: 01200713 li a4,18 + 800030b4: 08f76463 bltu a4,a5,8000313c <_vsnprintf+0x19c> + 800030b8: 00001717 auipc a4,0x1 + 800030bc: 1ec70713 addi a4,a4,492 # 800042a4 + 800030c0: 00279793 slli a5,a5,0x2 + 800030c4: 00e787b3 add a5,a5,a4 + 800030c8: 0007a783 lw a5,0(a5) + 800030cc: 00e787b3 add a5,a5,a4 + 800030d0: 00078067 jr a5 + 800030d4: 0015e593 ori a1,a1,1 + 800030d8: 0005859b sext.w a1,a1 + 800030dc: 00070b93 mv s7,a4 + 800030e0: f6dff06f j 8000304c <_vsnprintf+0xac> + 800030e4: 0025e593 ori a1,a1,2 + 800030e8: 0005859b sext.w a1,a1 + 800030ec: 00070b93 mv s7,a4 + 800030f0: f5dff06f j 8000304c <_vsnprintf+0xac> + 800030f4: 0045e593 ori a1,a1,4 + 800030f8: 0005859b sext.w a1,a1 + 800030fc: 00070b93 mv s7,a4 + 80003100: f4dff06f j 8000304c <_vsnprintf+0xac> + 80003104: 0105e593 ori a1,a1,16 + 80003108: 0005859b sext.w a1,a1 + 8000310c: 00070b93 mv s7,a4 + 80003110: f3dff06f j 8000304c <_vsnprintf+0xac> + 80003114: 0085e593 ori a1,a1,8 + 80003118: 0005859b sext.w a1,a1 + 8000311c: 00070b93 mv s7,a4 + 80003120: f2dff06f j 8000304c <_vsnprintf+0xac> + 80003124: 00164503 lbu a0,1(a2) + 80003128: 06800793 li a5,104 + 8000312c: 52f50663 beq a0,a5,80003658 <_vsnprintf+0x6b8> + 80003130: 0805e593 ori a1,a1,128 + 80003134: 0005859b sext.w a1,a1 + 80003138: 001b8b93 addi s7,s7,1 + 8000313c: fdb5079b addiw a5,a0,-37 + 80003140: 0ff7f793 andi a5,a5,255 + 80003144: 05300713 li a4,83 + 80003148: ecf76ce3 bltu a4,a5,80003020 <_vsnprintf+0x80> + 8000314c: 00001717 auipc a4,0x1 + 80003150: 1a470713 addi a4,a4,420 # 800042f0 + 80003154: 00279793 slli a5,a5,0x2 + 80003158: 00e787b3 add a5,a5,a4 + 8000315c: 0007a783 lw a5,0(a5) + 80003160: 00e787b3 add a5,a5,a4 + 80003164: 00078067 jr a5 + 80003168: 00164503 lbu a0,1(a2) + 8000316c: 1005e593 ori a1,a1,256 + 80003170: 0005859b sext.w a1,a1 + 80003174: 001b8b93 addi s7,s7,1 + 80003178: fc5ff06f j 8000313c <_vsnprintf+0x19c> + 8000317c: 00000d93 li s11,0 + 80003180: 00900813 li a6,9 + 80003184: 0080006f j 8000318c <_vsnprintf+0x1ec> + 80003188: 00170713 addi a4,a4,1 + 8000318c: 002d979b slliw a5,s11,0x2 + 80003190: 01b787bb addw a5,a5,s11 + 80003194: 0017979b slliw a5,a5,0x1 + 80003198: 00a787bb addw a5,a5,a0 + 8000319c: 00074503 lbu a0,0(a4) + 800031a0: 000b8893 mv a7,s7 + 800031a4: fd078d9b addiw s11,a5,-48 + 800031a8: fd05061b addiw a2,a0,-48 + 800031ac: 0ff67613 andi a2,a2,255 + 800031b0: 00070b93 mv s7,a4 + 800031b4: fcc87ae3 bgeu a6,a2,80003188 <_vsnprintf+0x1e8> + 800031b8: 02e00793 li a5,46 + 800031bc: 00070613 mv a2,a4 + 800031c0: 00288b93 addi s7,a7,2 + 800031c4: 00000c93 li s9,0 + 800031c8: eef510e3 bne a0,a5,800030a8 <_vsnprintf+0x108> + 800031cc: 00164503 lbu a0,1(a2) + 800031d0: 4005e593 ori a1,a1,1024 + 800031d4: 00900713 li a4,9 + 800031d8: fd05079b addiw a5,a0,-48 + 800031dc: 0ff7f793 andi a5,a5,255 + 800031e0: 0005859b sext.w a1,a1 + 800031e4: 06f77c63 bgeu a4,a5,8000325c <_vsnprintf+0x2bc> + 800031e8: 02a00793 li a5,42 + 800031ec: 32f50e63 beq a0,a5,80003528 <_vsnprintf+0x588> + 800031f0: 000b8613 mv a2,s7 + 800031f4: 001b8b93 addi s7,s7,1 + 800031f8: eb1ff06f j 800030a8 <_vsnprintf+0x108> + 800031fc: 000d041b sext.w s0,s10 + 80003200: 018d6463 bltu s10,s8,80003208 <_vsnprintf+0x268> + 80003204: fffc0d13 addi s10,s8,-1 + 80003208: 000c0693 mv a3,s8 + 8000320c: 000d0613 mv a2,s10 + 80003210: 00048593 mv a1,s1 + 80003214: 00000513 li a0,0 + 80003218: 000900e7 jalr s2 + 8000321c: 09813083 ld ra,152(sp) + 80003220: 00040513 mv a0,s0 + 80003224: 09013403 ld s0,144(sp) + 80003228: 08813483 ld s1,136(sp) + 8000322c: 08013903 ld s2,128(sp) + 80003230: 07813983 ld s3,120(sp) + 80003234: 07013a03 ld s4,112(sp) + 80003238: 06813a83 ld s5,104(sp) + 8000323c: 06013b03 ld s6,96(sp) + 80003240: 05813b83 ld s7,88(sp) + 80003244: 05013c03 ld s8,80(sp) + 80003248: 04813c83 ld s9,72(sp) + 8000324c: 04013d03 ld s10,64(sp) + 80003250: 03813d83 ld s11,56(sp) + 80003254: 0a010113 addi sp,sp,160 + 80003258: 00008067 ret + 8000325c: 002c979b slliw a5,s9,0x2 + 80003260: 019788bb addw a7,a5,s9 + 80003264: 000b8813 mv a6,s7 + 80003268: 0018989b slliw a7,a7,0x1 + 8000326c: 001b8b93 addi s7,s7,1 + 80003270: 00a888bb addw a7,a7,a0 + 80003274: 000bc503 lbu a0,0(s7) + 80003278: fd088c9b addiw s9,a7,-48 + 8000327c: fd05079b addiw a5,a0,-48 + 80003280: 0ff7f793 andi a5,a5,255 + 80003284: fcf77ce3 bgeu a4,a5,8000325c <_vsnprintf+0x2bc> + 80003288: 000b8613 mv a2,s7 + 8000328c: 00280b93 addi s7,a6,2 + 80003290: e19ff06f j 800030a8 <_vsnprintf+0x108> + 80003294: 0009a783 lw a5,0(s3) + 80003298: 00898993 addi s3,s3,8 + 8000329c: 00078d9b sext.w s11,a5 + 800032a0: 0007c863 bltz a5,800032b0 <_vsnprintf+0x310> + 800032a4: 001bc503 lbu a0,1(s7) + 800032a8: 002b8b93 addi s7,s7,2 + 800032ac: df1ff06f j 8000309c <_vsnprintf+0xfc> + 800032b0: 0025e593 ori a1,a1,2 + 800032b4: 001bc503 lbu a0,1(s7) + 800032b8: 0005859b sext.w a1,a1 + 800032bc: 40f00dbb negw s11,a5 + 800032c0: 002b8b93 addi s7,s7,2 + 800032c4: dd9ff06f j 8000309c <_vsnprintf+0xfc> + 800032c8: 07800793 li a5,120 + 800032cc: 00898a93 addi s5,s3,8 + 800032d0: 56f50063 beq a0,a5,80003830 <_vsnprintf+0x890> + 800032d4: 05800793 li a5,88 + 800032d8: 28f50463 beq a0,a5,80003560 <_vsnprintf+0x5c0> + 800032dc: 06f00793 li a5,111 + 800032e0: 4af50c63 beq a0,a5,80003798 <_vsnprintf+0x7f8> + 800032e4: 06200793 li a5,98 + 800032e8: 54f50063 beq a0,a5,80003828 <_vsnprintf+0x888> + 800032ec: fef5ff13 andi t5,a1,-17 + 800032f0: 4005f793 andi a5,a1,1024 + 800032f4: 06900713 li a4,105 + 800032f8: 000f0f1b sext.w t5,t5 + 800032fc: 0007879b sext.w a5,a5 + 80003300: 5ae51063 bne a0,a4,800038a0 <_vsnprintf+0x900> + 80003304: 48079663 bnez a5,80003790 <_vsnprintf+0x7f0> + 80003308: 2005f593 andi a1,a1,512 + 8000330c: 0005879b sext.w a5,a1 + 80003310: 00a00813 li a6,10 + 80003314: 42079663 bnez a5,80003740 <_vsnprintf+0x7a0> + 80003318: 100f7793 andi a5,t5,256 + 8000331c: 000f0613 mv a2,t5 + 80003320: 4e079063 bnez a5,80003800 <_vsnprintf+0x860> + 80003324: 040f7713 andi a4,t5,64 + 80003328: 0009a783 lw a5,0(s3) + 8000332c: 4a071a63 bnez a4,800037e0 <_vsnprintf+0x840> + 80003330: 08067613 andi a2,a2,128 + 80003334: 52060a63 beqz a2,80003868 <_vsnprintf+0x8c8> + 80003338: 0107979b slliw a5,a5,0x10 + 8000333c: 4107d79b sraiw a5,a5,0x10 + 80003340: 40f7d61b sraiw a2,a5,0xf + 80003344: 00c7c733 xor a4,a5,a2 + 80003348: 40c7073b subw a4,a4,a2 + 8000334c: 03071713 slli a4,a4,0x30 + 80003350: 03075713 srli a4,a4,0x30 + 80003354: 000d0613 mv a2,s10 + 80003358: 01e13423 sd t5,8(sp) + 8000335c: 01b13023 sd s11,0(sp) + 80003360: 000c8893 mv a7,s9 + 80003364: 01f7d79b srliw a5,a5,0x1f + 80003368: 000c0693 mv a3,s8 + 8000336c: 00048593 mv a1,s1 + 80003370: 00090513 mv a0,s2 + 80003374: 96dff0ef jal ra,80002ce0 <_ntoa_long> + 80003378: 00050d13 mv s10,a0 + 8000337c: 000a8993 mv s3,s5 + 80003380: cb5ff06f j 80003034 <_vsnprintf+0x94> + 80003384: 00164503 lbu a0,1(a2) + 80003388: 06c00793 li a5,108 + 8000338c: def510e3 bne a0,a5,8000316c <_vsnprintf+0x1cc> + 80003390: 3005e593 ori a1,a1,768 + 80003394: 00264503 lbu a0,2(a2) + 80003398: 0005859b sext.w a1,a1 + 8000339c: 00360b93 addi s7,a2,3 + 800033a0: d9dff06f j 8000313c <_vsnprintf+0x19c> + 800033a4: 00898793 addi a5,s3,8 + 800033a8: 001d0813 addi a6,s10,1 + 800033ac: 0025f593 andi a1,a1,2 + 800033b0: 02f13023 sd a5,32(sp) + 800033b4: 00080b13 mv s6,a6 + 800033b8: 32058263 beqz a1,800036dc <_vsnprintf+0x73c> + 800033bc: 0009c503 lbu a0,0(s3) + 800033c0: 000c0693 mv a3,s8 + 800033c4: 000d0613 mv a2,s10 + 800033c8: 00048593 mv a1,s1 + 800033cc: 000900e7 jalr s2 + 800033d0: 00100793 li a5,1 + 800033d4: 43b7f063 bgeu a5,s11,800037f4 <_vsnprintf+0x854> + 800033d8: ffed879b addiw a5,s11,-2 + 800033dc: 02079a93 slli s5,a5,0x20 + 800033e0: 020ada93 srli s5,s5,0x20 + 800033e4: 002d0d13 addi s10,s10,2 + 800033e8: 015d0cb3 add s9,s10,s5 + 800033ec: 000b0613 mv a2,s6 + 800033f0: 000c0693 mv a3,s8 + 800033f4: 001b0b13 addi s6,s6,1 + 800033f8: 00048593 mv a1,s1 + 800033fc: 02000513 li a0,32 + 80003400: 000900e7 jalr s2 + 80003404: ff6c94e3 bne s9,s6,800033ec <_vsnprintf+0x44c> + 80003408: 02013983 ld s3,32(sp) + 8000340c: 015d0d33 add s10,s10,s5 + 80003410: c25ff06f j 80003034 <_vsnprintf+0x94> + 80003414: 000d0613 mv a2,s10 + 80003418: 000c0693 mv a3,s8 + 8000341c: 00048593 mv a1,s1 + 80003420: 02500513 li a0,37 + 80003424: 001d0d13 addi s10,s10,1 + 80003428: 000900e7 jalr s2 + 8000342c: c09ff06f j 80003034 <_vsnprintf+0x94> + 80003430: 0009ba83 ld s5,0(s3) + 80003434: 00898793 addi a5,s3,8 + 80003438: 02f13023 sd a5,32(sp) + 8000343c: 000ac503 lbu a0,0(s5) + 80003440: 100c9663 bnez s9,8000354c <_vsnprintf+0x5ac> + 80003444: ffe00793 li a5,-2 + 80003448: 42050863 beqz a0,80003878 <_vsnprintf+0x8d8> + 8000344c: 00178693 addi a3,a5,1 + 80003450: 00da8633 add a2,s5,a3 + 80003454: 000a8793 mv a5,s5 + 80003458: 0080006f j 80003460 <_vsnprintf+0x4c0> + 8000345c: 1ec78863 beq a5,a2,8000364c <_vsnprintf+0x6ac> + 80003460: 0017c703 lbu a4,1(a5) + 80003464: 00178793 addi a5,a5,1 + 80003468: fe071ae3 bnez a4,8000345c <_vsnprintf+0x4bc> + 8000346c: 415787bb subw a5,a5,s5 + 80003470: 00f13823 sd a5,16(sp) + 80003474: 4005f793 andi a5,a1,1024 + 80003478: 0007899b sext.w s3,a5 + 8000347c: 00078c63 beqz a5,80003494 <_vsnprintf+0x4f4> + 80003480: 01013703 ld a4,16(sp) + 80003484: 000c879b sext.w a5,s9 + 80003488: 01977463 bgeu a4,s9,80003490 <_vsnprintf+0x4f0> + 8000348c: 0007079b sext.w a5,a4 + 80003490: 00f13823 sd a5,16(sp) + 80003494: 0025f593 andi a1,a1,2 + 80003498: 0005879b sext.w a5,a1 + 8000349c: 02f13423 sd a5,40(sp) + 800034a0: 1c058a63 beqz a1,80003674 <_vsnprintf+0x6d4> + 800034a4: 14050863 beqz a0,800035f4 <_vsnprintf+0x654> + 800034a8: 000d0613 mv a2,s10 + 800034ac: 00098863 beqz s3,800034bc <_vsnprintf+0x51c> + 800034b0: fffc879b addiw a5,s9,-1 + 800034b4: 120c8863 beqz s9,800035e4 <_vsnprintf+0x644> + 800034b8: 00078c93 mv s9,a5 + 800034bc: 000c0693 mv a3,s8 + 800034c0: 00048593 mv a1,s1 + 800034c4: 00160b13 addi s6,a2,1 + 800034c8: 000900e7 jalr s2 + 800034cc: 41ab07b3 sub a5,s6,s10 + 800034d0: 00fa87b3 add a5,s5,a5 + 800034d4: 0007c503 lbu a0,0(a5) + 800034d8: 10050863 beqz a0,800035e8 <_vsnprintf+0x648> + 800034dc: 000b0613 mv a2,s6 + 800034e0: fcdff06f j 800034ac <_vsnprintf+0x50c> + 800034e4: 0009b703 ld a4,0(s3) + 800034e8: 0215e593 ori a1,a1,33 + 800034ec: 0005859b sext.w a1,a1 + 800034f0: 01000793 li a5,16 + 800034f4: 000d0613 mv a2,s10 + 800034f8: 00b13423 sd a1,8(sp) + 800034fc: 00f13023 sd a5,0(sp) + 80003500: 000c8893 mv a7,s9 + 80003504: 01000813 li a6,16 + 80003508: 00000793 li a5,0 + 8000350c: 000c0693 mv a3,s8 + 80003510: 00048593 mv a1,s1 + 80003514: 00090513 mv a0,s2 + 80003518: 929ff0ef jal ra,80002e40 <_ntoa_long_long> + 8000351c: 00898993 addi s3,s3,8 + 80003520: 00050d13 mv s10,a0 + 80003524: b11ff06f j 80003034 <_vsnprintf+0x94> + 80003528: 0009a883 lw a7,0(s3) + 8000352c: 00264503 lbu a0,2(a2) + 80003530: 00360b93 addi s7,a2,3 + 80003534: fff8c793 not a5,a7 + 80003538: 43f7d793 srai a5,a5,0x3f + 8000353c: 00f8fcb3 and s9,a7,a5 + 80003540: 00898993 addi s3,s3,8 + 80003544: 00260613 addi a2,a2,2 + 80003548: b61ff06f j 800030a8 <_vsnprintf+0x108> + 8000354c: 020c9793 slli a5,s9,0x20 + 80003550: 0207d793 srli a5,a5,0x20 + 80003554: 32050263 beqz a0,80003878 <_vsnprintf+0x8d8> + 80003558: fff78793 addi a5,a5,-1 + 8000355c: ef1ff06f j 8000344c <_vsnprintf+0x4ac> + 80003560: ff35ff13 andi t5,a1,-13 + 80003564: 000f0f1b sext.w t5,t5 + 80003568: 4005f793 andi a5,a1,1024 + 8000356c: 020f6f13 ori t5,t5,32 + 80003570: 20078863 beqz a5,80003780 <_vsnprintf+0x7e0> + 80003574: 01000813 li a6,16 + 80003578: ffef7f13 andi t5,t5,-2 + 8000357c: 000f0f1b sext.w t5,t5 + 80003580: 200f7793 andi a5,t5,512 + 80003584: 06900713 li a4,105 + 80003588: 0007879b sext.w a5,a5 + 8000358c: d8e504e3 beq a0,a4,80003314 <_vsnprintf+0x374> + 80003590: 06400713 li a4,100 + 80003594: d8e500e3 beq a0,a4,80003314 <_vsnprintf+0x374> + 80003598: 22079663 bnez a5,800037c4 <_vsnprintf+0x824> + 8000359c: 100f7793 andi a5,t5,256 + 800035a0: 000f0713 mv a4,t5 + 800035a4: 2a079463 bnez a5,8000384c <_vsnprintf+0x8ac> + 800035a8: 040f7793 andi a5,t5,64 + 800035ac: 24079063 bnez a5,800037ec <_vsnprintf+0x84c> + 800035b0: 08077713 andi a4,a4,128 + 800035b4: 2c070663 beqz a4,80003880 <_vsnprintf+0x8e0> + 800035b8: 0009a703 lw a4,0(s3) + 800035bc: 01813783 ld a5,24(sp) + 800035c0: 00e7f733 and a4,a5,a4 + 800035c4: 02071713 slli a4,a4,0x20 + 800035c8: 000d0613 mv a2,s10 + 800035cc: 01e13423 sd t5,8(sp) + 800035d0: 01b13023 sd s11,0(sp) + 800035d4: 000c8893 mv a7,s9 + 800035d8: 00000793 li a5,0 + 800035dc: 02075713 srli a4,a4,0x20 + 800035e0: d89ff06f j 80003368 <_vsnprintf+0x3c8> + 800035e4: 00060b13 mv s6,a2 + 800035e8: 02813783 ld a5,40(sp) + 800035ec: 04078a63 beqz a5,80003640 <_vsnprintf+0x6a0> + 800035f0: 000b0d13 mv s10,s6 + 800035f4: 01013703 ld a4,16(sp) + 800035f8: 0db77e63 bgeu a4,s11,800036d4 <_vsnprintf+0x734> + 800035fc: fffd879b addiw a5,s11,-1 + 80003600: 40e7873b subw a4,a5,a4 + 80003604: 02071713 slli a4,a4,0x20 + 80003608: 02075713 srli a4,a4,0x20 + 8000360c: 001d0813 addi a6,s10,1 + 80003610: 01070b33 add s6,a4,a6 + 80003614: 0080006f j 8000361c <_vsnprintf+0x67c> + 80003618: 00180813 addi a6,a6,1 + 8000361c: 000d0613 mv a2,s10 + 80003620: 01013823 sd a6,16(sp) + 80003624: 000c0693 mv a3,s8 + 80003628: 00048593 mv a1,s1 + 8000362c: 02000513 li a0,32 + 80003630: 00080d13 mv s10,a6 + 80003634: 000900e7 jalr s2 + 80003638: 01013803 ld a6,16(sp) + 8000363c: fd0b1ee3 bne s6,a6,80003618 <_vsnprintf+0x678> + 80003640: 02013983 ld s3,32(sp) + 80003644: 000b0d13 mv s10,s6 + 80003648: 9edff06f j 80003034 <_vsnprintf+0x94> + 8000364c: 0006879b sext.w a5,a3 + 80003650: 00f13823 sd a5,16(sp) + 80003654: e21ff06f j 80003474 <_vsnprintf+0x4d4> + 80003658: 0c05e593 ori a1,a1,192 + 8000365c: 00264503 lbu a0,2(a2) + 80003660: 0005859b sext.w a1,a1 + 80003664: 00360b93 addi s7,a2,3 + 80003668: ad5ff06f j 8000313c <_vsnprintf+0x19c> + 8000366c: 00000413 li s0,0 + 80003670: b91ff06f j 80003200 <_vsnprintf+0x260> + 80003674: 01013703 ld a4,16(sp) + 80003678: 0017079b addiw a5,a4,1 + 8000367c: 21b77c63 bgeu a4,s11,80003894 <_vsnprintf+0x8f4> + 80003680: fffd879b addiw a5,s11,-1 + 80003684: 40e787bb subw a5,a5,a4 + 80003688: 02079793 slli a5,a5,0x20 + 8000368c: 0207d793 srli a5,a5,0x20 + 80003690: 001d0813 addi a6,s10,1 + 80003694: 01078b33 add s6,a5,a6 + 80003698: 00c0006f j 800036a4 <_vsnprintf+0x704> + 8000369c: 01013803 ld a6,16(sp) + 800036a0: 00180813 addi a6,a6,1 + 800036a4: 000d0613 mv a2,s10 + 800036a8: 000c0693 mv a3,s8 + 800036ac: 00080d13 mv s10,a6 + 800036b0: 01013823 sd a6,16(sp) + 800036b4: 00048593 mv a1,s1 + 800036b8: 02000513 li a0,32 + 800036bc: 000900e7 jalr s2 + 800036c0: fd6d1ee3 bne s10,s6,8000369c <_vsnprintf+0x6fc> + 800036c4: 000ac503 lbu a0,0(s5) + 800036c8: 001d879b addiw a5,s11,1 + 800036cc: 00f13823 sd a5,16(sp) + 800036d0: dc051ce3 bnez a0,800034a8 <_vsnprintf+0x508> + 800036d4: 000d0b13 mv s6,s10 + 800036d8: f69ff06f j 80003640 <_vsnprintf+0x6a0> + 800036dc: 00100793 li a5,1 + 800036e0: 1bb7f463 bgeu a5,s11,80003888 <_vsnprintf+0x8e8> + 800036e4: ffed879b addiw a5,s11,-2 + 800036e8: 02079a93 slli s5,a5,0x20 + 800036ec: 020ada93 srli s5,s5,0x20 + 800036f0: 010a8ab3 add s5,s5,a6 + 800036f4: 00c0006f j 80003700 <_vsnprintf+0x760> + 800036f8: 01013803 ld a6,16(sp) + 800036fc: 00180813 addi a6,a6,1 + 80003700: 000d0613 mv a2,s10 + 80003704: 000c0693 mv a3,s8 + 80003708: 00080d13 mv s10,a6 + 8000370c: 01013823 sd a6,16(sp) + 80003710: 00048593 mv a1,s1 + 80003714: 02000513 li a0,32 + 80003718: 000900e7 jalr s2 + 8000371c: fdaa9ee3 bne s5,s10,800036f8 <_vsnprintf+0x758> + 80003720: 001a8d13 addi s10,s5,1 + 80003724: 0009c503 lbu a0,0(s3) + 80003728: 000c0693 mv a3,s8 + 8000372c: 000a8613 mv a2,s5 + 80003730: 00048593 mv a1,s1 + 80003734: 000900e7 jalr s2 + 80003738: 02013983 ld s3,32(sp) + 8000373c: 8f9ff06f j 80003034 <_vsnprintf+0x94> + 80003740: 0009b783 ld a5,0(s3) + 80003744: 000d0613 mv a2,s10 + 80003748: 01e13423 sd t5,8(sp) + 8000374c: 43f7d713 srai a4,a5,0x3f + 80003750: 00f745b3 xor a1,a4,a5 + 80003754: 01b13023 sd s11,0(sp) + 80003758: 000c8893 mv a7,s9 + 8000375c: 03f7d793 srli a5,a5,0x3f + 80003760: 40e58733 sub a4,a1,a4 + 80003764: 000c0693 mv a3,s8 + 80003768: 00048593 mv a1,s1 + 8000376c: 00090513 mv a0,s2 + 80003770: ed0ff0ef jal ra,80002e40 <_ntoa_long_long> + 80003774: 00050d13 mv s10,a0 + 80003778: 000a8993 mv s3,s5 + 8000377c: 8b9ff06f j 80003034 <_vsnprintf+0x94> + 80003780: 2005f793 andi a5,a1,512 + 80003784: 0007879b sext.w a5,a5 + 80003788: 01000813 li a6,16 + 8000378c: e0dff06f j 80003598 <_vsnprintf+0x5f8> + 80003790: 00a00813 li a6,10 + 80003794: de5ff06f j 80003578 <_vsnprintf+0x5d8> + 80003798: 00800813 li a6,8 + 8000379c: 00058f13 mv t5,a1 + 800037a0: 400f7713 andi a4,t5,1024 + 800037a4: 06400613 li a2,100 + 800037a8: 000f0793 mv a5,t5 + 800037ac: 0007071b sext.w a4,a4 + 800037b0: 0ec51c63 bne a0,a2,800038a8 <_vsnprintf+0x908> + 800037b4: dc0712e3 bnez a4,80003578 <_vsnprintf+0x5d8> + 800037b8: 2007f793 andi a5,a5,512 + 800037bc: 0007879b sext.w a5,a5 + 800037c0: b55ff06f j 80003314 <_vsnprintf+0x374> + 800037c4: 0009b703 ld a4,0(s3) + 800037c8: 000d0613 mv a2,s10 + 800037cc: 01e13423 sd t5,8(sp) + 800037d0: 01b13023 sd s11,0(sp) + 800037d4: 000c8893 mv a7,s9 + 800037d8: 00000793 li a5,0 + 800037dc: f89ff06f j 80003764 <_vsnprintf+0x7c4> + 800037e0: 0ff7f793 andi a5,a5,255 + 800037e4: 00078713 mv a4,a5 + 800037e8: b6dff06f j 80003354 <_vsnprintf+0x3b4> + 800037ec: 0009c703 lbu a4,0(s3) + 800037f0: dd5ff06f j 800035c4 <_vsnprintf+0x624> + 800037f4: 02013983 ld s3,32(sp) + 800037f8: 000b0d13 mv s10,s6 + 800037fc: 839ff06f j 80003034 <_vsnprintf+0x94> + 80003800: 0009b783 ld a5,0(s3) + 80003804: 000d0613 mv a2,s10 + 80003808: 01e13423 sd t5,8(sp) + 8000380c: 43f7d713 srai a4,a5,0x3f + 80003810: 00f745b3 xor a1,a4,a5 + 80003814: 01b13023 sd s11,0(sp) + 80003818: 000c8893 mv a7,s9 + 8000381c: 03f7d793 srli a5,a5,0x3f + 80003820: 40e58733 sub a4,a1,a4 + 80003824: b45ff06f j 80003368 <_vsnprintf+0x3c8> + 80003828: 00200813 li a6,2 + 8000382c: f71ff06f j 8000379c <_vsnprintf+0x7fc> + 80003830: 4005f713 andi a4,a1,1024 + 80003834: 0007071b sext.w a4,a4 + 80003838: 01000813 li a6,16 + 8000383c: ff35f593 andi a1,a1,-13 + 80003840: 00058f1b sext.w t5,a1 + 80003844: d2071ae3 bnez a4,80003578 <_vsnprintf+0x5d8> + 80003848: d39ff06f j 80003580 <_vsnprintf+0x5e0> + 8000384c: 0009b703 ld a4,0(s3) + 80003850: 000d0613 mv a2,s10 + 80003854: 01e13423 sd t5,8(sp) + 80003858: 01b13023 sd s11,0(sp) + 8000385c: 000c8893 mv a7,s9 + 80003860: 00000793 li a5,0 + 80003864: b05ff06f j 80003368 <_vsnprintf+0x3c8> + 80003868: 41f7d61b sraiw a2,a5,0x1f + 8000386c: 00c7c733 xor a4,a5,a2 + 80003870: 40c7073b subw a4,a4,a2 + 80003874: ae1ff06f j 80003354 <_vsnprintf+0x3b4> + 80003878: 00013823 sd zero,16(sp) + 8000387c: bf9ff06f j 80003474 <_vsnprintf+0x4d4> + 80003880: 0009a703 lw a4,0(s3) + 80003884: d41ff06f j 800035c4 <_vsnprintf+0x624> + 80003888: 000d0a93 mv s5,s10 + 8000388c: 00080d13 mv s10,a6 + 80003890: e95ff06f j 80003724 <_vsnprintf+0x784> + 80003894: 00f13823 sd a5,16(sp) + 80003898: c00518e3 bnez a0,800034a8 <_vsnprintf+0x508> + 8000389c: e39ff06f j 800036d4 <_vsnprintf+0x734> + 800038a0: 00a00813 li a6,10 + 800038a4: efdff06f j 800037a0 <_vsnprintf+0x800> + 800038a8: 000f0593 mv a1,t5 + 800038ac: f91ff06f j 8000383c <_vsnprintf+0x89c> + +00000000800038b0 <_out_char>: + 800038b0: 00051463 bnez a0,800038b8 <_out_char+0x8> + 800038b4: 00008067 ret + 800038b8: 989fe06f j 80002240 + +00000000800038bc : + 800038bc: fa010113 addi sp,sp,-96 + 800038c0: 02810313 addi t1,sp,40 + 800038c4: 02b13423 sd a1,40(sp) + 800038c8: 02c13823 sd a2,48(sp) + 800038cc: 02d13c23 sd a3,56(sp) + 800038d0: 04e13023 sd a4,64(sp) + 800038d4: 00050693 mv a3,a0 + 800038d8: 00010593 mv a1,sp + 800038dc: 00030713 mv a4,t1 + 800038e0: fff00613 li a2,-1 + 800038e4: 00000517 auipc a0,0x0 + 800038e8: fcc50513 addi a0,a0,-52 # 800038b0 <_out_char> + 800038ec: 00113c23 sd ra,24(sp) + 800038f0: 04f13423 sd a5,72(sp) + 800038f4: 05013823 sd a6,80(sp) + 800038f8: 05113c23 sd a7,88(sp) + 800038fc: 00613423 sd t1,8(sp) + 80003900: ea0ff0ef jal ra,80002fa0 <_vsnprintf> + 80003904: 01813083 ld ra,24(sp) + 80003908: 06010113 addi sp,sp,96 + 8000390c: 00008067 ret + +0000000080003910 : + 80003910: 00700713 li a4,7 + 80003914: 00050793 mv a5,a0 + 80003918: 0ac77a63 bgeu a4,a2,800039cc + 8000391c: 0ff5f893 andi a7,a1,255 + 80003920: 00889693 slli a3,a7,0x8 + 80003924: 0116e6b3 or a3,a3,a7 + 80003928: 01069713 slli a4,a3,0x10 + 8000392c: 00d766b3 or a3,a4,a3 + 80003930: 02069713 slli a4,a3,0x20 + 80003934: 00757813 andi a6,a0,7 + 80003938: 00d76733 or a4,a4,a3 + 8000393c: 0a080663 beqz a6,800039e8 + 80003940: 00c50633 add a2,a0,a2 + 80003944: 01178023 sb a7,0(a5) + 80003948: 00178793 addi a5,a5,1 + 8000394c: 0077f813 andi a6,a5,7 + 80003950: 40f606b3 sub a3,a2,a5 + 80003954: fe0818e3 bnez a6,80003944 + 80003958: 0066d813 srli a6,a3,0x6 + 8000395c: 04080063 beqz a6,8000399c + 80003960: 00681613 slli a2,a6,0x6 + 80003964: 00078893 mv a7,a5 + 80003968: 00f60633 add a2,a2,a5 + 8000396c: 00e7b023 sd a4,0(a5) + 80003970: 00e7b423 sd a4,8(a5) + 80003974: 00e7b823 sd a4,16(a5) + 80003978: 00e7bc23 sd a4,24(a5) + 8000397c: 02e7b023 sd a4,32(a5) + 80003980: 02e7b423 sd a4,40(a5) + 80003984: 02e7b823 sd a4,48(a5) + 80003988: 02e7bc23 sd a4,56(a5) + 8000398c: 04078793 addi a5,a5,64 + 80003990: fcf61ee3 bne a2,a5,8000396c + 80003994: 00681793 slli a5,a6,0x6 + 80003998: 011787b3 add a5,a5,a7 + 8000399c: 0036d813 srli a6,a3,0x3 + 800039a0: 00787813 andi a6,a6,7 + 800039a4: 02080263 beqz a6,800039c8 + 800039a8: 00381613 slli a2,a6,0x3 + 800039ac: 00078893 mv a7,a5 + 800039b0: 00f60633 add a2,a2,a5 + 800039b4: 00e7b023 sd a4,0(a5) + 800039b8: 00878793 addi a5,a5,8 + 800039bc: fef61ce3 bne a2,a5,800039b4 + 800039c0: 00381793 slli a5,a6,0x3 + 800039c4: 011787b3 add a5,a5,a7 + 800039c8: 0076f613 andi a2,a3,7 + 800039cc: 0ff5f593 andi a1,a1,255 + 800039d0: 00c78733 add a4,a5,a2 + 800039d4: 00060863 beqz a2,800039e4 + 800039d8: 00b78023 sb a1,0(a5) + 800039dc: 00178793 addi a5,a5,1 + 800039e0: fef71ce3 bne a4,a5,800039d8 + 800039e4: 00008067 ret + 800039e8: 00060693 mv a3,a2 + 800039ec: f6dff06f j 80003958 + +00000000800039f0 : + 800039f0: 1a050e63 beqz a0,80003bac + 800039f4: fd010113 addi sp,sp,-48 + 800039f8: 02813023 sd s0,32(sp) + 800039fc: 00913c23 sd s1,24(sp) + 80003a00: 01f57793 andi a5,a0,31 + 80003a04: 02113423 sd ra,40(sp) + 80003a08: 01213823 sd s2,16(sp) + 80003a0c: 01313423 sd s3,8(sp) + 80003a10: 01413023 sd s4,0(sp) + 80003a14: 00050493 mv s1,a0 + 80003a18: 00050413 mv s0,a0 + 80003a1c: 00000513 li a0,0 + 80003a20: 14079a63 bnez a5,80003b74 + 80003a24: 27f00713 li a4,639 + 80003a28: 00058913 mv s2,a1 + 80003a2c: 00078513 mv a0,a5 + 80003a30: 14b77263 bgeu a4,a1,80003b74 + 80003a34: 0074f513 andi a0,s1,7 + 80003a38: 00153513 seqz a0,a0 + 80003a3c: 00060a13 mv s4,a2 + 80003a40: 00068993 mv s3,a3 + 80003a44: 815fe0ef jal ra,80002258 <_assert> + 80003a48: 20048793 addi a5,s1,512 + 80003a4c: 2004b023 sd zero,512(s1) + 80003a50: 2144b423 sd s4,520(s1) + 80003a54: 2134b823 sd s3,528(s1) + 80003a58: 00043023 sd zero,0(s0) + 80003a5c: 00840413 addi s0,s0,8 + 80003a60: fe879ce3 bne a5,s0,80003a58 + 80003a64: fff00793 li a5,-1 + 80003a68: dc090413 addi s0,s2,-576 + 80003a6c: 03f79793 slli a5,a5,0x3f + 80003a70: 1287f863 bgeu a5,s0,80003ba0 + 80003a74: 00078413 mv s0,a5 + 80003a78: 00100513 li a0,1 + 80003a7c: fdcfe0ef jal ra,80002258 <_assert> + 80003a80: f8300793 li a5,-125 + 80003a84: 0017d793 srli a5,a5,0x1 + 80003a88: fc040513 addi a0,s0,-64 + 80003a8c: 00f53533 sltu a0,a0,a5 + 80003a90: fc8fe0ef jal ra,80002258 <_assert> + 80003a94: 01f4f513 andi a0,s1,31 + 80003a98: 00153513 seqz a0,a0 + 80003a9c: fbcfe0ef jal ra,80002258 <_assert> + 80003aa0: 00100513 li a0,1 + 80003aa4: 2404b023 sd zero,576(s1) + 80003aa8: 2404b423 sd zero,584(s1) + 80003aac: 2484b823 sd s0,592(s1) + 80003ab0: 24048c23 sb zero,600(s1) + 80003ab4: 2604b023 sd zero,608(s1) + 80003ab8: 2604b423 sd zero,616(s1) + 80003abc: f9cfe0ef jal ra,80002258 <_assert> + 80003ac0: 00100513 li a0,1 + 80003ac4: f94fe0ef jal ra,80002258 <_assert> + 80003ac8: 2504b503 ld a0,592(s1) + 80003acc: 24048a13 addi s4,s1,576 + 80003ad0: 04053513 sltiu a0,a0,64 + 80003ad4: 00154513 xori a0,a0,1 + 80003ad8: 00157513 andi a0,a0,1 + 80003adc: f7cfe0ef jal ra,80002258 <_assert> + 80003ae0: 2504b503 ld a0,592(s1) + 80003ae4: 03f57513 andi a0,a0,63 + 80003ae8: 00153513 seqz a0,a0 + 80003aec: f6cfe0ef jal ra,80002258 <_assert> + 80003af0: 2504b703 ld a4,592(s1) + 80003af4: 00100793 li a5,1 + 80003af8: 00675713 srli a4,a4,0x6 + 80003afc: 0ae7fc63 bgeu a5,a4,80003bb4 + 80003b00: 00000793 li a5,0 + 80003b04: 00100693 li a3,1 + 80003b08: 0017879b addiw a5,a5,1 + 80003b0c: 00175713 srli a4,a4,0x1 + 80003b10: 0ff7f793 andi a5,a5,255 + 80003b14: fed71ae3 bne a4,a3,80003b08 + 80003b18: 00078993 mv s3,a5 + 80003b1c: 0407b513 sltiu a0,a5,64 + 80003b20: 00f71933 sll s2,a4,a5 + 80003b24: f34fe0ef jal ra,80002258 <_assert> + 80003b28: 00399793 slli a5,s3,0x3 + 80003b2c: 00f487b3 add a5,s1,a5 + 80003b30: 0007b703 ld a4,0(a5) + 80003b34: 2604b423 sd zero,616(s1) + 80003b38: 26e4b023 sd a4,608(s1) + 80003b3c: 00070463 beqz a4,80003b44 + 80003b40: 03473423 sd s4,40(a4) + 80003b44: 0147b023 sd s4,0(a5) + 80003b48: 2004b503 ld a0,512(s1) + 80003b4c: 00a96533 or a0,s2,a0 + 80003b50: 20a4b023 sd a0,512(s1) + 80003b54: 00a03533 snez a0,a0 + 80003b58: f00fe0ef jal ra,80002258 <_assert> + 80003b5c: 00048513 mv a0,s1 + 80003b60: 2084bc23 sd s0,536(s1) + 80003b64: 2204b023 sd zero,544(s1) + 80003b68: 2204b423 sd zero,552(s1) + 80003b6c: 2204b823 sd zero,560(s1) + 80003b70: 2204bc23 sd zero,568(s1) + 80003b74: 02813083 ld ra,40(sp) + 80003b78: 02013403 ld s0,32(sp) + 80003b7c: 01813483 ld s1,24(sp) + 80003b80: 01013903 ld s2,16(sp) + 80003b84: 00813983 ld s3,8(sp) + 80003b88: 00013a03 ld s4,0(sp) + 80003b8c: 03010113 addi sp,sp,48 + 80003b90: 00008067 ret + 80003b94: 00100513 li a0,1 + 80003b98: fff40413 addi s0,s0,-1 + 80003b9c: ebcfe0ef jal ra,80002258 <_assert> + 80003ba0: 03f47793 andi a5,s0,63 + 80003ba4: fe0798e3 bnez a5,80003b94 + 80003ba8: ed1ff06f j 80003a78 + 80003bac: 00000513 li a0,0 + 80003bb0: 00008067 ret + 80003bb4: 00100913 li s2,1 + 80003bb8: 00000993 li s3,0 + 80003bbc: 00100513 li a0,1 + 80003bc0: f65ff06f j 80003b24 diff --git a/bin/custom-output/benchmark/dhrystone/dhrystone.elf b/bin/custom-output/benchmark/dhrystone/dhrystone.elf new file mode 100755 index 0000000000000000000000000000000000000000..307ba5d1336ab0b707ed2e8dc237177c47671b74 GIT binary patch literal 117208 zcmeFa3w#yTwLiZ1%sFSy$;sm+lXpUL-~2u9{9b#_qAOF2L1n0Ml^JWjTV^ zAcg>)#8KzGp6z9oiYG{{knVut0m$2(qwt%oQ;zSZMPp7BK=W zoO+6dKY3D%7}YGCbxI3uKE|fiL2epjdgpyV1>Vzg==k~2X1Bl-jpRt4V3YInp{jLk z!xZ2fhW(^|r;CLKEMt0=o7KNyFny)RVy{fh?IUu@*{&l{TlLZcQMlF339Z?O7) zZWgMV0-0TT(9CBbu!e+P$x&79QJ7X&PJ^sHias3c&N&aI-h5uA$y_kP1JWx z3k^7>)mJT}c4^c;z2jcAcM|G2$s+DO>_qF^f2VruJG;23r@tX>I0+p`(Qef1kS{WB zWRbi)w!QH?~WT6iD>+Uux8;`O2P6iKk#b0-W zZ(5NH8xEpR+|Y3ffBV?Z946qF6Wx%1Hf)j!fUz zm+6;zSp=Ii;Wfv#aD#`1*lX+rTYF;!8$IE1o6*+ImY(35wbajOBQuv9>?F$X4@rA0c^@S=X`$9v$V}NdeZiFg+V1$M| z=RUy>WNqk&cvolu=RCE^H1@3sRh$ug=JH0} z;@zMVuj!8RZkP$3t5cSTw*44=Va0c3Lmv8-;5yATmg}MNQ*1*=@GW2NHQmE`XxqE& zL}2YS3pdHo9=xdWpkZhw}<`#0PK|370a zIT09rO~lQ0(>)2k9qrTmay{a%yV!IEP_CX6$#ZLwgNBwT^c(QY8Ma{zY-(`bl{W)* z_(rbSFdpUmixzLV8P`=K7n!LQuDq_GrKI>we^D0t#uchVOrnpZeeO{3GuVf^j38)V zz`npZ%MP@uwe;;s{~Ts|D%gg;)P6VOU@ptMf!efp9?70)t$kB}K7~b611>WSwzk&( zvVN~0K431A3oqU|R^R7Gyce^`xicBzS?B|bn}#(vwPb&IKH^Rh^}~PHDZbF=Rf5+{ zLp>fBYgxSE%T0N?Z1D1Z7*BIimm5B*o4Bd5sjUd(<7MMa^(Nq6e&ES!{nsvPpDUby zn(0sYSW#mWdpUJqb&)HZwFIVo9C0Hyg^$^Mz3(#UtGhU_3iY^#eSCuL9t(9W(rA24 zdBDtdYvzp}t^P+ow%wasBl_xveUnVYvw%16yERmi%}vi}v}dno_37}F8#<#;pEah# zmwh5`j4=@ddrzX=yS}3jZ9)!>@}Cm?PZ+m>-Yen`DE^O8?peRrMf@%YztVpz=-t8Z za_H|SeD4W5`IY`j;O`P~2Ngf*FW-Q^tpAaFtciY&*5S75c*dB3cbRrY}@;()PEiH7o$DOUw=Wl$dU~W65kWM#KJm z_>9Z;{2Apuir)>W7vuZ4G`^8*ykU=9BVCg3V^QZ8V^m~0=z+D_68{P0O^Ss`}Nk48iE=PMZ9qoGq<$xtOVhH9M5fgFkwEXyEV;Jg7i^j$911P6jvW){Q*Cd}lyWKBa?XJGdYPUI1$*r*uo9} z;6#8ew&dK;Qw~I)ogw9PDQDHW)#wg;7D~B~P~U?3j><=STQ`)U{~PxF2>Rw*JZ_Aw z>UmUW{gWfQgdf2=MDVz_kX-+TX~;pt1E?>v$b+1^T({xJUTW606F^&-%w)oD!O%^N^_)28#HjEkc6-9Vc6-bf zumQ5B8~9X@7NMMZ_X{jMb~o~JE{i;p%UWi>aGu&4es?e1zI<RJu1;hcDm8w!61g&uM-8Gr9^}TT4G98re$a@NeBLJPPwnYx5Z; zOS~;(-RFr9?LJ+Jvf%%>Pk2lA4JSo?@LPzTVvpm`S+@O$wUJn3As$SZ>yU~3ZDMYM zjmP!jnClAN=ko+@*g?=d7OnYMEUf`FrdhPNTNDlaWN!=lUaaFN{*afn4V`dZaoNy3 ztl>1X`oKyd}tfyR^VDT9z1^nOIWdngFfi8)^K@!<=EW&Wu^NR z(<{+8x}>?&NhICz?mn%PqXF0`$I)|48?0j;w+#sSATAlr25*K=4y^2jQR zTiE5P!`caLUGAg%3fR+L*LN6zYdF@PSlg|`-?hl&)fZvib5H2USOfWj_gHJCD?Y>+ z;FYeU)uA8%iJ7ZBY?I4}SgiJ#7^krPFI2~-M&xXiBMSzC#tI@kvRQZ|)_1M7hc}_k zRE}WKZ#OAWA!M#AkFl)Vg7mWU2S15EF5R@W+vvdYyXczx#-R+QuBMK`!1w}pY1nF~*53|@}-z*+?M{TlJ0 zBOY{f;i-(!Gf&~((nqnOAvQGRM~?g``X6z^5hpGYCn?Bpt#5yX@@JunWgf(;2QlkH zth!D3;nOmzC0(VI7ybN|P(_oh;)D`!1 zonPgfaBmXofO|aLd+MDLyPaPp8{MH!RIbrN!IKR3xj+h&S}olhxo6V_S})&-D<;y;g4><3z{!!2RxI9rt3m-(7~WypEgqhFIiY zoyHJ+w#)^b3uDWz_u?MC`!bK20$W$(&yV}F`#mh;L)@pPvrP}Cvv6^`Cz6|?nF~$i zXpa^yNzD(RK8X7(riC9o-p}+f8nfCQR)>4?oybLbxWE03J)W`ee9Lt0e;TIpL=UFo}vM;dUS zvjRE57ySx8F<4RRxwe*14!%b|Z)rMyG+dXS9wDDL87|bXg#&FVbTy4u*bD!zIaC<& z1Yw)O!jBzd+gH2~829N$&=abAm+lRz&qe=&Uk|Z^qQ42>^4RfrrO&;l3p!<=x7=3t zzPZXzSuZ?=^`6|Yq9j!wnXD&n~0A&t)+iyIe+kw zwEgw)8p}5=j~SoLX|4STv8TaSm!LNs|AgeJo`|Q;pmu}jgxPqet;J>h5%335{Y>dU z1Yc|LHTK&eBV(0#h0fK-g$(q$l^1{rYm^_Jm zlzeXp`$9?gl4#GU;s==HGj+Y|veZZ#=IZ-pURr~^vMX_&SyL9wIKxFTS;`$Tg)c;-eh18{^?3cO;E+GR8XYV@|YYyk*Wml~H8q`e1zu z^2Mha;VGC$=by0`EOCG@ULg->vg&`7x@6*&g^#qFng`bQYk-~4_+-V2~@F7)Ros%_|tGyfm(@1Aey z-(CNNe;@i^@b78NlU~e|*w^fh`Sm+)%$*dsUR?24gMH3x5wDYRUFSyJg7%yqX}~%* z6|pMk(L5j4v%cRf$KDC9Zl=>78)6jq>$mMRu%^UVHB&}wdD-A|HFO9K`IzqIG}D9F zLkvZ*o}qX=&XDUN8`j*#*ek@I*zh*YyV&n#TIYaw(7@t@$Y{$Jp z{gZ~cPOB62FNtn?*Rt@Ev*{6Ivle!p3W`{zvE#?sGLC4GRM_Y`m9@!O{+Zx6f;>Fs zj5jY2bs8gzE#1eZ?&FMfM~>yNO}Mup9f;A>kz*a5McX$S&s%LUD%>rz&U|3mv@b82O+v>pcRY2Jm8z_hKDjU>#s!9pJ$_z=L&w8|wf!)&Va4BJQfcXqk?jkV5N# zO&hwimsf7!CbeN>KJ6`|yj8@{rZwI#m5nV+&YTl=`O9e@`D^`?KI}iQqIR?JYgl0I zErM(}viWW5ODa>lUQTPRw(!mWO>(ys z=_dbpiZU|9JyM@6LpN{2AN+`X%tIB=@d$G9rh{j&u90I% z+}phUh)Hw6suZ-T_CKun+U-Ff{sr+>p%3pQt4G>O|}_V;&%WKm2L+GuE0utTkt~ z)#JXWGHoKwqrZ$9^X}1*x5hpCW_SHdr~~$p9s1rB_$oDkSZu?ZZ)ju%*4!)J0v+w5 zb@pjD9qNNktI)TYNA><3_c^I7ykG<0gmr?Tqn*?jxL?x3 ztKG%WolQ1{SNecIhkKaREHMWwpZaq}ylyw1uG!v*`{ljR?RBI7#Cq?Xz7sYd%hANx z!`i{>pXbDUN&Q2)3+s+(o)dl4{BIP4)K7@J=jyj2@1b8J{(da7?`&J-;F(LepF?gV z9#1FYc_FePRXk%sZtP>NeM(Q5ZGGD))qKqKLBkc#YxQ<~R zSnX+H#||L|JBS!G5QFQDu7F*L#WHh|fxTs;yN-Co{Ld@T9LMuKL*!{^%u#y~i&%R$ zA2M-21zz~lz%v%V@Ok*&ooSmIzib=ac%0%^BVLNJO25HHKJw;^d=MJI9kGk~Ak8a$ ztpndu;{TH3hIArMAKTQ3XM5;h_~ISJacXQF*Zu@+Jfi(f^f~ffc*)N8WW&p_A+iCn zdQjSMKiROGQ5~kVL&PoW7WOz}x8#m5DGoO^wi9)?6uS?b{xsCnd|Hf!lRJx?V`2O1 zl&`P*u^)eFK2V5wLj2IUS%K$Ns9WSlv>SCiRFBwFmBf)g)_; zH`=?(_%J&5o9{82pRr#hmaE^3kG_dOJjJ)N!LA$q5BtuFITQM!`vrZUk97Zcw9lIBzmENo*Bq+q>@{zYByQw+7_yLW@$ zV)^6k6A^a?@qHG~w)QpV9I4%idFFFdUxs!1b65kvis$%$z+T;7T@l(7cXQ0CI{ebw zmPhLo_g?JrWl~PT-UIebhGe=!RgDh}t@;pvC&OEz_ZTFn6ZprtaHxJ#0xyb7> zbEjhtH&~_TGz)Dz&O$rz_agpw;cwe<4P^~w4P_0_4P7lIr_V+30DXI79ybs5W9H(; zSZjGTGj~9Y9j6UqeIIP=g<=x^l);_k!1OL5!db{WO zYJDF)&&OUj_Ju-q$Kh*3@PyOdh490dA=-b%UTkF1Dco0N+Iz8~iW;#WOM6|kMhHJ@ zU|+Gdvx$9E+UpO`+nH^iTENV{*l$X~+7o-9Cyrdx7HM<^L)-ATV_5spi&gDI6Le%q zCyxC7Gvb5Zvd|9vz1UC|T7&C0S0|J^fqur)bIln%r|M{~c9ofZ-7a%DY+ESgPYL|O zQ@Yf567N`aq?}>iG>wJN9j84BjQap`3v9Rv^Vpd)87+ke&qpwKna>-p%7Qc0zKr`TN(1*^MGb=%XgMR7s+TMxu@ITNWr9-~YSIO7RnV|LP@9=%|mFsH}G!)DA6 z&r>y8Y8-l_e8XoiyrcHgId{yB@+Re@o`_|0`Z=oadRP$87mb^w?MV^@jvy9IyL#&4 z1+~#iF4(v@z6&-kj_-nvi{ras<48g8+EH`DQ7^{CA<_GM1zi{#C+_qwRh+2*oBP!< z_=R6dZ=zk_T(4tL3%!@km_1|u^r=&VGiFngxI<~Y=o=qaWZQ`)*m1s!AyRx55)|pS zaZ%vT`8_c(=&-nguuku&QUDiV>IJ-Nn+*Sj|s8jfzC143*qVp zcZ%U-QZ5-k*{S1C!yl#+aZs6H`lTk8?#zQfq7!`hqqeqc`M2KzE1dJXOVXcl@HGM6 ziof0X`#@g3A6sR@CHqr+@ifAZg6!B2|NrsFTEAX9i0?4|lJO_Qk$(tZ{7F>*bm=!I zKf&l?anx1*m9ypVaQyDJju7&O%0R6o{69LX{TBbxbn7}G)w+(B_=XHy-#=3I zE&W>$eCvV#%RKN2_Tyc`CNKXK6G!T0R6w>^OS6XK(6~1Ux~3VAgQ~fVzUjDljS9MO zPX|GBUyF+x&&P7AYlaD0pDLx_TmvAb7%VQ0?d31`r^Rl&}m^bU>ARTjh7{vf%2?GRyhD zaeonN$a;&aiSSagoMm+-bJp`x(&Eb6f-`@Zmr_MumRZI(aQ{#eqU8kNsD!p5VEFee zHW$m(_$Kb3L2Q459B<;K%b<_5$7|)?fSdM_hCZ+NTDkfdOzuV!g9Y)AE40K`(pe_p7{u_K0SYe zRMJQlZMAyNrw>uw?-Tkdg}z9k?TydWwC9f#7S8?wqCA)cM z7j&~vXA-TsT;%!O!9;ykQC*TM!g4GG@+mCabXM>n)w!3ajSyPYGNj;nkom89I>oe4 zKh(`?X6|Wl@pm0GY6Z(s=n1&!C~=(9#AyBj5CubtI5}IE8b0zUENf1^@_|XfHxCO#XbjvSwB+*XCyQ7S?pX(r`5-W}l-vLrz z*LrVgr4;!Yl7AT=$NQD>@k9VqyMbAZ?U!`Q1ALI4H3lk6#)2>s)s|cdpdNro6Tzvn z6r3jk#yYMxaibx1ctzdN(?K`dtq0+#Bm~eP9@33RpuCg{!5@N(s>zD+0Oz`_hK(l1 zi*(mZVC-}!2%To%u@^KQwLuWGqmH$Ek6kAT<;UBM3lLsSW`DMFmrUb{E+ffR}L+H1mV6pHv2TOFCPn^ca~y)&S)5l9jsW^+ALTm2$le>;|q1~EsBK# z*Q#ibWFhDCyL9g|#qxp8f*-jFEo+J8ySjIaVkt&nT3Uul7W6pd_vzk!ie;qDvRJaT z63YtR`!~gMr_F-5fkj0XsG6_Vy=mBT6^;Ip&4QUvu*@Zv2X$|SVtLbM=`L9|6H7$* zUawd*xY;syf@C>BEE{z1or>?J*Dbxwd$>w%&ZF{ zOf<9};r$!MC9D&vt4o!n*C7wJsk+qkD(q5|Y8juvE6eyq-k+5ZlTu#f#x6@_feh*9 z7rBviLs)A7d9)l<)S4?SvQMuoQ|_DOAkS9h&5{fqyf5og=iqrj@$9x$taXr|Q)H)# z-mJ?u2hRb;bHrA$+d)31$gHF7a?M-Ax*TyZWh2vJ67cCk$;7&}I>-YRIY!4&)+JjG zYx2fe#Z+zUD07gPD6+FD{ozmt&nCq)$yPDJL4HY*>umB82l-Emyv-)#g+CE5WZ##H z>@=VPzI5;ur%68?vQ_MMkgFBhsiF_-a@4_7t9V!^6%;2O_4fl5-JNHBVKQkjRTAmuS6Ga>Q8`R-#?X9b7vV7b{o&S?wVIQIQAOQ_oKbvL#TLTepNf?=zYXINal`RvEkoRd_xKMYJ#8_c<5ml&kQyAki5BEN|4iDS z(|mN>^gbr`o``V9|J_3L#X6^`i4Z%qf;mt|E396aSs8y`D_8|Yjab$f%X^Ch#QHPM z*A1G*vi`5MP@-jh0TvIXL>9~XYf%!*dIGSP=q}}{dszj22$HX}8pLVR?e-KIxlzla z8oRykLg9N>q5D0=yUDVp`#z#HSq0X+j?7%Fd2ksn5Ihq{8)DI#Iw*xXRm!y(`$OrVvyDXd9`%4=lWc=BImO)@LHo zGC=%L+>sv8M+mU}p@X}Sq3zvSsrE8BQFnP&wd(=tU6R$W6 zw|0A(`sh#AzDW0;L^{k(($4yRNTt`TJ9thvpxs)Ld4OrR8RUNRrY>Oow_HRj>;D3^ zb1KhV2@!rNMLu2MKaY{K1>d z97y~^NDRqJ#!;y0C4)dH#-gaC2Y{Ib1OYq@AUFcR&j6qTx=W2ec+&_}(1C7Iv+OON z_1s(2#oJcc%r2r^-uMG!m+oVce(H!cM$&oHJ7g=}#PV^2=!TY$?@T#FF=8}|gWst6 zo(F5mbP)d=wslwtfRAHCNbL}*wpei^(n`dgF%~-|q_zwInnPhQMKTA4)1jp4qg-(1 zf;0kL!4QBt0PV=R`z13;^LM#Ek66jIFM#7>axPLt9Z@TYLphe#V8XFpEHi{-D*==e zkMQnIDB);F_MDUoCILZFw^>{|fpBkv=|t5b5U=gyor(Z3j{!jz4(Q zbdsgqIT=iYXp@AG7uoYsltuRB7#?gOb#VN_n;s!)>fY&K3R3s}KycGNeEh+iXy;)N z?I<7yYWjgrf9}31H61Y~>Cau2Qu6`2nEs4hZ_RMnKz~M=x26|(>CeE8{xtBq*dYu~ zx$A!&a@mXcn@cy1^7sH={>HohYNy{T_x0UjX!8t(YHgg@_mAJi*8{$vfJJQL>zTgE zRJqv1*E2Jz;ANgSanZB%Rk(;ve7#pLiO5a-ly#JcFG-_{Qt);;Lk^>^iO*gIw zmXFJPA1F*Tb;N@p69=E6e+THS(>S5G%yLP;4xZ0e%(tMBL$_Y4TI{dl_Kxvdk4y5~ z8(U3OOP*L|)S7!y2OpPDD6eD;sEQ}07f_{dQ5>qRdhCik=mjfSn_?Sqdz`0t%SC1#nx@Lo4t-8 zbFm+SB13IGHYzC8uwb{3yn=sKsKthtC!hs`NK@hEqwvzQ^zY)5 z;-wJr(~}~tS1t+4AWO9#`RHl<&p@WtpbakO(NLx*?#3}_2mA_PW=scB7C7@|SS1ou zO44}{{!F_T6t|7c;C%^cJ%du50e%G`dxO(J!Td8c@%Em- zfiWAe$N`Ff;X>9 zisj?}`P78<5H8#eoo|xPxezL)MDshKii^DwGY7H?H20~P6;3vVNMDZxK1C72#3e~(10$H@l4;+e9`dZujrh!FH(+2we!?EXU@DUD4U z-he0IV{o32l7=VKw+<{Ug_4FRGm{GP!LlbyKa7&cyBTMZG(5d>Nl+#YZ@!Vvze|dK z4@UtOiPv{HT5zRInS7U`czpw-lvLl@Xd&S15-nsi7j4x;T}P<)dW{S``GkE7=QDsW zz!YjZdK9HqAh^A0Uy3NWeEq24 z7X`0x4;4~HA=USDDx`@*z_*_Y>7tPB`z{qSL?PdYJs;)^h(fXN0T|)S6osGc0k@DVxPG_v3K@OZkC#(CI%; zJWp6W*Ao6&i-(@+r2JIyWEiMF;P-kDQKSD00{)a#@(A-i0WQBkb2(ry%ODwVYL%D4 zfxdT8NbTpdx@|HQ`ip{#r9B7s0C=RG_(2rPZ$U5boJV+{exRF`A_QxV%_;=^%;-h} zm%u9CC6A~+eQXy?AoE$&#Fu*1D_5IQ6&<{(%!LVe-hwcw9SQzzCSDj{a3}7pvbLdJ z`nruv1M~=j*Qf1*JN0#2muAm|P4CH^2K_W&3KAeX3l>rk4H zQvQz}asdo#o}E+hGH?VJ?gBtZ(E$1SS68Skrj4bION;4Q;?|`!E-3cf<-nknIZ9Ik7D^& zl(T;e{ykDP_JtT9t-Vc6qz8d?+mb^8(n7$W0T{TiC~B4L3ET&QD`?WMvhdaPTpOZlH6Xz^NEKOQK&oVbpmrnpYP78r zMOBH2sz*`Gp9#E@+(xXWx`?1dAc_b&2OyUyB7(|r*D4}N$snOdBM7h^L2wFXug+q^ zDfFmC0J={cyr~>NT4Fp)yaK=@jfOi09o>$OP6v&}2=6x2;KxxN2-oICh?;T-Z)k}dOphI2>1223aarLeZM ze=)R``*VTs;y(p^SO0wAyZPGz?(U~w2KDg&2`Yh5t7=_x8Vzb07bo zajx`FgPtn?4LJApe;*q9`JaP@{rwZ5XMq0-oCo?>gL9C70N}y?Wq^nHTXDX~zaIP- z`)|bg68|HRs`j75xyHW++J^dl;JMUK@8A#f(*wQX{wILH%#UXRY=obl*kA6ahlL~k zj{<*%A5Rq6mHr6$NBKtpbCv%OIA86@4|mx${+@tG`v>BDtv?LRbu9ID2yoq_-Y5oA z9K5Ljk)3w?ty4hlMlhDD>0Sygb{c;!b{2KW@o@lBPveiqi8}s9<3lb(t+yA|8;ag5 z!J{@RhFLHTBll>6+ra9q06oSP*e~St9n}P4q5m#@q#% z4lBg2(iS*5pqMtmmzh|#pr4Qk8cBa=W3r+;uDprf4l~7mcjufrptL&mJnqz!E;d6t zcwUs@F+}R&O^2W(`-nvURLD$#S$H3zf~v=M9nTZfoug&}VkCguoJR)c<^Bw~A=nVi zSX^wBm&?7^GpL5O*upo&FEC2dCK zbti=H0{Zh8fl7a_C7%2+uJq^nj**{{k|SNrSccq^ycBrjH0syO#bY6__azjJ zF9{RQUrSU9eY}B8ocgmk$*EF*g<$zEavJ#g-2sYSkM}6fzVkSxP^~F*=|qC!#QXt% zudf4QAoaE|R&`7LeE_r6$@6gcUgslbY}pVlDh-_^V7yJWEYnFfeq)ajatJ=eYfNrx zar}V?Xz0K6Ikca%TF)hov+{uu6|L4UqMBX=BI9FA$<@T}D!{nNymK<+Yjpn)!9h#; ztOtqXLA_`gbm;50EzK1BpAYG2wcz06OjUI!tW2_LKT{#H>0V&l(rhfNeQnu%B8J$6 zY<`Qj4hDO?OTm^#FBI^G3pL@#uqk6RRo|fJ&IA8w7?`mQaRNj~a%vMHL=zhH0n~)| zfJmnnH0YO83#tk+MsO8JQVTKeVIgfgMNLF$BCIQ>#ERDtM2dWg;aMP>JoK- zSMN%7??*XHn7>r_61TQ)dZM=`1+63oZ-MS~7VNr(?82~K40XexLBt^}yOjJk|3a31 zOqPj?=j%D-w|wlySbm$YmyzG55JLEEzTTf~-v)%$^$S(kzbJcp(bwzgWPTJ~owk9D zopB*!*SM6iGxTgS_MC0o485FeyS!N0c6+>ScYG7u>?lM}BML{ukMwv1P8LIGmh6Zz zuz?QVMDb#I=@z|!ELm?`GD%s20U|totJTH&y3NvUVcWDFQn4L=&Mu#aF%umh)aBZ` z%h6+JDeP;sRE!liI?oCbx{sm*gB$a_HMncEGMfC3z%r}LYqVbE#V+lDSW3;S(T2SQ z#7aVlF0awXQe)CeWVqI7(|-tt-9g%QC5cP50HxVE9e{Y9?6_2Xfu7yo5r_Z{ic7T; z;#h{j z^MhE8A^mCh;Y_cPAe(3_!DN=nsewd$f_)1bMePHG+rn$kHz zTdg#g?2z<1f<8|32BTankak7=CHtj&=*E(&k8%lm>3fnMm0hlCVC~kzv}s46)d?*j-CsqA^2E(Qt>Tq3)@ zD_En|M@@gPo#k5EUQTBET-)@7X0alS)jFzW7@ctZ7D@{6Jrag@+OyNp7e9d!=6=bQ z*f~*8XY*Q)5B^W$)!BS9-UZ9nu#&9CJ=`2Oq|w@mFVVz3tHscf zs!5gOY=E-lyIRg;swz=SNl)BtlBVvG)i&C$spP24HNSvlv`?Gxyf$jX0ABfSsLcovqo=2*^}gw+NeylD{zmX+)J@a~lBZbUPz zT-S&9r(E{}5a}ZC^x>D0lAK;D`Ssz~5n=%$#HjAW?;wT$MTmFEk$w1GWW>-4AVhBI z!yh4zdk7(NP#^vjWw*BoA<|(VzKal@dIKR6W*>fl5c7b@6i>FQxc6S@p!bIhXH7+h z?8`+$+y#zybJ4f-9!kNMbku(d&!VM}(FZ4!N$-CO7C6tf?#R6!a_|b2CTNW~)1akE zf)Y%vNCuNABoUYxwg^o3y7%r~?*im?tz!ZRpbKc-YIH+&VkJSTN~|PGS$QGZP+<9f zZFaox$qvi+1-vu){vw!Z`M!YnA>V%=2+Q{cyoOwTjyS}`Q^2nx#P~`egzpP@_);KV zB82dL0iQ#@?}Dkp@_hksB#v7NA$(uJA0^MeN(kZm0{#<1r1b?t_`ZO@N{E|*uzX(> z@B3oQ_m6|4T?HDn5r3BNJ6XQ}2oz>+mXY_b_kEYYQ=qko_&zId{Wi+6$D4Md2fB)d zdP|qrVMtj&Z2gEeMN1WVxE|%MBDz~HC4bhSx!r_=TdtvU8_Hcp)U`|`{#%d$x{9D{ znL+f^D0dU?ZkbQsJ}{WJmXHPTIacyqF>X$~31_!_pUTszEPUOvjmn3qEL`2PhsrB2 zLINS91DP^h5KcUsr?fAI(!Q7&+tV6h3jr9)Bq%H^hv=_R>QM!NUUi=Va#>###v?>Z@ghtej6vk9+)vZi1nn-7saAke zvOuyt06`i=g2A(x1@B@VXdr>9bW3tI#$wjUI`l4akm2&}GPG}zbEa8O{ny)69^?j10AI_d6*Tfi#;^0j)0|+yr?qOkE9eUXs z1`k(}%AcWZ4TFcpF!+S%LiNL97<3zk{mxlZZ3LSPtglYSJ(zt`4mmmEFr~bTy84T{ z9u#%)as5RPJ}7G9;|GX7d{ETGC-fJ!JSb|xePQ2C)P&{Pmf_JeZ=#opEw#%#l1KPB zs{zaVQ3IyHKuhuR;p7XYc=@%WG?5LY9*9496SbxN??C!K6tw>nfcFVF2B7b703QQb z2B33N@#bv7`8&nwxlAg#1V9H;i|t_bpx;gJnqcB}v08XY?$6Lbr2UymK&j&zSfF7z z)2<*TPu<#K)vX;?wH0GMjn}QG6S}pds#}{jx@P@a-1=#_+pC38i(Zp=EtGj^sp=Zc z7XaQZJM;)(I(U;Y1)O-_gQ$F*7mq`WQV~2Eu%$lY`yNr|+=e%Gf~M%I?=Edd zZlDU;qC9HnW(1gQCsMj-=Wc9WsH5*lG|_67F1x%2G*<;qawkrvf#0m6$Ai_?}SK@>CeL&_houDw7E#7ek}y~=z^aRq6w!oLR9ea-gi*&z5ro9F?%qz z%S$PO*JhNV5cHlSxk;i>&eFaBUyxrHAevXB%r!=knD;+P=mt^ndd05xjlwel?>3^` zltHfo=A)@pxr^lG!#x)fbW)5Tx{@*JM7#-q88xux5*GL`QgE7^)QhP$_=A7O-M>Ob+4K_d5^!CB?F;Vyn__Dwwj8Bt zHbOoZE9=Fqq9^s^??J#9-?5rGMt=J(_fYHN54@}3Qbzxl4C?fX|^En0!mmiHTye1m8AgR0%Y=F#td_?s5u z6CeuTbvT6f8o^y%bjCs^_tx*ZoAv^Qw?>Xab;;Qdb2t4+TCmL`wghk8CA?Kkd;55~ z5R*jg!J94y#p=`hc;{g#JOn+NcTp$b#|J+O_PndG{Kgua-mGAGGl;U17j#8yUjrpi zMB`=)@%O8N5V86L3o+svAUq`ULta1*dVvr_$YYONh>J&GsBw>Q-zn9&$H2u(`aAr{ z0OMN^X~*4Y|7a9m1xxlY0A~Oc5V>>$PQf7JMjh2a@Yf6IWsmIM!1uTotb}Yo7^Qnq zYCi(Na{wS2(`_VqwA+16)9KAL;J?xZxW{qWT}L*& zz|&TGrOoS5o3MEYfC3^X8h(U?b`?~R3>kiqSP3Z%&$>Yx-WLGv;K_rcH6}!FfPAu6 z%(C!b-3q+)NaCWtu%wb#M3tUz(ynYd9aC*dk8>c2+t+8 zuNM>$J2mtRa1{_zG_>E1vY|HvhzsFuBzd%3e@G??;cI|S)^d7_@KWBg#KB zQ4&M^0RVA*e=S6kd0@JQ|LVSviQoX9-tk}YH2QtLu=yZr6E=TN)(|-{g6ERZu7XdL z;qAs!#{wxjb}UN5@OuD!RRrgu&Sb5icUAsTKVB$2pW|utI+6&_y{KP==X(GW!*e&a z;`M?TspaH;|IKIxAw?@LLrJt^27tKmWV94G+U<{!w8AqckYYyZ=U<~OG14)G3&iB} zJgt@*Nin${=82g6BiR{K_dVc&AF=<^zp$c9Y$}PV=KuXdtlG zO`v^fX#Oe0%2tu=rM!rgSu3;4c{^H}T@SXr-6S`f7gF7;NDkY??0y)OHpyXj3pV$PqT=XkfOSmP!iR( z0*K2`lSuMtw>u%3Wcqv%=w!ZqLgE+4?;c+t_awB) z#1NH(Fedz1=S-T{{+>y5+%CB#`3AQt=1r7T%EgnUzxSY9{O6#!TklIXhK))t9+hAGS+l4OY*dmwp{L`-3KvUbhr%wO&4PU6c9N&UF?=Z zqiKBYDi}#J6o3yBD7GNL-ha&;;H_shubcl){z>s}MgO~q zzuRnb>+{N4Q|zO@%|b*~YG;RLg8Au2qU zqf@r(j%R-;h$v${CQ)HyUIn;x%0k^=BG!#vg=szBBkDu>PY{)6*q(TQ>7kw!zpTeL zVq9v`D9;dWX)mI6U2q59iCLCLO1t7$JNKoL0@mX&xn^;W*diqdlEh*$8dxv-b+`D1 zcR?oOnY?4V>DSYX(r?Jig1W%$X$#X!Lj3E~#mmCN+>LH@ybU4A4+Fy3JCV-=6D z82LrnFuC7vkvYit`a+a@02qBhc$GLIQmPyrmlO;sz`cfxU+gD!Q9Y^U;G&ll(i}AR zKtI)yE-gZlEXv?~q)GTddp6SS1({4~ljP5mHVJ+*!OXL4mh@~V9pPwlJzca((sQN7 zLjIBhEg$&+C~B1hl`m?ChYOtS#9Y{uUs52vBG@x|mQkJm$j}0^xhRGiolxvV6nl`A z+VS4zb^M0BvHqLgHwg!nxLI#g19Pb#cuZVXvfSPeUeb@DD{!biwCX;N&hCxM%2waU znU=q9D9|0-L55f@wV209DW2j{bx}OoSPl)$($GaIBYan9yE+$)G=svrZumcu6fmN( z2zFhYF{>sBZ`N*|I^R&*1pM)G^eOA+esuyDdFs zmk1%er54-sc(OsFc(_EWNJ9;^Vo1U4bYZ9XJx7W zMRDr+%__dC1CO4O;2WQ-hQs+sCDSHSdN&O$aS((uE?`G`{ALOQt}x)T zwjD$IilcFa9#dY73zrffqQON|=JJA?%Iqc$#?ad0R}p z@g1M6gE9Aco%4B`>cw=`iy8LxC?kNzrd^R3o3Z}3I!(@Z7^JaIHe8vm5g~2F^y+93l$FM` z5Qt!GN}$efPc~xO^)sqIG(&d(ULsP*%`uvvCWThH!{AXX=rP}&crk(G94o?D^^XM z7xDiHqcKA%*g1d4_zyH|5|=Ke6bnMy7aVITa$yx_4Z<$5CMv;OzA6&4H%kw zqijIX8cE(2WIMViC#K_aRr1eM$v;23-c7JA_Pz(EAP0-Eu#GK>&XqB@Iam>?Nw~x^ zz%iZ5Y#VzAB(g0vw}X{-L)OGlrY44tjsz`lnmWbKE3tPvV)8&@RZfaFPNv5$u?amU z)bMXiV#8nE0U>W=2?;B^JL-lxxC^r8DQafVSj|>4@8wj9n;zNALLpI= z(%BM+`x!NoI?Gk5x}O0@+#04IoQ@kjESzY#_IFlBLw|tN7(zJiZm0!=zUFX>9U*Fq z0b?Y|u(C&iu+}lQF^|OC=Z&!s?v9yB$p0x;cqAR*f z3nKj6o!9`OJ&>5WfKqW30gIEG>e!!&wc2G_9d9apB^GP$=)OwQ{TbU>^fZgE|8rPp z%mk^i2`epr`IoMeM21Qd0oyw=6Fn$c;E{)U_$69NRZ0g2nPKuQz8diiPE7pP0^(Rr;kkYZyTsuX;W#BnxZi3Hc%sIdxs+D1*Na$C0Uv2D0r*>J>0O;F%hnT0Rj)sdO1 zH5%*RtW-ti`X@AJm^4N;L1*5Y=1CHXA0-Q=aE&s4YZRr_EAzmmKvkpAMrJt=msFvu z)L8Fk1<$qB&s3nQSz{H=3ReBd+04UILNy$yM8jsr8%A|HZ6f#?>B7VEN<0cywQx38 zX;*CoDqfTNha>pVS{>2gh5-rH?U6*6td6r<1>(DCLe9r@_3yYyjq^~d%Oz{lD)29M z>PV=}u40@59aX4*1m;vvu!;iZY*cZn9aGAo0(l|HZyZ1IijGRdne60b-KNY_FLk^juR6Y^-mD5rm^1OBfKytLRKHUkI_U(fag1M()KNK&-NU@WvSC-3S)axx zoa4YNvvpKl63bpaDmnXl$@YxArjquyLiOEkhhhTvNUpW(KbO>X@Z$+}ox{gy~YQgb#+rf1|;IdJYmiec}<7z z)HWQ2@|)yjtK(4rWhCFQZjzk;PZ-gBsjOX>8S3MWgzc9*b@E`-%OEYm)n1{o@XN?Mj%G##R&i zg@RZ8>y1N_{VOeJa?%UP>sKoC3$F+{);?Q>rv6%1Hg{JQ8({Po`^p z5?y$yEcQ^k%4K!508wz2jjL={@Gu)UC_z2R#%jk>QSvLD8oNi2ZzAFTvE1ESqTJo| z6glQl^(lvF?CZ&?|7P)w>?ib(0+owgqJLs)LqQ21wFSp3&?z`R!81y5i!C@oflk2* z7ZluM3rOG+qi&L+jTut~Dub$~jeVcJok(w#&qUW);f*1JL} z2^L6#FM$xR0oy)m_VgI<4N&ljSWhuEs+2X{wBU$H> zM32tyzBeH{l6Qzx6TuMG5=4_!;i2RdN@R`KmqhgI8S=FSlQ5z;)j!#dwB zNf`e(s`($=r~b`DzWjF&$wqd5sug3Mm0vD^*A%$KMvYaV z`etf!N2S(!)2$yJd$As{?j;jZ@$W z8&#`7)$-(RQM&fqg5wp4uZTzs!U{ZWqsA#vspkx@qQ)Ld_j>u^?__>DEbDzw@}TP! zh)=x8`p2D=;Ap%4n-l9#h(x8kRo0PoUn8FBtBh2NlC)KQ+&pBrwH~j}#vbb9-BWB| zk5k|l8+Ee+mG_eO+gK^ERbGqPee6t^)as!bxD=gX%@OZ?OcdJzjI{&LKctk>lC073 zJlG4#D~nfzveKa};q2BVTrsF5VV`8kCU1C*A{3G=w@5HCwrfgGisq|QxPl73z1CM=1Q zSnyBiO4uRO*}eFfM%uY6 z1OR8VlIi+7<7Ps4uNXrL+-{>LDsZ<%C65Vw zPN9xsY^%INmjaK-uTo+_IFY+#VUH8JUlu-aBJ-u!if!*r z7$8BsD<@(CGcj)-BMbQPe-x<-3vA>vtyvY8NF*Al!1Xq2f&#bLqG({g{B~+kUh$w# zYgUCJHnNd7t3tJn1g9#fuOf3cZLFkEu=yI@&8jddiqxCu%EE#u(%q~Ii=#-rxk`S4 zb(Fk{zEOoSQKZ(azP;Qkzl19|RpD$DsWq#@If=x>ey{ohue=K3Y*|o&3#8Vp3MzDy z%)*Hwd&?-i@LCk5GQk^Blmd@Rl!qRu*0pa|$s(E`#+S(<+hC98@oF?b z6Gf?PJ4J>WnlMX(&qPrQ++(9=t4JFrW66LeDU7#oRzqx(9c1HG2p)){jz|z+wpSid zA=o5QqHXQl+rv}E4@^{GP)3hn4YqGqXl=5r*KnAM{ zrpxW1nytXmHfp>A*V?GrO%mK}qi#{)78^DDkOW(8)cBJUJZGb3E0D?Xq!p?J^KI1Z z_{b*fC3QfQONIE@C`y6R*|j!4_SILvN6AQ}n=%DQXUN-Cz^X5Rb9TD|)eJ()5Prx93#V!Bo(Y?2~?m!HCGUuf>n@#O@S)4X{_3gHI;V2rqWH+7q`dzLbZFW z!xsvU`eH_+FJ{EIn@o*wIN?6;!&Vy9XHqYJ%tNHU+AffUZN5OC?&MCdjZ@ zY)8xl1*)+CU5S(bxcCmnvPbpx7TMOxQmh)y+P%8~M zR{ejA3OhlMQyE>YH*~gwH><)noA0(EGU=-IMv_PWO>y%vJ)sRq@0H6dH4d*#KrNKIoa*mArw)FH%+@o+Uh zYP}$@78I2hl#fZ7@~Cni;nXaqyqD~inK3fjRrF&KSSPzU8Y5FLm;In7LvY3WuDg^{ zap-0E-v)RGgEudblqK@2v-`DXRZx{-E0Z^?LbT>uWxKKLsK^1uBKsW{fID)hF!6C90pG z)R)=nrzub=v^HZ@DXKnUhc;3DM5VsmRzF>VN+GGA*sMxX^$DA5iRy1r>Q_elLxFp2 z)a?p<%|?w&tS%w7sp`hqQndL)ApPF<6e=$h=*L$K1N;#Fhon1Youjm@L~u2@I>s^P>Je<)pJrN6-ARWQC9Tu1yI zAO4S11=NK!sb5{Y0hyHCz331v=ILpZ2~5Jg)01_ee)0OMb}mqp9OKiIO^v^YGhwl?3cq zc5Ld{!dB8eoQ%hsku)qNXZAj_MoCK21GdEfY0|64Tl9Iy{g6e|-0#ldes{?IP{{r6ko%#K``sb;eD7Sk z8!_(pIPUMVD6TkDbqrcG&HY`D`$Ran->&gzmkQi-lC@ykVSFVA4`H7-b)&P*}+yH@6f7ryDHsgRWWtK zTUr#CX)-mO)#^EJ5B*6ciyFl(n2d+4hcx;?0BBP#9xlyfD)>yCQL|{9 zf-v&G|F}IYazJpmOdm|hIKpI6+=^-RENVu{tk?rSUTb&O8n37(UL$GzWia-DO5#Bc zLCL();|a*TOoy@$tUk5yehmR?EDYD9X#G>lu;Lzbw1=&@lL^R*GYLWNzK;ONIIwn@ zp`G2z!H9-4u+-mkAiDUt0S;(FdvpLvOO6|VneI8^FmD`M6JW37^C%8g!Fg_AV4ftGuRw${UXEj|V91MmW42B#Gh8zrr91MmW1Y-{4V3m`> zkVUsS(CrrObD+J4H2P2ivgjiU>VSIjjYlkC8suqBA;lxbDLxVRP*~Zau(Cs8WrxDb z2IDuYtg(Sb!%*C%kb_dlK`G>*6mk%Ze?tz6AqT~fgJQ@*G31~aa!{Pi=%06bn`F2h z@^w~qv%8rVYkOe(boCdjAQrV_a59ndYaM31Gb>|wx-QJPJ1b*&v^C6lS60Sm&Ugk( zF*2L;>*zmcED>c3Cj&90)g%*`Qu=xQXYB6zAmS?&VFsd~G2@IA(F&!Sff&+ilCLmh zu-uf*M3^xU7G(^r@Pyj?;frj3aHmBdQIKS`r$-Y+zfhy~qH9CDE&8&8X5!`F`=ce$ z$;HPF)}|C^Cuwl(2JLX=-L*}lhcs-D-a#K>I3BVVi2J0LZ~VY8ExN@Oknh)MJpox+ zRtBaw7EL4(tkld_0!tjBJx05jfPDF#QYN2u@+(;Mc?Y`7qQ)5x(1aWX%ZA46W3Ko+ zE&3S+WgEyDGJaAs#?jmHLW({ZwWgYDV5F10oDl2YnFU-U#u0BTjM=botuYJFr=N@VexTz6JwCXDzynCZi|dWQS(;Kp zVlXY~N)n4m58eqoW9FF=7nw`pj(U=Q9>n{P{J*@(E@6T3UDt@v>myoHz6sZzfsz68InPp6hL|!ySvh^`%^7W&>ot?+yS~4qnfFEIKWDg`SA-HM zAfyuTGMVi*k<~}ZvaO6sc?QU*)RaKJk7^sNerGI*hcXJfmJp>08D)60?DiK@53>3w z*%lGlV1}RaDK&)>jDA8YO`tR(v!Di82_Dbt0YV0XtUgM%%rZvA0m!G6F-8hezK?1f zi~(LzZ3Clj-a`gieFn018<<2>#@#NWtoftR`ya*2BJ?s zTbjXrIaz2vsf-g!8K5v%un~n5$Uc_;oH66;#L@G2(}lH5kNenXNb*rL%q9cW<;wc; z!)@)0g91aUfkZQE5atTx@XACJ5)SsmLX@CIg(yu>X#ypv&5OFq{mKPbtGNGC;3Qt|qz8LJJuP^w^ZK26}7CCkFaxkKUcB$|fd)87LVb zzrI;A$uBe+XWXJA9q^x1qa$|QDa7iLH1<) zz~C)vC1X@&(FYt8do5~wWsj;t)^;0fA91V|Eo#gVt=-4%$@swl$)d&&tlOe#KEgfm zkdM2JkLMg80~WQCiI2N7_!tQJxXbu>(1~ckqG{H`Ep}tgzNk%Y!Qy6NDPvpj=-+N^ z8aEiiTGY59Viq?xGDf;aY1k3J&7$_1ZLEs79JdE6CZn@8U9NYeiXj8R@fyq3^D1-Q z9+nj}my@dSXPn~iwy3p{8PUO0Z8X0Q$pwzl$XQl(VXitj*yuhyGKH$Oa(QZ@^?7$Gb&^{CJ&xymbcZohP%_h%x{Iy1f#YTUYDr(x$8!=3moD4Tyuey=VPtY{B4?Gmy90LXS?)tl^8)}x63~26Vm4^ z5w=D@e~Fc67x!9y{A_~%JIf5;ZrubR^Y;*-tTZwPzr9#x&-Q92KAOS5J$k}rGI`o5JhKnUb@u*? z{uchQ)!z;`ot~sf!C&+vhHvL)mP~>_0ys=>z2RFQ_sk^zViGbzIxofT`yTc^5&xSY zKE8e3%06KAOskY@pQQ5fPieZ3XJ4o4jwSy>4VP+YpSJSp9n$op8XnW|5es_QkqS3~=Fm5*;{`S?dQ{g{UK z4Xcmn^J5y?H?92qPigu|4eg^=r}X(*4ecXWet!F?)olHilzrT)N1uIs`>xd%P4Cmt zzH{Z{AJFte8rr9>9?)lulMYiJ`}CEc|5KX&xQ6!as}uTsQbYR|mY?6gebuI4kg{)J zEz)Nn-#&k}PSe+GXrIIK@$LIpMa3J}(7uP|#ZQ*(yXZ!SQylmmHj;9~c(8ss&w1r<$yfz&d`}j6qw{g0KR-T1M&q5og zTWI5MpS~|Y|Jld4@%m(8zt-b6FC5nA!x}!M;Z*c}dOrSBO2@u`VPA8w@Oe$QFE{x4 zm+1#3uGetAhD8mBHT<}Set!GR$7JElns1qo%U5Y=9{`z(p5?c%g82BpzD&=)emp<@@hn`7b&7Z(jMYUHR`^`7d1g zEqj#TDukB?$xr;$A3`q9@6lb7y9^ikL5bO zn#^t^vl|BO!nbXDhh4vh{^f7}^g zO>a>%el4Hzw@S-3etdfUT5r3k(ZA@<=-4H9MyGd@`q=G`c9)vn&gsk5?zgr36s=re zj#iGz(dYj~<$tN(2j^b~=hO4^`~JZEgspp6XzLyp+Pa5@w(en}>DxkE=kUuj_z9J# zpZ;o}{rWzw&?o&|l-8D*vn1m!IFSzn?zc=jqZr+xR~JXS=+! zP2aDN|9rN~pDz9Hb^gBF_4#hg!!K{D=kIrUe7Ea2-SVc3Kb1cH^w*mHtEKnd&OhDq zri<^(d#dNxn*OV$H{JZx#XsBf@cFTEV{$}8Fs9;TvUH#RbLY@EmahkTOUt*q=HPz| zWu@np!Fw<=)cR!0>3Hy05mfI9xqgt5?QK(aMQh zb!D|&8`yvKy5%F~v55oAhsGvWmd6H0CW@t%d&~8j;Ea^_t{fT|SUym#)M^NkFCQ%o4421BV5w=;eN?LQ5=F)8!4(5k$@;{01U(jL0G(B6Zag z=6GD>9JUH8tE5jPB_;S)j|37@u;upniwOm-{f~JN<1fQ7 zXDF{IMr<&S+X)}0cP~>~pnQPUoH2B7=MrELCUN*iRF1+pK13lg4i=2wrIsJ`35%YI zK3AOp=UN4q#OoNNC;rQbBc1UJ_ch=mD>Z`EEX16e^n4SCQH(PT(b;nk?1f4tgQO6d z{`EeNrL{FnL|{6|fp?KfOXs!71byBkb(Ge1nbr+(t{gZc^h=Dho*33arM1LIL<*Nc zx&&}3#?N{2w}c(0#T>>*LeqkHK?%Zu{!Opu%j2)7j5BSIvrH#FB1jejvV$!y0rZTP z?Gwd^bEH^dAjL)ww4_BZP_vi?4@I_UTFAl3u?q&sJlF+^<2>Xb+jJP`8x04!Ab^~& z#h7cn)O2DpzlthFa`G`RGg<*gtd;{>QU@-dSiIICIKRL|IfWYLY)c_op%zFrSvk3X za1vQTS%+8>pq8VEiXZTM8QzYTM3S1VjJ4=9Y~UT70EaJ}vQ;puLXd2H*xp_I>j@vO zeQTYy*U4RmyJtUJTQOff6mS-EuFG<^h@HXnSbd$`zm(KB&11qHORTEh%`pvKH8n$Ri`r+*583XkX*)M z@hxcVEOhcQ1cn0_M&>F$7?Bpx8L!u_;7R5zJ}N_Y*9&uJNi>k<8zPSd@lVUx)j5G& z{DS0``qRLGe4m?h0`VakQDxHoSEKur0o@m;qWj<(=>CV%{fU6?OH2GO| ze@5u%6njDZPeC~kTRALK@jW@W>;d}!Fd2R5`oqTm-v@NjFNFMGp6KLn#e^=mVE{@3 zh;$v+1SK7}lF*lV+Q&HJj3xcGmGn`k6M!Zy=@+b|zY0nMfv}|2RwvR4wE@)R%ah4$ zXM6lHp`YmFOF=omWaXrE691VDiW;Ru2$0SvjOS;hu3&*jG;qzoVzg3iIsVf#(E6m& zIu+3RwJchHlyQ?^kX(`H-SQ>o|;Uqkiln-?vnxC&ot7N zv3Z*Ai8IiB!s!05fbNM#y6n%WuY(n!>w|7=mLY?fR+|4vvYUQ!Pxp?__0VJE9GRr$ z=IpunnAq+N4BJ5$C14_WDVAvC=wm!7oMNpzW2L!P9auSfaA165ik0r^tXfC)>ZmM4 z%jz?hlffgeHDk>=%DoP=Ogm8<{}Htn3?)z%StO*2$*Kh5*-6{@S;k{gW1vLNm#ls^ z$E9!VOvPyorqh(kaI_GbM%(e-_^*>fG8|AW>l`SW8u)B9bYj}3OtC)uaHyYWQCi-7 zlxN3-fV#Ybk#S-*$vQ4KXELg{ssCXCG{=P${*!DfKk@2K#oI&4uq(GI zQLdE47Fhpm2eQ|IXq3AK(y+tI@ywRoby}Ux=1#X$gerQcK?VRovruso0Xy9s&&nXM zL-H&7`9QbB&+$1lvz5V9@IU8P^#}!0he5%;xTsJipiodY0pMi_$v~z7-U;Yq@hnxa zXzgFHbQb{l)QbRyKU(UU2d?dicD#t%i+H0Bp^DLvm?D-sWGH6zj9LRwQ7#;|rN zkxLO`oFblU47H1+XPeoj%doI!J=a;^qnmn%a3ycZP3d9JOsICShMm3gXsK$xwOSq< z$`4km_3~i3R1`1!YPSA}c)l*1f7p|p7^vs#v_XiyKuSWaoi-FD0f7C5k%m;ftbG06 ziSkH&d3g-4T2lLN*g>4{ELRtdXNpy*ZNQdfSy@bFrmX3j%=3qglxz2<3B`pU7FA~ zjjHn~tgSUi0tJ2Ss?b6*d=I)VnX6-AgQw;|ie+tukW?KFIe|HonQ_}yo#@@z)tGy6 zDex=2>PS7QI2h#C*{cEKLD34*qnPk14tbtV{jrX_>0Y)E`m%bWj>guZ9$d^TyT6>1EtpZVttk>xq&#!7Gb(g z0`9L#_ZQjz$2?4|2mr~*0%@yRs>*|@p-?Klo!C$~9J?5M2LME29t24t@B{#og0WcH zn5VL_90cdGRfb$Y0yqg6=KM)%Q@29gb@((OUnzYa!Un!viY{njv+fqgm;p?pH7{N! zDpMOIX}yI-d=4fRnxrPCXM* zCpgt$qlPAxmiQ{>WrGN{A=r zC3ubWRGy{<=nk&`kI@0d(R;WXcvW+y=?s9!#wY4$7y_??LD>6J3(XpmlPj*?Zc|Zf z3>l(Ei!pkNBa93XpJt8t@DN5(Q;kcg%O4mWPmem#?ep-Rx_5h*D?Xphj{Pl60sLU& zL&8qog~F1sY|~x{<&Xu44|8kSNEa^>LWnSOn2&IKJf?lLI_Ya{vWzwgiQqkbNayRX zUOL|cr@JthrlVPWzzcCX!^QI{Xan`EtR5~E#u0~IM7eHg1|k0zLocEUYh&2n5J}rm z$(}FKX43)PkP6xQDB{`?C}Ie8VTyd*<(ycu{7#AiCjJOL%}tyP19Rt?#v9R>q^V<; z*61Rgnb^#GiMmYmyi(1@n7dflI+Nm7%!R20S}w2zt+g9l8s!;ASqbwTip1g0jm*@n z-72t|8rp#*m!nfj1!X|QvH;+T_#6nq-eZg}azaQJh*m;})IXl1?PxAoAVKCqAJ0+BMI{6P4qbV$}y-o5O>6KD56=bx7KsYl~=uimz?3Ve<3iXa+WKcY{V} z9d5XyV_=mwQLuN@;-5-Uu#=H=I)dzRxrWY$WG+Mb?OnF`?~or3ptW-;GU(DIve6(2 zHYf`Q$S=c>xd4zcQOlv>4s%KX9%zzzp$SNT&O3# zyS`WUcJk?X%M$>V$?10fts8_bkv-DTrQjJnVdjnCRI274Q^&y ztg8m>M;1igxmH@2a^fK!UjoU|L~St=h-FqSMc_82a;#(IF`aj6j#$}sr9o-pYFue{ z?vMHrR;z}tVzW}TmZ4A-at*UFm&Lr34+ULLE?IM4gE%dz5;dkmm9gHP%tq|f86O1H z$rW~7a&^=gppyd5|hWvFUMrTCp;Mb}9mWoer6KIX)SOie}|g5soWBW>2L^ z8mK$%GOw~!&H-2dQE*8Nn()Pv7lN<+rz4Ax8xe9T!Hr5-H zc+e}$5O7v9*_Bzf6Xn$^b?OhO)hrYnNi{bc-l2keqD^?nU1~L^yd(l=$Yuyig_KBV zMrm7tZ8R01!*OAk_6cZ$KvJQDVbGBzFp`#*hSM=8r%1R3F(3$DG(iK>Ye8!!PP+9% zvOHC1$=ZAN@vr|tvQC1piDd1@g7^v9@*(*{GqMaTwkvZf*sg3#(n2p;g*8zO8>C@4 zJ<_a+Fgl=MvL#>~Zsi_;J-wJ?{4F_R8|31K%-P84_h(MdO=HnJchHGE zoN$nZ2j(0PeKR**u<{etz0&D zO5`H1AjYXt(4dt7zd9h?#%MG$Dd=ts0E0UoC0XWoYYJQ1xb1k@M6|TXMBJK%<3i#&|^bT6=6l}gVN*B zF?DAtq)hZZOf|Kud)3;fDl*i6PbT(BjrY7Xj3S!d#z!gJ!^7Me5T-;+`d!}2Qam=K9Cv>#wn z41;3Hk~9mLG*xmgx)q|1hW+Q88anY4NgdL4bDYNfu}>lKYKj+S@ec7SzMWu}4UO_Am$pDp>K zMLIDt&x$}udvLVNMN?KNm+P+Ehk_NaqRJr-42A6E>bi6K&L&uxBnfbMRMv^ziE5i; zUZ5<|$_lZ_Vx~M713)&2MkEmeC^3mx3duog{SEPdZc~WrOGH^Pl-CInJWAai*Crbn zvYG<)!L61k&=k$|dtEB-ltA4Tw@_o3mUxM)S>TR}Mu~G+C!%5YMVOzEvEopV?S zFb*7;adu03CT+l68w;F^2B}u2E%RIB?P@HEJ$Vdzasrxxqyf0eOC#5qM zot_ekz>*3$*`oBtOx~5=i8m(1*u`Za4=dMI;6@g%+dvKZzqXNoxV_t1IuQOs&g&W) z)26DX`ME$UZz_x9C*RKFp&RMxq%@pDd47|?84XM$M^LwaJToU$RpNxg1?V*8S>8o6 zL2$K+6Gn1MR7g@kMgUU4!#BSNc=-0@JkZcp>Me3eo+qu*12dd{X#rT;rS70*N#MN+ zej=~L9@3>RfIY}F509NWHfSOJlF4-RaxZTq|NE=o#yU&;RLxvc5{;HdYb8C1;P$Mr zmk0PjW&EIRW(9`|c{`bwxlWiT!J#;`X0dv-DQS?-aRDMt)wOtx#2F$wRI_otDUbH4 zNxM~S8UYcYiIi5Q<`yH#4mhv&|8U9zXagoWSci!@j~ft4n{^O)44GshxAYe?beiaD z>3E~XcrrYqPYx-h|DOucI?mBEhBGksgM(D%HP(hZ`l)K;=!t-4V2sLxOY?8mN%G+j zN^xT(C$Yv-Nm-pLZukV5jn9!2T~HXjVv&!yeD=HA`p$e5mv8;yV=-tq!GR1Mm+=qg z!hgtFSi3kgJXk9JD4CYXXjobjEwb7iir;cDX>)?val`BWiY7L%De5_u7ztjxd9)bF zc^*E$6Gz|vUX$}w*CjRX*y|~nKq+=E8k&IfOJ9iuNaN8N@^yAWRs1y!a`e&;abL;8 zAdTW}II>)YN*14n%b-(dc#I=UMvFKu{$~r~Hl=$V$7NtFaOb0J?CD0naxn|HA2WeV z%rMXlC1VJ&p_+~TXaZvAgJ?o#v)SAVc@XzbizPHwCRazc#aJlYCaHWnEzJvdW69C* zghG}Th$YINi+@=TsGNtFddOJ|tCRf){x7i590ED2bK_^+oRDiO#GCmKf*+Mlbmqrp zf%it7e7IYcofU88-sD_tR#W9Ln%$%vqbBM_XQ^1wS;)rAEF`EXr2S&8PO5HuG)_Hk z6&zCn$()mkNxYV1rGzfEZs=UlA%VGd$5ho5!vu9Hm)9^@$_V zZrfu_kw|m09(E=5pTvoqPIET7hJ#4EssK~X!))&ikQVKgA+r)4j-?x;gs_Up9_K0hH|}%*9fx|)S{a2BJ0u19FH=if zMdS8BGZ5ml18u|N5RD8<(|S0~UN|04k&}^BgBcMiG9wCEofK&>BTW&zYBVECA~Qm$ z<@7Ki46yca#7_Oq)>HAF@qZOMv*Z6Qoy20fvjRQyBa*T>eoj)rjer^?B1pOT_XNoe z<*cO6__rB_?2y>I!i)uW|HqPtn-8VEcJ)q%l*UI=V|f8r*^s(GXmUpeiCiVJ*d&sG zaxva>CPotj&}z|A79}K$-fB0wH(7n@P&=W3oZ!0A5b7_o!L2EiNO4YlQl%()XT`sJ z7G#I*s^4Pzs$sFh#$_5*A=JNrh82n*{h z1w~1pi6m(`b40jGiJa~%F7ra2(jte@$Z4MyR@tq_n}KQP_))Q+Fhef>E2)@ip8Pex zb`7ihwaIgRQF4U@0}f=MV6}G6#wiDo{anqkyg7249r>YeHeVi0S}xQA)nKXdow!2N zjel%m&H>D_RJm$t<_!hfsOUfdrp$A-rJ#DOUCFHfS&a=4u3iJgRQ=vblo0k*+{VlCq=bc;_)5xMwdKhTFYVrwr!!~HJk<0;Vxrl4-*(lkWb%h3&g)DcH#e{+)C$BJq4-d_;U4T$_S&@t37y z&Td-bkBf^2(w&^m{AM!c>5?8?yX(Y19t&ho12K8w0o~IdvUxOiG@;Mb;Q~fQSjSM! zoMB2~2J=c3@_j#n_>1Yc!{=XJJN#+u-~WT@Nb?T=hePlmv_m#_*ACJAM3fl8{*tyx zZLIBdFDkVRza7fBIv4-zG-aPOxwAC=>5PvzaEuiSdCtW@_XD3{nqFodDEgxRyhVpU zp1#izdwa!w_q)v&-Wk|J+H?G8_zX0&V6OEC)0k^nXU8>+|J3ViT^ql=9WO|5lU^Ku zPLQyOC=iE~vm~s=O48*zD#6;i-oE|A@o!1eN*!2Trr{MjGjfNW?BLyH;jD<>_RtM< zU3M`GJzp1xV4z$K-HT0*DD+yn__M;ufEo1<(WX-}T%FmNu|*dJsBBQLa4Maq!-EV1 zaASd6n5XyO?4(j2aoT;;p@J+vxFbWzF81tL>?5M;ejr=H$AXBUyc2HUD43|JO3sYOe9Eg^_7;9&H*c=KFCqmT=955qGPZ&rM?!qmFPsPv7KO zy9UxBc&S>bmn&mYK3}fn#|zcMXtZ%y^HDv80_s$$9*nk^4%G7`eJ-Fjj4Qx;CdO*z zp|Mi2$7(8CqdIJ!7#lz(IanjXTA|KTLpfW=ilqa3pn(M-fUU(66&*>qMni~*;p;TK ziq%~nE7ygwouz?FwaDsPBOIcHHKL)uYK2(gV2uQ8C0HlHRT5k+!8H)R!KjzM=`=V}DTvgCDb@>7 z89i7S89{hUtyC2?Zn!z$zxC!#JM*{nQ5fA=8Y+)TQl1Pma$+ACM$t^k_~^BdNY(Ov zptlQbjiE)bwn#}H?R>vvhsL-XM7~rQi|AGl(H3i)t+`m4*gH~+AnANx1++vEiPcVw z^IdMEwdm$DeUOTau4xNOH)hE~O`CPZCET?AmY$8PSNB}EV(p4mJ@_nDbzu00D!zYJ z9xUQmg9`Y4fswLs4O2Gt1K_n z4&vKd)yi09qPBcu?4I&iae2LfD%2#MZ;dOD$wRGP7}&RbyjrQ32I`fn0LRM%h!hL; z!gADxnhIqdgk@9Q!PFJ8U6W0iFu8W5Vrolk*kra(jP8Y6b`0isLWxp;5)HMO@j|T@ zjTXvd(Iz&L{2I2Q{^4>JMnp7Bh{&t0hoD?;9@n4dxj76MM(PnY^Kr0Jk8lsrz;NJE z&UCfmO1VijKaPff4|yBvby=SZG+_HT@a z3uDC*3XfA{0A%RE%3YofYE8XRgE9L&t!9sZij-fUIh1B=w zVM5WaO&jxlXxX>#L=p9S#|rS;`8*Uc|C~b^Lp+iL0;mSlc8X-J_A-I=ZPd<B|X;Usx zt_%)FRQ|y#0q&vl@_B6_)T!YRCwMxTuMFnzDV6pSXH=yL;x(lV5+?GGqEDfK$RIpe zf|sI@o{?4`CI&|FT|0aY?;hp{$gq0>5i0Xd71)o4Ayt9Cob!SjVJCTrj5;r83*v#C zkZLS&muo&k)0OVWf3Q`TMTlmMc!hO+bnXsMeeZ3rXRay!!}23Lto#vts6J= zZ{6XTxoPKyTOEr#x8AhH6}V~F#tnU(Bo0j66%2EFzCy2RQzHP$UE6kSbduV<+Ua-m zYNz4NtJjd36)X3Qxr%Ie%IVv1)23UT?6z*-wP~kgdPCoiUHv7Zy+NbHAdcIn+12HQLcL$?IiBWFdo(r9MiioTLCSM4WI|8 zqBomP0eYXCP~1QxPwHyMFj&x1He()xj-^z@ScC_r6?BV(xR&>xD*C59J?)(s9K`64 z<2(c%EgYap7bY_!6XD`p2-*<#iHSTjm2{f>3;B^UR7di`hgMBo)zW@fBNAwytA(); zbvqcm4&*H(jR;1fy@eVNl?KW+nyKwK7WN*5)~50^cG==e>A}&p4d54{GaKiB;}O(e zEDsK%n`@dD*(jethqBAXs8SilplJd!$H1_NYVO5cWemfP(Q%Ag$4iBMn3TV50=;~m zO{84wtK3tn?igHy8FOK1lqP$eFfoRl(Po9g$cdO(`<6;&pTmxd<-$-@9@}5p2fNjR z@>J?*p|&r2E2bv-st$H&78|1_U(dr%@Wrwl;zJAf^(Og^X}$&E}Cxr5cS>-7u0GtXK9ULL31FHN<#{ zWx-7fEe?X?s}p-GTgP+-p|+(mQlw$={yeQENKJ@T^SaS9<N7*)4lvMiVjxT)z6634UCC-h1*xy)&QKLZwezPP>(k zeVp+j+_g@>-mViZ^&_nhw!NqQ{T&~ed2IH>T|d+Pv-2NW_`!2NwCKZ&<$Rpc+*5jo#`z8eR%s(oZ;P$BpE0^dK+`j2BEa;F+_m&6Sj6VvO-$nS2g8w7B z1h-2*t*YA;ZkKmHq6xiSdk!=+4x8XsP4 z1V1qILyKC!GP(O`plcU(y;gL0E5CM4RX6QM;Md#rXiHsu9eFw8Rk&Awx1|*xb`pQb z3=0`<&c{4+dxO8)nD^{qeB1rP9= z;q|OP(wfklitmIIiGlA1ezNTKB>I>WDxcFzAPesW;MseP<~Myjwm-bhY46oNqxQF@ zYZaUmc{b_3;-XoxbXe3`-qsa8aq{zD_~J7_PK@&yt85$iS_HcO5AufJ+wyQ%(Y)rd z+0-%OWxosq;Vzj;u-#?STi<(Z_Lldw?;&qayi!NY)V%JMXc7Em?-LE(u9QLkC7a*% z7^m!^>RCVD>T^mIuADT#j&m@`h~V6}BtsitH0~K=Hi{p10FB`4mFVajvfy!a@`@~Y zTXZTDo{OH%gttehGvPC$=Q80P(My@|&gi9;S^UiOtHjT7G;0z#n^KS#M{@!g0pds- zv6mW0b3KSW#*vL;8k6H_UL!!C;%I&VCr!0Q-}sK7K*K=1ubRlAO)!YV7JRtJjoX_})ezkc<_{Haay0k{c+kYfVV^`{VM;r1D?faf$>|T z+b$Em@4++uM(~ICZllK)zKWrE*O%dmeVQEZ13ZiVyC;GF^d#^{m_FpcR`@acADsmM zR{$sZ`2GEFDBSPwe^=ptzx_uF_xs(yQn=r5KBw?KJ;JA1{J#L6C5LZK0&jz1WZ};N z9A7EJfL7?YAwT`-^Az(@U%!92Nb%b|{A(2d@JylefRKsSE8L$){3zh~xIh%07JNmI zZddvpO5gM{pzv-FKE`xf0>3xG_=&%=dfm(T+#U~GnH0VoaH{Wm<=^H(M-}eRj~-z< zsrIYHeu3d_uKijWzpQlpdCIQ?PV!%*_3FMT(r=N0_8g=QicP zNBRF}!}siDwc>x(o9|S>C*A}P?BRZ`FUTHN(j2S@9jfoOS}(Jctz2&Cx8I`W`t!W9 z(z#ygpg8{36yKjOzDwan<)=q8yjSVm;L(BeVLsP;@;|0@PV`8L+0jF~Nv|N+JcND*EmXvG#6y7>zyY=C? zsEgtL{1mUnF#Sclg-)BwIg+DOdQQllgOXze?vQ}&iKljJ(_8HgoA11DJ~Dx=SKW}c zU2|;c)>o{)_NwdL7BBYEIV+a7-QEd~fyg&&^rQk7;oZ`HvaQg#@xZ$fvV!lTx}xv4 z64Lt}cCC?H40kK94QF2@Im$kigT46j{$hD;l$_n5BNhYu^0o|{90^Jv0V>sLbBIri zG@Q}MPk>&H=;?8c{N7qk4{hMwOudktkdp&;eDDS*mT~N!V3oQ`hYSX3y*yjD7B;&FokGEv9xz$2n+gy6^j@4?xodvO`&6G8pWp7*igyk zX?()YNXZaUhiJt>Wt28@42Eq5oIrWizwE2^>8Q|&sHV-}dLz02g(my}{n~<2!Z}Zhtn%~FwpKsRuaJ&4o zdDXK`=D*9!Z}Z>Nn%|d~|6KO++dTO>&2Rm$a2H`l)%dG>`E5S^lIBO(+3@r8(|n0w zR)3p!zw{%LZ7EF%Q$IidyO8GVh|n$n+uxGPoPkU8udMvFpOt*OXaOws^KpL;X+Dh5 zKSvWX{N6Ssq5b!9KaK<+M!4535ak`E*7o7M{S zN2lQbPc^@dHz+Ut-uEHN{|#>`!pgGnE5N0=pZ}eo5RA)-Sn6l_Ec|<-$Zi`hw;sGgyf~%Wv~9N;ca~=U;z9@?YX5`n-~OJQOBVdQvcH K9-aRA`Trl;9LaM4 literal 0 HcmV?d00001 diff --git a/bin/custom-output/benchmark/dhrystone/dhrystone.txt b/bin/custom-output/benchmark/dhrystone/dhrystone.txt new file mode 100755 index 0000000..7451636 --- /dev/null +++ b/bin/custom-output/benchmark/dhrystone/dhrystone.txt @@ -0,0 +1,2359 @@ + +/home/hzb/test/am-kernels/benchmarks/dhrystone/build/dhrystone-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 0000e117 auipc sp,0xe + 80000008: ffc10113 addi sp,sp,-4 # 8000e000 <_end> + 8000000c: 211000ef jal ra,80000a1c <_trm_init> + +0000000080000010 : + 80000010: 00200713 li a4,2 + 80000014: 04e50263 beq a0,a4,80000058 + 80000018: 00300793 li a5,3 + 8000001c: 00f5a023 sw a5,0(a1) + 80000020: 00100793 li a5,1 + 80000024: 00f50c63 beq a0,a5,8000003c + 80000028: 02a7f263 bgeu a5,a0,8000004c + 8000002c: 00400793 li a5,4 + 80000030: 02f51263 bne a0,a5,80000054 + 80000034: 00e5a023 sw a4,0(a1) + 80000038: 00008067 ret + 8000003c: 00006717 auipc a4,0x6 + 80000040: afc72703 lw a4,-1284(a4) # 80005b38 + 80000044: 06400793 li a5,100 + 80000048: fee7d8e3 bge a5,a4,80000038 + 8000004c: 0005a023 sw zero,0(a1) + 80000050: 00008067 ret + 80000054: 00008067 ret + 80000058: 00100793 li a5,1 + 8000005c: 00f5a023 sw a5,0(a1) + 80000060: 00008067 ret + +0000000080000064 : + 80000064: fe010113 addi sp,sp,-32 + 80000068: 00913423 sd s1,8(sp) + 8000006c: 00006497 auipc s1,0x6 + 80000070: ad448493 addi s1,s1,-1324 # 80005b40 + 80000074: 0004b783 ld a5,0(s1) + 80000078: 00813823 sd s0,16(sp) + 8000007c: 00053403 ld s0,0(a0) + 80000080: 0007b683 ld a3,0(a5) + 80000084: 0307b703 ld a4,48(a5) + 80000088: 0087b303 ld t1,8(a5) + 8000008c: 0107b883 ld a7,16(a5) + 80000090: 0187b803 ld a6,24(a5) + 80000094: 0207b583 ld a1,32(a5) + 80000098: 0287b603 ld a2,40(a5) + 8000009c: 00113c23 sd ra,24(sp) + 800000a0: 00d43023 sd a3,0(s0) + 800000a4: 00053683 ld a3,0(a0) + 800000a8: 00643423 sd t1,8(s0) + 800000ac: 01143823 sd a7,16(s0) + 800000b0: 02e43823 sd a4,48(s0) + 800000b4: 01043c23 sd a6,24(s0) + 800000b8: 00500713 li a4,5 + 800000bc: 02b43023 sd a1,32(s0) + 800000c0: 02c43423 sd a2,40(s0) + 800000c4: 00e52823 sw a4,16(a0) + 800000c8: 00d43023 sd a3,0(s0) + 800000cc: 0007b683 ld a3,0(a5) + 800000d0: 00006797 auipc a5,0x6 + 800000d4: a687a783 lw a5,-1432(a5) # 80005b38 + 800000d8: 00e42823 sw a4,16(s0) + 800000dc: 00d43023 sd a3,0(s0) + 800000e0: 0004b703 ld a4,0(s1) + 800000e4: 00c7879b addiw a5,a5,12 + 800000e8: 00f72823 sw a5,16(a4) + 800000ec: 00842783 lw a5,8(s0) + 800000f0: 04078a63 beqz a5,80000144 + 800000f4: 00053783 ld a5,0(a0) + 800000f8: 01813083 ld ra,24(sp) + 800000fc: 01013403 ld s0,16(sp) + 80000100: 0007b883 ld a7,0(a5) + 80000104: 0087b803 ld a6,8(a5) + 80000108: 0107b583 ld a1,16(a5) + 8000010c: 0187b603 ld a2,24(a5) + 80000110: 0207b683 ld a3,32(a5) + 80000114: 0287b703 ld a4,40(a5) + 80000118: 0307b783 ld a5,48(a5) + 8000011c: 01153023 sd a7,0(a0) + 80000120: 01053423 sd a6,8(a0) + 80000124: 00b53823 sd a1,16(a0) + 80000128: 00c53c23 sd a2,24(a0) + 8000012c: 02d53023 sd a3,32(a0) + 80000130: 02e53423 sd a4,40(a0) + 80000134: 02f53823 sd a5,48(a0) + 80000138: 00813483 ld s1,8(sp) + 8000013c: 02010113 addi sp,sp,32 + 80000140: 00008067 ret + 80000144: 00c52503 lw a0,12(a0) + 80000148: 00600793 li a5,6 + 8000014c: 00f42823 sw a5,16(s0) + 80000150: 00c40593 addi a1,s0,12 + 80000154: ebdff0ef jal ra,80000010 + 80000158: 0004b703 ld a4,0(s1) + 8000015c: 01042783 lw a5,16(s0) + 80000160: 01813083 ld ra,24(sp) + 80000164: 00073703 ld a4,0(a4) + 80000168: 00c7879b addiw a5,a5,12 + 8000016c: 00f42823 sw a5,16(s0) + 80000170: 00e43023 sd a4,0(s0) + 80000174: 01013403 ld s0,16(sp) + 80000178: 00813483 ld s1,8(sp) + 8000017c: 02010113 addi sp,sp,32 + 80000180: 00008067 ret + +0000000080000184 : + 80000184: 0056071b addiw a4,a2,5 + 80000188: 00171793 slli a5,a4,0x1 + 8000018c: 00e787b3 add a5,a5,a4 + 80000190: 00379793 slli a5,a5,0x3 + 80000194: 00e787b3 add a5,a5,a4 + 80000198: 00070813 mv a6,a4 + 8000019c: 00379793 slli a5,a5,0x3 + 800001a0: 00261613 slli a2,a2,0x2 + 800001a4: 00271713 slli a4,a4,0x2 + 800001a8: 00e50533 add a0,a0,a4 + 800001ac: 00c78733 add a4,a5,a2 + 800001b0: 00d52023 sw a3,0(a0) + 800001b4: 00d52223 sw a3,4(a0) + 800001b8: 07052c23 sw a6,120(a0) + 800001bc: 00e58733 add a4,a1,a4 + 800001c0: 01072683 lw a3,16(a4) + 800001c4: 01072a23 sw a6,20(a4) + 800001c8: 01072c23 sw a6,24(a4) + 800001cc: 0016869b addiw a3,a3,1 + 800001d0: 00d72823 sw a3,16(a4) + 800001d4: 00052703 lw a4,0(a0) + 800001d8: 00f587b3 add a5,a1,a5 + 800001dc: 00c787b3 add a5,a5,a2 + 800001e0: 000015b7 lui a1,0x1 + 800001e4: 00f587b3 add a5,a1,a5 + 800001e8: fae7aa23 sw a4,-76(a5) + 800001ec: 00500793 li a5,5 + 800001f0: 00006717 auipc a4,0x6 + 800001f4: 94f72423 sw a5,-1720(a4) # 80005b38 + 800001f8: 00008067 ret + +00000000800001fc : + 800001fc: ff010113 addi sp,sp,-16 + 80000200: 00113423 sd ra,8(sp) + 80000204: 00006817 auipc a6,0x6 + 80000208: 93880813 addi a6,a6,-1736 # 80005b3c + 8000020c: 00254783 lbu a5,2(a0) + 80000210: 0035c703 lbu a4,3(a1) # 1003 <_entry_offset+0x1003> + 80000214: 00084603 lbu a2,0(a6) + 80000218: 00000693 li a3,0 + 8000021c: 02e78c63 beq a5,a4,80000254 + 80000220: 00068463 beqz a3,80000228 + 80000224: 00c80023 sb a2,0(a6) + 80000228: 569000ef jal ra,80000f90 + 8000022c: 00000793 li a5,0 + 80000230: 00a05a63 blez a0,80000244 + 80000234: 00a00793 li a5,10 + 80000238: 00006717 auipc a4,0x6 + 8000023c: 90f72023 sw a5,-1792(a4) # 80005b38 + 80000240: 00100793 li a5,1 + 80000244: 00813083 ld ra,8(sp) + 80000248: 00078513 mv a0,a5 + 8000024c: 01010113 addi sp,sp,16 + 80000250: 00008067 ret + 80000254: 00100693 li a3,1 + 80000258: 00078613 mv a2,a5 + 8000025c: fc1ff06f j 8000021c + +0000000080000260
: + 80000260: f4010113 addi sp,sp,-192 + 80000264: 0a113c23 sd ra,184(sp) + 80000268: 0a813823 sd s0,176(sp) + 8000026c: 0a913423 sd s1,168(sp) + 80000270: 0b213023 sd s2,160(sp) + 80000274: 09313c23 sd s3,152(sp) + 80000278: 09413823 sd s4,144(sp) + 8000027c: 09513423 sd s5,136(sp) + 80000280: 09613023 sd s6,128(sp) + 80000284: 07713c23 sd s7,120(sp) + 80000288: 07813823 sd s8,112(sp) + 8000028c: 07913423 sd s9,104(sp) + 80000290: 07a13023 sd s10,96(sp) + 80000294: 05b13c23 sd s11,88(sp) + 80000298: 12d000ef jal ra,80000bc4 + 8000029c: 00003697 auipc a3,0x3 + 800002a0: 93c68693 addi a3,a3,-1732 # 80002bd8 + 800002a4: 0006b783 ld a5,0(a3) + 800002a8: 0037f713 andi a4,a5,3 + 800002ac: 00070c63 beqz a4,800002c4 + 800002b0: 00178713 addi a4,a5,1 + 800002b4: 00377613 andi a2,a4,3 + 800002b8: 00070793 mv a5,a4 + 800002bc: 00170713 addi a4,a4,1 + 800002c0: fe061ae3 bnez a2,800002b4 + 800002c4: 00006717 auipc a4,0x6 + 800002c8: 86c70713 addi a4,a4,-1940 # 80005b30 + 800002cc: 00f73023 sd a5,0(a4) + 800002d0: 0037f713 andi a4,a5,3 + 800002d4: 03878513 addi a0,a5,56 + 800002d8: 00070c63 beqz a4,800002f0 + 800002dc: 03978713 addi a4,a5,57 + 800002e0: 00377613 andi a2,a4,3 + 800002e4: 00070513 mv a0,a4 + 800002e8: 00170713 addi a4,a4,1 + 800002ec: fe061ae3 bnez a2,800002e0 + 800002f0: 00006a97 auipc s5,0x6 + 800002f4: 850a8a93 addi s5,s5,-1968 # 80005b40 + 800002f8: 00aab023 sd a0,0(s5) + 800002fc: 00f53023 sd a5,0(a0) + 80000300: 00100793 li a5,1 + 80000304: 02179793 slli a5,a5,0x21 + 80000308: 00f53423 sd a5,8(a0) + 8000030c: 02800793 li a5,40 + 80000310: 03850713 addi a4,a0,56 + 80000314: 00f52823 sw a5,16(a0) + 80000318: 00002597 auipc a1,0x2 + 8000031c: 08858593 addi a1,a1,136 # 800023a0 <_etext+0x10> + 80000320: 01450513 addi a0,a0,20 + 80000324: 00e6b023 sd a4,0(a3) + 80000328: 679010ef jal ra,800021a0 + 8000032c: 00002597 auipc a1,0x2 + 80000330: 09458593 addi a1,a1,148 # 800023c0 <_etext+0x30> + 80000334: 01010513 addi a0,sp,16 + 80000338: 669010ef jal ra,800021a0 + 8000033c: 00a00793 li a5,10 + 80000340: 00003717 auipc a4,0x3 + 80000344: 0d870713 addi a4,a4,216 # 80003418 + 80000348: 00002597 auipc a1,0x2 + 8000034c: 09858593 addi a1,a1,152 # 800023e0 <_etext+0x50> + 80000350: 00002517 auipc a0,0x2 + 80000354: 0a050513 addi a0,a0,160 # 800023f0 <_etext+0x60> + 80000358: 64f72e23 sw a5,1628(a4) + 8000035c: 0007ab37 lui s6,0x7a + 80000360: 50d010ef jal ra,8000206c + 80000364: 120b0593 addi a1,s6,288 # 7a120 <_entry_offset+0x7a120> + 80000368: 00002517 auipc a0,0x2 + 8000036c: 0b050513 addi a0,a0,176 # 80002418 <_etext+0x88> + 80000370: 00005797 auipc a5,0x5 + 80000374: 7c07ac23 sw zero,2008(a5) # 80005b48 + 80000378: 4f5010ef jal ra,8000206c + 8000037c: 03010593 addi a1,sp,48 + 80000380: 00600513 li a0,6 + 80000384: 095000ef jal ra,80000c18 + 80000388: 03013503 ld a0,48(sp) + 8000038c: 3e800593 li a1,1000 + 80000390: 00100413 li s0,1 + 80000394: 6f4000ef jal ra,80000a88 <__udivdi3> + 80000398: 02051793 slli a5,a0,0x20 + 8000039c: 0207d793 srli a5,a5,0x20 + 800003a0: 00003717 auipc a4,0x3 + 800003a4: 07070713 addi a4,a4,112 # 80003410 + 800003a8: 00f73023 sd a5,0(a4) + 800003ac: 00005497 auipc s1,0x5 + 800003b0: 79048493 addi s1,s1,1936 # 80005b3c + 800003b4: 00006917 auipc s2,0x6 + 800003b8: 86490913 addi s2,s2,-1948 # 80005c18 + 800003bc: 00005b97 auipc s7,0x5 + 800003c0: 781b8b93 addi s7,s7,1921 # 80005b3d + 800003c4: 00005997 auipc s3,0x5 + 800003c8: 77498993 addi s3,s3,1908 # 80005b38 + 800003cc: 04300c13 li s8,67 + 800003d0: 00002a17 auipc s4,0x2 + 800003d4: 090a0a13 addi s4,s4,144 # 80002460 <_etext+0xd0> + 800003d8: 121b0b13 addi s6,s6,289 + 800003dc: 04100793 li a5,65 + 800003e0: 00f48023 sb a5,0(s1) + 800003e4: 00100793 li a5,1 + 800003e8: 00002597 auipc a1,0x2 + 800003ec: 05858593 addi a1,a1,88 # 80002440 <_etext+0xb0> + 800003f0: 00f92023 sw a5,0(s2) + 800003f4: 03010513 addi a0,sp,48 + 800003f8: 04200793 li a5,66 + 800003fc: 00fb8023 sb a5,0(s7) + 80000400: 5a1010ef jal ra,800021a0 + 80000404: 03010593 addi a1,sp,48 + 80000408: 01010513 addi a0,sp,16 + 8000040c: df1ff0ef jal ra,800001fc + 80000410: 00153793 seqz a5,a0 + 80000414: 00300613 li a2,3 + 80000418: 00003597 auipc a1,0x3 + 8000041c: 00058593 mv a1,a1 + 80000420: 00700693 li a3,7 + 80000424: 00005517 auipc a0,0x5 + 80000428: 72c50513 addi a0,a0,1836 # 80005b50 + 8000042c: 00f92023 sw a5,0(s2) + 80000430: d55ff0ef jal ra,80000184 + 80000434: 000ab503 ld a0,0(s5) + 80000438: 04100c93 li s9,65 + 8000043c: 00100d13 li s10,1 + 80000440: c25ff0ef jal ra,80000064 + 80000444: 000bc583 lbu a1,0(s7) + 80000448: 04000713 li a4,64 + 8000044c: 00300613 li a2,3 + 80000450: 58b77863 bgeu a4,a1,800009e0 + 80000454: 000bc703 lbu a4,0(s7) + 80000458: 001c879b addiw a5,s9,1 + 8000045c: 0ff7fc93 andi s9,a5,255 + 80000460: 03976c63 bltu a4,s9,80000498 + 80000464: 00000713 li a4,0 + 80000468: 578c8463 beq s9,s8,800009d0 + 8000046c: feed14e3 bne s10,a4,80000454 + 80000470: 000a0593 mv a1,s4 + 80000474: 03010513 addi a0,sp,48 + 80000478: 529010ef jal ra,800021a0 + 8000047c: 000bc703 lbu a4,0(s7) + 80000480: 001c879b addiw a5,s9,1 + 80000484: 0089a023 sw s0,0(s3) + 80000488: 0ff7fc93 andi s9,a5,255 + 8000048c: 00000d13 li s10,0 + 80000490: 00040613 mv a2,s0 + 80000494: fd9778e3 bgeu a4,s9,80000464 + 80000498: 0016179b slliw a5,a2,0x1 + 8000049c: 00c7853b addw a0,a5,a2 + 800004a0: 00700593 li a1,7 + 800004a4: 00050c93 mv s9,a0 + 800004a8: 5d8000ef jal ra,80000a80 <__divdi3> + 800004ac: ff9c879b addiw a5,s9,-7 + 800004b0: 0037971b slliw a4,a5,0x3 + 800004b4: 40f707bb subw a5,a4,a5 + 800004b8: 00050c9b sext.w s9,a0 + 800004bc: 40a78dbb subw s11,a5,a0 + 800004c0: 0004c603 lbu a2,0(s1) + 800004c4: 04100793 li a5,65 + 800004c8: 00f61863 bne a2,a5,800004d8 + 800004cc: 0009a603 lw a2,0(s3) + 800004d0: 009c871b addiw a4,s9,9 + 800004d4: 40c70cbb subw s9,a4,a2 + 800004d8: 0014041b addiw s0,s0,1 + 800004dc: f16410e3 bne s0,s6,800003dc + 800004e0: 00810593 addi a1,sp,8 + 800004e4: 00600513 li a0,6 + 800004e8: 730000ef jal ra,80000c18 + 800004ec: 00813503 ld a0,8(sp) + 800004f0: 3e800593 li a1,1000 + 800004f4: 00003417 auipc s0,0x3 + 800004f8: f1440413 addi s0,s0,-236 # 80003408 + 800004fc: 58c000ef jal ra,80000a88 <__udivdi3> + 80000500: 00003797 auipc a5,0x3 + 80000504: f1078793 addi a5,a5,-240 # 80003410 + 80000508: 0007b883 ld a7,0(a5) + 8000050c: 02051613 slli a2,a0,0x20 + 80000510: 02065613 srli a2,a2,0x20 + 80000514: 0009a583 lw a1,0(s3) + 80000518: 411608b3 sub a7,a2,a7 + 8000051c: 00005797 auipc a5,0x5 + 80000520: 60c7b623 sd a2,1548(a5) # 80005b28 + 80000524: 00100613 li a2,1 + 80000528: 00005797 auipc a5,0x5 + 8000052c: 62c7a023 sw a2,1568(a5) # 80005b48 + 80000530: 01143023 sd a7,0(s0) + 80000534: 00500613 li a2,5 + 80000538: 02c58463 beq a1,a2,80000560 + 8000053c: 00002517 auipc a0,0x2 + 80000540: f4450513 addi a0,a0,-188 # 80002480 <_etext+0xf0> + 80000544: 00002797 auipc a5,0x2 + 80000548: 6807ae23 sw zero,1692(a5) # 80002be0 + 8000054c: 321010ef jal ra,8000206c + 80000550: 00500593 li a1,5 + 80000554: 00002517 auipc a0,0x2 + 80000558: f4c50513 addi a0,a0,-180 # 800024a0 <_etext+0x110> + 8000055c: 311010ef jal ra,8000206c + 80000560: 00092583 lw a1,0(s2) + 80000564: 00100613 li a2,1 + 80000568: 02c58463 beq a1,a2,80000590 + 8000056c: 00002517 auipc a0,0x2 + 80000570: f5450513 addi a0,a0,-172 # 800024c0 <_etext+0x130> + 80000574: 00002797 auipc a5,0x2 + 80000578: 6607a623 sw zero,1644(a5) # 80002be0 + 8000057c: 2f1010ef jal ra,8000206c + 80000580: 00100593 li a1,1 + 80000584: 00002517 auipc a0,0x2 + 80000588: f1c50513 addi a0,a0,-228 # 800024a0 <_etext+0x110> + 8000058c: 2e1010ef jal ra,8000206c + 80000590: 0004c583 lbu a1,0(s1) + 80000594: 04100613 li a2,65 + 80000598: 02c58463 beq a1,a2,800005c0 + 8000059c: 00002517 auipc a0,0x2 + 800005a0: f4450513 addi a0,a0,-188 # 800024e0 <_etext+0x150> + 800005a4: 00002797 auipc a5,0x2 + 800005a8: 6207ae23 sw zero,1596(a5) # 80002be0 + 800005ac: 2c1010ef jal ra,8000206c + 800005b0: 04100593 li a1,65 + 800005b4: 00002517 auipc a0,0x2 + 800005b8: f4c50513 addi a0,a0,-180 # 80002500 <_etext+0x170> + 800005bc: 2b1010ef jal ra,8000206c + 800005c0: 000bc583 lbu a1,0(s7) + 800005c4: 04200613 li a2,66 + 800005c8: 02c58463 beq a1,a2,800005f0 + 800005cc: 00002517 auipc a0,0x2 + 800005d0: f5450513 addi a0,a0,-172 # 80002520 <_etext+0x190> + 800005d4: 00002797 auipc a5,0x2 + 800005d8: 6007a623 sw zero,1548(a5) # 80002be0 + 800005dc: 291010ef jal ra,8000206c + 800005e0: 04200593 li a1,66 + 800005e4: 00002517 auipc a0,0x2 + 800005e8: f1c50513 addi a0,a0,-228 # 80002500 <_etext+0x170> + 800005ec: 281010ef jal ra,8000206c + 800005f0: 00005597 auipc a1,0x5 + 800005f4: 5805a583 lw a1,1408(a1) # 80005b70 + 800005f8: 00700613 li a2,7 + 800005fc: 02c58463 beq a1,a2,80000624 + 80000600: 00002517 auipc a0,0x2 + 80000604: f4050513 addi a0,a0,-192 # 80002540 <_etext+0x1b0> + 80000608: 00002797 auipc a5,0x2 + 8000060c: 5c07ac23 sw zero,1496(a5) # 80002be0 + 80000610: 25d010ef jal ra,8000206c + 80000614: 00700593 li a1,7 + 80000618: 00002517 auipc a0,0x2 + 8000061c: e8850513 addi a0,a0,-376 # 800024a0 <_etext+0x110> + 80000620: 24d010ef jal ra,8000206c + 80000624: 00003797 auipc a5,0x3 + 80000628: df478793 addi a5,a5,-524 # 80003418 + 8000062c: 65c7a583 lw a1,1628(a5) + 80000630: 0007a637 lui a2,0x7a + 80000634: 12a60613 addi a2,a2,298 # 7a12a <_entry_offset+0x7a12a> + 80000638: 02c58263 beq a1,a2,8000065c + 8000063c: 00002517 auipc a0,0x2 + 80000640: f2450513 addi a0,a0,-220 # 80002560 <_etext+0x1d0> + 80000644: 00002797 auipc a5,0x2 + 80000648: 5807ae23 sw zero,1436(a5) # 80002be0 + 8000064c: 221010ef jal ra,8000206c + 80000650: 00002517 auipc a0,0x2 + 80000654: f3050513 addi a0,a0,-208 # 80002580 <_etext+0x1f0> + 80000658: 215010ef jal ra,8000206c + 8000065c: 000ab603 ld a2,0(s5) + 80000660: 00862583 lw a1,8(a2) + 80000664: 02058463 beqz a1,8000068c + 80000668: 00002517 auipc a0,0x2 + 8000066c: f4850513 addi a0,a0,-184 # 800025b0 <_etext+0x220> + 80000670: 00002797 auipc a5,0x2 + 80000674: 5607a823 sw zero,1392(a5) # 80002be0 + 80000678: 1f5010ef jal ra,8000206c + 8000067c: 00000593 li a1,0 + 80000680: 00002517 auipc a0,0x2 + 80000684: e2050513 addi a0,a0,-480 # 800024a0 <_etext+0x110> + 80000688: 1e5010ef jal ra,8000206c + 8000068c: 000ab583 ld a1,0(s5) + 80000690: 00200613 li a2,2 + 80000694: 00c5a583 lw a1,12(a1) + 80000698: 02c58463 beq a1,a2,800006c0 + 8000069c: 00002517 auipc a0,0x2 + 800006a0: f3c50513 addi a0,a0,-196 # 800025d8 <_etext+0x248> + 800006a4: 00002797 auipc a5,0x2 + 800006a8: 5207ae23 sw zero,1340(a5) # 80002be0 + 800006ac: 1c1010ef jal ra,8000206c + 800006b0: 00200593 li a1,2 + 800006b4: 00002517 auipc a0,0x2 + 800006b8: dec50513 addi a0,a0,-532 # 800024a0 <_etext+0x110> + 800006bc: 1b1010ef jal ra,8000206c + 800006c0: 000ab583 ld a1,0(s5) + 800006c4: 01100613 li a2,17 + 800006c8: 0105a583 lw a1,16(a1) + 800006cc: 02c58463 beq a1,a2,800006f4 + 800006d0: 00002517 auipc a0,0x2 + 800006d4: f3050513 addi a0,a0,-208 # 80002600 <_etext+0x270> + 800006d8: 00002797 auipc a5,0x2 + 800006dc: 5007a423 sw zero,1288(a5) # 80002be0 + 800006e0: 18d010ef jal ra,8000206c + 800006e4: 01100593 li a1,17 + 800006e8: 00002517 auipc a0,0x2 + 800006ec: db850513 addi a0,a0,-584 # 800024a0 <_etext+0x110> + 800006f0: 17d010ef jal ra,8000206c + 800006f4: 000ab503 ld a0,0(s5) + 800006f8: 00002597 auipc a1,0x2 + 800006fc: ca858593 addi a1,a1,-856 # 800023a0 <_etext+0x10> + 80000700: 01450513 addi a0,a0,20 + 80000704: 08d000ef jal ra,80000f90 + 80000708: 02050663 beqz a0,80000734 + 8000070c: 000ab583 ld a1,0(s5) + 80000710: 00002517 auipc a0,0x2 + 80000714: f1850513 addi a0,a0,-232 # 80002628 <_etext+0x298> + 80000718: 00002797 auipc a5,0x2 + 8000071c: 4c07a423 sw zero,1224(a5) # 80002be0 + 80000720: 01458593 addi a1,a1,20 + 80000724: 149010ef jal ra,8000206c + 80000728: 00002517 auipc a0,0x2 + 8000072c: f2850513 addi a0,a0,-216 # 80002650 <_etext+0x2c0> + 80000730: 13d010ef jal ra,8000206c + 80000734: 00005797 auipc a5,0x5 + 80000738: 3fc78793 addi a5,a5,1020 # 80005b30 + 8000073c: 0007b603 ld a2,0(a5) + 80000740: 00862583 lw a1,8(a2) + 80000744: 02058463 beqz a1,8000076c + 80000748: 00002517 auipc a0,0x2 + 8000074c: f4050513 addi a0,a0,-192 # 80002688 <_etext+0x2f8> + 80000750: 00002797 auipc a5,0x2 + 80000754: 4807a823 sw zero,1168(a5) # 80002be0 + 80000758: 115010ef jal ra,8000206c + 8000075c: 00000593 li a1,0 + 80000760: 00002517 auipc a0,0x2 + 80000764: d4050513 addi a0,a0,-704 # 800024a0 <_etext+0x110> + 80000768: 105010ef jal ra,8000206c + 8000076c: 00005797 auipc a5,0x5 + 80000770: 3c478793 addi a5,a5,964 # 80005b30 + 80000774: 0007b583 ld a1,0(a5) + 80000778: 00100613 li a2,1 + 8000077c: 00c5a583 lw a1,12(a1) + 80000780: 02c58463 beq a1,a2,800007a8 + 80000784: 00002517 auipc a0,0x2 + 80000788: f2c50513 addi a0,a0,-212 # 800026b0 <_etext+0x320> + 8000078c: 00002797 auipc a5,0x2 + 80000790: 4407aa23 sw zero,1108(a5) # 80002be0 + 80000794: 0d9010ef jal ra,8000206c + 80000798: 00100593 li a1,1 + 8000079c: 00002517 auipc a0,0x2 + 800007a0: d0450513 addi a0,a0,-764 # 800024a0 <_etext+0x110> + 800007a4: 0c9010ef jal ra,8000206c + 800007a8: 00005797 auipc a5,0x5 + 800007ac: 38878793 addi a5,a5,904 # 80005b30 + 800007b0: 0007b583 ld a1,0(a5) + 800007b4: 01200613 li a2,18 + 800007b8: 0105a583 lw a1,16(a1) + 800007bc: 02c58463 beq a1,a2,800007e4 + 800007c0: 00002517 auipc a0,0x2 + 800007c4: f1850513 addi a0,a0,-232 # 800026d8 <_etext+0x348> + 800007c8: 00002797 auipc a5,0x2 + 800007cc: 4007ac23 sw zero,1048(a5) # 80002be0 + 800007d0: 09d010ef jal ra,8000206c + 800007d4: 01200593 li a1,18 + 800007d8: 00002517 auipc a0,0x2 + 800007dc: cc850513 addi a0,a0,-824 # 800024a0 <_etext+0x110> + 800007e0: 08d010ef jal ra,8000206c + 800007e4: 00005497 auipc s1,0x5 + 800007e8: 34c48493 addi s1,s1,844 # 80005b30 + 800007ec: 0004b503 ld a0,0(s1) + 800007f0: 00002597 auipc a1,0x2 + 800007f4: bb058593 addi a1,a1,-1104 # 800023a0 <_etext+0x10> + 800007f8: 01450513 addi a0,a0,20 + 800007fc: 794000ef jal ra,80000f90 + 80000800: 02050663 beqz a0,8000082c + 80000804: 0004b583 ld a1,0(s1) + 80000808: 00002517 auipc a0,0x2 + 8000080c: ef850513 addi a0,a0,-264 # 80002700 <_etext+0x370> + 80000810: 00002797 auipc a5,0x2 + 80000814: 3c07a823 sw zero,976(a5) # 80002be0 + 80000818: 01458593 addi a1,a1,20 + 8000081c: 051010ef jal ra,8000206c + 80000820: 00002517 auipc a0,0x2 + 80000824: e3050513 addi a0,a0,-464 # 80002650 <_etext+0x2c0> + 80000828: 045010ef jal ra,8000206c + 8000082c: 00500613 li a2,5 + 80000830: 02cc8663 beq s9,a2,8000085c + 80000834: 000c8593 mv a1,s9 + 80000838: 00002517 auipc a0,0x2 + 8000083c: ef050513 addi a0,a0,-272 # 80002728 <_etext+0x398> + 80000840: 00002797 auipc a5,0x2 + 80000844: 3a07a023 sw zero,928(a5) # 80002be0 + 80000848: 025010ef jal ra,8000206c + 8000084c: 00500593 li a1,5 + 80000850: 00002517 auipc a0,0x2 + 80000854: c5050513 addi a0,a0,-944 # 800024a0 <_etext+0x110> + 80000858: 015010ef jal ra,8000206c + 8000085c: 00d00713 li a4,13 + 80000860: 02ed8663 beq s11,a4,8000088c + 80000864: 000d8593 mv a1,s11 + 80000868: 00002517 auipc a0,0x2 + 8000086c: ee050513 addi a0,a0,-288 # 80002748 <_etext+0x3b8> + 80000870: 00002797 auipc a5,0x2 + 80000874: 3607a823 sw zero,880(a5) # 80002be0 + 80000878: 7f4010ef jal ra,8000206c + 8000087c: 00d00593 li a1,13 + 80000880: 00002517 auipc a0,0x2 + 80000884: c2050513 addi a0,a0,-992 # 800024a0 <_etext+0x110> + 80000888: 7e4010ef jal ra,8000206c + 8000088c: 020d1663 bnez s10,800008b8 + 80000890: 000d0593 mv a1,s10 + 80000894: 00002517 auipc a0,0x2 + 80000898: ed450513 addi a0,a0,-300 # 80002768 <_etext+0x3d8> + 8000089c: 00002797 auipc a5,0x2 + 800008a0: 3407a223 sw zero,836(a5) # 80002be0 + 800008a4: 7c8010ef jal ra,8000206c + 800008a8: 00100593 li a1,1 + 800008ac: 00002517 auipc a0,0x2 + 800008b0: bf450513 addi a0,a0,-1036 # 800024a0 <_etext+0x110> + 800008b4: 7b8010ef jal ra,8000206c + 800008b8: 00002597 auipc a1,0x2 + 800008bc: b0858593 addi a1,a1,-1272 # 800023c0 <_etext+0x30> + 800008c0: 01010513 addi a0,sp,16 + 800008c4: 6cc000ef jal ra,80000f90 + 800008c8: 02050463 beqz a0,800008f0 + 800008cc: 01010593 addi a1,sp,16 + 800008d0: 00002517 auipc a0,0x2 + 800008d4: eb850513 addi a0,a0,-328 # 80002788 <_etext+0x3f8> + 800008d8: 00002797 auipc a5,0x2 + 800008dc: 3007a423 sw zero,776(a5) # 80002be0 + 800008e0: 78c010ef jal ra,8000206c + 800008e4: 00002517 auipc a0,0x2 + 800008e8: ec450513 addi a0,a0,-316 # 800027a8 <_etext+0x418> + 800008ec: 780010ef jal ra,8000206c + 800008f0: 00002597 auipc a1,0x2 + 800008f4: b5058593 addi a1,a1,-1200 # 80002440 <_etext+0xb0> + 800008f8: 03010513 addi a0,sp,48 + 800008fc: 694000ef jal ra,80000f90 + 80000900: 02050463 beqz a0,80000928 + 80000904: 03010593 addi a1,sp,48 + 80000908: 00002517 auipc a0,0x2 + 8000090c: ed850513 addi a0,a0,-296 # 800027e0 <_etext+0x450> + 80000910: 00002797 auipc a5,0x2 + 80000914: 2c07a823 sw zero,720(a5) # 80002be0 + 80000918: 754010ef jal ra,8000206c + 8000091c: 00002517 auipc a0,0x2 + 80000920: ee450513 addi a0,a0,-284 # 80002800 <_etext+0x470> + 80000924: 748010ef jal ra,8000206c + 80000928: 00042583 lw a1,0(s0) + 8000092c: 00002517 auipc a0,0x2 + 80000930: f0c50513 addi a0,a0,-244 # 80002838 <_etext+0x4a8> + 80000934: 00002497 auipc s1,0x2 + 80000938: a5c48493 addi s1,s1,-1444 # 80002390 <_etext> + 8000093c: 730010ef jal ra,8000206c + 80000940: 00002517 auipc a0,0x2 + 80000944: f1050513 addi a0,a0,-240 # 80002850 <_etext+0x4c0> + 80000948: 724010ef jal ra,8000206c + 8000094c: 00002797 auipc a5,0x2 + 80000950: 2947a783 lw a5,660(a5) # 80002be0 + 80000954: 00079663 bnez a5,80000960 + 80000958: 00002497 auipc s1,0x2 + 8000095c: a4048493 addi s1,s1,-1472 # 80002398 <_etext+0x8> + 80000960: 00042583 lw a1,0(s0) + 80000964: 000d7537 lui a0,0xd7 + 80000968: 10450513 addi a0,a0,260 # d7104 <_entry_offset+0xd7104> + 8000096c: 114000ef jal ra,80000a80 <__divdi3> + 80000970: 0005061b sext.w a2,a0 + 80000974: 00048593 mv a1,s1 + 80000978: 00002517 auipc a0,0x2 + 8000097c: f1050513 addi a0,a0,-240 # 80002888 <_etext+0x4f8> + 80000980: 6ec010ef jal ra,8000206c + 80000984: 00002517 auipc a0,0x2 + 80000988: f2450513 addi a0,a0,-220 # 800028a8 <_etext+0x518> + 8000098c: 6e0010ef jal ra,8000206c + 80000990: 0b813083 ld ra,184(sp) + 80000994: 0b013403 ld s0,176(sp) + 80000998: 0a813483 ld s1,168(sp) + 8000099c: 0a013903 ld s2,160(sp) + 800009a0: 09813983 ld s3,152(sp) + 800009a4: 09013a03 ld s4,144(sp) + 800009a8: 08813a83 ld s5,136(sp) + 800009ac: 08013b03 ld s6,128(sp) + 800009b0: 07813b83 ld s7,120(sp) + 800009b4: 07013c03 ld s8,112(sp) + 800009b8: 06813c83 ld s9,104(sp) + 800009bc: 06013d03 ld s10,96(sp) + 800009c0: 05813d83 ld s11,88(sp) + 800009c4: 00000513 li a0,0 + 800009c8: 0c010113 addi sp,sp,192 + 800009cc: 00008067 ret + 800009d0: 01948023 sb s9,0(s1) + 800009d4: 00100713 li a4,1 + 800009d8: a6ed1ee3 bne s10,a4,80000454 + 800009dc: a95ff06f j 80000470 + 800009e0: 00d00d93 li s11,13 + 800009e4: 00100c93 li s9,1 + 800009e8: ad9ff06f j 800004c0 + +00000000800009ec : + 800009ec: 00050513 mv a0,a0 + 800009f0: 0000007b 0x7b + 800009f4: 00008067 ret + +00000000800009f8 : + 800009f8: 00050513 mv a0,a0 + 800009fc: 0000006b 0x6b + 80000a00: 0000006f j 80000a00 + +0000000080000a04 <_assert>: + 80000a04: 00051a63 bnez a0,80000a18 <_assert+0x14> + 80000a08: 00100793 li a5,1 + 80000a0c: 00078513 mv a0,a5 + 80000a10: 0000006b 0x6b + 80000a14: 0000006f j 80000a14 <_assert+0x10> + 80000a18: 00008067 ret + +0000000080000a1c <_trm_init>: + 80000a1c: ff010113 addi sp,sp,-16 + 80000a20: 00113423 sd ra,8(sp) + 80000a24: 594000ef jal ra,80000fb8 + 80000a28: 00002517 auipc a0,0x2 + 80000a2c: 1a050513 addi a0,a0,416 # 80002bc8 + 80000a30: 831ff0ef jal ra,80000260
+ 80000a34: 00050513 mv a0,a0 + 80000a38: 0000006b 0x6b + 80000a3c: 0000006f j 80000a3c <_trm_init+0x20> + +0000000080000a40 <__udivsi3>: + 80000a40: 02051513 slli a0,a0,0x20 + 80000a44: 02059593 slli a1,a1,0x20 + 80000a48: 00008293 mv t0,ra + 80000a4c: 03c000ef jal ra,80000a88 <__udivdi3> + 80000a50: 0005051b sext.w a0,a0 + 80000a54: 00028067 jr t0 + +0000000080000a58 <__umodsi3>: + 80000a58: 02051513 slli a0,a0,0x20 + 80000a5c: 02059593 slli a1,a1,0x20 + 80000a60: 02055513 srli a0,a0,0x20 + 80000a64: 0205d593 srli a1,a1,0x20 + 80000a68: 00008293 mv t0,ra + 80000a6c: 01c000ef jal ra,80000a88 <__udivdi3> + 80000a70: 0005851b sext.w a0,a1 + 80000a74: 00028067 jr t0 + +0000000080000a78 <__divsi3>: + 80000a78: fff00293 li t0,-1 + 80000a7c: 0a558c63 beq a1,t0,80000b34 <__moddi3+0x30> + +0000000080000a80 <__divdi3>: + 80000a80: 06054063 bltz a0,80000ae0 <__umoddi3+0x10> + 80000a84: 0605c663 bltz a1,80000af0 <__umoddi3+0x20> + +0000000080000a88 <__udivdi3>: + 80000a88: 00058613 mv a2,a1 + 80000a8c: 00050593 mv a1,a0 + 80000a90: fff00513 li a0,-1 + 80000a94: 02060c63 beqz a2,80000acc <__udivdi3+0x44> + 80000a98: 00100693 li a3,1 + 80000a9c: 00b67a63 bgeu a2,a1,80000ab0 <__udivdi3+0x28> + 80000aa0: 00c05863 blez a2,80000ab0 <__udivdi3+0x28> + 80000aa4: 00161613 slli a2,a2,0x1 + 80000aa8: 00169693 slli a3,a3,0x1 + 80000aac: feb66ae3 bltu a2,a1,80000aa0 <__udivdi3+0x18> + 80000ab0: 00000513 li a0,0 + 80000ab4: 00c5e663 bltu a1,a2,80000ac0 <__udivdi3+0x38> + 80000ab8: 40c585b3 sub a1,a1,a2 + 80000abc: 00d56533 or a0,a0,a3 + 80000ac0: 0016d693 srli a3,a3,0x1 + 80000ac4: 00165613 srli a2,a2,0x1 + 80000ac8: fe0696e3 bnez a3,80000ab4 <__udivdi3+0x2c> + 80000acc: 00008067 ret + +0000000080000ad0 <__umoddi3>: + 80000ad0: 00008293 mv t0,ra + 80000ad4: fb5ff0ef jal ra,80000a88 <__udivdi3> + 80000ad8: 00058513 mv a0,a1 + 80000adc: 00028067 jr t0 + 80000ae0: 40a00533 neg a0,a0 + 80000ae4: 00b04863 bgtz a1,80000af4 <__umoddi3+0x24> + 80000ae8: 40b005b3 neg a1,a1 + 80000aec: f9dff06f j 80000a88 <__udivdi3> + 80000af0: 40b005b3 neg a1,a1 + 80000af4: 00008293 mv t0,ra + 80000af8: f91ff0ef jal ra,80000a88 <__udivdi3> + 80000afc: 40a00533 neg a0,a0 + 80000b00: 00028067 jr t0 + +0000000080000b04 <__moddi3>: + 80000b04: 00008293 mv t0,ra + 80000b08: 0005ca63 bltz a1,80000b1c <__moddi3+0x18> + 80000b0c: 00054c63 bltz a0,80000b24 <__moddi3+0x20> + 80000b10: f79ff0ef jal ra,80000a88 <__udivdi3> + 80000b14: 00058513 mv a0,a1 + 80000b18: 00028067 jr t0 + 80000b1c: 40b005b3 neg a1,a1 + 80000b20: fe0558e3 bgez a0,80000b10 <__moddi3+0xc> + 80000b24: 40a00533 neg a0,a0 + 80000b28: f61ff0ef jal ra,80000a88 <__udivdi3> + 80000b2c: 40b00533 neg a0,a1 + 80000b30: 00028067 jr t0 + 80000b34: 01f29293 slli t0,t0,0x1f + 80000b38: f45514e3 bne a0,t0,80000a80 <__divdi3> + 80000b3c: 00008067 ret + +0000000080000b40 <__am_timer_config>: + 80000b40: 00100793 li a5,1 + 80000b44: 00f50023 sb a5,0(a0) + 80000b48: 00f500a3 sb a5,1(a0) + 80000b4c: 00008067 ret + +0000000080000b50 <__am_input_config>: + 80000b50: 00100793 li a5,1 + 80000b54: 00f50023 sb a5,0(a0) + 80000b58: 00008067 ret + +0000000080000b5c : + 80000b5c: ff010113 addi sp,sp,-16 + 80000b60: 00813023 sd s0,0(sp) + 80000b64: 00113423 sd ra,8(sp) + 80000b68: 00002417 auipc s0,0x2 + 80000b6c: d8040413 addi s0,s0,-640 # 800028e8 <_etext+0x558> + 80000b70: 04100513 li a0,65 + 80000b74: 00140413 addi s0,s0,1 + 80000b78: e75ff0ef jal ra,800009ec + 80000b7c: 00044503 lbu a0,0(s0) + 80000b80: fe051ae3 bnez a0,80000b74 + 80000b84: 00002417 auipc s0,0x2 + 80000b88: d7440413 addi s0,s0,-652 # 800028f8 <_etext+0x568> + 80000b8c: 06100513 li a0,97 + 80000b90: 00140413 addi s0,s0,1 + 80000b94: e59ff0ef jal ra,800009ec + 80000b98: 00044503 lbu a0,0(s0) + 80000b9c: fe051ae3 bnez a0,80000b90 + 80000ba0: 00002417 auipc s0,0x2 + 80000ba4: d7840413 addi s0,s0,-648 # 80002918 <_etext+0x588> + 80000ba8: 02000513 li a0,32 + 80000bac: 00140413 addi s0,s0,1 + 80000bb0: e3dff0ef jal ra,800009ec + 80000bb4: 00044503 lbu a0,0(s0) + 80000bb8: fe051ae3 bnez a0,80000bac + 80000bbc: 00100513 li a0,1 + 80000bc0: e39ff0ef jal ra,800009f8 + +0000000080000bc4 : + 80000bc4: ff010113 addi sp,sp,-16 + 80000bc8: 00113423 sd ra,8(sp) + 80000bcc: 00002797 auipc a5,0x2 + 80000bd0: 02c78793 addi a5,a5,44 # 80002bf8 + 80000bd4: 00002697 auipc a3,0x2 + 80000bd8: 42468693 addi a3,a3,1060 # 80002ff8 + 80000bdc: 00000617 auipc a2,0x0 + 80000be0: f8060613 addi a2,a2,-128 # 80000b5c + 80000be4: 00c0006f j 80000bf0 + 80000be8: 00878793 addi a5,a5,8 + 80000bec: 00d78c63 beq a5,a3,80000c04 + 80000bf0: 0007b703 ld a4,0(a5) + 80000bf4: fe071ae3 bnez a4,80000be8 + 80000bf8: 00c7b023 sd a2,0(a5) + 80000bfc: 00878793 addi a5,a5,8 + 80000c00: fed798e3 bne a5,a3,80000bf0 + 80000c04: 030000ef jal ra,80000c34 <__am_timer_init> + 80000c08: 00813083 ld ra,8(sp) + 80000c0c: 00100513 li a0,1 + 80000c10: 01010113 addi sp,sp,16 + 80000c14: 00008067 ret + +0000000080000c18 : + 80000c18: 00351793 slli a5,a0,0x3 + 80000c1c: 00002517 auipc a0,0x2 + 80000c20: fdc50513 addi a0,a0,-36 # 80002bf8 + 80000c24: 00f50533 add a0,a0,a5 + 80000c28: 00053303 ld t1,0(a0) + 80000c2c: 00058513 mv a0,a1 + 80000c30: 00030067 jr t1 + +0000000080000c34 <__am_timer_init>: + 80000c34: 00008067 ret + +0000000080000c38 <__am_timer_uptime>: + 80000c38: fd010113 addi sp,sp,-48 + 80000c3c: 00913c23 sd s1,24(sp) + 80000c40: 02113423 sd ra,40(sp) + 80000c44: 02813023 sd s0,32(sp) + 80000c48: 01213823 sd s2,16(sp) + 80000c4c: 01313423 sd s3,8(sp) + 80000c50: 00050493 mv s1,a0 + 80000c54: b0002973 csrr s2,mcycle + 80000c58: 000f49b7 lui s3,0xf4 + 80000c5c: 24098593 addi a1,s3,576 # f4240 <_entry_offset+0xf4240> + 80000c60: 00090513 mv a0,s2 + 80000c64: e25ff0ef jal ra,80000a88 <__udivdi3> + 80000c68: 00551413 slli s0,a0,0x5 + 80000c6c: 40a407b3 sub a5,s0,a0 + 80000c70: 00679413 slli s0,a5,0x6 + 80000c74: 40f40433 sub s0,s0,a5 + 80000c78: 00341413 slli s0,s0,0x3 + 80000c7c: 00a40433 add s0,s0,a0 + 80000c80: 24098593 addi a1,s3,576 + 80000c84: 00090513 mv a0,s2 + 80000c88: e49ff0ef jal ra,80000ad0 <__umoddi3> + 80000c8c: 00641413 slli s0,s0,0x6 + 80000c90: 00a40433 add s0,s0,a0 + 80000c94: 0084b023 sd s0,0(s1) + 80000c98: 02813083 ld ra,40(sp) + 80000c9c: 02013403 ld s0,32(sp) + 80000ca0: 01813483 ld s1,24(sp) + 80000ca4: 01013903 ld s2,16(sp) + 80000ca8: 00813983 ld s3,8(sp) + 80000cac: 03010113 addi sp,sp,48 + 80000cb0: 00008067 ret + +0000000080000cb4 : + 80000cb4: fc010113 addi sp,sp,-64 + 80000cb8: 01313c23 sd s3,24(sp) + 80000cbc: 00058993 mv s3,a1 + 80000cc0: 00050793 mv a5,a0 + 80000cc4: 03800613 li a2,56 + 80000cc8: 00000593 li a1,0 + 80000ccc: 00098513 mv a0,s3 + 80000cd0: 02813823 sd s0,48(sp) + 80000cd4: 03213023 sd s2,32(sp) + 80000cd8: 0007b403 ld s0,0(a5) + 80000cdc: 01413823 sd s4,16(sp) + 80000ce0: 02113c23 sd ra,56(sp) + 80000ce4: 02913423 sd s1,40(sp) + 80000ce8: 01513423 sd s5,8(sp) + 80000cec: 3d4010ef jal ra,800020c0 + 80000cf0: 7b200793 li a5,1970 + 80000cf4: 00f9aa23 sw a5,20(s3) + 80000cf8: 7b200913 li s2,1970 + 80000cfc: 00002a17 auipc s4,0x2 + 80000d00: ed4a0a13 addi s4,s4,-300 # 80002bd0 + 80000d04: 0100006f j 80000d14 + 80000d08: 40e40433 sub s0,s0,a4 + 80000d0c: 00d9aa23 sw a3,20(s3) + 80000d10: 00068913 mv s2,a3 + 80000d14: 0009049b sext.w s1,s2 + 80000d18: 06400593 li a1,100 + 80000d1c: 00048513 mv a0,s1 + 80000d20: de5ff0ef jal ra,80000b04 <__moddi3> + 80000d24: 00050793 mv a5,a0 + 80000d28: 0007879b sext.w a5,a5 + 80000d2c: 00048513 mv a0,s1 + 80000d30: 00397493 andi s1,s2,3 + 80000d34: 19000593 li a1,400 + 80000d38: 0014b493 seqz s1,s1 + 80000d3c: 00079863 bnez a5,80000d4c + 80000d40: dc5ff0ef jal ra,80000b04 <__moddi3> + 80000d44: 0005049b sext.w s1,a0 + 80000d48: 0014b493 seqz s1,s1 + 80000d4c: 00249793 slli a5,s1,0x2 + 80000d50: 00fa07b3 add a5,s4,a5 + 80000d54: 0007e703 lwu a4,0(a5) + 80000d58: 0019069b addiw a3,s2,1 + 80000d5c: fae456e3 bge s0,a4,80000d08 + 80000d60: 000155b7 lui a1,0x15 + 80000d64: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80000d68: 00040513 mv a0,s0 + 80000d6c: d15ff0ef jal ra,80000a80 <__divdi3> + 80000d70: 00149793 slli a5,s1,0x1 + 80000d74: 009784b3 add s1,a5,s1 + 80000d78: 00449793 slli a5,s1,0x4 + 80000d7c: 00002497 auipc s1,0x2 + 80000d80: bdc48493 addi s1,s1,-1060 # 80002958 + 80000d84: 00f484b3 add s1,s1,a5 + 80000d88: 0004e783 lwu a5,0(s1) + 80000d8c: 0005051b sext.w a0,a0 + 80000d90: 00a9ae23 sw a0,28(s3) + 80000d94: 14f44463 blt s0,a5,80000edc + 80000d98: 00100713 li a4,1 + 80000d9c: 40f40433 sub s0,s0,a5 + 80000da0: 0044e783 lwu a5,4(s1) + 80000da4: 00070a1b sext.w s4,a4 + 80000da8: 00448493 addi s1,s1,4 + 80000dac: 00170713 addi a4,a4,1 + 80000db0: fef456e3 bge s0,a5,80000d9c + 80000db4: 000155b7 lui a1,0x15 + 80000db8: 0149a823 sw s4,16(s3) + 80000dbc: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80000dc0: 00040513 mv a0,s0 + 80000dc4: cbdff0ef jal ra,80000a80 <__divdi3> + 80000dc8: 0005051b sext.w a0,a0 + 80000dcc: 0015079b addiw a5,a0,1 + 80000dd0: 000155b7 lui a1,0x15 + 80000dd4: 00f9a623 sw a5,12(s3) + 80000dd8: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80000ddc: 00040513 mv a0,s0 + 80000de0: 00001ab7 lui s5,0x1 + 80000de4: 0007841b sext.w s0,a5 + 80000de8: d1dff0ef jal ra,80000b04 <__moddi3> + 80000dec: e10a8593 addi a1,s5,-496 # e10 <_entry_offset+0xe10> + 80000df0: 00050493 mv s1,a0 + 80000df4: c8dff0ef jal ra,80000a80 <__divdi3> + 80000df8: e10a8593 addi a1,s5,-496 + 80000dfc: 00a9a423 sw a0,8(s3) + 80000e00: 00048513 mv a0,s1 + 80000e04: d01ff0ef jal ra,80000b04 <__moddi3> + 80000e08: 03c00593 li a1,60 + 80000e0c: 00050493 mv s1,a0 + 80000e10: c71ff0ef jal ra,80000a80 <__divdi3> + 80000e14: 00a9a223 sw a0,4(s3) + 80000e18: 03c00593 li a1,60 + 80000e1c: 00048513 mv a0,s1 + 80000e20: ce5ff0ef jal ra,80000b04 <__moddi3> + 80000e24: 001a0a1b addiw s4,s4,1 + 80000e28: 0ffa7793 andi a5,s4,255 + 80000e2c: 0037b793 sltiu a5,a5,3 + 80000e30: 40f9093b subw s2,s2,a5 + 80000e34: 03091913 slli s2,s2,0x30 + 80000e38: 03095913 srli s2,s2,0x30 + 80000e3c: 00a9a023 sw a0,0(s3) + 80000e40: 06400593 li a1,100 + 80000e44: 00090513 mv a0,s2 + 80000e48: c41ff0ef jal ra,80000a88 <__udivdi3> + 80000e4c: 0029549b srliw s1,s2,0x2 + 80000e50: 0105179b slliw a5,a0,0x10 + 80000e54: 0107d79b srliw a5,a5,0x10 + 80000e58: 012484bb addw s1,s1,s2 + 80000e5c: 19000593 li a1,400 + 80000e60: 00090513 mv a0,s2 + 80000e64: 0ffa7a13 andi s4,s4,255 + 80000e68: 40f484bb subw s1,s1,a5 + 80000e6c: fffa0a1b addiw s4,s4,-1 + 80000e70: c19ff0ef jal ra,80000a88 <__udivdi3> + 80000e74: 00002797 auipc a5,0x2 + 80000e78: b4478793 addi a5,a5,-1212 # 800029b8 + 80000e7c: 002a1a13 slli s4,s4,0x2 + 80000e80: 01478a33 add s4,a5,s4 + 80000e84: 000a2783 lw a5,0(s4) + 80000e88: 0105151b slliw a0,a0,0x10 + 80000e8c: 0105551b srliw a0,a0,0x10 + 80000e90: 00a484bb addw s1,s1,a0 + 80000e94: 00f484bb addw s1,s1,a5 + 80000e98: 0ff47513 andi a0,s0,255 + 80000e9c: 00a4853b addw a0,s1,a0 + 80000ea0: 00700593 li a1,7 + 80000ea4: c61ff0ef jal ra,80000b04 <__moddi3> + 80000ea8: 03813083 ld ra,56(sp) + 80000eac: 03013403 ld s0,48(sp) + 80000eb0: 0ff57513 andi a0,a0,255 + 80000eb4: 00a9ac23 sw a0,24(s3) + 80000eb8: 0209a023 sw zero,32(s3) + 80000ebc: 02813483 ld s1,40(sp) + 80000ec0: 02013903 ld s2,32(sp) + 80000ec4: 01013a03 ld s4,16(sp) + 80000ec8: 00813a83 ld s5,8(sp) + 80000ecc: 00098513 mv a0,s3 + 80000ed0: 01813983 ld s3,24(sp) + 80000ed4: 04010113 addi sp,sp,64 + 80000ed8: 00008067 ret + 80000edc: 00000a13 li s4,0 + 80000ee0: eedff06f j 80000dcc + +0000000080000ee4 <__am_timer_rtc>: + 80000ee4: f9010113 addi sp,sp,-112 + 80000ee8: 06813023 sd s0,96(sp) + 80000eec: 06113423 sd ra,104(sp) + 80000ef0: 04913c23 sd s1,88(sp) + 80000ef4: 05213823 sd s2,80(sp) + 80000ef8: 00050413 mv s0,a0 + 80000efc: b00024f3 csrr s1,mcycle + 80000f00: 000f4937 lui s2,0xf4 + 80000f04: 24090593 addi a1,s2,576 # f4240 <_entry_offset+0xf4240> + 80000f08: 00048513 mv a0,s1 + 80000f0c: b7dff0ef jal ra,80000a88 <__udivdi3> + 80000f10: 00050793 mv a5,a0 + 80000f14: 24090593 addi a1,s2,576 + 80000f18: 00048513 mv a0,s1 + 80000f1c: 00f13423 sd a5,8(sp) + 80000f20: bb1ff0ef jal ra,80000ad0 <__umoddi3> + 80000f24: 00050793 mv a5,a0 + 80000f28: 01810593 addi a1,sp,24 + 80000f2c: 00810513 addi a0,sp,8 + 80000f30: 00f13823 sd a5,16(sp) + 80000f34: d81ff0ef jal ra,80000cb4 + 80000f38: 01812703 lw a4,24(sp) + 80000f3c: 02812783 lw a5,40(sp) + 80000f40: 06813083 ld ra,104(sp) + 80000f44: 00e42a23 sw a4,20(s0) + 80000f48: 01c12703 lw a4,28(sp) + 80000f4c: 0017879b addiw a5,a5,1 + 80000f50: 00f42223 sw a5,4(s0) + 80000f54: 00e42823 sw a4,16(s0) + 80000f58: 02012703 lw a4,32(sp) + 80000f5c: 02c12783 lw a5,44(sp) + 80000f60: 05813483 ld s1,88(sp) + 80000f64: 00e42623 sw a4,12(s0) + 80000f68: 02412703 lw a4,36(sp) + 80000f6c: 00f42023 sw a5,0(s0) + 80000f70: 05013903 ld s2,80(sp) + 80000f74: 00e42423 sw a4,8(s0) + 80000f78: 06013403 ld s0,96(sp) + 80000f7c: 07010113 addi sp,sp,112 + 80000f80: 00008067 ret + +0000000080000f84 <__am_input_keybrd>: + 80000f84: 00050023 sb zero,0(a0) + 80000f88: 00052223 sw zero,4(a0) + 80000f8c: 00008067 ret + +0000000080000f90 : + 80000f90: 00054783 lbu a5,0(a0) + 80000f94: 00158593 addi a1,a1,1 + 80000f98: 00150513 addi a0,a0,1 + 80000f9c: fff5c703 lbu a4,-1(a1) + 80000fa0: 00078863 beqz a5,80000fb0 + 80000fa4: fee786e3 beq a5,a4,80000f90 + 80000fa8: 40e7853b subw a0,a5,a4 + 80000fac: 00008067 ret + 80000fb0: 40e0053b negw a0,a4 + 80000fb4: 00008067 ret + +0000000080000fb8 : + 80000fb8: 00002797 auipc a5,0x2 + 80000fbc: c3078793 addi a5,a5,-976 # 80002be8 + 80000fc0: 0007b503 ld a0,0(a5) + 80000fc4: 0087b583 ld a1,8(a5) + 80000fc8: ff010113 addi sp,sp,-16 + 80000fcc: 00000693 li a3,0 + 80000fd0: 00000613 li a2,0 + 80000fd4: 40a585b3 sub a1,a1,a0 + 80000fd8: 00113423 sd ra,8(sp) + 80000fdc: 1e0010ef jal ra,800021bc + 80000fe0: 00813083 ld ra,8(sp) + 80000fe4: 00002797 auipc a5,0x2 + 80000fe8: 40a7ba23 sd a0,1044(a5) # 800033f8 + 80000fec: 01010113 addi sp,sp,16 + 80000ff0: 00008067 ret + +0000000080000ff4 <_out_null>: + 80000ff4: 00008067 ret + +0000000080000ff8 <_ntoa_format>: + 80000ff8: fa010113 addi sp,sp,-96 + 80000ffc: 07012303 lw t1,112(sp) + 80001000: 03313c23 sd s3,56(sp) + 80001004: 03413823 sd s4,48(sp) + 80001008: 03513423 sd s5,40(sp) + 8000100c: 03613023 sd s6,32(sp) + 80001010: 01713c23 sd s7,24(sp) + 80001014: 01813823 sd s8,16(sp) + 80001018: 01913423 sd s9,8(sp) + 8000101c: 00237e13 andi t3,t1,2 + 80001020: 01037e93 andi t4,t1,16 + 80001024: 04113c23 sd ra,88(sp) + 80001028: 04813823 sd s0,80(sp) + 8000102c: 04913423 sd s1,72(sp) + 80001030: 05213023 sd s2,64(sp) + 80001034: 06012f03 lw t5,96(sp) + 80001038: 06812c03 lw s8,104(sp) + 8000103c: 00050a13 mv s4,a0 + 80001040: 00058a93 mv s5,a1 + 80001044: 00060b93 mv s7,a2 + 80001048: 00068b13 mv s6,a3 + 8000104c: 00070993 mv s3,a4 + 80001050: 000e0c9b sext.w s9,t3 + 80001054: 000e8e9b sext.w t4,t4 + 80001058: 060e1c63 bnez t3,800010d0 <_ntoa_format+0xd8> + 8000105c: 020f1693 slli a3,t5,0x20 + 80001060: 00137513 andi a0,t1,1 + 80001064: 0206d693 srli a3,a3,0x20 + 80001068: 180c1e63 bnez s8,80001204 <_ntoa_format+0x20c> + 8000106c: 02d7f663 bgeu a5,a3,80001098 <_ntoa_format+0xa0> + 80001070: 02000713 li a4,32 + 80001074: 36e78e63 beq a5,a4,800013f0 <_ntoa_format+0x3f8> + 80001078: 03000613 li a2,48 + 8000107c: 02000593 li a1,32 + 80001080: 0080006f j 80001088 <_ntoa_format+0x90> + 80001084: 00b78a63 beq a5,a1,80001098 <_ntoa_format+0xa0> + 80001088: 00178793 addi a5,a5,1 + 8000108c: 00f98733 add a4,s3,a5 + 80001090: fec70fa3 sb a2,-1(a4) + 80001094: fed7e8e3 bltu a5,a3,80001084 <_ntoa_format+0x8c> + 80001098: 02050c63 beqz a0,800010d0 <_ntoa_format+0xd8> + 8000109c: 020c1913 slli s2,s8,0x20 + 800010a0: 02095913 srli s2,s2,0x20 + 800010a4: 0327f663 bgeu a5,s2,800010d0 <_ntoa_format+0xd8> + 800010a8: 02000713 li a4,32 + 800010ac: 36e78863 beq a5,a4,8000141c <_ntoa_format+0x424> + 800010b0: 03000693 li a3,48 + 800010b4: 02000613 li a2,32 + 800010b8: 0080006f j 800010c0 <_ntoa_format+0xc8> + 800010bc: 16c78463 beq a5,a2,80001224 <_ntoa_format+0x22c> + 800010c0: 00178793 addi a5,a5,1 + 800010c4: 00f98733 add a4,s3,a5 + 800010c8: fed70fa3 sb a3,-1(a4) + 800010cc: ff2798e3 bne a5,s2,800010bc <_ntoa_format+0xc4> + 800010d0: 1a0e8663 beqz t4,8000127c <_ntoa_format+0x284> + 800010d4: 40037713 andi a4,t1,1024 + 800010d8: 20071463 bnez a4,800012e0 <_ntoa_format+0x2e8> + 800010dc: 1e079663 bnez a5,800012c8 <_ntoa_format+0x2d0> + 800010e0: 01000793 li a5,16 + 800010e4: 2af88863 beq a7,a5,80001394 <_ntoa_format+0x39c> + 800010e8: 00200793 li a5,2 + 800010ec: 2ef88a63 beq a7,a5,800013e0 <_ntoa_format+0x3e8> + 800010f0: 03000793 li a5,48 + 800010f4: 00f98023 sb a5,0(s3) + 800010f8: 00100793 li a5,1 + 800010fc: 1a080463 beqz a6,800012a4 <_ntoa_format+0x2ac> + 80001100: 00f98733 add a4,s3,a5 + 80001104: 00178413 addi s0,a5,1 + 80001108: 02d00793 li a5,45 + 8000110c: 00f70023 sb a5,0(a4) + 80001110: 00337313 andi t1,t1,3 + 80001114: 20031263 bnez t1,80001318 <_ntoa_format+0x320> + 80001118: 020c1913 slli s2,s8,0x20 + 8000111c: 02095913 srli s2,s2,0x20 + 80001120: 1f247c63 bgeu s0,s2,80001318 <_ntoa_format+0x320> + 80001124: 40890933 sub s2,s2,s0 + 80001128: 01790933 add s2,s2,s7 + 8000112c: 000b8493 mv s1,s7 + 80001130: 00048613 mv a2,s1 + 80001134: 000b0693 mv a3,s6 + 80001138: 00148493 addi s1,s1,1 + 8000113c: 000a8593 mv a1,s5 + 80001140: 02000513 li a0,32 + 80001144: 000a00e7 jalr s4 + 80001148: ff2494e3 bne s1,s2,80001130 <_ntoa_format+0x138> + 8000114c: 02040663 beqz s0,80001178 <_ntoa_format+0x180> + 80001150: 01240933 add s2,s0,s2 + 80001154: 012984b3 add s1,s3,s2 + 80001158: 00898433 add s0,s3,s0 + 8000115c: fff44503 lbu a0,-1(s0) + 80001160: 40848633 sub a2,s1,s0 + 80001164: 000b0693 mv a3,s6 + 80001168: fff40413 addi s0,s0,-1 + 8000116c: 000a8593 mv a1,s5 + 80001170: 000a00e7 jalr s4 + 80001174: fe8994e3 bne s3,s0,8000115c <_ntoa_format+0x164> + 80001178: 040c8a63 beqz s9,800011cc <_ntoa_format+0x1d4> + 8000117c: 020c1c13 slli s8,s8,0x20 + 80001180: 41790433 sub s0,s2,s7 + 80001184: 020c5c13 srli s8,s8,0x20 + 80001188: 05847263 bgeu s0,s8,800011cc <_ntoa_format+0x1d4> + 8000118c: 01740633 add a2,s0,s7 + 80001190: 000b0693 mv a3,s6 + 80001194: 00140413 addi s0,s0,1 + 80001198: 000a8593 mv a1,s5 + 8000119c: 02000513 li a0,32 + 800011a0: 000a00e7 jalr s4 + 800011a4: ff8464e3 bltu s0,s8,8000118c <_ntoa_format+0x194> + 800011a8: 41790733 sub a4,s2,s7 + 800011ac: 00170713 addi a4,a4,1 + 800011b0: 00000793 li a5,0 + 800011b4: 00ec6863 bltu s8,a4,800011c4 <_ntoa_format+0x1cc> + 800011b8: fffb8793 addi a5,s7,-1 + 800011bc: 01878c33 add s8,a5,s8 + 800011c0: 412c07b3 sub a5,s8,s2 + 800011c4: 00190913 addi s2,s2,1 + 800011c8: 00f90933 add s2,s2,a5 + 800011cc: 05813083 ld ra,88(sp) + 800011d0: 05013403 ld s0,80(sp) + 800011d4: 04813483 ld s1,72(sp) + 800011d8: 03813983 ld s3,56(sp) + 800011dc: 03013a03 ld s4,48(sp) + 800011e0: 02813a83 ld s5,40(sp) + 800011e4: 02013b03 ld s6,32(sp) + 800011e8: 01813b83 ld s7,24(sp) + 800011ec: 01013c03 ld s8,16(sp) + 800011f0: 00813c83 ld s9,8(sp) + 800011f4: 00090513 mv a0,s2 + 800011f8: 04013903 ld s2,64(sp) + 800011fc: 06010113 addi sp,sp,96 + 80001200: 00008067 ret + 80001204: 12050863 beqz a0,80001334 <_ntoa_format+0x33c> + 80001208: 00081663 bnez a6,80001214 <_ntoa_format+0x21c> + 8000120c: 00c37713 andi a4,t1,12 + 80001210: 00070463 beqz a4,80001218 <_ntoa_format+0x220> + 80001214: fffc0c1b addiw s8,s8,-1 + 80001218: e8d7f2e3 bgeu a5,a3,8000109c <_ntoa_format+0xa4> + 8000121c: 02000713 li a4,32 + 80001220: e4e79ce3 bne a5,a4,80001078 <_ntoa_format+0x80> + 80001224: 0e0e8063 beqz t4,80001304 <_ntoa_format+0x30c> + 80001228: 40037793 andi a5,t1,1024 + 8000122c: 04079c63 bnez a5,80001284 <_ntoa_format+0x28c> + 80001230: 02000793 li a5,32 + 80001234: 0aff1063 bne t5,a5,800012d4 <_ntoa_format+0x2dc> + 80001238: 02000793 li a5,32 + 8000123c: 01f00713 li a4,31 + 80001240: 01000693 li a3,16 + 80001244: 1ad88c63 beq a7,a3,800013fc <_ntoa_format+0x404> + 80001248: 00200693 li a3,2 + 8000124c: 00070793 mv a5,a4 + 80001250: 00d89e63 bne a7,a3,8000126c <_ntoa_format+0x274> + 80001254: 00e986b3 add a3,s3,a4 + 80001258: 00170793 addi a5,a4,1 + 8000125c: 06200713 li a4,98 + 80001260: 00e68023 sb a4,0(a3) + 80001264: 02000713 li a4,32 + 80001268: 00e78e63 beq a5,a4,80001284 <_ntoa_format+0x28c> + 8000126c: 00f98733 add a4,s3,a5 + 80001270: 03000693 li a3,48 + 80001274: 00d70023 sb a3,0(a4) + 80001278: 00178793 addi a5,a5,1 + 8000127c: 02000713 li a4,32 + 80001280: e6e79ee3 bne a5,a4,800010fc <_ntoa_format+0x104> + 80001284: 00337313 andi t1,t1,3 + 80001288: 08031263 bnez t1,8000130c <_ntoa_format+0x314> + 8000128c: 02000413 li s0,32 + 80001290: 020c1913 slli s2,s8,0x20 + 80001294: 02095913 srli s2,s2,0x20 + 80001298: e92466e3 bltu s0,s2,80001124 <_ntoa_format+0x12c> + 8000129c: 000b8913 mv s2,s7 + 800012a0: eadff06f j 8000114c <_ntoa_format+0x154> + 800012a4: 00437713 andi a4,t1,4 + 800012a8: 06071c63 bnez a4,80001320 <_ntoa_format+0x328> + 800012ac: 00837713 andi a4,t1,8 + 800012b0: 0c071863 bnez a4,80001380 <_ntoa_format+0x388> + 800012b4: 00337313 andi t1,t1,3 + 800012b8: 00078413 mv s0,a5 + 800012bc: fc030ae3 beqz t1,80001290 <_ntoa_format+0x298> + 800012c0: 000b8913 mv s2,s7 + 800012c4: e89ff06f j 8000114c <_ntoa_format+0x154> + 800012c8: 020f1f13 slli t5,t5,0x20 + 800012cc: 020f5f13 srli t5,t5,0x20 + 800012d0: 0aff0263 beq t5,a5,80001374 <_ntoa_format+0x37c> + 800012d4: 020c1913 slli s2,s8,0x20 + 800012d8: 02095913 srli s2,s2,0x20 + 800012dc: 08f90c63 beq s2,a5,80001374 <_ntoa_format+0x37c> + 800012e0: 01000713 li a4,16 + 800012e4: 06e88663 beq a7,a4,80001350 <_ntoa_format+0x358> + 800012e8: 00200713 li a4,2 + 800012ec: f6e89ce3 bne a7,a4,80001264 <_ntoa_format+0x26c> + 800012f0: 02000713 li a4,32 + 800012f4: f8e788e3 beq a5,a4,80001284 <_ntoa_format+0x28c> + 800012f8: 00f986b3 add a3,s3,a5 + 800012fc: 00178793 addi a5,a5,1 + 80001300: f5dff06f j 8000125c <_ntoa_format+0x264> + 80001304: 00337313 andi t1,t1,3 + 80001308: 0c030063 beqz t1,800013c8 <_ntoa_format+0x3d0> + 8000130c: 000b8913 mv s2,s7 + 80001310: 02000413 li s0,32 + 80001314: e3dff06f j 80001150 <_ntoa_format+0x158> + 80001318: 000b8913 mv s2,s7 + 8000131c: e35ff06f j 80001150 <_ntoa_format+0x158> + 80001320: 00f98733 add a4,s3,a5 + 80001324: 00178413 addi s0,a5,1 + 80001328: 02b00793 li a5,43 + 8000132c: 00f70023 sb a5,0(a4) + 80001330: de1ff06f j 80001110 <_ntoa_format+0x118> + 80001334: d8d7fee3 bgeu a5,a3,800010d0 <_ntoa_format+0xd8> + 80001338: 02000713 li a4,32 + 8000133c: d2e79ee3 bne a5,a4,80001078 <_ntoa_format+0x80> + 80001340: 0e0e8c63 beqz t4,80001438 <_ntoa_format+0x440> + 80001344: 40037793 andi a5,t1,1024 + 80001348: f2079ee3 bnez a5,80001284 <_ntoa_format+0x28c> + 8000134c: ee5ff06f j 80001230 <_ntoa_format+0x238> + 80001350: 02037713 andi a4,t1,32 + 80001354: 04071c63 bnez a4,800013ac <_ntoa_format+0x3b4> + 80001358: 02000713 li a4,32 + 8000135c: f2e784e3 beq a5,a4,80001284 <_ntoa_format+0x28c> + 80001360: 00f98733 add a4,s3,a5 + 80001364: 00178793 addi a5,a5,1 + 80001368: 07800693 li a3,120 + 8000136c: 00d70023 sb a3,0(a4) + 80001370: ef5ff06f j 80001264 <_ntoa_format+0x26c> + 80001374: fff78713 addi a4,a5,-1 + 80001378: d60704e3 beqz a4,800010e0 <_ntoa_format+0xe8> + 8000137c: ec5ff06f j 80001240 <_ntoa_format+0x248> + 80001380: 00f98733 add a4,s3,a5 + 80001384: 00178413 addi s0,a5,1 + 80001388: 02000793 li a5,32 + 8000138c: 00f70023 sb a5,0(a4) + 80001390: d81ff06f j 80001110 <_ntoa_format+0x118> + 80001394: 02037793 andi a5,t1,32 + 80001398: 02079c63 bnez a5,800013d0 <_ntoa_format+0x3d8> + 8000139c: 07800793 li a5,120 + 800013a0: 00f98023 sb a5,0(s3) + 800013a4: 00100793 li a5,1 + 800013a8: ec5ff06f j 8000126c <_ntoa_format+0x274> + 800013ac: 02000713 li a4,32 + 800013b0: ece78ae3 beq a5,a4,80001284 <_ntoa_format+0x28c> + 800013b4: 00f98733 add a4,s3,a5 + 800013b8: 05800693 li a3,88 + 800013bc: 00d70023 sb a3,0(a4) + 800013c0: 00178793 addi a5,a5,1 + 800013c4: ea1ff06f j 80001264 <_ntoa_format+0x26c> + 800013c8: 02000413 li s0,32 + 800013cc: d4dff06f j 80001118 <_ntoa_format+0x120> + 800013d0: 05800793 li a5,88 + 800013d4: 00f98023 sb a5,0(s3) + 800013d8: 00100793 li a5,1 + 800013dc: e91ff06f j 8000126c <_ntoa_format+0x274> + 800013e0: 06200793 li a5,98 + 800013e4: 00f98023 sb a5,0(s3) + 800013e8: 00100793 li a5,1 + 800013ec: e81ff06f j 8000126c <_ntoa_format+0x274> + 800013f0: e2051ae3 bnez a0,80001224 <_ntoa_format+0x22c> + 800013f4: 000c8c13 mv s8,s9 + 800013f8: f49ff06f j 80001340 <_ntoa_format+0x348> + 800013fc: 02037693 andi a3,t1,32 + 80001400: ffe78713 addi a4,a5,-2 + 80001404: 00069863 bnez a3,80001414 <_ntoa_format+0x41c> + 80001408: 00e98733 add a4,s3,a4 + 8000140c: fff78793 addi a5,a5,-1 + 80001410: f59ff06f j 80001368 <_ntoa_format+0x370> + 80001414: 00070793 mv a5,a4 + 80001418: f9dff06f j 800013b4 <_ntoa_format+0x3bc> + 8000141c: 000e8e63 beqz t4,80001438 <_ntoa_format+0x440> + 80001420: 40037713 andi a4,t1,1024 + 80001424: 00071e63 bnez a4,80001440 <_ntoa_format+0x448> + 80001428: 02ff0e63 beq t5,a5,80001464 <_ntoa_format+0x46c> + 8000142c: e4fc1ce3 bne s8,a5,80001284 <_ntoa_format+0x28c> + 80001430: 01f00713 li a4,31 + 80001434: e0dff06f j 80001240 <_ntoa_format+0x248> + 80001438: 02000413 li s0,32 + 8000143c: cd5ff06f j 80001110 <_ntoa_format+0x118> + 80001440: 01000793 li a5,16 + 80001444: 02f88c63 beq a7,a5,8000147c <_ntoa_format+0x484> + 80001448: 00200793 li a5,2 + 8000144c: e2f88ce3 beq a7,a5,80001284 <_ntoa_format+0x28c> + 80001450: 00337313 andi t1,t1,3 + 80001454: ea031ce3 bnez t1,8000130c <_ntoa_format+0x314> + 80001458: 02000413 li s0,32 + 8000145c: cd2464e3 bltu s0,s2,80001124 <_ntoa_format+0x12c> + 80001460: e3dff06f j 8000129c <_ntoa_format+0x2a4> + 80001464: 01000713 li a4,16 + 80001468: f8e88ae3 beq a7,a4,800013fc <_ntoa_format+0x404> + 8000146c: 00200793 li a5,2 + 80001470: 00f88c63 beq a7,a5,80001488 <_ntoa_format+0x490> + 80001474: 01f00793 li a5,31 + 80001478: df5ff06f j 8000126c <_ntoa_format+0x274> + 8000147c: 02037793 andi a5,t1,32 + 80001480: fc0788e3 beqz a5,80001450 <_ntoa_format+0x458> + 80001484: e01ff06f j 80001284 <_ntoa_format+0x28c> + 80001488: 01f00713 li a4,31 + 8000148c: dc9ff06f j 80001254 <_ntoa_format+0x25c> + +0000000080001490 <_ntoa_long>: + 80001490: f4010113 addi sp,sp,-192 + 80001494: 09413823 sd s4,144(sp) + 80001498: 09513423 sd s5,136(sp) + 8000149c: 09613023 sd s6,128(sp) + 800014a0: 07713c23 sd s7,120(sp) + 800014a4: 07813823 sd s8,112(sp) + 800014a8: 07913423 sd s9,104(sp) + 800014ac: 05b13c23 sd s11,88(sp) + 800014b0: 0a113c23 sd ra,184(sp) + 800014b4: 0a813823 sd s0,176(sp) + 800014b8: 0a913423 sd s1,168(sp) + 800014bc: 0b213023 sd s2,160(sp) + 800014c0: 09313c23 sd s3,152(sp) + 800014c4: 07a13023 sd s10,96(sp) + 800014c8: 02a13023 sd a0,32(sp) + 800014cc: 03113423 sd a7,40(sp) + 800014d0: 0c812a03 lw s4,200(sp) + 800014d4: 00070d93 mv s11,a4 + 800014d8: 00058b13 mv s6,a1 + 800014dc: 00060b93 mv s7,a2 + 800014e0: 00068c13 mv s8,a3 + 800014e4: 00078c93 mv s9,a5 + 800014e8: 00080a93 mv s5,a6 + 800014ec: 00071863 bnez a4,800014fc <_ntoa_long+0x6c> + 800014f0: 400a7793 andi a5,s4,1024 + 800014f4: fefa7a13 andi s4,s4,-17 + 800014f8: 0e079663 bnez a5,800015e4 <_ntoa_long+0x154> + 800014fc: 020a7793 andi a5,s4,32 + 80001500: 06100413 li s0,97 + 80001504: 0c079c63 bnez a5,800015dc <_ntoa_long+0x14c> + 80001508: 00000d13 li s10,0 + 8000150c: 03010493 addi s1,sp,48 + 80001510: 00900913 li s2,9 + 80001514: ff64041b addiw s0,s0,-10 + 80001518: 02000993 li s3,32 + 8000151c: 00c0006f j 80001528 <_ntoa_long+0x98> + 80001520: 053d0463 beq s10,s3,80001568 <_ntoa_long+0xd8> + 80001524: 00050d93 mv s11,a0 + 80001528: 000a8593 mv a1,s5 + 8000152c: 000d8513 mv a0,s11 + 80001530: da0ff0ef jal ra,80000ad0 <__umoddi3> + 80001534: 0ff57313 andi t1,a0,255 + 80001538: 0303071b addiw a4,t1,48 + 8000153c: 0064033b addw t1,s0,t1 + 80001540: 0ff37313 andi t1,t1,255 + 80001544: 00a96463 bltu s2,a0,8000154c <_ntoa_long+0xbc> + 80001548: 0ff77313 andi t1,a4,255 + 8000154c: 001d0d13 addi s10,s10,1 + 80001550: 01a48733 add a4,s1,s10 + 80001554: 000d8513 mv a0,s11 + 80001558: 000a8593 mv a1,s5 + 8000155c: fe670fa3 sb t1,-1(a4) + 80001560: d28ff0ef jal ra,80000a88 <__udivdi3> + 80001564: fb5dfee3 bgeu s11,s5,80001520 <_ntoa_long+0x90> + 80001568: 0c012703 lw a4,192(sp) + 8000156c: 02813783 ld a5,40(sp) + 80001570: 02013503 ld a0,32(sp) + 80001574: 01413823 sd s4,16(sp) + 80001578: 00e13423 sd a4,8(sp) + 8000157c: 00f13023 sd a5,0(sp) + 80001580: 000a889b sext.w a7,s5 + 80001584: 000c8813 mv a6,s9 + 80001588: 000d0793 mv a5,s10 + 8000158c: 00048713 mv a4,s1 + 80001590: 000c0693 mv a3,s8 + 80001594: 000b8613 mv a2,s7 + 80001598: 000b0593 mv a1,s6 + 8000159c: a5dff0ef jal ra,80000ff8 <_ntoa_format> + 800015a0: 0b813083 ld ra,184(sp) + 800015a4: 0b013403 ld s0,176(sp) + 800015a8: 0a813483 ld s1,168(sp) + 800015ac: 0a013903 ld s2,160(sp) + 800015b0: 09813983 ld s3,152(sp) + 800015b4: 09013a03 ld s4,144(sp) + 800015b8: 08813a83 ld s5,136(sp) + 800015bc: 08013b03 ld s6,128(sp) + 800015c0: 07813b83 ld s7,120(sp) + 800015c4: 07013c03 ld s8,112(sp) + 800015c8: 06813c83 ld s9,104(sp) + 800015cc: 06013d03 ld s10,96(sp) + 800015d0: 05813d83 ld s11,88(sp) + 800015d4: 0c010113 addi sp,sp,192 + 800015d8: 00008067 ret + 800015dc: 04100413 li s0,65 + 800015e0: f29ff06f j 80001508 <_ntoa_long+0x78> + 800015e4: 00000d13 li s10,0 + 800015e8: 03010493 addi s1,sp,48 + 800015ec: f7dff06f j 80001568 <_ntoa_long+0xd8> + +00000000800015f0 <_ntoa_long_long>: + 800015f0: f4010113 addi sp,sp,-192 + 800015f4: 09413823 sd s4,144(sp) + 800015f8: 09513423 sd s5,136(sp) + 800015fc: 09613023 sd s6,128(sp) + 80001600: 07713c23 sd s7,120(sp) + 80001604: 07813823 sd s8,112(sp) + 80001608: 07913423 sd s9,104(sp) + 8000160c: 05b13c23 sd s11,88(sp) + 80001610: 0a113c23 sd ra,184(sp) + 80001614: 0a813823 sd s0,176(sp) + 80001618: 0a913423 sd s1,168(sp) + 8000161c: 0b213023 sd s2,160(sp) + 80001620: 09313c23 sd s3,152(sp) + 80001624: 07a13023 sd s10,96(sp) + 80001628: 02a13023 sd a0,32(sp) + 8000162c: 03113423 sd a7,40(sp) + 80001630: 0c812a03 lw s4,200(sp) + 80001634: 00070d93 mv s11,a4 + 80001638: 00058b13 mv s6,a1 + 8000163c: 00060b93 mv s7,a2 + 80001640: 00068c13 mv s8,a3 + 80001644: 00078c93 mv s9,a5 + 80001648: 00080a93 mv s5,a6 + 8000164c: 00071863 bnez a4,8000165c <_ntoa_long_long+0x6c> + 80001650: 400a7793 andi a5,s4,1024 + 80001654: fefa7a13 andi s4,s4,-17 + 80001658: 0e079663 bnez a5,80001744 <_ntoa_long_long+0x154> + 8000165c: 020a7793 andi a5,s4,32 + 80001660: 06100413 li s0,97 + 80001664: 0c079c63 bnez a5,8000173c <_ntoa_long_long+0x14c> + 80001668: 00000d13 li s10,0 + 8000166c: 03010493 addi s1,sp,48 + 80001670: 00900913 li s2,9 + 80001674: ff64041b addiw s0,s0,-10 + 80001678: 02000993 li s3,32 + 8000167c: 00c0006f j 80001688 <_ntoa_long_long+0x98> + 80001680: 053d0463 beq s10,s3,800016c8 <_ntoa_long_long+0xd8> + 80001684: 00050d93 mv s11,a0 + 80001688: 000a8593 mv a1,s5 + 8000168c: 000d8513 mv a0,s11 + 80001690: c40ff0ef jal ra,80000ad0 <__umoddi3> + 80001694: 0ff57313 andi t1,a0,255 + 80001698: 0303071b addiw a4,t1,48 + 8000169c: 0064033b addw t1,s0,t1 + 800016a0: 0ff37313 andi t1,t1,255 + 800016a4: 00a96463 bltu s2,a0,800016ac <_ntoa_long_long+0xbc> + 800016a8: 0ff77313 andi t1,a4,255 + 800016ac: 001d0d13 addi s10,s10,1 + 800016b0: 01a48733 add a4,s1,s10 + 800016b4: 000d8513 mv a0,s11 + 800016b8: 000a8593 mv a1,s5 + 800016bc: fe670fa3 sb t1,-1(a4) + 800016c0: bc8ff0ef jal ra,80000a88 <__udivdi3> + 800016c4: fb5dfee3 bgeu s11,s5,80001680 <_ntoa_long_long+0x90> + 800016c8: 0c012703 lw a4,192(sp) + 800016cc: 02813783 ld a5,40(sp) + 800016d0: 02013503 ld a0,32(sp) + 800016d4: 01413823 sd s4,16(sp) + 800016d8: 00e13423 sd a4,8(sp) + 800016dc: 00f13023 sd a5,0(sp) + 800016e0: 000a889b sext.w a7,s5 + 800016e4: 000c8813 mv a6,s9 + 800016e8: 000d0793 mv a5,s10 + 800016ec: 00048713 mv a4,s1 + 800016f0: 000c0693 mv a3,s8 + 800016f4: 000b8613 mv a2,s7 + 800016f8: 000b0593 mv a1,s6 + 800016fc: 8fdff0ef jal ra,80000ff8 <_ntoa_format> + 80001700: 0b813083 ld ra,184(sp) + 80001704: 0b013403 ld s0,176(sp) + 80001708: 0a813483 ld s1,168(sp) + 8000170c: 0a013903 ld s2,160(sp) + 80001710: 09813983 ld s3,152(sp) + 80001714: 09013a03 ld s4,144(sp) + 80001718: 08813a83 ld s5,136(sp) + 8000171c: 08013b03 ld s6,128(sp) + 80001720: 07813b83 ld s7,120(sp) + 80001724: 07013c03 ld s8,112(sp) + 80001728: 06813c83 ld s9,104(sp) + 8000172c: 06013d03 ld s10,96(sp) + 80001730: 05813d83 ld s11,88(sp) + 80001734: 0c010113 addi sp,sp,192 + 80001738: 00008067 ret + 8000173c: 04100413 li s0,65 + 80001740: f29ff06f j 80001668 <_ntoa_long_long+0x78> + 80001744: 00000d13 li s10,0 + 80001748: 03010493 addi s1,sp,48 + 8000174c: f7dff06f j 800016c8 <_ntoa_long_long+0xd8> + +0000000080001750 <_vsnprintf>: + 80001750: f6010113 addi sp,sp,-160 + 80001754: 08913423 sd s1,136(sp) + 80001758: 09213023 sd s2,128(sp) + 8000175c: 07313c23 sd s3,120(sp) + 80001760: 05713c23 sd s7,88(sp) + 80001764: 05813823 sd s8,80(sp) + 80001768: 08113c23 sd ra,152(sp) + 8000176c: 08813823 sd s0,144(sp) + 80001770: 07413823 sd s4,112(sp) + 80001774: 07513423 sd s5,104(sp) + 80001778: 07613023 sd s6,96(sp) + 8000177c: 05913423 sd s9,72(sp) + 80001780: 05a13023 sd s10,64(sp) + 80001784: 03b13c23 sd s11,56(sp) + 80001788: 00058493 mv s1,a1 + 8000178c: 00060c13 mv s8,a2 + 80001790: 00068b93 mv s7,a3 + 80001794: 00070993 mv s3,a4 + 80001798: 00000917 auipc s2,0x0 + 8000179c: 85c90913 addi s2,s2,-1956 # 80000ff4 <_out_null> + 800017a0: 00058463 beqz a1,800017a8 <_vsnprintf+0x58> + 800017a4: 00050913 mv s2,a0 + 800017a8: 000bc503 lbu a0,0(s7) + 800017ac: 00000d13 li s10,0 + 800017b0: 66050663 beqz a0,80001e1c <_vsnprintf+0x6cc> + 800017b4: 000107b7 lui a5,0x10 + 800017b8: fff78793 addi a5,a5,-1 # ffff <_entry_offset+0xffff> + 800017bc: 02500a13 li s4,37 + 800017c0: 00001417 auipc s0,0x1 + 800017c4: 22840413 addi s0,s0,552 # 800029e8 + 800017c8: 00f13c23 sd a5,24(sp) + 800017cc: 0200006f j 800017ec <_vsnprintf+0x9c> + 800017d0: 000d0613 mv a2,s10 + 800017d4: 000c0693 mv a3,s8 + 800017d8: 00048593 mv a1,s1 + 800017dc: 001d0d13 addi s10,s10,1 + 800017e0: 000900e7 jalr s2 + 800017e4: 000bc503 lbu a0,0(s7) + 800017e8: 1c050263 beqz a0,800019ac <_vsnprintf+0x25c> + 800017ec: 001b8b93 addi s7,s7,1 + 800017f0: ff4510e3 bne a0,s4,800017d0 <_vsnprintf+0x80> + 800017f4: 00000593 li a1,0 + 800017f8: 01000813 li a6,16 + 800017fc: 000bc503 lbu a0,0(s7) + 80001800: 001b8713 addi a4,s7,1 + 80001804: 00070613 mv a2,a4 + 80001808: fe05079b addiw a5,a0,-32 + 8000180c: 0ff7f793 andi a5,a5,255 + 80001810: 00f86c63 bltu a6,a5,80001828 <_vsnprintf+0xd8> + 80001814: 00279793 slli a5,a5,0x2 + 80001818: 008787b3 add a5,a5,s0 + 8000181c: 0007a783 lw a5,0(a5) + 80001820: 008787b3 add a5,a5,s0 + 80001824: 00078067 jr a5 + 80001828: fd05079b addiw a5,a0,-48 + 8000182c: 0ff7f793 andi a5,a5,255 + 80001830: 00900813 li a6,9 + 80001834: 0ef87c63 bgeu a6,a5,8000192c <_vsnprintf+0x1dc> + 80001838: 02a00793 li a5,42 + 8000183c: 20f50463 beq a0,a5,80001a44 <_vsnprintf+0x2f4> + 80001840: 000b8613 mv a2,s7 + 80001844: 00000d93 li s11,0 + 80001848: 00070b93 mv s7,a4 + 8000184c: 02e00793 li a5,46 + 80001850: 00000c93 li s9,0 + 80001854: 12f50463 beq a0,a5,8000197c <_vsnprintf+0x22c> + 80001858: f985079b addiw a5,a0,-104 + 8000185c: 0ff7f793 andi a5,a5,255 + 80001860: 01200713 li a4,18 + 80001864: 08f76463 bltu a4,a5,800018ec <_vsnprintf+0x19c> + 80001868: 00001717 auipc a4,0x1 + 8000186c: 1c470713 addi a4,a4,452 # 80002a2c + 80001870: 00279793 slli a5,a5,0x2 + 80001874: 00e787b3 add a5,a5,a4 + 80001878: 0007a783 lw a5,0(a5) + 8000187c: 00e787b3 add a5,a5,a4 + 80001880: 00078067 jr a5 + 80001884: 0015e593 ori a1,a1,1 + 80001888: 0005859b sext.w a1,a1 + 8000188c: 00070b93 mv s7,a4 + 80001890: f6dff06f j 800017fc <_vsnprintf+0xac> + 80001894: 0025e593 ori a1,a1,2 + 80001898: 0005859b sext.w a1,a1 + 8000189c: 00070b93 mv s7,a4 + 800018a0: f5dff06f j 800017fc <_vsnprintf+0xac> + 800018a4: 0045e593 ori a1,a1,4 + 800018a8: 0005859b sext.w a1,a1 + 800018ac: 00070b93 mv s7,a4 + 800018b0: f4dff06f j 800017fc <_vsnprintf+0xac> + 800018b4: 0105e593 ori a1,a1,16 + 800018b8: 0005859b sext.w a1,a1 + 800018bc: 00070b93 mv s7,a4 + 800018c0: f3dff06f j 800017fc <_vsnprintf+0xac> + 800018c4: 0085e593 ori a1,a1,8 + 800018c8: 0005859b sext.w a1,a1 + 800018cc: 00070b93 mv s7,a4 + 800018d0: f2dff06f j 800017fc <_vsnprintf+0xac> + 800018d4: 00164503 lbu a0,1(a2) + 800018d8: 06800793 li a5,104 + 800018dc: 52f50663 beq a0,a5,80001e08 <_vsnprintf+0x6b8> + 800018e0: 0805e593 ori a1,a1,128 + 800018e4: 0005859b sext.w a1,a1 + 800018e8: 001b8b93 addi s7,s7,1 + 800018ec: fdb5079b addiw a5,a0,-37 + 800018f0: 0ff7f793 andi a5,a5,255 + 800018f4: 05300713 li a4,83 + 800018f8: ecf76ce3 bltu a4,a5,800017d0 <_vsnprintf+0x80> + 800018fc: 00001717 auipc a4,0x1 + 80001900: 17c70713 addi a4,a4,380 # 80002a78 + 80001904: 00279793 slli a5,a5,0x2 + 80001908: 00e787b3 add a5,a5,a4 + 8000190c: 0007a783 lw a5,0(a5) + 80001910: 00e787b3 add a5,a5,a4 + 80001914: 00078067 jr a5 + 80001918: 00164503 lbu a0,1(a2) + 8000191c: 1005e593 ori a1,a1,256 + 80001920: 0005859b sext.w a1,a1 + 80001924: 001b8b93 addi s7,s7,1 + 80001928: fc5ff06f j 800018ec <_vsnprintf+0x19c> + 8000192c: 00000d93 li s11,0 + 80001930: 00900813 li a6,9 + 80001934: 0080006f j 8000193c <_vsnprintf+0x1ec> + 80001938: 00170713 addi a4,a4,1 + 8000193c: 002d979b slliw a5,s11,0x2 + 80001940: 01b787bb addw a5,a5,s11 + 80001944: 0017979b slliw a5,a5,0x1 + 80001948: 00a787bb addw a5,a5,a0 + 8000194c: 00074503 lbu a0,0(a4) + 80001950: 000b8893 mv a7,s7 + 80001954: fd078d9b addiw s11,a5,-48 + 80001958: fd05061b addiw a2,a0,-48 + 8000195c: 0ff67613 andi a2,a2,255 + 80001960: 00070b93 mv s7,a4 + 80001964: fcc87ae3 bgeu a6,a2,80001938 <_vsnprintf+0x1e8> + 80001968: 02e00793 li a5,46 + 8000196c: 00070613 mv a2,a4 + 80001970: 00288b93 addi s7,a7,2 + 80001974: 00000c93 li s9,0 + 80001978: eef510e3 bne a0,a5,80001858 <_vsnprintf+0x108> + 8000197c: 00164503 lbu a0,1(a2) + 80001980: 4005e593 ori a1,a1,1024 + 80001984: 00900713 li a4,9 + 80001988: fd05079b addiw a5,a0,-48 + 8000198c: 0ff7f793 andi a5,a5,255 + 80001990: 0005859b sext.w a1,a1 + 80001994: 06f77c63 bgeu a4,a5,80001a0c <_vsnprintf+0x2bc> + 80001998: 02a00793 li a5,42 + 8000199c: 32f50e63 beq a0,a5,80001cd8 <_vsnprintf+0x588> + 800019a0: 000b8613 mv a2,s7 + 800019a4: 001b8b93 addi s7,s7,1 + 800019a8: eb1ff06f j 80001858 <_vsnprintf+0x108> + 800019ac: 000d041b sext.w s0,s10 + 800019b0: 018d6463 bltu s10,s8,800019b8 <_vsnprintf+0x268> + 800019b4: fffc0d13 addi s10,s8,-1 + 800019b8: 000c0693 mv a3,s8 + 800019bc: 000d0613 mv a2,s10 + 800019c0: 00048593 mv a1,s1 + 800019c4: 00000513 li a0,0 + 800019c8: 000900e7 jalr s2 + 800019cc: 09813083 ld ra,152(sp) + 800019d0: 00040513 mv a0,s0 + 800019d4: 09013403 ld s0,144(sp) + 800019d8: 08813483 ld s1,136(sp) + 800019dc: 08013903 ld s2,128(sp) + 800019e0: 07813983 ld s3,120(sp) + 800019e4: 07013a03 ld s4,112(sp) + 800019e8: 06813a83 ld s5,104(sp) + 800019ec: 06013b03 ld s6,96(sp) + 800019f0: 05813b83 ld s7,88(sp) + 800019f4: 05013c03 ld s8,80(sp) + 800019f8: 04813c83 ld s9,72(sp) + 800019fc: 04013d03 ld s10,64(sp) + 80001a00: 03813d83 ld s11,56(sp) + 80001a04: 0a010113 addi sp,sp,160 + 80001a08: 00008067 ret + 80001a0c: 002c979b slliw a5,s9,0x2 + 80001a10: 019788bb addw a7,a5,s9 + 80001a14: 000b8813 mv a6,s7 + 80001a18: 0018989b slliw a7,a7,0x1 + 80001a1c: 001b8b93 addi s7,s7,1 + 80001a20: 00a888bb addw a7,a7,a0 + 80001a24: 000bc503 lbu a0,0(s7) + 80001a28: fd088c9b addiw s9,a7,-48 + 80001a2c: fd05079b addiw a5,a0,-48 + 80001a30: 0ff7f793 andi a5,a5,255 + 80001a34: fcf77ce3 bgeu a4,a5,80001a0c <_vsnprintf+0x2bc> + 80001a38: 000b8613 mv a2,s7 + 80001a3c: 00280b93 addi s7,a6,2 + 80001a40: e19ff06f j 80001858 <_vsnprintf+0x108> + 80001a44: 0009a783 lw a5,0(s3) + 80001a48: 00898993 addi s3,s3,8 + 80001a4c: 00078d9b sext.w s11,a5 + 80001a50: 0007c863 bltz a5,80001a60 <_vsnprintf+0x310> + 80001a54: 001bc503 lbu a0,1(s7) + 80001a58: 002b8b93 addi s7,s7,2 + 80001a5c: df1ff06f j 8000184c <_vsnprintf+0xfc> + 80001a60: 0025e593 ori a1,a1,2 + 80001a64: 001bc503 lbu a0,1(s7) + 80001a68: 0005859b sext.w a1,a1 + 80001a6c: 40f00dbb negw s11,a5 + 80001a70: 002b8b93 addi s7,s7,2 + 80001a74: dd9ff06f j 8000184c <_vsnprintf+0xfc> + 80001a78: 07800793 li a5,120 + 80001a7c: 00898a93 addi s5,s3,8 + 80001a80: 56f50063 beq a0,a5,80001fe0 <_vsnprintf+0x890> + 80001a84: 05800793 li a5,88 + 80001a88: 28f50463 beq a0,a5,80001d10 <_vsnprintf+0x5c0> + 80001a8c: 06f00793 li a5,111 + 80001a90: 4af50c63 beq a0,a5,80001f48 <_vsnprintf+0x7f8> + 80001a94: 06200793 li a5,98 + 80001a98: 54f50063 beq a0,a5,80001fd8 <_vsnprintf+0x888> + 80001a9c: fef5ff13 andi t5,a1,-17 + 80001aa0: 4005f793 andi a5,a1,1024 + 80001aa4: 06900713 li a4,105 + 80001aa8: 000f0f1b sext.w t5,t5 + 80001aac: 0007879b sext.w a5,a5 + 80001ab0: 5ae51063 bne a0,a4,80002050 <_vsnprintf+0x900> + 80001ab4: 48079663 bnez a5,80001f40 <_vsnprintf+0x7f0> + 80001ab8: 2005f593 andi a1,a1,512 + 80001abc: 0005879b sext.w a5,a1 + 80001ac0: 00a00813 li a6,10 + 80001ac4: 42079663 bnez a5,80001ef0 <_vsnprintf+0x7a0> + 80001ac8: 100f7793 andi a5,t5,256 + 80001acc: 000f0613 mv a2,t5 + 80001ad0: 4e079063 bnez a5,80001fb0 <_vsnprintf+0x860> + 80001ad4: 040f7713 andi a4,t5,64 + 80001ad8: 0009a783 lw a5,0(s3) + 80001adc: 4a071a63 bnez a4,80001f90 <_vsnprintf+0x840> + 80001ae0: 08067613 andi a2,a2,128 + 80001ae4: 52060a63 beqz a2,80002018 <_vsnprintf+0x8c8> + 80001ae8: 0107979b slliw a5,a5,0x10 + 80001aec: 4107d79b sraiw a5,a5,0x10 + 80001af0: 40f7d61b sraiw a2,a5,0xf + 80001af4: 00c7c733 xor a4,a5,a2 + 80001af8: 40c7073b subw a4,a4,a2 + 80001afc: 03071713 slli a4,a4,0x30 + 80001b00: 03075713 srli a4,a4,0x30 + 80001b04: 000d0613 mv a2,s10 + 80001b08: 01e13423 sd t5,8(sp) + 80001b0c: 01b13023 sd s11,0(sp) + 80001b10: 000c8893 mv a7,s9 + 80001b14: 01f7d79b srliw a5,a5,0x1f + 80001b18: 000c0693 mv a3,s8 + 80001b1c: 00048593 mv a1,s1 + 80001b20: 00090513 mv a0,s2 + 80001b24: 96dff0ef jal ra,80001490 <_ntoa_long> + 80001b28: 00050d13 mv s10,a0 + 80001b2c: 000a8993 mv s3,s5 + 80001b30: cb5ff06f j 800017e4 <_vsnprintf+0x94> + 80001b34: 00164503 lbu a0,1(a2) + 80001b38: 06c00793 li a5,108 + 80001b3c: def510e3 bne a0,a5,8000191c <_vsnprintf+0x1cc> + 80001b40: 3005e593 ori a1,a1,768 + 80001b44: 00264503 lbu a0,2(a2) + 80001b48: 0005859b sext.w a1,a1 + 80001b4c: 00360b93 addi s7,a2,3 + 80001b50: d9dff06f j 800018ec <_vsnprintf+0x19c> + 80001b54: 00898793 addi a5,s3,8 + 80001b58: 001d0813 addi a6,s10,1 + 80001b5c: 0025f593 andi a1,a1,2 + 80001b60: 02f13023 sd a5,32(sp) + 80001b64: 00080b13 mv s6,a6 + 80001b68: 32058263 beqz a1,80001e8c <_vsnprintf+0x73c> + 80001b6c: 0009c503 lbu a0,0(s3) + 80001b70: 000c0693 mv a3,s8 + 80001b74: 000d0613 mv a2,s10 + 80001b78: 00048593 mv a1,s1 + 80001b7c: 000900e7 jalr s2 + 80001b80: 00100793 li a5,1 + 80001b84: 43b7f063 bgeu a5,s11,80001fa4 <_vsnprintf+0x854> + 80001b88: ffed879b addiw a5,s11,-2 + 80001b8c: 02079a93 slli s5,a5,0x20 + 80001b90: 020ada93 srli s5,s5,0x20 + 80001b94: 002d0d13 addi s10,s10,2 + 80001b98: 015d0cb3 add s9,s10,s5 + 80001b9c: 000b0613 mv a2,s6 + 80001ba0: 000c0693 mv a3,s8 + 80001ba4: 001b0b13 addi s6,s6,1 + 80001ba8: 00048593 mv a1,s1 + 80001bac: 02000513 li a0,32 + 80001bb0: 000900e7 jalr s2 + 80001bb4: ff6c94e3 bne s9,s6,80001b9c <_vsnprintf+0x44c> + 80001bb8: 02013983 ld s3,32(sp) + 80001bbc: 015d0d33 add s10,s10,s5 + 80001bc0: c25ff06f j 800017e4 <_vsnprintf+0x94> + 80001bc4: 000d0613 mv a2,s10 + 80001bc8: 000c0693 mv a3,s8 + 80001bcc: 00048593 mv a1,s1 + 80001bd0: 02500513 li a0,37 + 80001bd4: 001d0d13 addi s10,s10,1 + 80001bd8: 000900e7 jalr s2 + 80001bdc: c09ff06f j 800017e4 <_vsnprintf+0x94> + 80001be0: 0009ba83 ld s5,0(s3) + 80001be4: 00898793 addi a5,s3,8 + 80001be8: 02f13023 sd a5,32(sp) + 80001bec: 000ac503 lbu a0,0(s5) + 80001bf0: 100c9663 bnez s9,80001cfc <_vsnprintf+0x5ac> + 80001bf4: ffe00793 li a5,-2 + 80001bf8: 42050863 beqz a0,80002028 <_vsnprintf+0x8d8> + 80001bfc: 00178693 addi a3,a5,1 + 80001c00: 00da8633 add a2,s5,a3 + 80001c04: 000a8793 mv a5,s5 + 80001c08: 0080006f j 80001c10 <_vsnprintf+0x4c0> + 80001c0c: 1ec78863 beq a5,a2,80001dfc <_vsnprintf+0x6ac> + 80001c10: 0017c703 lbu a4,1(a5) + 80001c14: 00178793 addi a5,a5,1 + 80001c18: fe071ae3 bnez a4,80001c0c <_vsnprintf+0x4bc> + 80001c1c: 415787bb subw a5,a5,s5 + 80001c20: 00f13823 sd a5,16(sp) + 80001c24: 4005f793 andi a5,a1,1024 + 80001c28: 0007899b sext.w s3,a5 + 80001c2c: 00078c63 beqz a5,80001c44 <_vsnprintf+0x4f4> + 80001c30: 01013703 ld a4,16(sp) + 80001c34: 000c879b sext.w a5,s9 + 80001c38: 01977463 bgeu a4,s9,80001c40 <_vsnprintf+0x4f0> + 80001c3c: 0007079b sext.w a5,a4 + 80001c40: 00f13823 sd a5,16(sp) + 80001c44: 0025f593 andi a1,a1,2 + 80001c48: 0005879b sext.w a5,a1 + 80001c4c: 02f13423 sd a5,40(sp) + 80001c50: 1c058a63 beqz a1,80001e24 <_vsnprintf+0x6d4> + 80001c54: 14050863 beqz a0,80001da4 <_vsnprintf+0x654> + 80001c58: 000d0613 mv a2,s10 + 80001c5c: 00098863 beqz s3,80001c6c <_vsnprintf+0x51c> + 80001c60: fffc879b addiw a5,s9,-1 + 80001c64: 120c8863 beqz s9,80001d94 <_vsnprintf+0x644> + 80001c68: 00078c93 mv s9,a5 + 80001c6c: 000c0693 mv a3,s8 + 80001c70: 00048593 mv a1,s1 + 80001c74: 00160b13 addi s6,a2,1 + 80001c78: 000900e7 jalr s2 + 80001c7c: 41ab07b3 sub a5,s6,s10 + 80001c80: 00fa87b3 add a5,s5,a5 + 80001c84: 0007c503 lbu a0,0(a5) + 80001c88: 10050863 beqz a0,80001d98 <_vsnprintf+0x648> + 80001c8c: 000b0613 mv a2,s6 + 80001c90: fcdff06f j 80001c5c <_vsnprintf+0x50c> + 80001c94: 0009b703 ld a4,0(s3) + 80001c98: 0215e593 ori a1,a1,33 + 80001c9c: 0005859b sext.w a1,a1 + 80001ca0: 01000793 li a5,16 + 80001ca4: 000d0613 mv a2,s10 + 80001ca8: 00b13423 sd a1,8(sp) + 80001cac: 00f13023 sd a5,0(sp) + 80001cb0: 000c8893 mv a7,s9 + 80001cb4: 01000813 li a6,16 + 80001cb8: 00000793 li a5,0 + 80001cbc: 000c0693 mv a3,s8 + 80001cc0: 00048593 mv a1,s1 + 80001cc4: 00090513 mv a0,s2 + 80001cc8: 929ff0ef jal ra,800015f0 <_ntoa_long_long> + 80001ccc: 00898993 addi s3,s3,8 + 80001cd0: 00050d13 mv s10,a0 + 80001cd4: b11ff06f j 800017e4 <_vsnprintf+0x94> + 80001cd8: 0009a883 lw a7,0(s3) + 80001cdc: 00264503 lbu a0,2(a2) + 80001ce0: 00360b93 addi s7,a2,3 + 80001ce4: fff8c793 not a5,a7 + 80001ce8: 43f7d793 srai a5,a5,0x3f + 80001cec: 00f8fcb3 and s9,a7,a5 + 80001cf0: 00898993 addi s3,s3,8 + 80001cf4: 00260613 addi a2,a2,2 + 80001cf8: b61ff06f j 80001858 <_vsnprintf+0x108> + 80001cfc: 020c9793 slli a5,s9,0x20 + 80001d00: 0207d793 srli a5,a5,0x20 + 80001d04: 32050263 beqz a0,80002028 <_vsnprintf+0x8d8> + 80001d08: fff78793 addi a5,a5,-1 + 80001d0c: ef1ff06f j 80001bfc <_vsnprintf+0x4ac> + 80001d10: ff35ff13 andi t5,a1,-13 + 80001d14: 000f0f1b sext.w t5,t5 + 80001d18: 4005f793 andi a5,a1,1024 + 80001d1c: 020f6f13 ori t5,t5,32 + 80001d20: 20078863 beqz a5,80001f30 <_vsnprintf+0x7e0> + 80001d24: 01000813 li a6,16 + 80001d28: ffef7f13 andi t5,t5,-2 + 80001d2c: 000f0f1b sext.w t5,t5 + 80001d30: 200f7793 andi a5,t5,512 + 80001d34: 06900713 li a4,105 + 80001d38: 0007879b sext.w a5,a5 + 80001d3c: d8e504e3 beq a0,a4,80001ac4 <_vsnprintf+0x374> + 80001d40: 06400713 li a4,100 + 80001d44: d8e500e3 beq a0,a4,80001ac4 <_vsnprintf+0x374> + 80001d48: 22079663 bnez a5,80001f74 <_vsnprintf+0x824> + 80001d4c: 100f7793 andi a5,t5,256 + 80001d50: 000f0713 mv a4,t5 + 80001d54: 2a079463 bnez a5,80001ffc <_vsnprintf+0x8ac> + 80001d58: 040f7793 andi a5,t5,64 + 80001d5c: 24079063 bnez a5,80001f9c <_vsnprintf+0x84c> + 80001d60: 08077713 andi a4,a4,128 + 80001d64: 2c070663 beqz a4,80002030 <_vsnprintf+0x8e0> + 80001d68: 0009a703 lw a4,0(s3) + 80001d6c: 01813783 ld a5,24(sp) + 80001d70: 00e7f733 and a4,a5,a4 + 80001d74: 02071713 slli a4,a4,0x20 + 80001d78: 000d0613 mv a2,s10 + 80001d7c: 01e13423 sd t5,8(sp) + 80001d80: 01b13023 sd s11,0(sp) + 80001d84: 000c8893 mv a7,s9 + 80001d88: 00000793 li a5,0 + 80001d8c: 02075713 srli a4,a4,0x20 + 80001d90: d89ff06f j 80001b18 <_vsnprintf+0x3c8> + 80001d94: 00060b13 mv s6,a2 + 80001d98: 02813783 ld a5,40(sp) + 80001d9c: 04078a63 beqz a5,80001df0 <_vsnprintf+0x6a0> + 80001da0: 000b0d13 mv s10,s6 + 80001da4: 01013703 ld a4,16(sp) + 80001da8: 0db77e63 bgeu a4,s11,80001e84 <_vsnprintf+0x734> + 80001dac: fffd879b addiw a5,s11,-1 + 80001db0: 40e7873b subw a4,a5,a4 + 80001db4: 02071713 slli a4,a4,0x20 + 80001db8: 02075713 srli a4,a4,0x20 + 80001dbc: 001d0813 addi a6,s10,1 + 80001dc0: 01070b33 add s6,a4,a6 + 80001dc4: 0080006f j 80001dcc <_vsnprintf+0x67c> + 80001dc8: 00180813 addi a6,a6,1 + 80001dcc: 000d0613 mv a2,s10 + 80001dd0: 01013823 sd a6,16(sp) + 80001dd4: 000c0693 mv a3,s8 + 80001dd8: 00048593 mv a1,s1 + 80001ddc: 02000513 li a0,32 + 80001de0: 00080d13 mv s10,a6 + 80001de4: 000900e7 jalr s2 + 80001de8: 01013803 ld a6,16(sp) + 80001dec: fd0b1ee3 bne s6,a6,80001dc8 <_vsnprintf+0x678> + 80001df0: 02013983 ld s3,32(sp) + 80001df4: 000b0d13 mv s10,s6 + 80001df8: 9edff06f j 800017e4 <_vsnprintf+0x94> + 80001dfc: 0006879b sext.w a5,a3 + 80001e00: 00f13823 sd a5,16(sp) + 80001e04: e21ff06f j 80001c24 <_vsnprintf+0x4d4> + 80001e08: 0c05e593 ori a1,a1,192 + 80001e0c: 00264503 lbu a0,2(a2) + 80001e10: 0005859b sext.w a1,a1 + 80001e14: 00360b93 addi s7,a2,3 + 80001e18: ad5ff06f j 800018ec <_vsnprintf+0x19c> + 80001e1c: 00000413 li s0,0 + 80001e20: b91ff06f j 800019b0 <_vsnprintf+0x260> + 80001e24: 01013703 ld a4,16(sp) + 80001e28: 0017079b addiw a5,a4,1 + 80001e2c: 21b77c63 bgeu a4,s11,80002044 <_vsnprintf+0x8f4> + 80001e30: fffd879b addiw a5,s11,-1 + 80001e34: 40e787bb subw a5,a5,a4 + 80001e38: 02079793 slli a5,a5,0x20 + 80001e3c: 0207d793 srli a5,a5,0x20 + 80001e40: 001d0813 addi a6,s10,1 + 80001e44: 01078b33 add s6,a5,a6 + 80001e48: 00c0006f j 80001e54 <_vsnprintf+0x704> + 80001e4c: 01013803 ld a6,16(sp) + 80001e50: 00180813 addi a6,a6,1 + 80001e54: 000d0613 mv a2,s10 + 80001e58: 000c0693 mv a3,s8 + 80001e5c: 00080d13 mv s10,a6 + 80001e60: 01013823 sd a6,16(sp) + 80001e64: 00048593 mv a1,s1 + 80001e68: 02000513 li a0,32 + 80001e6c: 000900e7 jalr s2 + 80001e70: fd6d1ee3 bne s10,s6,80001e4c <_vsnprintf+0x6fc> + 80001e74: 000ac503 lbu a0,0(s5) + 80001e78: 001d879b addiw a5,s11,1 + 80001e7c: 00f13823 sd a5,16(sp) + 80001e80: dc051ce3 bnez a0,80001c58 <_vsnprintf+0x508> + 80001e84: 000d0b13 mv s6,s10 + 80001e88: f69ff06f j 80001df0 <_vsnprintf+0x6a0> + 80001e8c: 00100793 li a5,1 + 80001e90: 1bb7f463 bgeu a5,s11,80002038 <_vsnprintf+0x8e8> + 80001e94: ffed879b addiw a5,s11,-2 + 80001e98: 02079a93 slli s5,a5,0x20 + 80001e9c: 020ada93 srli s5,s5,0x20 + 80001ea0: 010a8ab3 add s5,s5,a6 + 80001ea4: 00c0006f j 80001eb0 <_vsnprintf+0x760> + 80001ea8: 01013803 ld a6,16(sp) + 80001eac: 00180813 addi a6,a6,1 + 80001eb0: 000d0613 mv a2,s10 + 80001eb4: 000c0693 mv a3,s8 + 80001eb8: 00080d13 mv s10,a6 + 80001ebc: 01013823 sd a6,16(sp) + 80001ec0: 00048593 mv a1,s1 + 80001ec4: 02000513 li a0,32 + 80001ec8: 000900e7 jalr s2 + 80001ecc: fdaa9ee3 bne s5,s10,80001ea8 <_vsnprintf+0x758> + 80001ed0: 001a8d13 addi s10,s5,1 + 80001ed4: 0009c503 lbu a0,0(s3) + 80001ed8: 000c0693 mv a3,s8 + 80001edc: 000a8613 mv a2,s5 + 80001ee0: 00048593 mv a1,s1 + 80001ee4: 000900e7 jalr s2 + 80001ee8: 02013983 ld s3,32(sp) + 80001eec: 8f9ff06f j 800017e4 <_vsnprintf+0x94> + 80001ef0: 0009b783 ld a5,0(s3) + 80001ef4: 000d0613 mv a2,s10 + 80001ef8: 01e13423 sd t5,8(sp) + 80001efc: 43f7d713 srai a4,a5,0x3f + 80001f00: 00f745b3 xor a1,a4,a5 + 80001f04: 01b13023 sd s11,0(sp) + 80001f08: 000c8893 mv a7,s9 + 80001f0c: 03f7d793 srli a5,a5,0x3f + 80001f10: 40e58733 sub a4,a1,a4 + 80001f14: 000c0693 mv a3,s8 + 80001f18: 00048593 mv a1,s1 + 80001f1c: 00090513 mv a0,s2 + 80001f20: ed0ff0ef jal ra,800015f0 <_ntoa_long_long> + 80001f24: 00050d13 mv s10,a0 + 80001f28: 000a8993 mv s3,s5 + 80001f2c: 8b9ff06f j 800017e4 <_vsnprintf+0x94> + 80001f30: 2005f793 andi a5,a1,512 + 80001f34: 0007879b sext.w a5,a5 + 80001f38: 01000813 li a6,16 + 80001f3c: e0dff06f j 80001d48 <_vsnprintf+0x5f8> + 80001f40: 00a00813 li a6,10 + 80001f44: de5ff06f j 80001d28 <_vsnprintf+0x5d8> + 80001f48: 00800813 li a6,8 + 80001f4c: 00058f13 mv t5,a1 + 80001f50: 400f7713 andi a4,t5,1024 + 80001f54: 06400613 li a2,100 + 80001f58: 000f0793 mv a5,t5 + 80001f5c: 0007071b sext.w a4,a4 + 80001f60: 0ec51c63 bne a0,a2,80002058 <_vsnprintf+0x908> + 80001f64: dc0712e3 bnez a4,80001d28 <_vsnprintf+0x5d8> + 80001f68: 2007f793 andi a5,a5,512 + 80001f6c: 0007879b sext.w a5,a5 + 80001f70: b55ff06f j 80001ac4 <_vsnprintf+0x374> + 80001f74: 0009b703 ld a4,0(s3) + 80001f78: 000d0613 mv a2,s10 + 80001f7c: 01e13423 sd t5,8(sp) + 80001f80: 01b13023 sd s11,0(sp) + 80001f84: 000c8893 mv a7,s9 + 80001f88: 00000793 li a5,0 + 80001f8c: f89ff06f j 80001f14 <_vsnprintf+0x7c4> + 80001f90: 0ff7f793 andi a5,a5,255 + 80001f94: 00078713 mv a4,a5 + 80001f98: b6dff06f j 80001b04 <_vsnprintf+0x3b4> + 80001f9c: 0009c703 lbu a4,0(s3) + 80001fa0: dd5ff06f j 80001d74 <_vsnprintf+0x624> + 80001fa4: 02013983 ld s3,32(sp) + 80001fa8: 000b0d13 mv s10,s6 + 80001fac: 839ff06f j 800017e4 <_vsnprintf+0x94> + 80001fb0: 0009b783 ld a5,0(s3) + 80001fb4: 000d0613 mv a2,s10 + 80001fb8: 01e13423 sd t5,8(sp) + 80001fbc: 43f7d713 srai a4,a5,0x3f + 80001fc0: 00f745b3 xor a1,a4,a5 + 80001fc4: 01b13023 sd s11,0(sp) + 80001fc8: 000c8893 mv a7,s9 + 80001fcc: 03f7d793 srli a5,a5,0x3f + 80001fd0: 40e58733 sub a4,a1,a4 + 80001fd4: b45ff06f j 80001b18 <_vsnprintf+0x3c8> + 80001fd8: 00200813 li a6,2 + 80001fdc: f71ff06f j 80001f4c <_vsnprintf+0x7fc> + 80001fe0: 4005f713 andi a4,a1,1024 + 80001fe4: 0007071b sext.w a4,a4 + 80001fe8: 01000813 li a6,16 + 80001fec: ff35f593 andi a1,a1,-13 + 80001ff0: 00058f1b sext.w t5,a1 + 80001ff4: d2071ae3 bnez a4,80001d28 <_vsnprintf+0x5d8> + 80001ff8: d39ff06f j 80001d30 <_vsnprintf+0x5e0> + 80001ffc: 0009b703 ld a4,0(s3) + 80002000: 000d0613 mv a2,s10 + 80002004: 01e13423 sd t5,8(sp) + 80002008: 01b13023 sd s11,0(sp) + 8000200c: 000c8893 mv a7,s9 + 80002010: 00000793 li a5,0 + 80002014: b05ff06f j 80001b18 <_vsnprintf+0x3c8> + 80002018: 41f7d61b sraiw a2,a5,0x1f + 8000201c: 00c7c733 xor a4,a5,a2 + 80002020: 40c7073b subw a4,a4,a2 + 80002024: ae1ff06f j 80001b04 <_vsnprintf+0x3b4> + 80002028: 00013823 sd zero,16(sp) + 8000202c: bf9ff06f j 80001c24 <_vsnprintf+0x4d4> + 80002030: 0009a703 lw a4,0(s3) + 80002034: d41ff06f j 80001d74 <_vsnprintf+0x624> + 80002038: 000d0a93 mv s5,s10 + 8000203c: 00080d13 mv s10,a6 + 80002040: e95ff06f j 80001ed4 <_vsnprintf+0x784> + 80002044: 00f13823 sd a5,16(sp) + 80002048: c00518e3 bnez a0,80001c58 <_vsnprintf+0x508> + 8000204c: e39ff06f j 80001e84 <_vsnprintf+0x734> + 80002050: 00a00813 li a6,10 + 80002054: efdff06f j 80001f50 <_vsnprintf+0x800> + 80002058: 000f0593 mv a1,t5 + 8000205c: f91ff06f j 80001fec <_vsnprintf+0x89c> + +0000000080002060 <_out_char>: + 80002060: 00051463 bnez a0,80002068 <_out_char+0x8> + 80002064: 00008067 ret + 80002068: 985fe06f j 800009ec + +000000008000206c : + 8000206c: fa010113 addi sp,sp,-96 + 80002070: 02810313 addi t1,sp,40 + 80002074: 02b13423 sd a1,40(sp) + 80002078: 02c13823 sd a2,48(sp) + 8000207c: 02d13c23 sd a3,56(sp) + 80002080: 04e13023 sd a4,64(sp) + 80002084: 00050693 mv a3,a0 + 80002088: 00010593 mv a1,sp + 8000208c: 00030713 mv a4,t1 + 80002090: fff00613 li a2,-1 + 80002094: 00000517 auipc a0,0x0 + 80002098: fcc50513 addi a0,a0,-52 # 80002060 <_out_char> + 8000209c: 00113c23 sd ra,24(sp) + 800020a0: 04f13423 sd a5,72(sp) + 800020a4: 05013823 sd a6,80(sp) + 800020a8: 05113c23 sd a7,88(sp) + 800020ac: 00613423 sd t1,8(sp) + 800020b0: ea0ff0ef jal ra,80001750 <_vsnprintf> + 800020b4: 01813083 ld ra,24(sp) + 800020b8: 06010113 addi sp,sp,96 + 800020bc: 00008067 ret + +00000000800020c0 : + 800020c0: 00700713 li a4,7 + 800020c4: 00050793 mv a5,a0 + 800020c8: 0ac77a63 bgeu a4,a2,8000217c + 800020cc: 0ff5f893 andi a7,a1,255 + 800020d0: 00889693 slli a3,a7,0x8 + 800020d4: 0116e6b3 or a3,a3,a7 + 800020d8: 01069713 slli a4,a3,0x10 + 800020dc: 00d766b3 or a3,a4,a3 + 800020e0: 02069713 slli a4,a3,0x20 + 800020e4: 00757813 andi a6,a0,7 + 800020e8: 00d76733 or a4,a4,a3 + 800020ec: 0a080663 beqz a6,80002198 + 800020f0: 00c50633 add a2,a0,a2 + 800020f4: 01178023 sb a7,0(a5) + 800020f8: 00178793 addi a5,a5,1 + 800020fc: 0077f813 andi a6,a5,7 + 80002100: 40f606b3 sub a3,a2,a5 + 80002104: fe0818e3 bnez a6,800020f4 + 80002108: 0066d813 srli a6,a3,0x6 + 8000210c: 04080063 beqz a6,8000214c + 80002110: 00681613 slli a2,a6,0x6 + 80002114: 00078893 mv a7,a5 + 80002118: 00f60633 add a2,a2,a5 + 8000211c: 00e7b023 sd a4,0(a5) + 80002120: 00e7b423 sd a4,8(a5) + 80002124: 00e7b823 sd a4,16(a5) + 80002128: 00e7bc23 sd a4,24(a5) + 8000212c: 02e7b023 sd a4,32(a5) + 80002130: 02e7b423 sd a4,40(a5) + 80002134: 02e7b823 sd a4,48(a5) + 80002138: 02e7bc23 sd a4,56(a5) + 8000213c: 04078793 addi a5,a5,64 + 80002140: fcf61ee3 bne a2,a5,8000211c + 80002144: 00681793 slli a5,a6,0x6 + 80002148: 011787b3 add a5,a5,a7 + 8000214c: 0036d813 srli a6,a3,0x3 + 80002150: 00787813 andi a6,a6,7 + 80002154: 02080263 beqz a6,80002178 + 80002158: 00381613 slli a2,a6,0x3 + 8000215c: 00078893 mv a7,a5 + 80002160: 00f60633 add a2,a2,a5 + 80002164: 00e7b023 sd a4,0(a5) + 80002168: 00878793 addi a5,a5,8 + 8000216c: fef61ce3 bne a2,a5,80002164 + 80002170: 00381793 slli a5,a6,0x3 + 80002174: 011787b3 add a5,a5,a7 + 80002178: 0076f613 andi a2,a3,7 + 8000217c: 0ff5f593 andi a1,a1,255 + 80002180: 00c78733 add a4,a5,a2 + 80002184: 00060863 beqz a2,80002194 + 80002188: 00b78023 sb a1,0(a5) + 8000218c: 00178793 addi a5,a5,1 + 80002190: fef71ce3 bne a4,a5,80002188 + 80002194: 00008067 ret + 80002198: 00060693 mv a3,a2 + 8000219c: f6dff06f j 80002108 + +00000000800021a0 : + 800021a0: 40b506b3 sub a3,a0,a1 + 800021a4: 0005c703 lbu a4,0(a1) + 800021a8: 00d587b3 add a5,a1,a3 + 800021ac: 00158593 addi a1,a1,1 + 800021b0: 00e78023 sb a4,0(a5) + 800021b4: fe0718e3 bnez a4,800021a4 + 800021b8: 00008067 ret + +00000000800021bc : + 800021bc: 1a050e63 beqz a0,80002378 + 800021c0: fd010113 addi sp,sp,-48 + 800021c4: 02813023 sd s0,32(sp) + 800021c8: 00913c23 sd s1,24(sp) + 800021cc: 01f57793 andi a5,a0,31 + 800021d0: 02113423 sd ra,40(sp) + 800021d4: 01213823 sd s2,16(sp) + 800021d8: 01313423 sd s3,8(sp) + 800021dc: 01413023 sd s4,0(sp) + 800021e0: 00050493 mv s1,a0 + 800021e4: 00050413 mv s0,a0 + 800021e8: 00000513 li a0,0 + 800021ec: 14079a63 bnez a5,80002340 + 800021f0: 27f00713 li a4,639 + 800021f4: 00058913 mv s2,a1 + 800021f8: 00078513 mv a0,a5 + 800021fc: 14b77263 bgeu a4,a1,80002340 + 80002200: 0074f513 andi a0,s1,7 + 80002204: 00153513 seqz a0,a0 + 80002208: 00060a13 mv s4,a2 + 8000220c: 00068993 mv s3,a3 + 80002210: ff4fe0ef jal ra,80000a04 <_assert> + 80002214: 20048793 addi a5,s1,512 + 80002218: 2004b023 sd zero,512(s1) + 8000221c: 2144b423 sd s4,520(s1) + 80002220: 2134b823 sd s3,528(s1) + 80002224: 00043023 sd zero,0(s0) + 80002228: 00840413 addi s0,s0,8 + 8000222c: fe879ce3 bne a5,s0,80002224 + 80002230: fff00793 li a5,-1 + 80002234: dc090413 addi s0,s2,-576 + 80002238: 03f79793 slli a5,a5,0x3f + 8000223c: 1287f863 bgeu a5,s0,8000236c + 80002240: 00078413 mv s0,a5 + 80002244: 00100513 li a0,1 + 80002248: fbcfe0ef jal ra,80000a04 <_assert> + 8000224c: f8300793 li a5,-125 + 80002250: 0017d793 srli a5,a5,0x1 + 80002254: fc040513 addi a0,s0,-64 + 80002258: 00f53533 sltu a0,a0,a5 + 8000225c: fa8fe0ef jal ra,80000a04 <_assert> + 80002260: 01f4f513 andi a0,s1,31 + 80002264: 00153513 seqz a0,a0 + 80002268: f9cfe0ef jal ra,80000a04 <_assert> + 8000226c: 00100513 li a0,1 + 80002270: 2404b023 sd zero,576(s1) + 80002274: 2404b423 sd zero,584(s1) + 80002278: 2484b823 sd s0,592(s1) + 8000227c: 24048c23 sb zero,600(s1) + 80002280: 2604b023 sd zero,608(s1) + 80002284: 2604b423 sd zero,616(s1) + 80002288: f7cfe0ef jal ra,80000a04 <_assert> + 8000228c: 00100513 li a0,1 + 80002290: f74fe0ef jal ra,80000a04 <_assert> + 80002294: 2504b503 ld a0,592(s1) + 80002298: 24048a13 addi s4,s1,576 + 8000229c: 04053513 sltiu a0,a0,64 + 800022a0: 00154513 xori a0,a0,1 + 800022a4: 00157513 andi a0,a0,1 + 800022a8: f5cfe0ef jal ra,80000a04 <_assert> + 800022ac: 2504b503 ld a0,592(s1) + 800022b0: 03f57513 andi a0,a0,63 + 800022b4: 00153513 seqz a0,a0 + 800022b8: f4cfe0ef jal ra,80000a04 <_assert> + 800022bc: 2504b703 ld a4,592(s1) + 800022c0: 00100793 li a5,1 + 800022c4: 00675713 srli a4,a4,0x6 + 800022c8: 0ae7fc63 bgeu a5,a4,80002380 + 800022cc: 00000793 li a5,0 + 800022d0: 00100693 li a3,1 + 800022d4: 0017879b addiw a5,a5,1 + 800022d8: 00175713 srli a4,a4,0x1 + 800022dc: 0ff7f793 andi a5,a5,255 + 800022e0: fed71ae3 bne a4,a3,800022d4 + 800022e4: 00078993 mv s3,a5 + 800022e8: 0407b513 sltiu a0,a5,64 + 800022ec: 00f71933 sll s2,a4,a5 + 800022f0: f14fe0ef jal ra,80000a04 <_assert> + 800022f4: 00399793 slli a5,s3,0x3 + 800022f8: 00f487b3 add a5,s1,a5 + 800022fc: 0007b703 ld a4,0(a5) + 80002300: 2604b423 sd zero,616(s1) + 80002304: 26e4b023 sd a4,608(s1) + 80002308: 00070463 beqz a4,80002310 + 8000230c: 03473423 sd s4,40(a4) + 80002310: 0147b023 sd s4,0(a5) + 80002314: 2004b503 ld a0,512(s1) + 80002318: 00a96533 or a0,s2,a0 + 8000231c: 20a4b023 sd a0,512(s1) + 80002320: 00a03533 snez a0,a0 + 80002324: ee0fe0ef jal ra,80000a04 <_assert> + 80002328: 00048513 mv a0,s1 + 8000232c: 2084bc23 sd s0,536(s1) + 80002330: 2204b023 sd zero,544(s1) + 80002334: 2204b423 sd zero,552(s1) + 80002338: 2204b823 sd zero,560(s1) + 8000233c: 2204bc23 sd zero,568(s1) + 80002340: 02813083 ld ra,40(sp) + 80002344: 02013403 ld s0,32(sp) + 80002348: 01813483 ld s1,24(sp) + 8000234c: 01013903 ld s2,16(sp) + 80002350: 00813983 ld s3,8(sp) + 80002354: 00013a03 ld s4,0(sp) + 80002358: 03010113 addi sp,sp,48 + 8000235c: 00008067 ret + 80002360: 00100513 li a0,1 + 80002364: fff40413 addi s0,s0,-1 + 80002368: e9cfe0ef jal ra,80000a04 <_assert> + 8000236c: 03f47793 andi a5,s0,63 + 80002370: fe0798e3 bnez a5,80002360 + 80002374: ed1ff06f j 80002244 + 80002378: 00000513 li a0,0 + 8000237c: 00008067 ret + 80002380: 00100913 li s2,1 + 80002384: 00000993 li s3,0 + 80002388: 00100513 li a0,1 + 8000238c: f65ff06f j 800022f0 diff --git a/bin/custom-output/benchmark/microbench/microbench-huge.elf b/bin/custom-output/benchmark/microbench/microbench-huge.elf new file mode 100755 index 0000000000000000000000000000000000000000..4c28f5c9b46e88a1352b874308f10010fb405750 GIT binary patch literal 256912 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

$ZqMJzc~4XR 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: + 80000000: 00000413 li s0,0 + 80000004: 00010117 auipc sp,0x10 + 80000008: ffc10113 addi sp,sp,-4 # 80010000 <_end> + 8000000c: 0ad040ef jal ra,800048b8 <_trm_init> + +0000000080000010 : + 80000010: fd010113 addi sp,sp,-48 + 80000014: 3e800593 li a1,1000 + 80000018: 02813023 sd s0,32(sp) + 8000001c: 02113423 sd ra,40(sp) + 80000020: 00050413 mv s0,a0 + 80000024: 00913c23 sd s1,24(sp) + 80000028: 01213823 sd s2,16(sp) + 8000002c: 01313423 sd s3,8(sp) + 80000030: 119040ef jal ra,80004948 <__udivdi3> + 80000034: 0055179b slliw a5,a0,0x5 + 80000038: 40a787bb subw a5,a5,a0 + 8000003c: 0027979b slliw a5,a5,0x2 + 80000040: 00a787bb addw a5,a5,a0 + 80000044: 0037979b slliw a5,a5,0x3 + 80000048: 02079793 slli a5,a5,0x20 + 8000004c: 0207d793 srli a5,a5,0x20 + 80000050: 40f40433 sub s0,s0,a5 + 80000054: 3e700793 li a5,999 + 80000058: 0887e263 bltu a5,s0,800000dc + 8000005c: 00008497 auipc s1,0x8 + 80000060: 93c48493 addi s1,s1,-1732 # 80007998 + 80000064: 0005061b sext.w a2,a0 + 80000068: 00006597 auipc a1,0x6 + 8000006c: 29058593 addi a1,a1,656 # 800062f8 <_etext+0x64> + 80000070: 00048513 mv a0,s1 + 80000074: 71d050ef jal ra,80005f90 + 80000078: fff5051b addiw a0,a0,-1 + 8000007c: 00a484b3 add s1,s1,a0 + 80000080: 02040c63 beqz s0,800000b8 + 80000084: 00900993 li s3,9 + 80000088: 00a00593 li a1,10 + 8000008c: 00040513 mv a0,s0 + 80000090: 101040ef jal ra,80004990 <__umoddi3> + 80000094: 0305079b addiw a5,a0,48 + 80000098: 00f48023 sb a5,0(s1) + 8000009c: 00040513 mv a0,s0 + 800000a0: 00a00593 li a1,10 + 800000a4: 00040913 mv s2,s0 + 800000a8: 0a1040ef jal ra,80004948 <__udivdi3> + 800000ac: fff48493 addi s1,s1,-1 + 800000b0: 00050413 mv s0,a0 + 800000b4: fd29eae3 bltu s3,s2,80000088 + 800000b8: 02813083 ld ra,40(sp) + 800000bc: 02013403 ld s0,32(sp) + 800000c0: 01813483 ld s1,24(sp) + 800000c4: 01013903 ld s2,16(sp) + 800000c8: 00813983 ld s3,8(sp) + 800000cc: 00008517 auipc a0,0x8 + 800000d0: 8cc50513 addi a0,a0,-1844 # 80007998 + 800000d4: 03010113 addi sp,sp,48 + 800000d8: 00008067 ret + 800000dc: 01100613 li a2,17 + 800000e0: 00006597 auipc a1,0x6 + 800000e4: 1b858593 addi a1,a1,440 # 80006298 <_etext+0x4> + 800000e8: 00006517 auipc a0,0x6 + 800000ec: 1f050513 addi a0,a0,496 # 800062d8 <_etext+0x44> + 800000f0: 64d050ef jal ra,80005f3c + 800000f4: 00100513 li a0,1 + 800000f8: 79c040ef jal ra,80004894 + +00000000800000fc

: + 800000fc: f5010113 addi sp,sp,-176 + 80000100: 0a113423 sd ra,168(sp) + 80000104: 0a813023 sd s0,160(sp) + 80000108: 08913c23 sd s1,152(sp) + 8000010c: 09213823 sd s2,144(sp) + 80000110: 09313423 sd s3,136(sp) + 80000114: 09413023 sd s4,128(sp) + 80000118: 07513c23 sd s5,120(sp) + 8000011c: 07613823 sd s6,112(sp) + 80000120: 07713423 sd s7,104(sp) + 80000124: 07813023 sd s8,96(sp) + 80000128: 05913c23 sd s9,88(sp) + 8000012c: 05a13823 sd s10,80(sp) + 80000130: 05b13423 sd s11,72(sp) + 80000134: 30050c63 beqz a0,8000044c + 80000138: 00006597 auipc a1,0x6 + 8000013c: 29058593 addi a1,a1,656 # 800063c8 <_etext+0x134> + 80000140: 00050413 mv s0,a0 + 80000144: 50d040ef jal ra,80004e50 + 80000148: 30050263 beqz a0,8000044c + 8000014c: 00006597 auipc a1,0x6 + 80000150: 1f458593 addi a1,a1,500 # 80006340 <_etext+0xac> + 80000154: 00040513 mv a0,s0 + 80000158: 4f9040ef jal ra,80004e50 + 8000015c: 00a13423 sd a0,8(sp) + 80000160: 02050063 beqz a0,80000180 + 80000164: 00006597 auipc a1,0x6 + 80000168: 1e458593 addi a1,a1,484 # 80006348 <_etext+0xb4> + 8000016c: 00040513 mv a0,s0 + 80000170: 4e1040ef jal ra,80004e50 + 80000174: 00100793 li a5,1 + 80000178: 00f13423 sd a5,8(sp) + 8000017c: 34051663 bnez a0,800004c8 + 80000180: 105040ef jal ra,80004a84 + 80000184: 00040593 mv a1,s0 + 80000188: 00006517 auipc a0,0x6 + 8000018c: 21050513 addi a0,a0,528 # 80006398 <_etext+0x104> + 80000190: 5ad050ef jal ra,80005f3c + 80000194: 03810593 addi a1,sp,56 + 80000198: 00600513 li a0,6 + 8000019c: 13d040ef jal ra,80004ad8 + 800001a0: 00813783 ld a5,8(sp) + 800001a4: 00007c17 auipc s8,0x7 + 800001a8: c4cc0c13 addi s8,s8,-948 # 80006df0 + 800001ac: 00007b97 auipc s7,0x7 + 800001b0: 2d4b8b93 addi s7,s7,724 # 80007480 + 800001b4: 00178993 addi s3,a5,1 + 800001b8: 03813783 ld a5,56(sp) + 800001bc: 00599993 slli s3,s3,0x5 + 800001c0: fe098b13 addi s6,s3,-32 + 800001c4: 02f13423 sd a5,40(sp) + 800001c8: 00100793 li a5,1 + 800001cc: 00000d93 li s11,0 + 800001d0: 00f13c23 sd a5,24(sp) + 800001d4: 02013023 sd zero,32(sp) + 800001d8: 00008497 auipc s1,0x8 + 800001dc: 8f048493 addi s1,s1,-1808 # 80007ac8 + 800001e0: 00008a97 auipc s5,0x8 + 800001e4: 8f0a8a93 addi s5,s5,-1808 # 80007ad0 + 800001e8: 00898993 addi s3,s3,8 + 800001ec: 00007417 auipc s0,0x7 + 800001f0: 39c40413 addi s0,s0,924 # 80007588 + 800001f4: 00006a17 auipc s4,0x6 + 800001f8: 1dca0a13 addi s4,s4,476 # 800063d0 <_etext+0x13c> + 800001fc: 00006d17 auipc s10,0x6 + 80000200: 1e4d0d13 addi s10,s10,484 # 800063e0 <_etext+0x14c> + 80000204: 00006c97 auipc s9,0x6 + 80000208: 1f4c8c93 addi s9,s9,500 # 800063f8 <_etext+0x164> + 8000020c: 01c0006f j 80000228 + 80000210: 52d050ef jal ra,80005f3c + 80000214: 000d0593 mv a1,s10 + 80000218: 000c8513 mv a0,s9 + 8000021c: 0a8c0c13 addi s8,s8,168 + 80000220: 51d050ef jal ra,80005f3c + 80000224: 137c0a63 beq s8,s7,80000358 + 80000228: 00043603 ld a2,0(s0) + 8000022c: 00843703 ld a4,8(s0) + 80000230: 016c06b3 add a3,s8,s6 + 80000234: 0306b683 ld a3,48(a3) + 80000238: 018985b3 add a1,s3,s8 + 8000023c: 00bab023 sd a1,0(s5) + 80000240: 40c70733 sub a4,a4,a2 + 80000244: 0184b023 sd s8,0(s1) + 80000248: 018c3583 ld a1,24(s8) + 8000024c: 020c3603 ld a2,32(s8) + 80000250: 000a0513 mv a0,s4 + 80000254: fad76ee3 bltu a4,a3,80000210 + 80000258: 4e5050ef jal ra,80005f3c + 8000025c: 0004b683 ld a3,0(s1) + 80000260: 00043703 ld a4,0(s0) + 80000264: 00007797 auipc a5,0x7 + 80000268: 75478793 addi a5,a5,1876 # 800079b8 + 8000026c: 0006b683 ld a3,0(a3) + 80000270: 00770713 addi a4,a4,7 + 80000274: ff877713 andi a4,a4,-8 + 80000278: 00e7b023 sd a4,0(a5) + 8000027c: 000680e7 jalr a3 + 80000280: 03810593 addi a1,sp,56 + 80000284: 00600513 li a0,6 + 80000288: 051040ef jal ra,80004ad8 + 8000028c: 0004b703 ld a4,0(s1) + 80000290: 03813903 ld s2,56(sp) + 80000294: 00873703 ld a4,8(a4) + 80000298: 000700e7 jalr a4 + 8000029c: 03810593 addi a1,sp,56 + 800002a0: 00600513 li a0,6 + 800002a4: 035040ef jal ra,80004ad8 + 800002a8: 0004b703 ld a4,0(s1) + 800002ac: 03813683 ld a3,56(sp) + 800002b0: 01073703 ld a4,16(a4) + 800002b4: 41268933 sub s2,a3,s2 + 800002b8: 000700e7 jalr a4 + 800002bc: 1c050663 beqz a0,80000488 + 800002c0: 00a13823 sd a0,16(sp) + 800002c4: 00006517 auipc a0,0x6 + 800002c8: 14450513 addi a0,a0,324 # 80006408 <_etext+0x174> + 800002cc: 471050ef jal ra,80005f3c + 800002d0: 01013703 ld a4,16(sp) + 800002d4: 00177713 andi a4,a4,1 + 800002d8: 1a070e63 beqz a4,80000494 + 800002dc: 00006517 auipc a0,0x6 + 800002e0: 13450513 addi a0,a0,308 # 80006410 <_etext+0x17c> + 800002e4: 459050ef jal ra,80005f3c + 800002e8: 00013823 sd zero,16(sp) + 800002ec: 04090663 beqz s2,80000338 + 800002f0: 000ab703 ld a4,0(s5) + 800002f4: 00090593 mv a1,s2 + 800002f8: 01073683 ld a3,16(a4) + 800002fc: 00169713 slli a4,a3,0x1 + 80000300: 00d70733 add a4,a4,a3 + 80000304: 00671513 slli a0,a4,0x6 + 80000308: 00a70533 add a0,a4,a0 + 8000030c: 00251513 slli a0,a0,0x2 + 80000310: 00d50533 add a0,a0,a3 + 80000314: 00251513 slli a0,a0,0x2 + 80000318: 00d50533 add a0,a0,a3 + 8000031c: 00551513 slli a0,a0,0x5 + 80000320: 628040ef jal ra,80004948 <__udivdi3> + 80000324: 0005079b sext.w a5,a0 + 80000328: 00f13823 sd a5,16(sp) + 8000032c: 02013783 ld a5,32(sp) + 80000330: 00f507bb addw a5,a0,a5 + 80000334: 02f13023 sd a5,32(sp) + 80000338: 00006517 auipc a0,0x6 + 8000033c: 16850513 addi a0,a0,360 # 800064a0 <_etext+0x20c> + 80000340: 3fd050ef jal ra,80005f3c + 80000344: 00813783 ld a5,8(sp) + 80000348: 10079e63 bnez a5,80000464 + 8000034c: 012d8db3 add s11,s11,s2 + 80000350: 0a8c0c13 addi s8,s8,168 + 80000354: ed7c1ae3 bne s8,s7,80000228 + 80000358: 03810593 addi a1,sp,56 + 8000035c: 00600513 li a0,6 + 80000360: 778040ef jal ra,80004ad8 + 80000364: 02813783 ld a5,40(sp) + 80000368: 03813403 ld s0,56(sp) + 8000036c: 00006517 auipc a0,0x6 + 80000370: 0dc50513 addi a0,a0,220 # 80006448 <_etext+0x1b4> + 80000374: 40f40433 sub s0,s0,a5 + 80000378: 3c5050ef jal ra,80005f3c + 8000037c: 01813783 ld a5,24(sp) + 80000380: 00006597 auipc a1,0x6 + 80000384: f8858593 addi a1,a1,-120 # 80006308 <_etext+0x74> + 80000388: 12078263 beqz a5,800004ac + 8000038c: 00006517 auipc a0,0x6 + 80000390: 0f450513 addi a0,a0,244 # 80006480 <_etext+0x1ec> + 80000394: 3a9050ef jal ra,80005f3c + 80000398: 00813703 ld a4,8(sp) + 8000039c: 00100793 li a5,1 + 800003a0: 10e7dc63 bge a5,a4,800004b8 + 800003a4: 02016503 lwu a0,32(sp) + 800003a8: 00a00593 li a1,10 + 800003ac: 59c040ef jal ra,80004948 <__udivdi3> + 800003b0: 0005059b sext.w a1,a0 + 800003b4: 00006517 auipc a0,0x6 + 800003b8: 0dc50513 addi a0,a0,220 # 80006490 <_etext+0x1fc> + 800003bc: 381050ef jal ra,80005f3c + 800003c0: 000185b7 lui a1,0x18 + 800003c4: 00006617 auipc a2,0x6 + 800003c8: 0e460613 addi a2,a2,228 # 800064a8 <_etext+0x214> + 800003cc: 6a058593 addi a1,a1,1696 # 186a0 <_entry_offset+0x186a0> + 800003d0: 00006517 auipc a0,0x6 + 800003d4: 0f050513 addi a0,a0,240 # 800064c0 <_etext+0x22c> + 800003d8: 365050ef jal ra,80005f3c + 800003dc: 000d8513 mv a0,s11 + 800003e0: c31ff0ef jal ra,80000010 + 800003e4: 00050593 mv a1,a0 + 800003e8: 00006517 auipc a0,0x6 + 800003ec: 10050513 addi a0,a0,256 # 800064e8 <_etext+0x254> + 800003f0: 34d050ef jal ra,80005f3c + 800003f4: 00040513 mv a0,s0 + 800003f8: c19ff0ef jal ra,80000010 + 800003fc: 00050593 mv a1,a0 + 80000400: 00006517 auipc a0,0x6 + 80000404: 10050513 addi a0,a0,256 # 80006500 <_etext+0x26c> + 80000408: 335050ef jal ra,80005f3c + 8000040c: 0a813083 ld ra,168(sp) + 80000410: 0a013403 ld s0,160(sp) + 80000414: 09813483 ld s1,152(sp) + 80000418: 09013903 ld s2,144(sp) + 8000041c: 08813983 ld s3,136(sp) + 80000420: 08013a03 ld s4,128(sp) + 80000424: 07813a83 ld s5,120(sp) + 80000428: 07013b03 ld s6,112(sp) + 8000042c: 06813b83 ld s7,104(sp) + 80000430: 06013c03 ld s8,96(sp) + 80000434: 05813c83 ld s9,88(sp) + 80000438: 05013d03 ld s10,80(sp) + 8000043c: 04813d83 ld s11,72(sp) + 80000440: 00000513 li a0,0 + 80000444: 0b010113 addi sp,sp,176 + 80000448: 00008067 ret + 8000044c: 00006517 auipc a0,0x6 + 80000450: ecc50513 addi a0,a0,-308 # 80006318 <_etext+0x84> + 80000454: 2e9050ef jal ra,80005f3c + 80000458: 00006417 auipc s0,0x6 + 8000045c: ea840413 addi s0,s0,-344 # 80006300 <_etext+0x6c> + 80000460: cedff06f j 8000014c + 80000464: 00090513 mv a0,s2 + 80000468: ba9ff0ef jal ra,80000010 + 8000046c: 01013603 ld a2,16(sp) + 80000470: 00050593 mv a1,a0 + 80000474: 00006517 auipc a0,0x6 + 80000478: fbc50513 addi a0,a0,-68 # 80006430 <_etext+0x19c> + 8000047c: 2c1050ef jal ra,80005f3c + 80000480: 012d8db3 add s11,s11,s2 + 80000484: ecdff06f j 80000350 + 80000488: 00006517 auipc a0,0x6 + 8000048c: 09050513 addi a0,a0,144 # 80006518 <_etext+0x284> + 80000490: 2ad050ef jal ra,80005f3c + 80000494: 00006517 auipc a0,0x6 + 80000498: f8c50513 addi a0,a0,-116 # 80006420 <_etext+0x18c> + 8000049c: 2a1050ef jal ra,80005f3c + 800004a0: 00013c23 sd zero,24(sp) + 800004a4: 00013823 sd zero,16(sp) + 800004a8: e91ff06f j 80000338 + 800004ac: 00006597 auipc a1,0x6 + 800004b0: e6458593 addi a1,a1,-412 # 80006310 <_etext+0x7c> + 800004b4: ed9ff06f j 8000038c + 800004b8: 00006517 auipc a0,0x6 + 800004bc: fe850513 addi a0,a0,-24 # 800064a0 <_etext+0x20c> + 800004c0: 27d050ef jal ra,80005f3c + 800004c4: f19ff06f j 800003dc + 800004c8: 00006597 auipc a1,0x6 + 800004cc: e3858593 addi a1,a1,-456 # 80006300 <_etext+0x6c> + 800004d0: 00040513 mv a0,s0 + 800004d4: 17d040ef jal ra,80004e50 + 800004d8: 00200793 li a5,2 + 800004dc: 00f13423 sd a5,8(sp) + 800004e0: ca0500e3 beqz a0,80000180 + 800004e4: 00006597 auipc a1,0x6 + 800004e8: e6c58593 addi a1,a1,-404 # 80006350 <_etext+0xbc> + 800004ec: 00040513 mv a0,s0 + 800004f0: 161040ef jal ra,80004e50 + 800004f4: 00300793 li a5,3 + 800004f8: 00f13423 sd a5,8(sp) + 800004fc: c80502e3 beqz a0,80000180 + 80000500: 00040593 mv a1,s0 + 80000504: 00006517 auipc a0,0x6 + 80000508: e5450513 addi a0,a0,-428 # 80006358 <_etext+0xc4> + 8000050c: 231050ef jal ra,80005f3c + 80000510: 00100513 li a0,1 + 80000514: 380040ef jal ra,80004894 + +0000000080000518 : + 80000518: 00007597 auipc a1,0x7 + 8000051c: 4a058593 addi a1,a1,1184 # 800079b8 + 80000520: 0005b683 ld a3,0(a1) + 80000524: 00750713 addi a4,a0,7 + 80000528: 00007797 auipc a5,0x7 + 8000052c: 06078793 addi a5,a5,96 # 80007588 + 80000530: ff010113 addi sp,sp,-16 + 80000534: ff877713 andi a4,a4,-8 + 80000538: 0007b603 ld a2,0(a5) + 8000053c: 00113423 sd ra,8(sp) + 80000540: 00e68733 add a4,a3,a4 + 80000544: 00e5b023 sd a4,0(a1) + 80000548: 04c76263 bltu a4,a2,8000058c + 8000054c: 0087b783 ld a5,8(a5) + 80000550: 02f77e63 bgeu a4,a5,8000058c + 80000554: 00068793 mv a5,a3 + 80000558: 00d70863 beq a4,a3,80000568 + 8000055c: 0007b023 sd zero,0(a5) + 80000560: 00878793 addi a5,a5,8 + 80000564: fef71ce3 bne a4,a5,8000055c + 80000568: 00007797 auipc a5,0x7 + 8000056c: 5687b783 ld a5,1384(a5) # 80007ad0 + 80000570: 0087b783 ld a5,8(a5) + 80000574: 40c70733 sub a4,a4,a2 + 80000578: 02e7ea63 bltu a5,a4,800005ac + 8000057c: 00813083 ld ra,8(sp) + 80000580: 00068513 mv a0,a3 + 80000584: 01010113 addi sp,sp,16 + 80000588: 00008067 ret + 8000058c: 0a100613 li a2,161 + 80000590: 00006597 auipc a1,0x6 + 80000594: d0858593 addi a1,a1,-760 # 80006298 <_etext+0x4> + 80000598: 00006517 auipc a0,0x6 + 8000059c: d4050513 addi a0,a0,-704 # 800062d8 <_etext+0x44> + 800005a0: 19d050ef jal ra,80005f3c + 800005a4: 00100513 li a0,1 + 800005a8: 2ec040ef jal ra,80004894 + 800005ac: 0a500613 li a2,165 + 800005b0: fe1ff06f j 80000590 + +00000000800005b4 : + 800005b4: 03151513 slli a0,a0,0x31 + 800005b8: 03155513 srli a0,a0,0x31 + 800005bc: 00007797 auipc a5,0x7 + 800005c0: eca7a223 sw a0,-316(a5) # 80007480 + 800005c4: 00008067 ret + +00000000800005c8 : + 800005c8: 00007697 auipc a3,0x7 + 800005cc: eb868693 addi a3,a3,-328 # 80007480 + 800005d0: 0006a703 lw a4,0(a3) + 800005d4: 0017179b slliw a5,a4,0x1 + 800005d8: 00e787bb addw a5,a5,a4 + 800005dc: 0027979b slliw a5,a5,0x2 + 800005e0: 00e787bb addw a5,a5,a4 + 800005e4: 0047979b slliw a5,a5,0x4 + 800005e8: 00e787bb addw a5,a5,a4 + 800005ec: 0087979b slliw a5,a5,0x8 + 800005f0: 40e787bb subw a5,a5,a4 + 800005f4: 0027979b slliw a5,a5,0x2 + 800005f8: 00e787bb addw a5,a5,a4 + 800005fc: 0026a737 lui a4,0x26a + 80000600: ec37071b addiw a4,a4,-317 + 80000604: 00e787bb addw a5,a5,a4 + 80000608: 02179513 slli a0,a5,0x21 + 8000060c: 00f6a023 sw a5,0(a3) + 80000610: 03155513 srli a0,a0,0x31 + 80000614: 00008067 ret + +0000000080000618 : + 80000618: 00450613 addi a2,a0,4 + 8000061c: 08b67063 bgeu a2,a1,8000069c + 80000620: 811ca737 lui a4,0x811ca + 80000624: dc570713 addi a4,a4,-571 # ffffffff811c9dc5 <_end+0xffffffff011b9dc5> + 80000628: 00050693 mv a3,a0 + 8000062c: 0006c783 lbu a5,0(a3) + 80000630: 00168693 addi a3,a3,1 + 80000634: 00f74733 xor a4,a4,a5 + 80000638: 00f7179b slliw a5,a4,0xf + 8000063c: 00e787bb addw a5,a5,a4 + 80000640: 0027979b slliw a5,a5,0x2 + 80000644: 40e787bb subw a5,a5,a4 + 80000648: 0037979b slliw a5,a5,0x3 + 8000064c: 00e787bb addw a5,a5,a4 + 80000650: 0027979b slliw a5,a5,0x2 + 80000654: 00e787bb addw a5,a5,a4 + 80000658: 0027979b slliw a5,a5,0x2 + 8000065c: 40e7873b subw a4,a5,a4 + 80000660: fcd616e3 bne a2,a3,8000062c + 80000664: 00460613 addi a2,a2,4 + 80000668: 00450513 addi a0,a0,4 + 8000066c: fab66ee3 bltu a2,a1,80000628 + 80000670: 00d7151b slliw a0,a4,0xd + 80000674: 00e5073b addw a4,a0,a4 + 80000678: 4077551b sraiw a0,a4,0x7 + 8000067c: 00a74733 xor a4,a4,a0 + 80000680: 0037151b slliw a0,a4,0x3 + 80000684: 00e5053b addw a0,a0,a4 + 80000688: 4115579b sraiw a5,a0,0x11 + 8000068c: 00f54533 xor a0,a0,a5 + 80000690: 0055179b slliw a5,a0,0x5 + 80000694: 00a7853b addw a0,a5,a0 + 80000698: 00008067 ret + 8000069c: a6f00537 lui a0,0xa6f00 + 800006a0: 79e50513 addi a0,a0,1950 # ffffffffa6f0079e <_end+0xffffffff26ef079e> + 800006a4: 00008067 ret + +00000000800006a8 <_ZN5Dinic3DFSEii>: + 800006a8: 00c52783 lw a5,12(a0) + 800006ac: fc010113 addi sp,sp,-64 + 800006b0: 01413823 sd s4,16(sp) + 800006b4: 01513423 sd s5,8(sp) + 800006b8: 02113c23 sd ra,56(sp) + 800006bc: 02813823 sd s0,48(sp) + 800006c0: 02913423 sd s1,40(sp) + 800006c4: 03213023 sd s2,32(sp) + 800006c8: 01313c23 sd s3,24(sp) + 800006cc: 01613023 sd s6,0(sp) + 800006d0: 00060a13 mv s4,a2 + 800006d4: 00060a93 mv s5,a2 + 800006d8: 0cb78663 beq a5,a1,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 800006dc: 00000a93 li s5,0 + 800006e0: 0c060263 beqz a2,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 800006e4: 03053783 ld a5,48(a0) + 800006e8: 00259993 slli s3,a1,0x2 + 800006ec: fff00713 li a4,-1 + 800006f0: 013787b3 add a5,a5,s3 + 800006f4: 0007a403 lw s0,0(a5) + 800006f8: 00050913 mv s2,a0 + 800006fc: 0ae40463 beq s0,a4,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 80000700: fff00b13 li s6,-1 + 80000704: 0180006f j 8000071c <_ZN5Dinic3DFSEii+0x74> + 80000708: 02093783 ld a5,32(s2) + 8000070c: 00241413 slli s0,s0,0x2 + 80000710: 00878433 add s0,a5,s0 + 80000714: 00042403 lw s0,0(s0) + 80000718: 09640663 beq s0,s6,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 8000071c: 01093703 ld a4,16(s2) + 80000720: 00441493 slli s1,s0,0x4 + 80000724: 02893783 ld a5,40(s2) + 80000728: 009704b3 add s1,a4,s1 + 8000072c: 0044a583 lw a1,4(s1) + 80000730: 01378733 add a4,a5,s3 + 80000734: 00072703 lw a4,0(a4) + 80000738: 00259693 slli a3,a1,0x2 + 8000073c: 00d787b3 add a5,a5,a3 + 80000740: 0007a683 lw a3,0(a5) + 80000744: 0017079b addiw a5,a4,1 + 80000748: fcd790e3 bne a5,a3,80000708 <_ZN5Dinic3DFSEii+0x60> + 8000074c: 0084a603 lw a2,8(s1) + 80000750: 00c4a783 lw a5,12(s1) + 80000754: 00090513 mv a0,s2 + 80000758: 40f607bb subw a5,a2,a5 + 8000075c: 00078613 mv a2,a5 + 80000760: 00fa5463 bge s4,a5,80000768 <_ZN5Dinic3DFSEii+0xc0> + 80000764: 000a061b sext.w a2,s4 + 80000768: f41ff0ef jal ra,800006a8 <_ZN5Dinic3DFSEii> + 8000076c: 00144793 xori a5,s0,1 + 80000770: 00479793 slli a5,a5,0x4 + 80000774: f8a05ae3 blez a0,80000708 <_ZN5Dinic3DFSEii+0x60> + 80000778: 00c4a683 lw a3,12(s1) + 8000077c: 01093703 ld a4,16(s2) + 80000780: 40aa0a3b subw s4,s4,a0 + 80000784: 00a686bb addw a3,a3,a0 + 80000788: 00d4a623 sw a3,12(s1) + 8000078c: 00f707b3 add a5,a4,a5 + 80000790: 00c7a703 lw a4,12(a5) + 80000794: 01550abb addw s5,a0,s5 + 80000798: 40a7053b subw a0,a4,a0 + 8000079c: 00a7a623 sw a0,12(a5) + 800007a0: f60a14e3 bnez s4,80000708 <_ZN5Dinic3DFSEii+0x60> + 800007a4: 03813083 ld ra,56(sp) + 800007a8: 03013403 ld s0,48(sp) + 800007ac: 02813483 ld s1,40(sp) + 800007b0: 02013903 ld s2,32(sp) + 800007b4: 01813983 ld s3,24(sp) + 800007b8: 01013a03 ld s4,16(sp) + 800007bc: 00013b03 ld s6,0(sp) + 800007c0: 000a8513 mv a0,s5 + 800007c4: 00813a83 ld s5,8(sp) + 800007c8: 04010113 addi sp,sp,64 + 800007cc: 00008067 ret + +00000000800007d0 : + 800007d0: 00007797 auipc a5,0x7 + 800007d4: 3007b783 ld a5,768(a5) # 80007ad0 + 800007d8: 0007a783 lw a5,0(a5) + 800007dc: fa010113 addi sp,sp,-96 + 800007e0: 05213023 sd s2,64(sp) + 800007e4: 00100513 li a0,1 + 800007e8: 00007917 auipc s2,0x7 + 800007ec: 1e090913 addi s2,s2,480 # 800079c8 <_ZL1N> + 800007f0: 04113c23 sd ra,88(sp) + 800007f4: 00f92023 sw a5,0(s2) + 800007f8: 04913423 sd s1,72(sp) + 800007fc: 03313c23 sd s3,56(sp) + 80000800: 03413823 sd s4,48(sp) + 80000804: 03513423 sd s5,40(sp) + 80000808: 03613023 sd s6,32(sp) + 8000080c: 01713c23 sd s7,24(sp) + 80000810: 01813823 sd s8,16(sp) + 80000814: 04813823 sd s0,80(sp) + 80000818: 01913423 sd s9,8(sp) + 8000081c: 01a13023 sd s10,0(sp) + 80000820: d95ff0ef jal ra,800005b4 + 80000824: 04800513 li a0,72 + 80000828: 00092b03 lw s6,0(s2) + 8000082c: cedff0ef jal ra,80000518 + 80000830: 00092783 lw a5,0(s2) + 80000834: 00007997 auipc s3,0x7 + 80000838: 18c98993 addi s3,s3,396 # 800079c0 <_ZL1G> + 8000083c: 00050493 mv s1,a0 + 80000840: 0017879b addiw a5,a5,1 + 80000844: 00179c1b slliw s8,a5,0x1 + 80000848: ffec0a1b addiw s4,s8,-2 + 8000084c: 401a559b sraiw a1,s4,0x1 + 80000850: 00058a13 mv s4,a1 + 80000854: 00a9b023 sd a0,0(s3) + 80000858: 00058513 mv a0,a1 + 8000085c: 080040ef jal ra,800048dc <__muldi3> + 80000860: 001a1a1b slliw s4,s4,0x1 + 80000864: 00aa0a3b addw s4,s4,a0 + 80000868: 001a1a1b slliw s4,s4,0x1 + 8000086c: 004a1513 slli a0,s4,0x4 + 80000870: 002c1a93 slli s5,s8,0x2 + 80000874: ca5ff0ef jal ra,80000518 + 80000878: 00a4b823 sd a0,16(s1) + 8000087c: 000a8513 mv a0,s5 + 80000880: c99ff0ef jal ra,80000518 + 80000884: 00a4bc23 sd a0,24(s1) + 80000888: 002a1513 slli a0,s4,0x2 + 8000088c: c8dff0ef jal ra,80000518 + 80000890: 02a4b023 sd a0,32(s1) + 80000894: 000c0513 mv a0,s8 + 80000898: c81ff0ef jal ra,80000518 + 8000089c: 04a4b023 sd a0,64(s1) + 800008a0: 000a8513 mv a0,s5 + 800008a4: c75ff0ef jal ra,80000518 + 800008a8: 02a4b423 sd a0,40(s1) + 800008ac: 000a8513 mv a0,s5 + 800008b0: c69ff0ef jal ra,80000518 + 800008b4: 02a4b823 sd a0,48(s1) + 800008b8: 000a8513 mv a0,s5 + 800008bc: c5dff0ef jal ra,80000518 + 800008c0: 001b1b9b slliw s7,s6,0x1 + 800008c4: 02a4bc23 sd a0,56(s1) + 800008c8: 0184a023 sw s8,0(s1) + 800008cc: 001b8b1b addiw s6,s7,1 + 800008d0: 03805863 blez s8,80000900 + 800008d4: fffc071b addiw a4,s8,-1 + 800008d8: 02071713 slli a4,a4,0x20 + 800008dc: 0184b783 ld a5,24(s1) + 800008e0: 02075713 srli a4,a4,0x20 + 800008e4: 00170713 addi a4,a4,1 + 800008e8: 00271713 slli a4,a4,0x2 + 800008ec: 00f70733 add a4,a4,a5 + 800008f0: fff00693 li a3,-1 + 800008f4: 00d7a023 sw a3,0(a5) + 800008f8: 00478793 addi a5,a5,4 + 800008fc: fee79ce3 bne a5,a4,800008f4 + 80000900: 00092c83 lw s9,0(s2) + 80000904: 0004a223 sw zero,4(s1) + 80000908: 27905c63 blez s9,80000b80 + 8000090c: 00000a93 li s5,0 + 80000910: 00000493 li s1,0 + 80000914: 002a9a13 slli s4,s5,0x2 + 80000918: 00000c13 li s8,0 + 8000091c: 0d905463 blez s9,800009e4 + 80000920: 0009b403 ld s0,0(s3) + 80000924: ca5ff0ef jal ra,800005c8 + 80000928: 02051513 slli a0,a0,0x20 + 8000092c: 00a00593 li a1,10 + 80000930: 02055513 srli a0,a0,0x20 + 80000934: 05c040ef jal ra,80004990 <__umoddi3> + 80000938: 018c873b addw a4,s9,s8 + 8000093c: 0005051b sext.w a0,a0 + 80000940: 00092c83 lw s9,0(s2) + 80000944: 00070813 mv a6,a4 + 80000948: 00271593 slli a1,a4,0x2 + 8000094c: 001c0c1b addiw s8,s8,1 + 80000950: 08050863 beqz a0,800009e0 + 80000954: 00442703 lw a4,4(s0) + 80000958: 01043783 ld a5,16(s0) + 8000095c: 01843603 ld a2,24(s0) + 80000960: 00471693 slli a3,a4,0x4 + 80000964: 00d786b3 add a3,a5,a3 + 80000968: 0096a023 sw s1,0(a3) + 8000096c: 00a6a423 sw a0,8(a3) + 80000970: 0106a223 sw a6,4(a3) + 80000974: 0006a623 sw zero,12(a3) + 80000978: 01460533 add a0,a2,s4 + 8000097c: 02043683 ld a3,32(s0) + 80000980: 00052883 lw a7,0(a0) + 80000984: 00271713 slli a4,a4,0x2 + 80000988: 00e68733 add a4,a3,a4 + 8000098c: 01172023 sw a7,0(a4) + 80000990: 00442883 lw a7,4(s0) + 80000994: 00b60733 add a4,a2,a1 + 80000998: 0018861b addiw a2,a7,1 + 8000099c: 00c42223 sw a2,4(s0) + 800009a0: 01152023 sw a7,0(a0) + 800009a4: 00442603 lw a2,4(s0) + 800009a8: 00461593 slli a1,a2,0x4 + 800009ac: 00b787b3 add a5,a5,a1 + 800009b0: 0107a023 sw a6,0(a5) + 800009b4: 0097a223 sw s1,4(a5) + 800009b8: 0007a423 sw zero,8(a5) + 800009bc: 0007a623 sw zero,12(a5) + 800009c0: 00072783 lw a5,0(a4) + 800009c4: 00261613 slli a2,a2,0x2 + 800009c8: 00c686b3 add a3,a3,a2 + 800009cc: 00f6a023 sw a5,0(a3) + 800009d0: 00442783 lw a5,4(s0) + 800009d4: 0017869b addiw a3,a5,1 + 800009d8: 00d42223 sw a3,4(s0) + 800009dc: 00f72023 sw a5,0(a4) + 800009e0: f59c40e3 blt s8,s9,80000920 + 800009e4: 001a8a93 addi s5,s5,1 + 800009e8: 000a849b sext.w s1,s5 + 800009ec: f394c4e3 blt s1,s9,80000914 + 800009f0: 19905863 blez s9,80000b80 + 800009f4: 002b9a93 slli s5,s7,0x2 + 800009f8: 002b1a13 slli s4,s6,0x2 + 800009fc: 00000c13 li s8,0 + 80000a00: 00000c93 li s9,0 + 80000a04: 0009b483 ld s1,0(s3) + 80000a08: bc1ff0ef jal ra,800005c8 + 80000a0c: 02051513 slli a0,a0,0x20 + 80000a10: 3e800593 li a1,1000 + 80000a14: 02055513 srli a0,a0,0x20 + 80000a18: 779030ef jal ra,80004990 <__umoddi3> + 80000a1c: 0005051b sext.w a0,a0 + 80000a20: 002c1813 slli a6,s8,0x2 + 80000a24: 0009b403 ld s0,0(s3) + 80000a28: 00092d03 lw s10,0(s2) + 80000a2c: 001c0c13 addi s8,s8,1 + 80000a30: 08050863 beqz a0,80000ac0 + 80000a34: 0044a703 lw a4,4(s1) + 80000a38: 0104b783 ld a5,16(s1) + 80000a3c: 0184b603 ld a2,24(s1) + 80000a40: 00471693 slli a3,a4,0x4 + 80000a44: 00d786b3 add a3,a5,a3 + 80000a48: 0176a023 sw s7,0(a3) + 80000a4c: 0196a223 sw s9,4(a3) + 80000a50: 00a6a423 sw a0,8(a3) + 80000a54: 0006a623 sw zero,12(a3) + 80000a58: 015605b3 add a1,a2,s5 + 80000a5c: 0204b683 ld a3,32(s1) + 80000a60: 0005a503 lw a0,0(a1) + 80000a64: 00271713 slli a4,a4,0x2 + 80000a68: 00e68733 add a4,a3,a4 + 80000a6c: 00a72023 sw a0,0(a4) + 80000a70: 0044a503 lw a0,4(s1) + 80000a74: 01060733 add a4,a2,a6 + 80000a78: 0015061b addiw a2,a0,1 + 80000a7c: 00c4a223 sw a2,4(s1) + 80000a80: 00a5a023 sw a0,0(a1) + 80000a84: 0044a603 lw a2,4(s1) + 80000a88: 00461593 slli a1,a2,0x4 + 80000a8c: 00b787b3 add a5,a5,a1 + 80000a90: 0197a023 sw s9,0(a5) + 80000a94: 0177a223 sw s7,4(a5) + 80000a98: 0007a423 sw zero,8(a5) + 80000a9c: 0007a623 sw zero,12(a5) + 80000aa0: 00072783 lw a5,0(a4) + 80000aa4: 00261613 slli a2,a2,0x2 + 80000aa8: 00c686b3 add a3,a3,a2 + 80000aac: 00f6a023 sw a5,0(a3) + 80000ab0: 0044a783 lw a5,4(s1) + 80000ab4: 0017869b addiw a3,a5,1 + 80000ab8: 00d4a223 sw a3,4(s1) + 80000abc: 00f72023 sw a5,0(a4) + 80000ac0: b09ff0ef jal ra,800005c8 + 80000ac4: 02051513 slli a0,a0,0x20 + 80000ac8: 3e800593 li a1,1000 + 80000acc: 02055513 srli a0,a0,0x20 + 80000ad0: 6c1030ef jal ra,80004990 <__umoddi3> + 80000ad4: 019d07bb addw a5,s10,s9 + 80000ad8: 0005051b sext.w a0,a0 + 80000adc: 00078813 mv a6,a5 + 80000ae0: 00092883 lw a7,0(s2) + 80000ae4: 00279793 slli a5,a5,0x2 + 80000ae8: 000c0c9b sext.w s9,s8 + 80000aec: 08050863 beqz a0,80000b7c + 80000af0: 00442683 lw a3,4(s0) + 80000af4: 01043703 ld a4,16(s0) + 80000af8: 01843583 ld a1,24(s0) + 80000afc: 00469613 slli a2,a3,0x4 + 80000b00: 00c70633 add a2,a4,a2 + 80000b04: 01062023 sw a6,0(a2) + 80000b08: 01662223 sw s6,4(a2) + 80000b0c: 00a62423 sw a0,8(a2) + 80000b10: 00062623 sw zero,12(a2) + 80000b14: 00f587b3 add a5,a1,a5 + 80000b18: 02043603 ld a2,32(s0) + 80000b1c: 0007a503 lw a0,0(a5) + 80000b20: 00269693 slli a3,a3,0x2 + 80000b24: 00d606b3 add a3,a2,a3 + 80000b28: 00a6a023 sw a0,0(a3) + 80000b2c: 00442503 lw a0,4(s0) + 80000b30: 014586b3 add a3,a1,s4 + 80000b34: 0015059b addiw a1,a0,1 + 80000b38: 00b42223 sw a1,4(s0) + 80000b3c: 00a7a023 sw a0,0(a5) + 80000b40: 00442583 lw a1,4(s0) + 80000b44: 00459793 slli a5,a1,0x4 + 80000b48: 00f707b3 add a5,a4,a5 + 80000b4c: 0167a023 sw s6,0(a5) + 80000b50: 0107a223 sw a6,4(a5) + 80000b54: 0007a423 sw zero,8(a5) + 80000b58: 0007a623 sw zero,12(a5) + 80000b5c: 0006a783 lw a5,0(a3) + 80000b60: 00259593 slli a1,a1,0x2 + 80000b64: 00b60633 add a2,a2,a1 + 80000b68: 00f62023 sw a5,0(a2) + 80000b6c: 00442783 lw a5,4(s0) + 80000b70: 0017871b addiw a4,a5,1 + 80000b74: 00e42223 sw a4,4(s0) + 80000b78: 00f6a023 sw a5,0(a3) + 80000b7c: e91cc4e3 blt s9,a7,80000a04 + 80000b80: 05813083 ld ra,88(sp) + 80000b84: 05013403 ld s0,80(sp) + 80000b88: 04813483 ld s1,72(sp) + 80000b8c: 04013903 ld s2,64(sp) + 80000b90: 03813983 ld s3,56(sp) + 80000b94: 03013a03 ld s4,48(sp) + 80000b98: 02813a83 ld s5,40(sp) + 80000b9c: 02013b03 ld s6,32(sp) + 80000ba0: 01813b83 ld s7,24(sp) + 80000ba4: 01013c03 ld s8,16(sp) + 80000ba8: 00813c83 ld s9,8(sp) + 80000bac: 00013d03 ld s10,0(sp) + 80000bb0: 06010113 addi sp,sp,96 + 80000bb4: 00008067 ret + +0000000080000bb8 : + 80000bb8: f3010113 addi sp,sp,-208 + 80000bbc: 0c813023 sd s0,192(sp) + 80000bc0: 00007717 auipc a4,0x7 + 80000bc4: e0872703 lw a4,-504(a4) # 800079c8 <_ZL1N> + 80000bc8: 00007417 auipc s0,0x7 + 80000bcc: df843403 ld s0,-520(s0) # 800079c0 <_ZL1G> + 80000bd0: 00171f1b slliw t5,a4,0x1 + 80000bd4: 04043683 ld a3,64(s0) + 80000bd8: 03843583 ld a1,56(s0) + 80000bdc: 02843783 ld a5,40(s0) + 80000be0: 01843503 ld a0,24(s0) + 80000be4: 09513c23 sd s5,152(sp) + 80000be8: 0c113423 sd ra,200(sp) + 80000bec: 0a913c23 sd s1,184(sp) + 80000bf0: 0b213823 sd s2,176(sp) + 80000bf4: 0b313423 sd s3,168(sp) + 80000bf8: 0b413023 sd s4,160(sp) + 80000bfc: 09613823 sd s6,144(sp) + 80000c00: 09713423 sd s7,136(sp) + 80000c04: 09813023 sd s8,128(sp) + 80000c08: 07913c23 sd s9,120(sp) + 80000c0c: 07a13823 sd s10,112(sp) + 80000c10: 07b13423 sd s11,104(sp) + 80000c14: 001f061b addiw a2,t5,1 + 80000c18: 002f1713 slli a4,t5,0x2 + 80000c1c: 01e42423 sw t5,8(s0) + 80000c20: 00c42623 sw a2,12(s0) + 80000c24: 00e13023 sd a4,0(sp) + 80000c28: 000f0893 mv a7,t5 + 80000c2c: 00000813 li a6,0 + 80000c30: fff00a93 li s5,-1 + 80000c34: 00042703 lw a4,0(s0) + 80000c38: 02e05463 blez a4,80000c60 + 80000c3c: fff7071b addiw a4,a4,-1 + 80000c40: 02071713 slli a4,a4,0x20 + 80000c44: 02075713 srli a4,a4,0x20 + 80000c48: 00170713 addi a4,a4,1 + 80000c4c: 00068613 mv a2,a3 + 80000c50: 00d70733 add a4,a4,a3 + 80000c54: 00060023 sb zero,0(a2) + 80000c58: 00160613 addi a2,a2,1 + 80000c5c: fec71ce3 bne a4,a2,80000c54 + 80000c60: 0115a023 sw a7,0(a1) + 80000c64: 00842703 lw a4,8(s0) + 80000c68: 00100613 li a2,1 + 80000c6c: 00058e93 mv t4,a1 + 80000c70: 00271713 slli a4,a4,0x2 + 80000c74: 00e78733 add a4,a5,a4 + 80000c78: 00072023 sw zero,0(a4) + 80000c7c: 00842703 lw a4,8(s0) + 80000c80: 00100e13 li t3,1 + 80000c84: 00000f93 li t6,0 + 80000c88: 00e68733 add a4,a3,a4 + 80000c8c: 00c70023 sb a2,0(a4) + 80000c90: 000ea603 lw a2,0(t4) + 80000c94: 001f8f9b addiw t6,t6,1 + 80000c98: 00261613 slli a2,a2,0x2 + 80000c9c: 00c50733 add a4,a0,a2 + 80000ca0: 00072703 lw a4,0(a4) + 80000ca4: 07570a63 beq a4,s5,80000d18 + 80000ca8: 01043903 ld s2,16(s0) + 80000cac: 02043483 ld s1,32(s0) + 80000cb0: 00c788b3 add a7,a5,a2 + 80000cb4: 00471313 slli t1,a4,0x4 + 80000cb8: 00690333 add t1,s2,t1 + 80000cbc: 00432603 lw a2,4(t1) + 80000cc0: 00271713 slli a4,a4,0x2 + 80000cc4: 00e48733 add a4,s1,a4 + 80000cc8: 00c689b3 add s3,a3,a2 + 80000ccc: 0009c283 lbu t0,0(s3) + 80000cd0: 04029063 bnez t0,80000d10 + 80000cd4: 00832a03 lw s4,8(t1) + 80000cd8: 00c32383 lw t2,12(t1) + 80000cdc: 00261613 slli a2,a2,0x2 + 80000ce0: 002e1293 slli t0,t3,0x2 + 80000ce4: 00c78633 add a2,a5,a2 + 80000ce8: 005582b3 add t0,a1,t0 + 80000cec: 0343d263 bge t2,s4,80000d10 + 80000cf0: 0008a383 lw t2,0(a7) + 80000cf4: 00100a13 li s4,1 + 80000cf8: 01498023 sb s4,0(s3) + 80000cfc: 0013839b addiw t2,t2,1 + 80000d00: 00762023 sw t2,0(a2) + 80000d04: 00432603 lw a2,4(t1) + 80000d08: 001e0e1b addiw t3,t3,1 + 80000d0c: 00c2a023 sw a2,0(t0) + 80000d10: 00072703 lw a4,0(a4) + 80000d14: fb5710e3 bne a4,s5,80000cb4 + 80000d18: 004e8e93 addi t4,t4,4 + 80000d1c: f7cf9ae3 bne t6,t3,80000c90 + 80000d20: 00c42703 lw a4,12(s0) + 80000d24: 00e68633 add a2,a3,a4 + 80000d28: 00064603 lbu a2,0(a2) + 80000d2c: 38060063 beqz a2,800010ac + 80000d30: 00042603 lw a2,0(s0) + 80000d34: 02c05863 blez a2,80000d64 + 80000d38: 03043883 ld a7,48(s0) + 80000d3c: 00050613 mv a2,a0 + 80000d40: 00000713 li a4,0 + 80000d44: 00062303 lw t1,0(a2) + 80000d48: 0017071b addiw a4,a4,1 + 80000d4c: 00460613 addi a2,a2,4 + 80000d50: 0068a023 sw t1,0(a7) + 80000d54: 00042303 lw t1,0(s0) + 80000d58: 00488893 addi a7,a7,4 + 80000d5c: fe6744e3 blt a4,t1,80000d44 + 80000d60: 00c42703 lw a4,12(s0) + 80000d64: 38ef0663 beq t5,a4,800010f0 + 80000d68: 03043703 ld a4,48(s0) + 80000d6c: 00013603 ld a2,0(sp) + 80000d70: 00c70733 add a4,a4,a2 + 80000d74: 00072b83 lw s7,0(a4) + 80000d78: 335b8663 beq s7,s5,800010a4 + 80000d7c: 003f4db7 lui s11,0x3f4 + 80000d80: 00000e93 li t4,0 + 80000d84: f3fd8d93 addi s11,s11,-193 # 3f3f3f <_entry_offset+0x3f3f3f> + 80000d88: 0180006f j 80000da0 + 80000d8c: 02043703 ld a4,32(s0) + 80000d90: 002b9b93 slli s7,s7,0x2 + 80000d94: 01770bb3 add s7,a4,s7 + 80000d98: 000bab83 lw s7,0(s7) + 80000d9c: 2f5b8c63 beq s7,s5,80001094 + 80000da0: 01043a03 ld s4,16(s0) + 80000da4: 004b9b13 slli s6,s7,0x4 + 80000da8: 00013703 ld a4,0(sp) + 80000dac: 016a0b33 add s6,s4,s6 + 80000db0: 004b2603 lw a2,4(s6) + 80000db4: 00e78733 add a4,a5,a4 + 80000db8: 00072703 lw a4,0(a4) + 80000dbc: 00261f93 slli t6,a2,0x2 + 80000dc0: 01f786b3 add a3,a5,t6 + 80000dc4: 0006a683 lw a3,0(a3) + 80000dc8: 0017071b addiw a4,a4,1 + 80000dcc: fcd710e3 bne a4,a3,80000d8c + 80000dd0: 008b2483 lw s1,8(s6) + 80000dd4: 00cb2703 lw a4,12(s6) + 80000dd8: 40e4873b subw a4,s1,a4 + 80000ddc: 00070493 mv s1,a4 + 80000de0: 00edd463 bge s11,a4,80000de8 + 80000de4: 000d849b sext.w s1,s11 + 80000de8: 00c42703 lw a4,12(s0) + 80000dec: 34c70663 beq a4,a2,80001138 + 80000df0: f8048ee3 beqz s1,80000d8c + 80000df4: 03043703 ld a4,48(s0) + 80000df8: 01f70733 add a4,a4,t6 + 80000dfc: 00072c03 lw s8,0(a4) + 80000e00: f95c06e3 beq s8,s5,80000d8c + 80000e04: 00048893 mv a7,s1 + 80000e08: 00000493 li s1,0 + 80000e0c: 0240006f j 80000e30 + 80000e10: 02043703 ld a4,32(s0) + 80000e14: 002c1c13 slli s8,s8,0x2 + 80000e18: 01870c33 add s8,a4,s8 + 80000e1c: 000c2c03 lw s8,0(s8) + 80000e20: 315c0c63 beq s8,s5,80001138 + 80000e24: 01f78733 add a4,a5,t6 + 80000e28: 01043a03 ld s4,16(s0) + 80000e2c: 00072683 lw a3,0(a4) + 80000e30: 004c1713 slli a4,s8,0x4 + 80000e34: 00ea0733 add a4,s4,a4 + 80000e38: 00472583 lw a1,4(a4) + 80000e3c: 0016869b addiw a3,a3,1 + 80000e40: 00259293 slli t0,a1,0x2 + 80000e44: 00578633 add a2,a5,t0 + 80000e48: 00062603 lw a2,0(a2) + 80000e4c: fcc692e3 bne a3,a2,80000e10 + 80000e50: 00872903 lw s2,8(a4) + 80000e54: 00c72683 lw a3,12(a4) + 80000e58: 40d906bb subw a3,s2,a3 + 80000e5c: 00068913 mv s2,a3 + 80000e60: 00d8d463 bge a7,a3,80000e68 + 80000e64: 0008891b sext.w s2,a7 + 80000e68: 00c42683 lw a3,12(s0) + 80000e6c: 2cb68063 beq a3,a1,8000112c + 80000e70: fa0900e3 beqz s2,80000e10 + 80000e74: 03043683 ld a3,48(s0) + 80000e78: 005686b3 add a3,a3,t0 + 80000e7c: 0006ac83 lw s9,0(a3) + 80000e80: f95c88e3 beq s9,s5,80000e10 + 80000e84: 00090313 mv t1,s2 + 80000e88: 00000913 li s2,0 + 80000e8c: 0240006f j 80000eb0 + 80000e90: 02043683 ld a3,32(s0) + 80000e94: 002c9c93 slli s9,s9,0x2 + 80000e98: 01968cb3 add s9,a3,s9 + 80000e9c: 000cac83 lw s9,0(s9) + 80000ea0: 295c8663 beq s9,s5,8000112c + 80000ea4: 005786b3 add a3,a5,t0 + 80000ea8: 01043a03 ld s4,16(s0) + 80000eac: 0006a603 lw a2,0(a3) + 80000eb0: 004c9693 slli a3,s9,0x4 + 80000eb4: 00da06b3 add a3,s4,a3 + 80000eb8: 0046a583 lw a1,4(a3) + 80000ebc: 0016051b addiw a0,a2,1 + 80000ec0: 00259393 slli t2,a1,0x2 + 80000ec4: 00778633 add a2,a5,t2 + 80000ec8: 00062603 lw a2,0(a2) + 80000ecc: fcc512e3 bne a0,a2,80000e90 + 80000ed0: 0086a983 lw s3,8(a3) + 80000ed4: 00c6a503 lw a0,12(a3) + 80000ed8: 40a9853b subw a0,s3,a0 + 80000edc: 00050993 mv s3,a0 + 80000ee0: 00a35463 bge t1,a0,80000ee8 + 80000ee4: 0003099b sext.w s3,t1 + 80000ee8: 00c42503 lw a0,12(s0) + 80000eec: 22b50a63 beq a0,a1,80001120 + 80000ef0: fa0980e3 beqz s3,80000e90 + 80000ef4: 03043583 ld a1,48(s0) + 80000ef8: 007585b3 add a1,a1,t2 + 80000efc: 0005ad03 lw s10,0(a1) + 80000f00: f95d08e3 beq s10,s5,80000e90 + 80000f04: 00098e13 mv t3,s3 + 80000f08: 00000993 li s3,0 + 80000f0c: 0240006f j 80000f30 + 80000f10: 02043583 ld a1,32(s0) + 80000f14: 002d1d13 slli s10,s10,0x2 + 80000f18: 00778633 add a2,a5,t2 + 80000f1c: 01a58d33 add s10,a1,s10 + 80000f20: 000d2d03 lw s10,0(s10) + 80000f24: 1f5d0e63 beq s10,s5,80001120 + 80000f28: 01043a03 ld s4,16(s0) + 80000f2c: 00062603 lw a2,0(a2) + 80000f30: 004d1593 slli a1,s10,0x4 + 80000f34: 00ba0a33 add s4,s4,a1 + 80000f38: 004a2583 lw a1,4(s4) + 80000f3c: 0016051b addiw a0,a2,1 + 80000f40: 00259613 slli a2,a1,0x2 + 80000f44: 00c78633 add a2,a5,a2 + 80000f48: 00062603 lw a2,0(a2) + 80000f4c: fcc512e3 bne a0,a2,80000f10 + 80000f50: 008a2603 lw a2,8(s4) + 80000f54: 00ca2783 lw a5,12(s4) + 80000f58: 00040513 mv a0,s0 + 80000f5c: 40f607bb subw a5,a2,a5 + 80000f60: 00078613 mv a2,a5 + 80000f64: 00fe5463 bge t3,a5,80000f6c + 80000f68: 000e061b sext.w a2,t3 + 80000f6c: 05c13c23 sd t3,88(sp) + 80000f70: 04613823 sd t1,80(sp) + 80000f74: 04713423 sd t2,72(sp) + 80000f78: 04d13023 sd a3,64(sp) + 80000f7c: 03113c23 sd a7,56(sp) + 80000f80: 02513823 sd t0,48(sp) + 80000f84: 02e13423 sd a4,40(sp) + 80000f88: 03d13023 sd t4,32(sp) + 80000f8c: 01f13c23 sd t6,24(sp) + 80000f90: 01013823 sd a6,16(sp) + 80000f94: 01e13423 sd t5,8(sp) + 80000f98: f10ff0ef jal ra,800006a8 <_ZN5Dinic3DFSEii> + 80000f9c: 001d4593 xori a1,s10,1 + 80000fa0: 00813f03 ld t5,8(sp) + 80000fa4: 01013803 ld a6,16(sp) + 80000fa8: 01813f83 ld t6,24(sp) + 80000fac: 02013e83 ld t4,32(sp) + 80000fb0: 02813703 ld a4,40(sp) + 80000fb4: 03013283 ld t0,48(sp) + 80000fb8: 03813883 ld a7,56(sp) + 80000fbc: 04013683 ld a3,64(sp) + 80000fc0: 04813383 ld t2,72(sp) + 80000fc4: 05013303 ld t1,80(sp) + 80000fc8: 05813e03 ld t3,88(sp) + 80000fcc: 00459593 slli a1,a1,0x4 + 80000fd0: 12a05a63 blez a0,80001104 + 80000fd4: 00ca2783 lw a5,12(s4) + 80000fd8: 01043603 ld a2,16(s0) + 80000fdc: 40ae0e3b subw t3,t3,a0 + 80000fe0: 00a787bb addw a5,a5,a0 + 80000fe4: 00fa2623 sw a5,12(s4) + 80000fe8: 00b605b3 add a1,a2,a1 + 80000fec: 00c5aa03 lw s4,12(a1) + 80000ff0: 00a989bb addw s3,s3,a0 + 80000ff4: 02843783 ld a5,40(s0) + 80000ff8: 40aa053b subw a0,s4,a0 + 80000ffc: 00a5a623 sw a0,12(a1) + 80001000: f00e18e3 bnez t3,80000f10 + 80001004: 00c6a503 lw a0,12(a3) + 80001008: 001cc593 xori a1,s9,1 + 8000100c: 00459593 slli a1,a1,0x4 + 80001010: 0135053b addw a0,a0,s3 + 80001014: 00a6a623 sw a0,12(a3) + 80001018: 00b606b3 add a3,a2,a1 + 8000101c: 00c6a583 lw a1,12(a3) + 80001020: 4133033b subw t1,t1,s3 + 80001024: 0139093b addw s2,s2,s3 + 80001028: 413589bb subw s3,a1,s3 + 8000102c: 0136a623 sw s3,12(a3) + 80001030: e60310e3 bnez t1,80000e90 + 80001034: 00c72583 lw a1,12(a4) + 80001038: 001c4693 xori a3,s8,1 + 8000103c: 00469693 slli a3,a3,0x4 + 80001040: 012585bb addw a1,a1,s2 + 80001044: 00b72623 sw a1,12(a4) + 80001048: 00d60733 add a4,a2,a3 + 8000104c: 00c72683 lw a3,12(a4) + 80001050: 412888bb subw a7,a7,s2 + 80001054: 012484bb addw s1,s1,s2 + 80001058: 4126893b subw s2,a3,s2 + 8000105c: 01272623 sw s2,12(a4) + 80001060: da0898e3 bnez a7,80000e10 + 80001064: 00cb2683 lw a3,12(s6) + 80001068: 001bc713 xori a4,s7,1 + 8000106c: 00471713 slli a4,a4,0x4 + 80001070: 009686bb addw a3,a3,s1 + 80001074: 00db2623 sw a3,12(s6) + 80001078: 00e60633 add a2,a2,a4 + 8000107c: 00c62703 lw a4,12(a2) + 80001080: 409d8dbb subw s11,s11,s1 + 80001084: 009e8ebb addw t4,t4,s1 + 80001088: 409704bb subw s1,a4,s1 + 8000108c: 00962623 sw s1,12(a2) + 80001090: ce0d9ee3 bnez s11,80000d8c + 80001094: 04043683 ld a3,64(s0) + 80001098: 03843583 ld a1,56(s0) + 8000109c: 01843503 ld a0,24(s0) + 800010a0: 01d8083b addw a6,a6,t4 + 800010a4: 00842883 lw a7,8(s0) + 800010a8: b8dff06f j 80000c34 + 800010ac: 0c813083 ld ra,200(sp) + 800010b0: 0c013403 ld s0,192(sp) + 800010b4: 00007797 auipc a5,0x7 + 800010b8: 9107ac23 sw a6,-1768(a5) # 800079cc <_ZL3ans> + 800010bc: 0b813483 ld s1,184(sp) + 800010c0: 0b013903 ld s2,176(sp) + 800010c4: 0a813983 ld s3,168(sp) + 800010c8: 0a013a03 ld s4,160(sp) + 800010cc: 09813a83 ld s5,152(sp) + 800010d0: 09013b03 ld s6,144(sp) + 800010d4: 08813b83 ld s7,136(sp) + 800010d8: 08013c03 ld s8,128(sp) + 800010dc: 07813c83 ld s9,120(sp) + 800010e0: 07013d03 ld s10,112(sp) + 800010e4: 06813d83 ld s11,104(sp) + 800010e8: 0d010113 addi sp,sp,208 + 800010ec: 00008067 ret + 800010f0: 003f4737 lui a4,0x3f4 + 800010f4: f3f7071b addiw a4,a4,-193 + 800010f8: 00842883 lw a7,8(s0) + 800010fc: 0107083b addw a6,a4,a6 + 80001100: b35ff06f j 80000c34 + 80001104: 02043583 ld a1,32(s0) + 80001108: 002d1d13 slli s10,s10,0x2 + 8000110c: 02843783 ld a5,40(s0) + 80001110: 01a58d33 add s10,a1,s10 + 80001114: 000d2d03 lw s10,0(s10) + 80001118: 00778633 add a2,a5,t2 + 8000111c: e15d16e3 bne s10,s5,80000f28 + 80001120: d73058e3 blez s3,80000e90 + 80001124: 01043603 ld a2,16(s0) + 80001128: eddff06f j 80001004 + 8000112c: cf2052e3 blez s2,80000e10 + 80001130: 01043603 ld a2,16(s0) + 80001134: f01ff06f j 80001034 + 80001138: c4905ae3 blez s1,80000d8c + 8000113c: 01043603 ld a2,16(s0) + 80001140: f25ff06f j 80001064 + +0000000080001144 : + 80001144: 00007797 auipc a5,0x7 + 80001148: 98c7b783 ld a5,-1652(a5) # 80007ad0 + 8000114c: 0187a503 lw a0,24(a5) + 80001150: 00007797 auipc a5,0x7 + 80001154: 87c7a783 lw a5,-1924(a5) # 800079cc <_ZL3ans> + 80001158: 40f50533 sub a0,a0,a5 + 8000115c: 00153513 seqz a0,a0 + 80001160: 00008067 ret + +0000000080001164 <_ZL9radixPassPiS_S_ii>: + 80001164: fd010113 addi sp,sp,-48 + 80001168: 0017079b addiw a5,a4,1 + 8000116c: 02813023 sd s0,32(sp) + 80001170: 01413023 sd s4,0(sp) + 80001174: 00050413 mv s0,a0 + 80001178: 00070a13 mv s4,a4 + 8000117c: 00279513 slli a0,a5,0x2 + 80001180: 00913c23 sd s1,24(sp) + 80001184: 01213823 sd s2,16(sp) + 80001188: 01313423 sd s3,8(sp) + 8000118c: 02113423 sd ra,40(sp) + 80001190: 00058993 mv s3,a1 + 80001194: 00060493 mv s1,a2 + 80001198: 00068913 mv s2,a3 + 8000119c: b7cff0ef jal ra,80000518 + 800011a0: 0e0a4c63 bltz s4,80001298 <_ZL9radixPassPiS_S_ii+0x134> + 800011a4: 001a0713 addi a4,s4,1 + 800011a8: 00271713 slli a4,a4,0x2 + 800011ac: 00050793 mv a5,a0 + 800011b0: 00a70733 add a4,a4,a0 + 800011b4: 0007a023 sw zero,0(a5) + 800011b8: 00478793 addi a5,a5,4 + 800011bc: fef71ce3 bne a4,a5,800011b4 <_ZL9radixPassPiS_S_ii+0x50> + 800011c0: 05205663 blez s2,8000120c <_ZL9radixPassPiS_S_ii+0xa8> + 800011c4: fff9071b addiw a4,s2,-1 + 800011c8: 02071713 slli a4,a4,0x20 + 800011cc: 01e75793 srli a5,a4,0x1e + 800011d0: 00440713 addi a4,s0,4 + 800011d4: 00040813 mv a6,s0 + 800011d8: 00e78733 add a4,a5,a4 + 800011dc: 00082783 lw a5,0(a6) + 800011e0: 00480813 addi a6,a6,4 + 800011e4: 00279793 slli a5,a5,0x2 + 800011e8: 00f487b3 add a5,s1,a5 + 800011ec: 0007a783 lw a5,0(a5) + 800011f0: 00279793 slli a5,a5,0x2 + 800011f4: 00f507b3 add a5,a0,a5 + 800011f8: 0007a883 lw a7,0(a5) + 800011fc: 0018889b addiw a7,a7,1 + 80001200: 0117a023 sw a7,0(a5) + 80001204: fd071ce3 bne a4,a6,800011dc <_ZL9radixPassPiS_S_ii+0x78> + 80001208: 020a4663 bltz s4,80001234 <_ZL9radixPassPiS_S_ii+0xd0> + 8000120c: 00050793 mv a5,a0 + 80001210: 00000693 li a3,0 + 80001214: 00000813 li a6,0 + 80001218: 0007a603 lw a2,0(a5) + 8000121c: 0018081b addiw a6,a6,1 + 80001220: 00d7a023 sw a3,0(a5) + 80001224: 00d606bb addw a3,a2,a3 + 80001228: 00478793 addi a5,a5,4 + 8000122c: ff0a56e3 bge s4,a6,80001218 <_ZL9radixPassPiS_S_ii+0xb4> + 80001230: 05205463 blez s2,80001278 <_ZL9radixPassPiS_S_ii+0x114> + 80001234: 00040893 mv a7,s0 + 80001238: 00000813 li a6,0 + 8000123c: 0008a683 lw a3,0(a7) + 80001240: 0018081b addiw a6,a6,1 + 80001244: 00488893 addi a7,a7,4 + 80001248: 00269793 slli a5,a3,0x2 + 8000124c: 00f487b3 add a5,s1,a5 + 80001250: 0007a703 lw a4,0(a5) + 80001254: 00271713 slli a4,a4,0x2 + 80001258: 00e50733 add a4,a0,a4 + 8000125c: 00072783 lw a5,0(a4) # 3f4000 <_entry_offset+0x3f4000> + 80001260: 0017861b addiw a2,a5,1 + 80001264: 00279793 slli a5,a5,0x2 + 80001268: 00c72023 sw a2,0(a4) + 8000126c: 00f987b3 add a5,s3,a5 + 80001270: 00d7a023 sw a3,0(a5) + 80001274: fd2844e3 blt a6,s2,8000123c <_ZL9radixPassPiS_S_ii+0xd8> + 80001278: 02813083 ld ra,40(sp) + 8000127c: 02013403 ld s0,32(sp) + 80001280: 01813483 ld s1,24(sp) + 80001284: 01013903 ld s2,16(sp) + 80001288: 00813983 ld s3,8(sp) + 8000128c: 00013a03 ld s4,0(sp) + 80001290: 03010113 addi sp,sp,48 + 80001294: 00008067 ret + 80001298: f32046e3 bgtz s2,800011c4 <_ZL9radixPassPiS_S_ii+0x60> + 8000129c: fddff06f j 80001278 <_ZL9radixPassPiS_S_ii+0x114> + +00000000800012a0 <_Z11suffixArrayPiS_ii>: + 800012a0: f4010113 addi sp,sp,-192 + 800012a4: 09313c23 sd s3,152(sp) + 800012a8: 07813823 sd s8,112(sp) + 800012ac: 00050993 mv s3,a0 + 800012b0: 00058c13 mv s8,a1 + 800012b4: 0026051b addiw a0,a2,2 + 800012b8: 00300593 li a1,3 + 800012bc: 0a113c23 sd ra,184(sp) + 800012c0: 02c13423 sd a2,40(sp) + 800012c4: 02d13823 sd a3,48(sp) + 800012c8: 0a813823 sd s0,176(sp) + 800012cc: 0a913423 sd s1,168(sp) + 800012d0: 0b213023 sd s2,160(sp) + 800012d4: 00060493 mv s1,a2 + 800012d8: 09413823 sd s4,144(sp) + 800012dc: 09513423 sd s5,136(sp) + 800012e0: 09613023 sd s6,128(sp) + 800012e4: 07713c23 sd s7,120(sp) + 800012e8: 07913423 sd s9,104(sp) + 800012ec: 07a13023 sd s10,96(sp) + 800012f0: 01813823 sd s8,16(sp) + 800012f4: 05b13c23 sd s11,88(sp) + 800012f8: 648030ef jal ra,80004940 <__divdi3> + 800012fc: 00300593 li a1,3 + 80001300: 00050413 mv s0,a0 + 80001304: 00048513 mv a0,s1 + 80001308: 638030ef jal ra,80004940 <__divdi3> + 8000130c: 0004041b sext.w s0,s0 + 80001310: 00850abb addw s5,a0,s0 + 80001314: 003a8a1b addiw s4,s5,3 + 80001318: 002a1a13 slli s4,s4,0x2 + 8000131c: 000a0513 mv a0,s4 + 80001320: 002a8913 addi s2,s5,2 + 80001324: 9f4ff0ef jal ra,80000518 + 80001328: 00291913 slli s2,s2,0x2 + 8000132c: 012507b3 add a5,a0,s2 + 80001330: ffc90c93 addi s9,s2,-4 + 80001334: 0007a023 sw zero,0(a5) + 80001338: ff890b93 addi s7,s2,-8 + 8000133c: 019507b3 add a5,a0,s9 + 80001340: 0007a023 sw zero,0(a5) + 80001344: 017507b3 add a5,a0,s7 + 80001348: 00048c13 mv s8,s1 + 8000134c: 0007a023 sw zero,0(a5) + 80001350: 00050493 mv s1,a0 + 80001354: 000a0513 mv a0,s4 + 80001358: 9c0ff0ef jal ra,80000518 + 8000135c: 01250933 add s2,a0,s2 + 80001360: 00092023 sw zero,0(s2) + 80001364: 01950cb3 add s9,a0,s9 + 80001368: 000ca023 sw zero,0(s9) + 8000136c: 00241913 slli s2,s0,0x2 + 80001370: 01750bb3 add s7,a0,s7 + 80001374: 000ba023 sw zero,0(s7) + 80001378: 00050a13 mv s4,a0 + 8000137c: 00090513 mv a0,s2 + 80001380: 998ff0ef jal ra,80000518 + 80001384: 00050c93 mv s9,a0 + 80001388: 00090513 mv a0,s2 + 8000138c: 01913c23 sd s9,24(sp) + 80001390: 988ff0ef jal ra,80000518 + 80001394: 00050b93 mv s7,a0 + 80001398: 00300593 li a1,3 + 8000139c: 001c051b addiw a0,s8,1 + 800013a0: 03713023 sd s7,32(sp) + 800013a4: 59c030ef jal ra,80004940 <__divdi3> + 800013a8: 40a4093b subw s2,s0,a0 + 800013ac: 01890d3b addw s10,s2,s8 + 800013b0: 000a8b13 mv s6,s5 + 800013b4: 00000c13 li s8,0 + 800013b8: 00000b93 li s7,0 + 800013bc: 05a05463 blez s10,80001404 <_Z11suffixArrayPiS_ii+0x164> + 800013c0: 001c0c1b addiw s8,s8,1 + 800013c4: 00300593 li a1,3 + 800013c8: 000c0c93 mv s9,s8 + 800013cc: 000c0513 mv a0,s8 + 800013d0: 03ac0a63 beq s8,s10,80001404 <_Z11suffixArrayPiS_ii+0x164> + 800013d4: 5f0030ef jal ra,800049c4 <__moddi3> + 800013d8: 002b9793 slli a5,s7,0x2 + 800013dc: 0005051b sext.w a0,a0 + 800013e0: 00f487b3 add a5,s1,a5 + 800013e4: fc050ee3 beqz a0,800013c0 <_Z11suffixArrayPiS_ii+0x120> + 800013e8: 001c0c1b addiw s8,s8,1 + 800013ec: 0197a023 sw s9,0(a5) + 800013f0: 001b8b9b addiw s7,s7,1 + 800013f4: 00300593 li a1,3 + 800013f8: 000c0c93 mv s9,s8 + 800013fc: 000c0513 mv a0,s8 + 80001400: fdac1ae3 bne s8,s10,800013d4 <_Z11suffixArrayPiS_ii+0x134> + 80001404: 03013b83 ld s7,48(sp) + 80001408: 00898613 addi a2,s3,8 + 8000140c: 000a0593 mv a1,s4 + 80001410: 00048513 mv a0,s1 + 80001414: 000b8713 mv a4,s7 + 80001418: 000a8693 mv a3,s5 + 8000141c: d49ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 80001420: 000b8713 mv a4,s7 + 80001424: 000a8693 mv a3,s5 + 80001428: 00498613 addi a2,s3,4 + 8000142c: 00048593 mv a1,s1 + 80001430: 000a0513 mv a0,s4 + 80001434: d31ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 80001438: 000b8713 mv a4,s7 + 8000143c: 000a8693 mv a3,s5 + 80001440: 00098613 mv a2,s3 + 80001444: 000a0593 mv a1,s4 + 80001448: 00048513 mv a0,s1 + 8000144c: d19ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 80001450: 13505c63 blez s5,80001588 <_Z11suffixArrayPiS_ii+0x2e8> + 80001454: fffb089b addiw a7,s6,-1 + 80001458: 02089893 slli a7,a7,0x20 + 8000145c: 0208d893 srli a7,a7,0x20 + 80001460: 00188893 addi a7,a7,1 + 80001464: 00289893 slli a7,a7,0x2 + 80001468: 000a0d93 mv s11,s4 + 8000146c: 01488d33 add s10,a7,s4 + 80001470: 000a0613 mv a2,s4 + 80001474: fff00b13 li s6,-1 + 80001478: fff00b93 li s7,-1 + 8000147c: fff00c93 li s9,-1 + 80001480: 00000c13 li s8,0 + 80001484: 0600006f j 800014e4 <_Z11suffixArrayPiS_ii+0x244> + 80001488: 001c0c1b addiw s8,s8,1 + 8000148c: 000f0c93 mv s9,t5 + 80001490: 00c13423 sd a2,8(sp) + 80001494: 00e13023 sd a4,0(sp) + 80001498: 4a8030ef jal ra,80004940 <__divdi3> + 8000149c: 00013703 ld a4,0(sp) + 800014a0: 00050793 mv a5,a0 + 800014a4: 0007879b sext.w a5,a5 + 800014a8: 00070513 mv a0,a4 + 800014ac: 00300593 li a1,3 + 800014b0: 00f13023 sd a5,0(sp) + 800014b4: 510030ef jal ra,800049c4 <__moddi3> + 800014b8: 00013783 ld a5,0(sp) + 800014bc: 0005051b sext.w a0,a0 + 800014c0: 00100693 li a3,1 + 800014c4: 00f4073b addw a4,s0,a5 + 800014c8: 00271713 slli a4,a4,0x2 + 800014cc: 00813603 ld a2,8(sp) + 800014d0: 00e48733 add a4,s1,a4 + 800014d4: 04d50463 beq a0,a3,8000151c <_Z11suffixArrayPiS_ii+0x27c> + 800014d8: 01872023 sw s8,0(a4) + 800014dc: 00460613 addi a2,a2,4 + 800014e0: 04cd0863 beq s10,a2,80001530 <_Z11suffixArrayPiS_ii+0x290> + 800014e4: 00062703 lw a4,0(a2) + 800014e8: 000b8f93 mv t6,s7 + 800014ec: 000b0293 mv t0,s6 + 800014f0: 00271793 slli a5,a4,0x2 + 800014f4: 00f987b3 add a5,s3,a5 + 800014f8: 0007af03 lw t5,0(a5) + 800014fc: 0047ab83 lw s7,4(a5) + 80001500: 0087ab03 lw s6,8(a5) + 80001504: 00300593 li a1,3 + 80001508: 00070513 mv a0,a4 + 8000150c: f79f1ee3 bne t5,s9,80001488 <_Z11suffixArrayPiS_ii+0x1e8> + 80001510: f77f9ce3 bne t6,s7,80001488 <_Z11suffixArrayPiS_ii+0x1e8> + 80001514: f7629ae3 bne t0,s6,80001488 <_Z11suffixArrayPiS_ii+0x1e8> + 80001518: f79ff06f j 80001490 <_Z11suffixArrayPiS_ii+0x1f0> + 8000151c: 00279793 slli a5,a5,0x2 + 80001520: 00f487b3 add a5,s1,a5 + 80001524: 0187a023 sw s8,0(a5) + 80001528: 00460613 addi a2,a2,4 + 8000152c: facd1ce3 bne s10,a2,800014e4 <_Z11suffixArrayPiS_ii+0x244> + 80001530: 00048613 mv a2,s1 + 80001534: 00000713 li a4,0 + 80001538: 315c4863 blt s8,s5,80001848 <_Z11suffixArrayPiS_ii+0x5a8> + 8000153c: 00062783 lw a5,0(a2) + 80001540: 00460613 addi a2,a2,4 + 80001544: 00279793 slli a5,a5,0x2 + 80001548: 00fa07b3 add a5,s4,a5 + 8000154c: fee7ae23 sw a4,-4(a5) + 80001550: 0017071b addiw a4,a4,1 + 80001554: feea94e3 bne s5,a4,8000153c <_Z11suffixArrayPiS_ii+0x29c> + 80001558: 00000613 li a2,0 + 8000155c: 000da703 lw a4,0(s11) + 80001560: 01813583 ld a1,24(sp) + 80001564: 00261793 slli a5,a2,0x2 + 80001568: 0017169b slliw a3,a4,0x1 + 8000156c: 004d8d93 addi s11,s11,4 + 80001570: 00f587b3 add a5,a1,a5 + 80001574: 00e686bb addw a3,a3,a4 + 80001578: 00875663 bge a4,s0,80001584 <_Z11suffixArrayPiS_ii+0x2e4> + 8000157c: 00d7a023 sw a3,0(a5) + 80001580: 0016061b addiw a2,a2,1 + 80001584: fdad9ce3 bne s11,s10,8000155c <_Z11suffixArrayPiS_ii+0x2bc> + 80001588: 02013b03 ld s6,32(sp) + 8000158c: 03013703 ld a4,48(sp) + 80001590: 01813503 ld a0,24(sp) + 80001594: 00040693 mv a3,s0 + 80001598: 00098613 mv a2,s3 + 8000159c: 000b0593 mv a1,s6 + 800015a0: bc5ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 800015a4: 02813783 ld a5,40(sp) + 800015a8: 0ef05463 blez a5,80001690 <_Z11suffixArrayPiS_ii+0x3f0> + 800015ac: 000a879b sext.w a5,s5 + 800015b0: 02f13c23 sd a5,56(sp) + 800015b4: fffa879b addiw a5,s5,-1 + 800015b8: 04f12223 sw a5,68(sp) + 800015bc: 004a0793 addi a5,s4,4 + 800015c0: 04f13423 sd a5,72(sp) + 800015c4: 0004079b sext.w a5,s0 + 800015c8: 00f13423 sd a5,8(sp) + 800015cc: fff4079b addiw a5,s0,-1 + 800015d0: 00f12c23 sw a5,24(sp) + 800015d4: 004b0793 addi a5,s6,4 + 800015d8: 00000d13 li s10,0 + 800015dc: 00000c93 li s9,0 + 800015e0: 02f13823 sd a5,48(sp) + 800015e4: 02013703 ld a4,32(sp) + 800015e8: 002c9793 slli a5,s9,0x2 + 800015ec: 00291613 slli a2,s2,0x2 + 800015f0: 00f70c33 add s8,a4,a5 + 800015f4: 000c2b83 lw s7,0(s8) + 800015f8: 00ca0b33 add s6,s4,a2 + 800015fc: 000b2783 lw a5,0(s6) + 80001600: 002b9813 slli a6,s7,0x2 + 80001604: 00300593 li a1,3 + 80001608: 000b8513 mv a0,s7 + 8000160c: 00f13023 sd a5,0(sp) + 80001610: 01098db3 add s11,s3,a6 + 80001614: 32c030ef jal ra,80004940 <__divdi3> + 80001618: 00013783 ld a5,0(sp) + 8000161c: 000dae83 lw t4,0(s11) + 80001620: 0005071b sext.w a4,a0 + 80001624: 1c87d463 bge a5,s0,800017ec <_Z11suffixArrayPiS_ii+0x54c> + 80001628: 0017959b slliw a1,a5,0x1 + 8000162c: 00f585bb addw a1,a1,a5 + 80001630: 0015859b addiw a1,a1,1 + 80001634: 00259513 slli a0,a1,0x2 + 80001638: 00a98533 add a0,s3,a0 + 8000163c: 008787bb addw a5,a5,s0 + 80001640: 00052503 lw a0,0(a0) + 80001644: 00279793 slli a5,a5,0x2 + 80001648: 00271713 slli a4,a4,0x2 + 8000164c: 00f487b3 add a5,s1,a5 + 80001650: 00e48733 add a4,s1,a4 + 80001654: 0007a803 lw a6,0(a5) + 80001658: 00072783 lw a5,0(a4) + 8000165c: 11d54663 blt a0,t4,80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 80001660: 11d50263 beq a0,t4,80001764 <_Z11suffixArrayPiS_ii+0x4c4> + 80001664: 01013783 ld a5,16(sp) + 80001668: 002d1693 slli a3,s10,0x2 + 8000166c: 001d051b addiw a0,s10,1 + 80001670: 00d787b3 add a5,a5,a3 + 80001674: 0177a023 sw s7,0(a5) + 80001678: 001c8c9b addiw s9,s9,1 + 8000167c: 0005079b sext.w a5,a0 + 80001680: 05940663 beq s0,s9,800016cc <_Z11suffixArrayPiS_ii+0x42c> + 80001684: 00078d13 mv s10,a5 + 80001688: 02813783 ld a5,40(sp) + 8000168c: f4fd4ce3 blt s10,a5,800015e4 <_Z11suffixArrayPiS_ii+0x344> + 80001690: 0b813083 ld ra,184(sp) + 80001694: 0b013403 ld s0,176(sp) + 80001698: 0a813483 ld s1,168(sp) + 8000169c: 0a013903 ld s2,160(sp) + 800016a0: 09813983 ld s3,152(sp) + 800016a4: 09013a03 ld s4,144(sp) + 800016a8: 08813a83 ld s5,136(sp) + 800016ac: 08013b03 ld s6,128(sp) + 800016b0: 07813b83 ld s7,120(sp) + 800016b4: 07013c03 ld s8,112(sp) + 800016b8: 06813c83 ld s9,104(sp) + 800016bc: 06013d03 ld s10,96(sp) + 800016c0: 05813d83 ld s11,88(sp) + 800016c4: 0c010113 addi sp,sp,192 + 800016c8: 00008067 ret + 800016cc: 1b595c63 bge s2,s5,80001884 <_Z11suffixArrayPiS_ii+0x5e4> + 800016d0: 04412783 lw a5,68(sp) + 800016d4: 00468693 addi a3,a3,4 + 800016d8: 000b0613 mv a2,s6 + 800016dc: 41278e3b subw t3,a5,s2 + 800016e0: 01013783 ld a5,16(sp) + 800016e4: 020e1e13 slli t3,t3,0x20 + 800016e8: 020e5e13 srli t3,t3,0x20 + 800016ec: 00d786b3 add a3,a5,a3 + 800016f0: 04813783 ld a5,72(sp) + 800016f4: 012e0e33 add t3,t3,s2 + 800016f8: 002e1e13 slli t3,t3,0x2 + 800016fc: 0009089b sext.w a7,s2 + 80001700: 00fe0e33 add t3,t3,a5 + 80001704: 0180006f j 8000171c <_Z11suffixArrayPiS_ii+0x47c> + 80001708: 0015879b addiw a5,a1,1 + 8000170c: 00f6a023 sw a5,0(a3) + 80001710: 00460613 addi a2,a2,4 + 80001714: 00468693 addi a3,a3,4 + 80001718: 02ce0a63 beq t3,a2,8000174c <_Z11suffixArrayPiS_ii+0x4ac> + 8000171c: 00062703 lw a4,0(a2) + 80001720: 4087083b subw a6,a4,s0 + 80001724: 0017159b slliw a1,a4,0x1 + 80001728: 0018179b slliw a5,a6,0x1 + 8000172c: 00e585bb addw a1,a1,a4 + 80001730: 010787bb addw a5,a5,a6 + 80001734: fc874ae3 blt a4,s0,80001708 <_Z11suffixArrayPiS_ii+0x468> + 80001738: 0027879b addiw a5,a5,2 + 8000173c: 00f6a023 sw a5,0(a3) + 80001740: 00460613 addi a2,a2,4 + 80001744: 00468693 addi a3,a3,4 + 80001748: fcce1ae3 bne t3,a2,8000171c <_Z11suffixArrayPiS_ii+0x47c> + 8000174c: 03813783 ld a5,56(sp) + 80001750: 411508bb subw a7,a0,a7 + 80001754: 000a8913 mv s2,s5 + 80001758: 00f888bb addw a7,a7,a5 + 8000175c: 00188d1b addiw s10,a7,1 + 80001760: f29ff06f j 80001688 <_Z11suffixArrayPiS_ii+0x3e8> + 80001764: f107c0e3 blt a5,a6,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001768: 01013783 ld a5,16(sp) + 8000176c: 002d1713 slli a4,s10,0x2 + 80001770: 001d061b addiw a2,s10,1 + 80001774: 00e787b3 add a5,a5,a4 + 80001778: 00b7a023 sw a1,0(a5) + 8000177c: 0019091b addiw s2,s2,1 + 80001780: 0006079b sext.w a5,a2 + 80001784: f12a90e3 bne s5,s2,80001684 <_Z11suffixArrayPiS_ii+0x3e4> + 80001788: 0e8cde63 bge s9,s0,80001884 <_Z11suffixArrayPiS_ii+0x5e4> + 8000178c: 01812783 lw a5,24(sp) + 80001790: 01013683 ld a3,16(sp) + 80001794: 00470713 addi a4,a4,4 + 80001798: 419785bb subw a1,a5,s9 + 8000179c: 02059593 slli a1,a1,0x20 + 800017a0: 0205d593 srli a1,a1,0x20 + 800017a4: 00e68733 add a4,a3,a4 + 800017a8: 03013683 ld a3,48(sp) + 800017ac: 019585b3 add a1,a1,s9 + 800017b0: 00259593 slli a1,a1,0x2 + 800017b4: 000c0793 mv a5,s8 + 800017b8: 000c889b sext.w a7,s9 + 800017bc: 00d585b3 add a1,a1,a3 + 800017c0: 0007a683 lw a3,0(a5) + 800017c4: 00478793 addi a5,a5,4 + 800017c8: 00470713 addi a4,a4,4 + 800017cc: fed72e23 sw a3,-4(a4) + 800017d0: fef598e3 bne a1,a5,800017c0 <_Z11suffixArrayPiS_ii+0x520> + 800017d4: 00813783 ld a5,8(sp) + 800017d8: 411608bb subw a7,a2,a7 + 800017dc: 00040c93 mv s9,s0 + 800017e0: 00f888bb addw a7,a7,a5 + 800017e4: 00188d1b addiw s10,a7,1 + 800017e8: ea1ff06f j 80001688 <_Z11suffixArrayPiS_ii+0x3e8> + 800017ec: 408787bb subw a5,a5,s0 + 800017f0: 0017959b slliw a1,a5,0x1 + 800017f4: 00f585bb addw a1,a1,a5 + 800017f8: 0025859b addiw a1,a1,2 + 800017fc: 00259f13 slli t5,a1,0x2 + 80001800: 01e98f33 add t5,s3,t5 + 80001804: 000f2f83 lw t6,0(t5) + 80001808: 00178793 addi a5,a5,1 + 8000180c: 00e4073b addw a4,s0,a4 + 80001810: 00279793 slli a5,a5,0x2 + 80001814: 00271713 slli a4,a4,0x2 + 80001818: 00f487b3 add a5,s1,a5 + 8000181c: 00e48733 add a4,s1,a4 + 80001820: 004f2503 lw a0,4(t5) + 80001824: 00072703 lw a4,0(a4) + 80001828: 0007af03 lw t5,0(a5) + 8000182c: 004da783 lw a5,4(s11) + 80001830: f3dfcce3 blt t6,t4,80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 80001834: e3df98e3 bne t6,t4,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001838: f2f548e3 blt a0,a5,80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 8000183c: e2f514e3 bne a0,a5,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001840: e3e742e3 blt a4,t5,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001844: f25ff06f j 80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 80001848: 000c0693 mv a3,s8 + 8000184c: 000a8613 mv a2,s5 + 80001850: 000a0593 mv a1,s4 + 80001854: 00048513 mv a0,s1 + 80001858: a49ff0ef jal ra,800012a0 <_Z11suffixArrayPiS_ii> + 8000185c: 000a0693 mv a3,s4 + 80001860: 00000713 li a4,0 + 80001864: 0006a783 lw a5,0(a3) + 80001868: 0017071b addiw a4,a4,1 + 8000186c: 00468693 addi a3,a3,4 + 80001870: 00279793 slli a5,a5,0x2 + 80001874: 00f487b3 add a5,s1,a5 + 80001878: 00e7a023 sw a4,0(a5) + 8000187c: ff5714e3 bne a4,s5,80001864 <_Z11suffixArrayPiS_ii+0x5c4> + 80001880: cd9ff06f j 80001558 <_Z11suffixArrayPiS_ii+0x2b8> + 80001884: 002d0d1b addiw s10,s10,2 + 80001888: e01ff06f j 80001688 <_Z11suffixArrayPiS_ii+0x3e8> + +000000008000188c : + 8000188c: 00006797 auipc a5,0x6 + 80001890: 2447b783 ld a5,580(a5) # 80007ad0 + 80001894: 0007a783 lw a5,0(a5) + 80001898: fd010113 addi sp,sp,-48 + 8000189c: 01213823 sd s2,16(sp) + 800018a0: 00100513 li a0,1 + 800018a4: 00006917 auipc s2,0x6 + 800018a8: 12c90913 addi s2,s2,300 # 800079d0 <_ZL1N> + 800018ac: 02113423 sd ra,40(sp) + 800018b0: 00f92023 sw a5,0(s2) + 800018b4: 01313423 sd s3,8(sp) + 800018b8: 02813023 sd s0,32(sp) + 800018bc: 00913c23 sd s1,24(sp) + 800018c0: cf5fe0ef jal ra,800005b4 + 800018c4: 00092503 lw a0,0(s2) + 800018c8: 00006997 auipc s3,0x6 + 800018cc: 11098993 addi s3,s3,272 # 800079d8 <_ZL1s> + 800018d0: 00a5051b addiw a0,a0,10 + 800018d4: 00251513 slli a0,a0,0x2 + 800018d8: c41fe0ef jal ra,80000518 + 800018dc: 00092783 lw a5,0(s2) + 800018e0: 00a9b023 sd a0,0(s3) + 800018e4: 00a7851b addiw a0,a5,10 + 800018e8: 00251513 slli a0,a0,0x2 + 800018ec: c2dfe0ef jal ra,80000518 + 800018f0: 00092783 lw a5,0(s2) + 800018f4: 00006717 auipc a4,0x6 + 800018f8: 0ea73623 sd a0,236(a4) # 800079e0 <_ZL2sa> + 800018fc: 02f05e63 blez a5,80001938 + 80001900: 00000413 li s0,0 + 80001904: cc5fe0ef jal ra,800005c8 + 80001908: 0009b483 ld s1,0(s3) + 8000190c: 02051513 slli a0,a0,0x20 + 80001910: 00241793 slli a5,s0,0x2 + 80001914: 01a00593 li a1,26 + 80001918: 02055513 srli a0,a0,0x20 + 8000191c: 00f484b3 add s1,s1,a5 + 80001920: 070030ef jal ra,80004990 <__umoddi3> + 80001924: 00092703 lw a4,0(s2) + 80001928: 00140413 addi s0,s0,1 + 8000192c: 00a4a023 sw a0,0(s1) + 80001930: 0004079b sext.w a5,s0 + 80001934: fce7c8e3 blt a5,a4,80001904 + 80001938: 02813083 ld ra,40(sp) + 8000193c: 02013403 ld s0,32(sp) + 80001940: 01813483 ld s1,24(sp) + 80001944: 01013903 ld s2,16(sp) + 80001948: 00813983 ld s3,8(sp) + 8000194c: 03010113 addi sp,sp,48 + 80001950: 00008067 ret + +0000000080001954 : + 80001954: 01a00693 li a3,26 + 80001958: 00006617 auipc a2,0x6 + 8000195c: 07862603 lw a2,120(a2) # 800079d0 <_ZL1N> + 80001960: 00006597 auipc a1,0x6 + 80001964: 0805b583 ld a1,128(a1) # 800079e0 <_ZL2sa> + 80001968: 00006517 auipc a0,0x6 + 8000196c: 07053503 ld a0,112(a0) # 800079d8 <_ZL1s> + 80001970: 931ff06f j 800012a0 <_Z11suffixArrayPiS_ii> + +0000000080001974 : + 80001974: 00006597 auipc a1,0x6 + 80001978: 05c5a583 lw a1,92(a1) # 800079d0 <_ZL1N> + 8000197c: 00006517 auipc a0,0x6 + 80001980: 06453503 ld a0,100(a0) # 800079e0 <_ZL2sa> + 80001984: 00259593 slli a1,a1,0x2 + 80001988: ff010113 addi sp,sp,-16 + 8000198c: 00b505b3 add a1,a0,a1 + 80001990: 00113423 sd ra,8(sp) + 80001994: c85fe0ef jal ra,80000618 + 80001998: 00006797 auipc a5,0x6 + 8000199c: 1387b783 ld a5,312(a5) # 80007ad0 + 800019a0: 0187a783 lw a5,24(a5) + 800019a4: 00813083 ld ra,8(sp) + 800019a8: 0005051b sext.w a0,a0 + 800019ac: 40a78533 sub a0,a5,a0 + 800019b0: 00153513 seqz a0,a0 + 800019b4: 01010113 addi sp,sp,16 + 800019b8: 00008067 ret + +00000000800019bc : + 800019bc: 00008067 ret + +00000000800019c0 : + 800019c0: 00006797 auipc a5,0x6 + 800019c4: 1107b783 ld a5,272(a5) # 80007ad0 + 800019c8: 0187a503 lw a0,24(a5) + 800019cc: 00006797 auipc a5,0x6 + 800019d0: 01c7a783 lw a5,28(a5) # 800079e8 <_ZL3ans> + 800019d4: 40f50533 sub a0,a0,a5 + 800019d8: 00153513 seqz a0,a0 + 800019dc: 00008067 ret + +00000000800019e0 <_ZN8N_puzzleILi4EEC1Ev>: + 800019e0: f6010113 addi sp,sp,-160 + 800019e4: 07613023 sd s6,96(sp) + 800019e8: 08113c23 sd ra,152(sp) + 800019ec: 08813823 sd s0,144(sp) + 800019f0: 08913423 sd s1,136(sp) + 800019f4: 09213023 sd s2,128(sp) + 800019f8: 07313c23 sd s3,120(sp) + 800019fc: 07413823 sd s4,112(sp) + 80001a00: 07513423 sd s5,104(sp) + 80001a04: 05713c23 sd s7,88(sp) + 80001a08: 05813823 sd s8,80(sp) + 80001a0c: 05913423 sd s9,72(sp) + 80001a10: 00100793 li a5,1 + 80001a14: 00f50023 sb a5,0(a0) + 80001a18: 00050b13 mv s6,a0 + 80001a1c: 000501a3 sb zero,3(a0) + 80001a20: 00010713 mv a4,sp + 80001a24: 00000793 li a5,0 + 80001a28: 01000693 li a3,16 + 80001a2c: 00f72023 sw a5,0(a4) + 80001a30: 0017879b addiw a5,a5,1 + 80001a34: 00470713 addi a4,a4,4 + 80001a38: fed79ae3 bne a5,a3,80001a2c <_ZN8N_puzzleILi4EEC1Ev+0x4c> + 80001a3c: 03c10a13 addi s4,sp,60 + 80001a40: 000b0413 mv s0,s6 + 80001a44: 00000993 li s3,0 + 80001a48: 00000c93 li s9,0 + 80001a4c: 00400913 li s2,4 + 80001a50: ff000a93 li s5,-16 + 80001a54: 000a0c13 mv s8,s4 + 80001a58: 00000b93 li s7,0 + 80001a5c: 0109849b addiw s1,s3,16 + 80001a60: b69fe0ef jal ra,800005c8 + 80001a64: 417485bb subw a1,s1,s7 + 80001a68: 02059593 slli a1,a1,0x20 + 80001a6c: 02051513 slli a0,a0,0x20 + 80001a70: 0205d593 srli a1,a1,0x20 + 80001a74: 02055513 srli a0,a0,0x20 + 80001a78: 719020ef jal ra,80004990 <__umoddi3> + 80001a7c: 0005051b sext.w a0,a0 + 80001a80: 00251513 slli a0,a0,0x2 + 80001a84: 04010793 addi a5,sp,64 + 80001a88: 00a787b3 add a5,a5,a0 + 80001a8c: fc07a583 lw a1,-64(a5) + 80001a90: 000b871b sext.w a4,s7 + 80001a94: 01740833 add a6,s0,s7 + 80001a98: fff5879b addiw a5,a1,-1 + 80001a9c: 41f7d69b sraiw a3,a5,0x1f + 80001aa0: 01e6d61b srliw a2,a3,0x1e + 80001aa4: 00f607bb addw a5,a2,a5 + 80001aa8: 0037f693 andi a3,a5,3 + 80001aac: 40c686bb subw a3,a3,a2 + 80001ab0: 4027d79b sraiw a5,a5,0x2 + 80001ab4: 419787bb subw a5,a5,s9 + 80001ab8: 40e6873b subw a4,a3,a4 + 80001abc: 41f7d61b sraiw a2,a5,0x1f + 80001ac0: 41f7569b sraiw a3,a4,0x1f + 80001ac4: 00f647b3 xor a5,a2,a5 + 80001ac8: 00e6c733 xor a4,a3,a4 + 80001acc: 40c787bb subw a5,a5,a2 + 80001ad0: 40d7073b subw a4,a4,a3 + 80001ad4: 00b80223 sb a1,4(a6) + 80001ad8: 00e787bb addw a5,a5,a4 + 80001adc: 0c059063 bnez a1,80001b9c <_ZN8N_puzzleILi4EEC1Ev+0x1bc> + 80001ae0: 019b00a3 sb s9,1(s6) + 80001ae4: 017b0123 sb s7,2(s6) + 80001ae8: 000c2783 lw a5,0(s8) + 80001aec: 04010713 addi a4,sp,64 + 80001af0: 00a70533 add a0,a4,a0 + 80001af4: 001b8b93 addi s7,s7,1 + 80001af8: fcf52023 sw a5,-64(a0) + 80001afc: ffcc0c13 addi s8,s8,-4 + 80001b00: f72b90e3 bne s7,s2,80001a60 <_ZN8N_puzzleILi4EEC1Ev+0x80> + 80001b04: ffc9899b addiw s3,s3,-4 + 80001b08: 001c8c9b addiw s9,s9,1 + 80001b0c: ff0a0a13 addi s4,s4,-16 + 80001b10: 00440413 addi s0,s0,4 + 80001b14: f55990e3 bne s3,s5,80001a54 <_ZN8N_puzzleILi4EEC1Ev+0x74> + 80001b18: 000b2a23 sw zero,20(s6) + 80001b1c: 004b0593 addi a1,s6,4 + 80001b20: 014b0513 addi a0,s6,20 + 80001b24: 00000713 li a4,0 + 80001b28: ffc58693 addi a3,a1,-4 + 80001b2c: 0057179b slliw a5,a4,0x5 + 80001b30: 40e787bb subw a5,a5,a4 + 80001b34: 0027979b slliw a5,a5,0x2 + 80001b38: 40e787bb subw a5,a5,a4 + 80001b3c: 0027979b slliw a5,a5,0x2 + 80001b40: 00468603 lb a2,4(a3) + 80001b44: 00e787bb addw a5,a5,a4 + 80001b48: 0027979b slliw a5,a5,0x2 + 80001b4c: 00e7873b addw a4,a5,a4 + 80001b50: 00168693 addi a3,a3,1 + 80001b54: 00c7073b addw a4,a4,a2 + 80001b58: fcb69ae3 bne a3,a1,80001b2c <_ZN8N_puzzleILi4EEC1Ev+0x14c> + 80001b5c: 00468593 addi a1,a3,4 + 80001b60: fcb514e3 bne a0,a1,80001b28 <_ZN8N_puzzleILi4EEC1Ev+0x148> + 80001b64: 09813083 ld ra,152(sp) + 80001b68: 09013403 ld s0,144(sp) + 80001b6c: 00eb2a23 sw a4,20(s6) + 80001b70: 08813483 ld s1,136(sp) + 80001b74: 08013903 ld s2,128(sp) + 80001b78: 07813983 ld s3,120(sp) + 80001b7c: 07013a03 ld s4,112(sp) + 80001b80: 06813a83 ld s5,104(sp) + 80001b84: 06013b03 ld s6,96(sp) + 80001b88: 05813b83 ld s7,88(sp) + 80001b8c: 05013c03 ld s8,80(sp) + 80001b90: 04813c83 ld s9,72(sp) + 80001b94: 0a010113 addi sp,sp,160 + 80001b98: 00008067 ret + 80001b9c: 003b4703 lbu a4,3(s6) + 80001ba0: 00e787bb addw a5,a5,a4 + 80001ba4: 00fb01a3 sb a5,3(s6) + 80001ba8: f41ff06f j 80001ae8 <_ZN8N_puzzleILi4EEC1Ev+0x108> + +0000000080001bac <_ZN8N_puzzleILi4EEC1EPi>: + 80001bac: fe010113 addi sp,sp,-32 + 80001bb0: 00100793 li a5,1 + 80001bb4: 00010e93 mv t4,sp + 80001bb8: 00f50023 sb a5,0(a0) + 80001bbc: 00813c23 sd s0,24(sp) + 80001bc0: 000501a3 sb zero,3(a0) + 80001bc4: 01010f13 addi t5,sp,16 + 80001bc8: 000e8793 mv a5,t4 + 80001bcc: 00078023 sb zero,0(a5) + 80001bd0: 00178793 addi a5,a5,1 + 80001bd4: ffe79ce3 bne a5,t5,80001bcc <_ZN8N_puzzleILi4EEC1EPi+0x20> + 80001bd8: 00050f93 mv t6,a0 + 80001bdc: 00000e13 li t3,0 + 80001be0: 00100393 li t2,1 + 80001be4: 00400293 li t0,4 + 80001be8: 00058313 mv t1,a1 + 80001bec: 00000613 li a2,0 + 80001bf0: 00032803 lw a6,0(t1) + 80001bf4: 0006071b sext.w a4,a2 + 80001bf8: 00cf8433 add s0,t6,a2 + 80001bfc: fff8079b addiw a5,a6,-1 + 80001c00: 41f7d69b sraiw a3,a5,0x1f + 80001c04: 01e6d89b srliw a7,a3,0x1e + 80001c08: 00f887bb addw a5,a7,a5 + 80001c0c: 0037f693 andi a3,a5,3 + 80001c10: 411686bb subw a3,a3,a7 + 80001c14: 40e6873b subw a4,a3,a4 + 80001c18: 41f7569b sraiw a3,a4,0x1f + 80001c1c: 4027d79b sraiw a5,a5,0x2 + 80001c20: 41c787bb subw a5,a5,t3 + 80001c24: 00e6c733 xor a4,a3,a4 + 80001c28: 41f7d89b sraiw a7,a5,0x1f + 80001c2c: 40d7073b subw a4,a4,a3 + 80001c30: 01010693 addi a3,sp,16 + 80001c34: 00f8c7b3 xor a5,a7,a5 + 80001c38: 010686b3 add a3,a3,a6 + 80001c3c: 411787bb subw a5,a5,a7 + 80001c40: 01040223 sb a6,4(s0) + 80001c44: fe768823 sb t2,-16(a3) + 80001c48: 00e787bb addw a5,a5,a4 + 80001c4c: 08081a63 bnez a6,80001ce0 <_ZN8N_puzzleILi4EEC1EPi+0x134> + 80001c50: 01c500a3 sb t3,1(a0) + 80001c54: 00c50123 sb a2,2(a0) + 80001c58: 00160613 addi a2,a2,1 + 80001c5c: 00430313 addi t1,t1,4 + 80001c60: f85618e3 bne a2,t0,80001bf0 <_ZN8N_puzzleILi4EEC1EPi+0x44> + 80001c64: 001e0e1b addiw t3,t3,1 + 80001c68: 01058593 addi a1,a1,16 + 80001c6c: 004f8f93 addi t6,t6,4 + 80001c70: f65e1ce3 bne t3,t0,80001be8 <_ZN8N_puzzleILi4EEC1EPi+0x3c> + 80001c74: 000ec783 lbu a5,0(t4) + 80001c78: 001e8e93 addi t4,t4,1 + 80001c7c: 06078a63 beqz a5,80001cf0 <_ZN8N_puzzleILi4EEC1EPi+0x144> + 80001c80: ffee9ae3 bne t4,t5,80001c74 <_ZN8N_puzzleILi4EEC1EPi+0xc8> + 80001c84: 00052a23 sw zero,20(a0) + 80001c88: 00450593 addi a1,a0,4 + 80001c8c: 01450813 addi a6,a0,20 + 80001c90: 00000713 li a4,0 + 80001c94: ffc58693 addi a3,a1,-4 + 80001c98: 0057179b slliw a5,a4,0x5 + 80001c9c: 40e787bb subw a5,a5,a4 + 80001ca0: 0027979b slliw a5,a5,0x2 + 80001ca4: 40e787bb subw a5,a5,a4 + 80001ca8: 0027979b slliw a5,a5,0x2 + 80001cac: 00468603 lb a2,4(a3) + 80001cb0: 00e787bb addw a5,a5,a4 + 80001cb4: 0027979b slliw a5,a5,0x2 + 80001cb8: 00e7873b addw a4,a5,a4 + 80001cbc: 00168693 addi a3,a3,1 + 80001cc0: 00c7073b addw a4,a4,a2 + 80001cc4: fcb69ae3 bne a3,a1,80001c98 <_ZN8N_puzzleILi4EEC1EPi+0xec> + 80001cc8: 00468593 addi a1,a3,4 + 80001ccc: fcb814e3 bne a6,a1,80001c94 <_ZN8N_puzzleILi4EEC1EPi+0xe8> + 80001cd0: 01813403 ld s0,24(sp) + 80001cd4: 00e52a23 sw a4,20(a0) + 80001cd8: 02010113 addi sp,sp,32 + 80001cdc: 00008067 ret + 80001ce0: 00354703 lbu a4,3(a0) + 80001ce4: 00e787bb addw a5,a5,a4 + 80001ce8: 00f501a3 sb a5,3(a0) + 80001cec: f6dff06f j 80001c58 <_ZN8N_puzzleILi4EEC1EPi+0xac> + 80001cf0: 01813403 ld s0,24(sp) + 80001cf4: 00050023 sb zero,0(a0) + 80001cf8: 02010113 addi sp,sp,32 + 80001cfc: 00008067 ret + +0000000080001d00 <_ZNK8N_puzzleILi4EEeqERKS0_>: + 80001d00: 00050713 mv a4,a0 + 80001d04: 00054503 lbu a0,0(a0) + 80001d08: 04050863 beqz a0,80001d58 <_ZNK8N_puzzleILi4EEeqERKS0_+0x58> + 80001d0c: 0005c503 lbu a0,0(a1) + 80001d10: 04050463 beqz a0,80001d58 <_ZNK8N_puzzleILi4EEeqERKS0_+0x58> + 80001d14: 0145a683 lw a3,20(a1) + 80001d18: 01472783 lw a5,20(a4) + 80001d1c: 02f69c63 bne a3,a5,80001d54 <_ZNK8N_puzzleILi4EEeqERKS0_+0x54> + 80001d20: 00800693 li a3,8 + 80001d24: 01800893 li a7,24 + 80001d28: ffc68793 addi a5,a3,-4 + 80001d2c: 00f70833 add a6,a4,a5 + 80001d30: 00f58633 add a2,a1,a5 + 80001d34: 00084803 lbu a6,0(a6) + 80001d38: 00064603 lbu a2,0(a2) + 80001d3c: 00178793 addi a5,a5,1 + 80001d40: 00c81a63 bne a6,a2,80001d54 <_ZNK8N_puzzleILi4EEeqERKS0_+0x54> + 80001d44: fed794e3 bne a5,a3,80001d2c <_ZNK8N_puzzleILi4EEeqERKS0_+0x2c> + 80001d48: 00468693 addi a3,a3,4 + 80001d4c: fd169ee3 bne a3,a7,80001d28 <_ZNK8N_puzzleILi4EEeqERKS0_+0x28> + 80001d50: 00008067 ret + 80001d54: 00000513 li a0,0 + 80001d58: 00008067 ret + +0000000080001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0>: + 80001d5c: 00064783 lbu a5,0(a2) + 80001d60: fe010113 addi sp,sp,-32 + 80001d64: 00913423 sd s1,8(sp) + 80001d68: 00113c23 sd ra,24(sp) + 80001d6c: 00813823 sd s0,16(sp) + 80001d70: 00060493 mv s1,a2 + 80001d74: 00078e63 beqz a5,80001d90 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x34> + 80001d78: 01462783 lw a5,20(a2) + 80001d7c: fff5051b addiw a0,a0,-1 + 80001d80: 00a7f533 and a0,a5,a0 + 80001d84: 02051793 slli a5,a0,0x20 + 80001d88: 01d7d793 srli a5,a5,0x1d + 80001d8c: 00f585b3 add a1,a1,a5 + 80001d90: 0005b403 ld s0,0(a1) + 80001d94: 00041863 bnez s0,80001da4 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x48> + 80001d98: 01c0006f j 80001db4 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x58> + 80001d9c: 01843403 ld s0,24(s0) + 80001da0: 00040a63 beqz s0,80001db4 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x58> + 80001da4: 00040513 mv a0,s0 + 80001da8: 00048593 mv a1,s1 + 80001dac: f55ff0ef jal ra,80001d00 <_ZNK8N_puzzleILi4EEeqERKS0_> + 80001db0: fe0506e3 beqz a0,80001d9c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x40> + 80001db4: 01813083 ld ra,24(sp) + 80001db8: 00040513 mv a0,s0 + 80001dbc: 01013403 ld s0,16(sp) + 80001dc0: 00813483 ld s1,8(sp) + 80001dc4: 02010113 addi sp,sp,32 + 80001dc8: 00008067 ret + +0000000080001dcc <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi>: + 80001dcc: 00100793 li a5,1 + 80001dd0: 06f58463 beq a1,a5,80001e38 <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x6c> + 80001dd4: 01053883 ld a7,16(a0) + 80001dd8: 00359793 slli a5,a1,0x3 + 80001ddc: 00100e93 li t4,1 + 80001de0: 00f887b3 add a5,a7,a5 + 80001de4: 0007b603 ld a2,0(a5) + 80001de8: 01c0006f j 80001e04 <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x38> + 80001dec: 0106b023 sd a6,0(a3) + 80001df0: 00c73023 sd a2,0(a4) + 80001df4: 0006b703 ld a4,0(a3) + 80001df8: 02f62023 sw a5,32(a2) + 80001dfc: 02a72023 sw a0,32(a4) + 80001e00: 03d58c63 beq a1,t4,80001e38 <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x6c> + 80001e04: 01f5d79b srliw a5,a1,0x1f + 80001e08: 00b787bb addw a5,a5,a1 + 80001e0c: 4017d79b sraiw a5,a5,0x1 + 80001e10: 00058513 mv a0,a1 + 80001e14: 0007859b sext.w a1,a5 + 80001e18: 00359713 slli a4,a1,0x3 + 80001e1c: 00e88733 add a4,a7,a4 + 80001e20: 00073803 ld a6,0(a4) + 80001e24: 02862303 lw t1,40(a2) + 80001e28: 00351693 slli a3,a0,0x3 + 80001e2c: 02882e03 lw t3,40(a6) + 80001e30: 00d886b3 add a3,a7,a3 + 80001e34: fbc34ce3 blt t1,t3,80001dec <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x20> + 80001e38: 00008067 ret + +0000000080001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i>: + 80001e3c: fd010113 addi sp,sp,-48 + 80001e40: 01313423 sd s3,8(sp) + 80001e44: 00052983 lw s3,0(a0) + 80001e48: 00913c23 sd s1,24(sp) + 80001e4c: 00058493 mv s1,a1 + 80001e50: 00853583 ld a1,8(a0) + 80001e54: 02813023 sd s0,32(sp) + 80001e58: 01213823 sd s2,16(sp) + 80001e5c: 00050413 mv s0,a0 + 80001e60: 00060913 mv s2,a2 + 80001e64: 00098513 mv a0,s3 + 80001e68: 00048613 mv a2,s1 + 80001e6c: 02113423 sd ra,40(sp) + 80001e70: eedff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 80001e74: 04050263 beqz a0,80001eb8 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x7c> + 80001e78: 02c54783 lbu a5,44(a0) + 80001e7c: 02079063 bnez a5,80001e9c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x60> + 80001e80: 00054703 lbu a4,0(a0) + 80001e84: 04000793 li a5,64 + 80001e88: 00070463 beqz a4,80001e90 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x54> + 80001e8c: 00350783 lb a5,3(a0) + 80001e90: 02852703 lw a4,40(a0) + 80001e94: 00f907bb addw a5,s2,a5 + 80001e98: 16e7cc63 blt a5,a4,80002010 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1d4> + 80001e9c: 02813083 ld ra,40(sp) + 80001ea0: 02013403 ld s0,32(sp) + 80001ea4: 01813483 ld s1,24(sp) + 80001ea8: 01013903 ld s2,16(sp) + 80001eac: 00813983 ld s3,8(sp) + 80001eb0: 03010113 addi sp,sp,48 + 80001eb4: 00008067 ret + 80001eb8: 01842783 lw a5,24(s0) + 80001ebc: 1af9c263 blt s3,a5,80002060 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x224> + 80001ec0: 0017879b addiw a5,a5,1 + 80001ec4: 00f42c23 sw a5,24(s0) + 80001ec8: 03800513 li a0,56 + 80001ecc: e4cfe0ef jal ra,80000518 + 80001ed0: 0004c803 lbu a6,0(s1) + 80001ed4: 00843683 ld a3,8(s0) + 80001ed8: 00000713 li a4,0 + 80001edc: 12081663 bnez a6,80002008 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1cc> + 80001ee0: 00042603 lw a2,0(s0) + 80001ee4: 01842883 lw a7,24(s0) + 80001ee8: 00448793 addi a5,s1,4 + 80001eec: fff6061b addiw a2,a2,-1 + 80001ef0: 00c77733 and a4,a4,a2 + 80001ef4: 02071713 slli a4,a4,0x20 + 80001ef8: 01d75713 srli a4,a4,0x1d + 80001efc: 00e68733 add a4,a3,a4 + 80001f00: 00073303 ld t1,0(a4) + 80001f04: 01050023 sb a6,0(a0) + 80001f08: 0014c683 lbu a3,1(s1) + 80001f0c: 00450713 addi a4,a0,4 + 80001f10: 01448593 addi a1,s1,20 + 80001f14: 00d500a3 sb a3,1(a0) + 80001f18: 0024c683 lbu a3,2(s1) + 80001f1c: 00d50123 sb a3,2(a0) + 80001f20: 00348603 lb a2,3(s1) + 80001f24: 00c501a3 sb a2,3(a0) + 80001f28: 0144a683 lw a3,20(s1) + 80001f2c: 00d52a23 sw a3,20(a0) + 80001f30: 00078683 lb a3,0(a5) + 80001f34: 00478793 addi a5,a5,4 + 80001f38: 00470713 addi a4,a4,4 + 80001f3c: fed70e23 sb a3,-4(a4) + 80001f40: ffd78683 lb a3,-3(a5) + 80001f44: fed70ea3 sb a3,-3(a4) + 80001f48: ffe78683 lb a3,-2(a5) + 80001f4c: fed70f23 sb a3,-2(a4) + 80001f50: fff78683 lb a3,-1(a5) + 80001f54: fed70fa3 sb a3,-1(a4) + 80001f58: fcb79ce3 bne a5,a1,80001f30 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0xf4> + 80001f5c: 00653c23 sd t1,24(a0) + 80001f60: 03152023 sw a7,32(a0) + 80001f64: 03252223 sw s2,36(a0) + 80001f68: 0c080863 beqz a6,80002038 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1fc> + 80001f6c: 02050623 sb zero,44(a0) + 80001f70: 0004c703 lbu a4,0(s1) + 80001f74: 0126093b addw s2,a2,s2 + 80001f78: 03252423 sw s2,40(a0) + 80001f7c: 02053823 sd zero,48(a0) + 80001f80: 00843683 ld a3,8(s0) + 80001f84: 00000793 li a5,0 + 80001f88: 00070463 beqz a4,80001f90 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x154> + 80001f8c: 0144a783 lw a5,20(s1) + 80001f90: 00042603 lw a2,0(s0) + 80001f94: 01842583 lw a1,24(s0) + 80001f98: 01043703 ld a4,16(s0) + 80001f9c: fff6061b addiw a2,a2,-1 + 80001fa0: 00c7f7b3 and a5,a5,a2 + 80001fa4: 02079793 slli a5,a5,0x20 + 80001fa8: 01d7d793 srli a5,a5,0x1d + 80001fac: 00f687b3 add a5,a3,a5 + 80001fb0: 00359693 slli a3,a1,0x3 + 80001fb4: 00a7b023 sd a0,0(a5) + 80001fb8: 00d707b3 add a5,a4,a3 + 80001fbc: 00a7b023 sd a0,0(a5) + 80001fc0: 00040513 mv a0,s0 + 80001fc4: e09ff0ef jal ra,80001dcc <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi> + 80001fc8: 01842703 lw a4,24(s0) + 80001fcc: 01c42783 lw a5,28(s0) + 80001fd0: 0007069b sext.w a3,a4 + 80001fd4: 0007861b sext.w a2,a5 + 80001fd8: 02d64263 blt a2,a3,80001ffc <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1c0> + 80001fdc: 00f42e23 sw a5,28(s0) + 80001fe0: 02813083 ld ra,40(sp) + 80001fe4: 02013403 ld s0,32(sp) + 80001fe8: 01813483 ld s1,24(sp) + 80001fec: 01013903 ld s2,16(sp) + 80001ff0: 00813983 ld s3,8(sp) + 80001ff4: 03010113 addi sp,sp,48 + 80001ff8: 00008067 ret + 80001ffc: 00070793 mv a5,a4 + 80002000: 00f42e23 sw a5,28(s0) + 80002004: fddff06f j 80001fe0 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1a4> + 80002008: 0144a703 lw a4,20(s1) + 8000200c: ed5ff06f j 80001ee0 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0xa4> + 80002010: 02052583 lw a1,32(a0) + 80002014: 02f52423 sw a5,40(a0) + 80002018: 00040513 mv a0,s0 + 8000201c: 02013403 ld s0,32(sp) + 80002020: 02813083 ld ra,40(sp) + 80002024: 01813483 ld s1,24(sp) + 80002028: 01013903 ld s2,16(sp) + 8000202c: 00813983 ld s3,8(sp) + 80002030: 03010113 addi sp,sp,48 + 80002034: d99ff06f j 80001dcc <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi> + 80002038: 02050623 sb zero,44(a0) + 8000203c: 0004c703 lbu a4,0(s1) + 80002040: 04000613 li a2,64 + 80002044: 0126093b addw s2,a2,s2 + 80002048: 03252423 sw s2,40(a0) + 8000204c: 02053823 sd zero,48(a0) + 80002050: 00843683 ld a3,8(s0) + 80002054: 00000793 li a5,0 + 80002058: f2070ce3 beqz a4,80001f90 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x154> + 8000205c: f31ff06f j 80001f8c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x150> + 80002060: 09800613 li a2,152 + 80002064: 00004597 auipc a1,0x4 + 80002068: 5e458593 addi a1,a1,1508 # 80006648 <_etext+0x3b4> + 8000206c: 00004517 auipc a0,0x4 + 80002070: 26c50513 addi a0,a0,620 # 800062d8 <_etext+0x44> + 80002074: 6c9030ef jal ra,80005f3c + 80002078: 00100513 li a0,1 + 8000207c: 019020ef jal ra,80004894 + +0000000080002080 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv>: + 80002080: 01852783 lw a5,24(a0) + 80002084: 00200713 li a4,2 + 80002088: 0ef75263 bge a4,a5,8000216c <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xec> + 8000208c: 01053603 ld a2,16(a0) + 80002090: 00100293 li t0,1 + 80002094: 02c0006f j 800020c0 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x40> + 80002098: 0deec863 blt t4,t5,80002168 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xe8> + 8000209c: 0107b023 sd a6,0(a5) + 800020a0: 00b6b023 sd a1,0(a3) + 800020a4: 0007b783 ld a5,0(a5) + 800020a8: 0255a023 sw t0,32(a1) + 800020ac: 000f829b sext.w t0,t6 + 800020b0: 03f7a023 sw t6,32(a5) + 800020b4: 01852783 lw a5,24(a0) + 800020b8: 0012971b slliw a4,t0,0x1 + 800020bc: 06f75263 bge a4,a5,80002120 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa0> + 800020c0: 00371793 slli a5,a4,0x3 + 800020c4: 00329693 slli a3,t0,0x3 + 800020c8: 00f60333 add t1,a2,a5 + 800020cc: 00d606b3 add a3,a2,a3 + 800020d0: 0006b803 ld a6,0(a3) + 800020d4: 00033883 ld a7,0(t1) + 800020d8: 00878793 addi a5,a5,8 + 800020dc: 00f607b3 add a5,a2,a5 + 800020e0: 0007b583 ld a1,0(a5) + 800020e4: 02882e83 lw t4,40(a6) + 800020e8: 0288ae03 lw t3,40(a7) + 800020ec: 0285af03 lw t5,40(a1) + 800020f0: 00170f9b addiw t6,a4,1 + 800020f4: fbcec2e3 blt t4,t3,80002098 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x18> + 800020f8: fbee52e3 bge t3,t5,8000209c <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x1c> + 800020fc: 01033023 sd a6,0(t1) + 80002100: 0116b023 sd a7,0(a3) + 80002104: 00033783 ld a5,0(t1) + 80002108: 0258a023 sw t0,32(a7) + 8000210c: 00070293 mv t0,a4 + 80002110: 02e7a023 sw a4,32(a5) + 80002114: 01852783 lw a5,24(a0) + 80002118: 0012971b slliw a4,t0,0x1 + 8000211c: faf742e3 blt a4,a5,800020c0 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x40> + 80002120: 00f70463 beq a4,a5,80002128 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa8> + 80002124: 00008067 ret + 80002128: 01053683 ld a3,16(a0) + 8000212c: 00329613 slli a2,t0,0x3 + 80002130: 00371793 slli a5,a4,0x3 + 80002134: 00f687b3 add a5,a3,a5 + 80002138: 00c686b3 add a3,a3,a2 + 8000213c: 0006b583 ld a1,0(a3) + 80002140: 0007b603 ld a2,0(a5) + 80002144: 0285a503 lw a0,40(a1) + 80002148: 02862803 lw a6,40(a2) + 8000214c: fca85ce3 bge a6,a0,80002124 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa4> + 80002150: 00b7b023 sd a1,0(a5) + 80002154: 00c6b023 sd a2,0(a3) + 80002158: 0007b783 ld a5,0(a5) + 8000215c: 02562023 sw t0,32(a2) + 80002160: 02e7a023 sw a4,32(a5) + 80002164: 00008067 ret + 80002168: 00008067 ret + 8000216c: 00200713 li a4,2 + 80002170: 00100293 li t0,1 + 80002174: faf718e3 bne a4,a5,80002124 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa4> + 80002178: fb1ff06f j 80002128 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa8> + +000000008000217c : + 8000217c: ed010113 addi sp,sp,-304 + 80002180: 03810513 addi a0,sp,56 + 80002184: 12113423 sd ra,296(sp) + 80002188: 12813023 sd s0,288(sp) + 8000218c: 10913c23 sd s1,280(sp) + 80002190: 11213823 sd s2,272(sp) + 80002194: 11313423 sd s3,264(sp) + 80002198: 11413023 sd s4,256(sp) + 8000219c: 0f513c23 sd s5,248(sp) + 800021a0: 0f613823 sd s6,240(sp) + 800021a4: 0f713423 sd s7,232(sp) + 800021a8: 0f813023 sd s8,224(sp) + 800021ac: 0d913c23 sd s9,216(sp) + 800021b0: 0da13823 sd s10,208(sp) + 800021b4: 0db13423 sd s11,200(sp) + 800021b8: 829ff0ef jal ra,800019e0 <_ZN8N_puzzleILi4EEC1Ev> + 800021bc: 00006797 auipc a5,0x6 + 800021c0: 9147b783 ld a5,-1772(a5) # 80007ad0 + 800021c4: 0007a783 lw a5,0(a5) + 800021c8: 00200713 li a4,2 + 800021cc: 2ae78ae3 beq a5,a4,80002c80 + 800021d0: 10f74e63 blt a4,a5,800022ec + 800021d4: 240780e3 beqz a5,80002c14 + 800021d8: 00100713 li a4,1 + 800021dc: 34e796e3 bne a5,a4,80002d28 + 800021e0: 08010493 addi s1,sp,128 + 800021e4: 00005597 auipc a1,0x5 + 800021e8: 32458593 addi a1,a1,804 # 80007508 <_ZL8PUZZLE_M> + 800021ec: 00048513 mv a0,s1 + 800021f0: 9bdff0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 800021f4: 08012783 lw a5,128(sp) + 800021f8: 08014803 lbu a6,128(sp) + 800021fc: 03810713 addi a4,sp,56 + 80002200: 02f12c23 sw a5,56(sp) + 80002204: 09412783 lw a5,148(sp) + 80002208: 09010413 addi s0,sp,144 + 8000220c: 04f12623 sw a5,76(sp) + 80002210: 00048793 mv a5,s1 + 80002214: 0047c503 lbu a0,4(a5) + 80002218: 0057c583 lbu a1,5(a5) + 8000221c: 0067c603 lbu a2,6(a5) + 80002220: 0077c683 lbu a3,7(a5) + 80002224: 00a70223 sb a0,4(a4) + 80002228: 00b702a3 sb a1,5(a4) + 8000222c: 00c70323 sb a2,6(a4) + 80002230: 00d703a3 sb a3,7(a4) + 80002234: 00478793 addi a5,a5,4 + 80002238: 00470713 addi a4,a4,4 + 8000223c: fc879ce3 bne a5,s0,80002214 + 80002240: 00001d37 lui s10,0x1 + 80002244: 800d0793 addi a5,s10,-2048 # 800 <_entry_offset+0x800> + 80002248: 00f13823 sd a5,16(sp) + 8000224c: 10080a63 beqz a6,80002360 + 80002250: 00040613 mv a2,s0 + 80002254: 03810513 addi a0,sp,56 + 80002258: 00000593 li a1,0 + 8000225c: 01000813 li a6,16 + 80002260: 01000893 li a7,16 + 80002264: ff060793 addi a5,a2,-16 + 80002268: 00050713 mv a4,a0 + 8000226c: 00470683 lb a3,4(a4) + 80002270: 10069863 bnez a3,80002380 + 80002274: 0107a023 sw a6,0(a5) + 80002278: 00478793 addi a5,a5,4 + 8000227c: 00170713 addi a4,a4,1 + 80002280: fef616e3 bne a2,a5,8000226c + 80002284: 0045859b addiw a1,a1,4 + 80002288: 01060613 addi a2,a2,16 + 8000228c: 00450513 addi a0,a0,4 + 80002290: fd159ae3 bne a1,a7,80002264 + 80002294: 08012683 lw a3,128(sp) + 80002298: 00100513 li a0,1 + 8000229c: 00000613 li a2,0 + 800022a0: 00100793 li a5,1 + 800022a4: 01000593 li a1,16 + 800022a8: 00279713 slli a4,a5,0x2 + 800022ac: 0c010813 addi a6,sp,192 + 800022b0: 00e80733 add a4,a6,a4 + 800022b4: fc072703 lw a4,-64(a4) + 800022b8: 00d75463 bge a4,a3,800022c0 + 800022bc: 0016061b addiw a2,a2,1 + 800022c0: 0017879b addiw a5,a5,1 + 800022c4: 00078713 mv a4,a5 + 800022c8: feb790e3 bne a5,a1,800022a8 + 800022cc: 0015079b addiw a5,a0,1 + 800022d0: 0ae78c63 beq a5,a4,80002388 + 800022d4: 00251513 slli a0,a0,0x2 + 800022d8: 0c010713 addi a4,sp,192 + 800022dc: 00a70533 add a0,a4,a0 + 800022e0: fc052683 lw a3,-64(a0) + 800022e4: 00078513 mv a0,a5 + 800022e8: fc1ff06f j 800022a8 + 800022ec: 00300713 li a4,3 + 800022f0: 22e79ce3 bne a5,a4,80002d28 + 800022f4: 08010493 addi s1,sp,128 + 800022f8: 00005597 auipc a1,0x5 + 800022fc: 19058593 addi a1,a1,400 # 80007488 <_ZL8PUZZLE_H> + 80002300: 00048513 mv a0,s1 + 80002304: 8a9ff0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002308: 08012783 lw a5,128(sp) + 8000230c: 08014803 lbu a6,128(sp) + 80002310: 03810713 addi a4,sp,56 + 80002314: 02f12c23 sw a5,56(sp) + 80002318: 09412783 lw a5,148(sp) + 8000231c: 09010413 addi s0,sp,144 + 80002320: 04f12623 sw a5,76(sp) + 80002324: 00048793 mv a5,s1 + 80002328: 0047c503 lbu a0,4(a5) + 8000232c: 0057c583 lbu a1,5(a5) + 80002330: 0067c603 lbu a2,6(a5) + 80002334: 0077c683 lbu a3,7(a5) + 80002338: 00a70223 sb a0,4(a4) + 8000233c: 00b702a3 sb a1,5(a4) + 80002340: 00c70323 sb a2,6(a4) + 80002344: 00d703a3 sb a3,7(a4) + 80002348: 00478793 addi a5,a5,4 + 8000234c: 00470713 addi a4,a4,4 + 80002350: fc879ce3 bne a5,s0,80002328 + 80002354: 000c07b7 lui a5,0xc0 + 80002358: 00f13823 sd a5,16(sp) + 8000235c: ee081ae3 bnez a6,80002250 + 80002360: 03500613 li a2,53 + 80002364: 00004597 auipc a1,0x4 + 80002368: 32458593 addi a1,a1,804 # 80006688 <_etext+0x3f4> + 8000236c: 00004517 auipc a0,0x4 + 80002370: f6c50513 addi a0,a0,-148 # 800062d8 <_etext+0x44> + 80002374: 3c9030ef jal ra,80005f3c + 80002378: 00100513 li a0,1 + 8000237c: 518020ef jal ra,80004894 + 80002380: 00d7a023 sw a3,0(a5) # c0000 <_entry_offset+0xc0000> + 80002384: ef5ff06f j 80002278 + 80002388: 03914683 lbu a3,57(sp) + 8000238c: 03a14703 lbu a4,58(sp) + 80002390: 00600793 li a5,6 + 80002394: 40d787bb subw a5,a5,a3 + 80002398: 40e787bb subw a5,a5,a4 + 8000239c: 00c787bb addw a5,a5,a2 + 800023a0: 0017f793 andi a5,a5,1 + 800023a4: fa079ee3 bnez a5,80002360 + 800023a8: 02000513 li a0,32 + 800023ac: 96cfe0ef jal ra,80000518 + 800023b0: 01013783 ld a5,16(sp) + 800023b4: 00050d93 mv s11,a0 + 800023b8: 00f52023 sw a5,0(a0) + 800023bc: 00379513 slli a0,a5,0x3 + 800023c0: 958fe0ef jal ra,80000518 + 800023c4: 000da783 lw a5,0(s11) + 800023c8: 00adb823 sd a0,16(s11) + 800023cc: 0017879b addiw a5,a5,1 + 800023d0: 00379513 slli a0,a5,0x3 + 800023d4: 944fe0ef jal ra,80000518 + 800023d8: 000da703 lw a4,0(s11) + 800023dc: 00adb423 sd a0,8(s11) + 800023e0: 000dbc23 sd zero,24(s11) + 800023e4: 00050793 mv a5,a0 + 800023e8: 02e05263 blez a4,8000240c + 800023ec: fff7071b addiw a4,a4,-1 + 800023f0: 02071713 slli a4,a4,0x20 + 800023f4: 01d75713 srli a4,a4,0x1d + 800023f8: 00850693 addi a3,a0,8 + 800023fc: 00d70733 add a4,a4,a3 + 80002400: 0007b023 sd zero,0(a5) + 80002404: 00878793 addi a5,a5,8 + 80002408: fef71ce3 bne a4,a5,80002400 + 8000240c: 03810593 addi a1,sp,56 + 80002410: 00000613 li a2,0 + 80002414: 000d8513 mv a0,s11 + 80002418: a25ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 8000241c: 018da583 lw a1,24(s11) + 80002420: fff00793 li a5,-1 + 80002424: 00005717 auipc a4,0x5 + 80002428: 5c470713 addi a4,a4,1476 # 800079e8 <_ZL3ans> + 8000242c: 00f72023 sw a5,0(a4) + 80002430: 00000913 li s2,0 + 80002434: 46058863 beqz a1,800028a4 + 80002438: 01048793 addi a5,s1,16 + 8000243c: 00100b13 li s6,1 + 80002440: 00f00d13 li s10,15 + 80002444: 01448c93 addi s9,s1,20 + 80002448: 00f13423 sd a5,8(sp) + 8000244c: 06010993 addi s3,sp,96 + 80002450: 010dbf03 ld t5,16(s11) + 80002454: 00048713 mv a4,s1 + 80002458: 00048613 mv a2,s1 + 8000245c: 008f3783 ld a5,8(t5) + 80002460: 00378683 lb a3,3(a5) + 80002464: 0007cb83 lbu s7,0(a5) + 80002468: 0017ca03 lbu s4,1(a5) + 8000246c: 0027ca83 lbu s5,2(a5) + 80002470: 0007ae83 lw t4,0(a5) + 80002474: 0147ac03 lw s8,20(a5) + 80002478: 00d13c23 sd a3,24(sp) + 8000247c: 00478793 addi a5,a5,4 + 80002480: 0007cf83 lbu t6,0(a5) + 80002484: 0017c303 lbu t1,1(a5) + 80002488: 0027c883 lbu a7,2(a5) + 8000248c: 0037c503 lbu a0,3(a5) + 80002490: 01f60223 sb t6,4(a2) + 80002494: 006602a3 sb t1,5(a2) + 80002498: 01160323 sb a7,6(a2) + 8000249c: 00a603a3 sb a0,7(a2) + 800024a0: 00460613 addi a2,a2,4 + 800024a4: 00478793 addi a5,a5,4 + 800024a8: fcc41ce3 bne s0,a2,80002480 + 800024ac: 5b658a63 beq a1,s6,80002a60 + 800024b0: 08bb50e3 bge s6,a1,80002d30 + 800024b4: 00359593 slli a1,a1,0x3 + 800024b8: 00bf05b3 add a1,t5,a1 + 800024bc: 0005b783 ld a5,0(a1) + 800024c0: 000d8513 mv a0,s11 + 800024c4: 02e13423 sd a4,40(sp) + 800024c8: 00ff3423 sd a5,8(t5) + 800024cc: 0367a023 sw s6,32(a5) + 800024d0: 018da783 lw a5,24(s11) + 800024d4: 03d13023 sd t4,32(sp) + 800024d8: fff7879b addiw a5,a5,-1 + 800024dc: 00fdac23 sw a5,24(s11) + 800024e0: ba1ff0ef jal ra,80002080 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv> + 800024e4: 02813703 ld a4,40(sp) + 800024e8: 02013e83 ld t4,32(sp) + 800024ec: 07812223 sw s8,100(sp) + 800024f0: 05010c13 addi s8,sp,80 + 800024f4: 05d12823 sw t4,80(sp) + 800024f8: 000c0793 mv a5,s8 + 800024fc: 00474303 lbu t1,4(a4) + 80002500: 00574503 lbu a0,5(a4) + 80002504: 00674583 lbu a1,6(a4) + 80002508: 00774603 lbu a2,7(a4) + 8000250c: 00678223 sb t1,4(a5) + 80002510: 00a782a3 sb a0,5(a5) + 80002514: 00b78323 sb a1,6(a5) + 80002518: 00c783a3 sb a2,7(a5) + 8000251c: 00470713 addi a4,a4,4 + 80002520: 00478793 addi a5,a5,4 + 80002524: fce41ce3 bne s0,a4,800024fc + 80002528: 0019091b addiw s2,s2,1 + 8000252c: 00048713 mv a4,s1 + 80002530: 00000793 li a5,0 + 80002534: 0017879b addiw a5,a5,1 + 80002538: 00f72023 sw a5,0(a4) + 8000253c: 00470713 addi a4,a4,4 + 80002540: ffa79ae3 bne a5,s10,80002534 + 80002544: 00048593 mv a1,s1 + 80002548: 06810513 addi a0,sp,104 + 8000254c: 0a012e23 sw zero,188(sp) + 80002550: e5cff0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002554: 06810593 addi a1,sp,104 + 80002558: 05010513 addi a0,sp,80 + 8000255c: fa4ff0ef jal ra,80001d00 <_ZNK8N_puzzleILi4EEeqERKS0_> + 80002560: 78051663 bnez a0,80002cec + 80002564: 320b8863 beqz s7,80002894 + 80002568: 00300793 li a5,3 + 8000256c: 4efa8e63 beq s5,a5,80002a68 + 80002570: 00048593 mv a1,s1 + 80002574: 00048713 mv a4,s1 + 80002578: 05010793 addi a5,sp,80 + 8000257c: 0047ce03 lbu t3,4(a5) + 80002580: 0057c303 lbu t1,5(a5) + 80002584: 0067c503 lbu a0,6(a5) + 80002588: 0077c603 lbu a2,7(a5) + 8000258c: 01c70223 sb t3,4(a4) + 80002590: 006702a3 sb t1,5(a4) + 80002594: 00a70323 sb a0,6(a4) + 80002598: 00c703a3 sb a2,7(a4) + 8000259c: 00478793 addi a5,a5,4 + 800025a0: 00470713 addi a4,a4,4 + 800025a4: fcf99ce3 bne s3,a5,8000257c + 800025a8: 0c010793 addi a5,sp,192 + 800025ac: 002a1e13 slli t3,s4,0x2 + 800025b0: 01c78e33 add t3,a5,t3 + 800025b4: 001a8f13 addi t5,s5,1 + 800025b8: 01ee07b3 add a5,t3,t5 + 800025bc: f9478303 lb t1,-108(a5) + 800025c0: 001a879b addiw a5,s5,1 + 800025c4: 015e0eb3 add t4,t3,s5 + 800025c8: fff3071b addiw a4,t1,-1 + 800025cc: 41f7561b sraiw a2,a4,0x1f + 800025d0: 01e6561b srliw a2,a2,0x1e + 800025d4: 00c7073b addw a4,a4,a2 + 800025d8: 00377713 andi a4,a4,3 + 800025dc: 40c7073b subw a4,a4,a2 + 800025e0: 4157063b subw a2,a4,s5 + 800025e4: 40f707bb subw a5,a4,a5 + 800025e8: 41f65f9b sraiw t6,a2,0x1f + 800025ec: 41f7d71b sraiw a4,a5,0x1f + 800025f0: 00cfc533 xor a0,t6,a2 + 800025f4: 00f747b3 xor a5,a4,a5 + 800025f8: 40e787bb subw a5,a5,a4 + 800025fc: 41f5053b subw a0,a0,t6 + 80002600: 40f5053b subw a0,a0,a5 + 80002604: 01813783 ld a5,24(sp) + 80002608: 0fff7f13 andi t5,t5,255 + 8000260c: fc6e8223 sb t1,-60(t4) + 80002610: 00f5053b addw a0,a0,a5 + 80002614: 01ee0e33 add t3,t3,t5 + 80002618: 001a831b addiw t1,s5,1 + 8000261c: 000a879b sext.w a5,s5 + 80002620: 0185151b slliw a0,a0,0x18 + 80002624: fc0e0223 sb zero,-60(t3) + 80002628: 000a0b9b sext.w s7,s4 + 8000262c: 02f13023 sd a5,32(sp) + 80002630: 4185551b sraiw a0,a0,0x18 + 80002634: 0ff37313 andi t1,t1,255 + 80002638: 00448613 addi a2,s1,4 + 8000263c: 00000e13 li t3,0 + 80002640: ffc60713 addi a4,a2,-4 + 80002644: 005e179b slliw a5,t3,0x5 + 80002648: 41c787bb subw a5,a5,t3 + 8000264c: 0027979b slliw a5,a5,0x2 + 80002650: 41c787bb subw a5,a5,t3 + 80002654: 0027979b slliw a5,a5,0x2 + 80002658: 00470e83 lb t4,4(a4) + 8000265c: 01c787bb addw a5,a5,t3 + 80002660: 0027979b slliw a5,a5,0x2 + 80002664: 01c787bb addw a5,a5,t3 + 80002668: 00170713 addi a4,a4,1 + 8000266c: 01d78e3b addw t3,a5,t4 + 80002670: fce61ae3 bne a2,a4,80002644 + 80002674: 00460613 addi a2,a2,4 + 80002678: fccc94e3 bne s9,a2,80002640 + 8000267c: 00100793 li a5,1 + 80002680: 06f10423 sb a5,104(sp) + 80002684: 074104a3 sb s4,105(sp) + 80002688: 06610523 sb t1,106(sp) + 8000268c: 06a105a3 sb a0,107(sp) + 80002690: 07c12e23 sw t3,124(sp) + 80002694: 06810793 addi a5,sp,104 + 80002698: 0075c703 lbu a4,7(a1) + 8000269c: 0045c303 lbu t1,4(a1) + 800026a0: 0055c503 lbu a0,5(a1) + 800026a4: 0065c603 lbu a2,6(a1) + 800026a8: 00e783a3 sb a4,7(a5) + 800026ac: 00813703 ld a4,8(sp) + 800026b0: 00678223 sb t1,4(a5) + 800026b4: 00a782a3 sb a0,5(a5) + 800026b8: 00c78323 sb a2,6(a5) + 800026bc: 00458593 addi a1,a1,4 + 800026c0: 00478793 addi a5,a5,4 + 800026c4: fce59ae3 bne a1,a4,80002698 + 800026c8: 008db583 ld a1,8(s11) + 800026cc: 000da503 lw a0,0(s11) + 800026d0: 05010613 addi a2,sp,80 + 800026d4: e88ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 800026d8: 50050e63 beqz a0,80002bf4 + 800026dc: 02452603 lw a2,36(a0) + 800026e0: 0016061b addiw a2,a2,1 + 800026e4: 06810593 addi a1,sp,104 + 800026e8: 000d8513 mv a0,s11 + 800026ec: f50ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 800026f0: 380a9063 bnez s5,80002a70 + 800026f4: 00300793 li a5,3 + 800026f8: 20fa0a63 beq s4,a5,8000290c + 800026fc: 00048593 mv a1,s1 + 80002700: 00048713 mv a4,s1 + 80002704: 05010793 addi a5,sp,80 + 80002708: 0047ce03 lbu t3,4(a5) + 8000270c: 0057c303 lbu t1,5(a5) + 80002710: 0067c503 lbu a0,6(a5) + 80002714: 0077c603 lbu a2,7(a5) + 80002718: 01c70223 sb t3,4(a4) + 8000271c: 006702a3 sb t1,5(a4) + 80002720: 00a70323 sb a0,6(a4) + 80002724: 00c703a3 sb a2,7(a4) + 80002728: 00478793 addi a5,a5,4 + 8000272c: 00470713 addi a4,a4,4 + 80002730: fcf99ce3 bne s3,a5,80002708 + 80002734: 02013683 ld a3,32(sp) + 80002738: 001b8613 addi a2,s7,1 + 8000273c: 00261793 slli a5,a2,0x2 + 80002740: 0c010713 addi a4,sp,192 + 80002744: 00f707b3 add a5,a4,a5 + 80002748: 00d787b3 add a5,a5,a3 + 8000274c: f9478503 lb a0,-108(a5) + 80002750: 001b879b addiw a5,s7,1 + 80002754: 002b9e13 slli t3,s7,0x2 + 80002758: fff5031b addiw t1,a0,-1 + 8000275c: 41f3571b sraiw a4,t1,0x1f + 80002760: 01e7571b srliw a4,a4,0x1e + 80002764: 0067073b addw a4,a4,t1 + 80002768: 4027571b sraiw a4,a4,0x2 + 8000276c: 4177033b subw t1,a4,s7 + 80002770: 40f707bb subw a5,a4,a5 + 80002774: 41f7de9b sraiw t4,a5,0x1f + 80002778: 41f35f1b sraiw t5,t1,0x1f + 8000277c: 00fec7b3 xor a5,t4,a5 + 80002780: 006f4333 xor t1,t5,t1 + 80002784: 41d787bb subw a5,a5,t4 + 80002788: 0ff67713 andi a4,a2,255 + 8000278c: 41e3033b subw t1,t1,t5 + 80002790: 00271713 slli a4,a4,0x2 + 80002794: 40f3033b subw t1,t1,a5 + 80002798: 0c010793 addi a5,sp,192 + 8000279c: 00e787b3 add a5,a5,a4 + 800027a0: 01813703 ld a4,24(sp) + 800027a4: 0c010613 addi a2,sp,192 + 800027a8: 01c60633 add a2,a2,t3 + 800027ac: 00d60633 add a2,a2,a3 + 800027b0: 00e3033b addw t1,t1,a4 + 800027b4: fca60223 sb a0,-60(a2) + 800027b8: 001a0e1b addiw t3,s4,1 + 800027bc: 00d787b3 add a5,a5,a3 + 800027c0: 00448513 addi a0,s1,4 + 800027c4: 0183131b slliw t1,t1,0x18 + 800027c8: 4183531b sraiw t1,t1,0x18 + 800027cc: 0ffe7e13 andi t3,t3,255 + 800027d0: fc078223 sb zero,-60(a5) + 800027d4: 00050613 mv a2,a0 + 800027d8: 00000e93 li t4,0 + 800027dc: ffc60713 addi a4,a2,-4 + 800027e0: 005e979b slliw a5,t4,0x5 + 800027e4: 41d787bb subw a5,a5,t4 + 800027e8: 0027979b slliw a5,a5,0x2 + 800027ec: 41d787bb subw a5,a5,t4 + 800027f0: 0027979b slliw a5,a5,0x2 + 800027f4: 00470f03 lb t5,4(a4) + 800027f8: 01d787bb addw a5,a5,t4 + 800027fc: 0027979b slliw a5,a5,0x2 + 80002800: 01d787bb addw a5,a5,t4 + 80002804: 00170713 addi a4,a4,1 + 80002808: 01e78ebb addw t4,a5,t5 + 8000280c: fcc71ae3 bne a4,a2,800027e0 + 80002810: 00470613 addi a2,a4,4 + 80002814: fccc94e3 bne s9,a2,800027dc + 80002818: 00100793 li a5,1 + 8000281c: 06f10423 sb a5,104(sp) + 80002820: 07c104a3 sb t3,105(sp) + 80002824: 07510523 sb s5,106(sp) + 80002828: 066105a3 sb t1,107(sp) + 8000282c: 07d12e23 sw t4,124(sp) + 80002830: 06810793 addi a5,sp,104 + 80002834: 0075c703 lbu a4,7(a1) + 80002838: 0045ce03 lbu t3,4(a1) + 8000283c: 0055c303 lbu t1,5(a1) + 80002840: 0065c603 lbu a2,6(a1) + 80002844: 00e783a3 sb a4,7(a5) + 80002848: 00813703 ld a4,8(sp) + 8000284c: 01c78223 sb t3,4(a5) + 80002850: 006782a3 sb t1,5(a5) + 80002854: 00c78323 sb a2,6(a5) + 80002858: 00050593 mv a1,a0 + 8000285c: 00478793 addi a5,a5,4 + 80002860: 08a70063 beq a4,a0,800028e0 + 80002864: 00450513 addi a0,a0,4 + 80002868: fcdff06f j 80002834 + 8000286c: 008db583 ld a1,8(s11) + 80002870: 000da503 lw a0,0(s11) + 80002874: 05010613 addi a2,sp,80 + 80002878: ce4ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 8000287c: 38050863 beqz a0,80002c0c + 80002880: 02452603 lw a2,36(a0) + 80002884: 0016061b addiw a2,a2,1 + 80002888: 06810593 addi a1,sp,104 + 8000288c: 000d8513 mv a0,s11 + 80002890: dacff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 80002894: 018da583 lw a1,24(s11) + 80002898: 00058663 beqz a1,800028a4 + 8000289c: 01013783 ld a5,16(sp) + 800028a0: bb2798e3 bne a5,s2,80002450 + 800028a4: 12813083 ld ra,296(sp) + 800028a8: 12013403 ld s0,288(sp) + 800028ac: 11813483 ld s1,280(sp) + 800028b0: 11013903 ld s2,272(sp) + 800028b4: 10813983 ld s3,264(sp) + 800028b8: 10013a03 ld s4,256(sp) + 800028bc: 0f813a83 ld s5,248(sp) + 800028c0: 0f013b03 ld s6,240(sp) + 800028c4: 0e813b83 ld s7,232(sp) + 800028c8: 0e013c03 ld s8,224(sp) + 800028cc: 0d813c83 ld s9,216(sp) + 800028d0: 0d013d03 ld s10,208(sp) + 800028d4: 0c813d83 ld s11,200(sp) + 800028d8: 13010113 addi sp,sp,304 + 800028dc: 00008067 ret + 800028e0: 008db583 ld a1,8(s11) + 800028e4: 000da503 lw a0,0(s11) + 800028e8: 05010613 addi a2,sp,80 + 800028ec: c70ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 800028f0: 30050663 beqz a0,80002bfc + 800028f4: 02452603 lw a2,36(a0) + 800028f8: 0016061b addiw a2,a2,1 + 800028fc: 06810593 addi a1,sp,104 + 80002900: 000d8513 mv a0,s11 + 80002904: d38ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 80002908: f80a06e3 beqz s4,80002894 + 8000290c: 00048513 mv a0,s1 + 80002910: 00048793 mv a5,s1 + 80002914: 004c4303 lbu t1,4(s8) + 80002918: 005c4583 lbu a1,5(s8) + 8000291c: 006c4603 lbu a2,6(s8) + 80002920: 007c4703 lbu a4,7(s8) + 80002924: 00678223 sb t1,4(a5) + 80002928: 00b782a3 sb a1,5(a5) + 8000292c: 00c78323 sb a2,6(a5) + 80002930: 00e783a3 sb a4,7(a5) + 80002934: 004c0c13 addi s8,s8,4 + 80002938: 00478793 addi a5,a5,4 + 8000293c: fd899ce3 bne s3,s8,80002914 + 80002940: fffb871b addiw a4,s7,-1 + 80002944: 02013683 ld a3,32(sp) + 80002948: 00070893 mv a7,a4 + 8000294c: 0c010793 addi a5,sp,192 + 80002950: 00271713 slli a4,a4,0x2 + 80002954: 00e78733 add a4,a5,a4 + 80002958: 00d70733 add a4,a4,a3 + 8000295c: f9470603 lb a2,-108(a4) + 80002960: 002b9593 slli a1,s7,0x2 + 80002964: 00b785b3 add a1,a5,a1 + 80002968: fff6031b addiw t1,a2,-1 + 8000296c: 41f3579b sraiw a5,t1,0x1f + 80002970: 01e7d79b srliw a5,a5,0x1e + 80002974: 006787bb addw a5,a5,t1 + 80002978: 4027d79b sraiw a5,a5,0x2 + 8000297c: 41778bbb subw s7,a5,s7 + 80002980: 411787bb subw a5,a5,a7 + 80002984: 41fbde1b sraiw t3,s7,0x1f + 80002988: 41f7d89b sraiw a7,a5,0x1f + 8000298c: 017e4333 xor t1,t3,s7 + 80002990: 00f8c7b3 xor a5,a7,a5 + 80002994: 411787bb subw a5,a5,a7 + 80002998: 41c3033b subw t1,t1,t3 + 8000299c: 40f3033b subw t1,t1,a5 + 800029a0: 01813783 ld a5,24(sp) + 800029a4: 00d585b3 add a1,a1,a3 + 800029a8: fcc58223 sb a2,-60(a1) + 800029ac: 00f3033b addw t1,t1,a5 + 800029b0: fffa059b addiw a1,s4,-1 + 800029b4: 00448e13 addi t3,s1,4 + 800029b8: 0183131b slliw t1,t1,0x18 + 800029bc: fc070223 sb zero,-60(a4) + 800029c0: 4183531b sraiw t1,t1,0x18 + 800029c4: 0ff5f593 andi a1,a1,255 + 800029c8: 000e0893 mv a7,t3 + 800029cc: 00000713 li a4,0 + 800029d0: ffc88613 addi a2,a7,-4 + 800029d4: 0057179b slliw a5,a4,0x5 + 800029d8: 40e787bb subw a5,a5,a4 + 800029dc: 0027979b slliw a5,a5,0x2 + 800029e0: 40e787bb subw a5,a5,a4 + 800029e4: 0027979b slliw a5,a5,0x2 + 800029e8: 00460e83 lb t4,4(a2) + 800029ec: 00e787bb addw a5,a5,a4 + 800029f0: 0027979b slliw a5,a5,0x2 + 800029f4: 00e7873b addw a4,a5,a4 + 800029f8: 00160613 addi a2,a2,1 + 800029fc: 01d7073b addw a4,a4,t4 + 80002a00: fcc89ae3 bne a7,a2,800029d4 + 80002a04: 00488893 addi a7,a7,4 + 80002a08: fd1c94e3 bne s9,a7,800029d0 + 80002a0c: 00100793 li a5,1 + 80002a10: 06f10423 sb a5,104(sp) + 80002a14: 06b104a3 sb a1,105(sp) + 80002a18: 07510523 sb s5,106(sp) + 80002a1c: 066105a3 sb t1,107(sp) + 80002a20: 06e12e23 sw a4,124(sp) + 80002a24: 06810793 addi a5,sp,104 + 80002a28: 00754703 lbu a4,7(a0) + 80002a2c: 00454883 lbu a7,4(a0) + 80002a30: 00554583 lbu a1,5(a0) + 80002a34: 00654603 lbu a2,6(a0) + 80002a38: 00e783a3 sb a4,7(a5) + 80002a3c: 00813703 ld a4,8(sp) + 80002a40: 01178223 sb a7,4(a5) + 80002a44: 00b782a3 sb a1,5(a5) + 80002a48: 00c78323 sb a2,6(a5) + 80002a4c: 000e0513 mv a0,t3 + 80002a50: 00478793 addi a5,a5,4 + 80002a54: e0ee0ce3 beq t3,a4,8000286c + 80002a58: 004e0e13 addi t3,t3,4 + 80002a5c: fcdff06f j 80002a28 + 80002a60: 000dac23 sw zero,24(s11) + 80002a64: a89ff06f j 800024ec + 80002a68: 000a0b9b sext.w s7,s4 + 80002a6c: 02f13023 sd a5,32(sp) + 80002a70: 00048593 mv a1,s1 + 80002a74: 00048713 mv a4,s1 + 80002a78: 05010793 addi a5,sp,80 + 80002a7c: 0047ce03 lbu t3,4(a5) + 80002a80: 0057c303 lbu t1,5(a5) + 80002a84: 0067c503 lbu a0,6(a5) + 80002a88: 0077c603 lbu a2,7(a5) + 80002a8c: 01c70223 sb t3,4(a4) + 80002a90: 006702a3 sb t1,5(a4) + 80002a94: 00a70323 sb a0,6(a4) + 80002a98: 00c703a3 sb a2,7(a4) + 80002a9c: 00478793 addi a5,a5,4 + 80002aa0: 00470713 addi a4,a4,4 + 80002aa4: fd379ce3 bne a5,s3,80002a7c + 80002aa8: 02013683 ld a3,32(sp) + 80002aac: 0c010713 addi a4,sp,192 + 80002ab0: 002b9513 slli a0,s7,0x2 + 80002ab4: fff6879b addiw a5,a3,-1 + 80002ab8: 00a70533 add a0,a4,a0 + 80002abc: 0007861b sext.w a2,a5 + 80002ac0: 00060313 mv t1,a2 + 80002ac4: 00c50633 add a2,a0,a2 + 80002ac8: f9460e83 lb t4,-108(a2) + 80002acc: 00d50533 add a0,a0,a3 + 80002ad0: fffa8e1b addiw t3,s5,-1 + 80002ad4: fffe879b addiw a5,t4,-1 + 80002ad8: 41f7d71b sraiw a4,a5,0x1f + 80002adc: 01e7571b srliw a4,a4,0x1e + 80002ae0: 00e787bb addw a5,a5,a4 + 80002ae4: 0037f793 andi a5,a5,3 + 80002ae8: 40e787bb subw a5,a5,a4 + 80002aec: 40d7873b subw a4,a5,a3 + 80002af0: 406787bb subw a5,a5,t1 + 80002af4: 41f75f9b sraiw t6,a4,0x1f + 80002af8: 41f7df1b sraiw t5,a5,0x1f + 80002afc: 00efc333 xor t1,t6,a4 + 80002b00: 00ff47b3 xor a5,t5,a5 + 80002b04: 41e787bb subw a5,a5,t5 + 80002b08: 41f3033b subw t1,t1,t6 + 80002b0c: 40f3033b subw t1,t1,a5 + 80002b10: 01813783 ld a5,24(sp) + 80002b14: fdd50223 sb t4,-60(a0) + 80002b18: 00448513 addi a0,s1,4 + 80002b1c: 00f3033b addw t1,t1,a5 + 80002b20: 0183131b slliw t1,t1,0x18 + 80002b24: fc060223 sb zero,-60(a2) + 80002b28: 4183531b sraiw t1,t1,0x18 + 80002b2c: 0ffe7e13 andi t3,t3,255 + 80002b30: 00050613 mv a2,a0 + 80002b34: 00000e93 li t4,0 + 80002b38: ffc60713 addi a4,a2,-4 + 80002b3c: 005e979b slliw a5,t4,0x5 + 80002b40: 41d787bb subw a5,a5,t4 + 80002b44: 0027979b slliw a5,a5,0x2 + 80002b48: 41d787bb subw a5,a5,t4 + 80002b4c: 0027979b slliw a5,a5,0x2 + 80002b50: 00470f03 lb t5,4(a4) + 80002b54: 01d787bb addw a5,a5,t4 + 80002b58: 0027979b slliw a5,a5,0x2 + 80002b5c: 01d787bb addw a5,a5,t4 + 80002b60: 00170713 addi a4,a4,1 + 80002b64: 01e78ebb addw t4,a5,t5 + 80002b68: fce61ae3 bne a2,a4,80002b3c + 80002b6c: 00460613 addi a2,a2,4 + 80002b70: fd9614e3 bne a2,s9,80002b38 + 80002b74: 00100793 li a5,1 + 80002b78: 06f10423 sb a5,104(sp) + 80002b7c: 074104a3 sb s4,105(sp) + 80002b80: 07c10523 sb t3,106(sp) + 80002b84: 066105a3 sb t1,107(sp) + 80002b88: 07d12e23 sw t4,124(sp) + 80002b8c: 06810793 addi a5,sp,104 + 80002b90: 0075c703 lbu a4,7(a1) + 80002b94: 0045ce03 lbu t3,4(a1) + 80002b98: 0055c303 lbu t1,5(a1) + 80002b9c: 0065c603 lbu a2,6(a1) + 80002ba0: 00e783a3 sb a4,7(a5) + 80002ba4: 00813703 ld a4,8(sp) + 80002ba8: 01c78223 sb t3,4(a5) + 80002bac: 006782a3 sb t1,5(a5) + 80002bb0: 00c78323 sb a2,6(a5) + 80002bb4: 00050593 mv a1,a0 + 80002bb8: 00478793 addi a5,a5,4 + 80002bbc: 00e50663 beq a0,a4,80002bc8 + 80002bc0: 00450513 addi a0,a0,4 + 80002bc4: fcdff06f j 80002b90 + 80002bc8: 008db583 ld a1,8(s11) + 80002bcc: 000da503 lw a0,0(s11) + 80002bd0: 05010613 addi a2,sp,80 + 80002bd4: 988ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 80002bd8: 02050663 beqz a0,80002c04 + 80002bdc: 02452603 lw a2,36(a0) + 80002be0: 0016061b addiw a2,a2,1 + 80002be4: 06810593 addi a1,sp,104 + 80002be8: 000d8513 mv a0,s11 + 80002bec: a50ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 80002bf0: b05ff06f j 800026f4 + 80002bf4: 80000637 lui a2,0x80000 + 80002bf8: aedff06f j 800026e4 + 80002bfc: 80000637 lui a2,0x80000 + 80002c00: cfdff06f j 800028fc + 80002c04: 80000637 lui a2,0x80000 + 80002c08: fddff06f j 80002be4 + 80002c0c: 80000637 lui a2,0x80000 + 80002c10: c79ff06f j 80002888 + 80002c14: 08010493 addi s1,sp,128 + 80002c18: 00005597 auipc a1,0x5 + 80002c1c: 93058593 addi a1,a1,-1744 # 80007548 <_ZL8PUZZLE_S> + 80002c20: 00048513 mv a0,s1 + 80002c24: f89fe0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002c28: 08012783 lw a5,128(sp) + 80002c2c: 08014803 lbu a6,128(sp) + 80002c30: 03810713 addi a4,sp,56 + 80002c34: 02f12c23 sw a5,56(sp) + 80002c38: 09412783 lw a5,148(sp) + 80002c3c: 09010413 addi s0,sp,144 + 80002c40: 04f12623 sw a5,76(sp) + 80002c44: 00048793 mv a5,s1 + 80002c48: 0047c503 lbu a0,4(a5) + 80002c4c: 0057c583 lbu a1,5(a5) + 80002c50: 0067c603 lbu a2,6(a5) + 80002c54: 0077c683 lbu a3,7(a5) + 80002c58: 00a70223 sb a0,4(a4) + 80002c5c: 00b702a3 sb a1,5(a4) + 80002c60: 00c70323 sb a2,6(a4) + 80002c64: 00d703a3 sb a3,7(a4) + 80002c68: 00478793 addi a5,a5,4 + 80002c6c: 00470713 addi a4,a4,4 + 80002c70: fc879ce3 bne a5,s0,80002c48 + 80002c74: 00a00793 li a5,10 + 80002c78: 00f13823 sd a5,16(sp) + 80002c7c: dd0ff06f j 8000224c + 80002c80: 08010493 addi s1,sp,128 + 80002c84: 00005597 auipc a1,0x5 + 80002c88: 84458593 addi a1,a1,-1980 # 800074c8 <_ZL8PUZZLE_L> + 80002c8c: 00048513 mv a0,s1 + 80002c90: f1dfe0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002c94: 08012783 lw a5,128(sp) + 80002c98: 08014803 lbu a6,128(sp) + 80002c9c: 03810713 addi a4,sp,56 + 80002ca0: 02f12c23 sw a5,56(sp) + 80002ca4: 09412783 lw a5,148(sp) + 80002ca8: 09010413 addi s0,sp,144 + 80002cac: 04f12623 sw a5,76(sp) + 80002cb0: 00048793 mv a5,s1 + 80002cb4: 0047c503 lbu a0,4(a5) + 80002cb8: 0057c583 lbu a1,5(a5) + 80002cbc: 0067c603 lbu a2,6(a5) + 80002cc0: 0077c683 lbu a3,7(a5) + 80002cc4: 00a70223 sb a0,4(a4) + 80002cc8: 00b702a3 sb a1,5(a4) + 80002ccc: 00c70323 sb a2,6(a4) + 80002cd0: 00d703a3 sb a3,7(a4) + 80002cd4: 00478793 addi a5,a5,4 + 80002cd8: 00470713 addi a4,a4,4 + 80002cdc: fcf41ce3 bne s0,a5,80002cb4 + 80002ce0: 000047b7 lui a5,0x4 + 80002ce4: 00f13823 sd a5,16(sp) + 80002ce8: d64ff06f j 8000224c + 80002cec: 008db583 ld a1,8(s11) + 80002cf0: 000da503 lw a0,0(s11) + 80002cf4: 05010613 addi a2,sp,80 + 80002cf8: 864ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 80002cfc: 02050063 beqz a0,80002d1c + 80002d00: 02452583 lw a1,36(a0) + 80002d04: 00090513 mv a0,s2 + 80002d08: 3d5010ef jal ra,800048dc <__muldi3> + 80002d0c: 00005797 auipc a5,0x5 + 80002d10: cdc78793 addi a5,a5,-804 # 800079e8 <_ZL3ans> + 80002d14: 00a7a023 sw a0,0(a5) + 80002d18: b8dff06f j 800028a4 + 80002d1c: 800005b7 lui a1,0x80000 + 80002d20: fff5c593 not a1,a1 + 80002d24: fe1ff06f j 80002d04 + 80002d28: 03300613 li a2,51 + 80002d2c: e38ff06f j 80002364 + 80002d30: 05600613 li a2,86 + 80002d34: 00004597 auipc a1,0x4 + 80002d38: 91458593 addi a1,a1,-1772 # 80006648 <_etext+0x3b4> + 80002d3c: 00003517 auipc a0,0x3 + 80002d40: 59c50513 addi a0,a0,1436 # 800062d8 <_etext+0x44> + 80002d44: 1f8030ef jal ra,80005f3c + 80002d48: 00100513 li a0,1 + 80002d4c: 349010ef jal ra,80004894 + +0000000080002d50 : + 80002d50: 00005797 auipc a5,0x5 + 80002d54: d807b783 ld a5,-640(a5) # 80007ad0 + 80002d58: 0007a783 lw a5,0(a5) + 80002d5c: fd010113 addi sp,sp,-48 + 80002d60: 01213823 sd s2,16(sp) + 80002d64: 00100513 li a0,1 + 80002d68: 00005917 auipc s2,0x5 + 80002d6c: c8490913 addi s2,s2,-892 # 800079ec + 80002d70: 02113423 sd ra,40(sp) + 80002d74: 00f92023 sw a5,0(s2) + 80002d78: 01313423 sd s3,8(sp) + 80002d7c: 02813023 sd s0,32(sp) + 80002d80: 00913c23 sd s1,24(sp) + 80002d84: 831fd0ef jal ra,800005b4 + 80002d88: 00011537 lui a0,0x11 + 80002d8c: 80850513 addi a0,a0,-2040 # 10808 <_entry_offset+0x10808> + 80002d90: f88fd0ef jal ra,80000518 + 80002d94: 00050793 mv a5,a0 + 80002d98: 00092503 lw a0,0(s2) + 80002d9c: 00005717 auipc a4,0x5 + 80002da0: c6f73623 sd a5,-916(a4) # 80007a08 + 80002da4: 00005997 auipc s3,0x5 + 80002da8: c4c98993 addi s3,s3,-948 # 800079f0 + 80002dac: f6cfd0ef jal ra,80000518 + 80002db0: 00092783 lw a5,0(s2) + 80002db4: 00a9b023 sd a0,0(s3) + 80002db8: 1907851b addiw a0,a5,400 + 80002dbc: f5cfd0ef jal ra,80000518 + 80002dc0: 00092783 lw a5,0(s2) + 80002dc4: 00005717 auipc a4,0x5 + 80002dc8: c2a73a23 sd a0,-972(a4) # 800079f8 + 80002dcc: 02f05e63 blez a5,80002e08 + 80002dd0: 00000413 li s0,0 + 80002dd4: ff4fd0ef jal ra,800005c8 + 80002dd8: 02051513 slli a0,a0,0x20 + 80002ddc: 0009b483 ld s1,0(s3) + 80002de0: 01a00593 li a1,26 + 80002de4: 02055513 srli a0,a0,0x20 + 80002de8: 3a9010ef jal ra,80004990 <__umoddi3> + 80002dec: 00092703 lw a4,0(s2) + 80002df0: 008484b3 add s1,s1,s0 + 80002df4: 0615051b addiw a0,a0,97 + 80002df8: 00140413 addi s0,s0,1 + 80002dfc: 00a48023 sb a0,0(s1) + 80002e00: 0004079b sext.w a5,s0 + 80002e04: fce7c8e3 blt a5,a4,80002dd4 + 80002e08: 02813083 ld ra,40(sp) + 80002e0c: 02013403 ld s0,32(sp) + 80002e10: 01813483 ld s1,24(sp) + 80002e14: 01013903 ld s2,16(sp) + 80002e18: 00813983 ld s3,8(sp) + 80002e1c: 03010113 addi sp,sp,48 + 80002e20: 00008067 ret + +0000000080002e24 : + 80002e24: ff010113 addi sp,sp,-16 + 80002e28: 00005697 auipc a3,0x5 + 80002e2c: be06b683 ld a3,-1056(a3) # 80007a08 + 80002e30: 00005617 auipc a2,0x5 + 80002e34: bbc62603 lw a2,-1092(a2) # 800079ec + 80002e38: 00005597 auipc a1,0x5 + 80002e3c: bc05b583 ld a1,-1088(a1) # 800079f8 + 80002e40: 00005517 auipc a0,0x5 + 80002e44: bb053503 ld a0,-1104(a0) # 800079f0 + 80002e48: 00113423 sd ra,8(sp) + 80002e4c: 084000ef jal ra,80002ed0 + 80002e50: 00813083 ld ra,8(sp) + 80002e54: 00005797 auipc a5,0x5 + 80002e58: baa7a623 sw a0,-1108(a5) # 80007a00 + 80002e5c: 01010113 addi sp,sp,16 + 80002e60: 00008067 ret + +0000000080002e64 : + 80002e64: 00005517 auipc a0,0x5 + 80002e68: b9453503 ld a0,-1132(a0) # 800079f8 + 80002e6c: 00005597 auipc a1,0x5 + 80002e70: b945a583 lw a1,-1132(a1) # 80007a00 + 80002e74: ff010113 addi sp,sp,-16 + 80002e78: 00b505b3 add a1,a0,a1 + 80002e7c: 00113423 sd ra,8(sp) + 80002e80: f98fd0ef jal ra,80000618 + 80002e84: 00005797 auipc a5,0x5 + 80002e88: c4c7b783 ld a5,-948(a5) # 80007ad0 + 80002e8c: 0187a783 lw a5,24(a5) + 80002e90: 00813083 ld ra,8(sp) + 80002e94: 0005051b sext.w a0,a0 + 80002e98: 40a78533 sub a0,a5,a0 + 80002e9c: 00153513 seqz a0,a0 + 80002ea0: 01010113 addi sp,sp,16 + 80002ea4: 00008067 ret + +0000000080002ea8 : + 80002ea8: ff010113 addi sp,sp,-16 + 80002eac: 00800613 li a2,8 + 80002eb0: 00004597 auipc a1,0x4 + 80002eb4: 82058593 addi a1,a1,-2016 # 800066d0 <_etext+0x43c> + 80002eb8: 00003517 auipc a0,0x3 + 80002ebc: 42050513 addi a0,a0,1056 # 800062d8 <_etext+0x44> + 80002ec0: 00113423 sd ra,8(sp) + 80002ec4: 078030ef jal ra,80005f3c + 80002ec8: 00100513 li a0,1 + 80002ecc: 1c9010ef jal ra,80004894 + +0000000080002ed0 : + 80002ed0: 00100793 li a5,1 + 80002ed4: f5010113 addi sp,sp,-176 + 80002ed8: 02079793 slli a5,a5,0x20 + 80002edc: 00060713 mv a4,a2 + 80002ee0: 02c13023 sd a2,32(sp) + 80002ee4: 0a113423 sd ra,168(sp) + 80002ee8: 0a813023 sd s0,160(sp) + 80002eec: 08913c23 sd s1,152(sp) + 80002ef0: 09213823 sd s2,144(sp) + 80002ef4: 09313423 sd s3,136(sp) + 80002ef8: 09413023 sd s4,128(sp) + 80002efc: 07513c23 sd s5,120(sp) + 80002f00: 07613823 sd s6,112(sp) + 80002f04: 07713423 sd s7,104(sp) + 80002f08: 07813023 sd s8,96(sp) + 80002f0c: 05913c23 sd s9,88(sp) + 80002f10: 05a13823 sd s10,80(sp) + 80002f14: 05b13423 sd s11,72(sp) + 80002f18: fff60613 addi a2,a2,-1 + 80002f1c: e6e78793 addi a5,a5,-402 + 80002f20: 00a13423 sd a0,8(sp) + 80002f24: 02b13823 sd a1,48(sp) + 80002f28: 58c7e463 bltu a5,a2,800034b0 + 80002f2c: 00300593 li a1,3 + 80002f30: 0d700793 li a5,215 + 80002f34: 02b13423 sd a1,40(sp) + 80002f38: 46e7e263 bltu a5,a4,8000339c + 80002f3c: 000107b7 lui a5,0x10 + 80002f40: 00011737 lui a4,0x11 + 80002f44: 00878793 addi a5,a5,8 # 10008 <_entry_offset+0x10008> + 80002f48: 80870713 addi a4,a4,-2040 # 10808 <_entry_offset+0x10808> + 80002f4c: 00f687b3 add a5,a3,a5 + 80002f50: 00e68733 add a4,a3,a4 + 80002f54: 00078023 sb zero,0(a5) + 80002f58: 00178793 addi a5,a5,1 + 80002f5c: fef71ce3 bne a4,a5,80002f54 + 80002f60: 00813783 ld a5,8(sp) + 80002f64: 03013703 ld a4,48(sp) + 80002f68: 02813583 ld a1,40(sp) + 80002f6c: 00c78633 add a2,a5,a2 + 80002f70: 02c13c23 sd a2,56(sp) + 80002f74: 00b704b3 add s1,a4,a1 + 80002f78: 00913823 sd s1,16(sp) + 80002f7c: ff660c13 addi s8,a2,-10 + 80002f80: 00448e13 addi t3,s1,4 + 80002f84: 00078713 mv a4,a5 + 80002f88: 5cfc6663 bltu s8,a5,80003554 + 80002f8c: 02013783 ld a5,32(sp) + 80002f90: ffc60d13 addi s10,a2,-4 + 80002f94: 0fe00c93 li s9,254 + 80002f98: 0017d793 srli a5,a5,0x1 + 80002f9c: 00f707b3 add a5,a4,a5 + 80002fa0: 00f13c23 sd a5,24(sp) + 80002fa4: 00010bb7 lui s7,0x10 + 80002fa8: 00070793 mv a5,a4 + 80002fac: 00400993 li s3,4 + 80002fb0: 80000737 lui a4,0x80000 + 80002fb4: 80000db7 lui s11,0x80000 + 80002fb8: 40fd0fb3 sub t6,s10,a5 + 80002fbc: 01fcd463 bge s9,t6,80002fc4 + 80002fc0: 0fe00f93 li t6,254 + 80002fc4: 0017c603 lbu a2,1(a5) + 80002fc8: 0027c503 lbu a0,2(a5) + 80002fcc: 0007c583 lbu a1,0(a5) + 80002fd0: 0086161b slliw a2,a2,0x8 + 80002fd4: 0105151b slliw a0,a0,0x10 + 80002fd8: 00a66633 or a2,a2,a0 + 80002fdc: 00b66633 or a2,a2,a1 + 80002fe0: 00d6559b srliw a1,a2,0xd + 80002fe4: 0096581b srliw a6,a2,0x9 + 80002fe8: 00b84833 xor a6,a6,a1 + 80002fec: 0006061b sext.w a2,a2 + 80002ff0: 00c84833 xor a6,a6,a2 + 80002ff4: 7ff87313 andi t1,a6,2047 + 80002ff8: 00531893 slli a7,t1,0x5 + 80002ffc: 011688b3 add a7,a3,a7 + 80003000: 0088b583 ld a1,8(a7) + 80003004: 00668533 add a0,a3,t1 + 80003008: 00ab8533 add a0,s7,a0 + 8000300c: ffe78a13 addi s4,a5,-2 + 80003010: 00854283 lbu t0,8(a0) + 80003014: 001f8f93 addi t6,t6,1 + 80003018: 00030813 mv a6,t1 + 8000301c: 0945fe63 bgeu a1,s4,800030b8 + 80003020: 2c029e63 bnez t0,800032fc + 80003024: 00f8b423 sd a5,8(a7) + 80003028: 00100613 li a2,1 + 8000302c: 00c50423 sb a2,8(a0) + 80003030: 0017571b srliw a4,a4,0x1 + 80003034: 0007c603 lbu a2,0(a5) + 80003038: 001e0e13 addi t3,t3,1 + 8000303c: 00178793 addi a5,a5,1 + 80003040: fece0fa3 sb a2,-1(t3) + 80003044: 00177613 andi a2,a4,1 + 80003048: 00060593 mv a1,a2 + 8000304c: 14fc6063 bltu s8,a5,8000318c + 80003050: f60584e3 beqz a1,80002fb8 + 80003054: 01813603 ld a2,24(sp) + 80003058: 02f67063 bgeu a2,a5,80003078 + 8000305c: 00813603 ld a2,8(sp) + 80003060: 01013583 ld a1,16(sp) + 80003064: 40c78633 sub a2,a5,a2 + 80003068: 40565513 srai a0,a2,0x5 + 8000306c: 40be05b3 sub a1,t3,a1 + 80003070: 40a60633 sub a2,a2,a0 + 80003074: 44b64a63 blt a2,a1,800034c8 + 80003078: 0017571b srliw a4,a4,0x1 + 8000307c: 01b76733 or a4,a4,s11 + 80003080: 0007071b sext.w a4,a4 + 80003084: 00875513 srli a0,a4,0x8 + 80003088: 01075593 srli a1,a4,0x10 + 8000308c: 01875613 srli a2,a4,0x18 + 80003090: 00e48023 sb a4,0(s1) + 80003094: 00a480a3 sb a0,1(s1) + 80003098: 00b48123 sb a1,2(s1) + 8000309c: 00c481a3 sb a2,3(s1) + 800030a0: 40fd0fb3 sub t6,s10,a5 + 800030a4: 000e0493 mv s1,t3 + 800030a8: 80000737 lui a4,0x80000 + 800030ac: 004e0e13 addi t3,t3,4 + 800030b0: f1fcdae3 bge s9,t6,80002fc4 + 800030b4: f0dff06f j 80002fc0 + 800030b8: 00000e93 li t4,0 + 800030bc: 00531593 slli a1,t1,0x5 + 800030c0: 0002891b sext.w s2,t0 + 800030c4: 00b685b3 add a1,a3,a1 + 800030c8: 00000f13 li t5,0 + 800030cc: 00100513 li a0,1 + 800030d0: 03257863 bgeu a0,s2,80003100 + 800030d4: 0105b883 ld a7,16(a1) + 800030d8: 020e9393 slli t2,t4,0x20 + 800030dc: 0203d393 srli t2,t2,0x20 + 800030e0: 00778433 add s0,a5,t2 + 800030e4: 007883b3 add t2,a7,t2 + 800030e8: 00044403 lbu s0,0(s0) + 800030ec: 0003c383 lbu t2,0(t2) + 800030f0: 18740c63 beq s0,t2,80003288 + 800030f4: 0015051b addiw a0,a0,1 + 800030f8: 00858593 addi a1,a1,8 + 800030fc: fd351ae3 bne a0,s3,800030d0 + 80003100: 0032f593 andi a1,t0,3 + 80003104: 00231613 slli a2,t1,0x2 + 80003108: 00b60633 add a2,a2,a1 + 8000310c: 00361613 slli a2,a2,0x3 + 80003110: 00c68633 add a2,a3,a2 + 80003114: 00668333 add t1,a3,t1 + 80003118: 00f63423 sd a5,8(a2) + 8000311c: 006b8333 add t1,s7,t1 + 80003120: 0012829b addiw t0,t0,1 + 80003124: 0017561b srliw a2,a4,0x1 + 80003128: 00530423 sb t0,8(t1) + 8000312c: 00200593 li a1,2 + 80003130: 0006071b sext.w a4,a2 + 80003134: f1d5f0e3 bgeu a1,t4,80003034 + 80003138: 01b66733 or a4,a2,s11 + 8000313c: 020e9613 slli a2,t4,0x20 + 80003140: 02065613 srli a2,a2,0x20 + 80003144: 0058181b slliw a6,a6,0x5 + 80003148: 010f6f33 or t5,t5,a6 + 8000314c: 00c787b3 add a5,a5,a2 + 80003150: 00900613 li a2,9 + 80003154: 0007071b sext.w a4,a4 + 80003158: 000f0f1b sext.w t5,t5 + 8000315c: 21d66c63 bltu a2,t4,80003374 + 80003160: ffee8e9b addiw t4,t4,-2 + 80003164: 002e9e9b slliw t4,t4,0x2 + 80003168: 01df6f33 or t5,t5,t4 + 8000316c: 000f0f1b sext.w t5,t5 + 80003170: 008f5613 srli a2,t5,0x8 + 80003174: 00ce00a3 sb a2,1(t3) + 80003178: 01ee0023 sb t5,0(t3) + 8000317c: 00177613 andi a2,a4,1 + 80003180: 002e0e13 addi t3,t3,2 + 80003184: 00060593 mv a1,a2 + 80003188: ecfc74e3 bgeu s8,a5,80003050 + 8000318c: 03813883 ld a7,56(sp) + 80003190: 0017551b srliw a0,a4,0x1 + 80003194: 0017581b srliw a6,a4,0x1 + 80003198: 20f8e863 bltu a7,a5,800033a8 + 8000319c: 03813583 ld a1,56(sp) + 800031a0: 02013803 ld a6,32(sp) + 800031a4: 80000f37 lui t5,0x80000 + 800031a8: ffd58313 addi t1,a1,-3 + 800031ac: 00813583 ld a1,8(sp) + 800031b0: 00010eb7 lui t4,0x10 + 800031b4: 010588b3 add a7,a1,a6 + 800031b8: 08c0006f j 80003244 + 800031bc: 0027581b srliw a6,a4,0x2 + 800031c0: 00157593 andi a1,a0,1 + 800031c4: 000f8713 mv a4,t6 + 800031c8: 0007cf83 lbu t6,0(a5) + 800031cc: 06f36063 bltu t1,a5,8000322c + 800031d0: 0017c503 lbu a0,1(a5) + 800031d4: 0027c603 lbu a2,2(a5) + 800031d8: 0085151b slliw a0,a0,0x8 + 800031dc: 0106161b slliw a2,a2,0x10 + 800031e0: 00c56533 or a0,a0,a2 + 800031e4: 00d5529b srliw t0,a0,0xd + 800031e8: 0095561b srliw a2,a0,0x9 + 800031ec: 00564633 xor a2,a2,t0 + 800031f0: 01f56533 or a0,a0,t6 + 800031f4: 00a64633 xor a2,a2,a0 + 800031f8: 7ff67613 andi a2,a2,2047 + 800031fc: 00c68533 add a0,a3,a2 + 80003200: 00ae8533 add a0,t4,a0 + 80003204: 00854f83 lbu t6,8(a0) + 80003208: 00261613 slli a2,a2,0x2 + 8000320c: 003ff293 andi t0,t6,3 + 80003210: 00560633 add a2,a2,t0 + 80003214: 00361613 slli a2,a2,0x3 + 80003218: 00c68633 add a2,a3,a2 + 8000321c: 00f63423 sd a5,8(a2) + 80003220: 001f8f9b addiw t6,t6,1 + 80003224: 01f50423 sb t6,8(a0) + 80003228: 0007cf83 lbu t6,0(a5) + 8000322c: 01fe0023 sb t6,0(t3) + 80003230: 00178793 addi a5,a5,1 + 80003234: 001e0e13 addi t3,t3,1 + 80003238: 17178863 beq a5,a7,800033a8 + 8000323c: 0017551b srliw a0,a4,0x1 + 80003240: 00177613 andi a2,a4,1 + 80003244: 00050f9b sext.w t6,a0 + 80003248: f6060ae3 beqz a2,800031bc + 8000324c: 01e56533 or a0,a0,t5 + 80003250: 0005051b sext.w a0,a0 + 80003254: 00855593 srli a1,a0,0x8 + 80003258: 01855713 srli a4,a0,0x18 + 8000325c: 01055613 srli a2,a0,0x10 + 80003260: 00b480a3 sb a1,1(s1) + 80003264: 00e481a3 sb a4,3(s1) + 80003268: 00a48023 sb a0,0(s1) + 8000326c: 00c48123 sb a2,2(s1) + 80003270: 20000837 lui a6,0x20000 + 80003274: 000e0493 mv s1,t3 + 80003278: 00000593 li a1,0 + 8000327c: 004e0e13 addi t3,t3,4 + 80003280: 40000737 lui a4,0x40000 + 80003284: f45ff06f j 800031c8 + 80003288: 0018c383 lbu t2,1(a7) + 8000328c: 0028c403 lbu s0,2(a7) + 80003290: 0008ca83 lbu s5,0(a7) + 80003294: 0083939b slliw t2,t2,0x8 + 80003298: 0104141b slliw s0,s0,0x10 + 8000329c: 0083e3b3 or t2,t2,s0 + 800032a0: 0153e3b3 or t2,t2,s5 + 800032a4: 0003839b sext.w t2,t2 + 800032a8: e4c396e3 bne t2,a2,800030f4 + 800032ac: e548f4e3 bgeu a7,s4,800030f4 + 800032b0: 0038c403 lbu s0,3(a7) + 800032b4: 0037c383 lbu t2,3(a5) + 800032b8: 28741a63 bne s0,t2,8000354c + 800032bc: 00300393 li t2,3 + 800032c0: 01f3e663 bltu t2,t6,800032cc + 800032c4: 2880006f j 8000354c + 800032c8: 03f47263 bgeu s0,t6,800032ec + 800032cc: 0013839b addiw t2,t2,1 + 800032d0: 02039413 slli s0,t2,0x20 + 800032d4: 02045413 srli s0,s0,0x20 + 800032d8: 00888b33 add s6,a7,s0 + 800032dc: 00878ab3 add s5,a5,s0 + 800032e0: 000b4b03 lbu s6,0(s6) + 800032e4: 000aca83 lbu s5,0(s5) + 800032e8: ff5b00e3 beq s6,s5,800032c8 + 800032ec: e07ef4e3 bgeu t4,t2,800030f4 + 800032f0: 00050f13 mv t5,a0 + 800032f4: 00038e93 mv t4,t2 + 800032f8: dfdff06f j 800030f4 + 800032fc: 0015c503 lbu a0,1(a1) + 80003300: 0025c883 lbu a7,2(a1) + 80003304: 0005ce83 lbu t4,0(a1) + 80003308: 0085151b slliw a0,a0,0x8 + 8000330c: 0108989b slliw a7,a7,0x10 + 80003310: 01156533 or a0,a0,a7 + 80003314: 01d56533 or a0,a0,t4 + 80003318: 0005051b sext.w a0,a0 + 8000331c: 00000e93 li t4,0 + 80003320: d8c51ee3 bne a0,a2,800030bc + 80003324: 0035c883 lbu a7,3(a1) + 80003328: 0037c503 lbu a0,3(a5) + 8000332c: 00300e93 li t4,3 + 80003330: d8a896e3 bne a7,a0,800030bc + 80003334: 0045c883 lbu a7,4(a1) + 80003338: 0047c503 lbu a0,4(a5) + 8000333c: 00400e93 li t4,4 + 80003340: d6a89ee3 bne a7,a0,800030bc + 80003344: 01f9e663 bltu s3,t6,80003350 + 80003348: d75ff06f j 800030bc + 8000334c: d7f578e3 bgeu a0,t6,800030bc + 80003350: 001e8e9b addiw t4,t4,1 + 80003354: 020e9513 slli a0,t4,0x20 + 80003358: 02055513 srli a0,a0,0x20 + 8000335c: 00a588b3 add a7,a1,a0 + 80003360: 00a78f33 add t5,a5,a0 + 80003364: 0008c883 lbu a7,0(a7) + 80003368: 000f4f03 lbu t5,0(t5) # ffffffff80000000 <_end+0xfffffffeffff0000> + 8000336c: ffe880e3 beq a7,t5,8000334c + 80003370: d4dff06f j 800030bc + 80003374: 010e9e9b slliw t4,t4,0x10 + 80003378: 01df6eb3 or t4,t5,t4 + 8000337c: 000e8e9b sext.w t4,t4 + 80003380: 008ed593 srli a1,t4,0x8 + 80003384: 010ed613 srli a2,t4,0x10 + 80003388: 01de0023 sb t4,0(t3) + 8000338c: 00be00a3 sb a1,1(t3) + 80003390: 00ce0123 sb a2,2(t3) + 80003394: 003e0e13 addi t3,t3,3 + 80003398: cadff06f j 80003044 + 8000339c: 00900793 li a5,9 + 800033a0: 02f13423 sd a5,40(sp) + 800033a4: b99ff06f j 80002f3c + 800033a8: 00059e63 bnez a1,800033c4 + 800033ac: 0017579b srliw a5,a4,0x1 + 800033b0: 0017f613 andi a2,a5,1 + 800033b4: 0007081b sext.w a6,a4 + 800033b8: 0007871b sext.w a4,a5 + 800033bc: fe0608e3 beqz a2,800033ac + 800033c0: 0028581b srliw a6,a6,0x2 + 800033c4: 800007b7 lui a5,0x80000 + 800033c8: 00f86833 or a6,a6,a5 + 800033cc: 01885793 srli a5,a6,0x18 + 800033d0: 00f481a3 sb a5,3(s1) + 800033d4: 01013783 ld a5,16(sp) + 800033d8: 00885613 srli a2,a6,0x8 + 800033dc: 01085713 srli a4,a6,0x10 + 800033e0: 40fe0533 sub a0,t3,a5 + 800033e4: 01048023 sb a6,0(s1) + 800033e8: 00c480a3 sb a2,1(s1) + 800033ec: 00e48123 sb a4,2(s1) + 800033f0: 00900793 li a5,9 + 800033f4: 00f55463 bge a0,a5,800033fc + 800033f8: 00900513 li a0,9 + 800033fc: 02813783 ld a5,40(sp) + 80003400: 00f50533 add a0,a0,a5 + 80003404: 00100793 li a5,1 + 80003408: 0006b023 sd zero,0(a3) + 8000340c: 02813683 ld a3,40(sp) + 80003410: 00300713 li a4,3 + 80003414: 02014603 lbu a2,32(sp) + 80003418: 0ff57593 andi a1,a0,255 + 8000341c: 08e68e63 beq a3,a4,800034b8 + 80003420: 02012683 lw a3,32(sp) + 80003424: 03013e83 ld t4,48(sp) + 80003428: 0005071b sext.w a4,a0 + 8000342c: 00875e13 srli t3,a4,0x8 + 80003430: 01075313 srli t1,a4,0x10 + 80003434: 0086d893 srli a7,a3,0x8 + 80003438: 0106d813 srli a6,a3,0x10 + 8000343c: 01875713 srli a4,a4,0x18 + 80003440: 0186d693 srli a3,a3,0x18 + 80003444: 0027e793 ori a5,a5,2 + 80003448: 00be80a3 sb a1,1(t4) # 10001 <_entry_offset+0x10001> + 8000344c: 01ce8123 sb t3,2(t4) + 80003450: 006e81a3 sb t1,3(t4) + 80003454: 00ee8223 sb a4,4(t4) + 80003458: 00ce82a3 sb a2,5(t4) + 8000345c: 011e8323 sb a7,6(t4) + 80003460: 010e83a3 sb a6,7(t4) + 80003464: 00de8423 sb a3,8(t4) + 80003468: 03013703 ld a4,48(sp) + 8000346c: 0487e793 ori a5,a5,72 + 80003470: 00f70023 sb a5,0(a4) # 40000000 <_entry_offset+0x40000000> + 80003474: 0a813083 ld ra,168(sp) + 80003478: 0a013403 ld s0,160(sp) + 8000347c: 09813483 ld s1,152(sp) + 80003480: 09013903 ld s2,144(sp) + 80003484: 08813983 ld s3,136(sp) + 80003488: 08013a03 ld s4,128(sp) + 8000348c: 07813a83 ld s5,120(sp) + 80003490: 07013b03 ld s6,112(sp) + 80003494: 06813b83 ld s7,104(sp) + 80003498: 06013c03 ld s8,96(sp) + 8000349c: 05813c83 ld s9,88(sp) + 800034a0: 05013d03 ld s10,80(sp) + 800034a4: 04813d83 ld s11,72(sp) + 800034a8: 0b010113 addi sp,sp,176 + 800034ac: 00008067 ret + 800034b0: 00000513 li a0,0 + 800034b4: fc1ff06f j 80003474 + 800034b8: 03013703 ld a4,48(sp) + 800034bc: 00b700a3 sb a1,1(a4) + 800034c0: 00c70123 sb a2,2(a4) + 800034c4: fa5ff06f j 80003468 + 800034c8: 00813783 ld a5,8(sp) + 800034cc: 0a078c63 beqz a5,80003584 + 800034d0: 00813603 ld a2,8(sp) + 800034d4: 02013583 ld a1,32(sp) + 800034d8: 01013703 ld a4,16(sp) + 800034dc: 00b607b3 add a5,a2,a1 + 800034e0: 02f77c63 bgeu a4,a5,80003518 + 800034e4: 02e67a63 bgeu a2,a4,80003518 + 800034e8: 00b70733 add a4,a4,a1 + 800034ec: fff7c603 lbu a2,-1(a5) # ffffffff7fffffff <_end+0xfffffffefffeffff> + 800034f0: fff78793 addi a5,a5,-1 + 800034f4: fff70713 addi a4,a4,-1 + 800034f8: 00c70023 sb a2,0(a4) + 800034fc: 00813603 ld a2,8(sp) + 80003500: fef616e3 bne a2,a5,800034ec + 80003504: 02813783 ld a5,40(sp) + 80003508: 02013703 ld a4,32(sp) + 8000350c: 00e78533 add a0,a5,a4 + 80003510: 00000793 li a5,0 + 80003514: ef5ff06f j 80003408 + 80003518: 01013783 ld a5,16(sp) + 8000351c: 02013703 ld a4,32(sp) + 80003520: 00e78733 add a4,a5,a4 + 80003524: 00813583 ld a1,8(sp) + 80003528: 01013603 ld a2,16(sp) + 8000352c: 0005c783 lbu a5,0(a1) + 80003530: 00160613 addi a2,a2,1 + 80003534: 00158593 addi a1,a1,1 + 80003538: 00c13823 sd a2,16(sp) + 8000353c: 00b13423 sd a1,8(sp) + 80003540: fef60fa3 sb a5,-1(a2) + 80003544: fec710e3 bne a4,a2,80003524 + 80003548: fbdff06f j 80003504 + 8000354c: 00300393 li t2,3 + 80003550: d9dff06f j 800032ec + 80003554: 00813783 ld a5,8(sp) + 80003558: 03813703 ld a4,56(sp) + 8000355c: 00f76e63 bltu a4,a5,80003578 + 80003560: 00813783 ld a5,8(sp) + 80003564: 01013483 ld s1,16(sp) + 80003568: 80000737 lui a4,0x80000 + 8000356c: 40000537 lui a0,0x40000 + 80003570: 00000613 li a2,0 + 80003574: c29ff06f j 8000319c + 80003578: 01013483 ld s1,16(sp) + 8000357c: 80000737 lui a4,0x80000 + 80003580: e2dff06f j 800033ac + 80003584: 925ff0ef jal ra,80002ea8 + +0000000080003588 : + 80003588: 00004797 auipc a5,0x4 + 8000358c: 5487b783 ld a5,1352(a5) # 80007ad0 + 80003590: 0007a783 lw a5,0(a5) + 80003594: fd010113 addi sp,sp,-48 + 80003598: 01213823 sd s2,16(sp) + 8000359c: 00004537 lui a0,0x4 + 800035a0: 00004917 auipc s2,0x4 + 800035a4: 47090913 addi s2,s2,1136 # 80007a10 + 800035a8: 02113423 sd ra,40(sp) + 800035ac: 00f92023 sw a5,0(s2) + 800035b0: 01313423 sd s3,8(sp) + 800035b4: 00004797 auipc a5,0x4 + 800035b8: 4607a623 sw zero,1132(a5) # 80007a20 + 800035bc: 02813023 sd s0,32(sp) + 800035c0: 00913c23 sd s1,24(sp) + 800035c4: 01413023 sd s4,0(sp) + 800035c8: f51fc0ef jal ra,80000518 + 800035cc: 00050793 mv a5,a0 + 800035d0: 40000513 li a0,1024 + 800035d4: 00004717 auipc a4,0x4 + 800035d8: 44f73223 sd a5,1092(a4) # 80007a18 + 800035dc: f3dfc0ef jal ra,80000518 + 800035e0: 00050793 mv a5,a0 + 800035e4: 00002537 lui a0,0x2 + 800035e8: 00004717 auipc a4,0x4 + 800035ec: 44f73023 sd a5,1088(a4) # 80007a28 + 800035f0: f29fc0ef jal ra,80000518 + 800035f4: 00092783 lw a5,0(s2) + 800035f8: 00004717 auipc a4,0x4 + 800035fc: 44a73023 sd a0,1088(a4) # 80007a38 + 80003600: 00004997 auipc s3,0x4 + 80003604: 44098993 addi s3,s3,1088 # 80007a40 + 80003608: 0017851b addiw a0,a5,1 + 8000360c: 00003797 auipc a5,0x3 + 80003610: 10c78793 addi a5,a5,268 # 80006718 <_etext+0x484> + 80003614: 00004717 auipc a4,0x4 + 80003618: 40f73e23 sd a5,1052(a4) # 80007a30 + 8000361c: efdfc0ef jal ra,80000518 + 80003620: 00050793 mv a5,a0 + 80003624: 00001537 lui a0,0x1 + 80003628: 00f9b023 sd a5,0(s3) + 8000362c: eedfc0ef jal ra,80000518 + 80003630: 00050793 mv a5,a0 + 80003634: 00100513 li a0,1 + 80003638: 00004717 auipc a4,0x4 + 8000363c: 40f73c23 sd a5,1048(a4) # 80007a50 + 80003640: 00004797 auipc a5,0x4 + 80003644: 4007a423 sw zero,1032(a5) # 80007a48 + 80003648: f6dfc0ef jal ra,800005b4 + 8000364c: 00092783 lw a5,0(s2) + 80003650: 04f05863 blez a5,800036a0 + 80003654: 00000413 li s0,0 + 80003658: 00003a17 auipc s4,0x3 + 8000365c: 178a0a13 addi s4,s4,376 # 800067d0 <_etext+0x53c> + 80003660: f69fc0ef jal ra,800005c8 + 80003664: 02051513 slli a0,a0,0x20 + 80003668: 03e00593 li a1,62 + 8000366c: 02055513 srli a0,a0,0x20 + 80003670: 320010ef jal ra,80004990 <__umoddi3> + 80003674: 02051513 slli a0,a0,0x20 + 80003678: 02055513 srli a0,a0,0x20 + 8000367c: 0009b483 ld s1,0(s3) + 80003680: 00aa0533 add a0,s4,a0 + 80003684: 00054783 lbu a5,0(a0) # 1000 <_entry_offset+0x1000> + 80003688: 00092703 lw a4,0(s2) + 8000368c: 008484b3 add s1,s1,s0 + 80003690: 00140413 addi s0,s0,1 + 80003694: 00f48023 sb a5,0(s1) + 80003698: 0004079b sext.w a5,s0 + 8000369c: fce7c2e3 blt a5,a4,80003660 + 800036a0: 02813083 ld ra,40(sp) + 800036a4: 02013403 ld s0,32(sp) + 800036a8: 01813483 ld s1,24(sp) + 800036ac: 01013903 ld s2,16(sp) + 800036b0: 00813983 ld s3,8(sp) + 800036b4: 00013a03 ld s4,0(sp) + 800036b8: 03010113 addi sp,sp,48 + 800036bc: 00008067 ret + +00000000800036c0 : + 800036c0: 00004317 auipc t1,0x4 + 800036c4: 37030313 addi t1,t1,880 # 80007a30 + 800036c8: 00033583 ld a1,0(t1) + 800036cc: fc010113 addi sp,sp,-64 + 800036d0: 02813c23 sd s0,56(sp) + 800036d4: 02913823 sd s1,48(sp) + 800036d8: 03213423 sd s2,40(sp) + 800036dc: 03313023 sd s3,32(sp) + 800036e0: 01413c23 sd s4,24(sp) + 800036e4: 01513823 sd s5,16(sp) + 800036e8: 01613423 sd s6,8(sp) + 800036ec: 01713023 sd s7,0(sp) + 800036f0: 0005c703 lbu a4,0(a1) + 800036f4: 00004517 auipc a0,0x4 + 800036f8: 32c50513 addi a0,a0,812 # 80007a20 + 800036fc: 00052603 lw a2,0(a0) + 80003700: 00004697 auipc a3,0x4 + 80003704: 3186b683 ld a3,792(a3) # 80007a18 + 80003708: 38070463 beqz a4,80003a90 + 8000370c: 00004897 auipc a7,0x4 + 80003710: 31c8b883 ld a7,796(a7) # 80007a28 + 80003714: 00158593 addi a1,a1,1 + 80003718: 00000b13 li s6,0 + 8000371c: 00000a93 li s5,0 + 80003720: 00000793 li a5,0 + 80003724: 03200a13 li s4,50 + 80003728: 00003817 auipc a6,0x3 + 8000372c: 0e880813 addi a6,a6,232 # 80006810 <_etext+0x57c> + 80003730: 000019b7 lui s3,0x1 + 80003734: 00800913 li s2,8 + 80003738: 00700493 li s1,7 + 8000373c: 20000413 li s0,512 + 80003740: 00600393 li t2,6 + 80003744: 00500293 li t0,5 + 80003748: 00400f93 li t6,4 + 8000374c: 00300f13 li t5,3 + 80003750: 00200e93 li t4,2 + 80003754: 00100e13 li t3,1 + 80003758: fd57071b addiw a4,a4,-43 + 8000375c: 0ff77713 andi a4,a4,255 + 80003760: fff58b93 addi s7,a1,-1 + 80003764: 00ea6c63 bltu s4,a4,8000377c + 80003768: 00271713 slli a4,a4,0x2 + 8000376c: 01070733 add a4,a4,a6 + 80003770: 00072703 lw a4,0(a4) + 80003774: 01070733 add a4,a4,a6 + 80003778: 00070067 jr a4 + 8000377c: 0005c703 lbu a4,0(a1) + 80003780: 10070a63 beqz a4,80003894 + 80003784: 00158593 addi a1,a1,1 + 80003788: 00100b13 li s6,1 + 8000378c: fcdff06f j 80003758 + 80003790: 2c060e63 beqz a2,80003a6c + 80003794: fff6061b addiw a2,a2,-1 + 80003798: 02061713 slli a4,a2,0x20 + 8000379c: 01f75713 srli a4,a4,0x1f + 800037a0: 00e88733 add a4,a7,a4 + 800037a4: 00075b03 lhu s6,0(a4) + 800037a8: 00279713 slli a4,a5,0x2 + 800037ac: 00e68733 add a4,a3,a4 + 800037b0: 002b1a93 slli s5,s6,0x2 + 800037b4: 01671123 sh s6,2(a4) + 800037b8: 01271023 sh s2,0(a4) + 800037bc: 01568733 add a4,a3,s5 + 800037c0: 00f71123 sh a5,2(a4) + 800037c4: 00100a93 li s5,1 + 800037c8: 0005c703 lbu a4,0(a1) + 800037cc: 0017879b addiw a5,a5,1 + 800037d0: 03079793 slli a5,a5,0x30 + 800037d4: 0307d793 srli a5,a5,0x30 + 800037d8: 0a070e63 beqz a4,80003894 + 800037dc: fb3794e3 bne a5,s3,80003784 + 800037e0: 000a8463 beqz s5,800037e8 + 800037e4: 00c52023 sw a2,0(a0) + 800037e8: 00b33023 sd a1,0(t1) + 800037ec: 0006d703 lhu a4,0(a3) + 800037f0: 16070c63 beqz a4,80003968 + 800037f4: 00004e97 auipc t4,0x4 + 800037f8: 24ce8e93 addi t4,t4,588 # 80007a40 + 800037fc: 00004e17 auipc t3,0x4 + 80003800: 24ce0e13 addi t3,t3,588 # 80007a48 + 80003804: 000eb803 ld a6,0(t4) + 80003808: 000e2503 lw a0,0(t3) + 8000380c: 00004597 auipc a1,0x4 + 80003810: 22c5b583 ld a1,556(a1) # 80007a38 + 80003814: 00004397 auipc t2,0x4 + 80003818: 23c3b383 ld t2,572(t2) # 80007a50 + 8000381c: 00068793 mv a5,a3 + 80003820: 00000f13 li t5,0 + 80003824: 00000313 li t1,0 + 80003828: 00000413 li s0,0 + 8000382c: 00000613 li a2,0 + 80003830: 00800293 li t0,8 + 80003834: 00003897 auipc a7,0x3 + 80003838: 0a888893 addi a7,a7,168 # 800068dc <_etext+0x648> + 8000383c: 00001fb7 lui t6,0x1 + 80003840: 10e2ec63 bltu t0,a4,80003958 + 80003844: 00271713 slli a4,a4,0x2 + 80003848: 01170733 add a4,a4,a7 + 8000384c: 00072703 lw a4,0(a4) + 80003850: 01170733 add a4,a4,a7 + 80003854: 00070067 jr a4 + 80003858: 00279713 slli a4,a5,0x2 + 8000385c: 00e68733 add a4,a3,a4 + 80003860: 00971023 sh s1,0(a4) + 80003864: 22860063 beq a2,s0,80003a84 + 80003868: 02061713 slli a4,a2,0x20 + 8000386c: 01f75713 srli a4,a4,0x1f + 80003870: 00e88733 add a4,a7,a4 + 80003874: 00f71023 sh a5,0(a4) + 80003878: 0005c703 lbu a4,0(a1) + 8000387c: 0017879b addiw a5,a5,1 + 80003880: 03079793 slli a5,a5,0x30 + 80003884: 0016061b addiw a2,a2,1 + 80003888: 00100a93 li s5,1 + 8000388c: 0307d793 srli a5,a5,0x30 + 80003890: f40716e3 bnez a4,800037dc + 80003894: 000a8463 beqz s5,8000389c + 80003898: 00c52023 sw a2,0(a0) + 8000389c: 00052703 lw a4,0(a0) + 800038a0: 00b33023 sd a1,0(t1) + 800038a4: f40714e3 bnez a4,800037ec + 800038a8: 00001737 lui a4,0x1 + 800038ac: f4e780e3 beq a5,a4,800037ec + 800038b0: 00279793 slli a5,a5,0x2 + 800038b4: 00f687b3 add a5,a3,a5 + 800038b8: 00079023 sh zero,0(a5) + 800038bc: 0006d703 lhu a4,0(a3) + 800038c0: f2071ae3 bnez a4,800037f4 + 800038c4: 0a40006f j 80003968 + 800038c8: 00279713 slli a4,a5,0x2 + 800038cc: 00e68733 add a4,a3,a4 + 800038d0: 01c71023 sh t3,0(a4) # 1000 <_entry_offset+0x1000> + 800038d4: ef5ff06f j 800037c8 + 800038d8: 00279713 slli a4,a5,0x2 + 800038dc: 00e68733 add a4,a3,a4 + 800038e0: 01d71023 sh t4,0(a4) + 800038e4: ee5ff06f j 800037c8 + 800038e8: 00279713 slli a4,a5,0x2 + 800038ec: 00e68733 add a4,a3,a4 + 800038f0: 00571023 sh t0,0(a4) + 800038f4: ed5ff06f j 800037c8 + 800038f8: 00279713 slli a4,a5,0x2 + 800038fc: 00e68733 add a4,a3,a4 + 80003900: 01f71023 sh t6,0(a4) + 80003904: ec5ff06f j 800037c8 + 80003908: 00279713 slli a4,a5,0x2 + 8000390c: 00e68733 add a4,a3,a4 + 80003910: 00771023 sh t2,0(a4) + 80003914: eb5ff06f j 800037c8 + 80003918: 00279713 slli a4,a5,0x2 + 8000391c: 00e68733 add a4,a3,a4 + 80003920: 01e71023 sh t5,0(a4) + 80003924: ea5ff06f j 800037c8 + 80003928: 02061713 slli a4,a2,0x20 + 8000392c: 01f75713 srli a4,a4,0x1f + 80003930: 00e58733 add a4,a1,a4 + 80003934: 00075703 lhu a4,0(a4) + 80003938: 08070863 beqz a4,800039c8 + 8000393c: 0027d403 lhu s0,2(a5) + 80003940: 0014041b addiw s0,s0,1 + 80003944: 02041793 slli a5,s0,0x20 + 80003948: 01e7d793 srli a5,a5,0x1e + 8000394c: 00f687b3 add a5,a3,a5 + 80003950: 0007d703 lhu a4,0(a5) + 80003954: ee0716e3 bnez a4,80003840 + 80003958: 00030463 beqz t1,80003960 + 8000395c: 00ae2023 sw a0,0(t3) + 80003960: 000f0463 beqz t5,80003968 + 80003964: 010eb023 sd a6,0(t4) + 80003968: 03813403 ld s0,56(sp) + 8000396c: 03013483 ld s1,48(sp) + 80003970: 02813903 ld s2,40(sp) + 80003974: 02013983 ld s3,32(sp) + 80003978: 01813a03 ld s4,24(sp) + 8000397c: 01013a83 ld s5,16(sp) + 80003980: 00813b03 ld s6,8(sp) + 80003984: 00013b83 ld s7,0(sp) + 80003988: 04010113 addi sp,sp,64 + 8000398c: 00008067 ret + 80003990: 02061713 slli a4,a2,0x20 + 80003994: 01f75713 srli a4,a4,0x1f + 80003998: 00e58733 add a4,a1,a4 + 8000399c: 00075703 lhu a4,0(a4) + 800039a0: 02071463 bnez a4,800039c8 + 800039a4: 0027d403 lhu s0,2(a5) + 800039a8: f99ff06f j 80003940 + 800039ac: 00084703 lbu a4,0(a6) + 800039b0: 02061793 slli a5,a2,0x20 + 800039b4: 01f7d793 srli a5,a5,0x1f + 800039b8: 00f587b3 add a5,a1,a5 + 800039bc: 00e79023 sh a4,0(a5) + 800039c0: 00180813 addi a6,a6,1 + 800039c4: 00100f13 li t5,1 + 800039c8: 0014041b addiw s0,s0,1 + 800039cc: 02041793 slli a5,s0,0x20 + 800039d0: 01e7d793 srli a5,a5,0x1e + 800039d4: 00f687b3 add a5,a3,a5 + 800039d8: 0007d703 lhu a4,0(a5) + 800039dc: e60712e3 bnez a4,80003840 + 800039e0: f79ff06f j 80003958 + 800039e4: 02061793 slli a5,a2,0x20 + 800039e8: 01f7d793 srli a5,a5,0x1f + 800039ec: 00f587b3 add a5,a1,a5 + 800039f0: 0007d703 lhu a4,0(a5) + 800039f4: fff7071b addiw a4,a4,-1 + 800039f8: 00e79023 sh a4,0(a5) + 800039fc: fcdff06f j 800039c8 + 80003a00: 02061793 slli a5,a2,0x20 + 80003a04: 01f7d793 srli a5,a5,0x1f + 80003a08: 00f587b3 add a5,a1,a5 + 80003a0c: 0007d703 lhu a4,0(a5) + 80003a10: 00a387b3 add a5,t2,a0 + 80003a14: 00100313 li t1,1 + 80003a18: 00e78023 sb a4,0(a5) + 80003a1c: 0015051b addiw a0,a0,1 + 80003a20: fa9ff06f j 800039c8 + 80003a24: 02061793 slli a5,a2,0x20 + 80003a28: 01f7d793 srli a5,a5,0x1f + 80003a2c: 00f587b3 add a5,a1,a5 + 80003a30: 0007d703 lhu a4,0(a5) + 80003a34: 0017071b addiw a4,a4,1 + 80003a38: 00e79023 sh a4,0(a5) + 80003a3c: f8dff06f j 800039c8 + 80003a40: fff6061b addiw a2,a2,-1 + 80003a44: 0014041b addiw s0,s0,1 + 80003a48: 02041793 slli a5,s0,0x20 + 80003a4c: 01e7d793 srli a5,a5,0x1e + 80003a50: 00f687b3 add a5,a3,a5 + 80003a54: 0007d703 lhu a4,0(a5) + 80003a58: f00700e3 beqz a4,80003958 + 80003a5c: dff662e3 bltu a2,t6,80003840 + 80003a60: ef9ff06f j 80003958 + 80003a64: 0016061b addiw a2,a2,1 + 80003a68: fddff06f j 80003a44 + 80003a6c: 000a8663 beqz s5,80003a78 + 80003a70: 00004797 auipc a5,0x4 + 80003a74: fa07a823 sw zero,-80(a5) # 80007a20 + 80003a78: d60b0ae3 beqz s6,800037ec + 80003a7c: 01733023 sd s7,0(t1) + 80003a80: d6dff06f j 800037ec + 80003a84: fe0a8ae3 beqz s5,80003a78 + 80003a88: 00c52023 sw a2,0(a0) + 80003a8c: fedff06f j 80003a78 + 80003a90: 00068793 mv a5,a3 + 80003a94: e20602e3 beqz a2,800038b8 + 80003a98: d55ff06f j 800037ec + +0000000080003a9c : + 80003a9c: ff010113 addi sp,sp,-16 + 80003aa0: 00813023 sd s0,0(sp) + 80003aa4: 00004417 auipc s0,0x4 + 80003aa8: fa440413 addi s0,s0,-92 # 80007a48 + 80003aac: 00042583 lw a1,0(s0) + 80003ab0: 00004517 auipc a0,0x4 + 80003ab4: fa053503 ld a0,-96(a0) # 80007a50 + 80003ab8: 00113423 sd ra,8(sp) + 80003abc: 00b505b3 add a1,a0,a1 + 80003ac0: b59fc0ef jal ra,80000618 + 80003ac4: 00042683 lw a3,0(s0) + 80003ac8: 00004717 auipc a4,0x4 + 80003acc: f4872703 lw a4,-184(a4) # 80007a10 + 80003ad0: 00e68c63 beq a3,a4,80003ae8 + 80003ad4: 00813083 ld ra,8(sp) + 80003ad8: 00013403 ld s0,0(sp) + 80003adc: 00000513 li a0,0 + 80003ae0: 01010113 addi sp,sp,16 + 80003ae4: 00008067 ret + 80003ae8: 00004717 auipc a4,0x4 + 80003aec: fe873703 ld a4,-24(a4) # 80007ad0 + 80003af0: 0005079b sext.w a5,a0 + 80003af4: 01872503 lw a0,24(a4) + 80003af8: 00813083 ld ra,8(sp) + 80003afc: 00013403 ld s0,0(sp) + 80003b00: 40f50533 sub a0,a0,a5 + 80003b04: 00153513 seqz a0,a0 + 80003b08: 01010113 addi sp,sp,16 + 80003b0c: 00008067 ret + +0000000080003b10 : + 80003b10: 00004797 auipc a5,0x4 + 80003b14: fc07b783 ld a5,-64(a5) # 80007ad0 + 80003b18: 0007a783 lw a5,0(a5) + 80003b1c: ff010113 addi sp,sp,-16 + 80003b20: 00113423 sd ra,8(sp) + 80003b24: 0007859b sext.w a1,a5 + 80003b28: 00058513 mv a0,a1 + 80003b2c: 00004717 auipc a4,0x4 + 80003b30: f2f72a23 sw a5,-204(a4) # 80007a60 + 80003b34: 00813023 sd s0,0(sp) + 80003b38: 5a5000ef jal ra,800048dc <__muldi3> + 80003b3c: 0025141b slliw s0,a0,0x2 + 80003b40: 00040513 mv a0,s0 + 80003b44: 9d5fc0ef jal ra,80000518 + 80003b48: 00050793 mv a5,a0 + 80003b4c: 00040513 mv a0,s0 + 80003b50: 00004717 auipc a4,0x4 + 80003b54: f0f73423 sd a5,-248(a4) # 80007a58 + 80003b58: 9c1fc0ef jal ra,80000518 + 80003b5c: 00050793 mv a5,a0 + 80003b60: 00040513 mv a0,s0 + 80003b64: 00004717 auipc a4,0x4 + 80003b68: f0f73223 sd a5,-252(a4) # 80007a68 + 80003b6c: 9adfc0ef jal ra,80000518 + 80003b70: 00050793 mv a5,a0 + 80003b74: 00040513 mv a0,s0 + 80003b78: 00004717 auipc a4,0x4 + 80003b7c: eef73c23 sd a5,-264(a4) # 80007a70 + 80003b80: 999fc0ef jal ra,80000518 + 80003b84: 00813083 ld ra,8(sp) + 80003b88: 00013403 ld s0,0(sp) + 80003b8c: 00004797 auipc a5,0x4 + 80003b90: eea7b623 sd a0,-276(a5) # 80007a78 + 80003b94: 01010113 addi sp,sp,16 + 80003b98: 00008067 ret + +0000000080003b9c : + 80003b9c: f5010113 addi sp,sp,-176 + 80003ba0: 00004797 auipc a5,0x4 + 80003ba4: ec87b783 ld a5,-312(a5) # 80007a68 + 80003ba8: 00f13423 sd a5,8(sp) + 80003bac: 00004797 auipc a5,0x4 + 80003bb0: ec47b783 ld a5,-316(a5) # 80007a70 + 80003bb4: 0a813023 sd s0,160(sp) + 80003bb8: 0a113423 sd ra,168(sp) + 80003bbc: 08913c23 sd s1,152(sp) + 80003bc0: 09213823 sd s2,144(sp) + 80003bc4: 09313423 sd s3,136(sp) + 80003bc8: 09413023 sd s4,128(sp) + 80003bcc: 07513c23 sd s5,120(sp) + 80003bd0: 07613823 sd s6,112(sp) + 80003bd4: 07713423 sd s7,104(sp) + 80003bd8: 07813023 sd s8,96(sp) + 80003bdc: 05913c23 sd s9,88(sp) + 80003be0: 05a13823 sd s10,80(sp) + 80003be4: 05b13423 sd s11,72(sp) + 80003be8: 00004417 auipc s0,0x4 + 80003bec: e7842403 lw s0,-392(s0) # 80007a60 + 80003bf0: 00f13c23 sd a5,24(sp) + 80003bf4: 2a805263 blez s0,80003e98 + 80003bf8: fff4039b addiw t2,s0,-1 + 80003bfc: 00004f17 auipc t5,0x4 + 80003c00: e5cf3f03 ld t5,-420(t5) # 80007a58 + 80003c04: 00038e9b sext.w t4,t2 + 80003c08: 00241493 slli s1,s0,0x2 + 80003c0c: 00000293 li t0,0 + 80003c10: 00000f93 li t6,0 + 80003c14: 00000e13 li t3,0 + 80003c18: 001e0e1b addiw t3,t3,1 + 80003c1c: 00028713 mv a4,t0 + 80003c20: 00000793 li a5,0 + 80003c24: 000f859b sext.w a1,t6 + 80003c28: 00813683 ld a3,8(sp) + 80003c2c: 01813603 ld a2,24(sp) + 80003c30: 41c78333 sub t1,a5,t3 + 80003c34: 00e68833 add a6,a3,a4 + 80003c38: 40b786b3 sub a3,a5,a1 + 80003c3c: 00e60533 add a0,a2,a4 + 80003c40: 00ef08b3 add a7,t5,a4 + 80003c44: 0016b693 seqz a3,a3 + 80003c48: 0017879b addiw a5,a5,1 + 80003c4c: 00100613 li a2,1 + 80003c50: 00be8463 beq t4,a1,80003c58 + 80003c54: 00133613 seqz a2,t1 + 80003c58: 00c8a023 sw a2,0(a7) + 80003c5c: 00c82023 sw a2,0(a6) + 80003c60: 00d52023 sw a3,0(a0) + 80003c64: 00470713 addi a4,a4,4 + 80003c68: fc8790e3 bne a5,s0,80003c28 + 80003c6c: 001f8f9b addiw t6,t6,1 + 80003c70: 009282b3 add t0,t0,s1 + 80003c74: fbc412e3 bne s0,t3,80003c18 + 80003c78: 01813703 ld a4,24(sp) + 80003c7c: 02039793 slli a5,t2,0x20 + 80003c80: 00004697 auipc a3,0x4 + 80003c84: df86b683 ld a3,-520(a3) # 80007a78 + 80003c88: 0207d793 srli a5,a5,0x20 + 80003c8c: 00279793 slli a5,a5,0x2 + 80003c90: 02d13423 sd a3,40(sp) + 80003c94: 00470713 addi a4,a4,4 + 80003c98: 00468693 addi a3,a3,4 + 80003c9c: 00f70733 add a4,a4,a5 + 80003ca0: 00f687b3 add a5,a3,a5 + 80003ca4: 02f13c23 sd a5,56(sp) + 80003ca8: 80000d37 lui s10,0x80000 + 80003cac: 01f00793 li a5,31 + 80003cb0: 02f13023 sd a5,32(sp) + 80003cb4: fd3d4793 xori a5,s10,-45 + 80003cb8: 02e13823 sd a4,48(sp) + 80003cbc: 00f13823 sd a5,16(sp) + 80003cc0: 01013783 ld a5,16(sp) + 80003cc4: 0017f793 andi a5,a5,1 + 80003cc8: 10079c63 bnez a5,80003de0 + 80003ccc: 0a805e63 blez s0,80003d88 + 80003cd0: 00813903 ld s2,8(sp) + 80003cd4: 02813a83 ld s5,40(sp) + 80003cd8: 00000a13 li s4,0 + 80003cdc: 01213023 sd s2,0(sp) + 80003ce0: 00813b03 ld s6,8(sp) + 80003ce4: 000a8d13 mv s10,s5 + 80003ce8: 00000d93 li s11,0 + 80003cec: 000d2023 sw zero,0(s10) # ffffffff80000000 <_end+0xfffffffeffff0000> + 80003cf0: 000b0993 mv s3,s6 + 80003cf4: 00090c93 mv s9,s2 + 80003cf8: 00000b93 li s7,0 + 80003cfc: 00000c13 li s8,0 + 80003d00: 0009a583 lw a1,0(s3) # 1000 <_entry_offset+0x1000> + 80003d04: 000ca503 lw a0,0(s9) + 80003d08: 001c0c1b addiw s8,s8,1 + 80003d0c: 004c8c93 addi s9,s9,4 + 80003d10: 3cd000ef jal ra,800048dc <__muldi3> + 80003d14: 01750bbb addw s7,a0,s7 + 80003d18: 017d2023 sw s7,0(s10) + 80003d1c: 009989b3 add s3,s3,s1 + 80003d20: fe8c40e3 blt s8,s0,80003d00 + 80003d24: 001d8d9b addiw s11,s11,1 + 80003d28: 004d0d13 addi s10,s10,4 + 80003d2c: 004b0b13 addi s6,s6,4 + 80003d30: fa8dcee3 blt s11,s0,80003cec + 80003d34: 001a0a1b addiw s4,s4,1 + 80003d38: 00990933 add s2,s2,s1 + 80003d3c: 009a8ab3 add s5,s5,s1 + 80003d40: fa8a40e3 blt s4,s0,80003ce0 + 80003d44: 02813503 ld a0,40(sp) + 80003d48: 00000593 li a1,0 + 80003d4c: 00013683 ld a3,0(sp) + 80003d50: 00050713 mv a4,a0 + 80003d54: 00000793 li a5,0 + 80003d58: 00072603 lw a2,0(a4) + 80003d5c: 0017879b addiw a5,a5,1 + 80003d60: 00470713 addi a4,a4,4 + 80003d64: 00c6a023 sw a2,0(a3) + 80003d68: 00468693 addi a3,a3,4 + 80003d6c: fe87c6e3 blt a5,s0,80003d58 + 80003d70: 00013783 ld a5,0(sp) + 80003d74: 0015859b addiw a1,a1,1 + 80003d78: 00950533 add a0,a0,s1 + 80003d7c: 009787b3 add a5,a5,s1 + 80003d80: 00f13023 sd a5,0(sp) + 80003d84: fc85c4e3 blt a1,s0,80003d4c + 80003d88: 02013783 ld a5,32(sp) + 80003d8c: 01013703 ld a4,16(sp) + 80003d90: fff7879b addiw a5,a5,-1 + 80003d94: 40175713 srai a4,a4,0x1 + 80003d98: 02f13023 sd a5,32(sp) + 80003d9c: 00e13823 sd a4,16(sp) + 80003da0: f20790e3 bnez a5,80003cc0 + 80003da4: 0a813083 ld ra,168(sp) + 80003da8: 0a013403 ld s0,160(sp) + 80003dac: 09813483 ld s1,152(sp) + 80003db0: 09013903 ld s2,144(sp) + 80003db4: 08813983 ld s3,136(sp) + 80003db8: 08013a03 ld s4,128(sp) + 80003dbc: 07813a83 ld s5,120(sp) + 80003dc0: 07013b03 ld s6,112(sp) + 80003dc4: 06813b83 ld s7,104(sp) + 80003dc8: 06013c03 ld s8,96(sp) + 80003dcc: 05813c83 ld s9,88(sp) + 80003dd0: 05013d03 ld s10,80(sp) + 80003dd4: 04813d83 ld s11,72(sp) + 80003dd8: 0b010113 addi sp,sp,176 + 80003ddc: 00008067 ret + 80003de0: fa8054e3 blez s0,80003d88 + 80003de4: 02813c83 ld s9,40(sp) + 80003de8: 03013983 ld s3,48(sp) + 80003dec: 01813b83 ld s7,24(sp) + 80003df0: 00000c13 li s8,0 + 80003df4: 00813a83 ld s5,8(sp) + 80003df8: 000c8913 mv s2,s9 + 80003dfc: 00000a13 li s4,0 + 80003e00: 00092023 sw zero,0(s2) + 80003e04: 000a8d93 mv s11,s5 + 80003e08: 000b8d13 mv s10,s7 + 80003e0c: 00000b13 li s6,0 + 80003e10: 000da583 lw a1,0(s11) # ffffffff80000000 <_end+0xfffffffeffff0000> + 80003e14: 000d2503 lw a0,0(s10) + 80003e18: 004d0d13 addi s10,s10,4 + 80003e1c: 009d8db3 add s11,s11,s1 + 80003e20: 2bd000ef jal ra,800048dc <__muldi3> + 80003e24: 01650b3b addw s6,a0,s6 + 80003e28: 01692023 sw s6,0(s2) + 80003e2c: ffa992e3 bne s3,s10,80003e10 + 80003e30: 001a0a1b addiw s4,s4,1 + 80003e34: 00490913 addi s2,s2,4 + 80003e38: 004a8a93 addi s5,s5,4 + 80003e3c: fc8a12e3 bne s4,s0,80003e00 + 80003e40: 001c0c1b addiw s8,s8,1 + 80003e44: 009b8bb3 add s7,s7,s1 + 80003e48: 009989b3 add s3,s3,s1 + 80003e4c: 009c8cb3 add s9,s9,s1 + 80003e50: fa8c12e3 bne s8,s0,80003df4 + 80003e54: 03813603 ld a2,56(sp) + 80003e58: 01813803 ld a6,24(sp) + 80003e5c: 02813503 ld a0,40(sp) + 80003e60: 00000593 li a1,0 + 80003e64: 00080713 mv a4,a6 + 80003e68: 00050793 mv a5,a0 + 80003e6c: 0007a683 lw a3,0(a5) + 80003e70: 00478793 addi a5,a5,4 + 80003e74: 00470713 addi a4,a4,4 + 80003e78: fed72e23 sw a3,-4(a4) + 80003e7c: fec798e3 bne a5,a2,80003e6c + 80003e80: 0015859b addiw a1,a1,1 + 80003e84: 00950533 add a0,a0,s1 + 80003e88: 00980833 add a6,a6,s1 + 80003e8c: 00960633 add a2,a2,s1 + 80003e90: fc859ae3 bne a1,s0,80003e64 + 80003e94: e3dff06f j 80003cd0 + 80003e98: 00241493 slli s1,s0,0x2 + 80003e9c: fff4039b addiw t2,s0,-1 + 80003ea0: dd9ff06f j 80003c78 + +0000000080003ea4 : + 80003ea4: 00004517 auipc a0,0x4 + 80003ea8: bbc52503 lw a0,-1092(a0) # 80007a60 + 80003eac: ff010113 addi sp,sp,-16 + 80003eb0: fff5059b addiw a1,a0,-1 + 80003eb4: 00813023 sd s0,0(sp) + 80003eb8: 00113423 sd ra,8(sp) + 80003ebc: 00058413 mv s0,a1 + 80003ec0: 21d000ef jal ra,800048dc <__muldi3> + 80003ec4: 00a4043b addw s0,s0,a0 + 80003ec8: 00241413 slli s0,s0,0x2 + 80003ecc: 00004517 auipc a0,0x4 + 80003ed0: ba453503 ld a0,-1116(a0) # 80007a70 + 80003ed4: 00850433 add s0,a0,s0 + 80003ed8: 00004797 auipc a5,0x4 + 80003edc: bf87b783 ld a5,-1032(a5) # 80007ad0 + 80003ee0: 00042503 lw a0,0(s0) + 80003ee4: 0187a783 lw a5,24(a5) + 80003ee8: 00813083 ld ra,8(sp) + 80003eec: 00013403 ld s0,0(sp) + 80003ef0: 40f50533 sub a0,a0,a5 + 80003ef4: 00153513 seqz a0,a0 + 80003ef8: 01010113 addi sp,sp,16 + 80003efc: 00008067 ret + +0000000080003f00 : + 80003f00: fd010113 addi sp,sp,-48 + 80003f04: 01413023 sd s4,0(sp) + 80003f08: 02113423 sd ra,40(sp) + 80003f0c: 02813023 sd s0,32(sp) + 80003f10: 00913c23 sd s1,24(sp) + 80003f14: 01213823 sd s2,16(sp) + 80003f18: 01313423 sd s3,8(sp) + 80003f1c: 00004797 auipc a5,0x4 + 80003f20: b647a783 lw a5,-1180(a5) # 80007a80 + 80003f24: 00100a13 li s4,1 + 80003f28: 04a78c63 beq a5,a0,80003f80 + 80003f2c: 00c5e433 or s0,a1,a2 + 80003f30: 00a46433 or s0,s0,a0 + 80003f34: fff44413 not s0,s0 + 80003f38: 00f47433 and s0,s0,a5 + 80003f3c: 00050493 mv s1,a0 + 80003f40: 00058993 mv s3,a1 + 80003f44: 00060913 mv s2,a2 + 80003f48: 00000a13 li s4,0 + 80003f4c: 02040a63 beqz s0,80003f80 + 80003f50: 408007bb negw a5,s0 + 80003f54: 00f477b3 and a5,s0,a5 + 80003f58: 0007851b sext.w a0,a5 + 80003f5c: 013565b3 or a1,a0,s3 + 80003f60: 00a96633 or a2,s2,a0 + 80003f64: 0015959b slliw a1,a1,0x1 + 80003f68: 0016561b srliw a2,a2,0x1 + 80003f6c: 00956533 or a0,a0,s1 + 80003f70: 40f4043b subw s0,s0,a5 + 80003f74: f8dff0ef jal ra,80003f00 + 80003f78: 01450a3b addw s4,a0,s4 + 80003f7c: fc041ae3 bnez s0,80003f50 + 80003f80: 02813083 ld ra,40(sp) + 80003f84: 02013403 ld s0,32(sp) + 80003f88: 01813483 ld s1,24(sp) + 80003f8c: 01013903 ld s2,16(sp) + 80003f90: 00813983 ld s3,8(sp) + 80003f94: 000a0513 mv a0,s4 + 80003f98: 00013a03 ld s4,0(sp) + 80003f9c: 03010113 addi sp,sp,48 + 80003fa0: 00008067 ret + +0000000080003fa4 : + 80003fa4: 00004797 auipc a5,0x4 + 80003fa8: b2c7b783 ld a5,-1236(a5) # 80007ad0 + 80003fac: 0007a703 lw a4,0(a5) + 80003fb0: 00004797 auipc a5,0x4 + 80003fb4: ac07aa23 sw zero,-1324(a5) # 80007a84 + 80003fb8: 00100793 li a5,1 + 80003fbc: 00e797bb sllw a5,a5,a4 + 80003fc0: fff7879b addiw a5,a5,-1 + 80003fc4: 00004717 auipc a4,0x4 + 80003fc8: aaf72e23 sw a5,-1348(a4) # 80007a80 + 80003fcc: 00008067 ret + +0000000080003fd0 : + 80003fd0: ff010113 addi sp,sp,-16 + 80003fd4: 00000613 li a2,0 + 80003fd8: 00000593 li a1,0 + 80003fdc: 00000513 li a0,0 + 80003fe0: 00113423 sd ra,8(sp) + 80003fe4: f1dff0ef jal ra,80003f00 + 80003fe8: 00813083 ld ra,8(sp) + 80003fec: 00004797 auipc a5,0x4 + 80003ff0: a8a7ac23 sw a0,-1384(a5) # 80007a84 + 80003ff4: 01010113 addi sp,sp,16 + 80003ff8: 00008067 ret + +0000000080003ffc : + 80003ffc: 00004797 auipc a5,0x4 + 80004000: ad47b783 ld a5,-1324(a5) # 80007ad0 + 80004004: 0187a503 lw a0,24(a5) + 80004008: 00004797 auipc a5,0x4 + 8000400c: a7c7a783 lw a5,-1412(a5) # 80007a84 + 80004010: 40f50533 sub a0,a0,a5 + 80004014: 00153513 seqz a0,a0 + 80004018: 00008067 ret + +000000008000401c : + 8000401c: fd010113 addi sp,sp,-48 + 80004020: 01213823 sd s2,16(sp) + 80004024: 01313423 sd s3,8(sp) + 80004028: 01413023 sd s4,0(sp) + 8000402c: 02113423 sd ra,40(sp) + 80004030: 02813023 sd s0,32(sp) + 80004034: 00913c23 sd s1,24(sp) + 80004038: 00060a13 mv s4,a2 + 8000403c: 00050993 mv s3,a0 + 80004040: 00850913 addi s2,a0,8 + 80004044: 0b45dc63 bge a1,s4,800040fc + 80004048: 00259793 slli a5,a1,0x2 + 8000404c: 00f98e33 add t3,s3,a5 + 80004050: 0015871b addiw a4,a1,1 + 80004054: 000e2303 lw t1,0(t3) + 80004058: ffea049b addiw s1,s4,-2 + 8000405c: 09475c63 bge a4,s4,800040f4 + 80004060: 40b4883b subw a6,s1,a1 + 80004064: 02081813 slli a6,a6,0x20 + 80004068: 02085813 srli a6,a6,0x20 + 8000406c: 00b80833 add a6,a6,a1 + 80004070: 00478793 addi a5,a5,4 + 80004074: 00281813 slli a6,a6,0x2 + 80004078: 00f987b3 add a5,s3,a5 + 8000407c: 01280833 add a6,a6,s2 + 80004080: 00058613 mv a2,a1 + 80004084: 0007a683 lw a3,0(a5) + 80004088: 0016041b addiw s0,a2,1 + 8000408c: 00241713 slli a4,s0,0x2 + 80004090: 0026051b addiw a0,a2,2 + 80004094: 00e98733 add a4,s3,a4 + 80004098: 0066dc63 bge a3,t1,800040b0 + 8000409c: 00072883 lw a7,0(a4) + 800040a0: 00d72023 sw a3,0(a4) + 800040a4: 00040613 mv a2,s0 + 800040a8: 0117a023 sw a7,0(a5) + 800040ac: 00050413 mv s0,a0 + 800040b0: 00478793 addi a5,a5,4 + 800040b4: fcf818e3 bne a6,a5,80004084 + 800040b8: 00261793 slli a5,a2,0x2 + 800040bc: 000e2683 lw a3,0(t3) + 800040c0: 00f987b3 add a5,s3,a5 + 800040c4: 0007a703 lw a4,0(a5) + 800040c8: 00d7a023 sw a3,0(a5) + 800040cc: 00098513 mv a0,s3 + 800040d0: 00ee2023 sw a4,0(t3) + 800040d4: f49ff0ef jal ra,8000401c + 800040d8: 03445263 bge s0,s4,800040fc + 800040dc: 00040593 mv a1,s0 + 800040e0: 00259793 slli a5,a1,0x2 + 800040e4: 00f98e33 add t3,s3,a5 + 800040e8: 0015871b addiw a4,a1,1 + 800040ec: 000e2303 lw t1,0(t3) + 800040f0: f74748e3 blt a4,s4,80004060 + 800040f4: 00058a13 mv s4,a1 + 800040f8: f545c8e3 blt a1,s4,80004048 + 800040fc: 02813083 ld ra,40(sp) + 80004100: 02013403 ld s0,32(sp) + 80004104: 01813483 ld s1,24(sp) + 80004108: 01013903 ld s2,16(sp) + 8000410c: 00813983 ld s3,8(sp) + 80004110: 00013a03 ld s4,0(sp) + 80004114: 03010113 addi sp,sp,48 + 80004118: 00008067 ret + +000000008000411c : + 8000411c: fd010113 addi sp,sp,-48 + 80004120: 00100513 li a0,1 + 80004124: 02113423 sd ra,40(sp) + 80004128: 01213823 sd s2,16(sp) + 8000412c: 01313423 sd s3,8(sp) + 80004130: 02813023 sd s0,32(sp) + 80004134: 00913c23 sd s1,24(sp) + 80004138: c7cfc0ef jal ra,800005b4 + 8000413c: 00004797 auipc a5,0x4 + 80004140: 9947b783 ld a5,-1644(a5) # 80007ad0 + 80004144: 0007a783 lw a5,0(a5) + 80004148: 00004917 auipc s2,0x4 + 8000414c: 94090913 addi s2,s2,-1728 # 80007a88 + 80004150: 00004997 auipc s3,0x4 + 80004154: 94098993 addi s3,s3,-1728 # 80007a90 + 80004158: 00279513 slli a0,a5,0x2 + 8000415c: 00f92023 sw a5,0(s2) + 80004160: bb8fc0ef jal ra,80000518 + 80004164: 00092783 lw a5,0(s2) + 80004168: 00a9b023 sd a0,0(s3) + 8000416c: 02f05e63 blez a5,800041a8 + 80004170: 00000493 li s1,0 + 80004174: c54fc0ef jal ra,800005c8 + 80004178: 0005041b sext.w s0,a0 + 8000417c: c4cfc0ef jal ra,800005c8 + 80004180: 0009b783 ld a5,0(s3) + 80004184: 00249693 slli a3,s1,0x2 + 80004188: 0104141b slliw s0,s0,0x10 + 8000418c: 00092703 lw a4,0(s2) + 80004190: 00d787b3 add a5,a5,a3 + 80004194: 00856433 or s0,a0,s0 + 80004198: 00148493 addi s1,s1,1 + 8000419c: 0087a023 sw s0,0(a5) + 800041a0: 0004879b sext.w a5,s1 + 800041a4: fce7c8e3 blt a5,a4,80004174 + 800041a8: 02813083 ld ra,40(sp) + 800041ac: 02013403 ld s0,32(sp) + 800041b0: 01813483 ld s1,24(sp) + 800041b4: 01013903 ld s2,16(sp) + 800041b8: 00813983 ld s3,8(sp) + 800041bc: 03010113 addi sp,sp,48 + 800041c0: 00008067 ret + +00000000800041c4 : + 800041c4: 00004617 auipc a2,0x4 + 800041c8: 8c462603 lw a2,-1852(a2) # 80007a88 + 800041cc: 00000593 li a1,0 + 800041d0: 00004517 auipc a0,0x4 + 800041d4: 8c053503 ld a0,-1856(a0) # 80007a90 + 800041d8: e45ff06f j 8000401c + +00000000800041dc : + 800041dc: 00004597 auipc a1,0x4 + 800041e0: 8ac5a583 lw a1,-1876(a1) # 80007a88 + 800041e4: 00004517 auipc a0,0x4 + 800041e8: 8ac53503 ld a0,-1876(a0) # 80007a90 + 800041ec: 00259593 slli a1,a1,0x2 + 800041f0: ff010113 addi sp,sp,-16 + 800041f4: 00b505b3 add a1,a0,a1 + 800041f8: 00113423 sd ra,8(sp) + 800041fc: c1cfc0ef jal ra,80000618 + 80004200: 00004797 auipc a5,0x4 + 80004204: 8d07b783 ld a5,-1840(a5) # 80007ad0 + 80004208: 0187a783 lw a5,24(a5) + 8000420c: 00813083 ld ra,8(sp) + 80004210: 0005051b sext.w a0,a0 + 80004214: 40a78533 sub a0,a5,a0 + 80004218: 00153513 seqz a0,a0 + 8000421c: 01010113 addi sp,sp,16 + 80004220: 00008067 ret + +0000000080004224 : + 80004224: 00004797 auipc a5,0x4 + 80004228: 8ac7b783 ld a5,-1876(a5) # 80007ad0 + 8000422c: 0007a783 lw a5,0(a5) + 80004230: fe010113 addi sp,sp,-32 + 80004234: 00913423 sd s1,8(sp) + 80004238: 00100513 li a0,1 + 8000423c: 00004497 auipc s1,0x4 + 80004240: 85c48493 addi s1,s1,-1956 # 80007a98 + 80004244: 00f4a023 sw a5,0(s1) + 80004248: 00113c23 sd ra,24(sp) + 8000424c: 01213023 sd s2,0(sp) + 80004250: 00813823 sd s0,16(sp) + 80004254: b60fc0ef jal ra,800005b4 + 80004258: 0004a503 lw a0,0(s1) + 8000425c: 00004917 auipc s2,0x4 + 80004260: 84c90913 addi s2,s2,-1972 # 80007aa8 + 80004264: ab4fc0ef jal ra,80000518 + 80004268: 0004a783 lw a5,0(s1) + 8000426c: 00a93023 sd a0,0(s2) + 80004270: 02f05463 blez a5,80004298 + 80004274: 00000413 li s0,0 + 80004278: b50fc0ef jal ra,800005c8 + 8000427c: 00093783 ld a5,0(s2) + 80004280: 0004a703 lw a4,0(s1) + 80004284: 008787b3 add a5,a5,s0 + 80004288: 00140413 addi s0,s0,1 + 8000428c: 00a78023 sb a0,0(a5) + 80004290: 0004079b sext.w a5,s0 + 80004294: fee7c2e3 blt a5,a4,80004278 + 80004298: 01000513 li a0,16 + 8000429c: a7cfc0ef jal ra,80000518 + 800042a0: 01813083 ld ra,24(sp) + 800042a4: 01013403 ld s0,16(sp) + 800042a8: 00003797 auipc a5,0x3 + 800042ac: 7ea7bc23 sd a0,2040(a5) # 80007aa0 + 800042b0: 00813483 ld s1,8(sp) + 800042b4: 00013903 ld s2,0(sp) + 800042b8: 02010113 addi sp,sp,32 + 800042bc: 00008067 ret + +00000000800042c0 : + 800042c0: 00003697 auipc a3,0x3 + 800042c4: 7d86a683 lw a3,2008(a3) # 80007a98 + 800042c8: f6010113 addi sp,sp,-160 + 800042cc: 00168793 addi a5,a3,1 + 800042d0: 00003f97 auipc t6,0x3 + 800042d4: 7d8fbf83 ld t6,2008(t6) # 80007aa8 + 800042d8: 08813c23 sd s0,152(sp) + 800042dc: 08913823 sd s1,144(sp) + 800042e0: 09213423 sd s2,136(sp) + 800042e4: 09313023 sd s3,128(sp) + 800042e8: 07413c23 sd s4,120(sp) + 800042ec: 07513823 sd s5,112(sp) + 800042f0: 07613423 sd s6,104(sp) + 800042f4: 07713023 sd s7,96(sp) + 800042f8: 05813c23 sd s8,88(sp) + 800042fc: 05913823 sd s9,80(sp) + 80004300: 05a13423 sd s10,72(sp) + 80004304: 05b13023 sd s11,64(sp) + 80004308: 03f7f513 andi a0,a5,63 + 8000430c: 03800593 li a1,56 + 80004310: 00003717 auipc a4,0x3 + 80004314: 79073703 ld a4,1936(a4) # 80007aa0 + 80004318: 00df8633 add a2,t6,a3 + 8000431c: 00078f13 mv t5,a5 + 80004320: 2eb50863 beq a0,a1,80004610 + 80004324: 03800513 li a0,56 + 80004328: 001f0f13 addi t5,t5,1 + 8000432c: 03ff7593 andi a1,t5,63 + 80004330: fea59ce3 bne a1,a0,80004328 + 80004334: f8000593 li a1,-128 + 80004338: 00b60023 sb a1,0(a2) + 8000433c: 2de7fe63 bgeu a5,t5,80004618 + 80004340: 00ff87b3 add a5,t6,a5 + 80004344: 01ef8633 add a2,t6,t5 + 80004348: 00078023 sb zero,0(a5) + 8000434c: 00178793 addi a5,a5,1 + 80004350: fef61ce3 bne a2,a5,80004348 + 80004354: 0036951b slliw a0,a3,0x3 + 80004358: 41d6d593 srai a1,a3,0x1d + 8000435c: 0185581b srliw a6,a0,0x18 + 80004360: 0085531b srliw t1,a0,0x8 + 80004364: 0105589b srliw a7,a0,0x10 + 80004368: 004f0793 addi a5,t5,4 + 8000436c: 00a60023 sb a0,0(a2) + 80004370: 010601a3 sb a6,3(a2) + 80004374: 006600a3 sb t1,1(a2) + 80004378: 01160123 sb a7,2(a2) + 8000437c: 00ff87b3 add a5,t6,a5 + 80004380: 0085d51b srliw a0,a1,0x8 + 80004384: 0105d61b srliw a2,a1,0x10 + 80004388: 0185d59b srliw a1,a1,0x18 + 8000438c: 01d6d693 srli a3,a3,0x1d + 80004390: 00a780a3 sb a0,1(a5) + 80004394: 00c78123 sb a2,2(a5) + 80004398: 00b781a3 sb a1,3(a5) + 8000439c: 10325637 lui a2,0x10325 + 800043a0: 98bae5b7 lui a1,0x98bae + 800043a4: efcdb537 lui a0,0xefcdb + 800043a8: 67452837 lui a6,0x67452 + 800043ac: d76aa3b7 lui t2,0xd76aa + 800043b0: 00d78023 sb a3,0(a5) + 800043b4: 47660613 addi a2,a2,1142 # 10325476 <_entry_offset+0x10325476> + 800043b8: cfe58593 addi a1,a1,-770 # ffffffff98badcfe <_end+0xffffffff18b9dcfe> + 800043bc: b8950513 addi a0,a0,-1143 # ffffffffefcdab89 <_end+0xffffffff6fccab89> + 800043c0: 30180813 addi a6,a6,769 # 67452301 <_entry_offset+0x67452301> + 800043c4: 00000293 li t0,0 + 800043c8: 47838393 addi t2,t2,1144 # ffffffffd76aa478 <_end+0xffffffff5769a478> + 800043cc: 00f00c13 li s8,15 + 800043d0: 01f00b93 li s7,31 + 800043d4: 02f00b13 li s6,47 + 800043d8: 03f00a93 li s5,63 + 800043dc: 005f87b3 add a5,t6,t0 + 800043e0: 00010e13 mv t3,sp + 800043e4: 0017c303 lbu t1,1(a5) + 800043e8: 0007ce83 lbu t4,0(a5) + 800043ec: 0027c883 lbu a7,2(a5) + 800043f0: 0037c683 lbu a3,3(a5) + 800043f4: 00831313 slli t1,t1,0x8 + 800043f8: 01d36333 or t1,t1,t4 + 800043fc: 01089893 slli a7,a7,0x10 + 80004400: 0068e8b3 or a7,a7,t1 + 80004404: 01869693 slli a3,a3,0x18 + 80004408: 0116e6b3 or a3,a3,a7 + 8000440c: 00de2023 sw a3,0(t3) + 80004410: 004e0e13 addi t3,t3,4 + 80004414: 04010693 addi a3,sp,64 + 80004418: 00478793 addi a5,a5,4 + 8000441c: fdc694e3 bne a3,t3,800043e4 + 80004420: 00080793 mv a5,a6 + 80004424: 00038d13 mv s10,t2 + 80004428: 00000e93 li t4,0 + 8000442c: 00002a17 auipc s4,0x2 + 80004430: 4d8a0a13 addi s4,s4,1240 # 80006904 + 80004434: 00002997 auipc s3,0x2 + 80004438: 5d098993 addi s3,s3,1488 # 80006a04 + 8000443c: 00050893 mv a7,a0 + 80004440: 00060e13 mv t3,a2 + 80004444: 00058313 mv t1,a1 + 80004448: 00100913 li s2,1 + 8000444c: 00500493 li s1,5 + 80004450: 00000413 li s0,0 + 80004454: 00700c93 li s9,7 + 80004458: 01a78d3b addw s10,a5,s10 + 8000445c: 09dc7263 bgeu s8,t4,800044e0 + 80004460: 011347b3 xor a5,t1,a7 + 80004464: 01c7f7b3 and a5,a5,t3 + 80004468: 00f347b3 xor a5,t1,a5 + 8000446c: 09dbe663 bltu s7,t4,800044f8 + 80004470: 0007879b sext.w a5,a5 + 80004474: 00f97693 andi a3,s2,15 + 80004478: 02069693 slli a3,a3,0x20 + 8000447c: 01e6d693 srli a3,a3,0x1e + 80004480: 04010d93 addi s11,sp,64 + 80004484: 00dd86b3 add a3,s11,a3 + 80004488: fc06a683 lw a3,-64(a3) + 8000448c: 01a787bb addw a5,a5,s10 + 80004490: 41900d3b negw s10,s9 + 80004494: 00d787bb addw a5,a5,a3 + 80004498: 019796bb sllw a3,a5,s9 + 8000449c: 01a7d7bb srlw a5,a5,s10 + 800044a0: 00f6e6b3 or a3,a3,a5 + 800044a4: 011686bb addw a3,a3,a7 + 800044a8: 000a2d03 lw s10,0(s4) + 800044ac: 000e0793 mv a5,t3 + 800044b0: 001e8e9b addiw t4,t4,1 + 800044b4: 0009ac83 lw s9,0(s3) + 800044b8: 00030e13 mv t3,t1 + 800044bc: 004a0a13 addi s4,s4,4 + 800044c0: 00088313 mv t1,a7 + 800044c4: 00498993 addi s3,s3,4 + 800044c8: 0074041b addiw s0,s0,7 + 800044cc: 0034849b addiw s1,s1,3 + 800044d0: 0059091b addiw s2,s2,5 + 800044d4: 00068893 mv a7,a3 + 800044d8: 01a78d3b addw s10,a5,s10 + 800044dc: f9dc62e3 bltu s8,t4,80004460 + 800044e0: 01c347b3 xor a5,t1,t3 + 800044e4: 0117f7b3 and a5,a5,a7 + 800044e8: 00fe47b3 xor a5,t3,a5 + 800044ec: 0007879b sext.w a5,a5 + 800044f0: 000e8693 mv a3,t4 + 800044f4: f85ff06f j 80004478 + 800044f8: 01c347b3 xor a5,t1,t3 + 800044fc: 0117c7b3 xor a5,a5,a7 + 80004500: 01db6863 bltu s6,t4,80004510 + 80004504: 0007879b sext.w a5,a5 + 80004508: 00f4f693 andi a3,s1,15 + 8000450c: f6dff06f j 80004478 + 80004510: 00f47793 andi a5,s0,15 + 80004514: 04010693 addi a3,sp,64 + 80004518: 00279793 slli a5,a5,0x2 + 8000451c: 00f687b3 add a5,a3,a5 + 80004520: fc07a783 lw a5,-64(a5) + 80004524: fffe4693 not a3,t3 + 80004528: 0116e6b3 or a3,a3,a7 + 8000452c: 0066c6b3 xor a3,a3,t1 + 80004530: 00d787bb addw a5,a5,a3 + 80004534: 01a787bb addw a5,a5,s10 + 80004538: 41900d3b negw s10,s9 + 8000453c: 019796bb sllw a3,a5,s9 + 80004540: 01a7d7bb srlw a5,a5,s10 + 80004544: 00f6e6b3 or a3,a3,a5 + 80004548: 011686bb addw a3,a3,a7 + 8000454c: f55e9ee3 bne t4,s5,800044a8 + 80004550: 04028293 addi t0,t0,64 + 80004554: 010e083b addw a6,t3,a6 + 80004558: 00a6853b addw a0,a3,a0 + 8000455c: 00b885bb addw a1,a7,a1 + 80004560: 00c3063b addw a2,t1,a2 + 80004564: e7e2ece3 bltu t0,t5,800043dc + 80004568: 0088549b srliw s1,a6,0x8 + 8000456c: 0108541b srliw s0,a6,0x10 + 80004570: 0188539b srliw t2,a6,0x18 + 80004574: 0085529b srliw t0,a0,0x8 + 80004578: 01055f9b srliw t6,a0,0x10 + 8000457c: 01855f1b srliw t5,a0,0x18 + 80004580: 0085de9b srliw t4,a1,0x8 + 80004584: 0105de1b srliw t3,a1,0x10 + 80004588: 0185d31b srliw t1,a1,0x18 + 8000458c: 0086589b srliw a7,a2,0x8 + 80004590: 0106569b srliw a3,a2,0x10 + 80004594: 0186579b srliw a5,a2,0x18 + 80004598: 01070023 sb a6,0(a4) + 8000459c: 009700a3 sb s1,1(a4) + 800045a0: 00870123 sb s0,2(a4) + 800045a4: 007701a3 sb t2,3(a4) + 800045a8: 00a70223 sb a0,4(a4) + 800045ac: 005702a3 sb t0,5(a4) + 800045b0: 01f70323 sb t6,6(a4) + 800045b4: 01e703a3 sb t5,7(a4) + 800045b8: 00b70423 sb a1,8(a4) + 800045bc: 01d704a3 sb t4,9(a4) + 800045c0: 01c70523 sb t3,10(a4) + 800045c4: 006705a3 sb t1,11(a4) + 800045c8: 00c70623 sb a2,12(a4) + 800045cc: 011706a3 sb a7,13(a4) + 800045d0: 00d70723 sb a3,14(a4) + 800045d4: 00f707a3 sb a5,15(a4) + 800045d8: 09813403 ld s0,152(sp) + 800045dc: 09013483 ld s1,144(sp) + 800045e0: 08813903 ld s2,136(sp) + 800045e4: 08013983 ld s3,128(sp) + 800045e8: 07813a03 ld s4,120(sp) + 800045ec: 07013a83 ld s5,112(sp) + 800045f0: 06813b03 ld s6,104(sp) + 800045f4: 06013b83 ld s7,96(sp) + 800045f8: 05813c03 ld s8,88(sp) + 800045fc: 05013c83 ld s9,80(sp) + 80004600: 04813d03 ld s10,72(sp) + 80004604: 04013d83 ld s11,64(sp) + 80004608: 0a010113 addi sp,sp,160 + 8000460c: 00008067 ret + 80004610: f8000793 li a5,-128 + 80004614: 00f60023 sb a5,0(a2) + 80004618: 01ef8633 add a2,t6,t5 + 8000461c: d39ff06f j 80004354 + +0000000080004620 : + 80004620: 00003517 auipc a0,0x3 + 80004624: 48053503 ld a0,1152(a0) # 80007aa0 + 80004628: ff010113 addi sp,sp,-16 + 8000462c: 01050593 addi a1,a0,16 + 80004630: 00113423 sd ra,8(sp) + 80004634: fe5fb0ef jal ra,80000618 + 80004638: 00003797 auipc a5,0x3 + 8000463c: 4987b783 ld a5,1176(a5) # 80007ad0 + 80004640: 0187a783 lw a5,24(a5) + 80004644: 00813083 ld ra,8(sp) + 80004648: 0005051b sext.w a0,a0 + 8000464c: 40a78533 sub a0,a5,a0 + 80004650: 00153513 seqz a0,a0 + 80004654: 01010113 addi sp,sp,16 + 80004658: 00008067 ret + +000000008000465c : + 8000465c: 00003797 auipc a5,0x3 + 80004660: 4747b783 ld a5,1140(a5) # 80007ad0 + 80004664: 0007a783 lw a5,0(a5) + 80004668: ff010113 addi sp,sp,-16 + 8000466c: 00813023 sd s0,0(sp) + 80004670: 41f7d51b sraiw a0,a5,0x1f + 80004674: 01d5551b srliw a0,a0,0x1d + 80004678: 00f5053b addw a0,a0,a5 + 8000467c: 4035551b sraiw a0,a0,0x3 + 80004680: 00003417 auipc s0,0x3 + 80004684: 43040413 addi s0,s0,1072 # 80007ab0 + 80004688: 0805051b addiw a0,a0,128 + 8000468c: 00f42023 sw a5,0(s0) + 80004690: 00113423 sd ra,8(sp) + 80004694: e85fb0ef jal ra,80000518 + 80004698: 00042783 lw a5,0(s0) + 8000469c: 00003717 auipc a4,0x3 + 800046a0: 40a73e23 sd a0,1052(a4) # 80007ab8 + 800046a4: fe100693 li a3,-31 + 800046a8: 41f7d71b sraiw a4,a5,0x1f + 800046ac: 01b7571b srliw a4,a4,0x1b + 800046b0: 00f7073b addw a4,a4,a5 + 800046b4: 02d7c063 blt a5,a3,800046d4 + 800046b8: 4057571b sraiw a4,a4,0x5 + 800046bc: 00000793 li a5,0 + 800046c0: fff00693 li a3,-1 + 800046c4: 00d52023 sw a3,0(a0) + 800046c8: 0017879b addiw a5,a5,1 + 800046cc: 00450513 addi a0,a0,4 + 800046d0: fef75ae3 bge a4,a5,800046c4 + 800046d4: 00813083 ld ra,8(sp) + 800046d8: 00013403 ld s0,0(sp) + 800046dc: 01010113 addi sp,sp,16 + 800046e0: 00008067 ret + +00000000800046e4 : + 800046e4: fd010113 addi sp,sp,-48 + 800046e8: 00913c23 sd s1,24(sp) + 800046ec: 02113423 sd ra,40(sp) + 800046f0: 02813023 sd s0,32(sp) + 800046f4: 01213823 sd s2,16(sp) + 800046f8: 01313423 sd s3,8(sp) + 800046fc: 00003497 auipc s1,0x3 + 80004700: 3b44a483 lw s1,948(s1) # 80007ab0 + 80004704: 14905463 blez s1,8000484c + 80004708: 00003617 auipc a2,0x3 + 8000470c: 3b060613 addi a2,a2,944 # 80007ab8 + 80004710: 00063683 ld a3,0(a2) + 80004714: 0006a783 lw a5,0(a3) + 80004718: 0017d79b srliw a5,a5,0x1 + 8000471c: 0017f793 andi a5,a5,1 + 80004720: 00079c63 bnez a5,80004738 + 80004724: 10c0006f j 80004830 + 80004728: 00072703 lw a4,0(a4) + 8000472c: 00f7573b srlw a4,a4,a5 + 80004730: 00177713 andi a4,a4,1 + 80004734: 0e070e63 beqz a4,80004830 + 80004738: 0017879b addiw a5,a5,1 + 8000473c: 4057d71b sraiw a4,a5,0x5 + 80004740: 00271713 slli a4,a4,0x2 + 80004744: 00e68733 add a4,a3,a4 + 80004748: fef4d0e3 bge s1,a5,80004728 + 8000474c: 00300793 li a5,3 + 80004750: 0e97de63 bge a5,s1,8000484c + 80004754: 00063903 ld s2,0(a2) + 80004758: 00200413 li s0,2 + 8000475c: 00100993 li s3,1 + 80004760: 01c0006f j 8000477c + 80004764: 0014041b addiw s0,s0,1 + 80004768: 00040593 mv a1,s0 + 8000476c: 00040513 mv a0,s0 + 80004770: 16c000ef jal ra,800048dc <__muldi3> + 80004774: 0005051b sext.w a0,a0 + 80004778: 06a4c663 blt s1,a0,800047e4 + 8000477c: 40545793 srai a5,s0,0x5 + 80004780: 00279793 slli a5,a5,0x2 + 80004784: 00f907b3 add a5,s2,a5 + 80004788: 0007a783 lw a5,0(a5) + 8000478c: 0087d7bb srlw a5,a5,s0 + 80004790: 0017f793 andi a5,a5,1 + 80004794: fc0788e3 beqz a5,80004764 + 80004798: 0014169b slliw a3,s0,0x1 + 8000479c: fcd4c4e3 blt s1,a3,80004764 + 800047a0: 4056d713 srai a4,a3,0x5 + 800047a4: 00271713 slli a4,a4,0x2 + 800047a8: 00e90733 add a4,s2,a4 + 800047ac: 00072603 lw a2,0(a4) + 800047b0: 01f6f793 andi a5,a3,31 + 800047b4: 00f997b3 sll a5,s3,a5 + 800047b8: fff7c793 not a5,a5 + 800047bc: 00c7f7b3 and a5,a5,a2 + 800047c0: 00f72023 sw a5,0(a4) + 800047c4: 00d406bb addw a3,s0,a3 + 800047c8: fcd4dce3 bge s1,a3,800047a0 + 800047cc: 0014041b addiw s0,s0,1 + 800047d0: 00040593 mv a1,s0 + 800047d4: 00040513 mv a0,s0 + 800047d8: 104000ef jal ra,800048dc <__muldi3> + 800047dc: 0005051b sext.w a0,a0 + 800047e0: f8a4dee3 bge s1,a0,8000477c + 800047e4: 00003797 auipc a5,0x3 + 800047e8: 2c07a823 sw zero,720(a5) # 80007ab4 + 800047ec: 00000613 li a2,0 + 800047f0: 00000693 li a3,0 + 800047f4: 00200713 li a4,2 + 800047f8: 40575793 srai a5,a4,0x5 + 800047fc: 00279793 slli a5,a5,0x2 + 80004800: 00f907b3 add a5,s2,a5 + 80004804: 0007a783 lw a5,0(a5) + 80004808: 00e7d7bb srlw a5,a5,a4 + 8000480c: 0017f793 andi a5,a5,1 + 80004810: 0017071b addiw a4,a4,1 + 80004814: 00078663 beqz a5,80004820 + 80004818: 0016869b addiw a3,a3,1 + 8000481c: 00100613 li a2,1 + 80004820: fce4dce3 bge s1,a4,800047f8 + 80004824: 00060663 beqz a2,80004830 + 80004828: 00003797 auipc a5,0x3 + 8000482c: 28d7a623 sw a3,652(a5) # 80007ab4 + 80004830: 02813083 ld ra,40(sp) + 80004834: 02013403 ld s0,32(sp) + 80004838: 01813483 ld s1,24(sp) + 8000483c: 01013903 ld s2,16(sp) + 80004840: 00813983 ld s3,8(sp) + 80004844: 03010113 addi sp,sp,48 + 80004848: 00008067 ret + 8000484c: 00003797 auipc a5,0x3 + 80004850: 2607a423 sw zero,616(a5) # 80007ab4 + 80004854: 00100793 li a5,1 + 80004858: fc97dce3 bge a5,s1,80004830 + 8000485c: 00003917 auipc s2,0x3 + 80004860: 25c93903 ld s2,604(s2) # 80007ab8 + 80004864: f89ff06f j 800047ec + +0000000080004868 : + 80004868: 00003797 auipc a5,0x3 + 8000486c: 2687b783 ld a5,616(a5) # 80007ad0 + 80004870: 0187a503 lw a0,24(a5) + 80004874: 00003797 auipc a5,0x3 + 80004878: 2407a783 lw a5,576(a5) # 80007ab4 + 8000487c: 40f50533 sub a0,a0,a5 + 80004880: 00153513 seqz a0,a0 + 80004884: 00008067 ret + +0000000080004888 : + 80004888: 00050513 mv a0,a0 + 8000488c: 0000007b 0x7b + 80004890: 00008067 ret + +0000000080004894 : + 80004894: 00050513 mv a0,a0 + 80004898: 0000006b 0x6b + 8000489c: 0000006f j 8000489c + +00000000800048a0 <_assert>: + 800048a0: 00051a63 bnez a0,800048b4 <_assert+0x14> + 800048a4: 00100793 li a5,1 + 800048a8: 00078513 mv a0,a5 + 800048ac: 0000006b 0x6b + 800048b0: 0000006f j 800048b0 <_assert+0x10> + 800048b4: 00008067 ret + +00000000800048b8 <_trm_init>: + 800048b8: ff010113 addi sp,sp,-16 + 800048bc: 00113423 sd ra,8(sp) + 800048c0: 5b8000ef jal ra,80004e78 + 800048c4: 00002517 auipc a0,0x2 + 800048c8: 51c50513 addi a0,a0,1308 # 80006de0 + 800048cc: 831fb0ef jal ra,800000fc
+ 800048d0: 00050513 mv a0,a0 + 800048d4: 0000006b 0x6b + 800048d8: 0000006f j 800048d8 <_trm_init+0x20> + +00000000800048dc <__muldi3>: + 800048dc: 00050613 mv a2,a0 + 800048e0: 00000513 li a0,0 + 800048e4: 0015f693 andi a3,a1,1 + 800048e8: 00068463 beqz a3,800048f0 <__muldi3+0x14> + 800048ec: 00c50533 add a0,a0,a2 + 800048f0: 0015d593 srli a1,a1,0x1 + 800048f4: 00161613 slli a2,a2,0x1 + 800048f8: fe0596e3 bnez a1,800048e4 <__muldi3+0x8> + 800048fc: 00008067 ret + +0000000080004900 <__udivsi3>: + 80004900: 02051513 slli a0,a0,0x20 + 80004904: 02059593 slli a1,a1,0x20 + 80004908: 00008293 mv t0,ra + 8000490c: 03c000ef jal ra,80004948 <__udivdi3> + 80004910: 0005051b sext.w a0,a0 + 80004914: 00028067 jr t0 + +0000000080004918 <__umodsi3>: + 80004918: 02051513 slli a0,a0,0x20 + 8000491c: 02059593 slli a1,a1,0x20 + 80004920: 02055513 srli a0,a0,0x20 + 80004924: 0205d593 srli a1,a1,0x20 + 80004928: 00008293 mv t0,ra + 8000492c: 01c000ef jal ra,80004948 <__udivdi3> + 80004930: 0005851b sext.w a0,a1 + 80004934: 00028067 jr t0 + +0000000080004938 <__divsi3>: + 80004938: fff00293 li t0,-1 + 8000493c: 0a558c63 beq a1,t0,800049f4 <__moddi3+0x30> + +0000000080004940 <__divdi3>: + 80004940: 06054063 bltz a0,800049a0 <__umoddi3+0x10> + 80004944: 0605c663 bltz a1,800049b0 <__umoddi3+0x20> + +0000000080004948 <__udivdi3>: + 80004948: 00058613 mv a2,a1 + 8000494c: 00050593 mv a1,a0 + 80004950: fff00513 li a0,-1 + 80004954: 02060c63 beqz a2,8000498c <__udivdi3+0x44> + 80004958: 00100693 li a3,1 + 8000495c: 00b67a63 bgeu a2,a1,80004970 <__udivdi3+0x28> + 80004960: 00c05863 blez a2,80004970 <__udivdi3+0x28> + 80004964: 00161613 slli a2,a2,0x1 + 80004968: 00169693 slli a3,a3,0x1 + 8000496c: feb66ae3 bltu a2,a1,80004960 <__udivdi3+0x18> + 80004970: 00000513 li a0,0 + 80004974: 00c5e663 bltu a1,a2,80004980 <__udivdi3+0x38> + 80004978: 40c585b3 sub a1,a1,a2 + 8000497c: 00d56533 or a0,a0,a3 + 80004980: 0016d693 srli a3,a3,0x1 + 80004984: 00165613 srli a2,a2,0x1 + 80004988: fe0696e3 bnez a3,80004974 <__udivdi3+0x2c> + 8000498c: 00008067 ret + +0000000080004990 <__umoddi3>: + 80004990: 00008293 mv t0,ra + 80004994: fb5ff0ef jal ra,80004948 <__udivdi3> + 80004998: 00058513 mv a0,a1 + 8000499c: 00028067 jr t0 + 800049a0: 40a00533 neg a0,a0 + 800049a4: 00b04863 bgtz a1,800049b4 <__umoddi3+0x24> + 800049a8: 40b005b3 neg a1,a1 + 800049ac: f9dff06f j 80004948 <__udivdi3> + 800049b0: 40b005b3 neg a1,a1 + 800049b4: 00008293 mv t0,ra + 800049b8: f91ff0ef jal ra,80004948 <__udivdi3> + 800049bc: 40a00533 neg a0,a0 + 800049c0: 00028067 jr t0 + +00000000800049c4 <__moddi3>: + 800049c4: 00008293 mv t0,ra + 800049c8: 0005ca63 bltz a1,800049dc <__moddi3+0x18> + 800049cc: 00054c63 bltz a0,800049e4 <__moddi3+0x20> + 800049d0: f79ff0ef jal ra,80004948 <__udivdi3> + 800049d4: 00058513 mv a0,a1 + 800049d8: 00028067 jr t0 + 800049dc: 40b005b3 neg a1,a1 + 800049e0: fe0558e3 bgez a0,800049d0 <__moddi3+0xc> + 800049e4: 40a00533 neg a0,a0 + 800049e8: f61ff0ef jal ra,80004948 <__udivdi3> + 800049ec: 40b00533 neg a0,a1 + 800049f0: 00028067 jr t0 + 800049f4: 01f29293 slli t0,t0,0x1f + 800049f8: f45514e3 bne a0,t0,80004940 <__divdi3> + 800049fc: 00008067 ret + +0000000080004a00 <__am_timer_config>: + 80004a00: 00100793 li a5,1 + 80004a04: 00f50023 sb a5,0(a0) + 80004a08: 00f500a3 sb a5,1(a0) + 80004a0c: 00008067 ret + +0000000080004a10 <__am_input_config>: + 80004a10: 00100793 li a5,1 + 80004a14: 00f50023 sb a5,0(a0) + 80004a18: 00008067 ret + +0000000080004a1c : + 80004a1c: ff010113 addi sp,sp,-16 + 80004a20: 00813023 sd s0,0(sp) + 80004a24: 00113423 sd ra,8(sp) + 80004a28: 00002417 auipc s0,0x2 + 80004a2c: 0d840413 addi s0,s0,216 # 80006b00 + 80004a30: 04100513 li a0,65 + 80004a34: 00140413 addi s0,s0,1 + 80004a38: e51ff0ef jal ra,80004888 + 80004a3c: 00044503 lbu a0,0(s0) + 80004a40: fe051ae3 bnez a0,80004a34 + 80004a44: 00002417 auipc s0,0x2 + 80004a48: 0cc40413 addi s0,s0,204 # 80006b10 + 80004a4c: 06100513 li a0,97 + 80004a50: 00140413 addi s0,s0,1 + 80004a54: e35ff0ef jal ra,80004888 + 80004a58: 00044503 lbu a0,0(s0) + 80004a5c: fe051ae3 bnez a0,80004a50 + 80004a60: 00002417 auipc s0,0x2 + 80004a64: 0d040413 addi s0,s0,208 # 80006b30 + 80004a68: 02000513 li a0,32 + 80004a6c: 00140413 addi s0,s0,1 + 80004a70: e19ff0ef jal ra,80004888 + 80004a74: 00044503 lbu a0,0(s0) + 80004a78: fe051ae3 bnez a0,80004a6c + 80004a7c: 00100513 li a0,1 + 80004a80: e15ff0ef jal ra,80004894 + +0000000080004a84 : + 80004a84: ff010113 addi sp,sp,-16 + 80004a88: 00113423 sd ra,8(sp) + 80004a8c: 00003797 auipc a5,0x3 + 80004a90: b0c78793 addi a5,a5,-1268 # 80007598 + 80004a94: 00003697 auipc a3,0x3 + 80004a98: f0468693 addi a3,a3,-252 # 80007998 + 80004a9c: 00000617 auipc a2,0x0 + 80004aa0: f8060613 addi a2,a2,-128 # 80004a1c + 80004aa4: 00c0006f j 80004ab0 + 80004aa8: 00878793 addi a5,a5,8 + 80004aac: 00d78c63 beq a5,a3,80004ac4 + 80004ab0: 0007b703 ld a4,0(a5) + 80004ab4: fe071ae3 bnez a4,80004aa8 + 80004ab8: 00c7b023 sd a2,0(a5) + 80004abc: 00878793 addi a5,a5,8 + 80004ac0: fed798e3 bne a5,a3,80004ab0 + 80004ac4: 030000ef jal ra,80004af4 <__am_timer_init> + 80004ac8: 00813083 ld ra,8(sp) + 80004acc: 00100513 li a0,1 + 80004ad0: 01010113 addi sp,sp,16 + 80004ad4: 00008067 ret + +0000000080004ad8 : + 80004ad8: 00351793 slli a5,a0,0x3 + 80004adc: 00003517 auipc a0,0x3 + 80004ae0: abc50513 addi a0,a0,-1348 # 80007598 + 80004ae4: 00f50533 add a0,a0,a5 + 80004ae8: 00053303 ld t1,0(a0) + 80004aec: 00058513 mv a0,a1 + 80004af0: 00030067 jr t1 + +0000000080004af4 <__am_timer_init>: + 80004af4: 00008067 ret + +0000000080004af8 <__am_timer_uptime>: + 80004af8: fd010113 addi sp,sp,-48 + 80004afc: 00913c23 sd s1,24(sp) + 80004b00: 02113423 sd ra,40(sp) + 80004b04: 02813023 sd s0,32(sp) + 80004b08: 01213823 sd s2,16(sp) + 80004b0c: 01313423 sd s3,8(sp) + 80004b10: 00050493 mv s1,a0 + 80004b14: b0002973 csrr s2,mcycle + 80004b18: 000f49b7 lui s3,0xf4 + 80004b1c: 24098593 addi a1,s3,576 # f4240 <_entry_offset+0xf4240> + 80004b20: 00090513 mv a0,s2 + 80004b24: e25ff0ef jal ra,80004948 <__udivdi3> + 80004b28: 00551413 slli s0,a0,0x5 + 80004b2c: 40a407b3 sub a5,s0,a0 + 80004b30: 00679413 slli s0,a5,0x6 + 80004b34: 40f40433 sub s0,s0,a5 + 80004b38: 00341413 slli s0,s0,0x3 + 80004b3c: 00a40433 add s0,s0,a0 + 80004b40: 24098593 addi a1,s3,576 + 80004b44: 00090513 mv a0,s2 + 80004b48: e49ff0ef jal ra,80004990 <__umoddi3> + 80004b4c: 00641413 slli s0,s0,0x6 + 80004b50: 00a40433 add s0,s0,a0 + 80004b54: 0084b023 sd s0,0(s1) + 80004b58: 02813083 ld ra,40(sp) + 80004b5c: 02013403 ld s0,32(sp) + 80004b60: 01813483 ld s1,24(sp) + 80004b64: 01013903 ld s2,16(sp) + 80004b68: 00813983 ld s3,8(sp) + 80004b6c: 03010113 addi sp,sp,48 + 80004b70: 00008067 ret + +0000000080004b74 : + 80004b74: fc010113 addi sp,sp,-64 + 80004b78: 01313c23 sd s3,24(sp) + 80004b7c: 00058993 mv s3,a1 + 80004b80: 00050793 mv a5,a0 + 80004b84: 03800613 li a2,56 + 80004b88: 00000593 li a1,0 + 80004b8c: 00098513 mv a0,s3 + 80004b90: 02813823 sd s0,48(sp) + 80004b94: 03213023 sd s2,32(sp) + 80004b98: 0007b403 ld s0,0(a5) + 80004b9c: 01413823 sd s4,16(sp) + 80004ba0: 02113c23 sd ra,56(sp) + 80004ba4: 02913423 sd s1,40(sp) + 80004ba8: 01513423 sd s5,8(sp) + 80004bac: 434010ef jal ra,80005fe0 + 80004bb0: 7b200793 li a5,1970 + 80004bb4: 00f9aa23 sw a5,20(s3) + 80004bb8: 7b200913 li s2,1970 + 80004bbc: 00002a17 auipc s4,0x2 + 80004bc0: 22ca0a13 addi s4,s4,556 # 80006de8 + 80004bc4: 0100006f j 80004bd4 + 80004bc8: 40e40433 sub s0,s0,a4 + 80004bcc: 00d9aa23 sw a3,20(s3) + 80004bd0: 00068913 mv s2,a3 + 80004bd4: 0009049b sext.w s1,s2 + 80004bd8: 06400593 li a1,100 + 80004bdc: 00048513 mv a0,s1 + 80004be0: de5ff0ef jal ra,800049c4 <__moddi3> + 80004be4: 00050793 mv a5,a0 + 80004be8: 0007879b sext.w a5,a5 + 80004bec: 00048513 mv a0,s1 + 80004bf0: 00397493 andi s1,s2,3 + 80004bf4: 19000593 li a1,400 + 80004bf8: 0014b493 seqz s1,s1 + 80004bfc: 00079863 bnez a5,80004c0c + 80004c00: dc5ff0ef jal ra,800049c4 <__moddi3> + 80004c04: 0005049b sext.w s1,a0 + 80004c08: 0014b493 seqz s1,s1 + 80004c0c: 00249793 slli a5,s1,0x2 + 80004c10: 00fa07b3 add a5,s4,a5 + 80004c14: 0007e703 lwu a4,0(a5) + 80004c18: 0019069b addiw a3,s2,1 + 80004c1c: fae456e3 bge s0,a4,80004bc8 + 80004c20: 000155b7 lui a1,0x15 + 80004c24: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80004c28: 00040513 mv a0,s0 + 80004c2c: d15ff0ef jal ra,80004940 <__divdi3> + 80004c30: 00149793 slli a5,s1,0x1 + 80004c34: 009784b3 add s1,a5,s1 + 80004c38: 00449793 slli a5,s1,0x4 + 80004c3c: 00002497 auipc s1,0x2 + 80004c40: f3448493 addi s1,s1,-204 # 80006b70 + 80004c44: 00f484b3 add s1,s1,a5 + 80004c48: 0004e783 lwu a5,0(s1) + 80004c4c: 0005051b sext.w a0,a0 + 80004c50: 00a9ae23 sw a0,28(s3) + 80004c54: 14f44463 blt s0,a5,80004d9c + 80004c58: 00100713 li a4,1 + 80004c5c: 40f40433 sub s0,s0,a5 + 80004c60: 0044e783 lwu a5,4(s1) + 80004c64: 00070a1b sext.w s4,a4 + 80004c68: 00448493 addi s1,s1,4 + 80004c6c: 00170713 addi a4,a4,1 + 80004c70: fef456e3 bge s0,a5,80004c5c + 80004c74: 000155b7 lui a1,0x15 + 80004c78: 0149a823 sw s4,16(s3) + 80004c7c: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80004c80: 00040513 mv a0,s0 + 80004c84: cbdff0ef jal ra,80004940 <__divdi3> + 80004c88: 0005051b sext.w a0,a0 + 80004c8c: 0015079b addiw a5,a0,1 + 80004c90: 000155b7 lui a1,0x15 + 80004c94: 00f9a623 sw a5,12(s3) + 80004c98: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80004c9c: 00040513 mv a0,s0 + 80004ca0: 00001ab7 lui s5,0x1 + 80004ca4: 0007841b sext.w s0,a5 + 80004ca8: d1dff0ef jal ra,800049c4 <__moddi3> + 80004cac: e10a8593 addi a1,s5,-496 # e10 <_entry_offset+0xe10> + 80004cb0: 00050493 mv s1,a0 + 80004cb4: c8dff0ef jal ra,80004940 <__divdi3> + 80004cb8: e10a8593 addi a1,s5,-496 + 80004cbc: 00a9a423 sw a0,8(s3) + 80004cc0: 00048513 mv a0,s1 + 80004cc4: d01ff0ef jal ra,800049c4 <__moddi3> + 80004cc8: 03c00593 li a1,60 + 80004ccc: 00050493 mv s1,a0 + 80004cd0: c71ff0ef jal ra,80004940 <__divdi3> + 80004cd4: 00a9a223 sw a0,4(s3) + 80004cd8: 03c00593 li a1,60 + 80004cdc: 00048513 mv a0,s1 + 80004ce0: ce5ff0ef jal ra,800049c4 <__moddi3> + 80004ce4: 001a0a1b addiw s4,s4,1 + 80004ce8: 0ffa7793 andi a5,s4,255 + 80004cec: 0037b793 sltiu a5,a5,3 + 80004cf0: 40f9093b subw s2,s2,a5 + 80004cf4: 03091913 slli s2,s2,0x30 + 80004cf8: 03095913 srli s2,s2,0x30 + 80004cfc: 00a9a023 sw a0,0(s3) + 80004d00: 06400593 li a1,100 + 80004d04: 00090513 mv a0,s2 + 80004d08: c41ff0ef jal ra,80004948 <__udivdi3> + 80004d0c: 0029549b srliw s1,s2,0x2 + 80004d10: 0105179b slliw a5,a0,0x10 + 80004d14: 0107d79b srliw a5,a5,0x10 + 80004d18: 012484bb addw s1,s1,s2 + 80004d1c: 19000593 li a1,400 + 80004d20: 00090513 mv a0,s2 + 80004d24: 0ffa7a13 andi s4,s4,255 + 80004d28: 40f484bb subw s1,s1,a5 + 80004d2c: fffa0a1b addiw s4,s4,-1 + 80004d30: c19ff0ef jal ra,80004948 <__udivdi3> + 80004d34: 00002797 auipc a5,0x2 + 80004d38: e9c78793 addi a5,a5,-356 # 80006bd0 + 80004d3c: 002a1a13 slli s4,s4,0x2 + 80004d40: 01478a33 add s4,a5,s4 + 80004d44: 000a2783 lw a5,0(s4) + 80004d48: 0105151b slliw a0,a0,0x10 + 80004d4c: 0105551b srliw a0,a0,0x10 + 80004d50: 00a484bb addw s1,s1,a0 + 80004d54: 00f484bb addw s1,s1,a5 + 80004d58: 0ff47513 andi a0,s0,255 + 80004d5c: 00a4853b addw a0,s1,a0 + 80004d60: 00700593 li a1,7 + 80004d64: c61ff0ef jal ra,800049c4 <__moddi3> + 80004d68: 03813083 ld ra,56(sp) + 80004d6c: 03013403 ld s0,48(sp) + 80004d70: 0ff57513 andi a0,a0,255 + 80004d74: 00a9ac23 sw a0,24(s3) + 80004d78: 0209a023 sw zero,32(s3) + 80004d7c: 02813483 ld s1,40(sp) + 80004d80: 02013903 ld s2,32(sp) + 80004d84: 01013a03 ld s4,16(sp) + 80004d88: 00813a83 ld s5,8(sp) + 80004d8c: 00098513 mv a0,s3 + 80004d90: 01813983 ld s3,24(sp) + 80004d94: 04010113 addi sp,sp,64 + 80004d98: 00008067 ret + 80004d9c: 00000a13 li s4,0 + 80004da0: eedff06f j 80004c8c + +0000000080004da4 <__am_timer_rtc>: + 80004da4: f9010113 addi sp,sp,-112 + 80004da8: 06813023 sd s0,96(sp) + 80004dac: 06113423 sd ra,104(sp) + 80004db0: 04913c23 sd s1,88(sp) + 80004db4: 05213823 sd s2,80(sp) + 80004db8: 00050413 mv s0,a0 + 80004dbc: b00024f3 csrr s1,mcycle + 80004dc0: 000f4937 lui s2,0xf4 + 80004dc4: 24090593 addi a1,s2,576 # f4240 <_entry_offset+0xf4240> + 80004dc8: 00048513 mv a0,s1 + 80004dcc: b7dff0ef jal ra,80004948 <__udivdi3> + 80004dd0: 00050793 mv a5,a0 + 80004dd4: 24090593 addi a1,s2,576 + 80004dd8: 00048513 mv a0,s1 + 80004ddc: 00f13423 sd a5,8(sp) + 80004de0: bb1ff0ef jal ra,80004990 <__umoddi3> + 80004de4: 00050793 mv a5,a0 + 80004de8: 01810593 addi a1,sp,24 + 80004dec: 00810513 addi a0,sp,8 + 80004df0: 00f13823 sd a5,16(sp) + 80004df4: d81ff0ef jal ra,80004b74 + 80004df8: 01812703 lw a4,24(sp) + 80004dfc: 02812783 lw a5,40(sp) + 80004e00: 06813083 ld ra,104(sp) + 80004e04: 00e42a23 sw a4,20(s0) + 80004e08: 01c12703 lw a4,28(sp) + 80004e0c: 0017879b addiw a5,a5,1 + 80004e10: 00f42223 sw a5,4(s0) + 80004e14: 00e42823 sw a4,16(s0) + 80004e18: 02012703 lw a4,32(sp) + 80004e1c: 02c12783 lw a5,44(sp) + 80004e20: 05813483 ld s1,88(sp) + 80004e24: 00e42623 sw a4,12(s0) + 80004e28: 02412703 lw a4,36(sp) + 80004e2c: 00f42023 sw a5,0(s0) + 80004e30: 05013903 ld s2,80(sp) + 80004e34: 00e42423 sw a4,8(s0) + 80004e38: 06013403 ld s0,96(sp) + 80004e3c: 07010113 addi sp,sp,112 + 80004e40: 00008067 ret + +0000000080004e44 <__am_input_keybrd>: + 80004e44: 00050023 sb zero,0(a0) + 80004e48: 00052223 sw zero,4(a0) + 80004e4c: 00008067 ret + +0000000080004e50 : + 80004e50: 00054783 lbu a5,0(a0) + 80004e54: 00158593 addi a1,a1,1 + 80004e58: 00150513 addi a0,a0,1 + 80004e5c: fff5c703 lbu a4,-1(a1) + 80004e60: 00078863 beqz a5,80004e70 + 80004e64: fee786e3 beq a5,a4,80004e50 + 80004e68: 40e7853b subw a0,a5,a4 + 80004e6c: 00008067 ret + 80004e70: 40e0053b negw a0,a4 + 80004e74: 00008067 ret + +0000000080004e78 : + 80004e78: 00002797 auipc a5,0x2 + 80004e7c: 71078793 addi a5,a5,1808 # 80007588 + 80004e80: 0007b503 ld a0,0(a5) + 80004e84: 0087b583 ld a1,8(a5) + 80004e88: ff010113 addi sp,sp,-16 + 80004e8c: 00000693 li a3,0 + 80004e90: 00000613 li a2,0 + 80004e94: 40a585b3 sub a1,a1,a0 + 80004e98: 00113423 sd ra,8(sp) + 80004e9c: 224010ef jal ra,800060c0 + 80004ea0: 00813083 ld ra,8(sp) + 80004ea4: 00003797 auipc a5,0x3 + 80004ea8: c0a7be23 sd a0,-996(a5) # 80007ac0 + 80004eac: 01010113 addi sp,sp,16 + 80004eb0: 00008067 ret + +0000000080004eb4 <_out_buffer>: + 80004eb4: 00d67663 bgeu a2,a3,80004ec0 <_out_buffer+0xc> + 80004eb8: 00c585b3 add a1,a1,a2 + 80004ebc: 00a58023 sb a0,0(a1) + 80004ec0: 00008067 ret + +0000000080004ec4 <_out_null>: + 80004ec4: 00008067 ret + +0000000080004ec8 <_ntoa_format>: + 80004ec8: fa010113 addi sp,sp,-96 + 80004ecc: 07012303 lw t1,112(sp) + 80004ed0: 03313c23 sd s3,56(sp) + 80004ed4: 03413823 sd s4,48(sp) + 80004ed8: 03513423 sd s5,40(sp) + 80004edc: 03613023 sd s6,32(sp) + 80004ee0: 01713c23 sd s7,24(sp) + 80004ee4: 01813823 sd s8,16(sp) + 80004ee8: 01913423 sd s9,8(sp) + 80004eec: 00237e13 andi t3,t1,2 + 80004ef0: 01037e93 andi t4,t1,16 + 80004ef4: 04113c23 sd ra,88(sp) + 80004ef8: 04813823 sd s0,80(sp) + 80004efc: 04913423 sd s1,72(sp) + 80004f00: 05213023 sd s2,64(sp) + 80004f04: 06012f03 lw t5,96(sp) + 80004f08: 06812c03 lw s8,104(sp) + 80004f0c: 00050a13 mv s4,a0 + 80004f10: 00058a93 mv s5,a1 + 80004f14: 00060b93 mv s7,a2 + 80004f18: 00068b13 mv s6,a3 + 80004f1c: 00070993 mv s3,a4 + 80004f20: 000e0c9b sext.w s9,t3 + 80004f24: 000e8e9b sext.w t4,t4 + 80004f28: 060e1c63 bnez t3,80004fa0 <_ntoa_format+0xd8> + 80004f2c: 020f1693 slli a3,t5,0x20 + 80004f30: 00137513 andi a0,t1,1 + 80004f34: 0206d693 srli a3,a3,0x20 + 80004f38: 180c1e63 bnez s8,800050d4 <_ntoa_format+0x20c> + 80004f3c: 02d7f663 bgeu a5,a3,80004f68 <_ntoa_format+0xa0> + 80004f40: 02000713 li a4,32 + 80004f44: 36e78e63 beq a5,a4,800052c0 <_ntoa_format+0x3f8> + 80004f48: 03000613 li a2,48 + 80004f4c: 02000593 li a1,32 + 80004f50: 0080006f j 80004f58 <_ntoa_format+0x90> + 80004f54: 00b78a63 beq a5,a1,80004f68 <_ntoa_format+0xa0> + 80004f58: 00178793 addi a5,a5,1 + 80004f5c: 00f98733 add a4,s3,a5 + 80004f60: fec70fa3 sb a2,-1(a4) + 80004f64: fed7e8e3 bltu a5,a3,80004f54 <_ntoa_format+0x8c> + 80004f68: 02050c63 beqz a0,80004fa0 <_ntoa_format+0xd8> + 80004f6c: 020c1913 slli s2,s8,0x20 + 80004f70: 02095913 srli s2,s2,0x20 + 80004f74: 0327f663 bgeu a5,s2,80004fa0 <_ntoa_format+0xd8> + 80004f78: 02000713 li a4,32 + 80004f7c: 36e78863 beq a5,a4,800052ec <_ntoa_format+0x424> + 80004f80: 03000693 li a3,48 + 80004f84: 02000613 li a2,32 + 80004f88: 0080006f j 80004f90 <_ntoa_format+0xc8> + 80004f8c: 16c78463 beq a5,a2,800050f4 <_ntoa_format+0x22c> + 80004f90: 00178793 addi a5,a5,1 + 80004f94: 00f98733 add a4,s3,a5 + 80004f98: fed70fa3 sb a3,-1(a4) + 80004f9c: ff2798e3 bne a5,s2,80004f8c <_ntoa_format+0xc4> + 80004fa0: 1a0e8663 beqz t4,8000514c <_ntoa_format+0x284> + 80004fa4: 40037713 andi a4,t1,1024 + 80004fa8: 20071463 bnez a4,800051b0 <_ntoa_format+0x2e8> + 80004fac: 1e079663 bnez a5,80005198 <_ntoa_format+0x2d0> + 80004fb0: 01000793 li a5,16 + 80004fb4: 2af88863 beq a7,a5,80005264 <_ntoa_format+0x39c> + 80004fb8: 00200793 li a5,2 + 80004fbc: 2ef88a63 beq a7,a5,800052b0 <_ntoa_format+0x3e8> + 80004fc0: 03000793 li a5,48 + 80004fc4: 00f98023 sb a5,0(s3) + 80004fc8: 00100793 li a5,1 + 80004fcc: 1a080463 beqz a6,80005174 <_ntoa_format+0x2ac> + 80004fd0: 00f98733 add a4,s3,a5 + 80004fd4: 00178413 addi s0,a5,1 + 80004fd8: 02d00793 li a5,45 + 80004fdc: 00f70023 sb a5,0(a4) + 80004fe0: 00337313 andi t1,t1,3 + 80004fe4: 20031263 bnez t1,800051e8 <_ntoa_format+0x320> + 80004fe8: 020c1913 slli s2,s8,0x20 + 80004fec: 02095913 srli s2,s2,0x20 + 80004ff0: 1f247c63 bgeu s0,s2,800051e8 <_ntoa_format+0x320> + 80004ff4: 40890933 sub s2,s2,s0 + 80004ff8: 01790933 add s2,s2,s7 + 80004ffc: 000b8493 mv s1,s7 + 80005000: 00048613 mv a2,s1 + 80005004: 000b0693 mv a3,s6 + 80005008: 00148493 addi s1,s1,1 + 8000500c: 000a8593 mv a1,s5 + 80005010: 02000513 li a0,32 + 80005014: 000a00e7 jalr s4 + 80005018: ff2494e3 bne s1,s2,80005000 <_ntoa_format+0x138> + 8000501c: 02040663 beqz s0,80005048 <_ntoa_format+0x180> + 80005020: 01240933 add s2,s0,s2 + 80005024: 012984b3 add s1,s3,s2 + 80005028: 00898433 add s0,s3,s0 + 8000502c: fff44503 lbu a0,-1(s0) + 80005030: 40848633 sub a2,s1,s0 + 80005034: 000b0693 mv a3,s6 + 80005038: fff40413 addi s0,s0,-1 + 8000503c: 000a8593 mv a1,s5 + 80005040: 000a00e7 jalr s4 + 80005044: fe8994e3 bne s3,s0,8000502c <_ntoa_format+0x164> + 80005048: 040c8a63 beqz s9,8000509c <_ntoa_format+0x1d4> + 8000504c: 020c1c13 slli s8,s8,0x20 + 80005050: 41790433 sub s0,s2,s7 + 80005054: 020c5c13 srli s8,s8,0x20 + 80005058: 05847263 bgeu s0,s8,8000509c <_ntoa_format+0x1d4> + 8000505c: 01740633 add a2,s0,s7 + 80005060: 000b0693 mv a3,s6 + 80005064: 00140413 addi s0,s0,1 + 80005068: 000a8593 mv a1,s5 + 8000506c: 02000513 li a0,32 + 80005070: 000a00e7 jalr s4 + 80005074: ff8464e3 bltu s0,s8,8000505c <_ntoa_format+0x194> + 80005078: 41790733 sub a4,s2,s7 + 8000507c: 00170713 addi a4,a4,1 + 80005080: 00000793 li a5,0 + 80005084: 00ec6863 bltu s8,a4,80005094 <_ntoa_format+0x1cc> + 80005088: fffb8793 addi a5,s7,-1 # ffff <_entry_offset+0xffff> + 8000508c: 01878c33 add s8,a5,s8 + 80005090: 412c07b3 sub a5,s8,s2 + 80005094: 00190913 addi s2,s2,1 + 80005098: 00f90933 add s2,s2,a5 + 8000509c: 05813083 ld ra,88(sp) + 800050a0: 05013403 ld s0,80(sp) + 800050a4: 04813483 ld s1,72(sp) + 800050a8: 03813983 ld s3,56(sp) + 800050ac: 03013a03 ld s4,48(sp) + 800050b0: 02813a83 ld s5,40(sp) + 800050b4: 02013b03 ld s6,32(sp) + 800050b8: 01813b83 ld s7,24(sp) + 800050bc: 01013c03 ld s8,16(sp) + 800050c0: 00813c83 ld s9,8(sp) + 800050c4: 00090513 mv a0,s2 + 800050c8: 04013903 ld s2,64(sp) + 800050cc: 06010113 addi sp,sp,96 + 800050d0: 00008067 ret + 800050d4: 12050863 beqz a0,80005204 <_ntoa_format+0x33c> + 800050d8: 00081663 bnez a6,800050e4 <_ntoa_format+0x21c> + 800050dc: 00c37713 andi a4,t1,12 + 800050e0: 00070463 beqz a4,800050e8 <_ntoa_format+0x220> + 800050e4: fffc0c1b addiw s8,s8,-1 + 800050e8: e8d7f2e3 bgeu a5,a3,80004f6c <_ntoa_format+0xa4> + 800050ec: 02000713 li a4,32 + 800050f0: e4e79ce3 bne a5,a4,80004f48 <_ntoa_format+0x80> + 800050f4: 0e0e8063 beqz t4,800051d4 <_ntoa_format+0x30c> + 800050f8: 40037793 andi a5,t1,1024 + 800050fc: 04079c63 bnez a5,80005154 <_ntoa_format+0x28c> + 80005100: 02000793 li a5,32 + 80005104: 0aff1063 bne t5,a5,800051a4 <_ntoa_format+0x2dc> + 80005108: 02000793 li a5,32 + 8000510c: 01f00713 li a4,31 + 80005110: 01000693 li a3,16 + 80005114: 1ad88c63 beq a7,a3,800052cc <_ntoa_format+0x404> + 80005118: 00200693 li a3,2 + 8000511c: 00070793 mv a5,a4 + 80005120: 00d89e63 bne a7,a3,8000513c <_ntoa_format+0x274> + 80005124: 00e986b3 add a3,s3,a4 + 80005128: 00170793 addi a5,a4,1 + 8000512c: 06200713 li a4,98 + 80005130: 00e68023 sb a4,0(a3) + 80005134: 02000713 li a4,32 + 80005138: 00e78e63 beq a5,a4,80005154 <_ntoa_format+0x28c> + 8000513c: 00f98733 add a4,s3,a5 + 80005140: 03000693 li a3,48 + 80005144: 00d70023 sb a3,0(a4) + 80005148: 00178793 addi a5,a5,1 + 8000514c: 02000713 li a4,32 + 80005150: e6e79ee3 bne a5,a4,80004fcc <_ntoa_format+0x104> + 80005154: 00337313 andi t1,t1,3 + 80005158: 08031263 bnez t1,800051dc <_ntoa_format+0x314> + 8000515c: 02000413 li s0,32 + 80005160: 020c1913 slli s2,s8,0x20 + 80005164: 02095913 srli s2,s2,0x20 + 80005168: e92466e3 bltu s0,s2,80004ff4 <_ntoa_format+0x12c> + 8000516c: 000b8913 mv s2,s7 + 80005170: eadff06f j 8000501c <_ntoa_format+0x154> + 80005174: 00437713 andi a4,t1,4 + 80005178: 06071c63 bnez a4,800051f0 <_ntoa_format+0x328> + 8000517c: 00837713 andi a4,t1,8 + 80005180: 0c071863 bnez a4,80005250 <_ntoa_format+0x388> + 80005184: 00337313 andi t1,t1,3 + 80005188: 00078413 mv s0,a5 + 8000518c: fc030ae3 beqz t1,80005160 <_ntoa_format+0x298> + 80005190: 000b8913 mv s2,s7 + 80005194: e89ff06f j 8000501c <_ntoa_format+0x154> + 80005198: 020f1f13 slli t5,t5,0x20 + 8000519c: 020f5f13 srli t5,t5,0x20 + 800051a0: 0aff0263 beq t5,a5,80005244 <_ntoa_format+0x37c> + 800051a4: 020c1913 slli s2,s8,0x20 + 800051a8: 02095913 srli s2,s2,0x20 + 800051ac: 08f90c63 beq s2,a5,80005244 <_ntoa_format+0x37c> + 800051b0: 01000713 li a4,16 + 800051b4: 06e88663 beq a7,a4,80005220 <_ntoa_format+0x358> + 800051b8: 00200713 li a4,2 + 800051bc: f6e89ce3 bne a7,a4,80005134 <_ntoa_format+0x26c> + 800051c0: 02000713 li a4,32 + 800051c4: f8e788e3 beq a5,a4,80005154 <_ntoa_format+0x28c> + 800051c8: 00f986b3 add a3,s3,a5 + 800051cc: 00178793 addi a5,a5,1 + 800051d0: f5dff06f j 8000512c <_ntoa_format+0x264> + 800051d4: 00337313 andi t1,t1,3 + 800051d8: 0c030063 beqz t1,80005298 <_ntoa_format+0x3d0> + 800051dc: 000b8913 mv s2,s7 + 800051e0: 02000413 li s0,32 + 800051e4: e3dff06f j 80005020 <_ntoa_format+0x158> + 800051e8: 000b8913 mv s2,s7 + 800051ec: e35ff06f j 80005020 <_ntoa_format+0x158> + 800051f0: 00f98733 add a4,s3,a5 + 800051f4: 00178413 addi s0,a5,1 + 800051f8: 02b00793 li a5,43 + 800051fc: 00f70023 sb a5,0(a4) + 80005200: de1ff06f j 80004fe0 <_ntoa_format+0x118> + 80005204: d8d7fee3 bgeu a5,a3,80004fa0 <_ntoa_format+0xd8> + 80005208: 02000713 li a4,32 + 8000520c: d2e79ee3 bne a5,a4,80004f48 <_ntoa_format+0x80> + 80005210: 0e0e8c63 beqz t4,80005308 <_ntoa_format+0x440> + 80005214: 40037793 andi a5,t1,1024 + 80005218: f2079ee3 bnez a5,80005154 <_ntoa_format+0x28c> + 8000521c: ee5ff06f j 80005100 <_ntoa_format+0x238> + 80005220: 02037713 andi a4,t1,32 + 80005224: 04071c63 bnez a4,8000527c <_ntoa_format+0x3b4> + 80005228: 02000713 li a4,32 + 8000522c: f2e784e3 beq a5,a4,80005154 <_ntoa_format+0x28c> + 80005230: 00f98733 add a4,s3,a5 + 80005234: 00178793 addi a5,a5,1 + 80005238: 07800693 li a3,120 + 8000523c: 00d70023 sb a3,0(a4) + 80005240: ef5ff06f j 80005134 <_ntoa_format+0x26c> + 80005244: fff78713 addi a4,a5,-1 + 80005248: d60704e3 beqz a4,80004fb0 <_ntoa_format+0xe8> + 8000524c: ec5ff06f j 80005110 <_ntoa_format+0x248> + 80005250: 00f98733 add a4,s3,a5 + 80005254: 00178413 addi s0,a5,1 + 80005258: 02000793 li a5,32 + 8000525c: 00f70023 sb a5,0(a4) + 80005260: d81ff06f j 80004fe0 <_ntoa_format+0x118> + 80005264: 02037793 andi a5,t1,32 + 80005268: 02079c63 bnez a5,800052a0 <_ntoa_format+0x3d8> + 8000526c: 07800793 li a5,120 + 80005270: 00f98023 sb a5,0(s3) + 80005274: 00100793 li a5,1 + 80005278: ec5ff06f j 8000513c <_ntoa_format+0x274> + 8000527c: 02000713 li a4,32 + 80005280: ece78ae3 beq a5,a4,80005154 <_ntoa_format+0x28c> + 80005284: 00f98733 add a4,s3,a5 + 80005288: 05800693 li a3,88 + 8000528c: 00d70023 sb a3,0(a4) + 80005290: 00178793 addi a5,a5,1 + 80005294: ea1ff06f j 80005134 <_ntoa_format+0x26c> + 80005298: 02000413 li s0,32 + 8000529c: d4dff06f j 80004fe8 <_ntoa_format+0x120> + 800052a0: 05800793 li a5,88 + 800052a4: 00f98023 sb a5,0(s3) + 800052a8: 00100793 li a5,1 + 800052ac: e91ff06f j 8000513c <_ntoa_format+0x274> + 800052b0: 06200793 li a5,98 + 800052b4: 00f98023 sb a5,0(s3) + 800052b8: 00100793 li a5,1 + 800052bc: e81ff06f j 8000513c <_ntoa_format+0x274> + 800052c0: e2051ae3 bnez a0,800050f4 <_ntoa_format+0x22c> + 800052c4: 000c8c13 mv s8,s9 + 800052c8: f49ff06f j 80005210 <_ntoa_format+0x348> + 800052cc: 02037693 andi a3,t1,32 + 800052d0: ffe78713 addi a4,a5,-2 + 800052d4: 00069863 bnez a3,800052e4 <_ntoa_format+0x41c> + 800052d8: 00e98733 add a4,s3,a4 + 800052dc: fff78793 addi a5,a5,-1 + 800052e0: f59ff06f j 80005238 <_ntoa_format+0x370> + 800052e4: 00070793 mv a5,a4 + 800052e8: f9dff06f j 80005284 <_ntoa_format+0x3bc> + 800052ec: 000e8e63 beqz t4,80005308 <_ntoa_format+0x440> + 800052f0: 40037713 andi a4,t1,1024 + 800052f4: 00071e63 bnez a4,80005310 <_ntoa_format+0x448> + 800052f8: 02ff0e63 beq t5,a5,80005334 <_ntoa_format+0x46c> + 800052fc: e4fc1ce3 bne s8,a5,80005154 <_ntoa_format+0x28c> + 80005300: 01f00713 li a4,31 + 80005304: e0dff06f j 80005110 <_ntoa_format+0x248> + 80005308: 02000413 li s0,32 + 8000530c: cd5ff06f j 80004fe0 <_ntoa_format+0x118> + 80005310: 01000793 li a5,16 + 80005314: 02f88c63 beq a7,a5,8000534c <_ntoa_format+0x484> + 80005318: 00200793 li a5,2 + 8000531c: e2f88ce3 beq a7,a5,80005154 <_ntoa_format+0x28c> + 80005320: 00337313 andi t1,t1,3 + 80005324: ea031ce3 bnez t1,800051dc <_ntoa_format+0x314> + 80005328: 02000413 li s0,32 + 8000532c: cd2464e3 bltu s0,s2,80004ff4 <_ntoa_format+0x12c> + 80005330: e3dff06f j 8000516c <_ntoa_format+0x2a4> + 80005334: 01000713 li a4,16 + 80005338: f8e88ae3 beq a7,a4,800052cc <_ntoa_format+0x404> + 8000533c: 00200793 li a5,2 + 80005340: 00f88c63 beq a7,a5,80005358 <_ntoa_format+0x490> + 80005344: 01f00793 li a5,31 + 80005348: df5ff06f j 8000513c <_ntoa_format+0x274> + 8000534c: 02037793 andi a5,t1,32 + 80005350: fc0788e3 beqz a5,80005320 <_ntoa_format+0x458> + 80005354: e01ff06f j 80005154 <_ntoa_format+0x28c> + 80005358: 01f00713 li a4,31 + 8000535c: dc9ff06f j 80005124 <_ntoa_format+0x25c> + +0000000080005360 <_ntoa_long>: + 80005360: f4010113 addi sp,sp,-192 + 80005364: 09413823 sd s4,144(sp) + 80005368: 09513423 sd s5,136(sp) + 8000536c: 09613023 sd s6,128(sp) + 80005370: 07713c23 sd s7,120(sp) + 80005374: 07813823 sd s8,112(sp) + 80005378: 07913423 sd s9,104(sp) + 8000537c: 05b13c23 sd s11,88(sp) + 80005380: 0a113c23 sd ra,184(sp) + 80005384: 0a813823 sd s0,176(sp) + 80005388: 0a913423 sd s1,168(sp) + 8000538c: 0b213023 sd s2,160(sp) + 80005390: 09313c23 sd s3,152(sp) + 80005394: 07a13023 sd s10,96(sp) + 80005398: 02a13023 sd a0,32(sp) + 8000539c: 03113423 sd a7,40(sp) + 800053a0: 0c812a03 lw s4,200(sp) + 800053a4: 00070d93 mv s11,a4 + 800053a8: 00058b13 mv s6,a1 + 800053ac: 00060b93 mv s7,a2 + 800053b0: 00068c13 mv s8,a3 + 800053b4: 00078c93 mv s9,a5 + 800053b8: 00080a93 mv s5,a6 + 800053bc: 00071863 bnez a4,800053cc <_ntoa_long+0x6c> + 800053c0: 400a7793 andi a5,s4,1024 + 800053c4: fefa7a13 andi s4,s4,-17 + 800053c8: 0e079663 bnez a5,800054b4 <_ntoa_long+0x154> + 800053cc: 020a7793 andi a5,s4,32 + 800053d0: 06100413 li s0,97 + 800053d4: 0c079c63 bnez a5,800054ac <_ntoa_long+0x14c> + 800053d8: 00000d13 li s10,0 + 800053dc: 03010493 addi s1,sp,48 + 800053e0: 00900913 li s2,9 + 800053e4: ff64041b addiw s0,s0,-10 + 800053e8: 02000993 li s3,32 + 800053ec: 00c0006f j 800053f8 <_ntoa_long+0x98> + 800053f0: 053d0463 beq s10,s3,80005438 <_ntoa_long+0xd8> + 800053f4: 00050d93 mv s11,a0 + 800053f8: 000a8593 mv a1,s5 + 800053fc: 000d8513 mv a0,s11 + 80005400: d90ff0ef jal ra,80004990 <__umoddi3> + 80005404: 0ff57313 andi t1,a0,255 + 80005408: 0303071b addiw a4,t1,48 + 8000540c: 0064033b addw t1,s0,t1 + 80005410: 0ff37313 andi t1,t1,255 + 80005414: 00a96463 bltu s2,a0,8000541c <_ntoa_long+0xbc> + 80005418: 0ff77313 andi t1,a4,255 + 8000541c: 001d0d13 addi s10,s10,1 + 80005420: 01a48733 add a4,s1,s10 + 80005424: 000d8513 mv a0,s11 + 80005428: 000a8593 mv a1,s5 + 8000542c: fe670fa3 sb t1,-1(a4) + 80005430: d18ff0ef jal ra,80004948 <__udivdi3> + 80005434: fb5dfee3 bgeu s11,s5,800053f0 <_ntoa_long+0x90> + 80005438: 0c012703 lw a4,192(sp) + 8000543c: 02813783 ld a5,40(sp) + 80005440: 02013503 ld a0,32(sp) + 80005444: 01413823 sd s4,16(sp) + 80005448: 00e13423 sd a4,8(sp) + 8000544c: 00f13023 sd a5,0(sp) + 80005450: 000a889b sext.w a7,s5 + 80005454: 000c8813 mv a6,s9 + 80005458: 000d0793 mv a5,s10 + 8000545c: 00048713 mv a4,s1 + 80005460: 000c0693 mv a3,s8 + 80005464: 000b8613 mv a2,s7 + 80005468: 000b0593 mv a1,s6 + 8000546c: a5dff0ef jal ra,80004ec8 <_ntoa_format> + 80005470: 0b813083 ld ra,184(sp) + 80005474: 0b013403 ld s0,176(sp) + 80005478: 0a813483 ld s1,168(sp) + 8000547c: 0a013903 ld s2,160(sp) + 80005480: 09813983 ld s3,152(sp) + 80005484: 09013a03 ld s4,144(sp) + 80005488: 08813a83 ld s5,136(sp) + 8000548c: 08013b03 ld s6,128(sp) + 80005490: 07813b83 ld s7,120(sp) + 80005494: 07013c03 ld s8,112(sp) + 80005498: 06813c83 ld s9,104(sp) + 8000549c: 06013d03 ld s10,96(sp) + 800054a0: 05813d83 ld s11,88(sp) + 800054a4: 0c010113 addi sp,sp,192 + 800054a8: 00008067 ret + 800054ac: 04100413 li s0,65 + 800054b0: f29ff06f j 800053d8 <_ntoa_long+0x78> + 800054b4: 00000d13 li s10,0 + 800054b8: 03010493 addi s1,sp,48 + 800054bc: f7dff06f j 80005438 <_ntoa_long+0xd8> + +00000000800054c0 <_ntoa_long_long>: + 800054c0: f4010113 addi sp,sp,-192 + 800054c4: 09413823 sd s4,144(sp) + 800054c8: 09513423 sd s5,136(sp) + 800054cc: 09613023 sd s6,128(sp) + 800054d0: 07713c23 sd s7,120(sp) + 800054d4: 07813823 sd s8,112(sp) + 800054d8: 07913423 sd s9,104(sp) + 800054dc: 05b13c23 sd s11,88(sp) + 800054e0: 0a113c23 sd ra,184(sp) + 800054e4: 0a813823 sd s0,176(sp) + 800054e8: 0a913423 sd s1,168(sp) + 800054ec: 0b213023 sd s2,160(sp) + 800054f0: 09313c23 sd s3,152(sp) + 800054f4: 07a13023 sd s10,96(sp) + 800054f8: 02a13023 sd a0,32(sp) + 800054fc: 03113423 sd a7,40(sp) + 80005500: 0c812a03 lw s4,200(sp) + 80005504: 00070d93 mv s11,a4 + 80005508: 00058b13 mv s6,a1 + 8000550c: 00060b93 mv s7,a2 + 80005510: 00068c13 mv s8,a3 + 80005514: 00078c93 mv s9,a5 + 80005518: 00080a93 mv s5,a6 + 8000551c: 00071863 bnez a4,8000552c <_ntoa_long_long+0x6c> + 80005520: 400a7793 andi a5,s4,1024 + 80005524: fefa7a13 andi s4,s4,-17 + 80005528: 0e079663 bnez a5,80005614 <_ntoa_long_long+0x154> + 8000552c: 020a7793 andi a5,s4,32 + 80005530: 06100413 li s0,97 + 80005534: 0c079c63 bnez a5,8000560c <_ntoa_long_long+0x14c> + 80005538: 00000d13 li s10,0 + 8000553c: 03010493 addi s1,sp,48 + 80005540: 00900913 li s2,9 + 80005544: ff64041b addiw s0,s0,-10 + 80005548: 02000993 li s3,32 + 8000554c: 00c0006f j 80005558 <_ntoa_long_long+0x98> + 80005550: 053d0463 beq s10,s3,80005598 <_ntoa_long_long+0xd8> + 80005554: 00050d93 mv s11,a0 + 80005558: 000a8593 mv a1,s5 + 8000555c: 000d8513 mv a0,s11 + 80005560: c30ff0ef jal ra,80004990 <__umoddi3> + 80005564: 0ff57313 andi t1,a0,255 + 80005568: 0303071b addiw a4,t1,48 + 8000556c: 0064033b addw t1,s0,t1 + 80005570: 0ff37313 andi t1,t1,255 + 80005574: 00a96463 bltu s2,a0,8000557c <_ntoa_long_long+0xbc> + 80005578: 0ff77313 andi t1,a4,255 + 8000557c: 001d0d13 addi s10,s10,1 + 80005580: 01a48733 add a4,s1,s10 + 80005584: 000d8513 mv a0,s11 + 80005588: 000a8593 mv a1,s5 + 8000558c: fe670fa3 sb t1,-1(a4) + 80005590: bb8ff0ef jal ra,80004948 <__udivdi3> + 80005594: fb5dfee3 bgeu s11,s5,80005550 <_ntoa_long_long+0x90> + 80005598: 0c012703 lw a4,192(sp) + 8000559c: 02813783 ld a5,40(sp) + 800055a0: 02013503 ld a0,32(sp) + 800055a4: 01413823 sd s4,16(sp) + 800055a8: 00e13423 sd a4,8(sp) + 800055ac: 00f13023 sd a5,0(sp) + 800055b0: 000a889b sext.w a7,s5 + 800055b4: 000c8813 mv a6,s9 + 800055b8: 000d0793 mv a5,s10 + 800055bc: 00048713 mv a4,s1 + 800055c0: 000c0693 mv a3,s8 + 800055c4: 000b8613 mv a2,s7 + 800055c8: 000b0593 mv a1,s6 + 800055cc: 8fdff0ef jal ra,80004ec8 <_ntoa_format> + 800055d0: 0b813083 ld ra,184(sp) + 800055d4: 0b013403 ld s0,176(sp) + 800055d8: 0a813483 ld s1,168(sp) + 800055dc: 0a013903 ld s2,160(sp) + 800055e0: 09813983 ld s3,152(sp) + 800055e4: 09013a03 ld s4,144(sp) + 800055e8: 08813a83 ld s5,136(sp) + 800055ec: 08013b03 ld s6,128(sp) + 800055f0: 07813b83 ld s7,120(sp) + 800055f4: 07013c03 ld s8,112(sp) + 800055f8: 06813c83 ld s9,104(sp) + 800055fc: 06013d03 ld s10,96(sp) + 80005600: 05813d83 ld s11,88(sp) + 80005604: 0c010113 addi sp,sp,192 + 80005608: 00008067 ret + 8000560c: 04100413 li s0,65 + 80005610: f29ff06f j 80005538 <_ntoa_long_long+0x78> + 80005614: 00000d13 li s10,0 + 80005618: 03010493 addi s1,sp,48 + 8000561c: f7dff06f j 80005598 <_ntoa_long_long+0xd8> + +0000000080005620 <_vsnprintf>: + 80005620: f6010113 addi sp,sp,-160 + 80005624: 08913423 sd s1,136(sp) + 80005628: 09213023 sd s2,128(sp) + 8000562c: 07313c23 sd s3,120(sp) + 80005630: 05713c23 sd s7,88(sp) + 80005634: 05813823 sd s8,80(sp) + 80005638: 08113c23 sd ra,152(sp) + 8000563c: 08813823 sd s0,144(sp) + 80005640: 07413823 sd s4,112(sp) + 80005644: 07513423 sd s5,104(sp) + 80005648: 07613023 sd s6,96(sp) + 8000564c: 05913423 sd s9,72(sp) + 80005650: 05a13023 sd s10,64(sp) + 80005654: 03b13c23 sd s11,56(sp) + 80005658: 00058493 mv s1,a1 + 8000565c: 00060c13 mv s8,a2 + 80005660: 00068b93 mv s7,a3 + 80005664: 00070993 mv s3,a4 + 80005668: 00000917 auipc s2,0x0 + 8000566c: 85c90913 addi s2,s2,-1956 # 80004ec4 <_out_null> + 80005670: 00058463 beqz a1,80005678 <_vsnprintf+0x58> + 80005674: 00050913 mv s2,a0 + 80005678: 000bc503 lbu a0,0(s7) + 8000567c: 00000d13 li s10,0 + 80005680: 66050663 beqz a0,80005cec <_vsnprintf+0x6cc> + 80005684: 000107b7 lui a5,0x10 + 80005688: fff78793 addi a5,a5,-1 # ffff <_entry_offset+0xffff> + 8000568c: 02500a13 li s4,37 + 80005690: 00001417 auipc s0,0x1 + 80005694: 57040413 addi s0,s0,1392 # 80006c00 + 80005698: 00f13c23 sd a5,24(sp) + 8000569c: 0200006f j 800056bc <_vsnprintf+0x9c> + 800056a0: 000d0613 mv a2,s10 + 800056a4: 000c0693 mv a3,s8 + 800056a8: 00048593 mv a1,s1 + 800056ac: 001d0d13 addi s10,s10,1 + 800056b0: 000900e7 jalr s2 + 800056b4: 000bc503 lbu a0,0(s7) + 800056b8: 1c050263 beqz a0,8000587c <_vsnprintf+0x25c> + 800056bc: 001b8b93 addi s7,s7,1 + 800056c0: ff4510e3 bne a0,s4,800056a0 <_vsnprintf+0x80> + 800056c4: 00000593 li a1,0 + 800056c8: 01000813 li a6,16 + 800056cc: 000bc503 lbu a0,0(s7) + 800056d0: 001b8713 addi a4,s7,1 + 800056d4: 00070613 mv a2,a4 + 800056d8: fe05079b addiw a5,a0,-32 + 800056dc: 0ff7f793 andi a5,a5,255 + 800056e0: 00f86c63 bltu a6,a5,800056f8 <_vsnprintf+0xd8> + 800056e4: 00279793 slli a5,a5,0x2 + 800056e8: 008787b3 add a5,a5,s0 + 800056ec: 0007a783 lw a5,0(a5) + 800056f0: 008787b3 add a5,a5,s0 + 800056f4: 00078067 jr a5 + 800056f8: fd05079b addiw a5,a0,-48 + 800056fc: 0ff7f793 andi a5,a5,255 + 80005700: 00900813 li a6,9 + 80005704: 0ef87c63 bgeu a6,a5,800057fc <_vsnprintf+0x1dc> + 80005708: 02a00793 li a5,42 + 8000570c: 20f50463 beq a0,a5,80005914 <_vsnprintf+0x2f4> + 80005710: 000b8613 mv a2,s7 + 80005714: 00000d93 li s11,0 + 80005718: 00070b93 mv s7,a4 + 8000571c: 02e00793 li a5,46 + 80005720: 00000c93 li s9,0 + 80005724: 12f50463 beq a0,a5,8000584c <_vsnprintf+0x22c> + 80005728: f985079b addiw a5,a0,-104 + 8000572c: 0ff7f793 andi a5,a5,255 + 80005730: 01200713 li a4,18 + 80005734: 08f76463 bltu a4,a5,800057bc <_vsnprintf+0x19c> + 80005738: 00001717 auipc a4,0x1 + 8000573c: 50c70713 addi a4,a4,1292 # 80006c44 + 80005740: 00279793 slli a5,a5,0x2 + 80005744: 00e787b3 add a5,a5,a4 + 80005748: 0007a783 lw a5,0(a5) + 8000574c: 00e787b3 add a5,a5,a4 + 80005750: 00078067 jr a5 + 80005754: 0015e593 ori a1,a1,1 + 80005758: 0005859b sext.w a1,a1 + 8000575c: 00070b93 mv s7,a4 + 80005760: f6dff06f j 800056cc <_vsnprintf+0xac> + 80005764: 0025e593 ori a1,a1,2 + 80005768: 0005859b sext.w a1,a1 + 8000576c: 00070b93 mv s7,a4 + 80005770: f5dff06f j 800056cc <_vsnprintf+0xac> + 80005774: 0045e593 ori a1,a1,4 + 80005778: 0005859b sext.w a1,a1 + 8000577c: 00070b93 mv s7,a4 + 80005780: f4dff06f j 800056cc <_vsnprintf+0xac> + 80005784: 0105e593 ori a1,a1,16 + 80005788: 0005859b sext.w a1,a1 + 8000578c: 00070b93 mv s7,a4 + 80005790: f3dff06f j 800056cc <_vsnprintf+0xac> + 80005794: 0085e593 ori a1,a1,8 + 80005798: 0005859b sext.w a1,a1 + 8000579c: 00070b93 mv s7,a4 + 800057a0: f2dff06f j 800056cc <_vsnprintf+0xac> + 800057a4: 00164503 lbu a0,1(a2) + 800057a8: 06800793 li a5,104 + 800057ac: 52f50663 beq a0,a5,80005cd8 <_vsnprintf+0x6b8> + 800057b0: 0805e593 ori a1,a1,128 + 800057b4: 0005859b sext.w a1,a1 + 800057b8: 001b8b93 addi s7,s7,1 + 800057bc: fdb5079b addiw a5,a0,-37 + 800057c0: 0ff7f793 andi a5,a5,255 + 800057c4: 05300713 li a4,83 + 800057c8: ecf76ce3 bltu a4,a5,800056a0 <_vsnprintf+0x80> + 800057cc: 00001717 auipc a4,0x1 + 800057d0: 4c470713 addi a4,a4,1220 # 80006c90 + 800057d4: 00279793 slli a5,a5,0x2 + 800057d8: 00e787b3 add a5,a5,a4 + 800057dc: 0007a783 lw a5,0(a5) + 800057e0: 00e787b3 add a5,a5,a4 + 800057e4: 00078067 jr a5 + 800057e8: 00164503 lbu a0,1(a2) + 800057ec: 1005e593 ori a1,a1,256 + 800057f0: 0005859b sext.w a1,a1 + 800057f4: 001b8b93 addi s7,s7,1 + 800057f8: fc5ff06f j 800057bc <_vsnprintf+0x19c> + 800057fc: 00000d93 li s11,0 + 80005800: 00900813 li a6,9 + 80005804: 0080006f j 8000580c <_vsnprintf+0x1ec> + 80005808: 00170713 addi a4,a4,1 + 8000580c: 002d979b slliw a5,s11,0x2 + 80005810: 01b787bb addw a5,a5,s11 + 80005814: 0017979b slliw a5,a5,0x1 + 80005818: 00a787bb addw a5,a5,a0 + 8000581c: 00074503 lbu a0,0(a4) + 80005820: 000b8893 mv a7,s7 + 80005824: fd078d9b addiw s11,a5,-48 + 80005828: fd05061b addiw a2,a0,-48 + 8000582c: 0ff67613 andi a2,a2,255 + 80005830: 00070b93 mv s7,a4 + 80005834: fcc87ae3 bgeu a6,a2,80005808 <_vsnprintf+0x1e8> + 80005838: 02e00793 li a5,46 + 8000583c: 00070613 mv a2,a4 + 80005840: 00288b93 addi s7,a7,2 + 80005844: 00000c93 li s9,0 + 80005848: eef510e3 bne a0,a5,80005728 <_vsnprintf+0x108> + 8000584c: 00164503 lbu a0,1(a2) + 80005850: 4005e593 ori a1,a1,1024 + 80005854: 00900713 li a4,9 + 80005858: fd05079b addiw a5,a0,-48 + 8000585c: 0ff7f793 andi a5,a5,255 + 80005860: 0005859b sext.w a1,a1 + 80005864: 06f77c63 bgeu a4,a5,800058dc <_vsnprintf+0x2bc> + 80005868: 02a00793 li a5,42 + 8000586c: 32f50e63 beq a0,a5,80005ba8 <_vsnprintf+0x588> + 80005870: 000b8613 mv a2,s7 + 80005874: 001b8b93 addi s7,s7,1 + 80005878: eb1ff06f j 80005728 <_vsnprintf+0x108> + 8000587c: 000d041b sext.w s0,s10 + 80005880: 018d6463 bltu s10,s8,80005888 <_vsnprintf+0x268> + 80005884: fffc0d13 addi s10,s8,-1 + 80005888: 000c0693 mv a3,s8 + 8000588c: 000d0613 mv a2,s10 + 80005890: 00048593 mv a1,s1 + 80005894: 00000513 li a0,0 + 80005898: 000900e7 jalr s2 + 8000589c: 09813083 ld ra,152(sp) + 800058a0: 00040513 mv a0,s0 + 800058a4: 09013403 ld s0,144(sp) + 800058a8: 08813483 ld s1,136(sp) + 800058ac: 08013903 ld s2,128(sp) + 800058b0: 07813983 ld s3,120(sp) + 800058b4: 07013a03 ld s4,112(sp) + 800058b8: 06813a83 ld s5,104(sp) + 800058bc: 06013b03 ld s6,96(sp) + 800058c0: 05813b83 ld s7,88(sp) + 800058c4: 05013c03 ld s8,80(sp) + 800058c8: 04813c83 ld s9,72(sp) + 800058cc: 04013d03 ld s10,64(sp) + 800058d0: 03813d83 ld s11,56(sp) + 800058d4: 0a010113 addi sp,sp,160 + 800058d8: 00008067 ret + 800058dc: 002c979b slliw a5,s9,0x2 + 800058e0: 019788bb addw a7,a5,s9 + 800058e4: 000b8813 mv a6,s7 + 800058e8: 0018989b slliw a7,a7,0x1 + 800058ec: 001b8b93 addi s7,s7,1 + 800058f0: 00a888bb addw a7,a7,a0 + 800058f4: 000bc503 lbu a0,0(s7) + 800058f8: fd088c9b addiw s9,a7,-48 + 800058fc: fd05079b addiw a5,a0,-48 + 80005900: 0ff7f793 andi a5,a5,255 + 80005904: fcf77ce3 bgeu a4,a5,800058dc <_vsnprintf+0x2bc> + 80005908: 000b8613 mv a2,s7 + 8000590c: 00280b93 addi s7,a6,2 + 80005910: e19ff06f j 80005728 <_vsnprintf+0x108> + 80005914: 0009a783 lw a5,0(s3) + 80005918: 00898993 addi s3,s3,8 + 8000591c: 00078d9b sext.w s11,a5 + 80005920: 0007c863 bltz a5,80005930 <_vsnprintf+0x310> + 80005924: 001bc503 lbu a0,1(s7) + 80005928: 002b8b93 addi s7,s7,2 + 8000592c: df1ff06f j 8000571c <_vsnprintf+0xfc> + 80005930: 0025e593 ori a1,a1,2 + 80005934: 001bc503 lbu a0,1(s7) + 80005938: 0005859b sext.w a1,a1 + 8000593c: 40f00dbb negw s11,a5 + 80005940: 002b8b93 addi s7,s7,2 + 80005944: dd9ff06f j 8000571c <_vsnprintf+0xfc> + 80005948: 07800793 li a5,120 + 8000594c: 00898a93 addi s5,s3,8 + 80005950: 56f50063 beq a0,a5,80005eb0 <_vsnprintf+0x890> + 80005954: 05800793 li a5,88 + 80005958: 28f50463 beq a0,a5,80005be0 <_vsnprintf+0x5c0> + 8000595c: 06f00793 li a5,111 + 80005960: 4af50c63 beq a0,a5,80005e18 <_vsnprintf+0x7f8> + 80005964: 06200793 li a5,98 + 80005968: 54f50063 beq a0,a5,80005ea8 <_vsnprintf+0x888> + 8000596c: fef5ff13 andi t5,a1,-17 + 80005970: 4005f793 andi a5,a1,1024 + 80005974: 06900713 li a4,105 + 80005978: 000f0f1b sext.w t5,t5 + 8000597c: 0007879b sext.w a5,a5 + 80005980: 5ae51063 bne a0,a4,80005f20 <_vsnprintf+0x900> + 80005984: 48079663 bnez a5,80005e10 <_vsnprintf+0x7f0> + 80005988: 2005f593 andi a1,a1,512 + 8000598c: 0005879b sext.w a5,a1 + 80005990: 00a00813 li a6,10 + 80005994: 42079663 bnez a5,80005dc0 <_vsnprintf+0x7a0> + 80005998: 100f7793 andi a5,t5,256 + 8000599c: 000f0613 mv a2,t5 + 800059a0: 4e079063 bnez a5,80005e80 <_vsnprintf+0x860> + 800059a4: 040f7713 andi a4,t5,64 + 800059a8: 0009a783 lw a5,0(s3) + 800059ac: 4a071a63 bnez a4,80005e60 <_vsnprintf+0x840> + 800059b0: 08067613 andi a2,a2,128 + 800059b4: 52060a63 beqz a2,80005ee8 <_vsnprintf+0x8c8> + 800059b8: 0107979b slliw a5,a5,0x10 + 800059bc: 4107d79b sraiw a5,a5,0x10 + 800059c0: 40f7d61b sraiw a2,a5,0xf + 800059c4: 00c7c733 xor a4,a5,a2 + 800059c8: 40c7073b subw a4,a4,a2 + 800059cc: 03071713 slli a4,a4,0x30 + 800059d0: 03075713 srli a4,a4,0x30 + 800059d4: 000d0613 mv a2,s10 + 800059d8: 01e13423 sd t5,8(sp) + 800059dc: 01b13023 sd s11,0(sp) + 800059e0: 000c8893 mv a7,s9 + 800059e4: 01f7d79b srliw a5,a5,0x1f + 800059e8: 000c0693 mv a3,s8 + 800059ec: 00048593 mv a1,s1 + 800059f0: 00090513 mv a0,s2 + 800059f4: 96dff0ef jal ra,80005360 <_ntoa_long> + 800059f8: 00050d13 mv s10,a0 + 800059fc: 000a8993 mv s3,s5 + 80005a00: cb5ff06f j 800056b4 <_vsnprintf+0x94> + 80005a04: 00164503 lbu a0,1(a2) + 80005a08: 06c00793 li a5,108 + 80005a0c: def510e3 bne a0,a5,800057ec <_vsnprintf+0x1cc> + 80005a10: 3005e593 ori a1,a1,768 + 80005a14: 00264503 lbu a0,2(a2) + 80005a18: 0005859b sext.w a1,a1 + 80005a1c: 00360b93 addi s7,a2,3 + 80005a20: d9dff06f j 800057bc <_vsnprintf+0x19c> + 80005a24: 00898793 addi a5,s3,8 + 80005a28: 001d0813 addi a6,s10,1 + 80005a2c: 0025f593 andi a1,a1,2 + 80005a30: 02f13023 sd a5,32(sp) + 80005a34: 00080b13 mv s6,a6 + 80005a38: 32058263 beqz a1,80005d5c <_vsnprintf+0x73c> + 80005a3c: 0009c503 lbu a0,0(s3) + 80005a40: 000c0693 mv a3,s8 + 80005a44: 000d0613 mv a2,s10 + 80005a48: 00048593 mv a1,s1 + 80005a4c: 000900e7 jalr s2 + 80005a50: 00100793 li a5,1 + 80005a54: 43b7f063 bgeu a5,s11,80005e74 <_vsnprintf+0x854> + 80005a58: ffed879b addiw a5,s11,-2 + 80005a5c: 02079a93 slli s5,a5,0x20 + 80005a60: 020ada93 srli s5,s5,0x20 + 80005a64: 002d0d13 addi s10,s10,2 + 80005a68: 015d0cb3 add s9,s10,s5 + 80005a6c: 000b0613 mv a2,s6 + 80005a70: 000c0693 mv a3,s8 + 80005a74: 001b0b13 addi s6,s6,1 + 80005a78: 00048593 mv a1,s1 + 80005a7c: 02000513 li a0,32 + 80005a80: 000900e7 jalr s2 + 80005a84: ff6c94e3 bne s9,s6,80005a6c <_vsnprintf+0x44c> + 80005a88: 02013983 ld s3,32(sp) + 80005a8c: 015d0d33 add s10,s10,s5 + 80005a90: c25ff06f j 800056b4 <_vsnprintf+0x94> + 80005a94: 000d0613 mv a2,s10 + 80005a98: 000c0693 mv a3,s8 + 80005a9c: 00048593 mv a1,s1 + 80005aa0: 02500513 li a0,37 + 80005aa4: 001d0d13 addi s10,s10,1 + 80005aa8: 000900e7 jalr s2 + 80005aac: c09ff06f j 800056b4 <_vsnprintf+0x94> + 80005ab0: 0009ba83 ld s5,0(s3) + 80005ab4: 00898793 addi a5,s3,8 + 80005ab8: 02f13023 sd a5,32(sp) + 80005abc: 000ac503 lbu a0,0(s5) + 80005ac0: 100c9663 bnez s9,80005bcc <_vsnprintf+0x5ac> + 80005ac4: ffe00793 li a5,-2 + 80005ac8: 42050863 beqz a0,80005ef8 <_vsnprintf+0x8d8> + 80005acc: 00178693 addi a3,a5,1 + 80005ad0: 00da8633 add a2,s5,a3 + 80005ad4: 000a8793 mv a5,s5 + 80005ad8: 0080006f j 80005ae0 <_vsnprintf+0x4c0> + 80005adc: 1ec78863 beq a5,a2,80005ccc <_vsnprintf+0x6ac> + 80005ae0: 0017c703 lbu a4,1(a5) + 80005ae4: 00178793 addi a5,a5,1 + 80005ae8: fe071ae3 bnez a4,80005adc <_vsnprintf+0x4bc> + 80005aec: 415787bb subw a5,a5,s5 + 80005af0: 00f13823 sd a5,16(sp) + 80005af4: 4005f793 andi a5,a1,1024 + 80005af8: 0007899b sext.w s3,a5 + 80005afc: 00078c63 beqz a5,80005b14 <_vsnprintf+0x4f4> + 80005b00: 01013703 ld a4,16(sp) + 80005b04: 000c879b sext.w a5,s9 + 80005b08: 01977463 bgeu a4,s9,80005b10 <_vsnprintf+0x4f0> + 80005b0c: 0007079b sext.w a5,a4 + 80005b10: 00f13823 sd a5,16(sp) + 80005b14: 0025f593 andi a1,a1,2 + 80005b18: 0005879b sext.w a5,a1 + 80005b1c: 02f13423 sd a5,40(sp) + 80005b20: 1c058a63 beqz a1,80005cf4 <_vsnprintf+0x6d4> + 80005b24: 14050863 beqz a0,80005c74 <_vsnprintf+0x654> + 80005b28: 000d0613 mv a2,s10 + 80005b2c: 00098863 beqz s3,80005b3c <_vsnprintf+0x51c> + 80005b30: fffc879b addiw a5,s9,-1 + 80005b34: 120c8863 beqz s9,80005c64 <_vsnprintf+0x644> + 80005b38: 00078c93 mv s9,a5 + 80005b3c: 000c0693 mv a3,s8 + 80005b40: 00048593 mv a1,s1 + 80005b44: 00160b13 addi s6,a2,1 + 80005b48: 000900e7 jalr s2 + 80005b4c: 41ab07b3 sub a5,s6,s10 + 80005b50: 00fa87b3 add a5,s5,a5 + 80005b54: 0007c503 lbu a0,0(a5) + 80005b58: 10050863 beqz a0,80005c68 <_vsnprintf+0x648> + 80005b5c: 000b0613 mv a2,s6 + 80005b60: fcdff06f j 80005b2c <_vsnprintf+0x50c> + 80005b64: 0009b703 ld a4,0(s3) + 80005b68: 0215e593 ori a1,a1,33 + 80005b6c: 0005859b sext.w a1,a1 + 80005b70: 01000793 li a5,16 + 80005b74: 000d0613 mv a2,s10 + 80005b78: 00b13423 sd a1,8(sp) + 80005b7c: 00f13023 sd a5,0(sp) + 80005b80: 000c8893 mv a7,s9 + 80005b84: 01000813 li a6,16 + 80005b88: 00000793 li a5,0 + 80005b8c: 000c0693 mv a3,s8 + 80005b90: 00048593 mv a1,s1 + 80005b94: 00090513 mv a0,s2 + 80005b98: 929ff0ef jal ra,800054c0 <_ntoa_long_long> + 80005b9c: 00898993 addi s3,s3,8 + 80005ba0: 00050d13 mv s10,a0 + 80005ba4: b11ff06f j 800056b4 <_vsnprintf+0x94> + 80005ba8: 0009a883 lw a7,0(s3) + 80005bac: 00264503 lbu a0,2(a2) + 80005bb0: 00360b93 addi s7,a2,3 + 80005bb4: fff8c793 not a5,a7 + 80005bb8: 43f7d793 srai a5,a5,0x3f + 80005bbc: 00f8fcb3 and s9,a7,a5 + 80005bc0: 00898993 addi s3,s3,8 + 80005bc4: 00260613 addi a2,a2,2 + 80005bc8: b61ff06f j 80005728 <_vsnprintf+0x108> + 80005bcc: 020c9793 slli a5,s9,0x20 + 80005bd0: 0207d793 srli a5,a5,0x20 + 80005bd4: 32050263 beqz a0,80005ef8 <_vsnprintf+0x8d8> + 80005bd8: fff78793 addi a5,a5,-1 + 80005bdc: ef1ff06f j 80005acc <_vsnprintf+0x4ac> + 80005be0: ff35ff13 andi t5,a1,-13 + 80005be4: 000f0f1b sext.w t5,t5 + 80005be8: 4005f793 andi a5,a1,1024 + 80005bec: 020f6f13 ori t5,t5,32 + 80005bf0: 20078863 beqz a5,80005e00 <_vsnprintf+0x7e0> + 80005bf4: 01000813 li a6,16 + 80005bf8: ffef7f13 andi t5,t5,-2 + 80005bfc: 000f0f1b sext.w t5,t5 + 80005c00: 200f7793 andi a5,t5,512 + 80005c04: 06900713 li a4,105 + 80005c08: 0007879b sext.w a5,a5 + 80005c0c: d8e504e3 beq a0,a4,80005994 <_vsnprintf+0x374> + 80005c10: 06400713 li a4,100 + 80005c14: d8e500e3 beq a0,a4,80005994 <_vsnprintf+0x374> + 80005c18: 22079663 bnez a5,80005e44 <_vsnprintf+0x824> + 80005c1c: 100f7793 andi a5,t5,256 + 80005c20: 000f0713 mv a4,t5 + 80005c24: 2a079463 bnez a5,80005ecc <_vsnprintf+0x8ac> + 80005c28: 040f7793 andi a5,t5,64 + 80005c2c: 24079063 bnez a5,80005e6c <_vsnprintf+0x84c> + 80005c30: 08077713 andi a4,a4,128 + 80005c34: 2c070663 beqz a4,80005f00 <_vsnprintf+0x8e0> + 80005c38: 0009a703 lw a4,0(s3) + 80005c3c: 01813783 ld a5,24(sp) + 80005c40: 00e7f733 and a4,a5,a4 + 80005c44: 02071713 slli a4,a4,0x20 + 80005c48: 000d0613 mv a2,s10 + 80005c4c: 01e13423 sd t5,8(sp) + 80005c50: 01b13023 sd s11,0(sp) + 80005c54: 000c8893 mv a7,s9 + 80005c58: 00000793 li a5,0 + 80005c5c: 02075713 srli a4,a4,0x20 + 80005c60: d89ff06f j 800059e8 <_vsnprintf+0x3c8> + 80005c64: 00060b13 mv s6,a2 + 80005c68: 02813783 ld a5,40(sp) + 80005c6c: 04078a63 beqz a5,80005cc0 <_vsnprintf+0x6a0> + 80005c70: 000b0d13 mv s10,s6 + 80005c74: 01013703 ld a4,16(sp) + 80005c78: 0db77e63 bgeu a4,s11,80005d54 <_vsnprintf+0x734> + 80005c7c: fffd879b addiw a5,s11,-1 + 80005c80: 40e7873b subw a4,a5,a4 + 80005c84: 02071713 slli a4,a4,0x20 + 80005c88: 02075713 srli a4,a4,0x20 + 80005c8c: 001d0813 addi a6,s10,1 + 80005c90: 01070b33 add s6,a4,a6 + 80005c94: 0080006f j 80005c9c <_vsnprintf+0x67c> + 80005c98: 00180813 addi a6,a6,1 + 80005c9c: 000d0613 mv a2,s10 + 80005ca0: 01013823 sd a6,16(sp) + 80005ca4: 000c0693 mv a3,s8 + 80005ca8: 00048593 mv a1,s1 + 80005cac: 02000513 li a0,32 + 80005cb0: 00080d13 mv s10,a6 + 80005cb4: 000900e7 jalr s2 + 80005cb8: 01013803 ld a6,16(sp) + 80005cbc: fd0b1ee3 bne s6,a6,80005c98 <_vsnprintf+0x678> + 80005cc0: 02013983 ld s3,32(sp) + 80005cc4: 000b0d13 mv s10,s6 + 80005cc8: 9edff06f j 800056b4 <_vsnprintf+0x94> + 80005ccc: 0006879b sext.w a5,a3 + 80005cd0: 00f13823 sd a5,16(sp) + 80005cd4: e21ff06f j 80005af4 <_vsnprintf+0x4d4> + 80005cd8: 0c05e593 ori a1,a1,192 + 80005cdc: 00264503 lbu a0,2(a2) + 80005ce0: 0005859b sext.w a1,a1 + 80005ce4: 00360b93 addi s7,a2,3 + 80005ce8: ad5ff06f j 800057bc <_vsnprintf+0x19c> + 80005cec: 00000413 li s0,0 + 80005cf0: b91ff06f j 80005880 <_vsnprintf+0x260> + 80005cf4: 01013703 ld a4,16(sp) + 80005cf8: 0017079b addiw a5,a4,1 + 80005cfc: 21b77c63 bgeu a4,s11,80005f14 <_vsnprintf+0x8f4> + 80005d00: fffd879b addiw a5,s11,-1 + 80005d04: 40e787bb subw a5,a5,a4 + 80005d08: 02079793 slli a5,a5,0x20 + 80005d0c: 0207d793 srli a5,a5,0x20 + 80005d10: 001d0813 addi a6,s10,1 + 80005d14: 01078b33 add s6,a5,a6 + 80005d18: 00c0006f j 80005d24 <_vsnprintf+0x704> + 80005d1c: 01013803 ld a6,16(sp) + 80005d20: 00180813 addi a6,a6,1 + 80005d24: 000d0613 mv a2,s10 + 80005d28: 000c0693 mv a3,s8 + 80005d2c: 00080d13 mv s10,a6 + 80005d30: 01013823 sd a6,16(sp) + 80005d34: 00048593 mv a1,s1 + 80005d38: 02000513 li a0,32 + 80005d3c: 000900e7 jalr s2 + 80005d40: fd6d1ee3 bne s10,s6,80005d1c <_vsnprintf+0x6fc> + 80005d44: 000ac503 lbu a0,0(s5) + 80005d48: 001d879b addiw a5,s11,1 + 80005d4c: 00f13823 sd a5,16(sp) + 80005d50: dc051ce3 bnez a0,80005b28 <_vsnprintf+0x508> + 80005d54: 000d0b13 mv s6,s10 + 80005d58: f69ff06f j 80005cc0 <_vsnprintf+0x6a0> + 80005d5c: 00100793 li a5,1 + 80005d60: 1bb7f463 bgeu a5,s11,80005f08 <_vsnprintf+0x8e8> + 80005d64: ffed879b addiw a5,s11,-2 + 80005d68: 02079a93 slli s5,a5,0x20 + 80005d6c: 020ada93 srli s5,s5,0x20 + 80005d70: 010a8ab3 add s5,s5,a6 + 80005d74: 00c0006f j 80005d80 <_vsnprintf+0x760> + 80005d78: 01013803 ld a6,16(sp) + 80005d7c: 00180813 addi a6,a6,1 + 80005d80: 000d0613 mv a2,s10 + 80005d84: 000c0693 mv a3,s8 + 80005d88: 00080d13 mv s10,a6 + 80005d8c: 01013823 sd a6,16(sp) + 80005d90: 00048593 mv a1,s1 + 80005d94: 02000513 li a0,32 + 80005d98: 000900e7 jalr s2 + 80005d9c: fdaa9ee3 bne s5,s10,80005d78 <_vsnprintf+0x758> + 80005da0: 001a8d13 addi s10,s5,1 + 80005da4: 0009c503 lbu a0,0(s3) + 80005da8: 000c0693 mv a3,s8 + 80005dac: 000a8613 mv a2,s5 + 80005db0: 00048593 mv a1,s1 + 80005db4: 000900e7 jalr s2 + 80005db8: 02013983 ld s3,32(sp) + 80005dbc: 8f9ff06f j 800056b4 <_vsnprintf+0x94> + 80005dc0: 0009b783 ld a5,0(s3) + 80005dc4: 000d0613 mv a2,s10 + 80005dc8: 01e13423 sd t5,8(sp) + 80005dcc: 43f7d713 srai a4,a5,0x3f + 80005dd0: 00f745b3 xor a1,a4,a5 + 80005dd4: 01b13023 sd s11,0(sp) + 80005dd8: 000c8893 mv a7,s9 + 80005ddc: 03f7d793 srli a5,a5,0x3f + 80005de0: 40e58733 sub a4,a1,a4 + 80005de4: 000c0693 mv a3,s8 + 80005de8: 00048593 mv a1,s1 + 80005dec: 00090513 mv a0,s2 + 80005df0: ed0ff0ef jal ra,800054c0 <_ntoa_long_long> + 80005df4: 00050d13 mv s10,a0 + 80005df8: 000a8993 mv s3,s5 + 80005dfc: 8b9ff06f j 800056b4 <_vsnprintf+0x94> + 80005e00: 2005f793 andi a5,a1,512 + 80005e04: 0007879b sext.w a5,a5 + 80005e08: 01000813 li a6,16 + 80005e0c: e0dff06f j 80005c18 <_vsnprintf+0x5f8> + 80005e10: 00a00813 li a6,10 + 80005e14: de5ff06f j 80005bf8 <_vsnprintf+0x5d8> + 80005e18: 00800813 li a6,8 + 80005e1c: 00058f13 mv t5,a1 + 80005e20: 400f7713 andi a4,t5,1024 + 80005e24: 06400613 li a2,100 + 80005e28: 000f0793 mv a5,t5 + 80005e2c: 0007071b sext.w a4,a4 + 80005e30: 0ec51c63 bne a0,a2,80005f28 <_vsnprintf+0x908> + 80005e34: dc0712e3 bnez a4,80005bf8 <_vsnprintf+0x5d8> + 80005e38: 2007f793 andi a5,a5,512 + 80005e3c: 0007879b sext.w a5,a5 + 80005e40: b55ff06f j 80005994 <_vsnprintf+0x374> + 80005e44: 0009b703 ld a4,0(s3) + 80005e48: 000d0613 mv a2,s10 + 80005e4c: 01e13423 sd t5,8(sp) + 80005e50: 01b13023 sd s11,0(sp) + 80005e54: 000c8893 mv a7,s9 + 80005e58: 00000793 li a5,0 + 80005e5c: f89ff06f j 80005de4 <_vsnprintf+0x7c4> + 80005e60: 0ff7f793 andi a5,a5,255 + 80005e64: 00078713 mv a4,a5 + 80005e68: b6dff06f j 800059d4 <_vsnprintf+0x3b4> + 80005e6c: 0009c703 lbu a4,0(s3) + 80005e70: dd5ff06f j 80005c44 <_vsnprintf+0x624> + 80005e74: 02013983 ld s3,32(sp) + 80005e78: 000b0d13 mv s10,s6 + 80005e7c: 839ff06f j 800056b4 <_vsnprintf+0x94> + 80005e80: 0009b783 ld a5,0(s3) + 80005e84: 000d0613 mv a2,s10 + 80005e88: 01e13423 sd t5,8(sp) + 80005e8c: 43f7d713 srai a4,a5,0x3f + 80005e90: 00f745b3 xor a1,a4,a5 + 80005e94: 01b13023 sd s11,0(sp) + 80005e98: 000c8893 mv a7,s9 + 80005e9c: 03f7d793 srli a5,a5,0x3f + 80005ea0: 40e58733 sub a4,a1,a4 + 80005ea4: b45ff06f j 800059e8 <_vsnprintf+0x3c8> + 80005ea8: 00200813 li a6,2 + 80005eac: f71ff06f j 80005e1c <_vsnprintf+0x7fc> + 80005eb0: 4005f713 andi a4,a1,1024 + 80005eb4: 0007071b sext.w a4,a4 + 80005eb8: 01000813 li a6,16 + 80005ebc: ff35f593 andi a1,a1,-13 + 80005ec0: 00058f1b sext.w t5,a1 + 80005ec4: d2071ae3 bnez a4,80005bf8 <_vsnprintf+0x5d8> + 80005ec8: d39ff06f j 80005c00 <_vsnprintf+0x5e0> + 80005ecc: 0009b703 ld a4,0(s3) + 80005ed0: 000d0613 mv a2,s10 + 80005ed4: 01e13423 sd t5,8(sp) + 80005ed8: 01b13023 sd s11,0(sp) + 80005edc: 000c8893 mv a7,s9 + 80005ee0: 00000793 li a5,0 + 80005ee4: b05ff06f j 800059e8 <_vsnprintf+0x3c8> + 80005ee8: 41f7d61b sraiw a2,a5,0x1f + 80005eec: 00c7c733 xor a4,a5,a2 + 80005ef0: 40c7073b subw a4,a4,a2 + 80005ef4: ae1ff06f j 800059d4 <_vsnprintf+0x3b4> + 80005ef8: 00013823 sd zero,16(sp) + 80005efc: bf9ff06f j 80005af4 <_vsnprintf+0x4d4> + 80005f00: 0009a703 lw a4,0(s3) + 80005f04: d41ff06f j 80005c44 <_vsnprintf+0x624> + 80005f08: 000d0a93 mv s5,s10 + 80005f0c: 00080d13 mv s10,a6 + 80005f10: e95ff06f j 80005da4 <_vsnprintf+0x784> + 80005f14: 00f13823 sd a5,16(sp) + 80005f18: c00518e3 bnez a0,80005b28 <_vsnprintf+0x508> + 80005f1c: e39ff06f j 80005d54 <_vsnprintf+0x734> + 80005f20: 00a00813 li a6,10 + 80005f24: efdff06f j 80005e20 <_vsnprintf+0x800> + 80005f28: 000f0593 mv a1,t5 + 80005f2c: f91ff06f j 80005ebc <_vsnprintf+0x89c> + +0000000080005f30 <_out_char>: + 80005f30: 00051463 bnez a0,80005f38 <_out_char+0x8> + 80005f34: 00008067 ret + 80005f38: 951fe06f j 80004888 + +0000000080005f3c : + 80005f3c: fa010113 addi sp,sp,-96 + 80005f40: 02810313 addi t1,sp,40 + 80005f44: 02b13423 sd a1,40(sp) + 80005f48: 02c13823 sd a2,48(sp) + 80005f4c: 02d13c23 sd a3,56(sp) + 80005f50: 04e13023 sd a4,64(sp) + 80005f54: 00050693 mv a3,a0 + 80005f58: 00010593 mv a1,sp + 80005f5c: 00030713 mv a4,t1 + 80005f60: fff00613 li a2,-1 + 80005f64: 00000517 auipc a0,0x0 + 80005f68: fcc50513 addi a0,a0,-52 # 80005f30 <_out_char> + 80005f6c: 00113c23 sd ra,24(sp) + 80005f70: 04f13423 sd a5,72(sp) + 80005f74: 05013823 sd a6,80(sp) + 80005f78: 05113c23 sd a7,88(sp) + 80005f7c: 00613423 sd t1,8(sp) + 80005f80: ea0ff0ef jal ra,80005620 <_vsnprintf> + 80005f84: 01813083 ld ra,24(sp) + 80005f88: 06010113 addi sp,sp,96 + 80005f8c: 00008067 ret + +0000000080005f90 : + 80005f90: fb010113 addi sp,sp,-80 + 80005f94: 02010313 addi t1,sp,32 + 80005f98: 02c13023 sd a2,32(sp) + 80005f9c: 02d13423 sd a3,40(sp) + 80005fa0: 02e13823 sd a4,48(sp) + 80005fa4: 00058693 mv a3,a1 + 80005fa8: 00030713 mv a4,t1 + 80005fac: 00050593 mv a1,a0 + 80005fb0: fff00613 li a2,-1 + 80005fb4: fffff517 auipc a0,0xfffff + 80005fb8: f0050513 addi a0,a0,-256 # 80004eb4 <_out_buffer> + 80005fbc: 00113c23 sd ra,24(sp) + 80005fc0: 02f13c23 sd a5,56(sp) + 80005fc4: 05013023 sd a6,64(sp) + 80005fc8: 05113423 sd a7,72(sp) + 80005fcc: 00613423 sd t1,8(sp) + 80005fd0: e50ff0ef jal ra,80005620 <_vsnprintf> + 80005fd4: 01813083 ld ra,24(sp) + 80005fd8: 05010113 addi sp,sp,80 + 80005fdc: 00008067 ret + +0000000080005fe0 : + 80005fe0: 00700713 li a4,7 + 80005fe4: 00050793 mv a5,a0 + 80005fe8: 0ac77a63 bgeu a4,a2,8000609c + 80005fec: 0ff5f893 andi a7,a1,255 + 80005ff0: 00889693 slli a3,a7,0x8 + 80005ff4: 0116e6b3 or a3,a3,a7 + 80005ff8: 01069713 slli a4,a3,0x10 + 80005ffc: 00d766b3 or a3,a4,a3 + 80006000: 02069713 slli a4,a3,0x20 + 80006004: 00757813 andi a6,a0,7 + 80006008: 00d76733 or a4,a4,a3 + 8000600c: 0a080663 beqz a6,800060b8 + 80006010: 00c50633 add a2,a0,a2 + 80006014: 01178023 sb a7,0(a5) + 80006018: 00178793 addi a5,a5,1 + 8000601c: 0077f813 andi a6,a5,7 + 80006020: 40f606b3 sub a3,a2,a5 + 80006024: fe0818e3 bnez a6,80006014 + 80006028: 0066d813 srli a6,a3,0x6 + 8000602c: 04080063 beqz a6,8000606c + 80006030: 00681613 slli a2,a6,0x6 + 80006034: 00078893 mv a7,a5 + 80006038: 00f60633 add a2,a2,a5 + 8000603c: 00e7b023 sd a4,0(a5) + 80006040: 00e7b423 sd a4,8(a5) + 80006044: 00e7b823 sd a4,16(a5) + 80006048: 00e7bc23 sd a4,24(a5) + 8000604c: 02e7b023 sd a4,32(a5) + 80006050: 02e7b423 sd a4,40(a5) + 80006054: 02e7b823 sd a4,48(a5) + 80006058: 02e7bc23 sd a4,56(a5) + 8000605c: 04078793 addi a5,a5,64 + 80006060: fcf61ee3 bne a2,a5,8000603c + 80006064: 00681793 slli a5,a6,0x6 + 80006068: 011787b3 add a5,a5,a7 + 8000606c: 0036d813 srli a6,a3,0x3 + 80006070: 00787813 andi a6,a6,7 + 80006074: 02080263 beqz a6,80006098 + 80006078: 00381613 slli a2,a6,0x3 + 8000607c: 00078893 mv a7,a5 + 80006080: 00f60633 add a2,a2,a5 + 80006084: 00e7b023 sd a4,0(a5) + 80006088: 00878793 addi a5,a5,8 + 8000608c: fef61ce3 bne a2,a5,80006084 + 80006090: 00381793 slli a5,a6,0x3 + 80006094: 011787b3 add a5,a5,a7 + 80006098: 0076f613 andi a2,a3,7 + 8000609c: 0ff5f593 andi a1,a1,255 + 800060a0: 00c78733 add a4,a5,a2 + 800060a4: 00060863 beqz a2,800060b4 + 800060a8: 00b78023 sb a1,0(a5) + 800060ac: 00178793 addi a5,a5,1 + 800060b0: fef71ce3 bne a4,a5,800060a8 + 800060b4: 00008067 ret + 800060b8: 00060693 mv a3,a2 + 800060bc: f6dff06f j 80006028 + +00000000800060c0 : + 800060c0: 1a050e63 beqz a0,8000627c + 800060c4: fd010113 addi sp,sp,-48 + 800060c8: 02813023 sd s0,32(sp) + 800060cc: 00913c23 sd s1,24(sp) + 800060d0: 01f57793 andi a5,a0,31 + 800060d4: 02113423 sd ra,40(sp) + 800060d8: 01213823 sd s2,16(sp) + 800060dc: 01313423 sd s3,8(sp) + 800060e0: 01413023 sd s4,0(sp) + 800060e4: 00050493 mv s1,a0 + 800060e8: 00050413 mv s0,a0 + 800060ec: 00000513 li a0,0 + 800060f0: 14079a63 bnez a5,80006244 + 800060f4: 27f00713 li a4,639 + 800060f8: 00058913 mv s2,a1 + 800060fc: 00078513 mv a0,a5 + 80006100: 14b77263 bgeu a4,a1,80006244 + 80006104: 0074f513 andi a0,s1,7 + 80006108: 00153513 seqz a0,a0 + 8000610c: 00060a13 mv s4,a2 + 80006110: 00068993 mv s3,a3 + 80006114: f8cfe0ef jal ra,800048a0 <_assert> + 80006118: 20048793 addi a5,s1,512 + 8000611c: 2004b023 sd zero,512(s1) + 80006120: 2144b423 sd s4,520(s1) + 80006124: 2134b823 sd s3,528(s1) + 80006128: 00043023 sd zero,0(s0) + 8000612c: 00840413 addi s0,s0,8 + 80006130: fe879ce3 bne a5,s0,80006128 + 80006134: fff00793 li a5,-1 + 80006138: dc090413 addi s0,s2,-576 + 8000613c: 03f79793 slli a5,a5,0x3f + 80006140: 1287f863 bgeu a5,s0,80006270 + 80006144: 00078413 mv s0,a5 + 80006148: 00100513 li a0,1 + 8000614c: f54fe0ef jal ra,800048a0 <_assert> + 80006150: f8300793 li a5,-125 + 80006154: 0017d793 srli a5,a5,0x1 + 80006158: fc040513 addi a0,s0,-64 + 8000615c: 00f53533 sltu a0,a0,a5 + 80006160: f40fe0ef jal ra,800048a0 <_assert> + 80006164: 01f4f513 andi a0,s1,31 + 80006168: 00153513 seqz a0,a0 + 8000616c: f34fe0ef jal ra,800048a0 <_assert> + 80006170: 00100513 li a0,1 + 80006174: 2404b023 sd zero,576(s1) + 80006178: 2404b423 sd zero,584(s1) + 8000617c: 2484b823 sd s0,592(s1) + 80006180: 24048c23 sb zero,600(s1) + 80006184: 2604b023 sd zero,608(s1) + 80006188: 2604b423 sd zero,616(s1) + 8000618c: f14fe0ef jal ra,800048a0 <_assert> + 80006190: 00100513 li a0,1 + 80006194: f0cfe0ef jal ra,800048a0 <_assert> + 80006198: 2504b503 ld a0,592(s1) + 8000619c: 24048a13 addi s4,s1,576 + 800061a0: 04053513 sltiu a0,a0,64 + 800061a4: 00154513 xori a0,a0,1 + 800061a8: 00157513 andi a0,a0,1 + 800061ac: ef4fe0ef jal ra,800048a0 <_assert> + 800061b0: 2504b503 ld a0,592(s1) + 800061b4: 03f57513 andi a0,a0,63 + 800061b8: 00153513 seqz a0,a0 + 800061bc: ee4fe0ef jal ra,800048a0 <_assert> + 800061c0: 2504b703 ld a4,592(s1) + 800061c4: 00100793 li a5,1 + 800061c8: 00675713 srli a4,a4,0x6 + 800061cc: 0ae7fc63 bgeu a5,a4,80006284 + 800061d0: 00000793 li a5,0 + 800061d4: 00100693 li a3,1 + 800061d8: 0017879b addiw a5,a5,1 + 800061dc: 00175713 srli a4,a4,0x1 + 800061e0: 0ff7f793 andi a5,a5,255 + 800061e4: fed71ae3 bne a4,a3,800061d8 + 800061e8: 00078993 mv s3,a5 + 800061ec: 0407b513 sltiu a0,a5,64 + 800061f0: 00f71933 sll s2,a4,a5 + 800061f4: eacfe0ef jal ra,800048a0 <_assert> + 800061f8: 00399793 slli a5,s3,0x3 + 800061fc: 00f487b3 add a5,s1,a5 + 80006200: 0007b703 ld a4,0(a5) + 80006204: 2604b423 sd zero,616(s1) + 80006208: 26e4b023 sd a4,608(s1) + 8000620c: 00070463 beqz a4,80006214 + 80006210: 03473423 sd s4,40(a4) + 80006214: 0147b023 sd s4,0(a5) + 80006218: 2004b503 ld a0,512(s1) + 8000621c: 00a96533 or a0,s2,a0 + 80006220: 20a4b023 sd a0,512(s1) + 80006224: 00a03533 snez a0,a0 + 80006228: e78fe0ef jal ra,800048a0 <_assert> + 8000622c: 00048513 mv a0,s1 + 80006230: 2084bc23 sd s0,536(s1) + 80006234: 2204b023 sd zero,544(s1) + 80006238: 2204b423 sd zero,552(s1) + 8000623c: 2204b823 sd zero,560(s1) + 80006240: 2204bc23 sd zero,568(s1) + 80006244: 02813083 ld ra,40(sp) + 80006248: 02013403 ld s0,32(sp) + 8000624c: 01813483 ld s1,24(sp) + 80006250: 01013903 ld s2,16(sp) + 80006254: 00813983 ld s3,8(sp) + 80006258: 00013a03 ld s4,0(sp) + 8000625c: 03010113 addi sp,sp,48 + 80006260: 00008067 ret + 80006264: 00100513 li a0,1 + 80006268: fff40413 addi s0,s0,-1 + 8000626c: e34fe0ef jal ra,800048a0 <_assert> + 80006270: 03f47793 andi a5,s0,63 + 80006274: fe0798e3 bnez a5,80006264 + 80006278: ed1ff06f j 80006148 + 8000627c: 00000513 li a0,0 + 80006280: 00008067 ret + 80006284: 00100913 li s2,1 + 80006288: 00000993 li s3,0 + 8000628c: 00100513 li a0,1 + 80006290: f65ff06f j 800061f4 diff --git a/bin/custom-output/benchmark/microbench/microbench-ref.elf b/bin/custom-output/benchmark/microbench/microbench-ref.elf new file mode 100755 index 0000000000000000000000000000000000000000..d4449a6dd5543955cd94fdce5cdbcc9230c1bae3 GIT binary patch literal 256912 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 J|3p8N{|i@bv9tgH literal 0 HcmV?d00001 diff --git a/bin/custom-output/benchmark/microbench/microbench-ref.txt b/bin/custom-output/benchmark/microbench/microbench-ref.txt new file mode 100755 index 0000000..4f82cea --- /dev/null +++ b/bin/custom-output/benchmark/microbench/microbench-ref.txt @@ -0,0 +1,6486 @@ + +/home/hzb/test/am-kernels/benchmarks/microbench/build/microbench-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00010117 auipc sp,0x10 + 80000008: ffc10113 addi sp,sp,-4 # 80010000 <_end> + 8000000c: 0ad040ef jal ra,800048b8 <_trm_init> + +0000000080000010 : + 80000010: fd010113 addi sp,sp,-48 + 80000014: 3e800593 li a1,1000 + 80000018: 02813023 sd s0,32(sp) + 8000001c: 02113423 sd ra,40(sp) + 80000020: 00050413 mv s0,a0 + 80000024: 00913c23 sd s1,24(sp) + 80000028: 01213823 sd s2,16(sp) + 8000002c: 01313423 sd s3,8(sp) + 80000030: 119040ef jal ra,80004948 <__udivdi3> + 80000034: 0055179b slliw a5,a0,0x5 + 80000038: 40a787bb subw a5,a5,a0 + 8000003c: 0027979b slliw a5,a5,0x2 + 80000040: 00a787bb addw a5,a5,a0 + 80000044: 0037979b slliw a5,a5,0x3 + 80000048: 02079793 slli a5,a5,0x20 + 8000004c: 0207d793 srli a5,a5,0x20 + 80000050: 40f40433 sub s0,s0,a5 + 80000054: 3e700793 li a5,999 + 80000058: 0887e263 bltu a5,s0,800000dc + 8000005c: 00008497 auipc s1,0x8 + 80000060: 93c48493 addi s1,s1,-1732 # 80007998 + 80000064: 0005061b sext.w a2,a0 + 80000068: 00006597 auipc a1,0x6 + 8000006c: 29058593 addi a1,a1,656 # 800062f8 <_etext+0x64> + 80000070: 00048513 mv a0,s1 + 80000074: 71d050ef jal ra,80005f90 + 80000078: fff5051b addiw a0,a0,-1 + 8000007c: 00a484b3 add s1,s1,a0 + 80000080: 02040c63 beqz s0,800000b8 + 80000084: 00900993 li s3,9 + 80000088: 00a00593 li a1,10 + 8000008c: 00040513 mv a0,s0 + 80000090: 101040ef jal ra,80004990 <__umoddi3> + 80000094: 0305079b addiw a5,a0,48 + 80000098: 00f48023 sb a5,0(s1) + 8000009c: 00040513 mv a0,s0 + 800000a0: 00a00593 li a1,10 + 800000a4: 00040913 mv s2,s0 + 800000a8: 0a1040ef jal ra,80004948 <__udivdi3> + 800000ac: fff48493 addi s1,s1,-1 + 800000b0: 00050413 mv s0,a0 + 800000b4: fd29eae3 bltu s3,s2,80000088 + 800000b8: 02813083 ld ra,40(sp) + 800000bc: 02013403 ld s0,32(sp) + 800000c0: 01813483 ld s1,24(sp) + 800000c4: 01013903 ld s2,16(sp) + 800000c8: 00813983 ld s3,8(sp) + 800000cc: 00008517 auipc a0,0x8 + 800000d0: 8cc50513 addi a0,a0,-1844 # 80007998 + 800000d4: 03010113 addi sp,sp,48 + 800000d8: 00008067 ret + 800000dc: 01100613 li a2,17 + 800000e0: 00006597 auipc a1,0x6 + 800000e4: 1b858593 addi a1,a1,440 # 80006298 <_etext+0x4> + 800000e8: 00006517 auipc a0,0x6 + 800000ec: 1f050513 addi a0,a0,496 # 800062d8 <_etext+0x44> + 800000f0: 64d050ef jal ra,80005f3c + 800000f4: 00100513 li a0,1 + 800000f8: 79c040ef jal ra,80004894 + +00000000800000fc
: + 800000fc: f5010113 addi sp,sp,-176 + 80000100: 0a113423 sd ra,168(sp) + 80000104: 0a813023 sd s0,160(sp) + 80000108: 08913c23 sd s1,152(sp) + 8000010c: 09213823 sd s2,144(sp) + 80000110: 09313423 sd s3,136(sp) + 80000114: 09413023 sd s4,128(sp) + 80000118: 07513c23 sd s5,120(sp) + 8000011c: 07613823 sd s6,112(sp) + 80000120: 07713423 sd s7,104(sp) + 80000124: 07813023 sd s8,96(sp) + 80000128: 05913c23 sd s9,88(sp) + 8000012c: 05a13823 sd s10,80(sp) + 80000130: 05b13423 sd s11,72(sp) + 80000134: 30050c63 beqz a0,8000044c + 80000138: 00006597 auipc a1,0x6 + 8000013c: 29058593 addi a1,a1,656 # 800063c8 <_etext+0x134> + 80000140: 00050413 mv s0,a0 + 80000144: 50d040ef jal ra,80004e50 + 80000148: 30050263 beqz a0,8000044c + 8000014c: 00006597 auipc a1,0x6 + 80000150: 1f458593 addi a1,a1,500 # 80006340 <_etext+0xac> + 80000154: 00040513 mv a0,s0 + 80000158: 4f9040ef jal ra,80004e50 + 8000015c: 00a13423 sd a0,8(sp) + 80000160: 02050063 beqz a0,80000180 + 80000164: 00006597 auipc a1,0x6 + 80000168: 1e458593 addi a1,a1,484 # 80006348 <_etext+0xb4> + 8000016c: 00040513 mv a0,s0 + 80000170: 4e1040ef jal ra,80004e50 + 80000174: 00100793 li a5,1 + 80000178: 00f13423 sd a5,8(sp) + 8000017c: 34051663 bnez a0,800004c8 + 80000180: 105040ef jal ra,80004a84 + 80000184: 00040593 mv a1,s0 + 80000188: 00006517 auipc a0,0x6 + 8000018c: 21050513 addi a0,a0,528 # 80006398 <_etext+0x104> + 80000190: 5ad050ef jal ra,80005f3c + 80000194: 03810593 addi a1,sp,56 + 80000198: 00600513 li a0,6 + 8000019c: 13d040ef jal ra,80004ad8 + 800001a0: 00813783 ld a5,8(sp) + 800001a4: 00007c17 auipc s8,0x7 + 800001a8: c4cc0c13 addi s8,s8,-948 # 80006df0 + 800001ac: 00007b97 auipc s7,0x7 + 800001b0: 2d4b8b93 addi s7,s7,724 # 80007480 + 800001b4: 00178993 addi s3,a5,1 + 800001b8: 03813783 ld a5,56(sp) + 800001bc: 00599993 slli s3,s3,0x5 + 800001c0: fe098b13 addi s6,s3,-32 + 800001c4: 02f13423 sd a5,40(sp) + 800001c8: 00100793 li a5,1 + 800001cc: 00000d93 li s11,0 + 800001d0: 00f13c23 sd a5,24(sp) + 800001d4: 02013023 sd zero,32(sp) + 800001d8: 00008497 auipc s1,0x8 + 800001dc: 8f048493 addi s1,s1,-1808 # 80007ac8 + 800001e0: 00008a97 auipc s5,0x8 + 800001e4: 8f0a8a93 addi s5,s5,-1808 # 80007ad0 + 800001e8: 00898993 addi s3,s3,8 + 800001ec: 00007417 auipc s0,0x7 + 800001f0: 39c40413 addi s0,s0,924 # 80007588 + 800001f4: 00006a17 auipc s4,0x6 + 800001f8: 1dca0a13 addi s4,s4,476 # 800063d0 <_etext+0x13c> + 800001fc: 00006d17 auipc s10,0x6 + 80000200: 1e4d0d13 addi s10,s10,484 # 800063e0 <_etext+0x14c> + 80000204: 00006c97 auipc s9,0x6 + 80000208: 1f4c8c93 addi s9,s9,500 # 800063f8 <_etext+0x164> + 8000020c: 01c0006f j 80000228 + 80000210: 52d050ef jal ra,80005f3c + 80000214: 000d0593 mv a1,s10 + 80000218: 000c8513 mv a0,s9 + 8000021c: 0a8c0c13 addi s8,s8,168 + 80000220: 51d050ef jal ra,80005f3c + 80000224: 137c0a63 beq s8,s7,80000358 + 80000228: 00043603 ld a2,0(s0) + 8000022c: 00843703 ld a4,8(s0) + 80000230: 016c06b3 add a3,s8,s6 + 80000234: 0306b683 ld a3,48(a3) + 80000238: 018985b3 add a1,s3,s8 + 8000023c: 00bab023 sd a1,0(s5) + 80000240: 40c70733 sub a4,a4,a2 + 80000244: 0184b023 sd s8,0(s1) + 80000248: 018c3583 ld a1,24(s8) + 8000024c: 020c3603 ld a2,32(s8) + 80000250: 000a0513 mv a0,s4 + 80000254: fad76ee3 bltu a4,a3,80000210 + 80000258: 4e5050ef jal ra,80005f3c + 8000025c: 0004b683 ld a3,0(s1) + 80000260: 00043703 ld a4,0(s0) + 80000264: 00007797 auipc a5,0x7 + 80000268: 75478793 addi a5,a5,1876 # 800079b8 + 8000026c: 0006b683 ld a3,0(a3) + 80000270: 00770713 addi a4,a4,7 + 80000274: ff877713 andi a4,a4,-8 + 80000278: 00e7b023 sd a4,0(a5) + 8000027c: 000680e7 jalr a3 + 80000280: 03810593 addi a1,sp,56 + 80000284: 00600513 li a0,6 + 80000288: 051040ef jal ra,80004ad8 + 8000028c: 0004b703 ld a4,0(s1) + 80000290: 03813903 ld s2,56(sp) + 80000294: 00873703 ld a4,8(a4) + 80000298: 000700e7 jalr a4 + 8000029c: 03810593 addi a1,sp,56 + 800002a0: 00600513 li a0,6 + 800002a4: 035040ef jal ra,80004ad8 + 800002a8: 0004b703 ld a4,0(s1) + 800002ac: 03813683 ld a3,56(sp) + 800002b0: 01073703 ld a4,16(a4) + 800002b4: 41268933 sub s2,a3,s2 + 800002b8: 000700e7 jalr a4 + 800002bc: 1c050663 beqz a0,80000488 + 800002c0: 00a13823 sd a0,16(sp) + 800002c4: 00006517 auipc a0,0x6 + 800002c8: 14450513 addi a0,a0,324 # 80006408 <_etext+0x174> + 800002cc: 471050ef jal ra,80005f3c + 800002d0: 01013703 ld a4,16(sp) + 800002d4: 00177713 andi a4,a4,1 + 800002d8: 1a070e63 beqz a4,80000494 + 800002dc: 00006517 auipc a0,0x6 + 800002e0: 13450513 addi a0,a0,308 # 80006410 <_etext+0x17c> + 800002e4: 459050ef jal ra,80005f3c + 800002e8: 00013823 sd zero,16(sp) + 800002ec: 04090663 beqz s2,80000338 + 800002f0: 000ab703 ld a4,0(s5) + 800002f4: 00090593 mv a1,s2 + 800002f8: 01073683 ld a3,16(a4) + 800002fc: 00169713 slli a4,a3,0x1 + 80000300: 00d70733 add a4,a4,a3 + 80000304: 00671513 slli a0,a4,0x6 + 80000308: 00a70533 add a0,a4,a0 + 8000030c: 00251513 slli a0,a0,0x2 + 80000310: 00d50533 add a0,a0,a3 + 80000314: 00251513 slli a0,a0,0x2 + 80000318: 00d50533 add a0,a0,a3 + 8000031c: 00551513 slli a0,a0,0x5 + 80000320: 628040ef jal ra,80004948 <__udivdi3> + 80000324: 0005079b sext.w a5,a0 + 80000328: 00f13823 sd a5,16(sp) + 8000032c: 02013783 ld a5,32(sp) + 80000330: 00f507bb addw a5,a0,a5 + 80000334: 02f13023 sd a5,32(sp) + 80000338: 00006517 auipc a0,0x6 + 8000033c: 16850513 addi a0,a0,360 # 800064a0 <_etext+0x20c> + 80000340: 3fd050ef jal ra,80005f3c + 80000344: 00813783 ld a5,8(sp) + 80000348: 10079e63 bnez a5,80000464 + 8000034c: 012d8db3 add s11,s11,s2 + 80000350: 0a8c0c13 addi s8,s8,168 + 80000354: ed7c1ae3 bne s8,s7,80000228 + 80000358: 03810593 addi a1,sp,56 + 8000035c: 00600513 li a0,6 + 80000360: 778040ef jal ra,80004ad8 + 80000364: 02813783 ld a5,40(sp) + 80000368: 03813403 ld s0,56(sp) + 8000036c: 00006517 auipc a0,0x6 + 80000370: 0dc50513 addi a0,a0,220 # 80006448 <_etext+0x1b4> + 80000374: 40f40433 sub s0,s0,a5 + 80000378: 3c5050ef jal ra,80005f3c + 8000037c: 01813783 ld a5,24(sp) + 80000380: 00006597 auipc a1,0x6 + 80000384: f8858593 addi a1,a1,-120 # 80006308 <_etext+0x74> + 80000388: 12078263 beqz a5,800004ac + 8000038c: 00006517 auipc a0,0x6 + 80000390: 0f450513 addi a0,a0,244 # 80006480 <_etext+0x1ec> + 80000394: 3a9050ef jal ra,80005f3c + 80000398: 00813703 ld a4,8(sp) + 8000039c: 00100793 li a5,1 + 800003a0: 10e7dc63 bge a5,a4,800004b8 + 800003a4: 02016503 lwu a0,32(sp) + 800003a8: 00a00593 li a1,10 + 800003ac: 59c040ef jal ra,80004948 <__udivdi3> + 800003b0: 0005059b sext.w a1,a0 + 800003b4: 00006517 auipc a0,0x6 + 800003b8: 0dc50513 addi a0,a0,220 # 80006490 <_etext+0x1fc> + 800003bc: 381050ef jal ra,80005f3c + 800003c0: 000185b7 lui a1,0x18 + 800003c4: 00006617 auipc a2,0x6 + 800003c8: 0e460613 addi a2,a2,228 # 800064a8 <_etext+0x214> + 800003cc: 6a058593 addi a1,a1,1696 # 186a0 <_entry_offset+0x186a0> + 800003d0: 00006517 auipc a0,0x6 + 800003d4: 0f050513 addi a0,a0,240 # 800064c0 <_etext+0x22c> + 800003d8: 365050ef jal ra,80005f3c + 800003dc: 000d8513 mv a0,s11 + 800003e0: c31ff0ef jal ra,80000010 + 800003e4: 00050593 mv a1,a0 + 800003e8: 00006517 auipc a0,0x6 + 800003ec: 10050513 addi a0,a0,256 # 800064e8 <_etext+0x254> + 800003f0: 34d050ef jal ra,80005f3c + 800003f4: 00040513 mv a0,s0 + 800003f8: c19ff0ef jal ra,80000010 + 800003fc: 00050593 mv a1,a0 + 80000400: 00006517 auipc a0,0x6 + 80000404: 10050513 addi a0,a0,256 # 80006500 <_etext+0x26c> + 80000408: 335050ef jal ra,80005f3c + 8000040c: 0a813083 ld ra,168(sp) + 80000410: 0a013403 ld s0,160(sp) + 80000414: 09813483 ld s1,152(sp) + 80000418: 09013903 ld s2,144(sp) + 8000041c: 08813983 ld s3,136(sp) + 80000420: 08013a03 ld s4,128(sp) + 80000424: 07813a83 ld s5,120(sp) + 80000428: 07013b03 ld s6,112(sp) + 8000042c: 06813b83 ld s7,104(sp) + 80000430: 06013c03 ld s8,96(sp) + 80000434: 05813c83 ld s9,88(sp) + 80000438: 05013d03 ld s10,80(sp) + 8000043c: 04813d83 ld s11,72(sp) + 80000440: 00000513 li a0,0 + 80000444: 0b010113 addi sp,sp,176 + 80000448: 00008067 ret + 8000044c: 00006517 auipc a0,0x6 + 80000450: ecc50513 addi a0,a0,-308 # 80006318 <_etext+0x84> + 80000454: 2e9050ef jal ra,80005f3c + 80000458: 00006417 auipc s0,0x6 + 8000045c: ea840413 addi s0,s0,-344 # 80006300 <_etext+0x6c> + 80000460: cedff06f j 8000014c + 80000464: 00090513 mv a0,s2 + 80000468: ba9ff0ef jal ra,80000010 + 8000046c: 01013603 ld a2,16(sp) + 80000470: 00050593 mv a1,a0 + 80000474: 00006517 auipc a0,0x6 + 80000478: fbc50513 addi a0,a0,-68 # 80006430 <_etext+0x19c> + 8000047c: 2c1050ef jal ra,80005f3c + 80000480: 012d8db3 add s11,s11,s2 + 80000484: ecdff06f j 80000350 + 80000488: 00006517 auipc a0,0x6 + 8000048c: 09050513 addi a0,a0,144 # 80006518 <_etext+0x284> + 80000490: 2ad050ef jal ra,80005f3c + 80000494: 00006517 auipc a0,0x6 + 80000498: f8c50513 addi a0,a0,-116 # 80006420 <_etext+0x18c> + 8000049c: 2a1050ef jal ra,80005f3c + 800004a0: 00013c23 sd zero,24(sp) + 800004a4: 00013823 sd zero,16(sp) + 800004a8: e91ff06f j 80000338 + 800004ac: 00006597 auipc a1,0x6 + 800004b0: e6458593 addi a1,a1,-412 # 80006310 <_etext+0x7c> + 800004b4: ed9ff06f j 8000038c + 800004b8: 00006517 auipc a0,0x6 + 800004bc: fe850513 addi a0,a0,-24 # 800064a0 <_etext+0x20c> + 800004c0: 27d050ef jal ra,80005f3c + 800004c4: f19ff06f j 800003dc + 800004c8: 00006597 auipc a1,0x6 + 800004cc: e3858593 addi a1,a1,-456 # 80006300 <_etext+0x6c> + 800004d0: 00040513 mv a0,s0 + 800004d4: 17d040ef jal ra,80004e50 + 800004d8: 00200793 li a5,2 + 800004dc: 00f13423 sd a5,8(sp) + 800004e0: ca0500e3 beqz a0,80000180 + 800004e4: 00006597 auipc a1,0x6 + 800004e8: e6c58593 addi a1,a1,-404 # 80006350 <_etext+0xbc> + 800004ec: 00040513 mv a0,s0 + 800004f0: 161040ef jal ra,80004e50 + 800004f4: 00300793 li a5,3 + 800004f8: 00f13423 sd a5,8(sp) + 800004fc: c80502e3 beqz a0,80000180 + 80000500: 00040593 mv a1,s0 + 80000504: 00006517 auipc a0,0x6 + 80000508: e5450513 addi a0,a0,-428 # 80006358 <_etext+0xc4> + 8000050c: 231050ef jal ra,80005f3c + 80000510: 00100513 li a0,1 + 80000514: 380040ef jal ra,80004894 + +0000000080000518 : + 80000518: 00007597 auipc a1,0x7 + 8000051c: 4a058593 addi a1,a1,1184 # 800079b8 + 80000520: 0005b683 ld a3,0(a1) + 80000524: 00750713 addi a4,a0,7 + 80000528: 00007797 auipc a5,0x7 + 8000052c: 06078793 addi a5,a5,96 # 80007588 + 80000530: ff010113 addi sp,sp,-16 + 80000534: ff877713 andi a4,a4,-8 + 80000538: 0007b603 ld a2,0(a5) + 8000053c: 00113423 sd ra,8(sp) + 80000540: 00e68733 add a4,a3,a4 + 80000544: 00e5b023 sd a4,0(a1) + 80000548: 04c76263 bltu a4,a2,8000058c + 8000054c: 0087b783 ld a5,8(a5) + 80000550: 02f77e63 bgeu a4,a5,8000058c + 80000554: 00068793 mv a5,a3 + 80000558: 00d70863 beq a4,a3,80000568 + 8000055c: 0007b023 sd zero,0(a5) + 80000560: 00878793 addi a5,a5,8 + 80000564: fef71ce3 bne a4,a5,8000055c + 80000568: 00007797 auipc a5,0x7 + 8000056c: 5687b783 ld a5,1384(a5) # 80007ad0 + 80000570: 0087b783 ld a5,8(a5) + 80000574: 40c70733 sub a4,a4,a2 + 80000578: 02e7ea63 bltu a5,a4,800005ac + 8000057c: 00813083 ld ra,8(sp) + 80000580: 00068513 mv a0,a3 + 80000584: 01010113 addi sp,sp,16 + 80000588: 00008067 ret + 8000058c: 0a100613 li a2,161 + 80000590: 00006597 auipc a1,0x6 + 80000594: d0858593 addi a1,a1,-760 # 80006298 <_etext+0x4> + 80000598: 00006517 auipc a0,0x6 + 8000059c: d4050513 addi a0,a0,-704 # 800062d8 <_etext+0x44> + 800005a0: 19d050ef jal ra,80005f3c + 800005a4: 00100513 li a0,1 + 800005a8: 2ec040ef jal ra,80004894 + 800005ac: 0a500613 li a2,165 + 800005b0: fe1ff06f j 80000590 + +00000000800005b4 : + 800005b4: 03151513 slli a0,a0,0x31 + 800005b8: 03155513 srli a0,a0,0x31 + 800005bc: 00007797 auipc a5,0x7 + 800005c0: eca7a223 sw a0,-316(a5) # 80007480 + 800005c4: 00008067 ret + +00000000800005c8 : + 800005c8: 00007697 auipc a3,0x7 + 800005cc: eb868693 addi a3,a3,-328 # 80007480 + 800005d0: 0006a703 lw a4,0(a3) + 800005d4: 0017179b slliw a5,a4,0x1 + 800005d8: 00e787bb addw a5,a5,a4 + 800005dc: 0027979b slliw a5,a5,0x2 + 800005e0: 00e787bb addw a5,a5,a4 + 800005e4: 0047979b slliw a5,a5,0x4 + 800005e8: 00e787bb addw a5,a5,a4 + 800005ec: 0087979b slliw a5,a5,0x8 + 800005f0: 40e787bb subw a5,a5,a4 + 800005f4: 0027979b slliw a5,a5,0x2 + 800005f8: 00e787bb addw a5,a5,a4 + 800005fc: 0026a737 lui a4,0x26a + 80000600: ec37071b addiw a4,a4,-317 + 80000604: 00e787bb addw a5,a5,a4 + 80000608: 02179513 slli a0,a5,0x21 + 8000060c: 00f6a023 sw a5,0(a3) + 80000610: 03155513 srli a0,a0,0x31 + 80000614: 00008067 ret + +0000000080000618 : + 80000618: 00450613 addi a2,a0,4 + 8000061c: 08b67063 bgeu a2,a1,8000069c + 80000620: 811ca737 lui a4,0x811ca + 80000624: dc570713 addi a4,a4,-571 # ffffffff811c9dc5 <_end+0xffffffff011b9dc5> + 80000628: 00050693 mv a3,a0 + 8000062c: 0006c783 lbu a5,0(a3) + 80000630: 00168693 addi a3,a3,1 + 80000634: 00f74733 xor a4,a4,a5 + 80000638: 00f7179b slliw a5,a4,0xf + 8000063c: 00e787bb addw a5,a5,a4 + 80000640: 0027979b slliw a5,a5,0x2 + 80000644: 40e787bb subw a5,a5,a4 + 80000648: 0037979b slliw a5,a5,0x3 + 8000064c: 00e787bb addw a5,a5,a4 + 80000650: 0027979b slliw a5,a5,0x2 + 80000654: 00e787bb addw a5,a5,a4 + 80000658: 0027979b slliw a5,a5,0x2 + 8000065c: 40e7873b subw a4,a5,a4 + 80000660: fcd616e3 bne a2,a3,8000062c + 80000664: 00460613 addi a2,a2,4 + 80000668: 00450513 addi a0,a0,4 + 8000066c: fab66ee3 bltu a2,a1,80000628 + 80000670: 00d7151b slliw a0,a4,0xd + 80000674: 00e5073b addw a4,a0,a4 + 80000678: 4077551b sraiw a0,a4,0x7 + 8000067c: 00a74733 xor a4,a4,a0 + 80000680: 0037151b slliw a0,a4,0x3 + 80000684: 00e5053b addw a0,a0,a4 + 80000688: 4115579b sraiw a5,a0,0x11 + 8000068c: 00f54533 xor a0,a0,a5 + 80000690: 0055179b slliw a5,a0,0x5 + 80000694: 00a7853b addw a0,a5,a0 + 80000698: 00008067 ret + 8000069c: a6f00537 lui a0,0xa6f00 + 800006a0: 79e50513 addi a0,a0,1950 # ffffffffa6f0079e <_end+0xffffffff26ef079e> + 800006a4: 00008067 ret + +00000000800006a8 <_ZN5Dinic3DFSEii>: + 800006a8: 00c52783 lw a5,12(a0) + 800006ac: fc010113 addi sp,sp,-64 + 800006b0: 01413823 sd s4,16(sp) + 800006b4: 01513423 sd s5,8(sp) + 800006b8: 02113c23 sd ra,56(sp) + 800006bc: 02813823 sd s0,48(sp) + 800006c0: 02913423 sd s1,40(sp) + 800006c4: 03213023 sd s2,32(sp) + 800006c8: 01313c23 sd s3,24(sp) + 800006cc: 01613023 sd s6,0(sp) + 800006d0: 00060a13 mv s4,a2 + 800006d4: 00060a93 mv s5,a2 + 800006d8: 0cb78663 beq a5,a1,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 800006dc: 00000a93 li s5,0 + 800006e0: 0c060263 beqz a2,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 800006e4: 03053783 ld a5,48(a0) + 800006e8: 00259993 slli s3,a1,0x2 + 800006ec: fff00713 li a4,-1 + 800006f0: 013787b3 add a5,a5,s3 + 800006f4: 0007a403 lw s0,0(a5) + 800006f8: 00050913 mv s2,a0 + 800006fc: 0ae40463 beq s0,a4,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 80000700: fff00b13 li s6,-1 + 80000704: 0180006f j 8000071c <_ZN5Dinic3DFSEii+0x74> + 80000708: 02093783 ld a5,32(s2) + 8000070c: 00241413 slli s0,s0,0x2 + 80000710: 00878433 add s0,a5,s0 + 80000714: 00042403 lw s0,0(s0) + 80000718: 09640663 beq s0,s6,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 8000071c: 01093703 ld a4,16(s2) + 80000720: 00441493 slli s1,s0,0x4 + 80000724: 02893783 ld a5,40(s2) + 80000728: 009704b3 add s1,a4,s1 + 8000072c: 0044a583 lw a1,4(s1) + 80000730: 01378733 add a4,a5,s3 + 80000734: 00072703 lw a4,0(a4) + 80000738: 00259693 slli a3,a1,0x2 + 8000073c: 00d787b3 add a5,a5,a3 + 80000740: 0007a683 lw a3,0(a5) + 80000744: 0017079b addiw a5,a4,1 + 80000748: fcd790e3 bne a5,a3,80000708 <_ZN5Dinic3DFSEii+0x60> + 8000074c: 0084a603 lw a2,8(s1) + 80000750: 00c4a783 lw a5,12(s1) + 80000754: 00090513 mv a0,s2 + 80000758: 40f607bb subw a5,a2,a5 + 8000075c: 00078613 mv a2,a5 + 80000760: 00fa5463 bge s4,a5,80000768 <_ZN5Dinic3DFSEii+0xc0> + 80000764: 000a061b sext.w a2,s4 + 80000768: f41ff0ef jal ra,800006a8 <_ZN5Dinic3DFSEii> + 8000076c: 00144793 xori a5,s0,1 + 80000770: 00479793 slli a5,a5,0x4 + 80000774: f8a05ae3 blez a0,80000708 <_ZN5Dinic3DFSEii+0x60> + 80000778: 00c4a683 lw a3,12(s1) + 8000077c: 01093703 ld a4,16(s2) + 80000780: 40aa0a3b subw s4,s4,a0 + 80000784: 00a686bb addw a3,a3,a0 + 80000788: 00d4a623 sw a3,12(s1) + 8000078c: 00f707b3 add a5,a4,a5 + 80000790: 00c7a703 lw a4,12(a5) + 80000794: 01550abb addw s5,a0,s5 + 80000798: 40a7053b subw a0,a4,a0 + 8000079c: 00a7a623 sw a0,12(a5) + 800007a0: f60a14e3 bnez s4,80000708 <_ZN5Dinic3DFSEii+0x60> + 800007a4: 03813083 ld ra,56(sp) + 800007a8: 03013403 ld s0,48(sp) + 800007ac: 02813483 ld s1,40(sp) + 800007b0: 02013903 ld s2,32(sp) + 800007b4: 01813983 ld s3,24(sp) + 800007b8: 01013a03 ld s4,16(sp) + 800007bc: 00013b03 ld s6,0(sp) + 800007c0: 000a8513 mv a0,s5 + 800007c4: 00813a83 ld s5,8(sp) + 800007c8: 04010113 addi sp,sp,64 + 800007cc: 00008067 ret + +00000000800007d0 : + 800007d0: 00007797 auipc a5,0x7 + 800007d4: 3007b783 ld a5,768(a5) # 80007ad0 + 800007d8: 0007a783 lw a5,0(a5) + 800007dc: fa010113 addi sp,sp,-96 + 800007e0: 05213023 sd s2,64(sp) + 800007e4: 00100513 li a0,1 + 800007e8: 00007917 auipc s2,0x7 + 800007ec: 1e090913 addi s2,s2,480 # 800079c8 <_ZL1N> + 800007f0: 04113c23 sd ra,88(sp) + 800007f4: 00f92023 sw a5,0(s2) + 800007f8: 04913423 sd s1,72(sp) + 800007fc: 03313c23 sd s3,56(sp) + 80000800: 03413823 sd s4,48(sp) + 80000804: 03513423 sd s5,40(sp) + 80000808: 03613023 sd s6,32(sp) + 8000080c: 01713c23 sd s7,24(sp) + 80000810: 01813823 sd s8,16(sp) + 80000814: 04813823 sd s0,80(sp) + 80000818: 01913423 sd s9,8(sp) + 8000081c: 01a13023 sd s10,0(sp) + 80000820: d95ff0ef jal ra,800005b4 + 80000824: 04800513 li a0,72 + 80000828: 00092b03 lw s6,0(s2) + 8000082c: cedff0ef jal ra,80000518 + 80000830: 00092783 lw a5,0(s2) + 80000834: 00007997 auipc s3,0x7 + 80000838: 18c98993 addi s3,s3,396 # 800079c0 <_ZL1G> + 8000083c: 00050493 mv s1,a0 + 80000840: 0017879b addiw a5,a5,1 + 80000844: 00179c1b slliw s8,a5,0x1 + 80000848: ffec0a1b addiw s4,s8,-2 + 8000084c: 401a559b sraiw a1,s4,0x1 + 80000850: 00058a13 mv s4,a1 + 80000854: 00a9b023 sd a0,0(s3) + 80000858: 00058513 mv a0,a1 + 8000085c: 080040ef jal ra,800048dc <__muldi3> + 80000860: 001a1a1b slliw s4,s4,0x1 + 80000864: 00aa0a3b addw s4,s4,a0 + 80000868: 001a1a1b slliw s4,s4,0x1 + 8000086c: 004a1513 slli a0,s4,0x4 + 80000870: 002c1a93 slli s5,s8,0x2 + 80000874: ca5ff0ef jal ra,80000518 + 80000878: 00a4b823 sd a0,16(s1) + 8000087c: 000a8513 mv a0,s5 + 80000880: c99ff0ef jal ra,80000518 + 80000884: 00a4bc23 sd a0,24(s1) + 80000888: 002a1513 slli a0,s4,0x2 + 8000088c: c8dff0ef jal ra,80000518 + 80000890: 02a4b023 sd a0,32(s1) + 80000894: 000c0513 mv a0,s8 + 80000898: c81ff0ef jal ra,80000518 + 8000089c: 04a4b023 sd a0,64(s1) + 800008a0: 000a8513 mv a0,s5 + 800008a4: c75ff0ef jal ra,80000518 + 800008a8: 02a4b423 sd a0,40(s1) + 800008ac: 000a8513 mv a0,s5 + 800008b0: c69ff0ef jal ra,80000518 + 800008b4: 02a4b823 sd a0,48(s1) + 800008b8: 000a8513 mv a0,s5 + 800008bc: c5dff0ef jal ra,80000518 + 800008c0: 001b1b9b slliw s7,s6,0x1 + 800008c4: 02a4bc23 sd a0,56(s1) + 800008c8: 0184a023 sw s8,0(s1) + 800008cc: 001b8b1b addiw s6,s7,1 + 800008d0: 03805863 blez s8,80000900 + 800008d4: fffc071b addiw a4,s8,-1 + 800008d8: 02071713 slli a4,a4,0x20 + 800008dc: 0184b783 ld a5,24(s1) + 800008e0: 02075713 srli a4,a4,0x20 + 800008e4: 00170713 addi a4,a4,1 + 800008e8: 00271713 slli a4,a4,0x2 + 800008ec: 00f70733 add a4,a4,a5 + 800008f0: fff00693 li a3,-1 + 800008f4: 00d7a023 sw a3,0(a5) + 800008f8: 00478793 addi a5,a5,4 + 800008fc: fee79ce3 bne a5,a4,800008f4 + 80000900: 00092c83 lw s9,0(s2) + 80000904: 0004a223 sw zero,4(s1) + 80000908: 27905c63 blez s9,80000b80 + 8000090c: 00000a93 li s5,0 + 80000910: 00000493 li s1,0 + 80000914: 002a9a13 slli s4,s5,0x2 + 80000918: 00000c13 li s8,0 + 8000091c: 0d905463 blez s9,800009e4 + 80000920: 0009b403 ld s0,0(s3) + 80000924: ca5ff0ef jal ra,800005c8 + 80000928: 02051513 slli a0,a0,0x20 + 8000092c: 00a00593 li a1,10 + 80000930: 02055513 srli a0,a0,0x20 + 80000934: 05c040ef jal ra,80004990 <__umoddi3> + 80000938: 018c873b addw a4,s9,s8 + 8000093c: 0005051b sext.w a0,a0 + 80000940: 00092c83 lw s9,0(s2) + 80000944: 00070813 mv a6,a4 + 80000948: 00271593 slli a1,a4,0x2 + 8000094c: 001c0c1b addiw s8,s8,1 + 80000950: 08050863 beqz a0,800009e0 + 80000954: 00442703 lw a4,4(s0) + 80000958: 01043783 ld a5,16(s0) + 8000095c: 01843603 ld a2,24(s0) + 80000960: 00471693 slli a3,a4,0x4 + 80000964: 00d786b3 add a3,a5,a3 + 80000968: 0096a023 sw s1,0(a3) + 8000096c: 00a6a423 sw a0,8(a3) + 80000970: 0106a223 sw a6,4(a3) + 80000974: 0006a623 sw zero,12(a3) + 80000978: 01460533 add a0,a2,s4 + 8000097c: 02043683 ld a3,32(s0) + 80000980: 00052883 lw a7,0(a0) + 80000984: 00271713 slli a4,a4,0x2 + 80000988: 00e68733 add a4,a3,a4 + 8000098c: 01172023 sw a7,0(a4) + 80000990: 00442883 lw a7,4(s0) + 80000994: 00b60733 add a4,a2,a1 + 80000998: 0018861b addiw a2,a7,1 + 8000099c: 00c42223 sw a2,4(s0) + 800009a0: 01152023 sw a7,0(a0) + 800009a4: 00442603 lw a2,4(s0) + 800009a8: 00461593 slli a1,a2,0x4 + 800009ac: 00b787b3 add a5,a5,a1 + 800009b0: 0107a023 sw a6,0(a5) + 800009b4: 0097a223 sw s1,4(a5) + 800009b8: 0007a423 sw zero,8(a5) + 800009bc: 0007a623 sw zero,12(a5) + 800009c0: 00072783 lw a5,0(a4) + 800009c4: 00261613 slli a2,a2,0x2 + 800009c8: 00c686b3 add a3,a3,a2 + 800009cc: 00f6a023 sw a5,0(a3) + 800009d0: 00442783 lw a5,4(s0) + 800009d4: 0017869b addiw a3,a5,1 + 800009d8: 00d42223 sw a3,4(s0) + 800009dc: 00f72023 sw a5,0(a4) + 800009e0: f59c40e3 blt s8,s9,80000920 + 800009e4: 001a8a93 addi s5,s5,1 + 800009e8: 000a849b sext.w s1,s5 + 800009ec: f394c4e3 blt s1,s9,80000914 + 800009f0: 19905863 blez s9,80000b80 + 800009f4: 002b9a93 slli s5,s7,0x2 + 800009f8: 002b1a13 slli s4,s6,0x2 + 800009fc: 00000c13 li s8,0 + 80000a00: 00000c93 li s9,0 + 80000a04: 0009b483 ld s1,0(s3) + 80000a08: bc1ff0ef jal ra,800005c8 + 80000a0c: 02051513 slli a0,a0,0x20 + 80000a10: 3e800593 li a1,1000 + 80000a14: 02055513 srli a0,a0,0x20 + 80000a18: 779030ef jal ra,80004990 <__umoddi3> + 80000a1c: 0005051b sext.w a0,a0 + 80000a20: 002c1813 slli a6,s8,0x2 + 80000a24: 0009b403 ld s0,0(s3) + 80000a28: 00092d03 lw s10,0(s2) + 80000a2c: 001c0c13 addi s8,s8,1 + 80000a30: 08050863 beqz a0,80000ac0 + 80000a34: 0044a703 lw a4,4(s1) + 80000a38: 0104b783 ld a5,16(s1) + 80000a3c: 0184b603 ld a2,24(s1) + 80000a40: 00471693 slli a3,a4,0x4 + 80000a44: 00d786b3 add a3,a5,a3 + 80000a48: 0176a023 sw s7,0(a3) + 80000a4c: 0196a223 sw s9,4(a3) + 80000a50: 00a6a423 sw a0,8(a3) + 80000a54: 0006a623 sw zero,12(a3) + 80000a58: 015605b3 add a1,a2,s5 + 80000a5c: 0204b683 ld a3,32(s1) + 80000a60: 0005a503 lw a0,0(a1) + 80000a64: 00271713 slli a4,a4,0x2 + 80000a68: 00e68733 add a4,a3,a4 + 80000a6c: 00a72023 sw a0,0(a4) + 80000a70: 0044a503 lw a0,4(s1) + 80000a74: 01060733 add a4,a2,a6 + 80000a78: 0015061b addiw a2,a0,1 + 80000a7c: 00c4a223 sw a2,4(s1) + 80000a80: 00a5a023 sw a0,0(a1) + 80000a84: 0044a603 lw a2,4(s1) + 80000a88: 00461593 slli a1,a2,0x4 + 80000a8c: 00b787b3 add a5,a5,a1 + 80000a90: 0197a023 sw s9,0(a5) + 80000a94: 0177a223 sw s7,4(a5) + 80000a98: 0007a423 sw zero,8(a5) + 80000a9c: 0007a623 sw zero,12(a5) + 80000aa0: 00072783 lw a5,0(a4) + 80000aa4: 00261613 slli a2,a2,0x2 + 80000aa8: 00c686b3 add a3,a3,a2 + 80000aac: 00f6a023 sw a5,0(a3) + 80000ab0: 0044a783 lw a5,4(s1) + 80000ab4: 0017869b addiw a3,a5,1 + 80000ab8: 00d4a223 sw a3,4(s1) + 80000abc: 00f72023 sw a5,0(a4) + 80000ac0: b09ff0ef jal ra,800005c8 + 80000ac4: 02051513 slli a0,a0,0x20 + 80000ac8: 3e800593 li a1,1000 + 80000acc: 02055513 srli a0,a0,0x20 + 80000ad0: 6c1030ef jal ra,80004990 <__umoddi3> + 80000ad4: 019d07bb addw a5,s10,s9 + 80000ad8: 0005051b sext.w a0,a0 + 80000adc: 00078813 mv a6,a5 + 80000ae0: 00092883 lw a7,0(s2) + 80000ae4: 00279793 slli a5,a5,0x2 + 80000ae8: 000c0c9b sext.w s9,s8 + 80000aec: 08050863 beqz a0,80000b7c + 80000af0: 00442683 lw a3,4(s0) + 80000af4: 01043703 ld a4,16(s0) + 80000af8: 01843583 ld a1,24(s0) + 80000afc: 00469613 slli a2,a3,0x4 + 80000b00: 00c70633 add a2,a4,a2 + 80000b04: 01062023 sw a6,0(a2) + 80000b08: 01662223 sw s6,4(a2) + 80000b0c: 00a62423 sw a0,8(a2) + 80000b10: 00062623 sw zero,12(a2) + 80000b14: 00f587b3 add a5,a1,a5 + 80000b18: 02043603 ld a2,32(s0) + 80000b1c: 0007a503 lw a0,0(a5) + 80000b20: 00269693 slli a3,a3,0x2 + 80000b24: 00d606b3 add a3,a2,a3 + 80000b28: 00a6a023 sw a0,0(a3) + 80000b2c: 00442503 lw a0,4(s0) + 80000b30: 014586b3 add a3,a1,s4 + 80000b34: 0015059b addiw a1,a0,1 + 80000b38: 00b42223 sw a1,4(s0) + 80000b3c: 00a7a023 sw a0,0(a5) + 80000b40: 00442583 lw a1,4(s0) + 80000b44: 00459793 slli a5,a1,0x4 + 80000b48: 00f707b3 add a5,a4,a5 + 80000b4c: 0167a023 sw s6,0(a5) + 80000b50: 0107a223 sw a6,4(a5) + 80000b54: 0007a423 sw zero,8(a5) + 80000b58: 0007a623 sw zero,12(a5) + 80000b5c: 0006a783 lw a5,0(a3) + 80000b60: 00259593 slli a1,a1,0x2 + 80000b64: 00b60633 add a2,a2,a1 + 80000b68: 00f62023 sw a5,0(a2) + 80000b6c: 00442783 lw a5,4(s0) + 80000b70: 0017871b addiw a4,a5,1 + 80000b74: 00e42223 sw a4,4(s0) + 80000b78: 00f6a023 sw a5,0(a3) + 80000b7c: e91cc4e3 blt s9,a7,80000a04 + 80000b80: 05813083 ld ra,88(sp) + 80000b84: 05013403 ld s0,80(sp) + 80000b88: 04813483 ld s1,72(sp) + 80000b8c: 04013903 ld s2,64(sp) + 80000b90: 03813983 ld s3,56(sp) + 80000b94: 03013a03 ld s4,48(sp) + 80000b98: 02813a83 ld s5,40(sp) + 80000b9c: 02013b03 ld s6,32(sp) + 80000ba0: 01813b83 ld s7,24(sp) + 80000ba4: 01013c03 ld s8,16(sp) + 80000ba8: 00813c83 ld s9,8(sp) + 80000bac: 00013d03 ld s10,0(sp) + 80000bb0: 06010113 addi sp,sp,96 + 80000bb4: 00008067 ret + +0000000080000bb8 : + 80000bb8: f3010113 addi sp,sp,-208 + 80000bbc: 0c813023 sd s0,192(sp) + 80000bc0: 00007717 auipc a4,0x7 + 80000bc4: e0872703 lw a4,-504(a4) # 800079c8 <_ZL1N> + 80000bc8: 00007417 auipc s0,0x7 + 80000bcc: df843403 ld s0,-520(s0) # 800079c0 <_ZL1G> + 80000bd0: 00171f1b slliw t5,a4,0x1 + 80000bd4: 04043683 ld a3,64(s0) + 80000bd8: 03843583 ld a1,56(s0) + 80000bdc: 02843783 ld a5,40(s0) + 80000be0: 01843503 ld a0,24(s0) + 80000be4: 09513c23 sd s5,152(sp) + 80000be8: 0c113423 sd ra,200(sp) + 80000bec: 0a913c23 sd s1,184(sp) + 80000bf0: 0b213823 sd s2,176(sp) + 80000bf4: 0b313423 sd s3,168(sp) + 80000bf8: 0b413023 sd s4,160(sp) + 80000bfc: 09613823 sd s6,144(sp) + 80000c00: 09713423 sd s7,136(sp) + 80000c04: 09813023 sd s8,128(sp) + 80000c08: 07913c23 sd s9,120(sp) + 80000c0c: 07a13823 sd s10,112(sp) + 80000c10: 07b13423 sd s11,104(sp) + 80000c14: 001f061b addiw a2,t5,1 + 80000c18: 002f1713 slli a4,t5,0x2 + 80000c1c: 01e42423 sw t5,8(s0) + 80000c20: 00c42623 sw a2,12(s0) + 80000c24: 00e13023 sd a4,0(sp) + 80000c28: 000f0893 mv a7,t5 + 80000c2c: 00000813 li a6,0 + 80000c30: fff00a93 li s5,-1 + 80000c34: 00042703 lw a4,0(s0) + 80000c38: 02e05463 blez a4,80000c60 + 80000c3c: fff7071b addiw a4,a4,-1 + 80000c40: 02071713 slli a4,a4,0x20 + 80000c44: 02075713 srli a4,a4,0x20 + 80000c48: 00170713 addi a4,a4,1 + 80000c4c: 00068613 mv a2,a3 + 80000c50: 00d70733 add a4,a4,a3 + 80000c54: 00060023 sb zero,0(a2) + 80000c58: 00160613 addi a2,a2,1 + 80000c5c: fec71ce3 bne a4,a2,80000c54 + 80000c60: 0115a023 sw a7,0(a1) + 80000c64: 00842703 lw a4,8(s0) + 80000c68: 00100613 li a2,1 + 80000c6c: 00058e93 mv t4,a1 + 80000c70: 00271713 slli a4,a4,0x2 + 80000c74: 00e78733 add a4,a5,a4 + 80000c78: 00072023 sw zero,0(a4) + 80000c7c: 00842703 lw a4,8(s0) + 80000c80: 00100e13 li t3,1 + 80000c84: 00000f93 li t6,0 + 80000c88: 00e68733 add a4,a3,a4 + 80000c8c: 00c70023 sb a2,0(a4) + 80000c90: 000ea603 lw a2,0(t4) + 80000c94: 001f8f9b addiw t6,t6,1 + 80000c98: 00261613 slli a2,a2,0x2 + 80000c9c: 00c50733 add a4,a0,a2 + 80000ca0: 00072703 lw a4,0(a4) + 80000ca4: 07570a63 beq a4,s5,80000d18 + 80000ca8: 01043903 ld s2,16(s0) + 80000cac: 02043483 ld s1,32(s0) + 80000cb0: 00c788b3 add a7,a5,a2 + 80000cb4: 00471313 slli t1,a4,0x4 + 80000cb8: 00690333 add t1,s2,t1 + 80000cbc: 00432603 lw a2,4(t1) + 80000cc0: 00271713 slli a4,a4,0x2 + 80000cc4: 00e48733 add a4,s1,a4 + 80000cc8: 00c689b3 add s3,a3,a2 + 80000ccc: 0009c283 lbu t0,0(s3) + 80000cd0: 04029063 bnez t0,80000d10 + 80000cd4: 00832a03 lw s4,8(t1) + 80000cd8: 00c32383 lw t2,12(t1) + 80000cdc: 00261613 slli a2,a2,0x2 + 80000ce0: 002e1293 slli t0,t3,0x2 + 80000ce4: 00c78633 add a2,a5,a2 + 80000ce8: 005582b3 add t0,a1,t0 + 80000cec: 0343d263 bge t2,s4,80000d10 + 80000cf0: 0008a383 lw t2,0(a7) + 80000cf4: 00100a13 li s4,1 + 80000cf8: 01498023 sb s4,0(s3) + 80000cfc: 0013839b addiw t2,t2,1 + 80000d00: 00762023 sw t2,0(a2) + 80000d04: 00432603 lw a2,4(t1) + 80000d08: 001e0e1b addiw t3,t3,1 + 80000d0c: 00c2a023 sw a2,0(t0) + 80000d10: 00072703 lw a4,0(a4) + 80000d14: fb5710e3 bne a4,s5,80000cb4 + 80000d18: 004e8e93 addi t4,t4,4 + 80000d1c: f7cf9ae3 bne t6,t3,80000c90 + 80000d20: 00c42703 lw a4,12(s0) + 80000d24: 00e68633 add a2,a3,a4 + 80000d28: 00064603 lbu a2,0(a2) + 80000d2c: 38060063 beqz a2,800010ac + 80000d30: 00042603 lw a2,0(s0) + 80000d34: 02c05863 blez a2,80000d64 + 80000d38: 03043883 ld a7,48(s0) + 80000d3c: 00050613 mv a2,a0 + 80000d40: 00000713 li a4,0 + 80000d44: 00062303 lw t1,0(a2) + 80000d48: 0017071b addiw a4,a4,1 + 80000d4c: 00460613 addi a2,a2,4 + 80000d50: 0068a023 sw t1,0(a7) + 80000d54: 00042303 lw t1,0(s0) + 80000d58: 00488893 addi a7,a7,4 + 80000d5c: fe6744e3 blt a4,t1,80000d44 + 80000d60: 00c42703 lw a4,12(s0) + 80000d64: 38ef0663 beq t5,a4,800010f0 + 80000d68: 03043703 ld a4,48(s0) + 80000d6c: 00013603 ld a2,0(sp) + 80000d70: 00c70733 add a4,a4,a2 + 80000d74: 00072b83 lw s7,0(a4) + 80000d78: 335b8663 beq s7,s5,800010a4 + 80000d7c: 003f4db7 lui s11,0x3f4 + 80000d80: 00000e93 li t4,0 + 80000d84: f3fd8d93 addi s11,s11,-193 # 3f3f3f <_entry_offset+0x3f3f3f> + 80000d88: 0180006f j 80000da0 + 80000d8c: 02043703 ld a4,32(s0) + 80000d90: 002b9b93 slli s7,s7,0x2 + 80000d94: 01770bb3 add s7,a4,s7 + 80000d98: 000bab83 lw s7,0(s7) + 80000d9c: 2f5b8c63 beq s7,s5,80001094 + 80000da0: 01043a03 ld s4,16(s0) + 80000da4: 004b9b13 slli s6,s7,0x4 + 80000da8: 00013703 ld a4,0(sp) + 80000dac: 016a0b33 add s6,s4,s6 + 80000db0: 004b2603 lw a2,4(s6) + 80000db4: 00e78733 add a4,a5,a4 + 80000db8: 00072703 lw a4,0(a4) + 80000dbc: 00261f93 slli t6,a2,0x2 + 80000dc0: 01f786b3 add a3,a5,t6 + 80000dc4: 0006a683 lw a3,0(a3) + 80000dc8: 0017071b addiw a4,a4,1 + 80000dcc: fcd710e3 bne a4,a3,80000d8c + 80000dd0: 008b2483 lw s1,8(s6) + 80000dd4: 00cb2703 lw a4,12(s6) + 80000dd8: 40e4873b subw a4,s1,a4 + 80000ddc: 00070493 mv s1,a4 + 80000de0: 00edd463 bge s11,a4,80000de8 + 80000de4: 000d849b sext.w s1,s11 + 80000de8: 00c42703 lw a4,12(s0) + 80000dec: 34c70663 beq a4,a2,80001138 + 80000df0: f8048ee3 beqz s1,80000d8c + 80000df4: 03043703 ld a4,48(s0) + 80000df8: 01f70733 add a4,a4,t6 + 80000dfc: 00072c03 lw s8,0(a4) + 80000e00: f95c06e3 beq s8,s5,80000d8c + 80000e04: 00048893 mv a7,s1 + 80000e08: 00000493 li s1,0 + 80000e0c: 0240006f j 80000e30 + 80000e10: 02043703 ld a4,32(s0) + 80000e14: 002c1c13 slli s8,s8,0x2 + 80000e18: 01870c33 add s8,a4,s8 + 80000e1c: 000c2c03 lw s8,0(s8) + 80000e20: 315c0c63 beq s8,s5,80001138 + 80000e24: 01f78733 add a4,a5,t6 + 80000e28: 01043a03 ld s4,16(s0) + 80000e2c: 00072683 lw a3,0(a4) + 80000e30: 004c1713 slli a4,s8,0x4 + 80000e34: 00ea0733 add a4,s4,a4 + 80000e38: 00472583 lw a1,4(a4) + 80000e3c: 0016869b addiw a3,a3,1 + 80000e40: 00259293 slli t0,a1,0x2 + 80000e44: 00578633 add a2,a5,t0 + 80000e48: 00062603 lw a2,0(a2) + 80000e4c: fcc692e3 bne a3,a2,80000e10 + 80000e50: 00872903 lw s2,8(a4) + 80000e54: 00c72683 lw a3,12(a4) + 80000e58: 40d906bb subw a3,s2,a3 + 80000e5c: 00068913 mv s2,a3 + 80000e60: 00d8d463 bge a7,a3,80000e68 + 80000e64: 0008891b sext.w s2,a7 + 80000e68: 00c42683 lw a3,12(s0) + 80000e6c: 2cb68063 beq a3,a1,8000112c + 80000e70: fa0900e3 beqz s2,80000e10 + 80000e74: 03043683 ld a3,48(s0) + 80000e78: 005686b3 add a3,a3,t0 + 80000e7c: 0006ac83 lw s9,0(a3) + 80000e80: f95c88e3 beq s9,s5,80000e10 + 80000e84: 00090313 mv t1,s2 + 80000e88: 00000913 li s2,0 + 80000e8c: 0240006f j 80000eb0 + 80000e90: 02043683 ld a3,32(s0) + 80000e94: 002c9c93 slli s9,s9,0x2 + 80000e98: 01968cb3 add s9,a3,s9 + 80000e9c: 000cac83 lw s9,0(s9) + 80000ea0: 295c8663 beq s9,s5,8000112c + 80000ea4: 005786b3 add a3,a5,t0 + 80000ea8: 01043a03 ld s4,16(s0) + 80000eac: 0006a603 lw a2,0(a3) + 80000eb0: 004c9693 slli a3,s9,0x4 + 80000eb4: 00da06b3 add a3,s4,a3 + 80000eb8: 0046a583 lw a1,4(a3) + 80000ebc: 0016051b addiw a0,a2,1 + 80000ec0: 00259393 slli t2,a1,0x2 + 80000ec4: 00778633 add a2,a5,t2 + 80000ec8: 00062603 lw a2,0(a2) + 80000ecc: fcc512e3 bne a0,a2,80000e90 + 80000ed0: 0086a983 lw s3,8(a3) + 80000ed4: 00c6a503 lw a0,12(a3) + 80000ed8: 40a9853b subw a0,s3,a0 + 80000edc: 00050993 mv s3,a0 + 80000ee0: 00a35463 bge t1,a0,80000ee8 + 80000ee4: 0003099b sext.w s3,t1 + 80000ee8: 00c42503 lw a0,12(s0) + 80000eec: 22b50a63 beq a0,a1,80001120 + 80000ef0: fa0980e3 beqz s3,80000e90 + 80000ef4: 03043583 ld a1,48(s0) + 80000ef8: 007585b3 add a1,a1,t2 + 80000efc: 0005ad03 lw s10,0(a1) + 80000f00: f95d08e3 beq s10,s5,80000e90 + 80000f04: 00098e13 mv t3,s3 + 80000f08: 00000993 li s3,0 + 80000f0c: 0240006f j 80000f30 + 80000f10: 02043583 ld a1,32(s0) + 80000f14: 002d1d13 slli s10,s10,0x2 + 80000f18: 00778633 add a2,a5,t2 + 80000f1c: 01a58d33 add s10,a1,s10 + 80000f20: 000d2d03 lw s10,0(s10) + 80000f24: 1f5d0e63 beq s10,s5,80001120 + 80000f28: 01043a03 ld s4,16(s0) + 80000f2c: 00062603 lw a2,0(a2) + 80000f30: 004d1593 slli a1,s10,0x4 + 80000f34: 00ba0a33 add s4,s4,a1 + 80000f38: 004a2583 lw a1,4(s4) + 80000f3c: 0016051b addiw a0,a2,1 + 80000f40: 00259613 slli a2,a1,0x2 + 80000f44: 00c78633 add a2,a5,a2 + 80000f48: 00062603 lw a2,0(a2) + 80000f4c: fcc512e3 bne a0,a2,80000f10 + 80000f50: 008a2603 lw a2,8(s4) + 80000f54: 00ca2783 lw a5,12(s4) + 80000f58: 00040513 mv a0,s0 + 80000f5c: 40f607bb subw a5,a2,a5 + 80000f60: 00078613 mv a2,a5 + 80000f64: 00fe5463 bge t3,a5,80000f6c + 80000f68: 000e061b sext.w a2,t3 + 80000f6c: 05c13c23 sd t3,88(sp) + 80000f70: 04613823 sd t1,80(sp) + 80000f74: 04713423 sd t2,72(sp) + 80000f78: 04d13023 sd a3,64(sp) + 80000f7c: 03113c23 sd a7,56(sp) + 80000f80: 02513823 sd t0,48(sp) + 80000f84: 02e13423 sd a4,40(sp) + 80000f88: 03d13023 sd t4,32(sp) + 80000f8c: 01f13c23 sd t6,24(sp) + 80000f90: 01013823 sd a6,16(sp) + 80000f94: 01e13423 sd t5,8(sp) + 80000f98: f10ff0ef jal ra,800006a8 <_ZN5Dinic3DFSEii> + 80000f9c: 001d4593 xori a1,s10,1 + 80000fa0: 00813f03 ld t5,8(sp) + 80000fa4: 01013803 ld a6,16(sp) + 80000fa8: 01813f83 ld t6,24(sp) + 80000fac: 02013e83 ld t4,32(sp) + 80000fb0: 02813703 ld a4,40(sp) + 80000fb4: 03013283 ld t0,48(sp) + 80000fb8: 03813883 ld a7,56(sp) + 80000fbc: 04013683 ld a3,64(sp) + 80000fc0: 04813383 ld t2,72(sp) + 80000fc4: 05013303 ld t1,80(sp) + 80000fc8: 05813e03 ld t3,88(sp) + 80000fcc: 00459593 slli a1,a1,0x4 + 80000fd0: 12a05a63 blez a0,80001104 + 80000fd4: 00ca2783 lw a5,12(s4) + 80000fd8: 01043603 ld a2,16(s0) + 80000fdc: 40ae0e3b subw t3,t3,a0 + 80000fe0: 00a787bb addw a5,a5,a0 + 80000fe4: 00fa2623 sw a5,12(s4) + 80000fe8: 00b605b3 add a1,a2,a1 + 80000fec: 00c5aa03 lw s4,12(a1) + 80000ff0: 00a989bb addw s3,s3,a0 + 80000ff4: 02843783 ld a5,40(s0) + 80000ff8: 40aa053b subw a0,s4,a0 + 80000ffc: 00a5a623 sw a0,12(a1) + 80001000: f00e18e3 bnez t3,80000f10 + 80001004: 00c6a503 lw a0,12(a3) + 80001008: 001cc593 xori a1,s9,1 + 8000100c: 00459593 slli a1,a1,0x4 + 80001010: 0135053b addw a0,a0,s3 + 80001014: 00a6a623 sw a0,12(a3) + 80001018: 00b606b3 add a3,a2,a1 + 8000101c: 00c6a583 lw a1,12(a3) + 80001020: 4133033b subw t1,t1,s3 + 80001024: 0139093b addw s2,s2,s3 + 80001028: 413589bb subw s3,a1,s3 + 8000102c: 0136a623 sw s3,12(a3) + 80001030: e60310e3 bnez t1,80000e90 + 80001034: 00c72583 lw a1,12(a4) + 80001038: 001c4693 xori a3,s8,1 + 8000103c: 00469693 slli a3,a3,0x4 + 80001040: 012585bb addw a1,a1,s2 + 80001044: 00b72623 sw a1,12(a4) + 80001048: 00d60733 add a4,a2,a3 + 8000104c: 00c72683 lw a3,12(a4) + 80001050: 412888bb subw a7,a7,s2 + 80001054: 012484bb addw s1,s1,s2 + 80001058: 4126893b subw s2,a3,s2 + 8000105c: 01272623 sw s2,12(a4) + 80001060: da0898e3 bnez a7,80000e10 + 80001064: 00cb2683 lw a3,12(s6) + 80001068: 001bc713 xori a4,s7,1 + 8000106c: 00471713 slli a4,a4,0x4 + 80001070: 009686bb addw a3,a3,s1 + 80001074: 00db2623 sw a3,12(s6) + 80001078: 00e60633 add a2,a2,a4 + 8000107c: 00c62703 lw a4,12(a2) + 80001080: 409d8dbb subw s11,s11,s1 + 80001084: 009e8ebb addw t4,t4,s1 + 80001088: 409704bb subw s1,a4,s1 + 8000108c: 00962623 sw s1,12(a2) + 80001090: ce0d9ee3 bnez s11,80000d8c + 80001094: 04043683 ld a3,64(s0) + 80001098: 03843583 ld a1,56(s0) + 8000109c: 01843503 ld a0,24(s0) + 800010a0: 01d8083b addw a6,a6,t4 + 800010a4: 00842883 lw a7,8(s0) + 800010a8: b8dff06f j 80000c34 + 800010ac: 0c813083 ld ra,200(sp) + 800010b0: 0c013403 ld s0,192(sp) + 800010b4: 00007797 auipc a5,0x7 + 800010b8: 9107ac23 sw a6,-1768(a5) # 800079cc <_ZL3ans> + 800010bc: 0b813483 ld s1,184(sp) + 800010c0: 0b013903 ld s2,176(sp) + 800010c4: 0a813983 ld s3,168(sp) + 800010c8: 0a013a03 ld s4,160(sp) + 800010cc: 09813a83 ld s5,152(sp) + 800010d0: 09013b03 ld s6,144(sp) + 800010d4: 08813b83 ld s7,136(sp) + 800010d8: 08013c03 ld s8,128(sp) + 800010dc: 07813c83 ld s9,120(sp) + 800010e0: 07013d03 ld s10,112(sp) + 800010e4: 06813d83 ld s11,104(sp) + 800010e8: 0d010113 addi sp,sp,208 + 800010ec: 00008067 ret + 800010f0: 003f4737 lui a4,0x3f4 + 800010f4: f3f7071b addiw a4,a4,-193 + 800010f8: 00842883 lw a7,8(s0) + 800010fc: 0107083b addw a6,a4,a6 + 80001100: b35ff06f j 80000c34 + 80001104: 02043583 ld a1,32(s0) + 80001108: 002d1d13 slli s10,s10,0x2 + 8000110c: 02843783 ld a5,40(s0) + 80001110: 01a58d33 add s10,a1,s10 + 80001114: 000d2d03 lw s10,0(s10) + 80001118: 00778633 add a2,a5,t2 + 8000111c: e15d16e3 bne s10,s5,80000f28 + 80001120: d73058e3 blez s3,80000e90 + 80001124: 01043603 ld a2,16(s0) + 80001128: eddff06f j 80001004 + 8000112c: cf2052e3 blez s2,80000e10 + 80001130: 01043603 ld a2,16(s0) + 80001134: f01ff06f j 80001034 + 80001138: c4905ae3 blez s1,80000d8c + 8000113c: 01043603 ld a2,16(s0) + 80001140: f25ff06f j 80001064 + +0000000080001144 : + 80001144: 00007797 auipc a5,0x7 + 80001148: 98c7b783 ld a5,-1652(a5) # 80007ad0 + 8000114c: 0187a503 lw a0,24(a5) + 80001150: 00007797 auipc a5,0x7 + 80001154: 87c7a783 lw a5,-1924(a5) # 800079cc <_ZL3ans> + 80001158: 40f50533 sub a0,a0,a5 + 8000115c: 00153513 seqz a0,a0 + 80001160: 00008067 ret + +0000000080001164 <_ZL9radixPassPiS_S_ii>: + 80001164: fd010113 addi sp,sp,-48 + 80001168: 0017079b addiw a5,a4,1 + 8000116c: 02813023 sd s0,32(sp) + 80001170: 01413023 sd s4,0(sp) + 80001174: 00050413 mv s0,a0 + 80001178: 00070a13 mv s4,a4 + 8000117c: 00279513 slli a0,a5,0x2 + 80001180: 00913c23 sd s1,24(sp) + 80001184: 01213823 sd s2,16(sp) + 80001188: 01313423 sd s3,8(sp) + 8000118c: 02113423 sd ra,40(sp) + 80001190: 00058993 mv s3,a1 + 80001194: 00060493 mv s1,a2 + 80001198: 00068913 mv s2,a3 + 8000119c: b7cff0ef jal ra,80000518 + 800011a0: 0e0a4c63 bltz s4,80001298 <_ZL9radixPassPiS_S_ii+0x134> + 800011a4: 001a0713 addi a4,s4,1 + 800011a8: 00271713 slli a4,a4,0x2 + 800011ac: 00050793 mv a5,a0 + 800011b0: 00a70733 add a4,a4,a0 + 800011b4: 0007a023 sw zero,0(a5) + 800011b8: 00478793 addi a5,a5,4 + 800011bc: fef71ce3 bne a4,a5,800011b4 <_ZL9radixPassPiS_S_ii+0x50> + 800011c0: 05205663 blez s2,8000120c <_ZL9radixPassPiS_S_ii+0xa8> + 800011c4: fff9071b addiw a4,s2,-1 + 800011c8: 02071713 slli a4,a4,0x20 + 800011cc: 01e75793 srli a5,a4,0x1e + 800011d0: 00440713 addi a4,s0,4 + 800011d4: 00040813 mv a6,s0 + 800011d8: 00e78733 add a4,a5,a4 + 800011dc: 00082783 lw a5,0(a6) + 800011e0: 00480813 addi a6,a6,4 + 800011e4: 00279793 slli a5,a5,0x2 + 800011e8: 00f487b3 add a5,s1,a5 + 800011ec: 0007a783 lw a5,0(a5) + 800011f0: 00279793 slli a5,a5,0x2 + 800011f4: 00f507b3 add a5,a0,a5 + 800011f8: 0007a883 lw a7,0(a5) + 800011fc: 0018889b addiw a7,a7,1 + 80001200: 0117a023 sw a7,0(a5) + 80001204: fd071ce3 bne a4,a6,800011dc <_ZL9radixPassPiS_S_ii+0x78> + 80001208: 020a4663 bltz s4,80001234 <_ZL9radixPassPiS_S_ii+0xd0> + 8000120c: 00050793 mv a5,a0 + 80001210: 00000693 li a3,0 + 80001214: 00000813 li a6,0 + 80001218: 0007a603 lw a2,0(a5) + 8000121c: 0018081b addiw a6,a6,1 + 80001220: 00d7a023 sw a3,0(a5) + 80001224: 00d606bb addw a3,a2,a3 + 80001228: 00478793 addi a5,a5,4 + 8000122c: ff0a56e3 bge s4,a6,80001218 <_ZL9radixPassPiS_S_ii+0xb4> + 80001230: 05205463 blez s2,80001278 <_ZL9radixPassPiS_S_ii+0x114> + 80001234: 00040893 mv a7,s0 + 80001238: 00000813 li a6,0 + 8000123c: 0008a683 lw a3,0(a7) + 80001240: 0018081b addiw a6,a6,1 + 80001244: 00488893 addi a7,a7,4 + 80001248: 00269793 slli a5,a3,0x2 + 8000124c: 00f487b3 add a5,s1,a5 + 80001250: 0007a703 lw a4,0(a5) + 80001254: 00271713 slli a4,a4,0x2 + 80001258: 00e50733 add a4,a0,a4 + 8000125c: 00072783 lw a5,0(a4) # 3f4000 <_entry_offset+0x3f4000> + 80001260: 0017861b addiw a2,a5,1 + 80001264: 00279793 slli a5,a5,0x2 + 80001268: 00c72023 sw a2,0(a4) + 8000126c: 00f987b3 add a5,s3,a5 + 80001270: 00d7a023 sw a3,0(a5) + 80001274: fd2844e3 blt a6,s2,8000123c <_ZL9radixPassPiS_S_ii+0xd8> + 80001278: 02813083 ld ra,40(sp) + 8000127c: 02013403 ld s0,32(sp) + 80001280: 01813483 ld s1,24(sp) + 80001284: 01013903 ld s2,16(sp) + 80001288: 00813983 ld s3,8(sp) + 8000128c: 00013a03 ld s4,0(sp) + 80001290: 03010113 addi sp,sp,48 + 80001294: 00008067 ret + 80001298: f32046e3 bgtz s2,800011c4 <_ZL9radixPassPiS_S_ii+0x60> + 8000129c: fddff06f j 80001278 <_ZL9radixPassPiS_S_ii+0x114> + +00000000800012a0 <_Z11suffixArrayPiS_ii>: + 800012a0: f4010113 addi sp,sp,-192 + 800012a4: 09313c23 sd s3,152(sp) + 800012a8: 07813823 sd s8,112(sp) + 800012ac: 00050993 mv s3,a0 + 800012b0: 00058c13 mv s8,a1 + 800012b4: 0026051b addiw a0,a2,2 + 800012b8: 00300593 li a1,3 + 800012bc: 0a113c23 sd ra,184(sp) + 800012c0: 02c13423 sd a2,40(sp) + 800012c4: 02d13823 sd a3,48(sp) + 800012c8: 0a813823 sd s0,176(sp) + 800012cc: 0a913423 sd s1,168(sp) + 800012d0: 0b213023 sd s2,160(sp) + 800012d4: 00060493 mv s1,a2 + 800012d8: 09413823 sd s4,144(sp) + 800012dc: 09513423 sd s5,136(sp) + 800012e0: 09613023 sd s6,128(sp) + 800012e4: 07713c23 sd s7,120(sp) + 800012e8: 07913423 sd s9,104(sp) + 800012ec: 07a13023 sd s10,96(sp) + 800012f0: 01813823 sd s8,16(sp) + 800012f4: 05b13c23 sd s11,88(sp) + 800012f8: 648030ef jal ra,80004940 <__divdi3> + 800012fc: 00300593 li a1,3 + 80001300: 00050413 mv s0,a0 + 80001304: 00048513 mv a0,s1 + 80001308: 638030ef jal ra,80004940 <__divdi3> + 8000130c: 0004041b sext.w s0,s0 + 80001310: 00850abb addw s5,a0,s0 + 80001314: 003a8a1b addiw s4,s5,3 + 80001318: 002a1a13 slli s4,s4,0x2 + 8000131c: 000a0513 mv a0,s4 + 80001320: 002a8913 addi s2,s5,2 + 80001324: 9f4ff0ef jal ra,80000518 + 80001328: 00291913 slli s2,s2,0x2 + 8000132c: 012507b3 add a5,a0,s2 + 80001330: ffc90c93 addi s9,s2,-4 + 80001334: 0007a023 sw zero,0(a5) + 80001338: ff890b93 addi s7,s2,-8 + 8000133c: 019507b3 add a5,a0,s9 + 80001340: 0007a023 sw zero,0(a5) + 80001344: 017507b3 add a5,a0,s7 + 80001348: 00048c13 mv s8,s1 + 8000134c: 0007a023 sw zero,0(a5) + 80001350: 00050493 mv s1,a0 + 80001354: 000a0513 mv a0,s4 + 80001358: 9c0ff0ef jal ra,80000518 + 8000135c: 01250933 add s2,a0,s2 + 80001360: 00092023 sw zero,0(s2) + 80001364: 01950cb3 add s9,a0,s9 + 80001368: 000ca023 sw zero,0(s9) + 8000136c: 00241913 slli s2,s0,0x2 + 80001370: 01750bb3 add s7,a0,s7 + 80001374: 000ba023 sw zero,0(s7) + 80001378: 00050a13 mv s4,a0 + 8000137c: 00090513 mv a0,s2 + 80001380: 998ff0ef jal ra,80000518 + 80001384: 00050c93 mv s9,a0 + 80001388: 00090513 mv a0,s2 + 8000138c: 01913c23 sd s9,24(sp) + 80001390: 988ff0ef jal ra,80000518 + 80001394: 00050b93 mv s7,a0 + 80001398: 00300593 li a1,3 + 8000139c: 001c051b addiw a0,s8,1 + 800013a0: 03713023 sd s7,32(sp) + 800013a4: 59c030ef jal ra,80004940 <__divdi3> + 800013a8: 40a4093b subw s2,s0,a0 + 800013ac: 01890d3b addw s10,s2,s8 + 800013b0: 000a8b13 mv s6,s5 + 800013b4: 00000c13 li s8,0 + 800013b8: 00000b93 li s7,0 + 800013bc: 05a05463 blez s10,80001404 <_Z11suffixArrayPiS_ii+0x164> + 800013c0: 001c0c1b addiw s8,s8,1 + 800013c4: 00300593 li a1,3 + 800013c8: 000c0c93 mv s9,s8 + 800013cc: 000c0513 mv a0,s8 + 800013d0: 03ac0a63 beq s8,s10,80001404 <_Z11suffixArrayPiS_ii+0x164> + 800013d4: 5f0030ef jal ra,800049c4 <__moddi3> + 800013d8: 002b9793 slli a5,s7,0x2 + 800013dc: 0005051b sext.w a0,a0 + 800013e0: 00f487b3 add a5,s1,a5 + 800013e4: fc050ee3 beqz a0,800013c0 <_Z11suffixArrayPiS_ii+0x120> + 800013e8: 001c0c1b addiw s8,s8,1 + 800013ec: 0197a023 sw s9,0(a5) + 800013f0: 001b8b9b addiw s7,s7,1 + 800013f4: 00300593 li a1,3 + 800013f8: 000c0c93 mv s9,s8 + 800013fc: 000c0513 mv a0,s8 + 80001400: fdac1ae3 bne s8,s10,800013d4 <_Z11suffixArrayPiS_ii+0x134> + 80001404: 03013b83 ld s7,48(sp) + 80001408: 00898613 addi a2,s3,8 + 8000140c: 000a0593 mv a1,s4 + 80001410: 00048513 mv a0,s1 + 80001414: 000b8713 mv a4,s7 + 80001418: 000a8693 mv a3,s5 + 8000141c: d49ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 80001420: 000b8713 mv a4,s7 + 80001424: 000a8693 mv a3,s5 + 80001428: 00498613 addi a2,s3,4 + 8000142c: 00048593 mv a1,s1 + 80001430: 000a0513 mv a0,s4 + 80001434: d31ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 80001438: 000b8713 mv a4,s7 + 8000143c: 000a8693 mv a3,s5 + 80001440: 00098613 mv a2,s3 + 80001444: 000a0593 mv a1,s4 + 80001448: 00048513 mv a0,s1 + 8000144c: d19ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 80001450: 13505c63 blez s5,80001588 <_Z11suffixArrayPiS_ii+0x2e8> + 80001454: fffb089b addiw a7,s6,-1 + 80001458: 02089893 slli a7,a7,0x20 + 8000145c: 0208d893 srli a7,a7,0x20 + 80001460: 00188893 addi a7,a7,1 + 80001464: 00289893 slli a7,a7,0x2 + 80001468: 000a0d93 mv s11,s4 + 8000146c: 01488d33 add s10,a7,s4 + 80001470: 000a0613 mv a2,s4 + 80001474: fff00b13 li s6,-1 + 80001478: fff00b93 li s7,-1 + 8000147c: fff00c93 li s9,-1 + 80001480: 00000c13 li s8,0 + 80001484: 0600006f j 800014e4 <_Z11suffixArrayPiS_ii+0x244> + 80001488: 001c0c1b addiw s8,s8,1 + 8000148c: 000f0c93 mv s9,t5 + 80001490: 00c13423 sd a2,8(sp) + 80001494: 00e13023 sd a4,0(sp) + 80001498: 4a8030ef jal ra,80004940 <__divdi3> + 8000149c: 00013703 ld a4,0(sp) + 800014a0: 00050793 mv a5,a0 + 800014a4: 0007879b sext.w a5,a5 + 800014a8: 00070513 mv a0,a4 + 800014ac: 00300593 li a1,3 + 800014b0: 00f13023 sd a5,0(sp) + 800014b4: 510030ef jal ra,800049c4 <__moddi3> + 800014b8: 00013783 ld a5,0(sp) + 800014bc: 0005051b sext.w a0,a0 + 800014c0: 00100693 li a3,1 + 800014c4: 00f4073b addw a4,s0,a5 + 800014c8: 00271713 slli a4,a4,0x2 + 800014cc: 00813603 ld a2,8(sp) + 800014d0: 00e48733 add a4,s1,a4 + 800014d4: 04d50463 beq a0,a3,8000151c <_Z11suffixArrayPiS_ii+0x27c> + 800014d8: 01872023 sw s8,0(a4) + 800014dc: 00460613 addi a2,a2,4 + 800014e0: 04cd0863 beq s10,a2,80001530 <_Z11suffixArrayPiS_ii+0x290> + 800014e4: 00062703 lw a4,0(a2) + 800014e8: 000b8f93 mv t6,s7 + 800014ec: 000b0293 mv t0,s6 + 800014f0: 00271793 slli a5,a4,0x2 + 800014f4: 00f987b3 add a5,s3,a5 + 800014f8: 0007af03 lw t5,0(a5) + 800014fc: 0047ab83 lw s7,4(a5) + 80001500: 0087ab03 lw s6,8(a5) + 80001504: 00300593 li a1,3 + 80001508: 00070513 mv a0,a4 + 8000150c: f79f1ee3 bne t5,s9,80001488 <_Z11suffixArrayPiS_ii+0x1e8> + 80001510: f77f9ce3 bne t6,s7,80001488 <_Z11suffixArrayPiS_ii+0x1e8> + 80001514: f7629ae3 bne t0,s6,80001488 <_Z11suffixArrayPiS_ii+0x1e8> + 80001518: f79ff06f j 80001490 <_Z11suffixArrayPiS_ii+0x1f0> + 8000151c: 00279793 slli a5,a5,0x2 + 80001520: 00f487b3 add a5,s1,a5 + 80001524: 0187a023 sw s8,0(a5) + 80001528: 00460613 addi a2,a2,4 + 8000152c: facd1ce3 bne s10,a2,800014e4 <_Z11suffixArrayPiS_ii+0x244> + 80001530: 00048613 mv a2,s1 + 80001534: 00000713 li a4,0 + 80001538: 315c4863 blt s8,s5,80001848 <_Z11suffixArrayPiS_ii+0x5a8> + 8000153c: 00062783 lw a5,0(a2) + 80001540: 00460613 addi a2,a2,4 + 80001544: 00279793 slli a5,a5,0x2 + 80001548: 00fa07b3 add a5,s4,a5 + 8000154c: fee7ae23 sw a4,-4(a5) + 80001550: 0017071b addiw a4,a4,1 + 80001554: feea94e3 bne s5,a4,8000153c <_Z11suffixArrayPiS_ii+0x29c> + 80001558: 00000613 li a2,0 + 8000155c: 000da703 lw a4,0(s11) + 80001560: 01813583 ld a1,24(sp) + 80001564: 00261793 slli a5,a2,0x2 + 80001568: 0017169b slliw a3,a4,0x1 + 8000156c: 004d8d93 addi s11,s11,4 + 80001570: 00f587b3 add a5,a1,a5 + 80001574: 00e686bb addw a3,a3,a4 + 80001578: 00875663 bge a4,s0,80001584 <_Z11suffixArrayPiS_ii+0x2e4> + 8000157c: 00d7a023 sw a3,0(a5) + 80001580: 0016061b addiw a2,a2,1 + 80001584: fdad9ce3 bne s11,s10,8000155c <_Z11suffixArrayPiS_ii+0x2bc> + 80001588: 02013b03 ld s6,32(sp) + 8000158c: 03013703 ld a4,48(sp) + 80001590: 01813503 ld a0,24(sp) + 80001594: 00040693 mv a3,s0 + 80001598: 00098613 mv a2,s3 + 8000159c: 000b0593 mv a1,s6 + 800015a0: bc5ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 800015a4: 02813783 ld a5,40(sp) + 800015a8: 0ef05463 blez a5,80001690 <_Z11suffixArrayPiS_ii+0x3f0> + 800015ac: 000a879b sext.w a5,s5 + 800015b0: 02f13c23 sd a5,56(sp) + 800015b4: fffa879b addiw a5,s5,-1 + 800015b8: 04f12223 sw a5,68(sp) + 800015bc: 004a0793 addi a5,s4,4 + 800015c0: 04f13423 sd a5,72(sp) + 800015c4: 0004079b sext.w a5,s0 + 800015c8: 00f13423 sd a5,8(sp) + 800015cc: fff4079b addiw a5,s0,-1 + 800015d0: 00f12c23 sw a5,24(sp) + 800015d4: 004b0793 addi a5,s6,4 + 800015d8: 00000d13 li s10,0 + 800015dc: 00000c93 li s9,0 + 800015e0: 02f13823 sd a5,48(sp) + 800015e4: 02013703 ld a4,32(sp) + 800015e8: 002c9793 slli a5,s9,0x2 + 800015ec: 00291613 slli a2,s2,0x2 + 800015f0: 00f70c33 add s8,a4,a5 + 800015f4: 000c2b83 lw s7,0(s8) + 800015f8: 00ca0b33 add s6,s4,a2 + 800015fc: 000b2783 lw a5,0(s6) + 80001600: 002b9813 slli a6,s7,0x2 + 80001604: 00300593 li a1,3 + 80001608: 000b8513 mv a0,s7 + 8000160c: 00f13023 sd a5,0(sp) + 80001610: 01098db3 add s11,s3,a6 + 80001614: 32c030ef jal ra,80004940 <__divdi3> + 80001618: 00013783 ld a5,0(sp) + 8000161c: 000dae83 lw t4,0(s11) + 80001620: 0005071b sext.w a4,a0 + 80001624: 1c87d463 bge a5,s0,800017ec <_Z11suffixArrayPiS_ii+0x54c> + 80001628: 0017959b slliw a1,a5,0x1 + 8000162c: 00f585bb addw a1,a1,a5 + 80001630: 0015859b addiw a1,a1,1 + 80001634: 00259513 slli a0,a1,0x2 + 80001638: 00a98533 add a0,s3,a0 + 8000163c: 008787bb addw a5,a5,s0 + 80001640: 00052503 lw a0,0(a0) + 80001644: 00279793 slli a5,a5,0x2 + 80001648: 00271713 slli a4,a4,0x2 + 8000164c: 00f487b3 add a5,s1,a5 + 80001650: 00e48733 add a4,s1,a4 + 80001654: 0007a803 lw a6,0(a5) + 80001658: 00072783 lw a5,0(a4) + 8000165c: 11d54663 blt a0,t4,80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 80001660: 11d50263 beq a0,t4,80001764 <_Z11suffixArrayPiS_ii+0x4c4> + 80001664: 01013783 ld a5,16(sp) + 80001668: 002d1693 slli a3,s10,0x2 + 8000166c: 001d051b addiw a0,s10,1 + 80001670: 00d787b3 add a5,a5,a3 + 80001674: 0177a023 sw s7,0(a5) + 80001678: 001c8c9b addiw s9,s9,1 + 8000167c: 0005079b sext.w a5,a0 + 80001680: 05940663 beq s0,s9,800016cc <_Z11suffixArrayPiS_ii+0x42c> + 80001684: 00078d13 mv s10,a5 + 80001688: 02813783 ld a5,40(sp) + 8000168c: f4fd4ce3 blt s10,a5,800015e4 <_Z11suffixArrayPiS_ii+0x344> + 80001690: 0b813083 ld ra,184(sp) + 80001694: 0b013403 ld s0,176(sp) + 80001698: 0a813483 ld s1,168(sp) + 8000169c: 0a013903 ld s2,160(sp) + 800016a0: 09813983 ld s3,152(sp) + 800016a4: 09013a03 ld s4,144(sp) + 800016a8: 08813a83 ld s5,136(sp) + 800016ac: 08013b03 ld s6,128(sp) + 800016b0: 07813b83 ld s7,120(sp) + 800016b4: 07013c03 ld s8,112(sp) + 800016b8: 06813c83 ld s9,104(sp) + 800016bc: 06013d03 ld s10,96(sp) + 800016c0: 05813d83 ld s11,88(sp) + 800016c4: 0c010113 addi sp,sp,192 + 800016c8: 00008067 ret + 800016cc: 1b595c63 bge s2,s5,80001884 <_Z11suffixArrayPiS_ii+0x5e4> + 800016d0: 04412783 lw a5,68(sp) + 800016d4: 00468693 addi a3,a3,4 + 800016d8: 000b0613 mv a2,s6 + 800016dc: 41278e3b subw t3,a5,s2 + 800016e0: 01013783 ld a5,16(sp) + 800016e4: 020e1e13 slli t3,t3,0x20 + 800016e8: 020e5e13 srli t3,t3,0x20 + 800016ec: 00d786b3 add a3,a5,a3 + 800016f0: 04813783 ld a5,72(sp) + 800016f4: 012e0e33 add t3,t3,s2 + 800016f8: 002e1e13 slli t3,t3,0x2 + 800016fc: 0009089b sext.w a7,s2 + 80001700: 00fe0e33 add t3,t3,a5 + 80001704: 0180006f j 8000171c <_Z11suffixArrayPiS_ii+0x47c> + 80001708: 0015879b addiw a5,a1,1 + 8000170c: 00f6a023 sw a5,0(a3) + 80001710: 00460613 addi a2,a2,4 + 80001714: 00468693 addi a3,a3,4 + 80001718: 02ce0a63 beq t3,a2,8000174c <_Z11suffixArrayPiS_ii+0x4ac> + 8000171c: 00062703 lw a4,0(a2) + 80001720: 4087083b subw a6,a4,s0 + 80001724: 0017159b slliw a1,a4,0x1 + 80001728: 0018179b slliw a5,a6,0x1 + 8000172c: 00e585bb addw a1,a1,a4 + 80001730: 010787bb addw a5,a5,a6 + 80001734: fc874ae3 blt a4,s0,80001708 <_Z11suffixArrayPiS_ii+0x468> + 80001738: 0027879b addiw a5,a5,2 + 8000173c: 00f6a023 sw a5,0(a3) + 80001740: 00460613 addi a2,a2,4 + 80001744: 00468693 addi a3,a3,4 + 80001748: fcce1ae3 bne t3,a2,8000171c <_Z11suffixArrayPiS_ii+0x47c> + 8000174c: 03813783 ld a5,56(sp) + 80001750: 411508bb subw a7,a0,a7 + 80001754: 000a8913 mv s2,s5 + 80001758: 00f888bb addw a7,a7,a5 + 8000175c: 00188d1b addiw s10,a7,1 + 80001760: f29ff06f j 80001688 <_Z11suffixArrayPiS_ii+0x3e8> + 80001764: f107c0e3 blt a5,a6,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001768: 01013783 ld a5,16(sp) + 8000176c: 002d1713 slli a4,s10,0x2 + 80001770: 001d061b addiw a2,s10,1 + 80001774: 00e787b3 add a5,a5,a4 + 80001778: 00b7a023 sw a1,0(a5) + 8000177c: 0019091b addiw s2,s2,1 + 80001780: 0006079b sext.w a5,a2 + 80001784: f12a90e3 bne s5,s2,80001684 <_Z11suffixArrayPiS_ii+0x3e4> + 80001788: 0e8cde63 bge s9,s0,80001884 <_Z11suffixArrayPiS_ii+0x5e4> + 8000178c: 01812783 lw a5,24(sp) + 80001790: 01013683 ld a3,16(sp) + 80001794: 00470713 addi a4,a4,4 + 80001798: 419785bb subw a1,a5,s9 + 8000179c: 02059593 slli a1,a1,0x20 + 800017a0: 0205d593 srli a1,a1,0x20 + 800017a4: 00e68733 add a4,a3,a4 + 800017a8: 03013683 ld a3,48(sp) + 800017ac: 019585b3 add a1,a1,s9 + 800017b0: 00259593 slli a1,a1,0x2 + 800017b4: 000c0793 mv a5,s8 + 800017b8: 000c889b sext.w a7,s9 + 800017bc: 00d585b3 add a1,a1,a3 + 800017c0: 0007a683 lw a3,0(a5) + 800017c4: 00478793 addi a5,a5,4 + 800017c8: 00470713 addi a4,a4,4 + 800017cc: fed72e23 sw a3,-4(a4) + 800017d0: fef598e3 bne a1,a5,800017c0 <_Z11suffixArrayPiS_ii+0x520> + 800017d4: 00813783 ld a5,8(sp) + 800017d8: 411608bb subw a7,a2,a7 + 800017dc: 00040c93 mv s9,s0 + 800017e0: 00f888bb addw a7,a7,a5 + 800017e4: 00188d1b addiw s10,a7,1 + 800017e8: ea1ff06f j 80001688 <_Z11suffixArrayPiS_ii+0x3e8> + 800017ec: 408787bb subw a5,a5,s0 + 800017f0: 0017959b slliw a1,a5,0x1 + 800017f4: 00f585bb addw a1,a1,a5 + 800017f8: 0025859b addiw a1,a1,2 + 800017fc: 00259f13 slli t5,a1,0x2 + 80001800: 01e98f33 add t5,s3,t5 + 80001804: 000f2f83 lw t6,0(t5) + 80001808: 00178793 addi a5,a5,1 + 8000180c: 00e4073b addw a4,s0,a4 + 80001810: 00279793 slli a5,a5,0x2 + 80001814: 00271713 slli a4,a4,0x2 + 80001818: 00f487b3 add a5,s1,a5 + 8000181c: 00e48733 add a4,s1,a4 + 80001820: 004f2503 lw a0,4(t5) + 80001824: 00072703 lw a4,0(a4) + 80001828: 0007af03 lw t5,0(a5) + 8000182c: 004da783 lw a5,4(s11) + 80001830: f3dfcce3 blt t6,t4,80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 80001834: e3df98e3 bne t6,t4,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001838: f2f548e3 blt a0,a5,80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 8000183c: e2f514e3 bne a0,a5,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001840: e3e742e3 blt a4,t5,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001844: f25ff06f j 80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 80001848: 000c0693 mv a3,s8 + 8000184c: 000a8613 mv a2,s5 + 80001850: 000a0593 mv a1,s4 + 80001854: 00048513 mv a0,s1 + 80001858: a49ff0ef jal ra,800012a0 <_Z11suffixArrayPiS_ii> + 8000185c: 000a0693 mv a3,s4 + 80001860: 00000713 li a4,0 + 80001864: 0006a783 lw a5,0(a3) + 80001868: 0017071b addiw a4,a4,1 + 8000186c: 00468693 addi a3,a3,4 + 80001870: 00279793 slli a5,a5,0x2 + 80001874: 00f487b3 add a5,s1,a5 + 80001878: 00e7a023 sw a4,0(a5) + 8000187c: ff5714e3 bne a4,s5,80001864 <_Z11suffixArrayPiS_ii+0x5c4> + 80001880: cd9ff06f j 80001558 <_Z11suffixArrayPiS_ii+0x2b8> + 80001884: 002d0d1b addiw s10,s10,2 + 80001888: e01ff06f j 80001688 <_Z11suffixArrayPiS_ii+0x3e8> + +000000008000188c : + 8000188c: 00006797 auipc a5,0x6 + 80001890: 2447b783 ld a5,580(a5) # 80007ad0 + 80001894: 0007a783 lw a5,0(a5) + 80001898: fd010113 addi sp,sp,-48 + 8000189c: 01213823 sd s2,16(sp) + 800018a0: 00100513 li a0,1 + 800018a4: 00006917 auipc s2,0x6 + 800018a8: 12c90913 addi s2,s2,300 # 800079d0 <_ZL1N> + 800018ac: 02113423 sd ra,40(sp) + 800018b0: 00f92023 sw a5,0(s2) + 800018b4: 01313423 sd s3,8(sp) + 800018b8: 02813023 sd s0,32(sp) + 800018bc: 00913c23 sd s1,24(sp) + 800018c0: cf5fe0ef jal ra,800005b4 + 800018c4: 00092503 lw a0,0(s2) + 800018c8: 00006997 auipc s3,0x6 + 800018cc: 11098993 addi s3,s3,272 # 800079d8 <_ZL1s> + 800018d0: 00a5051b addiw a0,a0,10 + 800018d4: 00251513 slli a0,a0,0x2 + 800018d8: c41fe0ef jal ra,80000518 + 800018dc: 00092783 lw a5,0(s2) + 800018e0: 00a9b023 sd a0,0(s3) + 800018e4: 00a7851b addiw a0,a5,10 + 800018e8: 00251513 slli a0,a0,0x2 + 800018ec: c2dfe0ef jal ra,80000518 + 800018f0: 00092783 lw a5,0(s2) + 800018f4: 00006717 auipc a4,0x6 + 800018f8: 0ea73623 sd a0,236(a4) # 800079e0 <_ZL2sa> + 800018fc: 02f05e63 blez a5,80001938 + 80001900: 00000413 li s0,0 + 80001904: cc5fe0ef jal ra,800005c8 + 80001908: 0009b483 ld s1,0(s3) + 8000190c: 02051513 slli a0,a0,0x20 + 80001910: 00241793 slli a5,s0,0x2 + 80001914: 01a00593 li a1,26 + 80001918: 02055513 srli a0,a0,0x20 + 8000191c: 00f484b3 add s1,s1,a5 + 80001920: 070030ef jal ra,80004990 <__umoddi3> + 80001924: 00092703 lw a4,0(s2) + 80001928: 00140413 addi s0,s0,1 + 8000192c: 00a4a023 sw a0,0(s1) + 80001930: 0004079b sext.w a5,s0 + 80001934: fce7c8e3 blt a5,a4,80001904 + 80001938: 02813083 ld ra,40(sp) + 8000193c: 02013403 ld s0,32(sp) + 80001940: 01813483 ld s1,24(sp) + 80001944: 01013903 ld s2,16(sp) + 80001948: 00813983 ld s3,8(sp) + 8000194c: 03010113 addi sp,sp,48 + 80001950: 00008067 ret + +0000000080001954 : + 80001954: 01a00693 li a3,26 + 80001958: 00006617 auipc a2,0x6 + 8000195c: 07862603 lw a2,120(a2) # 800079d0 <_ZL1N> + 80001960: 00006597 auipc a1,0x6 + 80001964: 0805b583 ld a1,128(a1) # 800079e0 <_ZL2sa> + 80001968: 00006517 auipc a0,0x6 + 8000196c: 07053503 ld a0,112(a0) # 800079d8 <_ZL1s> + 80001970: 931ff06f j 800012a0 <_Z11suffixArrayPiS_ii> + +0000000080001974 : + 80001974: 00006597 auipc a1,0x6 + 80001978: 05c5a583 lw a1,92(a1) # 800079d0 <_ZL1N> + 8000197c: 00006517 auipc a0,0x6 + 80001980: 06453503 ld a0,100(a0) # 800079e0 <_ZL2sa> + 80001984: 00259593 slli a1,a1,0x2 + 80001988: ff010113 addi sp,sp,-16 + 8000198c: 00b505b3 add a1,a0,a1 + 80001990: 00113423 sd ra,8(sp) + 80001994: c85fe0ef jal ra,80000618 + 80001998: 00006797 auipc a5,0x6 + 8000199c: 1387b783 ld a5,312(a5) # 80007ad0 + 800019a0: 0187a783 lw a5,24(a5) + 800019a4: 00813083 ld ra,8(sp) + 800019a8: 0005051b sext.w a0,a0 + 800019ac: 40a78533 sub a0,a5,a0 + 800019b0: 00153513 seqz a0,a0 + 800019b4: 01010113 addi sp,sp,16 + 800019b8: 00008067 ret + +00000000800019bc : + 800019bc: 00008067 ret + +00000000800019c0 : + 800019c0: 00006797 auipc a5,0x6 + 800019c4: 1107b783 ld a5,272(a5) # 80007ad0 + 800019c8: 0187a503 lw a0,24(a5) + 800019cc: 00006797 auipc a5,0x6 + 800019d0: 01c7a783 lw a5,28(a5) # 800079e8 <_ZL3ans> + 800019d4: 40f50533 sub a0,a0,a5 + 800019d8: 00153513 seqz a0,a0 + 800019dc: 00008067 ret + +00000000800019e0 <_ZN8N_puzzleILi4EEC1Ev>: + 800019e0: f6010113 addi sp,sp,-160 + 800019e4: 07613023 sd s6,96(sp) + 800019e8: 08113c23 sd ra,152(sp) + 800019ec: 08813823 sd s0,144(sp) + 800019f0: 08913423 sd s1,136(sp) + 800019f4: 09213023 sd s2,128(sp) + 800019f8: 07313c23 sd s3,120(sp) + 800019fc: 07413823 sd s4,112(sp) + 80001a00: 07513423 sd s5,104(sp) + 80001a04: 05713c23 sd s7,88(sp) + 80001a08: 05813823 sd s8,80(sp) + 80001a0c: 05913423 sd s9,72(sp) + 80001a10: 00100793 li a5,1 + 80001a14: 00f50023 sb a5,0(a0) + 80001a18: 00050b13 mv s6,a0 + 80001a1c: 000501a3 sb zero,3(a0) + 80001a20: 00010713 mv a4,sp + 80001a24: 00000793 li a5,0 + 80001a28: 01000693 li a3,16 + 80001a2c: 00f72023 sw a5,0(a4) + 80001a30: 0017879b addiw a5,a5,1 + 80001a34: 00470713 addi a4,a4,4 + 80001a38: fed79ae3 bne a5,a3,80001a2c <_ZN8N_puzzleILi4EEC1Ev+0x4c> + 80001a3c: 03c10a13 addi s4,sp,60 + 80001a40: 000b0413 mv s0,s6 + 80001a44: 00000993 li s3,0 + 80001a48: 00000c93 li s9,0 + 80001a4c: 00400913 li s2,4 + 80001a50: ff000a93 li s5,-16 + 80001a54: 000a0c13 mv s8,s4 + 80001a58: 00000b93 li s7,0 + 80001a5c: 0109849b addiw s1,s3,16 + 80001a60: b69fe0ef jal ra,800005c8 + 80001a64: 417485bb subw a1,s1,s7 + 80001a68: 02059593 slli a1,a1,0x20 + 80001a6c: 02051513 slli a0,a0,0x20 + 80001a70: 0205d593 srli a1,a1,0x20 + 80001a74: 02055513 srli a0,a0,0x20 + 80001a78: 719020ef jal ra,80004990 <__umoddi3> + 80001a7c: 0005051b sext.w a0,a0 + 80001a80: 00251513 slli a0,a0,0x2 + 80001a84: 04010793 addi a5,sp,64 + 80001a88: 00a787b3 add a5,a5,a0 + 80001a8c: fc07a583 lw a1,-64(a5) + 80001a90: 000b871b sext.w a4,s7 + 80001a94: 01740833 add a6,s0,s7 + 80001a98: fff5879b addiw a5,a1,-1 + 80001a9c: 41f7d69b sraiw a3,a5,0x1f + 80001aa0: 01e6d61b srliw a2,a3,0x1e + 80001aa4: 00f607bb addw a5,a2,a5 + 80001aa8: 0037f693 andi a3,a5,3 + 80001aac: 40c686bb subw a3,a3,a2 + 80001ab0: 4027d79b sraiw a5,a5,0x2 + 80001ab4: 419787bb subw a5,a5,s9 + 80001ab8: 40e6873b subw a4,a3,a4 + 80001abc: 41f7d61b sraiw a2,a5,0x1f + 80001ac0: 41f7569b sraiw a3,a4,0x1f + 80001ac4: 00f647b3 xor a5,a2,a5 + 80001ac8: 00e6c733 xor a4,a3,a4 + 80001acc: 40c787bb subw a5,a5,a2 + 80001ad0: 40d7073b subw a4,a4,a3 + 80001ad4: 00b80223 sb a1,4(a6) + 80001ad8: 00e787bb addw a5,a5,a4 + 80001adc: 0c059063 bnez a1,80001b9c <_ZN8N_puzzleILi4EEC1Ev+0x1bc> + 80001ae0: 019b00a3 sb s9,1(s6) + 80001ae4: 017b0123 sb s7,2(s6) + 80001ae8: 000c2783 lw a5,0(s8) + 80001aec: 04010713 addi a4,sp,64 + 80001af0: 00a70533 add a0,a4,a0 + 80001af4: 001b8b93 addi s7,s7,1 + 80001af8: fcf52023 sw a5,-64(a0) + 80001afc: ffcc0c13 addi s8,s8,-4 + 80001b00: f72b90e3 bne s7,s2,80001a60 <_ZN8N_puzzleILi4EEC1Ev+0x80> + 80001b04: ffc9899b addiw s3,s3,-4 + 80001b08: 001c8c9b addiw s9,s9,1 + 80001b0c: ff0a0a13 addi s4,s4,-16 + 80001b10: 00440413 addi s0,s0,4 + 80001b14: f55990e3 bne s3,s5,80001a54 <_ZN8N_puzzleILi4EEC1Ev+0x74> + 80001b18: 000b2a23 sw zero,20(s6) + 80001b1c: 004b0593 addi a1,s6,4 + 80001b20: 014b0513 addi a0,s6,20 + 80001b24: 00000713 li a4,0 + 80001b28: ffc58693 addi a3,a1,-4 + 80001b2c: 0057179b slliw a5,a4,0x5 + 80001b30: 40e787bb subw a5,a5,a4 + 80001b34: 0027979b slliw a5,a5,0x2 + 80001b38: 40e787bb subw a5,a5,a4 + 80001b3c: 0027979b slliw a5,a5,0x2 + 80001b40: 00468603 lb a2,4(a3) + 80001b44: 00e787bb addw a5,a5,a4 + 80001b48: 0027979b slliw a5,a5,0x2 + 80001b4c: 00e7873b addw a4,a5,a4 + 80001b50: 00168693 addi a3,a3,1 + 80001b54: 00c7073b addw a4,a4,a2 + 80001b58: fcb69ae3 bne a3,a1,80001b2c <_ZN8N_puzzleILi4EEC1Ev+0x14c> + 80001b5c: 00468593 addi a1,a3,4 + 80001b60: fcb514e3 bne a0,a1,80001b28 <_ZN8N_puzzleILi4EEC1Ev+0x148> + 80001b64: 09813083 ld ra,152(sp) + 80001b68: 09013403 ld s0,144(sp) + 80001b6c: 00eb2a23 sw a4,20(s6) + 80001b70: 08813483 ld s1,136(sp) + 80001b74: 08013903 ld s2,128(sp) + 80001b78: 07813983 ld s3,120(sp) + 80001b7c: 07013a03 ld s4,112(sp) + 80001b80: 06813a83 ld s5,104(sp) + 80001b84: 06013b03 ld s6,96(sp) + 80001b88: 05813b83 ld s7,88(sp) + 80001b8c: 05013c03 ld s8,80(sp) + 80001b90: 04813c83 ld s9,72(sp) + 80001b94: 0a010113 addi sp,sp,160 + 80001b98: 00008067 ret + 80001b9c: 003b4703 lbu a4,3(s6) + 80001ba0: 00e787bb addw a5,a5,a4 + 80001ba4: 00fb01a3 sb a5,3(s6) + 80001ba8: f41ff06f j 80001ae8 <_ZN8N_puzzleILi4EEC1Ev+0x108> + +0000000080001bac <_ZN8N_puzzleILi4EEC1EPi>: + 80001bac: fe010113 addi sp,sp,-32 + 80001bb0: 00100793 li a5,1 + 80001bb4: 00010e93 mv t4,sp + 80001bb8: 00f50023 sb a5,0(a0) + 80001bbc: 00813c23 sd s0,24(sp) + 80001bc0: 000501a3 sb zero,3(a0) + 80001bc4: 01010f13 addi t5,sp,16 + 80001bc8: 000e8793 mv a5,t4 + 80001bcc: 00078023 sb zero,0(a5) + 80001bd0: 00178793 addi a5,a5,1 + 80001bd4: ffe79ce3 bne a5,t5,80001bcc <_ZN8N_puzzleILi4EEC1EPi+0x20> + 80001bd8: 00050f93 mv t6,a0 + 80001bdc: 00000e13 li t3,0 + 80001be0: 00100393 li t2,1 + 80001be4: 00400293 li t0,4 + 80001be8: 00058313 mv t1,a1 + 80001bec: 00000613 li a2,0 + 80001bf0: 00032803 lw a6,0(t1) + 80001bf4: 0006071b sext.w a4,a2 + 80001bf8: 00cf8433 add s0,t6,a2 + 80001bfc: fff8079b addiw a5,a6,-1 + 80001c00: 41f7d69b sraiw a3,a5,0x1f + 80001c04: 01e6d89b srliw a7,a3,0x1e + 80001c08: 00f887bb addw a5,a7,a5 + 80001c0c: 0037f693 andi a3,a5,3 + 80001c10: 411686bb subw a3,a3,a7 + 80001c14: 40e6873b subw a4,a3,a4 + 80001c18: 41f7569b sraiw a3,a4,0x1f + 80001c1c: 4027d79b sraiw a5,a5,0x2 + 80001c20: 41c787bb subw a5,a5,t3 + 80001c24: 00e6c733 xor a4,a3,a4 + 80001c28: 41f7d89b sraiw a7,a5,0x1f + 80001c2c: 40d7073b subw a4,a4,a3 + 80001c30: 01010693 addi a3,sp,16 + 80001c34: 00f8c7b3 xor a5,a7,a5 + 80001c38: 010686b3 add a3,a3,a6 + 80001c3c: 411787bb subw a5,a5,a7 + 80001c40: 01040223 sb a6,4(s0) + 80001c44: fe768823 sb t2,-16(a3) + 80001c48: 00e787bb addw a5,a5,a4 + 80001c4c: 08081a63 bnez a6,80001ce0 <_ZN8N_puzzleILi4EEC1EPi+0x134> + 80001c50: 01c500a3 sb t3,1(a0) + 80001c54: 00c50123 sb a2,2(a0) + 80001c58: 00160613 addi a2,a2,1 + 80001c5c: 00430313 addi t1,t1,4 + 80001c60: f85618e3 bne a2,t0,80001bf0 <_ZN8N_puzzleILi4EEC1EPi+0x44> + 80001c64: 001e0e1b addiw t3,t3,1 + 80001c68: 01058593 addi a1,a1,16 + 80001c6c: 004f8f93 addi t6,t6,4 + 80001c70: f65e1ce3 bne t3,t0,80001be8 <_ZN8N_puzzleILi4EEC1EPi+0x3c> + 80001c74: 000ec783 lbu a5,0(t4) + 80001c78: 001e8e93 addi t4,t4,1 + 80001c7c: 06078a63 beqz a5,80001cf0 <_ZN8N_puzzleILi4EEC1EPi+0x144> + 80001c80: ffee9ae3 bne t4,t5,80001c74 <_ZN8N_puzzleILi4EEC1EPi+0xc8> + 80001c84: 00052a23 sw zero,20(a0) + 80001c88: 00450593 addi a1,a0,4 + 80001c8c: 01450813 addi a6,a0,20 + 80001c90: 00000713 li a4,0 + 80001c94: ffc58693 addi a3,a1,-4 + 80001c98: 0057179b slliw a5,a4,0x5 + 80001c9c: 40e787bb subw a5,a5,a4 + 80001ca0: 0027979b slliw a5,a5,0x2 + 80001ca4: 40e787bb subw a5,a5,a4 + 80001ca8: 0027979b slliw a5,a5,0x2 + 80001cac: 00468603 lb a2,4(a3) + 80001cb0: 00e787bb addw a5,a5,a4 + 80001cb4: 0027979b slliw a5,a5,0x2 + 80001cb8: 00e7873b addw a4,a5,a4 + 80001cbc: 00168693 addi a3,a3,1 + 80001cc0: 00c7073b addw a4,a4,a2 + 80001cc4: fcb69ae3 bne a3,a1,80001c98 <_ZN8N_puzzleILi4EEC1EPi+0xec> + 80001cc8: 00468593 addi a1,a3,4 + 80001ccc: fcb814e3 bne a6,a1,80001c94 <_ZN8N_puzzleILi4EEC1EPi+0xe8> + 80001cd0: 01813403 ld s0,24(sp) + 80001cd4: 00e52a23 sw a4,20(a0) + 80001cd8: 02010113 addi sp,sp,32 + 80001cdc: 00008067 ret + 80001ce0: 00354703 lbu a4,3(a0) + 80001ce4: 00e787bb addw a5,a5,a4 + 80001ce8: 00f501a3 sb a5,3(a0) + 80001cec: f6dff06f j 80001c58 <_ZN8N_puzzleILi4EEC1EPi+0xac> + 80001cf0: 01813403 ld s0,24(sp) + 80001cf4: 00050023 sb zero,0(a0) + 80001cf8: 02010113 addi sp,sp,32 + 80001cfc: 00008067 ret + +0000000080001d00 <_ZNK8N_puzzleILi4EEeqERKS0_>: + 80001d00: 00050713 mv a4,a0 + 80001d04: 00054503 lbu a0,0(a0) + 80001d08: 04050863 beqz a0,80001d58 <_ZNK8N_puzzleILi4EEeqERKS0_+0x58> + 80001d0c: 0005c503 lbu a0,0(a1) + 80001d10: 04050463 beqz a0,80001d58 <_ZNK8N_puzzleILi4EEeqERKS0_+0x58> + 80001d14: 0145a683 lw a3,20(a1) + 80001d18: 01472783 lw a5,20(a4) + 80001d1c: 02f69c63 bne a3,a5,80001d54 <_ZNK8N_puzzleILi4EEeqERKS0_+0x54> + 80001d20: 00800693 li a3,8 + 80001d24: 01800893 li a7,24 + 80001d28: ffc68793 addi a5,a3,-4 + 80001d2c: 00f70833 add a6,a4,a5 + 80001d30: 00f58633 add a2,a1,a5 + 80001d34: 00084803 lbu a6,0(a6) + 80001d38: 00064603 lbu a2,0(a2) + 80001d3c: 00178793 addi a5,a5,1 + 80001d40: 00c81a63 bne a6,a2,80001d54 <_ZNK8N_puzzleILi4EEeqERKS0_+0x54> + 80001d44: fed794e3 bne a5,a3,80001d2c <_ZNK8N_puzzleILi4EEeqERKS0_+0x2c> + 80001d48: 00468693 addi a3,a3,4 + 80001d4c: fd169ee3 bne a3,a7,80001d28 <_ZNK8N_puzzleILi4EEeqERKS0_+0x28> + 80001d50: 00008067 ret + 80001d54: 00000513 li a0,0 + 80001d58: 00008067 ret + +0000000080001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0>: + 80001d5c: 00064783 lbu a5,0(a2) + 80001d60: fe010113 addi sp,sp,-32 + 80001d64: 00913423 sd s1,8(sp) + 80001d68: 00113c23 sd ra,24(sp) + 80001d6c: 00813823 sd s0,16(sp) + 80001d70: 00060493 mv s1,a2 + 80001d74: 00078e63 beqz a5,80001d90 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x34> + 80001d78: 01462783 lw a5,20(a2) + 80001d7c: fff5051b addiw a0,a0,-1 + 80001d80: 00a7f533 and a0,a5,a0 + 80001d84: 02051793 slli a5,a0,0x20 + 80001d88: 01d7d793 srli a5,a5,0x1d + 80001d8c: 00f585b3 add a1,a1,a5 + 80001d90: 0005b403 ld s0,0(a1) + 80001d94: 00041863 bnez s0,80001da4 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x48> + 80001d98: 01c0006f j 80001db4 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x58> + 80001d9c: 01843403 ld s0,24(s0) + 80001da0: 00040a63 beqz s0,80001db4 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x58> + 80001da4: 00040513 mv a0,s0 + 80001da8: 00048593 mv a1,s1 + 80001dac: f55ff0ef jal ra,80001d00 <_ZNK8N_puzzleILi4EEeqERKS0_> + 80001db0: fe0506e3 beqz a0,80001d9c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x40> + 80001db4: 01813083 ld ra,24(sp) + 80001db8: 00040513 mv a0,s0 + 80001dbc: 01013403 ld s0,16(sp) + 80001dc0: 00813483 ld s1,8(sp) + 80001dc4: 02010113 addi sp,sp,32 + 80001dc8: 00008067 ret + +0000000080001dcc <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi>: + 80001dcc: 00100793 li a5,1 + 80001dd0: 06f58463 beq a1,a5,80001e38 <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x6c> + 80001dd4: 01053883 ld a7,16(a0) + 80001dd8: 00359793 slli a5,a1,0x3 + 80001ddc: 00100e93 li t4,1 + 80001de0: 00f887b3 add a5,a7,a5 + 80001de4: 0007b603 ld a2,0(a5) + 80001de8: 01c0006f j 80001e04 <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x38> + 80001dec: 0106b023 sd a6,0(a3) + 80001df0: 00c73023 sd a2,0(a4) + 80001df4: 0006b703 ld a4,0(a3) + 80001df8: 02f62023 sw a5,32(a2) + 80001dfc: 02a72023 sw a0,32(a4) + 80001e00: 03d58c63 beq a1,t4,80001e38 <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x6c> + 80001e04: 01f5d79b srliw a5,a1,0x1f + 80001e08: 00b787bb addw a5,a5,a1 + 80001e0c: 4017d79b sraiw a5,a5,0x1 + 80001e10: 00058513 mv a0,a1 + 80001e14: 0007859b sext.w a1,a5 + 80001e18: 00359713 slli a4,a1,0x3 + 80001e1c: 00e88733 add a4,a7,a4 + 80001e20: 00073803 ld a6,0(a4) + 80001e24: 02862303 lw t1,40(a2) + 80001e28: 00351693 slli a3,a0,0x3 + 80001e2c: 02882e03 lw t3,40(a6) + 80001e30: 00d886b3 add a3,a7,a3 + 80001e34: fbc34ce3 blt t1,t3,80001dec <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x20> + 80001e38: 00008067 ret + +0000000080001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i>: + 80001e3c: fd010113 addi sp,sp,-48 + 80001e40: 01313423 sd s3,8(sp) + 80001e44: 00052983 lw s3,0(a0) + 80001e48: 00913c23 sd s1,24(sp) + 80001e4c: 00058493 mv s1,a1 + 80001e50: 00853583 ld a1,8(a0) + 80001e54: 02813023 sd s0,32(sp) + 80001e58: 01213823 sd s2,16(sp) + 80001e5c: 00050413 mv s0,a0 + 80001e60: 00060913 mv s2,a2 + 80001e64: 00098513 mv a0,s3 + 80001e68: 00048613 mv a2,s1 + 80001e6c: 02113423 sd ra,40(sp) + 80001e70: eedff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 80001e74: 04050263 beqz a0,80001eb8 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x7c> + 80001e78: 02c54783 lbu a5,44(a0) + 80001e7c: 02079063 bnez a5,80001e9c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x60> + 80001e80: 00054703 lbu a4,0(a0) + 80001e84: 04000793 li a5,64 + 80001e88: 00070463 beqz a4,80001e90 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x54> + 80001e8c: 00350783 lb a5,3(a0) + 80001e90: 02852703 lw a4,40(a0) + 80001e94: 00f907bb addw a5,s2,a5 + 80001e98: 16e7cc63 blt a5,a4,80002010 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1d4> + 80001e9c: 02813083 ld ra,40(sp) + 80001ea0: 02013403 ld s0,32(sp) + 80001ea4: 01813483 ld s1,24(sp) + 80001ea8: 01013903 ld s2,16(sp) + 80001eac: 00813983 ld s3,8(sp) + 80001eb0: 03010113 addi sp,sp,48 + 80001eb4: 00008067 ret + 80001eb8: 01842783 lw a5,24(s0) + 80001ebc: 1af9c263 blt s3,a5,80002060 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x224> + 80001ec0: 0017879b addiw a5,a5,1 + 80001ec4: 00f42c23 sw a5,24(s0) + 80001ec8: 03800513 li a0,56 + 80001ecc: e4cfe0ef jal ra,80000518 + 80001ed0: 0004c803 lbu a6,0(s1) + 80001ed4: 00843683 ld a3,8(s0) + 80001ed8: 00000713 li a4,0 + 80001edc: 12081663 bnez a6,80002008 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1cc> + 80001ee0: 00042603 lw a2,0(s0) + 80001ee4: 01842883 lw a7,24(s0) + 80001ee8: 00448793 addi a5,s1,4 + 80001eec: fff6061b addiw a2,a2,-1 + 80001ef0: 00c77733 and a4,a4,a2 + 80001ef4: 02071713 slli a4,a4,0x20 + 80001ef8: 01d75713 srli a4,a4,0x1d + 80001efc: 00e68733 add a4,a3,a4 + 80001f00: 00073303 ld t1,0(a4) + 80001f04: 01050023 sb a6,0(a0) + 80001f08: 0014c683 lbu a3,1(s1) + 80001f0c: 00450713 addi a4,a0,4 + 80001f10: 01448593 addi a1,s1,20 + 80001f14: 00d500a3 sb a3,1(a0) + 80001f18: 0024c683 lbu a3,2(s1) + 80001f1c: 00d50123 sb a3,2(a0) + 80001f20: 00348603 lb a2,3(s1) + 80001f24: 00c501a3 sb a2,3(a0) + 80001f28: 0144a683 lw a3,20(s1) + 80001f2c: 00d52a23 sw a3,20(a0) + 80001f30: 00078683 lb a3,0(a5) + 80001f34: 00478793 addi a5,a5,4 + 80001f38: 00470713 addi a4,a4,4 + 80001f3c: fed70e23 sb a3,-4(a4) + 80001f40: ffd78683 lb a3,-3(a5) + 80001f44: fed70ea3 sb a3,-3(a4) + 80001f48: ffe78683 lb a3,-2(a5) + 80001f4c: fed70f23 sb a3,-2(a4) + 80001f50: fff78683 lb a3,-1(a5) + 80001f54: fed70fa3 sb a3,-1(a4) + 80001f58: fcb79ce3 bne a5,a1,80001f30 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0xf4> + 80001f5c: 00653c23 sd t1,24(a0) + 80001f60: 03152023 sw a7,32(a0) + 80001f64: 03252223 sw s2,36(a0) + 80001f68: 0c080863 beqz a6,80002038 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1fc> + 80001f6c: 02050623 sb zero,44(a0) + 80001f70: 0004c703 lbu a4,0(s1) + 80001f74: 0126093b addw s2,a2,s2 + 80001f78: 03252423 sw s2,40(a0) + 80001f7c: 02053823 sd zero,48(a0) + 80001f80: 00843683 ld a3,8(s0) + 80001f84: 00000793 li a5,0 + 80001f88: 00070463 beqz a4,80001f90 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x154> + 80001f8c: 0144a783 lw a5,20(s1) + 80001f90: 00042603 lw a2,0(s0) + 80001f94: 01842583 lw a1,24(s0) + 80001f98: 01043703 ld a4,16(s0) + 80001f9c: fff6061b addiw a2,a2,-1 + 80001fa0: 00c7f7b3 and a5,a5,a2 + 80001fa4: 02079793 slli a5,a5,0x20 + 80001fa8: 01d7d793 srli a5,a5,0x1d + 80001fac: 00f687b3 add a5,a3,a5 + 80001fb0: 00359693 slli a3,a1,0x3 + 80001fb4: 00a7b023 sd a0,0(a5) + 80001fb8: 00d707b3 add a5,a4,a3 + 80001fbc: 00a7b023 sd a0,0(a5) + 80001fc0: 00040513 mv a0,s0 + 80001fc4: e09ff0ef jal ra,80001dcc <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi> + 80001fc8: 01842703 lw a4,24(s0) + 80001fcc: 01c42783 lw a5,28(s0) + 80001fd0: 0007069b sext.w a3,a4 + 80001fd4: 0007861b sext.w a2,a5 + 80001fd8: 02d64263 blt a2,a3,80001ffc <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1c0> + 80001fdc: 00f42e23 sw a5,28(s0) + 80001fe0: 02813083 ld ra,40(sp) + 80001fe4: 02013403 ld s0,32(sp) + 80001fe8: 01813483 ld s1,24(sp) + 80001fec: 01013903 ld s2,16(sp) + 80001ff0: 00813983 ld s3,8(sp) + 80001ff4: 03010113 addi sp,sp,48 + 80001ff8: 00008067 ret + 80001ffc: 00070793 mv a5,a4 + 80002000: 00f42e23 sw a5,28(s0) + 80002004: fddff06f j 80001fe0 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1a4> + 80002008: 0144a703 lw a4,20(s1) + 8000200c: ed5ff06f j 80001ee0 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0xa4> + 80002010: 02052583 lw a1,32(a0) + 80002014: 02f52423 sw a5,40(a0) + 80002018: 00040513 mv a0,s0 + 8000201c: 02013403 ld s0,32(sp) + 80002020: 02813083 ld ra,40(sp) + 80002024: 01813483 ld s1,24(sp) + 80002028: 01013903 ld s2,16(sp) + 8000202c: 00813983 ld s3,8(sp) + 80002030: 03010113 addi sp,sp,48 + 80002034: d99ff06f j 80001dcc <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi> + 80002038: 02050623 sb zero,44(a0) + 8000203c: 0004c703 lbu a4,0(s1) + 80002040: 04000613 li a2,64 + 80002044: 0126093b addw s2,a2,s2 + 80002048: 03252423 sw s2,40(a0) + 8000204c: 02053823 sd zero,48(a0) + 80002050: 00843683 ld a3,8(s0) + 80002054: 00000793 li a5,0 + 80002058: f2070ce3 beqz a4,80001f90 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x154> + 8000205c: f31ff06f j 80001f8c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x150> + 80002060: 09800613 li a2,152 + 80002064: 00004597 auipc a1,0x4 + 80002068: 5e458593 addi a1,a1,1508 # 80006648 <_etext+0x3b4> + 8000206c: 00004517 auipc a0,0x4 + 80002070: 26c50513 addi a0,a0,620 # 800062d8 <_etext+0x44> + 80002074: 6c9030ef jal ra,80005f3c + 80002078: 00100513 li a0,1 + 8000207c: 019020ef jal ra,80004894 + +0000000080002080 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv>: + 80002080: 01852783 lw a5,24(a0) + 80002084: 00200713 li a4,2 + 80002088: 0ef75263 bge a4,a5,8000216c <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xec> + 8000208c: 01053603 ld a2,16(a0) + 80002090: 00100293 li t0,1 + 80002094: 02c0006f j 800020c0 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x40> + 80002098: 0deec863 blt t4,t5,80002168 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xe8> + 8000209c: 0107b023 sd a6,0(a5) + 800020a0: 00b6b023 sd a1,0(a3) + 800020a4: 0007b783 ld a5,0(a5) + 800020a8: 0255a023 sw t0,32(a1) + 800020ac: 000f829b sext.w t0,t6 + 800020b0: 03f7a023 sw t6,32(a5) + 800020b4: 01852783 lw a5,24(a0) + 800020b8: 0012971b slliw a4,t0,0x1 + 800020bc: 06f75263 bge a4,a5,80002120 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa0> + 800020c0: 00371793 slli a5,a4,0x3 + 800020c4: 00329693 slli a3,t0,0x3 + 800020c8: 00f60333 add t1,a2,a5 + 800020cc: 00d606b3 add a3,a2,a3 + 800020d0: 0006b803 ld a6,0(a3) + 800020d4: 00033883 ld a7,0(t1) + 800020d8: 00878793 addi a5,a5,8 + 800020dc: 00f607b3 add a5,a2,a5 + 800020e0: 0007b583 ld a1,0(a5) + 800020e4: 02882e83 lw t4,40(a6) + 800020e8: 0288ae03 lw t3,40(a7) + 800020ec: 0285af03 lw t5,40(a1) + 800020f0: 00170f9b addiw t6,a4,1 + 800020f4: fbcec2e3 blt t4,t3,80002098 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x18> + 800020f8: fbee52e3 bge t3,t5,8000209c <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x1c> + 800020fc: 01033023 sd a6,0(t1) + 80002100: 0116b023 sd a7,0(a3) + 80002104: 00033783 ld a5,0(t1) + 80002108: 0258a023 sw t0,32(a7) + 8000210c: 00070293 mv t0,a4 + 80002110: 02e7a023 sw a4,32(a5) + 80002114: 01852783 lw a5,24(a0) + 80002118: 0012971b slliw a4,t0,0x1 + 8000211c: faf742e3 blt a4,a5,800020c0 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x40> + 80002120: 00f70463 beq a4,a5,80002128 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa8> + 80002124: 00008067 ret + 80002128: 01053683 ld a3,16(a0) + 8000212c: 00329613 slli a2,t0,0x3 + 80002130: 00371793 slli a5,a4,0x3 + 80002134: 00f687b3 add a5,a3,a5 + 80002138: 00c686b3 add a3,a3,a2 + 8000213c: 0006b583 ld a1,0(a3) + 80002140: 0007b603 ld a2,0(a5) + 80002144: 0285a503 lw a0,40(a1) + 80002148: 02862803 lw a6,40(a2) + 8000214c: fca85ce3 bge a6,a0,80002124 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa4> + 80002150: 00b7b023 sd a1,0(a5) + 80002154: 00c6b023 sd a2,0(a3) + 80002158: 0007b783 ld a5,0(a5) + 8000215c: 02562023 sw t0,32(a2) + 80002160: 02e7a023 sw a4,32(a5) + 80002164: 00008067 ret + 80002168: 00008067 ret + 8000216c: 00200713 li a4,2 + 80002170: 00100293 li t0,1 + 80002174: faf718e3 bne a4,a5,80002124 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa4> + 80002178: fb1ff06f j 80002128 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa8> + +000000008000217c : + 8000217c: ed010113 addi sp,sp,-304 + 80002180: 03810513 addi a0,sp,56 + 80002184: 12113423 sd ra,296(sp) + 80002188: 12813023 sd s0,288(sp) + 8000218c: 10913c23 sd s1,280(sp) + 80002190: 11213823 sd s2,272(sp) + 80002194: 11313423 sd s3,264(sp) + 80002198: 11413023 sd s4,256(sp) + 8000219c: 0f513c23 sd s5,248(sp) + 800021a0: 0f613823 sd s6,240(sp) + 800021a4: 0f713423 sd s7,232(sp) + 800021a8: 0f813023 sd s8,224(sp) + 800021ac: 0d913c23 sd s9,216(sp) + 800021b0: 0da13823 sd s10,208(sp) + 800021b4: 0db13423 sd s11,200(sp) + 800021b8: 829ff0ef jal ra,800019e0 <_ZN8N_puzzleILi4EEC1Ev> + 800021bc: 00006797 auipc a5,0x6 + 800021c0: 9147b783 ld a5,-1772(a5) # 80007ad0 + 800021c4: 0007a783 lw a5,0(a5) + 800021c8: 00200713 li a4,2 + 800021cc: 2ae78ae3 beq a5,a4,80002c80 + 800021d0: 10f74e63 blt a4,a5,800022ec + 800021d4: 240780e3 beqz a5,80002c14 + 800021d8: 00100713 li a4,1 + 800021dc: 34e796e3 bne a5,a4,80002d28 + 800021e0: 08010493 addi s1,sp,128 + 800021e4: 00005597 auipc a1,0x5 + 800021e8: 32458593 addi a1,a1,804 # 80007508 <_ZL8PUZZLE_M> + 800021ec: 00048513 mv a0,s1 + 800021f0: 9bdff0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 800021f4: 08012783 lw a5,128(sp) + 800021f8: 08014803 lbu a6,128(sp) + 800021fc: 03810713 addi a4,sp,56 + 80002200: 02f12c23 sw a5,56(sp) + 80002204: 09412783 lw a5,148(sp) + 80002208: 09010413 addi s0,sp,144 + 8000220c: 04f12623 sw a5,76(sp) + 80002210: 00048793 mv a5,s1 + 80002214: 0047c503 lbu a0,4(a5) + 80002218: 0057c583 lbu a1,5(a5) + 8000221c: 0067c603 lbu a2,6(a5) + 80002220: 0077c683 lbu a3,7(a5) + 80002224: 00a70223 sb a0,4(a4) + 80002228: 00b702a3 sb a1,5(a4) + 8000222c: 00c70323 sb a2,6(a4) + 80002230: 00d703a3 sb a3,7(a4) + 80002234: 00478793 addi a5,a5,4 + 80002238: 00470713 addi a4,a4,4 + 8000223c: fc879ce3 bne a5,s0,80002214 + 80002240: 00001d37 lui s10,0x1 + 80002244: 800d0793 addi a5,s10,-2048 # 800 <_entry_offset+0x800> + 80002248: 00f13823 sd a5,16(sp) + 8000224c: 10080a63 beqz a6,80002360 + 80002250: 00040613 mv a2,s0 + 80002254: 03810513 addi a0,sp,56 + 80002258: 00000593 li a1,0 + 8000225c: 01000813 li a6,16 + 80002260: 01000893 li a7,16 + 80002264: ff060793 addi a5,a2,-16 + 80002268: 00050713 mv a4,a0 + 8000226c: 00470683 lb a3,4(a4) + 80002270: 10069863 bnez a3,80002380 + 80002274: 0107a023 sw a6,0(a5) + 80002278: 00478793 addi a5,a5,4 + 8000227c: 00170713 addi a4,a4,1 + 80002280: fef616e3 bne a2,a5,8000226c + 80002284: 0045859b addiw a1,a1,4 + 80002288: 01060613 addi a2,a2,16 + 8000228c: 00450513 addi a0,a0,4 + 80002290: fd159ae3 bne a1,a7,80002264 + 80002294: 08012683 lw a3,128(sp) + 80002298: 00100513 li a0,1 + 8000229c: 00000613 li a2,0 + 800022a0: 00100793 li a5,1 + 800022a4: 01000593 li a1,16 + 800022a8: 00279713 slli a4,a5,0x2 + 800022ac: 0c010813 addi a6,sp,192 + 800022b0: 00e80733 add a4,a6,a4 + 800022b4: fc072703 lw a4,-64(a4) + 800022b8: 00d75463 bge a4,a3,800022c0 + 800022bc: 0016061b addiw a2,a2,1 + 800022c0: 0017879b addiw a5,a5,1 + 800022c4: 00078713 mv a4,a5 + 800022c8: feb790e3 bne a5,a1,800022a8 + 800022cc: 0015079b addiw a5,a0,1 + 800022d0: 0ae78c63 beq a5,a4,80002388 + 800022d4: 00251513 slli a0,a0,0x2 + 800022d8: 0c010713 addi a4,sp,192 + 800022dc: 00a70533 add a0,a4,a0 + 800022e0: fc052683 lw a3,-64(a0) + 800022e4: 00078513 mv a0,a5 + 800022e8: fc1ff06f j 800022a8 + 800022ec: 00300713 li a4,3 + 800022f0: 22e79ce3 bne a5,a4,80002d28 + 800022f4: 08010493 addi s1,sp,128 + 800022f8: 00005597 auipc a1,0x5 + 800022fc: 19058593 addi a1,a1,400 # 80007488 <_ZL8PUZZLE_H> + 80002300: 00048513 mv a0,s1 + 80002304: 8a9ff0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002308: 08012783 lw a5,128(sp) + 8000230c: 08014803 lbu a6,128(sp) + 80002310: 03810713 addi a4,sp,56 + 80002314: 02f12c23 sw a5,56(sp) + 80002318: 09412783 lw a5,148(sp) + 8000231c: 09010413 addi s0,sp,144 + 80002320: 04f12623 sw a5,76(sp) + 80002324: 00048793 mv a5,s1 + 80002328: 0047c503 lbu a0,4(a5) + 8000232c: 0057c583 lbu a1,5(a5) + 80002330: 0067c603 lbu a2,6(a5) + 80002334: 0077c683 lbu a3,7(a5) + 80002338: 00a70223 sb a0,4(a4) + 8000233c: 00b702a3 sb a1,5(a4) + 80002340: 00c70323 sb a2,6(a4) + 80002344: 00d703a3 sb a3,7(a4) + 80002348: 00478793 addi a5,a5,4 + 8000234c: 00470713 addi a4,a4,4 + 80002350: fc879ce3 bne a5,s0,80002328 + 80002354: 000c07b7 lui a5,0xc0 + 80002358: 00f13823 sd a5,16(sp) + 8000235c: ee081ae3 bnez a6,80002250 + 80002360: 03500613 li a2,53 + 80002364: 00004597 auipc a1,0x4 + 80002368: 32458593 addi a1,a1,804 # 80006688 <_etext+0x3f4> + 8000236c: 00004517 auipc a0,0x4 + 80002370: f6c50513 addi a0,a0,-148 # 800062d8 <_etext+0x44> + 80002374: 3c9030ef jal ra,80005f3c + 80002378: 00100513 li a0,1 + 8000237c: 518020ef jal ra,80004894 + 80002380: 00d7a023 sw a3,0(a5) # c0000 <_entry_offset+0xc0000> + 80002384: ef5ff06f j 80002278 + 80002388: 03914683 lbu a3,57(sp) + 8000238c: 03a14703 lbu a4,58(sp) + 80002390: 00600793 li a5,6 + 80002394: 40d787bb subw a5,a5,a3 + 80002398: 40e787bb subw a5,a5,a4 + 8000239c: 00c787bb addw a5,a5,a2 + 800023a0: 0017f793 andi a5,a5,1 + 800023a4: fa079ee3 bnez a5,80002360 + 800023a8: 02000513 li a0,32 + 800023ac: 96cfe0ef jal ra,80000518 + 800023b0: 01013783 ld a5,16(sp) + 800023b4: 00050d93 mv s11,a0 + 800023b8: 00f52023 sw a5,0(a0) + 800023bc: 00379513 slli a0,a5,0x3 + 800023c0: 958fe0ef jal ra,80000518 + 800023c4: 000da783 lw a5,0(s11) + 800023c8: 00adb823 sd a0,16(s11) + 800023cc: 0017879b addiw a5,a5,1 + 800023d0: 00379513 slli a0,a5,0x3 + 800023d4: 944fe0ef jal ra,80000518 + 800023d8: 000da703 lw a4,0(s11) + 800023dc: 00adb423 sd a0,8(s11) + 800023e0: 000dbc23 sd zero,24(s11) + 800023e4: 00050793 mv a5,a0 + 800023e8: 02e05263 blez a4,8000240c + 800023ec: fff7071b addiw a4,a4,-1 + 800023f0: 02071713 slli a4,a4,0x20 + 800023f4: 01d75713 srli a4,a4,0x1d + 800023f8: 00850693 addi a3,a0,8 + 800023fc: 00d70733 add a4,a4,a3 + 80002400: 0007b023 sd zero,0(a5) + 80002404: 00878793 addi a5,a5,8 + 80002408: fef71ce3 bne a4,a5,80002400 + 8000240c: 03810593 addi a1,sp,56 + 80002410: 00000613 li a2,0 + 80002414: 000d8513 mv a0,s11 + 80002418: a25ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 8000241c: 018da583 lw a1,24(s11) + 80002420: fff00793 li a5,-1 + 80002424: 00005717 auipc a4,0x5 + 80002428: 5c470713 addi a4,a4,1476 # 800079e8 <_ZL3ans> + 8000242c: 00f72023 sw a5,0(a4) + 80002430: 00000913 li s2,0 + 80002434: 46058863 beqz a1,800028a4 + 80002438: 01048793 addi a5,s1,16 + 8000243c: 00100b13 li s6,1 + 80002440: 00f00d13 li s10,15 + 80002444: 01448c93 addi s9,s1,20 + 80002448: 00f13423 sd a5,8(sp) + 8000244c: 06010993 addi s3,sp,96 + 80002450: 010dbf03 ld t5,16(s11) + 80002454: 00048713 mv a4,s1 + 80002458: 00048613 mv a2,s1 + 8000245c: 008f3783 ld a5,8(t5) + 80002460: 00378683 lb a3,3(a5) + 80002464: 0007cb83 lbu s7,0(a5) + 80002468: 0017ca03 lbu s4,1(a5) + 8000246c: 0027ca83 lbu s5,2(a5) + 80002470: 0007ae83 lw t4,0(a5) + 80002474: 0147ac03 lw s8,20(a5) + 80002478: 00d13c23 sd a3,24(sp) + 8000247c: 00478793 addi a5,a5,4 + 80002480: 0007cf83 lbu t6,0(a5) + 80002484: 0017c303 lbu t1,1(a5) + 80002488: 0027c883 lbu a7,2(a5) + 8000248c: 0037c503 lbu a0,3(a5) + 80002490: 01f60223 sb t6,4(a2) + 80002494: 006602a3 sb t1,5(a2) + 80002498: 01160323 sb a7,6(a2) + 8000249c: 00a603a3 sb a0,7(a2) + 800024a0: 00460613 addi a2,a2,4 + 800024a4: 00478793 addi a5,a5,4 + 800024a8: fcc41ce3 bne s0,a2,80002480 + 800024ac: 5b658a63 beq a1,s6,80002a60 + 800024b0: 08bb50e3 bge s6,a1,80002d30 + 800024b4: 00359593 slli a1,a1,0x3 + 800024b8: 00bf05b3 add a1,t5,a1 + 800024bc: 0005b783 ld a5,0(a1) + 800024c0: 000d8513 mv a0,s11 + 800024c4: 02e13423 sd a4,40(sp) + 800024c8: 00ff3423 sd a5,8(t5) + 800024cc: 0367a023 sw s6,32(a5) + 800024d0: 018da783 lw a5,24(s11) + 800024d4: 03d13023 sd t4,32(sp) + 800024d8: fff7879b addiw a5,a5,-1 + 800024dc: 00fdac23 sw a5,24(s11) + 800024e0: ba1ff0ef jal ra,80002080 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv> + 800024e4: 02813703 ld a4,40(sp) + 800024e8: 02013e83 ld t4,32(sp) + 800024ec: 07812223 sw s8,100(sp) + 800024f0: 05010c13 addi s8,sp,80 + 800024f4: 05d12823 sw t4,80(sp) + 800024f8: 000c0793 mv a5,s8 + 800024fc: 00474303 lbu t1,4(a4) + 80002500: 00574503 lbu a0,5(a4) + 80002504: 00674583 lbu a1,6(a4) + 80002508: 00774603 lbu a2,7(a4) + 8000250c: 00678223 sb t1,4(a5) + 80002510: 00a782a3 sb a0,5(a5) + 80002514: 00b78323 sb a1,6(a5) + 80002518: 00c783a3 sb a2,7(a5) + 8000251c: 00470713 addi a4,a4,4 + 80002520: 00478793 addi a5,a5,4 + 80002524: fce41ce3 bne s0,a4,800024fc + 80002528: 0019091b addiw s2,s2,1 + 8000252c: 00048713 mv a4,s1 + 80002530: 00000793 li a5,0 + 80002534: 0017879b addiw a5,a5,1 + 80002538: 00f72023 sw a5,0(a4) + 8000253c: 00470713 addi a4,a4,4 + 80002540: ffa79ae3 bne a5,s10,80002534 + 80002544: 00048593 mv a1,s1 + 80002548: 06810513 addi a0,sp,104 + 8000254c: 0a012e23 sw zero,188(sp) + 80002550: e5cff0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002554: 06810593 addi a1,sp,104 + 80002558: 05010513 addi a0,sp,80 + 8000255c: fa4ff0ef jal ra,80001d00 <_ZNK8N_puzzleILi4EEeqERKS0_> + 80002560: 78051663 bnez a0,80002cec + 80002564: 320b8863 beqz s7,80002894 + 80002568: 00300793 li a5,3 + 8000256c: 4efa8e63 beq s5,a5,80002a68 + 80002570: 00048593 mv a1,s1 + 80002574: 00048713 mv a4,s1 + 80002578: 05010793 addi a5,sp,80 + 8000257c: 0047ce03 lbu t3,4(a5) + 80002580: 0057c303 lbu t1,5(a5) + 80002584: 0067c503 lbu a0,6(a5) + 80002588: 0077c603 lbu a2,7(a5) + 8000258c: 01c70223 sb t3,4(a4) + 80002590: 006702a3 sb t1,5(a4) + 80002594: 00a70323 sb a0,6(a4) + 80002598: 00c703a3 sb a2,7(a4) + 8000259c: 00478793 addi a5,a5,4 + 800025a0: 00470713 addi a4,a4,4 + 800025a4: fcf99ce3 bne s3,a5,8000257c + 800025a8: 0c010793 addi a5,sp,192 + 800025ac: 002a1e13 slli t3,s4,0x2 + 800025b0: 01c78e33 add t3,a5,t3 + 800025b4: 001a8f13 addi t5,s5,1 + 800025b8: 01ee07b3 add a5,t3,t5 + 800025bc: f9478303 lb t1,-108(a5) + 800025c0: 001a879b addiw a5,s5,1 + 800025c4: 015e0eb3 add t4,t3,s5 + 800025c8: fff3071b addiw a4,t1,-1 + 800025cc: 41f7561b sraiw a2,a4,0x1f + 800025d0: 01e6561b srliw a2,a2,0x1e + 800025d4: 00c7073b addw a4,a4,a2 + 800025d8: 00377713 andi a4,a4,3 + 800025dc: 40c7073b subw a4,a4,a2 + 800025e0: 4157063b subw a2,a4,s5 + 800025e4: 40f707bb subw a5,a4,a5 + 800025e8: 41f65f9b sraiw t6,a2,0x1f + 800025ec: 41f7d71b sraiw a4,a5,0x1f + 800025f0: 00cfc533 xor a0,t6,a2 + 800025f4: 00f747b3 xor a5,a4,a5 + 800025f8: 40e787bb subw a5,a5,a4 + 800025fc: 41f5053b subw a0,a0,t6 + 80002600: 40f5053b subw a0,a0,a5 + 80002604: 01813783 ld a5,24(sp) + 80002608: 0fff7f13 andi t5,t5,255 + 8000260c: fc6e8223 sb t1,-60(t4) + 80002610: 00f5053b addw a0,a0,a5 + 80002614: 01ee0e33 add t3,t3,t5 + 80002618: 001a831b addiw t1,s5,1 + 8000261c: 000a879b sext.w a5,s5 + 80002620: 0185151b slliw a0,a0,0x18 + 80002624: fc0e0223 sb zero,-60(t3) + 80002628: 000a0b9b sext.w s7,s4 + 8000262c: 02f13023 sd a5,32(sp) + 80002630: 4185551b sraiw a0,a0,0x18 + 80002634: 0ff37313 andi t1,t1,255 + 80002638: 00448613 addi a2,s1,4 + 8000263c: 00000e13 li t3,0 + 80002640: ffc60713 addi a4,a2,-4 + 80002644: 005e179b slliw a5,t3,0x5 + 80002648: 41c787bb subw a5,a5,t3 + 8000264c: 0027979b slliw a5,a5,0x2 + 80002650: 41c787bb subw a5,a5,t3 + 80002654: 0027979b slliw a5,a5,0x2 + 80002658: 00470e83 lb t4,4(a4) + 8000265c: 01c787bb addw a5,a5,t3 + 80002660: 0027979b slliw a5,a5,0x2 + 80002664: 01c787bb addw a5,a5,t3 + 80002668: 00170713 addi a4,a4,1 + 8000266c: 01d78e3b addw t3,a5,t4 + 80002670: fce61ae3 bne a2,a4,80002644 + 80002674: 00460613 addi a2,a2,4 + 80002678: fccc94e3 bne s9,a2,80002640 + 8000267c: 00100793 li a5,1 + 80002680: 06f10423 sb a5,104(sp) + 80002684: 074104a3 sb s4,105(sp) + 80002688: 06610523 sb t1,106(sp) + 8000268c: 06a105a3 sb a0,107(sp) + 80002690: 07c12e23 sw t3,124(sp) + 80002694: 06810793 addi a5,sp,104 + 80002698: 0075c703 lbu a4,7(a1) + 8000269c: 0045c303 lbu t1,4(a1) + 800026a0: 0055c503 lbu a0,5(a1) + 800026a4: 0065c603 lbu a2,6(a1) + 800026a8: 00e783a3 sb a4,7(a5) + 800026ac: 00813703 ld a4,8(sp) + 800026b0: 00678223 sb t1,4(a5) + 800026b4: 00a782a3 sb a0,5(a5) + 800026b8: 00c78323 sb a2,6(a5) + 800026bc: 00458593 addi a1,a1,4 + 800026c0: 00478793 addi a5,a5,4 + 800026c4: fce59ae3 bne a1,a4,80002698 + 800026c8: 008db583 ld a1,8(s11) + 800026cc: 000da503 lw a0,0(s11) + 800026d0: 05010613 addi a2,sp,80 + 800026d4: e88ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 800026d8: 50050e63 beqz a0,80002bf4 + 800026dc: 02452603 lw a2,36(a0) + 800026e0: 0016061b addiw a2,a2,1 + 800026e4: 06810593 addi a1,sp,104 + 800026e8: 000d8513 mv a0,s11 + 800026ec: f50ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 800026f0: 380a9063 bnez s5,80002a70 + 800026f4: 00300793 li a5,3 + 800026f8: 20fa0a63 beq s4,a5,8000290c + 800026fc: 00048593 mv a1,s1 + 80002700: 00048713 mv a4,s1 + 80002704: 05010793 addi a5,sp,80 + 80002708: 0047ce03 lbu t3,4(a5) + 8000270c: 0057c303 lbu t1,5(a5) + 80002710: 0067c503 lbu a0,6(a5) + 80002714: 0077c603 lbu a2,7(a5) + 80002718: 01c70223 sb t3,4(a4) + 8000271c: 006702a3 sb t1,5(a4) + 80002720: 00a70323 sb a0,6(a4) + 80002724: 00c703a3 sb a2,7(a4) + 80002728: 00478793 addi a5,a5,4 + 8000272c: 00470713 addi a4,a4,4 + 80002730: fcf99ce3 bne s3,a5,80002708 + 80002734: 02013683 ld a3,32(sp) + 80002738: 001b8613 addi a2,s7,1 + 8000273c: 00261793 slli a5,a2,0x2 + 80002740: 0c010713 addi a4,sp,192 + 80002744: 00f707b3 add a5,a4,a5 + 80002748: 00d787b3 add a5,a5,a3 + 8000274c: f9478503 lb a0,-108(a5) + 80002750: 001b879b addiw a5,s7,1 + 80002754: 002b9e13 slli t3,s7,0x2 + 80002758: fff5031b addiw t1,a0,-1 + 8000275c: 41f3571b sraiw a4,t1,0x1f + 80002760: 01e7571b srliw a4,a4,0x1e + 80002764: 0067073b addw a4,a4,t1 + 80002768: 4027571b sraiw a4,a4,0x2 + 8000276c: 4177033b subw t1,a4,s7 + 80002770: 40f707bb subw a5,a4,a5 + 80002774: 41f7de9b sraiw t4,a5,0x1f + 80002778: 41f35f1b sraiw t5,t1,0x1f + 8000277c: 00fec7b3 xor a5,t4,a5 + 80002780: 006f4333 xor t1,t5,t1 + 80002784: 41d787bb subw a5,a5,t4 + 80002788: 0ff67713 andi a4,a2,255 + 8000278c: 41e3033b subw t1,t1,t5 + 80002790: 00271713 slli a4,a4,0x2 + 80002794: 40f3033b subw t1,t1,a5 + 80002798: 0c010793 addi a5,sp,192 + 8000279c: 00e787b3 add a5,a5,a4 + 800027a0: 01813703 ld a4,24(sp) + 800027a4: 0c010613 addi a2,sp,192 + 800027a8: 01c60633 add a2,a2,t3 + 800027ac: 00d60633 add a2,a2,a3 + 800027b0: 00e3033b addw t1,t1,a4 + 800027b4: fca60223 sb a0,-60(a2) + 800027b8: 001a0e1b addiw t3,s4,1 + 800027bc: 00d787b3 add a5,a5,a3 + 800027c0: 00448513 addi a0,s1,4 + 800027c4: 0183131b slliw t1,t1,0x18 + 800027c8: 4183531b sraiw t1,t1,0x18 + 800027cc: 0ffe7e13 andi t3,t3,255 + 800027d0: fc078223 sb zero,-60(a5) + 800027d4: 00050613 mv a2,a0 + 800027d8: 00000e93 li t4,0 + 800027dc: ffc60713 addi a4,a2,-4 + 800027e0: 005e979b slliw a5,t4,0x5 + 800027e4: 41d787bb subw a5,a5,t4 + 800027e8: 0027979b slliw a5,a5,0x2 + 800027ec: 41d787bb subw a5,a5,t4 + 800027f0: 0027979b slliw a5,a5,0x2 + 800027f4: 00470f03 lb t5,4(a4) + 800027f8: 01d787bb addw a5,a5,t4 + 800027fc: 0027979b slliw a5,a5,0x2 + 80002800: 01d787bb addw a5,a5,t4 + 80002804: 00170713 addi a4,a4,1 + 80002808: 01e78ebb addw t4,a5,t5 + 8000280c: fcc71ae3 bne a4,a2,800027e0 + 80002810: 00470613 addi a2,a4,4 + 80002814: fccc94e3 bne s9,a2,800027dc + 80002818: 00100793 li a5,1 + 8000281c: 06f10423 sb a5,104(sp) + 80002820: 07c104a3 sb t3,105(sp) + 80002824: 07510523 sb s5,106(sp) + 80002828: 066105a3 sb t1,107(sp) + 8000282c: 07d12e23 sw t4,124(sp) + 80002830: 06810793 addi a5,sp,104 + 80002834: 0075c703 lbu a4,7(a1) + 80002838: 0045ce03 lbu t3,4(a1) + 8000283c: 0055c303 lbu t1,5(a1) + 80002840: 0065c603 lbu a2,6(a1) + 80002844: 00e783a3 sb a4,7(a5) + 80002848: 00813703 ld a4,8(sp) + 8000284c: 01c78223 sb t3,4(a5) + 80002850: 006782a3 sb t1,5(a5) + 80002854: 00c78323 sb a2,6(a5) + 80002858: 00050593 mv a1,a0 + 8000285c: 00478793 addi a5,a5,4 + 80002860: 08a70063 beq a4,a0,800028e0 + 80002864: 00450513 addi a0,a0,4 + 80002868: fcdff06f j 80002834 + 8000286c: 008db583 ld a1,8(s11) + 80002870: 000da503 lw a0,0(s11) + 80002874: 05010613 addi a2,sp,80 + 80002878: ce4ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 8000287c: 38050863 beqz a0,80002c0c + 80002880: 02452603 lw a2,36(a0) + 80002884: 0016061b addiw a2,a2,1 + 80002888: 06810593 addi a1,sp,104 + 8000288c: 000d8513 mv a0,s11 + 80002890: dacff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 80002894: 018da583 lw a1,24(s11) + 80002898: 00058663 beqz a1,800028a4 + 8000289c: 01013783 ld a5,16(sp) + 800028a0: bb2798e3 bne a5,s2,80002450 + 800028a4: 12813083 ld ra,296(sp) + 800028a8: 12013403 ld s0,288(sp) + 800028ac: 11813483 ld s1,280(sp) + 800028b0: 11013903 ld s2,272(sp) + 800028b4: 10813983 ld s3,264(sp) + 800028b8: 10013a03 ld s4,256(sp) + 800028bc: 0f813a83 ld s5,248(sp) + 800028c0: 0f013b03 ld s6,240(sp) + 800028c4: 0e813b83 ld s7,232(sp) + 800028c8: 0e013c03 ld s8,224(sp) + 800028cc: 0d813c83 ld s9,216(sp) + 800028d0: 0d013d03 ld s10,208(sp) + 800028d4: 0c813d83 ld s11,200(sp) + 800028d8: 13010113 addi sp,sp,304 + 800028dc: 00008067 ret + 800028e0: 008db583 ld a1,8(s11) + 800028e4: 000da503 lw a0,0(s11) + 800028e8: 05010613 addi a2,sp,80 + 800028ec: c70ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 800028f0: 30050663 beqz a0,80002bfc + 800028f4: 02452603 lw a2,36(a0) + 800028f8: 0016061b addiw a2,a2,1 + 800028fc: 06810593 addi a1,sp,104 + 80002900: 000d8513 mv a0,s11 + 80002904: d38ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 80002908: f80a06e3 beqz s4,80002894 + 8000290c: 00048513 mv a0,s1 + 80002910: 00048793 mv a5,s1 + 80002914: 004c4303 lbu t1,4(s8) + 80002918: 005c4583 lbu a1,5(s8) + 8000291c: 006c4603 lbu a2,6(s8) + 80002920: 007c4703 lbu a4,7(s8) + 80002924: 00678223 sb t1,4(a5) + 80002928: 00b782a3 sb a1,5(a5) + 8000292c: 00c78323 sb a2,6(a5) + 80002930: 00e783a3 sb a4,7(a5) + 80002934: 004c0c13 addi s8,s8,4 + 80002938: 00478793 addi a5,a5,4 + 8000293c: fd899ce3 bne s3,s8,80002914 + 80002940: fffb871b addiw a4,s7,-1 + 80002944: 02013683 ld a3,32(sp) + 80002948: 00070893 mv a7,a4 + 8000294c: 0c010793 addi a5,sp,192 + 80002950: 00271713 slli a4,a4,0x2 + 80002954: 00e78733 add a4,a5,a4 + 80002958: 00d70733 add a4,a4,a3 + 8000295c: f9470603 lb a2,-108(a4) + 80002960: 002b9593 slli a1,s7,0x2 + 80002964: 00b785b3 add a1,a5,a1 + 80002968: fff6031b addiw t1,a2,-1 + 8000296c: 41f3579b sraiw a5,t1,0x1f + 80002970: 01e7d79b srliw a5,a5,0x1e + 80002974: 006787bb addw a5,a5,t1 + 80002978: 4027d79b sraiw a5,a5,0x2 + 8000297c: 41778bbb subw s7,a5,s7 + 80002980: 411787bb subw a5,a5,a7 + 80002984: 41fbde1b sraiw t3,s7,0x1f + 80002988: 41f7d89b sraiw a7,a5,0x1f + 8000298c: 017e4333 xor t1,t3,s7 + 80002990: 00f8c7b3 xor a5,a7,a5 + 80002994: 411787bb subw a5,a5,a7 + 80002998: 41c3033b subw t1,t1,t3 + 8000299c: 40f3033b subw t1,t1,a5 + 800029a0: 01813783 ld a5,24(sp) + 800029a4: 00d585b3 add a1,a1,a3 + 800029a8: fcc58223 sb a2,-60(a1) + 800029ac: 00f3033b addw t1,t1,a5 + 800029b0: fffa059b addiw a1,s4,-1 + 800029b4: 00448e13 addi t3,s1,4 + 800029b8: 0183131b slliw t1,t1,0x18 + 800029bc: fc070223 sb zero,-60(a4) + 800029c0: 4183531b sraiw t1,t1,0x18 + 800029c4: 0ff5f593 andi a1,a1,255 + 800029c8: 000e0893 mv a7,t3 + 800029cc: 00000713 li a4,0 + 800029d0: ffc88613 addi a2,a7,-4 + 800029d4: 0057179b slliw a5,a4,0x5 + 800029d8: 40e787bb subw a5,a5,a4 + 800029dc: 0027979b slliw a5,a5,0x2 + 800029e0: 40e787bb subw a5,a5,a4 + 800029e4: 0027979b slliw a5,a5,0x2 + 800029e8: 00460e83 lb t4,4(a2) + 800029ec: 00e787bb addw a5,a5,a4 + 800029f0: 0027979b slliw a5,a5,0x2 + 800029f4: 00e7873b addw a4,a5,a4 + 800029f8: 00160613 addi a2,a2,1 + 800029fc: 01d7073b addw a4,a4,t4 + 80002a00: fcc89ae3 bne a7,a2,800029d4 + 80002a04: 00488893 addi a7,a7,4 + 80002a08: fd1c94e3 bne s9,a7,800029d0 + 80002a0c: 00100793 li a5,1 + 80002a10: 06f10423 sb a5,104(sp) + 80002a14: 06b104a3 sb a1,105(sp) + 80002a18: 07510523 sb s5,106(sp) + 80002a1c: 066105a3 sb t1,107(sp) + 80002a20: 06e12e23 sw a4,124(sp) + 80002a24: 06810793 addi a5,sp,104 + 80002a28: 00754703 lbu a4,7(a0) + 80002a2c: 00454883 lbu a7,4(a0) + 80002a30: 00554583 lbu a1,5(a0) + 80002a34: 00654603 lbu a2,6(a0) + 80002a38: 00e783a3 sb a4,7(a5) + 80002a3c: 00813703 ld a4,8(sp) + 80002a40: 01178223 sb a7,4(a5) + 80002a44: 00b782a3 sb a1,5(a5) + 80002a48: 00c78323 sb a2,6(a5) + 80002a4c: 000e0513 mv a0,t3 + 80002a50: 00478793 addi a5,a5,4 + 80002a54: e0ee0ce3 beq t3,a4,8000286c + 80002a58: 004e0e13 addi t3,t3,4 + 80002a5c: fcdff06f j 80002a28 + 80002a60: 000dac23 sw zero,24(s11) + 80002a64: a89ff06f j 800024ec + 80002a68: 000a0b9b sext.w s7,s4 + 80002a6c: 02f13023 sd a5,32(sp) + 80002a70: 00048593 mv a1,s1 + 80002a74: 00048713 mv a4,s1 + 80002a78: 05010793 addi a5,sp,80 + 80002a7c: 0047ce03 lbu t3,4(a5) + 80002a80: 0057c303 lbu t1,5(a5) + 80002a84: 0067c503 lbu a0,6(a5) + 80002a88: 0077c603 lbu a2,7(a5) + 80002a8c: 01c70223 sb t3,4(a4) + 80002a90: 006702a3 sb t1,5(a4) + 80002a94: 00a70323 sb a0,6(a4) + 80002a98: 00c703a3 sb a2,7(a4) + 80002a9c: 00478793 addi a5,a5,4 + 80002aa0: 00470713 addi a4,a4,4 + 80002aa4: fd379ce3 bne a5,s3,80002a7c + 80002aa8: 02013683 ld a3,32(sp) + 80002aac: 0c010713 addi a4,sp,192 + 80002ab0: 002b9513 slli a0,s7,0x2 + 80002ab4: fff6879b addiw a5,a3,-1 + 80002ab8: 00a70533 add a0,a4,a0 + 80002abc: 0007861b sext.w a2,a5 + 80002ac0: 00060313 mv t1,a2 + 80002ac4: 00c50633 add a2,a0,a2 + 80002ac8: f9460e83 lb t4,-108(a2) + 80002acc: 00d50533 add a0,a0,a3 + 80002ad0: fffa8e1b addiw t3,s5,-1 + 80002ad4: fffe879b addiw a5,t4,-1 + 80002ad8: 41f7d71b sraiw a4,a5,0x1f + 80002adc: 01e7571b srliw a4,a4,0x1e + 80002ae0: 00e787bb addw a5,a5,a4 + 80002ae4: 0037f793 andi a5,a5,3 + 80002ae8: 40e787bb subw a5,a5,a4 + 80002aec: 40d7873b subw a4,a5,a3 + 80002af0: 406787bb subw a5,a5,t1 + 80002af4: 41f75f9b sraiw t6,a4,0x1f + 80002af8: 41f7df1b sraiw t5,a5,0x1f + 80002afc: 00efc333 xor t1,t6,a4 + 80002b00: 00ff47b3 xor a5,t5,a5 + 80002b04: 41e787bb subw a5,a5,t5 + 80002b08: 41f3033b subw t1,t1,t6 + 80002b0c: 40f3033b subw t1,t1,a5 + 80002b10: 01813783 ld a5,24(sp) + 80002b14: fdd50223 sb t4,-60(a0) + 80002b18: 00448513 addi a0,s1,4 + 80002b1c: 00f3033b addw t1,t1,a5 + 80002b20: 0183131b slliw t1,t1,0x18 + 80002b24: fc060223 sb zero,-60(a2) + 80002b28: 4183531b sraiw t1,t1,0x18 + 80002b2c: 0ffe7e13 andi t3,t3,255 + 80002b30: 00050613 mv a2,a0 + 80002b34: 00000e93 li t4,0 + 80002b38: ffc60713 addi a4,a2,-4 + 80002b3c: 005e979b slliw a5,t4,0x5 + 80002b40: 41d787bb subw a5,a5,t4 + 80002b44: 0027979b slliw a5,a5,0x2 + 80002b48: 41d787bb subw a5,a5,t4 + 80002b4c: 0027979b slliw a5,a5,0x2 + 80002b50: 00470f03 lb t5,4(a4) + 80002b54: 01d787bb addw a5,a5,t4 + 80002b58: 0027979b slliw a5,a5,0x2 + 80002b5c: 01d787bb addw a5,a5,t4 + 80002b60: 00170713 addi a4,a4,1 + 80002b64: 01e78ebb addw t4,a5,t5 + 80002b68: fce61ae3 bne a2,a4,80002b3c + 80002b6c: 00460613 addi a2,a2,4 + 80002b70: fd9614e3 bne a2,s9,80002b38 + 80002b74: 00100793 li a5,1 + 80002b78: 06f10423 sb a5,104(sp) + 80002b7c: 074104a3 sb s4,105(sp) + 80002b80: 07c10523 sb t3,106(sp) + 80002b84: 066105a3 sb t1,107(sp) + 80002b88: 07d12e23 sw t4,124(sp) + 80002b8c: 06810793 addi a5,sp,104 + 80002b90: 0075c703 lbu a4,7(a1) + 80002b94: 0045ce03 lbu t3,4(a1) + 80002b98: 0055c303 lbu t1,5(a1) + 80002b9c: 0065c603 lbu a2,6(a1) + 80002ba0: 00e783a3 sb a4,7(a5) + 80002ba4: 00813703 ld a4,8(sp) + 80002ba8: 01c78223 sb t3,4(a5) + 80002bac: 006782a3 sb t1,5(a5) + 80002bb0: 00c78323 sb a2,6(a5) + 80002bb4: 00050593 mv a1,a0 + 80002bb8: 00478793 addi a5,a5,4 + 80002bbc: 00e50663 beq a0,a4,80002bc8 + 80002bc0: 00450513 addi a0,a0,4 + 80002bc4: fcdff06f j 80002b90 + 80002bc8: 008db583 ld a1,8(s11) + 80002bcc: 000da503 lw a0,0(s11) + 80002bd0: 05010613 addi a2,sp,80 + 80002bd4: 988ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 80002bd8: 02050663 beqz a0,80002c04 + 80002bdc: 02452603 lw a2,36(a0) + 80002be0: 0016061b addiw a2,a2,1 + 80002be4: 06810593 addi a1,sp,104 + 80002be8: 000d8513 mv a0,s11 + 80002bec: a50ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 80002bf0: b05ff06f j 800026f4 + 80002bf4: 80000637 lui a2,0x80000 + 80002bf8: aedff06f j 800026e4 + 80002bfc: 80000637 lui a2,0x80000 + 80002c00: cfdff06f j 800028fc + 80002c04: 80000637 lui a2,0x80000 + 80002c08: fddff06f j 80002be4 + 80002c0c: 80000637 lui a2,0x80000 + 80002c10: c79ff06f j 80002888 + 80002c14: 08010493 addi s1,sp,128 + 80002c18: 00005597 auipc a1,0x5 + 80002c1c: 93058593 addi a1,a1,-1744 # 80007548 <_ZL8PUZZLE_S> + 80002c20: 00048513 mv a0,s1 + 80002c24: f89fe0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002c28: 08012783 lw a5,128(sp) + 80002c2c: 08014803 lbu a6,128(sp) + 80002c30: 03810713 addi a4,sp,56 + 80002c34: 02f12c23 sw a5,56(sp) + 80002c38: 09412783 lw a5,148(sp) + 80002c3c: 09010413 addi s0,sp,144 + 80002c40: 04f12623 sw a5,76(sp) + 80002c44: 00048793 mv a5,s1 + 80002c48: 0047c503 lbu a0,4(a5) + 80002c4c: 0057c583 lbu a1,5(a5) + 80002c50: 0067c603 lbu a2,6(a5) + 80002c54: 0077c683 lbu a3,7(a5) + 80002c58: 00a70223 sb a0,4(a4) + 80002c5c: 00b702a3 sb a1,5(a4) + 80002c60: 00c70323 sb a2,6(a4) + 80002c64: 00d703a3 sb a3,7(a4) + 80002c68: 00478793 addi a5,a5,4 + 80002c6c: 00470713 addi a4,a4,4 + 80002c70: fc879ce3 bne a5,s0,80002c48 + 80002c74: 00a00793 li a5,10 + 80002c78: 00f13823 sd a5,16(sp) + 80002c7c: dd0ff06f j 8000224c + 80002c80: 08010493 addi s1,sp,128 + 80002c84: 00005597 auipc a1,0x5 + 80002c88: 84458593 addi a1,a1,-1980 # 800074c8 <_ZL8PUZZLE_L> + 80002c8c: 00048513 mv a0,s1 + 80002c90: f1dfe0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002c94: 08012783 lw a5,128(sp) + 80002c98: 08014803 lbu a6,128(sp) + 80002c9c: 03810713 addi a4,sp,56 + 80002ca0: 02f12c23 sw a5,56(sp) + 80002ca4: 09412783 lw a5,148(sp) + 80002ca8: 09010413 addi s0,sp,144 + 80002cac: 04f12623 sw a5,76(sp) + 80002cb0: 00048793 mv a5,s1 + 80002cb4: 0047c503 lbu a0,4(a5) + 80002cb8: 0057c583 lbu a1,5(a5) + 80002cbc: 0067c603 lbu a2,6(a5) + 80002cc0: 0077c683 lbu a3,7(a5) + 80002cc4: 00a70223 sb a0,4(a4) + 80002cc8: 00b702a3 sb a1,5(a4) + 80002ccc: 00c70323 sb a2,6(a4) + 80002cd0: 00d703a3 sb a3,7(a4) + 80002cd4: 00478793 addi a5,a5,4 + 80002cd8: 00470713 addi a4,a4,4 + 80002cdc: fcf41ce3 bne s0,a5,80002cb4 + 80002ce0: 000047b7 lui a5,0x4 + 80002ce4: 00f13823 sd a5,16(sp) + 80002ce8: d64ff06f j 8000224c + 80002cec: 008db583 ld a1,8(s11) + 80002cf0: 000da503 lw a0,0(s11) + 80002cf4: 05010613 addi a2,sp,80 + 80002cf8: 864ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 80002cfc: 02050063 beqz a0,80002d1c + 80002d00: 02452583 lw a1,36(a0) + 80002d04: 00090513 mv a0,s2 + 80002d08: 3d5010ef jal ra,800048dc <__muldi3> + 80002d0c: 00005797 auipc a5,0x5 + 80002d10: cdc78793 addi a5,a5,-804 # 800079e8 <_ZL3ans> + 80002d14: 00a7a023 sw a0,0(a5) + 80002d18: b8dff06f j 800028a4 + 80002d1c: 800005b7 lui a1,0x80000 + 80002d20: fff5c593 not a1,a1 + 80002d24: fe1ff06f j 80002d04 + 80002d28: 03300613 li a2,51 + 80002d2c: e38ff06f j 80002364 + 80002d30: 05600613 li a2,86 + 80002d34: 00004597 auipc a1,0x4 + 80002d38: 91458593 addi a1,a1,-1772 # 80006648 <_etext+0x3b4> + 80002d3c: 00003517 auipc a0,0x3 + 80002d40: 59c50513 addi a0,a0,1436 # 800062d8 <_etext+0x44> + 80002d44: 1f8030ef jal ra,80005f3c + 80002d48: 00100513 li a0,1 + 80002d4c: 349010ef jal ra,80004894 + +0000000080002d50 : + 80002d50: 00005797 auipc a5,0x5 + 80002d54: d807b783 ld a5,-640(a5) # 80007ad0 + 80002d58: 0007a783 lw a5,0(a5) + 80002d5c: fd010113 addi sp,sp,-48 + 80002d60: 01213823 sd s2,16(sp) + 80002d64: 00100513 li a0,1 + 80002d68: 00005917 auipc s2,0x5 + 80002d6c: c8490913 addi s2,s2,-892 # 800079ec + 80002d70: 02113423 sd ra,40(sp) + 80002d74: 00f92023 sw a5,0(s2) + 80002d78: 01313423 sd s3,8(sp) + 80002d7c: 02813023 sd s0,32(sp) + 80002d80: 00913c23 sd s1,24(sp) + 80002d84: 831fd0ef jal ra,800005b4 + 80002d88: 00011537 lui a0,0x11 + 80002d8c: 80850513 addi a0,a0,-2040 # 10808 <_entry_offset+0x10808> + 80002d90: f88fd0ef jal ra,80000518 + 80002d94: 00050793 mv a5,a0 + 80002d98: 00092503 lw a0,0(s2) + 80002d9c: 00005717 auipc a4,0x5 + 80002da0: c6f73623 sd a5,-916(a4) # 80007a08 + 80002da4: 00005997 auipc s3,0x5 + 80002da8: c4c98993 addi s3,s3,-948 # 800079f0 + 80002dac: f6cfd0ef jal ra,80000518 + 80002db0: 00092783 lw a5,0(s2) + 80002db4: 00a9b023 sd a0,0(s3) + 80002db8: 1907851b addiw a0,a5,400 + 80002dbc: f5cfd0ef jal ra,80000518 + 80002dc0: 00092783 lw a5,0(s2) + 80002dc4: 00005717 auipc a4,0x5 + 80002dc8: c2a73a23 sd a0,-972(a4) # 800079f8 + 80002dcc: 02f05e63 blez a5,80002e08 + 80002dd0: 00000413 li s0,0 + 80002dd4: ff4fd0ef jal ra,800005c8 + 80002dd8: 02051513 slli a0,a0,0x20 + 80002ddc: 0009b483 ld s1,0(s3) + 80002de0: 01a00593 li a1,26 + 80002de4: 02055513 srli a0,a0,0x20 + 80002de8: 3a9010ef jal ra,80004990 <__umoddi3> + 80002dec: 00092703 lw a4,0(s2) + 80002df0: 008484b3 add s1,s1,s0 + 80002df4: 0615051b addiw a0,a0,97 + 80002df8: 00140413 addi s0,s0,1 + 80002dfc: 00a48023 sb a0,0(s1) + 80002e00: 0004079b sext.w a5,s0 + 80002e04: fce7c8e3 blt a5,a4,80002dd4 + 80002e08: 02813083 ld ra,40(sp) + 80002e0c: 02013403 ld s0,32(sp) + 80002e10: 01813483 ld s1,24(sp) + 80002e14: 01013903 ld s2,16(sp) + 80002e18: 00813983 ld s3,8(sp) + 80002e1c: 03010113 addi sp,sp,48 + 80002e20: 00008067 ret + +0000000080002e24 : + 80002e24: ff010113 addi sp,sp,-16 + 80002e28: 00005697 auipc a3,0x5 + 80002e2c: be06b683 ld a3,-1056(a3) # 80007a08 + 80002e30: 00005617 auipc a2,0x5 + 80002e34: bbc62603 lw a2,-1092(a2) # 800079ec + 80002e38: 00005597 auipc a1,0x5 + 80002e3c: bc05b583 ld a1,-1088(a1) # 800079f8 + 80002e40: 00005517 auipc a0,0x5 + 80002e44: bb053503 ld a0,-1104(a0) # 800079f0 + 80002e48: 00113423 sd ra,8(sp) + 80002e4c: 084000ef jal ra,80002ed0 + 80002e50: 00813083 ld ra,8(sp) + 80002e54: 00005797 auipc a5,0x5 + 80002e58: baa7a623 sw a0,-1108(a5) # 80007a00 + 80002e5c: 01010113 addi sp,sp,16 + 80002e60: 00008067 ret + +0000000080002e64 : + 80002e64: 00005517 auipc a0,0x5 + 80002e68: b9453503 ld a0,-1132(a0) # 800079f8 + 80002e6c: 00005597 auipc a1,0x5 + 80002e70: b945a583 lw a1,-1132(a1) # 80007a00 + 80002e74: ff010113 addi sp,sp,-16 + 80002e78: 00b505b3 add a1,a0,a1 + 80002e7c: 00113423 sd ra,8(sp) + 80002e80: f98fd0ef jal ra,80000618 + 80002e84: 00005797 auipc a5,0x5 + 80002e88: c4c7b783 ld a5,-948(a5) # 80007ad0 + 80002e8c: 0187a783 lw a5,24(a5) + 80002e90: 00813083 ld ra,8(sp) + 80002e94: 0005051b sext.w a0,a0 + 80002e98: 40a78533 sub a0,a5,a0 + 80002e9c: 00153513 seqz a0,a0 + 80002ea0: 01010113 addi sp,sp,16 + 80002ea4: 00008067 ret + +0000000080002ea8 : + 80002ea8: ff010113 addi sp,sp,-16 + 80002eac: 00800613 li a2,8 + 80002eb0: 00004597 auipc a1,0x4 + 80002eb4: 82058593 addi a1,a1,-2016 # 800066d0 <_etext+0x43c> + 80002eb8: 00003517 auipc a0,0x3 + 80002ebc: 42050513 addi a0,a0,1056 # 800062d8 <_etext+0x44> + 80002ec0: 00113423 sd ra,8(sp) + 80002ec4: 078030ef jal ra,80005f3c + 80002ec8: 00100513 li a0,1 + 80002ecc: 1c9010ef jal ra,80004894 + +0000000080002ed0 : + 80002ed0: 00100793 li a5,1 + 80002ed4: f5010113 addi sp,sp,-176 + 80002ed8: 02079793 slli a5,a5,0x20 + 80002edc: 00060713 mv a4,a2 + 80002ee0: 02c13023 sd a2,32(sp) + 80002ee4: 0a113423 sd ra,168(sp) + 80002ee8: 0a813023 sd s0,160(sp) + 80002eec: 08913c23 sd s1,152(sp) + 80002ef0: 09213823 sd s2,144(sp) + 80002ef4: 09313423 sd s3,136(sp) + 80002ef8: 09413023 sd s4,128(sp) + 80002efc: 07513c23 sd s5,120(sp) + 80002f00: 07613823 sd s6,112(sp) + 80002f04: 07713423 sd s7,104(sp) + 80002f08: 07813023 sd s8,96(sp) + 80002f0c: 05913c23 sd s9,88(sp) + 80002f10: 05a13823 sd s10,80(sp) + 80002f14: 05b13423 sd s11,72(sp) + 80002f18: fff60613 addi a2,a2,-1 + 80002f1c: e6e78793 addi a5,a5,-402 + 80002f20: 00a13423 sd a0,8(sp) + 80002f24: 02b13823 sd a1,48(sp) + 80002f28: 58c7e463 bltu a5,a2,800034b0 + 80002f2c: 00300593 li a1,3 + 80002f30: 0d700793 li a5,215 + 80002f34: 02b13423 sd a1,40(sp) + 80002f38: 46e7e263 bltu a5,a4,8000339c + 80002f3c: 000107b7 lui a5,0x10 + 80002f40: 00011737 lui a4,0x11 + 80002f44: 00878793 addi a5,a5,8 # 10008 <_entry_offset+0x10008> + 80002f48: 80870713 addi a4,a4,-2040 # 10808 <_entry_offset+0x10808> + 80002f4c: 00f687b3 add a5,a3,a5 + 80002f50: 00e68733 add a4,a3,a4 + 80002f54: 00078023 sb zero,0(a5) + 80002f58: 00178793 addi a5,a5,1 + 80002f5c: fef71ce3 bne a4,a5,80002f54 + 80002f60: 00813783 ld a5,8(sp) + 80002f64: 03013703 ld a4,48(sp) + 80002f68: 02813583 ld a1,40(sp) + 80002f6c: 00c78633 add a2,a5,a2 + 80002f70: 02c13c23 sd a2,56(sp) + 80002f74: 00b704b3 add s1,a4,a1 + 80002f78: 00913823 sd s1,16(sp) + 80002f7c: ff660c13 addi s8,a2,-10 + 80002f80: 00448e13 addi t3,s1,4 + 80002f84: 00078713 mv a4,a5 + 80002f88: 5cfc6663 bltu s8,a5,80003554 + 80002f8c: 02013783 ld a5,32(sp) + 80002f90: ffc60d13 addi s10,a2,-4 + 80002f94: 0fe00c93 li s9,254 + 80002f98: 0017d793 srli a5,a5,0x1 + 80002f9c: 00f707b3 add a5,a4,a5 + 80002fa0: 00f13c23 sd a5,24(sp) + 80002fa4: 00010bb7 lui s7,0x10 + 80002fa8: 00070793 mv a5,a4 + 80002fac: 00400993 li s3,4 + 80002fb0: 80000737 lui a4,0x80000 + 80002fb4: 80000db7 lui s11,0x80000 + 80002fb8: 40fd0fb3 sub t6,s10,a5 + 80002fbc: 01fcd463 bge s9,t6,80002fc4 + 80002fc0: 0fe00f93 li t6,254 + 80002fc4: 0017c603 lbu a2,1(a5) + 80002fc8: 0027c503 lbu a0,2(a5) + 80002fcc: 0007c583 lbu a1,0(a5) + 80002fd0: 0086161b slliw a2,a2,0x8 + 80002fd4: 0105151b slliw a0,a0,0x10 + 80002fd8: 00a66633 or a2,a2,a0 + 80002fdc: 00b66633 or a2,a2,a1 + 80002fe0: 00d6559b srliw a1,a2,0xd + 80002fe4: 0096581b srliw a6,a2,0x9 + 80002fe8: 00b84833 xor a6,a6,a1 + 80002fec: 0006061b sext.w a2,a2 + 80002ff0: 00c84833 xor a6,a6,a2 + 80002ff4: 7ff87313 andi t1,a6,2047 + 80002ff8: 00531893 slli a7,t1,0x5 + 80002ffc: 011688b3 add a7,a3,a7 + 80003000: 0088b583 ld a1,8(a7) + 80003004: 00668533 add a0,a3,t1 + 80003008: 00ab8533 add a0,s7,a0 + 8000300c: ffe78a13 addi s4,a5,-2 + 80003010: 00854283 lbu t0,8(a0) + 80003014: 001f8f93 addi t6,t6,1 + 80003018: 00030813 mv a6,t1 + 8000301c: 0945fe63 bgeu a1,s4,800030b8 + 80003020: 2c029e63 bnez t0,800032fc + 80003024: 00f8b423 sd a5,8(a7) + 80003028: 00100613 li a2,1 + 8000302c: 00c50423 sb a2,8(a0) + 80003030: 0017571b srliw a4,a4,0x1 + 80003034: 0007c603 lbu a2,0(a5) + 80003038: 001e0e13 addi t3,t3,1 + 8000303c: 00178793 addi a5,a5,1 + 80003040: fece0fa3 sb a2,-1(t3) + 80003044: 00177613 andi a2,a4,1 + 80003048: 00060593 mv a1,a2 + 8000304c: 14fc6063 bltu s8,a5,8000318c + 80003050: f60584e3 beqz a1,80002fb8 + 80003054: 01813603 ld a2,24(sp) + 80003058: 02f67063 bgeu a2,a5,80003078 + 8000305c: 00813603 ld a2,8(sp) + 80003060: 01013583 ld a1,16(sp) + 80003064: 40c78633 sub a2,a5,a2 + 80003068: 40565513 srai a0,a2,0x5 + 8000306c: 40be05b3 sub a1,t3,a1 + 80003070: 40a60633 sub a2,a2,a0 + 80003074: 44b64a63 blt a2,a1,800034c8 + 80003078: 0017571b srliw a4,a4,0x1 + 8000307c: 01b76733 or a4,a4,s11 + 80003080: 0007071b sext.w a4,a4 + 80003084: 00875513 srli a0,a4,0x8 + 80003088: 01075593 srli a1,a4,0x10 + 8000308c: 01875613 srli a2,a4,0x18 + 80003090: 00e48023 sb a4,0(s1) + 80003094: 00a480a3 sb a0,1(s1) + 80003098: 00b48123 sb a1,2(s1) + 8000309c: 00c481a3 sb a2,3(s1) + 800030a0: 40fd0fb3 sub t6,s10,a5 + 800030a4: 000e0493 mv s1,t3 + 800030a8: 80000737 lui a4,0x80000 + 800030ac: 004e0e13 addi t3,t3,4 + 800030b0: f1fcdae3 bge s9,t6,80002fc4 + 800030b4: f0dff06f j 80002fc0 + 800030b8: 00000e93 li t4,0 + 800030bc: 00531593 slli a1,t1,0x5 + 800030c0: 0002891b sext.w s2,t0 + 800030c4: 00b685b3 add a1,a3,a1 + 800030c8: 00000f13 li t5,0 + 800030cc: 00100513 li a0,1 + 800030d0: 03257863 bgeu a0,s2,80003100 + 800030d4: 0105b883 ld a7,16(a1) + 800030d8: 020e9393 slli t2,t4,0x20 + 800030dc: 0203d393 srli t2,t2,0x20 + 800030e0: 00778433 add s0,a5,t2 + 800030e4: 007883b3 add t2,a7,t2 + 800030e8: 00044403 lbu s0,0(s0) + 800030ec: 0003c383 lbu t2,0(t2) + 800030f0: 18740c63 beq s0,t2,80003288 + 800030f4: 0015051b addiw a0,a0,1 + 800030f8: 00858593 addi a1,a1,8 + 800030fc: fd351ae3 bne a0,s3,800030d0 + 80003100: 0032f593 andi a1,t0,3 + 80003104: 00231613 slli a2,t1,0x2 + 80003108: 00b60633 add a2,a2,a1 + 8000310c: 00361613 slli a2,a2,0x3 + 80003110: 00c68633 add a2,a3,a2 + 80003114: 00668333 add t1,a3,t1 + 80003118: 00f63423 sd a5,8(a2) + 8000311c: 006b8333 add t1,s7,t1 + 80003120: 0012829b addiw t0,t0,1 + 80003124: 0017561b srliw a2,a4,0x1 + 80003128: 00530423 sb t0,8(t1) + 8000312c: 00200593 li a1,2 + 80003130: 0006071b sext.w a4,a2 + 80003134: f1d5f0e3 bgeu a1,t4,80003034 + 80003138: 01b66733 or a4,a2,s11 + 8000313c: 020e9613 slli a2,t4,0x20 + 80003140: 02065613 srli a2,a2,0x20 + 80003144: 0058181b slliw a6,a6,0x5 + 80003148: 010f6f33 or t5,t5,a6 + 8000314c: 00c787b3 add a5,a5,a2 + 80003150: 00900613 li a2,9 + 80003154: 0007071b sext.w a4,a4 + 80003158: 000f0f1b sext.w t5,t5 + 8000315c: 21d66c63 bltu a2,t4,80003374 + 80003160: ffee8e9b addiw t4,t4,-2 + 80003164: 002e9e9b slliw t4,t4,0x2 + 80003168: 01df6f33 or t5,t5,t4 + 8000316c: 000f0f1b sext.w t5,t5 + 80003170: 008f5613 srli a2,t5,0x8 + 80003174: 00ce00a3 sb a2,1(t3) + 80003178: 01ee0023 sb t5,0(t3) + 8000317c: 00177613 andi a2,a4,1 + 80003180: 002e0e13 addi t3,t3,2 + 80003184: 00060593 mv a1,a2 + 80003188: ecfc74e3 bgeu s8,a5,80003050 + 8000318c: 03813883 ld a7,56(sp) + 80003190: 0017551b srliw a0,a4,0x1 + 80003194: 0017581b srliw a6,a4,0x1 + 80003198: 20f8e863 bltu a7,a5,800033a8 + 8000319c: 03813583 ld a1,56(sp) + 800031a0: 02013803 ld a6,32(sp) + 800031a4: 80000f37 lui t5,0x80000 + 800031a8: ffd58313 addi t1,a1,-3 + 800031ac: 00813583 ld a1,8(sp) + 800031b0: 00010eb7 lui t4,0x10 + 800031b4: 010588b3 add a7,a1,a6 + 800031b8: 08c0006f j 80003244 + 800031bc: 0027581b srliw a6,a4,0x2 + 800031c0: 00157593 andi a1,a0,1 + 800031c4: 000f8713 mv a4,t6 + 800031c8: 0007cf83 lbu t6,0(a5) + 800031cc: 06f36063 bltu t1,a5,8000322c + 800031d0: 0017c503 lbu a0,1(a5) + 800031d4: 0027c603 lbu a2,2(a5) + 800031d8: 0085151b slliw a0,a0,0x8 + 800031dc: 0106161b slliw a2,a2,0x10 + 800031e0: 00c56533 or a0,a0,a2 + 800031e4: 00d5529b srliw t0,a0,0xd + 800031e8: 0095561b srliw a2,a0,0x9 + 800031ec: 00564633 xor a2,a2,t0 + 800031f0: 01f56533 or a0,a0,t6 + 800031f4: 00a64633 xor a2,a2,a0 + 800031f8: 7ff67613 andi a2,a2,2047 + 800031fc: 00c68533 add a0,a3,a2 + 80003200: 00ae8533 add a0,t4,a0 + 80003204: 00854f83 lbu t6,8(a0) + 80003208: 00261613 slli a2,a2,0x2 + 8000320c: 003ff293 andi t0,t6,3 + 80003210: 00560633 add a2,a2,t0 + 80003214: 00361613 slli a2,a2,0x3 + 80003218: 00c68633 add a2,a3,a2 + 8000321c: 00f63423 sd a5,8(a2) + 80003220: 001f8f9b addiw t6,t6,1 + 80003224: 01f50423 sb t6,8(a0) + 80003228: 0007cf83 lbu t6,0(a5) + 8000322c: 01fe0023 sb t6,0(t3) + 80003230: 00178793 addi a5,a5,1 + 80003234: 001e0e13 addi t3,t3,1 + 80003238: 17178863 beq a5,a7,800033a8 + 8000323c: 0017551b srliw a0,a4,0x1 + 80003240: 00177613 andi a2,a4,1 + 80003244: 00050f9b sext.w t6,a0 + 80003248: f6060ae3 beqz a2,800031bc + 8000324c: 01e56533 or a0,a0,t5 + 80003250: 0005051b sext.w a0,a0 + 80003254: 00855593 srli a1,a0,0x8 + 80003258: 01855713 srli a4,a0,0x18 + 8000325c: 01055613 srli a2,a0,0x10 + 80003260: 00b480a3 sb a1,1(s1) + 80003264: 00e481a3 sb a4,3(s1) + 80003268: 00a48023 sb a0,0(s1) + 8000326c: 00c48123 sb a2,2(s1) + 80003270: 20000837 lui a6,0x20000 + 80003274: 000e0493 mv s1,t3 + 80003278: 00000593 li a1,0 + 8000327c: 004e0e13 addi t3,t3,4 + 80003280: 40000737 lui a4,0x40000 + 80003284: f45ff06f j 800031c8 + 80003288: 0018c383 lbu t2,1(a7) + 8000328c: 0028c403 lbu s0,2(a7) + 80003290: 0008ca83 lbu s5,0(a7) + 80003294: 0083939b slliw t2,t2,0x8 + 80003298: 0104141b slliw s0,s0,0x10 + 8000329c: 0083e3b3 or t2,t2,s0 + 800032a0: 0153e3b3 or t2,t2,s5 + 800032a4: 0003839b sext.w t2,t2 + 800032a8: e4c396e3 bne t2,a2,800030f4 + 800032ac: e548f4e3 bgeu a7,s4,800030f4 + 800032b0: 0038c403 lbu s0,3(a7) + 800032b4: 0037c383 lbu t2,3(a5) + 800032b8: 28741a63 bne s0,t2,8000354c + 800032bc: 00300393 li t2,3 + 800032c0: 01f3e663 bltu t2,t6,800032cc + 800032c4: 2880006f j 8000354c + 800032c8: 03f47263 bgeu s0,t6,800032ec + 800032cc: 0013839b addiw t2,t2,1 + 800032d0: 02039413 slli s0,t2,0x20 + 800032d4: 02045413 srli s0,s0,0x20 + 800032d8: 00888b33 add s6,a7,s0 + 800032dc: 00878ab3 add s5,a5,s0 + 800032e0: 000b4b03 lbu s6,0(s6) + 800032e4: 000aca83 lbu s5,0(s5) + 800032e8: ff5b00e3 beq s6,s5,800032c8 + 800032ec: e07ef4e3 bgeu t4,t2,800030f4 + 800032f0: 00050f13 mv t5,a0 + 800032f4: 00038e93 mv t4,t2 + 800032f8: dfdff06f j 800030f4 + 800032fc: 0015c503 lbu a0,1(a1) + 80003300: 0025c883 lbu a7,2(a1) + 80003304: 0005ce83 lbu t4,0(a1) + 80003308: 0085151b slliw a0,a0,0x8 + 8000330c: 0108989b slliw a7,a7,0x10 + 80003310: 01156533 or a0,a0,a7 + 80003314: 01d56533 or a0,a0,t4 + 80003318: 0005051b sext.w a0,a0 + 8000331c: 00000e93 li t4,0 + 80003320: d8c51ee3 bne a0,a2,800030bc + 80003324: 0035c883 lbu a7,3(a1) + 80003328: 0037c503 lbu a0,3(a5) + 8000332c: 00300e93 li t4,3 + 80003330: d8a896e3 bne a7,a0,800030bc + 80003334: 0045c883 lbu a7,4(a1) + 80003338: 0047c503 lbu a0,4(a5) + 8000333c: 00400e93 li t4,4 + 80003340: d6a89ee3 bne a7,a0,800030bc + 80003344: 01f9e663 bltu s3,t6,80003350 + 80003348: d75ff06f j 800030bc + 8000334c: d7f578e3 bgeu a0,t6,800030bc + 80003350: 001e8e9b addiw t4,t4,1 + 80003354: 020e9513 slli a0,t4,0x20 + 80003358: 02055513 srli a0,a0,0x20 + 8000335c: 00a588b3 add a7,a1,a0 + 80003360: 00a78f33 add t5,a5,a0 + 80003364: 0008c883 lbu a7,0(a7) + 80003368: 000f4f03 lbu t5,0(t5) # ffffffff80000000 <_end+0xfffffffeffff0000> + 8000336c: ffe880e3 beq a7,t5,8000334c + 80003370: d4dff06f j 800030bc + 80003374: 010e9e9b slliw t4,t4,0x10 + 80003378: 01df6eb3 or t4,t5,t4 + 8000337c: 000e8e9b sext.w t4,t4 + 80003380: 008ed593 srli a1,t4,0x8 + 80003384: 010ed613 srli a2,t4,0x10 + 80003388: 01de0023 sb t4,0(t3) + 8000338c: 00be00a3 sb a1,1(t3) + 80003390: 00ce0123 sb a2,2(t3) + 80003394: 003e0e13 addi t3,t3,3 + 80003398: cadff06f j 80003044 + 8000339c: 00900793 li a5,9 + 800033a0: 02f13423 sd a5,40(sp) + 800033a4: b99ff06f j 80002f3c + 800033a8: 00059e63 bnez a1,800033c4 + 800033ac: 0017579b srliw a5,a4,0x1 + 800033b0: 0017f613 andi a2,a5,1 + 800033b4: 0007081b sext.w a6,a4 + 800033b8: 0007871b sext.w a4,a5 + 800033bc: fe0608e3 beqz a2,800033ac + 800033c0: 0028581b srliw a6,a6,0x2 + 800033c4: 800007b7 lui a5,0x80000 + 800033c8: 00f86833 or a6,a6,a5 + 800033cc: 01885793 srli a5,a6,0x18 + 800033d0: 00f481a3 sb a5,3(s1) + 800033d4: 01013783 ld a5,16(sp) + 800033d8: 00885613 srli a2,a6,0x8 + 800033dc: 01085713 srli a4,a6,0x10 + 800033e0: 40fe0533 sub a0,t3,a5 + 800033e4: 01048023 sb a6,0(s1) + 800033e8: 00c480a3 sb a2,1(s1) + 800033ec: 00e48123 sb a4,2(s1) + 800033f0: 00900793 li a5,9 + 800033f4: 00f55463 bge a0,a5,800033fc + 800033f8: 00900513 li a0,9 + 800033fc: 02813783 ld a5,40(sp) + 80003400: 00f50533 add a0,a0,a5 + 80003404: 00100793 li a5,1 + 80003408: 0006b023 sd zero,0(a3) + 8000340c: 02813683 ld a3,40(sp) + 80003410: 00300713 li a4,3 + 80003414: 02014603 lbu a2,32(sp) + 80003418: 0ff57593 andi a1,a0,255 + 8000341c: 08e68e63 beq a3,a4,800034b8 + 80003420: 02012683 lw a3,32(sp) + 80003424: 03013e83 ld t4,48(sp) + 80003428: 0005071b sext.w a4,a0 + 8000342c: 00875e13 srli t3,a4,0x8 + 80003430: 01075313 srli t1,a4,0x10 + 80003434: 0086d893 srli a7,a3,0x8 + 80003438: 0106d813 srli a6,a3,0x10 + 8000343c: 01875713 srli a4,a4,0x18 + 80003440: 0186d693 srli a3,a3,0x18 + 80003444: 0027e793 ori a5,a5,2 + 80003448: 00be80a3 sb a1,1(t4) # 10001 <_entry_offset+0x10001> + 8000344c: 01ce8123 sb t3,2(t4) + 80003450: 006e81a3 sb t1,3(t4) + 80003454: 00ee8223 sb a4,4(t4) + 80003458: 00ce82a3 sb a2,5(t4) + 8000345c: 011e8323 sb a7,6(t4) + 80003460: 010e83a3 sb a6,7(t4) + 80003464: 00de8423 sb a3,8(t4) + 80003468: 03013703 ld a4,48(sp) + 8000346c: 0487e793 ori a5,a5,72 + 80003470: 00f70023 sb a5,0(a4) # 40000000 <_entry_offset+0x40000000> + 80003474: 0a813083 ld ra,168(sp) + 80003478: 0a013403 ld s0,160(sp) + 8000347c: 09813483 ld s1,152(sp) + 80003480: 09013903 ld s2,144(sp) + 80003484: 08813983 ld s3,136(sp) + 80003488: 08013a03 ld s4,128(sp) + 8000348c: 07813a83 ld s5,120(sp) + 80003490: 07013b03 ld s6,112(sp) + 80003494: 06813b83 ld s7,104(sp) + 80003498: 06013c03 ld s8,96(sp) + 8000349c: 05813c83 ld s9,88(sp) + 800034a0: 05013d03 ld s10,80(sp) + 800034a4: 04813d83 ld s11,72(sp) + 800034a8: 0b010113 addi sp,sp,176 + 800034ac: 00008067 ret + 800034b0: 00000513 li a0,0 + 800034b4: fc1ff06f j 80003474 + 800034b8: 03013703 ld a4,48(sp) + 800034bc: 00b700a3 sb a1,1(a4) + 800034c0: 00c70123 sb a2,2(a4) + 800034c4: fa5ff06f j 80003468 + 800034c8: 00813783 ld a5,8(sp) + 800034cc: 0a078c63 beqz a5,80003584 + 800034d0: 00813603 ld a2,8(sp) + 800034d4: 02013583 ld a1,32(sp) + 800034d8: 01013703 ld a4,16(sp) + 800034dc: 00b607b3 add a5,a2,a1 + 800034e0: 02f77c63 bgeu a4,a5,80003518 + 800034e4: 02e67a63 bgeu a2,a4,80003518 + 800034e8: 00b70733 add a4,a4,a1 + 800034ec: fff7c603 lbu a2,-1(a5) # ffffffff7fffffff <_end+0xfffffffefffeffff> + 800034f0: fff78793 addi a5,a5,-1 + 800034f4: fff70713 addi a4,a4,-1 + 800034f8: 00c70023 sb a2,0(a4) + 800034fc: 00813603 ld a2,8(sp) + 80003500: fef616e3 bne a2,a5,800034ec + 80003504: 02813783 ld a5,40(sp) + 80003508: 02013703 ld a4,32(sp) + 8000350c: 00e78533 add a0,a5,a4 + 80003510: 00000793 li a5,0 + 80003514: ef5ff06f j 80003408 + 80003518: 01013783 ld a5,16(sp) + 8000351c: 02013703 ld a4,32(sp) + 80003520: 00e78733 add a4,a5,a4 + 80003524: 00813583 ld a1,8(sp) + 80003528: 01013603 ld a2,16(sp) + 8000352c: 0005c783 lbu a5,0(a1) + 80003530: 00160613 addi a2,a2,1 + 80003534: 00158593 addi a1,a1,1 + 80003538: 00c13823 sd a2,16(sp) + 8000353c: 00b13423 sd a1,8(sp) + 80003540: fef60fa3 sb a5,-1(a2) + 80003544: fec710e3 bne a4,a2,80003524 + 80003548: fbdff06f j 80003504 + 8000354c: 00300393 li t2,3 + 80003550: d9dff06f j 800032ec + 80003554: 00813783 ld a5,8(sp) + 80003558: 03813703 ld a4,56(sp) + 8000355c: 00f76e63 bltu a4,a5,80003578 + 80003560: 00813783 ld a5,8(sp) + 80003564: 01013483 ld s1,16(sp) + 80003568: 80000737 lui a4,0x80000 + 8000356c: 40000537 lui a0,0x40000 + 80003570: 00000613 li a2,0 + 80003574: c29ff06f j 8000319c + 80003578: 01013483 ld s1,16(sp) + 8000357c: 80000737 lui a4,0x80000 + 80003580: e2dff06f j 800033ac + 80003584: 925ff0ef jal ra,80002ea8 + +0000000080003588 : + 80003588: 00004797 auipc a5,0x4 + 8000358c: 5487b783 ld a5,1352(a5) # 80007ad0 + 80003590: 0007a783 lw a5,0(a5) + 80003594: fd010113 addi sp,sp,-48 + 80003598: 01213823 sd s2,16(sp) + 8000359c: 00004537 lui a0,0x4 + 800035a0: 00004917 auipc s2,0x4 + 800035a4: 47090913 addi s2,s2,1136 # 80007a10 + 800035a8: 02113423 sd ra,40(sp) + 800035ac: 00f92023 sw a5,0(s2) + 800035b0: 01313423 sd s3,8(sp) + 800035b4: 00004797 auipc a5,0x4 + 800035b8: 4607a623 sw zero,1132(a5) # 80007a20 + 800035bc: 02813023 sd s0,32(sp) + 800035c0: 00913c23 sd s1,24(sp) + 800035c4: 01413023 sd s4,0(sp) + 800035c8: f51fc0ef jal ra,80000518 + 800035cc: 00050793 mv a5,a0 + 800035d0: 40000513 li a0,1024 + 800035d4: 00004717 auipc a4,0x4 + 800035d8: 44f73223 sd a5,1092(a4) # 80007a18 + 800035dc: f3dfc0ef jal ra,80000518 + 800035e0: 00050793 mv a5,a0 + 800035e4: 00002537 lui a0,0x2 + 800035e8: 00004717 auipc a4,0x4 + 800035ec: 44f73023 sd a5,1088(a4) # 80007a28 + 800035f0: f29fc0ef jal ra,80000518 + 800035f4: 00092783 lw a5,0(s2) + 800035f8: 00004717 auipc a4,0x4 + 800035fc: 44a73023 sd a0,1088(a4) # 80007a38 + 80003600: 00004997 auipc s3,0x4 + 80003604: 44098993 addi s3,s3,1088 # 80007a40 + 80003608: 0017851b addiw a0,a5,1 + 8000360c: 00003797 auipc a5,0x3 + 80003610: 10c78793 addi a5,a5,268 # 80006718 <_etext+0x484> + 80003614: 00004717 auipc a4,0x4 + 80003618: 40f73e23 sd a5,1052(a4) # 80007a30 + 8000361c: efdfc0ef jal ra,80000518 + 80003620: 00050793 mv a5,a0 + 80003624: 00001537 lui a0,0x1 + 80003628: 00f9b023 sd a5,0(s3) + 8000362c: eedfc0ef jal ra,80000518 + 80003630: 00050793 mv a5,a0 + 80003634: 00100513 li a0,1 + 80003638: 00004717 auipc a4,0x4 + 8000363c: 40f73c23 sd a5,1048(a4) # 80007a50 + 80003640: 00004797 auipc a5,0x4 + 80003644: 4007a423 sw zero,1032(a5) # 80007a48 + 80003648: f6dfc0ef jal ra,800005b4 + 8000364c: 00092783 lw a5,0(s2) + 80003650: 04f05863 blez a5,800036a0 + 80003654: 00000413 li s0,0 + 80003658: 00003a17 auipc s4,0x3 + 8000365c: 178a0a13 addi s4,s4,376 # 800067d0 <_etext+0x53c> + 80003660: f69fc0ef jal ra,800005c8 + 80003664: 02051513 slli a0,a0,0x20 + 80003668: 03e00593 li a1,62 + 8000366c: 02055513 srli a0,a0,0x20 + 80003670: 320010ef jal ra,80004990 <__umoddi3> + 80003674: 02051513 slli a0,a0,0x20 + 80003678: 02055513 srli a0,a0,0x20 + 8000367c: 0009b483 ld s1,0(s3) + 80003680: 00aa0533 add a0,s4,a0 + 80003684: 00054783 lbu a5,0(a0) # 1000 <_entry_offset+0x1000> + 80003688: 00092703 lw a4,0(s2) + 8000368c: 008484b3 add s1,s1,s0 + 80003690: 00140413 addi s0,s0,1 + 80003694: 00f48023 sb a5,0(s1) + 80003698: 0004079b sext.w a5,s0 + 8000369c: fce7c2e3 blt a5,a4,80003660 + 800036a0: 02813083 ld ra,40(sp) + 800036a4: 02013403 ld s0,32(sp) + 800036a8: 01813483 ld s1,24(sp) + 800036ac: 01013903 ld s2,16(sp) + 800036b0: 00813983 ld s3,8(sp) + 800036b4: 00013a03 ld s4,0(sp) + 800036b8: 03010113 addi sp,sp,48 + 800036bc: 00008067 ret + +00000000800036c0 : + 800036c0: 00004317 auipc t1,0x4 + 800036c4: 37030313 addi t1,t1,880 # 80007a30 + 800036c8: 00033583 ld a1,0(t1) + 800036cc: fc010113 addi sp,sp,-64 + 800036d0: 02813c23 sd s0,56(sp) + 800036d4: 02913823 sd s1,48(sp) + 800036d8: 03213423 sd s2,40(sp) + 800036dc: 03313023 sd s3,32(sp) + 800036e0: 01413c23 sd s4,24(sp) + 800036e4: 01513823 sd s5,16(sp) + 800036e8: 01613423 sd s6,8(sp) + 800036ec: 01713023 sd s7,0(sp) + 800036f0: 0005c703 lbu a4,0(a1) + 800036f4: 00004517 auipc a0,0x4 + 800036f8: 32c50513 addi a0,a0,812 # 80007a20 + 800036fc: 00052603 lw a2,0(a0) + 80003700: 00004697 auipc a3,0x4 + 80003704: 3186b683 ld a3,792(a3) # 80007a18 + 80003708: 38070463 beqz a4,80003a90 + 8000370c: 00004897 auipc a7,0x4 + 80003710: 31c8b883 ld a7,796(a7) # 80007a28 + 80003714: 00158593 addi a1,a1,1 + 80003718: 00000b13 li s6,0 + 8000371c: 00000a93 li s5,0 + 80003720: 00000793 li a5,0 + 80003724: 03200a13 li s4,50 + 80003728: 00003817 auipc a6,0x3 + 8000372c: 0e880813 addi a6,a6,232 # 80006810 <_etext+0x57c> + 80003730: 000019b7 lui s3,0x1 + 80003734: 00800913 li s2,8 + 80003738: 00700493 li s1,7 + 8000373c: 20000413 li s0,512 + 80003740: 00600393 li t2,6 + 80003744: 00500293 li t0,5 + 80003748: 00400f93 li t6,4 + 8000374c: 00300f13 li t5,3 + 80003750: 00200e93 li t4,2 + 80003754: 00100e13 li t3,1 + 80003758: fd57071b addiw a4,a4,-43 + 8000375c: 0ff77713 andi a4,a4,255 + 80003760: fff58b93 addi s7,a1,-1 + 80003764: 00ea6c63 bltu s4,a4,8000377c + 80003768: 00271713 slli a4,a4,0x2 + 8000376c: 01070733 add a4,a4,a6 + 80003770: 00072703 lw a4,0(a4) + 80003774: 01070733 add a4,a4,a6 + 80003778: 00070067 jr a4 + 8000377c: 0005c703 lbu a4,0(a1) + 80003780: 10070a63 beqz a4,80003894 + 80003784: 00158593 addi a1,a1,1 + 80003788: 00100b13 li s6,1 + 8000378c: fcdff06f j 80003758 + 80003790: 2c060e63 beqz a2,80003a6c + 80003794: fff6061b addiw a2,a2,-1 + 80003798: 02061713 slli a4,a2,0x20 + 8000379c: 01f75713 srli a4,a4,0x1f + 800037a0: 00e88733 add a4,a7,a4 + 800037a4: 00075b03 lhu s6,0(a4) + 800037a8: 00279713 slli a4,a5,0x2 + 800037ac: 00e68733 add a4,a3,a4 + 800037b0: 002b1a93 slli s5,s6,0x2 + 800037b4: 01671123 sh s6,2(a4) + 800037b8: 01271023 sh s2,0(a4) + 800037bc: 01568733 add a4,a3,s5 + 800037c0: 00f71123 sh a5,2(a4) + 800037c4: 00100a93 li s5,1 + 800037c8: 0005c703 lbu a4,0(a1) + 800037cc: 0017879b addiw a5,a5,1 + 800037d0: 03079793 slli a5,a5,0x30 + 800037d4: 0307d793 srli a5,a5,0x30 + 800037d8: 0a070e63 beqz a4,80003894 + 800037dc: fb3794e3 bne a5,s3,80003784 + 800037e0: 000a8463 beqz s5,800037e8 + 800037e4: 00c52023 sw a2,0(a0) + 800037e8: 00b33023 sd a1,0(t1) + 800037ec: 0006d703 lhu a4,0(a3) + 800037f0: 16070c63 beqz a4,80003968 + 800037f4: 00004e97 auipc t4,0x4 + 800037f8: 24ce8e93 addi t4,t4,588 # 80007a40 + 800037fc: 00004e17 auipc t3,0x4 + 80003800: 24ce0e13 addi t3,t3,588 # 80007a48 + 80003804: 000eb803 ld a6,0(t4) + 80003808: 000e2503 lw a0,0(t3) + 8000380c: 00004597 auipc a1,0x4 + 80003810: 22c5b583 ld a1,556(a1) # 80007a38 + 80003814: 00004397 auipc t2,0x4 + 80003818: 23c3b383 ld t2,572(t2) # 80007a50 + 8000381c: 00068793 mv a5,a3 + 80003820: 00000f13 li t5,0 + 80003824: 00000313 li t1,0 + 80003828: 00000413 li s0,0 + 8000382c: 00000613 li a2,0 + 80003830: 00800293 li t0,8 + 80003834: 00003897 auipc a7,0x3 + 80003838: 0a888893 addi a7,a7,168 # 800068dc <_etext+0x648> + 8000383c: 00001fb7 lui t6,0x1 + 80003840: 10e2ec63 bltu t0,a4,80003958 + 80003844: 00271713 slli a4,a4,0x2 + 80003848: 01170733 add a4,a4,a7 + 8000384c: 00072703 lw a4,0(a4) + 80003850: 01170733 add a4,a4,a7 + 80003854: 00070067 jr a4 + 80003858: 00279713 slli a4,a5,0x2 + 8000385c: 00e68733 add a4,a3,a4 + 80003860: 00971023 sh s1,0(a4) + 80003864: 22860063 beq a2,s0,80003a84 + 80003868: 02061713 slli a4,a2,0x20 + 8000386c: 01f75713 srli a4,a4,0x1f + 80003870: 00e88733 add a4,a7,a4 + 80003874: 00f71023 sh a5,0(a4) + 80003878: 0005c703 lbu a4,0(a1) + 8000387c: 0017879b addiw a5,a5,1 + 80003880: 03079793 slli a5,a5,0x30 + 80003884: 0016061b addiw a2,a2,1 + 80003888: 00100a93 li s5,1 + 8000388c: 0307d793 srli a5,a5,0x30 + 80003890: f40716e3 bnez a4,800037dc + 80003894: 000a8463 beqz s5,8000389c + 80003898: 00c52023 sw a2,0(a0) + 8000389c: 00052703 lw a4,0(a0) + 800038a0: 00b33023 sd a1,0(t1) + 800038a4: f40714e3 bnez a4,800037ec + 800038a8: 00001737 lui a4,0x1 + 800038ac: f4e780e3 beq a5,a4,800037ec + 800038b0: 00279793 slli a5,a5,0x2 + 800038b4: 00f687b3 add a5,a3,a5 + 800038b8: 00079023 sh zero,0(a5) + 800038bc: 0006d703 lhu a4,0(a3) + 800038c0: f2071ae3 bnez a4,800037f4 + 800038c4: 0a40006f j 80003968 + 800038c8: 00279713 slli a4,a5,0x2 + 800038cc: 00e68733 add a4,a3,a4 + 800038d0: 01c71023 sh t3,0(a4) # 1000 <_entry_offset+0x1000> + 800038d4: ef5ff06f j 800037c8 + 800038d8: 00279713 slli a4,a5,0x2 + 800038dc: 00e68733 add a4,a3,a4 + 800038e0: 01d71023 sh t4,0(a4) + 800038e4: ee5ff06f j 800037c8 + 800038e8: 00279713 slli a4,a5,0x2 + 800038ec: 00e68733 add a4,a3,a4 + 800038f0: 00571023 sh t0,0(a4) + 800038f4: ed5ff06f j 800037c8 + 800038f8: 00279713 slli a4,a5,0x2 + 800038fc: 00e68733 add a4,a3,a4 + 80003900: 01f71023 sh t6,0(a4) + 80003904: ec5ff06f j 800037c8 + 80003908: 00279713 slli a4,a5,0x2 + 8000390c: 00e68733 add a4,a3,a4 + 80003910: 00771023 sh t2,0(a4) + 80003914: eb5ff06f j 800037c8 + 80003918: 00279713 slli a4,a5,0x2 + 8000391c: 00e68733 add a4,a3,a4 + 80003920: 01e71023 sh t5,0(a4) + 80003924: ea5ff06f j 800037c8 + 80003928: 02061713 slli a4,a2,0x20 + 8000392c: 01f75713 srli a4,a4,0x1f + 80003930: 00e58733 add a4,a1,a4 + 80003934: 00075703 lhu a4,0(a4) + 80003938: 08070863 beqz a4,800039c8 + 8000393c: 0027d403 lhu s0,2(a5) + 80003940: 0014041b addiw s0,s0,1 + 80003944: 02041793 slli a5,s0,0x20 + 80003948: 01e7d793 srli a5,a5,0x1e + 8000394c: 00f687b3 add a5,a3,a5 + 80003950: 0007d703 lhu a4,0(a5) + 80003954: ee0716e3 bnez a4,80003840 + 80003958: 00030463 beqz t1,80003960 + 8000395c: 00ae2023 sw a0,0(t3) + 80003960: 000f0463 beqz t5,80003968 + 80003964: 010eb023 sd a6,0(t4) + 80003968: 03813403 ld s0,56(sp) + 8000396c: 03013483 ld s1,48(sp) + 80003970: 02813903 ld s2,40(sp) + 80003974: 02013983 ld s3,32(sp) + 80003978: 01813a03 ld s4,24(sp) + 8000397c: 01013a83 ld s5,16(sp) + 80003980: 00813b03 ld s6,8(sp) + 80003984: 00013b83 ld s7,0(sp) + 80003988: 04010113 addi sp,sp,64 + 8000398c: 00008067 ret + 80003990: 02061713 slli a4,a2,0x20 + 80003994: 01f75713 srli a4,a4,0x1f + 80003998: 00e58733 add a4,a1,a4 + 8000399c: 00075703 lhu a4,0(a4) + 800039a0: 02071463 bnez a4,800039c8 + 800039a4: 0027d403 lhu s0,2(a5) + 800039a8: f99ff06f j 80003940 + 800039ac: 00084703 lbu a4,0(a6) + 800039b0: 02061793 slli a5,a2,0x20 + 800039b4: 01f7d793 srli a5,a5,0x1f + 800039b8: 00f587b3 add a5,a1,a5 + 800039bc: 00e79023 sh a4,0(a5) + 800039c0: 00180813 addi a6,a6,1 + 800039c4: 00100f13 li t5,1 + 800039c8: 0014041b addiw s0,s0,1 + 800039cc: 02041793 slli a5,s0,0x20 + 800039d0: 01e7d793 srli a5,a5,0x1e + 800039d4: 00f687b3 add a5,a3,a5 + 800039d8: 0007d703 lhu a4,0(a5) + 800039dc: e60712e3 bnez a4,80003840 + 800039e0: f79ff06f j 80003958 + 800039e4: 02061793 slli a5,a2,0x20 + 800039e8: 01f7d793 srli a5,a5,0x1f + 800039ec: 00f587b3 add a5,a1,a5 + 800039f0: 0007d703 lhu a4,0(a5) + 800039f4: fff7071b addiw a4,a4,-1 + 800039f8: 00e79023 sh a4,0(a5) + 800039fc: fcdff06f j 800039c8 + 80003a00: 02061793 slli a5,a2,0x20 + 80003a04: 01f7d793 srli a5,a5,0x1f + 80003a08: 00f587b3 add a5,a1,a5 + 80003a0c: 0007d703 lhu a4,0(a5) + 80003a10: 00a387b3 add a5,t2,a0 + 80003a14: 00100313 li t1,1 + 80003a18: 00e78023 sb a4,0(a5) + 80003a1c: 0015051b addiw a0,a0,1 + 80003a20: fa9ff06f j 800039c8 + 80003a24: 02061793 slli a5,a2,0x20 + 80003a28: 01f7d793 srli a5,a5,0x1f + 80003a2c: 00f587b3 add a5,a1,a5 + 80003a30: 0007d703 lhu a4,0(a5) + 80003a34: 0017071b addiw a4,a4,1 + 80003a38: 00e79023 sh a4,0(a5) + 80003a3c: f8dff06f j 800039c8 + 80003a40: fff6061b addiw a2,a2,-1 + 80003a44: 0014041b addiw s0,s0,1 + 80003a48: 02041793 slli a5,s0,0x20 + 80003a4c: 01e7d793 srli a5,a5,0x1e + 80003a50: 00f687b3 add a5,a3,a5 + 80003a54: 0007d703 lhu a4,0(a5) + 80003a58: f00700e3 beqz a4,80003958 + 80003a5c: dff662e3 bltu a2,t6,80003840 + 80003a60: ef9ff06f j 80003958 + 80003a64: 0016061b addiw a2,a2,1 + 80003a68: fddff06f j 80003a44 + 80003a6c: 000a8663 beqz s5,80003a78 + 80003a70: 00004797 auipc a5,0x4 + 80003a74: fa07a823 sw zero,-80(a5) # 80007a20 + 80003a78: d60b0ae3 beqz s6,800037ec + 80003a7c: 01733023 sd s7,0(t1) + 80003a80: d6dff06f j 800037ec + 80003a84: fe0a8ae3 beqz s5,80003a78 + 80003a88: 00c52023 sw a2,0(a0) + 80003a8c: fedff06f j 80003a78 + 80003a90: 00068793 mv a5,a3 + 80003a94: e20602e3 beqz a2,800038b8 + 80003a98: d55ff06f j 800037ec + +0000000080003a9c : + 80003a9c: ff010113 addi sp,sp,-16 + 80003aa0: 00813023 sd s0,0(sp) + 80003aa4: 00004417 auipc s0,0x4 + 80003aa8: fa440413 addi s0,s0,-92 # 80007a48 + 80003aac: 00042583 lw a1,0(s0) + 80003ab0: 00004517 auipc a0,0x4 + 80003ab4: fa053503 ld a0,-96(a0) # 80007a50 + 80003ab8: 00113423 sd ra,8(sp) + 80003abc: 00b505b3 add a1,a0,a1 + 80003ac0: b59fc0ef jal ra,80000618 + 80003ac4: 00042683 lw a3,0(s0) + 80003ac8: 00004717 auipc a4,0x4 + 80003acc: f4872703 lw a4,-184(a4) # 80007a10 + 80003ad0: 00e68c63 beq a3,a4,80003ae8 + 80003ad4: 00813083 ld ra,8(sp) + 80003ad8: 00013403 ld s0,0(sp) + 80003adc: 00000513 li a0,0 + 80003ae0: 01010113 addi sp,sp,16 + 80003ae4: 00008067 ret + 80003ae8: 00004717 auipc a4,0x4 + 80003aec: fe873703 ld a4,-24(a4) # 80007ad0 + 80003af0: 0005079b sext.w a5,a0 + 80003af4: 01872503 lw a0,24(a4) + 80003af8: 00813083 ld ra,8(sp) + 80003afc: 00013403 ld s0,0(sp) + 80003b00: 40f50533 sub a0,a0,a5 + 80003b04: 00153513 seqz a0,a0 + 80003b08: 01010113 addi sp,sp,16 + 80003b0c: 00008067 ret + +0000000080003b10 : + 80003b10: 00004797 auipc a5,0x4 + 80003b14: fc07b783 ld a5,-64(a5) # 80007ad0 + 80003b18: 0007a783 lw a5,0(a5) + 80003b1c: ff010113 addi sp,sp,-16 + 80003b20: 00113423 sd ra,8(sp) + 80003b24: 0007859b sext.w a1,a5 + 80003b28: 00058513 mv a0,a1 + 80003b2c: 00004717 auipc a4,0x4 + 80003b30: f2f72a23 sw a5,-204(a4) # 80007a60 + 80003b34: 00813023 sd s0,0(sp) + 80003b38: 5a5000ef jal ra,800048dc <__muldi3> + 80003b3c: 0025141b slliw s0,a0,0x2 + 80003b40: 00040513 mv a0,s0 + 80003b44: 9d5fc0ef jal ra,80000518 + 80003b48: 00050793 mv a5,a0 + 80003b4c: 00040513 mv a0,s0 + 80003b50: 00004717 auipc a4,0x4 + 80003b54: f0f73423 sd a5,-248(a4) # 80007a58 + 80003b58: 9c1fc0ef jal ra,80000518 + 80003b5c: 00050793 mv a5,a0 + 80003b60: 00040513 mv a0,s0 + 80003b64: 00004717 auipc a4,0x4 + 80003b68: f0f73223 sd a5,-252(a4) # 80007a68 + 80003b6c: 9adfc0ef jal ra,80000518 + 80003b70: 00050793 mv a5,a0 + 80003b74: 00040513 mv a0,s0 + 80003b78: 00004717 auipc a4,0x4 + 80003b7c: eef73c23 sd a5,-264(a4) # 80007a70 + 80003b80: 999fc0ef jal ra,80000518 + 80003b84: 00813083 ld ra,8(sp) + 80003b88: 00013403 ld s0,0(sp) + 80003b8c: 00004797 auipc a5,0x4 + 80003b90: eea7b623 sd a0,-276(a5) # 80007a78 + 80003b94: 01010113 addi sp,sp,16 + 80003b98: 00008067 ret + +0000000080003b9c : + 80003b9c: f5010113 addi sp,sp,-176 + 80003ba0: 00004797 auipc a5,0x4 + 80003ba4: ec87b783 ld a5,-312(a5) # 80007a68 + 80003ba8: 00f13423 sd a5,8(sp) + 80003bac: 00004797 auipc a5,0x4 + 80003bb0: ec47b783 ld a5,-316(a5) # 80007a70 + 80003bb4: 0a813023 sd s0,160(sp) + 80003bb8: 0a113423 sd ra,168(sp) + 80003bbc: 08913c23 sd s1,152(sp) + 80003bc0: 09213823 sd s2,144(sp) + 80003bc4: 09313423 sd s3,136(sp) + 80003bc8: 09413023 sd s4,128(sp) + 80003bcc: 07513c23 sd s5,120(sp) + 80003bd0: 07613823 sd s6,112(sp) + 80003bd4: 07713423 sd s7,104(sp) + 80003bd8: 07813023 sd s8,96(sp) + 80003bdc: 05913c23 sd s9,88(sp) + 80003be0: 05a13823 sd s10,80(sp) + 80003be4: 05b13423 sd s11,72(sp) + 80003be8: 00004417 auipc s0,0x4 + 80003bec: e7842403 lw s0,-392(s0) # 80007a60 + 80003bf0: 00f13c23 sd a5,24(sp) + 80003bf4: 2a805263 blez s0,80003e98 + 80003bf8: fff4039b addiw t2,s0,-1 + 80003bfc: 00004f17 auipc t5,0x4 + 80003c00: e5cf3f03 ld t5,-420(t5) # 80007a58 + 80003c04: 00038e9b sext.w t4,t2 + 80003c08: 00241493 slli s1,s0,0x2 + 80003c0c: 00000293 li t0,0 + 80003c10: 00000f93 li t6,0 + 80003c14: 00000e13 li t3,0 + 80003c18: 001e0e1b addiw t3,t3,1 + 80003c1c: 00028713 mv a4,t0 + 80003c20: 00000793 li a5,0 + 80003c24: 000f859b sext.w a1,t6 + 80003c28: 00813683 ld a3,8(sp) + 80003c2c: 01813603 ld a2,24(sp) + 80003c30: 41c78333 sub t1,a5,t3 + 80003c34: 00e68833 add a6,a3,a4 + 80003c38: 40b786b3 sub a3,a5,a1 + 80003c3c: 00e60533 add a0,a2,a4 + 80003c40: 00ef08b3 add a7,t5,a4 + 80003c44: 0016b693 seqz a3,a3 + 80003c48: 0017879b addiw a5,a5,1 + 80003c4c: 00100613 li a2,1 + 80003c50: 00be8463 beq t4,a1,80003c58 + 80003c54: 00133613 seqz a2,t1 + 80003c58: 00c8a023 sw a2,0(a7) + 80003c5c: 00c82023 sw a2,0(a6) + 80003c60: 00d52023 sw a3,0(a0) + 80003c64: 00470713 addi a4,a4,4 + 80003c68: fc8790e3 bne a5,s0,80003c28 + 80003c6c: 001f8f9b addiw t6,t6,1 + 80003c70: 009282b3 add t0,t0,s1 + 80003c74: fbc412e3 bne s0,t3,80003c18 + 80003c78: 01813703 ld a4,24(sp) + 80003c7c: 02039793 slli a5,t2,0x20 + 80003c80: 00004697 auipc a3,0x4 + 80003c84: df86b683 ld a3,-520(a3) # 80007a78 + 80003c88: 0207d793 srli a5,a5,0x20 + 80003c8c: 00279793 slli a5,a5,0x2 + 80003c90: 02d13423 sd a3,40(sp) + 80003c94: 00470713 addi a4,a4,4 + 80003c98: 00468693 addi a3,a3,4 + 80003c9c: 00f70733 add a4,a4,a5 + 80003ca0: 00f687b3 add a5,a3,a5 + 80003ca4: 02f13c23 sd a5,56(sp) + 80003ca8: 80000d37 lui s10,0x80000 + 80003cac: 01f00793 li a5,31 + 80003cb0: 02f13023 sd a5,32(sp) + 80003cb4: fd3d4793 xori a5,s10,-45 + 80003cb8: 02e13823 sd a4,48(sp) + 80003cbc: 00f13823 sd a5,16(sp) + 80003cc0: 01013783 ld a5,16(sp) + 80003cc4: 0017f793 andi a5,a5,1 + 80003cc8: 10079c63 bnez a5,80003de0 + 80003ccc: 0a805e63 blez s0,80003d88 + 80003cd0: 00813903 ld s2,8(sp) + 80003cd4: 02813a83 ld s5,40(sp) + 80003cd8: 00000a13 li s4,0 + 80003cdc: 01213023 sd s2,0(sp) + 80003ce0: 00813b03 ld s6,8(sp) + 80003ce4: 000a8d13 mv s10,s5 + 80003ce8: 00000d93 li s11,0 + 80003cec: 000d2023 sw zero,0(s10) # ffffffff80000000 <_end+0xfffffffeffff0000> + 80003cf0: 000b0993 mv s3,s6 + 80003cf4: 00090c93 mv s9,s2 + 80003cf8: 00000b93 li s7,0 + 80003cfc: 00000c13 li s8,0 + 80003d00: 0009a583 lw a1,0(s3) # 1000 <_entry_offset+0x1000> + 80003d04: 000ca503 lw a0,0(s9) + 80003d08: 001c0c1b addiw s8,s8,1 + 80003d0c: 004c8c93 addi s9,s9,4 + 80003d10: 3cd000ef jal ra,800048dc <__muldi3> + 80003d14: 01750bbb addw s7,a0,s7 + 80003d18: 017d2023 sw s7,0(s10) + 80003d1c: 009989b3 add s3,s3,s1 + 80003d20: fe8c40e3 blt s8,s0,80003d00 + 80003d24: 001d8d9b addiw s11,s11,1 + 80003d28: 004d0d13 addi s10,s10,4 + 80003d2c: 004b0b13 addi s6,s6,4 + 80003d30: fa8dcee3 blt s11,s0,80003cec + 80003d34: 001a0a1b addiw s4,s4,1 + 80003d38: 00990933 add s2,s2,s1 + 80003d3c: 009a8ab3 add s5,s5,s1 + 80003d40: fa8a40e3 blt s4,s0,80003ce0 + 80003d44: 02813503 ld a0,40(sp) + 80003d48: 00000593 li a1,0 + 80003d4c: 00013683 ld a3,0(sp) + 80003d50: 00050713 mv a4,a0 + 80003d54: 00000793 li a5,0 + 80003d58: 00072603 lw a2,0(a4) + 80003d5c: 0017879b addiw a5,a5,1 + 80003d60: 00470713 addi a4,a4,4 + 80003d64: 00c6a023 sw a2,0(a3) + 80003d68: 00468693 addi a3,a3,4 + 80003d6c: fe87c6e3 blt a5,s0,80003d58 + 80003d70: 00013783 ld a5,0(sp) + 80003d74: 0015859b addiw a1,a1,1 + 80003d78: 00950533 add a0,a0,s1 + 80003d7c: 009787b3 add a5,a5,s1 + 80003d80: 00f13023 sd a5,0(sp) + 80003d84: fc85c4e3 blt a1,s0,80003d4c + 80003d88: 02013783 ld a5,32(sp) + 80003d8c: 01013703 ld a4,16(sp) + 80003d90: fff7879b addiw a5,a5,-1 + 80003d94: 40175713 srai a4,a4,0x1 + 80003d98: 02f13023 sd a5,32(sp) + 80003d9c: 00e13823 sd a4,16(sp) + 80003da0: f20790e3 bnez a5,80003cc0 + 80003da4: 0a813083 ld ra,168(sp) + 80003da8: 0a013403 ld s0,160(sp) + 80003dac: 09813483 ld s1,152(sp) + 80003db0: 09013903 ld s2,144(sp) + 80003db4: 08813983 ld s3,136(sp) + 80003db8: 08013a03 ld s4,128(sp) + 80003dbc: 07813a83 ld s5,120(sp) + 80003dc0: 07013b03 ld s6,112(sp) + 80003dc4: 06813b83 ld s7,104(sp) + 80003dc8: 06013c03 ld s8,96(sp) + 80003dcc: 05813c83 ld s9,88(sp) + 80003dd0: 05013d03 ld s10,80(sp) + 80003dd4: 04813d83 ld s11,72(sp) + 80003dd8: 0b010113 addi sp,sp,176 + 80003ddc: 00008067 ret + 80003de0: fa8054e3 blez s0,80003d88 + 80003de4: 02813c83 ld s9,40(sp) + 80003de8: 03013983 ld s3,48(sp) + 80003dec: 01813b83 ld s7,24(sp) + 80003df0: 00000c13 li s8,0 + 80003df4: 00813a83 ld s5,8(sp) + 80003df8: 000c8913 mv s2,s9 + 80003dfc: 00000a13 li s4,0 + 80003e00: 00092023 sw zero,0(s2) + 80003e04: 000a8d93 mv s11,s5 + 80003e08: 000b8d13 mv s10,s7 + 80003e0c: 00000b13 li s6,0 + 80003e10: 000da583 lw a1,0(s11) # ffffffff80000000 <_end+0xfffffffeffff0000> + 80003e14: 000d2503 lw a0,0(s10) + 80003e18: 004d0d13 addi s10,s10,4 + 80003e1c: 009d8db3 add s11,s11,s1 + 80003e20: 2bd000ef jal ra,800048dc <__muldi3> + 80003e24: 01650b3b addw s6,a0,s6 + 80003e28: 01692023 sw s6,0(s2) + 80003e2c: ffa992e3 bne s3,s10,80003e10 + 80003e30: 001a0a1b addiw s4,s4,1 + 80003e34: 00490913 addi s2,s2,4 + 80003e38: 004a8a93 addi s5,s5,4 + 80003e3c: fc8a12e3 bne s4,s0,80003e00 + 80003e40: 001c0c1b addiw s8,s8,1 + 80003e44: 009b8bb3 add s7,s7,s1 + 80003e48: 009989b3 add s3,s3,s1 + 80003e4c: 009c8cb3 add s9,s9,s1 + 80003e50: fa8c12e3 bne s8,s0,80003df4 + 80003e54: 03813603 ld a2,56(sp) + 80003e58: 01813803 ld a6,24(sp) + 80003e5c: 02813503 ld a0,40(sp) + 80003e60: 00000593 li a1,0 + 80003e64: 00080713 mv a4,a6 + 80003e68: 00050793 mv a5,a0 + 80003e6c: 0007a683 lw a3,0(a5) + 80003e70: 00478793 addi a5,a5,4 + 80003e74: 00470713 addi a4,a4,4 + 80003e78: fed72e23 sw a3,-4(a4) + 80003e7c: fec798e3 bne a5,a2,80003e6c + 80003e80: 0015859b addiw a1,a1,1 + 80003e84: 00950533 add a0,a0,s1 + 80003e88: 00980833 add a6,a6,s1 + 80003e8c: 00960633 add a2,a2,s1 + 80003e90: fc859ae3 bne a1,s0,80003e64 + 80003e94: e3dff06f j 80003cd0 + 80003e98: 00241493 slli s1,s0,0x2 + 80003e9c: fff4039b addiw t2,s0,-1 + 80003ea0: dd9ff06f j 80003c78 + +0000000080003ea4 : + 80003ea4: 00004517 auipc a0,0x4 + 80003ea8: bbc52503 lw a0,-1092(a0) # 80007a60 + 80003eac: ff010113 addi sp,sp,-16 + 80003eb0: fff5059b addiw a1,a0,-1 + 80003eb4: 00813023 sd s0,0(sp) + 80003eb8: 00113423 sd ra,8(sp) + 80003ebc: 00058413 mv s0,a1 + 80003ec0: 21d000ef jal ra,800048dc <__muldi3> + 80003ec4: 00a4043b addw s0,s0,a0 + 80003ec8: 00241413 slli s0,s0,0x2 + 80003ecc: 00004517 auipc a0,0x4 + 80003ed0: ba453503 ld a0,-1116(a0) # 80007a70 + 80003ed4: 00850433 add s0,a0,s0 + 80003ed8: 00004797 auipc a5,0x4 + 80003edc: bf87b783 ld a5,-1032(a5) # 80007ad0 + 80003ee0: 00042503 lw a0,0(s0) + 80003ee4: 0187a783 lw a5,24(a5) + 80003ee8: 00813083 ld ra,8(sp) + 80003eec: 00013403 ld s0,0(sp) + 80003ef0: 40f50533 sub a0,a0,a5 + 80003ef4: 00153513 seqz a0,a0 + 80003ef8: 01010113 addi sp,sp,16 + 80003efc: 00008067 ret + +0000000080003f00 : + 80003f00: fd010113 addi sp,sp,-48 + 80003f04: 01413023 sd s4,0(sp) + 80003f08: 02113423 sd ra,40(sp) + 80003f0c: 02813023 sd s0,32(sp) + 80003f10: 00913c23 sd s1,24(sp) + 80003f14: 01213823 sd s2,16(sp) + 80003f18: 01313423 sd s3,8(sp) + 80003f1c: 00004797 auipc a5,0x4 + 80003f20: b647a783 lw a5,-1180(a5) # 80007a80 + 80003f24: 00100a13 li s4,1 + 80003f28: 04a78c63 beq a5,a0,80003f80 + 80003f2c: 00c5e433 or s0,a1,a2 + 80003f30: 00a46433 or s0,s0,a0 + 80003f34: fff44413 not s0,s0 + 80003f38: 00f47433 and s0,s0,a5 + 80003f3c: 00050493 mv s1,a0 + 80003f40: 00058993 mv s3,a1 + 80003f44: 00060913 mv s2,a2 + 80003f48: 00000a13 li s4,0 + 80003f4c: 02040a63 beqz s0,80003f80 + 80003f50: 408007bb negw a5,s0 + 80003f54: 00f477b3 and a5,s0,a5 + 80003f58: 0007851b sext.w a0,a5 + 80003f5c: 013565b3 or a1,a0,s3 + 80003f60: 00a96633 or a2,s2,a0 + 80003f64: 0015959b slliw a1,a1,0x1 + 80003f68: 0016561b srliw a2,a2,0x1 + 80003f6c: 00956533 or a0,a0,s1 + 80003f70: 40f4043b subw s0,s0,a5 + 80003f74: f8dff0ef jal ra,80003f00 + 80003f78: 01450a3b addw s4,a0,s4 + 80003f7c: fc041ae3 bnez s0,80003f50 + 80003f80: 02813083 ld ra,40(sp) + 80003f84: 02013403 ld s0,32(sp) + 80003f88: 01813483 ld s1,24(sp) + 80003f8c: 01013903 ld s2,16(sp) + 80003f90: 00813983 ld s3,8(sp) + 80003f94: 000a0513 mv a0,s4 + 80003f98: 00013a03 ld s4,0(sp) + 80003f9c: 03010113 addi sp,sp,48 + 80003fa0: 00008067 ret + +0000000080003fa4 : + 80003fa4: 00004797 auipc a5,0x4 + 80003fa8: b2c7b783 ld a5,-1236(a5) # 80007ad0 + 80003fac: 0007a703 lw a4,0(a5) + 80003fb0: 00004797 auipc a5,0x4 + 80003fb4: ac07aa23 sw zero,-1324(a5) # 80007a84 + 80003fb8: 00100793 li a5,1 + 80003fbc: 00e797bb sllw a5,a5,a4 + 80003fc0: fff7879b addiw a5,a5,-1 + 80003fc4: 00004717 auipc a4,0x4 + 80003fc8: aaf72e23 sw a5,-1348(a4) # 80007a80 + 80003fcc: 00008067 ret + +0000000080003fd0 : + 80003fd0: ff010113 addi sp,sp,-16 + 80003fd4: 00000613 li a2,0 + 80003fd8: 00000593 li a1,0 + 80003fdc: 00000513 li a0,0 + 80003fe0: 00113423 sd ra,8(sp) + 80003fe4: f1dff0ef jal ra,80003f00 + 80003fe8: 00813083 ld ra,8(sp) + 80003fec: 00004797 auipc a5,0x4 + 80003ff0: a8a7ac23 sw a0,-1384(a5) # 80007a84 + 80003ff4: 01010113 addi sp,sp,16 + 80003ff8: 00008067 ret + +0000000080003ffc : + 80003ffc: 00004797 auipc a5,0x4 + 80004000: ad47b783 ld a5,-1324(a5) # 80007ad0 + 80004004: 0187a503 lw a0,24(a5) + 80004008: 00004797 auipc a5,0x4 + 8000400c: a7c7a783 lw a5,-1412(a5) # 80007a84 + 80004010: 40f50533 sub a0,a0,a5 + 80004014: 00153513 seqz a0,a0 + 80004018: 00008067 ret + +000000008000401c : + 8000401c: fd010113 addi sp,sp,-48 + 80004020: 01213823 sd s2,16(sp) + 80004024: 01313423 sd s3,8(sp) + 80004028: 01413023 sd s4,0(sp) + 8000402c: 02113423 sd ra,40(sp) + 80004030: 02813023 sd s0,32(sp) + 80004034: 00913c23 sd s1,24(sp) + 80004038: 00060a13 mv s4,a2 + 8000403c: 00050993 mv s3,a0 + 80004040: 00850913 addi s2,a0,8 + 80004044: 0b45dc63 bge a1,s4,800040fc + 80004048: 00259793 slli a5,a1,0x2 + 8000404c: 00f98e33 add t3,s3,a5 + 80004050: 0015871b addiw a4,a1,1 + 80004054: 000e2303 lw t1,0(t3) + 80004058: ffea049b addiw s1,s4,-2 + 8000405c: 09475c63 bge a4,s4,800040f4 + 80004060: 40b4883b subw a6,s1,a1 + 80004064: 02081813 slli a6,a6,0x20 + 80004068: 02085813 srli a6,a6,0x20 + 8000406c: 00b80833 add a6,a6,a1 + 80004070: 00478793 addi a5,a5,4 + 80004074: 00281813 slli a6,a6,0x2 + 80004078: 00f987b3 add a5,s3,a5 + 8000407c: 01280833 add a6,a6,s2 + 80004080: 00058613 mv a2,a1 + 80004084: 0007a683 lw a3,0(a5) + 80004088: 0016041b addiw s0,a2,1 + 8000408c: 00241713 slli a4,s0,0x2 + 80004090: 0026051b addiw a0,a2,2 + 80004094: 00e98733 add a4,s3,a4 + 80004098: 0066dc63 bge a3,t1,800040b0 + 8000409c: 00072883 lw a7,0(a4) + 800040a0: 00d72023 sw a3,0(a4) + 800040a4: 00040613 mv a2,s0 + 800040a8: 0117a023 sw a7,0(a5) + 800040ac: 00050413 mv s0,a0 + 800040b0: 00478793 addi a5,a5,4 + 800040b4: fcf818e3 bne a6,a5,80004084 + 800040b8: 00261793 slli a5,a2,0x2 + 800040bc: 000e2683 lw a3,0(t3) + 800040c0: 00f987b3 add a5,s3,a5 + 800040c4: 0007a703 lw a4,0(a5) + 800040c8: 00d7a023 sw a3,0(a5) + 800040cc: 00098513 mv a0,s3 + 800040d0: 00ee2023 sw a4,0(t3) + 800040d4: f49ff0ef jal ra,8000401c + 800040d8: 03445263 bge s0,s4,800040fc + 800040dc: 00040593 mv a1,s0 + 800040e0: 00259793 slli a5,a1,0x2 + 800040e4: 00f98e33 add t3,s3,a5 + 800040e8: 0015871b addiw a4,a1,1 + 800040ec: 000e2303 lw t1,0(t3) + 800040f0: f74748e3 blt a4,s4,80004060 + 800040f4: 00058a13 mv s4,a1 + 800040f8: f545c8e3 blt a1,s4,80004048 + 800040fc: 02813083 ld ra,40(sp) + 80004100: 02013403 ld s0,32(sp) + 80004104: 01813483 ld s1,24(sp) + 80004108: 01013903 ld s2,16(sp) + 8000410c: 00813983 ld s3,8(sp) + 80004110: 00013a03 ld s4,0(sp) + 80004114: 03010113 addi sp,sp,48 + 80004118: 00008067 ret + +000000008000411c : + 8000411c: fd010113 addi sp,sp,-48 + 80004120: 00100513 li a0,1 + 80004124: 02113423 sd ra,40(sp) + 80004128: 01213823 sd s2,16(sp) + 8000412c: 01313423 sd s3,8(sp) + 80004130: 02813023 sd s0,32(sp) + 80004134: 00913c23 sd s1,24(sp) + 80004138: c7cfc0ef jal ra,800005b4 + 8000413c: 00004797 auipc a5,0x4 + 80004140: 9947b783 ld a5,-1644(a5) # 80007ad0 + 80004144: 0007a783 lw a5,0(a5) + 80004148: 00004917 auipc s2,0x4 + 8000414c: 94090913 addi s2,s2,-1728 # 80007a88 + 80004150: 00004997 auipc s3,0x4 + 80004154: 94098993 addi s3,s3,-1728 # 80007a90 + 80004158: 00279513 slli a0,a5,0x2 + 8000415c: 00f92023 sw a5,0(s2) + 80004160: bb8fc0ef jal ra,80000518 + 80004164: 00092783 lw a5,0(s2) + 80004168: 00a9b023 sd a0,0(s3) + 8000416c: 02f05e63 blez a5,800041a8 + 80004170: 00000493 li s1,0 + 80004174: c54fc0ef jal ra,800005c8 + 80004178: 0005041b sext.w s0,a0 + 8000417c: c4cfc0ef jal ra,800005c8 + 80004180: 0009b783 ld a5,0(s3) + 80004184: 00249693 slli a3,s1,0x2 + 80004188: 0104141b slliw s0,s0,0x10 + 8000418c: 00092703 lw a4,0(s2) + 80004190: 00d787b3 add a5,a5,a3 + 80004194: 00856433 or s0,a0,s0 + 80004198: 00148493 addi s1,s1,1 + 8000419c: 0087a023 sw s0,0(a5) + 800041a0: 0004879b sext.w a5,s1 + 800041a4: fce7c8e3 blt a5,a4,80004174 + 800041a8: 02813083 ld ra,40(sp) + 800041ac: 02013403 ld s0,32(sp) + 800041b0: 01813483 ld s1,24(sp) + 800041b4: 01013903 ld s2,16(sp) + 800041b8: 00813983 ld s3,8(sp) + 800041bc: 03010113 addi sp,sp,48 + 800041c0: 00008067 ret + +00000000800041c4 : + 800041c4: 00004617 auipc a2,0x4 + 800041c8: 8c462603 lw a2,-1852(a2) # 80007a88 + 800041cc: 00000593 li a1,0 + 800041d0: 00004517 auipc a0,0x4 + 800041d4: 8c053503 ld a0,-1856(a0) # 80007a90 + 800041d8: e45ff06f j 8000401c + +00000000800041dc : + 800041dc: 00004597 auipc a1,0x4 + 800041e0: 8ac5a583 lw a1,-1876(a1) # 80007a88 + 800041e4: 00004517 auipc a0,0x4 + 800041e8: 8ac53503 ld a0,-1876(a0) # 80007a90 + 800041ec: 00259593 slli a1,a1,0x2 + 800041f0: ff010113 addi sp,sp,-16 + 800041f4: 00b505b3 add a1,a0,a1 + 800041f8: 00113423 sd ra,8(sp) + 800041fc: c1cfc0ef jal ra,80000618 + 80004200: 00004797 auipc a5,0x4 + 80004204: 8d07b783 ld a5,-1840(a5) # 80007ad0 + 80004208: 0187a783 lw a5,24(a5) + 8000420c: 00813083 ld ra,8(sp) + 80004210: 0005051b sext.w a0,a0 + 80004214: 40a78533 sub a0,a5,a0 + 80004218: 00153513 seqz a0,a0 + 8000421c: 01010113 addi sp,sp,16 + 80004220: 00008067 ret + +0000000080004224 : + 80004224: 00004797 auipc a5,0x4 + 80004228: 8ac7b783 ld a5,-1876(a5) # 80007ad0 + 8000422c: 0007a783 lw a5,0(a5) + 80004230: fe010113 addi sp,sp,-32 + 80004234: 00913423 sd s1,8(sp) + 80004238: 00100513 li a0,1 + 8000423c: 00004497 auipc s1,0x4 + 80004240: 85c48493 addi s1,s1,-1956 # 80007a98 + 80004244: 00f4a023 sw a5,0(s1) + 80004248: 00113c23 sd ra,24(sp) + 8000424c: 01213023 sd s2,0(sp) + 80004250: 00813823 sd s0,16(sp) + 80004254: b60fc0ef jal ra,800005b4 + 80004258: 0004a503 lw a0,0(s1) + 8000425c: 00004917 auipc s2,0x4 + 80004260: 84c90913 addi s2,s2,-1972 # 80007aa8 + 80004264: ab4fc0ef jal ra,80000518 + 80004268: 0004a783 lw a5,0(s1) + 8000426c: 00a93023 sd a0,0(s2) + 80004270: 02f05463 blez a5,80004298 + 80004274: 00000413 li s0,0 + 80004278: b50fc0ef jal ra,800005c8 + 8000427c: 00093783 ld a5,0(s2) + 80004280: 0004a703 lw a4,0(s1) + 80004284: 008787b3 add a5,a5,s0 + 80004288: 00140413 addi s0,s0,1 + 8000428c: 00a78023 sb a0,0(a5) + 80004290: 0004079b sext.w a5,s0 + 80004294: fee7c2e3 blt a5,a4,80004278 + 80004298: 01000513 li a0,16 + 8000429c: a7cfc0ef jal ra,80000518 + 800042a0: 01813083 ld ra,24(sp) + 800042a4: 01013403 ld s0,16(sp) + 800042a8: 00003797 auipc a5,0x3 + 800042ac: 7ea7bc23 sd a0,2040(a5) # 80007aa0 + 800042b0: 00813483 ld s1,8(sp) + 800042b4: 00013903 ld s2,0(sp) + 800042b8: 02010113 addi sp,sp,32 + 800042bc: 00008067 ret + +00000000800042c0 : + 800042c0: 00003697 auipc a3,0x3 + 800042c4: 7d86a683 lw a3,2008(a3) # 80007a98 + 800042c8: f6010113 addi sp,sp,-160 + 800042cc: 00168793 addi a5,a3,1 + 800042d0: 00003f97 auipc t6,0x3 + 800042d4: 7d8fbf83 ld t6,2008(t6) # 80007aa8 + 800042d8: 08813c23 sd s0,152(sp) + 800042dc: 08913823 sd s1,144(sp) + 800042e0: 09213423 sd s2,136(sp) + 800042e4: 09313023 sd s3,128(sp) + 800042e8: 07413c23 sd s4,120(sp) + 800042ec: 07513823 sd s5,112(sp) + 800042f0: 07613423 sd s6,104(sp) + 800042f4: 07713023 sd s7,96(sp) + 800042f8: 05813c23 sd s8,88(sp) + 800042fc: 05913823 sd s9,80(sp) + 80004300: 05a13423 sd s10,72(sp) + 80004304: 05b13023 sd s11,64(sp) + 80004308: 03f7f513 andi a0,a5,63 + 8000430c: 03800593 li a1,56 + 80004310: 00003717 auipc a4,0x3 + 80004314: 79073703 ld a4,1936(a4) # 80007aa0 + 80004318: 00df8633 add a2,t6,a3 + 8000431c: 00078f13 mv t5,a5 + 80004320: 2eb50863 beq a0,a1,80004610 + 80004324: 03800513 li a0,56 + 80004328: 001f0f13 addi t5,t5,1 + 8000432c: 03ff7593 andi a1,t5,63 + 80004330: fea59ce3 bne a1,a0,80004328 + 80004334: f8000593 li a1,-128 + 80004338: 00b60023 sb a1,0(a2) + 8000433c: 2de7fe63 bgeu a5,t5,80004618 + 80004340: 00ff87b3 add a5,t6,a5 + 80004344: 01ef8633 add a2,t6,t5 + 80004348: 00078023 sb zero,0(a5) + 8000434c: 00178793 addi a5,a5,1 + 80004350: fef61ce3 bne a2,a5,80004348 + 80004354: 0036951b slliw a0,a3,0x3 + 80004358: 41d6d593 srai a1,a3,0x1d + 8000435c: 0185581b srliw a6,a0,0x18 + 80004360: 0085531b srliw t1,a0,0x8 + 80004364: 0105589b srliw a7,a0,0x10 + 80004368: 004f0793 addi a5,t5,4 + 8000436c: 00a60023 sb a0,0(a2) + 80004370: 010601a3 sb a6,3(a2) + 80004374: 006600a3 sb t1,1(a2) + 80004378: 01160123 sb a7,2(a2) + 8000437c: 00ff87b3 add a5,t6,a5 + 80004380: 0085d51b srliw a0,a1,0x8 + 80004384: 0105d61b srliw a2,a1,0x10 + 80004388: 0185d59b srliw a1,a1,0x18 + 8000438c: 01d6d693 srli a3,a3,0x1d + 80004390: 00a780a3 sb a0,1(a5) + 80004394: 00c78123 sb a2,2(a5) + 80004398: 00b781a3 sb a1,3(a5) + 8000439c: 10325637 lui a2,0x10325 + 800043a0: 98bae5b7 lui a1,0x98bae + 800043a4: efcdb537 lui a0,0xefcdb + 800043a8: 67452837 lui a6,0x67452 + 800043ac: d76aa3b7 lui t2,0xd76aa + 800043b0: 00d78023 sb a3,0(a5) + 800043b4: 47660613 addi a2,a2,1142 # 10325476 <_entry_offset+0x10325476> + 800043b8: cfe58593 addi a1,a1,-770 # ffffffff98badcfe <_end+0xffffffff18b9dcfe> + 800043bc: b8950513 addi a0,a0,-1143 # ffffffffefcdab89 <_end+0xffffffff6fccab89> + 800043c0: 30180813 addi a6,a6,769 # 67452301 <_entry_offset+0x67452301> + 800043c4: 00000293 li t0,0 + 800043c8: 47838393 addi t2,t2,1144 # ffffffffd76aa478 <_end+0xffffffff5769a478> + 800043cc: 00f00c13 li s8,15 + 800043d0: 01f00b93 li s7,31 + 800043d4: 02f00b13 li s6,47 + 800043d8: 03f00a93 li s5,63 + 800043dc: 005f87b3 add a5,t6,t0 + 800043e0: 00010e13 mv t3,sp + 800043e4: 0017c303 lbu t1,1(a5) + 800043e8: 0007ce83 lbu t4,0(a5) + 800043ec: 0027c883 lbu a7,2(a5) + 800043f0: 0037c683 lbu a3,3(a5) + 800043f4: 00831313 slli t1,t1,0x8 + 800043f8: 01d36333 or t1,t1,t4 + 800043fc: 01089893 slli a7,a7,0x10 + 80004400: 0068e8b3 or a7,a7,t1 + 80004404: 01869693 slli a3,a3,0x18 + 80004408: 0116e6b3 or a3,a3,a7 + 8000440c: 00de2023 sw a3,0(t3) + 80004410: 004e0e13 addi t3,t3,4 + 80004414: 04010693 addi a3,sp,64 + 80004418: 00478793 addi a5,a5,4 + 8000441c: fdc694e3 bne a3,t3,800043e4 + 80004420: 00080793 mv a5,a6 + 80004424: 00038d13 mv s10,t2 + 80004428: 00000e93 li t4,0 + 8000442c: 00002a17 auipc s4,0x2 + 80004430: 4d8a0a13 addi s4,s4,1240 # 80006904 + 80004434: 00002997 auipc s3,0x2 + 80004438: 5d098993 addi s3,s3,1488 # 80006a04 + 8000443c: 00050893 mv a7,a0 + 80004440: 00060e13 mv t3,a2 + 80004444: 00058313 mv t1,a1 + 80004448: 00100913 li s2,1 + 8000444c: 00500493 li s1,5 + 80004450: 00000413 li s0,0 + 80004454: 00700c93 li s9,7 + 80004458: 01a78d3b addw s10,a5,s10 + 8000445c: 09dc7263 bgeu s8,t4,800044e0 + 80004460: 011347b3 xor a5,t1,a7 + 80004464: 01c7f7b3 and a5,a5,t3 + 80004468: 00f347b3 xor a5,t1,a5 + 8000446c: 09dbe663 bltu s7,t4,800044f8 + 80004470: 0007879b sext.w a5,a5 + 80004474: 00f97693 andi a3,s2,15 + 80004478: 02069693 slli a3,a3,0x20 + 8000447c: 01e6d693 srli a3,a3,0x1e + 80004480: 04010d93 addi s11,sp,64 + 80004484: 00dd86b3 add a3,s11,a3 + 80004488: fc06a683 lw a3,-64(a3) + 8000448c: 01a787bb addw a5,a5,s10 + 80004490: 41900d3b negw s10,s9 + 80004494: 00d787bb addw a5,a5,a3 + 80004498: 019796bb sllw a3,a5,s9 + 8000449c: 01a7d7bb srlw a5,a5,s10 + 800044a0: 00f6e6b3 or a3,a3,a5 + 800044a4: 011686bb addw a3,a3,a7 + 800044a8: 000a2d03 lw s10,0(s4) + 800044ac: 000e0793 mv a5,t3 + 800044b0: 001e8e9b addiw t4,t4,1 + 800044b4: 0009ac83 lw s9,0(s3) + 800044b8: 00030e13 mv t3,t1 + 800044bc: 004a0a13 addi s4,s4,4 + 800044c0: 00088313 mv t1,a7 + 800044c4: 00498993 addi s3,s3,4 + 800044c8: 0074041b addiw s0,s0,7 + 800044cc: 0034849b addiw s1,s1,3 + 800044d0: 0059091b addiw s2,s2,5 + 800044d4: 00068893 mv a7,a3 + 800044d8: 01a78d3b addw s10,a5,s10 + 800044dc: f9dc62e3 bltu s8,t4,80004460 + 800044e0: 01c347b3 xor a5,t1,t3 + 800044e4: 0117f7b3 and a5,a5,a7 + 800044e8: 00fe47b3 xor a5,t3,a5 + 800044ec: 0007879b sext.w a5,a5 + 800044f0: 000e8693 mv a3,t4 + 800044f4: f85ff06f j 80004478 + 800044f8: 01c347b3 xor a5,t1,t3 + 800044fc: 0117c7b3 xor a5,a5,a7 + 80004500: 01db6863 bltu s6,t4,80004510 + 80004504: 0007879b sext.w a5,a5 + 80004508: 00f4f693 andi a3,s1,15 + 8000450c: f6dff06f j 80004478 + 80004510: 00f47793 andi a5,s0,15 + 80004514: 04010693 addi a3,sp,64 + 80004518: 00279793 slli a5,a5,0x2 + 8000451c: 00f687b3 add a5,a3,a5 + 80004520: fc07a783 lw a5,-64(a5) + 80004524: fffe4693 not a3,t3 + 80004528: 0116e6b3 or a3,a3,a7 + 8000452c: 0066c6b3 xor a3,a3,t1 + 80004530: 00d787bb addw a5,a5,a3 + 80004534: 01a787bb addw a5,a5,s10 + 80004538: 41900d3b negw s10,s9 + 8000453c: 019796bb sllw a3,a5,s9 + 80004540: 01a7d7bb srlw a5,a5,s10 + 80004544: 00f6e6b3 or a3,a3,a5 + 80004548: 011686bb addw a3,a3,a7 + 8000454c: f55e9ee3 bne t4,s5,800044a8 + 80004550: 04028293 addi t0,t0,64 + 80004554: 010e083b addw a6,t3,a6 + 80004558: 00a6853b addw a0,a3,a0 + 8000455c: 00b885bb addw a1,a7,a1 + 80004560: 00c3063b addw a2,t1,a2 + 80004564: e7e2ece3 bltu t0,t5,800043dc + 80004568: 0088549b srliw s1,a6,0x8 + 8000456c: 0108541b srliw s0,a6,0x10 + 80004570: 0188539b srliw t2,a6,0x18 + 80004574: 0085529b srliw t0,a0,0x8 + 80004578: 01055f9b srliw t6,a0,0x10 + 8000457c: 01855f1b srliw t5,a0,0x18 + 80004580: 0085de9b srliw t4,a1,0x8 + 80004584: 0105de1b srliw t3,a1,0x10 + 80004588: 0185d31b srliw t1,a1,0x18 + 8000458c: 0086589b srliw a7,a2,0x8 + 80004590: 0106569b srliw a3,a2,0x10 + 80004594: 0186579b srliw a5,a2,0x18 + 80004598: 01070023 sb a6,0(a4) + 8000459c: 009700a3 sb s1,1(a4) + 800045a0: 00870123 sb s0,2(a4) + 800045a4: 007701a3 sb t2,3(a4) + 800045a8: 00a70223 sb a0,4(a4) + 800045ac: 005702a3 sb t0,5(a4) + 800045b0: 01f70323 sb t6,6(a4) + 800045b4: 01e703a3 sb t5,7(a4) + 800045b8: 00b70423 sb a1,8(a4) + 800045bc: 01d704a3 sb t4,9(a4) + 800045c0: 01c70523 sb t3,10(a4) + 800045c4: 006705a3 sb t1,11(a4) + 800045c8: 00c70623 sb a2,12(a4) + 800045cc: 011706a3 sb a7,13(a4) + 800045d0: 00d70723 sb a3,14(a4) + 800045d4: 00f707a3 sb a5,15(a4) + 800045d8: 09813403 ld s0,152(sp) + 800045dc: 09013483 ld s1,144(sp) + 800045e0: 08813903 ld s2,136(sp) + 800045e4: 08013983 ld s3,128(sp) + 800045e8: 07813a03 ld s4,120(sp) + 800045ec: 07013a83 ld s5,112(sp) + 800045f0: 06813b03 ld s6,104(sp) + 800045f4: 06013b83 ld s7,96(sp) + 800045f8: 05813c03 ld s8,88(sp) + 800045fc: 05013c83 ld s9,80(sp) + 80004600: 04813d03 ld s10,72(sp) + 80004604: 04013d83 ld s11,64(sp) + 80004608: 0a010113 addi sp,sp,160 + 8000460c: 00008067 ret + 80004610: f8000793 li a5,-128 + 80004614: 00f60023 sb a5,0(a2) + 80004618: 01ef8633 add a2,t6,t5 + 8000461c: d39ff06f j 80004354 + +0000000080004620 : + 80004620: 00003517 auipc a0,0x3 + 80004624: 48053503 ld a0,1152(a0) # 80007aa0 + 80004628: ff010113 addi sp,sp,-16 + 8000462c: 01050593 addi a1,a0,16 + 80004630: 00113423 sd ra,8(sp) + 80004634: fe5fb0ef jal ra,80000618 + 80004638: 00003797 auipc a5,0x3 + 8000463c: 4987b783 ld a5,1176(a5) # 80007ad0 + 80004640: 0187a783 lw a5,24(a5) + 80004644: 00813083 ld ra,8(sp) + 80004648: 0005051b sext.w a0,a0 + 8000464c: 40a78533 sub a0,a5,a0 + 80004650: 00153513 seqz a0,a0 + 80004654: 01010113 addi sp,sp,16 + 80004658: 00008067 ret + +000000008000465c : + 8000465c: 00003797 auipc a5,0x3 + 80004660: 4747b783 ld a5,1140(a5) # 80007ad0 + 80004664: 0007a783 lw a5,0(a5) + 80004668: ff010113 addi sp,sp,-16 + 8000466c: 00813023 sd s0,0(sp) + 80004670: 41f7d51b sraiw a0,a5,0x1f + 80004674: 01d5551b srliw a0,a0,0x1d + 80004678: 00f5053b addw a0,a0,a5 + 8000467c: 4035551b sraiw a0,a0,0x3 + 80004680: 00003417 auipc s0,0x3 + 80004684: 43040413 addi s0,s0,1072 # 80007ab0 + 80004688: 0805051b addiw a0,a0,128 + 8000468c: 00f42023 sw a5,0(s0) + 80004690: 00113423 sd ra,8(sp) + 80004694: e85fb0ef jal ra,80000518 + 80004698: 00042783 lw a5,0(s0) + 8000469c: 00003717 auipc a4,0x3 + 800046a0: 40a73e23 sd a0,1052(a4) # 80007ab8 + 800046a4: fe100693 li a3,-31 + 800046a8: 41f7d71b sraiw a4,a5,0x1f + 800046ac: 01b7571b srliw a4,a4,0x1b + 800046b0: 00f7073b addw a4,a4,a5 + 800046b4: 02d7c063 blt a5,a3,800046d4 + 800046b8: 4057571b sraiw a4,a4,0x5 + 800046bc: 00000793 li a5,0 + 800046c0: fff00693 li a3,-1 + 800046c4: 00d52023 sw a3,0(a0) + 800046c8: 0017879b addiw a5,a5,1 + 800046cc: 00450513 addi a0,a0,4 + 800046d0: fef75ae3 bge a4,a5,800046c4 + 800046d4: 00813083 ld ra,8(sp) + 800046d8: 00013403 ld s0,0(sp) + 800046dc: 01010113 addi sp,sp,16 + 800046e0: 00008067 ret + +00000000800046e4 : + 800046e4: fd010113 addi sp,sp,-48 + 800046e8: 00913c23 sd s1,24(sp) + 800046ec: 02113423 sd ra,40(sp) + 800046f0: 02813023 sd s0,32(sp) + 800046f4: 01213823 sd s2,16(sp) + 800046f8: 01313423 sd s3,8(sp) + 800046fc: 00003497 auipc s1,0x3 + 80004700: 3b44a483 lw s1,948(s1) # 80007ab0 + 80004704: 14905463 blez s1,8000484c + 80004708: 00003617 auipc a2,0x3 + 8000470c: 3b060613 addi a2,a2,944 # 80007ab8 + 80004710: 00063683 ld a3,0(a2) + 80004714: 0006a783 lw a5,0(a3) + 80004718: 0017d79b srliw a5,a5,0x1 + 8000471c: 0017f793 andi a5,a5,1 + 80004720: 00079c63 bnez a5,80004738 + 80004724: 10c0006f j 80004830 + 80004728: 00072703 lw a4,0(a4) + 8000472c: 00f7573b srlw a4,a4,a5 + 80004730: 00177713 andi a4,a4,1 + 80004734: 0e070e63 beqz a4,80004830 + 80004738: 0017879b addiw a5,a5,1 + 8000473c: 4057d71b sraiw a4,a5,0x5 + 80004740: 00271713 slli a4,a4,0x2 + 80004744: 00e68733 add a4,a3,a4 + 80004748: fef4d0e3 bge s1,a5,80004728 + 8000474c: 00300793 li a5,3 + 80004750: 0e97de63 bge a5,s1,8000484c + 80004754: 00063903 ld s2,0(a2) + 80004758: 00200413 li s0,2 + 8000475c: 00100993 li s3,1 + 80004760: 01c0006f j 8000477c + 80004764: 0014041b addiw s0,s0,1 + 80004768: 00040593 mv a1,s0 + 8000476c: 00040513 mv a0,s0 + 80004770: 16c000ef jal ra,800048dc <__muldi3> + 80004774: 0005051b sext.w a0,a0 + 80004778: 06a4c663 blt s1,a0,800047e4 + 8000477c: 40545793 srai a5,s0,0x5 + 80004780: 00279793 slli a5,a5,0x2 + 80004784: 00f907b3 add a5,s2,a5 + 80004788: 0007a783 lw a5,0(a5) + 8000478c: 0087d7bb srlw a5,a5,s0 + 80004790: 0017f793 andi a5,a5,1 + 80004794: fc0788e3 beqz a5,80004764 + 80004798: 0014169b slliw a3,s0,0x1 + 8000479c: fcd4c4e3 blt s1,a3,80004764 + 800047a0: 4056d713 srai a4,a3,0x5 + 800047a4: 00271713 slli a4,a4,0x2 + 800047a8: 00e90733 add a4,s2,a4 + 800047ac: 00072603 lw a2,0(a4) + 800047b0: 01f6f793 andi a5,a3,31 + 800047b4: 00f997b3 sll a5,s3,a5 + 800047b8: fff7c793 not a5,a5 + 800047bc: 00c7f7b3 and a5,a5,a2 + 800047c0: 00f72023 sw a5,0(a4) + 800047c4: 00d406bb addw a3,s0,a3 + 800047c8: fcd4dce3 bge s1,a3,800047a0 + 800047cc: 0014041b addiw s0,s0,1 + 800047d0: 00040593 mv a1,s0 + 800047d4: 00040513 mv a0,s0 + 800047d8: 104000ef jal ra,800048dc <__muldi3> + 800047dc: 0005051b sext.w a0,a0 + 800047e0: f8a4dee3 bge s1,a0,8000477c + 800047e4: 00003797 auipc a5,0x3 + 800047e8: 2c07a823 sw zero,720(a5) # 80007ab4 + 800047ec: 00000613 li a2,0 + 800047f0: 00000693 li a3,0 + 800047f4: 00200713 li a4,2 + 800047f8: 40575793 srai a5,a4,0x5 + 800047fc: 00279793 slli a5,a5,0x2 + 80004800: 00f907b3 add a5,s2,a5 + 80004804: 0007a783 lw a5,0(a5) + 80004808: 00e7d7bb srlw a5,a5,a4 + 8000480c: 0017f793 andi a5,a5,1 + 80004810: 0017071b addiw a4,a4,1 + 80004814: 00078663 beqz a5,80004820 + 80004818: 0016869b addiw a3,a3,1 + 8000481c: 00100613 li a2,1 + 80004820: fce4dce3 bge s1,a4,800047f8 + 80004824: 00060663 beqz a2,80004830 + 80004828: 00003797 auipc a5,0x3 + 8000482c: 28d7a623 sw a3,652(a5) # 80007ab4 + 80004830: 02813083 ld ra,40(sp) + 80004834: 02013403 ld s0,32(sp) + 80004838: 01813483 ld s1,24(sp) + 8000483c: 01013903 ld s2,16(sp) + 80004840: 00813983 ld s3,8(sp) + 80004844: 03010113 addi sp,sp,48 + 80004848: 00008067 ret + 8000484c: 00003797 auipc a5,0x3 + 80004850: 2607a423 sw zero,616(a5) # 80007ab4 + 80004854: 00100793 li a5,1 + 80004858: fc97dce3 bge a5,s1,80004830 + 8000485c: 00003917 auipc s2,0x3 + 80004860: 25c93903 ld s2,604(s2) # 80007ab8 + 80004864: f89ff06f j 800047ec + +0000000080004868 : + 80004868: 00003797 auipc a5,0x3 + 8000486c: 2687b783 ld a5,616(a5) # 80007ad0 + 80004870: 0187a503 lw a0,24(a5) + 80004874: 00003797 auipc a5,0x3 + 80004878: 2407a783 lw a5,576(a5) # 80007ab4 + 8000487c: 40f50533 sub a0,a0,a5 + 80004880: 00153513 seqz a0,a0 + 80004884: 00008067 ret + +0000000080004888 : + 80004888: 00050513 mv a0,a0 + 8000488c: 0000007b 0x7b + 80004890: 00008067 ret + +0000000080004894 : + 80004894: 00050513 mv a0,a0 + 80004898: 0000006b 0x6b + 8000489c: 0000006f j 8000489c + +00000000800048a0 <_assert>: + 800048a0: 00051a63 bnez a0,800048b4 <_assert+0x14> + 800048a4: 00100793 li a5,1 + 800048a8: 00078513 mv a0,a5 + 800048ac: 0000006b 0x6b + 800048b0: 0000006f j 800048b0 <_assert+0x10> + 800048b4: 00008067 ret + +00000000800048b8 <_trm_init>: + 800048b8: ff010113 addi sp,sp,-16 + 800048bc: 00113423 sd ra,8(sp) + 800048c0: 5b8000ef jal ra,80004e78 + 800048c4: 00002517 auipc a0,0x2 + 800048c8: 51c50513 addi a0,a0,1308 # 80006de0 + 800048cc: 831fb0ef jal ra,800000fc
+ 800048d0: 00050513 mv a0,a0 + 800048d4: 0000006b 0x6b + 800048d8: 0000006f j 800048d8 <_trm_init+0x20> + +00000000800048dc <__muldi3>: + 800048dc: 00050613 mv a2,a0 + 800048e0: 00000513 li a0,0 + 800048e4: 0015f693 andi a3,a1,1 + 800048e8: 00068463 beqz a3,800048f0 <__muldi3+0x14> + 800048ec: 00c50533 add a0,a0,a2 + 800048f0: 0015d593 srli a1,a1,0x1 + 800048f4: 00161613 slli a2,a2,0x1 + 800048f8: fe0596e3 bnez a1,800048e4 <__muldi3+0x8> + 800048fc: 00008067 ret + +0000000080004900 <__udivsi3>: + 80004900: 02051513 slli a0,a0,0x20 + 80004904: 02059593 slli a1,a1,0x20 + 80004908: 00008293 mv t0,ra + 8000490c: 03c000ef jal ra,80004948 <__udivdi3> + 80004910: 0005051b sext.w a0,a0 + 80004914: 00028067 jr t0 + +0000000080004918 <__umodsi3>: + 80004918: 02051513 slli a0,a0,0x20 + 8000491c: 02059593 slli a1,a1,0x20 + 80004920: 02055513 srli a0,a0,0x20 + 80004924: 0205d593 srli a1,a1,0x20 + 80004928: 00008293 mv t0,ra + 8000492c: 01c000ef jal ra,80004948 <__udivdi3> + 80004930: 0005851b sext.w a0,a1 + 80004934: 00028067 jr t0 + +0000000080004938 <__divsi3>: + 80004938: fff00293 li t0,-1 + 8000493c: 0a558c63 beq a1,t0,800049f4 <__moddi3+0x30> + +0000000080004940 <__divdi3>: + 80004940: 06054063 bltz a0,800049a0 <__umoddi3+0x10> + 80004944: 0605c663 bltz a1,800049b0 <__umoddi3+0x20> + +0000000080004948 <__udivdi3>: + 80004948: 00058613 mv a2,a1 + 8000494c: 00050593 mv a1,a0 + 80004950: fff00513 li a0,-1 + 80004954: 02060c63 beqz a2,8000498c <__udivdi3+0x44> + 80004958: 00100693 li a3,1 + 8000495c: 00b67a63 bgeu a2,a1,80004970 <__udivdi3+0x28> + 80004960: 00c05863 blez a2,80004970 <__udivdi3+0x28> + 80004964: 00161613 slli a2,a2,0x1 + 80004968: 00169693 slli a3,a3,0x1 + 8000496c: feb66ae3 bltu a2,a1,80004960 <__udivdi3+0x18> + 80004970: 00000513 li a0,0 + 80004974: 00c5e663 bltu a1,a2,80004980 <__udivdi3+0x38> + 80004978: 40c585b3 sub a1,a1,a2 + 8000497c: 00d56533 or a0,a0,a3 + 80004980: 0016d693 srli a3,a3,0x1 + 80004984: 00165613 srli a2,a2,0x1 + 80004988: fe0696e3 bnez a3,80004974 <__udivdi3+0x2c> + 8000498c: 00008067 ret + +0000000080004990 <__umoddi3>: + 80004990: 00008293 mv t0,ra + 80004994: fb5ff0ef jal ra,80004948 <__udivdi3> + 80004998: 00058513 mv a0,a1 + 8000499c: 00028067 jr t0 + 800049a0: 40a00533 neg a0,a0 + 800049a4: 00b04863 bgtz a1,800049b4 <__umoddi3+0x24> + 800049a8: 40b005b3 neg a1,a1 + 800049ac: f9dff06f j 80004948 <__udivdi3> + 800049b0: 40b005b3 neg a1,a1 + 800049b4: 00008293 mv t0,ra + 800049b8: f91ff0ef jal ra,80004948 <__udivdi3> + 800049bc: 40a00533 neg a0,a0 + 800049c0: 00028067 jr t0 + +00000000800049c4 <__moddi3>: + 800049c4: 00008293 mv t0,ra + 800049c8: 0005ca63 bltz a1,800049dc <__moddi3+0x18> + 800049cc: 00054c63 bltz a0,800049e4 <__moddi3+0x20> + 800049d0: f79ff0ef jal ra,80004948 <__udivdi3> + 800049d4: 00058513 mv a0,a1 + 800049d8: 00028067 jr t0 + 800049dc: 40b005b3 neg a1,a1 + 800049e0: fe0558e3 bgez a0,800049d0 <__moddi3+0xc> + 800049e4: 40a00533 neg a0,a0 + 800049e8: f61ff0ef jal ra,80004948 <__udivdi3> + 800049ec: 40b00533 neg a0,a1 + 800049f0: 00028067 jr t0 + 800049f4: 01f29293 slli t0,t0,0x1f + 800049f8: f45514e3 bne a0,t0,80004940 <__divdi3> + 800049fc: 00008067 ret + +0000000080004a00 <__am_timer_config>: + 80004a00: 00100793 li a5,1 + 80004a04: 00f50023 sb a5,0(a0) + 80004a08: 00f500a3 sb a5,1(a0) + 80004a0c: 00008067 ret + +0000000080004a10 <__am_input_config>: + 80004a10: 00100793 li a5,1 + 80004a14: 00f50023 sb a5,0(a0) + 80004a18: 00008067 ret + +0000000080004a1c : + 80004a1c: ff010113 addi sp,sp,-16 + 80004a20: 00813023 sd s0,0(sp) + 80004a24: 00113423 sd ra,8(sp) + 80004a28: 00002417 auipc s0,0x2 + 80004a2c: 0d840413 addi s0,s0,216 # 80006b00 + 80004a30: 04100513 li a0,65 + 80004a34: 00140413 addi s0,s0,1 + 80004a38: e51ff0ef jal ra,80004888 + 80004a3c: 00044503 lbu a0,0(s0) + 80004a40: fe051ae3 bnez a0,80004a34 + 80004a44: 00002417 auipc s0,0x2 + 80004a48: 0cc40413 addi s0,s0,204 # 80006b10 + 80004a4c: 06100513 li a0,97 + 80004a50: 00140413 addi s0,s0,1 + 80004a54: e35ff0ef jal ra,80004888 + 80004a58: 00044503 lbu a0,0(s0) + 80004a5c: fe051ae3 bnez a0,80004a50 + 80004a60: 00002417 auipc s0,0x2 + 80004a64: 0d040413 addi s0,s0,208 # 80006b30 + 80004a68: 02000513 li a0,32 + 80004a6c: 00140413 addi s0,s0,1 + 80004a70: e19ff0ef jal ra,80004888 + 80004a74: 00044503 lbu a0,0(s0) + 80004a78: fe051ae3 bnez a0,80004a6c + 80004a7c: 00100513 li a0,1 + 80004a80: e15ff0ef jal ra,80004894 + +0000000080004a84 : + 80004a84: ff010113 addi sp,sp,-16 + 80004a88: 00113423 sd ra,8(sp) + 80004a8c: 00003797 auipc a5,0x3 + 80004a90: b0c78793 addi a5,a5,-1268 # 80007598 + 80004a94: 00003697 auipc a3,0x3 + 80004a98: f0468693 addi a3,a3,-252 # 80007998 + 80004a9c: 00000617 auipc a2,0x0 + 80004aa0: f8060613 addi a2,a2,-128 # 80004a1c + 80004aa4: 00c0006f j 80004ab0 + 80004aa8: 00878793 addi a5,a5,8 + 80004aac: 00d78c63 beq a5,a3,80004ac4 + 80004ab0: 0007b703 ld a4,0(a5) + 80004ab4: fe071ae3 bnez a4,80004aa8 + 80004ab8: 00c7b023 sd a2,0(a5) + 80004abc: 00878793 addi a5,a5,8 + 80004ac0: fed798e3 bne a5,a3,80004ab0 + 80004ac4: 030000ef jal ra,80004af4 <__am_timer_init> + 80004ac8: 00813083 ld ra,8(sp) + 80004acc: 00100513 li a0,1 + 80004ad0: 01010113 addi sp,sp,16 + 80004ad4: 00008067 ret + +0000000080004ad8 : + 80004ad8: 00351793 slli a5,a0,0x3 + 80004adc: 00003517 auipc a0,0x3 + 80004ae0: abc50513 addi a0,a0,-1348 # 80007598 + 80004ae4: 00f50533 add a0,a0,a5 + 80004ae8: 00053303 ld t1,0(a0) + 80004aec: 00058513 mv a0,a1 + 80004af0: 00030067 jr t1 + +0000000080004af4 <__am_timer_init>: + 80004af4: 00008067 ret + +0000000080004af8 <__am_timer_uptime>: + 80004af8: fd010113 addi sp,sp,-48 + 80004afc: 00913c23 sd s1,24(sp) + 80004b00: 02113423 sd ra,40(sp) + 80004b04: 02813023 sd s0,32(sp) + 80004b08: 01213823 sd s2,16(sp) + 80004b0c: 01313423 sd s3,8(sp) + 80004b10: 00050493 mv s1,a0 + 80004b14: b0002973 csrr s2,mcycle + 80004b18: 000f49b7 lui s3,0xf4 + 80004b1c: 24098593 addi a1,s3,576 # f4240 <_entry_offset+0xf4240> + 80004b20: 00090513 mv a0,s2 + 80004b24: e25ff0ef jal ra,80004948 <__udivdi3> + 80004b28: 00551413 slli s0,a0,0x5 + 80004b2c: 40a407b3 sub a5,s0,a0 + 80004b30: 00679413 slli s0,a5,0x6 + 80004b34: 40f40433 sub s0,s0,a5 + 80004b38: 00341413 slli s0,s0,0x3 + 80004b3c: 00a40433 add s0,s0,a0 + 80004b40: 24098593 addi a1,s3,576 + 80004b44: 00090513 mv a0,s2 + 80004b48: e49ff0ef jal ra,80004990 <__umoddi3> + 80004b4c: 00641413 slli s0,s0,0x6 + 80004b50: 00a40433 add s0,s0,a0 + 80004b54: 0084b023 sd s0,0(s1) + 80004b58: 02813083 ld ra,40(sp) + 80004b5c: 02013403 ld s0,32(sp) + 80004b60: 01813483 ld s1,24(sp) + 80004b64: 01013903 ld s2,16(sp) + 80004b68: 00813983 ld s3,8(sp) + 80004b6c: 03010113 addi sp,sp,48 + 80004b70: 00008067 ret + +0000000080004b74 : + 80004b74: fc010113 addi sp,sp,-64 + 80004b78: 01313c23 sd s3,24(sp) + 80004b7c: 00058993 mv s3,a1 + 80004b80: 00050793 mv a5,a0 + 80004b84: 03800613 li a2,56 + 80004b88: 00000593 li a1,0 + 80004b8c: 00098513 mv a0,s3 + 80004b90: 02813823 sd s0,48(sp) + 80004b94: 03213023 sd s2,32(sp) + 80004b98: 0007b403 ld s0,0(a5) + 80004b9c: 01413823 sd s4,16(sp) + 80004ba0: 02113c23 sd ra,56(sp) + 80004ba4: 02913423 sd s1,40(sp) + 80004ba8: 01513423 sd s5,8(sp) + 80004bac: 434010ef jal ra,80005fe0 + 80004bb0: 7b200793 li a5,1970 + 80004bb4: 00f9aa23 sw a5,20(s3) + 80004bb8: 7b200913 li s2,1970 + 80004bbc: 00002a17 auipc s4,0x2 + 80004bc0: 22ca0a13 addi s4,s4,556 # 80006de8 + 80004bc4: 0100006f j 80004bd4 + 80004bc8: 40e40433 sub s0,s0,a4 + 80004bcc: 00d9aa23 sw a3,20(s3) + 80004bd0: 00068913 mv s2,a3 + 80004bd4: 0009049b sext.w s1,s2 + 80004bd8: 06400593 li a1,100 + 80004bdc: 00048513 mv a0,s1 + 80004be0: de5ff0ef jal ra,800049c4 <__moddi3> + 80004be4: 00050793 mv a5,a0 + 80004be8: 0007879b sext.w a5,a5 + 80004bec: 00048513 mv a0,s1 + 80004bf0: 00397493 andi s1,s2,3 + 80004bf4: 19000593 li a1,400 + 80004bf8: 0014b493 seqz s1,s1 + 80004bfc: 00079863 bnez a5,80004c0c + 80004c00: dc5ff0ef jal ra,800049c4 <__moddi3> + 80004c04: 0005049b sext.w s1,a0 + 80004c08: 0014b493 seqz s1,s1 + 80004c0c: 00249793 slli a5,s1,0x2 + 80004c10: 00fa07b3 add a5,s4,a5 + 80004c14: 0007e703 lwu a4,0(a5) + 80004c18: 0019069b addiw a3,s2,1 + 80004c1c: fae456e3 bge s0,a4,80004bc8 + 80004c20: 000155b7 lui a1,0x15 + 80004c24: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80004c28: 00040513 mv a0,s0 + 80004c2c: d15ff0ef jal ra,80004940 <__divdi3> + 80004c30: 00149793 slli a5,s1,0x1 + 80004c34: 009784b3 add s1,a5,s1 + 80004c38: 00449793 slli a5,s1,0x4 + 80004c3c: 00002497 auipc s1,0x2 + 80004c40: f3448493 addi s1,s1,-204 # 80006b70 + 80004c44: 00f484b3 add s1,s1,a5 + 80004c48: 0004e783 lwu a5,0(s1) + 80004c4c: 0005051b sext.w a0,a0 + 80004c50: 00a9ae23 sw a0,28(s3) + 80004c54: 14f44463 blt s0,a5,80004d9c + 80004c58: 00100713 li a4,1 + 80004c5c: 40f40433 sub s0,s0,a5 + 80004c60: 0044e783 lwu a5,4(s1) + 80004c64: 00070a1b sext.w s4,a4 + 80004c68: 00448493 addi s1,s1,4 + 80004c6c: 00170713 addi a4,a4,1 + 80004c70: fef456e3 bge s0,a5,80004c5c + 80004c74: 000155b7 lui a1,0x15 + 80004c78: 0149a823 sw s4,16(s3) + 80004c7c: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80004c80: 00040513 mv a0,s0 + 80004c84: cbdff0ef jal ra,80004940 <__divdi3> + 80004c88: 0005051b sext.w a0,a0 + 80004c8c: 0015079b addiw a5,a0,1 + 80004c90: 000155b7 lui a1,0x15 + 80004c94: 00f9a623 sw a5,12(s3) + 80004c98: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80004c9c: 00040513 mv a0,s0 + 80004ca0: 00001ab7 lui s5,0x1 + 80004ca4: 0007841b sext.w s0,a5 + 80004ca8: d1dff0ef jal ra,800049c4 <__moddi3> + 80004cac: e10a8593 addi a1,s5,-496 # e10 <_entry_offset+0xe10> + 80004cb0: 00050493 mv s1,a0 + 80004cb4: c8dff0ef jal ra,80004940 <__divdi3> + 80004cb8: e10a8593 addi a1,s5,-496 + 80004cbc: 00a9a423 sw a0,8(s3) + 80004cc0: 00048513 mv a0,s1 + 80004cc4: d01ff0ef jal ra,800049c4 <__moddi3> + 80004cc8: 03c00593 li a1,60 + 80004ccc: 00050493 mv s1,a0 + 80004cd0: c71ff0ef jal ra,80004940 <__divdi3> + 80004cd4: 00a9a223 sw a0,4(s3) + 80004cd8: 03c00593 li a1,60 + 80004cdc: 00048513 mv a0,s1 + 80004ce0: ce5ff0ef jal ra,800049c4 <__moddi3> + 80004ce4: 001a0a1b addiw s4,s4,1 + 80004ce8: 0ffa7793 andi a5,s4,255 + 80004cec: 0037b793 sltiu a5,a5,3 + 80004cf0: 40f9093b subw s2,s2,a5 + 80004cf4: 03091913 slli s2,s2,0x30 + 80004cf8: 03095913 srli s2,s2,0x30 + 80004cfc: 00a9a023 sw a0,0(s3) + 80004d00: 06400593 li a1,100 + 80004d04: 00090513 mv a0,s2 + 80004d08: c41ff0ef jal ra,80004948 <__udivdi3> + 80004d0c: 0029549b srliw s1,s2,0x2 + 80004d10: 0105179b slliw a5,a0,0x10 + 80004d14: 0107d79b srliw a5,a5,0x10 + 80004d18: 012484bb addw s1,s1,s2 + 80004d1c: 19000593 li a1,400 + 80004d20: 00090513 mv a0,s2 + 80004d24: 0ffa7a13 andi s4,s4,255 + 80004d28: 40f484bb subw s1,s1,a5 + 80004d2c: fffa0a1b addiw s4,s4,-1 + 80004d30: c19ff0ef jal ra,80004948 <__udivdi3> + 80004d34: 00002797 auipc a5,0x2 + 80004d38: e9c78793 addi a5,a5,-356 # 80006bd0 + 80004d3c: 002a1a13 slli s4,s4,0x2 + 80004d40: 01478a33 add s4,a5,s4 + 80004d44: 000a2783 lw a5,0(s4) + 80004d48: 0105151b slliw a0,a0,0x10 + 80004d4c: 0105551b srliw a0,a0,0x10 + 80004d50: 00a484bb addw s1,s1,a0 + 80004d54: 00f484bb addw s1,s1,a5 + 80004d58: 0ff47513 andi a0,s0,255 + 80004d5c: 00a4853b addw a0,s1,a0 + 80004d60: 00700593 li a1,7 + 80004d64: c61ff0ef jal ra,800049c4 <__moddi3> + 80004d68: 03813083 ld ra,56(sp) + 80004d6c: 03013403 ld s0,48(sp) + 80004d70: 0ff57513 andi a0,a0,255 + 80004d74: 00a9ac23 sw a0,24(s3) + 80004d78: 0209a023 sw zero,32(s3) + 80004d7c: 02813483 ld s1,40(sp) + 80004d80: 02013903 ld s2,32(sp) + 80004d84: 01013a03 ld s4,16(sp) + 80004d88: 00813a83 ld s5,8(sp) + 80004d8c: 00098513 mv a0,s3 + 80004d90: 01813983 ld s3,24(sp) + 80004d94: 04010113 addi sp,sp,64 + 80004d98: 00008067 ret + 80004d9c: 00000a13 li s4,0 + 80004da0: eedff06f j 80004c8c + +0000000080004da4 <__am_timer_rtc>: + 80004da4: f9010113 addi sp,sp,-112 + 80004da8: 06813023 sd s0,96(sp) + 80004dac: 06113423 sd ra,104(sp) + 80004db0: 04913c23 sd s1,88(sp) + 80004db4: 05213823 sd s2,80(sp) + 80004db8: 00050413 mv s0,a0 + 80004dbc: b00024f3 csrr s1,mcycle + 80004dc0: 000f4937 lui s2,0xf4 + 80004dc4: 24090593 addi a1,s2,576 # f4240 <_entry_offset+0xf4240> + 80004dc8: 00048513 mv a0,s1 + 80004dcc: b7dff0ef jal ra,80004948 <__udivdi3> + 80004dd0: 00050793 mv a5,a0 + 80004dd4: 24090593 addi a1,s2,576 + 80004dd8: 00048513 mv a0,s1 + 80004ddc: 00f13423 sd a5,8(sp) + 80004de0: bb1ff0ef jal ra,80004990 <__umoddi3> + 80004de4: 00050793 mv a5,a0 + 80004de8: 01810593 addi a1,sp,24 + 80004dec: 00810513 addi a0,sp,8 + 80004df0: 00f13823 sd a5,16(sp) + 80004df4: d81ff0ef jal ra,80004b74 + 80004df8: 01812703 lw a4,24(sp) + 80004dfc: 02812783 lw a5,40(sp) + 80004e00: 06813083 ld ra,104(sp) + 80004e04: 00e42a23 sw a4,20(s0) + 80004e08: 01c12703 lw a4,28(sp) + 80004e0c: 0017879b addiw a5,a5,1 + 80004e10: 00f42223 sw a5,4(s0) + 80004e14: 00e42823 sw a4,16(s0) + 80004e18: 02012703 lw a4,32(sp) + 80004e1c: 02c12783 lw a5,44(sp) + 80004e20: 05813483 ld s1,88(sp) + 80004e24: 00e42623 sw a4,12(s0) + 80004e28: 02412703 lw a4,36(sp) + 80004e2c: 00f42023 sw a5,0(s0) + 80004e30: 05013903 ld s2,80(sp) + 80004e34: 00e42423 sw a4,8(s0) + 80004e38: 06013403 ld s0,96(sp) + 80004e3c: 07010113 addi sp,sp,112 + 80004e40: 00008067 ret + +0000000080004e44 <__am_input_keybrd>: + 80004e44: 00050023 sb zero,0(a0) + 80004e48: 00052223 sw zero,4(a0) + 80004e4c: 00008067 ret + +0000000080004e50 : + 80004e50: 00054783 lbu a5,0(a0) + 80004e54: 00158593 addi a1,a1,1 + 80004e58: 00150513 addi a0,a0,1 + 80004e5c: fff5c703 lbu a4,-1(a1) + 80004e60: 00078863 beqz a5,80004e70 + 80004e64: fee786e3 beq a5,a4,80004e50 + 80004e68: 40e7853b subw a0,a5,a4 + 80004e6c: 00008067 ret + 80004e70: 40e0053b negw a0,a4 + 80004e74: 00008067 ret + +0000000080004e78 : + 80004e78: 00002797 auipc a5,0x2 + 80004e7c: 71078793 addi a5,a5,1808 # 80007588 + 80004e80: 0007b503 ld a0,0(a5) + 80004e84: 0087b583 ld a1,8(a5) + 80004e88: ff010113 addi sp,sp,-16 + 80004e8c: 00000693 li a3,0 + 80004e90: 00000613 li a2,0 + 80004e94: 40a585b3 sub a1,a1,a0 + 80004e98: 00113423 sd ra,8(sp) + 80004e9c: 224010ef jal ra,800060c0 + 80004ea0: 00813083 ld ra,8(sp) + 80004ea4: 00003797 auipc a5,0x3 + 80004ea8: c0a7be23 sd a0,-996(a5) # 80007ac0 + 80004eac: 01010113 addi sp,sp,16 + 80004eb0: 00008067 ret + +0000000080004eb4 <_out_buffer>: + 80004eb4: 00d67663 bgeu a2,a3,80004ec0 <_out_buffer+0xc> + 80004eb8: 00c585b3 add a1,a1,a2 + 80004ebc: 00a58023 sb a0,0(a1) + 80004ec0: 00008067 ret + +0000000080004ec4 <_out_null>: + 80004ec4: 00008067 ret + +0000000080004ec8 <_ntoa_format>: + 80004ec8: fa010113 addi sp,sp,-96 + 80004ecc: 07012303 lw t1,112(sp) + 80004ed0: 03313c23 sd s3,56(sp) + 80004ed4: 03413823 sd s4,48(sp) + 80004ed8: 03513423 sd s5,40(sp) + 80004edc: 03613023 sd s6,32(sp) + 80004ee0: 01713c23 sd s7,24(sp) + 80004ee4: 01813823 sd s8,16(sp) + 80004ee8: 01913423 sd s9,8(sp) + 80004eec: 00237e13 andi t3,t1,2 + 80004ef0: 01037e93 andi t4,t1,16 + 80004ef4: 04113c23 sd ra,88(sp) + 80004ef8: 04813823 sd s0,80(sp) + 80004efc: 04913423 sd s1,72(sp) + 80004f00: 05213023 sd s2,64(sp) + 80004f04: 06012f03 lw t5,96(sp) + 80004f08: 06812c03 lw s8,104(sp) + 80004f0c: 00050a13 mv s4,a0 + 80004f10: 00058a93 mv s5,a1 + 80004f14: 00060b93 mv s7,a2 + 80004f18: 00068b13 mv s6,a3 + 80004f1c: 00070993 mv s3,a4 + 80004f20: 000e0c9b sext.w s9,t3 + 80004f24: 000e8e9b sext.w t4,t4 + 80004f28: 060e1c63 bnez t3,80004fa0 <_ntoa_format+0xd8> + 80004f2c: 020f1693 slli a3,t5,0x20 + 80004f30: 00137513 andi a0,t1,1 + 80004f34: 0206d693 srli a3,a3,0x20 + 80004f38: 180c1e63 bnez s8,800050d4 <_ntoa_format+0x20c> + 80004f3c: 02d7f663 bgeu a5,a3,80004f68 <_ntoa_format+0xa0> + 80004f40: 02000713 li a4,32 + 80004f44: 36e78e63 beq a5,a4,800052c0 <_ntoa_format+0x3f8> + 80004f48: 03000613 li a2,48 + 80004f4c: 02000593 li a1,32 + 80004f50: 0080006f j 80004f58 <_ntoa_format+0x90> + 80004f54: 00b78a63 beq a5,a1,80004f68 <_ntoa_format+0xa0> + 80004f58: 00178793 addi a5,a5,1 + 80004f5c: 00f98733 add a4,s3,a5 + 80004f60: fec70fa3 sb a2,-1(a4) + 80004f64: fed7e8e3 bltu a5,a3,80004f54 <_ntoa_format+0x8c> + 80004f68: 02050c63 beqz a0,80004fa0 <_ntoa_format+0xd8> + 80004f6c: 020c1913 slli s2,s8,0x20 + 80004f70: 02095913 srli s2,s2,0x20 + 80004f74: 0327f663 bgeu a5,s2,80004fa0 <_ntoa_format+0xd8> + 80004f78: 02000713 li a4,32 + 80004f7c: 36e78863 beq a5,a4,800052ec <_ntoa_format+0x424> + 80004f80: 03000693 li a3,48 + 80004f84: 02000613 li a2,32 + 80004f88: 0080006f j 80004f90 <_ntoa_format+0xc8> + 80004f8c: 16c78463 beq a5,a2,800050f4 <_ntoa_format+0x22c> + 80004f90: 00178793 addi a5,a5,1 + 80004f94: 00f98733 add a4,s3,a5 + 80004f98: fed70fa3 sb a3,-1(a4) + 80004f9c: ff2798e3 bne a5,s2,80004f8c <_ntoa_format+0xc4> + 80004fa0: 1a0e8663 beqz t4,8000514c <_ntoa_format+0x284> + 80004fa4: 40037713 andi a4,t1,1024 + 80004fa8: 20071463 bnez a4,800051b0 <_ntoa_format+0x2e8> + 80004fac: 1e079663 bnez a5,80005198 <_ntoa_format+0x2d0> + 80004fb0: 01000793 li a5,16 + 80004fb4: 2af88863 beq a7,a5,80005264 <_ntoa_format+0x39c> + 80004fb8: 00200793 li a5,2 + 80004fbc: 2ef88a63 beq a7,a5,800052b0 <_ntoa_format+0x3e8> + 80004fc0: 03000793 li a5,48 + 80004fc4: 00f98023 sb a5,0(s3) + 80004fc8: 00100793 li a5,1 + 80004fcc: 1a080463 beqz a6,80005174 <_ntoa_format+0x2ac> + 80004fd0: 00f98733 add a4,s3,a5 + 80004fd4: 00178413 addi s0,a5,1 + 80004fd8: 02d00793 li a5,45 + 80004fdc: 00f70023 sb a5,0(a4) + 80004fe0: 00337313 andi t1,t1,3 + 80004fe4: 20031263 bnez t1,800051e8 <_ntoa_format+0x320> + 80004fe8: 020c1913 slli s2,s8,0x20 + 80004fec: 02095913 srli s2,s2,0x20 + 80004ff0: 1f247c63 bgeu s0,s2,800051e8 <_ntoa_format+0x320> + 80004ff4: 40890933 sub s2,s2,s0 + 80004ff8: 01790933 add s2,s2,s7 + 80004ffc: 000b8493 mv s1,s7 + 80005000: 00048613 mv a2,s1 + 80005004: 000b0693 mv a3,s6 + 80005008: 00148493 addi s1,s1,1 + 8000500c: 000a8593 mv a1,s5 + 80005010: 02000513 li a0,32 + 80005014: 000a00e7 jalr s4 + 80005018: ff2494e3 bne s1,s2,80005000 <_ntoa_format+0x138> + 8000501c: 02040663 beqz s0,80005048 <_ntoa_format+0x180> + 80005020: 01240933 add s2,s0,s2 + 80005024: 012984b3 add s1,s3,s2 + 80005028: 00898433 add s0,s3,s0 + 8000502c: fff44503 lbu a0,-1(s0) + 80005030: 40848633 sub a2,s1,s0 + 80005034: 000b0693 mv a3,s6 + 80005038: fff40413 addi s0,s0,-1 + 8000503c: 000a8593 mv a1,s5 + 80005040: 000a00e7 jalr s4 + 80005044: fe8994e3 bne s3,s0,8000502c <_ntoa_format+0x164> + 80005048: 040c8a63 beqz s9,8000509c <_ntoa_format+0x1d4> + 8000504c: 020c1c13 slli s8,s8,0x20 + 80005050: 41790433 sub s0,s2,s7 + 80005054: 020c5c13 srli s8,s8,0x20 + 80005058: 05847263 bgeu s0,s8,8000509c <_ntoa_format+0x1d4> + 8000505c: 01740633 add a2,s0,s7 + 80005060: 000b0693 mv a3,s6 + 80005064: 00140413 addi s0,s0,1 + 80005068: 000a8593 mv a1,s5 + 8000506c: 02000513 li a0,32 + 80005070: 000a00e7 jalr s4 + 80005074: ff8464e3 bltu s0,s8,8000505c <_ntoa_format+0x194> + 80005078: 41790733 sub a4,s2,s7 + 8000507c: 00170713 addi a4,a4,1 + 80005080: 00000793 li a5,0 + 80005084: 00ec6863 bltu s8,a4,80005094 <_ntoa_format+0x1cc> + 80005088: fffb8793 addi a5,s7,-1 # ffff <_entry_offset+0xffff> + 8000508c: 01878c33 add s8,a5,s8 + 80005090: 412c07b3 sub a5,s8,s2 + 80005094: 00190913 addi s2,s2,1 + 80005098: 00f90933 add s2,s2,a5 + 8000509c: 05813083 ld ra,88(sp) + 800050a0: 05013403 ld s0,80(sp) + 800050a4: 04813483 ld s1,72(sp) + 800050a8: 03813983 ld s3,56(sp) + 800050ac: 03013a03 ld s4,48(sp) + 800050b0: 02813a83 ld s5,40(sp) + 800050b4: 02013b03 ld s6,32(sp) + 800050b8: 01813b83 ld s7,24(sp) + 800050bc: 01013c03 ld s8,16(sp) + 800050c0: 00813c83 ld s9,8(sp) + 800050c4: 00090513 mv a0,s2 + 800050c8: 04013903 ld s2,64(sp) + 800050cc: 06010113 addi sp,sp,96 + 800050d0: 00008067 ret + 800050d4: 12050863 beqz a0,80005204 <_ntoa_format+0x33c> + 800050d8: 00081663 bnez a6,800050e4 <_ntoa_format+0x21c> + 800050dc: 00c37713 andi a4,t1,12 + 800050e0: 00070463 beqz a4,800050e8 <_ntoa_format+0x220> + 800050e4: fffc0c1b addiw s8,s8,-1 + 800050e8: e8d7f2e3 bgeu a5,a3,80004f6c <_ntoa_format+0xa4> + 800050ec: 02000713 li a4,32 + 800050f0: e4e79ce3 bne a5,a4,80004f48 <_ntoa_format+0x80> + 800050f4: 0e0e8063 beqz t4,800051d4 <_ntoa_format+0x30c> + 800050f8: 40037793 andi a5,t1,1024 + 800050fc: 04079c63 bnez a5,80005154 <_ntoa_format+0x28c> + 80005100: 02000793 li a5,32 + 80005104: 0aff1063 bne t5,a5,800051a4 <_ntoa_format+0x2dc> + 80005108: 02000793 li a5,32 + 8000510c: 01f00713 li a4,31 + 80005110: 01000693 li a3,16 + 80005114: 1ad88c63 beq a7,a3,800052cc <_ntoa_format+0x404> + 80005118: 00200693 li a3,2 + 8000511c: 00070793 mv a5,a4 + 80005120: 00d89e63 bne a7,a3,8000513c <_ntoa_format+0x274> + 80005124: 00e986b3 add a3,s3,a4 + 80005128: 00170793 addi a5,a4,1 + 8000512c: 06200713 li a4,98 + 80005130: 00e68023 sb a4,0(a3) + 80005134: 02000713 li a4,32 + 80005138: 00e78e63 beq a5,a4,80005154 <_ntoa_format+0x28c> + 8000513c: 00f98733 add a4,s3,a5 + 80005140: 03000693 li a3,48 + 80005144: 00d70023 sb a3,0(a4) + 80005148: 00178793 addi a5,a5,1 + 8000514c: 02000713 li a4,32 + 80005150: e6e79ee3 bne a5,a4,80004fcc <_ntoa_format+0x104> + 80005154: 00337313 andi t1,t1,3 + 80005158: 08031263 bnez t1,800051dc <_ntoa_format+0x314> + 8000515c: 02000413 li s0,32 + 80005160: 020c1913 slli s2,s8,0x20 + 80005164: 02095913 srli s2,s2,0x20 + 80005168: e92466e3 bltu s0,s2,80004ff4 <_ntoa_format+0x12c> + 8000516c: 000b8913 mv s2,s7 + 80005170: eadff06f j 8000501c <_ntoa_format+0x154> + 80005174: 00437713 andi a4,t1,4 + 80005178: 06071c63 bnez a4,800051f0 <_ntoa_format+0x328> + 8000517c: 00837713 andi a4,t1,8 + 80005180: 0c071863 bnez a4,80005250 <_ntoa_format+0x388> + 80005184: 00337313 andi t1,t1,3 + 80005188: 00078413 mv s0,a5 + 8000518c: fc030ae3 beqz t1,80005160 <_ntoa_format+0x298> + 80005190: 000b8913 mv s2,s7 + 80005194: e89ff06f j 8000501c <_ntoa_format+0x154> + 80005198: 020f1f13 slli t5,t5,0x20 + 8000519c: 020f5f13 srli t5,t5,0x20 + 800051a0: 0aff0263 beq t5,a5,80005244 <_ntoa_format+0x37c> + 800051a4: 020c1913 slli s2,s8,0x20 + 800051a8: 02095913 srli s2,s2,0x20 + 800051ac: 08f90c63 beq s2,a5,80005244 <_ntoa_format+0x37c> + 800051b0: 01000713 li a4,16 + 800051b4: 06e88663 beq a7,a4,80005220 <_ntoa_format+0x358> + 800051b8: 00200713 li a4,2 + 800051bc: f6e89ce3 bne a7,a4,80005134 <_ntoa_format+0x26c> + 800051c0: 02000713 li a4,32 + 800051c4: f8e788e3 beq a5,a4,80005154 <_ntoa_format+0x28c> + 800051c8: 00f986b3 add a3,s3,a5 + 800051cc: 00178793 addi a5,a5,1 + 800051d0: f5dff06f j 8000512c <_ntoa_format+0x264> + 800051d4: 00337313 andi t1,t1,3 + 800051d8: 0c030063 beqz t1,80005298 <_ntoa_format+0x3d0> + 800051dc: 000b8913 mv s2,s7 + 800051e0: 02000413 li s0,32 + 800051e4: e3dff06f j 80005020 <_ntoa_format+0x158> + 800051e8: 000b8913 mv s2,s7 + 800051ec: e35ff06f j 80005020 <_ntoa_format+0x158> + 800051f0: 00f98733 add a4,s3,a5 + 800051f4: 00178413 addi s0,a5,1 + 800051f8: 02b00793 li a5,43 + 800051fc: 00f70023 sb a5,0(a4) + 80005200: de1ff06f j 80004fe0 <_ntoa_format+0x118> + 80005204: d8d7fee3 bgeu a5,a3,80004fa0 <_ntoa_format+0xd8> + 80005208: 02000713 li a4,32 + 8000520c: d2e79ee3 bne a5,a4,80004f48 <_ntoa_format+0x80> + 80005210: 0e0e8c63 beqz t4,80005308 <_ntoa_format+0x440> + 80005214: 40037793 andi a5,t1,1024 + 80005218: f2079ee3 bnez a5,80005154 <_ntoa_format+0x28c> + 8000521c: ee5ff06f j 80005100 <_ntoa_format+0x238> + 80005220: 02037713 andi a4,t1,32 + 80005224: 04071c63 bnez a4,8000527c <_ntoa_format+0x3b4> + 80005228: 02000713 li a4,32 + 8000522c: f2e784e3 beq a5,a4,80005154 <_ntoa_format+0x28c> + 80005230: 00f98733 add a4,s3,a5 + 80005234: 00178793 addi a5,a5,1 + 80005238: 07800693 li a3,120 + 8000523c: 00d70023 sb a3,0(a4) + 80005240: ef5ff06f j 80005134 <_ntoa_format+0x26c> + 80005244: fff78713 addi a4,a5,-1 + 80005248: d60704e3 beqz a4,80004fb0 <_ntoa_format+0xe8> + 8000524c: ec5ff06f j 80005110 <_ntoa_format+0x248> + 80005250: 00f98733 add a4,s3,a5 + 80005254: 00178413 addi s0,a5,1 + 80005258: 02000793 li a5,32 + 8000525c: 00f70023 sb a5,0(a4) + 80005260: d81ff06f j 80004fe0 <_ntoa_format+0x118> + 80005264: 02037793 andi a5,t1,32 + 80005268: 02079c63 bnez a5,800052a0 <_ntoa_format+0x3d8> + 8000526c: 07800793 li a5,120 + 80005270: 00f98023 sb a5,0(s3) + 80005274: 00100793 li a5,1 + 80005278: ec5ff06f j 8000513c <_ntoa_format+0x274> + 8000527c: 02000713 li a4,32 + 80005280: ece78ae3 beq a5,a4,80005154 <_ntoa_format+0x28c> + 80005284: 00f98733 add a4,s3,a5 + 80005288: 05800693 li a3,88 + 8000528c: 00d70023 sb a3,0(a4) + 80005290: 00178793 addi a5,a5,1 + 80005294: ea1ff06f j 80005134 <_ntoa_format+0x26c> + 80005298: 02000413 li s0,32 + 8000529c: d4dff06f j 80004fe8 <_ntoa_format+0x120> + 800052a0: 05800793 li a5,88 + 800052a4: 00f98023 sb a5,0(s3) + 800052a8: 00100793 li a5,1 + 800052ac: e91ff06f j 8000513c <_ntoa_format+0x274> + 800052b0: 06200793 li a5,98 + 800052b4: 00f98023 sb a5,0(s3) + 800052b8: 00100793 li a5,1 + 800052bc: e81ff06f j 8000513c <_ntoa_format+0x274> + 800052c0: e2051ae3 bnez a0,800050f4 <_ntoa_format+0x22c> + 800052c4: 000c8c13 mv s8,s9 + 800052c8: f49ff06f j 80005210 <_ntoa_format+0x348> + 800052cc: 02037693 andi a3,t1,32 + 800052d0: ffe78713 addi a4,a5,-2 + 800052d4: 00069863 bnez a3,800052e4 <_ntoa_format+0x41c> + 800052d8: 00e98733 add a4,s3,a4 + 800052dc: fff78793 addi a5,a5,-1 + 800052e0: f59ff06f j 80005238 <_ntoa_format+0x370> + 800052e4: 00070793 mv a5,a4 + 800052e8: f9dff06f j 80005284 <_ntoa_format+0x3bc> + 800052ec: 000e8e63 beqz t4,80005308 <_ntoa_format+0x440> + 800052f0: 40037713 andi a4,t1,1024 + 800052f4: 00071e63 bnez a4,80005310 <_ntoa_format+0x448> + 800052f8: 02ff0e63 beq t5,a5,80005334 <_ntoa_format+0x46c> + 800052fc: e4fc1ce3 bne s8,a5,80005154 <_ntoa_format+0x28c> + 80005300: 01f00713 li a4,31 + 80005304: e0dff06f j 80005110 <_ntoa_format+0x248> + 80005308: 02000413 li s0,32 + 8000530c: cd5ff06f j 80004fe0 <_ntoa_format+0x118> + 80005310: 01000793 li a5,16 + 80005314: 02f88c63 beq a7,a5,8000534c <_ntoa_format+0x484> + 80005318: 00200793 li a5,2 + 8000531c: e2f88ce3 beq a7,a5,80005154 <_ntoa_format+0x28c> + 80005320: 00337313 andi t1,t1,3 + 80005324: ea031ce3 bnez t1,800051dc <_ntoa_format+0x314> + 80005328: 02000413 li s0,32 + 8000532c: cd2464e3 bltu s0,s2,80004ff4 <_ntoa_format+0x12c> + 80005330: e3dff06f j 8000516c <_ntoa_format+0x2a4> + 80005334: 01000713 li a4,16 + 80005338: f8e88ae3 beq a7,a4,800052cc <_ntoa_format+0x404> + 8000533c: 00200793 li a5,2 + 80005340: 00f88c63 beq a7,a5,80005358 <_ntoa_format+0x490> + 80005344: 01f00793 li a5,31 + 80005348: df5ff06f j 8000513c <_ntoa_format+0x274> + 8000534c: 02037793 andi a5,t1,32 + 80005350: fc0788e3 beqz a5,80005320 <_ntoa_format+0x458> + 80005354: e01ff06f j 80005154 <_ntoa_format+0x28c> + 80005358: 01f00713 li a4,31 + 8000535c: dc9ff06f j 80005124 <_ntoa_format+0x25c> + +0000000080005360 <_ntoa_long>: + 80005360: f4010113 addi sp,sp,-192 + 80005364: 09413823 sd s4,144(sp) + 80005368: 09513423 sd s5,136(sp) + 8000536c: 09613023 sd s6,128(sp) + 80005370: 07713c23 sd s7,120(sp) + 80005374: 07813823 sd s8,112(sp) + 80005378: 07913423 sd s9,104(sp) + 8000537c: 05b13c23 sd s11,88(sp) + 80005380: 0a113c23 sd ra,184(sp) + 80005384: 0a813823 sd s0,176(sp) + 80005388: 0a913423 sd s1,168(sp) + 8000538c: 0b213023 sd s2,160(sp) + 80005390: 09313c23 sd s3,152(sp) + 80005394: 07a13023 sd s10,96(sp) + 80005398: 02a13023 sd a0,32(sp) + 8000539c: 03113423 sd a7,40(sp) + 800053a0: 0c812a03 lw s4,200(sp) + 800053a4: 00070d93 mv s11,a4 + 800053a8: 00058b13 mv s6,a1 + 800053ac: 00060b93 mv s7,a2 + 800053b0: 00068c13 mv s8,a3 + 800053b4: 00078c93 mv s9,a5 + 800053b8: 00080a93 mv s5,a6 + 800053bc: 00071863 bnez a4,800053cc <_ntoa_long+0x6c> + 800053c0: 400a7793 andi a5,s4,1024 + 800053c4: fefa7a13 andi s4,s4,-17 + 800053c8: 0e079663 bnez a5,800054b4 <_ntoa_long+0x154> + 800053cc: 020a7793 andi a5,s4,32 + 800053d0: 06100413 li s0,97 + 800053d4: 0c079c63 bnez a5,800054ac <_ntoa_long+0x14c> + 800053d8: 00000d13 li s10,0 + 800053dc: 03010493 addi s1,sp,48 + 800053e0: 00900913 li s2,9 + 800053e4: ff64041b addiw s0,s0,-10 + 800053e8: 02000993 li s3,32 + 800053ec: 00c0006f j 800053f8 <_ntoa_long+0x98> + 800053f0: 053d0463 beq s10,s3,80005438 <_ntoa_long+0xd8> + 800053f4: 00050d93 mv s11,a0 + 800053f8: 000a8593 mv a1,s5 + 800053fc: 000d8513 mv a0,s11 + 80005400: d90ff0ef jal ra,80004990 <__umoddi3> + 80005404: 0ff57313 andi t1,a0,255 + 80005408: 0303071b addiw a4,t1,48 + 8000540c: 0064033b addw t1,s0,t1 + 80005410: 0ff37313 andi t1,t1,255 + 80005414: 00a96463 bltu s2,a0,8000541c <_ntoa_long+0xbc> + 80005418: 0ff77313 andi t1,a4,255 + 8000541c: 001d0d13 addi s10,s10,1 + 80005420: 01a48733 add a4,s1,s10 + 80005424: 000d8513 mv a0,s11 + 80005428: 000a8593 mv a1,s5 + 8000542c: fe670fa3 sb t1,-1(a4) + 80005430: d18ff0ef jal ra,80004948 <__udivdi3> + 80005434: fb5dfee3 bgeu s11,s5,800053f0 <_ntoa_long+0x90> + 80005438: 0c012703 lw a4,192(sp) + 8000543c: 02813783 ld a5,40(sp) + 80005440: 02013503 ld a0,32(sp) + 80005444: 01413823 sd s4,16(sp) + 80005448: 00e13423 sd a4,8(sp) + 8000544c: 00f13023 sd a5,0(sp) + 80005450: 000a889b sext.w a7,s5 + 80005454: 000c8813 mv a6,s9 + 80005458: 000d0793 mv a5,s10 + 8000545c: 00048713 mv a4,s1 + 80005460: 000c0693 mv a3,s8 + 80005464: 000b8613 mv a2,s7 + 80005468: 000b0593 mv a1,s6 + 8000546c: a5dff0ef jal ra,80004ec8 <_ntoa_format> + 80005470: 0b813083 ld ra,184(sp) + 80005474: 0b013403 ld s0,176(sp) + 80005478: 0a813483 ld s1,168(sp) + 8000547c: 0a013903 ld s2,160(sp) + 80005480: 09813983 ld s3,152(sp) + 80005484: 09013a03 ld s4,144(sp) + 80005488: 08813a83 ld s5,136(sp) + 8000548c: 08013b03 ld s6,128(sp) + 80005490: 07813b83 ld s7,120(sp) + 80005494: 07013c03 ld s8,112(sp) + 80005498: 06813c83 ld s9,104(sp) + 8000549c: 06013d03 ld s10,96(sp) + 800054a0: 05813d83 ld s11,88(sp) + 800054a4: 0c010113 addi sp,sp,192 + 800054a8: 00008067 ret + 800054ac: 04100413 li s0,65 + 800054b0: f29ff06f j 800053d8 <_ntoa_long+0x78> + 800054b4: 00000d13 li s10,0 + 800054b8: 03010493 addi s1,sp,48 + 800054bc: f7dff06f j 80005438 <_ntoa_long+0xd8> + +00000000800054c0 <_ntoa_long_long>: + 800054c0: f4010113 addi sp,sp,-192 + 800054c4: 09413823 sd s4,144(sp) + 800054c8: 09513423 sd s5,136(sp) + 800054cc: 09613023 sd s6,128(sp) + 800054d0: 07713c23 sd s7,120(sp) + 800054d4: 07813823 sd s8,112(sp) + 800054d8: 07913423 sd s9,104(sp) + 800054dc: 05b13c23 sd s11,88(sp) + 800054e0: 0a113c23 sd ra,184(sp) + 800054e4: 0a813823 sd s0,176(sp) + 800054e8: 0a913423 sd s1,168(sp) + 800054ec: 0b213023 sd s2,160(sp) + 800054f0: 09313c23 sd s3,152(sp) + 800054f4: 07a13023 sd s10,96(sp) + 800054f8: 02a13023 sd a0,32(sp) + 800054fc: 03113423 sd a7,40(sp) + 80005500: 0c812a03 lw s4,200(sp) + 80005504: 00070d93 mv s11,a4 + 80005508: 00058b13 mv s6,a1 + 8000550c: 00060b93 mv s7,a2 + 80005510: 00068c13 mv s8,a3 + 80005514: 00078c93 mv s9,a5 + 80005518: 00080a93 mv s5,a6 + 8000551c: 00071863 bnez a4,8000552c <_ntoa_long_long+0x6c> + 80005520: 400a7793 andi a5,s4,1024 + 80005524: fefa7a13 andi s4,s4,-17 + 80005528: 0e079663 bnez a5,80005614 <_ntoa_long_long+0x154> + 8000552c: 020a7793 andi a5,s4,32 + 80005530: 06100413 li s0,97 + 80005534: 0c079c63 bnez a5,8000560c <_ntoa_long_long+0x14c> + 80005538: 00000d13 li s10,0 + 8000553c: 03010493 addi s1,sp,48 + 80005540: 00900913 li s2,9 + 80005544: ff64041b addiw s0,s0,-10 + 80005548: 02000993 li s3,32 + 8000554c: 00c0006f j 80005558 <_ntoa_long_long+0x98> + 80005550: 053d0463 beq s10,s3,80005598 <_ntoa_long_long+0xd8> + 80005554: 00050d93 mv s11,a0 + 80005558: 000a8593 mv a1,s5 + 8000555c: 000d8513 mv a0,s11 + 80005560: c30ff0ef jal ra,80004990 <__umoddi3> + 80005564: 0ff57313 andi t1,a0,255 + 80005568: 0303071b addiw a4,t1,48 + 8000556c: 0064033b addw t1,s0,t1 + 80005570: 0ff37313 andi t1,t1,255 + 80005574: 00a96463 bltu s2,a0,8000557c <_ntoa_long_long+0xbc> + 80005578: 0ff77313 andi t1,a4,255 + 8000557c: 001d0d13 addi s10,s10,1 + 80005580: 01a48733 add a4,s1,s10 + 80005584: 000d8513 mv a0,s11 + 80005588: 000a8593 mv a1,s5 + 8000558c: fe670fa3 sb t1,-1(a4) + 80005590: bb8ff0ef jal ra,80004948 <__udivdi3> + 80005594: fb5dfee3 bgeu s11,s5,80005550 <_ntoa_long_long+0x90> + 80005598: 0c012703 lw a4,192(sp) + 8000559c: 02813783 ld a5,40(sp) + 800055a0: 02013503 ld a0,32(sp) + 800055a4: 01413823 sd s4,16(sp) + 800055a8: 00e13423 sd a4,8(sp) + 800055ac: 00f13023 sd a5,0(sp) + 800055b0: 000a889b sext.w a7,s5 + 800055b4: 000c8813 mv a6,s9 + 800055b8: 000d0793 mv a5,s10 + 800055bc: 00048713 mv a4,s1 + 800055c0: 000c0693 mv a3,s8 + 800055c4: 000b8613 mv a2,s7 + 800055c8: 000b0593 mv a1,s6 + 800055cc: 8fdff0ef jal ra,80004ec8 <_ntoa_format> + 800055d0: 0b813083 ld ra,184(sp) + 800055d4: 0b013403 ld s0,176(sp) + 800055d8: 0a813483 ld s1,168(sp) + 800055dc: 0a013903 ld s2,160(sp) + 800055e0: 09813983 ld s3,152(sp) + 800055e4: 09013a03 ld s4,144(sp) + 800055e8: 08813a83 ld s5,136(sp) + 800055ec: 08013b03 ld s6,128(sp) + 800055f0: 07813b83 ld s7,120(sp) + 800055f4: 07013c03 ld s8,112(sp) + 800055f8: 06813c83 ld s9,104(sp) + 800055fc: 06013d03 ld s10,96(sp) + 80005600: 05813d83 ld s11,88(sp) + 80005604: 0c010113 addi sp,sp,192 + 80005608: 00008067 ret + 8000560c: 04100413 li s0,65 + 80005610: f29ff06f j 80005538 <_ntoa_long_long+0x78> + 80005614: 00000d13 li s10,0 + 80005618: 03010493 addi s1,sp,48 + 8000561c: f7dff06f j 80005598 <_ntoa_long_long+0xd8> + +0000000080005620 <_vsnprintf>: + 80005620: f6010113 addi sp,sp,-160 + 80005624: 08913423 sd s1,136(sp) + 80005628: 09213023 sd s2,128(sp) + 8000562c: 07313c23 sd s3,120(sp) + 80005630: 05713c23 sd s7,88(sp) + 80005634: 05813823 sd s8,80(sp) + 80005638: 08113c23 sd ra,152(sp) + 8000563c: 08813823 sd s0,144(sp) + 80005640: 07413823 sd s4,112(sp) + 80005644: 07513423 sd s5,104(sp) + 80005648: 07613023 sd s6,96(sp) + 8000564c: 05913423 sd s9,72(sp) + 80005650: 05a13023 sd s10,64(sp) + 80005654: 03b13c23 sd s11,56(sp) + 80005658: 00058493 mv s1,a1 + 8000565c: 00060c13 mv s8,a2 + 80005660: 00068b93 mv s7,a3 + 80005664: 00070993 mv s3,a4 + 80005668: 00000917 auipc s2,0x0 + 8000566c: 85c90913 addi s2,s2,-1956 # 80004ec4 <_out_null> + 80005670: 00058463 beqz a1,80005678 <_vsnprintf+0x58> + 80005674: 00050913 mv s2,a0 + 80005678: 000bc503 lbu a0,0(s7) + 8000567c: 00000d13 li s10,0 + 80005680: 66050663 beqz a0,80005cec <_vsnprintf+0x6cc> + 80005684: 000107b7 lui a5,0x10 + 80005688: fff78793 addi a5,a5,-1 # ffff <_entry_offset+0xffff> + 8000568c: 02500a13 li s4,37 + 80005690: 00001417 auipc s0,0x1 + 80005694: 57040413 addi s0,s0,1392 # 80006c00 + 80005698: 00f13c23 sd a5,24(sp) + 8000569c: 0200006f j 800056bc <_vsnprintf+0x9c> + 800056a0: 000d0613 mv a2,s10 + 800056a4: 000c0693 mv a3,s8 + 800056a8: 00048593 mv a1,s1 + 800056ac: 001d0d13 addi s10,s10,1 + 800056b0: 000900e7 jalr s2 + 800056b4: 000bc503 lbu a0,0(s7) + 800056b8: 1c050263 beqz a0,8000587c <_vsnprintf+0x25c> + 800056bc: 001b8b93 addi s7,s7,1 + 800056c0: ff4510e3 bne a0,s4,800056a0 <_vsnprintf+0x80> + 800056c4: 00000593 li a1,0 + 800056c8: 01000813 li a6,16 + 800056cc: 000bc503 lbu a0,0(s7) + 800056d0: 001b8713 addi a4,s7,1 + 800056d4: 00070613 mv a2,a4 + 800056d8: fe05079b addiw a5,a0,-32 + 800056dc: 0ff7f793 andi a5,a5,255 + 800056e0: 00f86c63 bltu a6,a5,800056f8 <_vsnprintf+0xd8> + 800056e4: 00279793 slli a5,a5,0x2 + 800056e8: 008787b3 add a5,a5,s0 + 800056ec: 0007a783 lw a5,0(a5) + 800056f0: 008787b3 add a5,a5,s0 + 800056f4: 00078067 jr a5 + 800056f8: fd05079b addiw a5,a0,-48 + 800056fc: 0ff7f793 andi a5,a5,255 + 80005700: 00900813 li a6,9 + 80005704: 0ef87c63 bgeu a6,a5,800057fc <_vsnprintf+0x1dc> + 80005708: 02a00793 li a5,42 + 8000570c: 20f50463 beq a0,a5,80005914 <_vsnprintf+0x2f4> + 80005710: 000b8613 mv a2,s7 + 80005714: 00000d93 li s11,0 + 80005718: 00070b93 mv s7,a4 + 8000571c: 02e00793 li a5,46 + 80005720: 00000c93 li s9,0 + 80005724: 12f50463 beq a0,a5,8000584c <_vsnprintf+0x22c> + 80005728: f985079b addiw a5,a0,-104 + 8000572c: 0ff7f793 andi a5,a5,255 + 80005730: 01200713 li a4,18 + 80005734: 08f76463 bltu a4,a5,800057bc <_vsnprintf+0x19c> + 80005738: 00001717 auipc a4,0x1 + 8000573c: 50c70713 addi a4,a4,1292 # 80006c44 + 80005740: 00279793 slli a5,a5,0x2 + 80005744: 00e787b3 add a5,a5,a4 + 80005748: 0007a783 lw a5,0(a5) + 8000574c: 00e787b3 add a5,a5,a4 + 80005750: 00078067 jr a5 + 80005754: 0015e593 ori a1,a1,1 + 80005758: 0005859b sext.w a1,a1 + 8000575c: 00070b93 mv s7,a4 + 80005760: f6dff06f j 800056cc <_vsnprintf+0xac> + 80005764: 0025e593 ori a1,a1,2 + 80005768: 0005859b sext.w a1,a1 + 8000576c: 00070b93 mv s7,a4 + 80005770: f5dff06f j 800056cc <_vsnprintf+0xac> + 80005774: 0045e593 ori a1,a1,4 + 80005778: 0005859b sext.w a1,a1 + 8000577c: 00070b93 mv s7,a4 + 80005780: f4dff06f j 800056cc <_vsnprintf+0xac> + 80005784: 0105e593 ori a1,a1,16 + 80005788: 0005859b sext.w a1,a1 + 8000578c: 00070b93 mv s7,a4 + 80005790: f3dff06f j 800056cc <_vsnprintf+0xac> + 80005794: 0085e593 ori a1,a1,8 + 80005798: 0005859b sext.w a1,a1 + 8000579c: 00070b93 mv s7,a4 + 800057a0: f2dff06f j 800056cc <_vsnprintf+0xac> + 800057a4: 00164503 lbu a0,1(a2) + 800057a8: 06800793 li a5,104 + 800057ac: 52f50663 beq a0,a5,80005cd8 <_vsnprintf+0x6b8> + 800057b0: 0805e593 ori a1,a1,128 + 800057b4: 0005859b sext.w a1,a1 + 800057b8: 001b8b93 addi s7,s7,1 + 800057bc: fdb5079b addiw a5,a0,-37 + 800057c0: 0ff7f793 andi a5,a5,255 + 800057c4: 05300713 li a4,83 + 800057c8: ecf76ce3 bltu a4,a5,800056a0 <_vsnprintf+0x80> + 800057cc: 00001717 auipc a4,0x1 + 800057d0: 4c470713 addi a4,a4,1220 # 80006c90 + 800057d4: 00279793 slli a5,a5,0x2 + 800057d8: 00e787b3 add a5,a5,a4 + 800057dc: 0007a783 lw a5,0(a5) + 800057e0: 00e787b3 add a5,a5,a4 + 800057e4: 00078067 jr a5 + 800057e8: 00164503 lbu a0,1(a2) + 800057ec: 1005e593 ori a1,a1,256 + 800057f0: 0005859b sext.w a1,a1 + 800057f4: 001b8b93 addi s7,s7,1 + 800057f8: fc5ff06f j 800057bc <_vsnprintf+0x19c> + 800057fc: 00000d93 li s11,0 + 80005800: 00900813 li a6,9 + 80005804: 0080006f j 8000580c <_vsnprintf+0x1ec> + 80005808: 00170713 addi a4,a4,1 + 8000580c: 002d979b slliw a5,s11,0x2 + 80005810: 01b787bb addw a5,a5,s11 + 80005814: 0017979b slliw a5,a5,0x1 + 80005818: 00a787bb addw a5,a5,a0 + 8000581c: 00074503 lbu a0,0(a4) + 80005820: 000b8893 mv a7,s7 + 80005824: fd078d9b addiw s11,a5,-48 + 80005828: fd05061b addiw a2,a0,-48 + 8000582c: 0ff67613 andi a2,a2,255 + 80005830: 00070b93 mv s7,a4 + 80005834: fcc87ae3 bgeu a6,a2,80005808 <_vsnprintf+0x1e8> + 80005838: 02e00793 li a5,46 + 8000583c: 00070613 mv a2,a4 + 80005840: 00288b93 addi s7,a7,2 + 80005844: 00000c93 li s9,0 + 80005848: eef510e3 bne a0,a5,80005728 <_vsnprintf+0x108> + 8000584c: 00164503 lbu a0,1(a2) + 80005850: 4005e593 ori a1,a1,1024 + 80005854: 00900713 li a4,9 + 80005858: fd05079b addiw a5,a0,-48 + 8000585c: 0ff7f793 andi a5,a5,255 + 80005860: 0005859b sext.w a1,a1 + 80005864: 06f77c63 bgeu a4,a5,800058dc <_vsnprintf+0x2bc> + 80005868: 02a00793 li a5,42 + 8000586c: 32f50e63 beq a0,a5,80005ba8 <_vsnprintf+0x588> + 80005870: 000b8613 mv a2,s7 + 80005874: 001b8b93 addi s7,s7,1 + 80005878: eb1ff06f j 80005728 <_vsnprintf+0x108> + 8000587c: 000d041b sext.w s0,s10 + 80005880: 018d6463 bltu s10,s8,80005888 <_vsnprintf+0x268> + 80005884: fffc0d13 addi s10,s8,-1 + 80005888: 000c0693 mv a3,s8 + 8000588c: 000d0613 mv a2,s10 + 80005890: 00048593 mv a1,s1 + 80005894: 00000513 li a0,0 + 80005898: 000900e7 jalr s2 + 8000589c: 09813083 ld ra,152(sp) + 800058a0: 00040513 mv a0,s0 + 800058a4: 09013403 ld s0,144(sp) + 800058a8: 08813483 ld s1,136(sp) + 800058ac: 08013903 ld s2,128(sp) + 800058b0: 07813983 ld s3,120(sp) + 800058b4: 07013a03 ld s4,112(sp) + 800058b8: 06813a83 ld s5,104(sp) + 800058bc: 06013b03 ld s6,96(sp) + 800058c0: 05813b83 ld s7,88(sp) + 800058c4: 05013c03 ld s8,80(sp) + 800058c8: 04813c83 ld s9,72(sp) + 800058cc: 04013d03 ld s10,64(sp) + 800058d0: 03813d83 ld s11,56(sp) + 800058d4: 0a010113 addi sp,sp,160 + 800058d8: 00008067 ret + 800058dc: 002c979b slliw a5,s9,0x2 + 800058e0: 019788bb addw a7,a5,s9 + 800058e4: 000b8813 mv a6,s7 + 800058e8: 0018989b slliw a7,a7,0x1 + 800058ec: 001b8b93 addi s7,s7,1 + 800058f0: 00a888bb addw a7,a7,a0 + 800058f4: 000bc503 lbu a0,0(s7) + 800058f8: fd088c9b addiw s9,a7,-48 + 800058fc: fd05079b addiw a5,a0,-48 + 80005900: 0ff7f793 andi a5,a5,255 + 80005904: fcf77ce3 bgeu a4,a5,800058dc <_vsnprintf+0x2bc> + 80005908: 000b8613 mv a2,s7 + 8000590c: 00280b93 addi s7,a6,2 + 80005910: e19ff06f j 80005728 <_vsnprintf+0x108> + 80005914: 0009a783 lw a5,0(s3) + 80005918: 00898993 addi s3,s3,8 + 8000591c: 00078d9b sext.w s11,a5 + 80005920: 0007c863 bltz a5,80005930 <_vsnprintf+0x310> + 80005924: 001bc503 lbu a0,1(s7) + 80005928: 002b8b93 addi s7,s7,2 + 8000592c: df1ff06f j 8000571c <_vsnprintf+0xfc> + 80005930: 0025e593 ori a1,a1,2 + 80005934: 001bc503 lbu a0,1(s7) + 80005938: 0005859b sext.w a1,a1 + 8000593c: 40f00dbb negw s11,a5 + 80005940: 002b8b93 addi s7,s7,2 + 80005944: dd9ff06f j 8000571c <_vsnprintf+0xfc> + 80005948: 07800793 li a5,120 + 8000594c: 00898a93 addi s5,s3,8 + 80005950: 56f50063 beq a0,a5,80005eb0 <_vsnprintf+0x890> + 80005954: 05800793 li a5,88 + 80005958: 28f50463 beq a0,a5,80005be0 <_vsnprintf+0x5c0> + 8000595c: 06f00793 li a5,111 + 80005960: 4af50c63 beq a0,a5,80005e18 <_vsnprintf+0x7f8> + 80005964: 06200793 li a5,98 + 80005968: 54f50063 beq a0,a5,80005ea8 <_vsnprintf+0x888> + 8000596c: fef5ff13 andi t5,a1,-17 + 80005970: 4005f793 andi a5,a1,1024 + 80005974: 06900713 li a4,105 + 80005978: 000f0f1b sext.w t5,t5 + 8000597c: 0007879b sext.w a5,a5 + 80005980: 5ae51063 bne a0,a4,80005f20 <_vsnprintf+0x900> + 80005984: 48079663 bnez a5,80005e10 <_vsnprintf+0x7f0> + 80005988: 2005f593 andi a1,a1,512 + 8000598c: 0005879b sext.w a5,a1 + 80005990: 00a00813 li a6,10 + 80005994: 42079663 bnez a5,80005dc0 <_vsnprintf+0x7a0> + 80005998: 100f7793 andi a5,t5,256 + 8000599c: 000f0613 mv a2,t5 + 800059a0: 4e079063 bnez a5,80005e80 <_vsnprintf+0x860> + 800059a4: 040f7713 andi a4,t5,64 + 800059a8: 0009a783 lw a5,0(s3) + 800059ac: 4a071a63 bnez a4,80005e60 <_vsnprintf+0x840> + 800059b0: 08067613 andi a2,a2,128 + 800059b4: 52060a63 beqz a2,80005ee8 <_vsnprintf+0x8c8> + 800059b8: 0107979b slliw a5,a5,0x10 + 800059bc: 4107d79b sraiw a5,a5,0x10 + 800059c0: 40f7d61b sraiw a2,a5,0xf + 800059c4: 00c7c733 xor a4,a5,a2 + 800059c8: 40c7073b subw a4,a4,a2 + 800059cc: 03071713 slli a4,a4,0x30 + 800059d0: 03075713 srli a4,a4,0x30 + 800059d4: 000d0613 mv a2,s10 + 800059d8: 01e13423 sd t5,8(sp) + 800059dc: 01b13023 sd s11,0(sp) + 800059e0: 000c8893 mv a7,s9 + 800059e4: 01f7d79b srliw a5,a5,0x1f + 800059e8: 000c0693 mv a3,s8 + 800059ec: 00048593 mv a1,s1 + 800059f0: 00090513 mv a0,s2 + 800059f4: 96dff0ef jal ra,80005360 <_ntoa_long> + 800059f8: 00050d13 mv s10,a0 + 800059fc: 000a8993 mv s3,s5 + 80005a00: cb5ff06f j 800056b4 <_vsnprintf+0x94> + 80005a04: 00164503 lbu a0,1(a2) + 80005a08: 06c00793 li a5,108 + 80005a0c: def510e3 bne a0,a5,800057ec <_vsnprintf+0x1cc> + 80005a10: 3005e593 ori a1,a1,768 + 80005a14: 00264503 lbu a0,2(a2) + 80005a18: 0005859b sext.w a1,a1 + 80005a1c: 00360b93 addi s7,a2,3 + 80005a20: d9dff06f j 800057bc <_vsnprintf+0x19c> + 80005a24: 00898793 addi a5,s3,8 + 80005a28: 001d0813 addi a6,s10,1 + 80005a2c: 0025f593 andi a1,a1,2 + 80005a30: 02f13023 sd a5,32(sp) + 80005a34: 00080b13 mv s6,a6 + 80005a38: 32058263 beqz a1,80005d5c <_vsnprintf+0x73c> + 80005a3c: 0009c503 lbu a0,0(s3) + 80005a40: 000c0693 mv a3,s8 + 80005a44: 000d0613 mv a2,s10 + 80005a48: 00048593 mv a1,s1 + 80005a4c: 000900e7 jalr s2 + 80005a50: 00100793 li a5,1 + 80005a54: 43b7f063 bgeu a5,s11,80005e74 <_vsnprintf+0x854> + 80005a58: ffed879b addiw a5,s11,-2 + 80005a5c: 02079a93 slli s5,a5,0x20 + 80005a60: 020ada93 srli s5,s5,0x20 + 80005a64: 002d0d13 addi s10,s10,2 + 80005a68: 015d0cb3 add s9,s10,s5 + 80005a6c: 000b0613 mv a2,s6 + 80005a70: 000c0693 mv a3,s8 + 80005a74: 001b0b13 addi s6,s6,1 + 80005a78: 00048593 mv a1,s1 + 80005a7c: 02000513 li a0,32 + 80005a80: 000900e7 jalr s2 + 80005a84: ff6c94e3 bne s9,s6,80005a6c <_vsnprintf+0x44c> + 80005a88: 02013983 ld s3,32(sp) + 80005a8c: 015d0d33 add s10,s10,s5 + 80005a90: c25ff06f j 800056b4 <_vsnprintf+0x94> + 80005a94: 000d0613 mv a2,s10 + 80005a98: 000c0693 mv a3,s8 + 80005a9c: 00048593 mv a1,s1 + 80005aa0: 02500513 li a0,37 + 80005aa4: 001d0d13 addi s10,s10,1 + 80005aa8: 000900e7 jalr s2 + 80005aac: c09ff06f j 800056b4 <_vsnprintf+0x94> + 80005ab0: 0009ba83 ld s5,0(s3) + 80005ab4: 00898793 addi a5,s3,8 + 80005ab8: 02f13023 sd a5,32(sp) + 80005abc: 000ac503 lbu a0,0(s5) + 80005ac0: 100c9663 bnez s9,80005bcc <_vsnprintf+0x5ac> + 80005ac4: ffe00793 li a5,-2 + 80005ac8: 42050863 beqz a0,80005ef8 <_vsnprintf+0x8d8> + 80005acc: 00178693 addi a3,a5,1 + 80005ad0: 00da8633 add a2,s5,a3 + 80005ad4: 000a8793 mv a5,s5 + 80005ad8: 0080006f j 80005ae0 <_vsnprintf+0x4c0> + 80005adc: 1ec78863 beq a5,a2,80005ccc <_vsnprintf+0x6ac> + 80005ae0: 0017c703 lbu a4,1(a5) + 80005ae4: 00178793 addi a5,a5,1 + 80005ae8: fe071ae3 bnez a4,80005adc <_vsnprintf+0x4bc> + 80005aec: 415787bb subw a5,a5,s5 + 80005af0: 00f13823 sd a5,16(sp) + 80005af4: 4005f793 andi a5,a1,1024 + 80005af8: 0007899b sext.w s3,a5 + 80005afc: 00078c63 beqz a5,80005b14 <_vsnprintf+0x4f4> + 80005b00: 01013703 ld a4,16(sp) + 80005b04: 000c879b sext.w a5,s9 + 80005b08: 01977463 bgeu a4,s9,80005b10 <_vsnprintf+0x4f0> + 80005b0c: 0007079b sext.w a5,a4 + 80005b10: 00f13823 sd a5,16(sp) + 80005b14: 0025f593 andi a1,a1,2 + 80005b18: 0005879b sext.w a5,a1 + 80005b1c: 02f13423 sd a5,40(sp) + 80005b20: 1c058a63 beqz a1,80005cf4 <_vsnprintf+0x6d4> + 80005b24: 14050863 beqz a0,80005c74 <_vsnprintf+0x654> + 80005b28: 000d0613 mv a2,s10 + 80005b2c: 00098863 beqz s3,80005b3c <_vsnprintf+0x51c> + 80005b30: fffc879b addiw a5,s9,-1 + 80005b34: 120c8863 beqz s9,80005c64 <_vsnprintf+0x644> + 80005b38: 00078c93 mv s9,a5 + 80005b3c: 000c0693 mv a3,s8 + 80005b40: 00048593 mv a1,s1 + 80005b44: 00160b13 addi s6,a2,1 + 80005b48: 000900e7 jalr s2 + 80005b4c: 41ab07b3 sub a5,s6,s10 + 80005b50: 00fa87b3 add a5,s5,a5 + 80005b54: 0007c503 lbu a0,0(a5) + 80005b58: 10050863 beqz a0,80005c68 <_vsnprintf+0x648> + 80005b5c: 000b0613 mv a2,s6 + 80005b60: fcdff06f j 80005b2c <_vsnprintf+0x50c> + 80005b64: 0009b703 ld a4,0(s3) + 80005b68: 0215e593 ori a1,a1,33 + 80005b6c: 0005859b sext.w a1,a1 + 80005b70: 01000793 li a5,16 + 80005b74: 000d0613 mv a2,s10 + 80005b78: 00b13423 sd a1,8(sp) + 80005b7c: 00f13023 sd a5,0(sp) + 80005b80: 000c8893 mv a7,s9 + 80005b84: 01000813 li a6,16 + 80005b88: 00000793 li a5,0 + 80005b8c: 000c0693 mv a3,s8 + 80005b90: 00048593 mv a1,s1 + 80005b94: 00090513 mv a0,s2 + 80005b98: 929ff0ef jal ra,800054c0 <_ntoa_long_long> + 80005b9c: 00898993 addi s3,s3,8 + 80005ba0: 00050d13 mv s10,a0 + 80005ba4: b11ff06f j 800056b4 <_vsnprintf+0x94> + 80005ba8: 0009a883 lw a7,0(s3) + 80005bac: 00264503 lbu a0,2(a2) + 80005bb0: 00360b93 addi s7,a2,3 + 80005bb4: fff8c793 not a5,a7 + 80005bb8: 43f7d793 srai a5,a5,0x3f + 80005bbc: 00f8fcb3 and s9,a7,a5 + 80005bc0: 00898993 addi s3,s3,8 + 80005bc4: 00260613 addi a2,a2,2 + 80005bc8: b61ff06f j 80005728 <_vsnprintf+0x108> + 80005bcc: 020c9793 slli a5,s9,0x20 + 80005bd0: 0207d793 srli a5,a5,0x20 + 80005bd4: 32050263 beqz a0,80005ef8 <_vsnprintf+0x8d8> + 80005bd8: fff78793 addi a5,a5,-1 + 80005bdc: ef1ff06f j 80005acc <_vsnprintf+0x4ac> + 80005be0: ff35ff13 andi t5,a1,-13 + 80005be4: 000f0f1b sext.w t5,t5 + 80005be8: 4005f793 andi a5,a1,1024 + 80005bec: 020f6f13 ori t5,t5,32 + 80005bf0: 20078863 beqz a5,80005e00 <_vsnprintf+0x7e0> + 80005bf4: 01000813 li a6,16 + 80005bf8: ffef7f13 andi t5,t5,-2 + 80005bfc: 000f0f1b sext.w t5,t5 + 80005c00: 200f7793 andi a5,t5,512 + 80005c04: 06900713 li a4,105 + 80005c08: 0007879b sext.w a5,a5 + 80005c0c: d8e504e3 beq a0,a4,80005994 <_vsnprintf+0x374> + 80005c10: 06400713 li a4,100 + 80005c14: d8e500e3 beq a0,a4,80005994 <_vsnprintf+0x374> + 80005c18: 22079663 bnez a5,80005e44 <_vsnprintf+0x824> + 80005c1c: 100f7793 andi a5,t5,256 + 80005c20: 000f0713 mv a4,t5 + 80005c24: 2a079463 bnez a5,80005ecc <_vsnprintf+0x8ac> + 80005c28: 040f7793 andi a5,t5,64 + 80005c2c: 24079063 bnez a5,80005e6c <_vsnprintf+0x84c> + 80005c30: 08077713 andi a4,a4,128 + 80005c34: 2c070663 beqz a4,80005f00 <_vsnprintf+0x8e0> + 80005c38: 0009a703 lw a4,0(s3) + 80005c3c: 01813783 ld a5,24(sp) + 80005c40: 00e7f733 and a4,a5,a4 + 80005c44: 02071713 slli a4,a4,0x20 + 80005c48: 000d0613 mv a2,s10 + 80005c4c: 01e13423 sd t5,8(sp) + 80005c50: 01b13023 sd s11,0(sp) + 80005c54: 000c8893 mv a7,s9 + 80005c58: 00000793 li a5,0 + 80005c5c: 02075713 srli a4,a4,0x20 + 80005c60: d89ff06f j 800059e8 <_vsnprintf+0x3c8> + 80005c64: 00060b13 mv s6,a2 + 80005c68: 02813783 ld a5,40(sp) + 80005c6c: 04078a63 beqz a5,80005cc0 <_vsnprintf+0x6a0> + 80005c70: 000b0d13 mv s10,s6 + 80005c74: 01013703 ld a4,16(sp) + 80005c78: 0db77e63 bgeu a4,s11,80005d54 <_vsnprintf+0x734> + 80005c7c: fffd879b addiw a5,s11,-1 + 80005c80: 40e7873b subw a4,a5,a4 + 80005c84: 02071713 slli a4,a4,0x20 + 80005c88: 02075713 srli a4,a4,0x20 + 80005c8c: 001d0813 addi a6,s10,1 + 80005c90: 01070b33 add s6,a4,a6 + 80005c94: 0080006f j 80005c9c <_vsnprintf+0x67c> + 80005c98: 00180813 addi a6,a6,1 + 80005c9c: 000d0613 mv a2,s10 + 80005ca0: 01013823 sd a6,16(sp) + 80005ca4: 000c0693 mv a3,s8 + 80005ca8: 00048593 mv a1,s1 + 80005cac: 02000513 li a0,32 + 80005cb0: 00080d13 mv s10,a6 + 80005cb4: 000900e7 jalr s2 + 80005cb8: 01013803 ld a6,16(sp) + 80005cbc: fd0b1ee3 bne s6,a6,80005c98 <_vsnprintf+0x678> + 80005cc0: 02013983 ld s3,32(sp) + 80005cc4: 000b0d13 mv s10,s6 + 80005cc8: 9edff06f j 800056b4 <_vsnprintf+0x94> + 80005ccc: 0006879b sext.w a5,a3 + 80005cd0: 00f13823 sd a5,16(sp) + 80005cd4: e21ff06f j 80005af4 <_vsnprintf+0x4d4> + 80005cd8: 0c05e593 ori a1,a1,192 + 80005cdc: 00264503 lbu a0,2(a2) + 80005ce0: 0005859b sext.w a1,a1 + 80005ce4: 00360b93 addi s7,a2,3 + 80005ce8: ad5ff06f j 800057bc <_vsnprintf+0x19c> + 80005cec: 00000413 li s0,0 + 80005cf0: b91ff06f j 80005880 <_vsnprintf+0x260> + 80005cf4: 01013703 ld a4,16(sp) + 80005cf8: 0017079b addiw a5,a4,1 + 80005cfc: 21b77c63 bgeu a4,s11,80005f14 <_vsnprintf+0x8f4> + 80005d00: fffd879b addiw a5,s11,-1 + 80005d04: 40e787bb subw a5,a5,a4 + 80005d08: 02079793 slli a5,a5,0x20 + 80005d0c: 0207d793 srli a5,a5,0x20 + 80005d10: 001d0813 addi a6,s10,1 + 80005d14: 01078b33 add s6,a5,a6 + 80005d18: 00c0006f j 80005d24 <_vsnprintf+0x704> + 80005d1c: 01013803 ld a6,16(sp) + 80005d20: 00180813 addi a6,a6,1 + 80005d24: 000d0613 mv a2,s10 + 80005d28: 000c0693 mv a3,s8 + 80005d2c: 00080d13 mv s10,a6 + 80005d30: 01013823 sd a6,16(sp) + 80005d34: 00048593 mv a1,s1 + 80005d38: 02000513 li a0,32 + 80005d3c: 000900e7 jalr s2 + 80005d40: fd6d1ee3 bne s10,s6,80005d1c <_vsnprintf+0x6fc> + 80005d44: 000ac503 lbu a0,0(s5) + 80005d48: 001d879b addiw a5,s11,1 + 80005d4c: 00f13823 sd a5,16(sp) + 80005d50: dc051ce3 bnez a0,80005b28 <_vsnprintf+0x508> + 80005d54: 000d0b13 mv s6,s10 + 80005d58: f69ff06f j 80005cc0 <_vsnprintf+0x6a0> + 80005d5c: 00100793 li a5,1 + 80005d60: 1bb7f463 bgeu a5,s11,80005f08 <_vsnprintf+0x8e8> + 80005d64: ffed879b addiw a5,s11,-2 + 80005d68: 02079a93 slli s5,a5,0x20 + 80005d6c: 020ada93 srli s5,s5,0x20 + 80005d70: 010a8ab3 add s5,s5,a6 + 80005d74: 00c0006f j 80005d80 <_vsnprintf+0x760> + 80005d78: 01013803 ld a6,16(sp) + 80005d7c: 00180813 addi a6,a6,1 + 80005d80: 000d0613 mv a2,s10 + 80005d84: 000c0693 mv a3,s8 + 80005d88: 00080d13 mv s10,a6 + 80005d8c: 01013823 sd a6,16(sp) + 80005d90: 00048593 mv a1,s1 + 80005d94: 02000513 li a0,32 + 80005d98: 000900e7 jalr s2 + 80005d9c: fdaa9ee3 bne s5,s10,80005d78 <_vsnprintf+0x758> + 80005da0: 001a8d13 addi s10,s5,1 + 80005da4: 0009c503 lbu a0,0(s3) + 80005da8: 000c0693 mv a3,s8 + 80005dac: 000a8613 mv a2,s5 + 80005db0: 00048593 mv a1,s1 + 80005db4: 000900e7 jalr s2 + 80005db8: 02013983 ld s3,32(sp) + 80005dbc: 8f9ff06f j 800056b4 <_vsnprintf+0x94> + 80005dc0: 0009b783 ld a5,0(s3) + 80005dc4: 000d0613 mv a2,s10 + 80005dc8: 01e13423 sd t5,8(sp) + 80005dcc: 43f7d713 srai a4,a5,0x3f + 80005dd0: 00f745b3 xor a1,a4,a5 + 80005dd4: 01b13023 sd s11,0(sp) + 80005dd8: 000c8893 mv a7,s9 + 80005ddc: 03f7d793 srli a5,a5,0x3f + 80005de0: 40e58733 sub a4,a1,a4 + 80005de4: 000c0693 mv a3,s8 + 80005de8: 00048593 mv a1,s1 + 80005dec: 00090513 mv a0,s2 + 80005df0: ed0ff0ef jal ra,800054c0 <_ntoa_long_long> + 80005df4: 00050d13 mv s10,a0 + 80005df8: 000a8993 mv s3,s5 + 80005dfc: 8b9ff06f j 800056b4 <_vsnprintf+0x94> + 80005e00: 2005f793 andi a5,a1,512 + 80005e04: 0007879b sext.w a5,a5 + 80005e08: 01000813 li a6,16 + 80005e0c: e0dff06f j 80005c18 <_vsnprintf+0x5f8> + 80005e10: 00a00813 li a6,10 + 80005e14: de5ff06f j 80005bf8 <_vsnprintf+0x5d8> + 80005e18: 00800813 li a6,8 + 80005e1c: 00058f13 mv t5,a1 + 80005e20: 400f7713 andi a4,t5,1024 + 80005e24: 06400613 li a2,100 + 80005e28: 000f0793 mv a5,t5 + 80005e2c: 0007071b sext.w a4,a4 + 80005e30: 0ec51c63 bne a0,a2,80005f28 <_vsnprintf+0x908> + 80005e34: dc0712e3 bnez a4,80005bf8 <_vsnprintf+0x5d8> + 80005e38: 2007f793 andi a5,a5,512 + 80005e3c: 0007879b sext.w a5,a5 + 80005e40: b55ff06f j 80005994 <_vsnprintf+0x374> + 80005e44: 0009b703 ld a4,0(s3) + 80005e48: 000d0613 mv a2,s10 + 80005e4c: 01e13423 sd t5,8(sp) + 80005e50: 01b13023 sd s11,0(sp) + 80005e54: 000c8893 mv a7,s9 + 80005e58: 00000793 li a5,0 + 80005e5c: f89ff06f j 80005de4 <_vsnprintf+0x7c4> + 80005e60: 0ff7f793 andi a5,a5,255 + 80005e64: 00078713 mv a4,a5 + 80005e68: b6dff06f j 800059d4 <_vsnprintf+0x3b4> + 80005e6c: 0009c703 lbu a4,0(s3) + 80005e70: dd5ff06f j 80005c44 <_vsnprintf+0x624> + 80005e74: 02013983 ld s3,32(sp) + 80005e78: 000b0d13 mv s10,s6 + 80005e7c: 839ff06f j 800056b4 <_vsnprintf+0x94> + 80005e80: 0009b783 ld a5,0(s3) + 80005e84: 000d0613 mv a2,s10 + 80005e88: 01e13423 sd t5,8(sp) + 80005e8c: 43f7d713 srai a4,a5,0x3f + 80005e90: 00f745b3 xor a1,a4,a5 + 80005e94: 01b13023 sd s11,0(sp) + 80005e98: 000c8893 mv a7,s9 + 80005e9c: 03f7d793 srli a5,a5,0x3f + 80005ea0: 40e58733 sub a4,a1,a4 + 80005ea4: b45ff06f j 800059e8 <_vsnprintf+0x3c8> + 80005ea8: 00200813 li a6,2 + 80005eac: f71ff06f j 80005e1c <_vsnprintf+0x7fc> + 80005eb0: 4005f713 andi a4,a1,1024 + 80005eb4: 0007071b sext.w a4,a4 + 80005eb8: 01000813 li a6,16 + 80005ebc: ff35f593 andi a1,a1,-13 + 80005ec0: 00058f1b sext.w t5,a1 + 80005ec4: d2071ae3 bnez a4,80005bf8 <_vsnprintf+0x5d8> + 80005ec8: d39ff06f j 80005c00 <_vsnprintf+0x5e0> + 80005ecc: 0009b703 ld a4,0(s3) + 80005ed0: 000d0613 mv a2,s10 + 80005ed4: 01e13423 sd t5,8(sp) + 80005ed8: 01b13023 sd s11,0(sp) + 80005edc: 000c8893 mv a7,s9 + 80005ee0: 00000793 li a5,0 + 80005ee4: b05ff06f j 800059e8 <_vsnprintf+0x3c8> + 80005ee8: 41f7d61b sraiw a2,a5,0x1f + 80005eec: 00c7c733 xor a4,a5,a2 + 80005ef0: 40c7073b subw a4,a4,a2 + 80005ef4: ae1ff06f j 800059d4 <_vsnprintf+0x3b4> + 80005ef8: 00013823 sd zero,16(sp) + 80005efc: bf9ff06f j 80005af4 <_vsnprintf+0x4d4> + 80005f00: 0009a703 lw a4,0(s3) + 80005f04: d41ff06f j 80005c44 <_vsnprintf+0x624> + 80005f08: 000d0a93 mv s5,s10 + 80005f0c: 00080d13 mv s10,a6 + 80005f10: e95ff06f j 80005da4 <_vsnprintf+0x784> + 80005f14: 00f13823 sd a5,16(sp) + 80005f18: c00518e3 bnez a0,80005b28 <_vsnprintf+0x508> + 80005f1c: e39ff06f j 80005d54 <_vsnprintf+0x734> + 80005f20: 00a00813 li a6,10 + 80005f24: efdff06f j 80005e20 <_vsnprintf+0x800> + 80005f28: 000f0593 mv a1,t5 + 80005f2c: f91ff06f j 80005ebc <_vsnprintf+0x89c> + +0000000080005f30 <_out_char>: + 80005f30: 00051463 bnez a0,80005f38 <_out_char+0x8> + 80005f34: 00008067 ret + 80005f38: 951fe06f j 80004888 + +0000000080005f3c : + 80005f3c: fa010113 addi sp,sp,-96 + 80005f40: 02810313 addi t1,sp,40 + 80005f44: 02b13423 sd a1,40(sp) + 80005f48: 02c13823 sd a2,48(sp) + 80005f4c: 02d13c23 sd a3,56(sp) + 80005f50: 04e13023 sd a4,64(sp) + 80005f54: 00050693 mv a3,a0 + 80005f58: 00010593 mv a1,sp + 80005f5c: 00030713 mv a4,t1 + 80005f60: fff00613 li a2,-1 + 80005f64: 00000517 auipc a0,0x0 + 80005f68: fcc50513 addi a0,a0,-52 # 80005f30 <_out_char> + 80005f6c: 00113c23 sd ra,24(sp) + 80005f70: 04f13423 sd a5,72(sp) + 80005f74: 05013823 sd a6,80(sp) + 80005f78: 05113c23 sd a7,88(sp) + 80005f7c: 00613423 sd t1,8(sp) + 80005f80: ea0ff0ef jal ra,80005620 <_vsnprintf> + 80005f84: 01813083 ld ra,24(sp) + 80005f88: 06010113 addi sp,sp,96 + 80005f8c: 00008067 ret + +0000000080005f90 : + 80005f90: fb010113 addi sp,sp,-80 + 80005f94: 02010313 addi t1,sp,32 + 80005f98: 02c13023 sd a2,32(sp) + 80005f9c: 02d13423 sd a3,40(sp) + 80005fa0: 02e13823 sd a4,48(sp) + 80005fa4: 00058693 mv a3,a1 + 80005fa8: 00030713 mv a4,t1 + 80005fac: 00050593 mv a1,a0 + 80005fb0: fff00613 li a2,-1 + 80005fb4: fffff517 auipc a0,0xfffff + 80005fb8: f0050513 addi a0,a0,-256 # 80004eb4 <_out_buffer> + 80005fbc: 00113c23 sd ra,24(sp) + 80005fc0: 02f13c23 sd a5,56(sp) + 80005fc4: 05013023 sd a6,64(sp) + 80005fc8: 05113423 sd a7,72(sp) + 80005fcc: 00613423 sd t1,8(sp) + 80005fd0: e50ff0ef jal ra,80005620 <_vsnprintf> + 80005fd4: 01813083 ld ra,24(sp) + 80005fd8: 05010113 addi sp,sp,80 + 80005fdc: 00008067 ret + +0000000080005fe0 : + 80005fe0: 00700713 li a4,7 + 80005fe4: 00050793 mv a5,a0 + 80005fe8: 0ac77a63 bgeu a4,a2,8000609c + 80005fec: 0ff5f893 andi a7,a1,255 + 80005ff0: 00889693 slli a3,a7,0x8 + 80005ff4: 0116e6b3 or a3,a3,a7 + 80005ff8: 01069713 slli a4,a3,0x10 + 80005ffc: 00d766b3 or a3,a4,a3 + 80006000: 02069713 slli a4,a3,0x20 + 80006004: 00757813 andi a6,a0,7 + 80006008: 00d76733 or a4,a4,a3 + 8000600c: 0a080663 beqz a6,800060b8 + 80006010: 00c50633 add a2,a0,a2 + 80006014: 01178023 sb a7,0(a5) + 80006018: 00178793 addi a5,a5,1 + 8000601c: 0077f813 andi a6,a5,7 + 80006020: 40f606b3 sub a3,a2,a5 + 80006024: fe0818e3 bnez a6,80006014 + 80006028: 0066d813 srli a6,a3,0x6 + 8000602c: 04080063 beqz a6,8000606c + 80006030: 00681613 slli a2,a6,0x6 + 80006034: 00078893 mv a7,a5 + 80006038: 00f60633 add a2,a2,a5 + 8000603c: 00e7b023 sd a4,0(a5) + 80006040: 00e7b423 sd a4,8(a5) + 80006044: 00e7b823 sd a4,16(a5) + 80006048: 00e7bc23 sd a4,24(a5) + 8000604c: 02e7b023 sd a4,32(a5) + 80006050: 02e7b423 sd a4,40(a5) + 80006054: 02e7b823 sd a4,48(a5) + 80006058: 02e7bc23 sd a4,56(a5) + 8000605c: 04078793 addi a5,a5,64 + 80006060: fcf61ee3 bne a2,a5,8000603c + 80006064: 00681793 slli a5,a6,0x6 + 80006068: 011787b3 add a5,a5,a7 + 8000606c: 0036d813 srli a6,a3,0x3 + 80006070: 00787813 andi a6,a6,7 + 80006074: 02080263 beqz a6,80006098 + 80006078: 00381613 slli a2,a6,0x3 + 8000607c: 00078893 mv a7,a5 + 80006080: 00f60633 add a2,a2,a5 + 80006084: 00e7b023 sd a4,0(a5) + 80006088: 00878793 addi a5,a5,8 + 8000608c: fef61ce3 bne a2,a5,80006084 + 80006090: 00381793 slli a5,a6,0x3 + 80006094: 011787b3 add a5,a5,a7 + 80006098: 0076f613 andi a2,a3,7 + 8000609c: 0ff5f593 andi a1,a1,255 + 800060a0: 00c78733 add a4,a5,a2 + 800060a4: 00060863 beqz a2,800060b4 + 800060a8: 00b78023 sb a1,0(a5) + 800060ac: 00178793 addi a5,a5,1 + 800060b0: fef71ce3 bne a4,a5,800060a8 + 800060b4: 00008067 ret + 800060b8: 00060693 mv a3,a2 + 800060bc: f6dff06f j 80006028 + +00000000800060c0 : + 800060c0: 1a050e63 beqz a0,8000627c + 800060c4: fd010113 addi sp,sp,-48 + 800060c8: 02813023 sd s0,32(sp) + 800060cc: 00913c23 sd s1,24(sp) + 800060d0: 01f57793 andi a5,a0,31 + 800060d4: 02113423 sd ra,40(sp) + 800060d8: 01213823 sd s2,16(sp) + 800060dc: 01313423 sd s3,8(sp) + 800060e0: 01413023 sd s4,0(sp) + 800060e4: 00050493 mv s1,a0 + 800060e8: 00050413 mv s0,a0 + 800060ec: 00000513 li a0,0 + 800060f0: 14079a63 bnez a5,80006244 + 800060f4: 27f00713 li a4,639 + 800060f8: 00058913 mv s2,a1 + 800060fc: 00078513 mv a0,a5 + 80006100: 14b77263 bgeu a4,a1,80006244 + 80006104: 0074f513 andi a0,s1,7 + 80006108: 00153513 seqz a0,a0 + 8000610c: 00060a13 mv s4,a2 + 80006110: 00068993 mv s3,a3 + 80006114: f8cfe0ef jal ra,800048a0 <_assert> + 80006118: 20048793 addi a5,s1,512 + 8000611c: 2004b023 sd zero,512(s1) + 80006120: 2144b423 sd s4,520(s1) + 80006124: 2134b823 sd s3,528(s1) + 80006128: 00043023 sd zero,0(s0) + 8000612c: 00840413 addi s0,s0,8 + 80006130: fe879ce3 bne a5,s0,80006128 + 80006134: fff00793 li a5,-1 + 80006138: dc090413 addi s0,s2,-576 + 8000613c: 03f79793 slli a5,a5,0x3f + 80006140: 1287f863 bgeu a5,s0,80006270 + 80006144: 00078413 mv s0,a5 + 80006148: 00100513 li a0,1 + 8000614c: f54fe0ef jal ra,800048a0 <_assert> + 80006150: f8300793 li a5,-125 + 80006154: 0017d793 srli a5,a5,0x1 + 80006158: fc040513 addi a0,s0,-64 + 8000615c: 00f53533 sltu a0,a0,a5 + 80006160: f40fe0ef jal ra,800048a0 <_assert> + 80006164: 01f4f513 andi a0,s1,31 + 80006168: 00153513 seqz a0,a0 + 8000616c: f34fe0ef jal ra,800048a0 <_assert> + 80006170: 00100513 li a0,1 + 80006174: 2404b023 sd zero,576(s1) + 80006178: 2404b423 sd zero,584(s1) + 8000617c: 2484b823 sd s0,592(s1) + 80006180: 24048c23 sb zero,600(s1) + 80006184: 2604b023 sd zero,608(s1) + 80006188: 2604b423 sd zero,616(s1) + 8000618c: f14fe0ef jal ra,800048a0 <_assert> + 80006190: 00100513 li a0,1 + 80006194: f0cfe0ef jal ra,800048a0 <_assert> + 80006198: 2504b503 ld a0,592(s1) + 8000619c: 24048a13 addi s4,s1,576 + 800061a0: 04053513 sltiu a0,a0,64 + 800061a4: 00154513 xori a0,a0,1 + 800061a8: 00157513 andi a0,a0,1 + 800061ac: ef4fe0ef jal ra,800048a0 <_assert> + 800061b0: 2504b503 ld a0,592(s1) + 800061b4: 03f57513 andi a0,a0,63 + 800061b8: 00153513 seqz a0,a0 + 800061bc: ee4fe0ef jal ra,800048a0 <_assert> + 800061c0: 2504b703 ld a4,592(s1) + 800061c4: 00100793 li a5,1 + 800061c8: 00675713 srli a4,a4,0x6 + 800061cc: 0ae7fc63 bgeu a5,a4,80006284 + 800061d0: 00000793 li a5,0 + 800061d4: 00100693 li a3,1 + 800061d8: 0017879b addiw a5,a5,1 + 800061dc: 00175713 srli a4,a4,0x1 + 800061e0: 0ff7f793 andi a5,a5,255 + 800061e4: fed71ae3 bne a4,a3,800061d8 + 800061e8: 00078993 mv s3,a5 + 800061ec: 0407b513 sltiu a0,a5,64 + 800061f0: 00f71933 sll s2,a4,a5 + 800061f4: eacfe0ef jal ra,800048a0 <_assert> + 800061f8: 00399793 slli a5,s3,0x3 + 800061fc: 00f487b3 add a5,s1,a5 + 80006200: 0007b703 ld a4,0(a5) + 80006204: 2604b423 sd zero,616(s1) + 80006208: 26e4b023 sd a4,608(s1) + 8000620c: 00070463 beqz a4,80006214 + 80006210: 03473423 sd s4,40(a4) + 80006214: 0147b023 sd s4,0(a5) + 80006218: 2004b503 ld a0,512(s1) + 8000621c: 00a96533 or a0,s2,a0 + 80006220: 20a4b023 sd a0,512(s1) + 80006224: 00a03533 snez a0,a0 + 80006228: e78fe0ef jal ra,800048a0 <_assert> + 8000622c: 00048513 mv a0,s1 + 80006230: 2084bc23 sd s0,536(s1) + 80006234: 2204b023 sd zero,544(s1) + 80006238: 2204b423 sd zero,552(s1) + 8000623c: 2204b823 sd zero,560(s1) + 80006240: 2204bc23 sd zero,568(s1) + 80006244: 02813083 ld ra,40(sp) + 80006248: 02013403 ld s0,32(sp) + 8000624c: 01813483 ld s1,24(sp) + 80006250: 01013903 ld s2,16(sp) + 80006254: 00813983 ld s3,8(sp) + 80006258: 00013a03 ld s4,0(sp) + 8000625c: 03010113 addi sp,sp,48 + 80006260: 00008067 ret + 80006264: 00100513 li a0,1 + 80006268: fff40413 addi s0,s0,-1 + 8000626c: e34fe0ef jal ra,800048a0 <_assert> + 80006270: 03f47793 andi a5,s0,63 + 80006274: fe0798e3 bnez a5,80006264 + 80006278: ed1ff06f j 80006148 + 8000627c: 00000513 li a0,0 + 80006280: 00008067 ret + 80006284: 00100913 li s2,1 + 80006288: 00000993 li s3,0 + 8000628c: 00100513 li a0,1 + 80006290: f65ff06f j 800061f4 diff --git a/bin/custom-output/benchmark/microbench/microbench-test.elf b/bin/custom-output/benchmark/microbench/microbench-test.elf new file mode 100755 index 0000000000000000000000000000000000000000..7661ce0a673557c906828cc50ab783d5447d6459 GIT binary patch literal 256912 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

$ZqMJzc~4XR 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: + 80000000: 00000413 li s0,0 + 80000004: 00010117 auipc sp,0x10 + 80000008: ffc10113 addi sp,sp,-4 # 80010000 <_end> + 8000000c: 0ad040ef jal ra,800048b8 <_trm_init> + +0000000080000010 : + 80000010: fd010113 addi sp,sp,-48 + 80000014: 3e800593 li a1,1000 + 80000018: 02813023 sd s0,32(sp) + 8000001c: 02113423 sd ra,40(sp) + 80000020: 00050413 mv s0,a0 + 80000024: 00913c23 sd s1,24(sp) + 80000028: 01213823 sd s2,16(sp) + 8000002c: 01313423 sd s3,8(sp) + 80000030: 119040ef jal ra,80004948 <__udivdi3> + 80000034: 0055179b slliw a5,a0,0x5 + 80000038: 40a787bb subw a5,a5,a0 + 8000003c: 0027979b slliw a5,a5,0x2 + 80000040: 00a787bb addw a5,a5,a0 + 80000044: 0037979b slliw a5,a5,0x3 + 80000048: 02079793 slli a5,a5,0x20 + 8000004c: 0207d793 srli a5,a5,0x20 + 80000050: 40f40433 sub s0,s0,a5 + 80000054: 3e700793 li a5,999 + 80000058: 0887e263 bltu a5,s0,800000dc + 8000005c: 00008497 auipc s1,0x8 + 80000060: 93c48493 addi s1,s1,-1732 # 80007998 + 80000064: 0005061b sext.w a2,a0 + 80000068: 00006597 auipc a1,0x6 + 8000006c: 29058593 addi a1,a1,656 # 800062f8 <_etext+0x64> + 80000070: 00048513 mv a0,s1 + 80000074: 71d050ef jal ra,80005f90 + 80000078: fff5051b addiw a0,a0,-1 + 8000007c: 00a484b3 add s1,s1,a0 + 80000080: 02040c63 beqz s0,800000b8 + 80000084: 00900993 li s3,9 + 80000088: 00a00593 li a1,10 + 8000008c: 00040513 mv a0,s0 + 80000090: 101040ef jal ra,80004990 <__umoddi3> + 80000094: 0305079b addiw a5,a0,48 + 80000098: 00f48023 sb a5,0(s1) + 8000009c: 00040513 mv a0,s0 + 800000a0: 00a00593 li a1,10 + 800000a4: 00040913 mv s2,s0 + 800000a8: 0a1040ef jal ra,80004948 <__udivdi3> + 800000ac: fff48493 addi s1,s1,-1 + 800000b0: 00050413 mv s0,a0 + 800000b4: fd29eae3 bltu s3,s2,80000088 + 800000b8: 02813083 ld ra,40(sp) + 800000bc: 02013403 ld s0,32(sp) + 800000c0: 01813483 ld s1,24(sp) + 800000c4: 01013903 ld s2,16(sp) + 800000c8: 00813983 ld s3,8(sp) + 800000cc: 00008517 auipc a0,0x8 + 800000d0: 8cc50513 addi a0,a0,-1844 # 80007998 + 800000d4: 03010113 addi sp,sp,48 + 800000d8: 00008067 ret + 800000dc: 01100613 li a2,17 + 800000e0: 00006597 auipc a1,0x6 + 800000e4: 1b858593 addi a1,a1,440 # 80006298 <_etext+0x4> + 800000e8: 00006517 auipc a0,0x6 + 800000ec: 1f050513 addi a0,a0,496 # 800062d8 <_etext+0x44> + 800000f0: 64d050ef jal ra,80005f3c + 800000f4: 00100513 li a0,1 + 800000f8: 79c040ef jal ra,80004894 + +00000000800000fc

: + 800000fc: f5010113 addi sp,sp,-176 + 80000100: 0a113423 sd ra,168(sp) + 80000104: 0a813023 sd s0,160(sp) + 80000108: 08913c23 sd s1,152(sp) + 8000010c: 09213823 sd s2,144(sp) + 80000110: 09313423 sd s3,136(sp) + 80000114: 09413023 sd s4,128(sp) + 80000118: 07513c23 sd s5,120(sp) + 8000011c: 07613823 sd s6,112(sp) + 80000120: 07713423 sd s7,104(sp) + 80000124: 07813023 sd s8,96(sp) + 80000128: 05913c23 sd s9,88(sp) + 8000012c: 05a13823 sd s10,80(sp) + 80000130: 05b13423 sd s11,72(sp) + 80000134: 30050c63 beqz a0,8000044c + 80000138: 00006597 auipc a1,0x6 + 8000013c: 29058593 addi a1,a1,656 # 800063c8 <_etext+0x134> + 80000140: 00050413 mv s0,a0 + 80000144: 50d040ef jal ra,80004e50 + 80000148: 30050263 beqz a0,8000044c + 8000014c: 00006597 auipc a1,0x6 + 80000150: 1f458593 addi a1,a1,500 # 80006340 <_etext+0xac> + 80000154: 00040513 mv a0,s0 + 80000158: 4f9040ef jal ra,80004e50 + 8000015c: 00a13423 sd a0,8(sp) + 80000160: 02050063 beqz a0,80000180 + 80000164: 00006597 auipc a1,0x6 + 80000168: 1e458593 addi a1,a1,484 # 80006348 <_etext+0xb4> + 8000016c: 00040513 mv a0,s0 + 80000170: 4e1040ef jal ra,80004e50 + 80000174: 00100793 li a5,1 + 80000178: 00f13423 sd a5,8(sp) + 8000017c: 34051663 bnez a0,800004c8 + 80000180: 105040ef jal ra,80004a84 + 80000184: 00040593 mv a1,s0 + 80000188: 00006517 auipc a0,0x6 + 8000018c: 21050513 addi a0,a0,528 # 80006398 <_etext+0x104> + 80000190: 5ad050ef jal ra,80005f3c + 80000194: 03810593 addi a1,sp,56 + 80000198: 00600513 li a0,6 + 8000019c: 13d040ef jal ra,80004ad8 + 800001a0: 00813783 ld a5,8(sp) + 800001a4: 00007c17 auipc s8,0x7 + 800001a8: c4cc0c13 addi s8,s8,-948 # 80006df0 + 800001ac: 00007b97 auipc s7,0x7 + 800001b0: 2d4b8b93 addi s7,s7,724 # 80007480 + 800001b4: 00178993 addi s3,a5,1 + 800001b8: 03813783 ld a5,56(sp) + 800001bc: 00599993 slli s3,s3,0x5 + 800001c0: fe098b13 addi s6,s3,-32 + 800001c4: 02f13423 sd a5,40(sp) + 800001c8: 00100793 li a5,1 + 800001cc: 00000d93 li s11,0 + 800001d0: 00f13c23 sd a5,24(sp) + 800001d4: 02013023 sd zero,32(sp) + 800001d8: 00008497 auipc s1,0x8 + 800001dc: 8f048493 addi s1,s1,-1808 # 80007ac8 + 800001e0: 00008a97 auipc s5,0x8 + 800001e4: 8f0a8a93 addi s5,s5,-1808 # 80007ad0 + 800001e8: 00898993 addi s3,s3,8 + 800001ec: 00007417 auipc s0,0x7 + 800001f0: 39c40413 addi s0,s0,924 # 80007588 + 800001f4: 00006a17 auipc s4,0x6 + 800001f8: 1dca0a13 addi s4,s4,476 # 800063d0 <_etext+0x13c> + 800001fc: 00006d17 auipc s10,0x6 + 80000200: 1e4d0d13 addi s10,s10,484 # 800063e0 <_etext+0x14c> + 80000204: 00006c97 auipc s9,0x6 + 80000208: 1f4c8c93 addi s9,s9,500 # 800063f8 <_etext+0x164> + 8000020c: 01c0006f j 80000228 + 80000210: 52d050ef jal ra,80005f3c + 80000214: 000d0593 mv a1,s10 + 80000218: 000c8513 mv a0,s9 + 8000021c: 0a8c0c13 addi s8,s8,168 + 80000220: 51d050ef jal ra,80005f3c + 80000224: 137c0a63 beq s8,s7,80000358 + 80000228: 00043603 ld a2,0(s0) + 8000022c: 00843703 ld a4,8(s0) + 80000230: 016c06b3 add a3,s8,s6 + 80000234: 0306b683 ld a3,48(a3) + 80000238: 018985b3 add a1,s3,s8 + 8000023c: 00bab023 sd a1,0(s5) + 80000240: 40c70733 sub a4,a4,a2 + 80000244: 0184b023 sd s8,0(s1) + 80000248: 018c3583 ld a1,24(s8) + 8000024c: 020c3603 ld a2,32(s8) + 80000250: 000a0513 mv a0,s4 + 80000254: fad76ee3 bltu a4,a3,80000210 + 80000258: 4e5050ef jal ra,80005f3c + 8000025c: 0004b683 ld a3,0(s1) + 80000260: 00043703 ld a4,0(s0) + 80000264: 00007797 auipc a5,0x7 + 80000268: 75478793 addi a5,a5,1876 # 800079b8 + 8000026c: 0006b683 ld a3,0(a3) + 80000270: 00770713 addi a4,a4,7 + 80000274: ff877713 andi a4,a4,-8 + 80000278: 00e7b023 sd a4,0(a5) + 8000027c: 000680e7 jalr a3 + 80000280: 03810593 addi a1,sp,56 + 80000284: 00600513 li a0,6 + 80000288: 051040ef jal ra,80004ad8 + 8000028c: 0004b703 ld a4,0(s1) + 80000290: 03813903 ld s2,56(sp) + 80000294: 00873703 ld a4,8(a4) + 80000298: 000700e7 jalr a4 + 8000029c: 03810593 addi a1,sp,56 + 800002a0: 00600513 li a0,6 + 800002a4: 035040ef jal ra,80004ad8 + 800002a8: 0004b703 ld a4,0(s1) + 800002ac: 03813683 ld a3,56(sp) + 800002b0: 01073703 ld a4,16(a4) + 800002b4: 41268933 sub s2,a3,s2 + 800002b8: 000700e7 jalr a4 + 800002bc: 1c050663 beqz a0,80000488 + 800002c0: 00a13823 sd a0,16(sp) + 800002c4: 00006517 auipc a0,0x6 + 800002c8: 14450513 addi a0,a0,324 # 80006408 <_etext+0x174> + 800002cc: 471050ef jal ra,80005f3c + 800002d0: 01013703 ld a4,16(sp) + 800002d4: 00177713 andi a4,a4,1 + 800002d8: 1a070e63 beqz a4,80000494 + 800002dc: 00006517 auipc a0,0x6 + 800002e0: 13450513 addi a0,a0,308 # 80006410 <_etext+0x17c> + 800002e4: 459050ef jal ra,80005f3c + 800002e8: 00013823 sd zero,16(sp) + 800002ec: 04090663 beqz s2,80000338 + 800002f0: 000ab703 ld a4,0(s5) + 800002f4: 00090593 mv a1,s2 + 800002f8: 01073683 ld a3,16(a4) + 800002fc: 00169713 slli a4,a3,0x1 + 80000300: 00d70733 add a4,a4,a3 + 80000304: 00671513 slli a0,a4,0x6 + 80000308: 00a70533 add a0,a4,a0 + 8000030c: 00251513 slli a0,a0,0x2 + 80000310: 00d50533 add a0,a0,a3 + 80000314: 00251513 slli a0,a0,0x2 + 80000318: 00d50533 add a0,a0,a3 + 8000031c: 00551513 slli a0,a0,0x5 + 80000320: 628040ef jal ra,80004948 <__udivdi3> + 80000324: 0005079b sext.w a5,a0 + 80000328: 00f13823 sd a5,16(sp) + 8000032c: 02013783 ld a5,32(sp) + 80000330: 00f507bb addw a5,a0,a5 + 80000334: 02f13023 sd a5,32(sp) + 80000338: 00006517 auipc a0,0x6 + 8000033c: 16850513 addi a0,a0,360 # 800064a0 <_etext+0x20c> + 80000340: 3fd050ef jal ra,80005f3c + 80000344: 00813783 ld a5,8(sp) + 80000348: 10079e63 bnez a5,80000464 + 8000034c: 012d8db3 add s11,s11,s2 + 80000350: 0a8c0c13 addi s8,s8,168 + 80000354: ed7c1ae3 bne s8,s7,80000228 + 80000358: 03810593 addi a1,sp,56 + 8000035c: 00600513 li a0,6 + 80000360: 778040ef jal ra,80004ad8 + 80000364: 02813783 ld a5,40(sp) + 80000368: 03813403 ld s0,56(sp) + 8000036c: 00006517 auipc a0,0x6 + 80000370: 0dc50513 addi a0,a0,220 # 80006448 <_etext+0x1b4> + 80000374: 40f40433 sub s0,s0,a5 + 80000378: 3c5050ef jal ra,80005f3c + 8000037c: 01813783 ld a5,24(sp) + 80000380: 00006597 auipc a1,0x6 + 80000384: f8858593 addi a1,a1,-120 # 80006308 <_etext+0x74> + 80000388: 12078263 beqz a5,800004ac + 8000038c: 00006517 auipc a0,0x6 + 80000390: 0f450513 addi a0,a0,244 # 80006480 <_etext+0x1ec> + 80000394: 3a9050ef jal ra,80005f3c + 80000398: 00813703 ld a4,8(sp) + 8000039c: 00100793 li a5,1 + 800003a0: 10e7dc63 bge a5,a4,800004b8 + 800003a4: 02016503 lwu a0,32(sp) + 800003a8: 00a00593 li a1,10 + 800003ac: 59c040ef jal ra,80004948 <__udivdi3> + 800003b0: 0005059b sext.w a1,a0 + 800003b4: 00006517 auipc a0,0x6 + 800003b8: 0dc50513 addi a0,a0,220 # 80006490 <_etext+0x1fc> + 800003bc: 381050ef jal ra,80005f3c + 800003c0: 000185b7 lui a1,0x18 + 800003c4: 00006617 auipc a2,0x6 + 800003c8: 0e460613 addi a2,a2,228 # 800064a8 <_etext+0x214> + 800003cc: 6a058593 addi a1,a1,1696 # 186a0 <_entry_offset+0x186a0> + 800003d0: 00006517 auipc a0,0x6 + 800003d4: 0f050513 addi a0,a0,240 # 800064c0 <_etext+0x22c> + 800003d8: 365050ef jal ra,80005f3c + 800003dc: 000d8513 mv a0,s11 + 800003e0: c31ff0ef jal ra,80000010 + 800003e4: 00050593 mv a1,a0 + 800003e8: 00006517 auipc a0,0x6 + 800003ec: 10050513 addi a0,a0,256 # 800064e8 <_etext+0x254> + 800003f0: 34d050ef jal ra,80005f3c + 800003f4: 00040513 mv a0,s0 + 800003f8: c19ff0ef jal ra,80000010 + 800003fc: 00050593 mv a1,a0 + 80000400: 00006517 auipc a0,0x6 + 80000404: 10050513 addi a0,a0,256 # 80006500 <_etext+0x26c> + 80000408: 335050ef jal ra,80005f3c + 8000040c: 0a813083 ld ra,168(sp) + 80000410: 0a013403 ld s0,160(sp) + 80000414: 09813483 ld s1,152(sp) + 80000418: 09013903 ld s2,144(sp) + 8000041c: 08813983 ld s3,136(sp) + 80000420: 08013a03 ld s4,128(sp) + 80000424: 07813a83 ld s5,120(sp) + 80000428: 07013b03 ld s6,112(sp) + 8000042c: 06813b83 ld s7,104(sp) + 80000430: 06013c03 ld s8,96(sp) + 80000434: 05813c83 ld s9,88(sp) + 80000438: 05013d03 ld s10,80(sp) + 8000043c: 04813d83 ld s11,72(sp) + 80000440: 00000513 li a0,0 + 80000444: 0b010113 addi sp,sp,176 + 80000448: 00008067 ret + 8000044c: 00006517 auipc a0,0x6 + 80000450: ecc50513 addi a0,a0,-308 # 80006318 <_etext+0x84> + 80000454: 2e9050ef jal ra,80005f3c + 80000458: 00006417 auipc s0,0x6 + 8000045c: ea840413 addi s0,s0,-344 # 80006300 <_etext+0x6c> + 80000460: cedff06f j 8000014c + 80000464: 00090513 mv a0,s2 + 80000468: ba9ff0ef jal ra,80000010 + 8000046c: 01013603 ld a2,16(sp) + 80000470: 00050593 mv a1,a0 + 80000474: 00006517 auipc a0,0x6 + 80000478: fbc50513 addi a0,a0,-68 # 80006430 <_etext+0x19c> + 8000047c: 2c1050ef jal ra,80005f3c + 80000480: 012d8db3 add s11,s11,s2 + 80000484: ecdff06f j 80000350 + 80000488: 00006517 auipc a0,0x6 + 8000048c: 09050513 addi a0,a0,144 # 80006518 <_etext+0x284> + 80000490: 2ad050ef jal ra,80005f3c + 80000494: 00006517 auipc a0,0x6 + 80000498: f8c50513 addi a0,a0,-116 # 80006420 <_etext+0x18c> + 8000049c: 2a1050ef jal ra,80005f3c + 800004a0: 00013c23 sd zero,24(sp) + 800004a4: 00013823 sd zero,16(sp) + 800004a8: e91ff06f j 80000338 + 800004ac: 00006597 auipc a1,0x6 + 800004b0: e6458593 addi a1,a1,-412 # 80006310 <_etext+0x7c> + 800004b4: ed9ff06f j 8000038c + 800004b8: 00006517 auipc a0,0x6 + 800004bc: fe850513 addi a0,a0,-24 # 800064a0 <_etext+0x20c> + 800004c0: 27d050ef jal ra,80005f3c + 800004c4: f19ff06f j 800003dc + 800004c8: 00006597 auipc a1,0x6 + 800004cc: e3858593 addi a1,a1,-456 # 80006300 <_etext+0x6c> + 800004d0: 00040513 mv a0,s0 + 800004d4: 17d040ef jal ra,80004e50 + 800004d8: 00200793 li a5,2 + 800004dc: 00f13423 sd a5,8(sp) + 800004e0: ca0500e3 beqz a0,80000180 + 800004e4: 00006597 auipc a1,0x6 + 800004e8: e6c58593 addi a1,a1,-404 # 80006350 <_etext+0xbc> + 800004ec: 00040513 mv a0,s0 + 800004f0: 161040ef jal ra,80004e50 + 800004f4: 00300793 li a5,3 + 800004f8: 00f13423 sd a5,8(sp) + 800004fc: c80502e3 beqz a0,80000180 + 80000500: 00040593 mv a1,s0 + 80000504: 00006517 auipc a0,0x6 + 80000508: e5450513 addi a0,a0,-428 # 80006358 <_etext+0xc4> + 8000050c: 231050ef jal ra,80005f3c + 80000510: 00100513 li a0,1 + 80000514: 380040ef jal ra,80004894 + +0000000080000518 : + 80000518: 00007597 auipc a1,0x7 + 8000051c: 4a058593 addi a1,a1,1184 # 800079b8 + 80000520: 0005b683 ld a3,0(a1) + 80000524: 00750713 addi a4,a0,7 + 80000528: 00007797 auipc a5,0x7 + 8000052c: 06078793 addi a5,a5,96 # 80007588 + 80000530: ff010113 addi sp,sp,-16 + 80000534: ff877713 andi a4,a4,-8 + 80000538: 0007b603 ld a2,0(a5) + 8000053c: 00113423 sd ra,8(sp) + 80000540: 00e68733 add a4,a3,a4 + 80000544: 00e5b023 sd a4,0(a1) + 80000548: 04c76263 bltu a4,a2,8000058c + 8000054c: 0087b783 ld a5,8(a5) + 80000550: 02f77e63 bgeu a4,a5,8000058c + 80000554: 00068793 mv a5,a3 + 80000558: 00d70863 beq a4,a3,80000568 + 8000055c: 0007b023 sd zero,0(a5) + 80000560: 00878793 addi a5,a5,8 + 80000564: fef71ce3 bne a4,a5,8000055c + 80000568: 00007797 auipc a5,0x7 + 8000056c: 5687b783 ld a5,1384(a5) # 80007ad0 + 80000570: 0087b783 ld a5,8(a5) + 80000574: 40c70733 sub a4,a4,a2 + 80000578: 02e7ea63 bltu a5,a4,800005ac + 8000057c: 00813083 ld ra,8(sp) + 80000580: 00068513 mv a0,a3 + 80000584: 01010113 addi sp,sp,16 + 80000588: 00008067 ret + 8000058c: 0a100613 li a2,161 + 80000590: 00006597 auipc a1,0x6 + 80000594: d0858593 addi a1,a1,-760 # 80006298 <_etext+0x4> + 80000598: 00006517 auipc a0,0x6 + 8000059c: d4050513 addi a0,a0,-704 # 800062d8 <_etext+0x44> + 800005a0: 19d050ef jal ra,80005f3c + 800005a4: 00100513 li a0,1 + 800005a8: 2ec040ef jal ra,80004894 + 800005ac: 0a500613 li a2,165 + 800005b0: fe1ff06f j 80000590 + +00000000800005b4 : + 800005b4: 03151513 slli a0,a0,0x31 + 800005b8: 03155513 srli a0,a0,0x31 + 800005bc: 00007797 auipc a5,0x7 + 800005c0: eca7a223 sw a0,-316(a5) # 80007480 + 800005c4: 00008067 ret + +00000000800005c8 : + 800005c8: 00007697 auipc a3,0x7 + 800005cc: eb868693 addi a3,a3,-328 # 80007480 + 800005d0: 0006a703 lw a4,0(a3) + 800005d4: 0017179b slliw a5,a4,0x1 + 800005d8: 00e787bb addw a5,a5,a4 + 800005dc: 0027979b slliw a5,a5,0x2 + 800005e0: 00e787bb addw a5,a5,a4 + 800005e4: 0047979b slliw a5,a5,0x4 + 800005e8: 00e787bb addw a5,a5,a4 + 800005ec: 0087979b slliw a5,a5,0x8 + 800005f0: 40e787bb subw a5,a5,a4 + 800005f4: 0027979b slliw a5,a5,0x2 + 800005f8: 00e787bb addw a5,a5,a4 + 800005fc: 0026a737 lui a4,0x26a + 80000600: ec37071b addiw a4,a4,-317 + 80000604: 00e787bb addw a5,a5,a4 + 80000608: 02179513 slli a0,a5,0x21 + 8000060c: 00f6a023 sw a5,0(a3) + 80000610: 03155513 srli a0,a0,0x31 + 80000614: 00008067 ret + +0000000080000618 : + 80000618: 00450613 addi a2,a0,4 + 8000061c: 08b67063 bgeu a2,a1,8000069c + 80000620: 811ca737 lui a4,0x811ca + 80000624: dc570713 addi a4,a4,-571 # ffffffff811c9dc5 <_end+0xffffffff011b9dc5> + 80000628: 00050693 mv a3,a0 + 8000062c: 0006c783 lbu a5,0(a3) + 80000630: 00168693 addi a3,a3,1 + 80000634: 00f74733 xor a4,a4,a5 + 80000638: 00f7179b slliw a5,a4,0xf + 8000063c: 00e787bb addw a5,a5,a4 + 80000640: 0027979b slliw a5,a5,0x2 + 80000644: 40e787bb subw a5,a5,a4 + 80000648: 0037979b slliw a5,a5,0x3 + 8000064c: 00e787bb addw a5,a5,a4 + 80000650: 0027979b slliw a5,a5,0x2 + 80000654: 00e787bb addw a5,a5,a4 + 80000658: 0027979b slliw a5,a5,0x2 + 8000065c: 40e7873b subw a4,a5,a4 + 80000660: fcd616e3 bne a2,a3,8000062c + 80000664: 00460613 addi a2,a2,4 + 80000668: 00450513 addi a0,a0,4 + 8000066c: fab66ee3 bltu a2,a1,80000628 + 80000670: 00d7151b slliw a0,a4,0xd + 80000674: 00e5073b addw a4,a0,a4 + 80000678: 4077551b sraiw a0,a4,0x7 + 8000067c: 00a74733 xor a4,a4,a0 + 80000680: 0037151b slliw a0,a4,0x3 + 80000684: 00e5053b addw a0,a0,a4 + 80000688: 4115579b sraiw a5,a0,0x11 + 8000068c: 00f54533 xor a0,a0,a5 + 80000690: 0055179b slliw a5,a0,0x5 + 80000694: 00a7853b addw a0,a5,a0 + 80000698: 00008067 ret + 8000069c: a6f00537 lui a0,0xa6f00 + 800006a0: 79e50513 addi a0,a0,1950 # ffffffffa6f0079e <_end+0xffffffff26ef079e> + 800006a4: 00008067 ret + +00000000800006a8 <_ZN5Dinic3DFSEii>: + 800006a8: 00c52783 lw a5,12(a0) + 800006ac: fc010113 addi sp,sp,-64 + 800006b0: 01413823 sd s4,16(sp) + 800006b4: 01513423 sd s5,8(sp) + 800006b8: 02113c23 sd ra,56(sp) + 800006bc: 02813823 sd s0,48(sp) + 800006c0: 02913423 sd s1,40(sp) + 800006c4: 03213023 sd s2,32(sp) + 800006c8: 01313c23 sd s3,24(sp) + 800006cc: 01613023 sd s6,0(sp) + 800006d0: 00060a13 mv s4,a2 + 800006d4: 00060a93 mv s5,a2 + 800006d8: 0cb78663 beq a5,a1,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 800006dc: 00000a93 li s5,0 + 800006e0: 0c060263 beqz a2,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 800006e4: 03053783 ld a5,48(a0) + 800006e8: 00259993 slli s3,a1,0x2 + 800006ec: fff00713 li a4,-1 + 800006f0: 013787b3 add a5,a5,s3 + 800006f4: 0007a403 lw s0,0(a5) + 800006f8: 00050913 mv s2,a0 + 800006fc: 0ae40463 beq s0,a4,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 80000700: fff00b13 li s6,-1 + 80000704: 0180006f j 8000071c <_ZN5Dinic3DFSEii+0x74> + 80000708: 02093783 ld a5,32(s2) + 8000070c: 00241413 slli s0,s0,0x2 + 80000710: 00878433 add s0,a5,s0 + 80000714: 00042403 lw s0,0(s0) + 80000718: 09640663 beq s0,s6,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 8000071c: 01093703 ld a4,16(s2) + 80000720: 00441493 slli s1,s0,0x4 + 80000724: 02893783 ld a5,40(s2) + 80000728: 009704b3 add s1,a4,s1 + 8000072c: 0044a583 lw a1,4(s1) + 80000730: 01378733 add a4,a5,s3 + 80000734: 00072703 lw a4,0(a4) + 80000738: 00259693 slli a3,a1,0x2 + 8000073c: 00d787b3 add a5,a5,a3 + 80000740: 0007a683 lw a3,0(a5) + 80000744: 0017079b addiw a5,a4,1 + 80000748: fcd790e3 bne a5,a3,80000708 <_ZN5Dinic3DFSEii+0x60> + 8000074c: 0084a603 lw a2,8(s1) + 80000750: 00c4a783 lw a5,12(s1) + 80000754: 00090513 mv a0,s2 + 80000758: 40f607bb subw a5,a2,a5 + 8000075c: 00078613 mv a2,a5 + 80000760: 00fa5463 bge s4,a5,80000768 <_ZN5Dinic3DFSEii+0xc0> + 80000764: 000a061b sext.w a2,s4 + 80000768: f41ff0ef jal ra,800006a8 <_ZN5Dinic3DFSEii> + 8000076c: 00144793 xori a5,s0,1 + 80000770: 00479793 slli a5,a5,0x4 + 80000774: f8a05ae3 blez a0,80000708 <_ZN5Dinic3DFSEii+0x60> + 80000778: 00c4a683 lw a3,12(s1) + 8000077c: 01093703 ld a4,16(s2) + 80000780: 40aa0a3b subw s4,s4,a0 + 80000784: 00a686bb addw a3,a3,a0 + 80000788: 00d4a623 sw a3,12(s1) + 8000078c: 00f707b3 add a5,a4,a5 + 80000790: 00c7a703 lw a4,12(a5) + 80000794: 01550abb addw s5,a0,s5 + 80000798: 40a7053b subw a0,a4,a0 + 8000079c: 00a7a623 sw a0,12(a5) + 800007a0: f60a14e3 bnez s4,80000708 <_ZN5Dinic3DFSEii+0x60> + 800007a4: 03813083 ld ra,56(sp) + 800007a8: 03013403 ld s0,48(sp) + 800007ac: 02813483 ld s1,40(sp) + 800007b0: 02013903 ld s2,32(sp) + 800007b4: 01813983 ld s3,24(sp) + 800007b8: 01013a03 ld s4,16(sp) + 800007bc: 00013b03 ld s6,0(sp) + 800007c0: 000a8513 mv a0,s5 + 800007c4: 00813a83 ld s5,8(sp) + 800007c8: 04010113 addi sp,sp,64 + 800007cc: 00008067 ret + +00000000800007d0 : + 800007d0: 00007797 auipc a5,0x7 + 800007d4: 3007b783 ld a5,768(a5) # 80007ad0 + 800007d8: 0007a783 lw a5,0(a5) + 800007dc: fa010113 addi sp,sp,-96 + 800007e0: 05213023 sd s2,64(sp) + 800007e4: 00100513 li a0,1 + 800007e8: 00007917 auipc s2,0x7 + 800007ec: 1e090913 addi s2,s2,480 # 800079c8 <_ZL1N> + 800007f0: 04113c23 sd ra,88(sp) + 800007f4: 00f92023 sw a5,0(s2) + 800007f8: 04913423 sd s1,72(sp) + 800007fc: 03313c23 sd s3,56(sp) + 80000800: 03413823 sd s4,48(sp) + 80000804: 03513423 sd s5,40(sp) + 80000808: 03613023 sd s6,32(sp) + 8000080c: 01713c23 sd s7,24(sp) + 80000810: 01813823 sd s8,16(sp) + 80000814: 04813823 sd s0,80(sp) + 80000818: 01913423 sd s9,8(sp) + 8000081c: 01a13023 sd s10,0(sp) + 80000820: d95ff0ef jal ra,800005b4 + 80000824: 04800513 li a0,72 + 80000828: 00092b03 lw s6,0(s2) + 8000082c: cedff0ef jal ra,80000518 + 80000830: 00092783 lw a5,0(s2) + 80000834: 00007997 auipc s3,0x7 + 80000838: 18c98993 addi s3,s3,396 # 800079c0 <_ZL1G> + 8000083c: 00050493 mv s1,a0 + 80000840: 0017879b addiw a5,a5,1 + 80000844: 00179c1b slliw s8,a5,0x1 + 80000848: ffec0a1b addiw s4,s8,-2 + 8000084c: 401a559b sraiw a1,s4,0x1 + 80000850: 00058a13 mv s4,a1 + 80000854: 00a9b023 sd a0,0(s3) + 80000858: 00058513 mv a0,a1 + 8000085c: 080040ef jal ra,800048dc <__muldi3> + 80000860: 001a1a1b slliw s4,s4,0x1 + 80000864: 00aa0a3b addw s4,s4,a0 + 80000868: 001a1a1b slliw s4,s4,0x1 + 8000086c: 004a1513 slli a0,s4,0x4 + 80000870: 002c1a93 slli s5,s8,0x2 + 80000874: ca5ff0ef jal ra,80000518 + 80000878: 00a4b823 sd a0,16(s1) + 8000087c: 000a8513 mv a0,s5 + 80000880: c99ff0ef jal ra,80000518 + 80000884: 00a4bc23 sd a0,24(s1) + 80000888: 002a1513 slli a0,s4,0x2 + 8000088c: c8dff0ef jal ra,80000518 + 80000890: 02a4b023 sd a0,32(s1) + 80000894: 000c0513 mv a0,s8 + 80000898: c81ff0ef jal ra,80000518 + 8000089c: 04a4b023 sd a0,64(s1) + 800008a0: 000a8513 mv a0,s5 + 800008a4: c75ff0ef jal ra,80000518 + 800008a8: 02a4b423 sd a0,40(s1) + 800008ac: 000a8513 mv a0,s5 + 800008b0: c69ff0ef jal ra,80000518 + 800008b4: 02a4b823 sd a0,48(s1) + 800008b8: 000a8513 mv a0,s5 + 800008bc: c5dff0ef jal ra,80000518 + 800008c0: 001b1b9b slliw s7,s6,0x1 + 800008c4: 02a4bc23 sd a0,56(s1) + 800008c8: 0184a023 sw s8,0(s1) + 800008cc: 001b8b1b addiw s6,s7,1 + 800008d0: 03805863 blez s8,80000900 + 800008d4: fffc071b addiw a4,s8,-1 + 800008d8: 02071713 slli a4,a4,0x20 + 800008dc: 0184b783 ld a5,24(s1) + 800008e0: 02075713 srli a4,a4,0x20 + 800008e4: 00170713 addi a4,a4,1 + 800008e8: 00271713 slli a4,a4,0x2 + 800008ec: 00f70733 add a4,a4,a5 + 800008f0: fff00693 li a3,-1 + 800008f4: 00d7a023 sw a3,0(a5) + 800008f8: 00478793 addi a5,a5,4 + 800008fc: fee79ce3 bne a5,a4,800008f4 + 80000900: 00092c83 lw s9,0(s2) + 80000904: 0004a223 sw zero,4(s1) + 80000908: 27905c63 blez s9,80000b80 + 8000090c: 00000a93 li s5,0 + 80000910: 00000493 li s1,0 + 80000914: 002a9a13 slli s4,s5,0x2 + 80000918: 00000c13 li s8,0 + 8000091c: 0d905463 blez s9,800009e4 + 80000920: 0009b403 ld s0,0(s3) + 80000924: ca5ff0ef jal ra,800005c8 + 80000928: 02051513 slli a0,a0,0x20 + 8000092c: 00a00593 li a1,10 + 80000930: 02055513 srli a0,a0,0x20 + 80000934: 05c040ef jal ra,80004990 <__umoddi3> + 80000938: 018c873b addw a4,s9,s8 + 8000093c: 0005051b sext.w a0,a0 + 80000940: 00092c83 lw s9,0(s2) + 80000944: 00070813 mv a6,a4 + 80000948: 00271593 slli a1,a4,0x2 + 8000094c: 001c0c1b addiw s8,s8,1 + 80000950: 08050863 beqz a0,800009e0 + 80000954: 00442703 lw a4,4(s0) + 80000958: 01043783 ld a5,16(s0) + 8000095c: 01843603 ld a2,24(s0) + 80000960: 00471693 slli a3,a4,0x4 + 80000964: 00d786b3 add a3,a5,a3 + 80000968: 0096a023 sw s1,0(a3) + 8000096c: 00a6a423 sw a0,8(a3) + 80000970: 0106a223 sw a6,4(a3) + 80000974: 0006a623 sw zero,12(a3) + 80000978: 01460533 add a0,a2,s4 + 8000097c: 02043683 ld a3,32(s0) + 80000980: 00052883 lw a7,0(a0) + 80000984: 00271713 slli a4,a4,0x2 + 80000988: 00e68733 add a4,a3,a4 + 8000098c: 01172023 sw a7,0(a4) + 80000990: 00442883 lw a7,4(s0) + 80000994: 00b60733 add a4,a2,a1 + 80000998: 0018861b addiw a2,a7,1 + 8000099c: 00c42223 sw a2,4(s0) + 800009a0: 01152023 sw a7,0(a0) + 800009a4: 00442603 lw a2,4(s0) + 800009a8: 00461593 slli a1,a2,0x4 + 800009ac: 00b787b3 add a5,a5,a1 + 800009b0: 0107a023 sw a6,0(a5) + 800009b4: 0097a223 sw s1,4(a5) + 800009b8: 0007a423 sw zero,8(a5) + 800009bc: 0007a623 sw zero,12(a5) + 800009c0: 00072783 lw a5,0(a4) + 800009c4: 00261613 slli a2,a2,0x2 + 800009c8: 00c686b3 add a3,a3,a2 + 800009cc: 00f6a023 sw a5,0(a3) + 800009d0: 00442783 lw a5,4(s0) + 800009d4: 0017869b addiw a3,a5,1 + 800009d8: 00d42223 sw a3,4(s0) + 800009dc: 00f72023 sw a5,0(a4) + 800009e0: f59c40e3 blt s8,s9,80000920 + 800009e4: 001a8a93 addi s5,s5,1 + 800009e8: 000a849b sext.w s1,s5 + 800009ec: f394c4e3 blt s1,s9,80000914 + 800009f0: 19905863 blez s9,80000b80 + 800009f4: 002b9a93 slli s5,s7,0x2 + 800009f8: 002b1a13 slli s4,s6,0x2 + 800009fc: 00000c13 li s8,0 + 80000a00: 00000c93 li s9,0 + 80000a04: 0009b483 ld s1,0(s3) + 80000a08: bc1ff0ef jal ra,800005c8 + 80000a0c: 02051513 slli a0,a0,0x20 + 80000a10: 3e800593 li a1,1000 + 80000a14: 02055513 srli a0,a0,0x20 + 80000a18: 779030ef jal ra,80004990 <__umoddi3> + 80000a1c: 0005051b sext.w a0,a0 + 80000a20: 002c1813 slli a6,s8,0x2 + 80000a24: 0009b403 ld s0,0(s3) + 80000a28: 00092d03 lw s10,0(s2) + 80000a2c: 001c0c13 addi s8,s8,1 + 80000a30: 08050863 beqz a0,80000ac0 + 80000a34: 0044a703 lw a4,4(s1) + 80000a38: 0104b783 ld a5,16(s1) + 80000a3c: 0184b603 ld a2,24(s1) + 80000a40: 00471693 slli a3,a4,0x4 + 80000a44: 00d786b3 add a3,a5,a3 + 80000a48: 0176a023 sw s7,0(a3) + 80000a4c: 0196a223 sw s9,4(a3) + 80000a50: 00a6a423 sw a0,8(a3) + 80000a54: 0006a623 sw zero,12(a3) + 80000a58: 015605b3 add a1,a2,s5 + 80000a5c: 0204b683 ld a3,32(s1) + 80000a60: 0005a503 lw a0,0(a1) + 80000a64: 00271713 slli a4,a4,0x2 + 80000a68: 00e68733 add a4,a3,a4 + 80000a6c: 00a72023 sw a0,0(a4) + 80000a70: 0044a503 lw a0,4(s1) + 80000a74: 01060733 add a4,a2,a6 + 80000a78: 0015061b addiw a2,a0,1 + 80000a7c: 00c4a223 sw a2,4(s1) + 80000a80: 00a5a023 sw a0,0(a1) + 80000a84: 0044a603 lw a2,4(s1) + 80000a88: 00461593 slli a1,a2,0x4 + 80000a8c: 00b787b3 add a5,a5,a1 + 80000a90: 0197a023 sw s9,0(a5) + 80000a94: 0177a223 sw s7,4(a5) + 80000a98: 0007a423 sw zero,8(a5) + 80000a9c: 0007a623 sw zero,12(a5) + 80000aa0: 00072783 lw a5,0(a4) + 80000aa4: 00261613 slli a2,a2,0x2 + 80000aa8: 00c686b3 add a3,a3,a2 + 80000aac: 00f6a023 sw a5,0(a3) + 80000ab0: 0044a783 lw a5,4(s1) + 80000ab4: 0017869b addiw a3,a5,1 + 80000ab8: 00d4a223 sw a3,4(s1) + 80000abc: 00f72023 sw a5,0(a4) + 80000ac0: b09ff0ef jal ra,800005c8 + 80000ac4: 02051513 slli a0,a0,0x20 + 80000ac8: 3e800593 li a1,1000 + 80000acc: 02055513 srli a0,a0,0x20 + 80000ad0: 6c1030ef jal ra,80004990 <__umoddi3> + 80000ad4: 019d07bb addw a5,s10,s9 + 80000ad8: 0005051b sext.w a0,a0 + 80000adc: 00078813 mv a6,a5 + 80000ae0: 00092883 lw a7,0(s2) + 80000ae4: 00279793 slli a5,a5,0x2 + 80000ae8: 000c0c9b sext.w s9,s8 + 80000aec: 08050863 beqz a0,80000b7c + 80000af0: 00442683 lw a3,4(s0) + 80000af4: 01043703 ld a4,16(s0) + 80000af8: 01843583 ld a1,24(s0) + 80000afc: 00469613 slli a2,a3,0x4 + 80000b00: 00c70633 add a2,a4,a2 + 80000b04: 01062023 sw a6,0(a2) + 80000b08: 01662223 sw s6,4(a2) + 80000b0c: 00a62423 sw a0,8(a2) + 80000b10: 00062623 sw zero,12(a2) + 80000b14: 00f587b3 add a5,a1,a5 + 80000b18: 02043603 ld a2,32(s0) + 80000b1c: 0007a503 lw a0,0(a5) + 80000b20: 00269693 slli a3,a3,0x2 + 80000b24: 00d606b3 add a3,a2,a3 + 80000b28: 00a6a023 sw a0,0(a3) + 80000b2c: 00442503 lw a0,4(s0) + 80000b30: 014586b3 add a3,a1,s4 + 80000b34: 0015059b addiw a1,a0,1 + 80000b38: 00b42223 sw a1,4(s0) + 80000b3c: 00a7a023 sw a0,0(a5) + 80000b40: 00442583 lw a1,4(s0) + 80000b44: 00459793 slli a5,a1,0x4 + 80000b48: 00f707b3 add a5,a4,a5 + 80000b4c: 0167a023 sw s6,0(a5) + 80000b50: 0107a223 sw a6,4(a5) + 80000b54: 0007a423 sw zero,8(a5) + 80000b58: 0007a623 sw zero,12(a5) + 80000b5c: 0006a783 lw a5,0(a3) + 80000b60: 00259593 slli a1,a1,0x2 + 80000b64: 00b60633 add a2,a2,a1 + 80000b68: 00f62023 sw a5,0(a2) + 80000b6c: 00442783 lw a5,4(s0) + 80000b70: 0017871b addiw a4,a5,1 + 80000b74: 00e42223 sw a4,4(s0) + 80000b78: 00f6a023 sw a5,0(a3) + 80000b7c: e91cc4e3 blt s9,a7,80000a04 + 80000b80: 05813083 ld ra,88(sp) + 80000b84: 05013403 ld s0,80(sp) + 80000b88: 04813483 ld s1,72(sp) + 80000b8c: 04013903 ld s2,64(sp) + 80000b90: 03813983 ld s3,56(sp) + 80000b94: 03013a03 ld s4,48(sp) + 80000b98: 02813a83 ld s5,40(sp) + 80000b9c: 02013b03 ld s6,32(sp) + 80000ba0: 01813b83 ld s7,24(sp) + 80000ba4: 01013c03 ld s8,16(sp) + 80000ba8: 00813c83 ld s9,8(sp) + 80000bac: 00013d03 ld s10,0(sp) + 80000bb0: 06010113 addi sp,sp,96 + 80000bb4: 00008067 ret + +0000000080000bb8 : + 80000bb8: f3010113 addi sp,sp,-208 + 80000bbc: 0c813023 sd s0,192(sp) + 80000bc0: 00007717 auipc a4,0x7 + 80000bc4: e0872703 lw a4,-504(a4) # 800079c8 <_ZL1N> + 80000bc8: 00007417 auipc s0,0x7 + 80000bcc: df843403 ld s0,-520(s0) # 800079c0 <_ZL1G> + 80000bd0: 00171f1b slliw t5,a4,0x1 + 80000bd4: 04043683 ld a3,64(s0) + 80000bd8: 03843583 ld a1,56(s0) + 80000bdc: 02843783 ld a5,40(s0) + 80000be0: 01843503 ld a0,24(s0) + 80000be4: 09513c23 sd s5,152(sp) + 80000be8: 0c113423 sd ra,200(sp) + 80000bec: 0a913c23 sd s1,184(sp) + 80000bf0: 0b213823 sd s2,176(sp) + 80000bf4: 0b313423 sd s3,168(sp) + 80000bf8: 0b413023 sd s4,160(sp) + 80000bfc: 09613823 sd s6,144(sp) + 80000c00: 09713423 sd s7,136(sp) + 80000c04: 09813023 sd s8,128(sp) + 80000c08: 07913c23 sd s9,120(sp) + 80000c0c: 07a13823 sd s10,112(sp) + 80000c10: 07b13423 sd s11,104(sp) + 80000c14: 001f061b addiw a2,t5,1 + 80000c18: 002f1713 slli a4,t5,0x2 + 80000c1c: 01e42423 sw t5,8(s0) + 80000c20: 00c42623 sw a2,12(s0) + 80000c24: 00e13023 sd a4,0(sp) + 80000c28: 000f0893 mv a7,t5 + 80000c2c: 00000813 li a6,0 + 80000c30: fff00a93 li s5,-1 + 80000c34: 00042703 lw a4,0(s0) + 80000c38: 02e05463 blez a4,80000c60 + 80000c3c: fff7071b addiw a4,a4,-1 + 80000c40: 02071713 slli a4,a4,0x20 + 80000c44: 02075713 srli a4,a4,0x20 + 80000c48: 00170713 addi a4,a4,1 + 80000c4c: 00068613 mv a2,a3 + 80000c50: 00d70733 add a4,a4,a3 + 80000c54: 00060023 sb zero,0(a2) + 80000c58: 00160613 addi a2,a2,1 + 80000c5c: fec71ce3 bne a4,a2,80000c54 + 80000c60: 0115a023 sw a7,0(a1) + 80000c64: 00842703 lw a4,8(s0) + 80000c68: 00100613 li a2,1 + 80000c6c: 00058e93 mv t4,a1 + 80000c70: 00271713 slli a4,a4,0x2 + 80000c74: 00e78733 add a4,a5,a4 + 80000c78: 00072023 sw zero,0(a4) + 80000c7c: 00842703 lw a4,8(s0) + 80000c80: 00100e13 li t3,1 + 80000c84: 00000f93 li t6,0 + 80000c88: 00e68733 add a4,a3,a4 + 80000c8c: 00c70023 sb a2,0(a4) + 80000c90: 000ea603 lw a2,0(t4) + 80000c94: 001f8f9b addiw t6,t6,1 + 80000c98: 00261613 slli a2,a2,0x2 + 80000c9c: 00c50733 add a4,a0,a2 + 80000ca0: 00072703 lw a4,0(a4) + 80000ca4: 07570a63 beq a4,s5,80000d18 + 80000ca8: 01043903 ld s2,16(s0) + 80000cac: 02043483 ld s1,32(s0) + 80000cb0: 00c788b3 add a7,a5,a2 + 80000cb4: 00471313 slli t1,a4,0x4 + 80000cb8: 00690333 add t1,s2,t1 + 80000cbc: 00432603 lw a2,4(t1) + 80000cc0: 00271713 slli a4,a4,0x2 + 80000cc4: 00e48733 add a4,s1,a4 + 80000cc8: 00c689b3 add s3,a3,a2 + 80000ccc: 0009c283 lbu t0,0(s3) + 80000cd0: 04029063 bnez t0,80000d10 + 80000cd4: 00832a03 lw s4,8(t1) + 80000cd8: 00c32383 lw t2,12(t1) + 80000cdc: 00261613 slli a2,a2,0x2 + 80000ce0: 002e1293 slli t0,t3,0x2 + 80000ce4: 00c78633 add a2,a5,a2 + 80000ce8: 005582b3 add t0,a1,t0 + 80000cec: 0343d263 bge t2,s4,80000d10 + 80000cf0: 0008a383 lw t2,0(a7) + 80000cf4: 00100a13 li s4,1 + 80000cf8: 01498023 sb s4,0(s3) + 80000cfc: 0013839b addiw t2,t2,1 + 80000d00: 00762023 sw t2,0(a2) + 80000d04: 00432603 lw a2,4(t1) + 80000d08: 001e0e1b addiw t3,t3,1 + 80000d0c: 00c2a023 sw a2,0(t0) + 80000d10: 00072703 lw a4,0(a4) + 80000d14: fb5710e3 bne a4,s5,80000cb4 + 80000d18: 004e8e93 addi t4,t4,4 + 80000d1c: f7cf9ae3 bne t6,t3,80000c90 + 80000d20: 00c42703 lw a4,12(s0) + 80000d24: 00e68633 add a2,a3,a4 + 80000d28: 00064603 lbu a2,0(a2) + 80000d2c: 38060063 beqz a2,800010ac + 80000d30: 00042603 lw a2,0(s0) + 80000d34: 02c05863 blez a2,80000d64 + 80000d38: 03043883 ld a7,48(s0) + 80000d3c: 00050613 mv a2,a0 + 80000d40: 00000713 li a4,0 + 80000d44: 00062303 lw t1,0(a2) + 80000d48: 0017071b addiw a4,a4,1 + 80000d4c: 00460613 addi a2,a2,4 + 80000d50: 0068a023 sw t1,0(a7) + 80000d54: 00042303 lw t1,0(s0) + 80000d58: 00488893 addi a7,a7,4 + 80000d5c: fe6744e3 blt a4,t1,80000d44 + 80000d60: 00c42703 lw a4,12(s0) + 80000d64: 38ef0663 beq t5,a4,800010f0 + 80000d68: 03043703 ld a4,48(s0) + 80000d6c: 00013603 ld a2,0(sp) + 80000d70: 00c70733 add a4,a4,a2 + 80000d74: 00072b83 lw s7,0(a4) + 80000d78: 335b8663 beq s7,s5,800010a4 + 80000d7c: 003f4db7 lui s11,0x3f4 + 80000d80: 00000e93 li t4,0 + 80000d84: f3fd8d93 addi s11,s11,-193 # 3f3f3f <_entry_offset+0x3f3f3f> + 80000d88: 0180006f j 80000da0 + 80000d8c: 02043703 ld a4,32(s0) + 80000d90: 002b9b93 slli s7,s7,0x2 + 80000d94: 01770bb3 add s7,a4,s7 + 80000d98: 000bab83 lw s7,0(s7) + 80000d9c: 2f5b8c63 beq s7,s5,80001094 + 80000da0: 01043a03 ld s4,16(s0) + 80000da4: 004b9b13 slli s6,s7,0x4 + 80000da8: 00013703 ld a4,0(sp) + 80000dac: 016a0b33 add s6,s4,s6 + 80000db0: 004b2603 lw a2,4(s6) + 80000db4: 00e78733 add a4,a5,a4 + 80000db8: 00072703 lw a4,0(a4) + 80000dbc: 00261f93 slli t6,a2,0x2 + 80000dc0: 01f786b3 add a3,a5,t6 + 80000dc4: 0006a683 lw a3,0(a3) + 80000dc8: 0017071b addiw a4,a4,1 + 80000dcc: fcd710e3 bne a4,a3,80000d8c + 80000dd0: 008b2483 lw s1,8(s6) + 80000dd4: 00cb2703 lw a4,12(s6) + 80000dd8: 40e4873b subw a4,s1,a4 + 80000ddc: 00070493 mv s1,a4 + 80000de0: 00edd463 bge s11,a4,80000de8 + 80000de4: 000d849b sext.w s1,s11 + 80000de8: 00c42703 lw a4,12(s0) + 80000dec: 34c70663 beq a4,a2,80001138 + 80000df0: f8048ee3 beqz s1,80000d8c + 80000df4: 03043703 ld a4,48(s0) + 80000df8: 01f70733 add a4,a4,t6 + 80000dfc: 00072c03 lw s8,0(a4) + 80000e00: f95c06e3 beq s8,s5,80000d8c + 80000e04: 00048893 mv a7,s1 + 80000e08: 00000493 li s1,0 + 80000e0c: 0240006f j 80000e30 + 80000e10: 02043703 ld a4,32(s0) + 80000e14: 002c1c13 slli s8,s8,0x2 + 80000e18: 01870c33 add s8,a4,s8 + 80000e1c: 000c2c03 lw s8,0(s8) + 80000e20: 315c0c63 beq s8,s5,80001138 + 80000e24: 01f78733 add a4,a5,t6 + 80000e28: 01043a03 ld s4,16(s0) + 80000e2c: 00072683 lw a3,0(a4) + 80000e30: 004c1713 slli a4,s8,0x4 + 80000e34: 00ea0733 add a4,s4,a4 + 80000e38: 00472583 lw a1,4(a4) + 80000e3c: 0016869b addiw a3,a3,1 + 80000e40: 00259293 slli t0,a1,0x2 + 80000e44: 00578633 add a2,a5,t0 + 80000e48: 00062603 lw a2,0(a2) + 80000e4c: fcc692e3 bne a3,a2,80000e10 + 80000e50: 00872903 lw s2,8(a4) + 80000e54: 00c72683 lw a3,12(a4) + 80000e58: 40d906bb subw a3,s2,a3 + 80000e5c: 00068913 mv s2,a3 + 80000e60: 00d8d463 bge a7,a3,80000e68 + 80000e64: 0008891b sext.w s2,a7 + 80000e68: 00c42683 lw a3,12(s0) + 80000e6c: 2cb68063 beq a3,a1,8000112c + 80000e70: fa0900e3 beqz s2,80000e10 + 80000e74: 03043683 ld a3,48(s0) + 80000e78: 005686b3 add a3,a3,t0 + 80000e7c: 0006ac83 lw s9,0(a3) + 80000e80: f95c88e3 beq s9,s5,80000e10 + 80000e84: 00090313 mv t1,s2 + 80000e88: 00000913 li s2,0 + 80000e8c: 0240006f j 80000eb0 + 80000e90: 02043683 ld a3,32(s0) + 80000e94: 002c9c93 slli s9,s9,0x2 + 80000e98: 01968cb3 add s9,a3,s9 + 80000e9c: 000cac83 lw s9,0(s9) + 80000ea0: 295c8663 beq s9,s5,8000112c + 80000ea4: 005786b3 add a3,a5,t0 + 80000ea8: 01043a03 ld s4,16(s0) + 80000eac: 0006a603 lw a2,0(a3) + 80000eb0: 004c9693 slli a3,s9,0x4 + 80000eb4: 00da06b3 add a3,s4,a3 + 80000eb8: 0046a583 lw a1,4(a3) + 80000ebc: 0016051b addiw a0,a2,1 + 80000ec0: 00259393 slli t2,a1,0x2 + 80000ec4: 00778633 add a2,a5,t2 + 80000ec8: 00062603 lw a2,0(a2) + 80000ecc: fcc512e3 bne a0,a2,80000e90 + 80000ed0: 0086a983 lw s3,8(a3) + 80000ed4: 00c6a503 lw a0,12(a3) + 80000ed8: 40a9853b subw a0,s3,a0 + 80000edc: 00050993 mv s3,a0 + 80000ee0: 00a35463 bge t1,a0,80000ee8 + 80000ee4: 0003099b sext.w s3,t1 + 80000ee8: 00c42503 lw a0,12(s0) + 80000eec: 22b50a63 beq a0,a1,80001120 + 80000ef0: fa0980e3 beqz s3,80000e90 + 80000ef4: 03043583 ld a1,48(s0) + 80000ef8: 007585b3 add a1,a1,t2 + 80000efc: 0005ad03 lw s10,0(a1) + 80000f00: f95d08e3 beq s10,s5,80000e90 + 80000f04: 00098e13 mv t3,s3 + 80000f08: 00000993 li s3,0 + 80000f0c: 0240006f j 80000f30 + 80000f10: 02043583 ld a1,32(s0) + 80000f14: 002d1d13 slli s10,s10,0x2 + 80000f18: 00778633 add a2,a5,t2 + 80000f1c: 01a58d33 add s10,a1,s10 + 80000f20: 000d2d03 lw s10,0(s10) + 80000f24: 1f5d0e63 beq s10,s5,80001120 + 80000f28: 01043a03 ld s4,16(s0) + 80000f2c: 00062603 lw a2,0(a2) + 80000f30: 004d1593 slli a1,s10,0x4 + 80000f34: 00ba0a33 add s4,s4,a1 + 80000f38: 004a2583 lw a1,4(s4) + 80000f3c: 0016051b addiw a0,a2,1 + 80000f40: 00259613 slli a2,a1,0x2 + 80000f44: 00c78633 add a2,a5,a2 + 80000f48: 00062603 lw a2,0(a2) + 80000f4c: fcc512e3 bne a0,a2,80000f10 + 80000f50: 008a2603 lw a2,8(s4) + 80000f54: 00ca2783 lw a5,12(s4) + 80000f58: 00040513 mv a0,s0 + 80000f5c: 40f607bb subw a5,a2,a5 + 80000f60: 00078613 mv a2,a5 + 80000f64: 00fe5463 bge t3,a5,80000f6c + 80000f68: 000e061b sext.w a2,t3 + 80000f6c: 05c13c23 sd t3,88(sp) + 80000f70: 04613823 sd t1,80(sp) + 80000f74: 04713423 sd t2,72(sp) + 80000f78: 04d13023 sd a3,64(sp) + 80000f7c: 03113c23 sd a7,56(sp) + 80000f80: 02513823 sd t0,48(sp) + 80000f84: 02e13423 sd a4,40(sp) + 80000f88: 03d13023 sd t4,32(sp) + 80000f8c: 01f13c23 sd t6,24(sp) + 80000f90: 01013823 sd a6,16(sp) + 80000f94: 01e13423 sd t5,8(sp) + 80000f98: f10ff0ef jal ra,800006a8 <_ZN5Dinic3DFSEii> + 80000f9c: 001d4593 xori a1,s10,1 + 80000fa0: 00813f03 ld t5,8(sp) + 80000fa4: 01013803 ld a6,16(sp) + 80000fa8: 01813f83 ld t6,24(sp) + 80000fac: 02013e83 ld t4,32(sp) + 80000fb0: 02813703 ld a4,40(sp) + 80000fb4: 03013283 ld t0,48(sp) + 80000fb8: 03813883 ld a7,56(sp) + 80000fbc: 04013683 ld a3,64(sp) + 80000fc0: 04813383 ld t2,72(sp) + 80000fc4: 05013303 ld t1,80(sp) + 80000fc8: 05813e03 ld t3,88(sp) + 80000fcc: 00459593 slli a1,a1,0x4 + 80000fd0: 12a05a63 blez a0,80001104 + 80000fd4: 00ca2783 lw a5,12(s4) + 80000fd8: 01043603 ld a2,16(s0) + 80000fdc: 40ae0e3b subw t3,t3,a0 + 80000fe0: 00a787bb addw a5,a5,a0 + 80000fe4: 00fa2623 sw a5,12(s4) + 80000fe8: 00b605b3 add a1,a2,a1 + 80000fec: 00c5aa03 lw s4,12(a1) + 80000ff0: 00a989bb addw s3,s3,a0 + 80000ff4: 02843783 ld a5,40(s0) + 80000ff8: 40aa053b subw a0,s4,a0 + 80000ffc: 00a5a623 sw a0,12(a1) + 80001000: f00e18e3 bnez t3,80000f10 + 80001004: 00c6a503 lw a0,12(a3) + 80001008: 001cc593 xori a1,s9,1 + 8000100c: 00459593 slli a1,a1,0x4 + 80001010: 0135053b addw a0,a0,s3 + 80001014: 00a6a623 sw a0,12(a3) + 80001018: 00b606b3 add a3,a2,a1 + 8000101c: 00c6a583 lw a1,12(a3) + 80001020: 4133033b subw t1,t1,s3 + 80001024: 0139093b addw s2,s2,s3 + 80001028: 413589bb subw s3,a1,s3 + 8000102c: 0136a623 sw s3,12(a3) + 80001030: e60310e3 bnez t1,80000e90 + 80001034: 00c72583 lw a1,12(a4) + 80001038: 001c4693 xori a3,s8,1 + 8000103c: 00469693 slli a3,a3,0x4 + 80001040: 012585bb addw a1,a1,s2 + 80001044: 00b72623 sw a1,12(a4) + 80001048: 00d60733 add a4,a2,a3 + 8000104c: 00c72683 lw a3,12(a4) + 80001050: 412888bb subw a7,a7,s2 + 80001054: 012484bb addw s1,s1,s2 + 80001058: 4126893b subw s2,a3,s2 + 8000105c: 01272623 sw s2,12(a4) + 80001060: da0898e3 bnez a7,80000e10 + 80001064: 00cb2683 lw a3,12(s6) + 80001068: 001bc713 xori a4,s7,1 + 8000106c: 00471713 slli a4,a4,0x4 + 80001070: 009686bb addw a3,a3,s1 + 80001074: 00db2623 sw a3,12(s6) + 80001078: 00e60633 add a2,a2,a4 + 8000107c: 00c62703 lw a4,12(a2) + 80001080: 409d8dbb subw s11,s11,s1 + 80001084: 009e8ebb addw t4,t4,s1 + 80001088: 409704bb subw s1,a4,s1 + 8000108c: 00962623 sw s1,12(a2) + 80001090: ce0d9ee3 bnez s11,80000d8c + 80001094: 04043683 ld a3,64(s0) + 80001098: 03843583 ld a1,56(s0) + 8000109c: 01843503 ld a0,24(s0) + 800010a0: 01d8083b addw a6,a6,t4 + 800010a4: 00842883 lw a7,8(s0) + 800010a8: b8dff06f j 80000c34 + 800010ac: 0c813083 ld ra,200(sp) + 800010b0: 0c013403 ld s0,192(sp) + 800010b4: 00007797 auipc a5,0x7 + 800010b8: 9107ac23 sw a6,-1768(a5) # 800079cc <_ZL3ans> + 800010bc: 0b813483 ld s1,184(sp) + 800010c0: 0b013903 ld s2,176(sp) + 800010c4: 0a813983 ld s3,168(sp) + 800010c8: 0a013a03 ld s4,160(sp) + 800010cc: 09813a83 ld s5,152(sp) + 800010d0: 09013b03 ld s6,144(sp) + 800010d4: 08813b83 ld s7,136(sp) + 800010d8: 08013c03 ld s8,128(sp) + 800010dc: 07813c83 ld s9,120(sp) + 800010e0: 07013d03 ld s10,112(sp) + 800010e4: 06813d83 ld s11,104(sp) + 800010e8: 0d010113 addi sp,sp,208 + 800010ec: 00008067 ret + 800010f0: 003f4737 lui a4,0x3f4 + 800010f4: f3f7071b addiw a4,a4,-193 + 800010f8: 00842883 lw a7,8(s0) + 800010fc: 0107083b addw a6,a4,a6 + 80001100: b35ff06f j 80000c34 + 80001104: 02043583 ld a1,32(s0) + 80001108: 002d1d13 slli s10,s10,0x2 + 8000110c: 02843783 ld a5,40(s0) + 80001110: 01a58d33 add s10,a1,s10 + 80001114: 000d2d03 lw s10,0(s10) + 80001118: 00778633 add a2,a5,t2 + 8000111c: e15d16e3 bne s10,s5,80000f28 + 80001120: d73058e3 blez s3,80000e90 + 80001124: 01043603 ld a2,16(s0) + 80001128: eddff06f j 80001004 + 8000112c: cf2052e3 blez s2,80000e10 + 80001130: 01043603 ld a2,16(s0) + 80001134: f01ff06f j 80001034 + 80001138: c4905ae3 blez s1,80000d8c + 8000113c: 01043603 ld a2,16(s0) + 80001140: f25ff06f j 80001064 + +0000000080001144 : + 80001144: 00007797 auipc a5,0x7 + 80001148: 98c7b783 ld a5,-1652(a5) # 80007ad0 + 8000114c: 0187a503 lw a0,24(a5) + 80001150: 00007797 auipc a5,0x7 + 80001154: 87c7a783 lw a5,-1924(a5) # 800079cc <_ZL3ans> + 80001158: 40f50533 sub a0,a0,a5 + 8000115c: 00153513 seqz a0,a0 + 80001160: 00008067 ret + +0000000080001164 <_ZL9radixPassPiS_S_ii>: + 80001164: fd010113 addi sp,sp,-48 + 80001168: 0017079b addiw a5,a4,1 + 8000116c: 02813023 sd s0,32(sp) + 80001170: 01413023 sd s4,0(sp) + 80001174: 00050413 mv s0,a0 + 80001178: 00070a13 mv s4,a4 + 8000117c: 00279513 slli a0,a5,0x2 + 80001180: 00913c23 sd s1,24(sp) + 80001184: 01213823 sd s2,16(sp) + 80001188: 01313423 sd s3,8(sp) + 8000118c: 02113423 sd ra,40(sp) + 80001190: 00058993 mv s3,a1 + 80001194: 00060493 mv s1,a2 + 80001198: 00068913 mv s2,a3 + 8000119c: b7cff0ef jal ra,80000518 + 800011a0: 0e0a4c63 bltz s4,80001298 <_ZL9radixPassPiS_S_ii+0x134> + 800011a4: 001a0713 addi a4,s4,1 + 800011a8: 00271713 slli a4,a4,0x2 + 800011ac: 00050793 mv a5,a0 + 800011b0: 00a70733 add a4,a4,a0 + 800011b4: 0007a023 sw zero,0(a5) + 800011b8: 00478793 addi a5,a5,4 + 800011bc: fef71ce3 bne a4,a5,800011b4 <_ZL9radixPassPiS_S_ii+0x50> + 800011c0: 05205663 blez s2,8000120c <_ZL9radixPassPiS_S_ii+0xa8> + 800011c4: fff9071b addiw a4,s2,-1 + 800011c8: 02071713 slli a4,a4,0x20 + 800011cc: 01e75793 srli a5,a4,0x1e + 800011d0: 00440713 addi a4,s0,4 + 800011d4: 00040813 mv a6,s0 + 800011d8: 00e78733 add a4,a5,a4 + 800011dc: 00082783 lw a5,0(a6) + 800011e0: 00480813 addi a6,a6,4 + 800011e4: 00279793 slli a5,a5,0x2 + 800011e8: 00f487b3 add a5,s1,a5 + 800011ec: 0007a783 lw a5,0(a5) + 800011f0: 00279793 slli a5,a5,0x2 + 800011f4: 00f507b3 add a5,a0,a5 + 800011f8: 0007a883 lw a7,0(a5) + 800011fc: 0018889b addiw a7,a7,1 + 80001200: 0117a023 sw a7,0(a5) + 80001204: fd071ce3 bne a4,a6,800011dc <_ZL9radixPassPiS_S_ii+0x78> + 80001208: 020a4663 bltz s4,80001234 <_ZL9radixPassPiS_S_ii+0xd0> + 8000120c: 00050793 mv a5,a0 + 80001210: 00000693 li a3,0 + 80001214: 00000813 li a6,0 + 80001218: 0007a603 lw a2,0(a5) + 8000121c: 0018081b addiw a6,a6,1 + 80001220: 00d7a023 sw a3,0(a5) + 80001224: 00d606bb addw a3,a2,a3 + 80001228: 00478793 addi a5,a5,4 + 8000122c: ff0a56e3 bge s4,a6,80001218 <_ZL9radixPassPiS_S_ii+0xb4> + 80001230: 05205463 blez s2,80001278 <_ZL9radixPassPiS_S_ii+0x114> + 80001234: 00040893 mv a7,s0 + 80001238: 00000813 li a6,0 + 8000123c: 0008a683 lw a3,0(a7) + 80001240: 0018081b addiw a6,a6,1 + 80001244: 00488893 addi a7,a7,4 + 80001248: 00269793 slli a5,a3,0x2 + 8000124c: 00f487b3 add a5,s1,a5 + 80001250: 0007a703 lw a4,0(a5) + 80001254: 00271713 slli a4,a4,0x2 + 80001258: 00e50733 add a4,a0,a4 + 8000125c: 00072783 lw a5,0(a4) # 3f4000 <_entry_offset+0x3f4000> + 80001260: 0017861b addiw a2,a5,1 + 80001264: 00279793 slli a5,a5,0x2 + 80001268: 00c72023 sw a2,0(a4) + 8000126c: 00f987b3 add a5,s3,a5 + 80001270: 00d7a023 sw a3,0(a5) + 80001274: fd2844e3 blt a6,s2,8000123c <_ZL9radixPassPiS_S_ii+0xd8> + 80001278: 02813083 ld ra,40(sp) + 8000127c: 02013403 ld s0,32(sp) + 80001280: 01813483 ld s1,24(sp) + 80001284: 01013903 ld s2,16(sp) + 80001288: 00813983 ld s3,8(sp) + 8000128c: 00013a03 ld s4,0(sp) + 80001290: 03010113 addi sp,sp,48 + 80001294: 00008067 ret + 80001298: f32046e3 bgtz s2,800011c4 <_ZL9radixPassPiS_S_ii+0x60> + 8000129c: fddff06f j 80001278 <_ZL9radixPassPiS_S_ii+0x114> + +00000000800012a0 <_Z11suffixArrayPiS_ii>: + 800012a0: f4010113 addi sp,sp,-192 + 800012a4: 09313c23 sd s3,152(sp) + 800012a8: 07813823 sd s8,112(sp) + 800012ac: 00050993 mv s3,a0 + 800012b0: 00058c13 mv s8,a1 + 800012b4: 0026051b addiw a0,a2,2 + 800012b8: 00300593 li a1,3 + 800012bc: 0a113c23 sd ra,184(sp) + 800012c0: 02c13423 sd a2,40(sp) + 800012c4: 02d13823 sd a3,48(sp) + 800012c8: 0a813823 sd s0,176(sp) + 800012cc: 0a913423 sd s1,168(sp) + 800012d0: 0b213023 sd s2,160(sp) + 800012d4: 00060493 mv s1,a2 + 800012d8: 09413823 sd s4,144(sp) + 800012dc: 09513423 sd s5,136(sp) + 800012e0: 09613023 sd s6,128(sp) + 800012e4: 07713c23 sd s7,120(sp) + 800012e8: 07913423 sd s9,104(sp) + 800012ec: 07a13023 sd s10,96(sp) + 800012f0: 01813823 sd s8,16(sp) + 800012f4: 05b13c23 sd s11,88(sp) + 800012f8: 648030ef jal ra,80004940 <__divdi3> + 800012fc: 00300593 li a1,3 + 80001300: 00050413 mv s0,a0 + 80001304: 00048513 mv a0,s1 + 80001308: 638030ef jal ra,80004940 <__divdi3> + 8000130c: 0004041b sext.w s0,s0 + 80001310: 00850abb addw s5,a0,s0 + 80001314: 003a8a1b addiw s4,s5,3 + 80001318: 002a1a13 slli s4,s4,0x2 + 8000131c: 000a0513 mv a0,s4 + 80001320: 002a8913 addi s2,s5,2 + 80001324: 9f4ff0ef jal ra,80000518 + 80001328: 00291913 slli s2,s2,0x2 + 8000132c: 012507b3 add a5,a0,s2 + 80001330: ffc90c93 addi s9,s2,-4 + 80001334: 0007a023 sw zero,0(a5) + 80001338: ff890b93 addi s7,s2,-8 + 8000133c: 019507b3 add a5,a0,s9 + 80001340: 0007a023 sw zero,0(a5) + 80001344: 017507b3 add a5,a0,s7 + 80001348: 00048c13 mv s8,s1 + 8000134c: 0007a023 sw zero,0(a5) + 80001350: 00050493 mv s1,a0 + 80001354: 000a0513 mv a0,s4 + 80001358: 9c0ff0ef jal ra,80000518 + 8000135c: 01250933 add s2,a0,s2 + 80001360: 00092023 sw zero,0(s2) + 80001364: 01950cb3 add s9,a0,s9 + 80001368: 000ca023 sw zero,0(s9) + 8000136c: 00241913 slli s2,s0,0x2 + 80001370: 01750bb3 add s7,a0,s7 + 80001374: 000ba023 sw zero,0(s7) + 80001378: 00050a13 mv s4,a0 + 8000137c: 00090513 mv a0,s2 + 80001380: 998ff0ef jal ra,80000518 + 80001384: 00050c93 mv s9,a0 + 80001388: 00090513 mv a0,s2 + 8000138c: 01913c23 sd s9,24(sp) + 80001390: 988ff0ef jal ra,80000518 + 80001394: 00050b93 mv s7,a0 + 80001398: 00300593 li a1,3 + 8000139c: 001c051b addiw a0,s8,1 + 800013a0: 03713023 sd s7,32(sp) + 800013a4: 59c030ef jal ra,80004940 <__divdi3> + 800013a8: 40a4093b subw s2,s0,a0 + 800013ac: 01890d3b addw s10,s2,s8 + 800013b0: 000a8b13 mv s6,s5 + 800013b4: 00000c13 li s8,0 + 800013b8: 00000b93 li s7,0 + 800013bc: 05a05463 blez s10,80001404 <_Z11suffixArrayPiS_ii+0x164> + 800013c0: 001c0c1b addiw s8,s8,1 + 800013c4: 00300593 li a1,3 + 800013c8: 000c0c93 mv s9,s8 + 800013cc: 000c0513 mv a0,s8 + 800013d0: 03ac0a63 beq s8,s10,80001404 <_Z11suffixArrayPiS_ii+0x164> + 800013d4: 5f0030ef jal ra,800049c4 <__moddi3> + 800013d8: 002b9793 slli a5,s7,0x2 + 800013dc: 0005051b sext.w a0,a0 + 800013e0: 00f487b3 add a5,s1,a5 + 800013e4: fc050ee3 beqz a0,800013c0 <_Z11suffixArrayPiS_ii+0x120> + 800013e8: 001c0c1b addiw s8,s8,1 + 800013ec: 0197a023 sw s9,0(a5) + 800013f0: 001b8b9b addiw s7,s7,1 + 800013f4: 00300593 li a1,3 + 800013f8: 000c0c93 mv s9,s8 + 800013fc: 000c0513 mv a0,s8 + 80001400: fdac1ae3 bne s8,s10,800013d4 <_Z11suffixArrayPiS_ii+0x134> + 80001404: 03013b83 ld s7,48(sp) + 80001408: 00898613 addi a2,s3,8 + 8000140c: 000a0593 mv a1,s4 + 80001410: 00048513 mv a0,s1 + 80001414: 000b8713 mv a4,s7 + 80001418: 000a8693 mv a3,s5 + 8000141c: d49ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 80001420: 000b8713 mv a4,s7 + 80001424: 000a8693 mv a3,s5 + 80001428: 00498613 addi a2,s3,4 + 8000142c: 00048593 mv a1,s1 + 80001430: 000a0513 mv a0,s4 + 80001434: d31ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 80001438: 000b8713 mv a4,s7 + 8000143c: 000a8693 mv a3,s5 + 80001440: 00098613 mv a2,s3 + 80001444: 000a0593 mv a1,s4 + 80001448: 00048513 mv a0,s1 + 8000144c: d19ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 80001450: 13505c63 blez s5,80001588 <_Z11suffixArrayPiS_ii+0x2e8> + 80001454: fffb089b addiw a7,s6,-1 + 80001458: 02089893 slli a7,a7,0x20 + 8000145c: 0208d893 srli a7,a7,0x20 + 80001460: 00188893 addi a7,a7,1 + 80001464: 00289893 slli a7,a7,0x2 + 80001468: 000a0d93 mv s11,s4 + 8000146c: 01488d33 add s10,a7,s4 + 80001470: 000a0613 mv a2,s4 + 80001474: fff00b13 li s6,-1 + 80001478: fff00b93 li s7,-1 + 8000147c: fff00c93 li s9,-1 + 80001480: 00000c13 li s8,0 + 80001484: 0600006f j 800014e4 <_Z11suffixArrayPiS_ii+0x244> + 80001488: 001c0c1b addiw s8,s8,1 + 8000148c: 000f0c93 mv s9,t5 + 80001490: 00c13423 sd a2,8(sp) + 80001494: 00e13023 sd a4,0(sp) + 80001498: 4a8030ef jal ra,80004940 <__divdi3> + 8000149c: 00013703 ld a4,0(sp) + 800014a0: 00050793 mv a5,a0 + 800014a4: 0007879b sext.w a5,a5 + 800014a8: 00070513 mv a0,a4 + 800014ac: 00300593 li a1,3 + 800014b0: 00f13023 sd a5,0(sp) + 800014b4: 510030ef jal ra,800049c4 <__moddi3> + 800014b8: 00013783 ld a5,0(sp) + 800014bc: 0005051b sext.w a0,a0 + 800014c0: 00100693 li a3,1 + 800014c4: 00f4073b addw a4,s0,a5 + 800014c8: 00271713 slli a4,a4,0x2 + 800014cc: 00813603 ld a2,8(sp) + 800014d0: 00e48733 add a4,s1,a4 + 800014d4: 04d50463 beq a0,a3,8000151c <_Z11suffixArrayPiS_ii+0x27c> + 800014d8: 01872023 sw s8,0(a4) + 800014dc: 00460613 addi a2,a2,4 + 800014e0: 04cd0863 beq s10,a2,80001530 <_Z11suffixArrayPiS_ii+0x290> + 800014e4: 00062703 lw a4,0(a2) + 800014e8: 000b8f93 mv t6,s7 + 800014ec: 000b0293 mv t0,s6 + 800014f0: 00271793 slli a5,a4,0x2 + 800014f4: 00f987b3 add a5,s3,a5 + 800014f8: 0007af03 lw t5,0(a5) + 800014fc: 0047ab83 lw s7,4(a5) + 80001500: 0087ab03 lw s6,8(a5) + 80001504: 00300593 li a1,3 + 80001508: 00070513 mv a0,a4 + 8000150c: f79f1ee3 bne t5,s9,80001488 <_Z11suffixArrayPiS_ii+0x1e8> + 80001510: f77f9ce3 bne t6,s7,80001488 <_Z11suffixArrayPiS_ii+0x1e8> + 80001514: f7629ae3 bne t0,s6,80001488 <_Z11suffixArrayPiS_ii+0x1e8> + 80001518: f79ff06f j 80001490 <_Z11suffixArrayPiS_ii+0x1f0> + 8000151c: 00279793 slli a5,a5,0x2 + 80001520: 00f487b3 add a5,s1,a5 + 80001524: 0187a023 sw s8,0(a5) + 80001528: 00460613 addi a2,a2,4 + 8000152c: facd1ce3 bne s10,a2,800014e4 <_Z11suffixArrayPiS_ii+0x244> + 80001530: 00048613 mv a2,s1 + 80001534: 00000713 li a4,0 + 80001538: 315c4863 blt s8,s5,80001848 <_Z11suffixArrayPiS_ii+0x5a8> + 8000153c: 00062783 lw a5,0(a2) + 80001540: 00460613 addi a2,a2,4 + 80001544: 00279793 slli a5,a5,0x2 + 80001548: 00fa07b3 add a5,s4,a5 + 8000154c: fee7ae23 sw a4,-4(a5) + 80001550: 0017071b addiw a4,a4,1 + 80001554: feea94e3 bne s5,a4,8000153c <_Z11suffixArrayPiS_ii+0x29c> + 80001558: 00000613 li a2,0 + 8000155c: 000da703 lw a4,0(s11) + 80001560: 01813583 ld a1,24(sp) + 80001564: 00261793 slli a5,a2,0x2 + 80001568: 0017169b slliw a3,a4,0x1 + 8000156c: 004d8d93 addi s11,s11,4 + 80001570: 00f587b3 add a5,a1,a5 + 80001574: 00e686bb addw a3,a3,a4 + 80001578: 00875663 bge a4,s0,80001584 <_Z11suffixArrayPiS_ii+0x2e4> + 8000157c: 00d7a023 sw a3,0(a5) + 80001580: 0016061b addiw a2,a2,1 + 80001584: fdad9ce3 bne s11,s10,8000155c <_Z11suffixArrayPiS_ii+0x2bc> + 80001588: 02013b03 ld s6,32(sp) + 8000158c: 03013703 ld a4,48(sp) + 80001590: 01813503 ld a0,24(sp) + 80001594: 00040693 mv a3,s0 + 80001598: 00098613 mv a2,s3 + 8000159c: 000b0593 mv a1,s6 + 800015a0: bc5ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 800015a4: 02813783 ld a5,40(sp) + 800015a8: 0ef05463 blez a5,80001690 <_Z11suffixArrayPiS_ii+0x3f0> + 800015ac: 000a879b sext.w a5,s5 + 800015b0: 02f13c23 sd a5,56(sp) + 800015b4: fffa879b addiw a5,s5,-1 + 800015b8: 04f12223 sw a5,68(sp) + 800015bc: 004a0793 addi a5,s4,4 + 800015c0: 04f13423 sd a5,72(sp) + 800015c4: 0004079b sext.w a5,s0 + 800015c8: 00f13423 sd a5,8(sp) + 800015cc: fff4079b addiw a5,s0,-1 + 800015d0: 00f12c23 sw a5,24(sp) + 800015d4: 004b0793 addi a5,s6,4 + 800015d8: 00000d13 li s10,0 + 800015dc: 00000c93 li s9,0 + 800015e0: 02f13823 sd a5,48(sp) + 800015e4: 02013703 ld a4,32(sp) + 800015e8: 002c9793 slli a5,s9,0x2 + 800015ec: 00291613 slli a2,s2,0x2 + 800015f0: 00f70c33 add s8,a4,a5 + 800015f4: 000c2b83 lw s7,0(s8) + 800015f8: 00ca0b33 add s6,s4,a2 + 800015fc: 000b2783 lw a5,0(s6) + 80001600: 002b9813 slli a6,s7,0x2 + 80001604: 00300593 li a1,3 + 80001608: 000b8513 mv a0,s7 + 8000160c: 00f13023 sd a5,0(sp) + 80001610: 01098db3 add s11,s3,a6 + 80001614: 32c030ef jal ra,80004940 <__divdi3> + 80001618: 00013783 ld a5,0(sp) + 8000161c: 000dae83 lw t4,0(s11) + 80001620: 0005071b sext.w a4,a0 + 80001624: 1c87d463 bge a5,s0,800017ec <_Z11suffixArrayPiS_ii+0x54c> + 80001628: 0017959b slliw a1,a5,0x1 + 8000162c: 00f585bb addw a1,a1,a5 + 80001630: 0015859b addiw a1,a1,1 + 80001634: 00259513 slli a0,a1,0x2 + 80001638: 00a98533 add a0,s3,a0 + 8000163c: 008787bb addw a5,a5,s0 + 80001640: 00052503 lw a0,0(a0) + 80001644: 00279793 slli a5,a5,0x2 + 80001648: 00271713 slli a4,a4,0x2 + 8000164c: 00f487b3 add a5,s1,a5 + 80001650: 00e48733 add a4,s1,a4 + 80001654: 0007a803 lw a6,0(a5) + 80001658: 00072783 lw a5,0(a4) + 8000165c: 11d54663 blt a0,t4,80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 80001660: 11d50263 beq a0,t4,80001764 <_Z11suffixArrayPiS_ii+0x4c4> + 80001664: 01013783 ld a5,16(sp) + 80001668: 002d1693 slli a3,s10,0x2 + 8000166c: 001d051b addiw a0,s10,1 + 80001670: 00d787b3 add a5,a5,a3 + 80001674: 0177a023 sw s7,0(a5) + 80001678: 001c8c9b addiw s9,s9,1 + 8000167c: 0005079b sext.w a5,a0 + 80001680: 05940663 beq s0,s9,800016cc <_Z11suffixArrayPiS_ii+0x42c> + 80001684: 00078d13 mv s10,a5 + 80001688: 02813783 ld a5,40(sp) + 8000168c: f4fd4ce3 blt s10,a5,800015e4 <_Z11suffixArrayPiS_ii+0x344> + 80001690: 0b813083 ld ra,184(sp) + 80001694: 0b013403 ld s0,176(sp) + 80001698: 0a813483 ld s1,168(sp) + 8000169c: 0a013903 ld s2,160(sp) + 800016a0: 09813983 ld s3,152(sp) + 800016a4: 09013a03 ld s4,144(sp) + 800016a8: 08813a83 ld s5,136(sp) + 800016ac: 08013b03 ld s6,128(sp) + 800016b0: 07813b83 ld s7,120(sp) + 800016b4: 07013c03 ld s8,112(sp) + 800016b8: 06813c83 ld s9,104(sp) + 800016bc: 06013d03 ld s10,96(sp) + 800016c0: 05813d83 ld s11,88(sp) + 800016c4: 0c010113 addi sp,sp,192 + 800016c8: 00008067 ret + 800016cc: 1b595c63 bge s2,s5,80001884 <_Z11suffixArrayPiS_ii+0x5e4> + 800016d0: 04412783 lw a5,68(sp) + 800016d4: 00468693 addi a3,a3,4 + 800016d8: 000b0613 mv a2,s6 + 800016dc: 41278e3b subw t3,a5,s2 + 800016e0: 01013783 ld a5,16(sp) + 800016e4: 020e1e13 slli t3,t3,0x20 + 800016e8: 020e5e13 srli t3,t3,0x20 + 800016ec: 00d786b3 add a3,a5,a3 + 800016f0: 04813783 ld a5,72(sp) + 800016f4: 012e0e33 add t3,t3,s2 + 800016f8: 002e1e13 slli t3,t3,0x2 + 800016fc: 0009089b sext.w a7,s2 + 80001700: 00fe0e33 add t3,t3,a5 + 80001704: 0180006f j 8000171c <_Z11suffixArrayPiS_ii+0x47c> + 80001708: 0015879b addiw a5,a1,1 + 8000170c: 00f6a023 sw a5,0(a3) + 80001710: 00460613 addi a2,a2,4 + 80001714: 00468693 addi a3,a3,4 + 80001718: 02ce0a63 beq t3,a2,8000174c <_Z11suffixArrayPiS_ii+0x4ac> + 8000171c: 00062703 lw a4,0(a2) + 80001720: 4087083b subw a6,a4,s0 + 80001724: 0017159b slliw a1,a4,0x1 + 80001728: 0018179b slliw a5,a6,0x1 + 8000172c: 00e585bb addw a1,a1,a4 + 80001730: 010787bb addw a5,a5,a6 + 80001734: fc874ae3 blt a4,s0,80001708 <_Z11suffixArrayPiS_ii+0x468> + 80001738: 0027879b addiw a5,a5,2 + 8000173c: 00f6a023 sw a5,0(a3) + 80001740: 00460613 addi a2,a2,4 + 80001744: 00468693 addi a3,a3,4 + 80001748: fcce1ae3 bne t3,a2,8000171c <_Z11suffixArrayPiS_ii+0x47c> + 8000174c: 03813783 ld a5,56(sp) + 80001750: 411508bb subw a7,a0,a7 + 80001754: 000a8913 mv s2,s5 + 80001758: 00f888bb addw a7,a7,a5 + 8000175c: 00188d1b addiw s10,a7,1 + 80001760: f29ff06f j 80001688 <_Z11suffixArrayPiS_ii+0x3e8> + 80001764: f107c0e3 blt a5,a6,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001768: 01013783 ld a5,16(sp) + 8000176c: 002d1713 slli a4,s10,0x2 + 80001770: 001d061b addiw a2,s10,1 + 80001774: 00e787b3 add a5,a5,a4 + 80001778: 00b7a023 sw a1,0(a5) + 8000177c: 0019091b addiw s2,s2,1 + 80001780: 0006079b sext.w a5,a2 + 80001784: f12a90e3 bne s5,s2,80001684 <_Z11suffixArrayPiS_ii+0x3e4> + 80001788: 0e8cde63 bge s9,s0,80001884 <_Z11suffixArrayPiS_ii+0x5e4> + 8000178c: 01812783 lw a5,24(sp) + 80001790: 01013683 ld a3,16(sp) + 80001794: 00470713 addi a4,a4,4 + 80001798: 419785bb subw a1,a5,s9 + 8000179c: 02059593 slli a1,a1,0x20 + 800017a0: 0205d593 srli a1,a1,0x20 + 800017a4: 00e68733 add a4,a3,a4 + 800017a8: 03013683 ld a3,48(sp) + 800017ac: 019585b3 add a1,a1,s9 + 800017b0: 00259593 slli a1,a1,0x2 + 800017b4: 000c0793 mv a5,s8 + 800017b8: 000c889b sext.w a7,s9 + 800017bc: 00d585b3 add a1,a1,a3 + 800017c0: 0007a683 lw a3,0(a5) + 800017c4: 00478793 addi a5,a5,4 + 800017c8: 00470713 addi a4,a4,4 + 800017cc: fed72e23 sw a3,-4(a4) + 800017d0: fef598e3 bne a1,a5,800017c0 <_Z11suffixArrayPiS_ii+0x520> + 800017d4: 00813783 ld a5,8(sp) + 800017d8: 411608bb subw a7,a2,a7 + 800017dc: 00040c93 mv s9,s0 + 800017e0: 00f888bb addw a7,a7,a5 + 800017e4: 00188d1b addiw s10,a7,1 + 800017e8: ea1ff06f j 80001688 <_Z11suffixArrayPiS_ii+0x3e8> + 800017ec: 408787bb subw a5,a5,s0 + 800017f0: 0017959b slliw a1,a5,0x1 + 800017f4: 00f585bb addw a1,a1,a5 + 800017f8: 0025859b addiw a1,a1,2 + 800017fc: 00259f13 slli t5,a1,0x2 + 80001800: 01e98f33 add t5,s3,t5 + 80001804: 000f2f83 lw t6,0(t5) + 80001808: 00178793 addi a5,a5,1 + 8000180c: 00e4073b addw a4,s0,a4 + 80001810: 00279793 slli a5,a5,0x2 + 80001814: 00271713 slli a4,a4,0x2 + 80001818: 00f487b3 add a5,s1,a5 + 8000181c: 00e48733 add a4,s1,a4 + 80001820: 004f2503 lw a0,4(t5) + 80001824: 00072703 lw a4,0(a4) + 80001828: 0007af03 lw t5,0(a5) + 8000182c: 004da783 lw a5,4(s11) + 80001830: f3dfcce3 blt t6,t4,80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 80001834: e3df98e3 bne t6,t4,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001838: f2f548e3 blt a0,a5,80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 8000183c: e2f514e3 bne a0,a5,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001840: e3e742e3 blt a4,t5,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001844: f25ff06f j 80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 80001848: 000c0693 mv a3,s8 + 8000184c: 000a8613 mv a2,s5 + 80001850: 000a0593 mv a1,s4 + 80001854: 00048513 mv a0,s1 + 80001858: a49ff0ef jal ra,800012a0 <_Z11suffixArrayPiS_ii> + 8000185c: 000a0693 mv a3,s4 + 80001860: 00000713 li a4,0 + 80001864: 0006a783 lw a5,0(a3) + 80001868: 0017071b addiw a4,a4,1 + 8000186c: 00468693 addi a3,a3,4 + 80001870: 00279793 slli a5,a5,0x2 + 80001874: 00f487b3 add a5,s1,a5 + 80001878: 00e7a023 sw a4,0(a5) + 8000187c: ff5714e3 bne a4,s5,80001864 <_Z11suffixArrayPiS_ii+0x5c4> + 80001880: cd9ff06f j 80001558 <_Z11suffixArrayPiS_ii+0x2b8> + 80001884: 002d0d1b addiw s10,s10,2 + 80001888: e01ff06f j 80001688 <_Z11suffixArrayPiS_ii+0x3e8> + +000000008000188c : + 8000188c: 00006797 auipc a5,0x6 + 80001890: 2447b783 ld a5,580(a5) # 80007ad0 + 80001894: 0007a783 lw a5,0(a5) + 80001898: fd010113 addi sp,sp,-48 + 8000189c: 01213823 sd s2,16(sp) + 800018a0: 00100513 li a0,1 + 800018a4: 00006917 auipc s2,0x6 + 800018a8: 12c90913 addi s2,s2,300 # 800079d0 <_ZL1N> + 800018ac: 02113423 sd ra,40(sp) + 800018b0: 00f92023 sw a5,0(s2) + 800018b4: 01313423 sd s3,8(sp) + 800018b8: 02813023 sd s0,32(sp) + 800018bc: 00913c23 sd s1,24(sp) + 800018c0: cf5fe0ef jal ra,800005b4 + 800018c4: 00092503 lw a0,0(s2) + 800018c8: 00006997 auipc s3,0x6 + 800018cc: 11098993 addi s3,s3,272 # 800079d8 <_ZL1s> + 800018d0: 00a5051b addiw a0,a0,10 + 800018d4: 00251513 slli a0,a0,0x2 + 800018d8: c41fe0ef jal ra,80000518 + 800018dc: 00092783 lw a5,0(s2) + 800018e0: 00a9b023 sd a0,0(s3) + 800018e4: 00a7851b addiw a0,a5,10 + 800018e8: 00251513 slli a0,a0,0x2 + 800018ec: c2dfe0ef jal ra,80000518 + 800018f0: 00092783 lw a5,0(s2) + 800018f4: 00006717 auipc a4,0x6 + 800018f8: 0ea73623 sd a0,236(a4) # 800079e0 <_ZL2sa> + 800018fc: 02f05e63 blez a5,80001938 + 80001900: 00000413 li s0,0 + 80001904: cc5fe0ef jal ra,800005c8 + 80001908: 0009b483 ld s1,0(s3) + 8000190c: 02051513 slli a0,a0,0x20 + 80001910: 00241793 slli a5,s0,0x2 + 80001914: 01a00593 li a1,26 + 80001918: 02055513 srli a0,a0,0x20 + 8000191c: 00f484b3 add s1,s1,a5 + 80001920: 070030ef jal ra,80004990 <__umoddi3> + 80001924: 00092703 lw a4,0(s2) + 80001928: 00140413 addi s0,s0,1 + 8000192c: 00a4a023 sw a0,0(s1) + 80001930: 0004079b sext.w a5,s0 + 80001934: fce7c8e3 blt a5,a4,80001904 + 80001938: 02813083 ld ra,40(sp) + 8000193c: 02013403 ld s0,32(sp) + 80001940: 01813483 ld s1,24(sp) + 80001944: 01013903 ld s2,16(sp) + 80001948: 00813983 ld s3,8(sp) + 8000194c: 03010113 addi sp,sp,48 + 80001950: 00008067 ret + +0000000080001954 : + 80001954: 01a00693 li a3,26 + 80001958: 00006617 auipc a2,0x6 + 8000195c: 07862603 lw a2,120(a2) # 800079d0 <_ZL1N> + 80001960: 00006597 auipc a1,0x6 + 80001964: 0805b583 ld a1,128(a1) # 800079e0 <_ZL2sa> + 80001968: 00006517 auipc a0,0x6 + 8000196c: 07053503 ld a0,112(a0) # 800079d8 <_ZL1s> + 80001970: 931ff06f j 800012a0 <_Z11suffixArrayPiS_ii> + +0000000080001974 : + 80001974: 00006597 auipc a1,0x6 + 80001978: 05c5a583 lw a1,92(a1) # 800079d0 <_ZL1N> + 8000197c: 00006517 auipc a0,0x6 + 80001980: 06453503 ld a0,100(a0) # 800079e0 <_ZL2sa> + 80001984: 00259593 slli a1,a1,0x2 + 80001988: ff010113 addi sp,sp,-16 + 8000198c: 00b505b3 add a1,a0,a1 + 80001990: 00113423 sd ra,8(sp) + 80001994: c85fe0ef jal ra,80000618 + 80001998: 00006797 auipc a5,0x6 + 8000199c: 1387b783 ld a5,312(a5) # 80007ad0 + 800019a0: 0187a783 lw a5,24(a5) + 800019a4: 00813083 ld ra,8(sp) + 800019a8: 0005051b sext.w a0,a0 + 800019ac: 40a78533 sub a0,a5,a0 + 800019b0: 00153513 seqz a0,a0 + 800019b4: 01010113 addi sp,sp,16 + 800019b8: 00008067 ret + +00000000800019bc : + 800019bc: 00008067 ret + +00000000800019c0 : + 800019c0: 00006797 auipc a5,0x6 + 800019c4: 1107b783 ld a5,272(a5) # 80007ad0 + 800019c8: 0187a503 lw a0,24(a5) + 800019cc: 00006797 auipc a5,0x6 + 800019d0: 01c7a783 lw a5,28(a5) # 800079e8 <_ZL3ans> + 800019d4: 40f50533 sub a0,a0,a5 + 800019d8: 00153513 seqz a0,a0 + 800019dc: 00008067 ret + +00000000800019e0 <_ZN8N_puzzleILi4EEC1Ev>: + 800019e0: f6010113 addi sp,sp,-160 + 800019e4: 07613023 sd s6,96(sp) + 800019e8: 08113c23 sd ra,152(sp) + 800019ec: 08813823 sd s0,144(sp) + 800019f0: 08913423 sd s1,136(sp) + 800019f4: 09213023 sd s2,128(sp) + 800019f8: 07313c23 sd s3,120(sp) + 800019fc: 07413823 sd s4,112(sp) + 80001a00: 07513423 sd s5,104(sp) + 80001a04: 05713c23 sd s7,88(sp) + 80001a08: 05813823 sd s8,80(sp) + 80001a0c: 05913423 sd s9,72(sp) + 80001a10: 00100793 li a5,1 + 80001a14: 00f50023 sb a5,0(a0) + 80001a18: 00050b13 mv s6,a0 + 80001a1c: 000501a3 sb zero,3(a0) + 80001a20: 00010713 mv a4,sp + 80001a24: 00000793 li a5,0 + 80001a28: 01000693 li a3,16 + 80001a2c: 00f72023 sw a5,0(a4) + 80001a30: 0017879b addiw a5,a5,1 + 80001a34: 00470713 addi a4,a4,4 + 80001a38: fed79ae3 bne a5,a3,80001a2c <_ZN8N_puzzleILi4EEC1Ev+0x4c> + 80001a3c: 03c10a13 addi s4,sp,60 + 80001a40: 000b0413 mv s0,s6 + 80001a44: 00000993 li s3,0 + 80001a48: 00000c93 li s9,0 + 80001a4c: 00400913 li s2,4 + 80001a50: ff000a93 li s5,-16 + 80001a54: 000a0c13 mv s8,s4 + 80001a58: 00000b93 li s7,0 + 80001a5c: 0109849b addiw s1,s3,16 + 80001a60: b69fe0ef jal ra,800005c8 + 80001a64: 417485bb subw a1,s1,s7 + 80001a68: 02059593 slli a1,a1,0x20 + 80001a6c: 02051513 slli a0,a0,0x20 + 80001a70: 0205d593 srli a1,a1,0x20 + 80001a74: 02055513 srli a0,a0,0x20 + 80001a78: 719020ef jal ra,80004990 <__umoddi3> + 80001a7c: 0005051b sext.w a0,a0 + 80001a80: 00251513 slli a0,a0,0x2 + 80001a84: 04010793 addi a5,sp,64 + 80001a88: 00a787b3 add a5,a5,a0 + 80001a8c: fc07a583 lw a1,-64(a5) + 80001a90: 000b871b sext.w a4,s7 + 80001a94: 01740833 add a6,s0,s7 + 80001a98: fff5879b addiw a5,a1,-1 + 80001a9c: 41f7d69b sraiw a3,a5,0x1f + 80001aa0: 01e6d61b srliw a2,a3,0x1e + 80001aa4: 00f607bb addw a5,a2,a5 + 80001aa8: 0037f693 andi a3,a5,3 + 80001aac: 40c686bb subw a3,a3,a2 + 80001ab0: 4027d79b sraiw a5,a5,0x2 + 80001ab4: 419787bb subw a5,a5,s9 + 80001ab8: 40e6873b subw a4,a3,a4 + 80001abc: 41f7d61b sraiw a2,a5,0x1f + 80001ac0: 41f7569b sraiw a3,a4,0x1f + 80001ac4: 00f647b3 xor a5,a2,a5 + 80001ac8: 00e6c733 xor a4,a3,a4 + 80001acc: 40c787bb subw a5,a5,a2 + 80001ad0: 40d7073b subw a4,a4,a3 + 80001ad4: 00b80223 sb a1,4(a6) + 80001ad8: 00e787bb addw a5,a5,a4 + 80001adc: 0c059063 bnez a1,80001b9c <_ZN8N_puzzleILi4EEC1Ev+0x1bc> + 80001ae0: 019b00a3 sb s9,1(s6) + 80001ae4: 017b0123 sb s7,2(s6) + 80001ae8: 000c2783 lw a5,0(s8) + 80001aec: 04010713 addi a4,sp,64 + 80001af0: 00a70533 add a0,a4,a0 + 80001af4: 001b8b93 addi s7,s7,1 + 80001af8: fcf52023 sw a5,-64(a0) + 80001afc: ffcc0c13 addi s8,s8,-4 + 80001b00: f72b90e3 bne s7,s2,80001a60 <_ZN8N_puzzleILi4EEC1Ev+0x80> + 80001b04: ffc9899b addiw s3,s3,-4 + 80001b08: 001c8c9b addiw s9,s9,1 + 80001b0c: ff0a0a13 addi s4,s4,-16 + 80001b10: 00440413 addi s0,s0,4 + 80001b14: f55990e3 bne s3,s5,80001a54 <_ZN8N_puzzleILi4EEC1Ev+0x74> + 80001b18: 000b2a23 sw zero,20(s6) + 80001b1c: 004b0593 addi a1,s6,4 + 80001b20: 014b0513 addi a0,s6,20 + 80001b24: 00000713 li a4,0 + 80001b28: ffc58693 addi a3,a1,-4 + 80001b2c: 0057179b slliw a5,a4,0x5 + 80001b30: 40e787bb subw a5,a5,a4 + 80001b34: 0027979b slliw a5,a5,0x2 + 80001b38: 40e787bb subw a5,a5,a4 + 80001b3c: 0027979b slliw a5,a5,0x2 + 80001b40: 00468603 lb a2,4(a3) + 80001b44: 00e787bb addw a5,a5,a4 + 80001b48: 0027979b slliw a5,a5,0x2 + 80001b4c: 00e7873b addw a4,a5,a4 + 80001b50: 00168693 addi a3,a3,1 + 80001b54: 00c7073b addw a4,a4,a2 + 80001b58: fcb69ae3 bne a3,a1,80001b2c <_ZN8N_puzzleILi4EEC1Ev+0x14c> + 80001b5c: 00468593 addi a1,a3,4 + 80001b60: fcb514e3 bne a0,a1,80001b28 <_ZN8N_puzzleILi4EEC1Ev+0x148> + 80001b64: 09813083 ld ra,152(sp) + 80001b68: 09013403 ld s0,144(sp) + 80001b6c: 00eb2a23 sw a4,20(s6) + 80001b70: 08813483 ld s1,136(sp) + 80001b74: 08013903 ld s2,128(sp) + 80001b78: 07813983 ld s3,120(sp) + 80001b7c: 07013a03 ld s4,112(sp) + 80001b80: 06813a83 ld s5,104(sp) + 80001b84: 06013b03 ld s6,96(sp) + 80001b88: 05813b83 ld s7,88(sp) + 80001b8c: 05013c03 ld s8,80(sp) + 80001b90: 04813c83 ld s9,72(sp) + 80001b94: 0a010113 addi sp,sp,160 + 80001b98: 00008067 ret + 80001b9c: 003b4703 lbu a4,3(s6) + 80001ba0: 00e787bb addw a5,a5,a4 + 80001ba4: 00fb01a3 sb a5,3(s6) + 80001ba8: f41ff06f j 80001ae8 <_ZN8N_puzzleILi4EEC1Ev+0x108> + +0000000080001bac <_ZN8N_puzzleILi4EEC1EPi>: + 80001bac: fe010113 addi sp,sp,-32 + 80001bb0: 00100793 li a5,1 + 80001bb4: 00010e93 mv t4,sp + 80001bb8: 00f50023 sb a5,0(a0) + 80001bbc: 00813c23 sd s0,24(sp) + 80001bc0: 000501a3 sb zero,3(a0) + 80001bc4: 01010f13 addi t5,sp,16 + 80001bc8: 000e8793 mv a5,t4 + 80001bcc: 00078023 sb zero,0(a5) + 80001bd0: 00178793 addi a5,a5,1 + 80001bd4: ffe79ce3 bne a5,t5,80001bcc <_ZN8N_puzzleILi4EEC1EPi+0x20> + 80001bd8: 00050f93 mv t6,a0 + 80001bdc: 00000e13 li t3,0 + 80001be0: 00100393 li t2,1 + 80001be4: 00400293 li t0,4 + 80001be8: 00058313 mv t1,a1 + 80001bec: 00000613 li a2,0 + 80001bf0: 00032803 lw a6,0(t1) + 80001bf4: 0006071b sext.w a4,a2 + 80001bf8: 00cf8433 add s0,t6,a2 + 80001bfc: fff8079b addiw a5,a6,-1 + 80001c00: 41f7d69b sraiw a3,a5,0x1f + 80001c04: 01e6d89b srliw a7,a3,0x1e + 80001c08: 00f887bb addw a5,a7,a5 + 80001c0c: 0037f693 andi a3,a5,3 + 80001c10: 411686bb subw a3,a3,a7 + 80001c14: 40e6873b subw a4,a3,a4 + 80001c18: 41f7569b sraiw a3,a4,0x1f + 80001c1c: 4027d79b sraiw a5,a5,0x2 + 80001c20: 41c787bb subw a5,a5,t3 + 80001c24: 00e6c733 xor a4,a3,a4 + 80001c28: 41f7d89b sraiw a7,a5,0x1f + 80001c2c: 40d7073b subw a4,a4,a3 + 80001c30: 01010693 addi a3,sp,16 + 80001c34: 00f8c7b3 xor a5,a7,a5 + 80001c38: 010686b3 add a3,a3,a6 + 80001c3c: 411787bb subw a5,a5,a7 + 80001c40: 01040223 sb a6,4(s0) + 80001c44: fe768823 sb t2,-16(a3) + 80001c48: 00e787bb addw a5,a5,a4 + 80001c4c: 08081a63 bnez a6,80001ce0 <_ZN8N_puzzleILi4EEC1EPi+0x134> + 80001c50: 01c500a3 sb t3,1(a0) + 80001c54: 00c50123 sb a2,2(a0) + 80001c58: 00160613 addi a2,a2,1 + 80001c5c: 00430313 addi t1,t1,4 + 80001c60: f85618e3 bne a2,t0,80001bf0 <_ZN8N_puzzleILi4EEC1EPi+0x44> + 80001c64: 001e0e1b addiw t3,t3,1 + 80001c68: 01058593 addi a1,a1,16 + 80001c6c: 004f8f93 addi t6,t6,4 + 80001c70: f65e1ce3 bne t3,t0,80001be8 <_ZN8N_puzzleILi4EEC1EPi+0x3c> + 80001c74: 000ec783 lbu a5,0(t4) + 80001c78: 001e8e93 addi t4,t4,1 + 80001c7c: 06078a63 beqz a5,80001cf0 <_ZN8N_puzzleILi4EEC1EPi+0x144> + 80001c80: ffee9ae3 bne t4,t5,80001c74 <_ZN8N_puzzleILi4EEC1EPi+0xc8> + 80001c84: 00052a23 sw zero,20(a0) + 80001c88: 00450593 addi a1,a0,4 + 80001c8c: 01450813 addi a6,a0,20 + 80001c90: 00000713 li a4,0 + 80001c94: ffc58693 addi a3,a1,-4 + 80001c98: 0057179b slliw a5,a4,0x5 + 80001c9c: 40e787bb subw a5,a5,a4 + 80001ca0: 0027979b slliw a5,a5,0x2 + 80001ca4: 40e787bb subw a5,a5,a4 + 80001ca8: 0027979b slliw a5,a5,0x2 + 80001cac: 00468603 lb a2,4(a3) + 80001cb0: 00e787bb addw a5,a5,a4 + 80001cb4: 0027979b slliw a5,a5,0x2 + 80001cb8: 00e7873b addw a4,a5,a4 + 80001cbc: 00168693 addi a3,a3,1 + 80001cc0: 00c7073b addw a4,a4,a2 + 80001cc4: fcb69ae3 bne a3,a1,80001c98 <_ZN8N_puzzleILi4EEC1EPi+0xec> + 80001cc8: 00468593 addi a1,a3,4 + 80001ccc: fcb814e3 bne a6,a1,80001c94 <_ZN8N_puzzleILi4EEC1EPi+0xe8> + 80001cd0: 01813403 ld s0,24(sp) + 80001cd4: 00e52a23 sw a4,20(a0) + 80001cd8: 02010113 addi sp,sp,32 + 80001cdc: 00008067 ret + 80001ce0: 00354703 lbu a4,3(a0) + 80001ce4: 00e787bb addw a5,a5,a4 + 80001ce8: 00f501a3 sb a5,3(a0) + 80001cec: f6dff06f j 80001c58 <_ZN8N_puzzleILi4EEC1EPi+0xac> + 80001cf0: 01813403 ld s0,24(sp) + 80001cf4: 00050023 sb zero,0(a0) + 80001cf8: 02010113 addi sp,sp,32 + 80001cfc: 00008067 ret + +0000000080001d00 <_ZNK8N_puzzleILi4EEeqERKS0_>: + 80001d00: 00050713 mv a4,a0 + 80001d04: 00054503 lbu a0,0(a0) + 80001d08: 04050863 beqz a0,80001d58 <_ZNK8N_puzzleILi4EEeqERKS0_+0x58> + 80001d0c: 0005c503 lbu a0,0(a1) + 80001d10: 04050463 beqz a0,80001d58 <_ZNK8N_puzzleILi4EEeqERKS0_+0x58> + 80001d14: 0145a683 lw a3,20(a1) + 80001d18: 01472783 lw a5,20(a4) + 80001d1c: 02f69c63 bne a3,a5,80001d54 <_ZNK8N_puzzleILi4EEeqERKS0_+0x54> + 80001d20: 00800693 li a3,8 + 80001d24: 01800893 li a7,24 + 80001d28: ffc68793 addi a5,a3,-4 + 80001d2c: 00f70833 add a6,a4,a5 + 80001d30: 00f58633 add a2,a1,a5 + 80001d34: 00084803 lbu a6,0(a6) + 80001d38: 00064603 lbu a2,0(a2) + 80001d3c: 00178793 addi a5,a5,1 + 80001d40: 00c81a63 bne a6,a2,80001d54 <_ZNK8N_puzzleILi4EEeqERKS0_+0x54> + 80001d44: fed794e3 bne a5,a3,80001d2c <_ZNK8N_puzzleILi4EEeqERKS0_+0x2c> + 80001d48: 00468693 addi a3,a3,4 + 80001d4c: fd169ee3 bne a3,a7,80001d28 <_ZNK8N_puzzleILi4EEeqERKS0_+0x28> + 80001d50: 00008067 ret + 80001d54: 00000513 li a0,0 + 80001d58: 00008067 ret + +0000000080001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0>: + 80001d5c: 00064783 lbu a5,0(a2) + 80001d60: fe010113 addi sp,sp,-32 + 80001d64: 00913423 sd s1,8(sp) + 80001d68: 00113c23 sd ra,24(sp) + 80001d6c: 00813823 sd s0,16(sp) + 80001d70: 00060493 mv s1,a2 + 80001d74: 00078e63 beqz a5,80001d90 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x34> + 80001d78: 01462783 lw a5,20(a2) + 80001d7c: fff5051b addiw a0,a0,-1 + 80001d80: 00a7f533 and a0,a5,a0 + 80001d84: 02051793 slli a5,a0,0x20 + 80001d88: 01d7d793 srli a5,a5,0x1d + 80001d8c: 00f585b3 add a1,a1,a5 + 80001d90: 0005b403 ld s0,0(a1) + 80001d94: 00041863 bnez s0,80001da4 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x48> + 80001d98: 01c0006f j 80001db4 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x58> + 80001d9c: 01843403 ld s0,24(s0) + 80001da0: 00040a63 beqz s0,80001db4 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x58> + 80001da4: 00040513 mv a0,s0 + 80001da8: 00048593 mv a1,s1 + 80001dac: f55ff0ef jal ra,80001d00 <_ZNK8N_puzzleILi4EEeqERKS0_> + 80001db0: fe0506e3 beqz a0,80001d9c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x40> + 80001db4: 01813083 ld ra,24(sp) + 80001db8: 00040513 mv a0,s0 + 80001dbc: 01013403 ld s0,16(sp) + 80001dc0: 00813483 ld s1,8(sp) + 80001dc4: 02010113 addi sp,sp,32 + 80001dc8: 00008067 ret + +0000000080001dcc <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi>: + 80001dcc: 00100793 li a5,1 + 80001dd0: 06f58463 beq a1,a5,80001e38 <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x6c> + 80001dd4: 01053883 ld a7,16(a0) + 80001dd8: 00359793 slli a5,a1,0x3 + 80001ddc: 00100e93 li t4,1 + 80001de0: 00f887b3 add a5,a7,a5 + 80001de4: 0007b603 ld a2,0(a5) + 80001de8: 01c0006f j 80001e04 <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x38> + 80001dec: 0106b023 sd a6,0(a3) + 80001df0: 00c73023 sd a2,0(a4) + 80001df4: 0006b703 ld a4,0(a3) + 80001df8: 02f62023 sw a5,32(a2) + 80001dfc: 02a72023 sw a0,32(a4) + 80001e00: 03d58c63 beq a1,t4,80001e38 <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x6c> + 80001e04: 01f5d79b srliw a5,a1,0x1f + 80001e08: 00b787bb addw a5,a5,a1 + 80001e0c: 4017d79b sraiw a5,a5,0x1 + 80001e10: 00058513 mv a0,a1 + 80001e14: 0007859b sext.w a1,a5 + 80001e18: 00359713 slli a4,a1,0x3 + 80001e1c: 00e88733 add a4,a7,a4 + 80001e20: 00073803 ld a6,0(a4) + 80001e24: 02862303 lw t1,40(a2) + 80001e28: 00351693 slli a3,a0,0x3 + 80001e2c: 02882e03 lw t3,40(a6) + 80001e30: 00d886b3 add a3,a7,a3 + 80001e34: fbc34ce3 blt t1,t3,80001dec <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x20> + 80001e38: 00008067 ret + +0000000080001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i>: + 80001e3c: fd010113 addi sp,sp,-48 + 80001e40: 01313423 sd s3,8(sp) + 80001e44: 00052983 lw s3,0(a0) + 80001e48: 00913c23 sd s1,24(sp) + 80001e4c: 00058493 mv s1,a1 + 80001e50: 00853583 ld a1,8(a0) + 80001e54: 02813023 sd s0,32(sp) + 80001e58: 01213823 sd s2,16(sp) + 80001e5c: 00050413 mv s0,a0 + 80001e60: 00060913 mv s2,a2 + 80001e64: 00098513 mv a0,s3 + 80001e68: 00048613 mv a2,s1 + 80001e6c: 02113423 sd ra,40(sp) + 80001e70: eedff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 80001e74: 04050263 beqz a0,80001eb8 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x7c> + 80001e78: 02c54783 lbu a5,44(a0) + 80001e7c: 02079063 bnez a5,80001e9c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x60> + 80001e80: 00054703 lbu a4,0(a0) + 80001e84: 04000793 li a5,64 + 80001e88: 00070463 beqz a4,80001e90 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x54> + 80001e8c: 00350783 lb a5,3(a0) + 80001e90: 02852703 lw a4,40(a0) + 80001e94: 00f907bb addw a5,s2,a5 + 80001e98: 16e7cc63 blt a5,a4,80002010 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1d4> + 80001e9c: 02813083 ld ra,40(sp) + 80001ea0: 02013403 ld s0,32(sp) + 80001ea4: 01813483 ld s1,24(sp) + 80001ea8: 01013903 ld s2,16(sp) + 80001eac: 00813983 ld s3,8(sp) + 80001eb0: 03010113 addi sp,sp,48 + 80001eb4: 00008067 ret + 80001eb8: 01842783 lw a5,24(s0) + 80001ebc: 1af9c263 blt s3,a5,80002060 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x224> + 80001ec0: 0017879b addiw a5,a5,1 + 80001ec4: 00f42c23 sw a5,24(s0) + 80001ec8: 03800513 li a0,56 + 80001ecc: e4cfe0ef jal ra,80000518 + 80001ed0: 0004c803 lbu a6,0(s1) + 80001ed4: 00843683 ld a3,8(s0) + 80001ed8: 00000713 li a4,0 + 80001edc: 12081663 bnez a6,80002008 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1cc> + 80001ee0: 00042603 lw a2,0(s0) + 80001ee4: 01842883 lw a7,24(s0) + 80001ee8: 00448793 addi a5,s1,4 + 80001eec: fff6061b addiw a2,a2,-1 + 80001ef0: 00c77733 and a4,a4,a2 + 80001ef4: 02071713 slli a4,a4,0x20 + 80001ef8: 01d75713 srli a4,a4,0x1d + 80001efc: 00e68733 add a4,a3,a4 + 80001f00: 00073303 ld t1,0(a4) + 80001f04: 01050023 sb a6,0(a0) + 80001f08: 0014c683 lbu a3,1(s1) + 80001f0c: 00450713 addi a4,a0,4 + 80001f10: 01448593 addi a1,s1,20 + 80001f14: 00d500a3 sb a3,1(a0) + 80001f18: 0024c683 lbu a3,2(s1) + 80001f1c: 00d50123 sb a3,2(a0) + 80001f20: 00348603 lb a2,3(s1) + 80001f24: 00c501a3 sb a2,3(a0) + 80001f28: 0144a683 lw a3,20(s1) + 80001f2c: 00d52a23 sw a3,20(a0) + 80001f30: 00078683 lb a3,0(a5) + 80001f34: 00478793 addi a5,a5,4 + 80001f38: 00470713 addi a4,a4,4 + 80001f3c: fed70e23 sb a3,-4(a4) + 80001f40: ffd78683 lb a3,-3(a5) + 80001f44: fed70ea3 sb a3,-3(a4) + 80001f48: ffe78683 lb a3,-2(a5) + 80001f4c: fed70f23 sb a3,-2(a4) + 80001f50: fff78683 lb a3,-1(a5) + 80001f54: fed70fa3 sb a3,-1(a4) + 80001f58: fcb79ce3 bne a5,a1,80001f30 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0xf4> + 80001f5c: 00653c23 sd t1,24(a0) + 80001f60: 03152023 sw a7,32(a0) + 80001f64: 03252223 sw s2,36(a0) + 80001f68: 0c080863 beqz a6,80002038 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1fc> + 80001f6c: 02050623 sb zero,44(a0) + 80001f70: 0004c703 lbu a4,0(s1) + 80001f74: 0126093b addw s2,a2,s2 + 80001f78: 03252423 sw s2,40(a0) + 80001f7c: 02053823 sd zero,48(a0) + 80001f80: 00843683 ld a3,8(s0) + 80001f84: 00000793 li a5,0 + 80001f88: 00070463 beqz a4,80001f90 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x154> + 80001f8c: 0144a783 lw a5,20(s1) + 80001f90: 00042603 lw a2,0(s0) + 80001f94: 01842583 lw a1,24(s0) + 80001f98: 01043703 ld a4,16(s0) + 80001f9c: fff6061b addiw a2,a2,-1 + 80001fa0: 00c7f7b3 and a5,a5,a2 + 80001fa4: 02079793 slli a5,a5,0x20 + 80001fa8: 01d7d793 srli a5,a5,0x1d + 80001fac: 00f687b3 add a5,a3,a5 + 80001fb0: 00359693 slli a3,a1,0x3 + 80001fb4: 00a7b023 sd a0,0(a5) + 80001fb8: 00d707b3 add a5,a4,a3 + 80001fbc: 00a7b023 sd a0,0(a5) + 80001fc0: 00040513 mv a0,s0 + 80001fc4: e09ff0ef jal ra,80001dcc <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi> + 80001fc8: 01842703 lw a4,24(s0) + 80001fcc: 01c42783 lw a5,28(s0) + 80001fd0: 0007069b sext.w a3,a4 + 80001fd4: 0007861b sext.w a2,a5 + 80001fd8: 02d64263 blt a2,a3,80001ffc <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1c0> + 80001fdc: 00f42e23 sw a5,28(s0) + 80001fe0: 02813083 ld ra,40(sp) + 80001fe4: 02013403 ld s0,32(sp) + 80001fe8: 01813483 ld s1,24(sp) + 80001fec: 01013903 ld s2,16(sp) + 80001ff0: 00813983 ld s3,8(sp) + 80001ff4: 03010113 addi sp,sp,48 + 80001ff8: 00008067 ret + 80001ffc: 00070793 mv a5,a4 + 80002000: 00f42e23 sw a5,28(s0) + 80002004: fddff06f j 80001fe0 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1a4> + 80002008: 0144a703 lw a4,20(s1) + 8000200c: ed5ff06f j 80001ee0 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0xa4> + 80002010: 02052583 lw a1,32(a0) + 80002014: 02f52423 sw a5,40(a0) + 80002018: 00040513 mv a0,s0 + 8000201c: 02013403 ld s0,32(sp) + 80002020: 02813083 ld ra,40(sp) + 80002024: 01813483 ld s1,24(sp) + 80002028: 01013903 ld s2,16(sp) + 8000202c: 00813983 ld s3,8(sp) + 80002030: 03010113 addi sp,sp,48 + 80002034: d99ff06f j 80001dcc <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi> + 80002038: 02050623 sb zero,44(a0) + 8000203c: 0004c703 lbu a4,0(s1) + 80002040: 04000613 li a2,64 + 80002044: 0126093b addw s2,a2,s2 + 80002048: 03252423 sw s2,40(a0) + 8000204c: 02053823 sd zero,48(a0) + 80002050: 00843683 ld a3,8(s0) + 80002054: 00000793 li a5,0 + 80002058: f2070ce3 beqz a4,80001f90 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x154> + 8000205c: f31ff06f j 80001f8c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x150> + 80002060: 09800613 li a2,152 + 80002064: 00004597 auipc a1,0x4 + 80002068: 5e458593 addi a1,a1,1508 # 80006648 <_etext+0x3b4> + 8000206c: 00004517 auipc a0,0x4 + 80002070: 26c50513 addi a0,a0,620 # 800062d8 <_etext+0x44> + 80002074: 6c9030ef jal ra,80005f3c + 80002078: 00100513 li a0,1 + 8000207c: 019020ef jal ra,80004894 + +0000000080002080 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv>: + 80002080: 01852783 lw a5,24(a0) + 80002084: 00200713 li a4,2 + 80002088: 0ef75263 bge a4,a5,8000216c <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xec> + 8000208c: 01053603 ld a2,16(a0) + 80002090: 00100293 li t0,1 + 80002094: 02c0006f j 800020c0 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x40> + 80002098: 0deec863 blt t4,t5,80002168 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xe8> + 8000209c: 0107b023 sd a6,0(a5) + 800020a0: 00b6b023 sd a1,0(a3) + 800020a4: 0007b783 ld a5,0(a5) + 800020a8: 0255a023 sw t0,32(a1) + 800020ac: 000f829b sext.w t0,t6 + 800020b0: 03f7a023 sw t6,32(a5) + 800020b4: 01852783 lw a5,24(a0) + 800020b8: 0012971b slliw a4,t0,0x1 + 800020bc: 06f75263 bge a4,a5,80002120 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa0> + 800020c0: 00371793 slli a5,a4,0x3 + 800020c4: 00329693 slli a3,t0,0x3 + 800020c8: 00f60333 add t1,a2,a5 + 800020cc: 00d606b3 add a3,a2,a3 + 800020d0: 0006b803 ld a6,0(a3) + 800020d4: 00033883 ld a7,0(t1) + 800020d8: 00878793 addi a5,a5,8 + 800020dc: 00f607b3 add a5,a2,a5 + 800020e0: 0007b583 ld a1,0(a5) + 800020e4: 02882e83 lw t4,40(a6) + 800020e8: 0288ae03 lw t3,40(a7) + 800020ec: 0285af03 lw t5,40(a1) + 800020f0: 00170f9b addiw t6,a4,1 + 800020f4: fbcec2e3 blt t4,t3,80002098 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x18> + 800020f8: fbee52e3 bge t3,t5,8000209c <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x1c> + 800020fc: 01033023 sd a6,0(t1) + 80002100: 0116b023 sd a7,0(a3) + 80002104: 00033783 ld a5,0(t1) + 80002108: 0258a023 sw t0,32(a7) + 8000210c: 00070293 mv t0,a4 + 80002110: 02e7a023 sw a4,32(a5) + 80002114: 01852783 lw a5,24(a0) + 80002118: 0012971b slliw a4,t0,0x1 + 8000211c: faf742e3 blt a4,a5,800020c0 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x40> + 80002120: 00f70463 beq a4,a5,80002128 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa8> + 80002124: 00008067 ret + 80002128: 01053683 ld a3,16(a0) + 8000212c: 00329613 slli a2,t0,0x3 + 80002130: 00371793 slli a5,a4,0x3 + 80002134: 00f687b3 add a5,a3,a5 + 80002138: 00c686b3 add a3,a3,a2 + 8000213c: 0006b583 ld a1,0(a3) + 80002140: 0007b603 ld a2,0(a5) + 80002144: 0285a503 lw a0,40(a1) + 80002148: 02862803 lw a6,40(a2) + 8000214c: fca85ce3 bge a6,a0,80002124 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa4> + 80002150: 00b7b023 sd a1,0(a5) + 80002154: 00c6b023 sd a2,0(a3) + 80002158: 0007b783 ld a5,0(a5) + 8000215c: 02562023 sw t0,32(a2) + 80002160: 02e7a023 sw a4,32(a5) + 80002164: 00008067 ret + 80002168: 00008067 ret + 8000216c: 00200713 li a4,2 + 80002170: 00100293 li t0,1 + 80002174: faf718e3 bne a4,a5,80002124 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa4> + 80002178: fb1ff06f j 80002128 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa8> + +000000008000217c : + 8000217c: ed010113 addi sp,sp,-304 + 80002180: 03810513 addi a0,sp,56 + 80002184: 12113423 sd ra,296(sp) + 80002188: 12813023 sd s0,288(sp) + 8000218c: 10913c23 sd s1,280(sp) + 80002190: 11213823 sd s2,272(sp) + 80002194: 11313423 sd s3,264(sp) + 80002198: 11413023 sd s4,256(sp) + 8000219c: 0f513c23 sd s5,248(sp) + 800021a0: 0f613823 sd s6,240(sp) + 800021a4: 0f713423 sd s7,232(sp) + 800021a8: 0f813023 sd s8,224(sp) + 800021ac: 0d913c23 sd s9,216(sp) + 800021b0: 0da13823 sd s10,208(sp) + 800021b4: 0db13423 sd s11,200(sp) + 800021b8: 829ff0ef jal ra,800019e0 <_ZN8N_puzzleILi4EEC1Ev> + 800021bc: 00006797 auipc a5,0x6 + 800021c0: 9147b783 ld a5,-1772(a5) # 80007ad0 + 800021c4: 0007a783 lw a5,0(a5) + 800021c8: 00200713 li a4,2 + 800021cc: 2ae78ae3 beq a5,a4,80002c80 + 800021d0: 10f74e63 blt a4,a5,800022ec + 800021d4: 240780e3 beqz a5,80002c14 + 800021d8: 00100713 li a4,1 + 800021dc: 34e796e3 bne a5,a4,80002d28 + 800021e0: 08010493 addi s1,sp,128 + 800021e4: 00005597 auipc a1,0x5 + 800021e8: 32458593 addi a1,a1,804 # 80007508 <_ZL8PUZZLE_M> + 800021ec: 00048513 mv a0,s1 + 800021f0: 9bdff0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 800021f4: 08012783 lw a5,128(sp) + 800021f8: 08014803 lbu a6,128(sp) + 800021fc: 03810713 addi a4,sp,56 + 80002200: 02f12c23 sw a5,56(sp) + 80002204: 09412783 lw a5,148(sp) + 80002208: 09010413 addi s0,sp,144 + 8000220c: 04f12623 sw a5,76(sp) + 80002210: 00048793 mv a5,s1 + 80002214: 0047c503 lbu a0,4(a5) + 80002218: 0057c583 lbu a1,5(a5) + 8000221c: 0067c603 lbu a2,6(a5) + 80002220: 0077c683 lbu a3,7(a5) + 80002224: 00a70223 sb a0,4(a4) + 80002228: 00b702a3 sb a1,5(a4) + 8000222c: 00c70323 sb a2,6(a4) + 80002230: 00d703a3 sb a3,7(a4) + 80002234: 00478793 addi a5,a5,4 + 80002238: 00470713 addi a4,a4,4 + 8000223c: fc879ce3 bne a5,s0,80002214 + 80002240: 00001d37 lui s10,0x1 + 80002244: 800d0793 addi a5,s10,-2048 # 800 <_entry_offset+0x800> + 80002248: 00f13823 sd a5,16(sp) + 8000224c: 10080a63 beqz a6,80002360 + 80002250: 00040613 mv a2,s0 + 80002254: 03810513 addi a0,sp,56 + 80002258: 00000593 li a1,0 + 8000225c: 01000813 li a6,16 + 80002260: 01000893 li a7,16 + 80002264: ff060793 addi a5,a2,-16 + 80002268: 00050713 mv a4,a0 + 8000226c: 00470683 lb a3,4(a4) + 80002270: 10069863 bnez a3,80002380 + 80002274: 0107a023 sw a6,0(a5) + 80002278: 00478793 addi a5,a5,4 + 8000227c: 00170713 addi a4,a4,1 + 80002280: fef616e3 bne a2,a5,8000226c + 80002284: 0045859b addiw a1,a1,4 + 80002288: 01060613 addi a2,a2,16 + 8000228c: 00450513 addi a0,a0,4 + 80002290: fd159ae3 bne a1,a7,80002264 + 80002294: 08012683 lw a3,128(sp) + 80002298: 00100513 li a0,1 + 8000229c: 00000613 li a2,0 + 800022a0: 00100793 li a5,1 + 800022a4: 01000593 li a1,16 + 800022a8: 00279713 slli a4,a5,0x2 + 800022ac: 0c010813 addi a6,sp,192 + 800022b0: 00e80733 add a4,a6,a4 + 800022b4: fc072703 lw a4,-64(a4) + 800022b8: 00d75463 bge a4,a3,800022c0 + 800022bc: 0016061b addiw a2,a2,1 + 800022c0: 0017879b addiw a5,a5,1 + 800022c4: 00078713 mv a4,a5 + 800022c8: feb790e3 bne a5,a1,800022a8 + 800022cc: 0015079b addiw a5,a0,1 + 800022d0: 0ae78c63 beq a5,a4,80002388 + 800022d4: 00251513 slli a0,a0,0x2 + 800022d8: 0c010713 addi a4,sp,192 + 800022dc: 00a70533 add a0,a4,a0 + 800022e0: fc052683 lw a3,-64(a0) + 800022e4: 00078513 mv a0,a5 + 800022e8: fc1ff06f j 800022a8 + 800022ec: 00300713 li a4,3 + 800022f0: 22e79ce3 bne a5,a4,80002d28 + 800022f4: 08010493 addi s1,sp,128 + 800022f8: 00005597 auipc a1,0x5 + 800022fc: 19058593 addi a1,a1,400 # 80007488 <_ZL8PUZZLE_H> + 80002300: 00048513 mv a0,s1 + 80002304: 8a9ff0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002308: 08012783 lw a5,128(sp) + 8000230c: 08014803 lbu a6,128(sp) + 80002310: 03810713 addi a4,sp,56 + 80002314: 02f12c23 sw a5,56(sp) + 80002318: 09412783 lw a5,148(sp) + 8000231c: 09010413 addi s0,sp,144 + 80002320: 04f12623 sw a5,76(sp) + 80002324: 00048793 mv a5,s1 + 80002328: 0047c503 lbu a0,4(a5) + 8000232c: 0057c583 lbu a1,5(a5) + 80002330: 0067c603 lbu a2,6(a5) + 80002334: 0077c683 lbu a3,7(a5) + 80002338: 00a70223 sb a0,4(a4) + 8000233c: 00b702a3 sb a1,5(a4) + 80002340: 00c70323 sb a2,6(a4) + 80002344: 00d703a3 sb a3,7(a4) + 80002348: 00478793 addi a5,a5,4 + 8000234c: 00470713 addi a4,a4,4 + 80002350: fc879ce3 bne a5,s0,80002328 + 80002354: 000c07b7 lui a5,0xc0 + 80002358: 00f13823 sd a5,16(sp) + 8000235c: ee081ae3 bnez a6,80002250 + 80002360: 03500613 li a2,53 + 80002364: 00004597 auipc a1,0x4 + 80002368: 32458593 addi a1,a1,804 # 80006688 <_etext+0x3f4> + 8000236c: 00004517 auipc a0,0x4 + 80002370: f6c50513 addi a0,a0,-148 # 800062d8 <_etext+0x44> + 80002374: 3c9030ef jal ra,80005f3c + 80002378: 00100513 li a0,1 + 8000237c: 518020ef jal ra,80004894 + 80002380: 00d7a023 sw a3,0(a5) # c0000 <_entry_offset+0xc0000> + 80002384: ef5ff06f j 80002278 + 80002388: 03914683 lbu a3,57(sp) + 8000238c: 03a14703 lbu a4,58(sp) + 80002390: 00600793 li a5,6 + 80002394: 40d787bb subw a5,a5,a3 + 80002398: 40e787bb subw a5,a5,a4 + 8000239c: 00c787bb addw a5,a5,a2 + 800023a0: 0017f793 andi a5,a5,1 + 800023a4: fa079ee3 bnez a5,80002360 + 800023a8: 02000513 li a0,32 + 800023ac: 96cfe0ef jal ra,80000518 + 800023b0: 01013783 ld a5,16(sp) + 800023b4: 00050d93 mv s11,a0 + 800023b8: 00f52023 sw a5,0(a0) + 800023bc: 00379513 slli a0,a5,0x3 + 800023c0: 958fe0ef jal ra,80000518 + 800023c4: 000da783 lw a5,0(s11) + 800023c8: 00adb823 sd a0,16(s11) + 800023cc: 0017879b addiw a5,a5,1 + 800023d0: 00379513 slli a0,a5,0x3 + 800023d4: 944fe0ef jal ra,80000518 + 800023d8: 000da703 lw a4,0(s11) + 800023dc: 00adb423 sd a0,8(s11) + 800023e0: 000dbc23 sd zero,24(s11) + 800023e4: 00050793 mv a5,a0 + 800023e8: 02e05263 blez a4,8000240c + 800023ec: fff7071b addiw a4,a4,-1 + 800023f0: 02071713 slli a4,a4,0x20 + 800023f4: 01d75713 srli a4,a4,0x1d + 800023f8: 00850693 addi a3,a0,8 + 800023fc: 00d70733 add a4,a4,a3 + 80002400: 0007b023 sd zero,0(a5) + 80002404: 00878793 addi a5,a5,8 + 80002408: fef71ce3 bne a4,a5,80002400 + 8000240c: 03810593 addi a1,sp,56 + 80002410: 00000613 li a2,0 + 80002414: 000d8513 mv a0,s11 + 80002418: a25ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 8000241c: 018da583 lw a1,24(s11) + 80002420: fff00793 li a5,-1 + 80002424: 00005717 auipc a4,0x5 + 80002428: 5c470713 addi a4,a4,1476 # 800079e8 <_ZL3ans> + 8000242c: 00f72023 sw a5,0(a4) + 80002430: 00000913 li s2,0 + 80002434: 46058863 beqz a1,800028a4 + 80002438: 01048793 addi a5,s1,16 + 8000243c: 00100b13 li s6,1 + 80002440: 00f00d13 li s10,15 + 80002444: 01448c93 addi s9,s1,20 + 80002448: 00f13423 sd a5,8(sp) + 8000244c: 06010993 addi s3,sp,96 + 80002450: 010dbf03 ld t5,16(s11) + 80002454: 00048713 mv a4,s1 + 80002458: 00048613 mv a2,s1 + 8000245c: 008f3783 ld a5,8(t5) + 80002460: 00378683 lb a3,3(a5) + 80002464: 0007cb83 lbu s7,0(a5) + 80002468: 0017ca03 lbu s4,1(a5) + 8000246c: 0027ca83 lbu s5,2(a5) + 80002470: 0007ae83 lw t4,0(a5) + 80002474: 0147ac03 lw s8,20(a5) + 80002478: 00d13c23 sd a3,24(sp) + 8000247c: 00478793 addi a5,a5,4 + 80002480: 0007cf83 lbu t6,0(a5) + 80002484: 0017c303 lbu t1,1(a5) + 80002488: 0027c883 lbu a7,2(a5) + 8000248c: 0037c503 lbu a0,3(a5) + 80002490: 01f60223 sb t6,4(a2) + 80002494: 006602a3 sb t1,5(a2) + 80002498: 01160323 sb a7,6(a2) + 8000249c: 00a603a3 sb a0,7(a2) + 800024a0: 00460613 addi a2,a2,4 + 800024a4: 00478793 addi a5,a5,4 + 800024a8: fcc41ce3 bne s0,a2,80002480 + 800024ac: 5b658a63 beq a1,s6,80002a60 + 800024b0: 08bb50e3 bge s6,a1,80002d30 + 800024b4: 00359593 slli a1,a1,0x3 + 800024b8: 00bf05b3 add a1,t5,a1 + 800024bc: 0005b783 ld a5,0(a1) + 800024c0: 000d8513 mv a0,s11 + 800024c4: 02e13423 sd a4,40(sp) + 800024c8: 00ff3423 sd a5,8(t5) + 800024cc: 0367a023 sw s6,32(a5) + 800024d0: 018da783 lw a5,24(s11) + 800024d4: 03d13023 sd t4,32(sp) + 800024d8: fff7879b addiw a5,a5,-1 + 800024dc: 00fdac23 sw a5,24(s11) + 800024e0: ba1ff0ef jal ra,80002080 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv> + 800024e4: 02813703 ld a4,40(sp) + 800024e8: 02013e83 ld t4,32(sp) + 800024ec: 07812223 sw s8,100(sp) + 800024f0: 05010c13 addi s8,sp,80 + 800024f4: 05d12823 sw t4,80(sp) + 800024f8: 000c0793 mv a5,s8 + 800024fc: 00474303 lbu t1,4(a4) + 80002500: 00574503 lbu a0,5(a4) + 80002504: 00674583 lbu a1,6(a4) + 80002508: 00774603 lbu a2,7(a4) + 8000250c: 00678223 sb t1,4(a5) + 80002510: 00a782a3 sb a0,5(a5) + 80002514: 00b78323 sb a1,6(a5) + 80002518: 00c783a3 sb a2,7(a5) + 8000251c: 00470713 addi a4,a4,4 + 80002520: 00478793 addi a5,a5,4 + 80002524: fce41ce3 bne s0,a4,800024fc + 80002528: 0019091b addiw s2,s2,1 + 8000252c: 00048713 mv a4,s1 + 80002530: 00000793 li a5,0 + 80002534: 0017879b addiw a5,a5,1 + 80002538: 00f72023 sw a5,0(a4) + 8000253c: 00470713 addi a4,a4,4 + 80002540: ffa79ae3 bne a5,s10,80002534 + 80002544: 00048593 mv a1,s1 + 80002548: 06810513 addi a0,sp,104 + 8000254c: 0a012e23 sw zero,188(sp) + 80002550: e5cff0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002554: 06810593 addi a1,sp,104 + 80002558: 05010513 addi a0,sp,80 + 8000255c: fa4ff0ef jal ra,80001d00 <_ZNK8N_puzzleILi4EEeqERKS0_> + 80002560: 78051663 bnez a0,80002cec + 80002564: 320b8863 beqz s7,80002894 + 80002568: 00300793 li a5,3 + 8000256c: 4efa8e63 beq s5,a5,80002a68 + 80002570: 00048593 mv a1,s1 + 80002574: 00048713 mv a4,s1 + 80002578: 05010793 addi a5,sp,80 + 8000257c: 0047ce03 lbu t3,4(a5) + 80002580: 0057c303 lbu t1,5(a5) + 80002584: 0067c503 lbu a0,6(a5) + 80002588: 0077c603 lbu a2,7(a5) + 8000258c: 01c70223 sb t3,4(a4) + 80002590: 006702a3 sb t1,5(a4) + 80002594: 00a70323 sb a0,6(a4) + 80002598: 00c703a3 sb a2,7(a4) + 8000259c: 00478793 addi a5,a5,4 + 800025a0: 00470713 addi a4,a4,4 + 800025a4: fcf99ce3 bne s3,a5,8000257c + 800025a8: 0c010793 addi a5,sp,192 + 800025ac: 002a1e13 slli t3,s4,0x2 + 800025b0: 01c78e33 add t3,a5,t3 + 800025b4: 001a8f13 addi t5,s5,1 + 800025b8: 01ee07b3 add a5,t3,t5 + 800025bc: f9478303 lb t1,-108(a5) + 800025c0: 001a879b addiw a5,s5,1 + 800025c4: 015e0eb3 add t4,t3,s5 + 800025c8: fff3071b addiw a4,t1,-1 + 800025cc: 41f7561b sraiw a2,a4,0x1f + 800025d0: 01e6561b srliw a2,a2,0x1e + 800025d4: 00c7073b addw a4,a4,a2 + 800025d8: 00377713 andi a4,a4,3 + 800025dc: 40c7073b subw a4,a4,a2 + 800025e0: 4157063b subw a2,a4,s5 + 800025e4: 40f707bb subw a5,a4,a5 + 800025e8: 41f65f9b sraiw t6,a2,0x1f + 800025ec: 41f7d71b sraiw a4,a5,0x1f + 800025f0: 00cfc533 xor a0,t6,a2 + 800025f4: 00f747b3 xor a5,a4,a5 + 800025f8: 40e787bb subw a5,a5,a4 + 800025fc: 41f5053b subw a0,a0,t6 + 80002600: 40f5053b subw a0,a0,a5 + 80002604: 01813783 ld a5,24(sp) + 80002608: 0fff7f13 andi t5,t5,255 + 8000260c: fc6e8223 sb t1,-60(t4) + 80002610: 00f5053b addw a0,a0,a5 + 80002614: 01ee0e33 add t3,t3,t5 + 80002618: 001a831b addiw t1,s5,1 + 8000261c: 000a879b sext.w a5,s5 + 80002620: 0185151b slliw a0,a0,0x18 + 80002624: fc0e0223 sb zero,-60(t3) + 80002628: 000a0b9b sext.w s7,s4 + 8000262c: 02f13023 sd a5,32(sp) + 80002630: 4185551b sraiw a0,a0,0x18 + 80002634: 0ff37313 andi t1,t1,255 + 80002638: 00448613 addi a2,s1,4 + 8000263c: 00000e13 li t3,0 + 80002640: ffc60713 addi a4,a2,-4 + 80002644: 005e179b slliw a5,t3,0x5 + 80002648: 41c787bb subw a5,a5,t3 + 8000264c: 0027979b slliw a5,a5,0x2 + 80002650: 41c787bb subw a5,a5,t3 + 80002654: 0027979b slliw a5,a5,0x2 + 80002658: 00470e83 lb t4,4(a4) + 8000265c: 01c787bb addw a5,a5,t3 + 80002660: 0027979b slliw a5,a5,0x2 + 80002664: 01c787bb addw a5,a5,t3 + 80002668: 00170713 addi a4,a4,1 + 8000266c: 01d78e3b addw t3,a5,t4 + 80002670: fce61ae3 bne a2,a4,80002644 + 80002674: 00460613 addi a2,a2,4 + 80002678: fccc94e3 bne s9,a2,80002640 + 8000267c: 00100793 li a5,1 + 80002680: 06f10423 sb a5,104(sp) + 80002684: 074104a3 sb s4,105(sp) + 80002688: 06610523 sb t1,106(sp) + 8000268c: 06a105a3 sb a0,107(sp) + 80002690: 07c12e23 sw t3,124(sp) + 80002694: 06810793 addi a5,sp,104 + 80002698: 0075c703 lbu a4,7(a1) + 8000269c: 0045c303 lbu t1,4(a1) + 800026a0: 0055c503 lbu a0,5(a1) + 800026a4: 0065c603 lbu a2,6(a1) + 800026a8: 00e783a3 sb a4,7(a5) + 800026ac: 00813703 ld a4,8(sp) + 800026b0: 00678223 sb t1,4(a5) + 800026b4: 00a782a3 sb a0,5(a5) + 800026b8: 00c78323 sb a2,6(a5) + 800026bc: 00458593 addi a1,a1,4 + 800026c0: 00478793 addi a5,a5,4 + 800026c4: fce59ae3 bne a1,a4,80002698 + 800026c8: 008db583 ld a1,8(s11) + 800026cc: 000da503 lw a0,0(s11) + 800026d0: 05010613 addi a2,sp,80 + 800026d4: e88ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 800026d8: 50050e63 beqz a0,80002bf4 + 800026dc: 02452603 lw a2,36(a0) + 800026e0: 0016061b addiw a2,a2,1 + 800026e4: 06810593 addi a1,sp,104 + 800026e8: 000d8513 mv a0,s11 + 800026ec: f50ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 800026f0: 380a9063 bnez s5,80002a70 + 800026f4: 00300793 li a5,3 + 800026f8: 20fa0a63 beq s4,a5,8000290c + 800026fc: 00048593 mv a1,s1 + 80002700: 00048713 mv a4,s1 + 80002704: 05010793 addi a5,sp,80 + 80002708: 0047ce03 lbu t3,4(a5) + 8000270c: 0057c303 lbu t1,5(a5) + 80002710: 0067c503 lbu a0,6(a5) + 80002714: 0077c603 lbu a2,7(a5) + 80002718: 01c70223 sb t3,4(a4) + 8000271c: 006702a3 sb t1,5(a4) + 80002720: 00a70323 sb a0,6(a4) + 80002724: 00c703a3 sb a2,7(a4) + 80002728: 00478793 addi a5,a5,4 + 8000272c: 00470713 addi a4,a4,4 + 80002730: fcf99ce3 bne s3,a5,80002708 + 80002734: 02013683 ld a3,32(sp) + 80002738: 001b8613 addi a2,s7,1 + 8000273c: 00261793 slli a5,a2,0x2 + 80002740: 0c010713 addi a4,sp,192 + 80002744: 00f707b3 add a5,a4,a5 + 80002748: 00d787b3 add a5,a5,a3 + 8000274c: f9478503 lb a0,-108(a5) + 80002750: 001b879b addiw a5,s7,1 + 80002754: 002b9e13 slli t3,s7,0x2 + 80002758: fff5031b addiw t1,a0,-1 + 8000275c: 41f3571b sraiw a4,t1,0x1f + 80002760: 01e7571b srliw a4,a4,0x1e + 80002764: 0067073b addw a4,a4,t1 + 80002768: 4027571b sraiw a4,a4,0x2 + 8000276c: 4177033b subw t1,a4,s7 + 80002770: 40f707bb subw a5,a4,a5 + 80002774: 41f7de9b sraiw t4,a5,0x1f + 80002778: 41f35f1b sraiw t5,t1,0x1f + 8000277c: 00fec7b3 xor a5,t4,a5 + 80002780: 006f4333 xor t1,t5,t1 + 80002784: 41d787bb subw a5,a5,t4 + 80002788: 0ff67713 andi a4,a2,255 + 8000278c: 41e3033b subw t1,t1,t5 + 80002790: 00271713 slli a4,a4,0x2 + 80002794: 40f3033b subw t1,t1,a5 + 80002798: 0c010793 addi a5,sp,192 + 8000279c: 00e787b3 add a5,a5,a4 + 800027a0: 01813703 ld a4,24(sp) + 800027a4: 0c010613 addi a2,sp,192 + 800027a8: 01c60633 add a2,a2,t3 + 800027ac: 00d60633 add a2,a2,a3 + 800027b0: 00e3033b addw t1,t1,a4 + 800027b4: fca60223 sb a0,-60(a2) + 800027b8: 001a0e1b addiw t3,s4,1 + 800027bc: 00d787b3 add a5,a5,a3 + 800027c0: 00448513 addi a0,s1,4 + 800027c4: 0183131b slliw t1,t1,0x18 + 800027c8: 4183531b sraiw t1,t1,0x18 + 800027cc: 0ffe7e13 andi t3,t3,255 + 800027d0: fc078223 sb zero,-60(a5) + 800027d4: 00050613 mv a2,a0 + 800027d8: 00000e93 li t4,0 + 800027dc: ffc60713 addi a4,a2,-4 + 800027e0: 005e979b slliw a5,t4,0x5 + 800027e4: 41d787bb subw a5,a5,t4 + 800027e8: 0027979b slliw a5,a5,0x2 + 800027ec: 41d787bb subw a5,a5,t4 + 800027f0: 0027979b slliw a5,a5,0x2 + 800027f4: 00470f03 lb t5,4(a4) + 800027f8: 01d787bb addw a5,a5,t4 + 800027fc: 0027979b slliw a5,a5,0x2 + 80002800: 01d787bb addw a5,a5,t4 + 80002804: 00170713 addi a4,a4,1 + 80002808: 01e78ebb addw t4,a5,t5 + 8000280c: fcc71ae3 bne a4,a2,800027e0 + 80002810: 00470613 addi a2,a4,4 + 80002814: fccc94e3 bne s9,a2,800027dc + 80002818: 00100793 li a5,1 + 8000281c: 06f10423 sb a5,104(sp) + 80002820: 07c104a3 sb t3,105(sp) + 80002824: 07510523 sb s5,106(sp) + 80002828: 066105a3 sb t1,107(sp) + 8000282c: 07d12e23 sw t4,124(sp) + 80002830: 06810793 addi a5,sp,104 + 80002834: 0075c703 lbu a4,7(a1) + 80002838: 0045ce03 lbu t3,4(a1) + 8000283c: 0055c303 lbu t1,5(a1) + 80002840: 0065c603 lbu a2,6(a1) + 80002844: 00e783a3 sb a4,7(a5) + 80002848: 00813703 ld a4,8(sp) + 8000284c: 01c78223 sb t3,4(a5) + 80002850: 006782a3 sb t1,5(a5) + 80002854: 00c78323 sb a2,6(a5) + 80002858: 00050593 mv a1,a0 + 8000285c: 00478793 addi a5,a5,4 + 80002860: 08a70063 beq a4,a0,800028e0 + 80002864: 00450513 addi a0,a0,4 + 80002868: fcdff06f j 80002834 + 8000286c: 008db583 ld a1,8(s11) + 80002870: 000da503 lw a0,0(s11) + 80002874: 05010613 addi a2,sp,80 + 80002878: ce4ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 8000287c: 38050863 beqz a0,80002c0c + 80002880: 02452603 lw a2,36(a0) + 80002884: 0016061b addiw a2,a2,1 + 80002888: 06810593 addi a1,sp,104 + 8000288c: 000d8513 mv a0,s11 + 80002890: dacff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 80002894: 018da583 lw a1,24(s11) + 80002898: 00058663 beqz a1,800028a4 + 8000289c: 01013783 ld a5,16(sp) + 800028a0: bb2798e3 bne a5,s2,80002450 + 800028a4: 12813083 ld ra,296(sp) + 800028a8: 12013403 ld s0,288(sp) + 800028ac: 11813483 ld s1,280(sp) + 800028b0: 11013903 ld s2,272(sp) + 800028b4: 10813983 ld s3,264(sp) + 800028b8: 10013a03 ld s4,256(sp) + 800028bc: 0f813a83 ld s5,248(sp) + 800028c0: 0f013b03 ld s6,240(sp) + 800028c4: 0e813b83 ld s7,232(sp) + 800028c8: 0e013c03 ld s8,224(sp) + 800028cc: 0d813c83 ld s9,216(sp) + 800028d0: 0d013d03 ld s10,208(sp) + 800028d4: 0c813d83 ld s11,200(sp) + 800028d8: 13010113 addi sp,sp,304 + 800028dc: 00008067 ret + 800028e0: 008db583 ld a1,8(s11) + 800028e4: 000da503 lw a0,0(s11) + 800028e8: 05010613 addi a2,sp,80 + 800028ec: c70ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 800028f0: 30050663 beqz a0,80002bfc + 800028f4: 02452603 lw a2,36(a0) + 800028f8: 0016061b addiw a2,a2,1 + 800028fc: 06810593 addi a1,sp,104 + 80002900: 000d8513 mv a0,s11 + 80002904: d38ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 80002908: f80a06e3 beqz s4,80002894 + 8000290c: 00048513 mv a0,s1 + 80002910: 00048793 mv a5,s1 + 80002914: 004c4303 lbu t1,4(s8) + 80002918: 005c4583 lbu a1,5(s8) + 8000291c: 006c4603 lbu a2,6(s8) + 80002920: 007c4703 lbu a4,7(s8) + 80002924: 00678223 sb t1,4(a5) + 80002928: 00b782a3 sb a1,5(a5) + 8000292c: 00c78323 sb a2,6(a5) + 80002930: 00e783a3 sb a4,7(a5) + 80002934: 004c0c13 addi s8,s8,4 + 80002938: 00478793 addi a5,a5,4 + 8000293c: fd899ce3 bne s3,s8,80002914 + 80002940: fffb871b addiw a4,s7,-1 + 80002944: 02013683 ld a3,32(sp) + 80002948: 00070893 mv a7,a4 + 8000294c: 0c010793 addi a5,sp,192 + 80002950: 00271713 slli a4,a4,0x2 + 80002954: 00e78733 add a4,a5,a4 + 80002958: 00d70733 add a4,a4,a3 + 8000295c: f9470603 lb a2,-108(a4) + 80002960: 002b9593 slli a1,s7,0x2 + 80002964: 00b785b3 add a1,a5,a1 + 80002968: fff6031b addiw t1,a2,-1 + 8000296c: 41f3579b sraiw a5,t1,0x1f + 80002970: 01e7d79b srliw a5,a5,0x1e + 80002974: 006787bb addw a5,a5,t1 + 80002978: 4027d79b sraiw a5,a5,0x2 + 8000297c: 41778bbb subw s7,a5,s7 + 80002980: 411787bb subw a5,a5,a7 + 80002984: 41fbde1b sraiw t3,s7,0x1f + 80002988: 41f7d89b sraiw a7,a5,0x1f + 8000298c: 017e4333 xor t1,t3,s7 + 80002990: 00f8c7b3 xor a5,a7,a5 + 80002994: 411787bb subw a5,a5,a7 + 80002998: 41c3033b subw t1,t1,t3 + 8000299c: 40f3033b subw t1,t1,a5 + 800029a0: 01813783 ld a5,24(sp) + 800029a4: 00d585b3 add a1,a1,a3 + 800029a8: fcc58223 sb a2,-60(a1) + 800029ac: 00f3033b addw t1,t1,a5 + 800029b0: fffa059b addiw a1,s4,-1 + 800029b4: 00448e13 addi t3,s1,4 + 800029b8: 0183131b slliw t1,t1,0x18 + 800029bc: fc070223 sb zero,-60(a4) + 800029c0: 4183531b sraiw t1,t1,0x18 + 800029c4: 0ff5f593 andi a1,a1,255 + 800029c8: 000e0893 mv a7,t3 + 800029cc: 00000713 li a4,0 + 800029d0: ffc88613 addi a2,a7,-4 + 800029d4: 0057179b slliw a5,a4,0x5 + 800029d8: 40e787bb subw a5,a5,a4 + 800029dc: 0027979b slliw a5,a5,0x2 + 800029e0: 40e787bb subw a5,a5,a4 + 800029e4: 0027979b slliw a5,a5,0x2 + 800029e8: 00460e83 lb t4,4(a2) + 800029ec: 00e787bb addw a5,a5,a4 + 800029f0: 0027979b slliw a5,a5,0x2 + 800029f4: 00e7873b addw a4,a5,a4 + 800029f8: 00160613 addi a2,a2,1 + 800029fc: 01d7073b addw a4,a4,t4 + 80002a00: fcc89ae3 bne a7,a2,800029d4 + 80002a04: 00488893 addi a7,a7,4 + 80002a08: fd1c94e3 bne s9,a7,800029d0 + 80002a0c: 00100793 li a5,1 + 80002a10: 06f10423 sb a5,104(sp) + 80002a14: 06b104a3 sb a1,105(sp) + 80002a18: 07510523 sb s5,106(sp) + 80002a1c: 066105a3 sb t1,107(sp) + 80002a20: 06e12e23 sw a4,124(sp) + 80002a24: 06810793 addi a5,sp,104 + 80002a28: 00754703 lbu a4,7(a0) + 80002a2c: 00454883 lbu a7,4(a0) + 80002a30: 00554583 lbu a1,5(a0) + 80002a34: 00654603 lbu a2,6(a0) + 80002a38: 00e783a3 sb a4,7(a5) + 80002a3c: 00813703 ld a4,8(sp) + 80002a40: 01178223 sb a7,4(a5) + 80002a44: 00b782a3 sb a1,5(a5) + 80002a48: 00c78323 sb a2,6(a5) + 80002a4c: 000e0513 mv a0,t3 + 80002a50: 00478793 addi a5,a5,4 + 80002a54: e0ee0ce3 beq t3,a4,8000286c + 80002a58: 004e0e13 addi t3,t3,4 + 80002a5c: fcdff06f j 80002a28 + 80002a60: 000dac23 sw zero,24(s11) + 80002a64: a89ff06f j 800024ec + 80002a68: 000a0b9b sext.w s7,s4 + 80002a6c: 02f13023 sd a5,32(sp) + 80002a70: 00048593 mv a1,s1 + 80002a74: 00048713 mv a4,s1 + 80002a78: 05010793 addi a5,sp,80 + 80002a7c: 0047ce03 lbu t3,4(a5) + 80002a80: 0057c303 lbu t1,5(a5) + 80002a84: 0067c503 lbu a0,6(a5) + 80002a88: 0077c603 lbu a2,7(a5) + 80002a8c: 01c70223 sb t3,4(a4) + 80002a90: 006702a3 sb t1,5(a4) + 80002a94: 00a70323 sb a0,6(a4) + 80002a98: 00c703a3 sb a2,7(a4) + 80002a9c: 00478793 addi a5,a5,4 + 80002aa0: 00470713 addi a4,a4,4 + 80002aa4: fd379ce3 bne a5,s3,80002a7c + 80002aa8: 02013683 ld a3,32(sp) + 80002aac: 0c010713 addi a4,sp,192 + 80002ab0: 002b9513 slli a0,s7,0x2 + 80002ab4: fff6879b addiw a5,a3,-1 + 80002ab8: 00a70533 add a0,a4,a0 + 80002abc: 0007861b sext.w a2,a5 + 80002ac0: 00060313 mv t1,a2 + 80002ac4: 00c50633 add a2,a0,a2 + 80002ac8: f9460e83 lb t4,-108(a2) + 80002acc: 00d50533 add a0,a0,a3 + 80002ad0: fffa8e1b addiw t3,s5,-1 + 80002ad4: fffe879b addiw a5,t4,-1 + 80002ad8: 41f7d71b sraiw a4,a5,0x1f + 80002adc: 01e7571b srliw a4,a4,0x1e + 80002ae0: 00e787bb addw a5,a5,a4 + 80002ae4: 0037f793 andi a5,a5,3 + 80002ae8: 40e787bb subw a5,a5,a4 + 80002aec: 40d7873b subw a4,a5,a3 + 80002af0: 406787bb subw a5,a5,t1 + 80002af4: 41f75f9b sraiw t6,a4,0x1f + 80002af8: 41f7df1b sraiw t5,a5,0x1f + 80002afc: 00efc333 xor t1,t6,a4 + 80002b00: 00ff47b3 xor a5,t5,a5 + 80002b04: 41e787bb subw a5,a5,t5 + 80002b08: 41f3033b subw t1,t1,t6 + 80002b0c: 40f3033b subw t1,t1,a5 + 80002b10: 01813783 ld a5,24(sp) + 80002b14: fdd50223 sb t4,-60(a0) + 80002b18: 00448513 addi a0,s1,4 + 80002b1c: 00f3033b addw t1,t1,a5 + 80002b20: 0183131b slliw t1,t1,0x18 + 80002b24: fc060223 sb zero,-60(a2) + 80002b28: 4183531b sraiw t1,t1,0x18 + 80002b2c: 0ffe7e13 andi t3,t3,255 + 80002b30: 00050613 mv a2,a0 + 80002b34: 00000e93 li t4,0 + 80002b38: ffc60713 addi a4,a2,-4 + 80002b3c: 005e979b slliw a5,t4,0x5 + 80002b40: 41d787bb subw a5,a5,t4 + 80002b44: 0027979b slliw a5,a5,0x2 + 80002b48: 41d787bb subw a5,a5,t4 + 80002b4c: 0027979b slliw a5,a5,0x2 + 80002b50: 00470f03 lb t5,4(a4) + 80002b54: 01d787bb addw a5,a5,t4 + 80002b58: 0027979b slliw a5,a5,0x2 + 80002b5c: 01d787bb addw a5,a5,t4 + 80002b60: 00170713 addi a4,a4,1 + 80002b64: 01e78ebb addw t4,a5,t5 + 80002b68: fce61ae3 bne a2,a4,80002b3c + 80002b6c: 00460613 addi a2,a2,4 + 80002b70: fd9614e3 bne a2,s9,80002b38 + 80002b74: 00100793 li a5,1 + 80002b78: 06f10423 sb a5,104(sp) + 80002b7c: 074104a3 sb s4,105(sp) + 80002b80: 07c10523 sb t3,106(sp) + 80002b84: 066105a3 sb t1,107(sp) + 80002b88: 07d12e23 sw t4,124(sp) + 80002b8c: 06810793 addi a5,sp,104 + 80002b90: 0075c703 lbu a4,7(a1) + 80002b94: 0045ce03 lbu t3,4(a1) + 80002b98: 0055c303 lbu t1,5(a1) + 80002b9c: 0065c603 lbu a2,6(a1) + 80002ba0: 00e783a3 sb a4,7(a5) + 80002ba4: 00813703 ld a4,8(sp) + 80002ba8: 01c78223 sb t3,4(a5) + 80002bac: 006782a3 sb t1,5(a5) + 80002bb0: 00c78323 sb a2,6(a5) + 80002bb4: 00050593 mv a1,a0 + 80002bb8: 00478793 addi a5,a5,4 + 80002bbc: 00e50663 beq a0,a4,80002bc8 + 80002bc0: 00450513 addi a0,a0,4 + 80002bc4: fcdff06f j 80002b90 + 80002bc8: 008db583 ld a1,8(s11) + 80002bcc: 000da503 lw a0,0(s11) + 80002bd0: 05010613 addi a2,sp,80 + 80002bd4: 988ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 80002bd8: 02050663 beqz a0,80002c04 + 80002bdc: 02452603 lw a2,36(a0) + 80002be0: 0016061b addiw a2,a2,1 + 80002be4: 06810593 addi a1,sp,104 + 80002be8: 000d8513 mv a0,s11 + 80002bec: a50ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 80002bf0: b05ff06f j 800026f4 + 80002bf4: 80000637 lui a2,0x80000 + 80002bf8: aedff06f j 800026e4 + 80002bfc: 80000637 lui a2,0x80000 + 80002c00: cfdff06f j 800028fc + 80002c04: 80000637 lui a2,0x80000 + 80002c08: fddff06f j 80002be4 + 80002c0c: 80000637 lui a2,0x80000 + 80002c10: c79ff06f j 80002888 + 80002c14: 08010493 addi s1,sp,128 + 80002c18: 00005597 auipc a1,0x5 + 80002c1c: 93058593 addi a1,a1,-1744 # 80007548 <_ZL8PUZZLE_S> + 80002c20: 00048513 mv a0,s1 + 80002c24: f89fe0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002c28: 08012783 lw a5,128(sp) + 80002c2c: 08014803 lbu a6,128(sp) + 80002c30: 03810713 addi a4,sp,56 + 80002c34: 02f12c23 sw a5,56(sp) + 80002c38: 09412783 lw a5,148(sp) + 80002c3c: 09010413 addi s0,sp,144 + 80002c40: 04f12623 sw a5,76(sp) + 80002c44: 00048793 mv a5,s1 + 80002c48: 0047c503 lbu a0,4(a5) + 80002c4c: 0057c583 lbu a1,5(a5) + 80002c50: 0067c603 lbu a2,6(a5) + 80002c54: 0077c683 lbu a3,7(a5) + 80002c58: 00a70223 sb a0,4(a4) + 80002c5c: 00b702a3 sb a1,5(a4) + 80002c60: 00c70323 sb a2,6(a4) + 80002c64: 00d703a3 sb a3,7(a4) + 80002c68: 00478793 addi a5,a5,4 + 80002c6c: 00470713 addi a4,a4,4 + 80002c70: fc879ce3 bne a5,s0,80002c48 + 80002c74: 00a00793 li a5,10 + 80002c78: 00f13823 sd a5,16(sp) + 80002c7c: dd0ff06f j 8000224c + 80002c80: 08010493 addi s1,sp,128 + 80002c84: 00005597 auipc a1,0x5 + 80002c88: 84458593 addi a1,a1,-1980 # 800074c8 <_ZL8PUZZLE_L> + 80002c8c: 00048513 mv a0,s1 + 80002c90: f1dfe0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002c94: 08012783 lw a5,128(sp) + 80002c98: 08014803 lbu a6,128(sp) + 80002c9c: 03810713 addi a4,sp,56 + 80002ca0: 02f12c23 sw a5,56(sp) + 80002ca4: 09412783 lw a5,148(sp) + 80002ca8: 09010413 addi s0,sp,144 + 80002cac: 04f12623 sw a5,76(sp) + 80002cb0: 00048793 mv a5,s1 + 80002cb4: 0047c503 lbu a0,4(a5) + 80002cb8: 0057c583 lbu a1,5(a5) + 80002cbc: 0067c603 lbu a2,6(a5) + 80002cc0: 0077c683 lbu a3,7(a5) + 80002cc4: 00a70223 sb a0,4(a4) + 80002cc8: 00b702a3 sb a1,5(a4) + 80002ccc: 00c70323 sb a2,6(a4) + 80002cd0: 00d703a3 sb a3,7(a4) + 80002cd4: 00478793 addi a5,a5,4 + 80002cd8: 00470713 addi a4,a4,4 + 80002cdc: fcf41ce3 bne s0,a5,80002cb4 + 80002ce0: 000047b7 lui a5,0x4 + 80002ce4: 00f13823 sd a5,16(sp) + 80002ce8: d64ff06f j 8000224c + 80002cec: 008db583 ld a1,8(s11) + 80002cf0: 000da503 lw a0,0(s11) + 80002cf4: 05010613 addi a2,sp,80 + 80002cf8: 864ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 80002cfc: 02050063 beqz a0,80002d1c + 80002d00: 02452583 lw a1,36(a0) + 80002d04: 00090513 mv a0,s2 + 80002d08: 3d5010ef jal ra,800048dc <__muldi3> + 80002d0c: 00005797 auipc a5,0x5 + 80002d10: cdc78793 addi a5,a5,-804 # 800079e8 <_ZL3ans> + 80002d14: 00a7a023 sw a0,0(a5) + 80002d18: b8dff06f j 800028a4 + 80002d1c: 800005b7 lui a1,0x80000 + 80002d20: fff5c593 not a1,a1 + 80002d24: fe1ff06f j 80002d04 + 80002d28: 03300613 li a2,51 + 80002d2c: e38ff06f j 80002364 + 80002d30: 05600613 li a2,86 + 80002d34: 00004597 auipc a1,0x4 + 80002d38: 91458593 addi a1,a1,-1772 # 80006648 <_etext+0x3b4> + 80002d3c: 00003517 auipc a0,0x3 + 80002d40: 59c50513 addi a0,a0,1436 # 800062d8 <_etext+0x44> + 80002d44: 1f8030ef jal ra,80005f3c + 80002d48: 00100513 li a0,1 + 80002d4c: 349010ef jal ra,80004894 + +0000000080002d50 : + 80002d50: 00005797 auipc a5,0x5 + 80002d54: d807b783 ld a5,-640(a5) # 80007ad0 + 80002d58: 0007a783 lw a5,0(a5) + 80002d5c: fd010113 addi sp,sp,-48 + 80002d60: 01213823 sd s2,16(sp) + 80002d64: 00100513 li a0,1 + 80002d68: 00005917 auipc s2,0x5 + 80002d6c: c8490913 addi s2,s2,-892 # 800079ec + 80002d70: 02113423 sd ra,40(sp) + 80002d74: 00f92023 sw a5,0(s2) + 80002d78: 01313423 sd s3,8(sp) + 80002d7c: 02813023 sd s0,32(sp) + 80002d80: 00913c23 sd s1,24(sp) + 80002d84: 831fd0ef jal ra,800005b4 + 80002d88: 00011537 lui a0,0x11 + 80002d8c: 80850513 addi a0,a0,-2040 # 10808 <_entry_offset+0x10808> + 80002d90: f88fd0ef jal ra,80000518 + 80002d94: 00050793 mv a5,a0 + 80002d98: 00092503 lw a0,0(s2) + 80002d9c: 00005717 auipc a4,0x5 + 80002da0: c6f73623 sd a5,-916(a4) # 80007a08 + 80002da4: 00005997 auipc s3,0x5 + 80002da8: c4c98993 addi s3,s3,-948 # 800079f0 + 80002dac: f6cfd0ef jal ra,80000518 + 80002db0: 00092783 lw a5,0(s2) + 80002db4: 00a9b023 sd a0,0(s3) + 80002db8: 1907851b addiw a0,a5,400 + 80002dbc: f5cfd0ef jal ra,80000518 + 80002dc0: 00092783 lw a5,0(s2) + 80002dc4: 00005717 auipc a4,0x5 + 80002dc8: c2a73a23 sd a0,-972(a4) # 800079f8 + 80002dcc: 02f05e63 blez a5,80002e08 + 80002dd0: 00000413 li s0,0 + 80002dd4: ff4fd0ef jal ra,800005c8 + 80002dd8: 02051513 slli a0,a0,0x20 + 80002ddc: 0009b483 ld s1,0(s3) + 80002de0: 01a00593 li a1,26 + 80002de4: 02055513 srli a0,a0,0x20 + 80002de8: 3a9010ef jal ra,80004990 <__umoddi3> + 80002dec: 00092703 lw a4,0(s2) + 80002df0: 008484b3 add s1,s1,s0 + 80002df4: 0615051b addiw a0,a0,97 + 80002df8: 00140413 addi s0,s0,1 + 80002dfc: 00a48023 sb a0,0(s1) + 80002e00: 0004079b sext.w a5,s0 + 80002e04: fce7c8e3 blt a5,a4,80002dd4 + 80002e08: 02813083 ld ra,40(sp) + 80002e0c: 02013403 ld s0,32(sp) + 80002e10: 01813483 ld s1,24(sp) + 80002e14: 01013903 ld s2,16(sp) + 80002e18: 00813983 ld s3,8(sp) + 80002e1c: 03010113 addi sp,sp,48 + 80002e20: 00008067 ret + +0000000080002e24 : + 80002e24: ff010113 addi sp,sp,-16 + 80002e28: 00005697 auipc a3,0x5 + 80002e2c: be06b683 ld a3,-1056(a3) # 80007a08 + 80002e30: 00005617 auipc a2,0x5 + 80002e34: bbc62603 lw a2,-1092(a2) # 800079ec + 80002e38: 00005597 auipc a1,0x5 + 80002e3c: bc05b583 ld a1,-1088(a1) # 800079f8 + 80002e40: 00005517 auipc a0,0x5 + 80002e44: bb053503 ld a0,-1104(a0) # 800079f0 + 80002e48: 00113423 sd ra,8(sp) + 80002e4c: 084000ef jal ra,80002ed0 + 80002e50: 00813083 ld ra,8(sp) + 80002e54: 00005797 auipc a5,0x5 + 80002e58: baa7a623 sw a0,-1108(a5) # 80007a00 + 80002e5c: 01010113 addi sp,sp,16 + 80002e60: 00008067 ret + +0000000080002e64 : + 80002e64: 00005517 auipc a0,0x5 + 80002e68: b9453503 ld a0,-1132(a0) # 800079f8 + 80002e6c: 00005597 auipc a1,0x5 + 80002e70: b945a583 lw a1,-1132(a1) # 80007a00 + 80002e74: ff010113 addi sp,sp,-16 + 80002e78: 00b505b3 add a1,a0,a1 + 80002e7c: 00113423 sd ra,8(sp) + 80002e80: f98fd0ef jal ra,80000618 + 80002e84: 00005797 auipc a5,0x5 + 80002e88: c4c7b783 ld a5,-948(a5) # 80007ad0 + 80002e8c: 0187a783 lw a5,24(a5) + 80002e90: 00813083 ld ra,8(sp) + 80002e94: 0005051b sext.w a0,a0 + 80002e98: 40a78533 sub a0,a5,a0 + 80002e9c: 00153513 seqz a0,a0 + 80002ea0: 01010113 addi sp,sp,16 + 80002ea4: 00008067 ret + +0000000080002ea8 : + 80002ea8: ff010113 addi sp,sp,-16 + 80002eac: 00800613 li a2,8 + 80002eb0: 00004597 auipc a1,0x4 + 80002eb4: 82058593 addi a1,a1,-2016 # 800066d0 <_etext+0x43c> + 80002eb8: 00003517 auipc a0,0x3 + 80002ebc: 42050513 addi a0,a0,1056 # 800062d8 <_etext+0x44> + 80002ec0: 00113423 sd ra,8(sp) + 80002ec4: 078030ef jal ra,80005f3c + 80002ec8: 00100513 li a0,1 + 80002ecc: 1c9010ef jal ra,80004894 + +0000000080002ed0 : + 80002ed0: 00100793 li a5,1 + 80002ed4: f5010113 addi sp,sp,-176 + 80002ed8: 02079793 slli a5,a5,0x20 + 80002edc: 00060713 mv a4,a2 + 80002ee0: 02c13023 sd a2,32(sp) + 80002ee4: 0a113423 sd ra,168(sp) + 80002ee8: 0a813023 sd s0,160(sp) + 80002eec: 08913c23 sd s1,152(sp) + 80002ef0: 09213823 sd s2,144(sp) + 80002ef4: 09313423 sd s3,136(sp) + 80002ef8: 09413023 sd s4,128(sp) + 80002efc: 07513c23 sd s5,120(sp) + 80002f00: 07613823 sd s6,112(sp) + 80002f04: 07713423 sd s7,104(sp) + 80002f08: 07813023 sd s8,96(sp) + 80002f0c: 05913c23 sd s9,88(sp) + 80002f10: 05a13823 sd s10,80(sp) + 80002f14: 05b13423 sd s11,72(sp) + 80002f18: fff60613 addi a2,a2,-1 + 80002f1c: e6e78793 addi a5,a5,-402 + 80002f20: 00a13423 sd a0,8(sp) + 80002f24: 02b13823 sd a1,48(sp) + 80002f28: 58c7e463 bltu a5,a2,800034b0 + 80002f2c: 00300593 li a1,3 + 80002f30: 0d700793 li a5,215 + 80002f34: 02b13423 sd a1,40(sp) + 80002f38: 46e7e263 bltu a5,a4,8000339c + 80002f3c: 000107b7 lui a5,0x10 + 80002f40: 00011737 lui a4,0x11 + 80002f44: 00878793 addi a5,a5,8 # 10008 <_entry_offset+0x10008> + 80002f48: 80870713 addi a4,a4,-2040 # 10808 <_entry_offset+0x10808> + 80002f4c: 00f687b3 add a5,a3,a5 + 80002f50: 00e68733 add a4,a3,a4 + 80002f54: 00078023 sb zero,0(a5) + 80002f58: 00178793 addi a5,a5,1 + 80002f5c: fef71ce3 bne a4,a5,80002f54 + 80002f60: 00813783 ld a5,8(sp) + 80002f64: 03013703 ld a4,48(sp) + 80002f68: 02813583 ld a1,40(sp) + 80002f6c: 00c78633 add a2,a5,a2 + 80002f70: 02c13c23 sd a2,56(sp) + 80002f74: 00b704b3 add s1,a4,a1 + 80002f78: 00913823 sd s1,16(sp) + 80002f7c: ff660c13 addi s8,a2,-10 + 80002f80: 00448e13 addi t3,s1,4 + 80002f84: 00078713 mv a4,a5 + 80002f88: 5cfc6663 bltu s8,a5,80003554 + 80002f8c: 02013783 ld a5,32(sp) + 80002f90: ffc60d13 addi s10,a2,-4 + 80002f94: 0fe00c93 li s9,254 + 80002f98: 0017d793 srli a5,a5,0x1 + 80002f9c: 00f707b3 add a5,a4,a5 + 80002fa0: 00f13c23 sd a5,24(sp) + 80002fa4: 00010bb7 lui s7,0x10 + 80002fa8: 00070793 mv a5,a4 + 80002fac: 00400993 li s3,4 + 80002fb0: 80000737 lui a4,0x80000 + 80002fb4: 80000db7 lui s11,0x80000 + 80002fb8: 40fd0fb3 sub t6,s10,a5 + 80002fbc: 01fcd463 bge s9,t6,80002fc4 + 80002fc0: 0fe00f93 li t6,254 + 80002fc4: 0017c603 lbu a2,1(a5) + 80002fc8: 0027c503 lbu a0,2(a5) + 80002fcc: 0007c583 lbu a1,0(a5) + 80002fd0: 0086161b slliw a2,a2,0x8 + 80002fd4: 0105151b slliw a0,a0,0x10 + 80002fd8: 00a66633 or a2,a2,a0 + 80002fdc: 00b66633 or a2,a2,a1 + 80002fe0: 00d6559b srliw a1,a2,0xd + 80002fe4: 0096581b srliw a6,a2,0x9 + 80002fe8: 00b84833 xor a6,a6,a1 + 80002fec: 0006061b sext.w a2,a2 + 80002ff0: 00c84833 xor a6,a6,a2 + 80002ff4: 7ff87313 andi t1,a6,2047 + 80002ff8: 00531893 slli a7,t1,0x5 + 80002ffc: 011688b3 add a7,a3,a7 + 80003000: 0088b583 ld a1,8(a7) + 80003004: 00668533 add a0,a3,t1 + 80003008: 00ab8533 add a0,s7,a0 + 8000300c: ffe78a13 addi s4,a5,-2 + 80003010: 00854283 lbu t0,8(a0) + 80003014: 001f8f93 addi t6,t6,1 + 80003018: 00030813 mv a6,t1 + 8000301c: 0945fe63 bgeu a1,s4,800030b8 + 80003020: 2c029e63 bnez t0,800032fc + 80003024: 00f8b423 sd a5,8(a7) + 80003028: 00100613 li a2,1 + 8000302c: 00c50423 sb a2,8(a0) + 80003030: 0017571b srliw a4,a4,0x1 + 80003034: 0007c603 lbu a2,0(a5) + 80003038: 001e0e13 addi t3,t3,1 + 8000303c: 00178793 addi a5,a5,1 + 80003040: fece0fa3 sb a2,-1(t3) + 80003044: 00177613 andi a2,a4,1 + 80003048: 00060593 mv a1,a2 + 8000304c: 14fc6063 bltu s8,a5,8000318c + 80003050: f60584e3 beqz a1,80002fb8 + 80003054: 01813603 ld a2,24(sp) + 80003058: 02f67063 bgeu a2,a5,80003078 + 8000305c: 00813603 ld a2,8(sp) + 80003060: 01013583 ld a1,16(sp) + 80003064: 40c78633 sub a2,a5,a2 + 80003068: 40565513 srai a0,a2,0x5 + 8000306c: 40be05b3 sub a1,t3,a1 + 80003070: 40a60633 sub a2,a2,a0 + 80003074: 44b64a63 blt a2,a1,800034c8 + 80003078: 0017571b srliw a4,a4,0x1 + 8000307c: 01b76733 or a4,a4,s11 + 80003080: 0007071b sext.w a4,a4 + 80003084: 00875513 srli a0,a4,0x8 + 80003088: 01075593 srli a1,a4,0x10 + 8000308c: 01875613 srli a2,a4,0x18 + 80003090: 00e48023 sb a4,0(s1) + 80003094: 00a480a3 sb a0,1(s1) + 80003098: 00b48123 sb a1,2(s1) + 8000309c: 00c481a3 sb a2,3(s1) + 800030a0: 40fd0fb3 sub t6,s10,a5 + 800030a4: 000e0493 mv s1,t3 + 800030a8: 80000737 lui a4,0x80000 + 800030ac: 004e0e13 addi t3,t3,4 + 800030b0: f1fcdae3 bge s9,t6,80002fc4 + 800030b4: f0dff06f j 80002fc0 + 800030b8: 00000e93 li t4,0 + 800030bc: 00531593 slli a1,t1,0x5 + 800030c0: 0002891b sext.w s2,t0 + 800030c4: 00b685b3 add a1,a3,a1 + 800030c8: 00000f13 li t5,0 + 800030cc: 00100513 li a0,1 + 800030d0: 03257863 bgeu a0,s2,80003100 + 800030d4: 0105b883 ld a7,16(a1) + 800030d8: 020e9393 slli t2,t4,0x20 + 800030dc: 0203d393 srli t2,t2,0x20 + 800030e0: 00778433 add s0,a5,t2 + 800030e4: 007883b3 add t2,a7,t2 + 800030e8: 00044403 lbu s0,0(s0) + 800030ec: 0003c383 lbu t2,0(t2) + 800030f0: 18740c63 beq s0,t2,80003288 + 800030f4: 0015051b addiw a0,a0,1 + 800030f8: 00858593 addi a1,a1,8 + 800030fc: fd351ae3 bne a0,s3,800030d0 + 80003100: 0032f593 andi a1,t0,3 + 80003104: 00231613 slli a2,t1,0x2 + 80003108: 00b60633 add a2,a2,a1 + 8000310c: 00361613 slli a2,a2,0x3 + 80003110: 00c68633 add a2,a3,a2 + 80003114: 00668333 add t1,a3,t1 + 80003118: 00f63423 sd a5,8(a2) + 8000311c: 006b8333 add t1,s7,t1 + 80003120: 0012829b addiw t0,t0,1 + 80003124: 0017561b srliw a2,a4,0x1 + 80003128: 00530423 sb t0,8(t1) + 8000312c: 00200593 li a1,2 + 80003130: 0006071b sext.w a4,a2 + 80003134: f1d5f0e3 bgeu a1,t4,80003034 + 80003138: 01b66733 or a4,a2,s11 + 8000313c: 020e9613 slli a2,t4,0x20 + 80003140: 02065613 srli a2,a2,0x20 + 80003144: 0058181b slliw a6,a6,0x5 + 80003148: 010f6f33 or t5,t5,a6 + 8000314c: 00c787b3 add a5,a5,a2 + 80003150: 00900613 li a2,9 + 80003154: 0007071b sext.w a4,a4 + 80003158: 000f0f1b sext.w t5,t5 + 8000315c: 21d66c63 bltu a2,t4,80003374 + 80003160: ffee8e9b addiw t4,t4,-2 + 80003164: 002e9e9b slliw t4,t4,0x2 + 80003168: 01df6f33 or t5,t5,t4 + 8000316c: 000f0f1b sext.w t5,t5 + 80003170: 008f5613 srli a2,t5,0x8 + 80003174: 00ce00a3 sb a2,1(t3) + 80003178: 01ee0023 sb t5,0(t3) + 8000317c: 00177613 andi a2,a4,1 + 80003180: 002e0e13 addi t3,t3,2 + 80003184: 00060593 mv a1,a2 + 80003188: ecfc74e3 bgeu s8,a5,80003050 + 8000318c: 03813883 ld a7,56(sp) + 80003190: 0017551b srliw a0,a4,0x1 + 80003194: 0017581b srliw a6,a4,0x1 + 80003198: 20f8e863 bltu a7,a5,800033a8 + 8000319c: 03813583 ld a1,56(sp) + 800031a0: 02013803 ld a6,32(sp) + 800031a4: 80000f37 lui t5,0x80000 + 800031a8: ffd58313 addi t1,a1,-3 + 800031ac: 00813583 ld a1,8(sp) + 800031b0: 00010eb7 lui t4,0x10 + 800031b4: 010588b3 add a7,a1,a6 + 800031b8: 08c0006f j 80003244 + 800031bc: 0027581b srliw a6,a4,0x2 + 800031c0: 00157593 andi a1,a0,1 + 800031c4: 000f8713 mv a4,t6 + 800031c8: 0007cf83 lbu t6,0(a5) + 800031cc: 06f36063 bltu t1,a5,8000322c + 800031d0: 0017c503 lbu a0,1(a5) + 800031d4: 0027c603 lbu a2,2(a5) + 800031d8: 0085151b slliw a0,a0,0x8 + 800031dc: 0106161b slliw a2,a2,0x10 + 800031e0: 00c56533 or a0,a0,a2 + 800031e4: 00d5529b srliw t0,a0,0xd + 800031e8: 0095561b srliw a2,a0,0x9 + 800031ec: 00564633 xor a2,a2,t0 + 800031f0: 01f56533 or a0,a0,t6 + 800031f4: 00a64633 xor a2,a2,a0 + 800031f8: 7ff67613 andi a2,a2,2047 + 800031fc: 00c68533 add a0,a3,a2 + 80003200: 00ae8533 add a0,t4,a0 + 80003204: 00854f83 lbu t6,8(a0) + 80003208: 00261613 slli a2,a2,0x2 + 8000320c: 003ff293 andi t0,t6,3 + 80003210: 00560633 add a2,a2,t0 + 80003214: 00361613 slli a2,a2,0x3 + 80003218: 00c68633 add a2,a3,a2 + 8000321c: 00f63423 sd a5,8(a2) + 80003220: 001f8f9b addiw t6,t6,1 + 80003224: 01f50423 sb t6,8(a0) + 80003228: 0007cf83 lbu t6,0(a5) + 8000322c: 01fe0023 sb t6,0(t3) + 80003230: 00178793 addi a5,a5,1 + 80003234: 001e0e13 addi t3,t3,1 + 80003238: 17178863 beq a5,a7,800033a8 + 8000323c: 0017551b srliw a0,a4,0x1 + 80003240: 00177613 andi a2,a4,1 + 80003244: 00050f9b sext.w t6,a0 + 80003248: f6060ae3 beqz a2,800031bc + 8000324c: 01e56533 or a0,a0,t5 + 80003250: 0005051b sext.w a0,a0 + 80003254: 00855593 srli a1,a0,0x8 + 80003258: 01855713 srli a4,a0,0x18 + 8000325c: 01055613 srli a2,a0,0x10 + 80003260: 00b480a3 sb a1,1(s1) + 80003264: 00e481a3 sb a4,3(s1) + 80003268: 00a48023 sb a0,0(s1) + 8000326c: 00c48123 sb a2,2(s1) + 80003270: 20000837 lui a6,0x20000 + 80003274: 000e0493 mv s1,t3 + 80003278: 00000593 li a1,0 + 8000327c: 004e0e13 addi t3,t3,4 + 80003280: 40000737 lui a4,0x40000 + 80003284: f45ff06f j 800031c8 + 80003288: 0018c383 lbu t2,1(a7) + 8000328c: 0028c403 lbu s0,2(a7) + 80003290: 0008ca83 lbu s5,0(a7) + 80003294: 0083939b slliw t2,t2,0x8 + 80003298: 0104141b slliw s0,s0,0x10 + 8000329c: 0083e3b3 or t2,t2,s0 + 800032a0: 0153e3b3 or t2,t2,s5 + 800032a4: 0003839b sext.w t2,t2 + 800032a8: e4c396e3 bne t2,a2,800030f4 + 800032ac: e548f4e3 bgeu a7,s4,800030f4 + 800032b0: 0038c403 lbu s0,3(a7) + 800032b4: 0037c383 lbu t2,3(a5) + 800032b8: 28741a63 bne s0,t2,8000354c + 800032bc: 00300393 li t2,3 + 800032c0: 01f3e663 bltu t2,t6,800032cc + 800032c4: 2880006f j 8000354c + 800032c8: 03f47263 bgeu s0,t6,800032ec + 800032cc: 0013839b addiw t2,t2,1 + 800032d0: 02039413 slli s0,t2,0x20 + 800032d4: 02045413 srli s0,s0,0x20 + 800032d8: 00888b33 add s6,a7,s0 + 800032dc: 00878ab3 add s5,a5,s0 + 800032e0: 000b4b03 lbu s6,0(s6) + 800032e4: 000aca83 lbu s5,0(s5) + 800032e8: ff5b00e3 beq s6,s5,800032c8 + 800032ec: e07ef4e3 bgeu t4,t2,800030f4 + 800032f0: 00050f13 mv t5,a0 + 800032f4: 00038e93 mv t4,t2 + 800032f8: dfdff06f j 800030f4 + 800032fc: 0015c503 lbu a0,1(a1) + 80003300: 0025c883 lbu a7,2(a1) + 80003304: 0005ce83 lbu t4,0(a1) + 80003308: 0085151b slliw a0,a0,0x8 + 8000330c: 0108989b slliw a7,a7,0x10 + 80003310: 01156533 or a0,a0,a7 + 80003314: 01d56533 or a0,a0,t4 + 80003318: 0005051b sext.w a0,a0 + 8000331c: 00000e93 li t4,0 + 80003320: d8c51ee3 bne a0,a2,800030bc + 80003324: 0035c883 lbu a7,3(a1) + 80003328: 0037c503 lbu a0,3(a5) + 8000332c: 00300e93 li t4,3 + 80003330: d8a896e3 bne a7,a0,800030bc + 80003334: 0045c883 lbu a7,4(a1) + 80003338: 0047c503 lbu a0,4(a5) + 8000333c: 00400e93 li t4,4 + 80003340: d6a89ee3 bne a7,a0,800030bc + 80003344: 01f9e663 bltu s3,t6,80003350 + 80003348: d75ff06f j 800030bc + 8000334c: d7f578e3 bgeu a0,t6,800030bc + 80003350: 001e8e9b addiw t4,t4,1 + 80003354: 020e9513 slli a0,t4,0x20 + 80003358: 02055513 srli a0,a0,0x20 + 8000335c: 00a588b3 add a7,a1,a0 + 80003360: 00a78f33 add t5,a5,a0 + 80003364: 0008c883 lbu a7,0(a7) + 80003368: 000f4f03 lbu t5,0(t5) # ffffffff80000000 <_end+0xfffffffeffff0000> + 8000336c: ffe880e3 beq a7,t5,8000334c + 80003370: d4dff06f j 800030bc + 80003374: 010e9e9b slliw t4,t4,0x10 + 80003378: 01df6eb3 or t4,t5,t4 + 8000337c: 000e8e9b sext.w t4,t4 + 80003380: 008ed593 srli a1,t4,0x8 + 80003384: 010ed613 srli a2,t4,0x10 + 80003388: 01de0023 sb t4,0(t3) + 8000338c: 00be00a3 sb a1,1(t3) + 80003390: 00ce0123 sb a2,2(t3) + 80003394: 003e0e13 addi t3,t3,3 + 80003398: cadff06f j 80003044 + 8000339c: 00900793 li a5,9 + 800033a0: 02f13423 sd a5,40(sp) + 800033a4: b99ff06f j 80002f3c + 800033a8: 00059e63 bnez a1,800033c4 + 800033ac: 0017579b srliw a5,a4,0x1 + 800033b0: 0017f613 andi a2,a5,1 + 800033b4: 0007081b sext.w a6,a4 + 800033b8: 0007871b sext.w a4,a5 + 800033bc: fe0608e3 beqz a2,800033ac + 800033c0: 0028581b srliw a6,a6,0x2 + 800033c4: 800007b7 lui a5,0x80000 + 800033c8: 00f86833 or a6,a6,a5 + 800033cc: 01885793 srli a5,a6,0x18 + 800033d0: 00f481a3 sb a5,3(s1) + 800033d4: 01013783 ld a5,16(sp) + 800033d8: 00885613 srli a2,a6,0x8 + 800033dc: 01085713 srli a4,a6,0x10 + 800033e0: 40fe0533 sub a0,t3,a5 + 800033e4: 01048023 sb a6,0(s1) + 800033e8: 00c480a3 sb a2,1(s1) + 800033ec: 00e48123 sb a4,2(s1) + 800033f0: 00900793 li a5,9 + 800033f4: 00f55463 bge a0,a5,800033fc + 800033f8: 00900513 li a0,9 + 800033fc: 02813783 ld a5,40(sp) + 80003400: 00f50533 add a0,a0,a5 + 80003404: 00100793 li a5,1 + 80003408: 0006b023 sd zero,0(a3) + 8000340c: 02813683 ld a3,40(sp) + 80003410: 00300713 li a4,3 + 80003414: 02014603 lbu a2,32(sp) + 80003418: 0ff57593 andi a1,a0,255 + 8000341c: 08e68e63 beq a3,a4,800034b8 + 80003420: 02012683 lw a3,32(sp) + 80003424: 03013e83 ld t4,48(sp) + 80003428: 0005071b sext.w a4,a0 + 8000342c: 00875e13 srli t3,a4,0x8 + 80003430: 01075313 srli t1,a4,0x10 + 80003434: 0086d893 srli a7,a3,0x8 + 80003438: 0106d813 srli a6,a3,0x10 + 8000343c: 01875713 srli a4,a4,0x18 + 80003440: 0186d693 srli a3,a3,0x18 + 80003444: 0027e793 ori a5,a5,2 + 80003448: 00be80a3 sb a1,1(t4) # 10001 <_entry_offset+0x10001> + 8000344c: 01ce8123 sb t3,2(t4) + 80003450: 006e81a3 sb t1,3(t4) + 80003454: 00ee8223 sb a4,4(t4) + 80003458: 00ce82a3 sb a2,5(t4) + 8000345c: 011e8323 sb a7,6(t4) + 80003460: 010e83a3 sb a6,7(t4) + 80003464: 00de8423 sb a3,8(t4) + 80003468: 03013703 ld a4,48(sp) + 8000346c: 0487e793 ori a5,a5,72 + 80003470: 00f70023 sb a5,0(a4) # 40000000 <_entry_offset+0x40000000> + 80003474: 0a813083 ld ra,168(sp) + 80003478: 0a013403 ld s0,160(sp) + 8000347c: 09813483 ld s1,152(sp) + 80003480: 09013903 ld s2,144(sp) + 80003484: 08813983 ld s3,136(sp) + 80003488: 08013a03 ld s4,128(sp) + 8000348c: 07813a83 ld s5,120(sp) + 80003490: 07013b03 ld s6,112(sp) + 80003494: 06813b83 ld s7,104(sp) + 80003498: 06013c03 ld s8,96(sp) + 8000349c: 05813c83 ld s9,88(sp) + 800034a0: 05013d03 ld s10,80(sp) + 800034a4: 04813d83 ld s11,72(sp) + 800034a8: 0b010113 addi sp,sp,176 + 800034ac: 00008067 ret + 800034b0: 00000513 li a0,0 + 800034b4: fc1ff06f j 80003474 + 800034b8: 03013703 ld a4,48(sp) + 800034bc: 00b700a3 sb a1,1(a4) + 800034c0: 00c70123 sb a2,2(a4) + 800034c4: fa5ff06f j 80003468 + 800034c8: 00813783 ld a5,8(sp) + 800034cc: 0a078c63 beqz a5,80003584 + 800034d0: 00813603 ld a2,8(sp) + 800034d4: 02013583 ld a1,32(sp) + 800034d8: 01013703 ld a4,16(sp) + 800034dc: 00b607b3 add a5,a2,a1 + 800034e0: 02f77c63 bgeu a4,a5,80003518 + 800034e4: 02e67a63 bgeu a2,a4,80003518 + 800034e8: 00b70733 add a4,a4,a1 + 800034ec: fff7c603 lbu a2,-1(a5) # ffffffff7fffffff <_end+0xfffffffefffeffff> + 800034f0: fff78793 addi a5,a5,-1 + 800034f4: fff70713 addi a4,a4,-1 + 800034f8: 00c70023 sb a2,0(a4) + 800034fc: 00813603 ld a2,8(sp) + 80003500: fef616e3 bne a2,a5,800034ec + 80003504: 02813783 ld a5,40(sp) + 80003508: 02013703 ld a4,32(sp) + 8000350c: 00e78533 add a0,a5,a4 + 80003510: 00000793 li a5,0 + 80003514: ef5ff06f j 80003408 + 80003518: 01013783 ld a5,16(sp) + 8000351c: 02013703 ld a4,32(sp) + 80003520: 00e78733 add a4,a5,a4 + 80003524: 00813583 ld a1,8(sp) + 80003528: 01013603 ld a2,16(sp) + 8000352c: 0005c783 lbu a5,0(a1) + 80003530: 00160613 addi a2,a2,1 + 80003534: 00158593 addi a1,a1,1 + 80003538: 00c13823 sd a2,16(sp) + 8000353c: 00b13423 sd a1,8(sp) + 80003540: fef60fa3 sb a5,-1(a2) + 80003544: fec710e3 bne a4,a2,80003524 + 80003548: fbdff06f j 80003504 + 8000354c: 00300393 li t2,3 + 80003550: d9dff06f j 800032ec + 80003554: 00813783 ld a5,8(sp) + 80003558: 03813703 ld a4,56(sp) + 8000355c: 00f76e63 bltu a4,a5,80003578 + 80003560: 00813783 ld a5,8(sp) + 80003564: 01013483 ld s1,16(sp) + 80003568: 80000737 lui a4,0x80000 + 8000356c: 40000537 lui a0,0x40000 + 80003570: 00000613 li a2,0 + 80003574: c29ff06f j 8000319c + 80003578: 01013483 ld s1,16(sp) + 8000357c: 80000737 lui a4,0x80000 + 80003580: e2dff06f j 800033ac + 80003584: 925ff0ef jal ra,80002ea8 + +0000000080003588 : + 80003588: 00004797 auipc a5,0x4 + 8000358c: 5487b783 ld a5,1352(a5) # 80007ad0 + 80003590: 0007a783 lw a5,0(a5) + 80003594: fd010113 addi sp,sp,-48 + 80003598: 01213823 sd s2,16(sp) + 8000359c: 00004537 lui a0,0x4 + 800035a0: 00004917 auipc s2,0x4 + 800035a4: 47090913 addi s2,s2,1136 # 80007a10 + 800035a8: 02113423 sd ra,40(sp) + 800035ac: 00f92023 sw a5,0(s2) + 800035b0: 01313423 sd s3,8(sp) + 800035b4: 00004797 auipc a5,0x4 + 800035b8: 4607a623 sw zero,1132(a5) # 80007a20 + 800035bc: 02813023 sd s0,32(sp) + 800035c0: 00913c23 sd s1,24(sp) + 800035c4: 01413023 sd s4,0(sp) + 800035c8: f51fc0ef jal ra,80000518 + 800035cc: 00050793 mv a5,a0 + 800035d0: 40000513 li a0,1024 + 800035d4: 00004717 auipc a4,0x4 + 800035d8: 44f73223 sd a5,1092(a4) # 80007a18 + 800035dc: f3dfc0ef jal ra,80000518 + 800035e0: 00050793 mv a5,a0 + 800035e4: 00002537 lui a0,0x2 + 800035e8: 00004717 auipc a4,0x4 + 800035ec: 44f73023 sd a5,1088(a4) # 80007a28 + 800035f0: f29fc0ef jal ra,80000518 + 800035f4: 00092783 lw a5,0(s2) + 800035f8: 00004717 auipc a4,0x4 + 800035fc: 44a73023 sd a0,1088(a4) # 80007a38 + 80003600: 00004997 auipc s3,0x4 + 80003604: 44098993 addi s3,s3,1088 # 80007a40 + 80003608: 0017851b addiw a0,a5,1 + 8000360c: 00003797 auipc a5,0x3 + 80003610: 10c78793 addi a5,a5,268 # 80006718 <_etext+0x484> + 80003614: 00004717 auipc a4,0x4 + 80003618: 40f73e23 sd a5,1052(a4) # 80007a30 + 8000361c: efdfc0ef jal ra,80000518 + 80003620: 00050793 mv a5,a0 + 80003624: 00001537 lui a0,0x1 + 80003628: 00f9b023 sd a5,0(s3) + 8000362c: eedfc0ef jal ra,80000518 + 80003630: 00050793 mv a5,a0 + 80003634: 00100513 li a0,1 + 80003638: 00004717 auipc a4,0x4 + 8000363c: 40f73c23 sd a5,1048(a4) # 80007a50 + 80003640: 00004797 auipc a5,0x4 + 80003644: 4007a423 sw zero,1032(a5) # 80007a48 + 80003648: f6dfc0ef jal ra,800005b4 + 8000364c: 00092783 lw a5,0(s2) + 80003650: 04f05863 blez a5,800036a0 + 80003654: 00000413 li s0,0 + 80003658: 00003a17 auipc s4,0x3 + 8000365c: 178a0a13 addi s4,s4,376 # 800067d0 <_etext+0x53c> + 80003660: f69fc0ef jal ra,800005c8 + 80003664: 02051513 slli a0,a0,0x20 + 80003668: 03e00593 li a1,62 + 8000366c: 02055513 srli a0,a0,0x20 + 80003670: 320010ef jal ra,80004990 <__umoddi3> + 80003674: 02051513 slli a0,a0,0x20 + 80003678: 02055513 srli a0,a0,0x20 + 8000367c: 0009b483 ld s1,0(s3) + 80003680: 00aa0533 add a0,s4,a0 + 80003684: 00054783 lbu a5,0(a0) # 1000 <_entry_offset+0x1000> + 80003688: 00092703 lw a4,0(s2) + 8000368c: 008484b3 add s1,s1,s0 + 80003690: 00140413 addi s0,s0,1 + 80003694: 00f48023 sb a5,0(s1) + 80003698: 0004079b sext.w a5,s0 + 8000369c: fce7c2e3 blt a5,a4,80003660 + 800036a0: 02813083 ld ra,40(sp) + 800036a4: 02013403 ld s0,32(sp) + 800036a8: 01813483 ld s1,24(sp) + 800036ac: 01013903 ld s2,16(sp) + 800036b0: 00813983 ld s3,8(sp) + 800036b4: 00013a03 ld s4,0(sp) + 800036b8: 03010113 addi sp,sp,48 + 800036bc: 00008067 ret + +00000000800036c0 : + 800036c0: 00004317 auipc t1,0x4 + 800036c4: 37030313 addi t1,t1,880 # 80007a30 + 800036c8: 00033583 ld a1,0(t1) + 800036cc: fc010113 addi sp,sp,-64 + 800036d0: 02813c23 sd s0,56(sp) + 800036d4: 02913823 sd s1,48(sp) + 800036d8: 03213423 sd s2,40(sp) + 800036dc: 03313023 sd s3,32(sp) + 800036e0: 01413c23 sd s4,24(sp) + 800036e4: 01513823 sd s5,16(sp) + 800036e8: 01613423 sd s6,8(sp) + 800036ec: 01713023 sd s7,0(sp) + 800036f0: 0005c703 lbu a4,0(a1) + 800036f4: 00004517 auipc a0,0x4 + 800036f8: 32c50513 addi a0,a0,812 # 80007a20 + 800036fc: 00052603 lw a2,0(a0) + 80003700: 00004697 auipc a3,0x4 + 80003704: 3186b683 ld a3,792(a3) # 80007a18 + 80003708: 38070463 beqz a4,80003a90 + 8000370c: 00004897 auipc a7,0x4 + 80003710: 31c8b883 ld a7,796(a7) # 80007a28 + 80003714: 00158593 addi a1,a1,1 + 80003718: 00000b13 li s6,0 + 8000371c: 00000a93 li s5,0 + 80003720: 00000793 li a5,0 + 80003724: 03200a13 li s4,50 + 80003728: 00003817 auipc a6,0x3 + 8000372c: 0e880813 addi a6,a6,232 # 80006810 <_etext+0x57c> + 80003730: 000019b7 lui s3,0x1 + 80003734: 00800913 li s2,8 + 80003738: 00700493 li s1,7 + 8000373c: 20000413 li s0,512 + 80003740: 00600393 li t2,6 + 80003744: 00500293 li t0,5 + 80003748: 00400f93 li t6,4 + 8000374c: 00300f13 li t5,3 + 80003750: 00200e93 li t4,2 + 80003754: 00100e13 li t3,1 + 80003758: fd57071b addiw a4,a4,-43 + 8000375c: 0ff77713 andi a4,a4,255 + 80003760: fff58b93 addi s7,a1,-1 + 80003764: 00ea6c63 bltu s4,a4,8000377c + 80003768: 00271713 slli a4,a4,0x2 + 8000376c: 01070733 add a4,a4,a6 + 80003770: 00072703 lw a4,0(a4) + 80003774: 01070733 add a4,a4,a6 + 80003778: 00070067 jr a4 + 8000377c: 0005c703 lbu a4,0(a1) + 80003780: 10070a63 beqz a4,80003894 + 80003784: 00158593 addi a1,a1,1 + 80003788: 00100b13 li s6,1 + 8000378c: fcdff06f j 80003758 + 80003790: 2c060e63 beqz a2,80003a6c + 80003794: fff6061b addiw a2,a2,-1 + 80003798: 02061713 slli a4,a2,0x20 + 8000379c: 01f75713 srli a4,a4,0x1f + 800037a0: 00e88733 add a4,a7,a4 + 800037a4: 00075b03 lhu s6,0(a4) + 800037a8: 00279713 slli a4,a5,0x2 + 800037ac: 00e68733 add a4,a3,a4 + 800037b0: 002b1a93 slli s5,s6,0x2 + 800037b4: 01671123 sh s6,2(a4) + 800037b8: 01271023 sh s2,0(a4) + 800037bc: 01568733 add a4,a3,s5 + 800037c0: 00f71123 sh a5,2(a4) + 800037c4: 00100a93 li s5,1 + 800037c8: 0005c703 lbu a4,0(a1) + 800037cc: 0017879b addiw a5,a5,1 + 800037d0: 03079793 slli a5,a5,0x30 + 800037d4: 0307d793 srli a5,a5,0x30 + 800037d8: 0a070e63 beqz a4,80003894 + 800037dc: fb3794e3 bne a5,s3,80003784 + 800037e0: 000a8463 beqz s5,800037e8 + 800037e4: 00c52023 sw a2,0(a0) + 800037e8: 00b33023 sd a1,0(t1) + 800037ec: 0006d703 lhu a4,0(a3) + 800037f0: 16070c63 beqz a4,80003968 + 800037f4: 00004e97 auipc t4,0x4 + 800037f8: 24ce8e93 addi t4,t4,588 # 80007a40 + 800037fc: 00004e17 auipc t3,0x4 + 80003800: 24ce0e13 addi t3,t3,588 # 80007a48 + 80003804: 000eb803 ld a6,0(t4) + 80003808: 000e2503 lw a0,0(t3) + 8000380c: 00004597 auipc a1,0x4 + 80003810: 22c5b583 ld a1,556(a1) # 80007a38 + 80003814: 00004397 auipc t2,0x4 + 80003818: 23c3b383 ld t2,572(t2) # 80007a50 + 8000381c: 00068793 mv a5,a3 + 80003820: 00000f13 li t5,0 + 80003824: 00000313 li t1,0 + 80003828: 00000413 li s0,0 + 8000382c: 00000613 li a2,0 + 80003830: 00800293 li t0,8 + 80003834: 00003897 auipc a7,0x3 + 80003838: 0a888893 addi a7,a7,168 # 800068dc <_etext+0x648> + 8000383c: 00001fb7 lui t6,0x1 + 80003840: 10e2ec63 bltu t0,a4,80003958 + 80003844: 00271713 slli a4,a4,0x2 + 80003848: 01170733 add a4,a4,a7 + 8000384c: 00072703 lw a4,0(a4) + 80003850: 01170733 add a4,a4,a7 + 80003854: 00070067 jr a4 + 80003858: 00279713 slli a4,a5,0x2 + 8000385c: 00e68733 add a4,a3,a4 + 80003860: 00971023 sh s1,0(a4) + 80003864: 22860063 beq a2,s0,80003a84 + 80003868: 02061713 slli a4,a2,0x20 + 8000386c: 01f75713 srli a4,a4,0x1f + 80003870: 00e88733 add a4,a7,a4 + 80003874: 00f71023 sh a5,0(a4) + 80003878: 0005c703 lbu a4,0(a1) + 8000387c: 0017879b addiw a5,a5,1 + 80003880: 03079793 slli a5,a5,0x30 + 80003884: 0016061b addiw a2,a2,1 + 80003888: 00100a93 li s5,1 + 8000388c: 0307d793 srli a5,a5,0x30 + 80003890: f40716e3 bnez a4,800037dc + 80003894: 000a8463 beqz s5,8000389c + 80003898: 00c52023 sw a2,0(a0) + 8000389c: 00052703 lw a4,0(a0) + 800038a0: 00b33023 sd a1,0(t1) + 800038a4: f40714e3 bnez a4,800037ec + 800038a8: 00001737 lui a4,0x1 + 800038ac: f4e780e3 beq a5,a4,800037ec + 800038b0: 00279793 slli a5,a5,0x2 + 800038b4: 00f687b3 add a5,a3,a5 + 800038b8: 00079023 sh zero,0(a5) + 800038bc: 0006d703 lhu a4,0(a3) + 800038c0: f2071ae3 bnez a4,800037f4 + 800038c4: 0a40006f j 80003968 + 800038c8: 00279713 slli a4,a5,0x2 + 800038cc: 00e68733 add a4,a3,a4 + 800038d0: 01c71023 sh t3,0(a4) # 1000 <_entry_offset+0x1000> + 800038d4: ef5ff06f j 800037c8 + 800038d8: 00279713 slli a4,a5,0x2 + 800038dc: 00e68733 add a4,a3,a4 + 800038e0: 01d71023 sh t4,0(a4) + 800038e4: ee5ff06f j 800037c8 + 800038e8: 00279713 slli a4,a5,0x2 + 800038ec: 00e68733 add a4,a3,a4 + 800038f0: 00571023 sh t0,0(a4) + 800038f4: ed5ff06f j 800037c8 + 800038f8: 00279713 slli a4,a5,0x2 + 800038fc: 00e68733 add a4,a3,a4 + 80003900: 01f71023 sh t6,0(a4) + 80003904: ec5ff06f j 800037c8 + 80003908: 00279713 slli a4,a5,0x2 + 8000390c: 00e68733 add a4,a3,a4 + 80003910: 00771023 sh t2,0(a4) + 80003914: eb5ff06f j 800037c8 + 80003918: 00279713 slli a4,a5,0x2 + 8000391c: 00e68733 add a4,a3,a4 + 80003920: 01e71023 sh t5,0(a4) + 80003924: ea5ff06f j 800037c8 + 80003928: 02061713 slli a4,a2,0x20 + 8000392c: 01f75713 srli a4,a4,0x1f + 80003930: 00e58733 add a4,a1,a4 + 80003934: 00075703 lhu a4,0(a4) + 80003938: 08070863 beqz a4,800039c8 + 8000393c: 0027d403 lhu s0,2(a5) + 80003940: 0014041b addiw s0,s0,1 + 80003944: 02041793 slli a5,s0,0x20 + 80003948: 01e7d793 srli a5,a5,0x1e + 8000394c: 00f687b3 add a5,a3,a5 + 80003950: 0007d703 lhu a4,0(a5) + 80003954: ee0716e3 bnez a4,80003840 + 80003958: 00030463 beqz t1,80003960 + 8000395c: 00ae2023 sw a0,0(t3) + 80003960: 000f0463 beqz t5,80003968 + 80003964: 010eb023 sd a6,0(t4) + 80003968: 03813403 ld s0,56(sp) + 8000396c: 03013483 ld s1,48(sp) + 80003970: 02813903 ld s2,40(sp) + 80003974: 02013983 ld s3,32(sp) + 80003978: 01813a03 ld s4,24(sp) + 8000397c: 01013a83 ld s5,16(sp) + 80003980: 00813b03 ld s6,8(sp) + 80003984: 00013b83 ld s7,0(sp) + 80003988: 04010113 addi sp,sp,64 + 8000398c: 00008067 ret + 80003990: 02061713 slli a4,a2,0x20 + 80003994: 01f75713 srli a4,a4,0x1f + 80003998: 00e58733 add a4,a1,a4 + 8000399c: 00075703 lhu a4,0(a4) + 800039a0: 02071463 bnez a4,800039c8 + 800039a4: 0027d403 lhu s0,2(a5) + 800039a8: f99ff06f j 80003940 + 800039ac: 00084703 lbu a4,0(a6) + 800039b0: 02061793 slli a5,a2,0x20 + 800039b4: 01f7d793 srli a5,a5,0x1f + 800039b8: 00f587b3 add a5,a1,a5 + 800039bc: 00e79023 sh a4,0(a5) + 800039c0: 00180813 addi a6,a6,1 + 800039c4: 00100f13 li t5,1 + 800039c8: 0014041b addiw s0,s0,1 + 800039cc: 02041793 slli a5,s0,0x20 + 800039d0: 01e7d793 srli a5,a5,0x1e + 800039d4: 00f687b3 add a5,a3,a5 + 800039d8: 0007d703 lhu a4,0(a5) + 800039dc: e60712e3 bnez a4,80003840 + 800039e0: f79ff06f j 80003958 + 800039e4: 02061793 slli a5,a2,0x20 + 800039e8: 01f7d793 srli a5,a5,0x1f + 800039ec: 00f587b3 add a5,a1,a5 + 800039f0: 0007d703 lhu a4,0(a5) + 800039f4: fff7071b addiw a4,a4,-1 + 800039f8: 00e79023 sh a4,0(a5) + 800039fc: fcdff06f j 800039c8 + 80003a00: 02061793 slli a5,a2,0x20 + 80003a04: 01f7d793 srli a5,a5,0x1f + 80003a08: 00f587b3 add a5,a1,a5 + 80003a0c: 0007d703 lhu a4,0(a5) + 80003a10: 00a387b3 add a5,t2,a0 + 80003a14: 00100313 li t1,1 + 80003a18: 00e78023 sb a4,0(a5) + 80003a1c: 0015051b addiw a0,a0,1 + 80003a20: fa9ff06f j 800039c8 + 80003a24: 02061793 slli a5,a2,0x20 + 80003a28: 01f7d793 srli a5,a5,0x1f + 80003a2c: 00f587b3 add a5,a1,a5 + 80003a30: 0007d703 lhu a4,0(a5) + 80003a34: 0017071b addiw a4,a4,1 + 80003a38: 00e79023 sh a4,0(a5) + 80003a3c: f8dff06f j 800039c8 + 80003a40: fff6061b addiw a2,a2,-1 + 80003a44: 0014041b addiw s0,s0,1 + 80003a48: 02041793 slli a5,s0,0x20 + 80003a4c: 01e7d793 srli a5,a5,0x1e + 80003a50: 00f687b3 add a5,a3,a5 + 80003a54: 0007d703 lhu a4,0(a5) + 80003a58: f00700e3 beqz a4,80003958 + 80003a5c: dff662e3 bltu a2,t6,80003840 + 80003a60: ef9ff06f j 80003958 + 80003a64: 0016061b addiw a2,a2,1 + 80003a68: fddff06f j 80003a44 + 80003a6c: 000a8663 beqz s5,80003a78 + 80003a70: 00004797 auipc a5,0x4 + 80003a74: fa07a823 sw zero,-80(a5) # 80007a20 + 80003a78: d60b0ae3 beqz s6,800037ec + 80003a7c: 01733023 sd s7,0(t1) + 80003a80: d6dff06f j 800037ec + 80003a84: fe0a8ae3 beqz s5,80003a78 + 80003a88: 00c52023 sw a2,0(a0) + 80003a8c: fedff06f j 80003a78 + 80003a90: 00068793 mv a5,a3 + 80003a94: e20602e3 beqz a2,800038b8 + 80003a98: d55ff06f j 800037ec + +0000000080003a9c : + 80003a9c: ff010113 addi sp,sp,-16 + 80003aa0: 00813023 sd s0,0(sp) + 80003aa4: 00004417 auipc s0,0x4 + 80003aa8: fa440413 addi s0,s0,-92 # 80007a48 + 80003aac: 00042583 lw a1,0(s0) + 80003ab0: 00004517 auipc a0,0x4 + 80003ab4: fa053503 ld a0,-96(a0) # 80007a50 + 80003ab8: 00113423 sd ra,8(sp) + 80003abc: 00b505b3 add a1,a0,a1 + 80003ac0: b59fc0ef jal ra,80000618 + 80003ac4: 00042683 lw a3,0(s0) + 80003ac8: 00004717 auipc a4,0x4 + 80003acc: f4872703 lw a4,-184(a4) # 80007a10 + 80003ad0: 00e68c63 beq a3,a4,80003ae8 + 80003ad4: 00813083 ld ra,8(sp) + 80003ad8: 00013403 ld s0,0(sp) + 80003adc: 00000513 li a0,0 + 80003ae0: 01010113 addi sp,sp,16 + 80003ae4: 00008067 ret + 80003ae8: 00004717 auipc a4,0x4 + 80003aec: fe873703 ld a4,-24(a4) # 80007ad0 + 80003af0: 0005079b sext.w a5,a0 + 80003af4: 01872503 lw a0,24(a4) + 80003af8: 00813083 ld ra,8(sp) + 80003afc: 00013403 ld s0,0(sp) + 80003b00: 40f50533 sub a0,a0,a5 + 80003b04: 00153513 seqz a0,a0 + 80003b08: 01010113 addi sp,sp,16 + 80003b0c: 00008067 ret + +0000000080003b10 : + 80003b10: 00004797 auipc a5,0x4 + 80003b14: fc07b783 ld a5,-64(a5) # 80007ad0 + 80003b18: 0007a783 lw a5,0(a5) + 80003b1c: ff010113 addi sp,sp,-16 + 80003b20: 00113423 sd ra,8(sp) + 80003b24: 0007859b sext.w a1,a5 + 80003b28: 00058513 mv a0,a1 + 80003b2c: 00004717 auipc a4,0x4 + 80003b30: f2f72a23 sw a5,-204(a4) # 80007a60 + 80003b34: 00813023 sd s0,0(sp) + 80003b38: 5a5000ef jal ra,800048dc <__muldi3> + 80003b3c: 0025141b slliw s0,a0,0x2 + 80003b40: 00040513 mv a0,s0 + 80003b44: 9d5fc0ef jal ra,80000518 + 80003b48: 00050793 mv a5,a0 + 80003b4c: 00040513 mv a0,s0 + 80003b50: 00004717 auipc a4,0x4 + 80003b54: f0f73423 sd a5,-248(a4) # 80007a58 + 80003b58: 9c1fc0ef jal ra,80000518 + 80003b5c: 00050793 mv a5,a0 + 80003b60: 00040513 mv a0,s0 + 80003b64: 00004717 auipc a4,0x4 + 80003b68: f0f73223 sd a5,-252(a4) # 80007a68 + 80003b6c: 9adfc0ef jal ra,80000518 + 80003b70: 00050793 mv a5,a0 + 80003b74: 00040513 mv a0,s0 + 80003b78: 00004717 auipc a4,0x4 + 80003b7c: eef73c23 sd a5,-264(a4) # 80007a70 + 80003b80: 999fc0ef jal ra,80000518 + 80003b84: 00813083 ld ra,8(sp) + 80003b88: 00013403 ld s0,0(sp) + 80003b8c: 00004797 auipc a5,0x4 + 80003b90: eea7b623 sd a0,-276(a5) # 80007a78 + 80003b94: 01010113 addi sp,sp,16 + 80003b98: 00008067 ret + +0000000080003b9c : + 80003b9c: f5010113 addi sp,sp,-176 + 80003ba0: 00004797 auipc a5,0x4 + 80003ba4: ec87b783 ld a5,-312(a5) # 80007a68 + 80003ba8: 00f13423 sd a5,8(sp) + 80003bac: 00004797 auipc a5,0x4 + 80003bb0: ec47b783 ld a5,-316(a5) # 80007a70 + 80003bb4: 0a813023 sd s0,160(sp) + 80003bb8: 0a113423 sd ra,168(sp) + 80003bbc: 08913c23 sd s1,152(sp) + 80003bc0: 09213823 sd s2,144(sp) + 80003bc4: 09313423 sd s3,136(sp) + 80003bc8: 09413023 sd s4,128(sp) + 80003bcc: 07513c23 sd s5,120(sp) + 80003bd0: 07613823 sd s6,112(sp) + 80003bd4: 07713423 sd s7,104(sp) + 80003bd8: 07813023 sd s8,96(sp) + 80003bdc: 05913c23 sd s9,88(sp) + 80003be0: 05a13823 sd s10,80(sp) + 80003be4: 05b13423 sd s11,72(sp) + 80003be8: 00004417 auipc s0,0x4 + 80003bec: e7842403 lw s0,-392(s0) # 80007a60 + 80003bf0: 00f13c23 sd a5,24(sp) + 80003bf4: 2a805263 blez s0,80003e98 + 80003bf8: fff4039b addiw t2,s0,-1 + 80003bfc: 00004f17 auipc t5,0x4 + 80003c00: e5cf3f03 ld t5,-420(t5) # 80007a58 + 80003c04: 00038e9b sext.w t4,t2 + 80003c08: 00241493 slli s1,s0,0x2 + 80003c0c: 00000293 li t0,0 + 80003c10: 00000f93 li t6,0 + 80003c14: 00000e13 li t3,0 + 80003c18: 001e0e1b addiw t3,t3,1 + 80003c1c: 00028713 mv a4,t0 + 80003c20: 00000793 li a5,0 + 80003c24: 000f859b sext.w a1,t6 + 80003c28: 00813683 ld a3,8(sp) + 80003c2c: 01813603 ld a2,24(sp) + 80003c30: 41c78333 sub t1,a5,t3 + 80003c34: 00e68833 add a6,a3,a4 + 80003c38: 40b786b3 sub a3,a5,a1 + 80003c3c: 00e60533 add a0,a2,a4 + 80003c40: 00ef08b3 add a7,t5,a4 + 80003c44: 0016b693 seqz a3,a3 + 80003c48: 0017879b addiw a5,a5,1 + 80003c4c: 00100613 li a2,1 + 80003c50: 00be8463 beq t4,a1,80003c58 + 80003c54: 00133613 seqz a2,t1 + 80003c58: 00c8a023 sw a2,0(a7) + 80003c5c: 00c82023 sw a2,0(a6) + 80003c60: 00d52023 sw a3,0(a0) + 80003c64: 00470713 addi a4,a4,4 + 80003c68: fc8790e3 bne a5,s0,80003c28 + 80003c6c: 001f8f9b addiw t6,t6,1 + 80003c70: 009282b3 add t0,t0,s1 + 80003c74: fbc412e3 bne s0,t3,80003c18 + 80003c78: 01813703 ld a4,24(sp) + 80003c7c: 02039793 slli a5,t2,0x20 + 80003c80: 00004697 auipc a3,0x4 + 80003c84: df86b683 ld a3,-520(a3) # 80007a78 + 80003c88: 0207d793 srli a5,a5,0x20 + 80003c8c: 00279793 slli a5,a5,0x2 + 80003c90: 02d13423 sd a3,40(sp) + 80003c94: 00470713 addi a4,a4,4 + 80003c98: 00468693 addi a3,a3,4 + 80003c9c: 00f70733 add a4,a4,a5 + 80003ca0: 00f687b3 add a5,a3,a5 + 80003ca4: 02f13c23 sd a5,56(sp) + 80003ca8: 80000d37 lui s10,0x80000 + 80003cac: 01f00793 li a5,31 + 80003cb0: 02f13023 sd a5,32(sp) + 80003cb4: fd3d4793 xori a5,s10,-45 + 80003cb8: 02e13823 sd a4,48(sp) + 80003cbc: 00f13823 sd a5,16(sp) + 80003cc0: 01013783 ld a5,16(sp) + 80003cc4: 0017f793 andi a5,a5,1 + 80003cc8: 10079c63 bnez a5,80003de0 + 80003ccc: 0a805e63 blez s0,80003d88 + 80003cd0: 00813903 ld s2,8(sp) + 80003cd4: 02813a83 ld s5,40(sp) + 80003cd8: 00000a13 li s4,0 + 80003cdc: 01213023 sd s2,0(sp) + 80003ce0: 00813b03 ld s6,8(sp) + 80003ce4: 000a8d13 mv s10,s5 + 80003ce8: 00000d93 li s11,0 + 80003cec: 000d2023 sw zero,0(s10) # ffffffff80000000 <_end+0xfffffffeffff0000> + 80003cf0: 000b0993 mv s3,s6 + 80003cf4: 00090c93 mv s9,s2 + 80003cf8: 00000b93 li s7,0 + 80003cfc: 00000c13 li s8,0 + 80003d00: 0009a583 lw a1,0(s3) # 1000 <_entry_offset+0x1000> + 80003d04: 000ca503 lw a0,0(s9) + 80003d08: 001c0c1b addiw s8,s8,1 + 80003d0c: 004c8c93 addi s9,s9,4 + 80003d10: 3cd000ef jal ra,800048dc <__muldi3> + 80003d14: 01750bbb addw s7,a0,s7 + 80003d18: 017d2023 sw s7,0(s10) + 80003d1c: 009989b3 add s3,s3,s1 + 80003d20: fe8c40e3 blt s8,s0,80003d00 + 80003d24: 001d8d9b addiw s11,s11,1 + 80003d28: 004d0d13 addi s10,s10,4 + 80003d2c: 004b0b13 addi s6,s6,4 + 80003d30: fa8dcee3 blt s11,s0,80003cec + 80003d34: 001a0a1b addiw s4,s4,1 + 80003d38: 00990933 add s2,s2,s1 + 80003d3c: 009a8ab3 add s5,s5,s1 + 80003d40: fa8a40e3 blt s4,s0,80003ce0 + 80003d44: 02813503 ld a0,40(sp) + 80003d48: 00000593 li a1,0 + 80003d4c: 00013683 ld a3,0(sp) + 80003d50: 00050713 mv a4,a0 + 80003d54: 00000793 li a5,0 + 80003d58: 00072603 lw a2,0(a4) + 80003d5c: 0017879b addiw a5,a5,1 + 80003d60: 00470713 addi a4,a4,4 + 80003d64: 00c6a023 sw a2,0(a3) + 80003d68: 00468693 addi a3,a3,4 + 80003d6c: fe87c6e3 blt a5,s0,80003d58 + 80003d70: 00013783 ld a5,0(sp) + 80003d74: 0015859b addiw a1,a1,1 + 80003d78: 00950533 add a0,a0,s1 + 80003d7c: 009787b3 add a5,a5,s1 + 80003d80: 00f13023 sd a5,0(sp) + 80003d84: fc85c4e3 blt a1,s0,80003d4c + 80003d88: 02013783 ld a5,32(sp) + 80003d8c: 01013703 ld a4,16(sp) + 80003d90: fff7879b addiw a5,a5,-1 + 80003d94: 40175713 srai a4,a4,0x1 + 80003d98: 02f13023 sd a5,32(sp) + 80003d9c: 00e13823 sd a4,16(sp) + 80003da0: f20790e3 bnez a5,80003cc0 + 80003da4: 0a813083 ld ra,168(sp) + 80003da8: 0a013403 ld s0,160(sp) + 80003dac: 09813483 ld s1,152(sp) + 80003db0: 09013903 ld s2,144(sp) + 80003db4: 08813983 ld s3,136(sp) + 80003db8: 08013a03 ld s4,128(sp) + 80003dbc: 07813a83 ld s5,120(sp) + 80003dc0: 07013b03 ld s6,112(sp) + 80003dc4: 06813b83 ld s7,104(sp) + 80003dc8: 06013c03 ld s8,96(sp) + 80003dcc: 05813c83 ld s9,88(sp) + 80003dd0: 05013d03 ld s10,80(sp) + 80003dd4: 04813d83 ld s11,72(sp) + 80003dd8: 0b010113 addi sp,sp,176 + 80003ddc: 00008067 ret + 80003de0: fa8054e3 blez s0,80003d88 + 80003de4: 02813c83 ld s9,40(sp) + 80003de8: 03013983 ld s3,48(sp) + 80003dec: 01813b83 ld s7,24(sp) + 80003df0: 00000c13 li s8,0 + 80003df4: 00813a83 ld s5,8(sp) + 80003df8: 000c8913 mv s2,s9 + 80003dfc: 00000a13 li s4,0 + 80003e00: 00092023 sw zero,0(s2) + 80003e04: 000a8d93 mv s11,s5 + 80003e08: 000b8d13 mv s10,s7 + 80003e0c: 00000b13 li s6,0 + 80003e10: 000da583 lw a1,0(s11) # ffffffff80000000 <_end+0xfffffffeffff0000> + 80003e14: 000d2503 lw a0,0(s10) + 80003e18: 004d0d13 addi s10,s10,4 + 80003e1c: 009d8db3 add s11,s11,s1 + 80003e20: 2bd000ef jal ra,800048dc <__muldi3> + 80003e24: 01650b3b addw s6,a0,s6 + 80003e28: 01692023 sw s6,0(s2) + 80003e2c: ffa992e3 bne s3,s10,80003e10 + 80003e30: 001a0a1b addiw s4,s4,1 + 80003e34: 00490913 addi s2,s2,4 + 80003e38: 004a8a93 addi s5,s5,4 + 80003e3c: fc8a12e3 bne s4,s0,80003e00 + 80003e40: 001c0c1b addiw s8,s8,1 + 80003e44: 009b8bb3 add s7,s7,s1 + 80003e48: 009989b3 add s3,s3,s1 + 80003e4c: 009c8cb3 add s9,s9,s1 + 80003e50: fa8c12e3 bne s8,s0,80003df4 + 80003e54: 03813603 ld a2,56(sp) + 80003e58: 01813803 ld a6,24(sp) + 80003e5c: 02813503 ld a0,40(sp) + 80003e60: 00000593 li a1,0 + 80003e64: 00080713 mv a4,a6 + 80003e68: 00050793 mv a5,a0 + 80003e6c: 0007a683 lw a3,0(a5) + 80003e70: 00478793 addi a5,a5,4 + 80003e74: 00470713 addi a4,a4,4 + 80003e78: fed72e23 sw a3,-4(a4) + 80003e7c: fec798e3 bne a5,a2,80003e6c + 80003e80: 0015859b addiw a1,a1,1 + 80003e84: 00950533 add a0,a0,s1 + 80003e88: 00980833 add a6,a6,s1 + 80003e8c: 00960633 add a2,a2,s1 + 80003e90: fc859ae3 bne a1,s0,80003e64 + 80003e94: e3dff06f j 80003cd0 + 80003e98: 00241493 slli s1,s0,0x2 + 80003e9c: fff4039b addiw t2,s0,-1 + 80003ea0: dd9ff06f j 80003c78 + +0000000080003ea4 : + 80003ea4: 00004517 auipc a0,0x4 + 80003ea8: bbc52503 lw a0,-1092(a0) # 80007a60 + 80003eac: ff010113 addi sp,sp,-16 + 80003eb0: fff5059b addiw a1,a0,-1 + 80003eb4: 00813023 sd s0,0(sp) + 80003eb8: 00113423 sd ra,8(sp) + 80003ebc: 00058413 mv s0,a1 + 80003ec0: 21d000ef jal ra,800048dc <__muldi3> + 80003ec4: 00a4043b addw s0,s0,a0 + 80003ec8: 00241413 slli s0,s0,0x2 + 80003ecc: 00004517 auipc a0,0x4 + 80003ed0: ba453503 ld a0,-1116(a0) # 80007a70 + 80003ed4: 00850433 add s0,a0,s0 + 80003ed8: 00004797 auipc a5,0x4 + 80003edc: bf87b783 ld a5,-1032(a5) # 80007ad0 + 80003ee0: 00042503 lw a0,0(s0) + 80003ee4: 0187a783 lw a5,24(a5) + 80003ee8: 00813083 ld ra,8(sp) + 80003eec: 00013403 ld s0,0(sp) + 80003ef0: 40f50533 sub a0,a0,a5 + 80003ef4: 00153513 seqz a0,a0 + 80003ef8: 01010113 addi sp,sp,16 + 80003efc: 00008067 ret + +0000000080003f00 : + 80003f00: fd010113 addi sp,sp,-48 + 80003f04: 01413023 sd s4,0(sp) + 80003f08: 02113423 sd ra,40(sp) + 80003f0c: 02813023 sd s0,32(sp) + 80003f10: 00913c23 sd s1,24(sp) + 80003f14: 01213823 sd s2,16(sp) + 80003f18: 01313423 sd s3,8(sp) + 80003f1c: 00004797 auipc a5,0x4 + 80003f20: b647a783 lw a5,-1180(a5) # 80007a80 + 80003f24: 00100a13 li s4,1 + 80003f28: 04a78c63 beq a5,a0,80003f80 + 80003f2c: 00c5e433 or s0,a1,a2 + 80003f30: 00a46433 or s0,s0,a0 + 80003f34: fff44413 not s0,s0 + 80003f38: 00f47433 and s0,s0,a5 + 80003f3c: 00050493 mv s1,a0 + 80003f40: 00058993 mv s3,a1 + 80003f44: 00060913 mv s2,a2 + 80003f48: 00000a13 li s4,0 + 80003f4c: 02040a63 beqz s0,80003f80 + 80003f50: 408007bb negw a5,s0 + 80003f54: 00f477b3 and a5,s0,a5 + 80003f58: 0007851b sext.w a0,a5 + 80003f5c: 013565b3 or a1,a0,s3 + 80003f60: 00a96633 or a2,s2,a0 + 80003f64: 0015959b slliw a1,a1,0x1 + 80003f68: 0016561b srliw a2,a2,0x1 + 80003f6c: 00956533 or a0,a0,s1 + 80003f70: 40f4043b subw s0,s0,a5 + 80003f74: f8dff0ef jal ra,80003f00 + 80003f78: 01450a3b addw s4,a0,s4 + 80003f7c: fc041ae3 bnez s0,80003f50 + 80003f80: 02813083 ld ra,40(sp) + 80003f84: 02013403 ld s0,32(sp) + 80003f88: 01813483 ld s1,24(sp) + 80003f8c: 01013903 ld s2,16(sp) + 80003f90: 00813983 ld s3,8(sp) + 80003f94: 000a0513 mv a0,s4 + 80003f98: 00013a03 ld s4,0(sp) + 80003f9c: 03010113 addi sp,sp,48 + 80003fa0: 00008067 ret + +0000000080003fa4 : + 80003fa4: 00004797 auipc a5,0x4 + 80003fa8: b2c7b783 ld a5,-1236(a5) # 80007ad0 + 80003fac: 0007a703 lw a4,0(a5) + 80003fb0: 00004797 auipc a5,0x4 + 80003fb4: ac07aa23 sw zero,-1324(a5) # 80007a84 + 80003fb8: 00100793 li a5,1 + 80003fbc: 00e797bb sllw a5,a5,a4 + 80003fc0: fff7879b addiw a5,a5,-1 + 80003fc4: 00004717 auipc a4,0x4 + 80003fc8: aaf72e23 sw a5,-1348(a4) # 80007a80 + 80003fcc: 00008067 ret + +0000000080003fd0 : + 80003fd0: ff010113 addi sp,sp,-16 + 80003fd4: 00000613 li a2,0 + 80003fd8: 00000593 li a1,0 + 80003fdc: 00000513 li a0,0 + 80003fe0: 00113423 sd ra,8(sp) + 80003fe4: f1dff0ef jal ra,80003f00 + 80003fe8: 00813083 ld ra,8(sp) + 80003fec: 00004797 auipc a5,0x4 + 80003ff0: a8a7ac23 sw a0,-1384(a5) # 80007a84 + 80003ff4: 01010113 addi sp,sp,16 + 80003ff8: 00008067 ret + +0000000080003ffc : + 80003ffc: 00004797 auipc a5,0x4 + 80004000: ad47b783 ld a5,-1324(a5) # 80007ad0 + 80004004: 0187a503 lw a0,24(a5) + 80004008: 00004797 auipc a5,0x4 + 8000400c: a7c7a783 lw a5,-1412(a5) # 80007a84 + 80004010: 40f50533 sub a0,a0,a5 + 80004014: 00153513 seqz a0,a0 + 80004018: 00008067 ret + +000000008000401c : + 8000401c: fd010113 addi sp,sp,-48 + 80004020: 01213823 sd s2,16(sp) + 80004024: 01313423 sd s3,8(sp) + 80004028: 01413023 sd s4,0(sp) + 8000402c: 02113423 sd ra,40(sp) + 80004030: 02813023 sd s0,32(sp) + 80004034: 00913c23 sd s1,24(sp) + 80004038: 00060a13 mv s4,a2 + 8000403c: 00050993 mv s3,a0 + 80004040: 00850913 addi s2,a0,8 + 80004044: 0b45dc63 bge a1,s4,800040fc + 80004048: 00259793 slli a5,a1,0x2 + 8000404c: 00f98e33 add t3,s3,a5 + 80004050: 0015871b addiw a4,a1,1 + 80004054: 000e2303 lw t1,0(t3) + 80004058: ffea049b addiw s1,s4,-2 + 8000405c: 09475c63 bge a4,s4,800040f4 + 80004060: 40b4883b subw a6,s1,a1 + 80004064: 02081813 slli a6,a6,0x20 + 80004068: 02085813 srli a6,a6,0x20 + 8000406c: 00b80833 add a6,a6,a1 + 80004070: 00478793 addi a5,a5,4 + 80004074: 00281813 slli a6,a6,0x2 + 80004078: 00f987b3 add a5,s3,a5 + 8000407c: 01280833 add a6,a6,s2 + 80004080: 00058613 mv a2,a1 + 80004084: 0007a683 lw a3,0(a5) + 80004088: 0016041b addiw s0,a2,1 + 8000408c: 00241713 slli a4,s0,0x2 + 80004090: 0026051b addiw a0,a2,2 + 80004094: 00e98733 add a4,s3,a4 + 80004098: 0066dc63 bge a3,t1,800040b0 + 8000409c: 00072883 lw a7,0(a4) + 800040a0: 00d72023 sw a3,0(a4) + 800040a4: 00040613 mv a2,s0 + 800040a8: 0117a023 sw a7,0(a5) + 800040ac: 00050413 mv s0,a0 + 800040b0: 00478793 addi a5,a5,4 + 800040b4: fcf818e3 bne a6,a5,80004084 + 800040b8: 00261793 slli a5,a2,0x2 + 800040bc: 000e2683 lw a3,0(t3) + 800040c0: 00f987b3 add a5,s3,a5 + 800040c4: 0007a703 lw a4,0(a5) + 800040c8: 00d7a023 sw a3,0(a5) + 800040cc: 00098513 mv a0,s3 + 800040d0: 00ee2023 sw a4,0(t3) + 800040d4: f49ff0ef jal ra,8000401c + 800040d8: 03445263 bge s0,s4,800040fc + 800040dc: 00040593 mv a1,s0 + 800040e0: 00259793 slli a5,a1,0x2 + 800040e4: 00f98e33 add t3,s3,a5 + 800040e8: 0015871b addiw a4,a1,1 + 800040ec: 000e2303 lw t1,0(t3) + 800040f0: f74748e3 blt a4,s4,80004060 + 800040f4: 00058a13 mv s4,a1 + 800040f8: f545c8e3 blt a1,s4,80004048 + 800040fc: 02813083 ld ra,40(sp) + 80004100: 02013403 ld s0,32(sp) + 80004104: 01813483 ld s1,24(sp) + 80004108: 01013903 ld s2,16(sp) + 8000410c: 00813983 ld s3,8(sp) + 80004110: 00013a03 ld s4,0(sp) + 80004114: 03010113 addi sp,sp,48 + 80004118: 00008067 ret + +000000008000411c : + 8000411c: fd010113 addi sp,sp,-48 + 80004120: 00100513 li a0,1 + 80004124: 02113423 sd ra,40(sp) + 80004128: 01213823 sd s2,16(sp) + 8000412c: 01313423 sd s3,8(sp) + 80004130: 02813023 sd s0,32(sp) + 80004134: 00913c23 sd s1,24(sp) + 80004138: c7cfc0ef jal ra,800005b4 + 8000413c: 00004797 auipc a5,0x4 + 80004140: 9947b783 ld a5,-1644(a5) # 80007ad0 + 80004144: 0007a783 lw a5,0(a5) + 80004148: 00004917 auipc s2,0x4 + 8000414c: 94090913 addi s2,s2,-1728 # 80007a88 + 80004150: 00004997 auipc s3,0x4 + 80004154: 94098993 addi s3,s3,-1728 # 80007a90 + 80004158: 00279513 slli a0,a5,0x2 + 8000415c: 00f92023 sw a5,0(s2) + 80004160: bb8fc0ef jal ra,80000518 + 80004164: 00092783 lw a5,0(s2) + 80004168: 00a9b023 sd a0,0(s3) + 8000416c: 02f05e63 blez a5,800041a8 + 80004170: 00000493 li s1,0 + 80004174: c54fc0ef jal ra,800005c8 + 80004178: 0005041b sext.w s0,a0 + 8000417c: c4cfc0ef jal ra,800005c8 + 80004180: 0009b783 ld a5,0(s3) + 80004184: 00249693 slli a3,s1,0x2 + 80004188: 0104141b slliw s0,s0,0x10 + 8000418c: 00092703 lw a4,0(s2) + 80004190: 00d787b3 add a5,a5,a3 + 80004194: 00856433 or s0,a0,s0 + 80004198: 00148493 addi s1,s1,1 + 8000419c: 0087a023 sw s0,0(a5) + 800041a0: 0004879b sext.w a5,s1 + 800041a4: fce7c8e3 blt a5,a4,80004174 + 800041a8: 02813083 ld ra,40(sp) + 800041ac: 02013403 ld s0,32(sp) + 800041b0: 01813483 ld s1,24(sp) + 800041b4: 01013903 ld s2,16(sp) + 800041b8: 00813983 ld s3,8(sp) + 800041bc: 03010113 addi sp,sp,48 + 800041c0: 00008067 ret + +00000000800041c4 : + 800041c4: 00004617 auipc a2,0x4 + 800041c8: 8c462603 lw a2,-1852(a2) # 80007a88 + 800041cc: 00000593 li a1,0 + 800041d0: 00004517 auipc a0,0x4 + 800041d4: 8c053503 ld a0,-1856(a0) # 80007a90 + 800041d8: e45ff06f j 8000401c + +00000000800041dc : + 800041dc: 00004597 auipc a1,0x4 + 800041e0: 8ac5a583 lw a1,-1876(a1) # 80007a88 + 800041e4: 00004517 auipc a0,0x4 + 800041e8: 8ac53503 ld a0,-1876(a0) # 80007a90 + 800041ec: 00259593 slli a1,a1,0x2 + 800041f0: ff010113 addi sp,sp,-16 + 800041f4: 00b505b3 add a1,a0,a1 + 800041f8: 00113423 sd ra,8(sp) + 800041fc: c1cfc0ef jal ra,80000618 + 80004200: 00004797 auipc a5,0x4 + 80004204: 8d07b783 ld a5,-1840(a5) # 80007ad0 + 80004208: 0187a783 lw a5,24(a5) + 8000420c: 00813083 ld ra,8(sp) + 80004210: 0005051b sext.w a0,a0 + 80004214: 40a78533 sub a0,a5,a0 + 80004218: 00153513 seqz a0,a0 + 8000421c: 01010113 addi sp,sp,16 + 80004220: 00008067 ret + +0000000080004224 : + 80004224: 00004797 auipc a5,0x4 + 80004228: 8ac7b783 ld a5,-1876(a5) # 80007ad0 + 8000422c: 0007a783 lw a5,0(a5) + 80004230: fe010113 addi sp,sp,-32 + 80004234: 00913423 sd s1,8(sp) + 80004238: 00100513 li a0,1 + 8000423c: 00004497 auipc s1,0x4 + 80004240: 85c48493 addi s1,s1,-1956 # 80007a98 + 80004244: 00f4a023 sw a5,0(s1) + 80004248: 00113c23 sd ra,24(sp) + 8000424c: 01213023 sd s2,0(sp) + 80004250: 00813823 sd s0,16(sp) + 80004254: b60fc0ef jal ra,800005b4 + 80004258: 0004a503 lw a0,0(s1) + 8000425c: 00004917 auipc s2,0x4 + 80004260: 84c90913 addi s2,s2,-1972 # 80007aa8 + 80004264: ab4fc0ef jal ra,80000518 + 80004268: 0004a783 lw a5,0(s1) + 8000426c: 00a93023 sd a0,0(s2) + 80004270: 02f05463 blez a5,80004298 + 80004274: 00000413 li s0,0 + 80004278: b50fc0ef jal ra,800005c8 + 8000427c: 00093783 ld a5,0(s2) + 80004280: 0004a703 lw a4,0(s1) + 80004284: 008787b3 add a5,a5,s0 + 80004288: 00140413 addi s0,s0,1 + 8000428c: 00a78023 sb a0,0(a5) + 80004290: 0004079b sext.w a5,s0 + 80004294: fee7c2e3 blt a5,a4,80004278 + 80004298: 01000513 li a0,16 + 8000429c: a7cfc0ef jal ra,80000518 + 800042a0: 01813083 ld ra,24(sp) + 800042a4: 01013403 ld s0,16(sp) + 800042a8: 00003797 auipc a5,0x3 + 800042ac: 7ea7bc23 sd a0,2040(a5) # 80007aa0 + 800042b0: 00813483 ld s1,8(sp) + 800042b4: 00013903 ld s2,0(sp) + 800042b8: 02010113 addi sp,sp,32 + 800042bc: 00008067 ret + +00000000800042c0 : + 800042c0: 00003697 auipc a3,0x3 + 800042c4: 7d86a683 lw a3,2008(a3) # 80007a98 + 800042c8: f6010113 addi sp,sp,-160 + 800042cc: 00168793 addi a5,a3,1 + 800042d0: 00003f97 auipc t6,0x3 + 800042d4: 7d8fbf83 ld t6,2008(t6) # 80007aa8 + 800042d8: 08813c23 sd s0,152(sp) + 800042dc: 08913823 sd s1,144(sp) + 800042e0: 09213423 sd s2,136(sp) + 800042e4: 09313023 sd s3,128(sp) + 800042e8: 07413c23 sd s4,120(sp) + 800042ec: 07513823 sd s5,112(sp) + 800042f0: 07613423 sd s6,104(sp) + 800042f4: 07713023 sd s7,96(sp) + 800042f8: 05813c23 sd s8,88(sp) + 800042fc: 05913823 sd s9,80(sp) + 80004300: 05a13423 sd s10,72(sp) + 80004304: 05b13023 sd s11,64(sp) + 80004308: 03f7f513 andi a0,a5,63 + 8000430c: 03800593 li a1,56 + 80004310: 00003717 auipc a4,0x3 + 80004314: 79073703 ld a4,1936(a4) # 80007aa0 + 80004318: 00df8633 add a2,t6,a3 + 8000431c: 00078f13 mv t5,a5 + 80004320: 2eb50863 beq a0,a1,80004610 + 80004324: 03800513 li a0,56 + 80004328: 001f0f13 addi t5,t5,1 + 8000432c: 03ff7593 andi a1,t5,63 + 80004330: fea59ce3 bne a1,a0,80004328 + 80004334: f8000593 li a1,-128 + 80004338: 00b60023 sb a1,0(a2) + 8000433c: 2de7fe63 bgeu a5,t5,80004618 + 80004340: 00ff87b3 add a5,t6,a5 + 80004344: 01ef8633 add a2,t6,t5 + 80004348: 00078023 sb zero,0(a5) + 8000434c: 00178793 addi a5,a5,1 + 80004350: fef61ce3 bne a2,a5,80004348 + 80004354: 0036951b slliw a0,a3,0x3 + 80004358: 41d6d593 srai a1,a3,0x1d + 8000435c: 0185581b srliw a6,a0,0x18 + 80004360: 0085531b srliw t1,a0,0x8 + 80004364: 0105589b srliw a7,a0,0x10 + 80004368: 004f0793 addi a5,t5,4 + 8000436c: 00a60023 sb a0,0(a2) + 80004370: 010601a3 sb a6,3(a2) + 80004374: 006600a3 sb t1,1(a2) + 80004378: 01160123 sb a7,2(a2) + 8000437c: 00ff87b3 add a5,t6,a5 + 80004380: 0085d51b srliw a0,a1,0x8 + 80004384: 0105d61b srliw a2,a1,0x10 + 80004388: 0185d59b srliw a1,a1,0x18 + 8000438c: 01d6d693 srli a3,a3,0x1d + 80004390: 00a780a3 sb a0,1(a5) + 80004394: 00c78123 sb a2,2(a5) + 80004398: 00b781a3 sb a1,3(a5) + 8000439c: 10325637 lui a2,0x10325 + 800043a0: 98bae5b7 lui a1,0x98bae + 800043a4: efcdb537 lui a0,0xefcdb + 800043a8: 67452837 lui a6,0x67452 + 800043ac: d76aa3b7 lui t2,0xd76aa + 800043b0: 00d78023 sb a3,0(a5) + 800043b4: 47660613 addi a2,a2,1142 # 10325476 <_entry_offset+0x10325476> + 800043b8: cfe58593 addi a1,a1,-770 # ffffffff98badcfe <_end+0xffffffff18b9dcfe> + 800043bc: b8950513 addi a0,a0,-1143 # ffffffffefcdab89 <_end+0xffffffff6fccab89> + 800043c0: 30180813 addi a6,a6,769 # 67452301 <_entry_offset+0x67452301> + 800043c4: 00000293 li t0,0 + 800043c8: 47838393 addi t2,t2,1144 # ffffffffd76aa478 <_end+0xffffffff5769a478> + 800043cc: 00f00c13 li s8,15 + 800043d0: 01f00b93 li s7,31 + 800043d4: 02f00b13 li s6,47 + 800043d8: 03f00a93 li s5,63 + 800043dc: 005f87b3 add a5,t6,t0 + 800043e0: 00010e13 mv t3,sp + 800043e4: 0017c303 lbu t1,1(a5) + 800043e8: 0007ce83 lbu t4,0(a5) + 800043ec: 0027c883 lbu a7,2(a5) + 800043f0: 0037c683 lbu a3,3(a5) + 800043f4: 00831313 slli t1,t1,0x8 + 800043f8: 01d36333 or t1,t1,t4 + 800043fc: 01089893 slli a7,a7,0x10 + 80004400: 0068e8b3 or a7,a7,t1 + 80004404: 01869693 slli a3,a3,0x18 + 80004408: 0116e6b3 or a3,a3,a7 + 8000440c: 00de2023 sw a3,0(t3) + 80004410: 004e0e13 addi t3,t3,4 + 80004414: 04010693 addi a3,sp,64 + 80004418: 00478793 addi a5,a5,4 + 8000441c: fdc694e3 bne a3,t3,800043e4 + 80004420: 00080793 mv a5,a6 + 80004424: 00038d13 mv s10,t2 + 80004428: 00000e93 li t4,0 + 8000442c: 00002a17 auipc s4,0x2 + 80004430: 4d8a0a13 addi s4,s4,1240 # 80006904 + 80004434: 00002997 auipc s3,0x2 + 80004438: 5d098993 addi s3,s3,1488 # 80006a04 + 8000443c: 00050893 mv a7,a0 + 80004440: 00060e13 mv t3,a2 + 80004444: 00058313 mv t1,a1 + 80004448: 00100913 li s2,1 + 8000444c: 00500493 li s1,5 + 80004450: 00000413 li s0,0 + 80004454: 00700c93 li s9,7 + 80004458: 01a78d3b addw s10,a5,s10 + 8000445c: 09dc7263 bgeu s8,t4,800044e0 + 80004460: 011347b3 xor a5,t1,a7 + 80004464: 01c7f7b3 and a5,a5,t3 + 80004468: 00f347b3 xor a5,t1,a5 + 8000446c: 09dbe663 bltu s7,t4,800044f8 + 80004470: 0007879b sext.w a5,a5 + 80004474: 00f97693 andi a3,s2,15 + 80004478: 02069693 slli a3,a3,0x20 + 8000447c: 01e6d693 srli a3,a3,0x1e + 80004480: 04010d93 addi s11,sp,64 + 80004484: 00dd86b3 add a3,s11,a3 + 80004488: fc06a683 lw a3,-64(a3) + 8000448c: 01a787bb addw a5,a5,s10 + 80004490: 41900d3b negw s10,s9 + 80004494: 00d787bb addw a5,a5,a3 + 80004498: 019796bb sllw a3,a5,s9 + 8000449c: 01a7d7bb srlw a5,a5,s10 + 800044a0: 00f6e6b3 or a3,a3,a5 + 800044a4: 011686bb addw a3,a3,a7 + 800044a8: 000a2d03 lw s10,0(s4) + 800044ac: 000e0793 mv a5,t3 + 800044b0: 001e8e9b addiw t4,t4,1 + 800044b4: 0009ac83 lw s9,0(s3) + 800044b8: 00030e13 mv t3,t1 + 800044bc: 004a0a13 addi s4,s4,4 + 800044c0: 00088313 mv t1,a7 + 800044c4: 00498993 addi s3,s3,4 + 800044c8: 0074041b addiw s0,s0,7 + 800044cc: 0034849b addiw s1,s1,3 + 800044d0: 0059091b addiw s2,s2,5 + 800044d4: 00068893 mv a7,a3 + 800044d8: 01a78d3b addw s10,a5,s10 + 800044dc: f9dc62e3 bltu s8,t4,80004460 + 800044e0: 01c347b3 xor a5,t1,t3 + 800044e4: 0117f7b3 and a5,a5,a7 + 800044e8: 00fe47b3 xor a5,t3,a5 + 800044ec: 0007879b sext.w a5,a5 + 800044f0: 000e8693 mv a3,t4 + 800044f4: f85ff06f j 80004478 + 800044f8: 01c347b3 xor a5,t1,t3 + 800044fc: 0117c7b3 xor a5,a5,a7 + 80004500: 01db6863 bltu s6,t4,80004510 + 80004504: 0007879b sext.w a5,a5 + 80004508: 00f4f693 andi a3,s1,15 + 8000450c: f6dff06f j 80004478 + 80004510: 00f47793 andi a5,s0,15 + 80004514: 04010693 addi a3,sp,64 + 80004518: 00279793 slli a5,a5,0x2 + 8000451c: 00f687b3 add a5,a3,a5 + 80004520: fc07a783 lw a5,-64(a5) + 80004524: fffe4693 not a3,t3 + 80004528: 0116e6b3 or a3,a3,a7 + 8000452c: 0066c6b3 xor a3,a3,t1 + 80004530: 00d787bb addw a5,a5,a3 + 80004534: 01a787bb addw a5,a5,s10 + 80004538: 41900d3b negw s10,s9 + 8000453c: 019796bb sllw a3,a5,s9 + 80004540: 01a7d7bb srlw a5,a5,s10 + 80004544: 00f6e6b3 or a3,a3,a5 + 80004548: 011686bb addw a3,a3,a7 + 8000454c: f55e9ee3 bne t4,s5,800044a8 + 80004550: 04028293 addi t0,t0,64 + 80004554: 010e083b addw a6,t3,a6 + 80004558: 00a6853b addw a0,a3,a0 + 8000455c: 00b885bb addw a1,a7,a1 + 80004560: 00c3063b addw a2,t1,a2 + 80004564: e7e2ece3 bltu t0,t5,800043dc + 80004568: 0088549b srliw s1,a6,0x8 + 8000456c: 0108541b srliw s0,a6,0x10 + 80004570: 0188539b srliw t2,a6,0x18 + 80004574: 0085529b srliw t0,a0,0x8 + 80004578: 01055f9b srliw t6,a0,0x10 + 8000457c: 01855f1b srliw t5,a0,0x18 + 80004580: 0085de9b srliw t4,a1,0x8 + 80004584: 0105de1b srliw t3,a1,0x10 + 80004588: 0185d31b srliw t1,a1,0x18 + 8000458c: 0086589b srliw a7,a2,0x8 + 80004590: 0106569b srliw a3,a2,0x10 + 80004594: 0186579b srliw a5,a2,0x18 + 80004598: 01070023 sb a6,0(a4) + 8000459c: 009700a3 sb s1,1(a4) + 800045a0: 00870123 sb s0,2(a4) + 800045a4: 007701a3 sb t2,3(a4) + 800045a8: 00a70223 sb a0,4(a4) + 800045ac: 005702a3 sb t0,5(a4) + 800045b0: 01f70323 sb t6,6(a4) + 800045b4: 01e703a3 sb t5,7(a4) + 800045b8: 00b70423 sb a1,8(a4) + 800045bc: 01d704a3 sb t4,9(a4) + 800045c0: 01c70523 sb t3,10(a4) + 800045c4: 006705a3 sb t1,11(a4) + 800045c8: 00c70623 sb a2,12(a4) + 800045cc: 011706a3 sb a7,13(a4) + 800045d0: 00d70723 sb a3,14(a4) + 800045d4: 00f707a3 sb a5,15(a4) + 800045d8: 09813403 ld s0,152(sp) + 800045dc: 09013483 ld s1,144(sp) + 800045e0: 08813903 ld s2,136(sp) + 800045e4: 08013983 ld s3,128(sp) + 800045e8: 07813a03 ld s4,120(sp) + 800045ec: 07013a83 ld s5,112(sp) + 800045f0: 06813b03 ld s6,104(sp) + 800045f4: 06013b83 ld s7,96(sp) + 800045f8: 05813c03 ld s8,88(sp) + 800045fc: 05013c83 ld s9,80(sp) + 80004600: 04813d03 ld s10,72(sp) + 80004604: 04013d83 ld s11,64(sp) + 80004608: 0a010113 addi sp,sp,160 + 8000460c: 00008067 ret + 80004610: f8000793 li a5,-128 + 80004614: 00f60023 sb a5,0(a2) + 80004618: 01ef8633 add a2,t6,t5 + 8000461c: d39ff06f j 80004354 + +0000000080004620 : + 80004620: 00003517 auipc a0,0x3 + 80004624: 48053503 ld a0,1152(a0) # 80007aa0 + 80004628: ff010113 addi sp,sp,-16 + 8000462c: 01050593 addi a1,a0,16 + 80004630: 00113423 sd ra,8(sp) + 80004634: fe5fb0ef jal ra,80000618 + 80004638: 00003797 auipc a5,0x3 + 8000463c: 4987b783 ld a5,1176(a5) # 80007ad0 + 80004640: 0187a783 lw a5,24(a5) + 80004644: 00813083 ld ra,8(sp) + 80004648: 0005051b sext.w a0,a0 + 8000464c: 40a78533 sub a0,a5,a0 + 80004650: 00153513 seqz a0,a0 + 80004654: 01010113 addi sp,sp,16 + 80004658: 00008067 ret + +000000008000465c : + 8000465c: 00003797 auipc a5,0x3 + 80004660: 4747b783 ld a5,1140(a5) # 80007ad0 + 80004664: 0007a783 lw a5,0(a5) + 80004668: ff010113 addi sp,sp,-16 + 8000466c: 00813023 sd s0,0(sp) + 80004670: 41f7d51b sraiw a0,a5,0x1f + 80004674: 01d5551b srliw a0,a0,0x1d + 80004678: 00f5053b addw a0,a0,a5 + 8000467c: 4035551b sraiw a0,a0,0x3 + 80004680: 00003417 auipc s0,0x3 + 80004684: 43040413 addi s0,s0,1072 # 80007ab0 + 80004688: 0805051b addiw a0,a0,128 + 8000468c: 00f42023 sw a5,0(s0) + 80004690: 00113423 sd ra,8(sp) + 80004694: e85fb0ef jal ra,80000518 + 80004698: 00042783 lw a5,0(s0) + 8000469c: 00003717 auipc a4,0x3 + 800046a0: 40a73e23 sd a0,1052(a4) # 80007ab8 + 800046a4: fe100693 li a3,-31 + 800046a8: 41f7d71b sraiw a4,a5,0x1f + 800046ac: 01b7571b srliw a4,a4,0x1b + 800046b0: 00f7073b addw a4,a4,a5 + 800046b4: 02d7c063 blt a5,a3,800046d4 + 800046b8: 4057571b sraiw a4,a4,0x5 + 800046bc: 00000793 li a5,0 + 800046c0: fff00693 li a3,-1 + 800046c4: 00d52023 sw a3,0(a0) + 800046c8: 0017879b addiw a5,a5,1 + 800046cc: 00450513 addi a0,a0,4 + 800046d0: fef75ae3 bge a4,a5,800046c4 + 800046d4: 00813083 ld ra,8(sp) + 800046d8: 00013403 ld s0,0(sp) + 800046dc: 01010113 addi sp,sp,16 + 800046e0: 00008067 ret + +00000000800046e4 : + 800046e4: fd010113 addi sp,sp,-48 + 800046e8: 00913c23 sd s1,24(sp) + 800046ec: 02113423 sd ra,40(sp) + 800046f0: 02813023 sd s0,32(sp) + 800046f4: 01213823 sd s2,16(sp) + 800046f8: 01313423 sd s3,8(sp) + 800046fc: 00003497 auipc s1,0x3 + 80004700: 3b44a483 lw s1,948(s1) # 80007ab0 + 80004704: 14905463 blez s1,8000484c + 80004708: 00003617 auipc a2,0x3 + 8000470c: 3b060613 addi a2,a2,944 # 80007ab8 + 80004710: 00063683 ld a3,0(a2) + 80004714: 0006a783 lw a5,0(a3) + 80004718: 0017d79b srliw a5,a5,0x1 + 8000471c: 0017f793 andi a5,a5,1 + 80004720: 00079c63 bnez a5,80004738 + 80004724: 10c0006f j 80004830 + 80004728: 00072703 lw a4,0(a4) + 8000472c: 00f7573b srlw a4,a4,a5 + 80004730: 00177713 andi a4,a4,1 + 80004734: 0e070e63 beqz a4,80004830 + 80004738: 0017879b addiw a5,a5,1 + 8000473c: 4057d71b sraiw a4,a5,0x5 + 80004740: 00271713 slli a4,a4,0x2 + 80004744: 00e68733 add a4,a3,a4 + 80004748: fef4d0e3 bge s1,a5,80004728 + 8000474c: 00300793 li a5,3 + 80004750: 0e97de63 bge a5,s1,8000484c + 80004754: 00063903 ld s2,0(a2) + 80004758: 00200413 li s0,2 + 8000475c: 00100993 li s3,1 + 80004760: 01c0006f j 8000477c + 80004764: 0014041b addiw s0,s0,1 + 80004768: 00040593 mv a1,s0 + 8000476c: 00040513 mv a0,s0 + 80004770: 16c000ef jal ra,800048dc <__muldi3> + 80004774: 0005051b sext.w a0,a0 + 80004778: 06a4c663 blt s1,a0,800047e4 + 8000477c: 40545793 srai a5,s0,0x5 + 80004780: 00279793 slli a5,a5,0x2 + 80004784: 00f907b3 add a5,s2,a5 + 80004788: 0007a783 lw a5,0(a5) + 8000478c: 0087d7bb srlw a5,a5,s0 + 80004790: 0017f793 andi a5,a5,1 + 80004794: fc0788e3 beqz a5,80004764 + 80004798: 0014169b slliw a3,s0,0x1 + 8000479c: fcd4c4e3 blt s1,a3,80004764 + 800047a0: 4056d713 srai a4,a3,0x5 + 800047a4: 00271713 slli a4,a4,0x2 + 800047a8: 00e90733 add a4,s2,a4 + 800047ac: 00072603 lw a2,0(a4) + 800047b0: 01f6f793 andi a5,a3,31 + 800047b4: 00f997b3 sll a5,s3,a5 + 800047b8: fff7c793 not a5,a5 + 800047bc: 00c7f7b3 and a5,a5,a2 + 800047c0: 00f72023 sw a5,0(a4) + 800047c4: 00d406bb addw a3,s0,a3 + 800047c8: fcd4dce3 bge s1,a3,800047a0 + 800047cc: 0014041b addiw s0,s0,1 + 800047d0: 00040593 mv a1,s0 + 800047d4: 00040513 mv a0,s0 + 800047d8: 104000ef jal ra,800048dc <__muldi3> + 800047dc: 0005051b sext.w a0,a0 + 800047e0: f8a4dee3 bge s1,a0,8000477c + 800047e4: 00003797 auipc a5,0x3 + 800047e8: 2c07a823 sw zero,720(a5) # 80007ab4 + 800047ec: 00000613 li a2,0 + 800047f0: 00000693 li a3,0 + 800047f4: 00200713 li a4,2 + 800047f8: 40575793 srai a5,a4,0x5 + 800047fc: 00279793 slli a5,a5,0x2 + 80004800: 00f907b3 add a5,s2,a5 + 80004804: 0007a783 lw a5,0(a5) + 80004808: 00e7d7bb srlw a5,a5,a4 + 8000480c: 0017f793 andi a5,a5,1 + 80004810: 0017071b addiw a4,a4,1 + 80004814: 00078663 beqz a5,80004820 + 80004818: 0016869b addiw a3,a3,1 + 8000481c: 00100613 li a2,1 + 80004820: fce4dce3 bge s1,a4,800047f8 + 80004824: 00060663 beqz a2,80004830 + 80004828: 00003797 auipc a5,0x3 + 8000482c: 28d7a623 sw a3,652(a5) # 80007ab4 + 80004830: 02813083 ld ra,40(sp) + 80004834: 02013403 ld s0,32(sp) + 80004838: 01813483 ld s1,24(sp) + 8000483c: 01013903 ld s2,16(sp) + 80004840: 00813983 ld s3,8(sp) + 80004844: 03010113 addi sp,sp,48 + 80004848: 00008067 ret + 8000484c: 00003797 auipc a5,0x3 + 80004850: 2607a423 sw zero,616(a5) # 80007ab4 + 80004854: 00100793 li a5,1 + 80004858: fc97dce3 bge a5,s1,80004830 + 8000485c: 00003917 auipc s2,0x3 + 80004860: 25c93903 ld s2,604(s2) # 80007ab8 + 80004864: f89ff06f j 800047ec + +0000000080004868 : + 80004868: 00003797 auipc a5,0x3 + 8000486c: 2687b783 ld a5,616(a5) # 80007ad0 + 80004870: 0187a503 lw a0,24(a5) + 80004874: 00003797 auipc a5,0x3 + 80004878: 2407a783 lw a5,576(a5) # 80007ab4 + 8000487c: 40f50533 sub a0,a0,a5 + 80004880: 00153513 seqz a0,a0 + 80004884: 00008067 ret + +0000000080004888 : + 80004888: 00050513 mv a0,a0 + 8000488c: 0000007b 0x7b + 80004890: 00008067 ret + +0000000080004894 : + 80004894: 00050513 mv a0,a0 + 80004898: 0000006b 0x6b + 8000489c: 0000006f j 8000489c + +00000000800048a0 <_assert>: + 800048a0: 00051a63 bnez a0,800048b4 <_assert+0x14> + 800048a4: 00100793 li a5,1 + 800048a8: 00078513 mv a0,a5 + 800048ac: 0000006b 0x6b + 800048b0: 0000006f j 800048b0 <_assert+0x10> + 800048b4: 00008067 ret + +00000000800048b8 <_trm_init>: + 800048b8: ff010113 addi sp,sp,-16 + 800048bc: 00113423 sd ra,8(sp) + 800048c0: 5b8000ef jal ra,80004e78 + 800048c4: 00002517 auipc a0,0x2 + 800048c8: 51c50513 addi a0,a0,1308 # 80006de0 + 800048cc: 831fb0ef jal ra,800000fc
+ 800048d0: 00050513 mv a0,a0 + 800048d4: 0000006b 0x6b + 800048d8: 0000006f j 800048d8 <_trm_init+0x20> + +00000000800048dc <__muldi3>: + 800048dc: 00050613 mv a2,a0 + 800048e0: 00000513 li a0,0 + 800048e4: 0015f693 andi a3,a1,1 + 800048e8: 00068463 beqz a3,800048f0 <__muldi3+0x14> + 800048ec: 00c50533 add a0,a0,a2 + 800048f0: 0015d593 srli a1,a1,0x1 + 800048f4: 00161613 slli a2,a2,0x1 + 800048f8: fe0596e3 bnez a1,800048e4 <__muldi3+0x8> + 800048fc: 00008067 ret + +0000000080004900 <__udivsi3>: + 80004900: 02051513 slli a0,a0,0x20 + 80004904: 02059593 slli a1,a1,0x20 + 80004908: 00008293 mv t0,ra + 8000490c: 03c000ef jal ra,80004948 <__udivdi3> + 80004910: 0005051b sext.w a0,a0 + 80004914: 00028067 jr t0 + +0000000080004918 <__umodsi3>: + 80004918: 02051513 slli a0,a0,0x20 + 8000491c: 02059593 slli a1,a1,0x20 + 80004920: 02055513 srli a0,a0,0x20 + 80004924: 0205d593 srli a1,a1,0x20 + 80004928: 00008293 mv t0,ra + 8000492c: 01c000ef jal ra,80004948 <__udivdi3> + 80004930: 0005851b sext.w a0,a1 + 80004934: 00028067 jr t0 + +0000000080004938 <__divsi3>: + 80004938: fff00293 li t0,-1 + 8000493c: 0a558c63 beq a1,t0,800049f4 <__moddi3+0x30> + +0000000080004940 <__divdi3>: + 80004940: 06054063 bltz a0,800049a0 <__umoddi3+0x10> + 80004944: 0605c663 bltz a1,800049b0 <__umoddi3+0x20> + +0000000080004948 <__udivdi3>: + 80004948: 00058613 mv a2,a1 + 8000494c: 00050593 mv a1,a0 + 80004950: fff00513 li a0,-1 + 80004954: 02060c63 beqz a2,8000498c <__udivdi3+0x44> + 80004958: 00100693 li a3,1 + 8000495c: 00b67a63 bgeu a2,a1,80004970 <__udivdi3+0x28> + 80004960: 00c05863 blez a2,80004970 <__udivdi3+0x28> + 80004964: 00161613 slli a2,a2,0x1 + 80004968: 00169693 slli a3,a3,0x1 + 8000496c: feb66ae3 bltu a2,a1,80004960 <__udivdi3+0x18> + 80004970: 00000513 li a0,0 + 80004974: 00c5e663 bltu a1,a2,80004980 <__udivdi3+0x38> + 80004978: 40c585b3 sub a1,a1,a2 + 8000497c: 00d56533 or a0,a0,a3 + 80004980: 0016d693 srli a3,a3,0x1 + 80004984: 00165613 srli a2,a2,0x1 + 80004988: fe0696e3 bnez a3,80004974 <__udivdi3+0x2c> + 8000498c: 00008067 ret + +0000000080004990 <__umoddi3>: + 80004990: 00008293 mv t0,ra + 80004994: fb5ff0ef jal ra,80004948 <__udivdi3> + 80004998: 00058513 mv a0,a1 + 8000499c: 00028067 jr t0 + 800049a0: 40a00533 neg a0,a0 + 800049a4: 00b04863 bgtz a1,800049b4 <__umoddi3+0x24> + 800049a8: 40b005b3 neg a1,a1 + 800049ac: f9dff06f j 80004948 <__udivdi3> + 800049b0: 40b005b3 neg a1,a1 + 800049b4: 00008293 mv t0,ra + 800049b8: f91ff0ef jal ra,80004948 <__udivdi3> + 800049bc: 40a00533 neg a0,a0 + 800049c0: 00028067 jr t0 + +00000000800049c4 <__moddi3>: + 800049c4: 00008293 mv t0,ra + 800049c8: 0005ca63 bltz a1,800049dc <__moddi3+0x18> + 800049cc: 00054c63 bltz a0,800049e4 <__moddi3+0x20> + 800049d0: f79ff0ef jal ra,80004948 <__udivdi3> + 800049d4: 00058513 mv a0,a1 + 800049d8: 00028067 jr t0 + 800049dc: 40b005b3 neg a1,a1 + 800049e0: fe0558e3 bgez a0,800049d0 <__moddi3+0xc> + 800049e4: 40a00533 neg a0,a0 + 800049e8: f61ff0ef jal ra,80004948 <__udivdi3> + 800049ec: 40b00533 neg a0,a1 + 800049f0: 00028067 jr t0 + 800049f4: 01f29293 slli t0,t0,0x1f + 800049f8: f45514e3 bne a0,t0,80004940 <__divdi3> + 800049fc: 00008067 ret + +0000000080004a00 <__am_timer_config>: + 80004a00: 00100793 li a5,1 + 80004a04: 00f50023 sb a5,0(a0) + 80004a08: 00f500a3 sb a5,1(a0) + 80004a0c: 00008067 ret + +0000000080004a10 <__am_input_config>: + 80004a10: 00100793 li a5,1 + 80004a14: 00f50023 sb a5,0(a0) + 80004a18: 00008067 ret + +0000000080004a1c : + 80004a1c: ff010113 addi sp,sp,-16 + 80004a20: 00813023 sd s0,0(sp) + 80004a24: 00113423 sd ra,8(sp) + 80004a28: 00002417 auipc s0,0x2 + 80004a2c: 0d840413 addi s0,s0,216 # 80006b00 + 80004a30: 04100513 li a0,65 + 80004a34: 00140413 addi s0,s0,1 + 80004a38: e51ff0ef jal ra,80004888 + 80004a3c: 00044503 lbu a0,0(s0) + 80004a40: fe051ae3 bnez a0,80004a34 + 80004a44: 00002417 auipc s0,0x2 + 80004a48: 0cc40413 addi s0,s0,204 # 80006b10 + 80004a4c: 06100513 li a0,97 + 80004a50: 00140413 addi s0,s0,1 + 80004a54: e35ff0ef jal ra,80004888 + 80004a58: 00044503 lbu a0,0(s0) + 80004a5c: fe051ae3 bnez a0,80004a50 + 80004a60: 00002417 auipc s0,0x2 + 80004a64: 0d040413 addi s0,s0,208 # 80006b30 + 80004a68: 02000513 li a0,32 + 80004a6c: 00140413 addi s0,s0,1 + 80004a70: e19ff0ef jal ra,80004888 + 80004a74: 00044503 lbu a0,0(s0) + 80004a78: fe051ae3 bnez a0,80004a6c + 80004a7c: 00100513 li a0,1 + 80004a80: e15ff0ef jal ra,80004894 + +0000000080004a84 : + 80004a84: ff010113 addi sp,sp,-16 + 80004a88: 00113423 sd ra,8(sp) + 80004a8c: 00003797 auipc a5,0x3 + 80004a90: b0c78793 addi a5,a5,-1268 # 80007598 + 80004a94: 00003697 auipc a3,0x3 + 80004a98: f0468693 addi a3,a3,-252 # 80007998 + 80004a9c: 00000617 auipc a2,0x0 + 80004aa0: f8060613 addi a2,a2,-128 # 80004a1c + 80004aa4: 00c0006f j 80004ab0 + 80004aa8: 00878793 addi a5,a5,8 + 80004aac: 00d78c63 beq a5,a3,80004ac4 + 80004ab0: 0007b703 ld a4,0(a5) + 80004ab4: fe071ae3 bnez a4,80004aa8 + 80004ab8: 00c7b023 sd a2,0(a5) + 80004abc: 00878793 addi a5,a5,8 + 80004ac0: fed798e3 bne a5,a3,80004ab0 + 80004ac4: 030000ef jal ra,80004af4 <__am_timer_init> + 80004ac8: 00813083 ld ra,8(sp) + 80004acc: 00100513 li a0,1 + 80004ad0: 01010113 addi sp,sp,16 + 80004ad4: 00008067 ret + +0000000080004ad8 : + 80004ad8: 00351793 slli a5,a0,0x3 + 80004adc: 00003517 auipc a0,0x3 + 80004ae0: abc50513 addi a0,a0,-1348 # 80007598 + 80004ae4: 00f50533 add a0,a0,a5 + 80004ae8: 00053303 ld t1,0(a0) + 80004aec: 00058513 mv a0,a1 + 80004af0: 00030067 jr t1 + +0000000080004af4 <__am_timer_init>: + 80004af4: 00008067 ret + +0000000080004af8 <__am_timer_uptime>: + 80004af8: fd010113 addi sp,sp,-48 + 80004afc: 00913c23 sd s1,24(sp) + 80004b00: 02113423 sd ra,40(sp) + 80004b04: 02813023 sd s0,32(sp) + 80004b08: 01213823 sd s2,16(sp) + 80004b0c: 01313423 sd s3,8(sp) + 80004b10: 00050493 mv s1,a0 + 80004b14: b0002973 csrr s2,mcycle + 80004b18: 000f49b7 lui s3,0xf4 + 80004b1c: 24098593 addi a1,s3,576 # f4240 <_entry_offset+0xf4240> + 80004b20: 00090513 mv a0,s2 + 80004b24: e25ff0ef jal ra,80004948 <__udivdi3> + 80004b28: 00551413 slli s0,a0,0x5 + 80004b2c: 40a407b3 sub a5,s0,a0 + 80004b30: 00679413 slli s0,a5,0x6 + 80004b34: 40f40433 sub s0,s0,a5 + 80004b38: 00341413 slli s0,s0,0x3 + 80004b3c: 00a40433 add s0,s0,a0 + 80004b40: 24098593 addi a1,s3,576 + 80004b44: 00090513 mv a0,s2 + 80004b48: e49ff0ef jal ra,80004990 <__umoddi3> + 80004b4c: 00641413 slli s0,s0,0x6 + 80004b50: 00a40433 add s0,s0,a0 + 80004b54: 0084b023 sd s0,0(s1) + 80004b58: 02813083 ld ra,40(sp) + 80004b5c: 02013403 ld s0,32(sp) + 80004b60: 01813483 ld s1,24(sp) + 80004b64: 01013903 ld s2,16(sp) + 80004b68: 00813983 ld s3,8(sp) + 80004b6c: 03010113 addi sp,sp,48 + 80004b70: 00008067 ret + +0000000080004b74 : + 80004b74: fc010113 addi sp,sp,-64 + 80004b78: 01313c23 sd s3,24(sp) + 80004b7c: 00058993 mv s3,a1 + 80004b80: 00050793 mv a5,a0 + 80004b84: 03800613 li a2,56 + 80004b88: 00000593 li a1,0 + 80004b8c: 00098513 mv a0,s3 + 80004b90: 02813823 sd s0,48(sp) + 80004b94: 03213023 sd s2,32(sp) + 80004b98: 0007b403 ld s0,0(a5) + 80004b9c: 01413823 sd s4,16(sp) + 80004ba0: 02113c23 sd ra,56(sp) + 80004ba4: 02913423 sd s1,40(sp) + 80004ba8: 01513423 sd s5,8(sp) + 80004bac: 434010ef jal ra,80005fe0 + 80004bb0: 7b200793 li a5,1970 + 80004bb4: 00f9aa23 sw a5,20(s3) + 80004bb8: 7b200913 li s2,1970 + 80004bbc: 00002a17 auipc s4,0x2 + 80004bc0: 22ca0a13 addi s4,s4,556 # 80006de8 + 80004bc4: 0100006f j 80004bd4 + 80004bc8: 40e40433 sub s0,s0,a4 + 80004bcc: 00d9aa23 sw a3,20(s3) + 80004bd0: 00068913 mv s2,a3 + 80004bd4: 0009049b sext.w s1,s2 + 80004bd8: 06400593 li a1,100 + 80004bdc: 00048513 mv a0,s1 + 80004be0: de5ff0ef jal ra,800049c4 <__moddi3> + 80004be4: 00050793 mv a5,a0 + 80004be8: 0007879b sext.w a5,a5 + 80004bec: 00048513 mv a0,s1 + 80004bf0: 00397493 andi s1,s2,3 + 80004bf4: 19000593 li a1,400 + 80004bf8: 0014b493 seqz s1,s1 + 80004bfc: 00079863 bnez a5,80004c0c + 80004c00: dc5ff0ef jal ra,800049c4 <__moddi3> + 80004c04: 0005049b sext.w s1,a0 + 80004c08: 0014b493 seqz s1,s1 + 80004c0c: 00249793 slli a5,s1,0x2 + 80004c10: 00fa07b3 add a5,s4,a5 + 80004c14: 0007e703 lwu a4,0(a5) + 80004c18: 0019069b addiw a3,s2,1 + 80004c1c: fae456e3 bge s0,a4,80004bc8 + 80004c20: 000155b7 lui a1,0x15 + 80004c24: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80004c28: 00040513 mv a0,s0 + 80004c2c: d15ff0ef jal ra,80004940 <__divdi3> + 80004c30: 00149793 slli a5,s1,0x1 + 80004c34: 009784b3 add s1,a5,s1 + 80004c38: 00449793 slli a5,s1,0x4 + 80004c3c: 00002497 auipc s1,0x2 + 80004c40: f3448493 addi s1,s1,-204 # 80006b70 + 80004c44: 00f484b3 add s1,s1,a5 + 80004c48: 0004e783 lwu a5,0(s1) + 80004c4c: 0005051b sext.w a0,a0 + 80004c50: 00a9ae23 sw a0,28(s3) + 80004c54: 14f44463 blt s0,a5,80004d9c + 80004c58: 00100713 li a4,1 + 80004c5c: 40f40433 sub s0,s0,a5 + 80004c60: 0044e783 lwu a5,4(s1) + 80004c64: 00070a1b sext.w s4,a4 + 80004c68: 00448493 addi s1,s1,4 + 80004c6c: 00170713 addi a4,a4,1 + 80004c70: fef456e3 bge s0,a5,80004c5c + 80004c74: 000155b7 lui a1,0x15 + 80004c78: 0149a823 sw s4,16(s3) + 80004c7c: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80004c80: 00040513 mv a0,s0 + 80004c84: cbdff0ef jal ra,80004940 <__divdi3> + 80004c88: 0005051b sext.w a0,a0 + 80004c8c: 0015079b addiw a5,a0,1 + 80004c90: 000155b7 lui a1,0x15 + 80004c94: 00f9a623 sw a5,12(s3) + 80004c98: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80004c9c: 00040513 mv a0,s0 + 80004ca0: 00001ab7 lui s5,0x1 + 80004ca4: 0007841b sext.w s0,a5 + 80004ca8: d1dff0ef jal ra,800049c4 <__moddi3> + 80004cac: e10a8593 addi a1,s5,-496 # e10 <_entry_offset+0xe10> + 80004cb0: 00050493 mv s1,a0 + 80004cb4: c8dff0ef jal ra,80004940 <__divdi3> + 80004cb8: e10a8593 addi a1,s5,-496 + 80004cbc: 00a9a423 sw a0,8(s3) + 80004cc0: 00048513 mv a0,s1 + 80004cc4: d01ff0ef jal ra,800049c4 <__moddi3> + 80004cc8: 03c00593 li a1,60 + 80004ccc: 00050493 mv s1,a0 + 80004cd0: c71ff0ef jal ra,80004940 <__divdi3> + 80004cd4: 00a9a223 sw a0,4(s3) + 80004cd8: 03c00593 li a1,60 + 80004cdc: 00048513 mv a0,s1 + 80004ce0: ce5ff0ef jal ra,800049c4 <__moddi3> + 80004ce4: 001a0a1b addiw s4,s4,1 + 80004ce8: 0ffa7793 andi a5,s4,255 + 80004cec: 0037b793 sltiu a5,a5,3 + 80004cf0: 40f9093b subw s2,s2,a5 + 80004cf4: 03091913 slli s2,s2,0x30 + 80004cf8: 03095913 srli s2,s2,0x30 + 80004cfc: 00a9a023 sw a0,0(s3) + 80004d00: 06400593 li a1,100 + 80004d04: 00090513 mv a0,s2 + 80004d08: c41ff0ef jal ra,80004948 <__udivdi3> + 80004d0c: 0029549b srliw s1,s2,0x2 + 80004d10: 0105179b slliw a5,a0,0x10 + 80004d14: 0107d79b srliw a5,a5,0x10 + 80004d18: 012484bb addw s1,s1,s2 + 80004d1c: 19000593 li a1,400 + 80004d20: 00090513 mv a0,s2 + 80004d24: 0ffa7a13 andi s4,s4,255 + 80004d28: 40f484bb subw s1,s1,a5 + 80004d2c: fffa0a1b addiw s4,s4,-1 + 80004d30: c19ff0ef jal ra,80004948 <__udivdi3> + 80004d34: 00002797 auipc a5,0x2 + 80004d38: e9c78793 addi a5,a5,-356 # 80006bd0 + 80004d3c: 002a1a13 slli s4,s4,0x2 + 80004d40: 01478a33 add s4,a5,s4 + 80004d44: 000a2783 lw a5,0(s4) + 80004d48: 0105151b slliw a0,a0,0x10 + 80004d4c: 0105551b srliw a0,a0,0x10 + 80004d50: 00a484bb addw s1,s1,a0 + 80004d54: 00f484bb addw s1,s1,a5 + 80004d58: 0ff47513 andi a0,s0,255 + 80004d5c: 00a4853b addw a0,s1,a0 + 80004d60: 00700593 li a1,7 + 80004d64: c61ff0ef jal ra,800049c4 <__moddi3> + 80004d68: 03813083 ld ra,56(sp) + 80004d6c: 03013403 ld s0,48(sp) + 80004d70: 0ff57513 andi a0,a0,255 + 80004d74: 00a9ac23 sw a0,24(s3) + 80004d78: 0209a023 sw zero,32(s3) + 80004d7c: 02813483 ld s1,40(sp) + 80004d80: 02013903 ld s2,32(sp) + 80004d84: 01013a03 ld s4,16(sp) + 80004d88: 00813a83 ld s5,8(sp) + 80004d8c: 00098513 mv a0,s3 + 80004d90: 01813983 ld s3,24(sp) + 80004d94: 04010113 addi sp,sp,64 + 80004d98: 00008067 ret + 80004d9c: 00000a13 li s4,0 + 80004da0: eedff06f j 80004c8c + +0000000080004da4 <__am_timer_rtc>: + 80004da4: f9010113 addi sp,sp,-112 + 80004da8: 06813023 sd s0,96(sp) + 80004dac: 06113423 sd ra,104(sp) + 80004db0: 04913c23 sd s1,88(sp) + 80004db4: 05213823 sd s2,80(sp) + 80004db8: 00050413 mv s0,a0 + 80004dbc: b00024f3 csrr s1,mcycle + 80004dc0: 000f4937 lui s2,0xf4 + 80004dc4: 24090593 addi a1,s2,576 # f4240 <_entry_offset+0xf4240> + 80004dc8: 00048513 mv a0,s1 + 80004dcc: b7dff0ef jal ra,80004948 <__udivdi3> + 80004dd0: 00050793 mv a5,a0 + 80004dd4: 24090593 addi a1,s2,576 + 80004dd8: 00048513 mv a0,s1 + 80004ddc: 00f13423 sd a5,8(sp) + 80004de0: bb1ff0ef jal ra,80004990 <__umoddi3> + 80004de4: 00050793 mv a5,a0 + 80004de8: 01810593 addi a1,sp,24 + 80004dec: 00810513 addi a0,sp,8 + 80004df0: 00f13823 sd a5,16(sp) + 80004df4: d81ff0ef jal ra,80004b74 + 80004df8: 01812703 lw a4,24(sp) + 80004dfc: 02812783 lw a5,40(sp) + 80004e00: 06813083 ld ra,104(sp) + 80004e04: 00e42a23 sw a4,20(s0) + 80004e08: 01c12703 lw a4,28(sp) + 80004e0c: 0017879b addiw a5,a5,1 + 80004e10: 00f42223 sw a5,4(s0) + 80004e14: 00e42823 sw a4,16(s0) + 80004e18: 02012703 lw a4,32(sp) + 80004e1c: 02c12783 lw a5,44(sp) + 80004e20: 05813483 ld s1,88(sp) + 80004e24: 00e42623 sw a4,12(s0) + 80004e28: 02412703 lw a4,36(sp) + 80004e2c: 00f42023 sw a5,0(s0) + 80004e30: 05013903 ld s2,80(sp) + 80004e34: 00e42423 sw a4,8(s0) + 80004e38: 06013403 ld s0,96(sp) + 80004e3c: 07010113 addi sp,sp,112 + 80004e40: 00008067 ret + +0000000080004e44 <__am_input_keybrd>: + 80004e44: 00050023 sb zero,0(a0) + 80004e48: 00052223 sw zero,4(a0) + 80004e4c: 00008067 ret + +0000000080004e50 : + 80004e50: 00054783 lbu a5,0(a0) + 80004e54: 00158593 addi a1,a1,1 + 80004e58: 00150513 addi a0,a0,1 + 80004e5c: fff5c703 lbu a4,-1(a1) + 80004e60: 00078863 beqz a5,80004e70 + 80004e64: fee786e3 beq a5,a4,80004e50 + 80004e68: 40e7853b subw a0,a5,a4 + 80004e6c: 00008067 ret + 80004e70: 40e0053b negw a0,a4 + 80004e74: 00008067 ret + +0000000080004e78 : + 80004e78: 00002797 auipc a5,0x2 + 80004e7c: 71078793 addi a5,a5,1808 # 80007588 + 80004e80: 0007b503 ld a0,0(a5) + 80004e84: 0087b583 ld a1,8(a5) + 80004e88: ff010113 addi sp,sp,-16 + 80004e8c: 00000693 li a3,0 + 80004e90: 00000613 li a2,0 + 80004e94: 40a585b3 sub a1,a1,a0 + 80004e98: 00113423 sd ra,8(sp) + 80004e9c: 224010ef jal ra,800060c0 + 80004ea0: 00813083 ld ra,8(sp) + 80004ea4: 00003797 auipc a5,0x3 + 80004ea8: c0a7be23 sd a0,-996(a5) # 80007ac0 + 80004eac: 01010113 addi sp,sp,16 + 80004eb0: 00008067 ret + +0000000080004eb4 <_out_buffer>: + 80004eb4: 00d67663 bgeu a2,a3,80004ec0 <_out_buffer+0xc> + 80004eb8: 00c585b3 add a1,a1,a2 + 80004ebc: 00a58023 sb a0,0(a1) + 80004ec0: 00008067 ret + +0000000080004ec4 <_out_null>: + 80004ec4: 00008067 ret + +0000000080004ec8 <_ntoa_format>: + 80004ec8: fa010113 addi sp,sp,-96 + 80004ecc: 07012303 lw t1,112(sp) + 80004ed0: 03313c23 sd s3,56(sp) + 80004ed4: 03413823 sd s4,48(sp) + 80004ed8: 03513423 sd s5,40(sp) + 80004edc: 03613023 sd s6,32(sp) + 80004ee0: 01713c23 sd s7,24(sp) + 80004ee4: 01813823 sd s8,16(sp) + 80004ee8: 01913423 sd s9,8(sp) + 80004eec: 00237e13 andi t3,t1,2 + 80004ef0: 01037e93 andi t4,t1,16 + 80004ef4: 04113c23 sd ra,88(sp) + 80004ef8: 04813823 sd s0,80(sp) + 80004efc: 04913423 sd s1,72(sp) + 80004f00: 05213023 sd s2,64(sp) + 80004f04: 06012f03 lw t5,96(sp) + 80004f08: 06812c03 lw s8,104(sp) + 80004f0c: 00050a13 mv s4,a0 + 80004f10: 00058a93 mv s5,a1 + 80004f14: 00060b93 mv s7,a2 + 80004f18: 00068b13 mv s6,a3 + 80004f1c: 00070993 mv s3,a4 + 80004f20: 000e0c9b sext.w s9,t3 + 80004f24: 000e8e9b sext.w t4,t4 + 80004f28: 060e1c63 bnez t3,80004fa0 <_ntoa_format+0xd8> + 80004f2c: 020f1693 slli a3,t5,0x20 + 80004f30: 00137513 andi a0,t1,1 + 80004f34: 0206d693 srli a3,a3,0x20 + 80004f38: 180c1e63 bnez s8,800050d4 <_ntoa_format+0x20c> + 80004f3c: 02d7f663 bgeu a5,a3,80004f68 <_ntoa_format+0xa0> + 80004f40: 02000713 li a4,32 + 80004f44: 36e78e63 beq a5,a4,800052c0 <_ntoa_format+0x3f8> + 80004f48: 03000613 li a2,48 + 80004f4c: 02000593 li a1,32 + 80004f50: 0080006f j 80004f58 <_ntoa_format+0x90> + 80004f54: 00b78a63 beq a5,a1,80004f68 <_ntoa_format+0xa0> + 80004f58: 00178793 addi a5,a5,1 + 80004f5c: 00f98733 add a4,s3,a5 + 80004f60: fec70fa3 sb a2,-1(a4) + 80004f64: fed7e8e3 bltu a5,a3,80004f54 <_ntoa_format+0x8c> + 80004f68: 02050c63 beqz a0,80004fa0 <_ntoa_format+0xd8> + 80004f6c: 020c1913 slli s2,s8,0x20 + 80004f70: 02095913 srli s2,s2,0x20 + 80004f74: 0327f663 bgeu a5,s2,80004fa0 <_ntoa_format+0xd8> + 80004f78: 02000713 li a4,32 + 80004f7c: 36e78863 beq a5,a4,800052ec <_ntoa_format+0x424> + 80004f80: 03000693 li a3,48 + 80004f84: 02000613 li a2,32 + 80004f88: 0080006f j 80004f90 <_ntoa_format+0xc8> + 80004f8c: 16c78463 beq a5,a2,800050f4 <_ntoa_format+0x22c> + 80004f90: 00178793 addi a5,a5,1 + 80004f94: 00f98733 add a4,s3,a5 + 80004f98: fed70fa3 sb a3,-1(a4) + 80004f9c: ff2798e3 bne a5,s2,80004f8c <_ntoa_format+0xc4> + 80004fa0: 1a0e8663 beqz t4,8000514c <_ntoa_format+0x284> + 80004fa4: 40037713 andi a4,t1,1024 + 80004fa8: 20071463 bnez a4,800051b0 <_ntoa_format+0x2e8> + 80004fac: 1e079663 bnez a5,80005198 <_ntoa_format+0x2d0> + 80004fb0: 01000793 li a5,16 + 80004fb4: 2af88863 beq a7,a5,80005264 <_ntoa_format+0x39c> + 80004fb8: 00200793 li a5,2 + 80004fbc: 2ef88a63 beq a7,a5,800052b0 <_ntoa_format+0x3e8> + 80004fc0: 03000793 li a5,48 + 80004fc4: 00f98023 sb a5,0(s3) + 80004fc8: 00100793 li a5,1 + 80004fcc: 1a080463 beqz a6,80005174 <_ntoa_format+0x2ac> + 80004fd0: 00f98733 add a4,s3,a5 + 80004fd4: 00178413 addi s0,a5,1 + 80004fd8: 02d00793 li a5,45 + 80004fdc: 00f70023 sb a5,0(a4) + 80004fe0: 00337313 andi t1,t1,3 + 80004fe4: 20031263 bnez t1,800051e8 <_ntoa_format+0x320> + 80004fe8: 020c1913 slli s2,s8,0x20 + 80004fec: 02095913 srli s2,s2,0x20 + 80004ff0: 1f247c63 bgeu s0,s2,800051e8 <_ntoa_format+0x320> + 80004ff4: 40890933 sub s2,s2,s0 + 80004ff8: 01790933 add s2,s2,s7 + 80004ffc: 000b8493 mv s1,s7 + 80005000: 00048613 mv a2,s1 + 80005004: 000b0693 mv a3,s6 + 80005008: 00148493 addi s1,s1,1 + 8000500c: 000a8593 mv a1,s5 + 80005010: 02000513 li a0,32 + 80005014: 000a00e7 jalr s4 + 80005018: ff2494e3 bne s1,s2,80005000 <_ntoa_format+0x138> + 8000501c: 02040663 beqz s0,80005048 <_ntoa_format+0x180> + 80005020: 01240933 add s2,s0,s2 + 80005024: 012984b3 add s1,s3,s2 + 80005028: 00898433 add s0,s3,s0 + 8000502c: fff44503 lbu a0,-1(s0) + 80005030: 40848633 sub a2,s1,s0 + 80005034: 000b0693 mv a3,s6 + 80005038: fff40413 addi s0,s0,-1 + 8000503c: 000a8593 mv a1,s5 + 80005040: 000a00e7 jalr s4 + 80005044: fe8994e3 bne s3,s0,8000502c <_ntoa_format+0x164> + 80005048: 040c8a63 beqz s9,8000509c <_ntoa_format+0x1d4> + 8000504c: 020c1c13 slli s8,s8,0x20 + 80005050: 41790433 sub s0,s2,s7 + 80005054: 020c5c13 srli s8,s8,0x20 + 80005058: 05847263 bgeu s0,s8,8000509c <_ntoa_format+0x1d4> + 8000505c: 01740633 add a2,s0,s7 + 80005060: 000b0693 mv a3,s6 + 80005064: 00140413 addi s0,s0,1 + 80005068: 000a8593 mv a1,s5 + 8000506c: 02000513 li a0,32 + 80005070: 000a00e7 jalr s4 + 80005074: ff8464e3 bltu s0,s8,8000505c <_ntoa_format+0x194> + 80005078: 41790733 sub a4,s2,s7 + 8000507c: 00170713 addi a4,a4,1 + 80005080: 00000793 li a5,0 + 80005084: 00ec6863 bltu s8,a4,80005094 <_ntoa_format+0x1cc> + 80005088: fffb8793 addi a5,s7,-1 # ffff <_entry_offset+0xffff> + 8000508c: 01878c33 add s8,a5,s8 + 80005090: 412c07b3 sub a5,s8,s2 + 80005094: 00190913 addi s2,s2,1 + 80005098: 00f90933 add s2,s2,a5 + 8000509c: 05813083 ld ra,88(sp) + 800050a0: 05013403 ld s0,80(sp) + 800050a4: 04813483 ld s1,72(sp) + 800050a8: 03813983 ld s3,56(sp) + 800050ac: 03013a03 ld s4,48(sp) + 800050b0: 02813a83 ld s5,40(sp) + 800050b4: 02013b03 ld s6,32(sp) + 800050b8: 01813b83 ld s7,24(sp) + 800050bc: 01013c03 ld s8,16(sp) + 800050c0: 00813c83 ld s9,8(sp) + 800050c4: 00090513 mv a0,s2 + 800050c8: 04013903 ld s2,64(sp) + 800050cc: 06010113 addi sp,sp,96 + 800050d0: 00008067 ret + 800050d4: 12050863 beqz a0,80005204 <_ntoa_format+0x33c> + 800050d8: 00081663 bnez a6,800050e4 <_ntoa_format+0x21c> + 800050dc: 00c37713 andi a4,t1,12 + 800050e0: 00070463 beqz a4,800050e8 <_ntoa_format+0x220> + 800050e4: fffc0c1b addiw s8,s8,-1 + 800050e8: e8d7f2e3 bgeu a5,a3,80004f6c <_ntoa_format+0xa4> + 800050ec: 02000713 li a4,32 + 800050f0: e4e79ce3 bne a5,a4,80004f48 <_ntoa_format+0x80> + 800050f4: 0e0e8063 beqz t4,800051d4 <_ntoa_format+0x30c> + 800050f8: 40037793 andi a5,t1,1024 + 800050fc: 04079c63 bnez a5,80005154 <_ntoa_format+0x28c> + 80005100: 02000793 li a5,32 + 80005104: 0aff1063 bne t5,a5,800051a4 <_ntoa_format+0x2dc> + 80005108: 02000793 li a5,32 + 8000510c: 01f00713 li a4,31 + 80005110: 01000693 li a3,16 + 80005114: 1ad88c63 beq a7,a3,800052cc <_ntoa_format+0x404> + 80005118: 00200693 li a3,2 + 8000511c: 00070793 mv a5,a4 + 80005120: 00d89e63 bne a7,a3,8000513c <_ntoa_format+0x274> + 80005124: 00e986b3 add a3,s3,a4 + 80005128: 00170793 addi a5,a4,1 + 8000512c: 06200713 li a4,98 + 80005130: 00e68023 sb a4,0(a3) + 80005134: 02000713 li a4,32 + 80005138: 00e78e63 beq a5,a4,80005154 <_ntoa_format+0x28c> + 8000513c: 00f98733 add a4,s3,a5 + 80005140: 03000693 li a3,48 + 80005144: 00d70023 sb a3,0(a4) + 80005148: 00178793 addi a5,a5,1 + 8000514c: 02000713 li a4,32 + 80005150: e6e79ee3 bne a5,a4,80004fcc <_ntoa_format+0x104> + 80005154: 00337313 andi t1,t1,3 + 80005158: 08031263 bnez t1,800051dc <_ntoa_format+0x314> + 8000515c: 02000413 li s0,32 + 80005160: 020c1913 slli s2,s8,0x20 + 80005164: 02095913 srli s2,s2,0x20 + 80005168: e92466e3 bltu s0,s2,80004ff4 <_ntoa_format+0x12c> + 8000516c: 000b8913 mv s2,s7 + 80005170: eadff06f j 8000501c <_ntoa_format+0x154> + 80005174: 00437713 andi a4,t1,4 + 80005178: 06071c63 bnez a4,800051f0 <_ntoa_format+0x328> + 8000517c: 00837713 andi a4,t1,8 + 80005180: 0c071863 bnez a4,80005250 <_ntoa_format+0x388> + 80005184: 00337313 andi t1,t1,3 + 80005188: 00078413 mv s0,a5 + 8000518c: fc030ae3 beqz t1,80005160 <_ntoa_format+0x298> + 80005190: 000b8913 mv s2,s7 + 80005194: e89ff06f j 8000501c <_ntoa_format+0x154> + 80005198: 020f1f13 slli t5,t5,0x20 + 8000519c: 020f5f13 srli t5,t5,0x20 + 800051a0: 0aff0263 beq t5,a5,80005244 <_ntoa_format+0x37c> + 800051a4: 020c1913 slli s2,s8,0x20 + 800051a8: 02095913 srli s2,s2,0x20 + 800051ac: 08f90c63 beq s2,a5,80005244 <_ntoa_format+0x37c> + 800051b0: 01000713 li a4,16 + 800051b4: 06e88663 beq a7,a4,80005220 <_ntoa_format+0x358> + 800051b8: 00200713 li a4,2 + 800051bc: f6e89ce3 bne a7,a4,80005134 <_ntoa_format+0x26c> + 800051c0: 02000713 li a4,32 + 800051c4: f8e788e3 beq a5,a4,80005154 <_ntoa_format+0x28c> + 800051c8: 00f986b3 add a3,s3,a5 + 800051cc: 00178793 addi a5,a5,1 + 800051d0: f5dff06f j 8000512c <_ntoa_format+0x264> + 800051d4: 00337313 andi t1,t1,3 + 800051d8: 0c030063 beqz t1,80005298 <_ntoa_format+0x3d0> + 800051dc: 000b8913 mv s2,s7 + 800051e0: 02000413 li s0,32 + 800051e4: e3dff06f j 80005020 <_ntoa_format+0x158> + 800051e8: 000b8913 mv s2,s7 + 800051ec: e35ff06f j 80005020 <_ntoa_format+0x158> + 800051f0: 00f98733 add a4,s3,a5 + 800051f4: 00178413 addi s0,a5,1 + 800051f8: 02b00793 li a5,43 + 800051fc: 00f70023 sb a5,0(a4) + 80005200: de1ff06f j 80004fe0 <_ntoa_format+0x118> + 80005204: d8d7fee3 bgeu a5,a3,80004fa0 <_ntoa_format+0xd8> + 80005208: 02000713 li a4,32 + 8000520c: d2e79ee3 bne a5,a4,80004f48 <_ntoa_format+0x80> + 80005210: 0e0e8c63 beqz t4,80005308 <_ntoa_format+0x440> + 80005214: 40037793 andi a5,t1,1024 + 80005218: f2079ee3 bnez a5,80005154 <_ntoa_format+0x28c> + 8000521c: ee5ff06f j 80005100 <_ntoa_format+0x238> + 80005220: 02037713 andi a4,t1,32 + 80005224: 04071c63 bnez a4,8000527c <_ntoa_format+0x3b4> + 80005228: 02000713 li a4,32 + 8000522c: f2e784e3 beq a5,a4,80005154 <_ntoa_format+0x28c> + 80005230: 00f98733 add a4,s3,a5 + 80005234: 00178793 addi a5,a5,1 + 80005238: 07800693 li a3,120 + 8000523c: 00d70023 sb a3,0(a4) + 80005240: ef5ff06f j 80005134 <_ntoa_format+0x26c> + 80005244: fff78713 addi a4,a5,-1 + 80005248: d60704e3 beqz a4,80004fb0 <_ntoa_format+0xe8> + 8000524c: ec5ff06f j 80005110 <_ntoa_format+0x248> + 80005250: 00f98733 add a4,s3,a5 + 80005254: 00178413 addi s0,a5,1 + 80005258: 02000793 li a5,32 + 8000525c: 00f70023 sb a5,0(a4) + 80005260: d81ff06f j 80004fe0 <_ntoa_format+0x118> + 80005264: 02037793 andi a5,t1,32 + 80005268: 02079c63 bnez a5,800052a0 <_ntoa_format+0x3d8> + 8000526c: 07800793 li a5,120 + 80005270: 00f98023 sb a5,0(s3) + 80005274: 00100793 li a5,1 + 80005278: ec5ff06f j 8000513c <_ntoa_format+0x274> + 8000527c: 02000713 li a4,32 + 80005280: ece78ae3 beq a5,a4,80005154 <_ntoa_format+0x28c> + 80005284: 00f98733 add a4,s3,a5 + 80005288: 05800693 li a3,88 + 8000528c: 00d70023 sb a3,0(a4) + 80005290: 00178793 addi a5,a5,1 + 80005294: ea1ff06f j 80005134 <_ntoa_format+0x26c> + 80005298: 02000413 li s0,32 + 8000529c: d4dff06f j 80004fe8 <_ntoa_format+0x120> + 800052a0: 05800793 li a5,88 + 800052a4: 00f98023 sb a5,0(s3) + 800052a8: 00100793 li a5,1 + 800052ac: e91ff06f j 8000513c <_ntoa_format+0x274> + 800052b0: 06200793 li a5,98 + 800052b4: 00f98023 sb a5,0(s3) + 800052b8: 00100793 li a5,1 + 800052bc: e81ff06f j 8000513c <_ntoa_format+0x274> + 800052c0: e2051ae3 bnez a0,800050f4 <_ntoa_format+0x22c> + 800052c4: 000c8c13 mv s8,s9 + 800052c8: f49ff06f j 80005210 <_ntoa_format+0x348> + 800052cc: 02037693 andi a3,t1,32 + 800052d0: ffe78713 addi a4,a5,-2 + 800052d4: 00069863 bnez a3,800052e4 <_ntoa_format+0x41c> + 800052d8: 00e98733 add a4,s3,a4 + 800052dc: fff78793 addi a5,a5,-1 + 800052e0: f59ff06f j 80005238 <_ntoa_format+0x370> + 800052e4: 00070793 mv a5,a4 + 800052e8: f9dff06f j 80005284 <_ntoa_format+0x3bc> + 800052ec: 000e8e63 beqz t4,80005308 <_ntoa_format+0x440> + 800052f0: 40037713 andi a4,t1,1024 + 800052f4: 00071e63 bnez a4,80005310 <_ntoa_format+0x448> + 800052f8: 02ff0e63 beq t5,a5,80005334 <_ntoa_format+0x46c> + 800052fc: e4fc1ce3 bne s8,a5,80005154 <_ntoa_format+0x28c> + 80005300: 01f00713 li a4,31 + 80005304: e0dff06f j 80005110 <_ntoa_format+0x248> + 80005308: 02000413 li s0,32 + 8000530c: cd5ff06f j 80004fe0 <_ntoa_format+0x118> + 80005310: 01000793 li a5,16 + 80005314: 02f88c63 beq a7,a5,8000534c <_ntoa_format+0x484> + 80005318: 00200793 li a5,2 + 8000531c: e2f88ce3 beq a7,a5,80005154 <_ntoa_format+0x28c> + 80005320: 00337313 andi t1,t1,3 + 80005324: ea031ce3 bnez t1,800051dc <_ntoa_format+0x314> + 80005328: 02000413 li s0,32 + 8000532c: cd2464e3 bltu s0,s2,80004ff4 <_ntoa_format+0x12c> + 80005330: e3dff06f j 8000516c <_ntoa_format+0x2a4> + 80005334: 01000713 li a4,16 + 80005338: f8e88ae3 beq a7,a4,800052cc <_ntoa_format+0x404> + 8000533c: 00200793 li a5,2 + 80005340: 00f88c63 beq a7,a5,80005358 <_ntoa_format+0x490> + 80005344: 01f00793 li a5,31 + 80005348: df5ff06f j 8000513c <_ntoa_format+0x274> + 8000534c: 02037793 andi a5,t1,32 + 80005350: fc0788e3 beqz a5,80005320 <_ntoa_format+0x458> + 80005354: e01ff06f j 80005154 <_ntoa_format+0x28c> + 80005358: 01f00713 li a4,31 + 8000535c: dc9ff06f j 80005124 <_ntoa_format+0x25c> + +0000000080005360 <_ntoa_long>: + 80005360: f4010113 addi sp,sp,-192 + 80005364: 09413823 sd s4,144(sp) + 80005368: 09513423 sd s5,136(sp) + 8000536c: 09613023 sd s6,128(sp) + 80005370: 07713c23 sd s7,120(sp) + 80005374: 07813823 sd s8,112(sp) + 80005378: 07913423 sd s9,104(sp) + 8000537c: 05b13c23 sd s11,88(sp) + 80005380: 0a113c23 sd ra,184(sp) + 80005384: 0a813823 sd s0,176(sp) + 80005388: 0a913423 sd s1,168(sp) + 8000538c: 0b213023 sd s2,160(sp) + 80005390: 09313c23 sd s3,152(sp) + 80005394: 07a13023 sd s10,96(sp) + 80005398: 02a13023 sd a0,32(sp) + 8000539c: 03113423 sd a7,40(sp) + 800053a0: 0c812a03 lw s4,200(sp) + 800053a4: 00070d93 mv s11,a4 + 800053a8: 00058b13 mv s6,a1 + 800053ac: 00060b93 mv s7,a2 + 800053b0: 00068c13 mv s8,a3 + 800053b4: 00078c93 mv s9,a5 + 800053b8: 00080a93 mv s5,a6 + 800053bc: 00071863 bnez a4,800053cc <_ntoa_long+0x6c> + 800053c0: 400a7793 andi a5,s4,1024 + 800053c4: fefa7a13 andi s4,s4,-17 + 800053c8: 0e079663 bnez a5,800054b4 <_ntoa_long+0x154> + 800053cc: 020a7793 andi a5,s4,32 + 800053d0: 06100413 li s0,97 + 800053d4: 0c079c63 bnez a5,800054ac <_ntoa_long+0x14c> + 800053d8: 00000d13 li s10,0 + 800053dc: 03010493 addi s1,sp,48 + 800053e0: 00900913 li s2,9 + 800053e4: ff64041b addiw s0,s0,-10 + 800053e8: 02000993 li s3,32 + 800053ec: 00c0006f j 800053f8 <_ntoa_long+0x98> + 800053f0: 053d0463 beq s10,s3,80005438 <_ntoa_long+0xd8> + 800053f4: 00050d93 mv s11,a0 + 800053f8: 000a8593 mv a1,s5 + 800053fc: 000d8513 mv a0,s11 + 80005400: d90ff0ef jal ra,80004990 <__umoddi3> + 80005404: 0ff57313 andi t1,a0,255 + 80005408: 0303071b addiw a4,t1,48 + 8000540c: 0064033b addw t1,s0,t1 + 80005410: 0ff37313 andi t1,t1,255 + 80005414: 00a96463 bltu s2,a0,8000541c <_ntoa_long+0xbc> + 80005418: 0ff77313 andi t1,a4,255 + 8000541c: 001d0d13 addi s10,s10,1 + 80005420: 01a48733 add a4,s1,s10 + 80005424: 000d8513 mv a0,s11 + 80005428: 000a8593 mv a1,s5 + 8000542c: fe670fa3 sb t1,-1(a4) + 80005430: d18ff0ef jal ra,80004948 <__udivdi3> + 80005434: fb5dfee3 bgeu s11,s5,800053f0 <_ntoa_long+0x90> + 80005438: 0c012703 lw a4,192(sp) + 8000543c: 02813783 ld a5,40(sp) + 80005440: 02013503 ld a0,32(sp) + 80005444: 01413823 sd s4,16(sp) + 80005448: 00e13423 sd a4,8(sp) + 8000544c: 00f13023 sd a5,0(sp) + 80005450: 000a889b sext.w a7,s5 + 80005454: 000c8813 mv a6,s9 + 80005458: 000d0793 mv a5,s10 + 8000545c: 00048713 mv a4,s1 + 80005460: 000c0693 mv a3,s8 + 80005464: 000b8613 mv a2,s7 + 80005468: 000b0593 mv a1,s6 + 8000546c: a5dff0ef jal ra,80004ec8 <_ntoa_format> + 80005470: 0b813083 ld ra,184(sp) + 80005474: 0b013403 ld s0,176(sp) + 80005478: 0a813483 ld s1,168(sp) + 8000547c: 0a013903 ld s2,160(sp) + 80005480: 09813983 ld s3,152(sp) + 80005484: 09013a03 ld s4,144(sp) + 80005488: 08813a83 ld s5,136(sp) + 8000548c: 08013b03 ld s6,128(sp) + 80005490: 07813b83 ld s7,120(sp) + 80005494: 07013c03 ld s8,112(sp) + 80005498: 06813c83 ld s9,104(sp) + 8000549c: 06013d03 ld s10,96(sp) + 800054a0: 05813d83 ld s11,88(sp) + 800054a4: 0c010113 addi sp,sp,192 + 800054a8: 00008067 ret + 800054ac: 04100413 li s0,65 + 800054b0: f29ff06f j 800053d8 <_ntoa_long+0x78> + 800054b4: 00000d13 li s10,0 + 800054b8: 03010493 addi s1,sp,48 + 800054bc: f7dff06f j 80005438 <_ntoa_long+0xd8> + +00000000800054c0 <_ntoa_long_long>: + 800054c0: f4010113 addi sp,sp,-192 + 800054c4: 09413823 sd s4,144(sp) + 800054c8: 09513423 sd s5,136(sp) + 800054cc: 09613023 sd s6,128(sp) + 800054d0: 07713c23 sd s7,120(sp) + 800054d4: 07813823 sd s8,112(sp) + 800054d8: 07913423 sd s9,104(sp) + 800054dc: 05b13c23 sd s11,88(sp) + 800054e0: 0a113c23 sd ra,184(sp) + 800054e4: 0a813823 sd s0,176(sp) + 800054e8: 0a913423 sd s1,168(sp) + 800054ec: 0b213023 sd s2,160(sp) + 800054f0: 09313c23 sd s3,152(sp) + 800054f4: 07a13023 sd s10,96(sp) + 800054f8: 02a13023 sd a0,32(sp) + 800054fc: 03113423 sd a7,40(sp) + 80005500: 0c812a03 lw s4,200(sp) + 80005504: 00070d93 mv s11,a4 + 80005508: 00058b13 mv s6,a1 + 8000550c: 00060b93 mv s7,a2 + 80005510: 00068c13 mv s8,a3 + 80005514: 00078c93 mv s9,a5 + 80005518: 00080a93 mv s5,a6 + 8000551c: 00071863 bnez a4,8000552c <_ntoa_long_long+0x6c> + 80005520: 400a7793 andi a5,s4,1024 + 80005524: fefa7a13 andi s4,s4,-17 + 80005528: 0e079663 bnez a5,80005614 <_ntoa_long_long+0x154> + 8000552c: 020a7793 andi a5,s4,32 + 80005530: 06100413 li s0,97 + 80005534: 0c079c63 bnez a5,8000560c <_ntoa_long_long+0x14c> + 80005538: 00000d13 li s10,0 + 8000553c: 03010493 addi s1,sp,48 + 80005540: 00900913 li s2,9 + 80005544: ff64041b addiw s0,s0,-10 + 80005548: 02000993 li s3,32 + 8000554c: 00c0006f j 80005558 <_ntoa_long_long+0x98> + 80005550: 053d0463 beq s10,s3,80005598 <_ntoa_long_long+0xd8> + 80005554: 00050d93 mv s11,a0 + 80005558: 000a8593 mv a1,s5 + 8000555c: 000d8513 mv a0,s11 + 80005560: c30ff0ef jal ra,80004990 <__umoddi3> + 80005564: 0ff57313 andi t1,a0,255 + 80005568: 0303071b addiw a4,t1,48 + 8000556c: 0064033b addw t1,s0,t1 + 80005570: 0ff37313 andi t1,t1,255 + 80005574: 00a96463 bltu s2,a0,8000557c <_ntoa_long_long+0xbc> + 80005578: 0ff77313 andi t1,a4,255 + 8000557c: 001d0d13 addi s10,s10,1 + 80005580: 01a48733 add a4,s1,s10 + 80005584: 000d8513 mv a0,s11 + 80005588: 000a8593 mv a1,s5 + 8000558c: fe670fa3 sb t1,-1(a4) + 80005590: bb8ff0ef jal ra,80004948 <__udivdi3> + 80005594: fb5dfee3 bgeu s11,s5,80005550 <_ntoa_long_long+0x90> + 80005598: 0c012703 lw a4,192(sp) + 8000559c: 02813783 ld a5,40(sp) + 800055a0: 02013503 ld a0,32(sp) + 800055a4: 01413823 sd s4,16(sp) + 800055a8: 00e13423 sd a4,8(sp) + 800055ac: 00f13023 sd a5,0(sp) + 800055b0: 000a889b sext.w a7,s5 + 800055b4: 000c8813 mv a6,s9 + 800055b8: 000d0793 mv a5,s10 + 800055bc: 00048713 mv a4,s1 + 800055c0: 000c0693 mv a3,s8 + 800055c4: 000b8613 mv a2,s7 + 800055c8: 000b0593 mv a1,s6 + 800055cc: 8fdff0ef jal ra,80004ec8 <_ntoa_format> + 800055d0: 0b813083 ld ra,184(sp) + 800055d4: 0b013403 ld s0,176(sp) + 800055d8: 0a813483 ld s1,168(sp) + 800055dc: 0a013903 ld s2,160(sp) + 800055e0: 09813983 ld s3,152(sp) + 800055e4: 09013a03 ld s4,144(sp) + 800055e8: 08813a83 ld s5,136(sp) + 800055ec: 08013b03 ld s6,128(sp) + 800055f0: 07813b83 ld s7,120(sp) + 800055f4: 07013c03 ld s8,112(sp) + 800055f8: 06813c83 ld s9,104(sp) + 800055fc: 06013d03 ld s10,96(sp) + 80005600: 05813d83 ld s11,88(sp) + 80005604: 0c010113 addi sp,sp,192 + 80005608: 00008067 ret + 8000560c: 04100413 li s0,65 + 80005610: f29ff06f j 80005538 <_ntoa_long_long+0x78> + 80005614: 00000d13 li s10,0 + 80005618: 03010493 addi s1,sp,48 + 8000561c: f7dff06f j 80005598 <_ntoa_long_long+0xd8> + +0000000080005620 <_vsnprintf>: + 80005620: f6010113 addi sp,sp,-160 + 80005624: 08913423 sd s1,136(sp) + 80005628: 09213023 sd s2,128(sp) + 8000562c: 07313c23 sd s3,120(sp) + 80005630: 05713c23 sd s7,88(sp) + 80005634: 05813823 sd s8,80(sp) + 80005638: 08113c23 sd ra,152(sp) + 8000563c: 08813823 sd s0,144(sp) + 80005640: 07413823 sd s4,112(sp) + 80005644: 07513423 sd s5,104(sp) + 80005648: 07613023 sd s6,96(sp) + 8000564c: 05913423 sd s9,72(sp) + 80005650: 05a13023 sd s10,64(sp) + 80005654: 03b13c23 sd s11,56(sp) + 80005658: 00058493 mv s1,a1 + 8000565c: 00060c13 mv s8,a2 + 80005660: 00068b93 mv s7,a3 + 80005664: 00070993 mv s3,a4 + 80005668: 00000917 auipc s2,0x0 + 8000566c: 85c90913 addi s2,s2,-1956 # 80004ec4 <_out_null> + 80005670: 00058463 beqz a1,80005678 <_vsnprintf+0x58> + 80005674: 00050913 mv s2,a0 + 80005678: 000bc503 lbu a0,0(s7) + 8000567c: 00000d13 li s10,0 + 80005680: 66050663 beqz a0,80005cec <_vsnprintf+0x6cc> + 80005684: 000107b7 lui a5,0x10 + 80005688: fff78793 addi a5,a5,-1 # ffff <_entry_offset+0xffff> + 8000568c: 02500a13 li s4,37 + 80005690: 00001417 auipc s0,0x1 + 80005694: 57040413 addi s0,s0,1392 # 80006c00 + 80005698: 00f13c23 sd a5,24(sp) + 8000569c: 0200006f j 800056bc <_vsnprintf+0x9c> + 800056a0: 000d0613 mv a2,s10 + 800056a4: 000c0693 mv a3,s8 + 800056a8: 00048593 mv a1,s1 + 800056ac: 001d0d13 addi s10,s10,1 + 800056b0: 000900e7 jalr s2 + 800056b4: 000bc503 lbu a0,0(s7) + 800056b8: 1c050263 beqz a0,8000587c <_vsnprintf+0x25c> + 800056bc: 001b8b93 addi s7,s7,1 + 800056c0: ff4510e3 bne a0,s4,800056a0 <_vsnprintf+0x80> + 800056c4: 00000593 li a1,0 + 800056c8: 01000813 li a6,16 + 800056cc: 000bc503 lbu a0,0(s7) + 800056d0: 001b8713 addi a4,s7,1 + 800056d4: 00070613 mv a2,a4 + 800056d8: fe05079b addiw a5,a0,-32 + 800056dc: 0ff7f793 andi a5,a5,255 + 800056e0: 00f86c63 bltu a6,a5,800056f8 <_vsnprintf+0xd8> + 800056e4: 00279793 slli a5,a5,0x2 + 800056e8: 008787b3 add a5,a5,s0 + 800056ec: 0007a783 lw a5,0(a5) + 800056f0: 008787b3 add a5,a5,s0 + 800056f4: 00078067 jr a5 + 800056f8: fd05079b addiw a5,a0,-48 + 800056fc: 0ff7f793 andi a5,a5,255 + 80005700: 00900813 li a6,9 + 80005704: 0ef87c63 bgeu a6,a5,800057fc <_vsnprintf+0x1dc> + 80005708: 02a00793 li a5,42 + 8000570c: 20f50463 beq a0,a5,80005914 <_vsnprintf+0x2f4> + 80005710: 000b8613 mv a2,s7 + 80005714: 00000d93 li s11,0 + 80005718: 00070b93 mv s7,a4 + 8000571c: 02e00793 li a5,46 + 80005720: 00000c93 li s9,0 + 80005724: 12f50463 beq a0,a5,8000584c <_vsnprintf+0x22c> + 80005728: f985079b addiw a5,a0,-104 + 8000572c: 0ff7f793 andi a5,a5,255 + 80005730: 01200713 li a4,18 + 80005734: 08f76463 bltu a4,a5,800057bc <_vsnprintf+0x19c> + 80005738: 00001717 auipc a4,0x1 + 8000573c: 50c70713 addi a4,a4,1292 # 80006c44 + 80005740: 00279793 slli a5,a5,0x2 + 80005744: 00e787b3 add a5,a5,a4 + 80005748: 0007a783 lw a5,0(a5) + 8000574c: 00e787b3 add a5,a5,a4 + 80005750: 00078067 jr a5 + 80005754: 0015e593 ori a1,a1,1 + 80005758: 0005859b sext.w a1,a1 + 8000575c: 00070b93 mv s7,a4 + 80005760: f6dff06f j 800056cc <_vsnprintf+0xac> + 80005764: 0025e593 ori a1,a1,2 + 80005768: 0005859b sext.w a1,a1 + 8000576c: 00070b93 mv s7,a4 + 80005770: f5dff06f j 800056cc <_vsnprintf+0xac> + 80005774: 0045e593 ori a1,a1,4 + 80005778: 0005859b sext.w a1,a1 + 8000577c: 00070b93 mv s7,a4 + 80005780: f4dff06f j 800056cc <_vsnprintf+0xac> + 80005784: 0105e593 ori a1,a1,16 + 80005788: 0005859b sext.w a1,a1 + 8000578c: 00070b93 mv s7,a4 + 80005790: f3dff06f j 800056cc <_vsnprintf+0xac> + 80005794: 0085e593 ori a1,a1,8 + 80005798: 0005859b sext.w a1,a1 + 8000579c: 00070b93 mv s7,a4 + 800057a0: f2dff06f j 800056cc <_vsnprintf+0xac> + 800057a4: 00164503 lbu a0,1(a2) + 800057a8: 06800793 li a5,104 + 800057ac: 52f50663 beq a0,a5,80005cd8 <_vsnprintf+0x6b8> + 800057b0: 0805e593 ori a1,a1,128 + 800057b4: 0005859b sext.w a1,a1 + 800057b8: 001b8b93 addi s7,s7,1 + 800057bc: fdb5079b addiw a5,a0,-37 + 800057c0: 0ff7f793 andi a5,a5,255 + 800057c4: 05300713 li a4,83 + 800057c8: ecf76ce3 bltu a4,a5,800056a0 <_vsnprintf+0x80> + 800057cc: 00001717 auipc a4,0x1 + 800057d0: 4c470713 addi a4,a4,1220 # 80006c90 + 800057d4: 00279793 slli a5,a5,0x2 + 800057d8: 00e787b3 add a5,a5,a4 + 800057dc: 0007a783 lw a5,0(a5) + 800057e0: 00e787b3 add a5,a5,a4 + 800057e4: 00078067 jr a5 + 800057e8: 00164503 lbu a0,1(a2) + 800057ec: 1005e593 ori a1,a1,256 + 800057f0: 0005859b sext.w a1,a1 + 800057f4: 001b8b93 addi s7,s7,1 + 800057f8: fc5ff06f j 800057bc <_vsnprintf+0x19c> + 800057fc: 00000d93 li s11,0 + 80005800: 00900813 li a6,9 + 80005804: 0080006f j 8000580c <_vsnprintf+0x1ec> + 80005808: 00170713 addi a4,a4,1 + 8000580c: 002d979b slliw a5,s11,0x2 + 80005810: 01b787bb addw a5,a5,s11 + 80005814: 0017979b slliw a5,a5,0x1 + 80005818: 00a787bb addw a5,a5,a0 + 8000581c: 00074503 lbu a0,0(a4) + 80005820: 000b8893 mv a7,s7 + 80005824: fd078d9b addiw s11,a5,-48 + 80005828: fd05061b addiw a2,a0,-48 + 8000582c: 0ff67613 andi a2,a2,255 + 80005830: 00070b93 mv s7,a4 + 80005834: fcc87ae3 bgeu a6,a2,80005808 <_vsnprintf+0x1e8> + 80005838: 02e00793 li a5,46 + 8000583c: 00070613 mv a2,a4 + 80005840: 00288b93 addi s7,a7,2 + 80005844: 00000c93 li s9,0 + 80005848: eef510e3 bne a0,a5,80005728 <_vsnprintf+0x108> + 8000584c: 00164503 lbu a0,1(a2) + 80005850: 4005e593 ori a1,a1,1024 + 80005854: 00900713 li a4,9 + 80005858: fd05079b addiw a5,a0,-48 + 8000585c: 0ff7f793 andi a5,a5,255 + 80005860: 0005859b sext.w a1,a1 + 80005864: 06f77c63 bgeu a4,a5,800058dc <_vsnprintf+0x2bc> + 80005868: 02a00793 li a5,42 + 8000586c: 32f50e63 beq a0,a5,80005ba8 <_vsnprintf+0x588> + 80005870: 000b8613 mv a2,s7 + 80005874: 001b8b93 addi s7,s7,1 + 80005878: eb1ff06f j 80005728 <_vsnprintf+0x108> + 8000587c: 000d041b sext.w s0,s10 + 80005880: 018d6463 bltu s10,s8,80005888 <_vsnprintf+0x268> + 80005884: fffc0d13 addi s10,s8,-1 + 80005888: 000c0693 mv a3,s8 + 8000588c: 000d0613 mv a2,s10 + 80005890: 00048593 mv a1,s1 + 80005894: 00000513 li a0,0 + 80005898: 000900e7 jalr s2 + 8000589c: 09813083 ld ra,152(sp) + 800058a0: 00040513 mv a0,s0 + 800058a4: 09013403 ld s0,144(sp) + 800058a8: 08813483 ld s1,136(sp) + 800058ac: 08013903 ld s2,128(sp) + 800058b0: 07813983 ld s3,120(sp) + 800058b4: 07013a03 ld s4,112(sp) + 800058b8: 06813a83 ld s5,104(sp) + 800058bc: 06013b03 ld s6,96(sp) + 800058c0: 05813b83 ld s7,88(sp) + 800058c4: 05013c03 ld s8,80(sp) + 800058c8: 04813c83 ld s9,72(sp) + 800058cc: 04013d03 ld s10,64(sp) + 800058d0: 03813d83 ld s11,56(sp) + 800058d4: 0a010113 addi sp,sp,160 + 800058d8: 00008067 ret + 800058dc: 002c979b slliw a5,s9,0x2 + 800058e0: 019788bb addw a7,a5,s9 + 800058e4: 000b8813 mv a6,s7 + 800058e8: 0018989b slliw a7,a7,0x1 + 800058ec: 001b8b93 addi s7,s7,1 + 800058f0: 00a888bb addw a7,a7,a0 + 800058f4: 000bc503 lbu a0,0(s7) + 800058f8: fd088c9b addiw s9,a7,-48 + 800058fc: fd05079b addiw a5,a0,-48 + 80005900: 0ff7f793 andi a5,a5,255 + 80005904: fcf77ce3 bgeu a4,a5,800058dc <_vsnprintf+0x2bc> + 80005908: 000b8613 mv a2,s7 + 8000590c: 00280b93 addi s7,a6,2 + 80005910: e19ff06f j 80005728 <_vsnprintf+0x108> + 80005914: 0009a783 lw a5,0(s3) + 80005918: 00898993 addi s3,s3,8 + 8000591c: 00078d9b sext.w s11,a5 + 80005920: 0007c863 bltz a5,80005930 <_vsnprintf+0x310> + 80005924: 001bc503 lbu a0,1(s7) + 80005928: 002b8b93 addi s7,s7,2 + 8000592c: df1ff06f j 8000571c <_vsnprintf+0xfc> + 80005930: 0025e593 ori a1,a1,2 + 80005934: 001bc503 lbu a0,1(s7) + 80005938: 0005859b sext.w a1,a1 + 8000593c: 40f00dbb negw s11,a5 + 80005940: 002b8b93 addi s7,s7,2 + 80005944: dd9ff06f j 8000571c <_vsnprintf+0xfc> + 80005948: 07800793 li a5,120 + 8000594c: 00898a93 addi s5,s3,8 + 80005950: 56f50063 beq a0,a5,80005eb0 <_vsnprintf+0x890> + 80005954: 05800793 li a5,88 + 80005958: 28f50463 beq a0,a5,80005be0 <_vsnprintf+0x5c0> + 8000595c: 06f00793 li a5,111 + 80005960: 4af50c63 beq a0,a5,80005e18 <_vsnprintf+0x7f8> + 80005964: 06200793 li a5,98 + 80005968: 54f50063 beq a0,a5,80005ea8 <_vsnprintf+0x888> + 8000596c: fef5ff13 andi t5,a1,-17 + 80005970: 4005f793 andi a5,a1,1024 + 80005974: 06900713 li a4,105 + 80005978: 000f0f1b sext.w t5,t5 + 8000597c: 0007879b sext.w a5,a5 + 80005980: 5ae51063 bne a0,a4,80005f20 <_vsnprintf+0x900> + 80005984: 48079663 bnez a5,80005e10 <_vsnprintf+0x7f0> + 80005988: 2005f593 andi a1,a1,512 + 8000598c: 0005879b sext.w a5,a1 + 80005990: 00a00813 li a6,10 + 80005994: 42079663 bnez a5,80005dc0 <_vsnprintf+0x7a0> + 80005998: 100f7793 andi a5,t5,256 + 8000599c: 000f0613 mv a2,t5 + 800059a0: 4e079063 bnez a5,80005e80 <_vsnprintf+0x860> + 800059a4: 040f7713 andi a4,t5,64 + 800059a8: 0009a783 lw a5,0(s3) + 800059ac: 4a071a63 bnez a4,80005e60 <_vsnprintf+0x840> + 800059b0: 08067613 andi a2,a2,128 + 800059b4: 52060a63 beqz a2,80005ee8 <_vsnprintf+0x8c8> + 800059b8: 0107979b slliw a5,a5,0x10 + 800059bc: 4107d79b sraiw a5,a5,0x10 + 800059c0: 40f7d61b sraiw a2,a5,0xf + 800059c4: 00c7c733 xor a4,a5,a2 + 800059c8: 40c7073b subw a4,a4,a2 + 800059cc: 03071713 slli a4,a4,0x30 + 800059d0: 03075713 srli a4,a4,0x30 + 800059d4: 000d0613 mv a2,s10 + 800059d8: 01e13423 sd t5,8(sp) + 800059dc: 01b13023 sd s11,0(sp) + 800059e0: 000c8893 mv a7,s9 + 800059e4: 01f7d79b srliw a5,a5,0x1f + 800059e8: 000c0693 mv a3,s8 + 800059ec: 00048593 mv a1,s1 + 800059f0: 00090513 mv a0,s2 + 800059f4: 96dff0ef jal ra,80005360 <_ntoa_long> + 800059f8: 00050d13 mv s10,a0 + 800059fc: 000a8993 mv s3,s5 + 80005a00: cb5ff06f j 800056b4 <_vsnprintf+0x94> + 80005a04: 00164503 lbu a0,1(a2) + 80005a08: 06c00793 li a5,108 + 80005a0c: def510e3 bne a0,a5,800057ec <_vsnprintf+0x1cc> + 80005a10: 3005e593 ori a1,a1,768 + 80005a14: 00264503 lbu a0,2(a2) + 80005a18: 0005859b sext.w a1,a1 + 80005a1c: 00360b93 addi s7,a2,3 + 80005a20: d9dff06f j 800057bc <_vsnprintf+0x19c> + 80005a24: 00898793 addi a5,s3,8 + 80005a28: 001d0813 addi a6,s10,1 + 80005a2c: 0025f593 andi a1,a1,2 + 80005a30: 02f13023 sd a5,32(sp) + 80005a34: 00080b13 mv s6,a6 + 80005a38: 32058263 beqz a1,80005d5c <_vsnprintf+0x73c> + 80005a3c: 0009c503 lbu a0,0(s3) + 80005a40: 000c0693 mv a3,s8 + 80005a44: 000d0613 mv a2,s10 + 80005a48: 00048593 mv a1,s1 + 80005a4c: 000900e7 jalr s2 + 80005a50: 00100793 li a5,1 + 80005a54: 43b7f063 bgeu a5,s11,80005e74 <_vsnprintf+0x854> + 80005a58: ffed879b addiw a5,s11,-2 + 80005a5c: 02079a93 slli s5,a5,0x20 + 80005a60: 020ada93 srli s5,s5,0x20 + 80005a64: 002d0d13 addi s10,s10,2 + 80005a68: 015d0cb3 add s9,s10,s5 + 80005a6c: 000b0613 mv a2,s6 + 80005a70: 000c0693 mv a3,s8 + 80005a74: 001b0b13 addi s6,s6,1 + 80005a78: 00048593 mv a1,s1 + 80005a7c: 02000513 li a0,32 + 80005a80: 000900e7 jalr s2 + 80005a84: ff6c94e3 bne s9,s6,80005a6c <_vsnprintf+0x44c> + 80005a88: 02013983 ld s3,32(sp) + 80005a8c: 015d0d33 add s10,s10,s5 + 80005a90: c25ff06f j 800056b4 <_vsnprintf+0x94> + 80005a94: 000d0613 mv a2,s10 + 80005a98: 000c0693 mv a3,s8 + 80005a9c: 00048593 mv a1,s1 + 80005aa0: 02500513 li a0,37 + 80005aa4: 001d0d13 addi s10,s10,1 + 80005aa8: 000900e7 jalr s2 + 80005aac: c09ff06f j 800056b4 <_vsnprintf+0x94> + 80005ab0: 0009ba83 ld s5,0(s3) + 80005ab4: 00898793 addi a5,s3,8 + 80005ab8: 02f13023 sd a5,32(sp) + 80005abc: 000ac503 lbu a0,0(s5) + 80005ac0: 100c9663 bnez s9,80005bcc <_vsnprintf+0x5ac> + 80005ac4: ffe00793 li a5,-2 + 80005ac8: 42050863 beqz a0,80005ef8 <_vsnprintf+0x8d8> + 80005acc: 00178693 addi a3,a5,1 + 80005ad0: 00da8633 add a2,s5,a3 + 80005ad4: 000a8793 mv a5,s5 + 80005ad8: 0080006f j 80005ae0 <_vsnprintf+0x4c0> + 80005adc: 1ec78863 beq a5,a2,80005ccc <_vsnprintf+0x6ac> + 80005ae0: 0017c703 lbu a4,1(a5) + 80005ae4: 00178793 addi a5,a5,1 + 80005ae8: fe071ae3 bnez a4,80005adc <_vsnprintf+0x4bc> + 80005aec: 415787bb subw a5,a5,s5 + 80005af0: 00f13823 sd a5,16(sp) + 80005af4: 4005f793 andi a5,a1,1024 + 80005af8: 0007899b sext.w s3,a5 + 80005afc: 00078c63 beqz a5,80005b14 <_vsnprintf+0x4f4> + 80005b00: 01013703 ld a4,16(sp) + 80005b04: 000c879b sext.w a5,s9 + 80005b08: 01977463 bgeu a4,s9,80005b10 <_vsnprintf+0x4f0> + 80005b0c: 0007079b sext.w a5,a4 + 80005b10: 00f13823 sd a5,16(sp) + 80005b14: 0025f593 andi a1,a1,2 + 80005b18: 0005879b sext.w a5,a1 + 80005b1c: 02f13423 sd a5,40(sp) + 80005b20: 1c058a63 beqz a1,80005cf4 <_vsnprintf+0x6d4> + 80005b24: 14050863 beqz a0,80005c74 <_vsnprintf+0x654> + 80005b28: 000d0613 mv a2,s10 + 80005b2c: 00098863 beqz s3,80005b3c <_vsnprintf+0x51c> + 80005b30: fffc879b addiw a5,s9,-1 + 80005b34: 120c8863 beqz s9,80005c64 <_vsnprintf+0x644> + 80005b38: 00078c93 mv s9,a5 + 80005b3c: 000c0693 mv a3,s8 + 80005b40: 00048593 mv a1,s1 + 80005b44: 00160b13 addi s6,a2,1 + 80005b48: 000900e7 jalr s2 + 80005b4c: 41ab07b3 sub a5,s6,s10 + 80005b50: 00fa87b3 add a5,s5,a5 + 80005b54: 0007c503 lbu a0,0(a5) + 80005b58: 10050863 beqz a0,80005c68 <_vsnprintf+0x648> + 80005b5c: 000b0613 mv a2,s6 + 80005b60: fcdff06f j 80005b2c <_vsnprintf+0x50c> + 80005b64: 0009b703 ld a4,0(s3) + 80005b68: 0215e593 ori a1,a1,33 + 80005b6c: 0005859b sext.w a1,a1 + 80005b70: 01000793 li a5,16 + 80005b74: 000d0613 mv a2,s10 + 80005b78: 00b13423 sd a1,8(sp) + 80005b7c: 00f13023 sd a5,0(sp) + 80005b80: 000c8893 mv a7,s9 + 80005b84: 01000813 li a6,16 + 80005b88: 00000793 li a5,0 + 80005b8c: 000c0693 mv a3,s8 + 80005b90: 00048593 mv a1,s1 + 80005b94: 00090513 mv a0,s2 + 80005b98: 929ff0ef jal ra,800054c0 <_ntoa_long_long> + 80005b9c: 00898993 addi s3,s3,8 + 80005ba0: 00050d13 mv s10,a0 + 80005ba4: b11ff06f j 800056b4 <_vsnprintf+0x94> + 80005ba8: 0009a883 lw a7,0(s3) + 80005bac: 00264503 lbu a0,2(a2) + 80005bb0: 00360b93 addi s7,a2,3 + 80005bb4: fff8c793 not a5,a7 + 80005bb8: 43f7d793 srai a5,a5,0x3f + 80005bbc: 00f8fcb3 and s9,a7,a5 + 80005bc0: 00898993 addi s3,s3,8 + 80005bc4: 00260613 addi a2,a2,2 + 80005bc8: b61ff06f j 80005728 <_vsnprintf+0x108> + 80005bcc: 020c9793 slli a5,s9,0x20 + 80005bd0: 0207d793 srli a5,a5,0x20 + 80005bd4: 32050263 beqz a0,80005ef8 <_vsnprintf+0x8d8> + 80005bd8: fff78793 addi a5,a5,-1 + 80005bdc: ef1ff06f j 80005acc <_vsnprintf+0x4ac> + 80005be0: ff35ff13 andi t5,a1,-13 + 80005be4: 000f0f1b sext.w t5,t5 + 80005be8: 4005f793 andi a5,a1,1024 + 80005bec: 020f6f13 ori t5,t5,32 + 80005bf0: 20078863 beqz a5,80005e00 <_vsnprintf+0x7e0> + 80005bf4: 01000813 li a6,16 + 80005bf8: ffef7f13 andi t5,t5,-2 + 80005bfc: 000f0f1b sext.w t5,t5 + 80005c00: 200f7793 andi a5,t5,512 + 80005c04: 06900713 li a4,105 + 80005c08: 0007879b sext.w a5,a5 + 80005c0c: d8e504e3 beq a0,a4,80005994 <_vsnprintf+0x374> + 80005c10: 06400713 li a4,100 + 80005c14: d8e500e3 beq a0,a4,80005994 <_vsnprintf+0x374> + 80005c18: 22079663 bnez a5,80005e44 <_vsnprintf+0x824> + 80005c1c: 100f7793 andi a5,t5,256 + 80005c20: 000f0713 mv a4,t5 + 80005c24: 2a079463 bnez a5,80005ecc <_vsnprintf+0x8ac> + 80005c28: 040f7793 andi a5,t5,64 + 80005c2c: 24079063 bnez a5,80005e6c <_vsnprintf+0x84c> + 80005c30: 08077713 andi a4,a4,128 + 80005c34: 2c070663 beqz a4,80005f00 <_vsnprintf+0x8e0> + 80005c38: 0009a703 lw a4,0(s3) + 80005c3c: 01813783 ld a5,24(sp) + 80005c40: 00e7f733 and a4,a5,a4 + 80005c44: 02071713 slli a4,a4,0x20 + 80005c48: 000d0613 mv a2,s10 + 80005c4c: 01e13423 sd t5,8(sp) + 80005c50: 01b13023 sd s11,0(sp) + 80005c54: 000c8893 mv a7,s9 + 80005c58: 00000793 li a5,0 + 80005c5c: 02075713 srli a4,a4,0x20 + 80005c60: d89ff06f j 800059e8 <_vsnprintf+0x3c8> + 80005c64: 00060b13 mv s6,a2 + 80005c68: 02813783 ld a5,40(sp) + 80005c6c: 04078a63 beqz a5,80005cc0 <_vsnprintf+0x6a0> + 80005c70: 000b0d13 mv s10,s6 + 80005c74: 01013703 ld a4,16(sp) + 80005c78: 0db77e63 bgeu a4,s11,80005d54 <_vsnprintf+0x734> + 80005c7c: fffd879b addiw a5,s11,-1 + 80005c80: 40e7873b subw a4,a5,a4 + 80005c84: 02071713 slli a4,a4,0x20 + 80005c88: 02075713 srli a4,a4,0x20 + 80005c8c: 001d0813 addi a6,s10,1 + 80005c90: 01070b33 add s6,a4,a6 + 80005c94: 0080006f j 80005c9c <_vsnprintf+0x67c> + 80005c98: 00180813 addi a6,a6,1 + 80005c9c: 000d0613 mv a2,s10 + 80005ca0: 01013823 sd a6,16(sp) + 80005ca4: 000c0693 mv a3,s8 + 80005ca8: 00048593 mv a1,s1 + 80005cac: 02000513 li a0,32 + 80005cb0: 00080d13 mv s10,a6 + 80005cb4: 000900e7 jalr s2 + 80005cb8: 01013803 ld a6,16(sp) + 80005cbc: fd0b1ee3 bne s6,a6,80005c98 <_vsnprintf+0x678> + 80005cc0: 02013983 ld s3,32(sp) + 80005cc4: 000b0d13 mv s10,s6 + 80005cc8: 9edff06f j 800056b4 <_vsnprintf+0x94> + 80005ccc: 0006879b sext.w a5,a3 + 80005cd0: 00f13823 sd a5,16(sp) + 80005cd4: e21ff06f j 80005af4 <_vsnprintf+0x4d4> + 80005cd8: 0c05e593 ori a1,a1,192 + 80005cdc: 00264503 lbu a0,2(a2) + 80005ce0: 0005859b sext.w a1,a1 + 80005ce4: 00360b93 addi s7,a2,3 + 80005ce8: ad5ff06f j 800057bc <_vsnprintf+0x19c> + 80005cec: 00000413 li s0,0 + 80005cf0: b91ff06f j 80005880 <_vsnprintf+0x260> + 80005cf4: 01013703 ld a4,16(sp) + 80005cf8: 0017079b addiw a5,a4,1 + 80005cfc: 21b77c63 bgeu a4,s11,80005f14 <_vsnprintf+0x8f4> + 80005d00: fffd879b addiw a5,s11,-1 + 80005d04: 40e787bb subw a5,a5,a4 + 80005d08: 02079793 slli a5,a5,0x20 + 80005d0c: 0207d793 srli a5,a5,0x20 + 80005d10: 001d0813 addi a6,s10,1 + 80005d14: 01078b33 add s6,a5,a6 + 80005d18: 00c0006f j 80005d24 <_vsnprintf+0x704> + 80005d1c: 01013803 ld a6,16(sp) + 80005d20: 00180813 addi a6,a6,1 + 80005d24: 000d0613 mv a2,s10 + 80005d28: 000c0693 mv a3,s8 + 80005d2c: 00080d13 mv s10,a6 + 80005d30: 01013823 sd a6,16(sp) + 80005d34: 00048593 mv a1,s1 + 80005d38: 02000513 li a0,32 + 80005d3c: 000900e7 jalr s2 + 80005d40: fd6d1ee3 bne s10,s6,80005d1c <_vsnprintf+0x6fc> + 80005d44: 000ac503 lbu a0,0(s5) + 80005d48: 001d879b addiw a5,s11,1 + 80005d4c: 00f13823 sd a5,16(sp) + 80005d50: dc051ce3 bnez a0,80005b28 <_vsnprintf+0x508> + 80005d54: 000d0b13 mv s6,s10 + 80005d58: f69ff06f j 80005cc0 <_vsnprintf+0x6a0> + 80005d5c: 00100793 li a5,1 + 80005d60: 1bb7f463 bgeu a5,s11,80005f08 <_vsnprintf+0x8e8> + 80005d64: ffed879b addiw a5,s11,-2 + 80005d68: 02079a93 slli s5,a5,0x20 + 80005d6c: 020ada93 srli s5,s5,0x20 + 80005d70: 010a8ab3 add s5,s5,a6 + 80005d74: 00c0006f j 80005d80 <_vsnprintf+0x760> + 80005d78: 01013803 ld a6,16(sp) + 80005d7c: 00180813 addi a6,a6,1 + 80005d80: 000d0613 mv a2,s10 + 80005d84: 000c0693 mv a3,s8 + 80005d88: 00080d13 mv s10,a6 + 80005d8c: 01013823 sd a6,16(sp) + 80005d90: 00048593 mv a1,s1 + 80005d94: 02000513 li a0,32 + 80005d98: 000900e7 jalr s2 + 80005d9c: fdaa9ee3 bne s5,s10,80005d78 <_vsnprintf+0x758> + 80005da0: 001a8d13 addi s10,s5,1 + 80005da4: 0009c503 lbu a0,0(s3) + 80005da8: 000c0693 mv a3,s8 + 80005dac: 000a8613 mv a2,s5 + 80005db0: 00048593 mv a1,s1 + 80005db4: 000900e7 jalr s2 + 80005db8: 02013983 ld s3,32(sp) + 80005dbc: 8f9ff06f j 800056b4 <_vsnprintf+0x94> + 80005dc0: 0009b783 ld a5,0(s3) + 80005dc4: 000d0613 mv a2,s10 + 80005dc8: 01e13423 sd t5,8(sp) + 80005dcc: 43f7d713 srai a4,a5,0x3f + 80005dd0: 00f745b3 xor a1,a4,a5 + 80005dd4: 01b13023 sd s11,0(sp) + 80005dd8: 000c8893 mv a7,s9 + 80005ddc: 03f7d793 srli a5,a5,0x3f + 80005de0: 40e58733 sub a4,a1,a4 + 80005de4: 000c0693 mv a3,s8 + 80005de8: 00048593 mv a1,s1 + 80005dec: 00090513 mv a0,s2 + 80005df0: ed0ff0ef jal ra,800054c0 <_ntoa_long_long> + 80005df4: 00050d13 mv s10,a0 + 80005df8: 000a8993 mv s3,s5 + 80005dfc: 8b9ff06f j 800056b4 <_vsnprintf+0x94> + 80005e00: 2005f793 andi a5,a1,512 + 80005e04: 0007879b sext.w a5,a5 + 80005e08: 01000813 li a6,16 + 80005e0c: e0dff06f j 80005c18 <_vsnprintf+0x5f8> + 80005e10: 00a00813 li a6,10 + 80005e14: de5ff06f j 80005bf8 <_vsnprintf+0x5d8> + 80005e18: 00800813 li a6,8 + 80005e1c: 00058f13 mv t5,a1 + 80005e20: 400f7713 andi a4,t5,1024 + 80005e24: 06400613 li a2,100 + 80005e28: 000f0793 mv a5,t5 + 80005e2c: 0007071b sext.w a4,a4 + 80005e30: 0ec51c63 bne a0,a2,80005f28 <_vsnprintf+0x908> + 80005e34: dc0712e3 bnez a4,80005bf8 <_vsnprintf+0x5d8> + 80005e38: 2007f793 andi a5,a5,512 + 80005e3c: 0007879b sext.w a5,a5 + 80005e40: b55ff06f j 80005994 <_vsnprintf+0x374> + 80005e44: 0009b703 ld a4,0(s3) + 80005e48: 000d0613 mv a2,s10 + 80005e4c: 01e13423 sd t5,8(sp) + 80005e50: 01b13023 sd s11,0(sp) + 80005e54: 000c8893 mv a7,s9 + 80005e58: 00000793 li a5,0 + 80005e5c: f89ff06f j 80005de4 <_vsnprintf+0x7c4> + 80005e60: 0ff7f793 andi a5,a5,255 + 80005e64: 00078713 mv a4,a5 + 80005e68: b6dff06f j 800059d4 <_vsnprintf+0x3b4> + 80005e6c: 0009c703 lbu a4,0(s3) + 80005e70: dd5ff06f j 80005c44 <_vsnprintf+0x624> + 80005e74: 02013983 ld s3,32(sp) + 80005e78: 000b0d13 mv s10,s6 + 80005e7c: 839ff06f j 800056b4 <_vsnprintf+0x94> + 80005e80: 0009b783 ld a5,0(s3) + 80005e84: 000d0613 mv a2,s10 + 80005e88: 01e13423 sd t5,8(sp) + 80005e8c: 43f7d713 srai a4,a5,0x3f + 80005e90: 00f745b3 xor a1,a4,a5 + 80005e94: 01b13023 sd s11,0(sp) + 80005e98: 000c8893 mv a7,s9 + 80005e9c: 03f7d793 srli a5,a5,0x3f + 80005ea0: 40e58733 sub a4,a1,a4 + 80005ea4: b45ff06f j 800059e8 <_vsnprintf+0x3c8> + 80005ea8: 00200813 li a6,2 + 80005eac: f71ff06f j 80005e1c <_vsnprintf+0x7fc> + 80005eb0: 4005f713 andi a4,a1,1024 + 80005eb4: 0007071b sext.w a4,a4 + 80005eb8: 01000813 li a6,16 + 80005ebc: ff35f593 andi a1,a1,-13 + 80005ec0: 00058f1b sext.w t5,a1 + 80005ec4: d2071ae3 bnez a4,80005bf8 <_vsnprintf+0x5d8> + 80005ec8: d39ff06f j 80005c00 <_vsnprintf+0x5e0> + 80005ecc: 0009b703 ld a4,0(s3) + 80005ed0: 000d0613 mv a2,s10 + 80005ed4: 01e13423 sd t5,8(sp) + 80005ed8: 01b13023 sd s11,0(sp) + 80005edc: 000c8893 mv a7,s9 + 80005ee0: 00000793 li a5,0 + 80005ee4: b05ff06f j 800059e8 <_vsnprintf+0x3c8> + 80005ee8: 41f7d61b sraiw a2,a5,0x1f + 80005eec: 00c7c733 xor a4,a5,a2 + 80005ef0: 40c7073b subw a4,a4,a2 + 80005ef4: ae1ff06f j 800059d4 <_vsnprintf+0x3b4> + 80005ef8: 00013823 sd zero,16(sp) + 80005efc: bf9ff06f j 80005af4 <_vsnprintf+0x4d4> + 80005f00: 0009a703 lw a4,0(s3) + 80005f04: d41ff06f j 80005c44 <_vsnprintf+0x624> + 80005f08: 000d0a93 mv s5,s10 + 80005f0c: 00080d13 mv s10,a6 + 80005f10: e95ff06f j 80005da4 <_vsnprintf+0x784> + 80005f14: 00f13823 sd a5,16(sp) + 80005f18: c00518e3 bnez a0,80005b28 <_vsnprintf+0x508> + 80005f1c: e39ff06f j 80005d54 <_vsnprintf+0x734> + 80005f20: 00a00813 li a6,10 + 80005f24: efdff06f j 80005e20 <_vsnprintf+0x800> + 80005f28: 000f0593 mv a1,t5 + 80005f2c: f91ff06f j 80005ebc <_vsnprintf+0x89c> + +0000000080005f30 <_out_char>: + 80005f30: 00051463 bnez a0,80005f38 <_out_char+0x8> + 80005f34: 00008067 ret + 80005f38: 951fe06f j 80004888 + +0000000080005f3c : + 80005f3c: fa010113 addi sp,sp,-96 + 80005f40: 02810313 addi t1,sp,40 + 80005f44: 02b13423 sd a1,40(sp) + 80005f48: 02c13823 sd a2,48(sp) + 80005f4c: 02d13c23 sd a3,56(sp) + 80005f50: 04e13023 sd a4,64(sp) + 80005f54: 00050693 mv a3,a0 + 80005f58: 00010593 mv a1,sp + 80005f5c: 00030713 mv a4,t1 + 80005f60: fff00613 li a2,-1 + 80005f64: 00000517 auipc a0,0x0 + 80005f68: fcc50513 addi a0,a0,-52 # 80005f30 <_out_char> + 80005f6c: 00113c23 sd ra,24(sp) + 80005f70: 04f13423 sd a5,72(sp) + 80005f74: 05013823 sd a6,80(sp) + 80005f78: 05113c23 sd a7,88(sp) + 80005f7c: 00613423 sd t1,8(sp) + 80005f80: ea0ff0ef jal ra,80005620 <_vsnprintf> + 80005f84: 01813083 ld ra,24(sp) + 80005f88: 06010113 addi sp,sp,96 + 80005f8c: 00008067 ret + +0000000080005f90 : + 80005f90: fb010113 addi sp,sp,-80 + 80005f94: 02010313 addi t1,sp,32 + 80005f98: 02c13023 sd a2,32(sp) + 80005f9c: 02d13423 sd a3,40(sp) + 80005fa0: 02e13823 sd a4,48(sp) + 80005fa4: 00058693 mv a3,a1 + 80005fa8: 00030713 mv a4,t1 + 80005fac: 00050593 mv a1,a0 + 80005fb0: fff00613 li a2,-1 + 80005fb4: fffff517 auipc a0,0xfffff + 80005fb8: f0050513 addi a0,a0,-256 # 80004eb4 <_out_buffer> + 80005fbc: 00113c23 sd ra,24(sp) + 80005fc0: 02f13c23 sd a5,56(sp) + 80005fc4: 05013023 sd a6,64(sp) + 80005fc8: 05113423 sd a7,72(sp) + 80005fcc: 00613423 sd t1,8(sp) + 80005fd0: e50ff0ef jal ra,80005620 <_vsnprintf> + 80005fd4: 01813083 ld ra,24(sp) + 80005fd8: 05010113 addi sp,sp,80 + 80005fdc: 00008067 ret + +0000000080005fe0 : + 80005fe0: 00700713 li a4,7 + 80005fe4: 00050793 mv a5,a0 + 80005fe8: 0ac77a63 bgeu a4,a2,8000609c + 80005fec: 0ff5f893 andi a7,a1,255 + 80005ff0: 00889693 slli a3,a7,0x8 + 80005ff4: 0116e6b3 or a3,a3,a7 + 80005ff8: 01069713 slli a4,a3,0x10 + 80005ffc: 00d766b3 or a3,a4,a3 + 80006000: 02069713 slli a4,a3,0x20 + 80006004: 00757813 andi a6,a0,7 + 80006008: 00d76733 or a4,a4,a3 + 8000600c: 0a080663 beqz a6,800060b8 + 80006010: 00c50633 add a2,a0,a2 + 80006014: 01178023 sb a7,0(a5) + 80006018: 00178793 addi a5,a5,1 + 8000601c: 0077f813 andi a6,a5,7 + 80006020: 40f606b3 sub a3,a2,a5 + 80006024: fe0818e3 bnez a6,80006014 + 80006028: 0066d813 srli a6,a3,0x6 + 8000602c: 04080063 beqz a6,8000606c + 80006030: 00681613 slli a2,a6,0x6 + 80006034: 00078893 mv a7,a5 + 80006038: 00f60633 add a2,a2,a5 + 8000603c: 00e7b023 sd a4,0(a5) + 80006040: 00e7b423 sd a4,8(a5) + 80006044: 00e7b823 sd a4,16(a5) + 80006048: 00e7bc23 sd a4,24(a5) + 8000604c: 02e7b023 sd a4,32(a5) + 80006050: 02e7b423 sd a4,40(a5) + 80006054: 02e7b823 sd a4,48(a5) + 80006058: 02e7bc23 sd a4,56(a5) + 8000605c: 04078793 addi a5,a5,64 + 80006060: fcf61ee3 bne a2,a5,8000603c + 80006064: 00681793 slli a5,a6,0x6 + 80006068: 011787b3 add a5,a5,a7 + 8000606c: 0036d813 srli a6,a3,0x3 + 80006070: 00787813 andi a6,a6,7 + 80006074: 02080263 beqz a6,80006098 + 80006078: 00381613 slli a2,a6,0x3 + 8000607c: 00078893 mv a7,a5 + 80006080: 00f60633 add a2,a2,a5 + 80006084: 00e7b023 sd a4,0(a5) + 80006088: 00878793 addi a5,a5,8 + 8000608c: fef61ce3 bne a2,a5,80006084 + 80006090: 00381793 slli a5,a6,0x3 + 80006094: 011787b3 add a5,a5,a7 + 80006098: 0076f613 andi a2,a3,7 + 8000609c: 0ff5f593 andi a1,a1,255 + 800060a0: 00c78733 add a4,a5,a2 + 800060a4: 00060863 beqz a2,800060b4 + 800060a8: 00b78023 sb a1,0(a5) + 800060ac: 00178793 addi a5,a5,1 + 800060b0: fef71ce3 bne a4,a5,800060a8 + 800060b4: 00008067 ret + 800060b8: 00060693 mv a3,a2 + 800060bc: f6dff06f j 80006028 + +00000000800060c0 : + 800060c0: 1a050e63 beqz a0,8000627c + 800060c4: fd010113 addi sp,sp,-48 + 800060c8: 02813023 sd s0,32(sp) + 800060cc: 00913c23 sd s1,24(sp) + 800060d0: 01f57793 andi a5,a0,31 + 800060d4: 02113423 sd ra,40(sp) + 800060d8: 01213823 sd s2,16(sp) + 800060dc: 01313423 sd s3,8(sp) + 800060e0: 01413023 sd s4,0(sp) + 800060e4: 00050493 mv s1,a0 + 800060e8: 00050413 mv s0,a0 + 800060ec: 00000513 li a0,0 + 800060f0: 14079a63 bnez a5,80006244 + 800060f4: 27f00713 li a4,639 + 800060f8: 00058913 mv s2,a1 + 800060fc: 00078513 mv a0,a5 + 80006100: 14b77263 bgeu a4,a1,80006244 + 80006104: 0074f513 andi a0,s1,7 + 80006108: 00153513 seqz a0,a0 + 8000610c: 00060a13 mv s4,a2 + 80006110: 00068993 mv s3,a3 + 80006114: f8cfe0ef jal ra,800048a0 <_assert> + 80006118: 20048793 addi a5,s1,512 + 8000611c: 2004b023 sd zero,512(s1) + 80006120: 2144b423 sd s4,520(s1) + 80006124: 2134b823 sd s3,528(s1) + 80006128: 00043023 sd zero,0(s0) + 8000612c: 00840413 addi s0,s0,8 + 80006130: fe879ce3 bne a5,s0,80006128 + 80006134: fff00793 li a5,-1 + 80006138: dc090413 addi s0,s2,-576 + 8000613c: 03f79793 slli a5,a5,0x3f + 80006140: 1287f863 bgeu a5,s0,80006270 + 80006144: 00078413 mv s0,a5 + 80006148: 00100513 li a0,1 + 8000614c: f54fe0ef jal ra,800048a0 <_assert> + 80006150: f8300793 li a5,-125 + 80006154: 0017d793 srli a5,a5,0x1 + 80006158: fc040513 addi a0,s0,-64 + 8000615c: 00f53533 sltu a0,a0,a5 + 80006160: f40fe0ef jal ra,800048a0 <_assert> + 80006164: 01f4f513 andi a0,s1,31 + 80006168: 00153513 seqz a0,a0 + 8000616c: f34fe0ef jal ra,800048a0 <_assert> + 80006170: 00100513 li a0,1 + 80006174: 2404b023 sd zero,576(s1) + 80006178: 2404b423 sd zero,584(s1) + 8000617c: 2484b823 sd s0,592(s1) + 80006180: 24048c23 sb zero,600(s1) + 80006184: 2604b023 sd zero,608(s1) + 80006188: 2604b423 sd zero,616(s1) + 8000618c: f14fe0ef jal ra,800048a0 <_assert> + 80006190: 00100513 li a0,1 + 80006194: f0cfe0ef jal ra,800048a0 <_assert> + 80006198: 2504b503 ld a0,592(s1) + 8000619c: 24048a13 addi s4,s1,576 + 800061a0: 04053513 sltiu a0,a0,64 + 800061a4: 00154513 xori a0,a0,1 + 800061a8: 00157513 andi a0,a0,1 + 800061ac: ef4fe0ef jal ra,800048a0 <_assert> + 800061b0: 2504b503 ld a0,592(s1) + 800061b4: 03f57513 andi a0,a0,63 + 800061b8: 00153513 seqz a0,a0 + 800061bc: ee4fe0ef jal ra,800048a0 <_assert> + 800061c0: 2504b703 ld a4,592(s1) + 800061c4: 00100793 li a5,1 + 800061c8: 00675713 srli a4,a4,0x6 + 800061cc: 0ae7fc63 bgeu a5,a4,80006284 + 800061d0: 00000793 li a5,0 + 800061d4: 00100693 li a3,1 + 800061d8: 0017879b addiw a5,a5,1 + 800061dc: 00175713 srli a4,a4,0x1 + 800061e0: 0ff7f793 andi a5,a5,255 + 800061e4: fed71ae3 bne a4,a3,800061d8 + 800061e8: 00078993 mv s3,a5 + 800061ec: 0407b513 sltiu a0,a5,64 + 800061f0: 00f71933 sll s2,a4,a5 + 800061f4: eacfe0ef jal ra,800048a0 <_assert> + 800061f8: 00399793 slli a5,s3,0x3 + 800061fc: 00f487b3 add a5,s1,a5 + 80006200: 0007b703 ld a4,0(a5) + 80006204: 2604b423 sd zero,616(s1) + 80006208: 26e4b023 sd a4,608(s1) + 8000620c: 00070463 beqz a4,80006214 + 80006210: 03473423 sd s4,40(a4) + 80006214: 0147b023 sd s4,0(a5) + 80006218: 2004b503 ld a0,512(s1) + 8000621c: 00a96533 or a0,s2,a0 + 80006220: 20a4b023 sd a0,512(s1) + 80006224: 00a03533 snez a0,a0 + 80006228: e78fe0ef jal ra,800048a0 <_assert> + 8000622c: 00048513 mv a0,s1 + 80006230: 2084bc23 sd s0,536(s1) + 80006234: 2204b023 sd zero,544(s1) + 80006238: 2204b423 sd zero,552(s1) + 8000623c: 2204b823 sd zero,560(s1) + 80006240: 2204bc23 sd zero,568(s1) + 80006244: 02813083 ld ra,40(sp) + 80006248: 02013403 ld s0,32(sp) + 8000624c: 01813483 ld s1,24(sp) + 80006250: 01013903 ld s2,16(sp) + 80006254: 00813983 ld s3,8(sp) + 80006258: 00013a03 ld s4,0(sp) + 8000625c: 03010113 addi sp,sp,48 + 80006260: 00008067 ret + 80006264: 00100513 li a0,1 + 80006268: fff40413 addi s0,s0,-1 + 8000626c: e34fe0ef jal ra,800048a0 <_assert> + 80006270: 03f47793 andi a5,s0,63 + 80006274: fe0798e3 bnez a5,80006264 + 80006278: ed1ff06f j 80006148 + 8000627c: 00000513 li a0,0 + 80006280: 00008067 ret + 80006284: 00100913 li s2,1 + 80006288: 00000993 li s3,0 + 8000628c: 00100513 li a0,1 + 80006290: f65ff06f j 800061f4 diff --git a/bin/custom-output/benchmark/microbench/microbench-train.elf b/bin/custom-output/benchmark/microbench/microbench-train.elf new file mode 100755 index 0000000000000000000000000000000000000000..c84a36cae08ad2c6faed0e11d84972925fb38e9e GIT binary patch literal 256912 zcmeFa33wD$x<7nQS65eeXQv!cxyyxA|dy1dr-7(6>Ig9;l>@2h13Mnl>fAC8_A&I*ke*d1?-*aNg42PBU&)lqP|4h*z%KQLKYJfXxhBlfjk&rpM;%R<27MevhIJou+7m9#N35AYayo zz94IZUX%5BIqTAVFdo2djBbmi<@Ge@vG#6l&a1|DF_tf9o+W6m70LI zvzP}5ujJB@c$+G_S!90gh59jL?h5XrI(AmR4DE;Vm!ck1m1Rs_7K&;+>sVc(1M41} zYqBg=q5QBSNy-kfI;M2U8zWI(a0ulo+`l{{m-2Oo+yiT3!7i_J{g~u@DVuY3nTP3# zN_P{cd20QbwRzf5j`A+MROLpyF0`d^wLBH$uVreNS>r^KYjQ~Ew zksia(bNbUtCu_V(81D@d+N3qrKdDQW3b>8v062SpSeC8%RwrP-L#s+S^UTCLIz}ae zzJ6r3A)}2kL)4N4R^QO`9ph3RIT_;}B=E3d^IMmvkMV=1+@L8pXvzhea)G9t(hb}h zyrD>ua<~%ADRM}|xg$8dNS1Eoa`46?yDFn^&f|#QtoeO~@elCKK)Sv7)Pjbi2UWnk zzG3rkq#>NQ_gVcd#@~-%hB9AS<91A>Mo zh(&s|v=I#;e>{~Tn$b_y*#K|Q8EArYZt*L(HIGB){NxWYzit-48lXDHxB-VYwM!RC z9oI#oHnm?=d_{H3AH{e}OaCfWI9S-@0bi~IUnc%c_k8OfqPxYn>sWS02JWzDG#7H{9Gfq zM|?0_2Cq!VIyOWrL)l!~rZCkdGu?jNt;RJ(7qCJe%y!w-&S}hF9AZ+M9lTBSy_^NNkHmVTekRs+LprMr)w19Yg@qLli>$3}m39=fV8uSn)y4KG%>lI( zJZkI(=5@G<4jYa9&XAM&Eb_pXbHN?^z#CmW$Nh3(Pw5V(?f8&YDlJT^s9}5D<9Lo- z5zuy2ut;ZjGw?(LT}q%!8|cyoy5yis4w?l1xEbh^U}G0}An;7d3RYl_oL>NJWWpa0 z{P3#Fbv58-*L>%JyU*GIGYRmN08a_90}LPGfGJ&e93 zy(h2DBz!TT52?@fh3o_Fj9r@`y-xF<`mWkV7CcxTC)>b><($w;?gd|^`l=K7&?S?3 z<9mSaWv7%$IAe!AEapaPKC3JRFW9nyY1^>Qzi@DEhXZnE6b}xu+k$<-UubN^M|>V0 z>;oKAb}?^hSElvehqNwS${30EM*-ie(2l~jUzDRQ@E_n_5V)wOW}uJ#$ZN*?NER;j zpzepL+rlD&O-;s%?krpkxx8=PS$*Q#ZpL%hGPOG{%+bIV6m#tPra8yL5n_&6YnRdd z)UN#)!9ePddB)~ff%#Qoe!Du(?@^3v0~d3|{3_+~&=c%7X?w@{RWONYNO5qlqYGex z`EA+Gq#YgSSB`d;p`E`oKlCl;_X~4=z@MF$k2`tp9_8m^ZPYTrr;iIXm&wBM@nUU) zfF*Pi=qtdD4WpRfQ3E((O?uDdS{l|T17i<0G3YxOJJC5{>o|;Y?qE{-NWeLdhh>bt z_v=WjU_qoA<#~d3wJozScC1fq?BK=5dgv66UFgGH8!zZZ>wO$`o3S1}z65Q{plunn zZ3k`JLE92&TLMknK;JgVTrLfVemlH~LFN)oI|P5`{H&H$6z>7OOPQf#q}xe@ijR7G zLN^>@w_|=%FuT|$VV=-sq1UFwLx**1Lwm(R$Bl!I8wdRs>5o9)ErP!LEcD$Mpzpq> zcpW`~lh-jV?Ksymutr&*F~gYzJO{qG8=_Js=w<9Nn^$QObasixN`cqVr!)qc=17Iy zt7+4=0Dm)!Nf&3v>KHE60Uip*jr2sMCovQMSq*R@k%iZwf8exVsYV&_Q1=8y8iq9+ zWVcn8)i71fXMSl8lQM3xXy-VqT)v+L-*z#5t<5g=4YHv2j%dT^G=TX_Ygpye6fJSy7pCSHv-d0X@sNuKbnvHC6+dG5UyDRUp{pJdV~$Q0%n zDrI2q6ZhJJL+z3ZnW$p(Q_>uequ?=+bJ~{Kc(*g7Y&46EoYhA4bw~YB;G6{g2Xm@n z!D}(6(n zxztZ#5y#~7Mj6HnzPEq{Y%~V7M?dC|4QSe+XqUj$j6Ojpq)`;S}&bA9R?? zjGqF(OD6z^4i@?8{#NOl5DR8NhB-bCsLKJf505bKawpQzf8nlv5$3u8{FEw7$Ftxo zs8criyefgWxXk{ECmNgjvC5Sjc<>eUUpo1kN@^edOPHsz;SSK_pCF4zF|UmN4eEcH z*?*_%*5FH};4%B5L%b9)NXC!d%EB%Qw2S`TZ}g57qW{6@zho(seg#|7Ipw^%8ayJ_ z|6t7js{W!)|Eld=>Yo5xVoFcZKjvt3xs&vw{L#OZu>w5!UFZPz z4mv;^bbv(IW^ciUoCewYh+WHiAM!T^^7kI-FrPt(c^~rk3}i2de)AdRZqgYe?c zmT>|6co&miu4a3dzXaJ-Y|D{fhJLY~MY<+75WI})9^h4Z(8UHrKJ5UEcLBzLqvX%c zaSh{pmJiO=b`0T>Wa(ruy@na1P#*kqPf0r0GOByx{uIF0APM$SxC1@36ml@*&)|umsm%Rs&#IpX_N;!M?Xi~!w2Tcb@_fR<82=*PmE$}D znOF?{|LAV;%6Ra~c%k>cqC5+p83&#j2cGE$&vb)lx}+S~Ejh4ThQn?dUZj9$D#06z zNN-OdzL}kW6KJL7EVY^ARA75dtpq-ZH7B^l)|_xEk~-zH$i%E#f+hO@I&!b?J@dI| zL*#+A`^@L5-_Ur1RW%!>?IA9nD{4Z1xhbFy?jrP9^nH)Hl3WrQhLBR2Aq>&=CySp?(GHxdn2G^cUC_`gou0Rn7}OY)q)* zsxlIM+AerRFcZAaIa*2+ANn zFG08PIw`*vw0zj?Z@fFIkM+q0+NUzX9Zpe(c%4xWUW7g*^kM2+CxmX|g)TyUYCiDb z5cE#87a7^-JN-9ULy~X8{)mk7odwJ<;=K`istY=)LiDVzltFhHu;F3D4TtY$&|9zr z-X~iC&ya6fz2XRd+R$9cHpsm!$hhI~;S7R&%Yu9({dV|ka(!0e3~EEHMG5>%S%tdS z4w`kBFz<>RpdUd8gfBx~PI~Fxo7HaD0B-5ri2ptGN5C;|d9+el&*`~RS<2Owc5_{5 zZBY;OyUFhYZTMWQGM>u8pVBQ2ynQL2WZZjnjnq_PI|8`7I~_bVvRrW)nfqP{HFB$6n% zQaNo)IS)fe?pQw3{gsQs94@J)%aM+@0Sh%02Ro1Eu=&H-vs!v9>|x}Ix%K>@JsrH$ zs)zFL>yyW*Vdu9|W24h%9Ki(~GdA{tZ_3U5t44Dbwh-A|23_$DQJTvF#vEcE@ky{t z-V*u-*5fvkd4!YU5O7Kc%xTTD&S0(BJwfEr{0!(7ISPD*pbu$C5%B&v?7EL&IIO|cH-q5$`q+lVaL5gu zKVu7rE=0B7XY7V@8{l=u9#(*R@F#|q#;Dfs3}ALU{CcKt55E<)YctCGK_9vXa=ium zM?7?icR`=P!;ROP^Dl`Lu&rF>;=s3o1mEDR3E-8Gp&y2Ngx7n(>tUalbOGOj%qw{b z_I?O*6>9+cCioNm6Z|Fc7P3q9Q6Ht~wvSTK7VMz@Sg)&4rWW&F#=|RnV7zGCu})T3 zp*-dox#MCZczhgqd>nYY8@$~O-tGclaDlfw0V5}Py8_;>fVVrq+a2KTGI&Hh@pgUk z{oY_^uH7hwzrhj5a#m;NQs3&;i8l4YL>t**=*R9)9DuX|EbMeKe_|W(uaJjB(CNwl zLF3*;kZA*KcU2@gsZnmfF z9P_T~3c0oUo5)_}j2MRpFmMnI>QJ|ed0pKA1L#0&`<~H1U6~lngp7xeOjRH!OUiSN z^{_cVl5J!gA{{!*dQSF)p~QoC$Fs_kkA(k$WC7LD2Gq7iHa4|k9Bhv>HP?s-Kf5%J zo~N*0f%bJwXX<9GP&8!dp^dr5$~n(md!#8&Z*|KiFVXq4%PVKadS9>_|@<=CFm64P05=NW4aoP)D_Q z#+q%zdf8dzKwT^F^l$bbVzSF{Y~kdSl`=||a`-HRZ^%v$?$Tgc!8{F-w!K<5)AAg& zrl=dOl-~dyr_gu~n6L<`!HN(^UxL^9ODcp;fwID1NH}knQ&NQPLGY`n;aBJ$&05wp z>|dl{f1}6=Ip~CpgiO31vM?8N@gC$o0=={ddmGQnVsC;qfk(@1E0?i;#Df7_2ZJnw z-w${~xE6V?woP@vC8>7sROrs+M^Ie>*oO=}9e4ow6fOoYIktJ%o{}X3mj!%*&%(dp zTZ=s)wBLpBncFL&rv|qxtzO6;zjF!bu_+op+>+}(e3HYL#*F4{@Xh^!aBXH_PpCXM zCv-C4MSggEOKxR;GxOJ+1Z~y?a+KPDX4{SDI@p48JhXqV@gMVGCh!yeke}ax4Agv0 zt=LnEM%G^25?=oMDDflJ?Z*DnNYLZ`O{wqnt*w-wBii1|za{!;M0%Up=Sk$Sv6~iQtl1s2P z9Gq9yoP*uzKpju6X0vmx?9ny>@9s|LR#pvoSEH{~rb@TKz8HUwY-{+^xv}PM=&TPm z2Wt}H3%Hu;D-=iMxzkatFJy?E2c0tS{}R@_TP5rVYJE=-J=shc4z^&}L^edT$Y=7U zd=)ZC%7Ywo%66$5ce`v4?#Khas*9=}-VbfQBB!z36u$EOUTo*dzw>j!xRs&rHKH&+q zoa8DTA)qCh2lsbIojkyKB;U#)SNEqejeo?X(m|lHYRK7Je5{=~x9;hYOwgpRT zqg%zjE~+KbdrNdH?vYJZt=jMcz`2X0^-h;`r!!u2$Tq3Q&T?EC@HM8x_LprmR^qQ> z{uLwP-@$m(i^&%RA8B*6vZV$xllInuA0hC;4TB-mDqwR!kHVes0DAW^_|ky0`*_#^ zyA5O1Z$50(2EgX~2QV}g%pGOO&XUkKWs!cy|IsyA zPzh@k0*sm=dx2NLTj^C?zb>(blfWO}KKO0q-qYV|SrXb$#omvEb|=~l8}(CXi?tuQ zx#faxZ!u{ZV^h%&^+)SK{`TM-4nbSe_7a=ar_>gi{9>!NvkL2iJQ}layp7r;S`qYu zdD8qMU0W^yHs1o4U#oHv_Fqyufo3{^hLS-yDWIto_z6j6Q?Yj(*-$sguybemI065GWZQxM!of`L zlty!>s-W+FXE5JfmuiQ6%79G~!n#-IvtTuRZu@6}4wf;^R>8K~FfXZwZIx;-;eTXP zs5Sd4w5=o*!p?xs>`Yc2#IF#W03HY*0XOJU98u!4K}SB*H#(AO55uG(tVL>bTet+g z-{AmH!ye&tT`mSQFgEO2k-QS}PG;Dv&qRAX-micsWh$-uSkrbA`bY@2+uEwOu+jxS z(>gcl6p;1tBwkFrr5yWHV9iP z0sPhn9c_I!bj3C6gRnET-M=z*Gm&=pI`;nGUeWm{`y+jm?cd3>O1UF z8(24jxfwSw^%ueItFU$rQK&t{?T={ugA(yB-#NHxo7`o?pp_59WP=N5S{-{togEWCHK9fositt8FH5 zEtPMTb^r%pGl1VldhBb}R}@T&jM?Kf)(?h1^LL;z$QQ&oXyiW~6b0?hl7bbhAmiSb z!l9O^_R2-zd(YoUo&(RHp2fC4UBR?q z726twoKW(uzK^$(tw!@AUM*w}!2t`YI&!>vbzkOR zUBlHi-ND;Vb19gAJ{-bx;)C3)oQ-;+vw6p#_-=|q7XxhWS{0QMqRe-cg7o}S-|ci66upV{T11ajTMt~3ahQN*I zPP7K!SOvd7;+7l)_cdSWiSigJBhNYZ>l*9)I)jxvjRCu9b4q-Ew>e2R6NdN#MRrj7Y; zSpYcI=Bmq@lX9d;F8NV%q_Y89Z}Jmh&hTS_mpS%xzvD3SBA}5St=>eeJNi^hpx3BD z?!7OVt3K6+HB{(rhwW&c};Pho{^A^_T z9%U=mM;q{d``R4D+Prh++5mq+Ls}4PBV!D}U!7Hem*vgm$B|fQ&W=R zOvHL)%}Wn_r=1#1yxdMD`waFRk34svRqR!+>v6H29$#~`ulZ*VL67-MS#We7;DR+D z)sY@OSaTCLstmghYaWR|eN0WfORTx}N&@biUySjO??-dl7X{4`d;!mJ2zoqZJL$Qq z1Y6bt{XB8hd5YchuD%crhuWgV>xlNqE;U-d5(_5Eqf;(MJpbbvGQy|=zUZ8=Ur?tB+*t=R}XxBV@iCvAtW zu`}Dj3PF#rTKD&?`$hAG>lqAsldJE?UIk))5mTJJb`Z4z-T%nn_%QEBS=X%xzSDneiXCAsc zO1?JoX~uk+7~2ix$E++ahA**;L-;cb|2cmqcxkkJJm$5_@mmk>QpWy0WK+Pe`6j~k z$gjCa_$^t$30}gE#f`1Re8&w70Xtsv~XF}k;p+d3?$)|A14~P9(=vEZFAz>fL<}a;*pX4pX z5`te2eHL=%7z>tx6~o0_m6`(nqEj9L$LycU!{!>Z!YhXVNm|7y0v3ab)W zVP(?Afc{}CHY~A$OR!gl_#3Ch^tL>g{=BW9_WC*KRivv` zLytjU`@wg~rx)_Dtw{&l)JHwQGsJp4)Y>^xEH`5xj_V7XZL}X39Lzc99Z<)O4^+y( z4fq{90{U&cMp8TeSyj+m(bl*SGsY=g9UtOa;c>PVc&Qb=&bAiqV>D00o+#!`G9~h- z)-#~Z1`#*YaHgai6x=~8ev{0K&(&Gt5 zU&FStgYY?><^(r2ae#nbWJ&8+LBw=;$9b?`@GE|C&Ig>4q@moFox}>&;73usvnu$0 zE6ZdKABodDF_RffyTC3Mx6_#6yDjs0Xsk4c zFnrAsx1-r#a6-i08RO921o(Bv%Y17gt>baf1g+^lmhEIdT2J90z$$Y?Hh`9%!c1}NgqRkO?C1tU{Tmd zU(_g3JeRsovZ-V3Hvcnata3$&Nw>$LO~gL3Nzq8-Q^!<{)mSYNe?KZ!cY)oR&VmPJ z0k7~zC*aiu*GJ|&phHKlu09exFj&~8Mk4$N8(zda*(LeVu>-KpUp%azJWsx}+Q?%~ zwPEQ;b)*^183AC~n<-n6*?+LwcC;VnZioi3o zpx;5CUD}kSuRiI7FNSPq#MH`6eGq)^KKO2qlrr^*1F^LsZX7P>6t!pX9%O&cHfj06z#|)3cR$>Q)9m%4_gG^#bu( zeWl{IcnQA=V^e0Z*{7Mz*q6Iu1F^h;>)L4y(7a;!=!2#uM{*pStg4%~a z2K7Z6^hcsQ3H!3a8o+?;N$i1ZL*K&MyaxW)+!jf$X~TMbOZbTU$0pA&lJxnQE5;Rs zpPu-3w#)+LU%`659ZN&`&+8ke{%~!(z4Uh4y9#L+U9SB&LG|^MwX*}?3<4CmUvis zw$Oi)McEN80o1P-^}C?%&hrfKr_DYPPfqoRw*<=RzD=RBLO0PTHrQ!T)pG;J?Ox$Q zf6Zom?lGKMKutaI_xdSFcpM}itg_!p15mT3on7Vu5pPB~0&?8*J8d`q1fl>y}rHvxJru2IF z--niu#`Eq2*VFo{*uNC<;0n#dCwYeA?kr2J>V~_k5c@a_u_p{(COrh7?ij?d1|Wm7 zz!Q9+-(<*u2^ZC6ElI{RO;LUBDJv#Q5oZVdio$0xh0$1aw~}o32fsILWIfT*kNp0s z$ALYH7B2Q+CP7BR|4F)qfw*lgWfs?xGm$r*Ybh-lXR>IE{8G?+B%H&OaQ?|1S(p8- zj<|2lSBuz3}aH8+o#TWq{qayfherM)}OM@w$GY`nrp zgE`Q+BdJPbY|K(7{G1qfq_fhP?Exi48b>FE&Pug(tV82N{9}~r624uTR~gz0 zdV;Q3SVwjO^?TvUG8E%v)jvnL`kj3KLSjm;Bm||lJIZjgF5LY@!qLFH~FGD4sB3N1NiZ#%hCo?+R^7OOB>#D8sq<2 zY`g+CyDCn{#)5m3IiAp0h;@Wb^DmrPB^XL+#dTy)==T=(4NHwt&)rD7 z>Ae$S=tBn1J{dO9HR;jNduY#I4cUY|43|K^gf0)+%KgEbTz}a~?0;1S{4(y&dS>iO zg--^$32X$t__s_Qg1GuE2Y~-{eFWPGKB2XUnSw4^`Sed&q|?4{rR*Z?QA;+9{~o2Y z!v=VqHt2omAkeL_pN<%HMl?k+Z`rVUuonRyj@1iM~lm)*mcH z%oykiXD3vg<3D7(- zN5D<_2Ke#4^`*$z!VB<=63>y~C&l?xjFZlbEk`^I!3goG2H>NvLM$L)5`+(3N{1gE z^Q~O#C=yQPT7 z;G!zvTYw9ll_UQkt*;rYR)f92E}%i!CeDqpJrMu>TuCeVK!os-a1{LGFM{UNtM`B& zqG7~L5d9Hds)#qh_9XujnDzG)`-^@F%ERr&}~QTLSdkCStDZ3 z6joU<7ROm=)kU1I9bG}5IGZD9;06%NNSL~o6 zkBBD`{^hRcAh$BGx0@*1A-K>!D#e*-zSEfR=0^SAk=TQ_Lm#?)T#?cFEp$dPav-k> zF!`JKl8$gE+#sKVzzysB2QeI}-}_#T1;3w>tg!U-b(TK8PQ>=(oMrvqHG4?krZ`0M z&l%98>i6DV?FH_jjeWr?(BB5k8}_cyfw8CKp8+3CF~u8(u)hCuyrBm=tducoC9Sz7 zA6G(t9xu-$dahn!rd6-_n>fS0@4aQtL0J`}5sJz4msDI9XK0qGSz*aU5zj<$DThqK z_Z>>KEr^k(_$KgMigBvno3u;X4p}H{m){p-zP}7sU=6bXgRxf3<=&(>aOM^<(srz2 z$c(QntcdCTZNOdFH1AbljkpB+iEImp+e}f%>ct^xK4(f$7060G|JQwkfh; z3MCKv!8ZmT_m>`J>KfAX-WZ@FT}|o__-PKyJp54! zZ0W%QDI#c+cD6JaAzY@rMK zyM2tX6O8zUEN4{(*B5=_s?1k8VwiYk{#p2H{_LVye&f;e=o5M@VmpllZm%r;3)axl zinB^QCt+c8#8lr8+XQjj=sz<3lk=7N@1TDV`fmd*q3_Z}=$TW`iS!x|*JuA3G8gI1A`YtA z0Phy_hb}_82XMaC7}XXf_*CwniM=9>EjG?8#u$12!6xHrn?1*w$a6||AclK4%W=HJ zB42%87am*2ykng_d|w$4-wT|WDs%7D5+42(>;Ea9Kfv?EQWhTX;Nc0S@CPZt6X*v# z1e{rB#o$a}n$&{0h&ryphrHEZ%Qd-%ZkToc(|t2vaQgYU~jmBh&hEmgjiF= z``{Z6us84>ha$w9a)$)`4PIxQ{r+8F~!!XNo*d7?B7G-3Ba*A%gAT-ZmDMZ#8KdsB(W>if4j zj0s}{r1MrH-jQImr#2+|jFc&@;ndF13qNdCYsZ^?C|?Sl(r9VsmF1wHnidfoNHIBk z93QgCCm*(6-cKNz`iXqH?VRA9FDm_n{SN<=s$gsczsvfr6Md6yru*zevFpfdEXzYCnY z13Crl{a9Tp8<{A#Q8~mxHT&@{%K!8m9_c);k>*dZrC9Q!}q`TZ^=Ix6|p4eBcZ}SMVs1L#) z?7!|T2Q9+>Yw!@RIvnRfe@G8O2d_o!GW;vul{Rf>jYx}ZtZl0Yni0)YduU7OwgwoN zxkp(2OW+yee6cnJQznUd{ym;RI{o5n*v_h3aVDn3m1dsNoBFxhc^v3;TR>emi_!Oc z)Xsx&-`1hb=HqJT86pkeL;8ntx9A&w%Imo}>j}FE`CzmaF@oJ_FJ4&5F8x>up&jcn|!08!Mc(7HVEWv@ksC; z=ttul+o(Qels$lC$_X7yRs9lnTS8t2jXjS}}~v_5z~K+oE?m&BZa zi-!z(uVm)+tkHh)66Uy9vgUt~Y*u60g(Ra2F>$W*0kxY;Qtx+3+7>DYILUMlv**6> z*lTdk3%XdX!s!e%!HM$JCoUxIDQ*mS-4~+3-?zXv2~WSIGot<#`G{erI627haWd*{ zV<^kirHx5BCBP4PA+^09_$fgqNh1M!EezRWi5l=b8%h(=X-~7SxdwF zAWmnh72*?!pGQ67SK#aU=%4)O@EuAu@O_toUQ6rRa!TsJdl<`+kBPepL*)_a4d|tB zK>sKGLeM({Z`>XbygfP48{;!&&u=UCqKu$z{n5k3KjEX?F8Z{1)dfl8(Cgvz|E_P^ z;CnXeQyMd#Ld-XP1IPTv4bI{BlBMgoL+V%LpfkA!Y(pas^7|PFhat?5-}80(xh~r*BZMHWbG7 zvU7b6$Z&ndxdC{Wv_jAe=uNjfyHlTPF?1K@kd5}*)Wv?LcanUU`hGI4r{A?a;CDUF zjbiwGO2HFwR+8*Z&=l5<+3FbfOV_1EbqDrQU1_|s_!{mnUXEB<_&rLCp^u@Sy%BM* zZf2HU-lngJx2rwk@%_KYbJfZ5HhodC>~}0doH3QXqU{;QQNMz6;0G8#(`SDLczql7 zuMF`@rC+X!SX;jfI#Gvjqkt~{?srj$MuC^4!#W5T5LegiZ4vYn{>|ZpCKFjLPRh9w=fOBZS zN%YU8cxsErfV7C&?$k&-e(V(Zv7n*nr;)bWBi7jeTVH9y1~KP2zkz*|Ws(hJwTt}X zx^JjH^y9Sc{ftY~vZov4HM6qKSUk5y-v?B4Y39$zN6e1&_6y`SH@!;n;VTsvG*UUi{gxd@FCG&FVe9u3LPH0 zlMXr-v~)GrH8E<7^k_X!YmU5QW`9%vXb^l?p2JuH-<9V+Cs;;$NMbyZ8EJnMutb^2 ziZ2kS1sYt5eRt8u)T1;{(%mtxV`jUXKLJiQf*)P}EdqSY05ToC>NOd>2;bx(f4=$c z0`M>RD_($);swb36iMn^6mKLzc0XhBrIp}IDn=#QJtBaeGyow~{NHf4M&L-(IAXgW+ zB&i8k0gl@^#n@B%tx2=m5L^9zq;1N#kPrB-8syht4nH;YltG`tzk@UAW#Az=n~XCd z*gqiNLg#|%EG3;~Ke`<>{k_k3V{Ue==QpvrVJ%wzKLFo%{zdri`M-egn*Rsj+YH=n zKQkOVD;zsd96LiyXN+-v7JL25-Wi4B}L0 zQXC!8s_GtN^K>RV!#;ubsi4=|R0nVmIAlP-A$+W3;Pt4BGlV_p9B(8!4}J;M!8s$* zCdJ=7Ah#8{&1h*!(&vIc$Vp5a(w-R2pL7kjBj4-DJ$nH&0%9# zaqfFh*^2^y!YiHlCXa~&ktbVP#kk`7kR16eSONP9-^<0knSKBYR<##(uca{`rM0AY zn%AC$hJcyA`7b2fj1|k7&YH%P%mU8zfn0Ft@lCgp%tHEDHQEH6lnFi#iUlN_Oiw=X z0C@Lkqe=FKL!b@k7KZnmjb%wVONSW3waQ)UvLri=N$;-QratO$>Tbuq;c|uS6r7K5 z3HWPj#91GlYnAXVHt3V$OceHPUgHLMaTxIemuN`XI!8CCBm?lB3gE$infSHWfi?UT z_?0E)Wmxz(1o=llHbToWuB({QlukU}rp7_`JS`8DssX1C>qcuP^w5T?Tf(8QqsDWP z`G0~;!uK626M%m&c&KN%vTry}{q0 z4~&P#AyvBptN3K#ViY>x%|QN)1UQrQaLMr9lsRA!e^9*@`%1v;ZV(A0f;)~nIMQNlHWcMG6T zmMK2!PyI=~nZ7K^NBBs%7_py#9vE;$*oh;+!QKJ~72x1Hr7xcCz{NCmnc~zPNH+bEp^zpL#*``I7joL?*d}Yj;OGwNLRplf4iCxCt$8WRh1A9U5w_0>fql*eUv2} z^T*+vT*Qwku7%pfx6j&f7xEy%DPS!jJ#uy2MZz0u6L|W37_lR?et^a2z~lJK@p$U5 zpyN^Ae~2{)ztf+r>P2IqvmxdgYikV8&=~gO>^tYNaR|Ic-(ox+arf$Z7YPr;p{qpS zksk6VYMeOp(ky79vC7+#7AjY`|M|9`fBB-isypxr_(OC?-&aB3f;VE`fbAOEKa9a% zC7j4>0bZGO4;+#Fp%a02_>rF@>Fajd-~0^l0(=MhC2#^TJVyKnH2A6N#2TytKU$U) zP#ppA?<5h|toNu+jC4{yFuyskQZsN1te1?`HMaiWL_4oy9cg^OBRt0Y zhlZPC9-K73FA0YtUFE&VkC^a49Hg8?<<9G!O+UwiV?EbH&RkHXBIxO_K?i;du>%{v^VHddnc^+WZ@T47J?^320u~bHqPOk z*apN!V=qfBcks%YwTLT3oZ(|j5sP07UCimGvs7B4hZE0K&mnf+(Hw|$b+)NTW$epAEgs!_^~0nEKdb z(A^LZkUI3TcF4a=d#45hEk)VpN5O}ilKi0>@KVrqVU@|pai)UiWnfPNIMs}Ep4|a6 z#Bg98=o=KvnqZ5h0B*f-H{%w_FG&6}(kt}m6!<0^GF6J(C{dWcsH(Htw1m;O`b10v zeRuEJd*^Tt(5LOh_4>$O+U`NUv@GZ)_F~xFA?)+uyJdFQCq{XTq@N3QBHLZ~vX9*j zTQln%o!x-m(&``Fgtn3z)uu*H?bjc>`z)11yJ_0%xONw(X)AHxY0toW2J+9C?Y!3@ zy0k!LnV=!`POJ`t>4xX_I8NcN*WtPbWU3PMF2?);jWI05-|sM;OBd$i9}A zq)2ysp9JzweM7PPyS32#P8sFH0B88~suZjt`rmmx12M3`&wNSSna|OW&tCvP<<4zB z|6qK3{@9v26}(4#vzXx08+CeXyK%i~Cm-G4>;eyxYWW8zTWAJd*}G(EnU3C zH@(0&XTI;pRJWf`)a>U&+x>i0``^SEZ!~|tdza3iKWF|d-<>qon`!F4Npt2eT)M>9 zH+^y6DL$**rFl(CUp$4T>Z3v6*JsZB#Y<<-oTJYvn7_m~uVCJSMUP|qp4~cY{(?mX zGf>p5+Ek~#AVZa`h%yv4pr=`*IdnKh1o;b!*R zVP5Hr(W%e+rO)u)NoyRN*qmYghYichy4@G>`3DTi${%h0f1v((nLg11z$1$nETRRzXXzaMVW0Ja_eYi%6wrF#LwDc8 zxzqH5d4MpRZlV*rnebs|-@XrHrI!>eTDYhHe^Gwsoay)rJexCp!Tf2uKF2qI>AdM8 zOQbKJQ}8GuP~M_xOBO6%GP_`Y!D3%55$V?tUMOas+t+vf;QkAjKJmod0^j0-X^ZsP zqW+9I^XCu+jHG)e7HHaIGv_W?=9@Nm)`CTImdu_fN-;L~i8%}D@ebU5`hs~F;Nry~ z7b}}Bwx)U?AkC-v_?>DuALhxeZ{eA4i1M~K^` z{v#$KNff=7a)wW$ib$r%;Zu+_VhUQhcKD=8Q~?jTO&Ku>#YRjKt)UqGLn2kAWV0QS zgm*IuMa@F}r-*7(FdQl?{!JP{kLI|ut{>)=zfX3zQ2!*l1&U$F3z zMT?g#eRSDlk3W%n^DQIuM&*yb^|ssZxbv>N$J}%8ePhRspD^+M2N-j{AB~jP`)}U>qWkP)Wstk3+Md0W#lujO^QZ;TRVAq@07I< z8;@+fxcZjIcl2_;e(Ut~tD6IrfxY)U@L9a`#O)b6`g$H$boM^s5|+` z&w3qJvfl|MeAM`L=LhoSFC#CV+gjiHv2DSu6?gPqb@Q+b(W2%@LcOQ`d|v#}6BkFG z`t7!t-uv|Shi>1~yztH6{dWIT;XW5KUpQ5gRsW%URhfO*p$|Vk@v}dlJon@;dKQd- zW#7o&*EE(#``%Kat^4J$Ek^4*_fIPL=^x_P{99vv^!+KtC3ipd;(}u*`?Ynxg>QW! z#d+7$Put)(!WAoU~qA<6kMse{?&Jga9Hq+CE|kX4m*MW+B-}# zhOlEs|GzU_YV2Qqcc2b&>?B+`ro{f$_uM-n@xUr$0uwA5jLzm&dD;E%r4{C6Tvm=*^}ee-K!6AbI8JfVTF{T)>6!jtZ-Otui1O)q-CsfPr_8Ik z!*eXH<9&&hKchprv3Pz6*JHT0S@*qPo9~qNU01B!m3fqIKOK!GV?6(VxORW_&&`9% ztpm)ytNeGR5o{>^!w#_WSm>97an(6OhkA!}oetYYm>7JZpjnBGo z8)3dLw8rB*2qjD&Wsd8(b)P-jd|zvgZ=-deA!_4~*-h;25*z~wCO(<9FJ-g9 zDD$~+!$vF7C+30bnR}?t9)6BnwHx|4aNXX*168mcOvt~(;qK5}Im>u2rW1DFDkYbK+ zcbs`2nPT1#S>rom-K|-}0Hdbbf19iUj=7X{ImP|#ZZo4WmcPYpsTpTO={Ndq^Zr}& zhQB`XbShw$TR+O|U`&5=TxkQ$J1o#bDtImi$C>84NTduQ!Ni03Gw{IFWArfQ9r21k zq*1j0;=eRLG2de80rC0_;>+mQ^T6~~=F>52#wI+M#+eX)^yejB%3s;l9LHE|y_Z<` zuGaW`)_sQA*p0$RNabvqa{)?Xrc9NH;}Ux# zz!0|}U6bmOu1bx^aF^PkcdA46sXZz~ZBl)zOJ%7&s!#1xo3Zvf)~E6v>ziEPEE^jK z)u;BTFKX`})u%GCand+q{Zbod+q@8u^eZ!O|HI$gSRs|zcBgqiXT2v|_mOv*>HkA3 zKV<&^fgd37|3V04f+-On1NY*7Fc!fhf_QBpF4N&>vnzkWH+XH_xfeXhW>apan^QR= z5*=^jO`3`FwhT`e-E8tfN=igCwre^+j3m2VhL4g-ZmQTf^%^SWlt0EzDx;+S-Vu0~ zoet;ED2qFPk5q-8rDU`sbyug-^KAUFcUAA8=XjK`ckfINPvt);VFe|4JD1Qi`Ptw%_0uuh?lu&LsXI-V$D>vdrnk`w~35moBEPgD8QK9YKm! zF!5SU&F8u=nE>b-3sK-2s}Qu9s|#d|Yg`JA+3BYJ1J^h)fn?Vd${rt2Gsf49s0G&q zsSph$p2D9OUH2#VrL@7&;am^6ug5cUFIqaExh9Dhr)w7FOm^LjoMhKNYHdnV7OHl2 zJwd~ml1eW=*H7r>!MM>V)`ulgJIMe5wVgsk6xETCjf74#{)u={X}l7XXe6$w5+Olc zBRx-37b4r?q(X5ApdGoUr#vlEsA}RuR7-ZvNZyGg7b!!o0t*ha;IDDbj3?M(EvTGp zmQ;pfooC<=cf`A-15cPzsPm(gqPShsAuFZJQZ&w8i3U}Zc0X>G>qLWapc64#7fby; zvUz%3Gm>3W!#uN8my1;Ql@x-rODbGqrg{kae79Rb-(jY$MH2n^CelK>5-RcC-2^Hj zwHsj*-)SmaoG-ni{}zG^Q<<6X%3o)l`e z21!@;K)XV=}jPZbMj&Y30NAf0L9Ul3sj@PXm zAcOevP52K5S=UyY^{ZZ*-*jr!x0w=NA}!^zAKx?v#k(zBvIw~zF}Vkr=UOWKbA?{J zTJ3MLs_{+D)IK3O|9SV5NDZT~cfnjhXS0h|XcmUuYwQ)n+J#C4hF^4|>OV&j)_a>( z=5y#bpCeV{54fZw(^(-h@iNIJZM0rk+ACJs(BC34Ezx( z&=~#rrgyOtU9lUA5`r8)K*t$xQr4Ys4S3QJ> zj9=jopPfuZ^#u~W^A^uy{NWU$+$qpTGpX&nP&b3l;P- zDb(oef*=_JCVA~cc!-rG&6VFIT{8!1g;wnVrR7RTFonL4BK<*B>Q{GVfoqfcpFf_4v_WoY{2mP_$hpb#e$=QH~KuPBe6Gkj;o!xw*Y?0Nqz{?zD5ZA*u8VkSPT3}e^yK%2?dMD}8+{9(_J2_5<)oje{_ zQR2X1cw@}pxdX&{r*(MQVT}smcYKm<1**m{$bz1&m>RgAmT?_7Cp(Bz@Z&R5IssZ@ zDX+|HU&<|3t?xh`(dtACgkqr7>WXf&W3679*WT(3tJZh4+IzIsqa%?q(jExvkJ0=f zy>tr`dQa|9=-)3d6u49f`a~hklv=92ywK=aA%C$|s1pkHj=_PT=fWz8RoiHlB@jP` zLQhI&vs9>0tkCG#()QliAv-^oU3e*bZ-?xevFx>%vOnpN9gb!1wX!h+Ii4I5Kr)x~ z;-yN*txANbm1ZT|GZ<-OhsORp*4P)9su92t zZ7o(>Otf~8X@k;<%jFAgg%f`sJRPsSiT4c=A|QXjK|-7CO8ns?5_l@WN@Yg$qB4U8 zdmqt{QXwCAB5BYvDmkPxi4;!!bjYtn!nIVsM_2se*$IC_63hOUUIr#`;`U}s1AU^U zp*G4HkifIgQr*4@oL18;(pM8j20;&EJVB^vyq0pIEb|17Mmuc!(wU4WCQ&kEx~0DL znTG;NLdy1;TQHyTPC~-=fs&vKJ%V*2vw_%yQ1E)P8=6T7#-&i397jf2P7fRoMT!P$ z!f!Z@D%sKjzM>TT_$ES?zUz?nGvLvUZ{Q&gfW2`q9>&tcAMmgY57$$5`27m0nveeA zhbiqv{Sj2(ewIJ5c_1|~kSY(PiZ}sjR-j(+`EnB>zf*|;Venj*7E@9>ta=(SyO4Uj z8i+?c<#GH4PdPW;LOOQS*Hr#I$(rx8vIzgCX_WP21V?0jMQte|E8Z~p0DP|uh zj2@?pOfma7&%?+_c22=x`}p{YxOHVRwP2qh9m89KFvaZmC$FH^$P}|b;C=?r%tfY{ zeUf-_I>{8XPj+oUPO@_!vh7on_TbjlNv4>6N-DkhoMejGAB-b6c^{S-=cHDXXmD}P zXYnY;{0bh#7$qiC@Aj$E0Nmmm>3N#E54Sic6^bYG%RW8jut=flcDjpkDW2McII^fr zz4fk9jN9YLpu6d&n^?jOsHn-@;Vi){otpp>u9)y~Em=TRMb+&teHzG6Nud{~^QWRz zD!s&aruz6oNOz=-MH3I;>OyU?RFUJ7K1R-uVyPagbj2T<07C&gRZF-7#Ygj0=SR4^ zzy&KIV%?IcMV||1 zNw+Ta*vBPwou>p43E~le&p>t|i#gfIHa~F`6Ea*c1g-c|5iR}>iC<8yf>1sQz%l~2T zO~9+FuKwY(@3~`chMVN(CO6~FJdluqFoOgL3d#@_6&Zt23JMqz6stf)K%AjMiy8&z zS#hXCov30RsuiuaTCLJT9jdlytyOE=@Aq4KpPPFF`1bvO|8IQW^E^3Odrf=owbx#I zpMB0f=X|eo59w04OH+7lQNm@#{-D)OR0s&QHamu2U|3fp<;3_j<7))?wB+9al#-=v zGfMahtyO*pfV@;K+(F@aS(`D!W4{1?1sGyK1MoJ1M*w6Z)s>R1>23g0 z6K^j_P5X#pO>M-mP4$^hn@mkzpg3)s0;1HkjR4#97=Ti;NKK!iBsC4sGBxdRYB~d$ zO4ihrpyOebl*)zz*aD!2Q+o&+D%r~?pzsK=6>|Wz0bAAy;2mO41<*~*X#ld2 z$8l7)18y}H)(Z*@6M*CtppV*fISRVGd(1u44^iZydKlt$7-VNkCc6X@{g98&%;I>d z$K-2Oq5tZz8E}@2!h66_%1xNMQ!RCNI=Maos{9;OH$I?Ux(Q^pGBX!~v73M|#+2D0 zLuM07SE3Zdr%~a+yCe6KBliUWcmUs_?Iu7ERP9bESmpOZ zJ3iwnWF~60B4rplIrekl@u_Dk_5^@o07^;izXzrM@8DGZAx;>rBG^RbI5sg}KLTME z1gyrDhWt6Iy#u5sHQl|=YOSyu*CkM%))d!zNNh^LzY~{efkaON1+Jzp*G5R(mViey z1y4;6Cg6EtPk!K=cO~Er4&2yh>ShD}1xt_B+}MU|ZtBDAACILmr!ppSn?ruUT$Db* zUm-@ttn9(iQHT*SE1yuStS;sR2oLOsaGNXhJ9KceWG1pR;jCUAn35*RqN#8$AX$}Y z9aBU{KU``|kvc?MhYYBJ{k~_ZW7DXpYOxuxCK(NqwMYx6ai$cT!zW%@zcZk1xYm0H zHrR&C3^|y&g{BS@%(NP980zQ3J!&W;DfXC|rRM4U0?80#qQ- zJV0fHtd=rJF}iF{hrLo*C>4q=tsj9w6^V(hGdZk^dtF(p?Xz0AO0&^zt`RtimP>#c zBFn#k4DUj&{sQ97LRtI;ifO778e7&DYMj6i*ppym7cYoN}CRGu&`TMgwrHR5Cq zqj$Nsxy|f#*I-e_L-lZc$qaKoM-FG~zY^daULVEK;ADLY0Z!Ie0g#EU3%X=t!?QGc zx+ygMhya&Erkl?}#WDN1Ez zS3%tGU|739l7&A19$0A|16Tm`WZ@|mlk<59@7 z+~z9iZIt3yLF=i_Tm{J^dwz2j#Dd>vu7c!J#4(YQ+elvL38Ck;03^s1jUfV`0+7#qC~c|1 zqeo%Csq{rwTCm$ZUG!^|el4nbTO|CBLH_~h@PUMaRanMK3%rY9?T##M|0jTXs2=>D z%PNAO3UcX;IjFDb_|Yhqu=pg4NIC_Q2?i9PbPP)UnHLtLl)n`BL<(iWbF&n2L#$A; z@Y_;sL9v9)u0mmESya`sd}cGsMSiIl zs$MF;4CVZJAlFNF%q(URw$#g9vsQ|ztG=AJRO7L;=w9Tser~YA)fM9EM}f}ATC74; zL}K8Kb|Go;x`HNvL{h0;U*Q0YnSXlwj3oiVVsmc zKq+<}!eM5_>V|&n0GQQLsdcEL^nT!{R{*#bz$OA%MOfbw*bJbh68vSn#nfa%iK`YK zYJ6&G7w`+gQTjaqmk^i^;2r`~0DMBA9Y97EfS~|d0F=>`Ax0Z6Q{+&=N-^aGa?+HQ z1Zc`N1Zc{W0C*JCWb0-y!uNPMrl#{=Lcz=g{D%qnbqRPrr$zp?;Ky}BHx*J(UIIQA z)_9JH@dkemq-LO&Ts6~mfght73#D8&+jSxI3`yW$Y52)G1N(Tw?@s3LNZ`l(2p;bE zCFlp7sQ;#%UVDD0`Q4k}T#XmF&TwteHHgGYoM(GBAK(q1@|niLI_V@=K+|V&WoT7w zhM!b=+I;h*=Ln2-9;%03UWDA3UdUnj`zn;M&75ArQd>1j%TTIkX*)~E4e0|osQ$$g zazpwsmIl`#A!9iclF_QBSMD$s#X#hNw+c$!W=fcMfgRZoLvp9VX9@l`!FK@viNR+J zelPI(XRg3rQMM$T+*%BUZm@Bzgk}3^El|+86G*pT*A)@jn@K2l>|qR`AJYD+W|u2} ztim6wYN_CA@q1@jDkW_V-1Iv5ZN_f(Tx67#97!Q_kxf#HG&lfYrGTf9p;3cm7_31u zj3Q|C`qJKY^l}~%y}n+(KCPF^e3C4yPk}O@=(TD%UCWfcBBdr_xl{82@chFPrzT

=%eU_5}F>KudnAw@4j$z8@5Vp_J|1-A8rK<42e&sb9QQ$MbS zWbU7LiZJ_kAs%e=SP|Dk?$+per05-CTki-%RD7u)-Z4AE9=#*{EVyMy*pnF`tapSx znVCYsr0?Qd$dhGX3tG^>7iU{PWF!wE$y&(M7u=hl~nwo1N7uQ1GlkBfh(rY2_$)OvljcXzA^pqO`>m6b53@PXx zVeibqJ)r0vVehPrUs0Rv2zzHmSkODd-r2zi!6rMx)S5x#g8thnN}IXmD>mAei)$h8 z9GlNU%UZ}gH~SsHK|h&fE#y5V^Us2zsH}y8SZ`SF5VdBYA)*T3mRpJup?s+v!2x^x z3Y}uIzejAk!TKHSOk#5k_W9+8_jqCp4R)i!hGm1XJeAc2><`U~DrYO=JJ03yo$7(x z&cOWR@~3W>_a7EDgQ^%KJKM& zp-XnD^dF)gjz8tWpb6qn>o52QzH;5}U5HK*^%Wr1^^)HJ-t~ZY6`Ukwu6!o+lG~7j zT~ByF!apIO0@A`>@-y`9b6#d}A)gP@g}vk-vTZM=-3~XcLRYCBAl=eS_RxLrr~TF; zKLygWadIKv>TbC#mA1~IzX#eMd+7nTJYS{NqvfLh-=KNmRO8t&>6a+)hfdQ=K;uG4 z=uzpy!bjMGo0azjr+eDLFeRC(=qhU3qtfPpS!ybtEPdg&JS>J7whTi(bj<(``bqN; zAM~^5O8guVC4vqL>|qGx%tkw7c8YHt>pj1r7cz@Hbky3?<{f4DlDb=VLUeaaRbut?3RqSn+`iYh% zmCt)2_8#w@P^~85G!K8dtU){#6^K>nVO4M*6~FD7jJk}BB-r!PvZ3^2 z==%qC&H#g$r0t53U@!6Fy){+__;T10^90Pv|!n-=v@1$^5@YY zwsj)NCy`|VE0AE(E*jvy9TuwXxKtIQ`h6=hA+wyzBHX%bsZO zb;5|_<{^j2%HIUN_7?AWv{L;7X!eh8AFDTh=M}zvk7qUhiDSP2(>G+KomRm_k{|HA zif|S({Sd{UAxp14;=zlEG?~v0jdaMml@(JZ#x2j?s5I!OFM@t{nMZ>}d+7C`pAqX} zy+J>N)Wfc?#K+gHivif!alP(>51=qS~;gCvK2zDKOs0TxlgU+svBj{t~tYJYN8a!Ps=HCjxT;!V8p6VLtq zz;dmxVOTWREJBt`qd%K#PPJT@%9;YD7P{wd{6!!+7=Ht(XTa}qYW)PKfu9okJ0a|% z^Qh$b9S2S|#i>lXpz;?m0`Ky$6dwf=BW^>@gV?XG#Y!AL$i}6#Yl$v24~9*rD{a(Z z7}cd5tA_B&5Zhx{U@+2V^%7Jf^(lbTiL+`sf_V?`r6TP^F4TCap6M9L z@&0dwzlNg!H}s>}LX`S<;fB<(acGmhQMBF%q;$t8Mpe8!F7Zisd;kXNj`Bv+9VY{j z?zja2j>=Z3TZnqqbvTJDPJ|cOANHR9?2l^LuxAKEx_TjEevdr1G29Jqd(TnQqRNkL zJU>Dmd|W8*PUuEUcN71CgJ10Eermk#Yd*Yd@5+!7V^!V>Mck-We2gj6vt~}k0Z?WO+A?gB{Er+%#-cJf6u|k{r^ZU{a+*Qf7B!_4=`tv{U(Q<4mx7l zLaanDQH|1J90;2d2Eyj}Kp4SAhI#>_gC?Q(T(2r0*XJ^Hex)T4Zk$1W!#X~7>Y)E? zmUALGRu&&tC8vphkjIm5+Dx;pTFxvSW+RHNZpLmq*A6(aRf(;b_`rD=kv)|0yG8QJ z4NZ7@MAi^nni#IfHzQX{ySGZaFGaa+Cq`BXN;KgbSwg%4LOn;t9#h`|Fxfq|*T94Z zhI>m3)YWs)x=XZ0O}Hy-_jp!jfP>H1Ed)oy1^_=Nz`5#M0%rhd832F-Zy|uu;mlqo z)7T~)_Nzg>^WJLc2ikSyE(7p00AmINXfjpSYi4WU5Fp2lNubmiO5<1{_d^cHSSG@S zMzlK{mAnyYU?!Z_iu^*vK;8l#XkJGo&F?boJIQ`+{?)XJ&A%KXR=eYz3o8-*AdSO@ zkbj8P{=AW5I(*UKSAu_~nS8DU|F;_7`{4XIJ~=jifp+FNY**o9c}F_)8Yqqwc^-hM>&IwkXM4C62#q9uEZ^voi9VA$-G<4v@0#BkI#>!;sac%Bwq^cM; zjiylDCQ!Peqme4_<5toXs@(2M*UVyMeRe4%)ycSoeax zF&Dryz>Fycu*HaQi1KJG1M&lE>n^_xOziRj zx+|qyhxT^&FzN2*n$s-T@Zeaf0H+RiV1FzwevSWo&CQ>e;@vwCPh2$61m1d{xBvi` znFGHMVBncJOB&@R z<97p%RJsUt9Y@76!|$ZXrKqTp75$YvoKslYUP!-3G%KAs1Ugx92pOx9mH&_!8qf)h z7$JTCxKX?bSl5`cr=cLB?{^vM9#Y4~`(F2Qo*4oYr3GL(M)&eVtcktM`AK^DEnuXV zYm7*%5s_a0C#Z59znXLC3=g}+d22&VlQ6!f;@dfvs`H*_R`RbS(0HhxxfOV7nOjz> zUj|o2_(jX=VPlaJai5C1N{3<<$_rdIIKa!M{9$sTf-jbldJ#%(oe}Ka#IV7|d0mal z)M|FDuIKV#M1}6GonTUy?M{-dan4V8Fs!k2}^{jU})f) zzi~JKUI8osFo_ocP2gzcMZiVCjNyeqw~>V@ay0V7;BHWHjHdEW48sUPp@KOnKXEE3 z1yU+#2Ot%6Iu)z}Mk>I)rf!PHc)}qST(7mY?>9tV|Gf;YoOCY16ga*?3vmkkx5j_h z6nLU_WQUP3Qy}h~;Hc*^tl_ zR%#YLyar~dY@Wq1$7d` zdKc?vC|?c?k9scrpEokNZ;lPGrnA@slYswo8vtGgRE$P&klHv6rRgXg`KFQKx`?Zx zjb=53FhwZvg5`kWa1(<=O)R~cnt8FZ2`b`%HJaB(Ul?|Tyd0{d_;s@L!sw(i34k@4 zmssB#cK*JPhdQ?SgaUB!TB{i8r18f9Mgx%1>TnOy%(%u#otF=82F^Y(N#Jixh-)VyQFlA^{xPHbvo)ZiP!-7HNN6!iW<2TeVA zq`^}FNYFGHPMv;C<5z$xL1V!fY4BBAxel7eMy3f=bwU%?VLE8OrgjF+>?090q)O0i zLFvfzjEo5yd-IOfdJQd6BeA&Guyj)GvHkhvgv8>DkQcSqQBX^&s2zmTkq461_K8Ja zwEJtdE8NBvYHF;Rnt8>(7%Jj`HJTUysfInis5~Kde-XI23GfZr8)pC*Fx~{0!|im0 z>*Lg2RL~_`EQwbVvyl zb2sFVU~K#q0RJ)0ykNNFqZ^weV~WAf9=HQs(gQC8&^^E^*#ifFk>P!wQ4kXgj6vav zQj)~~g<;r5A6F~?Txd_27rruN3%+;NC_gSR4O!-erheL2@jmFU?6+tiJ7FWL(VYNc z>4ZChkxm$5XNx3(E~de1tcddEu{Ml14`+nO?ZmuqO4w2vBt|ux|E3Conwp zykKNDfvP4oU(O!jys!&QG8VrC(4SNpi}jN^FBq9a&I_XTlX~q9juF)!-S22U1>&N0 z8-V_#iq>CJ>$gVckXqY2&9uzTDm$i^OB*pO;V0FPthU;niHMs*Wrlo7FL{f}9wd)G znCzquk~8&x8#X@^Z-j%+;XcsOKKTM8nV-Mnwbdt4pDuTMFqN%$YzA{259Ee~Ht{ zZ581i$m+SV%z0*?XD>L5tDOkljzXKrNsW9A4Mum8% z{y5{E8bggaRPJ7NfQqA@`+PeM!vPqhhNLZHMOOm98$1o%r}+rLlxqRRu(lo#a^rO< zlpGHQ?YoUIcdO=ugueD}-n+^>pu#%#%>n4_?4sQQVnrbTR0w9&`JXB>*k;=** zJXB@-K*cfraTCjPpF+y*TG73TwL4$2TT3IFC+XW6!vcS2eF_ zrao6S8yDy>vD&*0FRy3b*Sy%)Yj?Vqz4I?qk3VL$7n+M48Tu7TBXlFKTxO~!Yr4}{ zV-4LjzGTThqoa*PlMn&$mdcJP1RoKZHI1g6;M4hnT~kJ-7@!BX2wZOV-4Ie zKj{SQRhmVpIbWA z!t(oGJ3l;!Fvqg{Rk?rN_eD&eP+$+J@**ZY!nF*rei0KM;bOsW$xnLm0M}h8`TXbO zEH7fhLt7LyFJkh?ye9?t09oJ;wAMQ}moQeNh4{xm**UWz&+zaZl>wgl_TK=f`~AxD zo)P#SWuK(%S%Du?G{9$Kyl00=@Mml!Wo76r7A%}n`TJRxzT-o0fI;5(Jbz=fD@R5lP*s7CPw7$SI5Q+_EoyIWTxf zlOu6w2oipS{mNh?@>YO=(QX+%xdYJID&NDl%Xcm2+G?S%*zsTH z4fg^_*;RbT7WqZq4CgVg1z--b56U47bti`qb}!^9FZ)>jFNtUzIP_;j% zP6`YJAPGjz%_WQxF%JLumy}@KOfYJ`T?_&Q7X+39(1NEKLHFlmSz@0AisT@5M&Lej zF$bx$0(Vfm>S``?^;+|xPy*1O*WKJ#R>!}XfWFYMHiaHyWi zUOZHKnPw^f0;J0@0HPM z-$qr-L1@5=CQ59i8>M+DAzyH*wF9_(zE381Rbq=PApaK?V#>(78iWmy$h#cC9aLn2 z9JvLh*H9`vNN`T%yJWtEOu_vSZlab405mX#@CZMRp6h$K&cPP|>CN{+JQl2ZZv$9P z;1vKp01CfOkn5!F_uF|{Xy{Yq!Uv?RKLCi5l3$2Yqy{I?YzQ8O>YZZ;1#bxCOam^; zLjHU}`FtR!D6x%u$hRaV8#d+8H#zi6l-PXwB*`DbJ124|KJkG_(FbxAKIK3thL8qb zO9MH3;<(~$^i$s>KM%BdxijS z+_iQ>2l*lwq4XF^kt+d2=O#4cIv`?X#zjB^dL#yIsjOa^S(!01IRUxW>g=$`Or4LQ zavrMZ+f*kztaX*La5ieu*SzoQtuTV3g2BZ=m5x%mcI@~#6=ya2!t0W2Y~0YJ(3;W`RL9zy9A zlp;?9Sd5u1@=E}p6ZkEF-z);~K7ehf0{9%j)0pZa{{j$P3?Ky~>Iwkm5dhr?sQxLy z7NGDp$yER)rPJdUn=V2M?}5jO1v z=^LOUoI+j&x*`aASF`Ro1dJT6Ey|nMAA~Q!kyi#F?+pCq0T>RTc-SFiB78B$Y*2B8 znN2pfXr+aMf<+@$OJ^Xl<-Lt|c=yJ@m(*xtgijhRC8yC+%eQ@N>8BchewbPu-cV`Z zT8QbbMM_RB1y{jSZJd-39Y!U~ollLxCS| zi~Iz@WB?VMANH8;uhEuRt|wJcCW#2=hYjTC96>>uCmjAA^y8A0QP7+a&cyciY!Yu$ z&&K(rXIYZD@^;iBhs+iGjcI#WRqtF8rn9E@?fScw`vIm9M()c{Bi{Oq0KFAnZoJi3 zPP{c3R6IpOy)T)rwaQTEE6OGMP6u7|T}goY9s*Fnkw8At@s{Yopr@9KR^63t)Uw-U zkH+8MkN12R#eix>aYM-C0=bCd6ZLT*|2Im_!9T~V*RhK`bOjp(j zU6~Iz0&p1-1s9E!OQj6U?gZR;8LN9(yPB)bCUNz{gQ&krJpJ$_`l(4A{qS7+xk>!| z@VT7+o2StikBVbk#LGVwxcPJ{eoTDaA`X9C;AV006XM}!@$i$HU)ueY#vehQyE15g zeNEP)upxC%Z{8X$m#2a`pt5`(^Ttcu=y!Sl4SFB1Lhm|OCSU)!_ zjHw`7*Pj`@ZUKH1rh?>yH&M9C6tFifUVmIyO0Pemm0&ONVXD77P5l-BwUh2{Wh}O0 zz2Un17@}M8%|^iUX+9QdbnSpG6x$ZD2f$@oY}*hK!!yX+rjoN+>f9mTX+f3O%deHJ z0j;$A%81QtomTPkm5o%{Dm`)K1j@D|7Op&AS~74v`7f1gMRf^llit3x;tLql0=~=j zb?=~a*m)Nm=9-er%)ugfK@A0GVX#wpy*3YP!SyMuE@|Q4#YNkN-h{+YOmE_c9yx?B zDe)5{7gs+*J(Bzd!wL6QVDvHQ9s2MGhq0ImR$KgoI$B(G4xV^{#pj8|i&%oy=ZV#q zqLgHLh?cMR$|W3G<+ATV08vuJG7olK50){PeQ}vuaP`Xk03~Tn8?~@CyMfWi0A8ZG zmPKq%x2=f2WmR;j?%`#PtHITDQkX2m8L9^-C8n&PrwNBD$cjBpx$jCVfe2W+SOh%{A>i9z#>7{m-io+C8R zpk3rC@rVG05)ReFX=^ZFvgj&_lH)`Avys=t%9lf**_?^QiON?)gfvq5hO&_uCdxOC z?rgzJH3AtjB=9oAlt4Fd)=+A{&0Ik_D<9Rv3(9<6sO9q_Z5Sst?>9VeAI5pk`wh?A zhjFU(e#7(j;m;c-??5yUf4E}ny=PR)hr#!ldq$9VeAMS|KhHDRLgTnzET>h=SSI~(@B<`>{{HjOV zwH(zPeJ-x?x&Z{NkqI|WMmjf6yv-?Ah6k$v>xXcR+4TGuBIN=o+fnUk#4i~Zp-+=P zf$<&pN$i9@PTVIM3_a#P3BPi|m6F-x^bwYQP24A$uGwDaKj$MA?oi+?0r--D*bf9wmI0lh+Sxu4{@;X6T8Upb~xBS5__s?;&_7% z^GSNO#lwa>pAcLQmyJmj3M(%W}o)I@dzS&tmJMVM?!a6u zUO5XoBJ&N)pFy%pUK*$czCo!Fe=$6rn_{(DC3_PH1LFj@Rq{mwVRD=hvm!C0n5s&e z5(>-XTp_E}vCxa;gUXmt%Xnp`7N;qCv%Cv$Kv^O$g)5g2Z7j)S7O^V$69qL|+M(Dr z!Z=0(wDM`v#^f{Ps>&hX9*`k!Rb!`B?g@ETq*Ocii9O3ws-1g3o+ZBO55U7e&lz6p z3+%VJt^0H0DX|l#T>#>)dYsI0$1+J{yWsl&;MVbXr9_hqy$t%pCqrKd$?#FI$h$tA zWGHWcJ}4P(1zU=rmy%90q+s7<7=!8Zb`K{R%KM(3WGL@@c9NmI?-|Juah#A0-$f~& z3^!7nNrqQ29_4+{NQNxvw|gKN?m$7m-2=(+S!$EFdmtIIpx^F+WXPn4WJu9;w1m1P z8B&}GX2}rke+Ykll3_hiPBQ!@;1oZZoMgCHFci(2gj=pAPjs3*ku};!povLM%U20~B6z)sW7SQN9MKHlPadGRFQPwzBX6)KD`*>+A+eHTniXPtLo* zM_$K?LXj5%97$jofJFe31$Wgzu*tX35zL{W2yJnM9;Q$cYpXZ4S-3)0%|5BASKtqh zfTtS*IP%-T7sX1kRhre*jk*Uw%}YkjPO2H|dDo2^rviT}7$ST-f&gs*wgOW;8vt2L z<^b45%pw3*9WbW?_&YG-i%*Q&Hc(WyZ!Fc)7y0J{V6%=OK!407K!2ZDnfg%NwQ>^Ne25jov`7BXek84o#Co z-1WL?*DkhekS~BM0ddz}wu0^ot_47M4FVwUBCEJ-E-`dhsGo7yHekeEmI>buP~fhm zNblmV$Ec0&dXE6@ab4ipB(B;-RdiJ)@Y4K{QDv;Q;3|C4=%D5whPU<2L-2~LYK-3h z$W>osFikYR-NQBw^E?Ar<%D2qju)rme4I!rDF845#uww00f=f~ssJo@nlr6$4;A?? zq|-ULZv<0>1N`R%7y%yv(8FV0-2)l1dXr=IQ^1I07x#5mk#8UrOALy|`@pGVR-D^q_*1nNaf`j{!A6V4 z+FF+4@o42<$6QwCb-tl|sUzIOMnup2fu$;BwLTGYrQ=P;EjO)nk)sZDSstWLwPdKDkEZB(sJ}&ZAY9^Di;s~$A z8{1M#L=#L%ts-M3EJ$q-k(#a*;K!CF-9lb}fy3)Bb9nu=glc6q?H@?hR$amx$ZE8? z?%~Uw&86VyXcQySYT!v9Ex4xt-*YMWKkFXr|B-dirwmowT#t1->l0buWE<={gAKn) z-eOs`IG>1*nLtoIIpecI&G$MVkw^NFL-j1iSc!Z%%Iao$0}6OiplZU~7kT1?vsPX! zWpljFhv<7{qw^QwQp_WkSVqN7q89=^`O8i}8`LUZ4xEL2kiQr^M4llm-pk@L7ALUy zA&Ld{MuBrFRM>So_mU%phBi~%DVJ78~g28^Upe3b{$9k4eUY>J;L zHoTm{T_?llozZ#}j5oocdX9udjx|Q3k3azFTX(9;yW8-_SN}aLId&WsEaY(vVOE^R z8uHQ#+q4=>Y4xh-TqN;)Ognk`wCp|vZT@1EN@>?WS;AXL^J-WcbRpv%shu&NFBi+F z16A}kRp)1uWGp`;uw&dOzr z%Q0DJl@O}HjF_#r`68WclgC?V9DExU;7~pEeSSgG!#S=km!e5?jbL7l7=u?0?{LaJ&Ao35p5sAAL z7GMA7wjM8tr<>oSUGzp5cRkE8eC>afZtMl%$7hRc`7h~hrOu~{nMLCpx6W+MWrMwt zC;c&EFG9qUFA`%9mnyy6h?s~I9(X?j|B@eg_l5AlJKN^GvlRDnFoO90c0BOTg8A|= z9(aESr4&D!6Mx{Hf=T-rcuVPI#J=;E(m9~V-%`rT<8LWtA^w(9nrJ>DjJK5X!CJkK zfwz=$v%q;v=@T4PvX6ncl(G!A^`Bej+hRF6aT@TvC55Q9Dy5p3liN&c(6yG#=7#0ci0dY*B^ zl}C7RJ#R>RF$UGuc61(a*JI2@PXh280>=Poz8DFOECqba=~|QuegNPN0_y?PTmpda zl{uFHzgF-|0=ELFyA;Fu0RVhYN5K;S{sBzEa{$^e1Mn(<%Lu#;;3EQm1TgM$0Dl4S zD1om56kh?rMypl>C~5~VZLIb{QzJ}2&hra2E;o-ZBN zZyeU5O<*mKL1@2Wt)ZiEsF~qBIIE-?G_7pmI9=~fD%;>03#!z6Hgrh6S5ujoxZJSf z0W?cp=vnHpKH;$bAVfAb_TI&Gd<6JP~Qp4It){8t+`6P#J8QE~; z_G8~);jJ(o+@sM<#qefqCpwe6!lg*XS4vcGg<#}7!+jQ8TQ<#<_@cccFyjM&*g}ph zH0aBLuGo=KAiWKFe#!iS7T#8-LSU$p4+js*XOvg3q)mgWZin(}iSR)qh_6}LWT~O) z%oa5Z@lNTXSsKJUrH4i|H~?Ti!P+kB7@kTUwR|R04bLH5gXQXobkfT-Sh$YN6$niqDLQNLEtQc)g2P9SN5%-%mav|Y<%F#e&x{Tk=NVSrND}*t zYIOwg)x1fq`qvUhzPJ+Sep89U?Q9Oks78J({Qq#6L;RDPxD0x)*B;AD=wF#7&yCH()BmGDlJ z{q@$k$E=SZG}!C|3^Q+56=DHjppVZYTt9^WPFjtuj~9;DSu18j1ecZ9k(%e-Z>EfO znB;h!36j!z3z|zJv^sw;445QCe518Ql3P(HqGBL&`=vfbyb9DZPO+ z41~x|pg*QEEOLuv_hlQ8 zvUjPBmVIToJ3vv%k!TS$Ic$J^v2&0lalD=2kFE^d9v*XP~V*Cp|hTZlVfYw@=W z#yUrM^Z&xgHH$~L-z*+I^PtX43tZC+4z)DI`-<-d)%n2bT-NS<;FJZw-&rp$odYE&94N|{2qUEtuOK&bIvT)(Z*F_L;JFkXaK8V&JSo-gq) z{S1ms%qBiy?_Hu0ky|4rfNRirMAxi zI_pcE)O0I*x1k@0$O}8nvr)+5lPFHL2!J23;yK`bNuR>{ zB388JAV#*uX<+g9p^krQOj>aWmGV!ud92s)-)%ip8V@yo`HrF1HNaSmf1_aRe|wTR zWT+)yd3ZyvP~du0AYYDhWd`Q5PWf__D>IV?d^w8Y<;t?LV}t3EAtHBBU5yb6I#(V( z`Km8|756rfX+gBXZFyZN{~KlBy=V{MrvO{N77$HASpj|$(1@iPCFv@rprinN9?L;y zDE_!E?GBv0ab!pxP2@kI!-vSVLuxL{y1J0A&I&xt8Z@V)EK{we+zX(ffiJK^JqPW3Q^>tdWIoTA|e(Ov32O~h=|5S^a+%6zc6CBYR3C8XIS{D z6lzmZFTJ|X5T}Yp>Rbz*`E3L6BP;;iqu0;4d8JLI&r9HEvSzM$3%cBV7{G2Qs3rVzF5n&c3kZ)y zrS=Uag!!1+RrqhF9Uo!m=d*mw%y%;p7ekS|AiRX|M4a$@S}ILW8vYP|PiukG`8_S> zL8Jz5SK#-wEcE`K_8pYG{v9|wzo(_3NgDndt`~AKQ#o?T?;!F$RL#)DbzX=RV7vZ1#6>$4~ zS?2)nyAz1if;{jf6bAx&%Pep&I0GqCa0k91B`5`dU@a-BQb-M)%R-tI zLV=4}NS8u5Fr0-9DdYuy$U;a8g@I$xRe?+?!~%7sgj3mXHGwBs$jRW2Op}$y;kyuq zrL$j@6}$~rq-;;8t-&;KrtFYKQP4&BdinZY@DB3aqIoiizen@93EwL`8P5U^1^xav z+2|iZAefR$k63~Epag@N>jC?%49fUZTd^Sp(hd|-2g&B26)0h0uoT=@+I?W>6ld)8 zkw0`T^s4Gy;_+1%vy>3l(Q#H02wJ{=6!<4}s@hyq19sPGI&Wq!CU%YYrb)WI16A?B zQ)`&1vX(8!1>~Aa!W|f3*~{@s%J zsm`~35Y5>Dd=KPv&IPawK!nuX%_x11Qr;a2a-E>4a8C3w;0WhG4uD6&S4MLkR2K3D zkK5K1@;yqot>L&}>=*rtz0;lDh>P~+$5`DIYl5*nR1dMmRbW%cR15@M_#>3(`dJ=G z+Cr2|TIr8TvWVQx^0&~aCI=YHAEF$75!S3TsyDTQ*5P`OP5dkH?LP+a0f0pW-Ue_P zfP$TdeFpLv>~>v%Gj`bv`QYsk%ZhD9-ESHmXp}=u&G!JEa|=#8p~T7?4(P*)x=njn z@fqGye&D@y8c!2(DkGY%V1Ic1593@uH5Z(15iIoifpF|wFd?Y6Rw62y4^-O(!WGOK zYIJlk;A~9F2DCzVgrHCk!RC$!YWRQW@6%n-f&zaRL@bFiy7L|#Z_WqwR;Mc%K> zOmH4#dEirxa7yu)LhVQR^&exCfKgQ}QN=BYyi^OhU_D!xi&7-jxEk=k+2g z?gJ}`bacfZHU4Qz)zcw;57onP5_h~zzi@~}F%gMNjsqYraisPPpuu`j5q4bCK!e8O zFAbrI#Nf8ZRv{u!5gB$1!se!bW0OxS9 z0_U7y1J04)Ae?i9e*}MCa4j@PgXPeZA3OtaL2y0rg~1oVQxyC+&c(s$IF|%p!#Nh* zk8^1-6Z~btPXU()SL0j}d>H4-;4Yl2f~pYV9~=a2HNn@Rtv2`o`0Ijv;bgzy+u*4W z9*c8Ba30S6gNt!)46eYrDR?2y%|X5_Hd`_BZuB#*2su7dezf*h0L zXD9~dfm)hLGt`{GJkUyWq%a%bbvp@I>k$kREWmqPzTdPQ4`9cSrXA8eHmT3b`@fMH zJoBK>%hj^$&^Pz~n>#qYm)ObsINmqV0(WJ}yQnFZaN7IGpURg{AL90vInwy1M^&1a zfkp-FUGYuE*FaCd8A#Q1P-<2^Cxeh7kCivcWq;k(h!IESkKxNqtXkwN3|RwO?ZqjdQ=bB=HVR%eXq#i`It<6 z^SB9lsIeHzb7i_qs98YO!*|zYSJJ@T$fLkLjp}poC~ux#SYHEFgx~X1*@sbZG!$e& zAY0ZB-4saw6epE&2&bLH+WrY^Rfa4=9wmG3m%ysPVf5$K!8rc8&-3O*@SlI~Gkke3 zqSyH6?##4$GV$MP#{6q$wZDOhqju9URA7#sHy$Q-Z4NqTJSPoK^RhO3nlQ+xF75e% zd2P6oIPmg=d-X>BR`sPJ$_C0{jRB1m&SpRIv z_Y<^0{UG!%P+tFjoCE*DDTOtqbn!$%Ia$GwS{*2ZS5p_v!>VpgkU!cGFlY8Hmr%rHI(ycu2O^{)Y2+MlR<-Qk*W2W-li ztXU$qcBW~e?X8h4YjC)wf zO{ZQHQJMwo9;C-t9nQK|G*r89m7UMJz1Nw#SJ`!}`#6-d#QZh3pWLp^3lH{I(;PkH z!4}XHodvsQ(=Lo7hEh8;$cyq|*~dk&?99Vi_8BdciqEuj=(p=&iT2x>b_M(dHXV}9qW=`V*TxAAby|`xy-wt-3G)R)H&8wOvFELhfi>qX{@W3#p!pV zxM)6Rn0A+>yW+dBN)Df_t;dC*9NCy`GI5i9u`6>95NeK9aN7*cQejvIfu(R0E9!P- zlgTRDGz3z(z>4z4M(RPA{K|9&V!2?~tYqO85YAc+2dQ7Xihgct=$@^aoORmOai+Ij zd8cWnqR>#hNf(5uNWbUGW!1NGycD&8bRbUpvnzH4urGp?{gr9ny;g1#D^9r_fy7FMzFI$+}^Nb;UtkLN9s5(0gUqJ2hBEdtuu5{V)yN;YD^1!{+LHwWY<{ z(tRk#F3rGi>5VlVn8sDHou2}+(%V6}bSLvPfO3*5_+p#gK%s#XO}E#9wYU0S(;u0s zO+Q-bi4D}Ix5Z6Ah-MYcH_F>t6^<97BzhBLYM32PLthNQE?#zz;X1f;dOaOhb5v7U zb*i?on(MmA3cIke(uQle)6tZ#%-D2GCD6Xm75EfYm34z?#YW@&?Mb>B7D8Apa%Bv} zFfKa|gmPjkW&=72wp3AF%{0y1MBb-Tv=-F3%G9e{R+*Ml>}3jtRzaTny2Z5sP=v5@qK+yJGAeks`@pkc?M=` z-$zx;G9bzya(o|Eqv`6kKxp4b)g&T*PlWhBs^*OaqU~WI#P?BkI(>gH5#sx(x{w?n z5+S~is;l8G>!?S75Z_1D-9%hTg!n$Hen!N5Kxp3=^!0tA_I>T6@O?LUx1mwm_f^{W z%R#ZS@zV2d{I~x1`@Z%{I(eVO_w#1yxy{YGfbMxX9T!cqP~TTe7vBME`pKGNUn@Nv z!0cTo(YZPw{H>Y=RFR7areG6>FpDrLRq}M z?_zrH2A0Ly`>tjA&n%0t_w8i)lwBx`tM~0@IsIqYl%mmlr)Y=m#HND^tCZ40q?X4( zEe!#vdm4Znz+D8s0{_%!0DJ=A*97(gn6?|h>j1_*3*dPG&jBc>!ipM*PQdit&x0!Hr7lY=75PBP5@x(3emov!@OZwB2$L04jY7s4w z=XW2kAxy?6W%Y(jELPQj6uEyAX3yK4ryJ+t;f|k_uM}0SB;Hxb`tW&NN7bDJDA_cJ z2HYtP8Gv1dyEBNjTE9>9_OSgg@Hd@C1>4K0O*>)xfG)t=3ERi?I$`@{v3}qQl-?S4 zmcST_a;TnDLkKfbw^fYuK8LdSb!#hCjzU=vgRL?QR+29M-73T2K9mPJYxpZOAu;ey z)^&M!w;6J7T@{Ah&rsK3sq1p7OHCgvHC-+>sTo704=vJ_F!;0W;vTM+1Kw+{o%RCep?Z8@GvxA9NmbMRxE)%M!a3t#XpdjU zRbg5!%16J5)cFN@i&J^a|BooAbfXP{S|ZEjw%OEQp!^q>%Tw8oi&4gLHVv>M4RIeF z7t=mCFiz-l`WrHx*%6jsKfo2EL2x(WWOk^`%fFLvuN?Yrjd9BY2;&9fv#7(k$UOf* z-Cn+h{4|`Tvdn@Qh1;7{ z(r$w`H&xnK(u9ua-9+@@ltx68n&JNg3jSjeM`~7hINRla8M10lMg5R-7v>{t7C^{|X3hS`?~| zLH~=&%hvTha1S3@RU7@H8cL&gLv8L#+`d#Vs}#zFUIyY+dgZse6#0`9f~K23w;(B67Q zdALU=-a3XYJv7@p%9DrY3ENV#9ptTZ#9M`RoDtS4B+ujnzj1&gw0qX7YJTW$GxTKM znkxLmuLgT`50<5S+TapUbMK6SvQb6r(ApP4$(3l_p%I_H3WUV!^%^k&i;vv#6uCh~ z>7Yl5*hmN6s1a?yI$Yy^qym3)8n**nR`K8jKQ*YMKP>cV@m`v6t4ezdy(lfte8aT(C;(BC4{mX2jI{Vf z%CN<&$V#NN_!lTii`B1bUQ&xYD7nAia!4Mc#g_tos21O-@&C&$&b|eG*7s0%;Wv&x zwBRWa=fKqP0|3?nz>_C{`X1_TmG(38Uk2jMU<;oQ;CTQgR{=;0iEcLY@#xuPr-MEQ zSCmL`P}OgYgC+pz)4ANQI+P1;(fIFl0ba)fL!4tLZFoqfZS)(PuS9KP^FsilBp+;e zXsj6CL>U_X7FmfD!^3YH!v_QC6LDouy^O^ZAb+S<@D1a@e|Iaa;>29vNsE520(a6R z=K1qkcXr~ab!t{WRcY4*z{ZjLFxX_|{uaQ&A-scXUyDY`&W8RITu~yWp+nv>4V?j? zPYCa&A3B1c zQfU{YfQ=FSG5Hz6>AyW>Ahb&$3?)1L(+sX?2uShIVw7ZvUjd*`1Ro2LLwR7K#($>= zk|Vf{Haw%!jt&}|-$HF-^S88yFhiXNC zjsNae940*PQ)&EwvV`Yzs9(bKPXG=M&jW15Ytcv8a=Jh59khZ-asPOfq!p(D=o6kz z<0L$P4M`oINl}$FO27FJ+L9!lR5(mb{zRqCVIvunKY@7?lW)?_q`J=q5B!ULiNX0z zwg2hlm1MyGU4>-Bo3LInfsteY7LU)Mk!~)1LVN;1RVd#!c2A!}^^}I4)lr42=j!Mm za8ITx6`9c^z(4(W&Jwsr1*zmwAc}T@bYC`>Is>@WX;$*lBKNyMJQf3Du*$t3tiy=- z4G}{%M;8(Ngs3_~BVHilJ|aeGM9F*5zT*gNN#Zi1;u*@0RRvV0S7zf?5m#m>fGyWW zYKO|FnU_#**C+rPpxjEziK>*W_keQfoHbo#u1PoX@hZ3^KE4286(`Qp2cQ*Cr)J*i z@aFC{yu$z_=ZRPwcxS52Ww1hW+br@jw{-)El6-KU=%mo&(R|8qgxyG1B4vcVi;`Z$ z{NBP*#uE=_<`#%B0xsx-pP=#InHrKq=Ae}|-ZC(S!@=QIhID2hb-!ZKCA z>8Y=^Hs8uME3JdFPnqL(_H{7^1noh+N%%p%_`}zFcuJD43$-q6zWPTUWX<7qSjBv9 z-#KC<;nrqVRh5Mv$pN8b9~_?;B3VJzQp+3A(B-( z?5yI%E0{f|+6mOki_eDrkUn(u4pf1~U^CI1XgpqmXCZy{+vgZR9a@r%ZzIR%$ZpDW zv_^>#!#9Cd41bF?TUCjM6Tw4mKBVz@jhlre+2BG>)vfz_ag|Z{3 zRx8h&j=9rmZqj;sM;jV_h6?<{VOe!hi?T64nL$|YXr(n)HJ@fvA7^ro+tq1xlgM{} z@K8NmlGn%`mX8~*2Ic`Mu94>kKWX4>G539x*Tum4X+tZdzGYeV+5Rl$bsykCVA=OM zki!~EK14t78IGBS+iA+eE9Ri(Mqu@0-AL>ZZ`+(Fv4c0B#~HkrIUOp(H_=^CwnU zw#i7*Yn>2*H!&@gZA(C(9Y>e%OhA|KN-TVpP=H$eV6U6{srGR#?<}CoIudBVit8?$ zpMd^aqeCm(5+XJ5vj(foaSavcz!9+5dybxp%Ii<*tu&`Ap`aUu+YzJLJul_hiy&El zO^k(RE^F%N3Sr9W!0US$uVvp)`&0b4q5s|F@3)iu59QdL{I&2y3BnIe;A%n(Kdy!Q zJwvUx<=71V`c$kB)NPIAs!zvyR^2v^u+{H$a$T2WGh5X^#7eG{D6<-FU}0M>1H)z( zs{fX(+v>!$hO$x=uE@KERHo1Vc&_J){^)4rw$I79M$?#QNL$lLTAjQN_xv;}t;4Tb z)}~Q`)lfr;l{vCSO6O8yrHlrvk-vJDUp_}OEtRP%)3bwidO`XLxtS^iR#ycc)Uhj$%cjJTy8pM@`6PDN7k3yA)P6 zLN45D9cA>nz?zd-D-n@I#Hc7yx&76ssAGL~bV7Ef%JQ}4{di22RpfaR?B?&|qCmu3 zM)`cGj3WxY$n=Q_iWDYRiUn;@od9fc5Pgz`U6+#nR<8jG)nkTAHZ94pQY}s!%Pv~0 zpsQJYQhxDTWx4V;kAZ0w4gvFRvMQ&VAL&+BC0a<6t7#*3*CaLu>9Yvc90%I8;K{+0 zg5;?4Sk2j#=~o1xmxj1cW=6CIA0<@Y$OZYrS;*416j0Rnv-d)tA%p78;f?~ zdWK+Ye*}sSAog8MOu~=edb;hq9z=#2 z(cf6xmS;RUQd)*4;w?P7iKE!PBce;w9Xk=h|HWwR9e!>-+&szS(>omIVl4I!!lmhS zkH7CQ_h~|LpU+? zmZp!0&X+*V@jzoM@<8NZIz}a_7=A)CO<0;fA={CTCJSi-2IIjURnQ0@P*-7cR1_U{ z*cB)0P8xJ2eIq*N1V4r&1G~)W{_?VG3R6jYHvzN7tIa<1FgS0Dto>eP6If8bYHcihJ=Y?AP2#q zkeM3>2PH=jNgi%PIYySI>rTf&Vj;&NOBLiQ@ z)DvA$kG%gY21sIuI*Hg!H{srR$Vp^Na#%$7)7CLj_G)fI59;A!I!McyScy8ZkThK} zXbPNOXE+olR_gSVQGqvv^}39b#fiZ{M2Q{*v4dm3)EOsb$w?ho+fMZuAiaY(sl6C4 zEYrR!u`eMX==@!sXc|V(e;858v19kHhY}Y+Iu8C{n{v5YV##0K|UHVtjE|c;h5-;gk{V|R&(I)Kc`vCq6(^7o zUrmy^*}@Vh$HbBcatmmshprRJxG%x6vRnuWQPgWng)>`V!PJ`p@rwl~1NIHIL{Cey zrc_e+Vu7TE4@%KQ^jRd)$&#)~>#xUCqcf>A^&LFT%)iLhy$Ke%T9!qeKk%s5|3TjS zKzDs*_kmyOD+z&RkZr)SE!#54W7)>$k2N;qA!9Nj8IsXtNWwTm5+Fd>!j?V6)=U_W z44N4x!%RrR)U@GjX@B&T?9!B+l9o+qm(yjtG@-jRWn0dM?UFrgL-&vq&Q_;oJ8Y}% z?7i=PKJWYez4w0T2exON3Fn}D-~HZu-+lMpci*4ypP#Llo=1F$ceVFkfXyhb4Bcd7 z>J#NLrPjO%EpC&b1bI`x2s^hJ`V3|aSp}7^$XdvSBPx8UET@WAGdcZubpzEIpXRhE zFUnTu6?t`sxkDL$vXlpZiWlS&S0yjM&#i~o8X1Z6r)|3W8M?2k)8wm|wtVZ;`c?nu zY)Y25ZC!WBp!&Q~^y0c|CCHdRC-q^S`txjta{ofjrN{bmUzkDA^#!wCo--}^sM(g_ zzgTh%Nd47Z@?>^3kDNuALbYeGY>#(?e7Y?$TW?gF=TYfRb!OWlz2=rv%UQNM6}#=G zEO0p)e<0gUE?wnmA=@micM&8 zv+36unwG1!n!(K9QN&8s+P2EoRe856JRaf@(#>X3sSK`%t)DH3A1MtIx9_~YjS2d# zy0e;#?aD{3-~4Ej%oAaK2s zoCK5z*usCTWPs!k+5Ue_0=oyxG5F4Ag(u5Slg)p*W;p^t-gh39xvgC6lpE%90N`dd zZQ{~mwO8!imzAdmc_;u1a4sd=|01^K7@(}d%;Vv0Ku1k+hxlF5xn1E;pC&35Gy`Z7+psl2PJ6<{GicG5?s+oX8ba6Q%51`DrE90ccn`<(V5yKA7D=w_rf%b)o~}Ry6cNOV&(3s;}MPp4Ntg7DCXHcgY>qs zdWcs0PtBcQ_Ej)4gN|BQX4T|dEEwcarqtV2=W9B8Y=~nRx+y`cuG%c9zRn_!9xe~i zD)H0?Qf7!M+azA!-%zdYp%3#J9og}6suTI%1z+9f9&I>n%IyS2k?LF1qYVJZp z)kC-<2E@tn!aiPzxgDYQh)c)P(Oi$kNtlOja@*4-;bQ!EmLfvBv$&sCLWxcW>EW1Ju2C7n==x|FzYVk4W&grU+xB30a zvXQbZ&~pY^2867=Zj3G|G7uX5Omzm51EBgJTER?Gop@TRj@RW-Of!-1dVM&hwK}Y4 zmm6UDW={Ob*j;>NtgX6j-a$H)?=HJmGwxh9QBOH;vsEg>8M3;*AdAcjYitd>Q=8|T zuQuJLDTN``ZoB=dn!ZS$_(-Jd!+Lj@JHvUfy7^V^mW*F&nuKn<4LfYz?kSDDd#lw1 zUc65fRgJvz{9WZgsl+C6xU?9=NbC1&JX2ZKRlV6Q*Y4;}NO4LVCE@B`X;mldLtC>s zEzYrN@viDo(iRSiyS;;O4qxTzx$v~VWudNDk9mSUF$rH8Rbow_+A7$Dplc*7jOLfR zXF*lREoAb)pUGby6QG_dpX#8~L%5<2=^#FO;%$=yT5XLo>xSGj%l3=w>_^N1Wx;u@ zOs1t70k=Dg=SwW@$_)@ryRzlBeO>vc2Smy@J={6t6V*$|=mv;69_dk@%5wJNzCu-} z=nem3WQ!S3hhbd4>F;j1;K@jB=CjqBEt$(*$U>z&wN+M_MYl;b)jx+W$N6B@bCRZ0 zZjKa9sA|CT;&eHq!f>s=A0n}$4|o;r6GG{Jh_>LxI)_vB2&wV-jm;%3eiVcbmwBY@ z3{6d~RrZPht7Z~iH_Wl{m?`5{8^~udi!smJoo)rxT--@cp0aCnyUq~zWyPX;LH2~C z*S6{`5I=*-kvEScuibk@hEp;25T5tICw{2$F-=dnuN3VV5wg~{(SlL03#NsoWT1Oq zKStG!a^BAI%X=@?LsJ&fHXf@U{^7b^W2G4A)sk+&+nTLB+;OKz&RNXT>hl!~TQytH z+PtZ_=UIL<*$sZRozERV;oTVqm|D_P6=KqIU0fAIKnT1Mis6R(tvOZGRL{^{T7 z{2FUn>Gf?I0lKRou~t?=>8dKEz*?w6nn85bYa1d;t=utF+HFc)tos;F+He;-u1C6ye zWc^_?Xy7F3$+OwtuduKd@_F{%OS@U<^Tf9tGtMuUyn zvI_B)xzR-1)b4dC$gi0>0Y_wkM$J{ugH7Li^2P5x`Ox>W3h6X3FER^iKnX>O@s=sgUu2n77mb>->y1OBJohW;|CHs2ztJ$IoJA5^KAgpxD z!Gc7Tj-WKlbc{%c_Az+odu{!(R5ViP%yO$j&Ais-TRBQpeuRBe*_*O`mv&cJT92S^ z$VQ3wgJg^&u#pA|W35W5Q!>DnZB|*OAGK1cc15UCX`#*`$gz*y5N3hO8nUg_#SRh@ zQFf3MWua)s)|sko%$8SJqx=xir1H0B@_X$Eo0dOV32RaAnKdr+8rcSw3mc)dSpTw0 z*oa%z$=-ZF9m`HQjn=nh|Nbd?!ZZ3e8FVuF*e*Jq^iaX!_bGo3@+*sA4y%Y+qW-UY z?5ss~AB2nBGYhQe0A=+x=!0MTFeq#-Jr z@}vQ+xcqMyE=|;CnZ%{Do@GN>gW^~3vLX@)3t~eyR7D}PzW;8D4O3I*H4TTFM!-!e`7zy>UV163u)NpX^?Im{tWD5f z*c(kIVJ!{Wo1r!#)w1oVx54|SXi8>}T`cdzGU;l=cQCp*6 zkuNz;s-}a!A6`8Sv}nkyvDL4J)ziWwUePNjB1Nynie3p7WoV+j@II;68nO*+^#M=X z5=vc1U1UwfH(5r!gM4q$QHjBQBT%fp!Aj(-Ff@@3D>Ox}?gjUdm)g1n9aKm~Ih5|` z@NFOM0$Ma=G_F2cQ>=tk;lxd$6DPs4-`BO3-15n9H1*|BYAjMbSc`=&5I@smx**~D z@j$VAPc=x>WxBil$LG;jc@}2rrq!+ZlgO2 zO_5(OfP30Y4N!^=lu0{m7(LYCrC#d>S~TP}Dr$qL8nV|qBB#9;>Rt&&Q(pH76&39m z38mx|KvM5!s>Fa&v%PPeCL2Jn-mZ&ze%v2ls3RO{U9D}WhqQuyUS)wi=%MFa^ zR1ETry>*uFCZZ#rw3X=Vo-{!8s3&bDdI6;LnQmO;AZsiO4o1C1!Rg|T0@1zRh>@^w z$-+9+3B(V1vF)MQI4&LbEYVa-&F!A0zXK>ekywtg?oKbYVM!zvb>(!2bx+d+2DKH$ zmw=Y2?8v>wehN?qA?#@C3+6( zRm_+VMDzdJmBI`Rvv>w{v4vAwUcF-OgBS$Gjiwbwd z6-KjtofW`BNl1V%R^fwPm8#_E~JQ!PsAqTapGDNh+Er!kj$~yfzP#Td~x>NUFuV`zmdn+?{tJl4i)lC+pxVq>-=vK{Ry>fIA z)|Y4BX{fNqeZI!mh!$-gij9a)9eUB$)qry(_bzw4zlI8FBe*7ayXEH|mv`&mMG|i` zViZP%*QY^mLzox38!M#EFRty8diN|^+!&1}+DJR*$u`82=ZbEbvRW2}hC~dsgq(b$+JYHZ9B-K>dOB6CM@Y&hvp5(kJ*`UQMH z(L*5F4umBx+!Kpzs;_wUgGBdx_1lP2p{gIOuvDmzHaM~RA*$c&)o&n5g|_`*sZbv+ zv}5%fsh(1*E8daBf}2u;o1#Q?1b#XRs1s#qXln921OCgmDc1@wwE?Q`4&YthgV7+r zl~|7#+emZ?NP4)rM^k%+l-}|cS!2X!Kb_zpXX2LEvVcV!u?n;`fQd{s*=19B_hVcR z4iN1D$>N-)wFM*5(JDrkCJM$dJ+jh6s9Yb#ATHm|o>cyZ>Ph`XPl04^VCmYU)~~YoAu2yWFsW4;BTHR=^!5{d!IK7vt^~i5Sw_^iQnrMtH6$Wpp<@7Oc z-4Ibqsjm2ZcpL)fz2HDQ?CJD&4GaSvFG!&Um!RORZ}tGuKLkk+2wS0nl}L23d8{N6 z*i?SSTe%@t6gi~{_3rW}Z6!MCO?s!B^{@4f+e&mDNR8P$-C={NovI|=QWM35G_%yp zu~c;P`x@F^)U_d&+7Q+iOL<=x7Dh>g?Hcl4ixkH!k(OnUUhN&dtU`RPr!B7#U*~Bn zD#ZIe?YRnZTGg2KM(g}h@Q(qOVrz}>+sM+r;6C7`HmnDC5s{G#Ceb4Yd_+cyk3VD? z>l$D~Hb^u>PPOqJ^&14H0GqS@*^2JUO%(e(O>e6sPspuZQigD44zI{*&nRd+z0_~$ zD?^K$Dpx?6@>jGP)fXCc7B!y-)V%=l3!t^g;C@SrUoYr+Y63MfQf{(50?%Csuf{{ymsgoJXdfVbNz$X zr&1NseQ=;Wl0x(_NO|_oScL_KS>n+Zsv3s&rtBNpqm_dwT?1^%z9sa|3d=V^Z#B9& zs15bb_kFr6`xO^Mp%K&-`l1UumjJ52i1&gfYY?Ikwd5w)Um&3QHrPI@U=PF87#-BeHPC6W_Y>E(`OQlsLyxm;`LhUaVXJejQK^U0q?R z=b4iDG8ER8iD8(Wf{AAUWjGMM1Ow#_p3poYg;feEtT6HFPiMCoxDHVJi};eq?V7y9 zGW?XGqkuw+l}GmpsHn#)dOcQDkCnr)ZW2(&3DM);@L!i7x~l$1G4doH>Dm=&PQ@#$ zI_RsCS6_f1@-#Vb0e;xiR#b=|@wDeE#A#M)BEJs)!gbO7OO_j8ZOXoTWOs$7LNI!k zc?ts4-ljNn^IAK)PW?iBzNam(5byA`6&2#0p7vaYIL%76neo=^<>XBV;41;8=T`y! zg@RPw?O8U0OJjb-j1t`il6i}zuX@HIqDQM3{eXLtV`6kZP=>T=InY(DofUqdaHm0+2by*K~6CwITsM8axZXpsxcD(^M1yax1Up^v@S#Ny6sGK=FN z&k^oD*{{iJ=)ES=XdN`wvhbMin<)C&&VnV1Y_d#1OKMQ^+JO=e@q?bWyh8ktr>&?E zKkRAGRfyB9RDjaW6L3%>pOA%~PnphZ?1mH%tDwIVRfQ}PR;PByOEB1a2ryL{ubnLM z5I^N<%PYiBd)kT$aT=QP8?Rl3oQ#PZPg|5v1127ciKSkTrJ~o5E}@R1u7Ox8+NexH zidjO;A<7gnW5PIiX9;5`rc_!fRnsX<96};`>l||9hu4fLbY!9#O}Cp0r{iXXiH0l} zpRhRcsgQ)rxWH7%@)giEfxYow6N_!=Jdjyz2ia2Lue(%88Uq9(wJhvKg^37fBMO!% z6_TYDT2jN8*E&l)#JfCgd4+hlr>&?E@A0(fD#U44YDm+~9dJ-0Kaqu=PnphZ?1mH% ztDwIVRfR0+RJaVb_5!9V8i=K$%*ln(G^9)Et2FMz!4XTn&ZJjJMY(+nbrf|C#8Q!k^hVt- zKUn4RRxI-_ptzP+s&a$ozTi#Z$x>|zgpulH55-#8ZGakzqLDxLB>AfZvZ&s6= zFb(wpg1eR#bV11*tD*4L?Iu@Z6o;-!jZfCwgUXbL_!3WBULn5B(^gc7_j=lM72-52 zHD>AHHoy6e(llA<^OWhlcF|WKZ@X9pBP-=4SV5L_uImoEGi4CFdJTA$hxl4glLKnt zeV(?WLY!8l{Kl2dx!P+yvMd9O4{8!t;sS%3CoN}TMq!HD&w`|B_84@JZ*V}_(@M&Q6Wx4Q-0&MtB{kZ z;Jn3YAQ33B)a$WSH0xbL9YtLOu~ancUFUh^GyXWC6DSWQ6Bfo&ug6l6h0{@81F=+O z;f=@4G9L9N0)i}=KL!5oKH1`;G#^l&MXRy;!8YDCK%w$ zJWVDT;JuzE6AW-#mWn1GYxjfKtY>KiR5=MI%JXky8S070J&39%WJE^ zt31S4d)o2}@im^dqC$MFr#)98PRmkJ%R3cqI7W6iQ^LL_(-|l)-Oiv~Vk>eL+}SNo zsC$rfcvB|P5oGCQesWoXrL~|+M-Zj1bVsa#0J&2g!D~a{RUYEQp0>O~e8kgMREUpy z+H)1+v@F#T2f@!yQd!(Nl3p>#$@G*YC@wE50NJZV{^89a_XxI*G1cgSbr22iOve8^!byo zOing+Mpf#2P3}tK5s*+zqWSfaVntCq6Hcm+6zi_XK?$EFNU`qdA<0Cv*GCFc}%iU}oCo%BJ? z79UWICgLGM3LBP4=d#6%ht~Vxi>usR2T8JbysSy2>I5m)9xa;cUiL_yNtqETOw16m z8BtzI7+-I@W9{|WRBv-GJZt-cQ%n8+fau}pj3m3*OS@S(2BL%sQTYX^Nj1{(v2X%J zTNAT%5>$~Uda5kV!nrDGU;22dq9znN0IedHy34FA^i{F4w7$&B!cGvyP@=oad@SrO z_=xT+^M##9cQ5nq9wd6aaKz*u7U($nDA42{7U(6(=tN7EPVT8yX{WDri0B$m+C-E+ zE!{bl==M$QcADt;SfGhw@6>J{ zfNl~O@J^P(d+wkQ$Nt6n>VqW&lOw@u_52h zo7nn&AfXBti}w48`?T-PRDl!vY1RIIdcCQj+P1Vb}# z=oT6}?K^TyY-seJXeShPdnXLi31UkN4FVh%%V;RFhHE=|koV zM7u%CvoAGNXc(=K&tb$yL|>8UK;=ih5np75MV9>{b#tK0=Tc(b(YH~kn+;7YGIpW` z`+ei0uSSt&0xXT$il{$Bp2QRtv(!;j{Iu01hDG6tXbh0$pdVmy0ERpXgJYJOHSPB` z$&Z!*Kj3N0E5r+nVi)d30B|-=9qNWWvJMJIR?HF|^N{5rYSiIE{E(-~dvU-Idz!o# z2fVN{_U%ms$~53CdFW)$_h&sAMNKP)aF-v-UnJTMl6=S}KJdB$#hI6j($@vBkTn&w z>mkm?Ny_6PPr~CdOJogM#!#broOn@t924geLtG4|EDU)P7RD^YVc3x6nvdFL72?-D zZFz-wVNq=LS{y_41E#DFdGhSn;(iX95+@d9>GO3->Ic5g)0S6=ulKYS72<`RaV+!N zsF#aB-VpLgTbiR-kD27)D(nR^4f)#SDHPzto+eMB03Y!*c?t!1VQJi&bKtoSD4V9K z-7GX=;XF%;Ez3JA9UycAI&Ky?{djJ!Q}>m*!v@j-*5$UGVLdWUQ5ny_WVcGRq(9!R zCiGv~9qM;mMb=PKcO~kNYw#1z6*IcgywycBFYRW5PD$Lw3cY-1H$&|FIP_{*)(=|9 z1Ab8qCdN-Fn!1gf%AKi2U8pNjUE2NxW2`GW77SUm)nCoxR)>6Z<)EcVxE_ zXPtTex;!Y8Vh9y#HVh8)kV`#+(U&DnL?JVjFpww^; z=*@yewEdGjxr%&v=6So+|AIkv*a+|ofa2#%K(801{*@*%2`F4d_klD=7Dw`F;m<$* zwQSJ=&`uWY=YaNn!kae+<9GQ+Y~Bm>KtUpU7^GA$AA_amyv5OX)A!=i0YLo;ZA~qg zQD$RF54)AuSEC(j261{v9=$n@%WST)vB_(E)BD#0?Jr0NfF3JIM2~|cAC7B0*jQol ze8G7c=vwc${(hkJa^kt5`r0&ft2T{#8;00`QEx-^G(jH%a2Qa%L;N6U2|JH|%3|gW z;Os2l`HqpoZaR$U?^tEmwFcsypve~L5HwM3xrNsgthGj0g0)r$g{*2fjah@ymw5jt!=+x&61j~mO<+lNP{@-Ag_tFB zB5P>BMNNHh@GjpM(HSpU`oW?G6Cd_sQF0;6(Cx59m4{lALB=XZeN|EFCd(}hCQG3u zvL<8^YvR4n2;9Bb$3UcqEMvFm8D862TMaKwc$R2!9u9%t&xBB^dv9SzO~#N^mGLbrotH_ohbA(~*S=HLi(Ic(G{w z4&l;H&oV&tmpv&O4V|mab!!2|bwt~L+%Cxvg%RxpDecWz*C2J31!Hfyg2^0$LL$UTKY^ipB_#L%uoxOfs! zb^}CDd$~OmQA|2CY*OO$t!Ke<(QAnoT`@}(Pqd-X64^3_AQ}hM_$GeX z$6R!9J%LO6JxerlCUNPQXBh|`(eV=&)R%se!M&;drwr`^Oq{$>>HwtW*&d=)bZ?d) z!lH`5sZxnGM|qH%C%iphBudS)#yAGevBLPC4otiZD8KODu=pomt+3qhD;f^9k+qi3 zsG=qNn@!*TyZ`*(u{`8e4#X;rwH}rKsXuNnCQbNLXXxmN$s*MUBZ@DdSLbz#G4L z3h2#()Cv`Bg!C~{cBp=!x$A4$V_(jmh$bp}Xu@mU7+3N}TU5zLRMz9`C23ybK5jqUJOP-v3m&sX6U!u|Im*N}VZV}PzprSJC}$J>-ImXNtimFd%`HzZ zay`^M3cnl!OiW=h%W$ZL(x;#$&vrLORfSB6b6LutEA+HRdP1heEfLCJD)h8PdP1f| z@9q4wWu{$#I-ZE{2Q6_tb`|-&=QAd*w?2rk0!?~(EzorZDRgWrE_DH>Zld(z+KA_o zTXw)l0maA(pce{K-&(V86fku=<}ldLd9i3Eas-#o)@HemOE&?vCgSr^yFO`Ghe1c- z+_Qk%C&bT#mKZ`uq57n6>+&cfF8z%8<0_y;DA5}rrS~rs{10AmkZ4&j-oNaHz%f8= zOc(>5xYp~H4-lnz+Nw}+j=ZAsy0x%E4J*CUexj>D%ClX2DlGIBe4%~oaA|$PLbSiE ziiOdFFH|*#OFIh|qT^*%EU^8FF?jTI*3$EU(w9V6{j6OQDWYpYN;~oxbld<;^%8le zz$2eYIJBq25+xHk?+gUGy;ac$X8f~e@Bu*4LiF!>(q^J;dAcpswciU45k zuqO==rF!8CyN|lp_nEyZKOIKB$G{_idY*L>nVhe;93yR>+B6mD&~moNHbFiqxyF zfhfvjT?v0h3#9}jG{Rm*8WiB+Qi%993(UI8iXd+It-2oj|N8AC+N zy5jM;3OdHTt^uOo@T84IS##R1u9vNiy8xw)L{IeFC7I4I16}6TN3Yyd(Gjm`kmzx* zXai9ywBTZ?P#;aqvHBsZKj+nt5~V^_KU87q`Vbp5O7w;&4G}Gji0(GWMr=Hd=AHq} zvu`z4SU6u08!GdE(Q5AmloUX8y(bL~0UZH!caO$U7%vkiP}o~0?nmKZnRpn5(`Di{ z6s`lxVMi+**#;;xaYLmWh1F#u3u`>_YmF5a`aqNh5*_iRA)@16bfTeh4TULBoNTPH z(6+%GC$5zr*+QY+6NQt7`5-oAul4|4;`zSSTw!5ZLChaef^!rgc$c!*rkeCm46(nYZeFcfR;7~zg zCOBG|>NApBMVz%w|u{5{}=tMyxdeD>JWTeeU zEX@*2=41_zRXD_!`5+r)2p%a&CxCYNI2mLJj)COb_Sj>7crt!u#YuFk%-Z!>h2?3l z_022_v^UR##6S~;L@(nK{TdErUF{-VI(!7ZNwmw828j-P(wk#IcY4w$qT`86bM zdLOW_Ghn9+5>d`TDoMPE%-0#2#We9c(QbsHN)qQRA&(9cG2Ilth#qldyL(E$AYS-lN9>CoVY}7Tu;EH$_8;>jXa@&XuaET|L|1{7XWy11 zU=-Li`Kd^vXK+btAkLgF2VxmWGeF@VII@$O=#HpeNTOEsH2~c;Va~ zwE~TfRAYzW=n?Pm zq8tmN>qrzY17Qb?Ap3e8eJ+BBfFAaw*Ny=FeNP%Ddd8DpBg&8wU34&=s}Ac#*mV2w zd94TNOP(}Lv?o#A=6{KD=xv+rc`?o{XE#tO-d+E%&z9e0Ik zfj(Ac^eCODG|po5p3;IAXWeiSqhA(*>(F0CjBM{fKX5V>u29i59Ktwk)z=~2FZr&4 zzCOS_`_;w@3#`n2Y=?!S=FPO778Ghp>4a^vFrC`XLSbmsgJuPaKjbA z#64EZU51?afasJbZH^Uf=fJ(-LuPZl^oab)oWt2Db#px4bQNIo z+?W&Vw3pjKlq-uo`&xY7d}h6E4Ay;t+lT?8tw`e1HCJ}C(B_G6UD?e7w|0pm)L8!@ z^-uXKUm;3`b{NA_p*}i|i`5TN{SB}FRiadAhcPS_>Z6mrSp7z-zv-JKciPA_leRGs%C`jWZkrTb{b!{g~ zOH|iz!VSY=@`=@Nq586}EeT!GBW%>gcx}wSn-Qn7M)@6i;%vC`h5x9l2W=FdR^m&1 zyGQ0@NKjSc{Sj(nvvkTQoW{4@XYI1yq$7=G4Sy=`bgL#C!0y*r<4zw}QRhi@i*=$CILAehxSGdq3}I zbD}5Kku*Z|B1r1>feK4(M529Ezs{>4Bzn@T-%gYYRsEn>f5S5l5^efyB+iJteQL868A(VC3b_j&7wh@SRFy-Kuf{ZPXCq1gIYW9x@v>tBtnABwGiHJprS z{W5R;Mxv*@^{)^uTffm;UpVKLTI$z$^_z$u_v*J1Evw(;)nD<9n~2gQa>`D$&3D=+ zqJ>@2b6afokhg0y(GvxU=oyf7;GF}0-qV&>E&;y+C{OyZDeO+!I}mOEIg3kqR;#PR zLN|zVPpKE^Do@(n2XuWwB03C`)3z6dqXpjypce`f(TgC-%70IVg=?ND*4;#bPL_rd zZTJ4(Oq4a526kii`Djti$jsD{a=f%8%9Wwh~|KY4QPV;G=&0jvfKJ&bx8cTMLp-=+}Us zfi?0vIZ?)u#xL>0Khdps+FJ5YJMpXDu9v+LaFZC(o^V+^-AC6oWG@pfd9j^1y(w%& zX{*){ruBqj%t!q&Of)eY?JG#kGM5Tc7do&TPy}mLSLzH_H|`aUvbsYBiPh0V(mi30 z5E3omI81yKUhIbmKUPG-T3pbdhWUoPaz^`->AA3QGcDv0a0wx_(Gf!{ z9kG_D4#OOoAZf|CcgwceQ`=}q;i+w*6{0J&K}a)O@JejKE3pNy#1^~~TkuM3LA2&z za57cN!xBV0y<0XA?ee6peL#l_646nRTBUoxmFb79NI8rv+VOJ5cYNXQSL4RM8aMXU zxUsLsjg8iCY%I-?1IXCj+hYs1#};glE!ZAg5Uqb>3r1oKMq&#_VhcuM3r1oKMrwuJ zY2R-(mfNviA8Ow$K}KUx#~U(njbb05klPyL%yr>WW>M zU3M~1meA0&DTBok!mOu-mdN?r3k z%Mj5{kmh9X$V=ay(kF{5q;=z3TX9ViJE=Wh*~T%ThXGsU&C^zSr#3b%a`!bfllDkp z5*_swY#s-CupqH6)*%~6qJ<}-lbR(^u*xeMrtZB3DfHhIjJ)Y{&=#U?UTPyzS|)p; z*rMpzFsv&vnrgfl6KAeaSEF=X_^&bhN=TC5;fwh~ro_#?J7S5tB=HSl4eWtRs6H&G zZtkUN@i||LFVx?hZGErxy{?els^o2Qr6as@7p`oVi_w-~ZgFu$u1D`<-BNf?=Bi98 zo|V1Vp1d$qjqQa+dxzx>vD>sMY`uhgND9mC+49}^9BTL1vImzvJ7XU=%NHvXY?@$N z()3*^dT7WGKbY%|`UGR#n!%V9y$YG0X6nu@?}stAE?OnatHr}nG|bW??AET%=tAOA zire8$R+iA23)<=qUZ~HJwq3%?!)kB|{FGY*r$xqA1e6jwR zr+(XF*-(F7Nu{1%jTJ|4!_<`(qI}$veZ9Tq`Nt#A*O9stED2I*d8(@tZc30+lA-p* z=}LkWOMPJ8{Kk)#H#di_3d@Ofb4M&u2gF(;TWZB_9ikyiDz*|E;shzwRF^}3gjyS& zJSPsLV;@DcP0UhlpoYI3x<9 zM9`#<4HArDbCYK-QNY#OKt+t9`m{Hr4O)sVRF!x-C_##)qMJbSSYXH%mJ>U^+49); zujp?w#NSQ6#idwrJ&`om*Y(ZGrj`dQp_Z_mFgHPpr6NDvnQLOj(Y>gcCGtbeQiqm0 zSfWPWQAKr3N>OTQ$-b3bCC3Itq9IFafFx2-f)r{>1V)1N!AR9WO@=2n16Qq=6s6DZGPmt=8idF$(AxKO%#koCp~F^=-w(>mJWKxXq`f9@Asw+620L` zTZz&bTL!U2dnDkAvSwLT5#8sF*h-XkrB_w4X+t#ah&OG7D2-8FLlu^2k1UXg(jJL! zqGdbc`_Zu-8)?UNZ^t&GtXb{Yn6P78Y{y30vERFB8_}|9@$GGz)&V1}uxUOipoQIC@XpDHl$dyb`RXR; z_OO-JPx@~N<(*c{&IjdHj~M?N>*Q>*%gWQ>pLop57w-Zg0DV$!%>Lx3Y5%%szz@Fe zXRW*%w+h`V?Aw=WL^W`~laM@IQa8@iO9% zKY%!1L%r#Hc$E71Ly-Hy&!5I?g}$SoGJmpvL$yj5|NRp6@u!52f|0*iv;^e~FPT1; zr%~?0^$?i;wbGnccd2u=$;)Stto-9vJ_fP zGbj(kAN&oBRdzZ0Yx;hE5A_Y<>)-pp$b z5tP~fQz&=W&_5>h#_X5BN&Oi<4=j1t{cA^=_3``NqqxqmU9U&^68Jk&4uRG8xo`XW z0)`uqZvvek0G>dZA0%Fe{J}3j9|`oZxI~b~?4+dkR!8DTwb>r>5gPx+_sGvL;`Wds zfcvG~nElZ~@&}i1yU1_s){3v06iz#PzVn;3hYxnLKZ~b1O%q>gI0T0eSMb*=a_#9 z_o7UA1!cn3*oP5Lq8#?e4cK!NkopO`ptl=vNl-8AKLh&v)!%!Y`e}C)UfoAvYYc8n+Nhq;dq{Y(B%$aMoQ0UWv8^c?$u^o>H_ zB;elL)PLkQ`LBV0B(Q%a{1W=(2KZa&TD#i;>y=-2oBX5T?+xr*Qp3J+@b3dWaGUZc zZj=8S_?rUzx@y>W1N^P?;6K26<(DDudIQ*lehK?4_$A~ySLly3=$BTUdmRGgIatU~zGdKB3AhR{7bz&Ap8ztuAe80w!wy*B`-0axN2Hst3x;`kt>e+YR_OvrO$LY@PM z`nw)9dq;5Ydl-=Cz#;!y@ORY7-v|D6fa?P|jB-<*`p7>GxtZ)e4ZbsgX93Rvo(H@D z7`C@wxr;UAJJGIgz#c&QJFM?4uAc)u4|t)|`soVb6yOcOn}GG|y9~V{Kk4Jp7uFZ@ zUxA)$fKz}Yb;@^uuM@Bvum^An;4;9l{*bR1d@BK00j{ng&vx#`^_l#+4}1pz4+64( zLi>2XWEl5J#sNlL>pKPdl}9bUrUBc#th^F%5-^m% z0Qrl6m#7c06>`)U$~U3Doq*$jlYp#$74)nITvx-MQOJz}l7CGN{;=M?kUIbv*1H~h zhHL0M4Ek}v6M!dc@K1x@_L%v*9dJHi=&!y-#&;cXXt9-t0Ve^E0*3NKkQ)UY3-sNo z{6XlU{Jt6L9|r#jU}(?YI`y&M!{9#xNdM3d!q6YJT@YbJ`H~Qxe0P1f7_Gh=XSvPfU5yR{=J~@1KbaI0PqmtVZcy+ zCb^LR9Q2$Aya3pSd=v8bfW8WFHDF&2e&(%lT%Q0uR)hZr=r;kU$%lAu1#GJk-!sXD z?O6sry?`qL$7|?60QynDV}K`X@Sg+yDj?&8aTeNh9dXozd7~4M^GV3heI=hOBII*L zgxpUO^0^{Hu9FG*ToECkDIL*A)hM> z{nG$KE%<}xA6{zh9042y90!~L+`G*92#=slxO2H(CtSb6%7l~8S()%K%EtiD2XGqY zzK@&S2;eB-F2D)Ey?~+r4#NIJfJXt30UifD0eBK{P0+rhD4zgiI|=uq{rk{vwv&+U zWqa1wu=gzLzXEt2a0;*k^%I8ettEFOkne<^P<}Y*$FO}NKieC^qwqt>KMi^aJJ8=D z|2XLMBO(16@}GeHX8|t&E~#M;uU`e<6yOcOP=77Hn>F|u*B8-_OMq7ZuL4d1hV^y# zTKx9_E&=QXTm`rqa4ldzV5qN_+?qgcw1)gS(3=py-GGd1jzd1T7}j4a@7*c=cJ<#b z|Lxj!yZS$D{?Pu9dVL=?dpVEuIo{B|_gki3j+anh*k649_x$sg7p4IBy<1j0L4FCY_X4gAY#I zr;MMF&$);F!+I{FzH5MCeSN5ha6QVQzFP9Vb;@5y{Zj#)rd>gWHTh^CV0WGMhkl@c z=|{p5_?K`D<-ojb8ue0+aCM#X8Tgt4NIf&vUrUbigv)B!&;BN4zwe`eg9ek2ko-Gq z@DG7bID+zM4Su$lkbXZ}!+!D+l7F%WKl2{*8zJ=*@;#8C`5EbaFNBcqg%I++5JLan zN1$-+Y8%Iw0IvYv1Ps`-L!c8LM)@eAfamMv zKLWn9HTY>SA?;qa*8H^|knf3w?I(W-+aMS6v!B^Ngw#*S_sl|h()r#QA>TVABixA>T_2?Fsj1VL9aI z`)sw~{LfnZI|A5)@@l|7z?t-i`a=G_&~pIrZ~%{^d;&0(zt(5=P6KA2vvN0J58x3okcyiPjb`wOp! z_T6rodifsUO!8s<;cth8KhP2WYDoB#A>r?Zgg+J%)_3jm7C)Wq437Ss!EwL?fc$|T z{wfcD6({^fk5K>lUod^w0B->DM>q-j3!I@mfBtpt7fjE3K>k)QA%Cbhl%M`ZlUvzu zkiYG`2IY{SKL@=8*ZG^!gdu-F_=W&S0vPhI-C%Y!4H)DvX^#w9nLk$Exyj1ifZ-39 zhd+(YA2H`IdhPZ{pTFHc0{uGyLw@p2L#_vQ(q78ZzHGDEO?yIp{MC2J5L$Jk%G;GcWMH zU_!nZOz7VW#(3e6p%U`FU_$mcA>RWI^AG8KFPM<;?S}lfTMpZM9r18@*!m^>eTWk1d!jI3BQ37>e~r@@5AN~?ftOp`>^$g?Fq{tcKx@j|D$f-54t@+Xn%zD%~bwT z_s0*qeYacR?efpmpW*cnTL1gi_k)(d-TH2qKlJxZT&d+Up?y!7q2wq;Ad^!8gz-`er^wl6>5`^?ym zH@~#&nOEQZ($XDoZX5g3$o8dMcZ|P11CL!E+p%@&tJ}6cBg)@?JE8CsRGEcVZhd?F ztu5QepLt`;w$UALZWps_vd+{XSUqDEudB6W&YUxz-KH)a|H{toZ$CSl$+xE79v|89 z=J+%6|II4GmqLnM%^my5_E!XN%CaqQ2$awFZFys4`TZ_%}^Tydt0-unwLM?X)Y!gN;x8&LEPJt>e<(7Pp z0_c*DkVx|yn;L~ls19?rG~cbb%4!|C6&jqP*~u%d!sf1+h)QbhQoWhcL0$LBl{UF@ zH#l0sFk1|3FH5viVzxF_mF0PpgVG2yGH=Ou&F+@gWZLA}@?o!rhUQN38$U9W|IbdW z?6^)ku0Xl~2kQl~fM(hiI6s zYOROluUs_CVSi`--|TV97mI{c;{U3H^88YHc5 zOKsM}&CU6o*{GJYgw9gk2BNNk-z4IJM&=&Q=K3+ynu^8ZJL!}R%%1d zj?TQlriO(r`6t}P4%j%)OlW4AHZ{+q&n4iOYaJ4dO-hrB3~kVnqo{eKz?v63{2f=3 z26Pj;ZsYu!-B}qi~ zx7nvDk^a3svsb$ds^ng}N;O$v<4{Ux|CIrzaLt>tDff(Z~mxS_ZXL`-_HFJU!U38~7LDXyh?UMYm!gjyN@$+c; z@22FsMXp!mG>dCbv|`R+kNDVyp-*d{w%EaD{`-YS5tkb6ub-hl2G8`+%3KKQM9xf_ z38W^MZ<^b!V7;NqK)KbXPP?#2=fLI#xFEGPHp;f`N5z3y!HuVKoYpEFD>UQS>sbXS=X3~&qYGIU&lsxl>l72~fY!Ts0ihy>8s|ggWc}@sco^_efok_t8fk*7 z0d6{!c614@t6mp@%Je7;YH~ZOcmVJ&w7flk*BR*&qDnnb*kJy809KMi6o^9m>ldc8 zJ#D z@KT2wbJgDxr{rjhWLbJN*n(c8MH}iDjBdy%g}f32uBi)J^8d-CXXz3|S&U@Nmi*^Z zA4jC-XBkoEHC-tBv8LG;d&TA_OSq#TYm?e-zu=VR|HM4xYGm_@YP4_WvT`^RWtb-(bxXPC`5c-$h}3KI0owo_ zr{)CT8{Cn%V?(ApU5z`(DJt@p({a!&9r1)~kmJ-%yRW@=ZA@3J<^KGCKrEV9(Cf~H zE)=l*6V<=(u3Ljjp8LslI)Qmm7eR)#rf*vClFeaO?JB_`T`-SizLKsYetTFMG&5} z&U8H>4ifhAUmf=Uw<(d}k{)xROmz$Le+EzU(vRxsSdjlyYiWb6&gBG1=gIHp{V$7QsQN)n z`3rE>>+$W;BMX&tR}_&|l-a_mgKN?rIZIFm*K$RgVJyAaoZsb)_A9x2pnG1v&`CP? zYO@@NE`YrU{DCW1Xu29zRxZ(-AAnhUK&Yb4`RnRcYd*Totqs)Gt`VrfqN5Xjk~p${ zdz|g`yj+dn!z*k#)63oPqK}HYR^u9yPodIgITes27p*`&==|VZi6Bb012J8Sa&=7F zer>b&B@eA*dv%wf^>VSQW!h<7`hsik+Q_U z4OL!!Si)aBjPfIsd%Sk3wJcNY?X+IKG8YEkYLADbuD_7l zb)7rg#$>Y_5;8a+!K7fmQAesL9?w5Fd#ym1K{PI^N1(DuFFLQul*_#?KOCIzEzQ&2 zsYm4QmtXDr0MByXe*24Wjei7hZ)VQ0+da!^khKp#9-GfCjt|_KhNk`{ z;z~_n4G7$a&9y8`qSG9yRP94XCzuA`zb5$j=Jr4;GQKoT*mxyLR((Btb2& zk}@YpJz;T90OW}aw=>I8FHd-WQTWuja#`i&H*lPu&jPai63Tsms|Bk3qljD|o2%J3 z)Vz{C$HTKOa;R?Ap*qbL3(wWisT!32LM;u_Ch48f0bBZNCndCC z7fixJ#ogI%eo>fYY}kdLu!4y*GPOQ;0algiY9Vh9C=c7o^K z!5Xf{sw%d^OV|aI5Te~j^7p@lVox|!Q)G2n-28V^c8kwxM=gtW1au3d9(QVs*%yrX zyD-%K`g9Q_p9hqCf|gUHFU&5tXx4H4FztGpG0DT#r^R56ndPXJbdIC2EY{nOgSnaK z^EyzqJyNGxaj$69x-}Ry0Y4}%)x&RX+cLp<1oW`d)naFc70mJ4J91^hsnLE@ajip` z9k*;PY<-Z!sKd_0TM@+HjdLGqtQC-nUGjNQ2 zCvDg5hI*SVb4wqoVx`b}#R$K=;Pk8wQ0x3sLtClQ=&e%@_gt1Fel-w7!7X$huXTL8 zDY276?QDj3dEulfmh>`@>#~;oC)}L|4G7vPhN#P=59|!aKg6JuyEarpbg4u9uEhnd zt_O76udR?P_D}-v0cu$K_9lnC*0}<_iq&fxGD-Qo~#5co?6^8A!$8#smIT{D_0 zdVe>=w03cYEt8%o>sEtxJ)?DKyS3bdSYST(lKvJs=j;U-=ISW8+r~YQfL)(6wCD@< zty{99KAq>-xiit#&N9DS?P9fJvKGe(4BK2AlXWW7zYI0)0X<6PZ%gF=R+O^`c$6fO z#h&7CPUL@9;`7I4ItQtByoJafyBBT`%TJ^A3`pHbs1NT&Yq$ypT{4E)@y$ndYq;@) zy3N1*<2&E^2<{ALdbYOu!B=erc9A>3^v*kD+vRBhanR`YEjtaX^Em-L&8k0G-TaV* z1wR3se@r%$I(Vc5q=z&b^fJE)TQzQPy|Hg8Lzg3EQC zH+3ypzTK?Jaj9t3ntRO}Q6o~KLv3H=Y0B|}oR=t^l`nCcI`dg5+o}#HTrkA$wt}OS z5HM@J?WT}Y26g)dy*;ZHv*n6Qwvu^Jn<6g6!(^JD^qMr=oGLdtto=*HWNp?XW_q(O zY20L`eo^Z=8RRH)f)p2j-s$X=?S#&fxIZs6i4gQOzY3iHkubQfR+ZY-YG2gV!eO(O zb+K)%sxlcHDs^ZVYn$#yhv-9jX0Xe}dRdFUgY`bI^6MI3;Zk%*RY$rm)T=M#$F2Rn z`M)wn=v=w-J9cGOE)N)JJ6_-e29BbYmMG_)G`xN55I|SIW6eMeNK1WJyG|{|hCVmz zXwoF*lNsEmPjeF<+soUX!VfzdzU;i(DYwcre)zOT18$kkk|*t~@7?ebUW<|z$p`#a zbpD;(^{O_7&zV1lZnWFY))V$Hg5kWrP`2S(uOHaDaIkPN-^d+R^UagEz`dT{>QYG= zH%KG!raR|R_cq9V9Z@C!)#ki;vDnP-S?B-Q1-mS-zV23VdO80uE{a8s=#`OhuU-=c za&2Dz{de6W_eI91RBQ3*DKZLdY&wh70N<|-7VDBu%o6n;zoeaiQxfytXrw#{ZJWHi zaaNV*o75W9Y$L^*i@Ic(JmUQ2PS4eGy6Dr)pdQu{L5J#UNw3!`H`uuH-clR+b?^K= zv61KV(kgQ}*WTr__K23XX5I?OksFWA0&s)0%{Lt0r8mx=}PSlYk~cB z{`+e#h?OJ1?lQ8Y{yC`&^MhD3TRi!`{VCtKN7)09=9k}ft!5-J_IOgra~#mc3h_}n zzOA?IuZ(AR!$TtCmo*}sT@^R`i?y@!|I77uSz07)E}AX-UtJXBvUid;ms*tn9oHSA zU}65}bvH~ienbApu5q@|76m$BCcCmpS%+o$b*b$>8L#Se8Ps-YKMT{O?zHqp01eJO zA1`%-n+mN7GBW1t72$ZpK{)}iWrjP@&?~$LzR0>yhQ1APPI)YIZ8Qt-s;tPr>@;dK zn&6^bUa}~{p=5{XRy%9gz7P|Ywn(kALo8bm=oVZLM3nwW2`61O>$w4WbOKb|JhR<} zgNwXG>TAd!bb8ywKg!QHa~9_JDqU!jY~54Z{1JluN%f|UOv%x2xA+{LFUFbBXRZd0XKO4kkT!XrJho!^S7emhUynZ64+!qG{+wAk3#!GoRB@YC9e`p? z=>HwglVt3AeD!^_iu6kty2c zO)cfsCFW<;T9N9onORmzmPGNu7`$*VBD}pwCgvU)hwj*qOUUZf@qw){wN6lih&hYLvF>8-q5nRT-wEdy{S<47qOv|H6STJc^eq^7dbXn@ zQSYt(y3H$+x!gNs5^oZR(@vE=NGn`oj=Ws08B9mRiyyIIl;g5Lst!V)muXO{pKle6 z;s+m$zsJ47AK9}PFXVr}MA2?oh0w}zYxQ9nkrwVY3u&P0aKP*JrWyJRUcN`C8YN09 zmOTCv2BUUPIT-&d3r6w84(CQ);Au?zbvagirOkwH5HvD%bNGMSz0R^mEPSiO`-;>HBz*c)S%W4>wvuruA z4>QaDX_#e;u(dF@4EeBxxs_eMmFdeS9)`UH?XUc03|a}JpH_!k=(x{3xXAfbB68G! z)qVYgi=0I*^0s(#UM|nm8cABVp0-_ttumj$%vz2ovEC=jYqn-xmH(#gj*A&Kj3-+L zCF18_BD4PGn}Ib9$|>rvRL{WqX7}_{a=ZF(|H5on|Ee`=B@(zla8QEAn~Wq|`y|`> zr+;DE`J2{G{alSsRKA@`KnA$at?%9P>;EyXqW2%ozioR{y`$+fhO8iDKC}IR3{uH9 z;;x%^Urvwvq^9y;;g#!)Ro>1i|3Ka|&$A65)Q$MDcXsTY;R98rk63-QUddP6pRMuT zsp`*6*{7w%bM8%jxt;V&U)r(l^|5#CHhuZEeSZ_4zf+pe(G{N^Ir{f=_&te-{Eo(U zw){SX(zVBVGffsfmV9LcVNdqxEfu#zG`bupSor8Un9lBg2DXzFnQVC7Vu{aZ^Q|Rc z10Nr8Myn0{nuOypqfAxRH)Axw^)%UY>3u&b7^^;G&RZn<6cq6?U2hljIM8^kY5H&! z`6;Vr=p&I*fi?6#FsT_%5o^XNJ06k+d)Rl(n#%^xV#%DKO_U;9&frFjm!5oWXeg7E2#`;0(s8>`bd1W8v2y7atM z`@0Y7NbdU)9?9XS>8c-}sTzYU+}Ut0KS8rVI+H&-*x`q++=aFX(Xp&up)V%tY>l$^ zw2&zR&mV0GH1Riuu zIwqU)5r<2fvEwi~DfC(qpm; zt=ZOZh`-Zqm7D2W#UlNyD{xno7ochHu9?DTA&l=YEleWt!wqsc$!rp#p%zxW`4Gaz7vQT%NdaN&dVN)$z z8?%obQkNMhs{U8oen_f6YIg_b=9kTo`<0?;*HIJ^IU`jy#M~zetVQ?8U{$k)*`OAE?TyKn2#*+21`qR*{&?ekD6v@iW%Zn@=bh!d>=7DywdYHY-je?d ztCpWb)D)%)7D)3{A)f^6!&@_Ao_WUwv!ub(mg1PZ^n*6)7LJQrW3gU(^{8pe|9ey4 znEwN-x0@~z!>lRjCF5)1Wp$7`LfE<$ftlW;zFj8gKRzJz7o8)TarfT8eb6cusUqt? zPVM5bD0;*hN6lI+^P0U`qTYhmujoF7p42yX)nF|v+yF@WXHZ@Y=r#G_!_h2*<+r&0 zw1LHY7kVR2J4EC36OtW(l=fdhQ>Z^{x5e zw?5$O@mzL`OY8$fWsPWZADcW^z6qd#u6Lj{`$z}cZq@gQP%PK@wKUiJd~2Qe#h=o< zHadFzD@Xpux7gzPu|?)VjT$rEhu{lE7hjqB<)qvGH=HWh#4^>NOlD{p|M3s49F@4m7E1F%j?}fvv&+{vGvs68zy>jcQ zP_sggMVPEfZ^{3b+2dB*TAOqP&gR9$f8#1v!&I3x-#&b)H(-U3kJ%zlZ*{{^vsebj z2|LKT)5KJ@cwnkksHs-#s+DRV*R_r^a5++)(i-LVym-z&B4OXOP)EuvWZ$Z2$}gBd zd=Ik=>bI8rtQu5P|Y|a0J`BPf`k8Nqj zEvtXVg{K($(6MtRGfpEGae4k*bq>$F^FOhps|ESrwtN{=#CzuMa3I!h*PRdM#{B;< zkGMgi9%;`1N4wu48OySogqCdqgkm3&^51)sH0tJCO;t9cgr`*}2@OY8w;(@Zn~XgF z7dFi=$bZ);_vU}p#0QORHWpUvlzL`6jmQtfMYY|W=l_c>%NOQn99<2nfFRFOk(^!`G0)JEne6lzh~1JQrozP;~Wr{t7;YjsZr*U-*Mx)CI2&Pu&iOP zV~*j2-*ZEXtfUgB5dTuorL3{8*R<6_u~}6gtXIM;d1^qJ7DRJY%ow4i<{$FEl%fD%jYDO+{Gn=-*YO$#Vov0K(PKR?b zS@y4uFk@`WzisCe5^HmuXsbLVt}0vt6ht3R(=zSD#wvf$%Ry61ZVyrD^2A6I+jl!z zS#MZV=D_t*n-Tmj=Tl0Ha6Sym167fnbErA(hCwO z;|`gXw>c=SGXunh^5skA(S?{o`cN0_T4vPo#)qDbC|%D+6gKfAu+PDoR@yHfNJoFf81Ofxrpcyd=BWWy+Y)r7P=5a^5Xy)GG z-aC2_l1g5*5sBMS0}ggrD>SBlG;y4CQHMHBmqk?YmoFM*G>UM)9R1Yp?t0fJi zd$ZL3w)8Vv`Jvqs3jn=;R@<}Y>W>=nWnqgA0OBX*Lo}{>Z{SJw7L3yu(uI=)O|w?= z;HOc`H062SJ~eoZY3{XI#$ozl-oSzVI8q^b!MhryKq zqS}Qp|G7MwKrYKnqgg}-Q5AMr7gY2~9J zrwUdLVYdGq`qa_i73o_fi>&vej$ozD3p#fqTngpQ%yrwW?&SK~#&q+P(#oWmS_~>-Yj^wh)Ra7Ir&MDIyMCBLFPX7&q~0=D{As zrDrt5hzk(bh$I(VYaeQ?_Z8lTfCk$YF`lQL>gzD*yPiz2N>Cb$v96063Zu5dCzaSF z6{Mg9z_(tBW%`=rdBvQa1n5t=|BV< zMV@kmFztomG_zVydbFq;yu^@wG()pecX-0+H4U_@ZUw?$CzTQO$HgSVadkQR>I?&Y z?8DS4yugdkD)8VH@^quqzt(y3`3CT&6S5RIq<#&FHb@yOuvMcQ zJilul1>YpX-!wjvEFa$Cn9dm_pv~Ak@{`p%q!K!YQgI0Bu)f3G<-3j?Fp13PlF4Rj zfePxv1EQaW#y12&-^^C~sawrAbBnyU+Gtrdh~j-5B+k~EZrAVU@c9@}R%wR1?{!#r z#cC?wIZLto*<<8g;o9yy9JwJ!aQ85-H%yaDFIK2EQ5yZOiM7DX>j}12Lv1VGWolcS zX)Vmxt%kP5#I1edEE=^4ZHYSZUz~u)PqtYnykuIRdGj=x2V{Si)S58FF@UhW_hH&V z!QcBjFtl2xdrhHwm$gSvdGW5#iWdh#7&uZReKV2|vUp~TT&h3@m!ZL8yTo}?5l3V3 zQ#&+2G{;@(HIi;c`u*Dar0eB-1@7&mxn6?bq*)4_a1O!ypbye2sNC zJvVWVd;yQGt~-{#PQYL=3z=%DQXse0}eg7@JoVi;Erz~hzE7( z879mZaXkwu*oBiW1Y{lR6G>dSj;Y;cLWD<`AXn9^{^wG2)h@M3rstNR#$ZVm8k7^3U91UjB9pS-p1XtJ2Fe zGhcLHXQl^BY%yBplR}^i`5Q4 zFjFj+ziV1z;pX+U#e1NoN?R8_M2wB#zmY zMLXHbv@}h>qYehC4)Pjr7yRZBc|&4|vDIjJbP$R8i7HEtR-h4V#B7710TUp`mqS}} zC+k0B#Z52Ej1p0(X2ju7=G@fyhv9HPcad&JazIL?z%#9$=R&^d8RXWYBf!?i-dFeV z_$*4pe|y~N8Cw(r(j?2<@4n?^-XZcqH6; zcQg!hEV8Jh!^SU=Pff_87||d^GcPE!&gpQDhdc-X55|3p;!px1rAUn;xInprh#oe; zU_gr%Fk67hzw3$9on`28miCmFKemRK4Z@+Uos znj0R^*J(2=R66Q}6N}VYL-(8h7NKRss%!Upq1)|)Rg9{|u+6b}lL@0$KRLfjCNl@a3~crBvWG?tr+8_b6O@7;N1gxwY+^BTc<@Y229wy7^0P$C) zKktHjQLUQG=lEs=-)zPMr$tq?h5^rtlPiD&S<_oeY-9grxj+L%-^#L9?8Q;1BcuPM z>9nOg%UpZSc@DVfuHgew!}z16@fb0zkO>Z-CrN=X?G*AssM83-nD$L{(xlpe3xKV{ z#Py=`<3=I$w)B1csXbv7jtMuU*UR^cbXdM6cfLS3N5!K3<~%&GB_z`8M0%RsV^O7U zd0Yt;A(~}bAaTTwl+w?e8vpJ8+vVBGqp=?$=qV| z>np7BevAG#=wfRrAz%$NeDz@m#A7PZl_aZBru7gLR%ECKJgAY1$kHMfUM8b4mw~vY z)terfH+!9!iO|J)JUy5g=p}09=GIOsn)gYP7BKZe`jJEhb=h~+APtSqgLQBLz>SKl zsaInuITN!B!Ee~y5up!is|D40h4!^+YtC69=t$bwd*FyX)AVQO87Y0fQ;MK+IbR9h zhO_!8DLXbLtQLE-_E%(O8wdZuf9n#uTlArl>lfO1;Ij0cQgW$N6mf7x^MSl$p;o1^ zd;!KOBDFb~^rtj-YE>Qb)la#e4+Ntlst~UR*#zS}A=s|P%7^n}D0~^k;KMvqt9bLN zu)Bryp1xT0{!r<`C0_*o+EQFAOtqqTn1kMqr&%2=td@-o8|kiH)<{2YWr|@T&gLayOQPJMT~Yl65v|0+M4~OzqjPZzV^#QrlkJojYdr^P zlc=H46uPR!+euzF;EQ=-&ChS?q7;a*$gU*{!)(+t3l@AJ&bd$(hkk!(I$XA4c?c(_ zX_kJZpAP`OgJl={bv~M@qI?>I&0Rh}wlQ!7;b}dH?E}r-NhuB_vPd{c(+L4wg1C$2 zyvkw`NQevKI4!Kj%_JlzmxYBbLFx#@G!pSaOi?VzQLa2*n34czKj4!{D%e?h#S6i( zF?0HaBLn8Bucc*cZs#B7yH-ZHKP3zN{DJboKGxxCAyZLS+pu=1`}9osZ@a%_5L z4%eE@gI1|LHaRn1Op5(@@pAq)MW#y@Ib17o6s(^O7Z+bW z?szW=o(KfBku8l>8F^MQ^Ij>NiIE!T&+Nqca}LKc;VOcsJ(EAoGRX$2#3id+^kuU& zY_B%#kJ5@*6Zsv(Q7Ad9&GK7?{GRjt{z%g4Vo+2m+ZUr7W!#-11hfnYLC$)ux(mQw z&cTId{-a_lKm7VlW&SN}QmPcy7DWGI2jj(KY7$Au&5%a&eP;4FtmhUh&Mq(XUOrIM z-|vty0H6&MCkd=@0!v#E*r(|Y{jES>SXE$X+0Juo786d4KRqf)ge zP%t(DkjNZr;$y%v^<-G0RmEB!u=oU8NNEH5C^;*_N^t$KbA3hT7-HXt7Ec>2UdtnG zBS^6kqhFF1f@ZwVkaC?%^)nnc^n%EBS@HuMSap(akhNYgKhgq*q_swT9TXLrMdXDy%AuL`{Q=VM5+ztExIlGcsQJI#N-;~v#sn|S zMQp{}zwx(gGL{9$)_AmHf9pbA+5<9Ri&bw4+%#$k*=I$uCQfs*|2ofu0_hHx)mVYS zih2cxXh>l-wgR!C;Sd-}`0S_mvh*rCO1OTvdC=bknr&avJXmxYdBF|`3KaCQ^MXSh zq`X+0Tirr}EP!OwG(<9WG^9inyhNA@0pMb^ZsKaZy$Wv-E$PloOwXu;L24aJ@yMp# zLNopbLtuyMf~V3U0pAh71}`Xqt1Vvi-yIPi6uw3Z)^2Agaj7~fVnyIvJLJBQL8J*TbY=XMo|O12h-+O=vXPH*tK0>iDhYo2Yw)}_ldN8E%aJol2KM` z=DyK>FT@D1$x6m(RaPdkP%7Vt?y3AYFEFFN9qye&yV$H_r{&^OX-l^WpR07Ow^|Ug zHw%+K0(Bh9f%>CXzaGZe1^1$D`Sqx;&+M`K`gcfRx;JEu;Yg`}9o0`2bc&%*#RRT2-3yG`|c_eTL(iJY5UW9bEsH*bF6) zNHg%d`brlP0GFp{Y^6fW5O^~TqHnJn#AR*`S!dkKlR>P+kReL68qrglATq%71(rw- z^g|RiS6sqaU~I|`>%=pn4mA60)}?tLGTu{Jn4c_b-7kr_a(G7waZ`6H(cK)UL zFd2xT>4fpfW(eIcP%QZ5u(+DFYag{v+ZrG3*4p-voVWVtuU|Ufkr~`L$Zb4v5#b!T z@Yv5LXQe*{ZJ?Z$Zo9h_c9CGgZWeg0hE=I1LS5v%16AXplK;NOsts2z@V!_cA3{A6 zS$4cFM?UQgPAoeLg^EEs{4wInbCU}Lv!UxobPj|dp?p&G(i&Z4Fca_dt}&O1mRE}@ zi;As;a=ovc%iE+sq(u+cP=iA&b?}x>nfK1H^bC~vEqy3Hgw>N=qd)+Ue&IIzA`x?L_=MN3wLu8MPvR<0U6*LjpH0061UhNCq%Wn5tr!Yn4Q_+ODzQvX7dzCqq;)5Tq2(OBoE z;q23!#|Qp9b{Og4mh6msa3hj4|>D3v45UHt0{ zP9eX(!Y4X;s|yKju6@@?pWvbALZ106GGS?%9RVTjRWJK+yG0{g)kdVNLG5_Kjj}9Bygk0+=OnB z)Ne8x2KYctSLOw3p$s9FclKOPpt6Jl;T=fG(6SB1fc>cKF$<&?VIx#39_siSNKU(z zhTxcRn_4)L1@hnvGR*aj(zP>oLvB!-_BujtzDv~Svwe+rC>WRQI<57fjZAJ9$#EK~ zE!{6Onb(_IDe{}~%pp}i3l(zYtviiR?K2o31hiPV4qVQz+8c~6oi|NcdC($3v2p`j z3&m;#9aIGR)*W(520jIcoQv|AMc@jMWpgQ#fjX$Gp1{z%h08Fb!(l=a7aQb5(;H+W z7B-8u@czek^t+hP4JLDnw?8NI+wGZf@G?*H=d77mdN6SrvzUbmuA(Ia5ZYO_w;5!1JDnf8f?g64RMYD4L zc5L{j`nhi>K)7XvUxHydzJEKa z62D!A97e-${4pM48-M6Pa*82T`my%V#-rewn})L!6(HyBpv20#4&OmMXq7btT$*)u zbpcfn=b}xIbx_Nj9s;VhBiEF*YOiK|2Lv}+jDpVquMRHm}Y&7@G^~F9E z!g&IA5GWPy7=(^g&4OgP<>6d65EKcwpaulNt0owbQZ7p{ao-2Y>h@kr_Uy1p_FsQb zvO$6uMY3J*HOW4&Q$CbGG^4|?YP;Iyf$i$FBnNtF6<$RVHfY5NdStJO7=F41Fiy!K zwjj%PK*|2Cj)gX*0%5fau@ur-YD*cVo`|t2iL48RuxpVl??dgE`lg*R91f^Fhow=A z(w`4Tr{jvjA06Pyi>)Dd0;p-@jTk!bPhTu#8#|1N0=yH5FmO%Ez?D@oiLMDO4ufF%>-r zqzUjvP;`n^(dD+gW-$ziq^}3uvQTx~&Q9j3du$e^Ur-amp{Y6~ncM&KZ{?No1%9<%+HT(G6JYB|cv?3P#K5|K8A`U6ZpAt=@)A}6&s70ab) zR+tMa_U}o}hU<{%9zZ-UP{H$wB-pG7m{KMgND~Kz?Z8tI=k-X!X2Qq$^I~l&zEA`6 zf~EpocqrdzH7p51f)trJD3FaD+UOqM=(NpZ3(i83#Wbks00FM{vKCu>X{8E%2yT*M zEXY*omqtu9Lm&j{+8Ld|E;px>+m*J)8my=_DDRS=$wnCp9Dw2_BF@k)hDocJ4Fdw4 zr6+Y%7ft<6H|;@ta}ee5IQBFZ=szZaz>KX~*1eounC8BXkC?Qi;yD@yuvmeB)mh_~ zMr5ufwsJSsTa-fURFH^3DAvWiu#^PU>Sfg$3&Sce@2$9aPbPRihuW|5%2_UU8X-|B zyN?wpZ<|>-qyUDdLobrW4Qu0qO^7i03LHMFn3=|hSWt=7 zr4V4m^uga)^NCV_Q~h6<6k>TvR0PAcL5Sc{%O1FP*}#y^6rc~OwWPo|SukI-h8*P@T$7n-#^g>E%0DR5Ctp^YBiRL7n~7i|04;H!M(Y>FsTmQ> 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 Lhs=MXpUM9P: + 80000000: 00000413 li s0,0 + 80000004: 00010117 auipc sp,0x10 + 80000008: ffc10113 addi sp,sp,-4 # 80010000 <_end> + 8000000c: 0ad040ef jal ra,800048b8 <_trm_init> + +0000000080000010 : + 80000010: fd010113 addi sp,sp,-48 + 80000014: 3e800593 li a1,1000 + 80000018: 02813023 sd s0,32(sp) + 8000001c: 02113423 sd ra,40(sp) + 80000020: 00050413 mv s0,a0 + 80000024: 00913c23 sd s1,24(sp) + 80000028: 01213823 sd s2,16(sp) + 8000002c: 01313423 sd s3,8(sp) + 80000030: 119040ef jal ra,80004948 <__udivdi3> + 80000034: 0055179b slliw a5,a0,0x5 + 80000038: 40a787bb subw a5,a5,a0 + 8000003c: 0027979b slliw a5,a5,0x2 + 80000040: 00a787bb addw a5,a5,a0 + 80000044: 0037979b slliw a5,a5,0x3 + 80000048: 02079793 slli a5,a5,0x20 + 8000004c: 0207d793 srli a5,a5,0x20 + 80000050: 40f40433 sub s0,s0,a5 + 80000054: 3e700793 li a5,999 + 80000058: 0887e263 bltu a5,s0,800000dc + 8000005c: 00008497 auipc s1,0x8 + 80000060: 93c48493 addi s1,s1,-1732 # 80007998 + 80000064: 0005061b sext.w a2,a0 + 80000068: 00006597 auipc a1,0x6 + 8000006c: 29058593 addi a1,a1,656 # 800062f8 <_etext+0x64> + 80000070: 00048513 mv a0,s1 + 80000074: 71d050ef jal ra,80005f90 + 80000078: fff5051b addiw a0,a0,-1 + 8000007c: 00a484b3 add s1,s1,a0 + 80000080: 02040c63 beqz s0,800000b8 + 80000084: 00900993 li s3,9 + 80000088: 00a00593 li a1,10 + 8000008c: 00040513 mv a0,s0 + 80000090: 101040ef jal ra,80004990 <__umoddi3> + 80000094: 0305079b addiw a5,a0,48 + 80000098: 00f48023 sb a5,0(s1) + 8000009c: 00040513 mv a0,s0 + 800000a0: 00a00593 li a1,10 + 800000a4: 00040913 mv s2,s0 + 800000a8: 0a1040ef jal ra,80004948 <__udivdi3> + 800000ac: fff48493 addi s1,s1,-1 + 800000b0: 00050413 mv s0,a0 + 800000b4: fd29eae3 bltu s3,s2,80000088 + 800000b8: 02813083 ld ra,40(sp) + 800000bc: 02013403 ld s0,32(sp) + 800000c0: 01813483 ld s1,24(sp) + 800000c4: 01013903 ld s2,16(sp) + 800000c8: 00813983 ld s3,8(sp) + 800000cc: 00008517 auipc a0,0x8 + 800000d0: 8cc50513 addi a0,a0,-1844 # 80007998 + 800000d4: 03010113 addi sp,sp,48 + 800000d8: 00008067 ret + 800000dc: 01100613 li a2,17 + 800000e0: 00006597 auipc a1,0x6 + 800000e4: 1b858593 addi a1,a1,440 # 80006298 <_etext+0x4> + 800000e8: 00006517 auipc a0,0x6 + 800000ec: 1f050513 addi a0,a0,496 # 800062d8 <_etext+0x44> + 800000f0: 64d050ef jal ra,80005f3c + 800000f4: 00100513 li a0,1 + 800000f8: 79c040ef jal ra,80004894 + +00000000800000fc

: + 800000fc: f5010113 addi sp,sp,-176 + 80000100: 0a113423 sd ra,168(sp) + 80000104: 0a813023 sd s0,160(sp) + 80000108: 08913c23 sd s1,152(sp) + 8000010c: 09213823 sd s2,144(sp) + 80000110: 09313423 sd s3,136(sp) + 80000114: 09413023 sd s4,128(sp) + 80000118: 07513c23 sd s5,120(sp) + 8000011c: 07613823 sd s6,112(sp) + 80000120: 07713423 sd s7,104(sp) + 80000124: 07813023 sd s8,96(sp) + 80000128: 05913c23 sd s9,88(sp) + 8000012c: 05a13823 sd s10,80(sp) + 80000130: 05b13423 sd s11,72(sp) + 80000134: 30050c63 beqz a0,8000044c + 80000138: 00006597 auipc a1,0x6 + 8000013c: 29058593 addi a1,a1,656 # 800063c8 <_etext+0x134> + 80000140: 00050413 mv s0,a0 + 80000144: 50d040ef jal ra,80004e50 + 80000148: 30050263 beqz a0,8000044c + 8000014c: 00006597 auipc a1,0x6 + 80000150: 1f458593 addi a1,a1,500 # 80006340 <_etext+0xac> + 80000154: 00040513 mv a0,s0 + 80000158: 4f9040ef jal ra,80004e50 + 8000015c: 00a13423 sd a0,8(sp) + 80000160: 02050063 beqz a0,80000180 + 80000164: 00006597 auipc a1,0x6 + 80000168: 1e458593 addi a1,a1,484 # 80006348 <_etext+0xb4> + 8000016c: 00040513 mv a0,s0 + 80000170: 4e1040ef jal ra,80004e50 + 80000174: 00100793 li a5,1 + 80000178: 00f13423 sd a5,8(sp) + 8000017c: 34051663 bnez a0,800004c8 + 80000180: 105040ef jal ra,80004a84 + 80000184: 00040593 mv a1,s0 + 80000188: 00006517 auipc a0,0x6 + 8000018c: 21050513 addi a0,a0,528 # 80006398 <_etext+0x104> + 80000190: 5ad050ef jal ra,80005f3c + 80000194: 03810593 addi a1,sp,56 + 80000198: 00600513 li a0,6 + 8000019c: 13d040ef jal ra,80004ad8 + 800001a0: 00813783 ld a5,8(sp) + 800001a4: 00007c17 auipc s8,0x7 + 800001a8: c4cc0c13 addi s8,s8,-948 # 80006df0 + 800001ac: 00007b97 auipc s7,0x7 + 800001b0: 2d4b8b93 addi s7,s7,724 # 80007480 + 800001b4: 00178993 addi s3,a5,1 + 800001b8: 03813783 ld a5,56(sp) + 800001bc: 00599993 slli s3,s3,0x5 + 800001c0: fe098b13 addi s6,s3,-32 + 800001c4: 02f13423 sd a5,40(sp) + 800001c8: 00100793 li a5,1 + 800001cc: 00000d93 li s11,0 + 800001d0: 00f13c23 sd a5,24(sp) + 800001d4: 02013023 sd zero,32(sp) + 800001d8: 00008497 auipc s1,0x8 + 800001dc: 8f048493 addi s1,s1,-1808 # 80007ac8 + 800001e0: 00008a97 auipc s5,0x8 + 800001e4: 8f0a8a93 addi s5,s5,-1808 # 80007ad0 + 800001e8: 00898993 addi s3,s3,8 + 800001ec: 00007417 auipc s0,0x7 + 800001f0: 39c40413 addi s0,s0,924 # 80007588 + 800001f4: 00006a17 auipc s4,0x6 + 800001f8: 1dca0a13 addi s4,s4,476 # 800063d0 <_etext+0x13c> + 800001fc: 00006d17 auipc s10,0x6 + 80000200: 1e4d0d13 addi s10,s10,484 # 800063e0 <_etext+0x14c> + 80000204: 00006c97 auipc s9,0x6 + 80000208: 1f4c8c93 addi s9,s9,500 # 800063f8 <_etext+0x164> + 8000020c: 01c0006f j 80000228 + 80000210: 52d050ef jal ra,80005f3c + 80000214: 000d0593 mv a1,s10 + 80000218: 000c8513 mv a0,s9 + 8000021c: 0a8c0c13 addi s8,s8,168 + 80000220: 51d050ef jal ra,80005f3c + 80000224: 137c0a63 beq s8,s7,80000358 + 80000228: 00043603 ld a2,0(s0) + 8000022c: 00843703 ld a4,8(s0) + 80000230: 016c06b3 add a3,s8,s6 + 80000234: 0306b683 ld a3,48(a3) + 80000238: 018985b3 add a1,s3,s8 + 8000023c: 00bab023 sd a1,0(s5) + 80000240: 40c70733 sub a4,a4,a2 + 80000244: 0184b023 sd s8,0(s1) + 80000248: 018c3583 ld a1,24(s8) + 8000024c: 020c3603 ld a2,32(s8) + 80000250: 000a0513 mv a0,s4 + 80000254: fad76ee3 bltu a4,a3,80000210 + 80000258: 4e5050ef jal ra,80005f3c + 8000025c: 0004b683 ld a3,0(s1) + 80000260: 00043703 ld a4,0(s0) + 80000264: 00007797 auipc a5,0x7 + 80000268: 75478793 addi a5,a5,1876 # 800079b8 + 8000026c: 0006b683 ld a3,0(a3) + 80000270: 00770713 addi a4,a4,7 + 80000274: ff877713 andi a4,a4,-8 + 80000278: 00e7b023 sd a4,0(a5) + 8000027c: 000680e7 jalr a3 + 80000280: 03810593 addi a1,sp,56 + 80000284: 00600513 li a0,6 + 80000288: 051040ef jal ra,80004ad8 + 8000028c: 0004b703 ld a4,0(s1) + 80000290: 03813903 ld s2,56(sp) + 80000294: 00873703 ld a4,8(a4) + 80000298: 000700e7 jalr a4 + 8000029c: 03810593 addi a1,sp,56 + 800002a0: 00600513 li a0,6 + 800002a4: 035040ef jal ra,80004ad8 + 800002a8: 0004b703 ld a4,0(s1) + 800002ac: 03813683 ld a3,56(sp) + 800002b0: 01073703 ld a4,16(a4) + 800002b4: 41268933 sub s2,a3,s2 + 800002b8: 000700e7 jalr a4 + 800002bc: 1c050663 beqz a0,80000488 + 800002c0: 00a13823 sd a0,16(sp) + 800002c4: 00006517 auipc a0,0x6 + 800002c8: 14450513 addi a0,a0,324 # 80006408 <_etext+0x174> + 800002cc: 471050ef jal ra,80005f3c + 800002d0: 01013703 ld a4,16(sp) + 800002d4: 00177713 andi a4,a4,1 + 800002d8: 1a070e63 beqz a4,80000494 + 800002dc: 00006517 auipc a0,0x6 + 800002e0: 13450513 addi a0,a0,308 # 80006410 <_etext+0x17c> + 800002e4: 459050ef jal ra,80005f3c + 800002e8: 00013823 sd zero,16(sp) + 800002ec: 04090663 beqz s2,80000338 + 800002f0: 000ab703 ld a4,0(s5) + 800002f4: 00090593 mv a1,s2 + 800002f8: 01073683 ld a3,16(a4) + 800002fc: 00169713 slli a4,a3,0x1 + 80000300: 00d70733 add a4,a4,a3 + 80000304: 00671513 slli a0,a4,0x6 + 80000308: 00a70533 add a0,a4,a0 + 8000030c: 00251513 slli a0,a0,0x2 + 80000310: 00d50533 add a0,a0,a3 + 80000314: 00251513 slli a0,a0,0x2 + 80000318: 00d50533 add a0,a0,a3 + 8000031c: 00551513 slli a0,a0,0x5 + 80000320: 628040ef jal ra,80004948 <__udivdi3> + 80000324: 0005079b sext.w a5,a0 + 80000328: 00f13823 sd a5,16(sp) + 8000032c: 02013783 ld a5,32(sp) + 80000330: 00f507bb addw a5,a0,a5 + 80000334: 02f13023 sd a5,32(sp) + 80000338: 00006517 auipc a0,0x6 + 8000033c: 16850513 addi a0,a0,360 # 800064a0 <_etext+0x20c> + 80000340: 3fd050ef jal ra,80005f3c + 80000344: 00813783 ld a5,8(sp) + 80000348: 10079e63 bnez a5,80000464 + 8000034c: 012d8db3 add s11,s11,s2 + 80000350: 0a8c0c13 addi s8,s8,168 + 80000354: ed7c1ae3 bne s8,s7,80000228 + 80000358: 03810593 addi a1,sp,56 + 8000035c: 00600513 li a0,6 + 80000360: 778040ef jal ra,80004ad8 + 80000364: 02813783 ld a5,40(sp) + 80000368: 03813403 ld s0,56(sp) + 8000036c: 00006517 auipc a0,0x6 + 80000370: 0dc50513 addi a0,a0,220 # 80006448 <_etext+0x1b4> + 80000374: 40f40433 sub s0,s0,a5 + 80000378: 3c5050ef jal ra,80005f3c + 8000037c: 01813783 ld a5,24(sp) + 80000380: 00006597 auipc a1,0x6 + 80000384: f8858593 addi a1,a1,-120 # 80006308 <_etext+0x74> + 80000388: 12078263 beqz a5,800004ac + 8000038c: 00006517 auipc a0,0x6 + 80000390: 0f450513 addi a0,a0,244 # 80006480 <_etext+0x1ec> + 80000394: 3a9050ef jal ra,80005f3c + 80000398: 00813703 ld a4,8(sp) + 8000039c: 00100793 li a5,1 + 800003a0: 10e7dc63 bge a5,a4,800004b8 + 800003a4: 02016503 lwu a0,32(sp) + 800003a8: 00a00593 li a1,10 + 800003ac: 59c040ef jal ra,80004948 <__udivdi3> + 800003b0: 0005059b sext.w a1,a0 + 800003b4: 00006517 auipc a0,0x6 + 800003b8: 0dc50513 addi a0,a0,220 # 80006490 <_etext+0x1fc> + 800003bc: 381050ef jal ra,80005f3c + 800003c0: 000185b7 lui a1,0x18 + 800003c4: 00006617 auipc a2,0x6 + 800003c8: 0e460613 addi a2,a2,228 # 800064a8 <_etext+0x214> + 800003cc: 6a058593 addi a1,a1,1696 # 186a0 <_entry_offset+0x186a0> + 800003d0: 00006517 auipc a0,0x6 + 800003d4: 0f050513 addi a0,a0,240 # 800064c0 <_etext+0x22c> + 800003d8: 365050ef jal ra,80005f3c + 800003dc: 000d8513 mv a0,s11 + 800003e0: c31ff0ef jal ra,80000010 + 800003e4: 00050593 mv a1,a0 + 800003e8: 00006517 auipc a0,0x6 + 800003ec: 10050513 addi a0,a0,256 # 800064e8 <_etext+0x254> + 800003f0: 34d050ef jal ra,80005f3c + 800003f4: 00040513 mv a0,s0 + 800003f8: c19ff0ef jal ra,80000010 + 800003fc: 00050593 mv a1,a0 + 80000400: 00006517 auipc a0,0x6 + 80000404: 10050513 addi a0,a0,256 # 80006500 <_etext+0x26c> + 80000408: 335050ef jal ra,80005f3c + 8000040c: 0a813083 ld ra,168(sp) + 80000410: 0a013403 ld s0,160(sp) + 80000414: 09813483 ld s1,152(sp) + 80000418: 09013903 ld s2,144(sp) + 8000041c: 08813983 ld s3,136(sp) + 80000420: 08013a03 ld s4,128(sp) + 80000424: 07813a83 ld s5,120(sp) + 80000428: 07013b03 ld s6,112(sp) + 8000042c: 06813b83 ld s7,104(sp) + 80000430: 06013c03 ld s8,96(sp) + 80000434: 05813c83 ld s9,88(sp) + 80000438: 05013d03 ld s10,80(sp) + 8000043c: 04813d83 ld s11,72(sp) + 80000440: 00000513 li a0,0 + 80000444: 0b010113 addi sp,sp,176 + 80000448: 00008067 ret + 8000044c: 00006517 auipc a0,0x6 + 80000450: ecc50513 addi a0,a0,-308 # 80006318 <_etext+0x84> + 80000454: 2e9050ef jal ra,80005f3c + 80000458: 00006417 auipc s0,0x6 + 8000045c: ea840413 addi s0,s0,-344 # 80006300 <_etext+0x6c> + 80000460: cedff06f j 8000014c + 80000464: 00090513 mv a0,s2 + 80000468: ba9ff0ef jal ra,80000010 + 8000046c: 01013603 ld a2,16(sp) + 80000470: 00050593 mv a1,a0 + 80000474: 00006517 auipc a0,0x6 + 80000478: fbc50513 addi a0,a0,-68 # 80006430 <_etext+0x19c> + 8000047c: 2c1050ef jal ra,80005f3c + 80000480: 012d8db3 add s11,s11,s2 + 80000484: ecdff06f j 80000350 + 80000488: 00006517 auipc a0,0x6 + 8000048c: 09050513 addi a0,a0,144 # 80006518 <_etext+0x284> + 80000490: 2ad050ef jal ra,80005f3c + 80000494: 00006517 auipc a0,0x6 + 80000498: f8c50513 addi a0,a0,-116 # 80006420 <_etext+0x18c> + 8000049c: 2a1050ef jal ra,80005f3c + 800004a0: 00013c23 sd zero,24(sp) + 800004a4: 00013823 sd zero,16(sp) + 800004a8: e91ff06f j 80000338 + 800004ac: 00006597 auipc a1,0x6 + 800004b0: e6458593 addi a1,a1,-412 # 80006310 <_etext+0x7c> + 800004b4: ed9ff06f j 8000038c + 800004b8: 00006517 auipc a0,0x6 + 800004bc: fe850513 addi a0,a0,-24 # 800064a0 <_etext+0x20c> + 800004c0: 27d050ef jal ra,80005f3c + 800004c4: f19ff06f j 800003dc + 800004c8: 00006597 auipc a1,0x6 + 800004cc: e3858593 addi a1,a1,-456 # 80006300 <_etext+0x6c> + 800004d0: 00040513 mv a0,s0 + 800004d4: 17d040ef jal ra,80004e50 + 800004d8: 00200793 li a5,2 + 800004dc: 00f13423 sd a5,8(sp) + 800004e0: ca0500e3 beqz a0,80000180 + 800004e4: 00006597 auipc a1,0x6 + 800004e8: e6c58593 addi a1,a1,-404 # 80006350 <_etext+0xbc> + 800004ec: 00040513 mv a0,s0 + 800004f0: 161040ef jal ra,80004e50 + 800004f4: 00300793 li a5,3 + 800004f8: 00f13423 sd a5,8(sp) + 800004fc: c80502e3 beqz a0,80000180 + 80000500: 00040593 mv a1,s0 + 80000504: 00006517 auipc a0,0x6 + 80000508: e5450513 addi a0,a0,-428 # 80006358 <_etext+0xc4> + 8000050c: 231050ef jal ra,80005f3c + 80000510: 00100513 li a0,1 + 80000514: 380040ef jal ra,80004894 + +0000000080000518 : + 80000518: 00007597 auipc a1,0x7 + 8000051c: 4a058593 addi a1,a1,1184 # 800079b8 + 80000520: 0005b683 ld a3,0(a1) + 80000524: 00750713 addi a4,a0,7 + 80000528: 00007797 auipc a5,0x7 + 8000052c: 06078793 addi a5,a5,96 # 80007588 + 80000530: ff010113 addi sp,sp,-16 + 80000534: ff877713 andi a4,a4,-8 + 80000538: 0007b603 ld a2,0(a5) + 8000053c: 00113423 sd ra,8(sp) + 80000540: 00e68733 add a4,a3,a4 + 80000544: 00e5b023 sd a4,0(a1) + 80000548: 04c76263 bltu a4,a2,8000058c + 8000054c: 0087b783 ld a5,8(a5) + 80000550: 02f77e63 bgeu a4,a5,8000058c + 80000554: 00068793 mv a5,a3 + 80000558: 00d70863 beq a4,a3,80000568 + 8000055c: 0007b023 sd zero,0(a5) + 80000560: 00878793 addi a5,a5,8 + 80000564: fef71ce3 bne a4,a5,8000055c + 80000568: 00007797 auipc a5,0x7 + 8000056c: 5687b783 ld a5,1384(a5) # 80007ad0 + 80000570: 0087b783 ld a5,8(a5) + 80000574: 40c70733 sub a4,a4,a2 + 80000578: 02e7ea63 bltu a5,a4,800005ac + 8000057c: 00813083 ld ra,8(sp) + 80000580: 00068513 mv a0,a3 + 80000584: 01010113 addi sp,sp,16 + 80000588: 00008067 ret + 8000058c: 0a100613 li a2,161 + 80000590: 00006597 auipc a1,0x6 + 80000594: d0858593 addi a1,a1,-760 # 80006298 <_etext+0x4> + 80000598: 00006517 auipc a0,0x6 + 8000059c: d4050513 addi a0,a0,-704 # 800062d8 <_etext+0x44> + 800005a0: 19d050ef jal ra,80005f3c + 800005a4: 00100513 li a0,1 + 800005a8: 2ec040ef jal ra,80004894 + 800005ac: 0a500613 li a2,165 + 800005b0: fe1ff06f j 80000590 + +00000000800005b4 : + 800005b4: 03151513 slli a0,a0,0x31 + 800005b8: 03155513 srli a0,a0,0x31 + 800005bc: 00007797 auipc a5,0x7 + 800005c0: eca7a223 sw a0,-316(a5) # 80007480 + 800005c4: 00008067 ret + +00000000800005c8 : + 800005c8: 00007697 auipc a3,0x7 + 800005cc: eb868693 addi a3,a3,-328 # 80007480 + 800005d0: 0006a703 lw a4,0(a3) + 800005d4: 0017179b slliw a5,a4,0x1 + 800005d8: 00e787bb addw a5,a5,a4 + 800005dc: 0027979b slliw a5,a5,0x2 + 800005e0: 00e787bb addw a5,a5,a4 + 800005e4: 0047979b slliw a5,a5,0x4 + 800005e8: 00e787bb addw a5,a5,a4 + 800005ec: 0087979b slliw a5,a5,0x8 + 800005f0: 40e787bb subw a5,a5,a4 + 800005f4: 0027979b slliw a5,a5,0x2 + 800005f8: 00e787bb addw a5,a5,a4 + 800005fc: 0026a737 lui a4,0x26a + 80000600: ec37071b addiw a4,a4,-317 + 80000604: 00e787bb addw a5,a5,a4 + 80000608: 02179513 slli a0,a5,0x21 + 8000060c: 00f6a023 sw a5,0(a3) + 80000610: 03155513 srli a0,a0,0x31 + 80000614: 00008067 ret + +0000000080000618 : + 80000618: 00450613 addi a2,a0,4 + 8000061c: 08b67063 bgeu a2,a1,8000069c + 80000620: 811ca737 lui a4,0x811ca + 80000624: dc570713 addi a4,a4,-571 # ffffffff811c9dc5 <_end+0xffffffff011b9dc5> + 80000628: 00050693 mv a3,a0 + 8000062c: 0006c783 lbu a5,0(a3) + 80000630: 00168693 addi a3,a3,1 + 80000634: 00f74733 xor a4,a4,a5 + 80000638: 00f7179b slliw a5,a4,0xf + 8000063c: 00e787bb addw a5,a5,a4 + 80000640: 0027979b slliw a5,a5,0x2 + 80000644: 40e787bb subw a5,a5,a4 + 80000648: 0037979b slliw a5,a5,0x3 + 8000064c: 00e787bb addw a5,a5,a4 + 80000650: 0027979b slliw a5,a5,0x2 + 80000654: 00e787bb addw a5,a5,a4 + 80000658: 0027979b slliw a5,a5,0x2 + 8000065c: 40e7873b subw a4,a5,a4 + 80000660: fcd616e3 bne a2,a3,8000062c + 80000664: 00460613 addi a2,a2,4 + 80000668: 00450513 addi a0,a0,4 + 8000066c: fab66ee3 bltu a2,a1,80000628 + 80000670: 00d7151b slliw a0,a4,0xd + 80000674: 00e5073b addw a4,a0,a4 + 80000678: 4077551b sraiw a0,a4,0x7 + 8000067c: 00a74733 xor a4,a4,a0 + 80000680: 0037151b slliw a0,a4,0x3 + 80000684: 00e5053b addw a0,a0,a4 + 80000688: 4115579b sraiw a5,a0,0x11 + 8000068c: 00f54533 xor a0,a0,a5 + 80000690: 0055179b slliw a5,a0,0x5 + 80000694: 00a7853b addw a0,a5,a0 + 80000698: 00008067 ret + 8000069c: a6f00537 lui a0,0xa6f00 + 800006a0: 79e50513 addi a0,a0,1950 # ffffffffa6f0079e <_end+0xffffffff26ef079e> + 800006a4: 00008067 ret + +00000000800006a8 <_ZN5Dinic3DFSEii>: + 800006a8: 00c52783 lw a5,12(a0) + 800006ac: fc010113 addi sp,sp,-64 + 800006b0: 01413823 sd s4,16(sp) + 800006b4: 01513423 sd s5,8(sp) + 800006b8: 02113c23 sd ra,56(sp) + 800006bc: 02813823 sd s0,48(sp) + 800006c0: 02913423 sd s1,40(sp) + 800006c4: 03213023 sd s2,32(sp) + 800006c8: 01313c23 sd s3,24(sp) + 800006cc: 01613023 sd s6,0(sp) + 800006d0: 00060a13 mv s4,a2 + 800006d4: 00060a93 mv s5,a2 + 800006d8: 0cb78663 beq a5,a1,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 800006dc: 00000a93 li s5,0 + 800006e0: 0c060263 beqz a2,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 800006e4: 03053783 ld a5,48(a0) + 800006e8: 00259993 slli s3,a1,0x2 + 800006ec: fff00713 li a4,-1 + 800006f0: 013787b3 add a5,a5,s3 + 800006f4: 0007a403 lw s0,0(a5) + 800006f8: 00050913 mv s2,a0 + 800006fc: 0ae40463 beq s0,a4,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 80000700: fff00b13 li s6,-1 + 80000704: 0180006f j 8000071c <_ZN5Dinic3DFSEii+0x74> + 80000708: 02093783 ld a5,32(s2) + 8000070c: 00241413 slli s0,s0,0x2 + 80000710: 00878433 add s0,a5,s0 + 80000714: 00042403 lw s0,0(s0) + 80000718: 09640663 beq s0,s6,800007a4 <_ZN5Dinic3DFSEii+0xfc> + 8000071c: 01093703 ld a4,16(s2) + 80000720: 00441493 slli s1,s0,0x4 + 80000724: 02893783 ld a5,40(s2) + 80000728: 009704b3 add s1,a4,s1 + 8000072c: 0044a583 lw a1,4(s1) + 80000730: 01378733 add a4,a5,s3 + 80000734: 00072703 lw a4,0(a4) + 80000738: 00259693 slli a3,a1,0x2 + 8000073c: 00d787b3 add a5,a5,a3 + 80000740: 0007a683 lw a3,0(a5) + 80000744: 0017079b addiw a5,a4,1 + 80000748: fcd790e3 bne a5,a3,80000708 <_ZN5Dinic3DFSEii+0x60> + 8000074c: 0084a603 lw a2,8(s1) + 80000750: 00c4a783 lw a5,12(s1) + 80000754: 00090513 mv a0,s2 + 80000758: 40f607bb subw a5,a2,a5 + 8000075c: 00078613 mv a2,a5 + 80000760: 00fa5463 bge s4,a5,80000768 <_ZN5Dinic3DFSEii+0xc0> + 80000764: 000a061b sext.w a2,s4 + 80000768: f41ff0ef jal ra,800006a8 <_ZN5Dinic3DFSEii> + 8000076c: 00144793 xori a5,s0,1 + 80000770: 00479793 slli a5,a5,0x4 + 80000774: f8a05ae3 blez a0,80000708 <_ZN5Dinic3DFSEii+0x60> + 80000778: 00c4a683 lw a3,12(s1) + 8000077c: 01093703 ld a4,16(s2) + 80000780: 40aa0a3b subw s4,s4,a0 + 80000784: 00a686bb addw a3,a3,a0 + 80000788: 00d4a623 sw a3,12(s1) + 8000078c: 00f707b3 add a5,a4,a5 + 80000790: 00c7a703 lw a4,12(a5) + 80000794: 01550abb addw s5,a0,s5 + 80000798: 40a7053b subw a0,a4,a0 + 8000079c: 00a7a623 sw a0,12(a5) + 800007a0: f60a14e3 bnez s4,80000708 <_ZN5Dinic3DFSEii+0x60> + 800007a4: 03813083 ld ra,56(sp) + 800007a8: 03013403 ld s0,48(sp) + 800007ac: 02813483 ld s1,40(sp) + 800007b0: 02013903 ld s2,32(sp) + 800007b4: 01813983 ld s3,24(sp) + 800007b8: 01013a03 ld s4,16(sp) + 800007bc: 00013b03 ld s6,0(sp) + 800007c0: 000a8513 mv a0,s5 + 800007c4: 00813a83 ld s5,8(sp) + 800007c8: 04010113 addi sp,sp,64 + 800007cc: 00008067 ret + +00000000800007d0 : + 800007d0: 00007797 auipc a5,0x7 + 800007d4: 3007b783 ld a5,768(a5) # 80007ad0 + 800007d8: 0007a783 lw a5,0(a5) + 800007dc: fa010113 addi sp,sp,-96 + 800007e0: 05213023 sd s2,64(sp) + 800007e4: 00100513 li a0,1 + 800007e8: 00007917 auipc s2,0x7 + 800007ec: 1e090913 addi s2,s2,480 # 800079c8 <_ZL1N> + 800007f0: 04113c23 sd ra,88(sp) + 800007f4: 00f92023 sw a5,0(s2) + 800007f8: 04913423 sd s1,72(sp) + 800007fc: 03313c23 sd s3,56(sp) + 80000800: 03413823 sd s4,48(sp) + 80000804: 03513423 sd s5,40(sp) + 80000808: 03613023 sd s6,32(sp) + 8000080c: 01713c23 sd s7,24(sp) + 80000810: 01813823 sd s8,16(sp) + 80000814: 04813823 sd s0,80(sp) + 80000818: 01913423 sd s9,8(sp) + 8000081c: 01a13023 sd s10,0(sp) + 80000820: d95ff0ef jal ra,800005b4 + 80000824: 04800513 li a0,72 + 80000828: 00092b03 lw s6,0(s2) + 8000082c: cedff0ef jal ra,80000518 + 80000830: 00092783 lw a5,0(s2) + 80000834: 00007997 auipc s3,0x7 + 80000838: 18c98993 addi s3,s3,396 # 800079c0 <_ZL1G> + 8000083c: 00050493 mv s1,a0 + 80000840: 0017879b addiw a5,a5,1 + 80000844: 00179c1b slliw s8,a5,0x1 + 80000848: ffec0a1b addiw s4,s8,-2 + 8000084c: 401a559b sraiw a1,s4,0x1 + 80000850: 00058a13 mv s4,a1 + 80000854: 00a9b023 sd a0,0(s3) + 80000858: 00058513 mv a0,a1 + 8000085c: 080040ef jal ra,800048dc <__muldi3> + 80000860: 001a1a1b slliw s4,s4,0x1 + 80000864: 00aa0a3b addw s4,s4,a0 + 80000868: 001a1a1b slliw s4,s4,0x1 + 8000086c: 004a1513 slli a0,s4,0x4 + 80000870: 002c1a93 slli s5,s8,0x2 + 80000874: ca5ff0ef jal ra,80000518 + 80000878: 00a4b823 sd a0,16(s1) + 8000087c: 000a8513 mv a0,s5 + 80000880: c99ff0ef jal ra,80000518 + 80000884: 00a4bc23 sd a0,24(s1) + 80000888: 002a1513 slli a0,s4,0x2 + 8000088c: c8dff0ef jal ra,80000518 + 80000890: 02a4b023 sd a0,32(s1) + 80000894: 000c0513 mv a0,s8 + 80000898: c81ff0ef jal ra,80000518 + 8000089c: 04a4b023 sd a0,64(s1) + 800008a0: 000a8513 mv a0,s5 + 800008a4: c75ff0ef jal ra,80000518 + 800008a8: 02a4b423 sd a0,40(s1) + 800008ac: 000a8513 mv a0,s5 + 800008b0: c69ff0ef jal ra,80000518 + 800008b4: 02a4b823 sd a0,48(s1) + 800008b8: 000a8513 mv a0,s5 + 800008bc: c5dff0ef jal ra,80000518 + 800008c0: 001b1b9b slliw s7,s6,0x1 + 800008c4: 02a4bc23 sd a0,56(s1) + 800008c8: 0184a023 sw s8,0(s1) + 800008cc: 001b8b1b addiw s6,s7,1 + 800008d0: 03805863 blez s8,80000900 + 800008d4: fffc071b addiw a4,s8,-1 + 800008d8: 02071713 slli a4,a4,0x20 + 800008dc: 0184b783 ld a5,24(s1) + 800008e0: 02075713 srli a4,a4,0x20 + 800008e4: 00170713 addi a4,a4,1 + 800008e8: 00271713 slli a4,a4,0x2 + 800008ec: 00f70733 add a4,a4,a5 + 800008f0: fff00693 li a3,-1 + 800008f4: 00d7a023 sw a3,0(a5) + 800008f8: 00478793 addi a5,a5,4 + 800008fc: fee79ce3 bne a5,a4,800008f4 + 80000900: 00092c83 lw s9,0(s2) + 80000904: 0004a223 sw zero,4(s1) + 80000908: 27905c63 blez s9,80000b80 + 8000090c: 00000a93 li s5,0 + 80000910: 00000493 li s1,0 + 80000914: 002a9a13 slli s4,s5,0x2 + 80000918: 00000c13 li s8,0 + 8000091c: 0d905463 blez s9,800009e4 + 80000920: 0009b403 ld s0,0(s3) + 80000924: ca5ff0ef jal ra,800005c8 + 80000928: 02051513 slli a0,a0,0x20 + 8000092c: 00a00593 li a1,10 + 80000930: 02055513 srli a0,a0,0x20 + 80000934: 05c040ef jal ra,80004990 <__umoddi3> + 80000938: 018c873b addw a4,s9,s8 + 8000093c: 0005051b sext.w a0,a0 + 80000940: 00092c83 lw s9,0(s2) + 80000944: 00070813 mv a6,a4 + 80000948: 00271593 slli a1,a4,0x2 + 8000094c: 001c0c1b addiw s8,s8,1 + 80000950: 08050863 beqz a0,800009e0 + 80000954: 00442703 lw a4,4(s0) + 80000958: 01043783 ld a5,16(s0) + 8000095c: 01843603 ld a2,24(s0) + 80000960: 00471693 slli a3,a4,0x4 + 80000964: 00d786b3 add a3,a5,a3 + 80000968: 0096a023 sw s1,0(a3) + 8000096c: 00a6a423 sw a0,8(a3) + 80000970: 0106a223 sw a6,4(a3) + 80000974: 0006a623 sw zero,12(a3) + 80000978: 01460533 add a0,a2,s4 + 8000097c: 02043683 ld a3,32(s0) + 80000980: 00052883 lw a7,0(a0) + 80000984: 00271713 slli a4,a4,0x2 + 80000988: 00e68733 add a4,a3,a4 + 8000098c: 01172023 sw a7,0(a4) + 80000990: 00442883 lw a7,4(s0) + 80000994: 00b60733 add a4,a2,a1 + 80000998: 0018861b addiw a2,a7,1 + 8000099c: 00c42223 sw a2,4(s0) + 800009a0: 01152023 sw a7,0(a0) + 800009a4: 00442603 lw a2,4(s0) + 800009a8: 00461593 slli a1,a2,0x4 + 800009ac: 00b787b3 add a5,a5,a1 + 800009b0: 0107a023 sw a6,0(a5) + 800009b4: 0097a223 sw s1,4(a5) + 800009b8: 0007a423 sw zero,8(a5) + 800009bc: 0007a623 sw zero,12(a5) + 800009c0: 00072783 lw a5,0(a4) + 800009c4: 00261613 slli a2,a2,0x2 + 800009c8: 00c686b3 add a3,a3,a2 + 800009cc: 00f6a023 sw a5,0(a3) + 800009d0: 00442783 lw a5,4(s0) + 800009d4: 0017869b addiw a3,a5,1 + 800009d8: 00d42223 sw a3,4(s0) + 800009dc: 00f72023 sw a5,0(a4) + 800009e0: f59c40e3 blt s8,s9,80000920 + 800009e4: 001a8a93 addi s5,s5,1 + 800009e8: 000a849b sext.w s1,s5 + 800009ec: f394c4e3 blt s1,s9,80000914 + 800009f0: 19905863 blez s9,80000b80 + 800009f4: 002b9a93 slli s5,s7,0x2 + 800009f8: 002b1a13 slli s4,s6,0x2 + 800009fc: 00000c13 li s8,0 + 80000a00: 00000c93 li s9,0 + 80000a04: 0009b483 ld s1,0(s3) + 80000a08: bc1ff0ef jal ra,800005c8 + 80000a0c: 02051513 slli a0,a0,0x20 + 80000a10: 3e800593 li a1,1000 + 80000a14: 02055513 srli a0,a0,0x20 + 80000a18: 779030ef jal ra,80004990 <__umoddi3> + 80000a1c: 0005051b sext.w a0,a0 + 80000a20: 002c1813 slli a6,s8,0x2 + 80000a24: 0009b403 ld s0,0(s3) + 80000a28: 00092d03 lw s10,0(s2) + 80000a2c: 001c0c13 addi s8,s8,1 + 80000a30: 08050863 beqz a0,80000ac0 + 80000a34: 0044a703 lw a4,4(s1) + 80000a38: 0104b783 ld a5,16(s1) + 80000a3c: 0184b603 ld a2,24(s1) + 80000a40: 00471693 slli a3,a4,0x4 + 80000a44: 00d786b3 add a3,a5,a3 + 80000a48: 0176a023 sw s7,0(a3) + 80000a4c: 0196a223 sw s9,4(a3) + 80000a50: 00a6a423 sw a0,8(a3) + 80000a54: 0006a623 sw zero,12(a3) + 80000a58: 015605b3 add a1,a2,s5 + 80000a5c: 0204b683 ld a3,32(s1) + 80000a60: 0005a503 lw a0,0(a1) + 80000a64: 00271713 slli a4,a4,0x2 + 80000a68: 00e68733 add a4,a3,a4 + 80000a6c: 00a72023 sw a0,0(a4) + 80000a70: 0044a503 lw a0,4(s1) + 80000a74: 01060733 add a4,a2,a6 + 80000a78: 0015061b addiw a2,a0,1 + 80000a7c: 00c4a223 sw a2,4(s1) + 80000a80: 00a5a023 sw a0,0(a1) + 80000a84: 0044a603 lw a2,4(s1) + 80000a88: 00461593 slli a1,a2,0x4 + 80000a8c: 00b787b3 add a5,a5,a1 + 80000a90: 0197a023 sw s9,0(a5) + 80000a94: 0177a223 sw s7,4(a5) + 80000a98: 0007a423 sw zero,8(a5) + 80000a9c: 0007a623 sw zero,12(a5) + 80000aa0: 00072783 lw a5,0(a4) + 80000aa4: 00261613 slli a2,a2,0x2 + 80000aa8: 00c686b3 add a3,a3,a2 + 80000aac: 00f6a023 sw a5,0(a3) + 80000ab0: 0044a783 lw a5,4(s1) + 80000ab4: 0017869b addiw a3,a5,1 + 80000ab8: 00d4a223 sw a3,4(s1) + 80000abc: 00f72023 sw a5,0(a4) + 80000ac0: b09ff0ef jal ra,800005c8 + 80000ac4: 02051513 slli a0,a0,0x20 + 80000ac8: 3e800593 li a1,1000 + 80000acc: 02055513 srli a0,a0,0x20 + 80000ad0: 6c1030ef jal ra,80004990 <__umoddi3> + 80000ad4: 019d07bb addw a5,s10,s9 + 80000ad8: 0005051b sext.w a0,a0 + 80000adc: 00078813 mv a6,a5 + 80000ae0: 00092883 lw a7,0(s2) + 80000ae4: 00279793 slli a5,a5,0x2 + 80000ae8: 000c0c9b sext.w s9,s8 + 80000aec: 08050863 beqz a0,80000b7c + 80000af0: 00442683 lw a3,4(s0) + 80000af4: 01043703 ld a4,16(s0) + 80000af8: 01843583 ld a1,24(s0) + 80000afc: 00469613 slli a2,a3,0x4 + 80000b00: 00c70633 add a2,a4,a2 + 80000b04: 01062023 sw a6,0(a2) + 80000b08: 01662223 sw s6,4(a2) + 80000b0c: 00a62423 sw a0,8(a2) + 80000b10: 00062623 sw zero,12(a2) + 80000b14: 00f587b3 add a5,a1,a5 + 80000b18: 02043603 ld a2,32(s0) + 80000b1c: 0007a503 lw a0,0(a5) + 80000b20: 00269693 slli a3,a3,0x2 + 80000b24: 00d606b3 add a3,a2,a3 + 80000b28: 00a6a023 sw a0,0(a3) + 80000b2c: 00442503 lw a0,4(s0) + 80000b30: 014586b3 add a3,a1,s4 + 80000b34: 0015059b addiw a1,a0,1 + 80000b38: 00b42223 sw a1,4(s0) + 80000b3c: 00a7a023 sw a0,0(a5) + 80000b40: 00442583 lw a1,4(s0) + 80000b44: 00459793 slli a5,a1,0x4 + 80000b48: 00f707b3 add a5,a4,a5 + 80000b4c: 0167a023 sw s6,0(a5) + 80000b50: 0107a223 sw a6,4(a5) + 80000b54: 0007a423 sw zero,8(a5) + 80000b58: 0007a623 sw zero,12(a5) + 80000b5c: 0006a783 lw a5,0(a3) + 80000b60: 00259593 slli a1,a1,0x2 + 80000b64: 00b60633 add a2,a2,a1 + 80000b68: 00f62023 sw a5,0(a2) + 80000b6c: 00442783 lw a5,4(s0) + 80000b70: 0017871b addiw a4,a5,1 + 80000b74: 00e42223 sw a4,4(s0) + 80000b78: 00f6a023 sw a5,0(a3) + 80000b7c: e91cc4e3 blt s9,a7,80000a04 + 80000b80: 05813083 ld ra,88(sp) + 80000b84: 05013403 ld s0,80(sp) + 80000b88: 04813483 ld s1,72(sp) + 80000b8c: 04013903 ld s2,64(sp) + 80000b90: 03813983 ld s3,56(sp) + 80000b94: 03013a03 ld s4,48(sp) + 80000b98: 02813a83 ld s5,40(sp) + 80000b9c: 02013b03 ld s6,32(sp) + 80000ba0: 01813b83 ld s7,24(sp) + 80000ba4: 01013c03 ld s8,16(sp) + 80000ba8: 00813c83 ld s9,8(sp) + 80000bac: 00013d03 ld s10,0(sp) + 80000bb0: 06010113 addi sp,sp,96 + 80000bb4: 00008067 ret + +0000000080000bb8 : + 80000bb8: f3010113 addi sp,sp,-208 + 80000bbc: 0c813023 sd s0,192(sp) + 80000bc0: 00007717 auipc a4,0x7 + 80000bc4: e0872703 lw a4,-504(a4) # 800079c8 <_ZL1N> + 80000bc8: 00007417 auipc s0,0x7 + 80000bcc: df843403 ld s0,-520(s0) # 800079c0 <_ZL1G> + 80000bd0: 00171f1b slliw t5,a4,0x1 + 80000bd4: 04043683 ld a3,64(s0) + 80000bd8: 03843583 ld a1,56(s0) + 80000bdc: 02843783 ld a5,40(s0) + 80000be0: 01843503 ld a0,24(s0) + 80000be4: 09513c23 sd s5,152(sp) + 80000be8: 0c113423 sd ra,200(sp) + 80000bec: 0a913c23 sd s1,184(sp) + 80000bf0: 0b213823 sd s2,176(sp) + 80000bf4: 0b313423 sd s3,168(sp) + 80000bf8: 0b413023 sd s4,160(sp) + 80000bfc: 09613823 sd s6,144(sp) + 80000c00: 09713423 sd s7,136(sp) + 80000c04: 09813023 sd s8,128(sp) + 80000c08: 07913c23 sd s9,120(sp) + 80000c0c: 07a13823 sd s10,112(sp) + 80000c10: 07b13423 sd s11,104(sp) + 80000c14: 001f061b addiw a2,t5,1 + 80000c18: 002f1713 slli a4,t5,0x2 + 80000c1c: 01e42423 sw t5,8(s0) + 80000c20: 00c42623 sw a2,12(s0) + 80000c24: 00e13023 sd a4,0(sp) + 80000c28: 000f0893 mv a7,t5 + 80000c2c: 00000813 li a6,0 + 80000c30: fff00a93 li s5,-1 + 80000c34: 00042703 lw a4,0(s0) + 80000c38: 02e05463 blez a4,80000c60 + 80000c3c: fff7071b addiw a4,a4,-1 + 80000c40: 02071713 slli a4,a4,0x20 + 80000c44: 02075713 srli a4,a4,0x20 + 80000c48: 00170713 addi a4,a4,1 + 80000c4c: 00068613 mv a2,a3 + 80000c50: 00d70733 add a4,a4,a3 + 80000c54: 00060023 sb zero,0(a2) + 80000c58: 00160613 addi a2,a2,1 + 80000c5c: fec71ce3 bne a4,a2,80000c54 + 80000c60: 0115a023 sw a7,0(a1) + 80000c64: 00842703 lw a4,8(s0) + 80000c68: 00100613 li a2,1 + 80000c6c: 00058e93 mv t4,a1 + 80000c70: 00271713 slli a4,a4,0x2 + 80000c74: 00e78733 add a4,a5,a4 + 80000c78: 00072023 sw zero,0(a4) + 80000c7c: 00842703 lw a4,8(s0) + 80000c80: 00100e13 li t3,1 + 80000c84: 00000f93 li t6,0 + 80000c88: 00e68733 add a4,a3,a4 + 80000c8c: 00c70023 sb a2,0(a4) + 80000c90: 000ea603 lw a2,0(t4) + 80000c94: 001f8f9b addiw t6,t6,1 + 80000c98: 00261613 slli a2,a2,0x2 + 80000c9c: 00c50733 add a4,a0,a2 + 80000ca0: 00072703 lw a4,0(a4) + 80000ca4: 07570a63 beq a4,s5,80000d18 + 80000ca8: 01043903 ld s2,16(s0) + 80000cac: 02043483 ld s1,32(s0) + 80000cb0: 00c788b3 add a7,a5,a2 + 80000cb4: 00471313 slli t1,a4,0x4 + 80000cb8: 00690333 add t1,s2,t1 + 80000cbc: 00432603 lw a2,4(t1) + 80000cc0: 00271713 slli a4,a4,0x2 + 80000cc4: 00e48733 add a4,s1,a4 + 80000cc8: 00c689b3 add s3,a3,a2 + 80000ccc: 0009c283 lbu t0,0(s3) + 80000cd0: 04029063 bnez t0,80000d10 + 80000cd4: 00832a03 lw s4,8(t1) + 80000cd8: 00c32383 lw t2,12(t1) + 80000cdc: 00261613 slli a2,a2,0x2 + 80000ce0: 002e1293 slli t0,t3,0x2 + 80000ce4: 00c78633 add a2,a5,a2 + 80000ce8: 005582b3 add t0,a1,t0 + 80000cec: 0343d263 bge t2,s4,80000d10 + 80000cf0: 0008a383 lw t2,0(a7) + 80000cf4: 00100a13 li s4,1 + 80000cf8: 01498023 sb s4,0(s3) + 80000cfc: 0013839b addiw t2,t2,1 + 80000d00: 00762023 sw t2,0(a2) + 80000d04: 00432603 lw a2,4(t1) + 80000d08: 001e0e1b addiw t3,t3,1 + 80000d0c: 00c2a023 sw a2,0(t0) + 80000d10: 00072703 lw a4,0(a4) + 80000d14: fb5710e3 bne a4,s5,80000cb4 + 80000d18: 004e8e93 addi t4,t4,4 + 80000d1c: f7cf9ae3 bne t6,t3,80000c90 + 80000d20: 00c42703 lw a4,12(s0) + 80000d24: 00e68633 add a2,a3,a4 + 80000d28: 00064603 lbu a2,0(a2) + 80000d2c: 38060063 beqz a2,800010ac + 80000d30: 00042603 lw a2,0(s0) + 80000d34: 02c05863 blez a2,80000d64 + 80000d38: 03043883 ld a7,48(s0) + 80000d3c: 00050613 mv a2,a0 + 80000d40: 00000713 li a4,0 + 80000d44: 00062303 lw t1,0(a2) + 80000d48: 0017071b addiw a4,a4,1 + 80000d4c: 00460613 addi a2,a2,4 + 80000d50: 0068a023 sw t1,0(a7) + 80000d54: 00042303 lw t1,0(s0) + 80000d58: 00488893 addi a7,a7,4 + 80000d5c: fe6744e3 blt a4,t1,80000d44 + 80000d60: 00c42703 lw a4,12(s0) + 80000d64: 38ef0663 beq t5,a4,800010f0 + 80000d68: 03043703 ld a4,48(s0) + 80000d6c: 00013603 ld a2,0(sp) + 80000d70: 00c70733 add a4,a4,a2 + 80000d74: 00072b83 lw s7,0(a4) + 80000d78: 335b8663 beq s7,s5,800010a4 + 80000d7c: 003f4db7 lui s11,0x3f4 + 80000d80: 00000e93 li t4,0 + 80000d84: f3fd8d93 addi s11,s11,-193 # 3f3f3f <_entry_offset+0x3f3f3f> + 80000d88: 0180006f j 80000da0 + 80000d8c: 02043703 ld a4,32(s0) + 80000d90: 002b9b93 slli s7,s7,0x2 + 80000d94: 01770bb3 add s7,a4,s7 + 80000d98: 000bab83 lw s7,0(s7) + 80000d9c: 2f5b8c63 beq s7,s5,80001094 + 80000da0: 01043a03 ld s4,16(s0) + 80000da4: 004b9b13 slli s6,s7,0x4 + 80000da8: 00013703 ld a4,0(sp) + 80000dac: 016a0b33 add s6,s4,s6 + 80000db0: 004b2603 lw a2,4(s6) + 80000db4: 00e78733 add a4,a5,a4 + 80000db8: 00072703 lw a4,0(a4) + 80000dbc: 00261f93 slli t6,a2,0x2 + 80000dc0: 01f786b3 add a3,a5,t6 + 80000dc4: 0006a683 lw a3,0(a3) + 80000dc8: 0017071b addiw a4,a4,1 + 80000dcc: fcd710e3 bne a4,a3,80000d8c + 80000dd0: 008b2483 lw s1,8(s6) + 80000dd4: 00cb2703 lw a4,12(s6) + 80000dd8: 40e4873b subw a4,s1,a4 + 80000ddc: 00070493 mv s1,a4 + 80000de0: 00edd463 bge s11,a4,80000de8 + 80000de4: 000d849b sext.w s1,s11 + 80000de8: 00c42703 lw a4,12(s0) + 80000dec: 34c70663 beq a4,a2,80001138 + 80000df0: f8048ee3 beqz s1,80000d8c + 80000df4: 03043703 ld a4,48(s0) + 80000df8: 01f70733 add a4,a4,t6 + 80000dfc: 00072c03 lw s8,0(a4) + 80000e00: f95c06e3 beq s8,s5,80000d8c + 80000e04: 00048893 mv a7,s1 + 80000e08: 00000493 li s1,0 + 80000e0c: 0240006f j 80000e30 + 80000e10: 02043703 ld a4,32(s0) + 80000e14: 002c1c13 slli s8,s8,0x2 + 80000e18: 01870c33 add s8,a4,s8 + 80000e1c: 000c2c03 lw s8,0(s8) + 80000e20: 315c0c63 beq s8,s5,80001138 + 80000e24: 01f78733 add a4,a5,t6 + 80000e28: 01043a03 ld s4,16(s0) + 80000e2c: 00072683 lw a3,0(a4) + 80000e30: 004c1713 slli a4,s8,0x4 + 80000e34: 00ea0733 add a4,s4,a4 + 80000e38: 00472583 lw a1,4(a4) + 80000e3c: 0016869b addiw a3,a3,1 + 80000e40: 00259293 slli t0,a1,0x2 + 80000e44: 00578633 add a2,a5,t0 + 80000e48: 00062603 lw a2,0(a2) + 80000e4c: fcc692e3 bne a3,a2,80000e10 + 80000e50: 00872903 lw s2,8(a4) + 80000e54: 00c72683 lw a3,12(a4) + 80000e58: 40d906bb subw a3,s2,a3 + 80000e5c: 00068913 mv s2,a3 + 80000e60: 00d8d463 bge a7,a3,80000e68 + 80000e64: 0008891b sext.w s2,a7 + 80000e68: 00c42683 lw a3,12(s0) + 80000e6c: 2cb68063 beq a3,a1,8000112c + 80000e70: fa0900e3 beqz s2,80000e10 + 80000e74: 03043683 ld a3,48(s0) + 80000e78: 005686b3 add a3,a3,t0 + 80000e7c: 0006ac83 lw s9,0(a3) + 80000e80: f95c88e3 beq s9,s5,80000e10 + 80000e84: 00090313 mv t1,s2 + 80000e88: 00000913 li s2,0 + 80000e8c: 0240006f j 80000eb0 + 80000e90: 02043683 ld a3,32(s0) + 80000e94: 002c9c93 slli s9,s9,0x2 + 80000e98: 01968cb3 add s9,a3,s9 + 80000e9c: 000cac83 lw s9,0(s9) + 80000ea0: 295c8663 beq s9,s5,8000112c + 80000ea4: 005786b3 add a3,a5,t0 + 80000ea8: 01043a03 ld s4,16(s0) + 80000eac: 0006a603 lw a2,0(a3) + 80000eb0: 004c9693 slli a3,s9,0x4 + 80000eb4: 00da06b3 add a3,s4,a3 + 80000eb8: 0046a583 lw a1,4(a3) + 80000ebc: 0016051b addiw a0,a2,1 + 80000ec0: 00259393 slli t2,a1,0x2 + 80000ec4: 00778633 add a2,a5,t2 + 80000ec8: 00062603 lw a2,0(a2) + 80000ecc: fcc512e3 bne a0,a2,80000e90 + 80000ed0: 0086a983 lw s3,8(a3) + 80000ed4: 00c6a503 lw a0,12(a3) + 80000ed8: 40a9853b subw a0,s3,a0 + 80000edc: 00050993 mv s3,a0 + 80000ee0: 00a35463 bge t1,a0,80000ee8 + 80000ee4: 0003099b sext.w s3,t1 + 80000ee8: 00c42503 lw a0,12(s0) + 80000eec: 22b50a63 beq a0,a1,80001120 + 80000ef0: fa0980e3 beqz s3,80000e90 + 80000ef4: 03043583 ld a1,48(s0) + 80000ef8: 007585b3 add a1,a1,t2 + 80000efc: 0005ad03 lw s10,0(a1) + 80000f00: f95d08e3 beq s10,s5,80000e90 + 80000f04: 00098e13 mv t3,s3 + 80000f08: 00000993 li s3,0 + 80000f0c: 0240006f j 80000f30 + 80000f10: 02043583 ld a1,32(s0) + 80000f14: 002d1d13 slli s10,s10,0x2 + 80000f18: 00778633 add a2,a5,t2 + 80000f1c: 01a58d33 add s10,a1,s10 + 80000f20: 000d2d03 lw s10,0(s10) + 80000f24: 1f5d0e63 beq s10,s5,80001120 + 80000f28: 01043a03 ld s4,16(s0) + 80000f2c: 00062603 lw a2,0(a2) + 80000f30: 004d1593 slli a1,s10,0x4 + 80000f34: 00ba0a33 add s4,s4,a1 + 80000f38: 004a2583 lw a1,4(s4) + 80000f3c: 0016051b addiw a0,a2,1 + 80000f40: 00259613 slli a2,a1,0x2 + 80000f44: 00c78633 add a2,a5,a2 + 80000f48: 00062603 lw a2,0(a2) + 80000f4c: fcc512e3 bne a0,a2,80000f10 + 80000f50: 008a2603 lw a2,8(s4) + 80000f54: 00ca2783 lw a5,12(s4) + 80000f58: 00040513 mv a0,s0 + 80000f5c: 40f607bb subw a5,a2,a5 + 80000f60: 00078613 mv a2,a5 + 80000f64: 00fe5463 bge t3,a5,80000f6c + 80000f68: 000e061b sext.w a2,t3 + 80000f6c: 05c13c23 sd t3,88(sp) + 80000f70: 04613823 sd t1,80(sp) + 80000f74: 04713423 sd t2,72(sp) + 80000f78: 04d13023 sd a3,64(sp) + 80000f7c: 03113c23 sd a7,56(sp) + 80000f80: 02513823 sd t0,48(sp) + 80000f84: 02e13423 sd a4,40(sp) + 80000f88: 03d13023 sd t4,32(sp) + 80000f8c: 01f13c23 sd t6,24(sp) + 80000f90: 01013823 sd a6,16(sp) + 80000f94: 01e13423 sd t5,8(sp) + 80000f98: f10ff0ef jal ra,800006a8 <_ZN5Dinic3DFSEii> + 80000f9c: 001d4593 xori a1,s10,1 + 80000fa0: 00813f03 ld t5,8(sp) + 80000fa4: 01013803 ld a6,16(sp) + 80000fa8: 01813f83 ld t6,24(sp) + 80000fac: 02013e83 ld t4,32(sp) + 80000fb0: 02813703 ld a4,40(sp) + 80000fb4: 03013283 ld t0,48(sp) + 80000fb8: 03813883 ld a7,56(sp) + 80000fbc: 04013683 ld a3,64(sp) + 80000fc0: 04813383 ld t2,72(sp) + 80000fc4: 05013303 ld t1,80(sp) + 80000fc8: 05813e03 ld t3,88(sp) + 80000fcc: 00459593 slli a1,a1,0x4 + 80000fd0: 12a05a63 blez a0,80001104 + 80000fd4: 00ca2783 lw a5,12(s4) + 80000fd8: 01043603 ld a2,16(s0) + 80000fdc: 40ae0e3b subw t3,t3,a0 + 80000fe0: 00a787bb addw a5,a5,a0 + 80000fe4: 00fa2623 sw a5,12(s4) + 80000fe8: 00b605b3 add a1,a2,a1 + 80000fec: 00c5aa03 lw s4,12(a1) + 80000ff0: 00a989bb addw s3,s3,a0 + 80000ff4: 02843783 ld a5,40(s0) + 80000ff8: 40aa053b subw a0,s4,a0 + 80000ffc: 00a5a623 sw a0,12(a1) + 80001000: f00e18e3 bnez t3,80000f10 + 80001004: 00c6a503 lw a0,12(a3) + 80001008: 001cc593 xori a1,s9,1 + 8000100c: 00459593 slli a1,a1,0x4 + 80001010: 0135053b addw a0,a0,s3 + 80001014: 00a6a623 sw a0,12(a3) + 80001018: 00b606b3 add a3,a2,a1 + 8000101c: 00c6a583 lw a1,12(a3) + 80001020: 4133033b subw t1,t1,s3 + 80001024: 0139093b addw s2,s2,s3 + 80001028: 413589bb subw s3,a1,s3 + 8000102c: 0136a623 sw s3,12(a3) + 80001030: e60310e3 bnez t1,80000e90 + 80001034: 00c72583 lw a1,12(a4) + 80001038: 001c4693 xori a3,s8,1 + 8000103c: 00469693 slli a3,a3,0x4 + 80001040: 012585bb addw a1,a1,s2 + 80001044: 00b72623 sw a1,12(a4) + 80001048: 00d60733 add a4,a2,a3 + 8000104c: 00c72683 lw a3,12(a4) + 80001050: 412888bb subw a7,a7,s2 + 80001054: 012484bb addw s1,s1,s2 + 80001058: 4126893b subw s2,a3,s2 + 8000105c: 01272623 sw s2,12(a4) + 80001060: da0898e3 bnez a7,80000e10 + 80001064: 00cb2683 lw a3,12(s6) + 80001068: 001bc713 xori a4,s7,1 + 8000106c: 00471713 slli a4,a4,0x4 + 80001070: 009686bb addw a3,a3,s1 + 80001074: 00db2623 sw a3,12(s6) + 80001078: 00e60633 add a2,a2,a4 + 8000107c: 00c62703 lw a4,12(a2) + 80001080: 409d8dbb subw s11,s11,s1 + 80001084: 009e8ebb addw t4,t4,s1 + 80001088: 409704bb subw s1,a4,s1 + 8000108c: 00962623 sw s1,12(a2) + 80001090: ce0d9ee3 bnez s11,80000d8c + 80001094: 04043683 ld a3,64(s0) + 80001098: 03843583 ld a1,56(s0) + 8000109c: 01843503 ld a0,24(s0) + 800010a0: 01d8083b addw a6,a6,t4 + 800010a4: 00842883 lw a7,8(s0) + 800010a8: b8dff06f j 80000c34 + 800010ac: 0c813083 ld ra,200(sp) + 800010b0: 0c013403 ld s0,192(sp) + 800010b4: 00007797 auipc a5,0x7 + 800010b8: 9107ac23 sw a6,-1768(a5) # 800079cc <_ZL3ans> + 800010bc: 0b813483 ld s1,184(sp) + 800010c0: 0b013903 ld s2,176(sp) + 800010c4: 0a813983 ld s3,168(sp) + 800010c8: 0a013a03 ld s4,160(sp) + 800010cc: 09813a83 ld s5,152(sp) + 800010d0: 09013b03 ld s6,144(sp) + 800010d4: 08813b83 ld s7,136(sp) + 800010d8: 08013c03 ld s8,128(sp) + 800010dc: 07813c83 ld s9,120(sp) + 800010e0: 07013d03 ld s10,112(sp) + 800010e4: 06813d83 ld s11,104(sp) + 800010e8: 0d010113 addi sp,sp,208 + 800010ec: 00008067 ret + 800010f0: 003f4737 lui a4,0x3f4 + 800010f4: f3f7071b addiw a4,a4,-193 + 800010f8: 00842883 lw a7,8(s0) + 800010fc: 0107083b addw a6,a4,a6 + 80001100: b35ff06f j 80000c34 + 80001104: 02043583 ld a1,32(s0) + 80001108: 002d1d13 slli s10,s10,0x2 + 8000110c: 02843783 ld a5,40(s0) + 80001110: 01a58d33 add s10,a1,s10 + 80001114: 000d2d03 lw s10,0(s10) + 80001118: 00778633 add a2,a5,t2 + 8000111c: e15d16e3 bne s10,s5,80000f28 + 80001120: d73058e3 blez s3,80000e90 + 80001124: 01043603 ld a2,16(s0) + 80001128: eddff06f j 80001004 + 8000112c: cf2052e3 blez s2,80000e10 + 80001130: 01043603 ld a2,16(s0) + 80001134: f01ff06f j 80001034 + 80001138: c4905ae3 blez s1,80000d8c + 8000113c: 01043603 ld a2,16(s0) + 80001140: f25ff06f j 80001064 + +0000000080001144 : + 80001144: 00007797 auipc a5,0x7 + 80001148: 98c7b783 ld a5,-1652(a5) # 80007ad0 + 8000114c: 0187a503 lw a0,24(a5) + 80001150: 00007797 auipc a5,0x7 + 80001154: 87c7a783 lw a5,-1924(a5) # 800079cc <_ZL3ans> + 80001158: 40f50533 sub a0,a0,a5 + 8000115c: 00153513 seqz a0,a0 + 80001160: 00008067 ret + +0000000080001164 <_ZL9radixPassPiS_S_ii>: + 80001164: fd010113 addi sp,sp,-48 + 80001168: 0017079b addiw a5,a4,1 + 8000116c: 02813023 sd s0,32(sp) + 80001170: 01413023 sd s4,0(sp) + 80001174: 00050413 mv s0,a0 + 80001178: 00070a13 mv s4,a4 + 8000117c: 00279513 slli a0,a5,0x2 + 80001180: 00913c23 sd s1,24(sp) + 80001184: 01213823 sd s2,16(sp) + 80001188: 01313423 sd s3,8(sp) + 8000118c: 02113423 sd ra,40(sp) + 80001190: 00058993 mv s3,a1 + 80001194: 00060493 mv s1,a2 + 80001198: 00068913 mv s2,a3 + 8000119c: b7cff0ef jal ra,80000518 + 800011a0: 0e0a4c63 bltz s4,80001298 <_ZL9radixPassPiS_S_ii+0x134> + 800011a4: 001a0713 addi a4,s4,1 + 800011a8: 00271713 slli a4,a4,0x2 + 800011ac: 00050793 mv a5,a0 + 800011b0: 00a70733 add a4,a4,a0 + 800011b4: 0007a023 sw zero,0(a5) + 800011b8: 00478793 addi a5,a5,4 + 800011bc: fef71ce3 bne a4,a5,800011b4 <_ZL9radixPassPiS_S_ii+0x50> + 800011c0: 05205663 blez s2,8000120c <_ZL9radixPassPiS_S_ii+0xa8> + 800011c4: fff9071b addiw a4,s2,-1 + 800011c8: 02071713 slli a4,a4,0x20 + 800011cc: 01e75793 srli a5,a4,0x1e + 800011d0: 00440713 addi a4,s0,4 + 800011d4: 00040813 mv a6,s0 + 800011d8: 00e78733 add a4,a5,a4 + 800011dc: 00082783 lw a5,0(a6) + 800011e0: 00480813 addi a6,a6,4 + 800011e4: 00279793 slli a5,a5,0x2 + 800011e8: 00f487b3 add a5,s1,a5 + 800011ec: 0007a783 lw a5,0(a5) + 800011f0: 00279793 slli a5,a5,0x2 + 800011f4: 00f507b3 add a5,a0,a5 + 800011f8: 0007a883 lw a7,0(a5) + 800011fc: 0018889b addiw a7,a7,1 + 80001200: 0117a023 sw a7,0(a5) + 80001204: fd071ce3 bne a4,a6,800011dc <_ZL9radixPassPiS_S_ii+0x78> + 80001208: 020a4663 bltz s4,80001234 <_ZL9radixPassPiS_S_ii+0xd0> + 8000120c: 00050793 mv a5,a0 + 80001210: 00000693 li a3,0 + 80001214: 00000813 li a6,0 + 80001218: 0007a603 lw a2,0(a5) + 8000121c: 0018081b addiw a6,a6,1 + 80001220: 00d7a023 sw a3,0(a5) + 80001224: 00d606bb addw a3,a2,a3 + 80001228: 00478793 addi a5,a5,4 + 8000122c: ff0a56e3 bge s4,a6,80001218 <_ZL9radixPassPiS_S_ii+0xb4> + 80001230: 05205463 blez s2,80001278 <_ZL9radixPassPiS_S_ii+0x114> + 80001234: 00040893 mv a7,s0 + 80001238: 00000813 li a6,0 + 8000123c: 0008a683 lw a3,0(a7) + 80001240: 0018081b addiw a6,a6,1 + 80001244: 00488893 addi a7,a7,4 + 80001248: 00269793 slli a5,a3,0x2 + 8000124c: 00f487b3 add a5,s1,a5 + 80001250: 0007a703 lw a4,0(a5) + 80001254: 00271713 slli a4,a4,0x2 + 80001258: 00e50733 add a4,a0,a4 + 8000125c: 00072783 lw a5,0(a4) # 3f4000 <_entry_offset+0x3f4000> + 80001260: 0017861b addiw a2,a5,1 + 80001264: 00279793 slli a5,a5,0x2 + 80001268: 00c72023 sw a2,0(a4) + 8000126c: 00f987b3 add a5,s3,a5 + 80001270: 00d7a023 sw a3,0(a5) + 80001274: fd2844e3 blt a6,s2,8000123c <_ZL9radixPassPiS_S_ii+0xd8> + 80001278: 02813083 ld ra,40(sp) + 8000127c: 02013403 ld s0,32(sp) + 80001280: 01813483 ld s1,24(sp) + 80001284: 01013903 ld s2,16(sp) + 80001288: 00813983 ld s3,8(sp) + 8000128c: 00013a03 ld s4,0(sp) + 80001290: 03010113 addi sp,sp,48 + 80001294: 00008067 ret + 80001298: f32046e3 bgtz s2,800011c4 <_ZL9radixPassPiS_S_ii+0x60> + 8000129c: fddff06f j 80001278 <_ZL9radixPassPiS_S_ii+0x114> + +00000000800012a0 <_Z11suffixArrayPiS_ii>: + 800012a0: f4010113 addi sp,sp,-192 + 800012a4: 09313c23 sd s3,152(sp) + 800012a8: 07813823 sd s8,112(sp) + 800012ac: 00050993 mv s3,a0 + 800012b0: 00058c13 mv s8,a1 + 800012b4: 0026051b addiw a0,a2,2 + 800012b8: 00300593 li a1,3 + 800012bc: 0a113c23 sd ra,184(sp) + 800012c0: 02c13423 sd a2,40(sp) + 800012c4: 02d13823 sd a3,48(sp) + 800012c8: 0a813823 sd s0,176(sp) + 800012cc: 0a913423 sd s1,168(sp) + 800012d0: 0b213023 sd s2,160(sp) + 800012d4: 00060493 mv s1,a2 + 800012d8: 09413823 sd s4,144(sp) + 800012dc: 09513423 sd s5,136(sp) + 800012e0: 09613023 sd s6,128(sp) + 800012e4: 07713c23 sd s7,120(sp) + 800012e8: 07913423 sd s9,104(sp) + 800012ec: 07a13023 sd s10,96(sp) + 800012f0: 01813823 sd s8,16(sp) + 800012f4: 05b13c23 sd s11,88(sp) + 800012f8: 648030ef jal ra,80004940 <__divdi3> + 800012fc: 00300593 li a1,3 + 80001300: 00050413 mv s0,a0 + 80001304: 00048513 mv a0,s1 + 80001308: 638030ef jal ra,80004940 <__divdi3> + 8000130c: 0004041b sext.w s0,s0 + 80001310: 00850abb addw s5,a0,s0 + 80001314: 003a8a1b addiw s4,s5,3 + 80001318: 002a1a13 slli s4,s4,0x2 + 8000131c: 000a0513 mv a0,s4 + 80001320: 002a8913 addi s2,s5,2 + 80001324: 9f4ff0ef jal ra,80000518 + 80001328: 00291913 slli s2,s2,0x2 + 8000132c: 012507b3 add a5,a0,s2 + 80001330: ffc90c93 addi s9,s2,-4 + 80001334: 0007a023 sw zero,0(a5) + 80001338: ff890b93 addi s7,s2,-8 + 8000133c: 019507b3 add a5,a0,s9 + 80001340: 0007a023 sw zero,0(a5) + 80001344: 017507b3 add a5,a0,s7 + 80001348: 00048c13 mv s8,s1 + 8000134c: 0007a023 sw zero,0(a5) + 80001350: 00050493 mv s1,a0 + 80001354: 000a0513 mv a0,s4 + 80001358: 9c0ff0ef jal ra,80000518 + 8000135c: 01250933 add s2,a0,s2 + 80001360: 00092023 sw zero,0(s2) + 80001364: 01950cb3 add s9,a0,s9 + 80001368: 000ca023 sw zero,0(s9) + 8000136c: 00241913 slli s2,s0,0x2 + 80001370: 01750bb3 add s7,a0,s7 + 80001374: 000ba023 sw zero,0(s7) + 80001378: 00050a13 mv s4,a0 + 8000137c: 00090513 mv a0,s2 + 80001380: 998ff0ef jal ra,80000518 + 80001384: 00050c93 mv s9,a0 + 80001388: 00090513 mv a0,s2 + 8000138c: 01913c23 sd s9,24(sp) + 80001390: 988ff0ef jal ra,80000518 + 80001394: 00050b93 mv s7,a0 + 80001398: 00300593 li a1,3 + 8000139c: 001c051b addiw a0,s8,1 + 800013a0: 03713023 sd s7,32(sp) + 800013a4: 59c030ef jal ra,80004940 <__divdi3> + 800013a8: 40a4093b subw s2,s0,a0 + 800013ac: 01890d3b addw s10,s2,s8 + 800013b0: 000a8b13 mv s6,s5 + 800013b4: 00000c13 li s8,0 + 800013b8: 00000b93 li s7,0 + 800013bc: 05a05463 blez s10,80001404 <_Z11suffixArrayPiS_ii+0x164> + 800013c0: 001c0c1b addiw s8,s8,1 + 800013c4: 00300593 li a1,3 + 800013c8: 000c0c93 mv s9,s8 + 800013cc: 000c0513 mv a0,s8 + 800013d0: 03ac0a63 beq s8,s10,80001404 <_Z11suffixArrayPiS_ii+0x164> + 800013d4: 5f0030ef jal ra,800049c4 <__moddi3> + 800013d8: 002b9793 slli a5,s7,0x2 + 800013dc: 0005051b sext.w a0,a0 + 800013e0: 00f487b3 add a5,s1,a5 + 800013e4: fc050ee3 beqz a0,800013c0 <_Z11suffixArrayPiS_ii+0x120> + 800013e8: 001c0c1b addiw s8,s8,1 + 800013ec: 0197a023 sw s9,0(a5) + 800013f0: 001b8b9b addiw s7,s7,1 + 800013f4: 00300593 li a1,3 + 800013f8: 000c0c93 mv s9,s8 + 800013fc: 000c0513 mv a0,s8 + 80001400: fdac1ae3 bne s8,s10,800013d4 <_Z11suffixArrayPiS_ii+0x134> + 80001404: 03013b83 ld s7,48(sp) + 80001408: 00898613 addi a2,s3,8 + 8000140c: 000a0593 mv a1,s4 + 80001410: 00048513 mv a0,s1 + 80001414: 000b8713 mv a4,s7 + 80001418: 000a8693 mv a3,s5 + 8000141c: d49ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 80001420: 000b8713 mv a4,s7 + 80001424: 000a8693 mv a3,s5 + 80001428: 00498613 addi a2,s3,4 + 8000142c: 00048593 mv a1,s1 + 80001430: 000a0513 mv a0,s4 + 80001434: d31ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 80001438: 000b8713 mv a4,s7 + 8000143c: 000a8693 mv a3,s5 + 80001440: 00098613 mv a2,s3 + 80001444: 000a0593 mv a1,s4 + 80001448: 00048513 mv a0,s1 + 8000144c: d19ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 80001450: 13505c63 blez s5,80001588 <_Z11suffixArrayPiS_ii+0x2e8> + 80001454: fffb089b addiw a7,s6,-1 + 80001458: 02089893 slli a7,a7,0x20 + 8000145c: 0208d893 srli a7,a7,0x20 + 80001460: 00188893 addi a7,a7,1 + 80001464: 00289893 slli a7,a7,0x2 + 80001468: 000a0d93 mv s11,s4 + 8000146c: 01488d33 add s10,a7,s4 + 80001470: 000a0613 mv a2,s4 + 80001474: fff00b13 li s6,-1 + 80001478: fff00b93 li s7,-1 + 8000147c: fff00c93 li s9,-1 + 80001480: 00000c13 li s8,0 + 80001484: 0600006f j 800014e4 <_Z11suffixArrayPiS_ii+0x244> + 80001488: 001c0c1b addiw s8,s8,1 + 8000148c: 000f0c93 mv s9,t5 + 80001490: 00c13423 sd a2,8(sp) + 80001494: 00e13023 sd a4,0(sp) + 80001498: 4a8030ef jal ra,80004940 <__divdi3> + 8000149c: 00013703 ld a4,0(sp) + 800014a0: 00050793 mv a5,a0 + 800014a4: 0007879b sext.w a5,a5 + 800014a8: 00070513 mv a0,a4 + 800014ac: 00300593 li a1,3 + 800014b0: 00f13023 sd a5,0(sp) + 800014b4: 510030ef jal ra,800049c4 <__moddi3> + 800014b8: 00013783 ld a5,0(sp) + 800014bc: 0005051b sext.w a0,a0 + 800014c0: 00100693 li a3,1 + 800014c4: 00f4073b addw a4,s0,a5 + 800014c8: 00271713 slli a4,a4,0x2 + 800014cc: 00813603 ld a2,8(sp) + 800014d0: 00e48733 add a4,s1,a4 + 800014d4: 04d50463 beq a0,a3,8000151c <_Z11suffixArrayPiS_ii+0x27c> + 800014d8: 01872023 sw s8,0(a4) + 800014dc: 00460613 addi a2,a2,4 + 800014e0: 04cd0863 beq s10,a2,80001530 <_Z11suffixArrayPiS_ii+0x290> + 800014e4: 00062703 lw a4,0(a2) + 800014e8: 000b8f93 mv t6,s7 + 800014ec: 000b0293 mv t0,s6 + 800014f0: 00271793 slli a5,a4,0x2 + 800014f4: 00f987b3 add a5,s3,a5 + 800014f8: 0007af03 lw t5,0(a5) + 800014fc: 0047ab83 lw s7,4(a5) + 80001500: 0087ab03 lw s6,8(a5) + 80001504: 00300593 li a1,3 + 80001508: 00070513 mv a0,a4 + 8000150c: f79f1ee3 bne t5,s9,80001488 <_Z11suffixArrayPiS_ii+0x1e8> + 80001510: f77f9ce3 bne t6,s7,80001488 <_Z11suffixArrayPiS_ii+0x1e8> + 80001514: f7629ae3 bne t0,s6,80001488 <_Z11suffixArrayPiS_ii+0x1e8> + 80001518: f79ff06f j 80001490 <_Z11suffixArrayPiS_ii+0x1f0> + 8000151c: 00279793 slli a5,a5,0x2 + 80001520: 00f487b3 add a5,s1,a5 + 80001524: 0187a023 sw s8,0(a5) + 80001528: 00460613 addi a2,a2,4 + 8000152c: facd1ce3 bne s10,a2,800014e4 <_Z11suffixArrayPiS_ii+0x244> + 80001530: 00048613 mv a2,s1 + 80001534: 00000713 li a4,0 + 80001538: 315c4863 blt s8,s5,80001848 <_Z11suffixArrayPiS_ii+0x5a8> + 8000153c: 00062783 lw a5,0(a2) + 80001540: 00460613 addi a2,a2,4 + 80001544: 00279793 slli a5,a5,0x2 + 80001548: 00fa07b3 add a5,s4,a5 + 8000154c: fee7ae23 sw a4,-4(a5) + 80001550: 0017071b addiw a4,a4,1 + 80001554: feea94e3 bne s5,a4,8000153c <_Z11suffixArrayPiS_ii+0x29c> + 80001558: 00000613 li a2,0 + 8000155c: 000da703 lw a4,0(s11) + 80001560: 01813583 ld a1,24(sp) + 80001564: 00261793 slli a5,a2,0x2 + 80001568: 0017169b slliw a3,a4,0x1 + 8000156c: 004d8d93 addi s11,s11,4 + 80001570: 00f587b3 add a5,a1,a5 + 80001574: 00e686bb addw a3,a3,a4 + 80001578: 00875663 bge a4,s0,80001584 <_Z11suffixArrayPiS_ii+0x2e4> + 8000157c: 00d7a023 sw a3,0(a5) + 80001580: 0016061b addiw a2,a2,1 + 80001584: fdad9ce3 bne s11,s10,8000155c <_Z11suffixArrayPiS_ii+0x2bc> + 80001588: 02013b03 ld s6,32(sp) + 8000158c: 03013703 ld a4,48(sp) + 80001590: 01813503 ld a0,24(sp) + 80001594: 00040693 mv a3,s0 + 80001598: 00098613 mv a2,s3 + 8000159c: 000b0593 mv a1,s6 + 800015a0: bc5ff0ef jal ra,80001164 <_ZL9radixPassPiS_S_ii> + 800015a4: 02813783 ld a5,40(sp) + 800015a8: 0ef05463 blez a5,80001690 <_Z11suffixArrayPiS_ii+0x3f0> + 800015ac: 000a879b sext.w a5,s5 + 800015b0: 02f13c23 sd a5,56(sp) + 800015b4: fffa879b addiw a5,s5,-1 + 800015b8: 04f12223 sw a5,68(sp) + 800015bc: 004a0793 addi a5,s4,4 + 800015c0: 04f13423 sd a5,72(sp) + 800015c4: 0004079b sext.w a5,s0 + 800015c8: 00f13423 sd a5,8(sp) + 800015cc: fff4079b addiw a5,s0,-1 + 800015d0: 00f12c23 sw a5,24(sp) + 800015d4: 004b0793 addi a5,s6,4 + 800015d8: 00000d13 li s10,0 + 800015dc: 00000c93 li s9,0 + 800015e0: 02f13823 sd a5,48(sp) + 800015e4: 02013703 ld a4,32(sp) + 800015e8: 002c9793 slli a5,s9,0x2 + 800015ec: 00291613 slli a2,s2,0x2 + 800015f0: 00f70c33 add s8,a4,a5 + 800015f4: 000c2b83 lw s7,0(s8) + 800015f8: 00ca0b33 add s6,s4,a2 + 800015fc: 000b2783 lw a5,0(s6) + 80001600: 002b9813 slli a6,s7,0x2 + 80001604: 00300593 li a1,3 + 80001608: 000b8513 mv a0,s7 + 8000160c: 00f13023 sd a5,0(sp) + 80001610: 01098db3 add s11,s3,a6 + 80001614: 32c030ef jal ra,80004940 <__divdi3> + 80001618: 00013783 ld a5,0(sp) + 8000161c: 000dae83 lw t4,0(s11) + 80001620: 0005071b sext.w a4,a0 + 80001624: 1c87d463 bge a5,s0,800017ec <_Z11suffixArrayPiS_ii+0x54c> + 80001628: 0017959b slliw a1,a5,0x1 + 8000162c: 00f585bb addw a1,a1,a5 + 80001630: 0015859b addiw a1,a1,1 + 80001634: 00259513 slli a0,a1,0x2 + 80001638: 00a98533 add a0,s3,a0 + 8000163c: 008787bb addw a5,a5,s0 + 80001640: 00052503 lw a0,0(a0) + 80001644: 00279793 slli a5,a5,0x2 + 80001648: 00271713 slli a4,a4,0x2 + 8000164c: 00f487b3 add a5,s1,a5 + 80001650: 00e48733 add a4,s1,a4 + 80001654: 0007a803 lw a6,0(a5) + 80001658: 00072783 lw a5,0(a4) + 8000165c: 11d54663 blt a0,t4,80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 80001660: 11d50263 beq a0,t4,80001764 <_Z11suffixArrayPiS_ii+0x4c4> + 80001664: 01013783 ld a5,16(sp) + 80001668: 002d1693 slli a3,s10,0x2 + 8000166c: 001d051b addiw a0,s10,1 + 80001670: 00d787b3 add a5,a5,a3 + 80001674: 0177a023 sw s7,0(a5) + 80001678: 001c8c9b addiw s9,s9,1 + 8000167c: 0005079b sext.w a5,a0 + 80001680: 05940663 beq s0,s9,800016cc <_Z11suffixArrayPiS_ii+0x42c> + 80001684: 00078d13 mv s10,a5 + 80001688: 02813783 ld a5,40(sp) + 8000168c: f4fd4ce3 blt s10,a5,800015e4 <_Z11suffixArrayPiS_ii+0x344> + 80001690: 0b813083 ld ra,184(sp) + 80001694: 0b013403 ld s0,176(sp) + 80001698: 0a813483 ld s1,168(sp) + 8000169c: 0a013903 ld s2,160(sp) + 800016a0: 09813983 ld s3,152(sp) + 800016a4: 09013a03 ld s4,144(sp) + 800016a8: 08813a83 ld s5,136(sp) + 800016ac: 08013b03 ld s6,128(sp) + 800016b0: 07813b83 ld s7,120(sp) + 800016b4: 07013c03 ld s8,112(sp) + 800016b8: 06813c83 ld s9,104(sp) + 800016bc: 06013d03 ld s10,96(sp) + 800016c0: 05813d83 ld s11,88(sp) + 800016c4: 0c010113 addi sp,sp,192 + 800016c8: 00008067 ret + 800016cc: 1b595c63 bge s2,s5,80001884 <_Z11suffixArrayPiS_ii+0x5e4> + 800016d0: 04412783 lw a5,68(sp) + 800016d4: 00468693 addi a3,a3,4 + 800016d8: 000b0613 mv a2,s6 + 800016dc: 41278e3b subw t3,a5,s2 + 800016e0: 01013783 ld a5,16(sp) + 800016e4: 020e1e13 slli t3,t3,0x20 + 800016e8: 020e5e13 srli t3,t3,0x20 + 800016ec: 00d786b3 add a3,a5,a3 + 800016f0: 04813783 ld a5,72(sp) + 800016f4: 012e0e33 add t3,t3,s2 + 800016f8: 002e1e13 slli t3,t3,0x2 + 800016fc: 0009089b sext.w a7,s2 + 80001700: 00fe0e33 add t3,t3,a5 + 80001704: 0180006f j 8000171c <_Z11suffixArrayPiS_ii+0x47c> + 80001708: 0015879b addiw a5,a1,1 + 8000170c: 00f6a023 sw a5,0(a3) + 80001710: 00460613 addi a2,a2,4 + 80001714: 00468693 addi a3,a3,4 + 80001718: 02ce0a63 beq t3,a2,8000174c <_Z11suffixArrayPiS_ii+0x4ac> + 8000171c: 00062703 lw a4,0(a2) + 80001720: 4087083b subw a6,a4,s0 + 80001724: 0017159b slliw a1,a4,0x1 + 80001728: 0018179b slliw a5,a6,0x1 + 8000172c: 00e585bb addw a1,a1,a4 + 80001730: 010787bb addw a5,a5,a6 + 80001734: fc874ae3 blt a4,s0,80001708 <_Z11suffixArrayPiS_ii+0x468> + 80001738: 0027879b addiw a5,a5,2 + 8000173c: 00f6a023 sw a5,0(a3) + 80001740: 00460613 addi a2,a2,4 + 80001744: 00468693 addi a3,a3,4 + 80001748: fcce1ae3 bne t3,a2,8000171c <_Z11suffixArrayPiS_ii+0x47c> + 8000174c: 03813783 ld a5,56(sp) + 80001750: 411508bb subw a7,a0,a7 + 80001754: 000a8913 mv s2,s5 + 80001758: 00f888bb addw a7,a7,a5 + 8000175c: 00188d1b addiw s10,a7,1 + 80001760: f29ff06f j 80001688 <_Z11suffixArrayPiS_ii+0x3e8> + 80001764: f107c0e3 blt a5,a6,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001768: 01013783 ld a5,16(sp) + 8000176c: 002d1713 slli a4,s10,0x2 + 80001770: 001d061b addiw a2,s10,1 + 80001774: 00e787b3 add a5,a5,a4 + 80001778: 00b7a023 sw a1,0(a5) + 8000177c: 0019091b addiw s2,s2,1 + 80001780: 0006079b sext.w a5,a2 + 80001784: f12a90e3 bne s5,s2,80001684 <_Z11suffixArrayPiS_ii+0x3e4> + 80001788: 0e8cde63 bge s9,s0,80001884 <_Z11suffixArrayPiS_ii+0x5e4> + 8000178c: 01812783 lw a5,24(sp) + 80001790: 01013683 ld a3,16(sp) + 80001794: 00470713 addi a4,a4,4 + 80001798: 419785bb subw a1,a5,s9 + 8000179c: 02059593 slli a1,a1,0x20 + 800017a0: 0205d593 srli a1,a1,0x20 + 800017a4: 00e68733 add a4,a3,a4 + 800017a8: 03013683 ld a3,48(sp) + 800017ac: 019585b3 add a1,a1,s9 + 800017b0: 00259593 slli a1,a1,0x2 + 800017b4: 000c0793 mv a5,s8 + 800017b8: 000c889b sext.w a7,s9 + 800017bc: 00d585b3 add a1,a1,a3 + 800017c0: 0007a683 lw a3,0(a5) + 800017c4: 00478793 addi a5,a5,4 + 800017c8: 00470713 addi a4,a4,4 + 800017cc: fed72e23 sw a3,-4(a4) + 800017d0: fef598e3 bne a1,a5,800017c0 <_Z11suffixArrayPiS_ii+0x520> + 800017d4: 00813783 ld a5,8(sp) + 800017d8: 411608bb subw a7,a2,a7 + 800017dc: 00040c93 mv s9,s0 + 800017e0: 00f888bb addw a7,a7,a5 + 800017e4: 00188d1b addiw s10,a7,1 + 800017e8: ea1ff06f j 80001688 <_Z11suffixArrayPiS_ii+0x3e8> + 800017ec: 408787bb subw a5,a5,s0 + 800017f0: 0017959b slliw a1,a5,0x1 + 800017f4: 00f585bb addw a1,a1,a5 + 800017f8: 0025859b addiw a1,a1,2 + 800017fc: 00259f13 slli t5,a1,0x2 + 80001800: 01e98f33 add t5,s3,t5 + 80001804: 000f2f83 lw t6,0(t5) + 80001808: 00178793 addi a5,a5,1 + 8000180c: 00e4073b addw a4,s0,a4 + 80001810: 00279793 slli a5,a5,0x2 + 80001814: 00271713 slli a4,a4,0x2 + 80001818: 00f487b3 add a5,s1,a5 + 8000181c: 00e48733 add a4,s1,a4 + 80001820: 004f2503 lw a0,4(t5) + 80001824: 00072703 lw a4,0(a4) + 80001828: 0007af03 lw t5,0(a5) + 8000182c: 004da783 lw a5,4(s11) + 80001830: f3dfcce3 blt t6,t4,80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 80001834: e3df98e3 bne t6,t4,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001838: f2f548e3 blt a0,a5,80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 8000183c: e2f514e3 bne a0,a5,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001840: e3e742e3 blt a4,t5,80001664 <_Z11suffixArrayPiS_ii+0x3c4> + 80001844: f25ff06f j 80001768 <_Z11suffixArrayPiS_ii+0x4c8> + 80001848: 000c0693 mv a3,s8 + 8000184c: 000a8613 mv a2,s5 + 80001850: 000a0593 mv a1,s4 + 80001854: 00048513 mv a0,s1 + 80001858: a49ff0ef jal ra,800012a0 <_Z11suffixArrayPiS_ii> + 8000185c: 000a0693 mv a3,s4 + 80001860: 00000713 li a4,0 + 80001864: 0006a783 lw a5,0(a3) + 80001868: 0017071b addiw a4,a4,1 + 8000186c: 00468693 addi a3,a3,4 + 80001870: 00279793 slli a5,a5,0x2 + 80001874: 00f487b3 add a5,s1,a5 + 80001878: 00e7a023 sw a4,0(a5) + 8000187c: ff5714e3 bne a4,s5,80001864 <_Z11suffixArrayPiS_ii+0x5c4> + 80001880: cd9ff06f j 80001558 <_Z11suffixArrayPiS_ii+0x2b8> + 80001884: 002d0d1b addiw s10,s10,2 + 80001888: e01ff06f j 80001688 <_Z11suffixArrayPiS_ii+0x3e8> + +000000008000188c : + 8000188c: 00006797 auipc a5,0x6 + 80001890: 2447b783 ld a5,580(a5) # 80007ad0 + 80001894: 0007a783 lw a5,0(a5) + 80001898: fd010113 addi sp,sp,-48 + 8000189c: 01213823 sd s2,16(sp) + 800018a0: 00100513 li a0,1 + 800018a4: 00006917 auipc s2,0x6 + 800018a8: 12c90913 addi s2,s2,300 # 800079d0 <_ZL1N> + 800018ac: 02113423 sd ra,40(sp) + 800018b0: 00f92023 sw a5,0(s2) + 800018b4: 01313423 sd s3,8(sp) + 800018b8: 02813023 sd s0,32(sp) + 800018bc: 00913c23 sd s1,24(sp) + 800018c0: cf5fe0ef jal ra,800005b4 + 800018c4: 00092503 lw a0,0(s2) + 800018c8: 00006997 auipc s3,0x6 + 800018cc: 11098993 addi s3,s3,272 # 800079d8 <_ZL1s> + 800018d0: 00a5051b addiw a0,a0,10 + 800018d4: 00251513 slli a0,a0,0x2 + 800018d8: c41fe0ef jal ra,80000518 + 800018dc: 00092783 lw a5,0(s2) + 800018e0: 00a9b023 sd a0,0(s3) + 800018e4: 00a7851b addiw a0,a5,10 + 800018e8: 00251513 slli a0,a0,0x2 + 800018ec: c2dfe0ef jal ra,80000518 + 800018f0: 00092783 lw a5,0(s2) + 800018f4: 00006717 auipc a4,0x6 + 800018f8: 0ea73623 sd a0,236(a4) # 800079e0 <_ZL2sa> + 800018fc: 02f05e63 blez a5,80001938 + 80001900: 00000413 li s0,0 + 80001904: cc5fe0ef jal ra,800005c8 + 80001908: 0009b483 ld s1,0(s3) + 8000190c: 02051513 slli a0,a0,0x20 + 80001910: 00241793 slli a5,s0,0x2 + 80001914: 01a00593 li a1,26 + 80001918: 02055513 srli a0,a0,0x20 + 8000191c: 00f484b3 add s1,s1,a5 + 80001920: 070030ef jal ra,80004990 <__umoddi3> + 80001924: 00092703 lw a4,0(s2) + 80001928: 00140413 addi s0,s0,1 + 8000192c: 00a4a023 sw a0,0(s1) + 80001930: 0004079b sext.w a5,s0 + 80001934: fce7c8e3 blt a5,a4,80001904 + 80001938: 02813083 ld ra,40(sp) + 8000193c: 02013403 ld s0,32(sp) + 80001940: 01813483 ld s1,24(sp) + 80001944: 01013903 ld s2,16(sp) + 80001948: 00813983 ld s3,8(sp) + 8000194c: 03010113 addi sp,sp,48 + 80001950: 00008067 ret + +0000000080001954 : + 80001954: 01a00693 li a3,26 + 80001958: 00006617 auipc a2,0x6 + 8000195c: 07862603 lw a2,120(a2) # 800079d0 <_ZL1N> + 80001960: 00006597 auipc a1,0x6 + 80001964: 0805b583 ld a1,128(a1) # 800079e0 <_ZL2sa> + 80001968: 00006517 auipc a0,0x6 + 8000196c: 07053503 ld a0,112(a0) # 800079d8 <_ZL1s> + 80001970: 931ff06f j 800012a0 <_Z11suffixArrayPiS_ii> + +0000000080001974 : + 80001974: 00006597 auipc a1,0x6 + 80001978: 05c5a583 lw a1,92(a1) # 800079d0 <_ZL1N> + 8000197c: 00006517 auipc a0,0x6 + 80001980: 06453503 ld a0,100(a0) # 800079e0 <_ZL2sa> + 80001984: 00259593 slli a1,a1,0x2 + 80001988: ff010113 addi sp,sp,-16 + 8000198c: 00b505b3 add a1,a0,a1 + 80001990: 00113423 sd ra,8(sp) + 80001994: c85fe0ef jal ra,80000618 + 80001998: 00006797 auipc a5,0x6 + 8000199c: 1387b783 ld a5,312(a5) # 80007ad0 + 800019a0: 0187a783 lw a5,24(a5) + 800019a4: 00813083 ld ra,8(sp) + 800019a8: 0005051b sext.w a0,a0 + 800019ac: 40a78533 sub a0,a5,a0 + 800019b0: 00153513 seqz a0,a0 + 800019b4: 01010113 addi sp,sp,16 + 800019b8: 00008067 ret + +00000000800019bc : + 800019bc: 00008067 ret + +00000000800019c0 : + 800019c0: 00006797 auipc a5,0x6 + 800019c4: 1107b783 ld a5,272(a5) # 80007ad0 + 800019c8: 0187a503 lw a0,24(a5) + 800019cc: 00006797 auipc a5,0x6 + 800019d0: 01c7a783 lw a5,28(a5) # 800079e8 <_ZL3ans> + 800019d4: 40f50533 sub a0,a0,a5 + 800019d8: 00153513 seqz a0,a0 + 800019dc: 00008067 ret + +00000000800019e0 <_ZN8N_puzzleILi4EEC1Ev>: + 800019e0: f6010113 addi sp,sp,-160 + 800019e4: 07613023 sd s6,96(sp) + 800019e8: 08113c23 sd ra,152(sp) + 800019ec: 08813823 sd s0,144(sp) + 800019f0: 08913423 sd s1,136(sp) + 800019f4: 09213023 sd s2,128(sp) + 800019f8: 07313c23 sd s3,120(sp) + 800019fc: 07413823 sd s4,112(sp) + 80001a00: 07513423 sd s5,104(sp) + 80001a04: 05713c23 sd s7,88(sp) + 80001a08: 05813823 sd s8,80(sp) + 80001a0c: 05913423 sd s9,72(sp) + 80001a10: 00100793 li a5,1 + 80001a14: 00f50023 sb a5,0(a0) + 80001a18: 00050b13 mv s6,a0 + 80001a1c: 000501a3 sb zero,3(a0) + 80001a20: 00010713 mv a4,sp + 80001a24: 00000793 li a5,0 + 80001a28: 01000693 li a3,16 + 80001a2c: 00f72023 sw a5,0(a4) + 80001a30: 0017879b addiw a5,a5,1 + 80001a34: 00470713 addi a4,a4,4 + 80001a38: fed79ae3 bne a5,a3,80001a2c <_ZN8N_puzzleILi4EEC1Ev+0x4c> + 80001a3c: 03c10a13 addi s4,sp,60 + 80001a40: 000b0413 mv s0,s6 + 80001a44: 00000993 li s3,0 + 80001a48: 00000c93 li s9,0 + 80001a4c: 00400913 li s2,4 + 80001a50: ff000a93 li s5,-16 + 80001a54: 000a0c13 mv s8,s4 + 80001a58: 00000b93 li s7,0 + 80001a5c: 0109849b addiw s1,s3,16 + 80001a60: b69fe0ef jal ra,800005c8 + 80001a64: 417485bb subw a1,s1,s7 + 80001a68: 02059593 slli a1,a1,0x20 + 80001a6c: 02051513 slli a0,a0,0x20 + 80001a70: 0205d593 srli a1,a1,0x20 + 80001a74: 02055513 srli a0,a0,0x20 + 80001a78: 719020ef jal ra,80004990 <__umoddi3> + 80001a7c: 0005051b sext.w a0,a0 + 80001a80: 00251513 slli a0,a0,0x2 + 80001a84: 04010793 addi a5,sp,64 + 80001a88: 00a787b3 add a5,a5,a0 + 80001a8c: fc07a583 lw a1,-64(a5) + 80001a90: 000b871b sext.w a4,s7 + 80001a94: 01740833 add a6,s0,s7 + 80001a98: fff5879b addiw a5,a1,-1 + 80001a9c: 41f7d69b sraiw a3,a5,0x1f + 80001aa0: 01e6d61b srliw a2,a3,0x1e + 80001aa4: 00f607bb addw a5,a2,a5 + 80001aa8: 0037f693 andi a3,a5,3 + 80001aac: 40c686bb subw a3,a3,a2 + 80001ab0: 4027d79b sraiw a5,a5,0x2 + 80001ab4: 419787bb subw a5,a5,s9 + 80001ab8: 40e6873b subw a4,a3,a4 + 80001abc: 41f7d61b sraiw a2,a5,0x1f + 80001ac0: 41f7569b sraiw a3,a4,0x1f + 80001ac4: 00f647b3 xor a5,a2,a5 + 80001ac8: 00e6c733 xor a4,a3,a4 + 80001acc: 40c787bb subw a5,a5,a2 + 80001ad0: 40d7073b subw a4,a4,a3 + 80001ad4: 00b80223 sb a1,4(a6) + 80001ad8: 00e787bb addw a5,a5,a4 + 80001adc: 0c059063 bnez a1,80001b9c <_ZN8N_puzzleILi4EEC1Ev+0x1bc> + 80001ae0: 019b00a3 sb s9,1(s6) + 80001ae4: 017b0123 sb s7,2(s6) + 80001ae8: 000c2783 lw a5,0(s8) + 80001aec: 04010713 addi a4,sp,64 + 80001af0: 00a70533 add a0,a4,a0 + 80001af4: 001b8b93 addi s7,s7,1 + 80001af8: fcf52023 sw a5,-64(a0) + 80001afc: ffcc0c13 addi s8,s8,-4 + 80001b00: f72b90e3 bne s7,s2,80001a60 <_ZN8N_puzzleILi4EEC1Ev+0x80> + 80001b04: ffc9899b addiw s3,s3,-4 + 80001b08: 001c8c9b addiw s9,s9,1 + 80001b0c: ff0a0a13 addi s4,s4,-16 + 80001b10: 00440413 addi s0,s0,4 + 80001b14: f55990e3 bne s3,s5,80001a54 <_ZN8N_puzzleILi4EEC1Ev+0x74> + 80001b18: 000b2a23 sw zero,20(s6) + 80001b1c: 004b0593 addi a1,s6,4 + 80001b20: 014b0513 addi a0,s6,20 + 80001b24: 00000713 li a4,0 + 80001b28: ffc58693 addi a3,a1,-4 + 80001b2c: 0057179b slliw a5,a4,0x5 + 80001b30: 40e787bb subw a5,a5,a4 + 80001b34: 0027979b slliw a5,a5,0x2 + 80001b38: 40e787bb subw a5,a5,a4 + 80001b3c: 0027979b slliw a5,a5,0x2 + 80001b40: 00468603 lb a2,4(a3) + 80001b44: 00e787bb addw a5,a5,a4 + 80001b48: 0027979b slliw a5,a5,0x2 + 80001b4c: 00e7873b addw a4,a5,a4 + 80001b50: 00168693 addi a3,a3,1 + 80001b54: 00c7073b addw a4,a4,a2 + 80001b58: fcb69ae3 bne a3,a1,80001b2c <_ZN8N_puzzleILi4EEC1Ev+0x14c> + 80001b5c: 00468593 addi a1,a3,4 + 80001b60: fcb514e3 bne a0,a1,80001b28 <_ZN8N_puzzleILi4EEC1Ev+0x148> + 80001b64: 09813083 ld ra,152(sp) + 80001b68: 09013403 ld s0,144(sp) + 80001b6c: 00eb2a23 sw a4,20(s6) + 80001b70: 08813483 ld s1,136(sp) + 80001b74: 08013903 ld s2,128(sp) + 80001b78: 07813983 ld s3,120(sp) + 80001b7c: 07013a03 ld s4,112(sp) + 80001b80: 06813a83 ld s5,104(sp) + 80001b84: 06013b03 ld s6,96(sp) + 80001b88: 05813b83 ld s7,88(sp) + 80001b8c: 05013c03 ld s8,80(sp) + 80001b90: 04813c83 ld s9,72(sp) + 80001b94: 0a010113 addi sp,sp,160 + 80001b98: 00008067 ret + 80001b9c: 003b4703 lbu a4,3(s6) + 80001ba0: 00e787bb addw a5,a5,a4 + 80001ba4: 00fb01a3 sb a5,3(s6) + 80001ba8: f41ff06f j 80001ae8 <_ZN8N_puzzleILi4EEC1Ev+0x108> + +0000000080001bac <_ZN8N_puzzleILi4EEC1EPi>: + 80001bac: fe010113 addi sp,sp,-32 + 80001bb0: 00100793 li a5,1 + 80001bb4: 00010e93 mv t4,sp + 80001bb8: 00f50023 sb a5,0(a0) + 80001bbc: 00813c23 sd s0,24(sp) + 80001bc0: 000501a3 sb zero,3(a0) + 80001bc4: 01010f13 addi t5,sp,16 + 80001bc8: 000e8793 mv a5,t4 + 80001bcc: 00078023 sb zero,0(a5) + 80001bd0: 00178793 addi a5,a5,1 + 80001bd4: ffe79ce3 bne a5,t5,80001bcc <_ZN8N_puzzleILi4EEC1EPi+0x20> + 80001bd8: 00050f93 mv t6,a0 + 80001bdc: 00000e13 li t3,0 + 80001be0: 00100393 li t2,1 + 80001be4: 00400293 li t0,4 + 80001be8: 00058313 mv t1,a1 + 80001bec: 00000613 li a2,0 + 80001bf0: 00032803 lw a6,0(t1) + 80001bf4: 0006071b sext.w a4,a2 + 80001bf8: 00cf8433 add s0,t6,a2 + 80001bfc: fff8079b addiw a5,a6,-1 + 80001c00: 41f7d69b sraiw a3,a5,0x1f + 80001c04: 01e6d89b srliw a7,a3,0x1e + 80001c08: 00f887bb addw a5,a7,a5 + 80001c0c: 0037f693 andi a3,a5,3 + 80001c10: 411686bb subw a3,a3,a7 + 80001c14: 40e6873b subw a4,a3,a4 + 80001c18: 41f7569b sraiw a3,a4,0x1f + 80001c1c: 4027d79b sraiw a5,a5,0x2 + 80001c20: 41c787bb subw a5,a5,t3 + 80001c24: 00e6c733 xor a4,a3,a4 + 80001c28: 41f7d89b sraiw a7,a5,0x1f + 80001c2c: 40d7073b subw a4,a4,a3 + 80001c30: 01010693 addi a3,sp,16 + 80001c34: 00f8c7b3 xor a5,a7,a5 + 80001c38: 010686b3 add a3,a3,a6 + 80001c3c: 411787bb subw a5,a5,a7 + 80001c40: 01040223 sb a6,4(s0) + 80001c44: fe768823 sb t2,-16(a3) + 80001c48: 00e787bb addw a5,a5,a4 + 80001c4c: 08081a63 bnez a6,80001ce0 <_ZN8N_puzzleILi4EEC1EPi+0x134> + 80001c50: 01c500a3 sb t3,1(a0) + 80001c54: 00c50123 sb a2,2(a0) + 80001c58: 00160613 addi a2,a2,1 + 80001c5c: 00430313 addi t1,t1,4 + 80001c60: f85618e3 bne a2,t0,80001bf0 <_ZN8N_puzzleILi4EEC1EPi+0x44> + 80001c64: 001e0e1b addiw t3,t3,1 + 80001c68: 01058593 addi a1,a1,16 + 80001c6c: 004f8f93 addi t6,t6,4 + 80001c70: f65e1ce3 bne t3,t0,80001be8 <_ZN8N_puzzleILi4EEC1EPi+0x3c> + 80001c74: 000ec783 lbu a5,0(t4) + 80001c78: 001e8e93 addi t4,t4,1 + 80001c7c: 06078a63 beqz a5,80001cf0 <_ZN8N_puzzleILi4EEC1EPi+0x144> + 80001c80: ffee9ae3 bne t4,t5,80001c74 <_ZN8N_puzzleILi4EEC1EPi+0xc8> + 80001c84: 00052a23 sw zero,20(a0) + 80001c88: 00450593 addi a1,a0,4 + 80001c8c: 01450813 addi a6,a0,20 + 80001c90: 00000713 li a4,0 + 80001c94: ffc58693 addi a3,a1,-4 + 80001c98: 0057179b slliw a5,a4,0x5 + 80001c9c: 40e787bb subw a5,a5,a4 + 80001ca0: 0027979b slliw a5,a5,0x2 + 80001ca4: 40e787bb subw a5,a5,a4 + 80001ca8: 0027979b slliw a5,a5,0x2 + 80001cac: 00468603 lb a2,4(a3) + 80001cb0: 00e787bb addw a5,a5,a4 + 80001cb4: 0027979b slliw a5,a5,0x2 + 80001cb8: 00e7873b addw a4,a5,a4 + 80001cbc: 00168693 addi a3,a3,1 + 80001cc0: 00c7073b addw a4,a4,a2 + 80001cc4: fcb69ae3 bne a3,a1,80001c98 <_ZN8N_puzzleILi4EEC1EPi+0xec> + 80001cc8: 00468593 addi a1,a3,4 + 80001ccc: fcb814e3 bne a6,a1,80001c94 <_ZN8N_puzzleILi4EEC1EPi+0xe8> + 80001cd0: 01813403 ld s0,24(sp) + 80001cd4: 00e52a23 sw a4,20(a0) + 80001cd8: 02010113 addi sp,sp,32 + 80001cdc: 00008067 ret + 80001ce0: 00354703 lbu a4,3(a0) + 80001ce4: 00e787bb addw a5,a5,a4 + 80001ce8: 00f501a3 sb a5,3(a0) + 80001cec: f6dff06f j 80001c58 <_ZN8N_puzzleILi4EEC1EPi+0xac> + 80001cf0: 01813403 ld s0,24(sp) + 80001cf4: 00050023 sb zero,0(a0) + 80001cf8: 02010113 addi sp,sp,32 + 80001cfc: 00008067 ret + +0000000080001d00 <_ZNK8N_puzzleILi4EEeqERKS0_>: + 80001d00: 00050713 mv a4,a0 + 80001d04: 00054503 lbu a0,0(a0) + 80001d08: 04050863 beqz a0,80001d58 <_ZNK8N_puzzleILi4EEeqERKS0_+0x58> + 80001d0c: 0005c503 lbu a0,0(a1) + 80001d10: 04050463 beqz a0,80001d58 <_ZNK8N_puzzleILi4EEeqERKS0_+0x58> + 80001d14: 0145a683 lw a3,20(a1) + 80001d18: 01472783 lw a5,20(a4) + 80001d1c: 02f69c63 bne a3,a5,80001d54 <_ZNK8N_puzzleILi4EEeqERKS0_+0x54> + 80001d20: 00800693 li a3,8 + 80001d24: 01800893 li a7,24 + 80001d28: ffc68793 addi a5,a3,-4 + 80001d2c: 00f70833 add a6,a4,a5 + 80001d30: 00f58633 add a2,a1,a5 + 80001d34: 00084803 lbu a6,0(a6) + 80001d38: 00064603 lbu a2,0(a2) + 80001d3c: 00178793 addi a5,a5,1 + 80001d40: 00c81a63 bne a6,a2,80001d54 <_ZNK8N_puzzleILi4EEeqERKS0_+0x54> + 80001d44: fed794e3 bne a5,a3,80001d2c <_ZNK8N_puzzleILi4EEeqERKS0_+0x2c> + 80001d48: 00468693 addi a3,a3,4 + 80001d4c: fd169ee3 bne a3,a7,80001d28 <_ZNK8N_puzzleILi4EEeqERKS0_+0x28> + 80001d50: 00008067 ret + 80001d54: 00000513 li a0,0 + 80001d58: 00008067 ret + +0000000080001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0>: + 80001d5c: 00064783 lbu a5,0(a2) + 80001d60: fe010113 addi sp,sp,-32 + 80001d64: 00913423 sd s1,8(sp) + 80001d68: 00113c23 sd ra,24(sp) + 80001d6c: 00813823 sd s0,16(sp) + 80001d70: 00060493 mv s1,a2 + 80001d74: 00078e63 beqz a5,80001d90 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x34> + 80001d78: 01462783 lw a5,20(a2) + 80001d7c: fff5051b addiw a0,a0,-1 + 80001d80: 00a7f533 and a0,a5,a0 + 80001d84: 02051793 slli a5,a0,0x20 + 80001d88: 01d7d793 srli a5,a5,0x1d + 80001d8c: 00f585b3 add a1,a1,a5 + 80001d90: 0005b403 ld s0,0(a1) + 80001d94: 00041863 bnez s0,80001da4 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x48> + 80001d98: 01c0006f j 80001db4 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x58> + 80001d9c: 01843403 ld s0,24(s0) + 80001da0: 00040a63 beqz s0,80001db4 <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x58> + 80001da4: 00040513 mv a0,s0 + 80001da8: 00048593 mv a1,s1 + 80001dac: f55ff0ef jal ra,80001d00 <_ZNK8N_puzzleILi4EEeqERKS0_> + 80001db0: fe0506e3 beqz a0,80001d9c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0+0x40> + 80001db4: 01813083 ld ra,24(sp) + 80001db8: 00040513 mv a0,s0 + 80001dbc: 01013403 ld s0,16(sp) + 80001dc0: 00813483 ld s1,8(sp) + 80001dc4: 02010113 addi sp,sp,32 + 80001dc8: 00008067 ret + +0000000080001dcc <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi>: + 80001dcc: 00100793 li a5,1 + 80001dd0: 06f58463 beq a1,a5,80001e38 <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x6c> + 80001dd4: 01053883 ld a7,16(a0) + 80001dd8: 00359793 slli a5,a1,0x3 + 80001ddc: 00100e93 li t4,1 + 80001de0: 00f887b3 add a5,a7,a5 + 80001de4: 0007b603 ld a2,0(a5) + 80001de8: 01c0006f j 80001e04 <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x38> + 80001dec: 0106b023 sd a6,0(a3) + 80001df0: 00c73023 sd a2,0(a4) + 80001df4: 0006b703 ld a4,0(a3) + 80001df8: 02f62023 sw a5,32(a2) + 80001dfc: 02a72023 sw a0,32(a4) + 80001e00: 03d58c63 beq a1,t4,80001e38 <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x6c> + 80001e04: 01f5d79b srliw a5,a1,0x1f + 80001e08: 00b787bb addw a5,a5,a1 + 80001e0c: 4017d79b sraiw a5,a5,0x1 + 80001e10: 00058513 mv a0,a1 + 80001e14: 0007859b sext.w a1,a5 + 80001e18: 00359713 slli a4,a1,0x3 + 80001e1c: 00e88733 add a4,a7,a4 + 80001e20: 00073803 ld a6,0(a4) + 80001e24: 02862303 lw t1,40(a2) + 80001e28: 00351693 slli a3,a0,0x3 + 80001e2c: 02882e03 lw t3,40(a6) + 80001e30: 00d886b3 add a3,a7,a3 + 80001e34: fbc34ce3 blt t1,t3,80001dec <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi+0x20> + 80001e38: 00008067 ret + +0000000080001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i>: + 80001e3c: fd010113 addi sp,sp,-48 + 80001e40: 01313423 sd s3,8(sp) + 80001e44: 00052983 lw s3,0(a0) + 80001e48: 00913c23 sd s1,24(sp) + 80001e4c: 00058493 mv s1,a1 + 80001e50: 00853583 ld a1,8(a0) + 80001e54: 02813023 sd s0,32(sp) + 80001e58: 01213823 sd s2,16(sp) + 80001e5c: 00050413 mv s0,a0 + 80001e60: 00060913 mv s2,a2 + 80001e64: 00098513 mv a0,s3 + 80001e68: 00048613 mv a2,s1 + 80001e6c: 02113423 sd ra,40(sp) + 80001e70: eedff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 80001e74: 04050263 beqz a0,80001eb8 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x7c> + 80001e78: 02c54783 lbu a5,44(a0) + 80001e7c: 02079063 bnez a5,80001e9c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x60> + 80001e80: 00054703 lbu a4,0(a0) + 80001e84: 04000793 li a5,64 + 80001e88: 00070463 beqz a4,80001e90 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x54> + 80001e8c: 00350783 lb a5,3(a0) + 80001e90: 02852703 lw a4,40(a0) + 80001e94: 00f907bb addw a5,s2,a5 + 80001e98: 16e7cc63 blt a5,a4,80002010 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1d4> + 80001e9c: 02813083 ld ra,40(sp) + 80001ea0: 02013403 ld s0,32(sp) + 80001ea4: 01813483 ld s1,24(sp) + 80001ea8: 01013903 ld s2,16(sp) + 80001eac: 00813983 ld s3,8(sp) + 80001eb0: 03010113 addi sp,sp,48 + 80001eb4: 00008067 ret + 80001eb8: 01842783 lw a5,24(s0) + 80001ebc: 1af9c263 blt s3,a5,80002060 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x224> + 80001ec0: 0017879b addiw a5,a5,1 + 80001ec4: 00f42c23 sw a5,24(s0) + 80001ec8: 03800513 li a0,56 + 80001ecc: e4cfe0ef jal ra,80000518 + 80001ed0: 0004c803 lbu a6,0(s1) + 80001ed4: 00843683 ld a3,8(s0) + 80001ed8: 00000713 li a4,0 + 80001edc: 12081663 bnez a6,80002008 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1cc> + 80001ee0: 00042603 lw a2,0(s0) + 80001ee4: 01842883 lw a7,24(s0) + 80001ee8: 00448793 addi a5,s1,4 + 80001eec: fff6061b addiw a2,a2,-1 + 80001ef0: 00c77733 and a4,a4,a2 + 80001ef4: 02071713 slli a4,a4,0x20 + 80001ef8: 01d75713 srli a4,a4,0x1d + 80001efc: 00e68733 add a4,a3,a4 + 80001f00: 00073303 ld t1,0(a4) + 80001f04: 01050023 sb a6,0(a0) + 80001f08: 0014c683 lbu a3,1(s1) + 80001f0c: 00450713 addi a4,a0,4 + 80001f10: 01448593 addi a1,s1,20 + 80001f14: 00d500a3 sb a3,1(a0) + 80001f18: 0024c683 lbu a3,2(s1) + 80001f1c: 00d50123 sb a3,2(a0) + 80001f20: 00348603 lb a2,3(s1) + 80001f24: 00c501a3 sb a2,3(a0) + 80001f28: 0144a683 lw a3,20(s1) + 80001f2c: 00d52a23 sw a3,20(a0) + 80001f30: 00078683 lb a3,0(a5) + 80001f34: 00478793 addi a5,a5,4 + 80001f38: 00470713 addi a4,a4,4 + 80001f3c: fed70e23 sb a3,-4(a4) + 80001f40: ffd78683 lb a3,-3(a5) + 80001f44: fed70ea3 sb a3,-3(a4) + 80001f48: ffe78683 lb a3,-2(a5) + 80001f4c: fed70f23 sb a3,-2(a4) + 80001f50: fff78683 lb a3,-1(a5) + 80001f54: fed70fa3 sb a3,-1(a4) + 80001f58: fcb79ce3 bne a5,a1,80001f30 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0xf4> + 80001f5c: 00653c23 sd t1,24(a0) + 80001f60: 03152023 sw a7,32(a0) + 80001f64: 03252223 sw s2,36(a0) + 80001f68: 0c080863 beqz a6,80002038 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1fc> + 80001f6c: 02050623 sb zero,44(a0) + 80001f70: 0004c703 lbu a4,0(s1) + 80001f74: 0126093b addw s2,a2,s2 + 80001f78: 03252423 sw s2,40(a0) + 80001f7c: 02053823 sd zero,48(a0) + 80001f80: 00843683 ld a3,8(s0) + 80001f84: 00000793 li a5,0 + 80001f88: 00070463 beqz a4,80001f90 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x154> + 80001f8c: 0144a783 lw a5,20(s1) + 80001f90: 00042603 lw a2,0(s0) + 80001f94: 01842583 lw a1,24(s0) + 80001f98: 01043703 ld a4,16(s0) + 80001f9c: fff6061b addiw a2,a2,-1 + 80001fa0: 00c7f7b3 and a5,a5,a2 + 80001fa4: 02079793 slli a5,a5,0x20 + 80001fa8: 01d7d793 srli a5,a5,0x1d + 80001fac: 00f687b3 add a5,a3,a5 + 80001fb0: 00359693 slli a3,a1,0x3 + 80001fb4: 00a7b023 sd a0,0(a5) + 80001fb8: 00d707b3 add a5,a4,a3 + 80001fbc: 00a7b023 sd a0,0(a5) + 80001fc0: 00040513 mv a0,s0 + 80001fc4: e09ff0ef jal ra,80001dcc <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi> + 80001fc8: 01842703 lw a4,24(s0) + 80001fcc: 01c42783 lw a5,28(s0) + 80001fd0: 0007069b sext.w a3,a4 + 80001fd4: 0007861b sext.w a2,a5 + 80001fd8: 02d64263 blt a2,a3,80001ffc <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1c0> + 80001fdc: 00f42e23 sw a5,28(s0) + 80001fe0: 02813083 ld ra,40(sp) + 80001fe4: 02013403 ld s0,32(sp) + 80001fe8: 01813483 ld s1,24(sp) + 80001fec: 01013903 ld s2,16(sp) + 80001ff0: 00813983 ld s3,8(sp) + 80001ff4: 03010113 addi sp,sp,48 + 80001ff8: 00008067 ret + 80001ffc: 00070793 mv a5,a4 + 80002000: 00f42e23 sw a5,28(s0) + 80002004: fddff06f j 80001fe0 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x1a4> + 80002008: 0144a703 lw a4,20(s1) + 8000200c: ed5ff06f j 80001ee0 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0xa4> + 80002010: 02052583 lw a1,32(a0) + 80002014: 02f52423 sw a5,40(a0) + 80002018: 00040513 mv a0,s0 + 8000201c: 02013403 ld s0,32(sp) + 80002020: 02813083 ld ra,40(sp) + 80002024: 01813483 ld s1,24(sp) + 80002028: 01013903 ld s2,16(sp) + 8000202c: 00813983 ld s3,8(sp) + 80002030: 03010113 addi sp,sp,48 + 80002034: d99ff06f j 80001dcc <_ZN14Updatable_heapI8N_puzzleILi4EEE12percolate_upEi> + 80002038: 02050623 sb zero,44(a0) + 8000203c: 0004c703 lbu a4,0(s1) + 80002040: 04000613 li a2,64 + 80002044: 0126093b addw s2,a2,s2 + 80002048: 03252423 sw s2,40(a0) + 8000204c: 02053823 sd zero,48(a0) + 80002050: 00843683 ld a3,8(s0) + 80002054: 00000793 li a5,0 + 80002058: f2070ce3 beqz a4,80001f90 <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x154> + 8000205c: f31ff06f j 80001f8c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i+0x150> + 80002060: 09800613 li a2,152 + 80002064: 00004597 auipc a1,0x4 + 80002068: 5e458593 addi a1,a1,1508 # 80006648 <_etext+0x3b4> + 8000206c: 00004517 auipc a0,0x4 + 80002070: 26c50513 addi a0,a0,620 # 800062d8 <_etext+0x44> + 80002074: 6c9030ef jal ra,80005f3c + 80002078: 00100513 li a0,1 + 8000207c: 019020ef jal ra,80004894 + +0000000080002080 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv>: + 80002080: 01852783 lw a5,24(a0) + 80002084: 00200713 li a4,2 + 80002088: 0ef75263 bge a4,a5,8000216c <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xec> + 8000208c: 01053603 ld a2,16(a0) + 80002090: 00100293 li t0,1 + 80002094: 02c0006f j 800020c0 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x40> + 80002098: 0deec863 blt t4,t5,80002168 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xe8> + 8000209c: 0107b023 sd a6,0(a5) + 800020a0: 00b6b023 sd a1,0(a3) + 800020a4: 0007b783 ld a5,0(a5) + 800020a8: 0255a023 sw t0,32(a1) + 800020ac: 000f829b sext.w t0,t6 + 800020b0: 03f7a023 sw t6,32(a5) + 800020b4: 01852783 lw a5,24(a0) + 800020b8: 0012971b slliw a4,t0,0x1 + 800020bc: 06f75263 bge a4,a5,80002120 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa0> + 800020c0: 00371793 slli a5,a4,0x3 + 800020c4: 00329693 slli a3,t0,0x3 + 800020c8: 00f60333 add t1,a2,a5 + 800020cc: 00d606b3 add a3,a2,a3 + 800020d0: 0006b803 ld a6,0(a3) + 800020d4: 00033883 ld a7,0(t1) + 800020d8: 00878793 addi a5,a5,8 + 800020dc: 00f607b3 add a5,a2,a5 + 800020e0: 0007b583 ld a1,0(a5) + 800020e4: 02882e83 lw t4,40(a6) + 800020e8: 0288ae03 lw t3,40(a7) + 800020ec: 0285af03 lw t5,40(a1) + 800020f0: 00170f9b addiw t6,a4,1 + 800020f4: fbcec2e3 blt t4,t3,80002098 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x18> + 800020f8: fbee52e3 bge t3,t5,8000209c <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x1c> + 800020fc: 01033023 sd a6,0(t1) + 80002100: 0116b023 sd a7,0(a3) + 80002104: 00033783 ld a5,0(t1) + 80002108: 0258a023 sw t0,32(a7) + 8000210c: 00070293 mv t0,a4 + 80002110: 02e7a023 sw a4,32(a5) + 80002114: 01852783 lw a5,24(a0) + 80002118: 0012971b slliw a4,t0,0x1 + 8000211c: faf742e3 blt a4,a5,800020c0 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0x40> + 80002120: 00f70463 beq a4,a5,80002128 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa8> + 80002124: 00008067 ret + 80002128: 01053683 ld a3,16(a0) + 8000212c: 00329613 slli a2,t0,0x3 + 80002130: 00371793 slli a5,a4,0x3 + 80002134: 00f687b3 add a5,a3,a5 + 80002138: 00c686b3 add a3,a3,a2 + 8000213c: 0006b583 ld a1,0(a3) + 80002140: 0007b603 ld a2,0(a5) + 80002144: 0285a503 lw a0,40(a1) + 80002148: 02862803 lw a6,40(a2) + 8000214c: fca85ce3 bge a6,a0,80002124 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa4> + 80002150: 00b7b023 sd a1,0(a5) + 80002154: 00c6b023 sd a2,0(a3) + 80002158: 0007b783 ld a5,0(a5) + 8000215c: 02562023 sw t0,32(a2) + 80002160: 02e7a023 sw a4,32(a5) + 80002164: 00008067 ret + 80002168: 00008067 ret + 8000216c: 00200713 li a4,2 + 80002170: 00100293 li t0,1 + 80002174: faf718e3 bne a4,a5,80002124 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa4> + 80002178: fb1ff06f j 80002128 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv+0xa8> + +000000008000217c : + 8000217c: ed010113 addi sp,sp,-304 + 80002180: 03810513 addi a0,sp,56 + 80002184: 12113423 sd ra,296(sp) + 80002188: 12813023 sd s0,288(sp) + 8000218c: 10913c23 sd s1,280(sp) + 80002190: 11213823 sd s2,272(sp) + 80002194: 11313423 sd s3,264(sp) + 80002198: 11413023 sd s4,256(sp) + 8000219c: 0f513c23 sd s5,248(sp) + 800021a0: 0f613823 sd s6,240(sp) + 800021a4: 0f713423 sd s7,232(sp) + 800021a8: 0f813023 sd s8,224(sp) + 800021ac: 0d913c23 sd s9,216(sp) + 800021b0: 0da13823 sd s10,208(sp) + 800021b4: 0db13423 sd s11,200(sp) + 800021b8: 829ff0ef jal ra,800019e0 <_ZN8N_puzzleILi4EEC1Ev> + 800021bc: 00006797 auipc a5,0x6 + 800021c0: 9147b783 ld a5,-1772(a5) # 80007ad0 + 800021c4: 0007a783 lw a5,0(a5) + 800021c8: 00200713 li a4,2 + 800021cc: 2ae78ae3 beq a5,a4,80002c80 + 800021d0: 10f74e63 blt a4,a5,800022ec + 800021d4: 240780e3 beqz a5,80002c14 + 800021d8: 00100713 li a4,1 + 800021dc: 34e796e3 bne a5,a4,80002d28 + 800021e0: 08010493 addi s1,sp,128 + 800021e4: 00005597 auipc a1,0x5 + 800021e8: 32458593 addi a1,a1,804 # 80007508 <_ZL8PUZZLE_M> + 800021ec: 00048513 mv a0,s1 + 800021f0: 9bdff0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 800021f4: 08012783 lw a5,128(sp) + 800021f8: 08014803 lbu a6,128(sp) + 800021fc: 03810713 addi a4,sp,56 + 80002200: 02f12c23 sw a5,56(sp) + 80002204: 09412783 lw a5,148(sp) + 80002208: 09010413 addi s0,sp,144 + 8000220c: 04f12623 sw a5,76(sp) + 80002210: 00048793 mv a5,s1 + 80002214: 0047c503 lbu a0,4(a5) + 80002218: 0057c583 lbu a1,5(a5) + 8000221c: 0067c603 lbu a2,6(a5) + 80002220: 0077c683 lbu a3,7(a5) + 80002224: 00a70223 sb a0,4(a4) + 80002228: 00b702a3 sb a1,5(a4) + 8000222c: 00c70323 sb a2,6(a4) + 80002230: 00d703a3 sb a3,7(a4) + 80002234: 00478793 addi a5,a5,4 + 80002238: 00470713 addi a4,a4,4 + 8000223c: fc879ce3 bne a5,s0,80002214 + 80002240: 00001d37 lui s10,0x1 + 80002244: 800d0793 addi a5,s10,-2048 # 800 <_entry_offset+0x800> + 80002248: 00f13823 sd a5,16(sp) + 8000224c: 10080a63 beqz a6,80002360 + 80002250: 00040613 mv a2,s0 + 80002254: 03810513 addi a0,sp,56 + 80002258: 00000593 li a1,0 + 8000225c: 01000813 li a6,16 + 80002260: 01000893 li a7,16 + 80002264: ff060793 addi a5,a2,-16 + 80002268: 00050713 mv a4,a0 + 8000226c: 00470683 lb a3,4(a4) + 80002270: 10069863 bnez a3,80002380 + 80002274: 0107a023 sw a6,0(a5) + 80002278: 00478793 addi a5,a5,4 + 8000227c: 00170713 addi a4,a4,1 + 80002280: fef616e3 bne a2,a5,8000226c + 80002284: 0045859b addiw a1,a1,4 + 80002288: 01060613 addi a2,a2,16 + 8000228c: 00450513 addi a0,a0,4 + 80002290: fd159ae3 bne a1,a7,80002264 + 80002294: 08012683 lw a3,128(sp) + 80002298: 00100513 li a0,1 + 8000229c: 00000613 li a2,0 + 800022a0: 00100793 li a5,1 + 800022a4: 01000593 li a1,16 + 800022a8: 00279713 slli a4,a5,0x2 + 800022ac: 0c010813 addi a6,sp,192 + 800022b0: 00e80733 add a4,a6,a4 + 800022b4: fc072703 lw a4,-64(a4) + 800022b8: 00d75463 bge a4,a3,800022c0 + 800022bc: 0016061b addiw a2,a2,1 + 800022c0: 0017879b addiw a5,a5,1 + 800022c4: 00078713 mv a4,a5 + 800022c8: feb790e3 bne a5,a1,800022a8 + 800022cc: 0015079b addiw a5,a0,1 + 800022d0: 0ae78c63 beq a5,a4,80002388 + 800022d4: 00251513 slli a0,a0,0x2 + 800022d8: 0c010713 addi a4,sp,192 + 800022dc: 00a70533 add a0,a4,a0 + 800022e0: fc052683 lw a3,-64(a0) + 800022e4: 00078513 mv a0,a5 + 800022e8: fc1ff06f j 800022a8 + 800022ec: 00300713 li a4,3 + 800022f0: 22e79ce3 bne a5,a4,80002d28 + 800022f4: 08010493 addi s1,sp,128 + 800022f8: 00005597 auipc a1,0x5 + 800022fc: 19058593 addi a1,a1,400 # 80007488 <_ZL8PUZZLE_H> + 80002300: 00048513 mv a0,s1 + 80002304: 8a9ff0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002308: 08012783 lw a5,128(sp) + 8000230c: 08014803 lbu a6,128(sp) + 80002310: 03810713 addi a4,sp,56 + 80002314: 02f12c23 sw a5,56(sp) + 80002318: 09412783 lw a5,148(sp) + 8000231c: 09010413 addi s0,sp,144 + 80002320: 04f12623 sw a5,76(sp) + 80002324: 00048793 mv a5,s1 + 80002328: 0047c503 lbu a0,4(a5) + 8000232c: 0057c583 lbu a1,5(a5) + 80002330: 0067c603 lbu a2,6(a5) + 80002334: 0077c683 lbu a3,7(a5) + 80002338: 00a70223 sb a0,4(a4) + 8000233c: 00b702a3 sb a1,5(a4) + 80002340: 00c70323 sb a2,6(a4) + 80002344: 00d703a3 sb a3,7(a4) + 80002348: 00478793 addi a5,a5,4 + 8000234c: 00470713 addi a4,a4,4 + 80002350: fc879ce3 bne a5,s0,80002328 + 80002354: 000c07b7 lui a5,0xc0 + 80002358: 00f13823 sd a5,16(sp) + 8000235c: ee081ae3 bnez a6,80002250 + 80002360: 03500613 li a2,53 + 80002364: 00004597 auipc a1,0x4 + 80002368: 32458593 addi a1,a1,804 # 80006688 <_etext+0x3f4> + 8000236c: 00004517 auipc a0,0x4 + 80002370: f6c50513 addi a0,a0,-148 # 800062d8 <_etext+0x44> + 80002374: 3c9030ef jal ra,80005f3c + 80002378: 00100513 li a0,1 + 8000237c: 518020ef jal ra,80004894 + 80002380: 00d7a023 sw a3,0(a5) # c0000 <_entry_offset+0xc0000> + 80002384: ef5ff06f j 80002278 + 80002388: 03914683 lbu a3,57(sp) + 8000238c: 03a14703 lbu a4,58(sp) + 80002390: 00600793 li a5,6 + 80002394: 40d787bb subw a5,a5,a3 + 80002398: 40e787bb subw a5,a5,a4 + 8000239c: 00c787bb addw a5,a5,a2 + 800023a0: 0017f793 andi a5,a5,1 + 800023a4: fa079ee3 bnez a5,80002360 + 800023a8: 02000513 li a0,32 + 800023ac: 96cfe0ef jal ra,80000518 + 800023b0: 01013783 ld a5,16(sp) + 800023b4: 00050d93 mv s11,a0 + 800023b8: 00f52023 sw a5,0(a0) + 800023bc: 00379513 slli a0,a5,0x3 + 800023c0: 958fe0ef jal ra,80000518 + 800023c4: 000da783 lw a5,0(s11) + 800023c8: 00adb823 sd a0,16(s11) + 800023cc: 0017879b addiw a5,a5,1 + 800023d0: 00379513 slli a0,a5,0x3 + 800023d4: 944fe0ef jal ra,80000518 + 800023d8: 000da703 lw a4,0(s11) + 800023dc: 00adb423 sd a0,8(s11) + 800023e0: 000dbc23 sd zero,24(s11) + 800023e4: 00050793 mv a5,a0 + 800023e8: 02e05263 blez a4,8000240c + 800023ec: fff7071b addiw a4,a4,-1 + 800023f0: 02071713 slli a4,a4,0x20 + 800023f4: 01d75713 srli a4,a4,0x1d + 800023f8: 00850693 addi a3,a0,8 + 800023fc: 00d70733 add a4,a4,a3 + 80002400: 0007b023 sd zero,0(a5) + 80002404: 00878793 addi a5,a5,8 + 80002408: fef71ce3 bne a4,a5,80002400 + 8000240c: 03810593 addi a1,sp,56 + 80002410: 00000613 li a2,0 + 80002414: 000d8513 mv a0,s11 + 80002418: a25ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 8000241c: 018da583 lw a1,24(s11) + 80002420: fff00793 li a5,-1 + 80002424: 00005717 auipc a4,0x5 + 80002428: 5c470713 addi a4,a4,1476 # 800079e8 <_ZL3ans> + 8000242c: 00f72023 sw a5,0(a4) + 80002430: 00000913 li s2,0 + 80002434: 46058863 beqz a1,800028a4 + 80002438: 01048793 addi a5,s1,16 + 8000243c: 00100b13 li s6,1 + 80002440: 00f00d13 li s10,15 + 80002444: 01448c93 addi s9,s1,20 + 80002448: 00f13423 sd a5,8(sp) + 8000244c: 06010993 addi s3,sp,96 + 80002450: 010dbf03 ld t5,16(s11) + 80002454: 00048713 mv a4,s1 + 80002458: 00048613 mv a2,s1 + 8000245c: 008f3783 ld a5,8(t5) + 80002460: 00378683 lb a3,3(a5) + 80002464: 0007cb83 lbu s7,0(a5) + 80002468: 0017ca03 lbu s4,1(a5) + 8000246c: 0027ca83 lbu s5,2(a5) + 80002470: 0007ae83 lw t4,0(a5) + 80002474: 0147ac03 lw s8,20(a5) + 80002478: 00d13c23 sd a3,24(sp) + 8000247c: 00478793 addi a5,a5,4 + 80002480: 0007cf83 lbu t6,0(a5) + 80002484: 0017c303 lbu t1,1(a5) + 80002488: 0027c883 lbu a7,2(a5) + 8000248c: 0037c503 lbu a0,3(a5) + 80002490: 01f60223 sb t6,4(a2) + 80002494: 006602a3 sb t1,5(a2) + 80002498: 01160323 sb a7,6(a2) + 8000249c: 00a603a3 sb a0,7(a2) + 800024a0: 00460613 addi a2,a2,4 + 800024a4: 00478793 addi a5,a5,4 + 800024a8: fcc41ce3 bne s0,a2,80002480 + 800024ac: 5b658a63 beq a1,s6,80002a60 + 800024b0: 08bb50e3 bge s6,a1,80002d30 + 800024b4: 00359593 slli a1,a1,0x3 + 800024b8: 00bf05b3 add a1,t5,a1 + 800024bc: 0005b783 ld a5,0(a1) + 800024c0: 000d8513 mv a0,s11 + 800024c4: 02e13423 sd a4,40(sp) + 800024c8: 00ff3423 sd a5,8(t5) + 800024cc: 0367a023 sw s6,32(a5) + 800024d0: 018da783 lw a5,24(s11) + 800024d4: 03d13023 sd t4,32(sp) + 800024d8: fff7879b addiw a5,a5,-1 + 800024dc: 00fdac23 sw a5,24(s11) + 800024e0: ba1ff0ef jal ra,80002080 <_ZN14Updatable_heapI8N_puzzleILi4EEE14percolate_downEv> + 800024e4: 02813703 ld a4,40(sp) + 800024e8: 02013e83 ld t4,32(sp) + 800024ec: 07812223 sw s8,100(sp) + 800024f0: 05010c13 addi s8,sp,80 + 800024f4: 05d12823 sw t4,80(sp) + 800024f8: 000c0793 mv a5,s8 + 800024fc: 00474303 lbu t1,4(a4) + 80002500: 00574503 lbu a0,5(a4) + 80002504: 00674583 lbu a1,6(a4) + 80002508: 00774603 lbu a2,7(a4) + 8000250c: 00678223 sb t1,4(a5) + 80002510: 00a782a3 sb a0,5(a5) + 80002514: 00b78323 sb a1,6(a5) + 80002518: 00c783a3 sb a2,7(a5) + 8000251c: 00470713 addi a4,a4,4 + 80002520: 00478793 addi a5,a5,4 + 80002524: fce41ce3 bne s0,a4,800024fc + 80002528: 0019091b addiw s2,s2,1 + 8000252c: 00048713 mv a4,s1 + 80002530: 00000793 li a5,0 + 80002534: 0017879b addiw a5,a5,1 + 80002538: 00f72023 sw a5,0(a4) + 8000253c: 00470713 addi a4,a4,4 + 80002540: ffa79ae3 bne a5,s10,80002534 + 80002544: 00048593 mv a1,s1 + 80002548: 06810513 addi a0,sp,104 + 8000254c: 0a012e23 sw zero,188(sp) + 80002550: e5cff0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002554: 06810593 addi a1,sp,104 + 80002558: 05010513 addi a0,sp,80 + 8000255c: fa4ff0ef jal ra,80001d00 <_ZNK8N_puzzleILi4EEeqERKS0_> + 80002560: 78051663 bnez a0,80002cec + 80002564: 320b8863 beqz s7,80002894 + 80002568: 00300793 li a5,3 + 8000256c: 4efa8e63 beq s5,a5,80002a68 + 80002570: 00048593 mv a1,s1 + 80002574: 00048713 mv a4,s1 + 80002578: 05010793 addi a5,sp,80 + 8000257c: 0047ce03 lbu t3,4(a5) + 80002580: 0057c303 lbu t1,5(a5) + 80002584: 0067c503 lbu a0,6(a5) + 80002588: 0077c603 lbu a2,7(a5) + 8000258c: 01c70223 sb t3,4(a4) + 80002590: 006702a3 sb t1,5(a4) + 80002594: 00a70323 sb a0,6(a4) + 80002598: 00c703a3 sb a2,7(a4) + 8000259c: 00478793 addi a5,a5,4 + 800025a0: 00470713 addi a4,a4,4 + 800025a4: fcf99ce3 bne s3,a5,8000257c + 800025a8: 0c010793 addi a5,sp,192 + 800025ac: 002a1e13 slli t3,s4,0x2 + 800025b0: 01c78e33 add t3,a5,t3 + 800025b4: 001a8f13 addi t5,s5,1 + 800025b8: 01ee07b3 add a5,t3,t5 + 800025bc: f9478303 lb t1,-108(a5) + 800025c0: 001a879b addiw a5,s5,1 + 800025c4: 015e0eb3 add t4,t3,s5 + 800025c8: fff3071b addiw a4,t1,-1 + 800025cc: 41f7561b sraiw a2,a4,0x1f + 800025d0: 01e6561b srliw a2,a2,0x1e + 800025d4: 00c7073b addw a4,a4,a2 + 800025d8: 00377713 andi a4,a4,3 + 800025dc: 40c7073b subw a4,a4,a2 + 800025e0: 4157063b subw a2,a4,s5 + 800025e4: 40f707bb subw a5,a4,a5 + 800025e8: 41f65f9b sraiw t6,a2,0x1f + 800025ec: 41f7d71b sraiw a4,a5,0x1f + 800025f0: 00cfc533 xor a0,t6,a2 + 800025f4: 00f747b3 xor a5,a4,a5 + 800025f8: 40e787bb subw a5,a5,a4 + 800025fc: 41f5053b subw a0,a0,t6 + 80002600: 40f5053b subw a0,a0,a5 + 80002604: 01813783 ld a5,24(sp) + 80002608: 0fff7f13 andi t5,t5,255 + 8000260c: fc6e8223 sb t1,-60(t4) + 80002610: 00f5053b addw a0,a0,a5 + 80002614: 01ee0e33 add t3,t3,t5 + 80002618: 001a831b addiw t1,s5,1 + 8000261c: 000a879b sext.w a5,s5 + 80002620: 0185151b slliw a0,a0,0x18 + 80002624: fc0e0223 sb zero,-60(t3) + 80002628: 000a0b9b sext.w s7,s4 + 8000262c: 02f13023 sd a5,32(sp) + 80002630: 4185551b sraiw a0,a0,0x18 + 80002634: 0ff37313 andi t1,t1,255 + 80002638: 00448613 addi a2,s1,4 + 8000263c: 00000e13 li t3,0 + 80002640: ffc60713 addi a4,a2,-4 + 80002644: 005e179b slliw a5,t3,0x5 + 80002648: 41c787bb subw a5,a5,t3 + 8000264c: 0027979b slliw a5,a5,0x2 + 80002650: 41c787bb subw a5,a5,t3 + 80002654: 0027979b slliw a5,a5,0x2 + 80002658: 00470e83 lb t4,4(a4) + 8000265c: 01c787bb addw a5,a5,t3 + 80002660: 0027979b slliw a5,a5,0x2 + 80002664: 01c787bb addw a5,a5,t3 + 80002668: 00170713 addi a4,a4,1 + 8000266c: 01d78e3b addw t3,a5,t4 + 80002670: fce61ae3 bne a2,a4,80002644 + 80002674: 00460613 addi a2,a2,4 + 80002678: fccc94e3 bne s9,a2,80002640 + 8000267c: 00100793 li a5,1 + 80002680: 06f10423 sb a5,104(sp) + 80002684: 074104a3 sb s4,105(sp) + 80002688: 06610523 sb t1,106(sp) + 8000268c: 06a105a3 sb a0,107(sp) + 80002690: 07c12e23 sw t3,124(sp) + 80002694: 06810793 addi a5,sp,104 + 80002698: 0075c703 lbu a4,7(a1) + 8000269c: 0045c303 lbu t1,4(a1) + 800026a0: 0055c503 lbu a0,5(a1) + 800026a4: 0065c603 lbu a2,6(a1) + 800026a8: 00e783a3 sb a4,7(a5) + 800026ac: 00813703 ld a4,8(sp) + 800026b0: 00678223 sb t1,4(a5) + 800026b4: 00a782a3 sb a0,5(a5) + 800026b8: 00c78323 sb a2,6(a5) + 800026bc: 00458593 addi a1,a1,4 + 800026c0: 00478793 addi a5,a5,4 + 800026c4: fce59ae3 bne a1,a4,80002698 + 800026c8: 008db583 ld a1,8(s11) + 800026cc: 000da503 lw a0,0(s11) + 800026d0: 05010613 addi a2,sp,80 + 800026d4: e88ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 800026d8: 50050e63 beqz a0,80002bf4 + 800026dc: 02452603 lw a2,36(a0) + 800026e0: 0016061b addiw a2,a2,1 + 800026e4: 06810593 addi a1,sp,104 + 800026e8: 000d8513 mv a0,s11 + 800026ec: f50ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 800026f0: 380a9063 bnez s5,80002a70 + 800026f4: 00300793 li a5,3 + 800026f8: 20fa0a63 beq s4,a5,8000290c + 800026fc: 00048593 mv a1,s1 + 80002700: 00048713 mv a4,s1 + 80002704: 05010793 addi a5,sp,80 + 80002708: 0047ce03 lbu t3,4(a5) + 8000270c: 0057c303 lbu t1,5(a5) + 80002710: 0067c503 lbu a0,6(a5) + 80002714: 0077c603 lbu a2,7(a5) + 80002718: 01c70223 sb t3,4(a4) + 8000271c: 006702a3 sb t1,5(a4) + 80002720: 00a70323 sb a0,6(a4) + 80002724: 00c703a3 sb a2,7(a4) + 80002728: 00478793 addi a5,a5,4 + 8000272c: 00470713 addi a4,a4,4 + 80002730: fcf99ce3 bne s3,a5,80002708 + 80002734: 02013683 ld a3,32(sp) + 80002738: 001b8613 addi a2,s7,1 + 8000273c: 00261793 slli a5,a2,0x2 + 80002740: 0c010713 addi a4,sp,192 + 80002744: 00f707b3 add a5,a4,a5 + 80002748: 00d787b3 add a5,a5,a3 + 8000274c: f9478503 lb a0,-108(a5) + 80002750: 001b879b addiw a5,s7,1 + 80002754: 002b9e13 slli t3,s7,0x2 + 80002758: fff5031b addiw t1,a0,-1 + 8000275c: 41f3571b sraiw a4,t1,0x1f + 80002760: 01e7571b srliw a4,a4,0x1e + 80002764: 0067073b addw a4,a4,t1 + 80002768: 4027571b sraiw a4,a4,0x2 + 8000276c: 4177033b subw t1,a4,s7 + 80002770: 40f707bb subw a5,a4,a5 + 80002774: 41f7de9b sraiw t4,a5,0x1f + 80002778: 41f35f1b sraiw t5,t1,0x1f + 8000277c: 00fec7b3 xor a5,t4,a5 + 80002780: 006f4333 xor t1,t5,t1 + 80002784: 41d787bb subw a5,a5,t4 + 80002788: 0ff67713 andi a4,a2,255 + 8000278c: 41e3033b subw t1,t1,t5 + 80002790: 00271713 slli a4,a4,0x2 + 80002794: 40f3033b subw t1,t1,a5 + 80002798: 0c010793 addi a5,sp,192 + 8000279c: 00e787b3 add a5,a5,a4 + 800027a0: 01813703 ld a4,24(sp) + 800027a4: 0c010613 addi a2,sp,192 + 800027a8: 01c60633 add a2,a2,t3 + 800027ac: 00d60633 add a2,a2,a3 + 800027b0: 00e3033b addw t1,t1,a4 + 800027b4: fca60223 sb a0,-60(a2) + 800027b8: 001a0e1b addiw t3,s4,1 + 800027bc: 00d787b3 add a5,a5,a3 + 800027c0: 00448513 addi a0,s1,4 + 800027c4: 0183131b slliw t1,t1,0x18 + 800027c8: 4183531b sraiw t1,t1,0x18 + 800027cc: 0ffe7e13 andi t3,t3,255 + 800027d0: fc078223 sb zero,-60(a5) + 800027d4: 00050613 mv a2,a0 + 800027d8: 00000e93 li t4,0 + 800027dc: ffc60713 addi a4,a2,-4 + 800027e0: 005e979b slliw a5,t4,0x5 + 800027e4: 41d787bb subw a5,a5,t4 + 800027e8: 0027979b slliw a5,a5,0x2 + 800027ec: 41d787bb subw a5,a5,t4 + 800027f0: 0027979b slliw a5,a5,0x2 + 800027f4: 00470f03 lb t5,4(a4) + 800027f8: 01d787bb addw a5,a5,t4 + 800027fc: 0027979b slliw a5,a5,0x2 + 80002800: 01d787bb addw a5,a5,t4 + 80002804: 00170713 addi a4,a4,1 + 80002808: 01e78ebb addw t4,a5,t5 + 8000280c: fcc71ae3 bne a4,a2,800027e0 + 80002810: 00470613 addi a2,a4,4 + 80002814: fccc94e3 bne s9,a2,800027dc + 80002818: 00100793 li a5,1 + 8000281c: 06f10423 sb a5,104(sp) + 80002820: 07c104a3 sb t3,105(sp) + 80002824: 07510523 sb s5,106(sp) + 80002828: 066105a3 sb t1,107(sp) + 8000282c: 07d12e23 sw t4,124(sp) + 80002830: 06810793 addi a5,sp,104 + 80002834: 0075c703 lbu a4,7(a1) + 80002838: 0045ce03 lbu t3,4(a1) + 8000283c: 0055c303 lbu t1,5(a1) + 80002840: 0065c603 lbu a2,6(a1) + 80002844: 00e783a3 sb a4,7(a5) + 80002848: 00813703 ld a4,8(sp) + 8000284c: 01c78223 sb t3,4(a5) + 80002850: 006782a3 sb t1,5(a5) + 80002854: 00c78323 sb a2,6(a5) + 80002858: 00050593 mv a1,a0 + 8000285c: 00478793 addi a5,a5,4 + 80002860: 08a70063 beq a4,a0,800028e0 + 80002864: 00450513 addi a0,a0,4 + 80002868: fcdff06f j 80002834 + 8000286c: 008db583 ld a1,8(s11) + 80002870: 000da503 lw a0,0(s11) + 80002874: 05010613 addi a2,sp,80 + 80002878: ce4ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 8000287c: 38050863 beqz a0,80002c0c + 80002880: 02452603 lw a2,36(a0) + 80002884: 0016061b addiw a2,a2,1 + 80002888: 06810593 addi a1,sp,104 + 8000288c: 000d8513 mv a0,s11 + 80002890: dacff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 80002894: 018da583 lw a1,24(s11) + 80002898: 00058663 beqz a1,800028a4 + 8000289c: 01013783 ld a5,16(sp) + 800028a0: bb2798e3 bne a5,s2,80002450 + 800028a4: 12813083 ld ra,296(sp) + 800028a8: 12013403 ld s0,288(sp) + 800028ac: 11813483 ld s1,280(sp) + 800028b0: 11013903 ld s2,272(sp) + 800028b4: 10813983 ld s3,264(sp) + 800028b8: 10013a03 ld s4,256(sp) + 800028bc: 0f813a83 ld s5,248(sp) + 800028c0: 0f013b03 ld s6,240(sp) + 800028c4: 0e813b83 ld s7,232(sp) + 800028c8: 0e013c03 ld s8,224(sp) + 800028cc: 0d813c83 ld s9,216(sp) + 800028d0: 0d013d03 ld s10,208(sp) + 800028d4: 0c813d83 ld s11,200(sp) + 800028d8: 13010113 addi sp,sp,304 + 800028dc: 00008067 ret + 800028e0: 008db583 ld a1,8(s11) + 800028e4: 000da503 lw a0,0(s11) + 800028e8: 05010613 addi a2,sp,80 + 800028ec: c70ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 800028f0: 30050663 beqz a0,80002bfc + 800028f4: 02452603 lw a2,36(a0) + 800028f8: 0016061b addiw a2,a2,1 + 800028fc: 06810593 addi a1,sp,104 + 80002900: 000d8513 mv a0,s11 + 80002904: d38ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 80002908: f80a06e3 beqz s4,80002894 + 8000290c: 00048513 mv a0,s1 + 80002910: 00048793 mv a5,s1 + 80002914: 004c4303 lbu t1,4(s8) + 80002918: 005c4583 lbu a1,5(s8) + 8000291c: 006c4603 lbu a2,6(s8) + 80002920: 007c4703 lbu a4,7(s8) + 80002924: 00678223 sb t1,4(a5) + 80002928: 00b782a3 sb a1,5(a5) + 8000292c: 00c78323 sb a2,6(a5) + 80002930: 00e783a3 sb a4,7(a5) + 80002934: 004c0c13 addi s8,s8,4 + 80002938: 00478793 addi a5,a5,4 + 8000293c: fd899ce3 bne s3,s8,80002914 + 80002940: fffb871b addiw a4,s7,-1 + 80002944: 02013683 ld a3,32(sp) + 80002948: 00070893 mv a7,a4 + 8000294c: 0c010793 addi a5,sp,192 + 80002950: 00271713 slli a4,a4,0x2 + 80002954: 00e78733 add a4,a5,a4 + 80002958: 00d70733 add a4,a4,a3 + 8000295c: f9470603 lb a2,-108(a4) + 80002960: 002b9593 slli a1,s7,0x2 + 80002964: 00b785b3 add a1,a5,a1 + 80002968: fff6031b addiw t1,a2,-1 + 8000296c: 41f3579b sraiw a5,t1,0x1f + 80002970: 01e7d79b srliw a5,a5,0x1e + 80002974: 006787bb addw a5,a5,t1 + 80002978: 4027d79b sraiw a5,a5,0x2 + 8000297c: 41778bbb subw s7,a5,s7 + 80002980: 411787bb subw a5,a5,a7 + 80002984: 41fbde1b sraiw t3,s7,0x1f + 80002988: 41f7d89b sraiw a7,a5,0x1f + 8000298c: 017e4333 xor t1,t3,s7 + 80002990: 00f8c7b3 xor a5,a7,a5 + 80002994: 411787bb subw a5,a5,a7 + 80002998: 41c3033b subw t1,t1,t3 + 8000299c: 40f3033b subw t1,t1,a5 + 800029a0: 01813783 ld a5,24(sp) + 800029a4: 00d585b3 add a1,a1,a3 + 800029a8: fcc58223 sb a2,-60(a1) + 800029ac: 00f3033b addw t1,t1,a5 + 800029b0: fffa059b addiw a1,s4,-1 + 800029b4: 00448e13 addi t3,s1,4 + 800029b8: 0183131b slliw t1,t1,0x18 + 800029bc: fc070223 sb zero,-60(a4) + 800029c0: 4183531b sraiw t1,t1,0x18 + 800029c4: 0ff5f593 andi a1,a1,255 + 800029c8: 000e0893 mv a7,t3 + 800029cc: 00000713 li a4,0 + 800029d0: ffc88613 addi a2,a7,-4 + 800029d4: 0057179b slliw a5,a4,0x5 + 800029d8: 40e787bb subw a5,a5,a4 + 800029dc: 0027979b slliw a5,a5,0x2 + 800029e0: 40e787bb subw a5,a5,a4 + 800029e4: 0027979b slliw a5,a5,0x2 + 800029e8: 00460e83 lb t4,4(a2) + 800029ec: 00e787bb addw a5,a5,a4 + 800029f0: 0027979b slliw a5,a5,0x2 + 800029f4: 00e7873b addw a4,a5,a4 + 800029f8: 00160613 addi a2,a2,1 + 800029fc: 01d7073b addw a4,a4,t4 + 80002a00: fcc89ae3 bne a7,a2,800029d4 + 80002a04: 00488893 addi a7,a7,4 + 80002a08: fd1c94e3 bne s9,a7,800029d0 + 80002a0c: 00100793 li a5,1 + 80002a10: 06f10423 sb a5,104(sp) + 80002a14: 06b104a3 sb a1,105(sp) + 80002a18: 07510523 sb s5,106(sp) + 80002a1c: 066105a3 sb t1,107(sp) + 80002a20: 06e12e23 sw a4,124(sp) + 80002a24: 06810793 addi a5,sp,104 + 80002a28: 00754703 lbu a4,7(a0) + 80002a2c: 00454883 lbu a7,4(a0) + 80002a30: 00554583 lbu a1,5(a0) + 80002a34: 00654603 lbu a2,6(a0) + 80002a38: 00e783a3 sb a4,7(a5) + 80002a3c: 00813703 ld a4,8(sp) + 80002a40: 01178223 sb a7,4(a5) + 80002a44: 00b782a3 sb a1,5(a5) + 80002a48: 00c78323 sb a2,6(a5) + 80002a4c: 000e0513 mv a0,t3 + 80002a50: 00478793 addi a5,a5,4 + 80002a54: e0ee0ce3 beq t3,a4,8000286c + 80002a58: 004e0e13 addi t3,t3,4 + 80002a5c: fcdff06f j 80002a28 + 80002a60: 000dac23 sw zero,24(s11) + 80002a64: a89ff06f j 800024ec + 80002a68: 000a0b9b sext.w s7,s4 + 80002a6c: 02f13023 sd a5,32(sp) + 80002a70: 00048593 mv a1,s1 + 80002a74: 00048713 mv a4,s1 + 80002a78: 05010793 addi a5,sp,80 + 80002a7c: 0047ce03 lbu t3,4(a5) + 80002a80: 0057c303 lbu t1,5(a5) + 80002a84: 0067c503 lbu a0,6(a5) + 80002a88: 0077c603 lbu a2,7(a5) + 80002a8c: 01c70223 sb t3,4(a4) + 80002a90: 006702a3 sb t1,5(a4) + 80002a94: 00a70323 sb a0,6(a4) + 80002a98: 00c703a3 sb a2,7(a4) + 80002a9c: 00478793 addi a5,a5,4 + 80002aa0: 00470713 addi a4,a4,4 + 80002aa4: fd379ce3 bne a5,s3,80002a7c + 80002aa8: 02013683 ld a3,32(sp) + 80002aac: 0c010713 addi a4,sp,192 + 80002ab0: 002b9513 slli a0,s7,0x2 + 80002ab4: fff6879b addiw a5,a3,-1 + 80002ab8: 00a70533 add a0,a4,a0 + 80002abc: 0007861b sext.w a2,a5 + 80002ac0: 00060313 mv t1,a2 + 80002ac4: 00c50633 add a2,a0,a2 + 80002ac8: f9460e83 lb t4,-108(a2) + 80002acc: 00d50533 add a0,a0,a3 + 80002ad0: fffa8e1b addiw t3,s5,-1 + 80002ad4: fffe879b addiw a5,t4,-1 + 80002ad8: 41f7d71b sraiw a4,a5,0x1f + 80002adc: 01e7571b srliw a4,a4,0x1e + 80002ae0: 00e787bb addw a5,a5,a4 + 80002ae4: 0037f793 andi a5,a5,3 + 80002ae8: 40e787bb subw a5,a5,a4 + 80002aec: 40d7873b subw a4,a5,a3 + 80002af0: 406787bb subw a5,a5,t1 + 80002af4: 41f75f9b sraiw t6,a4,0x1f + 80002af8: 41f7df1b sraiw t5,a5,0x1f + 80002afc: 00efc333 xor t1,t6,a4 + 80002b00: 00ff47b3 xor a5,t5,a5 + 80002b04: 41e787bb subw a5,a5,t5 + 80002b08: 41f3033b subw t1,t1,t6 + 80002b0c: 40f3033b subw t1,t1,a5 + 80002b10: 01813783 ld a5,24(sp) + 80002b14: fdd50223 sb t4,-60(a0) + 80002b18: 00448513 addi a0,s1,4 + 80002b1c: 00f3033b addw t1,t1,a5 + 80002b20: 0183131b slliw t1,t1,0x18 + 80002b24: fc060223 sb zero,-60(a2) + 80002b28: 4183531b sraiw t1,t1,0x18 + 80002b2c: 0ffe7e13 andi t3,t3,255 + 80002b30: 00050613 mv a2,a0 + 80002b34: 00000e93 li t4,0 + 80002b38: ffc60713 addi a4,a2,-4 + 80002b3c: 005e979b slliw a5,t4,0x5 + 80002b40: 41d787bb subw a5,a5,t4 + 80002b44: 0027979b slliw a5,a5,0x2 + 80002b48: 41d787bb subw a5,a5,t4 + 80002b4c: 0027979b slliw a5,a5,0x2 + 80002b50: 00470f03 lb t5,4(a4) + 80002b54: 01d787bb addw a5,a5,t4 + 80002b58: 0027979b slliw a5,a5,0x2 + 80002b5c: 01d787bb addw a5,a5,t4 + 80002b60: 00170713 addi a4,a4,1 + 80002b64: 01e78ebb addw t4,a5,t5 + 80002b68: fce61ae3 bne a2,a4,80002b3c + 80002b6c: 00460613 addi a2,a2,4 + 80002b70: fd9614e3 bne a2,s9,80002b38 + 80002b74: 00100793 li a5,1 + 80002b78: 06f10423 sb a5,104(sp) + 80002b7c: 074104a3 sb s4,105(sp) + 80002b80: 07c10523 sb t3,106(sp) + 80002b84: 066105a3 sb t1,107(sp) + 80002b88: 07d12e23 sw t4,124(sp) + 80002b8c: 06810793 addi a5,sp,104 + 80002b90: 0075c703 lbu a4,7(a1) + 80002b94: 0045ce03 lbu t3,4(a1) + 80002b98: 0055c303 lbu t1,5(a1) + 80002b9c: 0065c603 lbu a2,6(a1) + 80002ba0: 00e783a3 sb a4,7(a5) + 80002ba4: 00813703 ld a4,8(sp) + 80002ba8: 01c78223 sb t3,4(a5) + 80002bac: 006782a3 sb t1,5(a5) + 80002bb0: 00c78323 sb a2,6(a5) + 80002bb4: 00050593 mv a1,a0 + 80002bb8: 00478793 addi a5,a5,4 + 80002bbc: 00e50663 beq a0,a4,80002bc8 + 80002bc0: 00450513 addi a0,a0,4 + 80002bc4: fcdff06f j 80002b90 + 80002bc8: 008db583 ld a1,8(s11) + 80002bcc: 000da503 lw a0,0(s11) + 80002bd0: 05010613 addi a2,sp,80 + 80002bd4: 988ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 80002bd8: 02050663 beqz a0,80002c04 + 80002bdc: 02452603 lw a2,36(a0) + 80002be0: 0016061b addiw a2,a2,1 + 80002be4: 06810593 addi a1,sp,104 + 80002be8: 000d8513 mv a0,s11 + 80002bec: a50ff0ef jal ra,80001e3c <_ZN14Updatable_heapI8N_puzzleILi4EEE4pushERKS1_i> + 80002bf0: b05ff06f j 800026f4 + 80002bf4: 80000637 lui a2,0x80000 + 80002bf8: aedff06f j 800026e4 + 80002bfc: 80000637 lui a2,0x80000 + 80002c00: cfdff06f j 800028fc + 80002c04: 80000637 lui a2,0x80000 + 80002c08: fddff06f j 80002be4 + 80002c0c: 80000637 lui a2,0x80000 + 80002c10: c79ff06f j 80002888 + 80002c14: 08010493 addi s1,sp,128 + 80002c18: 00005597 auipc a1,0x5 + 80002c1c: 93058593 addi a1,a1,-1744 # 80007548 <_ZL8PUZZLE_S> + 80002c20: 00048513 mv a0,s1 + 80002c24: f89fe0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002c28: 08012783 lw a5,128(sp) + 80002c2c: 08014803 lbu a6,128(sp) + 80002c30: 03810713 addi a4,sp,56 + 80002c34: 02f12c23 sw a5,56(sp) + 80002c38: 09412783 lw a5,148(sp) + 80002c3c: 09010413 addi s0,sp,144 + 80002c40: 04f12623 sw a5,76(sp) + 80002c44: 00048793 mv a5,s1 + 80002c48: 0047c503 lbu a0,4(a5) + 80002c4c: 0057c583 lbu a1,5(a5) + 80002c50: 0067c603 lbu a2,6(a5) + 80002c54: 0077c683 lbu a3,7(a5) + 80002c58: 00a70223 sb a0,4(a4) + 80002c5c: 00b702a3 sb a1,5(a4) + 80002c60: 00c70323 sb a2,6(a4) + 80002c64: 00d703a3 sb a3,7(a4) + 80002c68: 00478793 addi a5,a5,4 + 80002c6c: 00470713 addi a4,a4,4 + 80002c70: fc879ce3 bne a5,s0,80002c48 + 80002c74: 00a00793 li a5,10 + 80002c78: 00f13823 sd a5,16(sp) + 80002c7c: dd0ff06f j 8000224c + 80002c80: 08010493 addi s1,sp,128 + 80002c84: 00005597 auipc a1,0x5 + 80002c88: 84458593 addi a1,a1,-1980 # 800074c8 <_ZL8PUZZLE_L> + 80002c8c: 00048513 mv a0,s1 + 80002c90: f1dfe0ef jal ra,80001bac <_ZN8N_puzzleILi4EEC1EPi> + 80002c94: 08012783 lw a5,128(sp) + 80002c98: 08014803 lbu a6,128(sp) + 80002c9c: 03810713 addi a4,sp,56 + 80002ca0: 02f12c23 sw a5,56(sp) + 80002ca4: 09412783 lw a5,148(sp) + 80002ca8: 09010413 addi s0,sp,144 + 80002cac: 04f12623 sw a5,76(sp) + 80002cb0: 00048793 mv a5,s1 + 80002cb4: 0047c503 lbu a0,4(a5) + 80002cb8: 0057c583 lbu a1,5(a5) + 80002cbc: 0067c603 lbu a2,6(a5) + 80002cc0: 0077c683 lbu a3,7(a5) + 80002cc4: 00a70223 sb a0,4(a4) + 80002cc8: 00b702a3 sb a1,5(a4) + 80002ccc: 00c70323 sb a2,6(a4) + 80002cd0: 00d703a3 sb a3,7(a4) + 80002cd4: 00478793 addi a5,a5,4 + 80002cd8: 00470713 addi a4,a4,4 + 80002cdc: fcf41ce3 bne s0,a5,80002cb4 + 80002ce0: 000047b7 lui a5,0x4 + 80002ce4: 00f13823 sd a5,16(sp) + 80002ce8: d64ff06f j 8000224c + 80002cec: 008db583 ld a1,8(s11) + 80002cf0: 000da503 lw a0,0(s11) + 80002cf4: 05010613 addi a2,sp,80 + 80002cf8: 864ff0ef jal ra,80001d5c <_ZNK14Updatable_heapI8N_puzzleILi4EEE7pointerERKS1_.isra.0> + 80002cfc: 02050063 beqz a0,80002d1c + 80002d00: 02452583 lw a1,36(a0) + 80002d04: 00090513 mv a0,s2 + 80002d08: 3d5010ef jal ra,800048dc <__muldi3> + 80002d0c: 00005797 auipc a5,0x5 + 80002d10: cdc78793 addi a5,a5,-804 # 800079e8 <_ZL3ans> + 80002d14: 00a7a023 sw a0,0(a5) + 80002d18: b8dff06f j 800028a4 + 80002d1c: 800005b7 lui a1,0x80000 + 80002d20: fff5c593 not a1,a1 + 80002d24: fe1ff06f j 80002d04 + 80002d28: 03300613 li a2,51 + 80002d2c: e38ff06f j 80002364 + 80002d30: 05600613 li a2,86 + 80002d34: 00004597 auipc a1,0x4 + 80002d38: 91458593 addi a1,a1,-1772 # 80006648 <_etext+0x3b4> + 80002d3c: 00003517 auipc a0,0x3 + 80002d40: 59c50513 addi a0,a0,1436 # 800062d8 <_etext+0x44> + 80002d44: 1f8030ef jal ra,80005f3c + 80002d48: 00100513 li a0,1 + 80002d4c: 349010ef jal ra,80004894 + +0000000080002d50 : + 80002d50: 00005797 auipc a5,0x5 + 80002d54: d807b783 ld a5,-640(a5) # 80007ad0 + 80002d58: 0007a783 lw a5,0(a5) + 80002d5c: fd010113 addi sp,sp,-48 + 80002d60: 01213823 sd s2,16(sp) + 80002d64: 00100513 li a0,1 + 80002d68: 00005917 auipc s2,0x5 + 80002d6c: c8490913 addi s2,s2,-892 # 800079ec + 80002d70: 02113423 sd ra,40(sp) + 80002d74: 00f92023 sw a5,0(s2) + 80002d78: 01313423 sd s3,8(sp) + 80002d7c: 02813023 sd s0,32(sp) + 80002d80: 00913c23 sd s1,24(sp) + 80002d84: 831fd0ef jal ra,800005b4 + 80002d88: 00011537 lui a0,0x11 + 80002d8c: 80850513 addi a0,a0,-2040 # 10808 <_entry_offset+0x10808> + 80002d90: f88fd0ef jal ra,80000518 + 80002d94: 00050793 mv a5,a0 + 80002d98: 00092503 lw a0,0(s2) + 80002d9c: 00005717 auipc a4,0x5 + 80002da0: c6f73623 sd a5,-916(a4) # 80007a08 + 80002da4: 00005997 auipc s3,0x5 + 80002da8: c4c98993 addi s3,s3,-948 # 800079f0 + 80002dac: f6cfd0ef jal ra,80000518 + 80002db0: 00092783 lw a5,0(s2) + 80002db4: 00a9b023 sd a0,0(s3) + 80002db8: 1907851b addiw a0,a5,400 + 80002dbc: f5cfd0ef jal ra,80000518 + 80002dc0: 00092783 lw a5,0(s2) + 80002dc4: 00005717 auipc a4,0x5 + 80002dc8: c2a73a23 sd a0,-972(a4) # 800079f8 + 80002dcc: 02f05e63 blez a5,80002e08 + 80002dd0: 00000413 li s0,0 + 80002dd4: ff4fd0ef jal ra,800005c8 + 80002dd8: 02051513 slli a0,a0,0x20 + 80002ddc: 0009b483 ld s1,0(s3) + 80002de0: 01a00593 li a1,26 + 80002de4: 02055513 srli a0,a0,0x20 + 80002de8: 3a9010ef jal ra,80004990 <__umoddi3> + 80002dec: 00092703 lw a4,0(s2) + 80002df0: 008484b3 add s1,s1,s0 + 80002df4: 0615051b addiw a0,a0,97 + 80002df8: 00140413 addi s0,s0,1 + 80002dfc: 00a48023 sb a0,0(s1) + 80002e00: 0004079b sext.w a5,s0 + 80002e04: fce7c8e3 blt a5,a4,80002dd4 + 80002e08: 02813083 ld ra,40(sp) + 80002e0c: 02013403 ld s0,32(sp) + 80002e10: 01813483 ld s1,24(sp) + 80002e14: 01013903 ld s2,16(sp) + 80002e18: 00813983 ld s3,8(sp) + 80002e1c: 03010113 addi sp,sp,48 + 80002e20: 00008067 ret + +0000000080002e24 : + 80002e24: ff010113 addi sp,sp,-16 + 80002e28: 00005697 auipc a3,0x5 + 80002e2c: be06b683 ld a3,-1056(a3) # 80007a08 + 80002e30: 00005617 auipc a2,0x5 + 80002e34: bbc62603 lw a2,-1092(a2) # 800079ec + 80002e38: 00005597 auipc a1,0x5 + 80002e3c: bc05b583 ld a1,-1088(a1) # 800079f8 + 80002e40: 00005517 auipc a0,0x5 + 80002e44: bb053503 ld a0,-1104(a0) # 800079f0 + 80002e48: 00113423 sd ra,8(sp) + 80002e4c: 084000ef jal ra,80002ed0 + 80002e50: 00813083 ld ra,8(sp) + 80002e54: 00005797 auipc a5,0x5 + 80002e58: baa7a623 sw a0,-1108(a5) # 80007a00 + 80002e5c: 01010113 addi sp,sp,16 + 80002e60: 00008067 ret + +0000000080002e64 : + 80002e64: 00005517 auipc a0,0x5 + 80002e68: b9453503 ld a0,-1132(a0) # 800079f8 + 80002e6c: 00005597 auipc a1,0x5 + 80002e70: b945a583 lw a1,-1132(a1) # 80007a00 + 80002e74: ff010113 addi sp,sp,-16 + 80002e78: 00b505b3 add a1,a0,a1 + 80002e7c: 00113423 sd ra,8(sp) + 80002e80: f98fd0ef jal ra,80000618 + 80002e84: 00005797 auipc a5,0x5 + 80002e88: c4c7b783 ld a5,-948(a5) # 80007ad0 + 80002e8c: 0187a783 lw a5,24(a5) + 80002e90: 00813083 ld ra,8(sp) + 80002e94: 0005051b sext.w a0,a0 + 80002e98: 40a78533 sub a0,a5,a0 + 80002e9c: 00153513 seqz a0,a0 + 80002ea0: 01010113 addi sp,sp,16 + 80002ea4: 00008067 ret + +0000000080002ea8 : + 80002ea8: ff010113 addi sp,sp,-16 + 80002eac: 00800613 li a2,8 + 80002eb0: 00004597 auipc a1,0x4 + 80002eb4: 82058593 addi a1,a1,-2016 # 800066d0 <_etext+0x43c> + 80002eb8: 00003517 auipc a0,0x3 + 80002ebc: 42050513 addi a0,a0,1056 # 800062d8 <_etext+0x44> + 80002ec0: 00113423 sd ra,8(sp) + 80002ec4: 078030ef jal ra,80005f3c + 80002ec8: 00100513 li a0,1 + 80002ecc: 1c9010ef jal ra,80004894 + +0000000080002ed0 : + 80002ed0: 00100793 li a5,1 + 80002ed4: f5010113 addi sp,sp,-176 + 80002ed8: 02079793 slli a5,a5,0x20 + 80002edc: 00060713 mv a4,a2 + 80002ee0: 02c13023 sd a2,32(sp) + 80002ee4: 0a113423 sd ra,168(sp) + 80002ee8: 0a813023 sd s0,160(sp) + 80002eec: 08913c23 sd s1,152(sp) + 80002ef0: 09213823 sd s2,144(sp) + 80002ef4: 09313423 sd s3,136(sp) + 80002ef8: 09413023 sd s4,128(sp) + 80002efc: 07513c23 sd s5,120(sp) + 80002f00: 07613823 sd s6,112(sp) + 80002f04: 07713423 sd s7,104(sp) + 80002f08: 07813023 sd s8,96(sp) + 80002f0c: 05913c23 sd s9,88(sp) + 80002f10: 05a13823 sd s10,80(sp) + 80002f14: 05b13423 sd s11,72(sp) + 80002f18: fff60613 addi a2,a2,-1 + 80002f1c: e6e78793 addi a5,a5,-402 + 80002f20: 00a13423 sd a0,8(sp) + 80002f24: 02b13823 sd a1,48(sp) + 80002f28: 58c7e463 bltu a5,a2,800034b0 + 80002f2c: 00300593 li a1,3 + 80002f30: 0d700793 li a5,215 + 80002f34: 02b13423 sd a1,40(sp) + 80002f38: 46e7e263 bltu a5,a4,8000339c + 80002f3c: 000107b7 lui a5,0x10 + 80002f40: 00011737 lui a4,0x11 + 80002f44: 00878793 addi a5,a5,8 # 10008 <_entry_offset+0x10008> + 80002f48: 80870713 addi a4,a4,-2040 # 10808 <_entry_offset+0x10808> + 80002f4c: 00f687b3 add a5,a3,a5 + 80002f50: 00e68733 add a4,a3,a4 + 80002f54: 00078023 sb zero,0(a5) + 80002f58: 00178793 addi a5,a5,1 + 80002f5c: fef71ce3 bne a4,a5,80002f54 + 80002f60: 00813783 ld a5,8(sp) + 80002f64: 03013703 ld a4,48(sp) + 80002f68: 02813583 ld a1,40(sp) + 80002f6c: 00c78633 add a2,a5,a2 + 80002f70: 02c13c23 sd a2,56(sp) + 80002f74: 00b704b3 add s1,a4,a1 + 80002f78: 00913823 sd s1,16(sp) + 80002f7c: ff660c13 addi s8,a2,-10 + 80002f80: 00448e13 addi t3,s1,4 + 80002f84: 00078713 mv a4,a5 + 80002f88: 5cfc6663 bltu s8,a5,80003554 + 80002f8c: 02013783 ld a5,32(sp) + 80002f90: ffc60d13 addi s10,a2,-4 + 80002f94: 0fe00c93 li s9,254 + 80002f98: 0017d793 srli a5,a5,0x1 + 80002f9c: 00f707b3 add a5,a4,a5 + 80002fa0: 00f13c23 sd a5,24(sp) + 80002fa4: 00010bb7 lui s7,0x10 + 80002fa8: 00070793 mv a5,a4 + 80002fac: 00400993 li s3,4 + 80002fb0: 80000737 lui a4,0x80000 + 80002fb4: 80000db7 lui s11,0x80000 + 80002fb8: 40fd0fb3 sub t6,s10,a5 + 80002fbc: 01fcd463 bge s9,t6,80002fc4 + 80002fc0: 0fe00f93 li t6,254 + 80002fc4: 0017c603 lbu a2,1(a5) + 80002fc8: 0027c503 lbu a0,2(a5) + 80002fcc: 0007c583 lbu a1,0(a5) + 80002fd0: 0086161b slliw a2,a2,0x8 + 80002fd4: 0105151b slliw a0,a0,0x10 + 80002fd8: 00a66633 or a2,a2,a0 + 80002fdc: 00b66633 or a2,a2,a1 + 80002fe0: 00d6559b srliw a1,a2,0xd + 80002fe4: 0096581b srliw a6,a2,0x9 + 80002fe8: 00b84833 xor a6,a6,a1 + 80002fec: 0006061b sext.w a2,a2 + 80002ff0: 00c84833 xor a6,a6,a2 + 80002ff4: 7ff87313 andi t1,a6,2047 + 80002ff8: 00531893 slli a7,t1,0x5 + 80002ffc: 011688b3 add a7,a3,a7 + 80003000: 0088b583 ld a1,8(a7) + 80003004: 00668533 add a0,a3,t1 + 80003008: 00ab8533 add a0,s7,a0 + 8000300c: ffe78a13 addi s4,a5,-2 + 80003010: 00854283 lbu t0,8(a0) + 80003014: 001f8f93 addi t6,t6,1 + 80003018: 00030813 mv a6,t1 + 8000301c: 0945fe63 bgeu a1,s4,800030b8 + 80003020: 2c029e63 bnez t0,800032fc + 80003024: 00f8b423 sd a5,8(a7) + 80003028: 00100613 li a2,1 + 8000302c: 00c50423 sb a2,8(a0) + 80003030: 0017571b srliw a4,a4,0x1 + 80003034: 0007c603 lbu a2,0(a5) + 80003038: 001e0e13 addi t3,t3,1 + 8000303c: 00178793 addi a5,a5,1 + 80003040: fece0fa3 sb a2,-1(t3) + 80003044: 00177613 andi a2,a4,1 + 80003048: 00060593 mv a1,a2 + 8000304c: 14fc6063 bltu s8,a5,8000318c + 80003050: f60584e3 beqz a1,80002fb8 + 80003054: 01813603 ld a2,24(sp) + 80003058: 02f67063 bgeu a2,a5,80003078 + 8000305c: 00813603 ld a2,8(sp) + 80003060: 01013583 ld a1,16(sp) + 80003064: 40c78633 sub a2,a5,a2 + 80003068: 40565513 srai a0,a2,0x5 + 8000306c: 40be05b3 sub a1,t3,a1 + 80003070: 40a60633 sub a2,a2,a0 + 80003074: 44b64a63 blt a2,a1,800034c8 + 80003078: 0017571b srliw a4,a4,0x1 + 8000307c: 01b76733 or a4,a4,s11 + 80003080: 0007071b sext.w a4,a4 + 80003084: 00875513 srli a0,a4,0x8 + 80003088: 01075593 srli a1,a4,0x10 + 8000308c: 01875613 srli a2,a4,0x18 + 80003090: 00e48023 sb a4,0(s1) + 80003094: 00a480a3 sb a0,1(s1) + 80003098: 00b48123 sb a1,2(s1) + 8000309c: 00c481a3 sb a2,3(s1) + 800030a0: 40fd0fb3 sub t6,s10,a5 + 800030a4: 000e0493 mv s1,t3 + 800030a8: 80000737 lui a4,0x80000 + 800030ac: 004e0e13 addi t3,t3,4 + 800030b0: f1fcdae3 bge s9,t6,80002fc4 + 800030b4: f0dff06f j 80002fc0 + 800030b8: 00000e93 li t4,0 + 800030bc: 00531593 slli a1,t1,0x5 + 800030c0: 0002891b sext.w s2,t0 + 800030c4: 00b685b3 add a1,a3,a1 + 800030c8: 00000f13 li t5,0 + 800030cc: 00100513 li a0,1 + 800030d0: 03257863 bgeu a0,s2,80003100 + 800030d4: 0105b883 ld a7,16(a1) + 800030d8: 020e9393 slli t2,t4,0x20 + 800030dc: 0203d393 srli t2,t2,0x20 + 800030e0: 00778433 add s0,a5,t2 + 800030e4: 007883b3 add t2,a7,t2 + 800030e8: 00044403 lbu s0,0(s0) + 800030ec: 0003c383 lbu t2,0(t2) + 800030f0: 18740c63 beq s0,t2,80003288 + 800030f4: 0015051b addiw a0,a0,1 + 800030f8: 00858593 addi a1,a1,8 + 800030fc: fd351ae3 bne a0,s3,800030d0 + 80003100: 0032f593 andi a1,t0,3 + 80003104: 00231613 slli a2,t1,0x2 + 80003108: 00b60633 add a2,a2,a1 + 8000310c: 00361613 slli a2,a2,0x3 + 80003110: 00c68633 add a2,a3,a2 + 80003114: 00668333 add t1,a3,t1 + 80003118: 00f63423 sd a5,8(a2) + 8000311c: 006b8333 add t1,s7,t1 + 80003120: 0012829b addiw t0,t0,1 + 80003124: 0017561b srliw a2,a4,0x1 + 80003128: 00530423 sb t0,8(t1) + 8000312c: 00200593 li a1,2 + 80003130: 0006071b sext.w a4,a2 + 80003134: f1d5f0e3 bgeu a1,t4,80003034 + 80003138: 01b66733 or a4,a2,s11 + 8000313c: 020e9613 slli a2,t4,0x20 + 80003140: 02065613 srli a2,a2,0x20 + 80003144: 0058181b slliw a6,a6,0x5 + 80003148: 010f6f33 or t5,t5,a6 + 8000314c: 00c787b3 add a5,a5,a2 + 80003150: 00900613 li a2,9 + 80003154: 0007071b sext.w a4,a4 + 80003158: 000f0f1b sext.w t5,t5 + 8000315c: 21d66c63 bltu a2,t4,80003374 + 80003160: ffee8e9b addiw t4,t4,-2 + 80003164: 002e9e9b slliw t4,t4,0x2 + 80003168: 01df6f33 or t5,t5,t4 + 8000316c: 000f0f1b sext.w t5,t5 + 80003170: 008f5613 srli a2,t5,0x8 + 80003174: 00ce00a3 sb a2,1(t3) + 80003178: 01ee0023 sb t5,0(t3) + 8000317c: 00177613 andi a2,a4,1 + 80003180: 002e0e13 addi t3,t3,2 + 80003184: 00060593 mv a1,a2 + 80003188: ecfc74e3 bgeu s8,a5,80003050 + 8000318c: 03813883 ld a7,56(sp) + 80003190: 0017551b srliw a0,a4,0x1 + 80003194: 0017581b srliw a6,a4,0x1 + 80003198: 20f8e863 bltu a7,a5,800033a8 + 8000319c: 03813583 ld a1,56(sp) + 800031a0: 02013803 ld a6,32(sp) + 800031a4: 80000f37 lui t5,0x80000 + 800031a8: ffd58313 addi t1,a1,-3 + 800031ac: 00813583 ld a1,8(sp) + 800031b0: 00010eb7 lui t4,0x10 + 800031b4: 010588b3 add a7,a1,a6 + 800031b8: 08c0006f j 80003244 + 800031bc: 0027581b srliw a6,a4,0x2 + 800031c0: 00157593 andi a1,a0,1 + 800031c4: 000f8713 mv a4,t6 + 800031c8: 0007cf83 lbu t6,0(a5) + 800031cc: 06f36063 bltu t1,a5,8000322c + 800031d0: 0017c503 lbu a0,1(a5) + 800031d4: 0027c603 lbu a2,2(a5) + 800031d8: 0085151b slliw a0,a0,0x8 + 800031dc: 0106161b slliw a2,a2,0x10 + 800031e0: 00c56533 or a0,a0,a2 + 800031e4: 00d5529b srliw t0,a0,0xd + 800031e8: 0095561b srliw a2,a0,0x9 + 800031ec: 00564633 xor a2,a2,t0 + 800031f0: 01f56533 or a0,a0,t6 + 800031f4: 00a64633 xor a2,a2,a0 + 800031f8: 7ff67613 andi a2,a2,2047 + 800031fc: 00c68533 add a0,a3,a2 + 80003200: 00ae8533 add a0,t4,a0 + 80003204: 00854f83 lbu t6,8(a0) + 80003208: 00261613 slli a2,a2,0x2 + 8000320c: 003ff293 andi t0,t6,3 + 80003210: 00560633 add a2,a2,t0 + 80003214: 00361613 slli a2,a2,0x3 + 80003218: 00c68633 add a2,a3,a2 + 8000321c: 00f63423 sd a5,8(a2) + 80003220: 001f8f9b addiw t6,t6,1 + 80003224: 01f50423 sb t6,8(a0) + 80003228: 0007cf83 lbu t6,0(a5) + 8000322c: 01fe0023 sb t6,0(t3) + 80003230: 00178793 addi a5,a5,1 + 80003234: 001e0e13 addi t3,t3,1 + 80003238: 17178863 beq a5,a7,800033a8 + 8000323c: 0017551b srliw a0,a4,0x1 + 80003240: 00177613 andi a2,a4,1 + 80003244: 00050f9b sext.w t6,a0 + 80003248: f6060ae3 beqz a2,800031bc + 8000324c: 01e56533 or a0,a0,t5 + 80003250: 0005051b sext.w a0,a0 + 80003254: 00855593 srli a1,a0,0x8 + 80003258: 01855713 srli a4,a0,0x18 + 8000325c: 01055613 srli a2,a0,0x10 + 80003260: 00b480a3 sb a1,1(s1) + 80003264: 00e481a3 sb a4,3(s1) + 80003268: 00a48023 sb a0,0(s1) + 8000326c: 00c48123 sb a2,2(s1) + 80003270: 20000837 lui a6,0x20000 + 80003274: 000e0493 mv s1,t3 + 80003278: 00000593 li a1,0 + 8000327c: 004e0e13 addi t3,t3,4 + 80003280: 40000737 lui a4,0x40000 + 80003284: f45ff06f j 800031c8 + 80003288: 0018c383 lbu t2,1(a7) + 8000328c: 0028c403 lbu s0,2(a7) + 80003290: 0008ca83 lbu s5,0(a7) + 80003294: 0083939b slliw t2,t2,0x8 + 80003298: 0104141b slliw s0,s0,0x10 + 8000329c: 0083e3b3 or t2,t2,s0 + 800032a0: 0153e3b3 or t2,t2,s5 + 800032a4: 0003839b sext.w t2,t2 + 800032a8: e4c396e3 bne t2,a2,800030f4 + 800032ac: e548f4e3 bgeu a7,s4,800030f4 + 800032b0: 0038c403 lbu s0,3(a7) + 800032b4: 0037c383 lbu t2,3(a5) + 800032b8: 28741a63 bne s0,t2,8000354c + 800032bc: 00300393 li t2,3 + 800032c0: 01f3e663 bltu t2,t6,800032cc + 800032c4: 2880006f j 8000354c + 800032c8: 03f47263 bgeu s0,t6,800032ec + 800032cc: 0013839b addiw t2,t2,1 + 800032d0: 02039413 slli s0,t2,0x20 + 800032d4: 02045413 srli s0,s0,0x20 + 800032d8: 00888b33 add s6,a7,s0 + 800032dc: 00878ab3 add s5,a5,s0 + 800032e0: 000b4b03 lbu s6,0(s6) + 800032e4: 000aca83 lbu s5,0(s5) + 800032e8: ff5b00e3 beq s6,s5,800032c8 + 800032ec: e07ef4e3 bgeu t4,t2,800030f4 + 800032f0: 00050f13 mv t5,a0 + 800032f4: 00038e93 mv t4,t2 + 800032f8: dfdff06f j 800030f4 + 800032fc: 0015c503 lbu a0,1(a1) + 80003300: 0025c883 lbu a7,2(a1) + 80003304: 0005ce83 lbu t4,0(a1) + 80003308: 0085151b slliw a0,a0,0x8 + 8000330c: 0108989b slliw a7,a7,0x10 + 80003310: 01156533 or a0,a0,a7 + 80003314: 01d56533 or a0,a0,t4 + 80003318: 0005051b sext.w a0,a0 + 8000331c: 00000e93 li t4,0 + 80003320: d8c51ee3 bne a0,a2,800030bc + 80003324: 0035c883 lbu a7,3(a1) + 80003328: 0037c503 lbu a0,3(a5) + 8000332c: 00300e93 li t4,3 + 80003330: d8a896e3 bne a7,a0,800030bc + 80003334: 0045c883 lbu a7,4(a1) + 80003338: 0047c503 lbu a0,4(a5) + 8000333c: 00400e93 li t4,4 + 80003340: d6a89ee3 bne a7,a0,800030bc + 80003344: 01f9e663 bltu s3,t6,80003350 + 80003348: d75ff06f j 800030bc + 8000334c: d7f578e3 bgeu a0,t6,800030bc + 80003350: 001e8e9b addiw t4,t4,1 + 80003354: 020e9513 slli a0,t4,0x20 + 80003358: 02055513 srli a0,a0,0x20 + 8000335c: 00a588b3 add a7,a1,a0 + 80003360: 00a78f33 add t5,a5,a0 + 80003364: 0008c883 lbu a7,0(a7) + 80003368: 000f4f03 lbu t5,0(t5) # ffffffff80000000 <_end+0xfffffffeffff0000> + 8000336c: ffe880e3 beq a7,t5,8000334c + 80003370: d4dff06f j 800030bc + 80003374: 010e9e9b slliw t4,t4,0x10 + 80003378: 01df6eb3 or t4,t5,t4 + 8000337c: 000e8e9b sext.w t4,t4 + 80003380: 008ed593 srli a1,t4,0x8 + 80003384: 010ed613 srli a2,t4,0x10 + 80003388: 01de0023 sb t4,0(t3) + 8000338c: 00be00a3 sb a1,1(t3) + 80003390: 00ce0123 sb a2,2(t3) + 80003394: 003e0e13 addi t3,t3,3 + 80003398: cadff06f j 80003044 + 8000339c: 00900793 li a5,9 + 800033a0: 02f13423 sd a5,40(sp) + 800033a4: b99ff06f j 80002f3c + 800033a8: 00059e63 bnez a1,800033c4 + 800033ac: 0017579b srliw a5,a4,0x1 + 800033b0: 0017f613 andi a2,a5,1 + 800033b4: 0007081b sext.w a6,a4 + 800033b8: 0007871b sext.w a4,a5 + 800033bc: fe0608e3 beqz a2,800033ac + 800033c0: 0028581b srliw a6,a6,0x2 + 800033c4: 800007b7 lui a5,0x80000 + 800033c8: 00f86833 or a6,a6,a5 + 800033cc: 01885793 srli a5,a6,0x18 + 800033d0: 00f481a3 sb a5,3(s1) + 800033d4: 01013783 ld a5,16(sp) + 800033d8: 00885613 srli a2,a6,0x8 + 800033dc: 01085713 srli a4,a6,0x10 + 800033e0: 40fe0533 sub a0,t3,a5 + 800033e4: 01048023 sb a6,0(s1) + 800033e8: 00c480a3 sb a2,1(s1) + 800033ec: 00e48123 sb a4,2(s1) + 800033f0: 00900793 li a5,9 + 800033f4: 00f55463 bge a0,a5,800033fc + 800033f8: 00900513 li a0,9 + 800033fc: 02813783 ld a5,40(sp) + 80003400: 00f50533 add a0,a0,a5 + 80003404: 00100793 li a5,1 + 80003408: 0006b023 sd zero,0(a3) + 8000340c: 02813683 ld a3,40(sp) + 80003410: 00300713 li a4,3 + 80003414: 02014603 lbu a2,32(sp) + 80003418: 0ff57593 andi a1,a0,255 + 8000341c: 08e68e63 beq a3,a4,800034b8 + 80003420: 02012683 lw a3,32(sp) + 80003424: 03013e83 ld t4,48(sp) + 80003428: 0005071b sext.w a4,a0 + 8000342c: 00875e13 srli t3,a4,0x8 + 80003430: 01075313 srli t1,a4,0x10 + 80003434: 0086d893 srli a7,a3,0x8 + 80003438: 0106d813 srli a6,a3,0x10 + 8000343c: 01875713 srli a4,a4,0x18 + 80003440: 0186d693 srli a3,a3,0x18 + 80003444: 0027e793 ori a5,a5,2 + 80003448: 00be80a3 sb a1,1(t4) # 10001 <_entry_offset+0x10001> + 8000344c: 01ce8123 sb t3,2(t4) + 80003450: 006e81a3 sb t1,3(t4) + 80003454: 00ee8223 sb a4,4(t4) + 80003458: 00ce82a3 sb a2,5(t4) + 8000345c: 011e8323 sb a7,6(t4) + 80003460: 010e83a3 sb a6,7(t4) + 80003464: 00de8423 sb a3,8(t4) + 80003468: 03013703 ld a4,48(sp) + 8000346c: 0487e793 ori a5,a5,72 + 80003470: 00f70023 sb a5,0(a4) # 40000000 <_entry_offset+0x40000000> + 80003474: 0a813083 ld ra,168(sp) + 80003478: 0a013403 ld s0,160(sp) + 8000347c: 09813483 ld s1,152(sp) + 80003480: 09013903 ld s2,144(sp) + 80003484: 08813983 ld s3,136(sp) + 80003488: 08013a03 ld s4,128(sp) + 8000348c: 07813a83 ld s5,120(sp) + 80003490: 07013b03 ld s6,112(sp) + 80003494: 06813b83 ld s7,104(sp) + 80003498: 06013c03 ld s8,96(sp) + 8000349c: 05813c83 ld s9,88(sp) + 800034a0: 05013d03 ld s10,80(sp) + 800034a4: 04813d83 ld s11,72(sp) + 800034a8: 0b010113 addi sp,sp,176 + 800034ac: 00008067 ret + 800034b0: 00000513 li a0,0 + 800034b4: fc1ff06f j 80003474 + 800034b8: 03013703 ld a4,48(sp) + 800034bc: 00b700a3 sb a1,1(a4) + 800034c0: 00c70123 sb a2,2(a4) + 800034c4: fa5ff06f j 80003468 + 800034c8: 00813783 ld a5,8(sp) + 800034cc: 0a078c63 beqz a5,80003584 + 800034d0: 00813603 ld a2,8(sp) + 800034d4: 02013583 ld a1,32(sp) + 800034d8: 01013703 ld a4,16(sp) + 800034dc: 00b607b3 add a5,a2,a1 + 800034e0: 02f77c63 bgeu a4,a5,80003518 + 800034e4: 02e67a63 bgeu a2,a4,80003518 + 800034e8: 00b70733 add a4,a4,a1 + 800034ec: fff7c603 lbu a2,-1(a5) # ffffffff7fffffff <_end+0xfffffffefffeffff> + 800034f0: fff78793 addi a5,a5,-1 + 800034f4: fff70713 addi a4,a4,-1 + 800034f8: 00c70023 sb a2,0(a4) + 800034fc: 00813603 ld a2,8(sp) + 80003500: fef616e3 bne a2,a5,800034ec + 80003504: 02813783 ld a5,40(sp) + 80003508: 02013703 ld a4,32(sp) + 8000350c: 00e78533 add a0,a5,a4 + 80003510: 00000793 li a5,0 + 80003514: ef5ff06f j 80003408 + 80003518: 01013783 ld a5,16(sp) + 8000351c: 02013703 ld a4,32(sp) + 80003520: 00e78733 add a4,a5,a4 + 80003524: 00813583 ld a1,8(sp) + 80003528: 01013603 ld a2,16(sp) + 8000352c: 0005c783 lbu a5,0(a1) + 80003530: 00160613 addi a2,a2,1 + 80003534: 00158593 addi a1,a1,1 + 80003538: 00c13823 sd a2,16(sp) + 8000353c: 00b13423 sd a1,8(sp) + 80003540: fef60fa3 sb a5,-1(a2) + 80003544: fec710e3 bne a4,a2,80003524 + 80003548: fbdff06f j 80003504 + 8000354c: 00300393 li t2,3 + 80003550: d9dff06f j 800032ec + 80003554: 00813783 ld a5,8(sp) + 80003558: 03813703 ld a4,56(sp) + 8000355c: 00f76e63 bltu a4,a5,80003578 + 80003560: 00813783 ld a5,8(sp) + 80003564: 01013483 ld s1,16(sp) + 80003568: 80000737 lui a4,0x80000 + 8000356c: 40000537 lui a0,0x40000 + 80003570: 00000613 li a2,0 + 80003574: c29ff06f j 8000319c + 80003578: 01013483 ld s1,16(sp) + 8000357c: 80000737 lui a4,0x80000 + 80003580: e2dff06f j 800033ac + 80003584: 925ff0ef jal ra,80002ea8 + +0000000080003588 : + 80003588: 00004797 auipc a5,0x4 + 8000358c: 5487b783 ld a5,1352(a5) # 80007ad0 + 80003590: 0007a783 lw a5,0(a5) + 80003594: fd010113 addi sp,sp,-48 + 80003598: 01213823 sd s2,16(sp) + 8000359c: 00004537 lui a0,0x4 + 800035a0: 00004917 auipc s2,0x4 + 800035a4: 47090913 addi s2,s2,1136 # 80007a10 + 800035a8: 02113423 sd ra,40(sp) + 800035ac: 00f92023 sw a5,0(s2) + 800035b0: 01313423 sd s3,8(sp) + 800035b4: 00004797 auipc a5,0x4 + 800035b8: 4607a623 sw zero,1132(a5) # 80007a20 + 800035bc: 02813023 sd s0,32(sp) + 800035c0: 00913c23 sd s1,24(sp) + 800035c4: 01413023 sd s4,0(sp) + 800035c8: f51fc0ef jal ra,80000518 + 800035cc: 00050793 mv a5,a0 + 800035d0: 40000513 li a0,1024 + 800035d4: 00004717 auipc a4,0x4 + 800035d8: 44f73223 sd a5,1092(a4) # 80007a18 + 800035dc: f3dfc0ef jal ra,80000518 + 800035e0: 00050793 mv a5,a0 + 800035e4: 00002537 lui a0,0x2 + 800035e8: 00004717 auipc a4,0x4 + 800035ec: 44f73023 sd a5,1088(a4) # 80007a28 + 800035f0: f29fc0ef jal ra,80000518 + 800035f4: 00092783 lw a5,0(s2) + 800035f8: 00004717 auipc a4,0x4 + 800035fc: 44a73023 sd a0,1088(a4) # 80007a38 + 80003600: 00004997 auipc s3,0x4 + 80003604: 44098993 addi s3,s3,1088 # 80007a40 + 80003608: 0017851b addiw a0,a5,1 + 8000360c: 00003797 auipc a5,0x3 + 80003610: 10c78793 addi a5,a5,268 # 80006718 <_etext+0x484> + 80003614: 00004717 auipc a4,0x4 + 80003618: 40f73e23 sd a5,1052(a4) # 80007a30 + 8000361c: efdfc0ef jal ra,80000518 + 80003620: 00050793 mv a5,a0 + 80003624: 00001537 lui a0,0x1 + 80003628: 00f9b023 sd a5,0(s3) + 8000362c: eedfc0ef jal ra,80000518 + 80003630: 00050793 mv a5,a0 + 80003634: 00100513 li a0,1 + 80003638: 00004717 auipc a4,0x4 + 8000363c: 40f73c23 sd a5,1048(a4) # 80007a50 + 80003640: 00004797 auipc a5,0x4 + 80003644: 4007a423 sw zero,1032(a5) # 80007a48 + 80003648: f6dfc0ef jal ra,800005b4 + 8000364c: 00092783 lw a5,0(s2) + 80003650: 04f05863 blez a5,800036a0 + 80003654: 00000413 li s0,0 + 80003658: 00003a17 auipc s4,0x3 + 8000365c: 178a0a13 addi s4,s4,376 # 800067d0 <_etext+0x53c> + 80003660: f69fc0ef jal ra,800005c8 + 80003664: 02051513 slli a0,a0,0x20 + 80003668: 03e00593 li a1,62 + 8000366c: 02055513 srli a0,a0,0x20 + 80003670: 320010ef jal ra,80004990 <__umoddi3> + 80003674: 02051513 slli a0,a0,0x20 + 80003678: 02055513 srli a0,a0,0x20 + 8000367c: 0009b483 ld s1,0(s3) + 80003680: 00aa0533 add a0,s4,a0 + 80003684: 00054783 lbu a5,0(a0) # 1000 <_entry_offset+0x1000> + 80003688: 00092703 lw a4,0(s2) + 8000368c: 008484b3 add s1,s1,s0 + 80003690: 00140413 addi s0,s0,1 + 80003694: 00f48023 sb a5,0(s1) + 80003698: 0004079b sext.w a5,s0 + 8000369c: fce7c2e3 blt a5,a4,80003660 + 800036a0: 02813083 ld ra,40(sp) + 800036a4: 02013403 ld s0,32(sp) + 800036a8: 01813483 ld s1,24(sp) + 800036ac: 01013903 ld s2,16(sp) + 800036b0: 00813983 ld s3,8(sp) + 800036b4: 00013a03 ld s4,0(sp) + 800036b8: 03010113 addi sp,sp,48 + 800036bc: 00008067 ret + +00000000800036c0 : + 800036c0: 00004317 auipc t1,0x4 + 800036c4: 37030313 addi t1,t1,880 # 80007a30 + 800036c8: 00033583 ld a1,0(t1) + 800036cc: fc010113 addi sp,sp,-64 + 800036d0: 02813c23 sd s0,56(sp) + 800036d4: 02913823 sd s1,48(sp) + 800036d8: 03213423 sd s2,40(sp) + 800036dc: 03313023 sd s3,32(sp) + 800036e0: 01413c23 sd s4,24(sp) + 800036e4: 01513823 sd s5,16(sp) + 800036e8: 01613423 sd s6,8(sp) + 800036ec: 01713023 sd s7,0(sp) + 800036f0: 0005c703 lbu a4,0(a1) + 800036f4: 00004517 auipc a0,0x4 + 800036f8: 32c50513 addi a0,a0,812 # 80007a20 + 800036fc: 00052603 lw a2,0(a0) + 80003700: 00004697 auipc a3,0x4 + 80003704: 3186b683 ld a3,792(a3) # 80007a18 + 80003708: 38070463 beqz a4,80003a90 + 8000370c: 00004897 auipc a7,0x4 + 80003710: 31c8b883 ld a7,796(a7) # 80007a28 + 80003714: 00158593 addi a1,a1,1 + 80003718: 00000b13 li s6,0 + 8000371c: 00000a93 li s5,0 + 80003720: 00000793 li a5,0 + 80003724: 03200a13 li s4,50 + 80003728: 00003817 auipc a6,0x3 + 8000372c: 0e880813 addi a6,a6,232 # 80006810 <_etext+0x57c> + 80003730: 000019b7 lui s3,0x1 + 80003734: 00800913 li s2,8 + 80003738: 00700493 li s1,7 + 8000373c: 20000413 li s0,512 + 80003740: 00600393 li t2,6 + 80003744: 00500293 li t0,5 + 80003748: 00400f93 li t6,4 + 8000374c: 00300f13 li t5,3 + 80003750: 00200e93 li t4,2 + 80003754: 00100e13 li t3,1 + 80003758: fd57071b addiw a4,a4,-43 + 8000375c: 0ff77713 andi a4,a4,255 + 80003760: fff58b93 addi s7,a1,-1 + 80003764: 00ea6c63 bltu s4,a4,8000377c + 80003768: 00271713 slli a4,a4,0x2 + 8000376c: 01070733 add a4,a4,a6 + 80003770: 00072703 lw a4,0(a4) + 80003774: 01070733 add a4,a4,a6 + 80003778: 00070067 jr a4 + 8000377c: 0005c703 lbu a4,0(a1) + 80003780: 10070a63 beqz a4,80003894 + 80003784: 00158593 addi a1,a1,1 + 80003788: 00100b13 li s6,1 + 8000378c: fcdff06f j 80003758 + 80003790: 2c060e63 beqz a2,80003a6c + 80003794: fff6061b addiw a2,a2,-1 + 80003798: 02061713 slli a4,a2,0x20 + 8000379c: 01f75713 srli a4,a4,0x1f + 800037a0: 00e88733 add a4,a7,a4 + 800037a4: 00075b03 lhu s6,0(a4) + 800037a8: 00279713 slli a4,a5,0x2 + 800037ac: 00e68733 add a4,a3,a4 + 800037b0: 002b1a93 slli s5,s6,0x2 + 800037b4: 01671123 sh s6,2(a4) + 800037b8: 01271023 sh s2,0(a4) + 800037bc: 01568733 add a4,a3,s5 + 800037c0: 00f71123 sh a5,2(a4) + 800037c4: 00100a93 li s5,1 + 800037c8: 0005c703 lbu a4,0(a1) + 800037cc: 0017879b addiw a5,a5,1 + 800037d0: 03079793 slli a5,a5,0x30 + 800037d4: 0307d793 srli a5,a5,0x30 + 800037d8: 0a070e63 beqz a4,80003894 + 800037dc: fb3794e3 bne a5,s3,80003784 + 800037e0: 000a8463 beqz s5,800037e8 + 800037e4: 00c52023 sw a2,0(a0) + 800037e8: 00b33023 sd a1,0(t1) + 800037ec: 0006d703 lhu a4,0(a3) + 800037f0: 16070c63 beqz a4,80003968 + 800037f4: 00004e97 auipc t4,0x4 + 800037f8: 24ce8e93 addi t4,t4,588 # 80007a40 + 800037fc: 00004e17 auipc t3,0x4 + 80003800: 24ce0e13 addi t3,t3,588 # 80007a48 + 80003804: 000eb803 ld a6,0(t4) + 80003808: 000e2503 lw a0,0(t3) + 8000380c: 00004597 auipc a1,0x4 + 80003810: 22c5b583 ld a1,556(a1) # 80007a38 + 80003814: 00004397 auipc t2,0x4 + 80003818: 23c3b383 ld t2,572(t2) # 80007a50 + 8000381c: 00068793 mv a5,a3 + 80003820: 00000f13 li t5,0 + 80003824: 00000313 li t1,0 + 80003828: 00000413 li s0,0 + 8000382c: 00000613 li a2,0 + 80003830: 00800293 li t0,8 + 80003834: 00003897 auipc a7,0x3 + 80003838: 0a888893 addi a7,a7,168 # 800068dc <_etext+0x648> + 8000383c: 00001fb7 lui t6,0x1 + 80003840: 10e2ec63 bltu t0,a4,80003958 + 80003844: 00271713 slli a4,a4,0x2 + 80003848: 01170733 add a4,a4,a7 + 8000384c: 00072703 lw a4,0(a4) + 80003850: 01170733 add a4,a4,a7 + 80003854: 00070067 jr a4 + 80003858: 00279713 slli a4,a5,0x2 + 8000385c: 00e68733 add a4,a3,a4 + 80003860: 00971023 sh s1,0(a4) + 80003864: 22860063 beq a2,s0,80003a84 + 80003868: 02061713 slli a4,a2,0x20 + 8000386c: 01f75713 srli a4,a4,0x1f + 80003870: 00e88733 add a4,a7,a4 + 80003874: 00f71023 sh a5,0(a4) + 80003878: 0005c703 lbu a4,0(a1) + 8000387c: 0017879b addiw a5,a5,1 + 80003880: 03079793 slli a5,a5,0x30 + 80003884: 0016061b addiw a2,a2,1 + 80003888: 00100a93 li s5,1 + 8000388c: 0307d793 srli a5,a5,0x30 + 80003890: f40716e3 bnez a4,800037dc + 80003894: 000a8463 beqz s5,8000389c + 80003898: 00c52023 sw a2,0(a0) + 8000389c: 00052703 lw a4,0(a0) + 800038a0: 00b33023 sd a1,0(t1) + 800038a4: f40714e3 bnez a4,800037ec + 800038a8: 00001737 lui a4,0x1 + 800038ac: f4e780e3 beq a5,a4,800037ec + 800038b0: 00279793 slli a5,a5,0x2 + 800038b4: 00f687b3 add a5,a3,a5 + 800038b8: 00079023 sh zero,0(a5) + 800038bc: 0006d703 lhu a4,0(a3) + 800038c0: f2071ae3 bnez a4,800037f4 + 800038c4: 0a40006f j 80003968 + 800038c8: 00279713 slli a4,a5,0x2 + 800038cc: 00e68733 add a4,a3,a4 + 800038d0: 01c71023 sh t3,0(a4) # 1000 <_entry_offset+0x1000> + 800038d4: ef5ff06f j 800037c8 + 800038d8: 00279713 slli a4,a5,0x2 + 800038dc: 00e68733 add a4,a3,a4 + 800038e0: 01d71023 sh t4,0(a4) + 800038e4: ee5ff06f j 800037c8 + 800038e8: 00279713 slli a4,a5,0x2 + 800038ec: 00e68733 add a4,a3,a4 + 800038f0: 00571023 sh t0,0(a4) + 800038f4: ed5ff06f j 800037c8 + 800038f8: 00279713 slli a4,a5,0x2 + 800038fc: 00e68733 add a4,a3,a4 + 80003900: 01f71023 sh t6,0(a4) + 80003904: ec5ff06f j 800037c8 + 80003908: 00279713 slli a4,a5,0x2 + 8000390c: 00e68733 add a4,a3,a4 + 80003910: 00771023 sh t2,0(a4) + 80003914: eb5ff06f j 800037c8 + 80003918: 00279713 slli a4,a5,0x2 + 8000391c: 00e68733 add a4,a3,a4 + 80003920: 01e71023 sh t5,0(a4) + 80003924: ea5ff06f j 800037c8 + 80003928: 02061713 slli a4,a2,0x20 + 8000392c: 01f75713 srli a4,a4,0x1f + 80003930: 00e58733 add a4,a1,a4 + 80003934: 00075703 lhu a4,0(a4) + 80003938: 08070863 beqz a4,800039c8 + 8000393c: 0027d403 lhu s0,2(a5) + 80003940: 0014041b addiw s0,s0,1 + 80003944: 02041793 slli a5,s0,0x20 + 80003948: 01e7d793 srli a5,a5,0x1e + 8000394c: 00f687b3 add a5,a3,a5 + 80003950: 0007d703 lhu a4,0(a5) + 80003954: ee0716e3 bnez a4,80003840 + 80003958: 00030463 beqz t1,80003960 + 8000395c: 00ae2023 sw a0,0(t3) + 80003960: 000f0463 beqz t5,80003968 + 80003964: 010eb023 sd a6,0(t4) + 80003968: 03813403 ld s0,56(sp) + 8000396c: 03013483 ld s1,48(sp) + 80003970: 02813903 ld s2,40(sp) + 80003974: 02013983 ld s3,32(sp) + 80003978: 01813a03 ld s4,24(sp) + 8000397c: 01013a83 ld s5,16(sp) + 80003980: 00813b03 ld s6,8(sp) + 80003984: 00013b83 ld s7,0(sp) + 80003988: 04010113 addi sp,sp,64 + 8000398c: 00008067 ret + 80003990: 02061713 slli a4,a2,0x20 + 80003994: 01f75713 srli a4,a4,0x1f + 80003998: 00e58733 add a4,a1,a4 + 8000399c: 00075703 lhu a4,0(a4) + 800039a0: 02071463 bnez a4,800039c8 + 800039a4: 0027d403 lhu s0,2(a5) + 800039a8: f99ff06f j 80003940 + 800039ac: 00084703 lbu a4,0(a6) + 800039b0: 02061793 slli a5,a2,0x20 + 800039b4: 01f7d793 srli a5,a5,0x1f + 800039b8: 00f587b3 add a5,a1,a5 + 800039bc: 00e79023 sh a4,0(a5) + 800039c0: 00180813 addi a6,a6,1 + 800039c4: 00100f13 li t5,1 + 800039c8: 0014041b addiw s0,s0,1 + 800039cc: 02041793 slli a5,s0,0x20 + 800039d0: 01e7d793 srli a5,a5,0x1e + 800039d4: 00f687b3 add a5,a3,a5 + 800039d8: 0007d703 lhu a4,0(a5) + 800039dc: e60712e3 bnez a4,80003840 + 800039e0: f79ff06f j 80003958 + 800039e4: 02061793 slli a5,a2,0x20 + 800039e8: 01f7d793 srli a5,a5,0x1f + 800039ec: 00f587b3 add a5,a1,a5 + 800039f0: 0007d703 lhu a4,0(a5) + 800039f4: fff7071b addiw a4,a4,-1 + 800039f8: 00e79023 sh a4,0(a5) + 800039fc: fcdff06f j 800039c8 + 80003a00: 02061793 slli a5,a2,0x20 + 80003a04: 01f7d793 srli a5,a5,0x1f + 80003a08: 00f587b3 add a5,a1,a5 + 80003a0c: 0007d703 lhu a4,0(a5) + 80003a10: 00a387b3 add a5,t2,a0 + 80003a14: 00100313 li t1,1 + 80003a18: 00e78023 sb a4,0(a5) + 80003a1c: 0015051b addiw a0,a0,1 + 80003a20: fa9ff06f j 800039c8 + 80003a24: 02061793 slli a5,a2,0x20 + 80003a28: 01f7d793 srli a5,a5,0x1f + 80003a2c: 00f587b3 add a5,a1,a5 + 80003a30: 0007d703 lhu a4,0(a5) + 80003a34: 0017071b addiw a4,a4,1 + 80003a38: 00e79023 sh a4,0(a5) + 80003a3c: f8dff06f j 800039c8 + 80003a40: fff6061b addiw a2,a2,-1 + 80003a44: 0014041b addiw s0,s0,1 + 80003a48: 02041793 slli a5,s0,0x20 + 80003a4c: 01e7d793 srli a5,a5,0x1e + 80003a50: 00f687b3 add a5,a3,a5 + 80003a54: 0007d703 lhu a4,0(a5) + 80003a58: f00700e3 beqz a4,80003958 + 80003a5c: dff662e3 bltu a2,t6,80003840 + 80003a60: ef9ff06f j 80003958 + 80003a64: 0016061b addiw a2,a2,1 + 80003a68: fddff06f j 80003a44 + 80003a6c: 000a8663 beqz s5,80003a78 + 80003a70: 00004797 auipc a5,0x4 + 80003a74: fa07a823 sw zero,-80(a5) # 80007a20 + 80003a78: d60b0ae3 beqz s6,800037ec + 80003a7c: 01733023 sd s7,0(t1) + 80003a80: d6dff06f j 800037ec + 80003a84: fe0a8ae3 beqz s5,80003a78 + 80003a88: 00c52023 sw a2,0(a0) + 80003a8c: fedff06f j 80003a78 + 80003a90: 00068793 mv a5,a3 + 80003a94: e20602e3 beqz a2,800038b8 + 80003a98: d55ff06f j 800037ec + +0000000080003a9c : + 80003a9c: ff010113 addi sp,sp,-16 + 80003aa0: 00813023 sd s0,0(sp) + 80003aa4: 00004417 auipc s0,0x4 + 80003aa8: fa440413 addi s0,s0,-92 # 80007a48 + 80003aac: 00042583 lw a1,0(s0) + 80003ab0: 00004517 auipc a0,0x4 + 80003ab4: fa053503 ld a0,-96(a0) # 80007a50 + 80003ab8: 00113423 sd ra,8(sp) + 80003abc: 00b505b3 add a1,a0,a1 + 80003ac0: b59fc0ef jal ra,80000618 + 80003ac4: 00042683 lw a3,0(s0) + 80003ac8: 00004717 auipc a4,0x4 + 80003acc: f4872703 lw a4,-184(a4) # 80007a10 + 80003ad0: 00e68c63 beq a3,a4,80003ae8 + 80003ad4: 00813083 ld ra,8(sp) + 80003ad8: 00013403 ld s0,0(sp) + 80003adc: 00000513 li a0,0 + 80003ae0: 01010113 addi sp,sp,16 + 80003ae4: 00008067 ret + 80003ae8: 00004717 auipc a4,0x4 + 80003aec: fe873703 ld a4,-24(a4) # 80007ad0 + 80003af0: 0005079b sext.w a5,a0 + 80003af4: 01872503 lw a0,24(a4) + 80003af8: 00813083 ld ra,8(sp) + 80003afc: 00013403 ld s0,0(sp) + 80003b00: 40f50533 sub a0,a0,a5 + 80003b04: 00153513 seqz a0,a0 + 80003b08: 01010113 addi sp,sp,16 + 80003b0c: 00008067 ret + +0000000080003b10 : + 80003b10: 00004797 auipc a5,0x4 + 80003b14: fc07b783 ld a5,-64(a5) # 80007ad0 + 80003b18: 0007a783 lw a5,0(a5) + 80003b1c: ff010113 addi sp,sp,-16 + 80003b20: 00113423 sd ra,8(sp) + 80003b24: 0007859b sext.w a1,a5 + 80003b28: 00058513 mv a0,a1 + 80003b2c: 00004717 auipc a4,0x4 + 80003b30: f2f72a23 sw a5,-204(a4) # 80007a60 + 80003b34: 00813023 sd s0,0(sp) + 80003b38: 5a5000ef jal ra,800048dc <__muldi3> + 80003b3c: 0025141b slliw s0,a0,0x2 + 80003b40: 00040513 mv a0,s0 + 80003b44: 9d5fc0ef jal ra,80000518 + 80003b48: 00050793 mv a5,a0 + 80003b4c: 00040513 mv a0,s0 + 80003b50: 00004717 auipc a4,0x4 + 80003b54: f0f73423 sd a5,-248(a4) # 80007a58 + 80003b58: 9c1fc0ef jal ra,80000518 + 80003b5c: 00050793 mv a5,a0 + 80003b60: 00040513 mv a0,s0 + 80003b64: 00004717 auipc a4,0x4 + 80003b68: f0f73223 sd a5,-252(a4) # 80007a68 + 80003b6c: 9adfc0ef jal ra,80000518 + 80003b70: 00050793 mv a5,a0 + 80003b74: 00040513 mv a0,s0 + 80003b78: 00004717 auipc a4,0x4 + 80003b7c: eef73c23 sd a5,-264(a4) # 80007a70 + 80003b80: 999fc0ef jal ra,80000518 + 80003b84: 00813083 ld ra,8(sp) + 80003b88: 00013403 ld s0,0(sp) + 80003b8c: 00004797 auipc a5,0x4 + 80003b90: eea7b623 sd a0,-276(a5) # 80007a78 + 80003b94: 01010113 addi sp,sp,16 + 80003b98: 00008067 ret + +0000000080003b9c : + 80003b9c: f5010113 addi sp,sp,-176 + 80003ba0: 00004797 auipc a5,0x4 + 80003ba4: ec87b783 ld a5,-312(a5) # 80007a68 + 80003ba8: 00f13423 sd a5,8(sp) + 80003bac: 00004797 auipc a5,0x4 + 80003bb0: ec47b783 ld a5,-316(a5) # 80007a70 + 80003bb4: 0a813023 sd s0,160(sp) + 80003bb8: 0a113423 sd ra,168(sp) + 80003bbc: 08913c23 sd s1,152(sp) + 80003bc0: 09213823 sd s2,144(sp) + 80003bc4: 09313423 sd s3,136(sp) + 80003bc8: 09413023 sd s4,128(sp) + 80003bcc: 07513c23 sd s5,120(sp) + 80003bd0: 07613823 sd s6,112(sp) + 80003bd4: 07713423 sd s7,104(sp) + 80003bd8: 07813023 sd s8,96(sp) + 80003bdc: 05913c23 sd s9,88(sp) + 80003be0: 05a13823 sd s10,80(sp) + 80003be4: 05b13423 sd s11,72(sp) + 80003be8: 00004417 auipc s0,0x4 + 80003bec: e7842403 lw s0,-392(s0) # 80007a60 + 80003bf0: 00f13c23 sd a5,24(sp) + 80003bf4: 2a805263 blez s0,80003e98 + 80003bf8: fff4039b addiw t2,s0,-1 + 80003bfc: 00004f17 auipc t5,0x4 + 80003c00: e5cf3f03 ld t5,-420(t5) # 80007a58 + 80003c04: 00038e9b sext.w t4,t2 + 80003c08: 00241493 slli s1,s0,0x2 + 80003c0c: 00000293 li t0,0 + 80003c10: 00000f93 li t6,0 + 80003c14: 00000e13 li t3,0 + 80003c18: 001e0e1b addiw t3,t3,1 + 80003c1c: 00028713 mv a4,t0 + 80003c20: 00000793 li a5,0 + 80003c24: 000f859b sext.w a1,t6 + 80003c28: 00813683 ld a3,8(sp) + 80003c2c: 01813603 ld a2,24(sp) + 80003c30: 41c78333 sub t1,a5,t3 + 80003c34: 00e68833 add a6,a3,a4 + 80003c38: 40b786b3 sub a3,a5,a1 + 80003c3c: 00e60533 add a0,a2,a4 + 80003c40: 00ef08b3 add a7,t5,a4 + 80003c44: 0016b693 seqz a3,a3 + 80003c48: 0017879b addiw a5,a5,1 + 80003c4c: 00100613 li a2,1 + 80003c50: 00be8463 beq t4,a1,80003c58 + 80003c54: 00133613 seqz a2,t1 + 80003c58: 00c8a023 sw a2,0(a7) + 80003c5c: 00c82023 sw a2,0(a6) + 80003c60: 00d52023 sw a3,0(a0) + 80003c64: 00470713 addi a4,a4,4 + 80003c68: fc8790e3 bne a5,s0,80003c28 + 80003c6c: 001f8f9b addiw t6,t6,1 + 80003c70: 009282b3 add t0,t0,s1 + 80003c74: fbc412e3 bne s0,t3,80003c18 + 80003c78: 01813703 ld a4,24(sp) + 80003c7c: 02039793 slli a5,t2,0x20 + 80003c80: 00004697 auipc a3,0x4 + 80003c84: df86b683 ld a3,-520(a3) # 80007a78 + 80003c88: 0207d793 srli a5,a5,0x20 + 80003c8c: 00279793 slli a5,a5,0x2 + 80003c90: 02d13423 sd a3,40(sp) + 80003c94: 00470713 addi a4,a4,4 + 80003c98: 00468693 addi a3,a3,4 + 80003c9c: 00f70733 add a4,a4,a5 + 80003ca0: 00f687b3 add a5,a3,a5 + 80003ca4: 02f13c23 sd a5,56(sp) + 80003ca8: 80000d37 lui s10,0x80000 + 80003cac: 01f00793 li a5,31 + 80003cb0: 02f13023 sd a5,32(sp) + 80003cb4: fd3d4793 xori a5,s10,-45 + 80003cb8: 02e13823 sd a4,48(sp) + 80003cbc: 00f13823 sd a5,16(sp) + 80003cc0: 01013783 ld a5,16(sp) + 80003cc4: 0017f793 andi a5,a5,1 + 80003cc8: 10079c63 bnez a5,80003de0 + 80003ccc: 0a805e63 blez s0,80003d88 + 80003cd0: 00813903 ld s2,8(sp) + 80003cd4: 02813a83 ld s5,40(sp) + 80003cd8: 00000a13 li s4,0 + 80003cdc: 01213023 sd s2,0(sp) + 80003ce0: 00813b03 ld s6,8(sp) + 80003ce4: 000a8d13 mv s10,s5 + 80003ce8: 00000d93 li s11,0 + 80003cec: 000d2023 sw zero,0(s10) # ffffffff80000000 <_end+0xfffffffeffff0000> + 80003cf0: 000b0993 mv s3,s6 + 80003cf4: 00090c93 mv s9,s2 + 80003cf8: 00000b93 li s7,0 + 80003cfc: 00000c13 li s8,0 + 80003d00: 0009a583 lw a1,0(s3) # 1000 <_entry_offset+0x1000> + 80003d04: 000ca503 lw a0,0(s9) + 80003d08: 001c0c1b addiw s8,s8,1 + 80003d0c: 004c8c93 addi s9,s9,4 + 80003d10: 3cd000ef jal ra,800048dc <__muldi3> + 80003d14: 01750bbb addw s7,a0,s7 + 80003d18: 017d2023 sw s7,0(s10) + 80003d1c: 009989b3 add s3,s3,s1 + 80003d20: fe8c40e3 blt s8,s0,80003d00 + 80003d24: 001d8d9b addiw s11,s11,1 + 80003d28: 004d0d13 addi s10,s10,4 + 80003d2c: 004b0b13 addi s6,s6,4 + 80003d30: fa8dcee3 blt s11,s0,80003cec + 80003d34: 001a0a1b addiw s4,s4,1 + 80003d38: 00990933 add s2,s2,s1 + 80003d3c: 009a8ab3 add s5,s5,s1 + 80003d40: fa8a40e3 blt s4,s0,80003ce0 + 80003d44: 02813503 ld a0,40(sp) + 80003d48: 00000593 li a1,0 + 80003d4c: 00013683 ld a3,0(sp) + 80003d50: 00050713 mv a4,a0 + 80003d54: 00000793 li a5,0 + 80003d58: 00072603 lw a2,0(a4) + 80003d5c: 0017879b addiw a5,a5,1 + 80003d60: 00470713 addi a4,a4,4 + 80003d64: 00c6a023 sw a2,0(a3) + 80003d68: 00468693 addi a3,a3,4 + 80003d6c: fe87c6e3 blt a5,s0,80003d58 + 80003d70: 00013783 ld a5,0(sp) + 80003d74: 0015859b addiw a1,a1,1 + 80003d78: 00950533 add a0,a0,s1 + 80003d7c: 009787b3 add a5,a5,s1 + 80003d80: 00f13023 sd a5,0(sp) + 80003d84: fc85c4e3 blt a1,s0,80003d4c + 80003d88: 02013783 ld a5,32(sp) + 80003d8c: 01013703 ld a4,16(sp) + 80003d90: fff7879b addiw a5,a5,-1 + 80003d94: 40175713 srai a4,a4,0x1 + 80003d98: 02f13023 sd a5,32(sp) + 80003d9c: 00e13823 sd a4,16(sp) + 80003da0: f20790e3 bnez a5,80003cc0 + 80003da4: 0a813083 ld ra,168(sp) + 80003da8: 0a013403 ld s0,160(sp) + 80003dac: 09813483 ld s1,152(sp) + 80003db0: 09013903 ld s2,144(sp) + 80003db4: 08813983 ld s3,136(sp) + 80003db8: 08013a03 ld s4,128(sp) + 80003dbc: 07813a83 ld s5,120(sp) + 80003dc0: 07013b03 ld s6,112(sp) + 80003dc4: 06813b83 ld s7,104(sp) + 80003dc8: 06013c03 ld s8,96(sp) + 80003dcc: 05813c83 ld s9,88(sp) + 80003dd0: 05013d03 ld s10,80(sp) + 80003dd4: 04813d83 ld s11,72(sp) + 80003dd8: 0b010113 addi sp,sp,176 + 80003ddc: 00008067 ret + 80003de0: fa8054e3 blez s0,80003d88 + 80003de4: 02813c83 ld s9,40(sp) + 80003de8: 03013983 ld s3,48(sp) + 80003dec: 01813b83 ld s7,24(sp) + 80003df0: 00000c13 li s8,0 + 80003df4: 00813a83 ld s5,8(sp) + 80003df8: 000c8913 mv s2,s9 + 80003dfc: 00000a13 li s4,0 + 80003e00: 00092023 sw zero,0(s2) + 80003e04: 000a8d93 mv s11,s5 + 80003e08: 000b8d13 mv s10,s7 + 80003e0c: 00000b13 li s6,0 + 80003e10: 000da583 lw a1,0(s11) # ffffffff80000000 <_end+0xfffffffeffff0000> + 80003e14: 000d2503 lw a0,0(s10) + 80003e18: 004d0d13 addi s10,s10,4 + 80003e1c: 009d8db3 add s11,s11,s1 + 80003e20: 2bd000ef jal ra,800048dc <__muldi3> + 80003e24: 01650b3b addw s6,a0,s6 + 80003e28: 01692023 sw s6,0(s2) + 80003e2c: ffa992e3 bne s3,s10,80003e10 + 80003e30: 001a0a1b addiw s4,s4,1 + 80003e34: 00490913 addi s2,s2,4 + 80003e38: 004a8a93 addi s5,s5,4 + 80003e3c: fc8a12e3 bne s4,s0,80003e00 + 80003e40: 001c0c1b addiw s8,s8,1 + 80003e44: 009b8bb3 add s7,s7,s1 + 80003e48: 009989b3 add s3,s3,s1 + 80003e4c: 009c8cb3 add s9,s9,s1 + 80003e50: fa8c12e3 bne s8,s0,80003df4 + 80003e54: 03813603 ld a2,56(sp) + 80003e58: 01813803 ld a6,24(sp) + 80003e5c: 02813503 ld a0,40(sp) + 80003e60: 00000593 li a1,0 + 80003e64: 00080713 mv a4,a6 + 80003e68: 00050793 mv a5,a0 + 80003e6c: 0007a683 lw a3,0(a5) + 80003e70: 00478793 addi a5,a5,4 + 80003e74: 00470713 addi a4,a4,4 + 80003e78: fed72e23 sw a3,-4(a4) + 80003e7c: fec798e3 bne a5,a2,80003e6c + 80003e80: 0015859b addiw a1,a1,1 + 80003e84: 00950533 add a0,a0,s1 + 80003e88: 00980833 add a6,a6,s1 + 80003e8c: 00960633 add a2,a2,s1 + 80003e90: fc859ae3 bne a1,s0,80003e64 + 80003e94: e3dff06f j 80003cd0 + 80003e98: 00241493 slli s1,s0,0x2 + 80003e9c: fff4039b addiw t2,s0,-1 + 80003ea0: dd9ff06f j 80003c78 + +0000000080003ea4 : + 80003ea4: 00004517 auipc a0,0x4 + 80003ea8: bbc52503 lw a0,-1092(a0) # 80007a60 + 80003eac: ff010113 addi sp,sp,-16 + 80003eb0: fff5059b addiw a1,a0,-1 + 80003eb4: 00813023 sd s0,0(sp) + 80003eb8: 00113423 sd ra,8(sp) + 80003ebc: 00058413 mv s0,a1 + 80003ec0: 21d000ef jal ra,800048dc <__muldi3> + 80003ec4: 00a4043b addw s0,s0,a0 + 80003ec8: 00241413 slli s0,s0,0x2 + 80003ecc: 00004517 auipc a0,0x4 + 80003ed0: ba453503 ld a0,-1116(a0) # 80007a70 + 80003ed4: 00850433 add s0,a0,s0 + 80003ed8: 00004797 auipc a5,0x4 + 80003edc: bf87b783 ld a5,-1032(a5) # 80007ad0 + 80003ee0: 00042503 lw a0,0(s0) + 80003ee4: 0187a783 lw a5,24(a5) + 80003ee8: 00813083 ld ra,8(sp) + 80003eec: 00013403 ld s0,0(sp) + 80003ef0: 40f50533 sub a0,a0,a5 + 80003ef4: 00153513 seqz a0,a0 + 80003ef8: 01010113 addi sp,sp,16 + 80003efc: 00008067 ret + +0000000080003f00 : + 80003f00: fd010113 addi sp,sp,-48 + 80003f04: 01413023 sd s4,0(sp) + 80003f08: 02113423 sd ra,40(sp) + 80003f0c: 02813023 sd s0,32(sp) + 80003f10: 00913c23 sd s1,24(sp) + 80003f14: 01213823 sd s2,16(sp) + 80003f18: 01313423 sd s3,8(sp) + 80003f1c: 00004797 auipc a5,0x4 + 80003f20: b647a783 lw a5,-1180(a5) # 80007a80 + 80003f24: 00100a13 li s4,1 + 80003f28: 04a78c63 beq a5,a0,80003f80 + 80003f2c: 00c5e433 or s0,a1,a2 + 80003f30: 00a46433 or s0,s0,a0 + 80003f34: fff44413 not s0,s0 + 80003f38: 00f47433 and s0,s0,a5 + 80003f3c: 00050493 mv s1,a0 + 80003f40: 00058993 mv s3,a1 + 80003f44: 00060913 mv s2,a2 + 80003f48: 00000a13 li s4,0 + 80003f4c: 02040a63 beqz s0,80003f80 + 80003f50: 408007bb negw a5,s0 + 80003f54: 00f477b3 and a5,s0,a5 + 80003f58: 0007851b sext.w a0,a5 + 80003f5c: 013565b3 or a1,a0,s3 + 80003f60: 00a96633 or a2,s2,a0 + 80003f64: 0015959b slliw a1,a1,0x1 + 80003f68: 0016561b srliw a2,a2,0x1 + 80003f6c: 00956533 or a0,a0,s1 + 80003f70: 40f4043b subw s0,s0,a5 + 80003f74: f8dff0ef jal ra,80003f00 + 80003f78: 01450a3b addw s4,a0,s4 + 80003f7c: fc041ae3 bnez s0,80003f50 + 80003f80: 02813083 ld ra,40(sp) + 80003f84: 02013403 ld s0,32(sp) + 80003f88: 01813483 ld s1,24(sp) + 80003f8c: 01013903 ld s2,16(sp) + 80003f90: 00813983 ld s3,8(sp) + 80003f94: 000a0513 mv a0,s4 + 80003f98: 00013a03 ld s4,0(sp) + 80003f9c: 03010113 addi sp,sp,48 + 80003fa0: 00008067 ret + +0000000080003fa4 : + 80003fa4: 00004797 auipc a5,0x4 + 80003fa8: b2c7b783 ld a5,-1236(a5) # 80007ad0 + 80003fac: 0007a703 lw a4,0(a5) + 80003fb0: 00004797 auipc a5,0x4 + 80003fb4: ac07aa23 sw zero,-1324(a5) # 80007a84 + 80003fb8: 00100793 li a5,1 + 80003fbc: 00e797bb sllw a5,a5,a4 + 80003fc0: fff7879b addiw a5,a5,-1 + 80003fc4: 00004717 auipc a4,0x4 + 80003fc8: aaf72e23 sw a5,-1348(a4) # 80007a80 + 80003fcc: 00008067 ret + +0000000080003fd0 : + 80003fd0: ff010113 addi sp,sp,-16 + 80003fd4: 00000613 li a2,0 + 80003fd8: 00000593 li a1,0 + 80003fdc: 00000513 li a0,0 + 80003fe0: 00113423 sd ra,8(sp) + 80003fe4: f1dff0ef jal ra,80003f00 + 80003fe8: 00813083 ld ra,8(sp) + 80003fec: 00004797 auipc a5,0x4 + 80003ff0: a8a7ac23 sw a0,-1384(a5) # 80007a84 + 80003ff4: 01010113 addi sp,sp,16 + 80003ff8: 00008067 ret + +0000000080003ffc : + 80003ffc: 00004797 auipc a5,0x4 + 80004000: ad47b783 ld a5,-1324(a5) # 80007ad0 + 80004004: 0187a503 lw a0,24(a5) + 80004008: 00004797 auipc a5,0x4 + 8000400c: a7c7a783 lw a5,-1412(a5) # 80007a84 + 80004010: 40f50533 sub a0,a0,a5 + 80004014: 00153513 seqz a0,a0 + 80004018: 00008067 ret + +000000008000401c : + 8000401c: fd010113 addi sp,sp,-48 + 80004020: 01213823 sd s2,16(sp) + 80004024: 01313423 sd s3,8(sp) + 80004028: 01413023 sd s4,0(sp) + 8000402c: 02113423 sd ra,40(sp) + 80004030: 02813023 sd s0,32(sp) + 80004034: 00913c23 sd s1,24(sp) + 80004038: 00060a13 mv s4,a2 + 8000403c: 00050993 mv s3,a0 + 80004040: 00850913 addi s2,a0,8 + 80004044: 0b45dc63 bge a1,s4,800040fc + 80004048: 00259793 slli a5,a1,0x2 + 8000404c: 00f98e33 add t3,s3,a5 + 80004050: 0015871b addiw a4,a1,1 + 80004054: 000e2303 lw t1,0(t3) + 80004058: ffea049b addiw s1,s4,-2 + 8000405c: 09475c63 bge a4,s4,800040f4 + 80004060: 40b4883b subw a6,s1,a1 + 80004064: 02081813 slli a6,a6,0x20 + 80004068: 02085813 srli a6,a6,0x20 + 8000406c: 00b80833 add a6,a6,a1 + 80004070: 00478793 addi a5,a5,4 + 80004074: 00281813 slli a6,a6,0x2 + 80004078: 00f987b3 add a5,s3,a5 + 8000407c: 01280833 add a6,a6,s2 + 80004080: 00058613 mv a2,a1 + 80004084: 0007a683 lw a3,0(a5) + 80004088: 0016041b addiw s0,a2,1 + 8000408c: 00241713 slli a4,s0,0x2 + 80004090: 0026051b addiw a0,a2,2 + 80004094: 00e98733 add a4,s3,a4 + 80004098: 0066dc63 bge a3,t1,800040b0 + 8000409c: 00072883 lw a7,0(a4) + 800040a0: 00d72023 sw a3,0(a4) + 800040a4: 00040613 mv a2,s0 + 800040a8: 0117a023 sw a7,0(a5) + 800040ac: 00050413 mv s0,a0 + 800040b0: 00478793 addi a5,a5,4 + 800040b4: fcf818e3 bne a6,a5,80004084 + 800040b8: 00261793 slli a5,a2,0x2 + 800040bc: 000e2683 lw a3,0(t3) + 800040c0: 00f987b3 add a5,s3,a5 + 800040c4: 0007a703 lw a4,0(a5) + 800040c8: 00d7a023 sw a3,0(a5) + 800040cc: 00098513 mv a0,s3 + 800040d0: 00ee2023 sw a4,0(t3) + 800040d4: f49ff0ef jal ra,8000401c + 800040d8: 03445263 bge s0,s4,800040fc + 800040dc: 00040593 mv a1,s0 + 800040e0: 00259793 slli a5,a1,0x2 + 800040e4: 00f98e33 add t3,s3,a5 + 800040e8: 0015871b addiw a4,a1,1 + 800040ec: 000e2303 lw t1,0(t3) + 800040f0: f74748e3 blt a4,s4,80004060 + 800040f4: 00058a13 mv s4,a1 + 800040f8: f545c8e3 blt a1,s4,80004048 + 800040fc: 02813083 ld ra,40(sp) + 80004100: 02013403 ld s0,32(sp) + 80004104: 01813483 ld s1,24(sp) + 80004108: 01013903 ld s2,16(sp) + 8000410c: 00813983 ld s3,8(sp) + 80004110: 00013a03 ld s4,0(sp) + 80004114: 03010113 addi sp,sp,48 + 80004118: 00008067 ret + +000000008000411c : + 8000411c: fd010113 addi sp,sp,-48 + 80004120: 00100513 li a0,1 + 80004124: 02113423 sd ra,40(sp) + 80004128: 01213823 sd s2,16(sp) + 8000412c: 01313423 sd s3,8(sp) + 80004130: 02813023 sd s0,32(sp) + 80004134: 00913c23 sd s1,24(sp) + 80004138: c7cfc0ef jal ra,800005b4 + 8000413c: 00004797 auipc a5,0x4 + 80004140: 9947b783 ld a5,-1644(a5) # 80007ad0 + 80004144: 0007a783 lw a5,0(a5) + 80004148: 00004917 auipc s2,0x4 + 8000414c: 94090913 addi s2,s2,-1728 # 80007a88 + 80004150: 00004997 auipc s3,0x4 + 80004154: 94098993 addi s3,s3,-1728 # 80007a90 + 80004158: 00279513 slli a0,a5,0x2 + 8000415c: 00f92023 sw a5,0(s2) + 80004160: bb8fc0ef jal ra,80000518 + 80004164: 00092783 lw a5,0(s2) + 80004168: 00a9b023 sd a0,0(s3) + 8000416c: 02f05e63 blez a5,800041a8 + 80004170: 00000493 li s1,0 + 80004174: c54fc0ef jal ra,800005c8 + 80004178: 0005041b sext.w s0,a0 + 8000417c: c4cfc0ef jal ra,800005c8 + 80004180: 0009b783 ld a5,0(s3) + 80004184: 00249693 slli a3,s1,0x2 + 80004188: 0104141b slliw s0,s0,0x10 + 8000418c: 00092703 lw a4,0(s2) + 80004190: 00d787b3 add a5,a5,a3 + 80004194: 00856433 or s0,a0,s0 + 80004198: 00148493 addi s1,s1,1 + 8000419c: 0087a023 sw s0,0(a5) + 800041a0: 0004879b sext.w a5,s1 + 800041a4: fce7c8e3 blt a5,a4,80004174 + 800041a8: 02813083 ld ra,40(sp) + 800041ac: 02013403 ld s0,32(sp) + 800041b0: 01813483 ld s1,24(sp) + 800041b4: 01013903 ld s2,16(sp) + 800041b8: 00813983 ld s3,8(sp) + 800041bc: 03010113 addi sp,sp,48 + 800041c0: 00008067 ret + +00000000800041c4 : + 800041c4: 00004617 auipc a2,0x4 + 800041c8: 8c462603 lw a2,-1852(a2) # 80007a88 + 800041cc: 00000593 li a1,0 + 800041d0: 00004517 auipc a0,0x4 + 800041d4: 8c053503 ld a0,-1856(a0) # 80007a90 + 800041d8: e45ff06f j 8000401c + +00000000800041dc : + 800041dc: 00004597 auipc a1,0x4 + 800041e0: 8ac5a583 lw a1,-1876(a1) # 80007a88 + 800041e4: 00004517 auipc a0,0x4 + 800041e8: 8ac53503 ld a0,-1876(a0) # 80007a90 + 800041ec: 00259593 slli a1,a1,0x2 + 800041f0: ff010113 addi sp,sp,-16 + 800041f4: 00b505b3 add a1,a0,a1 + 800041f8: 00113423 sd ra,8(sp) + 800041fc: c1cfc0ef jal ra,80000618 + 80004200: 00004797 auipc a5,0x4 + 80004204: 8d07b783 ld a5,-1840(a5) # 80007ad0 + 80004208: 0187a783 lw a5,24(a5) + 8000420c: 00813083 ld ra,8(sp) + 80004210: 0005051b sext.w a0,a0 + 80004214: 40a78533 sub a0,a5,a0 + 80004218: 00153513 seqz a0,a0 + 8000421c: 01010113 addi sp,sp,16 + 80004220: 00008067 ret + +0000000080004224 : + 80004224: 00004797 auipc a5,0x4 + 80004228: 8ac7b783 ld a5,-1876(a5) # 80007ad0 + 8000422c: 0007a783 lw a5,0(a5) + 80004230: fe010113 addi sp,sp,-32 + 80004234: 00913423 sd s1,8(sp) + 80004238: 00100513 li a0,1 + 8000423c: 00004497 auipc s1,0x4 + 80004240: 85c48493 addi s1,s1,-1956 # 80007a98 + 80004244: 00f4a023 sw a5,0(s1) + 80004248: 00113c23 sd ra,24(sp) + 8000424c: 01213023 sd s2,0(sp) + 80004250: 00813823 sd s0,16(sp) + 80004254: b60fc0ef jal ra,800005b4 + 80004258: 0004a503 lw a0,0(s1) + 8000425c: 00004917 auipc s2,0x4 + 80004260: 84c90913 addi s2,s2,-1972 # 80007aa8 + 80004264: ab4fc0ef jal ra,80000518 + 80004268: 0004a783 lw a5,0(s1) + 8000426c: 00a93023 sd a0,0(s2) + 80004270: 02f05463 blez a5,80004298 + 80004274: 00000413 li s0,0 + 80004278: b50fc0ef jal ra,800005c8 + 8000427c: 00093783 ld a5,0(s2) + 80004280: 0004a703 lw a4,0(s1) + 80004284: 008787b3 add a5,a5,s0 + 80004288: 00140413 addi s0,s0,1 + 8000428c: 00a78023 sb a0,0(a5) + 80004290: 0004079b sext.w a5,s0 + 80004294: fee7c2e3 blt a5,a4,80004278 + 80004298: 01000513 li a0,16 + 8000429c: a7cfc0ef jal ra,80000518 + 800042a0: 01813083 ld ra,24(sp) + 800042a4: 01013403 ld s0,16(sp) + 800042a8: 00003797 auipc a5,0x3 + 800042ac: 7ea7bc23 sd a0,2040(a5) # 80007aa0 + 800042b0: 00813483 ld s1,8(sp) + 800042b4: 00013903 ld s2,0(sp) + 800042b8: 02010113 addi sp,sp,32 + 800042bc: 00008067 ret + +00000000800042c0 : + 800042c0: 00003697 auipc a3,0x3 + 800042c4: 7d86a683 lw a3,2008(a3) # 80007a98 + 800042c8: f6010113 addi sp,sp,-160 + 800042cc: 00168793 addi a5,a3,1 + 800042d0: 00003f97 auipc t6,0x3 + 800042d4: 7d8fbf83 ld t6,2008(t6) # 80007aa8 + 800042d8: 08813c23 sd s0,152(sp) + 800042dc: 08913823 sd s1,144(sp) + 800042e0: 09213423 sd s2,136(sp) + 800042e4: 09313023 sd s3,128(sp) + 800042e8: 07413c23 sd s4,120(sp) + 800042ec: 07513823 sd s5,112(sp) + 800042f0: 07613423 sd s6,104(sp) + 800042f4: 07713023 sd s7,96(sp) + 800042f8: 05813c23 sd s8,88(sp) + 800042fc: 05913823 sd s9,80(sp) + 80004300: 05a13423 sd s10,72(sp) + 80004304: 05b13023 sd s11,64(sp) + 80004308: 03f7f513 andi a0,a5,63 + 8000430c: 03800593 li a1,56 + 80004310: 00003717 auipc a4,0x3 + 80004314: 79073703 ld a4,1936(a4) # 80007aa0 + 80004318: 00df8633 add a2,t6,a3 + 8000431c: 00078f13 mv t5,a5 + 80004320: 2eb50863 beq a0,a1,80004610 + 80004324: 03800513 li a0,56 + 80004328: 001f0f13 addi t5,t5,1 + 8000432c: 03ff7593 andi a1,t5,63 + 80004330: fea59ce3 bne a1,a0,80004328 + 80004334: f8000593 li a1,-128 + 80004338: 00b60023 sb a1,0(a2) + 8000433c: 2de7fe63 bgeu a5,t5,80004618 + 80004340: 00ff87b3 add a5,t6,a5 + 80004344: 01ef8633 add a2,t6,t5 + 80004348: 00078023 sb zero,0(a5) + 8000434c: 00178793 addi a5,a5,1 + 80004350: fef61ce3 bne a2,a5,80004348 + 80004354: 0036951b slliw a0,a3,0x3 + 80004358: 41d6d593 srai a1,a3,0x1d + 8000435c: 0185581b srliw a6,a0,0x18 + 80004360: 0085531b srliw t1,a0,0x8 + 80004364: 0105589b srliw a7,a0,0x10 + 80004368: 004f0793 addi a5,t5,4 + 8000436c: 00a60023 sb a0,0(a2) + 80004370: 010601a3 sb a6,3(a2) + 80004374: 006600a3 sb t1,1(a2) + 80004378: 01160123 sb a7,2(a2) + 8000437c: 00ff87b3 add a5,t6,a5 + 80004380: 0085d51b srliw a0,a1,0x8 + 80004384: 0105d61b srliw a2,a1,0x10 + 80004388: 0185d59b srliw a1,a1,0x18 + 8000438c: 01d6d693 srli a3,a3,0x1d + 80004390: 00a780a3 sb a0,1(a5) + 80004394: 00c78123 sb a2,2(a5) + 80004398: 00b781a3 sb a1,3(a5) + 8000439c: 10325637 lui a2,0x10325 + 800043a0: 98bae5b7 lui a1,0x98bae + 800043a4: efcdb537 lui a0,0xefcdb + 800043a8: 67452837 lui a6,0x67452 + 800043ac: d76aa3b7 lui t2,0xd76aa + 800043b0: 00d78023 sb a3,0(a5) + 800043b4: 47660613 addi a2,a2,1142 # 10325476 <_entry_offset+0x10325476> + 800043b8: cfe58593 addi a1,a1,-770 # ffffffff98badcfe <_end+0xffffffff18b9dcfe> + 800043bc: b8950513 addi a0,a0,-1143 # ffffffffefcdab89 <_end+0xffffffff6fccab89> + 800043c0: 30180813 addi a6,a6,769 # 67452301 <_entry_offset+0x67452301> + 800043c4: 00000293 li t0,0 + 800043c8: 47838393 addi t2,t2,1144 # ffffffffd76aa478 <_end+0xffffffff5769a478> + 800043cc: 00f00c13 li s8,15 + 800043d0: 01f00b93 li s7,31 + 800043d4: 02f00b13 li s6,47 + 800043d8: 03f00a93 li s5,63 + 800043dc: 005f87b3 add a5,t6,t0 + 800043e0: 00010e13 mv t3,sp + 800043e4: 0017c303 lbu t1,1(a5) + 800043e8: 0007ce83 lbu t4,0(a5) + 800043ec: 0027c883 lbu a7,2(a5) + 800043f0: 0037c683 lbu a3,3(a5) + 800043f4: 00831313 slli t1,t1,0x8 + 800043f8: 01d36333 or t1,t1,t4 + 800043fc: 01089893 slli a7,a7,0x10 + 80004400: 0068e8b3 or a7,a7,t1 + 80004404: 01869693 slli a3,a3,0x18 + 80004408: 0116e6b3 or a3,a3,a7 + 8000440c: 00de2023 sw a3,0(t3) + 80004410: 004e0e13 addi t3,t3,4 + 80004414: 04010693 addi a3,sp,64 + 80004418: 00478793 addi a5,a5,4 + 8000441c: fdc694e3 bne a3,t3,800043e4 + 80004420: 00080793 mv a5,a6 + 80004424: 00038d13 mv s10,t2 + 80004428: 00000e93 li t4,0 + 8000442c: 00002a17 auipc s4,0x2 + 80004430: 4d8a0a13 addi s4,s4,1240 # 80006904 + 80004434: 00002997 auipc s3,0x2 + 80004438: 5d098993 addi s3,s3,1488 # 80006a04 + 8000443c: 00050893 mv a7,a0 + 80004440: 00060e13 mv t3,a2 + 80004444: 00058313 mv t1,a1 + 80004448: 00100913 li s2,1 + 8000444c: 00500493 li s1,5 + 80004450: 00000413 li s0,0 + 80004454: 00700c93 li s9,7 + 80004458: 01a78d3b addw s10,a5,s10 + 8000445c: 09dc7263 bgeu s8,t4,800044e0 + 80004460: 011347b3 xor a5,t1,a7 + 80004464: 01c7f7b3 and a5,a5,t3 + 80004468: 00f347b3 xor a5,t1,a5 + 8000446c: 09dbe663 bltu s7,t4,800044f8 + 80004470: 0007879b sext.w a5,a5 + 80004474: 00f97693 andi a3,s2,15 + 80004478: 02069693 slli a3,a3,0x20 + 8000447c: 01e6d693 srli a3,a3,0x1e + 80004480: 04010d93 addi s11,sp,64 + 80004484: 00dd86b3 add a3,s11,a3 + 80004488: fc06a683 lw a3,-64(a3) + 8000448c: 01a787bb addw a5,a5,s10 + 80004490: 41900d3b negw s10,s9 + 80004494: 00d787bb addw a5,a5,a3 + 80004498: 019796bb sllw a3,a5,s9 + 8000449c: 01a7d7bb srlw a5,a5,s10 + 800044a0: 00f6e6b3 or a3,a3,a5 + 800044a4: 011686bb addw a3,a3,a7 + 800044a8: 000a2d03 lw s10,0(s4) + 800044ac: 000e0793 mv a5,t3 + 800044b0: 001e8e9b addiw t4,t4,1 + 800044b4: 0009ac83 lw s9,0(s3) + 800044b8: 00030e13 mv t3,t1 + 800044bc: 004a0a13 addi s4,s4,4 + 800044c0: 00088313 mv t1,a7 + 800044c4: 00498993 addi s3,s3,4 + 800044c8: 0074041b addiw s0,s0,7 + 800044cc: 0034849b addiw s1,s1,3 + 800044d0: 0059091b addiw s2,s2,5 + 800044d4: 00068893 mv a7,a3 + 800044d8: 01a78d3b addw s10,a5,s10 + 800044dc: f9dc62e3 bltu s8,t4,80004460 + 800044e0: 01c347b3 xor a5,t1,t3 + 800044e4: 0117f7b3 and a5,a5,a7 + 800044e8: 00fe47b3 xor a5,t3,a5 + 800044ec: 0007879b sext.w a5,a5 + 800044f0: 000e8693 mv a3,t4 + 800044f4: f85ff06f j 80004478 + 800044f8: 01c347b3 xor a5,t1,t3 + 800044fc: 0117c7b3 xor a5,a5,a7 + 80004500: 01db6863 bltu s6,t4,80004510 + 80004504: 0007879b sext.w a5,a5 + 80004508: 00f4f693 andi a3,s1,15 + 8000450c: f6dff06f j 80004478 + 80004510: 00f47793 andi a5,s0,15 + 80004514: 04010693 addi a3,sp,64 + 80004518: 00279793 slli a5,a5,0x2 + 8000451c: 00f687b3 add a5,a3,a5 + 80004520: fc07a783 lw a5,-64(a5) + 80004524: fffe4693 not a3,t3 + 80004528: 0116e6b3 or a3,a3,a7 + 8000452c: 0066c6b3 xor a3,a3,t1 + 80004530: 00d787bb addw a5,a5,a3 + 80004534: 01a787bb addw a5,a5,s10 + 80004538: 41900d3b negw s10,s9 + 8000453c: 019796bb sllw a3,a5,s9 + 80004540: 01a7d7bb srlw a5,a5,s10 + 80004544: 00f6e6b3 or a3,a3,a5 + 80004548: 011686bb addw a3,a3,a7 + 8000454c: f55e9ee3 bne t4,s5,800044a8 + 80004550: 04028293 addi t0,t0,64 + 80004554: 010e083b addw a6,t3,a6 + 80004558: 00a6853b addw a0,a3,a0 + 8000455c: 00b885bb addw a1,a7,a1 + 80004560: 00c3063b addw a2,t1,a2 + 80004564: e7e2ece3 bltu t0,t5,800043dc + 80004568: 0088549b srliw s1,a6,0x8 + 8000456c: 0108541b srliw s0,a6,0x10 + 80004570: 0188539b srliw t2,a6,0x18 + 80004574: 0085529b srliw t0,a0,0x8 + 80004578: 01055f9b srliw t6,a0,0x10 + 8000457c: 01855f1b srliw t5,a0,0x18 + 80004580: 0085de9b srliw t4,a1,0x8 + 80004584: 0105de1b srliw t3,a1,0x10 + 80004588: 0185d31b srliw t1,a1,0x18 + 8000458c: 0086589b srliw a7,a2,0x8 + 80004590: 0106569b srliw a3,a2,0x10 + 80004594: 0186579b srliw a5,a2,0x18 + 80004598: 01070023 sb a6,0(a4) + 8000459c: 009700a3 sb s1,1(a4) + 800045a0: 00870123 sb s0,2(a4) + 800045a4: 007701a3 sb t2,3(a4) + 800045a8: 00a70223 sb a0,4(a4) + 800045ac: 005702a3 sb t0,5(a4) + 800045b0: 01f70323 sb t6,6(a4) + 800045b4: 01e703a3 sb t5,7(a4) + 800045b8: 00b70423 sb a1,8(a4) + 800045bc: 01d704a3 sb t4,9(a4) + 800045c0: 01c70523 sb t3,10(a4) + 800045c4: 006705a3 sb t1,11(a4) + 800045c8: 00c70623 sb a2,12(a4) + 800045cc: 011706a3 sb a7,13(a4) + 800045d0: 00d70723 sb a3,14(a4) + 800045d4: 00f707a3 sb a5,15(a4) + 800045d8: 09813403 ld s0,152(sp) + 800045dc: 09013483 ld s1,144(sp) + 800045e0: 08813903 ld s2,136(sp) + 800045e4: 08013983 ld s3,128(sp) + 800045e8: 07813a03 ld s4,120(sp) + 800045ec: 07013a83 ld s5,112(sp) + 800045f0: 06813b03 ld s6,104(sp) + 800045f4: 06013b83 ld s7,96(sp) + 800045f8: 05813c03 ld s8,88(sp) + 800045fc: 05013c83 ld s9,80(sp) + 80004600: 04813d03 ld s10,72(sp) + 80004604: 04013d83 ld s11,64(sp) + 80004608: 0a010113 addi sp,sp,160 + 8000460c: 00008067 ret + 80004610: f8000793 li a5,-128 + 80004614: 00f60023 sb a5,0(a2) + 80004618: 01ef8633 add a2,t6,t5 + 8000461c: d39ff06f j 80004354 + +0000000080004620 : + 80004620: 00003517 auipc a0,0x3 + 80004624: 48053503 ld a0,1152(a0) # 80007aa0 + 80004628: ff010113 addi sp,sp,-16 + 8000462c: 01050593 addi a1,a0,16 + 80004630: 00113423 sd ra,8(sp) + 80004634: fe5fb0ef jal ra,80000618 + 80004638: 00003797 auipc a5,0x3 + 8000463c: 4987b783 ld a5,1176(a5) # 80007ad0 + 80004640: 0187a783 lw a5,24(a5) + 80004644: 00813083 ld ra,8(sp) + 80004648: 0005051b sext.w a0,a0 + 8000464c: 40a78533 sub a0,a5,a0 + 80004650: 00153513 seqz a0,a0 + 80004654: 01010113 addi sp,sp,16 + 80004658: 00008067 ret + +000000008000465c : + 8000465c: 00003797 auipc a5,0x3 + 80004660: 4747b783 ld a5,1140(a5) # 80007ad0 + 80004664: 0007a783 lw a5,0(a5) + 80004668: ff010113 addi sp,sp,-16 + 8000466c: 00813023 sd s0,0(sp) + 80004670: 41f7d51b sraiw a0,a5,0x1f + 80004674: 01d5551b srliw a0,a0,0x1d + 80004678: 00f5053b addw a0,a0,a5 + 8000467c: 4035551b sraiw a0,a0,0x3 + 80004680: 00003417 auipc s0,0x3 + 80004684: 43040413 addi s0,s0,1072 # 80007ab0 + 80004688: 0805051b addiw a0,a0,128 + 8000468c: 00f42023 sw a5,0(s0) + 80004690: 00113423 sd ra,8(sp) + 80004694: e85fb0ef jal ra,80000518 + 80004698: 00042783 lw a5,0(s0) + 8000469c: 00003717 auipc a4,0x3 + 800046a0: 40a73e23 sd a0,1052(a4) # 80007ab8 + 800046a4: fe100693 li a3,-31 + 800046a8: 41f7d71b sraiw a4,a5,0x1f + 800046ac: 01b7571b srliw a4,a4,0x1b + 800046b0: 00f7073b addw a4,a4,a5 + 800046b4: 02d7c063 blt a5,a3,800046d4 + 800046b8: 4057571b sraiw a4,a4,0x5 + 800046bc: 00000793 li a5,0 + 800046c0: fff00693 li a3,-1 + 800046c4: 00d52023 sw a3,0(a0) + 800046c8: 0017879b addiw a5,a5,1 + 800046cc: 00450513 addi a0,a0,4 + 800046d0: fef75ae3 bge a4,a5,800046c4 + 800046d4: 00813083 ld ra,8(sp) + 800046d8: 00013403 ld s0,0(sp) + 800046dc: 01010113 addi sp,sp,16 + 800046e0: 00008067 ret + +00000000800046e4 : + 800046e4: fd010113 addi sp,sp,-48 + 800046e8: 00913c23 sd s1,24(sp) + 800046ec: 02113423 sd ra,40(sp) + 800046f0: 02813023 sd s0,32(sp) + 800046f4: 01213823 sd s2,16(sp) + 800046f8: 01313423 sd s3,8(sp) + 800046fc: 00003497 auipc s1,0x3 + 80004700: 3b44a483 lw s1,948(s1) # 80007ab0 + 80004704: 14905463 blez s1,8000484c + 80004708: 00003617 auipc a2,0x3 + 8000470c: 3b060613 addi a2,a2,944 # 80007ab8 + 80004710: 00063683 ld a3,0(a2) + 80004714: 0006a783 lw a5,0(a3) + 80004718: 0017d79b srliw a5,a5,0x1 + 8000471c: 0017f793 andi a5,a5,1 + 80004720: 00079c63 bnez a5,80004738 + 80004724: 10c0006f j 80004830 + 80004728: 00072703 lw a4,0(a4) + 8000472c: 00f7573b srlw a4,a4,a5 + 80004730: 00177713 andi a4,a4,1 + 80004734: 0e070e63 beqz a4,80004830 + 80004738: 0017879b addiw a5,a5,1 + 8000473c: 4057d71b sraiw a4,a5,0x5 + 80004740: 00271713 slli a4,a4,0x2 + 80004744: 00e68733 add a4,a3,a4 + 80004748: fef4d0e3 bge s1,a5,80004728 + 8000474c: 00300793 li a5,3 + 80004750: 0e97de63 bge a5,s1,8000484c + 80004754: 00063903 ld s2,0(a2) + 80004758: 00200413 li s0,2 + 8000475c: 00100993 li s3,1 + 80004760: 01c0006f j 8000477c + 80004764: 0014041b addiw s0,s0,1 + 80004768: 00040593 mv a1,s0 + 8000476c: 00040513 mv a0,s0 + 80004770: 16c000ef jal ra,800048dc <__muldi3> + 80004774: 0005051b sext.w a0,a0 + 80004778: 06a4c663 blt s1,a0,800047e4 + 8000477c: 40545793 srai a5,s0,0x5 + 80004780: 00279793 slli a5,a5,0x2 + 80004784: 00f907b3 add a5,s2,a5 + 80004788: 0007a783 lw a5,0(a5) + 8000478c: 0087d7bb srlw a5,a5,s0 + 80004790: 0017f793 andi a5,a5,1 + 80004794: fc0788e3 beqz a5,80004764 + 80004798: 0014169b slliw a3,s0,0x1 + 8000479c: fcd4c4e3 blt s1,a3,80004764 + 800047a0: 4056d713 srai a4,a3,0x5 + 800047a4: 00271713 slli a4,a4,0x2 + 800047a8: 00e90733 add a4,s2,a4 + 800047ac: 00072603 lw a2,0(a4) + 800047b0: 01f6f793 andi a5,a3,31 + 800047b4: 00f997b3 sll a5,s3,a5 + 800047b8: fff7c793 not a5,a5 + 800047bc: 00c7f7b3 and a5,a5,a2 + 800047c0: 00f72023 sw a5,0(a4) + 800047c4: 00d406bb addw a3,s0,a3 + 800047c8: fcd4dce3 bge s1,a3,800047a0 + 800047cc: 0014041b addiw s0,s0,1 + 800047d0: 00040593 mv a1,s0 + 800047d4: 00040513 mv a0,s0 + 800047d8: 104000ef jal ra,800048dc <__muldi3> + 800047dc: 0005051b sext.w a0,a0 + 800047e0: f8a4dee3 bge s1,a0,8000477c + 800047e4: 00003797 auipc a5,0x3 + 800047e8: 2c07a823 sw zero,720(a5) # 80007ab4 + 800047ec: 00000613 li a2,0 + 800047f0: 00000693 li a3,0 + 800047f4: 00200713 li a4,2 + 800047f8: 40575793 srai a5,a4,0x5 + 800047fc: 00279793 slli a5,a5,0x2 + 80004800: 00f907b3 add a5,s2,a5 + 80004804: 0007a783 lw a5,0(a5) + 80004808: 00e7d7bb srlw a5,a5,a4 + 8000480c: 0017f793 andi a5,a5,1 + 80004810: 0017071b addiw a4,a4,1 + 80004814: 00078663 beqz a5,80004820 + 80004818: 0016869b addiw a3,a3,1 + 8000481c: 00100613 li a2,1 + 80004820: fce4dce3 bge s1,a4,800047f8 + 80004824: 00060663 beqz a2,80004830 + 80004828: 00003797 auipc a5,0x3 + 8000482c: 28d7a623 sw a3,652(a5) # 80007ab4 + 80004830: 02813083 ld ra,40(sp) + 80004834: 02013403 ld s0,32(sp) + 80004838: 01813483 ld s1,24(sp) + 8000483c: 01013903 ld s2,16(sp) + 80004840: 00813983 ld s3,8(sp) + 80004844: 03010113 addi sp,sp,48 + 80004848: 00008067 ret + 8000484c: 00003797 auipc a5,0x3 + 80004850: 2607a423 sw zero,616(a5) # 80007ab4 + 80004854: 00100793 li a5,1 + 80004858: fc97dce3 bge a5,s1,80004830 + 8000485c: 00003917 auipc s2,0x3 + 80004860: 25c93903 ld s2,604(s2) # 80007ab8 + 80004864: f89ff06f j 800047ec + +0000000080004868 : + 80004868: 00003797 auipc a5,0x3 + 8000486c: 2687b783 ld a5,616(a5) # 80007ad0 + 80004870: 0187a503 lw a0,24(a5) + 80004874: 00003797 auipc a5,0x3 + 80004878: 2407a783 lw a5,576(a5) # 80007ab4 + 8000487c: 40f50533 sub a0,a0,a5 + 80004880: 00153513 seqz a0,a0 + 80004884: 00008067 ret + +0000000080004888 : + 80004888: 00050513 mv a0,a0 + 8000488c: 0000007b 0x7b + 80004890: 00008067 ret + +0000000080004894 : + 80004894: 00050513 mv a0,a0 + 80004898: 0000006b 0x6b + 8000489c: 0000006f j 8000489c + +00000000800048a0 <_assert>: + 800048a0: 00051a63 bnez a0,800048b4 <_assert+0x14> + 800048a4: 00100793 li a5,1 + 800048a8: 00078513 mv a0,a5 + 800048ac: 0000006b 0x6b + 800048b0: 0000006f j 800048b0 <_assert+0x10> + 800048b4: 00008067 ret + +00000000800048b8 <_trm_init>: + 800048b8: ff010113 addi sp,sp,-16 + 800048bc: 00113423 sd ra,8(sp) + 800048c0: 5b8000ef jal ra,80004e78 + 800048c4: 00002517 auipc a0,0x2 + 800048c8: 51c50513 addi a0,a0,1308 # 80006de0 + 800048cc: 831fb0ef jal ra,800000fc
+ 800048d0: 00050513 mv a0,a0 + 800048d4: 0000006b 0x6b + 800048d8: 0000006f j 800048d8 <_trm_init+0x20> + +00000000800048dc <__muldi3>: + 800048dc: 00050613 mv a2,a0 + 800048e0: 00000513 li a0,0 + 800048e4: 0015f693 andi a3,a1,1 + 800048e8: 00068463 beqz a3,800048f0 <__muldi3+0x14> + 800048ec: 00c50533 add a0,a0,a2 + 800048f0: 0015d593 srli a1,a1,0x1 + 800048f4: 00161613 slli a2,a2,0x1 + 800048f8: fe0596e3 bnez a1,800048e4 <__muldi3+0x8> + 800048fc: 00008067 ret + +0000000080004900 <__udivsi3>: + 80004900: 02051513 slli a0,a0,0x20 + 80004904: 02059593 slli a1,a1,0x20 + 80004908: 00008293 mv t0,ra + 8000490c: 03c000ef jal ra,80004948 <__udivdi3> + 80004910: 0005051b sext.w a0,a0 + 80004914: 00028067 jr t0 + +0000000080004918 <__umodsi3>: + 80004918: 02051513 slli a0,a0,0x20 + 8000491c: 02059593 slli a1,a1,0x20 + 80004920: 02055513 srli a0,a0,0x20 + 80004924: 0205d593 srli a1,a1,0x20 + 80004928: 00008293 mv t0,ra + 8000492c: 01c000ef jal ra,80004948 <__udivdi3> + 80004930: 0005851b sext.w a0,a1 + 80004934: 00028067 jr t0 + +0000000080004938 <__divsi3>: + 80004938: fff00293 li t0,-1 + 8000493c: 0a558c63 beq a1,t0,800049f4 <__moddi3+0x30> + +0000000080004940 <__divdi3>: + 80004940: 06054063 bltz a0,800049a0 <__umoddi3+0x10> + 80004944: 0605c663 bltz a1,800049b0 <__umoddi3+0x20> + +0000000080004948 <__udivdi3>: + 80004948: 00058613 mv a2,a1 + 8000494c: 00050593 mv a1,a0 + 80004950: fff00513 li a0,-1 + 80004954: 02060c63 beqz a2,8000498c <__udivdi3+0x44> + 80004958: 00100693 li a3,1 + 8000495c: 00b67a63 bgeu a2,a1,80004970 <__udivdi3+0x28> + 80004960: 00c05863 blez a2,80004970 <__udivdi3+0x28> + 80004964: 00161613 slli a2,a2,0x1 + 80004968: 00169693 slli a3,a3,0x1 + 8000496c: feb66ae3 bltu a2,a1,80004960 <__udivdi3+0x18> + 80004970: 00000513 li a0,0 + 80004974: 00c5e663 bltu a1,a2,80004980 <__udivdi3+0x38> + 80004978: 40c585b3 sub a1,a1,a2 + 8000497c: 00d56533 or a0,a0,a3 + 80004980: 0016d693 srli a3,a3,0x1 + 80004984: 00165613 srli a2,a2,0x1 + 80004988: fe0696e3 bnez a3,80004974 <__udivdi3+0x2c> + 8000498c: 00008067 ret + +0000000080004990 <__umoddi3>: + 80004990: 00008293 mv t0,ra + 80004994: fb5ff0ef jal ra,80004948 <__udivdi3> + 80004998: 00058513 mv a0,a1 + 8000499c: 00028067 jr t0 + 800049a0: 40a00533 neg a0,a0 + 800049a4: 00b04863 bgtz a1,800049b4 <__umoddi3+0x24> + 800049a8: 40b005b3 neg a1,a1 + 800049ac: f9dff06f j 80004948 <__udivdi3> + 800049b0: 40b005b3 neg a1,a1 + 800049b4: 00008293 mv t0,ra + 800049b8: f91ff0ef jal ra,80004948 <__udivdi3> + 800049bc: 40a00533 neg a0,a0 + 800049c0: 00028067 jr t0 + +00000000800049c4 <__moddi3>: + 800049c4: 00008293 mv t0,ra + 800049c8: 0005ca63 bltz a1,800049dc <__moddi3+0x18> + 800049cc: 00054c63 bltz a0,800049e4 <__moddi3+0x20> + 800049d0: f79ff0ef jal ra,80004948 <__udivdi3> + 800049d4: 00058513 mv a0,a1 + 800049d8: 00028067 jr t0 + 800049dc: 40b005b3 neg a1,a1 + 800049e0: fe0558e3 bgez a0,800049d0 <__moddi3+0xc> + 800049e4: 40a00533 neg a0,a0 + 800049e8: f61ff0ef jal ra,80004948 <__udivdi3> + 800049ec: 40b00533 neg a0,a1 + 800049f0: 00028067 jr t0 + 800049f4: 01f29293 slli t0,t0,0x1f + 800049f8: f45514e3 bne a0,t0,80004940 <__divdi3> + 800049fc: 00008067 ret + +0000000080004a00 <__am_timer_config>: + 80004a00: 00100793 li a5,1 + 80004a04: 00f50023 sb a5,0(a0) + 80004a08: 00f500a3 sb a5,1(a0) + 80004a0c: 00008067 ret + +0000000080004a10 <__am_input_config>: + 80004a10: 00100793 li a5,1 + 80004a14: 00f50023 sb a5,0(a0) + 80004a18: 00008067 ret + +0000000080004a1c : + 80004a1c: ff010113 addi sp,sp,-16 + 80004a20: 00813023 sd s0,0(sp) + 80004a24: 00113423 sd ra,8(sp) + 80004a28: 00002417 auipc s0,0x2 + 80004a2c: 0d840413 addi s0,s0,216 # 80006b00 + 80004a30: 04100513 li a0,65 + 80004a34: 00140413 addi s0,s0,1 + 80004a38: e51ff0ef jal ra,80004888 + 80004a3c: 00044503 lbu a0,0(s0) + 80004a40: fe051ae3 bnez a0,80004a34 + 80004a44: 00002417 auipc s0,0x2 + 80004a48: 0cc40413 addi s0,s0,204 # 80006b10 + 80004a4c: 06100513 li a0,97 + 80004a50: 00140413 addi s0,s0,1 + 80004a54: e35ff0ef jal ra,80004888 + 80004a58: 00044503 lbu a0,0(s0) + 80004a5c: fe051ae3 bnez a0,80004a50 + 80004a60: 00002417 auipc s0,0x2 + 80004a64: 0d040413 addi s0,s0,208 # 80006b30 + 80004a68: 02000513 li a0,32 + 80004a6c: 00140413 addi s0,s0,1 + 80004a70: e19ff0ef jal ra,80004888 + 80004a74: 00044503 lbu a0,0(s0) + 80004a78: fe051ae3 bnez a0,80004a6c + 80004a7c: 00100513 li a0,1 + 80004a80: e15ff0ef jal ra,80004894 + +0000000080004a84 : + 80004a84: ff010113 addi sp,sp,-16 + 80004a88: 00113423 sd ra,8(sp) + 80004a8c: 00003797 auipc a5,0x3 + 80004a90: b0c78793 addi a5,a5,-1268 # 80007598 + 80004a94: 00003697 auipc a3,0x3 + 80004a98: f0468693 addi a3,a3,-252 # 80007998 + 80004a9c: 00000617 auipc a2,0x0 + 80004aa0: f8060613 addi a2,a2,-128 # 80004a1c + 80004aa4: 00c0006f j 80004ab0 + 80004aa8: 00878793 addi a5,a5,8 + 80004aac: 00d78c63 beq a5,a3,80004ac4 + 80004ab0: 0007b703 ld a4,0(a5) + 80004ab4: fe071ae3 bnez a4,80004aa8 + 80004ab8: 00c7b023 sd a2,0(a5) + 80004abc: 00878793 addi a5,a5,8 + 80004ac0: fed798e3 bne a5,a3,80004ab0 + 80004ac4: 030000ef jal ra,80004af4 <__am_timer_init> + 80004ac8: 00813083 ld ra,8(sp) + 80004acc: 00100513 li a0,1 + 80004ad0: 01010113 addi sp,sp,16 + 80004ad4: 00008067 ret + +0000000080004ad8 : + 80004ad8: 00351793 slli a5,a0,0x3 + 80004adc: 00003517 auipc a0,0x3 + 80004ae0: abc50513 addi a0,a0,-1348 # 80007598 + 80004ae4: 00f50533 add a0,a0,a5 + 80004ae8: 00053303 ld t1,0(a0) + 80004aec: 00058513 mv a0,a1 + 80004af0: 00030067 jr t1 + +0000000080004af4 <__am_timer_init>: + 80004af4: 00008067 ret + +0000000080004af8 <__am_timer_uptime>: + 80004af8: fd010113 addi sp,sp,-48 + 80004afc: 00913c23 sd s1,24(sp) + 80004b00: 02113423 sd ra,40(sp) + 80004b04: 02813023 sd s0,32(sp) + 80004b08: 01213823 sd s2,16(sp) + 80004b0c: 01313423 sd s3,8(sp) + 80004b10: 00050493 mv s1,a0 + 80004b14: b0002973 csrr s2,mcycle + 80004b18: 000f49b7 lui s3,0xf4 + 80004b1c: 24098593 addi a1,s3,576 # f4240 <_entry_offset+0xf4240> + 80004b20: 00090513 mv a0,s2 + 80004b24: e25ff0ef jal ra,80004948 <__udivdi3> + 80004b28: 00551413 slli s0,a0,0x5 + 80004b2c: 40a407b3 sub a5,s0,a0 + 80004b30: 00679413 slli s0,a5,0x6 + 80004b34: 40f40433 sub s0,s0,a5 + 80004b38: 00341413 slli s0,s0,0x3 + 80004b3c: 00a40433 add s0,s0,a0 + 80004b40: 24098593 addi a1,s3,576 + 80004b44: 00090513 mv a0,s2 + 80004b48: e49ff0ef jal ra,80004990 <__umoddi3> + 80004b4c: 00641413 slli s0,s0,0x6 + 80004b50: 00a40433 add s0,s0,a0 + 80004b54: 0084b023 sd s0,0(s1) + 80004b58: 02813083 ld ra,40(sp) + 80004b5c: 02013403 ld s0,32(sp) + 80004b60: 01813483 ld s1,24(sp) + 80004b64: 01013903 ld s2,16(sp) + 80004b68: 00813983 ld s3,8(sp) + 80004b6c: 03010113 addi sp,sp,48 + 80004b70: 00008067 ret + +0000000080004b74 : + 80004b74: fc010113 addi sp,sp,-64 + 80004b78: 01313c23 sd s3,24(sp) + 80004b7c: 00058993 mv s3,a1 + 80004b80: 00050793 mv a5,a0 + 80004b84: 03800613 li a2,56 + 80004b88: 00000593 li a1,0 + 80004b8c: 00098513 mv a0,s3 + 80004b90: 02813823 sd s0,48(sp) + 80004b94: 03213023 sd s2,32(sp) + 80004b98: 0007b403 ld s0,0(a5) + 80004b9c: 01413823 sd s4,16(sp) + 80004ba0: 02113c23 sd ra,56(sp) + 80004ba4: 02913423 sd s1,40(sp) + 80004ba8: 01513423 sd s5,8(sp) + 80004bac: 434010ef jal ra,80005fe0 + 80004bb0: 7b200793 li a5,1970 + 80004bb4: 00f9aa23 sw a5,20(s3) + 80004bb8: 7b200913 li s2,1970 + 80004bbc: 00002a17 auipc s4,0x2 + 80004bc0: 22ca0a13 addi s4,s4,556 # 80006de8 + 80004bc4: 0100006f j 80004bd4 + 80004bc8: 40e40433 sub s0,s0,a4 + 80004bcc: 00d9aa23 sw a3,20(s3) + 80004bd0: 00068913 mv s2,a3 + 80004bd4: 0009049b sext.w s1,s2 + 80004bd8: 06400593 li a1,100 + 80004bdc: 00048513 mv a0,s1 + 80004be0: de5ff0ef jal ra,800049c4 <__moddi3> + 80004be4: 00050793 mv a5,a0 + 80004be8: 0007879b sext.w a5,a5 + 80004bec: 00048513 mv a0,s1 + 80004bf0: 00397493 andi s1,s2,3 + 80004bf4: 19000593 li a1,400 + 80004bf8: 0014b493 seqz s1,s1 + 80004bfc: 00079863 bnez a5,80004c0c + 80004c00: dc5ff0ef jal ra,800049c4 <__moddi3> + 80004c04: 0005049b sext.w s1,a0 + 80004c08: 0014b493 seqz s1,s1 + 80004c0c: 00249793 slli a5,s1,0x2 + 80004c10: 00fa07b3 add a5,s4,a5 + 80004c14: 0007e703 lwu a4,0(a5) + 80004c18: 0019069b addiw a3,s2,1 + 80004c1c: fae456e3 bge s0,a4,80004bc8 + 80004c20: 000155b7 lui a1,0x15 + 80004c24: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80004c28: 00040513 mv a0,s0 + 80004c2c: d15ff0ef jal ra,80004940 <__divdi3> + 80004c30: 00149793 slli a5,s1,0x1 + 80004c34: 009784b3 add s1,a5,s1 + 80004c38: 00449793 slli a5,s1,0x4 + 80004c3c: 00002497 auipc s1,0x2 + 80004c40: f3448493 addi s1,s1,-204 # 80006b70 + 80004c44: 00f484b3 add s1,s1,a5 + 80004c48: 0004e783 lwu a5,0(s1) + 80004c4c: 0005051b sext.w a0,a0 + 80004c50: 00a9ae23 sw a0,28(s3) + 80004c54: 14f44463 blt s0,a5,80004d9c + 80004c58: 00100713 li a4,1 + 80004c5c: 40f40433 sub s0,s0,a5 + 80004c60: 0044e783 lwu a5,4(s1) + 80004c64: 00070a1b sext.w s4,a4 + 80004c68: 00448493 addi s1,s1,4 + 80004c6c: 00170713 addi a4,a4,1 + 80004c70: fef456e3 bge s0,a5,80004c5c + 80004c74: 000155b7 lui a1,0x15 + 80004c78: 0149a823 sw s4,16(s3) + 80004c7c: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80004c80: 00040513 mv a0,s0 + 80004c84: cbdff0ef jal ra,80004940 <__divdi3> + 80004c88: 0005051b sext.w a0,a0 + 80004c8c: 0015079b addiw a5,a0,1 + 80004c90: 000155b7 lui a1,0x15 + 80004c94: 00f9a623 sw a5,12(s3) + 80004c98: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80004c9c: 00040513 mv a0,s0 + 80004ca0: 00001ab7 lui s5,0x1 + 80004ca4: 0007841b sext.w s0,a5 + 80004ca8: d1dff0ef jal ra,800049c4 <__moddi3> + 80004cac: e10a8593 addi a1,s5,-496 # e10 <_entry_offset+0xe10> + 80004cb0: 00050493 mv s1,a0 + 80004cb4: c8dff0ef jal ra,80004940 <__divdi3> + 80004cb8: e10a8593 addi a1,s5,-496 + 80004cbc: 00a9a423 sw a0,8(s3) + 80004cc0: 00048513 mv a0,s1 + 80004cc4: d01ff0ef jal ra,800049c4 <__moddi3> + 80004cc8: 03c00593 li a1,60 + 80004ccc: 00050493 mv s1,a0 + 80004cd0: c71ff0ef jal ra,80004940 <__divdi3> + 80004cd4: 00a9a223 sw a0,4(s3) + 80004cd8: 03c00593 li a1,60 + 80004cdc: 00048513 mv a0,s1 + 80004ce0: ce5ff0ef jal ra,800049c4 <__moddi3> + 80004ce4: 001a0a1b addiw s4,s4,1 + 80004ce8: 0ffa7793 andi a5,s4,255 + 80004cec: 0037b793 sltiu a5,a5,3 + 80004cf0: 40f9093b subw s2,s2,a5 + 80004cf4: 03091913 slli s2,s2,0x30 + 80004cf8: 03095913 srli s2,s2,0x30 + 80004cfc: 00a9a023 sw a0,0(s3) + 80004d00: 06400593 li a1,100 + 80004d04: 00090513 mv a0,s2 + 80004d08: c41ff0ef jal ra,80004948 <__udivdi3> + 80004d0c: 0029549b srliw s1,s2,0x2 + 80004d10: 0105179b slliw a5,a0,0x10 + 80004d14: 0107d79b srliw a5,a5,0x10 + 80004d18: 012484bb addw s1,s1,s2 + 80004d1c: 19000593 li a1,400 + 80004d20: 00090513 mv a0,s2 + 80004d24: 0ffa7a13 andi s4,s4,255 + 80004d28: 40f484bb subw s1,s1,a5 + 80004d2c: fffa0a1b addiw s4,s4,-1 + 80004d30: c19ff0ef jal ra,80004948 <__udivdi3> + 80004d34: 00002797 auipc a5,0x2 + 80004d38: e9c78793 addi a5,a5,-356 # 80006bd0 + 80004d3c: 002a1a13 slli s4,s4,0x2 + 80004d40: 01478a33 add s4,a5,s4 + 80004d44: 000a2783 lw a5,0(s4) + 80004d48: 0105151b slliw a0,a0,0x10 + 80004d4c: 0105551b srliw a0,a0,0x10 + 80004d50: 00a484bb addw s1,s1,a0 + 80004d54: 00f484bb addw s1,s1,a5 + 80004d58: 0ff47513 andi a0,s0,255 + 80004d5c: 00a4853b addw a0,s1,a0 + 80004d60: 00700593 li a1,7 + 80004d64: c61ff0ef jal ra,800049c4 <__moddi3> + 80004d68: 03813083 ld ra,56(sp) + 80004d6c: 03013403 ld s0,48(sp) + 80004d70: 0ff57513 andi a0,a0,255 + 80004d74: 00a9ac23 sw a0,24(s3) + 80004d78: 0209a023 sw zero,32(s3) + 80004d7c: 02813483 ld s1,40(sp) + 80004d80: 02013903 ld s2,32(sp) + 80004d84: 01013a03 ld s4,16(sp) + 80004d88: 00813a83 ld s5,8(sp) + 80004d8c: 00098513 mv a0,s3 + 80004d90: 01813983 ld s3,24(sp) + 80004d94: 04010113 addi sp,sp,64 + 80004d98: 00008067 ret + 80004d9c: 00000a13 li s4,0 + 80004da0: eedff06f j 80004c8c + +0000000080004da4 <__am_timer_rtc>: + 80004da4: f9010113 addi sp,sp,-112 + 80004da8: 06813023 sd s0,96(sp) + 80004dac: 06113423 sd ra,104(sp) + 80004db0: 04913c23 sd s1,88(sp) + 80004db4: 05213823 sd s2,80(sp) + 80004db8: 00050413 mv s0,a0 + 80004dbc: b00024f3 csrr s1,mcycle + 80004dc0: 000f4937 lui s2,0xf4 + 80004dc4: 24090593 addi a1,s2,576 # f4240 <_entry_offset+0xf4240> + 80004dc8: 00048513 mv a0,s1 + 80004dcc: b7dff0ef jal ra,80004948 <__udivdi3> + 80004dd0: 00050793 mv a5,a0 + 80004dd4: 24090593 addi a1,s2,576 + 80004dd8: 00048513 mv a0,s1 + 80004ddc: 00f13423 sd a5,8(sp) + 80004de0: bb1ff0ef jal ra,80004990 <__umoddi3> + 80004de4: 00050793 mv a5,a0 + 80004de8: 01810593 addi a1,sp,24 + 80004dec: 00810513 addi a0,sp,8 + 80004df0: 00f13823 sd a5,16(sp) + 80004df4: d81ff0ef jal ra,80004b74 + 80004df8: 01812703 lw a4,24(sp) + 80004dfc: 02812783 lw a5,40(sp) + 80004e00: 06813083 ld ra,104(sp) + 80004e04: 00e42a23 sw a4,20(s0) + 80004e08: 01c12703 lw a4,28(sp) + 80004e0c: 0017879b addiw a5,a5,1 + 80004e10: 00f42223 sw a5,4(s0) + 80004e14: 00e42823 sw a4,16(s0) + 80004e18: 02012703 lw a4,32(sp) + 80004e1c: 02c12783 lw a5,44(sp) + 80004e20: 05813483 ld s1,88(sp) + 80004e24: 00e42623 sw a4,12(s0) + 80004e28: 02412703 lw a4,36(sp) + 80004e2c: 00f42023 sw a5,0(s0) + 80004e30: 05013903 ld s2,80(sp) + 80004e34: 00e42423 sw a4,8(s0) + 80004e38: 06013403 ld s0,96(sp) + 80004e3c: 07010113 addi sp,sp,112 + 80004e40: 00008067 ret + +0000000080004e44 <__am_input_keybrd>: + 80004e44: 00050023 sb zero,0(a0) + 80004e48: 00052223 sw zero,4(a0) + 80004e4c: 00008067 ret + +0000000080004e50 : + 80004e50: 00054783 lbu a5,0(a0) + 80004e54: 00158593 addi a1,a1,1 + 80004e58: 00150513 addi a0,a0,1 + 80004e5c: fff5c703 lbu a4,-1(a1) + 80004e60: 00078863 beqz a5,80004e70 + 80004e64: fee786e3 beq a5,a4,80004e50 + 80004e68: 40e7853b subw a0,a5,a4 + 80004e6c: 00008067 ret + 80004e70: 40e0053b negw a0,a4 + 80004e74: 00008067 ret + +0000000080004e78 : + 80004e78: 00002797 auipc a5,0x2 + 80004e7c: 71078793 addi a5,a5,1808 # 80007588 + 80004e80: 0007b503 ld a0,0(a5) + 80004e84: 0087b583 ld a1,8(a5) + 80004e88: ff010113 addi sp,sp,-16 + 80004e8c: 00000693 li a3,0 + 80004e90: 00000613 li a2,0 + 80004e94: 40a585b3 sub a1,a1,a0 + 80004e98: 00113423 sd ra,8(sp) + 80004e9c: 224010ef jal ra,800060c0 + 80004ea0: 00813083 ld ra,8(sp) + 80004ea4: 00003797 auipc a5,0x3 + 80004ea8: c0a7be23 sd a0,-996(a5) # 80007ac0 + 80004eac: 01010113 addi sp,sp,16 + 80004eb0: 00008067 ret + +0000000080004eb4 <_out_buffer>: + 80004eb4: 00d67663 bgeu a2,a3,80004ec0 <_out_buffer+0xc> + 80004eb8: 00c585b3 add a1,a1,a2 + 80004ebc: 00a58023 sb a0,0(a1) + 80004ec0: 00008067 ret + +0000000080004ec4 <_out_null>: + 80004ec4: 00008067 ret + +0000000080004ec8 <_ntoa_format>: + 80004ec8: fa010113 addi sp,sp,-96 + 80004ecc: 07012303 lw t1,112(sp) + 80004ed0: 03313c23 sd s3,56(sp) + 80004ed4: 03413823 sd s4,48(sp) + 80004ed8: 03513423 sd s5,40(sp) + 80004edc: 03613023 sd s6,32(sp) + 80004ee0: 01713c23 sd s7,24(sp) + 80004ee4: 01813823 sd s8,16(sp) + 80004ee8: 01913423 sd s9,8(sp) + 80004eec: 00237e13 andi t3,t1,2 + 80004ef0: 01037e93 andi t4,t1,16 + 80004ef4: 04113c23 sd ra,88(sp) + 80004ef8: 04813823 sd s0,80(sp) + 80004efc: 04913423 sd s1,72(sp) + 80004f00: 05213023 sd s2,64(sp) + 80004f04: 06012f03 lw t5,96(sp) + 80004f08: 06812c03 lw s8,104(sp) + 80004f0c: 00050a13 mv s4,a0 + 80004f10: 00058a93 mv s5,a1 + 80004f14: 00060b93 mv s7,a2 + 80004f18: 00068b13 mv s6,a3 + 80004f1c: 00070993 mv s3,a4 + 80004f20: 000e0c9b sext.w s9,t3 + 80004f24: 000e8e9b sext.w t4,t4 + 80004f28: 060e1c63 bnez t3,80004fa0 <_ntoa_format+0xd8> + 80004f2c: 020f1693 slli a3,t5,0x20 + 80004f30: 00137513 andi a0,t1,1 + 80004f34: 0206d693 srli a3,a3,0x20 + 80004f38: 180c1e63 bnez s8,800050d4 <_ntoa_format+0x20c> + 80004f3c: 02d7f663 bgeu a5,a3,80004f68 <_ntoa_format+0xa0> + 80004f40: 02000713 li a4,32 + 80004f44: 36e78e63 beq a5,a4,800052c0 <_ntoa_format+0x3f8> + 80004f48: 03000613 li a2,48 + 80004f4c: 02000593 li a1,32 + 80004f50: 0080006f j 80004f58 <_ntoa_format+0x90> + 80004f54: 00b78a63 beq a5,a1,80004f68 <_ntoa_format+0xa0> + 80004f58: 00178793 addi a5,a5,1 + 80004f5c: 00f98733 add a4,s3,a5 + 80004f60: fec70fa3 sb a2,-1(a4) + 80004f64: fed7e8e3 bltu a5,a3,80004f54 <_ntoa_format+0x8c> + 80004f68: 02050c63 beqz a0,80004fa0 <_ntoa_format+0xd8> + 80004f6c: 020c1913 slli s2,s8,0x20 + 80004f70: 02095913 srli s2,s2,0x20 + 80004f74: 0327f663 bgeu a5,s2,80004fa0 <_ntoa_format+0xd8> + 80004f78: 02000713 li a4,32 + 80004f7c: 36e78863 beq a5,a4,800052ec <_ntoa_format+0x424> + 80004f80: 03000693 li a3,48 + 80004f84: 02000613 li a2,32 + 80004f88: 0080006f j 80004f90 <_ntoa_format+0xc8> + 80004f8c: 16c78463 beq a5,a2,800050f4 <_ntoa_format+0x22c> + 80004f90: 00178793 addi a5,a5,1 + 80004f94: 00f98733 add a4,s3,a5 + 80004f98: fed70fa3 sb a3,-1(a4) + 80004f9c: ff2798e3 bne a5,s2,80004f8c <_ntoa_format+0xc4> + 80004fa0: 1a0e8663 beqz t4,8000514c <_ntoa_format+0x284> + 80004fa4: 40037713 andi a4,t1,1024 + 80004fa8: 20071463 bnez a4,800051b0 <_ntoa_format+0x2e8> + 80004fac: 1e079663 bnez a5,80005198 <_ntoa_format+0x2d0> + 80004fb0: 01000793 li a5,16 + 80004fb4: 2af88863 beq a7,a5,80005264 <_ntoa_format+0x39c> + 80004fb8: 00200793 li a5,2 + 80004fbc: 2ef88a63 beq a7,a5,800052b0 <_ntoa_format+0x3e8> + 80004fc0: 03000793 li a5,48 + 80004fc4: 00f98023 sb a5,0(s3) + 80004fc8: 00100793 li a5,1 + 80004fcc: 1a080463 beqz a6,80005174 <_ntoa_format+0x2ac> + 80004fd0: 00f98733 add a4,s3,a5 + 80004fd4: 00178413 addi s0,a5,1 + 80004fd8: 02d00793 li a5,45 + 80004fdc: 00f70023 sb a5,0(a4) + 80004fe0: 00337313 andi t1,t1,3 + 80004fe4: 20031263 bnez t1,800051e8 <_ntoa_format+0x320> + 80004fe8: 020c1913 slli s2,s8,0x20 + 80004fec: 02095913 srli s2,s2,0x20 + 80004ff0: 1f247c63 bgeu s0,s2,800051e8 <_ntoa_format+0x320> + 80004ff4: 40890933 sub s2,s2,s0 + 80004ff8: 01790933 add s2,s2,s7 + 80004ffc: 000b8493 mv s1,s7 + 80005000: 00048613 mv a2,s1 + 80005004: 000b0693 mv a3,s6 + 80005008: 00148493 addi s1,s1,1 + 8000500c: 000a8593 mv a1,s5 + 80005010: 02000513 li a0,32 + 80005014: 000a00e7 jalr s4 + 80005018: ff2494e3 bne s1,s2,80005000 <_ntoa_format+0x138> + 8000501c: 02040663 beqz s0,80005048 <_ntoa_format+0x180> + 80005020: 01240933 add s2,s0,s2 + 80005024: 012984b3 add s1,s3,s2 + 80005028: 00898433 add s0,s3,s0 + 8000502c: fff44503 lbu a0,-1(s0) + 80005030: 40848633 sub a2,s1,s0 + 80005034: 000b0693 mv a3,s6 + 80005038: fff40413 addi s0,s0,-1 + 8000503c: 000a8593 mv a1,s5 + 80005040: 000a00e7 jalr s4 + 80005044: fe8994e3 bne s3,s0,8000502c <_ntoa_format+0x164> + 80005048: 040c8a63 beqz s9,8000509c <_ntoa_format+0x1d4> + 8000504c: 020c1c13 slli s8,s8,0x20 + 80005050: 41790433 sub s0,s2,s7 + 80005054: 020c5c13 srli s8,s8,0x20 + 80005058: 05847263 bgeu s0,s8,8000509c <_ntoa_format+0x1d4> + 8000505c: 01740633 add a2,s0,s7 + 80005060: 000b0693 mv a3,s6 + 80005064: 00140413 addi s0,s0,1 + 80005068: 000a8593 mv a1,s5 + 8000506c: 02000513 li a0,32 + 80005070: 000a00e7 jalr s4 + 80005074: ff8464e3 bltu s0,s8,8000505c <_ntoa_format+0x194> + 80005078: 41790733 sub a4,s2,s7 + 8000507c: 00170713 addi a4,a4,1 + 80005080: 00000793 li a5,0 + 80005084: 00ec6863 bltu s8,a4,80005094 <_ntoa_format+0x1cc> + 80005088: fffb8793 addi a5,s7,-1 # ffff <_entry_offset+0xffff> + 8000508c: 01878c33 add s8,a5,s8 + 80005090: 412c07b3 sub a5,s8,s2 + 80005094: 00190913 addi s2,s2,1 + 80005098: 00f90933 add s2,s2,a5 + 8000509c: 05813083 ld ra,88(sp) + 800050a0: 05013403 ld s0,80(sp) + 800050a4: 04813483 ld s1,72(sp) + 800050a8: 03813983 ld s3,56(sp) + 800050ac: 03013a03 ld s4,48(sp) + 800050b0: 02813a83 ld s5,40(sp) + 800050b4: 02013b03 ld s6,32(sp) + 800050b8: 01813b83 ld s7,24(sp) + 800050bc: 01013c03 ld s8,16(sp) + 800050c0: 00813c83 ld s9,8(sp) + 800050c4: 00090513 mv a0,s2 + 800050c8: 04013903 ld s2,64(sp) + 800050cc: 06010113 addi sp,sp,96 + 800050d0: 00008067 ret + 800050d4: 12050863 beqz a0,80005204 <_ntoa_format+0x33c> + 800050d8: 00081663 bnez a6,800050e4 <_ntoa_format+0x21c> + 800050dc: 00c37713 andi a4,t1,12 + 800050e0: 00070463 beqz a4,800050e8 <_ntoa_format+0x220> + 800050e4: fffc0c1b addiw s8,s8,-1 + 800050e8: e8d7f2e3 bgeu a5,a3,80004f6c <_ntoa_format+0xa4> + 800050ec: 02000713 li a4,32 + 800050f0: e4e79ce3 bne a5,a4,80004f48 <_ntoa_format+0x80> + 800050f4: 0e0e8063 beqz t4,800051d4 <_ntoa_format+0x30c> + 800050f8: 40037793 andi a5,t1,1024 + 800050fc: 04079c63 bnez a5,80005154 <_ntoa_format+0x28c> + 80005100: 02000793 li a5,32 + 80005104: 0aff1063 bne t5,a5,800051a4 <_ntoa_format+0x2dc> + 80005108: 02000793 li a5,32 + 8000510c: 01f00713 li a4,31 + 80005110: 01000693 li a3,16 + 80005114: 1ad88c63 beq a7,a3,800052cc <_ntoa_format+0x404> + 80005118: 00200693 li a3,2 + 8000511c: 00070793 mv a5,a4 + 80005120: 00d89e63 bne a7,a3,8000513c <_ntoa_format+0x274> + 80005124: 00e986b3 add a3,s3,a4 + 80005128: 00170793 addi a5,a4,1 + 8000512c: 06200713 li a4,98 + 80005130: 00e68023 sb a4,0(a3) + 80005134: 02000713 li a4,32 + 80005138: 00e78e63 beq a5,a4,80005154 <_ntoa_format+0x28c> + 8000513c: 00f98733 add a4,s3,a5 + 80005140: 03000693 li a3,48 + 80005144: 00d70023 sb a3,0(a4) + 80005148: 00178793 addi a5,a5,1 + 8000514c: 02000713 li a4,32 + 80005150: e6e79ee3 bne a5,a4,80004fcc <_ntoa_format+0x104> + 80005154: 00337313 andi t1,t1,3 + 80005158: 08031263 bnez t1,800051dc <_ntoa_format+0x314> + 8000515c: 02000413 li s0,32 + 80005160: 020c1913 slli s2,s8,0x20 + 80005164: 02095913 srli s2,s2,0x20 + 80005168: e92466e3 bltu s0,s2,80004ff4 <_ntoa_format+0x12c> + 8000516c: 000b8913 mv s2,s7 + 80005170: eadff06f j 8000501c <_ntoa_format+0x154> + 80005174: 00437713 andi a4,t1,4 + 80005178: 06071c63 bnez a4,800051f0 <_ntoa_format+0x328> + 8000517c: 00837713 andi a4,t1,8 + 80005180: 0c071863 bnez a4,80005250 <_ntoa_format+0x388> + 80005184: 00337313 andi t1,t1,3 + 80005188: 00078413 mv s0,a5 + 8000518c: fc030ae3 beqz t1,80005160 <_ntoa_format+0x298> + 80005190: 000b8913 mv s2,s7 + 80005194: e89ff06f j 8000501c <_ntoa_format+0x154> + 80005198: 020f1f13 slli t5,t5,0x20 + 8000519c: 020f5f13 srli t5,t5,0x20 + 800051a0: 0aff0263 beq t5,a5,80005244 <_ntoa_format+0x37c> + 800051a4: 020c1913 slli s2,s8,0x20 + 800051a8: 02095913 srli s2,s2,0x20 + 800051ac: 08f90c63 beq s2,a5,80005244 <_ntoa_format+0x37c> + 800051b0: 01000713 li a4,16 + 800051b4: 06e88663 beq a7,a4,80005220 <_ntoa_format+0x358> + 800051b8: 00200713 li a4,2 + 800051bc: f6e89ce3 bne a7,a4,80005134 <_ntoa_format+0x26c> + 800051c0: 02000713 li a4,32 + 800051c4: f8e788e3 beq a5,a4,80005154 <_ntoa_format+0x28c> + 800051c8: 00f986b3 add a3,s3,a5 + 800051cc: 00178793 addi a5,a5,1 + 800051d0: f5dff06f j 8000512c <_ntoa_format+0x264> + 800051d4: 00337313 andi t1,t1,3 + 800051d8: 0c030063 beqz t1,80005298 <_ntoa_format+0x3d0> + 800051dc: 000b8913 mv s2,s7 + 800051e0: 02000413 li s0,32 + 800051e4: e3dff06f j 80005020 <_ntoa_format+0x158> + 800051e8: 000b8913 mv s2,s7 + 800051ec: e35ff06f j 80005020 <_ntoa_format+0x158> + 800051f0: 00f98733 add a4,s3,a5 + 800051f4: 00178413 addi s0,a5,1 + 800051f8: 02b00793 li a5,43 + 800051fc: 00f70023 sb a5,0(a4) + 80005200: de1ff06f j 80004fe0 <_ntoa_format+0x118> + 80005204: d8d7fee3 bgeu a5,a3,80004fa0 <_ntoa_format+0xd8> + 80005208: 02000713 li a4,32 + 8000520c: d2e79ee3 bne a5,a4,80004f48 <_ntoa_format+0x80> + 80005210: 0e0e8c63 beqz t4,80005308 <_ntoa_format+0x440> + 80005214: 40037793 andi a5,t1,1024 + 80005218: f2079ee3 bnez a5,80005154 <_ntoa_format+0x28c> + 8000521c: ee5ff06f j 80005100 <_ntoa_format+0x238> + 80005220: 02037713 andi a4,t1,32 + 80005224: 04071c63 bnez a4,8000527c <_ntoa_format+0x3b4> + 80005228: 02000713 li a4,32 + 8000522c: f2e784e3 beq a5,a4,80005154 <_ntoa_format+0x28c> + 80005230: 00f98733 add a4,s3,a5 + 80005234: 00178793 addi a5,a5,1 + 80005238: 07800693 li a3,120 + 8000523c: 00d70023 sb a3,0(a4) + 80005240: ef5ff06f j 80005134 <_ntoa_format+0x26c> + 80005244: fff78713 addi a4,a5,-1 + 80005248: d60704e3 beqz a4,80004fb0 <_ntoa_format+0xe8> + 8000524c: ec5ff06f j 80005110 <_ntoa_format+0x248> + 80005250: 00f98733 add a4,s3,a5 + 80005254: 00178413 addi s0,a5,1 + 80005258: 02000793 li a5,32 + 8000525c: 00f70023 sb a5,0(a4) + 80005260: d81ff06f j 80004fe0 <_ntoa_format+0x118> + 80005264: 02037793 andi a5,t1,32 + 80005268: 02079c63 bnez a5,800052a0 <_ntoa_format+0x3d8> + 8000526c: 07800793 li a5,120 + 80005270: 00f98023 sb a5,0(s3) + 80005274: 00100793 li a5,1 + 80005278: ec5ff06f j 8000513c <_ntoa_format+0x274> + 8000527c: 02000713 li a4,32 + 80005280: ece78ae3 beq a5,a4,80005154 <_ntoa_format+0x28c> + 80005284: 00f98733 add a4,s3,a5 + 80005288: 05800693 li a3,88 + 8000528c: 00d70023 sb a3,0(a4) + 80005290: 00178793 addi a5,a5,1 + 80005294: ea1ff06f j 80005134 <_ntoa_format+0x26c> + 80005298: 02000413 li s0,32 + 8000529c: d4dff06f j 80004fe8 <_ntoa_format+0x120> + 800052a0: 05800793 li a5,88 + 800052a4: 00f98023 sb a5,0(s3) + 800052a8: 00100793 li a5,1 + 800052ac: e91ff06f j 8000513c <_ntoa_format+0x274> + 800052b0: 06200793 li a5,98 + 800052b4: 00f98023 sb a5,0(s3) + 800052b8: 00100793 li a5,1 + 800052bc: e81ff06f j 8000513c <_ntoa_format+0x274> + 800052c0: e2051ae3 bnez a0,800050f4 <_ntoa_format+0x22c> + 800052c4: 000c8c13 mv s8,s9 + 800052c8: f49ff06f j 80005210 <_ntoa_format+0x348> + 800052cc: 02037693 andi a3,t1,32 + 800052d0: ffe78713 addi a4,a5,-2 + 800052d4: 00069863 bnez a3,800052e4 <_ntoa_format+0x41c> + 800052d8: 00e98733 add a4,s3,a4 + 800052dc: fff78793 addi a5,a5,-1 + 800052e0: f59ff06f j 80005238 <_ntoa_format+0x370> + 800052e4: 00070793 mv a5,a4 + 800052e8: f9dff06f j 80005284 <_ntoa_format+0x3bc> + 800052ec: 000e8e63 beqz t4,80005308 <_ntoa_format+0x440> + 800052f0: 40037713 andi a4,t1,1024 + 800052f4: 00071e63 bnez a4,80005310 <_ntoa_format+0x448> + 800052f8: 02ff0e63 beq t5,a5,80005334 <_ntoa_format+0x46c> + 800052fc: e4fc1ce3 bne s8,a5,80005154 <_ntoa_format+0x28c> + 80005300: 01f00713 li a4,31 + 80005304: e0dff06f j 80005110 <_ntoa_format+0x248> + 80005308: 02000413 li s0,32 + 8000530c: cd5ff06f j 80004fe0 <_ntoa_format+0x118> + 80005310: 01000793 li a5,16 + 80005314: 02f88c63 beq a7,a5,8000534c <_ntoa_format+0x484> + 80005318: 00200793 li a5,2 + 8000531c: e2f88ce3 beq a7,a5,80005154 <_ntoa_format+0x28c> + 80005320: 00337313 andi t1,t1,3 + 80005324: ea031ce3 bnez t1,800051dc <_ntoa_format+0x314> + 80005328: 02000413 li s0,32 + 8000532c: cd2464e3 bltu s0,s2,80004ff4 <_ntoa_format+0x12c> + 80005330: e3dff06f j 8000516c <_ntoa_format+0x2a4> + 80005334: 01000713 li a4,16 + 80005338: f8e88ae3 beq a7,a4,800052cc <_ntoa_format+0x404> + 8000533c: 00200793 li a5,2 + 80005340: 00f88c63 beq a7,a5,80005358 <_ntoa_format+0x490> + 80005344: 01f00793 li a5,31 + 80005348: df5ff06f j 8000513c <_ntoa_format+0x274> + 8000534c: 02037793 andi a5,t1,32 + 80005350: fc0788e3 beqz a5,80005320 <_ntoa_format+0x458> + 80005354: e01ff06f j 80005154 <_ntoa_format+0x28c> + 80005358: 01f00713 li a4,31 + 8000535c: dc9ff06f j 80005124 <_ntoa_format+0x25c> + +0000000080005360 <_ntoa_long>: + 80005360: f4010113 addi sp,sp,-192 + 80005364: 09413823 sd s4,144(sp) + 80005368: 09513423 sd s5,136(sp) + 8000536c: 09613023 sd s6,128(sp) + 80005370: 07713c23 sd s7,120(sp) + 80005374: 07813823 sd s8,112(sp) + 80005378: 07913423 sd s9,104(sp) + 8000537c: 05b13c23 sd s11,88(sp) + 80005380: 0a113c23 sd ra,184(sp) + 80005384: 0a813823 sd s0,176(sp) + 80005388: 0a913423 sd s1,168(sp) + 8000538c: 0b213023 sd s2,160(sp) + 80005390: 09313c23 sd s3,152(sp) + 80005394: 07a13023 sd s10,96(sp) + 80005398: 02a13023 sd a0,32(sp) + 8000539c: 03113423 sd a7,40(sp) + 800053a0: 0c812a03 lw s4,200(sp) + 800053a4: 00070d93 mv s11,a4 + 800053a8: 00058b13 mv s6,a1 + 800053ac: 00060b93 mv s7,a2 + 800053b0: 00068c13 mv s8,a3 + 800053b4: 00078c93 mv s9,a5 + 800053b8: 00080a93 mv s5,a6 + 800053bc: 00071863 bnez a4,800053cc <_ntoa_long+0x6c> + 800053c0: 400a7793 andi a5,s4,1024 + 800053c4: fefa7a13 andi s4,s4,-17 + 800053c8: 0e079663 bnez a5,800054b4 <_ntoa_long+0x154> + 800053cc: 020a7793 andi a5,s4,32 + 800053d0: 06100413 li s0,97 + 800053d4: 0c079c63 bnez a5,800054ac <_ntoa_long+0x14c> + 800053d8: 00000d13 li s10,0 + 800053dc: 03010493 addi s1,sp,48 + 800053e0: 00900913 li s2,9 + 800053e4: ff64041b addiw s0,s0,-10 + 800053e8: 02000993 li s3,32 + 800053ec: 00c0006f j 800053f8 <_ntoa_long+0x98> + 800053f0: 053d0463 beq s10,s3,80005438 <_ntoa_long+0xd8> + 800053f4: 00050d93 mv s11,a0 + 800053f8: 000a8593 mv a1,s5 + 800053fc: 000d8513 mv a0,s11 + 80005400: d90ff0ef jal ra,80004990 <__umoddi3> + 80005404: 0ff57313 andi t1,a0,255 + 80005408: 0303071b addiw a4,t1,48 + 8000540c: 0064033b addw t1,s0,t1 + 80005410: 0ff37313 andi t1,t1,255 + 80005414: 00a96463 bltu s2,a0,8000541c <_ntoa_long+0xbc> + 80005418: 0ff77313 andi t1,a4,255 + 8000541c: 001d0d13 addi s10,s10,1 + 80005420: 01a48733 add a4,s1,s10 + 80005424: 000d8513 mv a0,s11 + 80005428: 000a8593 mv a1,s5 + 8000542c: fe670fa3 sb t1,-1(a4) + 80005430: d18ff0ef jal ra,80004948 <__udivdi3> + 80005434: fb5dfee3 bgeu s11,s5,800053f0 <_ntoa_long+0x90> + 80005438: 0c012703 lw a4,192(sp) + 8000543c: 02813783 ld a5,40(sp) + 80005440: 02013503 ld a0,32(sp) + 80005444: 01413823 sd s4,16(sp) + 80005448: 00e13423 sd a4,8(sp) + 8000544c: 00f13023 sd a5,0(sp) + 80005450: 000a889b sext.w a7,s5 + 80005454: 000c8813 mv a6,s9 + 80005458: 000d0793 mv a5,s10 + 8000545c: 00048713 mv a4,s1 + 80005460: 000c0693 mv a3,s8 + 80005464: 000b8613 mv a2,s7 + 80005468: 000b0593 mv a1,s6 + 8000546c: a5dff0ef jal ra,80004ec8 <_ntoa_format> + 80005470: 0b813083 ld ra,184(sp) + 80005474: 0b013403 ld s0,176(sp) + 80005478: 0a813483 ld s1,168(sp) + 8000547c: 0a013903 ld s2,160(sp) + 80005480: 09813983 ld s3,152(sp) + 80005484: 09013a03 ld s4,144(sp) + 80005488: 08813a83 ld s5,136(sp) + 8000548c: 08013b03 ld s6,128(sp) + 80005490: 07813b83 ld s7,120(sp) + 80005494: 07013c03 ld s8,112(sp) + 80005498: 06813c83 ld s9,104(sp) + 8000549c: 06013d03 ld s10,96(sp) + 800054a0: 05813d83 ld s11,88(sp) + 800054a4: 0c010113 addi sp,sp,192 + 800054a8: 00008067 ret + 800054ac: 04100413 li s0,65 + 800054b0: f29ff06f j 800053d8 <_ntoa_long+0x78> + 800054b4: 00000d13 li s10,0 + 800054b8: 03010493 addi s1,sp,48 + 800054bc: f7dff06f j 80005438 <_ntoa_long+0xd8> + +00000000800054c0 <_ntoa_long_long>: + 800054c0: f4010113 addi sp,sp,-192 + 800054c4: 09413823 sd s4,144(sp) + 800054c8: 09513423 sd s5,136(sp) + 800054cc: 09613023 sd s6,128(sp) + 800054d0: 07713c23 sd s7,120(sp) + 800054d4: 07813823 sd s8,112(sp) + 800054d8: 07913423 sd s9,104(sp) + 800054dc: 05b13c23 sd s11,88(sp) + 800054e0: 0a113c23 sd ra,184(sp) + 800054e4: 0a813823 sd s0,176(sp) + 800054e8: 0a913423 sd s1,168(sp) + 800054ec: 0b213023 sd s2,160(sp) + 800054f0: 09313c23 sd s3,152(sp) + 800054f4: 07a13023 sd s10,96(sp) + 800054f8: 02a13023 sd a0,32(sp) + 800054fc: 03113423 sd a7,40(sp) + 80005500: 0c812a03 lw s4,200(sp) + 80005504: 00070d93 mv s11,a4 + 80005508: 00058b13 mv s6,a1 + 8000550c: 00060b93 mv s7,a2 + 80005510: 00068c13 mv s8,a3 + 80005514: 00078c93 mv s9,a5 + 80005518: 00080a93 mv s5,a6 + 8000551c: 00071863 bnez a4,8000552c <_ntoa_long_long+0x6c> + 80005520: 400a7793 andi a5,s4,1024 + 80005524: fefa7a13 andi s4,s4,-17 + 80005528: 0e079663 bnez a5,80005614 <_ntoa_long_long+0x154> + 8000552c: 020a7793 andi a5,s4,32 + 80005530: 06100413 li s0,97 + 80005534: 0c079c63 bnez a5,8000560c <_ntoa_long_long+0x14c> + 80005538: 00000d13 li s10,0 + 8000553c: 03010493 addi s1,sp,48 + 80005540: 00900913 li s2,9 + 80005544: ff64041b addiw s0,s0,-10 + 80005548: 02000993 li s3,32 + 8000554c: 00c0006f j 80005558 <_ntoa_long_long+0x98> + 80005550: 053d0463 beq s10,s3,80005598 <_ntoa_long_long+0xd8> + 80005554: 00050d93 mv s11,a0 + 80005558: 000a8593 mv a1,s5 + 8000555c: 000d8513 mv a0,s11 + 80005560: c30ff0ef jal ra,80004990 <__umoddi3> + 80005564: 0ff57313 andi t1,a0,255 + 80005568: 0303071b addiw a4,t1,48 + 8000556c: 0064033b addw t1,s0,t1 + 80005570: 0ff37313 andi t1,t1,255 + 80005574: 00a96463 bltu s2,a0,8000557c <_ntoa_long_long+0xbc> + 80005578: 0ff77313 andi t1,a4,255 + 8000557c: 001d0d13 addi s10,s10,1 + 80005580: 01a48733 add a4,s1,s10 + 80005584: 000d8513 mv a0,s11 + 80005588: 000a8593 mv a1,s5 + 8000558c: fe670fa3 sb t1,-1(a4) + 80005590: bb8ff0ef jal ra,80004948 <__udivdi3> + 80005594: fb5dfee3 bgeu s11,s5,80005550 <_ntoa_long_long+0x90> + 80005598: 0c012703 lw a4,192(sp) + 8000559c: 02813783 ld a5,40(sp) + 800055a0: 02013503 ld a0,32(sp) + 800055a4: 01413823 sd s4,16(sp) + 800055a8: 00e13423 sd a4,8(sp) + 800055ac: 00f13023 sd a5,0(sp) + 800055b0: 000a889b sext.w a7,s5 + 800055b4: 000c8813 mv a6,s9 + 800055b8: 000d0793 mv a5,s10 + 800055bc: 00048713 mv a4,s1 + 800055c0: 000c0693 mv a3,s8 + 800055c4: 000b8613 mv a2,s7 + 800055c8: 000b0593 mv a1,s6 + 800055cc: 8fdff0ef jal ra,80004ec8 <_ntoa_format> + 800055d0: 0b813083 ld ra,184(sp) + 800055d4: 0b013403 ld s0,176(sp) + 800055d8: 0a813483 ld s1,168(sp) + 800055dc: 0a013903 ld s2,160(sp) + 800055e0: 09813983 ld s3,152(sp) + 800055e4: 09013a03 ld s4,144(sp) + 800055e8: 08813a83 ld s5,136(sp) + 800055ec: 08013b03 ld s6,128(sp) + 800055f0: 07813b83 ld s7,120(sp) + 800055f4: 07013c03 ld s8,112(sp) + 800055f8: 06813c83 ld s9,104(sp) + 800055fc: 06013d03 ld s10,96(sp) + 80005600: 05813d83 ld s11,88(sp) + 80005604: 0c010113 addi sp,sp,192 + 80005608: 00008067 ret + 8000560c: 04100413 li s0,65 + 80005610: f29ff06f j 80005538 <_ntoa_long_long+0x78> + 80005614: 00000d13 li s10,0 + 80005618: 03010493 addi s1,sp,48 + 8000561c: f7dff06f j 80005598 <_ntoa_long_long+0xd8> + +0000000080005620 <_vsnprintf>: + 80005620: f6010113 addi sp,sp,-160 + 80005624: 08913423 sd s1,136(sp) + 80005628: 09213023 sd s2,128(sp) + 8000562c: 07313c23 sd s3,120(sp) + 80005630: 05713c23 sd s7,88(sp) + 80005634: 05813823 sd s8,80(sp) + 80005638: 08113c23 sd ra,152(sp) + 8000563c: 08813823 sd s0,144(sp) + 80005640: 07413823 sd s4,112(sp) + 80005644: 07513423 sd s5,104(sp) + 80005648: 07613023 sd s6,96(sp) + 8000564c: 05913423 sd s9,72(sp) + 80005650: 05a13023 sd s10,64(sp) + 80005654: 03b13c23 sd s11,56(sp) + 80005658: 00058493 mv s1,a1 + 8000565c: 00060c13 mv s8,a2 + 80005660: 00068b93 mv s7,a3 + 80005664: 00070993 mv s3,a4 + 80005668: 00000917 auipc s2,0x0 + 8000566c: 85c90913 addi s2,s2,-1956 # 80004ec4 <_out_null> + 80005670: 00058463 beqz a1,80005678 <_vsnprintf+0x58> + 80005674: 00050913 mv s2,a0 + 80005678: 000bc503 lbu a0,0(s7) + 8000567c: 00000d13 li s10,0 + 80005680: 66050663 beqz a0,80005cec <_vsnprintf+0x6cc> + 80005684: 000107b7 lui a5,0x10 + 80005688: fff78793 addi a5,a5,-1 # ffff <_entry_offset+0xffff> + 8000568c: 02500a13 li s4,37 + 80005690: 00001417 auipc s0,0x1 + 80005694: 57040413 addi s0,s0,1392 # 80006c00 + 80005698: 00f13c23 sd a5,24(sp) + 8000569c: 0200006f j 800056bc <_vsnprintf+0x9c> + 800056a0: 000d0613 mv a2,s10 + 800056a4: 000c0693 mv a3,s8 + 800056a8: 00048593 mv a1,s1 + 800056ac: 001d0d13 addi s10,s10,1 + 800056b0: 000900e7 jalr s2 + 800056b4: 000bc503 lbu a0,0(s7) + 800056b8: 1c050263 beqz a0,8000587c <_vsnprintf+0x25c> + 800056bc: 001b8b93 addi s7,s7,1 + 800056c0: ff4510e3 bne a0,s4,800056a0 <_vsnprintf+0x80> + 800056c4: 00000593 li a1,0 + 800056c8: 01000813 li a6,16 + 800056cc: 000bc503 lbu a0,0(s7) + 800056d0: 001b8713 addi a4,s7,1 + 800056d4: 00070613 mv a2,a4 + 800056d8: fe05079b addiw a5,a0,-32 + 800056dc: 0ff7f793 andi a5,a5,255 + 800056e0: 00f86c63 bltu a6,a5,800056f8 <_vsnprintf+0xd8> + 800056e4: 00279793 slli a5,a5,0x2 + 800056e8: 008787b3 add a5,a5,s0 + 800056ec: 0007a783 lw a5,0(a5) + 800056f0: 008787b3 add a5,a5,s0 + 800056f4: 00078067 jr a5 + 800056f8: fd05079b addiw a5,a0,-48 + 800056fc: 0ff7f793 andi a5,a5,255 + 80005700: 00900813 li a6,9 + 80005704: 0ef87c63 bgeu a6,a5,800057fc <_vsnprintf+0x1dc> + 80005708: 02a00793 li a5,42 + 8000570c: 20f50463 beq a0,a5,80005914 <_vsnprintf+0x2f4> + 80005710: 000b8613 mv a2,s7 + 80005714: 00000d93 li s11,0 + 80005718: 00070b93 mv s7,a4 + 8000571c: 02e00793 li a5,46 + 80005720: 00000c93 li s9,0 + 80005724: 12f50463 beq a0,a5,8000584c <_vsnprintf+0x22c> + 80005728: f985079b addiw a5,a0,-104 + 8000572c: 0ff7f793 andi a5,a5,255 + 80005730: 01200713 li a4,18 + 80005734: 08f76463 bltu a4,a5,800057bc <_vsnprintf+0x19c> + 80005738: 00001717 auipc a4,0x1 + 8000573c: 50c70713 addi a4,a4,1292 # 80006c44 + 80005740: 00279793 slli a5,a5,0x2 + 80005744: 00e787b3 add a5,a5,a4 + 80005748: 0007a783 lw a5,0(a5) + 8000574c: 00e787b3 add a5,a5,a4 + 80005750: 00078067 jr a5 + 80005754: 0015e593 ori a1,a1,1 + 80005758: 0005859b sext.w a1,a1 + 8000575c: 00070b93 mv s7,a4 + 80005760: f6dff06f j 800056cc <_vsnprintf+0xac> + 80005764: 0025e593 ori a1,a1,2 + 80005768: 0005859b sext.w a1,a1 + 8000576c: 00070b93 mv s7,a4 + 80005770: f5dff06f j 800056cc <_vsnprintf+0xac> + 80005774: 0045e593 ori a1,a1,4 + 80005778: 0005859b sext.w a1,a1 + 8000577c: 00070b93 mv s7,a4 + 80005780: f4dff06f j 800056cc <_vsnprintf+0xac> + 80005784: 0105e593 ori a1,a1,16 + 80005788: 0005859b sext.w a1,a1 + 8000578c: 00070b93 mv s7,a4 + 80005790: f3dff06f j 800056cc <_vsnprintf+0xac> + 80005794: 0085e593 ori a1,a1,8 + 80005798: 0005859b sext.w a1,a1 + 8000579c: 00070b93 mv s7,a4 + 800057a0: f2dff06f j 800056cc <_vsnprintf+0xac> + 800057a4: 00164503 lbu a0,1(a2) + 800057a8: 06800793 li a5,104 + 800057ac: 52f50663 beq a0,a5,80005cd8 <_vsnprintf+0x6b8> + 800057b0: 0805e593 ori a1,a1,128 + 800057b4: 0005859b sext.w a1,a1 + 800057b8: 001b8b93 addi s7,s7,1 + 800057bc: fdb5079b addiw a5,a0,-37 + 800057c0: 0ff7f793 andi a5,a5,255 + 800057c4: 05300713 li a4,83 + 800057c8: ecf76ce3 bltu a4,a5,800056a0 <_vsnprintf+0x80> + 800057cc: 00001717 auipc a4,0x1 + 800057d0: 4c470713 addi a4,a4,1220 # 80006c90 + 800057d4: 00279793 slli a5,a5,0x2 + 800057d8: 00e787b3 add a5,a5,a4 + 800057dc: 0007a783 lw a5,0(a5) + 800057e0: 00e787b3 add a5,a5,a4 + 800057e4: 00078067 jr a5 + 800057e8: 00164503 lbu a0,1(a2) + 800057ec: 1005e593 ori a1,a1,256 + 800057f0: 0005859b sext.w a1,a1 + 800057f4: 001b8b93 addi s7,s7,1 + 800057f8: fc5ff06f j 800057bc <_vsnprintf+0x19c> + 800057fc: 00000d93 li s11,0 + 80005800: 00900813 li a6,9 + 80005804: 0080006f j 8000580c <_vsnprintf+0x1ec> + 80005808: 00170713 addi a4,a4,1 + 8000580c: 002d979b slliw a5,s11,0x2 + 80005810: 01b787bb addw a5,a5,s11 + 80005814: 0017979b slliw a5,a5,0x1 + 80005818: 00a787bb addw a5,a5,a0 + 8000581c: 00074503 lbu a0,0(a4) + 80005820: 000b8893 mv a7,s7 + 80005824: fd078d9b addiw s11,a5,-48 + 80005828: fd05061b addiw a2,a0,-48 + 8000582c: 0ff67613 andi a2,a2,255 + 80005830: 00070b93 mv s7,a4 + 80005834: fcc87ae3 bgeu a6,a2,80005808 <_vsnprintf+0x1e8> + 80005838: 02e00793 li a5,46 + 8000583c: 00070613 mv a2,a4 + 80005840: 00288b93 addi s7,a7,2 + 80005844: 00000c93 li s9,0 + 80005848: eef510e3 bne a0,a5,80005728 <_vsnprintf+0x108> + 8000584c: 00164503 lbu a0,1(a2) + 80005850: 4005e593 ori a1,a1,1024 + 80005854: 00900713 li a4,9 + 80005858: fd05079b addiw a5,a0,-48 + 8000585c: 0ff7f793 andi a5,a5,255 + 80005860: 0005859b sext.w a1,a1 + 80005864: 06f77c63 bgeu a4,a5,800058dc <_vsnprintf+0x2bc> + 80005868: 02a00793 li a5,42 + 8000586c: 32f50e63 beq a0,a5,80005ba8 <_vsnprintf+0x588> + 80005870: 000b8613 mv a2,s7 + 80005874: 001b8b93 addi s7,s7,1 + 80005878: eb1ff06f j 80005728 <_vsnprintf+0x108> + 8000587c: 000d041b sext.w s0,s10 + 80005880: 018d6463 bltu s10,s8,80005888 <_vsnprintf+0x268> + 80005884: fffc0d13 addi s10,s8,-1 + 80005888: 000c0693 mv a3,s8 + 8000588c: 000d0613 mv a2,s10 + 80005890: 00048593 mv a1,s1 + 80005894: 00000513 li a0,0 + 80005898: 000900e7 jalr s2 + 8000589c: 09813083 ld ra,152(sp) + 800058a0: 00040513 mv a0,s0 + 800058a4: 09013403 ld s0,144(sp) + 800058a8: 08813483 ld s1,136(sp) + 800058ac: 08013903 ld s2,128(sp) + 800058b0: 07813983 ld s3,120(sp) + 800058b4: 07013a03 ld s4,112(sp) + 800058b8: 06813a83 ld s5,104(sp) + 800058bc: 06013b03 ld s6,96(sp) + 800058c0: 05813b83 ld s7,88(sp) + 800058c4: 05013c03 ld s8,80(sp) + 800058c8: 04813c83 ld s9,72(sp) + 800058cc: 04013d03 ld s10,64(sp) + 800058d0: 03813d83 ld s11,56(sp) + 800058d4: 0a010113 addi sp,sp,160 + 800058d8: 00008067 ret + 800058dc: 002c979b slliw a5,s9,0x2 + 800058e0: 019788bb addw a7,a5,s9 + 800058e4: 000b8813 mv a6,s7 + 800058e8: 0018989b slliw a7,a7,0x1 + 800058ec: 001b8b93 addi s7,s7,1 + 800058f0: 00a888bb addw a7,a7,a0 + 800058f4: 000bc503 lbu a0,0(s7) + 800058f8: fd088c9b addiw s9,a7,-48 + 800058fc: fd05079b addiw a5,a0,-48 + 80005900: 0ff7f793 andi a5,a5,255 + 80005904: fcf77ce3 bgeu a4,a5,800058dc <_vsnprintf+0x2bc> + 80005908: 000b8613 mv a2,s7 + 8000590c: 00280b93 addi s7,a6,2 + 80005910: e19ff06f j 80005728 <_vsnprintf+0x108> + 80005914: 0009a783 lw a5,0(s3) + 80005918: 00898993 addi s3,s3,8 + 8000591c: 00078d9b sext.w s11,a5 + 80005920: 0007c863 bltz a5,80005930 <_vsnprintf+0x310> + 80005924: 001bc503 lbu a0,1(s7) + 80005928: 002b8b93 addi s7,s7,2 + 8000592c: df1ff06f j 8000571c <_vsnprintf+0xfc> + 80005930: 0025e593 ori a1,a1,2 + 80005934: 001bc503 lbu a0,1(s7) + 80005938: 0005859b sext.w a1,a1 + 8000593c: 40f00dbb negw s11,a5 + 80005940: 002b8b93 addi s7,s7,2 + 80005944: dd9ff06f j 8000571c <_vsnprintf+0xfc> + 80005948: 07800793 li a5,120 + 8000594c: 00898a93 addi s5,s3,8 + 80005950: 56f50063 beq a0,a5,80005eb0 <_vsnprintf+0x890> + 80005954: 05800793 li a5,88 + 80005958: 28f50463 beq a0,a5,80005be0 <_vsnprintf+0x5c0> + 8000595c: 06f00793 li a5,111 + 80005960: 4af50c63 beq a0,a5,80005e18 <_vsnprintf+0x7f8> + 80005964: 06200793 li a5,98 + 80005968: 54f50063 beq a0,a5,80005ea8 <_vsnprintf+0x888> + 8000596c: fef5ff13 andi t5,a1,-17 + 80005970: 4005f793 andi a5,a1,1024 + 80005974: 06900713 li a4,105 + 80005978: 000f0f1b sext.w t5,t5 + 8000597c: 0007879b sext.w a5,a5 + 80005980: 5ae51063 bne a0,a4,80005f20 <_vsnprintf+0x900> + 80005984: 48079663 bnez a5,80005e10 <_vsnprintf+0x7f0> + 80005988: 2005f593 andi a1,a1,512 + 8000598c: 0005879b sext.w a5,a1 + 80005990: 00a00813 li a6,10 + 80005994: 42079663 bnez a5,80005dc0 <_vsnprintf+0x7a0> + 80005998: 100f7793 andi a5,t5,256 + 8000599c: 000f0613 mv a2,t5 + 800059a0: 4e079063 bnez a5,80005e80 <_vsnprintf+0x860> + 800059a4: 040f7713 andi a4,t5,64 + 800059a8: 0009a783 lw a5,0(s3) + 800059ac: 4a071a63 bnez a4,80005e60 <_vsnprintf+0x840> + 800059b0: 08067613 andi a2,a2,128 + 800059b4: 52060a63 beqz a2,80005ee8 <_vsnprintf+0x8c8> + 800059b8: 0107979b slliw a5,a5,0x10 + 800059bc: 4107d79b sraiw a5,a5,0x10 + 800059c0: 40f7d61b sraiw a2,a5,0xf + 800059c4: 00c7c733 xor a4,a5,a2 + 800059c8: 40c7073b subw a4,a4,a2 + 800059cc: 03071713 slli a4,a4,0x30 + 800059d0: 03075713 srli a4,a4,0x30 + 800059d4: 000d0613 mv a2,s10 + 800059d8: 01e13423 sd t5,8(sp) + 800059dc: 01b13023 sd s11,0(sp) + 800059e0: 000c8893 mv a7,s9 + 800059e4: 01f7d79b srliw a5,a5,0x1f + 800059e8: 000c0693 mv a3,s8 + 800059ec: 00048593 mv a1,s1 + 800059f0: 00090513 mv a0,s2 + 800059f4: 96dff0ef jal ra,80005360 <_ntoa_long> + 800059f8: 00050d13 mv s10,a0 + 800059fc: 000a8993 mv s3,s5 + 80005a00: cb5ff06f j 800056b4 <_vsnprintf+0x94> + 80005a04: 00164503 lbu a0,1(a2) + 80005a08: 06c00793 li a5,108 + 80005a0c: def510e3 bne a0,a5,800057ec <_vsnprintf+0x1cc> + 80005a10: 3005e593 ori a1,a1,768 + 80005a14: 00264503 lbu a0,2(a2) + 80005a18: 0005859b sext.w a1,a1 + 80005a1c: 00360b93 addi s7,a2,3 + 80005a20: d9dff06f j 800057bc <_vsnprintf+0x19c> + 80005a24: 00898793 addi a5,s3,8 + 80005a28: 001d0813 addi a6,s10,1 + 80005a2c: 0025f593 andi a1,a1,2 + 80005a30: 02f13023 sd a5,32(sp) + 80005a34: 00080b13 mv s6,a6 + 80005a38: 32058263 beqz a1,80005d5c <_vsnprintf+0x73c> + 80005a3c: 0009c503 lbu a0,0(s3) + 80005a40: 000c0693 mv a3,s8 + 80005a44: 000d0613 mv a2,s10 + 80005a48: 00048593 mv a1,s1 + 80005a4c: 000900e7 jalr s2 + 80005a50: 00100793 li a5,1 + 80005a54: 43b7f063 bgeu a5,s11,80005e74 <_vsnprintf+0x854> + 80005a58: ffed879b addiw a5,s11,-2 + 80005a5c: 02079a93 slli s5,a5,0x20 + 80005a60: 020ada93 srli s5,s5,0x20 + 80005a64: 002d0d13 addi s10,s10,2 + 80005a68: 015d0cb3 add s9,s10,s5 + 80005a6c: 000b0613 mv a2,s6 + 80005a70: 000c0693 mv a3,s8 + 80005a74: 001b0b13 addi s6,s6,1 + 80005a78: 00048593 mv a1,s1 + 80005a7c: 02000513 li a0,32 + 80005a80: 000900e7 jalr s2 + 80005a84: ff6c94e3 bne s9,s6,80005a6c <_vsnprintf+0x44c> + 80005a88: 02013983 ld s3,32(sp) + 80005a8c: 015d0d33 add s10,s10,s5 + 80005a90: c25ff06f j 800056b4 <_vsnprintf+0x94> + 80005a94: 000d0613 mv a2,s10 + 80005a98: 000c0693 mv a3,s8 + 80005a9c: 00048593 mv a1,s1 + 80005aa0: 02500513 li a0,37 + 80005aa4: 001d0d13 addi s10,s10,1 + 80005aa8: 000900e7 jalr s2 + 80005aac: c09ff06f j 800056b4 <_vsnprintf+0x94> + 80005ab0: 0009ba83 ld s5,0(s3) + 80005ab4: 00898793 addi a5,s3,8 + 80005ab8: 02f13023 sd a5,32(sp) + 80005abc: 000ac503 lbu a0,0(s5) + 80005ac0: 100c9663 bnez s9,80005bcc <_vsnprintf+0x5ac> + 80005ac4: ffe00793 li a5,-2 + 80005ac8: 42050863 beqz a0,80005ef8 <_vsnprintf+0x8d8> + 80005acc: 00178693 addi a3,a5,1 + 80005ad0: 00da8633 add a2,s5,a3 + 80005ad4: 000a8793 mv a5,s5 + 80005ad8: 0080006f j 80005ae0 <_vsnprintf+0x4c0> + 80005adc: 1ec78863 beq a5,a2,80005ccc <_vsnprintf+0x6ac> + 80005ae0: 0017c703 lbu a4,1(a5) + 80005ae4: 00178793 addi a5,a5,1 + 80005ae8: fe071ae3 bnez a4,80005adc <_vsnprintf+0x4bc> + 80005aec: 415787bb subw a5,a5,s5 + 80005af0: 00f13823 sd a5,16(sp) + 80005af4: 4005f793 andi a5,a1,1024 + 80005af8: 0007899b sext.w s3,a5 + 80005afc: 00078c63 beqz a5,80005b14 <_vsnprintf+0x4f4> + 80005b00: 01013703 ld a4,16(sp) + 80005b04: 000c879b sext.w a5,s9 + 80005b08: 01977463 bgeu a4,s9,80005b10 <_vsnprintf+0x4f0> + 80005b0c: 0007079b sext.w a5,a4 + 80005b10: 00f13823 sd a5,16(sp) + 80005b14: 0025f593 andi a1,a1,2 + 80005b18: 0005879b sext.w a5,a1 + 80005b1c: 02f13423 sd a5,40(sp) + 80005b20: 1c058a63 beqz a1,80005cf4 <_vsnprintf+0x6d4> + 80005b24: 14050863 beqz a0,80005c74 <_vsnprintf+0x654> + 80005b28: 000d0613 mv a2,s10 + 80005b2c: 00098863 beqz s3,80005b3c <_vsnprintf+0x51c> + 80005b30: fffc879b addiw a5,s9,-1 + 80005b34: 120c8863 beqz s9,80005c64 <_vsnprintf+0x644> + 80005b38: 00078c93 mv s9,a5 + 80005b3c: 000c0693 mv a3,s8 + 80005b40: 00048593 mv a1,s1 + 80005b44: 00160b13 addi s6,a2,1 + 80005b48: 000900e7 jalr s2 + 80005b4c: 41ab07b3 sub a5,s6,s10 + 80005b50: 00fa87b3 add a5,s5,a5 + 80005b54: 0007c503 lbu a0,0(a5) + 80005b58: 10050863 beqz a0,80005c68 <_vsnprintf+0x648> + 80005b5c: 000b0613 mv a2,s6 + 80005b60: fcdff06f j 80005b2c <_vsnprintf+0x50c> + 80005b64: 0009b703 ld a4,0(s3) + 80005b68: 0215e593 ori a1,a1,33 + 80005b6c: 0005859b sext.w a1,a1 + 80005b70: 01000793 li a5,16 + 80005b74: 000d0613 mv a2,s10 + 80005b78: 00b13423 sd a1,8(sp) + 80005b7c: 00f13023 sd a5,0(sp) + 80005b80: 000c8893 mv a7,s9 + 80005b84: 01000813 li a6,16 + 80005b88: 00000793 li a5,0 + 80005b8c: 000c0693 mv a3,s8 + 80005b90: 00048593 mv a1,s1 + 80005b94: 00090513 mv a0,s2 + 80005b98: 929ff0ef jal ra,800054c0 <_ntoa_long_long> + 80005b9c: 00898993 addi s3,s3,8 + 80005ba0: 00050d13 mv s10,a0 + 80005ba4: b11ff06f j 800056b4 <_vsnprintf+0x94> + 80005ba8: 0009a883 lw a7,0(s3) + 80005bac: 00264503 lbu a0,2(a2) + 80005bb0: 00360b93 addi s7,a2,3 + 80005bb4: fff8c793 not a5,a7 + 80005bb8: 43f7d793 srai a5,a5,0x3f + 80005bbc: 00f8fcb3 and s9,a7,a5 + 80005bc0: 00898993 addi s3,s3,8 + 80005bc4: 00260613 addi a2,a2,2 + 80005bc8: b61ff06f j 80005728 <_vsnprintf+0x108> + 80005bcc: 020c9793 slli a5,s9,0x20 + 80005bd0: 0207d793 srli a5,a5,0x20 + 80005bd4: 32050263 beqz a0,80005ef8 <_vsnprintf+0x8d8> + 80005bd8: fff78793 addi a5,a5,-1 + 80005bdc: ef1ff06f j 80005acc <_vsnprintf+0x4ac> + 80005be0: ff35ff13 andi t5,a1,-13 + 80005be4: 000f0f1b sext.w t5,t5 + 80005be8: 4005f793 andi a5,a1,1024 + 80005bec: 020f6f13 ori t5,t5,32 + 80005bf0: 20078863 beqz a5,80005e00 <_vsnprintf+0x7e0> + 80005bf4: 01000813 li a6,16 + 80005bf8: ffef7f13 andi t5,t5,-2 + 80005bfc: 000f0f1b sext.w t5,t5 + 80005c00: 200f7793 andi a5,t5,512 + 80005c04: 06900713 li a4,105 + 80005c08: 0007879b sext.w a5,a5 + 80005c0c: d8e504e3 beq a0,a4,80005994 <_vsnprintf+0x374> + 80005c10: 06400713 li a4,100 + 80005c14: d8e500e3 beq a0,a4,80005994 <_vsnprintf+0x374> + 80005c18: 22079663 bnez a5,80005e44 <_vsnprintf+0x824> + 80005c1c: 100f7793 andi a5,t5,256 + 80005c20: 000f0713 mv a4,t5 + 80005c24: 2a079463 bnez a5,80005ecc <_vsnprintf+0x8ac> + 80005c28: 040f7793 andi a5,t5,64 + 80005c2c: 24079063 bnez a5,80005e6c <_vsnprintf+0x84c> + 80005c30: 08077713 andi a4,a4,128 + 80005c34: 2c070663 beqz a4,80005f00 <_vsnprintf+0x8e0> + 80005c38: 0009a703 lw a4,0(s3) + 80005c3c: 01813783 ld a5,24(sp) + 80005c40: 00e7f733 and a4,a5,a4 + 80005c44: 02071713 slli a4,a4,0x20 + 80005c48: 000d0613 mv a2,s10 + 80005c4c: 01e13423 sd t5,8(sp) + 80005c50: 01b13023 sd s11,0(sp) + 80005c54: 000c8893 mv a7,s9 + 80005c58: 00000793 li a5,0 + 80005c5c: 02075713 srli a4,a4,0x20 + 80005c60: d89ff06f j 800059e8 <_vsnprintf+0x3c8> + 80005c64: 00060b13 mv s6,a2 + 80005c68: 02813783 ld a5,40(sp) + 80005c6c: 04078a63 beqz a5,80005cc0 <_vsnprintf+0x6a0> + 80005c70: 000b0d13 mv s10,s6 + 80005c74: 01013703 ld a4,16(sp) + 80005c78: 0db77e63 bgeu a4,s11,80005d54 <_vsnprintf+0x734> + 80005c7c: fffd879b addiw a5,s11,-1 + 80005c80: 40e7873b subw a4,a5,a4 + 80005c84: 02071713 slli a4,a4,0x20 + 80005c88: 02075713 srli a4,a4,0x20 + 80005c8c: 001d0813 addi a6,s10,1 + 80005c90: 01070b33 add s6,a4,a6 + 80005c94: 0080006f j 80005c9c <_vsnprintf+0x67c> + 80005c98: 00180813 addi a6,a6,1 + 80005c9c: 000d0613 mv a2,s10 + 80005ca0: 01013823 sd a6,16(sp) + 80005ca4: 000c0693 mv a3,s8 + 80005ca8: 00048593 mv a1,s1 + 80005cac: 02000513 li a0,32 + 80005cb0: 00080d13 mv s10,a6 + 80005cb4: 000900e7 jalr s2 + 80005cb8: 01013803 ld a6,16(sp) + 80005cbc: fd0b1ee3 bne s6,a6,80005c98 <_vsnprintf+0x678> + 80005cc0: 02013983 ld s3,32(sp) + 80005cc4: 000b0d13 mv s10,s6 + 80005cc8: 9edff06f j 800056b4 <_vsnprintf+0x94> + 80005ccc: 0006879b sext.w a5,a3 + 80005cd0: 00f13823 sd a5,16(sp) + 80005cd4: e21ff06f j 80005af4 <_vsnprintf+0x4d4> + 80005cd8: 0c05e593 ori a1,a1,192 + 80005cdc: 00264503 lbu a0,2(a2) + 80005ce0: 0005859b sext.w a1,a1 + 80005ce4: 00360b93 addi s7,a2,3 + 80005ce8: ad5ff06f j 800057bc <_vsnprintf+0x19c> + 80005cec: 00000413 li s0,0 + 80005cf0: b91ff06f j 80005880 <_vsnprintf+0x260> + 80005cf4: 01013703 ld a4,16(sp) + 80005cf8: 0017079b addiw a5,a4,1 + 80005cfc: 21b77c63 bgeu a4,s11,80005f14 <_vsnprintf+0x8f4> + 80005d00: fffd879b addiw a5,s11,-1 + 80005d04: 40e787bb subw a5,a5,a4 + 80005d08: 02079793 slli a5,a5,0x20 + 80005d0c: 0207d793 srli a5,a5,0x20 + 80005d10: 001d0813 addi a6,s10,1 + 80005d14: 01078b33 add s6,a5,a6 + 80005d18: 00c0006f j 80005d24 <_vsnprintf+0x704> + 80005d1c: 01013803 ld a6,16(sp) + 80005d20: 00180813 addi a6,a6,1 + 80005d24: 000d0613 mv a2,s10 + 80005d28: 000c0693 mv a3,s8 + 80005d2c: 00080d13 mv s10,a6 + 80005d30: 01013823 sd a6,16(sp) + 80005d34: 00048593 mv a1,s1 + 80005d38: 02000513 li a0,32 + 80005d3c: 000900e7 jalr s2 + 80005d40: fd6d1ee3 bne s10,s6,80005d1c <_vsnprintf+0x6fc> + 80005d44: 000ac503 lbu a0,0(s5) + 80005d48: 001d879b addiw a5,s11,1 + 80005d4c: 00f13823 sd a5,16(sp) + 80005d50: dc051ce3 bnez a0,80005b28 <_vsnprintf+0x508> + 80005d54: 000d0b13 mv s6,s10 + 80005d58: f69ff06f j 80005cc0 <_vsnprintf+0x6a0> + 80005d5c: 00100793 li a5,1 + 80005d60: 1bb7f463 bgeu a5,s11,80005f08 <_vsnprintf+0x8e8> + 80005d64: ffed879b addiw a5,s11,-2 + 80005d68: 02079a93 slli s5,a5,0x20 + 80005d6c: 020ada93 srli s5,s5,0x20 + 80005d70: 010a8ab3 add s5,s5,a6 + 80005d74: 00c0006f j 80005d80 <_vsnprintf+0x760> + 80005d78: 01013803 ld a6,16(sp) + 80005d7c: 00180813 addi a6,a6,1 + 80005d80: 000d0613 mv a2,s10 + 80005d84: 000c0693 mv a3,s8 + 80005d88: 00080d13 mv s10,a6 + 80005d8c: 01013823 sd a6,16(sp) + 80005d90: 00048593 mv a1,s1 + 80005d94: 02000513 li a0,32 + 80005d98: 000900e7 jalr s2 + 80005d9c: fdaa9ee3 bne s5,s10,80005d78 <_vsnprintf+0x758> + 80005da0: 001a8d13 addi s10,s5,1 + 80005da4: 0009c503 lbu a0,0(s3) + 80005da8: 000c0693 mv a3,s8 + 80005dac: 000a8613 mv a2,s5 + 80005db0: 00048593 mv a1,s1 + 80005db4: 000900e7 jalr s2 + 80005db8: 02013983 ld s3,32(sp) + 80005dbc: 8f9ff06f j 800056b4 <_vsnprintf+0x94> + 80005dc0: 0009b783 ld a5,0(s3) + 80005dc4: 000d0613 mv a2,s10 + 80005dc8: 01e13423 sd t5,8(sp) + 80005dcc: 43f7d713 srai a4,a5,0x3f + 80005dd0: 00f745b3 xor a1,a4,a5 + 80005dd4: 01b13023 sd s11,0(sp) + 80005dd8: 000c8893 mv a7,s9 + 80005ddc: 03f7d793 srli a5,a5,0x3f + 80005de0: 40e58733 sub a4,a1,a4 + 80005de4: 000c0693 mv a3,s8 + 80005de8: 00048593 mv a1,s1 + 80005dec: 00090513 mv a0,s2 + 80005df0: ed0ff0ef jal ra,800054c0 <_ntoa_long_long> + 80005df4: 00050d13 mv s10,a0 + 80005df8: 000a8993 mv s3,s5 + 80005dfc: 8b9ff06f j 800056b4 <_vsnprintf+0x94> + 80005e00: 2005f793 andi a5,a1,512 + 80005e04: 0007879b sext.w a5,a5 + 80005e08: 01000813 li a6,16 + 80005e0c: e0dff06f j 80005c18 <_vsnprintf+0x5f8> + 80005e10: 00a00813 li a6,10 + 80005e14: de5ff06f j 80005bf8 <_vsnprintf+0x5d8> + 80005e18: 00800813 li a6,8 + 80005e1c: 00058f13 mv t5,a1 + 80005e20: 400f7713 andi a4,t5,1024 + 80005e24: 06400613 li a2,100 + 80005e28: 000f0793 mv a5,t5 + 80005e2c: 0007071b sext.w a4,a4 + 80005e30: 0ec51c63 bne a0,a2,80005f28 <_vsnprintf+0x908> + 80005e34: dc0712e3 bnez a4,80005bf8 <_vsnprintf+0x5d8> + 80005e38: 2007f793 andi a5,a5,512 + 80005e3c: 0007879b sext.w a5,a5 + 80005e40: b55ff06f j 80005994 <_vsnprintf+0x374> + 80005e44: 0009b703 ld a4,0(s3) + 80005e48: 000d0613 mv a2,s10 + 80005e4c: 01e13423 sd t5,8(sp) + 80005e50: 01b13023 sd s11,0(sp) + 80005e54: 000c8893 mv a7,s9 + 80005e58: 00000793 li a5,0 + 80005e5c: f89ff06f j 80005de4 <_vsnprintf+0x7c4> + 80005e60: 0ff7f793 andi a5,a5,255 + 80005e64: 00078713 mv a4,a5 + 80005e68: b6dff06f j 800059d4 <_vsnprintf+0x3b4> + 80005e6c: 0009c703 lbu a4,0(s3) + 80005e70: dd5ff06f j 80005c44 <_vsnprintf+0x624> + 80005e74: 02013983 ld s3,32(sp) + 80005e78: 000b0d13 mv s10,s6 + 80005e7c: 839ff06f j 800056b4 <_vsnprintf+0x94> + 80005e80: 0009b783 ld a5,0(s3) + 80005e84: 000d0613 mv a2,s10 + 80005e88: 01e13423 sd t5,8(sp) + 80005e8c: 43f7d713 srai a4,a5,0x3f + 80005e90: 00f745b3 xor a1,a4,a5 + 80005e94: 01b13023 sd s11,0(sp) + 80005e98: 000c8893 mv a7,s9 + 80005e9c: 03f7d793 srli a5,a5,0x3f + 80005ea0: 40e58733 sub a4,a1,a4 + 80005ea4: b45ff06f j 800059e8 <_vsnprintf+0x3c8> + 80005ea8: 00200813 li a6,2 + 80005eac: f71ff06f j 80005e1c <_vsnprintf+0x7fc> + 80005eb0: 4005f713 andi a4,a1,1024 + 80005eb4: 0007071b sext.w a4,a4 + 80005eb8: 01000813 li a6,16 + 80005ebc: ff35f593 andi a1,a1,-13 + 80005ec0: 00058f1b sext.w t5,a1 + 80005ec4: d2071ae3 bnez a4,80005bf8 <_vsnprintf+0x5d8> + 80005ec8: d39ff06f j 80005c00 <_vsnprintf+0x5e0> + 80005ecc: 0009b703 ld a4,0(s3) + 80005ed0: 000d0613 mv a2,s10 + 80005ed4: 01e13423 sd t5,8(sp) + 80005ed8: 01b13023 sd s11,0(sp) + 80005edc: 000c8893 mv a7,s9 + 80005ee0: 00000793 li a5,0 + 80005ee4: b05ff06f j 800059e8 <_vsnprintf+0x3c8> + 80005ee8: 41f7d61b sraiw a2,a5,0x1f + 80005eec: 00c7c733 xor a4,a5,a2 + 80005ef0: 40c7073b subw a4,a4,a2 + 80005ef4: ae1ff06f j 800059d4 <_vsnprintf+0x3b4> + 80005ef8: 00013823 sd zero,16(sp) + 80005efc: bf9ff06f j 80005af4 <_vsnprintf+0x4d4> + 80005f00: 0009a703 lw a4,0(s3) + 80005f04: d41ff06f j 80005c44 <_vsnprintf+0x624> + 80005f08: 000d0a93 mv s5,s10 + 80005f0c: 00080d13 mv s10,a6 + 80005f10: e95ff06f j 80005da4 <_vsnprintf+0x784> + 80005f14: 00f13823 sd a5,16(sp) + 80005f18: c00518e3 bnez a0,80005b28 <_vsnprintf+0x508> + 80005f1c: e39ff06f j 80005d54 <_vsnprintf+0x734> + 80005f20: 00a00813 li a6,10 + 80005f24: efdff06f j 80005e20 <_vsnprintf+0x800> + 80005f28: 000f0593 mv a1,t5 + 80005f2c: f91ff06f j 80005ebc <_vsnprintf+0x89c> + +0000000080005f30 <_out_char>: + 80005f30: 00051463 bnez a0,80005f38 <_out_char+0x8> + 80005f34: 00008067 ret + 80005f38: 951fe06f j 80004888 + +0000000080005f3c : + 80005f3c: fa010113 addi sp,sp,-96 + 80005f40: 02810313 addi t1,sp,40 + 80005f44: 02b13423 sd a1,40(sp) + 80005f48: 02c13823 sd a2,48(sp) + 80005f4c: 02d13c23 sd a3,56(sp) + 80005f50: 04e13023 sd a4,64(sp) + 80005f54: 00050693 mv a3,a0 + 80005f58: 00010593 mv a1,sp + 80005f5c: 00030713 mv a4,t1 + 80005f60: fff00613 li a2,-1 + 80005f64: 00000517 auipc a0,0x0 + 80005f68: fcc50513 addi a0,a0,-52 # 80005f30 <_out_char> + 80005f6c: 00113c23 sd ra,24(sp) + 80005f70: 04f13423 sd a5,72(sp) + 80005f74: 05013823 sd a6,80(sp) + 80005f78: 05113c23 sd a7,88(sp) + 80005f7c: 00613423 sd t1,8(sp) + 80005f80: ea0ff0ef jal ra,80005620 <_vsnprintf> + 80005f84: 01813083 ld ra,24(sp) + 80005f88: 06010113 addi sp,sp,96 + 80005f8c: 00008067 ret + +0000000080005f90 : + 80005f90: fb010113 addi sp,sp,-80 + 80005f94: 02010313 addi t1,sp,32 + 80005f98: 02c13023 sd a2,32(sp) + 80005f9c: 02d13423 sd a3,40(sp) + 80005fa0: 02e13823 sd a4,48(sp) + 80005fa4: 00058693 mv a3,a1 + 80005fa8: 00030713 mv a4,t1 + 80005fac: 00050593 mv a1,a0 + 80005fb0: fff00613 li a2,-1 + 80005fb4: fffff517 auipc a0,0xfffff + 80005fb8: f0050513 addi a0,a0,-256 # 80004eb4 <_out_buffer> + 80005fbc: 00113c23 sd ra,24(sp) + 80005fc0: 02f13c23 sd a5,56(sp) + 80005fc4: 05013023 sd a6,64(sp) + 80005fc8: 05113423 sd a7,72(sp) + 80005fcc: 00613423 sd t1,8(sp) + 80005fd0: e50ff0ef jal ra,80005620 <_vsnprintf> + 80005fd4: 01813083 ld ra,24(sp) + 80005fd8: 05010113 addi sp,sp,80 + 80005fdc: 00008067 ret + +0000000080005fe0 : + 80005fe0: 00700713 li a4,7 + 80005fe4: 00050793 mv a5,a0 + 80005fe8: 0ac77a63 bgeu a4,a2,8000609c + 80005fec: 0ff5f893 andi a7,a1,255 + 80005ff0: 00889693 slli a3,a7,0x8 + 80005ff4: 0116e6b3 or a3,a3,a7 + 80005ff8: 01069713 slli a4,a3,0x10 + 80005ffc: 00d766b3 or a3,a4,a3 + 80006000: 02069713 slli a4,a3,0x20 + 80006004: 00757813 andi a6,a0,7 + 80006008: 00d76733 or a4,a4,a3 + 8000600c: 0a080663 beqz a6,800060b8 + 80006010: 00c50633 add a2,a0,a2 + 80006014: 01178023 sb a7,0(a5) + 80006018: 00178793 addi a5,a5,1 + 8000601c: 0077f813 andi a6,a5,7 + 80006020: 40f606b3 sub a3,a2,a5 + 80006024: fe0818e3 bnez a6,80006014 + 80006028: 0066d813 srli a6,a3,0x6 + 8000602c: 04080063 beqz a6,8000606c + 80006030: 00681613 slli a2,a6,0x6 + 80006034: 00078893 mv a7,a5 + 80006038: 00f60633 add a2,a2,a5 + 8000603c: 00e7b023 sd a4,0(a5) + 80006040: 00e7b423 sd a4,8(a5) + 80006044: 00e7b823 sd a4,16(a5) + 80006048: 00e7bc23 sd a4,24(a5) + 8000604c: 02e7b023 sd a4,32(a5) + 80006050: 02e7b423 sd a4,40(a5) + 80006054: 02e7b823 sd a4,48(a5) + 80006058: 02e7bc23 sd a4,56(a5) + 8000605c: 04078793 addi a5,a5,64 + 80006060: fcf61ee3 bne a2,a5,8000603c + 80006064: 00681793 slli a5,a6,0x6 + 80006068: 011787b3 add a5,a5,a7 + 8000606c: 0036d813 srli a6,a3,0x3 + 80006070: 00787813 andi a6,a6,7 + 80006074: 02080263 beqz a6,80006098 + 80006078: 00381613 slli a2,a6,0x3 + 8000607c: 00078893 mv a7,a5 + 80006080: 00f60633 add a2,a2,a5 + 80006084: 00e7b023 sd a4,0(a5) + 80006088: 00878793 addi a5,a5,8 + 8000608c: fef61ce3 bne a2,a5,80006084 + 80006090: 00381793 slli a5,a6,0x3 + 80006094: 011787b3 add a5,a5,a7 + 80006098: 0076f613 andi a2,a3,7 + 8000609c: 0ff5f593 andi a1,a1,255 + 800060a0: 00c78733 add a4,a5,a2 + 800060a4: 00060863 beqz a2,800060b4 + 800060a8: 00b78023 sb a1,0(a5) + 800060ac: 00178793 addi a5,a5,1 + 800060b0: fef71ce3 bne a4,a5,800060a8 + 800060b4: 00008067 ret + 800060b8: 00060693 mv a3,a2 + 800060bc: f6dff06f j 80006028 + +00000000800060c0 : + 800060c0: 1a050e63 beqz a0,8000627c + 800060c4: fd010113 addi sp,sp,-48 + 800060c8: 02813023 sd s0,32(sp) + 800060cc: 00913c23 sd s1,24(sp) + 800060d0: 01f57793 andi a5,a0,31 + 800060d4: 02113423 sd ra,40(sp) + 800060d8: 01213823 sd s2,16(sp) + 800060dc: 01313423 sd s3,8(sp) + 800060e0: 01413023 sd s4,0(sp) + 800060e4: 00050493 mv s1,a0 + 800060e8: 00050413 mv s0,a0 + 800060ec: 00000513 li a0,0 + 800060f0: 14079a63 bnez a5,80006244 + 800060f4: 27f00713 li a4,639 + 800060f8: 00058913 mv s2,a1 + 800060fc: 00078513 mv a0,a5 + 80006100: 14b77263 bgeu a4,a1,80006244 + 80006104: 0074f513 andi a0,s1,7 + 80006108: 00153513 seqz a0,a0 + 8000610c: 00060a13 mv s4,a2 + 80006110: 00068993 mv s3,a3 + 80006114: f8cfe0ef jal ra,800048a0 <_assert> + 80006118: 20048793 addi a5,s1,512 + 8000611c: 2004b023 sd zero,512(s1) + 80006120: 2144b423 sd s4,520(s1) + 80006124: 2134b823 sd s3,528(s1) + 80006128: 00043023 sd zero,0(s0) + 8000612c: 00840413 addi s0,s0,8 + 80006130: fe879ce3 bne a5,s0,80006128 + 80006134: fff00793 li a5,-1 + 80006138: dc090413 addi s0,s2,-576 + 8000613c: 03f79793 slli a5,a5,0x3f + 80006140: 1287f863 bgeu a5,s0,80006270 + 80006144: 00078413 mv s0,a5 + 80006148: 00100513 li a0,1 + 8000614c: f54fe0ef jal ra,800048a0 <_assert> + 80006150: f8300793 li a5,-125 + 80006154: 0017d793 srli a5,a5,0x1 + 80006158: fc040513 addi a0,s0,-64 + 8000615c: 00f53533 sltu a0,a0,a5 + 80006160: f40fe0ef jal ra,800048a0 <_assert> + 80006164: 01f4f513 andi a0,s1,31 + 80006168: 00153513 seqz a0,a0 + 8000616c: f34fe0ef jal ra,800048a0 <_assert> + 80006170: 00100513 li a0,1 + 80006174: 2404b023 sd zero,576(s1) + 80006178: 2404b423 sd zero,584(s1) + 8000617c: 2484b823 sd s0,592(s1) + 80006180: 24048c23 sb zero,600(s1) + 80006184: 2604b023 sd zero,608(s1) + 80006188: 2604b423 sd zero,616(s1) + 8000618c: f14fe0ef jal ra,800048a0 <_assert> + 80006190: 00100513 li a0,1 + 80006194: f0cfe0ef jal ra,800048a0 <_assert> + 80006198: 2504b503 ld a0,592(s1) + 8000619c: 24048a13 addi s4,s1,576 + 800061a0: 04053513 sltiu a0,a0,64 + 800061a4: 00154513 xori a0,a0,1 + 800061a8: 00157513 andi a0,a0,1 + 800061ac: ef4fe0ef jal ra,800048a0 <_assert> + 800061b0: 2504b503 ld a0,592(s1) + 800061b4: 03f57513 andi a0,a0,63 + 800061b8: 00153513 seqz a0,a0 + 800061bc: ee4fe0ef jal ra,800048a0 <_assert> + 800061c0: 2504b703 ld a4,592(s1) + 800061c4: 00100793 li a5,1 + 800061c8: 00675713 srli a4,a4,0x6 + 800061cc: 0ae7fc63 bgeu a5,a4,80006284 + 800061d0: 00000793 li a5,0 + 800061d4: 00100693 li a3,1 + 800061d8: 0017879b addiw a5,a5,1 + 800061dc: 00175713 srli a4,a4,0x1 + 800061e0: 0ff7f793 andi a5,a5,255 + 800061e4: fed71ae3 bne a4,a3,800061d8 + 800061e8: 00078993 mv s3,a5 + 800061ec: 0407b513 sltiu a0,a5,64 + 800061f0: 00f71933 sll s2,a4,a5 + 800061f4: eacfe0ef jal ra,800048a0 <_assert> + 800061f8: 00399793 slli a5,s3,0x3 + 800061fc: 00f487b3 add a5,s1,a5 + 80006200: 0007b703 ld a4,0(a5) + 80006204: 2604b423 sd zero,616(s1) + 80006208: 26e4b023 sd a4,608(s1) + 8000620c: 00070463 beqz a4,80006214 + 80006210: 03473423 sd s4,40(a4) + 80006214: 0147b023 sd s4,0(a5) + 80006218: 2004b503 ld a0,512(s1) + 8000621c: 00a96533 or a0,s2,a0 + 80006220: 20a4b023 sd a0,512(s1) + 80006224: 00a03533 snez a0,a0 + 80006228: e78fe0ef jal ra,800048a0 <_assert> + 8000622c: 00048513 mv a0,s1 + 80006230: 2084bc23 sd s0,536(s1) + 80006234: 2204b023 sd zero,544(s1) + 80006238: 2204b423 sd zero,552(s1) + 8000623c: 2204b823 sd zero,560(s1) + 80006240: 2204bc23 sd zero,568(s1) + 80006244: 02813083 ld ra,40(sp) + 80006248: 02013403 ld s0,32(sp) + 8000624c: 01813483 ld s1,24(sp) + 80006250: 01013903 ld s2,16(sp) + 80006254: 00813983 ld s3,8(sp) + 80006258: 00013a03 ld s4,0(sp) + 8000625c: 03010113 addi sp,sp,48 + 80006260: 00008067 ret + 80006264: 00100513 li a0,1 + 80006268: fff40413 addi s0,s0,-1 + 8000626c: e34fe0ef jal ra,800048a0 <_assert> + 80006270: 03f47793 andi a5,s0,63 + 80006274: fe0798e3 bnez a5,80006264 + 80006278: ed1ff06f j 80006148 + 8000627c: 00000513 li a0,0 + 80006280: 00008067 ret + 80006284: 00100913 li s2,1 + 80006288: 00000993 li s3,0 + 8000628c: 00100513 li a0,1 + 80006290: f65ff06f j 800061f4 diff --git a/bin/custom-output/hello/amtest-hello.elf b/bin/custom-output/hello/amtest-hello.elf new file mode 100755 index 0000000000000000000000000000000000000000..00bf4c1f9f74ae27c1738b8eb707f4fec0c7488c GIT binary patch literal 218320 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 z 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: + 80000000: 00000413 li s0,0 + 80000004: 0009f117 auipc sp,0x9f + 80000008: ffc10113 addi sp,sp,-4 # 8009f000 <_end> + 8000000c: 0b8010ef jal ra,800010c4 <_trm_init> + +0000000080000010
: + 80000010: fd010113 addi sp,sp,-48 + 80000014: 02113423 sd ra,40(sp) + 80000018: 02813023 sd s0,32(sp) + 8000001c: 00913c23 sd s1,24(sp) + 80000020: 01213823 sd s2,16(sp) + 80000024: 01313423 sd s3,8(sp) + 80000028: 00054783 lbu a5,0(a0) + 8000002c: 01500713 li a4,21 + 80000030: f9f7879b addiw a5,a5,-97 + 80000034: 0ff7f793 andi a5,a5,255 + 80000038: 02f76063 bltu a4,a5,80000058 + 8000003c: 00003717 auipc a4,0x3 + 80000040: 18070713 addi a4,a4,384 # 800031bc <_etext+0x2c> + 80000044: 00279793 slli a5,a5,0x2 + 80000048: 00e787b3 add a5,a5,a4 + 8000004c: 0007a783 lw a5,0(a5) + 80000050: 00e787b3 add a5,a5,a4 + 80000054: 00078067 jr a5 + 80000058: 00003517 auipc a0,0x3 + 8000005c: 13850513 addi a0,a0,312 # 80003190 <_etext> + 80000060: 1f1020ef jal ra,80002a50 + 80000064: 00003497 auipc s1,0x3 + 80000068: 28448493 addi s1,s1,644 # 800032e8 + 8000006c: 00000413 li s0,0 + 80000070: 10000913 li s2,256 + 80000074: 00003997 auipc s3,0x3 + 80000078: 13c98993 addi s3,s3,316 # 800031b0 <_etext+0x20> + 8000007c: 0014041b addiw s0,s0,1 + 80000080: 03240c63 beq s0,s2,800000b8 + 80000084: 0004b603 ld a2,0(s1) + 80000088: 00060863 beqz a2,80000098 + 8000008c: 00040593 mv a1,s0 + 80000090: 00098513 mv a0,s3 + 80000094: 1bd020ef jal ra,80002a50 + 80000098: 00848493 addi s1,s1,8 + 8000009c: fe1ff06f j 8000007c + 800000a0: 00000797 auipc a5,0x0 + 800000a4: 13c78793 addi a5,a5,316 # 800001dc + 800000a8: 00097717 auipc a4,0x97 + 800000ac: b0f73023 sd a5,-1280(a4) # 80096ba8 + 800000b0: 1e0010ef jal ra,80001290 + 800000b4: 128000ef jal ra,800001dc + 800000b8: 02813083 ld ra,40(sp) + 800000bc: 02013403 ld s0,32(sp) + 800000c0: 01813483 ld s1,24(sp) + 800000c4: 01013903 ld s2,16(sp) + 800000c8: 00813983 ld s3,8(sp) + 800000cc: 00000513 li a0,0 + 800000d0: 03010113 addi sp,sp,48 + 800000d4: 00008067 ret + 800000d8: 00001797 auipc a5,0x1 + 800000dc: ac078793 addi a5,a5,-1344 # 80000b98 + 800000e0: 00097717 auipc a4,0x97 + 800000e4: acf73423 sd a5,-1336(a4) # 80096ba8 + 800000e8: 1a8010ef jal ra,80001290 + 800000ec: 2ad000ef jal ra,80000b98 + 800000f0: fc9ff06f j 800000b8 + 800000f4: 00001797 auipc a5,0x1 + 800000f8: d2c78793 addi a5,a5,-724 # 80000e20 + 800000fc: 00097717 auipc a4,0x97 + 80000100: aaf73623 sd a5,-1364(a4) # 80096ba8 + 80000104: 51d000ef jal ra,80000e20 + 80000108: fb1ff06f j 800000b8 + 8000010c: 00001797 auipc a5,0x1 + 80000110: ef078793 addi a5,a5,-272 # 80000ffc + 80000114: 00097717 auipc a4,0x97 + 80000118: a8f73a23 sd a5,-1388(a4) # 80096ba8 + 8000011c: 174010ef jal ra,80001290 + 80000120: 00001517 auipc a0,0x1 + 80000124: e4850513 addi a0,a0,-440 # 80000f68 + 80000128: 634010ef jal ra,8000175c + 8000012c: 6d1000ef jal ra,80000ffc + 80000130: f89ff06f j 800000b8 + 80000134: 00001797 auipc a5,0x1 + 80000138: d3878793 addi a5,a5,-712 # 80000e6c + 8000013c: 00097717 auipc a4,0x97 + 80000140: a6f73623 sd a5,-1428(a4) # 80096ba8 + 80000144: 14c010ef jal ra,80001290 + 80000148: 525000ef jal ra,80000e6c + 8000014c: f6dff06f j 800000b8 + 80000150: 00001517 auipc a0,0x1 + 80000154: f1c50513 addi a0,a0,-228 # 8000106c + 80000158: 00097797 auipc a5,0x97 + 8000015c: a4a7b823 sd a0,-1456(a5) # 80096ba8 + 80000160: 7a4010ef jal ra,80001904 + 80000164: 709000ef jal ra,8000106c + 80000168: f51ff06f j 800000b8 + 8000016c: 00000797 auipc a5,0x0 + 80000170: 3b478793 addi a5,a5,948 # 80000520 + 80000174: 00000517 auipc a0,0x0 + 80000178: 22c50513 addi a0,a0,556 # 800003a0 + 8000017c: 00097717 auipc a4,0x97 + 80000180: a2f73623 sd a5,-1492(a4) # 80096ba8 + 80000184: 5d8010ef jal ra,8000175c + 80000188: 00000597 auipc a1,0x0 + 8000018c: 21458593 addi a1,a1,532 # 8000039c + 80000190: 00000517 auipc a0,0x0 + 80000194: 18450513 addi a0,a0,388 # 80000314 + 80000198: 74c010ef jal ra,800018e4 + 8000019c: 384000ef jal ra,80000520 + 800001a0: f19ff06f j 800000b8 + 800001a4: 00000797 auipc a5,0x0 + 800001a8: 51478793 addi a5,a5,1300 # 800006b8 + 800001ac: 00097717 auipc a4,0x97 + 800001b0: 9ef73e23 sd a5,-1540(a4) # 80096ba8 + 800001b4: 0dc010ef jal ra,80001290 + 800001b8: 500000ef jal ra,800006b8 + 800001bc: efdff06f j 800000b8 + 800001c0: 00001797 auipc a5,0x1 + 800001c4: 94078793 addi a5,a5,-1728 # 80000b00 + 800001c8: 00097717 auipc a4,0x97 + 800001cc: 9ef73023 sd a5,-1568(a4) # 80096ba8 + 800001d0: 0c0010ef jal ra,80001290 + 800001d4: 12d000ef jal ra,80000b00 + 800001d8: ee1ff06f j 800000b8 + +00000000800001dc : + 800001dc: fc010113 addi sp,sp,-64 + 800001e0: 00010593 mv a1,sp + 800001e4: 00e00513 li a0,14 + 800001e8: 02113c23 sd ra,56(sp) + 800001ec: 02813823 sd s0,48(sp) + 800001f0: 02913423 sd s1,40(sp) + 800001f4: 03213023 sd s2,32(sp) + 800001f8: 01313c23 sd s3,24(sp) + 800001fc: 01413823 sd s4,16(sp) + 80000200: 0e4010ef jal ra,800012e4 + 80000204: 00014783 lbu a5,0(sp) + 80000208: 0c078c63 beqz a5,800002e0 + 8000020c: 040007b7 lui a5,0x4000 + 80000210: 07d78793 addi a5,a5,125 # 400007d <_entry_offset+0x400007d> + 80000214: 00679793 slli a5,a5,0x6 + 80000218: 00004497 auipc s1,0x4 + 8000021c: 53048493 addi s1,s1,1328 # 80004748 + 80000220: 00012917 auipc s2,0x12 + 80000224: 33490913 addi s2,s2,820 # 80012554 <_data> + 80000228: 00f13023 sd a5,0(sp) + 8000022c: 00010593 mv a1,sp + 80000230: 40000793 li a5,1024 + 80000234: 00f00513 li a0,15 + 80000238: 4099093b subw s2,s2,s1 + 8000023c: 00f12423 sw a5,8(sp) + 80000240: 0c0010ef jal ra,80001300 + 80000244: 06090463 beqz s2,800002ac + 80000248: 00000413 li s0,0 + 8000024c: 00000793 li a5,0 + 80000250: 00001a37 lui s4,0x1 + 80000254: 00004997 auipc s3,0x4 + 80000258: 8c498993 addi s3,s3,-1852 # 80003b18 + 8000025c: 40f907bb subw a5,s2,a5 + 80000260: 0007869b sext.w a3,a5 + 80000264: 00048713 mv a4,s1 + 80000268: 00010593 mv a1,sp + 8000026c: 01100513 li a0,17 + 80000270: 00da7463 bgeu s4,a3,80000278 + 80000274: 000017b7 lui a5,0x1 + 80000278: 02079693 slli a3,a5,0x20 + 8000027c: 0206d693 srli a3,a3,0x20 + 80000280: 00d484b3 add s1,s1,a3 + 80000284: 0087843b addw s0,a5,s0 + 80000288: 00e13023 sd a4,0(sp) + 8000028c: 00913423 sd s1,8(sp) + 80000290: 070010ef jal ra,80001300 + 80000294: 00090613 mv a2,s2 + 80000298: 00040593 mv a1,s0 + 8000029c: 00098513 mv a0,s3 + 800002a0: 7b0020ef jal ra,80002a50 + 800002a4: 00040793 mv a5,s0 + 800002a8: fb246ae3 bltu s0,s2,8000025c + 800002ac: 00010593 mv a1,sp + 800002b0: 01000513 li a0,16 + 800002b4: 030010ef jal ra,800012e4 + 800002b8: 00012783 lw a5,0(sp) + 800002bc: fef048e3 bgtz a5,800002ac + 800002c0: 03813083 ld ra,56(sp) + 800002c4: 03013403 ld s0,48(sp) + 800002c8: 02813483 ld s1,40(sp) + 800002cc: 02013903 ld s2,32(sp) + 800002d0: 01813983 ld s3,24(sp) + 800002d4: 01013a03 ld s4,16(sp) + 800002d8: 04010113 addi sp,sp,64 + 800002dc: 00008067 ret + 800002e0: 00004597 auipc a1,0x4 + 800002e4: 80058593 addi a1,a1,-2048 # 80003ae0 + 800002e8: 00004517 auipc a0,0x4 + 800002ec: 80850513 addi a0,a0,-2040 # 80003af0 + 800002f0: 760020ef jal ra,80002a50 + 800002f4: 03813083 ld ra,56(sp) + 800002f8: 03013403 ld s0,48(sp) + 800002fc: 02813483 ld s1,40(sp) + 80000300: 02013903 ld s2,32(sp) + 80000304: 01813983 ld s3,24(sp) + 80000308: 01013a03 ld s4,16(sp) + 8000030c: 04010113 addi sp,sp,64 + 80000310: 00008067 ret + +0000000080000314 : + 80000314: fd010113 addi sp,sp,-48 + 80000318: 01313423 sd s3,8(sp) + 8000031c: 00097997 auipc s3,0x97 + 80000320: 89498993 addi s3,s3,-1900 # 80096bb0 + 80000324: 01213823 sd s2,16(sp) + 80000328: 0009b903 ld s2,0(s3) + 8000032c: 00913c23 sd s1,24(sp) + 80000330: 02113423 sd ra,40(sp) + 80000334: 02813023 sd s0,32(sp) + 80000338: 00050493 mv s1,a0 + 8000033c: 00091663 bnez s2,80000348 + 80000340: 00012917 auipc s2,0x12 + 80000344: 23093903 ld s2,560(s2) # 80012570 + 80000348: 00048593 mv a1,s1 + 8000034c: 00090513 mv a0,s2 + 80000350: 64d000ef jal ra,8000119c <__umoddi3> + 80000354: 02050063 beqz a0,80000374 + 80000358: 00190413 addi s0,s2,1 + 8000035c: 00040513 mv a0,s0 + 80000360: 00048593 mv a1,s1 + 80000364: 639000ef jal ra,8000119c <__umoddi3> + 80000368: 00040913 mv s2,s0 + 8000036c: 00140413 addi s0,s0,1 + 80000370: fe0516e3 bnez a0,8000035c + 80000374: 02813083 ld ra,40(sp) + 80000378: 02013403 ld s0,32(sp) + 8000037c: 012484b3 add s1,s1,s2 + 80000380: 0099b023 sd s1,0(s3) + 80000384: 00090513 mv a0,s2 + 80000388: 01813483 ld s1,24(sp) + 8000038c: 01013903 ld s2,16(sp) + 80000390: 00813983 ld s3,8(sp) + 80000394: 03010113 addi sp,sp,48 + 80000398: 00008067 ret + +000000008000039c : + 8000039c: 00008067 ret + +00000000800003a0 : + 800003a0: 00052783 lw a5,0(a0) + 800003a4: fe010113 addi sp,sp,-32 + 800003a8: 00813823 sd s0,16(sp) + 800003ac: 00113c23 sd ra,24(sp) + 800003b0: 00300713 li a4,3 + 800003b4: 00058413 mv s0,a1 + 800003b8: 0ce78663 beq a5,a4,80000484 + 800003bc: 08f76663 bltu a4,a5,80000448 + 800003c0: 00100713 li a4,1 + 800003c4: 0ae78063 beq a5,a4,80000464 + 800003c8: 00200713 li a4,2 + 800003cc: 12e79a63 bne a5,a4,80000500 + 800003d0: 00100513 li a0,1 + 800003d4: 3b4010ef jal ra,80001788 + 800003d8: 00012623 sw zero,12(sp) + 800003dc: 00c12783 lw a5,12(sp) + 800003e0: 000f4737 lui a4,0xf4 + 800003e4: 23f70713 addi a4,a4,575 # f423f <_entry_offset+0xf423f> + 800003e8: 0007879b sext.w a5,a5 + 800003ec: 00f74e63 blt a4,a5,80000408 + 800003f0: 00c12783 lw a5,12(sp) + 800003f4: 0017879b addiw a5,a5,1 + 800003f8: 00f12623 sw a5,12(sp) + 800003fc: 00c12783 lw a5,12(sp) + 80000400: 0007879b sext.w a5,a5 + 80000404: fef756e3 bge a4,a5,800003f0 + 80000408: 05043583 ld a1,80(s0) + 8000040c: 00003517 auipc a0,0x3 + 80000410: 78450513 addi a0,a0,1924 # 80003b90 + 80000414: 63c020ef jal ra,80002a50 + 80000418: 00012797 auipc a5,0x12 + 8000041c: 1507a783 lw a5,336(a5) # 80012568 + 80000420: 00078a63 beqz a5,80000434 + 80000424: 00012797 auipc a5,0x12 + 80000428: 1407a223 sw zero,324(a5) # 80012568 + 8000042c: 00096417 auipc s0,0x96 + 80000430: 78c43403 ld s0,1932(s0) # 80096bb8 + 80000434: 01813083 ld ra,24(sp) + 80000438: 00040513 mv a0,s0 + 8000043c: 01013403 ld s0,16(sp) + 80000440: 02010113 addi sp,sp,32 + 80000444: 00008067 ret + 80000448: ffb7879b addiw a5,a5,-5 + 8000044c: 00100713 li a4,1 + 80000450: 0af76863 bltu a4,a5,80000500 + 80000454: 01853583 ld a1,24(a0) + 80000458: 00003517 auipc a0,0x3 + 8000045c: 70850513 addi a0,a0,1800 # 80003b60 + 80000460: 5f0020ef jal ra,80002a50 + 80000464: 00012797 auipc a5,0x12 + 80000468: 1047a783 lw a5,260(a5) # 80012568 + 8000046c: fc0784e3 beqz a5,80000434 + 80000470: 00012797 auipc a5,0x12 + 80000474: 0e07ac23 sw zero,248(a5) # 80012568 + 80000478: 00096417 auipc s0,0x96 + 8000047c: 74043403 ld s0,1856(s0) # 80096bb8 + 80000480: fb5ff06f j 80000434 + 80000484: 00853783 ld a5,8(a0) + 80000488: 01053583 ld a1,16(a0) + 8000048c: 00003697 auipc a3,0x3 + 80000490: 6b468693 addi a3,a3,1716 # 80003b40 + 80000494: 0017f713 andi a4,a5,1 + 80000498: 04070663 beqz a4,800004e4 + 8000049c: 0027f793 andi a5,a5,2 + 800004a0: 00003717 auipc a4,0x3 + 800004a4: 6b070713 addi a4,a4,1712 # 80003b50 + 800004a8: 00078e63 beqz a5,800004c4 + 800004ac: 00003617 auipc a2,0x3 + 800004b0: 73c60613 addi a2,a2,1852 # 80003be8 + 800004b4: 00003517 auipc a0,0x3 + 800004b8: 6cc50513 addi a0,a0,1740 # 80003b80 + 800004bc: 594020ef jal ra,80002a50 + 800004c0: fa5ff06f j 80000464 + 800004c4: 00003717 auipc a4,0x3 + 800004c8: 72470713 addi a4,a4,1828 # 80003be8 + 800004cc: 00003617 auipc a2,0x3 + 800004d0: 71c60613 addi a2,a2,1820 # 80003be8 + 800004d4: 00003517 auipc a0,0x3 + 800004d8: 6ac50513 addi a0,a0,1708 # 80003b80 + 800004dc: 574020ef jal ra,80002a50 + 800004e0: f85ff06f j 80000464 + 800004e4: 0027f793 andi a5,a5,2 + 800004e8: 00003697 auipc a3,0x3 + 800004ec: 70068693 addi a3,a3,1792 # 80003be8 + 800004f0: 00003717 auipc a4,0x3 + 800004f4: 66070713 addi a4,a4,1632 # 80003b50 + 800004f8: fa079ae3 bnez a5,800004ac + 800004fc: fc9ff06f j 800004c4 + 80000500: 02800613 li a2,40 + 80000504: 00003597 auipc a1,0x3 + 80000508: 69458593 addi a1,a1,1684 # 80003b98 + 8000050c: 00003517 auipc a0,0x3 + 80000510: 6c450513 addi a0,a0,1732 # 80003bd0 + 80000514: 53c020ef jal ra,80002a50 + 80000518: 00100513 li a0,1 + 8000051c: 385000ef jal ra,800010a0 + +0000000080000520 : + 80000520: fc010113 addi sp,sp,-64 + 80000524: 00300613 li a2,3 + 80000528: 00003597 auipc a1,0x3 + 8000052c: 6c858593 addi a1,a1,1736 # 80003bf0 + 80000530: 00003517 auipc a0,0x3 + 80000534: 6c850513 addi a0,a0,1736 # 80003bf8 + 80000538: 02113c23 sd ra,56(sp) + 8000053c: 02813823 sd s0,48(sp) + 80000540: 02913423 sd s1,40(sp) + 80000544: 03213023 sd s2,32(sp) + 80000548: 01313c23 sd s3,24(sp) + 8000054c: 01413823 sd s4,16(sp) + 80000550: 554020ef jal ra,80002aa4 + 80000554: 00050e63 beqz a0,80000570 + 80000558: 00003597 auipc a1,0x3 + 8000055c: 6a858593 addi a1,a1,1704 # 80003c00 + 80000560: 00003517 auipc a0,0x3 + 80000564: 69850513 addi a0,a0,1688 # 80003bf8 + 80000568: 3ac010ef jal ra,80001914 + 8000056c: 12051263 bnez a0,80000690 + 80000570: 00012417 auipc s0,0x12 + 80000574: 41840413 addi s0,s0,1048 # 80012988 + 80000578: 00040513 mv a0,s0 + 8000057c: 370010ef jal ra,800018ec + 80000580: 01043603 ld a2,16(s0) + 80000584: 00843583 ld a1,8(s0) + 80000588: 00003517 auipc a0,0x3 + 8000058c: 6a050513 addi a0,a0,1696 # 80003c28 + 80000590: 00096a17 auipc s4,0x96 + 80000594: 620a0a13 addi s4,s4,1568 # 80096bb0 + 80000598: 4b8020ef jal ra,80002a50 + 8000059c: 00843783 ld a5,8(s0) + 800005a0: 01043983 ld s3,16(s0) + 800005a4: 000a3483 ld s1,0(s4) + 800005a8: 00042903 lw s2,0(s0) + 800005ac: 40f989b3 sub s3,s3,a5 + 800005b0: 0019d993 srli s3,s3,0x1 + 800005b4: 00f989b3 add s3,s3,a5 + 800005b8: 0c048663 beqz s1,80000684 + 800005bc: 00090593 mv a1,s2 + 800005c0: 00048513 mv a0,s1 + 800005c4: 3d9000ef jal ra,8000119c <__umoddi3> + 800005c8: 02050063 beqz a0,800005e8 + 800005cc: 00148413 addi s0,s1,1 + 800005d0: 00040513 mv a0,s0 + 800005d4: 00090593 mv a1,s2 + 800005d8: 3c5000ef jal ra,8000119c <__umoddi3> + 800005dc: 00040493 mv s1,s0 + 800005e0: 00140413 addi s0,s0,1 + 800005e4: fe0516e3 bnez a0,800005d0 + 800005e8: 00990933 add s2,s2,s1 + 800005ec: 00f00613 li a2,15 + 800005f0: 00012597 auipc a1,0x12 + 800005f4: f6858593 addi a1,a1,-152 # 80012558 + 800005f8: 00048513 mv a0,s1 + 800005fc: 012a3023 sd s2,0(s4) + 80000600: 65c020ef jal ra,80002c5c + 80000604: 00300693 li a3,3 + 80000608: 00048613 mv a2,s1 + 8000060c: 00098593 mv a1,s3 + 80000610: 00012517 auipc a0,0x12 + 80000614: 37850513 addi a0,a0,888 # 80012988 + 80000618: 2d8010ef jal ra,800018f0 + 8000061c: 00048613 mv a2,s1 + 80000620: 00098593 mv a1,s3 + 80000624: 00003517 auipc a0,0x3 + 80000628: 62c50513 addi a0,a0,1580 # 80003c50 + 8000062c: 424020ef jal ra,80002a50 + 80000630: 00098693 mv a3,s3 + 80000634: 00012597 auipc a1,0x12 + 80000638: 37458593 addi a1,a1,884 # 800129a8 + 8000063c: 00013617 auipc a2,0x13 + 80000640: 36c60613 addi a2,a2,876 # 800139a8 + 80000644: 00012517 auipc a0,0x12 + 80000648: 34450513 addi a0,a0,836 # 80012988 + 8000064c: 2a8010ef jal ra,800018f4 + 80000650: 00050793 mv a5,a0 + 80000654: 00100513 li a0,1 + 80000658: 00096717 auipc a4,0x96 + 8000065c: 56f73023 sd a5,1376(a4) # 80096bb8 + 80000660: 128010ef jal ra,80001788 + 80000664: 03013403 ld s0,48(sp) + 80000668: 03813083 ld ra,56(sp) + 8000066c: 02813483 ld s1,40(sp) + 80000670: 02013903 ld s2,32(sp) + 80000674: 01813983 ld s3,24(sp) + 80000678: 01013a03 ld s4,16(sp) + 8000067c: 04010113 addi sp,sp,64 + 80000680: 0fc0106f j 8000177c + 80000684: 00012497 auipc s1,0x12 + 80000688: eec4b483 ld s1,-276(s1) # 80012570 + 8000068c: f31ff06f j 800005bc + 80000690: 03013403 ld s0,48(sp) + 80000694: 03813083 ld ra,56(sp) + 80000698: 02813483 ld s1,40(sp) + 8000069c: 02013903 ld s2,32(sp) + 800006a0: 01813983 ld s3,24(sp) + 800006a4: 01013a03 ld s4,16(sp) + 800006a8: 00003517 auipc a0,0x3 + 800006ac: 56050513 addi a0,a0,1376 # 80003c08 + 800006b0: 04010113 addi sp,sp,64 + 800006b4: 39c0206f j 80002a50 + +00000000800006b8 : + 800006b8: fa010113 addi sp,sp,-96 + 800006bc: 04913423 sd s1,72(sp) + 800006c0: 000f44b7 lui s1,0xf4 + 800006c4: 04813823 sd s0,80(sp) + 800006c8: 03313c23 sd s3,56(sp) + 800006cc: 03413823 sd s4,48(sp) + 800006d0: 03513423 sd s5,40(sp) + 800006d4: 03613023 sd s6,32(sp) + 800006d8: 04113c23 sd ra,88(sp) + 800006dc: 05213023 sd s2,64(sp) + 800006e0: 00100413 li s0,1 + 800006e4: 24048493 addi s1,s1,576 # f4240 <_entry_offset+0xf4240> + 800006e8: 00003a17 auipc s4,0x3 + 800006ec: 598a0a13 addi s4,s4,1432 # 80003c80 + 800006f0: 00100993 li s3,1 + 800006f4: 00003b17 auipc s6,0x3 + 800006f8: 5bcb0b13 addi s6,s6,1468 # 80003cb0 + 800006fc: 00003a97 auipc s5,0x3 + 80000700: 5a4a8a93 addi s5,s5,1444 # 80003ca0 + 80000704: 0004091b sext.w s2,s0 + 80000708: 00600513 li a0,6 + 8000070c: 00810593 addi a1,sp,8 + 80000710: 3d5000ef jal ra,800012e4 + 80000714: 00813503 ld a0,8(sp) + 80000718: 00048593 mv a1,s1 + 8000071c: 239000ef jal ra,80001154 <__udivdi3> + 80000720: fe8564e3 bltu a0,s0,80000708 + 80000724: 00810593 addi a1,sp,8 + 80000728: 00500513 li a0,5 + 8000072c: 3b9000ef jal ra,800012e4 + 80000730: 01c12803 lw a6,28(sp) + 80000734: 01812783 lw a5,24(sp) + 80000738: 01412703 lw a4,20(sp) + 8000073c: 01012683 lw a3,16(sp) + 80000740: 00c12603 lw a2,12(sp) + 80000744: 00812583 lw a1,8(sp) + 80000748: 000a0513 mv a0,s4 + 8000074c: 304020ef jal ra,80002a50 + 80000750: 01341c63 bne s0,s3,80000768 + 80000754: 00100593 li a1,1 + 80000758: 000a8513 mv a0,s5 + 8000075c: 2f4020ef jal ra,80002a50 + 80000760: 00140413 addi s0,s0,1 + 80000764: fa1ff06f j 80000704 + 80000768: 00090593 mv a1,s2 + 8000076c: 000b0513 mv a0,s6 + 80000770: 2e0020ef jal ra,80002a50 + 80000774: 00140413 addi s0,s0,1 + 80000778: f8dff06f j 80000704 + +000000008000077c : + 8000077c: f7010113 addi sp,sp,-144 + 80000780: 00010593 mv a1,sp + 80000784: 00900513 li a0,9 + 80000788: 08113423 sd ra,136(sp) + 8000078c: 07213823 sd s2,112(sp) + 80000790: 07413023 sd s4,96(sp) + 80000794: 08813023 sd s0,128(sp) + 80000798: 06913c23 sd s1,120(sp) + 8000079c: 07313423 sd s3,104(sp) + 800007a0: 05513c23 sd s5,88(sp) + 800007a4: 05613823 sd s6,80(sp) + 800007a8: 05713423 sd s7,72(sp) + 800007ac: 05813023 sd s8,64(sp) + 800007b0: 03913c23 sd s9,56(sp) + 800007b4: 03a13823 sd s10,48(sp) + 800007b8: 03b13423 sd s11,40(sp) + 800007bc: 329000ef jal ra,800012e4 + 800007c0: 00412783 lw a5,4(sp) + 800007c4: 00010593 mv a1,sp + 800007c8: 00900513 li a0,9 + 800007cc: 41f7da1b sraiw s4,a5,0x1f + 800007d0: 01ba5a1b srliw s4,s4,0x1b + 800007d4: 00fa0a3b addw s4,s4,a5 + 800007d8: 30d000ef jal ra,800012e4 + 800007dc: 00812783 lw a5,8(sp) + 800007e0: 405a5a1b sraiw s4,s4,0x5 + 800007e4: 000a0513 mv a0,s4 + 800007e8: 41f7d91b sraiw s2,a5,0x1f + 800007ec: 01b9591b srliw s2,s2,0x1b + 800007f0: 00f9093b addw s2,s2,a5 + 800007f4: 4059591b sraiw s2,s2,0x5 + 800007f8: 00090593 mv a1,s2 + 800007fc: 0ed000ef jal ra,800010e8 <__muldi3> + 80000800: 0005079b sext.w a5,a0 + 80000804: 40000713 li a4,1024 + 80000808: 0ef76e63 bltu a4,a5,80000904 + 8000080c: fff7841b addiw s0,a5,-1 + 80000810: 02041413 slli s0,s0,0x20 + 80000814: 00078a93 mv s5,a5 + 80000818: 01e45413 srli s0,s0,0x1e + 8000081c: 00014797 auipc a5,0x14 + 80000820: 19078793 addi a5,a5,400 # 800149ac + 80000824: 00013997 auipc s3,0x13 + 80000828: 20498993 addi s3,s3,516 # 80013a28 + 8000082c: 00014c17 auipc s8,0x14 + 80000830: 1fcc0c13 addi s8,s8,508 # 80014a28 + 80000834: 00014497 auipc s1,0x14 + 80000838: 17448493 addi s1,s1,372 # 800149a8 + 8000083c: 00f40433 add s0,s0,a5 + 80000840: 00000c93 li s9,0 + 80000844: 000a0b9b sext.w s7,s4 + 80000848: 000c8b1b sext.w s6,s9 + 8000084c: f8098d13 addi s10,s3,-128 + 80000850: 00000d93 li s11,0 + 80000854: 000a8c63 beqz s5,8000086c + 80000858: 000d2703 lw a4,0(s10) + 8000085c: 00048793 mv a5,s1 + 80000860: 00e7a023 sw a4,0(a5) + 80000864: 00478793 addi a5,a5,4 + 80000868: fe879ce3 bne a5,s0,80000860 + 8000086c: 004d0d13 addi s10,s10,4 + 80000870: 00010593 mv a1,sp + 80000874: 00b00513 li a0,11 + 80000878: 01b12023 sw s11,0(sp) + 8000087c: 01612223 sw s6,4(sp) + 80000880: 00913423 sd s1,8(sp) + 80000884: 01412823 sw s4,16(sp) + 80000888: 01212a23 sw s2,20(sp) + 8000088c: 00010c23 sb zero,24(sp) + 80000890: 017d8dbb addw s11,s11,s7 + 80000894: 26d000ef jal ra,80001300 + 80000898: fb3d1ee3 bne s10,s3,80000854 + 8000089c: 080d0993 addi s3,s10,128 + 800008a0: 01990cbb addw s9,s2,s9 + 800008a4: fb8992e3 bne s3,s8,80000848 + 800008a8: 00010593 mv a1,sp + 800008ac: 00100793 li a5,1 + 800008b0: 00b00513 li a0,11 + 800008b4: 00013023 sd zero,0(sp) + 800008b8: 00013423 sd zero,8(sp) + 800008bc: 00013823 sd zero,16(sp) + 800008c0: 00f10c23 sb a5,24(sp) + 800008c4: 23d000ef jal ra,80001300 + 800008c8: 08813083 ld ra,136(sp) + 800008cc: 08013403 ld s0,128(sp) + 800008d0: 07813483 ld s1,120(sp) + 800008d4: 07013903 ld s2,112(sp) + 800008d8: 06813983 ld s3,104(sp) + 800008dc: 06013a03 ld s4,96(sp) + 800008e0: 05813a83 ld s5,88(sp) + 800008e4: 05013b03 ld s6,80(sp) + 800008e8: 04813b83 ld s7,72(sp) + 800008ec: 04013c03 ld s8,64(sp) + 800008f0: 03813c83 ld s9,56(sp) + 800008f4: 03013d03 ld s10,48(sp) + 800008f8: 02813d83 ld s11,40(sp) + 800008fc: 09010113 addi sp,sp,144 + 80000900: 00008067 ret + 80000904: 01600613 li a2,22 + 80000908: 00003597 auipc a1,0x3 + 8000090c: 3b858593 addi a1,a1,952 # 80003cc0 + 80000910: 00003517 auipc a0,0x3 + 80000914: 2c050513 addi a0,a0,704 # 80003bd0 + 80000918: 138020ef jal ra,80002a50 + 8000091c: 00100513 li a0,1 + 80000920: 780000ef jal ra,800010a0 + +0000000080000924 : + 80000924: 00096617 auipc a2,0x96 + 80000928: 29c60613 addi a2,a2,668 # 80096bc0 + 8000092c: 00062783 lw a5,0(a2) + 80000930: fe010113 addi sp,sp,-32 + 80000934: 00813c23 sd s0,24(sp) + 80000938: 00913823 sd s1,16(sp) + 8000093c: 01213423 sd s2,8(sp) + 80000940: 01313023 sd s3,0(sp) + 80000944: 0017839b addiw t2,a5,1 + 80000948: 00015717 auipc a4,0x15 + 8000094c: 0e070713 addi a4,a4,224 # 80015a28 + 80000950: 00016697 auipc a3,0x16 + 80000954: 0d868693 addi a3,a3,216 # 80016a28 + 80000958: 00762023 sw t2,0(a2) + 8000095c: f8070793 addi a5,a4,-128 + 80000960: 0007a023 sw zero,0(a5) + 80000964: 00478793 addi a5,a5,4 + 80000968: fee79ce3 bne a5,a4,80000960 + 8000096c: 08078713 addi a4,a5,128 + 80000970: fee696e3 bne a3,a4,8000095c + 80000974: 0ff3f693 andi a3,t2,255 + 80000978: 0016979b slliw a5,a3,0x1 + 8000097c: 00d787bb addw a5,a5,a3 + 80000980: 0036971b slliw a4,a3,0x3 + 80000984: 40d7073b subw a4,a4,a3 + 80000988: 0017979b slliw a5,a5,0x1 + 8000098c: 0ff7f793 andi a5,a5,255 + 80000990: 0ff77713 andi a4,a4,255 + 80000994: 0087171b slliw a4,a4,0x8 + 80000998: 0107979b slliw a5,a5,0x10 + 8000099c: 00e7e7b3 or a5,a5,a4 + 800009a0: 0ff3f713 andi a4,t2,255 + 800009a4: 00e7e7b3 or a5,a5,a4 + 800009a8: 00013417 auipc s0,0x13 + 800009ac: 00040413 mv s0,s0 + 800009b0: 00015f97 auipc t6,0x15 + 800009b4: ff8f8f93 addi t6,t6,-8 # 800159a8 + 800009b8: 00f42023 sw a5,0(s0) # 800139a8 + 800009bc: 00100793 li a5,1 + 800009c0: 00ffa023 sw a5,0(t6) + 800009c4: 00100693 li a3,1 + 800009c8: 00000713 li a4,0 + 800009cc: 00100f13 li t5,1 + 800009d0: 00000593 li a1,0 + 800009d4: 00000e93 li t4,0 + 800009d8: 00000e13 li t3,0 + 800009dc: 01f00813 li a6,31 + 800009e0: 00003317 auipc t1,0x3 + 800009e4: 33030313 addi t1,t1,816 # 80003d10 + 800009e8: 00003897 auipc a7,0x3 + 800009ec: 33888893 addi a7,a7,824 # 80003d20 + 800009f0: 00100493 li s1,1 + 800009f4: 40000293 li t0,1024 + 800009f8: 00400613 li a2,4 + 800009fc: 00ee07bb addw a5,t3,a4 + 80000a00: fff6061b addiw a2,a2,-1 + 80000a04: 00158713 addi a4,a1,1 + 80000a08: 00de86bb addw a3,t4,a3 + 80000a0c: 02f86063 bltu a6,a5,80000a2c + 80000a10: 00579513 slli a0,a5,0x5 + 80000a14: 00d50533 add a0,a0,a3 + 80000a18: 00251513 slli a0,a0,0x2 + 80000a1c: 00af8933 add s2,t6,a0 + 80000a20: 00d86663 bltu a6,a3,80000a2c + 80000a24: 00092983 lw s3,0(s2) + 80000a28: 06098463 beqz s3,80000a90 + 80000a2c: 00377593 andi a1,a4,3 + 80000a30: 00259793 slli a5,a1,0x2 + 80000a34: 00f30733 add a4,t1,a5 + 80000a38: 00f887b3 add a5,a7,a5 + 80000a3c: 02060a63 beqz a2,80000a70 + 80000a40: 00072703 lw a4,0(a4) + 80000a44: 0007a683 lw a3,0(a5) + 80000a48: fff6061b addiw a2,a2,-1 + 80000a4c: 00ee07bb addw a5,t3,a4 + 80000a50: 00de86bb addw a3,t4,a3 + 80000a54: 00158713 addi a4,a1,1 + 80000a58: faf87ce3 bgeu a6,a5,80000a10 + 80000a5c: 00377593 andi a1,a4,3 + 80000a60: 00259793 slli a5,a1,0x2 + 80000a64: 00f30733 add a4,t1,a5 + 80000a68: 00f887b3 add a5,a7,a5 + 80000a6c: fc061ae3 bnez a2,80000a40 + 80000a70: 001f0f1b addiw t5,t5,1 + 80000a74: 065f0a63 beq t5,t0,80000ae8 + 80000a78: 00259793 slli a5,a1,0x2 + 80000a7c: 00f30733 add a4,t1,a5 + 80000a80: 00f887b3 add a5,a7,a5 + 80000a84: 00072703 lw a4,0(a4) + 80000a88: 0007a683 lw a3,0(a5) + 80000a8c: f6dff06f j 800009f8 + 80000a90: 401f5e1b sraiw t3,t5,0x1 + 80000a94: 007e0e3b addw t3,t3,t2 + 80000a98: 0ffe7e93 andi t4,t3,255 + 80000a9c: 001e971b slliw a4,t4,0x1 + 80000aa0: 01d7073b addw a4,a4,t4 + 80000aa4: 003e961b slliw a2,t4,0x3 + 80000aa8: 41d6063b subw a2,a2,t4 + 80000aac: 0017171b slliw a4,a4,0x1 + 80000ab0: 0ff77713 andi a4,a4,255 + 80000ab4: 0ff67613 andi a2,a2,255 + 80000ab8: 0107171b slliw a4,a4,0x10 + 80000abc: 0086161b slliw a2,a2,0x8 + 80000ac0: 0ffe7e13 andi t3,t3,255 + 80000ac4: 00c76733 or a4,a4,a2 + 80000ac8: 01c76733 or a4,a4,t3 + 80000acc: 00a40533 add a0,s0,a0 + 80000ad0: 00992023 sw s1,0(s2) + 80000ad4: 00e52023 sw a4,0(a0) + 80000ad8: 001f0f1b addiw t5,t5,1 + 80000adc: 00068e93 mv t4,a3 + 80000ae0: 00078e13 mv t3,a5 + 80000ae4: f85f1ae3 bne t5,t0,80000a78 + 80000ae8: 01813403 ld s0,24(sp) + 80000aec: 01013483 ld s1,16(sp) + 80000af0: 00813903 ld s2,8(sp) + 80000af4: 00013983 ld s3,0(sp) + 80000af8: 02010113 addi sp,sp,32 + 80000afc: 00008067 ret + +0000000080000b00 : + 80000b00: fb010113 addi sp,sp,-80 + 80000b04: 02913c23 sd s1,56(sp) + 80000b08: 03213823 sd s2,48(sp) + 80000b0c: 03313423 sd s3,40(sp) + 80000b10: 03413023 sd s4,32(sp) + 80000b14: 01513c23 sd s5,24(sp) + 80000b18: 04113423 sd ra,72(sp) + 80000b1c: 04813023 sd s0,64(sp) + 80000b20: 00000993 li s3,0 + 80000b24: 00000913 li s2,0 + 80000b28: 00000493 li s1,0 + 80000b2c: 02100a13 li s4,33 + 80000b30: 00003a97 auipc s5,0x3 + 80000b34: 1d0a8a93 addi s5,s5,464 # 80003d00 + 80000b38: 00810593 addi a1,sp,8 + 80000b3c: 00600513 li a0,6 + 80000b40: 7a4000ef jal ra,800012e4 + 80000b44: 00813503 ld a0,8(sp) + 80000b48: 3e800593 li a1,1000 + 80000b4c: 608000ef jal ra,80001154 <__udivdi3> + 80000b50: 409507b3 sub a5,a0,s1 + 80000b54: 00050413 mv s0,a0 + 80000b58: 02fa6663 bltu s4,a5,80000b84 + 80000b5c: 412407b3 sub a5,s0,s2 + 80000b60: 3e800713 li a4,1000 + 80000b64: fcf77ae3 bgeu a4,a5,80000b38 + 80000b68: 00098613 mv a2,s3 + 80000b6c: 00040593 mv a1,s0 + 80000b70: 000a8513 mv a0,s5 + 80000b74: 6dd010ef jal ra,80002a50 + 80000b78: 00040913 mv s2,s0 + 80000b7c: 00000993 li s3,0 + 80000b80: fb9ff06f j 80000b38 + 80000b84: da1ff0ef jal ra,80000924 + 80000b88: 0019899b addiw s3,s3,1 + 80000b8c: bf1ff0ef jal ra,8000077c + 80000b90: 00040493 mv s1,s0 + 80000b94: fc9ff06f j 80000b5c + +0000000080000b98 : + 80000b98: 00012797 auipc a5,0x12 + 80000b9c: 9d878793 addi a5,a5,-1576 # 80012570 + 80000ba0: 0007b583 ld a1,0(a5) + 80000ba4: 0087b603 ld a2,8(a5) + 80000ba8: fb010113 addi sp,sp,-80 + 80000bac: 00003517 auipc a0,0x3 + 80000bb0: 18450513 addi a0,a0,388 # 80003d30 + 80000bb4: 04113423 sd ra,72(sp) + 80000bb8: 02913c23 sd s1,56(sp) + 80000bbc: 04813023 sd s0,64(sp) + 80000bc0: 03213823 sd s2,48(sp) + 80000bc4: 03313423 sd s3,40(sp) + 80000bc8: 03413023 sd s4,32(sp) + 80000bcc: 685010ef jal ra,80002a50 + 80000bd0: 00003517 auipc a0,0x3 + 80000bd4: 17850513 addi a0,a0,376 # 80003d48 + 80000bd8: 679010ef jal ra,80002a50 + 80000bdc: 00810593 addi a1,sp,8 + 80000be0: 00600513 li a0,6 + 80000be4: 700000ef jal ra,800012e4 + 80000be8: 00813503 ld a0,8(sp) + 80000bec: 3e800593 li a1,1000 + 80000bf0: 564000ef jal ra,80001154 <__udivdi3> + 80000bf4: 00012223 sw zero,4(sp) + 80000bf8: 00412703 lw a4,4(sp) + 80000bfc: 009897b7 lui a5,0x989 + 80000c00: 67f78793 addi a5,a5,1663 # 98967f <_entry_offset+0x98967f> + 80000c04: 0007071b sext.w a4,a4 + 80000c08: 0005049b sext.w s1,a0 + 80000c0c: 00e7ce63 blt a5,a4,80000c28 + 80000c10: 00412703 lw a4,4(sp) + 80000c14: 0017071b addiw a4,a4,1 + 80000c18: 00e12223 sw a4,4(sp) + 80000c1c: 00412703 lw a4,4(sp) + 80000c20: 0007071b sext.w a4,a4 + 80000c24: fee7d6e3 bge a5,a4,80000c10 + 80000c28: 00810593 addi a1,sp,8 + 80000c2c: 00600513 li a0,6 + 80000c30: 6b4000ef jal ra,800012e4 + 80000c34: 00813503 ld a0,8(sp) + 80000c38: 3e800593 li a1,1000 + 80000c3c: 00016417 auipc s0,0x16 + 80000c40: 03c40413 addi s0,s0,60 # 80016c78 + 80000c44: 510000ef jal ra,80001154 <__udivdi3> + 80000c48: 409505bb subw a1,a0,s1 + 80000c4c: 00003517 auipc a0,0x3 + 80000c50: 11c50513 addi a0,a0,284 # 80003d68 + 80000c54: 5fd010ef jal ra,80002a50 + 80000c58: 00810593 addi a1,sp,8 + 80000c5c: 00900513 li a0,9 + 80000c60: 684000ef jal ra,800012e4 + 80000c64: 00c12983 lw s3,12(sp) + 80000c68: 01012903 lw s2,16(sp) + 80000c6c: 00003517 auipc a0,0x3 + 80000c70: 11c50513 addi a0,a0,284 # 80003d88 + 80000c74: 00098593 mv a1,s3 + 80000c78: 00090613 mv a2,s2 + 80000c7c: 5d5010ef jal ra,80002a50 + 80000c80: 00096497 auipc s1,0x96 + 80000c84: f2848493 addi s1,s1,-216 # 80096ba8 + 80000c88: 4b5000ef jal ra,8000193c + 80000c8c: 00a40023 sb a0,0(s0) + 80000c90: 00140413 addi s0,s0,1 + 80000c94: fe941ae3 bne s0,s1,80000c88 + 80000c98: 41f9d71b sraiw a4,s3,0x1f + 80000c9c: 01e7571b srliw a4,a4,0x1e + 80000ca0: 0137073b addw a4,a4,s3 + 80000ca4: 00016797 auipc a5,0x16 + 80000ca8: f0478793 addi a5,a5,-252 # 80016ba8 + 80000cac: 4027571b sraiw a4,a4,0x2 + 80000cb0: 00e79323 sh a4,6(a5) + 80000cb4: 00016717 auipc a4,0x16 + 80000cb8: ee071e23 sh zero,-260(a4) # 80016bb0 + 80000cbc: 01f9d69b srliw a3,s3,0x1f + 80000cc0: 02500713 li a4,37 + 80000cc4: ffff0637 lui a2,0xffff0 + 80000cc8: 00e79923 sh a4,18(a5) + 80000ccc: 013686bb addw a3,a3,s3 + 80000cd0: 0016061b addiw a2,a2,1 + 80000cd4: 00a00713 li a4,10 + 80000cd8: fff00813 li a6,-1 + 80000cdc: 4016d69b sraiw a3,a3,0x1 + 80000ce0: 00c7a023 sw a2,0(a5) + 80000ce4: 00e79a23 sh a4,20(a5) + 80000ce8: fff00613 li a2,-1 + 80000cec: 0d000713 li a4,208 + 80000cf0: f9c9091b addiw s2,s2,-100 + 80000cf4: 00e79b23 sh a4,22(a5) + 80000cf8: 00d79523 sh a3,10(a5) + 80000cfc: 01079723 sh a6,14(a5) + 80000d00: 01079823 sh a6,16(a5) + 80000d04: 00c79223 sh a2,4(a5) + 80000d08: 01279623 sh s2,12(a5) + 80000d0c: 00810593 addi a1,sp,8 + 80000d10: 00c00513 li a0,12 + 80000d14: 00f13823 sd a5,16(sp) + 80000d18: 000807b7 lui a5,0x80 + 80000d1c: 00f12c23 sw a5,24(sp) + 80000d20: 00016717 auipc a4,0x16 + 80000d24: ea071023 sh zero,-352(a4) # 80016bc0 + 80000d28: 00012423 sw zero,8(sp) + 80000d2c: 5d4000ef jal ra,80001300 + 80000d30: 00d00513 li a0,13 + 80000d34: 00810593 addi a1,sp,8 + 80000d38: 00012423 sw zero,8(sp) + 80000d3c: 5c4000ef jal ra,80001300 + 80000d40: 00810593 addi a1,sp,8 + 80000d44: 01200513 li a0,18 + 80000d48: 59c000ef jal ra,800012e4 + 80000d4c: 00c12483 lw s1,12(sp) + 80000d50: 01012583 lw a1,16(sp) + 80000d54: 00003517 auipc a0,0x3 + 80000d58: 04c50513 addi a0,a0,76 # 80003da0 + 80000d5c: 00048613 mv a2,s1 + 80000d60: 4f1010ef jal ra,80002a50 + 80000d64: 00016417 auipc s0,0x16 + 80000d68: c4440413 addi s0,s0,-956 # 800169a8 + 80000d6c: 00048593 mv a1,s1 + 80000d70: 20000513 li a0,512 + 80000d74: 00813823 sd s0,16(sp) + 80000d78: 00010423 sb zero,8(sp) + 80000d7c: 00012c23 sw zero,24(sp) + 80000d80: 3cc000ef jal ra,8000114c <__divdi3> + 80000d84: 00050793 mv a5,a0 + 80000d88: 00810593 addi a1,sp,8 + 80000d8c: 01400513 li a0,20 + 80000d90: 00f12e23 sw a5,28(sp) + 80000d94: 56c000ef jal ra,80001300 + 80000d98: 00144603 lbu a2,1(s0) + 80000d9c: 00044583 lbu a1,0(s0) + 80000da0: 00003517 auipc a0,0x3 + 80000da4: 03850513 addi a0,a0,56 # 80003dd8 + 80000da8: 00016417 auipc s0,0x16 + 80000dac: c0240413 addi s0,s0,-1022 # 800169aa + 80000db0: 4a1010ef jal ra,80002a50 + 80000db4: 00003917 auipc s2,0x3 + 80000db8: 02490913 addi s2,s2,36 # 80003dd8 + 80000dbc: 00400493 li s1,4 + 80000dc0: 00016997 auipc s3,0x16 + 80000dc4: de898993 addi s3,s3,-536 # 80016ba8 + 80000dc8: 408484bb subw s1,s1,s0 + 80000dcc: 00003a17 auipc s4,0x3 + 80000dd0: d6ca0a13 addi s4,s4,-660 # 80003b38 + 80000dd4: 00090513 mv a0,s2 + 80000dd8: 03340463 beq s0,s3,80000e00 + 80000ddc: 00144603 lbu a2,1(s0) + 80000de0: 00044583 lbu a1,0(s0) + 80000de4: 46d010ef jal ra,80002a50 + 80000de8: 008487bb addw a5,s1,s0 + 80000dec: 01f7f793 andi a5,a5,31 + 80000df0: 02078063 beqz a5,80000e10 + 80000df4: 00240413 addi s0,s0,2 + 80000df8: 00090513 mv a0,s2 + 80000dfc: ff3410e3 bne s0,s3,80000ddc + 80000e00: 00003517 auipc a0,0x3 + 80000e04: fe850513 addi a0,a0,-24 # 80003de8 + 80000e08: 449010ef jal ra,80002a50 + 80000e0c: 0000006f j 80000e0c + 80000e10: 000a0513 mv a0,s4 + 80000e14: 43d010ef jal ra,80002a50 + 80000e18: 00240413 addi s0,s0,2 + 80000e1c: fddff06f j 80000df8 + +0000000080000e20 : + 80000e20: fe010113 addi sp,sp,-32 + 80000e24: 00913423 sd s1,8(sp) + 80000e28: 00113c23 sd ra,24(sp) + 80000e2c: 00813823 sd s0,16(sp) + 80000e30: 00a00493 li s1,10 + 80000e34: 00003417 auipc s0,0x3 + 80000e38: fc440413 addi s0,s0,-60 # 80003df8 + 80000e3c: 04800513 li a0,72 + 80000e40: 00140413 addi s0,s0,1 + 80000e44: 250000ef jal ra,80001094 + 80000e48: 00044503 lbu a0,0(s0) + 80000e4c: fe051ae3 bnez a0,80000e40 + 80000e50: fff4849b addiw s1,s1,-1 + 80000e54: fe0490e3 bnez s1,80000e34 + 80000e58: 01813083 ld ra,24(sp) + 80000e5c: 01013403 ld s0,16(sp) + 80000e60: 00813483 ld s1,8(sp) + 80000e64: 02010113 addi sp,sp,32 + 80000e68: 00008067 ret + +0000000080000e6c : + 80000e6c: fb010113 addi sp,sp,-80 + 80000e70: 00003517 auipc a0,0x3 + 80000e74: fb850513 addi a0,a0,-72 # 80003e28 + 80000e78: 04113423 sd ra,72(sp) + 80000e7c: 04813023 sd s0,64(sp) + 80000e80: 02913c23 sd s1,56(sp) + 80000e84: 03213823 sd s2,48(sp) + 80000e88: 03313423 sd s3,40(sp) + 80000e8c: 03413023 sd s4,32(sp) + 80000e90: 01513c23 sd s5,24(sp) + 80000e94: 3bd010ef jal ra,80002a50 + 80000e98: 00810593 addi a1,sp,8 + 80000e9c: 00100513 li a0,1 + 80000ea0: 444000ef jal ra,800012e4 + 80000ea4: 00814783 lbu a5,8(sp) + 80000ea8: 00096497 auipc s1,0x96 + 80000eac: d1d48493 addi s1,s1,-739 # 80096bc5 + 80000eb0: 00810593 addi a1,sp,8 + 80000eb4: 00700513 li a0,7 + 80000eb8: 00f48023 sb a5,0(s1) + 80000ebc: 428000ef jal ra,800012e4 + 80000ec0: 00814783 lbu a5,8(sp) + 80000ec4: 00096417 auipc s0,0x96 + 80000ec8: d0040413 addi s0,s0,-768 # 80096bc4 + 80000ecc: 00003a97 auipc s5,0x3 + 80000ed0: 26ca8a93 addi s5,s5,620 # 80004138 + 80000ed4: 00f40023 sb a5,0(s0) + 80000ed8: 00003a17 auipc s4,0x3 + 80000edc: f40a0a13 addi s4,s4,-192 # 80003e18 + 80000ee0: 00003997 auipc s3,0x3 + 80000ee4: f4098993 addi s3,s3,-192 # 80003e20 + 80000ee8: 00003917 auipc s2,0x3 + 80000eec: f8890913 addi s2,s2,-120 # 80003e70 + 80000ef0: 0004c703 lbu a4,0(s1) + 80000ef4: 02070663 beqz a4,80000f20 + 80000ef8: 00003417 auipc s0,0x3 + 80000efc: f6040413 addi s0,s0,-160 # 80003e58 + 80000f00: 00810593 addi a1,sp,8 + 80000f04: 00300513 li a0,3 + 80000f08: 3dc000ef jal ra,800012e4 + 80000f0c: 00814603 lbu a2,8(sp) + 80000f10: 00040513 mv a0,s0 + 80000f14: 00060593 mv a1,a2 + 80000f18: 339010ef jal ra,80002a50 + 80000f1c: fe5ff06f j 80000f00 + 80000f20: 00079e63 bnez a5,80000f3c + 80000f24: 0000006f j 80000f24 + 80000f28: 0007b583 ld a1,0(a5) # 80000 <_entry_offset+0x80000> + 80000f2c: 000a0693 mv a3,s4 + 80000f30: 00071463 bnez a4,80000f38 + 80000f34: 00098693 mv a3,s3 + 80000f38: 319010ef jal ra,80002a50 + 80000f3c: 00800513 li a0,8 + 80000f40: 00810593 addi a1,sp,8 + 80000f44: 3a0000ef jal ra,800012e4 + 80000f48: 00c12603 lw a2,12(sp) + 80000f4c: 00814703 lbu a4,8(sp) + 80000f50: 00090513 mv a0,s2 + 80000f54: 00361793 slli a5,a2,0x3 + 80000f58: 00fa87b3 add a5,s5,a5 + 80000f5c: fc0616e3 bnez a2,80000f28 + 80000f60: 00044783 lbu a5,0(s0) + 80000f64: f8dff06f j 80000ef0 + +0000000080000f68 : + 80000f68: 00052783 lw a5,0(a0) + 80000f6c: ff010113 addi sp,sp,-16 + 80000f70: 00813023 sd s0,0(sp) + 80000f74: 00113423 sd ra,8(sp) + 80000f78: 00500713 li a4,5 + 80000f7c: 00058413 mv s0,a1 + 80000f80: 02e78463 beq a5,a4,80000fa8 + 80000f84: 00600713 li a4,6 + 80000f88: 04e78c63 beq a5,a4,80000fe0 + 80000f8c: 00100713 li a4,1 + 80000f90: 02e78a63 beq a5,a4,80000fc4 + 80000f94: 00813083 ld ra,8(sp) + 80000f98: 00040513 mv a0,s0 + 80000f9c: 00013403 ld s0,0(sp) + 80000fa0: 01010113 addi sp,sp,16 + 80000fa4: 00008067 ret + 80000fa8: 07400513 li a0,116 + 80000fac: 0e8000ef jal ra,80001094 + 80000fb0: 00813083 ld ra,8(sp) + 80000fb4: 00040513 mv a0,s0 + 80000fb8: 00013403 ld s0,0(sp) + 80000fbc: 01010113 addi sp,sp,16 + 80000fc0: 00008067 ret + 80000fc4: 07900513 li a0,121 + 80000fc8: 0cc000ef jal ra,80001094 + 80000fcc: 00813083 ld ra,8(sp) + 80000fd0: 00040513 mv a0,s0 + 80000fd4: 00013403 ld s0,0(sp) + 80000fd8: 01010113 addi sp,sp,16 + 80000fdc: 00008067 ret + 80000fe0: 06400513 li a0,100 + 80000fe4: 0b0000ef jal ra,80001094 + 80000fe8: 00813083 ld ra,8(sp) + 80000fec: 00040513 mv a0,s0 + 80000ff0: 00013403 ld s0,0(sp) + 80000ff4: 01010113 addi sp,sp,16 + 80000ff8: 00008067 ret + +0000000080000ffc : + 80000ffc: fe010113 addi sp,sp,-32 + 80001000: 00003517 auipc a0,0x3 + 80001004: df850513 addi a0,a0,-520 # 80003df8 + 80001008: 00113c23 sd ra,24(sp) + 8000100c: 00813823 sd s0,16(sp) + 80001010: 241010ef jal ra,80002a50 + 80001014: 00003517 auipc a0,0x3 + 80001018: 3bc50513 addi a0,a0,956 # 800043d0 + 8000101c: 235010ef jal ra,80002a50 + 80001020: 00810593 addi a1,sp,8 + 80001024: 00700513 li a0,7 + 80001028: 2bc000ef jal ra,800012e4 + 8000102c: 00100513 li a0,1 + 80001030: 00989437 lui s0,0x989 + 80001034: 754000ef jal ra,80001788 + 80001038: 67f40413 addi s0,s0,1663 # 98967f <_entry_offset+0x98967f> + 8000103c: 00012423 sw zero,8(sp) + 80001040: 00812783 lw a5,8(sp) + 80001044: 0007879b sext.w a5,a5 + 80001048: 00f44e63 blt s0,a5,80001064 + 8000104c: 00812783 lw a5,8(sp) + 80001050: 0017879b addiw a5,a5,1 + 80001054: 00f12423 sw a5,8(sp) + 80001058: 00812783 lw a5,8(sp) + 8000105c: 0007879b sext.w a5,a5 + 80001060: fef456e3 bge s0,a5,8000104c + 80001064: 718000ef jal ra,8000177c + 80001068: fd5ff06f j 8000103c + +000000008000106c : + 8000106c: ff010113 addi sp,sp,-16 + 80001070: 00813023 sd s0,0(sp) + 80001074: 00113423 sd ra,8(sp) + 80001078: 00003417 auipc s0,0x3 + 8000107c: 38040413 addi s0,s0,896 # 800043f8 + 80001080: 08d000ef jal ra,8000190c + 80001084: 00050593 mv a1,a0 + 80001088: 00040513 mv a0,s0 + 8000108c: 1c5010ef jal ra,80002a50 + 80001090: ff1ff06f j 80001080 + +0000000080001094 : + 80001094: 00050513 mv a0,a0 + 80001098: 0000007b 0x7b + 8000109c: 00008067 ret + +00000000800010a0 : + 800010a0: 00050513 mv a0,a0 + 800010a4: 0000006b 0x6b + 800010a8: 0000006f j 800010a8 + +00000000800010ac <_assert>: + 800010ac: 00051a63 bnez a0,800010c0 <_assert+0x14> + 800010b0: 00100793 li a5,1 + 800010b4: 00078513 mv a0,a5 + 800010b8: 0000006b 0x6b + 800010bc: 0000006f j 800010bc <_assert+0x10> + 800010c0: 00008067 ret + +00000000800010c4 <_trm_init>: + 800010c4: ff010113 addi sp,sp,-16 + 800010c8: 00113423 sd ra,8(sp) + 800010cc: 0d1000ef jal ra,8000199c + 800010d0: 00003517 auipc a0,0x3 + 800010d4: 66850513 addi a0,a0,1640 # 80004738 + 800010d8: f39fe0ef jal ra,80000010
+ 800010dc: 00050513 mv a0,a0 + 800010e0: 0000006b 0x6b + 800010e4: 0000006f j 800010e4 <_trm_init+0x20> + +00000000800010e8 <__muldi3>: + 800010e8: 00050613 mv a2,a0 + 800010ec: 00000513 li a0,0 + 800010f0: 0015f693 andi a3,a1,1 + 800010f4: 00068463 beqz a3,800010fc <__muldi3+0x14> + 800010f8: 00c50533 add a0,a0,a2 + 800010fc: 0015d593 srli a1,a1,0x1 + 80001100: 00161613 slli a2,a2,0x1 + 80001104: fe0596e3 bnez a1,800010f0 <__muldi3+0x8> + 80001108: 00008067 ret + +000000008000110c <__udivsi3>: + 8000110c: 02051513 slli a0,a0,0x20 + 80001110: 02059593 slli a1,a1,0x20 + 80001114: 00008293 mv t0,ra + 80001118: 03c000ef jal ra,80001154 <__udivdi3> + 8000111c: 0005051b sext.w a0,a0 + 80001120: 00028067 jr t0 + +0000000080001124 <__umodsi3>: + 80001124: 02051513 slli a0,a0,0x20 + 80001128: 02059593 slli a1,a1,0x20 + 8000112c: 02055513 srli a0,a0,0x20 + 80001130: 0205d593 srli a1,a1,0x20 + 80001134: 00008293 mv t0,ra + 80001138: 01c000ef jal ra,80001154 <__udivdi3> + 8000113c: 0005851b sext.w a0,a1 + 80001140: 00028067 jr t0 + +0000000080001144 <__divsi3>: + 80001144: fff00293 li t0,-1 + 80001148: 0a558c63 beq a1,t0,80001200 <__moddi3+0x30> + +000000008000114c <__divdi3>: + 8000114c: 06054063 bltz a0,800011ac <__umoddi3+0x10> + 80001150: 0605c663 bltz a1,800011bc <__umoddi3+0x20> + +0000000080001154 <__udivdi3>: + 80001154: 00058613 mv a2,a1 + 80001158: 00050593 mv a1,a0 + 8000115c: fff00513 li a0,-1 + 80001160: 02060c63 beqz a2,80001198 <__udivdi3+0x44> + 80001164: 00100693 li a3,1 + 80001168: 00b67a63 bgeu a2,a1,8000117c <__udivdi3+0x28> + 8000116c: 00c05863 blez a2,8000117c <__udivdi3+0x28> + 80001170: 00161613 slli a2,a2,0x1 + 80001174: 00169693 slli a3,a3,0x1 + 80001178: feb66ae3 bltu a2,a1,8000116c <__udivdi3+0x18> + 8000117c: 00000513 li a0,0 + 80001180: 00c5e663 bltu a1,a2,8000118c <__udivdi3+0x38> + 80001184: 40c585b3 sub a1,a1,a2 + 80001188: 00d56533 or a0,a0,a3 + 8000118c: 0016d693 srli a3,a3,0x1 + 80001190: 00165613 srli a2,a2,0x1 + 80001194: fe0696e3 bnez a3,80001180 <__udivdi3+0x2c> + 80001198: 00008067 ret + +000000008000119c <__umoddi3>: + 8000119c: 00008293 mv t0,ra + 800011a0: fb5ff0ef jal ra,80001154 <__udivdi3> + 800011a4: 00058513 mv a0,a1 + 800011a8: 00028067 jr t0 + 800011ac: 40a00533 neg a0,a0 + 800011b0: 00b04863 bgtz a1,800011c0 <__umoddi3+0x24> + 800011b4: 40b005b3 neg a1,a1 + 800011b8: f9dff06f j 80001154 <__udivdi3> + 800011bc: 40b005b3 neg a1,a1 + 800011c0: 00008293 mv t0,ra + 800011c4: f91ff0ef jal ra,80001154 <__udivdi3> + 800011c8: 40a00533 neg a0,a0 + 800011cc: 00028067 jr t0 + +00000000800011d0 <__moddi3>: + 800011d0: 00008293 mv t0,ra + 800011d4: 0005ca63 bltz a1,800011e8 <__moddi3+0x18> + 800011d8: 00054c63 bltz a0,800011f0 <__moddi3+0x20> + 800011dc: f79ff0ef jal ra,80001154 <__udivdi3> + 800011e0: 00058513 mv a0,a1 + 800011e4: 00028067 jr t0 + 800011e8: 40b005b3 neg a1,a1 + 800011ec: fe0558e3 bgez a0,800011dc <__moddi3+0xc> + 800011f0: 40a00533 neg a0,a0 + 800011f4: f61ff0ef jal ra,80001154 <__udivdi3> + 800011f8: 40b00533 neg a0,a1 + 800011fc: 00028067 jr t0 + 80001200: 01f29293 slli t0,t0,0x1f + 80001204: f45514e3 bne a0,t0,8000114c <__divdi3> + 80001208: 00008067 ret + +000000008000120c <__am_timer_config>: + 8000120c: 00100793 li a5,1 + 80001210: 00f50023 sb a5,0(a0) + 80001214: 00f500a3 sb a5,1(a0) + 80001218: 00008067 ret + +000000008000121c <__am_input_config>: + 8000121c: 00100793 li a5,1 + 80001220: 00f50023 sb a5,0(a0) + 80001224: 00008067 ret + +0000000080001228 : + 80001228: ff010113 addi sp,sp,-16 + 8000122c: 00813023 sd s0,0(sp) + 80001230: 00113423 sd ra,8(sp) + 80001234: 00003417 auipc s0,0x3 + 80001238: 1cc40413 addi s0,s0,460 # 80004400 + 8000123c: 04100513 li a0,65 + 80001240: 00140413 addi s0,s0,1 + 80001244: e51ff0ef jal ra,80001094 + 80001248: 00044503 lbu a0,0(s0) + 8000124c: fe051ae3 bnez a0,80001240 + 80001250: 00003417 auipc s0,0x3 + 80001254: 1c040413 addi s0,s0,448 # 80004410 + 80001258: 06100513 li a0,97 + 8000125c: 00140413 addi s0,s0,1 + 80001260: e35ff0ef jal ra,80001094 + 80001264: 00044503 lbu a0,0(s0) + 80001268: fe051ae3 bnez a0,8000125c + 8000126c: 00003417 auipc s0,0x3 + 80001270: 1c440413 addi s0,s0,452 # 80004430 + 80001274: 02000513 li a0,32 + 80001278: 00140413 addi s0,s0,1 + 8000127c: e19ff0ef jal ra,80001094 + 80001280: 00044503 lbu a0,0(s0) + 80001284: fe051ae3 bnez a0,80001278 + 80001288: 00100513 li a0,1 + 8000128c: e15ff0ef jal ra,800010a0 + +0000000080001290 : + 80001290: ff010113 addi sp,sp,-16 + 80001294: 00113423 sd ra,8(sp) + 80001298: 00011797 auipc a5,0x11 + 8000129c: 2e878793 addi a5,a5,744 # 80012580 + 800012a0: 00011697 auipc a3,0x11 + 800012a4: 6e068693 addi a3,a3,1760 # 80012980 + 800012a8: 00000617 auipc a2,0x0 + 800012ac: f8060613 addi a2,a2,-128 # 80001228 + 800012b0: 00c0006f j 800012bc + 800012b4: 00878793 addi a5,a5,8 + 800012b8: 00d78c63 beq a5,a3,800012d0 + 800012bc: 0007b703 ld a4,0(a5) + 800012c0: fe071ae3 bnez a4,800012b4 + 800012c4: 00c7b023 sd a2,0(a5) + 800012c8: 00878793 addi a5,a5,8 + 800012cc: fed798e3 bne a5,a3,800012bc + 800012d0: 034000ef jal ra,80001304 <__am_timer_init> + 800012d4: 00813083 ld ra,8(sp) + 800012d8: 00100513 li a0,1 + 800012dc: 01010113 addi sp,sp,16 + 800012e0: 00008067 ret + +00000000800012e4 : + 800012e4: 00351793 slli a5,a0,0x3 + 800012e8: 00011517 auipc a0,0x11 + 800012ec: 29850513 addi a0,a0,664 # 80012580 + 800012f0: 00f50533 add a0,a0,a5 + 800012f4: 00053303 ld t1,0(a0) + 800012f8: 00058513 mv a0,a1 + 800012fc: 00030067 jr t1 + +0000000080001300 : + 80001300: fe5ff06f j 800012e4 + +0000000080001304 <__am_timer_init>: + 80001304: 00008067 ret + +0000000080001308 <__am_timer_uptime>: + 80001308: fd010113 addi sp,sp,-48 + 8000130c: 00913c23 sd s1,24(sp) + 80001310: 02113423 sd ra,40(sp) + 80001314: 02813023 sd s0,32(sp) + 80001318: 01213823 sd s2,16(sp) + 8000131c: 01313423 sd s3,8(sp) + 80001320: 00050493 mv s1,a0 + 80001324: b0002973 csrr s2,mcycle + 80001328: 000f49b7 lui s3,0xf4 + 8000132c: 24098593 addi a1,s3,576 # f4240 <_entry_offset+0xf4240> + 80001330: 00090513 mv a0,s2 + 80001334: e21ff0ef jal ra,80001154 <__udivdi3> + 80001338: 00551413 slli s0,a0,0x5 + 8000133c: 40a407b3 sub a5,s0,a0 + 80001340: 00679413 slli s0,a5,0x6 + 80001344: 40f40433 sub s0,s0,a5 + 80001348: 00341413 slli s0,s0,0x3 + 8000134c: 00a40433 add s0,s0,a0 + 80001350: 24098593 addi a1,s3,576 + 80001354: 00090513 mv a0,s2 + 80001358: e45ff0ef jal ra,8000119c <__umoddi3> + 8000135c: 00641413 slli s0,s0,0x6 + 80001360: 00a40433 add s0,s0,a0 + 80001364: 0084b023 sd s0,0(s1) + 80001368: 02813083 ld ra,40(sp) + 8000136c: 02013403 ld s0,32(sp) + 80001370: 01813483 ld s1,24(sp) + 80001374: 01013903 ld s2,16(sp) + 80001378: 00813983 ld s3,8(sp) + 8000137c: 03010113 addi sp,sp,48 + 80001380: 00008067 ret + +0000000080001384 : + 80001384: fc010113 addi sp,sp,-64 + 80001388: 01313c23 sd s3,24(sp) + 8000138c: 00058993 mv s3,a1 + 80001390: 00050793 mv a5,a0 + 80001394: 03800613 li a2,56 + 80001398: 00000593 li a1,0 + 8000139c: 00098513 mv a0,s3 + 800013a0: 02813823 sd s0,48(sp) + 800013a4: 03213023 sd s2,32(sp) + 800013a8: 0007b403 ld s0,0(a5) + 800013ac: 01413823 sd s4,16(sp) + 800013b0: 02113c23 sd ra,56(sp) + 800013b4: 02913423 sd s1,40(sp) + 800013b8: 01513423 sd s5,8(sp) + 800013bc: 7c0010ef jal ra,80002b7c + 800013c0: 7b200793 li a5,1970 + 800013c4: 00f9aa23 sw a5,20(s3) + 800013c8: 7b200913 li s2,1970 + 800013cc: 00003a17 auipc s4,0x3 + 800013d0: 374a0a13 addi s4,s4,884 # 80004740 + 800013d4: 0100006f j 800013e4 + 800013d8: 40e40433 sub s0,s0,a4 + 800013dc: 00d9aa23 sw a3,20(s3) + 800013e0: 00068913 mv s2,a3 + 800013e4: 0009049b sext.w s1,s2 + 800013e8: 06400593 li a1,100 + 800013ec: 00048513 mv a0,s1 + 800013f0: de1ff0ef jal ra,800011d0 <__moddi3> + 800013f4: 00050793 mv a5,a0 + 800013f8: 0007879b sext.w a5,a5 + 800013fc: 00048513 mv a0,s1 + 80001400: 00397493 andi s1,s2,3 + 80001404: 19000593 li a1,400 + 80001408: 0014b493 seqz s1,s1 + 8000140c: 00079863 bnez a5,8000141c + 80001410: dc1ff0ef jal ra,800011d0 <__moddi3> + 80001414: 0005049b sext.w s1,a0 + 80001418: 0014b493 seqz s1,s1 + 8000141c: 00249793 slli a5,s1,0x2 + 80001420: 00fa07b3 add a5,s4,a5 + 80001424: 0007e703 lwu a4,0(a5) + 80001428: 0019069b addiw a3,s2,1 + 8000142c: fae456e3 bge s0,a4,800013d8 + 80001430: 000155b7 lui a1,0x15 + 80001434: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80001438: 00040513 mv a0,s0 + 8000143c: d11ff0ef jal ra,8000114c <__divdi3> + 80001440: 00149793 slli a5,s1,0x1 + 80001444: 009784b3 add s1,a5,s1 + 80001448: 00449793 slli a5,s1,0x4 + 8000144c: 00003497 auipc s1,0x3 + 80001450: 02448493 addi s1,s1,36 # 80004470 + 80001454: 00f484b3 add s1,s1,a5 + 80001458: 0004e783 lwu a5,0(s1) + 8000145c: 0005051b sext.w a0,a0 + 80001460: 00a9ae23 sw a0,28(s3) + 80001464: 14f44463 blt s0,a5,800015ac + 80001468: 00100713 li a4,1 + 8000146c: 40f40433 sub s0,s0,a5 + 80001470: 0044e783 lwu a5,4(s1) + 80001474: 00070a1b sext.w s4,a4 + 80001478: 00448493 addi s1,s1,4 + 8000147c: 00170713 addi a4,a4,1 + 80001480: fef456e3 bge s0,a5,8000146c + 80001484: 000155b7 lui a1,0x15 + 80001488: 0149a823 sw s4,16(s3) + 8000148c: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80001490: 00040513 mv a0,s0 + 80001494: cb9ff0ef jal ra,8000114c <__divdi3> + 80001498: 0005051b sext.w a0,a0 + 8000149c: 0015079b addiw a5,a0,1 + 800014a0: 000155b7 lui a1,0x15 + 800014a4: 00f9a623 sw a5,12(s3) + 800014a8: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 800014ac: 00040513 mv a0,s0 + 800014b0: 00001ab7 lui s5,0x1 + 800014b4: 0007841b sext.w s0,a5 + 800014b8: d19ff0ef jal ra,800011d0 <__moddi3> + 800014bc: e10a8593 addi a1,s5,-496 # e10 <_entry_offset+0xe10> + 800014c0: 00050493 mv s1,a0 + 800014c4: c89ff0ef jal ra,8000114c <__divdi3> + 800014c8: e10a8593 addi a1,s5,-496 + 800014cc: 00a9a423 sw a0,8(s3) + 800014d0: 00048513 mv a0,s1 + 800014d4: cfdff0ef jal ra,800011d0 <__moddi3> + 800014d8: 03c00593 li a1,60 + 800014dc: 00050493 mv s1,a0 + 800014e0: c6dff0ef jal ra,8000114c <__divdi3> + 800014e4: 00a9a223 sw a0,4(s3) + 800014e8: 03c00593 li a1,60 + 800014ec: 00048513 mv a0,s1 + 800014f0: ce1ff0ef jal ra,800011d0 <__moddi3> + 800014f4: 001a0a1b addiw s4,s4,1 + 800014f8: 0ffa7793 andi a5,s4,255 + 800014fc: 0037b793 sltiu a5,a5,3 + 80001500: 40f9093b subw s2,s2,a5 + 80001504: 03091913 slli s2,s2,0x30 + 80001508: 03095913 srli s2,s2,0x30 + 8000150c: 00a9a023 sw a0,0(s3) + 80001510: 06400593 li a1,100 + 80001514: 00090513 mv a0,s2 + 80001518: c3dff0ef jal ra,80001154 <__udivdi3> + 8000151c: 0029549b srliw s1,s2,0x2 + 80001520: 0105179b slliw a5,a0,0x10 + 80001524: 0107d79b srliw a5,a5,0x10 + 80001528: 012484bb addw s1,s1,s2 + 8000152c: 19000593 li a1,400 + 80001530: 00090513 mv a0,s2 + 80001534: 0ffa7a13 andi s4,s4,255 + 80001538: 40f484bb subw s1,s1,a5 + 8000153c: fffa0a1b addiw s4,s4,-1 + 80001540: c15ff0ef jal ra,80001154 <__udivdi3> + 80001544: 00003797 auipc a5,0x3 + 80001548: f8c78793 addi a5,a5,-116 # 800044d0 + 8000154c: 002a1a13 slli s4,s4,0x2 + 80001550: 01478a33 add s4,a5,s4 + 80001554: 000a2783 lw a5,0(s4) + 80001558: 0105151b slliw a0,a0,0x10 + 8000155c: 0105551b srliw a0,a0,0x10 + 80001560: 00a484bb addw s1,s1,a0 + 80001564: 00f484bb addw s1,s1,a5 + 80001568: 0ff47513 andi a0,s0,255 + 8000156c: 00a4853b addw a0,s1,a0 + 80001570: 00700593 li a1,7 + 80001574: c5dff0ef jal ra,800011d0 <__moddi3> + 80001578: 03813083 ld ra,56(sp) + 8000157c: 03013403 ld s0,48(sp) + 80001580: 0ff57513 andi a0,a0,255 + 80001584: 00a9ac23 sw a0,24(s3) + 80001588: 0209a023 sw zero,32(s3) + 8000158c: 02813483 ld s1,40(sp) + 80001590: 02013903 ld s2,32(sp) + 80001594: 01013a03 ld s4,16(sp) + 80001598: 00813a83 ld s5,8(sp) + 8000159c: 00098513 mv a0,s3 + 800015a0: 01813983 ld s3,24(sp) + 800015a4: 04010113 addi sp,sp,64 + 800015a8: 00008067 ret + 800015ac: 00000a13 li s4,0 + 800015b0: eedff06f j 8000149c + +00000000800015b4 <__am_timer_rtc>: + 800015b4: f9010113 addi sp,sp,-112 + 800015b8: 06813023 sd s0,96(sp) + 800015bc: 06113423 sd ra,104(sp) + 800015c0: 04913c23 sd s1,88(sp) + 800015c4: 05213823 sd s2,80(sp) + 800015c8: 00050413 mv s0,a0 + 800015cc: b00024f3 csrr s1,mcycle + 800015d0: 000f4937 lui s2,0xf4 + 800015d4: 24090593 addi a1,s2,576 # f4240 <_entry_offset+0xf4240> + 800015d8: 00048513 mv a0,s1 + 800015dc: b79ff0ef jal ra,80001154 <__udivdi3> + 800015e0: 00050793 mv a5,a0 + 800015e4: 24090593 addi a1,s2,576 + 800015e8: 00048513 mv a0,s1 + 800015ec: 00f13423 sd a5,8(sp) + 800015f0: badff0ef jal ra,8000119c <__umoddi3> + 800015f4: 00050793 mv a5,a0 + 800015f8: 01810593 addi a1,sp,24 + 800015fc: 00810513 addi a0,sp,8 + 80001600: 00f13823 sd a5,16(sp) + 80001604: d81ff0ef jal ra,80001384 + 80001608: 01812703 lw a4,24(sp) + 8000160c: 02812783 lw a5,40(sp) + 80001610: 06813083 ld ra,104(sp) + 80001614: 00e42a23 sw a4,20(s0) + 80001618: 01c12703 lw a4,28(sp) + 8000161c: 0017879b addiw a5,a5,1 + 80001620: 00f42223 sw a5,4(s0) + 80001624: 00e42823 sw a4,16(s0) + 80001628: 02012703 lw a4,32(sp) + 8000162c: 02c12783 lw a5,44(sp) + 80001630: 05813483 ld s1,88(sp) + 80001634: 00e42623 sw a4,12(s0) + 80001638: 02412703 lw a4,36(sp) + 8000163c: 00f42023 sw a5,0(s0) + 80001640: 05013903 ld s2,80(sp) + 80001644: 00e42423 sw a4,8(s0) + 80001648: 06013403 ld s0,96(sp) + 8000164c: 07010113 addi sp,sp,112 + 80001650: 00008067 ret + +0000000080001654 <__am_input_keybrd>: + 80001654: 00050023 sb zero,0(a0) + 80001658: 00052223 sw zero,4(a0) + 8000165c: 00008067 ret + +0000000080001660 <__am_irq_handle>: + 80001660: 00095717 auipc a4,0x95 + 80001664: 56873703 ld a4,1384(a4) # 80096bc8 + 80001668: 00050593 mv a1,a0 + 8000166c: 0a070a63 beqz a4,80001720 <__am_irq_handle+0xc0> + 80001670: 10053683 ld a3,256(a0) + 80001674: fb010113 addi sp,sp,-80 + 80001678: 04113423 sd ra,72(sp) + 8000167c: 02013023 sd zero,32(sp) + 80001680: 02013423 sd zero,40(sp) + 80001684: 02013823 sd zero,48(sp) + 80001688: 02013c23 sd zero,56(sp) + 8000168c: 00b00793 li a5,11 + 80001690: 06f68c63 beq a3,a5,80001708 <__am_irq_handle+0xa8> + 80001694: fff00793 li a5,-1 + 80001698: 03f79793 slli a5,a5,0x3f + 8000169c: 00778793 addi a5,a5,7 + 800016a0: 04f69e63 bne a3,a5,800016fc <__am_irq_handle+0x9c> + 800016a4: 02004637 lui a2,0x2004 + 800016a8: 00063783 ld a5,0(a2) # 2004000 <_entry_offset+0x2004000> + 800016ac: 000f46b7 lui a3,0xf4 + 800016b0: 24068693 addi a3,a3,576 # f4240 <_entry_offset+0xf4240> + 800016b4: 00d787b3 add a5,a5,a3 + 800016b8: 00f63023 sd a5,0(a2) + 800016bc: 00500793 li a5,5 + 800016c0: 02f12023 sw a5,32(sp) + 800016c4: 02013783 ld a5,32(sp) + 800016c8: 00010513 mv a0,sp + 800016cc: 00f13023 sd a5,0(sp) + 800016d0: 02813783 ld a5,40(sp) + 800016d4: 00f13423 sd a5,8(sp) + 800016d8: 03013783 ld a5,48(sp) + 800016dc: 00f13823 sd a5,16(sp) + 800016e0: 03813783 ld a5,56(sp) + 800016e4: 00f13c23 sd a5,24(sp) + 800016e8: 000700e7 jalr a4 + 800016ec: 04050863 beqz a0,8000173c <__am_irq_handle+0xdc> + 800016f0: 04813083 ld ra,72(sp) + 800016f4: 05010113 addi sp,sp,80 + 800016f8: 00008067 ret + 800016fc: 00400793 li a5,4 + 80001700: 02f12023 sw a5,32(sp) + 80001704: fc1ff06f j 800016c4 <__am_irq_handle+0x64> + 80001708: 08853683 ld a3,136(a0) + 8000170c: fff00793 li a5,-1 + 80001710: 00f68a63 beq a3,a5,80001724 <__am_irq_handle+0xc4> + 80001714: 00200793 li a5,2 + 80001718: 02f12023 sw a5,32(sp) + 8000171c: fa9ff06f j 800016c4 <__am_irq_handle+0x64> + 80001720: 00008067 ret + 80001724: 11053783 ld a5,272(a0) + 80001728: 00100693 li a3,1 + 8000172c: 02d12023 sw a3,32(sp) + 80001730: 00478793 addi a5,a5,4 + 80001734: 10f53823 sd a5,272(a0) + 80001738: f8dff06f j 800016c4 <__am_irq_handle+0x64> + 8000173c: 02700613 li a2,39 + 80001740: 00003597 auipc a1,0x3 + 80001744: dc058593 addi a1,a1,-576 # 80004500 + 80001748: 00002517 auipc a0,0x2 + 8000174c: 48850513 addi a0,a0,1160 # 80003bd0 + 80001750: 300010ef jal ra,80002a50 + 80001754: 00100513 li a0,1 + 80001758: 949ff0ef jal ra,800010a0 + +000000008000175c : + 8000175c: 00050793 mv a5,a0 + 80001760: 00000717 auipc a4,0x0 + 80001764: 04c70713 addi a4,a4,76 # 800017ac <__am_asm_trap> + 80001768: 30571073 csrw mtvec,a4 + 8000176c: 00100513 li a0,1 + 80001770: 00095717 auipc a4,0x95 + 80001774: 44f73c23 sd a5,1112(a4) # 80096bc8 + 80001778: 00008067 ret + +000000008000177c : + 8000177c: fff00893 li a7,-1 + 80001780: 00000073 ecall + 80001784: 00008067 ret + +0000000080001788 : + 80001788: 00050a63 beqz a0,8000179c + 8000178c: 300467f3 csrrsi a5,mstatus,8 + 80001790: 08000793 li a5,128 + 80001794: 3047a7f3 csrrs a5,mie,a5 + 80001798: 00008067 ret + 8000179c: 300477f3 csrrci a5,mstatus,8 + 800017a0: 08000793 li a5,128 + 800017a4: 3047b7f3 csrrc a5,mie,a5 + 800017a8: 00008067 ret + +00000000800017ac <__am_asm_trap>: + 800017ac: ee810113 addi sp,sp,-280 + 800017b0: 00113423 sd ra,8(sp) + 800017b4: 00313c23 sd gp,24(sp) + 800017b8: 02413023 sd tp,32(sp) + 800017bc: 02513423 sd t0,40(sp) + 800017c0: 02613823 sd t1,48(sp) + 800017c4: 02713c23 sd t2,56(sp) + 800017c8: 04813023 sd s0,64(sp) + 800017cc: 04913423 sd s1,72(sp) + 800017d0: 04a13823 sd a0,80(sp) + 800017d4: 04b13c23 sd a1,88(sp) + 800017d8: 06c13023 sd a2,96(sp) + 800017dc: 06d13423 sd a3,104(sp) + 800017e0: 06e13823 sd a4,112(sp) + 800017e4: 06f13c23 sd a5,120(sp) + 800017e8: 09013023 sd a6,128(sp) + 800017ec: 09113423 sd a7,136(sp) + 800017f0: 09213823 sd s2,144(sp) + 800017f4: 09313c23 sd s3,152(sp) + 800017f8: 0b413023 sd s4,160(sp) + 800017fc: 0b513423 sd s5,168(sp) + 80001800: 0b613823 sd s6,176(sp) + 80001804: 0b713c23 sd s7,184(sp) + 80001808: 0d813023 sd s8,192(sp) + 8000180c: 0d913423 sd s9,200(sp) + 80001810: 0da13823 sd s10,208(sp) + 80001814: 0db13c23 sd s11,216(sp) + 80001818: 0fc13023 sd t3,224(sp) + 8000181c: 0fd13423 sd t4,232(sp) + 80001820: 0fe13823 sd t5,240(sp) + 80001824: 0ff13c23 sd t6,248(sp) + 80001828: 00010293 mv t0,sp + 8000182c: 11828293 addi t0,t0,280 + 80001830: 00513823 sd t0,16(sp) + 80001834: 342022f3 csrr t0,mcause + 80001838: 30002373 csrr t1,mstatus + 8000183c: 341023f3 csrr t2,mepc + 80001840: 10513023 sd t0,256(sp) + 80001844: 10613423 sd t1,264(sp) + 80001848: 10713823 sd t2,272(sp) + 8000184c: 00010513 mv a0,sp + 80001850: e11ff0ef jal ra,80001660 <__am_irq_handle> + 80001854: 10813303 ld t1,264(sp) + 80001858: 11013383 ld t2,272(sp) + 8000185c: 30031073 csrw mstatus,t1 + 80001860: 34139073 csrw mepc,t2 + 80001864: 00813083 ld ra,8(sp) + 80001868: 01813183 ld gp,24(sp) + 8000186c: 02013203 ld tp,32(sp) + 80001870: 02813283 ld t0,40(sp) + 80001874: 03013303 ld t1,48(sp) + 80001878: 03813383 ld t2,56(sp) + 8000187c: 04013403 ld s0,64(sp) + 80001880: 04813483 ld s1,72(sp) + 80001884: 05013503 ld a0,80(sp) + 80001888: 05813583 ld a1,88(sp) + 8000188c: 06013603 ld a2,96(sp) + 80001890: 06813683 ld a3,104(sp) + 80001894: 07013703 ld a4,112(sp) + 80001898: 07813783 ld a5,120(sp) + 8000189c: 08013803 ld a6,128(sp) + 800018a0: 08813883 ld a7,136(sp) + 800018a4: 09013903 ld s2,144(sp) + 800018a8: 09813983 ld s3,152(sp) + 800018ac: 0a013a03 ld s4,160(sp) + 800018b0: 0a813a83 ld s5,168(sp) + 800018b4: 0b013b03 ld s6,176(sp) + 800018b8: 0b813b83 ld s7,184(sp) + 800018bc: 0c013c03 ld s8,192(sp) + 800018c0: 0c813c83 ld s9,200(sp) + 800018c4: 0d013d03 ld s10,208(sp) + 800018c8: 0d813d83 ld s11,216(sp) + 800018cc: 0e013e03 ld t3,224(sp) + 800018d0: 0e813e83 ld t4,232(sp) + 800018d4: 0f013f03 ld t5,240(sp) + 800018d8: 0f813f83 ld t6,248(sp) + 800018dc: 11810113 addi sp,sp,280 + 800018e0: 30200073 mret + +00000000800018e4 : + 800018e4: 00000513 li a0,0 + 800018e8: 00008067 ret + +00000000800018ec : + 800018ec: 00008067 ret + +00000000800018f0 : + 800018f0: 00008067 ret + +00000000800018f4 : + 800018f4: ff010113 addi sp,sp,-16 + 800018f8: 00000513 li a0,0 + 800018fc: 01010113 addi sp,sp,16 + 80001900: 00008067 ret + +0000000080001904 : + 80001904: 00000513 li a0,0 + 80001908: 00008067 ret + +000000008000190c : + 8000190c: 00000513 li a0,0 + 80001910: 00008067 ret + +0000000080001914 : + 80001914: 00054783 lbu a5,0(a0) + 80001918: 00158593 addi a1,a1,1 + 8000191c: 00150513 addi a0,a0,1 + 80001920: fff5c703 lbu a4,-1(a1) + 80001924: 00078863 beqz a5,80001934 + 80001928: fee786e3 beq a5,a4,80001914 + 8000192c: 40e7853b subw a0,a5,a4 + 80001930: 00008067 ret + 80001934: 40e0053b negw a0,a4 + 80001938: 00008067 ret + +000000008000193c : + 8000193c: 00011617 auipc a2,0x11 + 80001940: 04460613 addi a2,a2,68 # 80012980 + 80001944: 00063683 ld a3,0(a2) + 80001948: 00869713 slli a4,a3,0x8 + 8000194c: 40d70733 sub a4,a4,a3 + 80001950: 00371713 slli a4,a4,0x3 + 80001954: 00d70733 add a4,a4,a3 + 80001958: 00771713 slli a4,a4,0x7 + 8000195c: 00d70733 add a4,a4,a3 + 80001960: 00371713 slli a4,a4,0x3 + 80001964: 40d70733 sub a4,a4,a3 + 80001968: 00571793 slli a5,a4,0x5 + 8000196c: 00f707b3 add a5,a4,a5 + 80001970: 00279793 slli a5,a5,0x2 + 80001974: 40d787b3 sub a5,a5,a3 + 80001978: 00279793 slli a5,a5,0x2 + 8000197c: 00003737 lui a4,0x3 + 80001980: 00d787b3 add a5,a5,a3 + 80001984: 03970713 addi a4,a4,57 # 3039 <_entry_offset+0x3039> + 80001988: 00e787b3 add a5,a5,a4 + 8000198c: 02179513 slli a0,a5,0x21 + 80001990: 00f63023 sd a5,0(a2) + 80001994: 03155513 srli a0,a0,0x31 + 80001998: 00008067 ret + +000000008000199c : + 8000199c: 00011797 auipc a5,0x11 + 800019a0: bd478793 addi a5,a5,-1068 # 80012570 + 800019a4: 0007b503 ld a0,0(a5) + 800019a8: 0087b583 ld a1,8(a5) + 800019ac: ff010113 addi sp,sp,-16 + 800019b0: 00000693 li a3,0 + 800019b4: 00000613 li a2,0 + 800019b8: 40a585b3 sub a1,a1,a0 + 800019bc: 00113423 sd ra,8(sp) + 800019c0: 378010ef jal ra,80002d38 + 800019c4: 00813083 ld ra,8(sp) + 800019c8: 00095797 auipc a5,0x95 + 800019cc: 20a7b423 sd a0,520(a5) # 80096bd0 + 800019d0: 01010113 addi sp,sp,16 + 800019d4: 00008067 ret + +00000000800019d8 <_out_null>: + 800019d8: 00008067 ret + +00000000800019dc <_ntoa_format>: + 800019dc: fa010113 addi sp,sp,-96 + 800019e0: 07012303 lw t1,112(sp) + 800019e4: 03313c23 sd s3,56(sp) + 800019e8: 03413823 sd s4,48(sp) + 800019ec: 03513423 sd s5,40(sp) + 800019f0: 03613023 sd s6,32(sp) + 800019f4: 01713c23 sd s7,24(sp) + 800019f8: 01813823 sd s8,16(sp) + 800019fc: 01913423 sd s9,8(sp) + 80001a00: 00237e13 andi t3,t1,2 + 80001a04: 01037e93 andi t4,t1,16 + 80001a08: 04113c23 sd ra,88(sp) + 80001a0c: 04813823 sd s0,80(sp) + 80001a10: 04913423 sd s1,72(sp) + 80001a14: 05213023 sd s2,64(sp) + 80001a18: 06012f03 lw t5,96(sp) + 80001a1c: 06812c03 lw s8,104(sp) + 80001a20: 00050a13 mv s4,a0 + 80001a24: 00058a93 mv s5,a1 + 80001a28: 00060b93 mv s7,a2 + 80001a2c: 00068b13 mv s6,a3 + 80001a30: 00070993 mv s3,a4 + 80001a34: 000e0c9b sext.w s9,t3 + 80001a38: 000e8e9b sext.w t4,t4 + 80001a3c: 060e1c63 bnez t3,80001ab4 <_ntoa_format+0xd8> + 80001a40: 020f1693 slli a3,t5,0x20 + 80001a44: 00137513 andi a0,t1,1 + 80001a48: 0206d693 srli a3,a3,0x20 + 80001a4c: 180c1e63 bnez s8,80001be8 <_ntoa_format+0x20c> + 80001a50: 02d7f663 bgeu a5,a3,80001a7c <_ntoa_format+0xa0> + 80001a54: 02000713 li a4,32 + 80001a58: 36e78e63 beq a5,a4,80001dd4 <_ntoa_format+0x3f8> + 80001a5c: 03000613 li a2,48 + 80001a60: 02000593 li a1,32 + 80001a64: 0080006f j 80001a6c <_ntoa_format+0x90> + 80001a68: 00b78a63 beq a5,a1,80001a7c <_ntoa_format+0xa0> + 80001a6c: 00178793 addi a5,a5,1 + 80001a70: 00f98733 add a4,s3,a5 + 80001a74: fec70fa3 sb a2,-1(a4) + 80001a78: fed7e8e3 bltu a5,a3,80001a68 <_ntoa_format+0x8c> + 80001a7c: 02050c63 beqz a0,80001ab4 <_ntoa_format+0xd8> + 80001a80: 020c1913 slli s2,s8,0x20 + 80001a84: 02095913 srli s2,s2,0x20 + 80001a88: 0327f663 bgeu a5,s2,80001ab4 <_ntoa_format+0xd8> + 80001a8c: 02000713 li a4,32 + 80001a90: 36e78863 beq a5,a4,80001e00 <_ntoa_format+0x424> + 80001a94: 03000693 li a3,48 + 80001a98: 02000613 li a2,32 + 80001a9c: 0080006f j 80001aa4 <_ntoa_format+0xc8> + 80001aa0: 16c78463 beq a5,a2,80001c08 <_ntoa_format+0x22c> + 80001aa4: 00178793 addi a5,a5,1 + 80001aa8: 00f98733 add a4,s3,a5 + 80001aac: fed70fa3 sb a3,-1(a4) + 80001ab0: ff2798e3 bne a5,s2,80001aa0 <_ntoa_format+0xc4> + 80001ab4: 1a0e8663 beqz t4,80001c60 <_ntoa_format+0x284> + 80001ab8: 40037713 andi a4,t1,1024 + 80001abc: 20071463 bnez a4,80001cc4 <_ntoa_format+0x2e8> + 80001ac0: 1e079663 bnez a5,80001cac <_ntoa_format+0x2d0> + 80001ac4: 01000793 li a5,16 + 80001ac8: 2af88863 beq a7,a5,80001d78 <_ntoa_format+0x39c> + 80001acc: 00200793 li a5,2 + 80001ad0: 2ef88a63 beq a7,a5,80001dc4 <_ntoa_format+0x3e8> + 80001ad4: 03000793 li a5,48 + 80001ad8: 00f98023 sb a5,0(s3) + 80001adc: 00100793 li a5,1 + 80001ae0: 1a080463 beqz a6,80001c88 <_ntoa_format+0x2ac> + 80001ae4: 00f98733 add a4,s3,a5 + 80001ae8: 00178413 addi s0,a5,1 + 80001aec: 02d00793 li a5,45 + 80001af0: 00f70023 sb a5,0(a4) + 80001af4: 00337313 andi t1,t1,3 + 80001af8: 20031263 bnez t1,80001cfc <_ntoa_format+0x320> + 80001afc: 020c1913 slli s2,s8,0x20 + 80001b00: 02095913 srli s2,s2,0x20 + 80001b04: 1f247c63 bgeu s0,s2,80001cfc <_ntoa_format+0x320> + 80001b08: 40890933 sub s2,s2,s0 + 80001b0c: 01790933 add s2,s2,s7 + 80001b10: 000b8493 mv s1,s7 + 80001b14: 00048613 mv a2,s1 + 80001b18: 000b0693 mv a3,s6 + 80001b1c: 00148493 addi s1,s1,1 + 80001b20: 000a8593 mv a1,s5 + 80001b24: 02000513 li a0,32 + 80001b28: 000a00e7 jalr s4 + 80001b2c: ff2494e3 bne s1,s2,80001b14 <_ntoa_format+0x138> + 80001b30: 02040663 beqz s0,80001b5c <_ntoa_format+0x180> + 80001b34: 01240933 add s2,s0,s2 + 80001b38: 012984b3 add s1,s3,s2 + 80001b3c: 00898433 add s0,s3,s0 + 80001b40: fff44503 lbu a0,-1(s0) + 80001b44: 40848633 sub a2,s1,s0 + 80001b48: 000b0693 mv a3,s6 + 80001b4c: fff40413 addi s0,s0,-1 + 80001b50: 000a8593 mv a1,s5 + 80001b54: 000a00e7 jalr s4 + 80001b58: fe8994e3 bne s3,s0,80001b40 <_ntoa_format+0x164> + 80001b5c: 040c8a63 beqz s9,80001bb0 <_ntoa_format+0x1d4> + 80001b60: 020c1c13 slli s8,s8,0x20 + 80001b64: 41790433 sub s0,s2,s7 + 80001b68: 020c5c13 srli s8,s8,0x20 + 80001b6c: 05847263 bgeu s0,s8,80001bb0 <_ntoa_format+0x1d4> + 80001b70: 01740633 add a2,s0,s7 + 80001b74: 000b0693 mv a3,s6 + 80001b78: 00140413 addi s0,s0,1 + 80001b7c: 000a8593 mv a1,s5 + 80001b80: 02000513 li a0,32 + 80001b84: 000a00e7 jalr s4 + 80001b88: ff8464e3 bltu s0,s8,80001b70 <_ntoa_format+0x194> + 80001b8c: 41790733 sub a4,s2,s7 + 80001b90: 00170713 addi a4,a4,1 + 80001b94: 00000793 li a5,0 + 80001b98: 00ec6863 bltu s8,a4,80001ba8 <_ntoa_format+0x1cc> + 80001b9c: fffb8793 addi a5,s7,-1 + 80001ba0: 01878c33 add s8,a5,s8 + 80001ba4: 412c07b3 sub a5,s8,s2 + 80001ba8: 00190913 addi s2,s2,1 + 80001bac: 00f90933 add s2,s2,a5 + 80001bb0: 05813083 ld ra,88(sp) + 80001bb4: 05013403 ld s0,80(sp) + 80001bb8: 04813483 ld s1,72(sp) + 80001bbc: 03813983 ld s3,56(sp) + 80001bc0: 03013a03 ld s4,48(sp) + 80001bc4: 02813a83 ld s5,40(sp) + 80001bc8: 02013b03 ld s6,32(sp) + 80001bcc: 01813b83 ld s7,24(sp) + 80001bd0: 01013c03 ld s8,16(sp) + 80001bd4: 00813c83 ld s9,8(sp) + 80001bd8: 00090513 mv a0,s2 + 80001bdc: 04013903 ld s2,64(sp) + 80001be0: 06010113 addi sp,sp,96 + 80001be4: 00008067 ret + 80001be8: 12050863 beqz a0,80001d18 <_ntoa_format+0x33c> + 80001bec: 00081663 bnez a6,80001bf8 <_ntoa_format+0x21c> + 80001bf0: 00c37713 andi a4,t1,12 + 80001bf4: 00070463 beqz a4,80001bfc <_ntoa_format+0x220> + 80001bf8: fffc0c1b addiw s8,s8,-1 + 80001bfc: e8d7f2e3 bgeu a5,a3,80001a80 <_ntoa_format+0xa4> + 80001c00: 02000713 li a4,32 + 80001c04: e4e79ce3 bne a5,a4,80001a5c <_ntoa_format+0x80> + 80001c08: 0e0e8063 beqz t4,80001ce8 <_ntoa_format+0x30c> + 80001c0c: 40037793 andi a5,t1,1024 + 80001c10: 04079c63 bnez a5,80001c68 <_ntoa_format+0x28c> + 80001c14: 02000793 li a5,32 + 80001c18: 0aff1063 bne t5,a5,80001cb8 <_ntoa_format+0x2dc> + 80001c1c: 02000793 li a5,32 + 80001c20: 01f00713 li a4,31 + 80001c24: 01000693 li a3,16 + 80001c28: 1ad88c63 beq a7,a3,80001de0 <_ntoa_format+0x404> + 80001c2c: 00200693 li a3,2 + 80001c30: 00070793 mv a5,a4 + 80001c34: 00d89e63 bne a7,a3,80001c50 <_ntoa_format+0x274> + 80001c38: 00e986b3 add a3,s3,a4 + 80001c3c: 00170793 addi a5,a4,1 + 80001c40: 06200713 li a4,98 + 80001c44: 00e68023 sb a4,0(a3) + 80001c48: 02000713 li a4,32 + 80001c4c: 00e78e63 beq a5,a4,80001c68 <_ntoa_format+0x28c> + 80001c50: 00f98733 add a4,s3,a5 + 80001c54: 03000693 li a3,48 + 80001c58: 00d70023 sb a3,0(a4) + 80001c5c: 00178793 addi a5,a5,1 + 80001c60: 02000713 li a4,32 + 80001c64: e6e79ee3 bne a5,a4,80001ae0 <_ntoa_format+0x104> + 80001c68: 00337313 andi t1,t1,3 + 80001c6c: 08031263 bnez t1,80001cf0 <_ntoa_format+0x314> + 80001c70: 02000413 li s0,32 + 80001c74: 020c1913 slli s2,s8,0x20 + 80001c78: 02095913 srli s2,s2,0x20 + 80001c7c: e92466e3 bltu s0,s2,80001b08 <_ntoa_format+0x12c> + 80001c80: 000b8913 mv s2,s7 + 80001c84: eadff06f j 80001b30 <_ntoa_format+0x154> + 80001c88: 00437713 andi a4,t1,4 + 80001c8c: 06071c63 bnez a4,80001d04 <_ntoa_format+0x328> + 80001c90: 00837713 andi a4,t1,8 + 80001c94: 0c071863 bnez a4,80001d64 <_ntoa_format+0x388> + 80001c98: 00337313 andi t1,t1,3 + 80001c9c: 00078413 mv s0,a5 + 80001ca0: fc030ae3 beqz t1,80001c74 <_ntoa_format+0x298> + 80001ca4: 000b8913 mv s2,s7 + 80001ca8: e89ff06f j 80001b30 <_ntoa_format+0x154> + 80001cac: 020f1f13 slli t5,t5,0x20 + 80001cb0: 020f5f13 srli t5,t5,0x20 + 80001cb4: 0aff0263 beq t5,a5,80001d58 <_ntoa_format+0x37c> + 80001cb8: 020c1913 slli s2,s8,0x20 + 80001cbc: 02095913 srli s2,s2,0x20 + 80001cc0: 08f90c63 beq s2,a5,80001d58 <_ntoa_format+0x37c> + 80001cc4: 01000713 li a4,16 + 80001cc8: 06e88663 beq a7,a4,80001d34 <_ntoa_format+0x358> + 80001ccc: 00200713 li a4,2 + 80001cd0: f6e89ce3 bne a7,a4,80001c48 <_ntoa_format+0x26c> + 80001cd4: 02000713 li a4,32 + 80001cd8: f8e788e3 beq a5,a4,80001c68 <_ntoa_format+0x28c> + 80001cdc: 00f986b3 add a3,s3,a5 + 80001ce0: 00178793 addi a5,a5,1 + 80001ce4: f5dff06f j 80001c40 <_ntoa_format+0x264> + 80001ce8: 00337313 andi t1,t1,3 + 80001cec: 0c030063 beqz t1,80001dac <_ntoa_format+0x3d0> + 80001cf0: 000b8913 mv s2,s7 + 80001cf4: 02000413 li s0,32 + 80001cf8: e3dff06f j 80001b34 <_ntoa_format+0x158> + 80001cfc: 000b8913 mv s2,s7 + 80001d00: e35ff06f j 80001b34 <_ntoa_format+0x158> + 80001d04: 00f98733 add a4,s3,a5 + 80001d08: 00178413 addi s0,a5,1 + 80001d0c: 02b00793 li a5,43 + 80001d10: 00f70023 sb a5,0(a4) + 80001d14: de1ff06f j 80001af4 <_ntoa_format+0x118> + 80001d18: d8d7fee3 bgeu a5,a3,80001ab4 <_ntoa_format+0xd8> + 80001d1c: 02000713 li a4,32 + 80001d20: d2e79ee3 bne a5,a4,80001a5c <_ntoa_format+0x80> + 80001d24: 0e0e8c63 beqz t4,80001e1c <_ntoa_format+0x440> + 80001d28: 40037793 andi a5,t1,1024 + 80001d2c: f2079ee3 bnez a5,80001c68 <_ntoa_format+0x28c> + 80001d30: ee5ff06f j 80001c14 <_ntoa_format+0x238> + 80001d34: 02037713 andi a4,t1,32 + 80001d38: 04071c63 bnez a4,80001d90 <_ntoa_format+0x3b4> + 80001d3c: 02000713 li a4,32 + 80001d40: f2e784e3 beq a5,a4,80001c68 <_ntoa_format+0x28c> + 80001d44: 00f98733 add a4,s3,a5 + 80001d48: 00178793 addi a5,a5,1 + 80001d4c: 07800693 li a3,120 + 80001d50: 00d70023 sb a3,0(a4) + 80001d54: ef5ff06f j 80001c48 <_ntoa_format+0x26c> + 80001d58: fff78713 addi a4,a5,-1 + 80001d5c: d60704e3 beqz a4,80001ac4 <_ntoa_format+0xe8> + 80001d60: ec5ff06f j 80001c24 <_ntoa_format+0x248> + 80001d64: 00f98733 add a4,s3,a5 + 80001d68: 00178413 addi s0,a5,1 + 80001d6c: 02000793 li a5,32 + 80001d70: 00f70023 sb a5,0(a4) + 80001d74: d81ff06f j 80001af4 <_ntoa_format+0x118> + 80001d78: 02037793 andi a5,t1,32 + 80001d7c: 02079c63 bnez a5,80001db4 <_ntoa_format+0x3d8> + 80001d80: 07800793 li a5,120 + 80001d84: 00f98023 sb a5,0(s3) + 80001d88: 00100793 li a5,1 + 80001d8c: ec5ff06f j 80001c50 <_ntoa_format+0x274> + 80001d90: 02000713 li a4,32 + 80001d94: ece78ae3 beq a5,a4,80001c68 <_ntoa_format+0x28c> + 80001d98: 00f98733 add a4,s3,a5 + 80001d9c: 05800693 li a3,88 + 80001da0: 00d70023 sb a3,0(a4) + 80001da4: 00178793 addi a5,a5,1 + 80001da8: ea1ff06f j 80001c48 <_ntoa_format+0x26c> + 80001dac: 02000413 li s0,32 + 80001db0: d4dff06f j 80001afc <_ntoa_format+0x120> + 80001db4: 05800793 li a5,88 + 80001db8: 00f98023 sb a5,0(s3) + 80001dbc: 00100793 li a5,1 + 80001dc0: e91ff06f j 80001c50 <_ntoa_format+0x274> + 80001dc4: 06200793 li a5,98 + 80001dc8: 00f98023 sb a5,0(s3) + 80001dcc: 00100793 li a5,1 + 80001dd0: e81ff06f j 80001c50 <_ntoa_format+0x274> + 80001dd4: e2051ae3 bnez a0,80001c08 <_ntoa_format+0x22c> + 80001dd8: 000c8c13 mv s8,s9 + 80001ddc: f49ff06f j 80001d24 <_ntoa_format+0x348> + 80001de0: 02037693 andi a3,t1,32 + 80001de4: ffe78713 addi a4,a5,-2 + 80001de8: 00069863 bnez a3,80001df8 <_ntoa_format+0x41c> + 80001dec: 00e98733 add a4,s3,a4 + 80001df0: fff78793 addi a5,a5,-1 + 80001df4: f59ff06f j 80001d4c <_ntoa_format+0x370> + 80001df8: 00070793 mv a5,a4 + 80001dfc: f9dff06f j 80001d98 <_ntoa_format+0x3bc> + 80001e00: 000e8e63 beqz t4,80001e1c <_ntoa_format+0x440> + 80001e04: 40037713 andi a4,t1,1024 + 80001e08: 00071e63 bnez a4,80001e24 <_ntoa_format+0x448> + 80001e0c: 02ff0e63 beq t5,a5,80001e48 <_ntoa_format+0x46c> + 80001e10: e4fc1ce3 bne s8,a5,80001c68 <_ntoa_format+0x28c> + 80001e14: 01f00713 li a4,31 + 80001e18: e0dff06f j 80001c24 <_ntoa_format+0x248> + 80001e1c: 02000413 li s0,32 + 80001e20: cd5ff06f j 80001af4 <_ntoa_format+0x118> + 80001e24: 01000793 li a5,16 + 80001e28: 02f88c63 beq a7,a5,80001e60 <_ntoa_format+0x484> + 80001e2c: 00200793 li a5,2 + 80001e30: e2f88ce3 beq a7,a5,80001c68 <_ntoa_format+0x28c> + 80001e34: 00337313 andi t1,t1,3 + 80001e38: ea031ce3 bnez t1,80001cf0 <_ntoa_format+0x314> + 80001e3c: 02000413 li s0,32 + 80001e40: cd2464e3 bltu s0,s2,80001b08 <_ntoa_format+0x12c> + 80001e44: e3dff06f j 80001c80 <_ntoa_format+0x2a4> + 80001e48: 01000713 li a4,16 + 80001e4c: f8e88ae3 beq a7,a4,80001de0 <_ntoa_format+0x404> + 80001e50: 00200793 li a5,2 + 80001e54: 00f88c63 beq a7,a5,80001e6c <_ntoa_format+0x490> + 80001e58: 01f00793 li a5,31 + 80001e5c: df5ff06f j 80001c50 <_ntoa_format+0x274> + 80001e60: 02037793 andi a5,t1,32 + 80001e64: fc0788e3 beqz a5,80001e34 <_ntoa_format+0x458> + 80001e68: e01ff06f j 80001c68 <_ntoa_format+0x28c> + 80001e6c: 01f00713 li a4,31 + 80001e70: dc9ff06f j 80001c38 <_ntoa_format+0x25c> + +0000000080001e74 <_ntoa_long>: + 80001e74: f4010113 addi sp,sp,-192 + 80001e78: 09413823 sd s4,144(sp) + 80001e7c: 09513423 sd s5,136(sp) + 80001e80: 09613023 sd s6,128(sp) + 80001e84: 07713c23 sd s7,120(sp) + 80001e88: 07813823 sd s8,112(sp) + 80001e8c: 07913423 sd s9,104(sp) + 80001e90: 05b13c23 sd s11,88(sp) + 80001e94: 0a113c23 sd ra,184(sp) + 80001e98: 0a813823 sd s0,176(sp) + 80001e9c: 0a913423 sd s1,168(sp) + 80001ea0: 0b213023 sd s2,160(sp) + 80001ea4: 09313c23 sd s3,152(sp) + 80001ea8: 07a13023 sd s10,96(sp) + 80001eac: 02a13023 sd a0,32(sp) + 80001eb0: 03113423 sd a7,40(sp) + 80001eb4: 0c812a03 lw s4,200(sp) + 80001eb8: 00070d93 mv s11,a4 + 80001ebc: 00058b13 mv s6,a1 + 80001ec0: 00060b93 mv s7,a2 + 80001ec4: 00068c13 mv s8,a3 + 80001ec8: 00078c93 mv s9,a5 + 80001ecc: 00080a93 mv s5,a6 + 80001ed0: 00071863 bnez a4,80001ee0 <_ntoa_long+0x6c> + 80001ed4: 400a7793 andi a5,s4,1024 + 80001ed8: fefa7a13 andi s4,s4,-17 + 80001edc: 0e079663 bnez a5,80001fc8 <_ntoa_long+0x154> + 80001ee0: 020a7793 andi a5,s4,32 + 80001ee4: 06100413 li s0,97 + 80001ee8: 0c079c63 bnez a5,80001fc0 <_ntoa_long+0x14c> + 80001eec: 00000d13 li s10,0 + 80001ef0: 03010493 addi s1,sp,48 + 80001ef4: 00900913 li s2,9 + 80001ef8: ff64041b addiw s0,s0,-10 + 80001efc: 02000993 li s3,32 + 80001f00: 00c0006f j 80001f0c <_ntoa_long+0x98> + 80001f04: 053d0463 beq s10,s3,80001f4c <_ntoa_long+0xd8> + 80001f08: 00050d93 mv s11,a0 + 80001f0c: 000a8593 mv a1,s5 + 80001f10: 000d8513 mv a0,s11 + 80001f14: a88ff0ef jal ra,8000119c <__umoddi3> + 80001f18: 0ff57313 andi t1,a0,255 + 80001f1c: 0303071b addiw a4,t1,48 + 80001f20: 0064033b addw t1,s0,t1 + 80001f24: 0ff37313 andi t1,t1,255 + 80001f28: 00a96463 bltu s2,a0,80001f30 <_ntoa_long+0xbc> + 80001f2c: 0ff77313 andi t1,a4,255 + 80001f30: 001d0d13 addi s10,s10,1 + 80001f34: 01a48733 add a4,s1,s10 + 80001f38: 000d8513 mv a0,s11 + 80001f3c: 000a8593 mv a1,s5 + 80001f40: fe670fa3 sb t1,-1(a4) + 80001f44: a10ff0ef jal ra,80001154 <__udivdi3> + 80001f48: fb5dfee3 bgeu s11,s5,80001f04 <_ntoa_long+0x90> + 80001f4c: 0c012703 lw a4,192(sp) + 80001f50: 02813783 ld a5,40(sp) + 80001f54: 02013503 ld a0,32(sp) + 80001f58: 01413823 sd s4,16(sp) + 80001f5c: 00e13423 sd a4,8(sp) + 80001f60: 00f13023 sd a5,0(sp) + 80001f64: 000a889b sext.w a7,s5 + 80001f68: 000c8813 mv a6,s9 + 80001f6c: 000d0793 mv a5,s10 + 80001f70: 00048713 mv a4,s1 + 80001f74: 000c0693 mv a3,s8 + 80001f78: 000b8613 mv a2,s7 + 80001f7c: 000b0593 mv a1,s6 + 80001f80: a5dff0ef jal ra,800019dc <_ntoa_format> + 80001f84: 0b813083 ld ra,184(sp) + 80001f88: 0b013403 ld s0,176(sp) + 80001f8c: 0a813483 ld s1,168(sp) + 80001f90: 0a013903 ld s2,160(sp) + 80001f94: 09813983 ld s3,152(sp) + 80001f98: 09013a03 ld s4,144(sp) + 80001f9c: 08813a83 ld s5,136(sp) + 80001fa0: 08013b03 ld s6,128(sp) + 80001fa4: 07813b83 ld s7,120(sp) + 80001fa8: 07013c03 ld s8,112(sp) + 80001fac: 06813c83 ld s9,104(sp) + 80001fb0: 06013d03 ld s10,96(sp) + 80001fb4: 05813d83 ld s11,88(sp) + 80001fb8: 0c010113 addi sp,sp,192 + 80001fbc: 00008067 ret + 80001fc0: 04100413 li s0,65 + 80001fc4: f29ff06f j 80001eec <_ntoa_long+0x78> + 80001fc8: 00000d13 li s10,0 + 80001fcc: 03010493 addi s1,sp,48 + 80001fd0: f7dff06f j 80001f4c <_ntoa_long+0xd8> + +0000000080001fd4 <_ntoa_long_long>: + 80001fd4: f4010113 addi sp,sp,-192 + 80001fd8: 09413823 sd s4,144(sp) + 80001fdc: 09513423 sd s5,136(sp) + 80001fe0: 09613023 sd s6,128(sp) + 80001fe4: 07713c23 sd s7,120(sp) + 80001fe8: 07813823 sd s8,112(sp) + 80001fec: 07913423 sd s9,104(sp) + 80001ff0: 05b13c23 sd s11,88(sp) + 80001ff4: 0a113c23 sd ra,184(sp) + 80001ff8: 0a813823 sd s0,176(sp) + 80001ffc: 0a913423 sd s1,168(sp) + 80002000: 0b213023 sd s2,160(sp) + 80002004: 09313c23 sd s3,152(sp) + 80002008: 07a13023 sd s10,96(sp) + 8000200c: 02a13023 sd a0,32(sp) + 80002010: 03113423 sd a7,40(sp) + 80002014: 0c812a03 lw s4,200(sp) + 80002018: 00070d93 mv s11,a4 + 8000201c: 00058b13 mv s6,a1 + 80002020: 00060b93 mv s7,a2 + 80002024: 00068c13 mv s8,a3 + 80002028: 00078c93 mv s9,a5 + 8000202c: 00080a93 mv s5,a6 + 80002030: 00071863 bnez a4,80002040 <_ntoa_long_long+0x6c> + 80002034: 400a7793 andi a5,s4,1024 + 80002038: fefa7a13 andi s4,s4,-17 + 8000203c: 0e079663 bnez a5,80002128 <_ntoa_long_long+0x154> + 80002040: 020a7793 andi a5,s4,32 + 80002044: 06100413 li s0,97 + 80002048: 0c079c63 bnez a5,80002120 <_ntoa_long_long+0x14c> + 8000204c: 00000d13 li s10,0 + 80002050: 03010493 addi s1,sp,48 + 80002054: 00900913 li s2,9 + 80002058: ff64041b addiw s0,s0,-10 + 8000205c: 02000993 li s3,32 + 80002060: 00c0006f j 8000206c <_ntoa_long_long+0x98> + 80002064: 053d0463 beq s10,s3,800020ac <_ntoa_long_long+0xd8> + 80002068: 00050d93 mv s11,a0 + 8000206c: 000a8593 mv a1,s5 + 80002070: 000d8513 mv a0,s11 + 80002074: 928ff0ef jal ra,8000119c <__umoddi3> + 80002078: 0ff57313 andi t1,a0,255 + 8000207c: 0303071b addiw a4,t1,48 + 80002080: 0064033b addw t1,s0,t1 + 80002084: 0ff37313 andi t1,t1,255 + 80002088: 00a96463 bltu s2,a0,80002090 <_ntoa_long_long+0xbc> + 8000208c: 0ff77313 andi t1,a4,255 + 80002090: 001d0d13 addi s10,s10,1 + 80002094: 01a48733 add a4,s1,s10 + 80002098: 000d8513 mv a0,s11 + 8000209c: 000a8593 mv a1,s5 + 800020a0: fe670fa3 sb t1,-1(a4) + 800020a4: 8b0ff0ef jal ra,80001154 <__udivdi3> + 800020a8: fb5dfee3 bgeu s11,s5,80002064 <_ntoa_long_long+0x90> + 800020ac: 0c012703 lw a4,192(sp) + 800020b0: 02813783 ld a5,40(sp) + 800020b4: 02013503 ld a0,32(sp) + 800020b8: 01413823 sd s4,16(sp) + 800020bc: 00e13423 sd a4,8(sp) + 800020c0: 00f13023 sd a5,0(sp) + 800020c4: 000a889b sext.w a7,s5 + 800020c8: 000c8813 mv a6,s9 + 800020cc: 000d0793 mv a5,s10 + 800020d0: 00048713 mv a4,s1 + 800020d4: 000c0693 mv a3,s8 + 800020d8: 000b8613 mv a2,s7 + 800020dc: 000b0593 mv a1,s6 + 800020e0: 8fdff0ef jal ra,800019dc <_ntoa_format> + 800020e4: 0b813083 ld ra,184(sp) + 800020e8: 0b013403 ld s0,176(sp) + 800020ec: 0a813483 ld s1,168(sp) + 800020f0: 0a013903 ld s2,160(sp) + 800020f4: 09813983 ld s3,152(sp) + 800020f8: 09013a03 ld s4,144(sp) + 800020fc: 08813a83 ld s5,136(sp) + 80002100: 08013b03 ld s6,128(sp) + 80002104: 07813b83 ld s7,120(sp) + 80002108: 07013c03 ld s8,112(sp) + 8000210c: 06813c83 ld s9,104(sp) + 80002110: 06013d03 ld s10,96(sp) + 80002114: 05813d83 ld s11,88(sp) + 80002118: 0c010113 addi sp,sp,192 + 8000211c: 00008067 ret + 80002120: 04100413 li s0,65 + 80002124: f29ff06f j 8000204c <_ntoa_long_long+0x78> + 80002128: 00000d13 li s10,0 + 8000212c: 03010493 addi s1,sp,48 + 80002130: f7dff06f j 800020ac <_ntoa_long_long+0xd8> + +0000000080002134 <_vsnprintf>: + 80002134: f6010113 addi sp,sp,-160 + 80002138: 08913423 sd s1,136(sp) + 8000213c: 09213023 sd s2,128(sp) + 80002140: 07313c23 sd s3,120(sp) + 80002144: 05713c23 sd s7,88(sp) + 80002148: 05813823 sd s8,80(sp) + 8000214c: 08113c23 sd ra,152(sp) + 80002150: 08813823 sd s0,144(sp) + 80002154: 07413823 sd s4,112(sp) + 80002158: 07513423 sd s5,104(sp) + 8000215c: 07613023 sd s6,96(sp) + 80002160: 05913423 sd s9,72(sp) + 80002164: 05a13023 sd s10,64(sp) + 80002168: 03b13c23 sd s11,56(sp) + 8000216c: 00058493 mv s1,a1 + 80002170: 00060c13 mv s8,a2 + 80002174: 00068b93 mv s7,a3 + 80002178: 00070993 mv s3,a4 + 8000217c: 00000917 auipc s2,0x0 + 80002180: 85c90913 addi s2,s2,-1956 # 800019d8 <_out_null> + 80002184: 00058463 beqz a1,8000218c <_vsnprintf+0x58> + 80002188: 00050913 mv s2,a0 + 8000218c: 000bc503 lbu a0,0(s7) + 80002190: 00000d13 li s10,0 + 80002194: 66050663 beqz a0,80002800 <_vsnprintf+0x6cc> + 80002198: 000107b7 lui a5,0x10 + 8000219c: fff78793 addi a5,a5,-1 # ffff <_entry_offset+0xffff> + 800021a0: 02500a13 li s4,37 + 800021a4: 00002417 auipc s0,0x2 + 800021a8: 39040413 addi s0,s0,912 # 80004534 + 800021ac: 00f13c23 sd a5,24(sp) + 800021b0: 0200006f j 800021d0 <_vsnprintf+0x9c> + 800021b4: 000d0613 mv a2,s10 + 800021b8: 000c0693 mv a3,s8 + 800021bc: 00048593 mv a1,s1 + 800021c0: 001d0d13 addi s10,s10,1 + 800021c4: 000900e7 jalr s2 + 800021c8: 000bc503 lbu a0,0(s7) + 800021cc: 1c050263 beqz a0,80002390 <_vsnprintf+0x25c> + 800021d0: 001b8b93 addi s7,s7,1 + 800021d4: ff4510e3 bne a0,s4,800021b4 <_vsnprintf+0x80> + 800021d8: 00000593 li a1,0 + 800021dc: 01000813 li a6,16 + 800021e0: 000bc503 lbu a0,0(s7) + 800021e4: 001b8713 addi a4,s7,1 + 800021e8: 00070613 mv a2,a4 + 800021ec: fe05079b addiw a5,a0,-32 + 800021f0: 0ff7f793 andi a5,a5,255 + 800021f4: 00f86c63 bltu a6,a5,8000220c <_vsnprintf+0xd8> + 800021f8: 00279793 slli a5,a5,0x2 + 800021fc: 008787b3 add a5,a5,s0 + 80002200: 0007a783 lw a5,0(a5) + 80002204: 008787b3 add a5,a5,s0 + 80002208: 00078067 jr a5 + 8000220c: fd05079b addiw a5,a0,-48 + 80002210: 0ff7f793 andi a5,a5,255 + 80002214: 00900813 li a6,9 + 80002218: 0ef87c63 bgeu a6,a5,80002310 <_vsnprintf+0x1dc> + 8000221c: 02a00793 li a5,42 + 80002220: 20f50463 beq a0,a5,80002428 <_vsnprintf+0x2f4> + 80002224: 000b8613 mv a2,s7 + 80002228: 00000d93 li s11,0 + 8000222c: 00070b93 mv s7,a4 + 80002230: 02e00793 li a5,46 + 80002234: 00000c93 li s9,0 + 80002238: 12f50463 beq a0,a5,80002360 <_vsnprintf+0x22c> + 8000223c: f985079b addiw a5,a0,-104 + 80002240: 0ff7f793 andi a5,a5,255 + 80002244: 01200713 li a4,18 + 80002248: 08f76463 bltu a4,a5,800022d0 <_vsnprintf+0x19c> + 8000224c: 00002717 auipc a4,0x2 + 80002250: 32c70713 addi a4,a4,812 # 80004578 + 80002254: 00279793 slli a5,a5,0x2 + 80002258: 00e787b3 add a5,a5,a4 + 8000225c: 0007a783 lw a5,0(a5) + 80002260: 00e787b3 add a5,a5,a4 + 80002264: 00078067 jr a5 + 80002268: 0015e593 ori a1,a1,1 + 8000226c: 0005859b sext.w a1,a1 + 80002270: 00070b93 mv s7,a4 + 80002274: f6dff06f j 800021e0 <_vsnprintf+0xac> + 80002278: 0025e593 ori a1,a1,2 + 8000227c: 0005859b sext.w a1,a1 + 80002280: 00070b93 mv s7,a4 + 80002284: f5dff06f j 800021e0 <_vsnprintf+0xac> + 80002288: 0045e593 ori a1,a1,4 + 8000228c: 0005859b sext.w a1,a1 + 80002290: 00070b93 mv s7,a4 + 80002294: f4dff06f j 800021e0 <_vsnprintf+0xac> + 80002298: 0105e593 ori a1,a1,16 + 8000229c: 0005859b sext.w a1,a1 + 800022a0: 00070b93 mv s7,a4 + 800022a4: f3dff06f j 800021e0 <_vsnprintf+0xac> + 800022a8: 0085e593 ori a1,a1,8 + 800022ac: 0005859b sext.w a1,a1 + 800022b0: 00070b93 mv s7,a4 + 800022b4: f2dff06f j 800021e0 <_vsnprintf+0xac> + 800022b8: 00164503 lbu a0,1(a2) + 800022bc: 06800793 li a5,104 + 800022c0: 52f50663 beq a0,a5,800027ec <_vsnprintf+0x6b8> + 800022c4: 0805e593 ori a1,a1,128 + 800022c8: 0005859b sext.w a1,a1 + 800022cc: 001b8b93 addi s7,s7,1 + 800022d0: fdb5079b addiw a5,a0,-37 + 800022d4: 0ff7f793 andi a5,a5,255 + 800022d8: 05300713 li a4,83 + 800022dc: ecf76ce3 bltu a4,a5,800021b4 <_vsnprintf+0x80> + 800022e0: 00002717 auipc a4,0x2 + 800022e4: 2e470713 addi a4,a4,740 # 800045c4 + 800022e8: 00279793 slli a5,a5,0x2 + 800022ec: 00e787b3 add a5,a5,a4 + 800022f0: 0007a783 lw a5,0(a5) + 800022f4: 00e787b3 add a5,a5,a4 + 800022f8: 00078067 jr a5 + 800022fc: 00164503 lbu a0,1(a2) + 80002300: 1005e593 ori a1,a1,256 + 80002304: 0005859b sext.w a1,a1 + 80002308: 001b8b93 addi s7,s7,1 + 8000230c: fc5ff06f j 800022d0 <_vsnprintf+0x19c> + 80002310: 00000d93 li s11,0 + 80002314: 00900813 li a6,9 + 80002318: 0080006f j 80002320 <_vsnprintf+0x1ec> + 8000231c: 00170713 addi a4,a4,1 + 80002320: 002d979b slliw a5,s11,0x2 + 80002324: 01b787bb addw a5,a5,s11 + 80002328: 0017979b slliw a5,a5,0x1 + 8000232c: 00a787bb addw a5,a5,a0 + 80002330: 00074503 lbu a0,0(a4) + 80002334: 000b8893 mv a7,s7 + 80002338: fd078d9b addiw s11,a5,-48 + 8000233c: fd05061b addiw a2,a0,-48 + 80002340: 0ff67613 andi a2,a2,255 + 80002344: 00070b93 mv s7,a4 + 80002348: fcc87ae3 bgeu a6,a2,8000231c <_vsnprintf+0x1e8> + 8000234c: 02e00793 li a5,46 + 80002350: 00070613 mv a2,a4 + 80002354: 00288b93 addi s7,a7,2 + 80002358: 00000c93 li s9,0 + 8000235c: eef510e3 bne a0,a5,8000223c <_vsnprintf+0x108> + 80002360: 00164503 lbu a0,1(a2) + 80002364: 4005e593 ori a1,a1,1024 + 80002368: 00900713 li a4,9 + 8000236c: fd05079b addiw a5,a0,-48 + 80002370: 0ff7f793 andi a5,a5,255 + 80002374: 0005859b sext.w a1,a1 + 80002378: 06f77c63 bgeu a4,a5,800023f0 <_vsnprintf+0x2bc> + 8000237c: 02a00793 li a5,42 + 80002380: 32f50e63 beq a0,a5,800026bc <_vsnprintf+0x588> + 80002384: 000b8613 mv a2,s7 + 80002388: 001b8b93 addi s7,s7,1 + 8000238c: eb1ff06f j 8000223c <_vsnprintf+0x108> + 80002390: 000d041b sext.w s0,s10 + 80002394: 018d6463 bltu s10,s8,8000239c <_vsnprintf+0x268> + 80002398: fffc0d13 addi s10,s8,-1 + 8000239c: 000c0693 mv a3,s8 + 800023a0: 000d0613 mv a2,s10 + 800023a4: 00048593 mv a1,s1 + 800023a8: 00000513 li a0,0 + 800023ac: 000900e7 jalr s2 + 800023b0: 09813083 ld ra,152(sp) + 800023b4: 00040513 mv a0,s0 + 800023b8: 09013403 ld s0,144(sp) + 800023bc: 08813483 ld s1,136(sp) + 800023c0: 08013903 ld s2,128(sp) + 800023c4: 07813983 ld s3,120(sp) + 800023c8: 07013a03 ld s4,112(sp) + 800023cc: 06813a83 ld s5,104(sp) + 800023d0: 06013b03 ld s6,96(sp) + 800023d4: 05813b83 ld s7,88(sp) + 800023d8: 05013c03 ld s8,80(sp) + 800023dc: 04813c83 ld s9,72(sp) + 800023e0: 04013d03 ld s10,64(sp) + 800023e4: 03813d83 ld s11,56(sp) + 800023e8: 0a010113 addi sp,sp,160 + 800023ec: 00008067 ret + 800023f0: 002c979b slliw a5,s9,0x2 + 800023f4: 019788bb addw a7,a5,s9 + 800023f8: 000b8813 mv a6,s7 + 800023fc: 0018989b slliw a7,a7,0x1 + 80002400: 001b8b93 addi s7,s7,1 + 80002404: 00a888bb addw a7,a7,a0 + 80002408: 000bc503 lbu a0,0(s7) + 8000240c: fd088c9b addiw s9,a7,-48 + 80002410: fd05079b addiw a5,a0,-48 + 80002414: 0ff7f793 andi a5,a5,255 + 80002418: fcf77ce3 bgeu a4,a5,800023f0 <_vsnprintf+0x2bc> + 8000241c: 000b8613 mv a2,s7 + 80002420: 00280b93 addi s7,a6,2 + 80002424: e19ff06f j 8000223c <_vsnprintf+0x108> + 80002428: 0009a783 lw a5,0(s3) + 8000242c: 00898993 addi s3,s3,8 + 80002430: 00078d9b sext.w s11,a5 + 80002434: 0007c863 bltz a5,80002444 <_vsnprintf+0x310> + 80002438: 001bc503 lbu a0,1(s7) + 8000243c: 002b8b93 addi s7,s7,2 + 80002440: df1ff06f j 80002230 <_vsnprintf+0xfc> + 80002444: 0025e593 ori a1,a1,2 + 80002448: 001bc503 lbu a0,1(s7) + 8000244c: 0005859b sext.w a1,a1 + 80002450: 40f00dbb negw s11,a5 + 80002454: 002b8b93 addi s7,s7,2 + 80002458: dd9ff06f j 80002230 <_vsnprintf+0xfc> + 8000245c: 07800793 li a5,120 + 80002460: 00898a93 addi s5,s3,8 + 80002464: 56f50063 beq a0,a5,800029c4 <_vsnprintf+0x890> + 80002468: 05800793 li a5,88 + 8000246c: 28f50463 beq a0,a5,800026f4 <_vsnprintf+0x5c0> + 80002470: 06f00793 li a5,111 + 80002474: 4af50c63 beq a0,a5,8000292c <_vsnprintf+0x7f8> + 80002478: 06200793 li a5,98 + 8000247c: 54f50063 beq a0,a5,800029bc <_vsnprintf+0x888> + 80002480: fef5ff13 andi t5,a1,-17 + 80002484: 4005f793 andi a5,a1,1024 + 80002488: 06900713 li a4,105 + 8000248c: 000f0f1b sext.w t5,t5 + 80002490: 0007879b sext.w a5,a5 + 80002494: 5ae51063 bne a0,a4,80002a34 <_vsnprintf+0x900> + 80002498: 48079663 bnez a5,80002924 <_vsnprintf+0x7f0> + 8000249c: 2005f593 andi a1,a1,512 + 800024a0: 0005879b sext.w a5,a1 + 800024a4: 00a00813 li a6,10 + 800024a8: 42079663 bnez a5,800028d4 <_vsnprintf+0x7a0> + 800024ac: 100f7793 andi a5,t5,256 + 800024b0: 000f0613 mv a2,t5 + 800024b4: 4e079063 bnez a5,80002994 <_vsnprintf+0x860> + 800024b8: 040f7713 andi a4,t5,64 + 800024bc: 0009a783 lw a5,0(s3) + 800024c0: 4a071a63 bnez a4,80002974 <_vsnprintf+0x840> + 800024c4: 08067613 andi a2,a2,128 + 800024c8: 52060a63 beqz a2,800029fc <_vsnprintf+0x8c8> + 800024cc: 0107979b slliw a5,a5,0x10 + 800024d0: 4107d79b sraiw a5,a5,0x10 + 800024d4: 40f7d61b sraiw a2,a5,0xf + 800024d8: 00c7c733 xor a4,a5,a2 + 800024dc: 40c7073b subw a4,a4,a2 + 800024e0: 03071713 slli a4,a4,0x30 + 800024e4: 03075713 srli a4,a4,0x30 + 800024e8: 000d0613 mv a2,s10 + 800024ec: 01e13423 sd t5,8(sp) + 800024f0: 01b13023 sd s11,0(sp) + 800024f4: 000c8893 mv a7,s9 + 800024f8: 01f7d79b srliw a5,a5,0x1f + 800024fc: 000c0693 mv a3,s8 + 80002500: 00048593 mv a1,s1 + 80002504: 00090513 mv a0,s2 + 80002508: 96dff0ef jal ra,80001e74 <_ntoa_long> + 8000250c: 00050d13 mv s10,a0 + 80002510: 000a8993 mv s3,s5 + 80002514: cb5ff06f j 800021c8 <_vsnprintf+0x94> + 80002518: 00164503 lbu a0,1(a2) + 8000251c: 06c00793 li a5,108 + 80002520: def510e3 bne a0,a5,80002300 <_vsnprintf+0x1cc> + 80002524: 3005e593 ori a1,a1,768 + 80002528: 00264503 lbu a0,2(a2) + 8000252c: 0005859b sext.w a1,a1 + 80002530: 00360b93 addi s7,a2,3 + 80002534: d9dff06f j 800022d0 <_vsnprintf+0x19c> + 80002538: 00898793 addi a5,s3,8 + 8000253c: 001d0813 addi a6,s10,1 + 80002540: 0025f593 andi a1,a1,2 + 80002544: 02f13023 sd a5,32(sp) + 80002548: 00080b13 mv s6,a6 + 8000254c: 32058263 beqz a1,80002870 <_vsnprintf+0x73c> + 80002550: 0009c503 lbu a0,0(s3) + 80002554: 000c0693 mv a3,s8 + 80002558: 000d0613 mv a2,s10 + 8000255c: 00048593 mv a1,s1 + 80002560: 000900e7 jalr s2 + 80002564: 00100793 li a5,1 + 80002568: 43b7f063 bgeu a5,s11,80002988 <_vsnprintf+0x854> + 8000256c: ffed879b addiw a5,s11,-2 + 80002570: 02079a93 slli s5,a5,0x20 + 80002574: 020ada93 srli s5,s5,0x20 + 80002578: 002d0d13 addi s10,s10,2 + 8000257c: 015d0cb3 add s9,s10,s5 + 80002580: 000b0613 mv a2,s6 + 80002584: 000c0693 mv a3,s8 + 80002588: 001b0b13 addi s6,s6,1 + 8000258c: 00048593 mv a1,s1 + 80002590: 02000513 li a0,32 + 80002594: 000900e7 jalr s2 + 80002598: ff6c94e3 bne s9,s6,80002580 <_vsnprintf+0x44c> + 8000259c: 02013983 ld s3,32(sp) + 800025a0: 015d0d33 add s10,s10,s5 + 800025a4: c25ff06f j 800021c8 <_vsnprintf+0x94> + 800025a8: 000d0613 mv a2,s10 + 800025ac: 000c0693 mv a3,s8 + 800025b0: 00048593 mv a1,s1 + 800025b4: 02500513 li a0,37 + 800025b8: 001d0d13 addi s10,s10,1 + 800025bc: 000900e7 jalr s2 + 800025c0: c09ff06f j 800021c8 <_vsnprintf+0x94> + 800025c4: 0009ba83 ld s5,0(s3) + 800025c8: 00898793 addi a5,s3,8 + 800025cc: 02f13023 sd a5,32(sp) + 800025d0: 000ac503 lbu a0,0(s5) + 800025d4: 100c9663 bnez s9,800026e0 <_vsnprintf+0x5ac> + 800025d8: ffe00793 li a5,-2 + 800025dc: 42050863 beqz a0,80002a0c <_vsnprintf+0x8d8> + 800025e0: 00178693 addi a3,a5,1 + 800025e4: 00da8633 add a2,s5,a3 + 800025e8: 000a8793 mv a5,s5 + 800025ec: 0080006f j 800025f4 <_vsnprintf+0x4c0> + 800025f0: 1ec78863 beq a5,a2,800027e0 <_vsnprintf+0x6ac> + 800025f4: 0017c703 lbu a4,1(a5) + 800025f8: 00178793 addi a5,a5,1 + 800025fc: fe071ae3 bnez a4,800025f0 <_vsnprintf+0x4bc> + 80002600: 415787bb subw a5,a5,s5 + 80002604: 00f13823 sd a5,16(sp) + 80002608: 4005f793 andi a5,a1,1024 + 8000260c: 0007899b sext.w s3,a5 + 80002610: 00078c63 beqz a5,80002628 <_vsnprintf+0x4f4> + 80002614: 01013703 ld a4,16(sp) + 80002618: 000c879b sext.w a5,s9 + 8000261c: 01977463 bgeu a4,s9,80002624 <_vsnprintf+0x4f0> + 80002620: 0007079b sext.w a5,a4 + 80002624: 00f13823 sd a5,16(sp) + 80002628: 0025f593 andi a1,a1,2 + 8000262c: 0005879b sext.w a5,a1 + 80002630: 02f13423 sd a5,40(sp) + 80002634: 1c058a63 beqz a1,80002808 <_vsnprintf+0x6d4> + 80002638: 14050863 beqz a0,80002788 <_vsnprintf+0x654> + 8000263c: 000d0613 mv a2,s10 + 80002640: 00098863 beqz s3,80002650 <_vsnprintf+0x51c> + 80002644: fffc879b addiw a5,s9,-1 + 80002648: 120c8863 beqz s9,80002778 <_vsnprintf+0x644> + 8000264c: 00078c93 mv s9,a5 + 80002650: 000c0693 mv a3,s8 + 80002654: 00048593 mv a1,s1 + 80002658: 00160b13 addi s6,a2,1 + 8000265c: 000900e7 jalr s2 + 80002660: 41ab07b3 sub a5,s6,s10 + 80002664: 00fa87b3 add a5,s5,a5 + 80002668: 0007c503 lbu a0,0(a5) + 8000266c: 10050863 beqz a0,8000277c <_vsnprintf+0x648> + 80002670: 000b0613 mv a2,s6 + 80002674: fcdff06f j 80002640 <_vsnprintf+0x50c> + 80002678: 0009b703 ld a4,0(s3) + 8000267c: 0215e593 ori a1,a1,33 + 80002680: 0005859b sext.w a1,a1 + 80002684: 01000793 li a5,16 + 80002688: 000d0613 mv a2,s10 + 8000268c: 00b13423 sd a1,8(sp) + 80002690: 00f13023 sd a5,0(sp) + 80002694: 000c8893 mv a7,s9 + 80002698: 01000813 li a6,16 + 8000269c: 00000793 li a5,0 + 800026a0: 000c0693 mv a3,s8 + 800026a4: 00048593 mv a1,s1 + 800026a8: 00090513 mv a0,s2 + 800026ac: 929ff0ef jal ra,80001fd4 <_ntoa_long_long> + 800026b0: 00898993 addi s3,s3,8 + 800026b4: 00050d13 mv s10,a0 + 800026b8: b11ff06f j 800021c8 <_vsnprintf+0x94> + 800026bc: 0009a883 lw a7,0(s3) + 800026c0: 00264503 lbu a0,2(a2) + 800026c4: 00360b93 addi s7,a2,3 + 800026c8: fff8c793 not a5,a7 + 800026cc: 43f7d793 srai a5,a5,0x3f + 800026d0: 00f8fcb3 and s9,a7,a5 + 800026d4: 00898993 addi s3,s3,8 + 800026d8: 00260613 addi a2,a2,2 + 800026dc: b61ff06f j 8000223c <_vsnprintf+0x108> + 800026e0: 020c9793 slli a5,s9,0x20 + 800026e4: 0207d793 srli a5,a5,0x20 + 800026e8: 32050263 beqz a0,80002a0c <_vsnprintf+0x8d8> + 800026ec: fff78793 addi a5,a5,-1 + 800026f0: ef1ff06f j 800025e0 <_vsnprintf+0x4ac> + 800026f4: ff35ff13 andi t5,a1,-13 + 800026f8: 000f0f1b sext.w t5,t5 + 800026fc: 4005f793 andi a5,a1,1024 + 80002700: 020f6f13 ori t5,t5,32 + 80002704: 20078863 beqz a5,80002914 <_vsnprintf+0x7e0> + 80002708: 01000813 li a6,16 + 8000270c: ffef7f13 andi t5,t5,-2 + 80002710: 000f0f1b sext.w t5,t5 + 80002714: 200f7793 andi a5,t5,512 + 80002718: 06900713 li a4,105 + 8000271c: 0007879b sext.w a5,a5 + 80002720: d8e504e3 beq a0,a4,800024a8 <_vsnprintf+0x374> + 80002724: 06400713 li a4,100 + 80002728: d8e500e3 beq a0,a4,800024a8 <_vsnprintf+0x374> + 8000272c: 22079663 bnez a5,80002958 <_vsnprintf+0x824> + 80002730: 100f7793 andi a5,t5,256 + 80002734: 000f0713 mv a4,t5 + 80002738: 2a079463 bnez a5,800029e0 <_vsnprintf+0x8ac> + 8000273c: 040f7793 andi a5,t5,64 + 80002740: 24079063 bnez a5,80002980 <_vsnprintf+0x84c> + 80002744: 08077713 andi a4,a4,128 + 80002748: 2c070663 beqz a4,80002a14 <_vsnprintf+0x8e0> + 8000274c: 0009a703 lw a4,0(s3) + 80002750: 01813783 ld a5,24(sp) + 80002754: 00e7f733 and a4,a5,a4 + 80002758: 02071713 slli a4,a4,0x20 + 8000275c: 000d0613 mv a2,s10 + 80002760: 01e13423 sd t5,8(sp) + 80002764: 01b13023 sd s11,0(sp) + 80002768: 000c8893 mv a7,s9 + 8000276c: 00000793 li a5,0 + 80002770: 02075713 srli a4,a4,0x20 + 80002774: d89ff06f j 800024fc <_vsnprintf+0x3c8> + 80002778: 00060b13 mv s6,a2 + 8000277c: 02813783 ld a5,40(sp) + 80002780: 04078a63 beqz a5,800027d4 <_vsnprintf+0x6a0> + 80002784: 000b0d13 mv s10,s6 + 80002788: 01013703 ld a4,16(sp) + 8000278c: 0db77e63 bgeu a4,s11,80002868 <_vsnprintf+0x734> + 80002790: fffd879b addiw a5,s11,-1 + 80002794: 40e7873b subw a4,a5,a4 + 80002798: 02071713 slli a4,a4,0x20 + 8000279c: 02075713 srli a4,a4,0x20 + 800027a0: 001d0813 addi a6,s10,1 + 800027a4: 01070b33 add s6,a4,a6 + 800027a8: 0080006f j 800027b0 <_vsnprintf+0x67c> + 800027ac: 00180813 addi a6,a6,1 + 800027b0: 000d0613 mv a2,s10 + 800027b4: 01013823 sd a6,16(sp) + 800027b8: 000c0693 mv a3,s8 + 800027bc: 00048593 mv a1,s1 + 800027c0: 02000513 li a0,32 + 800027c4: 00080d13 mv s10,a6 + 800027c8: 000900e7 jalr s2 + 800027cc: 01013803 ld a6,16(sp) + 800027d0: fd0b1ee3 bne s6,a6,800027ac <_vsnprintf+0x678> + 800027d4: 02013983 ld s3,32(sp) + 800027d8: 000b0d13 mv s10,s6 + 800027dc: 9edff06f j 800021c8 <_vsnprintf+0x94> + 800027e0: 0006879b sext.w a5,a3 + 800027e4: 00f13823 sd a5,16(sp) + 800027e8: e21ff06f j 80002608 <_vsnprintf+0x4d4> + 800027ec: 0c05e593 ori a1,a1,192 + 800027f0: 00264503 lbu a0,2(a2) + 800027f4: 0005859b sext.w a1,a1 + 800027f8: 00360b93 addi s7,a2,3 + 800027fc: ad5ff06f j 800022d0 <_vsnprintf+0x19c> + 80002800: 00000413 li s0,0 + 80002804: b91ff06f j 80002394 <_vsnprintf+0x260> + 80002808: 01013703 ld a4,16(sp) + 8000280c: 0017079b addiw a5,a4,1 + 80002810: 21b77c63 bgeu a4,s11,80002a28 <_vsnprintf+0x8f4> + 80002814: fffd879b addiw a5,s11,-1 + 80002818: 40e787bb subw a5,a5,a4 + 8000281c: 02079793 slli a5,a5,0x20 + 80002820: 0207d793 srli a5,a5,0x20 + 80002824: 001d0813 addi a6,s10,1 + 80002828: 01078b33 add s6,a5,a6 + 8000282c: 00c0006f j 80002838 <_vsnprintf+0x704> + 80002830: 01013803 ld a6,16(sp) + 80002834: 00180813 addi a6,a6,1 + 80002838: 000d0613 mv a2,s10 + 8000283c: 000c0693 mv a3,s8 + 80002840: 00080d13 mv s10,a6 + 80002844: 01013823 sd a6,16(sp) + 80002848: 00048593 mv a1,s1 + 8000284c: 02000513 li a0,32 + 80002850: 000900e7 jalr s2 + 80002854: fd6d1ee3 bne s10,s6,80002830 <_vsnprintf+0x6fc> + 80002858: 000ac503 lbu a0,0(s5) + 8000285c: 001d879b addiw a5,s11,1 + 80002860: 00f13823 sd a5,16(sp) + 80002864: dc051ce3 bnez a0,8000263c <_vsnprintf+0x508> + 80002868: 000d0b13 mv s6,s10 + 8000286c: f69ff06f j 800027d4 <_vsnprintf+0x6a0> + 80002870: 00100793 li a5,1 + 80002874: 1bb7f463 bgeu a5,s11,80002a1c <_vsnprintf+0x8e8> + 80002878: ffed879b addiw a5,s11,-2 + 8000287c: 02079a93 slli s5,a5,0x20 + 80002880: 020ada93 srli s5,s5,0x20 + 80002884: 010a8ab3 add s5,s5,a6 + 80002888: 00c0006f j 80002894 <_vsnprintf+0x760> + 8000288c: 01013803 ld a6,16(sp) + 80002890: 00180813 addi a6,a6,1 + 80002894: 000d0613 mv a2,s10 + 80002898: 000c0693 mv a3,s8 + 8000289c: 00080d13 mv s10,a6 + 800028a0: 01013823 sd a6,16(sp) + 800028a4: 00048593 mv a1,s1 + 800028a8: 02000513 li a0,32 + 800028ac: 000900e7 jalr s2 + 800028b0: fdaa9ee3 bne s5,s10,8000288c <_vsnprintf+0x758> + 800028b4: 001a8d13 addi s10,s5,1 + 800028b8: 0009c503 lbu a0,0(s3) + 800028bc: 000c0693 mv a3,s8 + 800028c0: 000a8613 mv a2,s5 + 800028c4: 00048593 mv a1,s1 + 800028c8: 000900e7 jalr s2 + 800028cc: 02013983 ld s3,32(sp) + 800028d0: 8f9ff06f j 800021c8 <_vsnprintf+0x94> + 800028d4: 0009b783 ld a5,0(s3) + 800028d8: 000d0613 mv a2,s10 + 800028dc: 01e13423 sd t5,8(sp) + 800028e0: 43f7d713 srai a4,a5,0x3f + 800028e4: 00f745b3 xor a1,a4,a5 + 800028e8: 01b13023 sd s11,0(sp) + 800028ec: 000c8893 mv a7,s9 + 800028f0: 03f7d793 srli a5,a5,0x3f + 800028f4: 40e58733 sub a4,a1,a4 + 800028f8: 000c0693 mv a3,s8 + 800028fc: 00048593 mv a1,s1 + 80002900: 00090513 mv a0,s2 + 80002904: ed0ff0ef jal ra,80001fd4 <_ntoa_long_long> + 80002908: 00050d13 mv s10,a0 + 8000290c: 000a8993 mv s3,s5 + 80002910: 8b9ff06f j 800021c8 <_vsnprintf+0x94> + 80002914: 2005f793 andi a5,a1,512 + 80002918: 0007879b sext.w a5,a5 + 8000291c: 01000813 li a6,16 + 80002920: e0dff06f j 8000272c <_vsnprintf+0x5f8> + 80002924: 00a00813 li a6,10 + 80002928: de5ff06f j 8000270c <_vsnprintf+0x5d8> + 8000292c: 00800813 li a6,8 + 80002930: 00058f13 mv t5,a1 + 80002934: 400f7713 andi a4,t5,1024 + 80002938: 06400613 li a2,100 + 8000293c: 000f0793 mv a5,t5 + 80002940: 0007071b sext.w a4,a4 + 80002944: 0ec51c63 bne a0,a2,80002a3c <_vsnprintf+0x908> + 80002948: dc0712e3 bnez a4,8000270c <_vsnprintf+0x5d8> + 8000294c: 2007f793 andi a5,a5,512 + 80002950: 0007879b sext.w a5,a5 + 80002954: b55ff06f j 800024a8 <_vsnprintf+0x374> + 80002958: 0009b703 ld a4,0(s3) + 8000295c: 000d0613 mv a2,s10 + 80002960: 01e13423 sd t5,8(sp) + 80002964: 01b13023 sd s11,0(sp) + 80002968: 000c8893 mv a7,s9 + 8000296c: 00000793 li a5,0 + 80002970: f89ff06f j 800028f8 <_vsnprintf+0x7c4> + 80002974: 0ff7f793 andi a5,a5,255 + 80002978: 00078713 mv a4,a5 + 8000297c: b6dff06f j 800024e8 <_vsnprintf+0x3b4> + 80002980: 0009c703 lbu a4,0(s3) + 80002984: dd5ff06f j 80002758 <_vsnprintf+0x624> + 80002988: 02013983 ld s3,32(sp) + 8000298c: 000b0d13 mv s10,s6 + 80002990: 839ff06f j 800021c8 <_vsnprintf+0x94> + 80002994: 0009b783 ld a5,0(s3) + 80002998: 000d0613 mv a2,s10 + 8000299c: 01e13423 sd t5,8(sp) + 800029a0: 43f7d713 srai a4,a5,0x3f + 800029a4: 00f745b3 xor a1,a4,a5 + 800029a8: 01b13023 sd s11,0(sp) + 800029ac: 000c8893 mv a7,s9 + 800029b0: 03f7d793 srli a5,a5,0x3f + 800029b4: 40e58733 sub a4,a1,a4 + 800029b8: b45ff06f j 800024fc <_vsnprintf+0x3c8> + 800029bc: 00200813 li a6,2 + 800029c0: f71ff06f j 80002930 <_vsnprintf+0x7fc> + 800029c4: 4005f713 andi a4,a1,1024 + 800029c8: 0007071b sext.w a4,a4 + 800029cc: 01000813 li a6,16 + 800029d0: ff35f593 andi a1,a1,-13 + 800029d4: 00058f1b sext.w t5,a1 + 800029d8: d2071ae3 bnez a4,8000270c <_vsnprintf+0x5d8> + 800029dc: d39ff06f j 80002714 <_vsnprintf+0x5e0> + 800029e0: 0009b703 ld a4,0(s3) + 800029e4: 000d0613 mv a2,s10 + 800029e8: 01e13423 sd t5,8(sp) + 800029ec: 01b13023 sd s11,0(sp) + 800029f0: 000c8893 mv a7,s9 + 800029f4: 00000793 li a5,0 + 800029f8: b05ff06f j 800024fc <_vsnprintf+0x3c8> + 800029fc: 41f7d61b sraiw a2,a5,0x1f + 80002a00: 00c7c733 xor a4,a5,a2 + 80002a04: 40c7073b subw a4,a4,a2 + 80002a08: ae1ff06f j 800024e8 <_vsnprintf+0x3b4> + 80002a0c: 00013823 sd zero,16(sp) + 80002a10: bf9ff06f j 80002608 <_vsnprintf+0x4d4> + 80002a14: 0009a703 lw a4,0(s3) + 80002a18: d41ff06f j 80002758 <_vsnprintf+0x624> + 80002a1c: 000d0a93 mv s5,s10 + 80002a20: 00080d13 mv s10,a6 + 80002a24: e95ff06f j 800028b8 <_vsnprintf+0x784> + 80002a28: 00f13823 sd a5,16(sp) + 80002a2c: c00518e3 bnez a0,8000263c <_vsnprintf+0x508> + 80002a30: e39ff06f j 80002868 <_vsnprintf+0x734> + 80002a34: 00a00813 li a6,10 + 80002a38: efdff06f j 80002934 <_vsnprintf+0x800> + 80002a3c: 000f0593 mv a1,t5 + 80002a40: f91ff06f j 800029d0 <_vsnprintf+0x89c> + +0000000080002a44 <_out_char>: + 80002a44: 00051463 bnez a0,80002a4c <_out_char+0x8> + 80002a48: 00008067 ret + 80002a4c: e48fe06f j 80001094 + +0000000080002a50 : + 80002a50: fa010113 addi sp,sp,-96 + 80002a54: 02810313 addi t1,sp,40 + 80002a58: 02b13423 sd a1,40(sp) + 80002a5c: 02c13823 sd a2,48(sp) + 80002a60: 02d13c23 sd a3,56(sp) + 80002a64: 04e13023 sd a4,64(sp) + 80002a68: 00050693 mv a3,a0 + 80002a6c: 00010593 mv a1,sp + 80002a70: 00030713 mv a4,t1 + 80002a74: fff00613 li a2,-1 + 80002a78: 00000517 auipc a0,0x0 + 80002a7c: fcc50513 addi a0,a0,-52 # 80002a44 <_out_char> + 80002a80: 00113c23 sd ra,24(sp) + 80002a84: 04f13423 sd a5,72(sp) + 80002a88: 05013823 sd a6,80(sp) + 80002a8c: 05113c23 sd a7,88(sp) + 80002a90: 00613423 sd t1,8(sp) + 80002a94: ea0ff0ef jal ra,80002134 <_vsnprintf> + 80002a98: 01813083 ld ra,24(sp) + 80002a9c: 06010113 addi sp,sp,96 + 80002aa0: 00008067 ret + +0000000080002aa4 : + 80002aa4: 00300793 li a5,3 + 80002aa8: 06c7f863 bgeu a5,a2,80002b18 + 80002aac: 00054783 lbu a5,0(a0) + 80002ab0: ffc67693 andi a3,a2,-4 + 80002ab4: 0005c703 lbu a4,0(a1) + 80002ab8: 00d506b3 add a3,a0,a3 + 80002abc: 04078863 beqz a5,80002b0c + 80002ac0: 0ae79463 bne a5,a4,80002b68 + 80002ac4: 00154783 lbu a5,1(a0) + 80002ac8: 0015c703 lbu a4,1(a1) + 80002acc: 04078063 beqz a5,80002b0c + 80002ad0: 08e79c63 bne a5,a4,80002b68 + 80002ad4: 00254783 lbu a5,2(a0) + 80002ad8: 00450513 addi a0,a0,4 + 80002adc: 00458593 addi a1,a1,4 + 80002ae0: ffe5c703 lbu a4,-2(a1) + 80002ae4: 02078463 beqz a5,80002b0c + 80002ae8: 08e79063 bne a5,a4,80002b68 + 80002aec: fff54703 lbu a4,-1(a0) + 80002af0: fff5c783 lbu a5,-1(a1) + 80002af4: 04070a63 beqz a4,80002b48 + 80002af8: 04f71e63 bne a4,a5,80002b54 + 80002afc: 06d50c63 beq a0,a3,80002b74 + 80002b00: 00054783 lbu a5,0(a0) + 80002b04: 0005c703 lbu a4,0(a1) + 80002b08: fa079ce3 bnez a5,80002ac0 + 80002b0c: 00000793 li a5,0 + 80002b10: 40e7853b subw a0,a5,a4 + 80002b14: 00008067 ret + 80002b18: 00000793 li a5,0 + 80002b1c: 00000713 li a4,0 + 80002b20: 04060063 beqz a2,80002b60 + 80002b24: 00c50633 add a2,a0,a2 + 80002b28: 00c0006f j 80002b34 + 80002b2c: 02f71463 bne a4,a5,80002b54 + 80002b30: 02a60863 beq a2,a0,80002b60 + 80002b34: 00054703 lbu a4,0(a0) + 80002b38: 00158593 addi a1,a1,1 + 80002b3c: 00150513 addi a0,a0,1 + 80002b40: fff5c783 lbu a5,-1(a1) + 80002b44: fe0714e3 bnez a4,80002b2c + 80002b48: 00000513 li a0,0 + 80002b4c: 40f5053b subw a0,a0,a5 + 80002b50: 00008067 ret + 80002b54: 0007051b sext.w a0,a4 + 80002b58: 40f5053b subw a0,a0,a5 + 80002b5c: 00008067 ret + 80002b60: 40f7053b subw a0,a4,a5 + 80002b64: 00008067 ret + 80002b68: 0007879b sext.w a5,a5 + 80002b6c: 40e7853b subw a0,a5,a4 + 80002b70: 00008067 ret + 80002b74: 00367613 andi a2,a2,3 + 80002b78: fa9ff06f j 80002b20 + +0000000080002b7c : + 80002b7c: 00700713 li a4,7 + 80002b80: 00050793 mv a5,a0 + 80002b84: 0ac77a63 bgeu a4,a2,80002c38 + 80002b88: 0ff5f893 andi a7,a1,255 + 80002b8c: 00889693 slli a3,a7,0x8 + 80002b90: 0116e6b3 or a3,a3,a7 + 80002b94: 01069713 slli a4,a3,0x10 + 80002b98: 00d766b3 or a3,a4,a3 + 80002b9c: 02069713 slli a4,a3,0x20 + 80002ba0: 00757813 andi a6,a0,7 + 80002ba4: 00d76733 or a4,a4,a3 + 80002ba8: 0a080663 beqz a6,80002c54 + 80002bac: 00c50633 add a2,a0,a2 + 80002bb0: 01178023 sb a7,0(a5) + 80002bb4: 00178793 addi a5,a5,1 + 80002bb8: 0077f813 andi a6,a5,7 + 80002bbc: 40f606b3 sub a3,a2,a5 + 80002bc0: fe0818e3 bnez a6,80002bb0 + 80002bc4: 0066d813 srli a6,a3,0x6 + 80002bc8: 04080063 beqz a6,80002c08 + 80002bcc: 00681613 slli a2,a6,0x6 + 80002bd0: 00078893 mv a7,a5 + 80002bd4: 00f60633 add a2,a2,a5 + 80002bd8: 00e7b023 sd a4,0(a5) + 80002bdc: 00e7b423 sd a4,8(a5) + 80002be0: 00e7b823 sd a4,16(a5) + 80002be4: 00e7bc23 sd a4,24(a5) + 80002be8: 02e7b023 sd a4,32(a5) + 80002bec: 02e7b423 sd a4,40(a5) + 80002bf0: 02e7b823 sd a4,48(a5) + 80002bf4: 02e7bc23 sd a4,56(a5) + 80002bf8: 04078793 addi a5,a5,64 + 80002bfc: fcf61ee3 bne a2,a5,80002bd8 + 80002c00: 00681793 slli a5,a6,0x6 + 80002c04: 011787b3 add a5,a5,a7 + 80002c08: 0036d813 srli a6,a3,0x3 + 80002c0c: 00787813 andi a6,a6,7 + 80002c10: 02080263 beqz a6,80002c34 + 80002c14: 00381613 slli a2,a6,0x3 + 80002c18: 00078893 mv a7,a5 + 80002c1c: 00f60633 add a2,a2,a5 + 80002c20: 00e7b023 sd a4,0(a5) + 80002c24: 00878793 addi a5,a5,8 + 80002c28: fef61ce3 bne a2,a5,80002c20 + 80002c2c: 00381793 slli a5,a6,0x3 + 80002c30: 011787b3 add a5,a5,a7 + 80002c34: 0076f613 andi a2,a3,7 + 80002c38: 0ff5f593 andi a1,a1,255 + 80002c3c: 00c78733 add a4,a5,a2 + 80002c40: 00060863 beqz a2,80002c50 + 80002c44: 00b78023 sb a1,0(a5) + 80002c48: 00178793 addi a5,a5,1 + 80002c4c: fef71ce3 bne a4,a5,80002c44 + 80002c50: 00008067 ret + 80002c54: 00060693 mv a3,a2 + 80002c58: f6dff06f j 80002bc4 + +0000000080002c5c : + 80002c5c: fd010113 addi sp,sp,-48 + 80002c60: 02813023 sd s0,32(sp) + 80002c64: 01213823 sd s2,16(sp) + 80002c68: 02113423 sd ra,40(sp) + 80002c6c: 00913c23 sd s1,24(sp) + 80002c70: 01313423 sd s3,8(sp) + 80002c74: 00f00793 li a5,15 + 80002c78: 00050913 mv s2,a0 + 80002c7c: 00050713 mv a4,a0 + 80002c80: 00058413 mv s0,a1 + 80002c84: 04c7fe63 bgeu a5,a2,80002ce0 + 80002c88: 40a00533 neg a0,a0 + 80002c8c: 00757513 andi a0,a0,7 + 80002c90: 40a604b3 sub s1,a2,a0 + 80002c94: 08050e63 beqz a0,80002d30 + 80002c98: 012509b3 add s3,a0,s2 + 80002c9c: 00058793 mv a5,a1 + 80002ca0: 0007c683 lbu a3,0(a5) + 80002ca4: 00170713 addi a4,a4,1 + 80002ca8: 00178793 addi a5,a5,1 + 80002cac: fed70fa3 sb a3,-1(a4) + 80002cb0: fee998e3 bne s3,a4,80002ca0 + 80002cb4: 00a58433 add s0,a1,a0 + 80002cb8: 00747793 andi a5,s0,7 + 80002cbc: 0034d613 srli a2,s1,0x3 + 80002cc0: 00040593 mv a1,s0 + 80002cc4: 00098513 mv a0,s3 + 80002cc8: 06079063 bnez a5,80002d28 + 80002ccc: 240000ef jal ra,80002f0c <_wordcopy_fwd_aligned> + 80002cd0: ff84f713 andi a4,s1,-8 + 80002cd4: 00e40433 add s0,s0,a4 + 80002cd8: 0074f613 andi a2,s1,7 + 80002cdc: 01370733 add a4,a4,s3 + 80002ce0: fff70713 addi a4,a4,-1 + 80002ce4: 00040793 mv a5,s0 + 80002ce8: 008605b3 add a1,a2,s0 + 80002cec: 40870733 sub a4,a4,s0 + 80002cf0: 00060c63 beqz a2,80002d08 + 80002cf4: 0007c603 lbu a2,0(a5) + 80002cf8: 00178793 addi a5,a5,1 + 80002cfc: 00f706b3 add a3,a4,a5 + 80002d00: 00c68023 sb a2,0(a3) + 80002d04: fef598e3 bne a1,a5,80002cf4 + 80002d08: 02813083 ld ra,40(sp) + 80002d0c: 02013403 ld s0,32(sp) + 80002d10: 01813483 ld s1,24(sp) + 80002d14: 00813983 ld s3,8(sp) + 80002d18: 00090513 mv a0,s2 + 80002d1c: 01013903 ld s2,16(sp) + 80002d20: 03010113 addi sp,sp,48 + 80002d24: 00008067 ret + 80002d28: 32c000ef jal ra,80003054 <_wordcopy_fwd_dest_aligned> + 80002d2c: fa5ff06f j 80002cd0 + 80002d30: 00090993 mv s3,s2 + 80002d34: f85ff06f j 80002cb8 + +0000000080002d38 : + 80002d38: 1a050e63 beqz a0,80002ef4 + 80002d3c: fd010113 addi sp,sp,-48 + 80002d40: 02813023 sd s0,32(sp) + 80002d44: 00913c23 sd s1,24(sp) + 80002d48: 01f57793 andi a5,a0,31 + 80002d4c: 02113423 sd ra,40(sp) + 80002d50: 01213823 sd s2,16(sp) + 80002d54: 01313423 sd s3,8(sp) + 80002d58: 01413023 sd s4,0(sp) + 80002d5c: 00050493 mv s1,a0 + 80002d60: 00050413 mv s0,a0 + 80002d64: 00000513 li a0,0 + 80002d68: 14079a63 bnez a5,80002ebc + 80002d6c: 27f00713 li a4,639 + 80002d70: 00058913 mv s2,a1 + 80002d74: 00078513 mv a0,a5 + 80002d78: 14b77263 bgeu a4,a1,80002ebc + 80002d7c: 0074f513 andi a0,s1,7 + 80002d80: 00153513 seqz a0,a0 + 80002d84: 00060a13 mv s4,a2 + 80002d88: 00068993 mv s3,a3 + 80002d8c: b20fe0ef jal ra,800010ac <_assert> + 80002d90: 20048793 addi a5,s1,512 + 80002d94: 2004b023 sd zero,512(s1) + 80002d98: 2144b423 sd s4,520(s1) + 80002d9c: 2134b823 sd s3,528(s1) + 80002da0: 00043023 sd zero,0(s0) + 80002da4: 00840413 addi s0,s0,8 + 80002da8: fe879ce3 bne a5,s0,80002da0 + 80002dac: fff00793 li a5,-1 + 80002db0: dc090413 addi s0,s2,-576 + 80002db4: 03f79793 slli a5,a5,0x3f + 80002db8: 1287f863 bgeu a5,s0,80002ee8 + 80002dbc: 00078413 mv s0,a5 + 80002dc0: 00100513 li a0,1 + 80002dc4: ae8fe0ef jal ra,800010ac <_assert> + 80002dc8: f8300793 li a5,-125 + 80002dcc: 0017d793 srli a5,a5,0x1 + 80002dd0: fc040513 addi a0,s0,-64 + 80002dd4: 00f53533 sltu a0,a0,a5 + 80002dd8: ad4fe0ef jal ra,800010ac <_assert> + 80002ddc: 01f4f513 andi a0,s1,31 + 80002de0: 00153513 seqz a0,a0 + 80002de4: ac8fe0ef jal ra,800010ac <_assert> + 80002de8: 00100513 li a0,1 + 80002dec: 2404b023 sd zero,576(s1) + 80002df0: 2404b423 sd zero,584(s1) + 80002df4: 2484b823 sd s0,592(s1) + 80002df8: 24048c23 sb zero,600(s1) + 80002dfc: 2604b023 sd zero,608(s1) + 80002e00: 2604b423 sd zero,616(s1) + 80002e04: aa8fe0ef jal ra,800010ac <_assert> + 80002e08: 00100513 li a0,1 + 80002e0c: aa0fe0ef jal ra,800010ac <_assert> + 80002e10: 2504b503 ld a0,592(s1) + 80002e14: 24048a13 addi s4,s1,576 + 80002e18: 04053513 sltiu a0,a0,64 + 80002e1c: 00154513 xori a0,a0,1 + 80002e20: 00157513 andi a0,a0,1 + 80002e24: a88fe0ef jal ra,800010ac <_assert> + 80002e28: 2504b503 ld a0,592(s1) + 80002e2c: 03f57513 andi a0,a0,63 + 80002e30: 00153513 seqz a0,a0 + 80002e34: a78fe0ef jal ra,800010ac <_assert> + 80002e38: 2504b703 ld a4,592(s1) + 80002e3c: 00100793 li a5,1 + 80002e40: 00675713 srli a4,a4,0x6 + 80002e44: 0ae7fc63 bgeu a5,a4,80002efc + 80002e48: 00000793 li a5,0 + 80002e4c: 00100693 li a3,1 + 80002e50: 0017879b addiw a5,a5,1 + 80002e54: 00175713 srli a4,a4,0x1 + 80002e58: 0ff7f793 andi a5,a5,255 + 80002e5c: fed71ae3 bne a4,a3,80002e50 + 80002e60: 00078993 mv s3,a5 + 80002e64: 0407b513 sltiu a0,a5,64 + 80002e68: 00f71933 sll s2,a4,a5 + 80002e6c: a40fe0ef jal ra,800010ac <_assert> + 80002e70: 00399793 slli a5,s3,0x3 + 80002e74: 00f487b3 add a5,s1,a5 + 80002e78: 0007b703 ld a4,0(a5) + 80002e7c: 2604b423 sd zero,616(s1) + 80002e80: 26e4b023 sd a4,608(s1) + 80002e84: 00070463 beqz a4,80002e8c + 80002e88: 03473423 sd s4,40(a4) + 80002e8c: 0147b023 sd s4,0(a5) + 80002e90: 2004b503 ld a0,512(s1) + 80002e94: 00a96533 or a0,s2,a0 + 80002e98: 20a4b023 sd a0,512(s1) + 80002e9c: 00a03533 snez a0,a0 + 80002ea0: a0cfe0ef jal ra,800010ac <_assert> + 80002ea4: 00048513 mv a0,s1 + 80002ea8: 2084bc23 sd s0,536(s1) + 80002eac: 2204b023 sd zero,544(s1) + 80002eb0: 2204b423 sd zero,552(s1) + 80002eb4: 2204b823 sd zero,560(s1) + 80002eb8: 2204bc23 sd zero,568(s1) + 80002ebc: 02813083 ld ra,40(sp) + 80002ec0: 02013403 ld s0,32(sp) + 80002ec4: 01813483 ld s1,24(sp) + 80002ec8: 01013903 ld s2,16(sp) + 80002ecc: 00813983 ld s3,8(sp) + 80002ed0: 00013a03 ld s4,0(sp) + 80002ed4: 03010113 addi sp,sp,48 + 80002ed8: 00008067 ret + 80002edc: 00100513 li a0,1 + 80002ee0: fff40413 addi s0,s0,-1 + 80002ee4: 9c8fe0ef jal ra,800010ac <_assert> + 80002ee8: 03f47793 andi a5,s0,63 + 80002eec: fe0798e3 bnez a5,80002edc + 80002ef0: ed1ff06f j 80002dc0 + 80002ef4: 00000513 li a0,0 + 80002ef8: 00008067 ret + 80002efc: 00100913 li s2,1 + 80002f00: 00000993 li s3,0 + 80002f04: 00100513 li a0,1 + 80002f08: f65ff06f j 80002e6c + +0000000080002f0c <_wordcopy_fwd_aligned>: + 80002f0c: 00767793 andi a5,a2,7 + 80002f10: 00002717 auipc a4,0x2 + 80002f14: 80470713 addi a4,a4,-2044 # 80004714 + 80002f18: 00279793 slli a5,a5,0x2 + 80002f1c: 00e787b3 add a5,a5,a4 + 80002f20: 0007a783 lw a5,0(a5) + 80002f24: 00e787b3 add a5,a5,a4 + 80002f28: 00078067 jr a5 + 80002f2c: 0005b703 ld a4,0(a1) + 80002f30: ff050793 addi a5,a0,-16 + 80002f34: ff858593 addi a1,a1,-8 + 80002f38: 00160613 addi a2,a2,1 + 80002f3c: 0105b803 ld a6,16(a1) + 80002f40: 01878693 addi a3,a5,24 + 80002f44: 00e53023 sd a4,0(a0) + 80002f48: 0185b703 ld a4,24(a1) + 80002f4c: 02078513 addi a0,a5,32 + 80002f50: 0106b023 sd a6,0(a3) + 80002f54: 0205b803 ld a6,32(a1) + 80002f58: 02878693 addi a3,a5,40 + 80002f5c: 00e53023 sd a4,0(a0) + 80002f60: 0285b703 ld a4,40(a1) + 80002f64: 03078513 addi a0,a5,48 + 80002f68: 0106b023 sd a6,0(a3) + 80002f6c: 0305b803 ld a6,48(a1) + 80002f70: 03878693 addi a3,a5,56 + 80002f74: 00e53023 sd a4,0(a0) + 80002f78: 0385b703 ld a4,56(a1) + 80002f7c: 04078793 addi a5,a5,64 + 80002f80: 0106b023 sd a6,0(a3) + 80002f84: ff860613 addi a2,a2,-8 + 80002f88: 00078513 mv a0,a5 + 80002f8c: 04058593 addi a1,a1,64 + 80002f90: 02060063 beqz a2,80002fb0 <_wordcopy_fwd_aligned+0xa4> + 80002f94: 0005b803 ld a6,0(a1) + 80002f98: 00878693 addi a3,a5,8 + 80002f9c: 00e53023 sd a4,0(a0) + 80002fa0: 0085b703 ld a4,8(a1) + 80002fa4: 01078513 addi a0,a5,16 + 80002fa8: 0106b023 sd a6,0(a3) + 80002fac: f91ff06f j 80002f3c <_wordcopy_fwd_aligned+0x30> + 80002fb0: 00e53023 sd a4,0(a0) + 80002fb4: 00008067 ret + 80002fb8: fff60613 addi a2,a2,-1 + 80002fbc: 0005b703 ld a4,0(a1) + 80002fc0: fe0608e3 beqz a2,80002fb0 <_wordcopy_fwd_aligned+0xa4> + 80002fc4: 00858593 addi a1,a1,8 + 80002fc8: 00050793 mv a5,a0 + 80002fcc: fc9ff06f j 80002f94 <_wordcopy_fwd_aligned+0x88> + 80002fd0: 0005b803 ld a6,0(a1) + 80002fd4: 00050693 mv a3,a0 + 80002fd8: fd058593 addi a1,a1,-48 + 80002fdc: fc850793 addi a5,a0,-56 + 80002fe0: 00660613 addi a2,a2,6 + 80002fe4: f95ff06f j 80002f78 <_wordcopy_fwd_aligned+0x6c> + 80002fe8: 0005b703 ld a4,0(a1) + 80002fec: fd050793 addi a5,a0,-48 + 80002ff0: fd858593 addi a1,a1,-40 + 80002ff4: 00560613 addi a2,a2,5 + 80002ff8: f75ff06f j 80002f6c <_wordcopy_fwd_aligned+0x60> + 80002ffc: 0005b803 ld a6,0(a1) + 80003000: 00050693 mv a3,a0 + 80003004: fe058593 addi a1,a1,-32 + 80003008: fd850793 addi a5,a0,-40 + 8000300c: 00460613 addi a2,a2,4 + 80003010: f51ff06f j 80002f60 <_wordcopy_fwd_aligned+0x54> + 80003014: 0005b703 ld a4,0(a1) + 80003018: fe050793 addi a5,a0,-32 + 8000301c: fe858593 addi a1,a1,-24 + 80003020: 00360613 addi a2,a2,3 + 80003024: f31ff06f j 80002f54 <_wordcopy_fwd_aligned+0x48> + 80003028: 0005b803 ld a6,0(a1) + 8000302c: 00050693 mv a3,a0 + 80003030: ff058593 addi a1,a1,-16 + 80003034: fe850793 addi a5,a0,-24 + 80003038: 00260613 addi a2,a2,2 + 8000303c: f0dff06f j 80002f48 <_wordcopy_fwd_aligned+0x3c> + 80003040: f6060ae3 beqz a2,80002fb4 <_wordcopy_fwd_aligned+0xa8> + 80003044: 0005b803 ld a6,0(a1) + 80003048: 00050693 mv a3,a0 + 8000304c: ff850793 addi a5,a0,-8 + 80003050: f51ff06f j 80002fa0 <_wordcopy_fwd_aligned+0x94> + +0000000080003054 <_wordcopy_fwd_dest_aligned>: + 80003054: 0075f713 andi a4,a1,7 + 80003058: 0037179b slliw a5,a4,0x3 + 8000305c: 00371313 slli t1,a4,0x3 + 80003060: 00367693 andi a3,a2,3 + 80003064: 04000713 li a4,64 + 80003068: 00200813 li a6,2 + 8000306c: 40f707bb subw a5,a4,a5 + 80003070: ff85f593 andi a1,a1,-8 + 80003074: 0d068e63 beq a3,a6,80003150 <_wordcopy_fwd_dest_aligned+0xfc> + 80003078: 00300713 li a4,3 + 8000307c: 02e68c63 beq a3,a4,800030b4 <_wordcopy_fwd_dest_aligned+0x60> + 80003080: 00100713 li a4,1 + 80003084: 00e68663 beq a3,a4,80003090 <_wordcopy_fwd_dest_aligned+0x3c> + 80003088: 0e061863 bnez a2,80003178 <_wordcopy_fwd_dest_aligned+0x124> + 8000308c: 00008067 ret + 80003090: fff60613 addi a2,a2,-1 + 80003094: 0005b703 ld a4,0(a1) + 80003098: 0085b803 ld a6,8(a1) + 8000309c: 0c061863 bnez a2,8000316c <_wordcopy_fwd_dest_aligned+0x118> + 800030a0: 00675733 srl a4,a4,t1 + 800030a4: 00f817b3 sll a5,a6,a5 + 800030a8: 00f76733 or a4,a4,a5 + 800030ac: 00e53023 sd a4,0(a0) + 800030b0: 00008067 ret + 800030b4: 0005b703 ld a4,0(a1) + 800030b8: 0085b683 ld a3,8(a1) + 800030bc: 00058893 mv a7,a1 + 800030c0: 00160613 addi a2,a2,1 + 800030c4: ff050593 addi a1,a0,-16 + 800030c8: 0340006f j 800030fc <_wordcopy_fwd_dest_aligned+0xa8> + 800030cc: 006756b3 srl a3,a4,t1 + 800030d0: 00f81733 sll a4,a6,a5 + 800030d4: 00e6e6b3 or a3,a3,a4 + 800030d8: 00858e13 addi t3,a1,8 + 800030dc: 0008b703 ld a4,0(a7) + 800030e0: 00d53023 sd a3,0(a0) + 800030e4: 00f716b3 sll a3,a4,a5 + 800030e8: 00685833 srl a6,a6,t1 + 800030ec: 00d86833 or a6,a6,a3 + 800030f0: 01058513 addi a0,a1,16 + 800030f4: 0088b683 ld a3,8(a7) + 800030f8: 010e3023 sd a6,0(t3) + 800030fc: 00675733 srl a4,a4,t1 + 80003100: 00f69833 sll a6,a3,a5 + 80003104: 01076833 or a6,a4,a6 + 80003108: 01858e13 addi t3,a1,24 + 8000310c: 0108b703 ld a4,16(a7) + 80003110: 01053023 sd a6,0(a0) + 80003114: 00f71533 sll a0,a4,a5 + 80003118: 0066d6b3 srl a3,a3,t1 + 8000311c: 00a6e6b3 or a3,a3,a0 + 80003120: 0188b803 ld a6,24(a7) + 80003124: 02058593 addi a1,a1,32 + 80003128: 00de3023 sd a3,0(t3) + 8000312c: ffc60613 addi a2,a2,-4 + 80003130: 00058513 mv a0,a1 + 80003134: 02088893 addi a7,a7,32 + 80003138: f8061ae3 bnez a2,800030cc <_wordcopy_fwd_dest_aligned+0x78> + 8000313c: 00675733 srl a4,a4,t1 + 80003140: 00f817b3 sll a5,a6,a5 + 80003144: 00f76733 or a4,a4,a5 + 80003148: 00e53023 sd a4,0(a0) + 8000314c: f65ff06f j 800030b0 <_wordcopy_fwd_dest_aligned+0x5c> + 80003150: 0005b683 ld a3,0(a1) + 80003154: 0085b703 ld a4,8(a1) + 80003158: ff858893 addi a7,a1,-8 + 8000315c: 00050e13 mv t3,a0 + 80003160: fe850593 addi a1,a0,-24 + 80003164: 00260613 addi a2,a2,2 + 80003168: fadff06f j 80003114 <_wordcopy_fwd_dest_aligned+0xc0> + 8000316c: 01058893 addi a7,a1,16 + 80003170: 00050593 mv a1,a0 + 80003174: f59ff06f j 800030cc <_wordcopy_fwd_dest_aligned+0x78> + 80003178: 0005b803 ld a6,0(a1) + 8000317c: 0085b703 ld a4,8(a1) + 80003180: 00858893 addi a7,a1,8 + 80003184: 00050e13 mv t3,a0 + 80003188: ff850593 addi a1,a0,-8 + 8000318c: f59ff06f j 800030e4 <_wordcopy_fwd_dest_aligned+0x90> diff --git a/bin/custom-output/interrupt-test/amtest-interrupt-test.elf b/bin/custom-output/interrupt-test/amtest-interrupt-test.elf new file mode 100755 index 0000000000000000000000000000000000000000..3501b1f3d3f0355ba20685d9bca5154fb7d11460 GIT binary patch literal 218320 zcmeFZcX$-l`!{@MXLl#N*_O;E8%ThK4OPTI0t5n>2%#v_s|~^?6e+I`cM?t(q{#r)s3h6)iIXsG$N+td+B>6;ve=~?h>dVm|4HwE`~1s+e>w0k2ma;2za03N1OIa1Uk?1s zfqyyhF9-hRz`q>$mjl;wfX9a3;?@wJ*(W+p%aVD9iP`c}6tRjsP9a6)HRao*Ep%1wTvT{-e^ppd|JrHF2nvgs;^Qr}c2Aqo#(GyV}L;ak${9 zJHT6(XoxLG*yc2mwobAvwHo-bd5oeuZ#l#EW0>lG%P}9|GYmUx86ou+I*xlw8kZ-$ z1=?CW$>DD0u1(QI+ku~?wm!les2_{DBJvogRNr6N>NFKvENK!QXYp=#64QK)4<`E6 z{Vb1v)oI#mc9JpU%3Y@diT?ZD^%UO^U)zFl_c_Vhg@Er*&@!yRLh)4X?;wwV3Ao)^ zk2*(far;DDaRy*kIZ0tY=5x#A#!CGM2``{c?<8al=5xw8KP9#0&^Dq2J*k+l1-ytl zR1D@iO>6@o(|pJ@ZyjXYp0y3=$=LFX7~p599>x&+W1MamN0g4bW1ORY7O5Wsd}@^A zEjYj7H6wCuIc~^@Ar6id@+uc8&^%LU%XSkwpIxa@Q`w@8^lc5^kHGt?5s&TWLWLVw zaD=Z@N@IDIiLqDxMs`uztmhPtqiV&DnqNpkO&w%=h5$DTkK@&vYjlC!@8FcA;qL56 zf))at30vKnAq~S_ap(aHJz${+3h03XdcdSwc~B|Rv{T(zoY7L?G(Wlk$u{Qop2 zVFNvx`g?)Lsu8QG4X__Up41*>+i)mV#GbApls{}gjm=RD-Bm$%$>CBvQ7L$3D|~}) z)Idvq`hKWOVREDs(9KzRN?iGzX z`%EE;=S;-DtWnEzR$_m)F%>)p4+{%yofwSWNBRykVvJzhSjQ3jC_$>*SZ5)&PHy>~ zBMp;;cy({3Dq*w5OP$ue_ImIa_MB#4%@O);dxSI zmnh*fThLbbu4QEVUkH9rOTZdtYN+9&60Em4Ljsnvs@yd#Qr)+fRQFaf^?e|#6+`Fp zf`!=CoYEn5CbEy2YkvYh1?{~0tI7oI{qvmG!l@V^PV^a8A-CTnx8IHS$!HH!I0@M5 zg)+RE4bO66>I-=FGDSUn6>M)#Vq7uc?j0}jk&MX)edv=z5`AjtCHmCP`>*z7Eu3gK zsIK(CTkbyxHrwBxs!FwF!=98iMU;Qg?b3*4NJsdN@q5Mnday8I1wTsku zgbml$2Ix3jPB#X$mN`Hlzk=#2^cn52lfLjt*I%uZeEELhRCtqPg+_)^+}F|vebry} zNsKAZ!P`hggOKoPYpGvJ zf}i1RIYoGuC&AaKvF>uV0b^CR{1TNd?;aKERj3D@FM`hPEb!@7-ML8it!qib=54nXQrt3sMcdSmm;z0RWKNx0Nbx}*!$vAE_;mXM!H`)ah`d>; zaKPsI31^vltP5B}Th;eNxoU*fG7|FE9couU1m877EV)V_ap++C$$xIR(Dn>eDQ$gn47Kzz&WQUv$5JjER(?-jx*HH1aDTX(A%twu^w_k+h$ItzcJ3& zaY+s9&&M4BuW@62I@w)!jAX(w6>!H2H)0{DaTUKrFlJin$i{k(+0ocYc)@F=r3Liz zu;=<|fWKyqXtRR%;D>FqNE~YL1#2&Fgs#&#!hm=BB)J$%E=rcot z@ajUcn`VU}CrIFn$P7?d{pn`vTGRajPA$(d#lDq0%VxM`ORCm=7dyPizSk#v| z>QT>m5$6SoU8`2GojFqdDks6A@F*M#ui=4U`0xE2TC1a(#&#GtO?@q#D==vMlzCUX z!UDrX#PLwvm|5SJ@`lM=KZq2lj}~QGEQIohUmO6BI3_cF1>w;zch&)dhsjlKfnGg> z=NzH)IG%vKux>Q8o)%;gCst#M z(t)%UVpigyv8&dkNcaqG8;9f*rbG7%@00w6YS|#frPFtCPZ#nuHkcV!?BKGCcy8IC zhWmsl55Jj+Z{ZhAhv(CHfWpQa6mh!R{kCycD}wSf>a*#(MAu12UETB5?{kFxppN1j zN$6&AhJ+i%8Teg`x6?FccA`(M#c5hQ>n|M1!oP4VoMh|3z&?w}uKEp_LztDxabzRK z`TItxK9fUy(BX{y4*nf&lzpH?@7yb}ETvQ@zl0wmV|S~bE=H%%eAeEn)!F;77F?xMN!L%O$uv5_ry*a`SP**@s}##AK|^;6 zbMFAUW+vbiGPWMnpY5H*4mFeNV&#>66q|sNy%+FqwqXB+m|Wpd7Lxio;LWO4CwJG> z6eiZVZ;sM9)UM29ufTvjhVHJbq5g%jFXIrKW&;lmX)xu9vcANjFGI=+;L>%>ba*iB z1AC0|H1?!E8nGwE+o9YHUxa?jAyHnnOiASh`FCW2YeQ>Qd}EDIY*?$LF)qWx-r$e_ z!`9^aB3JC|pKK5F7bN(BSe6tHsUEhRB=qE$9~1QpiEWt=ZOd+=Z8VmIZ#s+Aq4g#9ni^k%XRCtj0qix^oFYMkGLV3m16X?pvO}r-VV5d3c(67Xv18o+0!Juc zs2w`gT4Fb&ge{}JC+L^t2KxKcIDiE%l&=m1qC4usi1pRc>S5HLPX*;TUWCokwH`V; zCK1QiG%9#*I@ZiaB@cgYU)`tx?<73HKgv5sTBB5j9OyOtbK6?9?bZErTcH~GCI4d^ zWGl<#)D`(czp`aJE`WX7uJ9Z1ucPZ>-={WEnJnU!zFE`;XpE8ATlnO6_zvs~uhch8 z^2LGoJ>VtPrK|MI{LjbQo#ar_n33Abm@LFfB9HI;!Se*&Dl!-ER0j6euoD^s)N)tr zq&^fbc#8eGUZ!WJ^YkV!g>z*rucmXrj|bAQmZ`DE?I(^SX@pNtCk^XWaS2YEO5u1K z&m)BD1DlEQvz95a7AETXi71a;ZD%rT6YUO#OSC^WQEM+$sqJ5>)cgu+&vZW2>(mOm zKHKm6fY_((mF9D-$DDV65U2Rq&+jKYYWElBmK`CEqwrmmC_ZWl9|;fak9c{WT-D}6 z`|xdKhiY3PbSgy4M4xsc+D37u-}Z0d%SWoPo@^4XjHP`Wrl{hyAJ&;bF21GyPkNXJ z^F$w|Uy3J)pS+Cc+V878mUTBFyDzh#4+;BswL5pk{$;t+Hk=8-H@K!X{Ab$`v=R6q z+P3M;l{Ttd=zB)e5y-OMBCUTt>eErKP%p6HvIwtM2g}J`x-PZA!M{Iw^F*?P+fv9sHH#n)F67O5D7ReGXWCibTq@PswqYOl zPv=!k;;agIM(KHsV-?kJ;HF;2I-nc$EDSzZIC09OMB9XT9I{ zMhNSH_5OskN8cf&K5@>6 zGadMXMkS&4V|(XyVjto&Q{P7URNXj)WNP6M=*cE-SjOTyOB#H zQroMct8?zc`BG*L#dFh-j#}**Dj&RmP2X)>UYBTcx=#JzQ0-+CZKuAnz4SV0+{?=J zf1jysO&m+YM#rwcIL8VV@~t#1KUKrpHq(CKlO*F)Uu>Mvm29-An2pCcW;f1iD4%E> ze_zkZ;|M4X(}djq6*`-5cDPdBA>CK7W$!D z2z*cNhdxN>R{SEr(e~Esh~qW%EK@qeqUTrGw@C8GKIZCK7O$o8;wgHr7qaCn$Nn%y z4V|SiAojT`;>{-8`cgerK~EuD@MTvbwn%*2@(^3NPJJxL8#u$kT7*~!GC$5@PYa(- z*B-U4+gZeZ`*7Av<3JzwXY`v<;5>=qsIqmU-$e?#2Vwg$DqA+b^B6Vo;;65%5y-s* z^^G`No{Tf2zIBtRKeTH(ZFL`&3H{{tpMfsp$;UH*Q8>75u_ zNO1m@q*8)DCFWNp{9B*E?T1gV? zoLvj~%~Iw#IFjUjZCDO%_b!pYcO|}gW_b%;=inb#v2_9*!?4qq}cMu5^o1mm^q*9KpuEZLNlIA)bwTKN=X@ouC7ws#t&a7yR7t}Ul z%_O8iby_MdSetnDP-S%=>@(|EU|)Q!kjDWdN`i!iTuR@C4$EZtQUQLF=1Ptg(y}l7 z2GwPrt7mEcgn!xsIR*$nF-^{4fai6?_OOUOtKXOQfTBZM2QjYpl|m`zF)iy$`CCu* zYUgWK&?eC&(-~%M49<}Lel~Uw&iD-C3?gopf%--oU8Y?#tCY z^wO~!PcmqH6ge6V)&iY@Y<$8%>{$l2Bi*Rr7x9Q))CzlBU4}hy4Dl>c*q>b8h z#}wsc8RFVqpv6LR>q6vZ;oEEj7^NIIgtL> zxMT5#4V^{%3PWpt30sI*+-hIXwS~_Tg2a?Q`jqNRJrOZ zCeinAuuE&iTn_!PCIWwApWO_8Ma104>X;o|_aa`?isa(#4zgCkZdBB6U=u8Cf`v^e zU=s@11OuC3U=zR@ezzY(eVv->0(@VpJv|BMCtrXkIIqz~#Rku@3zX*#&o!R4FEbb% zl&8;eO3bgYn?x-wdCmoV!QaP@w|1zlzzu%%h2vz$ii>!+KzFTb+p_a0C7Da|MSs>t zj!E*S^$jmHo|k!^#47<)mU+X>?2G)WWV)s`@k<6npExzYq?*_>I34ZJW1Vl%ve87J zO&9of(6wnsg;>V85xc_8-EWw+G7dQ{%#TMwE0=O!r_L@cy9Z%Tr#zms^0J`Jlc1Zf}ig>Fz7 z(@s%38&+~r;B`6ychd>zq|cULg!O1F)}a!tNB3~>Jsf-weARZGai?hUt;M(2meU^V z6J4)f#JTv3So2a?w%c-@Ly!3NQQ0p&2EX(eVoGfi)g8ok+Cs!=arg%4v=(~}lN!9% z@i?1yC>fU5;H+F(D&qVNK4vfMVW7&Pr#>IHUaQ9%wq`3|={II_EL*^q!e4le_EN-_ zl{kCUw*eowFti`-|FUsb-03pD*bu)nf*47MbxVQu4C^vt^}I7uOtNt$;I7nxC;CJ# zRE@Lp74R=KAK*Im3T!$VHk}Nc*1~4B@>-{XT_?e=lVH~z?3#mJtFhLpvDT@;L!IQ~ zl_n+R>A6B1WFh?jfWJ@vZ}Rui{}=pS^Zx;V1JKPR=q8P&ptJWNM}xR{0L|ebcavWP zT^Vf+s-;_u(#7eSLJooBAqQCthLj6jf$}Q;hSjwM6H^+i=%5l@-f;m z3QIO(6{WHtjbpL5Q}Al&9(2fo7@z86BZ05SSi3@%<#;p`=X%8=)?J)|5=Meqmx(w9 z>o%u~OLsTs!9Jxpq)xuGQAg;V4YbFk97NJuVt*iLaB!OycBS7c=_<9IWY`vWT0wI@ zs88L<)k=3k;CC5&sgPvpj5)ajy%Mnh^FD~JX{?YGZy z4*RaZ`g-JPIj-XXLw4(h791EiSMnF{%m|KDRxB%8XllI3;3wyE_59^Q~jETo-4J4ZZP)p4rfU}JC-9;l zI;o=kQD+*BiL*r0x!d5ohdcZ#>&80RM$%@2@0%P;j3!=fB=)u3D1M1iNpZ5b=5FQ} ztCNt68b@Cxf2}IV0A@+5A)U#A@7U$<^OU z*U``a!{$|EFg{`Tkj>uek1+@Ep?I+SaYnsfXM!$@i20DON6fwAH?)H;8i%hu(3U-b zSOxJ4Jv-Z7H@V1$eKM87##N9l)=})gu=m#ydsRKN5pjal4mznUu(wv&SF5rB+e~q? zuhgJEianApRa%3u@H9DH($^i_n?>|2oZS!DN!a^?UhprIA$CZ}XS=js zQu$Edg}CD{KPSm()00#Oshps9+pD+2??En(ob`#6Inuyx3c$x+dveIpWEcoR!YUKkQ7@FELuFKGHL?2IV=#fraV@a_%^E zu!E$79CYw0t{dK!(8X+i373SNLU$JWi1nYz6&kVsL!RYtI!Eb&E+Y2abezY23Vp## zPRZ+&C7#w!K=;x&u zm(V$Q84pQsF}H-zwYuAOevInj#=17r+znZ(6MV8B^K1%8w&2^9d95w%Sgrk^!+zn7 z82@-{=o9pZ+RX~BWH*v;1l^cpO*M4u3h#NU6U74bDq;7~5jMB(Tp=Bsus3?1YrOoI z?QeP%dI7(K_!2q+9-gND2R3+;Pr{n82L5P?v5;36!hahH&7In__8S^fxf2e7lg6R% z`&7TL;Ba+r$RGIOJ`&pRIHPnR|Kh;;5YMsTi%XR6K;qmR z=UI7foINl!e!@MM5-N`-taJ3-Q`);axEx{+9#Bi?GK;?w*#j!FLwy9khf~_0YSdN_ zqvtfp>ny|fbB#&W!#ZNUEQWlGQGZUf*TDYQHYTyd{9-jd&(We^TR~~p9g$#Ccn!~S zVQQaO&UhqS#kZZPmAUHu@SS^+`x6xQq*oQ}Fwi2O4^emxW=_iG6sY`#bdAkaaX2GN zycehhsgCN?71;b@x`u2D^V~wL4TuHqJD_z0{YJ<7m1M{HbcU~2GdpJDT&P~H;Fm7K z-G*a`36r!G58E;eLwz?NTml{h3L7$#;{5TMz%xn7r_V-g!jW8cfY`P*;yeh?hj>20 zv#n8qZw0;;_{KRVr)+2&h&n8@aRy~!_~U&DzjP^L$Rq`yp8p?kXuhQ(D-d^B@)Lan zi?Qzcjk$FPq-ls18bJaZa+g7wjPH&`9r(0Yh;-I`dd)kqk)Y!k^g^YK=Jxgj*66o+zmK8tou}8l zMf(A6wrwY#4{Ne*kD=VA?1b-5Xn!LC$M^>OzOo~~TA9uFRw?;n;I>E_zg4PV=Jwur?{hAJ zJML|>)stwQa82Jh`l5a) z>f8C{z7%epS5sewdzloc1YFn?t*7zTDOZD59k|-Y)#7Zaou3yLA#c`~@O)q5fUo0m zubi$`yE&oI;jb0#PpI`g_34kD$N8cOcUjNl+(vDXWFphWeppNEbh*&49hM+`AYH=~ zv{U@5KLE`uVM~w$a!X=4^1eGJAs36jJI>=g@`+l=1hGlZ5was)Ah}a!lib^l{7C2S>j%s`YXr@d{~*Jz+JZB z-*KZlRQ-X9>H_*eM{p0=p}NYeFz`hVk;bl@{FG;MKit)m`bp<<6Dvz*mG!sIFPU3r ztyr`GFLM@@RLrUz*bT`){8+6W?ftDCE9uwS??v%B`N{g>uXkFPkMA*Z-BP)H>Y6^= zu6d{ZFUa4@!=gy%DVD)5Fmm$nwG_PvT z!isVXuPm>)T1}Sb_pvUXQ&F|3WF9b>UtS>(!T5RCSIwDUX0^{Nx6i#g;40o%F-ze0 z@4x?Y;QxdJ8NIM+{=eWS|G&^N{J+#+A$f}2KK*a~mj3N~<=?)qjNklU>aVna__y}M zfBU}D@89xY4*bi3e>w2K%YlkHmG;Gb@~)qMuYKVn44zyxZq$fT!)OR)EiEsrv@R&G zvQ{oyxUjsU$|?mli8!lh9*t1$wMs!y$I=@*mRe`ri(tiCKGRxSQdN@ZMab>6n{{T% zoOyRjsNKG#Vop`rUljxKW4#&#S-W(s>}s{rN*TbIp+IFRu%Z8<4)aKGZkSy@zwCzD z_szJ0Mo2f5%)fqaS;c~~d6m+4C9R+hl{ZvY*yXCl^LyAyQDtRWMb(`01riF@k}81i z-?8)xx-_1W;LCg=3recyEJjc_>Mu5wm0C+G?6X0Jy=qZKSr2LKn2K`xP1{OKD-fhv zD;Jj75vktZabb6B$Aw+x83vb^A|xwcI0rqe%F$r$vT*jjm2>Qf-_XliwzSN?sH*HL zJ{?Q1m;SeQ%;{Cy|LQ;1VYg1Ob^)f~M`fA4d_if~1RhtvD-#v}Cw!VyT2>BLNk1J+ z`&);O8E+kE{fkNR-#;TFey)9|17??%EJWwqJLcps1>N{JLHURU3l~+%0k9N|S}W(y zS-7yQG=Vl5Szf--+B4^_zE&w{Et^-euoBz@IrF7he!RV+tZad`a?X8;TBw91wDDEt z71E9XJ!jBJSJFVr1@!D;9Y4E#iFM|jipnZ$@1DI9Dk||7oLovDt3)Ls6QC^C;svGc zWzG+$@p*S^(XH0WMPrHy8QL>3 z-_TxinJbsLTS|Y1;&&0HGNHy~DDF^6-}wC|sl@L_NM+9)xl8~Y+A{%g*tnuen1;yH z5P2FRPebHsh&&CEry=q*_{(>RA9)&*n1zsAM~s>{9!DT{-QEFL=Hrg500I5BeEh+)I8t&rv) zSu}pQJPzC)KXUZoTjWntB)?Fc>CccvL59lZFuA;0F0Tw6DSwYIzIDXl(IZDoN`ktg zF{8&%7&m&%aGBt7#S|jTtj?#NeU{BV zWrkdymit-d?=EtgBbWJdIb1HM$mMjooGq6N<#MT9E|bfZa#<*sYvpo-TyB=jt#Y|d zEfY2E|1IQX}P>0msVMx8CT>i*9YYihPsUET9RCv2AFj@6r*BR#M%LrBXq#0E{VFFb8K!iSH6SJ%K?~w4iM194r|XWwTI} zRU}$*{#0oF`;t4OvZ|uQUUmKa5(Etk$`G1JL5UP`-7u%TtcSgSuUxA&G4HaISk;@d ziBvw``9I44R=2F6(|`0M^0adi zAEJ2tMB*vE=KV_DwdDl4eaJQa^6*}WX9}Jgx!imz@lEUg>ABMH?`^dHEXKNi|G(qe zaPogf2kln{y8o&FKh;tG(E6RH|AJ5C_iOvp_wE-(amxi!`~=T0crM@}s59fqpzrvZ zL;u0gvfMKasr{4bfjb*7i=T`5&37V*tw}oRMvUZp@oP~>IzrRViATlX#l7Nr(Mr0I zR5BXBCGnH^Ghm$;y`o1vARZGVVqA2KsTkW8klo^CQAL_X0j&|d1<~3SaYS1&~jPK`|Zg?}=}S?_=gY z;wh0rJqcKC(JzbeqyYcv(I*8^)W9K(5!1jSr&x%uPecvizaf4j{wO{#?gP9dVgWcB z5q}a#lYy|$L1ZCt_W;Lt#7{&6pzjyY0-s%CJ$j!IPmA5qYbS8lg0t6y=i5b&EFiyt zj?v^6@;mB#0F(B32=QaSM$rce>=wU7Z=U=Km=iHWdomcXJ3&@qaR=yb5BkDl21ccl zFU0lYuiz;XTZsNBzcWZ7$~Ne&BFDuRF)TKV$H9m9AV()8*9xQ6_(RC;pji9B*R~`8 zy6+(~G0R9e@@|;%40v{4Y!VM*%t7%h$n65&G=SU>a$v|MXvvG>7W4_AwjW6*?|};( zc-IS~FMy+|;Is~L(oKL`fc{OW)04g6T@&PVM7$&pA~%vKBx!;n4C_nAyz@vInN2D{MGN+E$H0X@#bjt*OzcH&fP`&;`zs{e8E{_){uR*09pFkA z#PrvZdT^m1@j<&MgD1C>;bbgg_5x6t3(fffdN!AQ2A;ksZi7YtB4$D7){#fZZgAi? zNbgzk196G?GU&b?zk@mm{~i$^7fZ+pk_IRiX1CZCJ+3D^G51a2nTGxcC>_WN^qWW4 zkk`fW;QTYPwPdE0ED@)W4&tWxap=IC@wk{oI>Yn4PCg=kl0nR4 z!1)>IWEX`UlITEg76*wv#0_GqxRo3e7sPJ_9`D6hktxjg;z6PZynD&xWFx60uaYO@ zkN771YMJ;{JQtq$_xKm2fH^B}B*#fKJ`y^4KREIQ-hd*h#qFOl_Ro%j=E;}j<{vl$z?o4ikMi~kIoKZuu#H^95Ch~G?J zji-e zDhjdp;d;Q7jiys*SaZb%uVt z6F(O#i#T-rhta0IKX!ZcLVRzuKK>Qi7v3Dy3*RdrQt@KB_%RoX z-{)Ey{32lYE)z>5ds>8+qhYrqRqHZ;Y{_Z2ApJ*emilp(MqC*h8+p;UxaH{!gM#~G zQ+!2!r`D+P`+9`tMVp*s1yguX%j)JOfgbEEttZWzQP^R0`%luA8E-Y-p0p@d6xRDk zUmo{os?!|q;7)6LhI=sOqu7JdzDXa3Uk@INpYrZ)$?*QhOwp&bQno(ZZbSQZX}2cV z8I~o-6eW=kL96@rQ_W{*dh3V^d-kjZZX8aaDw-{rQqBXgZPfh_HseQE3e=jXoV7(DHR- z&x=A}qh?TwGhx|R+LHxVAVcY0$**LGQ^8T$KEe5qZGzo-xCpJVuzmoMEC9qBCn^?A2P zy~p1yXvw~)Md%+L=^u7s)Su@Y@&&zex1q*7rTvo`7ftSzYW@q8O*2gQc9PMz;6ie+ zPso4rr}MLtqT(On@0m3AwU~#91{N}ge!nyt5aTfb%5*Q!<8L_?l# zh5qemX`|S3CUmCZ_Fr=&{h9ROm{@maVXQLxe0*fkcJIuggECIFdMNFn?hfq+;|ccpb3g0zdOm8;_~`lC%xoqySXQ{)5XxU`vVceJ@Ty}jl0bgy2eDbs(ZzxmSI#>~h{ zXZzokO(~)N!n(-jSSnc(%~hOdrbRz>EkFOD^PUhNUuT$_)wliJ%*`3kWZjYegQ2VO zri{7aUFXIJ#|7(8|JZQBH!GxyY>(|Ct71FJGsGKrc|STo=e*x-_8(-Xr{0>?HS6*8 zL#_3#-Z!<^4R5tTGw+h!XNc`Q|M2Ni%~^rnLf^^Ev*-7txaj)>M;5G^0(2U-e1q|Iv2QH?7QD%j+Ms> zqbDO4GF!1TIN;LMru&^Ac|*}X#?M=avszlkvrf19Mwh2!TR*RV*TshxhddX5JJ-F5 z^`3O!6%tklF@45WWx#Fhg=7CNH{NRnzmmT4U1rw%=zGPY+ z*-Oz|y<40&JDZ#%eFIc&QVYy=e9Zbsn zXfS$XxLte$Yi2m%NB8;5&$sMv85Pm#X7it$oSDk(Sn^YbXxpXf=M=5TZ{!89s(F30 zp=nslZqLQ=)>u;bU}OoCs=Pij)qlR_rj{O;yLvY%N2GQ${h6NEIV0^8?ZnJQZ9>`+ zOrc_9XvO7^o4Z~3vFZ7i^1z{}HatIkFg`@JSTu(=dG2<;aXGE!WMr>lli_<)*N&#P zOOv~%*{x?&JE~o?&xkkcXKIOkkUjdE zVgoxec5kr8^O@(-rbGUac9;5o!}#`X+aA>4kvbdRFZ$2O^) zM+4E&7UAJgh4>WPR-6z?@(uD$y|lRb5?iNQs7`BLZ>>u0X((v*d8kD6>%8?jyB zjBCxMJ1%B5kM)wUI{2}0D!N5sVshfw1x5#EIQw0=E_z6nrm&~BZ_l;5(-1SKWp3kN z)BCu&><8g2-1<=SOIco4IN*Cfa6Z~u#HF*y_|WyC#g{rY=ZFW$ zYQ@O3ZJ;AYT$eC)Zoz2 z1dv^mE~~OApVim42wC#WWL)tA^8_&&*)FWo6f@*9=K5N z?B{>M(S^Ni-!!NQ0w_JCnv*3;?s)Gld@Gk#4|r@m!)M6-z8 z7wP6-*ZgUtqxlnGYj2%D>iaCblQ|kW7`=(KcwWBrvv*ziv5-#HE92o-$>#O^FP5H` zFZs7kVcjC-;P@xOk6n{59J=tTd%ov8-y-h=0gspy`zpMZSr~fm^4HEj!KiQ~I?Z%n zD^vQR)V%almiN-$PaS4@C+S5+hgfl7e)IGTlbtWP)BPr2ckheQkKzx99wFbw^E{_6 z-{pT?m@VAI?M_!@Z0GaSOc{eL%ghh(x9X;JhQ=I?k%`gF^5^RH%uahqnJA{@IraH7fG^ha~H`*+_D zE|0f0YT~Q*kvrUDT52vm@BYl+)_KIcD6}KkF^FHSBny1KJiP-?cqe=BB)bfs z@%Qm}q}7$ z*1*`n()bMK1|icI_FwXbU5=oayUlPDe-l64yu++Fk4wKNOT{15u^M=rdrm`&R0DP#E;_&?0c`F82$=5G3R`k~y* zL?3ZFr(SOKJmfVx?Y;`(df&RhUBoE<87T4F13f&iIuD1ss9gGfshRv9^I?8$T7OH4 zvA1z#@bJhX{JV+uImzB-_Gg{qG7pe8tWee2C697E^WVcym`X zG0)7nF;!ujWvEws*w@3|T{%vzZ@xRYM<09{bxy+RlOn|+><>o`U0+>U3Un1-XWfzp@683 z4j0yhd;7z#L#~H}j}>z?_ZcVhdrV1bh3P~2IjQd%M``CKEnpV-9(ND+J?B~DWCL^k zliauX1F`9GdvIRZ5uE7#+NJis75h$gXL2ZYhUp1@Z2FyMo}ZesS(mPDROf~7@#uX8 zzQfL+yk7?%_gv?3hB>iMI3B79AMzh{uXHJbjAFO?l&Q${aLU=V_G#bqKc)H%A142z zoy9!o&-3l^7r5Ja<_1E(hg_`Sj!loO3^~GUg>K#z&X+v4n82jz&l;y02b){WFZ0Lv zmrQTzN_4MsL&7V4?*@)}9(2FwGYTKOe)9YhDTyk=_2G)pDgP;#+vy5kh*c!DGTv^O zmg+KZ;18OgPJPsns_&+2Au|Figsr~$o&jE6@EPx8t_?wZ^lW%RI2f7|{Km7e24TreS;Rl0tfmPo1o_wJsaF@&JD~_~@=prXW`f$J> zX)$>G{u^SCaM?PG{^ry@spt6x=Fd_-FuY?h>TAXOL$?N9z5$*ceo^qb*SqfwtqwmG z85~{>kCNtI=sxY;8T2XYv>TFdGF7EUQsJRz{M5I{ zIX*BvG$-3hJ?o*JM}w!s;ot+&En$OC<(=!!_uUf@DSeubdbeqIN~8I=v|o%9 zP4A{Wm;4>MEhdHn-p<~n(B1xt?o*zNff?bH(2bFwqb~+p`6hTo*P2ix(R1^(-x@9$ zSEueypPw??XijZ3o>g5Z#-hGJcTY^XS#WvYb071q4c!?~Bcoj-9|i*ccJ8j8 zj-f9}q3UbxO@=~4Cv#UX;1cff+uSWaHjo=g4=cjU!vjN~1ybE#dLIq7jq$2KwUf1%4gJ#I<=--FHBB(G|uFgQ~Rg= zY+P%YV>XzMYQ}QY8C|%)@Qh#y&GMb~tn}CW?hrbK?hF@(+lTx6{jN8Br-i1-FRDFB zziM)fY}(M&p86a3GpRr6p3rnry&YQ}94ovMdNghvvs#6JT2;h75sseOli> zZ>qm<@LQp8xIWTTSnfIQ`@uIm_%^dxy^oubOw1{%d-P2y52a2wuGCwSQrUvY+)z#U zZDEW5IbSPZqjw=^G8kndE(kH!P3`KHCj!&(iO zB1S{4A~%PKFxda9ugt3q^b-n%v*Gt5{R2yUaqk6hVQ?oIs+y#->xS{;O`8nGsUMqu zFm=>_t$C9DJ<>WdEqr_Mu0X(7>3z!gUSK|`emlB2c+tPex5j(D|F)=~^|BL_GEzQB zS#Fq~^0w)W>4af#avSbqd}X9tsP02GpsZHWIAke8_kB#wO!fXvDwkq;V*(e3j_UMc=dip_{`rXoD+FFxGnIl zFT-2yJrbRxh%!w{olO>Fn(1c~o04mqZ(OH;h5JBU7V8iR29E{b3+(cZ_5B#w>AyWV zG13$Y2_ph&zOn8ng*u!KzO9_2UuSs1SZ3;%(%tl(afESw@({KqzAm~T)HQTS_{y*K z{p|nPe>gBE91drNfb^33ZycUdYI?zVgXsgq1a2&2kDm(H zg?Chr^+2UHT{nMs1Dcg)K zhBYZ6eFG;dcE7mBRlkvl<7EPM2 zo$)9nm1LNaGS1W|d9eC+W>jo&SQ{<~Rt4&PZTxxuV&O<=PH0G|ccjrDbC&zZhkuOR zq~MZrw3GE=(}k2h`YhAVlN2ll!n| zX7G(rr}%xU;Yr_XqlT^UVRH@bQ}-EN$%DC}ilSIm_(&)cygxA8f6|xgHwt~iQ-UkP zH%7bqA8}uTr5q0DD85jClhj)`JM}TsqFHsjZDe469Sxo2D85)b>+< zOlC#+$XG;A9Rj2Lr@h&MZNUPeG1N6SJXr7h!#Cf*L>L*rQFTtaT%$^P*>qWd#1u6- zjPvy4G`B0uWA@11;SYkj!qUJj-!|VN;Z5PBusXUmoE`Yo_mHox|HaVfiZFXwMGON{ z78q=%MJX#xBaOp#$w|A&=qUbLH}rFY(A^*Q@`2xlZGrE?snPL4KA`Z|`F8s=#X0PC z>>14j(^`Yq5HWpedfhm{FeQ17a#XxH`WfPj3Bfx8YkiHr9m2A}zMwx63_ULV=s)BW zJc{sdOf9ogHNfCAylc48bVEwSIMSGF_$FyC^Ioh|v~$Q5dP;cNKf-q?@J1k0*dG2i z{CUtBIO4z66ZIX6UnU2c^V%VXXAR?w=9D{3gN$z*AJ%nKtq>Q+Vxhv&hM+=N1sp#N zJRRsCY9IL~bX{gdYqO>{mAXkGe+q?~3n_H7MTK{Gf~Le=+t*nP|*5Za00dJEvO5 zRK?bX?+I-QsfGFejsCj=hXc=qPK6%|Jr&9fj`UQz#qiSTDDfusPVH{p7lxQA2yV4a z`N;U5rbTHb_e9?cRfda#4+LiWA`yYyCr(0!v>!l|KYcZk@rbLUNVMEUkh@7JlX@uZ~KtZ zYQl&%68r!lp2IiI?*;HL&F#@VxB|VikViCtf+#YW8qj(Qxi%L0)<*Ot$lS1)U4=do zWCgYOJ|SfU^>`=9k@Y|ei}`V{6gj>oWcOTv(15&TADjYrMW!;0{H9;*iTi*N)U>fP760@{=s`yHP+_V#YAO`XlEmiZ>wdOQm)_-u-}a z4q0d2f9OUx1!%Dd1KwaI_=->xx|MUS!QXKtp4YSS#rJYsj`WBmWwP zF3`K6e$3eiyy_xJ=O{G53#i`!qg{}}WmrpF;H(C3(!t-ukYhSHpNFjIRAj41NG86%s4nHhQQM=;KZTx<(6u2k>3K{`S7 z3W#ruzaZ=V3$(WYJaYmg4pffABZ$M1_0Iwy2Ln4lr2QQ-^C_?j3o!c%7Ulxw1U&u> zkWv9x59zl-c6KCmr$4x_MaJ5KUOepLSNNk&u(xFLmADEN?uTq!1MW+Z#yDhRFGEJB zV8eaDrS|YChX8FnIFk?F>7ijd=#&VKj|R1$f>X_a`ZHvSJ2@B|Ld{NC!6n=T@nNQg zQnnv|?U8uF8EW-T=*=sjzB6Xf11iSI(p^sm~whm&BleoX}toW|D020RE@PYgX zu7N&AV7wQrLf5dktN@Z-&Ab^7F)!=$l5F6wOz#&wd%1|HXi^ z0J0m1EVYe1Es|4O~#9h$vcqkR>sUEk#EI^V0W`|&*b-bD1IUyjE{mSlkRxvPXO#ko)8Q$Ow#8h&;G&#~pyNq&u@( zJc2CzJoJB%Y=vJN%=`ci=t{l@jy5t){4G9)yo$VcDRS<+iH->ovsfiof`b~xFW}cv zu~_UP-YL$Yyw3i<6&6XZKO3*0WJ^1 zn6IE$L_8U{3 zIBtr3B-)tqxT{dlq%oJppRsD%|>@cdlA%5 zW_z#&iY7&_VkFZE8h0J@QvBQhMblY;IgvDdd?q@{WM*Qku#3C9A9A=H?(Xhz$l>mC zxWgfbySux)?y|sYJmdaV?tQ+8XJJV?-PKh+lcazDs#g5U5~QeFQs0G?S1Y1P=oM?kp&V=$-|4@Ncq$Ag5=2GOskc@g*=+hx&Jep-Ykyy-w6$( zMmt(a2az<(d9H?1L)j5o6U@hVHmADUC$CDT3I|h9xG;POwFGO3mK7Tbg?yXSq@31V zmaq8FTV|PfE$$VbTQbEd;yV>%zWNFUJ_s9agX1P7-c2c=I?B1tcoLt76|@k_Yke4x z{@RuKl5NCP_+DQ5=r$S_3r1@ak}9@U7x7hnJG1-vYN`Dl8$6AYR~7g-In#E>-O9bn zvlyFfZ(>WL&*qxh_EL8Gkz9v;wQ&oVX`E|nrnFZ#sGCD0a@%BYV~y4U)abYk$+uHv zoTtE@9t?kr?R6ZI$LIA3XDTbQrhTcdEHyTy`^q@7QM$@+Rn~>qWZnAyJm-`=&)U#g zD)CsMHr|D<*RJB;r^FE3ZO8AXTY>Jr5AxG!+UJ(h7dBeXQFy~kv=UI@eQGGYKPx$V zDtq6!fKU=U7H?5-VG^CNF6n@~4YA*`7~jf#$a+PW;kSP2nz0Mrpsp6`f`+BL(nn2K zA24^b-~C*fw_7e^`by0z@VMZoLp!9m|!*nb~>8gxv3S-}Q*@m0!@` zjr@ORH>DRzv(fjScBz4axruX< zyXG72eebB?`Qo`9iq9RT?2c^yHZQj@k4l~8>hKPeqc%dDBcwVjl>TdS?o;|Ax70d1 zE??@Fq-6=_d{Yxv5TmJKNj@z%H$`e8Y{{7Pb9HDdzlMLQ&e2<|t@Tm*7~~%NA-6$x zfymqF4gCgHDSs%1PtKomKfl9u!SOLs!&e3evhm8gEIH$2&NX@py}A3`UDxqjLgmP?GKM*U!x~uet|$Vj#uB{#&`SpN?enC+&se7w5Z~xIAT2!FgmmN1>D{?p~}}ej=X; zBxa`N;Gu9RPQ0X-SHkiPt-W!p_D|%1|DmsCI4SxP^*d`O?N1z-ysGeYZ(Youyf*(* z?Vj*OU(OcF?wzwI&?z*C*{^n1+DKt3qF+F_a4$ozd}!!>=&hJxFP!jq(%nR7;ioCx zZ9TpA!fkEmgdSRgoSySFtAuZTU`^O2O;KwrVQI3u+?c84(j5cA!2RH+=vm~8vq^k> zoF#v&A|uIj#IVAKxY7`nfk@}j@a#*uq;Ii*4D+WvP@N(tE12;iu;ty6&Y_v1TH(S% zBl~jC0nhWejztT{FT*b7|11Aj>p*p#p^`AgSJ^k%x6U^nxL}%kPJS;v&>NZxX~o!) z;n#r$!M))-NL}i8PcPTjLc>#AVr#t33e0x;^tq^_a-lN*EZ^k3&!G`aX|7a@ zGGc~!aRtotKL4t48k*?3=hz(YEzvfi5k5b8bm}`|jq!!CopL>t9tdQ2 z%bnzZ$rP5;#Vz6!b);zsnk)-Uy~v?ZR^X`cgE)jIP$h~iN$rQ1baN>mJzp%NO(hKd z*t6kEK7URtU*Sk4ah_CHq@@V5+Gx^t@Fk-Y!ao98!7G-jczIj>{1uC|aHTmeC5IDJ z9WTvJvs0F$(ZHhI6S?OCMcF#A54BT7G?ytIMU+w8&}iidmG?;PjkmM(^Uf>sDRGyh zR(!|&_1tA`-z`&-j{NIzS-&TDn9mToD>M=>@;9Z$=m|rT)=cb1_ov(Bc*HG4cwXsn_Jc z3iZRybAWM}Iv|zf;w^eDSYsf2Cfz*-lcPKe-eB$xAd(=F9rzK52%GZge<%&6@ z1M}H$jLe)7a-^EZDq0=6rM5lVH}@-hQthGEx0TN~D*22n!;_cLE@8X75t(JHVAvrQ z=feJ4IqP#rL`N{q>D62{z70}TXT+P@Z9X;cdZ>gHkrp5$yjl5Xd5^iL#y3mc?e)0U z5iaX+t-UlMdOPnz_WjT?rYHTD?Zv)S(~vb%P_`Hw^}+V^~V29ev?oJh-lZu zYVmK~>6Bn64PJEu*FE?&Ylm-g^j#EXljw2c38XY|n?Fz&`@-KQ`kOePr_smW-;)-5 z+j*)c%ul%HE$7}t4u(_Y3d$k+L~hBviQ&P~ZLAnA#tPaAWvPT1TFaY5zlFNgRoY#!g;OSu#5xu(uqrZ6sG%B>Oj8alyrp|61EX}#J&><6FzhBEeG zfEmi2WQ!U}uRY|>1H*cbMmA7#GC9gBy>0RK;wJ$Z#H*^&8LW=`A zz9GyLx>Cr)y%Rt1`J``#qsp9UPr3{Ddz9o@Q*YM_kIUO6ZnJlH+;VS{r#tb~THky_ z-Ax|~{mfe*ImKp#+Rz_`KZUdWQ+*EN=4M4X7NdWU2IcekN|)vy?DcwI#$|e2#(j5w zuusM^4UdHOH0oav+{q4z91Wl0N(sN%=kiZ9T}q{&v)7rlNMH85=_PsIg?rn2=EP0& zzKYB7IEl6PiTBKKO)EAJA|>G%6FeHO#)zS*;gei1=4Eu9 zJR8ZUl;R@7ccxKjS2RgpVd+44T}wUJ-4i^?iT}9EyMB=Eu*>ExY9wL}H)p0sdw^1a zmAk{E`w-0e0c9(JWi~lW-bMvm6WNX_|>kxH# zv{rNjN9#Vtb}+WJu&+xsY+I&Fr2{)${Oim%WQT zCEas~t9U8f0#%_)u@{*&;f3^bt|yH}bn%foM!F|tEb)HBkCK^`?GleNE8y!M75$Z5Y!)^J~avt1ow}^S-AG9ab zo*vFuLT=c~I!2N%&nEWgitN>FV9$Zb;6c7Lx@Go24S+8Mb6}2yoDu(MMrQm?N5$ z=i+j?new~wNTW`;Zn|&B)p6}68@jdfhNXeijTrTHllbGU>2hk+utf4D52ER|er>1y6#2K6{HO4)HsAn9k z1?5dlQ(6`7u$`hvbS~!;dBGz))zSPwh{DG389qs$WhQNn$lIjmx*lKH{e?_$KXj&I z-H?x3ap7e274Yj?%$P_a=7!K+Xf4vp0&y|-h3Oj((Ie$ihUu2s4hK1e`V>dTiDVj_ z$(!a#G2RCK@jiMKx0)}{4T^fB?Ri3w`HD&#xutNQQzN${zxW~gW@B%AccL%h^}LL4 zrxY-hd=KZ>Cuomrl@@&W0Jd{XQwG-L{ZEt)LqDb~7k*nh(B*ddap z{b{x0*X+N$*2GnDmmn9o4W4fHu2#{IF7*R#(i~wTw)yTol{@!bZ%a+eV>Q@CfUkUUSzNk#s1EoZwuv8oaBli~D z(8D4oZji83J8j*D<--Zryf~VwMGo~+u7B};SPA1T`62(7KPd{#68a_6i&@Tn7A}iD zq=4k*Iz$RHXSpKMU#2(KskUoGrZ>eilnA+-dj^o5@Qs$a`cZKfZ;{?|I$ehOM89Jm z^McS>+%NkDf7DKYVh?dH5iw$aYHR4+w#a;}C0VLK6HZN-h6;t^7%6~bJ0Fk@ma z(B-*if=kFJXGtB|W6>V$b0$?@XH2%bFq-)8b%DAo?4IJ%$(oKm782blmX@B2R=zO1 zn>h+2f92cr&&2#nDPcB!pDD`}EpDo>C!2gpRRE&e+4%;)k3B(3 z$no+I@i?&5QOqQ|75k1`!u=zWN)7%H8=xQ1Q@MJ2e^Uoj&_3JU!Rey*y2b%_zeNc4 z%cd6UNcp~WS~$SZV1Ln*nKaPjtq|5Jg+w#|m^npS&^I!jKpHANR_BjmbbuF#6d*)~imZVmf`|0->iwg@+3s=)9Rww11E&5h0R zKZ#;gO=mY(n7Rcjpj5(So`tkln@C;6B|;BisZ-e->|X9~v7$Uw#Kr1-LUcgnhTK@Y zq2IHfz%z)w)L7S4Ck|?ZQ`9xAnz51oSUxY-6F2bP*f2AfW!T&N9?->(6XV3^%&|}# zzP-9lZDrzZ1009R+O7>QKY54h@wh~W^&yc#7>sB*f!2Qy>i+JMf<62D~!Y5g7pef1bmAya83)ngWbhG_x+3sf|#Eq?1Iigc%tzf=FZ#!yd*fi~52UUP$m z&xKz6J2sc$=??r*p#wi$o}g^wmM{u)hkYsJAsfuUnH`SjuDMhQ5UOW z=&00|S+RnE@+xa!RB5WPFKTJgvjU7!B97CNB@*ZV%{q3ww zJs^(SrWu;33Cb^Vgb?Ac1FyfsUgrmKRiz_xbMYg0hE?fY+NicP>_uB(t*J$15o(7s z!L^v`LRpEkmJ9lyYB8A=J_%;t#GYf?fR3kzkR1yoEPx&budCO7-mDMd$H?e?t2d>HuYFnd@S%@3-HB4 zz>-+#?K`|S3Zp2zXE~L!LC@|dqH>(gMaNnLSvNM3&gAe z&>0d&_yEi`4Ms5hHvs%vS{RZH3=og9WdEooT>B z8v{Fa0r`6mOjQS38Kd@I$S!C8W3@4&>w|1>7x${Ha%b;? z4L@L}a4-wJx)eN968vcavTcW%F<=n}?2m_W85q?Ey~Y$CG5tkR@TLj+iCOCduIYf^ zSs<=?(3cEePJp?Vfi{i6n>z4h9=xSP-ft3kG5|#XJ;c)n`Oq;s8wZ}N0ePo!z+h2$ zO#vXJC82i?6b-o$O&c)(M=<^uc-=Fwp*tHDO)aV4TYT^}@mIKwb-WI)O93fq1xJO}Jql zl?Cq^VO9>9{ZsJSTZqRmm`!C^!+8)35VymMk5xJFzzRx*))vrfJOD44z;`hPMvUn< z`!5?k6L|Lb|N4$afrZud5F(lf`iOI2w*Zms1Uc{xVccA>;VF>CkI?=HuzxrBqZlyc z+pv}mF#E2sG8@B+DFQL_!K2$i4{#gWN}v?T2kYz|(CrF9r2hchet{Jc@P-V2`vKOK zg7^j@Dj6`x_u!Li&{t3J#3Rso1i|uW&{BZ5ji84Jti`wRzie3PDzvW+BYuNfmx8~a zf|v8aIzP__Z6^IAa@`t#@qF)^N zeKUxP3s#XGJeB}HkJY_Mhgfb0_W3tNj)axNfuf-^v@8IzD*|>3u%0ovKS0JZ@<8vU zw+1Hegte3d3JwlNb0xLQ~b*fSjxw4S`TpCmc&tM((g4LryCjCM1@@D-Ir~*y{ z)9nrK0zcr9S>V}v@H$bS0AsC$R+GV+Ul6;SdP~p%cz~QjHNj^mbV`4sbpxODgf&te7 z!J`=T5(n4+zxoU92gJ2EvR%KfodJbS0pv9(CTO@THGvlQAWyv~R2MKnPSO@w9~WT` z*R+A4eVBvnL7SrQ&?@LtAo2sjBMp%%K>A+-@16nUMv*p9k6?EWW)IgX5*J=^agcL?HAUF3RELNb0)5*?@O62lk3JoEd=gYe*rjV)6e<;T)tBj$k(ua3I7jGTWGC_g zJ%`)_-`hc5k*zP$7HWOeu9^+Jm!*F~)*9|2t2I_1kK9Iw0jvL8Kc{^M@Bh@c>JiPO zhqULQ!zhDr=rZV$0*ygI!v@p=_rNYN_mxO{PzV`7ORxdz1ss7Y3ui%_u?p@_QN0ba z8+oHG);_A;L4PqC^a>@=O!PI{1|5L7v`eZ<>#oJ>ofOvFL2o7D`Z}cVL(<_rXgREp zNk}iWE8^2m>2r|*$S?FKs^}wNMV$m?ho~;l2BOsrt&p>zKyHE_H2h&WZu(-`WnOK* zX_{obi>^WkXyY`yipUq$O2}QgI&(RY&Q{R(7|+@pxqi6nIOjR8*y>oe8b8TZ`MUf< zW)MGAjgt?B#f*P4JF#6=$+FWqDQ;?9O;;VVqhqZ79eRix#Xn@Dd{-pfa98qW)&AZ% z`bgPmE=$ghJCXR&`-B=zb|L0lr*avLncdIkQ>PhH^alQcpC)HtppEiq)Mzi}dFyTA z+()&eR#L;&o7^h?DOXiFjD`*Egyi(YnGNU+u_)xLuXaC8IuXAu?w30^K5CsVl@*fc z9n5?Fxp-ETGa6)!i%bx6;KUHKvtCk0Tp{mH@};L7*&n&D9T5KJhl#8C#!4t__<}kh0p5gjmUSzfizZOKTf^~D;`ZzTH zsOuy3J+24d6gzKfqB+nK;#(~s9{u(vt$SX5CJA!1PrJLvUxPj$ID)Q!u%V!r_>Iqy z7qPiKqV50j^`rMkOaEiGusF>&&C@*|O`hxO8lULCjJ30RH3hw;jgb~w&qY6{F&V@2 zYO>3@IR?#{?roCt$a^|2J?=+{ zB=xZMI9=z*#cw;ZdPZ(W!f0=M*|<7M?w}JXuhc(mD=0-s)3x1X-bAI zR5z%JOHI>=BJp{|Kh!7cmwgwWqV9&fb|HR+Wstd9G~ch88H++#cm{XDaKrv3{-vv( zYo+%xv5Wd>7=*kqjTSzG^5cZuJMTd{avq-F)zRM7am$D*EsZz% z`O;795&ALGIHOU{($MnY6A?}wqCRZ>TX3DwY1kTrA=u+*hrl%dZ&6A7ZXDz)L!NZL zrZ(D}IFB0LhV4cRH%7W?l1wHx`eSn58DE9aCGM$umN-g1gq*Lwcop|q+h2yBmJ4DW ze;n;;8KfGs=jUenM+YNpTWP2*!@1B&#&>l*an2(e8){g7Q?2YUb%g1&LGxYA?gY8i z-{@ytSz}9T5V<5SKe3(|N12R+&7)8o=ac?6%(wocGqZ!fy}semS!^vWg{(~Oi`(pM z?Re@MY{@c}H@6bD3q^I@mZWR|`lscN3KgQK@bzpv@jmX!?#uQ)uC2Cd#>kC)AC*gchDo~lcv-5vsAmd+K$t%-eivPgmsE`pL204a@3l@Dn8uj_iv=H zhV$!VA$Lkm*x~H##=IM>$86Nrmomba?Jc9di zv9p1&ZSb}tr#qj!%3<#?#H4EnnH}r~a~nf(zHOjHUghXt{$)&aB*C2EF}W^MhPWh0 zx}CEeFccFHNAnQHbV9x#8IW5vG9)lOl%k0GHDa4Fh|sJ6I{pZSi-eBRbAB9Lk$p^5z zwyVx_&ZSgU(8rv^Gj)=?FCR10hR@SO{iaZbNIfpjEL!`M|2nHthsmE9gO4>I z=ZlIzwHwx+dR~Nt3JP5UkHR&gFOeCRv5sWdL%3#6*v*dH_BiF7@J6Q18K!-(7ceKh z&wo3-CbUq_GN#xLPG*6ArK?;9+Q?E>o++-6&I#2FZwvT2 zlNL6c37(kmjw7Dh3y_yAt+cvaj#ARPRx2vsVI!fMk(z-zv?>)dB;Yd~n_UH{u;_mL;EB@B0sKh$q> z3A$^vXecL;!K{)}%&Tn^h>$CQS9264K4VaOi=ji{6V3j1gK z?R{KRh(>rKk!LSw?!#{vE0_>8s&^5?KwbU_^bGH2?CMSPX3XncK<&dNhYIU^t301O zirNiEbd=JR<>)!Vm%(z;TSBg(qooJY(K*O*!IA9vh)0nVY*DRZPas!JsYFq#2KmY1cbp?npe=+YstxI8 z=&vP;iQJ@cmC&6a$sp==^o?ySIf3j-F!({LrS+`XPF|&LMynuCBo}ZZHS{>RJTgZ5 zq`R$KiE@`kSN-H(>N_u^*th|7mKz|Dn z;Z&xM^Z?;4^NE&ZC4382%6ZTFRSV0rw8>Cus=T^KNM$EPzK8lnKk*ecr^$^^CyU~3 zi6hQrd@;&FU4`S?DJ@4$k}7b2M>9f4fSI0_d!a+HrsNn$Q^z&uY4WSNnATN=&%L@+ zZ>to9ti*falOZKqURK$lcCo_WFjV+IRJd)<7?%)sqi% zducj!HymRBmM$aru}Y3J_;^Pb=RP9I+*DtymePXSbm+0XP?qf)c@<*mO~P|E-CPt; zbWFpmQ^%=cSO*lh>RY#9LC4t#T<2r8A1o9U3he~Ejv>3Bb%*r@oDzmL_H^u zUo_9v+h}*xv+69pzVcqY#7&8ui-hSCLIdrf>6E>@UBNS{C&YMc1iD?Tqv7f_eSvxz zG96pdt0QSqlzT1@Mc-hR?c?ny$V+5~{j<@l-_dp|ue2rF9J!A)j5S6FMC&r=#O_)p z3t``D8$pz!NWx@o0jl{o3a7T$hbd>|Z+s2%FZju%7liL<@4cV}hv~dPeJ^bkhym8Reo}g)0C$ zjWNs`VT8h)ieq(bX%3l~LC&(yFbqQ`Do?a8T83g$eSB@UZS+F4EPp}#2Q6kz#IE2e z#P8H{`!}P6#;f<$R(h6lP~9kYsue%+dGO=i-@54zVWSATD_zX zQwwS{9r!Ci>sefobag4B>E)^Zgw&mKZjg2!bcKdnzQR=H> zsC9~&)<$ck^rdQXy%yx09cFJt_A-eqCb`h=CX20|%|&h_4`UUqmCy#-MSYsOOuq@V zzZBH4DZ%_;7VrVBkKwEJAI$C8K$Wp~!2U6I*B?o)^BTn@#OZ)8_X#Ue!1?j2oMYgCf)Yj^2{xjE!&SAR= zlB5}y8JAi6Il9|>Ic8YH@ZB3qUm<^Lh19uP3o(axGy52ZKQ3%Sl8hD1r|@R>QI5;D zsOhHhuG$4MCO#@f^q_=_liAbsR-mX))PD_ijQ#8_?H}<&c#376`7eF0HXXUD!{?t**y25f8eX9nLHc+)+4KNrQd&Ez&eyuhFQnH@Nwx=X2}sf_kkwkV&t4ooc5xtrV@_Go%yC9qp?w`Hu0u`kGEsOwlrt*TE`Hh|hAlitCP zWzP$l+G?%6<*8M)9dHc6HrQ?$TSE52ay1Fo*(K$Re3p5~C2&dHX0@KW&$!Dv347wG zV7q2JYh?QQkY`Dib_uV&Pf zl*!sVp&0v)|3;sM6_Kf~HoGn9_Eg+s^WdwE=OKsX5AB%VMCq*^k{h#ig&s^#{(-zm zZey%rw%M-X$FOyHK1&+97KJsT3(7{-s+Hz)ffaXSJIO7jyT~$Ay!Ac)5NnLT$KDwx z8yGF3o3#zfLA{nRgGYIdt|uKAX?3Nsnz=k)+E(6v(_Yn|i zF2cL{X>q7*F$^$XwOzKEZMiUVrtv4_-z^A!)DSl4XMBiS2jW6nkBBAM}N( zu3AUitB+S!sYCf`e0PE4mdcvgK`(B(Z_dW@*|ysAVO7zZ=EeGJB_DD~siw_=_g{zD zi#sM2kP0Y!OjFEnteIGb?Jv8_u-`P^Fj&!`LS_-|A34B{7Y{^@6&aZ!h-Xi-5-Di6ChGO{>gy>>n%Xh<#J7Wht$%((Y;l zR83=qOks#nhHon05kAY$42Mnotv@WK@Nc$%48L1ezl(s`P zhZ~@U4p`b-O4=g$W8+~nVmhMzt=rY5dSmspV3(rYdU1yIn^0e?XP_+oEm6x6$2s$E z(?hc#Sj<%QvzDq47VAn!_`ih4a)R(kUWe>9ZL{Pvr#O0I9@7!a9JCrzNc*XFMbe~h z(sp4O-%P$FJP^NYVZ(Qe-IU*c&|b^*($dvQRePTU&N_`sGLOp zwwO#atc4wQ&Fw8;Owz1?iWR?FjT{q*^ikUSlgPW8NJAFDvM-7^+*Lqo+q(lArX~|tBcKN4Fk=* z{Z9*SZD5WVb+oG59jT~KfsBT2{4()0sK?V|8bIR?qr+I=e$X1RBwNawwi)x(-g;fc ztF~3&2@8ei(h!l99t-=BzNV|_3~U*eW4UXYZi8rJ)$V)X#9U)=DJc!!)YwcovXxd=@6K$g{L-uN&HBBxgWQ(iCpVATFiVd=UvvxLr zHn%oD(h?9HD%DO@GliLAZ;_Kai*dqMcZ~DVyNE^m zq>t35%iTq*P*a&M9^kjD8QOY73G*t;V63^NuQhC{YzRSSTvy10Jg7{Q`tw6&TC(x) z<*RB0nQvNcZjD{Gtg)Ic=MA{Ai2jep=?~OAxi>G19;GGUMtY+(*3TNxnC@96%PwoY zwW{&CaT!to_VyQQ)1ex|EMbSzPVkBmd8<0tkZyEZ9oErSD|XxHF%>bi)8^_~TBepD z_2MfjJH^35VY!fEMYG_F@ma!_N7xZlY13I_NxhN&PCKgiQcCmr<;zlYVLYtgw)#(0 zHNCbBwbZh`F}qBkO(T%bP^?gKB; zH{h8zKvf=y--I6Wb)l}@1lVqjN&bIEKVUeZM*pMyvA@y({vTui|D*k}EPWLSoeYHU zf0_O!pkwg05q@H{KbFfMI}0I3`(ydu9MH~KTLefD0^`KkYm5v3FTXzmtd)buRA5*n zkieKi0Eg#7aIesTxVqu{Z9d>;Jg~!Gzz#z|kSL&!X6QTCD-G=^;7c)<>H&%uW8oRl zN`w9iK#MFOnK7FC3m8wVin9Y+7KZi#ppie}83yc1hJ50$z*nu%vlm!jDp>Ft*j)O5 zcE#vqiU0DB31CYs(038YXCkn|`oL;+ps2AL`{`gG1~VYR(p;FK1?qMCz%mc?6|2|| z)sewBu`2s4*en6tGlFjnz-Sm)!?FD5SVaRkpBd&9%R9~m@(r1*@IL(TvKA?Vu;l~BhNru>eh55z!Yd&CL zZ^1_#_&atcL9Bv&(trMw{_}Ju%ryz(WPt488_;j8-ai9#DGpYZ1&WssqVNL7h^@Vt zGUGe=@Dj|3g!S|Y9*^-}H)J}O`Ok7U#GyF6t|&w~wywf3a}=`EKZCt5q3--=@as?b zJq{>-0eGbW+Qe$`>u@g;fQrGPv+#2rs6P!}FvEOmgLc3MY?Ffsz5|~mgO7`Vx9Y=e zqyMePiqHoNI%+75i%06dlYUuOSleJ6PTF8C`1 z{wV|A&eUtb?Eio@l>v_`|6PHx>pTOZRRsRc1nwTIrvDx^1eKv(8;J8qSW92w@ekky z8e-TKuFGuTy`LfeU%_q^M*Ho*7*>Rsy#`O`{dd)c!S*k}T$5o|rD26(|6O6RN)~W# zHgMyZ1_yyCqyt@k2%akgYg7e09B|cmfM<7r`Ba8==Y;ho0mXGgU4{2BUatO^-d{fo zUW$jc$OAd;4B7QD1q%hSGQuhpp|^&xT6X9i^e$kJ7kYUKo`}^7QGio-1H$^2l0s0ye>Nz! zmV&Q~0>@qqYhWN)odc^Y4BrnX!qxRJTu&JI@*UJJs17{&8B!39z)2Qm^&eU@=qn%8 z5~zzDLmoqAs4bv-X!xJ~CBRw~T4zCgS3v&#RZtoH0e-EDYzF`9dPAKATi}!g$jMLF zVt3=g$a!Qf@(T0|L*U*ig2v4Z*Yg?unf4J@SQzGaOnVA`euErBTcTNL8j=OG{ZpR` zts3cTp~n6snC*U;kq2Ts4EidDHiU}7!=b7_oV}o>fERYbl{XNs@7*x3ZJ-ozfz8d3 z2Qce;aHYM0od2KNA$=&=kRMs1uR&Hp7I_2s5g@yNI;^QfpakpydGl!cBBKR2vuoCk@PmjQtf_MQyS=88YN| zfM@5Slb|NRO|1?BdwXc?T#OQMCPHcCm>$;lgASsmo}smcHN6L^V)y}Me;~pjV-4RS zx?eyUG8eAWTKX0QQu839u}2v#b{Aa&>WSC-QMhaD(fYxD$7!vwUQ=7HFG6YbAX*W< zrk_zWRHJrQbHVHe!K~m+IJkn|>se59fJ9D#-s>Kmj_?}lG!y`x#U-SyVKlltrX0~f zK{fv?YIEIaxQm|9Un*nOu7+-gtA?%S)0WZZS>})NL`J1*`e%JKG zz_MhDze;av2+K`=37tMRVG?``TyamwUk=VrW?*o!ClgM2Tom|?JCbhz%f z2YHPl|M~>7$QF*Pm((+Uj@RN%jUx?j#gp8QD8{AngYV{V-J>8 z1ZuNhBJ;dX+cbTdTAe>H3>50ZXWIekXqw0WlpX^Fq6zsWex+xvyBU7YIRN*f4ZoVdy!o{w^cZ%l*O6mA_Yzkn z>~>X2m_YW!3YqJw$Bf^lEUlfnSzh-v+plYZRor2I1a`qCCKSqF#4|YIyZaw|d90%P zr=g;9n~#_lgu`DBed+tNd}wdzlXBm_)zvItTX!eVeNQ>ZFx-kPHncKS;VDaR{~Hndig%`08&y!RXxUAu^j_+YG( zJjN))!g|Jd&X{Ud@UB6E~-X0vC7 z>md2VJsg+GzUFHB4D&SctUS_YGv8(V{8*UtBk(y;K&XdICs(+S5 zPK1o(GUnUXCfcoRTb3O7>gSkm@=VO`u1rjFKLe&!iM)-JH@T1<%y4b1`Hta0V8zc; z{yDxYkz_$f|8fo|Yj{pNCpxORmztfX7N#~_6KS@wnWYow&ivpTQ6VIur zTk{;iN4QgL`wcJ5-(g>Oy>7L%RySt{a|6DC!Sd|i!Za)jc^B#4Pj;vC7j86+w-i$= zaR#-axut1&z?_@r`{J+0l;mz2acUs7GX8hs2>FzHZaiRFi$3LwON|U$upo0OXK&u} zybVw_bd+)ecRKERNveutw(EmA**w%#R+t0oojbNnwXOe<&*-ZT*-9FB4O?YT^t^#e z#+5up?2AnIEu7Q{l-W~YUuabLn{P{A|B#a&A3b0iW1s742a>%z-f_+`D1}#UXDK}S|!w5%f#*xa}si>jjmjm-BK58Vz?m|qSFP;`j=86)FZD*?%nW7 z|21xcd97_&+!9wAYMiGnRu;=Kx6`h1{W+^OXnN0f53bKG7g-%FAKhmNTkg71Z&h-n z_Xl1VOU9O=gCzq~#;^;^liEf)-yO}SdW^pmp5uk%}{0(?kT50XzOmlSfjHRkN(rksT>BcAQQ2vCG zHEz^)2Ui70hxg^Rq2KW-XjSqDe$>S}5#V2G*3DK%!da+ZW13(rz(;oaXWv0qH@7qq}jqI}( zKfg~rX)0%OaHCj5*zeB`Ee@8Ek_{uVx8y<+1M;11UrS`8CaIXv7d>ZvCfWJJ^s~Uj za8j@fmx%lVRlo$YuWJfP+2@l>Ehm*xd^=^e^`5qizs!1rMZ)U?*^#TtAj1Ou3^B~P z#`)ZKljv>lg#3c{j78>J#`oeXp-p&L_*bxb=(4y||Ay5knozafg1w95o1>)Zlq|EI z(5Sheaz!%Ge}*fE*9MZfsY-owHa?9Q>OSmvY2QH9x7zgnY@Teg%+zw^18lc&R(OxU zd6W0n>SB?F>bE-sw?jj?dg>Hw(6*C$;LNmF zB@!KVt!l$J<1Cl?F=8=eL-Yc2Lwv)Wj&2KtL%-1` zrI+c9brjSuEa5ogNOg3vrzj`56UcG&Dtb$)#*JX2!J?rS5rxk{x0}lo<(vBLv7amT`bCLwzF-SFEEY!=Th}-q zQdy46kXv)u)<$a~7gl-Xcb!&l3jun0WNOeC?!-4#SDEVDBP2?0#aXAHAPsIMOGe>a zr>15|cUe7pD6}Ay&g_D-2tHU>5=Lq%UI#K>CRk{-lsrZI3HsG($_c(EgGZ>)wP<<4 zs`oY@!zV%2&Hltr*GGFIx>_!w&efyZMfDcs?u>|b3~AvbY&F<-XRrfgVaP+yb~YtB zQyF!d;@11ZXMR+f$QNf;gd2vB&^N>nx@vyscuhRF!_gnq7_5~3R(`DB(DrL7>I9qLwpmvdEXNQVt*WS5cHCZMy;k$ab7M{1iOA~bRta{URM1mde&PGmpDBdNY-^g; z%C2iqxBKW#m9vqYY)`mWe6wB-@9@PuetEEW4DJwiGVPqvR!uwAs_e8h%!f5^%? zA04UIbKbBmq%&!7r85Vf?Y&I2x=Tot*zs(+AYHuu0eWiPk3SaY1= zW`8&!=MG0h?IV9HwXF>_E!`34%f0=#y>-Q-BoF7Y>*hdI4J&Vq(5^;;;pyRnG0JE| zloK9^9i-{VOHP*;Fc%!fo(LVyueM^;F%se*!c)Tyqr99N!G7WsJu1nz)yQo z&d?=z5cjkG$DHP7Nt0yGKi@l$8_KA5Eo+|B!0Ls(&7$h~SiR7f(E@m| z+Lh|WHV{`y>%Cw3#|e+wZe(6-mUGS;X&1MeYcrHj!_^~y#Fi-kIx78&&n@N1c>~8J zf`3Mzw;DKIKrp7-P4s-)1Gre^iLHn&G*$8u`?bhQqx}~>CSQ#E!qIIB&%UQSGmYVT zn|Pz}>*(d^MJ+FJlRhGx6JpTO`NW%i7jmOL&}n3?aTc4|`XcpgxP5e3w7imKO(Dnd zIsA2~Xugm%A(g&oUvuhN!<`Jc0Uy` zQ17mYbKIzC{*GEMWUOrTiS~^(fUd`HC`ZPzNHPPp*4qSY)N)wYmC}NsTxU&-%*C^1F758aQ?RZg>=EQkAKOO zq$*ndhz|B_YpH!vTc=Xd%;;XFnp%hGLj~D3a<+Kib5*>-j%8HqUtE)4n4&`%N43$h z_mQ#6`gmLG9C;j7?ly^r{Jq?lE67cB?jY~)oXNqrVy!+*`4Rb^o#SKlyyOR>sIWvl zCEfOn;ydyuNy)xL@wB(g6K^pC)&?g zV^<>{@(cL2@>sc(kXvj>CgYjyD66A0)og1W)0#&2DQ}|VRL6oGnr+4NQcuquA+JO- z5vMeH#OmPiR+>qfTcaGDo0+&^^);*07q}L}7EeC#Rf_+X*g>|m^EokV4)hwM;~nGI z;5o7x@5x^iWw9&^g>p`8%N>Q~~4YjZ_f%B5$pICP$1?E2&xW#?eafu-IZP zppG&TX`RqVx++~`7SMmg6ZdnREfa|>JyYqgZi}RXKz(U^MW$1)#QI_x(U!M!8yO8x zF82}Bj9;DJR+chKlcEifncH65;uIjCXzO?qsWZLCDX? zs%l>KjJ3%LF;B%Ve3D#J+5#f0Ii;u~_9-y;t@=;!K6nvT)sD&`W1=lkUB#~aVKE>d z<$q@v5?-n1sbEP1|eLa*pt;_{u^{$$r8|G!G0uI^N zjc=77wfXUb@KTzo^(B`xley>oN};r;K9j;knUfao$E;fRDeJAWSo>TVqZT$ssV(du zQ8nyezBNDGBl9KbirfS|v7B!2v%YdFX*H0)+)Zg={Gl#3D5^WtpAT{s zdB+x=d=@B+kxv__J&vE!dud;45ywY6+zQq&UY1koG&X@53GZCPj5bq}2s-E+MEL~jVeYlZJWmE&z);*gw%LHG&EKDc1$j&5-|sLEZ_hxHywU8}Toj8Vj<#|?TZK9TbeZC#niQh`M z1GIi`k;F8+f!S1hrF>)7*KRA0>9HqM>zLV4BQAofY%gPc0!M}jO3vo`1{%0lCB zy{@v^(9Guq$IM|#VIS@Zud+dUF)YqgASR)m~Lr*l)d3%p18AHA1pO`Wql!cBOU z(?H*#aOOA=`uX}kVhq2;huP0ur`IBTb&=he_|g1UA&iFlWoR`<=wZ7B znH%#lgj*#3&i=xv%o(t++;$D(FMFE$R!h^Ts)enI@Ix++tk(dTl$+a0gAux}`#=cz z_aE*5@28J{!2jGVejCikW%U2)0{+YQ|1bNW`nZL=r%Ojwu$KRH0&bfQIFzdc5b>J( zyQ>#4L1!n>1G-SuoVHqr(rL5yZ_w#U0Ut-Kt)ReUU&EOg7vuMmjU6W zLGL)Ul?9F%2k-OYcpM0djMv@D^6snd7lBd6uuVG7Vf!O{H*qAFaTWu~H}F@N%yKxA zt445h$!QR@O!U!poOkK158TovjsNKm6mU~_%uyWK^|)6N%K+$OesIntv|~bVa2rfH z>m%)V+jNx$UhFNQ*Ccx5=D24<&tQOJxm5&Q|A4BXy9Kbf%dMY+JHAD~6i`DMB-Hgm zuyK?`#DV=7y?3C)Z_!`moPucE7`;pI-RQbxHRWT}OwdlZw!lLWN&+po8Tsz~c(7$5 z(8#2Zk#bcPk&k@a`%z~RMr;gF;&&j}wQzOzfc(AwxJq1ae3w4I_!y&Pv>m|f1#mpq z@j-%qfI|x$$nXV+d47>k9Oe1bT;J`=8P z#mzYP;=4O z*0-yXv9L0t7@?~&kk3J`1WD@3z z#$BRI_X}Wt9Yoq)dp1En1Q@>9=Zpa_z}HrfGAzWtL{1U2z_?F8n$BORgh2r2Hq09 z^9f?n7Uyg}wAvKwuMsK~xK0K&;eD`*n2b+xQ{d^JfOy=2UZDe`vDg_5SBtF<<#^yJ z@gDtiaLpP{{0}XVi2WS6>J!9fC~by8hXLn(jAJBp7VF_>KZ1-9_p*CoMepQ85U<6i_CnoO)>MI9werKo4;b z^#mr{t?cv8VDc#O8>0RLF_#p{wonrMjk8mMdqsYtkkiaQhv%bLK=^H}1qw%7fTM+> zDhWF+90C2E>y&`9dI|gs8lcL;UuY{porC*COX4+@6Nk`iw>C=vbMuHeKzs$Q%p1Em z6diluGkV|t4r`|$vbUDwY+H#j6rnm(0=XM%g@*X7*`I7q426cI4&rqKbJh(r(%acg zPJxT~d0Z>!K~cKUDGt|!JkTBW#?@mjbQ>P5$Q9V4xI^M|?IP$Kci@@cHD?2HkURuU zeKn{=t`k+r57b1W0pjI{3SxtG6`!(d*dD}u2s96M>^@lSVJML|kpGZT@&qx+EN|3- zHs>|zok}?ab<^KO_bTmHfHkW!6OcQM|$5CdMl@ zl=ZO<+Fw>_t!LV}m*3{xF#g9a4cU`hMEay42p#wdSj7a|*< zlX`I?m#pOSCVv+A z(z`5S8dKJOu4>9>anuA*V~?6Y|0V0PI>4zXr{^|uk4t_Ue4J;D?}bpE%7F%chH=?a zpB{PADUFF=G6xDha&<^~k@yCF@!j~-xJTaXT}W*sekRYTjl~7_y|kq-f|=uTn#Tk5 zSDvoP_kGDpYrH)JN7;SU2%6OIh+C*~*`;2NOJ9;%Dzw!c%Iyt&BKrc1#RA?L^fp|p zJH`HFT2NaDDXZLQ=WF^`yeS)4}z^ZaR}%5&xTR$rO(DOWl*!KkHFW zE@Kq;S>oq@E%6)ghX5&*qw-PjV#`T^o1+zdT`uifR`*Z^y(C*Op@i?-glF;q{~qow zRBu|uwzja0_4Av(?_XvP2#wO}G7}Pt`nqJJ zWIJdzVoQyF!n1hi^qFZZvWi81R{Kg7eV0=*0(TOt1#9tL_{N49tF7e--|K@i&!Jw*-&-pCf-mFh`))Wi!5wSud;mhd(nuWIf3#PPY;FBws}x*0O;H zT#&zJ|Am~dn|x#Po5*Jwc2>=tnmIp_tpq#yhv2k?hr#tcblXH5Wnj1kGnL#CU7p?| zi_V#pRoMQ9DV-<=Y09K4I4B&D7tS7ED!Tcx+o{wd?_zvAB=?TrBP%9T*gtB;E9N zH2y;h~uYvmeK5IwScba#AoZzwr$BMEIrJ zeC=B%iQH)Ai3K7?=Gv@=(LvT*_E#wqnCrReIpa~pVaOo*nchy`w|mB)MkZ$^XB`Uv zV)SH+i~R$co&%oKo{jQ1Ru^?9^$2$`x0G%{HJ9m&d6T{KJ#~HA<#RLfN^M z?+Be;=)30o%RA9i(_f!SRX5nLiPj`(6jwTgx@3j3TE>32=P<3k|6-d%@>hO`Eu-0H zs#AhIVkk=0aAwxBEFs$0+D32kwDF(t37*D*vnc7Z%iQnmB$KW0w1tru*;BI4g|8a* zsIu|{cwNtz9shi(naP@O?1|(}Yli-7bVtt2tmC2fdK$4?tn4f7&o7Vmvz}YlG=s2Z z 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 literal 0 HcmV?d00001 diff --git a/bin/custom-output/interrupt-test/amtest-interrupt-test.txt b/bin/custom-output/interrupt-test/amtest-interrupt-test.txt new file mode 100755 index 0000000..4a5230b --- /dev/null +++ b/bin/custom-output/interrupt-test/amtest-interrupt-test.txt @@ -0,0 +1,3311 @@ + +/home/hzb/test/am-kernels/tests/am-tests/build/amtest-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 0009f117 auipc sp,0x9f + 80000008: ffc10113 addi sp,sp,-4 # 8009f000 <_end> + 8000000c: 0b8010ef jal ra,800010c4 <_trm_init> + +0000000080000010
: + 80000010: fd010113 addi sp,sp,-48 + 80000014: 02113423 sd ra,40(sp) + 80000018: 02813023 sd s0,32(sp) + 8000001c: 00913c23 sd s1,24(sp) + 80000020: 01213823 sd s2,16(sp) + 80000024: 01313423 sd s3,8(sp) + 80000028: 00054783 lbu a5,0(a0) + 8000002c: 01500713 li a4,21 + 80000030: f9f7879b addiw a5,a5,-97 + 80000034: 0ff7f793 andi a5,a5,255 + 80000038: 02f76063 bltu a4,a5,80000058 + 8000003c: 00003717 auipc a4,0x3 + 80000040: 18070713 addi a4,a4,384 # 800031bc <_etext+0x2c> + 80000044: 00279793 slli a5,a5,0x2 + 80000048: 00e787b3 add a5,a5,a4 + 8000004c: 0007a783 lw a5,0(a5) + 80000050: 00e787b3 add a5,a5,a4 + 80000054: 00078067 jr a5 + 80000058: 00003517 auipc a0,0x3 + 8000005c: 13850513 addi a0,a0,312 # 80003190 <_etext> + 80000060: 1f1020ef jal ra,80002a50 + 80000064: 00003497 auipc s1,0x3 + 80000068: 28448493 addi s1,s1,644 # 800032e8 + 8000006c: 00000413 li s0,0 + 80000070: 10000913 li s2,256 + 80000074: 00003997 auipc s3,0x3 + 80000078: 13c98993 addi s3,s3,316 # 800031b0 <_etext+0x20> + 8000007c: 0014041b addiw s0,s0,1 + 80000080: 03240c63 beq s0,s2,800000b8 + 80000084: 0004b603 ld a2,0(s1) + 80000088: 00060863 beqz a2,80000098 + 8000008c: 00040593 mv a1,s0 + 80000090: 00098513 mv a0,s3 + 80000094: 1bd020ef jal ra,80002a50 + 80000098: 00848493 addi s1,s1,8 + 8000009c: fe1ff06f j 8000007c + 800000a0: 00000797 auipc a5,0x0 + 800000a4: 13c78793 addi a5,a5,316 # 800001dc + 800000a8: 00097717 auipc a4,0x97 + 800000ac: b0f73023 sd a5,-1280(a4) # 80096ba8 + 800000b0: 1e0010ef jal ra,80001290 + 800000b4: 128000ef jal ra,800001dc + 800000b8: 02813083 ld ra,40(sp) + 800000bc: 02013403 ld s0,32(sp) + 800000c0: 01813483 ld s1,24(sp) + 800000c4: 01013903 ld s2,16(sp) + 800000c8: 00813983 ld s3,8(sp) + 800000cc: 00000513 li a0,0 + 800000d0: 03010113 addi sp,sp,48 + 800000d4: 00008067 ret + 800000d8: 00001797 auipc a5,0x1 + 800000dc: ac078793 addi a5,a5,-1344 # 80000b98 + 800000e0: 00097717 auipc a4,0x97 + 800000e4: acf73423 sd a5,-1336(a4) # 80096ba8 + 800000e8: 1a8010ef jal ra,80001290 + 800000ec: 2ad000ef jal ra,80000b98 + 800000f0: fc9ff06f j 800000b8 + 800000f4: 00001797 auipc a5,0x1 + 800000f8: d2c78793 addi a5,a5,-724 # 80000e20 + 800000fc: 00097717 auipc a4,0x97 + 80000100: aaf73623 sd a5,-1364(a4) # 80096ba8 + 80000104: 51d000ef jal ra,80000e20 + 80000108: fb1ff06f j 800000b8 + 8000010c: 00001797 auipc a5,0x1 + 80000110: ef078793 addi a5,a5,-272 # 80000ffc + 80000114: 00097717 auipc a4,0x97 + 80000118: a8f73a23 sd a5,-1388(a4) # 80096ba8 + 8000011c: 174010ef jal ra,80001290 + 80000120: 00001517 auipc a0,0x1 + 80000124: e4850513 addi a0,a0,-440 # 80000f68 + 80000128: 634010ef jal ra,8000175c + 8000012c: 6d1000ef jal ra,80000ffc + 80000130: f89ff06f j 800000b8 + 80000134: 00001797 auipc a5,0x1 + 80000138: d3878793 addi a5,a5,-712 # 80000e6c + 8000013c: 00097717 auipc a4,0x97 + 80000140: a6f73623 sd a5,-1428(a4) # 80096ba8 + 80000144: 14c010ef jal ra,80001290 + 80000148: 525000ef jal ra,80000e6c + 8000014c: f6dff06f j 800000b8 + 80000150: 00001517 auipc a0,0x1 + 80000154: f1c50513 addi a0,a0,-228 # 8000106c + 80000158: 00097797 auipc a5,0x97 + 8000015c: a4a7b823 sd a0,-1456(a5) # 80096ba8 + 80000160: 7a4010ef jal ra,80001904 + 80000164: 709000ef jal ra,8000106c + 80000168: f51ff06f j 800000b8 + 8000016c: 00000797 auipc a5,0x0 + 80000170: 3b478793 addi a5,a5,948 # 80000520 + 80000174: 00000517 auipc a0,0x0 + 80000178: 22c50513 addi a0,a0,556 # 800003a0 + 8000017c: 00097717 auipc a4,0x97 + 80000180: a2f73623 sd a5,-1492(a4) # 80096ba8 + 80000184: 5d8010ef jal ra,8000175c + 80000188: 00000597 auipc a1,0x0 + 8000018c: 21458593 addi a1,a1,532 # 8000039c + 80000190: 00000517 auipc a0,0x0 + 80000194: 18450513 addi a0,a0,388 # 80000314 + 80000198: 74c010ef jal ra,800018e4 + 8000019c: 384000ef jal ra,80000520 + 800001a0: f19ff06f j 800000b8 + 800001a4: 00000797 auipc a5,0x0 + 800001a8: 51478793 addi a5,a5,1300 # 800006b8 + 800001ac: 00097717 auipc a4,0x97 + 800001b0: 9ef73e23 sd a5,-1540(a4) # 80096ba8 + 800001b4: 0dc010ef jal ra,80001290 + 800001b8: 500000ef jal ra,800006b8 + 800001bc: efdff06f j 800000b8 + 800001c0: 00001797 auipc a5,0x1 + 800001c4: 94078793 addi a5,a5,-1728 # 80000b00 + 800001c8: 00097717 auipc a4,0x97 + 800001cc: 9ef73023 sd a5,-1568(a4) # 80096ba8 + 800001d0: 0c0010ef jal ra,80001290 + 800001d4: 12d000ef jal ra,80000b00 + 800001d8: ee1ff06f j 800000b8 + +00000000800001dc : + 800001dc: fc010113 addi sp,sp,-64 + 800001e0: 00010593 mv a1,sp + 800001e4: 00e00513 li a0,14 + 800001e8: 02113c23 sd ra,56(sp) + 800001ec: 02813823 sd s0,48(sp) + 800001f0: 02913423 sd s1,40(sp) + 800001f4: 03213023 sd s2,32(sp) + 800001f8: 01313c23 sd s3,24(sp) + 800001fc: 01413823 sd s4,16(sp) + 80000200: 0e4010ef jal ra,800012e4 + 80000204: 00014783 lbu a5,0(sp) + 80000208: 0c078c63 beqz a5,800002e0 + 8000020c: 040007b7 lui a5,0x4000 + 80000210: 07d78793 addi a5,a5,125 # 400007d <_entry_offset+0x400007d> + 80000214: 00679793 slli a5,a5,0x6 + 80000218: 00004497 auipc s1,0x4 + 8000021c: 53048493 addi s1,s1,1328 # 80004748 + 80000220: 00012917 auipc s2,0x12 + 80000224: 33490913 addi s2,s2,820 # 80012554 <_data> + 80000228: 00f13023 sd a5,0(sp) + 8000022c: 00010593 mv a1,sp + 80000230: 40000793 li a5,1024 + 80000234: 00f00513 li a0,15 + 80000238: 4099093b subw s2,s2,s1 + 8000023c: 00f12423 sw a5,8(sp) + 80000240: 0c0010ef jal ra,80001300 + 80000244: 06090463 beqz s2,800002ac + 80000248: 00000413 li s0,0 + 8000024c: 00000793 li a5,0 + 80000250: 00001a37 lui s4,0x1 + 80000254: 00004997 auipc s3,0x4 + 80000258: 8c498993 addi s3,s3,-1852 # 80003b18 + 8000025c: 40f907bb subw a5,s2,a5 + 80000260: 0007869b sext.w a3,a5 + 80000264: 00048713 mv a4,s1 + 80000268: 00010593 mv a1,sp + 8000026c: 01100513 li a0,17 + 80000270: 00da7463 bgeu s4,a3,80000278 + 80000274: 000017b7 lui a5,0x1 + 80000278: 02079693 slli a3,a5,0x20 + 8000027c: 0206d693 srli a3,a3,0x20 + 80000280: 00d484b3 add s1,s1,a3 + 80000284: 0087843b addw s0,a5,s0 + 80000288: 00e13023 sd a4,0(sp) + 8000028c: 00913423 sd s1,8(sp) + 80000290: 070010ef jal ra,80001300 + 80000294: 00090613 mv a2,s2 + 80000298: 00040593 mv a1,s0 + 8000029c: 00098513 mv a0,s3 + 800002a0: 7b0020ef jal ra,80002a50 + 800002a4: 00040793 mv a5,s0 + 800002a8: fb246ae3 bltu s0,s2,8000025c + 800002ac: 00010593 mv a1,sp + 800002b0: 01000513 li a0,16 + 800002b4: 030010ef jal ra,800012e4 + 800002b8: 00012783 lw a5,0(sp) + 800002bc: fef048e3 bgtz a5,800002ac + 800002c0: 03813083 ld ra,56(sp) + 800002c4: 03013403 ld s0,48(sp) + 800002c8: 02813483 ld s1,40(sp) + 800002cc: 02013903 ld s2,32(sp) + 800002d0: 01813983 ld s3,24(sp) + 800002d4: 01013a03 ld s4,16(sp) + 800002d8: 04010113 addi sp,sp,64 + 800002dc: 00008067 ret + 800002e0: 00004597 auipc a1,0x4 + 800002e4: 80058593 addi a1,a1,-2048 # 80003ae0 + 800002e8: 00004517 auipc a0,0x4 + 800002ec: 80850513 addi a0,a0,-2040 # 80003af0 + 800002f0: 760020ef jal ra,80002a50 + 800002f4: 03813083 ld ra,56(sp) + 800002f8: 03013403 ld s0,48(sp) + 800002fc: 02813483 ld s1,40(sp) + 80000300: 02013903 ld s2,32(sp) + 80000304: 01813983 ld s3,24(sp) + 80000308: 01013a03 ld s4,16(sp) + 8000030c: 04010113 addi sp,sp,64 + 80000310: 00008067 ret + +0000000080000314 : + 80000314: fd010113 addi sp,sp,-48 + 80000318: 01313423 sd s3,8(sp) + 8000031c: 00097997 auipc s3,0x97 + 80000320: 89498993 addi s3,s3,-1900 # 80096bb0 + 80000324: 01213823 sd s2,16(sp) + 80000328: 0009b903 ld s2,0(s3) + 8000032c: 00913c23 sd s1,24(sp) + 80000330: 02113423 sd ra,40(sp) + 80000334: 02813023 sd s0,32(sp) + 80000338: 00050493 mv s1,a0 + 8000033c: 00091663 bnez s2,80000348 + 80000340: 00012917 auipc s2,0x12 + 80000344: 23093903 ld s2,560(s2) # 80012570 + 80000348: 00048593 mv a1,s1 + 8000034c: 00090513 mv a0,s2 + 80000350: 64d000ef jal ra,8000119c <__umoddi3> + 80000354: 02050063 beqz a0,80000374 + 80000358: 00190413 addi s0,s2,1 + 8000035c: 00040513 mv a0,s0 + 80000360: 00048593 mv a1,s1 + 80000364: 639000ef jal ra,8000119c <__umoddi3> + 80000368: 00040913 mv s2,s0 + 8000036c: 00140413 addi s0,s0,1 + 80000370: fe0516e3 bnez a0,8000035c + 80000374: 02813083 ld ra,40(sp) + 80000378: 02013403 ld s0,32(sp) + 8000037c: 012484b3 add s1,s1,s2 + 80000380: 0099b023 sd s1,0(s3) + 80000384: 00090513 mv a0,s2 + 80000388: 01813483 ld s1,24(sp) + 8000038c: 01013903 ld s2,16(sp) + 80000390: 00813983 ld s3,8(sp) + 80000394: 03010113 addi sp,sp,48 + 80000398: 00008067 ret + +000000008000039c : + 8000039c: 00008067 ret + +00000000800003a0 : + 800003a0: 00052783 lw a5,0(a0) + 800003a4: fe010113 addi sp,sp,-32 + 800003a8: 00813823 sd s0,16(sp) + 800003ac: 00113c23 sd ra,24(sp) + 800003b0: 00300713 li a4,3 + 800003b4: 00058413 mv s0,a1 + 800003b8: 0ce78663 beq a5,a4,80000484 + 800003bc: 08f76663 bltu a4,a5,80000448 + 800003c0: 00100713 li a4,1 + 800003c4: 0ae78063 beq a5,a4,80000464 + 800003c8: 00200713 li a4,2 + 800003cc: 12e79a63 bne a5,a4,80000500 + 800003d0: 00100513 li a0,1 + 800003d4: 3b4010ef jal ra,80001788 + 800003d8: 00012623 sw zero,12(sp) + 800003dc: 00c12783 lw a5,12(sp) + 800003e0: 000f4737 lui a4,0xf4 + 800003e4: 23f70713 addi a4,a4,575 # f423f <_entry_offset+0xf423f> + 800003e8: 0007879b sext.w a5,a5 + 800003ec: 00f74e63 blt a4,a5,80000408 + 800003f0: 00c12783 lw a5,12(sp) + 800003f4: 0017879b addiw a5,a5,1 + 800003f8: 00f12623 sw a5,12(sp) + 800003fc: 00c12783 lw a5,12(sp) + 80000400: 0007879b sext.w a5,a5 + 80000404: fef756e3 bge a4,a5,800003f0 + 80000408: 05043583 ld a1,80(s0) + 8000040c: 00003517 auipc a0,0x3 + 80000410: 78450513 addi a0,a0,1924 # 80003b90 + 80000414: 63c020ef jal ra,80002a50 + 80000418: 00012797 auipc a5,0x12 + 8000041c: 1507a783 lw a5,336(a5) # 80012568 + 80000420: 00078a63 beqz a5,80000434 + 80000424: 00012797 auipc a5,0x12 + 80000428: 1407a223 sw zero,324(a5) # 80012568 + 8000042c: 00096417 auipc s0,0x96 + 80000430: 78c43403 ld s0,1932(s0) # 80096bb8 + 80000434: 01813083 ld ra,24(sp) + 80000438: 00040513 mv a0,s0 + 8000043c: 01013403 ld s0,16(sp) + 80000440: 02010113 addi sp,sp,32 + 80000444: 00008067 ret + 80000448: ffb7879b addiw a5,a5,-5 + 8000044c: 00100713 li a4,1 + 80000450: 0af76863 bltu a4,a5,80000500 + 80000454: 01853583 ld a1,24(a0) + 80000458: 00003517 auipc a0,0x3 + 8000045c: 70850513 addi a0,a0,1800 # 80003b60 + 80000460: 5f0020ef jal ra,80002a50 + 80000464: 00012797 auipc a5,0x12 + 80000468: 1047a783 lw a5,260(a5) # 80012568 + 8000046c: fc0784e3 beqz a5,80000434 + 80000470: 00012797 auipc a5,0x12 + 80000474: 0e07ac23 sw zero,248(a5) # 80012568 + 80000478: 00096417 auipc s0,0x96 + 8000047c: 74043403 ld s0,1856(s0) # 80096bb8 + 80000480: fb5ff06f j 80000434 + 80000484: 00853783 ld a5,8(a0) + 80000488: 01053583 ld a1,16(a0) + 8000048c: 00003697 auipc a3,0x3 + 80000490: 6b468693 addi a3,a3,1716 # 80003b40 + 80000494: 0017f713 andi a4,a5,1 + 80000498: 04070663 beqz a4,800004e4 + 8000049c: 0027f793 andi a5,a5,2 + 800004a0: 00003717 auipc a4,0x3 + 800004a4: 6b070713 addi a4,a4,1712 # 80003b50 + 800004a8: 00078e63 beqz a5,800004c4 + 800004ac: 00003617 auipc a2,0x3 + 800004b0: 73c60613 addi a2,a2,1852 # 80003be8 + 800004b4: 00003517 auipc a0,0x3 + 800004b8: 6cc50513 addi a0,a0,1740 # 80003b80 + 800004bc: 594020ef jal ra,80002a50 + 800004c0: fa5ff06f j 80000464 + 800004c4: 00003717 auipc a4,0x3 + 800004c8: 72470713 addi a4,a4,1828 # 80003be8 + 800004cc: 00003617 auipc a2,0x3 + 800004d0: 71c60613 addi a2,a2,1820 # 80003be8 + 800004d4: 00003517 auipc a0,0x3 + 800004d8: 6ac50513 addi a0,a0,1708 # 80003b80 + 800004dc: 574020ef jal ra,80002a50 + 800004e0: f85ff06f j 80000464 + 800004e4: 0027f793 andi a5,a5,2 + 800004e8: 00003697 auipc a3,0x3 + 800004ec: 70068693 addi a3,a3,1792 # 80003be8 + 800004f0: 00003717 auipc a4,0x3 + 800004f4: 66070713 addi a4,a4,1632 # 80003b50 + 800004f8: fa079ae3 bnez a5,800004ac + 800004fc: fc9ff06f j 800004c4 + 80000500: 02800613 li a2,40 + 80000504: 00003597 auipc a1,0x3 + 80000508: 69458593 addi a1,a1,1684 # 80003b98 + 8000050c: 00003517 auipc a0,0x3 + 80000510: 6c450513 addi a0,a0,1732 # 80003bd0 + 80000514: 53c020ef jal ra,80002a50 + 80000518: 00100513 li a0,1 + 8000051c: 385000ef jal ra,800010a0 + +0000000080000520 : + 80000520: fc010113 addi sp,sp,-64 + 80000524: 00300613 li a2,3 + 80000528: 00003597 auipc a1,0x3 + 8000052c: 6c858593 addi a1,a1,1736 # 80003bf0 + 80000530: 00003517 auipc a0,0x3 + 80000534: 6c850513 addi a0,a0,1736 # 80003bf8 + 80000538: 02113c23 sd ra,56(sp) + 8000053c: 02813823 sd s0,48(sp) + 80000540: 02913423 sd s1,40(sp) + 80000544: 03213023 sd s2,32(sp) + 80000548: 01313c23 sd s3,24(sp) + 8000054c: 01413823 sd s4,16(sp) + 80000550: 554020ef jal ra,80002aa4 + 80000554: 00050e63 beqz a0,80000570 + 80000558: 00003597 auipc a1,0x3 + 8000055c: 6a858593 addi a1,a1,1704 # 80003c00 + 80000560: 00003517 auipc a0,0x3 + 80000564: 69850513 addi a0,a0,1688 # 80003bf8 + 80000568: 3ac010ef jal ra,80001914 + 8000056c: 12051263 bnez a0,80000690 + 80000570: 00012417 auipc s0,0x12 + 80000574: 41840413 addi s0,s0,1048 # 80012988 + 80000578: 00040513 mv a0,s0 + 8000057c: 370010ef jal ra,800018ec + 80000580: 01043603 ld a2,16(s0) + 80000584: 00843583 ld a1,8(s0) + 80000588: 00003517 auipc a0,0x3 + 8000058c: 6a050513 addi a0,a0,1696 # 80003c28 + 80000590: 00096a17 auipc s4,0x96 + 80000594: 620a0a13 addi s4,s4,1568 # 80096bb0 + 80000598: 4b8020ef jal ra,80002a50 + 8000059c: 00843783 ld a5,8(s0) + 800005a0: 01043983 ld s3,16(s0) + 800005a4: 000a3483 ld s1,0(s4) + 800005a8: 00042903 lw s2,0(s0) + 800005ac: 40f989b3 sub s3,s3,a5 + 800005b0: 0019d993 srli s3,s3,0x1 + 800005b4: 00f989b3 add s3,s3,a5 + 800005b8: 0c048663 beqz s1,80000684 + 800005bc: 00090593 mv a1,s2 + 800005c0: 00048513 mv a0,s1 + 800005c4: 3d9000ef jal ra,8000119c <__umoddi3> + 800005c8: 02050063 beqz a0,800005e8 + 800005cc: 00148413 addi s0,s1,1 + 800005d0: 00040513 mv a0,s0 + 800005d4: 00090593 mv a1,s2 + 800005d8: 3c5000ef jal ra,8000119c <__umoddi3> + 800005dc: 00040493 mv s1,s0 + 800005e0: 00140413 addi s0,s0,1 + 800005e4: fe0516e3 bnez a0,800005d0 + 800005e8: 00990933 add s2,s2,s1 + 800005ec: 00f00613 li a2,15 + 800005f0: 00012597 auipc a1,0x12 + 800005f4: f6858593 addi a1,a1,-152 # 80012558 + 800005f8: 00048513 mv a0,s1 + 800005fc: 012a3023 sd s2,0(s4) + 80000600: 65c020ef jal ra,80002c5c + 80000604: 00300693 li a3,3 + 80000608: 00048613 mv a2,s1 + 8000060c: 00098593 mv a1,s3 + 80000610: 00012517 auipc a0,0x12 + 80000614: 37850513 addi a0,a0,888 # 80012988 + 80000618: 2d8010ef jal ra,800018f0 + 8000061c: 00048613 mv a2,s1 + 80000620: 00098593 mv a1,s3 + 80000624: 00003517 auipc a0,0x3 + 80000628: 62c50513 addi a0,a0,1580 # 80003c50 + 8000062c: 424020ef jal ra,80002a50 + 80000630: 00098693 mv a3,s3 + 80000634: 00012597 auipc a1,0x12 + 80000638: 37458593 addi a1,a1,884 # 800129a8 + 8000063c: 00013617 auipc a2,0x13 + 80000640: 36c60613 addi a2,a2,876 # 800139a8 + 80000644: 00012517 auipc a0,0x12 + 80000648: 34450513 addi a0,a0,836 # 80012988 + 8000064c: 2a8010ef jal ra,800018f4 + 80000650: 00050793 mv a5,a0 + 80000654: 00100513 li a0,1 + 80000658: 00096717 auipc a4,0x96 + 8000065c: 56f73023 sd a5,1376(a4) # 80096bb8 + 80000660: 128010ef jal ra,80001788 + 80000664: 03013403 ld s0,48(sp) + 80000668: 03813083 ld ra,56(sp) + 8000066c: 02813483 ld s1,40(sp) + 80000670: 02013903 ld s2,32(sp) + 80000674: 01813983 ld s3,24(sp) + 80000678: 01013a03 ld s4,16(sp) + 8000067c: 04010113 addi sp,sp,64 + 80000680: 0fc0106f j 8000177c + 80000684: 00012497 auipc s1,0x12 + 80000688: eec4b483 ld s1,-276(s1) # 80012570 + 8000068c: f31ff06f j 800005bc + 80000690: 03013403 ld s0,48(sp) + 80000694: 03813083 ld ra,56(sp) + 80000698: 02813483 ld s1,40(sp) + 8000069c: 02013903 ld s2,32(sp) + 800006a0: 01813983 ld s3,24(sp) + 800006a4: 01013a03 ld s4,16(sp) + 800006a8: 00003517 auipc a0,0x3 + 800006ac: 56050513 addi a0,a0,1376 # 80003c08 + 800006b0: 04010113 addi sp,sp,64 + 800006b4: 39c0206f j 80002a50 + +00000000800006b8 : + 800006b8: fa010113 addi sp,sp,-96 + 800006bc: 04913423 sd s1,72(sp) + 800006c0: 000f44b7 lui s1,0xf4 + 800006c4: 04813823 sd s0,80(sp) + 800006c8: 03313c23 sd s3,56(sp) + 800006cc: 03413823 sd s4,48(sp) + 800006d0: 03513423 sd s5,40(sp) + 800006d4: 03613023 sd s6,32(sp) + 800006d8: 04113c23 sd ra,88(sp) + 800006dc: 05213023 sd s2,64(sp) + 800006e0: 00100413 li s0,1 + 800006e4: 24048493 addi s1,s1,576 # f4240 <_entry_offset+0xf4240> + 800006e8: 00003a17 auipc s4,0x3 + 800006ec: 598a0a13 addi s4,s4,1432 # 80003c80 + 800006f0: 00100993 li s3,1 + 800006f4: 00003b17 auipc s6,0x3 + 800006f8: 5bcb0b13 addi s6,s6,1468 # 80003cb0 + 800006fc: 00003a97 auipc s5,0x3 + 80000700: 5a4a8a93 addi s5,s5,1444 # 80003ca0 + 80000704: 0004091b sext.w s2,s0 + 80000708: 00600513 li a0,6 + 8000070c: 00810593 addi a1,sp,8 + 80000710: 3d5000ef jal ra,800012e4 + 80000714: 00813503 ld a0,8(sp) + 80000718: 00048593 mv a1,s1 + 8000071c: 239000ef jal ra,80001154 <__udivdi3> + 80000720: fe8564e3 bltu a0,s0,80000708 + 80000724: 00810593 addi a1,sp,8 + 80000728: 00500513 li a0,5 + 8000072c: 3b9000ef jal ra,800012e4 + 80000730: 01c12803 lw a6,28(sp) + 80000734: 01812783 lw a5,24(sp) + 80000738: 01412703 lw a4,20(sp) + 8000073c: 01012683 lw a3,16(sp) + 80000740: 00c12603 lw a2,12(sp) + 80000744: 00812583 lw a1,8(sp) + 80000748: 000a0513 mv a0,s4 + 8000074c: 304020ef jal ra,80002a50 + 80000750: 01341c63 bne s0,s3,80000768 + 80000754: 00100593 li a1,1 + 80000758: 000a8513 mv a0,s5 + 8000075c: 2f4020ef jal ra,80002a50 + 80000760: 00140413 addi s0,s0,1 + 80000764: fa1ff06f j 80000704 + 80000768: 00090593 mv a1,s2 + 8000076c: 000b0513 mv a0,s6 + 80000770: 2e0020ef jal ra,80002a50 + 80000774: 00140413 addi s0,s0,1 + 80000778: f8dff06f j 80000704 + +000000008000077c : + 8000077c: f7010113 addi sp,sp,-144 + 80000780: 00010593 mv a1,sp + 80000784: 00900513 li a0,9 + 80000788: 08113423 sd ra,136(sp) + 8000078c: 07213823 sd s2,112(sp) + 80000790: 07413023 sd s4,96(sp) + 80000794: 08813023 sd s0,128(sp) + 80000798: 06913c23 sd s1,120(sp) + 8000079c: 07313423 sd s3,104(sp) + 800007a0: 05513c23 sd s5,88(sp) + 800007a4: 05613823 sd s6,80(sp) + 800007a8: 05713423 sd s7,72(sp) + 800007ac: 05813023 sd s8,64(sp) + 800007b0: 03913c23 sd s9,56(sp) + 800007b4: 03a13823 sd s10,48(sp) + 800007b8: 03b13423 sd s11,40(sp) + 800007bc: 329000ef jal ra,800012e4 + 800007c0: 00412783 lw a5,4(sp) + 800007c4: 00010593 mv a1,sp + 800007c8: 00900513 li a0,9 + 800007cc: 41f7da1b sraiw s4,a5,0x1f + 800007d0: 01ba5a1b srliw s4,s4,0x1b + 800007d4: 00fa0a3b addw s4,s4,a5 + 800007d8: 30d000ef jal ra,800012e4 + 800007dc: 00812783 lw a5,8(sp) + 800007e0: 405a5a1b sraiw s4,s4,0x5 + 800007e4: 000a0513 mv a0,s4 + 800007e8: 41f7d91b sraiw s2,a5,0x1f + 800007ec: 01b9591b srliw s2,s2,0x1b + 800007f0: 00f9093b addw s2,s2,a5 + 800007f4: 4059591b sraiw s2,s2,0x5 + 800007f8: 00090593 mv a1,s2 + 800007fc: 0ed000ef jal ra,800010e8 <__muldi3> + 80000800: 0005079b sext.w a5,a0 + 80000804: 40000713 li a4,1024 + 80000808: 0ef76e63 bltu a4,a5,80000904 + 8000080c: fff7841b addiw s0,a5,-1 + 80000810: 02041413 slli s0,s0,0x20 + 80000814: 00078a93 mv s5,a5 + 80000818: 01e45413 srli s0,s0,0x1e + 8000081c: 00014797 auipc a5,0x14 + 80000820: 19078793 addi a5,a5,400 # 800149ac + 80000824: 00013997 auipc s3,0x13 + 80000828: 20498993 addi s3,s3,516 # 80013a28 + 8000082c: 00014c17 auipc s8,0x14 + 80000830: 1fcc0c13 addi s8,s8,508 # 80014a28 + 80000834: 00014497 auipc s1,0x14 + 80000838: 17448493 addi s1,s1,372 # 800149a8 + 8000083c: 00f40433 add s0,s0,a5 + 80000840: 00000c93 li s9,0 + 80000844: 000a0b9b sext.w s7,s4 + 80000848: 000c8b1b sext.w s6,s9 + 8000084c: f8098d13 addi s10,s3,-128 + 80000850: 00000d93 li s11,0 + 80000854: 000a8c63 beqz s5,8000086c + 80000858: 000d2703 lw a4,0(s10) + 8000085c: 00048793 mv a5,s1 + 80000860: 00e7a023 sw a4,0(a5) + 80000864: 00478793 addi a5,a5,4 + 80000868: fe879ce3 bne a5,s0,80000860 + 8000086c: 004d0d13 addi s10,s10,4 + 80000870: 00010593 mv a1,sp + 80000874: 00b00513 li a0,11 + 80000878: 01b12023 sw s11,0(sp) + 8000087c: 01612223 sw s6,4(sp) + 80000880: 00913423 sd s1,8(sp) + 80000884: 01412823 sw s4,16(sp) + 80000888: 01212a23 sw s2,20(sp) + 8000088c: 00010c23 sb zero,24(sp) + 80000890: 017d8dbb addw s11,s11,s7 + 80000894: 26d000ef jal ra,80001300 + 80000898: fb3d1ee3 bne s10,s3,80000854 + 8000089c: 080d0993 addi s3,s10,128 + 800008a0: 01990cbb addw s9,s2,s9 + 800008a4: fb8992e3 bne s3,s8,80000848 + 800008a8: 00010593 mv a1,sp + 800008ac: 00100793 li a5,1 + 800008b0: 00b00513 li a0,11 + 800008b4: 00013023 sd zero,0(sp) + 800008b8: 00013423 sd zero,8(sp) + 800008bc: 00013823 sd zero,16(sp) + 800008c0: 00f10c23 sb a5,24(sp) + 800008c4: 23d000ef jal ra,80001300 + 800008c8: 08813083 ld ra,136(sp) + 800008cc: 08013403 ld s0,128(sp) + 800008d0: 07813483 ld s1,120(sp) + 800008d4: 07013903 ld s2,112(sp) + 800008d8: 06813983 ld s3,104(sp) + 800008dc: 06013a03 ld s4,96(sp) + 800008e0: 05813a83 ld s5,88(sp) + 800008e4: 05013b03 ld s6,80(sp) + 800008e8: 04813b83 ld s7,72(sp) + 800008ec: 04013c03 ld s8,64(sp) + 800008f0: 03813c83 ld s9,56(sp) + 800008f4: 03013d03 ld s10,48(sp) + 800008f8: 02813d83 ld s11,40(sp) + 800008fc: 09010113 addi sp,sp,144 + 80000900: 00008067 ret + 80000904: 01600613 li a2,22 + 80000908: 00003597 auipc a1,0x3 + 8000090c: 3b858593 addi a1,a1,952 # 80003cc0 + 80000910: 00003517 auipc a0,0x3 + 80000914: 2c050513 addi a0,a0,704 # 80003bd0 + 80000918: 138020ef jal ra,80002a50 + 8000091c: 00100513 li a0,1 + 80000920: 780000ef jal ra,800010a0 + +0000000080000924 : + 80000924: 00096617 auipc a2,0x96 + 80000928: 29c60613 addi a2,a2,668 # 80096bc0 + 8000092c: 00062783 lw a5,0(a2) + 80000930: fe010113 addi sp,sp,-32 + 80000934: 00813c23 sd s0,24(sp) + 80000938: 00913823 sd s1,16(sp) + 8000093c: 01213423 sd s2,8(sp) + 80000940: 01313023 sd s3,0(sp) + 80000944: 0017839b addiw t2,a5,1 + 80000948: 00015717 auipc a4,0x15 + 8000094c: 0e070713 addi a4,a4,224 # 80015a28 + 80000950: 00016697 auipc a3,0x16 + 80000954: 0d868693 addi a3,a3,216 # 80016a28 + 80000958: 00762023 sw t2,0(a2) + 8000095c: f8070793 addi a5,a4,-128 + 80000960: 0007a023 sw zero,0(a5) + 80000964: 00478793 addi a5,a5,4 + 80000968: fee79ce3 bne a5,a4,80000960 + 8000096c: 08078713 addi a4,a5,128 + 80000970: fee696e3 bne a3,a4,8000095c + 80000974: 0ff3f693 andi a3,t2,255 + 80000978: 0016979b slliw a5,a3,0x1 + 8000097c: 00d787bb addw a5,a5,a3 + 80000980: 0036971b slliw a4,a3,0x3 + 80000984: 40d7073b subw a4,a4,a3 + 80000988: 0017979b slliw a5,a5,0x1 + 8000098c: 0ff7f793 andi a5,a5,255 + 80000990: 0ff77713 andi a4,a4,255 + 80000994: 0087171b slliw a4,a4,0x8 + 80000998: 0107979b slliw a5,a5,0x10 + 8000099c: 00e7e7b3 or a5,a5,a4 + 800009a0: 0ff3f713 andi a4,t2,255 + 800009a4: 00e7e7b3 or a5,a5,a4 + 800009a8: 00013417 auipc s0,0x13 + 800009ac: 00040413 mv s0,s0 + 800009b0: 00015f97 auipc t6,0x15 + 800009b4: ff8f8f93 addi t6,t6,-8 # 800159a8 + 800009b8: 00f42023 sw a5,0(s0) # 800139a8 + 800009bc: 00100793 li a5,1 + 800009c0: 00ffa023 sw a5,0(t6) + 800009c4: 00100693 li a3,1 + 800009c8: 00000713 li a4,0 + 800009cc: 00100f13 li t5,1 + 800009d0: 00000593 li a1,0 + 800009d4: 00000e93 li t4,0 + 800009d8: 00000e13 li t3,0 + 800009dc: 01f00813 li a6,31 + 800009e0: 00003317 auipc t1,0x3 + 800009e4: 33030313 addi t1,t1,816 # 80003d10 + 800009e8: 00003897 auipc a7,0x3 + 800009ec: 33888893 addi a7,a7,824 # 80003d20 + 800009f0: 00100493 li s1,1 + 800009f4: 40000293 li t0,1024 + 800009f8: 00400613 li a2,4 + 800009fc: 00ee07bb addw a5,t3,a4 + 80000a00: fff6061b addiw a2,a2,-1 + 80000a04: 00158713 addi a4,a1,1 + 80000a08: 00de86bb addw a3,t4,a3 + 80000a0c: 02f86063 bltu a6,a5,80000a2c + 80000a10: 00579513 slli a0,a5,0x5 + 80000a14: 00d50533 add a0,a0,a3 + 80000a18: 00251513 slli a0,a0,0x2 + 80000a1c: 00af8933 add s2,t6,a0 + 80000a20: 00d86663 bltu a6,a3,80000a2c + 80000a24: 00092983 lw s3,0(s2) + 80000a28: 06098463 beqz s3,80000a90 + 80000a2c: 00377593 andi a1,a4,3 + 80000a30: 00259793 slli a5,a1,0x2 + 80000a34: 00f30733 add a4,t1,a5 + 80000a38: 00f887b3 add a5,a7,a5 + 80000a3c: 02060a63 beqz a2,80000a70 + 80000a40: 00072703 lw a4,0(a4) + 80000a44: 0007a683 lw a3,0(a5) + 80000a48: fff6061b addiw a2,a2,-1 + 80000a4c: 00ee07bb addw a5,t3,a4 + 80000a50: 00de86bb addw a3,t4,a3 + 80000a54: 00158713 addi a4,a1,1 + 80000a58: faf87ce3 bgeu a6,a5,80000a10 + 80000a5c: 00377593 andi a1,a4,3 + 80000a60: 00259793 slli a5,a1,0x2 + 80000a64: 00f30733 add a4,t1,a5 + 80000a68: 00f887b3 add a5,a7,a5 + 80000a6c: fc061ae3 bnez a2,80000a40 + 80000a70: 001f0f1b addiw t5,t5,1 + 80000a74: 065f0a63 beq t5,t0,80000ae8 + 80000a78: 00259793 slli a5,a1,0x2 + 80000a7c: 00f30733 add a4,t1,a5 + 80000a80: 00f887b3 add a5,a7,a5 + 80000a84: 00072703 lw a4,0(a4) + 80000a88: 0007a683 lw a3,0(a5) + 80000a8c: f6dff06f j 800009f8 + 80000a90: 401f5e1b sraiw t3,t5,0x1 + 80000a94: 007e0e3b addw t3,t3,t2 + 80000a98: 0ffe7e93 andi t4,t3,255 + 80000a9c: 001e971b slliw a4,t4,0x1 + 80000aa0: 01d7073b addw a4,a4,t4 + 80000aa4: 003e961b slliw a2,t4,0x3 + 80000aa8: 41d6063b subw a2,a2,t4 + 80000aac: 0017171b slliw a4,a4,0x1 + 80000ab0: 0ff77713 andi a4,a4,255 + 80000ab4: 0ff67613 andi a2,a2,255 + 80000ab8: 0107171b slliw a4,a4,0x10 + 80000abc: 0086161b slliw a2,a2,0x8 + 80000ac0: 0ffe7e13 andi t3,t3,255 + 80000ac4: 00c76733 or a4,a4,a2 + 80000ac8: 01c76733 or a4,a4,t3 + 80000acc: 00a40533 add a0,s0,a0 + 80000ad0: 00992023 sw s1,0(s2) + 80000ad4: 00e52023 sw a4,0(a0) + 80000ad8: 001f0f1b addiw t5,t5,1 + 80000adc: 00068e93 mv t4,a3 + 80000ae0: 00078e13 mv t3,a5 + 80000ae4: f85f1ae3 bne t5,t0,80000a78 + 80000ae8: 01813403 ld s0,24(sp) + 80000aec: 01013483 ld s1,16(sp) + 80000af0: 00813903 ld s2,8(sp) + 80000af4: 00013983 ld s3,0(sp) + 80000af8: 02010113 addi sp,sp,32 + 80000afc: 00008067 ret + +0000000080000b00 : + 80000b00: fb010113 addi sp,sp,-80 + 80000b04: 02913c23 sd s1,56(sp) + 80000b08: 03213823 sd s2,48(sp) + 80000b0c: 03313423 sd s3,40(sp) + 80000b10: 03413023 sd s4,32(sp) + 80000b14: 01513c23 sd s5,24(sp) + 80000b18: 04113423 sd ra,72(sp) + 80000b1c: 04813023 sd s0,64(sp) + 80000b20: 00000993 li s3,0 + 80000b24: 00000913 li s2,0 + 80000b28: 00000493 li s1,0 + 80000b2c: 02100a13 li s4,33 + 80000b30: 00003a97 auipc s5,0x3 + 80000b34: 1d0a8a93 addi s5,s5,464 # 80003d00 + 80000b38: 00810593 addi a1,sp,8 + 80000b3c: 00600513 li a0,6 + 80000b40: 7a4000ef jal ra,800012e4 + 80000b44: 00813503 ld a0,8(sp) + 80000b48: 3e800593 li a1,1000 + 80000b4c: 608000ef jal ra,80001154 <__udivdi3> + 80000b50: 409507b3 sub a5,a0,s1 + 80000b54: 00050413 mv s0,a0 + 80000b58: 02fa6663 bltu s4,a5,80000b84 + 80000b5c: 412407b3 sub a5,s0,s2 + 80000b60: 3e800713 li a4,1000 + 80000b64: fcf77ae3 bgeu a4,a5,80000b38 + 80000b68: 00098613 mv a2,s3 + 80000b6c: 00040593 mv a1,s0 + 80000b70: 000a8513 mv a0,s5 + 80000b74: 6dd010ef jal ra,80002a50 + 80000b78: 00040913 mv s2,s0 + 80000b7c: 00000993 li s3,0 + 80000b80: fb9ff06f j 80000b38 + 80000b84: da1ff0ef jal ra,80000924 + 80000b88: 0019899b addiw s3,s3,1 + 80000b8c: bf1ff0ef jal ra,8000077c + 80000b90: 00040493 mv s1,s0 + 80000b94: fc9ff06f j 80000b5c + +0000000080000b98 : + 80000b98: 00012797 auipc a5,0x12 + 80000b9c: 9d878793 addi a5,a5,-1576 # 80012570 + 80000ba0: 0007b583 ld a1,0(a5) + 80000ba4: 0087b603 ld a2,8(a5) + 80000ba8: fb010113 addi sp,sp,-80 + 80000bac: 00003517 auipc a0,0x3 + 80000bb0: 18450513 addi a0,a0,388 # 80003d30 + 80000bb4: 04113423 sd ra,72(sp) + 80000bb8: 02913c23 sd s1,56(sp) + 80000bbc: 04813023 sd s0,64(sp) + 80000bc0: 03213823 sd s2,48(sp) + 80000bc4: 03313423 sd s3,40(sp) + 80000bc8: 03413023 sd s4,32(sp) + 80000bcc: 685010ef jal ra,80002a50 + 80000bd0: 00003517 auipc a0,0x3 + 80000bd4: 17850513 addi a0,a0,376 # 80003d48 + 80000bd8: 679010ef jal ra,80002a50 + 80000bdc: 00810593 addi a1,sp,8 + 80000be0: 00600513 li a0,6 + 80000be4: 700000ef jal ra,800012e4 + 80000be8: 00813503 ld a0,8(sp) + 80000bec: 3e800593 li a1,1000 + 80000bf0: 564000ef jal ra,80001154 <__udivdi3> + 80000bf4: 00012223 sw zero,4(sp) + 80000bf8: 00412703 lw a4,4(sp) + 80000bfc: 009897b7 lui a5,0x989 + 80000c00: 67f78793 addi a5,a5,1663 # 98967f <_entry_offset+0x98967f> + 80000c04: 0007071b sext.w a4,a4 + 80000c08: 0005049b sext.w s1,a0 + 80000c0c: 00e7ce63 blt a5,a4,80000c28 + 80000c10: 00412703 lw a4,4(sp) + 80000c14: 0017071b addiw a4,a4,1 + 80000c18: 00e12223 sw a4,4(sp) + 80000c1c: 00412703 lw a4,4(sp) + 80000c20: 0007071b sext.w a4,a4 + 80000c24: fee7d6e3 bge a5,a4,80000c10 + 80000c28: 00810593 addi a1,sp,8 + 80000c2c: 00600513 li a0,6 + 80000c30: 6b4000ef jal ra,800012e4 + 80000c34: 00813503 ld a0,8(sp) + 80000c38: 3e800593 li a1,1000 + 80000c3c: 00016417 auipc s0,0x16 + 80000c40: 03c40413 addi s0,s0,60 # 80016c78 + 80000c44: 510000ef jal ra,80001154 <__udivdi3> + 80000c48: 409505bb subw a1,a0,s1 + 80000c4c: 00003517 auipc a0,0x3 + 80000c50: 11c50513 addi a0,a0,284 # 80003d68 + 80000c54: 5fd010ef jal ra,80002a50 + 80000c58: 00810593 addi a1,sp,8 + 80000c5c: 00900513 li a0,9 + 80000c60: 684000ef jal ra,800012e4 + 80000c64: 00c12983 lw s3,12(sp) + 80000c68: 01012903 lw s2,16(sp) + 80000c6c: 00003517 auipc a0,0x3 + 80000c70: 11c50513 addi a0,a0,284 # 80003d88 + 80000c74: 00098593 mv a1,s3 + 80000c78: 00090613 mv a2,s2 + 80000c7c: 5d5010ef jal ra,80002a50 + 80000c80: 00096497 auipc s1,0x96 + 80000c84: f2848493 addi s1,s1,-216 # 80096ba8 + 80000c88: 4b5000ef jal ra,8000193c + 80000c8c: 00a40023 sb a0,0(s0) + 80000c90: 00140413 addi s0,s0,1 + 80000c94: fe941ae3 bne s0,s1,80000c88 + 80000c98: 41f9d71b sraiw a4,s3,0x1f + 80000c9c: 01e7571b srliw a4,a4,0x1e + 80000ca0: 0137073b addw a4,a4,s3 + 80000ca4: 00016797 auipc a5,0x16 + 80000ca8: f0478793 addi a5,a5,-252 # 80016ba8 + 80000cac: 4027571b sraiw a4,a4,0x2 + 80000cb0: 00e79323 sh a4,6(a5) + 80000cb4: 00016717 auipc a4,0x16 + 80000cb8: ee071e23 sh zero,-260(a4) # 80016bb0 + 80000cbc: 01f9d69b srliw a3,s3,0x1f + 80000cc0: 02500713 li a4,37 + 80000cc4: ffff0637 lui a2,0xffff0 + 80000cc8: 00e79923 sh a4,18(a5) + 80000ccc: 013686bb addw a3,a3,s3 + 80000cd0: 0016061b addiw a2,a2,1 + 80000cd4: 00a00713 li a4,10 + 80000cd8: fff00813 li a6,-1 + 80000cdc: 4016d69b sraiw a3,a3,0x1 + 80000ce0: 00c7a023 sw a2,0(a5) + 80000ce4: 00e79a23 sh a4,20(a5) + 80000ce8: fff00613 li a2,-1 + 80000cec: 0d000713 li a4,208 + 80000cf0: f9c9091b addiw s2,s2,-100 + 80000cf4: 00e79b23 sh a4,22(a5) + 80000cf8: 00d79523 sh a3,10(a5) + 80000cfc: 01079723 sh a6,14(a5) + 80000d00: 01079823 sh a6,16(a5) + 80000d04: 00c79223 sh a2,4(a5) + 80000d08: 01279623 sh s2,12(a5) + 80000d0c: 00810593 addi a1,sp,8 + 80000d10: 00c00513 li a0,12 + 80000d14: 00f13823 sd a5,16(sp) + 80000d18: 000807b7 lui a5,0x80 + 80000d1c: 00f12c23 sw a5,24(sp) + 80000d20: 00016717 auipc a4,0x16 + 80000d24: ea071023 sh zero,-352(a4) # 80016bc0 + 80000d28: 00012423 sw zero,8(sp) + 80000d2c: 5d4000ef jal ra,80001300 + 80000d30: 00d00513 li a0,13 + 80000d34: 00810593 addi a1,sp,8 + 80000d38: 00012423 sw zero,8(sp) + 80000d3c: 5c4000ef jal ra,80001300 + 80000d40: 00810593 addi a1,sp,8 + 80000d44: 01200513 li a0,18 + 80000d48: 59c000ef jal ra,800012e4 + 80000d4c: 00c12483 lw s1,12(sp) + 80000d50: 01012583 lw a1,16(sp) + 80000d54: 00003517 auipc a0,0x3 + 80000d58: 04c50513 addi a0,a0,76 # 80003da0 + 80000d5c: 00048613 mv a2,s1 + 80000d60: 4f1010ef jal ra,80002a50 + 80000d64: 00016417 auipc s0,0x16 + 80000d68: c4440413 addi s0,s0,-956 # 800169a8 + 80000d6c: 00048593 mv a1,s1 + 80000d70: 20000513 li a0,512 + 80000d74: 00813823 sd s0,16(sp) + 80000d78: 00010423 sb zero,8(sp) + 80000d7c: 00012c23 sw zero,24(sp) + 80000d80: 3cc000ef jal ra,8000114c <__divdi3> + 80000d84: 00050793 mv a5,a0 + 80000d88: 00810593 addi a1,sp,8 + 80000d8c: 01400513 li a0,20 + 80000d90: 00f12e23 sw a5,28(sp) + 80000d94: 56c000ef jal ra,80001300 + 80000d98: 00144603 lbu a2,1(s0) + 80000d9c: 00044583 lbu a1,0(s0) + 80000da0: 00003517 auipc a0,0x3 + 80000da4: 03850513 addi a0,a0,56 # 80003dd8 + 80000da8: 00016417 auipc s0,0x16 + 80000dac: c0240413 addi s0,s0,-1022 # 800169aa + 80000db0: 4a1010ef jal ra,80002a50 + 80000db4: 00003917 auipc s2,0x3 + 80000db8: 02490913 addi s2,s2,36 # 80003dd8 + 80000dbc: 00400493 li s1,4 + 80000dc0: 00016997 auipc s3,0x16 + 80000dc4: de898993 addi s3,s3,-536 # 80016ba8 + 80000dc8: 408484bb subw s1,s1,s0 + 80000dcc: 00003a17 auipc s4,0x3 + 80000dd0: d6ca0a13 addi s4,s4,-660 # 80003b38 + 80000dd4: 00090513 mv a0,s2 + 80000dd8: 03340463 beq s0,s3,80000e00 + 80000ddc: 00144603 lbu a2,1(s0) + 80000de0: 00044583 lbu a1,0(s0) + 80000de4: 46d010ef jal ra,80002a50 + 80000de8: 008487bb addw a5,s1,s0 + 80000dec: 01f7f793 andi a5,a5,31 + 80000df0: 02078063 beqz a5,80000e10 + 80000df4: 00240413 addi s0,s0,2 + 80000df8: 00090513 mv a0,s2 + 80000dfc: ff3410e3 bne s0,s3,80000ddc + 80000e00: 00003517 auipc a0,0x3 + 80000e04: fe850513 addi a0,a0,-24 # 80003de8 + 80000e08: 449010ef jal ra,80002a50 + 80000e0c: 0000006f j 80000e0c + 80000e10: 000a0513 mv a0,s4 + 80000e14: 43d010ef jal ra,80002a50 + 80000e18: 00240413 addi s0,s0,2 + 80000e1c: fddff06f j 80000df8 + +0000000080000e20 : + 80000e20: fe010113 addi sp,sp,-32 + 80000e24: 00913423 sd s1,8(sp) + 80000e28: 00113c23 sd ra,24(sp) + 80000e2c: 00813823 sd s0,16(sp) + 80000e30: 00a00493 li s1,10 + 80000e34: 00003417 auipc s0,0x3 + 80000e38: fc440413 addi s0,s0,-60 # 80003df8 + 80000e3c: 04800513 li a0,72 + 80000e40: 00140413 addi s0,s0,1 + 80000e44: 250000ef jal ra,80001094 + 80000e48: 00044503 lbu a0,0(s0) + 80000e4c: fe051ae3 bnez a0,80000e40 + 80000e50: fff4849b addiw s1,s1,-1 + 80000e54: fe0490e3 bnez s1,80000e34 + 80000e58: 01813083 ld ra,24(sp) + 80000e5c: 01013403 ld s0,16(sp) + 80000e60: 00813483 ld s1,8(sp) + 80000e64: 02010113 addi sp,sp,32 + 80000e68: 00008067 ret + +0000000080000e6c : + 80000e6c: fb010113 addi sp,sp,-80 + 80000e70: 00003517 auipc a0,0x3 + 80000e74: fb850513 addi a0,a0,-72 # 80003e28 + 80000e78: 04113423 sd ra,72(sp) + 80000e7c: 04813023 sd s0,64(sp) + 80000e80: 02913c23 sd s1,56(sp) + 80000e84: 03213823 sd s2,48(sp) + 80000e88: 03313423 sd s3,40(sp) + 80000e8c: 03413023 sd s4,32(sp) + 80000e90: 01513c23 sd s5,24(sp) + 80000e94: 3bd010ef jal ra,80002a50 + 80000e98: 00810593 addi a1,sp,8 + 80000e9c: 00100513 li a0,1 + 80000ea0: 444000ef jal ra,800012e4 + 80000ea4: 00814783 lbu a5,8(sp) + 80000ea8: 00096497 auipc s1,0x96 + 80000eac: d1d48493 addi s1,s1,-739 # 80096bc5 + 80000eb0: 00810593 addi a1,sp,8 + 80000eb4: 00700513 li a0,7 + 80000eb8: 00f48023 sb a5,0(s1) + 80000ebc: 428000ef jal ra,800012e4 + 80000ec0: 00814783 lbu a5,8(sp) + 80000ec4: 00096417 auipc s0,0x96 + 80000ec8: d0040413 addi s0,s0,-768 # 80096bc4 + 80000ecc: 00003a97 auipc s5,0x3 + 80000ed0: 26ca8a93 addi s5,s5,620 # 80004138 + 80000ed4: 00f40023 sb a5,0(s0) + 80000ed8: 00003a17 auipc s4,0x3 + 80000edc: f40a0a13 addi s4,s4,-192 # 80003e18 + 80000ee0: 00003997 auipc s3,0x3 + 80000ee4: f4098993 addi s3,s3,-192 # 80003e20 + 80000ee8: 00003917 auipc s2,0x3 + 80000eec: f8890913 addi s2,s2,-120 # 80003e70 + 80000ef0: 0004c703 lbu a4,0(s1) + 80000ef4: 02070663 beqz a4,80000f20 + 80000ef8: 00003417 auipc s0,0x3 + 80000efc: f6040413 addi s0,s0,-160 # 80003e58 + 80000f00: 00810593 addi a1,sp,8 + 80000f04: 00300513 li a0,3 + 80000f08: 3dc000ef jal ra,800012e4 + 80000f0c: 00814603 lbu a2,8(sp) + 80000f10: 00040513 mv a0,s0 + 80000f14: 00060593 mv a1,a2 + 80000f18: 339010ef jal ra,80002a50 + 80000f1c: fe5ff06f j 80000f00 + 80000f20: 00079e63 bnez a5,80000f3c + 80000f24: 0000006f j 80000f24 + 80000f28: 0007b583 ld a1,0(a5) # 80000 <_entry_offset+0x80000> + 80000f2c: 000a0693 mv a3,s4 + 80000f30: 00071463 bnez a4,80000f38 + 80000f34: 00098693 mv a3,s3 + 80000f38: 319010ef jal ra,80002a50 + 80000f3c: 00800513 li a0,8 + 80000f40: 00810593 addi a1,sp,8 + 80000f44: 3a0000ef jal ra,800012e4 + 80000f48: 00c12603 lw a2,12(sp) + 80000f4c: 00814703 lbu a4,8(sp) + 80000f50: 00090513 mv a0,s2 + 80000f54: 00361793 slli a5,a2,0x3 + 80000f58: 00fa87b3 add a5,s5,a5 + 80000f5c: fc0616e3 bnez a2,80000f28 + 80000f60: 00044783 lbu a5,0(s0) + 80000f64: f8dff06f j 80000ef0 + +0000000080000f68 : + 80000f68: 00052783 lw a5,0(a0) + 80000f6c: ff010113 addi sp,sp,-16 + 80000f70: 00813023 sd s0,0(sp) + 80000f74: 00113423 sd ra,8(sp) + 80000f78: 00500713 li a4,5 + 80000f7c: 00058413 mv s0,a1 + 80000f80: 02e78463 beq a5,a4,80000fa8 + 80000f84: 00600713 li a4,6 + 80000f88: 04e78c63 beq a5,a4,80000fe0 + 80000f8c: 00100713 li a4,1 + 80000f90: 02e78a63 beq a5,a4,80000fc4 + 80000f94: 00813083 ld ra,8(sp) + 80000f98: 00040513 mv a0,s0 + 80000f9c: 00013403 ld s0,0(sp) + 80000fa0: 01010113 addi sp,sp,16 + 80000fa4: 00008067 ret + 80000fa8: 07400513 li a0,116 + 80000fac: 0e8000ef jal ra,80001094 + 80000fb0: 00813083 ld ra,8(sp) + 80000fb4: 00040513 mv a0,s0 + 80000fb8: 00013403 ld s0,0(sp) + 80000fbc: 01010113 addi sp,sp,16 + 80000fc0: 00008067 ret + 80000fc4: 07900513 li a0,121 + 80000fc8: 0cc000ef jal ra,80001094 + 80000fcc: 00813083 ld ra,8(sp) + 80000fd0: 00040513 mv a0,s0 + 80000fd4: 00013403 ld s0,0(sp) + 80000fd8: 01010113 addi sp,sp,16 + 80000fdc: 00008067 ret + 80000fe0: 06400513 li a0,100 + 80000fe4: 0b0000ef jal ra,80001094 + 80000fe8: 00813083 ld ra,8(sp) + 80000fec: 00040513 mv a0,s0 + 80000ff0: 00013403 ld s0,0(sp) + 80000ff4: 01010113 addi sp,sp,16 + 80000ff8: 00008067 ret + +0000000080000ffc : + 80000ffc: fe010113 addi sp,sp,-32 + 80001000: 00003517 auipc a0,0x3 + 80001004: df850513 addi a0,a0,-520 # 80003df8 + 80001008: 00113c23 sd ra,24(sp) + 8000100c: 00813823 sd s0,16(sp) + 80001010: 241010ef jal ra,80002a50 + 80001014: 00003517 auipc a0,0x3 + 80001018: 3bc50513 addi a0,a0,956 # 800043d0 + 8000101c: 235010ef jal ra,80002a50 + 80001020: 00810593 addi a1,sp,8 + 80001024: 00700513 li a0,7 + 80001028: 2bc000ef jal ra,800012e4 + 8000102c: 00100513 li a0,1 + 80001030: 00989437 lui s0,0x989 + 80001034: 754000ef jal ra,80001788 + 80001038: 67f40413 addi s0,s0,1663 # 98967f <_entry_offset+0x98967f> + 8000103c: 00012423 sw zero,8(sp) + 80001040: 00812783 lw a5,8(sp) + 80001044: 0007879b sext.w a5,a5 + 80001048: 00f44e63 blt s0,a5,80001064 + 8000104c: 00812783 lw a5,8(sp) + 80001050: 0017879b addiw a5,a5,1 + 80001054: 00f12423 sw a5,8(sp) + 80001058: 00812783 lw a5,8(sp) + 8000105c: 0007879b sext.w a5,a5 + 80001060: fef456e3 bge s0,a5,8000104c + 80001064: 718000ef jal ra,8000177c + 80001068: fd5ff06f j 8000103c + +000000008000106c : + 8000106c: ff010113 addi sp,sp,-16 + 80001070: 00813023 sd s0,0(sp) + 80001074: 00113423 sd ra,8(sp) + 80001078: 00003417 auipc s0,0x3 + 8000107c: 38040413 addi s0,s0,896 # 800043f8 + 80001080: 08d000ef jal ra,8000190c + 80001084: 00050593 mv a1,a0 + 80001088: 00040513 mv a0,s0 + 8000108c: 1c5010ef jal ra,80002a50 + 80001090: ff1ff06f j 80001080 + +0000000080001094 : + 80001094: 00050513 mv a0,a0 + 80001098: 0000007b 0x7b + 8000109c: 00008067 ret + +00000000800010a0 : + 800010a0: 00050513 mv a0,a0 + 800010a4: 0000006b 0x6b + 800010a8: 0000006f j 800010a8 + +00000000800010ac <_assert>: + 800010ac: 00051a63 bnez a0,800010c0 <_assert+0x14> + 800010b0: 00100793 li a5,1 + 800010b4: 00078513 mv a0,a5 + 800010b8: 0000006b 0x6b + 800010bc: 0000006f j 800010bc <_assert+0x10> + 800010c0: 00008067 ret + +00000000800010c4 <_trm_init>: + 800010c4: ff010113 addi sp,sp,-16 + 800010c8: 00113423 sd ra,8(sp) + 800010cc: 0d1000ef jal ra,8000199c + 800010d0: 00003517 auipc a0,0x3 + 800010d4: 66850513 addi a0,a0,1640 # 80004738 + 800010d8: f39fe0ef jal ra,80000010
+ 800010dc: 00050513 mv a0,a0 + 800010e0: 0000006b 0x6b + 800010e4: 0000006f j 800010e4 <_trm_init+0x20> + +00000000800010e8 <__muldi3>: + 800010e8: 00050613 mv a2,a0 + 800010ec: 00000513 li a0,0 + 800010f0: 0015f693 andi a3,a1,1 + 800010f4: 00068463 beqz a3,800010fc <__muldi3+0x14> + 800010f8: 00c50533 add a0,a0,a2 + 800010fc: 0015d593 srli a1,a1,0x1 + 80001100: 00161613 slli a2,a2,0x1 + 80001104: fe0596e3 bnez a1,800010f0 <__muldi3+0x8> + 80001108: 00008067 ret + +000000008000110c <__udivsi3>: + 8000110c: 02051513 slli a0,a0,0x20 + 80001110: 02059593 slli a1,a1,0x20 + 80001114: 00008293 mv t0,ra + 80001118: 03c000ef jal ra,80001154 <__udivdi3> + 8000111c: 0005051b sext.w a0,a0 + 80001120: 00028067 jr t0 + +0000000080001124 <__umodsi3>: + 80001124: 02051513 slli a0,a0,0x20 + 80001128: 02059593 slli a1,a1,0x20 + 8000112c: 02055513 srli a0,a0,0x20 + 80001130: 0205d593 srli a1,a1,0x20 + 80001134: 00008293 mv t0,ra + 80001138: 01c000ef jal ra,80001154 <__udivdi3> + 8000113c: 0005851b sext.w a0,a1 + 80001140: 00028067 jr t0 + +0000000080001144 <__divsi3>: + 80001144: fff00293 li t0,-1 + 80001148: 0a558c63 beq a1,t0,80001200 <__moddi3+0x30> + +000000008000114c <__divdi3>: + 8000114c: 06054063 bltz a0,800011ac <__umoddi3+0x10> + 80001150: 0605c663 bltz a1,800011bc <__umoddi3+0x20> + +0000000080001154 <__udivdi3>: + 80001154: 00058613 mv a2,a1 + 80001158: 00050593 mv a1,a0 + 8000115c: fff00513 li a0,-1 + 80001160: 02060c63 beqz a2,80001198 <__udivdi3+0x44> + 80001164: 00100693 li a3,1 + 80001168: 00b67a63 bgeu a2,a1,8000117c <__udivdi3+0x28> + 8000116c: 00c05863 blez a2,8000117c <__udivdi3+0x28> + 80001170: 00161613 slli a2,a2,0x1 + 80001174: 00169693 slli a3,a3,0x1 + 80001178: feb66ae3 bltu a2,a1,8000116c <__udivdi3+0x18> + 8000117c: 00000513 li a0,0 + 80001180: 00c5e663 bltu a1,a2,8000118c <__udivdi3+0x38> + 80001184: 40c585b3 sub a1,a1,a2 + 80001188: 00d56533 or a0,a0,a3 + 8000118c: 0016d693 srli a3,a3,0x1 + 80001190: 00165613 srli a2,a2,0x1 + 80001194: fe0696e3 bnez a3,80001180 <__udivdi3+0x2c> + 80001198: 00008067 ret + +000000008000119c <__umoddi3>: + 8000119c: 00008293 mv t0,ra + 800011a0: fb5ff0ef jal ra,80001154 <__udivdi3> + 800011a4: 00058513 mv a0,a1 + 800011a8: 00028067 jr t0 + 800011ac: 40a00533 neg a0,a0 + 800011b0: 00b04863 bgtz a1,800011c0 <__umoddi3+0x24> + 800011b4: 40b005b3 neg a1,a1 + 800011b8: f9dff06f j 80001154 <__udivdi3> + 800011bc: 40b005b3 neg a1,a1 + 800011c0: 00008293 mv t0,ra + 800011c4: f91ff0ef jal ra,80001154 <__udivdi3> + 800011c8: 40a00533 neg a0,a0 + 800011cc: 00028067 jr t0 + +00000000800011d0 <__moddi3>: + 800011d0: 00008293 mv t0,ra + 800011d4: 0005ca63 bltz a1,800011e8 <__moddi3+0x18> + 800011d8: 00054c63 bltz a0,800011f0 <__moddi3+0x20> + 800011dc: f79ff0ef jal ra,80001154 <__udivdi3> + 800011e0: 00058513 mv a0,a1 + 800011e4: 00028067 jr t0 + 800011e8: 40b005b3 neg a1,a1 + 800011ec: fe0558e3 bgez a0,800011dc <__moddi3+0xc> + 800011f0: 40a00533 neg a0,a0 + 800011f4: f61ff0ef jal ra,80001154 <__udivdi3> + 800011f8: 40b00533 neg a0,a1 + 800011fc: 00028067 jr t0 + 80001200: 01f29293 slli t0,t0,0x1f + 80001204: f45514e3 bne a0,t0,8000114c <__divdi3> + 80001208: 00008067 ret + +000000008000120c <__am_timer_config>: + 8000120c: 00100793 li a5,1 + 80001210: 00f50023 sb a5,0(a0) + 80001214: 00f500a3 sb a5,1(a0) + 80001218: 00008067 ret + +000000008000121c <__am_input_config>: + 8000121c: 00100793 li a5,1 + 80001220: 00f50023 sb a5,0(a0) + 80001224: 00008067 ret + +0000000080001228 : + 80001228: ff010113 addi sp,sp,-16 + 8000122c: 00813023 sd s0,0(sp) + 80001230: 00113423 sd ra,8(sp) + 80001234: 00003417 auipc s0,0x3 + 80001238: 1cc40413 addi s0,s0,460 # 80004400 + 8000123c: 04100513 li a0,65 + 80001240: 00140413 addi s0,s0,1 + 80001244: e51ff0ef jal ra,80001094 + 80001248: 00044503 lbu a0,0(s0) + 8000124c: fe051ae3 bnez a0,80001240 + 80001250: 00003417 auipc s0,0x3 + 80001254: 1c040413 addi s0,s0,448 # 80004410 + 80001258: 06100513 li a0,97 + 8000125c: 00140413 addi s0,s0,1 + 80001260: e35ff0ef jal ra,80001094 + 80001264: 00044503 lbu a0,0(s0) + 80001268: fe051ae3 bnez a0,8000125c + 8000126c: 00003417 auipc s0,0x3 + 80001270: 1c440413 addi s0,s0,452 # 80004430 + 80001274: 02000513 li a0,32 + 80001278: 00140413 addi s0,s0,1 + 8000127c: e19ff0ef jal ra,80001094 + 80001280: 00044503 lbu a0,0(s0) + 80001284: fe051ae3 bnez a0,80001278 + 80001288: 00100513 li a0,1 + 8000128c: e15ff0ef jal ra,800010a0 + +0000000080001290 : + 80001290: ff010113 addi sp,sp,-16 + 80001294: 00113423 sd ra,8(sp) + 80001298: 00011797 auipc a5,0x11 + 8000129c: 2e878793 addi a5,a5,744 # 80012580 + 800012a0: 00011697 auipc a3,0x11 + 800012a4: 6e068693 addi a3,a3,1760 # 80012980 + 800012a8: 00000617 auipc a2,0x0 + 800012ac: f8060613 addi a2,a2,-128 # 80001228 + 800012b0: 00c0006f j 800012bc + 800012b4: 00878793 addi a5,a5,8 + 800012b8: 00d78c63 beq a5,a3,800012d0 + 800012bc: 0007b703 ld a4,0(a5) + 800012c0: fe071ae3 bnez a4,800012b4 + 800012c4: 00c7b023 sd a2,0(a5) + 800012c8: 00878793 addi a5,a5,8 + 800012cc: fed798e3 bne a5,a3,800012bc + 800012d0: 034000ef jal ra,80001304 <__am_timer_init> + 800012d4: 00813083 ld ra,8(sp) + 800012d8: 00100513 li a0,1 + 800012dc: 01010113 addi sp,sp,16 + 800012e0: 00008067 ret + +00000000800012e4 : + 800012e4: 00351793 slli a5,a0,0x3 + 800012e8: 00011517 auipc a0,0x11 + 800012ec: 29850513 addi a0,a0,664 # 80012580 + 800012f0: 00f50533 add a0,a0,a5 + 800012f4: 00053303 ld t1,0(a0) + 800012f8: 00058513 mv a0,a1 + 800012fc: 00030067 jr t1 + +0000000080001300 : + 80001300: fe5ff06f j 800012e4 + +0000000080001304 <__am_timer_init>: + 80001304: 00008067 ret + +0000000080001308 <__am_timer_uptime>: + 80001308: fd010113 addi sp,sp,-48 + 8000130c: 00913c23 sd s1,24(sp) + 80001310: 02113423 sd ra,40(sp) + 80001314: 02813023 sd s0,32(sp) + 80001318: 01213823 sd s2,16(sp) + 8000131c: 01313423 sd s3,8(sp) + 80001320: 00050493 mv s1,a0 + 80001324: b0002973 csrr s2,mcycle + 80001328: 000f49b7 lui s3,0xf4 + 8000132c: 24098593 addi a1,s3,576 # f4240 <_entry_offset+0xf4240> + 80001330: 00090513 mv a0,s2 + 80001334: e21ff0ef jal ra,80001154 <__udivdi3> + 80001338: 00551413 slli s0,a0,0x5 + 8000133c: 40a407b3 sub a5,s0,a0 + 80001340: 00679413 slli s0,a5,0x6 + 80001344: 40f40433 sub s0,s0,a5 + 80001348: 00341413 slli s0,s0,0x3 + 8000134c: 00a40433 add s0,s0,a0 + 80001350: 24098593 addi a1,s3,576 + 80001354: 00090513 mv a0,s2 + 80001358: e45ff0ef jal ra,8000119c <__umoddi3> + 8000135c: 00641413 slli s0,s0,0x6 + 80001360: 00a40433 add s0,s0,a0 + 80001364: 0084b023 sd s0,0(s1) + 80001368: 02813083 ld ra,40(sp) + 8000136c: 02013403 ld s0,32(sp) + 80001370: 01813483 ld s1,24(sp) + 80001374: 01013903 ld s2,16(sp) + 80001378: 00813983 ld s3,8(sp) + 8000137c: 03010113 addi sp,sp,48 + 80001380: 00008067 ret + +0000000080001384 : + 80001384: fc010113 addi sp,sp,-64 + 80001388: 01313c23 sd s3,24(sp) + 8000138c: 00058993 mv s3,a1 + 80001390: 00050793 mv a5,a0 + 80001394: 03800613 li a2,56 + 80001398: 00000593 li a1,0 + 8000139c: 00098513 mv a0,s3 + 800013a0: 02813823 sd s0,48(sp) + 800013a4: 03213023 sd s2,32(sp) + 800013a8: 0007b403 ld s0,0(a5) + 800013ac: 01413823 sd s4,16(sp) + 800013b0: 02113c23 sd ra,56(sp) + 800013b4: 02913423 sd s1,40(sp) + 800013b8: 01513423 sd s5,8(sp) + 800013bc: 7c0010ef jal ra,80002b7c + 800013c0: 7b200793 li a5,1970 + 800013c4: 00f9aa23 sw a5,20(s3) + 800013c8: 7b200913 li s2,1970 + 800013cc: 00003a17 auipc s4,0x3 + 800013d0: 374a0a13 addi s4,s4,884 # 80004740 + 800013d4: 0100006f j 800013e4 + 800013d8: 40e40433 sub s0,s0,a4 + 800013dc: 00d9aa23 sw a3,20(s3) + 800013e0: 00068913 mv s2,a3 + 800013e4: 0009049b sext.w s1,s2 + 800013e8: 06400593 li a1,100 + 800013ec: 00048513 mv a0,s1 + 800013f0: de1ff0ef jal ra,800011d0 <__moddi3> + 800013f4: 00050793 mv a5,a0 + 800013f8: 0007879b sext.w a5,a5 + 800013fc: 00048513 mv a0,s1 + 80001400: 00397493 andi s1,s2,3 + 80001404: 19000593 li a1,400 + 80001408: 0014b493 seqz s1,s1 + 8000140c: 00079863 bnez a5,8000141c + 80001410: dc1ff0ef jal ra,800011d0 <__moddi3> + 80001414: 0005049b sext.w s1,a0 + 80001418: 0014b493 seqz s1,s1 + 8000141c: 00249793 slli a5,s1,0x2 + 80001420: 00fa07b3 add a5,s4,a5 + 80001424: 0007e703 lwu a4,0(a5) + 80001428: 0019069b addiw a3,s2,1 + 8000142c: fae456e3 bge s0,a4,800013d8 + 80001430: 000155b7 lui a1,0x15 + 80001434: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80001438: 00040513 mv a0,s0 + 8000143c: d11ff0ef jal ra,8000114c <__divdi3> + 80001440: 00149793 slli a5,s1,0x1 + 80001444: 009784b3 add s1,a5,s1 + 80001448: 00449793 slli a5,s1,0x4 + 8000144c: 00003497 auipc s1,0x3 + 80001450: 02448493 addi s1,s1,36 # 80004470 + 80001454: 00f484b3 add s1,s1,a5 + 80001458: 0004e783 lwu a5,0(s1) + 8000145c: 0005051b sext.w a0,a0 + 80001460: 00a9ae23 sw a0,28(s3) + 80001464: 14f44463 blt s0,a5,800015ac + 80001468: 00100713 li a4,1 + 8000146c: 40f40433 sub s0,s0,a5 + 80001470: 0044e783 lwu a5,4(s1) + 80001474: 00070a1b sext.w s4,a4 + 80001478: 00448493 addi s1,s1,4 + 8000147c: 00170713 addi a4,a4,1 + 80001480: fef456e3 bge s0,a5,8000146c + 80001484: 000155b7 lui a1,0x15 + 80001488: 0149a823 sw s4,16(s3) + 8000148c: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80001490: 00040513 mv a0,s0 + 80001494: cb9ff0ef jal ra,8000114c <__divdi3> + 80001498: 0005051b sext.w a0,a0 + 8000149c: 0015079b addiw a5,a0,1 + 800014a0: 000155b7 lui a1,0x15 + 800014a4: 00f9a623 sw a5,12(s3) + 800014a8: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 800014ac: 00040513 mv a0,s0 + 800014b0: 00001ab7 lui s5,0x1 + 800014b4: 0007841b sext.w s0,a5 + 800014b8: d19ff0ef jal ra,800011d0 <__moddi3> + 800014bc: e10a8593 addi a1,s5,-496 # e10 <_entry_offset+0xe10> + 800014c0: 00050493 mv s1,a0 + 800014c4: c89ff0ef jal ra,8000114c <__divdi3> + 800014c8: e10a8593 addi a1,s5,-496 + 800014cc: 00a9a423 sw a0,8(s3) + 800014d0: 00048513 mv a0,s1 + 800014d4: cfdff0ef jal ra,800011d0 <__moddi3> + 800014d8: 03c00593 li a1,60 + 800014dc: 00050493 mv s1,a0 + 800014e0: c6dff0ef jal ra,8000114c <__divdi3> + 800014e4: 00a9a223 sw a0,4(s3) + 800014e8: 03c00593 li a1,60 + 800014ec: 00048513 mv a0,s1 + 800014f0: ce1ff0ef jal ra,800011d0 <__moddi3> + 800014f4: 001a0a1b addiw s4,s4,1 + 800014f8: 0ffa7793 andi a5,s4,255 + 800014fc: 0037b793 sltiu a5,a5,3 + 80001500: 40f9093b subw s2,s2,a5 + 80001504: 03091913 slli s2,s2,0x30 + 80001508: 03095913 srli s2,s2,0x30 + 8000150c: 00a9a023 sw a0,0(s3) + 80001510: 06400593 li a1,100 + 80001514: 00090513 mv a0,s2 + 80001518: c3dff0ef jal ra,80001154 <__udivdi3> + 8000151c: 0029549b srliw s1,s2,0x2 + 80001520: 0105179b slliw a5,a0,0x10 + 80001524: 0107d79b srliw a5,a5,0x10 + 80001528: 012484bb addw s1,s1,s2 + 8000152c: 19000593 li a1,400 + 80001530: 00090513 mv a0,s2 + 80001534: 0ffa7a13 andi s4,s4,255 + 80001538: 40f484bb subw s1,s1,a5 + 8000153c: fffa0a1b addiw s4,s4,-1 + 80001540: c15ff0ef jal ra,80001154 <__udivdi3> + 80001544: 00003797 auipc a5,0x3 + 80001548: f8c78793 addi a5,a5,-116 # 800044d0 + 8000154c: 002a1a13 slli s4,s4,0x2 + 80001550: 01478a33 add s4,a5,s4 + 80001554: 000a2783 lw a5,0(s4) + 80001558: 0105151b slliw a0,a0,0x10 + 8000155c: 0105551b srliw a0,a0,0x10 + 80001560: 00a484bb addw s1,s1,a0 + 80001564: 00f484bb addw s1,s1,a5 + 80001568: 0ff47513 andi a0,s0,255 + 8000156c: 00a4853b addw a0,s1,a0 + 80001570: 00700593 li a1,7 + 80001574: c5dff0ef jal ra,800011d0 <__moddi3> + 80001578: 03813083 ld ra,56(sp) + 8000157c: 03013403 ld s0,48(sp) + 80001580: 0ff57513 andi a0,a0,255 + 80001584: 00a9ac23 sw a0,24(s3) + 80001588: 0209a023 sw zero,32(s3) + 8000158c: 02813483 ld s1,40(sp) + 80001590: 02013903 ld s2,32(sp) + 80001594: 01013a03 ld s4,16(sp) + 80001598: 00813a83 ld s5,8(sp) + 8000159c: 00098513 mv a0,s3 + 800015a0: 01813983 ld s3,24(sp) + 800015a4: 04010113 addi sp,sp,64 + 800015a8: 00008067 ret + 800015ac: 00000a13 li s4,0 + 800015b0: eedff06f j 8000149c + +00000000800015b4 <__am_timer_rtc>: + 800015b4: f9010113 addi sp,sp,-112 + 800015b8: 06813023 sd s0,96(sp) + 800015bc: 06113423 sd ra,104(sp) + 800015c0: 04913c23 sd s1,88(sp) + 800015c4: 05213823 sd s2,80(sp) + 800015c8: 00050413 mv s0,a0 + 800015cc: b00024f3 csrr s1,mcycle + 800015d0: 000f4937 lui s2,0xf4 + 800015d4: 24090593 addi a1,s2,576 # f4240 <_entry_offset+0xf4240> + 800015d8: 00048513 mv a0,s1 + 800015dc: b79ff0ef jal ra,80001154 <__udivdi3> + 800015e0: 00050793 mv a5,a0 + 800015e4: 24090593 addi a1,s2,576 + 800015e8: 00048513 mv a0,s1 + 800015ec: 00f13423 sd a5,8(sp) + 800015f0: badff0ef jal ra,8000119c <__umoddi3> + 800015f4: 00050793 mv a5,a0 + 800015f8: 01810593 addi a1,sp,24 + 800015fc: 00810513 addi a0,sp,8 + 80001600: 00f13823 sd a5,16(sp) + 80001604: d81ff0ef jal ra,80001384 + 80001608: 01812703 lw a4,24(sp) + 8000160c: 02812783 lw a5,40(sp) + 80001610: 06813083 ld ra,104(sp) + 80001614: 00e42a23 sw a4,20(s0) + 80001618: 01c12703 lw a4,28(sp) + 8000161c: 0017879b addiw a5,a5,1 + 80001620: 00f42223 sw a5,4(s0) + 80001624: 00e42823 sw a4,16(s0) + 80001628: 02012703 lw a4,32(sp) + 8000162c: 02c12783 lw a5,44(sp) + 80001630: 05813483 ld s1,88(sp) + 80001634: 00e42623 sw a4,12(s0) + 80001638: 02412703 lw a4,36(sp) + 8000163c: 00f42023 sw a5,0(s0) + 80001640: 05013903 ld s2,80(sp) + 80001644: 00e42423 sw a4,8(s0) + 80001648: 06013403 ld s0,96(sp) + 8000164c: 07010113 addi sp,sp,112 + 80001650: 00008067 ret + +0000000080001654 <__am_input_keybrd>: + 80001654: 00050023 sb zero,0(a0) + 80001658: 00052223 sw zero,4(a0) + 8000165c: 00008067 ret + +0000000080001660 <__am_irq_handle>: + 80001660: 00095717 auipc a4,0x95 + 80001664: 56873703 ld a4,1384(a4) # 80096bc8 + 80001668: 00050593 mv a1,a0 + 8000166c: 0a070a63 beqz a4,80001720 <__am_irq_handle+0xc0> + 80001670: 10053683 ld a3,256(a0) + 80001674: fb010113 addi sp,sp,-80 + 80001678: 04113423 sd ra,72(sp) + 8000167c: 02013023 sd zero,32(sp) + 80001680: 02013423 sd zero,40(sp) + 80001684: 02013823 sd zero,48(sp) + 80001688: 02013c23 sd zero,56(sp) + 8000168c: 00b00793 li a5,11 + 80001690: 06f68c63 beq a3,a5,80001708 <__am_irq_handle+0xa8> + 80001694: fff00793 li a5,-1 + 80001698: 03f79793 slli a5,a5,0x3f + 8000169c: 00778793 addi a5,a5,7 + 800016a0: 04f69e63 bne a3,a5,800016fc <__am_irq_handle+0x9c> + 800016a4: 02004637 lui a2,0x2004 + 800016a8: 00063783 ld a5,0(a2) # 2004000 <_entry_offset+0x2004000> + 800016ac: 000f46b7 lui a3,0xf4 + 800016b0: 24068693 addi a3,a3,576 # f4240 <_entry_offset+0xf4240> + 800016b4: 00d787b3 add a5,a5,a3 + 800016b8: 00f63023 sd a5,0(a2) + 800016bc: 00500793 li a5,5 + 800016c0: 02f12023 sw a5,32(sp) + 800016c4: 02013783 ld a5,32(sp) + 800016c8: 00010513 mv a0,sp + 800016cc: 00f13023 sd a5,0(sp) + 800016d0: 02813783 ld a5,40(sp) + 800016d4: 00f13423 sd a5,8(sp) + 800016d8: 03013783 ld a5,48(sp) + 800016dc: 00f13823 sd a5,16(sp) + 800016e0: 03813783 ld a5,56(sp) + 800016e4: 00f13c23 sd a5,24(sp) + 800016e8: 000700e7 jalr a4 + 800016ec: 04050863 beqz a0,8000173c <__am_irq_handle+0xdc> + 800016f0: 04813083 ld ra,72(sp) + 800016f4: 05010113 addi sp,sp,80 + 800016f8: 00008067 ret + 800016fc: 00400793 li a5,4 + 80001700: 02f12023 sw a5,32(sp) + 80001704: fc1ff06f j 800016c4 <__am_irq_handle+0x64> + 80001708: 08853683 ld a3,136(a0) + 8000170c: fff00793 li a5,-1 + 80001710: 00f68a63 beq a3,a5,80001724 <__am_irq_handle+0xc4> + 80001714: 00200793 li a5,2 + 80001718: 02f12023 sw a5,32(sp) + 8000171c: fa9ff06f j 800016c4 <__am_irq_handle+0x64> + 80001720: 00008067 ret + 80001724: 11053783 ld a5,272(a0) + 80001728: 00100693 li a3,1 + 8000172c: 02d12023 sw a3,32(sp) + 80001730: 00478793 addi a5,a5,4 + 80001734: 10f53823 sd a5,272(a0) + 80001738: f8dff06f j 800016c4 <__am_irq_handle+0x64> + 8000173c: 02700613 li a2,39 + 80001740: 00003597 auipc a1,0x3 + 80001744: dc058593 addi a1,a1,-576 # 80004500 + 80001748: 00002517 auipc a0,0x2 + 8000174c: 48850513 addi a0,a0,1160 # 80003bd0 + 80001750: 300010ef jal ra,80002a50 + 80001754: 00100513 li a0,1 + 80001758: 949ff0ef jal ra,800010a0 + +000000008000175c : + 8000175c: 00050793 mv a5,a0 + 80001760: 00000717 auipc a4,0x0 + 80001764: 04c70713 addi a4,a4,76 # 800017ac <__am_asm_trap> + 80001768: 30571073 csrw mtvec,a4 + 8000176c: 00100513 li a0,1 + 80001770: 00095717 auipc a4,0x95 + 80001774: 44f73c23 sd a5,1112(a4) # 80096bc8 + 80001778: 00008067 ret + +000000008000177c : + 8000177c: fff00893 li a7,-1 + 80001780: 00000073 ecall + 80001784: 00008067 ret + +0000000080001788 : + 80001788: 00050a63 beqz a0,8000179c + 8000178c: 300467f3 csrrsi a5,mstatus,8 + 80001790: 08000793 li a5,128 + 80001794: 3047a7f3 csrrs a5,mie,a5 + 80001798: 00008067 ret + 8000179c: 300477f3 csrrci a5,mstatus,8 + 800017a0: 08000793 li a5,128 + 800017a4: 3047b7f3 csrrc a5,mie,a5 + 800017a8: 00008067 ret + +00000000800017ac <__am_asm_trap>: + 800017ac: ee810113 addi sp,sp,-280 + 800017b0: 00113423 sd ra,8(sp) + 800017b4: 00313c23 sd gp,24(sp) + 800017b8: 02413023 sd tp,32(sp) + 800017bc: 02513423 sd t0,40(sp) + 800017c0: 02613823 sd t1,48(sp) + 800017c4: 02713c23 sd t2,56(sp) + 800017c8: 04813023 sd s0,64(sp) + 800017cc: 04913423 sd s1,72(sp) + 800017d0: 04a13823 sd a0,80(sp) + 800017d4: 04b13c23 sd a1,88(sp) + 800017d8: 06c13023 sd a2,96(sp) + 800017dc: 06d13423 sd a3,104(sp) + 800017e0: 06e13823 sd a4,112(sp) + 800017e4: 06f13c23 sd a5,120(sp) + 800017e8: 09013023 sd a6,128(sp) + 800017ec: 09113423 sd a7,136(sp) + 800017f0: 09213823 sd s2,144(sp) + 800017f4: 09313c23 sd s3,152(sp) + 800017f8: 0b413023 sd s4,160(sp) + 800017fc: 0b513423 sd s5,168(sp) + 80001800: 0b613823 sd s6,176(sp) + 80001804: 0b713c23 sd s7,184(sp) + 80001808: 0d813023 sd s8,192(sp) + 8000180c: 0d913423 sd s9,200(sp) + 80001810: 0da13823 sd s10,208(sp) + 80001814: 0db13c23 sd s11,216(sp) + 80001818: 0fc13023 sd t3,224(sp) + 8000181c: 0fd13423 sd t4,232(sp) + 80001820: 0fe13823 sd t5,240(sp) + 80001824: 0ff13c23 sd t6,248(sp) + 80001828: 00010293 mv t0,sp + 8000182c: 11828293 addi t0,t0,280 + 80001830: 00513823 sd t0,16(sp) + 80001834: 342022f3 csrr t0,mcause + 80001838: 30002373 csrr t1,mstatus + 8000183c: 341023f3 csrr t2,mepc + 80001840: 10513023 sd t0,256(sp) + 80001844: 10613423 sd t1,264(sp) + 80001848: 10713823 sd t2,272(sp) + 8000184c: 00010513 mv a0,sp + 80001850: e11ff0ef jal ra,80001660 <__am_irq_handle> + 80001854: 10813303 ld t1,264(sp) + 80001858: 11013383 ld t2,272(sp) + 8000185c: 30031073 csrw mstatus,t1 + 80001860: 34139073 csrw mepc,t2 + 80001864: 00813083 ld ra,8(sp) + 80001868: 01813183 ld gp,24(sp) + 8000186c: 02013203 ld tp,32(sp) + 80001870: 02813283 ld t0,40(sp) + 80001874: 03013303 ld t1,48(sp) + 80001878: 03813383 ld t2,56(sp) + 8000187c: 04013403 ld s0,64(sp) + 80001880: 04813483 ld s1,72(sp) + 80001884: 05013503 ld a0,80(sp) + 80001888: 05813583 ld a1,88(sp) + 8000188c: 06013603 ld a2,96(sp) + 80001890: 06813683 ld a3,104(sp) + 80001894: 07013703 ld a4,112(sp) + 80001898: 07813783 ld a5,120(sp) + 8000189c: 08013803 ld a6,128(sp) + 800018a0: 08813883 ld a7,136(sp) + 800018a4: 09013903 ld s2,144(sp) + 800018a8: 09813983 ld s3,152(sp) + 800018ac: 0a013a03 ld s4,160(sp) + 800018b0: 0a813a83 ld s5,168(sp) + 800018b4: 0b013b03 ld s6,176(sp) + 800018b8: 0b813b83 ld s7,184(sp) + 800018bc: 0c013c03 ld s8,192(sp) + 800018c0: 0c813c83 ld s9,200(sp) + 800018c4: 0d013d03 ld s10,208(sp) + 800018c8: 0d813d83 ld s11,216(sp) + 800018cc: 0e013e03 ld t3,224(sp) + 800018d0: 0e813e83 ld t4,232(sp) + 800018d4: 0f013f03 ld t5,240(sp) + 800018d8: 0f813f83 ld t6,248(sp) + 800018dc: 11810113 addi sp,sp,280 + 800018e0: 30200073 mret + +00000000800018e4 : + 800018e4: 00000513 li a0,0 + 800018e8: 00008067 ret + +00000000800018ec : + 800018ec: 00008067 ret + +00000000800018f0 : + 800018f0: 00008067 ret + +00000000800018f4 : + 800018f4: ff010113 addi sp,sp,-16 + 800018f8: 00000513 li a0,0 + 800018fc: 01010113 addi sp,sp,16 + 80001900: 00008067 ret + +0000000080001904 : + 80001904: 00000513 li a0,0 + 80001908: 00008067 ret + +000000008000190c : + 8000190c: 00000513 li a0,0 + 80001910: 00008067 ret + +0000000080001914 : + 80001914: 00054783 lbu a5,0(a0) + 80001918: 00158593 addi a1,a1,1 + 8000191c: 00150513 addi a0,a0,1 + 80001920: fff5c703 lbu a4,-1(a1) + 80001924: 00078863 beqz a5,80001934 + 80001928: fee786e3 beq a5,a4,80001914 + 8000192c: 40e7853b subw a0,a5,a4 + 80001930: 00008067 ret + 80001934: 40e0053b negw a0,a4 + 80001938: 00008067 ret + +000000008000193c : + 8000193c: 00011617 auipc a2,0x11 + 80001940: 04460613 addi a2,a2,68 # 80012980 + 80001944: 00063683 ld a3,0(a2) + 80001948: 00869713 slli a4,a3,0x8 + 8000194c: 40d70733 sub a4,a4,a3 + 80001950: 00371713 slli a4,a4,0x3 + 80001954: 00d70733 add a4,a4,a3 + 80001958: 00771713 slli a4,a4,0x7 + 8000195c: 00d70733 add a4,a4,a3 + 80001960: 00371713 slli a4,a4,0x3 + 80001964: 40d70733 sub a4,a4,a3 + 80001968: 00571793 slli a5,a4,0x5 + 8000196c: 00f707b3 add a5,a4,a5 + 80001970: 00279793 slli a5,a5,0x2 + 80001974: 40d787b3 sub a5,a5,a3 + 80001978: 00279793 slli a5,a5,0x2 + 8000197c: 00003737 lui a4,0x3 + 80001980: 00d787b3 add a5,a5,a3 + 80001984: 03970713 addi a4,a4,57 # 3039 <_entry_offset+0x3039> + 80001988: 00e787b3 add a5,a5,a4 + 8000198c: 02179513 slli a0,a5,0x21 + 80001990: 00f63023 sd a5,0(a2) + 80001994: 03155513 srli a0,a0,0x31 + 80001998: 00008067 ret + +000000008000199c : + 8000199c: 00011797 auipc a5,0x11 + 800019a0: bd478793 addi a5,a5,-1068 # 80012570 + 800019a4: 0007b503 ld a0,0(a5) + 800019a8: 0087b583 ld a1,8(a5) + 800019ac: ff010113 addi sp,sp,-16 + 800019b0: 00000693 li a3,0 + 800019b4: 00000613 li a2,0 + 800019b8: 40a585b3 sub a1,a1,a0 + 800019bc: 00113423 sd ra,8(sp) + 800019c0: 378010ef jal ra,80002d38 + 800019c4: 00813083 ld ra,8(sp) + 800019c8: 00095797 auipc a5,0x95 + 800019cc: 20a7b423 sd a0,520(a5) # 80096bd0 + 800019d0: 01010113 addi sp,sp,16 + 800019d4: 00008067 ret + +00000000800019d8 <_out_null>: + 800019d8: 00008067 ret + +00000000800019dc <_ntoa_format>: + 800019dc: fa010113 addi sp,sp,-96 + 800019e0: 07012303 lw t1,112(sp) + 800019e4: 03313c23 sd s3,56(sp) + 800019e8: 03413823 sd s4,48(sp) + 800019ec: 03513423 sd s5,40(sp) + 800019f0: 03613023 sd s6,32(sp) + 800019f4: 01713c23 sd s7,24(sp) + 800019f8: 01813823 sd s8,16(sp) + 800019fc: 01913423 sd s9,8(sp) + 80001a00: 00237e13 andi t3,t1,2 + 80001a04: 01037e93 andi t4,t1,16 + 80001a08: 04113c23 sd ra,88(sp) + 80001a0c: 04813823 sd s0,80(sp) + 80001a10: 04913423 sd s1,72(sp) + 80001a14: 05213023 sd s2,64(sp) + 80001a18: 06012f03 lw t5,96(sp) + 80001a1c: 06812c03 lw s8,104(sp) + 80001a20: 00050a13 mv s4,a0 + 80001a24: 00058a93 mv s5,a1 + 80001a28: 00060b93 mv s7,a2 + 80001a2c: 00068b13 mv s6,a3 + 80001a30: 00070993 mv s3,a4 + 80001a34: 000e0c9b sext.w s9,t3 + 80001a38: 000e8e9b sext.w t4,t4 + 80001a3c: 060e1c63 bnez t3,80001ab4 <_ntoa_format+0xd8> + 80001a40: 020f1693 slli a3,t5,0x20 + 80001a44: 00137513 andi a0,t1,1 + 80001a48: 0206d693 srli a3,a3,0x20 + 80001a4c: 180c1e63 bnez s8,80001be8 <_ntoa_format+0x20c> + 80001a50: 02d7f663 bgeu a5,a3,80001a7c <_ntoa_format+0xa0> + 80001a54: 02000713 li a4,32 + 80001a58: 36e78e63 beq a5,a4,80001dd4 <_ntoa_format+0x3f8> + 80001a5c: 03000613 li a2,48 + 80001a60: 02000593 li a1,32 + 80001a64: 0080006f j 80001a6c <_ntoa_format+0x90> + 80001a68: 00b78a63 beq a5,a1,80001a7c <_ntoa_format+0xa0> + 80001a6c: 00178793 addi a5,a5,1 + 80001a70: 00f98733 add a4,s3,a5 + 80001a74: fec70fa3 sb a2,-1(a4) + 80001a78: fed7e8e3 bltu a5,a3,80001a68 <_ntoa_format+0x8c> + 80001a7c: 02050c63 beqz a0,80001ab4 <_ntoa_format+0xd8> + 80001a80: 020c1913 slli s2,s8,0x20 + 80001a84: 02095913 srli s2,s2,0x20 + 80001a88: 0327f663 bgeu a5,s2,80001ab4 <_ntoa_format+0xd8> + 80001a8c: 02000713 li a4,32 + 80001a90: 36e78863 beq a5,a4,80001e00 <_ntoa_format+0x424> + 80001a94: 03000693 li a3,48 + 80001a98: 02000613 li a2,32 + 80001a9c: 0080006f j 80001aa4 <_ntoa_format+0xc8> + 80001aa0: 16c78463 beq a5,a2,80001c08 <_ntoa_format+0x22c> + 80001aa4: 00178793 addi a5,a5,1 + 80001aa8: 00f98733 add a4,s3,a5 + 80001aac: fed70fa3 sb a3,-1(a4) + 80001ab0: ff2798e3 bne a5,s2,80001aa0 <_ntoa_format+0xc4> + 80001ab4: 1a0e8663 beqz t4,80001c60 <_ntoa_format+0x284> + 80001ab8: 40037713 andi a4,t1,1024 + 80001abc: 20071463 bnez a4,80001cc4 <_ntoa_format+0x2e8> + 80001ac0: 1e079663 bnez a5,80001cac <_ntoa_format+0x2d0> + 80001ac4: 01000793 li a5,16 + 80001ac8: 2af88863 beq a7,a5,80001d78 <_ntoa_format+0x39c> + 80001acc: 00200793 li a5,2 + 80001ad0: 2ef88a63 beq a7,a5,80001dc4 <_ntoa_format+0x3e8> + 80001ad4: 03000793 li a5,48 + 80001ad8: 00f98023 sb a5,0(s3) + 80001adc: 00100793 li a5,1 + 80001ae0: 1a080463 beqz a6,80001c88 <_ntoa_format+0x2ac> + 80001ae4: 00f98733 add a4,s3,a5 + 80001ae8: 00178413 addi s0,a5,1 + 80001aec: 02d00793 li a5,45 + 80001af0: 00f70023 sb a5,0(a4) + 80001af4: 00337313 andi t1,t1,3 + 80001af8: 20031263 bnez t1,80001cfc <_ntoa_format+0x320> + 80001afc: 020c1913 slli s2,s8,0x20 + 80001b00: 02095913 srli s2,s2,0x20 + 80001b04: 1f247c63 bgeu s0,s2,80001cfc <_ntoa_format+0x320> + 80001b08: 40890933 sub s2,s2,s0 + 80001b0c: 01790933 add s2,s2,s7 + 80001b10: 000b8493 mv s1,s7 + 80001b14: 00048613 mv a2,s1 + 80001b18: 000b0693 mv a3,s6 + 80001b1c: 00148493 addi s1,s1,1 + 80001b20: 000a8593 mv a1,s5 + 80001b24: 02000513 li a0,32 + 80001b28: 000a00e7 jalr s4 + 80001b2c: ff2494e3 bne s1,s2,80001b14 <_ntoa_format+0x138> + 80001b30: 02040663 beqz s0,80001b5c <_ntoa_format+0x180> + 80001b34: 01240933 add s2,s0,s2 + 80001b38: 012984b3 add s1,s3,s2 + 80001b3c: 00898433 add s0,s3,s0 + 80001b40: fff44503 lbu a0,-1(s0) + 80001b44: 40848633 sub a2,s1,s0 + 80001b48: 000b0693 mv a3,s6 + 80001b4c: fff40413 addi s0,s0,-1 + 80001b50: 000a8593 mv a1,s5 + 80001b54: 000a00e7 jalr s4 + 80001b58: fe8994e3 bne s3,s0,80001b40 <_ntoa_format+0x164> + 80001b5c: 040c8a63 beqz s9,80001bb0 <_ntoa_format+0x1d4> + 80001b60: 020c1c13 slli s8,s8,0x20 + 80001b64: 41790433 sub s0,s2,s7 + 80001b68: 020c5c13 srli s8,s8,0x20 + 80001b6c: 05847263 bgeu s0,s8,80001bb0 <_ntoa_format+0x1d4> + 80001b70: 01740633 add a2,s0,s7 + 80001b74: 000b0693 mv a3,s6 + 80001b78: 00140413 addi s0,s0,1 + 80001b7c: 000a8593 mv a1,s5 + 80001b80: 02000513 li a0,32 + 80001b84: 000a00e7 jalr s4 + 80001b88: ff8464e3 bltu s0,s8,80001b70 <_ntoa_format+0x194> + 80001b8c: 41790733 sub a4,s2,s7 + 80001b90: 00170713 addi a4,a4,1 + 80001b94: 00000793 li a5,0 + 80001b98: 00ec6863 bltu s8,a4,80001ba8 <_ntoa_format+0x1cc> + 80001b9c: fffb8793 addi a5,s7,-1 + 80001ba0: 01878c33 add s8,a5,s8 + 80001ba4: 412c07b3 sub a5,s8,s2 + 80001ba8: 00190913 addi s2,s2,1 + 80001bac: 00f90933 add s2,s2,a5 + 80001bb0: 05813083 ld ra,88(sp) + 80001bb4: 05013403 ld s0,80(sp) + 80001bb8: 04813483 ld s1,72(sp) + 80001bbc: 03813983 ld s3,56(sp) + 80001bc0: 03013a03 ld s4,48(sp) + 80001bc4: 02813a83 ld s5,40(sp) + 80001bc8: 02013b03 ld s6,32(sp) + 80001bcc: 01813b83 ld s7,24(sp) + 80001bd0: 01013c03 ld s8,16(sp) + 80001bd4: 00813c83 ld s9,8(sp) + 80001bd8: 00090513 mv a0,s2 + 80001bdc: 04013903 ld s2,64(sp) + 80001be0: 06010113 addi sp,sp,96 + 80001be4: 00008067 ret + 80001be8: 12050863 beqz a0,80001d18 <_ntoa_format+0x33c> + 80001bec: 00081663 bnez a6,80001bf8 <_ntoa_format+0x21c> + 80001bf0: 00c37713 andi a4,t1,12 + 80001bf4: 00070463 beqz a4,80001bfc <_ntoa_format+0x220> + 80001bf8: fffc0c1b addiw s8,s8,-1 + 80001bfc: e8d7f2e3 bgeu a5,a3,80001a80 <_ntoa_format+0xa4> + 80001c00: 02000713 li a4,32 + 80001c04: e4e79ce3 bne a5,a4,80001a5c <_ntoa_format+0x80> + 80001c08: 0e0e8063 beqz t4,80001ce8 <_ntoa_format+0x30c> + 80001c0c: 40037793 andi a5,t1,1024 + 80001c10: 04079c63 bnez a5,80001c68 <_ntoa_format+0x28c> + 80001c14: 02000793 li a5,32 + 80001c18: 0aff1063 bne t5,a5,80001cb8 <_ntoa_format+0x2dc> + 80001c1c: 02000793 li a5,32 + 80001c20: 01f00713 li a4,31 + 80001c24: 01000693 li a3,16 + 80001c28: 1ad88c63 beq a7,a3,80001de0 <_ntoa_format+0x404> + 80001c2c: 00200693 li a3,2 + 80001c30: 00070793 mv a5,a4 + 80001c34: 00d89e63 bne a7,a3,80001c50 <_ntoa_format+0x274> + 80001c38: 00e986b3 add a3,s3,a4 + 80001c3c: 00170793 addi a5,a4,1 + 80001c40: 06200713 li a4,98 + 80001c44: 00e68023 sb a4,0(a3) + 80001c48: 02000713 li a4,32 + 80001c4c: 00e78e63 beq a5,a4,80001c68 <_ntoa_format+0x28c> + 80001c50: 00f98733 add a4,s3,a5 + 80001c54: 03000693 li a3,48 + 80001c58: 00d70023 sb a3,0(a4) + 80001c5c: 00178793 addi a5,a5,1 + 80001c60: 02000713 li a4,32 + 80001c64: e6e79ee3 bne a5,a4,80001ae0 <_ntoa_format+0x104> + 80001c68: 00337313 andi t1,t1,3 + 80001c6c: 08031263 bnez t1,80001cf0 <_ntoa_format+0x314> + 80001c70: 02000413 li s0,32 + 80001c74: 020c1913 slli s2,s8,0x20 + 80001c78: 02095913 srli s2,s2,0x20 + 80001c7c: e92466e3 bltu s0,s2,80001b08 <_ntoa_format+0x12c> + 80001c80: 000b8913 mv s2,s7 + 80001c84: eadff06f j 80001b30 <_ntoa_format+0x154> + 80001c88: 00437713 andi a4,t1,4 + 80001c8c: 06071c63 bnez a4,80001d04 <_ntoa_format+0x328> + 80001c90: 00837713 andi a4,t1,8 + 80001c94: 0c071863 bnez a4,80001d64 <_ntoa_format+0x388> + 80001c98: 00337313 andi t1,t1,3 + 80001c9c: 00078413 mv s0,a5 + 80001ca0: fc030ae3 beqz t1,80001c74 <_ntoa_format+0x298> + 80001ca4: 000b8913 mv s2,s7 + 80001ca8: e89ff06f j 80001b30 <_ntoa_format+0x154> + 80001cac: 020f1f13 slli t5,t5,0x20 + 80001cb0: 020f5f13 srli t5,t5,0x20 + 80001cb4: 0aff0263 beq t5,a5,80001d58 <_ntoa_format+0x37c> + 80001cb8: 020c1913 slli s2,s8,0x20 + 80001cbc: 02095913 srli s2,s2,0x20 + 80001cc0: 08f90c63 beq s2,a5,80001d58 <_ntoa_format+0x37c> + 80001cc4: 01000713 li a4,16 + 80001cc8: 06e88663 beq a7,a4,80001d34 <_ntoa_format+0x358> + 80001ccc: 00200713 li a4,2 + 80001cd0: f6e89ce3 bne a7,a4,80001c48 <_ntoa_format+0x26c> + 80001cd4: 02000713 li a4,32 + 80001cd8: f8e788e3 beq a5,a4,80001c68 <_ntoa_format+0x28c> + 80001cdc: 00f986b3 add a3,s3,a5 + 80001ce0: 00178793 addi a5,a5,1 + 80001ce4: f5dff06f j 80001c40 <_ntoa_format+0x264> + 80001ce8: 00337313 andi t1,t1,3 + 80001cec: 0c030063 beqz t1,80001dac <_ntoa_format+0x3d0> + 80001cf0: 000b8913 mv s2,s7 + 80001cf4: 02000413 li s0,32 + 80001cf8: e3dff06f j 80001b34 <_ntoa_format+0x158> + 80001cfc: 000b8913 mv s2,s7 + 80001d00: e35ff06f j 80001b34 <_ntoa_format+0x158> + 80001d04: 00f98733 add a4,s3,a5 + 80001d08: 00178413 addi s0,a5,1 + 80001d0c: 02b00793 li a5,43 + 80001d10: 00f70023 sb a5,0(a4) + 80001d14: de1ff06f j 80001af4 <_ntoa_format+0x118> + 80001d18: d8d7fee3 bgeu a5,a3,80001ab4 <_ntoa_format+0xd8> + 80001d1c: 02000713 li a4,32 + 80001d20: d2e79ee3 bne a5,a4,80001a5c <_ntoa_format+0x80> + 80001d24: 0e0e8c63 beqz t4,80001e1c <_ntoa_format+0x440> + 80001d28: 40037793 andi a5,t1,1024 + 80001d2c: f2079ee3 bnez a5,80001c68 <_ntoa_format+0x28c> + 80001d30: ee5ff06f j 80001c14 <_ntoa_format+0x238> + 80001d34: 02037713 andi a4,t1,32 + 80001d38: 04071c63 bnez a4,80001d90 <_ntoa_format+0x3b4> + 80001d3c: 02000713 li a4,32 + 80001d40: f2e784e3 beq a5,a4,80001c68 <_ntoa_format+0x28c> + 80001d44: 00f98733 add a4,s3,a5 + 80001d48: 00178793 addi a5,a5,1 + 80001d4c: 07800693 li a3,120 + 80001d50: 00d70023 sb a3,0(a4) + 80001d54: ef5ff06f j 80001c48 <_ntoa_format+0x26c> + 80001d58: fff78713 addi a4,a5,-1 + 80001d5c: d60704e3 beqz a4,80001ac4 <_ntoa_format+0xe8> + 80001d60: ec5ff06f j 80001c24 <_ntoa_format+0x248> + 80001d64: 00f98733 add a4,s3,a5 + 80001d68: 00178413 addi s0,a5,1 + 80001d6c: 02000793 li a5,32 + 80001d70: 00f70023 sb a5,0(a4) + 80001d74: d81ff06f j 80001af4 <_ntoa_format+0x118> + 80001d78: 02037793 andi a5,t1,32 + 80001d7c: 02079c63 bnez a5,80001db4 <_ntoa_format+0x3d8> + 80001d80: 07800793 li a5,120 + 80001d84: 00f98023 sb a5,0(s3) + 80001d88: 00100793 li a5,1 + 80001d8c: ec5ff06f j 80001c50 <_ntoa_format+0x274> + 80001d90: 02000713 li a4,32 + 80001d94: ece78ae3 beq a5,a4,80001c68 <_ntoa_format+0x28c> + 80001d98: 00f98733 add a4,s3,a5 + 80001d9c: 05800693 li a3,88 + 80001da0: 00d70023 sb a3,0(a4) + 80001da4: 00178793 addi a5,a5,1 + 80001da8: ea1ff06f j 80001c48 <_ntoa_format+0x26c> + 80001dac: 02000413 li s0,32 + 80001db0: d4dff06f j 80001afc <_ntoa_format+0x120> + 80001db4: 05800793 li a5,88 + 80001db8: 00f98023 sb a5,0(s3) + 80001dbc: 00100793 li a5,1 + 80001dc0: e91ff06f j 80001c50 <_ntoa_format+0x274> + 80001dc4: 06200793 li a5,98 + 80001dc8: 00f98023 sb a5,0(s3) + 80001dcc: 00100793 li a5,1 + 80001dd0: e81ff06f j 80001c50 <_ntoa_format+0x274> + 80001dd4: e2051ae3 bnez a0,80001c08 <_ntoa_format+0x22c> + 80001dd8: 000c8c13 mv s8,s9 + 80001ddc: f49ff06f j 80001d24 <_ntoa_format+0x348> + 80001de0: 02037693 andi a3,t1,32 + 80001de4: ffe78713 addi a4,a5,-2 + 80001de8: 00069863 bnez a3,80001df8 <_ntoa_format+0x41c> + 80001dec: 00e98733 add a4,s3,a4 + 80001df0: fff78793 addi a5,a5,-1 + 80001df4: f59ff06f j 80001d4c <_ntoa_format+0x370> + 80001df8: 00070793 mv a5,a4 + 80001dfc: f9dff06f j 80001d98 <_ntoa_format+0x3bc> + 80001e00: 000e8e63 beqz t4,80001e1c <_ntoa_format+0x440> + 80001e04: 40037713 andi a4,t1,1024 + 80001e08: 00071e63 bnez a4,80001e24 <_ntoa_format+0x448> + 80001e0c: 02ff0e63 beq t5,a5,80001e48 <_ntoa_format+0x46c> + 80001e10: e4fc1ce3 bne s8,a5,80001c68 <_ntoa_format+0x28c> + 80001e14: 01f00713 li a4,31 + 80001e18: e0dff06f j 80001c24 <_ntoa_format+0x248> + 80001e1c: 02000413 li s0,32 + 80001e20: cd5ff06f j 80001af4 <_ntoa_format+0x118> + 80001e24: 01000793 li a5,16 + 80001e28: 02f88c63 beq a7,a5,80001e60 <_ntoa_format+0x484> + 80001e2c: 00200793 li a5,2 + 80001e30: e2f88ce3 beq a7,a5,80001c68 <_ntoa_format+0x28c> + 80001e34: 00337313 andi t1,t1,3 + 80001e38: ea031ce3 bnez t1,80001cf0 <_ntoa_format+0x314> + 80001e3c: 02000413 li s0,32 + 80001e40: cd2464e3 bltu s0,s2,80001b08 <_ntoa_format+0x12c> + 80001e44: e3dff06f j 80001c80 <_ntoa_format+0x2a4> + 80001e48: 01000713 li a4,16 + 80001e4c: f8e88ae3 beq a7,a4,80001de0 <_ntoa_format+0x404> + 80001e50: 00200793 li a5,2 + 80001e54: 00f88c63 beq a7,a5,80001e6c <_ntoa_format+0x490> + 80001e58: 01f00793 li a5,31 + 80001e5c: df5ff06f j 80001c50 <_ntoa_format+0x274> + 80001e60: 02037793 andi a5,t1,32 + 80001e64: fc0788e3 beqz a5,80001e34 <_ntoa_format+0x458> + 80001e68: e01ff06f j 80001c68 <_ntoa_format+0x28c> + 80001e6c: 01f00713 li a4,31 + 80001e70: dc9ff06f j 80001c38 <_ntoa_format+0x25c> + +0000000080001e74 <_ntoa_long>: + 80001e74: f4010113 addi sp,sp,-192 + 80001e78: 09413823 sd s4,144(sp) + 80001e7c: 09513423 sd s5,136(sp) + 80001e80: 09613023 sd s6,128(sp) + 80001e84: 07713c23 sd s7,120(sp) + 80001e88: 07813823 sd s8,112(sp) + 80001e8c: 07913423 sd s9,104(sp) + 80001e90: 05b13c23 sd s11,88(sp) + 80001e94: 0a113c23 sd ra,184(sp) + 80001e98: 0a813823 sd s0,176(sp) + 80001e9c: 0a913423 sd s1,168(sp) + 80001ea0: 0b213023 sd s2,160(sp) + 80001ea4: 09313c23 sd s3,152(sp) + 80001ea8: 07a13023 sd s10,96(sp) + 80001eac: 02a13023 sd a0,32(sp) + 80001eb0: 03113423 sd a7,40(sp) + 80001eb4: 0c812a03 lw s4,200(sp) + 80001eb8: 00070d93 mv s11,a4 + 80001ebc: 00058b13 mv s6,a1 + 80001ec0: 00060b93 mv s7,a2 + 80001ec4: 00068c13 mv s8,a3 + 80001ec8: 00078c93 mv s9,a5 + 80001ecc: 00080a93 mv s5,a6 + 80001ed0: 00071863 bnez a4,80001ee0 <_ntoa_long+0x6c> + 80001ed4: 400a7793 andi a5,s4,1024 + 80001ed8: fefa7a13 andi s4,s4,-17 + 80001edc: 0e079663 bnez a5,80001fc8 <_ntoa_long+0x154> + 80001ee0: 020a7793 andi a5,s4,32 + 80001ee4: 06100413 li s0,97 + 80001ee8: 0c079c63 bnez a5,80001fc0 <_ntoa_long+0x14c> + 80001eec: 00000d13 li s10,0 + 80001ef0: 03010493 addi s1,sp,48 + 80001ef4: 00900913 li s2,9 + 80001ef8: ff64041b addiw s0,s0,-10 + 80001efc: 02000993 li s3,32 + 80001f00: 00c0006f j 80001f0c <_ntoa_long+0x98> + 80001f04: 053d0463 beq s10,s3,80001f4c <_ntoa_long+0xd8> + 80001f08: 00050d93 mv s11,a0 + 80001f0c: 000a8593 mv a1,s5 + 80001f10: 000d8513 mv a0,s11 + 80001f14: a88ff0ef jal ra,8000119c <__umoddi3> + 80001f18: 0ff57313 andi t1,a0,255 + 80001f1c: 0303071b addiw a4,t1,48 + 80001f20: 0064033b addw t1,s0,t1 + 80001f24: 0ff37313 andi t1,t1,255 + 80001f28: 00a96463 bltu s2,a0,80001f30 <_ntoa_long+0xbc> + 80001f2c: 0ff77313 andi t1,a4,255 + 80001f30: 001d0d13 addi s10,s10,1 + 80001f34: 01a48733 add a4,s1,s10 + 80001f38: 000d8513 mv a0,s11 + 80001f3c: 000a8593 mv a1,s5 + 80001f40: fe670fa3 sb t1,-1(a4) + 80001f44: a10ff0ef jal ra,80001154 <__udivdi3> + 80001f48: fb5dfee3 bgeu s11,s5,80001f04 <_ntoa_long+0x90> + 80001f4c: 0c012703 lw a4,192(sp) + 80001f50: 02813783 ld a5,40(sp) + 80001f54: 02013503 ld a0,32(sp) + 80001f58: 01413823 sd s4,16(sp) + 80001f5c: 00e13423 sd a4,8(sp) + 80001f60: 00f13023 sd a5,0(sp) + 80001f64: 000a889b sext.w a7,s5 + 80001f68: 000c8813 mv a6,s9 + 80001f6c: 000d0793 mv a5,s10 + 80001f70: 00048713 mv a4,s1 + 80001f74: 000c0693 mv a3,s8 + 80001f78: 000b8613 mv a2,s7 + 80001f7c: 000b0593 mv a1,s6 + 80001f80: a5dff0ef jal ra,800019dc <_ntoa_format> + 80001f84: 0b813083 ld ra,184(sp) + 80001f88: 0b013403 ld s0,176(sp) + 80001f8c: 0a813483 ld s1,168(sp) + 80001f90: 0a013903 ld s2,160(sp) + 80001f94: 09813983 ld s3,152(sp) + 80001f98: 09013a03 ld s4,144(sp) + 80001f9c: 08813a83 ld s5,136(sp) + 80001fa0: 08013b03 ld s6,128(sp) + 80001fa4: 07813b83 ld s7,120(sp) + 80001fa8: 07013c03 ld s8,112(sp) + 80001fac: 06813c83 ld s9,104(sp) + 80001fb0: 06013d03 ld s10,96(sp) + 80001fb4: 05813d83 ld s11,88(sp) + 80001fb8: 0c010113 addi sp,sp,192 + 80001fbc: 00008067 ret + 80001fc0: 04100413 li s0,65 + 80001fc4: f29ff06f j 80001eec <_ntoa_long+0x78> + 80001fc8: 00000d13 li s10,0 + 80001fcc: 03010493 addi s1,sp,48 + 80001fd0: f7dff06f j 80001f4c <_ntoa_long+0xd8> + +0000000080001fd4 <_ntoa_long_long>: + 80001fd4: f4010113 addi sp,sp,-192 + 80001fd8: 09413823 sd s4,144(sp) + 80001fdc: 09513423 sd s5,136(sp) + 80001fe0: 09613023 sd s6,128(sp) + 80001fe4: 07713c23 sd s7,120(sp) + 80001fe8: 07813823 sd s8,112(sp) + 80001fec: 07913423 sd s9,104(sp) + 80001ff0: 05b13c23 sd s11,88(sp) + 80001ff4: 0a113c23 sd ra,184(sp) + 80001ff8: 0a813823 sd s0,176(sp) + 80001ffc: 0a913423 sd s1,168(sp) + 80002000: 0b213023 sd s2,160(sp) + 80002004: 09313c23 sd s3,152(sp) + 80002008: 07a13023 sd s10,96(sp) + 8000200c: 02a13023 sd a0,32(sp) + 80002010: 03113423 sd a7,40(sp) + 80002014: 0c812a03 lw s4,200(sp) + 80002018: 00070d93 mv s11,a4 + 8000201c: 00058b13 mv s6,a1 + 80002020: 00060b93 mv s7,a2 + 80002024: 00068c13 mv s8,a3 + 80002028: 00078c93 mv s9,a5 + 8000202c: 00080a93 mv s5,a6 + 80002030: 00071863 bnez a4,80002040 <_ntoa_long_long+0x6c> + 80002034: 400a7793 andi a5,s4,1024 + 80002038: fefa7a13 andi s4,s4,-17 + 8000203c: 0e079663 bnez a5,80002128 <_ntoa_long_long+0x154> + 80002040: 020a7793 andi a5,s4,32 + 80002044: 06100413 li s0,97 + 80002048: 0c079c63 bnez a5,80002120 <_ntoa_long_long+0x14c> + 8000204c: 00000d13 li s10,0 + 80002050: 03010493 addi s1,sp,48 + 80002054: 00900913 li s2,9 + 80002058: ff64041b addiw s0,s0,-10 + 8000205c: 02000993 li s3,32 + 80002060: 00c0006f j 8000206c <_ntoa_long_long+0x98> + 80002064: 053d0463 beq s10,s3,800020ac <_ntoa_long_long+0xd8> + 80002068: 00050d93 mv s11,a0 + 8000206c: 000a8593 mv a1,s5 + 80002070: 000d8513 mv a0,s11 + 80002074: 928ff0ef jal ra,8000119c <__umoddi3> + 80002078: 0ff57313 andi t1,a0,255 + 8000207c: 0303071b addiw a4,t1,48 + 80002080: 0064033b addw t1,s0,t1 + 80002084: 0ff37313 andi t1,t1,255 + 80002088: 00a96463 bltu s2,a0,80002090 <_ntoa_long_long+0xbc> + 8000208c: 0ff77313 andi t1,a4,255 + 80002090: 001d0d13 addi s10,s10,1 + 80002094: 01a48733 add a4,s1,s10 + 80002098: 000d8513 mv a0,s11 + 8000209c: 000a8593 mv a1,s5 + 800020a0: fe670fa3 sb t1,-1(a4) + 800020a4: 8b0ff0ef jal ra,80001154 <__udivdi3> + 800020a8: fb5dfee3 bgeu s11,s5,80002064 <_ntoa_long_long+0x90> + 800020ac: 0c012703 lw a4,192(sp) + 800020b0: 02813783 ld a5,40(sp) + 800020b4: 02013503 ld a0,32(sp) + 800020b8: 01413823 sd s4,16(sp) + 800020bc: 00e13423 sd a4,8(sp) + 800020c0: 00f13023 sd a5,0(sp) + 800020c4: 000a889b sext.w a7,s5 + 800020c8: 000c8813 mv a6,s9 + 800020cc: 000d0793 mv a5,s10 + 800020d0: 00048713 mv a4,s1 + 800020d4: 000c0693 mv a3,s8 + 800020d8: 000b8613 mv a2,s7 + 800020dc: 000b0593 mv a1,s6 + 800020e0: 8fdff0ef jal ra,800019dc <_ntoa_format> + 800020e4: 0b813083 ld ra,184(sp) + 800020e8: 0b013403 ld s0,176(sp) + 800020ec: 0a813483 ld s1,168(sp) + 800020f0: 0a013903 ld s2,160(sp) + 800020f4: 09813983 ld s3,152(sp) + 800020f8: 09013a03 ld s4,144(sp) + 800020fc: 08813a83 ld s5,136(sp) + 80002100: 08013b03 ld s6,128(sp) + 80002104: 07813b83 ld s7,120(sp) + 80002108: 07013c03 ld s8,112(sp) + 8000210c: 06813c83 ld s9,104(sp) + 80002110: 06013d03 ld s10,96(sp) + 80002114: 05813d83 ld s11,88(sp) + 80002118: 0c010113 addi sp,sp,192 + 8000211c: 00008067 ret + 80002120: 04100413 li s0,65 + 80002124: f29ff06f j 8000204c <_ntoa_long_long+0x78> + 80002128: 00000d13 li s10,0 + 8000212c: 03010493 addi s1,sp,48 + 80002130: f7dff06f j 800020ac <_ntoa_long_long+0xd8> + +0000000080002134 <_vsnprintf>: + 80002134: f6010113 addi sp,sp,-160 + 80002138: 08913423 sd s1,136(sp) + 8000213c: 09213023 sd s2,128(sp) + 80002140: 07313c23 sd s3,120(sp) + 80002144: 05713c23 sd s7,88(sp) + 80002148: 05813823 sd s8,80(sp) + 8000214c: 08113c23 sd ra,152(sp) + 80002150: 08813823 sd s0,144(sp) + 80002154: 07413823 sd s4,112(sp) + 80002158: 07513423 sd s5,104(sp) + 8000215c: 07613023 sd s6,96(sp) + 80002160: 05913423 sd s9,72(sp) + 80002164: 05a13023 sd s10,64(sp) + 80002168: 03b13c23 sd s11,56(sp) + 8000216c: 00058493 mv s1,a1 + 80002170: 00060c13 mv s8,a2 + 80002174: 00068b93 mv s7,a3 + 80002178: 00070993 mv s3,a4 + 8000217c: 00000917 auipc s2,0x0 + 80002180: 85c90913 addi s2,s2,-1956 # 800019d8 <_out_null> + 80002184: 00058463 beqz a1,8000218c <_vsnprintf+0x58> + 80002188: 00050913 mv s2,a0 + 8000218c: 000bc503 lbu a0,0(s7) + 80002190: 00000d13 li s10,0 + 80002194: 66050663 beqz a0,80002800 <_vsnprintf+0x6cc> + 80002198: 000107b7 lui a5,0x10 + 8000219c: fff78793 addi a5,a5,-1 # ffff <_entry_offset+0xffff> + 800021a0: 02500a13 li s4,37 + 800021a4: 00002417 auipc s0,0x2 + 800021a8: 39040413 addi s0,s0,912 # 80004534 + 800021ac: 00f13c23 sd a5,24(sp) + 800021b0: 0200006f j 800021d0 <_vsnprintf+0x9c> + 800021b4: 000d0613 mv a2,s10 + 800021b8: 000c0693 mv a3,s8 + 800021bc: 00048593 mv a1,s1 + 800021c0: 001d0d13 addi s10,s10,1 + 800021c4: 000900e7 jalr s2 + 800021c8: 000bc503 lbu a0,0(s7) + 800021cc: 1c050263 beqz a0,80002390 <_vsnprintf+0x25c> + 800021d0: 001b8b93 addi s7,s7,1 + 800021d4: ff4510e3 bne a0,s4,800021b4 <_vsnprintf+0x80> + 800021d8: 00000593 li a1,0 + 800021dc: 01000813 li a6,16 + 800021e0: 000bc503 lbu a0,0(s7) + 800021e4: 001b8713 addi a4,s7,1 + 800021e8: 00070613 mv a2,a4 + 800021ec: fe05079b addiw a5,a0,-32 + 800021f0: 0ff7f793 andi a5,a5,255 + 800021f4: 00f86c63 bltu a6,a5,8000220c <_vsnprintf+0xd8> + 800021f8: 00279793 slli a5,a5,0x2 + 800021fc: 008787b3 add a5,a5,s0 + 80002200: 0007a783 lw a5,0(a5) + 80002204: 008787b3 add a5,a5,s0 + 80002208: 00078067 jr a5 + 8000220c: fd05079b addiw a5,a0,-48 + 80002210: 0ff7f793 andi a5,a5,255 + 80002214: 00900813 li a6,9 + 80002218: 0ef87c63 bgeu a6,a5,80002310 <_vsnprintf+0x1dc> + 8000221c: 02a00793 li a5,42 + 80002220: 20f50463 beq a0,a5,80002428 <_vsnprintf+0x2f4> + 80002224: 000b8613 mv a2,s7 + 80002228: 00000d93 li s11,0 + 8000222c: 00070b93 mv s7,a4 + 80002230: 02e00793 li a5,46 + 80002234: 00000c93 li s9,0 + 80002238: 12f50463 beq a0,a5,80002360 <_vsnprintf+0x22c> + 8000223c: f985079b addiw a5,a0,-104 + 80002240: 0ff7f793 andi a5,a5,255 + 80002244: 01200713 li a4,18 + 80002248: 08f76463 bltu a4,a5,800022d0 <_vsnprintf+0x19c> + 8000224c: 00002717 auipc a4,0x2 + 80002250: 32c70713 addi a4,a4,812 # 80004578 + 80002254: 00279793 slli a5,a5,0x2 + 80002258: 00e787b3 add a5,a5,a4 + 8000225c: 0007a783 lw a5,0(a5) + 80002260: 00e787b3 add a5,a5,a4 + 80002264: 00078067 jr a5 + 80002268: 0015e593 ori a1,a1,1 + 8000226c: 0005859b sext.w a1,a1 + 80002270: 00070b93 mv s7,a4 + 80002274: f6dff06f j 800021e0 <_vsnprintf+0xac> + 80002278: 0025e593 ori a1,a1,2 + 8000227c: 0005859b sext.w a1,a1 + 80002280: 00070b93 mv s7,a4 + 80002284: f5dff06f j 800021e0 <_vsnprintf+0xac> + 80002288: 0045e593 ori a1,a1,4 + 8000228c: 0005859b sext.w a1,a1 + 80002290: 00070b93 mv s7,a4 + 80002294: f4dff06f j 800021e0 <_vsnprintf+0xac> + 80002298: 0105e593 ori a1,a1,16 + 8000229c: 0005859b sext.w a1,a1 + 800022a0: 00070b93 mv s7,a4 + 800022a4: f3dff06f j 800021e0 <_vsnprintf+0xac> + 800022a8: 0085e593 ori a1,a1,8 + 800022ac: 0005859b sext.w a1,a1 + 800022b0: 00070b93 mv s7,a4 + 800022b4: f2dff06f j 800021e0 <_vsnprintf+0xac> + 800022b8: 00164503 lbu a0,1(a2) + 800022bc: 06800793 li a5,104 + 800022c0: 52f50663 beq a0,a5,800027ec <_vsnprintf+0x6b8> + 800022c4: 0805e593 ori a1,a1,128 + 800022c8: 0005859b sext.w a1,a1 + 800022cc: 001b8b93 addi s7,s7,1 + 800022d0: fdb5079b addiw a5,a0,-37 + 800022d4: 0ff7f793 andi a5,a5,255 + 800022d8: 05300713 li a4,83 + 800022dc: ecf76ce3 bltu a4,a5,800021b4 <_vsnprintf+0x80> + 800022e0: 00002717 auipc a4,0x2 + 800022e4: 2e470713 addi a4,a4,740 # 800045c4 + 800022e8: 00279793 slli a5,a5,0x2 + 800022ec: 00e787b3 add a5,a5,a4 + 800022f0: 0007a783 lw a5,0(a5) + 800022f4: 00e787b3 add a5,a5,a4 + 800022f8: 00078067 jr a5 + 800022fc: 00164503 lbu a0,1(a2) + 80002300: 1005e593 ori a1,a1,256 + 80002304: 0005859b sext.w a1,a1 + 80002308: 001b8b93 addi s7,s7,1 + 8000230c: fc5ff06f j 800022d0 <_vsnprintf+0x19c> + 80002310: 00000d93 li s11,0 + 80002314: 00900813 li a6,9 + 80002318: 0080006f j 80002320 <_vsnprintf+0x1ec> + 8000231c: 00170713 addi a4,a4,1 + 80002320: 002d979b slliw a5,s11,0x2 + 80002324: 01b787bb addw a5,a5,s11 + 80002328: 0017979b slliw a5,a5,0x1 + 8000232c: 00a787bb addw a5,a5,a0 + 80002330: 00074503 lbu a0,0(a4) + 80002334: 000b8893 mv a7,s7 + 80002338: fd078d9b addiw s11,a5,-48 + 8000233c: fd05061b addiw a2,a0,-48 + 80002340: 0ff67613 andi a2,a2,255 + 80002344: 00070b93 mv s7,a4 + 80002348: fcc87ae3 bgeu a6,a2,8000231c <_vsnprintf+0x1e8> + 8000234c: 02e00793 li a5,46 + 80002350: 00070613 mv a2,a4 + 80002354: 00288b93 addi s7,a7,2 + 80002358: 00000c93 li s9,0 + 8000235c: eef510e3 bne a0,a5,8000223c <_vsnprintf+0x108> + 80002360: 00164503 lbu a0,1(a2) + 80002364: 4005e593 ori a1,a1,1024 + 80002368: 00900713 li a4,9 + 8000236c: fd05079b addiw a5,a0,-48 + 80002370: 0ff7f793 andi a5,a5,255 + 80002374: 0005859b sext.w a1,a1 + 80002378: 06f77c63 bgeu a4,a5,800023f0 <_vsnprintf+0x2bc> + 8000237c: 02a00793 li a5,42 + 80002380: 32f50e63 beq a0,a5,800026bc <_vsnprintf+0x588> + 80002384: 000b8613 mv a2,s7 + 80002388: 001b8b93 addi s7,s7,1 + 8000238c: eb1ff06f j 8000223c <_vsnprintf+0x108> + 80002390: 000d041b sext.w s0,s10 + 80002394: 018d6463 bltu s10,s8,8000239c <_vsnprintf+0x268> + 80002398: fffc0d13 addi s10,s8,-1 + 8000239c: 000c0693 mv a3,s8 + 800023a0: 000d0613 mv a2,s10 + 800023a4: 00048593 mv a1,s1 + 800023a8: 00000513 li a0,0 + 800023ac: 000900e7 jalr s2 + 800023b0: 09813083 ld ra,152(sp) + 800023b4: 00040513 mv a0,s0 + 800023b8: 09013403 ld s0,144(sp) + 800023bc: 08813483 ld s1,136(sp) + 800023c0: 08013903 ld s2,128(sp) + 800023c4: 07813983 ld s3,120(sp) + 800023c8: 07013a03 ld s4,112(sp) + 800023cc: 06813a83 ld s5,104(sp) + 800023d0: 06013b03 ld s6,96(sp) + 800023d4: 05813b83 ld s7,88(sp) + 800023d8: 05013c03 ld s8,80(sp) + 800023dc: 04813c83 ld s9,72(sp) + 800023e0: 04013d03 ld s10,64(sp) + 800023e4: 03813d83 ld s11,56(sp) + 800023e8: 0a010113 addi sp,sp,160 + 800023ec: 00008067 ret + 800023f0: 002c979b slliw a5,s9,0x2 + 800023f4: 019788bb addw a7,a5,s9 + 800023f8: 000b8813 mv a6,s7 + 800023fc: 0018989b slliw a7,a7,0x1 + 80002400: 001b8b93 addi s7,s7,1 + 80002404: 00a888bb addw a7,a7,a0 + 80002408: 000bc503 lbu a0,0(s7) + 8000240c: fd088c9b addiw s9,a7,-48 + 80002410: fd05079b addiw a5,a0,-48 + 80002414: 0ff7f793 andi a5,a5,255 + 80002418: fcf77ce3 bgeu a4,a5,800023f0 <_vsnprintf+0x2bc> + 8000241c: 000b8613 mv a2,s7 + 80002420: 00280b93 addi s7,a6,2 + 80002424: e19ff06f j 8000223c <_vsnprintf+0x108> + 80002428: 0009a783 lw a5,0(s3) + 8000242c: 00898993 addi s3,s3,8 + 80002430: 00078d9b sext.w s11,a5 + 80002434: 0007c863 bltz a5,80002444 <_vsnprintf+0x310> + 80002438: 001bc503 lbu a0,1(s7) + 8000243c: 002b8b93 addi s7,s7,2 + 80002440: df1ff06f j 80002230 <_vsnprintf+0xfc> + 80002444: 0025e593 ori a1,a1,2 + 80002448: 001bc503 lbu a0,1(s7) + 8000244c: 0005859b sext.w a1,a1 + 80002450: 40f00dbb negw s11,a5 + 80002454: 002b8b93 addi s7,s7,2 + 80002458: dd9ff06f j 80002230 <_vsnprintf+0xfc> + 8000245c: 07800793 li a5,120 + 80002460: 00898a93 addi s5,s3,8 + 80002464: 56f50063 beq a0,a5,800029c4 <_vsnprintf+0x890> + 80002468: 05800793 li a5,88 + 8000246c: 28f50463 beq a0,a5,800026f4 <_vsnprintf+0x5c0> + 80002470: 06f00793 li a5,111 + 80002474: 4af50c63 beq a0,a5,8000292c <_vsnprintf+0x7f8> + 80002478: 06200793 li a5,98 + 8000247c: 54f50063 beq a0,a5,800029bc <_vsnprintf+0x888> + 80002480: fef5ff13 andi t5,a1,-17 + 80002484: 4005f793 andi a5,a1,1024 + 80002488: 06900713 li a4,105 + 8000248c: 000f0f1b sext.w t5,t5 + 80002490: 0007879b sext.w a5,a5 + 80002494: 5ae51063 bne a0,a4,80002a34 <_vsnprintf+0x900> + 80002498: 48079663 bnez a5,80002924 <_vsnprintf+0x7f0> + 8000249c: 2005f593 andi a1,a1,512 + 800024a0: 0005879b sext.w a5,a1 + 800024a4: 00a00813 li a6,10 + 800024a8: 42079663 bnez a5,800028d4 <_vsnprintf+0x7a0> + 800024ac: 100f7793 andi a5,t5,256 + 800024b0: 000f0613 mv a2,t5 + 800024b4: 4e079063 bnez a5,80002994 <_vsnprintf+0x860> + 800024b8: 040f7713 andi a4,t5,64 + 800024bc: 0009a783 lw a5,0(s3) + 800024c0: 4a071a63 bnez a4,80002974 <_vsnprintf+0x840> + 800024c4: 08067613 andi a2,a2,128 + 800024c8: 52060a63 beqz a2,800029fc <_vsnprintf+0x8c8> + 800024cc: 0107979b slliw a5,a5,0x10 + 800024d0: 4107d79b sraiw a5,a5,0x10 + 800024d4: 40f7d61b sraiw a2,a5,0xf + 800024d8: 00c7c733 xor a4,a5,a2 + 800024dc: 40c7073b subw a4,a4,a2 + 800024e0: 03071713 slli a4,a4,0x30 + 800024e4: 03075713 srli a4,a4,0x30 + 800024e8: 000d0613 mv a2,s10 + 800024ec: 01e13423 sd t5,8(sp) + 800024f0: 01b13023 sd s11,0(sp) + 800024f4: 000c8893 mv a7,s9 + 800024f8: 01f7d79b srliw a5,a5,0x1f + 800024fc: 000c0693 mv a3,s8 + 80002500: 00048593 mv a1,s1 + 80002504: 00090513 mv a0,s2 + 80002508: 96dff0ef jal ra,80001e74 <_ntoa_long> + 8000250c: 00050d13 mv s10,a0 + 80002510: 000a8993 mv s3,s5 + 80002514: cb5ff06f j 800021c8 <_vsnprintf+0x94> + 80002518: 00164503 lbu a0,1(a2) + 8000251c: 06c00793 li a5,108 + 80002520: def510e3 bne a0,a5,80002300 <_vsnprintf+0x1cc> + 80002524: 3005e593 ori a1,a1,768 + 80002528: 00264503 lbu a0,2(a2) + 8000252c: 0005859b sext.w a1,a1 + 80002530: 00360b93 addi s7,a2,3 + 80002534: d9dff06f j 800022d0 <_vsnprintf+0x19c> + 80002538: 00898793 addi a5,s3,8 + 8000253c: 001d0813 addi a6,s10,1 + 80002540: 0025f593 andi a1,a1,2 + 80002544: 02f13023 sd a5,32(sp) + 80002548: 00080b13 mv s6,a6 + 8000254c: 32058263 beqz a1,80002870 <_vsnprintf+0x73c> + 80002550: 0009c503 lbu a0,0(s3) + 80002554: 000c0693 mv a3,s8 + 80002558: 000d0613 mv a2,s10 + 8000255c: 00048593 mv a1,s1 + 80002560: 000900e7 jalr s2 + 80002564: 00100793 li a5,1 + 80002568: 43b7f063 bgeu a5,s11,80002988 <_vsnprintf+0x854> + 8000256c: ffed879b addiw a5,s11,-2 + 80002570: 02079a93 slli s5,a5,0x20 + 80002574: 020ada93 srli s5,s5,0x20 + 80002578: 002d0d13 addi s10,s10,2 + 8000257c: 015d0cb3 add s9,s10,s5 + 80002580: 000b0613 mv a2,s6 + 80002584: 000c0693 mv a3,s8 + 80002588: 001b0b13 addi s6,s6,1 + 8000258c: 00048593 mv a1,s1 + 80002590: 02000513 li a0,32 + 80002594: 000900e7 jalr s2 + 80002598: ff6c94e3 bne s9,s6,80002580 <_vsnprintf+0x44c> + 8000259c: 02013983 ld s3,32(sp) + 800025a0: 015d0d33 add s10,s10,s5 + 800025a4: c25ff06f j 800021c8 <_vsnprintf+0x94> + 800025a8: 000d0613 mv a2,s10 + 800025ac: 000c0693 mv a3,s8 + 800025b0: 00048593 mv a1,s1 + 800025b4: 02500513 li a0,37 + 800025b8: 001d0d13 addi s10,s10,1 + 800025bc: 000900e7 jalr s2 + 800025c0: c09ff06f j 800021c8 <_vsnprintf+0x94> + 800025c4: 0009ba83 ld s5,0(s3) + 800025c8: 00898793 addi a5,s3,8 + 800025cc: 02f13023 sd a5,32(sp) + 800025d0: 000ac503 lbu a0,0(s5) + 800025d4: 100c9663 bnez s9,800026e0 <_vsnprintf+0x5ac> + 800025d8: ffe00793 li a5,-2 + 800025dc: 42050863 beqz a0,80002a0c <_vsnprintf+0x8d8> + 800025e0: 00178693 addi a3,a5,1 + 800025e4: 00da8633 add a2,s5,a3 + 800025e8: 000a8793 mv a5,s5 + 800025ec: 0080006f j 800025f4 <_vsnprintf+0x4c0> + 800025f0: 1ec78863 beq a5,a2,800027e0 <_vsnprintf+0x6ac> + 800025f4: 0017c703 lbu a4,1(a5) + 800025f8: 00178793 addi a5,a5,1 + 800025fc: fe071ae3 bnez a4,800025f0 <_vsnprintf+0x4bc> + 80002600: 415787bb subw a5,a5,s5 + 80002604: 00f13823 sd a5,16(sp) + 80002608: 4005f793 andi a5,a1,1024 + 8000260c: 0007899b sext.w s3,a5 + 80002610: 00078c63 beqz a5,80002628 <_vsnprintf+0x4f4> + 80002614: 01013703 ld a4,16(sp) + 80002618: 000c879b sext.w a5,s9 + 8000261c: 01977463 bgeu a4,s9,80002624 <_vsnprintf+0x4f0> + 80002620: 0007079b sext.w a5,a4 + 80002624: 00f13823 sd a5,16(sp) + 80002628: 0025f593 andi a1,a1,2 + 8000262c: 0005879b sext.w a5,a1 + 80002630: 02f13423 sd a5,40(sp) + 80002634: 1c058a63 beqz a1,80002808 <_vsnprintf+0x6d4> + 80002638: 14050863 beqz a0,80002788 <_vsnprintf+0x654> + 8000263c: 000d0613 mv a2,s10 + 80002640: 00098863 beqz s3,80002650 <_vsnprintf+0x51c> + 80002644: fffc879b addiw a5,s9,-1 + 80002648: 120c8863 beqz s9,80002778 <_vsnprintf+0x644> + 8000264c: 00078c93 mv s9,a5 + 80002650: 000c0693 mv a3,s8 + 80002654: 00048593 mv a1,s1 + 80002658: 00160b13 addi s6,a2,1 + 8000265c: 000900e7 jalr s2 + 80002660: 41ab07b3 sub a5,s6,s10 + 80002664: 00fa87b3 add a5,s5,a5 + 80002668: 0007c503 lbu a0,0(a5) + 8000266c: 10050863 beqz a0,8000277c <_vsnprintf+0x648> + 80002670: 000b0613 mv a2,s6 + 80002674: fcdff06f j 80002640 <_vsnprintf+0x50c> + 80002678: 0009b703 ld a4,0(s3) + 8000267c: 0215e593 ori a1,a1,33 + 80002680: 0005859b sext.w a1,a1 + 80002684: 01000793 li a5,16 + 80002688: 000d0613 mv a2,s10 + 8000268c: 00b13423 sd a1,8(sp) + 80002690: 00f13023 sd a5,0(sp) + 80002694: 000c8893 mv a7,s9 + 80002698: 01000813 li a6,16 + 8000269c: 00000793 li a5,0 + 800026a0: 000c0693 mv a3,s8 + 800026a4: 00048593 mv a1,s1 + 800026a8: 00090513 mv a0,s2 + 800026ac: 929ff0ef jal ra,80001fd4 <_ntoa_long_long> + 800026b0: 00898993 addi s3,s3,8 + 800026b4: 00050d13 mv s10,a0 + 800026b8: b11ff06f j 800021c8 <_vsnprintf+0x94> + 800026bc: 0009a883 lw a7,0(s3) + 800026c0: 00264503 lbu a0,2(a2) + 800026c4: 00360b93 addi s7,a2,3 + 800026c8: fff8c793 not a5,a7 + 800026cc: 43f7d793 srai a5,a5,0x3f + 800026d0: 00f8fcb3 and s9,a7,a5 + 800026d4: 00898993 addi s3,s3,8 + 800026d8: 00260613 addi a2,a2,2 + 800026dc: b61ff06f j 8000223c <_vsnprintf+0x108> + 800026e0: 020c9793 slli a5,s9,0x20 + 800026e4: 0207d793 srli a5,a5,0x20 + 800026e8: 32050263 beqz a0,80002a0c <_vsnprintf+0x8d8> + 800026ec: fff78793 addi a5,a5,-1 + 800026f0: ef1ff06f j 800025e0 <_vsnprintf+0x4ac> + 800026f4: ff35ff13 andi t5,a1,-13 + 800026f8: 000f0f1b sext.w t5,t5 + 800026fc: 4005f793 andi a5,a1,1024 + 80002700: 020f6f13 ori t5,t5,32 + 80002704: 20078863 beqz a5,80002914 <_vsnprintf+0x7e0> + 80002708: 01000813 li a6,16 + 8000270c: ffef7f13 andi t5,t5,-2 + 80002710: 000f0f1b sext.w t5,t5 + 80002714: 200f7793 andi a5,t5,512 + 80002718: 06900713 li a4,105 + 8000271c: 0007879b sext.w a5,a5 + 80002720: d8e504e3 beq a0,a4,800024a8 <_vsnprintf+0x374> + 80002724: 06400713 li a4,100 + 80002728: d8e500e3 beq a0,a4,800024a8 <_vsnprintf+0x374> + 8000272c: 22079663 bnez a5,80002958 <_vsnprintf+0x824> + 80002730: 100f7793 andi a5,t5,256 + 80002734: 000f0713 mv a4,t5 + 80002738: 2a079463 bnez a5,800029e0 <_vsnprintf+0x8ac> + 8000273c: 040f7793 andi a5,t5,64 + 80002740: 24079063 bnez a5,80002980 <_vsnprintf+0x84c> + 80002744: 08077713 andi a4,a4,128 + 80002748: 2c070663 beqz a4,80002a14 <_vsnprintf+0x8e0> + 8000274c: 0009a703 lw a4,0(s3) + 80002750: 01813783 ld a5,24(sp) + 80002754: 00e7f733 and a4,a5,a4 + 80002758: 02071713 slli a4,a4,0x20 + 8000275c: 000d0613 mv a2,s10 + 80002760: 01e13423 sd t5,8(sp) + 80002764: 01b13023 sd s11,0(sp) + 80002768: 000c8893 mv a7,s9 + 8000276c: 00000793 li a5,0 + 80002770: 02075713 srli a4,a4,0x20 + 80002774: d89ff06f j 800024fc <_vsnprintf+0x3c8> + 80002778: 00060b13 mv s6,a2 + 8000277c: 02813783 ld a5,40(sp) + 80002780: 04078a63 beqz a5,800027d4 <_vsnprintf+0x6a0> + 80002784: 000b0d13 mv s10,s6 + 80002788: 01013703 ld a4,16(sp) + 8000278c: 0db77e63 bgeu a4,s11,80002868 <_vsnprintf+0x734> + 80002790: fffd879b addiw a5,s11,-1 + 80002794: 40e7873b subw a4,a5,a4 + 80002798: 02071713 slli a4,a4,0x20 + 8000279c: 02075713 srli a4,a4,0x20 + 800027a0: 001d0813 addi a6,s10,1 + 800027a4: 01070b33 add s6,a4,a6 + 800027a8: 0080006f j 800027b0 <_vsnprintf+0x67c> + 800027ac: 00180813 addi a6,a6,1 + 800027b0: 000d0613 mv a2,s10 + 800027b4: 01013823 sd a6,16(sp) + 800027b8: 000c0693 mv a3,s8 + 800027bc: 00048593 mv a1,s1 + 800027c0: 02000513 li a0,32 + 800027c4: 00080d13 mv s10,a6 + 800027c8: 000900e7 jalr s2 + 800027cc: 01013803 ld a6,16(sp) + 800027d0: fd0b1ee3 bne s6,a6,800027ac <_vsnprintf+0x678> + 800027d4: 02013983 ld s3,32(sp) + 800027d8: 000b0d13 mv s10,s6 + 800027dc: 9edff06f j 800021c8 <_vsnprintf+0x94> + 800027e0: 0006879b sext.w a5,a3 + 800027e4: 00f13823 sd a5,16(sp) + 800027e8: e21ff06f j 80002608 <_vsnprintf+0x4d4> + 800027ec: 0c05e593 ori a1,a1,192 + 800027f0: 00264503 lbu a0,2(a2) + 800027f4: 0005859b sext.w a1,a1 + 800027f8: 00360b93 addi s7,a2,3 + 800027fc: ad5ff06f j 800022d0 <_vsnprintf+0x19c> + 80002800: 00000413 li s0,0 + 80002804: b91ff06f j 80002394 <_vsnprintf+0x260> + 80002808: 01013703 ld a4,16(sp) + 8000280c: 0017079b addiw a5,a4,1 + 80002810: 21b77c63 bgeu a4,s11,80002a28 <_vsnprintf+0x8f4> + 80002814: fffd879b addiw a5,s11,-1 + 80002818: 40e787bb subw a5,a5,a4 + 8000281c: 02079793 slli a5,a5,0x20 + 80002820: 0207d793 srli a5,a5,0x20 + 80002824: 001d0813 addi a6,s10,1 + 80002828: 01078b33 add s6,a5,a6 + 8000282c: 00c0006f j 80002838 <_vsnprintf+0x704> + 80002830: 01013803 ld a6,16(sp) + 80002834: 00180813 addi a6,a6,1 + 80002838: 000d0613 mv a2,s10 + 8000283c: 000c0693 mv a3,s8 + 80002840: 00080d13 mv s10,a6 + 80002844: 01013823 sd a6,16(sp) + 80002848: 00048593 mv a1,s1 + 8000284c: 02000513 li a0,32 + 80002850: 000900e7 jalr s2 + 80002854: fd6d1ee3 bne s10,s6,80002830 <_vsnprintf+0x6fc> + 80002858: 000ac503 lbu a0,0(s5) + 8000285c: 001d879b addiw a5,s11,1 + 80002860: 00f13823 sd a5,16(sp) + 80002864: dc051ce3 bnez a0,8000263c <_vsnprintf+0x508> + 80002868: 000d0b13 mv s6,s10 + 8000286c: f69ff06f j 800027d4 <_vsnprintf+0x6a0> + 80002870: 00100793 li a5,1 + 80002874: 1bb7f463 bgeu a5,s11,80002a1c <_vsnprintf+0x8e8> + 80002878: ffed879b addiw a5,s11,-2 + 8000287c: 02079a93 slli s5,a5,0x20 + 80002880: 020ada93 srli s5,s5,0x20 + 80002884: 010a8ab3 add s5,s5,a6 + 80002888: 00c0006f j 80002894 <_vsnprintf+0x760> + 8000288c: 01013803 ld a6,16(sp) + 80002890: 00180813 addi a6,a6,1 + 80002894: 000d0613 mv a2,s10 + 80002898: 000c0693 mv a3,s8 + 8000289c: 00080d13 mv s10,a6 + 800028a0: 01013823 sd a6,16(sp) + 800028a4: 00048593 mv a1,s1 + 800028a8: 02000513 li a0,32 + 800028ac: 000900e7 jalr s2 + 800028b0: fdaa9ee3 bne s5,s10,8000288c <_vsnprintf+0x758> + 800028b4: 001a8d13 addi s10,s5,1 + 800028b8: 0009c503 lbu a0,0(s3) + 800028bc: 000c0693 mv a3,s8 + 800028c0: 000a8613 mv a2,s5 + 800028c4: 00048593 mv a1,s1 + 800028c8: 000900e7 jalr s2 + 800028cc: 02013983 ld s3,32(sp) + 800028d0: 8f9ff06f j 800021c8 <_vsnprintf+0x94> + 800028d4: 0009b783 ld a5,0(s3) + 800028d8: 000d0613 mv a2,s10 + 800028dc: 01e13423 sd t5,8(sp) + 800028e0: 43f7d713 srai a4,a5,0x3f + 800028e4: 00f745b3 xor a1,a4,a5 + 800028e8: 01b13023 sd s11,0(sp) + 800028ec: 000c8893 mv a7,s9 + 800028f0: 03f7d793 srli a5,a5,0x3f + 800028f4: 40e58733 sub a4,a1,a4 + 800028f8: 000c0693 mv a3,s8 + 800028fc: 00048593 mv a1,s1 + 80002900: 00090513 mv a0,s2 + 80002904: ed0ff0ef jal ra,80001fd4 <_ntoa_long_long> + 80002908: 00050d13 mv s10,a0 + 8000290c: 000a8993 mv s3,s5 + 80002910: 8b9ff06f j 800021c8 <_vsnprintf+0x94> + 80002914: 2005f793 andi a5,a1,512 + 80002918: 0007879b sext.w a5,a5 + 8000291c: 01000813 li a6,16 + 80002920: e0dff06f j 8000272c <_vsnprintf+0x5f8> + 80002924: 00a00813 li a6,10 + 80002928: de5ff06f j 8000270c <_vsnprintf+0x5d8> + 8000292c: 00800813 li a6,8 + 80002930: 00058f13 mv t5,a1 + 80002934: 400f7713 andi a4,t5,1024 + 80002938: 06400613 li a2,100 + 8000293c: 000f0793 mv a5,t5 + 80002940: 0007071b sext.w a4,a4 + 80002944: 0ec51c63 bne a0,a2,80002a3c <_vsnprintf+0x908> + 80002948: dc0712e3 bnez a4,8000270c <_vsnprintf+0x5d8> + 8000294c: 2007f793 andi a5,a5,512 + 80002950: 0007879b sext.w a5,a5 + 80002954: b55ff06f j 800024a8 <_vsnprintf+0x374> + 80002958: 0009b703 ld a4,0(s3) + 8000295c: 000d0613 mv a2,s10 + 80002960: 01e13423 sd t5,8(sp) + 80002964: 01b13023 sd s11,0(sp) + 80002968: 000c8893 mv a7,s9 + 8000296c: 00000793 li a5,0 + 80002970: f89ff06f j 800028f8 <_vsnprintf+0x7c4> + 80002974: 0ff7f793 andi a5,a5,255 + 80002978: 00078713 mv a4,a5 + 8000297c: b6dff06f j 800024e8 <_vsnprintf+0x3b4> + 80002980: 0009c703 lbu a4,0(s3) + 80002984: dd5ff06f j 80002758 <_vsnprintf+0x624> + 80002988: 02013983 ld s3,32(sp) + 8000298c: 000b0d13 mv s10,s6 + 80002990: 839ff06f j 800021c8 <_vsnprintf+0x94> + 80002994: 0009b783 ld a5,0(s3) + 80002998: 000d0613 mv a2,s10 + 8000299c: 01e13423 sd t5,8(sp) + 800029a0: 43f7d713 srai a4,a5,0x3f + 800029a4: 00f745b3 xor a1,a4,a5 + 800029a8: 01b13023 sd s11,0(sp) + 800029ac: 000c8893 mv a7,s9 + 800029b0: 03f7d793 srli a5,a5,0x3f + 800029b4: 40e58733 sub a4,a1,a4 + 800029b8: b45ff06f j 800024fc <_vsnprintf+0x3c8> + 800029bc: 00200813 li a6,2 + 800029c0: f71ff06f j 80002930 <_vsnprintf+0x7fc> + 800029c4: 4005f713 andi a4,a1,1024 + 800029c8: 0007071b sext.w a4,a4 + 800029cc: 01000813 li a6,16 + 800029d0: ff35f593 andi a1,a1,-13 + 800029d4: 00058f1b sext.w t5,a1 + 800029d8: d2071ae3 bnez a4,8000270c <_vsnprintf+0x5d8> + 800029dc: d39ff06f j 80002714 <_vsnprintf+0x5e0> + 800029e0: 0009b703 ld a4,0(s3) + 800029e4: 000d0613 mv a2,s10 + 800029e8: 01e13423 sd t5,8(sp) + 800029ec: 01b13023 sd s11,0(sp) + 800029f0: 000c8893 mv a7,s9 + 800029f4: 00000793 li a5,0 + 800029f8: b05ff06f j 800024fc <_vsnprintf+0x3c8> + 800029fc: 41f7d61b sraiw a2,a5,0x1f + 80002a00: 00c7c733 xor a4,a5,a2 + 80002a04: 40c7073b subw a4,a4,a2 + 80002a08: ae1ff06f j 800024e8 <_vsnprintf+0x3b4> + 80002a0c: 00013823 sd zero,16(sp) + 80002a10: bf9ff06f j 80002608 <_vsnprintf+0x4d4> + 80002a14: 0009a703 lw a4,0(s3) + 80002a18: d41ff06f j 80002758 <_vsnprintf+0x624> + 80002a1c: 000d0a93 mv s5,s10 + 80002a20: 00080d13 mv s10,a6 + 80002a24: e95ff06f j 800028b8 <_vsnprintf+0x784> + 80002a28: 00f13823 sd a5,16(sp) + 80002a2c: c00518e3 bnez a0,8000263c <_vsnprintf+0x508> + 80002a30: e39ff06f j 80002868 <_vsnprintf+0x734> + 80002a34: 00a00813 li a6,10 + 80002a38: efdff06f j 80002934 <_vsnprintf+0x800> + 80002a3c: 000f0593 mv a1,t5 + 80002a40: f91ff06f j 800029d0 <_vsnprintf+0x89c> + +0000000080002a44 <_out_char>: + 80002a44: 00051463 bnez a0,80002a4c <_out_char+0x8> + 80002a48: 00008067 ret + 80002a4c: e48fe06f j 80001094 + +0000000080002a50 : + 80002a50: fa010113 addi sp,sp,-96 + 80002a54: 02810313 addi t1,sp,40 + 80002a58: 02b13423 sd a1,40(sp) + 80002a5c: 02c13823 sd a2,48(sp) + 80002a60: 02d13c23 sd a3,56(sp) + 80002a64: 04e13023 sd a4,64(sp) + 80002a68: 00050693 mv a3,a0 + 80002a6c: 00010593 mv a1,sp + 80002a70: 00030713 mv a4,t1 + 80002a74: fff00613 li a2,-1 + 80002a78: 00000517 auipc a0,0x0 + 80002a7c: fcc50513 addi a0,a0,-52 # 80002a44 <_out_char> + 80002a80: 00113c23 sd ra,24(sp) + 80002a84: 04f13423 sd a5,72(sp) + 80002a88: 05013823 sd a6,80(sp) + 80002a8c: 05113c23 sd a7,88(sp) + 80002a90: 00613423 sd t1,8(sp) + 80002a94: ea0ff0ef jal ra,80002134 <_vsnprintf> + 80002a98: 01813083 ld ra,24(sp) + 80002a9c: 06010113 addi sp,sp,96 + 80002aa0: 00008067 ret + +0000000080002aa4 : + 80002aa4: 00300793 li a5,3 + 80002aa8: 06c7f863 bgeu a5,a2,80002b18 + 80002aac: 00054783 lbu a5,0(a0) + 80002ab0: ffc67693 andi a3,a2,-4 + 80002ab4: 0005c703 lbu a4,0(a1) + 80002ab8: 00d506b3 add a3,a0,a3 + 80002abc: 04078863 beqz a5,80002b0c + 80002ac0: 0ae79463 bne a5,a4,80002b68 + 80002ac4: 00154783 lbu a5,1(a0) + 80002ac8: 0015c703 lbu a4,1(a1) + 80002acc: 04078063 beqz a5,80002b0c + 80002ad0: 08e79c63 bne a5,a4,80002b68 + 80002ad4: 00254783 lbu a5,2(a0) + 80002ad8: 00450513 addi a0,a0,4 + 80002adc: 00458593 addi a1,a1,4 + 80002ae0: ffe5c703 lbu a4,-2(a1) + 80002ae4: 02078463 beqz a5,80002b0c + 80002ae8: 08e79063 bne a5,a4,80002b68 + 80002aec: fff54703 lbu a4,-1(a0) + 80002af0: fff5c783 lbu a5,-1(a1) + 80002af4: 04070a63 beqz a4,80002b48 + 80002af8: 04f71e63 bne a4,a5,80002b54 + 80002afc: 06d50c63 beq a0,a3,80002b74 + 80002b00: 00054783 lbu a5,0(a0) + 80002b04: 0005c703 lbu a4,0(a1) + 80002b08: fa079ce3 bnez a5,80002ac0 + 80002b0c: 00000793 li a5,0 + 80002b10: 40e7853b subw a0,a5,a4 + 80002b14: 00008067 ret + 80002b18: 00000793 li a5,0 + 80002b1c: 00000713 li a4,0 + 80002b20: 04060063 beqz a2,80002b60 + 80002b24: 00c50633 add a2,a0,a2 + 80002b28: 00c0006f j 80002b34 + 80002b2c: 02f71463 bne a4,a5,80002b54 + 80002b30: 02a60863 beq a2,a0,80002b60 + 80002b34: 00054703 lbu a4,0(a0) + 80002b38: 00158593 addi a1,a1,1 + 80002b3c: 00150513 addi a0,a0,1 + 80002b40: fff5c783 lbu a5,-1(a1) + 80002b44: fe0714e3 bnez a4,80002b2c + 80002b48: 00000513 li a0,0 + 80002b4c: 40f5053b subw a0,a0,a5 + 80002b50: 00008067 ret + 80002b54: 0007051b sext.w a0,a4 + 80002b58: 40f5053b subw a0,a0,a5 + 80002b5c: 00008067 ret + 80002b60: 40f7053b subw a0,a4,a5 + 80002b64: 00008067 ret + 80002b68: 0007879b sext.w a5,a5 + 80002b6c: 40e7853b subw a0,a5,a4 + 80002b70: 00008067 ret + 80002b74: 00367613 andi a2,a2,3 + 80002b78: fa9ff06f j 80002b20 + +0000000080002b7c : + 80002b7c: 00700713 li a4,7 + 80002b80: 00050793 mv a5,a0 + 80002b84: 0ac77a63 bgeu a4,a2,80002c38 + 80002b88: 0ff5f893 andi a7,a1,255 + 80002b8c: 00889693 slli a3,a7,0x8 + 80002b90: 0116e6b3 or a3,a3,a7 + 80002b94: 01069713 slli a4,a3,0x10 + 80002b98: 00d766b3 or a3,a4,a3 + 80002b9c: 02069713 slli a4,a3,0x20 + 80002ba0: 00757813 andi a6,a0,7 + 80002ba4: 00d76733 or a4,a4,a3 + 80002ba8: 0a080663 beqz a6,80002c54 + 80002bac: 00c50633 add a2,a0,a2 + 80002bb0: 01178023 sb a7,0(a5) + 80002bb4: 00178793 addi a5,a5,1 + 80002bb8: 0077f813 andi a6,a5,7 + 80002bbc: 40f606b3 sub a3,a2,a5 + 80002bc0: fe0818e3 bnez a6,80002bb0 + 80002bc4: 0066d813 srli a6,a3,0x6 + 80002bc8: 04080063 beqz a6,80002c08 + 80002bcc: 00681613 slli a2,a6,0x6 + 80002bd0: 00078893 mv a7,a5 + 80002bd4: 00f60633 add a2,a2,a5 + 80002bd8: 00e7b023 sd a4,0(a5) + 80002bdc: 00e7b423 sd a4,8(a5) + 80002be0: 00e7b823 sd a4,16(a5) + 80002be4: 00e7bc23 sd a4,24(a5) + 80002be8: 02e7b023 sd a4,32(a5) + 80002bec: 02e7b423 sd a4,40(a5) + 80002bf0: 02e7b823 sd a4,48(a5) + 80002bf4: 02e7bc23 sd a4,56(a5) + 80002bf8: 04078793 addi a5,a5,64 + 80002bfc: fcf61ee3 bne a2,a5,80002bd8 + 80002c00: 00681793 slli a5,a6,0x6 + 80002c04: 011787b3 add a5,a5,a7 + 80002c08: 0036d813 srli a6,a3,0x3 + 80002c0c: 00787813 andi a6,a6,7 + 80002c10: 02080263 beqz a6,80002c34 + 80002c14: 00381613 slli a2,a6,0x3 + 80002c18: 00078893 mv a7,a5 + 80002c1c: 00f60633 add a2,a2,a5 + 80002c20: 00e7b023 sd a4,0(a5) + 80002c24: 00878793 addi a5,a5,8 + 80002c28: fef61ce3 bne a2,a5,80002c20 + 80002c2c: 00381793 slli a5,a6,0x3 + 80002c30: 011787b3 add a5,a5,a7 + 80002c34: 0076f613 andi a2,a3,7 + 80002c38: 0ff5f593 andi a1,a1,255 + 80002c3c: 00c78733 add a4,a5,a2 + 80002c40: 00060863 beqz a2,80002c50 + 80002c44: 00b78023 sb a1,0(a5) + 80002c48: 00178793 addi a5,a5,1 + 80002c4c: fef71ce3 bne a4,a5,80002c44 + 80002c50: 00008067 ret + 80002c54: 00060693 mv a3,a2 + 80002c58: f6dff06f j 80002bc4 + +0000000080002c5c : + 80002c5c: fd010113 addi sp,sp,-48 + 80002c60: 02813023 sd s0,32(sp) + 80002c64: 01213823 sd s2,16(sp) + 80002c68: 02113423 sd ra,40(sp) + 80002c6c: 00913c23 sd s1,24(sp) + 80002c70: 01313423 sd s3,8(sp) + 80002c74: 00f00793 li a5,15 + 80002c78: 00050913 mv s2,a0 + 80002c7c: 00050713 mv a4,a0 + 80002c80: 00058413 mv s0,a1 + 80002c84: 04c7fe63 bgeu a5,a2,80002ce0 + 80002c88: 40a00533 neg a0,a0 + 80002c8c: 00757513 andi a0,a0,7 + 80002c90: 40a604b3 sub s1,a2,a0 + 80002c94: 08050e63 beqz a0,80002d30 + 80002c98: 012509b3 add s3,a0,s2 + 80002c9c: 00058793 mv a5,a1 + 80002ca0: 0007c683 lbu a3,0(a5) + 80002ca4: 00170713 addi a4,a4,1 + 80002ca8: 00178793 addi a5,a5,1 + 80002cac: fed70fa3 sb a3,-1(a4) + 80002cb0: fee998e3 bne s3,a4,80002ca0 + 80002cb4: 00a58433 add s0,a1,a0 + 80002cb8: 00747793 andi a5,s0,7 + 80002cbc: 0034d613 srli a2,s1,0x3 + 80002cc0: 00040593 mv a1,s0 + 80002cc4: 00098513 mv a0,s3 + 80002cc8: 06079063 bnez a5,80002d28 + 80002ccc: 240000ef jal ra,80002f0c <_wordcopy_fwd_aligned> + 80002cd0: ff84f713 andi a4,s1,-8 + 80002cd4: 00e40433 add s0,s0,a4 + 80002cd8: 0074f613 andi a2,s1,7 + 80002cdc: 01370733 add a4,a4,s3 + 80002ce0: fff70713 addi a4,a4,-1 + 80002ce4: 00040793 mv a5,s0 + 80002ce8: 008605b3 add a1,a2,s0 + 80002cec: 40870733 sub a4,a4,s0 + 80002cf0: 00060c63 beqz a2,80002d08 + 80002cf4: 0007c603 lbu a2,0(a5) + 80002cf8: 00178793 addi a5,a5,1 + 80002cfc: 00f706b3 add a3,a4,a5 + 80002d00: 00c68023 sb a2,0(a3) + 80002d04: fef598e3 bne a1,a5,80002cf4 + 80002d08: 02813083 ld ra,40(sp) + 80002d0c: 02013403 ld s0,32(sp) + 80002d10: 01813483 ld s1,24(sp) + 80002d14: 00813983 ld s3,8(sp) + 80002d18: 00090513 mv a0,s2 + 80002d1c: 01013903 ld s2,16(sp) + 80002d20: 03010113 addi sp,sp,48 + 80002d24: 00008067 ret + 80002d28: 32c000ef jal ra,80003054 <_wordcopy_fwd_dest_aligned> + 80002d2c: fa5ff06f j 80002cd0 + 80002d30: 00090993 mv s3,s2 + 80002d34: f85ff06f j 80002cb8 + +0000000080002d38 : + 80002d38: 1a050e63 beqz a0,80002ef4 + 80002d3c: fd010113 addi sp,sp,-48 + 80002d40: 02813023 sd s0,32(sp) + 80002d44: 00913c23 sd s1,24(sp) + 80002d48: 01f57793 andi a5,a0,31 + 80002d4c: 02113423 sd ra,40(sp) + 80002d50: 01213823 sd s2,16(sp) + 80002d54: 01313423 sd s3,8(sp) + 80002d58: 01413023 sd s4,0(sp) + 80002d5c: 00050493 mv s1,a0 + 80002d60: 00050413 mv s0,a0 + 80002d64: 00000513 li a0,0 + 80002d68: 14079a63 bnez a5,80002ebc + 80002d6c: 27f00713 li a4,639 + 80002d70: 00058913 mv s2,a1 + 80002d74: 00078513 mv a0,a5 + 80002d78: 14b77263 bgeu a4,a1,80002ebc + 80002d7c: 0074f513 andi a0,s1,7 + 80002d80: 00153513 seqz a0,a0 + 80002d84: 00060a13 mv s4,a2 + 80002d88: 00068993 mv s3,a3 + 80002d8c: b20fe0ef jal ra,800010ac <_assert> + 80002d90: 20048793 addi a5,s1,512 + 80002d94: 2004b023 sd zero,512(s1) + 80002d98: 2144b423 sd s4,520(s1) + 80002d9c: 2134b823 sd s3,528(s1) + 80002da0: 00043023 sd zero,0(s0) + 80002da4: 00840413 addi s0,s0,8 + 80002da8: fe879ce3 bne a5,s0,80002da0 + 80002dac: fff00793 li a5,-1 + 80002db0: dc090413 addi s0,s2,-576 + 80002db4: 03f79793 slli a5,a5,0x3f + 80002db8: 1287f863 bgeu a5,s0,80002ee8 + 80002dbc: 00078413 mv s0,a5 + 80002dc0: 00100513 li a0,1 + 80002dc4: ae8fe0ef jal ra,800010ac <_assert> + 80002dc8: f8300793 li a5,-125 + 80002dcc: 0017d793 srli a5,a5,0x1 + 80002dd0: fc040513 addi a0,s0,-64 + 80002dd4: 00f53533 sltu a0,a0,a5 + 80002dd8: ad4fe0ef jal ra,800010ac <_assert> + 80002ddc: 01f4f513 andi a0,s1,31 + 80002de0: 00153513 seqz a0,a0 + 80002de4: ac8fe0ef jal ra,800010ac <_assert> + 80002de8: 00100513 li a0,1 + 80002dec: 2404b023 sd zero,576(s1) + 80002df0: 2404b423 sd zero,584(s1) + 80002df4: 2484b823 sd s0,592(s1) + 80002df8: 24048c23 sb zero,600(s1) + 80002dfc: 2604b023 sd zero,608(s1) + 80002e00: 2604b423 sd zero,616(s1) + 80002e04: aa8fe0ef jal ra,800010ac <_assert> + 80002e08: 00100513 li a0,1 + 80002e0c: aa0fe0ef jal ra,800010ac <_assert> + 80002e10: 2504b503 ld a0,592(s1) + 80002e14: 24048a13 addi s4,s1,576 + 80002e18: 04053513 sltiu a0,a0,64 + 80002e1c: 00154513 xori a0,a0,1 + 80002e20: 00157513 andi a0,a0,1 + 80002e24: a88fe0ef jal ra,800010ac <_assert> + 80002e28: 2504b503 ld a0,592(s1) + 80002e2c: 03f57513 andi a0,a0,63 + 80002e30: 00153513 seqz a0,a0 + 80002e34: a78fe0ef jal ra,800010ac <_assert> + 80002e38: 2504b703 ld a4,592(s1) + 80002e3c: 00100793 li a5,1 + 80002e40: 00675713 srli a4,a4,0x6 + 80002e44: 0ae7fc63 bgeu a5,a4,80002efc + 80002e48: 00000793 li a5,0 + 80002e4c: 00100693 li a3,1 + 80002e50: 0017879b addiw a5,a5,1 + 80002e54: 00175713 srli a4,a4,0x1 + 80002e58: 0ff7f793 andi a5,a5,255 + 80002e5c: fed71ae3 bne a4,a3,80002e50 + 80002e60: 00078993 mv s3,a5 + 80002e64: 0407b513 sltiu a0,a5,64 + 80002e68: 00f71933 sll s2,a4,a5 + 80002e6c: a40fe0ef jal ra,800010ac <_assert> + 80002e70: 00399793 slli a5,s3,0x3 + 80002e74: 00f487b3 add a5,s1,a5 + 80002e78: 0007b703 ld a4,0(a5) + 80002e7c: 2604b423 sd zero,616(s1) + 80002e80: 26e4b023 sd a4,608(s1) + 80002e84: 00070463 beqz a4,80002e8c + 80002e88: 03473423 sd s4,40(a4) + 80002e8c: 0147b023 sd s4,0(a5) + 80002e90: 2004b503 ld a0,512(s1) + 80002e94: 00a96533 or a0,s2,a0 + 80002e98: 20a4b023 sd a0,512(s1) + 80002e9c: 00a03533 snez a0,a0 + 80002ea0: a0cfe0ef jal ra,800010ac <_assert> + 80002ea4: 00048513 mv a0,s1 + 80002ea8: 2084bc23 sd s0,536(s1) + 80002eac: 2204b023 sd zero,544(s1) + 80002eb0: 2204b423 sd zero,552(s1) + 80002eb4: 2204b823 sd zero,560(s1) + 80002eb8: 2204bc23 sd zero,568(s1) + 80002ebc: 02813083 ld ra,40(sp) + 80002ec0: 02013403 ld s0,32(sp) + 80002ec4: 01813483 ld s1,24(sp) + 80002ec8: 01013903 ld s2,16(sp) + 80002ecc: 00813983 ld s3,8(sp) + 80002ed0: 00013a03 ld s4,0(sp) + 80002ed4: 03010113 addi sp,sp,48 + 80002ed8: 00008067 ret + 80002edc: 00100513 li a0,1 + 80002ee0: fff40413 addi s0,s0,-1 + 80002ee4: 9c8fe0ef jal ra,800010ac <_assert> + 80002ee8: 03f47793 andi a5,s0,63 + 80002eec: fe0798e3 bnez a5,80002edc + 80002ef0: ed1ff06f j 80002dc0 + 80002ef4: 00000513 li a0,0 + 80002ef8: 00008067 ret + 80002efc: 00100913 li s2,1 + 80002f00: 00000993 li s3,0 + 80002f04: 00100513 li a0,1 + 80002f08: f65ff06f j 80002e6c + +0000000080002f0c <_wordcopy_fwd_aligned>: + 80002f0c: 00767793 andi a5,a2,7 + 80002f10: 00002717 auipc a4,0x2 + 80002f14: 80470713 addi a4,a4,-2044 # 80004714 + 80002f18: 00279793 slli a5,a5,0x2 + 80002f1c: 00e787b3 add a5,a5,a4 + 80002f20: 0007a783 lw a5,0(a5) + 80002f24: 00e787b3 add a5,a5,a4 + 80002f28: 00078067 jr a5 + 80002f2c: 0005b703 ld a4,0(a1) + 80002f30: ff050793 addi a5,a0,-16 + 80002f34: ff858593 addi a1,a1,-8 + 80002f38: 00160613 addi a2,a2,1 + 80002f3c: 0105b803 ld a6,16(a1) + 80002f40: 01878693 addi a3,a5,24 + 80002f44: 00e53023 sd a4,0(a0) + 80002f48: 0185b703 ld a4,24(a1) + 80002f4c: 02078513 addi a0,a5,32 + 80002f50: 0106b023 sd a6,0(a3) + 80002f54: 0205b803 ld a6,32(a1) + 80002f58: 02878693 addi a3,a5,40 + 80002f5c: 00e53023 sd a4,0(a0) + 80002f60: 0285b703 ld a4,40(a1) + 80002f64: 03078513 addi a0,a5,48 + 80002f68: 0106b023 sd a6,0(a3) + 80002f6c: 0305b803 ld a6,48(a1) + 80002f70: 03878693 addi a3,a5,56 + 80002f74: 00e53023 sd a4,0(a0) + 80002f78: 0385b703 ld a4,56(a1) + 80002f7c: 04078793 addi a5,a5,64 + 80002f80: 0106b023 sd a6,0(a3) + 80002f84: ff860613 addi a2,a2,-8 + 80002f88: 00078513 mv a0,a5 + 80002f8c: 04058593 addi a1,a1,64 + 80002f90: 02060063 beqz a2,80002fb0 <_wordcopy_fwd_aligned+0xa4> + 80002f94: 0005b803 ld a6,0(a1) + 80002f98: 00878693 addi a3,a5,8 + 80002f9c: 00e53023 sd a4,0(a0) + 80002fa0: 0085b703 ld a4,8(a1) + 80002fa4: 01078513 addi a0,a5,16 + 80002fa8: 0106b023 sd a6,0(a3) + 80002fac: f91ff06f j 80002f3c <_wordcopy_fwd_aligned+0x30> + 80002fb0: 00e53023 sd a4,0(a0) + 80002fb4: 00008067 ret + 80002fb8: fff60613 addi a2,a2,-1 + 80002fbc: 0005b703 ld a4,0(a1) + 80002fc0: fe0608e3 beqz a2,80002fb0 <_wordcopy_fwd_aligned+0xa4> + 80002fc4: 00858593 addi a1,a1,8 + 80002fc8: 00050793 mv a5,a0 + 80002fcc: fc9ff06f j 80002f94 <_wordcopy_fwd_aligned+0x88> + 80002fd0: 0005b803 ld a6,0(a1) + 80002fd4: 00050693 mv a3,a0 + 80002fd8: fd058593 addi a1,a1,-48 + 80002fdc: fc850793 addi a5,a0,-56 + 80002fe0: 00660613 addi a2,a2,6 + 80002fe4: f95ff06f j 80002f78 <_wordcopy_fwd_aligned+0x6c> + 80002fe8: 0005b703 ld a4,0(a1) + 80002fec: fd050793 addi a5,a0,-48 + 80002ff0: fd858593 addi a1,a1,-40 + 80002ff4: 00560613 addi a2,a2,5 + 80002ff8: f75ff06f j 80002f6c <_wordcopy_fwd_aligned+0x60> + 80002ffc: 0005b803 ld a6,0(a1) + 80003000: 00050693 mv a3,a0 + 80003004: fe058593 addi a1,a1,-32 + 80003008: fd850793 addi a5,a0,-40 + 8000300c: 00460613 addi a2,a2,4 + 80003010: f51ff06f j 80002f60 <_wordcopy_fwd_aligned+0x54> + 80003014: 0005b703 ld a4,0(a1) + 80003018: fe050793 addi a5,a0,-32 + 8000301c: fe858593 addi a1,a1,-24 + 80003020: 00360613 addi a2,a2,3 + 80003024: f31ff06f j 80002f54 <_wordcopy_fwd_aligned+0x48> + 80003028: 0005b803 ld a6,0(a1) + 8000302c: 00050693 mv a3,a0 + 80003030: ff058593 addi a1,a1,-16 + 80003034: fe850793 addi a5,a0,-24 + 80003038: 00260613 addi a2,a2,2 + 8000303c: f0dff06f j 80002f48 <_wordcopy_fwd_aligned+0x3c> + 80003040: f6060ae3 beqz a2,80002fb4 <_wordcopy_fwd_aligned+0xa8> + 80003044: 0005b803 ld a6,0(a1) + 80003048: 00050693 mv a3,a0 + 8000304c: ff850793 addi a5,a0,-8 + 80003050: f51ff06f j 80002fa0 <_wordcopy_fwd_aligned+0x94> + +0000000080003054 <_wordcopy_fwd_dest_aligned>: + 80003054: 0075f713 andi a4,a1,7 + 80003058: 0037179b slliw a5,a4,0x3 + 8000305c: 00371313 slli t1,a4,0x3 + 80003060: 00367693 andi a3,a2,3 + 80003064: 04000713 li a4,64 + 80003068: 00200813 li a6,2 + 8000306c: 40f707bb subw a5,a4,a5 + 80003070: ff85f593 andi a1,a1,-8 + 80003074: 0d068e63 beq a3,a6,80003150 <_wordcopy_fwd_dest_aligned+0xfc> + 80003078: 00300713 li a4,3 + 8000307c: 02e68c63 beq a3,a4,800030b4 <_wordcopy_fwd_dest_aligned+0x60> + 80003080: 00100713 li a4,1 + 80003084: 00e68663 beq a3,a4,80003090 <_wordcopy_fwd_dest_aligned+0x3c> + 80003088: 0e061863 bnez a2,80003178 <_wordcopy_fwd_dest_aligned+0x124> + 8000308c: 00008067 ret + 80003090: fff60613 addi a2,a2,-1 + 80003094: 0005b703 ld a4,0(a1) + 80003098: 0085b803 ld a6,8(a1) + 8000309c: 0c061863 bnez a2,8000316c <_wordcopy_fwd_dest_aligned+0x118> + 800030a0: 00675733 srl a4,a4,t1 + 800030a4: 00f817b3 sll a5,a6,a5 + 800030a8: 00f76733 or a4,a4,a5 + 800030ac: 00e53023 sd a4,0(a0) + 800030b0: 00008067 ret + 800030b4: 0005b703 ld a4,0(a1) + 800030b8: 0085b683 ld a3,8(a1) + 800030bc: 00058893 mv a7,a1 + 800030c0: 00160613 addi a2,a2,1 + 800030c4: ff050593 addi a1,a0,-16 + 800030c8: 0340006f j 800030fc <_wordcopy_fwd_dest_aligned+0xa8> + 800030cc: 006756b3 srl a3,a4,t1 + 800030d0: 00f81733 sll a4,a6,a5 + 800030d4: 00e6e6b3 or a3,a3,a4 + 800030d8: 00858e13 addi t3,a1,8 + 800030dc: 0008b703 ld a4,0(a7) + 800030e0: 00d53023 sd a3,0(a0) + 800030e4: 00f716b3 sll a3,a4,a5 + 800030e8: 00685833 srl a6,a6,t1 + 800030ec: 00d86833 or a6,a6,a3 + 800030f0: 01058513 addi a0,a1,16 + 800030f4: 0088b683 ld a3,8(a7) + 800030f8: 010e3023 sd a6,0(t3) + 800030fc: 00675733 srl a4,a4,t1 + 80003100: 00f69833 sll a6,a3,a5 + 80003104: 01076833 or a6,a4,a6 + 80003108: 01858e13 addi t3,a1,24 + 8000310c: 0108b703 ld a4,16(a7) + 80003110: 01053023 sd a6,0(a0) + 80003114: 00f71533 sll a0,a4,a5 + 80003118: 0066d6b3 srl a3,a3,t1 + 8000311c: 00a6e6b3 or a3,a3,a0 + 80003120: 0188b803 ld a6,24(a7) + 80003124: 02058593 addi a1,a1,32 + 80003128: 00de3023 sd a3,0(t3) + 8000312c: ffc60613 addi a2,a2,-4 + 80003130: 00058513 mv a0,a1 + 80003134: 02088893 addi a7,a7,32 + 80003138: f8061ae3 bnez a2,800030cc <_wordcopy_fwd_dest_aligned+0x78> + 8000313c: 00675733 srl a4,a4,t1 + 80003140: 00f817b3 sll a5,a6,a5 + 80003144: 00f76733 or a4,a4,a5 + 80003148: 00e53023 sd a4,0(a0) + 8000314c: f65ff06f j 800030b0 <_wordcopy_fwd_dest_aligned+0x5c> + 80003150: 0005b683 ld a3,0(a1) + 80003154: 0085b703 ld a4,8(a1) + 80003158: ff858893 addi a7,a1,-8 + 8000315c: 00050e13 mv t3,a0 + 80003160: fe850593 addi a1,a0,-24 + 80003164: 00260613 addi a2,a2,2 + 80003168: fadff06f j 80003114 <_wordcopy_fwd_dest_aligned+0xc0> + 8000316c: 01058893 addi a7,a1,16 + 80003170: 00050593 mv a1,a0 + 80003174: f59ff06f j 800030cc <_wordcopy_fwd_dest_aligned+0x78> + 80003178: 0005b803 ld a6,0(a1) + 8000317c: 0085b703 ld a4,8(a1) + 80003180: 00858893 addi a7,a1,8 + 80003184: 00050e13 mv t3,a0 + 80003188: ff850593 addi a1,a0,-8 + 8000318c: f59ff06f j 800030e4 <_wordcopy_fwd_dest_aligned+0x90> diff --git a/bin/custom-output/mario/fceux-mario.elf b/bin/custom-output/mario/fceux-mario.elf new file mode 100755 index 0000000000000000000000000000000000000000..39797bae8b43907141743979d3410d6f1bf2c4f1 GIT binary patch literal 2427168 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

MZNDRP)iSf=+6Q^Pk#!hg?kHI1gpT>Xj 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 z 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 z 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%0ALTrJSxs-?iyqBtET91dh231+YY6lFJKU5Imo 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
: + 8000e7ac: fb010113 addi sp,sp,-80 + 8000e7b0: 04113423 sd ra,72(sp) + 8000e7b4: 04813023 sd s0,64(sp) + 8000e7b8: 02913c23 sd s1,56(sp) + 8000e7bc: 03213823 sd s2,48(sp) + 8000e7c0: 03313423 sd s3,40(sp) + 8000e7c4: 00050413 mv s0,a0 + 8000e7c8: 79c2b0ef jal ra,80039f64 + 8000e7cc: 00040593 mv a1,s0 + 8000e7d0: 0002f517 auipc a0,0x2f + 8000e7d4: e4050513 addi a0,a0,-448 # 8003d610 + 8000e7d8: 5712c0ef jal ra,8003b548 + 8000e7dc: 0002f597 auipc a1,0x2f + 8000e7e0: e4458593 addi a1,a1,-444 # 8003d620 + 8000e7e4: 0002f517 auipc a0,0x2f + 8000e7e8: e6450513 addi a0,a0,-412 # 8003d648 + 8000e7ec: 55d2c0ef jal ra,8003b548 + 8000e7f0: 4ac250ef jal ra,80033c9c <_Z16FCEUI_Initializev> + 8000e7f4: 10050c63 beqz a0,8000e90c + 8000e7f8: b85ff0ef jal ra,8000e37c <_Z11UpdateInputv> + 8000e7fc: 04800613 li a2,72 + 8000e800: 03800593 li a1,56 + 8000e804: 00000513 li a0,0 + 8000e808: 9a0f20ef jal ra,800009a8 <_Z15FCEUI_SetNTSCTHbii> + 8000e80c: 00100593 li a1,1 + 8000e810: 00000513 li a0,0 + 8000e814: 641250ef jal ra,80034654 <_Z15FCEUI_SetRegionii> + 8000e818: 00100513 li a0,1 + 8000e81c: 60d290ef jal ra,80038628 <_Z29FCEUI_DisableSpriteLimitationi> + 8000e820: 0ef00693 li a3,239 + 8000e824: 00000613 li a2,0 + 8000e828: 0e700593 li a1,231 + 8000e82c: 00800513 li a0,8 + 8000e830: 5a5250ef jal ra,800345d4 <_Z22FCEUI_SetRenderedLinesiiii> + 8000e834: 00040513 mv a0,s0 + 8000e838: c15ff0ef jal ra,8000e44c <_Z8LoadGamePKc> + 8000e83c: 00100793 li a5,1 + 8000e840: 0cf51a63 bne a0,a5,8000e914 + 8000e844: 001be917 auipc s2,0x1be + 8000e848: e0490913 addi s2,s2,-508 # 801cc648 + 8000e84c: 00093783 ld a5,0(s2) + 8000e850: 08078263 beqz a5,8000e8d4 + 8000e854: 001bd417 auipc s0,0x1bd + 8000e858: 3bc40413 addi s0,s0,956 # 801cbc10 <_ZZL5DoFuniiE6fskipc> + 8000e85c: 0003a997 auipc s3,0x3a + 8000e860: 36498993 addi s3,s3,868 # 80048bc0 + 8000e864: 001bd497 auipc s1,0x1bd + 8000e868: 3b048493 addi s1,s1,944 # 801cbc14 <_ZZL5DoFuniiE6opause> + 8000e86c: 00042503 lw a0,0(s0) + 8000e870: 00300593 li a1,3 + 8000e874: 00012623 sw zero,12(sp) + 8000e878: 0015051b addiw a0,a0,1 + 8000e87c: 6282b0ef jal ra,80039ea4 <__moddi3> + 8000e880: 00050693 mv a3,a0 + 8000e884: 0009a783 lw a5,0(s3) + 8000e888: 0006869b sext.w a3,a3 + 8000e88c: 00d42023 sw a3,0(s0) + 8000e890: 00c10613 addi a2,sp,12 + 8000e894: 01810593 addi a1,sp,24 + 8000e898: 01010513 addi a0,sp,16 + 8000e89c: 00078463 beqz a5,8000e8a4 + 8000e8a0: 00013823 sd zero,16(sp) + 8000e8a4: 49c250ef jal ra,80033d40 <_Z13FCEUI_EmulatePPhPPiS1_i> + 8000e8a8: 00c12603 lw a2,12(sp) + 8000e8ac: 01813583 ld a1,24(sp) + 8000e8b0: 01013503 ld a0,16(sp) + 8000e8b4: c7dff0ef jal ra,8000e530 <_Z12FCEUD_UpdatePhPii> + 8000e8b8: 6c1250ef jal ra,80034778 <_Z21FCEUI_EmulationPausedv> + 8000e8bc: 0004a783 lw a5,0(s1) + 8000e8c0: 00a78663 beq a5,a0,8000e8cc + 8000e8c4: 6b5250ef jal ra,80034778 <_Z21FCEUI_EmulationPausedv> + 8000e8c8: 00a4a023 sw a0,0(s1) + 8000e8cc: 00093783 ld a5,0(s2) + 8000e8d0: f8079ee3 bnez a5,8000e86c + 8000e8d4: 001bd797 auipc a5,0x1bd + 8000e8d8: 3507a783 lw a5,848(a5) # 801cbc24 + 8000e8dc: 02079463 bnez a5,8000e904 + 8000e8e0: 448250ef jal ra,80033d28 <_Z10FCEUI_Killv> + 8000e8e4: 00000513 li a0,0 + 8000e8e8: 04813083 ld ra,72(sp) + 8000e8ec: 04013403 ld s0,64(sp) + 8000e8f0: 03813483 ld s1,56(sp) + 8000e8f4: 03013903 ld s2,48(sp) + 8000e8f8: 02813983 ld s3,40(sp) + 8000e8fc: 05010113 addi sp,sp,80 + 8000e900: 00008067 ret + 8000e904: af9ff0ef jal ra,8000e3fc <_Z9CloseGamev.part.0> + 8000e908: fd9ff06f j 8000e8e0 + 8000e90c: fff00513 li a0,-1 + 8000e910: fd9ff06f j 8000e8e8 + 8000e914: 001bd797 auipc a5,0x1bd + 8000e918: 2f47a783 lw a5,756(a5) # 801cbc08 <_ZL6inited> + 8000e91c: 0047f793 andi a5,a5,4 + 8000e920: 00079a63 bnez a5,8000e934 + 8000e924: 001bd797 auipc a5,0x1bd + 8000e928: 2e07a223 sw zero,740(a5) # 801cbc08 <_ZL6inited> + 8000e92c: fff00513 li a0,-1 + 8000e930: fb9ff06f j 8000e8e8 + 8000e934: 058000ef jal ra,8000e98c <_Z9KillVideov> + 8000e938: fedff06f j 8000e924 + +000000008000e93c <_Z13FCEUD_GetTimev>: + 8000e93c: fe010113 addi sp,sp,-32 + 8000e940: 00810593 addi a1,sp,8 + 8000e944: 00600513 li a0,6 + 8000e948: 00113c23 sd ra,24(sp) + 8000e94c: 66c2b0ef jal ra,80039fb8 + 8000e950: 00813503 ld a0,8(sp) + 8000e954: 3e800593 li a1,1000 + 8000e958: 4d02b0ef jal ra,80039e28 <__udivdi3> + 8000e95c: 01813083 ld ra,24(sp) + 8000e960: 02010113 addi sp,sp,32 + 8000e964: 00008067 ret + +000000008000e968 <_Z17FCEUD_GetTimeFreqv>: + 8000e968: 3e800513 li a0,1000 + 8000e96c: 00008067 ret + +000000008000e970 <_Z9InitSoundv>: + 8000e970: 00100513 li a0,1 + 8000e974: 00008067 ret + +000000008000e978 <_Z11GetMaxSoundv>: + 8000e978: 00000513 li a0,0 + 8000e97c: 00008067 ret + +000000008000e980 <_Z13GetWriteSoundv>: + 8000e980: 00000513 li a0,0 + 8000e984: 00008067 ret + +000000008000e988 <_Z10WriteSoundPii>: + 8000e988: 00008067 ret + +000000008000e98c <_Z9KillVideov>: + 8000e98c: 001bd797 auipc a5,0x1bd + 8000e990: 2a87a783 lw a5,680(a5) # 801cbc34 <_ZL8s_inited> + 8000e994: 02078463 beqz a5,8000e9bc <_Z9KillVideov+0x30> + 8000e998: ff010113 addi sp,sp,-16 + 8000e99c: 00113423 sd ra,8(sp) + 8000e9a0: a44ff0ef jal ra,8000dbe4 <_Z14KillBlitToHighv> + 8000e9a4: 00813083 ld ra,8(sp) + 8000e9a8: 001bd797 auipc a5,0x1bd + 8000e9ac: 2807a623 sw zero,652(a5) # 801cbc34 <_ZL8s_inited> + 8000e9b0: 00000513 li a0,0 + 8000e9b4: 01010113 addi sp,sp,16 + 8000e9b8: 00008067 ret + 8000e9bc: fff00513 li a0,-1 + 8000e9c0: 00008067 ret + +000000008000e9c4 <_Z18FCEUD_VideoChangedv>: + 8000e9c4: 001be797 auipc a5,0x1be + 8000e9c8: c8078e23 sb zero,-868(a5) # 801cc660 + 8000e9cc: 00008067 ret + +000000008000e9d0 <_Z9InitVideoP6FCEUGI>: + 8000e9d0: ff010113 addi sp,sp,-16 + 8000e9d4: 0002f517 auipc a0,0x2f + 8000e9d8: c7c50513 addi a0,a0,-900 # 8003d650 + 8000e9dc: 00113423 sd ra,8(sp) + 8000e9e0: 00813023 sd s0,0(sp) + 8000e9e4: 3652c0ef jal ra,8003b548 + 8000e9e8: 00100413 li s0,1 + 8000e9ec: 00100513 li a0,1 + 8000e9f0: 001bd797 auipc a5,0x1bd + 8000e9f4: 2487a223 sw s0,580(a5) # 801cbc34 <_ZL8s_inited> + 8000e9f8: a20f20ef jal ra,80000c18 <_Z16FCEUI_SetShowFPSb> + 8000e9fc: 00010637 lui a2,0x10 + 8000ea00: 00000813 li a6,0 + 8000ea04: 00000793 li a5,0 + 8000ea08: 00000713 li a4,0 + 8000ea0c: 0ff00693 li a3,255 + 8000ea10: f0060613 addi a2,a2,-256 # ff00 <_entry_offset+0xff00> + 8000ea14: 00ff05b7 lui a1,0xff0 + 8000ea18: 00400513 li a0,4 + 8000ea1c: 001bd897 auipc a7,0x1bd + 8000ea20: 2088aa23 sw s0,532(a7) # 801cbc30 <_ZL16s_paletterefresh> + 8000ea24: 908ff0ef jal ra,8000db2c <_Z14InitBlitToHighijjjiii> + 8000ea28: 00813083 ld ra,8(sp) + 8000ea2c: 00013403 ld s0,0(sp) + 8000ea30: 00000513 li a0,0 + 8000ea34: 01010113 addi sp,sp,16 + 8000ea38: 00008067 ret + +000000008000ea3c <_Z16FCEUD_SetPalettehhhh>: + 8000ea3c: 00251793 slli a5,a0,0x2 + 8000ea40: 000b1517 auipc a0,0xb1 + 8000ea44: 5a050513 addi a0,a0,1440 # 800bffe0 <_ZL6s_psdl> + 8000ea48: 00f50533 add a0,a0,a5 + 8000ea4c: 00100793 li a5,1 + 8000ea50: 00b50023 sb a1,0(a0) + 8000ea54: 00c500a3 sb a2,1(a0) + 8000ea58: 00d50123 sb a3,2(a0) + 8000ea5c: 001bd717 auipc a4,0x1bd + 8000ea60: 1cf72a23 sw a5,468(a4) # 801cbc30 <_ZL16s_paletterefresh> + 8000ea64: 00008067 ret + +000000008000ea68 <_Z10BlitScreenPh>: + 8000ea68: fc010113 addi sp,sp,-64 + 8000ea6c: 02813823 sd s0,48(sp) + 8000ea70: 02113c23 sd ra,56(sp) + 8000ea74: 02913423 sd s1,40(sp) + 8000ea78: 03213023 sd s2,32(sp) + 8000ea7c: 01313c23 sd s3,24(sp) + 8000ea80: 01413823 sd s4,16(sp) + 8000ea84: 01513423 sd s5,8(sp) + 8000ea88: 001bd797 auipc a5,0x1bd + 8000ea8c: 1a87a783 lw a5,424(a5) # 801cbc30 <_ZL16s_paletterefresh> + 8000ea90: 00050413 mv s0,a0 + 8000ea94: 0a079c63 bnez a5,8000eb4c <_Z10BlitScreenPh+0xe4> + 8000ea98: 00100813 li a6,1 + 8000ea9c: 00100793 li a5,1 + 8000eaa0: 40000713 li a4,1024 + 8000eaa4: 0f000693 li a3,240 + 8000eaa8: 10000613 li a2,256 + 8000eaac: 00075597 auipc a1,0x75 + 8000eab0: 53458593 addi a1,a1,1332 # 80083fe0 <_ZL6canvas> + 8000eab4: 00040513 mv a0,s0 + 8000eab8: ab4ff0ef jal ra,8000dd6c <_Z11Blit8ToHighPhS_iiiii> + 8000eabc: 0002f517 auipc a0,0x2f + 8000eac0: bac50513 addi a0,a0,-1108 # 8003d668 + 8000eac4: 00222937 lui s2,0x222 + 8000eac8: 2812c0ef jal ra,8003b548 + 8000eacc: 00076497 auipc s1,0x76 + 8000ead0: 91448493 addi s1,s1,-1772 # 800843e0 <_ZL6canvas+0x400> + 8000ead4: 000b2a97 auipc s5,0xb2 + 8000ead8: 90ca8a93 addi s5,s5,-1780 # 800c03e0 <_ZL6coeffs> + 8000eadc: 0002f997 auipc s3,0x2f + 8000eae0: b9498993 addi s3,s3,-1132 # 8003d670 + 8000eae4: 22290913 addi s2,s2,546 # 222222 <_entry_offset+0x222222> + 8000eae8: 00001a37 lui s4,0x1 + 8000eaec: c0048413 addi s0,s1,-1024 + 8000eaf0: 00046503 lwu a0,0(s0) + 8000eaf4: 00090593 mv a1,s2 + 8000eaf8: 00840413 addi s0,s0,8 + 8000eafc: 32c2b0ef jal ra,80039e28 <__udivdi3> + 8000eb00: 02051513 slli a0,a0,0x20 + 8000eb04: 02055513 srli a0,a0,0x20 + 8000eb08: 00a98533 add a0,s3,a0 + 8000eb0c: 00054503 lbu a0,0(a0) + 8000eb10: 2582b0ef jal ra,80039d68 + 8000eb14: fc941ee3 bne s0,s1,8000eaf0 <_Z10BlitScreenPh+0x88> + 8000eb18: 014404b3 add s1,s0,s4 + 8000eb1c: 00a00513 li a0,10 + 8000eb20: 2482b0ef jal ra,80039d68 + 8000eb24: fd5494e3 bne s1,s5,8000eaec <_Z10BlitScreenPh+0x84> + 8000eb28: 03813083 ld ra,56(sp) + 8000eb2c: 03013403 ld s0,48(sp) + 8000eb30: 02813483 ld s1,40(sp) + 8000eb34: 02013903 ld s2,32(sp) + 8000eb38: 01813983 ld s3,24(sp) + 8000eb3c: 01013a03 ld s4,16(sp) + 8000eb40: 00813a83 ld s5,8(sp) + 8000eb44: 04010113 addi sp,sp,64 + 8000eb48: 00008067 ret + 8000eb4c: 000b1517 auipc a0,0xb1 + 8000eb50: 49450513 addi a0,a0,1172 # 800bffe0 <_ZL6s_psdl> + 8000eb54: 8c0ff0ef jal ra,8000dc14 <_Z20SetPaletteBlitToHighPh> + 8000eb58: 001bd797 auipc a5,0x1bd + 8000eb5c: 0c07ac23 sw zero,216(a5) # 801cbc30 <_ZL16s_paletterefresh> + 8000eb60: f39ff06f j 8000ea98 <_Z10BlitScreenPh+0x30> + +000000008000eb64 <_ZN12EMUFILE_FILE4openEPKcS1_>: + 8000eb64: fb010113 addi sp,sp,-80 + 8000eb68: 03313423 sd s3,40(sp) + 8000eb6c: 0003a997 auipc s3,0x3a + 8000eb70: 07498993 addi s3,s3,116 # 80048be0 + 8000eb74: 0009a703 lw a4,0(s3) + 8000eb78: 03213823 sd s2,48(sp) + 8000eb7c: 03413023 sd s4,32(sp) + 8000eb80: 01713423 sd s7,8(sp) + 8000eb84: 04113423 sd ra,72(sp) + 8000eb88: 04813023 sd s0,64(sp) + 8000eb8c: 02913c23 sd s1,56(sp) + 8000eb90: 01513c23 sd s5,24(sp) + 8000eb94: 01613823 sd s6,16(sp) + 8000eb98: 00100793 li a5,1 + 8000eb9c: 00050a13 mv s4,a0 + 8000eba0: 00058913 mv s2,a1 + 8000eba4: 00060b93 mv s7,a2 + 8000eba8: 0ae7da63 bge a5,a4,8000ec5c <_ZN12EMUFILE_FILE4openEPKcS1_+0xf8> + 8000ebac: 0003a417 auipc s0,0x3a + 8000ebb0: 03440413 addi s0,s0,52 # 80048be0 + 8000ebb4: 00100493 li s1,1 + 8000ebb8: 00000b13 li s6,0 + 8000ebbc: 0003aa97 auipc s5,0x3a + 8000ebc0: 00ca8a93 addi s5,s5,12 # 80048bc8 + 8000ebc4: 00043503 ld a0,0(s0) + 8000ebc8: 00090593 mv a1,s2 + 8000ebcc: 0014849b addiw s1,s1,1 + 8000ebd0: 7602b0ef jal ra,8003a330 + 8000ebd4: 0009a783 lw a5,0(s3) + 8000ebd8: 00051663 bnez a0,8000ebe4 <_ZN12EMUFILE_FILE4openEPKcS1_+0x80> + 8000ebdc: 00040a93 mv s5,s0 + 8000ebe0: 00100b13 li s6,1 + 8000ebe4: 01840413 addi s0,s0,24 + 8000ebe8: fcf4cee3 blt s1,a5,8000ebc4 <_ZN12EMUFILE_FILE4openEPKcS1_+0x60> + 8000ebec: 060b0c63 beqz s6,8000ec64 <_ZN12EMUFILE_FILE4openEPKcS1_+0x100> + 8000ebf0: 00090593 mv a1,s2 + 8000ebf4: 0002f517 auipc a0,0x2f + 8000ebf8: a8c50513 addi a0,a0,-1396 # 8003d680 + 8000ebfc: 14d2c0ef jal ra,8003b548 + 8000ec00: 010ab703 ld a4,16(s5) + 8000ec04: 008ab683 ld a3,8(s5) + 8000ec08: 000ab783 ld a5,0(s5) + 8000ec0c: 00072703 lw a4,0(a4) + 8000ec10: 000b8593 mv a1,s7 + 8000ec14: 00da3023 sd a3,0(s4) # 1000 <_entry_offset+0x1000> + 8000ec18: 020a2223 sw zero,36(s4) + 8000ec1c: 02ea2423 sw a4,40(s4) + 8000ec20: 00fa3423 sd a5,8(s4) + 8000ec24: 010a0513 addi a0,s4,16 + 8000ec28: 6e12c0ef jal ra,8003bb08 + 8000ec2c: 04813083 ld ra,72(sp) + 8000ec30: 04013403 ld s0,64(sp) + 8000ec34: 020a0023 sb zero,32(s4) + 8000ec38: 03813483 ld s1,56(sp) + 8000ec3c: 03013903 ld s2,48(sp) + 8000ec40: 02813983 ld s3,40(sp) + 8000ec44: 02013a03 ld s4,32(sp) + 8000ec48: 01813a83 ld s5,24(sp) + 8000ec4c: 01013b03 ld s6,16(sp) + 8000ec50: 00813b83 ld s7,8(sp) + 8000ec54: 05010113 addi sp,sp,80 + 8000ec58: 00008067 ret + 8000ec5c: 0003aa97 auipc s5,0x3a + 8000ec60: f6ca8a93 addi s5,s5,-148 # 80048bc8 + 8000ec64: 000ab603 ld a2,0(s5) + 8000ec68: 00090593 mv a1,s2 + 8000ec6c: 0002f517 auipc a0,0x2f + 8000ec70: a2450513 addi a0,a0,-1500 # 8003d690 + 8000ec74: 0d52c0ef jal ra,8003b548 + 8000ec78: f89ff06f j 8000ec00 <_ZN12EMUFILE_FILE4openEPKcS1_+0x9c> + +000000008000ec7c <_Z11MakeFiltersi>: + 8000ec7c: 0002f797 auipc a5,0x2f + 8000ec80: a4c78793 addi a5,a5,-1460 # 8003d6c8 + 8000ec84: 0507b703 ld a4,80(a5) + 8000ec88: 0007bf83 ld t6,0(a5) + 8000ec8c: 0087bf03 ld t5,8(a5) + 8000ec90: 0107be83 ld t4,16(a5) + 8000ec94: 0187be03 ld t3,24(a5) + 8000ec98: 0207b303 ld t1,32(a5) + 8000ec9c: 0287b883 ld a7,40(a5) + 8000eca0: 0307b803 ld a6,48(a5) + 8000eca4: 0387b583 ld a1,56(a5) + 8000eca8: 0407b603 ld a2,64(a5) + 8000ecac: 0487b683 ld a3,72(a5) + 8000ecb0: 0587b783 ld a5,88(a5) + 8000ecb4: f8010113 addi sp,sp,-128 + 8000ecb8: 06813823 sd s0,112(sp) + 8000ecbc: 06913423 sd s1,104(sp) + 8000ecc0: 04e13823 sd a4,80(sp) + 8000ecc4: 04f13c23 sd a5,88(sp) + 8000ecc8: 06113c23 sd ra,120(sp) + 8000eccc: 01f13023 sd t6,0(sp) + 8000ecd0: 01e13423 sd t5,8(sp) + 8000ecd4: 01d13823 sd t4,16(sp) + 8000ecd8: 01c13c23 sd t3,24(sp) + 8000ecdc: 02613023 sd t1,32(sp) + 8000ece0: 03113423 sd a7,40(sp) + 8000ece4: 03013823 sd a6,48(sp) + 8000ece8: 02b13c23 sd a1,56(sp) + 8000ecec: 04c13023 sd a2,64(sp) + 8000ecf0: 04d13423 sd a3,72(sp) + 8000ecf4: 001ba717 auipc a4,0x1ba + 8000ecf8: 02c72703 lw a4,44(a4) # 801c8d20 + 8000ecfc: 00200793 li a5,2 + 8000ed00: 00050493 mv s1,a0 + 8000ed04: 001be417 auipc s0,0x1be + 8000ed08: 95c44403 lbu s0,-1700(s0) # 801cc660 + 8000ed0c: 0ef70463 beq a4,a5,8000edf4 <_Z11MakeFiltersi+0x178> + 8000ed10: 01e507b7 lui a5,0x1e50 + 8000ed14: 001bd717 auipc a4,0x1bd + 8000ed18: f2f72223 sw a5,-220(a4) # 801cbc38 <_ZL7mrindex> + 8000ed1c: 08040e63 beqz s0,8000edb8 <_Z11MakeFiltersi+0x13c> + 8000ed20: 00caf537 lui a0,0xcaf + 8000ed24: 47950513 addi a0,a0,1145 # caf479 <_entry_offset+0xcaf479> + 8000ed28: 00048593 mv a1,s1 + 8000ed2c: 00d51513 slli a0,a0,0xd + 8000ed30: 0f02b0ef jal ra,80039e20 <__divdi3> + 8000ed34: 001bd797 auipc a5,0x1bd + 8000ed38: f0a7a423 sw a0,-248(a5) # 801cbc3c <_ZL7mrratio> + 8000ed3c: 0000c7b7 lui a5,0xc + 8000ed40: b8078793 addi a5,a5,-1152 # bb80 <_entry_offset+0xbb80> + 8000ed44: 00803433 snez s0,s0 + 8000ed48: 0af48263 beq s1,a5,8000edec <_Z11MakeFiltersi+0x170> + 8000ed4c: 000177b7 lui a5,0x17 + 8000ed50: 70078793 addi a5,a5,1792 # 17700 <_entry_offset+0x17700> + 8000ed54: 00f49663 bne s1,a5,8000ed60 <_Z11MakeFiltersi+0xe4> + 8000ed58: 00446413 ori s0,s0,4 + 8000ed5c: 0004041b sext.w s0,s0 + 8000ed60: 00341413 slli s0,s0,0x3 + 8000ed64: 06010793 addi a5,sp,96 + 8000ed68: 008787b3 add a5,a5,s0 + 8000ed6c: fa07b683 ld a3,-96(a5) + 8000ed70: 000b1717 auipc a4,0xb1 + 8000ed74: 67070713 addi a4,a4,1648 # 800c03e0 <_ZL6coeffs> + 8000ed78: 000b2797 auipc a5,0xb2 + 8000ed7c: df478793 addi a5,a5,-524 # 800c0b6c <_ZL6coeffs+0x78c> + 8000ed80: 000b2597 auipc a1,0xb2 + 8000ed84: a2458593 addi a1,a1,-1500 # 800c07a4 <_ZL6coeffs+0x3c4> + 8000ed88: 0006a603 lw a2,0(a3) + 8000ed8c: ffc78793 addi a5,a5,-4 + 8000ed90: 00468693 addi a3,a3,4 + 8000ed94: 00c7a223 sw a2,4(a5) + 8000ed98: 00c72023 sw a2,0(a4) + 8000ed9c: 00470713 addi a4,a4,4 + 8000eda0: feb794e3 bne a5,a1,8000ed88 <_Z11MakeFiltersi+0x10c> + 8000eda4: 07813083 ld ra,120(sp) + 8000eda8: 07013403 ld s0,112(sp) + 8000edac: 06813483 ld s1,104(sp) + 8000edb0: 08010113 addi sp,sp,128 + 8000edb4: 00008067 ret + 8000edb8: 001bd797 auipc a5,0x1bd + 8000edbc: e607a783 lw a5,-416(a5) # 801cbc18 + 8000edc0: 10078263 beqz a5,8000eec4 <_Z11MakeFiltersi+0x248> + 8000edc4: 00048593 mv a1,s1 + 8000edc8: 00038517 auipc a0,0x38 + 8000edcc: b9853503 ld a0,-1128(a0) # 80046960 + 8000edd0: 0502b0ef jal ra,80039e20 <__divdi3> + 8000edd4: 001bd797 auipc a5,0x1bd + 8000edd8: e6a7a423 sw a0,-408(a5) # 801cbc3c <_ZL7mrratio> + 8000eddc: 0000c7b7 lui a5,0xc + 8000ede0: b8078793 addi a5,a5,-1152 # bb80 <_entry_offset+0xbb80> + 8000ede4: 00803433 snez s0,s0 + 8000ede8: f6f492e3 bne s1,a5,8000ed4c <_Z11MakeFiltersi+0xd0> + 8000edec: 00246413 ori s0,s0,2 + 8000edf0: f71ff06f j 8000ed60 <_Z11MakeFiltersi+0xe4> + 8000edf4: 040107b7 lui a5,0x4010 + 8000edf8: 001bd717 auipc a4,0x1bd + 8000edfc: e4f72023 sw a5,-448(a4) # 801cbc38 <_ZL7mrindex> + 8000ee00: 08040c63 beqz s0,8000ee98 <_Z11MakeFiltersi+0x21c> + 8000ee04: 00caf537 lui a0,0xcaf + 8000ee08: 47950513 addi a0,a0,1145 # caf479 <_entry_offset+0xcaf479> + 8000ee0c: 00048593 mv a1,s1 + 8000ee10: 00d51513 slli a0,a0,0xd + 8000ee14: 00c2b0ef jal ra,80039e20 <__divdi3> + 8000ee18: 001bd797 auipc a5,0x1bd + 8000ee1c: e2a7a223 sw a0,-476(a5) # 801cbc3c <_ZL7mrratio> + 8000ee20: 00100413 li s0,1 + 8000ee24: 0000c7b7 lui a5,0xc + 8000ee28: b8078793 addi a5,a5,-1152 # bb80 <_entry_offset+0xbb80> + 8000ee2c: 0af48a63 beq s1,a5,8000eee0 <_Z11MakeFiltersi+0x264> + 8000ee30: 000177b7 lui a5,0x17 + 8000ee34: 70078793 addi a5,a5,1792 # 17700 <_entry_offset+0x17700> + 8000ee38: 00f49463 bne s1,a5,8000ee40 <_Z11MakeFiltersi+0x1c4> + 8000ee3c: 00446413 ori s0,s0,4 + 8000ee40: 06010713 addi a4,sp,96 + 8000ee44: 00341793 slli a5,s0,0x3 + 8000ee48: 00f707b3 add a5,a4,a5 + 8000ee4c: fd07b683 ld a3,-48(a5) + 8000ee50: 000b2717 auipc a4,0xb2 + 8000ee54: d2070713 addi a4,a4,-736 # 800c0b70 <_ZL9sq2coeffs> + 8000ee58: 000b3797 auipc a5,0xb3 + 8000ee5c: d1478793 addi a5,a5,-748 # 800c1b6c <_ZL9sq2coeffs+0xffc> + 8000ee60: 000b2597 auipc a1,0xb2 + 8000ee64: 50c58593 addi a1,a1,1292 # 800c136c <_ZL9sq2coeffs+0x7fc> + 8000ee68: 0006a603 lw a2,0(a3) + 8000ee6c: ffc78793 addi a5,a5,-4 + 8000ee70: 00468693 addi a3,a3,4 + 8000ee74: 00c7a223 sw a2,4(a5) + 8000ee78: 00c72023 sw a2,0(a4) + 8000ee7c: 00470713 addi a4,a4,4 + 8000ee80: fef594e3 bne a1,a5,8000ee68 <_Z11MakeFiltersi+0x1ec> + 8000ee84: 07813083 ld ra,120(sp) + 8000ee88: 07013403 ld s0,112(sp) + 8000ee8c: 06813483 ld s1,104(sp) + 8000ee90: 08010113 addi sp,sp,128 + 8000ee94: 00008067 ret + 8000ee98: 001bd417 auipc s0,0x1bd + 8000ee9c: d8042403 lw s0,-640(s0) # 801cbc18 + 8000eea0: 04040463 beqz s0,8000eee8 <_Z11MakeFiltersi+0x26c> + 8000eea4: 00050593 mv a1,a0 + 8000eea8: 00038517 auipc a0,0x38 + 8000eeac: ab853503 ld a0,-1352(a0) # 80046960 + 8000eeb0: 7712a0ef jal ra,80039e20 <__divdi3> + 8000eeb4: 001bd797 auipc a5,0x1bd + 8000eeb8: d8a7a423 sw a0,-632(a5) # 801cbc3c <_ZL7mrratio> + 8000eebc: 00000413 li s0,0 + 8000eec0: f65ff06f j 8000ee24 <_Z11MakeFiltersi+0x1a8> + 8000eec4: 00050593 mv a1,a0 + 8000eec8: 00038517 auipc a0,0x38 + 8000eecc: aa053503 ld a0,-1376(a0) # 80046968 + 8000eed0: 7512a0ef jal ra,80039e20 <__divdi3> + 8000eed4: 001bd797 auipc a5,0x1bd + 8000eed8: d6a7a423 sw a0,-664(a5) # 801cbc3c <_ZL7mrratio> + 8000eedc: e61ff06f j 8000ed3c <_Z11MakeFiltersi+0xc0> + 8000eee0: 00246413 ori s0,s0,2 + 8000eee4: f5dff06f j 8000ee40 <_Z11MakeFiltersi+0x1c4> + 8000eee8: 00048593 mv a1,s1 + 8000eeec: 00038517 auipc a0,0x38 + 8000eef0: a7c53503 ld a0,-1412(a0) # 80046968 + 8000eef4: 72d2a0ef jal ra,80039e20 <__divdi3> + 8000eef8: 001bd797 auipc a5,0x1bd + 8000eefc: d4a7a223 sw a0,-700(a5) # 801cbc3c <_ZL7mrratio> + 8000ef00: f25ff06f j 8000ee24 <_Z11MakeFiltersi+0x1a8> + +000000008000ef04 <_ZL11TrainerReadj>: + 8000ef04: 1ff57793 andi a5,a0,511 + 8000ef08: 001bd517 auipc a0,0x1bd + 8000ef0c: d7853503 ld a0,-648(a0) # 801cbc80 + 8000ef10: 00f50533 add a0,a0,a5 + 8000ef14: 00054503 lbu a0,0(a0) + 8000ef18: 00008067 ret + +000000008000ef1c <_Z6iNESGI2GI>: + 8000ef1c: fd010113 addi sp,sp,-48 + 8000ef20: 02113423 sd ra,40(sp) + 8000ef24: 02813023 sd s0,32(sp) + 8000ef28: 00913c23 sd s1,24(sp) + 8000ef2c: 01213823 sd s2,16(sp) + 8000ef30: 01313423 sd s3,8(sp) + 8000ef34: 01413023 sd s4,0(sp) + 8000ef38: 00200793 li a5,2 + 8000ef3c: 02f50a63 beq a0,a5,8000ef70 <_Z6iNESGI2GI+0x54> + 8000ef40: 00300793 li a5,3 + 8000ef44: 10f50063 beq a0,a5,8000f044 <_Z6iNESGI2GI+0x128> + 8000ef48: 00100793 li a5,1 + 8000ef4c: 0cf50663 beq a0,a5,8000f018 <_Z6iNESGI2GI+0xfc> + 8000ef50: 02813083 ld ra,40(sp) + 8000ef54: 02013403 ld s0,32(sp) + 8000ef58: 01813483 ld s1,24(sp) + 8000ef5c: 01013903 ld s2,16(sp) + 8000ef60: 00813983 ld s3,8(sp) + 8000ef64: 00013a03 ld s4,0(sp) + 8000ef68: 03010113 addi sp,sp,48 + 8000ef6c: 00008067 ret + 8000ef70: 0003b597 auipc a1,0x3b + 8000ef74: 1905a583 lw a1,400(a1) # 8004a100 <_ZL10CHRRAMSize> + 8000ef78: fff00793 li a5,-1 + 8000ef7c: 14f59c63 bne a1,a5,8000f0d4 <_Z6iNESGI2GI+0x1b8> + 8000ef80: 000b3797 auipc a5,0xb3 + 8000ef84: 3f07b783 ld a5,1008(a5) # 800c2370 <_ZL8iNESCart> + 8000ef88: 00078463 beqz a5,8000ef90 <_Z6iNESGI2GI+0x74> + 8000ef8c: 000780e7 jalr a5 + 8000ef90: 001bd917 auipc s2,0x1bd + 8000ef94: cf090913 addi s2,s2,-784 # 801cbc80 + 8000ef98: 00093783 ld a5,0(s2) + 8000ef9c: fa078ae3 beqz a5,8000ef50 <_Z6iNESGI2GI+0x34> + 8000efa0: 00000413 li s0,0 + 8000efa4: 00007a37 lui s4,0x7 + 8000efa8: 20000993 li s3,512 + 8000efac: 0080006f j 8000efb4 <_Z6iNESGI2GI+0x98> + 8000efb0: fb3400e3 beq s0,s3,8000ef50 <_Z6iNESGI2GI+0x34> + 8000efb4: 008787b3 add a5,a5,s0 + 8000efb8: 0007c583 lbu a1,0(a5) + 8000efbc: 008a04bb addw s1,s4,s0 + 8000efc0: 00048513 mv a0,s1 + 8000efc4: d05f10ef jal ra,80000cc8 <_Z9X6502_DMWjh> + 8000efc8: 00048513 mv a0,s1 + 8000efcc: c6df10ef jal ra,80000c38 <_Z9X6502_DMRj> + 8000efd0: 00093783 ld a5,0(s2) + 8000efd4: 00878733 add a4,a5,s0 + 8000efd8: 00074703 lbu a4,0(a4) + 8000efdc: 00140413 addi s0,s0,1 + 8000efe0: fca708e3 beq a4,a0,8000efb0 <_Z6iNESGI2GI+0x94> + 8000efe4: 02013403 ld s0,32(sp) + 8000efe8: 02813083 ld ra,40(sp) + 8000efec: 01813483 ld s1,24(sp) + 8000eff0: 01013903 ld s2,16(sp) + 8000eff4: 00813983 ld s3,8(sp) + 8000eff8: 00013a03 ld s4,0(sp) + 8000effc: 000075b7 lui a1,0x7 + 8000f000: 00000617 auipc a2,0x0 + 8000f004: f0460613 addi a2,a2,-252 # 8000ef04 <_ZL11TrainerReadj> + 8000f008: 1ff58593 addi a1,a1,511 # 71ff <_entry_offset+0x71ff> + 8000f00c: 00007537 lui a0,0x7 + 8000f010: 03010113 addi sp,sp,48 + 8000f014: 2092406f j 80033a1c <_Z14SetReadHandleriiPFhjE> + 8000f018: 000b3317 auipc t1,0xb3 + 8000f01c: 36033303 ld t1,864(t1) # 800c2378 <_ZL8iNESCart+0x8> + 8000f020: f20308e3 beqz t1,8000ef50 <_Z6iNESGI2GI+0x34> + 8000f024: 02013403 ld s0,32(sp) + 8000f028: 02813083 ld ra,40(sp) + 8000f02c: 01813483 ld s1,24(sp) + 8000f030: 01013903 ld s2,16(sp) + 8000f034: 00813983 ld s3,8(sp) + 8000f038: 00013a03 ld s4,0(sp) + 8000f03c: 03010113 addi sp,sp,48 + 8000f040: 00030067 jr t1 + 8000f044: 000b3797 auipc a5,0xb3 + 8000f048: 33c7b783 ld a5,828(a5) # 800c2380 <_ZL8iNESCart+0x10> + 8000f04c: 00078463 beqz a5,8000f054 <_Z6iNESGI2GI+0x138> + 8000f050: 000780e7 jalr a5 + 8000f054: 001bd517 auipc a0,0x1bd + 8000f058: c0453503 ld a0,-1020(a0) # 801cbc58 + 8000f05c: 00050863 beqz a0,8000f06c <_Z6iNESGI2GI+0x150> + 8000f060: 3582b0ef jal ra,8003a3b8 + 8000f064: 001bd797 auipc a5,0x1bd + 8000f068: be07ba23 sd zero,-1036(a5) # 801cbc58 + 8000f06c: 001bd517 auipc a0,0x1bd + 8000f070: bfc53503 ld a0,-1028(a0) # 801cbc68 + 8000f074: 00050863 beqz a0,8000f084 <_Z6iNESGI2GI+0x168> + 8000f078: 3402b0ef jal ra,8003a3b8 + 8000f07c: 001bd797 auipc a5,0x1bd + 8000f080: be07b623 sd zero,-1044(a5) # 801cbc68 + 8000f084: 001bd517 auipc a0,0x1bd + 8000f088: bfc53503 ld a0,-1028(a0) # 801cbc80 + 8000f08c: 00050863 beqz a0,8000f09c <_Z6iNESGI2GI+0x180> + 8000f090: 3282b0ef jal ra,8003a3b8 + 8000f094: 001bd797 auipc a5,0x1bd + 8000f098: be07b623 sd zero,-1044(a5) # 801cbc80 + 8000f09c: 001bd517 auipc a0,0x1bd + 8000f0a0: ba453503 ld a0,-1116(a0) # 801cbc40 + 8000f0a4: ea0506e3 beqz a0,8000ef50 <_Z6iNESGI2GI+0x34> + 8000f0a8: 3102b0ef jal ra,8003a3b8 + 8000f0ac: 02813083 ld ra,40(sp) + 8000f0b0: 02013403 ld s0,32(sp) + 8000f0b4: 001bd797 auipc a5,0x1bd + 8000f0b8: b807b623 sd zero,-1140(a5) # 801cbc40 + 8000f0bc: 01813483 ld s1,24(sp) + 8000f0c0: 01013903 ld s2,16(sp) + 8000f0c4: 00813983 ld s3,8(sp) + 8000f0c8: 00013a03 ld s4,0(sp) + 8000f0cc: 03010113 addi sp,sp,48 + 8000f0d0: 00008067 ret + 8000f0d4: 00000613 li a2,0 + 8000f0d8: 001bd517 auipc a0,0x1bd + 8000f0dc: b9053503 ld a0,-1136(a0) # 801cbc68 + 8000f0e0: 675240ef jal ra,80033f54 <_Z15FCEU_MemoryRandPhjb> + 8000f0e4: 000b3797 auipc a5,0xb3 + 8000f0e8: 28c7b783 ld a5,652(a5) # 800c2370 <_ZL8iNESCart> + 8000f0ec: ea0790e3 bnez a5,8000ef8c <_Z6iNESGI2GI+0x70> + 8000f0f0: ea1ff06f j 8000ef90 <_Z6iNESGI2GI+0x74> + +000000008000f0f4 <_Z8CheckBady>: + 8000f0f4: 00038717 auipc a4,0x38 + 8000f0f8: 87c73703 ld a4,-1924(a4) # 80046970 + 8000f0fc: 00034797 auipc a5,0x34 + 8000f100: dec78793 addi a5,a5,-532 # 80042ee8 <_ZL12BadROMImages+0x18> + 8000f104: 00033597 auipc a1,0x33 + 8000f108: cd458593 addi a1,a1,-812 # 80041dd8 <_ZL9C96000PAL+0x3c8> + 8000f10c: 00a70c63 beq a4,a0,8000f124 <_Z8CheckBady+0x30> + 8000f110: 0087b583 ld a1,8(a5) + 8000f114: 00058e63 beqz a1,8000f130 <_Z8CheckBady+0x3c> + 8000f118: 0007b703 ld a4,0(a5) + 8000f11c: 01878793 addi a5,a5,24 + 8000f120: fea718e3 bne a4,a0,8000f110 <_Z8CheckBady+0x1c> + 8000f124: 00033517 auipc a0,0x33 + 8000f128: ccc50513 addi a0,a0,-820 # 80041df0 <_ZL9C96000PAL+0x3e0> + 8000f12c: 41c2c06f j 8003b548 + 8000f130: 00008067 ret + +000000008000f134 <_Z8iNESLoadPKcP8FCEUFILEi>: + 8000f134: c1010113 addi sp,sp,-1008 + 8000f138: 3c913c23 sd s1,984(sp) + 8000f13c: 000b3497 auipc s1,0xb3 + 8000f140: 2b448493 addi s1,s1,692 # 800c23f0 + 8000f144: 3e813023 sd s0,992(sp) + 8000f148: 3d213823 sd s2,976(sp) + 8000f14c: 3d313423 sd s3,968(sp) + 8000f150: 00058693 mv a3,a1 + 8000f154: 00058413 mv s0,a1 + 8000f158: 00050913 mv s2,a0 + 8000f15c: 00060993 mv s3,a2 + 8000f160: 00100593 li a1,1 + 8000f164: 01000613 li a2,16 + 8000f168: 00048513 mv a0,s1 + 8000f16c: 3e113423 sd ra,1000(sp) + 8000f170: 3d413023 sd s4,960(sp) + 8000f174: 3b513c23 sd s5,952(sp) + 8000f178: 3b613823 sd s6,944(sp) + 8000f17c: 3b713423 sd s7,936(sp) + 8000f180: 3b813023 sd s8,928(sp) + 8000f184: 39913c23 sd s9,920(sp) + 8000f188: 39a13823 sd s10,912(sp) + 8000f18c: 39b13423 sd s11,904(sp) + 8000f190: ca0f10ef jal ra,80000630 <_Z10FCEU_freadPvmmP8FCEUFILE> + 8000f194: 01000793 li a5,16 + 8000f198: 04f50463 beq a0,a5,8000f1e0 <_Z8iNESLoadPKcP8FCEUFILEi+0xac> + 8000f19c: 00000d93 li s11,0 + 8000f1a0: 3e813083 ld ra,1000(sp) + 8000f1a4: 3e013403 ld s0,992(sp) + 8000f1a8: 3d813483 ld s1,984(sp) + 8000f1ac: 3d013903 ld s2,976(sp) + 8000f1b0: 3c813983 ld s3,968(sp) + 8000f1b4: 3c013a03 ld s4,960(sp) + 8000f1b8: 3b813a83 ld s5,952(sp) + 8000f1bc: 3b013b03 ld s6,944(sp) + 8000f1c0: 3a813b83 ld s7,936(sp) + 8000f1c4: 3a013c03 ld s8,928(sp) + 8000f1c8: 39813c83 ld s9,920(sp) + 8000f1cc: 39013d03 ld s10,912(sp) + 8000f1d0: 000d8513 mv a0,s11 + 8000f1d4: 38813d83 ld s11,904(sp) + 8000f1d8: 3f010113 addi sp,sp,1008 + 8000f1dc: 00008067 ret + 8000f1e0: 00400613 li a2,4 + 8000f1e4: 00033597 auipc a1,0x33 + 8000f1e8: cbc58593 addi a1,a1,-836 # 80041ea0 <_ZL9C96000PAL+0x490> + 8000f1ec: 00048513 mv a0,s1 + 8000f1f0: 3fc2c0ef jal ra,8003b5ec + 8000f1f4: 00050d93 mv s11,a0 + 8000f1f8: fa0512e3 bnez a0,8000f19c <_Z8iNESLoadPKcP8FCEUFILEi+0x68> + 8000f1fc: 00800613 li a2,8 + 8000f200: 00033597 auipc a1,0x33 + 8000f204: ca858593 addi a1,a1,-856 # 80041ea8 <_ZL9C96000PAL+0x498> + 8000f208: 000b3517 auipc a0,0xb3 + 8000f20c: 1ef50513 addi a0,a0,495 # 800c23f7 + 8000f210: 3dc2c0ef jal ra,8003b5ec + 8000f214: 58050663 beqz a0,8000f7a0 <_Z8iNESLoadPKcP8FCEUFILEi+0x66c> + 8000f218: 00900613 li a2,9 + 8000f21c: 00033597 auipc a1,0x33 + 8000f220: c9c58593 addi a1,a1,-868 # 80041eb8 <_ZL9C96000PAL+0x4a8> + 8000f224: 000b3517 auipc a0,0xb3 + 8000f228: 1d350513 addi a0,a0,467 # 800c23f7 + 8000f22c: 3c02c0ef jal ra,8003b5ec + 8000f230: 56050863 beqz a0,8000f7a0 <_Z8iNESLoadPKcP8FCEUFILEi+0x66c> + 8000f234: 00400613 li a2,4 + 8000f238: 00033597 auipc a1,0x33 + 8000f23c: c9058593 addi a1,a1,-880 # 80041ec8 <_ZL9C96000PAL+0x4b8> + 8000f240: 000b3517 auipc a0,0xb3 + 8000f244: 1ba50513 addi a0,a0,442 # 800c23fa + 8000f248: 3a42c0ef jal ra,8003b5ec + 8000f24c: 66050663 beqz a0,8000f8b8 <_Z8iNESLoadPKcP8FCEUFILEi+0x784> + 8000f250: 000b3a17 auipc s4,0xb3 + 8000f254: 120a0a13 addi s4,s4,288 # 800c2370 <_ZL8iNESCart> + 8000f258: 08000613 li a2,128 + 8000f25c: 00000593 li a1,0 + 8000f260: 000a0513 mv a0,s4 + 8000f264: 7c42c0ef jal ra,8003ba28 + 8000f268: 0074c703 lbu a4,7(s1) + 8000f26c: 001bd797 auipc a5,0x1bd + 8000f270: a0c78793 addi a5,a5,-1524 # 801cbc78 + 8000f274: 00800593 li a1,8 + 8000f278: 00c77693 andi a3,a4,12 + 8000f27c: ff868693 addi a3,a3,-8 + 8000f280: 0016b693 seqz a3,a3 + 8000f284: 00c77613 andi a2,a4,12 + 8000f288: 00d7a023 sw a3,0(a5) + 8000f28c: 56b61a63 bne a2,a1,8000f800 <_Z8iNESLoadPKcP8FCEUFILEi+0x6cc> + 8000f290: 00a4c683 lbu a3,10(s1) + 8000f294: 00100593 li a1,1 + 8000f298: 04ba2823 sw a1,80(s4) + 8000f29c: 00f6f513 andi a0,a3,15 + 8000f2a0: 00000593 li a1,0 + 8000f2a4: 00050663 beqz a0,8000f2b0 <_Z8iNESLoadPKcP8FCEUFILEi+0x17c> + 8000f2a8: 04000593 li a1,64 + 8000f2ac: 00a595bb sllw a1,a1,a0 + 8000f2b0: 04ba2c23 sw a1,88(s4) + 8000f2b4: 0f06f593 andi a1,a3,240 + 8000f2b8: 00000513 li a0,0 + 8000f2bc: 00058863 beqz a1,8000f2cc <_Z8iNESLoadPKcP8FCEUFILEi+0x198> + 8000f2c0: 0046d69b srliw a3,a3,0x4 + 8000f2c4: 04000513 li a0,64 + 8000f2c8: 00d5153b sllw a0,a0,a3 + 8000f2cc: 00b4c683 lbu a3,11(s1) + 8000f2d0: 04aa2e23 sw a0,92(s4) + 8000f2d4: 00000593 li a1,0 + 8000f2d8: 00f6f513 andi a0,a3,15 + 8000f2dc: 00050663 beqz a0,8000f2e8 <_Z8iNESLoadPKcP8FCEUFILEi+0x1b4> + 8000f2e0: 04000593 li a1,64 + 8000f2e4: 00a595bb sllw a1,a1,a0 + 8000f2e8: 06ba2023 sw a1,96(s4) + 8000f2ec: 0f06f593 andi a1,a3,240 + 8000f2f0: 00000893 li a7,0 + 8000f2f4: 5e059c63 bnez a1,8000f8ec <_Z8iNESLoadPKcP8FCEUFILEi+0x7b8> + 8000f2f8: 0064c683 lbu a3,6(s1) + 8000f2fc: 0084c583 lbu a1,8(s1) + 8000f300: 0f077813 andi a6,a4,240 + 8000f304: 4046d71b sraiw a4,a3,0x4 + 8000f308: 01076733 or a4,a4,a6 + 8000f30c: 00001837 lui a6,0x1 + 8000f310: 0085951b slliw a0,a1,0x8 + 8000f314: f0080813 addi a6,a6,-256 # f00 <_entry_offset+0xf00> + 8000f318: 01057533 and a0,a0,a6 + 8000f31c: 4045d59b sraiw a1,a1,0x4 + 8000f320: 001bda97 auipc s5,0x1bd + 8000f324: 954a8a93 addi s5,s5,-1708 # 801cbc74 <_ZL8MapperNo> + 8000f328: 00a76733 or a4,a4,a0 + 8000f32c: 071a2223 sw a7,100(s4) + 8000f330: 04ba2a23 sw a1,84(s4) + 8000f334: 00eaa023 sw a4,0(s5) + 8000f338: 0086f713 andi a4,a3,8 + 8000f33c: 001bdc97 auipc s9,0x1bd + 8000f340: 914c8c93 addi s9,s9,-1772 # 801cbc50 + 8000f344: 4a070863 beqz a4,8000f7f4 <_Z8iNESLoadPKcP8FCEUFILEi+0x6c0> + 8000f348: 00200713 li a4,2 + 8000f34c: 00ec8023 sb a4,0(s9) + 8000f350: 0044c703 lbu a4,4(s1) + 8000f354: 00800693 li a3,8 + 8000f358: 00070b1b sext.w s6,a4 + 8000f35c: 46d61c63 bne a2,a3,8000f7d4 <_Z8iNESLoadPKcP8FCEUFILEi+0x6a0> + 8000f360: 0094c703 lbu a4,9(s1) + 8000f364: 000016b7 lui a3,0x1 + 8000f368: f0068693 addi a3,a3,-256 # f00 <_entry_offset+0xf00> + 8000f36c: 0087171b slliw a4,a4,0x8 + 8000f370: 00d77733 and a4,a4,a3 + 8000f374: 00eb6b33 or s6,s6,a4 + 8000f378: 000b0b1b sext.w s6,s6 + 8000f37c: 000b0513 mv a0,s6 + 8000f380: 1d0030ef jal ra,80012550 <_Z6uppow2j> + 8000f384: 001bd797 auipc a5,0x1bd + 8000f388: 8f478793 addi a5,a5,-1804 # 801cbc78 + 8000f38c: 0007a703 lw a4,0(a5) + 8000f390: 001bdb97 auipc s7,0x1bd + 8000f394: 8d0b8b93 addi s7,s7,-1840 # 801cbc60 + 8000f398: 00aba023 sw a0,0(s7) + 8000f39c: 0054c503 lbu a0,5(s1) + 8000f3a0: 02070063 beqz a4,8000f3c0 <_Z8iNESLoadPKcP8FCEUFILEi+0x28c> + 8000f3a4: 0094c703 lbu a4,9(s1) + 8000f3a8: 000016b7 lui a3,0x1 + 8000f3ac: f0068693 addi a3,a3,-256 # f00 <_entry_offset+0xf00> + 8000f3b0: 0047171b slliw a4,a4,0x4 + 8000f3b4: 00d77733 and a4,a4,a3 + 8000f3b8: 00e56533 or a0,a0,a4 + 8000f3bc: 0005051b sext.w a0,a0 + 8000f3c0: 190030ef jal ra,80012550 <_Z6uppow2j> + 8000f3c4: 000aa703 lw a4,0(s5) + 8000f3c8: 001bdc17 auipc s8,0x1bd + 8000f3cc: 8a8c0c13 addi s8,s8,-1880 # 801cbc70 + 8000f3d0: 00ac2023 sw a0,0(s8) + 8000f3d4: 03500693 li a3,53 + 8000f3d8: 16d708e3 beq a4,a3,8000fd48 <_Z8iNESLoadPKcP8FCEUFILEi+0xc14> + 8000f3dc: 0c600693 li a3,198 + 8000f3e0: 16d704e3 beq a4,a3,8000fd48 <_Z8iNESLoadPKcP8FCEUFILEi+0xc14> + 8000f3e4: 0e400693 li a3,228 + 8000f3e8: 16d700e3 beq a4,a3,8000fd48 <_Z8iNESLoadPKcP8FCEUFILEi+0xc14> + 8000f3ec: ddd70713 addi a4,a4,-547 + 8000f3f0: 00e037b3 snez a5,a4 + 8000f3f4: 00f13423 sd a5,8(sp) + 8000f3f8: 000ba503 lw a0,0(s7) + 8000f3fc: 001bdd17 auipc s10,0x1bd + 8000f400: 85cd0d13 addi s10,s10,-1956 # 801cbc58 + 8000f404: 00e5151b slliw a0,a0,0xe + 8000f408: 0dc030ef jal ra,800124e4 <_Z11FCEU_mallocj> + 8000f40c: 00ad3023 sd a0,0(s10) + 8000f410: d80506e3 beqz a0,8000f19c <_Z8iNESLoadPKcP8FCEUFILEi+0x68> + 8000f414: 000ba603 lw a2,0(s7) + 8000f418: 0ff00593 li a1,255 + 8000f41c: 00e6161b slliw a2,a2,0xe + 8000f420: 02061613 slli a2,a2,0x20 + 8000f424: 02065613 srli a2,a2,0x20 + 8000f428: 6002c0ef jal ra,8003ba28 + 8000f42c: 000c2503 lw a0,0(s8) + 8000f430: 7e051063 bnez a0,8000fc10 <_Z8iNESLoadPKcP8FCEUFILEi+0xadc> + 8000f434: 0064c783 lbu a5,6(s1) + 8000f438: 0047f793 andi a5,a5,4 + 8000f43c: 000792e3 bnez a5,8000fc40 <_Z8iNESLoadPKcP8FCEUFILEi+0xb0c> + 8000f440: 7f1000ef jal ra,80010430 <_Z16ResetCartMappingv> + 8000f444: 000ba603 lw a2,0(s7) + 8000f448: 000d3583 ld a1,0(s10) + 8000f44c: 00000513 li a0,0 + 8000f450: 00e6161b slliw a2,a2,0xe + 8000f454: 00000693 li a3,0 + 8000f458: 09c010ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8000f45c: 00813783 ld a5,8(sp) + 8000f460: 000d3503 ld a0,0(s10) + 8000f464: 000b0613 mv a2,s6 + 8000f468: 00078463 beqz a5,8000f470 <_Z8iNESLoadPKcP8FCEUFILEi+0x33c> + 8000f46c: 000be603 lwu a2,0(s7) + 8000f470: 00040693 mv a3,s0 + 8000f474: 000045b7 lui a1,0x4 + 8000f478: 9b8f10ef jal ra,80000630 <_Z10FCEU_freadPvmmP8FCEUFILE> + 8000f47c: 000c2603 lw a2,0(s8) + 8000f480: 7e061e63 bnez a2,8000fc7c <_Z8iNESLoadPKcP8FCEUFILEi+0xb48> + 8000f484: 02810513 addi a0,sp,40 + 8000f488: 4f9010ef jal ra,80011180 <_Z10md5_startsP11md5_context> + 8000f48c: 000ba603 lw a2,0(s7) + 8000f490: 000d3583 ld a1,0(s10) + 8000f494: 02810513 addi a0,sp,40 + 8000f498: 00e6161b slliw a2,a2,0xe + 8000f49c: 6b5020ef jal ra,80012350 <_Z10md5_updateP11md5_contextPhj> + 8000f4a0: 000c2603 lw a2,0(s8) + 8000f4a4: 7c061063 bnez a2,8000fc64 <_Z8iNESLoadPKcP8FCEUFILEi+0xb30> + 8000f4a8: 000b3597 auipc a1,0xb3 + 8000f4ac: f3058593 addi a1,a1,-208 # 800c23d8 <_ZL8iNESCart+0x68> + 8000f4b0: 02810513 addi a0,sp,40 + 8000f4b4: 6a9020ef jal ra,8001235c <_Z10md5_finishP11md5_contextPh> + 8000f4b8: 001bd417 auipc s0,0x1bd + 8000f4bc: 19040413 addi s0,s0,400 # 801cc648 + 8000f4c0: 00043503 ld a0,0(s0) + 8000f4c4: 000b3597 auipc a1,0xb3 + 8000f4c8: f1458593 addi a1,a1,-236 # 800c23d8 <_ZL8iNESCart+0x68> + 8000f4cc: 01000613 li a2,16 + 8000f4d0: 02450513 addi a0,a0,36 + 8000f4d4: 6802c0ef jal ra,8003bb54 + 8000f4d8: 00813783 ld a5,8(sp) + 8000f4dc: 000b059b sext.w a1,s6 + 8000f4e0: 00078463 beqz a5,8000f4e8 <_Z8iNESLoadPKcP8FCEUFILEi+0x3b4> + 8000f4e4: 000ba583 lw a1,0(s7) + 8000f4e8: 00033517 auipc a0,0x33 + 8000f4ec: 9f050513 addi a0,a0,-1552 # 80041ed8 <_ZL9C96000PAL+0x4c8> + 8000f4f0: 0582c0ef jal ra,8003b548 + 8000f4f4: 0054c583 lbu a1,5(s1) + 8000f4f8: 00033517 auipc a0,0x33 + 8000f4fc: 9f850513 addi a0,a0,-1544 # 80041ef0 <_ZL9C96000PAL+0x4e0> + 8000f500: 000b3d97 auipc s11,0xb3 + 8000f504: ed8d8d93 addi s11,s11,-296 # 800c23d8 <_ZL8iNESCart+0x68> + 8000f508: 0402c0ef jal ra,8003b548 + 8000f50c: 00033517 auipc a0,0x33 + 8000f510: 9fc50513 addi a0,a0,-1540 # 80041f08 <_ZL9C96000PAL+0x4f8> + 8000f514: 0342c0ef jal ra,8003b548 + 8000f518: 000b3b17 auipc s6,0xb3 + 8000f51c: e58b0b13 addi s6,s6,-424 # 800c2370 <_ZL8iNESCart> + 8000f520: 000b3d17 auipc s10,0xb3 + 8000f524: ec8d0d13 addi s10,s10,-312 # 800c23e8 <_ZL8iNESCart+0x78> + 8000f528: 00033b97 auipc s7,0x33 + 8000f52c: 9f0b8b93 addi s7,s7,-1552 # 80041f18 <_ZL9C96000PAL+0x508> + 8000f530: 000dc583 lbu a1,0(s11) + 8000f534: 000b8513 mv a0,s7 + 8000f538: 001d8d93 addi s11,s11,1 + 8000f53c: 00c2c0ef jal ra,8003b548 + 8000f540: ffbd18e3 bne s10,s11,8000f530 <_Z8iNESLoadPKcP8FCEUFILEi+0x3fc> + 8000f544: 00037517 auipc a0,0x37 + 8000f548: 04450513 addi a0,a0,68 # 80046588 + 8000f54c: 7fd2b0ef jal ra,8003b548 + 8000f550: 000aa583 lw a1,0(s5) + 8000f554: 00039797 auipc a5,0x39 + 8000f558: 69c78793 addi a5,a5,1692 # 80048bf0 + 8000f55c: 00000713 li a4,0 + 8000f560: 0e000613 li a2,224 + 8000f564: 00c0006f j 8000f570 <_Z8iNESLoadPKcP8FCEUFILEi+0x43c> + 8000f568: 0017071b addiw a4,a4,1 + 8000f56c: 0cc70ce3 beq a4,a2,8000fe44 <_Z8iNESLoadPKcP8FCEUFILEi+0xd10> + 8000f570: 0007a683 lw a3,0(a5) + 8000f574: 01878793 addi a5,a5,24 + 8000f578: feb698e3 bne a3,a1,8000f568 <_Z8iNESLoadPKcP8FCEUFILEi+0x434> + 8000f57c: 00171793 slli a5,a4,0x1 + 8000f580: 00e787b3 add a5,a5,a4 + 8000f584: 00039b97 auipc s7,0x39 + 8000f588: 664b8b93 addi s7,s7,1636 # 80048be8 + 8000f58c: 00379793 slli a5,a5,0x3 + 8000f590: 00fb87b3 add a5,s7,a5 + 8000f594: 0007bd03 ld s10,0(a5) + 8000f598: 00033517 auipc a0,0x33 + 8000f59c: 98850513 addi a0,a0,-1656 # 80041f20 <_ZL9C96000PAL+0x510> + 8000f5a0: 7a92b0ef jal ra,8003b548 + 8000f5a4: 000d0593 mv a1,s10 + 8000f5a8: 00033517 auipc a0,0x33 + 8000f5ac: 98850513 addi a0,a0,-1656 # 80041f30 <_ZL9C96000PAL+0x520> + 8000f5b0: 7992b0ef jal ra,8003b548 + 8000f5b4: 000cc783 lbu a5,0(s9) + 8000f5b8: 00200713 li a4,2 + 8000f5bc: 00033597 auipc a1,0x33 + 8000f5c0: 89c58593 addi a1,a1,-1892 # 80041e58 <_ZL9C96000PAL+0x448> + 8000f5c4: 00e78863 beq a5,a4,8000f5d4 <_Z8iNESLoadPKcP8FCEUFILEi+0x4a0> + 8000f5c8: 00033597 auipc a1,0x33 + 8000f5cc: 8a858593 addi a1,a1,-1880 # 80041e70 <_ZL9C96000PAL+0x460> + 8000f5d0: 32078663 beqz a5,8000f8fc <_Z8iNESLoadPKcP8FCEUFILEi+0x7c8> + 8000f5d4: 00033517 auipc a0,0x33 + 8000f5d8: 97450513 addi a0,a0,-1676 # 80041f48 <_ZL9C96000PAL+0x538> + 8000f5dc: 76d2b0ef jal ra,8003b548 + 8000f5e0: 0064c783 lbu a5,6(s1) + 8000f5e4: 00033597 auipc a1,0x33 + 8000f5e8: 8ac58593 addi a1,a1,-1876 # 80041e90 <_ZL9C96000PAL+0x480> + 8000f5ec: 0027f793 andi a5,a5,2 + 8000f5f0: 00079663 bnez a5,8000f5fc <_Z8iNESLoadPKcP8FCEUFILEi+0x4c8> + 8000f5f4: 00033597 auipc a1,0x33 + 8000f5f8: 8a458593 addi a1,a1,-1884 # 80041e98 <_ZL9C96000PAL+0x488> + 8000f5fc: 00033517 auipc a0,0x33 + 8000f600: 95c50513 addi a0,a0,-1700 # 80041f58 <_ZL9C96000PAL+0x548> + 8000f604: 7452b0ef jal ra,8003b548 + 8000f608: 0064c783 lbu a5,6(s1) + 8000f60c: 00033597 auipc a1,0x33 + 8000f610: 88458593 addi a1,a1,-1916 # 80041e90 <_ZL9C96000PAL+0x480> + 8000f614: 0047f793 andi a5,a5,4 + 8000f618: 00079663 bnez a5,8000f624 <_Z8iNESLoadPKcP8FCEUFILEi+0x4f0> + 8000f61c: 00033597 auipc a1,0x33 + 8000f620: 87c58593 addi a1,a1,-1924 # 80041e98 <_ZL9C96000PAL+0x488> + 8000f624: 00033517 auipc a0,0x33 + 8000f628: 94c50513 addi a0,a0,-1716 # 80041f70 <_ZL9C96000PAL+0x560> + 8000f62c: 71d2b0ef jal ra,8003b548 + 8000f630: 001bc797 auipc a5,0x1bc + 8000f634: 64878793 addi a5,a5,1608 # 801cbc78 + 8000f638: 0007a783 lw a5,0(a5) + 8000f63c: 66079e63 bnez a5,8000fcb8 <_Z8iNESLoadPKcP8FCEUFILEi+0xb84> + 8000f640: 001bcd97 auipc s11,0x1bc + 8000f644: 63cd8d93 addi s11,s11,1596 # 801cbc7c + 8000f648: 000da583 lw a1,0(s11) + 8000f64c: 00036517 auipc a0,0x36 + 8000f650: 80450513 addi a0,a0,-2044 # 80044e50 <_ZZL8SetInputvE3moo> + 8000f654: 00050793 mv a5,a0 + 8000f658: 00000713 li a4,0 + 8000f65c: 00100693 li a3,1 + 8000f660: 0007a603 lw a2,0(a5) + 8000f664: 01078793 addi a5,a5,16 + 8000f668: 14b60863 beq a2,a1,8000f7b8 <_Z8iNESLoadPKcP8FCEUFILEi+0x684> + 8000f66c: 0047a683 lw a3,4(a5) + 8000f670: 0017071b addiw a4,a4,1 + 8000f674: fe06d6e3 bgez a3,8000f660 <_Z8iNESLoadPKcP8FCEUFILEi+0x52c> + 8000f678: 0087a603 lw a2,8(a5) + 8000f67c: fe0652e3 bgez a2,8000f660 <_Z8iNESLoadPKcP8FCEUFILEi+0x52c> + 8000f680: 00c7a603 lw a2,12(a5) + 8000f684: fc065ee3 bgez a2,8000f660 <_Z8iNESLoadPKcP8FCEUFILEi+0x52c> + 8000f688: 00000793 li a5,0 + 8000f68c: 00000d13 li s10,0 + 8000f690: 04000693 li a3,64 + 8000f694: 077b4703 lbu a4,119(s6) + 8000f698: fffb0b13 addi s6,s6,-1 + 8000f69c: 00f71733 sll a4,a4,a5 + 8000f6a0: 0087879b addiw a5,a5,8 + 8000f6a4: 00ed6d33 or s10,s10,a4 + 8000f6a8: fed796e3 bne a5,a3,8000f694 <_Z8iNESLoadPKcP8FCEUFILEi+0x560> + 8000f6ac: 000d0513 mv a0,s10 + 8000f6b0: a45ff0ef jal ra,8000f0f4 <_Z8CheckBady> + 8000f6b4: 001bc797 auipc a5,0x1bc + 8000f6b8: 5807ba23 sd zero,1428(a5) # 801cbc48 + 8000f6bc: 00000793 li a5,0 + 8000f6c0: 00037697 auipc a3,0x37 + 8000f6c4: 2b86b683 ld a3,696(a3) # 80046978 + 8000f6c8: 0007871b sext.w a4,a5 + 8000f6cc: 00900593 li a1,9 + 8000f6d0: 00034617 auipc a2,0x34 + 8000f6d4: bd860613 addi a2,a2,-1064 # 800432a8 <_ZL14sMasterRomInfo> + 8000f6d8: 00178793 addi a5,a5,1 + 8000f6dc: 02dd0063 beq s10,a3,8000f6fc <_Z8iNESLoadPKcP8FCEUFILEi+0x5c8> + 8000f6e0: 00479713 slli a4,a5,0x4 + 8000f6e4: 00e60733 add a4,a2,a4 + 8000f6e8: 02b78663 beq a5,a1,8000f714 <_Z8iNESLoadPKcP8FCEUFILEi+0x5e0> + 8000f6ec: 00073683 ld a3,0(a4) + 8000f6f0: 0007871b sext.w a4,a5 + 8000f6f4: 00178793 addi a5,a5,1 + 8000f6f8: fedd14e3 bne s10,a3,8000f6e0 <_Z8iNESLoadPKcP8FCEUFILEi+0x5ac> + 8000f6fc: 00034797 auipc a5,0x34 + 8000f700: bac78793 addi a5,a5,-1108 # 800432a8 <_ZL14sMasterRomInfo> + 8000f704: 00471713 slli a4,a4,0x4 + 8000f708: 00e78733 add a4,a5,a4 + 8000f70c: 001bc797 auipc a5,0x1bc + 8000f710: 52e7be23 sd a4,1340(a5) # 801cbc48 + 8000f714: 000da603 lw a2,0(s11) + 8000f718: af5d87b7 lui a5,0xaf5d8 + 8000f71c: aa278793 addi a5,a5,-1374 # ffffffffaf5d7aa2 <_end+0xffffffff2f402aa2> + 8000f720: 7ef60c63 beq a2,a5,8000ff18 <_Z8iNESLoadPKcP8FCEUFILEi+0xde4> + 8000f724: 00034797 auipc a5,0x34 + 8000f728: c2c78793 addi a5,a5,-980 # 80043350 <_ZZL10CheckHInfovE3moo+0x18> + 8000f72c: 00000713 li a4,0 + 8000f730: 00100b13 li s6,1 + 8000f734: 0140006f j 8000f748 <_Z8iNESLoadPKcP8FCEUFILEi+0x614> + 8000f738: 0007a683 lw a3,0(a5) + 8000f73c: 01878793 addi a5,a5,24 + 8000f740: 0ec68063 beq a3,a2,8000f820 <_Z8iNESLoadPKcP8FCEUFILEi+0x6ec> + 8000f744: 0087ab03 lw s6,8(a5) + 8000f748: 0017071b addiw a4,a4,1 + 8000f74c: fe0b56e3 bgez s6,8000f738 <_Z8iNESLoadPKcP8FCEUFILEi+0x604> + 8000f750: 0047a683 lw a3,4(a5) + 8000f754: fe06d2e3 bgez a3,8000f738 <_Z8iNESLoadPKcP8FCEUFILEi+0x604> + 8000f758: 000aa503 lw a0,0(s5) + 8000f75c: 00000d93 li s11,0 + 8000f760: 00037697 auipc a3,0x37 + 8000f764: 2286b683 ld a3,552(a3) # 80046988 + 8000f768: 0064c583 lbu a1,6(s1) + 8000f76c: 00035717 auipc a4,0x35 + 8000f770: 5ec70713 addi a4,a4,1516 # 80044d58 <_ZZL10CheckHInfovE5savie+0x10> + 8000f774: 00037797 auipc a5,0x37 + 8000f778: 20c7b783 ld a5,524(a5) # 80046980 + 8000f77c: 00000893 li a7,0 + 8000f780: 19a68463 beq a3,s10,8000f908 <_Z8iNESLoadPKcP8FCEUFILEi+0x7d4> + 8000f784: 1c078063 beqz a5,8000f944 <_Z8iNESLoadPKcP8FCEUFILEi+0x810> + 8000f788: 00073603 ld a2,0(a4) + 8000f78c: 00078693 mv a3,a5 + 8000f790: 00870713 addi a4,a4,8 + 8000f794: 00060793 mv a5,a2 + 8000f798: ffa696e3 bne a3,s10,8000f784 <_Z8iNESLoadPKcP8FCEUFILEi+0x650> + 8000f79c: 16c0006f j 8000f908 <_Z8iNESLoadPKcP8FCEUFILEi+0x7d4> + 8000f7a0: 00900613 li a2,9 + 8000f7a4: 00000593 li a1,0 + 8000f7a8: 000b3517 auipc a0,0xb3 + 8000f7ac: c4f50513 addi a0,a0,-945 # 800c23f7 + 8000f7b0: 2782c0ef jal ra,8003ba28 + 8000f7b4: a81ff06f j 8000f234 <_Z8iNESLoadPKcP8FCEUFILEi+0x100> + 8000f7b8: 00043783 ld a5,0(s0) + 8000f7bc: 00471713 slli a4,a4,0x4 + 8000f7c0: 00e50733 add a4,a0,a4 + 8000f7c4: 00d7aa23 sw a3,20(a5) + 8000f7c8: 00873703 ld a4,8(a4) + 8000f7cc: 00e7bc23 sd a4,24(a5) + 8000f7d0: eb9ff06f j 8000f688 <_Z8iNESLoadPKcP8FCEUFILEi+0x554> + 8000f7d4: ba0714e3 bnez a4,8000f37c <_Z8iNESLoadPKcP8FCEUFILEi+0x248> + 8000f7d8: 001bcb97 auipc s7,0x1bc + 8000f7dc: 488b8b93 addi s7,s7,1160 # 801cbc60 + 8000f7e0: 10000713 li a4,256 + 8000f7e4: 0054c503 lbu a0,5(s1) + 8000f7e8: 00eba023 sw a4,0(s7) + 8000f7ec: 00000b13 li s6,0 + 8000f7f0: bd1ff06f j 8000f3c0 <_Z8iNESLoadPKcP8FCEUFILEi+0x28c> + 8000f7f4: 0016f693 andi a3,a3,1 + 8000f7f8: 00dc8023 sb a3,0(s9) + 8000f7fc: b55ff06f j 8000f350 <_Z8iNESLoadPKcP8FCEUFILEi+0x21c> + 8000f800: 0064c683 lbu a3,6(s1) + 8000f804: 0f077713 andi a4,a4,240 + 8000f808: 001bca97 auipc s5,0x1bc + 8000f80c: 46ca8a93 addi s5,s5,1132 # 801cbc74 <_ZL8MapperNo> + 8000f810: 4046d59b sraiw a1,a3,0x4 + 8000f814: 00e5e733 or a4,a1,a4 + 8000f818: 00eaa023 sw a4,0(s5) + 8000f81c: b1dff06f j 8000f338 <_Z8iNESLoadPKcP8FCEUFILEi+0x204> + 8000f820: 00171793 slli a5,a4,0x1 + 8000f824: 00e78733 add a4,a5,a4 + 8000f828: 00371713 slli a4,a4,0x3 + 8000f82c: 00034797 auipc a5,0x34 + 8000f830: b0c78793 addi a5,a5,-1268 # 80043338 <_ZZL10CheckHInfovE3moo> + 8000f834: 00e78733 add a4,a5,a4 + 8000f838: 00472783 lw a5,4(a4) + 8000f83c: 0e07ce63 bltz a5,8000f938 <_Z8iNESLoadPKcP8FCEUFILEi+0x804> + 8000f840: 00001837 lui a6,0x1 + 8000f844: 80080813 addi a6,a6,-2048 # 800 <_entry_offset+0x800> + 8000f848: 0107fdb3 and s11,a5,a6 + 8000f84c: 000d8863 beqz s11,8000f85c <_Z8iNESLoadPKcP8FCEUFILEi+0x728> + 8000f850: 000c2703 lw a4,0(s8) + 8000f854: 00000d93 li s11,0 + 8000f858: 68071063 bnez a4,8000fed8 <_Z8iNESLoadPKcP8FCEUFILEi+0xda4> + 8000f85c: 03379713 slli a4,a5,0x33 + 8000f860: 0ff00513 li a0,255 + 8000f864: 00075663 bgez a4,8000f870 <_Z8iNESLoadPKcP8FCEUFILEi+0x73c> + 8000f868: 00001537 lui a0,0x1 + 8000f86c: fff50513 addi a0,a0,-1 # fff <_entry_offset+0xfff> + 8000f870: 000aa703 lw a4,0(s5) + 8000f874: 00f57533 and a0,a0,a5 + 8000f878: 00a70663 beq a4,a0,8000f884 <_Z8iNESLoadPKcP8FCEUFILEi+0x750> + 8000f87c: 001ded93 ori s11,s11,1 + 8000f880: 00aaa023 sw a0,0(s5) + 8000f884: ec0b4ee3 bltz s6,8000f760 <_Z8iNESLoadPKcP8FCEUFILEi+0x62c> + 8000f888: 00800713 li a4,8 + 8000f88c: 000cc783 lbu a5,0(s9) + 8000f890: 5eeb0263 beq s6,a4,8000fe74 <_Z8iNESLoadPKcP8FCEUFILEi+0xd40> + 8000f894: 0007871b sext.w a4,a5 + 8000f898: ed6784e3 beq a5,s6,8000f760 <_Z8iNESLoadPKcP8FCEUFILEi+0x62c> + 8000f89c: ffbb7793 andi a5,s6,-5 + 8000f8a0: 00f70863 beq a4,a5,8000f8b0 <_Z8iNESLoadPKcP8FCEUFILEi+0x77c> + 8000f8a4: 00200713 li a4,2 + 8000f8a8: 00f74463 blt a4,a5,8000f8b0 <_Z8iNESLoadPKcP8FCEUFILEi+0x77c> + 8000f8ac: 002ded93 ori s11,s11,2 + 8000f8b0: 016c8023 sb s6,0(s9) + 8000f8b4: eadff06f j 8000f760 <_Z8iNESLoadPKcP8FCEUFILEi+0x62c> + 8000f8b8: 00300613 li a2,3 + 8000f8bc: 00032597 auipc a1,0x32 + 8000f8c0: 61458593 addi a1,a1,1556 # 80041ed0 <_ZL9C96000PAL+0x4c0> + 8000f8c4: 000b3517 auipc a0,0xb3 + 8000f8c8: b3350513 addi a0,a0,-1229 # 800c23f7 + 8000f8cc: 5212b0ef jal ra,8003b5ec + 8000f8d0: 04051863 bnez a0,8000f920 <_Z8iNESLoadPKcP8FCEUFILEi+0x7ec> + 8000f8d4: 00900613 li a2,9 + 8000f8d8: 00000593 li a1,0 + 8000f8dc: 000b3517 auipc a0,0xb3 + 8000f8e0: b1b50513 addi a0,a0,-1253 # 800c23f7 + 8000f8e4: 1442c0ef jal ra,8003ba28 + 8000f8e8: 969ff06f j 8000f250 <_Z8iNESLoadPKcP8FCEUFILEi+0x11c> + 8000f8ec: 0046d69b srliw a3,a3,0x4 + 8000f8f0: 04000893 li a7,64 + 8000f8f4: 00d898bb sllw a7,a7,a3 + 8000f8f8: a01ff06f j 8000f2f8 <_Z8iNESLoadPKcP8FCEUFILEi+0x1c4> + 8000f8fc: 00032597 auipc a1,0x32 + 8000f900: 58458593 addi a1,a1,1412 # 80041e80 <_ZL9C96000PAL+0x470> + 8000f904: cd1ff06f j 8000f5d4 <_Z8iNESLoadPKcP8FCEUFILEi+0x4a0> + 8000f908: 0025f693 andi a3,a1,2 + 8000f90c: e6069ce3 bnez a3,8000f784 <_Z8iNESLoadPKcP8FCEUFILEi+0x650> + 8000f910: 004ded93 ori s11,s11,4 + 8000f914: 0025e593 ori a1,a1,2 + 8000f918: 00100893 li a7,1 + 8000f91c: e69ff06f j 8000f784 <_Z8iNESLoadPKcP8FCEUFILEi+0x650> + 8000f920: 00600613 li a2,6 + 8000f924: 00000593 li a1,0 + 8000f928: 000b3517 auipc a0,0xb3 + 8000f92c: ad250513 addi a0,a0,-1326 # 800c23fa + 8000f930: 0f82c0ef jal ra,8003ba28 + 8000f934: 91dff06f j 8000f250 <_Z8iNESLoadPKcP8FCEUFILEi+0x11c> + 8000f938: 000aa503 lw a0,0(s5) + 8000f93c: 00000d93 li s11,0 + 8000f940: f45ff06f j 8000f884 <_Z8iNESLoadPKcP8FCEUFILEi+0x750> + 8000f944: 00088463 beqz a7,8000f94c <_Z8iNESLoadPKcP8FCEUFILEi+0x818> + 8000f948: 00b48323 sb a1,6(s1) + 8000f94c: 07600793 li a5,118 + 8000f950: 1cf50a63 beq a0,a5,8000fb24 <_Z8iNESLoadPKcP8FCEUFILEi+0x9f0> + 8000f954: 01800793 li a5,24 + 8000f958: 1cf50663 beq a0,a5,8000fb24 <_Z8iNESLoadPKcP8FCEUFILEi+0x9f0> + 8000f95c: 01a00793 li a5,26 + 8000f960: 4ef50c63 beq a0,a5,8000fe58 <_Z8iNESLoadPKcP8FCEUFILEi+0xd24> + 8000f964: 06300793 li a5,99 + 8000f968: 00f51663 bne a0,a5,8000f974 <_Z8iNESLoadPKcP8FCEUFILEi+0x840> + 8000f96c: 00200793 li a5,2 + 8000f970: 00fc8023 sb a5,0(s9) + 8000f974: 400d9263 bnez s11,8000fd78 <_Z8iNESLoadPKcP8FCEUFILEi+0xc44> + 8000f978: 000c2603 lw a2,0(s8) + 8000f97c: 32061063 bnez a2,8000fc9c <_Z8iNESLoadPKcP8FCEUFILEi+0xb68> + 8000f980: 000cc583 lbu a1,0(s9) + 8000f984: 00200793 li a5,2 + 8000f988: 3cf58463 beq a1,a5,8000fd50 <_Z8iNESLoadPKcP8FCEUFILEi+0xc1c> + 8000f98c: 00f00713 li a4,15 + 8000f990: 0015f793 andi a5,a1,1 + 8000f994: 0015f513 andi a0,a1,1 + 8000f998: 26b77263 bgeu a4,a1,8000fbfc <_Z8iNESLoadPKcP8FCEUFILEi+0xac8> + 8000f99c: 0027851b addiw a0,a5,2 + 8000f9a0: 00000613 li a2,0 + 8000f9a4: 00100593 li a1,1 + 8000f9a8: 6e4010ef jal ra,8001108c <_Z18SetupCartMirroringiiPh> + 8000f9ac: 0064c703 lbu a4,6(s1) + 8000f9b0: 000cc603 lbu a2,0(s9) + 8000f9b4: 010bb683 ld a3,16(s7) + 8000f9b8: 4017579b sraiw a5,a4,0x1 + 8000f9bc: 0017f793 andi a5,a5,1 + 8000f9c0: 0003ab97 auipc s7,0x3a + 8000f9c4: 740b8b93 addi s7,s7,1856 # 8004a100 <_ZL10CHRRAMSize> + 8000f9c8: 04fa2623 sw a5,76(s4) + 8000f9cc: fff00793 li a5,-1 + 8000f9d0: 04ca2423 sw a2,72(s4) + 8000f9d4: 00fba023 sw a5,0(s7) + 8000f9d8: 000aa583 lw a1,0(s5) + 8000f9dc: 34068e63 beqz a3,8000fd38 <_Z8iNESLoadPKcP8FCEUFILEi+0xc04> + 8000f9e0: 00039b17 auipc s6,0x39 + 8000f9e4: 208b0b13 addi s6,s6,520 # 80048be8 + 8000f9e8: 0100006f j 8000f9f8 <_Z8iNESLoadPKcP8FCEUFILEi+0x8c4> + 8000f9ec: 028b3783 ld a5,40(s6) + 8000f9f0: 018b0b13 addi s6,s6,24 + 8000f9f4: 34078263 beqz a5,8000fd38 <_Z8iNESLoadPKcP8FCEUFILEi+0xc04> + 8000f9f8: 008b2783 lw a5,8(s6) + 8000f9fc: feb798e3 bne a5,a1,8000f9ec <_Z8iNESLoadPKcP8FCEUFILEi+0x8b8> + 8000fa00: 000c2783 lw a5,0(s8) + 8000fa04: 001bc697 auipc a3,0x1bc + 8000fa08: 0c06be23 sd zero,220(a3) # 801cbae0 + 8000fa0c: 06079663 bnez a5,8000fa78 <_Z8iNESLoadPKcP8FCEUFILEi+0x944> + 8000fa10: 050a2783 lw a5,80(s4) + 8000fa14: 3e079c63 bnez a5,8000fe0c <_Z8iNESLoadPKcP8FCEUFILEi+0xcd8> + 8000fa18: 02d00793 li a5,45 + 8000fa1c: 3cf58063 beq a1,a5,8000fddc <_Z8iNESLoadPKcP8FCEUFILEi+0xca8> + 8000fa20: 40b7c063 blt a5,a1,8000fe20 <_Z8iNESLoadPKcP8FCEUFILEi+0xcec> + 8000fa24: 00d00793 li a5,13 + 8000fa28: 3af59263 bne a1,a5,8000fdcc <_Z8iNESLoadPKcP8FCEUFILEi+0xc98> + 8000fa2c: 000047b7 lui a5,0x4 + 8000fa30: 00fba023 sw a5,0(s7) + 8000fa34: 00004537 lui a0,0x4 + 8000fa38: 000047b7 lui a5,0x4 + 8000fa3c: 06fa2023 sw a5,96(s4) + 8000fa40: 305020ef jal ra,80012544 <_Z12FCEU_dmallocj> + 8000fa44: 001bcc17 auipc s8,0x1bc + 8000fa48: 224c0c13 addi s8,s8,548 # 801cbc68 + 8000fa4c: 00ac3023 sd a0,0(s8) + 8000fa50: 2e050263 beqz a0,8000fd34 <_Z8iNESLoadPKcP8FCEUFILEi+0xc00> + 8000fa54: 000ba583 lw a1,0(s7) + 8000fa58: 00000613 li a2,0 + 8000fa5c: 4f8240ef jal ra,80033f54 <_Z15FCEU_MemoryRandPhjb> + 8000fa60: 000c3583 ld a1,0(s8) + 8000fa64: 000ba603 lw a2,0(s7) + 8000fa68: 001bc797 auipc a5,0x1bc + 8000fa6c: 06b7bc23 sd a1,120(a5) # 801cbae0 + 8000fa70: 08061663 bnez a2,8000fafc <_Z8iNESLoadPKcP8FCEUFILEi+0x9c8> + 8000fa74: 0064c703 lbu a4,6(s1) + 8000fa78: 00877713 andi a4,a4,8 + 8000fa7c: 40071863 bnez a4,8000fe8c <_Z8iNESLoadPKcP8FCEUFILEi+0xd58> + 8000fa80: 010b3783 ld a5,16(s6) + 8000fa84: 000b3517 auipc a0,0xb3 + 8000fa88: 8ec50513 addi a0,a0,-1812 # 800c2370 <_ZL8iNESCart> + 8000fa8c: 000780e7 jalr a5 + 8000fa90: 000aa703 lw a4,0(s5) + 8000fa94: 00043783 ld a5,0(s0) + 8000fa98: 00090593 mv a1,s2 + 8000fa9c: 000b2517 auipc a0,0xb2 + 8000faa0: 0d450513 addi a0,a0,212 # 800c1b70 + 8000faa4: 00e7a423 sw a4,8(a5) + 8000faa8: 0602c0ef jal ra,8003bb08 + 8000faac: fffff797 auipc a5,0xfffff + 8000fab0: 47078793 addi a5,a5,1136 # 8000ef1c <_Z6iNESGI2GI> + 8000fab4: 00037517 auipc a0,0x37 + 8000fab8: ad450513 addi a0,a0,-1324 # 80046588 + 8000fabc: 001bd717 auipc a4,0x1bd + 8000fac0: b8f73a23 sd a5,-1132(a4) # 801cc650 + 8000fac4: 001bc797 auipc a5,0x1bc + 8000fac8: 1d47b623 sd s4,460(a5) # 801cbc90 + 8000facc: 27d2b0ef jal ra,8003b548 + 8000fad0: 001bc797 auipc a5,0x1bc + 8000fad4: 1a878793 addi a5,a5,424 # 801cbc78 + 8000fad8: 0007a783 lw a5,0(a5) + 8000fadc: 10078663 beqz a5,8000fbe8 <_Z8iNESLoadPKcP8FCEUFILEi+0xab4> + 8000fae0: 00c4c503 lbu a0,12(s1) + 8000fae4: 00100d93 li s11,1 + 8000fae8: 00357513 andi a0,a0,3 + 8000faec: fff50513 addi a0,a0,-1 + 8000faf0: 00153513 seqz a0,a0 + 8000faf4: 329240ef jal ra,8003461c <_Z18FCEUI_SetVidSystemi> + 8000faf8: ea8ff06f j 8000f1a0 <_Z8iNESLoadPKcP8FCEUFILEi+0x6c> + 8000fafc: 00100693 li a3,1 + 8000fb00: 00000513 li a0,0 + 8000fb04: 2c1000ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 8000fb08: 000ba583 lw a1,0(s7) + 8000fb0c: 000c3503 ld a0,0(s8) + 8000fb10: 00032697 auipc a3,0x32 + 8000fb14: 63868693 addi a3,a3,1592 # 80042148 <_ZL9C96000PAL+0x738> + 8000fb18: 00000613 li a2,0 + 8000fb1c: cf4f00ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8000fb20: f55ff06f j 8000fa74 <_Z8iNESLoadPKcP8FCEUFILEi+0x940> + 8000fb24: 000cc703 lbu a4,0(s9) + 8000fb28: 00200793 li a5,2 + 8000fb2c: e4f714e3 bne a4,a5,8000f974 <_Z8iNESLoadPKcP8FCEUFILEi+0x840> + 8000fb30: 001bc797 auipc a5,0x1bc + 8000fb34: 12078023 sb zero,288(a5) # 801cbc50 + 8000fb38: 06300793 li a5,99 + 8000fb3c: 002ded93 ori s11,s11,2 + 8000fb40: e2f506e3 beq a0,a5,8000f96c <_Z8iNESLoadPKcP8FCEUFILEi+0x838> + 8000fb44: 08010d13 addi s10,sp,128 + 8000fb48: 00032597 auipc a1,0x32 + 8000fb4c: 4d858593 addi a1,a1,1240 # 80042020 <_ZL9C96000PAL+0x610> + 8000fb50: 000d0513 mv a0,s10 + 8000fb54: 7b52b0ef jal ra,8003bb08 + 8000fb58: 001df793 andi a5,s11,1 + 8000fb5c: 24079463 bnez a5,8000fda4 <_Z8iNESLoadPKcP8FCEUFILEi+0xc70> + 8000fb60: 00032797 auipc a5,0x32 + 8000fb64: 32078793 addi a5,a5,800 # 80041e80 <_ZL9C96000PAL+0x470> + 8000fb68: 00f13823 sd a5,16(sp) + 8000fb6c: 00032797 auipc a5,0x32 + 8000fb70: 30478793 addi a5,a5,772 # 80041e70 <_ZL9C96000PAL+0x460> + 8000fb74: 00f13c23 sd a5,24(sp) + 8000fb78: 000d0513 mv a0,s10 + 8000fb7c: 00032797 auipc a5,0x32 + 8000fb80: 53c78793 addi a5,a5,1340 # 800420b8 <_ZL9C96000PAL+0x6a8> + 8000fb84: 02f13023 sd a5,32(sp) + 8000fb88: 0412a0ef jal ra,8003a3c8 + 8000fb8c: 000cc783 lbu a5,0(s9) + 8000fb90: 38010713 addi a4,sp,896 + 8000fb94: 00032597 auipc a1,0x32 + 8000fb98: 53458593 addi a1,a1,1332 # 800420c8 <_ZL9C96000PAL+0x6b8> + 8000fb9c: 0037f793 andi a5,a5,3 + 8000fba0: 00379793 slli a5,a5,0x3 + 8000fba4: 00f707b3 add a5,a4,a5 + 8000fba8: c907b603 ld a2,-880(a5) + 8000fbac: 00ad0533 add a0,s10,a0 + 8000fbb0: 1ed2b0ef jal ra,8003b59c + 8000fbb4: 004df793 andi a5,s11,4 + 8000fbb8: 30079663 bnez a5,8000fec4 <_Z8iNESLoadPKcP8FCEUFILEi+0xd90> + 8000fbbc: 008df813 andi a6,s11,8 + 8000fbc0: 2e081863 bnez a6,8000feb0 <_Z8iNESLoadPKcP8FCEUFILEi+0xd7c> + 8000fbc4: 00037597 auipc a1,0x37 + 8000fbc8: 9c458593 addi a1,a1,-1596 # 80046588 + 8000fbcc: 000d0513 mv a0,s10 + 8000fbd0: 7552b0ef jal ra,8003bb24 + 8000fbd4: 000d0593 mv a1,s10 + 8000fbd8: 0002e517 auipc a0,0x2e + 8000fbdc: a7050513 addi a0,a0,-1424 # 8003d648 + 8000fbe0: 1692b0ef jal ra,8003b548 + 8000fbe4: d95ff06f j 8000f978 <_Z8iNESLoadPKcP8FCEUFILEi+0x844> + 8000fbe8: 00100d93 li s11,1 + 8000fbec: da098a63 beqz s3,8000f1a0 <_Z8iNESLoadPKcP8FCEUFILEi+0x6c> + 8000fbf0: 00000513 li a0,0 + 8000fbf4: 229240ef jal ra,8003461c <_Z18FCEUI_SetVidSystemi> + 8000fbf8: da8ff06f j 8000f1a0 <_Z8iNESLoadPKcP8FCEUFILEi+0x6c> + 8000fbfc: 4025d59b sraiw a1,a1,0x2 + 8000fc00: 00000613 li a2,0 + 8000fc04: 0015f593 andi a1,a1,1 + 8000fc08: 484010ef jal ra,8001108c <_Z18SetupCartMirroringiiPh> + 8000fc0c: da1ff06f j 8000f9ac <_Z8iNESLoadPKcP8FCEUFILEi+0x878> + 8000fc10: 00d5151b slliw a0,a0,0xd + 8000fc14: 0d1020ef jal ra,800124e4 <_Z11FCEU_mallocj> + 8000fc18: 001bc797 auipc a5,0x1bc + 8000fc1c: 04a7b823 sd a0,80(a5) # 801cbc68 + 8000fc20: 2e050263 beqz a0,8000ff04 <_Z8iNESLoadPKcP8FCEUFILEi+0xdd0> + 8000fc24: 000c2603 lw a2,0(s8) + 8000fc28: 0ff00593 li a1,255 + 8000fc2c: 00d6161b slliw a2,a2,0xd + 8000fc30: 02061613 slli a2,a2,0x20 + 8000fc34: 02065613 srli a2,a2,0x20 + 8000fc38: 5f12b0ef jal ra,8003ba28 + 8000fc3c: ff8ff06f j 8000f434 <_Z8iNESLoadPKcP8FCEUFILEi+0x300> + 8000fc40: 20000513 li a0,512 + 8000fc44: 029020ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8000fc48: 00040693 mv a3,s0 + 8000fc4c: 00100613 li a2,1 + 8000fc50: 20000593 li a1,512 + 8000fc54: 001bc797 auipc a5,0x1bc + 8000fc58: 02a7b623 sd a0,44(a5) # 801cbc80 + 8000fc5c: 9d5f00ef jal ra,80000630 <_Z10FCEU_freadPvmmP8FCEUFILE> + 8000fc60: fe0ff06f j 8000f440 <_Z8iNESLoadPKcP8FCEUFILEi+0x30c> + 8000fc64: 00d6161b slliw a2,a2,0xd + 8000fc68: 001bc597 auipc a1,0x1bc + 8000fc6c: 0005b583 ld a1,0(a1) # 801cbc68 + 8000fc70: 02810513 addi a0,sp,40 + 8000fc74: 6dc020ef jal ra,80012350 <_Z10md5_updateP11md5_contextPhj> + 8000fc78: 831ff06f j 8000f4a8 <_Z8iNESLoadPKcP8FCEUFILEi+0x374> + 8000fc7c: 02061613 slli a2,a2,0x20 + 8000fc80: 00040693 mv a3,s0 + 8000fc84: 02065613 srli a2,a2,0x20 + 8000fc88: 000025b7 lui a1,0x2 + 8000fc8c: 001bc517 auipc a0,0x1bc + 8000fc90: fdc53503 ld a0,-36(a0) # 801cbc68 + 8000fc94: 99df00ef jal ra,80000630 <_Z10FCEU_freadPvmmP8FCEUFILE> + 8000fc98: fecff06f j 8000f484 <_Z8iNESLoadPKcP8FCEUFILEi+0x350> + 8000fc9c: 00d6161b slliw a2,a2,0xd + 8000fca0: 00000693 li a3,0 + 8000fca4: 001bc597 auipc a1,0x1bc + 8000fca8: fc45b583 ld a1,-60(a1) # 801cbc68 + 8000fcac: 00000513 li a0,0 + 8000fcb0: 115000ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 8000fcb4: ccdff06f j 8000f980 <_Z8iNESLoadPKcP8FCEUFILEi+0x84c> + 8000fcb8: 00032517 auipc a0,0x32 + 8000fcbc: 2c850513 addi a0,a0,712 # 80041f80 <_ZL9C96000PAL+0x570> + 8000fcc0: 0892b0ef jal ra,8003b548 + 8000fcc4: 054a2583 lw a1,84(s4) + 8000fcc8: 00032517 auipc a0,0x32 + 8000fccc: 2d050513 addi a0,a0,720 # 80041f98 <_ZL9C96000PAL+0x588> + 8000fcd0: 0792b0ef jal ra,8003b548 + 8000fcd4: 05ca2783 lw a5,92(s4) + 8000fcd8: 058a2583 lw a1,88(s4) + 8000fcdc: 00032517 auipc a0,0x32 + 8000fce0: 2d450513 addi a0,a0,724 # 80041fb0 <_ZL9C96000PAL+0x5a0> + 8000fce4: 00f585bb addw a1,a1,a5 + 8000fce8: 0612b0ef jal ra,8003b548 + 8000fcec: 064a2783 lw a5,100(s4) + 8000fcf0: 060a2583 lw a1,96(s4) + 8000fcf4: 00032517 auipc a0,0x32 + 8000fcf8: 2d450513 addi a0,a0,724 # 80041fc8 <_ZL9C96000PAL+0x5b8> + 8000fcfc: 00f585bb addw a1,a1,a5 + 8000fd00: 0492b0ef jal ra,8003b548 + 8000fd04: 0064c783 lbu a5,6(s1) + 8000fd08: 0027f793 andi a5,a5,2 + 8000fd0c: 92078ae3 beqz a5,8000f640 <_Z8iNESLoadPKcP8FCEUFILEi+0x50c> + 8000fd10: 05ca2583 lw a1,92(s4) + 8000fd14: 00032517 auipc a0,0x32 + 8000fd18: 2cc50513 addi a0,a0,716 # 80041fe0 <_ZL9C96000PAL+0x5d0> + 8000fd1c: 02d2b0ef jal ra,8003b548 + 8000fd20: 064a2583 lw a1,100(s4) + 8000fd24: 00032517 auipc a0,0x32 + 8000fd28: 2dc50513 addi a0,a0,732 # 80042000 <_ZL9C96000PAL+0x5f0> + 8000fd2c: 01d2b0ef jal ra,8003b548 + 8000fd30: 911ff06f j 8000f640 <_Z8iNESLoadPKcP8FCEUFILEi+0x50c> + 8000fd34: 000aa583 lw a1,0(s5) + 8000fd38: 00032517 auipc a0,0x32 + 8000fd3c: 42050513 addi a0,a0,1056 # 80042158 <_ZL9C96000PAL+0x748> + 8000fd40: 0092b0ef jal ra,8003b548 + 8000fd44: d4dff06f j 8000fa90 <_Z8iNESLoadPKcP8FCEUFILEi+0x95c> + 8000fd48: 00013423 sd zero,8(sp) + 8000fd4c: eacff06f j 8000f3f8 <_Z8iNESLoadPKcP8FCEUFILEi+0x2c4> + 8000fd50: 00001537 lui a0,0x1 + 8000fd54: 80050513 addi a0,a0,-2048 # 800 <_entry_offset+0x800> + 8000fd58: 714020ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8000fd5c: 00050613 mv a2,a0 + 8000fd60: 00100593 li a1,1 + 8000fd64: 00400513 li a0,4 + 8000fd68: 001bc797 auipc a5,0x1bc + 8000fd6c: ecc7bc23 sd a2,-296(a5) # 801cbc40 + 8000fd70: 31c010ef jal ra,8001108c <_Z18SetupCartMirroringiiPh> + 8000fd74: c39ff06f j 8000f9ac <_Z8iNESLoadPKcP8FCEUFILEi+0x878> + 8000fd78: 08010d13 addi s10,sp,128 + 8000fd7c: 00032597 auipc a1,0x32 + 8000fd80: 2a458593 addi a1,a1,676 # 80042020 <_ZL9C96000PAL+0x610> + 8000fd84: 000d0513 mv a0,s10 + 8000fd88: 5812b0ef jal ra,8003bb08 + 8000fd8c: 002dfb13 andi s6,s11,2 + 8000fd90: 001df793 andi a5,s11,1 + 8000fd94: 000b0b1b sext.w s6,s6 + 8000fd98: 00079863 bnez a5,8000fda8 <_Z8iNESLoadPKcP8FCEUFILEi+0xc74> + 8000fd9c: e00b0ce3 beqz s6,8000fbb4 <_Z8iNESLoadPKcP8FCEUFILEi+0xa80> + 8000fda0: dc1ff06f j 8000fb60 <_Z8iNESLoadPKcP8FCEUFILEi+0xa2c> + 8000fda4: 00200b13 li s6,2 + 8000fda8: 000d0513 mv a0,s10 + 8000fdac: 61c2a0ef jal ra,8003a3c8 + 8000fdb0: 000aa603 lw a2,0(s5) + 8000fdb4: 00032597 auipc a1,0x32 + 8000fdb8: 2d458593 addi a1,a1,724 # 80042088 <_ZL9C96000PAL+0x678> + 8000fdbc: 00ad0533 add a0,s10,a0 + 8000fdc0: 7dc2b0ef jal ra,8003b59c + 8000fdc4: de0b08e3 beqz s6,8000fbb4 <_Z8iNESLoadPKcP8FCEUFILEi+0xa80> + 8000fdc8: d99ff06f j 8000fb60 <_Z8iNESLoadPKcP8FCEUFILEi+0xa2c> + 8000fdcc: 02b7d263 bge a5,a1,8000fdf0 <_Z8iNESLoadPKcP8FCEUFILEi+0xcbc> + 8000fdd0: fe35859b addiw a1,a1,-29 + 8000fdd4: 00100793 li a5,1 + 8000fdd8: 02b7e063 bltu a5,a1,8000fdf8 <_Z8iNESLoadPKcP8FCEUFILEi+0xcc4> + 8000fddc: 000087b7 lui a5,0x8 + 8000fde0: 00fba023 sw a5,0(s7) + 8000fde4: 00008537 lui a0,0x8 + 8000fde8: 000087b7 lui a5,0x8 + 8000fdec: c51ff06f j 8000fa3c <_Z8iNESLoadPKcP8FCEUFILEi+0x908> + 8000fdf0: 00600793 li a5,6 + 8000fdf4: fef584e3 beq a1,a5,8000fddc <_Z8iNESLoadPKcP8FCEUFILEi+0xca8> + 8000fdf8: 000027b7 lui a5,0x2 + 8000fdfc: 00fba023 sw a5,0(s7) + 8000fe00: 00002537 lui a0,0x2 + 8000fe04: 000027b7 lui a5,0x2 + 8000fe08: c35ff06f j 8000fa3c <_Z8iNESLoadPKcP8FCEUFILEi+0x908> + 8000fe0c: 064a2503 lw a0,100(s4) + 8000fe10: 060a2783 lw a5,96(s4) + 8000fe14: 00f5053b addw a0,a0,a5 + 8000fe18: 00aba023 sw a0,0(s7) + 8000fe1c: c25ff06f j 8000fa40 <_Z8iNESLoadPKcP8FCEUFILEi+0x90c> + 8000fe20: 06000793 li a5,96 + 8000fe24: faf58ce3 beq a1,a5,8000fddc <_Z8iNESLoadPKcP8FCEUFILEi+0xca8> + 8000fe28: 0b000793 li a5,176 + 8000fe2c: fcf596e3 bne a1,a5,8000fdf8 <_Z8iNESLoadPKcP8FCEUFILEi+0xcc4> + 8000fe30: 000207b7 lui a5,0x20 + 8000fe34: 00fba023 sw a5,0(s7) + 8000fe38: 00020537 lui a0,0x20 + 8000fe3c: 000207b7 lui a5,0x20 + 8000fe40: bfdff06f j 8000fa3c <_Z8iNESLoadPKcP8FCEUFILEi+0x908> + 8000fe44: 00032d17 auipc s10,0x32 + 8000fe48: 004d0d13 addi s10,s10,4 # 80041e48 <_ZL9C96000PAL+0x438> + 8000fe4c: 00039b97 auipc s7,0x39 + 8000fe50: d9cb8b93 addi s7,s7,-612 # 80048be8 + 8000fe54: f44ff06f j 8000f598 <_Z8iNESLoadPKcP8FCEUFILEi+0x464> + 8000fe58: 000cc703 lbu a4,0(s9) + 8000fe5c: 00200793 li a5,2 + 8000fe60: b0f71ae3 bne a4,a5,8000f974 <_Z8iNESLoadPKcP8FCEUFILEi+0x840> + 8000fe64: 001bc797 auipc a5,0x1bc + 8000fe68: de078623 sb zero,-532(a5) # 801cbc50 + 8000fe6c: 002ded93 ori s11,s11,2 + 8000fe70: cd5ff06f j 8000fb44 <_Z8iNESLoadPKcP8FCEUFILEi+0xa10> + 8000fe74: 00200713 li a4,2 + 8000fe78: 8ee794e3 bne a5,a4,8000f760 <_Z8iNESLoadPKcP8FCEUFILEi+0x62c> + 8000fe7c: 002ded93 ori s11,s11,2 + 8000fe80: 001bc797 auipc a5,0x1bc + 8000fe84: dc078823 sb zero,-560(a5) # 801cbc50 + 8000fe88: 8d9ff06f j 8000f760 <_Z8iNESLoadPKcP8FCEUFILEi+0x62c> + 8000fe8c: 000015b7 lui a1,0x1 + 8000fe90: 00032697 auipc a3,0x32 + 8000fe94: 2c068693 addi a3,a3,704 # 80042150 <_ZL9C96000PAL+0x740> + 8000fe98: 00000613 li a2,0 + 8000fe9c: 80058593 addi a1,a1,-2048 # 800 <_entry_offset+0x800> + 8000fea0: 001bc517 auipc a0,0x1bc + 8000fea4: da053503 ld a0,-608(a0) # 801cbc40 + 8000fea8: 968f00ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8000feac: bd5ff06f j 8000fa80 <_Z8iNESLoadPKcP8FCEUFILEi+0x94c> + 8000feb0: 00032597 auipc a1,0x32 + 8000feb4: 26858593 addi a1,a1,616 # 80042118 <_ZL9C96000PAL+0x708> + 8000feb8: 000d0513 mv a0,s10 + 8000febc: 4692b0ef jal ra,8003bb24 + 8000fec0: d05ff06f j 8000fbc4 <_Z8iNESLoadPKcP8FCEUFILEi+0xa90> + 8000fec4: 00032597 auipc a1,0x32 + 8000fec8: 22c58593 addi a1,a1,556 # 800420f0 <_ZL9C96000PAL+0x6e0> + 8000fecc: 000d0513 mv a0,s10 + 8000fed0: 4552b0ef jal ra,8003bb24 + 8000fed4: ce9ff06f j 8000fbbc <_Z8iNESLoadPKcP8FCEUFILEi+0xa88> + 8000fed8: 001bc517 auipc a0,0x1bc + 8000fedc: d9053503 ld a0,-624(a0) # 801cbc68 + 8000fee0: 00f13423 sd a5,8(sp) + 8000fee4: 001bc797 auipc a5,0x1bc + 8000fee8: d807a623 sw zero,-628(a5) # 801cbc70 + 8000feec: 4cc2a0ef jal ra,8003a3b8 + 8000fef0: 001bc797 auipc a5,0x1bc + 8000fef4: d607bc23 sd zero,-648(a5) # 801cbc68 + 8000fef8: 00813783 ld a5,8(sp) + 8000fefc: 00800d93 li s11,8 + 8000ff00: 95dff06f j 8000f85c <_Z8iNESLoadPKcP8FCEUFILEi+0x728> + 8000ff04: 000d3503 ld a0,0(s10) + 8000ff08: 4b02a0ef jal ra,8003a3b8 + 8000ff0c: 001bc797 auipc a5,0x1bc + 8000ff10: d407b623 sd zero,-692(a5) # 801cbc58 + 8000ff14: a8cff06f j 8000f1a0 <_Z8iNESLoadPKcP8FCEUFILEi+0x6c> + 8000ff18: 000aa503 lw a0,0(s5) + 8000ff1c: 000cc783 lbu a5,0(s9) + 8000ff20: 00000d93 li s11,0 + 8000ff24: 00000b13 li s6,0 + 8000ff28: 96dff06f j 8000f894 <_Z8iNESLoadPKcP8FCEUFILEi+0x760> + +000000008000ff2c <_Z8setchr1rijj.part.0>: + 8000ff2c: fe010113 addi sp,sp,-32 + 8000ff30: 00813823 sd s0,16(sp) + 8000ff34: 00913423 sd s1,8(sp) + 8000ff38: 00060413 mv s0,a2 + 8000ff3c: 00058493 mv s1,a1 + 8000ff40: 01213023 sd s2,0(sp) + 8000ff44: 00113c23 sd ra,24(sp) + 8000ff48: 00050913 mv s2,a0 + 8000ff4c: 6bc280ef jal ra,80038608 <_Z18FCEUPPU_LineUpdatev> + 8000ff50: 00291713 slli a4,s2,0x2 + 8000ff54: 000b2797 auipc a5,0xb2 + 8000ff58: 4ac78793 addi a5,a5,1196 # 800c2400 + 8000ff5c: 00e787b3 add a5,a5,a4 + 8000ff60: 000b2717 auipc a4,0xb2 + 8000ff64: 7a070713 addi a4,a4,1952 # 800c2700 + 8000ff68: 01270733 add a4,a4,s2 + 8000ff6c: 00a4d69b srliw a3,s1,0xa + 8000ff70: 0007a783 lw a5,0(a5) + 8000ff74: 00074503 lbu a0,0(a4) + 8000ff78: 00100713 li a4,1 + 8000ff7c: 00d7173b sllw a4,a4,a3 + 8000ff80: 0187171b slliw a4,a4,0x18 + 8000ff84: 001bc617 auipc a2,0x1bc + 8000ff88: 78060613 addi a2,a2,1920 # 801cc704 + 8000ff8c: 00064583 lbu a1,0(a2) + 8000ff90: 00f477b3 and a5,s0,a5 + 8000ff94: 00a4d69b srliw a3,s1,0xa + 8000ff98: 4187571b sraiw a4,a4,0x18 + 8000ff9c: 06050863 beqz a0,8001000c <_Z8setchr1rijj.part.0+0xe0> + 8000ffa0: 00b76733 or a4,a4,a1 + 8000ffa4: 00e60023 sb a4,0(a2) + 8000ffa8: 00391913 slli s2,s2,0x3 + 8000ffac: 000b2517 auipc a0,0xb2 + 8000ffb0: 65450513 addi a0,a0,1620 # 800c2600 + 8000ffb4: 01250933 add s2,a0,s2 + 8000ffb8: 00a7979b slliw a5,a5,0xa + 8000ffbc: 00093603 ld a2,0(s2) + 8000ffc0: 02049593 slli a1,s1,0x20 + 8000ffc4: 02069713 slli a4,a3,0x20 + 8000ffc8: 02079793 slli a5,a5,0x20 + 8000ffcc: 0207d793 srli a5,a5,0x20 + 8000ffd0: 02075713 srli a4,a4,0x20 + 8000ffd4: 0205d593 srli a1,a1,0x20 + 8000ffd8: 01813083 ld ra,24(sp) + 8000ffdc: 01013403 ld s0,16(sp) + 8000ffe0: 40b785b3 sub a1,a5,a1 + 8000ffe4: 00371713 slli a4,a4,0x3 + 8000ffe8: 0003a797 auipc a5,0x3a + 8000ffec: 1207b783 ld a5,288(a5) # 8004a108 + 8000fff0: 00e78733 add a4,a5,a4 + 8000fff4: 00b605b3 add a1,a2,a1 + 8000fff8: 00b73023 sd a1,0(a4) + 8000fffc: 00813483 ld s1,8(sp) + 80010000: 00013903 ld s2,0(sp) + 80010004: 02010113 addi sp,sp,32 + 80010008: 00008067 ret + 8001000c: fff74713 not a4,a4 + 80010010: 00b77733 and a4,a4,a1 + 80010014: 00e60023 sb a4,0(a2) + 80010018: f91ff06f j 8000ffa8 <_Z8setchr1rijj.part.0+0x7c> + +000000008001001c <_Z8setchr2rijj.part.0>: + 8001001c: fe010113 addi sp,sp,-32 + 80010020: 00813823 sd s0,16(sp) + 80010024: 00913423 sd s1,8(sp) + 80010028: 00060413 mv s0,a2 + 8001002c: 00058493 mv s1,a1 + 80010030: 01213023 sd s2,0(sp) + 80010034: 00113c23 sd ra,24(sp) + 80010038: 00050913 mv s2,a0 + 8001003c: 5cc280ef jal ra,80038608 <_Z18FCEUPPU_LineUpdatev> + 80010040: 00291713 slli a4,s2,0x2 + 80010044: 000b2797 auipc a5,0xb2 + 80010048: 43c78793 addi a5,a5,1084 # 800c2480 + 8001004c: 00e787b3 add a5,a5,a4 + 80010050: 0007a783 lw a5,0(a5) + 80010054: 00391693 slli a3,s2,0x3 + 80010058: 000b2717 auipc a4,0xb2 + 8001005c: 5a870713 addi a4,a4,1448 # 800c2600 + 80010060: 00f477b3 and a5,s0,a5 + 80010064: 00d70733 add a4,a4,a3 + 80010068: 00b7979b slliw a5,a5,0xb + 8001006c: 00073583 ld a1,0(a4) + 80010070: 02049513 slli a0,s1,0x20 + 80010074: 00a4d71b srliw a4,s1,0xa + 80010078: 02079793 slli a5,a5,0x20 + 8001007c: 02055513 srli a0,a0,0x20 + 80010080: 0017069b addiw a3,a4,1 + 80010084: 0207d793 srli a5,a5,0x20 + 80010088: 02071713 slli a4,a4,0x20 + 8001008c: 0003a617 auipc a2,0x3a + 80010090: 07c63603 ld a2,124(a2) # 8004a108 + 80010094: 40a787b3 sub a5,a5,a0 + 80010098: 00369693 slli a3,a3,0x3 + 8001009c: 02075713 srli a4,a4,0x20 + 800100a0: 00f587b3 add a5,a1,a5 + 800100a4: 00d606b3 add a3,a2,a3 + 800100a8: 00371713 slli a4,a4,0x3 + 800100ac: 00f6b023 sd a5,0(a3) + 800100b0: 00e60733 add a4,a2,a4 + 800100b4: 000b2517 auipc a0,0xb2 + 800100b8: 64c50513 addi a0,a0,1612 # 800c2700 + 800100bc: 00f73023 sd a5,0(a4) + 800100c0: 01250933 add s2,a0,s2 + 800100c4: 00a4d49b srliw s1,s1,0xa + 800100c8: 00300793 li a5,3 + 800100cc: 00094703 lbu a4,0(s2) + 800100d0: 009797bb sllw a5,a5,s1 + 800100d4: 0187979b slliw a5,a5,0x18 + 800100d8: 4187d79b sraiw a5,a5,0x18 + 800100dc: 02070863 beqz a4,8001010c <_Z8setchr2rijj.part.0+0xf0> + 800100e0: 001bc717 auipc a4,0x1bc + 800100e4: 62470713 addi a4,a4,1572 # 801cc704 + 800100e8: 00074683 lbu a3,0(a4) + 800100ec: 00d7e7b3 or a5,a5,a3 + 800100f0: 00f70023 sb a5,0(a4) + 800100f4: 01813083 ld ra,24(sp) + 800100f8: 01013403 ld s0,16(sp) + 800100fc: 00813483 ld s1,8(sp) + 80010100: 00013903 ld s2,0(sp) + 80010104: 02010113 addi sp,sp,32 + 80010108: 00008067 ret + 8001010c: 001bc717 auipc a4,0x1bc + 80010110: 5f870713 addi a4,a4,1528 # 801cc704 + 80010114: 00074683 lbu a3,0(a4) + 80010118: fff7c793 not a5,a5 + 8001011c: 00d7f7b3 and a5,a5,a3 + 80010120: 00f70023 sb a5,0(a4) + 80010124: 01813083 ld ra,24(sp) + 80010128: 01013403 ld s0,16(sp) + 8001012c: 00813483 ld s1,8(sp) + 80010130: 00013903 ld s2,0(sp) + 80010134: 02010113 addi sp,sp,32 + 80010138: 00008067 ret + +000000008001013c <_Z8setchr4rijj.part.0>: + 8001013c: fe010113 addi sp,sp,-32 + 80010140: 00813823 sd s0,16(sp) + 80010144: 00913423 sd s1,8(sp) + 80010148: 00060413 mv s0,a2 + 8001014c: 00058493 mv s1,a1 + 80010150: 01213023 sd s2,0(sp) + 80010154: 00113c23 sd ra,24(sp) + 80010158: 00050913 mv s2,a0 + 8001015c: 4ac280ef jal ra,80038608 <_Z18FCEUPPU_LineUpdatev> + 80010160: 00291713 slli a4,s2,0x2 + 80010164: 000b2797 auipc a5,0xb2 + 80010168: 39c78793 addi a5,a5,924 # 800c2500 + 8001016c: 00e787b3 add a5,a5,a4 + 80010170: 0007a783 lw a5,0(a5) + 80010174: 00391693 slli a3,s2,0x3 + 80010178: 000b2717 auipc a4,0xb2 + 8001017c: 48870713 addi a4,a4,1160 # 800c2600 + 80010180: 00f477b3 and a5,s0,a5 + 80010184: 00d70733 add a4,a4,a3 + 80010188: 00c7979b slliw a5,a5,0xc + 8001018c: 00073603 ld a2,0(a4) + 80010190: 02049593 slli a1,s1,0x20 + 80010194: 00a4d71b srliw a4,s1,0xa + 80010198: 02079793 slli a5,a5,0x20 + 8001019c: 0205d593 srli a1,a1,0x20 + 800101a0: 0037051b addiw a0,a4,3 + 800101a4: 0207d793 srli a5,a5,0x20 + 800101a8: 0003a697 auipc a3,0x3a + 800101ac: f606b683 ld a3,-160(a3) # 8004a108 + 800101b0: 40b787b3 sub a5,a5,a1 + 800101b4: 00351513 slli a0,a0,0x3 + 800101b8: 0027059b addiw a1,a4,2 + 800101bc: 00f607b3 add a5,a2,a5 + 800101c0: 00a68533 add a0,a3,a0 + 800101c4: 0017061b addiw a2,a4,1 + 800101c8: 00359593 slli a1,a1,0x3 + 800101cc: 02071713 slli a4,a4,0x20 + 800101d0: 00f53023 sd a5,0(a0) + 800101d4: 00b685b3 add a1,a3,a1 + 800101d8: 00361613 slli a2,a2,0x3 + 800101dc: 02075713 srli a4,a4,0x20 + 800101e0: 00f5b023 sd a5,0(a1) + 800101e4: 00c68633 add a2,a3,a2 + 800101e8: 00371713 slli a4,a4,0x3 + 800101ec: 00f63023 sd a5,0(a2) + 800101f0: 00e68733 add a4,a3,a4 + 800101f4: 000b2517 auipc a0,0xb2 + 800101f8: 50c50513 addi a0,a0,1292 # 800c2700 + 800101fc: 00f73023 sd a5,0(a4) + 80010200: 01250933 add s2,a0,s2 + 80010204: 00a4d49b srliw s1,s1,0xa + 80010208: 00f00793 li a5,15 + 8001020c: 00094703 lbu a4,0(s2) + 80010210: 009797bb sllw a5,a5,s1 + 80010214: 0187979b slliw a5,a5,0x18 + 80010218: 4187d79b sraiw a5,a5,0x18 + 8001021c: 02070863 beqz a4,8001024c <_Z8setchr4rijj.part.0+0x110> + 80010220: 001bc717 auipc a4,0x1bc + 80010224: 4e470713 addi a4,a4,1252 # 801cc704 + 80010228: 00074683 lbu a3,0(a4) + 8001022c: 00d7e7b3 or a5,a5,a3 + 80010230: 00f70023 sb a5,0(a4) + 80010234: 01813083 ld ra,24(sp) + 80010238: 01013403 ld s0,16(sp) + 8001023c: 00813483 ld s1,8(sp) + 80010240: 00013903 ld s2,0(sp) + 80010244: 02010113 addi sp,sp,32 + 80010248: 00008067 ret + 8001024c: 001bc717 auipc a4,0x1bc + 80010250: 4b870713 addi a4,a4,1208 # 801cc704 + 80010254: 00074683 lbu a3,0(a4) + 80010258: fff7c793 not a5,a5 + 8001025c: 00d7f7b3 and a5,a5,a3 + 80010260: 00f70023 sb a5,0(a4) + 80010264: 01813083 ld ra,24(sp) + 80010268: 01013403 ld s0,16(sp) + 8001026c: 00813483 ld s1,8(sp) + 80010270: 00013903 ld s2,0(sp) + 80010274: 02010113 addi sp,sp,32 + 80010278: 00008067 ret + +000000008001027c <_Z8setchr8rij.part.0>: + 8001027c: fe010113 addi sp,sp,-32 + 80010280: 00813823 sd s0,16(sp) + 80010284: 00913423 sd s1,8(sp) + 80010288: 00058413 mv s0,a1 + 8001028c: 00050493 mv s1,a0 + 80010290: 00113c23 sd ra,24(sp) + 80010294: 374280ef jal ra,80038608 <_Z18FCEUPPU_LineUpdatev> + 80010298: 00249713 slli a4,s1,0x2 + 8001029c: 000b2797 auipc a5,0xb2 + 800102a0: 2e478793 addi a5,a5,740 # 800c2580 + 800102a4: 00e787b3 add a5,a5,a4 + 800102a8: 0007a683 lw a3,0(a5) + 800102ac: 0003a817 auipc a6,0x3a + 800102b0: e5c83803 ld a6,-420(a6) # 8004a108 + 800102b4: 00349713 slli a4,s1,0x3 + 800102b8: 00d476b3 and a3,s0,a3 + 800102bc: 00d6969b slliw a3,a3,0xd + 800102c0: 02069693 slli a3,a3,0x20 + 800102c4: 000b2597 auipc a1,0xb2 + 800102c8: 33c58593 addi a1,a1,828 # 800c2600 + 800102cc: 0206d693 srli a3,a3,0x20 + 800102d0: 03880793 addi a5,a6,56 + 800102d4: 00e585b3 add a1,a1,a4 + 800102d8: 0005b703 ld a4,0(a1) + 800102dc: 00078613 mv a2,a5 + 800102e0: ff878793 addi a5,a5,-8 + 800102e4: 00d70733 add a4,a4,a3 + 800102e8: 00e7b423 sd a4,8(a5) + 800102ec: fec816e3 bne a6,a2,800102d8 <_Z8setchr8rij.part.0+0x5c> + 800102f0: 000b2517 auipc a0,0xb2 + 800102f4: 41050513 addi a0,a0,1040 # 800c2700 + 800102f8: 009504b3 add s1,a0,s1 + 800102fc: 0004c783 lbu a5,0(s1) + 80010300: 02078263 beqz a5,80010324 <_Z8setchr8rij.part.0+0xa8> + 80010304: 01813083 ld ra,24(sp) + 80010308: 01013403 ld s0,16(sp) + 8001030c: fff00793 li a5,-1 + 80010310: 001bc717 auipc a4,0x1bc + 80010314: 3ef70a23 sb a5,1012(a4) # 801cc704 + 80010318: 00813483 ld s1,8(sp) + 8001031c: 02010113 addi sp,sp,32 + 80010320: 00008067 ret + 80010324: 01813083 ld ra,24(sp) + 80010328: 01013403 ld s0,16(sp) + 8001032c: 001bc797 auipc a5,0x1bc + 80010330: 3c078c23 sb zero,984(a5) # 801cc704 + 80010334: 00813483 ld s1,8(sp) + 80010338: 02010113 addi sp,sp,32 + 8001033c: 00008067 ret + +0000000080010340 <_Z9setmirrori.part.0>: + 80010340: 00200793 li a5,2 + 80010344: 08f50263 beq a0,a5,800103c8 <_Z9setmirrori.part.0+0x88> + 80010348: 04a7c463 blt a5,a0,80010390 <_Z9setmirrori.part.0+0x50> + 8001034c: 0a050663 beqz a0,800103f8 <_Z9setmirrori.part.0+0xb8> + 80010350: 00100793 li a5,1 + 80010354: 02f51663 bne a0,a5,80010380 <_Z9setmirrori.part.0+0x40> + 80010358: 001bb797 auipc a5,0x1bb + 8001035c: 76878793 addi a5,a5,1896 # 801cbac0 + 80010360: 001b9697 auipc a3,0x1b9 + 80010364: 1c868693 addi a3,a3,456 # 801c9528 + 80010368: 001b9717 auipc a4,0x1b9 + 8001036c: 5c070713 addi a4,a4,1472 # 801c9928 + 80010370: 00d7b823 sd a3,16(a5) + 80010374: 00d7b023 sd a3,0(a5) + 80010378: 00e7bc23 sd a4,24(a5) + 8001037c: 00e7b423 sd a4,8(a5) + 80010380: 00f00793 li a5,15 + 80010384: 001bc717 auipc a4,0x1bc + 80010388: 38f70123 sb a5,898(a4) # 801cc706 + 8001038c: 00008067 ret + 80010390: 00300793 li a5,3 + 80010394: fef516e3 bne a0,a5,80010380 <_Z9setmirrori.part.0+0x40> + 80010398: 001bb797 auipc a5,0x1bb + 8001039c: 72878793 addi a5,a5,1832 # 801cbac0 + 800103a0: 001b9717 auipc a4,0x1b9 + 800103a4: 58870713 addi a4,a4,1416 # 801c9928 + 800103a8: 00e7bc23 sd a4,24(a5) + 800103ac: 00e7b823 sd a4,16(a5) + 800103b0: 00e7b423 sd a4,8(a5) + 800103b4: 00e7b023 sd a4,0(a5) + 800103b8: 00f00793 li a5,15 + 800103bc: 001bc717 auipc a4,0x1bc + 800103c0: 34f70523 sb a5,842(a4) # 801cc706 + 800103c4: 00008067 ret + 800103c8: 001bb797 auipc a5,0x1bb + 800103cc: 6f878793 addi a5,a5,1784 # 801cbac0 + 800103d0: 001b9717 auipc a4,0x1b9 + 800103d4: 15870713 addi a4,a4,344 # 801c9528 + 800103d8: 00e7bc23 sd a4,24(a5) + 800103dc: 00e7b823 sd a4,16(a5) + 800103e0: 00e7b423 sd a4,8(a5) + 800103e4: 00e7b023 sd a4,0(a5) + 800103e8: 00f00793 li a5,15 + 800103ec: 001bc717 auipc a4,0x1bc + 800103f0: 30f70d23 sb a5,794(a4) # 801cc706 + 800103f4: 00008067 ret + 800103f8: 001bb797 auipc a5,0x1bb + 800103fc: 6c878793 addi a5,a5,1736 # 801cbac0 + 80010400: 001b9717 auipc a4,0x1b9 + 80010404: 52870713 addi a4,a4,1320 # 801c9928 + 80010408: 001b9697 auipc a3,0x1b9 + 8001040c: 12068693 addi a3,a3,288 # 801c9528 + 80010410: 00e7bc23 sd a4,24(a5) + 80010414: 00e7b823 sd a4,16(a5) + 80010418: 00d7b423 sd a3,8(a5) + 8001041c: 00d7b023 sd a3,0(a5) + 80010420: 00f00793 li a5,15 + 80010424: 001bc717 auipc a4,0x1bc + 80010428: 2ef70123 sb a5,738(a4) # 801cc706 + 8001042c: 00008067 ret + +0000000080010430 <_Z16ResetCartMappingv>: + 80010430: ff010113 addi sp,sp,-16 + 80010434: 00113423 sd ra,8(sp) + 80010438: 370280ef jal ra,800387a8 <_Z14PPU_ResetHooksv> + 8001043c: 000b3817 auipc a6,0xb3 + 80010440: 94480813 addi a6,a6,-1724 # 800c2d80 <_ZL7nothing> + 80010444: 000b2797 auipc a5,0xb2 + 80010448: 7fc78793 addi a5,a5,2044 # 800c2c40 + 8001044c: 000b2517 auipc a0,0xb2 + 80010450: 1b450513 addi a0,a0,436 # 800c2600 + 80010454: 000b2597 auipc a1,0xb2 + 80010458: 64c58593 addi a1,a1,1612 # 800c2aa0 + 8001045c: 000b2617 auipc a2,0xb2 + 80010460: 2c460613 addi a2,a2,708 # 800c2720 + 80010464: 000b2697 auipc a3,0xb2 + 80010468: 75c68693 addi a3,a3,1884 # 800c2bc0 + 8001046c: 000b3897 auipc a7,0xb3 + 80010470: 8d488893 addi a7,a7,-1836 # 800c2d40 + 80010474: 00080713 mv a4,a6 + 80010478: 00e7b023 sd a4,0(a5) + 8001047c: 00053023 sd zero,0(a0) + 80010480: 0005b023 sd zero,0(a1) + 80010484: 00062023 sw zero,0(a2) + 80010488: 0006a023 sw zero,0(a3) + 8001048c: 00878793 addi a5,a5,8 + 80010490: 80070713 addi a4,a4,-2048 + 80010494: 00850513 addi a0,a0,8 + 80010498: 00858593 addi a1,a1,8 + 8001049c: 00460613 addi a2,a2,4 + 800104a0: 00468693 addi a3,a3,4 + 800104a4: fd179ae3 bne a5,a7,80010478 <_Z16ResetCartMappingv+0x48> + 800104a8: 0003a697 auipc a3,0x3a + 800104ac: c606b683 ld a3,-928(a3) # 8004a108 + 800104b0: 000b2717 auipc a4,0xb2 + 800104b4: 2f070713 addi a4,a4,752 # 800c27a0 + 800104b8: 000b2797 auipc a5,0xb2 + 800104bc: 32878793 addi a5,a5,808 # 800c27e0 + 800104c0: 000b1617 auipc a2,0xb1 + 800104c4: 8c060613 addi a2,a2,-1856 # 800c0d80 <_ZL9sq2coeffs+0x210> + 800104c8: 0106b023 sd a6,0(a3) + 800104cc: 01073023 sd a6,0(a4) + 800104d0: 0107b023 sd a6,0(a5) + 800104d4: c0080813 addi a6,a6,-1024 + 800104d8: 00868693 addi a3,a3,8 + 800104dc: 00870713 addi a4,a4,8 + 800104e0: 00878793 addi a5,a5,8 + 800104e4: fec812e3 bne a6,a2,800104c8 <_Z16ResetCartMappingv+0x98> + 800104e8: 00813083 ld ra,8(sp) + 800104ec: 01010113 addi sp,sp,16 + 800104f0: 00008067 ret + +00000000800104f4 <_Z19SetupCartPRGMappingiPhji>: + 800104f4: ff010113 addi sp,sp,-16 + 800104f8: 00813423 sd s0,8(sp) + 800104fc: 00351e13 slli t3,a0,0x3 + 80010500: 00c6531b srliw t1,a2,0xc + 80010504: 00d6589b srliw a7,a2,0xd + 80010508: 00e6571b srliw a4,a2,0xe + 8001050c: 000b2417 auipc s0,0xb2 + 80010510: 59440413 addi s0,s0,1428 # 800c2aa0 + 80010514: 00913023 sd s1,0(sp) + 80010518: 00251793 slli a5,a0,0x2 + 8001051c: 01c40433 add s0,s0,t3 + 80010520: fff3049b addiw s1,t1,-1 + 80010524: fff88e9b addiw t4,a7,-1 + 80010528: fff7031b addiw t1,a4,-1 + 8001052c: 000b2397 auipc t2,0xb2 + 80010530: 69438393 addi t2,t2,1684 # 800c2bc0 + 80010534: 000b2717 auipc a4,0xb2 + 80010538: 3ec70713 addi a4,a4,1004 # 800c2920 + 8001053c: 000b2f97 auipc t6,0xb2 + 80010540: 364f8f93 addi t6,t6,868 # 800c28a0 + 80010544: 000b2f17 auipc t5,0xb2 + 80010548: 45cf0f13 addi t5,t5,1116 # 800c29a0 + 8001054c: 000b2e17 auipc t3,0xb2 + 80010550: 4d4e0e13 addi t3,t3,1236 # 800c2a20 + 80010554: 000b2897 auipc a7,0xb2 + 80010558: 2cc88893 addi a7,a7,716 # 800c2820 + 8001055c: 00f383b3 add t2,t2,a5 + 80010560: 00ff8fb3 add t6,t6,a5 + 80010564: 00ff0f33 add t5,t5,a5 + 80010568: 00fe0e33 add t3,t3,a5 + 8001056c: 00f888b3 add a7,a7,a5 + 80010570: 00f707b3 add a5,a4,a5 + 80010574: 000b2717 auipc a4,0xb2 + 80010578: 62c70713 addi a4,a4,1580 # 800c2ba0 + 8001057c: 00a70533 add a0,a4,a0 + 80010580: 00d036b3 snez a3,a3 + 80010584: 00d50023 sb a3,0(a0) + 80010588: 00b43023 sd a1,0(s0) + 8001058c: 00b6529b srliw t0,a2,0xb + 80010590: 00813403 ld s0,8(sp) + 80010594: 00f6581b srliw a6,a2,0xf + 80010598: fff2829b addiw t0,t0,-1 + 8001059c: fff8081b addiw a6,a6,-1 + 800105a0: 009f2023 sw s1,0(t5) + 800105a4: 00c3a023 sw a2,0(t2) + 800105a8: 005fa023 sw t0,0(t6) + 800105ac: 01de2023 sw t4,0(t3) + 800105b0: 0068a023 sw t1,0(a7) + 800105b4: 0107a023 sw a6,0(a5) + 800105b8: 00013483 ld s1,0(sp) + 800105bc: 01010113 addi sp,sp,16 + 800105c0: 00008067 ret + +00000000800105c4 <_Z19SetupCartCHRMappingiPhji>: + 800105c4: 00351e13 slli t3,a0,0x3 + 800105c8: 00a6531b srliw t1,a2,0xa + 800105cc: 00b6589b srliw a7,a2,0xb + 800105d0: 00c6571b srliw a4,a2,0xc + 800105d4: 000b2397 auipc t2,0xb2 + 800105d8: 02c38393 addi t2,t2,44 # 800c2600 + 800105dc: 00251793 slli a5,a0,0x2 + 800105e0: 01c383b3 add t2,t2,t3 + 800105e4: fff30f9b addiw t6,t1,-1 + 800105e8: fff88e9b addiw t4,a7,-1 + 800105ec: fff7031b addiw t1,a4,-1 + 800105f0: 000b2297 auipc t0,0xb2 + 800105f4: 13028293 addi t0,t0,304 # 800c2720 + 800105f8: 000b2717 auipc a4,0xb2 + 800105fc: f8870713 addi a4,a4,-120 # 800c2580 + 80010600: 000b2f17 auipc t5,0xb2 + 80010604: e00f0f13 addi t5,t5,-512 # 800c2400 + 80010608: 000b2e17 auipc t3,0xb2 + 8001060c: e78e0e13 addi t3,t3,-392 # 800c2480 + 80010610: 000b2897 auipc a7,0xb2 + 80010614: ef088893 addi a7,a7,-272 # 800c2500 + 80010618: 00f282b3 add t0,t0,a5 + 8001061c: 00ff0f33 add t5,t5,a5 + 80010620: 00fe0e33 add t3,t3,a5 + 80010624: 00f888b3 add a7,a7,a5 + 80010628: 00d6581b srliw a6,a2,0xd + 8001062c: 00f707b3 add a5,a4,a5 + 80010630: 000b2717 auipc a4,0xb2 + 80010634: 0d070713 addi a4,a4,208 # 800c2700 + 80010638: fff8081b addiw a6,a6,-1 + 8001063c: 00a70533 add a0,a4,a0 + 80010640: 00b3b023 sd a1,0(t2) + 80010644: 00c2a023 sw a2,0(t0) + 80010648: 01ff2023 sw t6,0(t5) + 8001064c: 01de2023 sw t4,0(t3) + 80010650: 0068a023 sw t1,0(a7) + 80010654: 0107a023 sw a6,0(a5) + 80010658: 00d50023 sb a3,0(a0) + 8001065c: 00008067 ret + +0000000080010660 <_Z6CartBRj>: + 80010660: 00b5579b srliw a5,a0,0xb + 80010664: 00379713 slli a4,a5,0x3 + 80010668: 000b2797 auipc a5,0xb2 + 8001066c: 5d878793 addi a5,a5,1496 # 800c2c40 + 80010670: 00e787b3 add a5,a5,a4 + 80010674: 0007b783 ld a5,0(a5) + 80010678: 02051513 slli a0,a0,0x20 + 8001067c: 02055513 srli a0,a0,0x20 + 80010680: 00a78533 add a0,a5,a0 + 80010684: 00054503 lbu a0,0(a0) + 80010688: 00008067 ret + +000000008001068c <_Z6CartBWjh>: + 8001068c: 00b5571b srliw a4,a0,0xb + 80010690: 000b4797 auipc a5,0xb4 + 80010694: 6f078793 addi a5,a5,1776 # 800c4d80 <_ZL8PRGIsRAM> + 80010698: 00e787b3 add a5,a5,a4 + 8001069c: 0007c783 lbu a5,0(a5) + 800106a0: 02078663 beqz a5,800106cc <_Z6CartBWjh+0x40> + 800106a4: 000b2797 auipc a5,0xb2 + 800106a8: 59c78793 addi a5,a5,1436 # 800c2c40 + 800106ac: 00371713 slli a4,a4,0x3 + 800106b0: 00e78733 add a4,a5,a4 + 800106b4: 00073783 ld a5,0(a4) + 800106b8: 00078a63 beqz a5,800106cc <_Z6CartBWjh+0x40> + 800106bc: 02051513 slli a0,a0,0x20 + 800106c0: 02055513 srli a0,a0,0x20 + 800106c4: 00a78533 add a0,a5,a0 + 800106c8: 00b50023 sb a1,0(a0) + 800106cc: 00008067 ret + +00000000800106d0 <_Z8CartBROBj>: + 800106d0: 00b5579b srliw a5,a0,0xb + 800106d4: 00379713 slli a4,a5,0x3 + 800106d8: 000b2797 auipc a5,0xb2 + 800106dc: 56878793 addi a5,a5,1384 # 800c2c40 + 800106e0: 00e787b3 add a5,a5,a4 + 800106e4: 0007b783 ld a5,0(a5) + 800106e8: 00078c63 beqz a5,80010700 <_Z8CartBROBj+0x30> + 800106ec: 02051513 slli a0,a0,0x20 + 800106f0: 02055513 srli a0,a0,0x20 + 800106f4: 00a78533 add a0,a5,a0 + 800106f8: 00054503 lbu a0,0(a0) + 800106fc: 00008067 ret + 80010700: 00047517 auipc a0,0x47 + 80010704: 16854503 lbu a0,360(a0) # 80057868 + 80010708: 00008067 ret + +000000008001070c <_Z8setprg2rijj>: + 8001070c: 00351713 slli a4,a0,0x3 + 80010710: 000b2797 auipc a5,0xb2 + 80010714: 39078793 addi a5,a5,912 # 800c2aa0 + 80010718: 00e787b3 add a5,a5,a4 + 8001071c: 0007b683 ld a3,0(a5) + 80010720: 00b5d71b srliw a4,a1,0xb + 80010724: 06068c63 beqz a3,8001079c <_Z8setprg2rijj+0x90> + 80010728: 00251813 slli a6,a0,0x2 + 8001072c: 000b2797 auipc a5,0xb2 + 80010730: 17478793 addi a5,a5,372 # 800c28a0 + 80010734: 010787b3 add a5,a5,a6 + 80010738: 0007a783 lw a5,0(a5) + 8001073c: 000b2817 auipc a6,0xb2 + 80010740: 46480813 addi a6,a6,1124 # 800c2ba0 + 80010744: 00a80533 add a0,a6,a0 + 80010748: 00f67633 and a2,a2,a5 + 8001074c: 00b6179b slliw a5,a2,0xb + 80010750: 02071713 slli a4,a4,0x20 + 80010754: 02079793 slli a5,a5,0x20 + 80010758: 02059593 slli a1,a1,0x20 + 8001075c: 02075713 srli a4,a4,0x20 + 80010760: 0205d593 srli a1,a1,0x20 + 80010764: 00054503 lbu a0,0(a0) + 80010768: 0207d793 srli a5,a5,0x20 + 8001076c: 00371813 slli a6,a4,0x3 + 80010770: 40b787b3 sub a5,a5,a1 + 80010774: 000b2617 auipc a2,0xb2 + 80010778: 4cc60613 addi a2,a2,1228 # 800c2c40 + 8001077c: 000b4597 auipc a1,0xb4 + 80010780: 60458593 addi a1,a1,1540 # 800c4d80 <_ZL8PRGIsRAM> + 80010784: 00e58733 add a4,a1,a4 + 80010788: 01060633 add a2,a2,a6 + 8001078c: 00f687b3 add a5,a3,a5 + 80010790: 00a70023 sb a0,0(a4) + 80010794: 00f63023 sd a5,0(a2) + 80010798: 00008067 ret + 8001079c: 02071713 slli a4,a4,0x20 + 800107a0: 02075713 srli a4,a4,0x20 + 800107a4: 00371613 slli a2,a4,0x3 + 800107a8: 000b4697 auipc a3,0xb4 + 800107ac: 5d868693 addi a3,a3,1496 # 800c4d80 <_ZL8PRGIsRAM> + 800107b0: 000b2797 auipc a5,0xb2 + 800107b4: 49078793 addi a5,a5,1168 # 800c2c40 + 800107b8: 00e68733 add a4,a3,a4 + 800107bc: 00c787b3 add a5,a5,a2 + 800107c0: 00070023 sb zero,0(a4) + 800107c4: 0007b023 sd zero,0(a5) + 800107c8: 00008067 ret + +00000000800107cc <_Z7setprg2jj>: + 800107cc: 00058613 mv a2,a1 + 800107d0: 00050593 mv a1,a0 + 800107d4: 00000513 li a0,0 + 800107d8: f35ff06f j 8001070c <_Z8setprg2rijj> + +00000000800107dc <_Z8setprg4rijj>: + 800107dc: 00351713 slli a4,a0,0x3 + 800107e0: 000b2797 auipc a5,0xb2 + 800107e4: 2c078793 addi a5,a5,704 # 800c2aa0 + 800107e8: 00e787b3 add a5,a5,a4 + 800107ec: 0007b803 ld a6,0(a5) + 800107f0: 00b5d69b srliw a3,a1,0xb + 800107f4: 0016871b addiw a4,a3,1 + 800107f8: 08080a63 beqz a6,8001088c <_Z8setprg4rijj+0xb0> + 800107fc: 00251893 slli a7,a0,0x2 + 80010800: 000b2797 auipc a5,0xb2 + 80010804: 1a078793 addi a5,a5,416 # 800c29a0 + 80010808: 011787b3 add a5,a5,a7 + 8001080c: 0007a783 lw a5,0(a5) + 80010810: 000b2897 auipc a7,0xb2 + 80010814: 39088893 addi a7,a7,912 # 800c2ba0 + 80010818: 00a88533 add a0,a7,a0 + 8001081c: 00f67633 and a2,a2,a5 + 80010820: 00c6179b slliw a5,a2,0xc + 80010824: 02071713 slli a4,a4,0x20 + 80010828: 02079793 slli a5,a5,0x20 + 8001082c: 02059593 slli a1,a1,0x20 + 80010830: 00054883 lbu a7,0(a0) + 80010834: 02075713 srli a4,a4,0x20 + 80010838: 0205d593 srli a1,a1,0x20 + 8001083c: 0207d793 srli a5,a5,0x20 + 80010840: 02069693 slli a3,a3,0x20 + 80010844: 000b4517 auipc a0,0xb4 + 80010848: 53c50513 addi a0,a0,1340 # 800c4d80 <_ZL8PRGIsRAM> + 8001084c: 000b2617 auipc a2,0xb2 + 80010850: 3f460613 addi a2,a2,1012 # 800c2c40 + 80010854: 0206d693 srli a3,a3,0x20 + 80010858: 40b787b3 sub a5,a5,a1 + 8001085c: 00371593 slli a1,a4,0x3 + 80010860: 00f807b3 add a5,a6,a5 + 80010864: 00b605b3 add a1,a2,a1 + 80010868: 00369813 slli a6,a3,0x3 + 8001086c: 00e50733 add a4,a0,a4 + 80010870: 01170023 sb a7,0(a4) + 80010874: 00f5b023 sd a5,0(a1) + 80010878: 00d506b3 add a3,a0,a3 + 8001087c: 01060633 add a2,a2,a6 + 80010880: 01168023 sb a7,0(a3) + 80010884: 00f63023 sd a5,0(a2) + 80010888: 00008067 ret + 8001088c: 02071713 slli a4,a4,0x20 + 80010890: 02075713 srli a4,a4,0x20 + 80010894: 02069693 slli a3,a3,0x20 + 80010898: 000b4617 auipc a2,0xb4 + 8001089c: 4e860613 addi a2,a2,1256 # 800c4d80 <_ZL8PRGIsRAM> + 800108a0: 000b2797 auipc a5,0xb2 + 800108a4: 3a078793 addi a5,a5,928 # 800c2c40 + 800108a8: 0206d693 srli a3,a3,0x20 + 800108ac: 00371593 slli a1,a4,0x3 + 800108b0: 00b785b3 add a1,a5,a1 + 800108b4: 00369513 slli a0,a3,0x3 + 800108b8: 00e60733 add a4,a2,a4 + 800108bc: 00070023 sb zero,0(a4) + 800108c0: 0005b023 sd zero,0(a1) + 800108c4: 00d606b3 add a3,a2,a3 + 800108c8: 00a787b3 add a5,a5,a0 + 800108cc: 00068023 sb zero,0(a3) + 800108d0: 0007b023 sd zero,0(a5) + 800108d4: 00008067 ret + +00000000800108d8 <_Z7setprg4jj>: + 800108d8: 00058613 mv a2,a1 + 800108dc: 00050593 mv a1,a0 + 800108e0: 00000513 li a0,0 + 800108e4: ef9ff06f j 800107dc <_Z8setprg4rijj> + +00000000800108e8 <_Z8setprg8rijj>: + 800108e8: 00251693 slli a3,a0,0x2 + 800108ec: 000b2797 auipc a5,0xb2 + 800108f0: 2d478793 addi a5,a5,724 # 800c2bc0 + 800108f4: 00d787b3 add a5,a5,a3 + 800108f8: 0007a803 lw a6,0(a5) + 800108fc: 00351713 slli a4,a0,0x3 + 80010900: 000b2797 auipc a5,0xb2 + 80010904: 1a078793 addi a5,a5,416 # 800c2aa0 + 80010908: 00e787b3 add a5,a5,a4 + 8001090c: 00002737 lui a4,0x2 + 80010910: 0007be83 ld t4,0(a5) + 80010914: 08e86863 bltu a6,a4,800109a4 <_Z8setprg8rijj+0xbc> + 80010918: 00b5d79b srliw a5,a1,0xb + 8001091c: 00b5d81b srliw a6,a1,0xb + 80010920: 120e8e63 beqz t4,80010a5c <_Z8setprg8rijj+0x174> + 80010924: 000b2297 auipc t0,0xb2 + 80010928: 0fc28293 addi t0,t0,252 # 800c2a20 + 8001092c: 00d282b3 add t0,t0,a3 + 80010930: 0002a683 lw a3,0(t0) + 80010934: 000b2717 auipc a4,0xb2 + 80010938: 26c70713 addi a4,a4,620 # 800c2ba0 + 8001093c: 00a70533 add a0,a4,a0 + 80010940: 00d67633 and a2,a2,a3 + 80010944: 00d6161b slliw a2,a2,0xd + 80010948: 02061613 slli a2,a2,0x20 + 8001094c: 02059593 slli a1,a1,0x20 + 80010950: 02065613 srli a2,a2,0x20 + 80010954: 0205d593 srli a1,a1,0x20 + 80010958: 00054503 lbu a0,0(a0) + 8001095c: 40b60633 sub a2,a2,a1 + 80010960: 00ce8633 add a2,t4,a2 + 80010964: 0037879b addiw a5,a5,3 + 80010968: 000b4317 auipc t1,0xb4 + 8001096c: 41830313 addi t1,t1,1048 # 800c4d80 <_ZL8PRGIsRAM> + 80010970: 000b2897 auipc a7,0xb2 + 80010974: 2d088893 addi a7,a7,720 # 800c2c40 + 80010978: 02079713 slli a4,a5,0x20 + 8001097c: 02075713 srli a4,a4,0x20 + 80010980: 00371693 slli a3,a4,0x3 + 80010984: 00d886b3 add a3,a7,a3 + 80010988: 00e30733 add a4,t1,a4 + 8001098c: 0007859b sext.w a1,a5 + 80010990: 00a70023 sb a0,0(a4) + 80010994: 00c6b023 sd a2,0(a3) + 80010998: fff7879b addiw a5,a5,-1 + 8001099c: fcb81ee3 bne a6,a1,80010978 <_Z8setprg8rijj+0x90> + 800109a0: 00008067 ret + 800109a4: ff010113 addi sp,sp,-16 + 800109a8: 0026171b slliw a4,a2,0x2 + 800109ac: 000b2297 auipc t0,0xb2 + 800109b0: ef428293 addi t0,t0,-268 # 800c28a0 + 800109b4: 000b2f97 auipc t6,0xb2 + 800109b8: 1ecf8f93 addi t6,t6,492 # 800c2ba0 + 800109bc: 00001637 lui a2,0x1 + 800109c0: 00813423 sd s0,8(sp) + 800109c4: 00000813 li a6,0 + 800109c8: 000b4317 auipc t1,0xb4 + 800109cc: 3b830313 addi t1,t1,952 # 800c4d80 <_ZL8PRGIsRAM> + 800109d0: 000b2897 auipc a7,0xb2 + 800109d4: 27088893 addi a7,a7,624 # 800c2c40 + 800109d8: 00d282b3 add t0,t0,a3 + 800109dc: 00af8fb3 add t6,t6,a0 + 800109e0: 8006061b addiw a2,a2,-2048 + 800109e4: 00400413 li s0,4 + 800109e8: 00b5d51b srliw a0,a1,0xb + 800109ec: 02051693 slli a3,a0,0x20 + 800109f0: 0206d693 srli a3,a3,0x20 + 800109f4: 00369e13 slli t3,a3,0x3 + 800109f8: 02059f13 slli t5,a1,0x20 + 800109fc: 00e807bb addw a5,a6,a4 + 80010a00: 020f5f13 srli t5,t5,0x20 + 80010a04: 00d306b3 add a3,t1,a3 + 80010a08: 01c88e33 add t3,a7,t3 + 80010a0c: 040e8263 beqz t4,80010a50 <_Z8setprg8rijj+0x168> + 80010a10: 0002a383 lw t2,0(t0) + 80010a14: 000fc503 lbu a0,0(t6) + 80010a18: 0077f7b3 and a5,a5,t2 + 80010a1c: 00b7979b slliw a5,a5,0xb + 80010a20: 02079793 slli a5,a5,0x20 + 80010a24: 0207d793 srli a5,a5,0x20 + 80010a28: 41e787b3 sub a5,a5,t5 + 80010a2c: 00fe87b3 add a5,t4,a5 + 80010a30: 00a68023 sb a0,0(a3) + 80010a34: 00fe3023 sd a5,0(t3) + 80010a38: 0018081b addiw a6,a6,1 + 80010a3c: 00b605bb addw a1,a2,a1 + 80010a40: fa8814e3 bne a6,s0,800109e8 <_Z8setprg8rijj+0x100> + 80010a44: 00813403 ld s0,8(sp) + 80010a48: 01010113 addi sp,sp,16 + 80010a4c: 00008067 ret + 80010a50: 00068023 sb zero,0(a3) + 80010a54: 000e3023 sd zero,0(t3) + 80010a58: fe1ff06f j 80010a38 <_Z8setprg8rijj+0x150> + 80010a5c: 0037879b addiw a5,a5,3 + 80010a60: 000b4317 auipc t1,0xb4 + 80010a64: 32030313 addi t1,t1,800 # 800c4d80 <_ZL8PRGIsRAM> + 80010a68: 000b2897 auipc a7,0xb2 + 80010a6c: 1d888893 addi a7,a7,472 # 800c2c40 + 80010a70: 02079713 slli a4,a5,0x20 + 80010a74: 02075713 srli a4,a4,0x20 + 80010a78: 00371693 slli a3,a4,0x3 + 80010a7c: 00d886b3 add a3,a7,a3 + 80010a80: 00e30733 add a4,t1,a4 + 80010a84: 0007861b sext.w a2,a5 + 80010a88: 00070023 sb zero,0(a4) + 80010a8c: 0006b023 sd zero,0(a3) + 80010a90: fff7879b addiw a5,a5,-1 + 80010a94: fcc81ee3 bne a6,a2,80010a70 <_Z8setprg8rijj+0x188> + 80010a98: 00008067 ret + +0000000080010a9c <_Z7setprg8jj>: + 80010a9c: 00058613 mv a2,a1 + 80010aa0: 00050593 mv a1,a0 + 80010aa4: 00000513 li a0,0 + 80010aa8: e41ff06f j 800108e8 <_Z8setprg8rijj> + +0000000080010aac <_Z9setprg16rijj>: + 80010aac: 00251693 slli a3,a0,0x2 + 80010ab0: 000b2797 auipc a5,0xb2 + 80010ab4: 11078793 addi a5,a5,272 # 800c2bc0 + 80010ab8: 00d787b3 add a5,a5,a3 + 80010abc: 0007a803 lw a6,0(a5) + 80010ac0: 00351713 slli a4,a0,0x3 + 80010ac4: 000b2797 auipc a5,0xb2 + 80010ac8: fdc78793 addi a5,a5,-36 # 800c2aa0 + 80010acc: 00e787b3 add a5,a5,a4 + 80010ad0: 00004737 lui a4,0x4 + 80010ad4: 0007b303 ld t1,0(a5) + 80010ad8: 08e86863 bltu a6,a4,80010b68 <_Z9setprg16rijj+0xbc> + 80010adc: 00b5d79b srliw a5,a1,0xb + 80010ae0: 00b5de1b srliw t3,a1,0xb + 80010ae4: 12030a63 beqz t1,80010c18 <_Z9setprg16rijj+0x16c> + 80010ae8: 000b2717 auipc a4,0xb2 + 80010aec: d3870713 addi a4,a4,-712 # 800c2820 + 80010af0: 00d706b3 add a3,a4,a3 + 80010af4: 0006a683 lw a3,0(a3) + 80010af8: 000b2717 auipc a4,0xb2 + 80010afc: 0a870713 addi a4,a4,168 # 800c2ba0 + 80010b00: 00a70533 add a0,a4,a0 + 80010b04: 00d67633 and a2,a2,a3 + 80010b08: 00e6161b slliw a2,a2,0xe + 80010b0c: 02061613 slli a2,a2,0x20 + 80010b10: 02059593 slli a1,a1,0x20 + 80010b14: 02065613 srli a2,a2,0x20 + 80010b18: 0205d593 srli a1,a1,0x20 + 80010b1c: 00054503 lbu a0,0(a0) + 80010b20: 40b60633 sub a2,a2,a1 + 80010b24: 00c30633 add a2,t1,a2 + 80010b28: 0077879b addiw a5,a5,7 + 80010b2c: 000b4897 auipc a7,0xb4 + 80010b30: 25488893 addi a7,a7,596 # 800c4d80 <_ZL8PRGIsRAM> + 80010b34: 000b2817 auipc a6,0xb2 + 80010b38: 10c80813 addi a6,a6,268 # 800c2c40 + 80010b3c: 02079713 slli a4,a5,0x20 + 80010b40: 02075713 srli a4,a4,0x20 + 80010b44: 00371693 slli a3,a4,0x3 + 80010b48: 00d806b3 add a3,a6,a3 + 80010b4c: 00e88733 add a4,a7,a4 + 80010b50: 0007859b sext.w a1,a5 + 80010b54: 00a70023 sb a0,0(a4) + 80010b58: 00c6b023 sd a2,0(a3) + 80010b5c: fff7879b addiw a5,a5,-1 + 80010b60: fcbe1ee3 bne t3,a1,80010b3c <_Z9setprg16rijj+0x90> + 80010b64: 00008067 ret + 80010b68: 00004f37 lui t5,0x4 + 80010b6c: 000b2f97 auipc t6,0xb2 + 80010b70: d34f8f93 addi t6,t6,-716 # 800c28a0 + 80010b74: 000b2297 auipc t0,0xb2 + 80010b78: 02c28293 addi t0,t0,44 # 800c2ba0 + 80010b7c: 00001eb7 lui t4,0x1 + 80010b80: 0036171b slliw a4,a2,0x3 + 80010b84: 00bf0f3b addw t5,t5,a1 + 80010b88: 000b4897 auipc a7,0xb4 + 80010b8c: 1f888893 addi a7,a7,504 # 800c4d80 <_ZL8PRGIsRAM> + 80010b90: 000b2817 auipc a6,0xb2 + 80010b94: 0b080813 addi a6,a6,176 # 800c2c40 + 80010b98: 00df8fb3 add t6,t6,a3 + 80010b9c: 00a282b3 add t0,t0,a0 + 80010ba0: 800e8e9b addiw t4,t4,-2048 + 80010ba4: 0380006f j 80010bdc <_Z9setprg16rijj+0x130> + 80010ba8: 000fa783 lw a5,0(t6) + 80010bac: 0002c603 lbu a2,0(t0) + 80010bb0: 00be85bb addw a1,t4,a1 + 80010bb4: 00f777b3 and a5,a4,a5 + 80010bb8: 00b7979b slliw a5,a5,0xb + 80010bbc: 02079793 slli a5,a5,0x20 + 80010bc0: 0207d793 srli a5,a5,0x20 + 80010bc4: 41c787b3 sub a5,a5,t3 + 80010bc8: 00f307b3 add a5,t1,a5 + 80010bcc: 00c68023 sb a2,0(a3) + 80010bd0: 00f53023 sd a5,0(a0) + 80010bd4: 0017071b addiw a4,a4,1 + 80010bd8: 02bf0e63 beq t5,a1,80010c14 <_Z9setprg16rijj+0x168> + 80010bdc: 00b5d61b srliw a2,a1,0xb + 80010be0: 02061693 slli a3,a2,0x20 + 80010be4: 0206d693 srli a3,a3,0x20 + 80010be8: 00369513 slli a0,a3,0x3 + 80010bec: 02059e13 slli t3,a1,0x20 + 80010bf0: 020e5e13 srli t3,t3,0x20 + 80010bf4: 00d886b3 add a3,a7,a3 + 80010bf8: 00a80533 add a0,a6,a0 + 80010bfc: fa0316e3 bnez t1,80010ba8 <_Z9setprg16rijj+0xfc> + 80010c00: 00068023 sb zero,0(a3) + 80010c04: 00053023 sd zero,0(a0) + 80010c08: 00be85bb addw a1,t4,a1 + 80010c0c: 0017071b addiw a4,a4,1 + 80010c10: fcbf16e3 bne t5,a1,80010bdc <_Z9setprg16rijj+0x130> + 80010c14: 00008067 ret + 80010c18: 0077879b addiw a5,a5,7 + 80010c1c: 000b4897 auipc a7,0xb4 + 80010c20: 16488893 addi a7,a7,356 # 800c4d80 <_ZL8PRGIsRAM> + 80010c24: 000b2817 auipc a6,0xb2 + 80010c28: 01c80813 addi a6,a6,28 # 800c2c40 + 80010c2c: 02079713 slli a4,a5,0x20 + 80010c30: 02075713 srli a4,a4,0x20 + 80010c34: 00371693 slli a3,a4,0x3 + 80010c38: 00d806b3 add a3,a6,a3 + 80010c3c: 00e88733 add a4,a7,a4 + 80010c40: 0007861b sext.w a2,a5 + 80010c44: 00070023 sb zero,0(a4) + 80010c48: 0006b023 sd zero,0(a3) + 80010c4c: fff7879b addiw a5,a5,-1 + 80010c50: fcce1ee3 bne t3,a2,80010c2c <_Z9setprg16rijj+0x180> + 80010c54: 00008067 ret + +0000000080010c58 <_Z8setprg16jj>: + 80010c58: 00058613 mv a2,a1 + 80010c5c: 00050593 mv a1,a0 + 80010c60: 00000513 li a0,0 + 80010c64: e49ff06f j 80010aac <_Z9setprg16rijj> + +0000000080010c68 <_Z9setprg32rijj>: + 80010c68: 00251713 slli a4,a0,0x2 + 80010c6c: 000b2797 auipc a5,0xb2 + 80010c70: f5478793 addi a5,a5,-172 # 800c2bc0 + 80010c74: 00e787b3 add a5,a5,a4 + 80010c78: 0007a803 lw a6,0(a5) + 80010c7c: 00351693 slli a3,a0,0x3 + 80010c80: 000b2797 auipc a5,0xb2 + 80010c84: e2078793 addi a5,a5,-480 # 800c2aa0 + 80010c88: 00d787b3 add a5,a5,a3 + 80010c8c: 000086b7 lui a3,0x8 + 80010c90: 0007b883 ld a7,0(a5) + 80010c94: 08d86863 bltu a6,a3,80010d24 <_Z9setprg32rijj+0xbc> + 80010c98: 00b5d79b srliw a5,a1,0xb + 80010c9c: 00b5d81b srliw a6,a1,0xb + 80010ca0: 12088a63 beqz a7,80010dd4 <_Z9setprg32rijj+0x16c> + 80010ca4: 000b2697 auipc a3,0xb2 + 80010ca8: c7c68693 addi a3,a3,-900 # 800c2920 + 80010cac: 00e68733 add a4,a3,a4 + 80010cb0: 00072683 lw a3,0(a4) + 80010cb4: 000b2717 auipc a4,0xb2 + 80010cb8: eec70713 addi a4,a4,-276 # 800c2ba0 + 80010cbc: 00a70533 add a0,a4,a0 + 80010cc0: 00d67633 and a2,a2,a3 + 80010cc4: 00f6161b slliw a2,a2,0xf + 80010cc8: 02061613 slli a2,a2,0x20 + 80010ccc: 02059593 slli a1,a1,0x20 + 80010cd0: 02065613 srli a2,a2,0x20 + 80010cd4: 0205d593 srli a1,a1,0x20 + 80010cd8: 00054503 lbu a0,0(a0) + 80010cdc: 40b60633 sub a2,a2,a1 + 80010ce0: 00c88633 add a2,a7,a2 + 80010ce4: 00f7879b addiw a5,a5,15 + 80010ce8: 000b4e17 auipc t3,0xb4 + 80010cec: 098e0e13 addi t3,t3,152 # 800c4d80 <_ZL8PRGIsRAM> + 80010cf0: 000b2317 auipc t1,0xb2 + 80010cf4: f5030313 addi t1,t1,-176 # 800c2c40 + 80010cf8: 02079713 slli a4,a5,0x20 + 80010cfc: 02075713 srli a4,a4,0x20 + 80010d00: 00371693 slli a3,a4,0x3 + 80010d04: 00d306b3 add a3,t1,a3 + 80010d08: 00ee0733 add a4,t3,a4 + 80010d0c: 0007859b sext.w a1,a5 + 80010d10: 00a70023 sb a0,0(a4) + 80010d14: 00c6b023 sd a2,0(a3) + 80010d18: fff7879b addiw a5,a5,-1 + 80010d1c: fcb81ee3 bne a6,a1,80010cf8 <_Z9setprg32rijj+0x90> + 80010d20: 00008067 ret + 80010d24: 00008f37 lui t5,0x8 + 80010d28: 000b2297 auipc t0,0xb2 + 80010d2c: b7828293 addi t0,t0,-1160 # 800c28a0 + 80010d30: 000b2f97 auipc t6,0xb2 + 80010d34: e70f8f93 addi t6,t6,-400 # 800c2ba0 + 80010d38: 00001eb7 lui t4,0x1 + 80010d3c: 0046169b slliw a3,a2,0x4 + 80010d40: 00bf0f3b addw t5,t5,a1 + 80010d44: 000b4e17 auipc t3,0xb4 + 80010d48: 03ce0e13 addi t3,t3,60 # 800c4d80 <_ZL8PRGIsRAM> + 80010d4c: 000b2317 auipc t1,0xb2 + 80010d50: ef430313 addi t1,t1,-268 # 800c2c40 + 80010d54: 00e282b3 add t0,t0,a4 + 80010d58: 00af8fb3 add t6,t6,a0 + 80010d5c: 800e8e9b addiw t4,t4,-2048 + 80010d60: 0380006f j 80010d98 <_Z9setprg32rijj+0x130> + 80010d64: 0002a783 lw a5,0(t0) + 80010d68: 000fc603 lbu a2,0(t6) + 80010d6c: 00be85bb addw a1,t4,a1 + 80010d70: 00f6f7b3 and a5,a3,a5 + 80010d74: 00b7979b slliw a5,a5,0xb + 80010d78: 02079793 slli a5,a5,0x20 + 80010d7c: 0207d793 srli a5,a5,0x20 + 80010d80: 410787b3 sub a5,a5,a6 + 80010d84: 00f887b3 add a5,a7,a5 + 80010d88: 00c70023 sb a2,0(a4) + 80010d8c: 00f53023 sd a5,0(a0) + 80010d90: 0016869b addiw a3,a3,1 + 80010d94: 02bf0e63 beq t5,a1,80010dd0 <_Z9setprg32rijj+0x168> + 80010d98: 00b5d61b srliw a2,a1,0xb + 80010d9c: 02061713 slli a4,a2,0x20 + 80010da0: 02075713 srli a4,a4,0x20 + 80010da4: 00371513 slli a0,a4,0x3 + 80010da8: 02059813 slli a6,a1,0x20 + 80010dac: 02085813 srli a6,a6,0x20 + 80010db0: 00ee0733 add a4,t3,a4 + 80010db4: 00a30533 add a0,t1,a0 + 80010db8: fa0896e3 bnez a7,80010d64 <_Z9setprg32rijj+0xfc> + 80010dbc: 00070023 sb zero,0(a4) + 80010dc0: 00053023 sd zero,0(a0) + 80010dc4: 00be85bb addw a1,t4,a1 + 80010dc8: 0016869b addiw a3,a3,1 + 80010dcc: fcbf16e3 bne t5,a1,80010d98 <_Z9setprg32rijj+0x130> + 80010dd0: 00008067 ret + 80010dd4: 00f7879b addiw a5,a5,15 + 80010dd8: 000b4e17 auipc t3,0xb4 + 80010ddc: fa8e0e13 addi t3,t3,-88 # 800c4d80 <_ZL8PRGIsRAM> + 80010de0: 000b2317 auipc t1,0xb2 + 80010de4: e6030313 addi t1,t1,-416 # 800c2c40 + 80010de8: 02079713 slli a4,a5,0x20 + 80010dec: 02075713 srli a4,a4,0x20 + 80010df0: 00371693 slli a3,a4,0x3 + 80010df4: 00d306b3 add a3,t1,a3 + 80010df8: 00ee0733 add a4,t3,a4 + 80010dfc: 0007861b sext.w a2,a5 + 80010e00: 00070023 sb zero,0(a4) + 80010e04: 0006b023 sd zero,0(a3) + 80010e08: fff7879b addiw a5,a5,-1 + 80010e0c: fcc81ee3 bne a6,a2,80010de8 <_Z9setprg32rijj+0x180> + 80010e10: 00008067 ret + +0000000080010e14 <_Z8setprg32jj>: + 80010e14: 00058613 mv a2,a1 + 80010e18: 00050593 mv a1,a0 + 80010e1c: 00000513 li a0,0 + 80010e20: e49ff06f j 80010c68 <_Z9setprg32rijj> + +0000000080010e24 <_Z8setchr1rijj>: + 80010e24: 00351713 slli a4,a0,0x3 + 80010e28: 000b1797 auipc a5,0xb1 + 80010e2c: 7d878793 addi a5,a5,2008 # 800c2600 + 80010e30: 00e787b3 add a5,a5,a4 + 80010e34: 0007b783 ld a5,0(a5) + 80010e38: 00078463 beqz a5,80010e40 <_Z8setchr1rijj+0x1c> + 80010e3c: 8f0ff06f j 8000ff2c <_Z8setchr1rijj.part.0> + 80010e40: 00008067 ret + +0000000080010e44 <_Z8setchr2rijj>: + 80010e44: 00351713 slli a4,a0,0x3 + 80010e48: 000b1797 auipc a5,0xb1 + 80010e4c: 7b878793 addi a5,a5,1976 # 800c2600 + 80010e50: 00e787b3 add a5,a5,a4 + 80010e54: 0007b783 ld a5,0(a5) + 80010e58: 00078463 beqz a5,80010e60 <_Z8setchr2rijj+0x1c> + 80010e5c: 9c0ff06f j 8001001c <_Z8setchr2rijj.part.0> + 80010e60: 00008067 ret + +0000000080010e64 <_Z8setchr4rijj>: + 80010e64: 00351713 slli a4,a0,0x3 + 80010e68: 000b1797 auipc a5,0xb1 + 80010e6c: 79878793 addi a5,a5,1944 # 800c2600 + 80010e70: 00e787b3 add a5,a5,a4 + 80010e74: 0007b783 ld a5,0(a5) + 80010e78: 00078463 beqz a5,80010e80 <_Z8setchr4rijj+0x1c> + 80010e7c: ac0ff06f j 8001013c <_Z8setchr4rijj.part.0> + 80010e80: 00008067 ret + +0000000080010e84 <_Z8setchr8rij>: + 80010e84: 00351713 slli a4,a0,0x3 + 80010e88: 000b1797 auipc a5,0xb1 + 80010e8c: 77878793 addi a5,a5,1912 # 800c2600 + 80010e90: 00e787b3 add a5,a5,a4 + 80010e94: 0007b783 ld a5,0(a5) + 80010e98: 00078463 beqz a5,80010ea0 <_Z8setchr8rij+0x1c> + 80010e9c: be0ff06f j 8001027c <_Z8setchr8rij.part.0> + 80010ea0: 00008067 ret + +0000000080010ea4 <_Z7setchr1jj>: + 80010ea4: 000b1797 auipc a5,0xb1 + 80010ea8: 75c7b783 ld a5,1884(a5) # 800c2600 + 80010eac: 00058613 mv a2,a1 + 80010eb0: 00078863 beqz a5,80010ec0 <_Z7setchr1jj+0x1c> + 80010eb4: 00050593 mv a1,a0 + 80010eb8: 00000513 li a0,0 + 80010ebc: 870ff06f j 8000ff2c <_Z8setchr1rijj.part.0> + 80010ec0: 00008067 ret + +0000000080010ec4 <_Z7setchr2jj>: + 80010ec4: 000b1797 auipc a5,0xb1 + 80010ec8: 73c7b783 ld a5,1852(a5) # 800c2600 + 80010ecc: 00058613 mv a2,a1 + 80010ed0: 00078863 beqz a5,80010ee0 <_Z7setchr2jj+0x1c> + 80010ed4: 00050593 mv a1,a0 + 80010ed8: 00000513 li a0,0 + 80010edc: 940ff06f j 8001001c <_Z8setchr2rijj.part.0> + 80010ee0: 00008067 ret + +0000000080010ee4 <_Z7setchr4jj>: + 80010ee4: 000b1797 auipc a5,0xb1 + 80010ee8: 71c7b783 ld a5,1820(a5) # 800c2600 + 80010eec: 00058613 mv a2,a1 + 80010ef0: 00078863 beqz a5,80010f00 <_Z7setchr4jj+0x1c> + 80010ef4: 00050593 mv a1,a0 + 80010ef8: 00000513 li a0,0 + 80010efc: a40ff06f j 8001013c <_Z8setchr4rijj.part.0> + 80010f00: 00008067 ret + +0000000080010f04 <_Z7setchr8j>: + 80010f04: 000b1797 auipc a5,0xb1 + 80010f08: 6fc7b783 ld a5,1788(a5) # 800c2600 + 80010f0c: 00050593 mv a1,a0 + 80010f10: 00078663 beqz a5,80010f1c <_Z7setchr8j+0x18> + 80010f14: 00000513 li a0,0 + 80010f18: b64ff06f j 8001027c <_Z8setchr8rij.part.0> + 80010f1c: 00008067 ret + +0000000080010f20 <_Z9setntamemPhij>: + 80010f20: fe010113 addi sp,sp,-32 + 80010f24: 00813823 sd s0,16(sp) + 80010f28: 00913423 sd s1,8(sp) + 80010f2c: 00060413 mv s0,a2 + 80010f30: 01213023 sd s2,0(sp) + 80010f34: 00113c23 sd ra,24(sp) + 80010f38: 00050913 mv s2,a0 + 80010f3c: 00058493 mv s1,a1 + 80010f40: 6c8270ef jal ra,80038608 <_Z18FCEUPPU_LineUpdatev> + 80010f44: 02041713 slli a4,s0,0x20 + 80010f48: 01d75793 srli a5,a4,0x1d + 80010f4c: 001bb717 auipc a4,0x1bb + 80010f50: b7470713 addi a4,a4,-1164 # 801cbac0 + 80010f54: 00f70733 add a4,a4,a5 + 80010f58: 00100793 li a5,1 + 80010f5c: 0087963b sllw a2,a5,s0 + 80010f60: 01273023 sd s2,0(a4) + 80010f64: 001bb797 auipc a5,0x1bb + 80010f68: 7a278793 addi a5,a5,1954 # 801cc706 + 80010f6c: 0186161b slliw a2,a2,0x18 + 80010f70: 00078703 lb a4,0(a5) + 80010f74: 4186561b sraiw a2,a2,0x18 + 80010f78: 02049463 bnez s1,80010fa0 <_Z9setntamemPhij+0x80> + 80010f7c: fff64613 not a2,a2 + 80010f80: 00c77633 and a2,a4,a2 + 80010f84: 00c78023 sb a2,0(a5) + 80010f88: 01813083 ld ra,24(sp) + 80010f8c: 01013403 ld s0,16(sp) + 80010f90: 00813483 ld s1,8(sp) + 80010f94: 00013903 ld s2,0(sp) + 80010f98: 02010113 addi sp,sp,32 + 80010f9c: 00008067 ret + 80010fa0: 00e66633 or a2,a2,a4 + 80010fa4: 00c78023 sb a2,0(a5) + 80010fa8: 01813083 ld ra,24(sp) + 80010fac: 01013403 ld s0,16(sp) + 80010fb0: 00813483 ld s1,8(sp) + 80010fb4: 00013903 ld s2,0(sp) + 80010fb8: 02010113 addi sp,sp,32 + 80010fbc: 00008067 ret + +0000000080010fc0 <_Z10setmirrorwiiii>: + 80010fc0: fd010113 addi sp,sp,-48 + 80010fc4: 02813023 sd s0,32(sp) + 80010fc8: 00913c23 sd s1,24(sp) + 80010fcc: 01213823 sd s2,16(sp) + 80010fd0: 01313423 sd s3,8(sp) + 80010fd4: 02113423 sd ra,40(sp) + 80010fd8: 00068413 mv s0,a3 + 80010fdc: 00050993 mv s3,a0 + 80010fe0: 00058913 mv s2,a1 + 80010fe4: 00060493 mv s1,a2 + 80010fe8: 620270ef jal ra,80038608 <_Z18FCEUPPU_LineUpdatev> + 80010fec: 001b8697 auipc a3,0x1b8 + 80010ff0: 53c68693 addi a3,a3,1340 # 801c9528 + 80010ff4: 02813083 ld ra,40(sp) + 80010ff8: 00a9951b slliw a0,s3,0xa + 80010ffc: 00a9159b slliw a1,s2,0xa + 80011000: 00a4961b slliw a2,s1,0xa + 80011004: 00a4179b slliw a5,s0,0xa + 80011008: 02013403 ld s0,32(sp) + 8001100c: 001bb717 auipc a4,0x1bb + 80011010: ab470713 addi a4,a4,-1356 # 801cbac0 + 80011014: 00d50533 add a0,a0,a3 + 80011018: 00d585b3 add a1,a1,a3 + 8001101c: 00d60633 add a2,a2,a3 + 80011020: 00d787b3 add a5,a5,a3 + 80011024: 00a73023 sd a0,0(a4) + 80011028: 00b73423 sd a1,8(a4) + 8001102c: 00c73823 sd a2,16(a4) + 80011030: 00f73c23 sd a5,24(a4) + 80011034: 01813483 ld s1,24(sp) + 80011038: 01013903 ld s2,16(sp) + 8001103c: 00813983 ld s3,8(sp) + 80011040: 03010113 addi sp,sp,48 + 80011044: 00008067 ret + +0000000080011048 <_Z9setmirrori>: + 80011048: ff010113 addi sp,sp,-16 + 8001104c: 00813023 sd s0,0(sp) + 80011050: 00113423 sd ra,8(sp) + 80011054: 00050413 mv s0,a0 + 80011058: 5b0270ef jal ra,80038608 <_Z18FCEUPPU_LineUpdatev> + 8001105c: 001bb797 auipc a5,0x1bb + 80011060: c2c7a783 lw a5,-980(a5) # 801cbc88 <_ZL10mirrorhard> + 80011064: 00079c63 bnez a5,8001107c <_Z9setmirrori+0x34> + 80011068: 00040513 mv a0,s0 + 8001106c: 00013403 ld s0,0(sp) + 80011070: 00813083 ld ra,8(sp) + 80011074: 01010113 addi sp,sp,16 + 80011078: ac8ff06f j 80010340 <_Z9setmirrori.part.0> + 8001107c: 00813083 ld ra,8(sp) + 80011080: 00013403 ld s0,0(sp) + 80011084: 01010113 addi sp,sp,16 + 80011088: 00008067 ret + +000000008001108c <_Z18SetupCartMirroringiiPh>: + 8001108c: fe010113 addi sp,sp,-32 + 80011090: 00913423 sd s1,8(sp) + 80011094: 00113c23 sd ra,24(sp) + 80011098: 00813823 sd s0,16(sp) + 8001109c: 01213023 sd s2,0(sp) + 800110a0: 00300793 li a5,3 + 800110a4: 00058493 mv s1,a1 + 800110a8: 06a7d063 bge a5,a0,80011108 <_Z18SetupCartMirroringiiPh+0x7c> + 800110ac: 001bb797 auipc a5,0x1bb + 800110b0: a1478793 addi a5,a5,-1516 # 801cbac0 + 800110b4: 001b8697 auipc a3,0x1b8 + 800110b8: 47468693 addi a3,a3,1140 # 801c9528 + 800110bc: 40060713 addi a4,a2,1024 # 1400 <_entry_offset+0x1400> + 800110c0: 00d7b023 sd a3,0(a5) + 800110c4: 001b9697 auipc a3,0x1b9 + 800110c8: 86468693 addi a3,a3,-1948 # 801c9928 + 800110cc: 00e7bc23 sd a4,24(a5) + 800110d0: 00d7b423 sd a3,8(a5) + 800110d4: 00c7b823 sd a2,16(a5) + 800110d8: 00f00793 li a5,15 + 800110dc: 001bb717 auipc a4,0x1bb + 800110e0: 62f70523 sb a5,1578(a4) # 801cc706 + 800110e4: 001bb917 auipc s2,0x1bb + 800110e8: ba490913 addi s2,s2,-1116 # 801cbc88 <_ZL10mirrorhard> + 800110ec: 01813083 ld ra,24(sp) + 800110f0: 01013403 ld s0,16(sp) + 800110f4: 00992023 sw s1,0(s2) + 800110f8: 00813483 ld s1,8(sp) + 800110fc: 00013903 ld s2,0(sp) + 80011100: 02010113 addi sp,sp,32 + 80011104: 00008067 ret + 80011108: 001bb797 auipc a5,0x1bb + 8001110c: b807a023 sw zero,-1152(a5) # 801cbc88 <_ZL10mirrorhard> + 80011110: 00050413 mv s0,a0 + 80011114: 001bb917 auipc s2,0x1bb + 80011118: b7490913 addi s2,s2,-1164 # 801cbc88 <_ZL10mirrorhard> + 8001111c: 4ec270ef jal ra,80038608 <_Z18FCEUPPU_LineUpdatev> + 80011120: 00092783 lw a5,0(s2) + 80011124: fc0794e3 bnez a5,800110ec <_Z18SetupCartMirroringiiPh+0x60> + 80011128: 00040513 mv a0,s0 + 8001112c: a14ff0ef jal ra,80010340 <_Z9setmirrori.part.0> + 80011130: 01813083 ld ra,24(sp) + 80011134: 01013403 ld s0,16(sp) + 80011138: 00992023 sw s1,0(s2) + 8001113c: 00813483 ld s1,8(sp) + 80011140: 00013903 ld s2,0(sp) + 80011144: 02010113 addi sp,sp,32 + 80011148: 00008067 ret + +000000008001114c <_Z15FCEU_CloseGeniev>: + 8001114c: ff010113 addi sp,sp,-16 + 80011150: 00113423 sd ra,8(sp) + 80011154: 001bb797 auipc a5,0x1bb + 80011158: b407a223 sw zero,-1212(a5) # 801cbc98 + 8001115c: 7d0220ef jal ra,8003392c <_Z12FlushGenieRWv> + 80011160: 00813083 ld ra,8(sp) + 80011164: 000b2797 auipc a5,0xb2 + 80011168: bdc78793 addi a5,a5,-1060 # 800c2d40 + 8001116c: 00039717 auipc a4,0x39 + 80011170: f8f73e23 sd a5,-100(a4) # 8004a108 + 80011174: 01010113 addi sp,sp,16 + 80011178: 00008067 ret + +000000008001117c <_Z14FCEU_KillGeniev>: + 8001117c: 00008067 ret + +0000000080011180 <_Z10md5_startsP11md5_context>: + 80011180: 674527b7 lui a5,0x67452 + 80011184: 3017879b addiw a5,a5,769 + 80011188: 00f52423 sw a5,8(a0) + 8001118c: efcdb7b7 lui a5,0xefcdb + 80011190: b897879b addiw a5,a5,-1143 + 80011194: 00f52623 sw a5,12(a0) + 80011198: 98bae7b7 lui a5,0x98bae + 8001119c: cfe7879b addiw a5,a5,-770 + 800111a0: 00f52823 sw a5,16(a0) + 800111a4: 103257b7 lui a5,0x10325 + 800111a8: 4767879b addiw a5,a5,1142 + 800111ac: 00052023 sw zero,0(a0) + 800111b0: 00052223 sw zero,4(a0) + 800111b4: 00f52a23 sw a5,20(a0) + 800111b8: 00008067 ret + +00000000800111bc <_Z11md5_processP11md5_contextPh>: + 800111bc: e3010113 addi sp,sp,-464 + 800111c0: 1b313823 sd s3,432(sp) + 800111c4: 1b413423 sd s4,424(sp) + 800111c8: 1b513023 sd s5,416(sp) + 800111cc: 19913023 sd s9,384(sp) + 800111d0: 17b13823 sd s11,368(sp) + 800111d4: 1c813423 sd s0,456(sp) + 800111d8: 1c913023 sd s1,448(sp) + 800111dc: 1b213c23 sd s2,440(sp) + 800111e0: 19613c23 sd s6,408(sp) + 800111e4: 19713823 sd s7,400(sp) + 800111e8: 19813423 sd s8,392(sp) + 800111ec: 17a13c23 sd s10,376(sp) + 800111f0: 0045c783 lbu a5,4(a1) + 800111f4: 0125c683 lbu a3,18(a1) + 800111f8: 0005c883 lbu a7,0(a1) + 800111fc: 00f13823 sd a5,16(sp) + 80011200: 0085cf83 lbu t6,8(a1) + 80011204: 00b5cc03 lbu s8,11(a1) + 80011208: 00c5c303 lbu t1,12(a1) + 8001120c: 00f5cb83 lbu s7,15(a1) + 80011210: 0015c903 lbu s2,1(a1) + 80011214: 0025c483 lbu s1,2(a1) + 80011218: 0035c403 lbu s0,3(a1) + 8001121c: 0055cb03 lbu s6,5(a1) + 80011220: 0065c383 lbu t2,6(a1) + 80011224: 0075cf03 lbu t5,7(a1) + 80011228: 0095c283 lbu t0,9(a1) + 8001122c: 00a5ce83 lbu t4,10(a1) + 80011230: 00d5ce03 lbu t3,13(a1) + 80011234: 00e5c803 lbu a6,14(a1) + 80011238: 0105cd03 lbu s10,16(a1) + 8001123c: 0115c603 lbu a2,17(a1) + 80011240: 00d13c23 sd a3,24(sp) + 80011244: 0135c703 lbu a4,19(a1) + 80011248: 0145c983 lbu s3,20(a1) + 8001124c: 0155ca03 lbu s4,21(a1) + 80011250: 0165ca83 lbu s5,22(a1) + 80011254: 0175cc83 lbu s9,23(a1) + 80011258: 0185cd83 lbu s11,24(a1) + 8001125c: 0195c783 lbu a5,25(a1) + 80011260: 01b5c683 lbu a3,27(a1) + 80011264: 02e13023 sd a4,32(sp) + 80011268: 03313423 sd s3,40(sp) + 8001126c: 01a5c703 lbu a4,26(a1) + 80011270: 01c5c983 lbu s3,28(a1) + 80011274: 03413823 sd s4,48(sp) + 80011278: 03513c23 sd s5,56(sp) + 8001127c: 01d5ca03 lbu s4,29(a1) + 80011280: 01e5ca83 lbu s5,30(a1) + 80011284: 05913023 sd s9,64(sp) + 80011288: 05b13423 sd s11,72(sp) + 8001128c: 01f5cc83 lbu s9,31(a1) + 80011290: 0205cd83 lbu s11,32(a1) + 80011294: 04f13823 sd a5,80(sp) + 80011298: 06d13023 sd a3,96(sp) + 8001129c: 0215c783 lbu a5,33(a1) + 800112a0: 0225c683 lbu a3,34(a1) + 800112a4: 04e13c23 sd a4,88(sp) + 800112a8: 07413823 sd s4,112(sp) + 800112ac: 07513c23 sd s5,120(sp) + 800112b0: 09913023 sd s9,128(sp) + 800112b4: 09b13423 sd s11,136(sp) + 800112b8: 08f13823 sd a5,144(sp) + 800112bc: 08d13c23 sd a3,152(sp) + 800112c0: 07313423 sd s3,104(sp) + 800112c4: 0235c983 lbu s3,35(a1) + 800112c8: 0245ca03 lbu s4,36(a1) + 800112cc: 0255ca83 lbu s5,37(a1) + 800112d0: 0275cd83 lbu s11,39(a1) + 800112d4: 0285c783 lbu a5,40(a1) + 800112d8: 02a5c683 lbu a3,42(a1) + 800112dc: 0b313023 sd s3,160(sp) + 800112e0: 0b413423 sd s4,168(sp) + 800112e4: 02b5c983 lbu s3,43(a1) + 800112e8: 02c5ca03 lbu s4,44(a1) + 800112ec: 0b513823 sd s5,176(sp) + 800112f0: 02d5ca83 lbu s5,45(a1) + 800112f4: 0265cc83 lbu s9,38(a1) + 800112f8: 0db13023 sd s11,192(sp) + 800112fc: 0cf13423 sd a5,200(sp) + 80011300: 02e5cd83 lbu s11,46(a1) + 80011304: 02f5c783 lbu a5,47(a1) + 80011308: 0cd13823 sd a3,208(sp) + 8001130c: 0d313c23 sd s3,216(sp) + 80011310: 0305c683 lbu a3,48(a1) + 80011314: 0315c983 lbu s3,49(a1) + 80011318: 0f413023 sd s4,224(sp) + 8001131c: 0325ca03 lbu s4,50(a1) + 80011320: 0f513423 sd s5,232(sp) + 80011324: 0335ca83 lbu s5,51(a1) + 80011328: 0b913c23 sd s9,184(sp) + 8001132c: 0fb13823 sd s11,240(sp) + 80011330: 0ef13c23 sd a5,248(sp) + 80011334: 10d13023 sd a3,256(sp) + 80011338: 11313423 sd s3,264(sp) + 8001133c: 11413823 sd s4,272(sp) + 80011340: 0295cc83 lbu s9,41(a1) + 80011344: 11513c23 sd s5,280(sp) + 80011348: 0355c783 lbu a5,53(a1) + 8001134c: 0375c983 lbu s3,55(a1) + 80011350: 0365c683 lbu a3,54(a1) + 80011354: 12f13423 sd a5,296(sp) + 80011358: 03b5c783 lbu a5,59(a1) + 8001135c: 0385ca03 lbu s4,56(a1) + 80011360: 03a5ca83 lbu s5,58(a1) + 80011364: 13313c23 sd s3,312(sp) + 80011368: 03d5c983 lbu s3,61(a1) + 8001136c: 12d13823 sd a3,304(sp) + 80011370: 14f13823 sd a5,336(sp) + 80011374: 03c5c683 lbu a3,60(a1) + 80011378: 00852783 lw a5,8(a0) + 8001137c: 0345cd83 lbu s11,52(a1) + 80011380: 15413023 sd s4,320(sp) + 80011384: 15513423 sd s5,328(sp) + 80011388: 03e5ca03 lbu s4,62(a1) + 8001138c: 01452a83 lw s5,20(a0) + 80011390: 17313023 sd s3,352(sp) + 80011394: 01052983 lw s3,16(a0) + 80011398: 14d13c23 sd a3,344(sp) + 8001139c: d76aa737 lui a4,0xd76aa + 800113a0: 00078693 mv a3,a5 + 800113a4: 00891913 slli s2,s2,0x8 + 800113a8: 00c52783 lw a5,12(a0) + 800113ac: 01049493 slli s1,s1,0x10 + 800113b0: 01196933 or s2,s2,a7 + 800113b4: 4787071b addiw a4,a4,1144 + 800113b8: 13b13023 sd s11,288(sp) + 800113bc: 17413423 sd s4,360(sp) + 800113c0: 0395cd83 lbu s11,57(a1) + 800113c4: 03f5ca03 lbu s4,63(a1) + 800113c8: 00d13423 sd a3,8(sp) + 800113cc: 0159c5b3 xor a1,s3,s5 + 800113d0: 0124e933 or s2,s1,s2 + 800113d4: 00e6873b addw a4,a3,a4 + 800113d8: 01841413 slli s0,s0,0x18 + 800113dc: 01013683 ld a3,16(sp) + 800113e0: 01246433 or s0,s0,s2 + 800113e4: 00f5f5b3 and a1,a1,a5 + 800113e8: 0087073b addw a4,a4,s0 + 800113ec: 00bac5b3 xor a1,s5,a1 + 800113f0: 008b1b13 slli s6,s6,0x8 + 800113f4: 00e585bb addw a1,a1,a4 + 800113f8: 00db6b33 or s6,s6,a3 + 800113fc: 01039393 slli t2,t2,0x10 + 80011400: 0163eb33 or s6,t2,s6 + 80011404: 0075939b slliw t2,a1,0x7 + 80011408: 0195d59b srliw a1,a1,0x19 + 8001140c: 00b3e5b3 or a1,t2,a1 + 80011410: e8c7b737 lui a4,0xe8c7b + 80011414: 00f585bb addw a1,a1,a5 + 80011418: 00f9c8b3 xor a7,s3,a5 + 8001141c: 018f1f13 slli t5,t5,0x18 + 80011420: 7567071b addiw a4,a4,1878 + 80011424: 016f6f33 or t5,t5,s6 + 80011428: 00ea873b addw a4,s5,a4 + 8001142c: 00b8f8b3 and a7,a7,a1 + 80011430: 01e7073b addw a4,a4,t5 + 80011434: 0119c8b3 xor a7,s3,a7 + 80011438: 00e883bb addw t2,a7,a4 + 8001143c: 00c3971b slliw a4,t2,0xc + 80011440: 00829293 slli t0,t0,0x8 + 80011444: 0143d39b srliw t2,t2,0x14 + 80011448: 01f2e2b3 or t0,t0,t6 + 8001144c: 010e9e93 slli t4,t4,0x10 + 80011450: 00776733 or a4,a4,t2 + 80011454: 24207fb7 lui t6,0x24207 + 80011458: 00e5873b addw a4,a1,a4 + 8001145c: 005ee2b3 or t0,t4,t0 + 80011460: 00b7c3b3 xor t2,a5,a1 + 80011464: 018c1893 slli a7,s8,0x18 + 80011468: 0dbf8f9b addiw t6,t6,219 + 8001146c: 0058e8b3 or a7,a7,t0 + 80011470: 00e3f3b3 and t2,t2,a4 + 80011474: 01f98fbb addw t6,s3,t6 + 80011478: 011f8fbb addw t6,t6,a7 + 8001147c: 0077c2b3 xor t0,a5,t2 + 80011480: 01f282bb addw t0,t0,t6 + 80011484: 00f2de9b srliw t4,t0,0xf + 80011488: 008e1e13 slli t3,t3,0x8 + 8001148c: 0112929b slliw t0,t0,0x11 + 80011490: 01813683 ld a3,24(sp) + 80011494: 006e6e33 or t3,t3,t1 + 80011498: 01081813 slli a6,a6,0x10 + 8001149c: 005eeeb3 or t4,t4,t0 + 800114a0: 00861613 slli a2,a2,0x8 + 800114a4: c1bdd337 lui t1,0xc1bdd + 800114a8: 01d70ebb addw t4,a4,t4 + 800114ac: 00e5c2b3 xor t0,a1,a4 + 800114b0: 01c86e33 or t3,a6,t3 + 800114b4: 018b9f93 slli t6,s7,0x18 + 800114b8: 01a66d33 or s10,a2,s10 + 800114bc: eee3031b addiw t1,t1,-274 + 800114c0: 02013603 ld a2,32(sp) + 800114c4: 01cfefb3 or t6,t6,t3 + 800114c8: 01d2f833 and a6,t0,t4 + 800114cc: 0067833b addw t1,a5,t1 + 800114d0: 01f3033b addw t1,t1,t6 + 800114d4: 00b84833 xor a6,a6,a1 + 800114d8: 01069693 slli a3,a3,0x10 + 800114dc: 0068083b addw a6,a6,t1 + 800114e0: 01a6ed33 or s10,a3,s10 + 800114e4: 01861313 slli t1,a2,0x18 + 800114e8: f57c1637 lui a2,0xf57c1 + 800114ec: 01a36333 or t1,t1,s10 + 800114f0: 00a85e1b srliw t3,a6,0xa + 800114f4: faf6061b addiw a2,a2,-81 + 800114f8: 0168181b slliw a6,a6,0x16 + 800114fc: 0066063b addw a2,a2,t1 + 80011500: 010e6833 or a6,t3,a6 + 80011504: 03013e03 ld t3,48(sp) + 80011508: 00b605bb addw a1,a2,a1 + 8001150c: 02813603 ld a2,40(sp) + 80011510: 008e1293 slli t0,t3,0x8 + 80011514: 010e883b addw a6,t4,a6 + 80011518: 01d746b3 xor a3,a4,t4 + 8001151c: 00c2e2b3 or t0,t0,a2 + 80011520: 03813603 ld a2,56(sp) + 80011524: 0106f6b3 and a3,a3,a6 + 80011528: 00e6c6b3 xor a3,a3,a4 + 8001152c: 00b685bb addw a1,a3,a1 + 80011530: 01061e13 slli t3,a2,0x10 + 80011534: 04013603 ld a2,64(sp) + 80011538: 0075939b slliw t2,a1,0x7 + 8001153c: 0195d59b srliw a1,a1,0x19 + 80011540: 00b3e5b3 or a1,t2,a1 + 80011544: 00b806bb addw a3,a6,a1 + 80011548: 005e62b3 or t0,t3,t0 + 8001154c: 4787c5b7 lui a1,0x4787c + 80011550: 01861e13 slli t3,a2,0x18 + 80011554: 005e62b3 or t0,t3,t0 + 80011558: 010ec633 xor a2,t4,a6 + 8001155c: 62a5859b addiw a1,a1,1578 + 80011560: 005585bb addw a1,a1,t0 + 80011564: 00d67633 and a2,a2,a3 + 80011568: 01d64633 xor a2,a2,t4 + 8001156c: 00e5873b addw a4,a1,a4 + 80011570: 05013583 ld a1,80(sp) + 80011574: 00e6073b addw a4,a2,a4 + 80011578: 04813603 ld a2,72(sp) + 8001157c: 00859e13 slli t3,a1,0x8 + 80011580: 00c7149b slliw s1,a4,0xc + 80011584: 00ce6e33 or t3,t3,a2 + 80011588: 05813603 ld a2,88(sp) + 8001158c: 0147571b srliw a4,a4,0x14 + 80011590: 00e4e733 or a4,s1,a4 + 80011594: 01061393 slli t2,a2,0x10 + 80011598: 06013603 ld a2,96(sp) + 8001159c: 01c3ee33 or t3,t2,t3 + 800115a0: a83045b7 lui a1,0xa8304 + 800115a4: 01861393 slli t2,a2,0x18 + 800115a8: 01c3ee33 or t3,t2,t3 + 800115ac: 00e6863b addw a2,a3,a4 + 800115b0: 6135859b addiw a1,a1,1555 + 800115b4: 00d84733 xor a4,a6,a3 + 800115b8: 01c585bb addw a1,a1,t3 + 800115bc: 00c77733 and a4,a4,a2 + 800115c0: 01074733 xor a4,a4,a6 + 800115c4: 01d58ebb addw t4,a1,t4 + 800115c8: 07013583 ld a1,112(sp) + 800115cc: 01d70ebb addw t4,a4,t4 + 800115d0: 06813703 ld a4,104(sp) + 800115d4: 00859393 slli t2,a1,0x8 + 800115d8: 00fedb1b srliw s6,t4,0xf + 800115dc: 00e3e3b3 or t2,t2,a4 + 800115e0: 07813703 ld a4,120(sp) + 800115e4: 011e9e9b slliw t4,t4,0x11 + 800115e8: 01db6b33 or s6,s6,t4 + 800115ec: 01071493 slli s1,a4,0x10 + 800115f0: 08013703 ld a4,128(sp) + 800115f4: 0074e3b3 or t2,s1,t2 + 800115f8: fd4695b7 lui a1,0xfd469 + 800115fc: 01871493 slli s1,a4,0x18 + 80011600: 01660b3b addw s6,a2,s6 + 80011604: 0074e3b3 or t2,s1,t2 + 80011608: 00c6c733 xor a4,a3,a2 + 8001160c: 5015859b addiw a1,a1,1281 + 80011610: 007585bb addw a1,a1,t2 + 80011614: 01677733 and a4,a4,s6 + 80011618: 00d74733 xor a4,a4,a3 + 8001161c: 0105883b addw a6,a1,a6 + 80011620: 09013583 ld a1,144(sp) + 80011624: 0107083b addw a6,a4,a6 + 80011628: 08813703 ld a4,136(sp) + 8001162c: 00859e93 slli t4,a1,0x8 + 80011630: 00a85b9b srliw s7,a6,0xa + 80011634: 00eeeeb3 or t4,t4,a4 + 80011638: 09813703 ld a4,152(sp) + 8001163c: 0168181b slliw a6,a6,0x16 + 80011640: 010bebb3 or s7,s7,a6 + 80011644: 01071493 slli s1,a4,0x10 + 80011648: 0a013703 ld a4,160(sp) + 8001164c: 01d4eeb3 or t4,s1,t4 + 80011650: 6980a5b7 lui a1,0x6980a + 80011654: 01871493 slli s1,a4,0x18 + 80011658: 017b0bbb addw s7,s6,s7 + 8001165c: 01d4eeb3 or t4,s1,t4 + 80011660: 01664733 xor a4,a2,s6 + 80011664: 8d85859b addiw a1,a1,-1832 + 80011668: 01d585bb addw a1,a1,t4 + 8001166c: 01777733 and a4,a4,s7 + 80011670: 00c74733 xor a4,a4,a2 + 80011674: 00d586bb addw a3,a1,a3 + 80011678: 0b013583 ld a1,176(sp) + 8001167c: 00d706bb addw a3,a4,a3 + 80011680: 0a813703 ld a4,168(sp) + 80011684: 00859813 slli a6,a1,0x8 + 80011688: 0076991b slliw s2,a3,0x7 + 8001168c: 00e86833 or a6,a6,a4 + 80011690: 0b813703 ld a4,184(sp) + 80011694: 0196d69b srliw a3,a3,0x19 + 80011698: 00d966b3 or a3,s2,a3 + 8001169c: 01071493 slli s1,a4,0x10 + 800116a0: 0c013703 ld a4,192(sp) + 800116a4: 0104e833 or a6,s1,a6 + 800116a8: 00db85bb addw a1,s7,a3 + 800116ac: 01871493 slli s1,a4,0x18 + 800116b0: 8b44f737 lui a4,0x8b44f + 800116b4: 0104e833 or a6,s1,a6 + 800116b8: 7af7071b addiw a4,a4,1967 + 800116bc: 0107073b addw a4,a4,a6 + 800116c0: 00c7063b addw a2,a4,a2 + 800116c4: 0c813703 ld a4,200(sp) + 800116c8: 017b46b3 xor a3,s6,s7 + 800116cc: 00b6f6b3 and a3,a3,a1 + 800116d0: 008c9c93 slli s9,s9,0x8 + 800116d4: 0166c6b3 xor a3,a3,s6 + 800116d8: 00ececb3 or s9,s9,a4 + 800116dc: 0d013703 ld a4,208(sp) + 800116e0: 0d813483 ld s1,216(sp) + 800116e4: 00c6863b addw a2,a3,a2 + 800116e8: 00c6169b slliw a3,a2,0xc + 800116ec: 0146561b srliw a2,a2,0x14 + 800116f0: 00c6e633 or a2,a3,a2 + 800116f4: 01071713 slli a4,a4,0x10 + 800116f8: 00c5893b addw s2,a1,a2 + 800116fc: 01976733 or a4,a4,s9 + 80011700: 00bbc633 xor a2,s7,a1 + 80011704: 01849c93 slli s9,s1,0x18 + 80011708: ffff66b7 lui a3,0xffff6 + 8001170c: 00ececb3 or s9,s9,a4 + 80011710: 0e813483 ld s1,232(sp) + 80011714: 01267633 and a2,a2,s2 + 80011718: bb16869b addiw a3,a3,-1103 + 8001171c: 019686bb addw a3,a3,s9 + 80011720: 01764733 xor a4,a2,s7 + 80011724: 0e013603 ld a2,224(sp) + 80011728: 01668b3b addw s6,a3,s6 + 8001172c: 0167073b addw a4,a4,s6 + 80011730: 00849b13 slli s6,s1,0x8 + 80011734: 00cb6b33 or s6,s6,a2 + 80011738: 0f013603 ld a2,240(sp) + 8001173c: 0f813483 ld s1,248(sp) + 80011740: 008d9d93 slli s11,s11,0x8 + 80011744: 01061693 slli a3,a2,0x10 + 80011748: 0166e6b3 or a3,a3,s6 + 8001174c: 00f7561b srliw a2,a4,0xf + 80011750: 01849b13 slli s6,s1,0x18 + 80011754: 0117171b slliw a4,a4,0x11 + 80011758: 00db6b33 or s6,s6,a3 + 8001175c: 00e664b3 or s1,a2,a4 + 80011760: 895cd6b7 lui a3,0x895cd + 80011764: 009904bb addw s1,s2,s1 + 80011768: 0125c633 xor a2,a1,s2 + 8001176c: 7be6869b addiw a3,a3,1982 + 80011770: 016686bb addw a3,a3,s6 + 80011774: 00967633 and a2,a2,s1 + 80011778: 01768bbb addw s7,a3,s7 + 8001177c: 00b64733 xor a4,a2,a1 + 80011780: 0177073b addw a4,a4,s7 + 80011784: 10813b83 ld s7,264(sp) + 80011788: 10013603 ld a2,256(sp) + 8001178c: 00a7569b srliw a3,a4,0xa + 80011790: 008b9d13 slli s10,s7,0x8 + 80011794: 00cd6d33 or s10,s10,a2 + 80011798: 11013603 ld a2,272(sp) + 8001179c: 11813b83 ld s7,280(sp) + 800117a0: 0167171b slliw a4,a4,0x16 + 800117a4: 01061613 slli a2,a2,0x10 + 800117a8: 01a66633 or a2,a2,s10 + 800117ac: 018b9d13 slli s10,s7,0x18 + 800117b0: 00cd6d33 or s10,s10,a2 + 800117b4: 00e6e6b3 or a3,a3,a4 + 800117b8: 6b901637 lui a2,0x6b901 + 800117bc: 00d486bb addw a3,s1,a3 + 800117c0: 00994bb3 xor s7,s2,s1 + 800117c4: 1226061b addiw a2,a2,290 + 800117c8: 01a6063b addw a2,a2,s10 + 800117cc: 00dbfbb3 and s7,s7,a3 + 800117d0: 00b605bb addw a1,a2,a1 + 800117d4: 012bc733 xor a4,s7,s2 + 800117d8: 00b7073b addw a4,a4,a1 + 800117dc: 12813583 ld a1,296(sp) + 800117e0: 12013603 ld a2,288(sp) + 800117e4: 00d4cc33 xor s8,s1,a3 + 800117e8: 00859b93 slli s7,a1,0x8 + 800117ec: 00cbebb3 or s7,s7,a2 + 800117f0: 13013603 ld a2,304(sp) + 800117f4: 0077159b slliw a1,a4,0x7 + 800117f8: 0197571b srliw a4,a4,0x19 + 800117fc: 01061613 slli a2,a2,0x10 + 80011800: 01766633 or a2,a2,s7 + 80011804: 13813b83 ld s7,312(sp) + 80011808: 00e5e733 or a4,a1,a4 + 8001180c: fd9875b7 lui a1,0xfd987 + 80011810: 018b9b93 slli s7,s7,0x18 + 80011814: 00cbebb3 or s7,s7,a2 + 80011818: 1935859b addiw a1,a1,403 + 8001181c: 017585bb addw a1,a1,s7 + 80011820: 0125893b addw s2,a1,s2 + 80011824: 14013583 ld a1,320(sp) + 80011828: 00e6873b addw a4,a3,a4 + 8001182c: 00ec7c33 and s8,s8,a4 + 80011830: 00bdedb3 or s11,s11,a1 + 80011834: 14813583 ld a1,328(sp) + 80011838: 009c4633 xor a2,s8,s1 + 8001183c: 15013c03 ld s8,336(sp) + 80011840: 0126063b addw a2,a2,s2 + 80011844: 01059913 slli s2,a1,0x10 + 80011848: 01b96933 or s2,s2,s11 + 8001184c: 00c6159b slliw a1,a2,0xc + 80011850: 018c1d93 slli s11,s8,0x18 + 80011854: 0146561b srliw a2,a2,0x14 + 80011858: 012dedb3 or s11,s11,s2 + 8001185c: 00c5e5b3 or a1,a1,a2 + 80011860: a6794937 lui s2,0xa6794 + 80011864: 00b705bb addw a1,a4,a1 + 80011868: 00e6cc33 xor s8,a3,a4 + 8001186c: 38e9091b addiw s2,s2,910 + 80011870: 01b9093b addw s2,s2,s11 + 80011874: 00bc7c33 and s8,s8,a1 + 80011878: 009904bb addw s1,s2,s1 + 8001187c: 00dc4633 xor a2,s8,a3 + 80011880: 16013903 ld s2,352(sp) + 80011884: 0096063b addw a2,a2,s1 + 80011888: 15813483 ld s1,344(sp) + 8001188c: 00891c13 slli s8,s2,0x8 + 80011890: 00f6591b srliw s2,a2,0xf + 80011894: 009c6c33 or s8,s8,s1 + 80011898: 16813483 ld s1,360(sp) + 8001189c: 0116161b slliw a2,a2,0x11 + 800118a0: 00c96633 or a2,s2,a2 + 800118a4: 01049493 slli s1,s1,0x10 + 800118a8: 0184e4b3 or s1,s1,s8 + 800118ac: 49b41937 lui s2,0x49b41 + 800118b0: 018a1c13 slli s8,s4,0x18 + 800118b4: 00c5863b addw a2,a1,a2 + 800118b8: 009c6c33 or s8,s8,s1 + 800118bc: 8219091b addiw s2,s2,-2015 + 800118c0: 00b744b3 xor s1,a4,a1 + 800118c4: 00c4f4b3 and s1,s1,a2 + 800118c8: 0189093b addw s2,s2,s8 + 800118cc: 00d9093b addw s2,s2,a3 + 800118d0: 00e4c6b3 xor a3,s1,a4 + 800118d4: 012686bb addw a3,a3,s2 + 800118d8: 00a6d49b srliw s1,a3,0xa + 800118dc: 0166969b slliw a3,a3,0x16 + 800118e0: 00d4e6b3 or a3,s1,a3 + 800118e4: 00d606bb addw a3,a2,a3 + 800118e8: f61e2937 lui s2,0xf61e2 + 800118ec: 00d644b3 xor s1,a2,a3 + 800118f0: 5629091b addiw s2,s2,1378 + 800118f4: 00b4f4b3 and s1,s1,a1 + 800118f8: 01e9093b addw s2,s2,t5 + 800118fc: 00e9093b addw s2,s2,a4 + 80011900: 00c4c733 xor a4,s1,a2 + 80011904: 0127073b addw a4,a4,s2 + 80011908: 0057149b slliw s1,a4,0x5 + 8001190c: 01b7571b srliw a4,a4,0x1b + 80011910: 00e4e733 or a4,s1,a4 + 80011914: 00e6873b addw a4,a3,a4 + 80011918: c040b937 lui s2,0xc040b + 8001191c: 00e6c4b3 xor s1,a3,a4 + 80011920: 3409091b addiw s2,s2,832 + 80011924: 00c4f4b3 and s1,s1,a2 + 80011928: 01c9093b addw s2,s2,t3 + 8001192c: 00b9093b addw s2,s2,a1 + 80011930: 00d4c5b3 xor a1,s1,a3 + 80011934: 012585bb addw a1,a1,s2 + 80011938: 0095949b slliw s1,a1,0x9 + 8001193c: 0175d59b srliw a1,a1,0x17 + 80011940: 00b4e5b3 or a1,s1,a1 + 80011944: 00b705bb addw a1,a4,a1 + 80011948: 265e6937 lui s2,0x265e6 + 8001194c: 00b744b3 xor s1,a4,a1 + 80011950: a519091b addiw s2,s2,-1455 + 80011954: 00d4f4b3 and s1,s1,a3 + 80011958: 0169093b addw s2,s2,s6 + 8001195c: 00c9093b addw s2,s2,a2 + 80011960: 00e4c633 xor a2,s1,a4 + 80011964: 0126063b addw a2,a2,s2 + 80011968: 00e6149b slliw s1,a2,0xe + 8001196c: 0126561b srliw a2,a2,0x12 + 80011970: 00c4e633 or a2,s1,a2 + 80011974: 00c5863b addw a2,a1,a2 + 80011978: e9b6c937 lui s2,0xe9b6c + 8001197c: 00c5c4b3 xor s1,a1,a2 + 80011980: 7aa9091b addiw s2,s2,1962 + 80011984: 00e4f4b3 and s1,s1,a4 + 80011988: 0089093b addw s2,s2,s0 + 8001198c: 00d9093b addw s2,s2,a3 + 80011990: 00b4c6b3 xor a3,s1,a1 + 80011994: 012686bb addw a3,a3,s2 + 80011998: 00c6d49b srliw s1,a3,0xc + 8001199c: 0146969b slliw a3,a3,0x14 + 800119a0: 00d4e6b3 or a3,s1,a3 + 800119a4: 00d606bb addw a3,a2,a3 + 800119a8: d62f1937 lui s2,0xd62f1 + 800119ac: 00d644b3 xor s1,a2,a3 + 800119b0: 05d9091b addiw s2,s2,93 + 800119b4: 00b4f4b3 and s1,s1,a1 + 800119b8: 0059093b addw s2,s2,t0 + 800119bc: 00e9093b addw s2,s2,a4 + 800119c0: 00c4c733 xor a4,s1,a2 + 800119c4: 0127073b addw a4,a4,s2 + 800119c8: 0057149b slliw s1,a4,0x5 + 800119cc: 01b7571b srliw a4,a4,0x1b + 800119d0: 00e4e733 or a4,s1,a4 + 800119d4: 00e6873b addw a4,a3,a4 + 800119d8: 02441937 lui s2,0x2441 + 800119dc: 00e6c4b3 xor s1,a3,a4 + 800119e0: 4539091b addiw s2,s2,1107 + 800119e4: 00c4f4b3 and s1,s1,a2 + 800119e8: 0199093b addw s2,s2,s9 + 800119ec: 00b9093b addw s2,s2,a1 + 800119f0: 00d4c5b3 xor a1,s1,a3 + 800119f4: 012585bb addw a1,a1,s2 + 800119f8: 0095949b slliw s1,a1,0x9 + 800119fc: 0175d59b srliw a1,a1,0x17 + 80011a00: 00b4e5b3 or a1,s1,a1 + 80011a04: 00b705bb addw a1,a4,a1 + 80011a08: d8a1e937 lui s2,0xd8a1e + 80011a0c: 00b744b3 xor s1,a4,a1 + 80011a10: 6819091b addiw s2,s2,1665 + 80011a14: 00d4f4b3 and s1,s1,a3 + 80011a18: 0189093b addw s2,s2,s8 + 80011a1c: 00c9093b addw s2,s2,a2 + 80011a20: 00e4c633 xor a2,s1,a4 + 80011a24: 0126063b addw a2,a2,s2 + 80011a28: 00e6149b slliw s1,a2,0xe + 80011a2c: 0126561b srliw a2,a2,0x12 + 80011a30: 00c4e633 or a2,s1,a2 + 80011a34: 00c5863b addw a2,a1,a2 + 80011a38: e7d40937 lui s2,0xe7d40 + 80011a3c: 00c5c4b3 xor s1,a1,a2 + 80011a40: bc89091b addiw s2,s2,-1080 + 80011a44: 00e4f4b3 and s1,s1,a4 + 80011a48: 0069093b addw s2,s2,t1 + 80011a4c: 00d9093b addw s2,s2,a3 + 80011a50: 00b4c6b3 xor a3,s1,a1 + 80011a54: 012686bb addw a3,a3,s2 + 80011a58: 00c6d49b srliw s1,a3,0xc + 80011a5c: 0146969b slliw a3,a3,0x14 + 80011a60: 00d4e6b3 or a3,s1,a3 + 80011a64: 00d606bb addw a3,a2,a3 + 80011a68: 21e1d937 lui s2,0x21e1d + 80011a6c: 00d644b3 xor s1,a2,a3 + 80011a70: de69091b addiw s2,s2,-538 + 80011a74: 00b4f4b3 and s1,s1,a1 + 80011a78: 0109093b addw s2,s2,a6 + 80011a7c: 00e9093b addw s2,s2,a4 + 80011a80: 00c4c733 xor a4,s1,a2 + 80011a84: 0127073b addw a4,a4,s2 + 80011a88: 0057149b slliw s1,a4,0x5 + 80011a8c: 01b7571b srliw a4,a4,0x1b + 80011a90: 00e4e733 or a4,s1,a4 + 80011a94: 00e6873b addw a4,a3,a4 + 80011a98: c3370937 lui s2,0xc3370 + 80011a9c: 00e6c4b3 xor s1,a3,a4 + 80011aa0: 7d69091b addiw s2,s2,2006 + 80011aa4: 00c4f4b3 and s1,s1,a2 + 80011aa8: 01b9093b addw s2,s2,s11 + 80011aac: 00b9093b addw s2,s2,a1 + 80011ab0: 00d4c5b3 xor a1,s1,a3 + 80011ab4: 012585bb addw a1,a1,s2 + 80011ab8: 0095949b slliw s1,a1,0x9 + 80011abc: 0175d59b srliw a1,a1,0x17 + 80011ac0: 00b4e5b3 or a1,s1,a1 + 80011ac4: 00b705bb addw a1,a4,a1 + 80011ac8: f4d51937 lui s2,0xf4d51 + 80011acc: 00b744b3 xor s1,a4,a1 + 80011ad0: d879091b addiw s2,s2,-633 + 80011ad4: 00d4f4b3 and s1,s1,a3 + 80011ad8: 01f9093b addw s2,s2,t6 + 80011adc: 00c9093b addw s2,s2,a2 + 80011ae0: 00e4c633 xor a2,s1,a4 + 80011ae4: 0126063b addw a2,a2,s2 + 80011ae8: 00e6149b slliw s1,a2,0xe + 80011aec: 0126561b srliw a2,a2,0x12 + 80011af0: 00c4e633 or a2,s1,a2 + 80011af4: 00c584bb addw s1,a1,a2 + 80011af8: 455a1937 lui s2,0x455a1 + 80011afc: 0095c633 xor a2,a1,s1 + 80011b00: 4ed9091b addiw s2,s2,1261 + 80011b04: 00e67633 and a2,a2,a4 + 80011b08: 01d9093b addw s2,s2,t4 + 80011b0c: 00d9093b addw s2,s2,a3 + 80011b10: 00b646b3 xor a3,a2,a1 + 80011b14: 012686bb addw a3,a3,s2 + 80011b18: 00c6d61b srliw a2,a3,0xc + 80011b1c: 0146969b slliw a3,a3,0x14 + 80011b20: 00d666b3 or a3,a2,a3 + 80011b24: 00d4863b addw a2,s1,a3 + 80011b28: a9e3f937 lui s2,0xa9e3f + 80011b2c: 00c4c6b3 xor a3,s1,a2 + 80011b30: 9059091b addiw s2,s2,-1787 + 80011b34: 00b6f6b3 and a3,a3,a1 + 80011b38: 0179093b addw s2,s2,s7 + 80011b3c: 00e9093b addw s2,s2,a4 + 80011b40: 0096c733 xor a4,a3,s1 + 80011b44: 0127073b addw a4,a4,s2 + 80011b48: 0057169b slliw a3,a4,0x5 + 80011b4c: 01b7571b srliw a4,a4,0x1b + 80011b50: 00e6e733 or a4,a3,a4 + 80011b54: 00e606bb addw a3,a2,a4 + 80011b58: fcefa937 lui s2,0xfcefa + 80011b5c: 00d64733 xor a4,a2,a3 + 80011b60: 3f89091b addiw s2,s2,1016 + 80011b64: 00977733 and a4,a4,s1 + 80011b68: 0119093b addw s2,s2,a7 + 80011b6c: 00b9093b addw s2,s2,a1 + 80011b70: 00c745b3 xor a1,a4,a2 + 80011b74: 012585bb addw a1,a1,s2 + 80011b78: 0095971b slliw a4,a1,0x9 + 80011b7c: 0175d59b srliw a1,a1,0x17 + 80011b80: 00b765b3 or a1,a4,a1 + 80011b84: 00b685bb addw a1,a3,a1 + 80011b88: 676f0937 lui s2,0x676f0 + 80011b8c: 00b6c733 xor a4,a3,a1 + 80011b90: 2d99091b addiw s2,s2,729 + 80011b94: 00c77733 and a4,a4,a2 + 80011b98: 0079093b addw s2,s2,t2 + 80011b9c: 0099093b addw s2,s2,s1 + 80011ba0: 00d744b3 xor s1,a4,a3 + 80011ba4: 012484bb addw s1,s1,s2 + 80011ba8: 00e4971b slliw a4,s1,0xe + 80011bac: 0124d49b srliw s1,s1,0x12 + 80011bb0: 009764b3 or s1,a4,s1 + 80011bb4: 009584bb addw s1,a1,s1 + 80011bb8: 0095c733 xor a4,a1,s1 + 80011bbc: 8d2a5a37 lui s4,0x8d2a5 + 80011bc0: 0007071b sext.w a4,a4 + 80011bc4: c8aa0a1b addiw s4,s4,-886 + 80011bc8: 01aa0a3b addw s4,s4,s10 + 80011bcc: 00d77933 and s2,a4,a3 + 80011bd0: 00ca063b addw a2,s4,a2 + 80011bd4: 00b94933 xor s2,s2,a1 + 80011bd8: 00c9093b addw s2,s2,a2 + 80011bdc: 00c9561b srliw a2,s2,0xc + 80011be0: 0149191b slliw s2,s2,0x14 + 80011be4: 01266633 or a2,a2,s2 + 80011be8: fffa4937 lui s2,0xfffa4 + 80011bec: 9429091b addiw s2,s2,-1726 + 80011bf0: 00c4863b addw a2,s1,a2 + 80011bf4: 0059093b addw s2,s2,t0 + 80011bf8: 00d906bb addw a3,s2,a3 + 80011bfc: 00c74733 xor a4,a4,a2 + 80011c00: 00d7073b addw a4,a4,a3 + 80011c04: 0047169b slliw a3,a4,0x4 + 80011c08: 8771f937 lui s2,0x8771f + 80011c0c: 01c7571b srliw a4,a4,0x1c + 80011c10: 00e6e733 or a4,a3,a4 + 80011c14: 6819091b addiw s2,s2,1665 + 80011c18: 00e606bb addw a3,a2,a4 + 80011c1c: 01d9093b addw s2,s2,t4 + 80011c20: 00c4c733 xor a4,s1,a2 + 80011c24: 00b9093b addw s2,s2,a1 + 80011c28: 00d745b3 xor a1,a4,a3 + 80011c2c: 012585bb addw a1,a1,s2 + 80011c30: 00b5971b slliw a4,a1,0xb + 80011c34: 6d9d6937 lui s2,0x6d9d6 + 80011c38: 0155d59b srliw a1,a1,0x15 + 80011c3c: 00b765b3 or a1,a4,a1 + 80011c40: 1229091b addiw s2,s2,290 + 80011c44: 00b685bb addw a1,a3,a1 + 80011c48: 00d64733 xor a4,a2,a3 + 80011c4c: 0169093b addw s2,s2,s6 + 80011c50: 0099093b addw s2,s2,s1 + 80011c54: 00b744b3 xor s1,a4,a1 + 80011c58: 012484bb addw s1,s1,s2 + 80011c5c: 0104971b slliw a4,s1,0x10 + 80011c60: fde54937 lui s2,0xfde54 + 80011c64: 0104d49b srliw s1,s1,0x10 + 80011c68: 009764b3 or s1,a4,s1 + 80011c6c: 80c9091b addiw s2,s2,-2036 + 80011c70: 0095873b addw a4,a1,s1 + 80011c74: 01b9093b addw s2,s2,s11 + 80011c78: 00b6c4b3 xor s1,a3,a1 + 80011c7c: 00c9093b addw s2,s2,a2 + 80011c80: 00e4c633 xor a2,s1,a4 + 80011c84: 0126063b addw a2,a2,s2 + 80011c88: 0096549b srliw s1,a2,0x9 + 80011c8c: a4bef937 lui s2,0xa4bef + 80011c90: 0176161b slliw a2,a2,0x17 + 80011c94: 00c4e633 or a2,s1,a2 + 80011c98: a449091b addiw s2,s2,-1468 + 80011c9c: 00c7063b addw a2,a4,a2 + 80011ca0: 00e5c4b3 xor s1,a1,a4 + 80011ca4: 01e9093b addw s2,s2,t5 + 80011ca8: 00d9093b addw s2,s2,a3 + 80011cac: 00c4c6b3 xor a3,s1,a2 + 80011cb0: 012686bb addw a3,a3,s2 + 80011cb4: 0046949b slliw s1,a3,0x4 + 80011cb8: 4bded937 lui s2,0x4bded + 80011cbc: 01c6d69b srliw a3,a3,0x1c + 80011cc0: 00d4e6b3 or a3,s1,a3 + 80011cc4: fa99091b addiw s2,s2,-87 + 80011cc8: 00d604bb addw s1,a2,a3 + 80011ccc: 0069093b addw s2,s2,t1 + 80011cd0: 00c746b3 xor a3,a4,a2 + 80011cd4: 00b9093b addw s2,s2,a1 + 80011cd8: 0096c5b3 xor a1,a3,s1 + 80011cdc: 012585bb addw a1,a1,s2 + 80011ce0: 00b5969b slliw a3,a1,0xb + 80011ce4: f6bb5937 lui s2,0xf6bb5 + 80011ce8: 0155d59b srliw a1,a1,0x15 + 80011cec: 00b6e5b3 or a1,a3,a1 + 80011cf0: b609091b addiw s2,s2,-1184 + 80011cf4: 00b486bb addw a3,s1,a1 + 80011cf8: 0079093b addw s2,s2,t2 + 80011cfc: 009645b3 xor a1,a2,s1 + 80011d00: 00e9093b addw s2,s2,a4 + 80011d04: 00d5c733 xor a4,a1,a3 + 80011d08: 0127073b addw a4,a4,s2 + 80011d0c: 0107159b slliw a1,a4,0x10 + 80011d10: bebfc937 lui s2,0xbebfc + 80011d14: 0107571b srliw a4,a4,0x10 + 80011d18: 00e5e733 or a4,a1,a4 + 80011d1c: c709091b addiw s2,s2,-912 + 80011d20: 00e6873b addw a4,a3,a4 + 80011d24: 00d4c5b3 xor a1,s1,a3 + 80011d28: 0199093b addw s2,s2,s9 + 80011d2c: 00c9093b addw s2,s2,a2 + 80011d30: 00e5c633 xor a2,a1,a4 + 80011d34: 0126063b addw a2,a2,s2 + 80011d38: 0096559b srliw a1,a2,0x9 + 80011d3c: 289b8937 lui s2,0x289b8 + 80011d40: 0176161b slliw a2,a2,0x17 + 80011d44: 00c5e633 or a2,a1,a2 + 80011d48: ec69091b addiw s2,s2,-314 + 80011d4c: 00c705bb addw a1,a4,a2 + 80011d50: 0179093b addw s2,s2,s7 + 80011d54: 00e6c633 xor a2,a3,a4 + 80011d58: 0099093b addw s2,s2,s1 + 80011d5c: 00b644b3 xor s1,a2,a1 + 80011d60: 012484bb addw s1,s1,s2 + 80011d64: 0044961b slliw a2,s1,0x4 + 80011d68: eaa12937 lui s2,0xeaa12 + 80011d6c: 01c4d49b srliw s1,s1,0x1c + 80011d70: 009664b3 or s1,a2,s1 + 80011d74: 7fa9091b addiw s2,s2,2042 + 80011d78: 0095863b addw a2,a1,s1 + 80011d7c: 0089093b addw s2,s2,s0 + 80011d80: 00b744b3 xor s1,a4,a1 + 80011d84: 00d9093b addw s2,s2,a3 + 80011d88: 00c4c6b3 xor a3,s1,a2 + 80011d8c: 012686bb addw a3,a3,s2 + 80011d90: 00b6949b slliw s1,a3,0xb + 80011d94: d4ef3937 lui s2,0xd4ef3 + 80011d98: 0156d69b srliw a3,a3,0x15 + 80011d9c: 00d4e6b3 or a3,s1,a3 + 80011da0: 0859091b addiw s2,s2,133 + 80011da4: 00d606bb addw a3,a2,a3 + 80011da8: 00c5c4b3 xor s1,a1,a2 + 80011dac: 01f9093b addw s2,s2,t6 + 80011db0: 00e9093b addw s2,s2,a4 + 80011db4: 00d4c733 xor a4,s1,a3 + 80011db8: 0127073b addw a4,a4,s2 + 80011dbc: 0107149b slliw s1,a4,0x10 + 80011dc0: 04882937 lui s2,0x4882 + 80011dc4: 0107571b srliw a4,a4,0x10 + 80011dc8: 00e4e733 or a4,s1,a4 + 80011dcc: d059091b addiw s2,s2,-763 + 80011dd0: 00e684bb addw s1,a3,a4 + 80011dd4: 01c9093b addw s2,s2,t3 + 80011dd8: 00d64733 xor a4,a2,a3 + 80011ddc: 00b9093b addw s2,s2,a1 + 80011de0: 009745b3 xor a1,a4,s1 + 80011de4: 012585bb addw a1,a1,s2 + 80011de8: 0095d71b srliw a4,a1,0x9 + 80011dec: d9d4d937 lui s2,0xd9d4d + 80011df0: 0175959b slliw a1,a1,0x17 + 80011df4: 00b765b3 or a1,a4,a1 + 80011df8: 0399091b addiw s2,s2,57 + 80011dfc: 00b4873b addw a4,s1,a1 + 80011e00: 0109093b addw s2,s2,a6 + 80011e04: 0096c5b3 xor a1,a3,s1 + 80011e08: 00c9093b addw s2,s2,a2 + 80011e0c: 00e5c633 xor a2,a1,a4 + 80011e10: 0126063b addw a2,a2,s2 + 80011e14: 0046159b slliw a1,a2,0x4 + 80011e18: e6dba937 lui s2,0xe6dba + 80011e1c: 01c6561b srliw a2,a2,0x1c + 80011e20: 00c5e633 or a2,a1,a2 + 80011e24: 9e59091b addiw s2,s2,-1563 + 80011e28: 00c7063b addw a2,a4,a2 + 80011e2c: 00e4c5b3 xor a1,s1,a4 + 80011e30: 01a9093b addw s2,s2,s10 + 80011e34: 00d9093b addw s2,s2,a3 + 80011e38: 00c5c6b3 xor a3,a1,a2 + 80011e3c: 012686bb addw a3,a3,s2 + 80011e40: 00b6959b slliw a1,a3,0xb + 80011e44: 1fa28937 lui s2,0x1fa28 + 80011e48: 0156d69b srliw a3,a3,0x15 + 80011e4c: 00d5e6b3 or a3,a1,a3 + 80011e50: cf89091b addiw s2,s2,-776 + 80011e54: 00d605bb addw a1,a2,a3 + 80011e58: 0189093b addw s2,s2,s8 + 80011e5c: 00c746b3 xor a3,a4,a2 + 80011e60: 0099093b addw s2,s2,s1 + 80011e64: 00b6c4b3 xor s1,a3,a1 + 80011e68: 012484bb addw s1,s1,s2 + 80011e6c: 0104969b slliw a3,s1,0x10 + 80011e70: c4ac5937 lui s2,0xc4ac5 + 80011e74: 0104d49b srliw s1,s1,0x10 + 80011e78: 0096e4b3 or s1,a3,s1 + 80011e7c: 6659091b addiw s2,s2,1637 + 80011e80: 009586bb addw a3,a1,s1 + 80011e84: 0119093b addw s2,s2,a7 + 80011e88: 00b644b3 xor s1,a2,a1 + 80011e8c: 00e9093b addw s2,s2,a4 + 80011e90: 00d4c733 xor a4,s1,a3 + 80011e94: 0127073b addw a4,a4,s2 + 80011e98: 0097549b srliw s1,a4,0x9 + 80011e9c: 0177171b slliw a4,a4,0x17 + 80011ea0: 00e4e733 or a4,s1,a4 + 80011ea4: f4292937 lui s2,0xf4292 + 80011ea8: 00e6873b addw a4,a3,a4 + 80011eac: fff5c493 not s1,a1 + 80011eb0: 2449091b addiw s2,s2,580 + 80011eb4: 00e4e4b3 or s1,s1,a4 + 80011eb8: 0089043b addw s0,s2,s0 + 80011ebc: 00c4043b addw s0,s0,a2 + 80011ec0: 00d4c633 xor a2,s1,a3 + 80011ec4: 0086063b addw a2,a2,s0 + 80011ec8: 0066141b slliw s0,a2,0x6 + 80011ecc: 01a6561b srliw a2,a2,0x1a + 80011ed0: 00c46633 or a2,s0,a2 + 80011ed4: 432b04b7 lui s1,0x432b0 + 80011ed8: 00c7043b addw s0,a4,a2 + 80011edc: f974849b addiw s1,s1,-105 + 80011ee0: fff6c613 not a2,a3 + 80011ee4: 00866633 or a2,a2,s0 + 80011ee8: 007483bb addw t2,s1,t2 + 80011eec: 00b383bb addw t2,t2,a1 + 80011ef0: 00e645b3 xor a1,a2,a4 + 80011ef4: 007585bb addw a1,a1,t2 + 80011ef8: 00a5961b slliw a2,a1,0xa + 80011efc: 0165d59b srliw a1,a1,0x16 + 80011f00: 00b665b3 or a1,a2,a1 + 80011f04: ab9423b7 lui t2,0xab942 + 80011f08: 00b4063b addw a2,s0,a1 + 80011f0c: 3a73839b addiw t2,t2,935 + 80011f10: fff74593 not a1,a4 + 80011f14: 01b383bb addw t2,t2,s11 + 80011f18: 00c5edb3 or s11,a1,a2 + 80011f1c: 00d386bb addw a3,t2,a3 + 80011f20: 008dcdb3 xor s11,s11,s0 + 80011f24: 00dd8dbb addw s11,s11,a3 + 80011f28: 00fd969b slliw a3,s11,0xf + 80011f2c: 011ddd9b srliw s11,s11,0x11 + 80011f30: 01b6edb3 or s11,a3,s11 + 80011f34: fc93a3b7 lui t2,0xfc93a + 80011f38: 01b606bb addw a3,a2,s11 + 80011f3c: fff44593 not a1,s0 + 80011f40: 0393839b addiw t2,t2,57 + 80011f44: 00d5e5b3 or a1,a1,a3 + 80011f48: 005382bb addw t0,t2,t0 + 80011f4c: 00e282bb addw t0,t0,a4 + 80011f50: 00c5c733 xor a4,a1,a2 + 80011f54: 0057073b addw a4,a4,t0 + 80011f58: 00b7529b srliw t0,a4,0xb + 80011f5c: 0157171b slliw a4,a4,0x15 + 80011f60: 00e2e733 or a4,t0,a4 + 80011f64: 655b65b7 lui a1,0x655b6 + 80011f68: 00e682bb addw t0,a3,a4 + 80011f6c: 9c35859b addiw a1,a1,-1597 + 80011f70: fff64713 not a4,a2 + 80011f74: 01a585bb addw a1,a1,s10 + 80011f78: 00576d33 or s10,a4,t0 + 80011f7c: 0085843b addw s0,a1,s0 + 80011f80: 00dd4d33 xor s10,s10,a3 + 80011f84: 008d0d3b addw s10,s10,s0 + 80011f88: 006d159b slliw a1,s10,0x6 + 80011f8c: 01ad5d1b srliw s10,s10,0x1a + 80011f90: 01a5ed33 or s10,a1,s10 + 80011f94: 8f0cd3b7 lui t2,0x8f0cd + 80011f98: 01a285bb addw a1,t0,s10 + 80011f9c: fff6c713 not a4,a3 + 80011fa0: c923839b addiw t2,t2,-878 + 80011fa4: 01f383bb addw t2,t2,t6 + 80011fa8: 00b76fb3 or t6,a4,a1 + 80011fac: 00c3863b addw a2,t2,a2 + 80011fb0: 005fcfb3 xor t6,t6,t0 + 80011fb4: 00cf8fbb addw t6,t6,a2 + 80011fb8: 00af961b slliw a2,t6,0xa + 80011fbc: 016fdf9b srliw t6,t6,0x16 + 80011fc0: 01f66fb3 or t6,a2,t6 + 80011fc4: 01f5863b addw a2,a1,t6 + 80011fc8: ffefffb7 lui t6,0xffeff + 80011fcc: fff2c713 not a4,t0 + 80011fd0: 47df8f9b addiw t6,t6,1149 + 80011fd4: 019f8fbb addw t6,t6,s9 + 80011fd8: 00c76cb3 or s9,a4,a2 + 80011fdc: 00df86bb addw a3,t6,a3 + 80011fe0: 00bcccb3 xor s9,s9,a1 + 80011fe4: 00dc8cbb addw s9,s9,a3 + 80011fe8: 00fc969b slliw a3,s9,0xf + 80011fec: 011cdc9b srliw s9,s9,0x11 + 80011ff0: 0196ecb3 or s9,a3,s9 + 80011ff4: 85846fb7 lui t6,0x85846 + 80011ff8: 019606bb addw a3,a2,s9 + 80011ffc: fff5c713 not a4,a1 + 80012000: dd1f8f9b addiw t6,t6,-559 + 80012004: 01ef8f3b addw t5,t6,t5 + 80012008: 00d76733 or a4,a4,a3 + 8001200c: 005f02bb addw t0,t5,t0 + 80012010: 00c74733 xor a4,a4,a2 + 80012014: 0057073b addw a4,a4,t0 + 80012018: 00b75f1b srliw t5,a4,0xb + 8001201c: 0157171b slliw a4,a4,0x15 + 80012020: 00ef6733 or a4,t5,a4 + 80012024: 6fa88fb7 lui t6,0x6fa88 + 80012028: 00e68f3b addw t5,a3,a4 + 8001202c: e4ff8f9b addiw t6,t6,-433 + 80012030: fff64713 not a4,a2 + 80012034: 01df8fbb addw t6,t6,t4 + 80012038: 01e76eb3 or t4,a4,t5 + 8001203c: 00bf85bb addw a1,t6,a1 + 80012040: 00deceb3 xor t4,t4,a3 + 80012044: 00be8ebb addw t4,t4,a1 + 80012048: 006e959b slliw a1,t4,0x6 + 8001204c: 01aede9b srliw t4,t4,0x1a + 80012050: 01d5eeb3 or t4,a1,t4 + 80012054: 01df05bb addw a1,t5,t4 + 80012058: fe2ceeb7 lui t4,0xfe2ce + 8001205c: fff6c713 not a4,a3 + 80012060: 6e0e8e9b addiw t4,t4,1760 + 80012064: 018e8ebb addw t4,t4,s8 + 80012068: 00b76c33 or s8,a4,a1 + 8001206c: 00ce863b addw a2,t4,a2 + 80012070: 01ec4c33 xor s8,s8,t5 + 80012074: 00cc0c3b addw s8,s8,a2 + 80012078: 00ac161b slliw a2,s8,0xa + 8001207c: 016c5c1b srliw s8,s8,0x16 + 80012080: 01866c33 or s8,a2,s8 + 80012084: a3014eb7 lui t4,0xa3014 + 80012088: 0185863b addw a2,a1,s8 + 8001208c: ffff4713 not a4,t5 + 80012090: 314e8e9b addiw t4,t4,788 + 80012094: 01ce8ebb addw t4,t4,t3 + 80012098: 00c76e33 or t3,a4,a2 + 8001209c: 00de86bb addw a3,t4,a3 + 800120a0: 00be4e33 xor t3,t3,a1 + 800120a4: 00de0e3b addw t3,t3,a3 + 800120a8: 00fe169b slliw a3,t3,0xf + 800120ac: 011e5e1b srliw t3,t3,0x11 + 800120b0: 01c6ee33 or t3,a3,t3 + 800120b4: 01c606bb addw a3,a2,t3 + 800120b8: 4e081e37 lui t3,0x4e081 + 800120bc: fff5c713 not a4,a1 + 800120c0: 1a1e0e1b addiw t3,t3,417 + 800120c4: 017e0e3b addw t3,t3,s7 + 800120c8: 00d76bb3 or s7,a4,a3 + 800120cc: 01ee0f3b addw t5,t3,t5 + 800120d0: 00cbcbb3 xor s7,s7,a2 + 800120d4: 01eb8bbb addw s7,s7,t5 + 800120d8: 00bbd71b srliw a4,s7,0xb + 800120dc: 015b9b9b slliw s7,s7,0x15 + 800120e0: 01776bb3 or s7,a4,s7 + 800120e4: f7538e37 lui t3,0xf7538 + 800120e8: 01768bbb addw s7,a3,s7 + 800120ec: fff64713 not a4,a2 + 800120f0: e82e0e1b addiw t3,t3,-382 + 800120f4: 006e0e3b addw t3,t3,t1 + 800120f8: 01776333 or t1,a4,s7 + 800120fc: 00be05bb addw a1,t3,a1 + 80012100: 00d34333 xor t1,t1,a3 + 80012104: 00b3033b addw t1,t1,a1 + 80012108: 0063171b slliw a4,t1,0x6 + 8001210c: 01a3531b srliw t1,t1,0x1a + 80012110: 00676333 or t1,a4,t1 + 80012114: bd3af5b7 lui a1,0xbd3af + 80012118: 006b833b addw t1,s7,t1 + 8001211c: fff6c713 not a4,a3 + 80012120: 2355859b addiw a1,a1,565 + 80012124: 016585bb addw a1,a1,s6 + 80012128: 00676b33 or s6,a4,t1 + 8001212c: 00c5863b addw a2,a1,a2 + 80012130: 017b4b33 xor s6,s6,s7 + 80012134: 00cb0b3b addw s6,s6,a2 + 80012138: 00ab171b slliw a4,s6,0xa + 8001213c: 016b5b1b srliw s6,s6,0x16 + 80012140: 01676b33 or s6,a4,s6 + 80012144: 2ad7d637 lui a2,0x2ad7d + 80012148: 01630b3b addw s6,t1,s6 + 8001214c: fffbc713 not a4,s7 + 80012150: 2bb6061b addiw a2,a2,699 + 80012154: 0116063b addw a2,a2,a7 + 80012158: 016768b3 or a7,a4,s6 + 8001215c: 00d606bb addw a3,a2,a3 + 80012160: 0068c8b3 xor a7,a7,t1 + 80012164: 00d888bb addw a7,a7,a3 + 80012168: 00f8971b slliw a4,a7,0xf + 8001216c: 0118d89b srliw a7,a7,0x11 + 80012170: 011768b3 or a7,a4,a7 + 80012174: eb86d6b7 lui a3,0xeb86d + 80012178: 011b08bb addw a7,s6,a7 + 8001217c: fff34713 not a4,t1 + 80012180: 3916869b addiw a3,a3,913 + 80012184: 010686bb addw a3,a3,a6 + 80012188: 01176833 or a6,a4,a7 + 8001218c: 01768bbb addw s7,a3,s7 + 80012190: 01684833 xor a6,a6,s6 + 80012194: 00813683 ld a3,8(sp) + 80012198: 0178083b addw a6,a6,s7 + 8001219c: 00b8571b srliw a4,a6,0xb + 800121a0: 0158181b slliw a6,a6,0x15 + 800121a4: 1c813403 ld s0,456(sp) + 800121a8: 01076833 or a6,a4,a6 + 800121ac: 011787bb addw a5,a5,a7 + 800121b0: 016a8b3b addw s6,s5,s6 + 800121b4: 011989bb addw s3,s3,a7 + 800121b8: 0066833b addw t1,a3,t1 + 800121bc: 010787bb addw a5,a5,a6 + 800121c0: 01352823 sw s3,16(a0) + 800121c4: 01652a23 sw s6,20(a0) + 800121c8: 00652423 sw t1,8(a0) + 800121cc: 00f52623 sw a5,12(a0) + 800121d0: 1c013483 ld s1,448(sp) + 800121d4: 1b813903 ld s2,440(sp) + 800121d8: 1b013983 ld s3,432(sp) + 800121dc: 1a813a03 ld s4,424(sp) + 800121e0: 1a013a83 ld s5,416(sp) + 800121e4: 19813b03 ld s6,408(sp) + 800121e8: 19013b83 ld s7,400(sp) + 800121ec: 18813c03 ld s8,392(sp) + 800121f0: 18013c83 ld s9,384(sp) + 800121f4: 17813d03 ld s10,376(sp) + 800121f8: 17013d83 ld s11,368(sp) + 800121fc: 1d010113 addi sp,sp,464 + 80012200: 00008067 ret + +0000000080012204 <_Z10md5_updateP11md5_contextPhj.part.0>: + 80012204: fc010113 addi sp,sp,-64 + 80012208: 01413823 sd s4,16(sp) + 8001220c: 00052a03 lw s4,0(a0) + 80012210: 03213023 sd s2,32(sp) + 80012214: 00050913 mv s2,a0 + 80012218: 00452503 lw a0,4(a0) + 8001221c: 01313c23 sd s3,24(sp) + 80012220: 0036179b slliw a5,a2,0x3 + 80012224: 00060993 mv s3,a2 + 80012228: 01d9d71b srliw a4,s3,0x1d + 8001222c: 00fa063b addw a2,s4,a5 + 80012230: 00a7073b addw a4,a4,a0 + 80012234: 00f637b3 sltu a5,a2,a5 + 80012238: 02813823 sd s0,48(sp) + 8001223c: 02113c23 sd ra,56(sp) + 80012240: 02913423 sd s1,40(sp) + 80012244: 01513423 sd s5,8(sp) + 80012248: 003a5a1b srliw s4,s4,0x3 + 8001224c: 00f707bb addw a5,a4,a5 + 80012250: 03fa7a13 andi s4,s4,63 + 80012254: 00c92023 sw a2,0(s2) # fffffffff4292000 <_end+0xffffffff740bd000> + 80012258: 00f92223 sw a5,4(s2) + 8001225c: 00058413 mv s0,a1 + 80012260: 060a0863 beqz s4,800122d0 <_Z10md5_updateP11md5_contextPhj.part.0+0xcc> + 80012264: 04000613 li a2,64 + 80012268: 4146063b subw a2,a2,s4 + 8001226c: 0006079b sext.w a5,a2 + 80012270: 02f9f863 bgeu s3,a5,800122a0 <_Z10md5_updateP11md5_contextPhj.part.0+0x9c> + 80012274: 00040493 mv s1,s0 + 80012278: 08099a63 bnez s3,8001230c <_Z10md5_updateP11md5_contextPhj.part.0+0x108> + 8001227c: 03813083 ld ra,56(sp) + 80012280: 03013403 ld s0,48(sp) + 80012284: 02813483 ld s1,40(sp) + 80012288: 02013903 ld s2,32(sp) + 8001228c: 01813983 ld s3,24(sp) + 80012290: 01013a03 ld s4,16(sp) + 80012294: 00813a83 ld s5,8(sp) + 80012298: 04010113 addi sp,sp,64 + 8001229c: 00008067 ret + 800122a0: 02061493 slli s1,a2,0x20 + 800122a4: 0204d493 srli s1,s1,0x20 + 800122a8: 01890a93 addi s5,s2,24 + 800122ac: 00048613 mv a2,s1 + 800122b0: 014a8533 add a0,s5,s4 + 800122b4: 0a1290ef jal ra,8003bb54 + 800122b8: 000a8593 mv a1,s5 + 800122bc: 00090513 mv a0,s2 + 800122c0: fc09899b addiw s3,s3,-64 + 800122c4: ef9fe0ef jal ra,800111bc <_Z11md5_processP11md5_contextPh> + 800122c8: 014989bb addw s3,s3,s4 + 800122cc: 00940433 add s0,s0,s1 + 800122d0: 03f00793 li a5,63 + 800122d4: 0737f863 bgeu a5,s3,80012344 <_Z10md5_updateP11md5_contextPhj.part.0+0x140> + 800122d8: fc09849b addiw s1,s3,-64 + 800122dc: 0064d49b srliw s1,s1,0x6 + 800122e0: 00148493 addi s1,s1,1 # 432b0001 <_entry_offset+0x432b0001> + 800122e4: 00649493 slli s1,s1,0x6 + 800122e8: 009404b3 add s1,s0,s1 + 800122ec: 00040593 mv a1,s0 + 800122f0: 00090513 mv a0,s2 + 800122f4: 04040413 addi s0,s0,64 + 800122f8: ec5fe0ef jal ra,800111bc <_Z11md5_processP11md5_contextPh> + 800122fc: fe9418e3 bne s0,s1,800122ec <_Z10md5_updateP11md5_contextPhj.part.0+0xe8> + 80012300: 03f9f993 andi s3,s3,63 + 80012304: 00000a13 li s4,0 + 80012308: f6098ae3 beqz s3,8001227c <_Z10md5_updateP11md5_contextPhj.part.0+0x78> + 8001230c: 03013403 ld s0,48(sp) + 80012310: 01890513 addi a0,s2,24 + 80012314: 03813083 ld ra,56(sp) + 80012318: 02013903 ld s2,32(sp) + 8001231c: 00813a83 ld s5,8(sp) + 80012320: 02099613 slli a2,s3,0x20 + 80012324: 00048593 mv a1,s1 + 80012328: 01813983 ld s3,24(sp) + 8001232c: 02813483 ld s1,40(sp) + 80012330: 01450533 add a0,a0,s4 + 80012334: 01013a03 ld s4,16(sp) + 80012338: 02065613 srli a2,a2,0x20 + 8001233c: 04010113 addi sp,sp,64 + 80012340: 0152906f j 8003bb54 + 80012344: 00000a13 li s4,0 + 80012348: 00040493 mv s1,s0 + 8001234c: f2dff06f j 80012278 <_Z10md5_updateP11md5_contextPhj.part.0+0x74> + +0000000080012350 <_Z10md5_updateP11md5_contextPhj>: + 80012350: 00060463 beqz a2,80012358 <_Z10md5_updateP11md5_contextPhj+0x8> + 80012354: eb1ff06f j 80012204 <_Z10md5_updateP11md5_contextPhj.part.0> + 80012358: 00008067 ret + +000000008001235c <_Z10md5_finishP11md5_contextPh>: + 8001235c: 00052783 lw a5,0(a0) + 80012360: 00452703 lw a4,4(a0) + 80012364: fd010113 addi sp,sp,-48 + 80012368: 0037d61b srliw a2,a5,0x3 + 8001236c: 02813023 sd s0,32(sp) + 80012370: 00913c23 sd s1,24(sp) + 80012374: 00f12423 sw a5,8(sp) + 80012378: 02113423 sd ra,40(sp) + 8001237c: 00e12623 sw a4,12(sp) + 80012380: 03f67613 andi a2,a2,63 + 80012384: 03700793 li a5,55 + 80012388: 00050413 mv s0,a0 + 8001238c: 00058493 mv s1,a1 + 80012390: 0cc7e863 bltu a5,a2,80012460 <_Z10md5_finishP11md5_contextPh+0x104> + 80012394: 03800793 li a5,56 + 80012398: 40c7863b subw a2,a5,a2 + 8001239c: 00040513 mv a0,s0 + 800123a0: 00038597 auipc a1,0x38 + 800123a4: d7058593 addi a1,a1,-656 # 8004a110 <_ZL11md5_padding> + 800123a8: e5dff0ef jal ra,80012204 <_Z10md5_updateP11md5_contextPhj.part.0> + 800123ac: 00810593 addi a1,sp,8 + 800123b0: 00040513 mv a0,s0 + 800123b4: 00800613 li a2,8 + 800123b8: e4dff0ef jal ra,80012204 <_Z10md5_updateP11md5_contextPhj.part.0> + 800123bc: 00842783 lw a5,8(s0) + 800123c0: 00f48023 sb a5,0(s1) + 800123c4: 00842783 lw a5,8(s0) + 800123c8: 0087d79b srliw a5,a5,0x8 + 800123cc: 00f480a3 sb a5,1(s1) + 800123d0: 00a45783 lhu a5,10(s0) + 800123d4: 00f48123 sb a5,2(s1) + 800123d8: 00b44783 lbu a5,11(s0) + 800123dc: 00f481a3 sb a5,3(s1) + 800123e0: 00c42783 lw a5,12(s0) + 800123e4: 00f48223 sb a5,4(s1) + 800123e8: 00c42783 lw a5,12(s0) + 800123ec: 0087d79b srliw a5,a5,0x8 + 800123f0: 00f482a3 sb a5,5(s1) + 800123f4: 00e45783 lhu a5,14(s0) + 800123f8: 00f48323 sb a5,6(s1) + 800123fc: 00f44783 lbu a5,15(s0) + 80012400: 00f483a3 sb a5,7(s1) + 80012404: 01042783 lw a5,16(s0) + 80012408: 00f48423 sb a5,8(s1) + 8001240c: 01042783 lw a5,16(s0) + 80012410: 0087d79b srliw a5,a5,0x8 + 80012414: 00f484a3 sb a5,9(s1) + 80012418: 01245783 lhu a5,18(s0) + 8001241c: 00f48523 sb a5,10(s1) + 80012420: 01344783 lbu a5,19(s0) + 80012424: 00f485a3 sb a5,11(s1) + 80012428: 01442783 lw a5,20(s0) + 8001242c: 00f48623 sb a5,12(s1) + 80012430: 01442783 lw a5,20(s0) + 80012434: 0087d79b srliw a5,a5,0x8 + 80012438: 00f486a3 sb a5,13(s1) + 8001243c: 01645783 lhu a5,22(s0) + 80012440: 00f48723 sb a5,14(s1) + 80012444: 01744783 lbu a5,23(s0) + 80012448: 00f487a3 sb a5,15(s1) + 8001244c: 02813083 ld ra,40(sp) + 80012450: 02013403 ld s0,32(sp) + 80012454: 01813483 ld s1,24(sp) + 80012458: 03010113 addi sp,sp,48 + 8001245c: 00008067 ret + 80012460: 07800793 li a5,120 + 80012464: 40c7863b subw a2,a5,a2 + 80012468: f35ff06f j 8001239c <_Z10md5_finishP11md5_contextPh+0x40> + +000000008001246c <_Z12FCEU_gmallocj>: + 8001246c: fe010113 addi sp,sp,-32 + 80012470: 00913423 sd s1,8(sp) + 80012474: 00050493 mv s1,a0 + 80012478: 02051513 slli a0,a0,0x20 + 8001247c: 02055513 srli a0,a0,0x20 + 80012480: 00113c23 sd ra,24(sp) + 80012484: 00813823 sd s0,16(sp) + 80012488: 721270ef jal ra,8003a3a8 + 8001248c: 02050663 beqz a0,800124b8 <_Z12FCEU_gmallocj+0x4c> + 80012490: 00048593 mv a1,s1 + 80012494: 00100613 li a2,1 + 80012498: 00050413 mv s0,a0 + 8001249c: 2b9210ef jal ra,80033f54 <_Z15FCEU_MemoryRandPhjb> + 800124a0: 01813083 ld ra,24(sp) + 800124a4: 00040513 mv a0,s0 + 800124a8: 01013403 ld s0,16(sp) + 800124ac: 00813483 ld s1,8(sp) + 800124b0: 02010113 addi sp,sp,32 + 800124b4: 00008067 ret + 800124b8: 00033517 auipc a0,0x33 + 800124bc: dd850513 addi a0,a0,-552 # 80045290 <_ZZL8SetInputvE3moo+0x440> + 800124c0: 088290ef jal ra,8003b548 + 800124c4: 02500613 li a2,37 + 800124c8: 00033597 auipc a1,0x33 + 800124cc: df858593 addi a1,a1,-520 # 800452c0 <_ZZL8SetInputvE3moo+0x470> + 800124d0: 0002b517 auipc a0,0x2b + 800124d4: 84050513 addi a0,a0,-1984 # 8003cd10 <_etext+0x2c> + 800124d8: 070290ef jal ra,8003b548 + 800124dc: 00100513 li a0,1 + 800124e0: 095270ef jal ra,80039d74 + +00000000800124e4 <_Z11FCEU_mallocj>: + 800124e4: fe010113 addi sp,sp,-32 + 800124e8: 00913423 sd s1,8(sp) + 800124ec: 02051493 slli s1,a0,0x20 + 800124f0: 0204d493 srli s1,s1,0x20 + 800124f4: 00048513 mv a0,s1 + 800124f8: 00813823 sd s0,16(sp) + 800124fc: 00113c23 sd ra,24(sp) + 80012500: 6a9270ef jal ra,8003a3a8 + 80012504: 00050413 mv s0,a0 + 80012508: 02050463 beqz a0,80012530 <_Z11FCEU_mallocj+0x4c> + 8001250c: 00048613 mv a2,s1 + 80012510: 00000593 li a1,0 + 80012514: 514290ef jal ra,8003ba28 + 80012518: 01813083 ld ra,24(sp) + 8001251c: 00040513 mv a0,s0 + 80012520: 01013403 ld s0,16(sp) + 80012524: 00813483 ld s1,8(sp) + 80012528: 02010113 addi sp,sp,32 + 8001252c: 00008067 ret + 80012530: 00033517 auipc a0,0x33 + 80012534: dc050513 addi a0,a0,-576 # 800452f0 <_ZZL8SetInputvE3moo+0x4a0> + 80012538: 010290ef jal ra,8003b548 + 8001253c: fddff06f j 80012518 <_Z11FCEU_mallocj+0x34> + +0000000080012540 <_Z10FCEU_gfreePv>: + 80012540: 6792706f j 8003a3b8 + +0000000080012544 <_Z12FCEU_dmallocj>: + 80012544: 02051513 slli a0,a0,0x20 + 80012548: 02055513 srli a0,a0,0x20 + 8001254c: 65d2706f j 8003a3a8 + +0000000080012550 <_Z6uppow2j>: + 80012550: 01f00793 li a5,31 + 80012554: 00100613 li a2,1 + 80012558: fff00593 li a1,-1 + 8001255c: 00c0006f j 80012568 <_Z6uppow2j+0x18> + 80012560: fff7879b addiw a5,a5,-1 + 80012564: 02b78263 beq a5,a1,80012588 <_Z6uppow2j+0x38> + 80012568: 00f616bb sllw a3,a2,a5 + 8001256c: 00d57733 and a4,a0,a3 + 80012570: 0007071b sext.w a4,a4 + 80012574: fe0706e3 beqz a4,80012560 <_Z6uppow2j+0x10> + 80012578: 00a68863 beq a3,a0,80012588 <_Z6uppow2j+0x38> + 8001257c: 0017879b addiw a5,a5,1 + 80012580: 00f6153b sllw a0,a2,a5 + 80012584: 00008067 ret + 80012588: 00008067 ret + +000000008001258c <_ZL16UNLSC127ProtReadj>: + 8001258c: 02000513 li a0,32 + 80012590: 00008067 ret + +0000000080012594 <_ZL13UNLSC127Resetv>: + 80012594: 001b9797 auipc a5,0x1b9 + 80012598: 70079e23 sh zero,1820(a5) # 801cbcb0 <_ZL4IRQa> + 8001259c: 001b9797 auipc a5,0x1b9 + 800125a0: 72079223 sh zero,1828(a5) # 801cbcc0 <_ZL8IRQCount> + 800125a4: 00008067 ret + +00000000800125a8 <_ZL4Syncv>: + 800125a8: fd010113 addi sp,sp,-48 + 800125ac: 00000613 li a2,0 + 800125b0: 000065b7 lui a1,0x6 + 800125b4: 01000513 li a0,16 + 800125b8: 02113423 sd ra,40(sp) + 800125bc: 02813023 sd s0,32(sp) + 800125c0: 00913c23 sd s1,24(sp) + 800125c4: 01213823 sd s2,16(sp) + 800125c8: 01313423 sd s3,8(sp) + 800125cc: b1cfe0ef jal ra,800108e8 <_Z8setprg8rijj> + 800125d0: 001b9997 auipc s3,0x1b9 + 800125d4: 6d898993 addi s3,s3,1752 # 801cbca8 <_ZL3reg> + 800125d8: 0009c583 lbu a1,0(s3) + 800125dc: 00008537 lui a0,0x8 + 800125e0: 001b9497 auipc s1,0x1b9 + 800125e4: 6c048493 addi s1,s1,1728 # 801cbca0 <_ZL3chr> + 800125e8: cb4fe0ef jal ra,80010a9c <_Z7setprg8jj> + 800125ec: 0019c583 lbu a1,1(s3) + 800125f0: 0000a537 lui a0,0xa + 800125f4: 00000413 li s0,0 + 800125f8: ca4fe0ef jal ra,80010a9c <_Z7setprg8jj> + 800125fc: 0029c583 lbu a1,2(s3) + 80012600: 0000c537 lui a0,0xc + 80012604: 00002937 lui s2,0x2 + 80012608: c94fe0ef jal ra,80010a9c <_Z7setprg8jj> + 8001260c: fff00593 li a1,-1 + 80012610: 0000e537 lui a0,0xe + 80012614: c88fe0ef jal ra,80010a9c <_Z7setprg8jj> + 80012618: 0004c583 lbu a1,0(s1) + 8001261c: 00040513 mv a0,s0 + 80012620: 4004041b addiw s0,s0,1024 + 80012624: 881fe0ef jal ra,80010ea4 <_Z7setchr1jj> + 80012628: 00148493 addi s1,s1,1 + 8001262c: ff2416e3 bne s0,s2,80012618 <_ZL4Syncv+0x70> + 80012630: 0039c503 lbu a0,3(s3) + 80012634: 02013403 ld s0,32(sp) + 80012638: 02813083 ld ra,40(sp) + 8001263c: 01813483 ld s1,24(sp) + 80012640: 01013903 ld s2,16(sp) + 80012644: 00813983 ld s3,8(sp) + 80012648: 00154513 xori a0,a0,1 + 8001264c: 03010113 addi sp,sp,48 + 80012650: 9f9fe06f j 80011048 <_Z9setmirrori> + +0000000080012654 <_ZL12StateRestorei>: + 80012654: f55ff06f j 800125a8 <_ZL4Syncv> + +0000000080012658 <_ZL13UNLSC127Closev>: + 80012658: 001b9517 auipc a0,0x1b9 + 8001265c: 66053503 ld a0,1632(a0) # 801cbcb8 <_ZL4WRAM> + 80012660: 02050263 beqz a0,80012684 <_ZL13UNLSC127Closev+0x2c> + 80012664: ff010113 addi sp,sp,-16 + 80012668: 00113423 sd ra,8(sp) + 8001266c: ed5ff0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80012670: 00813083 ld ra,8(sp) + 80012674: 001b9797 auipc a5,0x1b9 + 80012678: 6407b223 sd zero,1604(a5) # 801cbcb8 <_ZL4WRAM> + 8001267c: 01010113 addi sp,sp,16 + 80012680: 00008067 ret + 80012684: 001b9797 auipc a5,0x1b9 + 80012688: 6207ba23 sd zero,1588(a5) # 801cbcb8 <_ZL4WRAM> + 8001268c: 00008067 ret + +0000000080012690 <_ZL13UNLSC127Powerv>: + 80012690: ff010113 addi sp,sp,-16 + 80012694: 00113423 sd ra,8(sp) + 80012698: 00813023 sd s0,0(sp) + 8001269c: 001b9797 auipc a5,0x1b9 + 800126a0: 60079a23 sh zero,1556(a5) # 801cbcb0 <_ZL4IRQa> + 800126a4: 001b9797 auipc a5,0x1b9 + 800126a8: 60079e23 sh zero,1564(a5) # 801cbcc0 <_ZL8IRQCount> + 800126ac: efdff0ef jal ra,800125a8 <_ZL4Syncv> + 800126b0: 000065b7 lui a1,0x6 + 800126b4: 80058593 addi a1,a1,-2048 # 5800 <_entry_offset+0x5800> + 800126b8: 00058513 mv a0,a1 + 800126bc: 00000617 auipc a2,0x0 + 800126c0: ed060613 addi a2,a2,-304 # 8001258c <_ZL16UNLSC127ProtReadj> + 800126c4: 358210ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800126c8: 00008437 lui s0,0x8 + 800126cc: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 800126d0: ffffe617 auipc a2,0xffffe + 800126d4: f9060613 addi a2,a2,-112 # 80010660 <_Z6CartBRj> + 800126d8: 00006537 lui a0,0x6 + 800126dc: 340210ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800126e0: fff40593 addi a1,s0,-1 + 800126e4: ffffe617 auipc a2,0xffffe + 800126e8: fa860613 addi a2,a2,-88 # 8001068c <_Z6CartBWjh> + 800126ec: 00006537 lui a0,0x6 + 800126f0: 438210ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800126f4: 00010437 lui s0,0x10 + 800126f8: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 800126fc: ffffe617 auipc a2,0xffffe + 80012700: f6460613 addi a2,a2,-156 # 80010660 <_Z6CartBRj> + 80012704: 00008537 lui a0,0x8 + 80012708: 314210ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001270c: fff40593 addi a1,s0,-1 + 80012710: 00000617 auipc a2,0x0 + 80012714: 03860613 addi a2,a2,56 # 80012748 <_ZL13UNLSC127Writejh> + 80012718: 00008537 lui a0,0x8 + 8001271c: 40c210ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80012720: 00013403 ld s0,0(sp) + 80012724: 00813083 ld ra,8(sp) + 80012728: 001b9517 auipc a0,0x1b9 + 8001272c: 59c52503 lw a0,1436(a0) # 801cbcc4 <_ZL8WRAMSIZE> + 80012730: 001b9617 auipc a2,0x1b9 + 80012734: 58863603 ld a2,1416(a2) # 801cbcb8 <_ZL4WRAM> + 80012738: 000065b7 lui a1,0x6 + 8001273c: 00a5551b srliw a0,a0,0xa + 80012740: 01010113 addi sp,sp,16 + 80012744: 8d1ed06f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +0000000080012748 <_ZL13UNLSC127Writejh>: + 80012748: 000097b7 lui a5,0x9 + 8001274c: 00778713 addi a4,a5,7 # 9007 <_entry_offset+0x9007> + 80012750: 04a76263 bltu a4,a0,80012794 <_ZL13UNLSC127Writejh+0x4c> + 80012754: 08f56463 bltu a0,a5,800127dc <_ZL13UNLSC127Writejh+0x94> + 80012758: ffff77b7 lui a5,0xffff7 + 8001275c: fff7879b addiw a5,a5,-1 + 80012760: 00f5053b addw a0,a0,a5 + 80012764: 0005071b sext.w a4,a0 + 80012768: 00600793 li a5,6 + 8001276c: 12e7e863 bltu a5,a4,8001289c <_ZL13UNLSC127Writejh+0x154> + 80012770: 02051513 slli a0,a0,0x20 + 80012774: 02055513 srli a0,a0,0x20 + 80012778: 00033717 auipc a4,0x33 + 8001277c: b9470713 addi a4,a4,-1132 # 8004530c <_ZZL8SetInputvE3moo+0x4bc> + 80012780: 00251513 slli a0,a0,0x2 + 80012784: 00e50533 add a0,a0,a4 + 80012788: 00052783 lw a5,0(a0) + 8001278c: 00e787b3 add a5,a5,a4 + 80012790: 00078067 jr a5 # ffffffffffff7000 <_end+0xffffffff7fe22000> + 80012794: 0000c7b7 lui a5,0xc + 80012798: 00578713 addi a4,a5,5 # c005 <_entry_offset+0xc005> + 8001279c: 0ce50263 beq a0,a4,80012860 <_ZL13UNLSC127Writejh+0x118> + 800127a0: 00a77e63 bgeu a4,a0,800127bc <_ZL13UNLSC127Writejh+0x74> + 800127a4: 0000d7b7 lui a5,0xd + 800127a8: 00178793 addi a5,a5,1 # d001 <_entry_offset+0xd001> + 800127ac: 00f51663 bne a0,a5,800127b8 <_ZL13UNLSC127Writejh+0x70> + 800127b0: 001b9797 auipc a5,0x1b9 + 800127b4: 4eb78da3 sb a1,1275(a5) # 801cbcab <_ZL3reg+0x3> + 800127b8: df1ff06f j 800125a8 <_ZL4Syncv> + 800127bc: 00278713 addi a4,a5,2 + 800127c0: 0ae50663 beq a0,a4,8001286c <_ZL13UNLSC127Writejh+0x124> + 800127c4: 00378793 addi a5,a5,3 + 800127c8: fef518e3 bne a0,a5,800127b8 <_ZL13UNLSC127Writejh+0x70> + 800127cc: 00100793 li a5,1 + 800127d0: 001b9717 auipc a4,0x1b9 + 800127d4: 4ef71023 sh a5,1248(a4) # 801cbcb0 <_ZL4IRQa> + 800127d8: fe1ff06f j 800127b8 <_ZL13UNLSC127Writejh+0x70> + 800127dc: 000087b7 lui a5,0x8 + 800127e0: 00178713 addi a4,a5,1 # 8001 <_entry_offset+0x8001> + 800127e4: 0ae50663 beq a0,a4,80012890 <_ZL13UNLSC127Writejh+0x148> + 800127e8: 00278713 addi a4,a5,2 + 800127ec: 00e51863 bne a0,a4,800127fc <_ZL13UNLSC127Writejh+0xb4> + 800127f0: 001b9797 auipc a5,0x1b9 + 800127f4: 4ab78d23 sb a1,1210(a5) # 801cbcaa <_ZL3reg+0x2> + 800127f8: fc1ff06f j 800127b8 <_ZL13UNLSC127Writejh+0x70> + 800127fc: faf51ee3 bne a0,a5,800127b8 <_ZL13UNLSC127Writejh+0x70> + 80012800: 001b9797 auipc a5,0x1b9 + 80012804: 4ab78423 sb a1,1192(a5) # 801cbca8 <_ZL3reg> + 80012808: fb1ff06f j 800127b8 <_ZL13UNLSC127Writejh+0x70> + 8001280c: 001b9797 auipc a5,0x1b9 + 80012810: 48b78ca3 sb a1,1177(a5) # 801cbca5 <_ZL3chr+0x5> + 80012814: fa5ff06f j 800127b8 <_ZL13UNLSC127Writejh+0x70> + 80012818: 001b9797 auipc a5,0x1b9 + 8001281c: 48b787a3 sb a1,1167(a5) # 801cbca7 <_ZL3chr+0x7> + 80012820: f99ff06f j 800127b8 <_ZL13UNLSC127Writejh+0x70> + 80012824: 001b9797 auipc a5,0x1b9 + 80012828: 48b78123 sb a1,1154(a5) # 801cbca6 <_ZL3chr+0x6> + 8001282c: f8dff06f j 800127b8 <_ZL13UNLSC127Writejh+0x70> + 80012830: 001b9797 auipc a5,0x1b9 + 80012834: 46b788a3 sb a1,1137(a5) # 801cbca1 <_ZL3chr+0x1> + 80012838: f81ff06f j 800127b8 <_ZL13UNLSC127Writejh+0x70> + 8001283c: 001b9797 auipc a5,0x1b9 + 80012840: 46b78323 sb a1,1126(a5) # 801cbca2 <_ZL3chr+0x2> + 80012844: f75ff06f j 800127b8 <_ZL13UNLSC127Writejh+0x70> + 80012848: 001b9797 auipc a5,0x1b9 + 8001284c: 44b78da3 sb a1,1115(a5) # 801cbca3 <_ZL3chr+0x3> + 80012850: f69ff06f j 800127b8 <_ZL13UNLSC127Writejh+0x70> + 80012854: 001b9797 auipc a5,0x1b9 + 80012858: 44b78823 sb a1,1104(a5) # 801cbca4 <_ZL3chr+0x4> + 8001285c: f5dff06f j 800127b8 <_ZL13UNLSC127Writejh+0x70> + 80012860: 001b9797 auipc a5,0x1b9 + 80012864: 46b79023 sh a1,1120(a5) # 801cbcc0 <_ZL8IRQCount> + 80012868: f51ff06f j 800127b8 <_ZL13UNLSC127Writejh+0x70> + 8001286c: ff010113 addi sp,sp,-16 + 80012870: 00100513 li a0,1 + 80012874: 00113423 sd ra,8(sp) + 80012878: 001b9797 auipc a5,0x1b9 + 8001287c: 42079c23 sh zero,1080(a5) # 801cbcb0 <_ZL4IRQa> + 80012880: cd0ee0ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 80012884: 00813083 ld ra,8(sp) + 80012888: 01010113 addi sp,sp,16 + 8001288c: d1dff06f j 800125a8 <_ZL4Syncv> + 80012890: 001b9797 auipc a5,0x1b9 + 80012894: 40b78ca3 sb a1,1049(a5) # 801cbca9 <_ZL3reg+0x1> + 80012898: f21ff06f j 800127b8 <_ZL13UNLSC127Writejh+0x70> + 8001289c: 001b9797 auipc a5,0x1b9 + 800128a0: 40b78223 sb a1,1028(a5) # 801cbca0 <_ZL3chr> + 800128a4: f15ff06f j 800127b8 <_ZL13UNLSC127Writejh+0x70> + +00000000800128a8 <_ZL11UNLSC127IRQv>: + 800128a8: 001b9797 auipc a5,0x1b9 + 800128ac: 4087d783 lhu a5,1032(a5) # 801cbcb0 <_ZL4IRQa> + 800128b0: 02078663 beqz a5,800128dc <_ZL11UNLSC127IRQv+0x34> + 800128b4: 001b9717 auipc a4,0x1b9 + 800128b8: 40c70713 addi a4,a4,1036 # 801cbcc0 <_ZL8IRQCount> + 800128bc: 00075783 lhu a5,0(a4) + 800128c0: 02078063 beqz a5,800128e0 <_ZL11UNLSC127IRQv+0x38> + 800128c4: fff7879b addiw a5,a5,-1 + 800128c8: 03079793 slli a5,a5,0x30 + 800128cc: 0307d793 srli a5,a5,0x30 + 800128d0: 00f71023 sh a5,0(a4) + 800128d4: 00078663 beqz a5,800128e0 <_ZL11UNLSC127IRQv+0x38> + 800128d8: 00008067 ret + 800128dc: 00008067 ret + 800128e0: ff010113 addi sp,sp,-16 + 800128e4: 00100513 li a0,1 + 800128e8: 00113423 sd ra,8(sp) + 800128ec: c4cee0ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 800128f0: 00813083 ld ra,8(sp) + 800128f4: 001b9797 auipc a5,0x1b9 + 800128f8: 3a079e23 sh zero,956(a5) # 801cbcb0 <_ZL4IRQa> + 800128fc: 01010113 addi sp,sp,16 + 80012900: 00008067 ret + +0000000080012904 <_Z13UNLSC127_InitP8CartInfo>: + 80012904: fe010113 addi sp,sp,-32 + 80012908: 00113c23 sd ra,24(sp) + 8001290c: 00813823 sd s0,16(sp) + 80012910: 00913423 sd s1,8(sp) + 80012914: 00000797 auipc a5,0x0 + 80012918: d7c78793 addi a5,a5,-644 # 80012690 <_ZL13UNLSC127Powerv> + 8001291c: 00f53023 sd a5,0(a0) + 80012920: 00000797 auipc a5,0x0 + 80012924: c7478793 addi a5,a5,-908 # 80012594 <_ZL13UNLSC127Resetv> + 80012928: 00f53423 sd a5,8(a0) + 8001292c: 00000797 auipc a5,0x0 + 80012930: d2c78793 addi a5,a5,-724 # 80012658 <_ZL13UNLSC127Closev> + 80012934: 00f53823 sd a5,16(a0) + 80012938: 00000797 auipc a5,0x0 + 8001293c: f7078793 addi a5,a5,-144 # 800128a8 <_ZL11UNLSC127IRQv> + 80012940: 001ba717 auipc a4,0x1ba + 80012944: d8f73023 sd a5,-640(a4) # 801cc6c0 + 80012948: 00000797 auipc a5,0x0 + 8001294c: d0c78793 addi a5,a5,-756 # 80012654 <_ZL12StateRestorei> + 80012950: 001b9417 auipc s0,0x1b9 + 80012954: 37440413 addi s0,s0,884 # 801cbcc4 <_ZL8WRAMSIZE> + 80012958: 001ba717 auipc a4,0x1ba + 8001295c: d0f73023 sd a5,-768(a4) # 801cc658 + 80012960: 00002537 lui a0,0x2 + 80012964: 000027b7 lui a5,0x2 + 80012968: 00f42023 sw a5,0(s0) + 8001296c: b01ff0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80012970: 00042603 lw a2,0(s0) + 80012974: 00050593 mv a1,a0 + 80012978: 001b9497 auipc s1,0x1b9 + 8001297c: 34048493 addi s1,s1,832 # 801cbcb8 <_ZL4WRAM> + 80012980: 00100693 li a3,1 + 80012984: 01000513 li a0,16 + 80012988: 00b4b023 sd a1,0(s1) + 8001298c: b69fd0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80012990: 00042583 lw a1,0(s0) + 80012994: 0004b503 ld a0,0(s1) + 80012998: 00033697 auipc a3,0x33 + 8001299c: 99068693 addi a3,a3,-1648 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 800129a0: 00000613 li a2,0 + 800129a4: e6ced0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800129a8: 01013403 ld s0,16(sp) + 800129ac: 01813083 ld ra,24(sp) + 800129b0: 00813483 ld s1,8(sp) + 800129b4: 00000693 li a3,0 + 800129b8: 00000613 li a2,0 + 800129bc: fff00593 li a1,-1 + 800129c0: 00037517 auipc a0,0x37 + 800129c4: 79050513 addi a0,a0,1936 # 8004a150 <_ZL9StateRegs> + 800129c8: 02010113 addi sp,sp,32 + 800129cc: e44ed06f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800129d0 <_ZL10BandaiReadj>: + 800129d0: 00045517 auipc a0,0x45 + 800129d4: e9854503 lbu a0,-360(a0) # 80057868 + 800129d8: 001b9797 auipc a5,0x1b9 + 800129dc: 2f47c783 lbu a5,756(a5) # 801cbccc <_ZL10x24c0x_out> + 800129e0: 0047979b slliw a5,a5,0x4 + 800129e4: fef57513 andi a0,a0,-17 + 800129e8: 00f56533 or a0,a0,a5 + 800129ec: 0ff57513 andi a0,a0,255 + 800129f0: 00008067 ret + +00000000800129f4 <_ZL11BarcodeReadj>: + 800129f4: 001b9517 auipc a0,0x1b9 + 800129f8: 2d454503 lbu a0,724(a0) # 801cbcc8 <_ZL10BarcodeOut> + 800129fc: 00008067 ret + +0000000080012a00 <_ZL4Syncv>: + 80012a00: fd010113 addi sp,sp,-48 + 80012a04: 01313423 sd s3,8(sp) + 80012a08: 02113423 sd ra,40(sp) + 80012a0c: 000b2997 auipc s3,0xb2 + 80012a10: 59498993 addi s3,s3,1428 # 800c4fa0 <_ZL3reg> + 80012a14: 02813023 sd s0,32(sp) + 80012a18: 00913c23 sd s1,24(sp) + 80012a1c: 01213823 sd s2,16(sp) + 80012a20: 001b9797 auipc a5,0x1b9 + 80012a24: 2d07c783 lbu a5,720(a5) # 801cbcf0 <_ZL5is153> + 80012a28: 0009c583 lbu a1,0(s3) + 80012a2c: 08079863 bnez a5,80012abc <_ZL4Syncv+0xbc> + 80012a30: 00002937 lui s2,0x2 + 80012a34: 00098493 mv s1,s3 + 80012a38: 00000413 li s0,0 + 80012a3c: c0090913 addi s2,s2,-1024 # 1c00 <_entry_offset+0x1c00> + 80012a40: 00c0006f j 80012a4c <_ZL4Syncv+0x4c> + 80012a44: 0004c583 lbu a1,0(s1) + 80012a48: 4004041b addiw s0,s0,1024 + 80012a4c: 00040513 mv a0,s0 + 80012a50: c54fe0ef jal ra,80010ea4 <_Z7setchr1jj> + 80012a54: 00148493 addi s1,s1,1 + 80012a58: ff2416e3 bne s0,s2,80012a44 <_ZL4Syncv+0x44> + 80012a5c: 0089c583 lbu a1,8(s3) + 80012a60: 00008537 lui a0,0x8 + 80012a64: 9f4fe0ef jal ra,80010c58 <_Z8setprg16jj> + 80012a68: fff00593 li a1,-1 + 80012a6c: 0000c537 lui a0,0xc + 80012a70: 9e8fe0ef jal ra,80010c58 <_Z8setprg16jj> + 80012a74: 0099c783 lbu a5,9(s3) + 80012a78: 00200713 li a4,2 + 80012a7c: 00200513 li a0,2 + 80012a80: 0037f793 andi a5,a5,3 + 80012a84: 00e78e63 beq a5,a4,80012aa0 <_ZL4Syncv+0xa0> + 80012a88: 00300713 li a4,3 + 80012a8c: 00300513 li a0,3 + 80012a90: 00e78863 beq a5,a4,80012aa0 <_ZL4Syncv+0xa0> + 80012a94: 00100713 li a4,1 + 80012a98: 00100513 li a0,1 + 80012a9c: 04e78c63 beq a5,a4,80012af4 <_ZL4Syncv+0xf4> + 80012aa0: 02013403 ld s0,32(sp) + 80012aa4: 02813083 ld ra,40(sp) + 80012aa8: 01813483 ld s1,24(sp) + 80012aac: 01013903 ld s2,16(sp) + 80012ab0: 00813983 ld s3,8(sp) + 80012ab4: 03010113 addi sp,sp,48 + 80012ab8: d90fe06f j 80011048 <_Z9setmirrori> + 80012abc: 00000513 li a0,0 + 80012ac0: 0045941b slliw s0,a1,0x4 + 80012ac4: c40fe0ef jal ra,80010f04 <_Z7setchr8j> + 80012ac8: 0089c583 lbu a1,8(s3) + 80012acc: 01047413 andi s0,s0,16 + 80012ad0: 0004041b sext.w s0,s0 + 80012ad4: 00f5f593 andi a1,a1,15 + 80012ad8: 0085e5b3 or a1,a1,s0 + 80012adc: 00008537 lui a0,0x8 + 80012ae0: 978fe0ef jal ra,80010c58 <_Z8setprg16jj> + 80012ae4: 00f46593 ori a1,s0,15 + 80012ae8: 0000c537 lui a0,0xc + 80012aec: 96cfe0ef jal ra,80010c58 <_Z8setprg16jj> + 80012af0: f85ff06f j 80012a74 <_ZL4Syncv+0x74> + 80012af4: 02013403 ld s0,32(sp) + 80012af8: 02813083 ld ra,40(sp) + 80012afc: 01813483 ld s1,24(sp) + 80012b00: 01013903 ld s2,16(sp) + 80012b04: 00813983 ld s3,8(sp) + 80012b08: 00000513 li a0,0 + 80012b0c: 03010113 addi sp,sp,48 + 80012b10: d38fe06f j 80011048 <_Z9setmirrori> + +0000000080012b14 <_ZL12StateRestorei>: + 80012b14: eedff06f j 80012a00 <_ZL4Syncv> + +0000000080012b18 <_ZL11BandaiPowerv>: + 80012b18: ff010113 addi sp,sp,-16 + 80012b1c: 00113423 sd ra,8(sp) + 80012b20: 00813023 sd s0,0(sp) + 80012b24: 001b9797 auipc a5,0x1b9 + 80012b28: 1a078e23 sb zero,444(a5) # 801cbce0 <_ZL4IRQa> + 80012b2c: 001b9797 auipc a5,0x1b9 + 80012b30: 1c078823 sb zero,464(a5) # 801cbcfc <_ZL9x24c0x_oe> + 80012b34: 001b9797 auipc a5,0x1b9 + 80012b38: 18078ca3 sb zero,409(a5) # 801cbccd <_ZL10x24c0x_scl> + 80012b3c: 001b9797 auipc a5,0x1b9 + 80012b40: 18078923 sb zero,402(a5) # 801cbcce <_ZL10x24c0x_sda> + 80012b44: 001b9797 auipc a5,0x1b9 + 80012b48: 18078a23 sb zero,404(a5) # 801cbcd8 <_ZL15x24c0x_bitcount> + 80012b4c: 001b9797 auipc a5,0x1b9 + 80012b50: 180782a3 sb zero,389(a5) # 801cbcd1 <_ZL12x24c0x_latch> + 80012b54: 001b9797 auipc a5,0x1b9 + 80012b58: 16078e23 sb zero,380(a5) # 801cbcd0 <_ZL11x24c0x_word> + 80012b5c: 001b9797 auipc a5,0x1b9 + 80012b60: 160789a3 sb zero,371(a5) # 801cbccf <_ZL11x24c0x_addr> + 80012b64: 001b9797 auipc a5,0x1b9 + 80012b68: 16078723 sb zero,366(a5) # 801cbcd2 <_ZL12x24c0x_state> + 80012b6c: e95ff0ef jal ra,80012a00 <_ZL4Syncv> + 80012b70: 000085b7 lui a1,0x8 + 80012b74: 00000617 auipc a2,0x0 + 80012b78: e5c60613 addi a2,a2,-420 # 800129d0 <_ZL10BandaiReadj> + 80012b7c: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80012b80: 00006537 lui a0,0x6 + 80012b84: 699200ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80012b88: 00010437 lui s0,0x10 + 80012b8c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80012b90: ffffe617 auipc a2,0xffffe + 80012b94: ad060613 addi a2,a2,-1328 # 80010660 <_Z6CartBRj> + 80012b98: 00008537 lui a0,0x8 + 80012b9c: 681200ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80012ba0: fff40593 addi a1,s0,-1 + 80012ba4: 00013403 ld s0,0(sp) + 80012ba8: 00813083 ld ra,8(sp) + 80012bac: 00000617 auipc a2,0x0 + 80012bb0: 27860613 addi a2,a2,632 # 80012e24 <_ZL11BandaiWritejh> + 80012bb4: 00006537 lui a0,0x6 + 80012bb8: 01010113 addi sp,sp,16 + 80012bbc: 76d2006f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080012bc0 <_ZL9M157Powerv>: + 80012bc0: 001b9797 auipc a5,0x1b9 + 80012bc4: 12078023 sb zero,288(a5) # 801cbce0 <_ZL4IRQa> + 80012bc8: ff010113 addi sp,sp,-16 + 80012bcc: fff00793 li a5,-1 + 80012bd0: 00113423 sd ra,8(sp) + 80012bd4: 00813023 sd s0,0(sp) + 80012bd8: 000b2717 auipc a4,0xb2 + 80012bdc: 1cf70423 sb a5,456(a4) # 800c4da0 <_ZL11BarcodeData> + 80012be0: 00010437 lui s0,0x10 + 80012be4: 001b9797 auipc a5,0x1b9 + 80012be8: 0e07a823 sw zero,240(a5) # 801cbcd4 <_ZL14BarcodeReadPos> + 80012bec: 001b9797 auipc a5,0x1b9 + 80012bf0: 0c07ae23 sw zero,220(a5) # 801cbcc8 <_ZL10BarcodeOut> + 80012bf4: 001b9797 auipc a5,0x1b9 + 80012bf8: 0e07a423 sw zero,232(a5) # 801cbcdc <_ZL17BarcodeCycleCount> + 80012bfc: e05ff0ef jal ra,80012a00 <_ZL4Syncv> + 80012c00: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80012c04: 00000617 auipc a2,0x0 + 80012c08: 22060613 addi a2,a2,544 # 80012e24 <_ZL11BandaiWritejh> + 80012c0c: 00006537 lui a0,0x6 + 80012c10: 719200ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80012c14: 000085b7 lui a1,0x8 + 80012c18: 00000617 auipc a2,0x0 + 80012c1c: ddc60613 addi a2,a2,-548 # 800129f4 <_ZL11BarcodeReadj> + 80012c20: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80012c24: 00006537 lui a0,0x6 + 80012c28: 5f5200ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80012c2c: fff40593 addi a1,s0,-1 + 80012c30: 00013403 ld s0,0(sp) + 80012c34: 00813083 ld ra,8(sp) + 80012c38: ffffe617 auipc a2,0xffffe + 80012c3c: a2860613 addi a2,a2,-1496 # 80010660 <_Z6CartBRj> + 80012c40: 00008537 lui a0,0x8 + 80012c44: 01010113 addi sp,sp,16 + 80012c48: 5d52006f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080012c4c <_ZL9M153Closev>: + 80012c4c: 001b9517 auipc a0,0x1b9 + 80012c50: 09c53503 ld a0,156(a0) # 801cbce8 <_ZL4WRAM> + 80012c54: 02050263 beqz a0,80012c78 <_ZL9M153Closev+0x2c> + 80012c58: ff010113 addi sp,sp,-16 + 80012c5c: 00113423 sd ra,8(sp) + 80012c60: 8e1ff0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80012c64: 00813083 ld ra,8(sp) + 80012c68: 001b9797 auipc a5,0x1b9 + 80012c6c: 0807b023 sd zero,128(a5) # 801cbce8 <_ZL4WRAM> + 80012c70: 01010113 addi sp,sp,16 + 80012c74: 00008067 ret + 80012c78: 001b9797 auipc a5,0x1b9 + 80012c7c: 0607b823 sd zero,112(a5) # 801cbce8 <_ZL4WRAM> + 80012c80: 00008067 ret + +0000000080012c84 <_ZL9M153Powerv>: + 80012c84: ff010113 addi sp,sp,-16 + 80012c88: 00113423 sd ra,8(sp) + 80012c8c: 00813023 sd s0,0(sp) + 80012c90: d71ff0ef jal ra,80012a00 <_ZL4Syncv> + 80012c94: 00000613 li a2,0 + 80012c98: 000065b7 lui a1,0x6 + 80012c9c: 01000513 li a0,16 + 80012ca0: c49fd0ef jal ra,800108e8 <_Z8setprg8rijj> + 80012ca4: 00008437 lui s0,0x8 + 80012ca8: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 80012cac: ffffe617 auipc a2,0xffffe + 80012cb0: 9b460613 addi a2,a2,-1612 # 80010660 <_Z6CartBRj> + 80012cb4: 00006537 lui a0,0x6 + 80012cb8: 565200ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80012cbc: fff40593 addi a1,s0,-1 + 80012cc0: ffffe617 auipc a2,0xffffe + 80012cc4: 9cc60613 addi a2,a2,-1588 # 8001068c <_Z6CartBWjh> + 80012cc8: 00006537 lui a0,0x6 + 80012ccc: 65d200ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80012cd0: 00010437 lui s0,0x10 + 80012cd4: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80012cd8: ffffe617 auipc a2,0xffffe + 80012cdc: 98860613 addi a2,a2,-1656 # 80010660 <_Z6CartBRj> + 80012ce0: 00008537 lui a0,0x8 + 80012ce4: 539200ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80012ce8: fff40593 addi a1,s0,-1 + 80012cec: 00000617 auipc a2,0x0 + 80012cf0: 13860613 addi a2,a2,312 # 80012e24 <_ZL11BandaiWritejh> + 80012cf4: 00008537 lui a0,0x8 + 80012cf8: 631200ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80012cfc: 00013403 ld s0,0(sp) + 80012d00: 00813083 ld ra,8(sp) + 80012d04: 001b9517 auipc a0,0x1b9 + 80012d08: ff452503 lw a0,-12(a0) # 801cbcf8 <_ZL8WRAMSIZE> + 80012d0c: 001b9617 auipc a2,0x1b9 + 80012d10: fdc63603 ld a2,-36(a2) # 801cbce8 <_ZL4WRAM> + 80012d14: 000065b7 lui a1,0x6 + 80012d18: 00a5551b srliw a0,a0,0xa + 80012d1c: 01010113 addi sp,sp,16 + 80012d20: af4ed06f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +0000000080012d24 <_ZL14BarcodeIRQHooki>: + 80012d24: fe010113 addi sp,sp,-32 + 80012d28: 00813823 sd s0,16(sp) + 80012d2c: 00113c23 sd ra,24(sp) + 80012d30: 00913423 sd s1,8(sp) + 80012d34: 001b9797 auipc a5,0x1b9 + 80012d38: fac7c783 lbu a5,-84(a5) # 801cbce0 <_ZL4IRQa> + 80012d3c: 00050413 mv s0,a0 + 80012d40: 02078263 beqz a5,80012d64 <_ZL14BarcodeIRQHooki+0x40> + 80012d44: 001b9497 auipc s1,0x1b9 + 80012d48: fae48493 addi s1,s1,-82 # 801cbcf2 <_ZL8IRQCount> + 80012d4c: 0004d783 lhu a5,0(s1) + 80012d50: 40a787bb subw a5,a5,a0 + 80012d54: 0107979b slliw a5,a5,0x10 + 80012d58: 4107d79b sraiw a5,a5,0x10 + 80012d5c: 00f49023 sh a5,0(s1) + 80012d60: 0a07c463 bltz a5,80012e08 <_ZL14BarcodeIRQHooki+0xe4> + 80012d64: 001b9717 auipc a4,0x1b9 + 80012d68: f7870713 addi a4,a4,-136 # 801cbcdc <_ZL17BarcodeCycleCount> + 80012d6c: 00072783 lw a5,0(a4) + 80012d70: 3e700693 li a3,999 + 80012d74: 008787bb addw a5,a5,s0 + 80012d78: 00f6ce63 blt a3,a5,80012d94 <_ZL14BarcodeIRQHooki+0x70> + 80012d7c: 01813083 ld ra,24(sp) + 80012d80: 01013403 ld s0,16(sp) + 80012d84: 00f72023 sw a5,0(a4) + 80012d88: 00813483 ld s1,8(sp) + 80012d8c: 02010113 addi sp,sp,32 + 80012d90: 00008067 ret + 80012d94: 001b9617 auipc a2,0x1b9 + 80012d98: f4060613 addi a2,a2,-192 # 801cbcd4 <_ZL14BarcodeReadPos> + 80012d9c: 00062683 lw a3,0(a2) + 80012da0: c187851b addiw a0,a5,-1000 + 80012da4: 000b2797 auipc a5,0xb2 + 80012da8: ffc78793 addi a5,a5,-4 # 800c4da0 <_ZL11BarcodeData> + 80012dac: 00d787b3 add a5,a5,a3 + 80012db0: 0007c783 lbu a5,0(a5) + 80012db4: 00a72023 sw a0,0(a4) + 80012db8: 0ff00713 li a4,255 + 80012dbc: 02e78863 beq a5,a4,80012dec <_ZL14BarcodeIRQHooki+0xc8> + 80012dc0: 01813083 ld ra,24(sp) + 80012dc4: 01013403 ld s0,16(sp) + 80012dc8: 0017c793 xori a5,a5,1 + 80012dcc: 0037979b slliw a5,a5,0x3 + 80012dd0: 0016869b addiw a3,a3,1 + 80012dd4: 001b9717 auipc a4,0x1b9 + 80012dd8: eef72a23 sw a5,-268(a4) # 801cbcc8 <_ZL10BarcodeOut> + 80012ddc: 00d62023 sw a3,0(a2) + 80012de0: 00813483 ld s1,8(sp) + 80012de4: 02010113 addi sp,sp,32 + 80012de8: 00008067 ret + 80012dec: 01813083 ld ra,24(sp) + 80012df0: 01013403 ld s0,16(sp) + 80012df4: 001b9797 auipc a5,0x1b9 + 80012df8: ec07aa23 sw zero,-300(a5) # 801cbcc8 <_ZL10BarcodeOut> + 80012dfc: 00813483 ld s1,8(sp) + 80012e00: 02010113 addi sp,sp,32 + 80012e04: 00008067 ret + 80012e08: 00100513 li a0,1 + 80012e0c: f2ded0ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 80012e10: 001b9797 auipc a5,0x1b9 + 80012e14: ec078823 sb zero,-304(a5) # 801cbce0 <_ZL4IRQa> + 80012e18: fff00793 li a5,-1 + 80012e1c: 00f49023 sh a5,0(s1) + 80012e20: f45ff06f j 80012d64 <_ZL14BarcodeIRQHooki+0x40> + +0000000080012e24 <_ZL11BandaiWritejh>: + 80012e24: 00f57513 andi a0,a0,15 + 80012e28: 00900793 li a5,9 + 80012e2c: 10a7f863 bgeu a5,a0,80012f3c <_ZL11BandaiWritejh+0x118> + 80012e30: fe010113 addi sp,sp,-32 + 80012e34: 00113c23 sd ra,24(sp) + 80012e38: 00813823 sd s0,16(sp) + 80012e3c: 00c00793 li a5,12 + 80012e40: 14f50663 beq a0,a5,80012f8c <_ZL11BandaiWritejh+0x168> + 80012e44: 02a7e663 bltu a5,a0,80012e70 <_ZL11BandaiWritejh+0x4c> + 80012e48: 00a00793 li a5,10 + 80012e4c: 10f50263 beq a0,a5,80012f50 <_ZL11BandaiWritejh+0x12c> + 80012e50: 00b00793 li a5,11 + 80012e54: 00f51663 bne a0,a5,80012e60 <_ZL11BandaiWritejh+0x3c> + 80012e58: 001b9797 auipc a5,0x1b9 + 80012e5c: e8b78e23 sb a1,-356(a5) # 801cbcf4 <_ZL8IRQLatch> + 80012e60: 01813083 ld ra,24(sp) + 80012e64: 01013403 ld s0,16(sp) + 80012e68: 02010113 addi sp,sp,32 + 80012e6c: 00008067 ret + 80012e70: 00d00793 li a5,13 + 80012e74: fef516e3 bne a0,a5,80012e60 <_ZL11BandaiWritejh+0x3c> + 80012e78: 001b9617 auipc a2,0x1b9 + 80012e7c: e5560613 addi a2,a2,-427 # 801cbccd <_ZL10x24c0x_scl> + 80012e80: 0005871b sext.w a4,a1 + 80012e84: 00064683 lbu a3,0(a2) + 80012e88: 4077571b sraiw a4,a4,0x7 + 80012e8c: 0065d793 srli a5,a1,0x6 + 80012e90: 0055d413 srli s0,a1,0x5 + 80012e94: 001b9597 auipc a1,0x1b9 + 80012e98: e6e58423 sb a4,-408(a1) # 801cbcfc <_ZL9x24c0x_oe> + 80012e9c: 0017f793 andi a5,a5,1 + 80012ea0: 00147413 andi s0,s0,1 + 80012ea4: 001b9717 auipc a4,0x1b9 + 80012ea8: e2a70713 addi a4,a4,-470 # 801cbcce <_ZL10x24c0x_sda> + 80012eac: 10069463 bnez a3,80012fb4 <_ZL11BandaiWritejh+0x190> + 80012eb0: 06040a63 beqz s0,80012f24 <_ZL11BandaiWritejh+0x100> + 80012eb4: 001b9517 auipc a0,0x1b9 + 80012eb8: e1e50513 addi a0,a0,-482 # 801cbcd2 <_ZL12x24c0x_state> + 80012ebc: 00054683 lbu a3,0(a0) + 80012ec0: 00300593 li a1,3 + 80012ec4: 1eb68663 beq a3,a1,800130b0 <_ZL11BandaiWritejh+0x28c> + 80012ec8: 10d5e463 bltu a1,a3,80012fd0 <_ZL11BandaiWritejh+0x1ac> + 80012ecc: 00100713 li a4,1 + 80012ed0: 1ae68063 beq a3,a4,80013070 <_ZL11BandaiWritejh+0x24c> + 80012ed4: 00200713 li a4,2 + 80012ed8: 04e69263 bne a3,a4,80012f1c <_ZL11BandaiWritejh+0xf8> + 80012edc: 001b9717 auipc a4,0x1b9 + 80012ee0: dfc70713 addi a4,a4,-516 # 801cbcd8 <_ZL15x24c0x_bitcount> + 80012ee4: 00074683 lbu a3,0(a4) + 80012ee8: 00800593 li a1,8 + 80012eec: 24b68663 beq a3,a1,80013138 <_ZL11BandaiWritejh+0x314> + 80012ef0: 001b9817 auipc a6,0x1b9 + 80012ef4: de080813 addi a6,a6,-544 # 801cbcd0 <_ZL11x24c0x_word> + 80012ef8: 00084583 lbu a1,0(a6) + 80012efc: 01000893 li a7,16 + 80012f00: 0015959b slliw a1,a1,0x1 + 80012f04: 00b7e5b3 or a1,a5,a1 + 80012f08: 00b80023 sb a1,0(a6) + 80012f0c: 2b168e63 beq a3,a7,800131c8 <_ZL11BandaiWritejh+0x3a4> + 80012f10: 0016869b addiw a3,a3,1 + 80012f14: 0ff6f693 andi a3,a3,255 + 80012f18: 00d70023 sb a3,0(a4) + 80012f1c: 001b9717 auipc a4,0x1b9 + 80012f20: db270713 addi a4,a4,-590 # 801cbcce <_ZL10x24c0x_sda> + 80012f24: 00f70023 sb a5,0(a4) + 80012f28: 00860023 sb s0,0(a2) + 80012f2c: 01813083 ld ra,24(sp) + 80012f30: 01013403 ld s0,16(sp) + 80012f34: 02010113 addi sp,sp,32 + 80012f38: 00008067 ret + 80012f3c: 000b2797 auipc a5,0xb2 + 80012f40: 06478793 addi a5,a5,100 # 800c4fa0 <_ZL3reg> + 80012f44: 00a78533 add a0,a5,a0 + 80012f48: 00b50023 sb a1,0(a0) + 80012f4c: ab5ff06f j 80012a00 <_ZL4Syncv> + 80012f50: 00100513 li a0,1 + 80012f54: 00b13423 sd a1,8(sp) + 80012f58: df9ed0ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 80012f5c: 00813583 ld a1,8(sp) + 80012f60: 01813083 ld ra,24(sp) + 80012f64: 0015f413 andi s0,a1,1 + 80012f68: 001b9797 auipc a5,0x1b9 + 80012f6c: d6878c23 sb s0,-648(a5) # 801cbce0 <_ZL4IRQa> + 80012f70: 01013403 ld s0,16(sp) + 80012f74: 001b9797 auipc a5,0x1b9 + 80012f78: d807d783 lhu a5,-640(a5) # 801cbcf4 <_ZL8IRQLatch> + 80012f7c: 001b9717 auipc a4,0x1b9 + 80012f80: d6f71b23 sh a5,-650(a4) # 801cbcf2 <_ZL8IRQCount> + 80012f84: 02010113 addi sp,sp,32 + 80012f88: 00008067 ret + 80012f8c: 001b9717 auipc a4,0x1b9 + 80012f90: d6870713 addi a4,a4,-664 # 801cbcf4 <_ZL8IRQLatch> + 80012f94: 00074783 lbu a5,0(a4) + 80012f98: 00859413 slli s0,a1,0x8 + 80012f9c: 01813083 ld ra,24(sp) + 80012fa0: 0087e433 or s0,a5,s0 + 80012fa4: 00871023 sh s0,0(a4) + 80012fa8: 01013403 ld s0,16(sp) + 80012fac: 02010113 addi sp,sp,32 + 80012fb0: 00008067 ret + 80012fb4: f60408e3 beqz s0,80012f24 <_ZL11BandaiWritejh+0x100> + 80012fb8: 00074683 lbu a3,0(a4) + 80012fbc: 08069863 bnez a3,8001304c <_ZL11BandaiWritejh+0x228> + 80012fc0: f60782e3 beqz a5,80012f24 <_ZL11BandaiWritejh+0x100> + 80012fc4: 001b9697 auipc a3,0x1b9 + 80012fc8: d0068723 sb zero,-754(a3) # 801cbcd2 <_ZL12x24c0x_state> + 80012fcc: f59ff06f j 80012f24 <_ZL11BandaiWritejh+0x100> + 80012fd0: 00400593 li a1,4 + 80012fd4: f4b698e3 bne a3,a1,80012f24 <_ZL11BandaiWritejh+0x100> + 80012fd8: 001b9717 auipc a4,0x1b9 + 80012fdc: d0070713 addi a4,a4,-768 # 801cbcd8 <_ZL15x24c0x_bitcount> + 80012fe0: 00074683 lbu a3,0(a4) + 80012fe4: 00800593 li a1,8 + 80012fe8: 16b68663 beq a3,a1,80013154 <_ZL11BandaiWritejh+0x330> + 80012fec: 001b9517 auipc a0,0x1b9 + 80012ff0: ce550513 addi a0,a0,-795 # 801cbcd1 <_ZL12x24c0x_latch> + 80012ff4: 00054583 lbu a1,0(a0) + 80012ff8: 0016869b addiw a3,a3,1 + 80012ffc: 0ff6f693 andi a3,a3,255 + 80013000: 0015959b slliw a1,a1,0x1 + 80013004: 00b7e5b3 or a1,a5,a1 + 80013008: 0ff5f593 andi a1,a1,255 + 8001300c: 00b50023 sb a1,0(a0) + 80013010: 00d70023 sb a3,0(a4) + 80013014: 00800513 li a0,8 + 80013018: 001b9717 auipc a4,0x1b9 + 8001301c: cb670713 addi a4,a4,-842 # 801cbcce <_ZL10x24c0x_sda> + 80013020: f0a692e3 bne a3,a0,80012f24 <_ZL11BandaiWritejh+0x100> + 80013024: 001b9817 auipc a6,0x1b9 + 80013028: cac80813 addi a6,a6,-852 # 801cbcd0 <_ZL11x24c0x_word> + 8001302c: 00084683 lbu a3,0(a6) + 80013030: 000b2517 auipc a0,0xb2 + 80013034: e7050513 addi a0,a0,-400 # 800c4ea0 <_ZL11x24c0x_data> + 80013038: 00d50533 add a0,a0,a3 + 8001303c: 0016869b addiw a3,a3,1 + 80013040: 00b50023 sb a1,0(a0) + 80013044: 00d80023 sb a3,0(a6) + 80013048: eddff06f j 80012f24 <_ZL11BandaiWritejh+0x100> + 8001304c: ec079ce3 bnez a5,80012f24 <_ZL11BandaiWritejh+0x100> + 80013050: 00100693 li a3,1 + 80013054: 001b9597 auipc a1,0x1b9 + 80013058: c6d58f23 sb a3,-898(a1) # 801cbcd2 <_ZL12x24c0x_state> + 8001305c: 001b9697 auipc a3,0x1b9 + 80013060: c6068e23 sb zero,-900(a3) # 801cbcd8 <_ZL15x24c0x_bitcount> + 80013064: 001b9697 auipc a3,0x1b9 + 80013068: c60685a3 sb zero,-917(a3) # 801cbccf <_ZL11x24c0x_addr> + 8001306c: eb9ff06f j 80012f24 <_ZL11BandaiWritejh+0x100> + 80013070: 001b9717 auipc a4,0x1b9 + 80013074: c6870713 addi a4,a4,-920 # 801cbcd8 <_ZL15x24c0x_bitcount> + 80013078: 00074683 lbu a3,0(a4) + 8001307c: 00600593 li a1,6 + 80013080: 08d5e663 bltu a1,a3,8001310c <_ZL11BandaiWritejh+0x2e8> + 80013084: 001b9517 auipc a0,0x1b9 + 80013088: c4b50513 addi a0,a0,-949 # 801cbccf <_ZL11x24c0x_addr> + 8001308c: 00054583 lbu a1,0(a0) + 80013090: 0015959b slliw a1,a1,0x1 + 80013094: 00b7e5b3 or a1,a5,a1 + 80013098: 00b50023 sb a1,0(a0) + 8001309c: 0016869b addiw a3,a3,1 + 800130a0: 00d70023 sb a3,0(a4) + 800130a4: 001b9717 auipc a4,0x1b9 + 800130a8: c2a70713 addi a4,a4,-982 # 801cbcce <_ZL10x24c0x_sda> + 800130ac: e79ff06f j 80012f24 <_ZL11BandaiWritejh+0x100> + 800130b0: 001b9817 auipc a6,0x1b9 + 800130b4: c2880813 addi a6,a6,-984 # 801cbcd8 <_ZL15x24c0x_bitcount> + 800130b8: 00084683 lbu a3,0(a6) + 800130bc: 00800513 li a0,8 + 800130c0: 0aa68c63 beq a3,a0,80013178 <_ZL11BandaiWritejh+0x354> + 800130c4: 001b9897 auipc a7,0x1b9 + 800130c8: c0d88893 addi a7,a7,-1011 # 801cbcd1 <_ZL12x24c0x_latch> + 800130cc: 0008c583 lbu a1,0(a7) + 800130d0: 0016869b addiw a3,a3,1 + 800130d4: 0ff6f693 andi a3,a3,255 + 800130d8: 4075d31b sraiw t1,a1,0x7 + 800130dc: 0015959b slliw a1,a1,0x1 + 800130e0: 001b9e17 auipc t3,0x1b9 + 800130e4: be6e0623 sb t1,-1044(t3) # 801cbccc <_ZL10x24c0x_out> + 800130e8: 00b88023 sb a1,0(a7) + 800130ec: 00d80023 sb a3,0(a6) + 800130f0: e2a69ae3 bne a3,a0,80012f24 <_ZL11BandaiWritejh+0x100> + 800130f4: 001b9597 auipc a1,0x1b9 + 800130f8: bdc58593 addi a1,a1,-1060 # 801cbcd0 <_ZL11x24c0x_word> + 800130fc: 0005c683 lbu a3,0(a1) + 80013100: 0016869b addiw a3,a3,1 + 80013104: 00d58023 sb a3,0(a1) + 80013108: e1dff06f j 80012f24 <_ZL11BandaiWritejh+0x100> + 8001310c: 001b9597 auipc a1,0x1b9 + 80013110: be55c583 lbu a1,-1051(a1) # 801cbcf1 <_ZL6x24c02> + 80013114: 0a059263 bnez a1,800131b8 <_ZL11BandaiWritejh+0x394> + 80013118: 001b9597 auipc a1,0x1b9 + 8001311c: bb75c583 lbu a1,-1097(a1) # 801cbccf <_ZL11x24c0x_addr> + 80013120: 001b9817 auipc a6,0x1b9 + 80013124: bab80823 sb a1,-1104(a6) # 801cbcd0 <_ZL11x24c0x_word> + 80013128: 08079263 bnez a5,800131ac <_ZL11BandaiWritejh+0x388> + 8001312c: 00400593 li a1,4 + 80013130: 00b50023 sb a1,0(a0) + 80013134: f69ff06f j 8001309c <_ZL11BandaiWritejh+0x278> + 80013138: 001b9697 auipc a3,0x1b9 + 8001313c: b8068c23 sb zero,-1128(a3) # 801cbcd0 <_ZL11x24c0x_word> + 80013140: 001b9697 auipc a3,0x1b9 + 80013144: b8068623 sb zero,-1140(a3) # 801cbccc <_ZL10x24c0x_out> + 80013148: 00900693 li a3,9 + 8001314c: 00d70023 sb a3,0(a4) + 80013150: dcdff06f j 80012f1c <_ZL11BandaiWritejh+0xf8> + 80013154: 001b9717 auipc a4,0x1b9 + 80013158: b6070c23 sb zero,-1160(a4) # 801cbccc <_ZL10x24c0x_out> + 8001315c: 001b9717 auipc a4,0x1b9 + 80013160: b6070aa3 sb zero,-1163(a4) # 801cbcd1 <_ZL12x24c0x_latch> + 80013164: 001b9717 auipc a4,0x1b9 + 80013168: b6070a23 sb zero,-1164(a4) # 801cbcd8 <_ZL15x24c0x_bitcount> + 8001316c: 001b9717 auipc a4,0x1b9 + 80013170: b6270713 addi a4,a4,-1182 # 801cbcce <_ZL10x24c0x_sda> + 80013174: db1ff06f j 80012f24 <_ZL11BandaiWritejh+0x100> + 80013178: 001b9597 auipc a1,0x1b9 + 8001317c: b585c583 lbu a1,-1192(a1) # 801cbcd0 <_ZL11x24c0x_word> + 80013180: 000b2697 auipc a3,0xb2 + 80013184: d2068693 addi a3,a3,-736 # 800c4ea0 <_ZL11x24c0x_data> + 80013188: 00b686b3 add a3,a3,a1 + 8001318c: 0006c683 lbu a3,0(a3) + 80013190: 001b9597 auipc a1,0x1b9 + 80013194: b2058e23 sb zero,-1220(a1) # 801cbccc <_ZL10x24c0x_out> + 80013198: 001b9597 auipc a1,0x1b9 + 8001319c: b4058023 sb zero,-1216(a1) # 801cbcd8 <_ZL15x24c0x_bitcount> + 800131a0: 001b9597 auipc a1,0x1b9 + 800131a4: b2d588a3 sb a3,-1231(a1) # 801cbcd1 <_ZL12x24c0x_latch> + 800131a8: d7dff06f j 80012f24 <_ZL11BandaiWritejh+0x100> + 800131ac: 00300593 li a1,3 + 800131b0: 00b50023 sb a1,0(a0) + 800131b4: ee9ff06f j 8001309c <_ZL11BandaiWritejh+0x278> + 800131b8: fe079ae3 bnez a5,800131ac <_ZL11BandaiWritejh+0x388> + 800131bc: 00200593 li a1,2 + 800131c0: 00b50023 sb a1,0(a0) + 800131c4: ed9ff06f j 8001309c <_ZL11BandaiWritejh+0x278> + 800131c8: 00400693 li a3,4 + 800131cc: 00d50023 sb a3,0(a0) + 800131d0: 00800693 li a3,8 + 800131d4: 00d70023 sb a3,0(a4) + 800131d8: d45ff06f j 80012f1c <_ZL11BandaiWritejh+0xf8> + +00000000800131dc <_ZL13BandaiIRQHooki>: + 800131dc: 001b9797 auipc a5,0x1b9 + 800131e0: b047c783 lbu a5,-1276(a5) # 801cbce0 <_ZL4IRQa> + 800131e4: 04078063 beqz a5,80013224 <_ZL13BandaiIRQHooki+0x48> + 800131e8: ff010113 addi sp,sp,-16 + 800131ec: 00813023 sd s0,0(sp) + 800131f0: 001b9417 auipc s0,0x1b9 + 800131f4: b0240413 addi s0,s0,-1278 # 801cbcf2 <_ZL8IRQCount> + 800131f8: 00045783 lhu a5,0(s0) + 800131fc: 00113423 sd ra,8(sp) + 80013200: 40a7853b subw a0,a5,a0 + 80013204: 0105151b slliw a0,a0,0x10 + 80013208: 4105551b sraiw a0,a0,0x10 + 8001320c: 00a41023 sh a0,0(s0) + 80013210: 00054c63 bltz a0,80013228 <_ZL13BandaiIRQHooki+0x4c> + 80013214: 00813083 ld ra,8(sp) + 80013218: 00013403 ld s0,0(sp) + 8001321c: 01010113 addi sp,sp,16 + 80013220: 00008067 ret + 80013224: 00008067 ret + 80013228: 00100513 li a0,1 + 8001322c: b0ded0ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 80013230: 001b9797 auipc a5,0x1b9 + 80013234: aa078823 sb zero,-1360(a5) # 801cbce0 <_ZL4IRQa> + 80013238: fff00793 li a5,-1 + 8001323c: 00813083 ld ra,8(sp) + 80013240: 00f41023 sh a5,0(s0) + 80013244: 00013403 ld s0,0(sp) + 80013248: 01010113 addi sp,sp,16 + 8001324c: 00008067 ret + +0000000080013250 <_Z13Mapper16_InitP8CartInfo>: + 80013250: ff010113 addi sp,sp,-16 + 80013254: 00113423 sd ra,8(sp) + 80013258: 00050793 mv a5,a0 + 8001325c: 00000717 auipc a4,0x0 + 80013260: 8bc70713 addi a4,a4,-1860 # 80012b18 <_ZL11BandaiPowerv> + 80013264: 00e7b023 sd a4,0(a5) + 80013268: 00100713 li a4,1 + 8001326c: 000b2517 auipc a0,0xb2 + 80013270: c3450513 addi a0,a0,-972 # 800c4ea0 <_ZL11x24c0x_data> + 80013274: 04e7a623 sw a4,76(a5) + 80013278: 10000713 li a4,256 + 8001327c: 02e7ac23 sw a4,56(a5) + 80013280: 00a7bc23 sd a0,24(a5) + 80013284: 00100793 li a5,1 + 80013288: 001b9717 auipc a4,0x1b9 + 8001328c: a6f704a3 sb a5,-1431(a4) # 801cbcf1 <_ZL6x24c02> + 80013290: 001b9797 auipc a5,0x1b9 + 80013294: a6078023 sb zero,-1440(a5) # 801cbcf0 <_ZL5is153> + 80013298: 00000797 auipc a5,0x0 + 8001329c: f4478793 addi a5,a5,-188 # 800131dc <_ZL13BandaiIRQHooki> + 800132a0: 00032697 auipc a3,0x32 + 800132a4: 0b068693 addi a3,a3,176 # 80045350 <_ZZL8SetInputvE3moo+0x500> + 800132a8: 00000613 li a2,0 + 800132ac: 10000593 li a1,256 + 800132b0: 001b9717 auipc a4,0x1b9 + 800132b4: 88f73823 sd a5,-1904(a4) # 801cbb40 + 800132b8: d59ec0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800132bc: 00000693 li a3,0 + 800132c0: 00000613 li a2,0 + 800132c4: fff00593 li a1,-1 + 800132c8: 00039517 auipc a0,0x39 + 800132cc: 3c050513 addi a0,a0,960 # 8004c688 <_ZL15x24c0xStateRegs> + 800132d0: 00000797 auipc a5,0x0 + 800132d4: 84478793 addi a5,a5,-1980 # 80012b14 <_ZL12StateRestorei> + 800132d8: 001b9717 auipc a4,0x1b9 + 800132dc: 38f73023 sd a5,896(a4) # 801cc658 + 800132e0: d31ec0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800132e4: 00813083 ld ra,8(sp) + 800132e8: 00000693 li a3,0 + 800132ec: 00000613 li a2,0 + 800132f0: fff00593 li a1,-1 + 800132f4: 00037517 auipc a0,0x37 + 800132f8: ed450513 addi a0,a0,-300 # 8004a1c8 <_ZL9StateRegs> + 800132fc: 01010113 addi sp,sp,16 + 80013300: d11ec06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080013304 <_Z14Mapper159_InitP8CartInfo>: + 80013304: ff010113 addi sp,sp,-16 + 80013308: 00113423 sd ra,8(sp) + 8001330c: 00050793 mv a5,a0 + 80013310: 00000717 auipc a4,0x0 + 80013314: 80870713 addi a4,a4,-2040 # 80012b18 <_ZL11BandaiPowerv> + 80013318: 00e7b023 sd a4,0(a5) + 8001331c: 00100713 li a4,1 + 80013320: 04e7a623 sw a4,76(a5) + 80013324: 000b2517 auipc a0,0xb2 + 80013328: b7c50513 addi a0,a0,-1156 # 800c4ea0 <_ZL11x24c0x_data> + 8001332c: 08000713 li a4,128 + 80013330: 02e7ac23 sw a4,56(a5) + 80013334: 00a7bc23 sd a0,24(a5) + 80013338: 001b9797 auipc a5,0x1b9 + 8001333c: 9a078ca3 sb zero,-1607(a5) # 801cbcf1 <_ZL6x24c02> + 80013340: 001b9797 auipc a5,0x1b9 + 80013344: 9a078823 sb zero,-1616(a5) # 801cbcf0 <_ZL5is153> + 80013348: 00000797 auipc a5,0x0 + 8001334c: e9478793 addi a5,a5,-364 # 800131dc <_ZL13BandaiIRQHooki> + 80013350: 00032697 auipc a3,0x32 + 80013354: 00068693 mv a3,a3 + 80013358: 00000613 li a2,0 + 8001335c: 08000593 li a1,128 + 80013360: 001b8717 auipc a4,0x1b8 + 80013364: 7ef73023 sd a5,2016(a4) # 801cbb40 + 80013368: ca9ec0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001336c: 00000693 li a3,0 + 80013370: 00000613 li a2,0 + 80013374: fff00593 li a1,-1 + 80013378: 00039517 auipc a0,0x39 + 8001337c: 31050513 addi a0,a0,784 # 8004c688 <_ZL15x24c0xStateRegs> + 80013380: fffff797 auipc a5,0xfffff + 80013384: 79478793 addi a5,a5,1940 # 80012b14 <_ZL12StateRestorei> + 80013388: 001b9717 auipc a4,0x1b9 + 8001338c: 2cf73823 sd a5,720(a4) # 801cc658 + 80013390: c81ec0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80013394: 00813083 ld ra,8(sp) + 80013398: 00000693 li a3,0 + 8001339c: 00000613 li a2,0 + 800133a0: fff00593 li a1,-1 + 800133a4: 00037517 auipc a0,0x37 + 800133a8: e2450513 addi a0,a0,-476 # 8004a1c8 <_ZL9StateRegs> + 800133ac: 01010113 addi sp,sp,16 + 800133b0: c61ec06f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800133b4 <_Z14Mapper153_InitP8CartInfo>: + 800133b4: fe010113 addi sp,sp,-32 + 800133b8: 00113c23 sd ra,24(sp) + 800133bc: 00813823 sd s0,16(sp) + 800133c0: 00913423 sd s1,8(sp) + 800133c4: 01213023 sd s2,0(sp) + 800133c8: 00000797 auipc a5,0x0 + 800133cc: 8bc78793 addi a5,a5,-1860 # 80012c84 <_ZL9M153Powerv> + 800133d0: 00f53023 sd a5,0(a0) + 800133d4: 00000797 auipc a5,0x0 + 800133d8: 87878793 addi a5,a5,-1928 # 80012c4c <_ZL9M153Closev> + 800133dc: 00f53823 sd a5,16(a0) + 800133e0: 00100793 li a5,1 + 800133e4: 001b9717 auipc a4,0x1b9 + 800133e8: 90f70623 sb a5,-1780(a4) # 801cbcf0 <_ZL5is153> + 800133ec: 00000797 auipc a5,0x0 + 800133f0: df078793 addi a5,a5,-528 # 800131dc <_ZL13BandaiIRQHooki> + 800133f4: 001b9497 auipc s1,0x1b9 + 800133f8: 90448493 addi s1,s1,-1788 # 801cbcf8 <_ZL8WRAMSIZE> + 800133fc: 00050413 mv s0,a0 + 80013400: 001b8717 auipc a4,0x1b8 + 80013404: 74f73023 sd a5,1856(a4) # 801cbb40 + 80013408: 00002537 lui a0,0x2 + 8001340c: 000027b7 lui a5,0x2 + 80013410: 00f4a023 sw a5,0(s1) + 80013414: 858ff0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80013418: 0004a603 lw a2,0(s1) + 8001341c: 00050593 mv a1,a0 + 80013420: 001b9917 auipc s2,0x1b9 + 80013424: 8c890913 addi s2,s2,-1848 # 801cbce8 <_ZL4WRAM> + 80013428: 00100693 li a3,1 + 8001342c: 01000513 li a0,16 + 80013430: 00b93023 sd a1,0(s2) + 80013434: 8c0fd0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80013438: 0004a583 lw a1,0(s1) + 8001343c: 00093503 ld a0,0(s2) + 80013440: 00032697 auipc a3,0x32 + 80013444: ee868693 addi a3,a3,-280 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80013448: 00000613 li a2,0 + 8001344c: bc5ec0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80013450: 04c42783 lw a5,76(s0) + 80013454: 00078a63 beqz a5,80013468 <_Z14Mapper153_InitP8CartInfo+0xb4> + 80013458: 00093703 ld a4,0(s2) + 8001345c: 0004a783 lw a5,0(s1) + 80013460: 00e43c23 sd a4,24(s0) + 80013464: 02f42c23 sw a5,56(s0) + 80013468: 01013403 ld s0,16(sp) + 8001346c: 01813083 ld ra,24(sp) + 80013470: 00813483 ld s1,8(sp) + 80013474: 00013903 ld s2,0(sp) + 80013478: fffff797 auipc a5,0xfffff + 8001347c: 69c78793 addi a5,a5,1692 # 80012b14 <_ZL12StateRestorei> + 80013480: 001b9717 auipc a4,0x1b9 + 80013484: 1cf73c23 sd a5,472(a4) # 801cc658 + 80013488: 00000693 li a3,0 + 8001348c: 00000613 li a2,0 + 80013490: fff00593 li a1,-1 + 80013494: 00037517 auipc a0,0x37 + 80013498: d3450513 addi a0,a0,-716 # 8004a1c8 <_ZL9StateRegs> + 8001349c: 02010113 addi sp,sp,32 + 800134a0: b71ec06f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800134a4 <_Z14Mapper157_InitP8CartInfo>: + 800134a4: fffff797 auipc a5,0xfffff + 800134a8: 71c78793 addi a5,a5,1820 # 80012bc0 <_ZL9M157Powerv> + 800134ac: 00f53023 sd a5,0(a0) + 800134b0: 00100713 li a4,1 + 800134b4: 001b9797 auipc a5,0x1b9 + 800134b8: 1947b783 ld a5,404(a5) # 801cc648 + 800134bc: 02e7a023 sw a4,32(a5) + 800134c0: 00100793 li a5,1 + 800134c4: 001b9717 auipc a4,0x1b9 + 800134c8: 82f70623 sb a5,-2004(a4) # 801cbcf0 <_ZL5is153> + 800134cc: 00000797 auipc a5,0x0 + 800134d0: 85878793 addi a5,a5,-1960 # 80012d24 <_ZL14BarcodeIRQHooki> + 800134d4: 001b8717 auipc a4,0x1b8 + 800134d8: 66f73623 sd a5,1644(a4) # 801cbb40 + 800134dc: fffff797 auipc a5,0xfffff + 800134e0: 63878793 addi a5,a5,1592 # 80012b14 <_ZL12StateRestorei> + 800134e4: 00000693 li a3,0 + 800134e8: 00000613 li a2,0 + 800134ec: fff00593 li a1,-1 + 800134f0: 00037517 auipc a0,0x37 + 800134f4: cd850513 addi a0,a0,-808 # 8004a1c8 <_ZL9StateRegs> + 800134f8: 001b9717 auipc a4,0x1b9 + 800134fc: 16f73023 sd a5,352(a4) # 801cc658 + 80013500: b11ec06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080013504 <_ZL4Syncv>: + 80013504: fd010113 addi sp,sp,-48 + 80013508: 01413023 sd s4,0(sp) + 8001350c: 001b8a17 auipc s4,0x1b8 + 80013510: 7fca0a13 addi s4,s4,2044 # 801cbd08 <_ZL4ctrl> + 80013514: 02813023 sd s0,32(sp) + 80013518: 000a4403 lbu s0,0(s4) + 8001351c: 00913c23 sd s1,24(sp) + 80013520: 000b2497 auipc s1,0xb2 + 80013524: a9048493 addi s1,s1,-1392 # 800c4fb0 <_ZL4regs> + 80013528: 01313423 sd s3,8(sp) + 8001352c: 0004c583 lbu a1,0(s1) + 80013530: 000019b7 lui s3,0x1 + 80013534: 00b4141b slliw s0,s0,0xb + 80013538: 01347433 and s0,s0,s3 + 8001353c: 0004041b sext.w s0,s0 + 80013540: 00040513 mv a0,s0 + 80013544: 0015d593 srli a1,a1,0x1 + 80013548: 02113423 sd ra,40(sp) + 8001354c: 01213823 sd s2,16(sp) + 80013550: 975fd0ef jal ra,80010ec4 <_Z7setchr2jj> + 80013554: 0014c583 lbu a1,1(s1) + 80013558: 00001937 lui s2,0x1 + 8001355c: 80090513 addi a0,s2,-2048 # 800 <_entry_offset+0x800> + 80013560: 00a44533 xor a0,s0,a0 + 80013564: 0015d593 srli a1,a1,0x1 + 80013568: 95dfd0ef jal ra,80010ec4 <_Z7setchr2jj> + 8001356c: 0024c583 lbu a1,2(s1) + 80013570: 01344533 xor a0,s0,s3 + 80013574: 0005051b sext.w a0,a0 + 80013578: 92dfd0ef jal ra,80010ea4 <_Z7setchr1jj> + 8001357c: 0034c583 lbu a1,3(s1) + 80013580: 40090513 addi a0,s2,1024 + 80013584: 00a44533 xor a0,s0,a0 + 80013588: 91dfd0ef jal ra,80010ea4 <_Z7setchr1jj> + 8001358c: 0044c583 lbu a1,4(s1) + 80013590: 00002937 lui s2,0x2 + 80013594: 80090513 addi a0,s2,-2048 # 1800 <_entry_offset+0x1800> + 80013598: 00a44533 xor a0,s0,a0 + 8001359c: 909fd0ef jal ra,80010ea4 <_Z7setchr1jj> + 800135a0: 0054c583 lbu a1,5(s1) + 800135a4: c0090513 addi a0,s2,-1024 + 800135a8: 00a44533 xor a0,s0,a0 + 800135ac: 8f9fd0ef jal ra,80010ea4 <_Z7setchr1jj> + 800135b0: 00000613 li a2,0 + 800135b4: 000065b7 lui a1,0x6 + 800135b8: 01000513 li a0,16 + 800135bc: b2cfd0ef jal ra,800108e8 <_Z8setprg8rijj> + 800135c0: 0064c583 lbu a1,6(s1) + 800135c4: 00008537 lui a0,0x8 + 800135c8: cd4fd0ef jal ra,80010a9c <_Z7setprg8jj> + 800135cc: 0074c583 lbu a1,7(s1) + 800135d0: 0000a537 lui a0,0xa + 800135d4: cc8fd0ef jal ra,80010a9c <_Z7setprg8jj> + 800135d8: 0084c583 lbu a1,8(s1) + 800135dc: 0000c537 lui a0,0xc + 800135e0: cbcfd0ef jal ra,80010a9c <_Z7setprg8jj> + 800135e4: 0000e537 lui a0,0xe + 800135e8: fff00593 li a1,-1 + 800135ec: cb0fd0ef jal ra,80010a9c <_Z7setprg8jj> + 800135f0: 000a4503 lbu a0,0(s4) + 800135f4: 02013403 ld s0,32(sp) + 800135f8: 02813083 ld ra,40(sp) + 800135fc: 01813483 ld s1,24(sp) + 80013600: 01013903 ld s2,16(sp) + 80013604: 00813983 ld s3,8(sp) + 80013608: 00013a03 ld s4,0(sp) + 8001360c: 00157513 andi a0,a0,1 + 80013610: 03010113 addi sp,sp,48 + 80013614: a35fd06f j 80011048 <_Z9setmirrori> + +0000000080013618 <_ZL12StateRestorei>: + 80013618: eedff06f j 80013504 <_ZL4Syncv> + +000000008001361c <_ZL8M82Writejh>: + 8001361c: 000087b7 lui a5,0x8 + 80013620: ef578713 addi a4,a5,-267 # 7ef5 <_entry_offset+0x7ef5> + 80013624: 00a76e63 bltu a4,a0,80013640 <_ZL8M82Writejh+0x24> + 80013628: 00757513 andi a0,a0,7 + 8001362c: 000b2797 auipc a5,0xb2 + 80013630: 98478793 addi a5,a5,-1660 # 800c4fb0 <_ZL4regs> + 80013634: 00a78533 add a0,a5,a0 + 80013638: 00b50023 sb a1,0(a0) # e000 <_entry_offset+0xe000> + 8001363c: ec9ff06f j 80013504 <_ZL4Syncv> + 80013640: efb78713 addi a4,a5,-261 + 80013644: 04e50863 beq a0,a4,80013694 <_ZL8M82Writejh+0x78> + 80013648: 02a76263 bltu a4,a0,8001366c <_ZL8M82Writejh+0x50> + 8001364c: ef678713 addi a4,a5,-266 + 80013650: 02e50a63 beq a0,a4,80013684 <_ZL8M82Writejh+0x68> + 80013654: efa78793 addi a5,a5,-262 + 80013658: fef512e3 bne a0,a5,8001363c <_ZL8M82Writejh+0x20> + 8001365c: 4025d59b sraiw a1,a1,0x2 + 80013660: 000b2797 auipc a5,0xb2 + 80013664: 94b78b23 sb a1,-1706(a5) # 800c4fb6 <_ZL4regs+0x6> + 80013668: e9dff06f j 80013504 <_ZL4Syncv> + 8001366c: efc78793 addi a5,a5,-260 + 80013670: fcf516e3 bne a0,a5,8001363c <_ZL8M82Writejh+0x20> + 80013674: 4025d59b sraiw a1,a1,0x2 + 80013678: 000b2797 auipc a5,0xb2 + 8001367c: 94b78023 sb a1,-1728(a5) # 800c4fb8 <_ZL4regs+0x8> + 80013680: e85ff06f j 80013504 <_ZL4Syncv> + 80013684: 0035f593 andi a1,a1,3 + 80013688: 001b8797 auipc a5,0x1b8 + 8001368c: 68b78023 sb a1,1664(a5) # 801cbd08 <_ZL4ctrl> + 80013690: e75ff06f j 80013504 <_ZL4Syncv> + 80013694: 4025d59b sraiw a1,a1,0x2 + 80013698: 000b2797 auipc a5,0xb2 + 8001369c: 90b78fa3 sb a1,-1761(a5) # 800c4fb7 <_ZL4regs+0x7> + 800136a0: e65ff06f j 80013504 <_ZL4Syncv> + +00000000800136a4 <_ZL8M82Closev>: + 800136a4: 001b8517 auipc a0,0x1b8 + 800136a8: 65c53503 ld a0,1628(a0) # 801cbd00 <_ZL4WRAM> + 800136ac: 02050263 beqz a0,800136d0 <_ZL8M82Closev+0x2c> + 800136b0: ff010113 addi sp,sp,-16 + 800136b4: 00113423 sd ra,8(sp) + 800136b8: e89fe0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 800136bc: 00813083 ld ra,8(sp) + 800136c0: 001b8797 auipc a5,0x1b8 + 800136c4: 6407b023 sd zero,1600(a5) # 801cbd00 <_ZL4WRAM> + 800136c8: 01010113 addi sp,sp,16 + 800136cc: 00008067 ret + 800136d0: 001b8797 auipc a5,0x1b8 + 800136d4: 6207b823 sd zero,1584(a5) # 801cbd00 <_ZL4WRAM> + 800136d8: 00008067 ret + +00000000800136dc <_ZL8M82Powerv>: + 800136dc: ff010113 addi sp,sp,-16 + 800136e0: 00113423 sd ra,8(sp) + 800136e4: 00813023 sd s0,0(sp) + 800136e8: e1dff0ef jal ra,80013504 <_ZL4Syncv> + 800136ec: 000105b7 lui a1,0x10 + 800136f0: ffffd617 auipc a2,0xffffd + 800136f4: f7060613 addi a2,a2,-144 # 80010660 <_Z6CartBRj> + 800136f8: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 800136fc: 00006537 lui a0,0x6 + 80013700: 31c200ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80013704: 00008437 lui s0,0x8 + 80013708: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 8001370c: ffffd617 auipc a2,0xffffd + 80013710: f8060613 addi a2,a2,-128 # 8001068c <_Z6CartBWjh> + 80013714: 00006537 lui a0,0x6 + 80013718: 410200ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001371c: efc40593 addi a1,s0,-260 + 80013720: ef040513 addi a0,s0,-272 + 80013724: 00000617 auipc a2,0x0 + 80013728: ef860613 addi a2,a2,-264 # 8001361c <_ZL8M82Writejh> + 8001372c: 3fc200ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80013730: 00013403 ld s0,0(sp) + 80013734: 00813083 ld ra,8(sp) + 80013738: 001b8517 auipc a0,0x1b8 + 8001373c: 5d452503 lw a0,1492(a0) # 801cbd0c <_ZL8WRAMSIZE> + 80013740: 001b8617 auipc a2,0x1b8 + 80013744: 5c063603 ld a2,1472(a2) # 801cbd00 <_ZL4WRAM> + 80013748: 000065b7 lui a1,0x6 + 8001374c: 00a5551b srliw a0,a0,0xa + 80013750: 01010113 addi sp,sp,16 + 80013754: 8c1ec06f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +0000000080013758 <_Z13Mapper82_InitP8CartInfo>: + 80013758: fe010113 addi sp,sp,-32 + 8001375c: 00113c23 sd ra,24(sp) + 80013760: 00813823 sd s0,16(sp) + 80013764: 00913423 sd s1,8(sp) + 80013768: 01213023 sd s2,0(sp) + 8001376c: 00000797 auipc a5,0x0 + 80013770: f7078793 addi a5,a5,-144 # 800136dc <_ZL8M82Powerv> + 80013774: 00f53023 sd a5,0(a0) + 80013778: 00000797 auipc a5,0x0 + 8001377c: f2c78793 addi a5,a5,-212 # 800136a4 <_ZL8M82Closev> + 80013780: 001b8497 auipc s1,0x1b8 + 80013784: 58c48493 addi s1,s1,1420 # 801cbd0c <_ZL8WRAMSIZE> + 80013788: 00f53823 sd a5,16(a0) + 8001378c: 00050413 mv s0,a0 + 80013790: 000027b7 lui a5,0x2 + 80013794: 00002537 lui a0,0x2 + 80013798: 00f4a023 sw a5,0(s1) + 8001379c: cd1fe0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 800137a0: 0004a603 lw a2,0(s1) + 800137a4: 00050593 mv a1,a0 + 800137a8: 001b8917 auipc s2,0x1b8 + 800137ac: 55890913 addi s2,s2,1368 # 801cbd00 <_ZL4WRAM> + 800137b0: 00100693 li a3,1 + 800137b4: 01000513 li a0,16 + 800137b8: 00b93023 sd a1,0(s2) + 800137bc: d39fc0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 800137c0: 0004a583 lw a1,0(s1) + 800137c4: 00093503 ld a0,0(s2) + 800137c8: 00032697 auipc a3,0x32 + 800137cc: b6068693 addi a3,a3,-1184 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 800137d0: 00000613 li a2,0 + 800137d4: 83dec0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800137d8: 04c42783 lw a5,76(s0) + 800137dc: 00078a63 beqz a5,800137f0 <_Z13Mapper82_InitP8CartInfo+0x98> + 800137e0: 00093703 ld a4,0(s2) + 800137e4: 0004a783 lw a5,0(s1) + 800137e8: 00e43c23 sd a4,24(s0) + 800137ec: 02f42c23 sw a5,56(s0) + 800137f0: 01013403 ld s0,16(sp) + 800137f4: 01813083 ld ra,24(sp) + 800137f8: 00813483 ld s1,8(sp) + 800137fc: 00013903 ld s2,0(sp) + 80013800: 00000797 auipc a5,0x0 + 80013804: e1878793 addi a5,a5,-488 # 80013618 <_ZL12StateRestorei> + 80013808: 001b9717 auipc a4,0x1b9 + 8001380c: e4f73823 sd a5,-432(a4) # 801cc658 + 80013810: 00000693 li a3,0 + 80013814: 00000613 li a2,0 + 80013818: fff00593 li a1,-1 + 8001381c: 00037517 auipc a0,0x37 + 80013820: a2450513 addi a0,a0,-1500 # 8004a240 <_ZL9StateRegs> + 80013824: 02010113 addi sp,sp,32 + 80013828: fe8ec06f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001382c <_ZL4Syncv>: + 8001382c: fe010113 addi sp,sp,-32 + 80013830: 00913423 sd s1,8(sp) + 80013834: 001b8497 auipc s1,0x1b8 + 80013838: 4e448493 addi s1,s1,1252 # 801cbd18 <_ZL6latche> + 8001383c: 0014c783 lbu a5,1(s1) + 80013840: 0004c703 lbu a4,0(s1) + 80013844: 00113c23 sd ra,24(sp) + 80013848: 0067979b slliw a5,a5,0x6 + 8001384c: 0407f793 andi a5,a5,64 + 80013850: 0187979b slliw a5,a5,0x18 + 80013854: 00813823 sd s0,16(sp) + 80013858: 001b8697 auipc a3,0x1b8 + 8001385c: 4b86c683 lbu a3,1208(a3) # 801cbd10 <_ZL12isresetbased> + 80013860: 01f77593 andi a1,a4,31 + 80013864: 4187d79b sraiw a5,a5,0x18 + 80013868: 04068c63 beqz a3,800138c0 <_ZL4Syncv+0x94> + 8001386c: 001b8697 auipc a3,0x1b8 + 80013870: 4a56c683 lbu a3,1189(a3) # 801cbd11 <_ZL5reset> + 80013874: 0056969b slliw a3,a3,0x5 + 80013878: 00d5e5b3 or a1,a1,a3 + 8001387c: 00b7e7b3 or a5,a5,a1 + 80013880: 02077713 andi a4,a4,32 + 80013884: 0ff7f793 andi a5,a5,255 + 80013888: 04071863 bnez a4,800138d8 <_ZL4Syncv+0xac> + 8001388c: 0017d593 srli a1,a5,0x1 + 80013890: 00008537 lui a0,0x8 + 80013894: d80fd0ef jal ra,80010e14 <_Z8setprg32jj> + 80013898: 0004c503 lbu a0,0(s1) + 8001389c: 4065551b sraiw a0,a0,0x6 + 800138a0: 00157513 andi a0,a0,1 + 800138a4: fa4fd0ef jal ra,80011048 <_Z9setmirrori> + 800138a8: 01013403 ld s0,16(sp) + 800138ac: 01813083 ld ra,24(sp) + 800138b0: 00813483 ld s1,8(sp) + 800138b4: 00000513 li a0,0 + 800138b8: 02010113 addi sp,sp,32 + 800138bc: e48fd06f j 80010f04 <_Z7setchr8j> + 800138c0: 4027569b sraiw a3,a4,0x2 + 800138c4: 0206f693 andi a3,a3,32 + 800138c8: 00d7e7b3 or a5,a5,a3 + 800138cc: 02077713 andi a4,a4,32 + 800138d0: 00f5e7b3 or a5,a1,a5 + 800138d4: fa070ce3 beqz a4,8001388c <_ZL4Syncv+0x60> + 800138d8: 0007841b sext.w s0,a5 + 800138dc: 00040593 mv a1,s0 + 800138e0: 00008537 lui a0,0x8 + 800138e4: b74fd0ef jal ra,80010c58 <_Z8setprg16jj> + 800138e8: 00040593 mv a1,s0 + 800138ec: 0000c537 lui a0,0xc + 800138f0: b68fd0ef jal ra,80010c58 <_Z8setprg16jj> + 800138f4: fa5ff06f j 80013898 <_ZL4Syncv+0x6c> + +00000000800138f8 <_ZL12StateRestorei>: + 800138f8: f35ff06f j 8001382c <_ZL4Syncv> + +00000000800138fc <_ZL9M226Writejh>: + 800138fc: 00157793 andi a5,a0,1 + 80013900: 001b8517 auipc a0,0x1b8 + 80013904: 41850513 addi a0,a0,1048 # 801cbd18 <_ZL6latche> + 80013908: 00f50533 add a0,a0,a5 + 8001390c: 00b50023 sb a1,0(a0) + 80013910: f1dff06f j 8001382c <_ZL4Syncv> + +0000000080013914 <_ZL9M233Resetv>: + 80013914: 001b8717 auipc a4,0x1b8 + 80013918: 3fd70713 addi a4,a4,1021 # 801cbd11 <_ZL5reset> + 8001391c: 00074783 lbu a5,0(a4) + 80013920: 0017c793 xori a5,a5,1 + 80013924: 00f70023 sb a5,0(a4) + 80013928: f05ff06f j 8001382c <_ZL4Syncv> + +000000008001392c <_ZL9M226Powerv>: + 8001392c: ff010113 addi sp,sp,-16 + 80013930: 00113423 sd ra,8(sp) + 80013934: 00813023 sd s0,0(sp) + 80013938: 001b8797 auipc a5,0x1b8 + 8001393c: 3c078ca3 sb zero,985(a5) # 801cbd11 <_ZL5reset> + 80013940: 00010437 lui s0,0x10 + 80013944: 001b8797 auipc a5,0x1b8 + 80013948: 3c079a23 sh zero,980(a5) # 801cbd18 <_ZL6latche> + 8001394c: ee1ff0ef jal ra,8001382c <_ZL4Syncv> + 80013950: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80013954: 00000617 auipc a2,0x0 + 80013958: fa860613 addi a2,a2,-88 # 800138fc <_ZL9M226Writejh> + 8001395c: 00008537 lui a0,0x8 + 80013960: 1c8200ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80013964: fff40593 addi a1,s0,-1 + 80013968: 00013403 ld s0,0(sp) + 8001396c: 00813083 ld ra,8(sp) + 80013970: ffffd617 auipc a2,0xffffd + 80013974: cf060613 addi a2,a2,-784 # 80010660 <_Z6CartBRj> + 80013978: 00008537 lui a0,0x8 + 8001397c: 01010113 addi sp,sp,16 + 80013980: 09c2006f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080013984 <_Z14Mapper226_InitP8CartInfo>: + 80013984: ff010113 addi sp,sp,-16 + 80013988: 00113423 sd ra,8(sp) + 8001398c: 00000797 auipc a5,0x0 + 80013990: fa078793 addi a5,a5,-96 # 8001392c <_ZL9M226Powerv> + 80013994: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 80013998: 00000693 li a3,0 + 8001399c: 00000613 li a2,0 + 800139a0: fff00593 li a1,-1 + 800139a4: 00037517 auipc a0,0x37 + 800139a8: 8e450513 addi a0,a0,-1820 # 8004a288 <_ZL9StateRegs> + 800139ac: 001b8797 auipc a5,0x1b8 + 800139b0: 36078223 sb zero,868(a5) # 801cbd10 <_ZL12isresetbased> + 800139b4: e5cec0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800139b8: 00813083 ld ra,8(sp) + 800139bc: 00000797 auipc a5,0x0 + 800139c0: f3c78793 addi a5,a5,-196 # 800138f8 <_ZL12StateRestorei> + 800139c4: 001b9717 auipc a4,0x1b9 + 800139c8: c8f73a23 sd a5,-876(a4) # 801cc658 + 800139cc: 01010113 addi sp,sp,16 + 800139d0: 00008067 ret + +00000000800139d4 <_Z14Mapper233_InitP8CartInfo>: + 800139d4: ff010113 addi sp,sp,-16 + 800139d8: 00113423 sd ra,8(sp) + 800139dc: 00000797 auipc a5,0x0 + 800139e0: f5078793 addi a5,a5,-176 # 8001392c <_ZL9M226Powerv> + 800139e4: 00f53023 sd a5,0(a0) + 800139e8: 00000797 auipc a5,0x0 + 800139ec: f2c78793 addi a5,a5,-212 # 80013914 <_ZL9M233Resetv> + 800139f0: 00f53423 sd a5,8(a0) + 800139f4: 00000693 li a3,0 + 800139f8: 00100793 li a5,1 + 800139fc: 00000613 li a2,0 + 80013a00: fff00593 li a1,-1 + 80013a04: 00037517 auipc a0,0x37 + 80013a08: 88450513 addi a0,a0,-1916 # 8004a288 <_ZL9StateRegs> + 80013a0c: 001b8717 auipc a4,0x1b8 + 80013a10: 30f70223 sb a5,772(a4) # 801cbd10 <_ZL12isresetbased> + 80013a14: dfcec0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80013a18: 00813083 ld ra,8(sp) + 80013a1c: 00000797 auipc a5,0x0 + 80013a20: edc78793 addi a5,a5,-292 # 800138f8 <_ZL12StateRestorei> + 80013a24: 001b9717 auipc a4,0x1b9 + 80013a28: c2f73a23 sd a5,-972(a4) # 801cc658 + 80013a2c: 01010113 addi sp,sp,16 + 80013a30: 00008067 ret + +0000000080013a34 <_ZL4Syncv>: + 80013a34: ff010113 addi sp,sp,-16 + 80013a38: 00113423 sd ra,8(sp) + 80013a3c: 00813023 sd s0,0(sp) + 80013a40: 001b8797 auipc a5,0x1b8 + 80013a44: 2ec7c783 lbu a5,748(a5) # 801cbd2c <_ZL4is10> + 80013a48: 08078263 beqz a5,80013acc <_ZL4Syncv+0x98> + 80013a4c: 00000613 li a2,0 + 80013a50: 000065b7 lui a1,0x6 + 80013a54: 01000513 li a0,16 + 80013a58: e91fc0ef jal ra,800108e8 <_Z8setprg8rijj> + 80013a5c: 001b8597 auipc a1,0x1b8 + 80013a60: 2d25c583 lbu a1,722(a1) # 801cbd2e <_ZL4preg> + 80013a64: 00008537 lui a0,0x8 + 80013a68: 9f0fd0ef jal ra,80010c58 <_Z8setprg16jj> + 80013a6c: fff00593 li a1,-1 + 80013a70: 0000c537 lui a0,0xc + 80013a74: 9e4fd0ef jal ra,80010c58 <_Z8setprg16jj> + 80013a78: 001b8417 auipc s0,0x1b8 + 80013a7c: 2b040413 addi s0,s0,688 # 801cbd28 <_ZL4creg> + 80013a80: 001b8797 auipc a5,0x1b8 + 80013a84: 2af7c783 lbu a5,687(a5) # 801cbd2f <_ZL6latch0> + 80013a88: 00f407b3 add a5,s0,a5 + 80013a8c: 0007c583 lbu a1,0(a5) + 80013a90: 00000513 li a0,0 + 80013a94: c50fd0ef jal ra,80010ee4 <_Z7setchr4jj> + 80013a98: 001b8797 auipc a5,0x1b8 + 80013a9c: 2987c783 lbu a5,664(a5) # 801cbd30 <_ZL6latch1> + 80013aa0: 0027879b addiw a5,a5,2 + 80013aa4: 00f40433 add s0,s0,a5 + 80013aa8: 00044583 lbu a1,0(s0) + 80013aac: 00001537 lui a0,0x1 + 80013ab0: c34fd0ef jal ra,80010ee4 <_Z7setchr4jj> + 80013ab4: 00013403 ld s0,0(sp) + 80013ab8: 00813083 ld ra,8(sp) + 80013abc: 001b8517 auipc a0,0x1b8 + 80013ac0: 27154503 lbu a0,625(a0) # 801cbd2d <_ZL4mirr> + 80013ac4: 01010113 addi sp,sp,16 + 80013ac8: d80fd06f j 80011048 <_Z9setmirrori> + 80013acc: 001b8597 auipc a1,0x1b8 + 80013ad0: 2625c583 lbu a1,610(a1) # 801cbd2e <_ZL4preg> + 80013ad4: 00008537 lui a0,0x8 + 80013ad8: fc5fc0ef jal ra,80010a9c <_Z7setprg8jj> + 80013adc: ffd00593 li a1,-3 + 80013ae0: 0000a537 lui a0,0xa + 80013ae4: fb9fc0ef jal ra,80010a9c <_Z7setprg8jj> + 80013ae8: ffe00593 li a1,-2 + 80013aec: 0000c537 lui a0,0xc + 80013af0: fadfc0ef jal ra,80010a9c <_Z7setprg8jj> + 80013af4: fff00593 li a1,-1 + 80013af8: 0000e537 lui a0,0xe + 80013afc: fa1fc0ef jal ra,80010a9c <_Z7setprg8jj> + 80013b00: f79ff06f j 80013a78 <_ZL4Syncv+0x44> + +0000000080013b04 <_ZL12StateRestorei>: + 80013b04: f31ff06f j 80013a34 <_ZL4Syncv> + +0000000080013b08 <_ZL13MMC2and4Powerv>: + 80013b08: 00100793 li a5,1 + 80013b0c: ff010113 addi sp,sp,-16 + 80013b10: 001b8717 auipc a4,0x1b8 + 80013b14: 22f70023 sb a5,544(a4) # 801cbd30 <_ZL6latch1> + 80013b18: 001b8717 auipc a4,0x1b8 + 80013b1c: 20f70ba3 sb a5,535(a4) # 801cbd2f <_ZL6latch0> + 80013b20: 00113423 sd ra,8(sp) + 80013b24: 00813023 sd s0,0(sp) + 80013b28: 001b8717 auipc a4,0x1b8 + 80013b2c: 20070323 sb zero,518(a4) # 801cbd2e <_ZL4preg> + 80013b30: f05ff0ef jal ra,80013a34 <_ZL4Syncv> + 80013b34: 001b8797 auipc a5,0x1b8 + 80013b38: 1f87c783 lbu a5,504(a5) # 801cbd2c <_ZL4is10> + 80013b3c: 02079e63 bnez a5,80013b78 <_ZL13MMC2and4Powerv+0x70> + 80013b40: 00010437 lui s0,0x10 + 80013b44: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80013b48: ffffd617 auipc a2,0xffffd + 80013b4c: b1860613 addi a2,a2,-1256 # 80010660 <_Z6CartBRj> + 80013b50: 00008537 lui a0,0x8 + 80013b54: 6c91f0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80013b58: fff40593 addi a1,s0,-1 + 80013b5c: 00013403 ld s0,0(sp) + 80013b60: 00813083 ld ra,8(sp) + 80013b64: 00000617 auipc a2,0x0 + 80013b68: 14c60613 addi a2,a2,332 # 80013cb0 <_Z13MMC2and4Writejh> + 80013b6c: 0000a537 lui a0,0xa + 80013b70: 01010113 addi sp,sp,16 + 80013b74: 7b51f06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80013b78: 00008437 lui s0,0x8 + 80013b7c: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 80013b80: ffffd617 auipc a2,0xffffd + 80013b84: ae060613 addi a2,a2,-1312 # 80010660 <_Z6CartBRj> + 80013b88: 00006537 lui a0,0x6 + 80013b8c: 6911f0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80013b90: fff40593 addi a1,s0,-1 + 80013b94: ffffd617 auipc a2,0xffffd + 80013b98: af860613 addi a2,a2,-1288 # 8001068c <_Z6CartBWjh> + 80013b9c: 00006537 lui a0,0x6 + 80013ba0: 7891f0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80013ba4: 001b8517 auipc a0,0x1b8 + 80013ba8: 19052503 lw a0,400(a0) # 801cbd34 <_ZL8WRAMSIZE> + 80013bac: 001b8617 auipc a2,0x1b8 + 80013bb0: 17463603 ld a2,372(a2) # 801cbd20 <_ZL4WRAM> + 80013bb4: 000065b7 lui a1,0x6 + 80013bb8: 00a5551b srliw a0,a0,0xa + 80013bbc: c58ec0ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 80013bc0: f81ff06f j 80013b40 <_ZL13MMC2and4Powerv+0x38> + +0000000080013bc4 <_ZL13MMC2and4Closev>: + 80013bc4: 001b8517 auipc a0,0x1b8 + 80013bc8: 15c53503 ld a0,348(a0) # 801cbd20 <_ZL4WRAM> + 80013bcc: 02050263 beqz a0,80013bf0 <_ZL13MMC2and4Closev+0x2c> + 80013bd0: ff010113 addi sp,sp,-16 + 80013bd4: 00113423 sd ra,8(sp) + 80013bd8: 969fe0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80013bdc: 00813083 ld ra,8(sp) + 80013be0: 001b8797 auipc a5,0x1b8 + 80013be4: 1407b023 sd zero,320(a5) # 801cbd20 <_ZL4WRAM> + 80013be8: 01010113 addi sp,sp,16 + 80013bec: 00008067 ret + 80013bf0: 001b8797 auipc a5,0x1b8 + 80013bf4: 1207b823 sd zero,304(a5) # 801cbd20 <_ZL4WRAM> + 80013bf8: 00008067 ret + +0000000080013bfc <_ZL15MMC2and4PPUHookj>: + 80013bfc: 0085579b srliw a5,a0,0x8 + 80013c00: 0ff7f793 andi a5,a5,255 + 80013c04: 01f00693 li a3,31 + 80013c08: 0085571b srliw a4,a0,0x8 + 80013c0c: 00f6e863 bltu a3,a5,80013c1c <_ZL15MMC2and4PPUHookj+0x20> + 80013c10: 00f77713 andi a4,a4,15 + 80013c14: 00f00693 li a3,15 + 80013c18: 00d70463 beq a4,a3,80013c20 <_ZL15MMC2and4PPUHookj+0x24> + 80013c1c: 00008067 ret + 80013c20: 0f057513 andi a0,a0,240 + 80013c24: 02f76863 bltu a4,a5,80013c54 <_ZL15MMC2and4PPUHookj+0x58> + 80013c28: 0d000793 li a5,208 + 80013c2c: 04f50a63 beq a0,a5,80013c80 <_ZL15MMC2and4PPUHookj+0x84> + 80013c30: 0e000793 li a5,224 + 80013c34: fef514e3 bne a0,a5,80013c1c <_ZL15MMC2and4PPUHookj+0x20> + 80013c38: 00100793 li a5,1 + 80013c3c: 001b8597 auipc a1,0x1b8 + 80013c40: 0ed5c583 lbu a1,237(a1) # 801cbd29 <_ZL4creg+0x1> + 80013c44: 00000513 li a0,0 + 80013c48: 001b8717 auipc a4,0x1b8 + 80013c4c: 0ef703a3 sb a5,231(a4) # 801cbd2f <_ZL6latch0> + 80013c50: a94fd06f j 80010ee4 <_Z7setchr4jj> + 80013c54: 0d000793 li a5,208 + 80013c58: 04f50063 beq a0,a5,80013c98 <_ZL15MMC2and4PPUHookj+0x9c> + 80013c5c: 0e000793 li a5,224 + 80013c60: faf51ee3 bne a0,a5,80013c1c <_ZL15MMC2and4PPUHookj+0x20> + 80013c64: 00100793 li a5,1 + 80013c68: 001b8597 auipc a1,0x1b8 + 80013c6c: 0c35c583 lbu a1,195(a1) # 801cbd2b <_ZL4creg+0x3> + 80013c70: 00001537 lui a0,0x1 + 80013c74: 001b8717 auipc a4,0x1b8 + 80013c78: 0af70e23 sb a5,188(a4) # 801cbd30 <_ZL6latch1> + 80013c7c: a68fd06f j 80010ee4 <_Z7setchr4jj> + 80013c80: 001b8597 auipc a1,0x1b8 + 80013c84: 0a85c583 lbu a1,168(a1) # 801cbd28 <_ZL4creg> + 80013c88: 00000513 li a0,0 + 80013c8c: 001b8797 auipc a5,0x1b8 + 80013c90: 0a0781a3 sb zero,163(a5) # 801cbd2f <_ZL6latch0> + 80013c94: a50fd06f j 80010ee4 <_Z7setchr4jj> + 80013c98: 001b8597 auipc a1,0x1b8 + 80013c9c: 0925c583 lbu a1,146(a1) # 801cbd2a <_ZL4creg+0x2> + 80013ca0: 00001537 lui a0,0x1 + 80013ca4: 001b8797 auipc a5,0x1b8 + 80013ca8: 08078623 sb zero,140(a5) # 801cbd30 <_ZL6latch1> + 80013cac: a38fd06f j 80010ee4 <_Z7setchr4jj> + +0000000080013cb0 <_Z13MMC2and4Writejh>: + 80013cb0: 0000f7b7 lui a5,0xf + 80013cb4: 00f57533 and a0,a0,a5 + 80013cb8: 0000d7b7 lui a5,0xd + 80013cbc: 06f50663 beq a0,a5,80013d28 <_Z13MMC2and4Writejh+0x78> + 80013cc0: 02a7e063 bltu a5,a0,80013ce0 <_Z13MMC2and4Writejh+0x30> + 80013cc4: 0000b7b7 lui a5,0xb + 80013cc8: 06f50663 beq a0,a5,80013d34 <_Z13MMC2and4Writejh+0x84> + 80013ccc: 0000c7b7 lui a5,0xc + 80013cd0: 02f51a63 bne a0,a5,80013d04 <_Z13MMC2and4Writejh+0x54> + 80013cd4: 001b8797 auipc a5,0x1b8 + 80013cd8: 04b78aa3 sb a1,85(a5) # 801cbd29 <_ZL4creg+0x1> + 80013cdc: d59ff06f j 80013a34 <_ZL4Syncv> + 80013ce0: 0000e7b7 lui a5,0xe + 80013ce4: 02f50c63 beq a0,a5,80013d1c <_Z13MMC2and4Writejh+0x6c> + 80013ce8: 0000f7b7 lui a5,0xf + 80013cec: 04f51a63 bne a0,a5,80013d40 <_Z13MMC2and4Writejh+0x90> + 80013cf0: fff5c593 not a1,a1 + 80013cf4: 0015f593 andi a1,a1,1 + 80013cf8: 001b8797 auipc a5,0x1b8 + 80013cfc: 02b78aa3 sb a1,53(a5) # 801cbd2d <_ZL4mirr> + 80013d00: d35ff06f j 80013a34 <_ZL4Syncv> + 80013d04: 0000a7b7 lui a5,0xa + 80013d08: 00f51863 bne a0,a5,80013d18 <_Z13MMC2and4Writejh+0x68> + 80013d0c: 001b8797 auipc a5,0x1b8 + 80013d10: 02b78123 sb a1,34(a5) # 801cbd2e <_ZL4preg> + 80013d14: d21ff06f j 80013a34 <_ZL4Syncv> + 80013d18: 00008067 ret + 80013d1c: 001b8797 auipc a5,0x1b8 + 80013d20: 00b787a3 sb a1,15(a5) # 801cbd2b <_ZL4creg+0x3> + 80013d24: d11ff06f j 80013a34 <_ZL4Syncv> + 80013d28: 001b8797 auipc a5,0x1b8 + 80013d2c: 00b78123 sb a1,2(a5) # 801cbd2a <_ZL4creg+0x2> + 80013d30: d05ff06f j 80013a34 <_ZL4Syncv> + 80013d34: 001b8797 auipc a5,0x1b8 + 80013d38: feb78a23 sb a1,-12(a5) # 801cbd28 <_ZL4creg> + 80013d3c: cf9ff06f j 80013a34 <_ZL4Syncv> + 80013d40: 00008067 ret + +0000000080013d44 <_Z12Mapper9_InitP8CartInfo>: + 80013d44: 00000797 auipc a5,0x0 + 80013d48: dc478793 addi a5,a5,-572 # 80013b08 <_ZL13MMC2and4Powerv> + 80013d4c: 00f53023 sd a5,0(a0) # 1000 <_entry_offset+0x1000> + 80013d50: 001b8797 auipc a5,0x1b8 + 80013d54: fc078e23 sb zero,-36(a5) # 801cbd2c <_ZL4is10> + 80013d58: 00000797 auipc a5,0x0 + 80013d5c: ea478793 addi a5,a5,-348 # 80013bfc <_ZL15MMC2and4PPUHookj> + 80013d60: 001b9717 auipc a4,0x1b9 + 80013d64: 9af73423 sd a5,-1624(a4) # 801cc708 + 80013d68: 00000797 auipc a5,0x0 + 80013d6c: d9c78793 addi a5,a5,-612 # 80013b04 <_ZL12StateRestorei> + 80013d70: 00000693 li a3,0 + 80013d74: 00000613 li a2,0 + 80013d78: fff00593 li a1,-1 + 80013d7c: 00036517 auipc a0,0x36 + 80013d80: 55450513 addi a0,a0,1364 # 8004a2d0 <_ZL9StateRegs> + 80013d84: 001b9717 auipc a4,0x1b9 + 80013d88: 8cf73a23 sd a5,-1836(a4) # 801cc658 + 80013d8c: a84ec06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080013d90 <_Z13Mapper10_InitP8CartInfo>: + 80013d90: fe010113 addi sp,sp,-32 + 80013d94: 00113c23 sd ra,24(sp) + 80013d98: 00813823 sd s0,16(sp) + 80013d9c: 00913423 sd s1,8(sp) + 80013da0: 01213023 sd s2,0(sp) + 80013da4: 00000797 auipc a5,0x0 + 80013da8: d6478793 addi a5,a5,-668 # 80013b08 <_ZL13MMC2and4Powerv> + 80013dac: 00f53023 sd a5,0(a0) + 80013db0: 00000797 auipc a5,0x0 + 80013db4: e1478793 addi a5,a5,-492 # 80013bc4 <_ZL13MMC2and4Closev> + 80013db8: 00f53823 sd a5,16(a0) + 80013dbc: 00100793 li a5,1 + 80013dc0: 001b8717 auipc a4,0x1b8 + 80013dc4: f6f70623 sb a5,-148(a4) # 801cbd2c <_ZL4is10> + 80013dc8: 00000797 auipc a5,0x0 + 80013dcc: e3478793 addi a5,a5,-460 # 80013bfc <_ZL15MMC2and4PPUHookj> + 80013dd0: 001b8497 auipc s1,0x1b8 + 80013dd4: f6448493 addi s1,s1,-156 # 801cbd34 <_ZL8WRAMSIZE> + 80013dd8: 00050413 mv s0,a0 + 80013ddc: 001b9717 auipc a4,0x1b9 + 80013de0: 92f73623 sd a5,-1748(a4) # 801cc708 + 80013de4: 00002537 lui a0,0x2 + 80013de8: 000027b7 lui a5,0x2 + 80013dec: 00f4a023 sw a5,0(s1) + 80013df0: e7cfe0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80013df4: 0004a603 lw a2,0(s1) + 80013df8: 00050593 mv a1,a0 + 80013dfc: 001b8917 auipc s2,0x1b8 + 80013e00: f2490913 addi s2,s2,-220 # 801cbd20 <_ZL4WRAM> + 80013e04: 00100693 li a3,1 + 80013e08: 01000513 li a0,16 + 80013e0c: 00b93023 sd a1,0(s2) + 80013e10: ee4fc0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80013e14: 0004a583 lw a1,0(s1) + 80013e18: 00093503 ld a0,0(s2) + 80013e1c: 00031697 auipc a3,0x31 + 80013e20: 50c68693 addi a3,a3,1292 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80013e24: 00000613 li a2,0 + 80013e28: 9e8ec0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80013e2c: 04c42783 lw a5,76(s0) + 80013e30: 00078a63 beqz a5,80013e44 <_Z13Mapper10_InitP8CartInfo+0xb4> + 80013e34: 00093703 ld a4,0(s2) + 80013e38: 0004a783 lw a5,0(s1) + 80013e3c: 00e43c23 sd a4,24(s0) + 80013e40: 02f42c23 sw a5,56(s0) + 80013e44: 01013403 ld s0,16(sp) + 80013e48: 01813083 ld ra,24(sp) + 80013e4c: 00813483 ld s1,8(sp) + 80013e50: 00013903 ld s2,0(sp) + 80013e54: 00000797 auipc a5,0x0 + 80013e58: cb078793 addi a5,a5,-848 # 80013b04 <_ZL12StateRestorei> + 80013e5c: 001b8717 auipc a4,0x1b8 + 80013e60: 7ef73e23 sd a5,2044(a4) # 801cc658 + 80013e64: 00000693 li a3,0 + 80013e68: 00000613 li a2,0 + 80013e6c: fff00593 li a1,-1 + 80013e70: 00036517 auipc a0,0x36 + 80013e74: 46050513 addi a0,a0,1120 # 8004a2d0 <_ZL9StateRegs> + 80013e78: 02010113 addi sp,sp,32 + 80013e7c: 994ec06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080013e80 <_ZL14UNLYOKOReadDipj>: + 80013e80: 00044517 auipc a0,0x44 + 80013e84: 9e854503 lbu a0,-1560(a0) # 80057868 + 80013e88: 001b8797 auipc a5,0x1b8 + 80013e8c: eb17c783 lbu a5,-335(a5) # 801cbd39 <_ZL3dip> + 80013e90: ffc57513 andi a0,a0,-4 + 80013e94: 00f56533 or a0,a0,a5 + 80013e98: 0ff57513 andi a0,a0,255 + 80013e9c: 00008067 ret + +0000000080013ea0 <_ZL14UNLYOKOReadLowj>: + 80013ea0: 00357793 andi a5,a0,3 + 80013ea4: 001b8517 auipc a0,0x1b8 + 80013ea8: e9c50513 addi a0,a0,-356 # 801cbd40 <_ZL3low> + 80013eac: 00f50533 add a0,a0,a5 + 80013eb0: 00054503 lbu a0,0(a0) + 80013eb4: 00008067 ret + +0000000080013eb8 <_ZL15UNLYOKOWriteLowjh>: + 80013eb8: 00357793 andi a5,a0,3 + 80013ebc: 001b8517 auipc a0,0x1b8 + 80013ec0: e8450513 addi a0,a0,-380 # 801cbd40 <_ZL3low> + 80013ec4: 00f50533 add a0,a0,a5 + 80013ec8: 00b50023 sb a1,0(a0) + 80013ecc: 00008067 ret + +0000000080013ed0 <_ZL7M83Syncv>: + 80013ed0: fc010113 addi sp,sp,-64 + 80013ed4: 01413823 sd s4,16(sp) + 80013ed8: 001b8a17 auipc s4,0x1b8 + 80013edc: e79a0a13 addi s4,s4,-391 # 801cbd51 <_ZL4mode> + 80013ee0: 000a4783 lbu a5,0(s4) + 80013ee4: 02113c23 sd ra,56(sp) + 80013ee8: 02813823 sd s0,48(sp) + 80013eec: 02913423 sd s1,40(sp) + 80013ef0: 03213023 sd s2,32(sp) + 80013ef4: 01313c23 sd s3,24(sp) + 80013ef8: 01513423 sd s5,8(sp) + 80013efc: 00200713 li a4,2 + 80013f00: 0037f793 andi a5,a5,3 + 80013f04: 14e78c63 beq a5,a4,8001405c <_ZL7M83Syncv+0x18c> + 80013f08: 00300713 li a4,3 + 80013f0c: 14e78263 beq a5,a4,80014050 <_ZL7M83Syncv+0x180> + 80013f10: 00100713 li a4,1 + 80013f14: 12e78863 beq a5,a4,80014044 <_ZL7M83Syncv+0x174> + 80013f18: 00100513 li a0,1 + 80013f1c: 92cfd0ef jal ra,80011048 <_Z9setmirrori> + 80013f20: 000b1a97 auipc s5,0xb1 + 80013f24: 0a0a8a93 addi s5,s5,160 # 800c4fc0 <_ZL3reg> + 80013f28: 001b8797 auipc a5,0x1b8 + 80013f2c: e347c783 lbu a5,-460(a5) # 801cbd5c <_ZL8is2kbank> + 80013f30: 000ac583 lbu a1,0(s5) + 80013f34: 00078863 beqz a5,80013f44 <_ZL7M83Syncv+0x74> + 80013f38: 001b8797 auipc a5,0x1b8 + 80013f3c: e007c783 lbu a5,-512(a5) # 801cbd38 <_ZL11isnot2kbank> + 80013f40: 12078463 beqz a5,80014068 <_ZL7M83Syncv+0x198> + 80013f44: 00002937 lui s2,0x2 + 80013f48: 000b1497 auipc s1,0xb1 + 80013f4c: 07848493 addi s1,s1,120 # 800c4fc0 <_ZL3reg> + 80013f50: 00000413 li s0,0 + 80013f54: 001b8997 auipc s3,0x1b8 + 80013f58: dfc98993 addi s3,s3,-516 # 801cbd50 <_ZL4bank> + 80013f5c: c0090913 addi s2,s2,-1024 # 1c00 <_entry_offset+0x1c00> + 80013f60: 00c0006f j 80013f6c <_ZL7M83Syncv+0x9c> + 80013f64: 0004c583 lbu a1,0(s1) + 80013f68: 4004041b addiw s0,s0,1024 + 80013f6c: 0009c783 lbu a5,0(s3) + 80013f70: 00040513 mv a0,s0 + 80013f74: 00148493 addi s1,s1,1 + 80013f78: 0047979b slliw a5,a5,0x4 + 80013f7c: 3007f793 andi a5,a5,768 + 80013f80: 00b7e5b3 or a1,a5,a1 + 80013f84: f21fc0ef jal ra,80010ea4 <_Z7setchr1jj> + 80013f88: fd241ee3 bne s0,s2,80013f64 <_ZL7M83Syncv+0x94> + 80013f8c: 00000613 li a2,0 + 80013f90: 000065b7 lui a1,0x6 + 80013f94: 01000513 li a0,16 + 80013f98: 951fc0ef jal ra,800108e8 <_Z8setprg8rijj> + 80013f9c: 000a4783 lbu a5,0(s4) + 80013fa0: 0407f793 andi a5,a5,64 + 80013fa4: 04078863 beqz a5,80013ff4 <_ZL7M83Syncv+0x124> + 80013fa8: 001b8417 auipc s0,0x1b8 + 80013fac: da840413 addi s0,s0,-600 # 801cbd50 <_ZL4bank> + 80013fb0: 00044583 lbu a1,0(s0) + 80013fb4: 00008537 lui a0,0x8 + 80013fb8: 03f5f593 andi a1,a1,63 + 80013fbc: c9dfc0ef jal ra,80010c58 <_Z8setprg16jj> + 80013fc0: 00044583 lbu a1,0(s0) + 80013fc4: 03013403 ld s0,48(sp) + 80013fc8: 03813083 ld ra,56(sp) + 80013fcc: 02813483 ld s1,40(sp) + 80013fd0: 02013903 ld s2,32(sp) + 80013fd4: 01813983 ld s3,24(sp) + 80013fd8: 01013a03 ld s4,16(sp) + 80013fdc: 00813a83 ld s5,8(sp) + 80013fe0: 0305f593 andi a1,a1,48 + 80013fe4: 0000c537 lui a0,0xc + 80013fe8: 00f5e593 ori a1,a1,15 + 80013fec: 04010113 addi sp,sp,64 + 80013ff0: c69fc06f j 80010c58 <_Z8setprg16jj> + 80013ff4: 008ac583 lbu a1,8(s5) + 80013ff8: 00008537 lui a0,0x8 + 80013ffc: aa1fc0ef jal ra,80010a9c <_Z7setprg8jj> + 80014000: 009ac583 lbu a1,9(s5) + 80014004: 0000a537 lui a0,0xa + 80014008: a95fc0ef jal ra,80010a9c <_Z7setprg8jj> + 8001400c: 00aac583 lbu a1,10(s5) + 80014010: 0000c537 lui a0,0xc + 80014014: a89fc0ef jal ra,80010a9c <_Z7setprg8jj> + 80014018: 03013403 ld s0,48(sp) + 8001401c: 03813083 ld ra,56(sp) + 80014020: 02813483 ld s1,40(sp) + 80014024: 02013903 ld s2,32(sp) + 80014028: 01813983 ld s3,24(sp) + 8001402c: 01013a03 ld s4,16(sp) + 80014030: 00813a83 ld s5,8(sp) + 80014034: fff00593 li a1,-1 + 80014038: 0000e537 lui a0,0xe + 8001403c: 04010113 addi sp,sp,64 + 80014040: a5dfc06f j 80010a9c <_Z7setprg8jj> + 80014044: 00000513 li a0,0 + 80014048: 800fd0ef jal ra,80011048 <_Z9setmirrori> + 8001404c: ed5ff06f j 80013f20 <_ZL7M83Syncv+0x50> + 80014050: 00300513 li a0,3 + 80014054: ff5fc0ef jal ra,80011048 <_Z9setmirrori> + 80014058: ec9ff06f j 80013f20 <_ZL7M83Syncv+0x50> + 8001405c: 00200513 li a0,2 + 80014060: fe9fc0ef jal ra,80011048 <_Z9setmirrori> + 80014064: ebdff06f j 80013f20 <_ZL7M83Syncv+0x50> + 80014068: 00000513 li a0,0 + 8001406c: e59fc0ef jal ra,80010ec4 <_Z7setchr2jj> + 80014070: 001ac583 lbu a1,1(s5) + 80014074: 00001537 lui a0,0x1 + 80014078: 80050513 addi a0,a0,-2048 # 800 <_entry_offset+0x800> + 8001407c: e49fc0ef jal ra,80010ec4 <_Z7setchr2jj> + 80014080: 006ac583 lbu a1,6(s5) + 80014084: 00001537 lui a0,0x1 + 80014088: e3dfc0ef jal ra,80010ec4 <_Z7setchr2jj> + 8001408c: 007ac583 lbu a1,7(s5) + 80014090: 00002537 lui a0,0x2 + 80014094: 80050513 addi a0,a0,-2048 # 1800 <_entry_offset+0x1800> + 80014098: e2dfc0ef jal ra,80010ec4 <_Z7setchr2jj> + 8001409c: ef1ff06f j 80013f8c <_ZL7M83Syncv+0xbc> + +00000000800140a0 <_ZL15M83StateRestorei>: + 800140a0: e31ff06f j 80013ed0 <_ZL7M83Syncv> + +00000000800140a4 <_ZL8M83Resetv>: + 800140a4: 001b8717 auipc a4,0x1b8 + 800140a8: c9570713 addi a4,a4,-875 # 801cbd39 <_ZL3dip> + 800140ac: 00074783 lbu a5,0(a4) + 800140b0: 0017c793 xori a5,a5,1 + 800140b4: 00f70023 sb a5,0(a4) + 800140b8: e19ff06f j 80013ed0 <_ZL7M83Syncv> + +00000000800140bc <_ZL8M83Writejh>: + 800140bc: 000087b7 lui a5,0x8 + 800140c0: 31778713 addi a4,a5,791 # 8317 <_entry_offset+0x8317> + 800140c4: 04a76463 bltu a4,a0,8001410c <_ZL8M83Writejh+0x50> + 800140c8: 2ff78713 addi a4,a5,767 + 800140cc: 06a77a63 bgeu a4,a0,80014140 <_ZL8M83Writejh+0x84> + 800140d0: ffff87b7 lui a5,0xffff8 + 800140d4: d007879b addiw a5,a5,-768 + 800140d8: 00f5053b addw a0,a0,a5 + 800140dc: 0005071b sext.w a4,a0 + 800140e0: 01700793 li a5,23 + 800140e4: 0ce7e863 bltu a5,a4,800141b4 <_ZL8M83Writejh+0xf8> + 800140e8: 02051513 slli a0,a0,0x20 + 800140ec: 02055513 srli a0,a0,0x20 + 800140f0: 00031717 auipc a4,0x31 + 800140f4: 30070713 addi a4,a4,768 # 800453f0 <_ZZL8SetInputvE3moo+0x5a0> + 800140f8: 00251513 slli a0,a0,0x2 + 800140fc: 00e50533 add a0,a0,a4 + 80014100: 00052783 lw a5,0(a0) + 80014104: 00e787b3 add a5,a5,a4 + 80014108: 00078067 jr a5 # ffffffffffff8000 <_end+0xffffffff7fe23000> + 8001410c: 0000b737 lui a4,0xb + 80014110: eff57793 andi a5,a0,-257 + 80014114: 0ff70693 addi a3,a4,255 # b0ff <_entry_offset+0xb0ff> + 80014118: 00d78463 beq a5,a3,80014120 <_ZL8M83Writejh+0x64> + 8001411c: 08e51863 bne a0,a4,800141ac <_ZL8M83Writejh+0xf0> + 80014120: 001b8717 auipc a4,0x1b8 + 80014124: c3170713 addi a4,a4,-975 # 801cbd51 <_ZL4mode> + 80014128: 00074783 lbu a5,0(a4) + 8001412c: 001b8697 auipc a3,0x1b8 + 80014130: c2b68223 sb a1,-988(a3) # 801cbd50 <_ZL4bank> + 80014134: 0407e793 ori a5,a5,64 + 80014138: 00f70023 sb a5,0(a4) + 8001413c: d95ff06f j 80013ed0 <_ZL7M83Syncv> + 80014140: 20078713 addi a4,a5,512 + 80014144: 16e50263 beq a0,a4,800142a8 <_ZL8M83Writejh+0x1ec> + 80014148: 02a77e63 bgeu a4,a0,80014184 <_ZL8M83Writejh+0xc8> + 8001414c: 20178793 addi a5,a5,513 + 80014150: 06f51063 bne a0,a5,800141b0 <_ZL8M83Writejh+0xf4> + 80014154: 001b8697 auipc a3,0x1b8 + 80014158: c0068693 addi a3,a3,-1024 # 801cbd54 <_ZL8IRQCount> + 8001415c: 0006c783 lbu a5,0(a3) + 80014160: 001b8717 auipc a4,0x1b8 + 80014164: bf174703 lbu a4,-1039(a4) # 801cbd51 <_ZL4mode> + 80014168: 0085959b slliw a1,a1,0x8 + 8001416c: 00b7e5b3 or a1,a5,a1 + 80014170: f8077713 andi a4,a4,-128 + 80014174: 001b8797 auipc a5,0x1b8 + 80014178: bce78823 sb a4,-1072(a5) # 801cbd44 <_ZL4IRQa> + 8001417c: 00b6a023 sw a1,0(a3) + 80014180: 00008067 ret + 80014184: 14f50663 beq a0,a5,800142d0 <_ZL8M83Writejh+0x214> + 80014188: 10078793 addi a5,a5,256 + 8001418c: 14f51a63 bne a0,a5,800142e0 <_ZL8M83Writejh+0x224> + 80014190: 001b8717 auipc a4,0x1b8 + 80014194: bc170713 addi a4,a4,-1087 # 801cbd51 <_ZL4mode> + 80014198: 00074783 lbu a5,0(a4) + 8001419c: 0407f793 andi a5,a5,64 + 800141a0: 00f5e5b3 or a1,a1,a5 + 800141a4: 00b70023 sb a1,0(a4) + 800141a8: d29ff06f j 80013ed0 <_ZL7M83Syncv> + 800141ac: 00008067 ret + 800141b0: 00008067 ret + 800141b4: 00008067 ret + 800141b8: 001b8717 auipc a4,0x1b8 + 800141bc: b9970713 addi a4,a4,-1127 # 801cbd51 <_ZL4mode> + 800141c0: 00074783 lbu a5,0(a4) + 800141c4: 000b1697 auipc a3,0xb1 + 800141c8: e0b68323 sb a1,-506(a3) # 800c4fca <_ZL3reg+0xa> + 800141cc: fbf7f793 andi a5,a5,-65 + 800141d0: 00f70023 sb a5,0(a4) + 800141d4: cfdff06f j 80013ed0 <_ZL7M83Syncv> + 800141d8: 000b1797 auipc a5,0xb1 + 800141dc: deb78423 sb a1,-536(a5) # 800c4fc0 <_ZL3reg> + 800141e0: cf1ff06f j 80013ed0 <_ZL7M83Syncv> + 800141e4: 000b1797 auipc a5,0xb1 + 800141e8: dcb78ea3 sb a1,-547(a5) # 800c4fc1 <_ZL3reg+0x1> + 800141ec: ce5ff06f j 80013ed0 <_ZL7M83Syncv> + 800141f0: 000b1797 auipc a5,0xb1 + 800141f4: dcb78923 sb a1,-558(a5) # 800c4fc2 <_ZL3reg+0x2> + 800141f8: 00100793 li a5,1 + 800141fc: 001b8717 auipc a4,0x1b8 + 80014200: b2f70e23 sb a5,-1220(a4) # 801cbd38 <_ZL11isnot2kbank> + 80014204: ccdff06f j 80013ed0 <_ZL7M83Syncv> + 80014208: 001b8717 auipc a4,0x1b8 + 8001420c: b4970713 addi a4,a4,-1207 # 801cbd51 <_ZL4mode> + 80014210: 00074783 lbu a5,0(a4) + 80014214: 000b1697 auipc a3,0xb1 + 80014218: dab68a23 sb a1,-588(a3) # 800c4fc8 <_ZL3reg+0x8> + 8001421c: fbf7f793 andi a5,a5,-65 + 80014220: 00f70023 sb a5,0(a4) + 80014224: cadff06f j 80013ed0 <_ZL7M83Syncv> + 80014228: 001b8717 auipc a4,0x1b8 + 8001422c: b2970713 addi a4,a4,-1239 # 801cbd51 <_ZL4mode> + 80014230: 00074783 lbu a5,0(a4) + 80014234: 000b1697 auipc a3,0xb1 + 80014238: d8b68aa3 sb a1,-619(a3) # 800c4fc9 <_ZL3reg+0x9> + 8001423c: fbf7f793 andi a5,a5,-65 + 80014240: 00f70023 sb a5,0(a4) + 80014244: c8dff06f j 80013ed0 <_ZL7M83Syncv> + 80014248: 000b1797 auipc a5,0xb1 + 8001424c: d6b78fa3 sb a1,-641(a5) # 800c4fc7 <_ZL3reg+0x7> + 80014250: c81ff06f j 80013ed0 <_ZL7M83Syncv> + 80014254: 000b1797 auipc a5,0xb1 + 80014258: d6b787a3 sb a1,-657(a5) # 800c4fc3 <_ZL3reg+0x3> + 8001425c: 00100793 li a5,1 + 80014260: 001b8717 auipc a4,0x1b8 + 80014264: acf70c23 sb a5,-1320(a4) # 801cbd38 <_ZL11isnot2kbank> + 80014268: c69ff06f j 80013ed0 <_ZL7M83Syncv> + 8001426c: 000b1797 auipc a5,0xb1 + 80014270: d4b78c23 sb a1,-680(a5) # 800c4fc4 <_ZL3reg+0x4> + 80014274: 00100793 li a5,1 + 80014278: 001b8717 auipc a4,0x1b8 + 8001427c: acf70023 sb a5,-1344(a4) # 801cbd38 <_ZL11isnot2kbank> + 80014280: c51ff06f j 80013ed0 <_ZL7M83Syncv> + 80014284: 000b1797 auipc a5,0xb1 + 80014288: d4b780a3 sb a1,-703(a5) # 800c4fc5 <_ZL3reg+0x5> + 8001428c: 00100793 li a5,1 + 80014290: 001b8717 auipc a4,0x1b8 + 80014294: aaf70423 sb a5,-1368(a4) # 801cbd38 <_ZL11isnot2kbank> + 80014298: c39ff06f j 80013ed0 <_ZL7M83Syncv> + 8001429c: 000b1797 auipc a5,0xb1 + 800142a0: d2b78523 sb a1,-726(a5) # 800c4fc6 <_ZL3reg+0x6> + 800142a4: c2dff06f j 80013ed0 <_ZL7M83Syncv> + 800142a8: 001b8697 auipc a3,0x1b8 + 800142ac: aac68693 addi a3,a3,-1364 # 801cbd54 <_ZL8IRQCount> + 800142b0: 0006a783 lw a5,0(a3) + 800142b4: 00010737 lui a4,0x10 + 800142b8: f0070713 addi a4,a4,-256 # ff00 <_entry_offset+0xff00> + 800142bc: 00e7f7b3 and a5,a5,a4 + 800142c0: 00b7e5b3 or a1,a5,a1 + 800142c4: 00100513 li a0,1 + 800142c8: 00b6a023 sw a1,0(a3) + 800142cc: a85ec06f j 80000d50 <_Z12X6502_IRQEndi> + 800142d0: 00100793 li a5,1 + 800142d4: 001b8717 auipc a4,0x1b8 + 800142d8: a8f70423 sb a5,-1400(a4) # 801cbd5c <_ZL8is2kbank> + 800142dc: e45ff06f j 80014120 <_ZL8M83Writejh+0x64> + 800142e0: 00008067 ret + +00000000800142e4 <_ZL8M83Closev>: + 800142e4: 001b8517 auipc a0,0x1b8 + 800142e8: a6453503 ld a0,-1436(a0) # 801cbd48 <_ZL4WRAM> + 800142ec: 02050263 beqz a0,80014310 <_ZL8M83Closev+0x2c> + 800142f0: ff010113 addi sp,sp,-16 + 800142f4: 00113423 sd ra,8(sp) + 800142f8: a48fe0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 800142fc: 00813083 ld ra,8(sp) + 80014300: 001b8797 auipc a5,0x1b8 + 80014304: a407b423 sd zero,-1464(a5) # 801cbd48 <_ZL4WRAM> + 80014308: 01010113 addi sp,sp,16 + 8001430c: 00008067 ret + 80014310: 001b8797 auipc a5,0x1b8 + 80014314: a207bc23 sd zero,-1480(a5) # 801cbd48 <_ZL4WRAM> + 80014318: 00008067 ret + +000000008001431c <_ZL8M83Powerv>: + 8001431c: ff010113 addi sp,sp,-16 + 80014320: 00113423 sd ra,8(sp) + 80014324: 00813023 sd s0,0(sp) + 80014328: 001b8797 auipc a5,0x1b8 + 8001432c: a2078a23 sb zero,-1484(a5) # 801cbd5c <_ZL8is2kbank> + 80014330: 001b8797 auipc a5,0x1b8 + 80014334: a0078423 sb zero,-1528(a5) # 801cbd38 <_ZL11isnot2kbank> + 80014338: 001b8797 auipc a5,0x1b8 + 8001433c: a0078c23 sb zero,-1512(a5) # 801cbd50 <_ZL4bank> + 80014340: 001b8797 auipc a5,0x1b8 + 80014344: a00788a3 sb zero,-1519(a5) # 801cbd51 <_ZL4mode> + 80014348: 001b8797 auipc a5,0x1b8 + 8001434c: 9e0788a3 sb zero,-1551(a5) # 801cbd39 <_ZL3dip> + 80014350: b81ff0ef jal ra,80013ed0 <_ZL7M83Syncv> + 80014354: 00000617 auipc a2,0x0 + 80014358: b2c60613 addi a2,a2,-1236 # 80013e80 <_ZL14UNLYOKOReadDipj> + 8001435c: 000055b7 lui a1,0x5 + 80014360: 00005537 lui a0,0x5 + 80014364: 6b81f0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80014368: 00005437 lui s0,0x5 + 8001436c: 10340593 addi a1,s0,259 # 5103 <_entry_offset+0x5103> + 80014370: 10040513 addi a0,s0,256 + 80014374: 00000617 auipc a2,0x0 + 80014378: b2c60613 addi a2,a2,-1236 # 80013ea0 <_ZL14UNLYOKOReadLowj> + 8001437c: 6a01f0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80014380: 10340593 addi a1,s0,259 + 80014384: 10040513 addi a0,s0,256 + 80014388: 00000617 auipc a2,0x0 + 8001438c: b3060613 addi a2,a2,-1232 # 80013eb8 <_ZL15UNLYOKOWriteLowjh> + 80014390: 7981f0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80014394: 00008437 lui s0,0x8 + 80014398: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 8001439c: ffffc617 auipc a2,0xffffc + 800143a0: 2c460613 addi a2,a2,708 # 80010660 <_Z6CartBRj> + 800143a4: 00006537 lui a0,0x6 + 800143a8: 6741f0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800143ac: fff40593 addi a1,s0,-1 + 800143b0: ffffc617 auipc a2,0xffffc + 800143b4: 2dc60613 addi a2,a2,732 # 8001068c <_Z6CartBWjh> + 800143b8: 00006537 lui a0,0x6 + 800143bc: 76c1f0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800143c0: 00010437 lui s0,0x10 + 800143c4: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 800143c8: ffffc617 auipc a2,0xffffc + 800143cc: 29860613 addi a2,a2,664 # 80010660 <_Z6CartBRj> + 800143d0: 00008537 lui a0,0x8 + 800143d4: 6481f0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800143d8: fff40593 addi a1,s0,-1 + 800143dc: 00000617 auipc a2,0x0 + 800143e0: ce060613 addi a2,a2,-800 # 800140bc <_ZL8M83Writejh> + 800143e4: 00008537 lui a0,0x8 + 800143e8: 7401f0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800143ec: 00013403 ld s0,0(sp) + 800143f0: 00813083 ld ra,8(sp) + 800143f4: 001b8517 auipc a0,0x1b8 + 800143f8: 96452503 lw a0,-1692(a0) # 801cbd58 <_ZL8WRAMSIZE> + 800143fc: 001b8617 auipc a2,0x1b8 + 80014400: 94c63603 ld a2,-1716(a2) # 801cbd48 <_ZL4WRAM> + 80014404: 000065b7 lui a1,0x6 + 80014408: 00a5551b srliw a0,a0,0xa + 8001440c: 01010113 addi sp,sp,16 + 80014410: c05eb06f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +0000000080014414 <_ZL14UNLYOKOIRQHooki>: + 80014414: 001b8797 auipc a5,0x1b8 + 80014418: 9307c783 lbu a5,-1744(a5) # 801cbd44 <_ZL4IRQa> + 8001441c: 02078e63 beqz a5,80014458 <_ZL14UNLYOKOIRQHooki+0x44> + 80014420: ff010113 addi sp,sp,-16 + 80014424: 00813023 sd s0,0(sp) + 80014428: 001b8417 auipc s0,0x1b8 + 8001442c: 92c40413 addi s0,s0,-1748 # 801cbd54 <_ZL8IRQCount> + 80014430: 00042783 lw a5,0(s0) + 80014434: 00113423 sd ra,8(sp) + 80014438: 40a7853b subw a0,a5,a0 + 8001443c: 00a42023 sw a0,0(s0) + 80014440: 02051793 slli a5,a0,0x20 + 80014444: 0007cc63 bltz a5,8001445c <_ZL14UNLYOKOIRQHooki+0x48> + 80014448: 00813083 ld ra,8(sp) + 8001444c: 00013403 ld s0,0(sp) + 80014450: 01010113 addi sp,sp,16 + 80014454: 00008067 ret + 80014458: 00008067 ret + 8001445c: 00100513 li a0,1 + 80014460: 8d9ec0ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 80014464: 001b8797 auipc a5,0x1b8 + 80014468: 8e078023 sb zero,-1824(a5) # 801cbd44 <_ZL4IRQa> + 8001446c: 000107b7 lui a5,0x10 + 80014470: fff7879b addiw a5,a5,-1 + 80014474: 00813083 ld ra,8(sp) + 80014478: 00f42023 sw a5,0(s0) + 8001447c: 00013403 ld s0,0(sp) + 80014480: 01010113 addi sp,sp,16 + 80014484: 00008067 ret + +0000000080014488 <_Z13Mapper83_InitP8CartInfo>: + 80014488: fe010113 addi sp,sp,-32 + 8001448c: 00113c23 sd ra,24(sp) + 80014490: 00813823 sd s0,16(sp) + 80014494: 00913423 sd s1,8(sp) + 80014498: 00000797 auipc a5,0x0 + 8001449c: e8478793 addi a5,a5,-380 # 8001431c <_ZL8M83Powerv> + 800144a0: 00f53023 sd a5,0(a0) + 800144a4: 00000797 auipc a5,0x0 + 800144a8: c0078793 addi a5,a5,-1024 # 800140a4 <_ZL8M83Resetv> + 800144ac: 00f53423 sd a5,8(a0) + 800144b0: 00000797 auipc a5,0x0 + 800144b4: e3478793 addi a5,a5,-460 # 800142e4 <_ZL8M83Closev> + 800144b8: 00f53823 sd a5,16(a0) + 800144bc: 00000797 auipc a5,0x0 + 800144c0: f5878793 addi a5,a5,-168 # 80014414 <_ZL14UNLYOKOIRQHooki> + 800144c4: 001b7717 auipc a4,0x1b7 + 800144c8: 66f73e23 sd a5,1660(a4) # 801cbb40 + 800144cc: 00000797 auipc a5,0x0 + 800144d0: bd478793 addi a5,a5,-1068 # 800140a0 <_ZL15M83StateRestorei> + 800144d4: 001b8417 auipc s0,0x1b8 + 800144d8: 88440413 addi s0,s0,-1916 # 801cbd58 <_ZL8WRAMSIZE> + 800144dc: 001b8717 auipc a4,0x1b8 + 800144e0: 16f73e23 sd a5,380(a4) # 801cc658 + 800144e4: 00002537 lui a0,0x2 + 800144e8: 000027b7 lui a5,0x2 + 800144ec: 00f42023 sw a5,0(s0) + 800144f0: f7dfd0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 800144f4: 00042603 lw a2,0(s0) + 800144f8: 00050593 mv a1,a0 + 800144fc: 001b8497 auipc s1,0x1b8 + 80014500: 84c48493 addi s1,s1,-1972 # 801cbd48 <_ZL4WRAM> + 80014504: 00100693 li a3,1 + 80014508: 01000513 li a0,16 + 8001450c: 00b4b023 sd a1,0(s1) + 80014510: fe5fb0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80014514: 00042583 lw a1,0(s0) + 80014518: 0004b503 ld a0,0(s1) + 8001451c: 00031697 auipc a3,0x31 + 80014520: e0c68693 addi a3,a3,-500 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80014524: 00000613 li a2,0 + 80014528: ae9eb0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001452c: 01013403 ld s0,16(sp) + 80014530: 01813083 ld ra,24(sp) + 80014534: 00813483 ld s1,8(sp) + 80014538: 00000693 li a3,0 + 8001453c: 00000613 li a2,0 + 80014540: fff00593 li a1,-1 + 80014544: 00036517 auipc a0,0x36 + 80014548: e1c50513 addi a0,a0,-484 # 8004a360 <_ZL9StateRegs> + 8001454c: 02010113 addi sp,sp,32 + 80014550: ac1eb06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080014554 <_ZL4Syncv>: + 80014554: ff010113 addi sp,sp,-16 + 80014558: 00000513 li a0,0 + 8001455c: 00113423 sd ra,8(sp) + 80014560: 00813023 sd s0,0(sp) + 80014564: 9a1fc0ef jal ra,80010f04 <_Z7setchr8j> + 80014568: 00000613 li a2,0 + 8001456c: 000065b7 lui a1,0x6 + 80014570: 01000513 li a0,16 + 80014574: b74fc0ef jal ra,800108e8 <_Z8setprg8rijj> + 80014578: 001b7417 auipc s0,0x1b7 + 8001457c: 7e540413 addi s0,s0,2021 # 801cbd5d <_ZL3reg> + 80014580: 00044583 lbu a1,0(s0) + 80014584: 00008537 lui a0,0x8 + 80014588: 01f5f593 andi a1,a1,31 + 8001458c: 889fc0ef jal ra,80010e14 <_Z8setprg32jj> + 80014590: 00044503 lbu a0,0(s0) + 80014594: 00013403 ld s0,0(sp) + 80014598: 00813083 ld ra,8(sp) + 8001459c: 00555513 srli a0,a0,0x5 + 800145a0: 00154513 xori a0,a0,1 + 800145a4: 00157513 andi a0,a0,1 + 800145a8: 01010113 addi sp,sp,16 + 800145ac: a9dfc06f j 80011048 <_Z9setmirrori> + +00000000800145b0 <_ZL12StateRestorei>: + 800145b0: fa5ff06f j 80014554 <_ZL4Syncv> + +00000000800145b4 <_ZL9M177Writejh>: + 800145b4: 001b7797 auipc a5,0x1b7 + 800145b8: 7ab784a3 sb a1,1961(a5) # 801cbd5d <_ZL3reg> + 800145bc: f99ff06f j 80014554 <_ZL4Syncv> + +00000000800145c0 <_ZL9M177Closev>: + 800145c0: 001b7517 auipc a0,0x1b7 + 800145c4: 7a053503 ld a0,1952(a0) # 801cbd60 <_ZL4WRAM> + 800145c8: 02050263 beqz a0,800145ec <_ZL9M177Closev+0x2c> + 800145cc: ff010113 addi sp,sp,-16 + 800145d0: 00113423 sd ra,8(sp) + 800145d4: f6dfd0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 800145d8: 00813083 ld ra,8(sp) + 800145dc: 001b7797 auipc a5,0x1b7 + 800145e0: 7807b223 sd zero,1924(a5) # 801cbd60 <_ZL4WRAM> + 800145e4: 01010113 addi sp,sp,16 + 800145e8: 00008067 ret + 800145ec: 001b7797 auipc a5,0x1b7 + 800145f0: 7607ba23 sd zero,1908(a5) # 801cbd60 <_ZL4WRAM> + 800145f4: 00008067 ret + +00000000800145f8 <_ZL9M177Powerv>: + 800145f8: ff010113 addi sp,sp,-16 + 800145fc: 00113423 sd ra,8(sp) + 80014600: 00813023 sd s0,0(sp) + 80014604: 001b7797 auipc a5,0x1b7 + 80014608: 74078ca3 sb zero,1881(a5) # 801cbd5d <_ZL3reg> + 8001460c: 00008437 lui s0,0x8 + 80014610: f45ff0ef jal ra,80014554 <_ZL4Syncv> + 80014614: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 80014618: ffffc617 auipc a2,0xffffc + 8001461c: 04860613 addi a2,a2,72 # 80010660 <_Z6CartBRj> + 80014620: 00006537 lui a0,0x6 + 80014624: 3f81f0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80014628: fff40593 addi a1,s0,-1 + 8001462c: ffffc617 auipc a2,0xffffc + 80014630: 06060613 addi a2,a2,96 # 8001068c <_Z6CartBWjh> + 80014634: 00006537 lui a0,0x6 + 80014638: 4f01f0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001463c: 00010437 lui s0,0x10 + 80014640: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80014644: ffffc617 auipc a2,0xffffc + 80014648: 01c60613 addi a2,a2,28 # 80010660 <_Z6CartBRj> + 8001464c: 00008537 lui a0,0x8 + 80014650: 3cc1f0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80014654: fff40593 addi a1,s0,-1 + 80014658: 00000617 auipc a2,0x0 + 8001465c: f5c60613 addi a2,a2,-164 # 800145b4 <_ZL9M177Writejh> + 80014660: 00008537 lui a0,0x8 + 80014664: 4c41f0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80014668: 00013403 ld s0,0(sp) + 8001466c: 00813083 ld ra,8(sp) + 80014670: 001b7517 auipc a0,0x1b7 + 80014674: 6f852503 lw a0,1784(a0) # 801cbd68 <_ZL8WRAMSIZE> + 80014678: 001b7617 auipc a2,0x1b7 + 8001467c: 6e863603 ld a2,1768(a2) # 801cbd60 <_ZL4WRAM> + 80014680: 000065b7 lui a1,0x6 + 80014684: 00a5551b srliw a0,a0,0xa + 80014688: 01010113 addi sp,sp,16 + 8001468c: 989eb06f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +0000000080014690 <_Z14Mapper177_InitP8CartInfo>: + 80014690: fe010113 addi sp,sp,-32 + 80014694: 00113c23 sd ra,24(sp) + 80014698: 00813823 sd s0,16(sp) + 8001469c: 00913423 sd s1,8(sp) + 800146a0: 01213023 sd s2,0(sp) + 800146a4: 00000797 auipc a5,0x0 + 800146a8: f5478793 addi a5,a5,-172 # 800145f8 <_ZL9M177Powerv> + 800146ac: 00f53023 sd a5,0(a0) + 800146b0: 00000797 auipc a5,0x0 + 800146b4: f1078793 addi a5,a5,-240 # 800145c0 <_ZL9M177Closev> + 800146b8: 00f53823 sd a5,16(a0) + 800146bc: 00000797 auipc a5,0x0 + 800146c0: ef478793 addi a5,a5,-268 # 800145b0 <_ZL12StateRestorei> + 800146c4: 001b7497 auipc s1,0x1b7 + 800146c8: 6a448493 addi s1,s1,1700 # 801cbd68 <_ZL8WRAMSIZE> + 800146cc: 00050413 mv s0,a0 + 800146d0: 001b8717 auipc a4,0x1b8 + 800146d4: f8f73423 sd a5,-120(a4) # 801cc658 + 800146d8: 00002537 lui a0,0x2 + 800146dc: 000027b7 lui a5,0x2 + 800146e0: 00f4a023 sw a5,0(s1) + 800146e4: d89fd0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 800146e8: 0004a603 lw a2,0(s1) + 800146ec: 00050593 mv a1,a0 + 800146f0: 001b7917 auipc s2,0x1b7 + 800146f4: 67090913 addi s2,s2,1648 # 801cbd60 <_ZL4WRAM> + 800146f8: 00100693 li a3,1 + 800146fc: 01000513 li a0,16 + 80014700: 00b93023 sd a1,0(s2) + 80014704: df1fb0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80014708: 0004a583 lw a1,0(s1) + 8001470c: 00093503 ld a0,0(s2) + 80014710: 00031697 auipc a3,0x31 + 80014714: c1868693 addi a3,a3,-1000 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80014718: 00000613 li a2,0 + 8001471c: 8f5eb0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80014720: 04c42783 lw a5,76(s0) + 80014724: 00078a63 beqz a5,80014738 <_Z14Mapper177_InitP8CartInfo+0xa8> + 80014728: 00093703 ld a4,0(s2) + 8001472c: 0004a783 lw a5,0(s1) + 80014730: 00e43c23 sd a4,24(s0) + 80014734: 02f42c23 sw a5,56(s0) + 80014738: 01013403 ld s0,16(sp) + 8001473c: 01813083 ld ra,24(sp) + 80014740: 00813483 ld s1,8(sp) + 80014744: 00013903 ld s2,0(sp) + 80014748: 00000693 li a3,0 + 8001474c: 00000613 li a2,0 + 80014750: fff00593 li a1,-1 + 80014754: 00036517 auipc a0,0x36 + 80014758: ce450513 addi a0,a0,-796 # 8004a438 <_ZL9StateRegs> + 8001475c: 02010113 addi sp,sp,32 + 80014760: 8b1eb06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080014764 <_Z12UpdateOPLNEOPii>: + 80014764: 00058613 mv a2,a1 + 80014768: 00400693 li a3,4 + 8001476c: 00050593 mv a1,a0 + 80014770: 001b7517 auipc a0,0x1b7 + 80014774: 63853503 ld a0,1592(a0) # 801cbda8 <_ZL9VRC7Sound> + 80014778: 0ad1d06f j 80032024 + +000000008001477c <_Z9UpdateOPLi>: + 8001477c: ff010113 addi sp,sp,-16 + 80014780: 00813023 sd s0,0(sp) + 80014784: 00113423 sd ra,8(sp) + 80014788: 001b7417 auipc s0,0x1b7 + 8001478c: 62043403 ld s0,1568(s0) # 801cbda8 <_ZL9VRC7Sound> + 80014790: 04040263 beqz s0,800147d4 <_Z9UpdateOPLi+0x58> + 80014794: 001b7797 auipc a5,0x1b7 + 80014798: 43c7a783 lw a5,1084(a5) # 801cbbd0 + 8001479c: 001b7517 auipc a0,0x1b7 + 800147a0: 3ac52503 lw a0,940(a0) # 801cbb48 + 800147a4: 00f5053b addw a0,a0,a5 + 800147a8: 0105151b slliw a0,a0,0x10 + 800147ac: 02051513 slli a0,a0,0x20 + 800147b0: 001b7597 auipc a1,0x1b7 + 800147b4: 41c5e583 lwu a1,1052(a1) # 801cbbcc + 800147b8: 02055513 srli a0,a0,0x20 + 800147bc: 66c250ef jal ra,80039e28 <__udivdi3> + 800147c0: 001b7597 auipc a1,0x1b7 + 800147c4: 5d45a583 lw a1,1492(a1) # 801cbd94 <_ZL5dwave> + 800147c8: 0045561b srliw a2,a0,0x4 + 800147cc: 40b6063b subw a2,a2,a1 + 800147d0: 00061e63 bnez a2,800147ec <_Z9UpdateOPLi+0x70> + 800147d4: 00813083 ld ra,8(sp) + 800147d8: 00013403 ld s0,0(sp) + 800147dc: 001b7797 auipc a5,0x1b7 + 800147e0: 5a07ac23 sw zero,1464(a5) # 801cbd94 <_ZL5dwave> + 800147e4: 01010113 addi sp,sp,16 + 800147e8: 00008067 ret + 800147ec: 00043797 auipc a5,0x43 + 800147f0: 1dc78793 addi a5,a5,476 # 800579c8 + 800147f4: 00259593 slli a1,a1,0x2 + 800147f8: 00b785b3 add a1,a5,a1 + 800147fc: 00040513 mv a0,s0 + 80014800: 00100693 li a3,1 + 80014804: 0211d0ef jal ra,80032024 + 80014808: 00813083 ld ra,8(sp) + 8001480c: 00013403 ld s0,0(sp) + 80014810: 001b7797 auipc a5,0x1b7 + 80014814: 5807a223 sw zero,1412(a5) # 801cbd94 <_ZL5dwave> + 80014818: 01010113 addi sp,sp,16 + 8001481c: 00008067 ret + +0000000080014820 <_ZL4Syncv>: + 80014820: fe010113 addi sp,sp,-32 + 80014824: 00000613 li a2,0 + 80014828: 000065b7 lui a1,0x6 + 8001482c: 01000513 li a0,16 + 80014830: 00113c23 sd ra,24(sp) + 80014834: 00813823 sd s0,16(sp) + 80014838: 00913423 sd s1,8(sp) + 8001483c: 01213023 sd s2,0(sp) + 80014840: 8a8fc0ef jal ra,800108e8 <_Z8setprg8rijj> + 80014844: 001b7917 auipc s2,0x1b7 + 80014848: 54c90913 addi s2,s2,1356 # 801cbd90 <_ZL4preg> + 8001484c: 00094583 lbu a1,0(s2) + 80014850: 00008537 lui a0,0x8 + 80014854: 001b7497 auipc s1,0x1b7 + 80014858: 52c48493 addi s1,s1,1324 # 801cbd80 <_ZL4creg> + 8001485c: a40fc0ef jal ra,80010a9c <_Z7setprg8jj> + 80014860: 00194583 lbu a1,1(s2) + 80014864: 0000a537 lui a0,0xa + 80014868: 00000413 li s0,0 + 8001486c: a30fc0ef jal ra,80010a9c <_Z7setprg8jj> + 80014870: 00294583 lbu a1,2(s2) + 80014874: 0000c537 lui a0,0xc + 80014878: 00002937 lui s2,0x2 + 8001487c: a20fc0ef jal ra,80010a9c <_Z7setprg8jj> + 80014880: fff00593 li a1,-1 + 80014884: 0000e537 lui a0,0xe + 80014888: a14fc0ef jal ra,80010a9c <_Z7setprg8jj> + 8001488c: 0004c583 lbu a1,0(s1) + 80014890: 00040513 mv a0,s0 + 80014894: 4004041b addiw s0,s0,1024 + 80014898: e0cfc0ef jal ra,80010ea4 <_Z7setchr1jj> + 8001489c: 00148493 addi s1,s1,1 + 800148a0: ff2416e3 bne s0,s2,8001488c <_ZL4Syncv+0x6c> + 800148a4: 001b7797 auipc a5,0x1b7 + 800148a8: 4e47c783 lbu a5,1252(a5) # 801cbd88 <_ZL4mirr> + 800148ac: 0037f793 andi a5,a5,3 + 800148b0: 00200713 li a4,2 + 800148b4: 00200513 li a0,2 + 800148b8: 00e78e63 beq a5,a4,800148d4 <_ZL4Syncv+0xb4> + 800148bc: 00300713 li a4,3 + 800148c0: 00300513 li a0,3 + 800148c4: 00e78863 beq a5,a4,800148d4 <_ZL4Syncv+0xb4> + 800148c8: 00100713 li a4,1 + 800148cc: 00100513 li a0,1 + 800148d0: 00e78e63 beq a5,a4,800148ec <_ZL4Syncv+0xcc> + 800148d4: 01013403 ld s0,16(sp) + 800148d8: 01813083 ld ra,24(sp) + 800148dc: 00813483 ld s1,8(sp) + 800148e0: 00013903 ld s2,0(sp) + 800148e4: 02010113 addi sp,sp,32 + 800148e8: f60fc06f j 80011048 <_Z9setmirrori> + 800148ec: 01013403 ld s0,16(sp) + 800148f0: 01813083 ld ra,24(sp) + 800148f4: 00813483 ld s1,8(sp) + 800148f8: 00013903 ld s2,0(sp) + 800148fc: 00000513 li a0,0 + 80014900: 02010113 addi sp,sp,32 + 80014904: f44fc06f j 80011048 <_Z9setmirrori> + +0000000080014908 <_ZL12StateRestorei>: + 80014908: f19ff06f j 80014820 <_ZL4Syncv> + +000000008001490c <_ZL9VRC7Closev>: + 8001490c: 001b7517 auipc a0,0x1b7 + 80014910: 46c53503 ld a0,1132(a0) # 801cbd78 <_ZL4WRAM> + 80014914: 02050263 beqz a0,80014938 <_ZL9VRC7Closev+0x2c> + 80014918: ff010113 addi sp,sp,-16 + 8001491c: 00113423 sd ra,8(sp) + 80014920: c21fd0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80014924: 00813083 ld ra,8(sp) + 80014928: 001b7797 auipc a5,0x1b7 + 8001492c: 4407b823 sd zero,1104(a5) # 801cbd78 <_ZL4WRAM> + 80014930: 01010113 addi sp,sp,16 + 80014934: 00008067 ret + 80014938: 001b7797 auipc a5,0x1b7 + 8001493c: 4407b023 sd zero,1088(a5) # 801cbd78 <_ZL4WRAM> + 80014940: 00008067 ret + +0000000080014944 <_ZL9VRC7Powerv>: + 80014944: ff010113 addi sp,sp,-16 + 80014948: 00113423 sd ra,8(sp) + 8001494c: 00813023 sd s0,0(sp) + 80014950: ed1ff0ef jal ra,80014820 <_ZL4Syncv> + 80014954: 000085b7 lui a1,0x8 + 80014958: ffffc617 auipc a2,0xffffc + 8001495c: d3460613 addi a2,a2,-716 # 8001068c <_Z6CartBWjh> + 80014960: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80014964: 00006537 lui a0,0x6 + 80014968: 1c01f0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001496c: 00010437 lui s0,0x10 + 80014970: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80014974: ffffc617 auipc a2,0xffffc + 80014978: cec60613 addi a2,a2,-788 # 80010660 <_Z6CartBRj> + 8001497c: 00006537 lui a0,0x6 + 80014980: 09c1f0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80014984: fff40593 addi a1,s0,-1 + 80014988: 00000617 auipc a2,0x0 + 8001498c: 1c060613 addi a2,a2,448 # 80014b48 <_ZL9VRC7Writejh> + 80014990: 00008537 lui a0,0x8 + 80014994: 1941f0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80014998: 00013403 ld s0,0(sp) + 8001499c: 00813083 ld ra,8(sp) + 800149a0: 001b7517 auipc a0,0x1b7 + 800149a4: 40452503 lw a0,1028(a0) # 801cbda4 <_ZL8WRAMSIZE> + 800149a8: 001b7617 auipc a2,0x1b7 + 800149ac: 3d063603 ld a2,976(a2) # 801cbd78 <_ZL4WRAM> + 800149b0: 000065b7 lui a1,0x6 + 800149b4: 00a5551b srliw a0,a0,0xa + 800149b8: 01010113 addi sp,sp,16 + 800149bc: e58eb06f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +00000000800149c0 <_ZL8VRC7_ESIv>: + 800149c0: ff010113 addi sp,sp,-16 + 800149c4: 00113423 sd ra,8(sp) + 800149c8: 00813023 sd s0,0(sp) + 800149cc: 00043797 auipc a5,0x43 + 800149d0: fbc78793 addi a5,a5,-68 # 80057988 + 800149d4: 00000717 auipc a4,0x0 + 800149d8: 09470713 addi a4,a4,148 # 80014a68 <_ZL6VRC7SCv> + 800149dc: 02e7b023 sd a4,32(a5) + 800149e0: 00000717 auipc a4,0x0 + 800149e4: 05070713 addi a4,a4,80 # 80014a30 <_ZL9VRC7SKillv> + 800149e8: 02e7b423 sd a4,40(a5) + 800149ec: 001b4597 auipc a1,0x1b4 + 800149f0: 3305a583 lw a1,816(a1) # 801c8d1c + 800149f4: 00059663 bnez a1,80014a00 <_ZL8VRC7_ESIv+0x40> + 800149f8: 0000c5b7 lui a1,0xc + 800149fc: b8058593 addi a1,a1,-1152 # bb80 <_entry_offset+0xbb80> + 80014a00: 0036a537 lui a0,0x36a + 80014a04: e9950513 addi a0,a0,-359 # 369e99 <_entry_offset+0x369e99> + 80014a08: 0b81e0ef jal ra,80032ac0 + 80014a0c: 001b7417 auipc s0,0x1b7 + 80014a10: 39c40413 addi s0,s0,924 # 801cbda8 <_ZL9VRC7Sound> + 80014a14: 00a43023 sd a0,0(s0) + 80014a18: 08c1e0ef jal ra,80032aa4 + 80014a1c: 00043503 ld a0,0(s0) + 80014a20: 00013403 ld s0,0(sp) + 80014a24: 00813083 ld ra,8(sp) + 80014a28: 01010113 addi sp,sp,16 + 80014a2c: 0781e06f j 80032aa4 + +0000000080014a30 <_ZL9VRC7SKillv>: + 80014a30: 001b7517 auipc a0,0x1b7 + 80014a34: 37853503 ld a0,888(a0) # 801cbda8 <_ZL9VRC7Sound> + 80014a38: 02050263 beqz a0,80014a5c <_ZL9VRC7SKillv+0x2c> + 80014a3c: ff010113 addi sp,sp,-16 + 80014a40: 00113423 sd ra,8(sp) + 80014a44: 5ac1d0ef jal ra,80031ff0 + 80014a48: 00813083 ld ra,8(sp) + 80014a4c: 001b7797 auipc a5,0x1b7 + 80014a50: 3407be23 sd zero,860(a5) # 801cbda8 <_ZL9VRC7Sound> + 80014a54: 01010113 addi sp,sp,16 + 80014a58: 00008067 ret + 80014a5c: 001b7797 auipc a5,0x1b7 + 80014a60: 3407b623 sd zero,844(a5) # 801cbda8 <_ZL9VRC7Sound> + 80014a64: 00008067 ret + +0000000080014a68 <_ZL6VRC7SCv>: + 80014a68: 001b7517 auipc a0,0x1b7 + 80014a6c: 34053503 ld a0,832(a0) # 801cbda8 <_ZL9VRC7Sound> + 80014a70: 00050863 beqz a0,80014a80 <_ZL6VRC7SCv+0x18> + 80014a74: 001b4597 auipc a1,0x1b4 + 80014a78: 2a85a583 lw a1,680(a1) # 801c8d1c + 80014a7c: 5781d06f j 80031ff4 + 80014a80: 00008067 ret + +0000000080014a84 <_ZL11VRC7IRQHooki>: + 80014a84: 001b7797 auipc a5,0x1b7 + 80014a88: 2ec7c783 lbu a5,748(a5) # 801cbd70 <_ZL4IRQa> + 80014a8c: 0a078c63 beqz a5,80014b44 <_ZL11VRC7IRQHooki+0xc0> + 80014a90: fd010113 addi sp,sp,-48 + 80014a94: 01213823 sd s2,16(sp) + 80014a98: 001b7917 auipc s2,0x1b7 + 80014a9c: 2d490913 addi s2,s2,724 # 801cbd6c <_ZL10CycleCount> + 80014aa0: 00092703 lw a4,0(s2) + 80014aa4: 0015179b slliw a5,a0,0x1 + 80014aa8: 00a7853b addw a0,a5,a0 + 80014aac: 00e507bb addw a5,a0,a4 + 80014ab0: 02813023 sd s0,32(sp) + 80014ab4: 00913c23 sd s1,24(sp) + 80014ab8: 01313423 sd s3,8(sp) + 80014abc: 01413023 sd s4,0(sp) + 80014ac0: 02113423 sd ra,40(sp) + 80014ac4: 00f92023 sw a5,0(s2) + 80014ac8: 001b7997 auipc s3,0x1b7 + 80014acc: 2d498993 addi s3,s3,724 # 801cbd9c <_ZL8IRQCount> + 80014ad0: 15400413 li s0,340 + 80014ad4: 10000493 li s1,256 + 80014ad8: 001b7a17 auipc s4,0x1b7 + 80014adc: 2c8a0a13 addi s4,s4,712 # 801cbda0 <_ZL8IRQLatch> + 80014ae0: 0009a703 lw a4,0(s3) + 80014ae4: 00000693 li a3,0 + 80014ae8: 02f45863 bge s0,a5,80014b18 <_ZL11VRC7IRQHooki+0x94> + 80014aec: 0017071b addiw a4,a4,1 + 80014af0: eab7879b addiw a5,a5,-341 + 80014af4: 00100693 li a3,1 + 80014af8: fe9718e3 bne a4,s1,80014ae8 <_ZL11VRC7IRQHooki+0x64> + 80014afc: 000a4703 lbu a4,0(s4) + 80014b00: 00100513 li a0,1 + 80014b04: 00f92023 sw a5,0(s2) + 80014b08: 00e9a023 sw a4,0(s3) + 80014b0c: a2cec0ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 80014b10: 00092783 lw a5,0(s2) + 80014b14: fcdff06f j 80014ae0 <_ZL11VRC7IRQHooki+0x5c> + 80014b18: 00068663 beqz a3,80014b24 <_ZL11VRC7IRQHooki+0xa0> + 80014b1c: 00f92023 sw a5,0(s2) + 80014b20: 00e9a023 sw a4,0(s3) + 80014b24: 02813083 ld ra,40(sp) + 80014b28: 02013403 ld s0,32(sp) + 80014b2c: 01813483 ld s1,24(sp) + 80014b30: 01013903 ld s2,16(sp) + 80014b34: 00813983 ld s3,8(sp) + 80014b38: 00013a03 ld s4,0(sp) + 80014b3c: 03010113 addi sp,sp,48 + 80014b40: 00008067 ret + 80014b44: 00008067 ret + +0000000080014b48 <_ZL9VRC7Writejh>: + 80014b48: 0015179b slliw a5,a0,0x1 + 80014b4c: 0107f793 andi a5,a5,16 + 80014b50: 00a7e533 or a0,a5,a0 + 80014b54: ffff67b7 lui a5,0xffff6 + 80014b58: 00a786bb addw a3,a5,a0 + 80014b5c: 00004737 lui a4,0x4 + 80014b60: 08e6ec63 bltu a3,a4,80014bf8 <_ZL9VRC7Writejh+0xb0> + 80014b64: 000097b7 lui a5,0x9 + 80014b68: 03078713 addi a4,a5,48 # 9030 <_entry_offset+0x9030> + 80014b6c: 12e50463 beq a0,a4,80014c94 <_ZL9VRC7Writejh+0x14c> + 80014b70: 0000f637 lui a2,0xf + 80014b74: 01060693 addi a3,a2,16 # f010 <_entry_offset+0xf010> + 80014b78: 00d57533 and a0,a0,a3 + 80014b7c: 0000e737 lui a4,0xe + 80014b80: 10e50263 beq a0,a4,80014c84 <_ZL9VRC7Writejh+0x13c> + 80014b84: 02a76e63 bltu a4,a0,80014bc0 <_ZL9VRC7Writejh+0x78> + 80014b88: 0ef50663 beq a0,a5,80014c74 <_ZL9VRC7Writejh+0x12c> + 80014b8c: 00a7fc63 bgeu a5,a0,80014ba4 <_ZL9VRC7Writejh+0x5c> + 80014b90: 01078793 addi a5,a5,16 + 80014b94: 0ef51663 bne a0,a5,80014c80 <_ZL9VRC7Writejh+0x138> + 80014b98: 001b7797 auipc a5,0x1b7 + 80014b9c: 20b78023 sb a1,512(a5) # 801cbd98 <_ZL7vrc7idx> + 80014ba0: 00008067 ret + 80014ba4: 000087b7 lui a5,0x8 + 80014ba8: 08f50263 beq a0,a5,80014c2c <_ZL9VRC7Writejh+0xe4> + 80014bac: 01078793 addi a5,a5,16 # 8010 <_entry_offset+0x8010> + 80014bb0: 14f51063 bne a0,a5,80014cf0 <_ZL9VRC7Writejh+0x1a8> + 80014bb4: 001b7797 auipc a5,0x1b7 + 80014bb8: 1cb78ea3 sb a1,477(a5) # 801cbd91 <_ZL4preg+0x1> + 80014bbc: c65ff06f j 80014820 <_ZL4Syncv> + 80014bc0: 06c50c63 beq a0,a2,80014c38 <_ZL9VRC7Writejh+0xf0> + 80014bc4: 00d51e63 bne a0,a3,80014be0 <_ZL9VRC7Writejh+0x98> + 80014bc8: 001b7797 auipc a5,0x1b7 + 80014bcc: 1a97c783 lbu a5,425(a5) # 801cbd71 <_ZL4IRQd> + 80014bd0: 00100513 li a0,1 + 80014bd4: 001b7717 auipc a4,0x1b7 + 80014bd8: 18f70e23 sb a5,412(a4) # 801cbd70 <_ZL4IRQa> + 80014bdc: 974ec06f j 80000d50 <_Z12X6502_IRQEndi> + 80014be0: 01070713 addi a4,a4,16 + 80014be4: 10e51863 bne a0,a4,80014cf4 <_ZL9VRC7Writejh+0x1ac> + 80014be8: 00100513 li a0,1 + 80014bec: 001b7797 auipc a5,0x1b7 + 80014bf0: 1ab78a23 sb a1,436(a5) # 801cbda0 <_ZL8IRQLatch> + 80014bf4: 95cec06f j 80000d50 <_Z12X6502_IRQEndi> + 80014bf8: 0000f737 lui a4,0xf + 80014bfc: 01070713 addi a4,a4,16 # f010 <_entry_offset+0xf010> + 80014c00: 00e57533 and a0,a0,a4 + 80014c04: 0045571b srliw a4,a0,0x4 + 80014c08: 00a7853b addw a0,a5,a0 + 80014c0c: 00b5551b srliw a0,a0,0xb + 80014c10: 00177793 andi a5,a4,1 + 80014c14: 00f56533 or a0,a0,a5 + 80014c18: 001b7797 auipc a5,0x1b7 + 80014c1c: 16878793 addi a5,a5,360 # 801cbd80 <_ZL4creg> + 80014c20: 00a78533 add a0,a5,a0 + 80014c24: 00b50023 sb a1,0(a0) + 80014c28: bf9ff06f j 80014820 <_ZL4Syncv> + 80014c2c: 001b7797 auipc a5,0x1b7 + 80014c30: 16b78223 sb a1,356(a5) # 801cbd90 <_ZL4preg> + 80014c34: bedff06f j 80014820 <_ZL4Syncv> + 80014c38: 0025f793 andi a5,a1,2 + 80014c3c: 0015f593 andi a1,a1,1 + 80014c40: 001b7717 auipc a4,0x1b7 + 80014c44: 12f70823 sb a5,304(a4) # 801cbd70 <_ZL4IRQa> + 80014c48: 001b7717 auipc a4,0x1b7 + 80014c4c: 12b704a3 sb a1,297(a4) # 801cbd71 <_ZL4IRQd> + 80014c50: 00078a63 beqz a5,80014c64 <_ZL9VRC7Writejh+0x11c> + 80014c54: 001b7797 auipc a5,0x1b7 + 80014c58: 14c7c783 lbu a5,332(a5) # 801cbda0 <_ZL8IRQLatch> + 80014c5c: 001b7717 auipc a4,0x1b7 + 80014c60: 14f72023 sw a5,320(a4) # 801cbd9c <_ZL8IRQCount> + 80014c64: 00100513 li a0,1 + 80014c68: 001b7797 auipc a5,0x1b7 + 80014c6c: 1007a223 sw zero,260(a5) # 801cbd6c <_ZL10CycleCount> + 80014c70: 8e0ec06f j 80000d50 <_Z12X6502_IRQEndi> + 80014c74: 001b7797 auipc a5,0x1b7 + 80014c78: 10b78f23 sb a1,286(a5) # 801cbd92 <_ZL4preg+0x2> + 80014c7c: ba5ff06f j 80014820 <_ZL4Syncv> + 80014c80: 00008067 ret + 80014c84: 0035f593 andi a1,a1,3 + 80014c88: 001b7797 auipc a5,0x1b7 + 80014c8c: 10b78023 sb a1,256(a5) # 801cbd88 <_ZL4mirr> + 80014c90: b91ff06f j 80014820 <_ZL4Syncv> + 80014c94: 001b4797 auipc a5,0x1b4 + 80014c98: 0887a783 lw a5,136(a5) # 801c8d1c + 80014c9c: 00079463 bnez a5,80014ca4 <_ZL9VRC7Writejh+0x15c> + 80014ca0: 00008067 ret + 80014ca4: ff010113 addi sp,sp,-16 + 80014ca8: 00058613 mv a2,a1 + 80014cac: 001b7517 auipc a0,0x1b7 + 80014cb0: 0fc53503 ld a0,252(a0) # 801cbda8 <_ZL9VRC7Sound> + 80014cb4: 001b7597 auipc a1,0x1b7 + 80014cb8: 0e45c583 lbu a1,228(a1) # 801cbd98 <_ZL7vrc7idx> + 80014cbc: 00113423 sd ra,8(sp) + 80014cc0: 6301d0ef jal ra,800322f0 + 80014cc4: 00813083 ld ra,8(sp) + 80014cc8: 00043797 auipc a5,0x43 + 80014ccc: cc078793 addi a5,a5,-832 # 80057988 + 80014cd0: 00000717 auipc a4,0x0 + 80014cd4: aac70713 addi a4,a4,-1364 # 8001477c <_Z9UpdateOPLi> + 80014cd8: 00e7b023 sd a4,0(a5) + 80014cdc: 00000717 auipc a4,0x0 + 80014ce0: a8870713 addi a4,a4,-1400 # 80014764 <_Z12UpdateOPLNEOPii> + 80014ce4: 00e7b423 sd a4,8(a5) + 80014ce8: 01010113 addi sp,sp,16 + 80014cec: 00008067 ret + 80014cf0: 00008067 ret + 80014cf4: 00008067 ret + +0000000080014cf8 <_Z13Mapper85_InitP8CartInfo>: + 80014cf8: fe010113 addi sp,sp,-32 + 80014cfc: 00113c23 sd ra,24(sp) + 80014d00: 00813823 sd s0,16(sp) + 80014d04: 00913423 sd s1,8(sp) + 80014d08: 01213023 sd s2,0(sp) + 80014d0c: 00000797 auipc a5,0x0 + 80014d10: c3878793 addi a5,a5,-968 # 80014944 <_ZL9VRC7Powerv> + 80014d14: 00f53023 sd a5,0(a0) + 80014d18: 00000797 auipc a5,0x0 + 80014d1c: bf478793 addi a5,a5,-1036 # 8001490c <_ZL9VRC7Closev> + 80014d20: 00f53823 sd a5,16(a0) + 80014d24: 00000797 auipc a5,0x0 + 80014d28: d6078793 addi a5,a5,-672 # 80014a84 <_ZL11VRC7IRQHooki> + 80014d2c: 001b7497 auipc s1,0x1b7 + 80014d30: 07848493 addi s1,s1,120 # 801cbda4 <_ZL8WRAMSIZE> + 80014d34: 00050413 mv s0,a0 + 80014d38: 001b7717 auipc a4,0x1b7 + 80014d3c: e0f73423 sd a5,-504(a4) # 801cbb40 + 80014d40: 00002537 lui a0,0x2 + 80014d44: 000027b7 lui a5,0x2 + 80014d48: 00f4a023 sw a5,0(s1) + 80014d4c: f20fd0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80014d50: 0004a603 lw a2,0(s1) + 80014d54: 00050593 mv a1,a0 + 80014d58: 001b7917 auipc s2,0x1b7 + 80014d5c: 02090913 addi s2,s2,32 # 801cbd78 <_ZL4WRAM> + 80014d60: 00100693 li a3,1 + 80014d64: 01000513 li a0,16 + 80014d68: 00b93023 sd a1,0(s2) + 80014d6c: f88fb0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80014d70: 0004a583 lw a1,0(s1) + 80014d74: 00093503 ld a0,0(s2) + 80014d78: 00030697 auipc a3,0x30 + 80014d7c: 5b068693 addi a3,a3,1456 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80014d80: 00000613 li a2,0 + 80014d84: a8ceb0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80014d88: 04c42783 lw a5,76(s0) + 80014d8c: 00078a63 beqz a5,80014da0 <_Z13Mapper85_InitP8CartInfo+0xa8> + 80014d90: 00093703 ld a4,0(s2) + 80014d94: 0004a783 lw a5,0(s1) + 80014d98: 00e43c23 sd a4,24(s0) + 80014d9c: 02f42c23 sw a5,56(s0) + 80014da0: 00000797 auipc a5,0x0 + 80014da4: b6878793 addi a5,a5,-1176 # 80014908 <_ZL12StateRestorei> + 80014da8: 001b8717 auipc a4,0x1b8 + 80014dac: 8af73823 sd a5,-1872(a4) # 801cc658 + 80014db0: c11ff0ef jal ra,800149c0 <_ZL8VRC7_ESIv> + 80014db4: 01013403 ld s0,16(sp) + 80014db8: 01813083 ld ra,24(sp) + 80014dbc: 00813483 ld s1,8(sp) + 80014dc0: 00013903 ld s2,0(sp) + 80014dc4: 00000693 li a3,0 + 80014dc8: 00000613 li a2,0 + 80014dcc: fff00593 li a1,-1 + 80014dd0: 00035517 auipc a0,0x35 + 80014dd4: 69850513 addi a0,a0,1688 # 8004a468 <_ZL9StateRegs> + 80014dd8: 02010113 addi sp,sp,32 + 80014ddc: a34eb06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080014de0 <_ZL4Syncv>: + 80014de0: fe010113 addi sp,sp,-32 + 80014de4: 00913423 sd s1,8(sp) + 80014de8: 001b7497 auipc s1,0x1b7 + 80014dec: fd848493 addi s1,s1,-40 # 801cbdc0 <_ZL5pregs> + 80014df0: 0004c583 lbu a1,0(s1) + 80014df4: 00008537 lui a0,0x8 + 80014df8: 00113c23 sd ra,24(sp) + 80014dfc: 00813823 sd s0,16(sp) + 80014e00: c9dfb0ef jal ra,80010a9c <_Z7setprg8jj> + 80014e04: 0014c583 lbu a1,1(s1) + 80014e08: 0000a537 lui a0,0xa + 80014e0c: 001b7417 auipc s0,0x1b7 + 80014e10: fac40413 addi s0,s0,-84 # 801cbdb8 <_ZL5cregs> + 80014e14: c89fb0ef jal ra,80010a9c <_Z7setprg8jj> + 80014e18: ffe00593 li a1,-2 + 80014e1c: 0000c537 lui a0,0xc + 80014e20: c7dfb0ef jal ra,80010a9c <_Z7setprg8jj> + 80014e24: fff00593 li a1,-1 + 80014e28: 0000e537 lui a0,0xe + 80014e2c: c71fb0ef jal ra,80010a9c <_Z7setprg8jj> + 80014e30: 00044583 lbu a1,0(s0) + 80014e34: 00000513 li a0,0 + 80014e38: 88cfc0ef jal ra,80010ec4 <_Z7setchr2jj> + 80014e3c: 00144583 lbu a1,1(s0) + 80014e40: 00001537 lui a0,0x1 + 80014e44: 80050513 addi a0,a0,-2048 # 800 <_entry_offset+0x800> + 80014e48: 87cfc0ef jal ra,80010ec4 <_Z7setchr2jj> + 80014e4c: 00244583 lbu a1,2(s0) + 80014e50: 00001537 lui a0,0x1 + 80014e54: 870fc0ef jal ra,80010ec4 <_Z7setchr2jj> + 80014e58: 00344583 lbu a1,3(s0) + 80014e5c: 01013403 ld s0,16(sp) + 80014e60: 01813083 ld ra,24(sp) + 80014e64: 00813483 ld s1,8(sp) + 80014e68: 00002537 lui a0,0x2 + 80014e6c: 80050513 addi a0,a0,-2048 # 1800 <_entry_offset+0x1800> + 80014e70: 02010113 addi sp,sp,32 + 80014e74: 850fc06f j 80010ec4 <_Z7setchr2jj> + +0000000080014e78 <_ZL12StateRestorei>: + 80014e78: f69ff06f j 80014de0 <_ZL4Syncv> + +0000000080014e7c <_ZL9M91Write0jh>: + 80014e7c: 00357793 andi a5,a0,3 + 80014e80: 001b7517 auipc a0,0x1b7 + 80014e84: f3850513 addi a0,a0,-200 # 801cbdb8 <_ZL5cregs> + 80014e88: 00f50533 add a0,a0,a5 + 80014e8c: 00b50023 sb a1,0(a0) + 80014e90: f51ff06f j 80014de0 <_ZL4Syncv> + +0000000080014e94 <_ZL10M91IRQHookv>: + 80014e94: 001b7717 auipc a4,0x1b7 + 80014e98: f2e70713 addi a4,a4,-210 # 801cbdc2 <_ZL8IRQCount> + 80014e9c: 00074783 lbu a5,0(a4) + 80014ea0: 00700693 li a3,7 + 80014ea4: 02f6e263 bltu a3,a5,80014ec8 <_ZL10M91IRQHookv+0x34> + 80014ea8: 001b7697 auipc a3,0x1b7 + 80014eac: f086c683 lbu a3,-248(a3) # 801cbdb0 <_ZL4IRQa> + 80014eb0: 00068c63 beqz a3,80014ec8 <_ZL10M91IRQHookv+0x34> + 80014eb4: 0017879b addiw a5,a5,1 + 80014eb8: 0ff7f793 andi a5,a5,255 + 80014ebc: 00f70023 sb a5,0(a4) + 80014ec0: 00800713 li a4,8 + 80014ec4: 00e78463 beq a5,a4,80014ecc <_ZL10M91IRQHookv+0x38> + 80014ec8: 00008067 ret + 80014ecc: 00100513 li a0,1 + 80014ed0: e69eb06f j 80000d38 <_Z14X6502_IRQBegini> + +0000000080014ed4 <_ZL8M91Powerv>: + 80014ed4: ff010113 addi sp,sp,-16 + 80014ed8: 00113423 sd ra,8(sp) + 80014edc: f05ff0ef jal ra,80014de0 <_ZL4Syncv> + 80014ee0: 000075b7 lui a1,0x7 + 80014ee4: 00000617 auipc a2,0x0 + 80014ee8: f9860613 addi a2,a2,-104 # 80014e7c <_ZL9M91Write0jh> + 80014eec: fff58593 addi a1,a1,-1 # 6fff <_entry_offset+0x6fff> + 80014ef0: 00006537 lui a0,0x6 + 80014ef4: 4351e0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80014ef8: 000085b7 lui a1,0x8 + 80014efc: 00000617 auipc a2,0x0 + 80014f00: 03460613 addi a2,a2,52 # 80014f30 <_ZL9M91Write1jh> + 80014f04: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80014f08: 00007537 lui a0,0x7 + 80014f0c: 41d1e0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80014f10: 00813083 ld ra,8(sp) + 80014f14: 000105b7 lui a1,0x10 + 80014f18: ffffb617 auipc a2,0xffffb + 80014f1c: 74860613 addi a2,a2,1864 # 80010660 <_Z6CartBRj> + 80014f20: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80014f24: 00008537 lui a0,0x8 + 80014f28: 01010113 addi sp,sp,16 + 80014f2c: 2f11e06f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080014f30 <_ZL9M91Write1jh>: + 80014f30: 00357793 andi a5,a0,3 + 80014f34: 00200713 li a4,2 + 80014f38: 02e78263 beq a5,a4,80014f5c <_ZL9M91Write1jh+0x2c> + 80014f3c: 00300713 li a4,3 + 80014f40: 02e78a63 beq a5,a4,80014f74 <_ZL9M91Write1jh+0x44> + 80014f44: 00157513 andi a0,a0,1 + 80014f48: 001b7797 auipc a5,0x1b7 + 80014f4c: e7878793 addi a5,a5,-392 # 801cbdc0 <_ZL5pregs> + 80014f50: 00a78533 add a0,a5,a0 + 80014f54: 00b50023 sb a1,0(a0) # 8000 <_entry_offset+0x8000> + 80014f58: e89ff06f j 80014de0 <_ZL4Syncv> + 80014f5c: 00100513 li a0,1 + 80014f60: 001b7797 auipc a5,0x1b7 + 80014f64: e6078123 sb zero,-414(a5) # 801cbdc2 <_ZL8IRQCount> + 80014f68: 001b7797 auipc a5,0x1b7 + 80014f6c: e4078423 sb zero,-440(a5) # 801cbdb0 <_ZL4IRQa> + 80014f70: de1eb06f j 80000d50 <_Z12X6502_IRQEndi> + 80014f74: 00100793 li a5,1 + 80014f78: 00100513 li a0,1 + 80014f7c: 001b7717 auipc a4,0x1b7 + 80014f80: e2f70a23 sb a5,-460(a4) # 801cbdb0 <_ZL4IRQa> + 80014f84: dcdeb06f j 80000d50 <_Z12X6502_IRQEndi> + +0000000080014f88 <_Z13Mapper91_InitP8CartInfo>: + 80014f88: 00000797 auipc a5,0x0 + 80014f8c: f4c78793 addi a5,a5,-180 # 80014ed4 <_ZL8M91Powerv> + 80014f90: 00f53023 sd a5,0(a0) + 80014f94: 00000797 auipc a5,0x0 + 80014f98: f0078793 addi a5,a5,-256 # 80014e94 <_ZL10M91IRQHookv> + 80014f9c: 001b7717 auipc a4,0x1b7 + 80014fa0: 72f73223 sd a5,1828(a4) # 801cc6c0 + 80014fa4: 00000797 auipc a5,0x0 + 80014fa8: ed478793 addi a5,a5,-300 # 80014e78 <_ZL12StateRestorei> + 80014fac: 00000693 li a3,0 + 80014fb0: 00000613 li a2,0 + 80014fb4: fff00593 li a1,-1 + 80014fb8: 00035517 auipc a0,0x35 + 80014fbc: 5b850513 addi a0,a0,1464 # 8004a570 <_ZL9StateRegs> + 80014fc0: 001b7717 auipc a4,0x1b7 + 80014fc4: 68f73c23 sd a5,1688(a4) # 801cc658 + 80014fc8: 848eb06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080014fcc <_ZL4Syncv>: + 80014fcc: fe010113 addi sp,sp,-32 + 80014fd0: 00813823 sd s0,16(sp) + 80014fd4: 001b7417 auipc s0,0x1b7 + 80014fd8: def40413 addi s0,s0,-529 # 801cbdc3 <_ZL4reg0> + 80014fdc: 00913423 sd s1,8(sp) + 80014fe0: 00044783 lbu a5,0(s0) + 80014fe4: 001b7497 auipc s1,0x1b7 + 80014fe8: de048493 addi s1,s1,-544 # 801cbdc4 <_ZL4reg1> + 80014fec: 0004c583 lbu a1,0(s1) + 80014ff0: 0017979b slliw a5,a5,0x1 + 80014ff4: 01e7f793 andi a5,a5,30 + 80014ff8: 0015f593 andi a1,a1,1 + 80014ffc: 00008537 lui a0,0x8 + 80015000: 00f5e5b3 or a1,a1,a5 + 80015004: 00113c23 sd ra,24(sp) + 80015008: e0dfb0ef jal ra,80010e14 <_Z8setprg32jj> + 8001500c: 0004c503 lbu a0,0(s1) + 80015010: 00044783 lbu a5,0(s0) + 80015014: 01013403 ld s0,16(sp) + 80015018: 01813083 ld ra,24(sp) + 8001501c: 00813483 ld s1,8(sp) + 80015020: 4045551b sraiw a0,a0,0x4 + 80015024: 4017d79b sraiw a5,a5,0x1 + 80015028: 00757513 andi a0,a0,7 + 8001502c: 0787f793 andi a5,a5,120 + 80015030: 00f56533 or a0,a0,a5 + 80015034: 02010113 addi sp,sp,32 + 80015038: ecdfb06f j 80010f04 <_Z7setchr8j> + +000000008001503c <_ZL12StateRestorei>: + 8001503c: f91ff06f j 80014fcc <_ZL4Syncv> + +0000000080015040 <_ZL8M46Resetv>: + 80015040: 001b7797 auipc a5,0x1b7 + 80015044: d8078223 sb zero,-636(a5) # 801cbdc4 <_ZL4reg1> + 80015048: 001b7797 auipc a5,0x1b7 + 8001504c: d6078da3 sb zero,-645(a5) # 801cbdc3 <_ZL4reg0> + 80015050: f7dff06f j 80014fcc <_ZL4Syncv> + +0000000080015054 <_ZL9M46Write1jh>: + 80015054: 001b7797 auipc a5,0x1b7 + 80015058: d6b78823 sb a1,-656(a5) # 801cbdc4 <_ZL4reg1> + 8001505c: f71ff06f j 80014fcc <_ZL4Syncv> + +0000000080015060 <_ZL9M46Write0jh>: + 80015060: 001b7797 auipc a5,0x1b7 + 80015064: d6b781a3 sb a1,-669(a5) # 801cbdc3 <_ZL4reg0> + 80015068: f65ff06f j 80014fcc <_ZL4Syncv> + +000000008001506c <_ZL8M46Powerv>: + 8001506c: ff010113 addi sp,sp,-16 + 80015070: 00113423 sd ra,8(sp) + 80015074: 00813023 sd s0,0(sp) + 80015078: 001b7797 auipc a5,0x1b7 + 8001507c: d4078623 sb zero,-692(a5) # 801cbdc4 <_ZL4reg1> + 80015080: 00010437 lui s0,0x10 + 80015084: 001b7797 auipc a5,0x1b7 + 80015088: d2078fa3 sb zero,-705(a5) # 801cbdc3 <_ZL4reg0> + 8001508c: f41ff0ef jal ra,80014fcc <_ZL4Syncv> + 80015090: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80015094: ffffb617 auipc a2,0xffffb + 80015098: 5cc60613 addi a2,a2,1484 # 80010660 <_Z6CartBRj> + 8001509c: 00008537 lui a0,0x8 + 800150a0: 17d1e0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800150a4: 000085b7 lui a1,0x8 + 800150a8: 00000617 auipc a2,0x0 + 800150ac: fb860613 addi a2,a2,-72 # 80015060 <_ZL9M46Write0jh> + 800150b0: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 800150b4: 00006537 lui a0,0x6 + 800150b8: 2711e0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800150bc: fff40593 addi a1,s0,-1 + 800150c0: 00013403 ld s0,0(sp) + 800150c4: 00813083 ld ra,8(sp) + 800150c8: 00000617 auipc a2,0x0 + 800150cc: f8c60613 addi a2,a2,-116 # 80015054 <_ZL9M46Write1jh> + 800150d0: 00008537 lui a0,0x8 + 800150d4: 01010113 addi sp,sp,16 + 800150d8: 2511e06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +00000000800150dc <_Z13Mapper46_InitP8CartInfo>: + 800150dc: 00000797 auipc a5,0x0 + 800150e0: f9078793 addi a5,a5,-112 # 8001506c <_ZL8M46Powerv> + 800150e4: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 800150e8: 00000797 auipc a5,0x0 + 800150ec: f5878793 addi a5,a5,-168 # 80015040 <_ZL8M46Resetv> + 800150f0: 00f53423 sd a5,8(a0) + 800150f4: 00000797 auipc a5,0x0 + 800150f8: f4878793 addi a5,a5,-184 # 8001503c <_ZL12StateRestorei> + 800150fc: 00000693 li a3,0 + 80015100: 00000613 li a2,0 + 80015104: fff00593 li a1,-1 + 80015108: 00035517 auipc a0,0x35 + 8001510c: 4e050513 addi a0,a0,1248 # 8004a5e8 <_ZL9StateRegs> + 80015110: 001b7717 auipc a4,0x1b7 + 80015114: 54f73423 sd a5,1352(a4) # 801cc658 + 80015118: ef9ea06f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001511c <_ZL4Syncv>: + 8001511c: ff010113 addi sp,sp,-16 + 80015120: 00813023 sd s0,0(sp) + 80015124: 001b7417 auipc s0,0x1b7 + 80015128: ca440413 addi s0,s0,-860 # 801cbdc8 <_ZL4regs> + 8001512c: 00044583 lbu a1,0(s0) + 80015130: 00008537 lui a0,0x8 + 80015134: 00113423 sd ra,8(sp) + 80015138: 965fb0ef jal ra,80010a9c <_Z7setprg8jj> + 8001513c: 00244583 lbu a1,2(s0) + 80015140: 0000a537 lui a0,0xa + 80015144: 959fb0ef jal ra,80010a9c <_Z7setprg8jj> + 80015148: 00444583 lbu a1,4(s0) + 8001514c: 0000c537 lui a0,0xc + 80015150: 94dfb0ef jal ra,80010a9c <_Z7setprg8jj> + 80015154: fff00593 li a1,-1 + 80015158: 0000e537 lui a0,0xe + 8001515c: 941fb0ef jal ra,80010a9c <_Z7setprg8jj> + 80015160: 00644583 lbu a1,6(s0) + 80015164: 00000513 li a0,0 + 80015168: d7dfb0ef jal ra,80010ee4 <_Z7setchr4jj> + 8001516c: 00744583 lbu a1,7(s0) + 80015170: 00013403 ld s0,0(sp) + 80015174: 00813083 ld ra,8(sp) + 80015178: 00001537 lui a0,0x1 + 8001517c: 01010113 addi sp,sp,16 + 80015180: d65fb06f j 80010ee4 <_Z7setchr4jj> + +0000000080015184 <_ZL12StateRestorei>: + 80015184: f99ff06f j 8001511c <_ZL4Syncv> + +0000000080015188 <_ZL9M151Writejh>: + 80015188: 00c5551b srliw a0,a0,0xc + 8001518c: 00757513 andi a0,a0,7 + 80015190: 001b7797 auipc a5,0x1b7 + 80015194: c3878793 addi a5,a5,-968 # 801cbdc8 <_ZL4regs> + 80015198: 00a78533 add a0,a5,a0 + 8001519c: 00b50023 sb a1,0(a0) # 1000 <_entry_offset+0x1000> + 800151a0: f7dff06f j 8001511c <_ZL4Syncv> + +00000000800151a4 <_ZL9M151Powerv>: + 800151a4: ff010113 addi sp,sp,-16 + 800151a8: 00113423 sd ra,8(sp) + 800151ac: 00813023 sd s0,0(sp) + 800151b0: f6dff0ef jal ra,8001511c <_ZL4Syncv> + 800151b4: 00010437 lui s0,0x10 + 800151b8: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 800151bc: ffffb617 auipc a2,0xffffb + 800151c0: 4a460613 addi a2,a2,1188 # 80010660 <_Z6CartBRj> + 800151c4: 00008537 lui a0,0x8 + 800151c8: 0551e0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800151cc: fff40593 addi a1,s0,-1 + 800151d0: 00013403 ld s0,0(sp) + 800151d4: 00813083 ld ra,8(sp) + 800151d8: 00000617 auipc a2,0x0 + 800151dc: fb060613 addi a2,a2,-80 # 80015188 <_ZL9M151Writejh> + 800151e0: 00008537 lui a0,0x8 + 800151e4: 01010113 addi sp,sp,16 + 800151e8: 1411e06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +00000000800151ec <_Z14Mapper151_InitP8CartInfo>: + 800151ec: 00000797 auipc a5,0x0 + 800151f0: fb878793 addi a5,a5,-72 # 800151a4 <_ZL9M151Powerv> + 800151f4: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 800151f8: 00000797 auipc a5,0x0 + 800151fc: f8c78793 addi a5,a5,-116 # 80015184 <_ZL12StateRestorei> + 80015200: 00000693 li a3,0 + 80015204: 00000613 li a2,0 + 80015208: fff00593 li a1,-1 + 8001520c: 00035517 auipc a0,0x35 + 80015210: 42450513 addi a0,a0,1060 # 8004a630 <_ZL9StateRegs> + 80015214: 001b7717 auipc a4,0x1b7 + 80015218: 44f73223 sd a5,1092(a4) # 801cc658 + 8001521c: df5ea06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080015220 <_ZL4Syncv>: + 80015220: fe010113 addi sp,sp,-32 + 80015224: 00113c23 sd ra,24(sp) + 80015228: 00813823 sd s0,16(sp) + 8001522c: 00913423 sd s1,8(sp) + 80015230: 001b7717 auipc a4,0x1b7 + 80015234: ba070713 addi a4,a4,-1120 # 801cbdd0 <_ZL4regs> + 80015238: 00174683 lbu a3,1(a4) + 8001523c: 00074403 lbu s0,0(a4) + 80015240: 00274783 lbu a5,2(a4) + 80015244: 00374703 lbu a4,3(a4) + 80015248: 0086c433 xor s0,a3,s0 + 8001524c: 0014141b slliw s0,s0,0x1 + 80015250: 00e7c7b3 xor a5,a5,a4 + 80015254: 02047413 andi s0,s0,32 + 80015258: 0086f713 andi a4,a3,8 + 8001525c: 0004041b sext.w s0,s0 + 80015260: 0ff7f793 andi a5,a5,255 + 80015264: 04070663 beqz a4,800152b0 <_ZL4Syncv+0x90> + 80015268: 01e7f793 andi a5,a5,30 + 8001526c: 008784bb addw s1,a5,s0 + 80015270: 001b7717 auipc a4,0x1b7 + 80015274: b6474703 lbu a4,-1180(a4) # 801cbdd4 <_ZL5is167> + 80015278: 0014841b addiw s0,s1,1 + 8001527c: 0a070863 beqz a4,8001532c <_ZL4Syncv+0x10c> + 80015280: 00040593 mv a1,s0 + 80015284: 00008537 lui a0,0x8 + 80015288: 9d1fb0ef jal ra,80010c58 <_Z8setprg16jj> + 8001528c: 00048593 mv a1,s1 + 80015290: 0000c537 lui a0,0xc + 80015294: 9c5fb0ef jal ra,80010c58 <_Z8setprg16jj> + 80015298: 01013403 ld s0,16(sp) + 8001529c: 01813083 ld ra,24(sp) + 800152a0: 00813483 ld s1,8(sp) + 800152a4: 00000513 li a0,0 + 800152a8: 02010113 addi sp,sp,32 + 800152ac: c59fb06f j 80010f04 <_Z7setchr8j> + 800152b0: 01f7f793 andi a5,a5,31 + 800152b4: 0046f693 andi a3,a3,4 + 800152b8: 0087843b addw s0,a5,s0 + 800152bc: 02068a63 beqz a3,800152f0 <_ZL4Syncv+0xd0> + 800152c0: 00008537 lui a0,0x8 + 800152c4: 01f00593 li a1,31 + 800152c8: 991fb0ef jal ra,80010c58 <_Z8setprg16jj> + 800152cc: 00040593 mv a1,s0 + 800152d0: 0000c537 lui a0,0xc + 800152d4: 985fb0ef jal ra,80010c58 <_Z8setprg16jj> + 800152d8: 01013403 ld s0,16(sp) + 800152dc: 01813083 ld ra,24(sp) + 800152e0: 00813483 ld s1,8(sp) + 800152e4: 00000513 li a0,0 + 800152e8: 02010113 addi sp,sp,32 + 800152ec: c19fb06f j 80010f04 <_Z7setchr8j> + 800152f0: 00040593 mv a1,s0 + 800152f4: 00008537 lui a0,0x8 + 800152f8: 961fb0ef jal ra,80010c58 <_Z8setprg16jj> + 800152fc: 001b7797 auipc a5,0x1b7 + 80015300: ad87c783 lbu a5,-1320(a5) # 801cbdd4 <_ZL5is167> + 80015304: 04078c63 beqz a5,8001535c <_ZL4Syncv+0x13c> + 80015308: 0000c537 lui a0,0xc + 8001530c: 02000593 li a1,32 + 80015310: 949fb0ef jal ra,80010c58 <_Z8setprg16jj> + 80015314: 01013403 ld s0,16(sp) + 80015318: 01813083 ld ra,24(sp) + 8001531c: 00813483 ld s1,8(sp) + 80015320: 00000513 li a0,0 + 80015324: 02010113 addi sp,sp,32 + 80015328: bddfb06f j 80010f04 <_Z7setchr8j> + 8001532c: 00048593 mv a1,s1 + 80015330: 00008537 lui a0,0x8 + 80015334: 925fb0ef jal ra,80010c58 <_Z8setprg16jj> + 80015338: 00040593 mv a1,s0 + 8001533c: 0000c537 lui a0,0xc + 80015340: 919fb0ef jal ra,80010c58 <_Z8setprg16jj> + 80015344: 01013403 ld s0,16(sp) + 80015348: 01813083 ld ra,24(sp) + 8001534c: 00813483 ld s1,8(sp) + 80015350: 00000513 li a0,0 + 80015354: 02010113 addi sp,sp,32 + 80015358: badfb06f j 80010f04 <_Z7setchr8j> + 8001535c: 0000c537 lui a0,0xc + 80015360: 00700593 li a1,7 + 80015364: 8f5fb0ef jal ra,80010c58 <_Z8setprg16jj> + 80015368: 01013403 ld s0,16(sp) + 8001536c: 01813083 ld ra,24(sp) + 80015370: 00813483 ld s1,8(sp) + 80015374: 00000513 li a0,0 + 80015378: 02010113 addi sp,sp,32 + 8001537c: b89fb06f j 80010f04 <_Z7setchr8j> + +0000000080015380 <_ZL12StateRestorei>: + 80015380: ea1ff06f j 80015220 <_ZL4Syncv> + +0000000080015384 <_ZL9M166Writejh>: + 80015384: 00d5551b srliw a0,a0,0xd + 80015388: 00357513 andi a0,a0,3 + 8001538c: 001b7797 auipc a5,0x1b7 + 80015390: a4478793 addi a5,a5,-1468 # 801cbdd0 <_ZL4regs> + 80015394: 00a78533 add a0,a5,a0 + 80015398: 00b50023 sb a1,0(a0) # c000 <_entry_offset+0xc000> + 8001539c: e85ff06f j 80015220 <_ZL4Syncv> + +00000000800153a0 <_ZL9M166Powerv>: + 800153a0: ff010113 addi sp,sp,-16 + 800153a4: 00113423 sd ra,8(sp) + 800153a8: 00813023 sd s0,0(sp) + 800153ac: 001b7797 auipc a5,0x1b7 + 800153b0: a207a223 sw zero,-1500(a5) # 801cbdd0 <_ZL4regs> + 800153b4: 00010437 lui s0,0x10 + 800153b8: e69ff0ef jal ra,80015220 <_ZL4Syncv> + 800153bc: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 800153c0: ffffb617 auipc a2,0xffffb + 800153c4: 2a060613 addi a2,a2,672 # 80010660 <_Z6CartBRj> + 800153c8: 00008537 lui a0,0x8 + 800153cc: 6501e0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800153d0: fff40593 addi a1,s0,-1 + 800153d4: 00013403 ld s0,0(sp) + 800153d8: 00813083 ld ra,8(sp) + 800153dc: 00000617 auipc a2,0x0 + 800153e0: fa860613 addi a2,a2,-88 # 80015384 <_ZL9M166Writejh> + 800153e4: 00008537 lui a0,0x8 + 800153e8: 01010113 addi sp,sp,16 + 800153ec: 73c1e06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +00000000800153f0 <_Z14Mapper166_InitP8CartInfo>: + 800153f0: 00000797 auipc a5,0x0 + 800153f4: fb078793 addi a5,a5,-80 # 800153a0 <_ZL9M166Powerv> + 800153f8: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 800153fc: 001b7797 auipc a5,0x1b7 + 80015400: 9c078c23 sb zero,-1576(a5) # 801cbdd4 <_ZL5is167> + 80015404: 00000797 auipc a5,0x0 + 80015408: f7c78793 addi a5,a5,-132 # 80015380 <_ZL12StateRestorei> + 8001540c: 00000693 li a3,0 + 80015410: 00000613 li a2,0 + 80015414: fff00593 li a1,-1 + 80015418: 00035517 auipc a0,0x35 + 8001541c: 24850513 addi a0,a0,584 # 8004a660 <_ZL9StateRegs> + 80015420: 001b7717 auipc a4,0x1b7 + 80015424: 22f73c23 sd a5,568(a4) # 801cc658 + 80015428: be9ea06f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001542c <_Z14Mapper167_InitP8CartInfo>: + 8001542c: 00000797 auipc a5,0x0 + 80015430: f7478793 addi a5,a5,-140 # 800153a0 <_ZL9M166Powerv> + 80015434: 00f53023 sd a5,0(a0) + 80015438: 00100793 li a5,1 + 8001543c: 001b7717 auipc a4,0x1b7 + 80015440: 98f70c23 sb a5,-1640(a4) # 801cbdd4 <_ZL5is167> + 80015444: 00000797 auipc a5,0x0 + 80015448: f3c78793 addi a5,a5,-196 # 80015380 <_ZL12StateRestorei> + 8001544c: 00000693 li a3,0 + 80015450: 00000613 li a2,0 + 80015454: fff00593 li a1,-1 + 80015458: 00035517 auipc a0,0x35 + 8001545c: 20850513 addi a0,a0,520 # 8004a660 <_ZL9StateRegs> + 80015460: 001b7717 auipc a4,0x1b7 + 80015464: 1ef73c23 sd a5,504(a4) # 801cc658 + 80015468: ba9ea06f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001546c <_ZL4Syncv>: + 8001546c: fe010113 addi sp,sp,-32 + 80015470: 00813823 sd s0,16(sp) + 80015474: 001b7417 auipc s0,0x1b7 + 80015478: 96440413 addi s0,s0,-1692 # 801cbdd8 <_ZL3reg> + 8001547c: 00044583 lbu a1,0(s0) + 80015480: 00000513 li a0,0 + 80015484: 00113c23 sd ra,24(sp) + 80015488: 0015d593 srli a1,a1,0x1 + 8001548c: 00913423 sd s1,8(sp) + 80015490: 01213023 sd s2,0(sp) + 80015494: a31fb0ef jal ra,80010ec4 <_Z7setchr2jj> + 80015498: 00144583 lbu a1,1(s0) + 8001549c: 00001937 lui s2,0x1 + 800154a0: 80090513 addi a0,s2,-2048 # 800 <_entry_offset+0x800> + 800154a4: 0015d593 srli a1,a1,0x1 + 800154a8: a1dfb0ef jal ra,80010ec4 <_Z7setchr2jj> + 800154ac: 00244583 lbu a1,2(s0) + 800154b0: 00001537 lui a0,0x1 + 800154b4: 000024b7 lui s1,0x2 + 800154b8: 0405e593 ori a1,a1,64 + 800154bc: 9e9fb0ef jal ra,80010ea4 <_Z7setchr1jj> + 800154c0: 00344583 lbu a1,3(s0) + 800154c4: 40090513 addi a0,s2,1024 + 800154c8: 0405e593 ori a1,a1,64 + 800154cc: 9d9fb0ef jal ra,80010ea4 <_Z7setchr1jj> + 800154d0: 00444583 lbu a1,4(s0) + 800154d4: 80048513 addi a0,s1,-2048 # 1800 <_entry_offset+0x1800> + 800154d8: 0405e593 ori a1,a1,64 + 800154dc: 9c9fb0ef jal ra,80010ea4 <_Z7setchr1jj> + 800154e0: 00544583 lbu a1,5(s0) + 800154e4: c0048513 addi a0,s1,-1024 + 800154e8: 0405e593 ori a1,a1,64 + 800154ec: 9b9fb0ef jal ra,80010ea4 <_Z7setchr1jj> + 800154f0: 00644583 lbu a1,6(s0) + 800154f4: 00008537 lui a0,0x8 + 800154f8: da4fb0ef jal ra,80010a9c <_Z7setprg8jj> + 800154fc: 00744583 lbu a1,7(s0) + 80015500: 0000a537 lui a0,0xa + 80015504: d98fb0ef jal ra,80010a9c <_Z7setprg8jj> + 80015508: ffe00593 li a1,-2 + 8001550c: 0000c537 lui a0,0xc + 80015510: d8cfb0ef jal ra,80010a9c <_Z7setprg8jj> + 80015514: 01013403 ld s0,16(sp) + 80015518: 01813083 ld ra,24(sp) + 8001551c: 00813483 ld s1,8(sp) + 80015520: 00013903 ld s2,0(sp) + 80015524: fff00593 li a1,-1 + 80015528: 0000e537 lui a0,0xe + 8001552c: 02010113 addi sp,sp,32 + 80015530: d6cfb06f j 80010a9c <_Z7setprg8jj> + +0000000080015534 <_ZL5MSyncv.part.0>: + 80015534: 001b7517 auipc a0,0x1b7 + 80015538: 8ad54503 lbu a0,-1875(a0) # 801cbde1 <_ZL6mirror> + 8001553c: 00157513 andi a0,a0,1 + 80015540: 0025051b addiw a0,a0,2 + 80015544: b05fb06f j 80011048 <_Z9setmirrori> + +0000000080015548 <_ZL12StateRestorei>: + 80015548: ff010113 addi sp,sp,-16 + 8001554c: 00113423 sd ra,8(sp) + 80015550: f1dff0ef jal ra,8001546c <_ZL4Syncv> + 80015554: 001b7797 auipc a5,0x1b7 + 80015558: 88c7c783 lbu a5,-1908(a5) # 801cbde0 <_ZL5is154> + 8001555c: 00079863 bnez a5,8001556c <_ZL12StateRestorei+0x24> + 80015560: 00813083 ld ra,8(sp) + 80015564: 01010113 addi sp,sp,16 + 80015568: 00008067 ret + 8001556c: 00813083 ld ra,8(sp) + 80015570: 01010113 addi sp,sp,16 + 80015574: fc1ff06f j 80015534 <_ZL5MSyncv.part.0> + +0000000080015578 <_ZL8M88Powerv>: + 80015578: ff010113 addi sp,sp,-16 + 8001557c: 001b7797 auipc a5,0x1b7 + 80015580: 8407be23 sd zero,-1956(a5) # 801cbdd8 <_ZL3reg> + 80015584: 00113423 sd ra,8(sp) + 80015588: 00813023 sd s0,0(sp) + 8001558c: ee1ff0ef jal ra,8001546c <_ZL4Syncv> + 80015590: 001b7797 auipc a5,0x1b7 + 80015594: 8507c783 lbu a5,-1968(a5) # 801cbde0 <_ZL5is154> + 80015598: 02079e63 bnez a5,800155d4 <_ZL8M88Powerv+0x5c> + 8001559c: 00010437 lui s0,0x10 + 800155a0: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 800155a4: ffffb617 auipc a2,0xffffb + 800155a8: 0bc60613 addi a2,a2,188 # 80010660 <_Z6CartBRj> + 800155ac: 00008537 lui a0,0x8 + 800155b0: 46c1e0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800155b4: fff40593 addi a1,s0,-1 + 800155b8: 00013403 ld s0,0(sp) + 800155bc: 00813083 ld ra,8(sp) + 800155c0: 00000617 auipc a2,0x0 + 800155c4: 01c60613 addi a2,a2,28 # 800155dc <_ZL8M88Writejh> + 800155c8: 00008537 lui a0,0x8 + 800155cc: 01010113 addi sp,sp,16 + 800155d0: 5581e06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800155d4: f61ff0ef jal ra,80015534 <_ZL5MSyncv.part.0> + 800155d8: fc5ff06f j 8001559c <_ZL8M88Powerv+0x24> + +00000000800155dc <_ZL8M88Writejh>: + 800155dc: 00008737 lui a4,0x8 + 800155e0: 00170793 addi a5,a4,1 # 8001 <_entry_offset+0x8001> + 800155e4: 00f57533 and a0,a0,a5 + 800155e8: 02e50463 beq a0,a4,80015610 <_ZL8M88Writejh+0x34> + 800155ec: 02f51063 bne a0,a5,8001560c <_ZL8M88Writejh+0x30> + 800155f0: 001b6717 auipc a4,0x1b6 + 800155f4: 7e574703 lbu a4,2021(a4) # 801cbdd5 <_ZL3cmd> + 800155f8: 001b6797 auipc a5,0x1b6 + 800155fc: 7e078793 addi a5,a5,2016 # 801cbdd8 <_ZL3reg> + 80015600: 00e787b3 add a5,a5,a4 + 80015604: 00b78023 sb a1,0(a5) + 80015608: e65ff06f j 8001546c <_ZL4Syncv> + 8001560c: 00008067 ret + 80015610: 0075f793 andi a5,a1,7 + 80015614: 4065d59b sraiw a1,a1,0x6 + 80015618: 001b6717 auipc a4,0x1b6 + 8001561c: 7af70ea3 sb a5,1981(a4) # 801cbdd5 <_ZL3cmd> + 80015620: 001b6797 auipc a5,0x1b6 + 80015624: 7cb780a3 sb a1,1985(a5) # 801cbde1 <_ZL6mirror> + 80015628: 001b6797 auipc a5,0x1b6 + 8001562c: 7b87c783 lbu a5,1976(a5) # 801cbde0 <_ZL5is154> + 80015630: 00079463 bnez a5,80015638 <_ZL8M88Writejh+0x5c> + 80015634: 00008067 ret + 80015638: efdff06f j 80015534 <_ZL5MSyncv.part.0> + +000000008001563c <_Z13Mapper88_InitP8CartInfo>: + 8001563c: 00000797 auipc a5,0x0 + 80015640: f3c78793 addi a5,a5,-196 # 80015578 <_ZL8M88Powerv> + 80015644: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 80015648: 001b6797 auipc a5,0x1b6 + 8001564c: 78078c23 sb zero,1944(a5) # 801cbde0 <_ZL5is154> + 80015650: 00000797 auipc a5,0x0 + 80015654: ef878793 addi a5,a5,-264 # 80015548 <_ZL12StateRestorei> + 80015658: 00000693 li a3,0 + 8001565c: 00000613 li a2,0 + 80015660: fff00593 li a1,-1 + 80015664: 00035517 auipc a0,0x35 + 80015668: 02c50513 addi a0,a0,44 # 8004a690 <_ZL9StateRegs> + 8001566c: 001b7717 auipc a4,0x1b7 + 80015670: fef73623 sd a5,-20(a4) # 801cc658 + 80015674: 99dea06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080015678 <_Z14Mapper154_InitP8CartInfo>: + 80015678: 00000797 auipc a5,0x0 + 8001567c: f0078793 addi a5,a5,-256 # 80015578 <_ZL8M88Powerv> + 80015680: 00f53023 sd a5,0(a0) + 80015684: 00100793 li a5,1 + 80015688: 001b6717 auipc a4,0x1b6 + 8001568c: 74f70c23 sb a5,1880(a4) # 801cbde0 <_ZL5is154> + 80015690: 00000797 auipc a5,0x0 + 80015694: eb878793 addi a5,a5,-328 # 80015548 <_ZL12StateRestorei> + 80015698: 00000693 li a3,0 + 8001569c: 00000613 li a2,0 + 800156a0: fff00593 li a1,-1 + 800156a4: 00035517 auipc a0,0x35 + 800156a8: fec50513 addi a0,a0,-20 # 8004a690 <_ZL9StateRegs> + 800156ac: 001b7717 auipc a4,0x1b7 + 800156b0: faf73623 sd a5,-84(a4) # 801cc658 + 800156b4: 95dea06f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800156b8 <_ZL4Syncv>: + 800156b8: ff010113 addi sp,sp,-16 + 800156bc: 00000613 li a2,0 + 800156c0: 000065b7 lui a1,0x6 + 800156c4: 01000513 li a0,16 + 800156c8: 00113423 sd ra,8(sp) + 800156cc: a1cfb0ef jal ra,800108e8 <_Z8setprg8rijj> + 800156d0: 001b6597 auipc a1,0x1b6 + 800156d4: 7205c583 lbu a1,1824(a1) # 801cbdf0 <_ZL4preg> + 800156d8: 00008537 lui a0,0x8 + 800156dc: d7cfb0ef jal ra,80010c58 <_Z8setprg16jj> + 800156e0: 0000c537 lui a0,0xc + 800156e4: fff00593 li a1,-1 + 800156e8: d70fb0ef jal ra,80010c58 <_Z8setprg16jj> + 800156ec: 00813083 ld ra,8(sp) + 800156f0: 00000513 li a0,0 + 800156f4: 01010113 addi sp,sp,16 + 800156f8: 80dfb06f j 80010f04 <_Z7setchr8j> + +00000000800156fc <_ZL12StateRestorei>: + 800156fc: fbdff06f j 800156b8 <_ZL4Syncv> + +0000000080015700 <_ZL8M73Closev>: + 80015700: 001b6517 auipc a0,0x1b6 + 80015704: 6e853503 ld a0,1768(a0) # 801cbde8 <_ZL4WRAM> + 80015708: 02050263 beqz a0,8001572c <_ZL8M73Closev+0x2c> + 8001570c: ff010113 addi sp,sp,-16 + 80015710: 00113423 sd ra,8(sp) + 80015714: e2dfc0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80015718: 00813083 ld ra,8(sp) + 8001571c: 001b6797 auipc a5,0x1b6 + 80015720: 6c07b623 sd zero,1740(a5) # 801cbde8 <_ZL4WRAM> + 80015724: 01010113 addi sp,sp,16 + 80015728: 00008067 ret + 8001572c: 001b6797 auipc a5,0x1b6 + 80015730: 6a07be23 sd zero,1724(a5) # 801cbde8 <_ZL4WRAM> + 80015734: 00008067 ret + +0000000080015738 <_ZL8M73Powerv>: + 80015738: ff010113 addi sp,sp,-16 + 8001573c: 00113423 sd ra,8(sp) + 80015740: 00813023 sd s0,0(sp) + 80015744: 001b6797 auipc a5,0x1b6 + 80015748: 6a078023 sb zero,1696(a5) # 801cbde4 <_ZL4IRQx> + 8001574c: 00010437 lui s0,0x10 + 80015750: 001b6797 auipc a5,0x1b6 + 80015754: 680789a3 sb zero,1683(a5) # 801cbde3 <_ZL4IRQm> + 80015758: 001b6797 auipc a5,0x1b6 + 8001575c: 6a079023 sh zero,1696(a5) # 801cbdf8 <_ZL9IRQReload> + 80015760: f59ff0ef jal ra,800156b8 <_ZL4Syncv> + 80015764: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80015768: ffffb617 auipc a2,0xffffb + 8001576c: ef860613 addi a2,a2,-264 # 80010660 <_Z6CartBRj> + 80015770: 00006537 lui a0,0x6 + 80015774: 2a81e0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80015778: 000085b7 lui a1,0x8 + 8001577c: ffffb617 auipc a2,0xffffb + 80015780: f1060613 addi a2,a2,-240 # 8001068c <_Z6CartBWjh> + 80015784: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80015788: 00006537 lui a0,0x6 + 8001578c: 39c1e0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80015790: fff40593 addi a1,s0,-1 + 80015794: 00000617 auipc a2,0x0 + 80015798: 03860613 addi a2,a2,56 # 800157cc <_ZL8M73Writejh> + 8001579c: 00008537 lui a0,0x8 + 800157a0: 3881e0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800157a4: 00013403 ld s0,0(sp) + 800157a8: 00813083 ld ra,8(sp) + 800157ac: 001b6517 auipc a0,0x1b6 + 800157b0: 64852503 lw a0,1608(a0) # 801cbdf4 <_ZL8WRAMSIZE> + 800157b4: 001b6617 auipc a2,0x1b6 + 800157b8: 63463603 ld a2,1588(a2) # 801cbde8 <_ZL4WRAM> + 800157bc: 000065b7 lui a1,0x6 + 800157c0: 00a5551b srliw a0,a0,0xa + 800157c4: 01010113 addi sp,sp,16 + 800157c8: 84dea06f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +00000000800157cc <_ZL8M73Writejh>: + 800157cc: 0000f7b7 lui a5,0xf + 800157d0: 00f57533 and a0,a0,a5 + 800157d4: 0000b7b7 lui a5,0xb + 800157d8: 12f50063 beq a0,a5,800158f8 <_ZL8M73Writejh+0x12c> + 800157dc: 04a7e463 bltu a5,a0,80015824 <_ZL8M73Writejh+0x58> + 800157e0: 000097b7 lui a5,0x9 + 800157e4: 12f50c63 beq a0,a5,8001591c <_ZL8M73Writejh+0x150> + 800157e8: 0000a7b7 lui a5,0xa + 800157ec: 04f51a63 bne a0,a5,80015840 <_ZL8M73Writejh+0x74> + 800157f0: 001b6697 auipc a3,0x1b6 + 800157f4: 60868693 addi a3,a3,1544 # 801cbdf8 <_ZL9IRQReload> + 800157f8: 00001737 lui a4,0x1 + 800157fc: 0006d783 lhu a5,0(a3) + 80015800: f0070713 addi a4,a4,-256 # f00 <_entry_offset+0xf00> + 80015804: 00859593 slli a1,a1,0x8 + 80015808: 00e5f5b3 and a1,a1,a4 + 8001580c: fffff737 lui a4,0xfffff + 80015810: 0ff70713 addi a4,a4,255 # fffffffffffff0ff <_end+0xffffffff7fe2a0ff> + 80015814: 00e7f7b3 and a5,a5,a4 + 80015818: 00f5e5b3 or a1,a1,a5 + 8001581c: 00b69023 sh a1,0(a3) + 80015820: 00008067 ret + 80015824: 0000d7b7 lui a5,0xd + 80015828: 0af50263 beq a0,a5,800158cc <_ZL8M73Writejh+0x100> + 8001582c: 0000f7b7 lui a5,0xf + 80015830: 02f51c63 bne a0,a5,80015868 <_ZL8M73Writejh+0x9c> + 80015834: 001b6797 auipc a5,0x1b6 + 80015838: 5ab78e23 sb a1,1468(a5) # 801cbdf0 <_ZL4preg> + 8001583c: e7dff06f j 800156b8 <_ZL4Syncv> + 80015840: 000087b7 lui a5,0x8 + 80015844: 08f51263 bne a0,a5,800158c8 <_ZL8M73Writejh+0xfc> + 80015848: 001b6717 auipc a4,0x1b6 + 8001584c: 5b070713 addi a4,a4,1456 # 801cbdf8 <_ZL9IRQReload> + 80015850: 00075783 lhu a5,0(a4) + 80015854: 00f5f593 andi a1,a1,15 + 80015858: ff07f793 andi a5,a5,-16 + 8001585c: 00b7e5b3 or a1,a5,a1 + 80015860: 00b71023 sh a1,0(a4) + 80015864: 00008067 ret + 80015868: 0000c7b7 lui a5,0xc + 8001586c: 04f51c63 bne a0,a5,800158c4 <_ZL8M73Writejh+0xf8> + 80015870: 0015f713 andi a4,a1,1 + 80015874: 0045f793 andi a5,a1,4 + 80015878: 0025f593 andi a1,a1,2 + 8001587c: 001b6697 auipc a3,0x1b6 + 80015880: 56e68423 sb a4,1384(a3) # 801cbde4 <_ZL4IRQx> + 80015884: 001b6697 auipc a3,0x1b6 + 80015888: 54f68fa3 sb a5,1375(a3) # 801cbde3 <_ZL4IRQm> + 8001588c: 001b6717 auipc a4,0x1b6 + 80015890: 54b70b23 sb a1,1366(a4) # 801cbde2 <_ZL4IRQa> + 80015894: 02058463 beqz a1,800158bc <_ZL8M73Writejh+0xf0> + 80015898: 001b6717 auipc a4,0x1b6 + 8001589c: 56075703 lhu a4,1376(a4) # 801cbdf8 <_ZL9IRQReload> + 800158a0: 0a078063 beqz a5,80015940 <_ZL8M73Writejh+0x174> + 800158a4: 001b6797 auipc a5,0x1b6 + 800158a8: 54e78793 addi a5,a5,1358 # 801cbdf2 <_ZL8IRQCount> + 800158ac: 0007d683 lhu a3,0(a5) + 800158b0: 0ff77713 andi a4,a4,255 + 800158b4: 00d76733 or a4,a4,a3 + 800158b8: 00e79023 sh a4,0(a5) + 800158bc: 00100513 li a0,1 + 800158c0: c90eb06f j 80000d50 <_Z12X6502_IRQEndi> + 800158c4: 00008067 ret + 800158c8: 00008067 ret + 800158cc: ff010113 addi sp,sp,-16 + 800158d0: 00100513 li a0,1 + 800158d4: 00113423 sd ra,8(sp) + 800158d8: c78eb0ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 800158dc: 00813083 ld ra,8(sp) + 800158e0: 001b6797 auipc a5,0x1b6 + 800158e4: 5047c783 lbu a5,1284(a5) # 801cbde4 <_ZL4IRQx> + 800158e8: 001b6717 auipc a4,0x1b6 + 800158ec: 4ef70d23 sb a5,1274(a4) # 801cbde2 <_ZL4IRQa> + 800158f0: 01010113 addi sp,sp,16 + 800158f4: 00008067 ret + 800158f8: 001b6717 auipc a4,0x1b6 + 800158fc: 50070713 addi a4,a4,1280 # 801cbdf8 <_ZL9IRQReload> + 80015900: 00075783 lhu a5,0(a4) + 80015904: 00c59593 slli a1,a1,0xc + 80015908: 03479793 slli a5,a5,0x34 + 8001590c: 0347d793 srli a5,a5,0x34 + 80015910: 00b7e5b3 or a1,a5,a1 + 80015914: 00b71023 sh a1,0(a4) + 80015918: 00008067 ret + 8001591c: 001b6717 auipc a4,0x1b6 + 80015920: 4dc70713 addi a4,a4,1244 # 801cbdf8 <_ZL9IRQReload> + 80015924: 00075783 lhu a5,0(a4) + 80015928: 00459593 slli a1,a1,0x4 + 8001592c: 0ff5f593 andi a1,a1,255 + 80015930: f0f7f793 andi a5,a5,-241 + 80015934: 00f5e5b3 or a1,a1,a5 + 80015938: 00b71023 sh a1,0(a4) + 8001593c: 00008067 ret + 80015940: 001b6797 auipc a5,0x1b6 + 80015944: 4ae79923 sh a4,1202(a5) # 801cbdf2 <_ZL8IRQCount> + 80015948: f75ff06f j 800158bc <_ZL8M73Writejh+0xf0> + +000000008001594c <_ZL10M73IRQHooki>: + 8001594c: 001b6797 auipc a5,0x1b6 + 80015950: 4967c783 lbu a5,1174(a5) # 801cbde2 <_ZL4IRQa> + 80015954: 0e078063 beqz a5,80015a34 <_ZL10M73IRQHooki+0xe8> + 80015958: fc010113 addi sp,sp,-64 + 8001595c: 03213023 sd s2,32(sp) + 80015960: 02113c23 sd ra,56(sp) + 80015964: 02813823 sd s0,48(sp) + 80015968: 02913423 sd s1,40(sp) + 8001596c: 01313c23 sd s3,24(sp) + 80015970: 01413823 sd s4,16(sp) + 80015974: 01513423 sd s5,8(sp) + 80015978: 01613023 sd s6,0(sp) + 8001597c: 00050913 mv s2,a0 + 80015980: 06a05c63 blez a0,800159f8 <_ZL10M73IRQHooki+0xac> + 80015984: 00010a37 lui s4,0x10 + 80015988: 00000413 li s0,0 + 8001598c: 001b6497 auipc s1,0x1b6 + 80015990: 46648493 addi s1,s1,1126 # 801cbdf2 <_ZL8IRQCount> + 80015994: 001b6997 auipc s3,0x1b6 + 80015998: 44f98993 addi s3,s3,1103 # 801cbde3 <_ZL4IRQm> + 8001599c: fffa0a13 addi s4,s4,-1 # ffff <_entry_offset+0xffff> + 800159a0: 001b6b17 auipc s6,0x1b6 + 800159a4: 458b0b13 addi s6,s6,1112 # 801cbdf8 <_ZL9IRQReload> + 800159a8: 0ff00a93 li s5,255 + 800159ac: 02c0006f j 800159d8 <_ZL10M73IRQHooki+0x8c> + 800159b0: f007f713 andi a4,a5,-256 + 800159b4: 0ff7f693 andi a3,a5,255 + 800159b8: 03071713 slli a4,a4,0x30 + 800159bc: 0016879b addiw a5,a3,1 + 800159c0: 03075713 srli a4,a4,0x30 + 800159c4: 00f767b3 or a5,a4,a5 + 800159c8: 05568c63 beq a3,s5,80015a20 <_ZL10M73IRQHooki+0xd4> + 800159cc: 00f49023 sh a5,0(s1) + 800159d0: 0014041b addiw s0,s0,1 + 800159d4: 02890263 beq s2,s0,800159f8 <_ZL10M73IRQHooki+0xac> + 800159d8: 0009c703 lbu a4,0(s3) + 800159dc: 0004d783 lhu a5,0(s1) + 800159e0: fc0718e3 bnez a4,800159b0 <_ZL10M73IRQHooki+0x64> + 800159e4: 0017871b addiw a4,a5,1 + 800159e8: 03478c63 beq a5,s4,80015a20 <_ZL10M73IRQHooki+0xd4> + 800159ec: 00e49023 sh a4,0(s1) + 800159f0: 0014041b addiw s0,s0,1 + 800159f4: fe8912e3 bne s2,s0,800159d8 <_ZL10M73IRQHooki+0x8c> + 800159f8: 03813083 ld ra,56(sp) + 800159fc: 03013403 ld s0,48(sp) + 80015a00: 02813483 ld s1,40(sp) + 80015a04: 02013903 ld s2,32(sp) + 80015a08: 01813983 ld s3,24(sp) + 80015a0c: 01013a03 ld s4,16(sp) + 80015a10: 00813a83 ld s5,8(sp) + 80015a14: 00013b03 ld s6,0(sp) + 80015a18: 04010113 addi sp,sp,64 + 80015a1c: 00008067 ret + 80015a20: 000b5783 lhu a5,0(s6) + 80015a24: 00100513 li a0,1 + 80015a28: 00f49023 sh a5,0(s1) + 80015a2c: b0ceb0ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 80015a30: fa1ff06f j 800159d0 <_ZL10M73IRQHooki+0x84> + 80015a34: 00008067 ret + +0000000080015a38 <_Z13Mapper73_InitP8CartInfo>: + 80015a38: fe010113 addi sp,sp,-32 + 80015a3c: 00113c23 sd ra,24(sp) + 80015a40: 00813823 sd s0,16(sp) + 80015a44: 00913423 sd s1,8(sp) + 80015a48: 00000797 auipc a5,0x0 + 80015a4c: cf078793 addi a5,a5,-784 # 80015738 <_ZL8M73Powerv> + 80015a50: 00f53023 sd a5,0(a0) + 80015a54: 00000797 auipc a5,0x0 + 80015a58: cac78793 addi a5,a5,-852 # 80015700 <_ZL8M73Closev> + 80015a5c: 00f53823 sd a5,16(a0) + 80015a60: 00000797 auipc a5,0x0 + 80015a64: eec78793 addi a5,a5,-276 # 8001594c <_ZL10M73IRQHooki> + 80015a68: 001b6417 auipc s0,0x1b6 + 80015a6c: 38c40413 addi s0,s0,908 # 801cbdf4 <_ZL8WRAMSIZE> + 80015a70: 001b6717 auipc a4,0x1b6 + 80015a74: 0cf73823 sd a5,208(a4) # 801cbb40 + 80015a78: 00002537 lui a0,0x2 + 80015a7c: 000027b7 lui a5,0x2 + 80015a80: 00f42023 sw a5,0(s0) + 80015a84: 9e9fc0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80015a88: 00042603 lw a2,0(s0) + 80015a8c: 00050593 mv a1,a0 + 80015a90: 001b6497 auipc s1,0x1b6 + 80015a94: 35848493 addi s1,s1,856 # 801cbde8 <_ZL4WRAM> + 80015a98: 00100693 li a3,1 + 80015a9c: 01000513 li a0,16 + 80015aa0: 00b4b023 sd a1,0(s1) + 80015aa4: a51fa0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80015aa8: 00042583 lw a1,0(s0) + 80015aac: 0004b503 ld a0,0(s1) + 80015ab0: 00030697 auipc a3,0x30 + 80015ab4: 87868693 addi a3,a3,-1928 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80015ab8: 00000613 li a2,0 + 80015abc: d54ea0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80015ac0: 00000693 li a3,0 + 80015ac4: 00000613 li a2,0 + 80015ac8: fff00593 li a1,-1 + 80015acc: 00035517 auipc a0,0x35 + 80015ad0: c2450513 addi a0,a0,-988 # 8004a6f0 <_ZL9StateRegs> + 80015ad4: d3cea0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80015ad8: 01813083 ld ra,24(sp) + 80015adc: 01013403 ld s0,16(sp) + 80015ae0: 00000797 auipc a5,0x0 + 80015ae4: c1c78793 addi a5,a5,-996 # 800156fc <_ZL12StateRestorei> + 80015ae8: 001b7717 auipc a4,0x1b7 + 80015aec: b6f73823 sd a5,-1168(a4) # 801cc658 + 80015af0: 00813483 ld s1,8(sp) + 80015af4: 02010113 addi sp,sp,32 + 80015af8: 00008067 ret + +0000000080015afc <_ZL4Syncv>: + 80015afc: ff010113 addi sp,sp,-16 + 80015b00: 00813023 sd s0,0(sp) + 80015b04: 001b6417 auipc s0,0x1b6 + 80015b08: 2fc40413 addi s0,s0,764 # 801cbe00 <_ZL3reg> + 80015b0c: 00444583 lbu a1,4(s0) + 80015b10: 00006537 lui a0,0x6 + 80015b14: 00113423 sd ra,8(sp) + 80015b18: f85fa0ef jal ra,80010a9c <_Z7setprg8jj> + 80015b1c: 00144583 lbu a1,1(s0) + 80015b20: 00008537 lui a0,0x8 + 80015b24: f79fa0ef jal ra,80010a9c <_Z7setprg8jj> + 80015b28: 00244583 lbu a1,2(s0) + 80015b2c: 0000a537 lui a0,0xa + 80015b30: f6dfa0ef jal ra,80010a9c <_Z7setprg8jj> + 80015b34: 00344583 lbu a1,3(s0) + 80015b38: 0000c537 lui a0,0xc + 80015b3c: f61fa0ef jal ra,80010a9c <_Z7setprg8jj> + 80015b40: 0000e537 lui a0,0xe + 80015b44: fff00593 li a1,-1 + 80015b48: f55fa0ef jal ra,80010a9c <_Z7setprg8jj> + 80015b4c: 00013403 ld s0,0(sp) + 80015b50: 00813083 ld ra,8(sp) + 80015b54: 00000513 li a0,0 + 80015b58: 01010113 addi sp,sp,16 + 80015b5c: ba8fb06f j 80010f04 <_Z7setchr8j> + +0000000080015b60 <_ZL12StateRestorei>: + 80015b60: f9dff06f j 80015afc <_ZL4Syncv> + +0000000080015b64 <_ZL14UNLKS7032Powerv>: + 80015b64: ff010113 addi sp,sp,-16 + 80015b68: 00113423 sd ra,8(sp) + 80015b6c: 00813023 sd s0,0(sp) + 80015b70: f8dff0ef jal ra,80015afc <_ZL4Syncv> + 80015b74: 000085b7 lui a1,0x8 + 80015b78: ffffb617 auipc a2,0xffffb + 80015b7c: ae860613 addi a2,a2,-1304 # 80010660 <_Z6CartBRj> + 80015b80: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80015b84: 00006537 lui a0,0x6 + 80015b88: 6951d0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80015b8c: 00010437 lui s0,0x10 + 80015b90: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80015b94: ffffb617 auipc a2,0xffffb + 80015b98: acc60613 addi a2,a2,-1332 # 80010660 <_Z6CartBRj> + 80015b9c: 00008537 lui a0,0x8 + 80015ba0: 67d1d0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80015ba4: fff40593 addi a1,s0,-1 + 80015ba8: 00013403 ld s0,0(sp) + 80015bac: 00813083 ld ra,8(sp) + 80015bb0: 00004537 lui a0,0x4 + 80015bb4: 00000617 auipc a2,0x0 + 80015bb8: 01460613 addi a2,a2,20 # 80015bc8 <_ZL14UNLKS7032Writejh> + 80015bbc: 02050513 addi a0,a0,32 # 4020 <_entry_offset+0x4020> + 80015bc0: 01010113 addi sp,sp,16 + 80015bc4: 7651d06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080015bc8 <_ZL14UNLKS7032Writejh>: + 80015bc8: fe010113 addi sp,sp,-32 + 80015bcc: 00913423 sd s1,8(sp) + 80015bd0: 0000f4b7 lui s1,0xf + 80015bd4: 00957533 and a0,a0,s1 + 80015bd8: 00813823 sd s0,16(sp) + 80015bdc: 00113c23 sd ra,24(sp) + 80015be0: 0005051b sext.w a0,a0 + 80015be4: 0000b7b7 lui a5,0xb + 80015be8: 00058413 mv s0,a1 + 80015bec: 10f50a63 beq a0,a5,80015d00 <_ZL14UNLKS7032Writejh+0x138> + 80015bf0: 0aa7e463 bltu a5,a0,80015c98 <_ZL14UNLKS7032Writejh+0xd0> + 80015bf4: 000097b7 lui a5,0x9 + 80015bf8: 14f50663 beq a0,a5,80015d44 <_ZL14UNLKS7032Writejh+0x17c> + 80015bfc: 0000a7b7 lui a5,0xa + 80015c00: 04f51863 bne a0,a5,80015c50 <_ZL14UNLKS7032Writejh+0x88> + 80015c04: 00100513 li a0,1 + 80015c08: 948eb0ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 80015c0c: 001b6797 auipc a5,0x1b6 + 80015c10: 20078793 addi a5,a5,512 # 801cbe0c <_ZL8IRQCount> + 80015c14: 0007a703 lw a4,0(a5) + 80015c18: 0084159b slliw a1,s0,0x8 + 80015c1c: 00001437 lui s0,0x1 + 80015c20: 00e5e5b3 or a1,a1,a4 + 80015c24: f0040413 addi s0,s0,-256 # f00 <_entry_offset+0xf00> + 80015c28: 0085f5b3 and a1,a1,s0 + 80015c2c: 00b7a023 sw a1,0(a5) + 80015c30: 00100793 li a5,1 + 80015c34: 001b6717 auipc a4,0x1b6 + 80015c38: 1cf70e23 sb a5,476(a4) # 801cbe10 <_ZL9isirqused> + 80015c3c: 01813083 ld ra,24(sp) + 80015c40: 01013403 ld s0,16(sp) + 80015c44: 00813483 ld s1,8(sp) + 80015c48: 02010113 addi sp,sp,32 + 80015c4c: 00008067 ret + 80015c50: 000087b7 lui a5,0x8 + 80015c54: fef514e3 bne a0,a5,80015c3c <_ZL14UNLKS7032Writejh+0x74> + 80015c58: 00100513 li a0,1 + 80015c5c: 8f4eb0ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 80015c60: 001b6797 auipc a5,0x1b6 + 80015c64: 1ac78793 addi a5,a5,428 # 801cbe0c <_ZL8IRQCount> + 80015c68: 0007a583 lw a1,0(a5) + 80015c6c: 01813083 ld ra,24(sp) + 80015c70: 00100713 li a4,1 + 80015c74: 00b465b3 or a1,s0,a1 + 80015c78: 01013403 ld s0,16(sp) + 80015c7c: 00f5f593 andi a1,a1,15 + 80015c80: 001b6697 auipc a3,0x1b6 + 80015c84: 18e68823 sb a4,400(a3) # 801cbe10 <_ZL9isirqused> + 80015c88: 00b7a023 sw a1,0(a5) + 80015c8c: 00813483 ld s1,8(sp) + 80015c90: 02010113 addi sp,sp,32 + 80015c94: 00008067 ret + 80015c98: 0000e7b7 lui a5,0xe + 80015c9c: 0ef50663 beq a0,a5,80015d88 <_ZL14UNLKS7032Writejh+0x1c0> + 80015ca0: 0000f7b7 lui a5,0xf + 80015ca4: 02f51863 bne a0,a5,80015cd4 <_ZL14UNLKS7032Writejh+0x10c> + 80015ca8: 001b6717 auipc a4,0x1b6 + 80015cac: 15274703 lbu a4,338(a4) # 801cbdfa <_ZL3cmd> + 80015cb0: 001b6797 auipc a5,0x1b6 + 80015cb4: 15078793 addi a5,a5,336 # 801cbe00 <_ZL3reg> + 80015cb8: 00e787b3 add a5,a5,a4 + 80015cbc: 00b78023 sb a1,0(a5) + 80015cc0: 01013403 ld s0,16(sp) + 80015cc4: 01813083 ld ra,24(sp) + 80015cc8: 00813483 ld s1,8(sp) + 80015ccc: 02010113 addi sp,sp,32 + 80015cd0: e2dff06f j 80015afc <_ZL4Syncv> + 80015cd4: 0000c7b7 lui a5,0xc + 80015cd8: f6f512e3 bne a0,a5,80015c3c <_ZL14UNLKS7032Writejh+0x74> + 80015cdc: 001b6797 auipc a5,0x1b6 + 80015ce0: 1347c783 lbu a5,308(a5) # 801cbe10 <_ZL9isirqused> + 80015ce4: f4078ce3 beqz a5,80015c3c <_ZL14UNLKS7032Writejh+0x74> + 80015ce8: 00100513 li a0,1 + 80015cec: 864eb0ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 80015cf0: 00100793 li a5,1 + 80015cf4: 001b6717 auipc a4,0x1b6 + 80015cf8: 10f70a23 sb a5,276(a4) # 801cbe08 <_ZL4IRQa> + 80015cfc: f41ff06f j 80015c3c <_ZL14UNLKS7032Writejh+0x74> + 80015d00: 00100513 li a0,1 + 80015d04: 84ceb0ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 80015d08: 001b6717 auipc a4,0x1b6 + 80015d0c: 10470713 addi a4,a4,260 # 801cbe0c <_ZL8IRQCount> + 80015d10: 00072783 lw a5,0(a4) + 80015d14: 01813083 ld ra,24(sp) + 80015d18: 00c4159b slliw a1,s0,0xc + 80015d1c: 0097f4b3 and s1,a5,s1 + 80015d20: 01013403 ld s0,16(sp) + 80015d24: 00b4e5b3 or a1,s1,a1 + 80015d28: 00100793 li a5,1 + 80015d2c: 00b72023 sw a1,0(a4) + 80015d30: 001b6717 auipc a4,0x1b6 + 80015d34: 0ef70023 sb a5,224(a4) # 801cbe10 <_ZL9isirqused> + 80015d38: 00813483 ld s1,8(sp) + 80015d3c: 02010113 addi sp,sp,32 + 80015d40: 00008067 ret + 80015d44: 00100513 li a0,1 + 80015d48: 808eb0ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 80015d4c: 001b6797 auipc a5,0x1b6 + 80015d50: 0c078793 addi a5,a5,192 # 801cbe0c <_ZL8IRQCount> + 80015d54: 0007a703 lw a4,0(a5) + 80015d58: 0044159b slliw a1,s0,0x4 + 80015d5c: 01813083 ld ra,24(sp) + 80015d60: 00e5e5b3 or a1,a1,a4 + 80015d64: 01013403 ld s0,16(sp) + 80015d68: 0f05f593 andi a1,a1,240 + 80015d6c: 00b7a023 sw a1,0(a5) + 80015d70: 00100793 li a5,1 + 80015d74: 001b6717 auipc a4,0x1b6 + 80015d78: 08f70e23 sb a5,156(a4) # 801cbe10 <_ZL9isirqused> + 80015d7c: 00813483 ld s1,8(sp) + 80015d80: 02010113 addi sp,sp,32 + 80015d84: 00008067 ret + 80015d88: 01813083 ld ra,24(sp) + 80015d8c: 01013403 ld s0,16(sp) + 80015d90: 0075f593 andi a1,a1,7 + 80015d94: 001b6797 auipc a5,0x1b6 + 80015d98: 06b78323 sb a1,102(a5) # 801cbdfa <_ZL3cmd> + 80015d9c: 00813483 ld s1,8(sp) + 80015da0: 02010113 addi sp,sp,32 + 80015da4: 00008067 ret + +0000000080015da8 <_ZL15UNLSMB2JIRQHooki>: + 80015da8: 001b6797 auipc a5,0x1b6 + 80015dac: 0607c783 lbu a5,96(a5) # 801cbe08 <_ZL4IRQa> + 80015db0: 02078263 beqz a5,80015dd4 <_ZL15UNLSMB2JIRQHooki+0x2c> + 80015db4: 001b6697 auipc a3,0x1b6 + 80015db8: 05868693 addi a3,a3,88 # 801cbe0c <_ZL8IRQCount> + 80015dbc: 0006a783 lw a5,0(a3) + 80015dc0: 00010737 lui a4,0x10 + 80015dc4: ffe70713 addi a4,a4,-2 # fffe <_entry_offset+0xfffe> + 80015dc8: 00a787bb addw a5,a5,a0 + 80015dcc: 00f6a023 sw a5,0(a3) + 80015dd0: 00f74463 blt a4,a5,80015dd8 <_ZL15UNLSMB2JIRQHooki+0x30> + 80015dd4: 00008067 ret + 80015dd8: 00100513 li a0,1 + 80015ddc: 001b6797 auipc a5,0x1b6 + 80015de0: 02078623 sb zero,44(a5) # 801cbe08 <_ZL4IRQa> + 80015de4: 001b6797 auipc a5,0x1b6 + 80015de8: 0207a423 sw zero,40(a5) # 801cbe0c <_ZL8IRQCount> + 80015dec: f4dea06f j 80000d38 <_Z14X6502_IRQBegini> + +0000000080015df0 <_Z14UNLKS7032_InitP8CartInfo>: + 80015df0: 00000797 auipc a5,0x0 + 80015df4: d7478793 addi a5,a5,-652 # 80015b64 <_ZL14UNLKS7032Powerv> + 80015df8: 00f53023 sd a5,0(a0) + 80015dfc: 00000797 auipc a5,0x0 + 80015e00: fac78793 addi a5,a5,-84 # 80015da8 <_ZL15UNLSMB2JIRQHooki> + 80015e04: 001b6717 auipc a4,0x1b6 + 80015e08: d2f73e23 sd a5,-708(a4) # 801cbb40 + 80015e0c: 00000797 auipc a5,0x0 + 80015e10: d5478793 addi a5,a5,-684 # 80015b60 <_ZL12StateRestorei> + 80015e14: 00000693 li a3,0 + 80015e18: 00000613 li a2,0 + 80015e1c: fff00593 li a1,-1 + 80015e20: 00035517 auipc a0,0x35 + 80015e24: 97850513 addi a0,a0,-1672 # 8004a798 <_ZL9StateRegs> + 80015e28: 001b7717 auipc a4,0x1b7 + 80015e2c: 82f73823 sd a5,-2000(a4) # 801cc658 + 80015e30: 9e0ea06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080015e34 <_ZL4Syncv>: + 80015e34: fe010113 addi sp,sp,-32 + 80015e38: 00813823 sd s0,16(sp) + 80015e3c: 001b6417 auipc s0,0x1b6 + 80015e40: fdc40413 addi s0,s0,-36 # 801cbe18 <_ZL5DRegs> + 80015e44: 00044583 lbu a1,0(s0) + 80015e48: 00000513 li a0,0 + 80015e4c: 00113c23 sd ra,24(sp) + 80015e50: 00913423 sd s1,8(sp) + 80015e54: 01213023 sd s2,0(sp) + 80015e58: 86cfb0ef jal ra,80010ec4 <_Z7setchr2jj> + 80015e5c: 00144583 lbu a1,1(s0) + 80015e60: 00001937 lui s2,0x1 + 80015e64: 80090513 addi a0,s2,-2048 # 800 <_entry_offset+0x800> + 80015e68: 85cfb0ef jal ra,80010ec4 <_Z7setchr2jj> + 80015e6c: 00244583 lbu a1,2(s0) + 80015e70: 00001537 lui a0,0x1 + 80015e74: 000024b7 lui s1,0x2 + 80015e78: 82cfb0ef jal ra,80010ea4 <_Z7setchr1jj> + 80015e7c: 00344583 lbu a1,3(s0) + 80015e80: 40090513 addi a0,s2,1024 + 80015e84: 820fb0ef jal ra,80010ea4 <_Z7setchr1jj> + 80015e88: 00444583 lbu a1,4(s0) + 80015e8c: 80048513 addi a0,s1,-2048 # 1800 <_entry_offset+0x1800> + 80015e90: 814fb0ef jal ra,80010ea4 <_Z7setchr1jj> + 80015e94: 00544583 lbu a1,5(s0) + 80015e98: c0048513 addi a0,s1,-1024 + 80015e9c: 808fb0ef jal ra,80010ea4 <_Z7setchr1jj> + 80015ea0: 00644583 lbu a1,6(s0) + 80015ea4: 00008537 lui a0,0x8 + 80015ea8: bf5fa0ef jal ra,80010a9c <_Z7setprg8jj> + 80015eac: 00744583 lbu a1,7(s0) + 80015eb0: 0000a537 lui a0,0xa + 80015eb4: be9fa0ef jal ra,80010a9c <_Z7setprg8jj> + 80015eb8: ffe00593 li a1,-2 + 80015ebc: 0000c537 lui a0,0xc + 80015ec0: bddfa0ef jal ra,80010a9c <_Z7setprg8jj> + 80015ec4: 01013403 ld s0,16(sp) + 80015ec8: 01813083 ld ra,24(sp) + 80015ecc: 00813483 ld s1,8(sp) + 80015ed0: 00013903 ld s2,0(sp) + 80015ed4: fff00593 li a1,-1 + 80015ed8: 0000e537 lui a0,0xe + 80015edc: 02010113 addi sp,sp,32 + 80015ee0: bbdfa06f j 80010a9c <_Z7setprg8jj> + +0000000080015ee4 <_ZL12StateRestorei>: + 80015ee4: f51ff06f j 80015e34 <_ZL4Syncv> + +0000000080015ee8 <_ZL9M206Powerv>: + 80015ee8: 001b6797 auipc a5,0x1b6 + 80015eec: f20784a3 sb zero,-215(a5) # 801cbe11 <_ZL3cmd> + 80015ef0: ff010113 addi sp,sp,-16 + 80015ef4: 10000793 li a5,256 + 80015ef8: 00113423 sd ra,8(sp) + 80015efc: 00813023 sd s0,0(sp) + 80015f00: 001b6717 auipc a4,0x1b6 + 80015f04: f0f71f23 sh a5,-226(a4) # 801cbe1e <_ZL5DRegs+0x6> + 80015f08: 00010437 lui s0,0x10 + 80015f0c: f29ff0ef jal ra,80015e34 <_ZL4Syncv> + 80015f10: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80015f14: ffffa617 auipc a2,0xffffa + 80015f18: 74c60613 addi a2,a2,1868 # 80010660 <_Z6CartBRj> + 80015f1c: 00008537 lui a0,0x8 + 80015f20: 2fd1d0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80015f24: fff40593 addi a1,s0,-1 + 80015f28: 00013403 ld s0,0(sp) + 80015f2c: 00813083 ld ra,8(sp) + 80015f30: 00000617 auipc a2,0x0 + 80015f34: 01460613 addi a2,a2,20 # 80015f44 <_ZL9M206Writejh> + 80015f38: 00008537 lui a0,0x8 + 80015f3c: 01010113 addi sp,sp,16 + 80015f40: 3e91d06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080015f44 <_ZL9M206Writejh>: + 80015f44: 00008737 lui a4,0x8 + 80015f48: 00170793 addi a5,a4,1 # 8001 <_entry_offset+0x8001> + 80015f4c: 00f57533 and a0,a0,a5 + 80015f50: 04e50463 beq a0,a4,80015f98 <_ZL9M206Writejh+0x54> + 80015f54: 04f51063 bne a0,a5,80015f94 <_ZL9M206Writejh+0x50> + 80015f58: 001b6797 auipc a5,0x1b6 + 80015f5c: eb97c783 lbu a5,-327(a5) # 801cbe11 <_ZL3cmd> + 80015f60: 00500713 li a4,5 + 80015f64: 00f5f693 andi a3,a1,15 + 80015f68: 00f76a63 bltu a4,a5,80015f7c <_ZL9M206Writejh+0x38> + 80015f6c: 00100713 li a4,1 + 80015f70: 03f5f693 andi a3,a1,63 + 80015f74: 00f76463 bltu a4,a5,80015f7c <_ZL9M206Writejh+0x38> + 80015f78: 0016d693 srli a3,a3,0x1 + 80015f7c: 0077f793 andi a5,a5,7 + 80015f80: 001b6717 auipc a4,0x1b6 + 80015f84: e9870713 addi a4,a4,-360 # 801cbe18 <_ZL5DRegs> + 80015f88: 00f707b3 add a5,a4,a5 + 80015f8c: 00d78023 sb a3,0(a5) + 80015f90: ea5ff06f j 80015e34 <_ZL4Syncv> + 80015f94: 00008067 ret + 80015f98: 0075f593 andi a1,a1,7 + 80015f9c: 001b6797 auipc a5,0x1b6 + 80015fa0: e6b78aa3 sb a1,-395(a5) # 801cbe11 <_ZL3cmd> + 80015fa4: 00008067 ret + +0000000080015fa8 <_Z14Mapper206_InitP8CartInfo>: + 80015fa8: 00000797 auipc a5,0x0 + 80015fac: f4078793 addi a5,a5,-192 # 80015ee8 <_ZL9M206Powerv> + 80015fb0: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 80015fb4: 00000797 auipc a5,0x0 + 80015fb8: f3078793 addi a5,a5,-208 # 80015ee4 <_ZL12StateRestorei> + 80015fbc: 00000693 li a3,0 + 80015fc0: 00000613 li a2,0 + 80015fc4: fff00593 li a1,-1 + 80015fc8: 00035517 auipc a0,0x35 + 80015fcc: 84850513 addi a0,a0,-1976 # 8004a810 <_ZL9StateRegs> + 80015fd0: 001b6717 auipc a4,0x1b6 + 80015fd4: 68f73423 sd a5,1672(a4) # 801cc658 + 80015fd8: 838ea06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080015fdc <_ZL4Syncv>: + 80015fdc: fe010113 addi sp,sp,-32 + 80015fe0: 00000613 li a2,0 + 80015fe4: 000065b7 lui a1,0x6 + 80015fe8: 01000513 li a0,16 + 80015fec: 00113c23 sd ra,24(sp) + 80015ff0: 00813823 sd s0,16(sp) + 80015ff4: 00913423 sd s1,8(sp) + 80015ff8: 01213023 sd s2,0(sp) + 80015ffc: 8edfa0ef jal ra,800108e8 <_Z8setprg8rijj> + 80016000: 001b6797 auipc a5,0x1b6 + 80016004: e457c783 lbu a5,-443(a5) # 801cbe45 <_ZL7ffemode> + 80016008: 0a078e63 beqz a5,800160c4 <_ZL4Syncv+0xe8> + 8001600c: 001b6497 auipc s1,0x1b6 + 80016010: e2448493 addi s1,s1,-476 # 801cbe30 <_ZL4creg> + 80016014: 00000413 li s0,0 + 80016018: 00002937 lui s2,0x2 + 8001601c: 0004c583 lbu a1,0(s1) + 80016020: 00040513 mv a0,s0 + 80016024: 4004041b addiw s0,s0,1024 + 80016028: e7dfa0ef jal ra,80010ea4 <_Z7setchr1jj> + 8001602c: 00148493 addi s1,s1,1 + 80016030: ff2416e3 bne s0,s2,8001601c <_ZL4Syncv+0x40> + 80016034: 001b6417 auipc s0,0x1b6 + 80016038: e0c40413 addi s0,s0,-500 # 801cbe40 <_ZL4preg> + 8001603c: 00044583 lbu a1,0(s0) + 80016040: 00008537 lui a0,0x8 + 80016044: a59fa0ef jal ra,80010a9c <_Z7setprg8jj> + 80016048: 00144583 lbu a1,1(s0) + 8001604c: 0000a537 lui a0,0xa + 80016050: a4dfa0ef jal ra,80010a9c <_Z7setprg8jj> + 80016054: 00244583 lbu a1,2(s0) + 80016058: 0000c537 lui a0,0xc + 8001605c: a41fa0ef jal ra,80010a9c <_Z7setprg8jj> + 80016060: 00344583 lbu a1,3(s0) + 80016064: 0000e537 lui a0,0xe + 80016068: a35fa0ef jal ra,80010a9c <_Z7setprg8jj> + 8001606c: 001b6797 auipc a5,0x1b6 + 80016070: dcc7c783 lbu a5,-564(a5) # 801cbe38 <_ZL4mirr> + 80016074: 00200713 li a4,2 + 80016078: 08e78663 beq a5,a4,80016104 <_ZL4Syncv+0x128> + 8001607c: 02f76263 bltu a4,a5,800160a0 <_ZL4Syncv+0xc4> + 80016080: 00300513 li a0,3 + 80016084: 08078e63 beqz a5,80016120 <_ZL4Syncv+0x144> + 80016088: 01013403 ld s0,16(sp) + 8001608c: 01813083 ld ra,24(sp) + 80016090: 00813483 ld s1,8(sp) + 80016094: 00013903 ld s2,0(sp) + 80016098: 02010113 addi sp,sp,32 + 8001609c: fadfa06f j 80011048 <_Z9setmirrori> + 800160a0: 00300713 li a4,3 + 800160a4: 00000513 li a0,0 + 800160a8: fee780e3 beq a5,a4,80016088 <_ZL4Syncv+0xac> + 800160ac: 01813083 ld ra,24(sp) + 800160b0: 01013403 ld s0,16(sp) + 800160b4: 00813483 ld s1,8(sp) + 800160b8: 00013903 ld s2,0(sp) + 800160bc: 02010113 addi sp,sp,32 + 800160c0: 00008067 ret + 800160c4: 001b6417 auipc s0,0x1b6 + 800160c8: d8040413 addi s0,s0,-640 # 801cbe44 <_ZL5latch> + 800160cc: 00044503 lbu a0,0(s0) + 800160d0: 00357513 andi a0,a0,3 + 800160d4: e31fa0ef jal ra,80010f04 <_Z7setchr8j> + 800160d8: 00044583 lbu a1,0(s0) + 800160dc: 00008537 lui a0,0x8 + 800160e0: 0025d593 srli a1,a1,0x2 + 800160e4: b75fa0ef jal ra,80010c58 <_Z8setprg16jj> + 800160e8: 00700593 li a1,7 + 800160ec: 0000c537 lui a0,0xc + 800160f0: b69fa0ef jal ra,80010c58 <_Z8setprg16jj> + 800160f4: 001b6797 auipc a5,0x1b6 + 800160f8: d447c783 lbu a5,-700(a5) # 801cbe38 <_ZL4mirr> + 800160fc: 00200713 li a4,2 + 80016100: f6e79ee3 bne a5,a4,8001607c <_ZL4Syncv+0xa0> + 80016104: 01013403 ld s0,16(sp) + 80016108: 01813083 ld ra,24(sp) + 8001610c: 00813483 ld s1,8(sp) + 80016110: 00013903 ld s2,0(sp) + 80016114: 00100513 li a0,1 + 80016118: 02010113 addi sp,sp,32 + 8001611c: f2dfa06f j 80011048 <_Z9setmirrori> + 80016120: 01013403 ld s0,16(sp) + 80016124: 01813083 ld ra,24(sp) + 80016128: 00813483 ld s1,8(sp) + 8001612c: 00013903 ld s2,0(sp) + 80016130: 00200513 li a0,2 + 80016134: 02010113 addi sp,sp,32 + 80016138: f11fa06f j 80011048 <_Z9setmirrori> + +000000008001613c <_ZL12StateRestorei>: + 8001613c: ea1ff06f j 80015fdc <_ZL4Syncv> + +0000000080016140 <_ZL13FFEWriteLatchjh>: + 80016140: 001b6797 auipc a5,0x1b6 + 80016144: d0b78223 sb a1,-764(a5) # 801cbe44 <_ZL5latch> + 80016148: e95ff06f j 80015fdc <_ZL4Syncv> + +000000008001614c <_ZL11FFEWriteChrjh>: + 8001614c: 00757793 andi a5,a0,7 + 80016150: 001b6517 auipc a0,0x1b6 + 80016154: ce050513 addi a0,a0,-800 # 801cbe30 <_ZL4creg> + 80016158: 00f50533 add a0,a0,a5 + 8001615c: 00b50023 sb a1,0(a0) + 80016160: e7dff06f j 80015fdc <_ZL4Syncv> + +0000000080016164 <_ZL11FFEWritePrgjh>: + 80016164: 00357793 andi a5,a0,3 + 80016168: 001b6517 auipc a0,0x1b6 + 8001616c: cd850513 addi a0,a0,-808 # 801cbe40 <_ZL4preg> + 80016170: 00f50533 add a0,a0,a5 + 80016174: 00b50023 sb a1,0(a0) + 80016178: e65ff06f j 80015fdc <_ZL4Syncv> + +000000008001617c <_ZL12FFEWriteMirrjh>: + 8001617c: 00151513 slli a0,a0,0x1 + 80016180: 0045d593 srli a1,a1,0x4 + 80016184: 00257513 andi a0,a0,2 + 80016188: 0015f593 andi a1,a1,1 + 8001618c: 00b56533 or a0,a0,a1 + 80016190: 001b6797 auipc a5,0x1b6 + 80016194: caa78423 sb a0,-856(a5) # 801cbe38 <_ZL4mirr> + 80016198: e45ff06f j 80015fdc <_ZL4Syncv> + +000000008001619c <_ZL8FFEClosev>: + 8001619c: 001b6517 auipc a0,0x1b6 + 800161a0: c8c53503 ld a0,-884(a0) # 801cbe28 <_ZL4WRAM> + 800161a4: 02050263 beqz a0,800161c8 <_ZL8FFEClosev+0x2c> + 800161a8: ff010113 addi sp,sp,-16 + 800161ac: 00113423 sd ra,8(sp) + 800161b0: b90fc0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 800161b4: 00813083 ld ra,8(sp) + 800161b8: 001b6797 auipc a5,0x1b6 + 800161bc: c607b823 sd zero,-912(a5) # 801cbe28 <_ZL4WRAM> + 800161c0: 01010113 addi sp,sp,16 + 800161c4: 00008067 ret + 800161c8: 001b6797 auipc a5,0x1b6 + 800161cc: c607b023 sd zero,-928(a5) # 801cbe28 <_ZL4WRAM> + 800161d0: 00008067 ret + +00000000800161d4 <_ZL8FFEPowerv>: + 800161d4: fe010113 addi sp,sp,-32 + 800161d8: fff00793 li a5,-1 + 800161dc: 00113c23 sd ra,24(sp) + 800161e0: 001b6717 auipc a4,0x1b6 + 800161e4: c6f701a3 sb a5,-925(a4) # 801cbe43 <_ZL4preg+0x3> + 800161e8: 00813823 sd s0,16(sp) + 800161ec: 00913423 sd s1,8(sp) + 800161f0: dedff0ef jal ra,80015fdc <_ZL4Syncv> + 800161f4: 000104b7 lui s1,0x10 + 800161f8: fff48593 addi a1,s1,-1 # ffff <_entry_offset+0xffff> + 800161fc: ffffa617 auipc a2,0xffffa + 80016200: 46460613 addi a2,a2,1124 # 80010660 <_Z6CartBRj> + 80016204: 00008537 lui a0,0x8 + 80016208: 00004437 lui s0,0x4 + 8001620c: 0111d0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80016210: 2ff40593 addi a1,s0,767 # 42ff <_entry_offset+0x42ff> + 80016214: 2fe40513 addi a0,s0,766 + 80016218: 00000617 auipc a2,0x0 + 8001621c: f6460613 addi a2,a2,-156 # 8001617c <_ZL12FFEWriteMirrjh> + 80016220: 1091d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80016224: 50340593 addi a1,s0,1283 + 80016228: 50040513 addi a0,s0,1280 + 8001622c: 00000617 auipc a2,0x0 + 80016230: 10c60613 addi a2,a2,268 # 80016338 <_ZL11FFEWriteIRQjh> + 80016234: 0f51d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80016238: 50740593 addi a1,s0,1287 + 8001623c: 50440513 addi a0,s0,1284 + 80016240: 00000617 auipc a2,0x0 + 80016244: f2460613 addi a2,a2,-220 # 80016164 <_ZL11FFEWritePrgjh> + 80016248: 0e11d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001624c: 51740593 addi a1,s0,1303 + 80016250: 51040513 addi a0,s0,1296 + 80016254: 00000617 auipc a2,0x0 + 80016258: ef860613 addi a2,a2,-264 # 8001614c <_ZL11FFEWriteChrjh> + 8001625c: 0cd1d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80016260: 51740593 addi a1,s0,1303 + 80016264: 51040513 addi a0,s0,1296 + 80016268: 00000617 auipc a2,0x0 + 8001626c: ee460613 addi a2,a2,-284 # 8001614c <_ZL11FFEWriteChrjh> + 80016270: 0b91d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80016274: 00008437 lui s0,0x8 + 80016278: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 8001627c: ffffa617 auipc a2,0xffffa + 80016280: 41060613 addi a2,a2,1040 # 8001068c <_Z6CartBWjh> + 80016284: 00006537 lui a0,0x6 + 80016288: 0a11d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001628c: fff40593 addi a1,s0,-1 + 80016290: ffffa617 auipc a2,0xffffa + 80016294: 3d060613 addi a2,a2,976 # 80010660 <_Z6CartBRj> + 80016298: 00006537 lui a0,0x6 + 8001629c: 7801d0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800162a0: fff48593 addi a1,s1,-1 + 800162a4: 00000617 auipc a2,0x0 + 800162a8: e9c60613 addi a2,a2,-356 # 80016140 <_ZL13FFEWriteLatchjh> + 800162ac: 00008537 lui a0,0x8 + 800162b0: 0791d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800162b4: 01013403 ld s0,16(sp) + 800162b8: 01813083 ld ra,24(sp) + 800162bc: 00813483 ld s1,8(sp) + 800162c0: 001b6517 auipc a0,0x1b6 + 800162c4: b9052503 lw a0,-1136(a0) # 801cbe50 <_ZL8WRAMSIZE> + 800162c8: 001b6617 auipc a2,0x1b6 + 800162cc: b6063603 ld a2,-1184(a2) # 801cbe28 <_ZL4WRAM> + 800162d0: 000065b7 lui a1,0x6 + 800162d4: 00a5551b srliw a0,a0,0xa + 800162d8: 02010113 addi sp,sp,32 + 800162dc: d39e906f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +00000000800162e0 <_ZL10FFEIRQHooki>: + 800162e0: 001b6797 auipc a5,0x1b6 + 800162e4: b407c783 lbu a5,-1216(a5) # 801cbe20 <_ZL4IRQa> + 800162e8: 02078063 beqz a5,80016308 <_ZL10FFEIRQHooki+0x28> + 800162ec: 001b6717 auipc a4,0x1b6 + 800162f0: b5c70713 addi a4,a4,-1188 # 801cbe48 <_ZL8IRQCount> + 800162f4: 00072783 lw a5,0(a4) + 800162f8: 000106b7 lui a3,0x10 + 800162fc: 00a787bb addw a5,a5,a0 + 80016300: 00f72023 sw a5,0(a4) + 80016304: 00d7d463 bge a5,a3,8001630c <_ZL10FFEIRQHooki+0x2c> + 80016308: 00008067 ret + 8001630c: ff010113 addi sp,sp,-16 + 80016310: 00100513 li a0,1 + 80016314: 00113423 sd ra,8(sp) + 80016318: a21ea0ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 8001631c: 00813083 ld ra,8(sp) + 80016320: 001b6797 auipc a5,0x1b6 + 80016324: b0078023 sb zero,-1280(a5) # 801cbe20 <_ZL4IRQa> + 80016328: 001b6797 auipc a5,0x1b6 + 8001632c: b207a023 sw zero,-1248(a5) # 801cbe48 <_ZL8IRQCount> + 80016330: 01010113 addi sp,sp,16 + 80016334: 00008067 ret + +0000000080016338 <_ZL11FFEWriteIRQjh>: + 80016338: 000047b7 lui a5,0x4 + 8001633c: 50278713 addi a4,a5,1282 # 4502 <_entry_offset+0x4502> + 80016340: 00e50c63 beq a0,a4,80016358 <_ZL11FFEWriteIRQjh+0x20> + 80016344: 50378713 addi a4,a5,1283 + 80016348: 04e50463 beq a0,a4,80016390 <_ZL11FFEWriteIRQjh+0x58> + 8001634c: 50178793 addi a5,a5,1281 + 80016350: 02f50863 beq a0,a5,80016380 <_ZL11FFEWriteIRQjh+0x48> + 80016354: 00008067 ret + 80016358: 001b6697 auipc a3,0x1b6 + 8001635c: af068693 addi a3,a3,-1296 # 801cbe48 <_ZL8IRQCount> + 80016360: 0006a783 lw a5,0(a3) + 80016364: 00010737 lui a4,0x10 + 80016368: f0070713 addi a4,a4,-256 # ff00 <_entry_offset+0xff00> + 8001636c: 00e7f7b3 and a5,a5,a4 + 80016370: 00b7e5b3 or a1,a5,a1 + 80016374: 00100513 li a0,1 + 80016378: 00b6a023 sw a1,0(a3) + 8001637c: 9d5ea06f j 80000d50 <_Z12X6502_IRQEndi> + 80016380: 00100513 li a0,1 + 80016384: 001b6797 auipc a5,0x1b6 + 80016388: a8078e23 sb zero,-1380(a5) # 801cbe20 <_ZL4IRQa> + 8001638c: 9c5ea06f j 80000d50 <_Z12X6502_IRQEndi> + 80016390: 001b6717 auipc a4,0x1b6 + 80016394: ab870713 addi a4,a4,-1352 # 801cbe48 <_ZL8IRQCount> + 80016398: 00074783 lbu a5,0(a4) + 8001639c: 0085959b slliw a1,a1,0x8 + 800163a0: 00100513 li a0,1 + 800163a4: 00b7e5b3 or a1,a5,a1 + 800163a8: 00100793 li a5,1 + 800163ac: 00b72023 sw a1,0(a4) + 800163b0: 001b6717 auipc a4,0x1b6 + 800163b4: a6f70823 sb a5,-1424(a4) # 801cbe20 <_ZL4IRQa> + 800163b8: 999ea06f j 80000d50 <_Z12X6502_IRQEndi> + +00000000800163bc <_Z12Mapper6_InitP8CartInfo>: + 800163bc: 04852783 lw a5,72(a0) + 800163c0: fe010113 addi sp,sp,-32 + 800163c4: 00113c23 sd ra,24(sp) + 800163c8: 0017f713 andi a4,a5,1 + 800163cc: 00300793 li a5,3 + 800163d0: 40e787bb subw a5,a5,a4 + 800163d4: 00813823 sd s0,16(sp) + 800163d8: 00913423 sd s1,8(sp) + 800163dc: 01213023 sd s2,0(sp) + 800163e0: 001b6717 auipc a4,0x1b6 + 800163e4: a4f70c23 sb a5,-1448(a4) # 801cbe38 <_ZL4mirr> + 800163e8: 00000797 auipc a5,0x0 + 800163ec: dec78793 addi a5,a5,-532 # 800161d4 <_ZL8FFEPowerv> + 800163f0: 00f53023 sd a5,0(a0) + 800163f4: 00000797 auipc a5,0x0 + 800163f8: da878793 addi a5,a5,-600 # 8001619c <_ZL8FFEClosev> + 800163fc: 00f53823 sd a5,16(a0) + 80016400: 001b6797 auipc a5,0x1b6 + 80016404: a40782a3 sb zero,-1467(a5) # 801cbe45 <_ZL7ffemode> + 80016408: 00000797 auipc a5,0x0 + 8001640c: ed878793 addi a5,a5,-296 # 800162e0 <_ZL10FFEIRQHooki> + 80016410: 001b5717 auipc a4,0x1b5 + 80016414: 72f73823 sd a5,1840(a4) # 801cbb40 + 80016418: 00000797 auipc a5,0x0 + 8001641c: d2478793 addi a5,a5,-732 # 8001613c <_ZL12StateRestorei> + 80016420: 001b6497 auipc s1,0x1b6 + 80016424: a3048493 addi s1,s1,-1488 # 801cbe50 <_ZL8WRAMSIZE> + 80016428: 00050413 mv s0,a0 + 8001642c: 001b6717 auipc a4,0x1b6 + 80016430: 22f73623 sd a5,556(a4) # 801cc658 + 80016434: 00002537 lui a0,0x2 + 80016438: 000027b7 lui a5,0x2 + 8001643c: 00f4a023 sw a5,0(s1) + 80016440: 82cfc0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80016444: 0004a603 lw a2,0(s1) + 80016448: 00050593 mv a1,a0 + 8001644c: 001b6917 auipc s2,0x1b6 + 80016450: 9dc90913 addi s2,s2,-1572 # 801cbe28 <_ZL4WRAM> + 80016454: 00100693 li a3,1 + 80016458: 01000513 li a0,16 + 8001645c: 00b93023 sd a1,0(s2) + 80016460: 894fa0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80016464: 0004a583 lw a1,0(s1) + 80016468: 00093503 ld a0,0(s2) + 8001646c: 0002f697 auipc a3,0x2f + 80016470: ebc68693 addi a3,a3,-324 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80016474: 00000613 li a2,0 + 80016478: b99e90ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001647c: 04c42783 lw a5,76(s0) + 80016480: 00078a63 beqz a5,80016494 <_Z12Mapper6_InitP8CartInfo+0xd8> + 80016484: 00093703 ld a4,0(s2) + 80016488: 0004a783 lw a5,0(s1) + 8001648c: 00e43c23 sd a4,24(s0) + 80016490: 02f42c23 sw a5,56(s0) + 80016494: 01013403 ld s0,16(sp) + 80016498: 01813083 ld ra,24(sp) + 8001649c: 00813483 ld s1,8(sp) + 800164a0: 00013903 ld s2,0(sp) + 800164a4: 00000693 li a3,0 + 800164a8: 00000613 li a2,0 + 800164ac: fff00593 li a1,-1 + 800164b0: 00034517 auipc a0,0x34 + 800164b4: 3a850513 addi a0,a0,936 # 8004a858 <_ZL9StateRegs> + 800164b8: 02010113 addi sp,sp,32 + 800164bc: b55e906f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800164c0 <_Z13Mapper17_InitP8CartInfo>: + 800164c0: 00100793 li a5,1 + 800164c4: 001b6717 auipc a4,0x1b6 + 800164c8: 98f700a3 sb a5,-1663(a4) # 801cbe45 <_ZL7ffemode> + 800164cc: ef1ff06f j 800163bc <_Z12Mapper6_InitP8CartInfo> + +00000000800164d0 <_ZL4Syncv>: + 800164d0: fe010113 addi sp,sp,-32 + 800164d4: 00813823 sd s0,16(sp) + 800164d8: 001b6417 auipc s0,0x1b6 + 800164dc: 97c40413 addi s0,s0,-1668 # 801cbe54 <_ZL4bank> + 800164e0: 00044583 lbu a1,0(s0) + 800164e4: 00113c23 sd ra,24(sp) + 800164e8: 00913423 sd s1,8(sp) + 800164ec: 0405f793 andi a5,a1,64 + 800164f0: 06078463 beqz a5,80016558 <_ZL4Syncv+0x88> + 800164f4: 001b6497 auipc s1,0x1b6 + 800164f8: 96148493 addi s1,s1,-1695 # 801cbe55 <_ZL4preg> + 800164fc: 0004c783 lbu a5,0(s1) + 80016500: 00e5f593 andi a1,a1,14 + 80016504: 00008537 lui a0,0x8 + 80016508: 0017f793 andi a5,a5,1 + 8001650c: 00b7e5b3 or a1,a5,a1 + 80016510: 905fa0ef jal ra,80010e14 <_Z8setprg32jj> + 80016514: 00044503 lbu a0,0(s0) + 80016518: 0004c783 lbu a5,0(s1) + 8001651c: 0025151b slliw a0,a0,0x2 + 80016520: 4047d79b sraiw a5,a5,0x4 + 80016524: 03857513 andi a0,a0,56 + 80016528: 0077f793 andi a5,a5,7 + 8001652c: 00f56533 or a0,a0,a5 + 80016530: 9d5fa0ef jal ra,80010f04 <_Z7setchr8j> + 80016534: 00044503 lbu a0,0(s0) + 80016538: 01013403 ld s0,16(sp) + 8001653c: 01813083 ld ra,24(sp) + 80016540: 00813483 ld s1,8(sp) + 80016544: 4075551b sraiw a0,a0,0x7 + 80016548: 00154513 xori a0,a0,1 + 8001654c: 0005051b sext.w a0,a0 + 80016550: 02010113 addi sp,sp,32 + 80016554: af5fa06f j 80011048 <_Z9setmirrori> + 80016558: 00008537 lui a0,0x8 + 8001655c: 00f5f593 andi a1,a1,15 + 80016560: 8b5fa0ef jal ra,80010e14 <_Z8setprg32jj> + 80016564: 00044503 lbu a0,0(s0) + 80016568: 001b6797 auipc a5,0x1b6 + 8001656c: 8ed7c783 lbu a5,-1811(a5) # 801cbe55 <_ZL4preg> + 80016570: 4047d79b sraiw a5,a5,0x4 + 80016574: 0025151b slliw a0,a0,0x2 + 80016578: 0037f793 andi a5,a5,3 + 8001657c: 03c57513 andi a0,a0,60 + 80016580: 00f56533 or a0,a0,a5 + 80016584: 981fa0ef jal ra,80010f04 <_Z7setchr8j> + 80016588: fadff06f j 80016534 <_ZL4Syncv+0x64> + +000000008001658c <_Z12M234ReadBankj>: + 8001658c: fe010113 addi sp,sp,-32 + 80016590: 00113c23 sd ra,24(sp) + 80016594: 8ccfa0ef jal ra,80010660 <_Z6CartBRj> + 80016598: 001b6797 auipc a5,0x1b6 + 8001659c: 8bc78793 addi a5,a5,-1860 # 801cbe54 <_ZL4bank> + 800165a0: 0007c703 lbu a4,0(a5) + 800165a4: 00070863 beqz a4,800165b4 <_Z12M234ReadBankj+0x28> + 800165a8: 01813083 ld ra,24(sp) + 800165ac: 02010113 addi sp,sp,32 + 800165b0: 00008067 ret + 800165b4: 00a13423 sd a0,8(sp) + 800165b8: 00a78023 sb a0,0(a5) + 800165bc: f15ff0ef jal ra,800164d0 <_ZL4Syncv> + 800165c0: 01813083 ld ra,24(sp) + 800165c4: 00813503 ld a0,8(sp) + 800165c8: 02010113 addi sp,sp,32 + 800165cc: 00008067 ret + +00000000800165d0 <_Z12M234ReadPregj>: + 800165d0: ff010113 addi sp,sp,-16 + 800165d4: 00113423 sd ra,8(sp) + 800165d8: 00813023 sd s0,0(sp) + 800165dc: 884fa0ef jal ra,80010660 <_Z6CartBRj> + 800165e0: 00050413 mv s0,a0 + 800165e4: 001b6797 auipc a5,0x1b6 + 800165e8: 86a788a3 sb a0,-1935(a5) # 801cbe55 <_ZL4preg> + 800165ec: ee5ff0ef jal ra,800164d0 <_ZL4Syncv> + 800165f0: 00813083 ld ra,8(sp) + 800165f4: 00040513 mv a0,s0 + 800165f8: 00013403 ld s0,0(sp) + 800165fc: 01010113 addi sp,sp,16 + 80016600: 00008067 ret + +0000000080016604 <_ZL12StateRestorei>: + 80016604: ecdff06f j 800164d0 <_ZL4Syncv> + +0000000080016608 <_ZL9M234Resetv>: + 80016608: 001b6797 auipc a5,0x1b6 + 8001660c: 840786a3 sb zero,-1971(a5) # 801cbe55 <_ZL4preg> + 80016610: 001b6797 auipc a5,0x1b6 + 80016614: 84078223 sb zero,-1980(a5) # 801cbe54 <_ZL4bank> + 80016618: eb9ff06f j 800164d0 <_ZL4Syncv> + +000000008001661c <_ZL9M234Powerv>: + 8001661c: ff010113 addi sp,sp,-16 + 80016620: 00113423 sd ra,8(sp) + 80016624: 00813023 sd s0,0(sp) + 80016628: 001b6797 auipc a5,0x1b6 + 8001662c: 820786a3 sb zero,-2003(a5) # 801cbe55 <_ZL4preg> + 80016630: 00010437 lui s0,0x10 + 80016634: 001b6797 auipc a5,0x1b6 + 80016638: 82078023 sb zero,-2016(a5) # 801cbe54 <_ZL4bank> + 8001663c: e95ff0ef jal ra,800164d0 <_ZL4Syncv> + 80016640: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80016644: ffffa617 auipc a2,0xffffa + 80016648: 01c60613 addi a2,a2,28 # 80010660 <_Z6CartBRj> + 8001664c: 00008537 lui a0,0x8 + 80016650: 3cc1d0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80016654: f9f40593 addi a1,s0,-97 + 80016658: f8040513 addi a0,s0,-128 + 8001665c: 00000617 auipc a2,0x0 + 80016660: f3060613 addi a2,a2,-208 # 8001658c <_Z12M234ReadBankj> + 80016664: 3b81d0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80016668: ff740593 addi a1,s0,-9 + 8001666c: fe840513 addi a0,s0,-24 + 80016670: 00013403 ld s0,0(sp) + 80016674: 00813083 ld ra,8(sp) + 80016678: 00000617 auipc a2,0x0 + 8001667c: f5860613 addi a2,a2,-168 # 800165d0 <_Z12M234ReadPregj> + 80016680: 01010113 addi sp,sp,16 + 80016684: 3981d06f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080016688 <_Z14Mapper234_InitP8CartInfo>: + 80016688: ff010113 addi sp,sp,-16 + 8001668c: 00113423 sd ra,8(sp) + 80016690: 00000797 auipc a5,0x0 + 80016694: f8c78793 addi a5,a5,-116 # 8001661c <_ZL9M234Powerv> + 80016698: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 8001669c: 00000797 auipc a5,0x0 + 800166a0: f6c78793 addi a5,a5,-148 # 80016608 <_ZL9M234Resetv> + 800166a4: 00f53423 sd a5,8(a0) + 800166a8: 00000693 li a3,0 + 800166ac: 00000613 li a2,0 + 800166b0: fff00593 li a1,-1 + 800166b4: 00034517 auipc a0,0x34 + 800166b8: 24c50513 addi a0,a0,588 # 8004a900 <_ZL9StateRegs> + 800166bc: 955e90ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800166c0: 00813083 ld ra,8(sp) + 800166c4: 00000797 auipc a5,0x0 + 800166c8: f4078793 addi a5,a5,-192 # 80016604 <_ZL12StateRestorei> + 800166cc: 001b6717 auipc a4,0x1b6 + 800166d0: f8f73623 sd a5,-116(a4) # 801cc658 + 800166d4: 01010113 addi sp,sp,16 + 800166d8: 00008067 ret + +00000000800166dc <_ZL11M225LoWritejh>: + 800166dc: 00008067 ret + +00000000800166e0 <_ZL10M225LoReadj>: + 800166e0: 00000513 li a0,0 + 800166e4: 00008067 ret + +00000000800166e8 <_ZL4Syncv>: + 800166e8: ff010113 addi sp,sp,-16 + 800166ec: 00813023 sd s0,0(sp) + 800166f0: 00113423 sd ra,8(sp) + 800166f4: 001b5417 auipc s0,0x1b5 + 800166f8: 76340413 addi s0,s0,1891 # 801cbe57 <_ZL3prg> + 800166fc: 001b5797 auipc a5,0x1b5 + 80016700: 75d7c783 lbu a5,1885(a5) # 801cbe59 <_ZL4mode> + 80016704: 00044583 lbu a1,0(s0) + 80016708: 04078063 beqz a5,80016748 <_ZL4Syncv+0x60> + 8001670c: 00008537 lui a0,0x8 + 80016710: d48fa0ef jal ra,80010c58 <_Z8setprg16jj> + 80016714: 00044583 lbu a1,0(s0) + 80016718: 0000c537 lui a0,0xc + 8001671c: d3cfa0ef jal ra,80010c58 <_Z8setprg16jj> + 80016720: 001b5517 auipc a0,0x1b5 + 80016724: 73654503 lbu a0,1846(a0) # 801cbe56 <_ZL3chr> + 80016728: fdcfa0ef jal ra,80010f04 <_Z7setchr8j> + 8001672c: 00013403 ld s0,0(sp) + 80016730: 00813083 ld ra,8(sp) + 80016734: 001b5517 auipc a0,0x1b5 + 80016738: 72454503 lbu a0,1828(a0) # 801cbe58 <_ZL4mirr> + 8001673c: 00154513 xori a0,a0,1 + 80016740: 01010113 addi sp,sp,16 + 80016744: 905fa06f j 80011048 <_Z9setmirrori> + 80016748: 0015d593 srli a1,a1,0x1 + 8001674c: 00008537 lui a0,0x8 + 80016750: ec4fa0ef jal ra,80010e14 <_Z8setprg32jj> + 80016754: fcdff06f j 80016720 <_ZL4Syncv+0x38> + +0000000080016758 <_ZL12StateRestorei>: + 80016758: f91ff06f j 800166e8 <_ZL4Syncv> + +000000008001675c <_ZL9M225Writejh>: + 8001675c: 00e5579b srliw a5,a0,0xe + 80016760: 0065561b srliw a2,a0,0x6 + 80016764: 0017f793 andi a5,a5,1 + 80016768: 00679793 slli a5,a5,0x6 + 8001676c: 00d5569b srliw a3,a0,0xd + 80016770: 00c5571b srliw a4,a0,0xc + 80016774: 03f67613 andi a2,a2,63 + 80016778: 03f57513 andi a0,a0,63 + 8001677c: 00177713 andi a4,a4,1 + 80016780: 0016f693 andi a3,a3,1 + 80016784: 00a7e533 or a0,a5,a0 + 80016788: 00c7e7b3 or a5,a5,a2 + 8001678c: 001b5617 auipc a2,0x1b5 + 80016790: 6cd60623 sb a3,1740(a2) # 801cbe58 <_ZL4mirr> + 80016794: 001b5697 auipc a3,0x1b5 + 80016798: 6ce682a3 sb a4,1733(a3) # 801cbe59 <_ZL4mode> + 8001679c: 001b5717 auipc a4,0x1b5 + 800167a0: 6aa70d23 sb a0,1722(a4) # 801cbe56 <_ZL3chr> + 800167a4: 001b5717 auipc a4,0x1b5 + 800167a8: 6af709a3 sb a5,1715(a4) # 801cbe57 <_ZL3prg> + 800167ac: f3dff06f j 800166e8 <_ZL4Syncv> + +00000000800167b0 <_ZL9M225Resetv>: + 800167b0: 001b5797 auipc a5,0x1b5 + 800167b4: 6a0783a3 sb zero,1703(a5) # 801cbe57 <_ZL3prg> + 800167b8: 001b5797 auipc a5,0x1b5 + 800167bc: 6a0780a3 sb zero,1697(a5) # 801cbe59 <_ZL4mode> + 800167c0: f29ff06f j 800166e8 <_ZL4Syncv> + +00000000800167c4 <_ZL9M225Powerv>: + 800167c4: ff010113 addi sp,sp,-16 + 800167c8: 00113423 sd ra,8(sp) + 800167cc: 00813023 sd s0,0(sp) + 800167d0: 001b5797 auipc a5,0x1b5 + 800167d4: 680783a3 sb zero,1671(a5) # 801cbe57 <_ZL3prg> + 800167d8: 00006437 lui s0,0x6 + 800167dc: 001b5797 auipc a5,0x1b5 + 800167e0: 66078ea3 sb zero,1661(a5) # 801cbe59 <_ZL4mode> + 800167e4: f05ff0ef jal ra,800166e8 <_ZL4Syncv> + 800167e8: fff40593 addi a1,s0,-1 # 5fff <_entry_offset+0x5fff> + 800167ec: 00000617 auipc a2,0x0 + 800167f0: ef460613 addi a2,a2,-268 # 800166e0 <_ZL10M225LoReadj> + 800167f4: 00005537 lui a0,0x5 + 800167f8: 2241d0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800167fc: fff40593 addi a1,s0,-1 + 80016800: 00000617 auipc a2,0x0 + 80016804: edc60613 addi a2,a2,-292 # 800166dc <_ZL11M225LoWritejh> + 80016808: 00005537 lui a0,0x5 + 8001680c: 31c1d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80016810: 00010437 lui s0,0x10 + 80016814: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80016818: ffffa617 auipc a2,0xffffa + 8001681c: e4860613 addi a2,a2,-440 # 80010660 <_Z6CartBRj> + 80016820: 00008537 lui a0,0x8 + 80016824: 1f81d0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80016828: fff40593 addi a1,s0,-1 + 8001682c: 00013403 ld s0,0(sp) + 80016830: 00813083 ld ra,8(sp) + 80016834: 00000617 auipc a2,0x0 + 80016838: f2860613 addi a2,a2,-216 # 8001675c <_ZL9M225Writejh> + 8001683c: 00008537 lui a0,0x8 + 80016840: 01010113 addi sp,sp,16 + 80016844: 2e41d06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080016848 <_Z14Mapper225_InitP8CartInfo>: + 80016848: 00000797 auipc a5,0x0 + 8001684c: f7c78793 addi a5,a5,-132 # 800167c4 <_ZL9M225Powerv> + 80016850: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 80016854: 00000797 auipc a5,0x0 + 80016858: f5c78793 addi a5,a5,-164 # 800167b0 <_ZL9M225Resetv> + 8001685c: 00f53423 sd a5,8(a0) + 80016860: 00000797 auipc a5,0x0 + 80016864: ef878793 addi a5,a5,-264 # 80016758 <_ZL12StateRestorei> + 80016868: 00000693 li a3,0 + 8001686c: 00000613 li a2,0 + 80016870: fff00593 li a1,-1 + 80016874: 00034517 auipc a0,0x34 + 80016878: 0d450513 addi a0,a0,212 # 8004a948 <_ZL9StateRegs> + 8001687c: 001b6717 auipc a4,0x1b6 + 80016880: dcf73e23 sd a5,-548(a4) # 801cc658 + 80016884: f8ce906f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080016888 <_ZL8M187Readj>: + 80016888: 001b6797 auipc a5,0x1b6 + 8001688c: 9c97c783 lbu a5,-1591(a5) # 801cc251 + 80016890: 0037f713 andi a4,a5,3 + 80016894: 00030797 auipc a5,0x30 + 80016898: 13478793 addi a5,a5,308 # 800469c8 <_ZL9prot_data> + 8001689c: 00e787b3 add a5,a5,a4 + 800168a0: 0007c503 lbu a0,0(a5) + 800168a4: 00008067 ret + +00000000800168a8 <_ZL9M187Powerv>: + 800168a8: ff010113 addi sp,sp,-16 + 800168ac: 00113423 sd ra,8(sp) + 800168b0: 001b6797 auipc a5,0x1b6 + 800168b4: 9a078793 addi a5,a5,-1632 # 801cc250 + 800168b8: 000780a3 sb zero,1(a5) + 800168bc: 00078023 sb zero,0(a5) + 800168c0: 1010f0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 800168c4: 000065b7 lui a1,0x6 + 800168c8: 00000617 auipc a2,0x0 + 800168cc: fc060613 addi a2,a2,-64 # 80016888 <_ZL8M187Readj> + 800168d0: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 800168d4: 00005537 lui a0,0x5 + 800168d8: 1441d0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800168dc: 000075b7 lui a1,0x7 + 800168e0: 00000617 auipc a2,0x0 + 800168e4: 11060613 addi a2,a2,272 # 800169f0 <_ZL11M187WriteLojh> + 800168e8: fff58593 addi a1,a1,-1 # 6fff <_entry_offset+0x6fff> + 800168ec: 00005537 lui a0,0x5 + 800168f0: 2381d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800168f4: 00000617 auipc a2,0x0 + 800168f8: 04860613 addi a2,a2,72 # 8001693c <_ZL13M187Write8000jh> + 800168fc: 000085b7 lui a1,0x8 + 80016900: 00008537 lui a0,0x8 + 80016904: 2241d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80016908: 00813083 ld ra,8(sp) + 8001690c: 000085b7 lui a1,0x8 + 80016910: 00158593 addi a1,a1,1 # 8001 <_entry_offset+0x8001> + 80016914: 00000617 auipc a2,0x0 + 80016918: 01460613 addi a2,a2,20 # 80016928 <_ZL13M187Write8001jh> + 8001691c: 00058513 mv a0,a1 + 80016920: 01010113 addi sp,sp,16 + 80016924: 2041d06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080016928 <_ZL13M187Write8001jh>: + 80016928: 001b6797 auipc a5,0x1b6 + 8001692c: 9297c783 lbu a5,-1751(a5) # 801cc251 + 80016930: 00079463 bnez a5,80016938 <_ZL13M187Write8001jh+0x10> + 80016934: 00008067 ret + 80016938: 78d0f06f j 800268c4 <_Z13MMC3_CMDWritejh> + +000000008001693c <_ZL13M187Write8000jh>: + 8001693c: 00100793 li a5,1 + 80016940: 001b6717 auipc a4,0x1b6 + 80016944: 90f708a3 sb a5,-1775(a4) # 801cc251 + 80016948: 77d0f06f j 800268c4 <_Z13MMC3_CMDWritejh> + +000000008001694c <_ZL6M187CWjh>: + 8001694c: 001b6797 auipc a5,0x1b6 + 80016950: 9107c783 lbu a5,-1776(a5) # 801cc25c + 80016954: 0057979b slliw a5,a5,0x5 + 80016958: 00f547b3 xor a5,a0,a5 + 8001695c: 03379713 slli a4,a5,0x33 + 80016960: 00074663 bltz a4,8001696c <_ZL6M187CWjh+0x20> + 80016964: 1005e593 ori a1,a1,256 + 80016968: d3cfa06f j 80010ea4 <_Z7setchr1jj> + 8001696c: d38fa06f j 80010ea4 <_Z7setchr1jj> + +0000000080016970 <_ZL6M187PWjh>: + 80016970: 001b6797 auipc a5,0x1b6 + 80016974: 8e07c783 lbu a5,-1824(a5) # 801cc250 + 80016978: 0187971b slliw a4,a5,0x18 + 8001697c: 4187571b sraiw a4,a4,0x18 + 80016980: 02075463 bgez a4,800169a8 <_ZL6M187PWjh+0x38> + 80016984: 0207f713 andi a4,a5,32 + 80016988: 01f7f593 andi a1,a5,31 + 8001698c: 02070863 beqz a4,800169bc <_ZL6M187PWjh+0x4c> + 80016990: 0407f793 andi a5,a5,64 + 80016994: 0005859b sext.w a1,a1 + 80016998: 00078c63 beqz a5,800169b0 <_ZL6M187PWjh+0x40> + 8001699c: 0025d593 srli a1,a1,0x2 + 800169a0: 00008537 lui a0,0x8 + 800169a4: c70fa06f j 80010e14 <_Z8setprg32jj> + 800169a8: 03f5f593 andi a1,a1,63 + 800169ac: 8f0fa06f j 80010a9c <_Z7setprg8jj> + 800169b0: 0015d593 srli a1,a1,0x1 + 800169b4: 00008537 lui a0,0x8 + 800169b8: c5cfa06f j 80010e14 <_Z8setprg32jj> + 800169bc: ff010113 addi sp,sp,-16 + 800169c0: 00813023 sd s0,0(sp) + 800169c4: 0005841b sext.w s0,a1 + 800169c8: 00040593 mv a1,s0 + 800169cc: 00008537 lui a0,0x8 + 800169d0: 00113423 sd ra,8(sp) + 800169d4: a84fa0ef jal ra,80010c58 <_Z8setprg16jj> + 800169d8: 00040593 mv a1,s0 + 800169dc: 00013403 ld s0,0(sp) + 800169e0: 00813083 ld ra,8(sp) + 800169e4: 0000c537 lui a0,0xc + 800169e8: 01010113 addi sp,sp,16 + 800169ec: a6cfa06f j 80010c58 <_Z8setprg16jj> + +00000000800169f0 <_ZL11M187WriteLojh>: + 800169f0: ffffb7b7 lui a5,0xffffb + 800169f4: 00a7853b addw a0,a5,a0 + 800169f8: fffff7b7 lui a5,0xfffff + 800169fc: fff78793 addi a5,a5,-1 # ffffffffffffefff <_end+0xffffffff7fe29fff> + 80016a00: 00f57533 and a0,a0,a5 + 80016a04: 0005051b sext.w a0,a0 + 80016a08: 00050463 beqz a0,80016a10 <_ZL11M187WriteLojh+0x20> + 80016a0c: 00008067 ret + 80016a10: 001b6517 auipc a0,0x1b6 + 80016a14: 84c54503 lbu a0,-1972(a0) # 801cc25c + 80016a18: 001b6797 auipc a5,0x1b6 + 80016a1c: 82b78c23 sb a1,-1992(a5) # 801cc250 + 80016a20: 44c0f06f j 80025e6c <_Z10FixMMC3PRGi> + +0000000080016a24 <_Z14Mapper187_InitP8CartInfo>: + 80016a24: ff010113 addi sp,sp,-16 + 80016a28: 00000713 li a4,0 + 80016a2c: 00000693 li a3,0 + 80016a30: 10000613 li a2,256 + 80016a34: 10000593 li a1,256 + 80016a38: 00813023 sd s0,0(sp) + 80016a3c: 00113423 sd ra,8(sp) + 80016a40: 00050413 mv s0,a0 + 80016a44: 5d4100ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80016a48: 00000797 auipc a5,0x0 + 80016a4c: f2878793 addi a5,a5,-216 # 80016970 <_ZL6M187PWjh> + 80016a50: 001b6717 auipc a4,0x1b6 + 80016a54: 84f73423 sd a5,-1976(a4) # 801cc298 + 80016a58: 00000797 auipc a5,0x0 + 80016a5c: ef478793 addi a5,a5,-268 # 8001694c <_ZL6M187CWjh> + 80016a60: 001b6717 auipc a4,0x1b6 + 80016a64: 82f73023 sd a5,-2016(a4) # 801cc280 + 80016a68: 00000797 auipc a5,0x0 + 80016a6c: e4078793 addi a5,a5,-448 # 800168a8 <_ZL9M187Powerv> + 80016a70: 00f43023 sd a5,0(s0) + 80016a74: 00013403 ld s0,0(sp) + 80016a78: 00813083 ld ra,8(sp) + 80016a7c: 0002f697 auipc a3,0x2f + 80016a80: a7468693 addi a3,a3,-1420 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 80016a84: 00000613 li a2,0 + 80016a88: 00300593 li a1,3 + 80016a8c: 001b5517 auipc a0,0x1b5 + 80016a90: 7c450513 addi a0,a0,1988 # 801cc250 + 80016a94: 01010113 addi sp,sp,16 + 80016a98: d78e906f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080016a9c <_ZL7SyncPrgv>: + 80016a9c: ff010113 addi sp,sp,-16 + 80016aa0: 00813023 sd s0,0(sp) + 80016aa4: 001b5417 auipc s0,0x1b5 + 80016aa8: 3cc40413 addi s0,s0,972 # 801cbe70 <_ZL3prg> + 80016aac: 00344583 lbu a1,3(s0) + 80016ab0: 00006537 lui a0,0x6 + 80016ab4: 00113423 sd ra,8(sp) + 80016ab8: fe5f90ef jal ra,80010a9c <_Z7setprg8jj> + 80016abc: 00044583 lbu a1,0(s0) + 80016ac0: 00008537 lui a0,0x8 + 80016ac4: fd9f90ef jal ra,80010a9c <_Z7setprg8jj> + 80016ac8: 00144583 lbu a1,1(s0) + 80016acc: 0000a537 lui a0,0xa + 80016ad0: fcdf90ef jal ra,80010a9c <_Z7setprg8jj> + 80016ad4: 00244583 lbu a1,2(s0) + 80016ad8: 0000c537 lui a0,0xc + 80016adc: fc1f90ef jal ra,80010a9c <_Z7setprg8jj> + 80016ae0: 00013403 ld s0,0(sp) + 80016ae4: 00813083 ld ra,8(sp) + 80016ae8: fff00593 li a1,-1 + 80016aec: 0000e537 lui a0,0xe + 80016af0: 01010113 addi sp,sp,16 + 80016af4: fa9f906f j 80010a9c <_Z7setprg8jj> + +0000000080016af8 <_ZL8SyncMirrv>: + 80016af8: 001b5797 auipc a5,0x1b5 + 80016afc: 37d7c783 lbu a5,893(a5) # 801cbe75 <_ZL4mirr> + 80016b00: 00200713 li a4,2 + 80016b04: 02e78863 beq a5,a4,80016b34 <_ZL8SyncMirrv+0x3c> + 80016b08: 00f76863 bltu a4,a5,80016b18 <_ZL8SyncMirrv+0x20> + 80016b0c: 02078063 beqz a5,80016b2c <_ZL8SyncMirrv+0x34> + 80016b10: 00000513 li a0,0 + 80016b14: d34fa06f j 80011048 <_Z9setmirrori> + 80016b18: 00300713 li a4,3 + 80016b1c: 00e79663 bne a5,a4,80016b28 <_ZL8SyncMirrv+0x30> + 80016b20: 00300513 li a0,3 + 80016b24: d24fa06f j 80011048 <_Z9setmirrori> + 80016b28: 00008067 ret + 80016b2c: 00100513 li a0,1 + 80016b30: d18fa06f j 80011048 <_Z9setmirrori> + 80016b34: 00200513 li a0,2 + 80016b38: d10fa06f j 80011048 <_Z9setmirrori> + +0000000080016b3c <_ZL12StateRestorei>: + 80016b3c: fe010113 addi sp,sp,-32 + 80016b40: 00813823 sd s0,16(sp) + 80016b44: 00913423 sd s1,8(sp) + 80016b48: 01213023 sd s2,0(sp) + 80016b4c: 00113c23 sd ra,24(sp) + 80016b50: 001b5497 auipc s1,0x1b5 + 80016b54: 31848493 addi s1,s1,792 # 801cbe68 <_ZL3chr> + 80016b58: f45ff0ef jal ra,80016a9c <_ZL7SyncPrgv> + 80016b5c: 00000413 li s0,0 + 80016b60: 00002937 lui s2,0x2 + 80016b64: 0004c583 lbu a1,0(s1) + 80016b68: 00040513 mv a0,s0 + 80016b6c: 4004041b addiw s0,s0,1024 + 80016b70: b34fa0ef jal ra,80010ea4 <_Z7setchr1jj> + 80016b74: 00148493 addi s1,s1,1 + 80016b78: ff2416e3 bne s0,s2,80016b64 <_ZL12StateRestorei+0x28> + 80016b7c: 01013403 ld s0,16(sp) + 80016b80: 01813083 ld ra,24(sp) + 80016b84: 00813483 ld s1,8(sp) + 80016b88: 00013903 ld s2,0(sp) + 80016b8c: 02010113 addi sp,sp,32 + 80016b90: f69ff06f j 80016af8 <_ZL8SyncMirrv> + +0000000080016b94 <_ZL9M183Powerv>: + 80016b94: fe010113 addi sp,sp,-32 + 80016b98: 00813823 sd s0,16(sp) + 80016b9c: 00010437 lui s0,0x10 + 80016ba0: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80016ba4: ffffa617 auipc a2,0xffffa + 80016ba8: abc60613 addi a2,a2,-1348 # 80010660 <_Z6CartBRj> + 80016bac: 00006537 lui a0,0x6 + 80016bb0: 00113c23 sd ra,24(sp) + 80016bb4: 00913423 sd s1,8(sp) + 80016bb8: 01213023 sd s2,0(sp) + 80016bbc: 001b5797 auipc a5,0x1b5 + 80016bc0: 2a078c23 sb zero,696(a5) # 801cbe74 <_ZL4IRQa> + 80016bc4: 001b5797 auipc a5,0x1b5 + 80016bc8: 2a0789a3 sb zero,691(a5) # 801cbe77 <_ZL8IRQCount> + 80016bcc: 001b5797 auipc a5,0x1b5 + 80016bd0: 2a078523 sb zero,682(a5) # 801cbe76 <_ZL6IRQPre> + 80016bd4: 6491c0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80016bd8: fff40593 addi a1,s0,-1 + 80016bdc: 00000617 auipc a2,0x0 + 80016be0: 05460613 addi a2,a2,84 # 80016c30 <_ZL9M183Writejh> + 80016be4: 00006537 lui a0,0x6 + 80016be8: 7411c0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80016bec: 001b5497 auipc s1,0x1b5 + 80016bf0: 27c48493 addi s1,s1,636 # 801cbe68 <_ZL3chr> + 80016bf4: ea9ff0ef jal ra,80016a9c <_ZL7SyncPrgv> + 80016bf8: 00000413 li s0,0 + 80016bfc: 00002937 lui s2,0x2 + 80016c00: 0004c583 lbu a1,0(s1) + 80016c04: 00040513 mv a0,s0 + 80016c08: 4004041b addiw s0,s0,1024 + 80016c0c: a98fa0ef jal ra,80010ea4 <_Z7setchr1jj> + 80016c10: 00148493 addi s1,s1,1 + 80016c14: ff2416e3 bne s0,s2,80016c00 <_ZL9M183Powerv+0x6c> + 80016c18: 01813083 ld ra,24(sp) + 80016c1c: 01013403 ld s0,16(sp) + 80016c20: 00813483 ld s1,8(sp) + 80016c24: 00013903 ld s2,0(sp) + 80016c28: 02010113 addi sp,sp,32 + 80016c2c: 00008067 ret + +0000000080016c30 <_ZL9M183Writejh>: + 80016c30: 000107b7 lui a5,0x10 + 80016c34: 80078713 addi a4,a5,-2048 # f800 <_entry_offset+0xf800> + 80016c38: 00e576b3 and a3,a0,a4 + 80016c3c: 00007737 lui a4,0x7 + 80016c40: 80070713 addi a4,a4,-2048 # 6800 <_entry_offset+0x6800> + 80016c44: 14e68663 beq a3,a4,80016d90 <_ZL9M183Writejh+0x160> + 80016c48: 80c78793 addi a5,a5,-2036 + 80016c4c: 00f577b3 and a5,a0,a5 + 80016c50: ffff56b7 lui a3,0xffff5 + 80016c54: 00003737 lui a4,0x3 + 80016c58: 00f686bb addw a3,a3,a5 + 80016c5c: 00c70713 addi a4,a4,12 # 300c <_entry_offset+0x300c> + 80016c60: 02d77a63 bgeu a4,a3,80016c94 <_ZL9M183Writejh+0x64> + 80016c64: 0000f737 lui a4,0xf + 80016c68: 16e78863 beq a5,a4,80016dd8 <_ZL9M183Writejh+0x1a8> + 80016c6c: 0cf76e63 bltu a4,a5,80016d48 <_ZL9M183Writejh+0x118> + 80016c70: 0000a737 lui a4,0xa + 80016c74: 12e78863 beq a5,a4,80016da4 <_ZL9M183Writejh+0x174> + 80016c78: 0af77663 bgeu a4,a5,80016d24 <_ZL9M183Writejh+0xf4> + 80016c7c: 0000b737 lui a4,0xb + 80016c80: 80070713 addi a4,a4,-2048 # a800 <_entry_offset+0xa800> + 80016c84: 10e79e63 bne a5,a4,80016da0 <_ZL9M183Writejh+0x170> + 80016c88: 001b5797 auipc a5,0x1b5 + 80016c8c: 1eb784a3 sb a1,489(a5) # 801cbe71 <_ZL3prg+0x1> + 80016c90: e0dff06f j 80016a9c <_ZL7SyncPrgv> + 80016c94: 00b5579b srliw a5,a0,0xb + 80016c98: 0035571b srliw a4,a0,0x3 + 80016c9c: ffa7879b addiw a5,a5,-6 + 80016ca0: fe010113 addi sp,sp,-32 + 80016ca4: 00e7e7b3 or a5,a5,a4 + 80016ca8: 00913423 sd s1,8(sp) + 80016cac: 0077f793 andi a5,a5,7 + 80016cb0: 001b5497 auipc s1,0x1b5 + 80016cb4: 1b848493 addi s1,s1,440 # 801cbe68 <_ZL3chr> + 80016cb8: 00813823 sd s0,16(sp) + 80016cbc: 01213023 sd s2,0(sp) + 80016cc0: 00113c23 sd ra,24(sp) + 80016cc4: 00f487b3 add a5,s1,a5 + 80016cc8: 0007c703 lbu a4,0(a5) + 80016ccc: 00457513 andi a0,a0,4 + 80016cd0: 0f000693 li a3,240 + 80016cd4: 40a6d6bb sraw a3,a3,a0 + 80016cd8: 00f5f593 andi a1,a1,15 + 80016cdc: 00d77733 and a4,a4,a3 + 80016ce0: 00a5953b sllw a0,a1,a0 + 80016ce4: 00a76533 or a0,a4,a0 + 80016ce8: 00a78023 sb a0,0(a5) + 80016cec: 00000413 li s0,0 + 80016cf0: 00002937 lui s2,0x2 + 80016cf4: 0004c583 lbu a1,0(s1) + 80016cf8: 00040513 mv a0,s0 + 80016cfc: 4004041b addiw s0,s0,1024 + 80016d00: 9a4fa0ef jal ra,80010ea4 <_Z7setchr1jj> + 80016d04: 00148493 addi s1,s1,1 + 80016d08: ff2416e3 bne s0,s2,80016cf4 <_ZL9M183Writejh+0xc4> + 80016d0c: 01813083 ld ra,24(sp) + 80016d10: 01013403 ld s0,16(sp) + 80016d14: 00813483 ld s1,8(sp) + 80016d18: 00013903 ld s2,0(sp) + 80016d1c: 02010113 addi sp,sp,32 + 80016d20: 00008067 ret + 80016d24: 000096b7 lui a3,0x9 + 80016d28: 80068693 addi a3,a3,-2048 # 8800 <_entry_offset+0x8800> + 80016d2c: 08d78263 beq a5,a3,80016db0 <_ZL9M183Writejh+0x180> + 80016d30: 80070713 addi a4,a4,-2048 + 80016d34: 0ce79263 bne a5,a4,80016df8 <_ZL9M183Writejh+0x1c8> + 80016d38: 0035f593 andi a1,a1,3 + 80016d3c: 001b5797 auipc a5,0x1b5 + 80016d40: 12b78ca3 sb a1,313(a5) # 801cbe75 <_ZL4mirr> + 80016d44: db5ff06f j 80016af8 <_ZL8SyncMirrv> + 80016d48: 00870693 addi a3,a4,8 + 80016d4c: 06d78863 beq a5,a3,80016dbc <_ZL9M183Writejh+0x18c> + 80016d50: 00c70693 addi a3,a4,12 + 80016d54: 00d79a63 bne a5,a3,80016d68 <_ZL9M183Writejh+0x138> + 80016d58: 01000793 li a5,16 + 80016d5c: 001b5717 auipc a4,0x1b5 + 80016d60: 10f70d23 sb a5,282(a4) # 801cbe76 <_ZL6IRQPre> + 80016d64: 00008067 ret + 80016d68: 00470713 addi a4,a4,4 + 80016d6c: 08e79863 bne a5,a4,80016dfc <_ZL9M183Writejh+0x1cc> + 80016d70: 001b5717 auipc a4,0x1b5 + 80016d74: 10770713 addi a4,a4,263 # 801cbe77 <_ZL8IRQCount> + 80016d78: 00074783 lbu a5,0(a4) + 80016d7c: 00459593 slli a1,a1,0x4 + 80016d80: 00f7f793 andi a5,a5,15 + 80016d84: 00b7e7b3 or a5,a5,a1 + 80016d88: 00f70023 sb a5,0(a4) + 80016d8c: 00008067 ret + 80016d90: 03f57513 andi a0,a0,63 + 80016d94: 001b5797 auipc a5,0x1b5 + 80016d98: 0ca78fa3 sb a0,223(a5) # 801cbe73 <_ZL3prg+0x3> + 80016d9c: d01ff06f j 80016a9c <_ZL7SyncPrgv> + 80016da0: 00008067 ret + 80016da4: 001b5797 auipc a5,0x1b5 + 80016da8: 0cb78723 sb a1,206(a5) # 801cbe72 <_ZL3prg+0x2> + 80016dac: cf1ff06f j 80016a9c <_ZL7SyncPrgv> + 80016db0: 001b5797 auipc a5,0x1b5 + 80016db4: 0cb78023 sb a1,192(a5) # 801cbe70 <_ZL3prg> + 80016db8: ce5ff06f j 80016a9c <_ZL7SyncPrgv> + 80016dbc: 001b5797 auipc a5,0x1b5 + 80016dc0: 0ab78c23 sb a1,184(a5) # 801cbe74 <_ZL4IRQa> + 80016dc4: 00059663 bnez a1,80016dd0 <_ZL9M183Writejh+0x1a0> + 80016dc8: 001b5797 auipc a5,0x1b5 + 80016dcc: 0a078723 sb zero,174(a5) # 801cbe76 <_ZL6IRQPre> + 80016dd0: 00100513 li a0,1 + 80016dd4: f7de906f j 80000d50 <_Z12X6502_IRQEndi> + 80016dd8: 001b5717 auipc a4,0x1b5 + 80016ddc: 09f70713 addi a4,a4,159 # 801cbe77 <_ZL8IRQCount> + 80016de0: 00074783 lbu a5,0(a4) + 80016de4: 00f5f593 andi a1,a1,15 + 80016de8: ff07f793 andi a5,a5,-16 + 80016dec: 00b7e7b3 or a5,a5,a1 + 80016df0: 00f70023 sb a5,0(a4) + 80016df4: 00008067 ret + 80016df8: 00008067 ret + 80016dfc: 00008067 ret + +0000000080016e00 <_ZL14M183IRQCounterv>: + 80016e00: 001b5797 auipc a5,0x1b5 + 80016e04: 0747c783 lbu a5,116(a5) # 801cbe74 <_ZL4IRQa> + 80016e08: 02078863 beqz a5,80016e38 <_ZL14M183IRQCounterv+0x38> + 80016e0c: 001b5717 auipc a4,0x1b5 + 80016e10: 06b70713 addi a4,a4,107 # 801cbe77 <_ZL8IRQCount> + 80016e14: 00074783 lbu a5,0(a4) + 80016e18: 001b5617 auipc a2,0x1b5 + 80016e1c: 05e64603 lbu a2,94(a2) # 801cbe76 <_ZL6IRQPre> + 80016e20: 0ee00693 li a3,238 + 80016e24: 0017879b addiw a5,a5,1 + 80016e28: 0ff7f793 andi a5,a5,255 + 80016e2c: 00f70023 sb a5,0(a4) + 80016e30: 40c787bb subw a5,a5,a2 + 80016e34: 00d78463 beq a5,a3,80016e3c <_ZL14M183IRQCounterv+0x3c> + 80016e38: 00008067 ret + 80016e3c: 00100513 li a0,1 + 80016e40: ef9e906f j 80000d38 <_Z14X6502_IRQBegini> + +0000000080016e44 <_Z14Mapper183_InitP8CartInfo>: + 80016e44: 00000797 auipc a5,0x0 + 80016e48: d5078793 addi a5,a5,-688 # 80016b94 <_ZL9M183Powerv> + 80016e4c: 00f53023 sd a5,0(a0) # 6000 <_entry_offset+0x6000> + 80016e50: 00000797 auipc a5,0x0 + 80016e54: fb078793 addi a5,a5,-80 # 80016e00 <_ZL14M183IRQCounterv> + 80016e58: 001b6717 auipc a4,0x1b6 + 80016e5c: 86f73423 sd a5,-1944(a4) # 801cc6c0 + 80016e60: 00000797 auipc a5,0x0 + 80016e64: cdc78793 addi a5,a5,-804 # 80016b3c <_ZL12StateRestorei> + 80016e68: 00000693 li a3,0 + 80016e6c: 00000613 li a2,0 + 80016e70: fff00593 li a1,-1 + 80016e74: 00034517 auipc a0,0x34 + 80016e78: b6450513 addi a0,a0,-1180 # 8004a9d8 <_ZL9StateRegs> + 80016e7c: 001b5717 auipc a4,0x1b5 + 80016e80: 7cf73e23 sd a5,2012(a4) # 801cc658 + 80016e84: 98ce906f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080016e88 <_ZL4Syncv>: + 80016e88: ff010113 addi sp,sp,-16 + 80016e8c: 00200513 li a0,2 + 80016e90: 00113423 sd ra,8(sp) + 80016e94: 00813023 sd s0,0(sp) + 80016e98: 9b0fa0ef jal ra,80011048 <_Z9setmirrori> + 80016e9c: 001b5417 auipc s0,0x1b5 + 80016ea0: fdc40413 addi s0,s0,-36 # 801cbe78 <_ZL3reg> + 80016ea4: 00044583 lbu a1,0(s0) + 80016ea8: 00008537 lui a0,0x8 + 80016eac: 0035f593 andi a1,a1,3 + 80016eb0: f65f90ef jal ra,80010e14 <_Z8setprg32jj> + 80016eb4: 00044783 lbu a5,0(s0) + 80016eb8: 001b5597 auipc a1,0x1b5 + 80016ebc: fc15c583 lbu a1,-63(a1) # 801cbe79 <_ZL8ppulatch> + 80016ec0: 00000513 li a0,0 + 80016ec4: 0047f793 andi a5,a5,4 + 80016ec8: 00b7e5b3 or a1,a5,a1 + 80016ecc: 818fa0ef jal ra,80010ee4 <_Z7setchr4jj> + 80016ed0: 00044583 lbu a1,0(s0) + 80016ed4: 00013403 ld s0,0(sp) + 80016ed8: 00813083 ld ra,8(sp) + 80016edc: 0045f593 andi a1,a1,4 + 80016ee0: 00001537 lui a0,0x1 + 80016ee4: 0035e593 ori a1,a1,3 + 80016ee8: 01010113 addi sp,sp,16 + 80016eec: ff9f906f j 80010ee4 <_Z7setchr4jj> + +0000000080016ef0 <_ZL12StateRestorei>: + 80016ef0: f99ff06f j 80016e88 <_ZL4Syncv> + +0000000080016ef4 <_ZL8M96Writejh>: + 80016ef4: 001b5797 auipc a5,0x1b5 + 80016ef8: f8b78223 sb a1,-124(a5) # 801cbe78 <_ZL3reg> + 80016efc: f8dff06f j 80016e88 <_ZL4Syncv> + +0000000080016f00 <_ZL8M96Powerv>: + 80016f00: ff010113 addi sp,sp,-16 + 80016f04: 00113423 sd ra,8(sp) + 80016f08: 00813023 sd s0,0(sp) + 80016f0c: 001b5797 auipc a5,0x1b5 + 80016f10: f60786a3 sb zero,-147(a5) # 801cbe79 <_ZL8ppulatch> + 80016f14: 00010437 lui s0,0x10 + 80016f18: 001b5797 auipc a5,0x1b5 + 80016f1c: f6078023 sb zero,-160(a5) # 801cbe78 <_ZL3reg> + 80016f20: f69ff0ef jal ra,80016e88 <_ZL4Syncv> + 80016f24: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80016f28: ffff9617 auipc a2,0xffff9 + 80016f2c: 73860613 addi a2,a2,1848 # 80010660 <_Z6CartBRj> + 80016f30: 00008537 lui a0,0x8 + 80016f34: 2e91c0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80016f38: fff40593 addi a1,s0,-1 + 80016f3c: 00013403 ld s0,0(sp) + 80016f40: 00813083 ld ra,8(sp) + 80016f44: 00000617 auipc a2,0x0 + 80016f48: fb060613 addi a2,a2,-80 # 80016ef4 <_ZL8M96Writejh> + 80016f4c: 00008537 lui a0,0x8 + 80016f50: 01010113 addi sp,sp,16 + 80016f54: 3d51c06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080016f58 <_ZL7M96Hookj>: + 80016f58: 000037b7 lui a5,0x3 + 80016f5c: 00f577b3 and a5,a0,a5 + 80016f60: 00002737 lui a4,0x2 + 80016f64: 00e78463 beq a5,a4,80016f6c <_ZL7M96Hookj+0x14> + 80016f68: 00008067 ret + 80016f6c: 0085551b srliw a0,a0,0x8 + 80016f70: 00357513 andi a0,a0,3 + 80016f74: 001b5797 auipc a5,0x1b5 + 80016f78: f0a782a3 sb a0,-251(a5) # 801cbe79 <_ZL8ppulatch> + 80016f7c: f0dff06f j 80016e88 <_ZL4Syncv> + +0000000080016f80 <_Z13Mapper96_InitP8CartInfo>: + 80016f80: 00000797 auipc a5,0x0 + 80016f84: f8078793 addi a5,a5,-128 # 80016f00 <_ZL8M96Powerv> + 80016f88: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 80016f8c: 00000797 auipc a5,0x0 + 80016f90: fcc78793 addi a5,a5,-52 # 80016f58 <_ZL7M96Hookj> + 80016f94: 001b5717 auipc a4,0x1b5 + 80016f98: 76f73a23 sd a5,1908(a4) # 801cc708 + 80016f9c: 00000797 auipc a5,0x0 + 80016fa0: f5478793 addi a5,a5,-172 # 80016ef0 <_ZL12StateRestorei> + 80016fa4: 00000693 li a3,0 + 80016fa8: 00000613 li a2,0 + 80016fac: fff00593 li a1,-1 + 80016fb0: 00034517 auipc a0,0x34 + 80016fb4: ad050513 addi a0,a0,-1328 # 8004aa80 <_ZL9StateRegs> + 80016fb8: 001b5717 auipc a4,0x1b5 + 80016fbc: 6af73023 sd a5,1696(a4) # 801cc658 + 80016fc0: 850e906f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080016fc4 <_ZL11BMCF15Powerv>: + 80016fc4: ff010113 addi sp,sp,-16 + 80016fc8: 00113423 sd ra,8(sp) + 80016fcc: 00813023 sd s0,0(sp) + 80016fd0: 1f00f0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 80016fd4: 00008437 lui s0,0x8 + 80016fd8: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 80016fdc: 00000617 auipc a2,0x0 + 80016fe0: 08860613 addi a2,a2,136 # 80017064 <_ZL11BMCF15Writejh> + 80016fe4: 00006537 lui a0,0x6 + 80016fe8: 3411c0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80016fec: fff40593 addi a1,s0,-1 + 80016ff0: 00013403 ld s0,0(sp) + 80016ff4: 00813083 ld ra,8(sp) + 80016ff8: 00000617 auipc a2,0x0 + 80016ffc: 06c60613 addi a2,a2,108 # 80017064 <_ZL11BMCF15Writejh> + 80017000: 00006537 lui a0,0x6 + 80017004: 01010113 addi sp,sp,16 + 80017008: 3211c06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008001700c <_ZL8BMCF15PWjh>: + 8001700c: fe010113 addi sp,sp,-32 + 80017010: 001b5597 auipc a1,0x1b5 + 80017014: 2405c583 lbu a1,576(a1) # 801cc250 + 80017018: 00813823 sd s0,16(sp) + 8001701c: 4035d41b sraiw s0,a1,0x3 + 80017020: 00147413 andi s0,s0,1 + 80017024: 00913423 sd s1,8(sp) + 80017028: 00f5f493 andi s1,a1,15 + 8001702c: fff44593 not a1,s0 + 80017030: 0095f5b3 and a1,a1,s1 + 80017034: 0005859b sext.w a1,a1 + 80017038: 00008537 lui a0,0x8 + 8001703c: 00113c23 sd ra,24(sp) + 80017040: c19f90ef jal ra,80010c58 <_Z8setprg16jj> + 80017044: 009465b3 or a1,s0,s1 + 80017048: 01013403 ld s0,16(sp) + 8001704c: 01813083 ld ra,24(sp) + 80017050: 00813483 ld s1,8(sp) + 80017054: 0005859b sext.w a1,a1 + 80017058: 0000c537 lui a0,0xc + 8001705c: 02010113 addi sp,sp,32 + 80017060: bf9f906f j 80010c58 <_Z8setprg16jj> + +0000000080017064 <_ZL11BMCF15Writejh>: + 80017064: 001b5797 auipc a5,0x1b5 + 80017068: 1cf78783 lb a5,463(a5) # 801cc233 + 8001706c: 0007c463 bltz a5,80017074 <_ZL11BMCF15Writejh+0x10> + 80017070: 00008067 ret + 80017074: 00f5f593 andi a1,a1,15 + 80017078: 001b5517 auipc a0,0x1b5 + 8001707c: 1e454503 lbu a0,484(a0) # 801cc25c + 80017080: 001b5797 auipc a5,0x1b5 + 80017084: 1cb78823 sb a1,464(a5) # 801cc250 + 80017088: 5e50e06f j 80025e6c <_Z10FixMMC3PRGi> + +000000008001708c <_Z11BMCF15_InitP8CartInfo>: + 8001708c: ff010113 addi sp,sp,-16 + 80017090: 00000693 li a3,0 + 80017094: 10000613 li a2,256 + 80017098: 10000593 li a1,256 + 8001709c: 00000713 li a4,0 + 800170a0: 00813023 sd s0,0(sp) + 800170a4: 00113423 sd ra,8(sp) + 800170a8: 00050413 mv s0,a0 + 800170ac: 76d0f0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 800170b0: 00000797 auipc a5,0x0 + 800170b4: f5c78793 addi a5,a5,-164 # 8001700c <_ZL8BMCF15PWjh> + 800170b8: 001b5717 auipc a4,0x1b5 + 800170bc: 1ef73023 sd a5,480(a4) # 801cc298 + 800170c0: 00000797 auipc a5,0x0 + 800170c4: f0478793 addi a5,a5,-252 # 80016fc4 <_ZL11BMCF15Powerv> + 800170c8: 00f43023 sd a5,0(s0) + 800170cc: 00013403 ld s0,0(sp) + 800170d0: 00813083 ld ra,8(sp) + 800170d4: 0002e697 auipc a3,0x2e + 800170d8: 41c68693 addi a3,a3,1052 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 800170dc: 00000613 li a2,0 + 800170e0: 00100593 li a1,1 + 800170e4: 001b5517 auipc a0,0x1b5 + 800170e8: 16c50513 addi a0,a0,364 # 801cc250 + 800170ec: 01010113 addi sp,sp,16 + 800170f0: f21e806f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800170f4 <_ZL4Syncv>: + 800170f4: ff010113 addi sp,sp,-16 + 800170f8: 00813023 sd s0,0(sp) + 800170fc: 001b5417 auipc s0,0x1b5 + 80017100: d8c40413 addi s0,s0,-628 # 801cbe88 <_ZL5latch> + 80017104: 00044503 lbu a0,0(s0) + 80017108: 00113423 sd ra,8(sp) + 8001710c: 4025551b sraiw a0,a0,0x2 + 80017110: 00157513 andi a0,a0,1 + 80017114: df1f90ef jal ra,80010f04 <_Z7setchr8j> + 80017118: 00000613 li a2,0 + 8001711c: 000065b7 lui a1,0x6 + 80017120: 01000513 li a0,16 + 80017124: fc4f90ef jal ra,800108e8 <_Z8setprg8rijj> + 80017128: 00000593 li a1,0 + 8001712c: 00008537 lui a0,0x8 + 80017130: ce5f90ef jal ra,80010e14 <_Z8setprg32jj> + 80017134: 00044583 lbu a1,0(s0) + 80017138: 00013403 ld s0,0(sp) + 8001713c: 00813083 ld ra,8(sp) + 80017140: 00008537 lui a0,0x8 + 80017144: 0045f593 andi a1,a1,4 + 80017148: 01010113 addi sp,sp,16 + 8001714c: 951f906f j 80010a9c <_Z7setprg8jj> + +0000000080017150 <_ZL12StateRestorei>: + 80017150: fa5ff06f j 800170f4 <_ZL4Syncv> + +0000000080017154 <_ZL8M99Writejh>: + 80017154: fe010113 addi sp,sp,-32 + 80017158: 00813823 sd s0,16(sp) + 8001715c: 00913423 sd s1,8(sp) + 80017160: 00113c23 sd ra,24(sp) + 80017164: 00058413 mv s0,a1 + 80017168: 00050493 mv s1,a0 + 8001716c: 001b5797 auipc a5,0x1b5 + 80017170: d0b78e23 sb a1,-740(a5) # 801cbe88 <_ZL5latch> + 80017174: f81ff0ef jal ra,800170f4 <_ZL4Syncv> + 80017178: 00040593 mv a1,s0 + 8001717c: 01013403 ld s0,16(sp) + 80017180: 01813083 ld ra,24(sp) + 80017184: 00048513 mv a0,s1 + 80017188: 00813483 ld s1,8(sp) + 8001718c: 001b5317 auipc t1,0x1b5 + 80017190: d0433303 ld t1,-764(t1) # 801cbe90 <_ZL7old4016> + 80017194: 02010113 addi sp,sp,32 + 80017198: 00030067 jr t1 + +000000008001719c <_ZL8M99Closev>: + 8001719c: 001b5517 auipc a0,0x1b5 + 800171a0: ce453503 ld a0,-796(a0) # 801cbe80 <_ZL4WRAM> + 800171a4: 02050263 beqz a0,800171c8 <_ZL8M99Closev+0x2c> + 800171a8: ff010113 addi sp,sp,-16 + 800171ac: 00113423 sd ra,8(sp) + 800171b0: b90fb0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 800171b4: 00813083 ld ra,8(sp) + 800171b8: 001b5797 auipc a5,0x1b5 + 800171bc: cc07b423 sd zero,-824(a5) # 801cbe80 <_ZL4WRAM> + 800171c0: 01010113 addi sp,sp,16 + 800171c4: 00008067 ret + 800171c8: 001b5797 auipc a5,0x1b5 + 800171cc: ca07bc23 sd zero,-840(a5) # 801cbe80 <_ZL4WRAM> + 800171d0: 00008067 ret + +00000000800171d4 <_ZL8M99Powerv>: + 800171d4: ff010113 addi sp,sp,-16 + 800171d8: 00113423 sd ra,8(sp) + 800171dc: 00813023 sd s0,0(sp) + 800171e0: 001b5797 auipc a5,0x1b5 + 800171e4: ca078423 sb zero,-856(a5) # 801cbe88 <_ZL5latch> + 800171e8: 00004437 lui s0,0x4 + 800171ec: f09ff0ef jal ra,800170f4 <_ZL4Syncv> + 800171f0: 01640513 addi a0,s0,22 # 4016 <_entry_offset+0x4016> + 800171f4: 0e91c0ef jal ra,80033adc <_Z15GetWriteHandleri> + 800171f8: 01640593 addi a1,s0,22 + 800171fc: 00050793 mv a5,a0 + 80017200: 00000617 auipc a2,0x0 + 80017204: f5460613 addi a2,a2,-172 # 80017154 <_ZL8M99Writejh> + 80017208: 00058513 mv a0,a1 + 8001720c: 001b5717 auipc a4,0x1b5 + 80017210: c8f73223 sd a5,-892(a4) # 801cbe90 <_ZL7old4016> + 80017214: 1151c0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80017218: 000105b7 lui a1,0x10 + 8001721c: ffff9617 auipc a2,0xffff9 + 80017220: 44460613 addi a2,a2,1092 # 80010660 <_Z6CartBRj> + 80017224: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80017228: 00006537 lui a0,0x6 + 8001722c: 7f01c0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80017230: 000085b7 lui a1,0x8 + 80017234: ffff9617 auipc a2,0xffff9 + 80017238: 45860613 addi a2,a2,1112 # 8001068c <_Z6CartBWjh> + 8001723c: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80017240: 00006537 lui a0,0x6 + 80017244: 0e51c0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80017248: 00013403 ld s0,0(sp) + 8001724c: 00813083 ld ra,8(sp) + 80017250: 001b5517 auipc a0,0x1b5 + 80017254: c4852503 lw a0,-952(a0) # 801cbe98 <_ZL8WRAMSIZE> + 80017258: 001b5617 auipc a2,0x1b5 + 8001725c: c2863603 ld a2,-984(a2) # 801cbe80 <_ZL4WRAM> + 80017260: 000065b7 lui a1,0x6 + 80017264: 00a5551b srliw a0,a0,0xa + 80017268: 01010113 addi sp,sp,16 + 8001726c: da9e806f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +0000000080017270 <_Z13Mapper99_InitP8CartInfo>: + 80017270: fe010113 addi sp,sp,-32 + 80017274: 00113c23 sd ra,24(sp) + 80017278: 00813823 sd s0,16(sp) + 8001727c: 00913423 sd s1,8(sp) + 80017280: 00000797 auipc a5,0x0 + 80017284: f5478793 addi a5,a5,-172 # 800171d4 <_ZL8M99Powerv> + 80017288: 00f53023 sd a5,0(a0) + 8001728c: 00000797 auipc a5,0x0 + 80017290: f1078793 addi a5,a5,-240 # 8001719c <_ZL8M99Closev> + 80017294: 001b5417 auipc s0,0x1b5 + 80017298: c0440413 addi s0,s0,-1020 # 801cbe98 <_ZL8WRAMSIZE> + 8001729c: 00f53823 sd a5,16(a0) + 800172a0: 000027b7 lui a5,0x2 + 800172a4: 00002537 lui a0,0x2 + 800172a8: 00f42023 sw a5,0(s0) + 800172ac: 9c0fb0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 800172b0: 00042603 lw a2,0(s0) + 800172b4: 00050593 mv a1,a0 + 800172b8: 001b5497 auipc s1,0x1b5 + 800172bc: bc848493 addi s1,s1,-1080 # 801cbe80 <_ZL4WRAM> + 800172c0: 00100693 li a3,1 + 800172c4: 01000513 li a0,16 + 800172c8: 00b4b023 sd a1,0(s1) + 800172cc: a28f90ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 800172d0: 00042583 lw a1,0(s0) + 800172d4: 0004b503 ld a0,0(s1) + 800172d8: 0002e697 auipc a3,0x2e + 800172dc: 05068693 addi a3,a3,80 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 800172e0: 00000613 li a2,0 + 800172e4: d2de80ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800172e8: 01013403 ld s0,16(sp) + 800172ec: 01813083 ld ra,24(sp) + 800172f0: 00813483 ld s1,8(sp) + 800172f4: 00000797 auipc a5,0x0 + 800172f8: e5c78793 addi a5,a5,-420 # 80017150 <_ZL12StateRestorei> + 800172fc: 001b5717 auipc a4,0x1b5 + 80017300: 34f73e23 sd a5,860(a4) # 801cc658 + 80017304: 00000693 li a3,0 + 80017308: 00000613 li a2,0 + 8001730c: fff00593 li a1,-1 + 80017310: 00033517 auipc a0,0x33 + 80017314: 7b850513 addi a0,a0,1976 # 8004aac8 <_ZL9StateRegs> + 80017318: 02010113 addi sp,sp,32 + 8001731c: cf5e806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080017320 <_ZL9SARestorei>: + 80017320: 001b5317 auipc t1,0x1b5 + 80017324: b8833303 ld t1,-1144(t1) # 801cbea8 <_ZL5WSync> + 80017328: 00030067 jr t1 + +000000008001732c <_ZL8SADWritejh>: + 8001732c: 001b5797 auipc a5,0x1b5 + 80017330: b8b78223 sb a1,-1148(a5) # 801cbeb0 <_ZL5latch> + 80017334: 001b5317 auipc t1,0x1b5 + 80017338: b7433303 ld t1,-1164(t1) # 801cbea8 <_ZL5WSync> + 8001733c: 00030067 jr t1 + +0000000080017340 <_ZL9TCU02Readj>: + 80017340: 001b5797 auipc a5,0x1b5 + 80017344: b707c783 lbu a5,-1168(a5) # 801cbeb0 <_ZL5latch> + 80017348: 00040517 auipc a0,0x40 + 8001734c: 52054503 lbu a0,1312(a0) # 80057868 + 80017350: 03f7f793 andi a5,a5,63 + 80017354: 0c057513 andi a0,a0,192 + 80017358: 00f56533 or a0,a0,a5 + 8001735c: 00008067 ret + +0000000080017360 <_ZL12SA0161MSyncov>: + 80017360: ff010113 addi sp,sp,-16 + 80017364: 00813023 sd s0,0(sp) + 80017368: 001b5417 auipc s0,0x1b5 + 8001736c: b4840413 addi s0,s0,-1208 # 801cbeb0 <_ZL5latch> + 80017370: 00044583 lbu a1,0(s0) + 80017374: 00008537 lui a0,0x8 + 80017378: 00113423 sd ra,8(sp) + 8001737c: 4035d59b sraiw a1,a1,0x3 + 80017380: 0015f593 andi a1,a1,1 + 80017384: a91f90ef jal ra,80010e14 <_Z8setprg32jj> + 80017388: 00044503 lbu a0,0(s0) + 8001738c: 00013403 ld s0,0(sp) + 80017390: 00813083 ld ra,8(sp) + 80017394: 00757513 andi a0,a0,7 + 80017398: 01010113 addi sp,sp,16 + 8001739c: b69f906f j 80010f04 <_Z7setchr8j> + +00000000800173a0 <_ZL12SA72007Syncov>: + 800173a0: ff010113 addi sp,sp,-16 + 800173a4: 00008537 lui a0,0x8 + 800173a8: 00000593 li a1,0 + 800173ac: 00113423 sd ra,8(sp) + 800173b0: a65f90ef jal ra,80010e14 <_Z8setprg32jj> + 800173b4: 00813083 ld ra,8(sp) + 800173b8: 001b5517 auipc a0,0x1b5 + 800173bc: af854503 lbu a0,-1288(a0) # 801cbeb0 <_ZL5latch> + 800173c0: 00755513 srli a0,a0,0x7 + 800173c4: 01010113 addi sp,sp,16 + 800173c8: b3df906f j 80010f04 <_Z7setchr8j> + +00000000800173cc <_ZL12SA72008Syncov>: + 800173cc: ff010113 addi sp,sp,-16 + 800173d0: 00813023 sd s0,0(sp) + 800173d4: 001b5417 auipc s0,0x1b5 + 800173d8: adc40413 addi s0,s0,-1316 # 801cbeb0 <_ZL5latch> + 800173dc: 00044583 lbu a1,0(s0) + 800173e0: 00008537 lui a0,0x8 + 800173e4: 00113423 sd ra,8(sp) + 800173e8: 4025d59b sraiw a1,a1,0x2 + 800173ec: 0015f593 andi a1,a1,1 + 800173f0: a25f90ef jal ra,80010e14 <_Z8setprg32jj> + 800173f4: 00044503 lbu a0,0(s0) + 800173f8: 00013403 ld s0,0(sp) + 800173fc: 00813083 ld ra,8(sp) + 80017400: 00357513 andi a0,a0,3 + 80017404: 01010113 addi sp,sp,16 + 80017408: afdf906f j 80010f04 <_Z7setchr8j> + +000000008001740c <_ZL10SA009Syncov>: + 8001740c: ff010113 addi sp,sp,-16 + 80017410: 00008537 lui a0,0x8 + 80017414: 00000593 li a1,0 + 80017418: 00113423 sd ra,8(sp) + 8001741c: 9f9f90ef jal ra,80010e14 <_Z8setprg32jj> + 80017420: 00813083 ld ra,8(sp) + 80017424: 001b5517 auipc a0,0x1b5 + 80017428: a8c54503 lbu a0,-1396(a0) # 801cbeb0 <_ZL5latch> + 8001742c: 00157513 andi a0,a0,1 + 80017430: 01010113 addi sp,sp,16 + 80017434: ad1f906f j 80010f04 <_Z7setchr8j> + +0000000080017438 <_ZL10TCU01Syncov>: + 80017438: ff010113 addi sp,sp,-16 + 8001743c: 00813023 sd s0,0(sp) + 80017440: 001b5417 auipc s0,0x1b5 + 80017444: a7040413 addi s0,s0,-1424 # 801cbeb0 <_ZL5latch> + 80017448: 00044783 lbu a5,0(s0) + 8001744c: 00008537 lui a0,0x8 + 80017450: 00113423 sd ra,8(sp) + 80017454: 4067d59b sraiw a1,a5,0x6 + 80017458: 4027d79b sraiw a5,a5,0x2 + 8001745c: 0017f793 andi a5,a5,1 + 80017460: 0025f593 andi a1,a1,2 + 80017464: 00f5e5b3 or a1,a1,a5 + 80017468: 9adf90ef jal ra,80010e14 <_Z8setprg32jj> + 8001746c: 00044503 lbu a0,0(s0) + 80017470: 00013403 ld s0,0(sp) + 80017474: 00813083 ld ra,8(sp) + 80017478: 4035551b sraiw a0,a0,0x3 + 8001747c: 00f57513 andi a0,a0,15 + 80017480: 01010113 addi sp,sp,16 + 80017484: a81f906f j 80010f04 <_Z7setchr8j> + +0000000080017488 <_ZL10TCU01Writejh>: + 80017488: 10357513 andi a0,a0,259 + 8001748c: 10200793 li a5,258 + 80017490: 00f50463 beq a0,a5,80017498 <_ZL10TCU01Writejh+0x10> + 80017494: 00008067 ret + 80017498: 001b5797 auipc a5,0x1b5 + 8001749c: a0b78c23 sb a1,-1512(a5) # 801cbeb0 <_ZL5latch> + 800174a0: f99ff06f j 80017438 <_ZL10TCU01Syncov> + +00000000800174a4 <_ZL12TCU01Restorei>: + 800174a4: f95ff06f j 80017438 <_ZL10TCU01Syncov> + +00000000800174a8 <_ZL10TCU02Syncov>: + 800174a8: ff010113 addi sp,sp,-16 + 800174ac: 00008537 lui a0,0x8 + 800174b0: 00000593 li a1,0 + 800174b4: 00113423 sd ra,8(sp) + 800174b8: 95df90ef jal ra,80010e14 <_Z8setprg32jj> + 800174bc: 00813083 ld ra,8(sp) + 800174c0: 001b5517 auipc a0,0x1b5 + 800174c4: 9f054503 lbu a0,-1552(a0) # 801cbeb0 <_ZL5latch> + 800174c8: 00357513 andi a0,a0,3 + 800174cc: 01010113 addi sp,sp,16 + 800174d0: a35f906f j 80010f04 <_Z7setchr8j> + +00000000800174d4 <_ZL10TCU02Writejh>: + 800174d4: 10357513 andi a0,a0,259 + 800174d8: 10200793 li a5,258 + 800174dc: 00f50463 beq a0,a5,800174e4 <_ZL10TCU02Writejh+0x10> + 800174e0: 00008067 ret + 800174e4: 0035859b addiw a1,a1,3 + 800174e8: 001b5797 auipc a5,0x1b5 + 800174ec: 9cb78423 sb a1,-1592(a5) # 801cbeb0 <_ZL5latch> + 800174f0: fb9ff06f j 800174a8 <_ZL10TCU02Syncov> + +00000000800174f4 <_ZL12TCU02Restorei>: + 800174f4: fb5ff06f j 800174a8 <_ZL10TCU02Syncov> + +00000000800174f8 <_ZL7SAPowerv>: + 800174f8: ff010113 addi sp,sp,-16 + 800174fc: 001b5797 auipc a5,0x1b5 + 80017500: 9a078a23 sb zero,-1612(a5) # 801cbeb0 <_ZL5latch> + 80017504: 00113423 sd ra,8(sp) + 80017508: 001b5797 auipc a5,0x1b5 + 8001750c: 9a07b783 ld a5,-1632(a5) # 801cbea8 <_ZL5WSync> + 80017510: 000780e7 jalr a5 + 80017514: 000105b7 lui a1,0x10 + 80017518: ffff9617 auipc a2,0xffff9 + 8001751c: 14860613 addi a2,a2,328 # 80010660 <_Z6CartBRj> + 80017520: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80017524: 00008537 lui a0,0x8 + 80017528: 4f41c0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001752c: 00813083 ld ra,8(sp) + 80017530: 000065b7 lui a1,0x6 + 80017534: 00004537 lui a0,0x4 + 80017538: 00000617 auipc a2,0x0 + 8001753c: 1d460613 addi a2,a2,468 # 8001770c <_ZL7SAWritejh> + 80017540: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 80017544: 10050513 addi a0,a0,256 # 4100 <_entry_offset+0x4100> + 80017548: 01010113 addi sp,sp,16 + 8001754c: 5dc1c06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080017550 <_ZL8SADPowerv>: + 80017550: ff010113 addi sp,sp,-16 + 80017554: 001b5797 auipc a5,0x1b5 + 80017558: 94078e23 sb zero,-1700(a5) # 801cbeb0 <_ZL5latch> + 8001755c: 00113423 sd ra,8(sp) + 80017560: 00813023 sd s0,0(sp) + 80017564: 001b5797 auipc a5,0x1b5 + 80017568: 9447b783 ld a5,-1724(a5) # 801cbea8 <_ZL5WSync> + 8001756c: 000780e7 jalr a5 + 80017570: 00010437 lui s0,0x10 + 80017574: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80017578: ffff9617 auipc a2,0xffff9 + 8001757c: 0e860613 addi a2,a2,232 # 80010660 <_Z6CartBRj> + 80017580: 00008537 lui a0,0x8 + 80017584: 4981c0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80017588: fff40593 addi a1,s0,-1 + 8001758c: 00013403 ld s0,0(sp) + 80017590: 00813083 ld ra,8(sp) + 80017594: 00000617 auipc a2,0x0 + 80017598: d9860613 addi a2,a2,-616 # 8001732c <_ZL8SADWritejh> + 8001759c: 00008537 lui a0,0x8 + 800175a0: 01010113 addi sp,sp,16 + 800175a4: 5841c06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +00000000800175a8 <_ZL10TCU01Powerv>: + 800175a8: ff010113 addi sp,sp,-16 + 800175ac: 00813023 sd s0,0(sp) + 800175b0: 00010437 lui s0,0x10 + 800175b4: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 800175b8: ffff9617 auipc a2,0xffff9 + 800175bc: 0a860613 addi a2,a2,168 # 80010660 <_Z6CartBRj> + 800175c0: 00008537 lui a0,0x8 + 800175c4: 00113423 sd ra,8(sp) + 800175c8: 001b5797 auipc a5,0x1b5 + 800175cc: 8e078423 sb zero,-1816(a5) # 801cbeb0 <_ZL5latch> + 800175d0: 44c1c0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800175d4: 00004537 lui a0,0x4 + 800175d8: fff40593 addi a1,s0,-1 + 800175dc: 00000617 auipc a2,0x0 + 800175e0: eac60613 addi a2,a2,-340 # 80017488 <_ZL10TCU01Writejh> + 800175e4: 10050513 addi a0,a0,256 # 4100 <_entry_offset+0x4100> + 800175e8: 5401c0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800175ec: 00013403 ld s0,0(sp) + 800175f0: 00813083 ld ra,8(sp) + 800175f4: 01010113 addi sp,sp,16 + 800175f8: e41ff06f j 80017438 <_ZL10TCU01Syncov> + +00000000800175fc <_ZL10TCU02Powerv>: + 800175fc: fe010113 addi sp,sp,-32 + 80017600: 00913423 sd s1,8(sp) + 80017604: 000104b7 lui s1,0x10 + 80017608: fff48593 addi a1,s1,-1 # ffff <_entry_offset+0xffff> + 8001760c: ffff9617 auipc a2,0xffff9 + 80017610: 05460613 addi a2,a2,84 # 80010660 <_Z6CartBRj> + 80017614: 00008537 lui a0,0x8 + 80017618: 00113c23 sd ra,24(sp) + 8001761c: 00813823 sd s0,16(sp) + 80017620: 001b5797 auipc a5,0x1b5 + 80017624: 88078823 sb zero,-1904(a5) # 801cbeb0 <_ZL5latch> + 80017628: 00004437 lui s0,0x4 + 8001762c: 3f01c0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80017630: 10040593 addi a1,s0,256 # 4100 <_entry_offset+0x4100> + 80017634: 00058513 mv a0,a1 + 80017638: 00000617 auipc a2,0x0 + 8001763c: d0860613 addi a2,a2,-760 # 80017340 <_ZL9TCU02Readj> + 80017640: 3dc1c0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80017644: fff48593 addi a1,s1,-1 + 80017648: 10040513 addi a0,s0,256 + 8001764c: 00000617 auipc a2,0x0 + 80017650: e8860613 addi a2,a2,-376 # 800174d4 <_ZL10TCU02Writejh> + 80017654: 4d41c0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80017658: 01013403 ld s0,16(sp) + 8001765c: 01813083 ld ra,24(sp) + 80017660: 00813483 ld s1,8(sp) + 80017664: 02010113 addi sp,sp,32 + 80017668: e41ff06f j 800174a8 <_ZL10TCU02Syncov> + +000000008001766c <_ZL10TCA01Powerv>: + 8001766c: ff010113 addi sp,sp,-16 + 80017670: 00000593 li a1,0 + 80017674: 00008537 lui a0,0x8 + 80017678: 00113423 sd ra,8(sp) + 8001767c: ddcf90ef jal ra,80010c58 <_Z8setprg16jj> + 80017680: 00100593 li a1,1 + 80017684: 0000c537 lui a0,0xc + 80017688: dd0f90ef jal ra,80010c58 <_Z8setprg16jj> + 8001768c: 00000513 li a0,0 + 80017690: 875f90ef jal ra,80010f04 <_Z7setchr8j> + 80017694: 000105b7 lui a1,0x10 + 80017698: ffff9617 auipc a2,0xffff9 + 8001769c: fc860613 addi a2,a2,-56 # 80010660 <_Z6CartBRj> + 800176a0: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 800176a4: 00008537 lui a0,0x8 + 800176a8: 3741c0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800176ac: 00813083 ld ra,8(sp) + 800176b0: 000065b7 lui a1,0x6 + 800176b4: 00004537 lui a0,0x4 + 800176b8: 00000617 auipc a2,0x0 + 800176bc: 07460613 addi a2,a2,116 # 8001772c <_ZL9TCA01Readj> + 800176c0: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 800176c4: 10050513 addi a0,a0,256 # 4100 <_entry_offset+0x4100> + 800176c8: 01010113 addi sp,sp,16 + 800176cc: 3501c06f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +00000000800176d0 <_ZL13S74LS374NReadj>: + 800176d0: 000047b7 lui a5,0x4 + 800176d4: 10078793 addi a5,a5,256 # 4100 <_entry_offset+0x4100> + 800176d8: 00f57533 and a0,a0,a5 + 800176dc: 00f50863 beq a0,a5,800176ec <_ZL13S74LS374NReadj+0x1c> + 800176e0: 00040517 auipc a0,0x40 + 800176e4: 18854503 lbu a0,392(a0) # 80057868 + 800176e8: 00008067 ret + 800176ec: 001b4517 auipc a0,0x1b4 + 800176f0: 7b054503 lbu a0,1968(a0) # 801cbe9c <_ZL3cmd> + 800176f4: fff54513 not a0,a0 + 800176f8: 001b4797 auipc a5,0x1b4 + 800176fc: 7a57c783 lbu a5,1957(a5) # 801cbe9d <_ZL3dip> + 80017700: 03f57513 andi a0,a0,63 + 80017704: 00f54533 xor a0,a0,a5 + 80017708: 00008067 ret + +000000008001770c <_ZL7SAWritejh>: + 8001770c: 10057513 andi a0,a0,256 + 80017710: 00050c63 beqz a0,80017728 <_ZL7SAWritejh+0x1c> + 80017714: 001b4797 auipc a5,0x1b4 + 80017718: 78b78e23 sb a1,1948(a5) # 801cbeb0 <_ZL5latch> + 8001771c: 001b4317 auipc t1,0x1b4 + 80017720: 78c33303 ld t1,1932(t1) # 801cbea8 <_ZL5WSync> + 80017724: 00030067 jr t1 + 80017728: 00008067 ret + +000000008001772c <_ZL9TCA01Readj>: + 8001772c: 00004737 lui a4,0x4 + 80017730: 10070713 addi a4,a4,256 # 4100 <_entry_offset+0x4100> + 80017734: 00e576b3 and a3,a0,a4 + 80017738: 00050793 mv a5,a0 + 8001773c: 00040517 auipc a0,0x40 + 80017740: 12c54503 lbu a0,300(a0) # 80057868 + 80017744: 00e68463 beq a3,a4,8001774c <_ZL9TCA01Readj+0x20> + 80017748: 00008067 ret + 8001774c: fff7c793 not a5,a5 + 80017750: 03f7f793 andi a5,a5,63 + 80017754: fc057513 andi a0,a0,-64 + 80017758: 00a7e533 or a0,a5,a0 + 8001775c: 00008067 ret + +0000000080017760 <_ZL13S74LS374MSynch>: + 80017760: 00357513 andi a0,a0,3 + 80017764: 00200793 li a5,2 + 80017768: 00f50e63 beq a0,a5,80017784 <_ZL13S74LS374MSynch+0x24> + 8001776c: 00300793 li a5,3 + 80017770: 02f50863 beq a0,a5,800177a0 <_ZL13S74LS374MSynch+0x40> + 80017774: 00100793 li a5,1 + 80017778: 02f50063 beq a0,a5,80017798 <_ZL13S74LS374MSynch+0x38> + 8001777c: 00100513 li a0,1 + 80017780: 8c9f906f j 80011048 <_Z9setmirrori> + 80017784: 00100693 li a3,1 + 80017788: 00100613 li a2,1 + 8001778c: 00100593 li a1,1 + 80017790: 00000513 li a0,0 + 80017794: 82df906f j 80010fc0 <_Z10setmirrorwiiii> + 80017798: 00000513 li a0,0 + 8001779c: 8adf906f j 80011048 <_Z9setmirrori> + 800177a0: 00200513 li a0,2 + 800177a4: 8a5f906f j 80011048 <_Z9setmirrori> + +00000000800177a8 <_ZL14S74LS374NSyncov>: + 800177a8: ff010113 addi sp,sp,-16 + 800177ac: 00813023 sd s0,0(sp) + 800177b0: 001b4417 auipc s0,0x1b4 + 800177b4: 70040413 addi s0,s0,1792 # 801cbeb0 <_ZL5latch> + 800177b8: 00044583 lbu a1,0(s0) + 800177bc: 00008537 lui a0,0x8 + 800177c0: 00113423 sd ra,8(sp) + 800177c4: e50f90ef jal ra,80010e14 <_Z8setprg32jj> + 800177c8: 00144503 lbu a0,1(s0) + 800177cc: 00344703 lbu a4,3(s0) + 800177d0: 00444783 lbu a5,4(s0) + 800177d4: 00e56533 or a0,a0,a4 + 800177d8: 00f56533 or a0,a0,a5 + 800177dc: 0ff57513 andi a0,a0,255 + 800177e0: f24f90ef jal ra,80010f04 <_Z7setchr8j> + 800177e4: 00244503 lbu a0,2(s0) + 800177e8: 00013403 ld s0,0(sp) + 800177ec: 00813083 ld ra,8(sp) + 800177f0: 01010113 addi sp,sp,16 + 800177f4: f6dff06f j 80017760 <_ZL13S74LS374MSynch> + +00000000800177f8 <_ZL16S74LS374NRestorei>: + 800177f8: fb1ff06f j 800177a8 <_ZL14S74LS374NSyncov> + +00000000800177fc <_ZL14S74LS374NResetv>: + 800177fc: 001b4697 auipc a3,0x1b4 + 80017800: 6a168693 addi a3,a3,1697 # 801cbe9d <_ZL3dip> + 80017804: 0006c783 lbu a5,0(a3) + 80017808: 001b4717 auipc a4,0x1b4 + 8001780c: 6a870713 addi a4,a4,1704 # 801cbeb0 <_ZL5latch> + 80017810: 00072023 sw zero,0(a4) + 80017814: 0017c793 xori a5,a5,1 + 80017818: 00f68023 sb a5,0(a3) + 8001781c: 00070223 sb zero,4(a4) + 80017820: f89ff06f j 800177a8 <_ZL14S74LS374NSyncov> + +0000000080017824 <_ZL14S74LS374NPowerv>: + 80017824: ff010113 addi sp,sp,-16 + 80017828: 00113423 sd ra,8(sp) + 8001782c: 00813023 sd s0,0(sp) + 80017830: 001b4797 auipc a5,0x1b4 + 80017834: 68078793 addi a5,a5,1664 # 801cbeb0 <_ZL5latch> + 80017838: 0007a023 sw zero,0(a5) + 8001783c: 00078223 sb zero,4(a5) + 80017840: 001b4717 auipc a4,0x1b4 + 80017844: 64070ea3 sb zero,1629(a4) # 801cbe9d <_ZL3dip> + 80017848: f61ff0ef jal ra,800177a8 <_ZL14S74LS374NSyncov> + 8001784c: 000105b7 lui a1,0x10 + 80017850: ffff9617 auipc a2,0xffff9 + 80017854: e1060613 addi a2,a2,-496 # 80010660 <_Z6CartBRj> + 80017858: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8001785c: 00008537 lui a0,0x8 + 80017860: 1bc1c0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80017864: 00004437 lui s0,0x4 + 80017868: 000085b7 lui a1,0x8 + 8001786c: 10040513 addi a0,s0,256 # 4100 <_entry_offset+0x4100> + 80017870: 00000617 auipc a2,0x0 + 80017874: 34860613 addi a2,a2,840 # 80017bb8 <_ZL14S74LS374NWritejh> + 80017878: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 8001787c: 2ac1c0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80017880: 10040513 addi a0,s0,256 + 80017884: 00013403 ld s0,0(sp) + 80017888: 00813083 ld ra,8(sp) + 8001788c: 000065b7 lui a1,0x6 + 80017890: 00000617 auipc a2,0x0 + 80017894: e4060613 addi a2,a2,-448 # 800176d0 <_ZL13S74LS374NReadj> + 80017898: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 8001789c: 01010113 addi sp,sp,16 + 800178a0: 17c1c06f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +00000000800178a4 <_ZL15S74LS374NASyncov>: + 800178a4: ff010113 addi sp,sp,-16 + 800178a8: 00813023 sd s0,0(sp) + 800178ac: 001b4417 auipc s0,0x1b4 + 800178b0: 60440413 addi s0,s0,1540 # 801cbeb0 <_ZL5latch> + 800178b4: 00044583 lbu a1,0(s0) + 800178b8: 00008537 lui a0,0x8 + 800178bc: 00113423 sd ra,8(sp) + 800178c0: d54f90ef jal ra,80010e14 <_Z8setprg32jj> + 800178c4: 00144503 lbu a0,1(s0) + 800178c8: e3cf90ef jal ra,80010f04 <_Z7setchr8j> + 800178cc: 00244503 lbu a0,2(s0) + 800178d0: 00013403 ld s0,0(sp) + 800178d4: 00813083 ld ra,8(sp) + 800178d8: 01010113 addi sp,sp,16 + 800178dc: e85ff06f j 80017760 <_ZL13S74LS374MSynch> + +00000000800178e0 <_ZL15S74LS374NAPowerv>: + 800178e0: ff010113 addi sp,sp,-16 + 800178e4: 00113423 sd ra,8(sp) + 800178e8: 001b4797 auipc a5,0x1b4 + 800178ec: 5c878793 addi a5,a5,1480 # 801cbeb0 <_ZL5latch> + 800178f0: 30000713 li a4,768 + 800178f4: 00e7a023 sw a4,0(a5) + 800178f8: 00078223 sb zero,4(a5) + 800178fc: fa9ff0ef jal ra,800178a4 <_ZL15S74LS374NASyncov> + 80017900: 000105b7 lui a1,0x10 + 80017904: ffff9617 auipc a2,0xffff9 + 80017908: d5c60613 addi a2,a2,-676 # 80010660 <_Z6CartBRj> + 8001790c: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80017910: 00008537 lui a0,0x8 + 80017914: 1081c0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80017918: 00813083 ld ra,8(sp) + 8001791c: 000085b7 lui a1,0x8 + 80017920: 00004537 lui a0,0x4 + 80017924: 00000617 auipc a2,0x0 + 80017928: 34c60613 addi a2,a2,844 # 80017c70 <_ZL15S74LS374NAWritejh> + 8001792c: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80017930: 10050513 addi a0,a0,256 # 4100 <_entry_offset+0x4100> + 80017934: 01010113 addi sp,sp,16 + 80017938: 1f01c06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008001793c <_ZL10S8259Syncov>: + 8001793c: fb010113 addi sp,sp,-80 + 80017940: 04813023 sd s0,64(sp) + 80017944: 001b4417 auipc s0,0x1b4 + 80017948: 56c40413 addi s0,s0,1388 # 801cbeb0 <_ZL5latch> + 8001794c: 00544583 lbu a1,5(s0) + 80017950: 00008537 lui a0,0x8 + 80017954: 04113423 sd ra,72(sp) + 80017958: 0075f593 andi a1,a1,7 + 8001795c: 02913c23 sd s1,56(sp) + 80017960: 03213823 sd s2,48(sp) + 80017964: 03313423 sd s3,40(sp) + 80017968: 03413023 sd s4,32(sp) + 8001796c: 01513c23 sd s5,24(sp) + 80017970: 01613823 sd s6,16(sp) + 80017974: 01713423 sd s7,8(sp) + 80017978: c9cf90ef jal ra,80010e14 <_Z8setprg32jj> + 8001797c: 00744503 lbu a0,7(s0) + 80017980: 001b4797 auipc a5,0x1b4 + 80017984: 1607b783 ld a5,352(a5) # 801cbae0 + 80017988: 00157713 andi a4,a0,1 + 8001798c: 06078463 beqz a5,800179f4 <_ZL10S8259Syncov+0xb8> + 80017990: 02071a63 bnez a4,800179c4 <_ZL10S8259Syncov+0x88> + 80017994: 04013403 ld s0,64(sp) + 80017998: 04813083 ld ra,72(sp) + 8001799c: 03813483 ld s1,56(sp) + 800179a0: 03013903 ld s2,48(sp) + 800179a4: 02813983 ld s3,40(sp) + 800179a8: 02013a03 ld s4,32(sp) + 800179ac: 01813a83 ld s5,24(sp) + 800179b0: 01013b03 ld s6,16(sp) + 800179b4: 00813b83 ld s7,8(sp) + 800179b8: 00155513 srli a0,a0,0x1 + 800179bc: 05010113 addi sp,sp,80 + 800179c0: da1ff06f j 80017760 <_ZL13S74LS374MSynch> + 800179c4: 04013403 ld s0,64(sp) + 800179c8: 04813083 ld ra,72(sp) + 800179cc: 03813483 ld s1,56(sp) + 800179d0: 03013903 ld s2,48(sp) + 800179d4: 02813983 ld s3,40(sp) + 800179d8: 02013a03 ld s4,32(sp) + 800179dc: 01813a83 ld s5,24(sp) + 800179e0: 01013b03 ld s6,16(sp) + 800179e4: 00813b83 ld s7,8(sp) + 800179e8: 00100513 li a0,1 + 800179ec: 05010113 addi sp,sp,80 + 800179f0: e58f906f j 80011048 <_Z9setmirrori> + 800179f4: 00444603 lbu a2,4(s0) + 800179f8: 00157693 andi a3,a0,1 + 800179fc: 00040b13 mv s6,s0 + 80017a00: 0036181b slliw a6,a2,0x3 + 80017a04: 00000493 li s1,0 + 80017a08: 001b4a97 auipc s5,0x1b4 + 80017a0c: 498a8a93 addi s5,s5,1176 # 801cbea0 <_ZL4type> + 80017a10: 00200b93 li s7,2 + 80017a14: 00300993 li s3,3 + 80017a18: 00100913 li s2,1 + 80017a1c: 00400a13 li s4,4 + 80017a20: 0ff6f713 andi a4,a3,255 + 80017a24: 03887593 andi a1,a6,56 + 80017a28: 04068c63 beqz a3,80017a80 <_ZL10S8259Syncov+0x144> + 80017a2c: 00044783 lbu a5,0(s0) + 80017a30: 0077f793 andi a5,a5,7 + 80017a34: 00b7e5b3 or a1,a5,a1 + 80017a38: 000aa783 lw a5,0(s5) + 80017a3c: 05778c63 beq a5,s7,80017a94 <_ZL10S8259Syncov+0x158> + 80017a40: 06fbcc63 blt s7,a5,80017ab8 <_ZL10S8259Syncov+0x17c> + 80017a44: 0a078863 beqz a5,80017af4 <_ZL10S8259Syncov+0x1b8> + 80017a48: 01279c63 bne a5,s2,80017a60 <_ZL10S8259Syncov+0x124> + 80017a4c: 00b4951b slliw a0,s1,0xb + 80017a50: c74f90ef jal ra,80010ec4 <_Z7setchr2jj> + 80017a54: 00744503 lbu a0,7(s0) + 80017a58: 00157693 andi a3,a0,1 + 80017a5c: 00068713 mv a4,a3 + 80017a60: 0014849b addiw s1,s1,1 + 80017a64: 001b0b13 addi s6,s6,1 + 80017a68: f34484e3 beq s1,s4,80017990 <_ZL10S8259Syncov+0x54> + 80017a6c: 00444603 lbu a2,4(s0) + 80017a70: 0ff6f713 andi a4,a3,255 + 80017a74: 0036181b slliw a6,a2,0x3 + 80017a78: 03887593 andi a1,a6,56 + 80017a7c: fa0698e3 bnez a3,80017a2c <_ZL10S8259Syncov+0xf0> + 80017a80: 000b4783 lbu a5,0(s6) + 80017a84: 0077f793 andi a5,a5,7 + 80017a88: 00b7e5b3 or a1,a5,a1 + 80017a8c: 000aa783 lw a5,0(s5) + 80017a90: fb7798e3 bne a5,s7,80017a40 <_ZL10S8259Syncov+0x104> + 80017a94: 00259593 slli a1,a1,0x2 + 80017a98: 0095e5b3 or a1,a1,s1 + 80017a9c: 00b4951b slliw a0,s1,0xb + 80017aa0: 0005859b sext.w a1,a1 + 80017aa4: c20f90ef jal ra,80010ec4 <_Z7setchr2jj> + 80017aa8: 00744503 lbu a0,7(s0) + 80017aac: 00157693 andi a3,a0,1 + 80017ab0: 00068713 mv a4,a3 + 80017ab4: fadff06f j 80017a60 <_ZL10S8259Syncov+0x124> + 80017ab8: fb3794e3 bne a5,s3,80017a60 <_ZL10S8259Syncov+0x124> + 80017abc: 000b4583 lbu a1,0(s6) + 80017ac0: 0075f593 andi a1,a1,7 + 80017ac4: 09748263 beq s1,s7,80017b48 <_ZL10S8259Syncov+0x20c> + 80017ac8: 07348063 beq s1,s3,80017b28 <_ZL10S8259Syncov+0x1ec> + 80017acc: 05248663 beq s1,s2,80017b18 <_ZL10S8259Syncov+0x1dc> + 80017ad0: 00a4951b slliw a0,s1,0xa + 80017ad4: bd0f90ef jal ra,80010ea4 <_Z7setchr1jj> + 80017ad8: 00001537 lui a0,0x1 + 80017adc: fff00593 li a1,-1 + 80017ae0: c04f90ef jal ra,80010ee4 <_Z7setchr4jj> + 80017ae4: 00744503 lbu a0,7(s0) + 80017ae8: 00157693 andi a3,a0,1 + 80017aec: 00068713 mv a4,a3 + 80017af0: f71ff06f j 80017a60 <_ZL10S8259Syncov+0x124> + 80017af4: 0014f793 andi a5,s1,1 + 80017af8: 00159593 slli a1,a1,0x1 + 80017afc: 00b4951b slliw a0,s1,0xb + 80017b00: 00f5e5b3 or a1,a1,a5 + 80017b04: bc0f90ef jal ra,80010ec4 <_Z7setchr2jj> + 80017b08: 00744503 lbu a0,7(s0) + 80017b0c: 00157693 andi a3,a0,1 + 80017b10: 00068713 mv a4,a3 + 80017b14: f4dff06f j 80017a60 <_ZL10S8259Syncov+0x124> + 80017b18: 0046161b slliw a2,a2,0x4 + 80017b1c: 01067613 andi a2,a2,16 + 80017b20: 00c5e5b3 or a1,a1,a2 + 80017b24: fadff06f j 80017ad0 <_ZL10S8259Syncov+0x194> + 80017b28: 00644783 lbu a5,6(s0) + 80017b2c: 0026161b slliw a2,a2,0x2 + 80017b30: 01067613 andi a2,a2,16 + 80017b34: 0037979b slliw a5,a5,0x3 + 80017b38: 0087f793 andi a5,a5,8 + 80017b3c: 00c7e633 or a2,a5,a2 + 80017b40: 00c5e5b3 or a1,a1,a2 + 80017b44: f8dff06f j 80017ad0 <_ZL10S8259Syncov+0x194> + 80017b48: 01087813 andi a6,a6,16 + 80017b4c: 0105e5b3 or a1,a1,a6 + 80017b50: f81ff06f j 80017ad0 <_ZL10S8259Syncov+0x194> + +0000000080017b54 <_ZL12S8259Restorei>: + 80017b54: de9ff06f j 8001793c <_ZL10S8259Syncov> + +0000000080017b58 <_ZL10S8259Resetv>: + 80017b58: ff010113 addi sp,sp,-16 + 80017b5c: 00000513 li a0,0 + 80017b60: 00113423 sd ra,8(sp) + 80017b64: 001b4797 auipc a5,0x1b4 + 80017b68: 32078c23 sb zero,824(a5) # 801cbe9c <_ZL3cmd> + 80017b6c: 001b4797 auipc a5,0x1b4 + 80017b70: 3407b223 sd zero,836(a5) # 801cbeb0 <_ZL5latch> + 80017b74: b90f90ef jal ra,80010f04 <_Z7setchr8j> + 80017b78: dc5ff0ef jal ra,8001793c <_ZL10S8259Syncov> + 80017b7c: 000105b7 lui a1,0x10 + 80017b80: ffff9617 auipc a2,0xffff9 + 80017b84: ae060613 addi a2,a2,-1312 # 80010660 <_Z6CartBRj> + 80017b88: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80017b8c: 00008537 lui a0,0x8 + 80017b90: 68d1b0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80017b94: 00813083 ld ra,8(sp) + 80017b98: 000085b7 lui a1,0x8 + 80017b9c: 00004537 lui a0,0x4 + 80017ba0: 00000617 auipc a2,0x0 + 80017ba4: 1b460613 addi a2,a2,436 # 80017d54 <_ZL10S8259Writejh> + 80017ba8: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80017bac: 10050513 addi a0,a0,256 # 4100 <_entry_offset+0x4100> + 80017bb0: 01010113 addi sp,sp,16 + 80017bb4: 7751b06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080017bb8 <_ZL14S74LS374NWritejh>: + 80017bb8: 000047b7 lui a5,0x4 + 80017bbc: 10178713 addi a4,a5,257 # 4101 <_entry_offset+0x4101> + 80017bc0: 00e57533 and a0,a0,a4 + 80017bc4: 10078793 addi a5,a5,256 + 80017bc8: 04f50263 beq a0,a5,80017c0c <_ZL14S74LS374NWritejh+0x54> + 80017bcc: 001b4797 auipc a5,0x1b4 + 80017bd0: 2d078793 addi a5,a5,720 # 801cbe9c <_ZL3cmd> + 80017bd4: 0007c683 lbu a3,0(a5) + 80017bd8: 00700713 li a4,7 + 80017bdc: 02d76663 bltu a4,a3,80017c08 <_ZL14S74LS374NWritejh+0x50> + 80017be0: 0002e717 auipc a4,0x2e + 80017be4: 92870713 addi a4,a4,-1752 # 80045508 <_ZZL8SetInputvE3moo+0x6b8> + 80017be8: 00269793 slli a5,a3,0x2 + 80017bec: 00e787b3 add a5,a5,a4 + 80017bf0: 0007a783 lw a5,0(a5) + 80017bf4: 00e787b3 add a5,a5,a4 + 80017bf8: 00078067 jr a5 + 80017bfc: 4015d59b sraiw a1,a1,0x1 + 80017c00: 001b4797 auipc a5,0x1b4 + 80017c04: 2ab78923 sb a1,690(a5) # 801cbeb2 <_ZL5latch+0x2> + 80017c08: ba1ff06f j 800177a8 <_ZL14S74LS374NSyncov> + 80017c0c: 0075f593 andi a1,a1,7 + 80017c10: 001b4797 auipc a5,0x1b4 + 80017c14: 28b78623 sb a1,652(a5) # 801cbe9c <_ZL3cmd> + 80017c18: 00008067 ret + 80017c1c: 00359793 slli a5,a1,0x3 + 80017c20: 001b4717 auipc a4,0x1b4 + 80017c24: 29070713 addi a4,a4,656 # 801cbeb0 <_ZL5latch> + 80017c28: 0015f593 andi a1,a1,1 + 80017c2c: 0087f793 andi a5,a5,8 + 80017c30: 00b70023 sb a1,0(a4) + 80017c34: 00f701a3 sb a5,3(a4) + 80017c38: b71ff06f j 800177a8 <_ZL14S74LS374NSyncov> + 80017c3c: 00259593 slli a1,a1,0x2 + 80017c40: 0045f593 andi a1,a1,4 + 80017c44: 001b4797 auipc a5,0x1b4 + 80017c48: 26b78823 sb a1,624(a5) # 801cbeb4 <_ZL5latch+0x4> + 80017c4c: b5dff06f j 800177a8 <_ZL14S74LS374NSyncov> + 80017c50: 0075f593 andi a1,a1,7 + 80017c54: 001b4797 auipc a5,0x1b4 + 80017c58: 24b78e23 sb a1,604(a5) # 801cbeb0 <_ZL5latch> + 80017c5c: b4dff06f j 800177a8 <_ZL14S74LS374NSyncov> + 80017c60: 0035f593 andi a1,a1,3 + 80017c64: 001b4797 auipc a5,0x1b4 + 80017c68: 24b786a3 sb a1,589(a5) # 801cbeb1 <_ZL5latch+0x1> + 80017c6c: b3dff06f j 800177a8 <_ZL14S74LS374NSyncov> + +0000000080017c70 <_ZL15S74LS374NAWritejh>: + 80017c70: 000047b7 lui a5,0x4 + 80017c74: 10178713 addi a4,a5,257 # 4101 <_entry_offset+0x4101> + 80017c78: 00e57533 and a0,a0,a4 + 80017c7c: 10078793 addi a5,a5,256 + 80017c80: 04f50263 beq a0,a5,80017cc4 <_ZL15S74LS374NAWritejh+0x54> + 80017c84: 001b4797 auipc a5,0x1b4 + 80017c88: 21878793 addi a5,a5,536 # 801cbe9c <_ZL3cmd> + 80017c8c: 0007c683 lbu a3,0(a5) + 80017c90: 00700713 li a4,7 + 80017c94: 02d76663 bltu a4,a3,80017cc0 <_ZL15S74LS374NAWritejh+0x50> + 80017c98: 0002e717 auipc a4,0x2e + 80017c9c: 89070713 addi a4,a4,-1904 # 80045528 <_ZZL8SetInputvE3moo+0x6d8> + 80017ca0: 00269793 slli a5,a3,0x2 + 80017ca4: 00e787b3 add a5,a5,a4 + 80017ca8: 0007a783 lw a5,0(a5) + 80017cac: 00e787b3 add a5,a5,a4 + 80017cb0: 00078067 jr a5 + 80017cb4: 0015f593 andi a1,a1,1 + 80017cb8: 001b4797 auipc a5,0x1b4 + 80017cbc: 1eb78d23 sb a1,506(a5) # 801cbeb2 <_ZL5latch+0x2> + 80017cc0: be5ff06f j 800178a4 <_ZL15S74LS374NASyncov> + 80017cc4: 0075f593 andi a1,a1,7 + 80017cc8: 001b4797 auipc a5,0x1b4 + 80017ccc: 1cb78a23 sb a1,468(a5) # 801cbe9c <_ZL3cmd> + 80017cd0: 00008067 ret + 80017cd4: 30000793 li a5,768 + 80017cd8: 001b4717 auipc a4,0x1b4 + 80017cdc: 1cf71c23 sh a5,472(a4) # 801cbeb0 <_ZL5latch> + 80017ce0: fe1ff06f j 80017cc0 <_ZL15S74LS374NAWritejh+0x50> + 80017ce4: 00359593 slli a1,a1,0x3 + 80017ce8: 0085f593 andi a1,a1,8 + 80017cec: 001b4797 auipc a5,0x1b4 + 80017cf0: 1cb783a3 sb a1,455(a5) # 801cbeb3 <_ZL5latch+0x3> + 80017cf4: fcdff06f j 80017cc0 <_ZL15S74LS374NAWritejh+0x50> + 80017cf8: 001b4717 auipc a4,0x1b4 + 80017cfc: 1b870713 addi a4,a4,440 # 801cbeb0 <_ZL5latch> + 80017d00: 00174783 lbu a5,1(a4) + 80017d04: 0035f593 andi a1,a1,3 + 80017d08: 0067f793 andi a5,a5,6 + 80017d0c: 00b7e5b3 or a1,a5,a1 + 80017d10: 00b700a3 sb a1,1(a4) + 80017d14: fadff06f j 80017cc0 <_ZL15S74LS374NAWritejh+0x50> + 80017d18: 0015f593 andi a1,a1,1 + 80017d1c: 001b4797 auipc a5,0x1b4 + 80017d20: 18b78a23 sb a1,404(a5) # 801cbeb0 <_ZL5latch> + 80017d24: f9dff06f j 80017cc0 <_ZL15S74LS374NAWritejh+0x50> + 80017d28: 001b4717 auipc a4,0x1b4 + 80017d2c: 18870713 addi a4,a4,392 # 801cbeb0 <_ZL5latch> + 80017d30: 00174783 lbu a5,1(a4) + 80017d34: 00374683 lbu a3,3(a4) + 80017d38: 00159593 slli a1,a1,0x1 + 80017d3c: 0017f793 andi a5,a5,1 + 80017d40: 00d7e7b3 or a5,a5,a3 + 80017d44: 0065f593 andi a1,a1,6 + 80017d48: 00b7e5b3 or a1,a5,a1 + 80017d4c: 00b700a3 sb a1,1(a4) + 80017d50: f71ff06f j 80017cc0 <_ZL15S74LS374NAWritejh+0x50> + +0000000080017d54 <_ZL10S8259Writejh>: + 80017d54: 000047b7 lui a5,0x4 + 80017d58: 10178713 addi a4,a5,257 # 4101 <_entry_offset+0x4101> + 80017d5c: 00e57533 and a0,a0,a4 + 80017d60: 10078793 addi a5,a5,256 + 80017d64: 00f51863 bne a0,a5,80017d74 <_ZL10S8259Writejh+0x20> + 80017d68: 001b4797 auipc a5,0x1b4 + 80017d6c: 12b78a23 sb a1,308(a5) # 801cbe9c <_ZL3cmd> + 80017d70: 00008067 ret + 80017d74: 001b4797 auipc a5,0x1b4 + 80017d78: 1287c783 lbu a5,296(a5) # 801cbe9c <_ZL3cmd> + 80017d7c: 0077f713 andi a4,a5,7 + 80017d80: 001b4797 auipc a5,0x1b4 + 80017d84: 13078793 addi a5,a5,304 # 801cbeb0 <_ZL5latch> + 80017d88: 00e787b3 add a5,a5,a4 + 80017d8c: 00b78023 sb a1,0(a5) + 80017d90: badff06f j 8001793c <_ZL10S8259Syncov> + +0000000080017d94 <_Z14S74LS374N_InitP8CartInfo>: + 80017d94: ff010113 addi sp,sp,-16 + 80017d98: 00113423 sd ra,8(sp) + 80017d9c: 00000717 auipc a4,0x0 + 80017da0: a8870713 addi a4,a4,-1400 # 80017824 <_ZL14S74LS374NPowerv> + 80017da4: 00e53023 sd a4,0(a0) + 80017da8: 00050793 mv a5,a0 + 80017dac: 00000717 auipc a4,0x0 + 80017db0: a5070713 addi a4,a4,-1456 # 800177fc <_ZL14S74LS374NResetv> + 80017db4: 00e7b423 sd a4,8(a5) + 80017db8: 0002d697 auipc a3,0x2d + 80017dbc: 5b068693 addi a3,a3,1456 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 80017dc0: 00000797 auipc a5,0x0 + 80017dc4: a3878793 addi a5,a5,-1480 # 800177f8 <_ZL16S74LS374NRestorei> + 80017dc8: 00000613 li a2,0 + 80017dcc: 00500593 li a1,5 + 80017dd0: 001b4517 auipc a0,0x1b4 + 80017dd4: 0e050513 addi a0,a0,224 # 801cbeb0 <_ZL5latch> + 80017dd8: 001b5717 auipc a4,0x1b5 + 80017ddc: 88f73023 sd a5,-1920(a4) # 801cc658 + 80017de0: a30e80ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80017de4: 0002d697 auipc a3,0x2d + 80017de8: 6d468693 addi a3,a3,1748 # 800454b8 <_ZZL8SetInputvE3moo+0x668> + 80017dec: 00000613 li a2,0 + 80017df0: 00100593 li a1,1 + 80017df4: 001b4517 auipc a0,0x1b4 + 80017df8: 0a850513 addi a0,a0,168 # 801cbe9c <_ZL3cmd> + 80017dfc: a14e80ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80017e00: 00813083 ld ra,8(sp) + 80017e04: 0002d697 auipc a3,0x2d + 80017e08: 74468693 addi a3,a3,1860 # 80045548 <_ZZL8SetInputvE3moo+0x6f8> + 80017e0c: 00000613 li a2,0 + 80017e10: 00100593 li a1,1 + 80017e14: 001b4517 auipc a0,0x1b4 + 80017e18: 08950513 addi a0,a0,137 # 801cbe9d <_ZL3dip> + 80017e1c: 01010113 addi sp,sp,16 + 80017e20: 9f0e806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080017e24 <_Z15S74LS374NA_InitP8CartInfo>: + 80017e24: ff010113 addi sp,sp,-16 + 80017e28: 00113423 sd ra,8(sp) + 80017e2c: 00000797 auipc a5,0x0 + 80017e30: ab478793 addi a5,a5,-1356 # 800178e0 <_ZL15S74LS374NAPowerv> + 80017e34: 00f53023 sd a5,0(a0) + 80017e38: 0002d697 auipc a3,0x2d + 80017e3c: 53068693 addi a3,a3,1328 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 80017e40: 00000613 li a2,0 + 80017e44: 00500593 li a1,5 + 80017e48: 001b4517 auipc a0,0x1b4 + 80017e4c: 06850513 addi a0,a0,104 # 801cbeb0 <_ZL5latch> + 80017e50: 00000797 auipc a5,0x0 + 80017e54: 9a878793 addi a5,a5,-1624 # 800177f8 <_ZL16S74LS374NRestorei> + 80017e58: 001b5717 auipc a4,0x1b5 + 80017e5c: 80f73023 sd a5,-2048(a4) # 801cc658 + 80017e60: 9b0e80ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80017e64: 00813083 ld ra,8(sp) + 80017e68: 0002d697 auipc a3,0x2d + 80017e6c: 65068693 addi a3,a3,1616 # 800454b8 <_ZZL8SetInputvE3moo+0x668> + 80017e70: 00000613 li a2,0 + 80017e74: 00100593 li a1,1 + 80017e78: 001b4517 auipc a0,0x1b4 + 80017e7c: 02450513 addi a0,a0,36 # 801cbe9c <_ZL3cmd> + 80017e80: 01010113 addi sp,sp,16 + 80017e84: 98ce806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080017e88 <_Z11S8259A_InitP8CartInfo>: + 80017e88: ff010113 addi sp,sp,-16 + 80017e8c: 00113423 sd ra,8(sp) + 80017e90: 00000797 auipc a5,0x0 + 80017e94: cc878793 addi a5,a5,-824 # 80017b58 <_ZL10S8259Resetv> + 80017e98: 00f53023 sd a5,0(a0) + 80017e9c: 0002d697 auipc a3,0x2d + 80017ea0: 4cc68693 addi a3,a3,1228 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 80017ea4: 00000797 auipc a5,0x0 + 80017ea8: cb078793 addi a5,a5,-848 # 80017b54 <_ZL12S8259Restorei> + 80017eac: 00000613 li a2,0 + 80017eb0: 00800593 li a1,8 + 80017eb4: 001b4517 auipc a0,0x1b4 + 80017eb8: ffc50513 addi a0,a0,-4 # 801cbeb0 <_ZL5latch> + 80017ebc: 001b4717 auipc a4,0x1b4 + 80017ec0: 78f73e23 sd a5,1948(a4) # 801cc658 + 80017ec4: 94ce80ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80017ec8: 0002d697 auipc a3,0x2d + 80017ecc: 5f068693 addi a3,a3,1520 # 800454b8 <_ZZL8SetInputvE3moo+0x668> + 80017ed0: 00000613 li a2,0 + 80017ed4: 00100593 li a1,1 + 80017ed8: 001b4517 auipc a0,0x1b4 + 80017edc: fc450513 addi a0,a0,-60 # 801cbe9c <_ZL3cmd> + 80017ee0: 930e80ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80017ee4: 00813083 ld ra,8(sp) + 80017ee8: 001b4797 auipc a5,0x1b4 + 80017eec: fa07ac23 sw zero,-72(a5) # 801cbea0 <_ZL4type> + 80017ef0: 01010113 addi sp,sp,16 + 80017ef4: 00008067 ret + +0000000080017ef8 <_Z11S8259B_InitP8CartInfo>: + 80017ef8: ff010113 addi sp,sp,-16 + 80017efc: 00113423 sd ra,8(sp) + 80017f00: 00000797 auipc a5,0x0 + 80017f04: c5878793 addi a5,a5,-936 # 80017b58 <_ZL10S8259Resetv> + 80017f08: 00f53023 sd a5,0(a0) + 80017f0c: 0002d697 auipc a3,0x2d + 80017f10: 45c68693 addi a3,a3,1116 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 80017f14: 00000797 auipc a5,0x0 + 80017f18: c4078793 addi a5,a5,-960 # 80017b54 <_ZL12S8259Restorei> + 80017f1c: 00000613 li a2,0 + 80017f20: 00800593 li a1,8 + 80017f24: 001b4517 auipc a0,0x1b4 + 80017f28: f8c50513 addi a0,a0,-116 # 801cbeb0 <_ZL5latch> + 80017f2c: 001b4717 auipc a4,0x1b4 + 80017f30: 72f73623 sd a5,1836(a4) # 801cc658 + 80017f34: 8dce80ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80017f38: 0002d697 auipc a3,0x2d + 80017f3c: 58068693 addi a3,a3,1408 # 800454b8 <_ZZL8SetInputvE3moo+0x668> + 80017f40: 00000613 li a2,0 + 80017f44: 00100593 li a1,1 + 80017f48: 001b4517 auipc a0,0x1b4 + 80017f4c: f5450513 addi a0,a0,-172 # 801cbe9c <_ZL3cmd> + 80017f50: 8c0e80ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80017f54: 00813083 ld ra,8(sp) + 80017f58: 00100793 li a5,1 + 80017f5c: 001b4717 auipc a4,0x1b4 + 80017f60: f4f72223 sw a5,-188(a4) # 801cbea0 <_ZL4type> + 80017f64: 01010113 addi sp,sp,16 + 80017f68: 00008067 ret + +0000000080017f6c <_Z11S8259C_InitP8CartInfo>: + 80017f6c: ff010113 addi sp,sp,-16 + 80017f70: 00113423 sd ra,8(sp) + 80017f74: 00000797 auipc a5,0x0 + 80017f78: be478793 addi a5,a5,-1052 # 80017b58 <_ZL10S8259Resetv> + 80017f7c: 00f53023 sd a5,0(a0) + 80017f80: 0002d697 auipc a3,0x2d + 80017f84: 3e868693 addi a3,a3,1000 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 80017f88: 00000797 auipc a5,0x0 + 80017f8c: bcc78793 addi a5,a5,-1076 # 80017b54 <_ZL12S8259Restorei> + 80017f90: 00000613 li a2,0 + 80017f94: 00800593 li a1,8 + 80017f98: 001b4517 auipc a0,0x1b4 + 80017f9c: f1850513 addi a0,a0,-232 # 801cbeb0 <_ZL5latch> + 80017fa0: 001b4717 auipc a4,0x1b4 + 80017fa4: 6af73c23 sd a5,1720(a4) # 801cc658 + 80017fa8: 868e80ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80017fac: 0002d697 auipc a3,0x2d + 80017fb0: 50c68693 addi a3,a3,1292 # 800454b8 <_ZZL8SetInputvE3moo+0x668> + 80017fb4: 00000613 li a2,0 + 80017fb8: 00100593 li a1,1 + 80017fbc: 001b4517 auipc a0,0x1b4 + 80017fc0: ee050513 addi a0,a0,-288 # 801cbe9c <_ZL3cmd> + 80017fc4: 84ce80ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80017fc8: 00813083 ld ra,8(sp) + 80017fcc: 00200793 li a5,2 + 80017fd0: 001b4717 auipc a4,0x1b4 + 80017fd4: ecf72823 sw a5,-304(a4) # 801cbea0 <_ZL4type> + 80017fd8: 01010113 addi sp,sp,16 + 80017fdc: 00008067 ret + +0000000080017fe0 <_Z11S8259D_InitP8CartInfo>: + 80017fe0: ff010113 addi sp,sp,-16 + 80017fe4: 00113423 sd ra,8(sp) + 80017fe8: 00000797 auipc a5,0x0 + 80017fec: b7078793 addi a5,a5,-1168 # 80017b58 <_ZL10S8259Resetv> + 80017ff0: 00f53023 sd a5,0(a0) + 80017ff4: 0002d697 auipc a3,0x2d + 80017ff8: 37468693 addi a3,a3,884 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 80017ffc: 00000797 auipc a5,0x0 + 80018000: b5878793 addi a5,a5,-1192 # 80017b54 <_ZL12S8259Restorei> + 80018004: 00000613 li a2,0 + 80018008: 00800593 li a1,8 + 8001800c: 001b4517 auipc a0,0x1b4 + 80018010: ea450513 addi a0,a0,-348 # 801cbeb0 <_ZL5latch> + 80018014: 001b4717 auipc a4,0x1b4 + 80018018: 64f73223 sd a5,1604(a4) # 801cc658 + 8001801c: ff5e70ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80018020: 0002d697 auipc a3,0x2d + 80018024: 49868693 addi a3,a3,1176 # 800454b8 <_ZZL8SetInputvE3moo+0x668> + 80018028: 00000613 li a2,0 + 8001802c: 00100593 li a1,1 + 80018030: 001b4517 auipc a0,0x1b4 + 80018034: e6c50513 addi a0,a0,-404 # 801cbe9c <_ZL3cmd> + 80018038: fd9e70ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001803c: 00813083 ld ra,8(sp) + 80018040: 00300793 li a5,3 + 80018044: 001b4717 auipc a4,0x1b4 + 80018048: e4f72e23 sw a5,-420(a4) # 801cbea0 <_ZL4type> + 8001804c: 01010113 addi sp,sp,16 + 80018050: 00008067 ret + +0000000080018054 <_Z12SA0161M_InitP8CartInfo>: + 80018054: fffff797 auipc a5,0xfffff + 80018058: 2cc78793 addi a5,a5,716 # 80017320 <_ZL9SARestorei> + 8001805c: 001b4717 auipc a4,0x1b4 + 80018060: 5ef73e23 sd a5,1532(a4) # 801cc658 + 80018064: fffff797 auipc a5,0xfffff + 80018068: 49478793 addi a5,a5,1172 # 800174f8 <_ZL7SAPowerv> + 8001806c: 00f53023 sd a5,0(a0) + 80018070: fffff797 auipc a5,0xfffff + 80018074: 2f078793 addi a5,a5,752 # 80017360 <_ZL12SA0161MSyncov> + 80018078: 0002d697 auipc a3,0x2d + 8001807c: 2f068693 addi a3,a3,752 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 80018080: 00000613 li a2,0 + 80018084: 00100593 li a1,1 + 80018088: 001b4517 auipc a0,0x1b4 + 8001808c: e2850513 addi a0,a0,-472 # 801cbeb0 <_ZL5latch> + 80018090: 001b4717 auipc a4,0x1b4 + 80018094: e0f73c23 sd a5,-488(a4) # 801cbea8 <_ZL5WSync> + 80018098: f79e706f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001809c <_Z12SA72007_InitP8CartInfo>: + 8001809c: fffff797 auipc a5,0xfffff + 800180a0: 28478793 addi a5,a5,644 # 80017320 <_ZL9SARestorei> + 800180a4: 001b4717 auipc a4,0x1b4 + 800180a8: 5af73a23 sd a5,1460(a4) # 801cc658 + 800180ac: fffff797 auipc a5,0xfffff + 800180b0: 44c78793 addi a5,a5,1100 # 800174f8 <_ZL7SAPowerv> + 800180b4: 00f53023 sd a5,0(a0) + 800180b8: fffff797 auipc a5,0xfffff + 800180bc: 2e878793 addi a5,a5,744 # 800173a0 <_ZL12SA72007Syncov> + 800180c0: 0002d697 auipc a3,0x2d + 800180c4: 2a868693 addi a3,a3,680 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 800180c8: 00000613 li a2,0 + 800180cc: 00100593 li a1,1 + 800180d0: 001b4517 auipc a0,0x1b4 + 800180d4: de050513 addi a0,a0,-544 # 801cbeb0 <_ZL5latch> + 800180d8: 001b4717 auipc a4,0x1b4 + 800180dc: dcf73823 sd a5,-560(a4) # 801cbea8 <_ZL5WSync> + 800180e0: f31e706f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800180e4 <_Z12SA72008_InitP8CartInfo>: + 800180e4: fffff797 auipc a5,0xfffff + 800180e8: 23c78793 addi a5,a5,572 # 80017320 <_ZL9SARestorei> + 800180ec: 001b4717 auipc a4,0x1b4 + 800180f0: 56f73623 sd a5,1388(a4) # 801cc658 + 800180f4: fffff797 auipc a5,0xfffff + 800180f8: 40478793 addi a5,a5,1028 # 800174f8 <_ZL7SAPowerv> + 800180fc: 00f53023 sd a5,0(a0) + 80018100: fffff797 auipc a5,0xfffff + 80018104: 2cc78793 addi a5,a5,716 # 800173cc <_ZL12SA72008Syncov> + 80018108: 0002d697 auipc a3,0x2d + 8001810c: 26068693 addi a3,a3,608 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 80018110: 00000613 li a2,0 + 80018114: 00100593 li a1,1 + 80018118: 001b4517 auipc a0,0x1b4 + 8001811c: d9850513 addi a0,a0,-616 # 801cbeb0 <_ZL5latch> + 80018120: 001b4717 auipc a4,0x1b4 + 80018124: d8f73423 sd a5,-632(a4) # 801cbea8 <_ZL5WSync> + 80018128: ee9e706f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001812c <_Z10SA009_InitP8CartInfo>: + 8001812c: fffff797 auipc a5,0xfffff + 80018130: 1f478793 addi a5,a5,500 # 80017320 <_ZL9SARestorei> + 80018134: 001b4717 auipc a4,0x1b4 + 80018138: 52f73223 sd a5,1316(a4) # 801cc658 + 8001813c: fffff797 auipc a5,0xfffff + 80018140: 3bc78793 addi a5,a5,956 # 800174f8 <_ZL7SAPowerv> + 80018144: 00f53023 sd a5,0(a0) + 80018148: fffff797 auipc a5,0xfffff + 8001814c: 2c478793 addi a5,a5,708 # 8001740c <_ZL10SA009Syncov> + 80018150: 0002d697 auipc a3,0x2d + 80018154: 21868693 addi a3,a3,536 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 80018158: 00000613 li a2,0 + 8001815c: 00100593 li a1,1 + 80018160: 001b4517 auipc a0,0x1b4 + 80018164: d5050513 addi a0,a0,-688 # 801cbeb0 <_ZL5latch> + 80018168: 001b4717 auipc a4,0x1b4 + 8001816c: d4f73023 sd a5,-704(a4) # 801cbea8 <_ZL5WSync> + 80018170: ea1e706f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080018174 <_Z11SA0036_InitP8CartInfo>: + 80018174: fffff797 auipc a5,0xfffff + 80018178: 1ac78793 addi a5,a5,428 # 80017320 <_ZL9SARestorei> + 8001817c: 001b4717 auipc a4,0x1b4 + 80018180: 4cf73e23 sd a5,1244(a4) # 801cc658 + 80018184: fffff797 auipc a5,0xfffff + 80018188: 3cc78793 addi a5,a5,972 # 80017550 <_ZL8SADPowerv> + 8001818c: 00f53023 sd a5,0(a0) + 80018190: fffff797 auipc a5,0xfffff + 80018194: 21078793 addi a5,a5,528 # 800173a0 <_ZL12SA72007Syncov> + 80018198: 0002d697 auipc a3,0x2d + 8001819c: 1d068693 addi a3,a3,464 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 800181a0: 00000613 li a2,0 + 800181a4: 00100593 li a1,1 + 800181a8: 001b4517 auipc a0,0x1b4 + 800181ac: d0850513 addi a0,a0,-760 # 801cbeb0 <_ZL5latch> + 800181b0: 001b4717 auipc a4,0x1b4 + 800181b4: cef73c23 sd a5,-776(a4) # 801cbea8 <_ZL5WSync> + 800181b8: e59e706f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800181bc <_Z11SA0037_InitP8CartInfo>: + 800181bc: fffff797 auipc a5,0xfffff + 800181c0: 16478793 addi a5,a5,356 # 80017320 <_ZL9SARestorei> + 800181c4: 001b4717 auipc a4,0x1b4 + 800181c8: 48f73a23 sd a5,1172(a4) # 801cc658 + 800181cc: fffff797 auipc a5,0xfffff + 800181d0: 38478793 addi a5,a5,900 # 80017550 <_ZL8SADPowerv> + 800181d4: 00f53023 sd a5,0(a0) + 800181d8: fffff797 auipc a5,0xfffff + 800181dc: 18878793 addi a5,a5,392 # 80017360 <_ZL12SA0161MSyncov> + 800181e0: 0002d697 auipc a3,0x2d + 800181e4: 18868693 addi a3,a3,392 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 800181e8: 00000613 li a2,0 + 800181ec: 00100593 li a1,1 + 800181f0: 001b4517 auipc a0,0x1b4 + 800181f4: cc050513 addi a0,a0,-832 # 801cbeb0 <_ZL5latch> + 800181f8: 001b4717 auipc a4,0x1b4 + 800181fc: caf73823 sd a5,-848(a4) # 801cbea8 <_ZL5WSync> + 80018200: e11e706f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080018204 <_Z10TCU01_InitP8CartInfo>: + 80018204: fffff797 auipc a5,0xfffff + 80018208: 2a078793 addi a5,a5,672 # 800174a4 <_ZL12TCU01Restorei> + 8001820c: 001b4717 auipc a4,0x1b4 + 80018210: 44f73623 sd a5,1100(a4) # 801cc658 + 80018214: fffff797 auipc a5,0xfffff + 80018218: 39478793 addi a5,a5,916 # 800175a8 <_ZL10TCU01Powerv> + 8001821c: 00f53023 sd a5,0(a0) + 80018220: 0002d697 auipc a3,0x2d + 80018224: 14868693 addi a3,a3,328 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 80018228: 00000613 li a2,0 + 8001822c: 00100593 li a1,1 + 80018230: 001b4517 auipc a0,0x1b4 + 80018234: c8050513 addi a0,a0,-896 # 801cbeb0 <_ZL5latch> + 80018238: dd9e706f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001823c <_Z10TCU02_InitP8CartInfo>: + 8001823c: fffff797 auipc a5,0xfffff + 80018240: 2b878793 addi a5,a5,696 # 800174f4 <_ZL12TCU02Restorei> + 80018244: 001b4717 auipc a4,0x1b4 + 80018248: 40f73a23 sd a5,1044(a4) # 801cc658 + 8001824c: fffff797 auipc a5,0xfffff + 80018250: 3b078793 addi a5,a5,944 # 800175fc <_ZL10TCU02Powerv> + 80018254: 00f53023 sd a5,0(a0) + 80018258: 0002d697 auipc a3,0x2d + 8001825c: 11068693 addi a3,a3,272 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 80018260: 00000613 li a2,0 + 80018264: 00100593 li a1,1 + 80018268: 001b4517 auipc a0,0x1b4 + 8001826c: c4850513 addi a0,a0,-952 # 801cbeb0 <_ZL5latch> + 80018270: da1e706f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080018274 <_Z10TCA01_InitP8CartInfo>: + 80018274: fffff797 auipc a5,0xfffff + 80018278: 3f878793 addi a5,a5,1016 # 8001766c <_ZL10TCA01Powerv> + 8001827c: 00f53023 sd a5,0(a0) + 80018280: 00008067 ret + +0000000080018284 <_ZL4Syncv>: + 80018284: ff010113 addi sp,sp,-16 + 80018288: 00813023 sd s0,0(sp) + 8001828c: 001b4417 auipc s0,0x1b4 + 80018290: c2c40413 addi s0,s0,-980 # 801cbeb8 <_ZL3reg> + 80018294: 00044503 lbu a0,0(s0) + 80018298: 00113423 sd ra,8(sp) + 8001829c: c69f80ef jal ra,80010f04 <_Z7setchr8j> + 800182a0: 001b4797 auipc a5,0x1b4 + 800182a4: c1a7c783 lbu a5,-998(a5) # 801cbeba <_ZL5delay> + 800182a8: 02078e63 beqz a5,800182e4 <_ZL4Syncv+0x60> + 800182ac: 00044583 lbu a1,0(s0) + 800182b0: 0000e537 lui a0,0xe + 800182b4: 0015959b slliw a1,a1,0x1 + 800182b8: 0015859b addiw a1,a1,1 + 800182bc: fe0f80ef jal ra,80010a9c <_Z7setprg8jj> + 800182c0: 001b4517 auipc a0,0x1b4 + 800182c4: bf954503 lbu a0,-1031(a0) # 801cbeb9 <_ZL4mirr> + 800182c8: 00013403 ld s0,0(sp) + 800182cc: 00813083 ld ra,8(sp) + 800182d0: 00255513 srli a0,a0,0x2 + 800182d4: 00154513 xori a0,a0,1 + 800182d8: 00157513 andi a0,a0,1 + 800182dc: 01010113 addi sp,sp,16 + 800182e0: d69f806f j 80011048 <_Z9setmirrori> + 800182e4: 00044583 lbu a1,0(s0) + 800182e8: 00008537 lui a0,0x8 + 800182ec: 96df80ef jal ra,80010c58 <_Z8setprg16jj> + 800182f0: 00044583 lbu a1,0(s0) + 800182f4: 0000c537 lui a0,0xc + 800182f8: 0015959b slliw a1,a1,0x1 + 800182fc: fa0f80ef jal ra,80010a9c <_Z7setprg8jj> + 80018300: fadff06f j 800182ac <_ZL4Syncv+0x28> + +0000000080018304 <_ZL12StateRestorei>: + 80018304: f81ff06f j 80018284 <_ZL4Syncv> + +0000000080018308 <_ZL10M175Write2jh>: + 80018308: 00f5f593 andi a1,a1,15 + 8001830c: 001b4797 auipc a5,0x1b4 + 80018310: bab78623 sb a1,-1108(a5) # 801cbeb8 <_ZL3reg> + 80018314: 00100793 li a5,1 + 80018318: 001b4717 auipc a4,0x1b4 + 8001831c: baf70123 sb a5,-1118(a4) # 801cbeba <_ZL5delay> + 80018320: f65ff06f j 80018284 <_ZL4Syncv> + +0000000080018324 <_ZL10M175Write1jh>: + 80018324: 001b4797 auipc a5,0x1b4 + 80018328: b8b78aa3 sb a1,-1131(a5) # 801cbeb9 <_ZL4mirr> + 8001832c: 00100793 li a5,1 + 80018330: 001b4717 auipc a4,0x1b4 + 80018334: b8f70523 sb a5,-1142(a4) # 801cbeba <_ZL5delay> + 80018338: f4dff06f j 80018284 <_ZL4Syncv> + +000000008001833c <_ZL9M175Powerv>: + 8001833c: 000105b7 lui a1,0x10 + 80018340: ff010113 addi sp,sp,-16 + 80018344: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80018348: 00000617 auipc a2,0x0 + 8001834c: 06060613 addi a2,a2,96 # 800183a8 <_ZL8M175Readj> + 80018350: 00008537 lui a0,0x8 + 80018354: 00113423 sd ra,8(sp) + 80018358: 001b4797 auipc a5,0x1b4 + 8001835c: b6078123 sb zero,-1182(a5) # 801cbeba <_ZL5delay> + 80018360: 001b4797 auipc a5,0x1b4 + 80018364: b4078ca3 sb zero,-1191(a5) # 801cbeb9 <_ZL4mirr> + 80018368: 001b4797 auipc a5,0x1b4 + 8001836c: b4078823 sb zero,-1200(a5) # 801cbeb8 <_ZL3reg> + 80018370: 6ac1b0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80018374: 00000617 auipc a2,0x0 + 80018378: fb060613 addi a2,a2,-80 # 80018324 <_ZL10M175Write1jh> + 8001837c: 000085b7 lui a1,0x8 + 80018380: 00008537 lui a0,0x8 + 80018384: 7a41b0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80018388: 00000617 auipc a2,0x0 + 8001838c: f8060613 addi a2,a2,-128 # 80018308 <_ZL10M175Write2jh> + 80018390: 0000a5b7 lui a1,0xa + 80018394: 0000a537 lui a0,0xa + 80018398: 7901b0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001839c: 00813083 ld ra,8(sp) + 800183a0: 01010113 addi sp,sp,16 + 800183a4: ee1ff06f j 80018284 <_ZL4Syncv> + +00000000800183a8 <_ZL8M175Readj>: + 800183a8: 000107b7 lui a5,0x10 + 800183ac: ffc78793 addi a5,a5,-4 # fffc <_entry_offset+0xfffc> + 800183b0: 00f50463 beq a0,a5,800183b8 <_ZL8M175Readj+0x10> + 800183b4: aacf806f j 80010660 <_Z6CartBRj> + 800183b8: fe010113 addi sp,sp,-32 + 800183bc: 00113c23 sd ra,24(sp) + 800183c0: 00a13423 sd a0,8(sp) + 800183c4: 001b4797 auipc a5,0x1b4 + 800183c8: ae078b23 sb zero,-1290(a5) # 801cbeba <_ZL5delay> + 800183cc: eb9ff0ef jal ra,80018284 <_ZL4Syncv> + 800183d0: 00813503 ld a0,8(sp) + 800183d4: 01813083 ld ra,24(sp) + 800183d8: 02010113 addi sp,sp,32 + 800183dc: a84f806f j 80010660 <_Z6CartBRj> + +00000000800183e0 <_Z14Mapper175_InitP8CartInfo>: + 800183e0: 00000797 auipc a5,0x0 + 800183e4: f5c78793 addi a5,a5,-164 # 8001833c <_ZL9M175Powerv> + 800183e8: 00f53023 sd a5,0(a0) # a000 <_entry_offset+0xa000> + 800183ec: 00000797 auipc a5,0x0 + 800183f0: f1878793 addi a5,a5,-232 # 80018304 <_ZL12StateRestorei> + 800183f4: 00000693 li a3,0 + 800183f8: 00000613 li a2,0 + 800183fc: fff00593 li a1,-1 + 80018400: 00032517 auipc a0,0x32 + 80018404: 6f850513 addi a0,a0,1784 # 8004aaf8 <_ZL9StateRegs> + 80018408: 001b4717 auipc a4,0x1b4 + 8001840c: 24f73823 sd a5,592(a4) # 801cc658 + 80018410: c01e706f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080018414 <_ZL4Syncv>: + 80018414: fe010113 addi sp,sp,-32 + 80018418: 00913423 sd s1,8(sp) + 8001841c: 001b4497 auipc s1,0x1b4 + 80018420: aa848493 addi s1,s1,-1368 # 801cbec4 <_ZL4mirr> + 80018424: 0004c503 lbu a0,0(s1) + 80018428: 00113c23 sd ra,24(sp) + 8001842c: 00813823 sd s0,16(sp) + 80018430: c19f80ef jal ra,80011048 <_Z9setmirrori> + 80018434: 001b4597 auipc a1,0x1b4 + 80018438: a915c583 lbu a1,-1391(a1) # 801cbec5 <_ZL4preg> + 8001843c: 00008537 lui a0,0x8 + 80018440: 819f80ef jal ra,80010c58 <_Z8setprg16jj> + 80018444: fff00593 li a1,-1 + 80018448: 0000c537 lui a0,0xc + 8001844c: 80df80ef jal ra,80010c58 <_Z8setprg16jj> + 80018450: 001b4417 auipc s0,0x1b4 + 80018454: a7040413 addi s0,s0,-1424 # 801cbec0 <_ZL4creg> + 80018458: 00044583 lbu a1,0(s0) + 8001845c: 00000513 li a0,0 + 80018460: a65f80ef jal ra,80010ec4 <_Z7setchr2jj> + 80018464: 00144583 lbu a1,1(s0) + 80018468: 00001537 lui a0,0x1 + 8001846c: 80050513 addi a0,a0,-2048 # 800 <_entry_offset+0x800> + 80018470: a55f80ef jal ra,80010ec4 <_Z7setchr2jj> + 80018474: 00244583 lbu a1,2(s0) + 80018478: 00001537 lui a0,0x1 + 8001847c: a49f80ef jal ra,80010ec4 <_Z7setchr2jj> + 80018480: 00344583 lbu a1,3(s0) + 80018484: 00002537 lui a0,0x2 + 80018488: 80050513 addi a0,a0,-2048 # 1800 <_entry_offset+0x1800> + 8001848c: a39f80ef jal ra,80010ec4 <_Z7setchr2jj> + 80018490: 0004c783 lbu a5,0(s1) + 80018494: 00200713 li a4,2 + 80018498: 04e78e63 beq a5,a4,800184f4 <_ZL4Syncv+0xe0> + 8001849c: 02f76063 bltu a4,a5,800184bc <_ZL4Syncv+0xa8> + 800184a0: 00000513 li a0,0 + 800184a4: 02078c63 beqz a5,800184dc <_ZL4Syncv+0xc8> + 800184a8: 01013403 ld s0,16(sp) + 800184ac: 01813083 ld ra,24(sp) + 800184b0: 00813483 ld s1,8(sp) + 800184b4: 02010113 addi sp,sp,32 + 800184b8: b91f806f j 80011048 <_Z9setmirrori> + 800184bc: 00300713 li a4,3 + 800184c0: 00300513 li a0,3 + 800184c4: fee782e3 beq a5,a4,800184a8 <_ZL4Syncv+0x94> + 800184c8: 01813083 ld ra,24(sp) + 800184cc: 01013403 ld s0,16(sp) + 800184d0: 00813483 ld s1,8(sp) + 800184d4: 02010113 addi sp,sp,32 + 800184d8: 00008067 ret + 800184dc: 01013403 ld s0,16(sp) + 800184e0: 01813083 ld ra,24(sp) + 800184e4: 00813483 ld s1,8(sp) + 800184e8: 00100513 li a0,1 + 800184ec: 02010113 addi sp,sp,32 + 800184f0: b59f806f j 80011048 <_Z9setmirrori> + 800184f4: 01013403 ld s0,16(sp) + 800184f8: 01813083 ld ra,24(sp) + 800184fc: 00813483 ld s1,8(sp) + 80018500: 00200513 li a0,2 + 80018504: 02010113 addi sp,sp,32 + 80018508: b41f806f j 80011048 <_Z9setmirrori> + +000000008001850c <_ZL12StateRestorei>: + 8001850c: f09ff06f j 80018414 <_ZL4Syncv> + +0000000080018510 <_ZL8M67Powerv>: + 80018510: ff010113 addi sp,sp,-16 + 80018514: 00113423 sd ra,8(sp) + 80018518: 00813023 sd s0,0(sp) + 8001851c: 001b4797 auipc a5,0x1b4 + 80018520: 9a078723 sb zero,-1618(a5) # 801cbeca <_ZL9suntoggle> + 80018524: 00010437 lui s0,0x10 + 80018528: eedff0ef jal ra,80018414 <_ZL4Syncv> + 8001852c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80018530: ffff8617 auipc a2,0xffff8 + 80018534: 13060613 addi a2,a2,304 # 80010660 <_Z6CartBRj> + 80018538: 00008537 lui a0,0x8 + 8001853c: 4e01b0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80018540: fff40593 addi a1,s0,-1 + 80018544: 00013403 ld s0,0(sp) + 80018548: 00813083 ld ra,8(sp) + 8001854c: 00000617 auipc a2,0x0 + 80018550: 01460613 addi a2,a2,20 # 80018560 <_ZL8M67Writejh> + 80018554: 00008537 lui a0,0x8 + 80018558: 01010113 addi sp,sp,16 + 8001855c: 5cc1b06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080018560 <_ZL8M67Writejh>: + 80018560: 00010737 lui a4,0x10 + 80018564: 80070713 addi a4,a4,-2048 # f800 <_entry_offset+0xf800> + 80018568: 00e57533 and a0,a0,a4 + 8001856c: 0000c7b7 lui a5,0xc + 80018570: 0af50663 beq a0,a5,8001861c <_ZL8M67Writejh+0xbc> + 80018574: 02a7e463 bltu a5,a0,8001859c <_ZL8M67Writejh+0x3c> + 80018578: 0000b737 lui a4,0xb + 8001857c: 80070713 addi a4,a4,-2048 # a800 <_entry_offset+0xa800> + 80018580: 0ee50e63 beq a0,a4,8001867c <_ZL8M67Writejh+0x11c> + 80018584: 02a77c63 bgeu a4,a0,800185bc <_ZL8M67Writejh+0x5c> + 80018588: 80078793 addi a5,a5,-2048 # b800 <_entry_offset+0xb800> + 8001858c: 08f51463 bne a0,a5,80018614 <_ZL8M67Writejh+0xb4> + 80018590: 001b4797 auipc a5,0x1b4 + 80018594: 92b789a3 sb a1,-1741(a5) # 801cbec3 <_ZL4creg+0x3> + 80018598: e7dff06f j 80018414 <_ZL4Syncv> + 8001859c: 0000f7b7 lui a5,0xf + 800185a0: 80078793 addi a5,a5,-2048 # e800 <_entry_offset+0xe800> + 800185a4: 0cf50463 beq a0,a5,8001866c <_ZL8M67Writejh+0x10c> + 800185a8: 02a7fc63 bgeu a5,a0,800185e0 <_ZL8M67Writejh+0x80> + 800185ac: 06e51663 bne a0,a4,80018618 <_ZL8M67Writejh+0xb8> + 800185b0: 001b4797 auipc a5,0x1b4 + 800185b4: 90b78aa3 sb a1,-1771(a5) # 801cbec5 <_ZL4preg> + 800185b8: e5dff06f j 80018414 <_ZL4Syncv> + 800185bc: 000097b7 lui a5,0x9 + 800185c0: 80078793 addi a5,a5,-2048 # 8800 <_entry_offset+0x8800> + 800185c4: 08f50e63 beq a0,a5,80018660 <_ZL8M67Writejh+0x100> + 800185c8: 0000a7b7 lui a5,0xa + 800185cc: 80078793 addi a5,a5,-2048 # 9800 <_entry_offset+0x9800> + 800185d0: 0af51c63 bne a0,a5,80018688 <_ZL8M67Writejh+0x128> + 800185d4: 001b4797 auipc a5,0x1b4 + 800185d8: 8eb786a3 sb a1,-1811(a5) # 801cbec1 <_ZL4creg+0x1> + 800185dc: e39ff06f j 80018414 <_ZL4Syncv> + 800185e0: 0000d7b7 lui a5,0xd + 800185e4: 80078793 addi a5,a5,-2048 # c800 <_entry_offset+0xc800> + 800185e8: 02f50a63 beq a0,a5,8001861c <_ZL8M67Writejh+0xbc> + 800185ec: 0000e7b7 lui a5,0xe + 800185f0: 80078793 addi a5,a5,-2048 # d800 <_entry_offset+0xd800> + 800185f4: 08f51c63 bne a0,a5,8001868c <_ZL8M67Writejh+0x12c> + 800185f8: 0105f593 andi a1,a1,16 + 800185fc: 00100513 li a0,1 + 80018600: 001b4797 auipc a5,0x1b4 + 80018604: 8c078523 sb zero,-1846(a5) # 801cbeca <_ZL9suntoggle> + 80018608: 001b4797 auipc a5,0x1b4 + 8001860c: 8ab789a3 sb a1,-1869(a5) # 801cbebb <_ZL4IRQa> + 80018610: f40e806f j 80000d50 <_Z12X6502_IRQEndi> + 80018614: 00008067 ret + 80018618: 00008067 ret + 8001861c: 001b4697 auipc a3,0x1b4 + 80018620: 8ae68693 addi a3,a3,-1874 # 801cbeca <_ZL9suntoggle> + 80018624: 0006c783 lbu a5,0(a3) + 80018628: 001b4517 auipc a0,0x1b4 + 8001862c: 89e50513 addi a0,a0,-1890 # 801cbec6 <_ZL8IRQCount> + 80018630: 00055803 lhu a6,0(a0) + 80018634: 0017c613 xori a2,a5,1 + 80018638: 0037971b slliw a4,a5,0x3 + 8001863c: 0ff00793 li a5,255 + 80018640: 00e797bb sllw a5,a5,a4 + 80018644: 0036171b slliw a4,a2,0x3 + 80018648: 0107f7b3 and a5,a5,a6 + 8001864c: 00e595bb sllw a1,a1,a4 + 80018650: 00b7e5b3 or a1,a5,a1 + 80018654: 00b51023 sh a1,0(a0) + 80018658: 00c68023 sb a2,0(a3) + 8001865c: 00008067 ret + 80018660: 001b4797 auipc a5,0x1b4 + 80018664: 86b78023 sb a1,-1952(a5) # 801cbec0 <_ZL4creg> + 80018668: dadff06f j 80018414 <_ZL4Syncv> + 8001866c: 0035f593 andi a1,a1,3 + 80018670: 001b4797 auipc a5,0x1b4 + 80018674: 84b78a23 sb a1,-1964(a5) # 801cbec4 <_ZL4mirr> + 80018678: d9dff06f j 80018414 <_ZL4Syncv> + 8001867c: 001b4797 auipc a5,0x1b4 + 80018680: 84b78323 sb a1,-1978(a5) # 801cbec2 <_ZL4creg+0x2> + 80018684: d91ff06f j 80018414 <_ZL4Syncv> + 80018688: 00008067 ret + 8001868c: 00008067 ret + +0000000080018690 <_Z6M67IRQi>: + 80018690: 001b4797 auipc a5,0x1b4 + 80018694: 82b7c783 lbu a5,-2005(a5) # 801cbebb <_ZL4IRQa> + 80018698: 04078063 beqz a5,800186d8 <_Z6M67IRQi+0x48> + 8001869c: ff010113 addi sp,sp,-16 + 800186a0: 00813023 sd s0,0(sp) + 800186a4: 001b4417 auipc s0,0x1b4 + 800186a8: 82240413 addi s0,s0,-2014 # 801cbec6 <_ZL8IRQCount> + 800186ac: 00045783 lhu a5,0(s0) + 800186b0: 00113423 sd ra,8(sp) + 800186b4: 40a7853b subw a0,a5,a0 + 800186b8: 0105151b slliw a0,a0,0x10 + 800186bc: 4105551b sraiw a0,a0,0x10 + 800186c0: 00a41023 sh a0,0(s0) + 800186c4: 00a05c63 blez a0,800186dc <_Z6M67IRQi+0x4c> + 800186c8: 00813083 ld ra,8(sp) + 800186cc: 00013403 ld s0,0(sp) + 800186d0: 01010113 addi sp,sp,16 + 800186d4: 00008067 ret + 800186d8: 00008067 ret + 800186dc: 00100513 li a0,1 + 800186e0: e58e80ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 800186e4: 001b3797 auipc a5,0x1b3 + 800186e8: 7c078ba3 sb zero,2007(a5) # 801cbebb <_ZL4IRQa> + 800186ec: fff00793 li a5,-1 + 800186f0: 00813083 ld ra,8(sp) + 800186f4: 00f41023 sh a5,0(s0) + 800186f8: 00013403 ld s0,0(sp) + 800186fc: 01010113 addi sp,sp,16 + 80018700: 00008067 ret + +0000000080018704 <_Z13Mapper67_InitP8CartInfo>: + 80018704: 00000797 auipc a5,0x0 + 80018708: e0c78793 addi a5,a5,-500 # 80018510 <_ZL8M67Powerv> + 8001870c: 00f53023 sd a5,0(a0) + 80018710: 00000797 auipc a5,0x0 + 80018714: f8078793 addi a5,a5,-128 # 80018690 <_Z6M67IRQi> + 80018718: 001b3717 auipc a4,0x1b3 + 8001871c: 42f73423 sd a5,1064(a4) # 801cbb40 + 80018720: 00000797 auipc a5,0x0 + 80018724: dec78793 addi a5,a5,-532 # 8001850c <_ZL12StateRestorei> + 80018728: 00000693 li a3,0 + 8001872c: 00000613 li a2,0 + 80018730: fff00593 li a1,-1 + 80018734: 00032517 auipc a0,0x32 + 80018738: 40c50513 addi a0,a0,1036 # 8004ab40 <_ZL9StateRegs> + 8001873c: 001b4717 auipc a4,0x1b4 + 80018740: f0f73e23 sd a5,-228(a4) # 801cc658 + 80018744: 8cde706f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080018748 <_ZL4Syncv>: + 80018748: 000075b7 lui a1,0x7 + 8001874c: ff010113 addi sp,sp,-16 + 80018750: 00000613 li a2,0 + 80018754: 80058593 addi a1,a1,-2048 # 6800 <_entry_offset+0x6800> + 80018758: 01000513 li a0,16 + 8001875c: 00113423 sd ra,8(sp) + 80018760: 00813023 sd s0,0(sp) + 80018764: fa9f70ef jal ra,8001070c <_Z8setprg2rijj> + 80018768: 001b3417 auipc s0,0x1b3 + 8001876c: 77040413 addi s0,s0,1904 # 801cbed8 <_ZL4regs> + 80018770: 00044583 lbu a1,0(s0) + 80018774: 00008537 lui a0,0x8 + 80018778: b24f80ef jal ra,80010a9c <_Z7setprg8jj> + 8001877c: 00144583 lbu a1,1(s0) + 80018780: 0000a537 lui a0,0xa + 80018784: b18f80ef jal ra,80010a9c <_Z7setprg8jj> + 80018788: 00244583 lbu a1,2(s0) + 8001878c: 0000c537 lui a0,0xc + 80018790: b0cf80ef jal ra,80010a9c <_Z7setprg8jj> + 80018794: 00344583 lbu a1,3(s0) + 80018798: 0000e537 lui a0,0xe + 8001879c: b00f80ef jal ra,80010a9c <_Z7setprg8jj> + 800187a0: 00444583 lbu a1,4(s0) + 800187a4: 00000513 li a0,0 + 800187a8: f1cf80ef jal ra,80010ec4 <_Z7setchr2jj> + 800187ac: 00544583 lbu a1,5(s0) + 800187b0: 00001537 lui a0,0x1 + 800187b4: 80050513 addi a0,a0,-2048 # 800 <_entry_offset+0x800> + 800187b8: f0cf80ef jal ra,80010ec4 <_Z7setchr2jj> + 800187bc: 00644583 lbu a1,6(s0) + 800187c0: 00001537 lui a0,0x1 + 800187c4: f00f80ef jal ra,80010ec4 <_Z7setchr2jj> + 800187c8: 00744583 lbu a1,7(s0) + 800187cc: 00013403 ld s0,0(sp) + 800187d0: 00813083 ld ra,8(sp) + 800187d4: 00002537 lui a0,0x2 + 800187d8: 80050513 addi a0,a0,-2048 # 1800 <_entry_offset+0x1800> + 800187dc: 01010113 addi sp,sp,16 + 800187e0: ee4f806f j 80010ec4 <_Z7setchr2jj> + +00000000800187e4 <_ZL12StateRestorei>: + 800187e4: f65ff06f j 80018748 <_ZL4Syncv> + +00000000800187e8 <_ZL9M246Writejh>: + 800187e8: 00757793 andi a5,a0,7 + 800187ec: 001b3517 auipc a0,0x1b3 + 800187f0: 6ec50513 addi a0,a0,1772 # 801cbed8 <_ZL4regs> + 800187f4: 00f50533 add a0,a0,a5 + 800187f8: 00b50023 sb a1,0(a0) + 800187fc: f4dff06f j 80018748 <_ZL4Syncv> + +0000000080018800 <_ZL9M246Closev>: + 80018800: 001b3517 auipc a0,0x1b3 + 80018804: 6d053503 ld a0,1744(a0) # 801cbed0 <_ZL4WRAM> + 80018808: 02050263 beqz a0,8001882c <_ZL9M246Closev+0x2c> + 8001880c: ff010113 addi sp,sp,-16 + 80018810: 00113423 sd ra,8(sp) + 80018814: d2df90ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80018818: 00813083 ld ra,8(sp) + 8001881c: 001b3797 auipc a5,0x1b3 + 80018820: 6a07ba23 sd zero,1716(a5) # 801cbed0 <_ZL4WRAM> + 80018824: 01010113 addi sp,sp,16 + 80018828: 00008067 ret + 8001882c: 001b3797 auipc a5,0x1b3 + 80018830: 6a07b223 sd zero,1700(a5) # 801cbed0 <_ZL4WRAM> + 80018834: 00008067 ret + +0000000080018838 <_ZL9M246Powerv>: + 80018838: ff010113 addi sp,sp,-16 + 8001883c: fff00793 li a5,-1 + 80018840: 00113423 sd ra,8(sp) + 80018844: 00813023 sd s0,0(sp) + 80018848: 001b3717 auipc a4,0x1b3 + 8001884c: 68f72823 sw a5,1680(a4) # 801cbed8 <_ZL4regs> + 80018850: ef9ff0ef jal ra,80018748 <_ZL4Syncv> + 80018854: 000065b7 lui a1,0x6 + 80018858: 00000617 auipc a2,0x0 + 8001885c: f9060613 addi a2,a2,-112 # 800187e8 <_ZL9M246Writejh> + 80018860: 7ff58593 addi a1,a1,2047 # 67ff <_entry_offset+0x67ff> + 80018864: 00006537 lui a0,0x6 + 80018868: 2c01b0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001886c: 00007437 lui s0,0x7 + 80018870: fff40593 addi a1,s0,-1 # 6fff <_entry_offset+0x6fff> + 80018874: 80040513 addi a0,s0,-2048 + 80018878: ffff8617 auipc a2,0xffff8 + 8001887c: de860613 addi a2,a2,-536 # 80010660 <_Z6CartBRj> + 80018880: 19c1b0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80018884: fff40593 addi a1,s0,-1 + 80018888: 80040513 addi a0,s0,-2048 + 8001888c: ffff8617 auipc a2,0xffff8 + 80018890: e0060613 addi a2,a2,-512 # 8001068c <_Z6CartBWjh> + 80018894: 2941b0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80018898: 000105b7 lui a1,0x10 + 8001889c: ffff8617 auipc a2,0xffff8 + 800188a0: dc460613 addi a2,a2,-572 # 80010660 <_Z6CartBRj> + 800188a4: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 800188a8: 00008537 lui a0,0x8 + 800188ac: 1701b0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800188b0: 00013403 ld s0,0(sp) + 800188b4: 00813083 ld ra,8(sp) + 800188b8: 001b3517 auipc a0,0x1b3 + 800188bc: 62852503 lw a0,1576(a0) # 801cbee0 <_ZL8WRAMSIZE> + 800188c0: 001b3617 auipc a2,0x1b3 + 800188c4: 61063603 ld a2,1552(a2) # 801cbed0 <_ZL4WRAM> + 800188c8: 000065b7 lui a1,0x6 + 800188cc: 00a5551b srliw a0,a0,0xa + 800188d0: 01010113 addi sp,sp,16 + 800188d4: f40e706f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +00000000800188d8 <_Z14Mapper246_InitP8CartInfo>: + 800188d8: fe010113 addi sp,sp,-32 + 800188dc: 00113c23 sd ra,24(sp) + 800188e0: 00813823 sd s0,16(sp) + 800188e4: 00913423 sd s1,8(sp) + 800188e8: 01213023 sd s2,0(sp) + 800188ec: 00000797 auipc a5,0x0 + 800188f0: f4c78793 addi a5,a5,-180 # 80018838 <_ZL9M246Powerv> + 800188f4: 00f53023 sd a5,0(a0) + 800188f8: 00000797 auipc a5,0x0 + 800188fc: f0878793 addi a5,a5,-248 # 80018800 <_ZL9M246Closev> + 80018900: 00f53823 sd a5,16(a0) + 80018904: 00000797 auipc a5,0x0 + 80018908: ee078793 addi a5,a5,-288 # 800187e4 <_ZL12StateRestorei> + 8001890c: 00050413 mv s0,a0 + 80018910: 001b4717 auipc a4,0x1b4 + 80018914: d4f73423 sd a5,-696(a4) # 801cc658 + 80018918: 00001537 lui a0,0x1 + 8001891c: 000017b7 lui a5,0x1 + 80018920: 8007879b addiw a5,a5,-2048 + 80018924: 001b3497 auipc s1,0x1b3 + 80018928: 5bc48493 addi s1,s1,1468 # 801cbee0 <_ZL8WRAMSIZE> + 8001892c: 80050513 addi a0,a0,-2048 # 800 <_entry_offset+0x800> + 80018930: 00f4a023 sw a5,0(s1) + 80018934: b39f90ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80018938: 0004a603 lw a2,0(s1) + 8001893c: 00050593 mv a1,a0 + 80018940: 001b3917 auipc s2,0x1b3 + 80018944: 59090913 addi s2,s2,1424 # 801cbed0 <_ZL4WRAM> + 80018948: 00100693 li a3,1 + 8001894c: 01000513 li a0,16 + 80018950: 00b93023 sd a1,0(s2) + 80018954: ba1f70ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80018958: 0004a583 lw a1,0(s1) + 8001895c: 00093503 ld a0,0(s2) + 80018960: 0002d697 auipc a3,0x2d + 80018964: 9c868693 addi a3,a3,-1592 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80018968: 00000613 li a2,0 + 8001896c: ea4e70ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80018970: 04c42783 lw a5,76(s0) + 80018974: 00078a63 beqz a5,80018988 <_Z14Mapper246_InitP8CartInfo+0xb0> + 80018978: 00093703 ld a4,0(s2) + 8001897c: 0004a783 lw a5,0(s1) + 80018980: 00e43c23 sd a4,24(s0) + 80018984: 02f42c23 sw a5,56(s0) + 80018988: 01013403 ld s0,16(sp) + 8001898c: 01813083 ld ra,24(sp) + 80018990: 00813483 ld s1,8(sp) + 80018994: 00013903 ld s2,0(sp) + 80018998: 00000693 li a3,0 + 8001899c: 00000613 li a2,0 + 800189a0: fff00593 li a1,-1 + 800189a4: 00032517 auipc a0,0x32 + 800189a8: 25c50513 addi a0,a0,604 # 8004ac00 <_ZL9StateRegs> + 800189ac: 02010113 addi sp,sp,32 + 800189b0: e60e706f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800189b4 <_ZL4Syncv>: + 800189b4: fd010113 addi sp,sp,-48 + 800189b8: 01313423 sd s3,8(sp) + 800189bc: 001b3997 auipc s3,0x1b3 + 800189c0: 53498993 addi s3,s3,1332 # 801cbef0 <_ZL4mirr> + 800189c4: 0009c503 lbu a0,0(s3) + 800189c8: 02113423 sd ra,40(sp) + 800189cc: 02813023 sd s0,32(sp) + 800189d0: 00913c23 sd s1,24(sp) + 800189d4: 01213823 sd s2,16(sp) + 800189d8: 01413023 sd s4,0(sp) + 800189dc: 001b3917 auipc s2,0x1b3 + 800189e0: 51c90913 addi s2,s2,1308 # 801cbef8 <_ZL4preg> + 800189e4: e64f80ef jal ra,80011048 <_Z9setmirrori> + 800189e8: 00094583 lbu a1,0(s2) + 800189ec: 00008537 lui a0,0x8 + 800189f0: 001b3417 auipc s0,0x1b3 + 800189f4: 4f840413 addi s0,s0,1272 # 801cbee8 <_ZL4creg> + 800189f8: 8a4f80ef jal ra,80010a9c <_Z7setprg8jj> + 800189fc: 00194583 lbu a1,1(s2) + 80018a00: 0000a537 lui a0,0xa + 80018a04: 000014b7 lui s1,0x1 + 80018a08: 894f80ef jal ra,80010a9c <_Z7setprg8jj> + 80018a0c: 00294583 lbu a1,2(s2) + 80018a10: 0000c537 lui a0,0xc + 80018a14: 00002a37 lui s4,0x2 + 80018a18: 884f80ef jal ra,80010a9c <_Z7setprg8jj> + 80018a1c: fff00593 li a1,-1 + 80018a20: 0000e537 lui a0,0xe + 80018a24: 878f80ef jal ra,80010a9c <_Z7setprg8jj> + 80018a28: 00044583 lbu a1,0(s0) + 80018a2c: 00000513 li a0,0 + 80018a30: c74f80ef jal ra,80010ea4 <_Z7setchr1jj> + 80018a34: 00144583 lbu a1,1(s0) + 80018a38: 40000513 li a0,1024 + 80018a3c: c68f80ef jal ra,80010ea4 <_Z7setchr1jj> + 80018a40: 00244583 lbu a1,2(s0) + 80018a44: 80048513 addi a0,s1,-2048 # 800 <_entry_offset+0x800> + 80018a48: c5cf80ef jal ra,80010ea4 <_Z7setchr1jj> + 80018a4c: 00344583 lbu a1,3(s0) + 80018a50: c0048513 addi a0,s1,-1024 + 80018a54: c50f80ef jal ra,80010ea4 <_Z7setchr1jj> + 80018a58: 00444583 lbu a1,4(s0) + 80018a5c: 00001537 lui a0,0x1 + 80018a60: c44f80ef jal ra,80010ea4 <_Z7setchr1jj> + 80018a64: 00544583 lbu a1,5(s0) + 80018a68: 40048513 addi a0,s1,1024 + 80018a6c: c38f80ef jal ra,80010ea4 <_Z7setchr1jj> + 80018a70: 00644583 lbu a1,6(s0) + 80018a74: 800a0513 addi a0,s4,-2048 # 1800 <_entry_offset+0x1800> + 80018a78: c2cf80ef jal ra,80010ea4 <_Z7setchr1jj> + 80018a7c: 00744583 lbu a1,7(s0) + 80018a80: c00a0513 addi a0,s4,-1024 + 80018a84: c20f80ef jal ra,80010ea4 <_Z7setchr1jj> + 80018a88: 02013403 ld s0,32(sp) + 80018a8c: 0009c503 lbu a0,0(s3) + 80018a90: 02813083 ld ra,40(sp) + 80018a94: 01813483 ld s1,24(sp) + 80018a98: 01013903 ld s2,16(sp) + 80018a9c: 00813983 ld s3,8(sp) + 80018aa0: 00013a03 ld s4,0(sp) + 80018aa4: 03010113 addi sp,sp,48 + 80018aa8: da0f806f j 80011048 <_Z9setmirrori> + +0000000080018aac <_ZL12StateRestorei>: + 80018aac: f09ff06f j 800189b4 <_ZL4Syncv> + +0000000080018ab0 <_ZL8M65Powerv>: + 80018ab0: ff010113 addi sp,sp,-16 + 80018ab4: ffe00793 li a5,-2 + 80018ab8: 00113423 sd ra,8(sp) + 80018abc: 00813023 sd s0,0(sp) + 80018ac0: 001b3717 auipc a4,0x1b3 + 80018ac4: 42f70d23 sb a5,1082(a4) # 801cbefa <_ZL4preg+0x2> + 80018ac8: 00010437 lui s0,0x10 + 80018acc: ee9ff0ef jal ra,800189b4 <_ZL4Syncv> + 80018ad0: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80018ad4: ffff8617 auipc a2,0xffff8 + 80018ad8: b8c60613 addi a2,a2,-1140 # 80010660 <_Z6CartBRj> + 80018adc: 00008537 lui a0,0x8 + 80018ae0: 73d1a0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80018ae4: fff40593 addi a1,s0,-1 + 80018ae8: 00013403 ld s0,0(sp) + 80018aec: 00813083 ld ra,8(sp) + 80018af0: 00000617 auipc a2,0x0 + 80018af4: 01460613 addi a2,a2,20 # 80018b04 <_ZL8M65Writejh> + 80018af8: 00008537 lui a0,0x8 + 80018afc: 01010113 addi sp,sp,16 + 80018b00: 0281b06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080018b04 <_ZL8M65Writejh>: + 80018b04: 0000b7b7 lui a5,0xb + 80018b08: 00778713 addi a4,a5,7 # b007 <_entry_offset+0xb007> + 80018b0c: 04a76a63 bltu a4,a0,80018b60 <_ZL8M65Writejh+0x5c> + 80018b10: 08f57663 bgeu a0,a5,80018b9c <_ZL8M65Writejh+0x98> + 80018b14: 000097b7 lui a5,0x9 + 80018b18: 00678713 addi a4,a5,6 # 9006 <_entry_offset+0x9006> + 80018b1c: 06a76663 bltu a4,a0,80018b88 <_ZL8M65Writejh+0x84> + 80018b20: 04a7fa63 bgeu a5,a0,80018b74 <_ZL8M65Writejh+0x70> + 80018b24: ffff77b7 lui a5,0xffff7 + 80018b28: fff7879b addiw a5,a5,-1 + 80018b2c: 00f5053b addw a0,a0,a5 + 80018b30: 0005071b sext.w a4,a0 + 80018b34: 00500793 li a5,5 + 80018b38: 0ae7e063 bltu a5,a4,80018bd8 <_ZL8M65Writejh+0xd4> + 80018b3c: 02051513 slli a0,a0,0x20 + 80018b40: 02055513 srli a0,a0,0x20 + 80018b44: 0002d717 auipc a4,0x2d + 80018b48: a1470713 addi a4,a4,-1516 # 80045558 <_ZZL8SetInputvE3moo+0x708> + 80018b4c: 00251513 slli a0,a0,0x2 + 80018b50: 00e50533 add a0,a0,a4 + 80018b54: 00052783 lw a5,0(a0) # 8000 <_entry_offset+0x8000> + 80018b58: 00e787b3 add a5,a5,a4 + 80018b5c: 00078067 jr a5 # ffffffffffff7000 <_end+0xffffffff7fe22000> + 80018b60: 0000c7b7 lui a5,0xc + 80018b64: 06f51c63 bne a0,a5,80018bdc <_ZL8M65Writejh+0xd8> + 80018b68: 001b3797 auipc a5,0x1b3 + 80018b6c: 38b78923 sb a1,914(a5) # 801cbefa <_ZL4preg+0x2> + 80018b70: e45ff06f j 800189b4 <_ZL4Syncv> + 80018b74: 000087b7 lui a5,0x8 + 80018b78: 06f51663 bne a0,a5,80018be4 <_ZL8M65Writejh+0xe0> + 80018b7c: 001b3797 auipc a5,0x1b3 + 80018b80: 36b78e23 sb a1,892(a5) # 801cbef8 <_ZL4preg> + 80018b84: e31ff06f j 800189b4 <_ZL4Syncv> + 80018b88: 0000a7b7 lui a5,0xa + 80018b8c: 04f51a63 bne a0,a5,80018be0 <_ZL8M65Writejh+0xdc> + 80018b90: 001b3797 auipc a5,0x1b3 + 80018b94: 36b784a3 sb a1,873(a5) # 801cbef9 <_ZL4preg+0x1> + 80018b98: e1dff06f j 800189b4 <_ZL4Syncv> + 80018b9c: ffff57b7 lui a5,0xffff5 + 80018ba0: fff7879b addiw a5,a5,-1 + 80018ba4: 00f5053b addw a0,a0,a5 + 80018ba8: 0005071b sext.w a4,a0 + 80018bac: 00600793 li a5,6 + 80018bb0: 0ee7e863 bltu a5,a4,80018ca0 <_ZL8M65Writejh+0x19c> + 80018bb4: 02051513 slli a0,a0,0x20 + 80018bb8: 02055513 srli a0,a0,0x20 + 80018bbc: 0002d717 auipc a4,0x2d + 80018bc0: 9b470713 addi a4,a4,-1612 # 80045570 <_ZZL8SetInputvE3moo+0x720> + 80018bc4: 00251513 slli a0,a0,0x2 + 80018bc8: 00e50533 add a0,a0,a4 + 80018bcc: 00052783 lw a5,0(a0) + 80018bd0: 00e787b3 add a5,a5,a4 + 80018bd4: 00078067 jr a5 # ffffffffffff5000 <_end+0xffffffff7fe20000> + 80018bd8: 00008067 ret + 80018bdc: 00008067 ret + 80018be0: 00008067 ret + 80018be4: 00008067 ret + 80018be8: 001b3797 auipc a5,0x1b3 + 80018bec: 30b782a3 sb a1,773(a5) # 801cbeed <_ZL4creg+0x5> + 80018bf0: dc5ff06f j 800189b4 <_ZL4Syncv> + 80018bf4: 0075d59b srliw a1,a1,0x7 + 80018bf8: 0015c593 xori a1,a1,1 + 80018bfc: 001b3797 auipc a5,0x1b3 + 80018c00: 2eb78a23 sb a1,756(a5) # 801cbef0 <_ZL4mirr> + 80018c04: db1ff06f j 800189b4 <_ZL4Syncv> + 80018c08: f805f593 andi a1,a1,-128 + 80018c0c: 00100513 li a0,1 + 80018c10: 001b3797 auipc a5,0x1b3 + 80018c14: 2cb78a23 sb a1,724(a5) # 801cbee4 <_ZL4IRQa> + 80018c18: 938e806f j 80000d50 <_Z12X6502_IRQEndi> + 80018c1c: 001b3797 auipc a5,0x1b3 + 80018c20: 2e27d783 lhu a5,738(a5) # 801cbefe <_ZL8IRQLatch> + 80018c24: 001b3717 auipc a4,0x1b3 + 80018c28: 2cf71c23 sh a5,728(a4) # 801cbefc <_ZL8IRQCount> + 80018c2c: 00008067 ret + 80018c30: 001b3717 auipc a4,0x1b3 + 80018c34: 2ce70713 addi a4,a4,718 # 801cbefe <_ZL8IRQLatch> + 80018c38: 00074783 lbu a5,0(a4) + 80018c3c: 00859593 slli a1,a1,0x8 + 80018c40: 00b7e5b3 or a1,a5,a1 + 80018c44: 00b71023 sh a1,0(a4) + 80018c48: 00008067 ret + 80018c4c: 001b3797 auipc a5,0x1b3 + 80018c50: 2ab78923 sb a1,690(a5) # 801cbefe <_ZL8IRQLatch> + 80018c54: 00008067 ret + 80018c58: 001b3797 auipc a5,0x1b3 + 80018c5c: 28b78ba3 sb a1,663(a5) # 801cbeef <_ZL4creg+0x7> + 80018c60: d55ff06f j 800189b4 <_ZL4Syncv> + 80018c64: 001b3797 auipc a5,0x1b3 + 80018c68: 28b78523 sb a1,650(a5) # 801cbeee <_ZL4creg+0x6> + 80018c6c: d49ff06f j 800189b4 <_ZL4Syncv> + 80018c70: 001b3797 auipc a5,0x1b3 + 80018c74: 26b78ca3 sb a1,633(a5) # 801cbee9 <_ZL4creg+0x1> + 80018c78: d3dff06f j 800189b4 <_ZL4Syncv> + 80018c7c: 001b3797 auipc a5,0x1b3 + 80018c80: 26b78723 sb a1,622(a5) # 801cbeea <_ZL4creg+0x2> + 80018c84: d31ff06f j 800189b4 <_ZL4Syncv> + 80018c88: 001b3797 auipc a5,0x1b3 + 80018c8c: 26b781a3 sb a1,611(a5) # 801cbeeb <_ZL4creg+0x3> + 80018c90: d25ff06f j 800189b4 <_ZL4Syncv> + 80018c94: 001b3797 auipc a5,0x1b3 + 80018c98: 24b78c23 sb a1,600(a5) # 801cbeec <_ZL4creg+0x4> + 80018c9c: d19ff06f j 800189b4 <_ZL4Syncv> + 80018ca0: 001b3797 auipc a5,0x1b3 + 80018ca4: 24b78423 sb a1,584(a5) # 801cbee8 <_ZL4creg> + 80018ca8: d0dff06f j 800189b4 <_ZL4Syncv> + +0000000080018cac <_Z6M65IRQi>: + 80018cac: 001b3797 auipc a5,0x1b3 + 80018cb0: 2387c783 lbu a5,568(a5) # 801cbee4 <_ZL4IRQa> + 80018cb4: 04078263 beqz a5,80018cf8 <_Z6M65IRQi+0x4c> + 80018cb8: ff010113 addi sp,sp,-16 + 80018cbc: 00813023 sd s0,0(sp) + 80018cc0: 001b3417 auipc s0,0x1b3 + 80018cc4: 23c40413 addi s0,s0,572 # 801cbefc <_ZL8IRQCount> + 80018cc8: 00045783 lhu a5,0(s0) + 80018ccc: 00113423 sd ra,8(sp) + 80018cd0: ffc00713 li a4,-4 + 80018cd4: 40a7853b subw a0,a5,a0 + 80018cd8: 0105151b slliw a0,a0,0x10 + 80018cdc: 4105551b sraiw a0,a0,0x10 + 80018ce0: 00a41023 sh a0,0(s0) + 80018ce4: 00e54c63 blt a0,a4,80018cfc <_Z6M65IRQi+0x50> + 80018ce8: 00813083 ld ra,8(sp) + 80018cec: 00013403 ld s0,0(sp) + 80018cf0: 01010113 addi sp,sp,16 + 80018cf4: 00008067 ret + 80018cf8: 00008067 ret + 80018cfc: 00100513 li a0,1 + 80018d00: 838e80ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 80018d04: 001b3797 auipc a5,0x1b3 + 80018d08: 1e078023 sb zero,480(a5) # 801cbee4 <_ZL4IRQa> + 80018d0c: fff00793 li a5,-1 + 80018d10: 00813083 ld ra,8(sp) + 80018d14: 00f41023 sh a5,0(s0) + 80018d18: 00013403 ld s0,0(sp) + 80018d1c: 01010113 addi sp,sp,16 + 80018d20: 00008067 ret + +0000000080018d24 <_Z13Mapper65_InitP8CartInfo>: + 80018d24: 00000797 auipc a5,0x0 + 80018d28: d8c78793 addi a5,a5,-628 # 80018ab0 <_ZL8M65Powerv> + 80018d2c: 00f53023 sd a5,0(a0) + 80018d30: 00000797 auipc a5,0x0 + 80018d34: f7c78793 addi a5,a5,-132 # 80018cac <_Z6M65IRQi> + 80018d38: 001b3717 auipc a4,0x1b3 + 80018d3c: e0f73423 sd a5,-504(a4) # 801cbb40 + 80018d40: 00000797 auipc a5,0x0 + 80018d44: d6c78793 addi a5,a5,-660 # 80018aac <_ZL12StateRestorei> + 80018d48: 00000693 li a3,0 + 80018d4c: 00000613 li a2,0 + 80018d50: fff00593 li a1,-1 + 80018d54: 00032517 auipc a0,0x32 + 80018d58: edc50513 addi a0,a0,-292 # 8004ac30 <_ZL9StateRegs> + 80018d5c: 001b4717 auipc a4,0x1b4 + 80018d60: 8ef73e23 sd a5,-1796(a4) # 801cc658 + 80018d64: aace706f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080018d68 <_ZL4Syncv>: + 80018d68: ff010113 addi sp,sp,-16 + 80018d6c: 001b3797 auipc a5,0x1b3 + 80018d70: 1947c783 lbu a5,404(a5) # 801cbf00 <_ZL4bank> + 80018d74: 00813023 sd s0,0(sp) + 80018d78: 4027d41b sraiw s0,a5,0x2 + 80018d7c: 001b3597 auipc a1,0x1b3 + 80018d80: 1855c583 lbu a1,389(a1) # 801cbf01 <_ZL4preg> + 80018d84: 0087f793 andi a5,a5,8 + 80018d88: 00447413 andi s0,s0,4 + 80018d8c: 00f46433 or s0,s0,a5 + 80018d90: 0035f593 andi a1,a1,3 + 80018d94: 0085e5b3 or a1,a1,s0 + 80018d98: 00008537 lui a0,0x8 + 80018d9c: 00113423 sd ra,8(sp) + 80018da0: eb9f70ef jal ra,80010c58 <_Z8setprg16jj> + 80018da4: 0000c537 lui a0,0xc + 80018da8: 00346593 ori a1,s0,3 + 80018dac: eadf70ef jal ra,80010c58 <_Z8setprg16jj> + 80018db0: 00013403 ld s0,0(sp) + 80018db4: 00813083 ld ra,8(sp) + 80018db8: 00000513 li a0,0 + 80018dbc: 01010113 addi sp,sp,16 + 80018dc0: 944f806f j 80010f04 <_Z7setchr8j> + +0000000080018dc4 <_ZL12StateRestorei>: + 80018dc4: fa5ff06f j 80018d68 <_ZL4Syncv> + +0000000080018dc8 <_ZL13M232WritePregjh>: + 80018dc8: 001b3797 auipc a5,0x1b3 + 80018dcc: 12b78ca3 sb a1,313(a5) # 801cbf01 <_ZL4preg> + 80018dd0: f99ff06f j 80018d68 <_ZL4Syncv> + +0000000080018dd4 <_ZL13M232WriteBankjh>: + 80018dd4: 001b3797 auipc a5,0x1b3 + 80018dd8: 12b78623 sb a1,300(a5) # 801cbf00 <_ZL4bank> + 80018ddc: f8dff06f j 80018d68 <_ZL4Syncv> + +0000000080018de0 <_ZL9M232Powerv>: + 80018de0: ff010113 addi sp,sp,-16 + 80018de4: 00113423 sd ra,8(sp) + 80018de8: 00813023 sd s0,0(sp) + 80018dec: 001b3797 auipc a5,0x1b3 + 80018df0: 10078aa3 sb zero,277(a5) # 801cbf01 <_ZL4preg> + 80018df4: 001b3797 auipc a5,0x1b3 + 80018df8: 10078623 sb zero,268(a5) # 801cbf00 <_ZL4bank> + 80018dfc: f6dff0ef jal ra,80018d68 <_ZL4Syncv> + 80018e00: 0000c5b7 lui a1,0xc + 80018e04: 00000617 auipc a2,0x0 + 80018e08: fd060613 addi a2,a2,-48 # 80018dd4 <_ZL13M232WriteBankjh> + 80018e0c: fff58593 addi a1,a1,-1 # bfff <_entry_offset+0xbfff> + 80018e10: 00008537 lui a0,0x8 + 80018e14: 5151a0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80018e18: 00010437 lui s0,0x10 + 80018e1c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80018e20: 00000617 auipc a2,0x0 + 80018e24: fa860613 addi a2,a2,-88 # 80018dc8 <_ZL13M232WritePregjh> + 80018e28: 0000c537 lui a0,0xc + 80018e2c: 4fd1a0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80018e30: fff40593 addi a1,s0,-1 + 80018e34: 00013403 ld s0,0(sp) + 80018e38: 00813083 ld ra,8(sp) + 80018e3c: ffff8617 auipc a2,0xffff8 + 80018e40: 82460613 addi a2,a2,-2012 # 80010660 <_Z6CartBRj> + 80018e44: 00008537 lui a0,0x8 + 80018e48: 01010113 addi sp,sp,16 + 80018e4c: 3d11a06f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080018e50 <_Z14Mapper232_InitP8CartInfo>: + 80018e50: ff010113 addi sp,sp,-16 + 80018e54: 00113423 sd ra,8(sp) + 80018e58: 00000797 auipc a5,0x0 + 80018e5c: f8878793 addi a5,a5,-120 # 80018de0 <_ZL9M232Powerv> + 80018e60: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 80018e64: 00000693 li a3,0 + 80018e68: 00000613 li a2,0 + 80018e6c: fff00593 li a1,-1 + 80018e70: 00032517 auipc a0,0x32 + 80018e74: e6850513 addi a0,a0,-408 # 8004acd8 <_ZL9StateRegs> + 80018e78: 998e70ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80018e7c: 00813083 ld ra,8(sp) + 80018e80: 00000797 auipc a5,0x0 + 80018e84: f4478793 addi a5,a5,-188 # 80018dc4 <_ZL12StateRestorei> + 80018e88: 001b3717 auipc a4,0x1b3 + 80018e8c: 7cf73823 sd a5,2000(a4) # 801cc658 + 80018e90: 01010113 addi sp,sp,16 + 80018e94: 00008067 ret + +0000000080018e98 <_ZL6ExtDevj>: + 80018e98: 00300513 li a0,3 + 80018e9c: 00008067 ret + +0000000080018ea0 <_ZL4Syncv>: + 80018ea0: 001b3597 auipc a1,0x1b3 + 80018ea4: 0625c583 lbu a1,98(a1) # 801cbf02 <_ZL6latche> + 80018ea8: 02058263 beqz a1,80018ecc <_ZL4Syncv+0x2c> + 80018eac: 0105f793 andi a5,a1,16 + 80018eb0: 0075f593 andi a1,a1,7 + 80018eb4: 00078663 beqz a5,80018ec0 <_ZL4Syncv+0x20> + 80018eb8: 00008537 lui a0,0x8 + 80018ebc: d9df706f j 80010c58 <_Z8setprg16jj> + 80018ec0: 0085e593 ori a1,a1,8 + 80018ec4: 00008537 lui a0,0x8 + 80018ec8: d91f706f j 80010c58 <_Z8setprg16jj> + 80018ecc: 001b3597 auipc a1,0x1b3 + 80018ed0: d945a583 lw a1,-620(a1) # 801cbc60 + 80018ed4: 0045d59b srliw a1,a1,0x4 + 80018ed8: 0075859b addiw a1,a1,7 + 80018edc: 00008537 lui a0,0x8 + 80018ee0: d79f706f j 80010c58 <_Z8setprg16jj> + +0000000080018ee4 <_ZL12StateRestorei>: + 80018ee4: fbdff06f j 80018ea0 <_ZL4Syncv> + +0000000080018ee8 <_ZL9M188Writejh>: + 80018ee8: 001b3797 auipc a5,0x1b3 + 80018eec: 00b78d23 sb a1,26(a5) # 801cbf02 <_ZL6latche> + 80018ef0: fb1ff06f j 80018ea0 <_ZL4Syncv> + +0000000080018ef4 <_ZL5Powerv>: + 80018ef4: ff010113 addi sp,sp,-16 + 80018ef8: 00113423 sd ra,8(sp) + 80018efc: 00813023 sd s0,0(sp) + 80018f00: 001b3797 auipc a5,0x1b3 + 80018f04: 00078123 sb zero,2(a5) # 801cbf02 <_ZL6latche> + 80018f08: f99ff0ef jal ra,80018ea0 <_ZL4Syncv> + 80018f0c: 00000513 li a0,0 + 80018f10: ff5f70ef jal ra,80010f04 <_Z7setchr8j> + 80018f14: 00700593 li a1,7 + 80018f18: 0000c537 lui a0,0xc + 80018f1c: d3df70ef jal ra,80010c58 <_Z8setprg16jj> + 80018f20: 000085b7 lui a1,0x8 + 80018f24: 00000617 auipc a2,0x0 + 80018f28: f7460613 addi a2,a2,-140 # 80018e98 <_ZL6ExtDevj> + 80018f2c: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80018f30: 00006537 lui a0,0x6 + 80018f34: 2e91a0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80018f38: 00010437 lui s0,0x10 + 80018f3c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80018f40: ffff7617 auipc a2,0xffff7 + 80018f44: 72060613 addi a2,a2,1824 # 80010660 <_Z6CartBRj> + 80018f48: 00008537 lui a0,0x8 + 80018f4c: 2d11a0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80018f50: fff40593 addi a1,s0,-1 + 80018f54: 00013403 ld s0,0(sp) + 80018f58: 00813083 ld ra,8(sp) + 80018f5c: 00000617 auipc a2,0x0 + 80018f60: f8c60613 addi a2,a2,-116 # 80018ee8 <_ZL9M188Writejh> + 80018f64: 00008537 lui a0,0x8 + 80018f68: 01010113 addi sp,sp,16 + 80018f6c: 3bd1a06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080018f70 <_Z14Mapper188_InitP8CartInfo>: + 80018f70: 00000797 auipc a5,0x0 + 80018f74: f8478793 addi a5,a5,-124 # 80018ef4 <_ZL5Powerv> + 80018f78: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 80018f7c: 00000797 auipc a5,0x0 + 80018f80: f6878793 addi a5,a5,-152 # 80018ee4 <_ZL12StateRestorei> + 80018f84: 0002c697 auipc a3,0x2c + 80018f88: 3e468693 addi a3,a3,996 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 80018f8c: 00000613 li a2,0 + 80018f90: 00100593 li a1,1 + 80018f94: 001b3517 auipc a0,0x1b3 + 80018f98: f6e50513 addi a0,a0,-146 # 801cbf02 <_ZL6latche> + 80018f9c: 001b3717 auipc a4,0x1b3 + 80018fa0: 6af73e23 sd a5,1724(a4) # 801cc658 + 80018fa4: 86ce706f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080018fa8 <_ZL5AWRAMj>: + 80018fa8: ffffa7b7 lui a5,0xffffa + 80018fac: 00a787bb addw a5,a5,a0 + 80018fb0: 02079793 slli a5,a5,0x20 + 80018fb4: 000ac517 auipc a0,0xac + 80018fb8: 0bc50513 addi a0,a0,188 # 800c5070 <_ZL4WRAM> + 80018fbc: 0207d793 srli a5,a5,0x20 + 80018fc0: 00f507b3 add a5,a0,a5 + 80018fc4: 0007c503 lbu a0,0(a5) # ffffffffffffa000 <_end+0xffffffff7fe25000> + 80018fc8: 00008067 ret + +0000000080018fcc <_ZL5BWRAMjh>: + 80018fcc: ffffa7b7 lui a5,0xffffa + 80018fd0: 00a7853b addw a0,a5,a0 + 80018fd4: 02051513 slli a0,a0,0x20 + 80018fd8: 02055513 srli a0,a0,0x20 + 80018fdc: 000ac797 auipc a5,0xac + 80018fe0: 09478793 addi a5,a5,148 # 800c5070 <_ZL4WRAM> + 80018fe4: 00a78533 add a0,a5,a0 + 80018fe8: 00b50023 sb a1,0(a0) + 80018fec: 00008067 ret + +0000000080018ff0 <_ZL14Namco_Read4800j>: + 80018ff0: 001b3697 auipc a3,0x1b3 + 80018ff4: f2968693 addi a3,a3,-215 # 801cbf19 <_ZL5dopol> + 80018ff8: 0006c783 lbu a5,0(a3) + 80018ffc: 000ac717 auipc a4,0xac + 80019000: ff470713 addi a4,a4,-12 # 800c4ff0 <_ZL4IRAM> + 80019004: 07f7f613 andi a2,a5,127 + 80019008: 00c70733 add a4,a4,a2 + 8001900c: 0187961b slliw a2,a5,0x18 + 80019010: 4186561b sraiw a2,a2,0x18 + 80019014: 00074503 lbu a0,0(a4) + 80019018: 00064463 bltz a2,80019020 <_ZL14Namco_Read4800j+0x30> + 8001901c: 00008067 ret + 80019020: 0017879b addiw a5,a5,1 + 80019024: f807e793 ori a5,a5,-128 + 80019028: 00f68023 sb a5,0(a3) + 8001902c: 00008067 ret + +0000000080019030 <_ZL14Namco_Read5000j>: + 80019030: 001b3517 auipc a0,0x1b3 + 80019034: f0854503 lbu a0,-248(a0) # 801cbf38 <_ZL8IRQCount> + 80019038: 00008067 ret + +000000008001903c <_ZL14Namco_Read5800j>: + 8001903c: 001b3517 auipc a0,0x1b3 + 80019040: efc55503 lhu a0,-260(a0) # 801cbf38 <_ZL8IRQCount> + 80019044: 00855513 srli a0,a0,0x8 + 80019048: 00008067 ret + +000000008001904c <_ZL8FixCacheii>: + 8001904c: 4035579b sraiw a5,a0,0x3 + 80019050: 00400713 li a4,4 + 80019054: 00757513 andi a0,a0,7 + 80019058: 0077f793 andi a5,a5,7 + 8001905c: 0ce50263 beq a0,a4,80019120 <_ZL8FixCacheii+0xd4> + 80019060: 04a74063 blt a4,a0,800190a0 <_ZL8FixCacheii+0x54> + 80019064: 08050c63 beqz a0,800190fc <_ZL8FixCacheii+0xb0> + 80019068: 00200713 li a4,2 + 8001906c: 10e51863 bne a0,a4,8001917c <_ZL8FixCacheii+0x130> + 80019070: 000ae717 auipc a4,0xae + 80019074: 04070713 addi a4,a4,64 # 800c70b0 <_ZL9FreqCache> + 80019078: 00279793 slli a5,a5,0x2 + 8001907c: 00f707b3 add a5,a4,a5 + 80019080: 0007a703 lw a4,0(a5) + 80019084: ffff06b7 lui a3,0xffff0 + 80019088: 0ff68693 addi a3,a3,255 # ffffffffffff00ff <_end+0xffffffff7fe1b0ff> + 8001908c: 00d77733 and a4,a4,a3 + 80019090: 0085959b slliw a1,a1,0x8 + 80019094: 00b765b3 or a1,a4,a1 + 80019098: 00b7a023 sw a1,0(a5) + 8001909c: 00008067 ret + 800190a0: 00700713 li a4,7 + 800190a4: 04e51a63 bne a0,a4,800190f8 <_ZL8FixCacheii+0xac> + 800190a8: 00f5f593 andi a1,a1,15 + 800190ac: 0025971b slliw a4,a1,0x2 + 800190b0: 00b706bb addw a3,a4,a1 + 800190b4: 0046971b slliw a4,a3,0x4 + 800190b8: 40d7073b subw a4,a4,a3 + 800190bc: 0037171b slliw a4,a4,0x3 + 800190c0: 00b7073b addw a4,a4,a1 + 800190c4: 0027171b slliw a4,a4,0x2 + 800190c8: 40b7073b subw a4,a4,a1 + 800190cc: 0047169b slliw a3,a4,0x4 + 800190d0: 40e6873b subw a4,a3,a4 + 800190d4: 0027171b slliw a4,a4,0x2 + 800190d8: 40b705bb subw a1,a4,a1 + 800190dc: 00279793 slli a5,a5,0x2 + 800190e0: 000ae717 auipc a4,0xae + 800190e4: fb070713 addi a4,a4,-80 # 800c7090 <_ZL8EnvCache> + 800190e8: 00f707b3 add a5,a4,a5 + 800190ec: 0025959b slliw a1,a1,0x2 + 800190f0: 00b7a023 sw a1,0(a5) + 800190f4: 00008067 ret + 800190f8: 00008067 ret + 800190fc: 000ae717 auipc a4,0xae + 80019100: fb470713 addi a4,a4,-76 # 800c70b0 <_ZL9FreqCache> + 80019104: 00279793 slli a5,a5,0x2 + 80019108: 00f707b3 add a5,a4,a5 + 8001910c: 0007a703 lw a4,0(a5) + 80019110: f0077713 andi a4,a4,-256 + 80019114: 00b765b3 or a1,a4,a1 + 80019118: 00b7a023 sw a1,0(a5) + 8001911c: 00008067 ret + 80019120: 00279793 slli a5,a5,0x2 + 80019124: 000ae617 auipc a2,0xae + 80019128: f8c60613 addi a2,a2,-116 # 800c70b0 <_ZL9FreqCache> + 8001912c: 00f60633 add a2,a2,a5 + 80019130: 4025d71b sraiw a4,a1,0x2 + 80019134: 00062683 lw a3,0(a2) + 80019138: 00777513 andi a0,a4,7 + 8001913c: fffd0737 lui a4,0xfffd0 + 80019140: fff70713 addi a4,a4,-1 # fffffffffffcffff <_end+0xffffffff7fdfafff> + 80019144: 00e6f6b3 and a3,a3,a4 + 80019148: 0105959b slliw a1,a1,0x10 + 8001914c: 00030737 lui a4,0x30 + 80019150: 00e5f5b3 and a1,a1,a4 + 80019154: 00800713 li a4,8 + 80019158: 00b6e5b3 or a1,a3,a1 + 8001915c: 40a7073b subw a4,a4,a0 + 80019160: 000ac697 auipc a3,0xac + 80019164: e7068693 addi a3,a3,-400 # 800c4fd0 <_ZL11LengthCache> + 80019168: 00f687b3 add a5,a3,a5 + 8001916c: 0027171b slliw a4,a4,0x2 + 80019170: 00b62023 sw a1,0(a2) + 80019174: 00e7a023 sw a4,0(a5) + 80019178: 00008067 ret + 8001917c: 00008067 ret + +0000000080019180 <_ZL6SyncHQi>: + 80019180: 001b3797 auipc a5,0x1b3 + 80019184: d8a7aa23 sw a0,-620(a5) # 801cbf14 <_ZL4CVBC> + 80019188: 00008067 ret + +000000008001918c <_ZL14DoNamcoSoundHQv>: + 8001918c: f5010113 addi sp,sp,-176 + 80019190: 0a813023 sd s0,160(sp) + 80019194: 000ac417 auipc s0,0xac + 80019198: e5c40413 addi s0,s0,-420 # 800c4ff0 <_ZL4IRAM> + 8001919c: 07f44e03 lbu t3,127(s0) + 800191a0: 001b3797 auipc a5,0x1b3 + 800191a4: d7478793 addi a5,a5,-652 # 801cbf14 <_ZL4CVBC> + 800191a8: 09213823 sd s2,144(sp) + 800191ac: 404e5e1b sraiw t3,t3,0x4 + 800191b0: 007e7913 andi s2,t3,7 + 800191b4: 09313423 sd s3,136(sp) + 800191b8: 0007a983 lw s3,0(a5) + 800191bc: 0019079b addiw a5,s2,1 + 800191c0: 0047991b slliw s2,a5,0x4 + 800191c4: 40f907bb subw a5,s2,a5 + 800191c8: 09413023 sd s4,128(sp) + 800191cc: 001b3717 auipc a4,0x1b3 + 800191d0: a0472703 lw a4,-1532(a4) # 801cbbd0 + 800191d4: 001b3a17 auipc s4,0x1b3 + 800191d8: 974a2a03 lw s4,-1676(s4) # 801cbb48 + 800191dc: 00ea073b addw a4,s4,a4 + 800191e0: fffe4e13 not t3,t3 + 800191e4: 00f13c23 sd a5,24(sp) + 800191e8: 0019979b slliw a5,s3,0x1 + 800191ec: 07813023 sd s8,96(sp) + 800191f0: 05a13823 sd s10,80(sp) + 800191f4: 05b13423 sd s11,72(sp) + 800191f8: 0a113423 sd ra,168(sp) + 800191fc: 08913c23 sd s1,152(sp) + 80019200: 07513c23 sd s5,120(sp) + 80019204: 07613823 sd s6,112(sp) + 80019208: 07713423 sd s7,104(sp) + 8001920c: 05913c23 sd s9,88(sp) + 80019210: 02e12e23 sw a4,60(sp) + 80019214: 007e7913 andi s2,t3,7 + 80019218: 02f13823 sd a5,48(sp) + 8001921c: 00171c1b slliw s8,a4,0x1 + 80019220: 00040993 mv s3,s0 + 80019224: 000aea17 auipc s4,0xae + 80019228: eaca0a13 addi s4,s4,-340 # 800c70d0 <_ZL9PlayIndex> + 8001922c: 00700d93 li s11,7 + 80019230: 00043d17 auipc s10,0x43 + 80019234: 798d0d13 addi s10,s10,1944 # 8005c9c8 + 80019238: 0180006f j 80019250 <_ZL14DoNamcoSoundHQv+0xc4> + 8001923c: fffd8d93 addi s11,s11,-1 + 80019240: 000d879b sext.w a5,s11 + 80019244: ff898993 addi s3,s3,-8 + 80019248: ffca0a13 addi s4,s4,-4 + 8001924c: 1b27ca63 blt a5,s2,80019400 <_ZL14DoNamcoSoundHQv+0x274> + 80019250: 07c9c783 lbu a5,124(s3) + 80019254: 0e07f793 andi a5,a5,224 + 80019258: fe0782e3 beqz a5,8001923c <_ZL14DoNamcoSoundHQv+0xb0> + 8001925c: 07f9c783 lbu a5,127(s3) + 80019260: 00f7f793 andi a5,a5,15 + 80019264: fc078ce3 beqz a5,8001923c <_ZL14DoNamcoSoundHQv+0xb0> + 80019268: 020d9b93 slli s7,s11,0x20 + 8001926c: 020bdb93 srli s7,s7,0x20 + 80019270: 000ae717 auipc a4,0xae + 80019274: e6070713 addi a4,a4,-416 # 800c70d0 <_ZL9PlayIndex> + 80019278: 002b9793 slli a5,s7,0x2 + 8001927c: 00f707b3 add a5,a4,a5 + 80019280: 0007a783 lw a5,0(a5) + 80019284: 07e9c483 lbu s1,126(s3) + 80019288: 002d9713 slli a4,s11,0x2 + 8001928c: 0117d79b srliw a5,a5,0x11 + 80019290: 009787bb addw a5,a5,s1 + 80019294: 0017d59b srliw a1,a5,0x1 + 80019298: 000ae617 auipc a2,0xae + 8001929c: e1860613 addi a2,a2,-488 # 800c70b0 <_ZL9FreqCache> + 800192a0: 07f5f593 andi a1,a1,127 + 800192a4: 000ae697 auipc a3,0xae + 800192a8: dcc68693 addi a3,a3,-564 # 800c7070 <_ZL6vcount> + 800192ac: 00e686b3 add a3,a3,a4 + 800192b0: 00e60333 add t1,a2,a4 + 800192b4: 00b405b3 add a1,s0,a1 + 800192b8: 000ae617 auipc a2,0xae + 800192bc: dd860613 addi a2,a2,-552 # 800c7090 <_ZL8EnvCache> + 800192c0: 00e60833 add a6,a2,a4 + 800192c4: 0005c503 lbu a0,0(a1) + 800192c8: 0006a283 lw t0,0(a3) + 800192cc: 02d13023 sd a3,32(sp) + 800192d0: 000ac617 auipc a2,0xac + 800192d4: d0060613 addi a2,a2,-768 # 800c4fd0 <_ZL11LengthCache> + 800192d8: 00032683 lw a3,0(t1) + 800192dc: 00e60733 add a4,a2,a4 + 800192e0: 00072b03 lw s6,0(a4) + 800192e4: 0004871b sext.w a4,s1 + 800192e8: 0005059b sext.w a1,a0 + 800192ec: 0017f793 andi a5,a5,1 + 800192f0: 00d13423 sd a3,8(sp) + 800192f4: 00e13823 sd a4,16(sp) + 800192f8: 00082a83 lw s5,0(a6) + 800192fc: 0045d593 srli a1,a1,0x4 + 80019300: 00079463 bnez a5,80019308 <_ZL14DoNamcoSoundHQv+0x17c> + 80019304: 00f57593 andi a1,a0,15 + 80019308: 000a8513 mv a0,s5 + 8001930c: 02513423 sd t0,40(sp) + 80019310: 2ad200ef jal ra,80039dbc <__muldi3> + 80019314: 03013483 ld s1,48(sp) + 80019318: 02813283 ld t0,40(sp) + 8001931c: 0105551b srliw a0,a0,0x10 + 80019320: 0d84d263 bge s1,s8,800193e4 <_ZL14DoNamcoSoundHQv+0x258> + 80019324: 002b9f93 slli t6,s7,0x2 + 80019328: 000ae797 auipc a5,0xae + 8001932c: da878793 addi a5,a5,-600 # 800c70d0 <_ZL9PlayIndex> + 80019330: 011b1c9b slliw s9,s6,0x11 + 80019334: 01f78bb3 add s7,a5,t6 + 80019338: 0100006f j 80019348 <_ZL14DoNamcoSoundHQv+0x1bc> + 8001933c: 0014849b addiw s1,s1,1 + 80019340: fff2829b addiw t0,t0,-1 + 80019344: 0b848063 beq s1,s8,800193e4 <_ZL14DoNamcoSoundHQv+0x258> + 80019348: 4014d793 srai a5,s1,0x1 + 8001934c: 00279793 slli a5,a5,0x2 + 80019350: 00fd07b3 add a5,s10,a5 + 80019354: 0007a583 lw a1,0(a5) + 80019358: 00a585bb addw a1,a1,a0 + 8001935c: 00b7a023 sw a1,0(a5) + 80019360: fc029ee3 bnez t0,8001933c <_ZL14DoNamcoSoundHQv+0x1b0> + 80019364: 01ca2783 lw a5,28(s4) + 80019368: 00813703 ld a4,8(sp) + 8001936c: 00e787bb addw a5,a5,a4 + 80019370: 00fa2e23 sw a5,28(s4) + 80019374: 0117d59b srliw a1,a5,0x11 + 80019378: 0165ee63 bltu a1,s6,80019394 <_ZL14DoNamcoSoundHQv+0x208> + 8001937c: 419787bb subw a5,a5,s9 + 80019380: 0117d59b srliw a1,a5,0x11 + 80019384: 0007851b sext.w a0,a5 + 80019388: 419787bb subw a5,a5,s9 + 8001938c: ff65fae3 bgeu a1,s6,80019380 <_ZL14DoNamcoSoundHQv+0x1f4> + 80019390: 00aa2e23 sw a0,28(s4) + 80019394: 000ba783 lw a5,0(s7) + 80019398: 01013703 ld a4,16(sp) + 8001939c: 0117d79b srliw a5,a5,0x11 + 800193a0: 00e787bb addw a5,a5,a4 + 800193a4: 0017d59b srliw a1,a5,0x1 + 800193a8: 07f5f593 andi a1,a1,127 + 800193ac: 00b405b3 add a1,s0,a1 + 800193b0: 0005c503 lbu a0,0(a1) + 800193b4: 0017f793 andi a5,a5,1 + 800193b8: 0005059b sext.w a1,a0 + 800193bc: 0045d593 srli a1,a1,0x4 + 800193c0: 00079463 bnez a5,800193c8 <_ZL14DoNamcoSoundHQv+0x23c> + 800193c4: 00f57593 andi a1,a0,15 + 800193c8: 000a8513 mv a0,s5 + 800193cc: 1f1200ef jal ra,80039dbc <__muldi3> + 800193d0: 01813283 ld t0,24(sp) + 800193d4: 0014849b addiw s1,s1,1 + 800193d8: 0105551b srliw a0,a0,0x10 + 800193dc: fff2829b addiw t0,t0,-1 + 800193e0: f78494e3 bne s1,s8,80019348 <_ZL14DoNamcoSoundHQv+0x1bc> + 800193e4: 02013783 ld a5,32(sp) + 800193e8: fffd8d93 addi s11,s11,-1 + 800193ec: ff898993 addi s3,s3,-8 + 800193f0: 0057a023 sw t0,0(a5) + 800193f4: 000d879b sext.w a5,s11 + 800193f8: ffca0a13 addi s4,s4,-4 + 800193fc: e527dae3 bge a5,s2,80019250 <_ZL14DoNamcoSoundHQv+0xc4> + 80019400: 03c12703 lw a4,60(sp) + 80019404: 0a813083 ld ra,168(sp) + 80019408: 0a013403 ld s0,160(sp) + 8001940c: 001b3797 auipc a5,0x1b3 + 80019410: b0878793 addi a5,a5,-1272 # 801cbf14 <_ZL4CVBC> + 80019414: 00e7a023 sw a4,0(a5) + 80019418: 09813483 ld s1,152(sp) + 8001941c: 09013903 ld s2,144(sp) + 80019420: 08813983 ld s3,136(sp) + 80019424: 08013a03 ld s4,128(sp) + 80019428: 07813a83 ld s5,120(sp) + 8001942c: 07013b03 ld s6,112(sp) + 80019430: 06813b83 ld s7,104(sp) + 80019434: 06013c03 ld s8,96(sp) + 80019438: 05813c83 ld s9,88(sp) + 8001943c: 05013d03 ld s10,80(sp) + 80019440: 04813d83 ld s11,72(sp) + 80019444: 0b010113 addi sp,sp,176 + 80019448: 00008067 ret + +000000008001944c <_ZL11DoCHRRAMROMih>: + 8001944c: 4025571b sraiw a4,a0,0x2 + 80019450: 0067071b addiw a4,a4,6 + 80019454: 001b3797 auipc a5,0x1b3 + 80019458: ad47c783 lbu a5,-1324(a5) # 801cbf28 <_ZL6gorfus> + 8001945c: 40e7d7bb sraw a5,a5,a4 + 80019460: 001b3717 auipc a4,0x1b3 + 80019464: aa870713 addi a4,a4,-1368 # 801cbf08 <_ZL3CHR> + 80019468: 00a70733 add a4,a4,a0 + 8001946c: 0017f793 andi a5,a5,1 + 80019470: 001b3697 auipc a3,0x1b3 + 80019474: ab46a683 lw a3,-1356(a3) # 801cbf24 <_ZL5is210> + 80019478: 00b70023 sb a1,0(a4) + 8001947c: 00d7e7b3 or a5,a5,a3 + 80019480: 00079863 bnez a5,80019490 <_ZL11DoCHRRAMROMih+0x44> + 80019484: 0df00793 li a5,223 + 80019488: 00b7f463 bgeu a5,a1,80019490 <_ZL11DoCHRRAMROMih+0x44> + 8001948c: 00008067 ret + 80019490: 00a5151b slliw a0,a0,0xa + 80019494: a11f706f j 80010ea4 <_Z7setchr1jj> + +0000000080019498 <_ZL10SyncMirrorv>: + 80019498: 001b3797 auipc a5,0x1b3 + 8001949c: a887c783 lbu a5,-1400(a5) # 801cbf20 <_ZL5gorko> + 800194a0: 00200713 li a4,2 + 800194a4: 02e78463 beq a5,a4,800194cc <_ZL10SyncMirrorv+0x34> + 800194a8: 00f76863 bltu a4,a5,800194b8 <_ZL10SyncMirrorv+0x20> + 800194ac: 00078a63 beqz a5,800194c0 <_ZL10SyncMirrorv+0x28> + 800194b0: 00100513 li a0,1 + 800194b4: b95f706f j 80011048 <_Z9setmirrori> + 800194b8: 00300713 li a4,3 + 800194bc: 00e79663 bne a5,a4,800194c8 <_ZL10SyncMirrorv+0x30> + 800194c0: 00200513 li a0,2 + 800194c4: b85f706f j 80011048 <_Z9setmirrori> + 800194c8: 00008067 ret + 800194cc: 00000513 li a0,0 + 800194d0: b79f706f j 80011048 <_Z9setmirrori> + +00000000800194d4 <_ZL7SyncPRGv>: + 800194d4: ff010113 addi sp,sp,-16 + 800194d8: 00813023 sd s0,0(sp) + 800194dc: 001b3417 auipc s0,0x1b3 + 800194e0: a3440413 addi s0,s0,-1484 # 801cbf10 <_ZL3PRG> + 800194e4: 00044583 lbu a1,0(s0) + 800194e8: 00008537 lui a0,0x8 + 800194ec: 00113423 sd ra,8(sp) + 800194f0: dacf70ef jal ra,80010a9c <_Z7setprg8jj> + 800194f4: 00144583 lbu a1,1(s0) + 800194f8: 0000a537 lui a0,0xa + 800194fc: da0f70ef jal ra,80010a9c <_Z7setprg8jj> + 80019500: 00244583 lbu a1,2(s0) + 80019504: 0000c537 lui a0,0xc + 80019508: d94f70ef jal ra,80010a9c <_Z7setprg8jj> + 8001950c: 00013403 ld s0,0(sp) + 80019510: 00813083 ld ra,8(sp) + 80019514: 03f00593 li a1,63 + 80019518: 0000e537 lui a0,0xe + 8001951c: 01010113 addi sp,sp,16 + 80019520: d7cf706f j 80010a9c <_Z7setprg8jj> + +0000000080019524 <_ZL22Mapper210_StateRestorei>: + 80019524: fe010113 addi sp,sp,-32 + 80019528: 00813823 sd s0,16(sp) + 8001952c: 00913423 sd s1,8(sp) + 80019530: 01213023 sd s2,0(sp) + 80019534: 00113c23 sd ra,24(sp) + 80019538: 001b3497 auipc s1,0x1b3 + 8001953c: 9d048493 addi s1,s1,-1584 # 801cbf08 <_ZL3CHR> + 80019540: f95ff0ef jal ra,800194d4 <_ZL7SyncPRGv> + 80019544: 00000413 li s0,0 + 80019548: 00800913 li s2,8 + 8001954c: 0004c583 lbu a1,0(s1) + 80019550: 00040513 mv a0,s0 + 80019554: 0014041b addiw s0,s0,1 + 80019558: ef5ff0ef jal ra,8001944c <_ZL11DoCHRRAMROMih> + 8001955c: 00148493 addi s1,s1,1 + 80019560: ff2416e3 bne s0,s2,8001954c <_ZL22Mapper210_StateRestorei+0x28> + 80019564: 01813083 ld ra,24(sp) + 80019568: 01013403 ld s0,16(sp) + 8001956c: 00813483 ld s1,8(sp) + 80019570: 00013903 ld s2,0(sp) + 80019574: 02010113 addi sp,sp,32 + 80019578: 00008067 ret + +000000008001957c <_ZL12DoNamcoSoundPii.isra.0>: + 8001957c: ff010113 addi sp,sp,-16 + 80019580: 12e00613 li a2,302 + 80019584: 0002c597 auipc a1,0x2c + 80019588: 00c58593 addi a1,a1,12 # 80045590 <_ZZL8SetInputvE3moo+0x740> + 8001958c: 00023517 auipc a0,0x23 + 80019590: 78450513 addi a0,a0,1924 # 8003cd10 <_etext+0x2c> + 80019594: 00113423 sd ra,8(sp) + 80019598: 7b1210ef jal ra,8003b548 + 8001959c: 00100513 li a0,1 + 800195a0: 7d4200ef jal ra,80039d74 + +00000000800195a4 <_ZL10NamcoSoundi>: + 800195a4: 001b2797 auipc a5,0x1b2 + 800195a8: 62c7a783 lw a5,1580(a5) # 801cbbd0 + 800195ac: 001b2517 auipc a0,0x1b2 + 800195b0: 59c52503 lw a0,1436(a0) # 801cbb48 + 800195b4: 00f5053b addw a0,a0,a5 + 800195b8: 0105151b slliw a0,a0,0x10 + 800195bc: 02051513 slli a0,a0,0x20 + 800195c0: ff010113 addi sp,sp,-16 + 800195c4: 001b2597 auipc a1,0x1b2 + 800195c8: 6085e583 lwu a1,1544(a1) # 801cbbcc + 800195cc: 02055513 srli a0,a0,0x20 + 800195d0: 00113423 sd ra,8(sp) + 800195d4: 055200ef jal ra,80039e28 <__udivdi3> + 800195d8: 001b3797 auipc a5,0x1b3 + 800195dc: 9447a783 lw a5,-1724(a5) # 801cbf1c <_ZL5dwave> + 800195e0: 0045551b srliw a0,a0,0x4 + 800195e4: 00a79c63 bne a5,a0,800195fc <_ZL10NamcoSoundi+0x58> + 800195e8: 00813083 ld ra,8(sp) + 800195ec: 001b3797 auipc a5,0x1b3 + 800195f0: 9207a823 sw zero,-1744(a5) # 801cbf1c <_ZL5dwave> + 800195f4: 01010113 addi sp,sp,16 + 800195f8: 00008067 ret + 800195fc: f81ff0ef jal ra,8001957c <_ZL12DoNamcoSoundPii.isra.0> + +0000000080019600 <_ZL14Mapper19_writejh>: + 80019600: 000107b7 lui a5,0x10 + 80019604: 80078793 addi a5,a5,-2048 # f800 <_entry_offset+0xf800> + 80019608: 00f57533 and a0,a0,a5 + 8001960c: ffff8737 lui a4,0xffff8 + 80019610: 00a7073b addw a4,a4,a0 + 80019614: 000046b7 lui a3,0x4 + 80019618: 0007061b sext.w a2,a4 + 8001961c: 80068693 addi a3,a3,-2048 # 3800 <_entry_offset+0x3800> + 80019620: 16c6f063 bgeu a3,a2,80019780 <_ZL14Mapper19_writejh+0x180> + 80019624: fd010113 addi sp,sp,-48 + 80019628: 01213823 sd s2,16(sp) + 8001962c: 02113423 sd ra,40(sp) + 80019630: 02813023 sd s0,32(sp) + 80019634: 00913c23 sd s1,24(sp) + 80019638: 01313423 sd s3,8(sp) + 8001963c: 0000e737 lui a4,0xe + 80019640: 00058913 mv s2,a1 + 80019644: 18e50a63 beq a0,a4,800197d8 <_ZL14Mapper19_writejh+0x1d8> + 80019648: 04a76863 bltu a4,a0,80019698 <_ZL14Mapper19_writejh+0x98> + 8001964c: 000057b7 lui a5,0x5 + 80019650: 12f50c63 beq a0,a5,80019788 <_ZL14Mapper19_writejh+0x188> + 80019654: 00006737 lui a4,0x6 + 80019658: 80070713 addi a4,a4,-2048 # 5800 <_entry_offset+0x5800> + 8001965c: 0ae51c63 bne a0,a4,80019714 <_ZL14Mapper19_writejh+0x114> + 80019660: 001b3697 auipc a3,0x1b3 + 80019664: 8d868693 addi a3,a3,-1832 # 801cbf38 <_ZL8IRQCount> + 80019668: 0006c603 lbu a2,0(a3) + 8001966c: 00008737 lui a4,0x8 + 80019670: 00859793 slli a5,a1,0x8 + 80019674: f0070713 addi a4,a4,-256 # 7f00 <_entry_offset+0x7f00> + 80019678: 00e7f7b3 and a5,a5,a4 + 8001967c: 00c7e7b3 or a5,a5,a2 + 80019680: f805f593 andi a1,a1,-128 + 80019684: 00f69023 sh a5,0(a3) + 80019688: 00100513 li a0,1 + 8001968c: 001b3797 auipc a5,0x1b3 + 80019690: 88b78623 sb a1,-1908(a5) # 801cbf18 <_ZL4IRQa> + 80019694: 1000006f j 80019794 <_ZL14Mapper19_writejh+0x194> + 80019698: 0000f737 lui a4,0xf + 8001969c: 10e50a63 beq a0,a4,800197b0 <_ZL14Mapper19_writejh+0x1b0> + 800196a0: 02f51463 bne a0,a5,800196c8 <_ZL14Mapper19_writejh+0xc8> + 800196a4: 001b3797 auipc a5,0x1b3 + 800196a8: 86b78aa3 sb a1,-1931(a5) # 801cbf19 <_ZL5dopol> + 800196ac: 02813083 ld ra,40(sp) + 800196b0: 02013403 ld s0,32(sp) + 800196b4: 01813483 ld s1,24(sp) + 800196b8: 01013903 ld s2,16(sp) + 800196bc: 00813983 ld s3,8(sp) + 800196c0: 03010113 addi sp,sp,48 + 800196c4: 00008067 ret + 800196c8: 80070713 addi a4,a4,-2048 # e800 <_entry_offset+0xe800> + 800196cc: fee510e3 bne a0,a4,800196ac <_ZL14Mapper19_writejh+0xac> + 800196d0: fc05f793 andi a5,a1,-64 + 800196d4: 001b3717 auipc a4,0x1b3 + 800196d8: 84f70a23 sb a5,-1964(a4) # 801cbf28 <_ZL6gorfus> + 800196dc: 001b3497 auipc s1,0x1b3 + 800196e0: 82c48493 addi s1,s1,-2004 # 801cbf08 <_ZL3CHR> + 800196e4: 00000413 li s0,0 + 800196e8: 00800993 li s3,8 + 800196ec: 0004c583 lbu a1,0(s1) + 800196f0: 00040513 mv a0,s0 + 800196f4: 0014041b addiw s0,s0,1 + 800196f8: d55ff0ef jal ra,8001944c <_ZL11DoCHRRAMROMih> + 800196fc: 00148493 addi s1,s1,1 + 80019700: ff3416e3 bne s0,s3,800196ec <_ZL14Mapper19_writejh+0xec> + 80019704: 03f97593 andi a1,s2,63 + 80019708: 001b3797 auipc a5,0x1b3 + 8001970c: 80b784a3 sb a1,-2039(a5) # 801cbf11 <_ZL3PRG+0x1> + 80019710: 0ac0006f j 800197bc <_ZL14Mapper19_writejh+0x1bc> + 80019714: 80078793 addi a5,a5,-2048 + 80019718: f8f51ae3 bne a0,a5,800196ac <_ZL14Mapper19_writejh+0xac> + 8001971c: 001b2497 auipc s1,0x1b2 + 80019720: 7fd48493 addi s1,s1,2045 # 801cbf19 <_ZL5dopol> + 80019724: 0004c403 lbu s0,0(s1) + 80019728: 04047793 andi a5,s0,64 + 8001972c: 02078263 beqz a5,80019750 <_ZL14Mapper19_writejh+0x150> + 80019730: 001af797 auipc a5,0x1af + 80019734: 5b078793 addi a5,a5,1456 # 801c8ce0 + 80019738: 03c7a703 lw a4,60(a5) + 8001973c: 0c071463 bnez a4,80019804 <_ZL14Mapper19_writejh+0x204> + 80019740: 00040513 mv a0,s0 + 80019744: 00090593 mv a1,s2 + 80019748: 905ff0ef jal ra,8001904c <_ZL8FixCacheii> + 8001974c: 0004c403 lbu s0,0(s1) + 80019750: 07f47713 andi a4,s0,127 + 80019754: 000ac797 auipc a5,0xac + 80019758: 89c78793 addi a5,a5,-1892 # 800c4ff0 <_ZL4IRAM> + 8001975c: 00e787b3 add a5,a5,a4 + 80019760: 01278023 sb s2,0(a5) + 80019764: 0184179b slliw a5,s0,0x18 + 80019768: 4187d79b sraiw a5,a5,0x18 + 8001976c: f407d0e3 bgez a5,800196ac <_ZL14Mapper19_writejh+0xac> + 80019770: 0014041b addiw s0,s0,1 + 80019774: f8046413 ori s0,s0,-128 + 80019778: 00848023 sb s0,0(s1) + 8001977c: f31ff06f j 800196ac <_ZL14Mapper19_writejh+0xac> + 80019780: 00b7551b srliw a0,a4,0xb + 80019784: cc9ff06f j 8001944c <_ZL11DoCHRRAMROMih> + 80019788: 00100513 li a0,1 + 8001978c: 001b2797 auipc a5,0x1b2 + 80019790: 7ab78623 sb a1,1964(a5) # 801cbf38 <_ZL8IRQCount> + 80019794: 02013403 ld s0,32(sp) + 80019798: 02813083 ld ra,40(sp) + 8001979c: 01813483 ld s1,24(sp) + 800197a0: 01013903 ld s2,16(sp) + 800197a4: 00813983 ld s3,8(sp) + 800197a8: 03010113 addi sp,sp,48 + 800197ac: da4e706f j 80000d50 <_Z12X6502_IRQEndi> + 800197b0: 03f5f593 andi a1,a1,63 + 800197b4: 001b2797 auipc a5,0x1b2 + 800197b8: 74b78f23 sb a1,1886(a5) # 801cbf12 <_ZL3PRG+0x2> + 800197bc: 02013403 ld s0,32(sp) + 800197c0: 02813083 ld ra,40(sp) + 800197c4: 01813483 ld s1,24(sp) + 800197c8: 01013903 ld s2,16(sp) + 800197cc: 00813983 ld s3,8(sp) + 800197d0: 03010113 addi sp,sp,48 + 800197d4: d01ff06f j 800194d4 <_ZL7SyncPRGv> + 800197d8: 03f5f793 andi a5,a1,63 + 800197dc: 001b2717 auipc a4,0x1b2 + 800197e0: 72f70a23 sb a5,1844(a4) # 801cbf10 <_ZL3PRG> + 800197e4: 001b2797 auipc a5,0x1b2 + 800197e8: 7407a783 lw a5,1856(a5) # 801cbf24 <_ZL5is210> + 800197ec: fc0788e3 beqz a5,800197bc <_ZL14Mapper19_writejh+0x1bc> + 800197f0: 4065d59b sraiw a1,a1,0x6 + 800197f4: 001b2797 auipc a5,0x1b2 + 800197f8: 72b78623 sb a1,1836(a5) # 801cbf20 <_ZL5gorko> + 800197fc: c9dff0ef jal ra,80019498 <_ZL10SyncMirrorv> + 80019800: fbdff06f j 800197bc <_ZL14Mapper19_writejh+0x1bc> + 80019804: 0407a783 lw a5,64(a5) + 80019808: 06f04863 bgtz a5,80019878 <_ZL14Mapper19_writejh+0x278> + 8001980c: 001b2797 auipc a5,0x1b2 + 80019810: 3c47a783 lw a5,964(a5) # 801cbbd0 + 80019814: 001b2517 auipc a0,0x1b2 + 80019818: 33452503 lw a0,820(a0) # 801cbb48 + 8001981c: 00f5053b addw a0,a0,a5 + 80019820: 0105151b slliw a0,a0,0x10 + 80019824: 02051513 slli a0,a0,0x20 + 80019828: 001b2597 auipc a1,0x1b2 + 8001982c: 3a45e583 lwu a1,932(a1) # 801cbbcc + 80019830: 02055513 srli a0,a0,0x20 + 80019834: 5f4200ef jal ra,80039e28 <__udivdi3> + 80019838: 0045579b srliw a5,a0,0x4 + 8001983c: 001b2717 auipc a4,0x1b2 + 80019840: 6e072703 lw a4,1760(a4) # 801cbf1c <_ZL5dwave> + 80019844: 04e79063 bne a5,a4,80019884 <_ZL14Mapper19_writejh+0x284> + 80019848: 0003e797 auipc a5,0x3e + 8001984c: 14078793 addi a5,a5,320 # 80057988 + 80019850: 00000717 auipc a4,0x0 + 80019854: d5470713 addi a4,a4,-684 # 800195a4 <_ZL10NamcoSoundi> + 80019858: 00e7b023 sd a4,0(a5) + 8001985c: 00000717 auipc a4,0x0 + 80019860: 93070713 addi a4,a4,-1744 # 8001918c <_ZL14DoNamcoSoundHQv> + 80019864: 00e7b823 sd a4,16(a5) + 80019868: 00000717 auipc a4,0x0 + 8001986c: 91870713 addi a4,a4,-1768 # 80019180 <_ZL6SyncHQi> + 80019870: 00e7bc23 sd a4,24(a5) + 80019874: ecdff06f j 80019740 <_ZL14Mapper19_writejh+0x140> + 80019878: 915ff0ef jal ra,8001918c <_ZL14DoNamcoSoundHQv> + 8001987c: 0004c403 lbu s0,0(s1) + 80019880: fc9ff06f j 80019848 <_ZL14Mapper19_writejh+0x248> + 80019884: cf9ff0ef jal ra,8001957c <_ZL12DoNamcoSoundPii.isra.0> + +0000000080019888 <_ZL11DoNTARAMROMih>: + 80019888: 001b2797 auipc a5,0x1b2 + 8001988c: 6a878793 addi a5,a5,1704 # 801cbf30 <_ZL7NTAPage> + 80019890: 00a787b3 add a5,a5,a0 + 80019894: 00b78023 sb a1,0(a5) + 80019898: 0df00793 li a5,223 + 8001989c: 0005061b sext.w a2,a0 + 800198a0: 02b7f063 bgeu a5,a1,800198c0 <_ZL11DoNTARAMROMih+0x38> + 800198a4: 00a5959b slliw a1,a1,0xa + 800198a8: 4005f793 andi a5,a1,1024 + 800198ac: 001b0517 auipc a0,0x1b0 + 800198b0: c7c50513 addi a0,a0,-900 # 801c9528 + 800198b4: 00100593 li a1,1 + 800198b8: 00f50533 add a0,a0,a5 + 800198bc: e64f706f j 80010f20 <_Z9setntamemPhij> + 800198c0: 000a9797 auipc a5,0xa9 + 800198c4: b407c783 lbu a5,-1216(a5) # 800c2400 + 800198c8: 00f5f5b3 and a1,a1,a5 + 800198cc: 00a5979b slliw a5,a1,0xa + 800198d0: 000a9517 auipc a0,0xa9 + 800198d4: d3053503 ld a0,-720(a0) # 800c2600 + 800198d8: 00000593 li a1,0 + 800198dc: 00f50533 add a0,a0,a5 + 800198e0: e40f706f j 80010f20 <_Z9setntamemPhij> + +00000000800198e4 <_ZL21Mapper19_StateRestorei>: + 800198e4: fe010113 addi sp,sp,-32 + 800198e8: 00813823 sd s0,16(sp) + 800198ec: 00913423 sd s1,8(sp) + 800198f0: 01213023 sd s2,0(sp) + 800198f4: 00113c23 sd ra,24(sp) + 800198f8: 001b2497 auipc s1,0x1b2 + 800198fc: 63848493 addi s1,s1,1592 # 801cbf30 <_ZL7NTAPage> + 80019900: bd5ff0ef jal ra,800194d4 <_ZL7SyncPRGv> + 80019904: 00000413 li s0,0 + 80019908: 00400913 li s2,4 + 8001990c: 0004c583 lbu a1,0(s1) + 80019910: 00040513 mv a0,s0 + 80019914: 0014041b addiw s0,s0,1 + 80019918: f71ff0ef jal ra,80019888 <_ZL11DoNTARAMROMih> + 8001991c: 00148493 addi s1,s1,1 + 80019920: ff2416e3 bne s0,s2,8001990c <_ZL21Mapper19_StateRestorei+0x28> + 80019924: 001b2497 auipc s1,0x1b2 + 80019928: 5e448493 addi s1,s1,1508 # 801cbf08 <_ZL3CHR> + 8001992c: 00000413 li s0,0 + 80019930: 00800913 li s2,8 + 80019934: 0004c583 lbu a1,0(s1) + 80019938: 00040513 mv a0,s0 + 8001993c: 0014041b addiw s0,s0,1 + 80019940: b0dff0ef jal ra,8001944c <_ZL11DoCHRRAMROMih> + 80019944: 00148493 addi s1,s1,1 + 80019948: ff2416e3 bne s0,s2,80019934 <_ZL21Mapper19_StateRestorei+0x50> + 8001994c: 000ab417 auipc s0,0xab + 80019950: 6e440413 addi s0,s0,1764 # 800c5030 <_ZL4IRAM+0x40> + 80019954: 04000493 li s1,64 + 80019958: b41ff0ef jal ra,80019498 <_ZL10SyncMirrorv> + 8001995c: 000ab917 auipc s2,0xab + 80019960: 71490913 addi s2,s2,1812 # 800c5070 <_ZL4WRAM> + 80019964: 408484bb subw s1,s1,s0 + 80019968: 00044583 lbu a1,0(s0) + 8001996c: 0084853b addw a0,s1,s0 + 80019970: 00140413 addi s0,s0,1 + 80019974: ed8ff0ef jal ra,8001904c <_ZL8FixCacheii> + 80019978: ff2418e3 bne s0,s2,80019968 <_ZL21Mapper19_StateRestorei+0x84> + 8001997c: 01813083 ld ra,24(sp) + 80019980: 01013403 ld s0,16(sp) + 80019984: 00813483 ld s1,8(sp) + 80019988: 00013903 ld s2,0(sp) + 8001998c: 02010113 addi sp,sp,32 + 80019990: 00008067 ret + +0000000080019994 <_ZL18Mapper19C0D8_writejh>: + 80019994: ffff47b7 lui a5,0xffff4 + 80019998: 00a7853b addw a0,a5,a0 + 8001999c: 00b5551b srliw a0,a0,0xb + 800199a0: ee9ff06f j 80019888 <_ZL11DoNTARAMROMih> + +00000000800199a4 <_ZL10N106_Powerv>: + 800199a4: fe010113 addi sp,sp,-32 + 800199a8: 00813823 sd s0,16(sp) + 800199ac: 00010437 lui s0,0x10 + 800199b0: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 800199b4: ffff7617 auipc a2,0xffff7 + 800199b8: cac60613 addi a2,a2,-852 # 80010660 <_Z6CartBRj> + 800199bc: 00008537 lui a0,0x8 + 800199c0: 00113c23 sd ra,24(sp) + 800199c4: 00913423 sd s1,8(sp) + 800199c8: 01213023 sd s2,0(sp) + 800199cc: 0501a0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800199d0: fff40593 addi a1,s0,-1 + 800199d4: 00000617 auipc a2,0x0 + 800199d8: c2c60613 addi a2,a2,-980 # 80019600 <_ZL14Mapper19_writejh> + 800199dc: 00008537 lui a0,0x8 + 800199e0: 1481a0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800199e4: 000064b7 lui s1,0x6 + 800199e8: 00004537 lui a0,0x4 + 800199ec: 00000617 auipc a2,0x0 + 800199f0: c1460613 addi a2,a2,-1004 # 80019600 <_ZL14Mapper19_writejh> + 800199f4: fff48593 addi a1,s1,-1 # 5fff <_entry_offset+0x5fff> + 800199f8: 02050513 addi a0,a0,32 # 4020 <_entry_offset+0x4020> + 800199fc: 12c1a0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80019a00: 001b2417 auipc s0,0x1b2 + 80019a04: 52442403 lw s0,1316(s0) # 801cbf24 <_ZL5is210> + 80019a08: 0c040663 beqz s0,80019ad4 <_ZL10N106_Powerv+0x130> + 80019a0c: 00008437 lui s0,0x8 + 80019a10: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 80019a14: fffff617 auipc a2,0xfffff + 80019a18: 59460613 addi a2,a2,1428 # 80018fa8 <_ZL5AWRAMj> + 80019a1c: 00006537 lui a0,0x6 + 80019a20: 7fd190ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80019a24: fff40593 addi a1,s0,-1 + 80019a28: fffff617 auipc a2,0xfffff + 80019a2c: 5a460613 addi a2,a2,1444 # 80018fcc <_ZL5BWRAMjh> + 80019a30: 00006537 lui a0,0x6 + 80019a34: 0f41a0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80019a38: 000ab617 auipc a2,0xab + 80019a3c: 63860613 addi a2,a2,1592 # 800c5070 <_ZL4WRAM> + 80019a40: 000065b7 lui a1,0x6 + 80019a44: 00800513 li a0,8 + 80019a48: dcce60ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 80019a4c: fff00793 li a5,-1 + 80019a50: 001b2717 auipc a4,0x1b2 + 80019a54: 4cf70c23 sb a5,1240(a4) # 801cbf28 <_ZL6gorfus> + 80019a58: 001b2497 auipc s1,0x1b2 + 80019a5c: 4b048493 addi s1,s1,1200 # 801cbf08 <_ZL3CHR> + 80019a60: a75ff0ef jal ra,800194d4 <_ZL7SyncPRGv> + 80019a64: 00000413 li s0,0 + 80019a68: 00800913 li s2,8 + 80019a6c: 0004c583 lbu a1,0(s1) + 80019a70: 00040513 mv a0,s0 + 80019a74: 0014041b addiw s0,s0,1 + 80019a78: 9d5ff0ef jal ra,8001944c <_ZL11DoCHRRAMROMih> + 80019a7c: 00148493 addi s1,s1,1 + 80019a80: ff2416e3 bne s0,s2,80019a6c <_ZL10N106_Powerv+0xc8> + 80019a84: 001b2797 auipc a5,0x1b2 + 80019a88: 4b07a783 lw a5,1200(a5) # 801cbf34 <_ZL7battery> + 80019a8c: 0e078463 beqz a5,80019b74 <_ZL10N106_Powerv+0x1d0> + 80019a90: 000ab417 auipc s0,0xab + 80019a94: 5a040413 addi s0,s0,1440 # 800c5030 <_ZL4IRAM+0x40> + 80019a98: 04000493 li s1,64 + 80019a9c: 000ab917 auipc s2,0xab + 80019aa0: 5d490913 addi s2,s2,1492 # 800c5070 <_ZL4WRAM> + 80019aa4: 408484bb subw s1,s1,s0 + 80019aa8: 00044583 lbu a1,0(s0) + 80019aac: 0084853b addw a0,s1,s0 + 80019ab0: 00140413 addi s0,s0,1 + 80019ab4: d98ff0ef jal ra,8001904c <_ZL8FixCacheii> + 80019ab8: ff2418e3 bne s0,s2,80019aa8 <_ZL10N106_Powerv+0x104> + 80019abc: 01813083 ld ra,24(sp) + 80019ac0: 01013403 ld s0,16(sp) + 80019ac4: 00813483 ld s1,8(sp) + 80019ac8: 00013903 ld s2,0(sp) + 80019acc: 02010113 addi sp,sp,32 + 80019ad0: 00008067 ret + 80019ad4: 0000e5b7 lui a1,0xe + 80019ad8: 00000617 auipc a2,0x0 + 80019adc: ebc60613 addi a2,a2,-324 # 80019994 <_ZL18Mapper19C0D8_writejh> + 80019ae0: fff58593 addi a1,a1,-1 # dfff <_entry_offset+0xdfff> + 80019ae4: 0000c537 lui a0,0xc + 80019ae8: 0401a0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80019aec: 00005937 lui s2,0x5 + 80019af0: fff90593 addi a1,s2,-1 # 4fff <_entry_offset+0x4fff> + 80019af4: 80090513 addi a0,s2,-2048 + 80019af8: fffff617 auipc a2,0xfffff + 80019afc: 4f860613 addi a2,a2,1272 # 80018ff0 <_ZL14Namco_Read4800j> + 80019b00: 71d190ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80019b04: 7ff90593 addi a1,s2,2047 + 80019b08: fffff617 auipc a2,0xfffff + 80019b0c: 52860613 addi a2,a2,1320 # 80019030 <_ZL14Namco_Read5000j> + 80019b10: 00005537 lui a0,0x5 + 80019b14: 709190ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80019b18: fff48593 addi a1,s1,-1 + 80019b1c: 80048513 addi a0,s1,-2048 + 80019b20: fffff617 auipc a2,0xfffff + 80019b24: 51c60613 addi a2,a2,1308 # 8001903c <_ZL14Namco_Read5800j> + 80019b28: 6f5190ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80019b2c: 001b2497 auipc s1,0x1b2 + 80019b30: 40448493 addi s1,s1,1028 # 801cbf30 <_ZL7NTAPage> + 80019b34: fff00793 li a5,-1 + 80019b38: 00f4a023 sw a5,0(s1) + 80019b3c: 00040513 mv a0,s0 + 80019b40: 0ff00593 li a1,255 + 80019b44: 00400913 li s2,4 + 80019b48: 0014041b addiw s0,s0,1 + 80019b4c: d3dff0ef jal ra,80019888 <_ZL11DoNTARAMROMih> + 80019b50: 00148493 addi s1,s1,1 + 80019b54: eb240ce3 beq s0,s2,80019a0c <_ZL10N106_Powerv+0x68> + 80019b58: 0004c583 lbu a1,0(s1) + 80019b5c: 00040513 mv a0,s0 + 80019b60: 0014041b addiw s0,s0,1 + 80019b64: d25ff0ef jal ra,80019888 <_ZL11DoNTARAMROMih> + 80019b68: 00148493 addi s1,s1,1 + 80019b6c: ff2416e3 bne s0,s2,80019b58 <_ZL10N106_Powerv+0x1b4> + 80019b70: e9dff06f j 80019a0c <_ZL10N106_Powerv+0x68> + 80019b74: 00100613 li a2,1 + 80019b78: 000025b7 lui a1,0x2 + 80019b7c: 000ab517 auipc a0,0xab + 80019b80: 4f450513 addi a0,a0,1268 # 800c5070 <_ZL4WRAM> + 80019b84: 3d01a0ef jal ra,80033f54 <_Z15FCEU_MemoryRandPhjb> + 80019b88: 00100613 li a2,1 + 80019b8c: 08000593 li a1,128 + 80019b90: 000ab517 auipc a0,0xab + 80019b94: 46050513 addi a0,a0,1120 # 800c4ff0 <_ZL4IRAM> + 80019b98: 3bc1a0ef jal ra,80033f54 <_Z15FCEU_MemoryRandPhjb> + 80019b9c: ef5ff06f j 80019a90 <_ZL10N106_Powerv+0xec> + +0000000080019ba0 <_ZL12NamcoIRQHooki>: + 80019ba0: 001b2797 auipc a5,0x1b2 + 80019ba4: 3787c783 lbu a5,888(a5) # 801cbf18 <_ZL4IRQa> + 80019ba8: 04078463 beqz a5,80019bf0 <_ZL12NamcoIRQHooki+0x50> + 80019bac: ff010113 addi sp,sp,-16 + 80019bb0: 00813023 sd s0,0(sp) + 80019bb4: 001b2417 auipc s0,0x1b2 + 80019bb8: 38440413 addi s0,s0,900 # 801cbf38 <_ZL8IRQCount> + 80019bbc: 00045783 lhu a5,0(s0) + 80019bc0: 00008737 lui a4,0x8 + 80019bc4: 00113423 sd ra,8(sp) + 80019bc8: 00a7853b addw a0,a5,a0 + 80019bcc: 03051513 slli a0,a0,0x30 + 80019bd0: 03055513 srli a0,a0,0x30 + 80019bd4: ffe70713 addi a4,a4,-2 # 7ffe <_entry_offset+0x7ffe> + 80019bd8: 00a41023 sh a0,0(s0) + 80019bdc: 00a76c63 bltu a4,a0,80019bf4 <_ZL12NamcoIRQHooki+0x54> + 80019be0: 00813083 ld ra,8(sp) + 80019be4: 00013403 ld s0,0(sp) + 80019be8: 01010113 addi sp,sp,16 + 80019bec: 00008067 ret + 80019bf0: 00008067 ret + 80019bf4: 00100513 li a0,1 + 80019bf8: 940e70ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 80019bfc: 001b2797 auipc a5,0x1b2 + 80019c00: 30078e23 sb zero,796(a5) # 801cbf18 <_ZL4IRQa> + 80019c04: ffff87b7 lui a5,0xffff8 + 80019c08: fff7c793 not a5,a5 + 80019c0c: 00813083 ld ra,8(sp) + 80019c10: 00f41023 sh a5,0(s0) + 80019c14: 00013403 ld s0,0(sp) + 80019c18: 01010113 addi sp,sp,16 + 80019c1c: 00008067 ret + +0000000080019c20 <_Z12Mapper19_ESIv>: + 80019c20: ff010113 addi sp,sp,-16 + 80019c24: 00000797 auipc a5,0x0 + 80019c28: 05078793 addi a5,a5,80 # 80019c74 <_ZL5M19SCv> + 80019c2c: 02000613 li a2,32 + 80019c30: 00000593 li a1,0 + 80019c34: 000ad517 auipc a0,0xad + 80019c38: 43c50513 addi a0,a0,1084 # 800c7070 <_ZL6vcount> + 80019c3c: 00113423 sd ra,8(sp) + 80019c40: 0003e717 auipc a4,0x3e + 80019c44: d6f73423 sd a5,-664(a4) # 800579a8 + 80019c48: 5e1210ef jal ra,8003ba28 + 80019c4c: 02000613 li a2,32 + 80019c50: 00000593 li a1,0 + 80019c54: 000ad517 auipc a0,0xad + 80019c58: 47c50513 addi a0,a0,1148 # 800c70d0 <_ZL9PlayIndex> + 80019c5c: 5cd210ef jal ra,8003ba28 + 80019c60: 00813083 ld ra,8(sp) + 80019c64: 001b2797 auipc a5,0x1b2 + 80019c68: 2a07a823 sw zero,688(a5) # 801cbf14 <_ZL4CVBC> + 80019c6c: 01010113 addi sp,sp,16 + 80019c70: 00008067 ret + +0000000080019c74 <_ZL5M19SCv>: + 80019c74: 001af797 auipc a5,0x1af + 80019c78: 0a87a783 lw a5,168(a5) # 801c8d1c + 80019c7c: 00079463 bnez a5,80019c84 <_ZL5M19SCv+0x10> + 80019c80: 00008067 ret + 80019c84: f9dff06f j 80019c20 <_Z12Mapper19_ESIv> + +0000000080019c88 <_Z13Mapper19_InitP8CartInfo>: + 80019c88: 04c52783 lw a5,76(a0) + 80019c8c: fe010113 addi sp,sp,-32 + 80019c90: 00000717 auipc a4,0x0 + 80019c94: d1470713 addi a4,a4,-748 # 800199a4 <_ZL10N106_Powerv> + 80019c98: 00813823 sd s0,16(sp) + 80019c9c: 00113c23 sd ra,24(sp) + 80019ca0: 00913423 sd s1,8(sp) + 80019ca4: 00e53023 sd a4,0(a0) + 80019ca8: 001b2717 auipc a4,0x1b2 + 80019cac: 28f72623 sw a5,652(a4) # 801cbf34 <_ZL7battery> + 80019cb0: 00000797 auipc a5,0x0 + 80019cb4: ef078793 addi a5,a5,-272 # 80019ba0 <_ZL12NamcoIRQHooki> + 80019cb8: 001b2717 auipc a4,0x1b2 + 80019cbc: e8f73423 sd a5,-376(a4) # 801cbb40 + 80019cc0: 00000797 auipc a5,0x0 + 80019cc4: c2478793 addi a5,a5,-988 # 800198e4 <_ZL21Mapper19_StateRestorei> + 80019cc8: 001b3717 auipc a4,0x1b3 + 80019ccc: 98f73823 sd a5,-1648(a4) # 801cc658 + 80019cd0: 00000797 auipc a5,0x0 + 80019cd4: fa478793 addi a5,a5,-92 # 80019c74 <_ZL5M19SCv> + 80019cd8: 0003e717 auipc a4,0x3e + 80019cdc: ccf73823 sd a5,-816(a4) # 800579a8 + 80019ce0: 001b2717 auipc a4,0x1b2 + 80019ce4: 24072223 sw zero,580(a4) # 801cbf24 <_ZL5is210> + 80019ce8: 001af797 auipc a5,0x1af + 80019cec: 0347a783 lw a5,52(a5) # 801c8d1c + 80019cf0: 00050413 mv s0,a0 + 80019cf4: 0a079c63 bnez a5,80019dac <_Z13Mapper19_InitP8CartInfo+0x124> + 80019cf8: 00100613 li a2,1 + 80019cfc: 000025b7 lui a1,0x2 + 80019d00: 000ab517 auipc a0,0xab + 80019d04: 37050513 addi a0,a0,880 # 800c5070 <_ZL4WRAM> + 80019d08: 24c1a0ef jal ra,80033f54 <_Z15FCEU_MemoryRandPhjb> + 80019d0c: 000ab497 auipc s1,0xab + 80019d10: 2e448493 addi s1,s1,740 # 800c4ff0 <_ZL4IRAM> + 80019d14: 00100613 li a2,1 + 80019d18: 08000593 li a1,128 + 80019d1c: 00048513 mv a0,s1 + 80019d20: 2341a0ef jal ra,80033f54 <_Z15FCEU_MemoryRandPhjb> + 80019d24: 0002b697 auipc a3,0x2b + 80019d28: 60468693 addi a3,a3,1540 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80019d2c: 00000613 li a2,0 + 80019d30: 000025b7 lui a1,0x2 + 80019d34: 000ab517 auipc a0,0xab + 80019d38: 33c50513 addi a0,a0,828 # 800c5070 <_ZL4WRAM> + 80019d3c: ad4e60ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80019d40: 0002c697 auipc a3,0x2c + 80019d44: 88068693 addi a3,a3,-1920 # 800455c0 <_ZZL8SetInputvE3moo+0x770> + 80019d48: 00000613 li a2,0 + 80019d4c: 08000593 li a1,128 + 80019d50: 00048513 mv a0,s1 + 80019d54: abce60ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80019d58: 00000693 li a3,0 + 80019d5c: 00000613 li a2,0 + 80019d60: fff00593 li a1,-1 + 80019d64: 00033517 auipc a0,0x33 + 80019d68: a1450513 addi a0,a0,-1516 # 8004c778 <_ZL14N106_StateRegs> + 80019d6c: aa4e60ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80019d70: 04c42783 lw a5,76(s0) + 80019d74: 02078263 beqz a5,80019d98 <_Z13Mapper19_InitP8CartInfo+0x110> + 80019d78: 040007b7 lui a5,0x4000 + 80019d7c: 00178793 addi a5,a5,1 # 4000001 <_entry_offset+0x4000001> + 80019d80: 000ab717 auipc a4,0xab + 80019d84: 2f070713 addi a4,a4,752 # 800c5070 <_ZL4WRAM> + 80019d88: 00d79793 slli a5,a5,0xd + 80019d8c: 00e43c23 sd a4,24(s0) + 80019d90: 02943023 sd s1,32(s0) + 80019d94: 02f43c23 sd a5,56(s0) + 80019d98: 01813083 ld ra,24(sp) + 80019d9c: 01013403 ld s0,16(sp) + 80019da0: 00813483 ld s1,8(sp) + 80019da4: 02010113 addi sp,sp,32 + 80019da8: 00008067 ret + 80019dac: e75ff0ef jal ra,80019c20 <_Z12Mapper19_ESIv> + 80019db0: f49ff06f j 80019cf8 <_Z13Mapper19_InitP8CartInfo+0x70> + +0000000080019db4 <_Z14Mapper210_InitP8CartInfo>: + 80019db4: ff010113 addi sp,sp,-16 + 80019db8: fffff717 auipc a4,0xfffff + 80019dbc: 76c70713 addi a4,a4,1900 # 80019524 <_ZL22Mapper210_StateRestorei> + 80019dc0: 00113423 sd ra,8(sp) + 80019dc4: 001b3697 auipc a3,0x1b3 + 80019dc8: 88e6ba23 sd a4,-1900(a3) # 801cc658 + 80019dcc: 00050793 mv a5,a0 + 80019dd0: 00000717 auipc a4,0x0 + 80019dd4: bd470713 addi a4,a4,-1068 # 800199a4 <_ZL10N106_Powerv> + 80019dd8: 00e7b023 sd a4,0(a5) + 80019ddc: 00100613 li a2,1 + 80019de0: 00100793 li a5,1 + 80019de4: 000025b7 lui a1,0x2 + 80019de8: 000ab517 auipc a0,0xab + 80019dec: 28850513 addi a0,a0,648 # 800c5070 <_ZL4WRAM> + 80019df0: 001b2717 auipc a4,0x1b2 + 80019df4: 12f72a23 sw a5,308(a4) # 801cbf24 <_ZL5is210> + 80019df8: 15c1a0ef jal ra,80033f54 <_Z15FCEU_MemoryRandPhjb> + 80019dfc: 0002b697 auipc a3,0x2b + 80019e00: 52c68693 addi a3,a3,1324 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80019e04: 00000613 li a2,0 + 80019e08: 000025b7 lui a1,0x2 + 80019e0c: 000ab517 auipc a0,0xab + 80019e10: 26450513 addi a0,a0,612 # 800c5070 <_ZL4WRAM> + 80019e14: 9fce60ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80019e18: 00813083 ld ra,8(sp) + 80019e1c: 00000693 li a3,0 + 80019e20: 00000613 li a2,0 + 80019e24: fff00593 li a1,-1 + 80019e28: 00033517 auipc a0,0x33 + 80019e2c: 95050513 addi a0,a0,-1712 # 8004c778 <_ZL14N106_StateRegs> + 80019e30: 01010113 addi sp,sp,16 + 80019e34: 9dce606f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080019e38 <_ZL4Syncv>: + 80019e38: fe010113 addi sp,sp,-32 + 80019e3c: 00913423 sd s1,8(sp) + 80019e40: 001b2497 auipc s1,0x1b2 + 80019e44: 10848493 addi s1,s1,264 # 801cbf48 <_ZL4preg> + 80019e48: 0004c583 lbu a1,0(s1) + 80019e4c: 00008537 lui a0,0x8 + 80019e50: 00113c23 sd ra,24(sp) + 80019e54: 00813823 sd s0,16(sp) + 80019e58: 01213023 sd s2,0(sp) + 80019e5c: c41f60ef jal ra,80010a9c <_Z7setprg8jj> + 80019e60: 0014c583 lbu a1,1(s1) + 80019e64: 0000a537 lui a0,0xa + 80019e68: 001b2417 auipc s0,0x1b2 + 80019e6c: 0da40413 addi s0,s0,218 # 801cbf42 <_ZL4mode> + 80019e70: c2df60ef jal ra,80010a9c <_Z7setprg8jj> + 80019e74: 0024c583 lbu a1,2(s1) + 80019e78: 0000c537 lui a0,0xc + 80019e7c: 001b2917 auipc s2,0x1b2 + 80019e80: 0c490913 addi s2,s2,196 # 801cbf40 <_ZL4creg> + 80019e84: c19f60ef jal ra,80010a9c <_Z7setprg8jj> + 80019e88: fff00593 li a1,-1 + 80019e8c: 0000e537 lui a0,0xe + 80019e90: c0df60ef jal ra,80010a9c <_Z7setprg8jj> + 80019e94: 00044783 lbu a5,0(s0) + 80019e98: 00094583 lbu a1,0(s2) + 80019e9c: 00000513 li a0,0 + 80019ea0: 0037979b slliw a5,a5,0x3 + 80019ea4: 0107f793 andi a5,a5,16 + 80019ea8: 00b7e5b3 or a1,a5,a1 + 80019eac: 838f70ef jal ra,80010ee4 <_Z7setchr4jj> + 80019eb0: 00044783 lbu a5,0(s0) + 80019eb4: 00194583 lbu a1,1(s2) + 80019eb8: 00001537 lui a0,0x1 + 80019ebc: 0027979b slliw a5,a5,0x2 + 80019ec0: 0107f793 andi a5,a5,16 + 80019ec4: 00b7e5b3 or a1,a5,a1 + 80019ec8: 81cf70ef jal ra,80010ee4 <_Z7setchr4jj> + 80019ecc: 00044503 lbu a0,0(s0) + 80019ed0: 01013403 ld s0,16(sp) + 80019ed4: 01813083 ld ra,24(sp) + 80019ed8: 00813483 ld s1,8(sp) + 80019edc: 00013903 ld s2,0(sp) + 80019ee0: fff54513 not a0,a0 + 80019ee4: 00157513 andi a0,a0,1 + 80019ee8: 02010113 addi sp,sp,32 + 80019eec: 95cf706f j 80011048 <_Z9setmirrori> + +0000000080019ef0 <_ZL12StateRestorei>: + 80019ef0: f49ff06f j 80019e38 <_ZL4Syncv> + +0000000080019ef4 <_ZL8M75Writejh>: + 80019ef4: 0000f7b7 lui a5,0xf + 80019ef8: 00f57533 and a0,a0,a5 + 80019efc: 0000c7b7 lui a5,0xc + 80019f00: 06f50663 beq a0,a5,80019f6c <_ZL8M75Writejh+0x78> + 80019f04: 02a7e063 bltu a5,a0,80019f24 <_ZL8M75Writejh+0x30> + 80019f08: 000097b7 lui a5,0x9 + 80019f0c: 06f50663 beq a0,a5,80019f78 <_ZL8M75Writejh+0x84> + 80019f10: 0000a7b7 lui a5,0xa + 80019f14: 02f51863 bne a0,a5,80019f44 <_ZL8M75Writejh+0x50> + 80019f18: 001b2797 auipc a5,0x1b2 + 80019f1c: 02b788a3 sb a1,49(a5) # 801cbf49 <_ZL4preg+0x1> + 80019f20: f19ff06f j 80019e38 <_ZL4Syncv> + 80019f24: 0000e7b7 lui a5,0xe + 80019f28: 02f50a63 beq a0,a5,80019f5c <_ZL8M75Writejh+0x68> + 80019f2c: 0000f7b7 lui a5,0xf + 80019f30: 04f51a63 bne a0,a5,80019f84 <_ZL8M75Writejh+0x90> + 80019f34: 00f5f593 andi a1,a1,15 + 80019f38: 001b2797 auipc a5,0x1b2 + 80019f3c: 00b784a3 sb a1,9(a5) # 801cbf41 <_ZL4creg+0x1> + 80019f40: ef9ff06f j 80019e38 <_ZL4Syncv> + 80019f44: 000087b7 lui a5,0x8 + 80019f48: 00f51863 bne a0,a5,80019f58 <_ZL8M75Writejh+0x64> + 80019f4c: 001b2797 auipc a5,0x1b2 + 80019f50: feb78e23 sb a1,-4(a5) # 801cbf48 <_ZL4preg> + 80019f54: ee5ff06f j 80019e38 <_ZL4Syncv> + 80019f58: 00008067 ret + 80019f5c: 00f5f593 andi a1,a1,15 + 80019f60: 001b2797 auipc a5,0x1b2 + 80019f64: feb78023 sb a1,-32(a5) # 801cbf40 <_ZL4creg> + 80019f68: ed1ff06f j 80019e38 <_ZL4Syncv> + 80019f6c: 001b2797 auipc a5,0x1b2 + 80019f70: fcb78f23 sb a1,-34(a5) # 801cbf4a <_ZL4preg+0x2> + 80019f74: ec5ff06f j 80019e38 <_ZL4Syncv> + 80019f78: 001b2797 auipc a5,0x1b2 + 80019f7c: fcb78523 sb a1,-54(a5) # 801cbf42 <_ZL4mode> + 80019f80: eb9ff06f j 80019e38 <_ZL4Syncv> + 80019f84: 00008067 ret + +0000000080019f88 <_ZL8M75Powerv>: + 80019f88: ff010113 addi sp,sp,-16 + 80019f8c: 00113423 sd ra,8(sp) + 80019f90: 00813023 sd s0,0(sp) + 80019f94: ea5ff0ef jal ra,80019e38 <_ZL4Syncv> + 80019f98: 00010437 lui s0,0x10 + 80019f9c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80019fa0: 00000617 auipc a2,0x0 + 80019fa4: f5460613 addi a2,a2,-172 # 80019ef4 <_ZL8M75Writejh> + 80019fa8: 00008537 lui a0,0x8 + 80019fac: 37d190ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80019fb0: fff40593 addi a1,s0,-1 + 80019fb4: 00013403 ld s0,0(sp) + 80019fb8: 00813083 ld ra,8(sp) + 80019fbc: ffff6617 auipc a2,0xffff6 + 80019fc0: 6a460613 addi a2,a2,1700 # 80010660 <_Z6CartBRj> + 80019fc4: 00008537 lui a0,0x8 + 80019fc8: 01010113 addi sp,sp,16 + 80019fcc: 2511906f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080019fd0 <_Z13Mapper75_InitP8CartInfo>: + 80019fd0: ff010113 addi sp,sp,-16 + 80019fd4: 00113423 sd ra,8(sp) + 80019fd8: 00000797 auipc a5,0x0 + 80019fdc: fb078793 addi a5,a5,-80 # 80019f88 <_ZL8M75Powerv> + 80019fe0: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 80019fe4: 00000693 li a3,0 + 80019fe8: 00000613 li a2,0 + 80019fec: fff00593 li a1,-1 + 80019ff0: 00031517 auipc a0,0x31 + 80019ff4: d3050513 addi a0,a0,-720 # 8004ad20 <_ZL9StateRegs> + 80019ff8: 818e60ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80019ffc: 00813083 ld ra,8(sp) + 8001a000: 00000797 auipc a5,0x0 + 8001a004: ef078793 addi a5,a5,-272 # 80019ef0 <_ZL12StateRestorei> + 8001a008: 001b2717 auipc a4,0x1b2 + 8001a00c: 64f73823 sd a5,1616(a4) # 801cc658 + 8001a010: 01010113 addi sp,sp,16 + 8001a014: 00008067 ret + +000000008001a018 <_ZL13M216Write5000jh>: + 8001a018: 00008067 ret + +000000008001a01c <_ZL12M216Read5000j>: + 8001a01c: 00000513 li a0,0 + 8001a020: 00008067 ret + +000000008001a024 <_ZL4Syncv>: + 8001a024: ff010113 addi sp,sp,-16 + 8001a028: 00008537 lui a0,0x8 + 8001a02c: 001b2597 auipc a1,0x1b2 + 8001a030: f205c583 lbu a1,-224(a1) # 801cbf4c <_ZL7prg_reg> + 8001a034: 00113423 sd ra,8(sp) + 8001a038: dddf60ef jal ra,80010e14 <_Z8setprg32jj> + 8001a03c: 00813083 ld ra,8(sp) + 8001a040: 001b2517 auipc a0,0x1b2 + 8001a044: f0b54503 lbu a0,-245(a0) # 801cbf4b <_ZL7chr_reg> + 8001a048: 01010113 addi sp,sp,16 + 8001a04c: eb9f606f j 80010f04 <_Z7setchr8j> + +000000008001a050 <_ZL12StateRestorei>: + 8001a050: fd5ff06f j 8001a024 <_ZL4Syncv> + +000000008001a054 <_ZL11M216WriteHijh>: + 8001a054: 0015579b srliw a5,a0,0x1 + 8001a058: 0077f793 andi a5,a5,7 + 8001a05c: 00157513 andi a0,a0,1 + 8001a060: 001b2717 auipc a4,0x1b2 + 8001a064: eea70623 sb a0,-276(a4) # 801cbf4c <_ZL7prg_reg> + 8001a068: 001b2717 auipc a4,0x1b2 + 8001a06c: eef701a3 sb a5,-285(a4) # 801cbf4b <_ZL7chr_reg> + 8001a070: fb5ff06f j 8001a024 <_ZL4Syncv> + +000000008001a074 <_ZL5Powerv>: + 8001a074: ff010113 addi sp,sp,-16 + 8001a078: 00113423 sd ra,8(sp) + 8001a07c: 00813023 sd s0,0(sp) + 8001a080: 001b2797 auipc a5,0x1b2 + 8001a084: ec078623 sb zero,-308(a5) # 801cbf4c <_ZL7prg_reg> + 8001a088: 00010437 lui s0,0x10 + 8001a08c: 001b2797 auipc a5,0x1b2 + 8001a090: ea078fa3 sb zero,-321(a5) # 801cbf4b <_ZL7chr_reg> + 8001a094: f91ff0ef jal ra,8001a024 <_ZL4Syncv> + 8001a098: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8001a09c: ffff6617 auipc a2,0xffff6 + 8001a0a0: 5c460613 addi a2,a2,1476 # 80010660 <_Z6CartBRj> + 8001a0a4: 00008537 lui a0,0x8 + 8001a0a8: 175190ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001a0ac: fff40593 addi a1,s0,-1 + 8001a0b0: 00000617 auipc a2,0x0 + 8001a0b4: fa460613 addi a2,a2,-92 # 8001a054 <_ZL11M216WriteHijh> + 8001a0b8: 00008537 lui a0,0x8 + 8001a0bc: 26d190ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001a0c0: 00000617 auipc a2,0x0 + 8001a0c4: f5860613 addi a2,a2,-168 # 8001a018 <_ZL13M216Write5000jh> + 8001a0c8: 000055b7 lui a1,0x5 + 8001a0cc: 00005537 lui a0,0x5 + 8001a0d0: 259190ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001a0d4: 00013403 ld s0,0(sp) + 8001a0d8: 00813083 ld ra,8(sp) + 8001a0dc: 00000617 auipc a2,0x0 + 8001a0e0: f4060613 addi a2,a2,-192 # 8001a01c <_ZL12M216Read5000j> + 8001a0e4: 000055b7 lui a1,0x5 + 8001a0e8: 00005537 lui a0,0x5 + 8001a0ec: 01010113 addi sp,sp,16 + 8001a0f0: 12d1906f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +000000008001a0f4 <_Z14Mapper216_InitP8CartInfo>: + 8001a0f4: 00000797 auipc a5,0x0 + 8001a0f8: f8078793 addi a5,a5,-128 # 8001a074 <_ZL5Powerv> + 8001a0fc: 00f53023 sd a5,0(a0) # 5000 <_entry_offset+0x5000> + 8001a100: 00000797 auipc a5,0x0 + 8001a104: f5078793 addi a5,a5,-176 # 8001a050 <_ZL12StateRestorei> + 8001a108: 00000693 li a3,0 + 8001a10c: 00000613 li a2,0 + 8001a110: fff00593 li a1,-1 + 8001a114: 00031517 auipc a0,0x31 + 8001a118: c6c50513 addi a0,a0,-916 # 8004ad80 <_ZL9StateRegs> + 8001a11c: 001b2717 auipc a4,0x1b2 + 8001a120: 52f73e23 sd a5,1340(a4) # 801cc658 + 8001a124: eede506f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001a128 <_ZL4Syncv>: + 8001a128: 001b2717 auipc a4,0x1b2 + 8001a12c: 12870713 addi a4,a4,296 # 801cc250 + 8001a130: 00574783 lbu a5,5(a4) + 8001a134: 01f00693 li a3,31 + 8001a138: 03f7f793 andi a5,a5,63 + 8001a13c: fe07879b addiw a5,a5,-32 + 8001a140: 0ff7f793 andi a5,a5,255 + 8001a144: 02f6e063 bltu a3,a5,8001a164 <_ZL4Syncv+0x3c> + 8001a148: 0002b697 auipc a3,0x2b + 8001a14c: 4a068693 addi a3,a3,1184 # 800455e8 <_ZZL8SetInputvE3moo+0x798> + 8001a150: 00279793 slli a5,a5,0x2 + 8001a154: 00d787b3 add a5,a5,a3 + 8001a158: 0007a783 lw a5,0(a5) + 8001a15c: 00d787b3 add a5,a5,a3 + 8001a160: 00078067 jr a5 + 8001a164: 001b2797 auipc a5,0x1b2 + 8001a168: 0e0788a3 sb zero,241(a5) # 801cc255 + 8001a16c: 00008067 ret + 8001a170: 00674783 lbu a5,6(a4) + 8001a174: 00100693 li a3,1 + 8001a178: 00d703a3 sb a3,7(a4) + 8001a17c: 00f70023 sb a5,0(a4) + 8001a180: 00008067 ret + 8001a184: 00674783 lbu a5,6(a4) + 8001a188: 001b2697 auipc a3,0x1b2 + 8001a18c: 0c0687a3 sb zero,207(a3) # 801cc257 + 8001a190: 00f700a3 sb a5,1(a4) + 8001a194: 00008067 ret + 8001a198: 00674783 lbu a5,6(a4) + 8001a19c: 001b2697 auipc a3,0x1b2 + 8001a1a0: 0a068da3 sb zero,187(a3) # 801cc257 + 8001a1a4: 00f70123 sb a5,2(a4) + 8001a1a8: 00008067 ret + 8001a1ac: 00674783 lbu a5,6(a4) + 8001a1b0: 001b2697 auipc a3,0x1b2 + 8001a1b4: 0a0683a3 sb zero,167(a3) # 801cc257 + 8001a1b8: 00f70023 sb a5,0(a4) + 8001a1bc: 00008067 ret + 8001a1c0: 00674783 lbu a5,6(a4) + 8001a1c4: 00100693 li a3,1 + 8001a1c8: 00d703a3 sb a3,7(a4) + 8001a1cc: fa0780e3 beqz a5,8001a16c <_ZL4Syncv+0x44> + 8001a1d0: 00f70023 sb a5,0(a4) + 8001a1d4: 00008067 ret + +000000008001a1d8 <_ZL8M121Readj>: + 8001a1d8: 001b2517 auipc a0,0x1b2 + 8001a1dc: 07c54503 lbu a0,124(a0) # 801cc254 + 8001a1e0: 00008067 ret + +000000008001a1e4 <_ZL9M121Powerv>: + 8001a1e4: ff010113 addi sp,sp,-16 + 8001a1e8: 00113423 sd ra,8(sp) + 8001a1ec: 00813023 sd s0,0(sp) + 8001a1f0: 001b2797 auipc a5,0x1b2 + 8001a1f4: 06078793 addi a5,a5,96 # 801cc250 + 8001a1f8: f8000713 li a4,-128 + 8001a1fc: 00006437 lui s0,0x6 + 8001a200: 00e781a3 sb a4,3(a5) + 8001a204: 000782a3 sb zero,5(a5) + 8001a208: 7b90b0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 8001a20c: fff40593 addi a1,s0,-1 # 5fff <_entry_offset+0x5fff> + 8001a210: 00000617 auipc a2,0x0 + 8001a214: fc860613 addi a2,a2,-56 # 8001a1d8 <_ZL8M121Readj> + 8001a218: 00005537 lui a0,0x5 + 8001a21c: 001190ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001a220: fff40593 addi a1,s0,-1 + 8001a224: 00000617 auipc a2,0x0 + 8001a228: 12460613 addi a2,a2,292 # 8001a348 <_ZL11M121LoWritejh> + 8001a22c: 00005537 lui a0,0x5 + 8001a230: 0f9190ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001a234: 00013403 ld s0,0(sp) + 8001a238: 00813083 ld ra,8(sp) + 8001a23c: 0000a5b7 lui a1,0xa + 8001a240: 00000617 auipc a2,0x0 + 8001a244: 01860613 addi a2,a2,24 # 8001a258 <_ZL9M121Writejh> + 8001a248: fff58593 addi a1,a1,-1 # 9fff <_entry_offset+0x9fff> + 8001a24c: 00008537 lui a0,0x8 + 8001a250: 01010113 addi sp,sp,16 + 8001a254: 0d51906f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008001a258 <_ZL9M121Writejh>: + 8001a258: 0000e7b7 lui a5,0xe + 8001a25c: fe010113 addi sp,sp,-32 + 8001a260: 00008737 lui a4,0x8 + 8001a264: 00378793 addi a5,a5,3 # e003 <_entry_offset+0xe003> + 8001a268: 00813823 sd s0,16(sp) + 8001a26c: 00113c23 sd ra,24(sp) + 8001a270: 00913423 sd s1,8(sp) + 8001a274: 00f577b3 and a5,a0,a5 + 8001a278: 00170693 addi a3,a4,1 # 8001 <_entry_offset+0x8001> + 8001a27c: 00058413 mv s0,a1 + 8001a280: 04d78c63 beq a5,a3,8001a2d8 <_ZL9M121Writejh+0x80> + 8001a284: 00370693 addi a3,a4,3 + 8001a288: 00d78e63 beq a5,a3,8001a2a4 <_ZL9M121Writejh+0x4c> + 8001a28c: 02e78663 beq a5,a4,8001a2b8 <_ZL9M121Writejh+0x60> + 8001a290: 01813083 ld ra,24(sp) + 8001a294: 01013403 ld s0,16(sp) + 8001a298: 00813483 ld s1,8(sp) + 8001a29c: 02010113 addi sp,sp,32 + 8001a2a0: 00008067 ret + 8001a2a4: 001b2797 auipc a5,0x1b2 + 8001a2a8: fab788a3 sb a1,-79(a5) # 801cc255 + 8001a2ac: e7dff0ef jal ra,8001a128 <_ZL4Syncv> + 8001a2b0: 00040593 mv a1,s0 + 8001a2b4: 00008537 lui a0,0x8 + 8001a2b8: 60c0c0ef jal ra,800268c4 <_Z13MMC3_CMDWritejh> + 8001a2bc: 01013403 ld s0,16(sp) + 8001a2c0: 01813083 ld ra,24(sp) + 8001a2c4: 00813483 ld s1,8(sp) + 8001a2c8: 001b2517 auipc a0,0x1b2 + 8001a2cc: f9454503 lbu a0,-108(a0) # 801cc25c + 8001a2d0: 02010113 addi sp,sp,32 + 8001a2d4: 3990b06f j 80025e6c <_Z10FixMMC3PRGi> + 8001a2d8: 00559793 slli a5,a1,0x5 + 8001a2dc: 00359713 slli a4,a1,0x3 + 8001a2e0: 01077713 andi a4,a4,16 + 8001a2e4: 0207f793 andi a5,a5,32 + 8001a2e8: 00159693 slli a3,a1,0x1 + 8001a2ec: 00e7e7b3 or a5,a5,a4 + 8001a2f0: 0086f693 andi a3,a3,8 + 8001a2f4: 0015d713 srli a4,a1,0x1 + 8001a2f8: 00d7e7b3 or a5,a5,a3 + 8001a2fc: 00477713 andi a4,a4,4 + 8001a300: 0035d693 srli a3,a1,0x3 + 8001a304: 001b2617 auipc a2,0x1b2 + 8001a308: f4c60613 addi a2,a2,-180 # 801cc250 + 8001a30c: 00e7e7b3 or a5,a5,a4 + 8001a310: 0026f693 andi a3,a3,2 + 8001a314: 0055d713 srli a4,a1,0x5 + 8001a318: 00d7e7b3 or a5,a5,a3 + 8001a31c: 00177713 andi a4,a4,1 + 8001a320: 00764683 lbu a3,7(a2) + 8001a324: 00e7e7b3 or a5,a5,a4 + 8001a328: 00f60323 sb a5,6(a2) + 8001a32c: 00050493 mv s1,a0 + 8001a330: 00068863 beqz a3,8001a340 <_ZL9M121Writejh+0xe8> + 8001a334: 00048513 mv a0,s1 + 8001a338: 00040593 mv a1,s0 + 8001a33c: f7dff06f j 8001a2b8 <_ZL9M121Writejh+0x60> + 8001a340: de9ff0ef jal ra,8001a128 <_ZL4Syncv> + 8001a344: ff1ff06f j 8001a334 <_ZL9M121Writejh+0xdc> + +000000008001a348 <_ZL11M121LoWritejh>: + 8001a348: 0035f713 andi a4,a1,3 + 8001a34c: 0002b797 auipc a5,0x2b + 8001a350: 31c78793 addi a5,a5,796 # 80045668 <_ZL10prot_array> + 8001a354: 00e787b3 add a5,a5,a4 + 8001a358: 0007c683 lbu a3,0(a5) + 8001a35c: 000057b7 lui a5,0x5 + 8001a360: 001b2717 auipc a4,0x1b2 + 8001a364: ef070713 addi a4,a4,-272 # 801cc250 + 8001a368: 18078793 addi a5,a5,384 # 5180 <_entry_offset+0x5180> + 8001a36c: 00d70223 sb a3,4(a4) + 8001a370: 00f57533 and a0,a0,a5 + 8001a374: 00f50463 beq a0,a5,8001a37c <_ZL11M121LoWritejh+0x34> + 8001a378: 00008067 ret + 8001a37c: ff010113 addi sp,sp,-16 + 8001a380: 00813023 sd s0,0(sp) + 8001a384: 001b2417 auipc s0,0x1b2 + 8001a388: ed840413 addi s0,s0,-296 # 801cc25c + 8001a38c: 00044503 lbu a0,0(s0) + 8001a390: 00113423 sd ra,8(sp) + 8001a394: 00b701a3 sb a1,3(a4) + 8001a398: 2d50b0ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 8001a39c: 00044503 lbu a0,0(s0) + 8001a3a0: 00013403 ld s0,0(sp) + 8001a3a4: 00813083 ld ra,8(sp) + 8001a3a8: 01010113 addi sp,sp,16 + 8001a3ac: 47d0b06f j 80026028 <_Z10FixMMC3CHRi> + +000000008001a3b0 <_ZL6M121CWjh>: + 8001a3b0: 000a9697 auipc a3,0xa9 + 8001a3b4: 8106a683 lw a3,-2032(a3) # 800c2bc0 + 8001a3b8: 000a8717 auipc a4,0xa8 + 8001a3bc: 36872703 lw a4,872(a4) # 800c2720 + 8001a3c0: 02e68463 beq a3,a4,8001a3e8 <_ZL6M121CWjh+0x38> + 8001a3c4: 001b2717 auipc a4,0x1b2 + 8001a3c8: e9874703 lbu a4,-360(a4) # 801cc25c + 8001a3cc: 0057171b slliw a4,a4,0x5 + 8001a3d0: 00e547b3 xor a5,a0,a4 + 8001a3d4: 03379713 slli a4,a5,0x33 + 8001a3d8: 00074663 bltz a4,8001a3e4 <_ZL6M121CWjh+0x34> + 8001a3dc: 1005e593 ori a1,a1,256 + 8001a3e0: ac5f606f j 80010ea4 <_Z7setchr1jj> + 8001a3e4: ac1f606f j 80010ea4 <_Z7setchr1jj> + 8001a3e8: 001b2797 auipc a5,0x1b2 + 8001a3ec: e6b7c783 lbu a5,-405(a5) # 801cc253 + 8001a3f0: 0017979b slliw a5,a5,0x1 + 8001a3f4: 1007f793 andi a5,a5,256 + 8001a3f8: 00b7e5b3 or a1,a5,a1 + 8001a3fc: aa9f606f j 80010ea4 <_Z7setchr1jj> + +000000008001a400 <_ZL6M121PWjh>: + 8001a400: ff010113 addi sp,sp,-16 + 8001a404: 00813023 sd s0,0(sp) + 8001a408: 001b2417 auipc s0,0x1b2 + 8001a40c: e4840413 addi s0,s0,-440 # 801cc250 + 8001a410: 00344783 lbu a5,3(s0) + 8001a414: 00544703 lbu a4,5(s0) + 8001a418: 01f5f593 andi a1,a1,31 + 8001a41c: 4027d79b sraiw a5,a5,0x2 + 8001a420: 0207f793 andi a5,a5,32 + 8001a424: 00113423 sd ra,8(sp) + 8001a428: 03f77713 andi a4,a4,63 + 8001a42c: 00f5e5b3 or a1,a1,a5 + 8001a430: 04070c63 beqz a4,8001a488 <_ZL6M121PWjh+0x88> + 8001a434: e68f60ef jal ra,80010a9c <_Z7setprg8jj> + 8001a438: 00344783 lbu a5,3(s0) + 8001a43c: 00044583 lbu a1,0(s0) + 8001a440: 0000e537 lui a0,0xe + 8001a444: 4027d79b sraiw a5,a5,0x2 + 8001a448: 0207f793 andi a5,a5,32 + 8001a44c: 00b7e5b3 or a1,a5,a1 + 8001a450: e4cf60ef jal ra,80010a9c <_Z7setprg8jj> + 8001a454: 00344783 lbu a5,3(s0) + 8001a458: 00144583 lbu a1,1(s0) + 8001a45c: 0000c537 lui a0,0xc + 8001a460: 4027d79b sraiw a5,a5,0x2 + 8001a464: 0207f793 andi a5,a5,32 + 8001a468: 00b7e5b3 or a1,a5,a1 + 8001a46c: e30f60ef jal ra,80010a9c <_Z7setprg8jj> + 8001a470: 00344783 lbu a5,3(s0) + 8001a474: 00244583 lbu a1,2(s0) + 8001a478: 0000a537 lui a0,0xa + 8001a47c: 4027d79b sraiw a5,a5,0x2 + 8001a480: 0207f793 andi a5,a5,32 + 8001a484: 00b7e5b3 or a1,a5,a1 + 8001a488: 00013403 ld s0,0(sp) + 8001a48c: 00813083 ld ra,8(sp) + 8001a490: 01010113 addi sp,sp,16 + 8001a494: e08f606f j 80010a9c <_Z7setprg8jj> + +000000008001a498 <_Z14Mapper121_InitP8CartInfo>: + 8001a498: ff010113 addi sp,sp,-16 + 8001a49c: 00000713 li a4,0 + 8001a4a0: 00800693 li a3,8 + 8001a4a4: 10000613 li a2,256 + 8001a4a8: 08000593 li a1,128 + 8001a4ac: 00813023 sd s0,0(sp) + 8001a4b0: 00113423 sd ra,8(sp) + 8001a4b4: 00050413 mv s0,a0 + 8001a4b8: 3610c0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 8001a4bc: 00000797 auipc a5,0x0 + 8001a4c0: f4478793 addi a5,a5,-188 # 8001a400 <_ZL6M121PWjh> + 8001a4c4: 001b2717 auipc a4,0x1b2 + 8001a4c8: dcf73a23 sd a5,-556(a4) # 801cc298 + 8001a4cc: 00000797 auipc a5,0x0 + 8001a4d0: ee478793 addi a5,a5,-284 # 8001a3b0 <_ZL6M121CWjh> + 8001a4d4: 001b2717 auipc a4,0x1b2 + 8001a4d8: daf73623 sd a5,-596(a4) # 801cc280 + 8001a4dc: 00000797 auipc a5,0x0 + 8001a4e0: d0878793 addi a5,a5,-760 # 8001a1e4 <_ZL9M121Powerv> + 8001a4e4: 00f43023 sd a5,0(s0) + 8001a4e8: 00013403 ld s0,0(sp) + 8001a4ec: 00813083 ld ra,8(sp) + 8001a4f0: 0002b697 auipc a3,0x2b + 8001a4f4: 00068693 mv a3,a3 + 8001a4f8: 00000613 li a2,0 + 8001a4fc: 00800593 li a1,8 + 8001a500: 001b2517 auipc a0,0x1b2 + 8001a504: d5050513 addi a0,a0,-688 # 801cc250 + 8001a508: 01010113 addi sp,sp,16 + 8001a50c: b05e506f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001a510 <_ZL8QTAiReadj>: + 8001a510: 000ad617 auipc a2,0xad + 8001a514: be060613 addi a2,a2,-1056 # 800c70f0 <_ZL4regs> + 8001a518: 00c64803 lbu a6,12(a2) + 8001a51c: 00d64583 lbu a1,13(a2) + 8001a520: 00b64603 lbu a2,11(a2) + 8001a524: 4058579b sraiw a5,a6,0x5 + 8001a528: 0037f793 andi a5,a5,3 + 8001a52c: 00379713 slli a4,a5,0x3 + 8001a530: 4045d69b sraiw a3,a1,0x4 + 8001a534: 0002b797 auipc a5,0x2b + 8001a538: 15478793 addi a5,a5,340 # 80045688 <_ZL8conv_tbl> + 8001a53c: 0076f693 andi a3,a3,7 + 8001a540: 00e787b3 add a5,a5,a4 + 8001a544: 00d787b3 add a5,a5,a3 + 8001a548: 0007c683 lbu a3,0(a5) + 8001a54c: 00561713 slli a4,a2,0x5 + 8001a550: 4015d79b sraiw a5,a1,0x1 + 8001a554: f8077713 andi a4,a4,-128 + 8001a558: 0077f793 andi a5,a5,7 + 8001a55c: 00e7e7b3 or a5,a5,a4 + 8001a560: 03f6f713 andi a4,a3,63 + 8001a564: 00e7e7b3 or a5,a5,a4 + 8001a568: 0406f893 andi a7,a3,64 + 8001a56c: 00050713 mv a4,a0 + 8001a570: 0ff7f793 andi a5,a5,255 + 8001a574: 02088463 beqz a7,8001a59c <_ZL8QTAiReadj+0x8c> + 8001a578: ffb7f793 andi a5,a5,-5 + 8001a57c: 0407e513 ori a0,a5,64 + 8001a580: 0000e6b7 lui a3,0xe + 8001a584: d0068793 addi a5,a3,-768 # dd00 <_entry_offset+0xdd00> + 8001a588: 00f70863 beq a4,a5,8001a598 <_ZL8QTAiReadj+0x88> + 8001a58c: c0068693 addi a3,a3,-1024 + 8001a590: 00000513 li a0,0 + 8001a594: 02d70063 beq a4,a3,8001a5b4 <_ZL8QTAiReadj+0xa4> + 8001a598: 00008067 ret + 8001a59c: 0186969b slliw a3,a3,0x18 + 8001a5a0: 4186d69b sraiw a3,a3,0x18 + 8001a5a4: 0447e513 ori a0,a5,68 + 8001a5a8: fc06cce3 bltz a3,8001a580 <_ZL8QTAiReadj+0x70> + 8001a5ac: 0407e513 ori a0,a5,64 + 8001a5b0: fd1ff06f j 8001a580 <_ZL8QTAiReadj+0x70> + 8001a5b4: 00367793 andi a5,a2,3 + 8001a5b8: 0075959b slliw a1,a1,0x7 + 8001a5bc: 0028181b slliw a6,a6,0x2 + 8001a5c0: 07c87513 andi a0,a6,124 + 8001a5c4: 00b7e7b3 or a5,a5,a1 + 8001a5c8: 00a7e7b3 or a5,a5,a0 + 8001a5cc: 0ff7f513 andi a0,a5,255 + 8001a5d0: 00008067 ret + +000000008001a5d4 <_ZL4Syncv>: + 8001a5d4: ff010113 addi sp,sp,-16 + 8001a5d8: 00813023 sd s0,0(sp) + 8001a5dc: 000ad417 auipc s0,0xad + 8001a5e0: b1440413 addi s0,s0,-1260 # 800c70f0 <_ZL4regs> + 8001a5e4: 00544603 lbu a2,5(s0) + 8001a5e8: 00000593 li a1,0 + 8001a5ec: 01000513 li a0,16 + 8001a5f0: 00167613 andi a2,a2,1 + 8001a5f4: 00113423 sd ra,8(sp) + 8001a5f8: 86df60ef jal ra,80010e64 <_Z8setchr4rijj> + 8001a5fc: 00100613 li a2,1 + 8001a600: 000015b7 lui a1,0x1 + 8001a604: 01000513 li a0,16 + 8001a608: 85df60ef jal ra,80010e64 <_Z8setchr4rijj> + 8001a60c: 00044783 lbu a5,0(s0) + 8001a610: 000065b7 lui a1,0x6 + 8001a614: 01000513 li a0,16 + 8001a618: 0017f613 andi a2,a5,1 + 8001a61c: 4027d79b sraiw a5,a5,0x2 + 8001a620: 00f66633 or a2,a2,a5 + 8001a624: 0006061b sext.w a2,a2 + 8001a628: 9b4f60ef jal ra,800107dc <_Z8setprg4rijj> + 8001a62c: 00144783 lbu a5,1(s0) + 8001a630: 000075b7 lui a1,0x7 + 8001a634: 01000513 li a0,16 + 8001a638: 0017f613 andi a2,a5,1 + 8001a63c: 4027d79b sraiw a5,a5,0x2 + 8001a640: 00f66633 or a2,a2,a5 + 8001a644: 0006061b sext.w a2,a2 + 8001a648: 994f60ef jal ra,800107dc <_Z8setprg4rijj> + 8001a64c: 000a8797 auipc a5,0xa8 + 8001a650: 45c7b783 ld a5,1116(a5) # 800c2aa8 + 8001a654: 06078e63 beqz a5,8001a6d0 <_ZL4Syncv+0xfc> + 8001a658: 00244603 lbu a2,2(s0) + 8001a65c: 000085b7 lui a1,0x8 + 8001a660: 4066551b sraiw a0,a2,0x6 + 8001a664: 00157513 andi a0,a0,1 + 8001a668: 03f67613 andi a2,a2,63 + 8001a66c: a7cf60ef jal ra,800108e8 <_Z8setprg8rijj> + 8001a670: 00344603 lbu a2,3(s0) + 8001a674: 0000a5b7 lui a1,0xa + 8001a678: 4066551b sraiw a0,a2,0x6 + 8001a67c: 00157513 andi a0,a0,1 + 8001a680: 03f67613 andi a2,a2,63 + 8001a684: a64f60ef jal ra,800108e8 <_Z8setprg8rijj> + 8001a688: 00444603 lbu a2,4(s0) + 8001a68c: 0000c5b7 lui a1,0xc + 8001a690: 4066551b sraiw a0,a2,0x6 + 8001a694: 00157513 andi a0,a0,1 + 8001a698: 03f67613 andi a2,a2,63 + 8001a69c: a4cf60ef jal ra,800108e8 <_Z8setprg8rijj> + 8001a6a0: fff00613 li a2,-1 + 8001a6a4: 0000e5b7 lui a1,0xe + 8001a6a8: 00100513 li a0,1 + 8001a6ac: a3cf60ef jal ra,800108e8 <_Z8setprg8rijj> + 8001a6b0: 00a44503 lbu a0,10(s0) + 8001a6b4: 00013403 ld s0,0(sp) + 8001a6b8: 00813083 ld ra,8(sp) + 8001a6bc: 00155513 srli a0,a0,0x1 + 8001a6c0: 00154513 xori a0,a0,1 + 8001a6c4: 00157513 andi a0,a0,1 + 8001a6c8: 01010113 addi sp,sp,16 + 8001a6cc: 97df606f j 80011048 <_Z9setmirrori> + 8001a6d0: 00244783 lbu a5,2(s0) + 8001a6d4: 00008537 lui a0,0x8 + 8001a6d8: 4027d59b sraiw a1,a5,0x2 + 8001a6dc: 0105f593 andi a1,a1,16 + 8001a6e0: 03f7f793 andi a5,a5,63 + 8001a6e4: 00b785bb addw a1,a5,a1 + 8001a6e8: bb4f60ef jal ra,80010a9c <_Z7setprg8jj> + 8001a6ec: 00344783 lbu a5,3(s0) + 8001a6f0: 0000a537 lui a0,0xa + 8001a6f4: 4027d59b sraiw a1,a5,0x2 + 8001a6f8: 0105f593 andi a1,a1,16 + 8001a6fc: 03f7f793 andi a5,a5,63 + 8001a700: 00b785bb addw a1,a5,a1 + 8001a704: b98f60ef jal ra,80010a9c <_Z7setprg8jj> + 8001a708: 00444783 lbu a5,4(s0) + 8001a70c: 0000c537 lui a0,0xc + 8001a710: 4027d59b sraiw a1,a5,0x2 + 8001a714: 0105f593 andi a1,a1,16 + 8001a718: 03f7f793 andi a5,a5,63 + 8001a71c: 00b785bb addw a1,a5,a1 + 8001a720: b7cf60ef jal ra,80010a9c <_Z7setprg8jj> + 8001a724: 04f00593 li a1,79 + 8001a728: 0000e537 lui a0,0xe + 8001a72c: b70f60ef jal ra,80010a9c <_Z7setprg8jj> + 8001a730: f81ff06f j 8001a6b0 <_ZL4Syncv+0xdc> + +000000008001a734 <_ZL12StateRestorei>: + 8001a734: ea1ff06f j 8001a5d4 <_ZL4Syncv> + +000000008001a738 <_ZL9QTAiClosev>: + 8001a738: ff010113 addi sp,sp,-16 + 8001a73c: 00113423 sd ra,8(sp) + 8001a740: 001b2517 auipc a0,0x1b2 + 8001a744: 82053503 ld a0,-2016(a0) # 801cbf60 <_ZL6CHRRAM> + 8001a748: 00050463 beqz a0,8001a750 <_ZL9QTAiClosev+0x18> + 8001a74c: df5f70ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8001a750: 001b2797 auipc a5,0x1b2 + 8001a754: 8007b823 sd zero,-2032(a5) # 801cbf60 <_ZL6CHRRAM> + 8001a758: 001b1517 auipc a0,0x1b1 + 8001a75c: 7f853503 ld a0,2040(a0) # 801cbf50 <_ZL4WRAM> + 8001a760: 00050463 beqz a0,8001a768 <_ZL9QTAiClosev+0x30> + 8001a764: dddf70ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8001a768: 00813083 ld ra,8(sp) + 8001a76c: 001b1797 auipc a5,0x1b1 + 8001a770: 7e07b223 sd zero,2020(a5) # 801cbf50 <_ZL4WRAM> + 8001a774: 01010113 addi sp,sp,16 + 8001a778: 00008067 ret + +000000008001a77c <_ZL9QTAiPowerv>: + 8001a77c: ff010113 addi sp,sp,-16 + 8001a780: 00813023 sd s0,0(sp) + 8001a784: 00010437 lui s0,0x10 + 8001a788: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8001a78c: ffff6617 auipc a2,0xffff6 + 8001a790: ed460613 addi a2,a2,-300 # 80010660 <_Z6CartBRj> + 8001a794: 00006537 lui a0,0x6 + 8001a798: 00113423 sd ra,8(sp) + 8001a79c: 280190ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001a7a0: 000085b7 lui a1,0x8 + 8001a7a4: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 8001a7a8: ffff6617 auipc a2,0xffff6 + 8001a7ac: ee460613 addi a2,a2,-284 # 8001068c <_Z6CartBWjh> + 8001a7b0: 00006537 lui a0,0x6 + 8001a7b4: 374190ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001a7b8: fff40593 addi a1,s0,-1 + 8001a7bc: 00000617 auipc a2,0x0 + 8001a7c0: 06060613 addi a2,a2,96 # 8001a81c <_ZL9QTAiWritejh> + 8001a7c4: 00008537 lui a0,0x8 + 8001a7c8: 360190ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001a7cc: 0000e437 lui s0,0xe + 8001a7d0: c0040593 addi a1,s0,-1024 # dc00 <_entry_offset+0xdc00> + 8001a7d4: 00058513 mv a0,a1 + 8001a7d8: 00000617 auipc a2,0x0 + 8001a7dc: d3860613 addi a2,a2,-712 # 8001a510 <_ZL8QTAiReadj> + 8001a7e0: 23c190ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001a7e4: d0040593 addi a1,s0,-768 + 8001a7e8: 00058513 mv a0,a1 + 8001a7ec: 00000617 auipc a2,0x0 + 8001a7f0: d2460613 addi a2,a2,-732 # 8001a510 <_ZL8QTAiReadj> + 8001a7f4: 228190ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001a7f8: 001b1617 auipc a2,0x1b1 + 8001a7fc: 75863603 ld a2,1880(a2) # 801cbf50 <_ZL4WRAM> + 8001a800: 000065b7 lui a1,0x6 + 8001a804: 01000513 li a0,16 + 8001a808: 80de50ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 8001a80c: 00013403 ld s0,0(sp) + 8001a810: 00813083 ld ra,8(sp) + 8001a814: 01010113 addi sp,sp,16 + 8001a818: dbdff06f j 8001a5d4 <_ZL4Syncv> + +000000008001a81c <_ZL9QTAiWritejh>: + 8001a81c: 0085579b srliw a5,a0,0x8 + 8001a820: 00f7f793 andi a5,a5,15 + 8001a824: ff010113 addi sp,sp,-16 + 8001a828: 000ad697 auipc a3,0xad + 8001a82c: 8c868693 addi a3,a3,-1848 # 800c70f0 <_ZL4regs> + 8001a830: 00f68733 add a4,a3,a5 + 8001a834: 00113423 sd ra,8(sp) + 8001a838: 0000e7b7 lui a5,0xe + 8001a83c: 00b70023 sb a1,0(a4) + 8001a840: 80078713 addi a4,a5,-2048 # d800 <_entry_offset+0xd800> + 8001a844: 06e50663 beq a0,a4,8001a8b0 <_ZL9QTAiWritejh+0x94> + 8001a848: 02a77863 bgeu a4,a0,8001a878 <_ZL9QTAiWritejh+0x5c> + 8001a84c: 90078713 addi a4,a5,-1792 + 8001a850: 08e50263 beq a0,a4,8001a8d4 <_ZL9QTAiWritejh+0xb8> + 8001a854: a0078793 addi a5,a5,-1536 + 8001a858: 00f51a63 bne a0,a5,8001a86c <_ZL9QTAiWritejh+0x50> + 8001a85c: 00a6c783 lbu a5,10(a3) + 8001a860: 0037f793 andi a5,a5,3 + 8001a864: 001b2717 auipc a4,0x1b2 + 8001a868: f2f70c23 sb a5,-200(a4) # 801cc79c + 8001a86c: 00813083 ld ra,8(sp) + 8001a870: 01010113 addi sp,sp,16 + 8001a874: d61ff06f j 8001a5d4 <_ZL4Syncv> + 8001a878: 0000d7b7 lui a5,0xd + 8001a87c: 60078713 addi a4,a5,1536 # d600 <_entry_offset+0xd600> + 8001a880: 08e50863 beq a0,a4,8001a910 <_ZL9QTAiWritejh+0xf4> + 8001a884: 70078793 addi a5,a5,1792 + 8001a888: fef512e3 bne a0,a5,8001a86c <_ZL9QTAiWritejh+0x50> + 8001a88c: 001b1717 auipc a4,0x1b1 + 8001a890: 6e070713 addi a4,a4,1760 # 801cbf6c <_ZL8IRQLatch> + 8001a894: 00074783 lbu a5,0(a4) + 8001a898: 0085959b slliw a1,a1,0x8 + 8001a89c: 00813083 ld ra,8(sp) + 8001a8a0: 00b7e5b3 or a1,a5,a1 + 8001a8a4: 00b72023 sw a1,0(a4) + 8001a8a8: 01010113 addi sp,sp,16 + 8001a8ac: d29ff06f j 8001a5d4 <_ZL4Syncv> + 8001a8b0: 001b1797 auipc a5,0x1b1 + 8001a8b4: 6a87c783 lbu a5,1704(a5) # 801cbf58 <_ZL5K4IRQ> + 8001a8b8: 00100513 li a0,1 + 8001a8bc: 001b1717 auipc a4,0x1b1 + 8001a8c0: 68f708a3 sb a5,1681(a4) # 801cbf4d <_ZL4IRQa> + 8001a8c4: c8ce60ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8001a8c8: 00813083 ld ra,8(sp) + 8001a8cc: 01010113 addi sp,sp,16 + 8001a8d0: d05ff06f j 8001a5d4 <_ZL4Syncv> + 8001a8d4: 0025f793 andi a5,a1,2 + 8001a8d8: 001b1717 auipc a4,0x1b1 + 8001a8dc: 69472703 lw a4,1684(a4) # 801cbf6c <_ZL8IRQLatch> + 8001a8e0: 0015f593 andi a1,a1,1 + 8001a8e4: 00100513 li a0,1 + 8001a8e8: 001b1697 auipc a3,0x1b1 + 8001a8ec: 68e6a023 sw a4,1664(a3) # 801cbf68 <_ZL8IRQCount> + 8001a8f0: 001b1717 auipc a4,0x1b1 + 8001a8f4: 64f70ea3 sb a5,1629(a4) # 801cbf4d <_ZL4IRQa> + 8001a8f8: 001b1797 auipc a5,0x1b1 + 8001a8fc: 66b78023 sb a1,1632(a5) # 801cbf58 <_ZL5K4IRQ> + 8001a900: c50e60ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8001a904: 00813083 ld ra,8(sp) + 8001a908: 01010113 addi sp,sp,16 + 8001a90c: cc9ff06f j 8001a5d4 <_ZL4Syncv> + 8001a910: 001b1697 auipc a3,0x1b1 + 8001a914: 65c68693 addi a3,a3,1628 # 801cbf6c <_ZL8IRQLatch> + 8001a918: 0006a783 lw a5,0(a3) + 8001a91c: 00010737 lui a4,0x10 + 8001a920: f0070713 addi a4,a4,-256 # ff00 <_entry_offset+0xff00> + 8001a924: 00e7f7b3 and a5,a5,a4 + 8001a928: 00813083 ld ra,8(sp) + 8001a92c: 00b7e5b3 or a1,a5,a1 + 8001a930: 00b6a023 sw a1,0(a3) + 8001a934: 01010113 addi sp,sp,16 + 8001a938: c9dff06f j 8001a5d4 <_ZL4Syncv> + +000000008001a93c <_ZL7VRC5IRQi>: + 8001a93c: 001b1797 auipc a5,0x1b1 + 8001a940: 6117c783 lbu a5,1553(a5) # 801cbf4d <_ZL4IRQa> + 8001a944: 02078e63 beqz a5,8001a980 <_ZL7VRC5IRQi+0x44> + 8001a948: ff010113 addi sp,sp,-16 + 8001a94c: 00813023 sd s0,0(sp) + 8001a950: 001b1417 auipc s0,0x1b1 + 8001a954: 61840413 addi s0,s0,1560 # 801cbf68 <_ZL8IRQCount> + 8001a958: 00042783 lw a5,0(s0) + 8001a95c: 00113423 sd ra,8(sp) + 8001a960: 00a7853b addw a0,a5,a0 + 8001a964: 00a42023 sw a0,0(s0) + 8001a968: 02f51793 slli a5,a0,0x2f + 8001a96c: 0007cc63 bltz a5,8001a984 <_ZL7VRC5IRQi+0x48> + 8001a970: 00813083 ld ra,8(sp) + 8001a974: 00013403 ld s0,0(sp) + 8001a978: 01010113 addi sp,sp,16 + 8001a97c: 00008067 ret + 8001a980: 00008067 ret + 8001a984: 00100513 li a0,1 + 8001a988: bb0e60ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 8001a98c: 001b1797 auipc a5,0x1b1 + 8001a990: 5e07a783 lw a5,1504(a5) # 801cbf6c <_ZL8IRQLatch> + 8001a994: 00813083 ld ra,8(sp) + 8001a998: 00f42023 sw a5,0(s0) + 8001a99c: 00013403 ld s0,0(sp) + 8001a9a0: 01010113 addi sp,sp,16 + 8001a9a4: 00008067 ret + +000000008001a9a8 <_Z9QTAi_InitP8CartInfo>: + 8001a9a8: fe010113 addi sp,sp,-32 + 8001a9ac: 00100793 li a5,1 + 8001a9b0: 00113c23 sd ra,24(sp) + 8001a9b4: 00813823 sd s0,16(sp) + 8001a9b8: 00913423 sd s1,8(sp) + 8001a9bc: 001b2717 auipc a4,0x1b2 + 8001a9c0: d4f72a23 sw a5,-684(a4) # 801cc710 + 8001a9c4: 00000797 auipc a5,0x0 + 8001a9c8: db878793 addi a5,a5,-584 # 8001a77c <_ZL9QTAiPowerv> + 8001a9cc: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 8001a9d0: 00000797 auipc a5,0x0 + 8001a9d4: d6878793 addi a5,a5,-664 # 8001a738 <_ZL9QTAiClosev> + 8001a9d8: 00f53823 sd a5,16(a0) + 8001a9dc: 00000797 auipc a5,0x0 + 8001a9e0: d5878793 addi a5,a5,-680 # 8001a734 <_ZL12StateRestorei> + 8001a9e4: 00050413 mv s0,a0 + 8001a9e8: 001b2717 auipc a4,0x1b2 + 8001a9ec: c6f73823 sd a5,-912(a4) # 801cc658 + 8001a9f0: 00002537 lui a0,0x2 + 8001a9f4: 00000797 auipc a5,0x0 + 8001a9f8: f4878793 addi a5,a5,-184 # 8001a93c <_ZL7VRC5IRQi> + 8001a9fc: 001b1717 auipc a4,0x1b1 + 8001aa00: 14f73223 sd a5,324(a4) # 801cbb40 + 8001aa04: a69f70ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8001aa08: 00050593 mv a1,a0 + 8001aa0c: 001b1497 auipc s1,0x1b1 + 8001aa10: 55448493 addi s1,s1,1364 # 801cbf60 <_ZL6CHRRAM> + 8001aa14: 00100693 li a3,1 + 8001aa18: 00002637 lui a2,0x2 + 8001aa1c: 01000513 li a0,16 + 8001aa20: 00b4b023 sd a1,0(s1) + 8001aa24: ba1f50ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 8001aa28: 0004b503 ld a0,0(s1) + 8001aa2c: 0002b697 auipc a3,0x2b + 8001aa30: c4c68693 addi a3,a3,-948 # 80045678 <_ZL10prot_array+0x10> + 8001aa34: 00000613 li a2,0 + 8001aa38: 000025b7 lui a1,0x2 + 8001aa3c: dd4e50ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001aa40: 00004537 lui a0,0x4 + 8001aa44: a29f70ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8001aa48: 00050593 mv a1,a0 + 8001aa4c: 001b1497 auipc s1,0x1b1 + 8001aa50: 50448493 addi s1,s1,1284 # 801cbf50 <_ZL4WRAM> + 8001aa54: 00100693 li a3,1 + 8001aa58: 00004637 lui a2,0x4 + 8001aa5c: 01000513 li a0,16 + 8001aa60: 00b4b023 sd a1,0(s1) + 8001aa64: a91f50ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8001aa68: 0004b503 ld a0,0(s1) + 8001aa6c: 0002b697 auipc a3,0x2b + 8001aa70: 8bc68693 addi a3,a3,-1860 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 8001aa74: 00000613 li a2,0 + 8001aa78: 000045b7 lui a1,0x4 + 8001aa7c: d94e50ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001aa80: 04c42783 lw a5,76(s0) + 8001aa84: 00078a63 beqz a5,8001aa98 <_Z9QTAi_InitP8CartInfo+0xf0> + 8001aa88: 0004b783 ld a5,0(s1) + 8001aa8c: 00004737 lui a4,0x4 + 8001aa90: 02e42c23 sw a4,56(s0) + 8001aa94: 00f43c23 sd a5,24(s0) + 8001aa98: 01013403 ld s0,16(sp) + 8001aa9c: 01813083 ld ra,24(sp) + 8001aaa0: 00813483 ld s1,8(sp) + 8001aaa4: 00000693 li a3,0 + 8001aaa8: 00000613 li a2,0 + 8001aaac: fff00593 li a1,-1 + 8001aab0: 00030517 auipc a0,0x30 + 8001aab4: 31850513 addi a0,a0,792 # 8004adc8 <_ZL9StateRegs> + 8001aab8: 02010113 addi sp,sp,32 + 8001aabc: d54e506f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001aac0 <_ZL8M40Resetv>: + 8001aac0: 00008067 ret + +000000008001aac4 <_ZL4Syncv>: + 8001aac4: ff010113 addi sp,sp,-16 + 8001aac8: ffe00593 li a1,-2 + 8001aacc: 00006537 lui a0,0x6 + 8001aad0: 00113423 sd ra,8(sp) + 8001aad4: fc9f50ef jal ra,80010a9c <_Z7setprg8jj> + 8001aad8: ffc00593 li a1,-4 + 8001aadc: 00008537 lui a0,0x8 + 8001aae0: fbdf50ef jal ra,80010a9c <_Z7setprg8jj> + 8001aae4: ffd00593 li a1,-3 + 8001aae8: 0000a537 lui a0,0xa + 8001aaec: fb1f50ef jal ra,80010a9c <_Z7setprg8jj> + 8001aaf0: 001b1597 auipc a1,0x1b1 + 8001aaf4: 4805c583 lbu a1,1152(a1) # 801cbf70 <_ZL3reg> + 8001aaf8: 0000c537 lui a0,0xc + 8001aafc: fa1f50ef jal ra,80010a9c <_Z7setprg8jj> + 8001ab00: 0000e537 lui a0,0xe + 8001ab04: fff00593 li a1,-1 + 8001ab08: f95f50ef jal ra,80010a9c <_Z7setprg8jj> + 8001ab0c: 00813083 ld ra,8(sp) + 8001ab10: 00000513 li a0,0 + 8001ab14: 01010113 addi sp,sp,16 + 8001ab18: becf606f j 80010f04 <_Z7setchr8j> + +000000008001ab1c <_ZL12StateRestorei>: + 8001ab1c: fa9ff06f j 8001aac4 <_ZL4Syncv> + +000000008001ab20 <_ZL8M40Powerv>: + 8001ab20: ff010113 addi sp,sp,-16 + 8001ab24: 00113423 sd ra,8(sp) + 8001ab28: 00813023 sd s0,0(sp) + 8001ab2c: 001b1797 auipc a5,0x1b1 + 8001ab30: 44078223 sb zero,1092(a5) # 801cbf70 <_ZL3reg> + 8001ab34: 00010437 lui s0,0x10 + 8001ab38: f8dff0ef jal ra,8001aac4 <_ZL4Syncv> + 8001ab3c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8001ab40: ffff6617 auipc a2,0xffff6 + 8001ab44: b2060613 addi a2,a2,-1248 # 80010660 <_Z6CartBRj> + 8001ab48: 00006537 lui a0,0x6 + 8001ab4c: 6d1180ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001ab50: fff40593 addi a1,s0,-1 + 8001ab54: 00013403 ld s0,0(sp) + 8001ab58: 00813083 ld ra,8(sp) + 8001ab5c: 00000617 auipc a2,0x0 + 8001ab60: 05460613 addi a2,a2,84 # 8001abb0 <_ZL8M40Writejh> + 8001ab64: 00008537 lui a0,0x8 + 8001ab68: 01010113 addi sp,sp,16 + 8001ab6c: 7bd1806f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008001ab70 <_ZL10M40IRQHooki>: + 8001ab70: 001b1797 auipc a5,0x1b1 + 8001ab74: 4047a783 lw a5,1028(a5) # 801cbf74 <_ZL4IRQa> + 8001ab78: 02078263 beqz a5,8001ab9c <_ZL10M40IRQHooki+0x2c> + 8001ab7c: 001b1797 auipc a5,0x1b1 + 8001ab80: 3fc78793 addi a5,a5,1020 # 801cbf78 <_ZL8IRQCount> + 8001ab84: 0007a703 lw a4,0(a5) + 8001ab88: 000016b7 lui a3,0x1 + 8001ab8c: 00d77a63 bgeu a4,a3,8001aba0 <_ZL10M40IRQHooki+0x30> + 8001ab90: 00e5053b addw a0,a0,a4 + 8001ab94: 00a7a023 sw a0,0(a5) + 8001ab98: 00008067 ret + 8001ab9c: 00008067 ret + 8001aba0: 00100513 li a0,1 + 8001aba4: 001b1797 auipc a5,0x1b1 + 8001aba8: 3c07a823 sw zero,976(a5) # 801cbf74 <_ZL4IRQa> + 8001abac: 98ce606f j 80000d38 <_Z14X6502_IRQBegini> + +000000008001abb0 <_ZL8M40Writejh>: + 8001abb0: 0000e7b7 lui a5,0xe + 8001abb4: 00f57533 and a0,a0,a5 + 8001abb8: 0000a7b7 lui a5,0xa + 8001abbc: 00f50c63 beq a0,a5,8001abd4 <_ZL8M40Writejh+0x24> + 8001abc0: 0000e7b7 lui a5,0xe + 8001abc4: 02f50c63 beq a0,a5,8001abfc <_ZL8M40Writejh+0x4c> + 8001abc8: 000087b7 lui a5,0x8 + 8001abcc: 00f50c63 beq a0,a5,8001abe4 <_ZL8M40Writejh+0x34> + 8001abd0: 00008067 ret + 8001abd4: 00100793 li a5,1 + 8001abd8: 001b1717 auipc a4,0x1b1 + 8001abdc: 38f72e23 sw a5,924(a4) # 801cbf74 <_ZL4IRQa> + 8001abe0: 00008067 ret + 8001abe4: 00100513 li a0,1 + 8001abe8: 001b1797 auipc a5,0x1b1 + 8001abec: 3807a623 sw zero,908(a5) # 801cbf74 <_ZL4IRQa> + 8001abf0: 001b1797 auipc a5,0x1b1 + 8001abf4: 3807a423 sw zero,904(a5) # 801cbf78 <_ZL8IRQCount> + 8001abf8: 958e606f j 80000d50 <_Z12X6502_IRQEndi> + 8001abfc: 0075f593 andi a1,a1,7 + 8001ac00: 001b1797 auipc a5,0x1b1 + 8001ac04: 36b78823 sb a1,880(a5) # 801cbf70 <_ZL3reg> + 8001ac08: ebdff06f j 8001aac4 <_ZL4Syncv> + +000000008001ac0c <_Z13Mapper40_InitP8CartInfo>: + 8001ac0c: 00000797 auipc a5,0x0 + 8001ac10: f1478793 addi a5,a5,-236 # 8001ab20 <_ZL8M40Powerv> + 8001ac14: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 8001ac18: 00000797 auipc a5,0x0 + 8001ac1c: ea878793 addi a5,a5,-344 # 8001aac0 <_ZL8M40Resetv> + 8001ac20: 00f53423 sd a5,8(a0) + 8001ac24: 00000797 auipc a5,0x0 + 8001ac28: f4c78793 addi a5,a5,-180 # 8001ab70 <_ZL10M40IRQHooki> + 8001ac2c: 001b1717 auipc a4,0x1b1 + 8001ac30: f0f73a23 sd a5,-236(a4) # 801cbb40 + 8001ac34: 00000797 auipc a5,0x0 + 8001ac38: ee878793 addi a5,a5,-280 # 8001ab1c <_ZL12StateRestorei> + 8001ac3c: 00000693 li a3,0 + 8001ac40: 00000613 li a2,0 + 8001ac44: fff00593 li a1,-1 + 8001ac48: 00030517 auipc a0,0x30 + 8001ac4c: 21050513 addi a0,a0,528 # 8004ae58 <_ZL9StateRegs> + 8001ac50: 001b2717 auipc a4,0x1b2 + 8001ac54: a0f73423 sd a5,-1528(a4) # 801cc658 + 8001ac58: bb8e506f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001ac5c <_ZL4Syncv>: + 8001ac5c: ff010113 addi sp,sp,-16 + 8001ac60: 00000593 li a1,0 + 8001ac64: 00008537 lui a0,0x8 + 8001ac68: 00813023 sd s0,0(sp) + 8001ac6c: 00113423 sd ra,8(sp) + 8001ac70: 9a4f60ef jal ra,80010e14 <_Z8setprg32jj> + 8001ac74: 000a8717 auipc a4,0xa8 + 8001ac78: aac72703 lw a4,-1364(a4) # 800c2720 + 8001ac7c: 000027b7 lui a5,0x2 + 8001ac80: 001b1417 auipc s0,0x1b1 + 8001ac84: 2fc40413 addi s0,s0,764 # 801cbf7c <_ZL6latche> + 8001ac88: 02f70663 beq a4,a5,8001acb4 <_ZL4Syncv+0x58> + 8001ac8c: 00045503 lhu a0,0(s0) + 8001ac90: 00157513 andi a0,a0,1 + 8001ac94: a70f60ef jal ra,80010f04 <_Z7setchr8j> + 8001ac98: 00045503 lhu a0,0(s0) + 8001ac9c: 00013403 ld s0,0(sp) + 8001aca0: 00813083 ld ra,8(sp) + 8001aca4: 00157513 andi a0,a0,1 + 8001aca8: 0025051b addiw a0,a0,2 + 8001acac: 01010113 addi sp,sp,16 + 8001acb0: b98f606f j 80011048 <_Z9setmirrori> + 8001acb4: 00045583 lhu a1,0(s0) + 8001acb8: 00000513 li a0,0 + 8001acbc: 0015f593 andi a1,a1,1 + 8001acc0: a24f60ef jal ra,80010ee4 <_Z7setchr4jj> + 8001acc4: 00045583 lhu a1,0(s0) + 8001acc8: 00001537 lui a0,0x1 + 8001accc: 0015f593 andi a1,a1,1 + 8001acd0: a14f60ef jal ra,80010ee4 <_Z7setchr4jj> + 8001acd4: 00045503 lhu a0,0(s0) + 8001acd8: 00013403 ld s0,0(sp) + 8001acdc: 00813083 ld ra,8(sp) + 8001ace0: 00157513 andi a0,a0,1 + 8001ace4: 0025051b addiw a0,a0,2 + 8001ace8: 01010113 addi sp,sp,16 + 8001acec: b5cf606f j 80011048 <_Z9setmirrori> + +000000008001acf0 <_ZL12StateRestorei>: + 8001acf0: f6dff06f j 8001ac5c <_ZL4Syncv> + +000000008001acf4 <_ZL13UNLCC21Write2jh>: + 8001acf4: 001b1797 auipc a5,0x1b1 + 8001acf8: 28b79423 sh a1,648(a5) # 801cbf7c <_ZL6latche> + 8001acfc: f61ff06f j 8001ac5c <_ZL4Syncv> + +000000008001ad00 <_ZL13UNLCC21Write1jh>: + 8001ad00: 001b1797 auipc a5,0x1b1 + 8001ad04: 26a79e23 sh a0,636(a5) # 801cbf7c <_ZL6latche> + 8001ad08: f55ff06f j 8001ac5c <_ZL4Syncv> + +000000008001ad0c <_ZL12UNLCC21Powerv>: + 8001ad0c: ff010113 addi sp,sp,-16 + 8001ad10: 00113423 sd ra,8(sp) + 8001ad14: 00813023 sd s0,0(sp) + 8001ad18: 001b1797 auipc a5,0x1b1 + 8001ad1c: 26079223 sh zero,612(a5) # 801cbf7c <_ZL6latche> + 8001ad20: 00010437 lui s0,0x10 + 8001ad24: f39ff0ef jal ra,8001ac5c <_ZL4Syncv> + 8001ad28: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8001ad2c: ffff6617 auipc a2,0xffff6 + 8001ad30: 93460613 addi a2,a2,-1740 # 80010660 <_Z6CartBRj> + 8001ad34: 00008537 lui a0,0x8 + 8001ad38: 4e5180ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001ad3c: 00008537 lui a0,0x8 + 8001ad40: fff40593 addi a1,s0,-1 + 8001ad44: 00000617 auipc a2,0x0 + 8001ad48: fbc60613 addi a2,a2,-68 # 8001ad00 <_ZL13UNLCC21Write1jh> + 8001ad4c: 00150513 addi a0,a0,1 # 8001 <_entry_offset+0x8001> + 8001ad50: 5d9180ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001ad54: 00013403 ld s0,0(sp) + 8001ad58: 00813083 ld ra,8(sp) + 8001ad5c: 00000617 auipc a2,0x0 + 8001ad60: f9860613 addi a2,a2,-104 # 8001acf4 <_ZL13UNLCC21Write2jh> + 8001ad64: 000085b7 lui a1,0x8 + 8001ad68: 00008537 lui a0,0x8 + 8001ad6c: 01010113 addi sp,sp,16 + 8001ad70: 5b91806f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008001ad74 <_Z12UNLCC21_InitP8CartInfo>: + 8001ad74: 00000797 auipc a5,0x0 + 8001ad78: f9878793 addi a5,a5,-104 # 8001ad0c <_ZL12UNLCC21Powerv> + 8001ad7c: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 8001ad80: 00000797 auipc a5,0x0 + 8001ad84: f7078793 addi a5,a5,-144 # 8001acf0 <_ZL12StateRestorei> + 8001ad88: 00000693 li a3,0 + 8001ad8c: 00000613 li a2,0 + 8001ad90: fff00593 li a1,-1 + 8001ad94: 00030517 auipc a0,0x30 + 8001ad98: 12450513 addi a0,a0,292 # 8004aeb8 <_ZL9StateRegs> + 8001ad9c: 001b2717 auipc a4,0x1b2 + 8001ada0: 8af73e23 sd a5,-1860(a4) # 801cc658 + 8001ada4: a6ce506f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001ada8 <_ZL9M199Closev>: + 8001ada8: 001b1517 auipc a0,0x1b1 + 8001adac: 1e053503 ld a0,480(a0) # 801cbf88 <_ZL6CHRRAM> + 8001adb0: 02050263 beqz a0,8001add4 <_ZL9M199Closev+0x2c> + 8001adb4: ff010113 addi sp,sp,-16 + 8001adb8: 00113423 sd ra,8(sp) + 8001adbc: f84f70ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8001adc0: 00813083 ld ra,8(sp) + 8001adc4: 001b1797 auipc a5,0x1b1 + 8001adc8: 1c07b223 sd zero,452(a5) # 801cbf88 <_ZL6CHRRAM> + 8001adcc: 01010113 addi sp,sp,16 + 8001add0: 00008067 ret + 8001add4: 001b1797 auipc a5,0x1b1 + 8001add8: 1a07ba23 sd zero,436(a5) # 801cbf88 <_ZL6CHRRAM> + 8001addc: 00008067 ret + +000000008001ade0 <_ZL9M199Powerv>: + 8001ade0: ff010113 addi sp,sp,-16 + 8001ade4: 00113423 sd ra,8(sp) + 8001ade8: 001b1797 auipc a5,0x1b1 + 8001adec: 46878793 addi a5,a5,1128 # 801cc250 + 8001adf0: ffe00713 li a4,-2 + 8001adf4: 00e78023 sb a4,0(a5) + 8001adf8: fff00713 li a4,-1 + 8001adfc: 00e780a3 sb a4,1(a5) + 8001ae00: 00100713 li a4,1 + 8001ae04: 00e78123 sb a4,2(a5) + 8001ae08: 00300713 li a4,3 + 8001ae0c: 00e781a3 sb a4,3(a5) + 8001ae10: 3b00b0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 8001ae14: 00813083 ld ra,8(sp) + 8001ae18: 000105b7 lui a1,0x10 + 8001ae1c: 00000617 auipc a2,0x0 + 8001ae20: 01860613 addi a2,a2,24 # 8001ae34 <_ZL9M199Writejh> + 8001ae24: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8001ae28: 00008537 lui a0,0x8 + 8001ae2c: 01010113 addi sp,sp,16 + 8001ae30: 4f91806f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008001ae34 <_ZL9M199Writejh>: + 8001ae34: 00008737 lui a4,0x8 + 8001ae38: 00170713 addi a4,a4,1 # 8001 <_entry_offset+0x8001> + 8001ae3c: 00050793 mv a5,a0 + 8001ae40: 00e50a63 beq a0,a4,8001ae54 <_ZL9M199Writejh+0x20> + 8001ae44: 0000c737 lui a4,0xc + 8001ae48: 00e56463 bltu a0,a4,8001ae50 <_ZL9M199Writejh+0x1c> + 8001ae4c: 4490a06f j 80025a94 <_Z13MMC3_IRQWritejh> + 8001ae50: 2750b06f j 800268c4 <_Z13MMC3_CMDWritejh> + 8001ae54: ff010113 addi sp,sp,-16 + 8001ae58: 00813023 sd s0,0(sp) + 8001ae5c: 001b1417 auipc s0,0x1b1 + 8001ae60: 40040413 addi s0,s0,1024 # 801cc25c + 8001ae64: 00044503 lbu a0,0(s0) + 8001ae68: 00113423 sd ra,8(sp) + 8001ae6c: 00857713 andi a4,a0,8 + 8001ae70: 00071c63 bnez a4,8001ae88 <_ZL9M199Writejh+0x54> + 8001ae74: 00013403 ld s0,0(sp) + 8001ae78: 00813083 ld ra,8(sp) + 8001ae7c: 00078513 mv a0,a5 + 8001ae80: 01010113 addi sp,sp,16 + 8001ae84: 2410b06f j 800268c4 <_Z13MMC3_CMDWritejh> + 8001ae88: 00357713 andi a4,a0,3 + 8001ae8c: 001b1797 auipc a5,0x1b1 + 8001ae90: 3c478793 addi a5,a5,964 # 801cc250 + 8001ae94: 00e787b3 add a5,a5,a4 + 8001ae98: 00b78023 sb a1,0(a5) + 8001ae9c: 7d10a0ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 8001aea0: 00044503 lbu a0,0(s0) + 8001aea4: 00013403 ld s0,0(sp) + 8001aea8: 00813083 ld ra,8(sp) + 8001aeac: 01010113 addi sp,sp,16 + 8001aeb0: 1780b06f j 80026028 <_Z10FixMMC3CHRi> + +000000008001aeb4 <_ZL6M199MWh>: + 8001aeb4: 00357513 andi a0,a0,3 + 8001aeb8: 00200793 li a5,2 + 8001aebc: 00f50e63 beq a0,a5,8001aed8 <_ZL6M199MWh+0x24> + 8001aec0: 00300793 li a5,3 + 8001aec4: 02f50263 beq a0,a5,8001aee8 <_ZL6M199MWh+0x34> + 8001aec8: 00100793 li a5,1 + 8001aecc: 00f50a63 beq a0,a5,8001aee0 <_ZL6M199MWh+0x2c> + 8001aed0: 00100513 li a0,1 + 8001aed4: 974f606f j 80011048 <_Z9setmirrori> + 8001aed8: 00200513 li a0,2 + 8001aedc: 96cf606f j 80011048 <_Z9setmirrori> + 8001aee0: 00000513 li a0,0 + 8001aee4: 964f606f j 80011048 <_Z9setmirrori> + 8001aee8: 00300513 li a0,3 + 8001aeec: 95cf606f j 80011048 <_Z9setmirrori> + +000000008001aef0 <_ZL6M199PWjh>: + 8001aef0: ff010113 addi sp,sp,-16 + 8001aef4: 00113423 sd ra,8(sp) + 8001aef8: 00813023 sd s0,0(sp) + 8001aefc: ba1f50ef jal ra,80010a9c <_Z7setprg8jj> + 8001af00: 001b1417 auipc s0,0x1b1 + 8001af04: 35040413 addi s0,s0,848 # 801cc250 + 8001af08: 00044583 lbu a1,0(s0) + 8001af0c: 0000c537 lui a0,0xc + 8001af10: b8df50ef jal ra,80010a9c <_Z7setprg8jj> + 8001af14: 00144583 lbu a1,1(s0) + 8001af18: 00013403 ld s0,0(sp) + 8001af1c: 00813083 ld ra,8(sp) + 8001af20: 0000e537 lui a0,0xe + 8001af24: 01010113 addi sp,sp,16 + 8001af28: b75f506f j 80010a9c <_Z7setprg8jj> + +000000008001af2c <_ZL6M199CWjh>: + 8001af2c: 00058613 mv a2,a1 + 8001af30: 00050593 mv a1,a0 + 8001af34: 00863513 sltiu a0,a2,8 + 8001af38: fe010113 addi sp,sp,-32 + 8001af3c: 00451513 slli a0,a0,0x4 + 8001af40: 00113c23 sd ra,24(sp) + 8001af44: 00813823 sd s0,16(sp) + 8001af48: 00913423 sd s1,8(sp) + 8001af4c: 01213023 sd s2,0(sp) + 8001af50: ed5f50ef jal ra,80010e24 <_Z8setchr1rijj> + 8001af54: 001b1917 auipc s2,0x1b1 + 8001af58: 2f490913 addi s2,s2,756 # 801cc248 + 8001af5c: 00094603 lbu a2,0(s2) + 8001af60: 00000593 li a1,0 + 8001af64: 001b1497 auipc s1,0x1b1 + 8001af68: 2ec48493 addi s1,s1,748 # 801cc250 + 8001af6c: 00863513 sltiu a0,a2,8 + 8001af70: 00451513 slli a0,a0,0x4 + 8001af74: eb1f50ef jal ra,80010e24 <_Z8setchr1rijj> + 8001af78: 0024c603 lbu a2,2(s1) + 8001af7c: 40000593 li a1,1024 + 8001af80: 00001437 lui s0,0x1 + 8001af84: 00863513 sltiu a0,a2,8 + 8001af88: 00451513 slli a0,a0,0x4 + 8001af8c: e99f50ef jal ra,80010e24 <_Z8setchr1rijj> + 8001af90: 00194603 lbu a2,1(s2) + 8001af94: 80040593 addi a1,s0,-2048 # 800 <_entry_offset+0x800> + 8001af98: 00863513 sltiu a0,a2,8 + 8001af9c: 00451513 slli a0,a0,0x4 + 8001afa0: e85f50ef jal ra,80010e24 <_Z8setchr1rijj> + 8001afa4: 0034c603 lbu a2,3(s1) + 8001afa8: c0040593 addi a1,s0,-1024 + 8001afac: 01013403 ld s0,16(sp) + 8001afb0: 01813083 ld ra,24(sp) + 8001afb4: 00813483 ld s1,8(sp) + 8001afb8: 00013903 ld s2,0(sp) + 8001afbc: 00863513 sltiu a0,a2,8 + 8001afc0: 00451513 slli a0,a0,0x4 + 8001afc4: 02010113 addi sp,sp,32 + 8001afc8: e5df506f j 80010e24 <_Z8setchr1rijj> + +000000008001afcc <_Z14Mapper199_InitP8CartInfo>: + 8001afcc: 04c52703 lw a4,76(a0) # e04c <_entry_offset+0xe04c> + 8001afd0: fe010113 addi sp,sp,-32 + 8001afd4: 00800693 li a3,8 + 8001afd8: 10000613 li a2,256 + 8001afdc: 20000593 li a1,512 + 8001afe0: 00113c23 sd ra,24(sp) + 8001afe4: 00813823 sd s0,16(sp) + 8001afe8: 00913423 sd s1,8(sp) + 8001afec: 00050413 mv s0,a0 + 8001aff0: 0280c0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 8001aff4: 00000797 auipc a5,0x0 + 8001aff8: f3878793 addi a5,a5,-200 # 8001af2c <_ZL6M199CWjh> + 8001affc: 001b1717 auipc a4,0x1b1 + 8001b000: 28f73223 sd a5,644(a4) # 801cc280 + 8001b004: 00000797 auipc a5,0x0 + 8001b008: eec78793 addi a5,a5,-276 # 8001aef0 <_ZL6M199PWjh> + 8001b00c: 001b1717 auipc a4,0x1b1 + 8001b010: 28f73623 sd a5,652(a4) # 801cc298 + 8001b014: 00000797 auipc a5,0x0 + 8001b018: ea078793 addi a5,a5,-352 # 8001aeb4 <_ZL6M199MWh> + 8001b01c: 001b1717 auipc a4,0x1b1 + 8001b020: 26f73a23 sd a5,628(a4) # 801cc290 + 8001b024: 00000797 auipc a5,0x0 + 8001b028: dbc78793 addi a5,a5,-580 # 8001ade0 <_ZL9M199Powerv> + 8001b02c: 00f43023 sd a5,0(s0) + 8001b030: 00000797 auipc a5,0x0 + 8001b034: d7878793 addi a5,a5,-648 # 8001ada8 <_ZL9M199Closev> + 8001b038: 001b1497 auipc s1,0x1b1 + 8001b03c: f4848493 addi s1,s1,-184 # 801cbf80 <_ZL10CHRRAMSIZE> + 8001b040: 00f43823 sd a5,16(s0) + 8001b044: 00002537 lui a0,0x2 + 8001b048: 000027b7 lui a5,0x2 + 8001b04c: 00f4a023 sw a5,0(s1) + 8001b050: c1cf70ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8001b054: 0004a603 lw a2,0(s1) + 8001b058: 00050593 mv a1,a0 + 8001b05c: 001b1417 auipc s0,0x1b1 + 8001b060: f2c40413 addi s0,s0,-212 # 801cbf88 <_ZL6CHRRAM> + 8001b064: 00100693 li a3,1 + 8001b068: 01000513 li a0,16 + 8001b06c: 00b43023 sd a1,0(s0) + 8001b070: d54f50ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 8001b074: 0004a583 lw a1,0(s1) + 8001b078: 00043503 ld a0,0(s0) + 8001b07c: 00027697 auipc a3,0x27 + 8001b080: 0cc68693 addi a3,a3,204 # 80042148 <_ZL9C96000PAL+0x738> + 8001b084: 00000613 li a2,0 + 8001b088: f89e40ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001b08c: 01013403 ld s0,16(sp) + 8001b090: 01813083 ld ra,24(sp) + 8001b094: 00813483 ld s1,8(sp) + 8001b098: 0002a697 auipc a3,0x2a + 8001b09c: 45868693 addi a3,a3,1112 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 8001b0a0: 00000613 li a2,0 + 8001b0a4: 00400593 li a1,4 + 8001b0a8: 001b1517 auipc a0,0x1b1 + 8001b0ac: 1a850513 addi a0,a0,424 # 801cc250 + 8001b0b0: 02010113 addi sp,sp,32 + 8001b0b4: f5de406f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001b0b8 <_ZL11M90TekWritejh>: + 8001b0b8: 000067b7 lui a5,0x6 + 8001b0bc: c0378713 addi a4,a5,-1021 # 5c03 <_entry_offset+0x5c03> + 8001b0c0: 00e57533 and a0,a0,a4 + 8001b0c4: 80178713 addi a4,a5,-2047 + 8001b0c8: 02e50863 beq a0,a4,8001b0f8 <_ZL11M90TekWritejh+0x40> + 8001b0cc: 80378713 addi a4,a5,-2045 + 8001b0d0: 00e50e63 beq a0,a4,8001b0ec <_ZL11M90TekWritejh+0x34> + 8001b0d4: 80078793 addi a5,a5,-2048 + 8001b0d8: 00f50463 beq a0,a5,8001b0e0 <_ZL11M90TekWritejh+0x28> + 8001b0dc: 00008067 ret + 8001b0e0: 001b1797 auipc a5,0x1b1 + 8001b0e4: ecb78023 sb a1,-320(a5) # 801cbfa0 <_ZL3mul> + 8001b0e8: 00008067 ret + 8001b0ec: 001b1797 auipc a5,0x1b1 + 8001b0f0: ecb78a23 sb a1,-300(a5) # 801cbfc0 <_ZL5regie> + 8001b0f4: 00008067 ret + 8001b0f8: 001b1797 auipc a5,0x1b1 + 8001b0fc: eab784a3 sb a1,-343(a5) # 801cbfa1 <_ZL3mul+0x1> + 8001b100: 00008067 ret + +000000008001b104 <_ZL13M90DummyWritejh>: + 8001b104: 00008067 ret + +000000008001b108 <_ZL7tekpromv>: + 8001b108: fe010113 addi sp,sp,-32 + 8001b10c: 01213023 sd s2,0(sp) + 8001b110: 001b1917 auipc s2,0x1b1 + 8001b114: eb890913 addi s2,s2,-328 # 801cbfc8 <_ZL5tkcom> + 8001b118: 00094703 lbu a4,0(s2) + 8001b11c: 0002a697 auipc a3,0x2a + 8001b120: 58c68693 addi a3,a3,1420 # 800456a8 <_ZL8conv_tbl+0x20> + 8001b124: 00394583 lbu a1,3(s2) + 8001b128: 00777793 andi a5,a4,7 + 8001b12c: 00279793 slli a5,a5,0x2 + 8001b130: 00d787b3 add a5,a5,a3 + 8001b134: 0007a783 lw a5,0(a5) + 8001b138: 00813823 sd s0,16(sp) + 8001b13c: 0187171b slliw a4,a4,0x18 + 8001b140: 0055941b slliw s0,a1,0x5 + 8001b144: 00d787b3 add a5,a5,a3 + 8001b148: 00113c23 sd ra,24(sp) + 8001b14c: 00913423 sd s1,8(sp) + 8001b150: 0c047413 andi s0,s0,192 + 8001b154: 4187571b sraiw a4,a4,0x18 + 8001b158: 00078067 jr a5 + 8001b15c: 001b1497 auipc s1,0x1b1 + 8001b160: e4c48493 addi s1,s1,-436 # 801cbfa8 <_ZL4prgb> + 8001b164: 1e074463 bltz a4,8001b34c <_ZL7tekpromv+0x244> + 8001b168: 0004c583 lbu a1,0(s1) + 8001b16c: 00008537 lui a0,0x8 + 8001b170: 03f5f593 andi a1,a1,63 + 8001b174: 0085e5b3 or a1,a1,s0 + 8001b178: 925f50ef jal ra,80010a9c <_Z7setprg8jj> + 8001b17c: 0014c583 lbu a1,1(s1) + 8001b180: 0000a537 lui a0,0xa + 8001b184: 03f5f593 andi a1,a1,63 + 8001b188: 0085e5b3 or a1,a1,s0 + 8001b18c: 911f50ef jal ra,80010a9c <_Z7setprg8jj> + 8001b190: 0024c583 lbu a1,2(s1) + 8001b194: 0000c537 lui a0,0xc + 8001b198: 03f5f593 andi a1,a1,63 + 8001b19c: 0085e5b3 or a1,a1,s0 + 8001b1a0: 8fdf50ef jal ra,80010a9c <_Z7setprg8jj> + 8001b1a4: 0034c583 lbu a1,3(s1) + 8001b1a8: 01813083 ld ra,24(sp) + 8001b1ac: 00813483 ld s1,8(sp) + 8001b1b0: 03f5f593 andi a1,a1,63 + 8001b1b4: 0085e5b3 or a1,a1,s0 + 8001b1b8: 01013403 ld s0,16(sp) + 8001b1bc: 00013903 ld s2,0(sp) + 8001b1c0: 0000e537 lui a0,0xe + 8001b1c4: 02010113 addi sp,sp,32 + 8001b1c8: 8d5f506f j 80010a9c <_Z7setprg8jj> + 8001b1cc: 001b1497 auipc s1,0x1b1 + 8001b1d0: ddc48493 addi s1,s1,-548 # 801cbfa8 <_ZL4prgb> + 8001b1d4: 22074263 bltz a4,8001b3f8 <_ZL7tekpromv+0x2f0> + 8001b1d8: 0004c583 lbu a1,0(s1) + 8001b1dc: 00008537 lui a0,0x8 + 8001b1e0: 03f5f593 andi a1,a1,63 + 8001b1e4: 0085e5b3 or a1,a1,s0 + 8001b1e8: 8b5f50ef jal ra,80010a9c <_Z7setprg8jj> + 8001b1ec: 0014c583 lbu a1,1(s1) + 8001b1f0: 0000a537 lui a0,0xa + 8001b1f4: 03f5f593 andi a1,a1,63 + 8001b1f8: 0085e5b3 or a1,a1,s0 + 8001b1fc: 8a1f50ef jal ra,80010a9c <_Z7setprg8jj> + 8001b200: 0024c583 lbu a1,2(s1) + 8001b204: 0000c537 lui a0,0xc + 8001b208: 03f5f593 andi a1,a1,63 + 8001b20c: 0085e5b3 or a1,a1,s0 + 8001b210: 88df50ef jal ra,80010a9c <_Z7setprg8jj> + 8001b214: 03f46593 ori a1,s0,63 + 8001b218: 01013403 ld s0,16(sp) + 8001b21c: 01813083 ld ra,24(sp) + 8001b220: 00813483 ld s1,8(sp) + 8001b224: 00013903 ld s2,0(sp) + 8001b228: 0000e537 lui a0,0xe + 8001b22c: 02010113 addi sp,sp,32 + 8001b230: 86df506f j 80010a9c <_Z7setprg8jj> + 8001b234: 001b1497 auipc s1,0x1b1 + 8001b238: d7448493 addi s1,s1,-652 # 801cbfa8 <_ZL4prgb> + 8001b23c: 18074c63 bltz a4,8001b3d4 <_ZL7tekpromv+0x2cc> + 8001b240: 0014c783 lbu a5,1(s1) + 8001b244: 0045959b slliw a1,a1,0x4 + 8001b248: 0605f593 andi a1,a1,96 + 8001b24c: 01f7f793 andi a5,a5,31 + 8001b250: 00b7e5b3 or a1,a5,a1 + 8001b254: 00008537 lui a0,0x8 + 8001b258: a01f50ef jal ra,80010c58 <_Z8setprg16jj> + 8001b25c: 00394783 lbu a5,3(s2) + 8001b260: 0034c583 lbu a1,3(s1) + 8001b264: 01013403 ld s0,16(sp) + 8001b268: 01813083 ld ra,24(sp) + 8001b26c: 00813483 ld s1,8(sp) + 8001b270: 00013903 ld s2,0(sp) + 8001b274: 0047979b slliw a5,a5,0x4 + 8001b278: 0607f793 andi a5,a5,96 + 8001b27c: 01f5f593 andi a1,a1,31 + 8001b280: 0000c537 lui a0,0xc + 8001b284: 00f5e5b3 or a1,a1,a5 + 8001b288: 02010113 addi sp,sp,32 + 8001b28c: 9cdf506f j 80010c58 <_Z8setprg16jj> + 8001b290: 001b1497 auipc s1,0x1b1 + 8001b294: d1848493 addi s1,s1,-744 # 801cbfa8 <_ZL4prgb> + 8001b298: 10074c63 bltz a4,8001b3b0 <_ZL7tekpromv+0x2a8> + 8001b29c: 0014c783 lbu a5,1(s1) + 8001b2a0: 0045959b slliw a1,a1,0x4 + 8001b2a4: 0605f593 andi a1,a1,96 + 8001b2a8: 01f7f793 andi a5,a5,31 + 8001b2ac: 00b7e5b3 or a1,a5,a1 + 8001b2b0: 00008537 lui a0,0x8 + 8001b2b4: 9a5f50ef jal ra,80010c58 <_Z8setprg16jj> + 8001b2b8: 00394583 lbu a1,3(s2) + 8001b2bc: 01013403 ld s0,16(sp) + 8001b2c0: 01813083 ld ra,24(sp) + 8001b2c4: 00813483 ld s1,8(sp) + 8001b2c8: 00013903 ld s2,0(sp) + 8001b2cc: 0045959b slliw a1,a1,0x4 + 8001b2d0: 0605f593 andi a1,a1,96 + 8001b2d4: 0000c537 lui a0,0xc + 8001b2d8: 01f5e593 ori a1,a1,31 + 8001b2dc: 02010113 addi sp,sp,32 + 8001b2e0: 979f506f j 80010c58 <_Z8setprg16jj> + 8001b2e4: 001b1497 auipc s1,0x1b1 + 8001b2e8: cc448493 addi s1,s1,-828 # 801cbfa8 <_ZL4prgb> + 8001b2ec: 0034c783 lbu a5,3(s1) + 8001b2f0: 08074e63 bltz a4,8001b38c <_ZL7tekpromv+0x284> + 8001b2f4: 01013403 ld s0,16(sp) + 8001b2f8: 01813083 ld ra,24(sp) + 8001b2fc: 00813483 ld s1,8(sp) + 8001b300: 00013903 ld s2,0(sp) + 8001b304: 0035959b slliw a1,a1,0x3 + 8001b308: 0305f593 andi a1,a1,48 + 8001b30c: 00f7f793 andi a5,a5,15 + 8001b310: 00b7e5b3 or a1,a5,a1 + 8001b314: 00008537 lui a0,0x8 + 8001b318: 02010113 addi sp,sp,32 + 8001b31c: af9f506f j 80010e14 <_Z8setprg32jj> + 8001b320: 04074263 bltz a4,8001b364 <_ZL7tekpromv+0x25c> + 8001b324: 01013403 ld s0,16(sp) + 8001b328: 01813083 ld ra,24(sp) + 8001b32c: 00813483 ld s1,8(sp) + 8001b330: 00013903 ld s2,0(sp) + 8001b334: 0035959b slliw a1,a1,0x3 + 8001b338: 0305f593 andi a1,a1,48 + 8001b33c: 00f5e593 ori a1,a1,15 + 8001b340: 00008537 lui a0,0x8 + 8001b344: 02010113 addi sp,sp,32 + 8001b348: acdf506f j 80010e14 <_Z8setprg32jj> + 8001b34c: 0034c583 lbu a1,3(s1) + 8001b350: 00006537 lui a0,0x6 + 8001b354: 03f5f593 andi a1,a1,63 + 8001b358: 0085e5b3 or a1,a1,s0 + 8001b35c: f40f50ef jal ra,80010a9c <_Z7setprg8jj> + 8001b360: e09ff06f j 8001b168 <_ZL7tekpromv+0x60> + 8001b364: 001b1597 auipc a1,0x1b1 + 8001b368: c475c583 lbu a1,-953(a1) # 801cbfab <_ZL4prgb+0x3> + 8001b36c: 0025959b slliw a1,a1,0x2 + 8001b370: 0035859b addiw a1,a1,3 + 8001b374: 03f5f593 andi a1,a1,63 + 8001b378: 0085e5b3 or a1,a1,s0 + 8001b37c: 00006537 lui a0,0x6 + 8001b380: f1cf50ef jal ra,80010a9c <_Z7setprg8jj> + 8001b384: 00394583 lbu a1,3(s2) + 8001b388: f9dff06f j 8001b324 <_ZL7tekpromv+0x21c> + 8001b38c: 0027959b slliw a1,a5,0x2 + 8001b390: 0035859b addiw a1,a1,3 + 8001b394: 03f5f593 andi a1,a1,63 + 8001b398: 0085e5b3 or a1,a1,s0 + 8001b39c: 00006537 lui a0,0x6 + 8001b3a0: efcf50ef jal ra,80010a9c <_Z7setprg8jj> + 8001b3a4: 0034c783 lbu a5,3(s1) + 8001b3a8: 00394583 lbu a1,3(s2) + 8001b3ac: f49ff06f j 8001b2f4 <_ZL7tekpromv+0x1ec> + 8001b3b0: 0034c583 lbu a1,3(s1) + 8001b3b4: 00006537 lui a0,0x6 + 8001b3b8: 0015959b slliw a1,a1,0x1 + 8001b3bc: 0015859b addiw a1,a1,1 + 8001b3c0: 03f5f593 andi a1,a1,63 + 8001b3c4: 0085e5b3 or a1,a1,s0 + 8001b3c8: ed4f50ef jal ra,80010a9c <_Z7setprg8jj> + 8001b3cc: 00394583 lbu a1,3(s2) + 8001b3d0: ecdff06f j 8001b29c <_ZL7tekpromv+0x194> + 8001b3d4: 0034c583 lbu a1,3(s1) + 8001b3d8: 00006537 lui a0,0x6 + 8001b3dc: 0015959b slliw a1,a1,0x1 + 8001b3e0: 0015859b addiw a1,a1,1 + 8001b3e4: 03f5f593 andi a1,a1,63 + 8001b3e8: 0085e5b3 or a1,a1,s0 + 8001b3ec: eb0f50ef jal ra,80010a9c <_Z7setprg8jj> + 8001b3f0: 00394583 lbu a1,3(s2) + 8001b3f4: e4dff06f j 8001b240 <_ZL7tekpromv+0x138> + 8001b3f8: 0034c583 lbu a1,3(s1) + 8001b3fc: 00006537 lui a0,0x6 + 8001b400: 03f5f593 andi a1,a1,63 + 8001b404: 0085e5b3 or a1,a1,s0 + 8001b408: e94f50ef jal ra,80010a9c <_Z7setprg8jj> + 8001b40c: dcdff06f j 8001b1d8 <_ZL7tekpromv+0xd0> + +000000008001b410 <_ZL11M90PRGWritejh>: + 8001b410: 00357793 andi a5,a0,3 + 8001b414: 001b1517 auipc a0,0x1b1 + 8001b418: b9450513 addi a0,a0,-1132 # 801cbfa8 <_ZL4prgb> + 8001b41c: 00f50533 add a0,a0,a5 + 8001b420: 00b50023 sb a1,0(a0) + 8001b424: ce5ff06f j 8001b108 <_ZL7tekpromv> + +000000008001b428 <_ZL7tekvromv>: + 8001b428: fc010113 addi sp,sp,-64 + 8001b42c: 02113c23 sd ra,56(sp) + 8001b430: 02813823 sd s0,48(sp) + 8001b434: 02913423 sd s1,40(sp) + 8001b438: 03213023 sd s2,32(sp) + 8001b43c: 01313c23 sd s3,24(sp) + 8001b440: 01413823 sd s4,16(sp) + 8001b444: 01513423 sd s5,8(sp) + 8001b448: 01613023 sd s6,0(sp) + 8001b44c: 001b1797 auipc a5,0x1b1 + 8001b450: b7c78793 addi a5,a5,-1156 # 801cbfc8 <_ZL5tkcom> + 8001b454: 0037c703 lbu a4,3(a5) + 8001b458: 0007c783 lbu a5,0(a5) + 8001b45c: 02077693 andi a3,a4,32 + 8001b460: 0187f793 andi a5,a5,24 + 8001b464: 02068663 beqz a3,8001b490 <_ZL7tekvromv+0x68> + 8001b468: 01000713 li a4,16 + 8001b46c: 1ee78063 beq a5,a4,8001b64c <_ZL7tekvromv+0x224> + 8001b470: 16f76263 bltu a4,a5,8001b5d4 <_ZL7tekvromv+0x1ac> + 8001b474: 16078c63 beqz a5,8001b5ec <_ZL7tekvromv+0x1c4> + 8001b478: 00800713 li a4,8 + 8001b47c: 12e79863 bne a5,a4,8001b5ac <_ZL7tekvromv+0x184> + 8001b480: 000104b7 lui s1,0x10 + 8001b484: fff48493 addi s1,s1,-1 # ffff <_entry_offset+0xffff> + 8001b488: 00000413 li s0,0 + 8001b48c: 0340006f j 8001b4c0 <_ZL7tekvromv+0x98> + 8001b490: 4027541b sraiw s0,a4,0x2 + 8001b494: 00647513 andi a0,s0,6 + 8001b498: 00177413 andi s0,a4,1 + 8001b49c: 01000713 li a4,16 + 8001b4a0: 00a46433 or s0,s0,a0 + 8001b4a4: 20e78463 beq a5,a4,8001b6ac <_ZL7tekvromv+0x284> + 8001b4a8: 0af76663 bltu a4,a5,8001b554 <_ZL7tekvromv+0x12c> + 8001b4ac: 18078a63 beqz a5,8001b640 <_ZL7tekvromv+0x218> + 8001b4b0: 00800713 li a4,8 + 8001b4b4: 00641413 slli s0,s0,0x6 + 8001b4b8: 03f00493 li s1,63 + 8001b4bc: 0ee79863 bne a5,a4,8001b5ac <_ZL7tekvromv+0x184> + 8001b4c0: 001b1a17 auipc s4,0x1b1 + 8001b4c4: ad8a0a13 addi s4,s4,-1320 # 801cbf98 <_ZL3chr> + 8001b4c8: 000a4783 lbu a5,0(s4) + 8001b4cc: 001b1997 auipc s3,0x1b1 + 8001b4d0: b1498993 addi s3,s3,-1260 # 801cbfe0 <_ZL7chrhigh> + 8001b4d4: 001b1917 auipc s2,0x1b1 + 8001b4d8: afc90913 addi s2,s2,-1284 # 801cbfd0 <_ZL6chrlow> + 8001b4dc: 00f98733 add a4,s3,a5 + 8001b4e0: 00074583 lbu a1,0(a4) + 8001b4e4: 00f907b3 add a5,s2,a5 + 8001b4e8: 0007c783 lbu a5,0(a5) + 8001b4ec: 0085959b slliw a1,a1,0x8 + 8001b4f0: 00000513 li a0,0 + 8001b4f4: 00f5e5b3 or a1,a1,a5 + 8001b4f8: 00b4f5b3 and a1,s1,a1 + 8001b4fc: 00b465b3 or a1,s0,a1 + 8001b500: 9e5f50ef jal ra,80010ee4 <_Z7setchr4jj> + 8001b504: 001a4783 lbu a5,1(s4) + 8001b508: 03813083 ld ra,56(sp) + 8001b50c: 01013a03 ld s4,16(sp) + 8001b510: 00f989b3 add s3,s3,a5 + 8001b514: 0009c583 lbu a1,0(s3) + 8001b518: 00f90933 add s2,s2,a5 + 8001b51c: 00094783 lbu a5,0(s2) + 8001b520: 0085959b slliw a1,a1,0x8 + 8001b524: 02013903 ld s2,32(sp) + 8001b528: 00f5e5b3 or a1,a1,a5 + 8001b52c: 00b4f5b3 and a1,s1,a1 + 8001b530: 00b465b3 or a1,s0,a1 + 8001b534: 03013403 ld s0,48(sp) + 8001b538: 02813483 ld s1,40(sp) + 8001b53c: 01813983 ld s3,24(sp) + 8001b540: 00813a83 ld s5,8(sp) + 8001b544: 00013b03 ld s6,0(sp) + 8001b548: 00001537 lui a0,0x1 + 8001b54c: 04010113 addi sp,sp,64 + 8001b550: 995f506f j 80010ee4 <_Z7setchr4jj> + 8001b554: 01800713 li a4,24 + 8001b558: 00841413 slli s0,s0,0x8 + 8001b55c: 0ff00a13 li s4,255 + 8001b560: 04e79663 bne a5,a4,8001b5ac <_ZL7tekvromv+0x184> + 8001b564: 001b1997 auipc s3,0x1b1 + 8001b568: a6c98993 addi s3,s3,-1428 # 801cbfd0 <_ZL6chrlow> + 8001b56c: 001b1917 auipc s2,0x1b1 + 8001b570: a7490913 addi s2,s2,-1420 # 801cbfe0 <_ZL7chrhigh> + 8001b574: 00000493 li s1,0 + 8001b578: 00002ab7 lui s5,0x2 + 8001b57c: 00094583 lbu a1,0(s2) + 8001b580: 0009c783 lbu a5,0(s3) + 8001b584: 00048513 mv a0,s1 + 8001b588: 0085959b slliw a1,a1,0x8 + 8001b58c: 00f5e5b3 or a1,a1,a5 + 8001b590: 00ba75b3 and a1,s4,a1 + 8001b594: 00b465b3 or a1,s0,a1 + 8001b598: 4004849b addiw s1,s1,1024 + 8001b59c: 909f50ef jal ra,80010ea4 <_Z7setchr1jj> + 8001b5a0: 00198993 addi s3,s3,1 + 8001b5a4: 00190913 addi s2,s2,1 + 8001b5a8: fd549ae3 bne s1,s5,8001b57c <_ZL7tekvromv+0x154> + 8001b5ac: 03813083 ld ra,56(sp) + 8001b5b0: 03013403 ld s0,48(sp) + 8001b5b4: 02813483 ld s1,40(sp) + 8001b5b8: 02013903 ld s2,32(sp) + 8001b5bc: 01813983 ld s3,24(sp) + 8001b5c0: 01013a03 ld s4,16(sp) + 8001b5c4: 00813a83 ld s5,8(sp) + 8001b5c8: 00013b03 ld s6,0(sp) + 8001b5cc: 04010113 addi sp,sp,64 + 8001b5d0: 00008067 ret + 8001b5d4: 01800713 li a4,24 + 8001b5d8: fce79ae3 bne a5,a4,8001b5ac <_ZL7tekvromv+0x184> + 8001b5dc: 00010a37 lui s4,0x10 + 8001b5e0: fffa0a13 addi s4,s4,-1 # ffff <_entry_offset+0xffff> + 8001b5e4: 00000413 li s0,0 + 8001b5e8: f7dff06f j 8001b564 <_ZL7tekvromv+0x13c> + 8001b5ec: 00010537 lui a0,0x10 + 8001b5f0: fff50513 addi a0,a0,-1 # ffff <_entry_offset+0xffff> + 8001b5f4: 00000413 li s0,0 + 8001b5f8: 001b1797 auipc a5,0x1b1 + 8001b5fc: 9e87c783 lbu a5,-1560(a5) # 801cbfe0 <_ZL7chrhigh> + 8001b600: 001b1717 auipc a4,0x1b1 + 8001b604: 9d074703 lbu a4,-1584(a4) # 801cbfd0 <_ZL6chrlow> + 8001b608: 0087979b slliw a5,a5,0x8 + 8001b60c: 00e7e7b3 or a5,a5,a4 + 8001b610: 00f57533 and a0,a0,a5 + 8001b614: 00a46533 or a0,s0,a0 + 8001b618: 03013403 ld s0,48(sp) + 8001b61c: 03813083 ld ra,56(sp) + 8001b620: 02813483 ld s1,40(sp) + 8001b624: 02013903 ld s2,32(sp) + 8001b628: 01813983 ld s3,24(sp) + 8001b62c: 01013a03 ld s4,16(sp) + 8001b630: 00813a83 ld s5,8(sp) + 8001b634: 00013b03 ld s6,0(sp) + 8001b638: 04010113 addi sp,sp,64 + 8001b63c: 8c9f506f j 80010f04 <_Z7setchr8j> + 8001b640: 00541413 slli s0,s0,0x5 + 8001b644: 01f00513 li a0,31 + 8001b648: fb1ff06f j 8001b5f8 <_ZL7tekvromv+0x1d0> + 8001b64c: 00010ab7 lui s5,0x10 + 8001b650: fffa8a93 addi s5,s5,-1 # ffff <_entry_offset+0xffff> + 8001b654: 00000413 li s0,0 + 8001b658: 00001a37 lui s4,0x1 + 8001b65c: 001b1997 auipc s3,0x1b1 + 8001b660: 97498993 addi s3,s3,-1676 # 801cbfd0 <_ZL6chrlow> + 8001b664: 001b1917 auipc s2,0x1b1 + 8001b668: 97c90913 addi s2,s2,-1668 # 801cbfe0 <_ZL7chrhigh> + 8001b66c: 00000493 li s1,0 + 8001b670: 800a0a1b addiw s4,s4,-2048 + 8001b674: 00002b37 lui s6,0x2 + 8001b678: 00094583 lbu a1,0(s2) + 8001b67c: 0009c783 lbu a5,0(s3) + 8001b680: 00048513 mv a0,s1 + 8001b684: 0085959b slliw a1,a1,0x8 + 8001b688: 00f5e5b3 or a1,a1,a5 + 8001b68c: 00baf5b3 and a1,s5,a1 + 8001b690: 00b465b3 or a1,s0,a1 + 8001b694: 009a04bb addw s1,s4,s1 + 8001b698: 82df50ef jal ra,80010ec4 <_Z7setchr2jj> + 8001b69c: 00298993 addi s3,s3,2 + 8001b6a0: 00290913 addi s2,s2,2 + 8001b6a4: fd649ae3 bne s1,s6,8001b678 <_ZL7tekvromv+0x250> + 8001b6a8: f05ff06f j 8001b5ac <_ZL7tekvromv+0x184> + 8001b6ac: 00741413 slli s0,s0,0x7 + 8001b6b0: 07f00a93 li s5,127 + 8001b6b4: fa5ff06f j 8001b658 <_ZL7tekvromv+0x230> + +000000008001b6b8 <_ZL13M90CHRhiWritejh>: + 8001b6b8: 00757793 andi a5,a0,7 + 8001b6bc: 001b1517 auipc a0,0x1b1 + 8001b6c0: 92450513 addi a0,a0,-1756 # 801cbfe0 <_ZL7chrhigh> + 8001b6c4: 00f50533 add a0,a0,a5 + 8001b6c8: 00b50023 sb a1,0(a0) + 8001b6cc: d5dff06f j 8001b428 <_ZL7tekvromv> + +000000008001b6d0 <_ZL14M90CHRlowWritejh>: + 8001b6d0: 00757793 andi a5,a0,7 + 8001b6d4: 001b1517 auipc a0,0x1b1 + 8001b6d8: 8fc50513 addi a0,a0,-1796 # 801cbfd0 <_ZL6chrlow> + 8001b6dc: 00f50533 add a0,a0,a5 + 8001b6e0: 00b50023 sb a1,0(a0) + 8001b6e4: d45ff06f j 8001b428 <_ZL7tekvromv> + +000000008001b6e8 <_ZL4mirav>: + 8001b6e8: fc010113 addi sp,sp,-64 + 8001b6ec: 01613023 sd s6,0(sp) + 8001b6f0: 001b1b17 auipc s6,0x1b1 + 8001b6f4: 8d8b0b13 addi s6,s6,-1832 # 801cbfc8 <_ZL5tkcom> + 8001b6f8: 000b4783 lbu a5,0(s6) + 8001b6fc: 02113c23 sd ra,56(sp) + 8001b700: 02813823 sd s0,48(sp) + 8001b704: 02913423 sd s1,40(sp) + 8001b708: 03213023 sd s2,32(sp) + 8001b70c: 01313c23 sd s3,24(sp) + 8001b710: 01413823 sd s4,16(sp) + 8001b714: 01513423 sd s5,8(sp) + 8001b718: 0207f713 andi a4,a5,32 + 8001b71c: 0a070e63 beqz a4,8001b7d8 <_ZL4mirav+0xf0> + 8001b720: 001b1717 auipc a4,0x1b1 + 8001b724: 88c72703 lw a4,-1908(a4) # 801cbfac <_ZL5is209> + 8001b728: 0a070863 beqz a4,8001b7d8 <_ZL4mirav+0xf0> + 8001b72c: 0407f793 andi a5,a5,64 + 8001b730: 10079463 bnez a5,8001b838 <_ZL4mirav+0x150> + 8001b734: 001b1a97 auipc s5,0x1b1 + 8001b738: 884a8a93 addi s5,s5,-1916 # 801cbfb8 <_ZL5names> + 8001b73c: 00000a13 li s4,0 + 8001b740: 000a7997 auipc s3,0xa7 + 8001b744: ec098993 addi s3,s3,-320 # 800c2600 + 8001b748: 000a7917 auipc s2,0xa7 + 8001b74c: cb890913 addi s2,s2,-840 # 800c2400 + 8001b750: 001ae497 auipc s1,0x1ae + 8001b754: dd848493 addi s1,s1,-552 # 801c9528 + 8001b758: 00400413 li s0,4 + 8001b75c: 000ad703 lhu a4,0(s5) + 8001b760: 001b4783 lbu a5,1(s6) + 8001b764: 00100593 li a1,1 + 8001b768: 0007051b sext.w a0,a4 + 8001b76c: 00a5151b slliw a0,a0,0xa + 8001b770: 00f747b3 xor a5,a4,a5 + 8001b774: 40057513 andi a0,a0,1024 + 8001b778: 0807f793 andi a5,a5,128 + 8001b77c: 00a48533 add a0,s1,a0 + 8001b780: 000a061b sext.w a2,s4 + 8001b784: 00078e63 beqz a5,8001b7a0 <_ZL4mirav+0xb8> + 8001b788: 00092783 lw a5,0(s2) + 8001b78c: 0009b503 ld a0,0(s3) + 8001b790: 00000593 li a1,0 + 8001b794: 00f77733 and a4,a4,a5 + 8001b798: 00a71713 slli a4,a4,0xa + 8001b79c: 00e50533 add a0,a0,a4 + 8001b7a0: 001a0a1b addiw s4,s4,1 + 8001b7a4: f7cf50ef jal ra,80010f20 <_Z9setntamemPhij> + 8001b7a8: 002a8a93 addi s5,s5,2 + 8001b7ac: fa8a18e3 bne s4,s0,8001b75c <_ZL4mirav+0x74> + 8001b7b0: 03813083 ld ra,56(sp) + 8001b7b4: 03013403 ld s0,48(sp) + 8001b7b8: 02813483 ld s1,40(sp) + 8001b7bc: 02013903 ld s2,32(sp) + 8001b7c0: 01813983 ld s3,24(sp) + 8001b7c4: 01013a03 ld s4,16(sp) + 8001b7c8: 00813a83 ld s5,8(sp) + 8001b7cc: 00013b03 ld s6,0(sp) + 8001b7d0: 04010113 addi sp,sp,64 + 8001b7d4: 00008067 ret + 8001b7d8: 001b0717 auipc a4,0x1b0 + 8001b7dc: 7d872703 lw a4,2008(a4) # 801cbfb0 <_ZL5is211> + 8001b7e0: f40716e3 bnez a4,8001b72c <_ZL4mirav+0x44> + 8001b7e4: 001b4783 lbu a5,1(s6) + 8001b7e8: 00200713 li a4,2 + 8001b7ec: 00200513 li a0,2 + 8001b7f0: 0037f793 andi a5,a5,3 + 8001b7f4: 00e78e63 beq a5,a4,8001b810 <_ZL4mirav+0x128> + 8001b7f8: 00300713 li a4,3 + 8001b7fc: 00300513 li a0,3 + 8001b800: 00e78863 beq a5,a4,8001b810 <_ZL4mirav+0x128> + 8001b804: 00100713 li a4,1 + 8001b808: 00100513 li a0,1 + 8001b80c: 08e78463 beq a5,a4,8001b894 <_ZL4mirav+0x1ac> + 8001b810: 03013403 ld s0,48(sp) + 8001b814: 03813083 ld ra,56(sp) + 8001b818: 02813483 ld s1,40(sp) + 8001b81c: 02013903 ld s2,32(sp) + 8001b820: 01813983 ld s3,24(sp) + 8001b824: 01013a03 ld s4,16(sp) + 8001b828: 00813a83 ld s5,8(sp) + 8001b82c: 00013b03 ld s6,0(sp) + 8001b830: 04010113 addi sp,sp,64 + 8001b834: 815f506f j 80011048 <_Z9setmirrori> + 8001b838: 001b0497 auipc s1,0x1b0 + 8001b83c: 78048493 addi s1,s1,1920 # 801cbfb8 <_ZL5names> + 8001b840: 00000413 li s0,0 + 8001b844: 000a7a17 auipc s4,0xa7 + 8001b848: dbca0a13 addi s4,s4,-580 # 800c2600 + 8001b84c: 000a7997 auipc s3,0xa7 + 8001b850: bb498993 addi s3,s3,-1100 # 800c2400 + 8001b854: 00400913 li s2,4 + 8001b858: 0004d783 lhu a5,0(s1) + 8001b85c: 0009a703 lw a4,0(s3) + 8001b860: 000a3503 ld a0,0(s4) + 8001b864: 00040613 mv a2,s0 + 8001b868: 00e7f7b3 and a5,a5,a4 + 8001b86c: 00a7979b slliw a5,a5,0xa + 8001b870: 02079793 slli a5,a5,0x20 + 8001b874: 0207d793 srli a5,a5,0x20 + 8001b878: 00000593 li a1,0 + 8001b87c: 00f50533 add a0,a0,a5 + 8001b880: 0014041b addiw s0,s0,1 + 8001b884: e9cf50ef jal ra,80010f20 <_Z9setntamemPhij> + 8001b888: 00248493 addi s1,s1,2 + 8001b88c: fd2416e3 bne s0,s2,8001b858 <_ZL4mirav+0x170> + 8001b890: f21ff06f j 8001b7b0 <_ZL4mirav+0xc8> + 8001b894: 00000513 li a0,0 + 8001b898: f79ff06f j 8001b810 <_ZL4mirav+0x128> + +000000008001b89c <_ZL10M90Restorei>: + 8001b89c: ff010113 addi sp,sp,-16 + 8001b8a0: 00113423 sd ra,8(sp) + 8001b8a4: 865ff0ef jal ra,8001b108 <_ZL7tekpromv> + 8001b8a8: b81ff0ef jal ra,8001b428 <_ZL7tekvromv> + 8001b8ac: 00813083 ld ra,8(sp) + 8001b8b0: 01010113 addi sp,sp,16 + 8001b8b4: e35ff06f j 8001b6e8 <_ZL4mirav> + +000000008001b8b8 <_ZL12M90ModeWritejh>: + 8001b8b8: ff010113 addi sp,sp,-16 + 8001b8bc: 00357793 andi a5,a0,3 + 8001b8c0: 001b0517 auipc a0,0x1b0 + 8001b8c4: 70850513 addi a0,a0,1800 # 801cbfc8 <_ZL5tkcom> + 8001b8c8: 00113423 sd ra,8(sp) + 8001b8cc: 00f50533 add a0,a0,a5 + 8001b8d0: 00b50023 sb a1,0(a0) + 8001b8d4: 835ff0ef jal ra,8001b108 <_ZL7tekpromv> + 8001b8d8: b51ff0ef jal ra,8001b428 <_ZL7tekvromv> + 8001b8dc: 00813083 ld ra,8(sp) + 8001b8e0: 01010113 addi sp,sp,16 + 8001b8e4: e05ff06f j 8001b6e8 <_ZL4mirav> + +000000008001b8e8 <_ZL10M90NTWritejh>: + 8001b8e8: 00357713 andi a4,a0,3 + 8001b8ec: 00171793 slli a5,a4,0x1 + 8001b8f0: 001b0717 auipc a4,0x1b0 + 8001b8f4: 6c870713 addi a4,a4,1736 # 801cbfb8 <_ZL5names> + 8001b8f8: 00f70733 add a4,a4,a5 + 8001b8fc: 00457513 andi a0,a0,4 + 8001b900: 00075783 lhu a5,0(a4) + 8001b904: 00050c63 beqz a0,8001b91c <_ZL10M90NTWritejh+0x34> + 8001b908: 0ff7f793 andi a5,a5,255 + 8001b90c: 00859593 slli a1,a1,0x8 + 8001b910: 00b7e7b3 or a5,a5,a1 + 8001b914: 00f71023 sh a5,0(a4) + 8001b918: dd1ff06f j 8001b6e8 <_ZL4mirav> + 8001b91c: f007f793 andi a5,a5,-256 + 8001b920: 00b7e7b3 or a5,a5,a1 + 8001b924: 00f71023 sh a5,0(a4) + 8001b928: dc1ff06f j 8001b6e8 <_ZL4mirav> + +000000008001b92c <_ZL8M90Powerv>: + 8001b92c: fe010113 addi sp,sp,-32 + 8001b930: 00913423 sd s1,8(sp) + 8001b934: 000064b7 lui s1,0x6 + 8001b938: fffff617 auipc a2,0xfffff + 8001b93c: 78060613 addi a2,a2,1920 # 8001b0b8 <_ZL11M90TekWritejh> + 8001b940: fff48593 addi a1,s1,-1 # 5fff <_entry_offset+0x5fff> + 8001b944: 00005537 lui a0,0x5 + 8001b948: 00113c23 sd ra,24(sp) + 8001b94c: 00813823 sd s0,16(sp) + 8001b950: 1d8180ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001b954: 000095b7 lui a1,0x9 + 8001b958: 00000617 auipc a2,0x0 + 8001b95c: ab860613 addi a2,a2,-1352 # 8001b410 <_ZL11M90PRGWritejh> + 8001b960: ff058593 addi a1,a1,-16 # 8ff0 <_entry_offset+0x8ff0> + 8001b964: 00008537 lui a0,0x8 + 8001b968: 1c0180ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001b96c: 0000a5b7 lui a1,0xa + 8001b970: 00000617 auipc a2,0x0 + 8001b974: d6060613 addi a2,a2,-672 # 8001b6d0 <_ZL14M90CHRlowWritejh> + 8001b978: fff58593 addi a1,a1,-1 # 9fff <_entry_offset+0x9fff> + 8001b97c: 00009537 lui a0,0x9 + 8001b980: 1a8180ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001b984: 0000b5b7 lui a1,0xb + 8001b988: 00000617 auipc a2,0x0 + 8001b98c: d3060613 addi a2,a2,-720 # 8001b6b8 <_ZL13M90CHRhiWritejh> + 8001b990: fff58593 addi a1,a1,-1 # afff <_entry_offset+0xafff> + 8001b994: 0000a537 lui a0,0xa + 8001b998: 190180ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001b99c: 0000c5b7 lui a1,0xc + 8001b9a0: 00000617 auipc a2,0x0 + 8001b9a4: f4860613 addi a2,a2,-184 # 8001b8e8 <_ZL10M90NTWritejh> + 8001b9a8: fff58593 addi a1,a1,-1 # bfff <_entry_offset+0xbfff> + 8001b9ac: 0000b537 lui a0,0xb + 8001b9b0: 178180ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001b9b4: 0000d437 lui s0,0xd + 8001b9b8: fff40593 addi a1,s0,-1 # cfff <_entry_offset+0xcfff> + 8001b9bc: 00000617 auipc a2,0x0 + 8001b9c0: 4ec60613 addi a2,a2,1260 # 8001bea8 <_ZL11M90IRQWritejh> + 8001b9c4: 0000c537 lui a0,0xc + 8001b9c8: 160180ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001b9cc: 5ff40593 addi a1,s0,1535 + 8001b9d0: 00000617 auipc a2,0x0 + 8001b9d4: ee860613 addi a2,a2,-280 # 8001b8b8 <_ZL12M90ModeWritejh> + 8001b9d8: 0000d537 lui a0,0xd + 8001b9dc: 14c180ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001b9e0: 00010437 lui s0,0x10 + 8001b9e4: fffff617 auipc a2,0xfffff + 8001b9e8: 72060613 addi a2,a2,1824 # 8001b104 <_ZL13M90DummyWritejh> + 8001b9ec: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8001b9f0: 0000e537 lui a0,0xe + 8001b9f4: 134180ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001b9f8: 00000617 auipc a2,0x0 + 8001b9fc: 15860613 addi a2,a2,344 # 8001bb50 <_ZL10M90TekReadj> + 8001ba00: fff48593 addi a1,s1,-1 + 8001ba04: 00005537 lui a0,0x5 + 8001ba08: 014180ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001ba0c: ffff5617 auipc a2,0xffff5 + 8001ba10: c5460613 addi a2,a2,-940 # 80010660 <_Z6CartBRj> + 8001ba14: fff40593 addi a1,s0,-1 + 8001ba18: 00006537 lui a0,0x6 + 8001ba1c: 000180ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001ba20: fff00793 li a5,-1 + 8001ba24: 00400613 li a2,4 + 8001ba28: 00000593 li a1,0 + 8001ba2c: 001b0717 auipc a4,0x1b0 + 8001ba30: 58f70a23 sb a5,1428(a4) # 801cbfc0 <_ZL5regie> + 8001ba34: 001b0517 auipc a0,0x1b0 + 8001ba38: 59450513 addi a0,a0,1428 # 801cbfc8 <_ZL5tkcom> + 8001ba3c: fff00793 li a5,-1 + 8001ba40: 001b0717 auipc a4,0x1b0 + 8001ba44: 56f71023 sh a5,1376(a4) # 801cbfa0 <_ZL3mul> + 8001ba48: 7e11f0ef jal ra,8003ba28 + 8001ba4c: 00400613 li a2,4 + 8001ba50: 0ff00593 li a1,255 + 8001ba54: 001b0517 auipc a0,0x1b0 + 8001ba58: 55450513 addi a0,a0,1364 # 801cbfa8 <_ZL4prgb> + 8001ba5c: 7cd1f0ef jal ra,8003ba28 + 8001ba60: 00800613 li a2,8 + 8001ba64: 0ff00593 li a1,255 + 8001ba68: 001b0517 auipc a0,0x1b0 + 8001ba6c: 56850513 addi a0,a0,1384 # 801cbfd0 <_ZL6chrlow> + 8001ba70: 7b91f0ef jal ra,8003ba28 + 8001ba74: 00800613 li a2,8 + 8001ba78: 0ff00593 li a1,255 + 8001ba7c: 001b0517 auipc a0,0x1b0 + 8001ba80: 56450513 addi a0,a0,1380 # 801cbfe0 <_ZL7chrhigh> + 8001ba84: 7a51f0ef jal ra,8003ba28 + 8001ba88: 00800613 li a2,8 + 8001ba8c: 00000593 li a1,0 + 8001ba90: 001b0517 auipc a0,0x1b0 + 8001ba94: 52850513 addi a0,a0,1320 # 801cbfb8 <_ZL5names> + 8001ba98: 7911f0ef jal ra,8003ba28 + 8001ba9c: 001b0797 auipc a5,0x1b0 + 8001baa0: 5147a783 lw a5,1300(a5) # 801cbfb0 <_ZL5is211> + 8001baa4: 02078463 beqz a5,8001bacc <_ZL8M90Powerv+0x1a0> + 8001baa8: fc000793 li a5,-64 + 8001baac: 001b0717 auipc a4,0x1b0 + 8001bab0: 52f70623 sb a5,1324(a4) # 801cbfd8 <_ZL6tekker> + 8001bab4: e54ff0ef jal ra,8001b108 <_ZL7tekpromv> + 8001bab8: 01013403 ld s0,16(sp) + 8001babc: 01813083 ld ra,24(sp) + 8001bac0: 00813483 ld s1,8(sp) + 8001bac4: 02010113 addi sp,sp,32 + 8001bac8: 961ff06f j 8001b428 <_ZL7tekvromv> + 8001bacc: 001b0797 auipc a5,0x1b0 + 8001bad0: 50078623 sb zero,1292(a5) # 801cbfd8 <_ZL6tekker> + 8001bad4: e34ff0ef jal ra,8001b108 <_ZL7tekpromv> + 8001bad8: 01013403 ld s0,16(sp) + 8001badc: 01813083 ld ra,24(sp) + 8001bae0: 00813483 ld s1,8(sp) + 8001bae4: 02010113 addi sp,sp,32 + 8001bae8: 941ff06f j 8001b428 <_ZL7tekvromv> + +000000008001baec <_ZL7toggliev>: + 8001baec: ff010113 addi sp,sp,-16 + 8001baf0: 00113423 sd ra,8(sp) + 8001baf4: 001b0797 auipc a5,0x1b0 + 8001baf8: 4e478793 addi a5,a5,1252 # 801cbfd8 <_ZL6tekker> + 8001bafc: 0007c583 lbu a1,0(a5) + 8001bb00: 0002a517 auipc a0,0x2a + 8001bb04: bc850513 addi a0,a0,-1080 # 800456c8 <_ZL8conv_tbl+0x40> + 8001bb08: 0405859b addiw a1,a1,64 + 8001bb0c: 0c05f593 andi a1,a1,192 + 8001bb10: 00b78023 sb a1,0(a5) + 8001bb14: 2351f0ef jal ra,8003b548 + 8001bb18: 00400613 li a2,4 + 8001bb1c: 00000593 li a1,0 + 8001bb20: 001b0517 auipc a0,0x1b0 + 8001bb24: 4a850513 addi a0,a0,1192 # 801cbfc8 <_ZL5tkcom> + 8001bb28: 7011f0ef jal ra,8003ba28 + 8001bb2c: 00400613 li a2,4 + 8001bb30: 0ff00593 li a1,255 + 8001bb34: 001b0517 auipc a0,0x1b0 + 8001bb38: 47450513 addi a0,a0,1140 # 801cbfa8 <_ZL4prgb> + 8001bb3c: 6ed1f0ef jal ra,8003ba28 + 8001bb40: dc8ff0ef jal ra,8001b108 <_ZL7tekpromv> + 8001bb44: 00813083 ld ra,8(sp) + 8001bb48: 01010113 addi sp,sp,16 + 8001bb4c: 8ddff06f j 8001b428 <_ZL7tekvromv> + +000000008001bb50 <_ZL10M90TekReadj>: + 8001bb50: 000067b7 lui a5,0x6 + 8001bb54: c0378713 addi a4,a5,-1021 # 5c03 <_entry_offset+0x5c03> + 8001bb58: ff010113 addi sp,sp,-16 + 8001bb5c: 00e57533 and a0,a0,a4 + 8001bb60: 00113423 sd ra,8(sp) + 8001bb64: 80178713 addi a4,a5,-2047 + 8001bb68: 02e50463 beq a0,a4,8001bb90 <_ZL10M90TekReadj+0x40> + 8001bb6c: 80378713 addi a4,a5,-2045 + 8001bb70: 06e50663 beq a0,a4,8001bbdc <_ZL10M90TekReadj+0x8c> + 8001bb74: 80078793 addi a5,a5,-2048 + 8001bb78: 04f50063 beq a0,a5,8001bbb8 <_ZL10M90TekReadj+0x68> + 8001bb7c: 00813083 ld ra,8(sp) + 8001bb80: 001b0517 auipc a0,0x1b0 + 8001bb84: 45854503 lbu a0,1112(a0) # 801cbfd8 <_ZL6tekker> + 8001bb88: 01010113 addi sp,sp,16 + 8001bb8c: 00008067 ret + 8001bb90: 001b0797 auipc a5,0x1b0 + 8001bb94: 41078793 addi a5,a5,1040 # 801cbfa0 <_ZL3mul> + 8001bb98: 0017c583 lbu a1,1(a5) + 8001bb9c: 0007c503 lbu a0,0(a5) + 8001bba0: 21c1e0ef jal ra,80039dbc <__muldi3> + 8001bba4: 00813083 ld ra,8(sp) + 8001bba8: 4085551b sraiw a0,a0,0x8 + 8001bbac: 0ff57513 andi a0,a0,255 + 8001bbb0: 01010113 addi sp,sp,16 + 8001bbb4: 00008067 ret + 8001bbb8: 001b0797 auipc a5,0x1b0 + 8001bbbc: 3e878793 addi a5,a5,1000 # 801cbfa0 <_ZL3mul> + 8001bbc0: 0017c583 lbu a1,1(a5) + 8001bbc4: 0007c503 lbu a0,0(a5) + 8001bbc8: 1f41e0ef jal ra,80039dbc <__muldi3> + 8001bbcc: 00813083 ld ra,8(sp) + 8001bbd0: 0ff57513 andi a0,a0,255 + 8001bbd4: 01010113 addi sp,sp,16 + 8001bbd8: 00008067 ret + 8001bbdc: 00813083 ld ra,8(sp) + 8001bbe0: 001b0517 auipc a0,0x1b0 + 8001bbe4: 3e054503 lbu a0,992(a0) # 801cbfc0 <_ZL5regie> + 8001bbe8: 01010113 addi sp,sp,16 + 8001bbec: 00008067 ret + +000000008001bbf0 <_ZL3CCLv>: + 8001bbf0: 001b0797 auipc a5,0x1b0 + 8001bbf4: 3e97c783 lbu a5,1001(a5) # 801cbfd9 <_ZL7IRQMode> + 8001bbf8: 0067d793 srli a5,a5,0x6 + 8001bbfc: 00100713 li a4,1 + 8001bc00: 04e78263 beq a5,a4,8001bc44 <_ZL3CCLv+0x54> + 8001bc04: 00200713 li a4,2 + 8001bc08: 00e78463 beq a5,a4,8001bc10 <_ZL3CCLv+0x20> + 8001bc0c: 00008067 ret + 8001bc10: 001b0717 auipc a4,0x1b0 + 8001bc14: 3d870713 addi a4,a4,984 # 801cbfe8 <_ZL8IRQCount> + 8001bc18: 00074783 lbu a5,0(a4) + 8001bc1c: 0ff00693 li a3,255 + 8001bc20: fff7879b addiw a5,a5,-1 + 8001bc24: 0ff7f793 andi a5,a5,255 + 8001bc28: 00f70023 sb a5,0(a4) + 8001bc2c: fed790e3 bne a5,a3,8001bc0c <_ZL3CCLv+0x1c> + 8001bc30: 001b0797 auipc a5,0x1b0 + 8001bc34: 3727c783 lbu a5,882(a5) # 801cbfa2 <_ZL4IRQa> + 8001bc38: fc078ae3 beqz a5,8001bc0c <_ZL3CCLv+0x1c> + 8001bc3c: 00100513 li a0,1 + 8001bc40: 8f8e506f j 80000d38 <_Z14X6502_IRQBegini> + 8001bc44: 001b0717 auipc a4,0x1b0 + 8001bc48: 3a470713 addi a4,a4,932 # 801cbfe8 <_ZL8IRQCount> + 8001bc4c: 00074783 lbu a5,0(a4) + 8001bc50: 0017879b addiw a5,a5,1 + 8001bc54: 0ff7f793 andi a5,a5,255 + 8001bc58: 00f70023 sb a5,0(a4) + 8001bc5c: fa0798e3 bnez a5,8001bc0c <_ZL3CCLv+0x1c> + 8001bc60: 001b0797 auipc a5,0x1b0 + 8001bc64: 3427c783 lbu a5,834(a5) # 801cbfa2 <_ZL4IRQa> + 8001bc68: fa0782e3 beqz a5,8001bc0c <_ZL3CCLv+0x1c> + 8001bc6c: fd1ff06f j 8001bc3c <_ZL3CCLv+0x4c> + +000000008001bc70 <_ZL12ClockCounterv>: + 8001bc70: 001b0797 auipc a5,0x1b0 + 8001bc74: 3697c783 lbu a5,873(a5) # 801cbfd9 <_ZL7IRQMode> + 8001bc78: 0047f693 andi a3,a5,4 + 8001bc7c: 00700713 li a4,7 + 8001bc80: 0007879b sext.w a5,a5 + 8001bc84: 00069463 bnez a3,8001bc8c <_ZL12ClockCounterv+0x1c> + 8001bc88: 0ff00713 li a4,255 + 8001bc8c: 0067d793 srli a5,a5,0x6 + 8001bc90: 00100693 li a3,1 + 8001bc94: 02d78a63 beq a5,a3,8001bcc8 <_ZL12ClockCounterv+0x58> + 8001bc98: 00200693 li a3,2 + 8001bc9c: 00d78463 beq a5,a3,8001bca4 <_ZL12ClockCounterv+0x34> + 8001bca0: 00008067 ret + 8001bca4: 001b0697 auipc a3,0x1b0 + 8001bca8: 32868693 addi a3,a3,808 # 801cbfcc <_ZL6IRQPre> + 8001bcac: 0006c783 lbu a5,0(a3) + 8001bcb0: fff7879b addiw a5,a5,-1 + 8001bcb4: 0ff7f793 andi a5,a5,255 + 8001bcb8: 00f68023 sb a5,0(a3) + 8001bcbc: 00e7f7b3 and a5,a5,a4 + 8001bcc0: fee790e3 bne a5,a4,8001bca0 <_ZL12ClockCounterv+0x30> + 8001bcc4: f2dff06f j 8001bbf0 <_ZL3CCLv> + 8001bcc8: 001b0697 auipc a3,0x1b0 + 8001bccc: 30468693 addi a3,a3,772 # 801cbfcc <_ZL6IRQPre> + 8001bcd0: 0006c783 lbu a5,0(a3) + 8001bcd4: 0017879b addiw a5,a5,1 + 8001bcd8: 0ff7f793 andi a5,a5,255 + 8001bcdc: 00f68023 sb a5,0(a3) + 8001bce0: 00e7f7b3 and a5,a5,a4 + 8001bce4: fe0780e3 beqz a5,8001bcc4 <_ZL12ClockCounterv+0x54> + 8001bce8: 00008067 ret + +000000008001bcec <_Z7CPUWrapi>: + 8001bcec: 001b0797 auipc a5,0x1b0 + 8001bcf0: 2ed7c783 lbu a5,749(a5) # 801cbfd9 <_ZL7IRQMode> + 8001bcf4: 0037f793 andi a5,a5,3 + 8001bcf8: 04079063 bnez a5,8001bd38 <_Z7CPUWrapi+0x4c> + 8001bcfc: fe010113 addi sp,sp,-32 + 8001bd00: 00913423 sd s1,8(sp) + 8001bd04: 00113c23 sd ra,24(sp) + 8001bd08: 00813823 sd s0,16(sp) + 8001bd0c: 00050493 mv s1,a0 + 8001bd10: 00a05a63 blez a0,8001bd24 <_Z7CPUWrapi+0x38> + 8001bd14: 00000413 li s0,0 + 8001bd18: 0014041b addiw s0,s0,1 + 8001bd1c: f55ff0ef jal ra,8001bc70 <_ZL12ClockCounterv> + 8001bd20: fe849ce3 bne s1,s0,8001bd18 <_Z7CPUWrapi+0x2c> + 8001bd24: 01813083 ld ra,24(sp) + 8001bd28: 01013403 ld s0,16(sp) + 8001bd2c: 00813483 ld s1,8(sp) + 8001bd30: 02010113 addi sp,sp,32 + 8001bd34: 00008067 ret + 8001bd38: 00008067 ret + +000000008001bd3c <_ZL6SLWrapv>: + 8001bd3c: 001b0797 auipc a5,0x1b0 + 8001bd40: 29d7c783 lbu a5,669(a5) # 801cbfd9 <_ZL7IRQMode> + 8001bd44: 0037f793 andi a5,a5,3 + 8001bd48: 00100713 li a4,1 + 8001bd4c: 00e78463 beq a5,a4,8001bd54 <_ZL6SLWrapv+0x18> + 8001bd50: 00008067 ret + 8001bd54: ff010113 addi sp,sp,-16 + 8001bd58: 00113423 sd ra,8(sp) + 8001bd5c: f15ff0ef jal ra,8001bc70 <_ZL12ClockCounterv> + 8001bd60: f11ff0ef jal ra,8001bc70 <_ZL12ClockCounterv> + 8001bd64: f0dff0ef jal ra,8001bc70 <_ZL12ClockCounterv> + 8001bd68: f09ff0ef jal ra,8001bc70 <_ZL12ClockCounterv> + 8001bd6c: f05ff0ef jal ra,8001bc70 <_ZL12ClockCounterv> + 8001bd70: f01ff0ef jal ra,8001bc70 <_ZL12ClockCounterv> + 8001bd74: efdff0ef jal ra,8001bc70 <_ZL12ClockCounterv> + 8001bd78: 00813083 ld ra,8(sp) + 8001bd7c: 01010113 addi sp,sp,16 + 8001bd80: ef1ff06f j 8001bc70 <_ZL12ClockCounterv> + +000000008001bd84 <_ZL6M90PPUj>: + 8001bd84: fd010113 addi sp,sp,-48 + 8001bd88: 001b0797 auipc a5,0x1b0 + 8001bd8c: 2517c783 lbu a5,593(a5) # 801cbfd9 <_ZL7IRQMode> + 8001bd90: 02113423 sd ra,40(sp) + 8001bd94: 02813023 sd s0,32(sp) + 8001bd98: 00913c23 sd s1,24(sp) + 8001bd9c: 0037f793 andi a5,a5,3 + 8001bda0: 00200713 li a4,2 + 8001bda4: 06e78263 beq a5,a4,8001be08 <_ZL6M90PPUj+0x84> + 8001bda8: 001b0797 auipc a5,0x1b0 + 8001bdac: 2047a783 lw a5,516(a5) # 801cbfac <_ZL5is209> + 8001bdb0: 02078c63 beqz a5,8001bde8 <_ZL6M90PPUj+0x64> + 8001bdb4: 0085579b srliw a5,a0,0x8 + 8001bdb8: 0ff7f793 andi a5,a5,255 + 8001bdbc: 01f00713 li a4,31 + 8001bdc0: 0085569b srliw a3,a0,0x8 + 8001bdc4: 00f76863 bltu a4,a5,8001bdd4 <_ZL6M90PPUj+0x50> + 8001bdc8: 00f6f793 andi a5,a3,15 + 8001bdcc: 00f00713 li a4,15 + 8001bdd0: 06e78463 beq a5,a4,8001be38 <_ZL6M90PPUj+0xb4> + 8001bdd4: 02813083 ld ra,40(sp) + 8001bdd8: 02013403 ld s0,32(sp) + 8001bddc: 01813483 ld s1,24(sp) + 8001bde0: 03010113 addi sp,sp,48 + 8001bde4: 00008067 ret + 8001bde8: 02813083 ld ra,40(sp) + 8001bdec: 02013403 ld s0,32(sp) + 8001bdf0: 40000793 li a5,1024 + 8001bdf4: 001b0717 auipc a4,0x1b0 + 8001bdf8: 1af71223 sh a5,420(a4) # 801cbf98 <_ZL3chr> + 8001bdfc: 01813483 ld s1,24(sp) + 8001be00: 03010113 addi sp,sp,48 + 8001be04: 00008067 ret + 8001be08: 001b0497 auipc s1,0x1b0 + 8001be0c: 1e448493 addi s1,s1,484 # 801cbfec <_ZL8lastread> + 8001be10: 0004a783 lw a5,0(s1) + 8001be14: 00a79663 bne a5,a0,8001be20 <_ZL6M90PPUj+0x9c> + 8001be18: 00a4a023 sw a0,0(s1) + 8001be1c: f8dff06f j 8001bda8 <_ZL6M90PPUj+0x24> + 8001be20: 00a13423 sd a0,8(sp) + 8001be24: e4dff0ef jal ra,8001bc70 <_ZL12ClockCounterv> + 8001be28: e49ff0ef jal ra,8001bc70 <_ZL12ClockCounterv> + 8001be2c: 00813503 ld a0,8(sp) + 8001be30: 00a4a023 sw a0,0(s1) + 8001be34: f75ff06f j 8001bda8 <_ZL6M90PPUj+0x24> + 8001be38: 0f057413 andi s0,a0,240 + 8001be3c: 0d000793 li a5,208 + 8001be40: 04f40263 beq s0,a5,8001be84 <_ZL6M90PPUj+0x100> + 8001be44: 0e000793 li a5,224 + 8001be48: f8f416e3 bne s0,a5,8001bdd4 <_ZL6M90PPUj+0x50> + 8001be4c: 4046d71b sraiw a4,a3,0x4 + 8001be50: 4026d79b sraiw a5,a3,0x2 + 8001be54: 0047f793 andi a5,a5,4 + 8001be58: 00177693 andi a3,a4,1 + 8001be5c: 001b0717 auipc a4,0x1b0 + 8001be60: 13c70713 addi a4,a4,316 # 801cbf98 <_ZL3chr> + 8001be64: 00d70733 add a4,a4,a3 + 8001be68: 0027e793 ori a5,a5,2 + 8001be6c: 00f70023 sb a5,0(a4) + 8001be70: 02013403 ld s0,32(sp) + 8001be74: 02813083 ld ra,40(sp) + 8001be78: 01813483 ld s1,24(sp) + 8001be7c: 03010113 addi sp,sp,48 + 8001be80: da8ff06f j 8001b428 <_ZL7tekvromv> + 8001be84: 4046d79b sraiw a5,a3,0x4 + 8001be88: 0017f713 andi a4,a5,1 + 8001be8c: 4026d69b sraiw a3,a3,0x2 + 8001be90: 001b0797 auipc a5,0x1b0 + 8001be94: 10878793 addi a5,a5,264 # 801cbf98 <_ZL3chr> + 8001be98: 00e787b3 add a5,a5,a4 + 8001be9c: 0046f693 andi a3,a3,4 + 8001bea0: 00d78023 sb a3,0(a5) + 8001bea4: fcdff06f j 8001be70 <_ZL6M90PPUj+0xec> + +000000008001bea8 <_ZL11M90IRQWritejh>: + 8001bea8: 00757513 andi a0,a0,7 + 8001beac: 0002a717 auipc a4,0x2a + 8001beb0: 82c70713 addi a4,a4,-2004 # 800456d8 <_ZL8conv_tbl+0x50> + 8001beb4: 00251513 slli a0,a0,0x2 + 8001beb8: 00e50533 add a0,a0,a4 + 8001bebc: 00052783 lw a5,0(a0) + 8001bec0: 00e787b3 add a5,a5,a4 + 8001bec4: 00078067 jr a5 + 8001bec8: 001b0797 auipc a5,0x1b0 + 8001becc: 0cb78423 sb a1,200(a5) # 801cbf90 <_ZL10IRQPreSize> + 8001bed0: 00008067 ret + 8001bed4: 001b0797 auipc a5,0x1b0 + 8001bed8: 10b782a3 sb a1,261(a5) # 801cbfd9 <_ZL7IRQMode> + 8001bedc: 00008067 ret + 8001bee0: 00100513 li a0,1 + 8001bee4: 001b0797 auipc a5,0x1b0 + 8001bee8: 0a078f23 sb zero,190(a5) # 801cbfa2 <_ZL4IRQa> + 8001beec: e65e406f j 80000d50 <_Z12X6502_IRQEndi> + 8001bef0: 00100793 li a5,1 + 8001bef4: 001b0717 auipc a4,0x1b0 + 8001bef8: 0af70723 sb a5,174(a4) # 801cbfa2 <_ZL4IRQa> + 8001befc: 00008067 ret + 8001bf00: 001b0797 auipc a5,0x1b0 + 8001bf04: 0cd7c783 lbu a5,205(a5) # 801cbfcd <_ZL6IRQXOR> + 8001bf08: 00f5c5b3 xor a1,a1,a5 + 8001bf0c: 001b0797 auipc a5,0x1b0 + 8001bf10: 0cb78023 sb a1,192(a5) # 801cbfcc <_ZL6IRQPre> + 8001bf14: 00008067 ret + 8001bf18: 001b0797 auipc a5,0x1b0 + 8001bf1c: 0b57c783 lbu a5,181(a5) # 801cbfcd <_ZL6IRQXOR> + 8001bf20: 00f5c5b3 xor a1,a1,a5 + 8001bf24: 001b0797 auipc a5,0x1b0 + 8001bf28: 0cb78223 sb a1,196(a5) # 801cbfe8 <_ZL8IRQCount> + 8001bf2c: 00008067 ret + 8001bf30: 001b0797 auipc a5,0x1b0 + 8001bf34: 08b78ea3 sb a1,157(a5) # 801cbfcd <_ZL6IRQXOR> + 8001bf38: 00008067 ret + 8001bf3c: 0015f593 andi a1,a1,1 + 8001bf40: 001b0797 auipc a5,0x1b0 + 8001bf44: 06b78123 sb a1,98(a5) # 801cbfa2 <_ZL4IRQa> + 8001bf48: f80594e3 bnez a1,8001bed0 <_ZL11M90IRQWritejh+0x28> + 8001bf4c: 00100513 li a0,1 + 8001bf50: e01e406f j 80000d50 <_Z12X6502_IRQEndi> + +000000008001bf54 <_Z13Mapper90_InitP8CartInfo>: + 8001bf54: 00000797 auipc a5,0x0 + 8001bf58: 9d878793 addi a5,a5,-1576 # 8001b92c <_ZL8M90Powerv> + 8001bf5c: 00f53023 sd a5,0(a0) + 8001bf60: 00000797 auipc a5,0x0 + 8001bf64: b8c78793 addi a5,a5,-1140 # 8001baec <_ZL7toggliev> + 8001bf68: 00f53423 sd a5,8(a0) + 8001bf6c: 001b0797 auipc a5,0x1b0 + 8001bf70: 0407a223 sw zero,68(a5) # 801cbfb0 <_ZL5is211> + 8001bf74: 001b0797 auipc a5,0x1b0 + 8001bf78: 0207ac23 sw zero,56(a5) # 801cbfac <_ZL5is209> + 8001bf7c: 00000797 auipc a5,0x0 + 8001bf80: e0878793 addi a5,a5,-504 # 8001bd84 <_ZL6M90PPUj> + 8001bf84: 001b0717 auipc a4,0x1b0 + 8001bf88: 78f73223 sd a5,1924(a4) # 801cc708 + 8001bf8c: 00000797 auipc a5,0x0 + 8001bf90: d6078793 addi a5,a5,-672 # 8001bcec <_Z7CPUWrapi> + 8001bf94: 001b0717 auipc a4,0x1b0 + 8001bf98: baf73623 sd a5,-1108(a4) # 801cbb40 + 8001bf9c: 00000797 auipc a5,0x0 + 8001bfa0: da078793 addi a5,a5,-608 # 8001bd3c <_ZL6SLWrapv> + 8001bfa4: 001b0717 auipc a4,0x1b0 + 8001bfa8: 72f73223 sd a5,1828(a4) # 801cc6c8 + 8001bfac: 00000797 auipc a5,0x0 + 8001bfb0: 8f078793 addi a5,a5,-1808 # 8001b89c <_ZL10M90Restorei> + 8001bfb4: 00000693 li a3,0 + 8001bfb8: 00000613 li a2,0 + 8001bfbc: fff00593 li a1,-1 + 8001bfc0: 00031517 auipc a0,0x31 + 8001bfc4: 86050513 addi a0,a0,-1952 # 8004c820 <_ZL13Tek_StateRegs> + 8001bfc8: 001b0717 auipc a4,0x1b0 + 8001bfcc: 68f73823 sd a5,1680(a4) # 801cc658 + 8001bfd0: 840e406f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001bfd4 <_Z14Mapper209_InitP8CartInfo>: + 8001bfd4: 00000797 auipc a5,0x0 + 8001bfd8: 95878793 addi a5,a5,-1704 # 8001b92c <_ZL8M90Powerv> + 8001bfdc: 00f53023 sd a5,0(a0) + 8001bfe0: 00000797 auipc a5,0x0 + 8001bfe4: b0c78793 addi a5,a5,-1268 # 8001baec <_ZL7toggliev> + 8001bfe8: 00f53423 sd a5,8(a0) + 8001bfec: 001b0797 auipc a5,0x1b0 + 8001bff0: fc07a223 sw zero,-60(a5) # 801cbfb0 <_ZL5is211> + 8001bff4: 00100793 li a5,1 + 8001bff8: 001b0717 auipc a4,0x1b0 + 8001bffc: faf72a23 sw a5,-76(a4) # 801cbfac <_ZL5is209> + 8001c000: 00000797 auipc a5,0x0 + 8001c004: d8478793 addi a5,a5,-636 # 8001bd84 <_ZL6M90PPUj> + 8001c008: 001b0717 auipc a4,0x1b0 + 8001c00c: 70f73023 sd a5,1792(a4) # 801cc708 + 8001c010: 00000797 auipc a5,0x0 + 8001c014: cdc78793 addi a5,a5,-804 # 8001bcec <_Z7CPUWrapi> + 8001c018: 001b0717 auipc a4,0x1b0 + 8001c01c: b2f73423 sd a5,-1240(a4) # 801cbb40 + 8001c020: 00000797 auipc a5,0x0 + 8001c024: d1c78793 addi a5,a5,-740 # 8001bd3c <_ZL6SLWrapv> + 8001c028: 001b0717 auipc a4,0x1b0 + 8001c02c: 6af73023 sd a5,1696(a4) # 801cc6c8 + 8001c030: 00000797 auipc a5,0x0 + 8001c034: 86c78793 addi a5,a5,-1940 # 8001b89c <_ZL10M90Restorei> + 8001c038: 00000693 li a3,0 + 8001c03c: 00000613 li a2,0 + 8001c040: fff00593 li a1,-1 + 8001c044: 00030517 auipc a0,0x30 + 8001c048: 7dc50513 addi a0,a0,2012 # 8004c820 <_ZL13Tek_StateRegs> + 8001c04c: 001b0717 auipc a4,0x1b0 + 8001c050: 60f73623 sd a5,1548(a4) # 801cc658 + 8001c054: fbde306f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001c058 <_Z14Mapper211_InitP8CartInfo>: + 8001c058: 00000797 auipc a5,0x0 + 8001c05c: 8d478793 addi a5,a5,-1836 # 8001b92c <_ZL8M90Powerv> + 8001c060: 00f53023 sd a5,0(a0) + 8001c064: 00000797 auipc a5,0x0 + 8001c068: a8878793 addi a5,a5,-1400 # 8001baec <_ZL7toggliev> + 8001c06c: 00f53423 sd a5,8(a0) + 8001c070: 00100793 li a5,1 + 8001c074: 001b0717 auipc a4,0x1b0 + 8001c078: f2f72e23 sw a5,-196(a4) # 801cbfb0 <_ZL5is211> + 8001c07c: 00000797 auipc a5,0x0 + 8001c080: d0878793 addi a5,a5,-760 # 8001bd84 <_ZL6M90PPUj> + 8001c084: 001b0717 auipc a4,0x1b0 + 8001c088: 68f73223 sd a5,1668(a4) # 801cc708 + 8001c08c: 00000797 auipc a5,0x0 + 8001c090: c6078793 addi a5,a5,-928 # 8001bcec <_Z7CPUWrapi> + 8001c094: 001b0717 auipc a4,0x1b0 + 8001c098: aaf73623 sd a5,-1364(a4) # 801cbb40 + 8001c09c: 00000797 auipc a5,0x0 + 8001c0a0: ca078793 addi a5,a5,-864 # 8001bd3c <_ZL6SLWrapv> + 8001c0a4: 001b0717 auipc a4,0x1b0 + 8001c0a8: 62f73223 sd a5,1572(a4) # 801cc6c8 + 8001c0ac: fffff797 auipc a5,0xfffff + 8001c0b0: 7f078793 addi a5,a5,2032 # 8001b89c <_ZL10M90Restorei> + 8001c0b4: 00000693 li a3,0 + 8001c0b8: 00000613 li a2,0 + 8001c0bc: fff00593 li a1,-1 + 8001c0c0: 00030517 auipc a0,0x30 + 8001c0c4: 76050513 addi a0,a0,1888 # 8004c820 <_ZL13Tek_StateRegs> + 8001c0c8: 001b0717 auipc a4,0x1b0 + 8001c0cc: 58f73823 sd a5,1424(a4) # 801cc658 + 8001c0d0: f41e306f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001c0d4 <_ZL10H2288Powerv>: + 8001c0d4: ff010113 addi sp,sp,-16 + 8001c0d8: 00113423 sd ra,8(sp) + 8001c0dc: 001b0797 auipc a5,0x1b0 + 8001c0e0: 17478793 addi a5,a5,372 # 801cc250 + 8001c0e4: 000780a3 sb zero,1(a5) + 8001c0e8: 00078023 sb zero,0(a5) + 8001c0ec: 0d40a0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 8001c0f0: 000105b7 lui a1,0x10 + 8001c0f4: ffff4617 auipc a2,0xffff4 + 8001c0f8: 56c60613 addi a2,a2,1388 # 80010660 <_Z6CartBRj> + 8001c0fc: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8001c100: 00008537 lui a0,0x8 + 8001c104: 119170ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001c108: 000065b7 lui a1,0x6 + 8001c10c: 00000617 auipc a2,0x0 + 8001c110: 0e460613 addi a2,a2,228 # 8001c1f0 <_ZL12H2288WriteLojh> + 8001c114: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 8001c118: 00005537 lui a0,0x5 + 8001c11c: 20d170ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001c120: 00813083 ld ra,8(sp) + 8001c124: 0000a5b7 lui a1,0xa + 8001c128: 00000617 auipc a2,0x0 + 8001c12c: 08860613 addi a2,a2,136 # 8001c1b0 <_ZL12H2288WriteHijh> + 8001c130: fff58593 addi a1,a1,-1 # 9fff <_entry_offset+0x9fff> + 8001c134: 00008537 lui a0,0x8 + 8001c138: 01010113 addi sp,sp,16 + 8001c13c: 1ed1706f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008001c140 <_ZL7H2288PWjh>: + 8001c140: 001b0797 auipc a5,0x1b0 + 8001c144: 1107c783 lbu a5,272(a5) # 801cc250 + 8001c148: 0407f713 andi a4,a5,64 + 8001c14c: 04070e63 beqz a4,8001c1a8 <_ZL7H2288PWjh+0x68> + 8001c150: 4027d59b sraiw a1,a5,0x2 + 8001c154: 0057f713 andi a4,a5,5 + 8001c158: 00a5f593 andi a1,a1,10 + 8001c15c: 0027f793 andi a5,a5,2 + 8001c160: 00e5e5b3 or a1,a1,a4 + 8001c164: 00078863 beqz a5,8001c174 <_ZL7H2288PWjh+0x34> + 8001c168: 0015d593 srli a1,a1,0x1 + 8001c16c: 00008537 lui a0,0x8 + 8001c170: ca5f406f j 80010e14 <_Z8setprg32jj> + 8001c174: ff010113 addi sp,sp,-16 + 8001c178: 00813023 sd s0,0(sp) + 8001c17c: 0005841b sext.w s0,a1 + 8001c180: 00040593 mv a1,s0 + 8001c184: 00008537 lui a0,0x8 + 8001c188: 00113423 sd ra,8(sp) + 8001c18c: acdf40ef jal ra,80010c58 <_Z8setprg16jj> + 8001c190: 00040593 mv a1,s0 + 8001c194: 00013403 ld s0,0(sp) + 8001c198: 00813083 ld ra,8(sp) + 8001c19c: 0000c537 lui a0,0xc + 8001c1a0: 01010113 addi sp,sp,16 + 8001c1a4: ab5f406f j 80010c58 <_Z8setprg16jj> + 8001c1a8: 03f5f593 andi a1,a1,63 + 8001c1ac: 8f1f406f j 80010a9c <_Z7setprg8jj> + +000000008001c1b0 <_ZL12H2288WriteHijh>: + 8001c1b0: 000086b7 lui a3,0x8 + 8001c1b4: 00168713 addi a4,a3,1 # 8001 <_entry_offset+0x8001> + 8001c1b8: 00e57533 and a0,a0,a4 + 8001c1bc: 00d50863 beq a0,a3,8001c1cc <_ZL12H2288WriteHijh+0x1c> + 8001c1c0: 00e51463 bne a0,a4,8001c1c8 <_ZL12H2288WriteHijh+0x18> + 8001c1c4: 7000a06f j 800268c4 <_Z13MMC3_CMDWritejh> + 8001c1c8: 00008067 ret + 8001c1cc: 0075f693 andi a3,a1,7 + 8001c1d0: 00031717 auipc a4,0x31 + 8001c1d4: d9070713 addi a4,a4,-624 # 8004cf60 + 8001c1d8: 00d70733 add a4,a4,a3 + 8001c1dc: 00074703 lbu a4,0(a4) + 8001c1e0: fc05f593 andi a1,a1,-64 + 8001c1e4: 00008537 lui a0,0x8 + 8001c1e8: 00e5e5b3 or a1,a1,a4 + 8001c1ec: 6d80a06f j 800268c4 <_Z13MMC3_CMDWritejh> + +000000008001c1f0 <_ZL12H2288WriteLojh>: + 8001c1f0: 03451793 slli a5,a0,0x34 + 8001c1f4: 0207da63 bgez a5,8001c228 <_ZL12H2288WriteLojh+0x38> + 8001c1f8: 00157513 andi a0,a0,1 + 8001c1fc: 00051c63 bnez a0,8001c214 <_ZL12H2288WriteLojh+0x24> + 8001c200: 001b0797 auipc a5,0x1b0 + 8001c204: 04b78823 sb a1,80(a5) # 801cc250 + 8001c208: 001b0517 auipc a0,0x1b0 + 8001c20c: 05454503 lbu a0,84(a0) # 801cc25c + 8001c210: 45d0906f j 80025e6c <_Z10FixMMC3PRGi> + 8001c214: 001b0797 auipc a5,0x1b0 + 8001c218: 02b78ea3 sb a1,61(a5) # 801cc251 + 8001c21c: 001b0517 auipc a0,0x1b0 + 8001c220: 04054503 lbu a0,64(a0) # 801cc25c + 8001c224: 4490906f j 80025e6c <_Z10FixMMC3PRGi> + 8001c228: 00008067 ret + +000000008001c22c <_Z13UNLH2288_InitP8CartInfo>: + 8001c22c: ff010113 addi sp,sp,-16 + 8001c230: 00000693 li a3,0 + 8001c234: 10000613 li a2,256 + 8001c238: 10000593 li a1,256 + 8001c23c: 00000713 li a4,0 + 8001c240: 00813023 sd s0,0(sp) + 8001c244: 00113423 sd ra,8(sp) + 8001c248: 00050413 mv s0,a0 + 8001c24c: 5cd0a0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 8001c250: 00000797 auipc a5,0x0 + 8001c254: ef078793 addi a5,a5,-272 # 8001c140 <_ZL7H2288PWjh> + 8001c258: 001b0717 auipc a4,0x1b0 + 8001c25c: 04f73023 sd a5,64(a4) # 801cc298 + 8001c260: 00000797 auipc a5,0x0 + 8001c264: e7478793 addi a5,a5,-396 # 8001c0d4 <_ZL10H2288Powerv> + 8001c268: 00f43023 sd a5,0(s0) + 8001c26c: 00013403 ld s0,0(sp) + 8001c270: 00813083 ld ra,8(sp) + 8001c274: 00029697 auipc a3,0x29 + 8001c278: 27c68693 addi a3,a3,636 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 8001c27c: 00000613 li a2,0 + 8001c280: 00200593 li a1,2 + 8001c284: 001b0517 auipc a0,0x1b0 + 8001c288: fcc50513 addi a0,a0,-52 # 801cc250 + 8001c28c: 01010113 addi sp,sp,16 + 8001c290: d81e306f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001c294 <_ZL4Syncv>: + 8001c294: ff010113 addi sp,sp,-16 + 8001c298: 00008537 lui a0,0x8 + 8001c29c: 001b0597 auipc a1,0x1b0 + 8001c2a0: d555c583 lbu a1,-683(a1) # 801cbff1 <_ZL4preg> + 8001c2a4: 00113423 sd ra,8(sp) + 8001c2a8: b6df40ef jal ra,80010e14 <_Z8setprg32jj> + 8001c2ac: 00813083 ld ra,8(sp) + 8001c2b0: 001b0517 auipc a0,0x1b0 + 8001c2b4: d4054503 lbu a0,-704(a0) # 801cbff0 <_ZL4creg> + 8001c2b8: 01010113 addi sp,sp,16 + 8001c2bc: c49f406f j 80010f04 <_Z7setchr8j> + +000000008001c2c0 <_ZL12StateRestorei>: + 8001c2c0: fd5ff06f j 8001c294 <_ZL4Syncv> + +000000008001c2c4 <_ZL8M79Writejh>: + 8001c2c4: 000047b7 lui a5,0x4 + 8001c2c8: 10078793 addi a5,a5,256 # 4100 <_entry_offset+0x4100> + 8001c2cc: 00f51a63 bne a0,a5,8001c2e0 <_ZL8M79Writejh+0x1c> + 8001c2d0: 4035d79b sraiw a5,a1,0x3 + 8001c2d4: 0017f793 andi a5,a5,1 + 8001c2d8: 001b0717 auipc a4,0x1b0 + 8001c2dc: d0f70ca3 sb a5,-743(a4) # 801cbff1 <_ZL4preg> + 8001c2e0: 0075f593 andi a1,a1,7 + 8001c2e4: 001b0797 auipc a5,0x1b0 + 8001c2e8: d0b78623 sb a1,-756(a5) # 801cbff0 <_ZL4creg> + 8001c2ec: fa9ff06f j 8001c294 <_ZL4Syncv> + +000000008001c2f0 <_ZL8M79Powerv>: + 8001c2f0: ff010113 addi sp,sp,-16 + 8001c2f4: fff00793 li a5,-1 + 8001c2f8: 00113423 sd ra,8(sp) + 8001c2fc: 00813023 sd s0,0(sp) + 8001c300: 001b0717 auipc a4,0x1b0 + 8001c304: cef708a3 sb a5,-783(a4) # 801cbff1 <_ZL4preg> + 8001c308: f8dff0ef jal ra,8001c294 <_ZL4Syncv> + 8001c30c: 000065b7 lui a1,0x6 + 8001c310: 00004537 lui a0,0x4 + 8001c314: 00000617 auipc a2,0x0 + 8001c318: fb060613 addi a2,a2,-80 # 8001c2c4 <_ZL8M79Writejh> + 8001c31c: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 8001c320: 10050513 addi a0,a0,256 # 4100 <_entry_offset+0x4100> + 8001c324: 005170ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001c328: 00010437 lui s0,0x10 + 8001c32c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8001c330: 00000617 auipc a2,0x0 + 8001c334: f9460613 addi a2,a2,-108 # 8001c2c4 <_ZL8M79Writejh> + 8001c338: 00008537 lui a0,0x8 + 8001c33c: 7ec170ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001c340: fff40593 addi a1,s0,-1 + 8001c344: 00013403 ld s0,0(sp) + 8001c348: 00813083 ld ra,8(sp) + 8001c34c: ffff4617 auipc a2,0xffff4 + 8001c350: 31460613 addi a2,a2,788 # 80010660 <_Z6CartBRj> + 8001c354: 00008537 lui a0,0x8 + 8001c358: 01010113 addi sp,sp,16 + 8001c35c: 6c01706f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +000000008001c360 <_Z13Mapper79_InitP8CartInfo>: + 8001c360: ff010113 addi sp,sp,-16 + 8001c364: 00113423 sd ra,8(sp) + 8001c368: 00000797 auipc a5,0x0 + 8001c36c: f8878793 addi a5,a5,-120 # 8001c2f0 <_ZL8M79Powerv> + 8001c370: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 8001c374: 00000693 li a3,0 + 8001c378: 00000613 li a2,0 + 8001c37c: fff00593 li a1,-1 + 8001c380: 0002f517 auipc a0,0x2f + 8001c384: b6850513 addi a0,a0,-1176 # 8004aee8 <_ZL9StateRegs> + 8001c388: c89e30ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001c38c: 00813083 ld ra,8(sp) + 8001c390: 00000797 auipc a5,0x0 + 8001c394: f3078793 addi a5,a5,-208 # 8001c2c0 <_ZL12StateRestorei> + 8001c398: 001b0717 auipc a4,0x1b0 + 8001c39c: 2cf73023 sd a5,704(a4) # 801cc658 + 8001c3a0: 01010113 addi sp,sp,16 + 8001c3a4: 00008067 ret + +000000008001c3a8 <_ZL4Syncv>: + 8001c3a8: ff010113 addi sp,sp,-16 + 8001c3ac: 001b0597 auipc a1,0x1b0 + 8001c3b0: c475c583 lbu a1,-953(a1) # 801cbff3 <_ZL4preg> + 8001c3b4: 00008537 lui a0,0x8 + 8001c3b8: 00113423 sd ra,8(sp) + 8001c3bc: 89df40ef jal ra,80010c58 <_Z8setprg16jj> + 8001c3c0: fff00593 li a1,-1 + 8001c3c4: 0000c537 lui a0,0xc + 8001c3c8: 891f40ef jal ra,80010c58 <_Z8setprg16jj> + 8001c3cc: 00000513 li a0,0 + 8001c3d0: b35f40ef jal ra,80010f04 <_Z7setchr8j> + 8001c3d4: 001b0517 auipc a0,0x1b0 + 8001c3d8: c1e54503 lbu a0,-994(a0) # 801cbff2 <_ZL4mirr> + 8001c3dc: 00051863 bnez a0,8001c3ec <_ZL4Syncv+0x44> + 8001c3e0: 00813083 ld ra,8(sp) + 8001c3e4: 01010113 addi sp,sp,16 + 8001c3e8: 00008067 ret + 8001c3ec: 00813083 ld ra,8(sp) + 8001c3f0: 01010113 addi sp,sp,16 + 8001c3f4: c55f406f j 80011048 <_Z9setmirrori> + +000000008001c3f8 <_ZL12StateRestorei>: + 8001c3f8: fb1ff06f j 8001c3a8 <_ZL4Syncv> + +000000008001c3fc <_ZL8M71Writejh>: + 8001c3fc: 0000f7b7 lui a5,0xf + 8001c400: 00f57533 and a0,a0,a5 + 8001c404: 000097b7 lui a5,0x9 + 8001c408: 00f50863 beq a0,a5,8001c418 <_ZL8M71Writejh+0x1c> + 8001c40c: 001b0797 auipc a5,0x1b0 + 8001c410: beb783a3 sb a1,-1049(a5) # 801cbff3 <_ZL4preg> + 8001c414: f95ff06f j 8001c3a8 <_ZL4Syncv> + 8001c418: 4045d59b sraiw a1,a1,0x4 + 8001c41c: 0015f593 andi a1,a1,1 + 8001c420: 0025859b addiw a1,a1,2 + 8001c424: 001b0797 auipc a5,0x1b0 + 8001c428: bcb78723 sb a1,-1074(a5) # 801cbff2 <_ZL4mirr> + 8001c42c: f7dff06f j 8001c3a8 <_ZL4Syncv> + +000000008001c430 <_ZL8M71Powerv>: + 8001c430: ff010113 addi sp,sp,-16 + 8001c434: 00113423 sd ra,8(sp) + 8001c438: 00813023 sd s0,0(sp) + 8001c43c: 001b0797 auipc a5,0x1b0 + 8001c440: ba078b23 sb zero,-1098(a5) # 801cbff2 <_ZL4mirr> + 8001c444: 00010437 lui s0,0x10 + 8001c448: f61ff0ef jal ra,8001c3a8 <_ZL4Syncv> + 8001c44c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8001c450: ffff4617 auipc a2,0xffff4 + 8001c454: 21060613 addi a2,a2,528 # 80010660 <_Z6CartBRj> + 8001c458: 00008537 lui a0,0x8 + 8001c45c: 5c0170ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001c460: fff40593 addi a1,s0,-1 + 8001c464: 00013403 ld s0,0(sp) + 8001c468: 00813083 ld ra,8(sp) + 8001c46c: 00000617 auipc a2,0x0 + 8001c470: f9060613 addi a2,a2,-112 # 8001c3fc <_ZL8M71Writejh> + 8001c474: 00008537 lui a0,0x8 + 8001c478: 01010113 addi sp,sp,16 + 8001c47c: 6ac1706f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008001c480 <_Z13Mapper71_InitP8CartInfo>: + 8001c480: 00000797 auipc a5,0x0 + 8001c484: fb078793 addi a5,a5,-80 # 8001c430 <_ZL8M71Powerv> + 8001c488: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 8001c48c: 00000797 auipc a5,0x0 + 8001c490: f6c78793 addi a5,a5,-148 # 8001c3f8 <_ZL12StateRestorei> + 8001c494: 00000693 li a3,0 + 8001c498: 00000613 li a2,0 + 8001c49c: fff00593 li a1,-1 + 8001c4a0: 0002f517 auipc a0,0x2f + 8001c4a4: a9050513 addi a0,a0,-1392 # 8004af30 <_ZL9StateRegs> + 8001c4a8: 001b0717 auipc a4,0x1b0 + 8001c4ac: 1af73823 sd a5,432(a4) # 801cc658 + 8001c4b0: b61e306f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001c4b4 <_ZL13UNLPEC586Readj>: + 8001c4b4: 001b0797 auipc a5,0x1b0 + 8001c4b8: b487c783 lbu a5,-1208(a5) # 801cbffc <_ZL3reg+0x4> + 8001c4bc: 0047d713 srli a4,a5,0x4 + 8001c4c0: 00029797 auipc a5,0x29 + 8001c4c4: 2a078793 addi a5,a5,672 # 80045760 <_ZL6br_tbl> + 8001c4c8: 00e787b3 add a5,a5,a4 + 8001c4cc: 0007c783 lbu a5,0(a5) + 8001c4d0: 0003b517 auipc a0,0x3b + 8001c4d4: 39854503 lbu a0,920(a0) # 80057868 + 8001c4d8: fd857513 andi a0,a0,-40 + 8001c4dc: 00f56533 or a0,a0,a5 + 8001c4e0: 0ff57513 andi a0,a0,255 + 8001c4e4: 00008067 ret + +000000008001c4e8 <_ZL14UNLPEC586Closev>: + 8001c4e8: 001b0517 auipc a0,0x1b0 + 8001c4ec: b1853503 ld a0,-1256(a0) # 801cc000 <_ZL4WRAM> + 8001c4f0: 02050263 beqz a0,8001c514 <_ZL14UNLPEC586Closev+0x2c> + 8001c4f4: ff010113 addi sp,sp,-16 + 8001c4f8: 00113423 sd ra,8(sp) + 8001c4fc: 844f60ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8001c500: 00813083 ld ra,8(sp) + 8001c504: 001b0797 auipc a5,0x1b0 + 8001c508: ae07be23 sd zero,-1284(a5) # 801cc000 <_ZL4WRAM> + 8001c50c: 01010113 addi sp,sp,16 + 8001c510: 00008067 ret + 8001c514: 001b0797 auipc a5,0x1b0 + 8001c518: ae07b623 sd zero,-1300(a5) # 801cc000 <_ZL4WRAM> + 8001c51c: 00008067 ret + +000000008001c520 <_ZL4Syncv>: + 8001c520: fe010113 addi sp,sp,-32 + 8001c524: 00000513 li a0,0 + 8001c528: 00113c23 sd ra,24(sp) + 8001c52c: 00813823 sd s0,16(sp) + 8001c530: 00913423 sd s1,8(sp) + 8001c534: 9d1f40ef jal ra,80010f04 <_Z7setchr8j> + 8001c538: 00000613 li a2,0 + 8001c53c: 000065b7 lui a1,0x6 + 8001c540: 01000513 li a0,16 + 8001c544: ba4f40ef jal ra,800108e8 <_Z8setprg8rijj> + 8001c548: 000a6717 auipc a4,0xa6 + 8001c54c: 67872703 lw a4,1656(a4) # 800c2bc0 + 8001c550: 000807b7 lui a5,0x80 + 8001c554: 04f71463 bne a4,a5,8001c59c <_ZL4Syncv+0x7c> + 8001c558: 001b0417 auipc s0,0x1b0 + 8001c55c: aa040413 addi s0,s0,-1376 # 801cbff8 <_ZL3reg> + 8001c560: 00044583 lbu a1,0(s0) + 8001c564: 0105f793 andi a5,a1,16 + 8001c568: 08079063 bnez a5,8001c5e8 <_ZL4Syncv+0xc8> + 8001c56c: 0405f793 andi a5,a1,64 + 8001c570: 08079663 bnez a5,8001c5fc <_ZL4Syncv+0xdc> + 8001c574: 0185f593 andi a1,a1,24 + 8001c578: 01800793 li a5,24 + 8001c57c: 00000513 li a0,0 + 8001c580: 00f58463 beq a1,a5,8001c588 <_ZL4Syncv+0x68> + 8001c584: 00100513 li a0,1 + 8001c588: 01013403 ld s0,16(sp) + 8001c58c: 01813083 ld ra,24(sp) + 8001c590: 00813483 ld s1,8(sp) + 8001c594: 02010113 addi sp,sp,32 + 8001c598: ab1f406f j 80011048 <_Z9setmirrori> + 8001c59c: 001b0497 auipc s1,0x1b0 + 8001c5a0: a5c48493 addi s1,s1,-1444 # 801cbff8 <_ZL3reg> + 8001c5a4: 0004c783 lbu a5,0(s1) + 8001c5a8: 00029417 auipc s0,0x29 + 8001c5ac: 1c840413 addi s0,s0,456 # 80045770 <_ZL6bs_tbl> + 8001c5b0: 00008537 lui a0,0x8 + 8001c5b4: 07f7f793 andi a5,a5,127 + 8001c5b8: 00f407b3 add a5,s0,a5 + 8001c5bc: 0007c583 lbu a1,0(a5) # 80000 <_entry_offset+0x80000> + 8001c5c0: 0045d593 srli a1,a1,0x4 + 8001c5c4: e94f40ef jal ra,80010c58 <_Z8setprg16jj> + 8001c5c8: 0004c783 lbu a5,0(s1) + 8001c5cc: 0000c537 lui a0,0xc + 8001c5d0: 07f7f793 andi a5,a5,127 + 8001c5d4: 00f40433 add s0,s0,a5 + 8001c5d8: 00044583 lbu a1,0(s0) + 8001c5dc: 00f5f593 andi a1,a1,15 + 8001c5e0: e78f40ef jal ra,80010c58 <_Z8setprg16jj> + 8001c5e4: fa1ff06f j 8001c584 <_ZL4Syncv+0x64> + 8001c5e8: 0075f593 andi a1,a1,7 + 8001c5ec: 00008537 lui a0,0x8 + 8001c5f0: 825f40ef jal ra,80010e14 <_Z8setprg32jj> + 8001c5f4: 00044583 lbu a1,0(s0) + 8001c5f8: f7dff06f j 8001c574 <_ZL4Syncv+0x54> + 8001c5fc: 4015d79b sraiw a5,a1,0x1 + 8001c600: 0107f793 andi a5,a5,16 + 8001c604: 00f5f593 andi a1,a1,15 + 8001c608: 00f5e5b3 or a1,a1,a5 + 8001c60c: 0205e593 ori a1,a1,32 + 8001c610: 00008537 lui a0,0x8 + 8001c614: c88f40ef jal ra,80010a9c <_Z7setprg8jj> + 8001c618: 00044583 lbu a1,0(s0) + 8001c61c: f59ff06f j 8001c574 <_ZL4Syncv+0x54> + +000000008001c620 <_ZL12StateRestorei>: + 8001c620: f01ff06f j 8001c520 <_ZL4Syncv> + +000000008001c624 <_ZL14UNLPEC586Writejh>: + 8001c624: 0085551b srliw a0,a0,0x8 + 8001c628: 001b0797 auipc a5,0x1b0 + 8001c62c: 9d078793 addi a5,a5,-1584 # 801cbff8 <_ZL3reg> + 8001c630: 00757513 andi a0,a0,7 + 8001c634: 00a78533 add a0,a5,a0 + 8001c638: 00b50023 sb a1,0(a0) # 8000 <_entry_offset+0x8000> + 8001c63c: 0007c783 lbu a5,0(a5) + 8001c640: 0077d79b srliw a5,a5,0x7 + 8001c644: 001b0717 auipc a4,0x1b0 + 8001c648: 0af72c23 sw a5,184(a4) # 801cc6fc + 8001c64c: ed5ff06f j 8001c520 <_ZL4Syncv> + +000000008001c650 <_ZL14UNLPEC586Powerv>: + 8001c650: fe010113 addi sp,sp,-32 + 8001c654: 00813823 sd s0,16(sp) + 8001c658: 000a6417 auipc s0,0xa6 + 8001c65c: 56840413 addi s0,s0,1384 # 800c2bc0 + 8001c660: 00042703 lw a4,0(s0) + 8001c664: 00113c23 sd ra,24(sp) + 8001c668: 00913423 sd s1,8(sp) + 8001c66c: 000807b7 lui a5,0x80 + 8001c670: 0af70e63 beq a4,a5,8001c72c <_ZL14UNLPEC586Powerv+0xdc> + 8001c674: 00e00793 li a5,14 + 8001c678: 001b0717 auipc a4,0x1b0 + 8001c67c: 98f70023 sb a5,-1664(a4) # 801cbff8 <_ZL3reg> + 8001c680: ea1ff0ef jal ra,8001c520 <_ZL4Syncv> + 8001c684: 000084b7 lui s1,0x8 + 8001c688: ffff4617 auipc a2,0xffff4 + 8001c68c: fd860613 addi a2,a2,-40 # 80010660 <_Z6CartBRj> + 8001c690: fff48593 addi a1,s1,-1 # 7fff <_entry_offset+0x7fff> + 8001c694: 00006537 lui a0,0x6 + 8001c698: 384170ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001c69c: ffff4617 auipc a2,0xffff4 + 8001c6a0: ff060613 addi a2,a2,-16 # 8001068c <_Z6CartBWjh> + 8001c6a4: fff48593 addi a1,s1,-1 + 8001c6a8: 00006537 lui a0,0x6 + 8001c6ac: 47c170ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001c6b0: 00042703 lw a4,0(s0) + 8001c6b4: 000807b7 lui a5,0x80 + 8001c6b8: 08f70063 beq a4,a5,8001c738 <_ZL14UNLPEC586Powerv+0xe8> + 8001c6bc: 000105b7 lui a1,0x10 + 8001c6c0: ffff4617 auipc a2,0xffff4 + 8001c6c4: fa060613 addi a2,a2,-96 # 80010660 <_Z6CartBRj> + 8001c6c8: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8001c6cc: 00008537 lui a0,0x8 + 8001c6d0: 34c170ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001c6d4: 00006437 lui s0,0x6 + 8001c6d8: fff40593 addi a1,s0,-1 # 5fff <_entry_offset+0x5fff> + 8001c6dc: 00000617 auipc a2,0x0 + 8001c6e0: f4860613 addi a2,a2,-184 # 8001c624 <_ZL14UNLPEC586Writejh> + 8001c6e4: 00005537 lui a0,0x5 + 8001c6e8: 440170ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001c6ec: fff40593 addi a1,s0,-1 + 8001c6f0: 00000617 auipc a2,0x0 + 8001c6f4: dc460613 addi a2,a2,-572 # 8001c4b4 <_ZL13UNLPEC586Readj> + 8001c6f8: 00005537 lui a0,0x5 + 8001c6fc: 320170ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001c700: 01013403 ld s0,16(sp) + 8001c704: 01813083 ld ra,24(sp) + 8001c708: 00813483 ld s1,8(sp) + 8001c70c: 001b0517 auipc a0,0x1b0 + 8001c710: 90052503 lw a0,-1792(a0) # 801cc00c <_ZL8WRAMSIZE> + 8001c714: 001b0617 auipc a2,0x1b0 + 8001c718: 8ec63603 ld a2,-1812(a2) # 801cc000 <_ZL4WRAM> + 8001c71c: 000065b7 lui a1,0x6 + 8001c720: 00a5551b srliw a0,a0,0xa + 8001c724: 02010113 addi sp,sp,32 + 8001c728: 8ede306f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + 8001c72c: 001b0797 auipc a5,0x1b0 + 8001c730: 8c078623 sb zero,-1844(a5) # 801cbff8 <_ZL3reg> + 8001c734: f4dff06f j 8001c680 <_ZL14UNLPEC586Powerv+0x30> + 8001c738: 000105b7 lui a1,0x10 + 8001c73c: 00000617 auipc a2,0x0 + 8001c740: 01860613 addi a2,a2,24 # 8001c754 <_ZL15UNLPEC586ReadHij> + 8001c744: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8001c748: 00008537 lui a0,0x8 + 8001c74c: 2d0170ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001c750: f85ff06f j 8001c6d4 <_ZL14UNLPEC586Powerv+0x84> + +000000008001c754 <_ZL15UNLPEC586ReadHij>: + 8001c754: 001b0797 auipc a5,0x1b0 + 8001c758: 8a47c783 lbu a5,-1884(a5) # 801cbff8 <_ZL3reg> + 8001c75c: 0107f713 andi a4,a5,16 + 8001c760: 00071a63 bnez a4,8001c774 <_ZL15UNLPEC586ReadHij+0x20> + 8001c764: 0407f793 andi a5,a5,64 + 8001c768: 00078863 beqz a5,8001c778 <_ZL15UNLPEC586ReadHij+0x24> + 8001c76c: 0000a7b7 lui a5,0xa + 8001c770: 00f57463 bgeu a0,a5,8001c778 <_ZL15UNLPEC586ReadHij+0x24> + 8001c774: eedf306f j 80010660 <_Z6CartBRj> + 8001c778: 0075579b srliw a5,a0,0x7 + 8001c77c: 0003e737 lui a4,0x3e + 8001c780: 00a7979b slliw a5,a5,0xa + 8001c784: 00e7f7b3 and a5,a5,a4 + 8001c788: 3ff57513 andi a0,a0,1023 + 8001c78c: 00a7e533 or a0,a5,a0 + 8001c790: 000427b7 lui a5,0x42 + 8001c794: c0078793 addi a5,a5,-1024 # 41c00 <_entry_offset+0x41c00> + 8001c798: 00f56533 or a0,a0,a5 + 8001c79c: 02051513 slli a0,a0,0x20 + 8001c7a0: 000a6797 auipc a5,0xa6 + 8001c7a4: 3007b783 ld a5,768(a5) # 800c2aa0 + 8001c7a8: 02055513 srli a0,a0,0x20 + 8001c7ac: 00a78533 add a0,a5,a0 + 8001c7b0: 00054503 lbu a0,0(a0) # 8000 <_entry_offset+0x8000> + 8001c7b4: 00008067 ret + +000000008001c7b8 <_Z13UNLPEC586InitP8CartInfo>: + 8001c7b8: fe010113 addi sp,sp,-32 + 8001c7bc: 00113c23 sd ra,24(sp) + 8001c7c0: 00813823 sd s0,16(sp) + 8001c7c4: 00913423 sd s1,8(sp) + 8001c7c8: 00000797 auipc a5,0x0 + 8001c7cc: e8878793 addi a5,a5,-376 # 8001c650 <_ZL14UNLPEC586Powerv> + 8001c7d0: 00f53023 sd a5,0(a0) + 8001c7d4: 00000797 auipc a5,0x0 + 8001c7d8: d1478793 addi a5,a5,-748 # 8001c4e8 <_ZL14UNLPEC586Closev> + 8001c7dc: 00f53823 sd a5,16(a0) + 8001c7e0: 00000797 auipc a5,0x0 + 8001c7e4: e4078793 addi a5,a5,-448 # 8001c620 <_ZL12StateRestorei> + 8001c7e8: 001b0417 auipc s0,0x1b0 + 8001c7ec: 82440413 addi s0,s0,-2012 # 801cc00c <_ZL8WRAMSIZE> + 8001c7f0: 001b0717 auipc a4,0x1b0 + 8001c7f4: e6f73423 sd a5,-408(a4) # 801cc658 + 8001c7f8: 00002537 lui a0,0x2 + 8001c7fc: 000027b7 lui a5,0x2 + 8001c800: 00f42023 sw a5,0(s0) + 8001c804: c69f50ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8001c808: 00042603 lw a2,0(s0) + 8001c80c: 00050593 mv a1,a0 + 8001c810: 001af497 auipc s1,0x1af + 8001c814: 7f048493 addi s1,s1,2032 # 801cc000 <_ZL4WRAM> + 8001c818: 00100693 li a3,1 + 8001c81c: 01000513 li a0,16 + 8001c820: 00b4b023 sd a1,0(s1) + 8001c824: cd1f30ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8001c828: 00042583 lw a1,0(s0) + 8001c82c: 0004b503 ld a0,0(s1) + 8001c830: 00029697 auipc a3,0x29 + 8001c834: af868693 addi a3,a3,-1288 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 8001c838: 00000613 li a2,0 + 8001c83c: fd4e30ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001c840: 01013403 ld s0,16(sp) + 8001c844: 01813083 ld ra,24(sp) + 8001c848: 00813483 ld s1,8(sp) + 8001c84c: 00000693 li a3,0 + 8001c850: 00000613 li a2,0 + 8001c854: fff00593 li a1,-1 + 8001c858: 0002e517 auipc a0,0x2e + 8001c85c: 72050513 addi a0,a0,1824 # 8004af78 <_ZL9StateRegs> + 8001c860: 02010113 addi sp,sp,32 + 8001c864: face306f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001c868 <_ZL4Syncv>: + 8001c868: fe010113 addi sp,sp,-32 + 8001c86c: 00913423 sd s1,8(sp) + 8001c870: 001af497 auipc s1,0x1af + 8001c874: 7a148493 addi s1,s1,1953 # 801cc011 <_ZL4mode> + 8001c878: 0004c783 lbu a5,0(s1) + 8001c87c: 00813823 sd s0,16(sp) + 8001c880: 001af417 auipc s0,0x1af + 8001c884: 79040413 addi s0,s0,1936 # 801cc010 <_ZL4bank> + 8001c888: 00044583 lbu a1,0(s0) + 8001c88c: 00113c23 sd ra,24(sp) + 8001c890: 0027f793 andi a5,a5,2 + 8001c894: 0025959b slliw a1,a1,0x2 + 8001c898: 06078463 beqz a5,8001c900 <_ZL4Syncv+0x98> + 8001c89c: 01c5f593 andi a1,a1,28 + 8001c8a0: 0235e593 ori a1,a1,35 + 8001c8a4: 00006537 lui a0,0x6 + 8001c8a8: 9f4f40ef jal ra,80010a9c <_Z7setprg8jj> + 8001c8ac: 00044583 lbu a1,0(s0) + 8001c8b0: 00008537 lui a0,0x8 + 8001c8b4: 0015959b slliw a1,a1,0x1 + 8001c8b8: ba0f40ef jal ra,80010c58 <_Z8setprg16jj> + 8001c8bc: 00044583 lbu a1,0(s0) + 8001c8c0: 0000c537 lui a0,0xc + 8001c8c4: 0015959b slliw a1,a1,0x1 + 8001c8c8: 0015e593 ori a1,a1,1 + 8001c8cc: 0005859b sext.w a1,a1 + 8001c8d0: b88f40ef jal ra,80010c58 <_Z8setprg16jj> + 8001c8d4: 0004c703 lbu a4,0(s1) + 8001c8d8: 01200793 li a5,18 + 8001c8dc: 06f70c63 beq a4,a5,8001c954 <_ZL4Syncv+0xec> + 8001c8e0: 00100513 li a0,1 + 8001c8e4: f64f40ef jal ra,80011048 <_Z9setmirrori> + 8001c8e8: 01013403 ld s0,16(sp) + 8001c8ec: 01813083 ld ra,24(sp) + 8001c8f0: 00813483 ld s1,8(sp) + 8001c8f4: 00000513 li a0,0 + 8001c8f8: 02010113 addi sp,sp,32 + 8001c8fc: e08f406f j 80010f04 <_Z7setchr8j> + 8001c900: 0105f593 andi a1,a1,16 + 8001c904: 02f5e593 ori a1,a1,47 + 8001c908: 00006537 lui a0,0x6 + 8001c90c: 990f40ef jal ra,80010a9c <_Z7setprg8jj> + 8001c910: 00044583 lbu a1,0(s0) + 8001c914: 0004c783 lbu a5,0(s1) + 8001c918: 00008537 lui a0,0x8 + 8001c91c: 0015959b slliw a1,a1,0x1 + 8001c920: 4047d79b sraiw a5,a5,0x4 + 8001c924: 00f5e5b3 or a1,a1,a5 + 8001c928: 0005859b sext.w a1,a1 + 8001c92c: b2cf40ef jal ra,80010c58 <_Z8setprg16jj> + 8001c930: 00044583 lbu a1,0(s0) + 8001c934: 0000c537 lui a0,0xc + 8001c938: 0015959b slliw a1,a1,0x1 + 8001c93c: 0185f593 andi a1,a1,24 + 8001c940: 0075e593 ori a1,a1,7 + 8001c944: b14f40ef jal ra,80010c58 <_Z8setprg16jj> + 8001c948: 0004c703 lbu a4,0(s1) + 8001c94c: 01200793 li a5,18 + 8001c950: f8f718e3 bne a4,a5,8001c8e0 <_ZL4Syncv+0x78> + 8001c954: 00000513 li a0,0 + 8001c958: ef0f40ef jal ra,80011048 <_Z9setmirrori> + 8001c95c: 01013403 ld s0,16(sp) + 8001c960: 01813083 ld ra,24(sp) + 8001c964: 00813483 ld s1,8(sp) + 8001c968: 00000513 li a0,0 + 8001c96c: 02010113 addi sp,sp,32 + 8001c970: d94f406f j 80010f04 <_Z7setchr8j> + +000000008001c974 <_ZL12StateRestorei>: + 8001c974: ef5ff06f j 8001c868 <_ZL4Syncv> + +000000008001c978 <_ZL8M51Resetv>: + 8001c978: 001af797 auipc a5,0x1af + 8001c97c: 68078c23 sb zero,1688(a5) # 801cc010 <_ZL4bank> + 8001c980: 00200793 li a5,2 + 8001c984: 001af717 auipc a4,0x1af + 8001c988: 68f706a3 sb a5,1677(a4) # 801cc011 <_ZL4mode> + 8001c98c: eddff06f j 8001c868 <_ZL4Syncv> + +000000008001c990 <_ZL12M51WriteBankjh>: + 8001c990: 00f5f793 andi a5,a1,15 + 8001c994: 001af717 auipc a4,0x1af + 8001c998: 66f70e23 sb a5,1660(a4) # 801cc010 <_ZL4bank> + 8001c99c: 03151793 slli a5,a0,0x31 + 8001c9a0: 0207d063 bgez a5,8001c9c0 <_ZL12M51WriteBankjh+0x30> + 8001c9a4: 001af717 auipc a4,0x1af + 8001c9a8: 66d70713 addi a4,a4,1645 # 801cc011 <_ZL4mode> + 8001c9ac: 00074783 lbu a5,0(a4) + 8001c9b0: 0105f593 andi a1,a1,16 + 8001c9b4: 0027f793 andi a5,a5,2 + 8001c9b8: 00b7e5b3 or a1,a5,a1 + 8001c9bc: 00b70023 sb a1,0(a4) + 8001c9c0: ea9ff06f j 8001c868 <_ZL4Syncv> + +000000008001c9c4 <_ZL12M51WriteModejh>: + 8001c9c4: 0125f593 andi a1,a1,18 + 8001c9c8: 001af797 auipc a5,0x1af + 8001c9cc: 64b784a3 sb a1,1609(a5) # 801cc011 <_ZL4mode> + 8001c9d0: e99ff06f j 8001c868 <_ZL4Syncv> + +000000008001c9d4 <_ZL8M51Powerv>: + 8001c9d4: 001af797 auipc a5,0x1af + 8001c9d8: 62078e23 sb zero,1596(a5) # 801cc010 <_ZL4bank> + 8001c9dc: ff010113 addi sp,sp,-16 + 8001c9e0: 00200793 li a5,2 + 8001c9e4: 00113423 sd ra,8(sp) + 8001c9e8: 00813023 sd s0,0(sp) + 8001c9ec: 001af717 auipc a4,0x1af + 8001c9f0: 62f702a3 sb a5,1573(a4) # 801cc011 <_ZL4mode> + 8001c9f4: e75ff0ef jal ra,8001c868 <_ZL4Syncv> + 8001c9f8: 000085b7 lui a1,0x8 + 8001c9fc: 00000617 auipc a2,0x0 + 8001ca00: fc860613 addi a2,a2,-56 # 8001c9c4 <_ZL12M51WriteModejh> + 8001ca04: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 8001ca08: 00006537 lui a0,0x6 + 8001ca0c: 11c170ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001ca10: 00010437 lui s0,0x10 + 8001ca14: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8001ca18: 00000617 auipc a2,0x0 + 8001ca1c: f7860613 addi a2,a2,-136 # 8001c990 <_ZL12M51WriteBankjh> + 8001ca20: 00008537 lui a0,0x8 + 8001ca24: 104170ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001ca28: fff40593 addi a1,s0,-1 + 8001ca2c: 00013403 ld s0,0(sp) + 8001ca30: 00813083 ld ra,8(sp) + 8001ca34: ffff4617 auipc a2,0xffff4 + 8001ca38: c2c60613 addi a2,a2,-980 # 80010660 <_Z6CartBRj> + 8001ca3c: 00006537 lui a0,0x6 + 8001ca40: 01010113 addi sp,sp,16 + 8001ca44: 7d91606f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +000000008001ca48 <_Z13Mapper51_InitP8CartInfo>: + 8001ca48: ff010113 addi sp,sp,-16 + 8001ca4c: 00113423 sd ra,8(sp) + 8001ca50: 00000797 auipc a5,0x0 + 8001ca54: f8478793 addi a5,a5,-124 # 8001c9d4 <_ZL8M51Powerv> + 8001ca58: 00f53023 sd a5,0(a0) # 6000 <_entry_offset+0x6000> + 8001ca5c: 00000797 auipc a5,0x0 + 8001ca60: f1c78793 addi a5,a5,-228 # 8001c978 <_ZL8M51Resetv> + 8001ca64: 00f53423 sd a5,8(a0) + 8001ca68: 00000693 li a3,0 + 8001ca6c: 00000613 li a2,0 + 8001ca70: fff00593 li a1,-1 + 8001ca74: 0002e517 auipc a0,0x2e + 8001ca78: 54c50513 addi a0,a0,1356 # 8004afc0 <_ZL9StateRegs> + 8001ca7c: d94e30ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001ca80: 00813083 ld ra,8(sp) + 8001ca84: 00000797 auipc a5,0x0 + 8001ca88: ef078793 addi a5,a5,-272 # 8001c974 <_ZL12StateRestorei> + 8001ca8c: 001b0717 auipc a4,0x1b0 + 8001ca90: bcf73623 sd a5,-1076(a4) # 801cc658 + 8001ca94: 01010113 addi sp,sp,16 + 8001ca98: 00008067 ret + +000000008001ca9c <_ZL4Syncv>: + 8001ca9c: fe010113 addi sp,sp,-32 + 8001caa0: 00000513 li a0,0 + 8001caa4: 00813823 sd s0,16(sp) + 8001caa8: 00913423 sd s1,8(sp) + 8001caac: 00113c23 sd ra,24(sp) + 8001cab0: 000a6497 auipc s1,0xa6 + 8001cab4: ff048493 addi s1,s1,-16 # 800c2aa0 + 8001cab8: c4cf40ef jal ra,80010f04 <_Z7setchr8j> + 8001cabc: 0084b783 ld a5,8(s1) + 8001cac0: 001af417 auipc s0,0x1af + 8001cac4: 55240413 addi s0,s0,1362 # 801cc012 <_ZL4cmd0> + 8001cac8: 0c078263 beqz a5,8001cb8c <_ZL4Syncv+0xf0> + 8001cacc: 00044503 lbu a0,0(s0) + 8001cad0: 000065b7 lui a1,0x6 + 8001cad4: 0045161b slliw a2,a0,0x4 + 8001cad8: 03067613 andi a2,a2,48 + 8001cadc: 4025551b sraiw a0,a0,0x2 + 8001cae0: 00f66613 ori a2,a2,15 + 8001cae4: 00357513 andi a0,a0,3 + 8001cae8: e01f30ef jal ra,800108e8 <_Z8setprg8rijj> + 8001caec: 00044783 lbu a5,0(s0) + 8001caf0: 0107f713 andi a4,a5,16 + 8001caf4: 06070e63 beqz a4,8001cb70 <_ZL4Syncv+0xd4> + 8001caf8: 0084b703 ld a4,8(s1) + 8001cafc: 001af617 auipc a2,0x1af + 8001cb00: 51764603 lbu a2,1303(a2) # 801cc013 <_ZL4cmd1> + 8001cb04: 0007851b sext.w a0,a5 + 8001cb08: 00767613 andi a2,a2,7 + 8001cb0c: 00379793 slli a5,a5,0x3 + 8001cb10: 08070e63 beqz a4,8001cbac <_ZL4Syncv+0x110> + 8001cb14: 0187f793 andi a5,a5,24 + 8001cb18: 4025551b sraiw a0,a0,0x2 + 8001cb1c: 00f66633 or a2,a2,a5 + 8001cb20: 00357513 andi a0,a0,3 + 8001cb24: 000085b7 lui a1,0x8 + 8001cb28: f85f30ef jal ra,80010aac <_Z9setprg16rijj> + 8001cb2c: 00044503 lbu a0,0(s0) + 8001cb30: 0000c5b7 lui a1,0xc + 8001cb34: 0035161b slliw a2,a0,0x3 + 8001cb38: 01867613 andi a2,a2,24 + 8001cb3c: 4025551b sraiw a0,a0,0x2 + 8001cb40: 00766613 ori a2,a2,7 + 8001cb44: 00357513 andi a0,a0,3 + 8001cb48: f65f30ef jal ra,80010aac <_Z9setprg16rijj> + 8001cb4c: 00044503 lbu a0,0(s0) + 8001cb50: 01013403 ld s0,16(sp) + 8001cb54: 01813083 ld ra,24(sp) + 8001cb58: 00813483 ld s1,8(sp) + 8001cb5c: 00555513 srli a0,a0,0x5 + 8001cb60: 00154513 xori a0,a0,1 + 8001cb64: 00157513 andi a0,a0,1 + 8001cb68: 02010113 addi sp,sp,32 + 8001cb6c: cdcf406f j 80011048 <_Z9setmirrori> + 8001cb70: 0204b783 ld a5,32(s1) + 8001cb74: 06078663 beqz a5,8001cbe0 <_ZL4Syncv+0x144> + 8001cb78: 00000613 li a2,0 + 8001cb7c: 000085b7 lui a1,0x8 + 8001cb80: 00400513 li a0,4 + 8001cb84: 8e4f40ef jal ra,80010c68 <_Z9setprg32rijj> + 8001cb88: fc5ff06f j 8001cb4c <_ZL4Syncv+0xb0> + 8001cb8c: 00044583 lbu a1,0(s0) + 8001cb90: 00006537 lui a0,0x6 + 8001cb94: 0045959b slliw a1,a1,0x4 + 8001cb98: 0ff5f593 andi a1,a1,255 + 8001cb9c: 00f5e593 ori a1,a1,15 + 8001cba0: 00458593 addi a1,a1,4 # 8004 <_entry_offset+0x8004> + 8001cba4: ef9f30ef jal ra,80010a9c <_Z7setprg8jj> + 8001cba8: f45ff06f j 8001caec <_ZL4Syncv+0x50> + 8001cbac: 0787f793 andi a5,a5,120 + 8001cbb0: 00f667b3 or a5,a2,a5 + 8001cbb4: 00278593 addi a1,a5,2 + 8001cbb8: 00008537 lui a0,0x8 + 8001cbbc: 89cf40ef jal ra,80010c58 <_Z8setprg16jj> + 8001cbc0: 00044583 lbu a1,0(s0) + 8001cbc4: 0000c537 lui a0,0xc + 8001cbc8: 0035959b slliw a1,a1,0x3 + 8001cbcc: 0785f593 andi a1,a1,120 + 8001cbd0: 0075e593 ori a1,a1,7 + 8001cbd4: 00258593 addi a1,a1,2 + 8001cbd8: 880f40ef jal ra,80010c58 <_Z8setprg16jj> + 8001cbdc: f71ff06f j 8001cb4c <_ZL4Syncv+0xb0> + 8001cbe0: 00000593 li a1,0 + 8001cbe4: 00008537 lui a0,0x8 + 8001cbe8: a2cf40ef jal ra,80010e14 <_Z8setprg32jj> + 8001cbec: f61ff06f j 8001cb4c <_ZL4Syncv+0xb0> + +000000008001cbf0 <_ZL12SuperRestorei>: + 8001cbf0: eadff06f j 8001ca9c <_ZL4Syncv> + +000000008001cbf4 <_ZL10SuperResetv>: + 8001cbf4: 001af797 auipc a5,0x1af + 8001cbf8: 40078fa3 sb zero,1055(a5) # 801cc013 <_ZL4cmd1> + 8001cbfc: 001af797 auipc a5,0x1af + 8001cc00: 40078b23 sb zero,1046(a5) # 801cc012 <_ZL4cmd0> + 8001cc04: e99ff06f j 8001ca9c <_ZL4Syncv> + +000000008001cc08 <_ZL12SuperWriteHijh>: + 8001cc08: 001af797 auipc a5,0x1af + 8001cc0c: 40b785a3 sb a1,1035(a5) # 801cc013 <_ZL4cmd1> + 8001cc10: e8dff06f j 8001ca9c <_ZL4Syncv> + +000000008001cc14 <_ZL12SuperWriteLojh>: + 8001cc14: 001af717 auipc a4,0x1af + 8001cc18: 3fe70713 addi a4,a4,1022 # 801cc012 <_ZL4cmd0> + 8001cc1c: 00074783 lbu a5,0(a4) + 8001cc20: 0107f793 andi a5,a5,16 + 8001cc24: 00078463 beqz a5,8001cc2c <_ZL12SuperWriteLojh+0x18> + 8001cc28: 00008067 ret + 8001cc2c: 00b70023 sb a1,0(a4) + 8001cc30: e6dff06f j 8001ca9c <_ZL4Syncv> + +000000008001cc34 <_ZL10SuperPowerv>: + 8001cc34: 000085b7 lui a1,0x8 + 8001cc38: ff010113 addi sp,sp,-16 + 8001cc3c: 00000617 auipc a2,0x0 + 8001cc40: fd860613 addi a2,a2,-40 # 8001cc14 <_ZL12SuperWriteLojh> + 8001cc44: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 8001cc48: 00006537 lui a0,0x6 + 8001cc4c: 00113423 sd ra,8(sp) + 8001cc50: 00813023 sd s0,0(sp) + 8001cc54: 6d5160ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001cc58: 00010437 lui s0,0x10 + 8001cc5c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8001cc60: 00000617 auipc a2,0x0 + 8001cc64: fa860613 addi a2,a2,-88 # 8001cc08 <_ZL12SuperWriteHijh> + 8001cc68: 00008537 lui a0,0x8 + 8001cc6c: 6bd160ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001cc70: fff40593 addi a1,s0,-1 + 8001cc74: ffff4617 auipc a2,0xffff4 + 8001cc78: 9ec60613 addi a2,a2,-1556 # 80010660 <_Z6CartBRj> + 8001cc7c: 00006537 lui a0,0x6 + 8001cc80: 59d160ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001cc84: 00013403 ld s0,0(sp) + 8001cc88: 00813083 ld ra,8(sp) + 8001cc8c: 001af797 auipc a5,0x1af + 8001cc90: 380783a3 sb zero,903(a5) # 801cc013 <_ZL4cmd1> + 8001cc94: 001af797 auipc a5,0x1af + 8001cc98: 36078f23 sb zero,894(a5) # 801cc012 <_ZL4cmd0> + 8001cc9c: 01010113 addi sp,sp,16 + 8001cca0: dfdff06f j 8001ca9c <_ZL4Syncv> + +000000008001cca4 <_Z18Supervision16_InitP8CartInfo>: + 8001cca4: 00000797 auipc a5,0x0 + 8001cca8: f9078793 addi a5,a5,-112 # 8001cc34 <_ZL10SuperPowerv> + 8001ccac: 00f53023 sd a5,0(a0) # 6000 <_entry_offset+0x6000> + 8001ccb0: 00000797 auipc a5,0x0 + 8001ccb4: f4478793 addi a5,a5,-188 # 8001cbf4 <_ZL10SuperResetv> + 8001ccb8: 00f53423 sd a5,8(a0) + 8001ccbc: 00000797 auipc a5,0x0 + 8001ccc0: f3478793 addi a5,a5,-204 # 8001cbf0 <_ZL12SuperRestorei> + 8001ccc4: 00000693 li a3,0 + 8001ccc8: 00000613 li a2,0 + 8001cccc: fff00593 li a1,-1 + 8001ccd0: 0002e517 auipc a0,0x2e + 8001ccd4: 33850513 addi a0,a0,824 # 8004b008 <_ZL9StateRegs> + 8001ccd8: 001b0717 auipc a4,0x1b0 + 8001ccdc: 98f73023 sd a5,-1664(a4) # 801cc658 + 8001cce0: b30e306f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001cce4 <_ZL20UNLOneBusReadAPU40XXj>: + 8001cce4: 03f57793 andi a5,a0,63 + 8001cce8: 00379713 slli a4,a5,0x3 + 8001ccec: 000aa797 auipc a5,0xaa + 8001ccf0: 41478793 addi a5,a5,1044 # 800c7100 <_ZL10defapuread> + 8001ccf4: 00e787b3 add a5,a5,a4 + 8001ccf8: 0007b783 ld a5,0(a5) + 8001ccfc: ff010113 addi sp,sp,-16 + 8001cd00: 00813023 sd s0,0(sp) + 8001cd04: 00113423 sd ra,8(sp) + 8001cd08: 03f57413 andi s0,a0,63 + 8001cd0c: 000780e7 jalr a5 + 8001cd10: 01500793 li a5,21 + 8001cd14: 00f40a63 beq s0,a5,8001cd28 <_ZL20UNLOneBusReadAPU40XXj+0x44> + 8001cd18: 00813083 ld ra,8(sp) + 8001cd1c: 00013403 ld s0,0(sp) + 8001cd20: 01010113 addi sp,sp,16 + 8001cd24: 00008067 ret + 8001cd28: 000ab797 auipc a5,0xab + 8001cd2c: 8087c783 lbu a5,-2040(a5) # 800c7530 <_ZL7apu40xx+0x30> + 8001cd30: 0107f793 andi a5,a5,16 + 8001cd34: fe0782e3 beqz a5,8001cd18 <_ZL20UNLOneBusReadAPU40XXj+0x34> + 8001cd38: 00813083 ld ra,8(sp) + 8001cd3c: 00013403 ld s0,0(sp) + 8001cd40: 001af797 auipc a5,0x1af + 8001cd44: 2d67c783 lbu a5,726(a5) # 801cc016 <_ZL7pcm_irq> + 8001cd48: 07f57513 andi a0,a0,127 + 8001cd4c: 00f56533 or a0,a0,a5 + 8001cd50: 01010113 addi sp,sp,16 + 8001cd54: 00008067 ret + +000000008001cd58 <_ZL5PSyncv>: + 8001cd58: fc010113 addi sp,sp,-64 + 8001cd5c: 02813823 sd s0,48(sp) + 8001cd60: 02113c23 sd ra,56(sp) + 8001cd64: 02913423 sd s1,40(sp) + 8001cd68: 03213023 sd s2,32(sp) + 8001cd6c: 01313c23 sd s3,24(sp) + 8001cd70: 01413823 sd s4,16(sp) + 8001cd74: 01513423 sd s5,8(sp) + 8001cd78: 000aa797 auipc a5,0xaa + 8001cd7c: 7c878793 addi a5,a5,1992 # 800c7540 <_ZL7cpu410x> + 8001cd80: 00b7c603 lbu a2,11(a5) + 8001cd84: 00700713 li a4,7 + 8001cd88: 00767413 andi s0,a2,7 + 8001cd8c: 0ee40c63 beq s0,a4,8001ce84 <_ZL5PSyncv+0x12c> + 8001cd90: 03f00993 li s3,63 + 8001cd94: 4089d9bb sraw s3,s3,s0 + 8001cd98: fff9c693 not a3,s3 + 8001cd9c: 0ff9f913 andi s2,s3,255 + 8001cda0: 0006869b sext.w a3,a3 + 8001cda4: 0009899b sext.w s3,s3 + 8001cda8: 0007c403 lbu s0,0(a5) + 8001cdac: 00a7c803 lbu a6,10(a5) + 8001cdb0: 0057c483 lbu s1,5(a5) + 8001cdb4: 001af717 auipc a4,0x1af + 8001cdb8: 26474703 lbu a4,612(a4) # 801cc018 <_ZL8inv_hack> + 8001cdbc: 00001537 lui a0,0x1 + 8001cdc0: 00774593 xori a1,a4,7 + 8001cdc4: f0050513 addi a0,a0,-256 # f00 <_entry_offset+0xf00> + 8001cdc8: 0044141b slliw s0,s0,0x4 + 8001cdcc: 00874713 xori a4,a4,8 + 8001cdd0: 00a47433 and s0,s0,a0 + 8001cdd4: 0106f6b3 and a3,a3,a6 + 8001cdd8: 0084949b slliw s1,s1,0x8 + 8001cddc: 00b785b3 add a1,a5,a1 + 8001cde0: 00e78733 add a4,a5,a4 + 8001cde4: 00004537 lui a0,0x4 + 8001cde8: 04067613 andi a2,a2,64 + 8001cdec: 0005c583 lbu a1,0(a1) + 8001cdf0: 00074a03 lbu s4,0(a4) + 8001cdf4: 00d4043b addw s0,s0,a3 + 8001cdf8: 00a4f4b3 and s1,s1,a0 + 8001cdfc: 0fe00a93 li s5,254 + 8001ce00: 00060463 beqz a2,8001ce08 <_ZL5PSyncv+0xb0> + 8001ce04: 0097ca83 lbu s5,9(a5) + 8001ce08: 00b975b3 and a1,s2,a1 + 8001ce0c: 00008537 lui a0,0x8 + 8001ce10: 0085e5b3 or a1,a1,s0 + 8001ce14: 00a4c533 xor a0,s1,a0 + 8001ce18: 0005859b sext.w a1,a1 + 8001ce1c: 0005051b sext.w a0,a0 + 8001ce20: c7df30ef jal ra,80010a9c <_Z7setprg8jj> + 8001ce24: 014975b3 and a1,s2,s4 + 8001ce28: 0085e5b3 or a1,a1,s0 + 8001ce2c: 0005859b sext.w a1,a1 + 8001ce30: 0000a537 lui a0,0xa + 8001ce34: c69f30ef jal ra,80010a9c <_Z7setprg8jj> + 8001ce38: 015975b3 and a1,s2,s5 + 8001ce3c: 0000c537 lui a0,0xc + 8001ce40: 0085e5b3 or a1,a1,s0 + 8001ce44: 00a4c533 xor a0,s1,a0 + 8001ce48: 0005859b sext.w a1,a1 + 8001ce4c: 0005051b sext.w a0,a0 + 8001ce50: c4df30ef jal ra,80010a9c <_Z7setprg8jj> + 8001ce54: 0089e5b3 or a1,s3,s0 + 8001ce58: 03013403 ld s0,48(sp) + 8001ce5c: 03813083 ld ra,56(sp) + 8001ce60: 02813483 ld s1,40(sp) + 8001ce64: 02013903 ld s2,32(sp) + 8001ce68: 01813983 ld s3,24(sp) + 8001ce6c: 01013a03 ld s4,16(sp) + 8001ce70: 00813a83 ld s5,8(sp) + 8001ce74: 0005859b sext.w a1,a1 + 8001ce78: 0000e537 lui a0,0xe + 8001ce7c: 04010113 addi sp,sp,64 + 8001ce80: c1df306f j 80010a9c <_Z7setprg8jj> + 8001ce84: 0ff00993 li s3,255 + 8001ce88: f0000693 li a3,-256 + 8001ce8c: 0ff00913 li s2,255 + 8001ce90: f19ff06f j 8001cda8 <_ZL5PSyncv+0x50> + +000000008001ce94 <_ZL5CSyncv>: + 8001ce94: f9010113 addi sp,sp,-112 + 8001ce98: 06113423 sd ra,104(sp) + 8001ce9c: 06813023 sd s0,96(sp) + 8001cea0: 04913c23 sd s1,88(sp) + 8001cea4: 05213823 sd s2,80(sp) + 8001cea8: 05313423 sd s3,72(sp) + 8001ceac: 03713423 sd s7,40(sp) + 8001ceb0: 01b13423 sd s11,8(sp) + 8001ceb4: 05413023 sd s4,64(sp) + 8001ceb8: 03513c23 sd s5,56(sp) + 8001cebc: 03613823 sd s6,48(sp) + 8001cec0: 03813023 sd s8,32(sp) + 8001cec4: 01913c23 sd s9,24(sp) + 8001cec8: 01a13823 sd s10,16(sp) + 8001cecc: 000aa717 auipc a4,0xaa + 8001ced0: 68470713 addi a4,a4,1668 # 800c7550 <_ZL7ppu201x> + 8001ced4: 00a74503 lbu a0,10(a4) + 8001ced8: 0002a797 auipc a5,0x2a + 8001cedc: af878793 addi a5,a5,-1288 # 800469d0 <_ZZL5CSyncvE4midx> + 8001cee0: 000aab97 auipc s7,0xaa + 8001cee4: 660b8b93 addi s7,s7,1632 # 800c7540 <_ZL7cpu410x> + 8001cee8: 00757693 andi a3,a0,7 + 8001ceec: 00d787b3 add a5,a5,a3 + 8001cef0: 0007c783 lbu a5,0(a5) + 8001cef4: 00874583 lbu a1,8(a4) + 8001cef8: 000bc403 lbu s0,0(s7) + 8001cefc: 0ff00693 li a3,255 + 8001cf00: 00674a83 lbu s5,6(a4) + 8001cf04: 40f6d7bb sraw a5,a3,a5 + 8001cf08: 005bc483 lbu s1,5(s7) + 8001cf0c: 00008637 lui a2,0x8 + 8001cf10: 80060613 addi a2,a2,-2048 # 7800 <_entry_offset+0x7800> + 8001cf14: 0ff7f693 andi a3,a5,255 + 8001cf18: 00b4141b slliw s0,s0,0xb + 8001cf1c: 0045959b slliw a1,a1,0x4 + 8001cf20: 00c47433 and s0,s0,a2 + 8001cf24: 7005f593 andi a1,a1,1792 + 8001cf28: fff6c693 not a3,a3 + 8001cf2c: 00a6f6b3 and a3,a3,a0 + 8001cf30: 00001db7 lui s11,0x1 + 8001cf34: 00b46433 or s0,s0,a1 + 8001cf38: 0054949b slliw s1,s1,0x5 + 8001cf3c: 0157f5b3 and a1,a5,s5 + 8001cf40: 00d4043b addw s0,s0,a3 + 8001cf44: 00774a03 lbu s4,7(a4) + 8001cf48: 01b4f4b3 and s1,s1,s11 + 8001cf4c: 0fe5f593 andi a1,a1,254 + 8001cf50: 0004849b sext.w s1,s1 + 8001cf54: 0085e5b3 or a1,a1,s0 + 8001cf58: 00048513 mv a0,s1 + 8001cf5c: 0005859b sext.w a1,a1 + 8001cf60: 00274d03 lbu s10,2(a4) + 8001cf64: 00374c03 lbu s8,3(a4) + 8001cf68: 00474b03 lbu s6,4(a4) + 8001cf6c: 00574c83 lbu s9,5(a4) + 8001cf70: 0ff7f993 andi s3,a5,255 + 8001cf74: 0147f933 and s2,a5,s4 + 8001cf78: f2df30ef jal ra,80010ea4 <_Z7setchr1jj> + 8001cf7c: 001ae593 ori a1,s5,1 + 8001cf80: 00b9f5b3 and a1,s3,a1 + 8001cf84: 0085e5b3 or a1,a1,s0 + 8001cf88: 4004c513 xori a0,s1,1024 + 8001cf8c: 0005859b sext.w a1,a1 + 8001cf90: f15f30ef jal ra,80010ea4 <_Z7setchr1jj> + 8001cf94: 0fe97793 andi a5,s2,254 + 8001cf98: 00001ab7 lui s5,0x1 + 8001cf9c: 0087e5b3 or a1,a5,s0 + 8001cfa0: 800a8513 addi a0,s5,-2048 # 800 <_entry_offset+0x800> + 8001cfa4: 00a4c533 xor a0,s1,a0 + 8001cfa8: 0005859b sext.w a1,a1 + 8001cfac: ef9f30ef jal ra,80010ea4 <_Z7setchr1jj> + 8001cfb0: 001a6593 ori a1,s4,1 + 8001cfb4: 00b9f5b3 and a1,s3,a1 + 8001cfb8: 0085e5b3 or a1,a1,s0 + 8001cfbc: c00a8513 addi a0,s5,-1024 + 8001cfc0: 00a4c533 xor a0,s1,a0 + 8001cfc4: 0005859b sext.w a1,a1 + 8001cfc8: eddf30ef jal ra,80010ea4 <_Z7setchr1jj> + 8001cfcc: 01a9f5b3 and a1,s3,s10 + 8001cfd0: 01b4c533 xor a0,s1,s11 + 8001cfd4: 0085e5b3 or a1,a1,s0 + 8001cfd8: 0005859b sext.w a1,a1 + 8001cfdc: 0005051b sext.w a0,a0 + 8001cfe0: ec5f30ef jal ra,80010ea4 <_Z7setchr1jj> + 8001cfe4: 0189f5b3 and a1,s3,s8 + 8001cfe8: 0085e5b3 or a1,a1,s0 + 8001cfec: 400a8513 addi a0,s5,1024 + 8001cff0: 00a4c533 xor a0,s1,a0 + 8001cff4: 0005859b sext.w a1,a1 + 8001cff8: eadf30ef jal ra,80010ea4 <_Z7setchr1jj> + 8001cffc: 00002937 lui s2,0x2 + 8001d000: 0169f5b3 and a1,s3,s6 + 8001d004: 0085e5b3 or a1,a1,s0 + 8001d008: 80090513 addi a0,s2,-2048 # 1800 <_entry_offset+0x1800> + 8001d00c: 00a4c533 xor a0,s1,a0 + 8001d010: 0005859b sext.w a1,a1 + 8001d014: e91f30ef jal ra,80010ea4 <_Z7setchr1jj> + 8001d018: 0199f5b3 and a1,s3,s9 + 8001d01c: 0085e5b3 or a1,a1,s0 + 8001d020: c0090513 addi a0,s2,-1024 + 8001d024: 00a4c533 xor a0,s1,a0 + 8001d028: 0005859b sext.w a1,a1 + 8001d02c: e79f30ef jal ra,80010ea4 <_Z7setchr1jj> + 8001d030: 006bc503 lbu a0,6(s7) + 8001d034: 06013403 ld s0,96(sp) + 8001d038: 06813083 ld ra,104(sp) + 8001d03c: 05813483 ld s1,88(sp) + 8001d040: 05013903 ld s2,80(sp) + 8001d044: 04813983 ld s3,72(sp) + 8001d048: 04013a03 ld s4,64(sp) + 8001d04c: 03813a83 ld s5,56(sp) + 8001d050: 03013b03 ld s6,48(sp) + 8001d054: 02813b83 ld s7,40(sp) + 8001d058: 02013c03 ld s8,32(sp) + 8001d05c: 01813c83 ld s9,24(sp) + 8001d060: 01013d03 ld s10,16(sp) + 8001d064: 00813d83 ld s11,8(sp) + 8001d068: fff54513 not a0,a0 + 8001d06c: 00157513 andi a0,a0,1 + 8001d070: 07010113 addi sp,sp,112 + 8001d074: fd5f306f j 80011048 <_Z9setmirrori> + +000000008001d078 <_ZL12StateRestorei>: + 8001d078: ff010113 addi sp,sp,-16 + 8001d07c: 00113423 sd ra,8(sp) + 8001d080: cd9ff0ef jal ra,8001cd58 <_ZL5PSyncv> + 8001d084: 00813083 ld ra,8(sp) + 8001d088: 01010113 addi sp,sp,16 + 8001d08c: e09ff06f j 8001ce94 <_ZL5CSyncv> + +000000008001d090 <_ZL21UNLOneBusWritePPU201Xjh>: + 8001d090: ff010113 addi sp,sp,-16 + 8001d094: 00f57793 andi a5,a0,15 + 8001d098: 000aa517 auipc a0,0xaa + 8001d09c: 4b850513 addi a0,a0,1208 # 800c7550 <_ZL7ppu201x> + 8001d0a0: 00113423 sd ra,8(sp) + 8001d0a4: 00f50533 add a0,a0,a5 + 8001d0a8: 00b50023 sb a1,0(a0) + 8001d0ac: cadff0ef jal ra,8001cd58 <_ZL5PSyncv> + 8001d0b0: 00813083 ld ra,8(sp) + 8001d0b4: 01010113 addi sp,sp,16 + 8001d0b8: dddff06f j 8001ce94 <_ZL5CSyncv> + +000000008001d0bc <_ZL14UNLOneBusResetv>: + 8001d0bc: ff010113 addi sp,sp,-16 + 8001d0c0: 01000613 li a2,16 + 8001d0c4: 00000593 li a1,0 + 8001d0c8: 000aa517 auipc a0,0xaa + 8001d0cc: 47850513 addi a0,a0,1144 # 800c7540 <_ZL7cpu410x> + 8001d0d0: 00113423 sd ra,8(sp) + 8001d0d4: 001af797 auipc a5,0x1af + 8001d0d8: f40780a3 sb zero,-191(a5) # 801cc015 <_ZL4IRQa> + 8001d0dc: 001af797 auipc a5,0x1af + 8001d0e0: f2078da3 sb zero,-197(a5) # 801cc017 <_ZL8IRQCount> + 8001d0e4: 001af797 auipc a5,0x1af + 8001d0e8: f2078d23 sb zero,-198(a5) # 801cc01e <_ZL9IRQReload> + 8001d0ec: 13d1e0ef jal ra,8003ba28 + 8001d0f0: 01000613 li a2,16 + 8001d0f4: 00000593 li a1,0 + 8001d0f8: 000aa517 auipc a0,0xaa + 8001d0fc: 45850513 addi a0,a0,1112 # 800c7550 <_ZL7ppu201x> + 8001d100: 1291e0ef jal ra,8003ba28 + 8001d104: 04000613 li a2,64 + 8001d108: 00000593 li a1,0 + 8001d10c: 000aa517 auipc a0,0xaa + 8001d110: 3f450513 addi a0,a0,1012 # 800c7500 <_ZL7apu40xx> + 8001d114: 1151e0ef jal ra,8003ba28 + 8001d118: c41ff0ef jal ra,8001cd58 <_ZL5PSyncv> + 8001d11c: 00813083 ld ra,8(sp) + 8001d120: 01010113 addi sp,sp,16 + 8001d124: d71ff06f j 8001ce94 <_ZL5CSyncv> + +000000008001d128 <_ZL14UNLOneBusPowerv>: + 8001d128: fc010113 addi sp,sp,-64 + 8001d12c: 01000613 li a2,16 + 8001d130: 00000593 li a1,0 + 8001d134: 000aa517 auipc a0,0xaa + 8001d138: 40c50513 addi a0,a0,1036 # 800c7540 <_ZL7cpu410x> + 8001d13c: 02113c23 sd ra,56(sp) + 8001d140: 02913423 sd s1,40(sp) + 8001d144: 03213023 sd s2,32(sp) + 8001d148: 01313c23 sd s3,24(sp) + 8001d14c: 01413823 sd s4,16(sp) + 8001d150: 01513423 sd s5,8(sp) + 8001d154: 02813823 sd s0,48(sp) + 8001d158: 001af797 auipc a5,0x1af + 8001d15c: ea078ea3 sb zero,-323(a5) # 801cc015 <_ZL4IRQa> + 8001d160: 001af797 auipc a5,0x1af + 8001d164: ea078ba3 sb zero,-329(a5) # 801cc017 <_ZL8IRQCount> + 8001d168: 001af797 auipc a5,0x1af + 8001d16c: ea078b23 sb zero,-330(a5) # 801cc01e <_ZL9IRQReload> + 8001d170: 0b91e0ef jal ra,8003ba28 + 8001d174: 01000613 li a2,16 + 8001d178: 00000593 li a1,0 + 8001d17c: 000aa517 auipc a0,0xaa + 8001d180: 3d450513 addi a0,a0,980 # 800c7550 <_ZL7ppu201x> + 8001d184: 0a51e0ef jal ra,8003ba28 + 8001d188: 04000613 li a2,64 + 8001d18c: 00000593 li a1,0 + 8001d190: 000aa517 auipc a0,0xaa + 8001d194: 37050513 addi a0,a0,880 # 800c7500 <_ZL7apu40xx> + 8001d198: 0911e0ef jal ra,8003ba28 + 8001d19c: 00000693 li a3,0 + 8001d1a0: 000a6617 auipc a2,0xa6 + 8001d1a4: a2062603 lw a2,-1504(a2) # 800c2bc0 + 8001d1a8: 000a6597 auipc a1,0xa6 + 8001d1ac: 8f85b583 ld a1,-1800(a1) # 800c2aa0 + 8001d1b0: 00000513 li a0,0 + 8001d1b4: c10f30ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 8001d1b8: 000aa997 auipc s3,0xaa + 8001d1bc: f4898993 addi s3,s3,-184 # 800c7100 <_ZL10defapuread> + 8001d1c0: 000aa917 auipc s2,0xaa + 8001d1c4: 14090913 addi s2,s2,320 # 800c7300 <_ZL11defapuwrite> + 8001d1c8: 00000493 li s1,0 + 8001d1cc: 00004ab7 lui s5,0x4 + 8001d1d0: 04000a13 li s4,64 + 8001d1d4: 0154e433 or s0,s1,s5 + 8001d1d8: 0004041b sext.w s0,s0 + 8001d1dc: 00040513 mv a0,s0 + 8001d1e0: 7f0160ef jal ra,800339d0 <_Z14GetReadHandleri> + 8001d1e4: 00050793 mv a5,a0 + 8001d1e8: 00040513 mv a0,s0 + 8001d1ec: 00f9b023 sd a5,0(s3) + 8001d1f0: 0ed160ef jal ra,80033adc <_Z15GetWriteHandleri> + 8001d1f4: 00a93023 sd a0,0(s2) + 8001d1f8: 0014849b addiw s1,s1,1 + 8001d1fc: 00898993 addi s3,s3,8 + 8001d200: 00890913 addi s2,s2,8 + 8001d204: fd4498e3 bne s1,s4,8001d1d4 <_ZL14UNLOneBusPowerv+0xac> + 8001d208: 00004437 lui s0,0x4 + 8001d20c: 03f40593 addi a1,s0,63 # 403f <_entry_offset+0x403f> + 8001d210: 00000617 auipc a2,0x0 + 8001d214: ad460613 addi a2,a2,-1324 # 8001cce4 <_ZL20UNLOneBusReadAPU40XXj> + 8001d218: 00004537 lui a0,0x4 + 8001d21c: 001160ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001d220: 03f40593 addi a1,s0,63 + 8001d224: 00000617 auipc a2,0x0 + 8001d228: 09060613 addi a2,a2,144 # 8001d2b4 <_ZL21UNLOneBusWriteAPU40XXjh> + 8001d22c: 00004537 lui a0,0x4 + 8001d230: 0f9160ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001d234: 000104b7 lui s1,0x10 + 8001d238: fff48593 addi a1,s1,-1 # ffff <_entry_offset+0xffff> + 8001d23c: ffff3617 auipc a2,0xffff3 + 8001d240: 42460613 addi a2,a2,1060 # 80010660 <_Z6CartBRj> + 8001d244: 00008537 lui a0,0x8 + 8001d248: 7d4160ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001d24c: 00002537 lui a0,0x2 + 8001d250: 01f50593 addi a1,a0,31 # 201f <_entry_offset+0x201f> + 8001d254: 00000617 auipc a2,0x0 + 8001d258: e3c60613 addi a2,a2,-452 # 8001d090 <_ZL21UNLOneBusWritePPU201Xjh> + 8001d25c: 01050513 addi a0,a0,16 + 8001d260: 0c9160ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001d264: 10f40593 addi a1,s0,271 + 8001d268: 10040513 addi a0,s0,256 + 8001d26c: 00000617 auipc a2,0x0 + 8001d270: 48860613 addi a2,a2,1160 # 8001d6f4 <_ZL21UNLOneBusWriteCPU410Xjh> + 8001d274: 0b5160ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001d278: fff48593 addi a1,s1,-1 + 8001d27c: 00000617 auipc a2,0x0 + 8001d280: 2d060613 addi a2,a2,720 # 8001d54c <_ZL18UNLOneBusWriteMMC3jh> + 8001d284: 00008537 lui a0,0x8 + 8001d288: 0a1160ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001d28c: acdff0ef jal ra,8001cd58 <_ZL5PSyncv> + 8001d290: 03013403 ld s0,48(sp) + 8001d294: 03813083 ld ra,56(sp) + 8001d298: 02813483 ld s1,40(sp) + 8001d29c: 02013903 ld s2,32(sp) + 8001d2a0: 01813983 ld s3,24(sp) + 8001d2a4: 01013a03 ld s4,16(sp) + 8001d2a8: 00813a83 ld s5,8(sp) + 8001d2ac: 04010113 addi sp,sp,64 + 8001d2b0: be5ff06f j 8001ce94 <_ZL5CSyncv> + +000000008001d2b4 <_ZL21UNLOneBusWriteAPU40XXjh>: + 8001d2b4: fd010113 addi sp,sp,-48 + 8001d2b8: 00913c23 sd s1,24(sp) + 8001d2bc: 000aa717 auipc a4,0xaa + 8001d2c0: 24470713 addi a4,a4,580 # 800c7500 <_ZL7apu40xx> + 8001d2c4: 03f57493 andi s1,a0,63 + 8001d2c8: 02813023 sd s0,32(sp) + 8001d2cc: 009706b3 add a3,a4,s1 + 8001d2d0: 02113423 sd ra,40(sp) + 8001d2d4: 01213823 sd s2,16(sp) + 8001d2d8: 00b68023 sb a1,0(a3) + 8001d2dc: 01300693 li a3,19 + 8001d2e0: 00050413 mv s0,a0 + 8001d2e4: 04d48263 beq s1,a3,8001d328 <_ZL21UNLOneBusWriteAPU40XXjh+0x74> + 8001d2e8: 01500693 li a3,21 + 8001d2ec: 06d48c63 beq s1,a3,8001d364 <_ZL21UNLOneBusWriteAPU40XXjh+0xb0> + 8001d2f0: 01200693 li a3,18 + 8001d2f4: 04d48a63 beq s1,a3,8001d348 <_ZL21UNLOneBusWriteAPU40XXjh+0x94> + 8001d2f8: 00349493 slli s1,s1,0x3 + 8001d2fc: 000aa797 auipc a5,0xaa + 8001d300: 00478793 addi a5,a5,4 # 800c7300 <_ZL11defapuwrite> + 8001d304: 009784b3 add s1,a5,s1 + 8001d308: 00040513 mv a0,s0 + 8001d30c: 02013403 ld s0,32(sp) + 8001d310: 0004b303 ld t1,0(s1) + 8001d314: 02813083 ld ra,40(sp) + 8001d318: 01813483 ld s1,24(sp) + 8001d31c: 01013903 ld s2,16(sp) + 8001d320: 03010113 addi sp,sp,48 + 8001d324: 00030067 jr t1 + 8001d328: 03074783 lbu a5,48(a4) + 8001d32c: 0107f793 andi a5,a5,16 + 8001d330: fc0784e3 beqz a5,8001d2f8 <_ZL21UNLOneBusWriteAPU40XXjh+0x44> + 8001d334: 0045979b slliw a5,a1,0x4 + 8001d338: 0017879b addiw a5,a5,1 + 8001d33c: 001af717 auipc a4,0x1af + 8001d340: cef71023 sh a5,-800(a4) # 801cc01c <_ZL8pcm_size> + 8001d344: fb5ff06f j 8001d2f8 <_ZL21UNLOneBusWriteAPU40XXjh+0x44> + 8001d348: 03074783 lbu a5,48(a4) + 8001d34c: 0107f793 andi a5,a5,16 + 8001d350: fa0784e3 beqz a5,8001d2f8 <_ZL21UNLOneBusWriteAPU40XXjh+0x44> + 8001d354: 0065979b slliw a5,a1,0x6 + 8001d358: 001af717 auipc a4,0x1af + 8001d35c: ccf71123 sh a5,-830(a4) # 801cc01a <_ZL8pcm_addr> + 8001d360: f99ff06f j 8001d2f8 <_ZL21UNLOneBusWriteAPU40XXjh+0x44> + 8001d364: 03074783 lbu a5,48(a4) + 8001d368: 0107f793 andi a5,a5,16 + 8001d36c: f80786e3 beqz a5,8001d2f8 <_ZL21UNLOneBusWriteAPU40XXjh+0x44> + 8001d370: 0105f793 andi a5,a1,16 + 8001d374: 001af917 auipc s2,0x1af + 8001d378: ca090913 addi s2,s2,-864 # 801cc014 <_ZL10pcm_enable> + 8001d37c: 00f90023 sb a5,0(s2) + 8001d380: 001af717 auipc a4,0x1af + 8001d384: c9674703 lbu a4,-874(a4) # 801cc016 <_ZL7pcm_irq> + 8001d388: 02071063 bnez a4,8001d3a8 <_ZL21UNLOneBusWriteAPU40XXjh+0xf4> + 8001d38c: 00078a63 beqz a5,8001d3a0 <_ZL21UNLOneBusWriteAPU40XXjh+0xec> + 8001d390: 0002f797 auipc a5,0x2f + 8001d394: 6587d783 lhu a5,1624(a5) # 8004c9e8 <_ZL9pcm_clock> + 8001d398: 001af717 auipc a4,0x1af + 8001d39c: c8f71423 sh a5,-888(a4) # 801cc020 <_ZL9pcm_latch> + 8001d3a0: 0ef5f593 andi a1,a1,239 + 8001d3a4: f55ff06f j 8001d2f8 <_ZL21UNLOneBusWriteAPU40XXjh+0x44> + 8001d3a8: 00100513 li a0,1 + 8001d3ac: 00b13423 sd a1,8(sp) + 8001d3b0: 9a1e30ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8001d3b4: 00094783 lbu a5,0(s2) + 8001d3b8: 00813583 ld a1,8(sp) + 8001d3bc: 001af717 auipc a4,0x1af + 8001d3c0: c4070d23 sb zero,-934(a4) # 801cc016 <_ZL7pcm_irq> + 8001d3c4: fc9ff06f j 8001d38c <_ZL21UNLOneBusWriteAPU40XXjh+0xd8> + +000000008001d3c8 <_ZL16UNLOneBusCpuHooki>: + 8001d3c8: 001af797 auipc a5,0x1af + 8001d3cc: c4c7c783 lbu a5,-948(a5) # 801cc014 <_ZL10pcm_enable> + 8001d3d0: 02078663 beqz a5,8001d3fc <_ZL16UNLOneBusCpuHooki+0x34> + 8001d3d4: 001af717 auipc a4,0x1af + 8001d3d8: c4c70713 addi a4,a4,-948 # 801cc020 <_ZL9pcm_latch> + 8001d3dc: 00075783 lhu a5,0(a4) + 8001d3e0: 40a7853b subw a0,a5,a0 + 8001d3e4: 0105179b slliw a5,a0,0x10 + 8001d3e8: 4107d79b sraiw a5,a5,0x10 + 8001d3ec: 03051513 slli a0,a0,0x30 + 8001d3f0: 00f71023 sh a5,0(a4) + 8001d3f4: 03055513 srli a0,a0,0x30 + 8001d3f8: 00f05463 blez a5,8001d400 <_ZL16UNLOneBusCpuHooki+0x38> + 8001d3fc: 00008067 ret + 8001d400: 001af617 auipc a2,0x1af + 8001d404: c1c60613 addi a2,a2,-996 # 801cc01c <_ZL8pcm_size> + 8001d408: 00065783 lhu a5,0(a2) + 8001d40c: 0002f697 auipc a3,0x2f + 8001d410: 5dc6d683 lhu a3,1500(a3) # 8004c9e8 <_ZL9pcm_clock> + 8001d414: 00a6853b addw a0,a3,a0 + 8001d418: fff7879b addiw a5,a5,-1 + 8001d41c: 0107979b slliw a5,a5,0x10 + 8001d420: 4107d79b sraiw a5,a5,0x10 + 8001d424: 00a71023 sh a0,0(a4) + 8001d428: 00f61023 sh a5,0(a2) + 8001d42c: 0807c863 bltz a5,8001d4bc <_ZL16UNLOneBusCpuHooki+0xf4> + 8001d430: ff010113 addi sp,sp,-16 + 8001d434: 00813023 sd s0,0(sp) + 8001d438: 001af417 auipc s0,0x1af + 8001d43c: be240413 addi s0,s0,-1054 # 801cc01a <_ZL8pcm_addr> + 8001d440: 00045783 lhu a5,0(s0) + 8001d444: 000aa517 auipc a0,0xaa + 8001d448: 0ec54503 lbu a0,236(a0) # 800c7530 <_ZL7apu40xx+0x30> + 8001d44c: 00354513 xori a0,a0,3 + 8001d450: 00e5151b slliw a0,a0,0xe + 8001d454: 00f56533 or a0,a0,a5 + 8001d458: 03051513 slli a0,a0,0x30 + 8001d45c: 03055513 srli a0,a0,0x30 + 8001d460: 00351713 slli a4,a0,0x3 + 8001d464: 000ac797 auipc a5,0xac + 8001d468: 87c78793 addi a5,a5,-1924 # 800c8ce0 + 8001d46c: 00e787b3 add a5,a5,a4 + 8001d470: 0007b783 ld a5,0(a5) + 8001d474: 00113423 sd ra,8(sp) + 8001d478: 000780e7 jalr a5 + 8001d47c: 4015559b sraiw a1,a0,0x1 + 8001d480: 00004537 lui a0,0x4 + 8001d484: 000aa797 auipc a5,0xaa + 8001d488: f047b783 ld a5,-252(a5) # 800c7388 <_ZL11defapuwrite+0x88> + 8001d48c: 0ff5f593 andi a1,a1,255 + 8001d490: 01150513 addi a0,a0,17 # 4011 <_entry_offset+0x4011> + 8001d494: 000780e7 jalr a5 + 8001d498: 00045783 lhu a5,0(s0) + 8001d49c: 00813083 ld ra,8(sp) + 8001d4a0: 0017879b addiw a5,a5,1 + 8001d4a4: 03179793 slli a5,a5,0x31 + 8001d4a8: 0317d793 srli a5,a5,0x31 + 8001d4ac: 00f41023 sh a5,0(s0) + 8001d4b0: 00013403 ld s0,0(sp) + 8001d4b4: 01010113 addi sp,sp,16 + 8001d4b8: 00008067 ret + 8001d4bc: f8000793 li a5,-128 + 8001d4c0: 001af717 auipc a4,0x1af + 8001d4c4: b4f70b23 sb a5,-1194(a4) # 801cc016 <_ZL7pcm_irq> + 8001d4c8: 00100513 li a0,1 + 8001d4cc: 001af797 auipc a5,0x1af + 8001d4d0: b4078423 sb zero,-1208(a5) # 801cc014 <_ZL10pcm_enable> + 8001d4d4: 865e306f j 80000d38 <_Z14X6502_IRQBegini> + +000000008001d4d8 <_ZL16UNLOneBusIRQHookv>: + 8001d4d8: 001af717 auipc a4,0x1af + 8001d4dc: b3f70713 addi a4,a4,-1217 # 801cc017 <_ZL8IRQCount> + 8001d4e0: 00074783 lbu a5,0(a4) + 8001d4e4: 04078463 beqz a5,8001d52c <_ZL16UNLOneBusIRQHookv+0x54> + 8001d4e8: 001af697 auipc a3,0x1af + 8001d4ec: b366c683 lbu a3,-1226(a3) # 801cc01e <_ZL9IRQReload> + 8001d4f0: 02068663 beqz a3,8001d51c <_ZL16UNLOneBusIRQHookv+0x44> + 8001d4f4: 000aa797 auipc a5,0xaa + 8001d4f8: 04d7c783 lbu a5,77(a5) # 800c7541 <_ZL7cpu410x+0x1> + 8001d4fc: 00f70023 sb a5,0(a4) + 8001d500: 001af717 auipc a4,0x1af + 8001d504: b0070f23 sb zero,-1250(a4) # 801cc01e <_ZL9IRQReload> + 8001d508: 00079863 bnez a5,8001d518 <_ZL16UNLOneBusIRQHookv+0x40> + 8001d50c: 001af797 auipc a5,0x1af + 8001d510: b097c783 lbu a5,-1271(a5) # 801cc015 <_ZL4IRQa> + 8001d514: 02079863 bnez a5,8001d544 <_ZL16UNLOneBusIRQHookv+0x6c> + 8001d518: 00008067 ret + 8001d51c: fff7879b addiw a5,a5,-1 + 8001d520: 0ff7f793 andi a5,a5,255 + 8001d524: 00f70023 sb a5,0(a4) + 8001d528: fe1ff06f j 8001d508 <_ZL16UNLOneBusIRQHookv+0x30> + 8001d52c: 000aa797 auipc a5,0xaa + 8001d530: 0157c783 lbu a5,21(a5) # 800c7541 <_ZL7cpu410x+0x1> + 8001d534: 00f70023 sb a5,0(a4) + 8001d538: 001af797 auipc a5,0x1af + 8001d53c: ae078323 sb zero,-1306(a5) # 801cc01e <_ZL9IRQReload> + 8001d540: 00008067 ret + 8001d544: 00100513 li a0,1 + 8001d548: ff0e306f j 80000d38 <_Z14X6502_IRQBegini> + +000000008001d54c <_ZL18UNLOneBusWriteMMC3jh>: + 8001d54c: 0000e6b7 lui a3,0xe + 8001d550: 00168713 addi a4,a3,1 # e001 <_entry_offset+0xe001> + 8001d554: 00e57533 and a0,a0,a4 + 8001d558: 0000c7b7 lui a5,0xc + 8001d55c: 0af50463 beq a0,a5,8001d604 <_ZL18UNLOneBusWriteMMC3jh+0xb8> + 8001d560: ff010113 addi sp,sp,-16 + 8001d564: 00113423 sd ra,8(sp) + 8001d568: 02a7e663 bltu a5,a0,8001d594 <_ZL18UNLOneBusWriteMMC3jh+0x48> + 8001d56c: 000087b7 lui a5,0x8 + 8001d570: 00178713 addi a4,a5,1 # 8001 <_entry_offset+0x8001> + 8001d574: 0ae50063 beq a0,a4,8001d614 <_ZL18UNLOneBusWriteMMC3jh+0xc8> + 8001d578: 0000a737 lui a4,0xa + 8001d57c: 04e51c63 bne a0,a4,8001d5d4 <_ZL18UNLOneBusWriteMMC3jh+0x88> + 8001d580: 00813083 ld ra,8(sp) + 8001d584: 000aa797 auipc a5,0xaa + 8001d588: fcb78123 sb a1,-62(a5) # 800c7546 <_ZL7cpu410x+0x6> + 8001d58c: 01010113 addi sp,sp,16 + 8001d590: 905ff06f j 8001ce94 <_ZL5CSyncv> + 8001d594: 0ad50663 beq a0,a3,8001d640 <_ZL18UNLOneBusWriteMMC3jh+0xf4> + 8001d598: 00e51e63 bne a0,a4,8001d5b4 <_ZL18UNLOneBusWriteMMC3jh+0x68> + 8001d59c: 00100793 li a5,1 + 8001d5a0: 001af717 auipc a4,0x1af + 8001d5a4: a6f70aa3 sb a5,-1419(a4) # 801cc015 <_ZL4IRQa> + 8001d5a8: 00813083 ld ra,8(sp) + 8001d5ac: 01010113 addi sp,sp,16 + 8001d5b0: 00008067 ret + 8001d5b4: 00178793 addi a5,a5,1 + 8001d5b8: fef518e3 bne a0,a5,8001d5a8 <_ZL18UNLOneBusWriteMMC3jh+0x5c> + 8001d5bc: 00813083 ld ra,8(sp) + 8001d5c0: 00100793 li a5,1 + 8001d5c4: 001af717 auipc a4,0x1af + 8001d5c8: a4f70d23 sb a5,-1446(a4) # 801cc01e <_ZL9IRQReload> + 8001d5cc: 01010113 addi sp,sp,16 + 8001d5d0: 00008067 ret + 8001d5d4: fcf51ae3 bne a0,a5,8001d5a8 <_ZL18UNLOneBusWriteMMC3jh+0x5c> + 8001d5d8: 000aa717 auipc a4,0xaa + 8001d5dc: f6870713 addi a4,a4,-152 # 800c7540 <_ZL7cpu410x> + 8001d5e0: 00574783 lbu a5,5(a4) + 8001d5e4: fc75f593 andi a1,a1,-57 + 8001d5e8: 0387f793 andi a5,a5,56 + 8001d5ec: 00b7e5b3 or a1,a5,a1 + 8001d5f0: 00b702a3 sb a1,5(a4) + 8001d5f4: f64ff0ef jal ra,8001cd58 <_ZL5PSyncv> + 8001d5f8: 00813083 ld ra,8(sp) + 8001d5fc: 01010113 addi sp,sp,16 + 8001d600: 895ff06f j 8001ce94 <_ZL5CSyncv> + 8001d604: ffe5f593 andi a1,a1,-2 + 8001d608: 000aa797 auipc a5,0xaa + 8001d60c: f2b78ca3 sb a1,-199(a5) # 800c7541 <_ZL7cpu410x+0x1> + 8001d610: 00008067 ret + 8001d614: 000aa697 auipc a3,0xaa + 8001d618: f2c68693 addi a3,a3,-212 # 800c7540 <_ZL7cpu410x> + 8001d61c: 0056c783 lbu a5,5(a3) + 8001d620: 00028717 auipc a4,0x28 + 8001d624: 1dc70713 addi a4,a4,476 # 800457fc <_ZL6bs_tbl+0x8c> + 8001d628: 0077f793 andi a5,a5,7 + 8001d62c: 00279793 slli a5,a5,0x2 + 8001d630: 00e787b3 add a5,a5,a4 + 8001d634: 0007a783 lw a5,0(a5) + 8001d638: 00e787b3 add a5,a5,a4 + 8001d63c: 00078067 jr a5 + 8001d640: 00100513 li a0,1 + 8001d644: f0ce30ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8001d648: 00813083 ld ra,8(sp) + 8001d64c: 001af797 auipc a5,0x1af + 8001d650: 9c0784a3 sb zero,-1591(a5) # 801cc015 <_ZL4IRQa> + 8001d654: 01010113 addi sp,sp,16 + 8001d658: 00008067 ret + 8001d65c: 00b68423 sb a1,8(a3) + 8001d660: 00813083 ld ra,8(sp) + 8001d664: 01010113 addi sp,sp,16 + 8001d668: ef0ff06f j 8001cd58 <_ZL5PSyncv> + 8001d66c: 00b683a3 sb a1,7(a3) + 8001d670: 00813083 ld ra,8(sp) + 8001d674: 01010113 addi sp,sp,16 + 8001d678: ee0ff06f j 8001cd58 <_ZL5PSyncv> + 8001d67c: 00813083 ld ra,8(sp) + 8001d680: 000aa797 auipc a5,0xaa + 8001d684: ecb78aa3 sb a1,-299(a5) # 800c7555 <_ZL7ppu201x+0x5> + 8001d688: 01010113 addi sp,sp,16 + 8001d68c: 809ff06f j 8001ce94 <_ZL5CSyncv> + 8001d690: 00813083 ld ra,8(sp) + 8001d694: 000aa797 auipc a5,0xaa + 8001d698: ecb78023 sb a1,-320(a5) # 800c7554 <_ZL7ppu201x+0x4> + 8001d69c: 01010113 addi sp,sp,16 + 8001d6a0: ff4ff06f j 8001ce94 <_ZL5CSyncv> + 8001d6a4: 00813083 ld ra,8(sp) + 8001d6a8: 000aa797 auipc a5,0xaa + 8001d6ac: eab785a3 sb a1,-341(a5) # 800c7553 <_ZL7ppu201x+0x3> + 8001d6b0: 01010113 addi sp,sp,16 + 8001d6b4: fe0ff06f j 8001ce94 <_ZL5CSyncv> + 8001d6b8: 00813083 ld ra,8(sp) + 8001d6bc: 000aa797 auipc a5,0xaa + 8001d6c0: e8b78b23 sb a1,-362(a5) # 800c7552 <_ZL7ppu201x+0x2> + 8001d6c4: 01010113 addi sp,sp,16 + 8001d6c8: fccff06f j 8001ce94 <_ZL5CSyncv> + 8001d6cc: 00813083 ld ra,8(sp) + 8001d6d0: 000aa797 auipc a5,0xaa + 8001d6d4: e8b783a3 sb a1,-377(a5) # 800c7557 <_ZL7ppu201x+0x7> + 8001d6d8: 01010113 addi sp,sp,16 + 8001d6dc: fb8ff06f j 8001ce94 <_ZL5CSyncv> + 8001d6e0: 00813083 ld ra,8(sp) + 8001d6e4: 000aa797 auipc a5,0xaa + 8001d6e8: e6b78923 sb a1,-398(a5) # 800c7556 <_ZL7ppu201x+0x6> + 8001d6ec: 01010113 addi sp,sp,16 + 8001d6f0: fa4ff06f j 8001ce94 <_ZL5CSyncv> + +000000008001d6f4 <_ZL21UNLOneBusWriteCPU410Xjh>: + 8001d6f4: ff010113 addi sp,sp,-16 + 8001d6f8: 00113423 sd ra,8(sp) + 8001d6fc: 00f57793 andi a5,a0,15 + 8001d700: 00300713 li a4,3 + 8001d704: 04e78863 beq a5,a4,8001d754 <_ZL21UNLOneBusWriteCPU410Xjh+0x60> + 8001d708: 00c57513 andi a0,a0,12 + 8001d70c: 02051463 bnez a0,8001d734 <_ZL21UNLOneBusWriteCPU410Xjh+0x40> + 8001d710: 00100713 li a4,1 + 8001d714: 04e78e63 beq a5,a4,8001d770 <_ZL21UNLOneBusWriteCPU410Xjh+0x7c> + 8001d718: 00200693 li a3,2 + 8001d71c: 06d79663 bne a5,a3,8001d788 <_ZL21UNLOneBusWriteCPU410Xjh+0x94> + 8001d720: 00813083 ld ra,8(sp) + 8001d724: 001af797 auipc a5,0x1af + 8001d728: 8ee78d23 sb a4,-1798(a5) # 801cc01e <_ZL9IRQReload> + 8001d72c: 01010113 addi sp,sp,16 + 8001d730: 00008067 ret + 8001d734: 00400713 li a4,4 + 8001d738: 04e79863 bne a5,a4,8001d788 <_ZL21UNLOneBusWriteCPU410Xjh+0x94> + 8001d73c: 00813083 ld ra,8(sp) + 8001d740: 00100793 li a5,1 + 8001d744: 001af717 auipc a4,0x1af + 8001d748: 8cf708a3 sb a5,-1839(a4) # 801cc015 <_ZL4IRQa> + 8001d74c: 01010113 addi sp,sp,16 + 8001d750: 00008067 ret + 8001d754: 00100513 li a0,1 + 8001d758: df8e30ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8001d75c: 00813083 ld ra,8(sp) + 8001d760: 001af797 auipc a5,0x1af + 8001d764: 8a078aa3 sb zero,-1867(a5) # 801cc015 <_ZL4IRQa> + 8001d768: 01010113 addi sp,sp,16 + 8001d76c: 00008067 ret + 8001d770: 00813083 ld ra,8(sp) + 8001d774: ffe5f593 andi a1,a1,-2 + 8001d778: 000aa797 auipc a5,0xaa + 8001d77c: dcb784a3 sb a1,-567(a5) # 800c7541 <_ZL7cpu410x+0x1> + 8001d780: 01010113 addi sp,sp,16 + 8001d784: 00008067 ret + 8001d788: 000aa717 auipc a4,0xaa + 8001d78c: db870713 addi a4,a4,-584 # 800c7540 <_ZL7cpu410x> + 8001d790: 00f707b3 add a5,a4,a5 + 8001d794: 00b78023 sb a1,0(a5) + 8001d798: dc0ff0ef jal ra,8001cd58 <_ZL5PSyncv> + 8001d79c: 00813083 ld ra,8(sp) + 8001d7a0: 01010113 addi sp,sp,16 + 8001d7a4: ef0ff06f j 8001ce94 <_ZL5CSyncv> + +000000008001d7a8 <_Z14UNLOneBus_InitP8CartInfo>: + 8001d7a8: 00000797 auipc a5,0x0 + 8001d7ac: 98078793 addi a5,a5,-1664 # 8001d128 <_ZL14UNLOneBusPowerv> + 8001d7b0: 00f53023 sd a5,0(a0) + 8001d7b4: 06852703 lw a4,104(a0) + 8001d7b8: 00000797 auipc a5,0x0 + 8001d7bc: 90478793 addi a5,a5,-1788 # 8001d0bc <_ZL14UNLOneBusResetv> + 8001d7c0: 00f53423 sd a5,8(a0) + 8001d7c4: 305fd7b7 lui a5,0x305fd + 8001d7c8: dc378793 addi a5,a5,-573 # 305fcdc3 <_entry_offset+0x305fcdc3> + 8001d7cc: 04f70c63 beq a4,a5,8001d824 <_Z14UNLOneBus_InitP8CartInfo+0x7c> + 8001d7d0: 6abfd7b7 lui a5,0x6abfd + 8001d7d4: e8e78793 addi a5,a5,-370 # 6abfce8e <_entry_offset+0x6abfce8e> + 8001d7d8: 04f70663 beq a4,a5,8001d824 <_Z14UNLOneBus_InitP8CartInfo+0x7c> + 8001d7dc: 00000797 auipc a5,0x0 + 8001d7e0: cfc78793 addi a5,a5,-772 # 8001d4d8 <_ZL16UNLOneBusIRQHookv> + 8001d7e4: 001af717 auipc a4,0x1af + 8001d7e8: ecf73e23 sd a5,-292(a4) # 801cc6c0 + 8001d7ec: 00000797 auipc a5,0x0 + 8001d7f0: bdc78793 addi a5,a5,-1060 # 8001d3c8 <_ZL16UNLOneBusCpuHooki> + 8001d7f4: 001ae717 auipc a4,0x1ae + 8001d7f8: 34f73623 sd a5,844(a4) # 801cbb40 + 8001d7fc: 00000797 auipc a5,0x0 + 8001d800: 87c78793 addi a5,a5,-1924 # 8001d078 <_ZL12StateRestorei> + 8001d804: 00000693 li a3,0 + 8001d808: 00000613 li a2,0 + 8001d80c: fff00593 li a1,-1 + 8001d810: 0002e517 auipc a0,0x2e + 8001d814: 84050513 addi a0,a0,-1984 # 8004b050 <_ZL9StateRegs> + 8001d818: 001af717 auipc a4,0x1af + 8001d81c: e4f73023 sd a5,-448(a4) # 801cc658 + 8001d820: ff0e206f j 80000010 <_Z10AddExStatePvjiPKc> + 8001d824: 00f00793 li a5,15 + 8001d828: 001ae717 auipc a4,0x1ae + 8001d82c: 7ef70823 sb a5,2032(a4) # 801cc018 <_ZL8inv_hack> + 8001d830: fadff06f j 8001d7dc <_Z14UNLOneBus_InitP8CartInfo+0x34> + +000000008001d834 <_ZL11BMCHPxxReadj>: + 8001d834: 001ae517 auipc a0,0x1ae + 8001d838: 7f054503 lbu a0,2032(a0) # 801cc024 <_ZL9dipswitch> + 8001d83c: 00008067 ret + +000000008001d840 <_ZL12BMCHPxxResetv>: + 8001d840: 001ae697 auipc a3,0x1ae + 8001d844: 7e468693 addi a3,a3,2020 # 801cc024 <_ZL9dipswitch> + 8001d848: 0006a783 lw a5,0(a3) + 8001d84c: ff010113 addi sp,sp,-16 + 8001d850: 00113423 sd ra,8(sp) + 8001d854: 0017879b addiw a5,a5,1 + 8001d858: 00813023 sd s0,0(sp) + 8001d85c: 001af717 auipc a4,0x1af + 8001d860: 9f470713 addi a4,a4,-1548 # 801cc250 + 8001d864: 00f7f793 andi a5,a5,15 + 8001d868: 001af417 auipc s0,0x1af + 8001d86c: 9f440413 addi s0,s0,-1548 # 801cc25c + 8001d870: 00f6a023 sw a5,0(a3) + 8001d874: 000701a3 sb zero,3(a4) + 8001d878: 00070123 sb zero,2(a4) + 8001d87c: 000700a3 sb zero,1(a4) + 8001d880: 00070023 sb zero,0(a4) + 8001d884: 001ae797 auipc a5,0x1ae + 8001d888: 78078f23 sb zero,1950(a5) # 801cc022 <_ZL4lock> + 8001d88c: 0dd080ef jal ra,80026168 <_Z12MMC3RegResetv> + 8001d890: 00044503 lbu a0,0(s0) + 8001d894: 5d8080ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 8001d898: 00044503 lbu a0,0(s0) + 8001d89c: 00013403 ld s0,0(sp) + 8001d8a0: 00813083 ld ra,8(sp) + 8001d8a4: 01010113 addi sp,sp,16 + 8001d8a8: 7800806f j 80026028 <_Z10FixMMC3CHRi> + +000000008001d8ac <_ZL12BMCHPxxPowerv>: + 8001d8ac: ff010113 addi sp,sp,-16 + 8001d8b0: 00113423 sd ra,8(sp) + 8001d8b4: 00813023 sd s0,0(sp) + 8001d8b8: 109080ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 8001d8bc: 001af417 auipc s0,0x1af + 8001d8c0: 9a040413 addi s0,s0,-1632 # 801cc25c + 8001d8c4: 00044503 lbu a0,0(s0) + 8001d8c8: 001af797 auipc a5,0x1af + 8001d8cc: 98878793 addi a5,a5,-1656 # 801cc250 + 8001d8d0: 000781a3 sb zero,3(a5) + 8001d8d4: 00078123 sb zero,2(a5) + 8001d8d8: 000780a3 sb zero,1(a5) + 8001d8dc: 00078023 sb zero,0(a5) + 8001d8e0: 001ae717 auipc a4,0x1ae + 8001d8e4: 74070123 sb zero,1858(a4) # 801cc022 <_ZL4lock> + 8001d8e8: 001ae717 auipc a4,0x1ae + 8001d8ec: 72072e23 sw zero,1852(a4) # 801cc024 <_ZL9dipswitch> + 8001d8f0: 57c080ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 8001d8f4: 00044503 lbu a0,0(s0) + 8001d8f8: 00006437 lui s0,0x6 + 8001d8fc: 72c080ef jal ra,80026028 <_Z10FixMMC3CHRi> + 8001d900: fff40593 addi a1,s0,-1 # 5fff <_entry_offset+0x5fff> + 8001d904: 00000617 auipc a2,0x0 + 8001d908: f3060613 addi a2,a2,-208 # 8001d834 <_ZL11BMCHPxxReadj> + 8001d90c: 00005537 lui a0,0x5 + 8001d910: 10c160ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001d914: fff40593 addi a1,s0,-1 + 8001d918: 00000617 auipc a2,0x0 + 8001d91c: 03460613 addi a2,a2,52 # 8001d94c <_ZL12BMCHPxxWritejh> + 8001d920: 00005537 lui a0,0x5 + 8001d924: 204160ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001d928: 00013403 ld s0,0(sp) + 8001d92c: 00813083 ld ra,8(sp) + 8001d930: 000105b7 lui a1,0x10 + 8001d934: 00000617 auipc a2,0x0 + 8001d938: 07c60613 addi a2,a2,124 # 8001d9b0 <_ZL14BMCHPxxHiWritejh> + 8001d93c: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8001d940: 00008537 lui a0,0x8 + 8001d944: 01010113 addi sp,sp,16 + 8001d948: 1e01606f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008001d94c <_ZL12BMCHPxxWritejh>: + 8001d94c: 001ae717 auipc a4,0x1ae + 8001d950: 6d670713 addi a4,a4,1750 # 801cc022 <_ZL4lock> + 8001d954: 00074683 lbu a3,0(a4) + 8001d958: 00068463 beqz a3,8001d960 <_ZL12BMCHPxxWritejh+0x14> + 8001d95c: 00008067 ret + 8001d960: ff010113 addi sp,sp,-16 + 8001d964: 00813023 sd s0,0(sp) + 8001d968: 001af417 auipc s0,0x1af + 8001d96c: 8f440413 addi s0,s0,-1804 # 801cc25c + 8001d970: 00050793 mv a5,a0 + 8001d974: 00044503 lbu a0,0(s0) + 8001d978: 001af697 auipc a3,0x1af + 8001d97c: 8d868693 addi a3,a3,-1832 # 801cc250 + 8001d980: 0037f793 andi a5,a5,3 + 8001d984: 00113423 sd ra,8(sp) + 8001d988: 00f687b3 add a5,a3,a5 + 8001d98c: f805f693 andi a3,a1,-128 + 8001d990: 00b78023 sb a1,0(a5) + 8001d994: 00d70023 sb a3,0(a4) + 8001d998: 4d4080ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 8001d99c: 00044503 lbu a0,0(s0) + 8001d9a0: 00013403 ld s0,0(sp) + 8001d9a4: 00813083 ld ra,8(sp) + 8001d9a8: 01010113 addi sp,sp,16 + 8001d9ac: 67c0806f j 80026028 <_Z10FixMMC3CHRi> + +000000008001d9b0 <_ZL14BMCHPxxHiWritejh>: + 8001d9b0: 001af797 auipc a5,0x1af + 8001d9b4: 8a07c783 lbu a5,-1888(a5) # 801cc250 + 8001d9b8: 0047f793 andi a5,a5,4 + 8001d9bc: 04079263 bnez a5,8001da00 <_ZL14BMCHPxxHiWritejh+0x50> + 8001d9c0: 0000c7b7 lui a5,0xc + 8001d9c4: 02f57c63 bgeu a0,a5,8001d9fc <_ZL14BMCHPxxHiWritejh+0x4c> + 8001d9c8: ff010113 addi sp,sp,-16 + 8001d9cc: 00113423 sd ra,8(sp) + 8001d9d0: 00813023 sd s0,0(sp) + 8001d9d4: 6f1080ef jal ra,800268c4 <_Z13MMC3_CMDWritejh> + 8001d9d8: 001af417 auipc s0,0x1af + 8001d9dc: 88440413 addi s0,s0,-1916 # 801cc25c + 8001d9e0: 00044503 lbu a0,0(s0) + 8001d9e4: 488080ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 8001d9e8: 00044503 lbu a0,0(s0) + 8001d9ec: 00013403 ld s0,0(sp) + 8001d9f0: 00813083 ld ra,8(sp) + 8001d9f4: 01010113 addi sp,sp,16 + 8001d9f8: 6300806f j 80026028 <_Z10FixMMC3CHRi> + 8001d9fc: 0980806f j 80025a94 <_Z13MMC3_IRQWritejh> + 8001da00: 001af517 auipc a0,0x1af + 8001da04: 85c54503 lbu a0,-1956(a0) # 801cc25c + 8001da08: 001ae797 auipc a5,0x1ae + 8001da0c: 60b78da3 sb a1,1563(a5) # 801cc023 <_ZL8unromchr> + 8001da10: 6180806f j 80026028 <_Z10FixMMC3CHRi> + +000000008001da14 <_ZL9BMCHPxxMWh>: + 8001da14: 001af797 auipc a5,0x1af + 8001da18: 83c7c783 lbu a5,-1988(a5) # 801cc250 + 8001da1c: 0047f713 andi a4,a5,4 + 8001da20: 00050793 mv a5,a0 + 8001da24: 00070e63 beqz a4,8001da40 <_ZL9BMCHPxxMWh+0x2c> + 8001da28: 001ae517 auipc a0,0x1ae + 8001da2c: 5fb54503 lbu a0,1531(a0) # 801cc023 <_ZL8unromchr> + 8001da30: 00255513 srli a0,a0,0x2 + 8001da34: 00154513 xori a0,a0,1 + 8001da38: 00157513 andi a0,a0,1 + 8001da3c: e0cf306f j 80011048 <_Z9setmirrori> + 8001da40: fff54513 not a0,a0 + 8001da44: 00157513 andi a0,a0,1 + 8001da48: 001ae717 auipc a4,0x1ae + 8001da4c: 7ef70523 sb a5,2026(a4) # 801cc232 + 8001da50: df8f306f j 80011048 <_Z9setmirrori> + +000000008001da54 <_ZL9BMCHPxxPWjh>: + 8001da54: ff010113 addi sp,sp,-16 + 8001da58: 00813023 sd s0,0(sp) + 8001da5c: 001ae417 auipc s0,0x1ae + 8001da60: 7f440413 addi s0,s0,2036 # 801cc250 + 8001da64: 00044783 lbu a5,0(s0) + 8001da68: 00113423 sd ra,8(sp) + 8001da6c: 00144703 lbu a4,1(s0) + 8001da70: 0047f693 andi a3,a5,4 + 8001da74: 02068663 beqz a3,8001daa0 <_ZL9BMCHPxxPWjh+0x4c> + 8001da78: 00f7f793 andi a5,a5,15 + 8001da7c: 00400693 li a3,4 + 8001da80: 06d78863 beq a5,a3,8001daf0 <_ZL9BMCHPxxPWjh+0x9c> + 8001da84: 00013403 ld s0,0(sp) + 8001da88: 00813083 ld ra,8(sp) + 8001da8c: 4017559b sraiw a1,a4,0x1 + 8001da90: 00f5f593 andi a1,a1,15 + 8001da94: 00008537 lui a0,0x8 + 8001da98: 01010113 addi sp,sp,16 + 8001da9c: b78f306f j 80010e14 <_Z8setprg32jj> + 8001daa0: 0027f793 andi a5,a5,2 + 8001daa4: 04079063 bnez a5,8001dae4 <_ZL9BMCHPxxPWjh+0x90> + 8001daa8: 01077713 andi a4,a4,16 + 8001daac: 01f00793 li a5,31 + 8001dab0: 00b7f5b3 and a1,a5,a1 + 8001dab4: 00171713 slli a4,a4,0x1 + 8001dab8: 00b765b3 or a1,a4,a1 + 8001dabc: fe1f20ef jal ra,80010a9c <_Z7setprg8jj> + 8001dac0: 00013403 ld s0,0(sp) + 8001dac4: 00813083 ld ra,8(sp) + 8001dac8: 001ae617 auipc a2,0x1ae + 8001dacc: 76b64603 lbu a2,1899(a2) # 801cc233 + 8001dad0: 00367613 andi a2,a2,3 + 8001dad4: 000065b7 lui a1,0x6 + 8001dad8: 01000513 li a0,16 + 8001dadc: 01010113 addi sp,sp,16 + 8001dae0: e09f206f j 800108e8 <_Z8setprg8rijj> + 8001dae4: 01877713 andi a4,a4,24 + 8001dae8: 00f00793 li a5,15 + 8001daec: fc5ff06f j 8001dab0 <_ZL9BMCHPxxPWjh+0x5c> + 8001daf0: 01f77593 andi a1,a4,31 + 8001daf4: 00008537 lui a0,0x8 + 8001daf8: 960f30ef jal ra,80010c58 <_Z8setprg16jj> + 8001dafc: 00144583 lbu a1,1(s0) + 8001db00: 00013403 ld s0,0(sp) + 8001db04: 00813083 ld ra,8(sp) + 8001db08: 0000c537 lui a0,0xc + 8001db0c: 01f5f593 andi a1,a1,31 + 8001db10: 01010113 addi sp,sp,16 + 8001db14: 944f306f j 80010c58 <_Z8setprg16jj> + +000000008001db18 <_ZL9BMCHPxxCWjh>: + 8001db18: 001ae717 auipc a4,0x1ae + 8001db1c: 73870713 addi a4,a4,1848 # 801cc250 + 8001db20: 00074783 lbu a5,0(a4) + 8001db24: 00274703 lbu a4,2(a4) + 8001db28: 0047f693 andi a3,a5,4 + 8001db2c: 02068063 beqz a3,8001db4c <_ZL9BMCHPxxCWjh+0x34> + 8001db30: 0037f793 andi a5,a5,3 + 8001db34: 00200693 li a3,2 + 8001db38: 06d78263 beq a5,a3,8001db9c <_ZL9BMCHPxxCWjh+0x84> + 8001db3c: 00300693 li a3,3 + 8001db40: 04d78263 beq a5,a3,8001db84 <_ZL9BMCHPxxCWjh+0x6c> + 8001db44: 03f77513 andi a0,a4,63 + 8001db48: bbcf306f j 80010f04 <_Z7setchr8j> + 8001db4c: 0017f793 andi a5,a5,1 + 8001db50: 00079e63 bnez a5,8001db6c <_ZL9BMCHPxxCWjh+0x54> + 8001db54: 02077713 andi a4,a4,32 + 8001db58: 0ff00793 li a5,255 + 8001db5c: 00b7f5b3 and a1,a5,a1 + 8001db60: 00371713 slli a4,a4,0x3 + 8001db64: 00b765b3 or a1,a4,a1 + 8001db68: b3cf306f j 80010ea4 <_Z7setchr1jj> + 8001db6c: 03077713 andi a4,a4,48 + 8001db70: 07f00793 li a5,127 + 8001db74: 00b7f5b3 and a1,a5,a1 + 8001db78: 00371713 slli a4,a4,0x3 + 8001db7c: 00b765b3 or a1,a4,a1 + 8001db80: b24f306f j 80010ea4 <_Z7setchr1jj> + 8001db84: 001ae517 auipc a0,0x1ae + 8001db88: 49f54503 lbu a0,1183(a0) # 801cc023 <_ZL8unromchr> + 8001db8c: 00357513 andi a0,a0,3 + 8001db90: 03c77713 andi a4,a4,60 + 8001db94: 00e56533 or a0,a0,a4 + 8001db98: b6cf306f j 80010f04 <_Z7setchr8j> + 8001db9c: 001ae517 auipc a0,0x1ae + 8001dba0: 48754503 lbu a0,1159(a0) # 801cc023 <_ZL8unromchr> + 8001dba4: 00157513 andi a0,a0,1 + 8001dba8: 03e77713 andi a4,a4,62 + 8001dbac: 00e56533 or a0,a0,a4 + 8001dbb0: b54f306f j 80010f04 <_Z7setchr8j> + +000000008001dbb4 <_Z12BMCHPxx_InitP8CartInfo>: + 8001dbb4: ff010113 addi sp,sp,-16 + 8001dbb8: 00000713 li a4,0 + 8001dbbc: 00800693 li a3,8 + 8001dbc0: 10000613 li a2,256 + 8001dbc4: 10000593 li a1,256 + 8001dbc8: 00113423 sd ra,8(sp) + 8001dbcc: 00813023 sd s0,0(sp) + 8001dbd0: 00050413 mv s0,a0 + 8001dbd4: 444090ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 8001dbd8: 00000797 auipc a5,0x0 + 8001dbdc: f4078793 addi a5,a5,-192 # 8001db18 <_ZL9BMCHPxxCWjh> + 8001dbe0: 001ae717 auipc a4,0x1ae + 8001dbe4: 6af73023 sd a5,1696(a4) # 801cc280 + 8001dbe8: 00000797 auipc a5,0x0 + 8001dbec: e6c78793 addi a5,a5,-404 # 8001da54 <_ZL9BMCHPxxPWjh> + 8001dbf0: 001ae717 auipc a4,0x1ae + 8001dbf4: 6af73423 sd a5,1704(a4) # 801cc298 + 8001dbf8: 00000797 auipc a5,0x0 + 8001dbfc: e1c78793 addi a5,a5,-484 # 8001da14 <_ZL9BMCHPxxMWh> + 8001dc00: 001ae717 auipc a4,0x1ae + 8001dc04: 68f73823 sd a5,1680(a4) # 801cc290 + 8001dc08: 00000797 auipc a5,0x0 + 8001dc0c: ca478793 addi a5,a5,-860 # 8001d8ac <_ZL12BMCHPxxPowerv> + 8001dc10: 00f43023 sd a5,0(s0) + 8001dc14: 00000797 auipc a5,0x0 + 8001dc18: c2c78793 addi a5,a5,-980 # 8001d840 <_ZL12BMCHPxxResetv> + 8001dc1c: 00f43423 sd a5,8(s0) + 8001dc20: 00028697 auipc a3,0x28 + 8001dc24: 8d068693 addi a3,a3,-1840 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 8001dc28: 00000613 li a2,0 + 8001dc2c: 00800593 li a1,8 + 8001dc30: 001ae517 auipc a0,0x1ae + 8001dc34: 62050513 addi a0,a0,1568 # 801cc250 + 8001dc38: bd8e20ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001dc3c: 00028697 auipc a3,0x28 + 8001dc40: c2468693 addi a3,a3,-988 # 80045860 <_ZL6bs_tbl+0xf0> + 8001dc44: 00000613 li a2,0 + 8001dc48: 00100593 li a1,1 + 8001dc4c: 001ae517 auipc a0,0x1ae + 8001dc50: 3d750513 addi a0,a0,983 # 801cc023 <_ZL8unromchr> + 8001dc54: bbce20ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001dc58: 00028697 auipc a3,0x28 + 8001dc5c: c1068693 addi a3,a3,-1008 # 80045868 <_ZL6bs_tbl+0xf8> + 8001dc60: 00000613 li a2,0 + 8001dc64: 00100593 li a1,1 + 8001dc68: 001ae517 auipc a0,0x1ae + 8001dc6c: 3bc50513 addi a0,a0,956 # 801cc024 <_ZL9dipswitch> + 8001dc70: ba0e20ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001dc74: 00013403 ld s0,0(sp) + 8001dc78: 00813083 ld ra,8(sp) + 8001dc7c: 00028697 auipc a3,0x28 + 8001dc80: bf468693 addi a3,a3,-1036 # 80045870 <_ZL6bs_tbl+0x100> + 8001dc84: 00000613 li a2,0 + 8001dc88: 00100593 li a1,1 + 8001dc8c: 001ae517 auipc a0,0x1ae + 8001dc90: 39650513 addi a0,a0,918 # 801cc022 <_ZL4lock> + 8001dc94: 01010113 addi sp,sp,16 + 8001dc98: b78e206f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008001dc9c <_ZL12MMC5_ExRAMWrjh>: + 8001dc9c: 001af717 auipc a4,0x1af + 8001dca0: a3c74703 lbu a4,-1476(a4) # 801cc6d8 + 8001dca4: 00300793 li a5,3 + 8001dca8: 00f70c63 beq a4,a5,8001dcc0 <_ZL12MMC5_ExRAMWrjh+0x24> + 8001dcac: 3ff57513 andi a0,a0,1023 + 8001dcb0: 001ae797 auipc a5,0x1ae + 8001dcb4: 3a87b783 ld a5,936(a5) # 801cc058 <_ZL5ExRAM> + 8001dcb8: 00a78533 add a0,a5,a0 + 8001dcbc: 00b50023 sb a1,0(a0) + 8001dcc0: 00008067 ret + +000000008001dcc4 <_ZL12MMC5_ExRAMRdj>: + 8001dcc4: 3ff57793 andi a5,a0,1023 + 8001dcc8: 001ae517 auipc a0,0x1ae + 8001dccc: 39053503 ld a0,912(a0) # 801cc058 <_ZL5ExRAM> + 8001dcd0: 00f50533 add a0,a0,a5 + 8001dcd4: 00054503 lbu a0,0(a0) + 8001dcd8: 00008067 ret + +000000008001dcdc <_ZL6Do5PCMv>: + 8001dcdc: 001ae797 auipc a5,0x1ae + 8001dce0: ef47a783 lw a5,-268(a5) # 801cbbd0 + 8001dce4: 001ae517 auipc a0,0x1ae + 8001dce8: e6452503 lw a0,-412(a0) # 801cbb48 + 8001dcec: 00f5053b addw a0,a0,a5 + 8001dcf0: fe010113 addi sp,sp,-32 + 8001dcf4: 0105151b slliw a0,a0,0x10 + 8001dcf8: 00913423 sd s1,8(sp) + 8001dcfc: 02051513 slli a0,a0,0x20 + 8001dd00: 000aa497 auipc s1,0xaa + 8001dd04: 8f048493 addi s1,s1,-1808 # 800c75f0 <_ZL9MMC5Sound> + 8001dd08: 00813823 sd s0,16(sp) + 8001dd0c: 001ae597 auipc a1,0x1ae + 8001dd10: ec05e583 lwu a1,-320(a1) # 801cbbcc + 8001dd14: 02055513 srli a0,a0,0x20 + 8001dd18: 01c4a403 lw s0,28(s1) + 8001dd1c: 00113c23 sd ra,24(sp) + 8001dd20: 1081c0ef jal ra,80039e28 <__udivdi3> + 8001dd24: 0005051b sext.w a0,a0 + 8001dd28: 04a45463 bge s0,a0,8001dd70 <_ZL6Do5PCMv+0x94> + 8001dd2c: 0094c783 lbu a5,9(s1) + 8001dd30: 00a4ae23 sw a0,28(s1) + 8001dd34: 0407f793 andi a5,a5,64 + 8001dd38: 02079c63 bnez a5,8001dd70 <_ZL6Do5PCMv+0x94> + 8001dd3c: 0084c683 lbu a3,8(s1) + 8001dd40: 02068863 beqz a3,8001dd70 <_ZL6Do5PCMv+0x94> + 8001dd44: 00169693 slli a3,a3,0x1 + 8001dd48: 0003a617 auipc a2,0x3a + 8001dd4c: c8060613 addi a2,a2,-896 # 800579c8 + 8001dd50: 40445793 srai a5,s0,0x4 + 8001dd54: 00279793 slli a5,a5,0x2 + 8001dd58: 00f607b3 add a5,a2,a5 + 8001dd5c: 0007a703 lw a4,0(a5) + 8001dd60: 0014041b addiw s0,s0,1 + 8001dd64: 00d7073b addw a4,a4,a3 + 8001dd68: 00e7a023 sw a4,0(a5) + 8001dd6c: fe8512e3 bne a0,s0,8001dd50 <_ZL6Do5PCMv+0x74> + 8001dd70: 01813083 ld ra,24(sp) + 8001dd74: 01013403 ld s0,16(sp) + 8001dd78: 00813483 ld s1,8(sp) + 8001dd7c: 02010113 addi sp,sp,32 + 8001dd80: 00008067 ret + +000000008001dd84 <_ZL8Do5PCMHQv>: + 8001dd84: 000aa597 auipc a1,0xaa + 8001dd88: 86c58593 addi a1,a1,-1940 # 800c75f0 <_ZL9MMC5Sound> + 8001dd8c: 0095c783 lbu a5,9(a1) + 8001dd90: 001ae697 auipc a3,0x1ae + 8001dd94: db86a683 lw a3,-584(a3) # 801cbb48 + 8001dd98: 001ae717 auipc a4,0x1ae + 8001dd9c: e3872703 lw a4,-456(a4) # 801cbbd0 + 8001dda0: 00e6873b addw a4,a3,a4 + 8001dda4: 0407f793 andi a5,a5,64 + 8001dda8: 00070693 mv a3,a4 + 8001ddac: 06079463 bnez a5,8001de14 <_ZL8Do5PCMHQv+0x90> + 8001ddb0: 0085c503 lbu a0,8(a1) + 8001ddb4: 06050063 beqz a0,8001de14 <_ZL8Do5PCMHQv+0x90> + 8001ddb8: 01c5a783 lw a5,28(a1) + 8001ddbc: 04e7fc63 bgeu a5,a4,8001de14 <_ZL8Do5PCMHQv+0x90> + 8001ddc0: fff7061b addiw a2,a4,-1 + 8001ddc4: 40f6063b subw a2,a2,a5 + 8001ddc8: 02061613 slli a2,a2,0x20 + 8001ddcc: 02079793 slli a5,a5,0x20 + 8001ddd0: 0207d793 srli a5,a5,0x20 + 8001ddd4: 02065613 srli a2,a2,0x20 + 8001ddd8: 00f60633 add a2,a2,a5 + 8001dddc: 0003f717 auipc a4,0x3f + 8001dde0: bec70713 addi a4,a4,-1044 # 8005c9c8 + 8001dde4: 00279793 slli a5,a5,0x2 + 8001dde8: 00261613 slli a2,a2,0x2 + 8001ddec: 00e787b3 add a5,a5,a4 + 8001ddf0: 0003f717 auipc a4,0x3f + 8001ddf4: bdc70713 addi a4,a4,-1060 # 8005c9cc + 8001ddf8: 00551513 slli a0,a0,0x5 + 8001ddfc: 00e60633 add a2,a2,a4 + 8001de00: 0007a703 lw a4,0(a5) + 8001de04: 00478793 addi a5,a5,4 + 8001de08: 00a7073b addw a4,a4,a0 + 8001de0c: fee7ae23 sw a4,-4(a5) + 8001de10: fec798e3 bne a5,a2,8001de00 <_ZL8Do5PCMHQv+0x7c> + 8001de14: 00d5ae23 sw a3,28(a1) + 8001de18: 00008067 ret + +000000008001de1c <_ZL10Mapper5_SWjh>: + 8001de1c: 0003a797 auipc a5,0x3a + 8001de20: b6c78793 addi a5,a5,-1172 # 80057988 + 8001de24: 00000717 auipc a4,0x0 + 8001de28: 4bc70713 addi a4,a4,1212 # 8001e2e0 <_Z12MMC5RunSoundi> + 8001de2c: 00e7b023 sd a4,0(a5) + 8001de30: 00000717 auipc a4,0x0 + 8001de34: 47470713 addi a4,a4,1140 # 8001e2a4 <_Z14MMC5RunSoundHQv> + 8001de38: 00e7b823 sd a4,16(a5) + 8001de3c: 01f57513 andi a0,a0,31 + 8001de40: 01500793 li a5,21 + 8001de44: 08a7e263 bltu a5,a0,8001dec8 <_ZL10Mapper5_SWjh+0xac> + 8001de48: 00028697 auipc a3,0x28 + 8001de4c: a3068693 addi a3,a3,-1488 # 80045878 <_ZL6bs_tbl+0x108> + 8001de50: 00251713 slli a4,a0,0x2 + 8001de54: 00d70733 add a4,a4,a3 + 8001de58: 00072783 lw a5,0(a4) + 8001de5c: fe010113 addi sp,sp,-32 + 8001de60: 00913423 sd s1,8(sp) + 8001de64: 00d787b3 add a5,a5,a3 + 8001de68: 00113c23 sd ra,24(sp) + 8001de6c: 00813823 sd s0,16(sp) + 8001de70: 00058493 mv s1,a1 + 8001de74: 00078067 jr a5 + 8001de78: 001ae417 auipc s0,0x1ae + 8001de7c: 1d840413 addi s0,s0,472 # 801cc050 <_ZL4sfun> + 8001de80: 00043783 ld a5,0(s0) + 8001de84: 00078c63 beqz a5,8001de9c <_ZL10Mapper5_SWjh+0x80> + 8001de88: 00000513 li a0,0 + 8001de8c: 000780e7 jalr a5 + 8001de90: 00043783 ld a5,0(s0) + 8001de94: 00100513 li a0,1 + 8001de98: 000780e7 jalr a5 + 8001de9c: 000a9797 auipc a5,0xa9 + 8001dea0: 75478793 addi a5,a5,1876 # 800c75f0 <_ZL9MMC5Sound> + 8001dea4: 0077c583 lbu a1,7(a5) + 8001dea8: 00978323 sb s1,6(a5) + 8001deac: 00b4f5b3 and a1,s1,a1 + 8001deb0: 00b783a3 sb a1,7(a5) + 8001deb4: 01813083 ld ra,24(sp) + 8001deb8: 01013403 ld s0,16(sp) + 8001debc: 00813483 ld s1,8(sp) + 8001dec0: 02010113 addi sp,sp,32 + 8001dec4: 00008067 ret + 8001dec8: 00008067 ret + 8001decc: 000a9697 auipc a3,0xa9 + 8001ded0: 72468693 addi a3,a3,1828 # 800c75f0 <_ZL9MMC5Sound> + 8001ded4: 00255793 srli a5,a0,0x2 + 8001ded8: 0076c603 lbu a2,7(a3) + 8001dedc: 00179793 slli a5,a5,0x1 + 8001dee0: 00f687b3 add a5,a3,a5 + 8001dee4: 00255513 srli a0,a0,0x2 + 8001dee8: 00100813 li a6,1 + 8001deec: 0007d703 lhu a4,0(a5) + 8001def0: 00a8153b sllw a0,a6,a0 + 8001def4: 00a66533 or a0,a2,a0 + 8001def8: 00a683a3 sb a0,7(a3) + 8001defc: 00859593 slli a1,a1,0x8 + 8001df00: 01813083 ld ra,24(sp) + 8001df04: 01013403 ld s0,16(sp) + 8001df08: 8ff77713 andi a4,a4,-1793 + 8001df0c: 7005f593 andi a1,a1,1792 + 8001df10: 00b765b3 or a1,a4,a1 + 8001df14: 00b79023 sh a1,0(a5) + 8001df18: 00813483 ld s1,8(sp) + 8001df1c: 02010113 addi sp,sp,32 + 8001df20: 00008067 ret + 8001df24: 001ae797 auipc a5,0x1ae + 8001df28: 12c7b783 ld a5,300(a5) # 801cc050 <_ZL4sfun> + 8001df2c: 0025541b srliw s0,a0,0x2 + 8001df30: 00078663 beqz a5,8001df3c <_ZL10Mapper5_SWjh+0x120> + 8001df34: 0004051b sext.w a0,s0 + 8001df38: 000780e7 jalr a5 + 8001df3c: 02041513 slli a0,s0,0x20 + 8001df40: 02055513 srli a0,a0,0x20 + 8001df44: 000a9417 auipc s0,0xa9 + 8001df48: 6ac40413 addi s0,s0,1708 # 800c75f0 <_ZL9MMC5Sound> + 8001df4c: 00a40533 add a0,s0,a0 + 8001df50: 00950223 sb s1,4(a0) + 8001df54: 01813083 ld ra,24(sp) + 8001df58: 01013403 ld s0,16(sp) + 8001df5c: 00813483 ld s1,8(sp) + 8001df60: 02010113 addi sp,sp,32 + 8001df64: 00008067 ret + 8001df68: 001ae797 auipc a5,0x1ae + 8001df6c: 0e87b783 ld a5,232(a5) # 801cc050 <_ZL4sfun> + 8001df70: 0025541b srliw s0,a0,0x2 + 8001df74: 00078663 beqz a5,8001df80 <_ZL10Mapper5_SWjh+0x164> + 8001df78: 0004051b sext.w a0,s0 + 8001df7c: 000780e7 jalr a5 + 8001df80: 02041513 slli a0,s0,0x20 + 8001df84: 01f55513 srli a0,a0,0x1f + 8001df88: 000a9417 auipc s0,0xa9 + 8001df8c: 66840413 addi s0,s0,1640 # 800c75f0 <_ZL9MMC5Sound> + 8001df90: 01813083 ld ra,24(sp) + 8001df94: 00a40533 add a0,s0,a0 + 8001df98: 01013403 ld s0,16(sp) + 8001df9c: 00950023 sb s1,0(a0) + 8001dfa0: 00813483 ld s1,8(sp) + 8001dfa4: 02010113 addi sp,sp,32 + 8001dfa8: 00008067 ret + 8001dfac: 001ae797 auipc a5,0x1ae + 8001dfb0: 0b47b783 ld a5,180(a5) # 801cc060 <_ZL5psfun> + 8001dfb4: 00078463 beqz a5,8001dfbc <_ZL10Mapper5_SWjh+0x1a0> + 8001dfb8: 000780e7 jalr a5 + 8001dfbc: 01813083 ld ra,24(sp) + 8001dfc0: 01013403 ld s0,16(sp) + 8001dfc4: 000a9797 auipc a5,0xa9 + 8001dfc8: 62978aa3 sb s1,1589(a5) # 800c75f9 <_ZL9MMC5Sound+0x9> + 8001dfcc: 00813483 ld s1,8(sp) + 8001dfd0: 02010113 addi sp,sp,32 + 8001dfd4: 00008067 ret + 8001dfd8: 001ae797 auipc a5,0x1ae + 8001dfdc: 0887b783 ld a5,136(a5) # 801cc060 <_ZL5psfun> + 8001dfe0: 00078463 beqz a5,8001dfe8 <_ZL10Mapper5_SWjh+0x1cc> + 8001dfe4: 000780e7 jalr a5 + 8001dfe8: 01813083 ld ra,24(sp) + 8001dfec: 01013403 ld s0,16(sp) + 8001dff0: 000a9797 auipc a5,0xa9 + 8001dff4: 60978423 sb s1,1544(a5) # 800c75f8 <_ZL9MMC5Sound+0x8> + 8001dff8: 00813483 ld s1,8(sp) + 8001dffc: 02010113 addi sp,sp,32 + 8001e000: 00008067 ret + +000000008001e004 <_ZL5Do5SQi>: + 8001e004: fd010113 addi sp,sp,-48 + 8001e008: 00913c23 sd s1,24(sp) + 8001e00c: 01213823 sd s2,16(sp) + 8001e010: 00450493 addi s1,a0,4 + 8001e014: 00050913 mv s2,a0 + 8001e018: 001ae797 auipc a5,0x1ae + 8001e01c: b307a783 lw a5,-1232(a5) # 801cbb48 + 8001e020: 001ae517 auipc a0,0x1ae + 8001e024: bb052503 lw a0,-1104(a0) # 801cbbd0 + 8001e028: 00a787bb addw a5,a5,a0 + 8001e02c: 01313423 sd s3,8(sp) + 8001e030: 0107979b slliw a5,a5,0x10 + 8001e034: 00249493 slli s1,s1,0x2 + 8001e038: 000a9997 auipc s3,0xa9 + 8001e03c: 5b898993 addi s3,s3,1464 # 800c75f0 <_ZL9MMC5Sound> + 8001e040: 02079513 slli a0,a5,0x20 + 8001e044: 009984b3 add s1,s3,s1 + 8001e048: 02813023 sd s0,32(sp) + 8001e04c: 001ae597 auipc a1,0x1ae + 8001e050: b805e583 lwu a1,-1152(a1) # 801cbbcc + 8001e054: 02055513 srli a0,a0,0x20 + 8001e058: 0044a403 lw s0,4(s1) + 8001e05c: 02113423 sd ra,40(sp) + 8001e060: 5c91b0ef jal ra,80039e28 <__udivdi3> + 8001e064: 0005051b sext.w a0,a0 + 8001e068: 0ca45e63 bge s0,a0,8001e144 <_ZL5Do5SQi+0x140> + 8001e06c: 00191793 slli a5,s2,0x1 + 8001e070: 00f987b3 add a5,s3,a5 + 8001e074: 0007d683 lhu a3,0(a5) + 8001e078: 00a4a223 sw a0,4(s1) + 8001e07c: 00700793 li a5,7 + 8001e080: 0016871b addiw a4,a3,1 + 8001e084: 00070693 mv a3,a4 + 8001e088: 0ae7de63 bge a5,a4,8001e144 <_ZL5Do5SQi+0x140> + 8001e08c: 0079c783 lbu a5,7(s3) + 8001e090: 0019071b addiw a4,s2,1 + 8001e094: 00e7f7b3 and a5,a5,a4 + 8001e098: 0a078663 beqz a5,8001e144 <_ZL5Do5SQi+0x140> + 8001e09c: 012987b3 add a5,s3,s2 + 8001e0a0: 0047c603 lbu a2,4(a5) + 8001e0a4: 00890e93 addi t4,s2,8 + 8001e0a8: 002e9713 slli a4,t4,0x2 + 8001e0ac: 00665793 srli a5,a2,0x6 + 8001e0b0: 00279593 slli a1,a5,0x2 + 8001e0b4: 00291913 slli s2,s2,0x2 + 8001e0b8: 00028797 auipc a5,0x28 + 8001e0bc: a8878793 addi a5,a5,-1400 # 80045b40 <_ZZL5Do5SQiE3tal> + 8001e0c0: 00b787b3 add a5,a5,a1 + 8001e0c4: 00e98733 add a4,s3,a4 + 8001e0c8: 012985b3 add a1,s3,s2 + 8001e0cc: 0007a303 lw t1,0(a5) + 8001e0d0: 00072703 lw a4,0(a4) + 8001e0d4: 00c5a783 lw a5,12(a1) + 8001e0d8: 0046161b slliw a2,a2,0x4 + 8001e0dc: 0f067813 andi a6,a2,240 + 8001e0e0: 0126969b slliw a3,a3,0x12 + 8001e0e4: 001ae897 auipc a7,0x1ae + 8001e0e8: ae08a883 lw a7,-1312(a7) # 801cbbc4 + 8001e0ec: 0003ae17 auipc t3,0x3a + 8001e0f0: 8dce0e13 addi t3,t3,-1828 # 800579c8 + 8001e0f4: 0067de63 bge a5,t1,8001e110 <_ZL5Do5SQi+0x10c> + 8001e0f8: 40445613 srai a2,s0,0x4 + 8001e0fc: 00261613 slli a2,a2,0x2 + 8001e100: 00ce0633 add a2,t3,a2 + 8001e104: 00062583 lw a1,0(a2) + 8001e108: 010585bb addw a1,a1,a6 + 8001e10c: 00b62023 sw a1,0(a2) + 8001e110: 4117073b subw a4,a4,a7 + 8001e114: 00e04a63 bgtz a4,8001e128 <_ZL5Do5SQi+0x124> + 8001e118: 0017879b addiw a5,a5,1 + 8001e11c: 00d7073b addw a4,a4,a3 + 8001e120: 0077f793 andi a5,a5,7 + 8001e124: fee05ae3 blez a4,8001e118 <_ZL5Do5SQi+0x114> + 8001e128: 0014041b addiw s0,s0,1 + 8001e12c: fc8514e3 bne a0,s0,8001e0f4 <_ZL5Do5SQi+0xf0> + 8001e130: 002e9693 slli a3,t4,0x2 + 8001e134: 01298933 add s2,s3,s2 + 8001e138: 00d986b3 add a3,s3,a3 + 8001e13c: 00f92623 sw a5,12(s2) + 8001e140: 00e6a023 sw a4,0(a3) + 8001e144: 02813083 ld ra,40(sp) + 8001e148: 02013403 ld s0,32(sp) + 8001e14c: 01813483 ld s1,24(sp) + 8001e150: 01013903 ld s2,16(sp) + 8001e154: 00813983 ld s3,8(sp) + 8001e158: 03010113 addi sp,sp,48 + 8001e15c: 00008067 ret + +000000008001e160 <_ZL7Do5SQHQi>: + 8001e160: 000a9697 auipc a3,0xa9 + 8001e164: 49068693 addi a3,a3,1168 # 800c75f0 <_ZL9MMC5Sound> + 8001e168: 00151793 slli a5,a0,0x1 + 8001e16c: 00f687b3 add a5,a3,a5 + 8001e170: 0007d583 lhu a1,0(a5) + 8001e174: 001ae897 auipc a7,0x1ae + 8001e178: a5c8a883 lw a7,-1444(a7) # 801cbbd0 + 8001e17c: 001ae797 auipc a5,0x1ae + 8001e180: 9cc7a783 lw a5,-1588(a5) # 801cbb48 + 8001e184: 00f88e3b addw t3,a7,a5 + 8001e188: 0015871b addiw a4,a1,1 + 8001e18c: 00700793 li a5,7 + 8001e190: 00070593 mv a1,a4 + 8001e194: 000e0893 mv a7,t3 + 8001e198: 00450313 addi t1,a0,4 + 8001e19c: 0ee7d463 bge a5,a4,8001e284 <_ZL7Do5SQHQi+0x124> + 8001e1a0: 0076c783 lbu a5,7(a3) + 8001e1a4: 0015071b addiw a4,a0,1 + 8001e1a8: 00e7f7b3 and a5,a5,a4 + 8001e1ac: 0c078c63 beqz a5,8001e284 <_ZL7Do5SQHQi+0x124> + 8001e1b0: 00231793 slli a5,t1,0x2 + 8001e1b4: 00f687b3 add a5,a3,a5 + 8001e1b8: 00850f13 addi t5,a0,8 + 8001e1bc: 0047a783 lw a5,4(a5) + 8001e1c0: 00251f93 slli t6,a0,0x2 + 8001e1c4: 002f1713 slli a4,t5,0x2 + 8001e1c8: 01f68633 add a2,a3,t6 + 8001e1cc: 00e68733 add a4,a3,a4 + 8001e1d0: 00c62603 lw a2,12(a2) + 8001e1d4: 00072703 lw a4,0(a4) + 8001e1d8: 0015981b slliw a6,a1,0x1 + 8001e1dc: 09c7fa63 bgeu a5,t3,8001e270 <_ZL7Do5SQHQi+0x110> + 8001e1e0: 00a68533 add a0,a3,a0 + 8001e1e4: 00454e83 lbu t4,4(a0) + 8001e1e8: fffe059b addiw a1,t3,-1 + 8001e1ec: 40f585bb subw a1,a1,a5 + 8001e1f0: 006ed513 srli a0,t4,0x6 + 8001e1f4: 00251e13 slli t3,a0,0x2 + 8001e1f8: 00028517 auipc a0,0x28 + 8001e1fc: 94850513 addi a0,a0,-1720 # 80045b40 <_ZZL5Do5SQiE3tal> + 8001e200: 01c50533 add a0,a0,t3 + 8001e204: 00052283 lw t0,0(a0) + 8001e208: 02079793 slli a5,a5,0x20 + 8001e20c: 02059593 slli a1,a1,0x20 + 8001e210: 00001537 lui a0,0x1 + 8001e214: 0207d793 srli a5,a5,0x20 + 8001e218: f0050513 addi a0,a0,-256 # f00 <_entry_offset+0xf00> + 8001e21c: 0205d593 srli a1,a1,0x20 + 8001e220: 008e9e93 slli t4,t4,0x8 + 8001e224: 00f585b3 add a1,a1,a5 + 8001e228: 00aefeb3 and t4,t4,a0 + 8001e22c: 00279793 slli a5,a5,0x2 + 8001e230: 0003e517 auipc a0,0x3e + 8001e234: 79850513 addi a0,a0,1944 # 8005c9c8 + 8001e238: 00259593 slli a1,a1,0x2 + 8001e23c: 00a787b3 add a5,a5,a0 + 8001e240: 0003e517 auipc a0,0x3e + 8001e244: 78c50513 addi a0,a0,1932 # 8005c9cc + 8001e248: 00a585b3 add a1,a1,a0 + 8001e24c: fff7071b addiw a4,a4,-1 + 8001e250: 00160e1b addiw t3,a2,1 + 8001e254: 00565863 bge a2,t0,8001e264 <_ZL7Do5SQHQi+0x104> + 8001e258: 0007a503 lw a0,0(a5) + 8001e25c: 01d5053b addw a0,a0,t4 + 8001e260: 00a7a023 sw a0,0(a5) + 8001e264: 00478793 addi a5,a5,4 + 8001e268: 02e05663 blez a4,8001e294 <_ZL7Do5SQHQi+0x134> + 8001e26c: feb790e3 bne a5,a1,8001e24c <_ZL7Do5SQHQi+0xec> + 8001e270: 002f1f13 slli t5,t5,0x2 + 8001e274: 01f68fb3 add t6,a3,t6 + 8001e278: 01e68f33 add t5,a3,t5 + 8001e27c: 00cfa623 sw a2,12(t6) # 6fa8800c <_entry_offset+0x6fa8800c> + 8001e280: 00ef2023 sw a4,0(t5) # 8000 <_entry_offset+0x8000> + 8001e284: 00231793 slli a5,t1,0x2 + 8001e288: 00f686b3 add a3,a3,a5 + 8001e28c: 0116a223 sw a7,4(a3) + 8001e290: 00008067 ret + 8001e294: 007e7613 andi a2,t3,7 + 8001e298: 00080713 mv a4,a6 + 8001e29c: fab798e3 bne a5,a1,8001e24c <_ZL7Do5SQHQi+0xec> + 8001e2a0: fd1ff06f j 8001e270 <_ZL7Do5SQHQi+0x110> + +000000008001e2a4 <_Z14MMC5RunSoundHQv>: + 8001e2a4: ff010113 addi sp,sp,-16 + 8001e2a8: 00000513 li a0,0 + 8001e2ac: 00113423 sd ra,8(sp) + 8001e2b0: eb1ff0ef jal ra,8001e160 <_ZL7Do5SQHQi> + 8001e2b4: 00100513 li a0,1 + 8001e2b8: ea9ff0ef jal ra,8001e160 <_ZL7Do5SQHQi> + 8001e2bc: 00813083 ld ra,8(sp) + 8001e2c0: 01010113 addi sp,sp,16 + 8001e2c4: ac1ff06f j 8001dd84 <_ZL8Do5PCMHQv> + +000000008001e2c8 <_Z10MMC5HiSynci>: + 8001e2c8: 000a9797 auipc a5,0xa9 + 8001e2cc: 32878793 addi a5,a5,808 # 800c75f0 <_ZL9MMC5Sound> + 8001e2d0: 00a7aa23 sw a0,20(a5) + 8001e2d4: 00a7ac23 sw a0,24(a5) + 8001e2d8: 00a7ae23 sw a0,28(a5) + 8001e2dc: 00008067 ret + +000000008001e2e0 <_Z12MMC5RunSoundi>: + 8001e2e0: ff010113 addi sp,sp,-16 + 8001e2e4: 00813023 sd s0,0(sp) + 8001e2e8: 00050413 mv s0,a0 + 8001e2ec: 00000513 li a0,0 + 8001e2f0: 00113423 sd ra,8(sp) + 8001e2f4: d11ff0ef jal ra,8001e004 <_ZL5Do5SQi> + 8001e2f8: 00100513 li a0,1 + 8001e2fc: d09ff0ef jal ra,8001e004 <_ZL5Do5SQi> + 8001e300: 9ddff0ef jal ra,8001dcdc <_ZL6Do5PCMv> + 8001e304: 000a9797 auipc a5,0xa9 + 8001e308: 2ec78793 addi a5,a5,748 # 800c75f0 <_ZL9MMC5Sound> + 8001e30c: 00813083 ld ra,8(sp) + 8001e310: 0087aa23 sw s0,20(a5) + 8001e314: 0087ac23 sw s0,24(a5) + 8001e318: 0087ae23 sw s0,28(a5) + 8001e31c: 00013403 ld s0,0(sp) + 8001e320: 01010113 addi sp,sp,16 + 8001e324: 00008067 ret + +000000008001e328 <_Z12mmc5_PPUReadj>: + 8001e328: ff010113 addi sp,sp,-16 + 8001e32c: 00813023 sd s0,0(sp) + 8001e330: 00113423 sd ra,8(sp) + 8001e334: 001ae797 auipc a5,0x1ae + 8001e338: 4607a783 lw a5,1120(a5) # 801cc794 + 8001e33c: 00050413 mv s0,a0 + 8001e340: 00078c63 beqz a5,8001e358 <_Z12mmc5_PPUReadj+0x30> + 8001e344: 001ae797 auipc a5,0x1ae + 8001e348: 3a47c783 lbu a5,932(a5) # 801cc6e8 + 8001e34c: 0187971b slliw a4,a5,0x18 + 8001e350: 4187571b sraiw a4,a4,0x18 + 8001e354: 0c074863 bltz a4,8001e424 <_Z12mmc5_PPUReadj+0xfc> + 8001e358: 000027b7 lui a5,0x2 + 8001e35c: 06f47a63 bgeu s0,a5,8001e3d0 <_Z12mmc5_PPUReadj+0xa8> + 8001e360: 00000613 li a2,0 + 8001e364: 001ae717 auipc a4,0x1ae + 8001e368: 39c70713 addi a4,a4,924 # 801cc700 + 8001e36c: 00074783 lbu a5,0(a4) + 8001e370: 001ae697 auipc a3,0x1ae + 8001e374: 4286a683 lw a3,1064(a3) # 801cc798 + 8001e378: 0207f793 andi a5,a5,32 + 8001e37c: 16078863 beqz a5,8001e4ec <_Z12mmc5_PPUReadj+0x1c4> + 8001e380: 00174783 lbu a5,1(a4) + 8001e384: 00200713 li a4,2 + 8001e388: 0187f793 andi a5,a5,24 + 8001e38c: 1ae68e63 beq a3,a4,8001e548 <_Z12mmc5_PPUReadj+0x220> + 8001e390: 00100713 li a4,1 + 8001e394: 22e68e63 beq a3,a4,8001e5d0 <_Z12mmc5_PPUReadj+0x2a8> + 8001e398: 02041713 slli a4,s0,0x20 + 8001e39c: 02075713 srli a4,a4,0x20 + 8001e3a0: 00a4541b srliw s0,s0,0xa + 8001e3a4: 001ae797 auipc a5,0x1ae + 8001e3a8: cfb7c783 lbu a5,-773(a5) # 801cc09f + 8001e3ac: 00341413 slli s0,s0,0x3 + 8001e3b0: 1e079063 bnez a5,8001e590 <_Z12mmc5_PPUReadj+0x268> + 8001e3b4: 000a4797 auipc a5,0xa4 + 8001e3b8: 42c78793 addi a5,a5,1068 # 800c27e0 + 8001e3bc: 00878433 add s0,a5,s0 + 8001e3c0: 00043783 ld a5,0(s0) + 8001e3c4: 00e78733 add a4,a5,a4 + 8001e3c8: 00074503 lbu a0,0(a4) + 8001e3cc: 1100006f j 8001e4dc <_Z12mmc5_PPUReadj+0x1b4> + 8001e3d0: 001ae717 auipc a4,0x1ae + 8001e3d4: 30874703 lbu a4,776(a4) # 801cc6d8 + 8001e3d8: 00100793 li a5,1 + 8001e3dc: 3ff47693 andi a3,s0,1023 + 8001e3e0: 0cf71c63 bne a4,a5,8001e4b8 <_Z12mmc5_PPUReadj+0x190> + 8001e3e4: 3bf00793 li a5,959 + 8001e3e8: 0cd7f863 bgeu a5,a3,8001e4b8 <_Z12mmc5_PPUReadj+0x190> + 8001e3ec: 001ae797 auipc a5,0x1ae + 8001e3f0: 30c7a783 lw a5,780(a5) # 801cc6f8 + 8001e3f4: 3ff7f713 andi a4,a5,1023 + 8001e3f8: 001ae797 auipc a5,0x1ae + 8001e3fc: c607b783 ld a5,-928(a5) # 801cc058 <_ZL5ExRAM> + 8001e400: 00e787b3 add a5,a5,a4 + 8001e404: 0007c503 lbu a0,0(a5) + 8001e408: 00655793 srli a5,a0,0x6 + 8001e40c: 0027951b slliw a0,a5,0x2 + 8001e410: 00f5053b addw a0,a0,a5 + 8001e414: 0045179b slliw a5,a0,0x4 + 8001e418: 00f5053b addw a0,a0,a5 + 8001e41c: 0ff57513 andi a0,a0,255 + 8001e420: 0bc0006f j 8001e4dc <_Z12mmc5_PPUReadj+0x1b4> + 8001e424: 001ae717 auipc a4,0x1ae + 8001e428: 2b474703 lbu a4,692(a4) # 801cc6d8 + 8001e42c: 00277693 andi a3,a4,2 + 8001e430: 06069e63 bnez a3,8001e4ac <_Z12mmc5_PPUReadj+0x184> + 8001e434: 001ae697 auipc a3,0x1ae + 8001e438: 2c46a683 lw a3,708(a3) # 801cc6f8 + 8001e43c: 0407f613 andi a2,a5,64 + 8001e440: 01f6f693 andi a3,a3,31 + 8001e444: 01f7f793 andi a5,a5,31 + 8001e448: 12061c63 bnez a2,8001e580 <_Z12mmc5_PPUReadj+0x258> + 8001e44c: 12f6dc63 bge a3,a5,8001e584 <_Z12mmc5_PPUReadj+0x25c> + 8001e450: 000027b7 lui a5,0x2 + 8001e454: 1af46263 bltu s0,a5,8001e5f8 <_Z12mmc5_PPUReadj+0x2d0> + 8001e458: 0701a0ef jal ra,800384c8 <_Z19newppu_get_scanlinev> + 8001e45c: fff5051b addiw a0,a0,-1 + 8001e460: 41f5579b sraiw a5,a0,0x1f + 8001e464: 01d7d79b srliw a5,a5,0x1d + 8001e468: 00a787bb addw a5,a5,a0 + 8001e46c: 4037d79b sraiw a5,a5,0x3 + 8001e470: 001ae617 auipc a2,0x1ae + 8001e474: 27a64603 lbu a2,634(a2) # 801cc6ea + 8001e478: 3ff47713 andi a4,s0,1023 + 8001e47c: 3bf00693 li a3,959 + 8001e480: 00c787bb addw a5,a5,a2 + 8001e484: 12e6f463 bgeu a3,a4,8001e5ac <_Z12mmc5_PPUReadj+0x284> + 8001e488: 0017979b slliw a5,a5,0x1 + 8001e48c: 0387f793 andi a5,a5,56 + 8001e490: 3c747413 andi s0,s0,967 + 8001e494: 00f46433 or s0,s0,a5 + 8001e498: 001ae797 auipc a5,0x1ae + 8001e49c: bc07b783 ld a5,-1088(a5) # 801cc058 <_ZL5ExRAM> + 8001e4a0: 008787b3 add a5,a5,s0 + 8001e4a4: 0007c503 lbu a0,0(a5) + 8001e4a8: 0340006f j 8001e4dc <_Z12mmc5_PPUReadj+0x1b4> + 8001e4ac: 000027b7 lui a5,0x2 + 8001e4b0: eaf568e3 bltu a0,a5,8001e360 <_Z12mmc5_PPUReadj+0x38> + 8001e4b4: 3ff57693 andi a3,a0,1023 + 8001e4b8: 00a4541b srliw s0,s0,0xa + 8001e4bc: 00347413 andi s0,s0,3 + 8001e4c0: 00341413 slli s0,s0,0x3 + 8001e4c4: 001ad717 auipc a4,0x1ad + 8001e4c8: 5fc70713 addi a4,a4,1532 # 801cbac0 + 8001e4cc: 00870433 add s0,a4,s0 + 8001e4d0: 00043783 ld a5,0(s0) + 8001e4d4: 00d787b3 add a5,a5,a3 + 8001e4d8: 0007c503 lbu a0,0(a5) # 2000 <_entry_offset+0x2000> + 8001e4dc: 00813083 ld ra,8(sp) + 8001e4e0: 00013403 ld s0,0(sp) + 8001e4e4: 01010113 addi sp,sp,16 + 8001e4e8: 00008067 ret + 8001e4ec: 00100793 li a5,1 + 8001e4f0: 02f69063 bne a3,a5,8001e510 <_Z12mmc5_PPUReadj+0x1e8> + 8001e4f4: 00174783 lbu a5,1(a4) + 8001e4f8: 0087f793 andi a5,a5,8 + 8001e4fc: 00078a63 beqz a5,8001e510 <_Z12mmc5_PPUReadj+0x1e8> + 8001e500: 10061c63 bnez a2,8001e618 <_Z12mmc5_PPUReadj+0x2f0> + 8001e504: 001ae797 auipc a5,0x1ae + 8001e508: 1d47c783 lbu a5,468(a5) # 801cc6d8 + 8001e50c: 0ed78a63 beq a5,a3,8001e600 <_Z12mmc5_PPUReadj+0x2d8> + 8001e510: 00a4579b srliw a5,s0,0xa + 8001e514: 00379713 slli a4,a5,0x3 + 8001e518: 000a4797 auipc a5,0xa4 + 8001e51c: 2c878793 addi a5,a5,712 # 800c27e0 + 8001e520: 00e787b3 add a5,a5,a4 + 8001e524: 0007b783 ld a5,0(a5) + 8001e528: 02041413 slli s0,s0,0x20 + 8001e52c: 02045413 srli s0,s0,0x20 + 8001e530: 00878433 add s0,a5,s0 + 8001e534: 00044503 lbu a0,0(s0) + 8001e538: 00813083 ld ra,8(sp) + 8001e53c: 00013403 ld s0,0(sp) + 8001e540: 01010113 addi sp,sp,16 + 8001e544: 00008067 ret + 8001e548: 02041713 slli a4,s0,0x20 + 8001e54c: 00a4569b srliw a3,s0,0xa + 8001e550: 02075713 srli a4,a4,0x20 + 8001e554: 00a4541b srliw s0,s0,0xa + 8001e558: e40786e3 beqz a5,8001e3a4 <_Z12mmc5_PPUReadj+0x7c> + 8001e55c: 02069693 slli a3,a3,0x20 + 8001e560: 000a4797 auipc a5,0xa4 + 8001e564: 28078793 addi a5,a5,640 # 800c27e0 + 8001e568: 01d6d693 srli a3,a3,0x1d + 8001e56c: 00d786b3 add a3,a5,a3 + 8001e570: 0006b783 ld a5,0(a3) + 8001e574: 00e78733 add a4,a5,a4 + 8001e578: 00074503 lbu a0,0(a4) + 8001e57c: f61ff06f j 8001e4dc <_Z12mmc5_PPUReadj+0x1b4> + 8001e580: ecf6d8e3 bge a3,a5,8001e450 <_Z12mmc5_PPUReadj+0x128> + 8001e584: 000027b7 lui a5,0x2 + 8001e588: dcf46ce3 bltu s0,a5,8001e360 <_Z12mmc5_PPUReadj+0x38> + 8001e58c: e4dff06f j 8001e3d8 <_Z12mmc5_PPUReadj+0xb0> + 8001e590: 000a4797 auipc a5,0xa4 + 8001e594: 21078793 addi a5,a5,528 # 800c27a0 + 8001e598: 00878433 add s0,a5,s0 + 8001e59c: 00043783 ld a5,0(s0) + 8001e5a0: 00e78733 add a4,a5,a4 + 8001e5a4: 00074503 lbu a0,0(a4) + 8001e5a8: f35ff06f j 8001e4dc <_Z12mmc5_PPUReadj+0x1b4> + 8001e5ac: 0057979b slliw a5,a5,0x5 + 8001e5b0: 3e07f793 andi a5,a5,992 + 8001e5b4: 01f47413 andi s0,s0,31 + 8001e5b8: 00f46433 or s0,s0,a5 + 8001e5bc: 001ae797 auipc a5,0x1ae + 8001e5c0: a9c7b783 ld a5,-1380(a5) # 801cc058 <_ZL5ExRAM> + 8001e5c4: 008787b3 add a5,a5,s0 + 8001e5c8: 0007c503 lbu a0,0(a5) + 8001e5cc: f11ff06f j 8001e4dc <_Z12mmc5_PPUReadj+0x1b4> + 8001e5d0: dc0784e3 beqz a5,8001e398 <_Z12mmc5_PPUReadj+0x70> + 8001e5d4: 06061c63 bnez a2,8001e64c <_Z12mmc5_PPUReadj+0x324> + 8001e5d8: 001ae797 auipc a5,0x1ae + 8001e5dc: 1007c783 lbu a5,256(a5) # 801cc6d8 + 8001e5e0: 02d78063 beq a5,a3,8001e600 <_Z12mmc5_PPUReadj+0x2d8> + 8001e5e4: 00a4579b srliw a5,s0,0xa + 8001e5e8: 00379713 slli a4,a5,0x3 + 8001e5ec: 000a4797 auipc a5,0xa4 + 8001e5f0: 1b478793 addi a5,a5,436 # 800c27a0 + 8001e5f4: f2dff06f j 8001e520 <_Z12mmc5_PPUReadj+0x1f8> + 8001e5f8: 00100613 li a2,1 + 8001e5fc: d69ff06f j 8001e364 <_Z12mmc5_PPUReadj+0x3c> + 8001e600: 001ae597 auipc a1,0x1ae + 8001e604: 0f85a583 lw a1,248(a1) # 801cc6f8 + 8001e608: 00040513 mv a0,s0 + 8001e60c: 749190ef jal ra,80038554 <_Z14FCEUPPU_GetCHRjj> + 8001e610: 00054503 lbu a0,0(a0) + 8001e614: ec9ff06f j 8001e4dc <_Z12mmc5_PPUReadj+0x1b4> + 8001e618: 001ae797 auipc a5,0x1ae + 8001e61c: 0d17c783 lbu a5,209(a5) # 801cc6e9 + 8001e620: 03441413 slli s0,s0,0x34 + 8001e624: 00c7979b slliw a5,a5,0xc + 8001e628: 03445413 srli s0,s0,0x34 + 8001e62c: 008787bb addw a5,a5,s0 + 8001e630: 02079793 slli a5,a5,0x20 + 8001e634: 0207d793 srli a5,a5,0x20 + 8001e638: 001ae717 auipc a4,0x1ae + 8001e63c: 0b873703 ld a4,184(a4) # 801cc6f0 + 8001e640: 00f707b3 add a5,a4,a5 + 8001e644: 0007c503 lbu a0,0(a5) + 8001e648: e95ff06f j 8001e4dc <_Z12mmc5_PPUReadj+0x1b4> + 8001e64c: 001ae797 auipc a5,0x1ae + 8001e650: 09d7c783 lbu a5,157(a5) # 801cc6e9 + 8001e654: 03441713 slli a4,s0,0x34 + 8001e658: 00c7979b slliw a5,a5,0xc + 8001e65c: 03475713 srli a4,a4,0x34 + 8001e660: 00e787bb addw a5,a5,a4 + 8001e664: fcdff06f j 8001e630 <_Z12mmc5_PPUReadj+0x308> + +000000008001e668 <_ZL8MMC5WRAMjj>: + 8001e668: 02059793 slli a5,a1,0x20 + 8001e66c: fe010113 addi sp,sp,-32 + 8001e670: 0207d793 srli a5,a5,0x20 + 8001e674: 000a9597 auipc a1,0xa9 + 8001e678: eec58593 addi a1,a1,-276 # 800c7560 <_ZL13MMC5WRAMIndex> + 8001e67c: 00813823 sd s0,16(sp) + 8001e680: 00f585b3 add a1,a1,a5 + 8001e684: 00113c23 sd ra,24(sp) + 8001e688: 00913423 sd s1,8(sp) + 8001e68c: 0005c483 lbu s1,0(a1) + 8001e690: ffffa7b7 lui a5,0xffffa + 8001e694: 00a787bb addw a5,a5,a0 + 8001e698: 0ff00713 li a4,255 + 8001e69c: 00d7d41b srliw s0,a5,0xd + 8001e6a0: 02e49863 bne s1,a4,8001e6d0 <_ZL8MMC5WRAMjj+0x68> + 8001e6a4: 02041793 slli a5,s0,0x20 + 8001e6a8: 0207d793 srli a5,a5,0x20 + 8001e6ac: 001ae417 auipc s0,0x1ae + 8001e6b0: 9ec40413 addi s0,s0,-1556 # 801cc098 <_ZL9MMC5MemIn> + 8001e6b4: 00f407b3 add a5,s0,a5 + 8001e6b8: 00078023 sb zero,0(a5) # ffffffffffffa000 <_end+0xffffffff7fe25000> + 8001e6bc: 01813083 ld ra,24(sp) + 8001e6c0: 01013403 ld s0,16(sp) + 8001e6c4: 00813483 ld s1,8(sp) + 8001e6c8: 02010113 addi sp,sp,32 + 8001e6cc: 00008067 ret + 8001e6d0: 00048613 mv a2,s1 + 8001e6d4: 00050593 mv a1,a0 + 8001e6d8: 01000513 li a0,16 + 8001e6dc: a0cf20ef jal ra,800108e8 <_Z8setprg8rijj> + 8001e6e0: 001ae617 auipc a2,0x1ae + 8001e6e4: 9a062603 lw a2,-1632(a2) # 801cc080 <_ZL8WRAMSIZE> + 8001e6e8: fff6061b addiw a2,a2,-1 + 8001e6ec: 00d49493 slli s1,s1,0xd + 8001e6f0: 00c4f4b3 and s1,s1,a2 + 8001e6f4: 001ae617 auipc a2,0x1ae + 8001e6f8: 95463603 ld a2,-1708(a2) # 801cc048 <_ZL4WRAM> + 8001e6fc: 00960633 add a2,a2,s1 + 8001e700: 000065b7 lui a1,0x6 + 8001e704: 00800513 li a0,8 + 8001e708: 90de10ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 8001e70c: 02041793 slli a5,s0,0x20 + 8001e710: 0207d793 srli a5,a5,0x20 + 8001e714: 001ae417 auipc s0,0x1ae + 8001e718: 98440413 addi s0,s0,-1660 # 801cc098 <_ZL9MMC5MemIn> + 8001e71c: 00f407b3 add a5,s0,a5 + 8001e720: 00100713 li a4,1 + 8001e724: 00e78023 sb a4,0(a5) + 8001e728: 01813083 ld ra,24(sp) + 8001e72c: 01013403 ld s0,16(sp) + 8001e730: 00813483 ld s1,8(sp) + 8001e734: 02010113 addi sp,sp,32 + 8001e738: 00008067 ret + +000000008001e73c <_ZL7MMC5PRGv>: + 8001e73c: fb010113 addi sp,sp,-80 + 8001e740: 04813023 sd s0,64(sp) + 8001e744: 001ae417 auipc s0,0x1ae + 8001e748: 95944403 lbu s0,-1703(s0) # 801cc09d <_ZL9mmc5psize> + 8001e74c: 04113423 sd ra,72(sp) + 8001e750: 02913c23 sd s1,56(sp) + 8001e754: 03213823 sd s2,48(sp) + 8001e758: 03313423 sd s3,40(sp) + 8001e75c: 03413023 sd s4,32(sp) + 8001e760: 01513c23 sd s5,24(sp) + 8001e764: 01613823 sd s6,16(sp) + 8001e768: 01713423 sd s7,8(sp) + 8001e76c: 01813023 sd s8,0(sp) + 8001e770: 00347413 andi s0,s0,3 + 8001e774: 00200793 li a5,2 + 8001e778: 08f40263 beq s0,a5,8001e7fc <_ZL7MMC5PRGv+0xc0> + 8001e77c: 00300793 li a5,3 + 8001e780: 1af40463 beq s0,a5,8001e928 <_ZL7MMC5PRGv+0x1ec> + 8001e784: 00100493 li s1,1 + 8001e788: 0e940e63 beq s0,s1,8001e884 <_ZL7MMC5PRGv+0x148> + 8001e78c: 001ae597 auipc a1,0x1ae + 8001e790: 8ed5c583 lbu a1,-1811(a1) # 801cc079 <_ZL8PRGBanks+0x1> + 8001e794: 4025d59b sraiw a1,a1,0x2 + 8001e798: 010107b7 lui a5,0x1010 + 8001e79c: 1017879b addiw a5,a5,257 + 8001e7a0: 01f5f593 andi a1,a1,31 + 8001e7a4: 00008537 lui a0,0x8 + 8001e7a8: 001ae717 auipc a4,0x1ae + 8001e7ac: 88f72823 sw a5,-1904(a4) # 801cc038 <_ZL16MMC5ROMWrProtect> + 8001e7b0: e64f20ef jal ra,80010e14 <_Z8setprg32jj> + 8001e7b4: 001ae797 auipc a5,0x1ae + 8001e7b8: 8e478793 addi a5,a5,-1820 # 801cc098 <_ZL9MMC5MemIn> + 8001e7bc: 10100713 li a4,257 + 8001e7c0: 009780a3 sb s1,1(a5) + 8001e7c4: 00e79123 sh a4,2(a5) + 8001e7c8: 00978223 sb s1,4(a5) + 8001e7cc: 04813083 ld ra,72(sp) + 8001e7d0: 04013403 ld s0,64(sp) + 8001e7d4: 03813483 ld s1,56(sp) + 8001e7d8: 03013903 ld s2,48(sp) + 8001e7dc: 02813983 ld s3,40(sp) + 8001e7e0: 02013a03 ld s4,32(sp) + 8001e7e4: 01813a83 ld s5,24(sp) + 8001e7e8: 01013b03 ld s6,16(sp) + 8001e7ec: 00813b83 ld s7,8(sp) + 8001e7f0: 00013c03 ld s8,0(sp) + 8001e7f4: 05010113 addi sp,sp,80 + 8001e7f8: 00008067 ret + 8001e7fc: 001ae497 auipc s1,0x1ae + 8001e800: 87c48493 addi s1,s1,-1924 # 801cc078 <_ZL8PRGBanks> + 8001e804: 0014c583 lbu a1,1(s1) + 8001e808: 0185979b slliw a5,a1,0x18 + 8001e80c: 4187d79b sraiw a5,a5,0x18 + 8001e810: 2007c463 bltz a5,8001ea18 <_ZL7MMC5PRGv+0x2dc> + 8001e814: 07e5f593 andi a1,a1,126 + 8001e818: 00008537 lui a0,0x8 + 8001e81c: 001ae797 auipc a5,0x1ae + 8001e820: 80079e23 sh zero,-2020(a5) # 801cc038 <_ZL16MMC5ROMWrProtect> + 8001e824: e45ff0ef jal ra,8001e668 <_ZL8MMC5WRAMjj> + 8001e828: 0014c583 lbu a1,1(s1) + 8001e82c: 0000a537 lui a0,0xa + 8001e830: 001aea17 auipc s4,0x1ae + 8001e834: 808a0a13 addi s4,s4,-2040 # 801cc038 <_ZL16MMC5ROMWrProtect> + 8001e838: 07e5f593 andi a1,a1,126 + 8001e83c: 0015859b addiw a1,a1,1 + 8001e840: e29ff0ef jal ra,8001e668 <_ZL8MMC5WRAMjj> + 8001e844: 0024c583 lbu a1,2(s1) + 8001e848: 001ae917 auipc s2,0x1ae + 8001e84c: 85090913 addi s2,s2,-1968 # 801cc098 <_ZL9MMC5MemIn> + 8001e850: 0185979b slliw a5,a1,0x18 + 8001e854: 4187d79b sraiw a5,a5,0x18 + 8001e858: 2007c263 bltz a5,8001ea5c <_ZL7MMC5PRGv+0x320> + 8001e85c: 0000c537 lui a0,0xc + 8001e860: 001ad797 auipc a5,0x1ad + 8001e864: 7c078d23 sb zero,2010(a5) # 801cc03a <_ZL16MMC5ROMWrProtect+0x2> + 8001e868: e01ff0ef jal ra,8001e668 <_ZL8MMC5WRAMjj> + 8001e86c: 0034c583 lbu a1,3(s1) + 8001e870: 00100793 li a5,1 + 8001e874: 0000e537 lui a0,0xe + 8001e878: 07f5f593 andi a1,a1,127 + 8001e87c: 00f90223 sb a5,4(s2) + 8001e880: 1200006f j 8001e9a0 <_ZL7MMC5PRGv+0x264> + 8001e884: 001ad497 auipc s1,0x1ad + 8001e888: 7f448493 addi s1,s1,2036 # 801cc078 <_ZL8PRGBanks> + 8001e88c: 0014c583 lbu a1,1(s1) + 8001e890: 0185979b slliw a5,a1,0x18 + 8001e894: 4187d79b sraiw a5,a5,0x18 + 8001e898: 1407c863 bltz a5,8001e9e8 <_ZL7MMC5PRGv+0x2ac> + 8001e89c: 07e5f593 andi a1,a1,126 + 8001e8a0: 00008537 lui a0,0x8 + 8001e8a4: 001ad797 auipc a5,0x1ad + 8001e8a8: 78079a23 sh zero,1940(a5) # 801cc038 <_ZL16MMC5ROMWrProtect> + 8001e8ac: dbdff0ef jal ra,8001e668 <_ZL8MMC5WRAMjj> + 8001e8b0: 0014c583 lbu a1,1(s1) + 8001e8b4: 0000a537 lui a0,0xa + 8001e8b8: 001ada17 auipc s4,0x1ad + 8001e8bc: 780a0a13 addi s4,s4,1920 # 801cc038 <_ZL16MMC5ROMWrProtect> + 8001e8c0: 07e5f593 andi a1,a1,126 + 8001e8c4: 0015859b addiw a1,a1,1 + 8001e8c8: da1ff0ef jal ra,8001e668 <_ZL8MMC5WRAMjj> + 8001e8cc: 001ad917 auipc s2,0x1ad + 8001e8d0: 7cc90913 addi s2,s2,1996 # 801cc098 <_ZL9MMC5MemIn> + 8001e8d4: 00100793 li a5,1 + 8001e8d8: 00f90223 sb a5,4(s2) + 8001e8dc: 00f901a3 sb a5,3(s2) + 8001e8e0: 0034c583 lbu a1,3(s1) + 8001e8e4: 04013403 ld s0,64(sp) + 8001e8e8: 10100793 li a5,257 + 8001e8ec: 04813083 ld ra,72(sp) + 8001e8f0: 03813483 ld s1,56(sp) + 8001e8f4: 03013903 ld s2,48(sp) + 8001e8f8: 02813983 ld s3,40(sp) + 8001e8fc: 01813a83 ld s5,24(sp) + 8001e900: 01013b03 ld s6,16(sp) + 8001e904: 00813b83 ld s7,8(sp) + 8001e908: 00013c03 ld s8,0(sp) + 8001e90c: 00fa1123 sh a5,2(s4) + 8001e910: 02013a03 ld s4,32(sp) + 8001e914: 4015d59b sraiw a1,a1,0x1 + 8001e918: 03f5f593 andi a1,a1,63 + 8001e91c: 0000c537 lui a0,0xc + 8001e920: 05010113 addi sp,sp,80 + 8001e924: b34f206f j 80010c58 <_Z8setprg16jj> + 8001e928: 001ad497 auipc s1,0x1ad + 8001e92c: 75048493 addi s1,s1,1872 # 801cc078 <_ZL8PRGBanks> + 8001e930: 001ada17 auipc s4,0x1ad + 8001e934: 708a0a13 addi s4,s4,1800 # 801cc038 <_ZL16MMC5ROMWrProtect> + 8001e938: 00048993 mv s3,s1 + 8001e93c: 000a0913 mv s2,s4 + 8001e940: 001ada97 auipc s5,0x1ad + 8001e944: 759a8a93 addi s5,s5,1881 # 801cc099 <_ZL9MMC5MemIn+0x1> + 8001e948: 00008437 lui s0,0x8 + 8001e94c: 00100c13 li s8,1 + 8001e950: 00002bb7 lui s7,0x2 + 8001e954: 0000eb37 lui s6,0xe + 8001e958: 0009c583 lbu a1,0(s3) + 8001e95c: 00040513 mv a0,s0 + 8001e960: 0185979b slliw a5,a1,0x18 + 8001e964: 4187d79b sraiw a5,a5,0x18 + 8001e968: 0607c663 bltz a5,8001e9d4 <_ZL7MMC5PRGv+0x298> + 8001e96c: 00090023 sb zero,0(s2) + 8001e970: cf9ff0ef jal ra,8001e668 <_ZL8MMC5WRAMjj> + 8001e974: 008b843b addw s0,s7,s0 + 8001e978: 00198993 addi s3,s3,1 + 8001e97c: 00190913 addi s2,s2,1 + 8001e980: 001a8a93 addi s5,s5,1 + 8001e984: fd641ae3 bne s0,s6,8001e958 <_ZL7MMC5PRGv+0x21c> + 8001e988: 0034c583 lbu a1,3(s1) + 8001e98c: 00100793 li a5,1 + 8001e990: 0000e537 lui a0,0xe + 8001e994: 07f5f593 andi a1,a1,127 + 8001e998: 001ad717 auipc a4,0x1ad + 8001e99c: 70f70223 sb a5,1796(a4) # 801cc09c <_ZL9MMC5MemIn+0x4> + 8001e9a0: 04013403 ld s0,64(sp) + 8001e9a4: 04813083 ld ra,72(sp) + 8001e9a8: 03813483 ld s1,56(sp) + 8001e9ac: 03013903 ld s2,48(sp) + 8001e9b0: 02813983 ld s3,40(sp) + 8001e9b4: 01813a83 ld s5,24(sp) + 8001e9b8: 01013b03 ld s6,16(sp) + 8001e9bc: 00813b83 ld s7,8(sp) + 8001e9c0: 00013c03 ld s8,0(sp) + 8001e9c4: 00fa01a3 sb a5,3(s4) + 8001e9c8: 02013a03 ld s4,32(sp) + 8001e9cc: 05010113 addi sp,sp,80 + 8001e9d0: 8ccf206f j 80010a9c <_Z7setprg8jj> + 8001e9d4: 07f5f593 andi a1,a1,127 + 8001e9d8: 01890023 sb s8,0(s2) + 8001e9dc: 8c0f20ef jal ra,80010a9c <_Z7setprg8jj> + 8001e9e0: 018a8023 sb s8,0(s5) + 8001e9e4: f91ff06f j 8001e974 <_ZL7MMC5PRGv+0x238> + 8001e9e8: 001ad917 auipc s2,0x1ad + 8001e9ec: 6b090913 addi s2,s2,1712 # 801cc098 <_ZL9MMC5MemIn> + 8001e9f0: 10100793 li a5,257 + 8001e9f4: 001ada17 auipc s4,0x1ad + 8001e9f8: 644a0a13 addi s4,s4,1604 # 801cc038 <_ZL16MMC5ROMWrProtect> + 8001e9fc: 0015d593 srli a1,a1,0x1 + 8001ea00: 00008537 lui a0,0x8 + 8001ea04: 00fa1023 sh a5,0(s4) + 8001ea08: a50f20ef jal ra,80010c58 <_Z8setprg16jj> + 8001ea0c: 00890123 sb s0,2(s2) + 8001ea10: 008900a3 sb s0,1(s2) + 8001ea14: ec1ff06f j 8001e8d4 <_ZL7MMC5PRGv+0x198> + 8001ea18: 00100793 li a5,1 + 8001ea1c: 001ad917 auipc s2,0x1ad + 8001ea20: 67c90913 addi s2,s2,1660 # 801cc098 <_ZL9MMC5MemIn> + 8001ea24: 4015d59b sraiw a1,a1,0x1 + 8001ea28: 03f5f593 andi a1,a1,63 + 8001ea2c: 00f90123 sb a5,2(s2) + 8001ea30: 00f900a3 sb a5,1(s2) + 8001ea34: 001ada17 auipc s4,0x1ad + 8001ea38: 604a0a13 addi s4,s4,1540 # 801cc038 <_ZL16MMC5ROMWrProtect> + 8001ea3c: 10100793 li a5,257 + 8001ea40: 00008537 lui a0,0x8 + 8001ea44: 00fa1023 sh a5,0(s4) + 8001ea48: a10f20ef jal ra,80010c58 <_Z8setprg16jj> + 8001ea4c: 0024c583 lbu a1,2(s1) + 8001ea50: 0185979b slliw a5,a1,0x18 + 8001ea54: 4187d79b sraiw a5,a5,0x18 + 8001ea58: e007d2e3 bgez a5,8001e85c <_ZL7MMC5PRGv+0x120> + 8001ea5c: 00100793 li a5,1 + 8001ea60: 07f5f593 andi a1,a1,127 + 8001ea64: 0000c537 lui a0,0xc + 8001ea68: 00fa0123 sb a5,2(s4) + 8001ea6c: 00f901a3 sb a5,3(s2) + 8001ea70: 82cf20ef jal ra,80010a9c <_Z7setprg8jj> + 8001ea74: df9ff06f j 8001e86c <_ZL7MMC5PRGv+0x130> + +000000008001ea78 <_ZL8MMC5CHRAv>: + 8001ea78: fc010113 addi sp,sp,-64 + 8001ea7c: 001ad797 auipc a5,0x1ad + 8001ea80: 6227c783 lbu a5,1570(a5) # 801cc09e <_ZL9mmc5vsize> + 8001ea84: 02113c23 sd ra,56(sp) + 8001ea88: 02813823 sd s0,48(sp) + 8001ea8c: 02913423 sd s1,40(sp) + 8001ea90: 03213023 sd s2,32(sp) + 8001ea94: 01313c23 sd s3,24(sp) + 8001ea98: 01413823 sd s4,16(sp) + 8001ea9c: 01513423 sd s5,8(sp) + 8001eaa0: 01613023 sd s6,0(sp) + 8001eaa4: 0037f793 andi a5,a5,3 + 8001eaa8: 00200713 li a4,2 + 8001eaac: 1ae78863 beq a5,a4,8001ec5c <_ZL8MMC5CHRAv+0x1e4> + 8001eab0: 00300713 li a4,3 + 8001eab4: 12e78463 beq a5,a4,8001ebdc <_ZL8MMC5CHRAv+0x164> + 8001eab8: 00100713 li a4,1 + 8001eabc: 000a9417 auipc s0,0xa9 + 8001eac0: b2440413 addi s0,s0,-1244 # 800c75e0 <_ZL9CHRBanksA> + 8001eac4: 08e78463 beq a5,a4,8001eb4c <_ZL8MMC5CHRAv+0xd4> + 8001eac8: 00e45503 lhu a0,14(s0) + 8001eacc: c38f20ef jal ra,80010f04 <_Z7setchr8j> + 8001ead0: 000a4797 auipc a5,0xa4 + 8001ead4: b307b783 ld a5,-1232(a5) # 800c2600 + 8001ead8: 04078663 beqz a5,8001eb24 <_ZL8MMC5CHRAv+0xac> + 8001eadc: 00e45683 lhu a3,14(s0) + 8001eae0: 000a4617 auipc a2,0xa4 + 8001eae4: aa062603 lw a2,-1376(a2) # 800c2580 + 8001eae8: 000a4717 auipc a4,0xa4 + 8001eaec: cf870713 addi a4,a4,-776 # 800c27e0 + 8001eaf0: 00c6f6b3 and a3,a3,a2 + 8001eaf4: 00d6969b slliw a3,a3,0xd + 8001eaf8: 02069693 slli a3,a3,0x20 + 8001eafc: 0206d693 srli a3,a3,0x20 + 8001eb00: 00d787b3 add a5,a5,a3 + 8001eb04: 02f73c23 sd a5,56(a4) + 8001eb08: 02f73823 sd a5,48(a4) + 8001eb0c: 02f73423 sd a5,40(a4) + 8001eb10: 02f73023 sd a5,32(a4) + 8001eb14: 00f73c23 sd a5,24(a4) + 8001eb18: 00f73823 sd a5,16(a4) + 8001eb1c: 00f73423 sd a5,8(a4) + 8001eb20: 00f73023 sd a5,0(a4) + 8001eb24: 03813083 ld ra,56(sp) + 8001eb28: 03013403 ld s0,48(sp) + 8001eb2c: 02813483 ld s1,40(sp) + 8001eb30: 02013903 ld s2,32(sp) + 8001eb34: 01813983 ld s3,24(sp) + 8001eb38: 01013a03 ld s4,16(sp) + 8001eb3c: 00813a83 ld s5,8(sp) + 8001eb40: 00013b03 ld s6,0(sp) + 8001eb44: 04010113 addi sp,sp,64 + 8001eb48: 00008067 ret + 8001eb4c: 00645583 lhu a1,6(s0) + 8001eb50: 00000513 li a0,0 + 8001eb54: b90f20ef jal ra,80010ee4 <_Z7setchr4jj> + 8001eb58: 00e45583 lhu a1,14(s0) + 8001eb5c: 00001537 lui a0,0x1 + 8001eb60: b84f20ef jal ra,80010ee4 <_Z7setchr4jj> + 8001eb64: 000a4697 auipc a3,0xa4 + 8001eb68: a9c6b683 ld a3,-1380(a3) # 800c2600 + 8001eb6c: fa068ce3 beqz a3,8001eb24 <_ZL8MMC5CHRAv+0xac> + 8001eb70: 00e45703 lhu a4,14(s0) + 8001eb74: 00645603 lhu a2,6(s0) + 8001eb78: 000a4797 auipc a5,0xa4 + 8001eb7c: 9887a783 lw a5,-1656(a5) # 800c2500 + 8001eb80: 00e7f733 and a4,a5,a4 + 8001eb84: 00c7171b slliw a4,a4,0xc + 8001eb88: 00c7f7b3 and a5,a5,a2 + 8001eb8c: 00c7979b slliw a5,a5,0xc + 8001eb90: 02071713 slli a4,a4,0x20 + 8001eb94: fffff637 lui a2,0xfffff + 8001eb98: 02075713 srli a4,a4,0x20 + 8001eb9c: 02079793 slli a5,a5,0x20 + 8001eba0: 00c70733 add a4,a4,a2 + 8001eba4: 0207d793 srli a5,a5,0x20 + 8001eba8: 000a4617 auipc a2,0xa4 + 8001ebac: c3860613 addi a2,a2,-968 # 800c27e0 + 8001ebb0: 00f687b3 add a5,a3,a5 + 8001ebb4: 00e68733 add a4,a3,a4 + 8001ebb8: 00f63c23 sd a5,24(a2) + 8001ebbc: 00f63823 sd a5,16(a2) + 8001ebc0: 00f63423 sd a5,8(a2) + 8001ebc4: 00f63023 sd a5,0(a2) + 8001ebc8: 02e63c23 sd a4,56(a2) + 8001ebcc: 02e63823 sd a4,48(a2) + 8001ebd0: 02e63423 sd a4,40(a2) + 8001ebd4: 02e63023 sd a4,32(a2) + 8001ebd8: f4dff06f j 8001eb24 <_ZL8MMC5CHRAv+0xac> + 8001ebdc: 000a9b17 auipc s6,0xa9 + 8001ebe0: a04b0b13 addi s6,s6,-1532 # 800c75e0 <_ZL9CHRBanksA> + 8001ebe4: 00000a93 li s5,0 + 8001ebe8: 000a4997 auipc s3,0xa4 + 8001ebec: a1898993 addi s3,s3,-1512 # 800c2600 + 8001ebf0: 000a4917 auipc s2,0xa4 + 8001ebf4: bf090913 addi s2,s2,-1040 # 800c27e0 + 8001ebf8: 000a4a17 auipc s4,0xa4 + 8001ebfc: 808a0a13 addi s4,s4,-2040 # 800c2400 + 8001ec00: 000024b7 lui s1,0x2 + 8001ec04: 000b5583 lhu a1,0(s6) + 8001ec08: 000a841b sext.w s0,s5 + 8001ec0c: 00040513 mv a0,s0 + 8001ec10: a94f20ef jal ra,80010ea4 <_Z7setchr1jj> + 8001ec14: 0009b703 ld a4,0(s3) + 8001ec18: 00a4541b srliw s0,s0,0xa + 8001ec1c: 00341413 slli s0,s0,0x3 + 8001ec20: 00890433 add s0,s2,s0 + 8001ec24: 02070463 beqz a4,8001ec4c <_ZL8MMC5CHRAv+0x1d4> + 8001ec28: 000b5783 lhu a5,0(s6) + 8001ec2c: 000a2683 lw a3,0(s4) + 8001ec30: 00d7f7b3 and a5,a5,a3 + 8001ec34: 00a7979b slliw a5,a5,0xa + 8001ec38: 02079793 slli a5,a5,0x20 + 8001ec3c: 0207d793 srli a5,a5,0x20 + 8001ec40: 415787b3 sub a5,a5,s5 + 8001ec44: 00f707b3 add a5,a4,a5 + 8001ec48: 00f43023 sd a5,0(s0) + 8001ec4c: 400a8a93 addi s5,s5,1024 + 8001ec50: 002b0b13 addi s6,s6,2 + 8001ec54: fa9a98e3 bne s5,s1,8001ec04 <_ZL8MMC5CHRAv+0x18c> + 8001ec58: ecdff06f j 8001eb24 <_ZL8MMC5CHRAv+0xac> + 8001ec5c: 000a9497 auipc s1,0xa9 + 8001ec60: 98448493 addi s1,s1,-1660 # 800c75e0 <_ZL9CHRBanksA> + 8001ec64: 0024d583 lhu a1,2(s1) + 8001ec68: 00000513 li a0,0 + 8001ec6c: 00001437 lui s0,0x1 + 8001ec70: a54f20ef jal ra,80010ec4 <_Z7setchr2jj> + 8001ec74: 0064d583 lhu a1,6(s1) + 8001ec78: 80040513 addi a0,s0,-2048 # 800 <_entry_offset+0x800> + 8001ec7c: a48f20ef jal ra,80010ec4 <_Z7setchr2jj> + 8001ec80: 00a4d583 lhu a1,10(s1) + 8001ec84: 00001537 lui a0,0x1 + 8001ec88: a3cf20ef jal ra,80010ec4 <_Z7setchr2jj> + 8001ec8c: 00e4d583 lhu a1,14(s1) + 8001ec90: 00002537 lui a0,0x2 + 8001ec94: 80050513 addi a0,a0,-2048 # 1800 <_entry_offset+0x1800> + 8001ec98: a2cf20ef jal ra,80010ec4 <_Z7setchr2jj> + 8001ec9c: 000a4597 auipc a1,0xa4 + 8001eca0: 9645b583 ld a1,-1692(a1) # 800c2600 + 8001eca4: e80580e3 beqz a1,8001eb24 <_ZL8MMC5CHRAv+0xac> + 8001eca8: 0064d683 lhu a3,6(s1) + 8001ecac: 00a4d703 lhu a4,10(s1) + 8001ecb0: 00e4d603 lhu a2,14(s1) + 8001ecb4: 0024d503 lhu a0,2(s1) + 8001ecb8: 000a3797 auipc a5,0xa3 + 8001ecbc: 7c87a783 lw a5,1992(a5) # 800c2480 + 8001ecc0: 00d7f6b3 and a3,a5,a3 + 8001ecc4: 00e7f733 and a4,a5,a4 + 8001ecc8: 00c7f633 and a2,a5,a2 + 8001eccc: 00b6969b slliw a3,a3,0xb + 8001ecd0: 00a7f7b3 and a5,a5,a0 + 8001ecd4: 00b7171b slliw a4,a4,0xb + 8001ecd8: 00b6161b slliw a2,a2,0xb + 8001ecdc: 00b7979b slliw a5,a5,0xb + 8001ece0: 02069693 slli a3,a3,0x20 + 8001ece4: 02071713 slli a4,a4,0x20 + 8001ece8: 02061613 slli a2,a2,0x20 + 8001ecec: fffff537 lui a0,0xfffff + 8001ecf0: 80050513 addi a0,a0,-2048 # ffffffffffffe800 <_end+0xffffffff7fe29800> + 8001ecf4: 0206d693 srli a3,a3,0x20 + 8001ecf8: 02075713 srli a4,a4,0x20 + 8001ecfc: 02065613 srli a2,a2,0x20 + 8001ed00: 02079793 slli a5,a5,0x20 + 8001ed04: 00a60633 add a2,a2,a0 + 8001ed08: 0207d793 srli a5,a5,0x20 + 8001ed0c: 80068693 addi a3,a3,-2048 + 8001ed10: 40870733 sub a4,a4,s0 + 8001ed14: 000a4517 auipc a0,0xa4 + 8001ed18: acc50513 addi a0,a0,-1332 # 800c27e0 + 8001ed1c: 00f587b3 add a5,a1,a5 + 8001ed20: 00d586b3 add a3,a1,a3 + 8001ed24: 00e58733 add a4,a1,a4 + 8001ed28: 00c58633 add a2,a1,a2 + 8001ed2c: 00f53423 sd a5,8(a0) + 8001ed30: 00f53023 sd a5,0(a0) + 8001ed34: 00d53c23 sd a3,24(a0) + 8001ed38: 00d53823 sd a3,16(a0) + 8001ed3c: 02e53423 sd a4,40(a0) + 8001ed40: 02e53023 sd a4,32(a0) + 8001ed44: 02c53c23 sd a2,56(a0) + 8001ed48: 02c53823 sd a2,48(a0) + 8001ed4c: dd9ff06f j 8001eb24 <_ZL8MMC5CHRAv+0xac> + +000000008001ed50 <_ZL8MMC5CHRBv>: + 8001ed50: fb010113 addi sp,sp,-80 + 8001ed54: 001ad797 auipc a5,0x1ad + 8001ed58: 34a7c783 lbu a5,842(a5) # 801cc09e <_ZL9mmc5vsize> + 8001ed5c: 04113423 sd ra,72(sp) + 8001ed60: 04813023 sd s0,64(sp) + 8001ed64: 02913c23 sd s1,56(sp) + 8001ed68: 03213823 sd s2,48(sp) + 8001ed6c: 03313423 sd s3,40(sp) + 8001ed70: 03413023 sd s4,32(sp) + 8001ed74: 01513c23 sd s5,24(sp) + 8001ed78: 01613823 sd s6,16(sp) + 8001ed7c: 01713423 sd s7,8(sp) + 8001ed80: 01813023 sd s8,0(sp) + 8001ed84: 0037f793 andi a5,a5,3 + 8001ed88: 00200713 li a4,2 + 8001ed8c: 1ae78a63 beq a5,a4,8001ef40 <_ZL8MMC5CHRBv+0x1f0> + 8001ed90: 00300713 li a4,3 + 8001ed94: 0ae78063 beq a5,a4,8001ee34 <_ZL8MMC5CHRBv+0xe4> + 8001ed98: 00100713 li a4,1 + 8001ed9c: 001ad417 auipc s0,0x1ad + 8001eda0: 2ec40413 addi s0,s0,748 # 801cc088 <_ZL9CHRBanksB> + 8001eda4: 12e78063 beq a5,a4,8001eec4 <_ZL8MMC5CHRBv+0x174> + 8001eda8: 00645503 lhu a0,6(s0) + 8001edac: 958f20ef jal ra,80010f04 <_Z7setchr8j> + 8001edb0: 000a4797 auipc a5,0xa4 + 8001edb4: 8507b783 ld a5,-1968(a5) # 800c2600 + 8001edb8: 04078663 beqz a5,8001ee04 <_ZL8MMC5CHRBv+0xb4> + 8001edbc: 00645683 lhu a3,6(s0) + 8001edc0: 000a3617 auipc a2,0xa3 + 8001edc4: 7c062603 lw a2,1984(a2) # 800c2580 + 8001edc8: 000a4717 auipc a4,0xa4 + 8001edcc: 9d870713 addi a4,a4,-1576 # 800c27a0 + 8001edd0: 00c6f6b3 and a3,a3,a2 + 8001edd4: 00d6969b slliw a3,a3,0xd + 8001edd8: 02069693 slli a3,a3,0x20 + 8001eddc: 0206d693 srli a3,a3,0x20 + 8001ede0: 00d787b3 add a5,a5,a3 + 8001ede4: 02f73c23 sd a5,56(a4) + 8001ede8: 02f73823 sd a5,48(a4) + 8001edec: 02f73423 sd a5,40(a4) + 8001edf0: 02f73023 sd a5,32(a4) + 8001edf4: 00f73c23 sd a5,24(a4) + 8001edf8: 00f73823 sd a5,16(a4) + 8001edfc: 00f73423 sd a5,8(a4) + 8001ee00: 00f73023 sd a5,0(a4) + 8001ee04: 04813083 ld ra,72(sp) + 8001ee08: 04013403 ld s0,64(sp) + 8001ee0c: 03813483 ld s1,56(sp) + 8001ee10: 03013903 ld s2,48(sp) + 8001ee14: 02813983 ld s3,40(sp) + 8001ee18: 02013a03 ld s4,32(sp) + 8001ee1c: 01813a83 ld s5,24(sp) + 8001ee20: 01013b03 ld s6,16(sp) + 8001ee24: 00813b83 ld s7,8(sp) + 8001ee28: 00013c03 ld s8,0(sp) + 8001ee2c: 05010113 addi sp,sp,80 + 8001ee30: 00008067 ret + 8001ee34: 00000c13 li s8,0 + 8001ee38: 00000b93 li s7,0 + 8001ee3c: 001ada17 auipc s4,0x1ad + 8001ee40: 24ca0a13 addi s4,s4,588 # 801cc088 <_ZL9CHRBanksB> + 8001ee44: 000a3997 auipc s3,0xa3 + 8001ee48: 7bc98993 addi s3,s3,1980 # 800c2600 + 8001ee4c: 000a4917 auipc s2,0xa4 + 8001ee50: 95490913 addi s2,s2,-1708 # 800c27a0 + 8001ee54: 000a3a97 auipc s5,0xa3 + 8001ee58: 5aca8a93 addi s5,s5,1452 # 800c2400 + 8001ee5c: 00800493 li s1,8 + 8001ee60: 003bfb13 andi s6,s7,3 + 8001ee64: 001b1b13 slli s6,s6,0x1 + 8001ee68: 016a0b33 add s6,s4,s6 + 8001ee6c: 000b5583 lhu a1,0(s6) + 8001ee70: 000c041b sext.w s0,s8 + 8001ee74: 00040513 mv a0,s0 + 8001ee78: 82cf20ef jal ra,80010ea4 <_Z7setchr1jj> + 8001ee7c: 0009b703 ld a4,0(s3) + 8001ee80: 00a4541b srliw s0,s0,0xa + 8001ee84: 00341413 slli s0,s0,0x3 + 8001ee88: 001b8b9b addiw s7,s7,1 + 8001ee8c: 00890433 add s0,s2,s0 + 8001ee90: 02070463 beqz a4,8001eeb8 <_ZL8MMC5CHRBv+0x168> + 8001ee94: 000b5783 lhu a5,0(s6) + 8001ee98: 000aa683 lw a3,0(s5) + 8001ee9c: 00d7f7b3 and a5,a5,a3 + 8001eea0: 00a7979b slliw a5,a5,0xa + 8001eea4: 02079793 slli a5,a5,0x20 + 8001eea8: 0207d793 srli a5,a5,0x20 + 8001eeac: 418787b3 sub a5,a5,s8 + 8001eeb0: 00f707b3 add a5,a4,a5 + 8001eeb4: 00f43023 sd a5,0(s0) + 8001eeb8: 400c0c13 addi s8,s8,1024 + 8001eebc: fa9b92e3 bne s7,s1,8001ee60 <_ZL8MMC5CHRBv+0x110> + 8001eec0: f45ff06f j 8001ee04 <_ZL8MMC5CHRBv+0xb4> + 8001eec4: 00645583 lhu a1,6(s0) + 8001eec8: 00000513 li a0,0 + 8001eecc: 818f20ef jal ra,80010ee4 <_Z7setchr4jj> + 8001eed0: 00645583 lhu a1,6(s0) + 8001eed4: 00001537 lui a0,0x1 + 8001eed8: 80cf20ef jal ra,80010ee4 <_Z7setchr4jj> + 8001eedc: 000a3717 auipc a4,0xa3 + 8001eee0: 72473703 ld a4,1828(a4) # 800c2600 + 8001eee4: f20700e3 beqz a4,8001ee04 <_ZL8MMC5CHRBv+0xb4> + 8001eee8: 00645783 lhu a5,6(s0) + 8001eeec: 000a3697 auipc a3,0xa3 + 8001eef0: 6146a683 lw a3,1556(a3) # 800c2500 + 8001eef4: fffff637 lui a2,0xfffff + 8001eef8: 00d7f7b3 and a5,a5,a3 + 8001eefc: 00c7979b slliw a5,a5,0xc + 8001ef00: 02079793 slli a5,a5,0x20 + 8001ef04: 0207d793 srli a5,a5,0x20 + 8001ef08: 00c78633 add a2,a5,a2 + 8001ef0c: 000a4697 auipc a3,0xa4 + 8001ef10: 89468693 addi a3,a3,-1900 # 800c27a0 + 8001ef14: 00f707b3 add a5,a4,a5 + 8001ef18: 00c70733 add a4,a4,a2 + 8001ef1c: 00f6bc23 sd a5,24(a3) + 8001ef20: 00f6b823 sd a5,16(a3) + 8001ef24: 00f6b423 sd a5,8(a3) + 8001ef28: 00f6b023 sd a5,0(a3) + 8001ef2c: 02e6bc23 sd a4,56(a3) + 8001ef30: 02e6b823 sd a4,48(a3) + 8001ef34: 02e6b423 sd a4,40(a3) + 8001ef38: 02e6b023 sd a4,32(a3) + 8001ef3c: ec9ff06f j 8001ee04 <_ZL8MMC5CHRBv+0xb4> + 8001ef40: 001ad417 auipc s0,0x1ad + 8001ef44: 14840413 addi s0,s0,328 # 801cc088 <_ZL9CHRBanksB> + 8001ef48: 00245583 lhu a1,2(s0) + 8001ef4c: 00000513 li a0,0 + 8001ef50: 000014b7 lui s1,0x1 + 8001ef54: f71f10ef jal ra,80010ec4 <_Z7setchr2jj> + 8001ef58: 00645583 lhu a1,6(s0) + 8001ef5c: 80048513 addi a0,s1,-2048 # 800 <_entry_offset+0x800> + 8001ef60: f65f10ef jal ra,80010ec4 <_Z7setchr2jj> + 8001ef64: 00245583 lhu a1,2(s0) + 8001ef68: 00001537 lui a0,0x1 + 8001ef6c: f59f10ef jal ra,80010ec4 <_Z7setchr2jj> + 8001ef70: 00645583 lhu a1,6(s0) + 8001ef74: 00002537 lui a0,0x2 + 8001ef78: 80050513 addi a0,a0,-2048 # 1800 <_entry_offset+0x1800> + 8001ef7c: f49f10ef jal ra,80010ec4 <_Z7setchr2jj> + 8001ef80: 000a3697 auipc a3,0xa3 + 8001ef84: 6806b683 ld a3,1664(a3) # 800c2600 + 8001ef88: e6068ee3 beqz a3,8001ee04 <_ZL8MMC5CHRBv+0xb4> + 8001ef8c: 00645603 lhu a2,6(s0) + 8001ef90: 00245783 lhu a5,2(s0) + 8001ef94: 000a3717 auipc a4,0xa3 + 8001ef98: 4ec72703 lw a4,1260(a4) # 800c2480 + 8001ef9c: 00f777b3 and a5,a4,a5 + 8001efa0: 00c77733 and a4,a4,a2 + 8001efa4: 00b7979b slliw a5,a5,0xb + 8001efa8: 00b7171b slliw a4,a4,0xb + 8001efac: 02079793 slli a5,a5,0x20 + 8001efb0: 02071713 slli a4,a4,0x20 + 8001efb4: fffff637 lui a2,0xfffff + 8001efb8: 0207d793 srli a5,a5,0x20 + 8001efbc: 02075713 srli a4,a4,0x20 + 8001efc0: 80060613 addi a2,a2,-2048 # ffffffffffffe800 <_end+0xffffffff7fe29800> + 8001efc4: 80070593 addi a1,a4,-2048 + 8001efc8: 409784b3 sub s1,a5,s1 + 8001efcc: 00c70733 add a4,a4,a2 + 8001efd0: 00f687b3 add a5,a3,a5 + 8001efd4: 000a3617 auipc a2,0xa3 + 8001efd8: 7cc60613 addi a2,a2,1996 # 800c27a0 + 8001efdc: 00b685b3 add a1,a3,a1 + 8001efe0: 009684b3 add s1,a3,s1 + 8001efe4: 00e68733 add a4,a3,a4 + 8001efe8: 00f63423 sd a5,8(a2) + 8001efec: 00f63023 sd a5,0(a2) + 8001eff0: 00b63c23 sd a1,24(a2) + 8001eff4: 00b63823 sd a1,16(a2) + 8001eff8: 02963423 sd s1,40(a2) + 8001effc: 02963023 sd s1,32(a2) + 8001f000: 02e63c23 sd a4,56(a2) + 8001f004: 02e63823 sd a4,48(a2) + 8001f008: dfdff06f j 8001ee04 <_ZL8MMC5CHRBv+0xb4> + +000000008001f00c <_ZL13Mapper5_writejh>: + 8001f00c: fe010113 addi sp,sp,-32 + 8001f010: 000057b7 lui a5,0x5 + 8001f014: 00813823 sd s0,16(sp) + 8001f018: 00113c23 sd ra,24(sp) + 8001f01c: 00913423 sd s1,8(sp) + 8001f020: 13078713 addi a4,a5,304 # 5130 <_entry_offset+0x5130> + 8001f024: 00058413 mv s0,a1 + 8001f028: 06a76263 bltu a4,a0,8001f08c <_ZL13Mapper5_writejh+0x80> + 8001f02c: 0ff78793 addi a5,a5,255 + 8001f030: 04a7f463 bgeu a5,a0,8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f034: ffffb7b7 lui a5,0xffffb + 8001f038: f007879b addiw a5,a5,-256 + 8001f03c: 00f507bb addw a5,a0,a5 + 8001f040: 0007869b sext.w a3,a5 + 8001f044: 03000713 li a4,48 + 8001f048: 02d76863 bltu a4,a3,8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f04c: 02079793 slli a5,a5,0x20 + 8001f050: 0207d793 srli a5,a5,0x20 + 8001f054: 00027717 auipc a4,0x27 + 8001f058: 87c70713 addi a4,a4,-1924 # 800458d0 <_ZL6bs_tbl+0x160> + 8001f05c: 00279793 slli a5,a5,0x2 + 8001f060: 00e787b3 add a5,a5,a4 + 8001f064: 0007a783 lw a5,0(a5) # ffffffffffffb000 <_end+0xffffffff7fe26000> + 8001f068: 00e787b3 add a5,a5,a4 + 8001f06c: 00078067 jr a5 + 8001f070: 001ad797 auipc a5,0x1ad + 8001f074: fc8788a3 sb s0,-47(a5) # 801cc041 <_ZL3mul+0x1> + 8001f078: 01813083 ld ra,24(sp) + 8001f07c: 01013403 ld s0,16(sp) + 8001f080: 00813483 ld s1,8(sp) + 8001f084: 02010113 addi sp,sp,32 + 8001f088: 00008067 ret + 8001f08c: ffffb7b7 lui a5,0xffffb + 8001f090: e007879b addiw a5,a5,-512 + 8001f094: 00f5053b addw a0,a0,a5 + 8001f098: 0005071b sext.w a4,a0 + 8001f09c: 00600793 li a5,6 + 8001f0a0: fce7ece3 bltu a5,a4,8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f0a4: 02051513 slli a0,a0,0x20 + 8001f0a8: 02055513 srli a0,a0,0x20 + 8001f0ac: 00027717 auipc a4,0x27 + 8001f0b0: 8e870713 addi a4,a4,-1816 # 80045994 <_ZL6bs_tbl+0x224> + 8001f0b4: 00251513 slli a0,a0,0x2 + 8001f0b8: 00e50533 add a0,a0,a4 + 8001f0bc: 00052783 lw a5,0(a0) + 8001f0c0: 00e787b3 add a5,a5,a4 + 8001f0c4: 00078067 jr a5 # ffffffffffffb000 <_end+0xffffffff7fe26000> + 8001f0c8: 001ad797 auipc a5,0x1ad + 8001f0cc: f6878c23 sb s0,-136(a5) # 801cc040 <_ZL3mul> + 8001f0d0: fa9ff06f j 8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f0d4: 00100513 li a0,1 + 8001f0d8: f8047413 andi s0,s0,-128 + 8001f0dc: c75e10ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8001f0e0: 001ad797 auipc a5,0x1ad + 8001f0e4: fa878823 sb s0,-80(a5) # 801cc090 <_ZL9IRQEnable> + 8001f0e8: f91ff06f j 8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f0ec: 00100513 li a0,1 + 8001f0f0: c61e10ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8001f0f4: 001ad797 auipc a5,0x1ad + 8001f0f8: f2878a23 sb s0,-204(a5) # 801cc028 <_ZL11IRQScanline> + 8001f0fc: f7dff06f j 8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f100: 03f47413 andi s0,s0,63 + 8001f104: 001ad797 auipc a5,0x1ad + 8001f108: 5e8782a3 sb s0,1509(a5) # 801cc6e9 + 8001f10c: f6dff06f j 8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f110: 0034541b srliw s0,s0,0x3 + 8001f114: 001ad797 auipc a5,0x1ad + 8001f118: 5c878b23 sb s0,1494(a5) # 801cc6ea + 8001f11c: f5dff06f j 8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f120: 001ad797 auipc a5,0x1ad + 8001f124: 5c878423 sb s0,1480(a5) # 801cc6e8 + 8001f128: f51ff06f j 8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f12c: 001ad797 auipc a5,0x1ad + 8001f130: 5ab78223 sb a1,1444(a5) # 801cc6d0 + 8001f134: f45ff06f j 8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f138: 001ad717 auipc a4,0x1ad + 8001f13c: 59874703 lbu a4,1432(a4) # 801cc6d0 + 8001f140: 00357793 andi a5,a0,3 + 8001f144: 0087171b slliw a4,a4,0x8 + 8001f148: 30077713 andi a4,a4,768 + 8001f14c: 001ad697 auipc a3,0x1ad + 8001f150: f3c68693 addi a3,a3,-196 # 801cc088 <_ZL9CHRBanksB> + 8001f154: 00179793 slli a5,a5,0x1 + 8001f158: 00f687b3 add a5,a3,a5 + 8001f15c: 00b76433 or s0,a4,a1 + 8001f160: 00100713 li a4,1 + 8001f164: 001ad697 auipc a3,0x1ad + 8001f168: f2e68da3 sb a4,-197(a3) # 801cc09f + 8001f16c: 00879023 sh s0,0(a5) + 8001f170: 01013403 ld s0,16(sp) + 8001f174: 01813083 ld ra,24(sp) + 8001f178: 00813483 ld s1,8(sp) + 8001f17c: 02010113 addi sp,sp,32 + 8001f180: bd1ff06f j 8001ed50 <_ZL8MMC5CHRBv> + 8001f184: 001ad717 auipc a4,0x1ad + 8001f188: 54c74703 lbu a4,1356(a4) # 801cc6d0 + 8001f18c: 00757793 andi a5,a0,7 + 8001f190: 0087171b slliw a4,a4,0x8 + 8001f194: 30077713 andi a4,a4,768 + 8001f198: 00179793 slli a5,a5,0x1 + 8001f19c: 000a8697 auipc a3,0xa8 + 8001f1a0: 44468693 addi a3,a3,1092 # 800c75e0 <_ZL9CHRBanksA> + 8001f1a4: 00b76433 or s0,a4,a1 + 8001f1a8: 00f687b3 add a5,a3,a5 + 8001f1ac: 001ad717 auipc a4,0x1ad + 8001f1b0: ee0709a3 sb zero,-269(a4) # 801cc09f + 8001f1b4: 00879023 sh s0,0(a5) + 8001f1b8: 01013403 ld s0,16(sp) + 8001f1bc: 01813083 ld ra,24(sp) + 8001f1c0: 00813483 ld s1,8(sp) + 8001f1c4: 02010113 addi sp,sp,32 + 8001f1c8: 8b1ff06f j 8001ea78 <_ZL8MMC5CHRAv> + 8001f1cc: 00357513 andi a0,a0,3 + 8001f1d0: 001ad797 auipc a5,0x1ad + 8001f1d4: ea878793 addi a5,a5,-344 # 801cc078 <_ZL8PRGBanks> + 8001f1d8: 00a78533 add a0,a5,a0 + 8001f1dc: 00b50023 sb a1,0(a0) + 8001f1e0: 01013403 ld s0,16(sp) + 8001f1e4: 01813083 ld ra,24(sp) + 8001f1e8: 00813483 ld s1,8(sp) + 8001f1ec: 02010113 addi sp,sp,32 + 8001f1f0: d4cff06f j 8001e73c <_ZL7MMC5PRGv> + 8001f1f4: 001ad797 auipc a5,0x1ad + 8001f1f8: e8878423 sb s0,-376(a5) # 801cc07c <_ZL8WRAMPage> + 8001f1fc: 01013403 ld s0,16(sp) + 8001f200: 01813083 ld ra,24(sp) + 8001f204: 00813483 ld s1,8(sp) + 8001f208: 07f5f593 andi a1,a1,127 + 8001f20c: 00006537 lui a0,0x6 + 8001f210: 02010113 addi sp,sp,32 + 8001f214: c54ff06f j 8001e668 <_ZL8MMC5WRAMjj> + 8001f218: 001ad617 auipc a2,0x1ad + 8001f21c: e5060613 addi a2,a2,-432 # 801cc068 <_ZL6ATFill> + 8001f220: 00064783 lbu a5,0(a2) + 8001f224: 04b78e63 beq a5,a1,8001f280 <_ZL13Mapper5_writejh+0x274> + 8001f228: 00459713 slli a4,a1,0x4 + 8001f22c: 00259793 slli a5,a1,0x2 + 8001f230: 00e7e7b3 or a5,a5,a4 + 8001f234: 00b7e7b3 or a5,a5,a1 + 8001f238: 00659713 slli a4,a1,0x6 + 8001f23c: 00e7e7b3 or a5,a5,a4 + 8001f240: 0ff7f693 andi a3,a5,255 + 8001f244: 0086959b slliw a1,a3,0x8 + 8001f248: 0106951b slliw a0,a3,0x10 + 8001f24c: 0ff7f713 andi a4,a5,255 + 8001f250: 00a5e7b3 or a5,a1,a0 + 8001f254: 00f76733 or a4,a4,a5 + 8001f258: 0186979b slliw a5,a3,0x18 + 8001f25c: 00f76733 or a4,a4,a5 + 8001f260: 001ad697 auipc a3,0x1ad + 8001f264: e106b683 ld a3,-496(a3) # 801cc070 <_ZL8MMC5fill> + 8001f268: 3fc68793 addi a5,a3,1020 + 8001f26c: 0007071b sext.w a4,a4 + 8001f270: 3bc68693 addi a3,a3,956 + 8001f274: 00e7a023 sw a4,0(a5) + 8001f278: ffc78793 addi a5,a5,-4 + 8001f27c: fef69ce3 bne a3,a5,8001f274 <_ZL13Mapper5_writejh+0x268> + 8001f280: 00860023 sb s0,0(a2) + 8001f284: df5ff06f j 8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f288: 001ad597 auipc a1,0x1ad + 8001f28c: de158593 addi a1,a1,-543 # 801cc069 <_ZL6NTFill> + 8001f290: 0005c783 lbu a5,0(a1) + 8001f294: 02878e63 beq a5,s0,8001f2d0 <_ZL13Mapper5_writejh+0x2c4> + 8001f298: 0084179b slliw a5,s0,0x8 + 8001f29c: 0104171b slliw a4,s0,0x10 + 8001f2a0: 00e7e7b3 or a5,a5,a4 + 8001f2a4: 00f467b3 or a5,s0,a5 + 8001f2a8: 0184169b slliw a3,s0,0x18 + 8001f2ac: 00d7e6b3 or a3,a5,a3 + 8001f2b0: 001ad617 auipc a2,0x1ad + 8001f2b4: dc063603 ld a2,-576(a2) # 801cc070 <_ZL8MMC5fill> + 8001f2b8: 0006869b sext.w a3,a3 + 8001f2bc: 3bc60793 addi a5,a2,956 + 8001f2c0: 00d7a023 sw a3,0(a5) + 8001f2c4: 00078713 mv a4,a5 + 8001f2c8: ffc78793 addi a5,a5,-4 + 8001f2cc: fee61ae3 bne a2,a4,8001f2c0 <_ZL13Mapper5_writejh+0x2b4> + 8001f2d0: 00858023 sb s0,0(a1) + 8001f2d4: da5ff06f j 8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f2d8: 001adf17 auipc t5,0x1ad + 8001f2dc: 42ef0f13 addi t5,t5,1070 # 801cc706 + 8001f2e0: 000f4603 lbu a2,0(t5) + 8001f2e4: 00058e9b sext.w t4,a1 + 8001f2e8: 001ad497 auipc s1,0x1ad + 8001f2ec: d704b483 ld s1,-656(s1) # 801cc058 <_ZL5ExRAM> + 8001f2f0: 001ad397 auipc t2,0x1ad + 8001f2f4: d803b383 ld t2,-640(t2) # 801cc070 <_ZL8MMC5fill> + 8001f2f8: 001ac597 auipc a1,0x1ac + 8001f2fc: 7c858593 addi a1,a1,1992 # 801cbac0 + 8001f300: 00000693 li a3,0 + 8001f304: 00100e13 li t3,1 + 8001f308: 00200313 li t1,2 + 8001f30c: 00300893 li a7,3 + 8001f310: 00100813 li a6,1 + 8001f314: 001aa297 auipc t0,0x1aa + 8001f318: 61428293 addi t0,t0,1556 # 801c9928 + 8001f31c: 001aaf97 auipc t6,0x1aa + 8001f320: 20cf8f93 addi t6,t6,524 # 801c9528 + 8001f324: 00400513 li a0,4 + 8001f328: 0016971b slliw a4,a3,0x1 + 8001f32c: 40eed73b sraw a4,t4,a4 + 8001f330: 00de17bb sllw a5,t3,a3 + 8001f334: 0187979b slliw a5,a5,0x18 + 8001f338: 0186161b slliw a2,a2,0x18 + 8001f33c: 00377713 andi a4,a4,3 + 8001f340: 4187d79b sraiw a5,a5,0x18 + 8001f344: 4186561b sraiw a2,a2,0x18 + 8001f348: 0a670463 beq a4,t1,8001f3f0 <_ZL13Mapper5_writejh+0x3e4> + 8001f34c: 09170863 beq a4,a7,8001f3dc <_ZL13Mapper5_writejh+0x3d0> + 8001f350: 00c7e7b3 or a5,a5,a2 + 8001f354: 0ff7f613 andi a2,a5,255 + 8001f358: 07070e63 beq a4,a6,8001f3d4 <_ZL13Mapper5_writejh+0x3c8> + 8001f35c: 01f5b023 sd t6,0(a1) + 8001f360: 0016869b addiw a3,a3,1 + 8001f364: 00858593 addi a1,a1,8 + 8001f368: fca690e3 bne a3,a0,8001f328 <_ZL13Mapper5_writejh+0x31c> + 8001f36c: 00cf0023 sb a2,0(t5) + 8001f370: 001ad797 auipc a5,0x1ad + 8001f374: ca878d23 sb s0,-838(a5) # 801cc02a <_ZL12NTAMirroring> + 8001f378: d01ff06f j 8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f37c: 0035f793 andi a5,a1,3 + 8001f380: 001ad717 auipc a4,0x1ad + 8001f384: ceb70523 sb a1,-790(a4) # 801cc06a <_ZL7CHRMode> + 8001f388: 001ad717 auipc a4,0x1ad + 8001f38c: 34f70823 sb a5,848(a4) # 801cc6d8 + 8001f390: ce9ff06f j 8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f394: 001ad797 auipc a5,0x1ad + 8001f398: c8b78ea3 sb a1,-867(a5) # 801cc031 <_ZL14WRAMMaskEnable+0x1> + 8001f39c: cddff06f j 8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f3a0: 001ad797 auipc a5,0x1ad + 8001f3a4: c8b78823 sb a1,-880(a5) # 801cc030 <_ZL14WRAMMaskEnable> + 8001f3a8: cd1ff06f j 8001f078 <_ZL13Mapper5_writejh+0x6c> + 8001f3ac: 001ad797 auipc a5,0x1ad + 8001f3b0: ceb78923 sb a1,-782(a5) # 801cc09e <_ZL9mmc5vsize> + 8001f3b4: 001ad797 auipc a5,0x1ad + 8001f3b8: ceb7c783 lbu a5,-789(a5) # 801cc09f + 8001f3bc: 04079263 bnez a5,8001f400 <_ZL13Mapper5_writejh+0x3f4> + 8001f3c0: 991ff0ef jal ra,8001ed50 <_ZL8MMC5CHRBv> + 8001f3c4: df5ff06f j 8001f1b8 <_ZL13Mapper5_writejh+0x1ac> + 8001f3c8: 001ad797 auipc a5,0x1ad + 8001f3cc: ccb78aa3 sb a1,-811(a5) # 801cc09d <_ZL9mmc5psize> + 8001f3d0: e11ff06f j 8001f1e0 <_ZL13Mapper5_writejh+0x1d4> + 8001f3d4: 0055b023 sd t0,0(a1) + 8001f3d8: f89ff06f j 8001f360 <_ZL13Mapper5_writejh+0x354> + 8001f3dc: fff7c793 not a5,a5 + 8001f3e0: 00f677b3 and a5,a2,a5 + 8001f3e4: 0ff7f613 andi a2,a5,255 + 8001f3e8: 0075b023 sd t2,0(a1) + 8001f3ec: f75ff06f j 8001f360 <_ZL13Mapper5_writejh+0x354> + 8001f3f0: 00c7e7b3 or a5,a5,a2 + 8001f3f4: 0ff7f613 andi a2,a5,255 + 8001f3f8: 0095b023 sd s1,0(a1) + 8001f3fc: f65ff06f j 8001f360 <_ZL13Mapper5_writejh+0x354> + 8001f400: e78ff0ef jal ra,8001ea78 <_ZL8MMC5CHRAv> + 8001f404: d6dff06f j 8001f170 <_ZL13Mapper5_writejh+0x164> + +000000008001f408 <_Z11Mapper5_ESIv>: + 8001f408: 001aa797 auipc a5,0x1aa + 8001f40c: 8d878793 addi a5,a5,-1832 # 801c8ce0 + 8001f410: ff010113 addi sp,sp,-16 + 8001f414: 03c7a703 lw a4,60(a5) + 8001f418: 00813023 sd s0,0(sp) + 8001f41c: 00000697 auipc a3,0x0 + 8001f420: fec68693 addi a3,a3,-20 # 8001f408 <_Z11Mapper5_ESIv> + 8001f424: 00038417 auipc s0,0x38 + 8001f428: 56440413 addi s0,s0,1380 # 80057988 + 8001f42c: 00113423 sd ra,8(sp) + 8001f430: 02d43023 sd a3,32(s0) + 8001f434: 02070863 beqz a4,8001f464 <_Z11Mapper5_ESIv+0x5c> + 8001f438: 0407a783 lw a5,64(a5) + 8001f43c: 06f05e63 blez a5,8001f4b8 <_Z11Mapper5_ESIv+0xb0> + 8001f440: fffff797 auipc a5,0xfffff + 8001f444: d2078793 addi a5,a5,-736 # 8001e160 <_ZL7Do5SQHQi> + 8001f448: 001ad717 auipc a4,0x1ad + 8001f44c: c0f73423 sd a5,-1016(a4) # 801cc050 <_ZL4sfun> + 8001f450: fffff797 auipc a5,0xfffff + 8001f454: 93478793 addi a5,a5,-1740 # 8001dd84 <_ZL8Do5PCMHQv> + 8001f458: 001ad717 auipc a4,0x1ad + 8001f45c: c0f73423 sd a5,-1016(a4) # 801cc060 <_ZL5psfun> + 8001f460: 0140006f j 8001f474 <_Z11Mapper5_ESIv+0x6c> + 8001f464: 001ad797 auipc a5,0x1ad + 8001f468: be07b623 sd zero,-1044(a5) # 801cc050 <_ZL4sfun> + 8001f46c: 001ad797 auipc a5,0x1ad + 8001f470: be07ba23 sd zero,-1036(a5) # 801cc060 <_ZL5psfun> + 8001f474: 00c00613 li a2,12 + 8001f478: 00000593 li a1,0 + 8001f47c: 000a8517 auipc a0,0xa8 + 8001f480: 18850513 addi a0,a0,392 # 800c7604 <_ZL9MMC5Sound+0x14> + 8001f484: 5a41c0ef jal ra,8003ba28 + 8001f488: 00800613 li a2,8 + 8001f48c: 00000593 li a1,0 + 8001f490: 000a8517 auipc a0,0xa8 + 8001f494: 18050513 addi a0,a0,384 # 800c7610 <_ZL9MMC5Sound+0x20> + 8001f498: 5901c0ef jal ra,8003ba28 + 8001f49c: fffff797 auipc a5,0xfffff + 8001f4a0: e2c78793 addi a5,a5,-468 # 8001e2c8 <_Z10MMC5HiSynci> + 8001f4a4: 00813083 ld ra,8(sp) + 8001f4a8: 00f43c23 sd a5,24(s0) + 8001f4ac: 00013403 ld s0,0(sp) + 8001f4b0: 01010113 addi sp,sp,16 + 8001f4b4: 00008067 ret + 8001f4b8: fffff797 auipc a5,0xfffff + 8001f4bc: b4c78793 addi a5,a5,-1204 # 8001e004 <_ZL5Do5SQi> + 8001f4c0: 001ad717 auipc a4,0x1ad + 8001f4c4: b8f73823 sd a5,-1136(a4) # 801cc050 <_ZL4sfun> + 8001f4c8: fffff797 auipc a5,0xfffff + 8001f4cc: 81478793 addi a5,a5,-2028 # 8001dcdc <_ZL6Do5PCMv> + 8001f4d0: 001ad717 auipc a4,0x1ad + 8001f4d4: b8f73823 sd a5,-1136(a4) # 801cc060 <_ZL5psfun> + 8001f4d8: f9dff06f j 8001f474 <_Z11Mapper5_ESIv+0x6c> + +000000008001f4dc <_ZL12GenMMC5_InitP8CartInfoii>: + 8001f4dc: fd010113 addi sp,sp,-48 + 8001f4e0: 02813023 sd s0,32(sp) + 8001f4e4: 00913c23 sd s1,24(sp) + 8001f4e8: 01213823 sd s2,16(sp) + 8001f4ec: 02113423 sd ra,40(sp) + 8001f4f0: 01313423 sd s3,8(sp) + 8001f4f4: 01413023 sd s4,0(sp) + 8001f4f8: 00058913 mv s2,a1 + 8001f4fc: 00050413 mv s0,a0 + 8001f500: 00060493 mv s1,a2 + 8001f504: 38059e63 bnez a1,8001f8a0 <_ZL12GenMMC5_InitP8CartInfoii+0x3c4> + 8001f508: 40000513 li a0,1024 + 8001f50c: f61f20ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8001f510: 00050793 mv a5,a0 + 8001f514: 001ad997 auipc s3,0x1ad + 8001f518: b5c98993 addi s3,s3,-1188 # 801cc070 <_ZL8MMC5fill> + 8001f51c: 40000513 li a0,1024 + 8001f520: 00f9b023 sd a5,0(s3) + 8001f524: f49f20ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8001f528: 0009b683 ld a3,0(s3) + 8001f52c: 001ad997 auipc s3,0x1ad + 8001f530: b2c98993 addi s3,s3,-1236 # 801cc058 <_ZL5ExRAM> + 8001f534: 00a9b023 sd a0,0(s3) + 8001f538: 3c06c803 lbu a6,960(a3) + 8001f53c: 0006c783 lbu a5,0(a3) + 8001f540: 3bc68593 addi a1,a3,956 + 8001f544: 00387713 andi a4,a6,3 + 8001f548: 00271613 slli a2,a4,0x2 + 8001f54c: 00471e93 slli t4,a4,0x4 + 8001f550: 0087931b slliw t1,a5,0x8 + 8001f554: 01079e1b slliw t3,a5,0x10 + 8001f558: 0007881b sext.w a6,a5 + 8001f55c: 01d66633 or a2,a2,t4 + 8001f560: 01c36333 or t1,t1,t3 + 8001f564: 00e66633 or a2,a2,a4 + 8001f568: 0187979b slliw a5,a5,0x18 + 8001f56c: 00671713 slli a4,a4,0x6 + 8001f570: 00686833 or a6,a6,t1 + 8001f574: 00f86833 or a6,a6,a5 + 8001f578: 00e66633 or a2,a2,a4 + 8001f57c: 0ff67613 andi a2,a2,255 + 8001f580: 0008081b sext.w a6,a6 + 8001f584: 00058793 mv a5,a1 + 8001f588: 0107a023 sw a6,0(a5) + 8001f58c: 00078713 mv a4,a5 + 8001f590: ffc78793 addi a5,a5,-4 + 8001f594: fee69ae3 bne a3,a4,8001f588 <_ZL12GenMMC5_InitP8CartInfoii+0xac> + 8001f598: 0086179b slliw a5,a2,0x8 + 8001f59c: 0106171b slliw a4,a2,0x10 + 8001f5a0: 00e7e7b3 or a5,a5,a4 + 8001f5a4: 00f667b3 or a5,a2,a5 + 8001f5a8: 0186161b slliw a2,a2,0x18 + 8001f5ac: 00c7e7b3 or a5,a5,a2 + 8001f5b0: 0007879b sext.w a5,a5 + 8001f5b4: 3fc68693 addi a3,a3,1020 + 8001f5b8: 00f6a023 sw a5,0(a3) + 8001f5bc: ffc68693 addi a3,a3,-4 + 8001f5c0: fed59ce3 bne a1,a3,8001f5b8 <_ZL12GenMMC5_InitP8CartInfoii+0xdc> + 8001f5c4: 00026697 auipc a3,0x26 + 8001f5c8: 3ec68693 addi a3,a3,1004 # 800459b0 <_ZL6bs_tbl+0x240> + 8001f5cc: 00000613 li a2,0 + 8001f5d0: 40000593 li a1,1024 + 8001f5d4: a3de00ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001f5d8: 00026697 auipc a3,0x26 + 8001f5dc: 3e068693 addi a3,a3,992 # 800459b8 <_ZL6bs_tbl+0x248> + 8001f5e0: 00000613 li a2,0 + 8001f5e4: 00100593 li a1,1 + 8001f5e8: 001ad517 auipc a0,0x1ad + 8001f5ec: 10050513 addi a0,a0,256 # 801cc6e8 + 8001f5f0: a21e00ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001f5f4: 00026697 auipc a3,0x26 + 8001f5f8: 3cc68693 addi a3,a3,972 # 800459c0 <_ZL6bs_tbl+0x250> + 8001f5fc: 00000613 li a2,0 + 8001f600: 00100593 li a1,1 + 8001f604: 001ad517 auipc a0,0x1ad + 8001f608: 0e650513 addi a0,a0,230 # 801cc6ea + 8001f60c: a05e00ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001f610: 00026697 auipc a3,0x26 + 8001f614: 3b868693 addi a3,a3,952 # 800459c8 <_ZL6bs_tbl+0x258> + 8001f618: 00000613 li a2,0 + 8001f61c: 00100593 li a1,1 + 8001f620: 001ad517 auipc a0,0x1ad + 8001f624: 0c950513 addi a0,a0,201 # 801cc6e9 + 8001f628: 9e9e00ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001f62c: 00026697 auipc a3,0x26 + 8001f630: 3a468693 addi a3,a3,932 # 800459d0 <_ZL6bs_tbl+0x260> + 8001f634: 00000613 li a2,0 + 8001f638: 00100593 li a1,1 + 8001f63c: 001ad517 auipc a0,0x1ad + 8001f640: 09450513 addi a0,a0,148 # 801cc6d0 + 8001f644: 9cde00ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001f648: 00000693 li a3,0 + 8001f64c: fff00593 li a1,-1 + 8001f650: 0002d517 auipc a0,0x2d + 8001f654: 47050513 addi a0,a0,1136 # 8004cac0 <_ZL14MMC5_StateRegs> + 8001f658: 00000613 li a2,0 + 8001f65c: 9b5e00ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001f660: 41f9551b sraiw a0,s2,0x1f + 8001f664: 01d5551b srliw a0,a0,0x1d + 8001f668: 0125053b addw a0,a0,s2 + 8001f66c: 4035551b sraiw a0,a0,0x3 + 8001f670: 0ff57813 andi a6,a0,255 + 8001f674: 000a8e97 auipc t4,0xa8 + 8001f678: eece8e93 addi t4,t4,-276 # 800c7560 <_ZL13MMC5WRAMIndex> + 8001f67c: 00281893 slli a7,a6,0x2 + 8001f680: 00026317 auipc t1,0x26 + 8001f684: 35830313 addi t1,t1,856 # 800459d8 <_ZL6bs_tbl+0x268> + 8001f688: 001ad797 auipc a5,0x1ad + 8001f68c: 9aa780a3 sb a0,-1631(a5) # 801cc029 <_ZL12MMC5WRAMsize> + 8001f690: 000e8693 mv a3,t4 + 8001f694: 000e8713 mv a4,t4 + 8001f698: 00000f13 li t5,0 + 8001f69c: 00000793 li a5,0 + 8001f6a0: 00800593 li a1,8 + 8001f6a4: 006888b3 add a7,a7,t1 + 8001f6a8: 00300e13 li t3,3 + 8001f6ac: fff00f93 li t6,-1 + 8001f6b0: 0105e863 bltu a1,a6,8001f6c0 <_ZL12GenMMC5_InitP8CartInfoii+0x1e4> + 8001f6b4: 0008a603 lw a2,0(a7) + 8001f6b8: 00660633 add a2,a2,t1 + 8001f6bc: 00060067 jr a2 + 8001f6c0: 00f70023 sb a5,0(a4) + 8001f6c4: 00100f13 li t5,1 + 8001f6c8: 0017879b addiw a5,a5,1 + 8001f6cc: 00170713 addi a4,a4,1 + 8001f6d0: feb790e3 bne a5,a1,8001f6b0 <_ZL12GenMMC5_InitP8CartInfoii+0x1d4> + 8001f6d4: 160f0c63 beqz t5,8001f84c <_ZL12GenMMC5_InitP8CartInfoii+0x370> + 8001f6d8: 0ff57613 andi a2,a0,255 + 8001f6dc: 000a8717 auipc a4,0xa8 + 8001f6e0: e8470713 addi a4,a4,-380 # 800c7560 <_ZL13MMC5WRAMIndex> + 8001f6e4: 00000793 li a5,0 + 8001f6e8: 08000593 li a1,128 + 8001f6ec: 00f60a63 beq a2,a5,8001f700 <_ZL12GenMMC5_InitP8CartInfoii+0x224> + 8001f6f0: 00f70023 sb a5,0(a4) + 8001f6f4: 0017879b addiw a5,a5,1 + 8001f6f8: 00170713 addi a4,a4,1 + 8001f6fc: feb798e3 bne a5,a1,8001f6ec <_ZL12GenMMC5_InitP8CartInfoii+0x210> + 8001f700: 08057513 andi a0,a0,128 + 8001f704: 02051863 bnez a0,8001f734 <_ZL12GenMMC5_InitP8CartInfoii+0x258> + 8001f708: 00c686b3 add a3,a3,a2 + 8001f70c: 000a8797 auipc a5,0xa8 + 8001f710: e5478793 addi a5,a5,-428 # 800c7560 <_ZL13MMC5WRAMIndex> + 8001f714: 41d6063b subw a2,a2,t4 + 8001f718: 07f00513 li a0,127 + 8001f71c: 0007c583 lbu a1,0(a5) + 8001f720: 00178793 addi a5,a5,1 + 8001f724: 00f6073b addw a4,a2,a5 + 8001f728: 00b68023 sb a1,0(a3) + 8001f72c: 00168693 addi a3,a3,1 + 8001f730: fee556e3 bge a0,a4,8001f71c <_ZL12GenMMC5_InitP8CartInfoii+0x240> + 8001f734: 00000797 auipc a5,0x0 + 8001f738: 7b078793 addi a5,a5,1968 # 8001fee4 <_Z17MMC5_StateRestorei> + 8001f73c: 001ad717 auipc a4,0x1ad + 8001f740: f0f73e23 sd a5,-228(a4) # 801cc658 + 8001f744: 00000797 auipc a5,0x0 + 8001f748: 7a478793 addi a5,a5,1956 # 8001fee8 <_ZL12GenMMC5Resetv> + 8001f74c: 00f43023 sd a5,0(s0) + 8001f750: 02048063 beqz s1,8001f770 <_ZL12GenMMC5_InitP8CartInfoii+0x294> + 8001f754: 05042783 lw a5,80(s0) + 8001f758: 001ad717 auipc a4,0x1ad + 8001f75c: 8f073703 ld a4,-1808(a4) # 801cc048 <_ZL4WRAM> + 8001f760: 00e43c23 sd a4,24(s0) + 8001f764: 12078063 beqz a5,8001f884 <_ZL12GenMMC5_InitP8CartInfoii+0x3a8> + 8001f768: 05c42783 lw a5,92(s0) + 8001f76c: 02f42c23 sw a5,56(s0) + 8001f770: 0009b783 ld a5,0(s3) + 8001f774: 000a3717 auipc a4,0xa3 + 8001f778: d8c72703 lw a4,-628(a4) # 800c2500 + 8001f77c: 001ad697 auipc a3,0x1ad + 8001f780: f6e6a823 sw a4,-144(a3) # 801cc6ec + 8001f784: 001ad717 auipc a4,0x1ad + 8001f788: f4f73e23 sd a5,-164(a4) # 801cc6e0 + 8001f78c: 00100793 li a5,1 + 8001f790: 001ad717 auipc a4,0x1ad + 8001f794: f4f72223 sw a5,-188(a4) # 801cc6d4 + 8001f798: 000a3797 auipc a5,0xa3 + 8001f79c: e687b783 ld a5,-408(a5) # 800c2600 + 8001f7a0: 001ad717 auipc a4,0x1ad + 8001f7a4: f4f73823 sd a5,-176(a4) # 801cc6f0 + 8001f7a8: 001ad797 auipc a5,0x1ad + 8001f7ac: f2078823 sb zero,-208(a5) # 801cc6d8 + 8001f7b0: 001ad797 auipc a5,0x1ad + 8001f7b4: f2078ca3 sb zero,-199(a5) # 801cc6e9 + 8001f7b8: 001ad797 auipc a5,0x1ad + 8001f7bc: f2078923 sb zero,-206(a5) # 801cc6ea + 8001f7c0: 001ad797 auipc a5,0x1ad + 8001f7c4: f2078423 sb zero,-216(a5) # 801cc6e8 + 8001f7c8: c41ff0ef jal ra,8001f408 <_Z11Mapper5_ESIv> + 8001f7cc: 02813083 ld ra,40(sp) + 8001f7d0: 02013403 ld s0,32(sp) + 8001f7d4: fffff797 auipc a5,0xfffff + 8001f7d8: b5478793 addi a5,a5,-1196 # 8001e328 <_Z12mmc5_PPUReadj> + 8001f7dc: 001ad717 auipc a4,0x1ad + 8001f7e0: ecf73a23 sd a5,-300(a4) # 801cc6b0 + 8001f7e4: 00000797 auipc a5,0x0 + 8001f7e8: 11c78793 addi a5,a5,284 # 8001f900 <_ZL13mmc5_PPUWritejh> + 8001f7ec: 001ad717 auipc a4,0x1ad + 8001f7f0: ecf73623 sd a5,-308(a4) # 801cc6b8 + 8001f7f4: 01813483 ld s1,24(sp) + 8001f7f8: 01013903 ld s2,16(sp) + 8001f7fc: 00813983 ld s3,8(sp) + 8001f800: 00013a03 ld s4,0(sp) + 8001f804: 03010113 addi sp,sp,48 + 8001f808: 00008067 ret + 8001f80c: 00f70023 sb a5,0(a4) + 8001f810: eb9ff06f j 8001f6c8 <_ZL12GenMMC5_InitP8CartInfoii+0x1ec> + 8001f814: 00078613 mv a2,a5 + 8001f818: 00fe5463 bge t3,a5,8001f820 <_ZL12GenMMC5_InitP8CartInfoii+0x344> + 8001f81c: 0ff00613 li a2,255 + 8001f820: 00c70023 sb a2,0(a4) + 8001f824: ea5ff06f j 8001f6c8 <_ZL12GenMMC5_InitP8CartInfoii+0x1ec> + 8001f828: 4027d61b sraiw a2,a5,0x2 + 8001f82c: 00c70023 sb a2,0(a4) + 8001f830: e99ff06f j 8001f6c8 <_ZL12GenMMC5_InitP8CartInfoii+0x1ec> + 8001f834: 00fe2633 slt a2,t3,a5 + 8001f838: 40c0063b negw a2,a2 + 8001f83c: 00c70023 sb a2,0(a4) + 8001f840: e89ff06f j 8001f6c8 <_ZL12GenMMC5_InitP8CartInfoii+0x1ec> + 8001f844: 01f70023 sb t6,0(a4) + 8001f848: e81ff06f j 8001f6c8 <_ZL12GenMMC5_InitP8CartInfoii+0x1ec> + 8001f84c: 000a8717 auipc a4,0xa8 + 8001f850: d1c70713 addi a4,a4,-740 # 800c7568 <_ZL13MMC5WRAMIndex+0x8> + 8001f854: 00800613 li a2,8 + 8001f858: 000a8517 auipc a0,0xa8 + 8001f85c: d8850513 addi a0,a0,-632 # 800c75e0 <_ZL9CHRBanksA> + 8001f860: 40e6063b subw a2,a2,a4 + 8001f864: 00e607bb addw a5,a2,a4 + 8001f868: 0077f793 andi a5,a5,7 + 8001f86c: 00f687b3 add a5,a3,a5 + 8001f870: 0007c783 lbu a5,0(a5) + 8001f874: 00170713 addi a4,a4,1 + 8001f878: fef70fa3 sb a5,-1(a4) + 8001f87c: fea714e3 bne a4,a0,8001f864 <_ZL12GenMMC5_InitP8CartInfoii+0x388> + 8001f880: eb5ff06f j 8001f734 <_ZL12GenMMC5_InitP8CartInfoii+0x258> + 8001f884: 01000793 li a5,16 + 8001f888: 0727d063 bge a5,s2,8001f8e8 <_ZL12GenMMC5_InitP8CartInfoii+0x40c> + 8001f88c: 04000793 li a5,64 + 8001f890: 06f90263 beq s2,a5,8001f8f4 <_ZL12GenMMC5_InitP8CartInfoii+0x418> + 8001f894: 000087b7 lui a5,0x8 + 8001f898: 02f42c23 sw a5,56(s0) + 8001f89c: ed5ff06f j 8001f770 <_ZL12GenMMC5_InitP8CartInfoii+0x294> + 8001f8a0: 00a5999b slliw s3,a1,0xa + 8001f8a4: 00098513 mv a0,s3 + 8001f8a8: bc5f20ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8001f8ac: 00050593 mv a1,a0 + 8001f8b0: 001aca17 auipc s4,0x1ac + 8001f8b4: 798a0a13 addi s4,s4,1944 # 801cc048 <_ZL4WRAM> + 8001f8b8: 00098613 mv a2,s3 + 8001f8bc: 00100693 li a3,1 + 8001f8c0: 01000513 li a0,16 + 8001f8c4: 00ba3023 sd a1,0(s4) + 8001f8c8: c2df00ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8001f8cc: 000a3503 ld a0,0(s4) + 8001f8d0: 00026697 auipc a3,0x26 + 8001f8d4: a5868693 addi a3,a3,-1448 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 8001f8d8: 00000613 li a2,0 + 8001f8dc: 00098593 mv a1,s3 + 8001f8e0: f30e00ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8001f8e4: c25ff06f j 8001f508 <_ZL12GenMMC5_InitP8CartInfoii+0x2c> + 8001f8e8: 000027b7 lui a5,0x2 + 8001f8ec: 02f42c23 sw a5,56(s0) + 8001f8f0: e81ff06f j 8001f770 <_ZL12GenMMC5_InitP8CartInfoii+0x294> + 8001f8f4: 000107b7 lui a5,0x10 + 8001f8f8: 02f42c23 sw a5,56(s0) + 8001f8fc: e75ff06f j 8001f770 <_ZL12GenMMC5_InitP8CartInfoii+0x294> + +000000008001f900 <_ZL13mmc5_PPUWritejh>: + 8001f900: 000047b7 lui a5,0x4 + 8001f904: eff78793 addi a5,a5,-257 # 3eff <_entry_offset+0x3eff> + 8001f908: 04a7f263 bgeu a5,a0,8001f94c <_ZL13mmc5_PPUWritejh+0x4c> + 8001f90c: 00357793 andi a5,a0,3 + 8001f910: 03f5f593 andi a1,a1,63 + 8001f914: 0c079263 bnez a5,8001f9d8 <_ZL13mmc5_PPUWritejh+0xd8> + 8001f918: 00c57793 andi a5,a0,12 + 8001f91c: 0c079a63 bnez a5,8001f9f0 <_ZL13mmc5_PPUWritejh+0xf0> + 8001f920: 001aa797 auipc a5,0x1aa + 8001f924: 40878793 addi a5,a5,1032 # 801c9d28 + 8001f928: 00b78623 sb a1,12(a5) + 8001f92c: 00b78423 sb a1,8(a5) + 8001f930: 00b78223 sb a1,4(a5) + 8001f934: 00b78023 sb a1,0(a5) + 8001f938: 00b78e23 sb a1,28(a5) + 8001f93c: 00b78c23 sb a1,24(a5) + 8001f940: 00b78a23 sb a1,20(a5) + 8001f944: 00b78823 sb a1,16(a5) + 8001f948: 00008067 ret + 8001f94c: 000026b7 lui a3,0x2 + 8001f950: 00a5579b srliw a5,a0,0xa + 8001f954: 00a5561b srliw a2,a0,0xa + 8001f958: 04d57263 bgeu a0,a3,8001f99c <_ZL13mmc5_PPUWritejh+0x9c> + 8001f95c: 001ad717 auipc a4,0x1ad + 8001f960: da874703 lbu a4,-600(a4) # 801cc704 + 8001f964: 40c7573b sraw a4,a4,a2 + 8001f968: 00177713 andi a4,a4,1 + 8001f96c: 06070463 beqz a4,8001f9d4 <_ZL13mmc5_PPUWritejh+0xd4> + 8001f970: 02079793 slli a5,a5,0x20 + 8001f974: 01d7d793 srli a5,a5,0x1d + 8001f978: 000a3717 auipc a4,0xa3 + 8001f97c: 3c870713 addi a4,a4,968 # 800c2d40 + 8001f980: 00f707b3 add a5,a4,a5 + 8001f984: 0007b783 ld a5,0(a5) + 8001f988: 02051513 slli a0,a0,0x20 + 8001f98c: 02055513 srli a0,a0,0x20 + 8001f990: 00a78533 add a0,a5,a0 + 8001f994: 00b50023 sb a1,0(a0) + 8001f998: 00008067 ret + 8001f99c: 0037f793 andi a5,a5,3 + 8001f9a0: 001ad717 auipc a4,0x1ad + 8001f9a4: d6674703 lbu a4,-666(a4) # 801cc706 + 8001f9a8: 40f7573b sraw a4,a4,a5 + 8001f9ac: 00177713 andi a4,a4,1 + 8001f9b0: 02070263 beqz a4,8001f9d4 <_ZL13mmc5_PPUWritejh+0xd4> + 8001f9b4: 00379793 slli a5,a5,0x3 + 8001f9b8: 001ac717 auipc a4,0x1ac + 8001f9bc: 10870713 addi a4,a4,264 # 801cbac0 + 8001f9c0: 00f707b3 add a5,a4,a5 + 8001f9c4: 0007b783 ld a5,0(a5) + 8001f9c8: 3ff57513 andi a0,a0,1023 + 8001f9cc: 00a78533 add a0,a5,a0 + 8001f9d0: 00b50023 sb a1,0(a0) + 8001f9d4: 00008067 ret + 8001f9d8: 01f57513 andi a0,a0,31 + 8001f9dc: 001aa797 auipc a5,0x1aa + 8001f9e0: 34c78793 addi a5,a5,844 # 801c9d28 + 8001f9e4: 00a78533 add a0,a5,a0 + 8001f9e8: 00b50023 sb a1,0(a0) + 8001f9ec: 00008067 ret + 8001f9f0: 0025579b srliw a5,a0,0x2 + 8001f9f4: 0037f793 andi a5,a5,3 + 8001f9f8: fff7879b addiw a5,a5,-1 + 8001f9fc: 02079793 slli a5,a5,0x20 + 8001fa00: 0207d793 srli a5,a5,0x20 + 8001fa04: 001ad717 auipc a4,0x1ad + 8001fa08: d1c70713 addi a4,a4,-740 # 801cc720 + 8001fa0c: 00f707b3 add a5,a4,a5 + 8001fa10: 00b78023 sb a1,0(a5) + 8001fa14: 00008067 ret + +000000008001fa18 <_ZL15MMC5_ReadROMRAMj>: + 8001fa18: ffffa7b7 lui a5,0xffffa + 8001fa1c: 00a787bb addw a5,a5,a0 + 8001fa20: 00d7d79b srliw a5,a5,0xd + 8001fa24: 001ac717 auipc a4,0x1ac + 8001fa28: 67470713 addi a4,a4,1652 # 801cc098 <_ZL9MMC5MemIn> + 8001fa2c: 00f707b3 add a5,a4,a5 + 8001fa30: 0007c783 lbu a5,0(a5) # ffffffffffffa000 <_end+0xffffffff7fe25000> + 8001fa34: 02078863 beqz a5,8001fa64 <_ZL15MMC5_ReadROMRAMj+0x4c> + 8001fa38: 00b5579b srliw a5,a0,0xb + 8001fa3c: 00379713 slli a4,a5,0x3 + 8001fa40: 000a3797 auipc a5,0xa3 + 8001fa44: 20078793 addi a5,a5,512 # 800c2c40 + 8001fa48: 00e787b3 add a5,a5,a4 + 8001fa4c: 0007b783 ld a5,0(a5) + 8001fa50: 02051513 slli a0,a0,0x20 + 8001fa54: 02055513 srli a0,a0,0x20 + 8001fa58: 00a78533 add a0,a5,a0 + 8001fa5c: 00054503 lbu a0,0(a0) + 8001fa60: 00008067 ret + 8001fa64: 00038517 auipc a0,0x38 + 8001fa68: e0454503 lbu a0,-508(a0) # 80057868 + 8001fa6c: 00008067 ret + +000000008001fa70 <_ZL16MMC5_WriteROMRAMjh>: + 8001fa70: 000087b7 lui a5,0x8 + 8001fa74: 02f56263 bltu a0,a5,8001fa98 <_ZL16MMC5_WriteROMRAMjh+0x28> + 8001fa78: ffff87b7 lui a5,0xffff8 + 8001fa7c: 00a787bb addw a5,a5,a0 + 8001fa80: 00d7d79b srliw a5,a5,0xd + 8001fa84: 001ac717 auipc a4,0x1ac + 8001fa88: 5b470713 addi a4,a4,1460 # 801cc038 <_ZL16MMC5ROMWrProtect> + 8001fa8c: 00f707b3 add a5,a4,a5 + 8001fa90: 0007c783 lbu a5,0(a5) # ffffffffffff8000 <_end+0xffffffff7fe23000> + 8001fa94: 04079663 bnez a5,8001fae0 <_ZL16MMC5_WriteROMRAMjh+0x70> + 8001fa98: ffffa7b7 lui a5,0xffffa + 8001fa9c: 00a787bb addw a5,a5,a0 + 8001faa0: 00d7d79b srliw a5,a5,0xd + 8001faa4: 001ac717 auipc a4,0x1ac + 8001faa8: 5f470713 addi a4,a4,1524 # 801cc098 <_ZL9MMC5MemIn> + 8001faac: 00f707b3 add a5,a4,a5 + 8001fab0: 0007c783 lbu a5,0(a5) # ffffffffffffa000 <_end+0xffffffff7fe25000> + 8001fab4: 02078663 beqz a5,8001fae0 <_ZL16MMC5_WriteROMRAMjh+0x70> + 8001fab8: 001ac797 auipc a5,0x1ac + 8001fabc: 57878793 addi a5,a5,1400 # 801cc030 <_ZL14WRAMMaskEnable> + 8001fac0: 0017c703 lbu a4,1(a5) + 8001fac4: 0007c783 lbu a5,0(a5) + 8001fac8: 00600693 li a3,6 + 8001facc: 0027171b slliw a4,a4,0x2 + 8001fad0: 00c77713 andi a4,a4,12 + 8001fad4: 0037f793 andi a5,a5,3 + 8001fad8: 00e7e7b3 or a5,a5,a4 + 8001fadc: 00d78463 beq a5,a3,8001fae4 <_ZL16MMC5_WriteROMRAMjh+0x74> + 8001fae0: 00008067 ret + 8001fae4: 00b5579b srliw a5,a0,0xb + 8001fae8: 00379713 slli a4,a5,0x3 + 8001faec: 000a3797 auipc a5,0xa3 + 8001faf0: 15478793 addi a5,a5,340 # 800c2c40 + 8001faf4: 00e787b3 add a5,a5,a4 + 8001faf8: 0007b783 ld a5,0(a5) + 8001fafc: 02051513 slli a0,a0,0x20 + 8001fb00: 02055513 srli a0,a0,0x20 + 8001fb04: 00a78533 add a0,a5,a0 + 8001fb08: 00b50023 sb a1,0(a0) + 8001fb0c: 00008067 ret + +000000008001fb10 <_ZL9MMC5_readj>: + 8001fb10: ff010113 addi sp,sp,-16 + 8001fb14: 000057b7 lui a5,0x5 + 8001fb18: 00113423 sd ra,8(sp) + 8001fb1c: 20578713 addi a4,a5,517 # 5205 <_entry_offset+0x5205> + 8001fb20: 02e50463 beq a0,a4,8001fb48 <_ZL9MMC5_readj+0x38> + 8001fb24: 20678713 addi a4,a5,518 + 8001fb28: 06e50663 beq a0,a4,8001fb94 <_ZL9MMC5_readj+0x84> + 8001fb2c: 20478793 addi a5,a5,516 + 8001fb30: 02f50e63 beq a0,a5,8001fb6c <_ZL9MMC5_readj+0x5c> + 8001fb34: 00813083 ld ra,8(sp) + 8001fb38: 00038517 auipc a0,0x38 + 8001fb3c: d3054503 lbu a0,-720(a0) # 80057868 + 8001fb40: 01010113 addi sp,sp,16 + 8001fb44: 00008067 ret + 8001fb48: 001ac797 auipc a5,0x1ac + 8001fb4c: 4f878793 addi a5,a5,1272 # 801cc040 <_ZL3mul> + 8001fb50: 0017c583 lbu a1,1(a5) + 8001fb54: 0007c503 lbu a0,0(a5) + 8001fb58: 2641a0ef jal ra,80039dbc <__muldi3> + 8001fb5c: 00813083 ld ra,8(sp) + 8001fb60: 0ff57513 andi a0,a0,255 + 8001fb64: 01010113 addi sp,sp,16 + 8001fb68: 00008067 ret + 8001fb6c: 00100513 li a0,1 + 8001fb70: 9e0e10ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8001fb74: 001ac797 auipc a5,0x1ac + 8001fb78: 4f778793 addi a5,a5,1271 # 801cc06b <_ZL8MMC5IRQR> + 8001fb7c: 0007c503 lbu a0,0(a5) + 8001fb80: 04057713 andi a4,a0,64 + 8001fb84: 00e78023 sb a4,0(a5) + 8001fb88: 00813083 ld ra,8(sp) + 8001fb8c: 01010113 addi sp,sp,16 + 8001fb90: 00008067 ret + 8001fb94: 001ac797 auipc a5,0x1ac + 8001fb98: 4ac78793 addi a5,a5,1196 # 801cc040 <_ZL3mul> + 8001fb9c: 0017c583 lbu a1,1(a5) + 8001fba0: 0007c503 lbu a0,0(a5) + 8001fba4: 2181a0ef jal ra,80039dbc <__muldi3> + 8001fba8: 00813083 ld ra,8(sp) + 8001fbac: 4085551b sraiw a0,a0,0x8 + 8001fbb0: 0ff57513 andi a0,a0,255 + 8001fbb4: 01010113 addi sp,sp,16 + 8001fbb8: 00008067 ret + +000000008001fbbc <_Z13MMC5BGVRAMADRj>: + 8001fbbc: 001ad697 auipc a3,0x1ad + 8001fbc0: b4468693 addi a3,a3,-1212 # 801cc700 + 8001fbc4: 0006c783 lbu a5,0(a3) + 8001fbc8: 001ad617 auipc a2,0x1ad + 8001fbcc: bcc62603 lw a2,-1076(a2) # 801cc794 + 8001fbd0: 0207f713 andi a4,a5,32 + 8001fbd4: 00a5579b srliw a5,a0,0xa + 8001fbd8: 02051513 slli a0,a0,0x20 + 8001fbdc: 02055513 srli a0,a0,0x20 + 8001fbe0: 04060a63 beqz a2,8001fc34 <_Z13MMC5BGVRAMADRj+0x78> + 8001fbe4: 06070c63 beqz a4,8001fc5c <_Z13MMC5BGVRAMADRj+0xa0> + 8001fbe8: 0016c703 lbu a4,1(a3) + 8001fbec: 00200613 li a2,2 + 8001fbf0: 001ad697 auipc a3,0x1ad + 8001fbf4: ba86a683 lw a3,-1112(a3) # 801cc798 + 8001fbf8: 01877713 andi a4,a4,24 + 8001fbfc: 04c68e63 beq a3,a2,8001fc58 <_Z13MMC5BGVRAMADRj+0x9c> + 8001fc00: 00100613 li a2,1 + 8001fc04: 02c68863 beq a3,a2,8001fc34 <_Z13MMC5BGVRAMADRj+0x78> + 8001fc08: 02079793 slli a5,a5,0x20 + 8001fc0c: 001ac717 auipc a4,0x1ac + 8001fc10: 49374703 lbu a4,1171(a4) # 801cc09f + 8001fc14: 01d7d793 srli a5,a5,0x1d + 8001fc18: 02071463 bnez a4,8001fc40 <_Z13MMC5BGVRAMADRj+0x84> + 8001fc1c: 000a3717 auipc a4,0xa3 + 8001fc20: bc470713 addi a4,a4,-1084 # 800c27e0 + 8001fc24: 00f707b3 add a5,a4,a5 + 8001fc28: 0007b783 ld a5,0(a5) + 8001fc2c: 00a78533 add a0,a5,a0 + 8001fc30: 00008067 ret + 8001fc34: fc070ae3 beqz a4,8001fc08 <_Z13MMC5BGVRAMADRj+0x4c> + 8001fc38: 02079793 slli a5,a5,0x20 + 8001fc3c: 01d7d793 srli a5,a5,0x1d + 8001fc40: 000a3717 auipc a4,0xa3 + 8001fc44: b6070713 addi a4,a4,-1184 # 800c27a0 + 8001fc48: 00f707b3 add a5,a4,a5 + 8001fc4c: 0007b783 ld a5,0(a5) + 8001fc50: 00a78533 add a0,a5,a0 + 8001fc54: 00008067 ret + 8001fc58: fa0708e3 beqz a4,8001fc08 <_Z13MMC5BGVRAMADRj+0x4c> + 8001fc5c: 02079793 slli a5,a5,0x20 + 8001fc60: 000a3717 auipc a4,0xa3 + 8001fc64: b8070713 addi a4,a4,-1152 # 800c27e0 + 8001fc68: 01d7d793 srli a5,a5,0x1d + 8001fc6c: 00f707b3 add a5,a4,a5 + 8001fc70: 0007b783 ld a5,0(a5) + 8001fc74: 00a78533 add a0,a5,a0 + 8001fc78: 00008067 ret + +000000008001fc7c <_Z18DetectMMC5WRAMSizej>: + 8001fc7c: 0002d597 auipc a1,0x2d + 8001fc80: d7458593 addi a1,a1,-652 # 8004c9f0 + 8001fc84: 00058713 mv a4,a1 + 8001fc88: 00000793 li a5,0 + 8001fc8c: 01a00613 li a2,26 + 8001fc90: 00c0006f j 8001fc9c <_Z18DetectMMC5WRAMSizej+0x20> + 8001fc94: 0017879b addiw a5,a5,1 + 8001fc98: 06c78463 beq a5,a2,8001fd00 <_Z18DetectMMC5WRAMSizej+0x84> + 8001fc9c: 00072683 lw a3,0(a4) + 8001fca0: 00870713 addi a4,a4,8 + 8001fca4: fea698e3 bne a3,a0,8001fc94 <_Z18DetectMMC5WRAMSizej+0x18> + 8001fca8: ff010113 addi sp,sp,-16 + 8001fcac: 00379793 slli a5,a5,0x3 + 8001fcb0: 00813023 sd s0,0(sp) + 8001fcb4: 00113423 sd ra,8(sp) + 8001fcb8: 00f58433 add s0,a1,a5 + 8001fcbc: 00444503 lbu a0,4(s0) + 8001fcc0: 00100793 li a5,1 + 8001fcc4: 00a7ec63 bltu a5,a0,8001fcdc <_Z18DetectMMC5WRAMSizej+0x60> + 8001fcc8: 00813083 ld ra,8(sp) + 8001fccc: 00013403 ld s0,0(sp) + 8001fcd0: 00351513 slli a0,a0,0x3 + 8001fcd4: 01010113 addi sp,sp,16 + 8001fcd8: 00008067 ret + 8001fcdc: 00026517 auipc a0,0x26 + 8001fce0: d2450513 addi a0,a0,-732 # 80045a00 <_ZL6bs_tbl+0x290> + 8001fce4: 0651b0ef jal ra,8003b548 + 8001fce8: 00444503 lbu a0,4(s0) + 8001fcec: 00813083 ld ra,8(sp) + 8001fcf0: 00013403 ld s0,0(sp) + 8001fcf4: 00351513 slli a0,a0,0x3 + 8001fcf8: 01010113 addi sp,sp,16 + 8001fcfc: 00008067 ret + 8001fd00: 04000513 li a0,64 + 8001fd04: 00008067 ret + +000000008001fd08 <_Z9MMC5Syncov>: + 8001fd08: fe010113 addi sp,sp,-32 + 8001fd0c: 00113c23 sd ra,24(sp) + 8001fd10: 00813823 sd s0,16(sp) + 8001fd14: 00913423 sd s1,8(sp) + 8001fd18: a25fe0ef jal ra,8001e73c <_ZL7MMC5PRGv> + 8001fd1c: 001ac417 auipc s0,0x1ac + 8001fd20: 35440413 addi s0,s0,852 # 801cc070 <_ZL8MMC5fill> + 8001fd24: 001adf97 auipc t6,0x1ad + 8001fd28: 9e2f8f93 addi t6,t6,-1566 # 801cc706 + 8001fd2c: 000fc683 lbu a3,0(t6) + 8001fd30: 00043483 ld s1,0(s0) + 8001fd34: 001ace97 auipc t4,0x1ac + 8001fd38: 2f6ece83 lbu t4,758(t4) # 801cc02a <_ZL12NTAMirroring> + 8001fd3c: 001ac097 auipc ra,0x1ac + 8001fd40: 31c0b083 ld ra,796(ra) # 801cc058 <_ZL5ExRAM> + 8001fd44: 001ac597 auipc a1,0x1ac + 8001fd48: d7c58593 addi a1,a1,-644 # 801cbac0 + 8001fd4c: 00000613 li a2,0 + 8001fd50: 00100e13 li t3,1 + 8001fd54: 00200313 li t1,2 + 8001fd58: 00300893 li a7,3 + 8001fd5c: 00100813 li a6,1 + 8001fd60: 001aa397 auipc t2,0x1aa + 8001fd64: bc838393 addi t2,t2,-1080 # 801c9928 + 8001fd68: 001a9297 auipc t0,0x1a9 + 8001fd6c: 7c028293 addi t0,t0,1984 # 801c9528 + 8001fd70: 00400513 li a0,4 + 8001fd74: 0016171b slliw a4,a2,0x1 + 8001fd78: 40eed73b sraw a4,t4,a4 + 8001fd7c: 00ce17bb sllw a5,t3,a2 + 8001fd80: 0186969b slliw a3,a3,0x18 + 8001fd84: 0187979b slliw a5,a5,0x18 + 8001fd88: 00377713 andi a4,a4,3 + 8001fd8c: 4186d69b sraiw a3,a3,0x18 + 8001fd90: 4187d79b sraiw a5,a5,0x18 + 8001fd94: 12670a63 beq a4,t1,8001fec8 <_Z9MMC5Syncov+0x1c0> + 8001fd98: 00d7ef33 or t5,a5,a3 + 8001fd9c: 11170c63 beq a4,a7,8001feb4 <_Z9MMC5Syncov+0x1ac> + 8001fda0: 11070263 beq a4,a6,8001fea4 <_Z9MMC5Syncov+0x19c> + 8001fda4: 0fff7693 andi a3,t5,255 + 8001fda8: 0055b023 sd t0,0(a1) + 8001fdac: 0016061b addiw a2,a2,1 + 8001fdb0: 00858593 addi a1,a1,8 + 8001fdb4: fca610e3 bne a2,a0,8001fd74 <_Z9MMC5Syncov+0x6c> + 8001fdb8: 001ac597 auipc a1,0x1ac + 8001fdbc: 2c45c583 lbu a1,708(a1) # 801cc07c <_ZL8WRAMPage> + 8001fdc0: 07f5f593 andi a1,a1,127 + 8001fdc4: 00006537 lui a0,0x6 + 8001fdc8: 00df8023 sb a3,0(t6) + 8001fdcc: 89dfe0ef jal ra,8001e668 <_ZL8MMC5WRAMjj> + 8001fdd0: 001ac797 auipc a5,0x1ac + 8001fdd4: 2cf7c783 lbu a5,719(a5) # 801cc09f + 8001fdd8: 10079063 bnez a5,8001fed8 <_Z9MMC5Syncov+0x1d0> + 8001fddc: f75fe0ef jal ra,8001ed50 <_ZL8MMC5CHRBv> + 8001fde0: c99fe0ef jal ra,8001ea78 <_ZL8MMC5CHRAv> + 8001fde4: 001ac617 auipc a2,0x1ac + 8001fde8: 28564603 lbu a2,645(a2) # 801cc069 <_ZL6NTFill> + 8001fdec: 0106159b slliw a1,a2,0x10 + 8001fdf0: 0086171b slliw a4,a2,0x8 + 8001fdf4: 00043683 ld a3,0(s0) + 8001fdf8: 00060793 mv a5,a2 + 8001fdfc: 00b76733 or a4,a4,a1 + 8001fe00: 0187979b slliw a5,a5,0x18 + 8001fe04: 00e66633 or a2,a2,a4 + 8001fe08: 00f66633 or a2,a2,a5 + 8001fe0c: 3bc68593 addi a1,a3,956 + 8001fe10: 0006061b sext.w a2,a2 + 8001fe14: 00058793 mv a5,a1 + 8001fe18: 00c7a023 sw a2,0(a5) + 8001fe1c: 00078713 mv a4,a5 + 8001fe20: ffc78793 addi a5,a5,-4 + 8001fe24: fee69ae3 bne a3,a4,8001fe18 <_Z9MMC5Syncov+0x110> + 8001fe28: 001ac717 auipc a4,0x1ac + 8001fe2c: 24074703 lbu a4,576(a4) # 801cc068 <_ZL6ATFill> + 8001fe30: 00471613 slli a2,a4,0x4 + 8001fe34: 00271793 slli a5,a4,0x2 + 8001fe38: 00c7e7b3 or a5,a5,a2 + 8001fe3c: 00e7e7b3 or a5,a5,a4 + 8001fe40: 00671713 slli a4,a4,0x6 + 8001fe44: 00e7e7b3 or a5,a5,a4 + 8001fe48: 0ff7f713 andi a4,a5,255 + 8001fe4c: 0087161b slliw a2,a4,0x8 + 8001fe50: 0107151b slliw a0,a4,0x10 + 8001fe54: 0ff7f793 andi a5,a5,255 + 8001fe58: 00a66633 or a2,a2,a0 + 8001fe5c: 00c7e7b3 or a5,a5,a2 + 8001fe60: 0187171b slliw a4,a4,0x18 + 8001fe64: 00e7e7b3 or a5,a5,a4 + 8001fe68: 0007879b sext.w a5,a5 + 8001fe6c: 3fc68693 addi a3,a3,1020 + 8001fe70: 00f6a023 sw a5,0(a3) + 8001fe74: ffc68693 addi a3,a3,-4 + 8001fe78: fed59ce3 bne a1,a3,8001fe70 <_Z9MMC5Syncov+0x168> + 8001fe7c: 01813083 ld ra,24(sp) + 8001fe80: 01013403 ld s0,16(sp) + 8001fe84: 001ac797 auipc a5,0x1ac + 8001fe88: 1e67c783 lbu a5,486(a5) # 801cc06a <_ZL7CHRMode> + 8001fe8c: 0037f793 andi a5,a5,3 + 8001fe90: 001ad717 auipc a4,0x1ad + 8001fe94: 84f70423 sb a5,-1976(a4) # 801cc6d8 + 8001fe98: 00813483 ld s1,8(sp) + 8001fe9c: 02010113 addi sp,sp,32 + 8001fea0: 00008067 ret + 8001fea4: 00d7e7b3 or a5,a5,a3 + 8001fea8: 0ff7f693 andi a3,a5,255 + 8001feac: 0075b023 sd t2,0(a1) + 8001feb0: efdff06f j 8001fdac <_Z9MMC5Syncov+0xa4> + 8001feb4: fff7c793 not a5,a5 + 8001feb8: 00f6f7b3 and a5,a3,a5 + 8001febc: 0095b023 sd s1,0(a1) + 8001fec0: 0ff7f693 andi a3,a5,255 + 8001fec4: ee9ff06f j 8001fdac <_Z9MMC5Syncov+0xa4> + 8001fec8: 00d7e7b3 or a5,a5,a3 + 8001fecc: 0ff7f693 andi a3,a5,255 + 8001fed0: 0015b023 sd ra,0(a1) + 8001fed4: ed9ff06f j 8001fdac <_Z9MMC5Syncov+0xa4> + 8001fed8: ba1fe0ef jal ra,8001ea78 <_ZL8MMC5CHRAv> + 8001fedc: e75fe0ef jal ra,8001ed50 <_ZL8MMC5CHRBv> + 8001fee0: f05ff06f j 8001fde4 <_Z9MMC5Syncov+0xdc> + +000000008001fee4 <_Z17MMC5_StateRestorei>: + 8001fee4: e25ff06f j 8001fd08 <_Z9MMC5Syncov> + +000000008001fee8 <_ZL12GenMMC5Resetv>: + 8001fee8: fe010113 addi sp,sp,-32 + 8001feec: fff00713 li a4,-1 + 8001fef0: 00113c23 sd ra,24(sp) + 8001fef4: 00813823 sd s0,16(sp) + 8001fef8: 00913423 sd s1,8(sp) + 8001fefc: 000a7597 auipc a1,0xa7 + 8001ff00: 6e458593 addi a1,a1,1764 # 800c75e0 <_ZL9CHRBanksA> + 8001ff04: 00e5b023 sd a4,0(a1) + 8001ff08: 00e5b423 sd a4,8(a1) + 8001ff0c: fff00793 li a5,-1 + 8001ff10: 00300693 li a3,3 + 8001ff14: fff00613 li a2,-1 + 8001ff18: 001ac597 auipc a1,0x1ac + 8001ff1c: 16e5b823 sd a4,368(a1) # 801cc088 <_ZL9CHRBanksB> + 8001ff20: 00006437 lui s0,0x6 + 8001ff24: 001ac717 auipc a4,0x1ac + 8001ff28: 16d70d23 sb a3,378(a4) # 801cc09e <_ZL9mmc5vsize> + 8001ff2c: 001ac717 auipc a4,0x1ac + 8001ff30: 16d708a3 sb a3,369(a4) # 801cc09d <_ZL9mmc5psize> + 8001ff34: 001ac717 auipc a4,0x1ac + 8001ff38: 12f70a23 sb a5,308(a4) # 801cc068 <_ZL6ATFill> + 8001ff3c: 001ac717 auipc a4,0x1ac + 8001ff40: 12f706a3 sb a5,301(a4) # 801cc069 <_ZL6NTFill> + 8001ff44: 001ac717 auipc a4,0x1ac + 8001ff48: 0ef70323 sb a5,230(a4) # 801cc02a <_ZL12NTAMirroring> + 8001ff4c: 000044b7 lui s1,0x4 + 8001ff50: 001ac517 auipc a0,0x1ac + 8001ff54: 12c52423 sw a2,296(a0) # 801cc078 <_ZL8PRGBanks> + 8001ff58: 001ac717 auipc a4,0x1ac + 8001ff5c: 0cc71c23 sh a2,216(a4) # 801cc030 <_ZL14WRAMMaskEnable> + 8001ff60: 001ac717 auipc a4,0x1ac + 8001ff64: 10070523 sb zero,266(a4) # 801cc06a <_ZL7CHRMode> + 8001ff68: da1ff0ef jal ra,8001fd08 <_Z9MMC5Syncov> + 8001ff6c: bff40593 addi a1,s0,-1025 # 5bff <_entry_offset+0x5bff> + 8001ff70: 02048513 addi a0,s1,32 # 4020 <_entry_offset+0x4020> + 8001ff74: fffff617 auipc a2,0xfffff + 8001ff78: 09860613 addi a2,a2,152 # 8001f00c <_ZL13Mapper5_writejh> + 8001ff7c: 3ad130ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001ff80: bff40593 addi a1,s0,-1025 + 8001ff84: 02048513 addi a0,s1,32 + 8001ff88: 00000617 auipc a2,0x0 + 8001ff8c: b8860613 addi a2,a2,-1144 # 8001fb10 <_ZL9MMC5_readj> + 8001ff90: 28d130ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001ff94: fff40593 addi a1,s0,-1 + 8001ff98: c0040513 addi a0,s0,-1024 + 8001ff9c: ffffe617 auipc a2,0xffffe + 8001ffa0: d0060613 addi a2,a2,-768 # 8001dc9c <_ZL12MMC5_ExRAMWrjh> + 8001ffa4: 385130ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001ffa8: fff40593 addi a1,s0,-1 + 8001ffac: c0040513 addi a0,s0,-1024 + 8001ffb0: ffffe617 auipc a2,0xffffe + 8001ffb4: d1460613 addi a2,a2,-748 # 8001dcc4 <_ZL12MMC5_ExRAMRdj> + 8001ffb8: 265130ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001ffbc: 000104b7 lui s1,0x10 + 8001ffc0: fff48593 addi a1,s1,-1 # ffff <_entry_offset+0xffff> + 8001ffc4: 00000617 auipc a2,0x0 + 8001ffc8: aac60613 addi a2,a2,-1364 # 8001fa70 <_ZL16MMC5_WriteROMRAMjh> + 8001ffcc: 00006537 lui a0,0x6 + 8001ffd0: 359130ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8001ffd4: fff48593 addi a1,s1,-1 + 8001ffd8: 00000617 auipc a2,0x0 + 8001ffdc: a4060613 addi a2,a2,-1472 # 8001fa18 <_ZL15MMC5_ReadROMRAMj> + 8001ffe0: 00006537 lui a0,0x6 + 8001ffe4: 000054b7 lui s1,0x5 + 8001ffe8: 235130ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8001ffec: 01548593 addi a1,s1,21 # 5015 <_entry_offset+0x5015> + 8001fff0: ffffe617 auipc a2,0xffffe + 8001fff4: e2c60613 addi a2,a2,-468 # 8001de1c <_ZL10Mapper5_SWjh> + 8001fff8: 00005537 lui a0,0x5 + 8001fffc: 32d130ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80020000: 20648593 addi a1,s1,518 + 80020004: 20548513 addi a0,s1,517 + 80020008: fffff617 auipc a2,0xfffff + 8002000c: 00460613 addi a2,a2,4 # 8001f00c <_ZL13Mapper5_writejh> + 80020010: 319130ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80020014: 20648593 addi a1,s1,518 + 80020018: 20548513 addi a0,s1,517 + 8002001c: 00000617 auipc a2,0x0 + 80020020: af460613 addi a2,a2,-1292 # 8001fb10 <_ZL9MMC5_readj> + 80020024: 1f9130ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80020028: c0040593 addi a1,s0,-1024 + 8002002c: 01013403 ld s0,16(sp) + 80020030: 01813083 ld ra,24(sp) + 80020034: 00813483 ld s1,8(sp) + 80020038: 001ac617 auipc a2,0x1ac + 8002003c: 02063603 ld a2,32(a2) # 801cc058 <_ZL5ExRAM> + 80020040: 00100513 li a0,1 + 80020044: 02010113 addi sp,sp,32 + 80020048: fcddf06f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +000000008002004c <_Z7MMC5_hbi>: + 8002004c: 001ac797 auipc a5,0x1ac + 80020050: 6b57c783 lbu a5,1717(a5) # 801cc701 + 80020054: 001ac697 auipc a3,0x1ac + 80020058: 01768693 addi a3,a3,23 # 801cc06b <_ZL8MMC5IRQR> + 8002005c: 0187f713 andi a4,a5,24 + 80020060: 0006c783 lbu a5,0(a3) + 80020064: 02070e63 beqz a4,800200a0 <_Z7MMC5_hbi+0x54> + 80020068: 0ef00713 li a4,239 + 8002006c: 02a74a63 blt a4,a0,800200a0 <_Z7MMC5_hbi+0x54> + 80020070: 0407f713 andi a4,a5,64 + 80020074: 04070263 beqz a4,800200b8 <_Z7MMC5_hbi+0x6c> + 80020078: 001ac617 auipc a2,0x1ac + 8002007c: fba60613 addi a2,a2,-70 # 801cc032 <_ZL15MMC5LineCounter> + 80020080: 00064703 lbu a4,0(a2) + 80020084: 001ac597 auipc a1,0x1ac + 80020088: fa45c583 lbu a1,-92(a1) # 801cc028 <_ZL11IRQScanline> + 8002008c: 0017071b addiw a4,a4,1 + 80020090: 0ff77713 andi a4,a4,255 + 80020094: 00e60023 sb a4,0(a2) + 80020098: 02e58e63 beq a1,a4,800200d4 <_Z7MMC5_hbi+0x88> + 8002009c: 00008067 ret + 800200a0: 03f7f793 andi a5,a5,63 + 800200a4: 00f68023 sb a5,0(a3) + 800200a8: 00100513 li a0,1 + 800200ac: 001ac797 auipc a5,0x1ac + 800200b0: f8078323 sb zero,-122(a5) # 801cc032 <_ZL15MMC5LineCounter> + 800200b4: c9de006f j 80000d50 <_Z12X6502_IRQEndi> + 800200b8: 07f7f793 andi a5,a5,127 + 800200bc: 0407e793 ori a5,a5,64 + 800200c0: 00f68023 sb a5,0(a3) + 800200c4: 00100513 li a0,1 + 800200c8: 001ac797 auipc a5,0x1ac + 800200cc: f6078523 sb zero,-150(a5) # 801cc032 <_ZL15MMC5LineCounter> + 800200d0: c81e006f j 80000d50 <_Z12X6502_IRQEndi> + 800200d4: f807e793 ori a5,a5,-128 + 800200d8: 00f68023 sb a5,0(a3) + 800200dc: 001ac797 auipc a5,0x1ac + 800200e0: fb478783 lb a5,-76(a5) # 801cc090 <_ZL9IRQEnable> + 800200e4: fa07dce3 bgez a5,8002009c <_Z7MMC5_hbi+0x50> + 800200e8: 00100513 li a0,1 + 800200ec: c4de006f j 80000d38 <_Z14X6502_IRQBegini> + +00000000800200f0 <_Z12Mapper5_InitP8CartInfo>: + 800200f0: 05052783 lw a5,80(a0) # 5050 <_entry_offset+0x5050> + 800200f4: ff010113 addi sp,sp,-16 + 800200f8: 00813023 sd s0,0(sp) + 800200fc: 00113423 sd ra,8(sp) + 80020100: 00050413 mv s0,a0 + 80020104: 04078063 beqz a5,80020144 <_Z12Mapper5_InitP8CartInfo+0x54> + 80020108: 05852783 lw a5,88(a0) + 8002010c: 05c52703 lw a4,92(a0) + 80020110: 04c42603 lw a2,76(s0) + 80020114: 00040513 mv a0,s0 + 80020118: 00e7873b addw a4,a5,a4 + 8002011c: 41f7579b sraiw a5,a4,0x1f + 80020120: 0167d79b srliw a5,a5,0x16 + 80020124: 00013403 ld s0,0(sp) + 80020128: 00e787bb addw a5,a5,a4 + 8002012c: 00813083 ld ra,8(sp) + 80020130: 40a7d59b sraiw a1,a5,0xa + 80020134: 001ac717 auipc a4,0x1ac + 80020138: f4b72623 sw a1,-180(a4) # 801cc080 <_ZL8WRAMSIZE> + 8002013c: 01010113 addi sp,sp,16 + 80020140: b9cff06f j 8001f4dc <_ZL12GenMMC5_InitP8CartInfoii> + 80020144: 07852503 lw a0,120(a0) + 80020148: b35ff0ef jal ra,8001fc7c <_Z18DetectMMC5WRAMSizej> + 8002014c: 04c42603 lw a2,76(s0) + 80020150: 001ac797 auipc a5,0x1ac + 80020154: f2a7a823 sw a0,-208(a5) # 801cc080 <_ZL8WRAMSIZE> + 80020158: 00050593 mv a1,a0 + 8002015c: 00040513 mv a0,s0 + 80020160: 00013403 ld s0,0(sp) + 80020164: 00813083 ld ra,8(sp) + 80020168: 01010113 addi sp,sp,16 + 8002016c: b70ff06f j 8001f4dc <_ZL12GenMMC5_InitP8CartInfoii> + +0000000080020170 <_ZL7SyncPRGv>: + 80020170: fe010113 addi sp,sp,-32 + 80020174: 001ac797 auipc a5,0x1ac + 80020178: f2f7c783 lbu a5,-209(a5) # 801cc0a3 <_ZL4mode> + 8002017c: 00113c23 sd ra,24(sp) + 80020180: 00813823 sd s0,16(sp) + 80020184: 00913423 sd s1,8(sp) + 80020188: 0037f793 andi a5,a5,3 + 8002018c: 00100713 li a4,1 + 80020190: 0ae78463 beq a5,a4,80020238 <_ZL7SyncPRGv+0xc8> + 80020194: ffe7879b addiw a5,a5,-2 + 80020198: 0ff7f793 andi a5,a5,255 + 8002019c: 04f76a63 bltu a4,a5,800201f0 <_ZL7SyncPRGv+0x80> + 800201a0: 001ac797 auipc a5,0x1ac + 800201a4: f1878793 addi a5,a5,-232 # 801cc0b8 <_ZL9mmc1_regs> + 800201a8: 0007c703 lbu a4,0(a5) + 800201ac: 0037c583 lbu a1,3(a5) + 800201b0: 00877793 andi a5,a4,8 + 800201b4: 00f5f593 andi a1,a1,15 + 800201b8: 12078463 beqz a5,800202e0 <_ZL7SyncPRGv+0x170> + 800201bc: 00477713 andi a4,a4,4 + 800201c0: 0005841b sext.w s0,a1 + 800201c4: 0e071a63 bnez a4,800202b8 <_ZL7SyncPRGv+0x148> + 800201c8: 00008537 lui a0,0x8 + 800201cc: 00000593 li a1,0 + 800201d0: a89f00ef jal ra,80010c58 <_Z8setprg16jj> + 800201d4: 00040593 mv a1,s0 + 800201d8: 01013403 ld s0,16(sp) + 800201dc: 01813083 ld ra,24(sp) + 800201e0: 00813483 ld s1,8(sp) + 800201e4: 0000c537 lui a0,0xc + 800201e8: 02010113 addi sp,sp,32 + 800201ec: a6df006f j 80010c58 <_Z8setprg16jj> + 800201f0: 001ac417 auipc s0,0x1ac + 800201f4: ec040413 addi s0,s0,-320 # 801cc0b0 <_ZL8vrc2_prg> + 800201f8: 00044583 lbu a1,0(s0) + 800201fc: 00008537 lui a0,0x8 + 80020200: 89df00ef jal ra,80010a9c <_Z7setprg8jj> + 80020204: 00144583 lbu a1,1(s0) + 80020208: 0000a537 lui a0,0xa + 8002020c: 891f00ef jal ra,80010a9c <_Z7setprg8jj> + 80020210: ffe00593 li a1,-2 + 80020214: 0000c537 lui a0,0xc + 80020218: 885f00ef jal ra,80010a9c <_Z7setprg8jj> + 8002021c: 01013403 ld s0,16(sp) + 80020220: 01813083 ld ra,24(sp) + 80020224: 00813483 ld s1,8(sp) + 80020228: fff00593 li a1,-1 + 8002022c: 0000e537 lui a0,0xe + 80020230: 02010113 addi sp,sp,32 + 80020234: 869f006f j 80010a9c <_Z7setprg8jj> + 80020238: 001ac797 auipc a5,0x1ac + 8002023c: e847c783 lbu a5,-380(a5) # 801cc0bc <_ZL9mmc3_ctrl> + 80020240: 4057d79b sraiw a5,a5,0x5 + 80020244: 0027f793 andi a5,a5,2 + 80020248: 0067871b addiw a4,a5,6 + 8002024c: 02071713 slli a4,a4,0x20 + 80020250: 000a7497 auipc s1,0xa7 + 80020254: 3c848493 addi s1,s1,968 # 800c7618 <_ZL9mmc3_regs> + 80020258: 02075713 srli a4,a4,0x20 + 8002025c: 00e48733 add a4,s1,a4 + 80020260: 00074583 lbu a1,0(a4) + 80020264: 00008537 lui a0,0x8 + 80020268: 0007841b sext.w s0,a5 + 8002026c: 831f00ef jal ra,80010a9c <_Z7setprg8jj> + 80020270: 0074c583 lbu a1,7(s1) + 80020274: 0000a537 lui a0,0xa + 80020278: 825f00ef jal ra,80010a9c <_Z7setprg8jj> + 8002027c: 00244793 xori a5,s0,2 + 80020280: 0067879b addiw a5,a5,6 + 80020284: 02079793 slli a5,a5,0x20 + 80020288: 0207d793 srli a5,a5,0x20 + 8002028c: 00f487b3 add a5,s1,a5 + 80020290: 0007c583 lbu a1,0(a5) + 80020294: 0000c537 lui a0,0xc + 80020298: 805f00ef jal ra,80010a9c <_Z7setprg8jj> + 8002029c: 01013403 ld s0,16(sp) + 800202a0: 0094c583 lbu a1,9(s1) + 800202a4: 01813083 ld ra,24(sp) + 800202a8: 00813483 ld s1,8(sp) + 800202ac: 0000e537 lui a0,0xe + 800202b0: 02010113 addi sp,sp,32 + 800202b4: fe8f006f j 80010a9c <_Z7setprg8jj> + 800202b8: 00040593 mv a1,s0 + 800202bc: 00008537 lui a0,0x8 + 800202c0: 999f00ef jal ra,80010c58 <_Z8setprg16jj> + 800202c4: 01013403 ld s0,16(sp) + 800202c8: 01813083 ld ra,24(sp) + 800202cc: 00813483 ld s1,8(sp) + 800202d0: 00f00593 li a1,15 + 800202d4: 0000c537 lui a0,0xc + 800202d8: 02010113 addi sp,sp,32 + 800202dc: 97df006f j 80010c58 <_Z8setprg16jj> + 800202e0: 01013403 ld s0,16(sp) + 800202e4: 01813083 ld ra,24(sp) + 800202e8: 00813483 ld s1,8(sp) + 800202ec: 0015d593 srli a1,a1,0x1 + 800202f0: 00008537 lui a0,0x8 + 800202f4: 02010113 addi sp,sp,32 + 800202f8: b1df006f j 80010e14 <_Z8setprg32jj> + +00000000800202fc <_ZL7SyncCHRv>: + 800202fc: fd010113 addi sp,sp,-48 + 80020300: 001ac797 auipc a5,0x1ac + 80020304: da37c783 lbu a5,-605(a5) # 801cc0a3 <_ZL4mode> + 80020308: 02813023 sd s0,32(sp) + 8002030c: 0067941b slliw s0,a5,0x6 + 80020310: 10047413 andi s0,s0,256 + 80020314: 02113423 sd ra,40(sp) + 80020318: 00913c23 sd s1,24(sp) + 8002031c: 01213823 sd s2,16(sp) + 80020320: 01313423 sd s3,8(sp) + 80020324: 01413023 sd s4,0(sp) + 80020328: 0037f793 andi a5,a5,3 + 8002032c: 00100713 li a4,1 + 80020330: 0004041b sext.w s0,s0 + 80020334: 04e78c63 beq a5,a4,8002038c <_ZL7SyncCHRv+0x90> + 80020338: ffe7879b addiw a5,a5,-2 + 8002033c: 0ff7f793 andi a5,a5,255 + 80020340: 14f76063 bltu a4,a5,80020480 <_ZL7SyncCHRv+0x184> + 80020344: 001ac417 auipc s0,0x1ac + 80020348: d7440413 addi s0,s0,-652 # 801cc0b8 <_ZL9mmc1_regs> + 8002034c: 00044783 lbu a5,0(s0) + 80020350: 00144583 lbu a1,1(s0) + 80020354: 0107f793 andi a5,a5,16 + 80020358: 1a078a63 beqz a5,8002050c <_ZL7SyncCHRv+0x210> + 8002035c: 00000513 li a0,0 + 80020360: b85f00ef jal ra,80010ee4 <_Z7setchr4jj> + 80020364: 00244583 lbu a1,2(s0) + 80020368: 02013403 ld s0,32(sp) + 8002036c: 02813083 ld ra,40(sp) + 80020370: 01813483 ld s1,24(sp) + 80020374: 01013903 ld s2,16(sp) + 80020378: 00813983 ld s3,8(sp) + 8002037c: 00013a03 ld s4,0(sp) + 80020380: 00001537 lui a0,0x1 + 80020384: 03010113 addi sp,sp,48 + 80020388: b5df006f j 80010ee4 <_Z7setchr4jj> + 8002038c: 000a7997 auipc s3,0xa7 + 80020390: 28c98993 addi s3,s3,652 # 800c7618 <_ZL9mmc3_regs> + 80020394: 0009c583 lbu a1,0(s3) + 80020398: 001ac497 auipc s1,0x1ac + 8002039c: d244c483 lbu s1,-732(s1) # 801cc0bc <_ZL9mmc3_ctrl> + 800203a0: 00001a37 lui s4,0x1 + 800203a4: 0054949b slliw s1,s1,0x5 + 800203a8: 0144f4b3 and s1,s1,s4 + 800203ac: 0004849b sext.w s1,s1 + 800203b0: 0fe5f593 andi a1,a1,254 + 800203b4: 0085e5b3 or a1,a1,s0 + 800203b8: 00048513 mv a0,s1 + 800203bc: ae9f00ef jal ra,80010ea4 <_Z7setchr1jj> + 800203c0: 0009c583 lbu a1,0(s3) + 800203c4: 4004e513 ori a0,s1,1024 + 800203c8: 00001937 lui s2,0x1 + 800203cc: 0015e593 ori a1,a1,1 + 800203d0: 00b465b3 or a1,s0,a1 + 800203d4: 0005859b sext.w a1,a1 + 800203d8: acdf00ef jal ra,80010ea4 <_Z7setchr1jj> + 800203dc: 0019c583 lbu a1,1(s3) + 800203e0: 80090513 addi a0,s2,-2048 # 800 <_entry_offset+0x800> + 800203e4: 00a4c533 xor a0,s1,a0 + 800203e8: 0fe5f593 andi a1,a1,254 + 800203ec: 0085e5b3 or a1,a1,s0 + 800203f0: ab5f00ef jal ra,80010ea4 <_Z7setchr1jj> + 800203f4: 0019c583 lbu a1,1(s3) + 800203f8: c0090513 addi a0,s2,-1024 + 800203fc: 00a4c533 xor a0,s1,a0 + 80020400: 0015e593 ori a1,a1,1 + 80020404: 00b465b3 or a1,s0,a1 + 80020408: 0005859b sext.w a1,a1 + 8002040c: a99f00ef jal ra,80010ea4 <_Z7setchr1jj> + 80020410: 0029c583 lbu a1,2(s3) + 80020414: 0144c533 xor a0,s1,s4 + 80020418: 0005051b sext.w a0,a0 + 8002041c: 00b465b3 or a1,s0,a1 + 80020420: a85f00ef jal ra,80010ea4 <_Z7setchr1jj> + 80020424: 0039c583 lbu a1,3(s3) + 80020428: 40090513 addi a0,s2,1024 + 8002042c: 00a4c533 xor a0,s1,a0 + 80020430: 00b465b3 or a1,s0,a1 + 80020434: a71f00ef jal ra,80010ea4 <_Z7setchr1jj> + 80020438: 0049c583 lbu a1,4(s3) + 8002043c: 00002937 lui s2,0x2 + 80020440: 80090513 addi a0,s2,-2048 # 1800 <_entry_offset+0x1800> + 80020444: 00b465b3 or a1,s0,a1 + 80020448: 00a4c533 xor a0,s1,a0 + 8002044c: a59f00ef jal ra,80010ea4 <_Z7setchr1jj> + 80020450: 0059c583 lbu a1,5(s3) + 80020454: c0090513 addi a0,s2,-1024 + 80020458: 00a4c533 xor a0,s1,a0 + 8002045c: 00b465b3 or a1,s0,a1 + 80020460: 02013403 ld s0,32(sp) + 80020464: 02813083 ld ra,40(sp) + 80020468: 01813483 ld s1,24(sp) + 8002046c: 01013903 ld s2,16(sp) + 80020470: 00813983 ld s3,8(sp) + 80020474: 00013a03 ld s4,0(sp) + 80020478: 03010113 addi sp,sp,48 + 8002047c: a29f006f j 80010ea4 <_Z7setchr1jj> + 80020480: 001ac497 auipc s1,0x1ac + 80020484: c2848493 addi s1,s1,-984 # 801cc0a8 <_ZL8vrc2_chr> + 80020488: 0004c583 lbu a1,0(s1) + 8002048c: 00000513 li a0,0 + 80020490: 00001937 lui s2,0x1 + 80020494: 00b465b3 or a1,s0,a1 + 80020498: a0df00ef jal ra,80010ea4 <_Z7setchr1jj> + 8002049c: 0014c583 lbu a1,1(s1) + 800204a0: 40000513 li a0,1024 + 800204a4: 000029b7 lui s3,0x2 + 800204a8: 00b465b3 or a1,s0,a1 + 800204ac: 9f9f00ef jal ra,80010ea4 <_Z7setchr1jj> + 800204b0: 0024c583 lbu a1,2(s1) + 800204b4: 80090513 addi a0,s2,-2048 # 800 <_entry_offset+0x800> + 800204b8: 00b465b3 or a1,s0,a1 + 800204bc: 9e9f00ef jal ra,80010ea4 <_Z7setchr1jj> + 800204c0: 0034c583 lbu a1,3(s1) + 800204c4: c0090513 addi a0,s2,-1024 + 800204c8: 00b465b3 or a1,s0,a1 + 800204cc: 9d9f00ef jal ra,80010ea4 <_Z7setchr1jj> + 800204d0: 0044c583 lbu a1,4(s1) + 800204d4: 00001537 lui a0,0x1 + 800204d8: 00b465b3 or a1,s0,a1 + 800204dc: 9c9f00ef jal ra,80010ea4 <_Z7setchr1jj> + 800204e0: 0054c583 lbu a1,5(s1) + 800204e4: 40090513 addi a0,s2,1024 + 800204e8: 00b465b3 or a1,s0,a1 + 800204ec: 9b9f00ef jal ra,80010ea4 <_Z7setchr1jj> + 800204f0: 0064c583 lbu a1,6(s1) + 800204f4: 80098513 addi a0,s3,-2048 # 1800 <_entry_offset+0x1800> + 800204f8: 00b465b3 or a1,s0,a1 + 800204fc: 9a9f00ef jal ra,80010ea4 <_Z7setchr1jj> + 80020500: 0074c583 lbu a1,7(s1) + 80020504: c0098513 addi a0,s3,-1024 + 80020508: f55ff06f j 8002045c <_ZL7SyncCHRv+0x160> + 8002050c: 02013403 ld s0,32(sp) + 80020510: 02813083 ld ra,40(sp) + 80020514: 01813483 ld s1,24(sp) + 80020518: 01013903 ld s2,16(sp) + 8002051c: 00813983 ld s3,8(sp) + 80020520: 00013a03 ld s4,0(sp) + 80020524: 0015d513 srli a0,a1,0x1 + 80020528: 03010113 addi sp,sp,48 + 8002052c: 9d9f006f j 80010f04 <_Z7setchr8j> + +0000000080020530 <_ZL7SyncMIRv>: + 80020530: 001ac797 auipc a5,0x1ac + 80020534: b737c783 lbu a5,-1165(a5) # 801cc0a3 <_ZL4mode> + 80020538: 0037f793 andi a5,a5,3 + 8002053c: 00100713 li a4,1 + 80020540: 02e78c63 beq a5,a4,80020578 <_ZL7SyncMIRv+0x48> + 80020544: ffe7879b addiw a5,a5,-2 + 80020548: 0ff7f793 andi a5,a5,255 + 8002054c: 04f76063 bltu a4,a5,8002058c <_ZL7SyncMIRv+0x5c> + 80020550: 001ac797 auipc a5,0x1ac + 80020554: b687c783 lbu a5,-1176(a5) # 801cc0b8 <_ZL9mmc1_regs> + 80020558: 0037f793 andi a5,a5,3 + 8002055c: 00200693 li a3,2 + 80020560: 04d78863 beq a5,a3,800205b0 <_ZL7SyncMIRv+0x80> + 80020564: 00300693 li a3,3 + 80020568: 02d78c63 beq a5,a3,800205a0 <_ZL7SyncMIRv+0x70> + 8002056c: 02e78e63 beq a5,a4,800205a8 <_ZL7SyncMIRv+0x78> + 80020570: 00200513 li a0,2 + 80020574: ad5f006f j 80011048 <_Z9setmirrori> + 80020578: 001ac517 auipc a0,0x1ac + 8002057c: b4554503 lbu a0,-1211(a0) # 801cc0bd <_ZL9mmc3_mirr> + 80020580: fff54513 not a0,a0 + 80020584: 00157513 andi a0,a0,1 + 80020588: ac1f006f j 80011048 <_Z9setmirrori> + 8002058c: 001ac517 auipc a0,0x1ac + 80020590: b3254503 lbu a0,-1230(a0) # 801cc0be <_ZL9vrc2_mirr> + 80020594: fff54513 not a0,a0 + 80020598: 00157513 andi a0,a0,1 + 8002059c: aadf006f j 80011048 <_Z9setmirrori> + 800205a0: 00000513 li a0,0 + 800205a4: aa5f006f j 80011048 <_Z9setmirrori> + 800205a8: 00300513 li a0,3 + 800205ac: a9df006f j 80011048 <_Z9setmirrori> + 800205b0: 00100513 li a0,1 + 800205b4: a95f006f j 80011048 <_Z9setmirrori> + +00000000800205b8 <_ZL12StateRestorei>: + 800205b8: ff010113 addi sp,sp,-16 + 800205bc: 00113423 sd ra,8(sp) + 800205c0: bb1ff0ef jal ra,80020170 <_ZL7SyncPRGv> + 800205c4: d39ff0ef jal ra,800202fc <_ZL7SyncCHRv> + 800205c8: 00813083 ld ra,8(sp) + 800205cc: 01010113 addi sp,sp,16 + 800205d0: f61ff06f j 80020530 <_ZL7SyncMIRv> + +00000000800205d4 <_ZL12UNLSL12Powerv>: + 800205d4: 001ac717 auipc a4,0x1ac + 800205d8: ac0707a3 sb zero,-1329(a4) # 801cc0a3 <_ZL4mode> + 800205dc: 00026717 auipc a4,0x26 + 800205e0: 3b473703 ld a4,948(a4) # 80046990 + 800205e4: 001ac697 auipc a3,0x1ac + 800205e8: ace6b223 sd a4,-1340(a3) # 801cc0a8 <_ZL8vrc2_chr> + 800205ec: 10000713 li a4,256 + 800205f0: ff010113 addi sp,sp,-16 + 800205f4: 001ac697 auipc a3,0x1ac + 800205f8: aae69e23 sh a4,-1348(a3) # 801cc0b0 <_ZL8vrc2_prg> + 800205fc: 001ac717 auipc a4,0x1ac + 80020600: ac070123 sb zero,-1342(a4) # 801cc0be <_ZL9vrc2_mirr> + 80020604: 00113423 sd ra,8(sp) + 80020608: 00813023 sd s0,0(sp) + 8002060c: 000a7797 auipc a5,0xa7 + 80020610: 00c78793 addi a5,a5,12 # 800c7618 <_ZL9mmc3_regs> + 80020614: 00026717 auipc a4,0x26 + 80020618: 38473703 ld a4,900(a4) # 80046998 + 8002061c: 00e7b023 sd a4,0(a5) + 80020620: ffe00713 li a4,-2 + 80020624: 00e79423 sh a4,8(a5) + 80020628: 001ac797 auipc a5,0x1ac + 8002062c: a6078d23 sb zero,-1414(a5) # 801cc0a2 <_ZL4IRQa> + 80020630: 001ac797 auipc a5,0x1ac + 80020634: a6078aa3 sb zero,-1419(a5) # 801cc0a5 <_ZL8IRQLatch> + 80020638: 001ac797 auipc a5,0x1ac + 8002063c: a6078623 sb zero,-1428(a5) # 801cc0a4 <_ZL8IRQCount> + 80020640: 001ac797 auipc a5,0x1ac + 80020644: a6078ea3 sb zero,-1411(a5) # 801cc0bd <_ZL9mmc3_mirr> + 80020648: 001ac797 auipc a5,0x1ac + 8002064c: a6078a23 sb zero,-1420(a5) # 801cc0bc <_ZL9mmc3_ctrl> + 80020650: 00c00793 li a5,12 + 80020654: 001ac717 auipc a4,0x1ac + 80020658: a6f72223 sw a5,-1436(a4) # 801cc0b8 <_ZL9mmc1_regs> + 8002065c: 00010437 lui s0,0x10 + 80020660: 001ac797 auipc a5,0x1ac + 80020664: a40780a3 sb zero,-1471(a5) # 801cc0a1 <_ZL11mmc1_buffer> + 80020668: 001ac797 auipc a5,0x1ac + 8002066c: a2078c23 sb zero,-1480(a5) # 801cc0a0 <_ZL10mmc1_shift> + 80020670: b01ff0ef jal ra,80020170 <_ZL7SyncPRGv> + 80020674: c89ff0ef jal ra,800202fc <_ZL7SyncCHRv> + 80020678: eb9ff0ef jal ra,80020530 <_ZL7SyncMIRv> + 8002067c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80020680: ffff0617 auipc a2,0xffff0 + 80020684: fe060613 addi a2,a2,-32 # 80010660 <_Z6CartBRj> + 80020688: 00008537 lui a0,0x8 + 8002068c: 390130ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80020690: 000085b7 lui a1,0x8 + 80020694: 00004537 lui a0,0x4 + 80020698: 00000617 auipc a2,0x0 + 8002069c: 30060613 addi a2,a2,768 # 80020998 <_ZL16UNLSL12ModeWritejh> + 800206a0: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 800206a4: 10050513 addi a0,a0,256 # 4100 <_entry_offset+0x4100> + 800206a8: 480130ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800206ac: fff40593 addi a1,s0,-1 + 800206b0: 00013403 ld s0,0(sp) + 800206b4: 00813083 ld ra,8(sp) + 800206b8: 00000617 auipc a2,0x0 + 800206bc: 01460613 addi a2,a2,20 # 800206cc <_ZL12UNLSL12Writejh> + 800206c0: 00008537 lui a0,0x8 + 800206c4: 01010113 addi sp,sp,16 + 800206c8: 4601306f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +00000000800206cc <_ZL12UNLSL12Writejh>: + 800206cc: fe010113 addi sp,sp,-32 + 800206d0: 001ac797 auipc a5,0x1ac + 800206d4: 9d37c783 lbu a5,-1581(a5) # 801cc0a3 <_ZL4mode> + 800206d8: 00113c23 sd ra,24(sp) + 800206dc: 00813823 sd s0,16(sp) + 800206e0: 00913423 sd s1,8(sp) + 800206e4: 0037f793 andi a5,a5,3 + 800206e8: 00100693 li a3,1 + 800206ec: 0cd78063 beq a5,a3,800207ac <_ZL12UNLSL12Writejh+0xe0> + 800206f0: ffe7879b addiw a5,a5,-2 + 800206f4: 0ff7f793 andi a5,a5,255 + 800206f8: 06f6e263 bltu a3,a5,8002075c <_ZL12UNLSL12Writejh+0x90> + 800206fc: 0185979b slliw a5,a1,0x18 + 80020700: 4187d79b sraiw a5,a5,0x18 + 80020704: 2007c463 bltz a5,8002090c <_ZL12UNLSL12Writejh+0x240> + 80020708: 001ac617 auipc a2,0x1ac + 8002070c: 99860613 addi a2,a2,-1640 # 801cc0a0 <_ZL10mmc1_shift> + 80020710: 00064703 lbu a4,0(a2) + 80020714: 001ac697 auipc a3,0x1ac + 80020718: 98d68693 addi a3,a3,-1651 # 801cc0a1 <_ZL11mmc1_buffer> + 8002071c: 0006c803 lbu a6,0(a3) + 80020720: 0015f793 andi a5,a1,1 + 80020724: 00e797bb sllw a5,a5,a4 + 80020728: 0107e7b3 or a5,a5,a6 + 8002072c: 0017071b addiw a4,a4,1 + 80020730: 0ff77713 andi a4,a4,255 + 80020734: 0ff7f793 andi a5,a5,255 + 80020738: 00f68023 sb a5,0(a3) + 8002073c: 00e60023 sb a4,0(a2) + 80020740: 00500693 li a3,5 + 80020744: 0ed70c63 beq a4,a3,8002083c <_ZL12UNLSL12Writejh+0x170> + 80020748: 01813083 ld ra,24(sp) + 8002074c: 01013403 ld s0,16(sp) + 80020750: 00813483 ld s1,8(sp) + 80020754: 02010113 addi sp,sp,32 + 80020758: 00008067 ret + 8002075c: ffff5737 lui a4,0xffff5 + 80020760: 000037b7 lui a5,0x3 + 80020764: 00a7073b addw a4,a4,a0 + 80020768: 00378793 addi a5,a5,3 # 3003 <_entry_offset+0x3003> + 8002076c: 14e7f063 bgeu a5,a4,800208ac <_ZL12UNLSL12Writejh+0x1e0> + 80020770: 0000f737 lui a4,0xf + 80020774: 00e57733 and a4,a0,a4 + 80020778: 000097b7 lui a5,0x9 + 8002077c: 10f70a63 beq a4,a5,80020890 <_ZL12UNLSL12Writejh+0x1c4> + 80020780: 0000a7b7 lui a5,0xa + 80020784: 10f70063 beq a4,a5,80020884 <_ZL12UNLSL12Writejh+0x1b8> + 80020788: 000087b7 lui a5,0x8 + 8002078c: faf71ee3 bne a4,a5,80020748 <_ZL12UNLSL12Writejh+0x7c> + 80020790: 001ac797 auipc a5,0x1ac + 80020794: 92b78023 sb a1,-1760(a5) # 801cc0b0 <_ZL8vrc2_prg> + 80020798: 01013403 ld s0,16(sp) + 8002079c: 01813083 ld ra,24(sp) + 800207a0: 00813483 ld s1,8(sp) + 800207a4: 02010113 addi sp,sp,32 + 800207a8: 9c9ff06f j 80020170 <_ZL7SyncPRGv> + 800207ac: 0000e837 lui a6,0xe + 800207b0: 00180613 addi a2,a6,1 # e001 <_entry_offset+0xe001> + 800207b4: 00c57733 and a4,a0,a2 + 800207b8: 0000c6b7 lui a3,0xc + 800207bc: 18d70a63 beq a4,a3,80020950 <_ZL12UNLSL12Writejh+0x284> + 800207c0: 02e6e263 bltu a3,a4,800207e4 <_ZL12UNLSL12Writejh+0x118> + 800207c4: 000087b7 lui a5,0x8 + 800207c8: 00178693 addi a3,a5,1 # 8001 <_entry_offset+0x8001> + 800207cc: 1ad70263 beq a4,a3,80020970 <_ZL12UNLSL12Writejh+0x2a4> + 800207d0: 0000a6b7 lui a3,0xa + 800207d4: 02d71c63 bne a4,a3,8002080c <_ZL12UNLSL12Writejh+0x140> + 800207d8: 001ac797 auipc a5,0x1ac + 800207dc: 8eb782a3 sb a1,-1819(a5) # 801cc0bd <_ZL9mmc3_mirr> + 800207e0: 0b80006f j 80020898 <_ZL12UNLSL12Writejh+0x1cc> + 800207e4: 17070c63 beq a4,a6,8002095c <_ZL12UNLSL12Writejh+0x290> + 800207e8: 00c71863 bne a4,a2,800207f8 <_ZL12UNLSL12Writejh+0x12c> + 800207ec: 001ac717 auipc a4,0x1ac + 800207f0: 8af70b23 sb a5,-1866(a4) # 801cc0a2 <_ZL4IRQa> + 800207f4: f55ff06f j 80020748 <_ZL12UNLSL12Writejh+0x7c> + 800207f8: 00168693 addi a3,a3,1 # a001 <_entry_offset+0xa001> + 800207fc: f4d716e3 bne a4,a3,80020748 <_ZL12UNLSL12Writejh+0x7c> + 80020800: 001ac717 auipc a4,0x1ac + 80020804: 8af70923 sb a5,-1870(a4) # 801cc0b2 <_ZL9IRQReload> + 80020808: f41ff06f j 80020748 <_ZL12UNLSL12Writejh+0x7c> + 8002080c: f2f71ee3 bne a4,a5,80020748 <_ZL12UNLSL12Writejh+0x7c> + 80020810: 001ac417 auipc s0,0x1ac + 80020814: 8ac40413 addi s0,s0,-1876 # 801cc0bc <_ZL9mmc3_ctrl> + 80020818: 00044483 lbu s1,0(s0) + 8002081c: 00b40023 sb a1,0(s0) + 80020820: 0095c5b3 xor a1,a1,s1 + 80020824: 0405f793 andi a5,a1,64 + 80020828: 10079c63 bnez a5,80020940 <_ZL12UNLSL12Writejh+0x274> + 8002082c: 0185959b slliw a1,a1,0x18 + 80020830: 4185d59b sraiw a1,a1,0x18 + 80020834: f005dae3 bgez a1,80020748 <_ZL12UNLSL12Writejh+0x7c> + 80020838: 0c00006f j 800208f8 <_ZL12UNLSL12Writejh+0x22c> + 8002083c: 00d5571b srliw a4,a0,0xd + 80020840: ffc7071b addiw a4,a4,-4 + 80020844: 0ff77613 andi a2,a4,255 + 80020848: 001ac697 auipc a3,0x1ac + 8002084c: 87068693 addi a3,a3,-1936 # 801cc0b8 <_ZL9mmc1_regs> + 80020850: 00c686b3 add a3,a3,a2 + 80020854: 00f68023 sb a5,0(a3) + 80020858: 001ac797 auipc a5,0x1ac + 8002085c: 84078423 sb zero,-1976(a5) # 801cc0a0 <_ZL10mmc1_shift> + 80020860: 001ac797 auipc a5,0x1ac + 80020864: 840780a3 sb zero,-1983(a5) # 801cc0a1 <_ZL11mmc1_buffer> + 80020868: 00200793 li a5,2 + 8002086c: 00f60863 beq a2,a5,8002087c <_ZL12UNLSL12Writejh+0x1b0> + 80020870: 0cc7e263 bltu a5,a2,80020934 <_ZL12UNLSL12Writejh+0x268> + 80020874: f20612e3 bnez a2,80020798 <_ZL12UNLSL12Writejh+0xcc> + 80020878: cb9ff0ef jal ra,80020530 <_ZL7SyncMIRv> + 8002087c: a81ff0ef jal ra,800202fc <_ZL7SyncCHRv> + 80020880: f19ff06f j 80020798 <_ZL12UNLSL12Writejh+0xcc> + 80020884: 001ac797 auipc a5,0x1ac + 80020888: 82b786a3 sb a1,-2003(a5) # 801cc0b1 <_ZL8vrc2_prg+0x1> + 8002088c: f0dff06f j 80020798 <_ZL12UNLSL12Writejh+0xcc> + 80020890: 001ac797 auipc a5,0x1ac + 80020894: 82b78723 sb a1,-2002(a5) # 801cc0be <_ZL9vrc2_mirr> + 80020898: 01013403 ld s0,16(sp) + 8002089c: 01813083 ld ra,24(sp) + 800208a0: 00813483 ld s1,8(sp) + 800208a4: 02010113 addi sp,sp,32 + 800208a8: c89ff06f j 80020530 <_ZL7SyncMIRv> + 800208ac: 00a5571b srliw a4,a0,0xa + 800208b0: 00257793 andi a5,a0,2 + 800208b4: 00e7e7b3 or a5,a5,a4 + 800208b8: 0017d79b srliw a5,a5,0x1 + 800208bc: 0027879b addiw a5,a5,2 + 800208c0: 001ab717 auipc a4,0x1ab + 800208c4: 7e870713 addi a4,a4,2024 # 801cc0a8 <_ZL8vrc2_chr> + 800208c8: 0077f793 andi a5,a5,7 + 800208cc: 00f707b3 add a5,a4,a5 + 800208d0: 0007c683 lbu a3,0(a5) + 800208d4: 0025171b slliw a4,a0,0x2 + 800208d8: 00477713 andi a4,a4,4 + 800208dc: 0f000613 li a2,240 + 800208e0: 40e6563b sraw a2,a2,a4 + 800208e4: 00f5f593 andi a1,a1,15 + 800208e8: 00c6f6b3 and a3,a3,a2 + 800208ec: 00e595bb sllw a1,a1,a4 + 800208f0: 00b6e5b3 or a1,a3,a1 + 800208f4: 00b78023 sb a1,0(a5) + 800208f8: 01013403 ld s0,16(sp) + 800208fc: 01813083 ld ra,24(sp) + 80020900: 00813483 ld s1,8(sp) + 80020904: 02010113 addi sp,sp,32 + 80020908: 9f5ff06f j 800202fc <_ZL7SyncCHRv> + 8002090c: 001ab717 auipc a4,0x1ab + 80020910: 7ac70713 addi a4,a4,1964 # 801cc0b8 <_ZL9mmc1_regs> + 80020914: 00074783 lbu a5,0(a4) + 80020918: 001ab697 auipc a3,0x1ab + 8002091c: 78068423 sb zero,1928(a3) # 801cc0a0 <_ZL10mmc1_shift> + 80020920: 001ab697 auipc a3,0x1ab + 80020924: 780680a3 sb zero,1921(a3) # 801cc0a1 <_ZL11mmc1_buffer> + 80020928: 00c7e793 ori a5,a5,12 + 8002092c: 00f70023 sb a5,0(a4) + 80020930: e69ff06f j 80020798 <_ZL12UNLSL12Writejh+0xcc> + 80020934: 00300793 li a5,3 + 80020938: e6f600e3 beq a2,a5,80020798 <_ZL12UNLSL12Writejh+0xcc> + 8002093c: e0dff06f j 80020748 <_ZL12UNLSL12Writejh+0x7c> + 80020940: 831ff0ef jal ra,80020170 <_ZL7SyncPRGv> + 80020944: 00044583 lbu a1,0(s0) + 80020948: 00b4c5b3 xor a1,s1,a1 + 8002094c: ee1ff06f j 8002082c <_ZL12UNLSL12Writejh+0x160> + 80020950: 001ab797 auipc a5,0x1ab + 80020954: 74b78aa3 sb a1,1877(a5) # 801cc0a5 <_ZL8IRQLatch> + 80020958: df1ff06f j 80020748 <_ZL12UNLSL12Writejh+0x7c> + 8002095c: 00100513 li a0,1 + 80020960: bf0e00ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 80020964: 001ab797 auipc a5,0x1ab + 80020968: 72078f23 sb zero,1854(a5) # 801cc0a2 <_ZL4IRQa> + 8002096c: dddff06f j 80020748 <_ZL12UNLSL12Writejh+0x7c> + 80020970: 001ab797 auipc a5,0x1ab + 80020974: 74c7c783 lbu a5,1868(a5) # 801cc0bc <_ZL9mmc3_ctrl> + 80020978: 0077f693 andi a3,a5,7 + 8002097c: 000a7717 auipc a4,0xa7 + 80020980: c9c70713 addi a4,a4,-868 # 800c7618 <_ZL9mmc3_regs> + 80020984: 00d70733 add a4,a4,a3 + 80020988: 00b70023 sb a1,0(a4) + 8002098c: 00500713 li a4,5 + 80020990: f6d774e3 bgeu a4,a3,800208f8 <_ZL12UNLSL12Writejh+0x22c> + 80020994: e05ff06f j 80020798 <_ZL12UNLSL12Writejh+0xcc> + +0000000080020998 <_ZL16UNLSL12ModeWritejh>: + 80020998: 000047b7 lui a5,0x4 + 8002099c: 10078793 addi a5,a5,256 # 4100 <_entry_offset+0x4100> + 800209a0: 00f57733 and a4,a0,a5 + 800209a4: 00f70463 beq a4,a5,800209ac <_ZL16UNLSL12ModeWritejh+0x14> + 800209a8: 00008067 ret + 800209ac: ff010113 addi sp,sp,-16 + 800209b0: 00113423 sd ra,8(sp) + 800209b4: 001ab797 auipc a5,0x1ab + 800209b8: 6eb787a3 sb a1,1775(a5) # 801cc0a3 <_ZL4mode> + 800209bc: 00157513 andi a0,a0,1 + 800209c0: 02050463 beqz a0,800209e8 <_ZL16UNLSL12ModeWritejh+0x50> + 800209c4: 00c00793 li a5,12 + 800209c8: 001ab717 auipc a4,0x1ab + 800209cc: 6ef70823 sb a5,1776(a4) # 801cc0b8 <_ZL9mmc1_regs> + 800209d0: 001ab797 auipc a5,0x1ab + 800209d4: 6e0785a3 sb zero,1771(a5) # 801cc0bb <_ZL9mmc1_regs+0x3> + 800209d8: 001ab797 auipc a5,0x1ab + 800209dc: 6c0784a3 sb zero,1737(a5) # 801cc0a1 <_ZL11mmc1_buffer> + 800209e0: 001ab797 auipc a5,0x1ab + 800209e4: 6c078023 sb zero,1728(a5) # 801cc0a0 <_ZL10mmc1_shift> + 800209e8: f88ff0ef jal ra,80020170 <_ZL7SyncPRGv> + 800209ec: 911ff0ef jal ra,800202fc <_ZL7SyncCHRv> + 800209f0: 00813083 ld ra,8(sp) + 800209f4: 01010113 addi sp,sp,16 + 800209f8: b39ff06f j 80020530 <_ZL7SyncMIRv> + +00000000800209fc <_ZL12UNLSL12HBIRQv>: + 800209fc: 001ab797 auipc a5,0x1ab + 80020a00: 6a77c783 lbu a5,1703(a5) # 801cc0a3 <_ZL4mode> + 80020a04: 0037f793 andi a5,a5,3 + 80020a08: 00100713 li a4,1 + 80020a0c: 00e78463 beq a5,a4,80020a14 <_ZL12UNLSL12HBIRQv+0x18> + 80020a10: 00008067 ret + 80020a14: 001ab717 auipc a4,0x1ab + 80020a18: 69070713 addi a4,a4,1680 # 801cc0a4 <_ZL8IRQCount> + 80020a1c: 00074783 lbu a5,0(a4) + 80020a20: 02078a63 beqz a5,80020a54 <_ZL12UNLSL12HBIRQv+0x58> + 80020a24: 001ab697 auipc a3,0x1ab + 80020a28: 68e6c683 lbu a3,1678(a3) # 801cc0b2 <_ZL9IRQReload> + 80020a2c: 02069463 bnez a3,80020a54 <_ZL12UNLSL12HBIRQv+0x58> + 80020a30: fff7879b addiw a5,a5,-1 + 80020a34: 0ff7f793 andi a5,a5,255 + 80020a38: 00f70023 sb a5,0(a4) + 80020a3c: fc079ae3 bnez a5,80020a10 <_ZL12UNLSL12HBIRQv+0x14> + 80020a40: 001ab797 auipc a5,0x1ab + 80020a44: 6627c783 lbu a5,1634(a5) # 801cc0a2 <_ZL4IRQa> + 80020a48: fc0784e3 beqz a5,80020a10 <_ZL12UNLSL12HBIRQv+0x14> + 80020a4c: 00100513 li a0,1 + 80020a50: ae8e006f j 80000d38 <_Z14X6502_IRQBegini> + 80020a54: 001ab797 auipc a5,0x1ab + 80020a58: 6517c783 lbu a5,1617(a5) # 801cc0a5 <_ZL8IRQLatch> + 80020a5c: 00f70023 sb a5,0(a4) + 80020a60: 001ab717 auipc a4,0x1ab + 80020a64: 64070923 sb zero,1618(a4) # 801cc0b2 <_ZL9IRQReload> + 80020a68: fa0794e3 bnez a5,80020a10 <_ZL12UNLSL12HBIRQv+0x14> + 80020a6c: fd5ff06f j 80020a40 <_ZL12UNLSL12HBIRQv+0x44> + +0000000080020a70 <_Z12UNLSL12_InitP8CartInfo>: + 80020a70: 00000797 auipc a5,0x0 + 80020a74: b6478793 addi a5,a5,-1180 # 800205d4 <_ZL12UNLSL12Powerv> + 80020a78: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 80020a7c: 00000797 auipc a5,0x0 + 80020a80: f8078793 addi a5,a5,-128 # 800209fc <_ZL12UNLSL12HBIRQv> + 80020a84: 001ac717 auipc a4,0x1ac + 80020a88: c2f73e23 sd a5,-964(a4) # 801cc6c0 + 80020a8c: 00000797 auipc a5,0x0 + 80020a90: b2c78793 addi a5,a5,-1236 # 800205b8 <_ZL12StateRestorei> + 80020a94: 00000693 li a3,0 + 80020a98: 00000613 li a2,0 + 80020a9c: fff00593 li a1,-1 + 80020aa0: 0002a517 auipc a0,0x2a + 80020aa4: 6e850513 addi a0,a0,1768 # 8004b188 <_ZL9StateRegs> + 80020aa8: 001ac717 auipc a4,0x1ac + 80020aac: baf73823 sd a5,-1104(a4) # 801cc658 + 80020ab0: d60df06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080020ab4 <_ZL6MWritejh>: + 80020ab4: 001ab797 auipc a5,0x1ab + 80020ab8: 60b78a23 sb a1,1556(a5) # 801cc0c8 <_ZL7datareg> + 80020abc: 001ab317 auipc t1,0x1ab + 80020ac0: 60433303 ld t1,1540(t1) # 801cc0c0 <_ZL4Sync> + 80020ac4: 00030067 jr t1 + +0000000080020ac8 <_ZL8MRestorei>: + 80020ac8: 001ab317 auipc t1,0x1ab + 80020acc: 5f833303 ld t1,1528(t1) # 801cc0c0 <_ZL4Sync> + 80020ad0: 00030067 jr t1 + +0000000080020ad4 <_ZL6MClosev>: + 80020ad4: 001ab517 auipc a0,0x1ab + 80020ad8: 5fc53503 ld a0,1532(a0) # 801cc0d0 <_ZL8DummyCHR> + 80020adc: 02050263 beqz a0,80020b00 <_ZL6MClosev+0x2c> + 80020ae0: ff010113 addi sp,sp,-16 + 80020ae4: 00113423 sd ra,8(sp) + 80020ae8: a59f10ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80020aec: 00813083 ld ra,8(sp) + 80020af0: 001ab797 auipc a5,0x1ab + 80020af4: 5e07b023 sd zero,1504(a5) # 801cc0d0 <_ZL8DummyCHR> + 80020af8: 01010113 addi sp,sp,16 + 80020afc: 00008067 ret + 80020b00: 001ab797 auipc a5,0x1ab + 80020b04: 5c07b823 sd zero,1488(a5) # 801cc0d0 <_ZL8DummyCHR> + 80020b08: 00008067 ret + +0000000080020b0c <_ZL6MPowerv>: + 80020b0c: ff010113 addi sp,sp,-16 + 80020b10: 001ab797 auipc a5,0x1ab + 80020b14: 5a078c23 sb zero,1464(a5) # 801cc0c8 <_ZL7datareg> + 80020b18: 00113423 sd ra,8(sp) + 80020b1c: 00813023 sd s0,0(sp) + 80020b20: 001ab797 auipc a5,0x1ab + 80020b24: 5a07b783 ld a5,1440(a5) # 801cc0c0 <_ZL4Sync> + 80020b28: 000780e7 jalr a5 + 80020b2c: 00000593 li a1,0 + 80020b30: 00008537 lui a0,0x8 + 80020b34: 924f00ef jal ra,80010c58 <_Z8setprg16jj> + 80020b38: fff00593 li a1,-1 + 80020b3c: 0000c537 lui a0,0xc + 80020b40: 918f00ef jal ra,80010c58 <_Z8setprg16jj> + 80020b44: 00010437 lui s0,0x10 + 80020b48: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80020b4c: 00000617 auipc a2,0x0 + 80020b50: f6860613 addi a2,a2,-152 # 80020ab4 <_ZL6MWritejh> + 80020b54: 00008537 lui a0,0x8 + 80020b58: 7d1120ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80020b5c: fff40593 addi a1,s0,-1 + 80020b60: 00013403 ld s0,0(sp) + 80020b64: 00813083 ld ra,8(sp) + 80020b68: ffff0617 auipc a2,0xffff0 + 80020b6c: af860613 addi a2,a2,-1288 # 80010660 <_Z6CartBRj> + 80020b70: 00008537 lui a0,0x8 + 80020b74: 01010113 addi sp,sp,16 + 80020b78: 6a51206f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080020b7c <_ZL7Sync181v>: + 80020b7c: 001ab797 auipc a5,0x1ab + 80020b80: 54c7c783 lbu a5,1356(a5) # 801cc0c8 <_ZL7datareg> + 80020b84: 0017f793 andi a5,a5,1 + 80020b88: 00079663 bnez a5,80020b94 <_ZL7Sync181v+0x18> + 80020b8c: 00000513 li a0,0 + 80020b90: b74f006f j 80010f04 <_Z7setchr8j> + 80020b94: 00000593 li a1,0 + 80020b98: 01000513 li a0,16 + 80020b9c: ae8f006f j 80010e84 <_Z8setchr8rij> + +0000000080020ba0 <_ZL7Sync185v>: + 80020ba0: 001ab797 auipc a5,0x1ab + 80020ba4: 5287c783 lbu a5,1320(a5) # 801cc0c8 <_ZL7datareg> + 80020ba8: 0037f713 andi a4,a5,3 + 80020bac: 00070663 beqz a4,80020bb8 <_ZL7Sync185v+0x18> + 80020bb0: 01300713 li a4,19 + 80020bb4: 00e79863 bne a5,a4,80020bc4 <_ZL7Sync185v+0x24> + 80020bb8: 00000593 li a1,0 + 80020bbc: 01000513 li a0,16 + 80020bc0: ac4f006f j 80010e84 <_Z8setchr8rij> + 80020bc4: 00000513 li a0,0 + 80020bc8: b3cf006f j 80010f04 <_Z7setchr8j> + +0000000080020bcc <_Z14Mapper185_InitP8CartInfo>: + 80020bcc: ff010113 addi sp,sp,-16 + 80020bd0: 00113423 sd ra,8(sp) + 80020bd4: 00000797 auipc a5,0x0 + 80020bd8: f3878793 addi a5,a5,-200 # 80020b0c <_ZL6MPowerv> + 80020bdc: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 80020be0: 00000797 auipc a5,0x0 + 80020be4: ef478793 addi a5,a5,-268 # 80020ad4 <_ZL6MClosev> + 80020be8: 00f53823 sd a5,16(a0) + 80020bec: 00000797 auipc a5,0x0 + 80020bf0: fb478793 addi a5,a5,-76 # 80020ba0 <_ZL7Sync185v> + 80020bf4: 001ab717 auipc a4,0x1ab + 80020bf8: 4cf73623 sd a5,1228(a4) # 801cc0c0 <_ZL4Sync> + 80020bfc: 00002537 lui a0,0x2 + 80020c00: 00000797 auipc a5,0x0 + 80020c04: ec878793 addi a5,a5,-312 # 80020ac8 <_ZL8MRestorei> + 80020c08: 001ac717 auipc a4,0x1ac + 80020c0c: a4f73823 sd a5,-1456(a4) # 801cc658 + 80020c10: 85df10ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80020c14: 001ab797 auipc a5,0x1ab + 80020c18: 4aa7be23 sd a0,1212(a5) # 801cc0d0 <_ZL8DummyCHR> + 80020c1c: 00002737 lui a4,0x2 + 80020c20: 00050593 mv a1,a0 + 80020c24: 00050793 mv a5,a0 + 80020c28: 00e50733 add a4,a0,a4 + 80020c2c: fff00693 li a3,-1 + 80020c30: 00d78023 sb a3,0(a5) + 80020c34: 00178793 addi a5,a5,1 + 80020c38: fee79ce3 bne a5,a4,80020c30 <_Z14Mapper185_InitP8CartInfo+0x64> + 80020c3c: 00000693 li a3,0 + 80020c40: 00002637 lui a2,0x2 + 80020c44: 01000513 li a0,16 + 80020c48: 97def0ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 80020c4c: 00813083 ld ra,8(sp) + 80020c50: 00000693 li a3,0 + 80020c54: 00000613 li a2,0 + 80020c58: fff00593 li a1,-1 + 80020c5c: 0002a517 auipc a0,0x2a + 80020c60: 69450513 addi a0,a0,1684 # 8004b2f0 <_ZL9StateRegs> + 80020c64: 01010113 addi sp,sp,16 + 80020c68: ba8df06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080020c6c <_Z14Mapper181_InitP8CartInfo>: + 80020c6c: ff010113 addi sp,sp,-16 + 80020c70: 00113423 sd ra,8(sp) + 80020c74: 00000797 auipc a5,0x0 + 80020c78: e9878793 addi a5,a5,-360 # 80020b0c <_ZL6MPowerv> + 80020c7c: 00f53023 sd a5,0(a0) + 80020c80: 00000797 auipc a5,0x0 + 80020c84: e5478793 addi a5,a5,-428 # 80020ad4 <_ZL6MClosev> + 80020c88: 00f53823 sd a5,16(a0) + 80020c8c: 00000797 auipc a5,0x0 + 80020c90: ef078793 addi a5,a5,-272 # 80020b7c <_ZL7Sync181v> + 80020c94: 001ab717 auipc a4,0x1ab + 80020c98: 42f73623 sd a5,1068(a4) # 801cc0c0 <_ZL4Sync> + 80020c9c: 00002537 lui a0,0x2 + 80020ca0: 00000797 auipc a5,0x0 + 80020ca4: e2878793 addi a5,a5,-472 # 80020ac8 <_ZL8MRestorei> + 80020ca8: 001ac717 auipc a4,0x1ac + 80020cac: 9af73823 sd a5,-1616(a4) # 801cc658 + 80020cb0: fbcf10ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80020cb4: 001ab797 auipc a5,0x1ab + 80020cb8: 40a7be23 sd a0,1052(a5) # 801cc0d0 <_ZL8DummyCHR> + 80020cbc: 00002737 lui a4,0x2 + 80020cc0: 00050593 mv a1,a0 + 80020cc4: 00050793 mv a5,a0 + 80020cc8: 00e50733 add a4,a0,a4 + 80020ccc: fff00693 li a3,-1 + 80020cd0: 00d78023 sb a3,0(a5) + 80020cd4: 00178793 addi a5,a5,1 + 80020cd8: fee79ce3 bne a5,a4,80020cd0 <_Z14Mapper181_InitP8CartInfo+0x64> + 80020cdc: 00000693 li a3,0 + 80020ce0: 00002637 lui a2,0x2 + 80020ce4: 01000513 li a0,16 + 80020ce8: 8ddef0ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 80020cec: 00813083 ld ra,8(sp) + 80020cf0: 00000693 li a3,0 + 80020cf4: 00000613 li a2,0 + 80020cf8: fff00593 li a1,-1 + 80020cfc: 0002a517 auipc a0,0x2a + 80020d00: 5f450513 addi a0,a0,1524 # 8004b2f0 <_ZL9StateRegs> + 80020d04: 01010113 addi sp,sp,16 + 80020d08: b08df06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080020d0c <_ZL4Syncv>: + 80020d0c: fd010113 addi sp,sp,-48 + 80020d10: 00000613 li a2,0 + 80020d14: 000065b7 lui a1,0x6 + 80020d18: 01000513 li a0,16 + 80020d1c: 02113423 sd ra,40(sp) + 80020d20: 02813023 sd s0,32(sp) + 80020d24: 00913c23 sd s1,24(sp) + 80020d28: 001ab417 auipc s0,0x1ab + 80020d2c: 3c840413 addi s0,s0,968 # 801cc0f0 <_ZL4preg> + 80020d30: 01213823 sd s2,16(sp) + 80020d34: 01313423 sd s3,8(sp) + 80020d38: bb1ef0ef jal ra,800108e8 <_Z8setprg8rijj> + 80020d3c: 00044583 lbu a1,0(s0) + 80020d40: 00008537 lui a0,0x8 + 80020d44: 001ab497 auipc s1,0x1ab + 80020d48: 3a448493 addi s1,s1,932 # 801cc0e8 <_ZL4creg> + 80020d4c: d51ef0ef jal ra,80010a9c <_Z7setprg8jj> + 80020d50: 00144583 lbu a1,1(s0) + 80020d54: 0000a537 lui a0,0xa + 80020d58: 00000413 li s0,0 + 80020d5c: d41ef0ef jal ra,80010a9c <_Z7setprg8jj> + 80020d60: ffe00593 li a1,-2 + 80020d64: 0000c537 lui a0,0xc + 80020d68: d35ef0ef jal ra,80010a9c <_Z7setprg8jj> + 80020d6c: fff00593 li a1,-1 + 80020d70: 0000e537 lui a0,0xe + 80020d74: d29ef0ef jal ra,80010a9c <_Z7setprg8jj> + 80020d78: 00100993 li s3,1 + 80020d7c: 00002937 lui s2,0x2 + 80020d80: 0180006f j 80020d98 <_ZL4Syncv+0x8c> + 80020d84: 00070593 mv a1,a4 + 80020d88: 4004041b addiw s0,s0,1024 + 80020d8c: 918f00ef jal ra,80010ea4 <_Z7setchr1jj> + 80020d90: 00148493 addi s1,s1,1 + 80020d94: 03240a63 beq s0,s2,80020dc8 <_ZL4Syncv+0xbc> + 80020d98: 0004c703 lbu a4,0(s1) + 80020d9c: 00040513 mv a0,s0 + 80020da0: 00040593 mv a1,s0 + 80020da4: ffa7079b addiw a5,a4,-6 + 80020da8: 0ff7f793 andi a5,a5,255 + 80020dac: 00177613 andi a2,a4,1 + 80020db0: fcf9eae3 bltu s3,a5,80020d84 <_ZL4Syncv+0x78> + 80020db4: 01000513 li a0,16 + 80020db8: 4004041b addiw s0,s0,1024 + 80020dbc: 868f00ef jal ra,80010e24 <_Z8setchr1rijj> + 80020dc0: 00148493 addi s1,s1,1 + 80020dc4: fd241ae3 bne s0,s2,80020d98 <_ZL4Syncv+0x8c> + 80020dc8: 02813083 ld ra,40(sp) + 80020dcc: 02013403 ld s0,32(sp) + 80020dd0: 01813483 ld s1,24(sp) + 80020dd4: 01013903 ld s2,16(sp) + 80020dd8: 00813983 ld s3,8(sp) + 80020ddc: 03010113 addi sp,sp,48 + 80020de0: 00008067 ret + +0000000080020de4 <_ZL12StateRestorei>: + 80020de4: f29ff06f j 80020d0c <_ZL4Syncv> + +0000000080020de8 <_ZL9M252Closev>: + 80020de8: ff010113 addi sp,sp,-16 + 80020dec: 00113423 sd ra,8(sp) + 80020df0: 001ab517 auipc a0,0x1ab + 80020df4: 2f053503 ld a0,752(a0) # 801cc0e0 <_ZL4WRAM> + 80020df8: 00050463 beqz a0,80020e00 <_ZL9M252Closev+0x18> + 80020dfc: f44f10ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80020e00: 001ab517 auipc a0,0x1ab + 80020e04: 2f853503 ld a0,760(a0) # 801cc0f8 <_ZL6CHRRAM> + 80020e08: 00050463 beqz a0,80020e10 <_ZL9M252Closev+0x28> + 80020e0c: f34f10ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80020e10: 00813083 ld ra,8(sp) + 80020e14: 001ab797 auipc a5,0x1ab + 80020e18: 2e07b223 sd zero,740(a5) # 801cc0f8 <_ZL6CHRRAM> + 80020e1c: 001ab797 auipc a5,0x1ab + 80020e20: 2c07b223 sd zero,708(a5) # 801cc0e0 <_ZL4WRAM> + 80020e24: 01010113 addi sp,sp,16 + 80020e28: 00008067 ret + +0000000080020e2c <_ZL9M252Powerv>: + 80020e2c: ff010113 addi sp,sp,-16 + 80020e30: 00113423 sd ra,8(sp) + 80020e34: 00813023 sd s0,0(sp) + 80020e38: ed5ff0ef jal ra,80020d0c <_ZL4Syncv> + 80020e3c: 00008437 lui s0,0x8 + 80020e40: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 80020e44: ffff0617 auipc a2,0xffff0 + 80020e48: 81c60613 addi a2,a2,-2020 # 80010660 <_Z6CartBRj> + 80020e4c: 00006537 lui a0,0x6 + 80020e50: 3cd120ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80020e54: fff40593 addi a1,s0,-1 + 80020e58: ffff0617 auipc a2,0xffff0 + 80020e5c: 83460613 addi a2,a2,-1996 # 8001068c <_Z6CartBWjh> + 80020e60: 00006537 lui a0,0x6 + 80020e64: 4c5120ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80020e68: 00010437 lui s0,0x10 + 80020e6c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80020e70: fffef617 auipc a2,0xfffef + 80020e74: 7f060613 addi a2,a2,2032 # 80010660 <_Z6CartBRj> + 80020e78: 00008537 lui a0,0x8 + 80020e7c: 3a1120ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80020e80: fff40593 addi a1,s0,-1 + 80020e84: 00000617 auipc a2,0x0 + 80020e88: 10460613 addi a2,a2,260 # 80020f88 <_ZL9M252Writejh> + 80020e8c: 00008537 lui a0,0x8 + 80020e90: 499120ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80020e94: 00013403 ld s0,0(sp) + 80020e98: 00813083 ld ra,8(sp) + 80020e9c: 001ab517 auipc a0,0x1ab + 80020ea0: 27052503 lw a0,624(a0) # 801cc10c <_ZL8WRAMSIZE> + 80020ea4: 001ab617 auipc a2,0x1ab + 80020ea8: 23c63603 ld a2,572(a2) # 801cc0e0 <_ZL4WRAM> + 80020eac: 000065b7 lui a1,0x6 + 80020eb0: 00a5551b srliw a0,a0,0xa + 80020eb4: 01010113 addi sp,sp,16 + 80020eb8: 95cdf06f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +0000000080020ebc <_ZL7M252IRQi>: + 80020ebc: 001ab797 auipc a5,0x1ab + 80020ec0: 2207a783 lw a5,544(a5) # 801cc0dc <_ZL4IRQa> + 80020ec4: 0c078063 beqz a5,80020f84 <_ZL7M252IRQi+0xc8> + 80020ec8: fd010113 addi sp,sp,-48 + 80020ecc: 00913c23 sd s1,24(sp) + 80020ed0: 001ab497 auipc s1,0x1ab + 80020ed4: 23048493 addi s1,s1,560 # 801cc100 <_ZL8IRQClock> + 80020ed8: 0004a703 lw a4,0(s1) + 80020edc: 0015179b slliw a5,a0,0x1 + 80020ee0: 00a7853b addw a0,a5,a0 + 80020ee4: 00e507bb addw a5,a0,a4 + 80020ee8: 02113423 sd ra,40(sp) + 80020eec: 02813023 sd s0,32(sp) + 80020ef0: 01213823 sd s2,16(sp) + 80020ef4: 01313423 sd s3,8(sp) + 80020ef8: 00f4a023 sw a5,0(s1) + 80020efc: 15400713 li a4,340 + 80020f00: 06f75463 bge a4,a5,80020f68 <_ZL7M252IRQi+0xac> + 80020f04: 001ab917 auipc s2,0x1ab + 80020f08: 20090913 addi s2,s2,512 # 801cc104 <_ZL8IRQCount> + 80020f0c: 00092703 lw a4,0(s2) + 80020f10: 15400413 li s0,340 + 80020f14: 001ab997 auipc s3,0x1ab + 80020f18: 1f498993 addi s3,s3,500 # 801cc108 <_ZL8IRQLatch> + 80020f1c: 00000613 li a2,0 + 80020f20: 02f45e63 bge s0,a5,80020f5c <_ZL7M252IRQi+0xa0> + 80020f24: 0017071b addiw a4,a4,1 + 80020f28: 10077693 andi a3,a4,256 + 80020f2c: eab7879b addiw a5,a5,-341 + 80020f30: 00100613 li a2,1 + 80020f34: fe0686e3 beqz a3,80020f20 <_ZL7M252IRQi+0x64> + 80020f38: 00100513 li a0,1 + 80020f3c: 00f4a023 sw a5,0(s1) + 80020f40: 00e92023 sw a4,0(s2) + 80020f44: df5df0ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 80020f48: 0009a703 lw a4,0(s3) + 80020f4c: 0004a783 lw a5,0(s1) + 80020f50: 00000613 li a2,0 + 80020f54: 00e92023 sw a4,0(s2) + 80020f58: fc9ff06f j 80020f20 <_ZL7M252IRQi+0x64> + 80020f5c: 00060663 beqz a2,80020f68 <_ZL7M252IRQi+0xac> + 80020f60: 00f4a023 sw a5,0(s1) + 80020f64: 00e92023 sw a4,0(s2) + 80020f68: 02813083 ld ra,40(sp) + 80020f6c: 02013403 ld s0,32(sp) + 80020f70: 01813483 ld s1,24(sp) + 80020f74: 01013903 ld s2,16(sp) + 80020f78: 00813983 ld s3,8(sp) + 80020f7c: 03010113 addi sp,sp,48 + 80020f80: 00008067 ret + 80020f84: 00008067 ret + +0000000080020f88 <_ZL9M252Writejh>: + 80020f88: ff010113 addi sp,sp,-16 + 80020f8c: ffff57b7 lui a5,0xffff5 + 80020f90: 00813023 sd s0,0(sp) + 80020f94: 00113423 sd ra,8(sp) + 80020f98: 00a787bb addw a5,a5,a0 + 80020f9c: 00004737 lui a4,0x4 + 80020fa0: 00058413 mv s0,a1 + 80020fa4: 0ee7e263 bltu a5,a4,80021088 <_ZL9M252Writejh+0x100> + 80020fa8: 0000f7b7 lui a5,0xf + 80020fac: 00c78713 addi a4,a5,12 # f00c <_entry_offset+0xf00c> + 80020fb0: 00e57533 and a0,a0,a4 + 80020fb4: 16f50c63 beq a0,a5,8002112c <_ZL9M252Writejh+0x1a4> + 80020fb8: 04a7f863 bgeu a5,a0,80021008 <_ZL9M252Writejh+0x80> + 80020fbc: 00478713 addi a4,a5,4 + 80020fc0: 12e50063 beq a0,a4,800210e0 <_ZL9M252Writejh+0x158> + 80020fc4: 00878793 addi a5,a5,8 + 80020fc8: 06f51a63 bne a0,a5,8002103c <_ZL9M252Writejh+0xb4> + 80020fcc: 00100513 li a0,1 + 80020fd0: d81df0ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 80020fd4: 001ab797 auipc a5,0x1ab + 80020fd8: 1207a623 sw zero,300(a5) # 801cc100 <_ZL8IRQClock> + 80020fdc: 001ab797 auipc a5,0x1ab + 80020fe0: 12c7a783 lw a5,300(a5) # 801cc108 <_ZL8IRQLatch> + 80020fe4: 00247413 andi s0,s0,2 + 80020fe8: 00813083 ld ra,8(sp) + 80020fec: 001ab717 auipc a4,0x1ab + 80020ff0: 10f72c23 sw a5,280(a4) # 801cc104 <_ZL8IRQCount> + 80020ff4: 001ab797 auipc a5,0x1ab + 80020ff8: 0e87a423 sw s0,232(a5) # 801cc0dc <_ZL4IRQa> + 80020ffc: 00013403 ld s0,0(sp) + 80021000: 01010113 addi sp,sp,16 + 80021004: 00008067 ret + 80021008: 000087b7 lui a5,0x8 + 8002100c: 00c78713 addi a4,a5,12 # 800c <_entry_offset+0x800c> + 80021010: 02a77e63 bgeu a4,a0,8002104c <_ZL9M252Writejh+0xc4> + 80021014: ffff67b7 lui a5,0xffff6 + 80021018: 00a787bb addw a5,a5,a0 + 8002101c: 00c00713 li a4,12 + 80021020: 00f76e63 bltu a4,a5,8002103c <_ZL9M252Writejh+0xb4> + 80021024: 00100513 li a0,1 + 80021028: 00f51533 sll a0,a0,a5 + 8002102c: 000017b7 lui a5,0x1 + 80021030: 11178793 addi a5,a5,273 # 1111 <_entry_offset+0x1111> + 80021034: 00f57533 and a0,a0,a5 + 80021038: 0c051e63 bnez a0,80021114 <_ZL9M252Writejh+0x18c> + 8002103c: 00813083 ld ra,8(sp) + 80021040: 00013403 ld s0,0(sp) + 80021044: 01010113 addi sp,sp,16 + 80021048: 00008067 ret + 8002104c: fef568e3 bltu a0,a5,8002103c <_ZL9M252Writejh+0xb4> + 80021050: ffff87b7 lui a5,0xffff8 + 80021054: 00a787bb addw a5,a5,a0 + 80021058: 00100513 li a0,1 + 8002105c: 00f51533 sll a0,a0,a5 + 80021060: 000017b7 lui a5,0x1 + 80021064: 11178793 addi a5,a5,273 # 1111 <_entry_offset+0x1111> + 80021068: 00f57533 and a0,a0,a5 + 8002106c: fc0508e3 beqz a0,8002103c <_ZL9M252Writejh+0xb4> + 80021070: 00013403 ld s0,0(sp) + 80021074: 00813083 ld ra,8(sp) + 80021078: 001ab797 auipc a5,0x1ab + 8002107c: 06b78c23 sb a1,120(a5) # 801cc0f0 <_ZL4preg> + 80021080: 01010113 addi sp,sp,16 + 80021084: c89ff06f j 80020d0c <_ZL4Syncv> + 80021088: 0085571b srliw a4,a0,0x8 + 8002108c: 00857793 andi a5,a0,8 + 80021090: 00e7e7b3 or a5,a5,a4 + 80021094: 0037d79b srliw a5,a5,0x3 + 80021098: 0027879b addiw a5,a5,2 + 8002109c: 001ab717 auipc a4,0x1ab + 800210a0: 04c70713 addi a4,a4,76 # 801cc0e8 <_ZL4creg> + 800210a4: 0077f793 andi a5,a5,7 + 800210a8: 00f707b3 add a5,a4,a5 + 800210ac: 0007c703 lbu a4,0(a5) + 800210b0: 00457513 andi a0,a0,4 + 800210b4: 0f000693 li a3,240 + 800210b8: 40a6d6bb sraw a3,a3,a0 + 800210bc: 00f5f413 andi s0,a1,15 + 800210c0: 00a4153b sllw a0,s0,a0 + 800210c4: 00d77733 and a4,a4,a3 + 800210c8: 00a76533 or a0,a4,a0 + 800210cc: 00a78023 sb a0,0(a5) + 800210d0: 00013403 ld s0,0(sp) + 800210d4: 00813083 ld ra,8(sp) + 800210d8: 01010113 addi sp,sp,16 + 800210dc: c31ff06f j 80020d0c <_ZL4Syncv> + 800210e0: 00100513 li a0,1 + 800210e4: c6ddf0ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 800210e8: 001ab717 auipc a4,0x1ab + 800210ec: 02070713 addi a4,a4,32 # 801cc108 <_ZL8IRQLatch> + 800210f0: 00072783 lw a5,0(a4) + 800210f4: 0044141b slliw s0,s0,0x4 + 800210f8: 00813083 ld ra,8(sp) + 800210fc: 00f7f793 andi a5,a5,15 + 80021100: 0087e433 or s0,a5,s0 + 80021104: 00872023 sw s0,0(a4) + 80021108: 00013403 ld s0,0(sp) + 8002110c: 01010113 addi sp,sp,16 + 80021110: 00008067 ret + 80021114: 001ab797 auipc a5,0x1ab + 80021118: fc878ea3 sb s0,-35(a5) # 801cc0f1 <_ZL4preg+0x1> + 8002111c: 00013403 ld s0,0(sp) + 80021120: 00813083 ld ra,8(sp) + 80021124: 01010113 addi sp,sp,16 + 80021128: be5ff06f j 80020d0c <_ZL4Syncv> + 8002112c: 00100513 li a0,1 + 80021130: c21df0ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 80021134: 001ab717 auipc a4,0x1ab + 80021138: fd470713 addi a4,a4,-44 # 801cc108 <_ZL8IRQLatch> + 8002113c: 00072783 lw a5,0(a4) + 80021140: 00f47413 andi s0,s0,15 + 80021144: 00813083 ld ra,8(sp) + 80021148: 0f07f793 andi a5,a5,240 + 8002114c: 0087e433 or s0,a5,s0 + 80021150: 00872023 sw s0,0(a4) + 80021154: 00013403 ld s0,0(sp) + 80021158: 01010113 addi sp,sp,16 + 8002115c: 00008067 ret + +0000000080021160 <_Z14Mapper252_InitP8CartInfo>: + 80021160: fe010113 addi sp,sp,-32 + 80021164: 00113c23 sd ra,24(sp) + 80021168: 00813823 sd s0,16(sp) + 8002116c: 00913423 sd s1,8(sp) + 80021170: 01213023 sd s2,0(sp) + 80021174: 00000797 auipc a5,0x0 + 80021178: cb878793 addi a5,a5,-840 # 80020e2c <_ZL9M252Powerv> + 8002117c: 00f53023 sd a5,0(a0) + 80021180: 00000797 auipc a5,0x0 + 80021184: c6878793 addi a5,a5,-920 # 80020de8 <_ZL9M252Closev> + 80021188: 00f53823 sd a5,16(a0) + 8002118c: 00000797 auipc a5,0x0 + 80021190: d3078793 addi a5,a5,-720 # 80020ebc <_ZL7M252IRQi> + 80021194: 00050413 mv s0,a0 + 80021198: 001ab717 auipc a4,0x1ab + 8002119c: 9af73423 sd a5,-1624(a4) # 801cbb40 + 800211a0: 00001537 lui a0,0x1 + 800211a4: 000017b7 lui a5,0x1 + 800211a8: 8007879b addiw a5,a5,-2048 + 800211ac: 001ab497 auipc s1,0x1ab + 800211b0: f2c48493 addi s1,s1,-212 # 801cc0d8 <_ZL10CHRRAMSIZE> + 800211b4: 80050513 addi a0,a0,-2048 # 800 <_entry_offset+0x800> + 800211b8: 00f4a023 sw a5,0(s1) + 800211bc: ab0f10ef jal ra,8001246c <_Z12FCEU_gmallocj> + 800211c0: 0004a603 lw a2,0(s1) + 800211c4: 00050593 mv a1,a0 + 800211c8: 001ab917 auipc s2,0x1ab + 800211cc: f3090913 addi s2,s2,-208 # 801cc0f8 <_ZL6CHRRAM> + 800211d0: 00100693 li a3,1 + 800211d4: 01000513 li a0,16 + 800211d8: 00b93023 sd a1,0(s2) + 800211dc: be8ef0ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 800211e0: 0004a583 lw a1,0(s1) + 800211e4: 00093503 ld a0,0(s2) + 800211e8: 00024697 auipc a3,0x24 + 800211ec: 49068693 addi a3,a3,1168 # 80045678 <_ZL10prot_array+0x10> + 800211f0: 00000613 li a2,0 + 800211f4: e1dde0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800211f8: 000027b7 lui a5,0x2 + 800211fc: 001ab497 auipc s1,0x1ab + 80021200: f1048493 addi s1,s1,-240 # 801cc10c <_ZL8WRAMSIZE> + 80021204: 00002537 lui a0,0x2 + 80021208: 00f4a023 sw a5,0(s1) + 8002120c: a60f10ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80021210: 0004a603 lw a2,0(s1) + 80021214: 00050593 mv a1,a0 + 80021218: 001ab917 auipc s2,0x1ab + 8002121c: ec890913 addi s2,s2,-312 # 801cc0e0 <_ZL4WRAM> + 80021220: 00100693 li a3,1 + 80021224: 01000513 li a0,16 + 80021228: 00b93023 sd a1,0(s2) + 8002122c: ac8ef0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80021230: 0004a583 lw a1,0(s1) + 80021234: 00093503 ld a0,0(s2) + 80021238: 00024697 auipc a3,0x24 + 8002123c: 0f068693 addi a3,a3,240 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80021240: 00000613 li a2,0 + 80021244: dcdde0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80021248: 04c42783 lw a5,76(s0) + 8002124c: 00078a63 beqz a5,80021260 <_Z14Mapper252_InitP8CartInfo+0x100> + 80021250: 00093703 ld a4,0(s2) + 80021254: 0004a783 lw a5,0(s1) + 80021258: 00e43c23 sd a4,24(s0) + 8002125c: 02f42c23 sw a5,56(s0) + 80021260: 01013403 ld s0,16(sp) + 80021264: 01813083 ld ra,24(sp) + 80021268: 00813483 ld s1,8(sp) + 8002126c: 00013903 ld s2,0(sp) + 80021270: 00000797 auipc a5,0x0 + 80021274: b7478793 addi a5,a5,-1164 # 80020de4 <_ZL12StateRestorei> + 80021278: 001ab717 auipc a4,0x1ab + 8002127c: 3ef73023 sd a5,992(a4) # 801cc658 + 80021280: 00000693 li a3,0 + 80021284: 00000613 li a2,0 + 80021288: fff00593 li a1,-1 + 8002128c: 0002a517 auipc a0,0x2a + 80021290: 09450513 addi a0,a0,148 # 8004b320 <_ZL9StateRegs> + 80021294: 02010113 addi sp,sp,32 + 80021298: d79de06f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002129c <_ZL7M36Readj>: + 8002129c: 001ab517 auipc a0,0x1ab + 800212a0: e7554503 lbu a0,-395(a0) # 801cc111 <_ZL6latche> + 800212a4: 00008067 ret + +00000000800212a8 <_ZL4Syncv>: + 800212a8: ff010113 addi sp,sp,-16 + 800212ac: 00813023 sd s0,0(sp) + 800212b0: 001ab417 auipc s0,0x1ab + 800212b4: e6140413 addi s0,s0,-415 # 801cc111 <_ZL6latche> + 800212b8: 00044583 lbu a1,0(s0) + 800212bc: 00008537 lui a0,0x8 + 800212c0: 00113423 sd ra,8(sp) + 800212c4: 0045d593 srli a1,a1,0x4 + 800212c8: b4def0ef jal ra,80010e14 <_Z8setprg32jj> + 800212cc: 00044503 lbu a0,0(s0) + 800212d0: 00013403 ld s0,0(sp) + 800212d4: 00813083 ld ra,8(sp) + 800212d8: 00f57513 andi a0,a0,15 + 800212dc: 01010113 addi sp,sp,16 + 800212e0: c25ef06f j 80010f04 <_Z7setchr8j> + +00000000800212e4 <_ZL10M36Restorei>: + 800212e4: fc5ff06f j 800212a8 <_ZL4Syncv> + +00000000800212e8 <_ZL8M36Powerv>: + 800212e8: ff010113 addi sp,sp,-16 + 800212ec: 00113423 sd ra,8(sp) + 800212f0: 00813023 sd s0,0(sp) + 800212f4: 001ab797 auipc a5,0x1ab + 800212f8: e0078ea3 sb zero,-483(a5) # 801cc111 <_ZL6latche> + 800212fc: fadff0ef jal ra,800212a8 <_ZL4Syncv> + 80021300: 000045b7 lui a1,0x4 + 80021304: 10058593 addi a1,a1,256 # 4100 <_entry_offset+0x4100> + 80021308: 00058513 mv a0,a1 + 8002130c: 00000617 auipc a2,0x0 + 80021310: f9060613 addi a2,a2,-112 # 8002129c <_ZL7M36Readj> + 80021314: 708120ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80021318: 00010437 lui s0,0x10 + 8002131c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80021320: fffef617 auipc a2,0xfffef + 80021324: 34060613 addi a2,a2,832 # 80010660 <_Z6CartBRj> + 80021328: 00008537 lui a0,0x8 + 8002132c: 6f0120ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80021330: ffe40593 addi a1,s0,-2 + 80021334: 00013403 ld s0,0(sp) + 80021338: 00813083 ld ra,8(sp) + 8002133c: 00000617 auipc a2,0x0 + 80021340: 01460613 addi a2,a2,20 # 80021350 <_ZL8M36Writejh> + 80021344: 00008537 lui a0,0x8 + 80021348: 01010113 addi sp,sp,16 + 8002134c: 7dc1206f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080021350 <_ZL8M36Writejh>: + 80021350: ff010113 addi sp,sp,-16 + 80021354: 00c5551b srliw a0,a0,0xc + 80021358: 00813023 sd s0,0(sp) + 8002135c: 00113423 sd ra,8(sp) + 80021360: 00757513 andi a0,a0,7 + 80021364: 00058413 mv s0,a1 + 80021368: 02050a63 beqz a0,8002139c <_ZL8M36Writejh+0x4c> + 8002136c: 00400793 li a5,4 + 80021370: 00f51a63 bne a0,a5,80021384 <_ZL8M36Writejh+0x34> + 80021374: 00000513 li a0,0 + 80021378: 001ab797 auipc a5,0x1ab + 8002137c: d8078c23 sb zero,-616(a5) # 801cc110 <_ZL4mirr> + 80021380: cc9ef0ef jal ra,80011048 <_Z9setmirrori> + 80021384: 001ab797 auipc a5,0x1ab + 80021388: d88786a3 sb s0,-627(a5) # 801cc111 <_ZL6latche> + 8002138c: 00013403 ld s0,0(sp) + 80021390: 00813083 ld ra,8(sp) + 80021394: 01010113 addi sp,sp,16 + 80021398: f11ff06f j 800212a8 <_ZL4Syncv> + 8002139c: 00100793 li a5,1 + 800213a0: 00100513 li a0,1 + 800213a4: 001ab717 auipc a4,0x1ab + 800213a8: d6f70623 sb a5,-660(a4) # 801cc110 <_ZL4mirr> + 800213ac: c9def0ef jal ra,80011048 <_Z9setmirrori> + 800213b0: 001ab797 auipc a5,0x1ab + 800213b4: d68780a3 sb s0,-671(a5) # 801cc111 <_ZL6latche> + 800213b8: 00013403 ld s0,0(sp) + 800213bc: 00813083 ld ra,8(sp) + 800213c0: 01010113 addi sp,sp,16 + 800213c4: ee5ff06f j 800212a8 <_ZL4Syncv> + +00000000800213c8 <_Z13Mapper36_InitP8CartInfo>: + 800213c8: 00000797 auipc a5,0x0 + 800213cc: f2078793 addi a5,a5,-224 # 800212e8 <_ZL8M36Powerv> + 800213d0: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 800213d4: 00000797 auipc a5,0x0 + 800213d8: f1078793 addi a5,a5,-240 # 800212e4 <_ZL10M36Restorei> + 800213dc: 00000693 li a3,0 + 800213e0: 00000613 li a2,0 + 800213e4: fff00593 li a1,-1 + 800213e8: 0002a517 auipc a0,0x2a + 800213ec: fe050513 addi a0,a0,-32 # 8004b3c8 <_ZL9StateRegs> + 800213f0: 001ab717 auipc a4,0x1ab + 800213f4: 26f73423 sd a5,616(a4) # 801cc658 + 800213f8: c19de06f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800213fc <_ZL14Mapper190_Syncv>: + 800213fc: ff010113 addi sp,sp,-16 + 80021400: 00000613 li a2,0 + 80021404: 000065b7 lui a1,0x6 + 80021408: 01000513 li a0,16 + 8002140c: 00113423 sd ra,8(sp) + 80021410: 00813023 sd s0,0(sp) + 80021414: cd4ef0ef jal ra,800108e8 <_Z8setprg8rijj> + 80021418: 001ab597 auipc a1,0x1ab + 8002141c: d0c5c583 lbu a1,-756(a1) # 801cc124 <_ZL4prgr> + 80021420: 00008537 lui a0,0x8 + 80021424: 835ef0ef jal ra,80010c58 <_Z8setprg16jj> + 80021428: 00000593 li a1,0 + 8002142c: 0000c537 lui a0,0xc + 80021430: 001ab417 auipc s0,0x1ab + 80021434: cf040413 addi s0,s0,-784 # 801cc120 <_ZL4chrr> + 80021438: 821ef0ef jal ra,80010c58 <_Z8setprg16jj> + 8002143c: 00044583 lbu a1,0(s0) + 80021440: 00000513 li a0,0 + 80021444: a81ef0ef jal ra,80010ec4 <_Z7setchr2jj> + 80021448: 00144583 lbu a1,1(s0) + 8002144c: 00001537 lui a0,0x1 + 80021450: 80050513 addi a0,a0,-2048 # 800 <_entry_offset+0x800> + 80021454: a71ef0ef jal ra,80010ec4 <_Z7setchr2jj> + 80021458: 00244583 lbu a1,2(s0) + 8002145c: 00001537 lui a0,0x1 + 80021460: a65ef0ef jal ra,80010ec4 <_Z7setchr2jj> + 80021464: 00344583 lbu a1,3(s0) + 80021468: 00013403 ld s0,0(sp) + 8002146c: 00813083 ld ra,8(sp) + 80021470: 00002537 lui a0,0x2 + 80021474: 80050513 addi a0,a0,-2048 # 1800 <_entry_offset+0x1800> + 80021478: 01010113 addi sp,sp,16 + 8002147c: a49ef06f j 80010ec4 <_Z7setchr2jj> + +0000000080021480 <_ZL17Mapper190_Restorei>: + 80021480: f7dff06f j 800213fc <_ZL14Mapper190_Syncv> + +0000000080021484 <_ZL17Mapper190_WriteCDjh>: + 80021484: 0075f593 andi a1,a1,7 + 80021488: 0085e593 ori a1,a1,8 + 8002148c: 001ab797 auipc a5,0x1ab + 80021490: c8b78c23 sb a1,-872(a5) # 801cc124 <_ZL4prgr> + 80021494: f69ff06f j 800213fc <_ZL14Mapper190_Syncv> + +0000000080021498 <_ZL17Mapper190_WriteABjh>: + 80021498: 00357793 andi a5,a0,3 + 8002149c: 001ab517 auipc a0,0x1ab + 800214a0: c8450513 addi a0,a0,-892 # 801cc120 <_ZL4chrr> + 800214a4: 00f50533 add a0,a0,a5 + 800214a8: 03f5f593 andi a1,a1,63 + 800214ac: 00b50023 sb a1,0(a0) + 800214b0: f4dff06f j 800213fc <_ZL14Mapper190_Syncv> + +00000000800214b4 <_ZL17Mapper190_Write89jh>: + 800214b4: 0075f593 andi a1,a1,7 + 800214b8: 001ab797 auipc a5,0x1ab + 800214bc: c6b78623 sb a1,-916(a5) # 801cc124 <_ZL4prgr> + 800214c0: f3dff06f j 800213fc <_ZL14Mapper190_Syncv> + +00000000800214c4 <_ZL15Mapper190_Closev>: + 800214c4: ff010113 addi sp,sp,-16 + 800214c8: 00813023 sd s0,0(sp) + 800214cc: 001ab417 auipc s0,0x1ab + 800214d0: c4c40413 addi s0,s0,-948 # 801cc118 <_ZL4WRAM> + 800214d4: 00043503 ld a0,0(s0) + 800214d8: 00113423 sd ra,8(sp) + 800214dc: 864f10ef jal ra,80012540 <_Z10FCEU_gfreePv> + 800214e0: 00813083 ld ra,8(sp) + 800214e4: 00043023 sd zero,0(s0) + 800214e8: 00013403 ld s0,0(sp) + 800214ec: 01010113 addi sp,sp,16 + 800214f0: 00008067 ret + +00000000800214f4 <_ZL15Mapper190_Powerv>: + 800214f4: ff010113 addi sp,sp,-16 + 800214f8: 001ab617 auipc a2,0x1ab + 800214fc: c2063603 ld a2,-992(a2) # 801cc118 <_ZL4WRAM> + 80021500: 000065b7 lui a1,0x6 + 80021504: 00800513 li a0,8 + 80021508: 00113423 sd ra,8(sp) + 8002150c: b09de0ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 80021510: 000105b7 lui a1,0x10 + 80021514: fffef617 auipc a2,0xfffef + 80021518: 14c60613 addi a2,a2,332 # 80010660 <_Z6CartBRj> + 8002151c: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80021520: 00006537 lui a0,0x6 + 80021524: 4f8120ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80021528: 000085b7 lui a1,0x8 + 8002152c: fffef617 auipc a2,0xfffef + 80021530: 16060613 addi a2,a2,352 # 8001068c <_Z6CartBWjh> + 80021534: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80021538: 00006537 lui a0,0x6 + 8002153c: 5ec120ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80021540: 0000a5b7 lui a1,0xa + 80021544: 00000617 auipc a2,0x0 + 80021548: f7060613 addi a2,a2,-144 # 800214b4 <_ZL17Mapper190_Write89jh> + 8002154c: fff58593 addi a1,a1,-1 # 9fff <_entry_offset+0x9fff> + 80021550: 00008537 lui a0,0x8 + 80021554: 5d4120ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80021558: 0000c5b7 lui a1,0xc + 8002155c: 00000617 auipc a2,0x0 + 80021560: f3c60613 addi a2,a2,-196 # 80021498 <_ZL17Mapper190_WriteABjh> + 80021564: fff58593 addi a1,a1,-1 # bfff <_entry_offset+0xbfff> + 80021568: 0000a537 lui a0,0xa + 8002156c: 5bc120ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80021570: 0000e5b7 lui a1,0xe + 80021574: 0000c537 lui a0,0xc + 80021578: 00000617 auipc a2,0x0 + 8002157c: f0c60613 addi a2,a2,-244 # 80021484 <_ZL17Mapper190_WriteCDjh> + 80021580: fff58593 addi a1,a1,-1 # dfff <_entry_offset+0xdfff> + 80021584: 5a4120ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80021588: e75ff0ef jal ra,800213fc <_ZL14Mapper190_Syncv> + 8002158c: 00813083 ld ra,8(sp) + 80021590: 00100513 li a0,1 + 80021594: 01010113 addi sp,sp,16 + 80021598: ab1ef06f j 80011048 <_Z9setmirrori> + +000000008002159c <_Z14Mapper190_InitP8CartInfo>: + 8002159c: fe010113 addi sp,sp,-32 + 800215a0: 00113c23 sd ra,24(sp) + 800215a4: 00813823 sd s0,16(sp) + 800215a8: 00913423 sd s1,8(sp) + 800215ac: 00000797 auipc a5,0x0 + 800215b0: f4878793 addi a5,a5,-184 # 800214f4 <_ZL15Mapper190_Powerv> + 800215b4: 00f53023 sd a5,0(a0) # c000 <_entry_offset+0xc000> + 800215b8: 00000797 auipc a5,0x0 + 800215bc: f0c78793 addi a5,a5,-244 # 800214c4 <_ZL15Mapper190_Closev> + 800215c0: 00f53823 sd a5,16(a0) + 800215c4: 00000797 auipc a5,0x0 + 800215c8: ebc78793 addi a5,a5,-324 # 80021480 <_ZL17Mapper190_Restorei> + 800215cc: 00002537 lui a0,0x2 + 800215d0: 001ab717 auipc a4,0x1ab + 800215d4: 08f73423 sd a5,136(a4) # 801cc658 + 800215d8: e95f00ef jal ra,8001246c <_Z12FCEU_gmallocj> + 800215dc: 00050593 mv a1,a0 + 800215e0: 001ab417 auipc s0,0x1ab + 800215e4: b3840413 addi s0,s0,-1224 # 801cc118 <_ZL4WRAM> + 800215e8: 00100693 li a3,1 + 800215ec: 00002637 lui a2,0x2 + 800215f0: 01000513 li a0,16 + 800215f4: 00b43023 sd a1,0(s0) + 800215f8: efdee0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 800215fc: 001ab517 auipc a0,0x1ab + 80021600: b2850513 addi a0,a0,-1240 # 801cc124 <_ZL4prgr> + 80021604: 001ab497 auipc s1,0x1ab + 80021608: b1c48493 addi s1,s1,-1252 # 801cc120 <_ZL4chrr> + 8002160c: 00024697 auipc a3,0x24 + 80021610: 59468693 addi a3,a3,1428 # 80045ba0 <_ZZL5Do5SQiE3tal+0x60> + 80021614: 00000613 li a2,0 + 80021618: 00100593 li a1,1 + 8002161c: 00050023 sb zero,0(a0) + 80021620: 0004a023 sw zero,0(s1) + 80021624: 9edde0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80021628: 00048513 mv a0,s1 + 8002162c: 00021697 auipc a3,0x21 + 80021630: b1c68693 addi a3,a3,-1252 # 80042148 <_ZL9C96000PAL+0x738> + 80021634: 00000613 li a2,0 + 80021638: 00400593 li a1,4 + 8002163c: 9d5de0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80021640: 00043503 ld a0,0(s0) + 80021644: 01013403 ld s0,16(sp) + 80021648: 01813083 ld ra,24(sp) + 8002164c: 00813483 ld s1,8(sp) + 80021650: 00024697 auipc a3,0x24 + 80021654: cd868693 addi a3,a3,-808 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80021658: 00000613 li a2,0 + 8002165c: 000025b7 lui a1,0x2 + 80021660: 02010113 addi sp,sp,32 + 80021664: 9adde06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080021668 <_ZL4Syncv>: + 80021668: ff010113 addi sp,sp,-16 + 8002166c: 001ab597 auipc a1,0x1ab + 80021670: ab95c583 lbu a1,-1351(a1) # 801cc125 <_ZL3reg> + 80021674: 00006537 lui a0,0x6 + 80021678: 00113423 sd ra,8(sp) + 8002167c: c20ef0ef jal ra,80010a9c <_Z7setprg8jj> + 80021680: ffc00593 li a1,-4 + 80021684: 00008537 lui a0,0x8 + 80021688: c14ef0ef jal ra,80010a9c <_Z7setprg8jj> + 8002168c: ffd00593 li a1,-3 + 80021690: 0000a537 lui a0,0xa + 80021694: c08ef0ef jal ra,80010a9c <_Z7setprg8jj> + 80021698: 00000613 li a2,0 + 8002169c: 0000c5b7 lui a1,0xc + 800216a0: 01000513 li a0,16 + 800216a4: a44ef0ef jal ra,800108e8 <_Z8setprg8rijj> + 800216a8: 0000e537 lui a0,0xe + 800216ac: fff00593 li a1,-1 + 800216b0: becef0ef jal ra,80010a9c <_Z7setprg8jj> + 800216b4: 00813083 ld ra,8(sp) + 800216b8: 00000513 li a0,0 + 800216bc: 01010113 addi sp,sp,16 + 800216c0: 845ef06f j 80010f04 <_Z7setchr8j> + +00000000800216c4 <_ZL12StateRestorei>: + 800216c4: fa5ff06f j 80021668 <_ZL4Syncv> + +00000000800216c8 <_ZL9LH32Writejh>: + 800216c8: 001ab797 auipc a5,0x1ab + 800216cc: a4b78ea3 sb a1,-1443(a5) # 801cc125 <_ZL3reg> + 800216d0: f99ff06f j 80021668 <_ZL4Syncv> + +00000000800216d4 <_ZL9LH32Closev>: + 800216d4: 001ab517 auipc a0,0x1ab + 800216d8: a5453503 ld a0,-1452(a0) # 801cc128 <_ZL4WRAM> + 800216dc: 02050263 beqz a0,80021700 <_ZL9LH32Closev+0x2c> + 800216e0: ff010113 addi sp,sp,-16 + 800216e4: 00113423 sd ra,8(sp) + 800216e8: e59f00ef jal ra,80012540 <_Z10FCEU_gfreePv> + 800216ec: 00813083 ld ra,8(sp) + 800216f0: 001ab797 auipc a5,0x1ab + 800216f4: a207bc23 sd zero,-1480(a5) # 801cc128 <_ZL4WRAM> + 800216f8: 01010113 addi sp,sp,16 + 800216fc: 00008067 ret + 80021700: 001ab797 auipc a5,0x1ab + 80021704: a207b423 sd zero,-1496(a5) # 801cc128 <_ZL4WRAM> + 80021708: 00008067 ret + +000000008002170c <_ZL9LH32Powerv>: + 8002170c: ff010113 addi sp,sp,-16 + 80021710: 00113423 sd ra,8(sp) + 80021714: f55ff0ef jal ra,80021668 <_ZL4Syncv> + 80021718: 000105b7 lui a1,0x10 + 8002171c: fffef617 auipc a2,0xfffef + 80021720: f4460613 addi a2,a2,-188 # 80010660 <_Z6CartBRj> + 80021724: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80021728: 00006537 lui a0,0x6 + 8002172c: 2f0120ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80021730: 0000e5b7 lui a1,0xe + 80021734: fffef617 auipc a2,0xfffef + 80021738: f5860613 addi a2,a2,-168 # 8001068c <_Z6CartBWjh> + 8002173c: fff58593 addi a1,a1,-1 # dfff <_entry_offset+0xdfff> + 80021740: 0000c537 lui a0,0xc + 80021744: 3e4120ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80021748: 00000617 auipc a2,0x0 + 8002174c: f8060613 addi a2,a2,-128 # 800216c8 <_ZL9LH32Writejh> + 80021750: 000065b7 lui a1,0x6 + 80021754: 00006537 lui a0,0x6 + 80021758: 3d0120ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002175c: 00813083 ld ra,8(sp) + 80021760: 001ab517 auipc a0,0x1ab + 80021764: 9d052503 lw a0,-1584(a0) # 801cc130 <_ZL8WRAMSIZE> + 80021768: 001ab617 auipc a2,0x1ab + 8002176c: 9c063603 ld a2,-1600(a2) # 801cc128 <_ZL4WRAM> + 80021770: 000065b7 lui a1,0x6 + 80021774: 00a5551b srliw a0,a0,0xa + 80021778: 01010113 addi sp,sp,16 + 8002177c: 899de06f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +0000000080021780 <_Z9LH32_InitP8CartInfo>: + 80021780: fe010113 addi sp,sp,-32 + 80021784: 00113c23 sd ra,24(sp) + 80021788: 00813823 sd s0,16(sp) + 8002178c: 00913423 sd s1,8(sp) + 80021790: 00000797 auipc a5,0x0 + 80021794: f7c78793 addi a5,a5,-132 # 8002170c <_ZL9LH32Powerv> + 80021798: 00f53023 sd a5,0(a0) + 8002179c: 00000797 auipc a5,0x0 + 800217a0: f3878793 addi a5,a5,-200 # 800216d4 <_ZL9LH32Closev> + 800217a4: 001ab417 auipc s0,0x1ab + 800217a8: 98c40413 addi s0,s0,-1652 # 801cc130 <_ZL8WRAMSIZE> + 800217ac: 00f53823 sd a5,16(a0) + 800217b0: 000027b7 lui a5,0x2 + 800217b4: 00002537 lui a0,0x2 + 800217b8: 00f42023 sw a5,0(s0) + 800217bc: cb1f00ef jal ra,8001246c <_Z12FCEU_gmallocj> + 800217c0: 00042603 lw a2,0(s0) + 800217c4: 00050593 mv a1,a0 + 800217c8: 001ab497 auipc s1,0x1ab + 800217cc: 96048493 addi s1,s1,-1696 # 801cc128 <_ZL4WRAM> + 800217d0: 00100693 li a3,1 + 800217d4: 01000513 li a0,16 + 800217d8: 00b4b023 sd a1,0(s1) + 800217dc: d19ee0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 800217e0: 00042583 lw a1,0(s0) + 800217e4: 0004b503 ld a0,0(s1) + 800217e8: 00024697 auipc a3,0x24 + 800217ec: b4068693 addi a3,a3,-1216 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 800217f0: 00000613 li a2,0 + 800217f4: 81dde0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800217f8: 01013403 ld s0,16(sp) + 800217fc: 01813083 ld ra,24(sp) + 80021800: 00813483 ld s1,8(sp) + 80021804: 00000797 auipc a5,0x0 + 80021808: ec078793 addi a5,a5,-320 # 800216c4 <_ZL12StateRestorei> + 8002180c: 001ab717 auipc a4,0x1ab + 80021810: e4f73623 sd a5,-436(a4) # 801cc658 + 80021814: 00000693 li a3,0 + 80021818: 00000613 li a2,0 + 8002181c: fff00593 li a1,-1 + 80021820: 0002a517 auipc a0,0x2a + 80021824: bf050513 addi a0,a0,-1040 # 8004b410 <_ZL9StateRegs> + 80021828: 02010113 addi sp,sp,32 + 8002182c: fe4de06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080021830 <_ZL4Syncv>: + 80021830: fe010113 addi sp,sp,-32 + 80021834: 00813823 sd s0,16(sp) + 80021838: 00913423 sd s1,8(sp) + 8002183c: 01213023 sd s2,0(sp) + 80021840: 00113c23 sd ra,24(sp) + 80021844: 001ab497 auipc s1,0x1ab + 80021848: 8fc48493 addi s1,s1,-1796 # 801cc140 <_ZL4creg> + 8002184c: 00000413 li s0,0 + 80021850: 00002937 lui s2,0x2 + 80021854: 0004c583 lbu a1,0(s1) + 80021858: 00040513 mv a0,s0 + 8002185c: 4004041b addiw s0,s0,1024 + 80021860: e44ef0ef jal ra,80010ea4 <_Z7setchr1jj> + 80021864: 00148493 addi s1,s1,1 + 80021868: ff2416e3 bne s0,s2,80021854 <_ZL4Syncv+0x24> + 8002186c: 00000613 li a2,0 + 80021870: 000065b7 lui a1,0x6 + 80021874: 01000513 li a0,16 + 80021878: 870ef0ef jal ra,800108e8 <_Z8setprg8rijj> + 8002187c: 001ab417 auipc s0,0x1ab + 80021880: 8d440413 addi s0,s0,-1836 # 801cc150 <_ZL4preg> + 80021884: 00044583 lbu a1,0(s0) + 80021888: 00008537 lui a0,0x8 + 8002188c: a10ef0ef jal ra,80010a9c <_Z7setprg8jj> + 80021890: 00144583 lbu a1,1(s0) + 80021894: 0000a537 lui a0,0xa + 80021898: a04ef0ef jal ra,80010a9c <_Z7setprg8jj> + 8002189c: 00244583 lbu a1,2(s0) + 800218a0: 0000c537 lui a0,0xc + 800218a4: 9f8ef0ef jal ra,80010a9c <_Z7setprg8jj> + 800218a8: 0000e537 lui a0,0xe + 800218ac: fff00593 li a1,-1 + 800218b0: 9ecef0ef jal ra,80010a9c <_Z7setprg8jj> + 800218b4: 001ab517 auipc a0,0x1ab + 800218b8: 89454503 lbu a0,-1900(a0) # 801cc148 <_ZL4mirr> + 800218bc: 00257793 andi a5,a0,2 + 800218c0: 00157513 andi a0,a0,1 + 800218c4: 00078463 beqz a5,800218cc <_ZL4Syncv+0x9c> + 800218c8: 00200513 li a0,2 + 800218cc: 01013403 ld s0,16(sp) + 800218d0: 01813083 ld ra,24(sp) + 800218d4: 00813483 ld s1,8(sp) + 800218d8: 00013903 ld s2,0(sp) + 800218dc: 02010113 addi sp,sp,32 + 800218e0: f68ef06f j 80011048 <_Z9setmirrori> + +00000000800218e4 <_ZL12StateRestorei>: + 800218e4: f4dff06f j 80021830 <_ZL4Syncv> + +00000000800218e8 <_ZL11M18WriteChrjh>: + 800218e8: ffff6737 lui a4,0xffff6 + 800218ec: 0015579b srliw a5,a0,0x1 + 800218f0: 00a7073b addw a4,a4,a0 + 800218f4: 00b7571b srliw a4,a4,0xb + 800218f8: 0017f793 andi a5,a5,1 + 800218fc: 00e7e7b3 or a5,a5,a4 + 80021900: 0007879b sext.w a5,a5 + 80021904: 001ab717 auipc a4,0x1ab + 80021908: 83c70713 addi a4,a4,-1988 # 801cc140 <_ZL4creg> + 8002190c: 00f707b3 add a5,a4,a5 + 80021910: 0007c703 lbu a4,0(a5) + 80021914: 0025151b slliw a0,a0,0x2 + 80021918: 00457513 andi a0,a0,4 + 8002191c: 0f000693 li a3,240 + 80021920: 40a6d6bb sraw a3,a3,a0 + 80021924: 00f5f593 andi a1,a1,15 + 80021928: 00d77733 and a4,a4,a3 + 8002192c: 00a5953b sllw a0,a1,a0 + 80021930: 00a76533 or a0,a4,a0 + 80021934: 00a78023 sb a0,0(a5) + 80021938: ef9ff06f j 80021830 <_ZL4Syncv> + +000000008002193c <_ZL11M18WritePrgjh>: + 8002193c: ffff8737 lui a4,0xffff8 + 80021940: 0015579b srliw a5,a0,0x1 + 80021944: 00a7073b addw a4,a4,a0 + 80021948: 00b7571b srliw a4,a4,0xb + 8002194c: 0017f793 andi a5,a5,1 + 80021950: 00e7e7b3 or a5,a5,a4 + 80021954: 0007879b sext.w a5,a5 + 80021958: 001aa717 auipc a4,0x1aa + 8002195c: 7f870713 addi a4,a4,2040 # 801cc150 <_ZL4preg> + 80021960: 00f707b3 add a5,a4,a5 + 80021964: 0007c703 lbu a4,0(a5) + 80021968: 0025151b slliw a0,a0,0x2 + 8002196c: 00457513 andi a0,a0,4 + 80021970: 0f000693 li a3,240 + 80021974: 40a6d6bb sraw a3,a3,a0 + 80021978: 00f5f593 andi a1,a1,15 + 8002197c: 00d77733 and a4,a4,a3 + 80021980: 00a5953b sllw a0,a1,a0 + 80021984: 00a76533 or a0,a4,a0 + 80021988: 00a78023 sb a0,0(a5) + 8002198c: ea5ff06f j 80021830 <_ZL4Syncv> + +0000000080021990 <_ZL8M18Closev>: + 80021990: 001aa517 auipc a0,0x1aa + 80021994: 7a853503 ld a0,1960(a0) # 801cc138 <_ZL4WRAM> + 80021998: 02050263 beqz a0,800219bc <_ZL8M18Closev+0x2c> + 8002199c: ff010113 addi sp,sp,-16 + 800219a0: 00113423 sd ra,8(sp) + 800219a4: b9df00ef jal ra,80012540 <_Z10FCEU_gfreePv> + 800219a8: 00813083 ld ra,8(sp) + 800219ac: 001aa797 auipc a5,0x1aa + 800219b0: 7807b623 sd zero,1932(a5) # 801cc138 <_ZL4WRAM> + 800219b4: 01010113 addi sp,sp,16 + 800219b8: 00008067 ret + 800219bc: 001aa797 auipc a5,0x1aa + 800219c0: 7607be23 sd zero,1916(a5) # 801cc138 <_ZL4WRAM> + 800219c4: 00008067 ret + +00000000800219c8 <_ZL8M18Powerv>: + 800219c8: 001aa797 auipc a5,0x1aa + 800219cc: 76078623 sb zero,1900(a5) # 801cc134 <_ZL4IRQa> + 800219d0: fffe07b7 lui a5,0xfffe0 + 800219d4: ff010113 addi sp,sp,-16 + 800219d8: 1007879b addiw a5,a5,256 + 800219dc: 00113423 sd ra,8(sp) + 800219e0: 00813023 sd s0,0(sp) + 800219e4: 001aa717 auipc a4,0x1aa + 800219e8: 76f72623 sw a5,1900(a4) # 801cc150 <_ZL4preg> + 800219ec: 00010437 lui s0,0x10 + 800219f0: e41ff0ef jal ra,80021830 <_ZL4Syncv> + 800219f4: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 800219f8: fffef617 auipc a2,0xfffef + 800219fc: c6860613 addi a2,a2,-920 # 80010660 <_Z6CartBRj> + 80021a00: 00006537 lui a0,0x6 + 80021a04: 018120ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80021a08: 000085b7 lui a1,0x8 + 80021a0c: fffef617 auipc a2,0xfffef + 80021a10: c8060613 addi a2,a2,-896 # 8001068c <_Z6CartBWjh> + 80021a14: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80021a18: 00006537 lui a0,0x6 + 80021a1c: 10c120ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80021a20: 0000a5b7 lui a1,0xa + 80021a24: 00000617 auipc a2,0x0 + 80021a28: f1860613 addi a2,a2,-232 # 8002193c <_ZL11M18WritePrgjh> + 80021a2c: fff58593 addi a1,a1,-1 # 9fff <_entry_offset+0x9fff> + 80021a30: 00008537 lui a0,0x8 + 80021a34: 0f4120ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80021a38: 0000e5b7 lui a1,0xe + 80021a3c: 00000617 auipc a2,0x0 + 80021a40: eac60613 addi a2,a2,-340 # 800218e8 <_ZL11M18WriteChrjh> + 80021a44: fff58593 addi a1,a1,-1 # dfff <_entry_offset+0xdfff> + 80021a48: 0000a537 lui a0,0xa + 80021a4c: 0dc120ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80021a50: fff40593 addi a1,s0,-1 + 80021a54: 00000617 auipc a2,0x0 + 80021a58: 03860613 addi a2,a2,56 # 80021a8c <_ZL11M18WriteIRQjh> + 80021a5c: 0000e537 lui a0,0xe + 80021a60: 0c8120ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80021a64: 00013403 ld s0,0(sp) + 80021a68: 00813083 ld ra,8(sp) + 80021a6c: 001aa517 auipc a0,0x1aa + 80021a70: 6f052503 lw a0,1776(a0) # 801cc15c <_ZL8WRAMSIZE> + 80021a74: 001aa617 auipc a2,0x1aa + 80021a78: 6c463603 ld a2,1732(a2) # 801cc138 <_ZL4WRAM> + 80021a7c: 000065b7 lui a1,0x6 + 80021a80: 00a5551b srliw a0,a0,0xa + 80021a84: 01010113 addi sp,sp,16 + 80021a88: d8cde06f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +0000000080021a8c <_ZL11M18WriteIRQjh>: + 80021a8c: 0000f7b7 lui a5,0xf + 80021a90: 00378693 addi a3,a5,3 # f003 <_entry_offset+0xf003> + 80021a94: 0000e737 lui a4,0xe + 80021a98: 00d57533 and a0,a0,a3 + 80021a9c: 00370693 addi a3,a4,3 # e003 <_entry_offset+0xe003> + 80021aa0: 0ad50a63 beq a0,a3,80021b54 <_ZL11M18WriteIRQjh+0xc8> + 80021aa4: 04a6e263 bltu a3,a0,80021ae8 <_ZL11M18WriteIRQjh+0x5c> + 80021aa8: 00170693 addi a3,a4,1 + 80021aac: 0cd50a63 beq a0,a3,80021b80 <_ZL11M18WriteIRQjh+0xf4> + 80021ab0: 00270693 addi a3,a4,2 + 80021ab4: 04d51a63 bne a0,a3,80021b08 <_ZL11M18WriteIRQjh+0x7c> + 80021ab8: 001aa697 auipc a3,0x1aa + 80021abc: 6a068693 addi a3,a3,1696 # 801cc158 <_ZL8IRQLatch> + 80021ac0: 0006a703 lw a4,0(a3) + 80021ac4: 0ff78793 addi a5,a5,255 + 80021ac8: 0085959b slliw a1,a1,0x8 + 80021acc: 00f777b3 and a5,a4,a5 + 80021ad0: 00001737 lui a4,0x1 + 80021ad4: f0070713 addi a4,a4,-256 # f00 <_entry_offset+0xf00> + 80021ad8: 00e5f5b3 and a1,a1,a4 + 80021adc: 00b7e5b3 or a1,a5,a1 + 80021ae0: 00b6a023 sw a1,0(a3) + 80021ae4: 00008067 ret + 80021ae8: 00178713 addi a4,a5,1 + 80021aec: 0ce50063 beq a0,a4,80021bac <_ZL11M18WriteIRQjh+0x120> + 80021af0: 00278713 addi a4,a5,2 + 80021af4: 04e51063 bne a0,a4,80021b34 <_ZL11M18WriteIRQjh+0xa8> + 80021af8: 0035f593 andi a1,a1,3 + 80021afc: 001aa797 auipc a5,0x1aa + 80021b00: 64b78623 sb a1,1612(a5) # 801cc148 <_ZL4mirr> + 80021b04: d2dff06f j 80021830 <_ZL4Syncv> + 80021b08: 04e51263 bne a0,a4,80021b4c <_ZL11M18WriteIRQjh+0xc0> + 80021b0c: 001aa697 auipc a3,0x1aa + 80021b10: 64c68693 addi a3,a3,1612 # 801cc158 <_ZL8IRQLatch> + 80021b14: 0006a783 lw a5,0(a3) + 80021b18: 00010737 lui a4,0x10 + 80021b1c: ff070713 addi a4,a4,-16 # fff0 <_entry_offset+0xfff0> + 80021b20: 00e7f7b3 and a5,a5,a4 + 80021b24: 00f5f593 andi a1,a1,15 + 80021b28: 00b7e5b3 or a1,a5,a1 + 80021b2c: 00b6a023 sw a1,0(a3) + 80021b30: 00008067 ret + 80021b34: 00f51e63 bne a0,a5,80021b50 <_ZL11M18WriteIRQjh+0xc4> + 80021b38: 001aa797 auipc a5,0x1aa + 80021b3c: 6207a783 lw a5,1568(a5) # 801cc158 <_ZL8IRQLatch> + 80021b40: 001aa717 auipc a4,0x1aa + 80021b44: 60f72a23 sw a5,1556(a4) # 801cc154 <_ZL8IRQCount> + 80021b48: 00008067 ret + 80021b4c: 00008067 ret + 80021b50: 00008067 ret + 80021b54: 001aa717 auipc a4,0x1aa + 80021b58: 60470713 addi a4,a4,1540 # 801cc158 <_ZL8IRQLatch> + 80021b5c: 00072783 lw a5,0(a4) + 80021b60: 00c5959b slliw a1,a1,0xc + 80021b64: 0000f6b7 lui a3,0xf + 80021b68: 03479793 slli a5,a5,0x34 + 80021b6c: 0347d793 srli a5,a5,0x34 + 80021b70: 00d5f5b3 and a1,a1,a3 + 80021b74: 00b7e5b3 or a1,a5,a1 + 80021b78: 00b72023 sw a1,0(a4) + 80021b7c: 00008067 ret + 80021b80: 001aa697 auipc a3,0x1aa + 80021b84: 5d868693 addi a3,a3,1496 # 801cc158 <_ZL8IRQLatch> + 80021b88: 0006a783 lw a5,0(a3) + 80021b8c: 00010737 lui a4,0x10 + 80021b90: 0045959b slliw a1,a1,0x4 + 80021b94: f0f70713 addi a4,a4,-241 # ff0f <_entry_offset+0xff0f> + 80021b98: 00e7f7b3 and a5,a5,a4 + 80021b9c: 0ff5f593 andi a1,a1,255 + 80021ba0: 00b7e5b3 or a1,a5,a1 + 80021ba4: 00b6a023 sw a1,0(a3) + 80021ba8: 00008067 ret + 80021bac: 0015f593 andi a1,a1,1 + 80021bb0: 00100513 li a0,1 + 80021bb4: 001aa797 auipc a5,0x1aa + 80021bb8: 58b78023 sb a1,1408(a5) # 801cc134 <_ZL4IRQa> + 80021bbc: 994df06f j 80000d50 <_Z12X6502_IRQEndi> + +0000000080021bc0 <_ZL10M18IRQHooki>: + 80021bc0: 001aa797 auipc a5,0x1aa + 80021bc4: 5747c783 lbu a5,1396(a5) # 801cc134 <_ZL4IRQa> + 80021bc8: 02078063 beqz a5,80021be8 <_ZL10M18IRQHooki+0x28> + 80021bcc: 001aa717 auipc a4,0x1aa + 80021bd0: 58870713 addi a4,a4,1416 # 801cc154 <_ZL8IRQCount> + 80021bd4: 00072783 lw a5,0(a4) + 80021bd8: 00078863 beqz a5,80021be8 <_ZL10M18IRQHooki+0x28> + 80021bdc: 40a787bb subw a5,a5,a0 + 80021be0: 00f72023 sw a5,0(a4) + 80021be4: 00f05463 blez a5,80021bec <_ZL10M18IRQHooki+0x2c> + 80021be8: 00008067 ret + 80021bec: ff010113 addi sp,sp,-16 + 80021bf0: 00100513 li a0,1 + 80021bf4: 00113423 sd ra,8(sp) + 80021bf8: 940df0ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 80021bfc: 00813083 ld ra,8(sp) + 80021c00: 001aa797 auipc a5,0x1aa + 80021c04: 5407aa23 sw zero,1364(a5) # 801cc154 <_ZL8IRQCount> + 80021c08: 001aa797 auipc a5,0x1aa + 80021c0c: 52078623 sb zero,1324(a5) # 801cc134 <_ZL4IRQa> + 80021c10: 01010113 addi sp,sp,16 + 80021c14: 00008067 ret + +0000000080021c18 <_Z13Mapper18_InitP8CartInfo>: + 80021c18: fe010113 addi sp,sp,-32 + 80021c1c: 00113c23 sd ra,24(sp) + 80021c20: 00813823 sd s0,16(sp) + 80021c24: 00913423 sd s1,8(sp) + 80021c28: 01213023 sd s2,0(sp) + 80021c2c: 00000797 auipc a5,0x0 + 80021c30: d9c78793 addi a5,a5,-612 # 800219c8 <_ZL8M18Powerv> + 80021c34: 00f53023 sd a5,0(a0) + 80021c38: 00000797 auipc a5,0x0 + 80021c3c: d5878793 addi a5,a5,-680 # 80021990 <_ZL8M18Closev> + 80021c40: 00f53823 sd a5,16(a0) + 80021c44: 00000797 auipc a5,0x0 + 80021c48: f7c78793 addi a5,a5,-132 # 80021bc0 <_ZL10M18IRQHooki> + 80021c4c: 001aa717 auipc a4,0x1aa + 80021c50: eef73a23 sd a5,-268(a4) # 801cbb40 + 80021c54: 00000797 auipc a5,0x0 + 80021c58: c9078793 addi a5,a5,-880 # 800218e4 <_ZL12StateRestorei> + 80021c5c: 001aa497 auipc s1,0x1aa + 80021c60: 50048493 addi s1,s1,1280 # 801cc15c <_ZL8WRAMSIZE> + 80021c64: 00050413 mv s0,a0 + 80021c68: 001ab717 auipc a4,0x1ab + 80021c6c: 9ef73823 sd a5,-1552(a4) # 801cc658 + 80021c70: 00002537 lui a0,0x2 + 80021c74: 000027b7 lui a5,0x2 + 80021c78: 00f4a023 sw a5,0(s1) + 80021c7c: ff0f00ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80021c80: 0004a603 lw a2,0(s1) + 80021c84: 00050593 mv a1,a0 + 80021c88: 001aa917 auipc s2,0x1aa + 80021c8c: 4b090913 addi s2,s2,1200 # 801cc138 <_ZL4WRAM> + 80021c90: 00100693 li a3,1 + 80021c94: 01000513 li a0,16 + 80021c98: 00b93023 sd a1,0(s2) + 80021c9c: 859ee0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80021ca0: 0004a583 lw a1,0(s1) + 80021ca4: 00093503 ld a0,0(s2) + 80021ca8: 00023697 auipc a3,0x23 + 80021cac: 68068693 addi a3,a3,1664 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80021cb0: 00000613 li a2,0 + 80021cb4: b5cde0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80021cb8: 04c42783 lw a5,76(s0) + 80021cbc: 00078a63 beqz a5,80021cd0 <_Z13Mapper18_InitP8CartInfo+0xb8> + 80021cc0: 00093703 ld a4,0(s2) + 80021cc4: 0004a783 lw a5,0(s1) + 80021cc8: 00e43c23 sd a4,24(s0) + 80021ccc: 02f42c23 sw a5,56(s0) + 80021cd0: 01013403 ld s0,16(sp) + 80021cd4: 01813083 ld ra,24(sp) + 80021cd8: 00813483 ld s1,8(sp) + 80021cdc: 00013903 ld s2,0(sp) + 80021ce0: 00000693 li a3,0 + 80021ce4: 00000613 li a2,0 + 80021ce8: fff00593 li a1,-1 + 80021cec: 00029517 auipc a0,0x29 + 80021cf0: 75450513 addi a0,a0,1876 # 8004b440 <_ZL9StateRegs> + 80021cf4: 02010113 addi sp,sp,32 + 80021cf8: b18de06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080021cfc <_ZL6DoSawVv>: + 80021cfc: 001aa797 auipc a5,0x1aa + 80021d00: ed47a783 lw a5,-300(a5) # 801cbbd0 + 80021d04: 001aa517 auipc a0,0x1aa + 80021d08: e4452503 lw a0,-444(a0) # 801cbb48 + 80021d0c: 00f5053b addw a0,a0,a5 + 80021d10: fe010113 addi sp,sp,-32 + 80021d14: 0105151b slliw a0,a0,0x10 + 80021d18: 00913423 sd s1,8(sp) + 80021d1c: 02051513 slli a0,a0,0x20 + 80021d20: 000a6497 auipc s1,0xa6 + 80021d24: 90848493 addi s1,s1,-1784 # 800c7628 <_ZL4cvbc> + 80021d28: 00813823 sd s0,16(sp) + 80021d2c: 001aa597 auipc a1,0x1aa + 80021d30: ea05e583 lwu a1,-352(a1) # 801cbbcc + 80021d34: 02055513 srli a0,a0,0x20 + 80021d38: 0084a403 lw s0,8(s1) + 80021d3c: 00113c23 sd ra,24(sp) + 80021d40: 01213023 sd s2,0(sp) + 80021d44: 0e4180ef jal ra,80039e28 <__udivdi3> + 80021d48: 0005051b sext.w a0,a0 + 80021d4c: 02a45063 bge s0,a0,80021d6c <_ZL6DoSawVv+0x70> + 80021d50: 001aa717 auipc a4,0x1aa + 80021d54: 44070713 addi a4,a4,1088 # 801cc190 <_ZL5vpsg2> + 80021d58: 00274783 lbu a5,2(a4) + 80021d5c: 00a4a423 sw a0,8(s1) + 80021d60: 0187969b slliw a3,a5,0x18 + 80021d64: 4186d69b sraiw a3,a3,0x18 + 80021d68: 0006ce63 bltz a3,80021d84 <_ZL6DoSawVv+0x88> + 80021d6c: 01813083 ld ra,24(sp) + 80021d70: 01013403 ld s0,16(sp) + 80021d74: 00813483 ld s1,8(sp) + 80021d78: 00013903 ld s2,0(sp) + 80021d7c: 02010113 addi sp,sp,32 + 80021d80: 00008067 ret + 80021d84: 00174803 lbu a6,1(a4) + 80021d88: 00074e03 lbu t3,0(a4) + 80021d8c: 00001737 lui a4,0x1 + 80021d90: 0087979b slliw a5,a5,0x8 + 80021d94: f0070713 addi a4,a4,-256 # f00 <_entry_offset+0xf00> + 80021d98: 00e7f7b3 and a5,a5,a4 + 80021d9c: 00f8083b addw a6,a6,a5 + 80021da0: 001aaf97 auipc t6,0x1aa + 80021da4: 40cf8f93 addi t6,t6,1036 # 801cc1ac <_ZZL6DoSawVvE12saw1phaseacc> + 80021da8: 001aa497 auipc s1,0x1aa + 80021dac: 41048493 addi s1,s1,1040 # 801cc1b8 <_ZZL6DoSawVvE8phaseacc> + 80021db0: 001aa397 auipc t2,0x1aa + 80021db4: 40038393 addi t2,t2,1024 # 801cc1b0 <_ZZL6DoSawVvE2b3> + 80021db8: 001aa297 auipc t0,0x1aa + 80021dbc: 3fc28293 addi t0,t0,1020 # 801cc1b4 <_ZZL6DoSawVvE4duff> + 80021dc0: 0018081b addiw a6,a6,1 + 80021dc4: 000fa603 lw a2,0(t6) + 80021dc8: 0004a583 lw a1,0(s1) + 80021dcc: 0003c783 lbu a5,0(t2) + 80021dd0: 0002a883 lw a7,0(t0) + 80021dd4: 001aaf17 auipc t5,0x1aa + 80021dd8: df0f2f03 lw t5,-528(t5) # 801cbbc4 + 80021ddc: 0128181b slliw a6,a6,0x12 + 80021de0: 03fe7e13 andi t3,t3,63 + 80021de4: 00000913 li s2,0 + 80021de8: 00036e97 auipc t4,0x36 + 80021dec: be0e8e93 addi t4,t4,-1056 # 800579c8 + 80021df0: 00700313 li t1,7 + 80021df4: 0240006f j 80021e18 <_ZL6DoSawVv+0x11c> + 80021df8: 40445713 srai a4,s0,0x4 + 80021dfc: 00271713 slli a4,a4,0x2 + 80021e00: 00ee8733 add a4,t4,a4 + 80021e04: 00072683 lw a3,0(a4) + 80021e08: 0014041b addiw s0,s0,1 + 80021e0c: 011686bb addw a3,a3,a7 + 80021e10: 00d72023 sw a3,0(a4) + 80021e14: 04850e63 beq a0,s0,80021e70 <_ZL6DoSawVv+0x174> + 80021e18: 41e6063b subw a2,a2,t5 + 80021e1c: fcc04ee3 bgtz a2,80021df8 <_ZL6DoSawVv+0xfc> + 80021e20: 0017879b addiw a5,a5,1 + 80021e24: 0ff7f793 andi a5,a5,255 + 80021e28: 00c8063b addw a2,a6,a2 + 80021e2c: 06678863 beq a5,t1,80021e9c <_ZL6DoSawVv+0x1a0> + 80021e30: 00be05bb addw a1,t3,a1 + 80021e34: fec056e3 blez a2,80021e20 <_ZL6DoSawVv+0x124> + 80021e38: 00159893 slli a7,a1,0x1 + 80021e3c: 1f08f713 andi a4,a7,496 + 80021e40: 0017189b slliw a7,a4,0x1 + 80021e44: 00e888bb addw a7,a7,a4 + 80021e48: 40445713 srai a4,s0,0x4 + 80021e4c: 00271713 slli a4,a4,0x2 + 80021e50: 00ee8733 add a4,t4,a4 + 80021e54: 00072683 lw a3,0(a4) + 80021e58: 0028d89b srliw a7,a7,0x2 + 80021e5c: 0014041b addiw s0,s0,1 + 80021e60: 011686bb addw a3,a3,a7 + 80021e64: 00d72023 sw a3,0(a4) + 80021e68: 00100913 li s2,1 + 80021e6c: fa8516e3 bne a0,s0,80021e18 <_ZL6DoSawVv+0x11c> + 80021e70: 00cfa023 sw a2,0(t6) + 80021e74: ee090ce3 beqz s2,80021d6c <_ZL6DoSawVv+0x70> + 80021e78: 01813083 ld ra,24(sp) + 80021e7c: 01013403 ld s0,16(sp) + 80021e80: 00b4a023 sw a1,0(s1) + 80021e84: 00f38023 sb a5,0(t2) + 80021e88: 0112a023 sw a7,0(t0) + 80021e8c: 00813483 ld s1,8(sp) + 80021e90: 00013903 ld s2,0(sp) + 80021e94: 02010113 addi sp,sp,32 + 80021e98: 00008067 ret + 80021e9c: 00000793 li a5,0 + 80021ea0: 00000593 li a1,0 + 80021ea4: f6c05ee3 blez a2,80021e20 <_ZL6DoSawVv+0x124> + 80021ea8: f91ff06f j 80021e38 <_ZL6DoSawVv+0x13c> + +0000000080021eac <_ZL8DoSawVHQv>: + 80021eac: 001aa697 auipc a3,0x1aa + 80021eb0: 2e468693 addi a3,a3,740 # 801cc190 <_ZL5vpsg2> + 80021eb4: 0026c783 lbu a5,2(a3) + 80021eb8: 001aa317 auipc t1,0x1aa + 80021ebc: c9032303 lw t1,-880(t1) # 801cbb48 + 80021ec0: 001aa717 auipc a4,0x1aa + 80021ec4: d1072703 lw a4,-752(a4) # 801cbbd0 + 80021ec8: 00e3063b addw a2,t1,a4 + 80021ecc: 0187971b slliw a4,a5,0x18 + 80021ed0: 4187571b sraiw a4,a4,0x18 + 80021ed4: 00060313 mv t1,a2 + 80021ed8: 000a5e97 auipc t4,0xa5 + 80021edc: 750e8e93 addi t4,t4,1872 # 800c7628 <_ZL4cvbc> + 80021ee0: 00074663 bltz a4,80021eec <_ZL8DoSawVHQv+0x40> + 80021ee4: 006ea423 sw t1,8(t4) + 80021ee8: 00008067 ret + 80021eec: 008ea703 lw a4,8(t4) + 80021ef0: fec75ae3 bge a4,a2,80021ee4 <_ZL8DoSawVHQv+0x38> + 80021ef4: fe010113 addi sp,sp,-32 + 80021ef8: 00813c23 sd s0,24(sp) + 80021efc: 01213423 sd s2,8(sp) + 80021f00: 00913823 sd s1,16(sp) + 80021f04: 0016c383 lbu t2,1(a3) + 80021f08: 0006c483 lbu s1,0(a3) + 80021f0c: fff6051b addiw a0,a2,-1 + 80021f10: 000016b7 lui a3,0x1 + 80021f14: 40e5053b subw a0,a0,a4 + 80021f18: 0087979b slliw a5,a5,0x8 + 80021f1c: f0068693 addi a3,a3,-256 # f00 <_entry_offset+0xf00> + 80021f20: 0013839b addiw t2,t2,1 + 80021f24: 02051513 slli a0,a0,0x20 + 80021f28: 00d7f7b3 and a5,a5,a3 + 80021f2c: 00f387bb addw a5,t2,a5 + 80021f30: 02055513 srli a0,a0,0x20 + 80021f34: 00e50533 add a0,a0,a4 + 80021f38: 0017939b slliw t2,a5,0x1 + 80021f3c: 00271713 slli a4,a4,0x2 + 80021f40: 0003b797 auipc a5,0x3b + 80021f44: a8878793 addi a5,a5,-1400 # 8005c9c8 + 80021f48: 001aa297 auipc t0,0x1aa + 80021f4c: 27828293 addi t0,t0,632 # 801cc1c0 <_ZZL8DoSawVHQvE8phaseacc> + 80021f50: 000a5f17 auipc t5,0xa5 + 80021f54: 700f0f13 addi t5,t5,1792 # 800c7650 <_ZL6vcount> + 80021f58: 001aaf97 auipc t6,0x1aa + 80021f5c: 264f8f93 addi t6,t6,612 # 801cc1bc <_ZZL8DoSawVHQvE2b3> + 80021f60: 00251513 slli a0,a0,0x2 + 80021f64: 00f70733 add a4,a4,a5 + 80021f68: 00002e37 lui t3,0x2 + 80021f6c: 0003b797 auipc a5,0x3b + 80021f70: a6078793 addi a5,a5,-1440 # 8005c9cc + 80021f74: 0002a883 lw a7,0(t0) + 80021f78: 008f2583 lw a1,8(t5) + 80021f7c: 000fc803 lbu a6,0(t6) + 80021f80: 03f4f493 andi s1,s1,63 + 80021f84: 00f50533 add a0,a0,a5 + 80021f88: 00000413 li s0,0 + 80021f8c: f00e0e13 addi t3,t3,-256 # 1f00 <_entry_offset+0x1f00> + 80021f90: 00700913 li s2,7 + 80021f94: 00c0006f j 80021fa0 <_ZL8DoSawVHQv+0xf4> + 80021f98: 00470713 addi a4,a4,4 + 80021f9c: 04e50863 beq a0,a4,80021fec <_ZL8DoSawVHQv+0x140> + 80021fa0: 00589793 slli a5,a7,0x5 + 80021fa4: 01c7f6b3 and a3,a5,t3 + 80021fa8: 0016979b slliw a5,a3,0x1 + 80021fac: 00072603 lw a2,0(a4) + 80021fb0: 00d787bb addw a5,a5,a3 + 80021fb4: 0017979b slliw a5,a5,0x1 + 80021fb8: 4037d79b sraiw a5,a5,0x3 + 80021fbc: 00f607bb addw a5,a2,a5 + 80021fc0: 00f72023 sw a5,0(a4) + 80021fc4: fff5859b addiw a1,a1,-1 + 80021fc8: 0018069b addiw a3,a6,1 + 80021fcc: fcb046e3 bgtz a1,80021f98 <_ZL8DoSawVHQv+0xec> + 80021fd0: 0ff6f813 andi a6,a3,255 + 80021fd4: 05280063 beq a6,s2,80022014 <_ZL8DoSawVHQv+0x168> + 80021fd8: 00470713 addi a4,a4,4 + 80021fdc: 011488bb addw a7,s1,a7 + 80021fe0: 00038593 mv a1,t2 + 80021fe4: 00100413 li s0,1 + 80021fe8: fae51ce3 bne a0,a4,80021fa0 <_ZL8DoSawVHQv+0xf4> + 80021fec: 00bf2423 sw a1,8(t5) + 80021ff0: 00040663 beqz s0,80021ffc <_ZL8DoSawVHQv+0x150> + 80021ff4: 0112a023 sw a7,0(t0) + 80021ff8: 010f8023 sb a6,0(t6) + 80021ffc: 01813403 ld s0,24(sp) + 80022000: 006ea423 sw t1,8(t4) + 80022004: 01013483 ld s1,16(sp) + 80022008: 00813903 ld s2,8(sp) + 8002200c: 02010113 addi sp,sp,32 + 80022010: 00008067 ret + 80022014: 00038593 mv a1,t2 + 80022018: 00000813 li a6,0 + 8002201c: 00100413 li s0,1 + 80022020: 00000893 li a7,0 + 80022024: f75ff06f j 80021f98 <_ZL8DoSawVHQv+0xec> + +0000000080022028 <_Z10VRC6SyncHQi>: + 80022028: 000a5797 auipc a5,0xa5 + 8002202c: 60078793 addi a5,a5,1536 # 800c7628 <_ZL4cvbc> + 80022030: 00a7a023 sw a0,0(a5) + 80022034: 00a7a223 sw a0,4(a5) + 80022038: 00a7a423 sw a0,8(a5) + 8002203c: 00008067 ret + +0000000080022040 <_ZL4Syncv>: + 80022040: fe010113 addi sp,sp,-32 + 80022044: 00113c23 sd ra,24(sp) + 80022048: 00813823 sd s0,16(sp) + 8002204c: 00913423 sd s1,8(sp) + 80022050: 01213023 sd s2,0(sp) + 80022054: 001aa797 auipc a5,0x1aa + 80022058: 12c7c783 lbu a5,300(a5) # 801cc180 <_ZL4is26> + 8002205c: 0a079063 bnez a5,800220fc <_ZL4Syncv+0xbc> + 80022060: 001aa417 auipc s0,0x1aa + 80022064: 11040413 addi s0,s0,272 # 801cc170 <_ZL3prg> + 80022068: 00044583 lbu a1,0(s0) + 8002206c: 00008537 lui a0,0x8 + 80022070: 001aa497 auipc s1,0x1aa + 80022074: 0f848493 addi s1,s1,248 # 801cc168 <_ZL3chr> + 80022078: be1ee0ef jal ra,80010c58 <_Z8setprg16jj> + 8002207c: 00144583 lbu a1,1(s0) + 80022080: 0000c537 lui a0,0xc + 80022084: 00000413 li s0,0 + 80022088: a15ee0ef jal ra,80010a9c <_Z7setprg8jj> + 8002208c: fff00593 li a1,-1 + 80022090: 0000e537 lui a0,0xe + 80022094: a09ee0ef jal ra,80010a9c <_Z7setprg8jj> + 80022098: 00002937 lui s2,0x2 + 8002209c: 0004c583 lbu a1,0(s1) + 800220a0: 00040513 mv a0,s0 + 800220a4: 4004041b addiw s0,s0,1024 + 800220a8: dfdee0ef jal ra,80010ea4 <_Z7setchr1jj> + 800220ac: 00148493 addi s1,s1,1 + 800220b0: ff2416e3 bne s0,s2,8002209c <_ZL4Syncv+0x5c> + 800220b4: 001aa797 auipc a5,0x1aa + 800220b8: 0cd7c783 lbu a5,205(a5) # 801cc181 <_ZL4mirr> + 800220bc: 0037f793 andi a5,a5,3 + 800220c0: 00200713 li a4,2 + 800220c4: 00200513 li a0,2 + 800220c8: 00e78e63 beq a5,a4,800220e4 <_ZL4Syncv+0xa4> + 800220cc: 00300713 li a4,3 + 800220d0: 00300513 li a0,3 + 800220d4: 00e78863 beq a5,a4,800220e4 <_ZL4Syncv+0xa4> + 800220d8: 00100713 li a4,1 + 800220dc: 00100513 li a0,1 + 800220e0: 02e78863 beq a5,a4,80022110 <_ZL4Syncv+0xd0> + 800220e4: 01013403 ld s0,16(sp) + 800220e8: 01813083 ld ra,24(sp) + 800220ec: 00813483 ld s1,8(sp) + 800220f0: 00013903 ld s2,0(sp) + 800220f4: 02010113 addi sp,sp,32 + 800220f8: f51ee06f j 80011048 <_Z9setmirrori> + 800220fc: 00000613 li a2,0 + 80022100: 000065b7 lui a1,0x6 + 80022104: 01000513 li a0,16 + 80022108: fe0ee0ef jal ra,800108e8 <_Z8setprg8rijj> + 8002210c: f55ff06f j 80022060 <_ZL4Syncv+0x20> + 80022110: 01013403 ld s0,16(sp) + 80022114: 01813083 ld ra,24(sp) + 80022118: 00813483 ld s1,8(sp) + 8002211c: 00013903 ld s2,0(sp) + 80022120: 00000513 li a0,0 + 80022124: 02010113 addi sp,sp,32 + 80022128: f21ee06f j 80011048 <_Z9setmirrori> + +000000008002212c <_ZL12StateRestorei>: + 8002212c: f15ff06f j 80022040 <_ZL4Syncv> + +0000000080022130 <_ZL9VRC6Powerv>: + 80022130: ff010113 addi sp,sp,-16 + 80022134: 00113423 sd ra,8(sp) + 80022138: 00813023 sd s0,0(sp) + 8002213c: f05ff0ef jal ra,80022040 <_ZL4Syncv> + 80022140: 00010437 lui s0,0x10 + 80022144: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80022148: fffee617 auipc a2,0xfffee + 8002214c: 51860613 addi a2,a2,1304 # 80010660 <_Z6CartBRj> + 80022150: 00006537 lui a0,0x6 + 80022154: 0c9110ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80022158: 000085b7 lui a1,0x8 + 8002215c: fffee617 auipc a2,0xfffee + 80022160: 53060613 addi a2,a2,1328 # 8001068c <_Z6CartBWjh> + 80022164: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80022168: 00006537 lui a0,0x6 + 8002216c: 1bd110ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80022170: fff40593 addi a1,s0,-1 + 80022174: 00000617 auipc a2,0x0 + 80022178: 27860613 addi a2,a2,632 # 800223ec <_ZL9VRC6Writejh> + 8002217c: 00008537 lui a0,0x8 + 80022180: 1a9110ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80022184: 00013403 ld s0,0(sp) + 80022188: 00813083 ld ra,8(sp) + 8002218c: 001aa517 auipc a0,0x1aa + 80022190: 01c52503 lw a0,28(a0) # 801cc1a8 <_ZL8WRAMSIZE> + 80022194: 001aa617 auipc a2,0x1aa + 80022198: fe463603 ld a2,-28(a2) # 801cc178 <_ZL4WRAM> + 8002219c: 000065b7 lui a1,0x6 + 800221a0: 00a5551b srliw a0,a0,0xa + 800221a4: 01010113 addi sp,sp,16 + 800221a8: e6ddd06f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +00000000800221ac <_ZL8VRC6_ESIv>: + 800221ac: ff010113 addi sp,sp,-16 + 800221b0: 00035797 auipc a5,0x35 + 800221b4: 7d878793 addi a5,a5,2008 # 80057988 + 800221b8: 00113423 sd ra,8(sp) + 800221bc: 00000717 auipc a4,0x0 + 800221c0: ff070713 addi a4,a4,-16 # 800221ac <_ZL8VRC6_ESIv> + 800221c4: 02e7b023 sd a4,32(a5) + 800221c8: 00001717 auipc a4,0x1 + 800221cc: e2470713 addi a4,a4,-476 # 80022fec <_Z9VRC6Soundi> + 800221d0: 00e7b023 sd a4,0(a5) + 800221d4: 00000717 auipc a4,0x0 + 800221d8: 7cc70713 addi a4,a4,1996 # 800229a0 <_Z11VRC6SoundHQv> + 800221dc: 00e7b823 sd a4,16(a5) + 800221e0: 00c00613 li a2,12 + 800221e4: 00000717 auipc a4,0x0 + 800221e8: e4470713 addi a4,a4,-444 # 80022028 <_Z10VRC6SyncHQi> + 800221ec: 00000593 li a1,0 + 800221f0: 000a5517 auipc a0,0xa5 + 800221f4: 43850513 addi a0,a0,1080 # 800c7628 <_ZL4cvbc> + 800221f8: 00e7bc23 sd a4,24(a5) + 800221fc: 02d190ef jal ra,8003ba28 + 80022200: 00c00613 li a2,12 + 80022204: 00000593 li a1,0 + 80022208: 000a5517 auipc a0,0xa5 + 8002220c: 44850513 addi a0,a0,1096 # 800c7650 <_ZL6vcount> + 80022210: 019190ef jal ra,8003ba28 + 80022214: 00800613 li a2,8 + 80022218: 00000593 li a1,0 + 8002221c: 001aa517 auipc a0,0x1aa + 80022220: f7c50513 addi a0,a0,-132 # 801cc198 <_ZL6dcount> + 80022224: 005190ef jal ra,8003ba28 + 80022228: 001a7797 auipc a5,0x1a7 + 8002222c: ab878793 addi a5,a5,-1352 # 801c8ce0 + 80022230: 03c7a703 lw a4,60(a5) + 80022234: 0a070263 beqz a4,800222d8 <_ZL8VRC6_ESIv+0x12c> + 80022238: 0407a783 lw a5,64(a5) + 8002223c: 04f05863 blez a5,8002228c <_ZL8VRC6_ESIv+0xe0> + 80022240: 000a5797 auipc a5,0xa5 + 80022244: 3f878793 addi a5,a5,1016 # 800c7638 <_ZL4sfun> + 80022248: 00000717 auipc a4,0x0 + 8002224c: 43870713 addi a4,a4,1080 # 80022680 <_ZL8DoSQV1HQv> + 80022250: 00e7b023 sd a4,0(a5) + 80022254: 00000717 auipc a4,0x0 + 80022258: 5bc70713 addi a4,a4,1468 # 80022810 <_ZL8DoSQV2HQv> + 8002225c: 00813083 ld ra,8(sp) + 80022260: 00e7b423 sd a4,8(a5) + 80022264: 00000717 auipc a4,0x0 + 80022268: c4870713 addi a4,a4,-952 # 80021eac <_ZL8DoSawVHQv> + 8002226c: 00e7b823 sd a4,16(a5) + 80022270: 00000693 li a3,0 + 80022274: 00000613 li a2,0 + 80022278: fff00593 li a1,-1 + 8002227c: 0002b517 auipc a0,0x2b + 80022280: b7450513 addi a0,a0,-1164 # 8004cdf0 <_ZL10SStateRegs> + 80022284: 01010113 addi sp,sp,16 + 80022288: d89dd06f j 80000010 <_Z10AddExStatePvjiPKc> + 8002228c: 000a5797 auipc a5,0xa5 + 80022290: 3ac78793 addi a5,a5,940 # 800c7638 <_ZL4sfun> + 80022294: 00001717 auipc a4,0x1 + 80022298: a2070713 addi a4,a4,-1504 # 80022cb4 <_ZL6DoSQV1v> + 8002229c: 00e7b023 sd a4,0(a5) + 800222a0: 00001717 auipc a4,0x1 + 800222a4: bb070713 addi a4,a4,-1104 # 80022e50 <_ZL6DoSQV2v> + 800222a8: 00813083 ld ra,8(sp) + 800222ac: 00e7b423 sd a4,8(a5) + 800222b0: 00000717 auipc a4,0x0 + 800222b4: a4c70713 addi a4,a4,-1460 # 80021cfc <_ZL6DoSawVv> + 800222b8: 00e7b823 sd a4,16(a5) + 800222bc: 00000693 li a3,0 + 800222c0: 00000613 li a2,0 + 800222c4: fff00593 li a1,-1 + 800222c8: 0002b517 auipc a0,0x2b + 800222cc: b2850513 addi a0,a0,-1240 # 8004cdf0 <_ZL10SStateRegs> + 800222d0: 01010113 addi sp,sp,16 + 800222d4: d3ddd06f j 80000010 <_Z10AddExStatePvjiPKc> + 800222d8: 01800613 li a2,24 + 800222dc: 00000593 li a1,0 + 800222e0: 000a5517 auipc a0,0xa5 + 800222e4: 35850513 addi a0,a0,856 # 800c7638 <_ZL4sfun> + 800222e8: 740190ef jal ra,8003ba28 + 800222ec: 00813083 ld ra,8(sp) + 800222f0: 00000693 li a3,0 + 800222f4: 00000613 li a2,0 + 800222f8: fff00593 li a1,-1 + 800222fc: 0002b517 auipc a0,0x2b + 80022300: af450513 addi a0,a0,-1292 # 8004cdf0 <_ZL10SStateRegs> + 80022304: 01010113 addi sp,sp,16 + 80022308: d09dd06f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002230c <_ZL9VRC6Closev>: + 8002230c: 001aa517 auipc a0,0x1aa + 80022310: e6c53503 ld a0,-404(a0) # 801cc178 <_ZL4WRAM> + 80022314: 02050263 beqz a0,80022338 <_ZL9VRC6Closev+0x2c> + 80022318: ff010113 addi sp,sp,-16 + 8002231c: 00113423 sd ra,8(sp) + 80022320: a20f00ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80022324: 00813083 ld ra,8(sp) + 80022328: 001aa797 auipc a5,0x1aa + 8002232c: e407b823 sd zero,-432(a5) # 801cc178 <_ZL4WRAM> + 80022330: 01010113 addi sp,sp,16 + 80022334: 00008067 ret + 80022338: 001aa797 auipc a5,0x1aa + 8002233c: e407b023 sd zero,-448(a5) # 801cc178 <_ZL4WRAM> + 80022340: 00008067 ret + +0000000080022344 <_ZL6VRC6SWjh>: + 80022344: 0000f7b7 lui a5,0xf + 80022348: 00378793 addi a5,a5,3 # f003 <_entry_offset+0xf003> + 8002234c: 00f577b3 and a5,a0,a5 + 80022350: ffff7737 lui a4,0xffff7 + 80022354: 00f7073b addw a4,a4,a5 + 80022358: 00200693 li a3,2 + 8002235c: 02e6ec63 bltu a3,a4,80022394 <_ZL6VRC6SWjh+0x50> + 80022360: 00357513 andi a0,a0,3 + 80022364: 001aa797 auipc a5,0x1aa + 80022368: e2478793 addi a5,a5,-476 # 801cc188 <_ZL5vpsg1> + 8002236c: 00a78533 add a0,a5,a0 + 80022370: 00b50023 sb a1,0(a0) + 80022374: 000a5317 auipc t1,0xa5 + 80022378: 2c433303 ld t1,708(t1) # 800c7638 <_ZL4sfun> + 8002237c: 00030a63 beqz t1,80022390 <_ZL6VRC6SWjh+0x4c> + 80022380: 00030067 jr t1 + 80022384: ffff5737 lui a4,0xffff5 + 80022388: 00f707bb addw a5,a4,a5 + 8002238c: 02f6fe63 bgeu a3,a5,800223c8 <_ZL6VRC6SWjh+0x84> + 80022390: 00008067 ret + 80022394: ffff6737 lui a4,0xffff6 + 80022398: 00f7073b addw a4,a4,a5 + 8002239c: fee6e4e3 bltu a3,a4,80022384 <_ZL6VRC6SWjh+0x40> + 800223a0: 00357513 andi a0,a0,3 + 800223a4: 00456513 ori a0,a0,4 + 800223a8: 001aa797 auipc a5,0x1aa + 800223ac: de078793 addi a5,a5,-544 # 801cc188 <_ZL5vpsg1> + 800223b0: 00a78533 add a0,a5,a0 + 800223b4: 00b50023 sb a1,0(a0) + 800223b8: 000a5317 auipc t1,0xa5 + 800223bc: 28833303 ld t1,648(t1) # 800c7640 <_ZL4sfun+0x8> + 800223c0: fc0308e3 beqz t1,80022390 <_ZL6VRC6SWjh+0x4c> + 800223c4: 00030067 jr t1 + 800223c8: 00357513 andi a0,a0,3 + 800223cc: 001aa797 auipc a5,0x1aa + 800223d0: dc478793 addi a5,a5,-572 # 801cc190 <_ZL5vpsg2> + 800223d4: 00a78533 add a0,a5,a0 + 800223d8: 00b50023 sb a1,0(a0) + 800223dc: 000a5317 auipc t1,0xa5 + 800223e0: 26c33303 ld t1,620(t1) # 800c7648 <_ZL4sfun+0x10> + 800223e4: f8031ee3 bnez t1,80022380 <_ZL6VRC6SWjh+0x3c> + 800223e8: fa9ff06f j 80022390 <_ZL6VRC6SWjh+0x4c> + +00000000800223ec <_ZL9VRC6Writejh>: + 800223ec: 001aa797 auipc a5,0x1aa + 800223f0: d947c783 lbu a5,-620(a5) # 801cc180 <_ZL4is26> + 800223f4: 02078463 beqz a5,8002241c <_ZL9VRC6Writejh+0x30> + 800223f8: 0015579b srliw a5,a0,0x1 + 800223fc: 0015171b slliw a4,a0,0x1 + 80022400: 000106b7 lui a3,0x10 + 80022404: 0017f793 andi a5,a5,1 + 80022408: 00277713 andi a4,a4,2 + 8002240c: ffc68693 addi a3,a3,-4 # fffc <_entry_offset+0xfffc> + 80022410: 00d57533 and a0,a0,a3 + 80022414: 00e7e7b3 or a5,a5,a4 + 80022418: 00f56533 or a0,a0,a5 + 8002241c: ffff7737 lui a4,0xffff7 + 80022420: 000027b7 lui a5,0x2 + 80022424: 00a7073b addw a4,a4,a0 + 80022428: 00278793 addi a5,a5,2 # 2002 <_entry_offset+0x2002> + 8002242c: 0ee7f663 bgeu a5,a4,80022518 <_ZL9VRC6Writejh+0x12c> + 80022430: 0000f7b7 lui a5,0xf + 80022434: 00378713 addi a4,a5,3 # f003 <_entry_offset+0xf003> + 80022438: 00e57533 and a0,a0,a4 + 8002243c: 0000e737 lui a4,0xe + 80022440: 12e50c63 beq a0,a4,80022578 <_ZL9VRC6Writejh+0x18c> + 80022444: 02a76663 bltu a4,a0,80022470 <_ZL9VRC6Writejh+0x84> + 80022448: 0000d7b7 lui a5,0xd + 8002244c: 14f50463 beq a0,a5,80022594 <_ZL9VRC6Writejh+0x1a8> + 80022450: 06a7f663 bgeu a5,a0,800224bc <_ZL9VRC6Writejh+0xd0> + 80022454: 00278713 addi a4,a5,2 # d002 <_entry_offset+0xd002> + 80022458: 14e50463 beq a0,a4,800225a0 <_ZL9VRC6Writejh+0x1b4> + 8002245c: 00378713 addi a4,a5,3 + 80022460: 06e51e63 bne a0,a4,800224dc <_ZL9VRC6Writejh+0xf0> + 80022464: 001aa797 auipc a5,0x1aa + 80022468: d0b783a3 sb a1,-761(a5) # 801cc16b <_ZL3chr+0x3> + 8002246c: bd5ff06f j 80022040 <_ZL4Syncv> + 80022470: 10f50a63 beq a0,a5,80022584 <_ZL9VRC6Writejh+0x198> + 80022474: 02a7f663 bgeu a5,a0,800224a0 <_ZL9VRC6Writejh+0xb4> + 80022478: 00178713 addi a4,a5,1 + 8002247c: 0ae50063 beq a0,a4,8002251c <_ZL9VRC6Writejh+0x130> + 80022480: 00278793 addi a5,a5,2 + 80022484: 12f51663 bne a0,a5,800225b0 <_ZL9VRC6Writejh+0x1c4> + 80022488: 001aa797 auipc a5,0x1aa + 8002248c: ceb7c783 lbu a5,-789(a5) # 801cc173 <_ZL4IRQd> + 80022490: 00100513 li a0,1 + 80022494: 001aa717 auipc a4,0x1aa + 80022498: ccf70f23 sb a5,-802(a4) # 801cc172 <_ZL4IRQa> + 8002249c: 8b5de06f j 80000d50 <_Z12X6502_IRQEndi> + 800224a0: 00270793 addi a5,a4,2 + 800224a4: 0af50a63 beq a0,a5,80022558 <_ZL9VRC6Writejh+0x16c> + 800224a8: 00370793 addi a5,a4,3 + 800224ac: 04f51263 bne a0,a5,800224f0 <_ZL9VRC6Writejh+0x104> + 800224b0: 001aa797 auipc a5,0x1aa + 800224b4: cab78fa3 sb a1,-833(a5) # 801cc16f <_ZL3chr+0x7> + 800224b8: b89ff06f j 80022040 <_ZL4Syncv> + 800224bc: 0000b7b7 lui a5,0xb + 800224c0: 00378793 addi a5,a5,3 # b003 <_entry_offset+0xb003> + 800224c4: 0af50063 beq a0,a5,80022564 <_ZL9VRC6Writejh+0x178> + 800224c8: 0000c7b7 lui a5,0xc + 800224cc: 02f51c63 bne a0,a5,80022504 <_ZL9VRC6Writejh+0x118> + 800224d0: 001aa797 auipc a5,0x1aa + 800224d4: cab780a3 sb a1,-863(a5) # 801cc171 <_ZL3prg+0x1> + 800224d8: b69ff06f j 80022040 <_ZL4Syncv> + 800224dc: 00178793 addi a5,a5,1 + 800224e0: 0cf51663 bne a0,a5,800225ac <_ZL9VRC6Writejh+0x1c0> + 800224e4: 001aa797 auipc a5,0x1aa + 800224e8: c8b782a3 sb a1,-891(a5) # 801cc169 <_ZL3chr+0x1> + 800224ec: b55ff06f j 80022040 <_ZL4Syncv> + 800224f0: 00170713 addi a4,a4,1 + 800224f4: 0ce51263 bne a0,a4,800225b8 <_ZL9VRC6Writejh+0x1cc> + 800224f8: 001aa797 auipc a5,0x1aa + 800224fc: c6b78aa3 sb a1,-907(a5) # 801cc16d <_ZL3chr+0x5> + 80022500: b41ff06f j 80022040 <_ZL4Syncv> + 80022504: 000087b7 lui a5,0x8 + 80022508: 0af51663 bne a0,a5,800225b4 <_ZL9VRC6Writejh+0x1c8> + 8002250c: 001aa797 auipc a5,0x1aa + 80022510: c6b78223 sb a1,-924(a5) # 801cc170 <_ZL3prg> + 80022514: b2dff06f j 80022040 <_ZL4Syncv> + 80022518: e2dff06f j 80022344 <_ZL6VRC6SWjh> + 8002251c: 0025f793 andi a5,a1,2 + 80022520: 0015f593 andi a1,a1,1 + 80022524: 001aa717 auipc a4,0x1aa + 80022528: c4f70723 sb a5,-946(a4) # 801cc172 <_ZL4IRQa> + 8002252c: 001aa717 auipc a4,0x1aa + 80022530: c4b703a3 sb a1,-953(a4) # 801cc173 <_ZL4IRQd> + 80022534: 00078a63 beqz a5,80022548 <_ZL9VRC6Writejh+0x15c> + 80022538: 001aa797 auipc a5,0x1aa + 8002253c: c6c7c783 lbu a5,-916(a5) # 801cc1a4 <_ZL8IRQLatch> + 80022540: 001aa717 auipc a4,0x1aa + 80022544: c6f72023 sw a5,-928(a4) # 801cc1a0 <_ZL8IRQCount> + 80022548: 00100513 li a0,1 + 8002254c: 001aa797 auipc a5,0x1aa + 80022550: c007aa23 sw zero,-1004(a5) # 801cc160 <_ZL10CycleCount> + 80022554: ffcde06f j 80000d50 <_Z12X6502_IRQEndi> + 80022558: 001aa797 auipc a5,0x1aa + 8002255c: c0b78b23 sb a1,-1002(a5) # 801cc16e <_ZL3chr+0x6> + 80022560: ae1ff06f j 80022040 <_ZL4Syncv> + 80022564: 4025d59b sraiw a1,a1,0x2 + 80022568: 0035f593 andi a1,a1,3 + 8002256c: 001aa797 auipc a5,0x1aa + 80022570: c0b78aa3 sb a1,-1003(a5) # 801cc181 <_ZL4mirr> + 80022574: acdff06f j 80022040 <_ZL4Syncv> + 80022578: 001aa797 auipc a5,0x1aa + 8002257c: beb78a23 sb a1,-1036(a5) # 801cc16c <_ZL3chr+0x4> + 80022580: ac1ff06f j 80022040 <_ZL4Syncv> + 80022584: 00100513 li a0,1 + 80022588: 001aa797 auipc a5,0x1aa + 8002258c: c0b78e23 sb a1,-996(a5) # 801cc1a4 <_ZL8IRQLatch> + 80022590: fc0de06f j 80000d50 <_Z12X6502_IRQEndi> + 80022594: 001aa797 auipc a5,0x1aa + 80022598: bcb78a23 sb a1,-1068(a5) # 801cc168 <_ZL3chr> + 8002259c: aa5ff06f j 80022040 <_ZL4Syncv> + 800225a0: 001aa797 auipc a5,0x1aa + 800225a4: bcb78523 sb a1,-1078(a5) # 801cc16a <_ZL3chr+0x2> + 800225a8: a99ff06f j 80022040 <_ZL4Syncv> + 800225ac: 00008067 ret + 800225b0: 00008067 ret + 800225b4: 00008067 ret + 800225b8: 00008067 ret + +00000000800225bc <_ZL11VRC6IRQHooki>: + 800225bc: 001aa797 auipc a5,0x1aa + 800225c0: bb67c783 lbu a5,-1098(a5) # 801cc172 <_ZL4IRQa> + 800225c4: 0a078c63 beqz a5,8002267c <_ZL11VRC6IRQHooki+0xc0> + 800225c8: fd010113 addi sp,sp,-48 + 800225cc: 01213823 sd s2,16(sp) + 800225d0: 001aa917 auipc s2,0x1aa + 800225d4: b9090913 addi s2,s2,-1136 # 801cc160 <_ZL10CycleCount> + 800225d8: 00092703 lw a4,0(s2) + 800225dc: 0015179b slliw a5,a0,0x1 + 800225e0: 00a7853b addw a0,a5,a0 + 800225e4: 00e507bb addw a5,a0,a4 + 800225e8: 02813023 sd s0,32(sp) + 800225ec: 00913c23 sd s1,24(sp) + 800225f0: 01313423 sd s3,8(sp) + 800225f4: 01413023 sd s4,0(sp) + 800225f8: 02113423 sd ra,40(sp) + 800225fc: 00f92023 sw a5,0(s2) + 80022600: 001aa997 auipc s3,0x1aa + 80022604: ba098993 addi s3,s3,-1120 # 801cc1a0 <_ZL8IRQCount> + 80022608: 15400413 li s0,340 + 8002260c: 10000493 li s1,256 + 80022610: 001aaa17 auipc s4,0x1aa + 80022614: b94a0a13 addi s4,s4,-1132 # 801cc1a4 <_ZL8IRQLatch> + 80022618: 0009a703 lw a4,0(s3) + 8002261c: 00000693 li a3,0 + 80022620: 02f45863 bge s0,a5,80022650 <_ZL11VRC6IRQHooki+0x94> + 80022624: 0017071b addiw a4,a4,1 + 80022628: eab7879b addiw a5,a5,-341 + 8002262c: 00100693 li a3,1 + 80022630: fe9718e3 bne a4,s1,80022620 <_ZL11VRC6IRQHooki+0x64> + 80022634: 000a4703 lbu a4,0(s4) + 80022638: 00100513 li a0,1 + 8002263c: 00f92023 sw a5,0(s2) + 80022640: 00e9a023 sw a4,0(s3) + 80022644: ef4de0ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 80022648: 00092783 lw a5,0(s2) + 8002264c: fcdff06f j 80022618 <_ZL11VRC6IRQHooki+0x5c> + 80022650: 00068663 beqz a3,8002265c <_ZL11VRC6IRQHooki+0xa0> + 80022654: 00f92023 sw a5,0(s2) + 80022658: 00e9a023 sw a4,0(s3) + 8002265c: 02813083 ld ra,40(sp) + 80022660: 02013403 ld s0,32(sp) + 80022664: 01813483 ld s1,24(sp) + 80022668: 01013903 ld s2,16(sp) + 8002266c: 00813983 ld s3,8(sp) + 80022670: 00013a03 ld s4,0(sp) + 80022674: 03010113 addi sp,sp,48 + 80022678: 00008067 ret + 8002267c: 00008067 ret + +0000000080022680 <_ZL8DoSQV1HQv>: + 80022680: 001aa517 auipc a0,0x1aa + 80022684: b0850513 addi a0,a0,-1272 # 801cc188 <_ZL5vpsg1> + 80022688: 00254603 lbu a2,2(a0) + 8002268c: 001a9717 auipc a4,0x1a9 + 80022690: 4bc72703 lw a4,1212(a4) # 801cbb48 + 80022694: 001a9797 auipc a5,0x1a9 + 80022698: 53c7a783 lw a5,1340(a5) # 801cbbd0 + 8002269c: 00f7083b addw a6,a4,a5 + 800226a0: 0186179b slliw a5,a2,0x18 + 800226a4: 4187d79b sraiw a5,a5,0x18 + 800226a8: 00080713 mv a4,a6 + 800226ac: 000a5317 auipc t1,0xa5 + 800226b0: f7c30313 addi t1,t1,-132 # 800c7628 <_ZL4cvbc> + 800226b4: 0007c663 bltz a5,800226c0 <_ZL8DoSQV1HQv+0x40> + 800226b8: 00e32023 sw a4,0(t1) + 800226bc: 00008067 ret + 800226c0: 00054583 lbu a1,0(a0) + 800226c4: 000018b7 lui a7,0x1 + 800226c8: f0088893 addi a7,a7,-256 # f00 <_entry_offset+0xf00> + 800226cc: 0085969b slliw a3,a1,0x8 + 800226d0: 0116f7b3 and a5,a3,a7 + 800226d4: 0017969b slliw a3,a5,0x1 + 800226d8: 00f686bb addw a3,a3,a5 + 800226dc: 01859e1b slliw t3,a1,0x18 + 800226e0: 0016969b slliw a3,a3,0x1 + 800226e4: 000a5317 auipc t1,0xa5 + 800226e8: f4430313 addi t1,t1,-188 # 800c7628 <_ZL4cvbc> + 800226ec: 418e5e1b sraiw t3,t3,0x18 + 800226f0: 00032783 lw a5,0(t1) + 800226f4: 0005859b sext.w a1,a1 + 800226f8: 4036d69b sraiw a3,a3,0x3 + 800226fc: 0c0e4063 bltz t3,800227bc <_ZL8DoSQV1HQv+0x13c> + 80022700: 4045d59b sraiw a1,a1,0x4 + 80022704: 0075fe13 andi t3,a1,7 + 80022708: fb07d8e3 bge a5,a6,800226b8 <_ZL8DoSQV1HQv+0x38> + 8002270c: fff8081b addiw a6,a6,-1 + 80022710: 00154503 lbu a0,1(a0) + 80022714: 40f8083b subw a6,a6,a5 + 80022718: 0086161b slliw a2,a2,0x8 + 8002271c: 02081813 slli a6,a6,0x20 + 80022720: 01167633 and a2,a2,a7 + 80022724: 001aa297 auipc t0,0x1aa + 80022728: a7428293 addi t0,t0,-1420 # 801cc198 <_ZL6dcount> + 8002272c: 000a5f97 auipc t6,0xa5 + 80022730: f24f8f93 addi t6,t6,-220 # 800c7650 <_ZL6vcount> + 80022734: 02085813 srli a6,a6,0x20 + 80022738: 00f80833 add a6,a6,a5 + 8002273c: 00a66633 or a2,a2,a0 + 80022740: 00279793 slli a5,a5,0x2 + 80022744: 0003a517 auipc a0,0x3a + 80022748: 28450513 addi a0,a0,644 # 8005c9c8 + 8002274c: 0002a883 lw a7,0(t0) + 80022750: 000fa583 lw a1,0(t6) + 80022754: 00281813 slli a6,a6,0x2 + 80022758: 00a787b3 add a5,a5,a0 + 8002275c: 0003a517 auipc a0,0x3a + 80022760: 27050513 addi a0,a0,624 # 8005c9cc + 80022764: 0016061b addiw a2,a2,1 + 80022768: 00a80833 add a6,a6,a0 + 8002276c: 00000f13 li t5,0 + 80022770: fff5859b addiw a1,a1,-1 + 80022774: 00188e9b addiw t4,a7,1 + 80022778: 011e5863 bge t3,a7,80022788 <_ZL8DoSQV1HQv+0x108> + 8002277c: 0007a503 lw a0,0(a5) + 80022780: 00d5053b addw a0,a0,a3 + 80022784: 00a7a023 sw a0,0(a5) + 80022788: 00478793 addi a5,a5,4 + 8002278c: 00b05e63 blez a1,800227a8 <_ZL8DoSQV1HQv+0x128> + 80022790: fef810e3 bne a6,a5,80022770 <_ZL8DoSQV1HQv+0xf0> + 80022794: 00bfa023 sw a1,0(t6) + 80022798: f20f00e3 beqz t5,800226b8 <_ZL8DoSQV1HQv+0x38> + 8002279c: 0112a023 sw a7,0(t0) + 800227a0: 00e32023 sw a4,0(t1) + 800227a4: 00008067 ret + 800227a8: 00fef893 andi a7,t4,15 + 800227ac: 00060593 mv a1,a2 + 800227b0: 00100f13 li t5,1 + 800227b4: faf81ee3 bne a6,a5,80022770 <_ZL8DoSQV1HQv+0xf0> + 800227b8: fddff06f j 80022794 <_ZL8DoSQV1HQv+0x114> + 800227bc: ef07dee3 bge a5,a6,800226b8 <_ZL8DoSQV1HQv+0x38> + 800227c0: fff8059b addiw a1,a6,-1 + 800227c4: 40f585bb subw a1,a1,a5 + 800227c8: 02059593 slli a1,a1,0x20 + 800227cc: 0205d593 srli a1,a1,0x20 + 800227d0: 00f585b3 add a1,a1,a5 + 800227d4: 0003a617 auipc a2,0x3a + 800227d8: 1f460613 addi a2,a2,500 # 8005c9c8 + 800227dc: 00279793 slli a5,a5,0x2 + 800227e0: 00259593 slli a1,a1,0x2 + 800227e4: 00c787b3 add a5,a5,a2 + 800227e8: 0003a617 auipc a2,0x3a + 800227ec: 1e460613 addi a2,a2,484 # 8005c9cc + 800227f0: 00c585b3 add a1,a1,a2 + 800227f4: 0007a603 lw a2,0(a5) + 800227f8: 00478793 addi a5,a5,4 + 800227fc: 00d6063b addw a2,a2,a3 + 80022800: fec7ae23 sw a2,-4(a5) + 80022804: fef598e3 bne a1,a5,800227f4 <_ZL8DoSQV1HQv+0x174> + 80022808: 00e32023 sw a4,0(t1) + 8002280c: 00008067 ret + +0000000080022810 <_ZL8DoSQV2HQv>: + 80022810: 001aa517 auipc a0,0x1aa + 80022814: 97850513 addi a0,a0,-1672 # 801cc188 <_ZL5vpsg1> + 80022818: 00654603 lbu a2,6(a0) + 8002281c: 001a9717 auipc a4,0x1a9 + 80022820: 32c72703 lw a4,812(a4) # 801cbb48 + 80022824: 001a9797 auipc a5,0x1a9 + 80022828: 3ac7a783 lw a5,940(a5) # 801cbbd0 + 8002282c: 00f7083b addw a6,a4,a5 + 80022830: 0186179b slliw a5,a2,0x18 + 80022834: 4187d79b sraiw a5,a5,0x18 + 80022838: 00080713 mv a4,a6 + 8002283c: 000a5317 auipc t1,0xa5 + 80022840: dec30313 addi t1,t1,-532 # 800c7628 <_ZL4cvbc> + 80022844: 0007c663 bltz a5,80022850 <_ZL8DoSQV2HQv+0x40> + 80022848: 00e32223 sw a4,4(t1) + 8002284c: 00008067 ret + 80022850: 00454583 lbu a1,4(a0) + 80022854: 000018b7 lui a7,0x1 + 80022858: f0088893 addi a7,a7,-256 # f00 <_entry_offset+0xf00> + 8002285c: 0085969b slliw a3,a1,0x8 + 80022860: 0116f7b3 and a5,a3,a7 + 80022864: 0017969b slliw a3,a5,0x1 + 80022868: 00f686bb addw a3,a3,a5 + 8002286c: 01859e1b slliw t3,a1,0x18 + 80022870: 0016969b slliw a3,a3,0x1 + 80022874: 000a5317 auipc t1,0xa5 + 80022878: db430313 addi t1,t1,-588 # 800c7628 <_ZL4cvbc> + 8002287c: 418e5e1b sraiw t3,t3,0x18 + 80022880: 00432783 lw a5,4(t1) + 80022884: 0005859b sext.w a1,a1 + 80022888: 4036d69b sraiw a3,a3,0x3 + 8002288c: 0c0e4063 bltz t3,8002294c <_ZL8DoSQV2HQv+0x13c> + 80022890: 4045d59b sraiw a1,a1,0x4 + 80022894: 0075fe13 andi t3,a1,7 + 80022898: fb07d8e3 bge a5,a6,80022848 <_ZL8DoSQV2HQv+0x38> + 8002289c: fff8081b addiw a6,a6,-1 + 800228a0: 00554503 lbu a0,5(a0) + 800228a4: 40f8083b subw a6,a6,a5 + 800228a8: 0086161b slliw a2,a2,0x8 + 800228ac: 02081813 slli a6,a6,0x20 + 800228b0: 01167633 and a2,a2,a7 + 800228b4: 001aa297 auipc t0,0x1aa + 800228b8: 8e428293 addi t0,t0,-1820 # 801cc198 <_ZL6dcount> + 800228bc: 000a5f97 auipc t6,0xa5 + 800228c0: d94f8f93 addi t6,t6,-620 # 800c7650 <_ZL6vcount> + 800228c4: 02085813 srli a6,a6,0x20 + 800228c8: 00f80833 add a6,a6,a5 + 800228cc: 00a66633 or a2,a2,a0 + 800228d0: 00279793 slli a5,a5,0x2 + 800228d4: 0003a517 auipc a0,0x3a + 800228d8: 0f450513 addi a0,a0,244 # 8005c9c8 + 800228dc: 0042a883 lw a7,4(t0) + 800228e0: 004fa583 lw a1,4(t6) + 800228e4: 00281813 slli a6,a6,0x2 + 800228e8: 00a787b3 add a5,a5,a0 + 800228ec: 0003a517 auipc a0,0x3a + 800228f0: 0e050513 addi a0,a0,224 # 8005c9cc + 800228f4: 0016061b addiw a2,a2,1 + 800228f8: 00a80833 add a6,a6,a0 + 800228fc: 00000f13 li t5,0 + 80022900: fff5859b addiw a1,a1,-1 + 80022904: 00188e9b addiw t4,a7,1 + 80022908: 011e5863 bge t3,a7,80022918 <_ZL8DoSQV2HQv+0x108> + 8002290c: 0007a503 lw a0,0(a5) + 80022910: 00d5053b addw a0,a0,a3 + 80022914: 00a7a023 sw a0,0(a5) + 80022918: 00478793 addi a5,a5,4 + 8002291c: 00b05e63 blez a1,80022938 <_ZL8DoSQV2HQv+0x128> + 80022920: fef810e3 bne a6,a5,80022900 <_ZL8DoSQV2HQv+0xf0> + 80022924: 00bfa223 sw a1,4(t6) + 80022928: f20f00e3 beqz t5,80022848 <_ZL8DoSQV2HQv+0x38> + 8002292c: 0112a223 sw a7,4(t0) + 80022930: 00e32223 sw a4,4(t1) + 80022934: 00008067 ret + 80022938: 00fef893 andi a7,t4,15 + 8002293c: 00060593 mv a1,a2 + 80022940: 00100f13 li t5,1 + 80022944: faf81ee3 bne a6,a5,80022900 <_ZL8DoSQV2HQv+0xf0> + 80022948: fddff06f j 80022924 <_ZL8DoSQV2HQv+0x114> + 8002294c: ef07dee3 bge a5,a6,80022848 <_ZL8DoSQV2HQv+0x38> + 80022950: fff8059b addiw a1,a6,-1 + 80022954: 40f585bb subw a1,a1,a5 + 80022958: 02059593 slli a1,a1,0x20 + 8002295c: 0205d593 srli a1,a1,0x20 + 80022960: 00f585b3 add a1,a1,a5 + 80022964: 0003a617 auipc a2,0x3a + 80022968: 06460613 addi a2,a2,100 # 8005c9c8 + 8002296c: 00279793 slli a5,a5,0x2 + 80022970: 00259593 slli a1,a1,0x2 + 80022974: 00c787b3 add a5,a5,a2 + 80022978: 0003a617 auipc a2,0x3a + 8002297c: 05460613 addi a2,a2,84 # 8005c9cc + 80022980: 00c585b3 add a1,a1,a2 + 80022984: 0007a603 lw a2,0(a5) + 80022988: 00478793 addi a5,a5,4 + 8002298c: 00d6063b addw a2,a2,a3 + 80022990: fec7ae23 sw a2,-4(a5) + 80022994: fef598e3 bne a1,a5,80022984 <_ZL8DoSQV2HQv+0x174> + 80022998: 00e32223 sw a4,4(t1) + 8002299c: 00008067 ret + +00000000800229a0 <_Z11VRC6SoundHQv>: + 800229a0: ff010113 addi sp,sp,-16 + 800229a4: 00813423 sd s0,8(sp) + 800229a8: 001a9597 auipc a1,0x1a9 + 800229ac: 7e058593 addi a1,a1,2016 # 801cc188 <_ZL5vpsg1> + 800229b0: 0025c603 lbu a2,2(a1) + 800229b4: 001a9717 auipc a4,0x1a9 + 800229b8: 19472703 lw a4,404(a4) # 801cbb48 + 800229bc: 001a9797 auipc a5,0x1a9 + 800229c0: 2147a783 lw a5,532(a5) # 801cbbd0 + 800229c4: 00f70f3b addw t5,a4,a5 + 800229c8: 0186179b slliw a5,a2,0x18 + 800229cc: 4187d79b sraiw a5,a5,0x18 + 800229d0: 000f0713 mv a4,t5 + 800229d4: 000a5817 auipc a6,0xa5 + 800229d8: c5480813 addi a6,a6,-940 # 800c7628 <_ZL4cvbc> + 800229dc: 0207c463 bltz a5,80022a04 <_Z11VRC6SoundHQv+0x64> + 800229e0: 0065c603 lbu a2,6(a1) + 800229e4: 00e82023 sw a4,0(a6) + 800229e8: 0186179b slliw a5,a2,0x18 + 800229ec: 4187d79b sraiw a5,a5,0x18 + 800229f0: 1007c463 bltz a5,80022af8 <_Z11VRC6SoundHQv+0x158> + 800229f4: 00813403 ld s0,8(sp) + 800229f8: 00e82223 sw a4,4(a6) + 800229fc: 01010113 addi sp,sp,16 + 80022a00: cacff06f j 80021eac <_ZL8DoSawVHQv> + 80022a04: 0005c503 lbu a0,0(a1) + 80022a08: 00001e37 lui t3,0x1 + 80022a0c: f00e0e13 addi t3,t3,-256 # f00 <_entry_offset+0xf00> + 80022a10: 0085169b slliw a3,a0,0x8 + 80022a14: 01c6f7b3 and a5,a3,t3 + 80022a18: 0017969b slliw a3,a5,0x1 + 80022a1c: 00f686bb addw a3,a3,a5 + 80022a20: 0185189b slliw a7,a0,0x18 + 80022a24: 0016969b slliw a3,a3,0x1 + 80022a28: 000a5817 auipc a6,0xa5 + 80022a2c: c0080813 addi a6,a6,-1024 # 800c7628 <_ZL4cvbc> + 80022a30: 4188d89b sraiw a7,a7,0x18 + 80022a34: 00082783 lw a5,0(a6) + 80022a38: 0005051b sext.w a0,a0 + 80022a3c: 4036d69b sraiw a3,a3,0x3 + 80022a40: 2208c263 bltz a7,80022c64 <_Z11VRC6SoundHQv+0x2c4> + 80022a44: 4045551b sraiw a0,a0,0x4 + 80022a48: 00757293 andi t0,a0,7 + 80022a4c: f9e7dae3 bge a5,t5,800229e0 <_Z11VRC6SoundHQv+0x40> + 80022a50: ffff0e9b addiw t4,t5,-1 + 80022a54: 40fe8ebb subw t4,t4,a5 + 80022a58: 0015c383 lbu t2,1(a1) + 80022a5c: 020e9e93 slli t4,t4,0x20 + 80022a60: 001a9317 auipc t1,0x1a9 + 80022a64: 73830313 addi t1,t1,1848 # 801cc198 <_ZL6dcount> + 80022a68: 000a5897 auipc a7,0xa5 + 80022a6c: be888893 addi a7,a7,-1048 # 800c7650 <_ZL6vcount> + 80022a70: 0086161b slliw a2,a2,0x8 + 80022a74: 020ede93 srli t4,t4,0x20 + 80022a78: 01c67633 and a2,a2,t3 + 80022a7c: 00fe8eb3 add t4,t4,a5 + 80022a80: 0003ae17 auipc t3,0x3a + 80022a84: f48e0e13 addi t3,t3,-184 # 8005c9c8 + 80022a88: 00279793 slli a5,a5,0x2 + 80022a8c: 00032f83 lw t6,0(t1) + 80022a90: 0008a503 lw a0,0(a7) + 80022a94: 00766633 or a2,a2,t2 + 80022a98: 002e9e93 slli t4,t4,0x2 + 80022a9c: 01c787b3 add a5,a5,t3 + 80022aa0: 0003ae17 auipc t3,0x3a + 80022aa4: f2ce0e13 addi t3,t3,-212 # 8005c9cc + 80022aa8: 0016061b addiw a2,a2,1 + 80022aac: 01ce8eb3 add t4,t4,t3 + 80022ab0: 00000413 li s0,0 + 80022ab4: fff5051b addiw a0,a0,-1 + 80022ab8: 001f839b addiw t2,t6,1 + 80022abc: 01f2d863 bge t0,t6,80022acc <_Z11VRC6SoundHQv+0x12c> + 80022ac0: 0007ae03 lw t3,0(a5) + 80022ac4: 00de0e3b addw t3,t3,a3 + 80022ac8: 01c7a023 sw t3,0(a5) + 80022acc: 00478793 addi a5,a5,4 + 80022ad0: 10a05863 blez a0,80022be0 <_Z11VRC6SoundHQv+0x240> + 80022ad4: ffd790e3 bne a5,t4,80022ab4 <_Z11VRC6SoundHQv+0x114> + 80022ad8: 00a8a023 sw a0,0(a7) + 80022adc: f00402e3 beqz s0,800229e0 <_Z11VRC6SoundHQv+0x40> + 80022ae0: 0065c603 lbu a2,6(a1) + 80022ae4: 01f32023 sw t6,0(t1) + 80022ae8: 00e82023 sw a4,0(a6) + 80022aec: 0186179b slliw a5,a2,0x18 + 80022af0: 4187d79b sraiw a5,a5,0x18 + 80022af4: f007d0e3 bgez a5,800229f4 <_Z11VRC6SoundHQv+0x54> + 80022af8: 0045c503 lbu a0,4(a1) + 80022afc: 00001eb7 lui t4,0x1 + 80022b00: f00e8e93 addi t4,t4,-256 # f00 <_entry_offset+0xf00> + 80022b04: 0085169b slliw a3,a0,0x8 + 80022b08: 01d6f7b3 and a5,a3,t4 + 80022b0c: 0017969b slliw a3,a5,0x1 + 80022b10: 00f686bb addw a3,a3,a5 + 80022b14: 0185189b slliw a7,a0,0x18 + 80022b18: 0016969b slliw a3,a3,0x1 + 80022b1c: 4188d89b sraiw a7,a7,0x18 + 80022b20: 00482783 lw a5,4(a6) + 80022b24: 0005051b sext.w a0,a0 + 80022b28: 4036d69b sraiw a3,a3,0x3 + 80022b2c: 0c08ce63 bltz a7,80022c08 <_Z11VRC6SoundHQv+0x268> + 80022b30: 4045551b sraiw a0,a0,0x4 + 80022b34: 00757f93 andi t6,a0,7 + 80022b38: ebe7dee3 bge a5,t5,800229f4 <_Z11VRC6SoundHQv+0x54> + 80022b3c: fff70e1b addiw t3,a4,-1 + 80022b40: 0055c503 lbu a0,5(a1) + 80022b44: 40fe0e3b subw t3,t3,a5 + 80022b48: 0086161b slliw a2,a2,0x8 + 80022b4c: 020e1e13 slli t3,t3,0x20 + 80022b50: 01d67633 and a2,a2,t4 + 80022b54: 001a9317 auipc t1,0x1a9 + 80022b58: 64430313 addi t1,t1,1604 # 801cc198 <_ZL6dcount> + 80022b5c: 000a5897 auipc a7,0xa5 + 80022b60: af488893 addi a7,a7,-1292 # 800c7650 <_ZL6vcount> + 80022b64: 020e5e13 srli t3,t3,0x20 + 80022b68: 00fe0e33 add t3,t3,a5 + 80022b6c: 00a66633 or a2,a2,a0 + 80022b70: 00279793 slli a5,a5,0x2 + 80022b74: 0003a517 auipc a0,0x3a + 80022b78: e5450513 addi a0,a0,-428 # 8005c9c8 + 80022b7c: 00432e83 lw t4,4(t1) + 80022b80: 0048a583 lw a1,4(a7) + 80022b84: 002e1e13 slli t3,t3,0x2 + 80022b88: 00a787b3 add a5,a5,a0 + 80022b8c: 0003a517 auipc a0,0x3a + 80022b90: e4050513 addi a0,a0,-448 # 8005c9cc + 80022b94: 0016061b addiw a2,a2,1 + 80022b98: 00ae0e33 add t3,t3,a0 + 80022b9c: 00000293 li t0,0 + 80022ba0: fff5859b addiw a1,a1,-1 + 80022ba4: 001e8f1b addiw t5,t4,1 + 80022ba8: 01dfd863 bge t6,t4,80022bb8 <_Z11VRC6SoundHQv+0x218> + 80022bac: 0007a503 lw a0,0(a5) + 80022bb0: 00d5053b addw a0,a0,a3 + 80022bb4: 00a7a023 sw a0,0(a5) + 80022bb8: 00478793 addi a5,a5,4 + 80022bbc: 02b05c63 blez a1,80022bf4 <_Z11VRC6SoundHQv+0x254> + 80022bc0: ffc790e3 bne a5,t3,80022ba0 <_Z11VRC6SoundHQv+0x200> + 80022bc4: 00b8a223 sw a1,4(a7) + 80022bc8: e20286e3 beqz t0,800229f4 <_Z11VRC6SoundHQv+0x54> + 80022bcc: 00813403 ld s0,8(sp) + 80022bd0: 01d32223 sw t4,4(t1) + 80022bd4: 00e82223 sw a4,4(a6) + 80022bd8: 01010113 addi sp,sp,16 + 80022bdc: ad0ff06f j 80021eac <_ZL8DoSawVHQv> + 80022be0: 00f3ff93 andi t6,t2,15 + 80022be4: 00060513 mv a0,a2 + 80022be8: 00100413 li s0,1 + 80022bec: edd794e3 bne a5,t4,80022ab4 <_Z11VRC6SoundHQv+0x114> + 80022bf0: ee9ff06f j 80022ad8 <_Z11VRC6SoundHQv+0x138> + 80022bf4: 00ff7e93 andi t4,t5,15 + 80022bf8: 00060593 mv a1,a2 + 80022bfc: 00100293 li t0,1 + 80022c00: fbc790e3 bne a5,t3,80022ba0 <_Z11VRC6SoundHQv+0x200> + 80022c04: fc1ff06f j 80022bc4 <_Z11VRC6SoundHQv+0x224> + 80022c08: dfe7d6e3 bge a5,t5,800229f4 <_Z11VRC6SoundHQv+0x54> + 80022c0c: fff7059b addiw a1,a4,-1 + 80022c10: 40f585bb subw a1,a1,a5 + 80022c14: 02059593 slli a1,a1,0x20 + 80022c18: 0205d593 srli a1,a1,0x20 + 80022c1c: 00f585b3 add a1,a1,a5 + 80022c20: 0003a617 auipc a2,0x3a + 80022c24: da860613 addi a2,a2,-600 # 8005c9c8 + 80022c28: 00279793 slli a5,a5,0x2 + 80022c2c: 00259593 slli a1,a1,0x2 + 80022c30: 00c787b3 add a5,a5,a2 + 80022c34: 0003a617 auipc a2,0x3a + 80022c38: d9860613 addi a2,a2,-616 # 8005c9cc + 80022c3c: 00c585b3 add a1,a1,a2 + 80022c40: 0007a603 lw a2,0(a5) + 80022c44: 00478793 addi a5,a5,4 + 80022c48: 00d6063b addw a2,a2,a3 + 80022c4c: fec7ae23 sw a2,-4(a5) + 80022c50: fef598e3 bne a1,a5,80022c40 <_Z11VRC6SoundHQv+0x2a0> + 80022c54: 00813403 ld s0,8(sp) + 80022c58: 00e82223 sw a4,4(a6) + 80022c5c: 01010113 addi sp,sp,16 + 80022c60: a4cff06f j 80021eac <_ZL8DoSawVHQv> + 80022c64: d7e7dee3 bge a5,t5,800229e0 <_Z11VRC6SoundHQv+0x40> + 80022c68: ffff051b addiw a0,t5,-1 + 80022c6c: 40f5053b subw a0,a0,a5 + 80022c70: 02051513 slli a0,a0,0x20 + 80022c74: 02055513 srli a0,a0,0x20 + 80022c78: 00f50533 add a0,a0,a5 + 80022c7c: 0003a617 auipc a2,0x3a + 80022c80: d4c60613 addi a2,a2,-692 # 8005c9c8 + 80022c84: 00279793 slli a5,a5,0x2 + 80022c88: 00251513 slli a0,a0,0x2 + 80022c8c: 00c787b3 add a5,a5,a2 + 80022c90: 0003a617 auipc a2,0x3a + 80022c94: d3c60613 addi a2,a2,-708 # 8005c9cc + 80022c98: 00c50533 add a0,a0,a2 + 80022c9c: 0007a603 lw a2,0(a5) + 80022ca0: 00478793 addi a5,a5,4 + 80022ca4: 00d6063b addw a2,a2,a3 + 80022ca8: fec7ae23 sw a2,-4(a5) + 80022cac: fea798e3 bne a5,a0,80022c9c <_Z11VRC6SoundHQv+0x2fc> + 80022cb0: d31ff06f j 800229e0 <_Z11VRC6SoundHQv+0x40> + +0000000080022cb4 <_ZL6DoSQV1v>: + 80022cb4: 001a9797 auipc a5,0x1a9 + 80022cb8: f1c7a783 lw a5,-228(a5) # 801cbbd0 + 80022cbc: 001a9517 auipc a0,0x1a9 + 80022cc0: e8c52503 lw a0,-372(a0) # 801cbb48 + 80022cc4: 00f5053b addw a0,a0,a5 + 80022cc8: fe010113 addi sp,sp,-32 + 80022ccc: 0105151b slliw a0,a0,0x10 + 80022cd0: 00913423 sd s1,8(sp) + 80022cd4: 02051513 slli a0,a0,0x20 + 80022cd8: 000a5497 auipc s1,0xa5 + 80022cdc: 95048493 addi s1,s1,-1712 # 800c7628 <_ZL4cvbc> + 80022ce0: 00813823 sd s0,16(sp) + 80022ce4: 001a9597 auipc a1,0x1a9 + 80022ce8: ee85e583 lwu a1,-280(a1) # 801cbbcc + 80022cec: 02055513 srli a0,a0,0x20 + 80022cf0: 0004a403 lw s0,0(s1) + 80022cf4: 00113c23 sd ra,24(sp) + 80022cf8: 130170ef jal ra,80039e28 <__udivdi3> + 80022cfc: 0005051b sext.w a0,a0 + 80022d00: 02a45263 bge s0,a0,80022d24 <_ZL6DoSQV1v+0x70> + 80022d04: 001a9697 auipc a3,0x1a9 + 80022d08: 48468693 addi a3,a3,1156 # 801cc188 <_ZL5vpsg1> + 80022d0c: 0026c783 lbu a5,2(a3) + 80022d10: 00a4a023 sw a0,0(s1) + 80022d14: 0006c703 lbu a4,0(a3) + 80022d18: 0187961b slliw a2,a5,0x18 + 80022d1c: 4186561b sraiw a2,a2,0x18 + 80022d20: 00064c63 bltz a2,80022d38 <_ZL6DoSQV1v+0x84> + 80022d24: 01813083 ld ra,24(sp) + 80022d28: 01013403 ld s0,16(sp) + 80022d2c: 00813483 ld s1,8(sp) + 80022d30: 02010113 addi sp,sp,32 + 80022d34: 00008067 ret + 80022d38: 00001637 lui a2,0x1 + 80022d3c: 0087159b slliw a1,a4,0x8 + 80022d40: f0060893 addi a7,a2,-256 # f00 <_entry_offset+0xf00> + 80022d44: 0115f833 and a6,a1,a7 + 80022d48: 0018159b slliw a1,a6,0x1 + 80022d4c: 010585bb addw a1,a1,a6 + 80022d50: 0187161b slliw a2,a4,0x18 + 80022d54: 0015959b slliw a1,a1,0x1 + 80022d58: 4186561b sraiw a2,a2,0x18 + 80022d5c: 0007081b sext.w a6,a4 + 80022d60: 4075d59b sraiw a1,a1,0x7 + 80022d64: 0a064863 bltz a2,80022e14 <_ZL6DoSQV1v+0x160> + 80022d68: 0016c703 lbu a4,1(a3) + 80022d6c: 0087961b slliw a2,a5,0x8 + 80022d70: 01167633 and a2,a2,a7 + 80022d74: 000a5f17 auipc t5,0xa5 + 80022d78: 8dcf0f13 addi t5,t5,-1828 # 800c7650 <_ZL6vcount> + 80022d7c: 001a9f97 auipc t6,0x1a9 + 80022d80: 41cf8f93 addi t6,t6,1052 # 801cc198 <_ZL6dcount> + 80022d84: 00e66633 or a2,a2,a4 + 80022d88: 000f2783 lw a5,0(t5) + 80022d8c: 000fa703 lw a4,0(t6) + 80022d90: 4048581b sraiw a6,a6,0x4 + 80022d94: 0016061b addiw a2,a2,1 + 80022d98: 00787813 andi a6,a6,7 + 80022d9c: 0116161b slliw a2,a2,0x11 + 80022da0: 001a9e17 auipc t3,0x1a9 + 80022da4: e24e2e03 lw t3,-476(t3) # 801cbbc4 + 80022da8: 00000313 li t1,0 + 80022dac: 00035e97 auipc t4,0x35 + 80022db0: c1ce8e93 addi t4,t4,-996 # 800579c8 + 80022db4: 00e85e63 bge a6,a4,80022dd0 <_ZL6DoSQV1v+0x11c> + 80022db8: 40445693 srai a3,s0,0x4 + 80022dbc: 00269693 slli a3,a3,0x2 + 80022dc0: 00de86b3 add a3,t4,a3 + 80022dc4: 0006a883 lw a7,0(a3) + 80022dc8: 00b888bb addw a7,a7,a1 + 80022dcc: 0116a023 sw a7,0(a3) + 80022dd0: 41c787bb subw a5,a5,t3 + 80022dd4: 00f04c63 bgtz a5,80022dec <_ZL6DoSQV1v+0x138> + 80022dd8: 0017071b addiw a4,a4,1 + 80022ddc: 00f607bb addw a5,a2,a5 + 80022de0: 00f77713 andi a4,a4,15 + 80022de4: fef05ae3 blez a5,80022dd8 <_ZL6DoSQV1v+0x124> + 80022de8: 00100313 li t1,1 + 80022dec: 0014041b addiw s0,s0,1 + 80022df0: fc8512e3 bne a0,s0,80022db4 <_ZL6DoSQV1v+0x100> + 80022df4: 00ff2023 sw a5,0(t5) + 80022df8: f20306e3 beqz t1,80022d24 <_ZL6DoSQV1v+0x70> + 80022dfc: 01813083 ld ra,24(sp) + 80022e00: 01013403 ld s0,16(sp) + 80022e04: 00efa023 sw a4,0(t6) + 80022e08: 00813483 ld s1,8(sp) + 80022e0c: 02010113 addi sp,sp,32 + 80022e10: 00008067 ret + 80022e14: 00035697 auipc a3,0x35 + 80022e18: bb468693 addi a3,a3,-1100 # 800579c8 + 80022e1c: 40445793 srai a5,s0,0x4 + 80022e20: 00279793 slli a5,a5,0x2 + 80022e24: 00f687b3 add a5,a3,a5 + 80022e28: 0007a703 lw a4,0(a5) + 80022e2c: 0014041b addiw s0,s0,1 + 80022e30: 00b7073b addw a4,a4,a1 + 80022e34: 00e7a023 sw a4,0(a5) + 80022e38: fe8512e3 bne a0,s0,80022e1c <_ZL6DoSQV1v+0x168> + 80022e3c: 01813083 ld ra,24(sp) + 80022e40: 01013403 ld s0,16(sp) + 80022e44: 00813483 ld s1,8(sp) + 80022e48: 02010113 addi sp,sp,32 + 80022e4c: 00008067 ret + +0000000080022e50 <_ZL6DoSQV2v>: + 80022e50: 001a9797 auipc a5,0x1a9 + 80022e54: d807a783 lw a5,-640(a5) # 801cbbd0 + 80022e58: 001a9517 auipc a0,0x1a9 + 80022e5c: cf052503 lw a0,-784(a0) # 801cbb48 + 80022e60: 00f5053b addw a0,a0,a5 + 80022e64: fe010113 addi sp,sp,-32 + 80022e68: 0105151b slliw a0,a0,0x10 + 80022e6c: 00913423 sd s1,8(sp) + 80022e70: 02051513 slli a0,a0,0x20 + 80022e74: 000a4497 auipc s1,0xa4 + 80022e78: 7b448493 addi s1,s1,1972 # 800c7628 <_ZL4cvbc> + 80022e7c: 00813823 sd s0,16(sp) + 80022e80: 001a9597 auipc a1,0x1a9 + 80022e84: d4c5e583 lwu a1,-692(a1) # 801cbbcc + 80022e88: 02055513 srli a0,a0,0x20 + 80022e8c: 0044a403 lw s0,4(s1) + 80022e90: 00113c23 sd ra,24(sp) + 80022e94: 795160ef jal ra,80039e28 <__udivdi3> + 80022e98: 0005051b sext.w a0,a0 + 80022e9c: 02a45263 bge s0,a0,80022ec0 <_ZL6DoSQV2v+0x70> + 80022ea0: 001a9697 auipc a3,0x1a9 + 80022ea4: 2e868693 addi a3,a3,744 # 801cc188 <_ZL5vpsg1> + 80022ea8: 0066c783 lbu a5,6(a3) + 80022eac: 00a4a223 sw a0,4(s1) + 80022eb0: 0046c703 lbu a4,4(a3) + 80022eb4: 0187961b slliw a2,a5,0x18 + 80022eb8: 4186561b sraiw a2,a2,0x18 + 80022ebc: 00064c63 bltz a2,80022ed4 <_ZL6DoSQV2v+0x84> + 80022ec0: 01813083 ld ra,24(sp) + 80022ec4: 01013403 ld s0,16(sp) + 80022ec8: 00813483 ld s1,8(sp) + 80022ecc: 02010113 addi sp,sp,32 + 80022ed0: 00008067 ret + 80022ed4: 00001637 lui a2,0x1 + 80022ed8: 0087159b slliw a1,a4,0x8 + 80022edc: f0060893 addi a7,a2,-256 # f00 <_entry_offset+0xf00> + 80022ee0: 0115f833 and a6,a1,a7 + 80022ee4: 0018159b slliw a1,a6,0x1 + 80022ee8: 010585bb addw a1,a1,a6 + 80022eec: 0187161b slliw a2,a4,0x18 + 80022ef0: 0015959b slliw a1,a1,0x1 + 80022ef4: 4186561b sraiw a2,a2,0x18 + 80022ef8: 0007081b sext.w a6,a4 + 80022efc: 4075d59b sraiw a1,a1,0x7 + 80022f00: 0a064863 bltz a2,80022fb0 <_ZL6DoSQV2v+0x160> + 80022f04: 0056c703 lbu a4,5(a3) + 80022f08: 0087961b slliw a2,a5,0x8 + 80022f0c: 01167633 and a2,a2,a7 + 80022f10: 000a4f17 auipc t5,0xa4 + 80022f14: 740f0f13 addi t5,t5,1856 # 800c7650 <_ZL6vcount> + 80022f18: 001a9f97 auipc t6,0x1a9 + 80022f1c: 280f8f93 addi t6,t6,640 # 801cc198 <_ZL6dcount> + 80022f20: 00e66633 or a2,a2,a4 + 80022f24: 004f2783 lw a5,4(t5) + 80022f28: 004fa703 lw a4,4(t6) + 80022f2c: 4048581b sraiw a6,a6,0x4 + 80022f30: 0016061b addiw a2,a2,1 + 80022f34: 00787813 andi a6,a6,7 + 80022f38: 0116161b slliw a2,a2,0x11 + 80022f3c: 001a9e17 auipc t3,0x1a9 + 80022f40: c88e2e03 lw t3,-888(t3) # 801cbbc4 + 80022f44: 00000313 li t1,0 + 80022f48: 00035e97 auipc t4,0x35 + 80022f4c: a80e8e93 addi t4,t4,-1408 # 800579c8 + 80022f50: 00e85e63 bge a6,a4,80022f6c <_ZL6DoSQV2v+0x11c> + 80022f54: 40445693 srai a3,s0,0x4 + 80022f58: 00269693 slli a3,a3,0x2 + 80022f5c: 00de86b3 add a3,t4,a3 + 80022f60: 0006a883 lw a7,0(a3) + 80022f64: 00b888bb addw a7,a7,a1 + 80022f68: 0116a023 sw a7,0(a3) + 80022f6c: 41c787bb subw a5,a5,t3 + 80022f70: 00f04c63 bgtz a5,80022f88 <_ZL6DoSQV2v+0x138> + 80022f74: 0017071b addiw a4,a4,1 + 80022f78: 00f607bb addw a5,a2,a5 + 80022f7c: 00f77713 andi a4,a4,15 + 80022f80: fef05ae3 blez a5,80022f74 <_ZL6DoSQV2v+0x124> + 80022f84: 00100313 li t1,1 + 80022f88: 0014041b addiw s0,s0,1 + 80022f8c: fc8512e3 bne a0,s0,80022f50 <_ZL6DoSQV2v+0x100> + 80022f90: 00ff2223 sw a5,4(t5) + 80022f94: f20306e3 beqz t1,80022ec0 <_ZL6DoSQV2v+0x70> + 80022f98: 01813083 ld ra,24(sp) + 80022f9c: 01013403 ld s0,16(sp) + 80022fa0: 00efa223 sw a4,4(t6) + 80022fa4: 00813483 ld s1,8(sp) + 80022fa8: 02010113 addi sp,sp,32 + 80022fac: 00008067 ret + 80022fb0: 00035697 auipc a3,0x35 + 80022fb4: a1868693 addi a3,a3,-1512 # 800579c8 + 80022fb8: 40445793 srai a5,s0,0x4 + 80022fbc: 00279793 slli a5,a5,0x2 + 80022fc0: 00f687b3 add a5,a3,a5 + 80022fc4: 0007a703 lw a4,0(a5) + 80022fc8: 0014041b addiw s0,s0,1 + 80022fcc: 00b7073b addw a4,a4,a1 + 80022fd0: 00e7a023 sw a4,0(a5) + 80022fd4: fe8512e3 bne a0,s0,80022fb8 <_ZL6DoSQV2v+0x168> + 80022fd8: 01813083 ld ra,24(sp) + 80022fdc: 01013403 ld s0,16(sp) + 80022fe0: 00813483 ld s1,8(sp) + 80022fe4: 02010113 addi sp,sp,32 + 80022fe8: 00008067 ret + +0000000080022fec <_Z9VRC6Soundi>: + 80022fec: 001a9717 auipc a4,0x1a9 + 80022ff0: be472703 lw a4,-1052(a4) # 801cbbd0 + 80022ff4: 001a9797 auipc a5,0x1a9 + 80022ff8: b547a783 lw a5,-1196(a5) # 801cbb48 + 80022ffc: 00e787bb addw a5,a5,a4 + 80023000: fe010113 addi sp,sp,-32 + 80023004: 0107979b slliw a5,a5,0x10 + 80023008: 00913423 sd s1,8(sp) + 8002300c: 01213023 sd s2,0(sp) + 80023010: 000a4497 auipc s1,0xa4 + 80023014: 61848493 addi s1,s1,1560 # 800c7628 <_ZL4cvbc> + 80023018: 00050913 mv s2,a0 + 8002301c: 02079513 slli a0,a5,0x20 + 80023020: 00813823 sd s0,16(sp) + 80023024: 001a9597 auipc a1,0x1a9 + 80023028: ba85e583 lwu a1,-1112(a1) # 801cbbcc + 8002302c: 02055513 srli a0,a0,0x20 + 80023030: 0004a403 lw s0,0(s1) + 80023034: 00113c23 sd ra,24(sp) + 80023038: 5f1160ef jal ra,80039e28 <__udivdi3> + 8002303c: 0005069b sext.w a3,a0 + 80023040: 02d45263 bge s0,a3,80023064 <_Z9VRC6Soundi+0x78> + 80023044: 001a9597 auipc a1,0x1a9 + 80023048: 14458593 addi a1,a1,324 # 801cc188 <_ZL5vpsg1> + 8002304c: 0025c783 lbu a5,2(a1) + 80023050: 00d4a023 sw a3,0(s1) + 80023054: 0005c703 lbu a4,0(a1) + 80023058: 0187961b slliw a2,a5,0x18 + 8002305c: 4186561b sraiw a2,a2,0x18 + 80023060: 12064063 bltz a2,80023180 <_Z9VRC6Soundi+0x194> + 80023064: 0044a603 lw a2,4(s1) + 80023068: 02d65263 bge a2,a3,8002308c <_Z9VRC6Soundi+0xa0> + 8002306c: 001a9517 auipc a0,0x1a9 + 80023070: 11c50513 addi a0,a0,284 # 801cc188 <_ZL5vpsg1> + 80023074: 00654783 lbu a5,6(a0) + 80023078: 00d4a223 sw a3,4(s1) + 8002307c: 00454703 lbu a4,4(a0) + 80023080: 0187959b slliw a1,a5,0x18 + 80023084: 4185d59b sraiw a1,a1,0x18 + 80023088: 0205c663 bltz a1,800230b4 <_Z9VRC6Soundi+0xc8> + 8002308c: c71fe0ef jal ra,80021cfc <_ZL6DoSawVv> + 80023090: 01813083 ld ra,24(sp) + 80023094: 01013403 ld s0,16(sp) + 80023098: 0124a023 sw s2,0(s1) + 8002309c: 0124a223 sw s2,4(s1) + 800230a0: 0124a423 sw s2,8(s1) + 800230a4: 00813483 ld s1,8(sp) + 800230a8: 00013903 ld s2,0(sp) + 800230ac: 02010113 addi sp,sp,32 + 800230b0: 00008067 ret + 800230b4: 000015b7 lui a1,0x1 + 800230b8: 00871e1b slliw t3,a4,0x8 + 800230bc: f0058893 addi a7,a1,-256 # f00 <_entry_offset+0xf00> + 800230c0: 011e7833 and a6,t3,a7 + 800230c4: 00181e1b slliw t3,a6,0x1 + 800230c8: 010e0e3b addw t3,t3,a6 + 800230cc: 0187159b slliw a1,a4,0x18 + 800230d0: 001e1e1b slliw t3,t3,0x1 + 800230d4: 4185d59b sraiw a1,a1,0x18 + 800230d8: 0007081b sext.w a6,a4 + 800230dc: 407e5e1b sraiw t3,t3,0x7 + 800230e0: 1805cc63 bltz a1,80023278 <_Z9VRC6Soundi+0x28c> + 800230e4: 00554703 lbu a4,5(a0) + 800230e8: 0087959b slliw a1,a5,0x8 + 800230ec: 0115f5b3 and a1,a1,a7 + 800230f0: 001a9317 auipc t1,0x1a9 + 800230f4: 0a830313 addi t1,t1,168 # 801cc198 <_ZL6dcount> + 800230f8: 000a4897 auipc a7,0xa4 + 800230fc: 55888893 addi a7,a7,1368 # 800c7650 <_ZL6vcount> + 80023100: 00e5e5b3 or a1,a1,a4 + 80023104: 00432783 lw a5,4(t1) + 80023108: 0048a703 lw a4,4(a7) + 8002310c: 4048581b sraiw a6,a6,0x4 + 80023110: 0015859b addiw a1,a1,1 + 80023114: 00787813 andi a6,a6,7 + 80023118: 0115959b slliw a1,a1,0x11 + 8002311c: 001a9f97 auipc t6,0x1a9 + 80023120: aa8faf83 lw t6,-1368(t6) # 801cbbc4 + 80023124: 00000f13 li t5,0 + 80023128: 00035297 auipc t0,0x35 + 8002312c: 8a028293 addi t0,t0,-1888 # 800579c8 + 80023130: 00f85e63 bge a6,a5,8002314c <_Z9VRC6Soundi+0x160> + 80023134: 40465513 srai a0,a2,0x4 + 80023138: 00251513 slli a0,a0,0x2 + 8002313c: 00a28533 add a0,t0,a0 + 80023140: 00052e83 lw t4,0(a0) + 80023144: 01ce8ebb addw t4,t4,t3 + 80023148: 01d52023 sw t4,0(a0) + 8002314c: 41f7073b subw a4,a4,t6 + 80023150: 00e04c63 bgtz a4,80023168 <_Z9VRC6Soundi+0x17c> + 80023154: 0017879b addiw a5,a5,1 + 80023158: 00e5873b addw a4,a1,a4 + 8002315c: 00f7f793 andi a5,a5,15 + 80023160: fee05ae3 blez a4,80023154 <_Z9VRC6Soundi+0x168> + 80023164: 00100f13 li t5,1 + 80023168: 0016061b addiw a2,a2,1 + 8002316c: fcd612e3 bne a2,a3,80023130 <_Z9VRC6Soundi+0x144> + 80023170: 00e8a223 sw a4,4(a7) + 80023174: f00f0ce3 beqz t5,8002308c <_Z9VRC6Soundi+0xa0> + 80023178: 00f32223 sw a5,4(t1) + 8002317c: f11ff06f j 8002308c <_Z9VRC6Soundi+0xa0> + 80023180: 00001637 lui a2,0x1 + 80023184: 0087181b slliw a6,a4,0x8 + 80023188: f0060893 addi a7,a2,-256 # f00 <_entry_offset+0xf00> + 8002318c: 01187533 and a0,a6,a7 + 80023190: 0015181b slliw a6,a0,0x1 + 80023194: 00a8083b addw a6,a6,a0 + 80023198: 0187161b slliw a2,a4,0x18 + 8002319c: 0018181b slliw a6,a6,0x1 + 800231a0: 4186561b sraiw a2,a2,0x18 + 800231a4: 0007051b sext.w a0,a4 + 800231a8: 4078581b sraiw a6,a6,0x7 + 800231ac: 0a064063 bltz a2,8002324c <_Z9VRC6Soundi+0x260> + 800231b0: 0015c703 lbu a4,1(a1) + 800231b4: 0087961b slliw a2,a5,0x8 + 800231b8: 01167633 and a2,a2,a7 + 800231bc: 001a9317 auipc t1,0x1a9 + 800231c0: fdc30313 addi t1,t1,-36 # 801cc198 <_ZL6dcount> + 800231c4: 000a4897 auipc a7,0xa4 + 800231c8: 48c88893 addi a7,a7,1164 # 800c7650 <_ZL6vcount> + 800231cc: 00e66633 or a2,a2,a4 + 800231d0: 00032783 lw a5,0(t1) + 800231d4: 0008a703 lw a4,0(a7) + 800231d8: 4045551b sraiw a0,a0,0x4 + 800231dc: 0016061b addiw a2,a2,1 + 800231e0: 00757513 andi a0,a0,7 + 800231e4: 0116161b slliw a2,a2,0x11 + 800231e8: 001a9f17 auipc t5,0x1a9 + 800231ec: 9dcf2f03 lw t5,-1572(t5) # 801cbbc4 + 800231f0: 00000e93 li t4,0 + 800231f4: 00034f97 auipc t6,0x34 + 800231f8: 7d4f8f93 addi t6,t6,2004 # 800579c8 + 800231fc: 00f55e63 bge a0,a5,80023218 <_Z9VRC6Soundi+0x22c> + 80023200: 40445593 srai a1,s0,0x4 + 80023204: 00259593 slli a1,a1,0x2 + 80023208: 00bf85b3 add a1,t6,a1 + 8002320c: 0005ae03 lw t3,0(a1) + 80023210: 010e0e3b addw t3,t3,a6 + 80023214: 01c5a023 sw t3,0(a1) + 80023218: 41e7073b subw a4,a4,t5 + 8002321c: 00e04c63 bgtz a4,80023234 <_Z9VRC6Soundi+0x248> + 80023220: 0017879b addiw a5,a5,1 + 80023224: 00c7073b addw a4,a4,a2 + 80023228: 00f7f793 andi a5,a5,15 + 8002322c: fee05ae3 blez a4,80023220 <_Z9VRC6Soundi+0x234> + 80023230: 00100e93 li t4,1 + 80023234: 0014041b addiw s0,s0,1 + 80023238: fc8692e3 bne a3,s0,800231fc <_Z9VRC6Soundi+0x210> + 8002323c: 00e8a023 sw a4,0(a7) + 80023240: e20e82e3 beqz t4,80023064 <_Z9VRC6Soundi+0x78> + 80023244: 00f32023 sw a5,0(t1) + 80023248: e1dff06f j 80023064 <_Z9VRC6Soundi+0x78> + 8002324c: 00034597 auipc a1,0x34 + 80023250: 77c58593 addi a1,a1,1916 # 800579c8 + 80023254: 40445793 srai a5,s0,0x4 + 80023258: 00279793 slli a5,a5,0x2 + 8002325c: 00f587b3 add a5,a1,a5 + 80023260: 0007a703 lw a4,0(a5) + 80023264: 0014041b addiw s0,s0,1 + 80023268: 0107073b addw a4,a4,a6 + 8002326c: 00e7a023 sw a4,0(a5) + 80023270: fe8692e3 bne a3,s0,80023254 <_Z9VRC6Soundi+0x268> + 80023274: df1ff06f j 80023064 <_Z9VRC6Soundi+0x78> + 80023278: 00034597 auipc a1,0x34 + 8002327c: 75058593 addi a1,a1,1872 # 800579c8 + 80023280: 40465793 srai a5,a2,0x4 + 80023284: 00279793 slli a5,a5,0x2 + 80023288: 00f587b3 add a5,a1,a5 + 8002328c: 0007a703 lw a4,0(a5) + 80023290: 0016061b addiw a2,a2,1 + 80023294: 01c7073b addw a4,a4,t3 + 80023298: 00e7a023 sw a4,0(a5) + 8002329c: fed612e3 bne a2,a3,80023280 <_Z9VRC6Soundi+0x294> + 800232a0: dedff06f j 8002308c <_Z9VRC6Soundi+0xa0> + +00000000800232a4 <_Z13Mapper24_InitP8CartInfo>: + 800232a4: ff010113 addi sp,sp,-16 + 800232a8: 00113423 sd ra,8(sp) + 800232ac: fffff797 auipc a5,0xfffff + 800232b0: e8478793 addi a5,a5,-380 # 80022130 <_ZL9VRC6Powerv> + 800232b4: 00f53023 sd a5,0(a0) + 800232b8: 001a9797 auipc a5,0x1a9 + 800232bc: ec078423 sb zero,-312(a5) # 801cc180 <_ZL4is26> + 800232c0: fffff797 auipc a5,0xfffff + 800232c4: 2fc78793 addi a5,a5,764 # 800225bc <_ZL11VRC6IRQHooki> + 800232c8: 001a9717 auipc a4,0x1a9 + 800232cc: 86f73c23 sd a5,-1928(a4) # 801cbb40 + 800232d0: eddfe0ef jal ra,800221ac <_ZL8VRC6_ESIv> + 800232d4: 00813083 ld ra,8(sp) + 800232d8: fffff797 auipc a5,0xfffff + 800232dc: e5478793 addi a5,a5,-428 # 8002212c <_ZL12StateRestorei> + 800232e0: 001a9717 auipc a4,0x1a9 + 800232e4: 36f73c23 sd a5,888(a4) # 801cc658 + 800232e8: 00000693 li a3,0 + 800232ec: 00000613 li a2,0 + 800232f0: fff00593 li a1,-1 + 800232f4: 00028517 auipc a0,0x28 + 800232f8: 1f450513 addi a0,a0,500 # 8004b4e8 <_ZL9StateRegs> + 800232fc: 01010113 addi sp,sp,16 + 80023300: d11dc06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080023304 <_Z13Mapper26_InitP8CartInfo>: + 80023304: fe010113 addi sp,sp,-32 + 80023308: 00113c23 sd ra,24(sp) + 8002330c: 00813823 sd s0,16(sp) + 80023310: 00913423 sd s1,8(sp) + 80023314: 01213023 sd s2,0(sp) + 80023318: fffff797 auipc a5,0xfffff + 8002331c: e1878793 addi a5,a5,-488 # 80022130 <_ZL9VRC6Powerv> + 80023320: 00f53023 sd a5,0(a0) + 80023324: fffff797 auipc a5,0xfffff + 80023328: fe878793 addi a5,a5,-24 # 8002230c <_ZL9VRC6Closev> + 8002332c: 00f53823 sd a5,16(a0) + 80023330: 00100793 li a5,1 + 80023334: 001a9717 auipc a4,0x1a9 + 80023338: e4f70623 sb a5,-436(a4) # 801cc180 <_ZL4is26> + 8002333c: fffff797 auipc a5,0xfffff + 80023340: 28078793 addi a5,a5,640 # 800225bc <_ZL11VRC6IRQHooki> + 80023344: 00050413 mv s0,a0 + 80023348: 001a8717 auipc a4,0x1a8 + 8002334c: 7ef73c23 sd a5,2040(a4) # 801cbb40 + 80023350: e5dfe0ef jal ra,800221ac <_ZL8VRC6_ESIv> + 80023354: fffff797 auipc a5,0xfffff + 80023358: dd878793 addi a5,a5,-552 # 8002212c <_ZL12StateRestorei> + 8002335c: 001a9497 auipc s1,0x1a9 + 80023360: e4c48493 addi s1,s1,-436 # 801cc1a8 <_ZL8WRAMSIZE> + 80023364: 001a9717 auipc a4,0x1a9 + 80023368: 2ef73a23 sd a5,756(a4) # 801cc658 + 8002336c: 00002537 lui a0,0x2 + 80023370: 000027b7 lui a5,0x2 + 80023374: 00f4a023 sw a5,0(s1) + 80023378: 8f4ef0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002337c: 0004a603 lw a2,0(s1) + 80023380: 00050593 mv a1,a0 + 80023384: 001a9917 auipc s2,0x1a9 + 80023388: df490913 addi s2,s2,-524 # 801cc178 <_ZL4WRAM> + 8002338c: 00100693 li a3,1 + 80023390: 01000513 li a0,16 + 80023394: 00b93023 sd a1,0(s2) + 80023398: 95ced0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8002339c: 0004a583 lw a1,0(s1) + 800233a0: 00093503 ld a0,0(s2) + 800233a4: 00022697 auipc a3,0x22 + 800233a8: f8468693 addi a3,a3,-124 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 800233ac: 00000613 li a2,0 + 800233b0: c61dc0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800233b4: 04c42783 lw a5,76(s0) + 800233b8: 00078a63 beqz a5,800233cc <_Z13Mapper26_InitP8CartInfo+0xc8> + 800233bc: 00093703 ld a4,0(s2) + 800233c0: 0004a783 lw a5,0(s1) + 800233c4: 00e43c23 sd a4,24(s0) + 800233c8: 02f42c23 sw a5,56(s0) + 800233cc: 01013403 ld s0,16(sp) + 800233d0: 01813083 ld ra,24(sp) + 800233d4: 00813483 ld s1,8(sp) + 800233d8: 00013903 ld s2,0(sp) + 800233dc: 00000693 li a3,0 + 800233e0: 00000613 li a2,0 + 800233e4: fff00593 li a1,-1 + 800233e8: 00028517 auipc a0,0x28 + 800233ec: 10050513 addi a0,a0,256 # 8004b4e8 <_ZL9StateRegs> + 800233f0: 02010113 addi sp,sp,32 + 800233f4: c1ddc06f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800233f8 <_ZL12M228RamWritejh>: + 800233f8: 00357793 andi a5,a0,3 + 800233fc: 001a9517 auipc a0,0x1a9 + 80023400: dcc50513 addi a0,a0,-564 # 801cc1c8 <_ZL4mram> + 80023404: 00f50533 add a0,a0,a5 + 80023408: 00f5f593 andi a1,a1,15 + 8002340c: 00b50023 sb a1,0(a0) + 80023410: 00008067 ret + +0000000080023414 <_ZL11M228RamReadj>: + 80023414: 00357793 andi a5,a0,3 + 80023418: 001a9517 auipc a0,0x1a9 + 8002341c: db050513 addi a0,a0,-592 # 801cc1c8 <_ZL4mram> + 80023420: 00f50533 add a0,a0,a5 + 80023424: 00054503 lbu a0,0(a0) + 80023428: 00008067 ret + +000000008002342c <_ZL4Syncv>: + 8002342c: fe010113 addi sp,sp,-32 + 80023430: 00913423 sd s1,8(sp) + 80023434: 001a9497 auipc s1,0x1a9 + 80023438: d9048493 addi s1,s1,-624 # 801cc1c4 <_ZL4areg> + 8002343c: 0004d503 lhu a0,0(s1) + 80023440: 00113c23 sd ra,24(sp) + 80023444: 00813823 sd s0,16(sp) + 80023448: 0005069b sext.w a3,a0 + 8002344c: 4076d79b sraiw a5,a3,0x7 + 80023450: 0307f613 andi a2,a5,48 + 80023454: 01213023 sd s2,0(sp) + 80023458: 03000713 li a4,48 + 8002345c: 03f7f793 andi a5,a5,63 + 80023460: 00e61463 bne a2,a4,80023468 <_ZL4Syncv+0x3c> + 80023464: ff07879b addiw a5,a5,-16 + 80023468: 4066d71b sraiw a4,a3,0x6 + 8002346c: 0055541b srliw s0,a0,0x5 + 80023470: 4056d69b sraiw a3,a3,0x5 + 80023474: 00d5551b srliw a0,a0,0xd + 80023478: 00d77733 and a4,a4,a3 + 8002347c: 00154513 xori a0,a0,1 + 80023480: 0017979b slliw a5,a5,0x1 + 80023484: 00177713 andi a4,a4,1 + 80023488: 00157513 andi a0,a0,1 + 8002348c: 00e7893b addw s2,a5,a4 + 80023490: 00144413 xori s0,s0,1 + 80023494: bb5ed0ef jal ra,80011048 <_Z9setmirrori> + 80023498: 00090593 mv a1,s2 + 8002349c: 00008537 lui a0,0x8 + 800234a0: 00147413 andi s0,s0,1 + 800234a4: fb4ed0ef jal ra,80010c58 <_Z8setprg16jj> + 800234a8: 0089043b addw s0,s2,s0 + 800234ac: 00040593 mv a1,s0 + 800234b0: 0000c537 lui a0,0xc + 800234b4: fa4ed0ef jal ra,80010c58 <_Z8setprg16jj> + 800234b8: 0004d783 lhu a5,0(s1) + 800234bc: 01013403 ld s0,16(sp) + 800234c0: 01813083 ld ra,24(sp) + 800234c4: 00813483 ld s1,8(sp) + 800234c8: 00013903 ld s2,0(sp) + 800234cc: 001a9517 auipc a0,0x1a9 + 800234d0: d0054503 lbu a0,-768(a0) # 801cc1cc <_ZL4vreg> + 800234d4: 0027979b slliw a5,a5,0x2 + 800234d8: 00357513 andi a0,a0,3 + 800234dc: 03c7f793 andi a5,a5,60 + 800234e0: 00f56533 or a0,a0,a5 + 800234e4: 02010113 addi sp,sp,32 + 800234e8: a1ded06f j 80010f04 <_Z7setchr8j> + +00000000800234ec <_ZL12StateRestorei>: + 800234ec: f41ff06f j 8002342c <_ZL4Syncv> + +00000000800234f0 <_ZL9M228Writejh>: + 800234f0: 001a9797 auipc a5,0x1a9 + 800234f4: cca79a23 sh a0,-812(a5) # 801cc1c4 <_ZL4areg> + 800234f8: 001a9797 auipc a5,0x1a9 + 800234fc: ccb78a23 sb a1,-812(a5) # 801cc1cc <_ZL4vreg> + 80023500: f2dff06f j 8002342c <_ZL4Syncv> + +0000000080023504 <_ZL9M228Resetv>: + 80023504: ff010113 addi sp,sp,-16 + 80023508: ffff87b7 lui a5,0xffff8 + 8002350c: 00400613 li a2,4 + 80023510: 00000593 li a1,0 + 80023514: 001a9517 auipc a0,0x1a9 + 80023518: cb450513 addi a0,a0,-844 # 801cc1c8 <_ZL4mram> + 8002351c: 00113423 sd ra,8(sp) + 80023520: 001a9717 auipc a4,0x1a9 + 80023524: caf71223 sh a5,-860(a4) # 801cc1c4 <_ZL4areg> + 80023528: 001a9797 auipc a5,0x1a9 + 8002352c: ca078223 sb zero,-860(a5) # 801cc1cc <_ZL4vreg> + 80023530: 4f8180ef jal ra,8003ba28 + 80023534: 00813083 ld ra,8(sp) + 80023538: 01010113 addi sp,sp,16 + 8002353c: ef1ff06f j 8002342c <_ZL4Syncv> + +0000000080023540 <_ZL9M228Powerv>: + 80023540: ff010113 addi sp,sp,-16 + 80023544: 00113423 sd ra,8(sp) + 80023548: 00813023 sd s0,0(sp) + 8002354c: fb9ff0ef jal ra,80023504 <_ZL9M228Resetv> + 80023550: 00006437 lui s0,0x6 + 80023554: fff40593 addi a1,s0,-1 # 5fff <_entry_offset+0x5fff> + 80023558: 00000617 auipc a2,0x0 + 8002355c: ebc60613 addi a2,a2,-324 # 80023414 <_ZL11M228RamReadj> + 80023560: 00005537 lui a0,0x5 + 80023564: 4b8100ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80023568: fff40593 addi a1,s0,-1 + 8002356c: 00000617 auipc a2,0x0 + 80023570: e8c60613 addi a2,a2,-372 # 800233f8 <_ZL12M228RamWritejh> + 80023574: 00005537 lui a0,0x5 + 80023578: 5b0100ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002357c: 00010437 lui s0,0x10 + 80023580: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80023584: fffed617 auipc a2,0xfffed + 80023588: 0dc60613 addi a2,a2,220 # 80010660 <_Z6CartBRj> + 8002358c: 00008537 lui a0,0x8 + 80023590: 48c100ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80023594: fff40593 addi a1,s0,-1 + 80023598: 00013403 ld s0,0(sp) + 8002359c: 00813083 ld ra,8(sp) + 800235a0: 00000617 auipc a2,0x0 + 800235a4: f5060613 addi a2,a2,-176 # 800234f0 <_ZL9M228Writejh> + 800235a8: 00008537 lui a0,0x8 + 800235ac: 01010113 addi sp,sp,16 + 800235b0: 5781006f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +00000000800235b4 <_Z14Mapper228_InitP8CartInfo>: + 800235b4: 00000797 auipc a5,0x0 + 800235b8: f8c78793 addi a5,a5,-116 # 80023540 <_ZL9M228Powerv> + 800235bc: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 800235c0: 00000797 auipc a5,0x0 + 800235c4: f4478793 addi a5,a5,-188 # 80023504 <_ZL9M228Resetv> + 800235c8: 00f53423 sd a5,8(a0) + 800235cc: 00000797 auipc a5,0x0 + 800235d0: f2078793 addi a5,a5,-224 # 800234ec <_ZL12StateRestorei> + 800235d4: 00000693 li a3,0 + 800235d8: 00000613 li a2,0 + 800235dc: fff00593 li a1,-1 + 800235e0: 00028517 auipc a0,0x28 + 800235e4: fe050513 addi a0,a0,-32 # 8004b5c0 <_ZL9StateRegs> + 800235e8: 001a9717 auipc a4,0x1a9 + 800235ec: 06f73823 sd a5,112(a4) # 801cc658 + 800235f0: a21dc06f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800235f4 <_ZL4Syncv>: + 800235f4: fc010113 addi sp,sp,-64 + 800235f8: 02913423 sd s1,40(sp) + 800235fc: 001a9497 auipc s1,0x1a9 + 80023600: bde48493 addi s1,s1,-1058 # 801cc1da <_ZL7latched> + 80023604: 0004c503 lbu a0,0(s1) + 80023608: 03213023 sd s2,32(sp) + 8002360c: 02113c23 sd ra,56(sp) + 80023610: 00655513 srli a0,a0,0x6 + 80023614: 00154513 xori a0,a0,1 + 80023618: 00157513 andi a0,a0,1 + 8002361c: 02813823 sd s0,48(sp) + 80023620: 01313c23 sd s3,24(sp) + 80023624: 01413823 sd s4,16(sp) + 80023628: 01513423 sd s5,8(sp) + 8002362c: 001a9917 auipc s2,0x1a9 + 80023630: bac90913 addi s2,s2,-1108 # 801cc1d8 <_ZL7latchea> + 80023634: a15ed0ef jal ra,80011048 <_Z9setmirrori> + 80023638: 00095783 lhu a5,0(s2) + 8002363c: 00200713 li a4,2 + 80023640: 0037f693 andi a3,a5,3 + 80023644: 06e68263 beq a3,a4,800236a8 <_ZL4Syncv+0xb4> + 80023648: 0017f793 andi a5,a5,1 + 8002364c: 08079863 bnez a5,800236dc <_ZL4Syncv+0xe8> + 80023650: 00000413 li s0,0 + 80023654: 000089b7 lui s3,0x8 + 80023658: 00400913 li s2,4 + 8002365c: 0004c583 lbu a1,0(s1) + 80023660: 00d4151b slliw a0,s0,0xd + 80023664: 0135053b addw a0,a0,s3 + 80023668: 0015959b slliw a1,a1,0x1 + 8002366c: 07e5f593 andi a1,a1,126 + 80023670: 008585bb addw a1,a1,s0 + 80023674: 0014041b addiw s0,s0,1 + 80023678: c24ed0ef jal ra,80010a9c <_Z7setprg8jj> + 8002367c: ff2410e3 bne s0,s2,8002365c <_ZL4Syncv+0x68> + 80023680: 03013403 ld s0,48(sp) + 80023684: 03813083 ld ra,56(sp) + 80023688: 02813483 ld s1,40(sp) + 8002368c: 02013903 ld s2,32(sp) + 80023690: 01813983 ld s3,24(sp) + 80023694: 01013a03 ld s4,16(sp) + 80023698: 00813a83 ld s5,8(sp) + 8002369c: 00000513 li a0,0 + 800236a0: 04010113 addi sp,sp,64 + 800236a4: 861ed06f j 80010f04 <_Z7setchr8j> + 800236a8: 00008437 lui s0,0x8 + 800236ac: 000029b7 lui s3,0x2 + 800236b0: 00010937 lui s2,0x10 + 800236b4: 0004c783 lbu a5,0(s1) + 800236b8: 00040513 mv a0,s0 + 800236bc: 0089843b addw s0,s3,s0 + 800236c0: 0017959b slliw a1,a5,0x1 + 800236c4: 07e5f593 andi a1,a1,126 + 800236c8: 4077d79b sraiw a5,a5,0x7 + 800236cc: 00b785bb addw a1,a5,a1 + 800236d0: bcced0ef jal ra,80010a9c <_Z7setprg8jj> + 800236d4: ff2410e3 bne s0,s2,800236b4 <_ZL4Syncv+0xc0> + 800236d8: fa9ff06f j 80023680 <_ZL4Syncv+0x8c> + 800236dc: 0004c583 lbu a1,0(s1) + 800236e0: 00000413 li s0,0 + 800236e4: 00008a37 lui s4,0x8 + 800236e8: 03f5f593 andi a1,a1,63 + 800236ec: 00400993 li s3,4 + 800236f0: 00100a93 li s5,1 + 800236f4: 00147793 andi a5,s0,1 + 800236f8: 00d4151b slliw a0,s0,0xd + 800236fc: 0015959b slliw a1,a1,0x1 + 80023700: 0014041b addiw s0,s0,1 + 80023704: 00f585bb addw a1,a1,a5 + 80023708: 0145053b addw a0,a0,s4 + 8002370c: b90ed0ef jal ra,80010a9c <_Z7setprg8jj> + 80023710: f73408e3 beq s0,s3,80023680 <_ZL4Syncv+0x8c> + 80023714: 0004c583 lbu a1,0(s1) + 80023718: 03f5f713 andi a4,a1,63 + 8002371c: 00070593 mv a1,a4 + 80023720: fd540ae3 beq s0,s5,800236f4 <_ZL4Syncv+0x100> + 80023724: 00095783 lhu a5,0(s2) # 10000 <_entry_offset+0x10000> + 80023728: 0027f793 andi a5,a5,2 + 8002372c: fc0794e3 bnez a5,800236f4 <_ZL4Syncv+0x100> + 80023730: 00776593 ori a1,a4,7 + 80023734: fc1ff06f j 800236f4 <_ZL4Syncv+0x100> + +0000000080023738 <_ZL12StateRestorei>: + 80023738: ebdff06f j 800235f4 <_ZL4Syncv> + +000000008002373c <_ZL8M15Resetv>: + 8002373c: ffff87b7 lui a5,0xffff8 + 80023740: 001a9717 auipc a4,0x1a9 + 80023744: a8f71c23 sh a5,-1384(a4) # 801cc1d8 <_ZL7latchea> + 80023748: 001a9797 auipc a5,0x1a9 + 8002374c: a8078923 sb zero,-1390(a5) # 801cc1da <_ZL7latched> + 80023750: ea5ff06f j 800235f4 <_ZL4Syncv> + +0000000080023754 <_ZL8M15Closev>: + 80023754: 001a9517 auipc a0,0x1a9 + 80023758: a7c53503 ld a0,-1412(a0) # 801cc1d0 <_ZL4WRAM> + 8002375c: 02050263 beqz a0,80023780 <_ZL8M15Closev+0x2c> + 80023760: ff010113 addi sp,sp,-16 + 80023764: 00113423 sd ra,8(sp) + 80023768: dd9ee0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002376c: 00813083 ld ra,8(sp) + 80023770: 001a9797 auipc a5,0x1a9 + 80023774: a607b023 sd zero,-1440(a5) # 801cc1d0 <_ZL4WRAM> + 80023778: 01010113 addi sp,sp,16 + 8002377c: 00008067 ret + 80023780: 001a9797 auipc a5,0x1a9 + 80023784: a407b823 sd zero,-1456(a5) # 801cc1d0 <_ZL4WRAM> + 80023788: 00008067 ret + +000000008002378c <_ZL8M15Powerv>: + 8002378c: ff010113 addi sp,sp,-16 + 80023790: ffff87b7 lui a5,0xffff8 + 80023794: 00000613 li a2,0 + 80023798: 000065b7 lui a1,0x6 + 8002379c: 01000513 li a0,16 + 800237a0: 00113423 sd ra,8(sp) + 800237a4: 001a9717 auipc a4,0x1a9 + 800237a8: a2f71a23 sh a5,-1484(a4) # 801cc1d8 <_ZL7latchea> + 800237ac: 00813023 sd s0,0(sp) + 800237b0: 001a9797 auipc a5,0x1a9 + 800237b4: a2078523 sb zero,-1494(a5) # 801cc1da <_ZL7latched> + 800237b8: 00008437 lui s0,0x8 + 800237bc: 92ced0ef jal ra,800108e8 <_Z8setprg8rijj> + 800237c0: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 800237c4: fffed617 auipc a2,0xfffed + 800237c8: e9c60613 addi a2,a2,-356 # 80010660 <_Z6CartBRj> + 800237cc: 00006537 lui a0,0x6 + 800237d0: 24c100ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800237d4: fff40593 addi a1,s0,-1 + 800237d8: fffed617 auipc a2,0xfffed + 800237dc: eb460613 addi a2,a2,-332 # 8001068c <_Z6CartBWjh> + 800237e0: 00006537 lui a0,0x6 + 800237e4: 344100ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800237e8: 00010437 lui s0,0x10 + 800237ec: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 800237f0: 00000617 auipc a2,0x0 + 800237f4: 05060613 addi a2,a2,80 # 80023840 <_ZL8M15Writejh> + 800237f8: 00008537 lui a0,0x8 + 800237fc: 32c100ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80023800: fff40593 addi a1,s0,-1 + 80023804: fffed617 auipc a2,0xfffed + 80023808: e5c60613 addi a2,a2,-420 # 80010660 <_Z6CartBRj> + 8002380c: 00008537 lui a0,0x8 + 80023810: 20c100ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80023814: 001a9517 auipc a0,0x1a9 + 80023818: 9c852503 lw a0,-1592(a0) # 801cc1dc <_ZL8WRAMSIZE> + 8002381c: 001a9617 auipc a2,0x1a9 + 80023820: 9b463603 ld a2,-1612(a2) # 801cc1d0 <_ZL4WRAM> + 80023824: 000065b7 lui a1,0x6 + 80023828: 00a5551b srliw a0,a0,0xa + 8002382c: fe8dc0ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 80023830: 00013403 ld s0,0(sp) + 80023834: 00813083 ld ra,8(sp) + 80023838: 01010113 addi sp,sp,16 + 8002383c: db9ff06f j 800235f4 <_ZL4Syncv> + +0000000080023840 <_ZL8M15Writejh>: + 80023840: 001a9797 auipc a5,0x1a9 + 80023844: 98a79c23 sh a0,-1640(a5) # 801cc1d8 <_ZL7latchea> + 80023848: 001a9797 auipc a5,0x1a9 + 8002384c: 98b78923 sb a1,-1646(a5) # 801cc1da <_ZL7latched> + 80023850: ff010113 addi sp,sp,-16 + 80023854: 00113423 sd ra,8(sp) + 80023858: 00357513 andi a0,a0,3 + 8002385c: 00300793 li a5,3 + 80023860: 0009f597 auipc a1,0x9f + 80023864: da05b583 ld a1,-608(a1) # 800c2600 + 80023868: 02f50063 beq a0,a5,80023888 <_ZL8M15Writejh+0x48> + 8002386c: 00100693 li a3,1 + 80023870: 00002637 lui a2,0x2 + 80023874: 00000513 li a0,0 + 80023878: d4dec0ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 8002387c: 00813083 ld ra,8(sp) + 80023880: 01010113 addi sp,sp,16 + 80023884: d71ff06f j 800235f4 <_ZL4Syncv> + 80023888: 00000693 li a3,0 + 8002388c: 00002637 lui a2,0x2 + 80023890: 00000513 li a0,0 + 80023894: d31ec0ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 80023898: 00813083 ld ra,8(sp) + 8002389c: 01010113 addi sp,sp,16 + 800238a0: d55ff06f j 800235f4 <_ZL4Syncv> + +00000000800238a4 <_Z13Mapper15_InitP8CartInfo>: + 800238a4: fe010113 addi sp,sp,-32 + 800238a8: 00113c23 sd ra,24(sp) + 800238ac: 00813823 sd s0,16(sp) + 800238b0: 00913423 sd s1,8(sp) + 800238b4: 01213023 sd s2,0(sp) + 800238b8: 00000797 auipc a5,0x0 + 800238bc: ed478793 addi a5,a5,-300 # 8002378c <_ZL8M15Powerv> + 800238c0: 00f53023 sd a5,0(a0) + 800238c4: 00000797 auipc a5,0x0 + 800238c8: e7878793 addi a5,a5,-392 # 8002373c <_ZL8M15Resetv> + 800238cc: 00f53423 sd a5,8(a0) + 800238d0: 00000797 auipc a5,0x0 + 800238d4: e8478793 addi a5,a5,-380 # 80023754 <_ZL8M15Closev> + 800238d8: 00f53823 sd a5,16(a0) + 800238dc: 00000797 auipc a5,0x0 + 800238e0: e5c78793 addi a5,a5,-420 # 80023738 <_ZL12StateRestorei> + 800238e4: 001a9497 auipc s1,0x1a9 + 800238e8: 8f848493 addi s1,s1,-1800 # 801cc1dc <_ZL8WRAMSIZE> + 800238ec: 00050413 mv s0,a0 + 800238f0: 001a9717 auipc a4,0x1a9 + 800238f4: d6f73423 sd a5,-664(a4) # 801cc658 + 800238f8: 00002537 lui a0,0x2 + 800238fc: 000027b7 lui a5,0x2 + 80023900: 00f4a023 sw a5,0(s1) + 80023904: b69ee0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80023908: 0004a603 lw a2,0(s1) + 8002390c: 00050593 mv a1,a0 + 80023910: 001a9917 auipc s2,0x1a9 + 80023914: 8c090913 addi s2,s2,-1856 # 801cc1d0 <_ZL4WRAM> + 80023918: 01000513 li a0,16 + 8002391c: 00100693 li a3,1 + 80023920: 00b93023 sd a1,0(s2) + 80023924: bd1ec0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80023928: 04c42783 lw a5,76(s0) + 8002392c: 00093503 ld a0,0(s2) + 80023930: 0004a583 lw a1,0(s1) + 80023934: 00078663 beqz a5,80023940 <_Z13Mapper15_InitP8CartInfo+0x9c> + 80023938: 00a43c23 sd a0,24(s0) + 8002393c: 02b42c23 sw a1,56(s0) + 80023940: 00022697 auipc a3,0x22 + 80023944: 9e868693 addi a3,a3,-1560 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80023948: 00000613 li a2,0 + 8002394c: ec4dc0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80023950: 01013403 ld s0,16(sp) + 80023954: 01813083 ld ra,24(sp) + 80023958: 00813483 ld s1,8(sp) + 8002395c: 00013903 ld s2,0(sp) + 80023960: 00000693 li a3,0 + 80023964: 00000613 li a2,0 + 80023968: fff00593 li a1,-1 + 8002396c: 00028517 auipc a0,0x28 + 80023970: cb450513 addi a0,a0,-844 # 8004b620 <_ZL9StateRegs> + 80023974: 02010113 addi sp,sp,32 + 80023978: e98dc06f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002397c <_ZL10M178SndClki>: + 8002397c: 001a9697 auipc a3,0x1a9 + 80023980: 86868693 addi a3,a3,-1944 # 801cc1e4 <_ZL11SensorDelay> + 80023984: 0006a783 lw a5,0(a3) + 80023988: 00032737 lui a4,0x32 + 8002398c: 76870713 addi a4,a4,1896 # 32768 <_entry_offset+0x32768> + 80023990: 00a7863b addw a2,a5,a0 + 80023994: 00c74663 blt a4,a2,800239a0 <_ZL10M178SndClki+0x24> + 80023998: 00c6a023 sw a2,0(a3) + 8002399c: 00008067 ret + 800239a0: ff010113 addi sp,sp,-16 + 800239a4: 00813023 sd s0,0(sp) + 800239a8: ffff8737 lui a4,0xffff8 + 800239ac: 000a4417 auipc s0,0xa4 + 800239b0: cb440413 addi s0,s0,-844 # 800c7660 <_ZL9MouseData> + 800239b4: 00c707bb addw a5,a4,a2 + 800239b8: 00113423 sd ra,8(sp) + 800239bc: 00040513 mv a0,s0 + 800239c0: 00f6a023 sw a5,0(a3) + 800239c4: edcea0ef jal ra,8000e0a0 <_Z12GetMouseDataRA3_j> + 800239c8: 00842783 lw a5,8(s0) + 800239cc: 001a9717 auipc a4,0x1a9 + 800239d0: 82c70713 addi a4,a4,-2004 # 801cc1f8 <_ZL5click> + 800239d4: 00072683 lw a3,0(a4) + 800239d8: 0017f793 andi a5,a5,1 + 800239dc: 00f72023 sw a5,0(a4) + 800239e0: 00068e63 beqz a3,800239fc <_ZL10M178SndClki+0x80> + 800239e4: 00079c63 bnez a5,800239fc <_ZL10M178SndClki+0x80> + 800239e8: 00013403 ld s0,0(sp) + 800239ec: 00813083 ld ra,8(sp) + 800239f0: 00100513 li a0,1 + 800239f4: 01010113 addi sp,sp,16 + 800239f8: b40dd06f j 80000d38 <_Z14X6502_IRQBegini> + 800239fc: 00813083 ld ra,8(sp) + 80023a00: 00013403 ld s0,0(sp) + 80023a04: 01010113 addi sp,sp,16 + 80023a08: 00008067 ret + +0000000080023a0c <_ZL4Syncv>: + 80023a0c: fd010113 addi sp,sp,-48 + 80023a10: 00913c23 sd s1,24(sp) + 80023a14: 00000513 li a0,0 + 80023a18: 001a8497 auipc s1,0x1a8 + 80023a1c: 7d048493 addi s1,s1,2000 # 801cc1e8 <_ZL3reg> + 80023a20: 02113423 sd ra,40(sp) + 80023a24: 02813023 sd s0,32(sp) + 80023a28: 01213823 sd s2,16(sp) + 80023a2c: 0014c403 lbu s0,1(s1) + 80023a30: 0024c903 lbu s2,2(s1) + 80023a34: cd0ed0ef jal ra,80010f04 <_Z7setchr8j> + 80023a38: 0034c603 lbu a2,3(s1) + 80023a3c: 000065b7 lui a1,0x6 + 80023a40: 01000513 li a0,16 + 80023a44: 00367613 andi a2,a2,3 + 80023a48: ea1ec0ef jal ra,800108e8 <_Z8setprg8rijj> + 80023a4c: 0004c783 lbu a5,0(s1) + 80023a50: 00747413 andi s0,s0,7 + 80023a54: 0039191b slliw s2,s2,0x3 + 80023a58: 012465b3 or a1,s0,s2 + 80023a5c: 0027f713 andi a4,a5,2 + 80023a60: 0005859b sext.w a1,a1 + 80023a64: 04071c63 bnez a4,80023abc <_ZL4Syncv+0xb0> + 80023a68: 0047f793 andi a5,a5,4 + 80023a6c: 02079a63 bnez a5,80023aa0 <_ZL4Syncv+0x94> + 80023a70: 0015d593 srli a1,a1,0x1 + 80023a74: 00008537 lui a0,0x8 + 80023a78: b9ced0ef jal ra,80010e14 <_Z8setprg32jj> + 80023a7c: 0004c503 lbu a0,0(s1) + 80023a80: 02013403 ld s0,32(sp) + 80023a84: 02813083 ld ra,40(sp) + 80023a88: 01813483 ld s1,24(sp) + 80023a8c: 01013903 ld s2,16(sp) + 80023a90: fff54513 not a0,a0 + 80023a94: 00157513 andi a0,a0,1 + 80023a98: 03010113 addi sp,sp,48 + 80023a9c: daced06f j 80011048 <_Z9setmirrori> + 80023aa0: 00008537 lui a0,0x8 + 80023aa4: 00b13423 sd a1,8(sp) + 80023aa8: 9b0ed0ef jal ra,80010c58 <_Z8setprg16jj> + 80023aac: 00813583 ld a1,8(sp) + 80023ab0: 0000c537 lui a0,0xc + 80023ab4: 9a4ed0ef jal ra,80010c58 <_Z8setprg16jj> + 80023ab8: fc5ff06f j 80023a7c <_ZL4Syncv+0x70> + 80023abc: 00008537 lui a0,0x8 + 80023ac0: 998ed0ef jal ra,80010c58 <_Z8setprg16jj> + 80023ac4: 0004c783 lbu a5,0(s1) + 80023ac8: 0047f793 andi a5,a5,4 + 80023acc: 02078263 beqz a5,80023af0 <_ZL4Syncv+0xe4> + 80023ad0: 0014c583 lbu a1,1(s1) + 80023ad4: 0000c537 lui a0,0xc + 80023ad8: 0015f593 andi a1,a1,1 + 80023adc: 0125e5b3 or a1,a1,s2 + 80023ae0: 0065e593 ori a1,a1,6 + 80023ae4: 0005859b sext.w a1,a1 + 80023ae8: 970ed0ef jal ra,80010c58 <_Z8setprg16jj> + 80023aec: f91ff06f j 80023a7c <_ZL4Syncv+0x70> + 80023af0: 00796593 ori a1,s2,7 + 80023af4: 0005859b sext.w a1,a1 + 80023af8: 0000c537 lui a0,0xc + 80023afc: 95ced0ef jal ra,80010c58 <_Z8setprg16jj> + 80023b00: f7dff06f j 80023a7c <_ZL4Syncv+0x70> + +0000000080023b04 <_ZL12StateRestorei>: + 80023b04: f09ff06f j 80023a0c <_ZL4Syncv> + +0000000080023b08 <_ZL9M178Writejh>: + 80023b08: 00357793 andi a5,a0,3 + 80023b0c: 001a8517 auipc a0,0x1a8 + 80023b10: 6dc50513 addi a0,a0,1756 # 801cc1e8 <_ZL3reg> + 80023b14: 00f50533 add a0,a0,a5 + 80023b18: 00b50023 sb a1,0(a0) + 80023b1c: ef1ff06f j 80023a0c <_ZL4Syncv> + +0000000080023b20 <_ZL9M178Closev>: + 80023b20: 001a8517 auipc a0,0x1a8 + 80023b24: 6d053503 ld a0,1744(a0) # 801cc1f0 <_ZL4WRAM> + 80023b28: 02050263 beqz a0,80023b4c <_ZL9M178Closev+0x2c> + 80023b2c: ff010113 addi sp,sp,-16 + 80023b30: 00113423 sd ra,8(sp) + 80023b34: a0dee0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80023b38: 00813083 ld ra,8(sp) + 80023b3c: 001a8797 auipc a5,0x1a8 + 80023b40: 6a07ba23 sd zero,1716(a5) # 801cc1f0 <_ZL4WRAM> + 80023b44: 01010113 addi sp,sp,16 + 80023b48: 00008067 ret + 80023b4c: 001a8797 auipc a5,0x1a8 + 80023b50: 6a07b223 sd zero,1700(a5) # 801cc1f0 <_ZL4WRAM> + 80023b54: 00008067 ret + +0000000080023b58 <_ZL9M178Powerv>: + 80023b58: ff010113 addi sp,sp,-16 + 80023b5c: 00113423 sd ra,8(sp) + 80023b60: 00813023 sd s0,0(sp) + 80023b64: 001a8797 auipc a5,0x1a8 + 80023b68: 6807a023 sw zero,1664(a5) # 801cc1e4 <_ZL11SensorDelay> + 80023b6c: 001a8797 auipc a5,0x1a8 + 80023b70: 6607ae23 sw zero,1660(a5) # 801cc1e8 <_ZL3reg> + 80023b74: e99ff0ef jal ra,80023a0c <_ZL4Syncv> + 80023b78: 00005537 lui a0,0x5 + 80023b7c: fff50593 addi a1,a0,-1 # 4fff <_entry_offset+0x4fff> + 80023b80: 00000617 auipc a2,0x0 + 80023b84: f8860613 addi a2,a2,-120 # 80023b08 <_ZL9M178Writejh> + 80023b88: 80050513 addi a0,a0,-2048 + 80023b8c: 79d0f0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80023b90: 00006437 lui s0,0x6 + 80023b94: fff40593 addi a1,s0,-1 # 5fff <_entry_offset+0x5fff> + 80023b98: 80040513 addi a0,s0,-2048 + 80023b9c: 00000617 auipc a2,0x0 + 80023ba0: 0c060613 addi a2,a2,192 # 80023c5c <_ZL12M178WriteSndjh> + 80023ba4: 7850f0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80023ba8: fff40593 addi a1,s0,-1 + 80023bac: 80040513 addi a0,s0,-2048 + 80023bb0: 00000617 auipc a2,0x0 + 80023bb4: 0e060613 addi a2,a2,224 # 80023c90 <_ZL11M178ReadSndj> + 80023bb8: 6650f0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80023bbc: 00000617 auipc a2,0x0 + 80023bc0: 08060613 addi a2,a2,128 # 80023c3c <_ZL14M178ReadSensorj> + 80023bc4: 000055b7 lui a1,0x5 + 80023bc8: 00005537 lui a0,0x5 + 80023bcc: 6510f0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80023bd0: 00008437 lui s0,0x8 + 80023bd4: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 80023bd8: fffed617 auipc a2,0xfffed + 80023bdc: a8860613 addi a2,a2,-1400 # 80010660 <_Z6CartBRj> + 80023be0: 00006537 lui a0,0x6 + 80023be4: 6390f0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80023be8: fff40593 addi a1,s0,-1 + 80023bec: fffed617 auipc a2,0xfffed + 80023bf0: aa060613 addi a2,a2,-1376 # 8001068c <_Z6CartBWjh> + 80023bf4: 00006537 lui a0,0x6 + 80023bf8: 7310f0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80023bfc: 000105b7 lui a1,0x10 + 80023c00: fffed617 auipc a2,0xfffed + 80023c04: a6060613 addi a2,a2,-1440 # 80010660 <_Z6CartBRj> + 80023c08: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80023c0c: 00008537 lui a0,0x8 + 80023c10: 60d0f0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80023c14: 00013403 ld s0,0(sp) + 80023c18: 00813083 ld ra,8(sp) + 80023c1c: 001a8517 auipc a0,0x1a8 + 80023c20: 5e052503 lw a0,1504(a0) # 801cc1fc <_ZL8WRAMSIZE> + 80023c24: 001a8617 auipc a2,0x1a8 + 80023c28: 5cc63603 ld a2,1484(a2) # 801cc1f0 <_ZL4WRAM> + 80023c2c: 000065b7 lui a1,0x6 + 80023c30: 00a5551b srliw a0,a0,0xa + 80023c34: 01010113 addi sp,sp,16 + 80023c38: bdcdc06f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +0000000080023c3c <_ZL14M178ReadSensorj>: + 80023c3c: ff010113 addi sp,sp,-16 + 80023c40: 00100513 li a0,1 + 80023c44: 00113423 sd ra,8(sp) + 80023c48: 908dd0ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 80023c4c: 00813083 ld ra,8(sp) + 80023c50: 00000513 li a0,0 + 80023c54: 01010113 addi sp,sp,16 + 80023c58: 00008067 ret + +0000000080023c5c <_ZL12M178WriteSndjh>: + 80023c5c: 000067b7 lui a5,0x6 + 80023c60: 80078793 addi a5,a5,-2048 # 5800 <_entry_offset+0x5800> + 80023c64: 00f50463 beq a0,a5,80023c6c <_ZL12M178WriteSndjh+0x10> + 80023c68: 00008067 ret + 80023c6c: 0f05f593 andi a1,a1,240 + 80023c70: 00058a63 beqz a1,80023c84 <_ZL12M178WriteSndjh+0x28> + 80023c74: 00100793 li a5,1 + 80023c78: 001a8717 auipc a4,0x1a8 + 80023c7c: 56f70423 sb a5,1384(a4) # 801cc1e0 <_ZL10pcm_enable> + 80023c80: 00008067 ret + 80023c84: 001a8797 auipc a5,0x1a8 + 80023c88: 54078e23 sb zero,1372(a5) # 801cc1e0 <_ZL10pcm_enable> + 80023c8c: 00008067 ret + +0000000080023c90 <_ZL11M178ReadSndj>: + 80023c90: 00006737 lui a4,0x6 + 80023c94: 80070713 addi a4,a4,-2048 # 5800 <_entry_offset+0x5800> + 80023c98: 00034797 auipc a5,0x34 + 80023c9c: bd07c783 lbu a5,-1072(a5) # 80057868 + 80023ca0: 02e51063 bne a0,a4,80023cc0 <_ZL11M178ReadSndj+0x30> + 80023ca4: 001a8517 auipc a0,0x1a8 + 80023ca8: 53c54503 lbu a0,1340(a0) # 801cc1e0 <_ZL10pcm_enable> + 80023cac: 00154513 xori a0,a0,1 + 80023cb0: fbf7f793 andi a5,a5,-65 + 80023cb4: 0065151b slliw a0,a0,0x6 + 80023cb8: 00a7e7b3 or a5,a5,a0 + 80023cbc: 0ff7f793 andi a5,a5,255 + 80023cc0: 00078513 mv a0,a5 + 80023cc4: 00008067 ret + +0000000080023cc8 <_Z14Mapper178_InitP8CartInfo>: + 80023cc8: fe010113 addi sp,sp,-32 + 80023ccc: 00113c23 sd ra,24(sp) + 80023cd0: 00813823 sd s0,16(sp) + 80023cd4: 00913423 sd s1,8(sp) + 80023cd8: 01213023 sd s2,0(sp) + 80023cdc: 00000797 auipc a5,0x0 + 80023ce0: e7c78793 addi a5,a5,-388 # 80023b58 <_ZL9M178Powerv> + 80023ce4: 00f53023 sd a5,0(a0) + 80023ce8: 00000797 auipc a5,0x0 + 80023cec: e3878793 addi a5,a5,-456 # 80023b20 <_ZL9M178Closev> + 80023cf0: 00f53823 sd a5,16(a0) + 80023cf4: 00000797 auipc a5,0x0 + 80023cf8: e1078793 addi a5,a5,-496 # 80023b04 <_ZL12StateRestorei> + 80023cfc: 001a9717 auipc a4,0x1a9 + 80023d00: 94f73e23 sd a5,-1700(a4) # 801cc658 + 80023d04: 00000797 auipc a5,0x0 + 80023d08: c7878793 addi a5,a5,-904 # 8002397c <_ZL10M178SndClki> + 80023d0c: 001a8497 auipc s1,0x1a8 + 80023d10: 4f048493 addi s1,s1,1264 # 801cc1fc <_ZL8WRAMSIZE> + 80023d14: 00050413 mv s0,a0 + 80023d18: 001a8717 auipc a4,0x1a8 + 80023d1c: e2f73423 sd a5,-472(a4) # 801cbb40 + 80023d20: 00008537 lui a0,0x8 + 80023d24: 000087b7 lui a5,0x8 + 80023d28: 00f4a023 sw a5,0(s1) + 80023d2c: f40ee0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80023d30: 0004a603 lw a2,0(s1) + 80023d34: 00050593 mv a1,a0 + 80023d38: 001a8917 auipc s2,0x1a8 + 80023d3c: 4b890913 addi s2,s2,1208 # 801cc1f0 <_ZL4WRAM> + 80023d40: 01000513 li a0,16 + 80023d44: 00100693 li a3,1 + 80023d48: 00b93023 sd a1,0(s2) + 80023d4c: fa8ec0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80023d50: 04c42783 lw a5,76(s0) + 80023d54: 00093503 ld a0,0(s2) + 80023d58: 0004a583 lw a1,0(s1) + 80023d5c: 00078663 beqz a5,80023d68 <_Z14Mapper178_InitP8CartInfo+0xa0> + 80023d60: 00a43c23 sd a0,24(s0) + 80023d64: 02b42c23 sw a1,56(s0) + 80023d68: 00021697 auipc a3,0x21 + 80023d6c: 5c068693 addi a3,a3,1472 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80023d70: 00000613 li a2,0 + 80023d74: a9cdc0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80023d78: 01013403 ld s0,16(sp) + 80023d7c: 01813083 ld ra,24(sp) + 80023d80: 00813483 ld s1,8(sp) + 80023d84: 00013903 ld s2,0(sp) + 80023d88: 00000693 li a3,0 + 80023d8c: 00000613 li a2,0 + 80023d90: fff00593 li a1,-1 + 80023d94: 00028517 auipc a0,0x28 + 80023d98: 8d450513 addi a0,a0,-1836 # 8004b668 <_ZL9StateRegs> + 80023d9c: 02010113 addi sp,sp,32 + 80023da0: a70dc06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080023da4 <_ZL12UNL8237Powerv>: + 80023da4: ff010113 addi sp,sp,-16 + 80023da8: 00113423 sd ra,8(sp) + 80023dac: 001a8797 auipc a5,0x1a8 + 80023db0: 4a478793 addi a5,a5,1188 # 801cc250 + 80023db4: 00300713 li a4,3 + 80023db8: 00078123 sb zero,2(a5) + 80023dbc: 00078023 sb zero,0(a5) + 80023dc0: 00e780a3 sb a4,1(a5) + 80023dc4: 3fc020ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 80023dc8: 000105b7 lui a1,0x10 + 80023dcc: 00000617 auipc a2,0x0 + 80023dd0: 03460613 addi a2,a2,52 # 80023e00 <_ZL12UNL8237Writejh> + 80023dd4: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80023dd8: 00008537 lui a0,0x8 + 80023ddc: 54d0f0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80023de0: 00813083 ld ra,8(sp) + 80023de4: 000085b7 lui a1,0x8 + 80023de8: 00000617 auipc a2,0x0 + 80023dec: 1ac60613 addi a2,a2,428 # 80023f94 <_ZL14UNL8237ExWritejh> + 80023df0: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80023df4: 00005537 lui a0,0x5 + 80023df8: 01010113 addi sp,sp,16 + 80023dfc: 52d0f06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080023e00 <_ZL12UNL8237Writejh>: + 80023e00: 00c5579b srliw a5,a0,0xc + 80023e04: 001a8697 auipc a3,0x1a8 + 80023e08: 44e6c683 lbu a3,1102(a3) # 801cc252 + 80023e0c: 00157513 andi a0,a0,1 + 80023e10: 0067f793 andi a5,a5,6 + 80023e14: 00a7e7b3 or a5,a5,a0 + 80023e18: 00369693 slli a3,a3,0x3 + 80023e1c: 00022517 auipc a0,0x22 + 80023e20: dbc50513 addi a0,a0,-580 # 80045bd8 <_ZL7adrperm> + 80023e24: 00d50533 add a0,a0,a3 + 80023e28: 00f50533 add a0,a0,a5 + 80023e2c: 00054703 lbu a4,0(a0) + 80023e30: 000067b7 lui a5,0x6 + 80023e34: 00300613 li a2,3 + 80023e38: 00c71513 slli a0,a4,0xc + 80023e3c: 00f57533 and a0,a0,a5 + 80023e40: 00177793 andi a5,a4,1 + 80023e44: 00f56533 or a0,a0,a5 + 80023e48: ffff87b7 lui a5,0xffff8 + 80023e4c: 00f56533 or a0,a0,a5 + 80023e50: 0105151b slliw a0,a0,0x10 + 80023e54: 0105551b srliw a0,a0,0x10 + 80023e58: 00058793 mv a5,a1 + 80023e5c: 02e66863 bltu a2,a4,80023e8c <_ZL12UNL8237Writejh+0x8c> + 80023e60: 02071263 bnez a4,80023e84 <_ZL12UNL8237Writejh+0x84> + 80023e64: 00022717 auipc a4,0x22 + 80023e68: db470713 addi a4,a4,-588 # 80045c18 <_ZL7regperm> + 80023e6c: 00d706b3 add a3,a4,a3 + 80023e70: 0075f613 andi a2,a1,7 + 80023e74: 00c686b3 add a3,a3,a2 + 80023e78: 0006c703 lbu a4,0(a3) + 80023e7c: fc05f793 andi a5,a1,-64 + 80023e80: 00e7e7b3 or a5,a5,a4 + 80023e84: 00078593 mv a1,a5 + 80023e88: 23d0206f j 800268c4 <_Z13MMC3_CMDWritejh> + 80023e8c: 4090106f j 80025a94 <_Z13MMC3_IRQWritejh> + +0000000080023e90 <_ZL9UNL8237PWjh>: + 80023e90: ff010113 addi sp,sp,-16 + 80023e94: 001a8797 auipc a5,0x1a8 + 80023e98: 3bc78793 addi a5,a5,956 # 801cc250 + 80023e9c: 00113423 sd ra,8(sp) + 80023ea0: 00813023 sd s0,0(sp) + 80023ea4: 0007c683 lbu a3,0(a5) + 80023ea8: 0017c703 lbu a4,1(a5) + 80023eac: 0186961b slliw a2,a3,0x18 + 80023eb0: 0406f813 andi a6,a3,64 + 80023eb4: 4186561b sraiw a2,a2,0x18 + 80023eb8: 0007079b sext.w a5,a4 + 80023ebc: 06080a63 beqz a6,80023f30 <_ZL9UNL8237PWjh+0xa0> + 80023ec0: 01077713 andi a4,a4,16 + 80023ec4: 0ff77813 andi a6,a4,255 + 80023ec8: 04065263 bgez a2,80023f0c <_ZL9UNL8237PWjh+0x7c> + 80023ecc: 00479593 slli a1,a5,0x4 + 80023ed0: 0305f593 andi a1,a1,48 + 80023ed4: 4018581b sraiw a6,a6,0x1 + 80023ed8: 0105e5b3 or a1,a1,a6 + 80023edc: 00767613 andi a2,a2,7 + 80023ee0: 00c5e5b3 or a1,a1,a2 + 80023ee4: 0185959b slliw a1,a1,0x18 + 80023ee8: 0206f693 andi a3,a3,32 + 80023eec: 4185d59b sraiw a1,a1,0x18 + 80023ef0: 04068e63 beqz a3,80023f4c <_ZL9UNL8237PWjh+0xbc> + 80023ef4: 00013403 ld s0,0(sp) + 80023ef8: 00813083 ld ra,8(sp) + 80023efc: 0015d593 srli a1,a1,0x1 + 80023f00: 00008537 lui a0,0x8 + 80023f04: 01010113 addi sp,sp,16 + 80023f08: f0dec06f j 80010e14 <_Z8setprg32jj> + 80023f0c: 00013403 ld s0,0(sp) + 80023f10: 0057979b slliw a5,a5,0x5 + 80023f14: 00813083 ld ra,8(sp) + 80023f18: 0607f793 andi a5,a5,96 + 80023f1c: 00f76733 or a4,a4,a5 + 80023f20: 00f5f593 andi a1,a1,15 + 80023f24: 00e5e5b3 or a1,a1,a4 + 80023f28: 01010113 addi sp,sp,16 + 80023f2c: b71ec06f j 80010a9c <_Z7setprg8jj> + 80023f30: 04065263 bgez a2,80023f74 <_ZL9UNL8237PWjh+0xe4> + 80023f34: 00479593 slli a1,a5,0x4 + 80023f38: 0305f593 andi a1,a1,48 + 80023f3c: 00f67613 andi a2,a2,15 + 80023f40: 0206f693 andi a3,a3,32 + 80023f44: 00c5e5b3 or a1,a1,a2 + 80023f48: fa0696e3 bnez a3,80023ef4 <_ZL9UNL8237PWjh+0x64> + 80023f4c: 0005841b sext.w s0,a1 + 80023f50: 00040593 mv a1,s0 + 80023f54: 00008537 lui a0,0x8 + 80023f58: d01ec0ef jal ra,80010c58 <_Z8setprg16jj> + 80023f5c: 00040593 mv a1,s0 + 80023f60: 00013403 ld s0,0(sp) + 80023f64: 00813083 ld ra,8(sp) + 80023f68: 0000c537 lui a0,0xc + 80023f6c: 01010113 addi sp,sp,16 + 80023f70: ce9ec06f j 80010c58 <_Z8setprg16jj> + 80023f74: 00013403 ld s0,0(sp) + 80023f78: 00813083 ld ra,8(sp) + 80023f7c: 0057979b slliw a5,a5,0x5 + 80023f80: 0607f793 andi a5,a5,96 + 80023f84: 01f5f593 andi a1,a1,31 + 80023f88: 00f5e5b3 or a1,a1,a5 + 80023f8c: 01010113 addi sp,sp,16 + 80023f90: b0dec06f j 80010a9c <_Z7setprg8jj> + +0000000080023f94 <_ZL14UNL8237ExWritejh>: + 80023f94: 000057b7 lui a5,0x5 + 80023f98: 00178713 addi a4,a5,1 # 5001 <_entry_offset+0x5001> + 80023f9c: 02e50a63 beq a0,a4,80023fd0 <_ZL14UNL8237ExWritejh+0x3c> + 80023fa0: 00778713 addi a4,a5,7 + 80023fa4: 02e50063 beq a0,a4,80023fc4 <_ZL14UNL8237ExWritejh+0x30> + 80023fa8: 00f50463 beq a0,a5,80023fb0 <_ZL14UNL8237ExWritejh+0x1c> + 80023fac: 00008067 ret + 80023fb0: 001a8517 auipc a0,0x1a8 + 80023fb4: 2ac54503 lbu a0,684(a0) # 801cc25c + 80023fb8: 001a8797 auipc a5,0x1a8 + 80023fbc: 28b78c23 sb a1,664(a5) # 801cc250 + 80023fc0: 6ad0106f j 80025e6c <_Z10FixMMC3PRGi> + 80023fc4: 001a8797 auipc a5,0x1a8 + 80023fc8: 28b78723 sb a1,654(a5) # 801cc252 + 80023fcc: 00008067 ret + 80023fd0: ff010113 addi sp,sp,-16 + 80023fd4: 00813023 sd s0,0(sp) + 80023fd8: 001a8417 auipc s0,0x1a8 + 80023fdc: 28440413 addi s0,s0,644 # 801cc25c + 80023fe0: 00044503 lbu a0,0(s0) + 80023fe4: 00113423 sd ra,8(sp) + 80023fe8: 001a8797 auipc a5,0x1a8 + 80023fec: 26b784a3 sb a1,617(a5) # 801cc251 + 80023ff0: 67d010ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80023ff4: 00044503 lbu a0,0(s0) + 80023ff8: 00013403 ld s0,0(sp) + 80023ffc: 00813083 ld ra,8(sp) + 80024000: 01010113 addi sp,sp,16 + 80024004: 0240206f j 80026028 <_Z10FixMMC3CHRi> + +0000000080024008 <_ZL9UNL8237CWjh>: + 80024008: 001a8797 auipc a5,0x1a8 + 8002400c: 24878793 addi a5,a5,584 # 801cc250 + 80024010: 0007c683 lbu a3,0(a5) + 80024014: 0017c703 lbu a4,1(a5) + 80024018: 0406f693 andi a3,a3,64 + 8002401c: 0067179b slliw a5,a4,0x6 + 80024020: 3007f793 andi a5,a5,768 + 80024024: 00068e63 beqz a3,80024040 <_ZL9UNL8237CWjh+0x38> + 80024028: 0027171b slliw a4,a4,0x2 + 8002402c: 08077713 andi a4,a4,128 + 80024030: 00e7e7b3 or a5,a5,a4 + 80024034: 07f5f593 andi a1,a1,127 + 80024038: 00f5e5b3 or a1,a1,a5 + 8002403c: e69ec06f j 80010ea4 <_Z7setchr1jj> + 80024040: 00b7e5b3 or a1,a5,a1 + 80024044: e61ec06f j 80010ea4 <_Z7setchr1jj> + +0000000080024048 <_Z12UNL8237_InitP8CartInfo>: + 80024048: ff010113 addi sp,sp,-16 + 8002404c: 00000713 li a4,0 + 80024050: 00000693 li a3,0 + 80024054: 10000613 li a2,256 + 80024058: 10000593 li a1,256 + 8002405c: 00113423 sd ra,8(sp) + 80024060: 00813023 sd s0,0(sp) + 80024064: 00050413 mv s0,a0 + 80024068: 7b1020ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 8002406c: 00000797 auipc a5,0x0 + 80024070: f9c78793 addi a5,a5,-100 # 80024008 <_ZL9UNL8237CWjh> + 80024074: 001a8717 auipc a4,0x1a8 + 80024078: 20f73623 sd a5,524(a4) # 801cc280 + 8002407c: 00000797 auipc a5,0x0 + 80024080: e1478793 addi a5,a5,-492 # 80023e90 <_ZL9UNL8237PWjh> + 80024084: 001a8717 auipc a4,0x1a8 + 80024088: 20f73a23 sd a5,532(a4) # 801cc298 + 8002408c: 00000797 auipc a5,0x0 + 80024090: d1878793 addi a5,a5,-744 # 80023da4 <_ZL12UNL8237Powerv> + 80024094: 00021697 auipc a3,0x21 + 80024098: 45c68693 addi a3,a3,1116 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 8002409c: 00000613 li a2,0 + 800240a0: 00300593 li a1,3 + 800240a4: 001a8517 auipc a0,0x1a8 + 800240a8: 1ac50513 addi a0,a0,428 # 801cc250 + 800240ac: 00f43023 sd a5,0(s0) + 800240b0: f61db0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800240b4: 00013403 ld s0,0(sp) + 800240b8: 00813083 ld ra,8(sp) + 800240bc: 00022697 auipc a3,0x22 + 800240c0: b1468693 addi a3,a3,-1260 # 80045bd0 <_ZZL5Do5SQiE3tal+0x90> + 800240c4: 00000613 li a2,0 + 800240c8: 00100593 li a1,1 + 800240cc: 001a8517 auipc a0,0x1a8 + 800240d0: 13450513 addi a0,a0,308 # 801cc200 <_ZL5cmdin> + 800240d4: 01010113 addi sp,sp,16 + 800240d8: f39db06f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800240dc <_ZL13BMCFK23CResetv>: + 800240dc: 001a8797 auipc a5,0x1a8 + 800240e0: 12878793 addi a5,a5,296 # 801cc204 <_ZL9dipswitch> + 800240e4: 0007a583 lw a1,0(a5) + 800240e8: ff010113 addi sp,sp,-16 + 800240ec: 00113423 sd ra,8(sp) + 800240f0: 0015859b addiw a1,a1,1 + 800240f4: 00813023 sd s0,0(sp) + 800240f8: 0075f593 andi a1,a1,7 + 800240fc: 00022517 auipc a0,0x22 + 80024100: b5c50513 addi a0,a0,-1188 # 80045c58 <_ZL7regperm+0x40> + 80024104: 00b7a023 sw a1,0(a5) + 80024108: 440170ef jal ra,8003b548 + 8002410c: 001a8797 auipc a5,0x1a8 + 80024110: 14478793 addi a5,a5,324 # 801cc250 + 80024114: fff00713 li a4,-1 + 80024118: 001a8417 auipc s0,0x1a8 + 8002411c: 14440413 addi s0,s0,324 # 801cc25c + 80024120: 000781a3 sb zero,3(a5) + 80024124: 00078123 sb zero,2(a5) + 80024128: 000780a3 sb zero,1(a5) + 8002412c: 00078023 sb zero,0(a5) + 80024130: 00e783a3 sb a4,7(a5) + 80024134: 00e78323 sb a4,6(a5) + 80024138: 00e782a3 sb a4,5(a5) + 8002413c: 00e78223 sb a4,4(a5) + 80024140: 028020ef jal ra,80026168 <_Z12MMC3RegResetv> + 80024144: 00044503 lbu a0,0(s0) + 80024148: 525010ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 8002414c: 00044503 lbu a0,0(s0) + 80024150: 00013403 ld s0,0(sp) + 80024154: 00813083 ld ra,8(sp) + 80024158: 01010113 addi sp,sp,16 + 8002415c: 6cd0106f j 80026028 <_Z10FixMMC3CHRi> + +0000000080024160 <_ZL13BMCFK23CPowerv>: + 80024160: ff010113 addi sp,sp,-16 + 80024164: 00113423 sd ra,8(sp) + 80024168: 00813023 sd s0,0(sp) + 8002416c: 054020ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 80024170: 001a8417 auipc s0,0x1a8 + 80024174: 0ec40413 addi s0,s0,236 # 801cc25c + 80024178: 00044503 lbu a0,0(s0) + 8002417c: 001a8797 auipc a5,0x1a8 + 80024180: 0d478793 addi a5,a5,212 # 801cc250 + 80024184: fff00713 li a4,-1 + 80024188: 000781a3 sb zero,3(a5) + 8002418c: 00078123 sb zero,2(a5) + 80024190: 000780a3 sb zero,1(a5) + 80024194: 00078023 sb zero,0(a5) + 80024198: 00e783a3 sb a4,7(a5) + 8002419c: 00e78323 sb a4,6(a5) + 800241a0: 00e782a3 sb a4,5(a5) + 800241a4: 00e78223 sb a4,4(a5) + 800241a8: 001a8697 auipc a3,0x1a8 + 800241ac: 0406ae23 sw zero,92(a3) # 801cc204 <_ZL9dipswitch> + 800241b0: 4bd010ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 800241b4: 00044503 lbu a0,0(s0) + 800241b8: 671010ef jal ra,80026028 <_Z10FixMMC3CHRi> + 800241bc: 000065b7 lui a1,0x6 + 800241c0: 00000617 auipc a2,0x0 + 800241c4: 12860613 addi a2,a2,296 # 800242e8 <_ZL13BMCFK23CWritejh> + 800241c8: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 800241cc: 00005537 lui a0,0x5 + 800241d0: 1590f0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800241d4: 00013403 ld s0,0(sp) + 800241d8: 00813083 ld ra,8(sp) + 800241dc: 000105b7 lui a1,0x10 + 800241e0: 00000617 auipc a2,0x0 + 800241e4: 1d460613 addi a2,a2,468 # 800243b4 <_ZL15BMCFK23CHiWritejh> + 800241e8: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 800241ec: 00008537 lui a0,0x8 + 800241f0: 01010113 addi sp,sp,16 + 800241f4: 1350f06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +00000000800241f8 <_ZL10BMCFK23CPWjh>: + 800241f8: ff010113 addi sp,sp,-16 + 800241fc: 00813023 sd s0,0(sp) + 80024200: 001a8417 auipc s0,0x1a8 + 80024204: 05040413 addi s0,s0,80 # 801cc250 + 80024208: 00044783 lbu a5,0(s0) + 8002420c: 00113423 sd ra,8(sp) + 80024210: 00400693 li a3,4 + 80024214: 0077f713 andi a4,a5,7 + 80024218: 0ad70063 beq a4,a3,800242b8 <_ZL10BMCFK23CPWjh+0xc0> + 8002421c: 00300693 li a3,3 + 80024220: 0ad70663 beq a4,a3,800242cc <_ZL10BMCFK23CPWjh+0xd4> + 80024224: 0037f793 andi a5,a5,3 + 80024228: 02079e63 bnez a5,80024264 <_ZL10BMCFK23CPWjh+0x6c> + 8002422c: 00000593 li a1,0 + 80024230: 86dec0ef jal ra,80010a9c <_Z7setprg8jj> + 80024234: 00344783 lbu a5,3(s0) + 80024238: 0027f793 andi a5,a5,2 + 8002423c: 06079063 bnez a5,8002429c <_ZL10BMCFK23CPWjh+0xa4> + 80024240: 00013403 ld s0,0(sp) + 80024244: 00813083 ld ra,8(sp) + 80024248: 001a8617 auipc a2,0x1a8 + 8002424c: feb64603 lbu a2,-21(a2) # 801cc233 + 80024250: 00367613 andi a2,a2,3 + 80024254: 000065b7 lui a1,0x6 + 80024258: 01000513 li a0,16 + 8002425c: 01010113 addi sp,sp,16 + 80024260: e88ec06f j 800108e8 <_Z8setprg8rijj> + 80024264: 00600693 li a3,6 + 80024268: 40f686bb subw a3,a3,a5 + 8002426c: 00144703 lbu a4,1(s0) + 80024270: 00100793 li a5,1 + 80024274: 00d797bb sllw a5,a5,a3 + 80024278: fff7879b addiw a5,a5,-1 + 8002427c: 00f5f5b3 and a1,a1,a5 + 80024280: 0017179b slliw a5,a4,0x1 + 80024284: 00f5e5b3 or a1,a1,a5 + 80024288: 0ff5f593 andi a1,a1,255 + 8002428c: 811ec0ef jal ra,80010a9c <_Z7setprg8jj> + 80024290: 00344783 lbu a5,3(s0) + 80024294: 0027f793 andi a5,a5,2 + 80024298: fa0784e3 beqz a5,80024240 <_ZL10BMCFK23CPWjh+0x48> + 8002429c: 00444583 lbu a1,4(s0) + 800242a0: 0000c537 lui a0,0xc + 800242a4: ff8ec0ef jal ra,80010a9c <_Z7setprg8jj> + 800242a8: 00544583 lbu a1,5(s0) + 800242ac: 0000e537 lui a0,0xe + 800242b0: fecec0ef jal ra,80010a9c <_Z7setprg8jj> + 800242b4: f8dff06f j 80024240 <_ZL10BMCFK23CPWjh+0x48> + 800242b8: 00144583 lbu a1,1(s0) + 800242bc: 00008537 lui a0,0x8 + 800242c0: 0015d593 srli a1,a1,0x1 + 800242c4: b51ec0ef jal ra,80010e14 <_Z8setprg32jj> + 800242c8: f79ff06f j 80024240 <_ZL10BMCFK23CPWjh+0x48> + 800242cc: 00144583 lbu a1,1(s0) + 800242d0: 00008537 lui a0,0x8 + 800242d4: 985ec0ef jal ra,80010c58 <_Z8setprg16jj> + 800242d8: 00144583 lbu a1,1(s0) + 800242dc: 0000c537 lui a0,0xc + 800242e0: 979ec0ef jal ra,80010c58 <_Z8setprg16jj> + 800242e4: f5dff06f j 80024240 <_ZL10BMCFK23CPWjh+0x48> + +00000000800242e8 <_ZL13BMCFK23CWritejh>: + 800242e8: 001a8797 auipc a5,0x1a8 + 800242ec: f1c7a783 lw a5,-228(a5) # 801cc204 <_ZL9dipswitch> + 800242f0: 0047869b addiw a3,a5,4 + 800242f4: 00100793 li a5,1 + 800242f8: 00d797bb sllw a5,a5,a3 + 800242fc: 00f577b3 and a5,a0,a5 + 80024300: 0007879b sext.w a5,a5 + 80024304: 02079c63 bnez a5,8002433c <_ZL13BMCFK23CWritejh+0x54> + 80024308: 001a8797 auipc a5,0x1a8 + 8002430c: ef97c783 lbu a5,-263(a5) # 801cc201 <_ZL12is_BMCFK23CA> + 80024310: 02078463 beqz a5,80024338 <_ZL13BMCFK23CWritejh+0x50> + 80024314: 001a8717 auipc a4,0x1a8 + 80024318: f3c70713 addi a4,a4,-196 # 801cc250 + 8002431c: 00374783 lbu a5,3(a4) + 80024320: 0027f793 andi a5,a5,2 + 80024324: 00078a63 beqz a5,80024338 <_ZL13BMCFK23CWritejh+0x50> + 80024328: 00074783 lbu a5,0(a4) + 8002432c: ff87f793 andi a5,a5,-8 + 80024330: 00f70023 sb a5,0(a4) + 80024334: 00008067 ret + 80024338: 00008067 ret + 8002433c: ff010113 addi sp,sp,-16 + 80024340: 00813023 sd s0,0(sp) + 80024344: 001a8417 auipc s0,0x1a8 + 80024348: f1840413 addi s0,s0,-232 # 801cc25c + 8002434c: 00050713 mv a4,a0 + 80024350: 00044503 lbu a0,0(s0) + 80024354: 001a8797 auipc a5,0x1a8 + 80024358: efc78793 addi a5,a5,-260 # 801cc250 + 8002435c: 00377713 andi a4,a4,3 + 80024360: 00e78733 add a4,a5,a4 + 80024364: 00113423 sd ra,8(sp) + 80024368: 00b70023 sb a1,0(a4) + 8002436c: 301010ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80024370: 00044503 lbu a0,0(s0) + 80024374: 4b5010ef jal ra,80026028 <_Z10FixMMC3CHRi> + 80024378: 001a8797 auipc a5,0x1a8 + 8002437c: e897c783 lbu a5,-375(a5) # 801cc201 <_ZL12is_BMCFK23CA> + 80024380: 02078263 beqz a5,800243a4 <_ZL13BMCFK23CWritejh+0xbc> + 80024384: 001a8717 auipc a4,0x1a8 + 80024388: ecc70713 addi a4,a4,-308 # 801cc250 + 8002438c: 00374783 lbu a5,3(a4) + 80024390: 0027f793 andi a5,a5,2 + 80024394: 00078863 beqz a5,800243a4 <_ZL13BMCFK23CWritejh+0xbc> + 80024398: 00074783 lbu a5,0(a4) + 8002439c: ff87f793 andi a5,a5,-8 + 800243a0: 00f70023 sb a5,0(a4) + 800243a4: 00813083 ld ra,8(sp) + 800243a8: 00013403 ld s0,0(sp) + 800243ac: 01010113 addi sp,sp,16 + 800243b0: 00008067 ret + +00000000800243b4 <_ZL15BMCFK23CHiWritejh>: + 800243b4: 001a8617 auipc a2,0x1a8 + 800243b8: e9c60613 addi a2,a2,-356 # 801cc250 + 800243bc: 00064683 lbu a3,0(a2) + 800243c0: 04000813 li a6,64 + 800243c4: 00058713 mv a4,a1 + 800243c8: 0606f893 andi a7,a3,96 + 800243cc: 0b088c63 beq a7,a6,80024484 <_ZL15BMCFK23CHiWritejh+0xd0> + 800243d0: ff010113 addi sp,sp,-16 + 800243d4: 000086b7 lui a3,0x8 + 800243d8: 00113423 sd ra,8(sp) + 800243dc: 00813023 sd s0,0(sp) + 800243e0: 00168813 addi a6,a3,1 # 8001 <_entry_offset+0x8001> + 800243e4: 00050793 mv a5,a0 + 800243e8: 05050a63 beq a0,a6,8002443c <_ZL15BMCFK23CHiWritejh+0x88> + 800243ec: 0000c637 lui a2,0xc + 800243f0: 0ac57463 bgeu a0,a2,80024498 <_ZL15BMCFK23CHiWritejh+0xe4> + 800243f4: 001a7617 auipc a2,0x1a7 + 800243f8: 6ec63603 ld a2,1772(a2) # 801cbae0 + 800243fc: 001a8417 auipc s0,0x1a8 + 80024400: e6040413 addi s0,s0,-416 # 801cc25c + 80024404: 00060c63 beqz a2,8002441c <_ZL15BMCFK23CHiWritejh+0x68> + 80024408: 00d51a63 bne a0,a3,8002441c <_ZL15BMCFK23CHiWritejh+0x68> + 8002440c: 04600693 li a3,70 + 80024410: 0ad58c63 beq a1,a3,800244c8 <_ZL15BMCFK23CHiWritejh+0x114> + 80024414: 04700693 li a3,71 + 80024418: 0ad58463 beq a1,a3,800244c0 <_ZL15BMCFK23CHiWritejh+0x10c> + 8002441c: 00078513 mv a0,a5 + 80024420: 00070593 mv a1,a4 + 80024424: 4a0020ef jal ra,800268c4 <_Z13MMC3_CMDWritejh> + 80024428: 00044503 lbu a0,0(s0) + 8002442c: 00013403 ld s0,0(sp) + 80024430: 00813083 ld ra,8(sp) + 80024434: 01010113 addi sp,sp,16 + 80024438: 2350106f j 80025e6c <_Z10FixMMC3PRGi> + 8002443c: 00364683 lbu a3,3(a2) + 80024440: 001a8417 auipc s0,0x1a8 + 80024444: e1c40413 addi s0,s0,-484 # 801cc25c + 80024448: 0026f693 andi a3,a3,2 + 8002444c: fc0688e3 beqz a3,8002441c <_ZL15BMCFK23CHiWritejh+0x68> + 80024450: 00044503 lbu a0,0(s0) + 80024454: 00857693 andi a3,a0,8 + 80024458: fc0682e3 beqz a3,8002441c <_ZL15BMCFK23CHiWritejh+0x68> + 8002445c: 00357793 andi a5,a0,3 + 80024460: 0047e793 ori a5,a5,4 + 80024464: 00f60633 add a2,a2,a5 + 80024468: 00b60023 sb a1,0(a2) + 8002446c: 201010ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80024470: 00044503 lbu a0,0(s0) + 80024474: 00013403 ld s0,0(sp) + 80024478: 00813083 ld ra,8(sp) + 8002447c: 01010113 addi sp,sp,16 + 80024480: 3a90106f j 80026028 <_Z10FixMMC3CHRi> + 80024484: 0306f693 andi a3,a3,48 + 80024488: 02068063 beqz a3,800244a8 <_ZL15BMCFK23CHiWritejh+0xf4> + 8002448c: 001a8797 auipc a5,0x1a8 + 80024490: d6078b23 sb zero,-650(a5) # 801cc202 <_ZL8unromchr> + 80024494: 00008067 ret + 80024498: 00013403 ld s0,0(sp) + 8002449c: 00813083 ld ra,8(sp) + 800244a0: 01010113 addi sp,sp,16 + 800244a4: 5f00106f j 80025a94 <_Z13MMC3_IRQWritejh> + 800244a8: 0035f593 andi a1,a1,3 + 800244ac: 001a8517 auipc a0,0x1a8 + 800244b0: db054503 lbu a0,-592(a0) # 801cc25c + 800244b4: 001a8797 auipc a5,0x1a8 + 800244b8: d4b78723 sb a1,-690(a5) # 801cc202 <_ZL8unromchr> + 800244bc: 36d0106f j 80026028 <_Z10FixMMC3CHRi> + 800244c0: 04600713 li a4,70 + 800244c4: f59ff06f j 8002441c <_ZL15BMCFK23CHiWritejh+0x68> + 800244c8: 04700713 li a4,71 + 800244cc: f51ff06f j 8002441c <_ZL15BMCFK23CHiWritejh+0x68> + +00000000800244d0 <_ZL10BMCFK23CCWjh>: + 800244d0: fd010113 addi sp,sp,-48 + 800244d4: 02813023 sd s0,32(sp) + 800244d8: 001a8417 auipc s0,0x1a8 + 800244dc: d7840413 addi s0,s0,-648 # 801cc250 + 800244e0: 00044783 lbu a5,0(s0) + 800244e4: 02113423 sd ra,40(sp) + 800244e8: 00913c23 sd s1,24(sp) + 800244ec: 01213823 sd s2,16(sp) + 800244f0: 01313423 sd s3,8(sp) + 800244f4: 01413023 sd s4,0(sp) + 800244f8: 0407f693 andi a3,a5,64 + 800244fc: 0c069e63 bnez a3,800245d8 <_ZL10BMCFK23CCWjh+0x108> + 80024500: 0207f793 andi a5,a5,32 + 80024504: 0a079463 bnez a5,800245ac <_ZL10BMCFK23CCWjh+0xdc> + 80024508: 00244483 lbu s1,2(s0) + 8002450c: 00344783 lbu a5,3(s0) + 80024510: 0034949b slliw s1,s1,0x3 + 80024514: 3f84f493 andi s1,s1,1016 + 80024518: 0027f793 andi a5,a5,2 + 8002451c: 00b4e5b3 or a1,s1,a1 + 80024520: 06078663 beqz a5,8002458c <_ZL10BMCFK23CCWjh+0xbc> + 80024524: 001a8917 auipc s2,0x1a8 + 80024528: d3894903 lbu s2,-712(s2) # 801cc25c + 8002452c: 000017b7 lui a5,0x1 + 80024530: 0059191b slliw s2,s2,0x5 + 80024534: 00f97933 and s2,s2,a5 + 80024538: 001a8a17 auipc s4,0x1a8 + 8002453c: d10a0a13 addi s4,s4,-752 # 801cc248 + 80024540: 965ec0ef jal ra,80010ea4 <_Z7setchr1jj> + 80024544: 000a4583 lbu a1,0(s4) + 80024548: 00090513 mv a0,s2 + 8002454c: 000019b7 lui s3,0x1 + 80024550: 00b4e5b3 or a1,s1,a1 + 80024554: 951ec0ef jal ra,80010ea4 <_Z7setchr1jj> + 80024558: 00644583 lbu a1,6(s0) + 8002455c: 40096513 ori a0,s2,1024 + 80024560: 00b4e5b3 or a1,s1,a1 + 80024564: 941ec0ef jal ra,80010ea4 <_Z7setchr1jj> + 80024568: 001a4583 lbu a1,1(s4) + 8002456c: 80098513 addi a0,s3,-2048 # 800 <_entry_offset+0x800> + 80024570: 00a94533 xor a0,s2,a0 + 80024574: 00b4e5b3 or a1,s1,a1 + 80024578: 92dec0ef jal ra,80010ea4 <_Z7setchr1jj> + 8002457c: 00744583 lbu a1,7(s0) + 80024580: c0098513 addi a0,s3,-1024 + 80024584: 00a94533 xor a0,s2,a0 + 80024588: 00b4e5b3 or a1,s1,a1 + 8002458c: 02013403 ld s0,32(sp) + 80024590: 02813083 ld ra,40(sp) + 80024594: 01813483 ld s1,24(sp) + 80024598: 01013903 ld s2,16(sp) + 8002459c: 00813983 ld s3,8(sp) + 800245a0: 00013a03 ld s4,0(sp) + 800245a4: 03010113 addi sp,sp,48 + 800245a8: 8fdec06f j 80010ea4 <_Z7setchr1jj> + 800245ac: 02013403 ld s0,32(sp) + 800245b0: 02813083 ld ra,40(sp) + 800245b4: 01813483 ld s1,24(sp) + 800245b8: 01013903 ld s2,16(sp) + 800245bc: 00813983 ld s3,8(sp) + 800245c0: 00013a03 ld s4,0(sp) + 800245c4: 00058613 mv a2,a1 + 800245c8: 00050593 mv a1,a0 + 800245cc: 03010113 addi sp,sp,48 + 800245d0: 01000513 li a0,16 + 800245d4: 851ec06f j 80010e24 <_Z8setchr1rijj> + 800245d8: 00244503 lbu a0,2(s0) + 800245dc: 02013403 ld s0,32(sp) + 800245e0: 02813083 ld ra,40(sp) + 800245e4: 01813483 ld s1,24(sp) + 800245e8: 01013903 ld s2,16(sp) + 800245ec: 00813983 ld s3,8(sp) + 800245f0: 00013a03 ld s4,0(sp) + 800245f4: 001a8797 auipc a5,0x1a8 + 800245f8: c0e7c783 lbu a5,-1010(a5) # 801cc202 <_ZL8unromchr> + 800245fc: 00f56533 or a0,a0,a5 + 80024600: 0ff57513 andi a0,a0,255 + 80024604: 03010113 addi sp,sp,48 + 80024608: 8fdec06f j 80010f04 <_Z7setchr8j> + +000000008002460c <_Z13BMCFK23C_InitP8CartInfo>: + 8002460c: ff010113 addi sp,sp,-16 + 80024610: 00000713 li a4,0 + 80024614: 00800693 li a3,8 + 80024618: 10000613 li a2,256 + 8002461c: 20000593 li a1,512 + 80024620: 00113423 sd ra,8(sp) + 80024624: 00813023 sd s0,0(sp) + 80024628: 001a8797 auipc a5,0x1a8 + 8002462c: bc078ca3 sb zero,-1063(a5) # 801cc201 <_ZL12is_BMCFK23CA> + 80024630: 00050413 mv s0,a0 + 80024634: 1e5020ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80024638: 00000797 auipc a5,0x0 + 8002463c: e9878793 addi a5,a5,-360 # 800244d0 <_ZL10BMCFK23CCWjh> + 80024640: 001a8717 auipc a4,0x1a8 + 80024644: c4f73023 sd a5,-960(a4) # 801cc280 + 80024648: 00000797 auipc a5,0x0 + 8002464c: bb078793 addi a5,a5,-1104 # 800241f8 <_ZL10BMCFK23CPWjh> + 80024650: 001a8717 auipc a4,0x1a8 + 80024654: c4f73423 sd a5,-952(a4) # 801cc298 + 80024658: 00000797 auipc a5,0x0 + 8002465c: b0878793 addi a5,a5,-1272 # 80024160 <_ZL13BMCFK23CPowerv> + 80024660: 00f43023 sd a5,0(s0) + 80024664: 00000797 auipc a5,0x0 + 80024668: a7878793 addi a5,a5,-1416 # 800240dc <_ZL13BMCFK23CResetv> + 8002466c: 00f43423 sd a5,8(s0) + 80024670: 00021697 auipc a3,0x21 + 80024674: e8068693 addi a3,a3,-384 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 80024678: 00000613 li a2,0 + 8002467c: 00800593 li a1,8 + 80024680: 001a8517 auipc a0,0x1a8 + 80024684: bd050513 addi a0,a0,-1072 # 801cc250 + 80024688: 989db0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002468c: 00021697 auipc a3,0x21 + 80024690: 1d468693 addi a3,a3,468 # 80045860 <_ZL6bs_tbl+0xf0> + 80024694: 00000613 li a2,0 + 80024698: 00100593 li a1,1 + 8002469c: 001a8517 auipc a0,0x1a8 + 800246a0: b6650513 addi a0,a0,-1178 # 801cc202 <_ZL8unromchr> + 800246a4: 96ddb0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800246a8: 00021697 auipc a3,0x21 + 800246ac: 1c068693 addi a3,a3,448 # 80045868 <_ZL6bs_tbl+0xf8> + 800246b0: 00000613 li a2,0 + 800246b4: 00100593 li a1,1 + 800246b8: 001a8517 auipc a0,0x1a8 + 800246bc: b4c50513 addi a0,a0,-1204 # 801cc204 <_ZL9dipswitch> + 800246c0: 951db0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800246c4: 0ff00613 li a2,255 + 800246c8: 00021597 auipc a1,0x21 + 800246cc: 5b058593 addi a1,a1,1456 # 80045c78 <_ZL7regperm+0x60> + 800246d0: 00018517 auipc a0,0x18 + 800246d4: 64050513 addi a0,a0,1600 # 8003cd10 <_etext+0x2c> + 800246d8: 671160ef jal ra,8003b548 + 800246dc: 00100513 li a0,1 + 800246e0: 694150ef jal ra,80039d74 + +00000000800246e4 <_ZL4Syncv>: + 800246e4: fe010113 addi sp,sp,-32 + 800246e8: 001a8517 auipc a0,0x1a8 + 800246ec: b2254503 lbu a0,-1246(a0) # 801cc20a <_ZL4mirr> + 800246f0: 00113c23 sd ra,24(sp) + 800246f4: 00813823 sd s0,16(sp) + 800246f8: 00913423 sd s1,8(sp) + 800246fc: 001a8417 auipc s0,0x1a8 + 80024700: b1440413 addi s0,s0,-1260 # 801cc210 <_ZL4regs> + 80024704: 01213023 sd s2,0(sp) + 80024708: 941ec0ef jal ra,80011048 <_Z9setmirrori> + 8002470c: 00044583 lbu a1,0(s0) + 80024710: 00008537 lui a0,0x8 + 80024714: 00001937 lui s2,0x1 + 80024718: b84ec0ef jal ra,80010a9c <_Z7setprg8jj> + 8002471c: 00144583 lbu a1,1(s0) + 80024720: 0000a537 lui a0,0xa + 80024724: 000024b7 lui s1,0x2 + 80024728: b74ec0ef jal ra,80010a9c <_Z7setprg8jj> + 8002472c: ffe00593 li a1,-2 + 80024730: 0000c537 lui a0,0xc + 80024734: b68ec0ef jal ra,80010a9c <_Z7setprg8jj> + 80024738: fff00593 li a1,-1 + 8002473c: 0000e537 lui a0,0xe + 80024740: b5cec0ef jal ra,80010a9c <_Z7setprg8jj> + 80024744: 00244583 lbu a1,2(s0) + 80024748: 00000513 li a0,0 + 8002474c: f78ec0ef jal ra,80010ec4 <_Z7setchr2jj> + 80024750: 00344583 lbu a1,3(s0) + 80024754: 80090513 addi a0,s2,-2048 # 800 <_entry_offset+0x800> + 80024758: f6cec0ef jal ra,80010ec4 <_Z7setchr2jj> + 8002475c: 00444583 lbu a1,4(s0) + 80024760: 00001537 lui a0,0x1 + 80024764: f40ec0ef jal ra,80010ea4 <_Z7setchr1jj> + 80024768: 00544583 lbu a1,5(s0) + 8002476c: 40090513 addi a0,s2,1024 + 80024770: f34ec0ef jal ra,80010ea4 <_Z7setchr1jj> + 80024774: 00644583 lbu a1,6(s0) + 80024778: 80048513 addi a0,s1,-2048 # 1800 <_entry_offset+0x1800> + 8002477c: f28ec0ef jal ra,80010ea4 <_Z7setchr1jj> + 80024780: 00744583 lbu a1,7(s0) + 80024784: 01013403 ld s0,16(sp) + 80024788: 01813083 ld ra,24(sp) + 8002478c: 00013903 ld s2,0(sp) + 80024790: c0048513 addi a0,s1,-1024 + 80024794: 00813483 ld s1,8(sp) + 80024798: 02010113 addi sp,sp,32 + 8002479c: f08ec06f j 80010ea4 <_Z7setchr1jj> + +00000000800247a0 <_ZL12StateRestorei>: + 800247a0: f45ff06f j 800246e4 <_ZL4Syncv> + +00000000800247a4 <_ZL8M33Powerv>: + 800247a4: ff010113 addi sp,sp,-16 + 800247a8: 00113423 sd ra,8(sp) + 800247ac: 00813023 sd s0,0(sp) + 800247b0: f35ff0ef jal ra,800246e4 <_ZL4Syncv> + 800247b4: 00010437 lui s0,0x10 + 800247b8: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 800247bc: fffec617 auipc a2,0xfffec + 800247c0: ea460613 addi a2,a2,-348 # 80010660 <_Z6CartBRj> + 800247c4: 00008537 lui a0,0x8 + 800247c8: 2540f0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800247cc: fff40593 addi a1,s0,-1 + 800247d0: 00013403 ld s0,0(sp) + 800247d4: 00813083 ld ra,8(sp) + 800247d8: 00000617 auipc a2,0x0 + 800247dc: 07460613 addi a2,a2,116 # 8002484c <_ZL8M33Writejh> + 800247e0: 00008537 lui a0,0x8 + 800247e4: 01010113 addi sp,sp,16 + 800247e8: 3400f06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +00000000800247ec <_ZL8M48Powerv>: + 800247ec: ff010113 addi sp,sp,-16 + 800247f0: 00113423 sd ra,8(sp) + 800247f4: 00813023 sd s0,0(sp) + 800247f8: eedff0ef jal ra,800246e4 <_ZL4Syncv> + 800247fc: 00010437 lui s0,0x10 + 80024800: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80024804: fffec617 auipc a2,0xfffec + 80024808: e5c60613 addi a2,a2,-420 # 80010660 <_Z6CartBRj> + 8002480c: 00008537 lui a0,0x8 + 80024810: 20c0f0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80024814: 0000c5b7 lui a1,0xc + 80024818: 00000617 auipc a2,0x0 + 8002481c: 03460613 addi a2,a2,52 # 8002484c <_ZL8M33Writejh> + 80024820: fff58593 addi a1,a1,-1 # bfff <_entry_offset+0xbfff> + 80024824: 00008537 lui a0,0x8 + 80024828: 3000f0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002482c: fff40593 addi a1,s0,-1 + 80024830: 00013403 ld s0,0(sp) + 80024834: 00813083 ld ra,8(sp) + 80024838: 00000617 auipc a2,0x0 + 8002483c: 15460613 addi a2,a2,340 # 8002498c <_ZL8M48Writejh> + 80024840: 0000c537 lui a0,0xc + 80024844: 01010113 addi sp,sp,16 + 80024848: 2e00f06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002484c <_ZL8M33Writejh>: + 8002484c: 0000f7b7 lui a5,0xf + 80024850: 00378793 addi a5,a5,3 # f003 <_entry_offset+0xf003> + 80024854: 00f57533 and a0,a0,a5 + 80024858: 0000a7b7 lui a5,0xa + 8002485c: 0af50c63 beq a0,a5,80024914 <_ZL8M33Writejh+0xc8> + 80024860: 02a7e463 bltu a5,a0,80024888 <_ZL8M33Writejh+0x3c> + 80024864: 000087b7 lui a5,0x8 + 80024868: 00278713 addi a4,a5,2 # 8002 <_entry_offset+0x8002> + 8002486c: 0ae50a63 beq a0,a4,80024920 <_ZL8M33Writejh+0xd4> + 80024870: 02a77a63 bgeu a4,a0,800248a4 <_ZL8M33Writejh+0x58> + 80024874: 00378793 addi a5,a5,3 + 80024878: 04f51e63 bne a0,a5,800248d4 <_ZL8M33Writejh+0x88> + 8002487c: 001a8797 auipc a5,0x1a8 + 80024880: 98b78ba3 sb a1,-1641(a5) # 801cc213 <_ZL4regs+0x3> + 80024884: e61ff06f j 800246e4 <_ZL4Syncv> + 80024888: 00278713 addi a4,a5,2 + 8002488c: 04e50663 beq a0,a4,800248d8 <_ZL8M33Writejh+0x8c> + 80024890: 00378713 addi a4,a5,3 + 80024894: 02e51663 bne a0,a4,800248c0 <_ZL8M33Writejh+0x74> + 80024898: 001a8797 auipc a5,0x1a8 + 8002489c: 96b78fa3 sb a1,-1665(a5) # 801cc217 <_ZL4regs+0x7> + 800248a0: e45ff06f j 800246e4 <_ZL4Syncv> + 800248a4: 04f50063 beq a0,a5,800248e4 <_ZL8M33Writejh+0x98> + 800248a8: 00178793 addi a5,a5,1 + 800248ac: 08f51063 bne a0,a5,8002492c <_ZL8M33Writejh+0xe0> + 800248b0: 03f5f593 andi a1,a1,63 + 800248b4: 001a8797 auipc a5,0x1a8 + 800248b8: 94b78ea3 sb a1,-1699(a5) # 801cc211 <_ZL4regs+0x1> + 800248bc: e29ff06f j 800246e4 <_ZL4Syncv> + 800248c0: 00178793 addi a5,a5,1 + 800248c4: 06f51663 bne a0,a5,80024930 <_ZL8M33Writejh+0xe4> + 800248c8: 001a8797 auipc a5,0x1a8 + 800248cc: 94b786a3 sb a1,-1715(a5) # 801cc215 <_ZL4regs+0x5> + 800248d0: e15ff06f j 800246e4 <_ZL4Syncv> + 800248d4: 00008067 ret + 800248d8: 001a8797 auipc a5,0x1a8 + 800248dc: 92b78f23 sb a1,-1730(a5) # 801cc216 <_ZL4regs+0x6> + 800248e0: e05ff06f j 800246e4 <_ZL4Syncv> + 800248e4: 03f5f793 andi a5,a1,63 + 800248e8: 001a8717 auipc a4,0x1a8 + 800248ec: 92f70423 sb a5,-1752(a4) # 801cc210 <_ZL4regs> + 800248f0: 001a8797 auipc a5,0x1a8 + 800248f4: 9197c783 lbu a5,-1767(a5) # 801cc209 <_ZL4is48> + 800248f8: fa0794e3 bnez a5,800248a0 <_ZL8M33Writejh+0x54> + 800248fc: 0065d59b srliw a1,a1,0x6 + 80024900: 0015c793 xori a5,a1,1 + 80024904: 0017f793 andi a5,a5,1 + 80024908: 001a8717 auipc a4,0x1a8 + 8002490c: 90f70123 sb a5,-1790(a4) # 801cc20a <_ZL4mirr> + 80024910: f91ff06f j 800248a0 <_ZL8M33Writejh+0x54> + 80024914: 001a8797 auipc a5,0x1a8 + 80024918: 90b78023 sb a1,-1792(a5) # 801cc214 <_ZL4regs+0x4> + 8002491c: dc9ff06f j 800246e4 <_ZL4Syncv> + 80024920: 001a8797 auipc a5,0x1a8 + 80024924: 8eb78923 sb a1,-1806(a5) # 801cc212 <_ZL4regs+0x2> + 80024928: dbdff06f j 800246e4 <_ZL4Syncv> + 8002492c: 00008067 ret + 80024930: 00008067 ret + +0000000080024934 <_ZL6M48IRQv>: + 80024934: 001a8797 auipc a5,0x1a8 + 80024938: 8d47c783 lbu a5,-1836(a5) # 801cc208 <_ZL4IRQa> + 8002493c: 02078463 beqz a5,80024964 <_ZL6M48IRQv+0x30> + 80024940: 001a8717 auipc a4,0x1a8 + 80024944: 8d870713 addi a4,a4,-1832 # 801cc218 <_ZL8IRQCount> + 80024948: 00075783 lhu a5,0(a4) + 8002494c: 10000693 li a3,256 + 80024950: 0017879b addiw a5,a5,1 + 80024954: 0107979b slliw a5,a5,0x10 + 80024958: 4107d79b sraiw a5,a5,0x10 + 8002495c: 00f71023 sh a5,0(a4) + 80024960: 00d78463 beq a5,a3,80024968 <_ZL6M48IRQv+0x34> + 80024964: 00008067 ret + 80024968: ff010113 addi sp,sp,-16 + 8002496c: 00100513 li a0,1 + 80024970: 00113423 sd ra,8(sp) + 80024974: bc4dc0ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 80024978: 00813083 ld ra,8(sp) + 8002497c: 001a8797 auipc a5,0x1a8 + 80024980: 88078623 sb zero,-1908(a5) # 801cc208 <_ZL4IRQa> + 80024984: 01010113 addi sp,sp,16 + 80024988: 00008067 ret + +000000008002498c <_ZL8M48Writejh>: + 8002498c: 0000f737 lui a4,0xf + 80024990: 00370713 addi a4,a4,3 # f003 <_entry_offset+0xf003> + 80024994: 0000c7b7 lui a5,0xc + 80024998: 00e57533 and a0,a0,a4 + 8002499c: 00278713 addi a4,a5,2 # c002 <_entry_offset+0xc002> + 800249a0: 04e50863 beq a0,a4,800249f0 <_ZL8M48Writejh+0x64> + 800249a4: 02a77663 bgeu a4,a0,800249d0 <_ZL8M48Writejh+0x44> + 800249a8: 00378793 addi a5,a5,3 + 800249ac: 04f50a63 beq a0,a5,80024a00 <_ZL8M48Writejh+0x74> + 800249b0: 0000e7b7 lui a5,0xe + 800249b4: 06f51463 bne a0,a5,80024a1c <_ZL8M48Writejh+0x90> + 800249b8: 0065d59b srliw a1,a1,0x6 + 800249bc: 0015c593 xori a1,a1,1 + 800249c0: 0015f593 andi a1,a1,1 + 800249c4: 001a8797 auipc a5,0x1a8 + 800249c8: 84b78323 sb a1,-1978(a5) # 801cc20a <_ZL4mirr> + 800249cc: d19ff06f j 800246e4 <_ZL4Syncv> + 800249d0: 04f50063 beq a0,a5,80024a10 <_ZL8M48Writejh+0x84> + 800249d4: 00178793 addi a5,a5,1 + 800249d8: 04f51463 bne a0,a5,80024a20 <_ZL8M48Writejh+0x94> + 800249dc: 001a8797 auipc a5,0x1a8 + 800249e0: 83e7d783 lhu a5,-1986(a5) # 801cc21a <_ZL8IRQLatch> + 800249e4: 001a8717 auipc a4,0x1a8 + 800249e8: 82f71a23 sh a5,-1996(a4) # 801cc218 <_ZL8IRQCount> + 800249ec: 00008067 ret + 800249f0: 00100793 li a5,1 + 800249f4: 001a8717 auipc a4,0x1a8 + 800249f8: 80f70a23 sb a5,-2028(a4) # 801cc208 <_ZL4IRQa> + 800249fc: 00008067 ret + 80024a00: 00100513 li a0,1 + 80024a04: 001a8797 auipc a5,0x1a8 + 80024a08: 80078223 sb zero,-2044(a5) # 801cc208 <_ZL4IRQa> + 80024a0c: b44dc06f j 80000d50 <_Z12X6502_IRQEndi> + 80024a10: 001a8797 auipc a5,0x1a8 + 80024a14: 80b79523 sh a1,-2038(a5) # 801cc21a <_ZL8IRQLatch> + 80024a18: 00008067 ret + 80024a1c: 00008067 ret + 80024a20: 00008067 ret + +0000000080024a24 <_Z13Mapper33_InitP8CartInfo>: + 80024a24: 00000797 auipc a5,0x0 + 80024a28: d8078793 addi a5,a5,-640 # 800247a4 <_ZL8M33Powerv> + 80024a2c: 00f53023 sd a5,0(a0) # c000 <_entry_offset+0xc000> + 80024a30: 001a7797 auipc a5,0x1a7 + 80024a34: 7c078ca3 sb zero,2009(a5) # 801cc209 <_ZL4is48> + 80024a38: 00000797 auipc a5,0x0 + 80024a3c: d6878793 addi a5,a5,-664 # 800247a0 <_ZL12StateRestorei> + 80024a40: 00000693 li a3,0 + 80024a44: 00000613 li a2,0 + 80024a48: fff00593 li a1,-1 + 80024a4c: 00027517 auipc a0,0x27 + 80024a50: c4c50513 addi a0,a0,-948 # 8004b698 <_ZL9StateRegs> + 80024a54: 001a8717 auipc a4,0x1a8 + 80024a58: c0f73223 sd a5,-1020(a4) # 801cc658 + 80024a5c: db4db06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080024a60 <_Z13Mapper48_InitP8CartInfo>: + 80024a60: 00000797 auipc a5,0x0 + 80024a64: d8c78793 addi a5,a5,-628 # 800247ec <_ZL8M48Powerv> + 80024a68: 00f53023 sd a5,0(a0) + 80024a6c: 00100793 li a5,1 + 80024a70: 001a7717 auipc a4,0x1a7 + 80024a74: 78f70ca3 sb a5,1945(a4) # 801cc209 <_ZL4is48> + 80024a78: 00000797 auipc a5,0x0 + 80024a7c: ebc78793 addi a5,a5,-324 # 80024934 <_ZL6M48IRQv> + 80024a80: 001a8717 auipc a4,0x1a8 + 80024a84: c4f73023 sd a5,-960(a4) # 801cc6c0 + 80024a88: 00000797 auipc a5,0x0 + 80024a8c: d1878793 addi a5,a5,-744 # 800247a0 <_ZL12StateRestorei> + 80024a90: 00000693 li a3,0 + 80024a94: 00000613 li a2,0 + 80024a98: fff00593 li a1,-1 + 80024a9c: 00027517 auipc a0,0x27 + 80024aa0: bfc50513 addi a0,a0,-1028 # 8004b698 <_ZL9StateRegs> + 80024aa4: 001a8717 auipc a4,0x1a8 + 80024aa8: baf73a23 sd a5,-1100(a4) # 801cc658 + 80024aac: d64db06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080024ab0 <_ZL4Syncv>: + 80024ab0: fe010113 addi sp,sp,-32 + 80024ab4: 00813823 sd s0,16(sp) + 80024ab8: 00113c23 sd ra,24(sp) + 80024abc: 001a7417 auipc s0,0x1a7 + 80024ac0: 76140413 addi s0,s0,1889 # 801cc21d <_ZL6latche> + 80024ac4: 00913423 sd s1,8(sp) + 80024ac8: 001a7797 auipc a5,0x1a7 + 80024acc: 7547c783 lbu a5,1876(a5) # 801cc21c <_ZL5reset> + 80024ad0: 00044583 lbu a1,0(s0) + 80024ad4: 06079263 bnez a5,80024b38 <_ZL4Syncv+0x88> + 80024ad8: 01f5f713 andi a4,a1,31 + 80024adc: 0205f793 andi a5,a1,32 + 80024ae0: 0087049b addiw s1,a4,8 + 80024ae4: 02079c63 bnez a5,80024b1c <_ZL4Syncv+0x6c> + 80024ae8: 0014d59b srliw a1,s1,0x1 + 80024aec: 00008537 lui a0,0x8 + 80024af0: b24ec0ef jal ra,80010e14 <_Z8setprg32jj> + 80024af4: 00044503 lbu a0,0(s0) + 80024af8: 4065551b sraiw a0,a0,0x6 + 80024afc: 00157513 andi a0,a0,1 + 80024b00: d48ec0ef jal ra,80011048 <_Z9setmirrori> + 80024b04: 01013403 ld s0,16(sp) + 80024b08: 01813083 ld ra,24(sp) + 80024b0c: 00813483 ld s1,8(sp) + 80024b10: 00000513 li a0,0 + 80024b14: 02010113 addi sp,sp,32 + 80024b18: becec06f j 80010f04 <_Z7setchr8j> + 80024b1c: 00048593 mv a1,s1 + 80024b20: 00008537 lui a0,0x8 + 80024b24: 934ec0ef jal ra,80010c58 <_Z8setprg16jj> + 80024b28: 00048593 mv a1,s1 + 80024b2c: 0000c537 lui a0,0xc + 80024b30: 928ec0ef jal ra,80010c58 <_Z8setprg16jj> + 80024b34: fc1ff06f j 80024af4 <_ZL4Syncv+0x44> + 80024b38: 0075f593 andi a1,a1,7 + 80024b3c: 00008537 lui a0,0x8 + 80024b40: 918ec0ef jal ra,80010c58 <_Z8setprg16jj> + 80024b44: 00700593 li a1,7 + 80024b48: 0000c537 lui a0,0xc + 80024b4c: 90cec0ef jal ra,80010c58 <_Z8setprg16jj> + 80024b50: 00100513 li a0,1 + 80024b54: cf4ec0ef jal ra,80011048 <_Z9setmirrori> + 80024b58: 01013403 ld s0,16(sp) + 80024b5c: 01813083 ld ra,24(sp) + 80024b60: 00813483 ld s1,8(sp) + 80024b64: 00000513 li a0,0 + 80024b68: 02010113 addi sp,sp,32 + 80024b6c: b98ec06f j 80010f04 <_Z7setchr8j> + +0000000080024b70 <_ZL12StateRestorei>: + 80024b70: f41ff06f j 80024ab0 <_ZL4Syncv> + +0000000080024b74 <_ZL9M230Resetv>: + 80024b74: 001a7717 auipc a4,0x1a7 + 80024b78: 6a870713 addi a4,a4,1704 # 801cc21c <_ZL5reset> + 80024b7c: 00074783 lbu a5,0(a4) + 80024b80: 0017c793 xori a5,a5,1 + 80024b84: 00f70023 sb a5,0(a4) + 80024b88: f29ff06f j 80024ab0 <_ZL4Syncv> + +0000000080024b8c <_ZL9M230Writejh>: + 80024b8c: 001a7797 auipc a5,0x1a7 + 80024b90: 68b788a3 sb a1,1681(a5) # 801cc21d <_ZL6latche> + 80024b94: f1dff06f j 80024ab0 <_ZL4Syncv> + +0000000080024b98 <_ZL9M230Powerv>: + 80024b98: ff010113 addi sp,sp,-16 + 80024b9c: 00113423 sd ra,8(sp) + 80024ba0: 00813023 sd s0,0(sp) + 80024ba4: 001a7797 auipc a5,0x1a7 + 80024ba8: 66078c23 sb zero,1656(a5) # 801cc21c <_ZL5reset> + 80024bac: 00010437 lui s0,0x10 + 80024bb0: 001a7797 auipc a5,0x1a7 + 80024bb4: 660786a3 sb zero,1645(a5) # 801cc21d <_ZL6latche> + 80024bb8: ef9ff0ef jal ra,80024ab0 <_ZL4Syncv> + 80024bbc: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80024bc0: 00000617 auipc a2,0x0 + 80024bc4: fcc60613 addi a2,a2,-52 # 80024b8c <_ZL9M230Writejh> + 80024bc8: 00008537 lui a0,0x8 + 80024bcc: 75d0e0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80024bd0: fff40593 addi a1,s0,-1 + 80024bd4: 00013403 ld s0,0(sp) + 80024bd8: 00813083 ld ra,8(sp) + 80024bdc: fffec617 auipc a2,0xfffec + 80024be0: a8460613 addi a2,a2,-1404 # 80010660 <_Z6CartBRj> + 80024be4: 00008537 lui a0,0x8 + 80024be8: 01010113 addi sp,sp,16 + 80024bec: 6310e06f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080024bf0 <_Z14Mapper230_InitP8CartInfo>: + 80024bf0: ff010113 addi sp,sp,-16 + 80024bf4: 00113423 sd ra,8(sp) + 80024bf8: 00000797 auipc a5,0x0 + 80024bfc: fa078793 addi a5,a5,-96 # 80024b98 <_ZL9M230Powerv> + 80024c00: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 80024c04: 00000797 auipc a5,0x0 + 80024c08: f7078793 addi a5,a5,-144 # 80024b74 <_ZL9M230Resetv> + 80024c0c: 00f53423 sd a5,8(a0) + 80024c10: 00000693 li a3,0 + 80024c14: 00000613 li a2,0 + 80024c18: fff00593 li a1,-1 + 80024c1c: 00027517 auipc a0,0x27 + 80024c20: b0c50513 addi a0,a0,-1268 # 8004b728 <_ZL9StateRegs> + 80024c24: becdb0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80024c28: 00813083 ld ra,8(sp) + 80024c2c: 00000797 auipc a5,0x0 + 80024c30: f4478793 addi a5,a5,-188 # 80024b70 <_ZL12StateRestorei> + 80024c34: 001a8717 auipc a4,0x1a8 + 80024c38: a2f73223 sd a5,-1500(a4) # 801cc658 + 80024c3c: 01010113 addi sp,sp,16 + 80024c40: 00008067 ret + +0000000080024c44 <_ZL11UNLSL1632CWjh>: + 80024c44: fc010113 addi sp,sp,-64 + 80024c48: 01313c23 sd s3,24(sp) + 80024c4c: 001a7997 auipc s3,0x1a7 + 80024c50: 5fc98993 addi s3,s3,1532 # 801cc248 + 80024c54: 0009c583 lbu a1,0(s3) + 80024c58: 02813823 sd s0,48(sp) + 80024c5c: 001a7797 auipc a5,0x1a7 + 80024c60: 5c27c783 lbu a5,1474(a5) # 801cc21e <_ZL4bbrk> + 80024c64: 001a7417 auipc s0,0x1a7 + 80024c68: 5f844403 lbu s0,1528(s0) # 801cc25c + 80024c6c: 02913423 sd s1,40(sp) + 80024c70: 01613023 sd s6,0(sp) + 80024c74: 0057949b slliw s1,a5,0x5 + 80024c78: 00001b37 lui s6,0x1 + 80024c7c: 0054141b slliw s0,s0,0x5 + 80024c80: 01647433 and s0,s0,s6 + 80024c84: 1004f493 andi s1,s1,256 + 80024c88: 0fe5f593 andi a1,a1,254 + 80024c8c: 0095e5b3 or a1,a1,s1 + 80024c90: 0004051b sext.w a0,s0 + 80024c94: 02113c23 sd ra,56(sp) + 80024c98: 03213023 sd s2,32(sp) + 80024c9c: 01413823 sd s4,16(sp) + 80024ca0: 01513423 sd s5,8(sp) + 80024ca4: 00050413 mv s0,a0 + 80024ca8: 00379a1b slliw s4,a5,0x3 + 80024cac: 0017991b slliw s2,a5,0x1 + 80024cb0: 9f4ec0ef jal ra,80010ea4 <_Z7setchr1jj> + 80024cb4: 0009c583 lbu a1,0(s3) + 80024cb8: 0004849b sext.w s1,s1 + 80024cbc: 40046513 ori a0,s0,1024 + 80024cc0: 00b4e5b3 or a1,s1,a1 + 80024cc4: 0015e593 ori a1,a1,1 + 80024cc8: 0005859b sext.w a1,a1 + 80024ccc: 9d8ec0ef jal ra,80010ea4 <_Z7setchr1jj> + 80024cd0: 0019c583 lbu a1,1(s3) + 80024cd4: 00001ab7 lui s5,0x1 + 80024cd8: 800a8513 addi a0,s5,-2048 # 800 <_entry_offset+0x800> + 80024cdc: ffe5f593 andi a1,a1,-2 + 80024ce0: 00b4e5b3 or a1,s1,a1 + 80024ce4: 00a44533 xor a0,s0,a0 + 80024ce8: 0005859b sext.w a1,a1 + 80024cec: 9b8ec0ef jal ra,80010ea4 <_Z7setchr1jj> + 80024cf0: 0019c583 lbu a1,1(s3) + 80024cf4: c00a8513 addi a0,s5,-1024 + 80024cf8: 00a44533 xor a0,s0,a0 + 80024cfc: 00b4e5b3 or a1,s1,a1 + 80024d00: 0015e593 ori a1,a1,1 + 80024d04: 0005859b sext.w a1,a1 + 80024d08: 99cec0ef jal ra,80010ea4 <_Z7setchr1jj> + 80024d0c: 0029c583 lbu a1,2(s3) + 80024d10: 100a7a13 andi s4,s4,256 + 80024d14: 000a0a1b sext.w s4,s4 + 80024d18: 01644533 xor a0,s0,s6 + 80024d1c: 00ba65b3 or a1,s4,a1 + 80024d20: 0005051b sext.w a0,a0 + 80024d24: 980ec0ef jal ra,80010ea4 <_Z7setchr1jj> + 80024d28: 0039c583 lbu a1,3(s3) + 80024d2c: 400a8513 addi a0,s5,1024 + 80024d30: 00a44533 xor a0,s0,a0 + 80024d34: 00ba65b3 or a1,s4,a1 + 80024d38: 96cec0ef jal ra,80010ea4 <_Z7setchr1jj> + 80024d3c: 0049c583 lbu a1,4(s3) + 80024d40: 000024b7 lui s1,0x2 + 80024d44: 10097913 andi s2,s2,256 + 80024d48: 0009091b sext.w s2,s2 + 80024d4c: 80048513 addi a0,s1,-2048 # 1800 <_entry_offset+0x1800> + 80024d50: 00b965b3 or a1,s2,a1 + 80024d54: 00a44533 xor a0,s0,a0 + 80024d58: 94cec0ef jal ra,80010ea4 <_Z7setchr1jj> + 80024d5c: 0059c583 lbu a1,5(s3) + 80024d60: c0048513 addi a0,s1,-1024 + 80024d64: 00a44533 xor a0,s0,a0 + 80024d68: 03013403 ld s0,48(sp) + 80024d6c: 03813083 ld ra,56(sp) + 80024d70: 02813483 ld s1,40(sp) + 80024d74: 01813983 ld s3,24(sp) + 80024d78: 01013a03 ld s4,16(sp) + 80024d7c: 00813a83 ld s5,8(sp) + 80024d80: 00013b03 ld s6,0(sp) + 80024d84: 00b965b3 or a1,s2,a1 + 80024d88: 02013903 ld s2,32(sp) + 80024d8c: 04010113 addi sp,sp,64 + 80024d90: 914ec06f j 80010ea4 <_Z7setchr1jj> + +0000000080024d94 <_ZL4Syncv>: + 80024d94: fe010113 addi sp,sp,-32 + 80024d98: 001a7597 auipc a1,0x1a7 + 80024d9c: 4885c583 lbu a1,1160(a1) # 801cc220 <_ZL4prg0> + 80024da0: 00008537 lui a0,0x8 + 80024da4: 00113c23 sd ra,24(sp) + 80024da8: 00813823 sd s0,16(sp) + 80024dac: 00913423 sd s1,8(sp) + 80024db0: 01213023 sd s2,0(sp) + 80024db4: ce9eb0ef jal ra,80010a9c <_Z7setprg8jj> + 80024db8: 001a7597 auipc a1,0x1a7 + 80024dbc: 4695c583 lbu a1,1129(a1) # 801cc221 <_ZL4prg1> + 80024dc0: 0000a537 lui a0,0xa + 80024dc4: cd9eb0ef jal ra,80010a9c <_Z7setprg8jj> + 80024dc8: ffe00593 li a1,-2 + 80024dcc: 0000c537 lui a0,0xc + 80024dd0: ccdeb0ef jal ra,80010a9c <_Z7setprg8jj> + 80024dd4: fff00593 li a1,-1 + 80024dd8: 0000e537 lui a0,0xe + 80024ddc: cc1eb0ef jal ra,80010a9c <_Z7setprg8jj> + 80024de0: 001a7497 auipc s1,0x1a7 + 80024de4: 44848493 addi s1,s1,1096 # 801cc228 <_ZL6chrcmd> + 80024de8: 00000413 li s0,0 + 80024dec: 00002937 lui s2,0x2 + 80024df0: 0004c583 lbu a1,0(s1) + 80024df4: 00040513 mv a0,s0 + 80024df8: 4004041b addiw s0,s0,1024 + 80024dfc: 8a8ec0ef jal ra,80010ea4 <_Z7setchr1jj> + 80024e00: 00148493 addi s1,s1,1 + 80024e04: ff2416e3 bne s0,s2,80024df0 <_ZL4Syncv+0x5c> + 80024e08: 01013403 ld s0,16(sp) + 80024e0c: 01813083 ld ra,24(sp) + 80024e10: 00813483 ld s1,8(sp) + 80024e14: 00013903 ld s2,0(sp) + 80024e18: 001a7517 auipc a0,0x1a7 + 80024e1c: 40754503 lbu a0,1031(a0) # 801cc21f <_ZL4mirr> + 80024e20: 00154513 xori a0,a0,1 + 80024e24: 02010113 addi sp,sp,32 + 80024e28: a20ec06f j 80011048 <_Z9setmirrori> + +0000000080024e2c <_ZL14UNLSL1632Powerv>: + 80024e2c: ff010113 addi sp,sp,-16 + 80024e30: 00113423 sd ra,8(sp) + 80024e34: 38c010ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 80024e38: 00813083 ld ra,8(sp) + 80024e3c: 000105b7 lui a1,0x10 + 80024e40: 00004537 lui a0,0x4 + 80024e44: 00000617 auipc a2,0x0 + 80024e48: 05c60613 addi a2,a2,92 # 80024ea0 <_ZL17UNLSL1632CMDWritejh> + 80024e4c: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80024e50: 10050513 addi a0,a0,256 # 4100 <_entry_offset+0x4100> + 80024e54: 01010113 addi sp,sp,16 + 80024e58: 4d10e06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080024e5c <_ZL12StateRestorei>: + 80024e5c: 001a7797 auipc a5,0x1a7 + 80024e60: 3c27c783 lbu a5,962(a5) # 801cc21e <_ZL4bbrk> + 80024e64: 0027f793 andi a5,a5,2 + 80024e68: 02078a63 beqz a5,80024e9c <_ZL12StateRestorei+0x40> + 80024e6c: ff010113 addi sp,sp,-16 + 80024e70: 00813023 sd s0,0(sp) + 80024e74: 001a7417 auipc s0,0x1a7 + 80024e78: 3e840413 addi s0,s0,1000 # 801cc25c + 80024e7c: 00044503 lbu a0,0(s0) + 80024e80: 00113423 sd ra,8(sp) + 80024e84: 7e9000ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80024e88: 00044503 lbu a0,0(s0) + 80024e8c: 00013403 ld s0,0(sp) + 80024e90: 00813083 ld ra,8(sp) + 80024e94: 01010113 addi sp,sp,16 + 80024e98: 1900106f j 80026028 <_Z10FixMMC3CHRi> + 80024e9c: ef9ff06f j 80024d94 <_ZL4Syncv> + +0000000080024ea0 <_ZL17UNLSL1632CMDWritejh>: + 80024ea0: fd010113 addi sp,sp,-48 + 80024ea4: 0000a7b7 lui a5,0xa + 80024ea8: 02813023 sd s0,32(sp) + 80024eac: 02113423 sd ra,40(sp) + 80024eb0: 00913c23 sd s1,24(sp) + 80024eb4: 13178793 addi a5,a5,305 # a131 <_entry_offset+0xa131> + 80024eb8: 00050413 mv s0,a0 + 80024ebc: 0cf50463 beq a0,a5,80024f84 <_ZL17UNLSL1632CMDWritejh+0xe4> + 80024ec0: 001a7797 auipc a5,0x1a7 + 80024ec4: 35e7c783 lbu a5,862(a5) # 801cc21e <_ZL4bbrk> + 80024ec8: 0027f793 andi a5,a5,2 + 80024ecc: 06079c63 bnez a5,80024f44 <_ZL17UNLSL1632CMDWritejh+0xa4> + 80024ed0: ffff56b7 lui a3,0xffff5 + 80024ed4: 000037b7 lui a5,0x3 + 80024ed8: 00a686bb addw a3,a3,a0 + 80024edc: 00378793 addi a5,a5,3 # 3003 <_entry_offset+0x3003> + 80024ee0: 0ad7ea63 bltu a5,a3,80024f94 <_ZL17UNLSL1632CMDWritejh+0xf4> + 80024ee4: 00a5571b srliw a4,a0,0xa + 80024ee8: 00257793 andi a5,a0,2 + 80024eec: 00e7e7b3 or a5,a5,a4 + 80024ef0: 0017d79b srliw a5,a5,0x1 + 80024ef4: 0027879b addiw a5,a5,2 + 80024ef8: 001a7697 auipc a3,0x1a7 + 80024efc: 33068693 addi a3,a3,816 # 801cc228 <_ZL6chrcmd> + 80024f00: 0077f793 andi a5,a5,7 + 80024f04: 00f687b3 add a5,a3,a5 + 80024f08: 0007c703 lbu a4,0(a5) + 80024f0c: 0025141b slliw s0,a0,0x2 + 80024f10: 00447413 andi s0,s0,4 + 80024f14: 0f000693 li a3,240 + 80024f18: 4086d6bb sraw a3,a3,s0 + 80024f1c: 00f5f593 andi a1,a1,15 + 80024f20: 00d77733 and a4,a4,a3 + 80024f24: 0085943b sllw s0,a1,s0 + 80024f28: 00876733 or a4,a4,s0 + 80024f2c: 00e78023 sb a4,0(a5) + 80024f30: 02013403 ld s0,32(sp) + 80024f34: 02813083 ld ra,40(sp) + 80024f38: 01813483 ld s1,24(sp) + 80024f3c: 03010113 addi sp,sp,48 + 80024f40: e55ff06f j 80024d94 <_ZL4Syncv> + 80024f44: 001a7497 auipc s1,0x1a7 + 80024f48: 31848493 addi s1,s1,792 # 801cc25c + 80024f4c: 0004c503 lbu a0,0(s1) + 80024f50: 00b13423 sd a1,8(sp) + 80024f54: 719000ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80024f58: 0004c503 lbu a0,0(s1) + 80024f5c: 0cc010ef jal ra,80026028 <_Z10FixMMC3CHRi> + 80024f60: 0000c7b7 lui a5,0xc + 80024f64: 00813583 ld a1,8(sp) + 80024f68: 06f46e63 bltu s0,a5,80024fe4 <_ZL17UNLSL1632CMDWritejh+0x144> + 80024f6c: 00040513 mv a0,s0 + 80024f70: 02013403 ld s0,32(sp) + 80024f74: 02813083 ld ra,40(sp) + 80024f78: 01813483 ld s1,24(sp) + 80024f7c: 03010113 addi sp,sp,48 + 80024f80: 3150006f j 80025a94 <_Z13MMC3_IRQWritejh> + 80024f84: 001a7797 auipc a5,0x1a7 + 80024f88: 28b78d23 sb a1,666(a5) # 801cc21e <_ZL4bbrk> + 80024f8c: 0025f793 andi a5,a1,2 + 80024f90: 02079a63 bnez a5,80024fc4 <_ZL17UNLSL1632CMDWritejh+0x124> + 80024f94: 0000f537 lui a0,0xf + 80024f98: 00350513 addi a0,a0,3 # f003 <_entry_offset+0xf003> + 80024f9c: 00a47433 and s0,s0,a0 + 80024fa0: 000097b7 lui a5,0x9 + 80024fa4: 06f40263 beq s0,a5,80025008 <_ZL17UNLSL1632CMDWritejh+0x168> + 80024fa8: 0000a7b7 lui a5,0xa + 80024fac: 04f40863 beq s0,a5,80024ffc <_ZL17UNLSL1632CMDWritejh+0x15c> + 80024fb0: 000087b7 lui a5,0x8 + 80024fb4: f6f41ee3 bne s0,a5,80024f30 <_ZL17UNLSL1632CMDWritejh+0x90> + 80024fb8: 001a7797 auipc a5,0x1a7 + 80024fbc: 26b78423 sb a1,616(a5) # 801cc220 <_ZL4prg0> + 80024fc0: f71ff06f j 80024f30 <_ZL17UNLSL1632CMDWritejh+0x90> + 80024fc4: 001a7497 auipc s1,0x1a7 + 80024fc8: 29848493 addi s1,s1,664 # 801cc25c + 80024fcc: 0004c503 lbu a0,0(s1) + 80024fd0: 00b13423 sd a1,8(sp) + 80024fd4: 699000ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80024fd8: 0004c503 lbu a0,0(s1) + 80024fdc: 04c010ef jal ra,80026028 <_Z10FixMMC3CHRi> + 80024fe0: 00813583 ld a1,8(sp) + 80024fe4: 00040513 mv a0,s0 + 80024fe8: 02013403 ld s0,32(sp) + 80024fec: 02813083 ld ra,40(sp) + 80024ff0: 01813483 ld s1,24(sp) + 80024ff4: 03010113 addi sp,sp,48 + 80024ff8: 0cd0106f j 800268c4 <_Z13MMC3_CMDWritejh> + 80024ffc: 001a7797 auipc a5,0x1a7 + 80025000: 22b782a3 sb a1,549(a5) # 801cc221 <_ZL4prg1> + 80025004: f2dff06f j 80024f30 <_ZL17UNLSL1632CMDWritejh+0x90> + 80025008: 0015f593 andi a1,a1,1 + 8002500c: 001a7797 auipc a5,0x1a7 + 80025010: 20b789a3 sb a1,531(a5) # 801cc21f <_ZL4mirr> + 80025014: f1dff06f j 80024f30 <_ZL17UNLSL1632CMDWritejh+0x90> + +0000000080025018 <_Z14UNLSL1632_InitP8CartInfo>: + 80025018: ff010113 addi sp,sp,-16 + 8002501c: 00000713 li a4,0 + 80025020: 00000693 li a3,0 + 80025024: 20000613 li a2,512 + 80025028: 10000593 li a1,256 + 8002502c: 00813023 sd s0,0(sp) + 80025030: 00113423 sd ra,8(sp) + 80025034: 00050413 mv s0,a0 + 80025038: 7e1010ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 8002503c: 00000797 auipc a5,0x0 + 80025040: c0878793 addi a5,a5,-1016 # 80024c44 <_ZL11UNLSL1632CWjh> + 80025044: 001a7717 auipc a4,0x1a7 + 80025048: 22f73e23 sd a5,572(a4) # 801cc280 + 8002504c: 00000797 auipc a5,0x0 + 80025050: de078793 addi a5,a5,-544 # 80024e2c <_ZL14UNLSL1632Powerv> + 80025054: 00f43023 sd a5,0(s0) + 80025058: 00013403 ld s0,0(sp) + 8002505c: 00813083 ld ra,8(sp) + 80025060: 00000797 auipc a5,0x0 + 80025064: dfc78793 addi a5,a5,-516 # 80024e5c <_ZL12StateRestorei> + 80025068: 001a7717 auipc a4,0x1a7 + 8002506c: 5ef73823 sd a5,1520(a4) # 801cc658 + 80025070: 00000693 li a3,0 + 80025074: 00000613 li a2,0 + 80025078: fff00593 li a1,-1 + 8002507c: 00026517 auipc a0,0x26 + 80025080: 6f450513 addi a0,a0,1780 # 8004b770 <_ZL9StateRegs> + 80025084: 01010113 addi sp,sp,16 + 80025088: f89da06f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002508c <_ZL4Syncv>: + 8002508c: ff010113 addi sp,sp,-16 + 80025090: 00008537 lui a0,0x8 + 80025094: 001a7597 auipc a1,0x1a7 + 80025098: 19d5c583 lbu a1,413(a1) # 801cc231 <_ZL4preg> + 8002509c: 00113423 sd ra,8(sp) + 800250a0: d75eb0ef jal ra,80010e14 <_Z8setprg32jj> + 800250a4: 00813083 ld ra,8(sp) + 800250a8: 001a7517 auipc a0,0x1a7 + 800250ac: 18854503 lbu a0,392(a0) # 801cc230 <_ZL4creg> + 800250b0: 01010113 addi sp,sp,16 + 800250b4: e51eb06f j 80010f04 <_Z7setchr8j> + +00000000800250b8 <_ZL12StateRestorei>: + 800250b8: fd5ff06f j 8002508c <_ZL4Syncv> + +00000000800250bc <_ZL9M244Writejh>: + 800250bc: 0085f713 andi a4,a1,8 + 800250c0: 0045d793 srli a5,a1,0x4 + 800250c4: 02070863 beqz a4,800250f4 <_ZL9M244Writejh+0x38> + 800250c8: 0077f793 andi a5,a5,7 + 800250cc: 00021717 auipc a4,0x21 + 800250d0: c0470713 addi a4,a4,-1020 # 80045cd0 <_ZL8chr_perm> + 800250d4: 00379793 slli a5,a5,0x3 + 800250d8: 00f707b3 add a5,a4,a5 + 800250dc: 0075f593 andi a1,a1,7 + 800250e0: 00b785b3 add a1,a5,a1 + 800250e4: 0005c783 lbu a5,0(a1) + 800250e8: 001a7717 auipc a4,0x1a7 + 800250ec: 14f70423 sb a5,328(a4) # 801cc230 <_ZL4creg> + 800250f0: f9dff06f j 8002508c <_ZL4Syncv> + 800250f4: 0037f793 andi a5,a5,3 + 800250f8: 00021717 auipc a4,0x21 + 800250fc: c1870713 addi a4,a4,-1000 # 80045d10 <_ZL8prg_perm> + 80025100: 00279793 slli a5,a5,0x2 + 80025104: 00f707b3 add a5,a4,a5 + 80025108: 0035f593 andi a1,a1,3 + 8002510c: 00b785b3 add a1,a5,a1 + 80025110: 0005c783 lbu a5,0(a1) + 80025114: 001a7717 auipc a4,0x1a7 + 80025118: 10f70ea3 sb a5,285(a4) # 801cc231 <_ZL4preg> + 8002511c: f71ff06f j 8002508c <_ZL4Syncv> + +0000000080025120 <_ZL9M244Powerv>: + 80025120: ff010113 addi sp,sp,-16 + 80025124: 00113423 sd ra,8(sp) + 80025128: 00813023 sd s0,0(sp) + 8002512c: 001a7797 auipc a5,0x1a7 + 80025130: 10078223 sb zero,260(a5) # 801cc230 <_ZL4creg> + 80025134: 00010437 lui s0,0x10 + 80025138: 001a7797 auipc a5,0x1a7 + 8002513c: 0e078ca3 sb zero,249(a5) # 801cc231 <_ZL4preg> + 80025140: f4dff0ef jal ra,8002508c <_ZL4Syncv> + 80025144: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80025148: 00000617 auipc a2,0x0 + 8002514c: f7460613 addi a2,a2,-140 # 800250bc <_ZL9M244Writejh> + 80025150: 00008537 lui a0,0x8 + 80025154: 1d50e0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80025158: fff40593 addi a1,s0,-1 + 8002515c: 00013403 ld s0,0(sp) + 80025160: 00813083 ld ra,8(sp) + 80025164: fffeb617 auipc a2,0xfffeb + 80025168: 4fc60613 addi a2,a2,1276 # 80010660 <_Z6CartBRj> + 8002516c: 00008537 lui a0,0x8 + 80025170: 01010113 addi sp,sp,16 + 80025174: 0a90e06f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080025178 <_Z14Mapper244_InitP8CartInfo>: + 80025178: ff010113 addi sp,sp,-16 + 8002517c: 00113423 sd ra,8(sp) + 80025180: 00000797 auipc a5,0x0 + 80025184: fa078793 addi a5,a5,-96 # 80025120 <_ZL9M244Powerv> + 80025188: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 8002518c: 00000693 li a3,0 + 80025190: 00000613 li a2,0 + 80025194: fff00593 li a1,-1 + 80025198: 00026517 auipc a0,0x26 + 8002519c: 68050513 addi a0,a0,1664 # 8004b818 <_ZL9StateRegs> + 800251a0: e71da0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800251a4: 00813083 ld ra,8(sp) + 800251a8: 00000797 auipc a5,0x0 + 800251ac: f1078793 addi a5,a5,-240 # 800250b8 <_ZL12StateRestorei> + 800251b0: 001a7717 auipc a4,0x1a7 + 800251b4: 4af73423 sd a5,1192(a4) # 801cc658 + 800251b8: 01010113 addi sp,sp,16 + 800251bc: 00008067 ret + +00000000800251c0 <_ZL15UNL158BProtReadj>: + 800251c0: 00757793 andi a5,a0,7 + 800251c4: 00022517 auipc a0,0x22 + 800251c8: 81450513 addi a0,a0,-2028 # 800469d8 <_ZL3lut> + 800251cc: 00f50533 add a0,a0,a5 + 800251d0: 00054503 lbu a0,0(a0) + 800251d4: 00032797 auipc a5,0x32 + 800251d8: 6947c783 lbu a5,1684(a5) # 80057868 + 800251dc: 00f56533 or a0,a0,a5 + 800251e0: 0ff57513 andi a0,a0,255 + 800251e4: 00008067 ret + +00000000800251e8 <_ZL12UNL158BPowerv>: + 800251e8: ff010113 addi sp,sp,-16 + 800251ec: 00113423 sd ra,8(sp) + 800251f0: 00813023 sd s0,0(sp) + 800251f4: 7cd000ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 800251f8: 00006437 lui s0,0x6 + 800251fc: fff40593 addi a1,s0,-1 # 5fff <_entry_offset+0x5fff> + 80025200: 00000617 auipc a2,0x0 + 80025204: 0a460613 addi a2,a2,164 # 800252a4 <_ZL16UNL158BProtWritejh> + 80025208: 00005537 lui a0,0x5 + 8002520c: 11d0e0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80025210: fff40593 addi a1,s0,-1 + 80025214: 00013403 ld s0,0(sp) + 80025218: 00813083 ld ra,8(sp) + 8002521c: 00000617 auipc a2,0x0 + 80025220: fa460613 addi a2,a2,-92 # 800251c0 <_ZL15UNL158BProtReadj> + 80025224: 00005537 lui a0,0x5 + 80025228: 01010113 addi sp,sp,16 + 8002522c: 7f00e06f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080025230 <_ZL9UNL158BPWjh>: + 80025230: 001a7797 auipc a5,0x1a7 + 80025234: 0207c783 lbu a5,32(a5) # 801cc250 + 80025238: 0187971b slliw a4,a5,0x18 + 8002523c: 4187571b sraiw a4,a4,0x18 + 80025240: 04075e63 bgez a4,8002529c <_ZL9UNL158BPWjh+0x6c> + 80025244: ff010113 addi sp,sp,-16 + 80025248: 00813023 sd s0,0(sp) + 8002524c: 00113423 sd ra,8(sp) + 80025250: 0207f713 andi a4,a5,32 + 80025254: 0077f593 andi a1,a5,7 + 80025258: 0077f413 andi s0,a5,7 + 8002525c: 00070e63 beqz a4,80025278 <_ZL9UNL158BPWjh+0x48> + 80025260: 00013403 ld s0,0(sp) + 80025264: 00813083 ld ra,8(sp) + 80025268: 0015d59b srliw a1,a1,0x1 + 8002526c: 00008537 lui a0,0x8 + 80025270: 01010113 addi sp,sp,16 + 80025274: ba1eb06f j 80010e14 <_Z8setprg32jj> + 80025278: 00040593 mv a1,s0 + 8002527c: 00008537 lui a0,0x8 + 80025280: 9d9eb0ef jal ra,80010c58 <_Z8setprg16jj> + 80025284: 00040593 mv a1,s0 + 80025288: 00013403 ld s0,0(sp) + 8002528c: 00813083 ld ra,8(sp) + 80025290: 0000c537 lui a0,0xc + 80025294: 01010113 addi sp,sp,16 + 80025298: 9c1eb06f j 80010c58 <_Z8setprg16jj> + 8002529c: 00f5f593 andi a1,a1,15 + 800252a0: ffceb06f j 80010a9c <_Z7setprg8jj> + +00000000800252a4 <_ZL16UNL158BProtWritejh>: + 800252a4: 00757713 andi a4,a0,7 + 800252a8: 001a7797 auipc a5,0x1a7 + 800252ac: fa878793 addi a5,a5,-88 # 801cc250 + 800252b0: 00e787b3 add a5,a5,a4 + 800252b4: 00b78023 sb a1,0(a5) + 800252b8: 00070e63 beqz a4,800252d4 <_ZL16UNL158BProtWritejh+0x30> + 800252bc: 00700793 li a5,7 + 800252c0: 00f71863 bne a4,a5,800252d0 <_ZL16UNL158BProtWritejh+0x2c> + 800252c4: 00021517 auipc a0,0x21 + 800252c8: a5c50513 addi a0,a0,-1444 # 80045d20 <_ZL8prg_perm+0x10> + 800252cc: 27c1606f j 8003b548 + 800252d0: 00008067 ret + 800252d4: 001a7517 auipc a0,0x1a7 + 800252d8: f8854503 lbu a0,-120(a0) # 801cc25c + 800252dc: 3910006f j 80025e6c <_Z10FixMMC3PRGi> + +00000000800252e0 <_Z12UNL158B_InitP8CartInfo>: + 800252e0: ff010113 addi sp,sp,-16 + 800252e4: 00000693 li a3,0 + 800252e8: 08000613 li a2,128 + 800252ec: 08000593 li a1,128 + 800252f0: 00000713 li a4,0 + 800252f4: 00813023 sd s0,0(sp) + 800252f8: 00113423 sd ra,8(sp) + 800252fc: 00050413 mv s0,a0 + 80025300: 519010ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80025304: 00000797 auipc a5,0x0 + 80025308: f2c78793 addi a5,a5,-212 # 80025230 <_ZL9UNL158BPWjh> + 8002530c: 001a7717 auipc a4,0x1a7 + 80025310: f8f73623 sd a5,-116(a4) # 801cc298 + 80025314: 00000797 auipc a5,0x0 + 80025318: ed478793 addi a5,a5,-300 # 800251e8 <_ZL12UNL158BPowerv> + 8002531c: 00f43023 sd a5,0(s0) + 80025320: 00013403 ld s0,0(sp) + 80025324: 00813083 ld ra,8(sp) + 80025328: 00020697 auipc a3,0x20 + 8002532c: 1c868693 addi a3,a3,456 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 80025330: 00000613 li a2,0 + 80025334: 00800593 li a1,8 + 80025338: 001a7517 auipc a0,0x1a7 + 8002533c: f1850513 addi a0,a0,-232 # 801cc250 + 80025340: 01010113 addi sp,sp,16 + 80025344: ccdda06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080025348 <_ZL10GENNOMWRAPh>: + 80025348: 001a7797 auipc a5,0x1a7 + 8002534c: eea78523 sb a0,-278(a5) # 801cc232 + 80025350: 00008067 ret + +0000000080025354 <_ZL10MBWRAMMMC6jh>: + 80025354: 3ff57793 andi a5,a0,1023 + 80025358: 001a7517 auipc a0,0x1a7 + 8002535c: f0853503 ld a0,-248(a0) # 801cc260 + 80025360: 00f50533 add a0,a0,a5 + 80025364: 00b50023 sb a1,0(a0) + 80025368: 00008067 ret + +000000008002536c <_ZL10MAWRAMMMC6j>: + 8002536c: 3ff57793 andi a5,a0,1023 + 80025370: 001a7517 auipc a0,0x1a7 + 80025374: ef053503 ld a0,-272(a0) # 801cc260 + 80025378: 00f50533 add a0,a0,a5 + 8002537c: 00054503 lbu a0,0(a0) + 80025380: 00008067 ret + +0000000080025384 <_ZL8M12Writejh>: + 80025384: 4045d79b sraiw a5,a1,0x4 + 80025388: 001a7717 auipc a4,0x1a7 + 8002538c: ec870713 addi a4,a4,-312 # 801cc250 + 80025390: 0015f593 andi a1,a1,1 + 80025394: 0017f793 andi a5,a5,1 + 80025398: 00b70023 sb a1,0(a4) + 8002539c: 00f700a3 sb a5,1(a4) + 800253a0: 00008067 ret + +00000000800253a4 <_ZL7M12Readj>: + 800253a4: 001a7517 auipc a0,0x1a7 + 800253a8: eae54503 lbu a0,-338(a0) # 801cc252 + 800253ac: 00008067 ret + +00000000800253b0 <_ZL7M45Readj>: + 800253b0: 001a7717 auipc a4,0x1a7 + 800253b4: ea574703 lbu a4,-347(a4) # 801cc255 + 800253b8: 00100793 li a5,1 + 800253bc: 0047071b addiw a4,a4,4 + 800253c0: 00e7973b sllw a4,a5,a4 + 800253c4: fff7079b addiw a5,a4,-1 + 800253c8: 00e7e7b3 or a5,a5,a4 + 800253cc: 00a7f7b3 and a5,a5,a0 + 800253d0: 0007879b sext.w a5,a5 + 800253d4: 00032517 auipc a0,0x32 + 800253d8: 49454503 lbu a0,1172(a0) # 80057868 + 800253dc: 00078463 beqz a5,800253e4 <_ZL7M45Readj+0x34> + 800253e0: 00156513 ori a0,a0,1 + 800253e4: 00008067 ret + +00000000800253e8 <_ZL8GENMWRAPh>: + 800253e8: 00050793 mv a5,a0 + 800253ec: fff54513 not a0,a0 + 800253f0: 00157513 andi a0,a0,1 + 800253f4: 001a7717 auipc a4,0x1a7 + 800253f8: e2f70f23 sb a5,-450(a4) # 801cc232 + 800253fc: c4deb06f j 80011048 <_Z9setmirrori> + +0000000080025400 <_ZL6TKSPPUj>: + 80025400: 00a5579b srliw a5,a0,0xa + 80025404: 0077f793 andi a5,a5,7 + 80025408: 001a7717 auipc a4,0x1a7 + 8002540c: e6870713 addi a4,a4,-408 # 801cc270 <_ZL6TKSMIR> + 80025410: 00f70733 add a4,a4,a5 + 80025414: 00074503 lbu a0,0(a4) + 80025418: 001a7717 auipc a4,0x1a7 + 8002541c: e6f70223 sb a5,-412(a4) # 801cc27c <_ZL9PPUCHRBus> + 80025420: 0025051b addiw a0,a0,2 + 80025424: c25eb06f j 80011048 <_Z9setmirrori> + +0000000080025428 <_ZL12GenMMC3Closev>: + 80025428: ff010113 addi sp,sp,-16 + 8002542c: 00113423 sd ra,8(sp) + 80025430: 001a7517 auipc a0,0x1a7 + 80025434: e0853503 ld a0,-504(a0) # 801cc238 + 80025438: 00050463 beqz a0,80025440 <_ZL12GenMMC3Closev+0x18> + 8002543c: 904ed0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80025440: 001a7517 auipc a0,0x1a7 + 80025444: e2053503 ld a0,-480(a0) # 801cc260 + 80025448: 00050463 beqz a0,80025450 <_ZL12GenMMC3Closev+0x28> + 8002544c: 8f4ed0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80025450: 00813083 ld ra,8(sp) + 80025454: 001a7797 auipc a5,0x1a7 + 80025458: e007b623 sd zero,-500(a5) # 801cc260 + 8002545c: 001a7797 auipc a5,0x1a7 + 80025460: dc07be23 sd zero,-548(a5) # 801cc238 + 80025464: 01010113 addi sp,sp,16 + 80025468: 00008067 ret + +000000008002546c <_ZL8GENCWRAPjh>: + 8002546c: a39eb06f j 80010ea4 <_Z7setchr1jj> + +0000000080025470 <_ZL5M12CWjh>: + 80025470: 00c5579b srliw a5,a0,0xc + 80025474: 0017f793 andi a5,a5,1 + 80025478: 001a7717 auipc a4,0x1a7 + 8002547c: dd870713 addi a4,a4,-552 # 801cc250 + 80025480: 00f707b3 add a5,a4,a5 + 80025484: 0007c783 lbu a5,0(a5) + 80025488: 0087979b slliw a5,a5,0x8 + 8002548c: 00b785bb addw a1,a5,a1 + 80025490: a15eb06f j 80010ea4 <_Z7setchr1jj> + +0000000080025494 <_ZL5M37CWjh>: + 80025494: 001a7797 auipc a5,0x1a7 + 80025498: dbc7c783 lbu a5,-580(a5) # 801cc250 + 8002549c: 07f5f593 andi a1,a1,127 + 800254a0: 0067979b slliw a5,a5,0x6 + 800254a4: 00b7e5b3 or a1,a5,a1 + 800254a8: 0005859b sext.w a1,a1 + 800254ac: 9f9eb06f j 80010ea4 <_Z7setchr1jj> + +00000000800254b0 <_ZL5M44CWjh>: + 800254b0: 001a7797 auipc a5,0x1a7 + 800254b4: da07c783 lbu a5,-608(a5) # 801cc250 + 800254b8: 00500713 li a4,5 + 800254bc: 00f76463 bltu a4,a5,800254c4 <_ZL5M44CWjh+0x14> + 800254c0: 07f5f593 andi a1,a1,127 + 800254c4: 00779793 slli a5,a5,0x7 + 800254c8: 00b7e5b3 or a1,a5,a1 + 800254cc: 9d9eb06f j 80010ea4 <_Z7setchr1jj> + +00000000800254d0 <_ZL5M47CWjh>: + 800254d0: 001a7797 auipc a5,0x1a7 + 800254d4: d807c783 lbu a5,-640(a5) # 801cc250 + 800254d8: 07f5f593 andi a1,a1,127 + 800254dc: 0077979b slliw a5,a5,0x7 + 800254e0: 00b7e5b3 or a1,a5,a1 + 800254e4: 0005859b sext.w a1,a1 + 800254e8: 9bdeb06f j 80010ea4 <_Z7setchr1jj> + +00000000800254ec <_ZL5M49CWjh>: + 800254ec: 001a7797 auipc a5,0x1a7 + 800254f0: d647c783 lbu a5,-668(a5) # 801cc250 + 800254f4: 0017979b slliw a5,a5,0x1 + 800254f8: 1807f793 andi a5,a5,384 + 800254fc: 07f5f593 andi a1,a1,127 + 80025500: 00f5e5b3 or a1,a1,a5 + 80025504: 9a1eb06f j 80010ea4 <_Z7setchr1jj> + +0000000080025508 <_ZL5M52CWjh>: + 80025508: 001a7617 auipc a2,0x1a7 + 8002550c: d4864603 lbu a2,-696(a2) # 801cc250 + 80025510: 0006079b sext.w a5,a2 + 80025514: 00465693 srli a3,a2,0x4 + 80025518: 4067d81b sraiw a6,a5,0x6 + 8002551c: 0026f713 andi a4,a3,2 + 80025520: 00467613 andi a2,a2,4 + 80025524: 0106f6b3 and a3,a3,a6 + 80025528: 0017979b slliw a5,a5,0x1 + 8002552c: 00c76733 or a4,a4,a2 + 80025530: 0016f693 andi a3,a3,1 + 80025534: 0807f793 andi a5,a5,128 + 80025538: 00d76733 or a4,a4,a3 + 8002553c: 0ff7c793 xori a5,a5,255 + 80025540: 00b7f5b3 and a1,a5,a1 + 80025544: 00771713 slli a4,a4,0x7 + 80025548: 00b765b3 or a1,a4,a1 + 8002554c: 959eb06f j 80010ea4 <_Z7setchr1jj> + +0000000080025550 <_ZL6M115CWjh>: + 80025550: 001a7797 auipc a5,0x1a7 + 80025554: d017c783 lbu a5,-767(a5) # 801cc251 + 80025558: 0087979b slliw a5,a5,0x8 + 8002555c: 1007f793 andi a5,a5,256 + 80025560: 00b7e5b3 or a1,a5,a1 + 80025564: 941eb06f j 80010ea4 <_Z7setchr1jj> + +0000000080025568 <_ZL6M134CWjh>: + 80025568: 001a7797 auipc a5,0x1a7 + 8002556c: ce87c783 lbu a5,-792(a5) # 801cc250 + 80025570: 0037979b slliw a5,a5,0x3 + 80025574: 1007f793 andi a5,a5,256 + 80025578: 00b7e5b3 or a1,a5,a1 + 8002557c: 929eb06f j 80010ea4 <_Z7setchr1jj> + +0000000080025580 <_ZL6M205CWjh>: + 80025580: 001a7797 auipc a5,0x1a7 + 80025584: cd07c783 lbu a5,-816(a5) # 801cc250 + 80025588: 0037979b slliw a5,a5,0x3 + 8002558c: 07f5f593 andi a1,a1,127 + 80025590: 00b7e5b3 or a1,a5,a1 + 80025594: 0005859b sext.w a1,a1 + 80025598: 90deb06f j 80010ea4 <_Z7setchr1jj> + +000000008002559c <_ZL6M249CWjh>: + 8002559c: 001a7797 auipc a5,0x1a7 + 800255a0: cb47c783 lbu a5,-844(a5) # 801cc250 + 800255a4: 0027f793 andi a5,a5,2 + 800255a8: 04078463 beqz a5,800255f0 <_ZL6M249CWjh+0x54> + 800255ac: 0015d793 srli a5,a1,0x1 + 800255b0: 0045d713 srli a4,a1,0x4 + 800255b4: 00877713 andi a4,a4,8 + 800255b8: 0047f793 andi a5,a5,4 + 800255bc: 0035f613 andi a2,a1,3 + 800255c0: 0025d693 srli a3,a1,0x2 + 800255c4: 00e7e7b3 or a5,a5,a4 + 800255c8: 00c7e7b3 or a5,a5,a2 + 800255cc: 00359713 slli a4,a1,0x3 + 800255d0: 0106f693 andi a3,a3,16 + 800255d4: 00259593 slli a1,a1,0x2 + 800255d8: 00d7e7b3 or a5,a5,a3 + 800255dc: 02077713 andi a4,a4,32 + 800255e0: 00e7e7b3 or a5,a5,a4 + 800255e4: fc05f593 andi a1,a1,-64 + 800255e8: 00b7e5b3 or a1,a5,a1 + 800255ec: 0ff5f593 andi a1,a1,255 + 800255f0: 8b5eb06f j 80010ea4 <_Z7setchr1jj> + +00000000800255f4 <_ZL7TKSWRAPjh>: + 800255f4: fe010113 addi sp,sp,-32 + 800255f8: 00a5561b srliw a2,a0,0xa + 800255fc: 001a7717 auipc a4,0x1a7 + 80025600: c7470713 addi a4,a4,-908 # 801cc270 <_ZL6TKSMIR> + 80025604: 00058793 mv a5,a1 + 80025608: 00813823 sd s0,16(sp) + 8002560c: 00913423 sd s1,8(sp) + 80025610: 0075d693 srli a3,a1,0x7 + 80025614: 00113c23 sd ra,24(sp) + 80025618: 00c70733 add a4,a4,a2 + 8002561c: 07f5f593 andi a1,a1,127 + 80025620: 4077d41b sraiw s0,a5,0x7 + 80025624: 00060493 mv s1,a2 + 80025628: 00d70023 sb a3,0(a4) + 8002562c: 879eb0ef jal ra,80010ea4 <_Z7setchr1jj> + 80025630: 001a7797 auipc a5,0x1a7 + 80025634: c4c7c783 lbu a5,-948(a5) # 801cc27c <_ZL9PPUCHRBus> + 80025638: 00978c63 beq a5,s1,80025650 <_ZL7TKSWRAPjh+0x5c> + 8002563c: 01813083 ld ra,24(sp) + 80025640: 01013403 ld s0,16(sp) + 80025644: 00813483 ld s1,8(sp) + 80025648: 02010113 addi sp,sp,32 + 8002564c: 00008067 ret + 80025650: 0024051b addiw a0,s0,2 + 80025654: 01013403 ld s0,16(sp) + 80025658: 01813083 ld ra,24(sp) + 8002565c: 00813483 ld s1,8(sp) + 80025660: 02010113 addi sp,sp,32 + 80025664: 9e5eb06f j 80011048 <_Z9setmirrori> + +0000000080025668 <_ZL8GENPWRAPjh>: + 80025668: 001a7797 auipc a5,0x1a7 + 8002566c: c207c783 lbu a5,-992(a5) # 801cc288 + 80025670: 0047979b slliw a5,a5,0x4 + 80025674: 0407f793 andi a5,a5,64 + 80025678: 07f5f593 andi a1,a1,127 + 8002567c: 00f5e5b3 or a1,a1,a5 + 80025680: c1ceb06f j 80010a9c <_Z7setprg8jj> + +0000000080025684 <_ZL5M37PWjh>: + 80025684: 001a7797 auipc a5,0x1a7 + 80025688: bcc7c783 lbu a5,-1076(a5) # 801cc250 + 8002568c: 00200693 li a3,2 + 80025690: 00f5f713 andi a4,a1,15 + 80025694: 00d78463 beq a5,a3,8002569c <_ZL5M37PWjh+0x18> + 80025698: 0075f713 andi a4,a1,7 + 8002569c: 00379793 slli a5,a5,0x3 + 800256a0: 00f767b3 or a5,a4,a5 + 800256a4: 0ff7f593 andi a1,a5,255 + 800256a8: bf4eb06f j 80010a9c <_Z7setprg8jj> + +00000000800256ac <_ZL5M44PWjh>: + 800256ac: 001a7797 auipc a5,0x1a7 + 800256b0: ba47c783 lbu a5,-1116(a5) # 801cc250 + 800256b4: 00500693 li a3,5 + 800256b8: 00f5f713 andi a4,a1,15 + 800256bc: 00f6f463 bgeu a3,a5,800256c4 <_ZL5M44PWjh+0x18> + 800256c0: 01f5f713 andi a4,a1,31 + 800256c4: 00479793 slli a5,a5,0x4 + 800256c8: 00e7e5b3 or a1,a5,a4 + 800256cc: bd0eb06f j 80010a9c <_Z7setprg8jj> + +00000000800256d0 <_ZL5M45PWjh>: + 800256d0: 001a7717 auipc a4,0x1a7 + 800256d4: b8070713 addi a4,a4,-1152 # 801cc250 + 800256d8: 00374783 lbu a5,3(a4) + 800256dc: 00174683 lbu a3,1(a4) + 800256e0: fff7c793 not a5,a5 + 800256e4: 00f5f5b3 and a1,a1,a5 + 800256e8: 03f5f593 andi a1,a1,63 + 800256ec: 00d5e633 or a2,a1,a3 + 800256f0: 001a6797 auipc a5,0x1a6 + 800256f4: 3f07b783 ld a5,1008(a5) # 801cbae0 + 800256f8: 00060593 mv a1,a2 + 800256fc: 00078c63 beqz a5,80025714 <_ZL5M45PWjh+0x44> + 80025700: 00274583 lbu a1,2(a4) + 80025704: 0025959b slliw a1,a1,0x2 + 80025708: 1005f593 andi a1,a1,256 + 8002570c: 00c5e5b3 or a1,a1,a2 + 80025710: 0005859b sext.w a1,a1 + 80025714: b88eb06f j 80010a9c <_Z7setprg8jj> + +0000000080025718 <_ZL5M47PWjh>: + 80025718: 001a7797 auipc a5,0x1a7 + 8002571c: b387c783 lbu a5,-1224(a5) # 801cc250 + 80025720: 00f5f593 andi a1,a1,15 + 80025724: 0047979b slliw a5,a5,0x4 + 80025728: 00f5e5b3 or a1,a1,a5 + 8002572c: 0ff5f593 andi a1,a1,255 + 80025730: b6ceb06f j 80010a9c <_Z7setprg8jj> + +0000000080025734 <_ZL5M52PWjh>: + 80025734: 001a7697 auipc a3,0x1a7 + 80025738: b1c6c683 lbu a3,-1252(a3) # 801cc250 + 8002573c: 0006879b sext.w a5,a3 + 80025740: 4037d71b sraiw a4,a5,0x3 + 80025744: 00e7f733 and a4,a5,a4 + 80025748: 0017979b slliw a5,a5,0x1 + 8002574c: 00177713 andi a4,a4,1 + 80025750: 0066f693 andi a3,a3,6 + 80025754: 0107f793 andi a5,a5,16 + 80025758: 00d76733 or a4,a4,a3 + 8002575c: 01f7c793 xori a5,a5,31 + 80025760: 0047171b slliw a4,a4,0x4 + 80025764: 00b7f7b3 and a5,a5,a1 + 80025768: 00e7e5b3 or a1,a5,a4 + 8002576c: 0005859b sext.w a1,a1 + 80025770: b2ceb06f j 80010a9c <_Z7setprg8jj> + +0000000080025774 <_ZL6M134PWjh>: + 80025774: 001a7797 auipc a5,0x1a7 + 80025778: adc7c783 lbu a5,-1316(a5) # 801cc250 + 8002577c: 0047979b slliw a5,a5,0x4 + 80025780: 0207f793 andi a5,a5,32 + 80025784: 01f5f593 andi a1,a1,31 + 80025788: 00f5e5b3 or a1,a1,a5 + 8002578c: b10eb06f j 80010a9c <_Z7setprg8jj> + +0000000080025790 <_ZL6M198PWjh>: + 80025790: 04f00793 li a5,79 + 80025794: 00b7f663 bgeu a5,a1,800257a0 <_ZL6M198PWjh+0x10> + 80025798: 04f5f593 andi a1,a1,79 + 8002579c: b00eb06f j 80010a9c <_Z7setprg8jj> + 800257a0: afceb06f j 80010a9c <_Z7setprg8jj> + +00000000800257a4 <_ZL6M205PWjh>: + 800257a4: 00f5f593 andi a1,a1,15 + 800257a8: 001a7797 auipc a5,0x1a7 + 800257ac: aa87c783 lbu a5,-1368(a5) # 801cc250 + 800257b0: 00f5e5b3 or a1,a1,a5 + 800257b4: ae8eb06f j 80010a9c <_Z7setprg8jj> + +00000000800257b8 <_ZL6M245PWjh>: + 800257b8: 001a7797 auipc a5,0x1a7 + 800257bc: a987c783 lbu a5,-1384(a5) # 801cc250 + 800257c0: 0057979b slliw a5,a5,0x5 + 800257c4: 0407f793 andi a5,a5,64 + 800257c8: 03f5f593 andi a1,a1,63 + 800257cc: 00f5e5b3 or a1,a1,a5 + 800257d0: acceb06f j 80010a9c <_Z7setprg8jj> + +00000000800257d4 <_ZL6M249PWjh>: + 800257d4: 001a7797 auipc a5,0x1a7 + 800257d8: a7c7c783 lbu a5,-1412(a5) # 801cc250 + 800257dc: 0027f793 andi a5,a5,2 + 800257e0: 04078063 beqz a5,80025820 <_ZL6M249PWjh+0x4c> + 800257e4: 01f00793 li a5,31 + 800257e8: 02b7ee63 bltu a5,a1,80025824 <_ZL6M249PWjh+0x50> + 800257ec: 0035d793 srli a5,a1,0x3 + 800257f0: 0015d693 srli a3,a1,0x1 + 800257f4: 0027f793 andi a5,a5,2 + 800257f8: 0046f693 andi a3,a3,4 + 800257fc: 0025971b slliw a4,a1,0x2 + 80025800: 00d7e7b3 or a5,a5,a3 + 80025804: 0015f593 andi a1,a1,1 + 80025808: 00b7e5b3 or a1,a5,a1 + 8002580c: 00877793 andi a5,a4,8 + 80025810: 00f5e5b3 or a1,a1,a5 + 80025814: 01077713 andi a4,a4,16 + 80025818: 00e5e5b3 or a1,a1,a4 + 8002581c: 0ff5f593 andi a1,a1,255 + 80025820: a7ceb06f j 80010a9c <_Z7setprg8jj> + 80025824: fe05859b addiw a1,a1,-32 + 80025828: 0ff5f713 andi a4,a1,255 + 8002582c: 4017579b sraiw a5,a4,0x1 + 80025830: 4047569b sraiw a3,a4,0x4 + 80025834: 0086f693 andi a3,a3,8 + 80025838: 0047f793 andi a5,a5,4 + 8002583c: 00d7e7b3 or a5,a5,a3 + 80025840: 0035f593 andi a1,a1,3 + 80025844: 4027569b sraiw a3,a4,0x2 + 80025848: 00b7e5b3 or a1,a5,a1 + 8002584c: 0106f693 andi a3,a3,16 + 80025850: 00371793 slli a5,a4,0x3 + 80025854: 00d5e5b3 or a1,a1,a3 + 80025858: 0207f793 andi a5,a5,32 + 8002585c: 00271713 slli a4,a4,0x2 + 80025860: 00f5e5b3 or a1,a1,a5 + 80025864: fc077713 andi a4,a4,-64 + 80025868: 00e5e5b3 or a1,a1,a4 + 8002586c: 0ff5f593 andi a1,a1,255 + 80025870: a2ceb06f j 80010a9c <_Z7setprg8jj> + +0000000080025874 <_ZL5M49PWjh>: + 80025874: 001a7797 auipc a5,0x1a7 + 80025878: 9dc7c783 lbu a5,-1572(a5) # 801cc250 + 8002587c: 0017f713 andi a4,a5,1 + 80025880: 0007879b sext.w a5,a5 + 80025884: 00070c63 beqz a4,8002589c <_ZL5M49PWjh+0x28> + 80025888: 4027d79b sraiw a5,a5,0x2 + 8002588c: 0307f793 andi a5,a5,48 + 80025890: 00f5f593 andi a1,a1,15 + 80025894: 00b7e5b3 or a1,a5,a1 + 80025898: a04eb06f j 80010a9c <_Z7setprg8jj> + 8002589c: 4047d79b sraiw a5,a5,0x4 + 800258a0: 0037f593 andi a1,a5,3 + 800258a4: 00008537 lui a0,0x8 + 800258a8: d6ceb06f j 80010e14 <_Z8setprg32jj> + +00000000800258ac <_ZL5M74CWjh>: + 800258ac: ff85879b addiw a5,a1,-8 + 800258b0: 00058613 mv a2,a1 + 800258b4: 0ff7f793 andi a5,a5,255 + 800258b8: 00100713 li a4,1 + 800258bc: 00050593 mv a1,a0 + 800258c0: 0006061b sext.w a2,a2 + 800258c4: 00f77663 bgeu a4,a5,800258d0 <_ZL5M74CWjh+0x24> + 800258c8: 00000513 li a0,0 + 800258cc: d58eb06f j 80010e24 <_Z8setchr1rijj> + 800258d0: 01000513 li a0,16 + 800258d4: d50eb06f j 80010e24 <_Z8setchr1rijj> + +00000000800258d8 <_ZL6TQWRAPjh>: + 800258d8: 00058613 mv a2,a1 + 800258dc: 00050593 mv a1,a0 + 800258e0: 4026551b sraiw a0,a2,0x2 + 800258e4: 01057513 andi a0,a0,16 + 800258e8: 03f67613 andi a2,a2,63 + 800258ec: d38eb06f j 80010e24 <_Z8setchr1rijj> + +00000000800258f0 <_ZL6M191CWjh>: + 800258f0: 00058613 mv a2,a1 + 800258f4: 00050593 mv a1,a0 + 800258f8: 4036551b sraiw a0,a2,0x3 + 800258fc: 01057513 andi a0,a0,16 + 80025900: d24eb06f j 80010e24 <_Z8setchr1rijj> + +0000000080025904 <_ZL6M192CWjh>: + 80025904: ff85879b addiw a5,a1,-8 + 80025908: 00058613 mv a2,a1 + 8002590c: 0ff7f793 andi a5,a5,255 + 80025910: 00300713 li a4,3 + 80025914: 00050593 mv a1,a0 + 80025918: 0006061b sext.w a2,a2 + 8002591c: 00f76663 bltu a4,a5,80025928 <_ZL6M192CWjh+0x24> + 80025920: 01000513 li a0,16 + 80025924: d00eb06f j 80010e24 <_Z8setchr1rijj> + 80025928: 00000513 li a0,0 + 8002592c: cf8eb06f j 80010e24 <_Z8setchr1rijj> + +0000000080025930 <_ZL6M194CWjh>: + 80025930: 00058793 mv a5,a1 + 80025934: 00100713 li a4,1 + 80025938: 00050593 mv a1,a0 + 8002593c: 0007861b sext.w a2,a5 + 80025940: 00f77663 bgeu a4,a5,8002594c <_ZL6M194CWjh+0x1c> + 80025944: 00000513 li a0,0 + 80025948: cdceb06f j 80010e24 <_Z8setchr1rijj> + 8002594c: 01000513 li a0,16 + 80025950: cd4eb06f j 80010e24 <_Z8setchr1rijj> + +0000000080025954 <_ZL6M195CWjh>: + 80025954: 00058793 mv a5,a1 + 80025958: 00300713 li a4,3 + 8002595c: 00050593 mv a1,a0 + 80025960: 0007861b sext.w a2,a5 + 80025964: 00f76663 bltu a4,a5,80025970 <_ZL6M195CWjh+0x1c> + 80025968: 01000513 li a0,16 + 8002596c: cb8eb06f j 80010e24 <_Z8setchr1rijj> + 80025970: 00000513 li a0,0 + 80025974: cb0eb06f j 80010e24 <_Z8setchr1rijj> + +0000000080025978 <_ZL9M114PWRAPjh>: + 80025978: ff010113 addi sp,sp,-16 + 8002597c: 00813023 sd s0,0(sp) + 80025980: 001a7417 auipc s0,0x1a7 + 80025984: 8d040413 addi s0,s0,-1840 # 801cc250 + 80025988: 00044783 lbu a5,0(s0) + 8002598c: 00113423 sd ra,8(sp) + 80025990: 0187971b slliw a4,a5,0x18 + 80025994: 4187571b sraiw a4,a4,0x18 + 80025998: 00074c63 bltz a4,800259b0 <_ZL9M114PWRAPjh+0x38> + 8002599c: 00013403 ld s0,0(sp) + 800259a0: 00813083 ld ra,8(sp) + 800259a4: 03f5f593 andi a1,a1,63 + 800259a8: 01010113 addi sp,sp,16 + 800259ac: 8f0eb06f j 80010a9c <_Z7setprg8jj> + 800259b0: 00f7f593 andi a1,a5,15 + 800259b4: 00008537 lui a0,0x8 + 800259b8: aa0eb0ef jal ra,80010c58 <_Z8setprg16jj> + 800259bc: 00044583 lbu a1,0(s0) + 800259c0: 00013403 ld s0,0(sp) + 800259c4: 00813083 ld ra,8(sp) + 800259c8: 0000c537 lui a0,0xc + 800259cc: 00f5f593 andi a1,a1,15 + 800259d0: 01010113 addi sp,sp,16 + 800259d4: a84eb06f j 80010c58 <_Z8setprg16jj> + +00000000800259d8 <_ZL6M115PWjh>: + 800259d8: ff010113 addi sp,sp,-16 + 800259dc: 00813023 sd s0,0(sp) + 800259e0: 001a7417 auipc s0,0x1a7 + 800259e4: 87040413 addi s0,s0,-1936 # 801cc250 + 800259e8: 00044783 lbu a5,0(s0) + 800259ec: 00113423 sd ra,8(sp) + 800259f0: 0187971b slliw a4,a5,0x18 + 800259f4: 4187571b sraiw a4,a4,0x18 + 800259f8: 04075863 bgez a4,80025a48 <_ZL6M115PWjh+0x70> + 800259fc: 0207f713 andi a4,a5,32 + 80025a00: 02070063 beqz a4,80025a20 <_ZL6M115PWjh+0x48> + 80025a04: 00013403 ld s0,0(sp) + 80025a08: 00813083 ld ra,8(sp) + 80025a0c: 4017d59b sraiw a1,a5,0x1 + 80025a10: 0075f593 andi a1,a1,7 + 80025a14: 00008537 lui a0,0x8 + 80025a18: 01010113 addi sp,sp,16 + 80025a1c: bf8eb06f j 80010e14 <_Z8setprg32jj> + 80025a20: 00f7f593 andi a1,a5,15 + 80025a24: 00008537 lui a0,0x8 + 80025a28: a30eb0ef jal ra,80010c58 <_Z8setprg16jj> + 80025a2c: 00044583 lbu a1,0(s0) + 80025a30: 00013403 ld s0,0(sp) + 80025a34: 00813083 ld ra,8(sp) + 80025a38: 0000c537 lui a0,0xc + 80025a3c: 00f5f593 andi a1,a1,15 + 80025a40: 01010113 addi sp,sp,16 + 80025a44: a14eb06f j 80010c58 <_Z8setprg16jj> + 80025a48: 00013403 ld s0,0(sp) + 80025a4c: 00813083 ld ra,8(sp) + 80025a50: 01010113 addi sp,sp,16 + 80025a54: 848eb06f j 80010a9c <_Z7setprg8jj> + +0000000080025a58 <_ZL9MR254WRAMj>: + 80025a58: ffffa7b7 lui a5,0xffffa + 80025a5c: 00a787bb addw a5,a5,a0 + 80025a60: 001a6717 auipc a4,0x1a6 + 80025a64: 7f070713 addi a4,a4,2032 # 801cc250 + 80025a68: 02079793 slli a5,a5,0x20 + 80025a6c: 00074683 lbu a3,0(a4) + 80025a70: 001a6517 auipc a0,0x1a6 + 80025a74: 7f053503 ld a0,2032(a0) # 801cc260 + 80025a78: 0207d793 srli a5,a5,0x20 + 80025a7c: 00f507b3 add a5,a0,a5 + 80025a80: 0007c503 lbu a0,0(a5) # ffffffffffffa000 <_end+0xffffffff7fe25000> + 80025a84: 00069663 bnez a3,80025a90 <_ZL9MR254WRAMj+0x38> + 80025a88: 00174783 lbu a5,1(a4) + 80025a8c: 00f54533 xor a0,a0,a5 + 80025a90: 00008067 ret + +0000000080025a94 <_Z13MMC3_IRQWritejh>: + 80025a94: 0000e737 lui a4,0xe + 80025a98: 00170793 addi a5,a4,1 # e001 <_entry_offset+0xe001> + 80025a9c: 00f57533 and a0,a0,a5 + 80025aa0: 02e50463 beq a0,a4,80025ac8 <_Z13MMC3_IRQWritejh+0x34> + 80025aa4: 04f50463 beq a0,a5,80025aec <_Z13MMC3_IRQWritejh+0x58> + 80025aa8: 0000c7b7 lui a5,0xc + 80025aac: 04f50863 beq a0,a5,80025afc <_Z13MMC3_IRQWritejh+0x68> + 80025ab0: 00178793 addi a5,a5,1 # c001 <_entry_offset+0xc001> + 80025ab4: 04f51a63 bne a0,a5,80025b08 <_Z13MMC3_IRQWritejh+0x74> + 80025ab8: 00100793 li a5,1 + 80025abc: 001a6717 auipc a4,0x1a6 + 80025ac0: 78f70f23 sb a5,1950(a4) # 801cc25a + 80025ac4: 00008067 ret + 80025ac8: ff010113 addi sp,sp,-16 + 80025acc: 00100513 li a0,1 + 80025ad0: 00113423 sd ra,8(sp) + 80025ad4: a7cdb0ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 80025ad8: 00813083 ld ra,8(sp) + 80025adc: 001a6797 auipc a5,0x1a6 + 80025ae0: 76078fa3 sb zero,1919(a5) # 801cc25b + 80025ae4: 01010113 addi sp,sp,16 + 80025ae8: 00008067 ret + 80025aec: 00100793 li a5,1 + 80025af0: 001a6717 auipc a4,0x1a6 + 80025af4: 76f705a3 sb a5,1899(a4) # 801cc25b + 80025af8: 00008067 ret + 80025afc: 001a6797 auipc a5,0x1a6 + 80025b00: 74b78ea3 sb a1,1885(a5) # 801cc259 + 80025b04: 00008067 ret + 80025b08: 00008067 ret + +0000000080025b0c <_ZL12M250IRQWritejh>: + 80025b0c: 00a5579b srliw a5,a0,0xa + 80025b10: 0000e737 lui a4,0xe + 80025b14: 00e57733 and a4,a0,a4 + 80025b18: 0017f793 andi a5,a5,1 + 80025b1c: 00e7e7b3 or a5,a5,a4 + 80025b20: 0ff57593 andi a1,a0,255 + 80025b24: 0007851b sext.w a0,a5 + 80025b28: f6dff06f j 80025a94 <_Z13MMC3_IRQWritejh> + +0000000080025b2c <_ZL16ClockMMC3Counterv>: + 80025b2c: 001a6717 auipc a4,0x1a6 + 80025b30: 72c70713 addi a4,a4,1836 # 801cc258 + 80025b34: 00074783 lbu a5,0(a4) + 80025b38: 02078c63 beqz a5,80025b70 <_ZL16ClockMMC3Counterv+0x44> + 80025b3c: 001a6697 auipc a3,0x1a6 + 80025b40: 71e6c683 lbu a3,1822(a3) # 801cc25a + 80025b44: 04068863 beqz a3,80025b94 <_ZL16ClockMMC3Counterv+0x68> + 80025b48: 001a6797 auipc a5,0x1a6 + 80025b4c: 7117c783 lbu a5,1809(a5) # 801cc259 + 80025b50: 00f70023 sb a5,0(a4) + 80025b54: 001a6717 auipc a4,0x1a6 + 80025b58: 70070323 sb zero,1798(a4) # 801cc25a + 80025b5c: 00079863 bnez a5,80025b6c <_ZL16ClockMMC3Counterv+0x40> + 80025b60: 001a6797 auipc a5,0x1a6 + 80025b64: 6fb7c783 lbu a5,1787(a5) # 801cc25b + 80025b68: 04079063 bnez a5,80025ba8 <_ZL16ClockMMC3Counterv+0x7c> + 80025b6c: 00008067 ret + 80025b70: 001a6797 auipc a5,0x1a6 + 80025b74: 6e97c783 lbu a5,1769(a5) # 801cc259 + 80025b78: 00f70023 sb a5,0(a4) + 80025b7c: 001a6717 auipc a4,0x1a6 + 80025b80: 6c070f23 sb zero,1758(a4) # 801cc25a + 80025b84: 00027717 auipc a4,0x27 + 80025b88: 3d472703 lw a4,980(a4) # 8004cf58 <_ZL6isRevB> + 80025b8c: fc0718e3 bnez a4,80025b5c <_ZL16ClockMMC3Counterv+0x30> + 80025b90: 00008067 ret + 80025b94: fff7879b addiw a5,a5,-1 + 80025b98: 0ff7f793 andi a5,a5,255 + 80025b9c: 00f70023 sb a5,0(a4) + 80025ba0: fc0796e3 bnez a5,80025b6c <_ZL16ClockMMC3Counterv+0x40> + 80025ba4: fbdff06f j 80025b60 <_ZL16ClockMMC3Counterv+0x34> + 80025ba8: 00100513 li a0,1 + 80025bac: 98cdb06f j 80000d38 <_Z14X6502_IRQBegini> + +0000000080025bb0 <_ZL7MMC3_hbv>: + 80025bb0: f7dff06f j 80025b2c <_ZL16ClockMMC3Counterv> + +0000000080025bb4 <_ZL23MMC3_hb_PALStarWarsHackv>: + 80025bb4: 001a7717 auipc a4,0x1a7 + 80025bb8: bec72703 lw a4,-1044(a4) # 801cc7a0 + 80025bbc: 0f000793 li a5,240 + 80025bc0: 00f70463 beq a4,a5,80025bc8 <_ZL23MMC3_hb_PALStarWarsHackv+0x14> + 80025bc4: f69ff06f j 80025b2c <_ZL16ClockMMC3Counterv> + 80025bc8: ff010113 addi sp,sp,-16 + 80025bcc: 00113423 sd ra,8(sp) + 80025bd0: f5dff0ef jal ra,80025b2c <_ZL16ClockMMC3Counterv> + 80025bd4: 00813083 ld ra,8(sp) + 80025bd8: 01010113 addi sp,sp,16 + 80025bdc: f51ff06f j 80025b2c <_ZL16ClockMMC3Counterv> + +0000000080025be0 <_ZL22MMC3_hb_KickMasterHackv>: + 80025be0: 001a7717 auipc a4,0x1a7 + 80025be4: bc072703 lw a4,-1088(a4) # 801cc7a0 + 80025be8: 0ee00793 li a5,238 + 80025bec: 00f70463 beq a4,a5,80025bf4 <_ZL22MMC3_hb_KickMasterHackv+0x14> + 80025bf0: f3dff06f j 80025b2c <_ZL16ClockMMC3Counterv> + 80025bf4: ff010113 addi sp,sp,-16 + 80025bf8: 00113423 sd ra,8(sp) + 80025bfc: f31ff0ef jal ra,80025b2c <_ZL16ClockMMC3Counterv> + 80025c00: 00813083 ld ra,8(sp) + 80025c04: 01010113 addi sp,sp,16 + 80025c08: f25ff06f j 80025b2c <_ZL16ClockMMC3Counterv> + +0000000080025c0c <_ZL5M45CWjh>: + 80025c0c: 001a6797 auipc a5,0x1a6 + 80025c10: ed47b783 ld a5,-300(a5) # 801cbae0 + 80025c14: 00050693 mv a3,a0 + 80025c18: 00078463 beqz a5,80025c20 <_ZL5M45CWjh+0x14> + 80025c1c: a88eb06f j 80010ea4 <_Z7setchr1jj> + 80025c20: 001a6617 auipc a2,0x1a6 + 80025c24: 63060613 addi a2,a2,1584 # 801cc250 + 80025c28: 00264703 lbu a4,2(a2) + 80025c2c: 00877513 andi a0,a4,8 + 80025c30: 0007079b sext.w a5,a4 + 80025c34: 04050263 beqz a0,80025c78 <_ZL5M45CWjh+0x6c> + 80025c38: 00777713 andi a4,a4,7 + 80025c3c: 0017071b addiw a4,a4,1 + 80025c40: 00100513 li a0,1 + 80025c44: 00e5173b sllw a4,a0,a4 + 80025c48: fff7071b addiw a4,a4,-1 + 80025c4c: 00e5f5b3 and a1,a1,a4 + 80025c50: 00064603 lbu a2,0(a2) + 80025c54: 00001737 lui a4,0x1 + 80025c58: 0047979b slliw a5,a5,0x4 + 80025c5c: f0070713 addi a4,a4,-256 # f00 <_entry_offset+0xf00> + 80025c60: 00e7f7b3 and a5,a5,a4 + 80025c64: 00c7e7b3 or a5,a5,a2 + 80025c68: 00b7e5b3 or a1,a5,a1 + 80025c6c: 0005859b sext.w a1,a1 + 80025c70: 00068513 mv a0,a3 + 80025c74: a30eb06f j 80010ea4 <_Z7setchr1jj> + 80025c78: 00173713 seqz a4,a4 + 80025c7c: 40e00733 neg a4,a4 + 80025c80: 00e5f5b3 and a1,a1,a4 + 80025c84: fcdff06f j 80025c50 <_ZL5M45CWjh+0x44> + +0000000080025c88 <_ZL6M196PWjh>: + 80025c88: 001a6797 auipc a5,0x1a6 + 80025c8c: 5c878793 addi a5,a5,1480 # 801cc250 + 80025c90: 0007c703 lbu a4,0(a5) + 80025c94: 00070863 beqz a4,80025ca4 <_ZL6M196PWjh+0x1c> + 80025c98: 0017c583 lbu a1,1(a5) + 80025c9c: 00008537 lui a0,0x8 + 80025ca0: 974eb06f j 80010e14 <_Z8setprg32jj> + 80025ca4: df9ea06f j 80010a9c <_Z7setprg8jj> + +0000000080025ca8 <_ZL5M76CWjh>: + 80025ca8: 000017b7 lui a5,0x1 + 80025cac: 00f57463 bgeu a0,a5,80025cb4 <_ZL5M76CWjh+0xc> + 80025cb0: 00008067 ret + 80025cb4: 000027b7 lui a5,0x2 + 80025cb8: 0015151b slliw a0,a0,0x1 + 80025cbc: 80078793 addi a5,a5,-2048 # 1800 <_entry_offset+0x1800> + 80025cc0: 00f57533 and a0,a0,a5 + 80025cc4: 0005051b sext.w a0,a0 + 80025cc8: 9fceb06f j 80010ec4 <_Z7setchr2jj> + +0000000080025ccc <_ZL6M165CWjh>: + 80025ccc: 00058793 mv a5,a1 + 80025cd0: 00050593 mv a1,a0 + 80025cd4: 00079863 bnez a5,80025ce4 <_ZL6M165CWjh+0x18> + 80025cd8: 00000613 li a2,0 + 80025cdc: 01000513 li a0,16 + 80025ce0: 984eb06f j 80010e64 <_Z8setchr4rijj> + 80025ce4: 0027d593 srli a1,a5,0x2 + 80025ce8: 9fceb06f j 80010ee4 <_Z7setchr4jj> + +0000000080025cec <_ZL9M165PPUFDv.part.0>: + 80025cec: ff010113 addi sp,sp,-16 + 80025cf0: 00813023 sd s0,0(sp) + 80025cf4: 001a6417 auipc s0,0x1a6 + 80025cf8: 55440413 addi s0,s0,1364 # 801cc248 + 80025cfc: 00044583 lbu a1,0(s0) + 80025d00: 00000513 li a0,0 + 80025d04: 00113423 sd ra,8(sp) + 80025d08: fc5ff0ef jal ra,80025ccc <_ZL6M165CWjh> + 80025d0c: 00244583 lbu a1,2(s0) + 80025d10: 00013403 ld s0,0(sp) + 80025d14: 00813083 ld ra,8(sp) + 80025d18: 00001537 lui a0,0x1 + 80025d1c: 01010113 addi sp,sp,16 + 80025d20: fadff06f j 80025ccc <_ZL6M165CWjh> + +0000000080025d24 <_ZL9M165PPUFEv.part.0>: + 80025d24: ff010113 addi sp,sp,-16 + 80025d28: 00813023 sd s0,0(sp) + 80025d2c: 001a6417 auipc s0,0x1a6 + 80025d30: 51c40413 addi s0,s0,1308 # 801cc248 + 80025d34: 00144583 lbu a1,1(s0) + 80025d38: 00000513 li a0,0 + 80025d3c: 00113423 sd ra,8(sp) + 80025d40: f8dff0ef jal ra,80025ccc <_ZL6M165CWjh> + 80025d44: 00444583 lbu a1,4(s0) + 80025d48: 00013403 ld s0,0(sp) + 80025d4c: 00813083 ld ra,8(sp) + 80025d50: 00001537 lui a0,0x1 + 80025d54: 01010113 addi sp,sp,16 + 80025d58: f75ff06f j 80025ccc <_ZL6M165CWjh> + +0000000080025d5c <_ZL7M165PPUj>: + 80025d5c: 000027b7 lui a5,0x2 + 80025d60: ff078713 addi a4,a5,-16 # 1ff0 <_entry_offset+0x1ff0> + 80025d64: 00e57533 and a0,a0,a4 + 80025d68: fd078713 addi a4,a5,-48 + 80025d6c: 00e50863 beq a0,a4,80025d7c <_ZL7M165PPUj+0x20> + 80025d70: fe078793 addi a5,a5,-32 + 80025d74: 00f50c63 beq a0,a5,80025d8c <_ZL7M165PPUj+0x30> + 80025d78: 00008067 ret + 80025d7c: ffd00793 li a5,-3 + 80025d80: 001a6717 auipc a4,0x1a6 + 80025d84: 4cf70823 sb a5,1232(a4) # 801cc250 + 80025d88: f65ff06f j 80025cec <_ZL9M165PPUFDv.part.0> + 80025d8c: ffe00793 li a5,-2 + 80025d90: 001a6717 auipc a4,0x1a6 + 80025d94: 4cf70023 sb a5,1216(a4) # 801cc250 + 80025d98: f8dff06f j 80025d24 <_ZL9M165PPUFEv.part.0> + +0000000080025d9c <_ZL7M165CWMjh>: + 80025d9c: ff010113 addi sp,sp,-16 + 80025da0: 00813023 sd s0,0(sp) + 80025da4: 001a6417 auipc s0,0x1a6 + 80025da8: 4b840413 addi s0,s0,1208 # 801cc25c + 80025dac: 00044783 lbu a5,0(s0) + 80025db0: 00113423 sd ra,8(sp) + 80025db4: 0057f713 andi a4,a5,5 + 80025db8: 02070863 beqz a4,80025de8 <_ZL7M165CWMjh+0x4c> + 80025dbc: 0077f793 andi a5,a5,7 + 80025dc0: 00100713 li a4,1 + 80025dc4: 04e79463 bne a5,a4,80025e0c <_ZL7M165CWMjh+0x70> + 80025dc8: 001a6717 auipc a4,0x1a6 + 80025dcc: 48874703 lbu a4,1160(a4) # 801cc250 + 80025dd0: 0fe00793 li a5,254 + 80025dd4: 04f70863 beq a4,a5,80025e24 <_ZL7M165CWMjh+0x88> + 80025dd8: 00813083 ld ra,8(sp) + 80025ddc: 00013403 ld s0,0(sp) + 80025de0: 01010113 addi sp,sp,16 + 80025de4: 00008067 ret + 80025de8: 001a6717 auipc a4,0x1a6 + 80025dec: 46874703 lbu a4,1128(a4) # 801cc250 + 80025df0: 0fd00793 li a5,253 + 80025df4: fef712e3 bne a4,a5,80025dd8 <_ZL7M165CWMjh+0x3c> + 80025df8: ef5ff0ef jal ra,80025cec <_ZL9M165PPUFDv.part.0> + 80025dfc: 00044783 lbu a5,0(s0) + 80025e00: 00100713 li a4,1 + 80025e04: 0077f793 andi a5,a5,7 + 80025e08: fce780e3 beq a5,a4,80025dc8 <_ZL7M165CWMjh+0x2c> + 80025e0c: 00400713 li a4,4 + 80025e10: fce794e3 bne a5,a4,80025dd8 <_ZL7M165CWMjh+0x3c> + 80025e14: 001a6717 auipc a4,0x1a6 + 80025e18: 43c74703 lbu a4,1084(a4) # 801cc250 + 80025e1c: 0fe00793 li a5,254 + 80025e20: faf71ce3 bne a4,a5,80025dd8 <_ZL7M165CWMjh+0x3c> + 80025e24: 00013403 ld s0,0(sp) + 80025e28: 00813083 ld ra,8(sp) + 80025e2c: 01010113 addi sp,sp,16 + 80025e30: ef5ff06f j 80025d24 <_ZL9M165PPUFEv.part.0> + +0000000080025e34 <_ZL6M197CWjh>: + 80025e34: 00050c63 beqz a0,80025e4c <_ZL6M197CWjh+0x18> + 80025e38: 00001737 lui a4,0x1 + 80025e3c: 02e50063 beq a0,a4,80025e5c <_ZL6M197CWjh+0x28> + 80025e40: 40070713 addi a4,a4,1024 # 1400 <_entry_offset+0x1400> + 80025e44: 00e50863 beq a0,a4,80025e54 <_ZL6M197CWjh+0x20> + 80025e48: 00008067 ret + 80025e4c: 0015d593 srli a1,a1,0x1 + 80025e50: 894eb06f j 80010ee4 <_Z7setchr4jj> + 80025e54: 00002537 lui a0,0x2 + 80025e58: 80050513 addi a0,a0,-2048 # 1800 <_entry_offset+0x1800> + 80025e5c: 868eb06f j 80010ec4 <_Z7setchr2jj> + +0000000080025e60 <_ZL8M115Readj>: + 80025e60: 001a6517 auipc a0,0x1a6 + 80025e64: 3f254503 lbu a0,1010(a0) # 801cc252 + 80025e68: 00008067 ret + +0000000080025e6c <_Z10FixMMC3PRGi>: + 80025e6c: fe010113 addi sp,sp,-32 + 80025e70: 00813823 sd s0,16(sp) + 80025e74: 00913423 sd s1,8(sp) + 80025e78: 001a6417 auipc s0,0x1a6 + 80025e7c: 42040413 addi s0,s0,1056 # 801cc298 + 80025e80: 001a6497 auipc s1,0x1a6 + 80025e84: 3c848493 addi s1,s1,968 # 801cc248 + 80025e88: 00113c23 sd ra,24(sp) + 80025e8c: 04057513 andi a0,a0,64 + 80025e90: 00043783 ld a5,0(s0) + 80025e94: 0064c583 lbu a1,6(s1) + 80025e98: 04050663 beqz a0,80025ee4 <_Z10FixMMC3PRGi+0x78> + 80025e9c: 0000c537 lui a0,0xc + 80025ea0: 000780e7 jalr a5 + 80025ea4: 00043783 ld a5,0(s0) + 80025ea8: 0fe00593 li a1,254 + 80025eac: 00008537 lui a0,0x8 + 80025eb0: 000780e7 jalr a5 + 80025eb4: 0074c583 lbu a1,7(s1) + 80025eb8: 00043783 ld a5,0(s0) + 80025ebc: 0000a537 lui a0,0xa + 80025ec0: 000780e7 jalr a5 + 80025ec4: 00043303 ld t1,0(s0) + 80025ec8: 01013403 ld s0,16(sp) + 80025ecc: 01813083 ld ra,24(sp) + 80025ed0: 00813483 ld s1,8(sp) + 80025ed4: 0ff00593 li a1,255 + 80025ed8: 0000e537 lui a0,0xe + 80025edc: 02010113 addi sp,sp,32 + 80025ee0: 00030067 jr t1 + 80025ee4: 00008537 lui a0,0x8 + 80025ee8: 000780e7 jalr a5 + 80025eec: 00043783 ld a5,0(s0) + 80025ef0: 0fe00593 li a1,254 + 80025ef4: 0000c537 lui a0,0xc + 80025ef8: 000780e7 jalr a5 + 80025efc: fb9ff06f j 80025eb4 <_Z10FixMMC3PRGi+0x48> + +0000000080025f00 <_Z14KT008HackWritejh>: + 80025f00: 00357513 andi a0,a0,3 + 80025f04: 02051063 bnez a0,80025f24 <_Z14KT008HackWritejh+0x24> + 80025f08: 02700793 li a5,39 + 80025f0c: 00f58e63 beq a1,a5,80025f28 <_Z14KT008HackWritejh+0x28> + 80025f10: 001a6797 auipc a5,0x1a6 + 80025f14: 36b78c23 sb a1,888(a5) # 801cc288 + 80025f18: 001a6517 auipc a0,0x1a6 + 80025f1c: 34454503 lbu a0,836(a0) # 801cc25c + 80025f20: f4dff06f j 80025e6c <_Z10FixMMC3PRGi> + 80025f24: 00008067 ret + 80025f28: 001a6797 auipc a5,0x1a6 + 80025f2c: 36078023 sb zero,864(a5) # 801cc288 + 80025f30: 001a6517 auipc a0,0x1a6 + 80025f34: 32c54503 lbu a0,812(a0) # 801cc25c + 80025f38: f35ff06f j 80025e6c <_Z10FixMMC3PRGi> + +0000000080025f3c <_ZL11M114ExWritejh>: + 80025f3c: 000087b7 lui a5,0x8 + 80025f40: 00f56463 bltu a0,a5,80025f48 <_ZL11M114ExWritejh+0xc> + 80025f44: 00008067 ret + 80025f48: 001a6517 auipc a0,0x1a6 + 80025f4c: 31454503 lbu a0,788(a0) # 801cc25c + 80025f50: 001a6797 auipc a5,0x1a6 + 80025f54: 30b78023 sb a1,768(a5) # 801cc250 + 80025f58: f15ff06f j 80025e6c <_Z10FixMMC3PRGi> + +0000000080025f5c <_ZL9M115Writejh>: + 80025f5c: 000057b7 lui a5,0x5 + 80025f60: 08078793 addi a5,a5,128 # 5080 <_entry_offset+0x5080> + 80025f64: 02f50e63 beq a0,a5,80025fa0 <_ZL9M115Writejh+0x44> + 80025f68: 000067b7 lui a5,0x6 + 80025f6c: 02f50063 beq a0,a5,80025f8c <_ZL9M115Writejh+0x30> + 80025f70: 00178793 addi a5,a5,1 # 6001 <_entry_offset+0x6001> + 80025f74: 02f51063 bne a0,a5,80025f94 <_ZL9M115Writejh+0x38> + 80025f78: 001a6797 auipc a5,0x1a6 + 80025f7c: 2cb78ca3 sb a1,729(a5) # 801cc251 + 80025f80: 001a6517 auipc a0,0x1a6 + 80025f84: 2dc54503 lbu a0,732(a0) # 801cc25c + 80025f88: ee5ff06f j 80025e6c <_Z10FixMMC3PRGi> + 80025f8c: 001a6797 auipc a5,0x1a6 + 80025f90: 2cb78223 sb a1,708(a5) # 801cc250 + 80025f94: 001a6517 auipc a0,0x1a6 + 80025f98: 2c854503 lbu a0,712(a0) # 801cc25c + 80025f9c: ed1ff06f j 80025e6c <_Z10FixMMC3PRGi> + 80025fa0: 001a6797 auipc a5,0x1a6 + 80025fa4: 2ab78923 sb a1,690(a5) # 801cc252 + 80025fa8: 001a6517 auipc a0,0x1a6 + 80025fac: 2b454503 lbu a0,692(a0) # 801cc25c + 80025fb0: ebdff06f j 80025e6c <_Z10FixMMC3PRGi> + +0000000080025fb4 <_ZL16Mapper196WriteLojh>: + 80025fb4: 00f5f793 andi a5,a1,15 + 80025fb8: 4045d59b sraiw a1,a1,0x4 + 80025fbc: 001a6717 auipc a4,0x1a6 + 80025fc0: 29470713 addi a4,a4,660 # 801cc250 + 80025fc4: 00b7e5b3 or a1,a5,a1 + 80025fc8: 001a6517 auipc a0,0x1a6 + 80025fcc: 29454503 lbu a0,660(a0) # 801cc25c + 80025fd0: 00100793 li a5,1 + 80025fd4: 00f70023 sb a5,0(a4) + 80025fd8: 00b700a3 sb a1,1(a4) + 80025fdc: e91ff06f j 80025e6c <_Z10FixMMC3PRGi> + +0000000080025fe0 <_ZL6M245CWjh>: + 80025fe0: ff010113 addi sp,sp,-16 + 80025fe4: 00813023 sd s0,0(sp) + 80025fe8: 00113423 sd ra,8(sp) + 80025fec: 001a6797 auipc a5,0x1a6 + 80025ff0: af47b783 ld a5,-1292(a5) # 801cbae0 + 80025ff4: 00058413 mv s0,a1 + 80025ff8: 02078263 beqz a5,8002601c <_ZL6M245CWjh+0x3c> + 80025ffc: 001a6797 auipc a5,0x1a6 + 80026000: 24878a23 sb s0,596(a5) # 801cc250 + 80026004: 00013403 ld s0,0(sp) + 80026008: 00813083 ld ra,8(sp) + 8002600c: 001a6517 auipc a0,0x1a6 + 80026010: 25054503 lbu a0,592(a0) # 801cc25c + 80026014: 01010113 addi sp,sp,16 + 80026018: e55ff06f j 80025e6c <_Z10FixMMC3PRGi> + 8002601c: 0075f593 andi a1,a1,7 + 80026020: e85ea0ef jal ra,80010ea4 <_Z7setchr1jj> + 80026024: fd9ff06f j 80025ffc <_ZL6M245CWjh+0x1c> + +0000000080026028 <_Z10FixMMC3CHRi>: + 80026028: fd010113 addi sp,sp,-48 + 8002602c: 01213823 sd s2,16(sp) + 80026030: 001a6917 auipc s2,0x1a6 + 80026034: 21890913 addi s2,s2,536 # 801cc248 + 80026038: 00094583 lbu a1,0(s2) + 8002603c: 00913c23 sd s1,24(sp) + 80026040: 001a6497 auipc s1,0x1a6 + 80026044: 24048493 addi s1,s1,576 # 801cc280 + 80026048: 0004b783 ld a5,0(s1) + 8002604c: 02813023 sd s0,32(sp) + 80026050: 01413023 sd s4,0(sp) + 80026054: 0055141b slliw s0,a0,0x5 + 80026058: 00001a37 lui s4,0x1 + 8002605c: 01447433 and s0,s0,s4 + 80026060: 02113423 sd ra,40(sp) + 80026064: 0004051b sext.w a0,s0 + 80026068: 01313423 sd s3,8(sp) + 8002606c: 0fe5f593 andi a1,a1,254 + 80026070: 00050413 mv s0,a0 + 80026074: 000780e7 jalr a5 + 80026078: 00094583 lbu a1,0(s2) + 8002607c: 0004b783 ld a5,0(s1) + 80026080: 40046513 ori a0,s0,1024 + 80026084: 0015e593 ori a1,a1,1 + 80026088: 000780e7 jalr a5 + 8002608c: 00194583 lbu a1,1(s2) + 80026090: 000019b7 lui s3,0x1 + 80026094: 0004b783 ld a5,0(s1) + 80026098: 80098513 addi a0,s3,-2048 # 800 <_entry_offset+0x800> + 8002609c: 0fe5f593 andi a1,a1,254 + 800260a0: 00a44533 xor a0,s0,a0 + 800260a4: 000780e7 jalr a5 + 800260a8: 00194583 lbu a1,1(s2) + 800260ac: 0004b783 ld a5,0(s1) + 800260b0: c0098513 addi a0,s3,-1024 + 800260b4: 0015e593 ori a1,a1,1 + 800260b8: 00a44533 xor a0,s0,a0 + 800260bc: 000780e7 jalr a5 + 800260c0: 00294583 lbu a1,2(s2) + 800260c4: 0004b783 ld a5,0(s1) + 800260c8: 01444533 xor a0,s0,s4 + 800260cc: 0005051b sext.w a0,a0 + 800260d0: 000780e7 jalr a5 + 800260d4: 00394583 lbu a1,3(s2) + 800260d8: 0004b783 ld a5,0(s1) + 800260dc: 40098513 addi a0,s3,1024 + 800260e0: 00a44533 xor a0,s0,a0 + 800260e4: 000780e7 jalr a5 + 800260e8: 00494583 lbu a1,4(s2) + 800260ec: 0004b783 ld a5,0(s1) + 800260f0: 000029b7 lui s3,0x2 + 800260f4: 80098513 addi a0,s3,-2048 # 1800 <_entry_offset+0x1800> + 800260f8: 00a44533 xor a0,s0,a0 + 800260fc: 000780e7 jalr a5 + 80026100: 00594583 lbu a1,5(s2) + 80026104: 0004b783 ld a5,0(s1) + 80026108: c0098513 addi a0,s3,-1024 + 8002610c: 00a44533 xor a0,s0,a0 + 80026110: 000780e7 jalr a5 + 80026114: 001a6317 auipc t1,0x1a6 + 80026118: 17c33303 ld t1,380(t1) # 801cc290 + 8002611c: 02030663 beqz t1,80026148 <_Z10FixMMC3CHRi+0x120> + 80026120: 02013403 ld s0,32(sp) + 80026124: 02813083 ld ra,40(sp) + 80026128: 01813483 ld s1,24(sp) + 8002612c: 01013903 ld s2,16(sp) + 80026130: 00813983 ld s3,8(sp) + 80026134: 00013a03 ld s4,0(sp) + 80026138: 001a6517 auipc a0,0x1a6 + 8002613c: 0fa54503 lbu a0,250(a0) # 801cc232 + 80026140: 03010113 addi sp,sp,48 + 80026144: 00030067 jr t1 + 80026148: 02813083 ld ra,40(sp) + 8002614c: 02013403 ld s0,32(sp) + 80026150: 01813483 ld s1,24(sp) + 80026154: 01013903 ld s2,16(sp) + 80026158: 00813983 ld s3,8(sp) + 8002615c: 00013a03 ld s4,0(sp) + 80026160: 03010113 addi sp,sp,48 + 80026164: 00008067 ret + +0000000080026168 <_Z12MMC3RegResetv>: + 80026168: 001a6797 auipc a5,0x1a6 + 8002616c: 0e078a23 sb zero,244(a5) # 801cc25c + 80026170: 001a6797 auipc a5,0x1a6 + 80026174: 0e0785a3 sb zero,235(a5) # 801cc25b + 80026178: 001a6797 auipc a5,0x1a6 + 8002617c: 0e0780a3 sb zero,225(a5) # 801cc259 + 80026180: 001a6797 auipc a5,0x1a6 + 80026184: 0c078c23 sb zero,216(a5) # 801cc258 + 80026188: ff010113 addi sp,sp,-16 + 8002618c: 00021797 auipc a5,0x21 + 80026190: 8147b783 ld a5,-2028(a5) # 800469a0 + 80026194: 00000513 li a0,0 + 80026198: 00113423 sd ra,8(sp) + 8002619c: 001a6717 auipc a4,0x1a6 + 800261a0: 0af73623 sd a5,172(a4) # 801cc248 + 800261a4: 001a6797 auipc a5,0x1a6 + 800261a8: 0e078223 sb zero,228(a5) # 801cc288 + 800261ac: cc1ff0ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 800261b0: 00813083 ld ra,8(sp) + 800261b4: 00000513 li a0,0 + 800261b8: 01010113 addi sp,sp,16 + 800261bc: e6dff06f j 80026028 <_Z10FixMMC3CHRi> + +00000000800261c0 <_Z12GenMMC3Powerv>: + 800261c0: fd010113 addi sp,sp,-48 + 800261c4: 02113423 sd ra,40(sp) + 800261c8: 02813023 sd s0,32(sp) + 800261cc: 00913c23 sd s1,24(sp) + 800261d0: 01213823 sd s2,16(sp) + 800261d4: 01313423 sd s3,8(sp) + 800261d8: 01413023 sd s4,0(sp) + 800261dc: 001a6797 auipc a5,0x1a6 + 800261e0: 9047b783 ld a5,-1788(a5) # 801cbae0 + 800261e4: 00078663 beqz a5,800261f0 <_Z12GenMMC3Powerv+0x30> + 800261e8: 00000513 li a0,0 + 800261ec: d19ea0ef jal ra,80010f04 <_Z7setchr8j> + 800261f0: 0000c5b7 lui a1,0xc + 800261f4: 00000617 auipc a2,0x0 + 800261f8: 6d060613 addi a2,a2,1744 # 800268c4 <_Z13MMC3_CMDWritejh> + 800261fc: fff58593 addi a1,a1,-1 # bfff <_entry_offset+0xbfff> + 80026200: 00008537 lui a0,0x8 + 80026204: 1250d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80026208: 00010437 lui s0,0x10 + 8002620c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80026210: 00000617 auipc a2,0x0 + 80026214: 88460613 addi a2,a2,-1916 # 80025a94 <_Z13MMC3_IRQWritejh> + 80026218: 0000c537 lui a0,0xc + 8002621c: 10d0d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80026220: fff40593 addi a1,s0,-1 + 80026224: fffea617 auipc a2,0xfffea + 80026228: 43c60613 addi a2,a2,1084 # 80010660 <_Z6CartBRj> + 8002622c: 00008537 lui a0,0x8 + 80026230: 7ec0d0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80026234: 000065b7 lui a1,0x6 + 80026238: 00000617 auipc a2,0x0 + 8002623c: cc860613 addi a2,a2,-824 # 80025f00 <_Z14KT008HackWritejh> + 80026240: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 80026244: 00005537 lui a0,0x5 + 80026248: 0e10d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002624c: 00100513 li a0,1 + 80026250: 001a6797 auipc a5,0x1a6 + 80026254: fe078123 sb zero,-30(a5) # 801cc232 + 80026258: 001a6797 auipc a5,0x1a6 + 8002625c: fc078da3 sb zero,-37(a5) # 801cc233 + 80026260: 001a6417 auipc s0,0x1a6 + 80026264: 02940413 addi s0,s0,41 # 801cc289 + 80026268: de1ea0ef jal ra,80011048 <_Z9setmirrori> + 8002626c: 00044783 lbu a5,0(s0) + 80026270: 0017f793 andi a5,a5,1 + 80026274: 08078c63 beqz a5,8002630c <_Z12GenMMC3Powerv+0x14c> + 80026278: 001a6497 auipc s1,0x1a6 + 8002627c: ff048493 addi s1,s1,-16 # 801cc268 + 80026280: 0004a503 lw a0,0(s1) + 80026284: 001a6997 auipc s3,0x1a6 + 80026288: fdc98993 addi s3,s3,-36 # 801cc260 + 8002628c: 40000793 li a5,1024 + 80026290: 0009b603 ld a2,0(s3) + 80026294: 0cf50a63 beq a0,a5,80026368 <_Z12GenMMC3Powerv+0x1a8> + 80026298: 000065b7 lui a1,0x6 + 8002629c: 00a5551b srliw a0,a0,0xa + 800262a0: d75d90ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 800262a4: 0004a583 lw a1,0(s1) + 800262a8: 00002937 lui s2,0x2 + 800262ac: fff90913 addi s2,s2,-1 # 1fff <_entry_offset+0x1fff> + 800262b0: fff5859b addiw a1,a1,-1 + 800262b4: 00006a37 lui s4,0x6 + 800262b8: 0125f5b3 and a1,a1,s2 + 800262bc: fffea617 auipc a2,0xfffea + 800262c0: 3d060613 addi a2,a2,976 # 8001068c <_Z6CartBWjh> + 800262c4: 00ba05bb addw a1,s4,a1 + 800262c8: 00006537 lui a0,0x6 + 800262cc: 05d0d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800262d0: 0004a583 lw a1,0(s1) + 800262d4: fffea617 auipc a2,0xfffea + 800262d8: 38c60613 addi a2,a2,908 # 80010660 <_Z6CartBRj> + 800262dc: 00006537 lui a0,0x6 + 800262e0: fff5859b addiw a1,a1,-1 + 800262e4: 0125f5b3 and a1,a1,s2 + 800262e8: 00ba05bb addw a1,s4,a1 + 800262ec: 7300d0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800262f0: 00000613 li a2,0 + 800262f4: 000065b7 lui a1,0x6 + 800262f8: 01000513 li a0,16 + 800262fc: decea0ef jal ra,800108e8 <_Z8setprg8rijj> + 80026300: 00044783 lbu a5,0(s0) + 80026304: 0027f793 andi a5,a5,2 + 80026308: 0a078263 beqz a5,800263ac <_Z12GenMMC3Powerv+0x1ec> + 8002630c: e5dff0ef jal ra,80026168 <_Z12MMC3RegResetv> + 80026310: 001a6517 auipc a0,0x1a6 + 80026314: f2853503 ld a0,-216(a0) # 801cc238 + 80026318: 02050863 beqz a0,80026348 <_Z12GenMMC3Powerv+0x188> + 8002631c: 02013403 ld s0,32(sp) + 80026320: 02813083 ld ra,40(sp) + 80026324: 01813483 ld s1,24(sp) + 80026328: 01013903 ld s2,16(sp) + 8002632c: 00813983 ld s3,8(sp) + 80026330: 00013a03 ld s4,0(sp) + 80026334: 001a6597 auipc a1,0x1a6 + 80026338: f0c5a583 lw a1,-244(a1) # 801cc240 + 8002633c: 00100613 li a2,1 + 80026340: 03010113 addi sp,sp,48 + 80026344: 4110d06f j 80033f54 <_Z15FCEU_MemoryRandPhjb> + 80026348: 02813083 ld ra,40(sp) + 8002634c: 02013403 ld s0,32(sp) + 80026350: 01813483 ld s1,24(sp) + 80026354: 01013903 ld s2,16(sp) + 80026358: 00813983 ld s3,8(sp) + 8002635c: 00013a03 ld s4,0(sp) + 80026360: 03010113 addi sp,sp,48 + 80026364: 00008067 ret + 80026368: 000075b7 lui a1,0x7 + 8002636c: 00100513 li a0,1 + 80026370: ca5d90ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 80026374: 00008937 lui s2,0x8 + 80026378: fff90593 addi a1,s2,-1 # 7fff <_entry_offset+0x7fff> + 8002637c: fffff617 auipc a2,0xfffff + 80026380: ff060613 addi a2,a2,-16 # 8002536c <_ZL10MAWRAMMMC6j> + 80026384: 00007537 lui a0,0x7 + 80026388: 6940d0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002638c: fffff617 auipc a2,0xfffff + 80026390: fc860613 addi a2,a2,-56 # 80025354 <_ZL10MBWRAMMMC6jh> + 80026394: fff90593 addi a1,s2,-1 + 80026398: 00007537 lui a0,0x7 + 8002639c: 78c0d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800263a0: 00044783 lbu a5,0(s0) + 800263a4: 0027f793 andi a5,a5,2 + 800263a8: f60792e3 bnez a5,8002630c <_Z12GenMMC3Powerv+0x14c> + 800263ac: 0004a583 lw a1,0(s1) + 800263b0: 0009b503 ld a0,0(s3) + 800263b4: 00100613 li a2,1 + 800263b8: 39d0d0ef jal ra,80033f54 <_Z15FCEU_MemoryRandPhjb> + 800263bc: f51ff06f j 8002630c <_Z12GenMMC3Powerv+0x14c> + +00000000800263c0 <_ZL7M4Powerv>: + 800263c0: ff010113 addi sp,sp,-16 + 800263c4: 00113423 sd ra,8(sp) + 800263c8: df9ff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 800263cc: 001a6517 auipc a0,0x1a6 + 800263d0: eac52503 lw a0,-340(a0) # 801cc278 <_ZL6hackm4> + 800263d4: fff54793 not a5,a0 + 800263d8: 00813083 ld ra,8(sp) + 800263dc: 0017f793 andi a5,a5,1 + 800263e0: 001a6717 auipc a4,0x1a6 + 800263e4: e4f70923 sb a5,-430(a4) # 801cc232 + 800263e8: 01010113 addi sp,sp,16 + 800263ec: c5dea06f j 80011048 <_Z9setmirrori> + +00000000800263f0 <_ZL8M12Powerv>: + 800263f0: fe010113 addi sp,sp,-32 + 800263f4: 00113c23 sd ra,24(sp) + 800263f8: 00813823 sd s0,16(sp) + 800263fc: 00913423 sd s1,8(sp) + 80026400: 001a6797 auipc a5,0x1a6 + 80026404: e5078793 addi a5,a5,-432 # 801cc250 + 80026408: 00100713 li a4,1 + 8002640c: 00079023 sh zero,0(a5) + 80026410: 000064b7 lui s1,0x6 + 80026414: 00004437 lui s0,0x4 + 80026418: 00e78123 sb a4,2(a5) + 8002641c: da5ff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 80026420: fff48593 addi a1,s1,-1 # 5fff <_entry_offset+0x5fff> + 80026424: 10040513 addi a0,s0,256 # 4100 <_entry_offset+0x4100> + 80026428: fffff617 auipc a2,0xfffff + 8002642c: f5c60613 addi a2,a2,-164 # 80025384 <_ZL8M12Writejh> + 80026430: 6f80d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80026434: 10040513 addi a0,s0,256 + 80026438: 01013403 ld s0,16(sp) + 8002643c: 01813083 ld ra,24(sp) + 80026440: fff48593 addi a1,s1,-1 + 80026444: 00813483 ld s1,8(sp) + 80026448: fffff617 auipc a2,0xfffff + 8002644c: f5c60613 addi a2,a2,-164 # 800253a4 <_ZL7M12Readj> + 80026450: 02010113 addi sp,sp,32 + 80026454: 5c80d06f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080026458 <_ZL8M37Powerv>: + 80026458: ff010113 addi sp,sp,-16 + 8002645c: 00113423 sd ra,8(sp) + 80026460: 001a6797 auipc a5,0x1a6 + 80026464: de078823 sb zero,-528(a5) # 801cc250 + 80026468: d59ff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 8002646c: 00813083 ld ra,8(sp) + 80026470: 000085b7 lui a1,0x8 + 80026474: 00001617 auipc a2,0x1 + 80026478: 89060613 addi a2,a2,-1904 # 80026d04 <_ZL8M37Writejh> + 8002647c: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80026480: 00006537 lui a0,0x6 + 80026484: 01010113 addi sp,sp,16 + 80026488: 6a00d06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002648c <_ZL8M44Powerv>: + 8002648c: ff010113 addi sp,sp,-16 + 80026490: 00113423 sd ra,8(sp) + 80026494: 001a6797 auipc a5,0x1a6 + 80026498: da078e23 sb zero,-580(a5) # 801cc250 + 8002649c: d25ff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 800264a0: 00813083 ld ra,8(sp) + 800264a4: 0000c5b7 lui a1,0xc + 800264a8: 00001617 auipc a2,0x1 + 800264ac: 89c60613 addi a2,a2,-1892 # 80026d44 <_ZL8M44Writejh> + 800264b0: fff58593 addi a1,a1,-1 # bfff <_entry_offset+0xbfff> + 800264b4: 0000a537 lui a0,0xa + 800264b8: 01010113 addi sp,sp,16 + 800264bc: 66c0d06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +00000000800264c0 <_ZL8M45Powerv>: + 800264c0: ff010113 addi sp,sp,-16 + 800264c4: 00113423 sd ra,8(sp) + 800264c8: cf9ff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 800264cc: 001a6797 auipc a5,0x1a6 + 800264d0: d8478793 addi a5,a5,-636 # 801cc250 + 800264d4: 000085b7 lui a1,0x8 + 800264d8: 00001617 auipc a2,0x1 + 800264dc: 8b460613 addi a2,a2,-1868 # 80026d8c <_ZL8M45Writejh> + 800264e0: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 800264e4: 00005537 lui a0,0x5 + 800264e8: 0007a023 sw zero,0(a5) + 800264ec: 00079223 sh zero,4(a5) + 800264f0: 6380d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800264f4: 00813083 ld ra,8(sp) + 800264f8: 000065b7 lui a1,0x6 + 800264fc: fffff617 auipc a2,0xfffff + 80026500: eb460613 addi a2,a2,-332 # 800253b0 <_ZL7M45Readj> + 80026504: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 80026508: 00005537 lui a0,0x5 + 8002650c: 01010113 addi sp,sp,16 + 80026510: 50c0d06f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080026514 <_ZL8M47Powerv>: + 80026514: ff010113 addi sp,sp,-16 + 80026518: 00113423 sd ra,8(sp) + 8002651c: 001a6797 auipc a5,0x1a6 + 80026520: d2078a23 sb zero,-716(a5) # 801cc250 + 80026524: c9dff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 80026528: 00813083 ld ra,8(sp) + 8002652c: 000085b7 lui a1,0x8 + 80026530: 00001617 auipc a2,0x1 + 80026534: 8e060613 addi a2,a2,-1824 # 80026e10 <_ZL8M47Writejh> + 80026538: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 8002653c: 00006537 lui a0,0x6 + 80026540: 01010113 addi sp,sp,16 + 80026544: 5e40d06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080026548 <_ZL9M114Powerv>: + 80026548: ff010113 addi sp,sp,-16 + 8002654c: 00113423 sd ra,8(sp) + 80026550: c71ff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 80026554: 000105b7 lui a1,0x10 + 80026558: 00000617 auipc a2,0x0 + 8002655c: 5d060613 addi a2,a2,1488 # 80026b28 <_ZL9M114Writejh> + 80026560: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80026564: 00008537 lui a0,0x8 + 80026568: 5c00d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002656c: 00813083 ld ra,8(sp) + 80026570: 000085b7 lui a1,0x8 + 80026574: 00000617 auipc a2,0x0 + 80026578: 9c860613 addi a2,a2,-1592 # 80025f3c <_ZL11M114ExWritejh> + 8002657c: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80026580: 00005537 lui a0,0x5 + 80026584: 01010113 addi sp,sp,16 + 80026588: 5a00d06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002658c <_ZL9M115Powerv>: + 8002658c: ff010113 addi sp,sp,-16 + 80026590: 00113423 sd ra,8(sp) + 80026594: c2dff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 80026598: 000085b7 lui a1,0x8 + 8002659c: 00004537 lui a0,0x4 + 800265a0: 00000617 auipc a2,0x0 + 800265a4: 9bc60613 addi a2,a2,-1604 # 80025f5c <_ZL9M115Writejh> + 800265a8: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 800265ac: 10050513 addi a0,a0,256 # 4100 <_entry_offset+0x4100> + 800265b0: 5780d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800265b4: 00813083 ld ra,8(sp) + 800265b8: 000065b7 lui a1,0x6 + 800265bc: 00000617 auipc a2,0x0 + 800265c0: 8a460613 addi a2,a2,-1884 # 80025e60 <_ZL8M115Readj> + 800265c4: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 800265c8: 00005537 lui a0,0x5 + 800265cc: 01010113 addi sp,sp,16 + 800265d0: 44c0d06f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +00000000800265d4 <_ZL9M134Powerv>: + 800265d4: ff010113 addi sp,sp,-16 + 800265d8: 00113423 sd ra,8(sp) + 800265dc: 001a6797 auipc a5,0x1a6 + 800265e0: c6078a23 sb zero,-908(a5) # 801cc250 + 800265e4: bddff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 800265e8: 00813083 ld ra,8(sp) + 800265ec: 000065b7 lui a1,0x6 + 800265f0: 00158593 addi a1,a1,1 # 6001 <_entry_offset+0x6001> + 800265f4: 00001617 auipc a2,0x1 + 800265f8: 91060613 addi a2,a2,-1776 # 80026f04 <_ZL9M134Writejh> + 800265fc: 00058513 mv a0,a1 + 80026600: 01010113 addi sp,sp,16 + 80026604: 5240d06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080026608 <_ZL9M165Powerv>: + 80026608: ffd00793 li a5,-3 + 8002660c: 001a6717 auipc a4,0x1a6 + 80026610: c4f70223 sb a5,-956(a4) # 801cc250 + 80026614: badff06f j 800261c0 <_Z12GenMMC3Powerv> + +0000000080026618 <_ZL9M195Powerv>: + 80026618: ff010113 addi sp,sp,-16 + 8002661c: 00113423 sd ra,8(sp) + 80026620: 00813023 sd s0,0(sp) + 80026624: b9dff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 80026628: 00200613 li a2,2 + 8002662c: 000055b7 lui a1,0x5 + 80026630: 01000513 li a0,16 + 80026634: 9a8ea0ef jal ra,800107dc <_Z8setprg4rijj> + 80026638: 00006437 lui s0,0x6 + 8002663c: fff40593 addi a1,s0,-1 # 5fff <_entry_offset+0x5fff> + 80026640: fffea617 auipc a2,0xfffea + 80026644: 04c60613 addi a2,a2,76 # 8001068c <_Z6CartBWjh> + 80026648: 00005537 lui a0,0x5 + 8002664c: 4dc0d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80026650: fff40593 addi a1,s0,-1 + 80026654: 00013403 ld s0,0(sp) + 80026658: 00813083 ld ra,8(sp) + 8002665c: fffea617 auipc a2,0xfffea + 80026660: 00460613 addi a2,a2,4 # 80010660 <_Z6CartBRj> + 80026664: 00005537 lui a0,0x5 + 80026668: 01010113 addi sp,sp,16 + 8002666c: 3b00d06f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080026670 <_ZL14Mapper196Powerv>: + 80026670: ff010113 addi sp,sp,-16 + 80026674: 00113423 sd ra,8(sp) + 80026678: b49ff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 8002667c: 000075b7 lui a1,0x7 + 80026680: 00000617 auipc a2,0x0 + 80026684: 93460613 addi a2,a2,-1740 # 80025fb4 <_ZL16Mapper196WriteLojh> + 80026688: fff58593 addi a1,a1,-1 # 6fff <_entry_offset+0x6fff> + 8002668c: 00006537 lui a0,0x6 + 80026690: 001a6797 auipc a5,0x1a6 + 80026694: bc079023 sh zero,-1088(a5) # 801cc250 + 80026698: 4900d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002669c: 00813083 ld ra,8(sp) + 800266a0: 000105b7 lui a1,0x10 + 800266a4: 00000617 auipc a2,0x0 + 800266a8: 5a060613 addi a2,a2,1440 # 80026c44 <_ZL14Mapper196Writejh> + 800266ac: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 800266b0: 00008537 lui a0,0x8 + 800266b4: 01010113 addi sp,sp,16 + 800266b8: 4700d06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +00000000800266bc <_ZL9M205Powerv>: + 800266bc: ff010113 addi sp,sp,-16 + 800266c0: 00113423 sd ra,8(sp) + 800266c4: afdff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 800266c8: 000075b7 lui a1,0x7 + 800266cc: 00001617 auipc a2,0x1 + 800266d0: 8bc60613 addi a2,a2,-1860 # 80026f88 <_ZL10M205Write0jh> + 800266d4: fff58593 addi a1,a1,-1 # 6fff <_entry_offset+0x6fff> + 800266d8: 00006537 lui a0,0x6 + 800266dc: 44c0d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800266e0: 00813083 ld ra,8(sp) + 800266e4: 000085b7 lui a1,0x8 + 800266e8: 00001617 auipc a2,0x1 + 800266ec: 85460613 addi a2,a2,-1964 # 80026f3c <_ZL10M205Write1jh> + 800266f0: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 800266f4: 00007537 lui a0,0x7 + 800266f8: 01010113 addi sp,sp,16 + 800266fc: 42c0d06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080026700 <_ZL9M245Powerv>: + 80026700: 001a6797 auipc a5,0x1a6 + 80026704: b4078823 sb zero,-1200(a5) # 801cc250 + 80026708: ab9ff06f j 800261c0 <_Z12GenMMC3Powerv> + +000000008002670c <_ZL9M249Powerv>: + 8002670c: ff010113 addi sp,sp,-16 + 80026710: 00113423 sd ra,8(sp) + 80026714: 001a6797 auipc a5,0x1a6 + 80026718: b2078e23 sb zero,-1220(a5) # 801cc250 + 8002671c: aa5ff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 80026720: 00813083 ld ra,8(sp) + 80026724: 00001617 auipc a2,0x1 + 80026728: 8bc60613 addi a2,a2,-1860 # 80026fe0 <_ZL9M249Writejh> + 8002672c: 000055b7 lui a1,0x5 + 80026730: 00005537 lui a0,0x5 + 80026734: 01010113 addi sp,sp,16 + 80026738: 3f00d06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002673c <_ZL10M250_Powerv>: + 8002673c: ff010113 addi sp,sp,-16 + 80026740: 00113423 sd ra,8(sp) + 80026744: a7dff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 80026748: 0000c5b7 lui a1,0xc + 8002674c: 00000617 auipc a2,0x0 + 80026750: 53860613 addi a2,a2,1336 # 80026c84 <_ZL9M250Writejh> + 80026754: fff58593 addi a1,a1,-1 # bfff <_entry_offset+0xbfff> + 80026758: 00008537 lui a0,0x8 + 8002675c: 3cc0d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80026760: 00813083 ld ra,8(sp) + 80026764: 000105b7 lui a1,0x10 + 80026768: fffff617 auipc a2,0xfffff + 8002676c: 3a460613 addi a2,a2,932 # 80025b0c <_ZL12M250IRQWritejh> + 80026770: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80026774: 0000c537 lui a0,0xc + 80026778: 01010113 addi sp,sp,16 + 8002677c: 3ac0d06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080026780 <_ZL10M254_Powerv>: + 80026780: ff010113 addi sp,sp,-16 + 80026784: 00113423 sd ra,8(sp) + 80026788: a39ff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 8002678c: 0000c5b7 lui a1,0xc + 80026790: 00000617 auipc a2,0x0 + 80026794: 51460613 addi a2,a2,1300 # 80026ca4 <_ZL9M254Writejh> + 80026798: fff58593 addi a1,a1,-1 # bfff <_entry_offset+0xbfff> + 8002679c: 00008537 lui a0,0x8 + 800267a0: 3880d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800267a4: 00813083 ld ra,8(sp) + 800267a8: 000085b7 lui a1,0x8 + 800267ac: fffff617 auipc a2,0xfffff + 800267b0: 2ac60613 addi a2,a2,684 # 80025a58 <_ZL9MR254WRAMj> + 800267b4: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 800267b8: 00006537 lui a0,0x6 + 800267bc: 01010113 addi sp,sp,16 + 800267c0: 25c0d06f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +00000000800267c4 <_ZL8M12Resetv>: + 800267c4: 001a6797 auipc a5,0x1a6 + 800267c8: a8c78793 addi a5,a5,-1396 # 801cc250 + 800267cc: 0027c703 lbu a4,2(a5) + 800267d0: 00079023 sh zero,0(a5) + 800267d4: 00174713 xori a4,a4,1 + 800267d8: 00e78123 sb a4,2(a5) + 800267dc: 98dff06f j 80026168 <_Z12MMC3RegResetv> + +00000000800267e0 <_ZL8M37Resetv>: + 800267e0: 001a6797 auipc a5,0x1a6 + 800267e4: a6078823 sb zero,-1424(a5) # 801cc250 + 800267e8: 981ff06f j 80026168 <_Z12MMC3RegResetv> + +00000000800267ec <_ZL8M49Resetv>: + 800267ec: ff5ff06f j 800267e0 <_ZL8M37Resetv> + +00000000800267f0 <_ZL9M114Resetv>: + 800267f0: ff1ff06f j 800267e0 <_ZL8M37Resetv> + +00000000800267f4 <_ZL9M134Resetv>: + 800267f4: fedff06f j 800267e0 <_ZL8M37Resetv> + +00000000800267f8 <_ZL8M45Resetv>: + 800267f8: 001a6717 auipc a4,0x1a6 + 800267fc: a5870713 addi a4,a4,-1448 # 801cc250 + 80026800: 00574783 lbu a5,5(a4) + 80026804: 00072023 sw zero,0(a4) + 80026808: 00070223 sb zero,4(a4) + 8002680c: 0017879b addiw a5,a5,1 + 80026810: 0077f793 andi a5,a5,7 + 80026814: 00f702a3 sb a5,5(a4) + 80026818: 951ff06f j 80026168 <_Z12MMC3RegResetv> + +000000008002681c <_ZL8M49Powerv>: + 8002681c: ff010113 addi sp,sp,-16 + 80026820: 00113423 sd ra,8(sp) + 80026824: 00813023 sd s0,0(sp) + 80026828: 001a6797 auipc a5,0x1a6 + 8002682c: a2078423 sb zero,-1496(a5) # 801cc250 + 80026830: 00008437 lui s0,0x8 + 80026834: 935ff0ef jal ra,80026168 <_Z12MMC3RegResetv> + 80026838: 989ff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 8002683c: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 80026840: 00000617 auipc a2,0x0 + 80026844: 60c60613 addi a2,a2,1548 # 80026e4c <_ZL8M49Writejh> + 80026848: 00006537 lui a0,0x6 + 8002684c: 2dc0d0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80026850: fff40593 addi a1,s0,-1 + 80026854: 00013403 ld s0,0(sp) + 80026858: 00813083 ld ra,8(sp) + 8002685c: 00000613 li a2,0 + 80026860: 00006537 lui a0,0x6 + 80026864: 01010113 addi sp,sp,16 + 80026868: 1b40d06f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +000000008002686c <_ZL8M52Resetv>: + 8002686c: 001a6797 auipc a5,0x1a6 + 80026870: 9e079223 sh zero,-1564(a5) # 801cc250 + 80026874: 8f5ff06f j 80026168 <_Z12MMC3RegResetv> + +0000000080026878 <_ZL8M52Powerv>: + 80026878: ff010113 addi sp,sp,-16 + 8002687c: 00113423 sd ra,8(sp) + 80026880: 001a6797 auipc a5,0x1a6 + 80026884: 9c079823 sh zero,-1584(a5) # 801cc250 + 80026888: 8e1ff0ef jal ra,80026168 <_Z12MMC3RegResetv> + 8002688c: 935ff0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 80026890: 00813083 ld ra,8(sp) + 80026894: 000085b7 lui a1,0x8 + 80026898: 00000617 auipc a2,0x0 + 8002689c: 5fc60613 addi a2,a2,1532 # 80026e94 <_ZL8M52Writejh> + 800268a0: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 800268a4: 00006537 lui a0,0x6 + 800268a8: 01010113 addi sp,sp,16 + 800268ac: 27c0d06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +00000000800268b0 <_ZL9M205Resetv>: + 800268b0: 001a6797 auipc a5,0x1a6 + 800268b4: 9a078793 addi a5,a5,-1632 # 801cc250 + 800268b8: 00078123 sb zero,2(a5) + 800268bc: 00078023 sb zero,0(a5) + 800268c0: 8a9ff06f j 80026168 <_Z12MMC3RegResetv> + +00000000800268c4 <_Z13MMC3_CMDWritejh>: + 800268c4: 0000e7b7 lui a5,0xe + 800268c8: fd010113 addi sp,sp,-48 + 800268cc: 00178793 addi a5,a5,1 # e001 <_entry_offset+0xe001> + 800268d0: 02813023 sd s0,32(sp) + 800268d4: 00f57533 and a0,a0,a5 + 800268d8: 02113423 sd ra,40(sp) + 800268dc: 00913c23 sd s1,24(sp) + 800268e0: 01213823 sd s2,16(sp) + 800268e4: 01313423 sd s3,8(sp) + 800268e8: 0000a7b7 lui a5,0xa + 800268ec: 00058413 mv s0,a1 + 800268f0: 0cf50863 beq a0,a5,800269c0 <_Z13MMC3_CMDWritejh+0xfc> + 800268f4: 04a7ee63 bltu a5,a0,80026950 <_Z13MMC3_CMDWritejh+0x8c> + 800268f8: 000087b7 lui a5,0x8 + 800268fc: 08f50063 beq a0,a5,8002697c <_Z13MMC3_CMDWritejh+0xb8> + 80026900: 00178793 addi a5,a5,1 # 8001 <_entry_offset+0x8001> + 80026904: 04f51e63 bne a0,a5,80026960 <_Z13MMC3_CMDWritejh+0x9c> + 80026908: 001a6717 auipc a4,0x1a6 + 8002690c: 95474703 lbu a4,-1708(a4) # 801cc25c + 80026910: 00777793 andi a5,a4,7 + 80026914: 0001f617 auipc a2,0x1f + 80026918: 41c60613 addi a2,a2,1052 # 80045d30 <_ZL8prg_perm+0x20> + 8002691c: 00279793 slli a5,a5,0x2 + 80026920: 00c787b3 add a5,a5,a2 + 80026924: 0007a783 lw a5,0(a5) + 80026928: 00777593 andi a1,a4,7 + 8002692c: 001a6697 auipc a3,0x1a6 + 80026930: 91c68693 addi a3,a3,-1764 # 801cc248 + 80026934: 00571493 slli s1,a4,0x5 + 80026938: 00b686b3 add a3,a3,a1 + 8002693c: 00001537 lui a0,0x1 + 80026940: 00c787b3 add a5,a5,a2 + 80026944: 00a4f4b3 and s1,s1,a0 + 80026948: 00868023 sb s0,0(a3) + 8002694c: 00078067 jr a5 + 80026950: 00178793 addi a5,a5,1 + 80026954: 00f51663 bne a0,a5,80026960 <_Z13MMC3_CMDWritejh+0x9c> + 80026958: 001a6797 auipc a5,0x1a6 + 8002695c: 8cb78da3 sb a1,-1829(a5) # 801cc233 + 80026960: 02813083 ld ra,40(sp) + 80026964: 02013403 ld s0,32(sp) + 80026968: 01813483 ld s1,24(sp) + 8002696c: 01013903 ld s2,16(sp) + 80026970: 00813983 ld s3,8(sp) + 80026974: 03010113 addi sp,sp,48 + 80026978: 00008067 ret + 8002697c: 001a6497 auipc s1,0x1a6 + 80026980: 8e048493 addi s1,s1,-1824 # 801cc25c + 80026984: 0004c783 lbu a5,0(s1) + 80026988: 00f5c7b3 xor a5,a1,a5 + 8002698c: 0407f713 andi a4,a5,64 + 80026990: 04071e63 bnez a4,800269ec <_Z13MMC3_CMDWritejh+0x128> + 80026994: 0187979b slliw a5,a5,0x18 + 80026998: 4187d79b sraiw a5,a5,0x18 + 8002699c: 0607c263 bltz a5,80026a00 <_Z13MMC3_CMDWritejh+0x13c> + 800269a0: 00848023 sb s0,0(s1) + 800269a4: 02813083 ld ra,40(sp) + 800269a8: 02013403 ld s0,32(sp) + 800269ac: 01813483 ld s1,24(sp) + 800269b0: 01013903 ld s2,16(sp) + 800269b4: 00813983 ld s3,8(sp) + 800269b8: 03010113 addi sp,sp,48 + 800269bc: 00008067 ret + 800269c0: 001a6317 auipc t1,0x1a6 + 800269c4: 8d033303 ld t1,-1840(t1) # 801cc290 + 800269c8: f8030ce3 beqz t1,80026960 <_Z13MMC3_CMDWritejh+0x9c> + 800269cc: 02013403 ld s0,32(sp) + 800269d0: 02813083 ld ra,40(sp) + 800269d4: 01813483 ld s1,24(sp) + 800269d8: 01013903 ld s2,16(sp) + 800269dc: 00813983 ld s3,8(sp) + 800269e0: 00058513 mv a0,a1 + 800269e4: 03010113 addi sp,sp,48 + 800269e8: 00030067 jr t1 + 800269ec: 00058513 mv a0,a1 + 800269f0: c7cff0ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 800269f4: 0004c783 lbu a5,0(s1) + 800269f8: 00f447b3 xor a5,s0,a5 + 800269fc: f99ff06f j 80026994 <_Z13MMC3_CMDWritejh+0xd0> + 80026a00: 00040513 mv a0,s0 + 80026a04: e24ff0ef jal ra,80026028 <_Z10FixMMC3CHRi> + 80026a08: 00848023 sb s0,0(s1) + 80026a0c: f99ff06f j 800269a4 <_Z13MMC3_CMDWritejh+0xe0> + 80026a10: 001a6997 auipc s3,0x1a6 + 80026a14: 87098993 addi s3,s3,-1936 # 801cc280 + 80026a18: 00001937 lui s2,0x1 + 80026a1c: 0009b783 ld a5,0(s3) + 80026a20: 80090513 addi a0,s2,-2048 # 800 <_entry_offset+0x800> + 80026a24: 0fe47593 andi a1,s0,254 + 80026a28: 00a4c533 xor a0,s1,a0 + 80026a2c: 000780e7 jalr a5 + 80026a30: 0009b303 ld t1,0(s3) + 80026a34: c0090513 addi a0,s2,-1024 + 80026a38: 00146593 ori a1,s0,1 + 80026a3c: 00a4c533 xor a0,s1,a0 + 80026a40: 02013403 ld s0,32(sp) + 80026a44: 02813083 ld ra,40(sp) + 80026a48: 01813483 ld s1,24(sp) + 80026a4c: 01013903 ld s2,16(sp) + 80026a50: 00813983 ld s3,8(sp) + 80026a54: 03010113 addi sp,sp,48 + 80026a58: 00030067 jr t1 + 80026a5c: 00040593 mv a1,s0 + 80026a60: 0000a537 lui a0,0xa + 80026a64: 001a6317 auipc t1,0x1a6 + 80026a68: 83433303 ld t1,-1996(t1) # 801cc298 + 80026a6c: fd5ff06f j 80026a40 <_Z13MMC3_CMDWritejh+0x17c> + 80026a70: 04077713 andi a4,a4,64 + 80026a74: 001a6317 auipc t1,0x1a6 + 80026a78: 82433303 ld t1,-2012(t1) # 801cc298 + 80026a7c: 00040593 mv a1,s0 + 80026a80: 0000c537 lui a0,0xc + 80026a84: fa071ee3 bnez a4,80026a40 <_Z13MMC3_CMDWritejh+0x17c> + 80026a88: 00008537 lui a0,0x8 + 80026a8c: fb5ff06f j 80026a40 <_Z13MMC3_CMDWritejh+0x17c> + 80026a90: 00002537 lui a0,0x2 + 80026a94: c0050513 addi a0,a0,-1024 # 1c00 <_entry_offset+0x1c00> + 80026a98: 00040593 mv a1,s0 + 80026a9c: 00a4c533 xor a0,s1,a0 + 80026aa0: 001a5317 auipc t1,0x1a5 + 80026aa4: 7e033303 ld t1,2016(t1) # 801cc280 + 80026aa8: f99ff06f j 80026a40 <_Z13MMC3_CMDWritejh+0x17c> + 80026aac: 00002537 lui a0,0x2 + 80026ab0: 80050513 addi a0,a0,-2048 # 1800 <_entry_offset+0x1800> + 80026ab4: 00040593 mv a1,s0 + 80026ab8: 00a4c533 xor a0,s1,a0 + 80026abc: 001a5317 auipc t1,0x1a5 + 80026ac0: 7c433303 ld t1,1988(t1) # 801cc280 + 80026ac4: f7dff06f j 80026a40 <_Z13MMC3_CMDWritejh+0x17c> + 80026ac8: 00001537 lui a0,0x1 + 80026acc: 40050513 addi a0,a0,1024 # 1400 <_entry_offset+0x1400> + 80026ad0: 00040593 mv a1,s0 + 80026ad4: 00a4c533 xor a0,s1,a0 + 80026ad8: 001a5317 auipc t1,0x1a5 + 80026adc: 7a833303 ld t1,1960(t1) # 801cc280 + 80026ae0: f61ff06f j 80026a40 <_Z13MMC3_CMDWritejh+0x17c> + 80026ae4: 00001537 lui a0,0x1 + 80026ae8: 00a4c533 xor a0,s1,a0 + 80026aec: 00040593 mv a1,s0 + 80026af0: 0005051b sext.w a0,a0 + 80026af4: 001a5317 auipc t1,0x1a5 + 80026af8: 78c33303 ld t1,1932(t1) # 801cc280 + 80026afc: f45ff06f j 80026a40 <_Z13MMC3_CMDWritejh+0x17c> + 80026b00: 001a5917 auipc s2,0x1a5 + 80026b04: 78090913 addi s2,s2,1920 # 801cc280 + 80026b08: 00093783 ld a5,0(s2) + 80026b0c: 0fe47593 andi a1,s0,254 + 80026b10: 00048513 mv a0,s1 + 80026b14: 000780e7 jalr a5 + 80026b18: 00093303 ld t1,0(s2) + 80026b1c: 00146593 ori a1,s0,1 + 80026b20: 4004e513 ori a0,s1,1024 + 80026b24: f1dff06f j 80026a40 <_Z13MMC3_CMDWritejh+0x17c> + +0000000080026b28 <_ZL9M114Writejh>: + 80026b28: 0000e637 lui a2,0xe + 80026b2c: ff010113 addi sp,sp,-16 + 80026b30: 00160693 addi a3,a2,1 # e001 <_entry_offset+0xe001> + 80026b34: 00113423 sd ra,8(sp) + 80026b38: 00d57533 and a0,a0,a3 + 80026b3c: 0000c7b7 lui a5,0xc + 80026b40: 08f50463 beq a0,a5,80026bc8 <_ZL9M114Writejh+0xa0> + 80026b44: 04a7e263 bltu a5,a0,80026b88 <_ZL9M114Writejh+0x60> + 80026b48: 0000a7b7 lui a5,0xa + 80026b4c: 0af50063 beq a0,a5,80026bec <_ZL9M114Writejh+0xc4> + 80026b50: 00178793 addi a5,a5,1 # a001 <_entry_offset+0xa001> + 80026b54: 00f51c63 bne a0,a5,80026b6c <_ZL9M114Writejh+0x44> + 80026b58: 001a5797 auipc a5,0x1a5 + 80026b5c: 70b780a3 sb a1,1793(a5) # 801cc259 + 80026b60: 00813083 ld ra,8(sp) + 80026b64: 01010113 addi sp,sp,16 + 80026b68: 00008067 ret + 80026b6c: 000087b7 lui a5,0x8 + 80026b70: 00178793 addi a5,a5,1 # 8001 <_entry_offset+0x8001> + 80026b74: fef516e3 bne a0,a5,80026b60 <_ZL9M114Writejh+0x38> + 80026b78: 00813083 ld ra,8(sp) + 80026b7c: 0000a537 lui a0,0xa + 80026b80: 01010113 addi sp,sp,16 + 80026b84: d41ff06f j 800268c4 <_Z13MMC3_CMDWritejh> + 80026b88: 0ac50063 beq a0,a2,80026c28 <_ZL9M114Writejh+0x100> + 80026b8c: 00d51e63 bne a0,a3,80026ba8 <_ZL9M114Writejh+0x80> + 80026b90: 00813083 ld ra,8(sp) + 80026b94: 00100793 li a5,1 + 80026b98: 001a5717 auipc a4,0x1a5 + 80026b9c: 6cf701a3 sb a5,1731(a4) # 801cc25b + 80026ba0: 01010113 addi sp,sp,16 + 80026ba4: 00008067 ret + 80026ba8: 00178793 addi a5,a5,1 + 80026bac: faf51ae3 bne a0,a5,80026b60 <_ZL9M114Writejh+0x38> + 80026bb0: 00813083 ld ra,8(sp) + 80026bb4: 00100793 li a5,1 + 80026bb8: 001a5717 auipc a4,0x1a5 + 80026bbc: 6af70123 sb a5,1698(a4) # 801cc25a + 80026bc0: 01010113 addi sp,sp,16 + 80026bc4: 00008067 ret + 80026bc8: 001a5797 auipc a5,0x1a5 + 80026bcc: 6a47c783 lbu a5,1700(a5) # 801cc26c <_ZL5cmdin> + 80026bd0: f80788e3 beqz a5,80026b60 <_ZL9M114Writejh+0x38> + 80026bd4: 00008537 lui a0,0x8 + 80026bd8: 00150513 addi a0,a0,1 # 8001 <_entry_offset+0x8001> + 80026bdc: ce9ff0ef jal ra,800268c4 <_Z13MMC3_CMDWritejh> + 80026be0: 001a5797 auipc a5,0x1a5 + 80026be4: 68078623 sb zero,1676(a5) # 801cc26c <_ZL5cmdin> + 80026be8: f79ff06f j 80026b60 <_ZL9M114Writejh+0x38> + 80026bec: 0075f693 andi a3,a1,7 + 80026bf0: 00026797 auipc a5,0x26 + 80026bf4: 37078793 addi a5,a5,880 # 8004cf60 + 80026bf8: 00d787b3 add a5,a5,a3 + 80026bfc: 0007c783 lbu a5,0(a5) + 80026c00: fc05f593 andi a1,a1,-64 + 80026c04: 00008537 lui a0,0x8 + 80026c08: 00f5e5b3 or a1,a1,a5 + 80026c0c: cb9ff0ef jal ra,800268c4 <_Z13MMC3_CMDWritejh> + 80026c10: 00813083 ld ra,8(sp) + 80026c14: 00100793 li a5,1 + 80026c18: 001a5717 auipc a4,0x1a5 + 80026c1c: 64f70a23 sb a5,1620(a4) # 801cc26c <_ZL5cmdin> + 80026c20: 01010113 addi sp,sp,16 + 80026c24: 00008067 ret + 80026c28: 00100513 li a0,1 + 80026c2c: 924da0ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 80026c30: 00813083 ld ra,8(sp) + 80026c34: 001a5797 auipc a5,0x1a5 + 80026c38: 620783a3 sb zero,1575(a5) # 801cc25b + 80026c3c: 01010113 addi sp,sp,16 + 80026c40: 00008067 ret + +0000000080026c44 <_ZL14Mapper196Writejh>: + 80026c44: 00050793 mv a5,a0 + 80026c48: 0037d71b srliw a4,a5,0x3 + 80026c4c: 0025551b srliw a0,a0,0x2 + 80026c50: 00e56533 or a0,a0,a4 + 80026c54: 00010737 lui a4,0x10 + 80026c58: ffe70713 addi a4,a4,-2 # fffe <_entry_offset+0xfffe> + 80026c5c: 00157513 andi a0,a0,1 + 80026c60: 00e7f733 and a4,a5,a4 + 80026c64: 0000c6b7 lui a3,0xc + 80026c68: 00e56533 or a0,a0,a4 + 80026c6c: 00d7e463 bltu a5,a3,80026c74 <_ZL14Mapper196Writejh+0x30> + 80026c70: e25fe06f j 80025a94 <_Z13MMC3_IRQWritejh> + 80026c74: 0017d79b srliw a5,a5,0x1 + 80026c78: 0017f793 andi a5,a5,1 + 80026c7c: 00a7e533 or a0,a5,a0 + 80026c80: c45ff06f j 800268c4 <_Z13MMC3_CMDWritejh> + +0000000080026c84 <_ZL9M250Writejh>: + 80026c84: 00a5579b srliw a5,a0,0xa + 80026c88: 0000e737 lui a4,0xe + 80026c8c: 00e57733 and a4,a0,a4 + 80026c90: 0017f793 andi a5,a5,1 + 80026c94: 00e7e7b3 or a5,a5,a4 + 80026c98: 0ff57593 andi a1,a0,255 + 80026c9c: 0007851b sext.w a0,a5 + 80026ca0: c25ff06f j 800268c4 <_Z13MMC3_CMDWritejh> + +0000000080026ca4 <_ZL9M254Writejh>: + 80026ca4: 000087b7 lui a5,0x8 + 80026ca8: 00f50e63 beq a0,a5,80026cc4 <_ZL9M254Writejh+0x20> + 80026cac: 0000a7b7 lui a5,0xa + 80026cb0: 00178793 addi a5,a5,1 # a001 <_entry_offset+0xa001> + 80026cb4: 00f51663 bne a0,a5,80026cc0 <_ZL9M254Writejh+0x1c> + 80026cb8: 001a5797 auipc a5,0x1a5 + 80026cbc: 58b78ca3 sb a1,1433(a5) # 801cc251 + 80026cc0: c05ff06f j 800268c4 <_Z13MMC3_CMDWritejh> + 80026cc4: fff00793 li a5,-1 + 80026cc8: 001a5717 auipc a4,0x1a5 + 80026ccc: 58f70423 sb a5,1416(a4) # 801cc250 + 80026cd0: bf5ff06f j 800268c4 <_Z13MMC3_CMDWritejh> + +0000000080026cd4 <_Z14GenMMC3Restorei>: + 80026cd4: ff010113 addi sp,sp,-16 + 80026cd8: 00813023 sd s0,0(sp) + 80026cdc: 001a5417 auipc s0,0x1a5 + 80026ce0: 58040413 addi s0,s0,1408 # 801cc25c + 80026ce4: 00044503 lbu a0,0(s0) + 80026ce8: 00113423 sd ra,8(sp) + 80026cec: 980ff0ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80026cf0: 00044503 lbu a0,0(s0) + 80026cf4: 00013403 ld s0,0(sp) + 80026cf8: 00813083 ld ra,8(sp) + 80026cfc: 01010113 addi sp,sp,16 + 80026d00: b28ff06f j 80026028 <_Z10FixMMC3CHRi> + +0000000080026d04 <_ZL8M37Writejh>: + 80026d04: ff010113 addi sp,sp,-16 + 80026d08: 00813023 sd s0,0(sp) + 80026d0c: 001a5417 auipc s0,0x1a5 + 80026d10: 55040413 addi s0,s0,1360 # 801cc25c + 80026d14: 00044503 lbu a0,0(s0) + 80026d18: 0015d593 srli a1,a1,0x1 + 80026d1c: 0035f593 andi a1,a1,3 + 80026d20: 00113423 sd ra,8(sp) + 80026d24: 001a5797 auipc a5,0x1a5 + 80026d28: 52b78623 sb a1,1324(a5) # 801cc250 + 80026d2c: 940ff0ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80026d30: 00044503 lbu a0,0(s0) + 80026d34: 00013403 ld s0,0(sp) + 80026d38: 00813083 ld ra,8(sp) + 80026d3c: 01010113 addi sp,sp,16 + 80026d40: ae8ff06f j 80026028 <_Z10FixMMC3CHRi> + +0000000080026d44 <_ZL8M44Writejh>: + 80026d44: 00157713 andi a4,a0,1 + 80026d48: 04070063 beqz a4,80026d88 <_ZL8M44Writejh+0x44> + 80026d4c: ff010113 addi sp,sp,-16 + 80026d50: 00813023 sd s0,0(sp) + 80026d54: 001a5417 auipc s0,0x1a5 + 80026d58: 50840413 addi s0,s0,1288 # 801cc25c + 80026d5c: 00044503 lbu a0,0(s0) + 80026d60: 0075f593 andi a1,a1,7 + 80026d64: 00113423 sd ra,8(sp) + 80026d68: 001a5797 auipc a5,0x1a5 + 80026d6c: 4eb78423 sb a1,1256(a5) # 801cc250 + 80026d70: 8fcff0ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80026d74: 00044503 lbu a0,0(s0) + 80026d78: 00013403 ld s0,0(sp) + 80026d7c: 00813083 ld ra,8(sp) + 80026d80: 01010113 addi sp,sp,16 + 80026d84: aa4ff06f j 80026028 <_Z10FixMMC3CHRi> + 80026d88: b3dff06f j 800268c4 <_Z13MMC3_CMDWritejh> + +0000000080026d8c <_ZL8M45Writejh>: + 80026d8c: 001a5717 auipc a4,0x1a5 + 80026d90: 4c470713 addi a4,a4,1220 # 801cc250 + 80026d94: 00374783 lbu a5,3(a4) + 80026d98: 0407f793 andi a5,a5,64 + 80026d9c: 02078463 beqz a5,80026dc4 <_ZL8M45Writejh+0x38> + 80026da0: ffffa7b7 lui a5,0xffffa + 80026da4: 00a7853b addw a0,a5,a0 + 80026da8: 02051513 slli a0,a0,0x20 + 80026dac: 001a5797 auipc a5,0x1a5 + 80026db0: 4b47b783 ld a5,1204(a5) # 801cc260 + 80026db4: 02055513 srli a0,a0,0x20 + 80026db8: 00a78533 add a0,a5,a0 + 80026dbc: 00b50023 sb a1,0(a0) # 8000 <_entry_offset+0x8000> + 80026dc0: 00008067 ret + 80026dc4: ff010113 addi sp,sp,-16 + 80026dc8: 00813023 sd s0,0(sp) + 80026dcc: 00113423 sd ra,8(sp) + 80026dd0: 00474783 lbu a5,4(a4) + 80026dd4: 001a5417 auipc s0,0x1a5 + 80026dd8: 48840413 addi s0,s0,1160 # 801cc25c + 80026ddc: 00044503 lbu a0,0(s0) + 80026de0: 00f707b3 add a5,a4,a5 + 80026de4: 00b78023 sb a1,0(a5) + 80026de8: 00474783 lbu a5,4(a4) + 80026dec: 0017879b addiw a5,a5,1 + 80026df0: 0037f793 andi a5,a5,3 + 80026df4: 00f70223 sb a5,4(a4) + 80026df8: 874ff0ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80026dfc: 00044503 lbu a0,0(s0) + 80026e00: 00013403 ld s0,0(sp) + 80026e04: 00813083 ld ra,8(sp) + 80026e08: 01010113 addi sp,sp,16 + 80026e0c: a1cff06f j 80026028 <_Z10FixMMC3CHRi> + +0000000080026e10 <_ZL8M47Writejh>: + 80026e10: ff010113 addi sp,sp,-16 + 80026e14: 00813023 sd s0,0(sp) + 80026e18: 001a5417 auipc s0,0x1a5 + 80026e1c: 44440413 addi s0,s0,1092 # 801cc25c + 80026e20: 00044503 lbu a0,0(s0) + 80026e24: 0015f593 andi a1,a1,1 + 80026e28: 00113423 sd ra,8(sp) + 80026e2c: 001a5797 auipc a5,0x1a5 + 80026e30: 42b78223 sb a1,1060(a5) # 801cc250 + 80026e34: 838ff0ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80026e38: 00044503 lbu a0,0(s0) + 80026e3c: 00013403 ld s0,0(sp) + 80026e40: 00813083 ld ra,8(sp) + 80026e44: 01010113 addi sp,sp,16 + 80026e48: 9e0ff06f j 80026028 <_Z10FixMMC3CHRi> + +0000000080026e4c <_ZL8M49Writejh>: + 80026e4c: 001a5797 auipc a5,0x1a5 + 80026e50: 3e778783 lb a5,999(a5) # 801cc233 + 80026e54: 0007c463 bltz a5,80026e5c <_ZL8M49Writejh+0x10> + 80026e58: 00008067 ret + 80026e5c: ff010113 addi sp,sp,-16 + 80026e60: 00813023 sd s0,0(sp) + 80026e64: 001a5417 auipc s0,0x1a5 + 80026e68: 3f840413 addi s0,s0,1016 # 801cc25c + 80026e6c: 00044503 lbu a0,0(s0) + 80026e70: 00113423 sd ra,8(sp) + 80026e74: 001a5797 auipc a5,0x1a5 + 80026e78: 3cb78e23 sb a1,988(a5) # 801cc250 + 80026e7c: ff1fe0ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80026e80: 00044503 lbu a0,0(s0) + 80026e84: 00013403 ld s0,0(sp) + 80026e88: 00813083 ld ra,8(sp) + 80026e8c: 01010113 addi sp,sp,16 + 80026e90: 998ff06f j 80026028 <_Z10FixMMC3CHRi> + +0000000080026e94 <_ZL8M52Writejh>: + 80026e94: 001a5797 auipc a5,0x1a5 + 80026e98: 3bc78793 addi a5,a5,956 # 801cc250 + 80026e9c: 0017c703 lbu a4,1(a5) + 80026ea0: 02070463 beqz a4,80026ec8 <_ZL8M52Writejh+0x34> + 80026ea4: ffffa7b7 lui a5,0xffffa + 80026ea8: 00a7853b addw a0,a5,a0 + 80026eac: 02051513 slli a0,a0,0x20 + 80026eb0: 001a5797 auipc a5,0x1a5 + 80026eb4: 3b07b783 ld a5,944(a5) # 801cc260 + 80026eb8: 02055513 srli a0,a0,0x20 + 80026ebc: 00a78533 add a0,a5,a0 + 80026ec0: 00b50023 sb a1,0(a0) + 80026ec4: 00008067 ret + 80026ec8: ff010113 addi sp,sp,-16 + 80026ecc: 00813023 sd s0,0(sp) + 80026ed0: 001a5417 auipc s0,0x1a5 + 80026ed4: 38c40413 addi s0,s0,908 # 801cc25c + 80026ed8: 00044503 lbu a0,0(s0) + 80026edc: 00113423 sd ra,8(sp) + 80026ee0: f805f713 andi a4,a1,-128 + 80026ee4: 00e780a3 sb a4,1(a5) + 80026ee8: 00b78023 sb a1,0(a5) + 80026eec: f81fe0ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80026ef0: 00044503 lbu a0,0(s0) + 80026ef4: 00013403 ld s0,0(sp) + 80026ef8: 00813083 ld ra,8(sp) + 80026efc: 01010113 addi sp,sp,16 + 80026f00: 928ff06f j 80026028 <_Z10FixMMC3CHRi> + +0000000080026f04 <_ZL9M134Writejh>: + 80026f04: ff010113 addi sp,sp,-16 + 80026f08: 00813023 sd s0,0(sp) + 80026f0c: 001a5417 auipc s0,0x1a5 + 80026f10: 35040413 addi s0,s0,848 # 801cc25c + 80026f14: 00044503 lbu a0,0(s0) + 80026f18: 00113423 sd ra,8(sp) + 80026f1c: 001a5797 auipc a5,0x1a5 + 80026f20: 32b78a23 sb a1,820(a5) # 801cc250 + 80026f24: 904ff0ef jal ra,80026028 <_Z10FixMMC3CHRi> + 80026f28: 00044503 lbu a0,0(s0) + 80026f2c: 00013403 ld s0,0(sp) + 80026f30: 00813083 ld ra,8(sp) + 80026f34: 01010113 addi sp,sp,16 + 80026f38: f35fe06f j 80025e6c <_Z10FixMMC3PRGi> + +0000000080026f3c <_ZL10M205Write1jh>: + 80026f3c: 001a5717 auipc a4,0x1a5 + 80026f40: 31470713 addi a4,a4,788 # 801cc250 + 80026f44: 00274683 lbu a3,2(a4) + 80026f48: 02069e63 bnez a3,80026f84 <_ZL10M205Write1jh+0x48> + 80026f4c: ff010113 addi sp,sp,-16 + 80026f50: 00813023 sd s0,0(sp) + 80026f54: 001a5417 auipc s0,0x1a5 + 80026f58: 30840413 addi s0,s0,776 # 801cc25c + 80026f5c: 00044503 lbu a0,0(s0) + 80026f60: 00113423 sd ra,8(sp) + 80026f64: 0305f593 andi a1,a1,48 + 80026f68: 00b70023 sb a1,0(a4) + 80026f6c: f01fe0ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80026f70: 00044503 lbu a0,0(s0) + 80026f74: 00013403 ld s0,0(sp) + 80026f78: 00813083 ld ra,8(sp) + 80026f7c: 01010113 addi sp,sp,16 + 80026f80: 8a8ff06f j 80026028 <_Z10FixMMC3CHRi> + 80026f84: f08e906f j 8001068c <_Z6CartBWjh> + +0000000080026f88 <_ZL10M205Write0jh>: + 80026f88: 001a5717 auipc a4,0x1a5 + 80026f8c: 2c870713 addi a4,a4,712 # 801cc250 + 80026f90: 00274683 lbu a3,2(a4) + 80026f94: 04069463 bnez a3,80026fdc <_ZL10M205Write0jh+0x54> + 80026f98: ff010113 addi sp,sp,-16 + 80026f9c: 00813023 sd s0,0(sp) + 80026fa0: 001a5417 auipc s0,0x1a5 + 80026fa4: 2bc40413 addi s0,s0,700 # 801cc25c + 80026fa8: 00050793 mv a5,a0 + 80026fac: 00044503 lbu a0,0(s0) + 80026fb0: 00113423 sd ra,8(sp) + 80026fb4: 0307f693 andi a3,a5,48 + 80026fb8: 0807f793 andi a5,a5,128 + 80026fbc: 00d70023 sb a3,0(a4) + 80026fc0: 00f70123 sb a5,2(a4) + 80026fc4: ea9fe0ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80026fc8: 00044503 lbu a0,0(s0) + 80026fcc: 00013403 ld s0,0(sp) + 80026fd0: 00813083 ld ra,8(sp) + 80026fd4: 01010113 addi sp,sp,16 + 80026fd8: 850ff06f j 80026028 <_Z10FixMMC3CHRi> + 80026fdc: eb0e906f j 8001068c <_Z6CartBWjh> + +0000000080026fe0 <_ZL9M249Writejh>: + 80026fe0: ff010113 addi sp,sp,-16 + 80026fe4: 00813023 sd s0,0(sp) + 80026fe8: 001a5417 auipc s0,0x1a5 + 80026fec: 27440413 addi s0,s0,628 # 801cc25c + 80026ff0: 00044503 lbu a0,0(s0) + 80026ff4: 00113423 sd ra,8(sp) + 80026ff8: 001a5797 auipc a5,0x1a5 + 80026ffc: 24b78c23 sb a1,600(a5) # 801cc250 + 80027000: e6dfe0ef jal ra,80025e6c <_Z10FixMMC3PRGi> + 80027004: 00044503 lbu a0,0(s0) + 80027008: 00013403 ld s0,0(sp) + 8002700c: 00813083 ld ra,8(sp) + 80027010: 01010113 addi sp,sp,16 + 80027014: 814ff06f j 80026028 <_Z10FixMMC3CHRi> + +0000000080027018 <_Z12GenMMC3_InitP8CartInfoiiii>: + 80027018: 0009b897 auipc a7,0x9b + 8002701c: 46888893 addi a7,a7,1128 # 800c2480 + 80027020: 0008ae83 lw t4,0(a7) + 80027024: 0009b317 auipc t1,0x9b + 80027028: 3dc30313 addi t1,t1,988 # 800c2400 + 8002702c: 00032f03 lw t5,0(t1) + 80027030: 0009ce17 auipc t3,0x9c + 80027034: 9f0e0e13 addi t3,t3,-1552 # 800c2a20 + 80027038: 40a6579b sraiw a5,a2,0xa + 8002703c: 40b6561b sraiw a2,a2,0xb + 80027040: 000e2f83 lw t6,0(t3) + 80027044: fff6061b addiw a2,a2,-1 + 80027048: 01d67633 and a2,a2,t4 + 8002704c: 40d5d59b sraiw a1,a1,0xd + 80027050: ffffee97 auipc t4,0xffffe + 80027054: 618e8e93 addi t4,t4,1560 # 80025668 <_ZL8GENPWRAPjh> + 80027058: fff7879b addiw a5,a5,-1 + 8002705c: fd010113 addi sp,sp,-48 + 80027060: 01e7f7b3 and a5,a5,t5 + 80027064: fff5859b addiw a1,a1,-1 + 80027068: 001a5f17 auipc t5,0x1a5 + 8002706c: 23df3823 sd t4,560(t5) # 801cc298 + 80027070: ffffee97 auipc t4,0xffffe + 80027074: 3fce8e93 addi t4,t4,1020 # 8002546c <_ZL8GENCWRAPjh> + 80027078: 02813023 sd s0,32(sp) + 8002707c: 00913c23 sd s1,24(sp) + 80027080: 01213823 sd s2,16(sp) + 80027084: 02113423 sd ra,40(sp) + 80027088: 01313423 sd s3,8(sp) + 8002708c: 00a6981b slliw a6,a3,0xa + 80027090: 001a5917 auipc s2,0x1a5 + 80027094: 1d890913 addi s2,s2,472 # 801cc268 + 80027098: 01f5f5b3 and a1,a1,t6 + 8002709c: 001a5f17 auipc t5,0x1a5 + 800270a0: 1fdf3223 sd t4,484(t5) # 801cc280 + 800270a4: ffffee97 auipc t4,0xffffe + 800270a8: 344e8e93 addi t4,t4,836 # 800253e8 <_ZL8GENMWRAPh> + 800270ac: 001a5f17 auipc t5,0x1a5 + 800270b0: 1fdf3223 sd t4,484(t5) # 801cc290 + 800270b4: 01092023 sw a6,0(s2) + 800270b8: 00be2023 sw a1,0(t3) + 800270bc: 00f32023 sw a5,0(t1) + 800270c0: 00c8a023 sw a2,0(a7) + 800270c4: 00050413 mv s0,a0 + 800270c8: 00070493 mv s1,a4 + 800270cc: 10069663 bnez a3,800271d8 <_Z12GenMMC3_InitP8CartInfoiiii+0x1c0> + 800270d0: 02048663 beqz s1,800270fc <_Z12GenMMC3_InitP8CartInfoiiii+0xe4> + 800270d4: 001a5717 auipc a4,0x1a5 + 800270d8: 1b570713 addi a4,a4,437 # 801cc289 + 800270dc: 00074783 lbu a5,0(a4) + 800270e0: 00092683 lw a3,0(s2) + 800270e4: 0027e793 ori a5,a5,2 + 800270e8: 00f70023 sb a5,0(a4) + 800270ec: 001a5797 auipc a5,0x1a5 + 800270f0: 1747b783 ld a5,372(a5) # 801cc260 + 800270f4: 00f43c23 sd a5,24(s0) + 800270f8: 02d42c23 sw a3,56(s0) + 800270fc: 0001f697 auipc a3,0x1f + 80027100: c5468693 addi a3,a3,-940 # 80045d50 <_ZL8prg_perm+0x40> + 80027104: 00000613 li a2,0 + 80027108: 00100593 li a1,1 + 8002710c: 001a5517 auipc a0,0x1a5 + 80027110: 17c50513 addi a0,a0,380 # 801cc288 + 80027114: efdd80ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80027118: 00000693 li a3,0 + 8002711c: 00000613 li a2,0 + 80027120: fff00593 li a1,-1 + 80027124: 00026517 auipc a0,0x26 + 80027128: d5c50513 addi a0,a0,-676 # 8004ce80 <_ZL14MMC3_StateRegs> + 8002712c: ee5d80ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80027130: fffff797 auipc a5,0xfffff + 80027134: 09078793 addi a5,a5,144 # 800261c0 <_Z12GenMMC3Powerv> + 80027138: 00f43023 sd a5,0(s0) + 8002713c: fffff797 auipc a5,0xfffff + 80027140: 02c78793 addi a5,a5,44 # 80026168 <_Z12MMC3RegResetv> + 80027144: 00f43423 sd a5,8(s0) + 80027148: 07842703 lw a4,120(s0) + 8002714c: ffffe797 auipc a5,0xffffe + 80027150: 2dc78793 addi a5,a5,732 # 80025428 <_ZL12GenMMC3Closev> + 80027154: 00f43823 sd a5,16(s0) + 80027158: 510487b7 lui a5,0x51048 + 8002715c: 33e78793 addi a5,a5,830 # 5104833e <_entry_offset+0x5104833e> + 80027160: 02f70e63 beq a4,a5,8002719c <_Z12GenMMC3_InitP8CartInfoiiii+0x184> + 80027164: 5a6867b7 lui a5,0x5a686 + 80027168: 0f178793 addi a5,a5,241 # 5a6860f1 <_entry_offset+0x5a6860f1> + 8002716c: 02f70863 beq a4,a5,8002719c <_Z12GenMMC3_InitP8CartInfoiiii+0x184> + 80027170: ae2817b7 lui a5,0xae281 + 80027174: e2078793 addi a5,a5,-480 # ffffffffae280e20 <_end+0xffffffff2e0abe20> + 80027178: 02f70263 beq a4,a5,8002719c <_Z12GenMMC3_InitP8CartInfoiiii+0x184> + 8002717c: fcd777b7 lui a5,0xfcd77 + 80027180: 2eb78793 addi a5,a5,747 # fffffffffcd772eb <_end+0xffffffff7cba22eb> + 80027184: 0af70663 beq a4,a5,80027230 <_Z12GenMMC3_InitP8CartInfoiiii+0x218> + 80027188: fffff797 auipc a5,0xfffff + 8002718c: a2878793 addi a5,a5,-1496 # 80025bb0 <_ZL7MMC3_hbv> + 80027190: 001a5717 auipc a4,0x1a5 + 80027194: 52f73823 sd a5,1328(a4) # 801cc6c0 + 80027198: 0140006f j 800271ac <_Z12GenMMC3_InitP8CartInfoiiii+0x194> + 8002719c: fffff797 auipc a5,0xfffff + 800271a0: a4478793 addi a5,a5,-1468 # 80025be0 <_ZL22MMC3_hb_KickMasterHackv> + 800271a4: 001a5717 auipc a4,0x1a5 + 800271a8: 50f73e23 sd a5,1308(a4) # 801cc6c0 + 800271ac: 02813083 ld ra,40(sp) + 800271b0: 02013403 ld s0,32(sp) + 800271b4: 00000797 auipc a5,0x0 + 800271b8: b2078793 addi a5,a5,-1248 # 80026cd4 <_Z14GenMMC3Restorei> + 800271bc: 001a5717 auipc a4,0x1a5 + 800271c0: 48f73e23 sd a5,1180(a4) # 801cc658 + 800271c4: 01813483 ld s1,24(sp) + 800271c8: 01013903 ld s2,16(sp) + 800271cc: 00813983 ld s3,8(sp) + 800271d0: 03010113 addi sp,sp,48 + 800271d4: 00008067 ret + 800271d8: 001a5717 auipc a4,0x1a5 + 800271dc: 0b170713 addi a4,a4,177 # 801cc289 + 800271e0: 00074783 lbu a5,0(a4) + 800271e4: 0008051b sext.w a0,a6 + 800271e8: 001a5997 auipc s3,0x1a5 + 800271ec: 07898993 addi s3,s3,120 # 801cc260 + 800271f0: 0017e793 ori a5,a5,1 + 800271f4: 00f70023 sb a5,0(a4) + 800271f8: a74eb0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 800271fc: 00092603 lw a2,0(s2) + 80027200: 00050593 mv a1,a0 + 80027204: 00100693 li a3,1 + 80027208: 01000513 li a0,16 + 8002720c: 00b9b023 sd a1,0(s3) + 80027210: ae4e90ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80027214: 00092583 lw a1,0(s2) + 80027218: 0009b503 ld a0,0(s3) + 8002721c: 0001e697 auipc a3,0x1e + 80027220: 10c68693 addi a3,a3,268 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80027224: 00000613 li a2,0 + 80027228: de9d80ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002722c: ea5ff06f j 800270d0 <_Z12GenMMC3_InitP8CartInfoiiii+0xb8> + 80027230: fffff797 auipc a5,0xfffff + 80027234: 98478793 addi a5,a5,-1660 # 80025bb4 <_ZL23MMC3_hb_PALStarWarsHackv> + 80027238: 001a5717 auipc a4,0x1a5 + 8002723c: 48f73423 sd a5,1160(a4) # 801cc6c0 + 80027240: f6dff06f j 800271ac <_Z12GenMMC3_InitP8CartInfoiiii+0x194> + +0000000080027244 <_Z12Mapper4_InitP8CartInfo>: + 80027244: 07852703 lw a4,120(a0) + 80027248: ff010113 addi sp,sp,-16 + 8002724c: 939917b7 lui a5,0x93991 + 80027250: 00813023 sd s0,0(sp) + 80027254: 00113423 sd ra,8(sp) + 80027258: 43378793 addi a5,a5,1075 # ffffffff93991433 <_end+0xffffffff137bc433> + 8002725c: 00050413 mv s0,a0 + 80027260: 04f70863 beq a4,a5,800272b0 <_Z12Mapper4_InitP8CartInfo+0x6c> + 80027264: af65b7b7 lui a5,0xaf65b + 80027268: a8478793 addi a5,a5,-1404 # ffffffffaf65aa84 <_end+0xffffffff2f485a84> + 8002726c: 00800693 li a3,8 + 80027270: 04f70063 beq a4,a5,800272b0 <_Z12Mapper4_InitP8CartInfo+0x6c> + 80027274: 04c42703 lw a4,76(s0) + 80027278: 00040513 mv a0,s0 + 8002727c: 10000613 li a2,256 + 80027280: 20000593 li a1,512 + 80027284: d95ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027288: 04842783 lw a5,72(s0) + 8002728c: fffff717 auipc a4,0xfffff + 80027290: 13470713 addi a4,a4,308 # 800263c0 <_ZL7M4Powerv> + 80027294: 00e43023 sd a4,0(s0) + 80027298: 00813083 ld ra,8(sp) + 8002729c: 00013403 ld s0,0(sp) + 800272a0: 001a5717 auipc a4,0x1a5 + 800272a4: fcf72c23 sw a5,-40(a4) # 801cc278 <_ZL6hackm4> + 800272a8: 01010113 addi sp,sp,16 + 800272ac: 00008067 ret + 800272b0: 0001f517 auipc a0,0x1f + 800272b4: aa850513 addi a0,a0,-1368 # 80045d58 <_ZL8prg_perm+0x48> + 800272b8: 290140ef jal ra,8003b548 + 800272bc: 00000693 li a3,0 + 800272c0: fb5ff06f j 80027274 <_Z12Mapper4_InitP8CartInfo+0x30> + +00000000800272c4 <_Z13Mapper12_InitP8CartInfo>: + 800272c4: 04c52703 lw a4,76(a0) + 800272c8: ff010113 addi sp,sp,-16 + 800272cc: 00800693 li a3,8 + 800272d0: 10000613 li a2,256 + 800272d4: 20000593 li a1,512 + 800272d8: 00813023 sd s0,0(sp) + 800272dc: 00113423 sd ra,8(sp) + 800272e0: 00050413 mv s0,a0 + 800272e4: d35ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 800272e8: ffffe797 auipc a5,0xffffe + 800272ec: 18878793 addi a5,a5,392 # 80025470 <_ZL5M12CWjh> + 800272f0: 001a5717 auipc a4,0x1a5 + 800272f4: f8f73823 sd a5,-112(a4) # 801cc280 + 800272f8: fffff797 auipc a5,0xfffff + 800272fc: 0f878793 addi a5,a5,248 # 800263f0 <_ZL8M12Powerv> + 80027300: 00f43023 sd a5,0(s0) + 80027304: fffff797 auipc a5,0xfffff + 80027308: 4c078793 addi a5,a5,1216 # 800267c4 <_ZL8M12Resetv> + 8002730c: 00f43423 sd a5,8(s0) + 80027310: 00013403 ld s0,0(sp) + 80027314: 00813083 ld ra,8(sp) + 80027318: 00026797 auipc a5,0x26 + 8002731c: c407a023 sw zero,-960(a5) # 8004cf58 <_ZL6isRevB> + 80027320: 0001e697 auipc a3,0x1e + 80027324: 1d068693 addi a3,a3,464 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 80027328: 00000613 li a2,0 + 8002732c: 00200593 li a1,2 + 80027330: 001a5517 auipc a0,0x1a5 + 80027334: f2050513 addi a0,a0,-224 # 801cc250 + 80027338: 01010113 addi sp,sp,16 + 8002733c: cd5d806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027340 <_Z13Mapper37_InitP8CartInfo>: + 80027340: 04c52703 lw a4,76(a0) + 80027344: ff010113 addi sp,sp,-16 + 80027348: 00800693 li a3,8 + 8002734c: 10000613 li a2,256 + 80027350: 20000593 li a1,512 + 80027354: 00813023 sd s0,0(sp) + 80027358: 00113423 sd ra,8(sp) + 8002735c: 00050413 mv s0,a0 + 80027360: cb9ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027364: ffffe797 auipc a5,0xffffe + 80027368: 32078793 addi a5,a5,800 # 80025684 <_ZL5M37PWjh> + 8002736c: 001a5717 auipc a4,0x1a5 + 80027370: f2f73623 sd a5,-212(a4) # 801cc298 + 80027374: ffffe797 auipc a5,0xffffe + 80027378: 12078793 addi a5,a5,288 # 80025494 <_ZL5M37CWjh> + 8002737c: 001a5717 auipc a4,0x1a5 + 80027380: f0f73223 sd a5,-252(a4) # 801cc280 + 80027384: fffff797 auipc a5,0xfffff + 80027388: 0d478793 addi a5,a5,212 # 80026458 <_ZL8M37Powerv> + 8002738c: 00f43023 sd a5,0(s0) + 80027390: fffff797 auipc a5,0xfffff + 80027394: 45078793 addi a5,a5,1104 # 800267e0 <_ZL8M37Resetv> + 80027398: 00f43423 sd a5,8(s0) + 8002739c: 00013403 ld s0,0(sp) + 800273a0: 00813083 ld ra,8(sp) + 800273a4: 0001e697 auipc a3,0x1e + 800273a8: 14c68693 addi a3,a3,332 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 800273ac: 00000613 li a2,0 + 800273b0: 00100593 li a1,1 + 800273b4: 001a5517 auipc a0,0x1a5 + 800273b8: e9c50513 addi a0,a0,-356 # 801cc250 + 800273bc: 01010113 addi sp,sp,16 + 800273c0: c51d806f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800273c4 <_Z13Mapper44_InitP8CartInfo>: + 800273c4: 04c52703 lw a4,76(a0) + 800273c8: ff010113 addi sp,sp,-16 + 800273cc: 00800693 li a3,8 + 800273d0: 10000613 li a2,256 + 800273d4: 20000593 li a1,512 + 800273d8: 00813023 sd s0,0(sp) + 800273dc: 00113423 sd ra,8(sp) + 800273e0: 00050413 mv s0,a0 + 800273e4: c35ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 800273e8: ffffe797 auipc a5,0xffffe + 800273ec: 0c878793 addi a5,a5,200 # 800254b0 <_ZL5M44CWjh> + 800273f0: 001a5717 auipc a4,0x1a5 + 800273f4: e8f73823 sd a5,-368(a4) # 801cc280 + 800273f8: ffffe797 auipc a5,0xffffe + 800273fc: 2b478793 addi a5,a5,692 # 800256ac <_ZL5M44PWjh> + 80027400: 001a5717 auipc a4,0x1a5 + 80027404: e8f73c23 sd a5,-360(a4) # 801cc298 + 80027408: fffff797 auipc a5,0xfffff + 8002740c: 08478793 addi a5,a5,132 # 8002648c <_ZL8M44Powerv> + 80027410: 00f43023 sd a5,0(s0) + 80027414: 00013403 ld s0,0(sp) + 80027418: 00813083 ld ra,8(sp) + 8002741c: 0001e697 auipc a3,0x1e + 80027420: 0d468693 addi a3,a3,212 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 80027424: 00000613 li a2,0 + 80027428: 00100593 li a1,1 + 8002742c: 001a5517 auipc a0,0x1a5 + 80027430: e2450513 addi a0,a0,-476 # 801cc250 + 80027434: 01010113 addi sp,sp,16 + 80027438: bd9d806f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002743c <_Z13Mapper45_InitP8CartInfo>: + 8002743c: 04c52703 lw a4,76(a0) + 80027440: ff010113 addi sp,sp,-16 + 80027444: 00800693 li a3,8 + 80027448: 10000613 li a2,256 + 8002744c: 20000593 li a1,512 + 80027450: 00813023 sd s0,0(sp) + 80027454: 00113423 sd ra,8(sp) + 80027458: 00050413 mv s0,a0 + 8002745c: bbdff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027460: ffffe797 auipc a5,0xffffe + 80027464: 7ac78793 addi a5,a5,1964 # 80025c0c <_ZL5M45CWjh> + 80027468: 001a5717 auipc a4,0x1a5 + 8002746c: e0f73c23 sd a5,-488(a4) # 801cc280 + 80027470: ffffe797 auipc a5,0xffffe + 80027474: 26078793 addi a5,a5,608 # 800256d0 <_ZL5M45PWjh> + 80027478: 001a5717 auipc a4,0x1a5 + 8002747c: e2f73023 sd a5,-480(a4) # 801cc298 + 80027480: fffff797 auipc a5,0xfffff + 80027484: 37878793 addi a5,a5,888 # 800267f8 <_ZL8M45Resetv> + 80027488: 00f43423 sd a5,8(s0) + 8002748c: fffff797 auipc a5,0xfffff + 80027490: 03478793 addi a5,a5,52 # 800264c0 <_ZL8M45Powerv> + 80027494: 00f43023 sd a5,0(s0) + 80027498: 00013403 ld s0,0(sp) + 8002749c: 00813083 ld ra,8(sp) + 800274a0: 0001e697 auipc a3,0x1e + 800274a4: 05068693 addi a3,a3,80 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 800274a8: 00000613 li a2,0 + 800274ac: 00500593 li a1,5 + 800274b0: 001a5517 auipc a0,0x1a5 + 800274b4: da050513 addi a0,a0,-608 # 801cc250 + 800274b8: 01010113 addi sp,sp,16 + 800274bc: b55d806f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800274c0 <_Z13Mapper47_InitP8CartInfo>: + 800274c0: ff010113 addi sp,sp,-16 + 800274c4: 00000713 li a4,0 + 800274c8: 00800693 li a3,8 + 800274cc: 10000613 li a2,256 + 800274d0: 20000593 li a1,512 + 800274d4: 00813023 sd s0,0(sp) + 800274d8: 00113423 sd ra,8(sp) + 800274dc: 00050413 mv s0,a0 + 800274e0: b39ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 800274e4: ffffe797 auipc a5,0xffffe + 800274e8: 23478793 addi a5,a5,564 # 80025718 <_ZL5M47PWjh> + 800274ec: 001a5717 auipc a4,0x1a5 + 800274f0: daf73623 sd a5,-596(a4) # 801cc298 + 800274f4: ffffe797 auipc a5,0xffffe + 800274f8: fdc78793 addi a5,a5,-36 # 800254d0 <_ZL5M47CWjh> + 800274fc: 001a5717 auipc a4,0x1a5 + 80027500: d8f73223 sd a5,-636(a4) # 801cc280 + 80027504: fffff797 auipc a5,0xfffff + 80027508: 01078793 addi a5,a5,16 # 80026514 <_ZL8M47Powerv> + 8002750c: 00f43023 sd a5,0(s0) + 80027510: 00013403 ld s0,0(sp) + 80027514: 00813083 ld ra,8(sp) + 80027518: 0001e697 auipc a3,0x1e + 8002751c: fd868693 addi a3,a3,-40 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 80027520: 00000613 li a2,0 + 80027524: 00100593 li a1,1 + 80027528: 001a5517 auipc a0,0x1a5 + 8002752c: d2850513 addi a0,a0,-728 # 801cc250 + 80027530: 01010113 addi sp,sp,16 + 80027534: addd806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027538 <_Z13Mapper49_InitP8CartInfo>: + 80027538: ff010113 addi sp,sp,-16 + 8002753c: 00000713 li a4,0 + 80027540: 00000693 li a3,0 + 80027544: 10000613 li a2,256 + 80027548: 20000593 li a1,512 + 8002754c: 00813023 sd s0,0(sp) + 80027550: 00113423 sd ra,8(sp) + 80027554: 00050413 mv s0,a0 + 80027558: ac1ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 8002755c: ffffe797 auipc a5,0xffffe + 80027560: f9078793 addi a5,a5,-112 # 800254ec <_ZL5M49CWjh> + 80027564: 001a5717 auipc a4,0x1a5 + 80027568: d0f73e23 sd a5,-740(a4) # 801cc280 + 8002756c: ffffe797 auipc a5,0xffffe + 80027570: 30878793 addi a5,a5,776 # 80025874 <_ZL5M49PWjh> + 80027574: 001a5717 auipc a4,0x1a5 + 80027578: d2f73223 sd a5,-732(a4) # 801cc298 + 8002757c: fffff797 auipc a5,0xfffff + 80027580: 27078793 addi a5,a5,624 # 800267ec <_ZL8M49Resetv> + 80027584: 00f43423 sd a5,8(s0) + 80027588: fffff797 auipc a5,0xfffff + 8002758c: 29478793 addi a5,a5,660 # 8002681c <_ZL8M49Powerv> + 80027590: 00f43023 sd a5,0(s0) + 80027594: 00013403 ld s0,0(sp) + 80027598: 00813083 ld ra,8(sp) + 8002759c: 0001e697 auipc a3,0x1e + 800275a0: f5468693 addi a3,a3,-172 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 800275a4: 00000613 li a2,0 + 800275a8: 00100593 li a1,1 + 800275ac: 001a5517 auipc a0,0x1a5 + 800275b0: ca450513 addi a0,a0,-860 # 801cc250 + 800275b4: 01010113 addi sp,sp,16 + 800275b8: a59d806f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800275bc <_Z13Mapper52_InitP8CartInfo>: + 800275bc: 04c52703 lw a4,76(a0) + 800275c0: ff010113 addi sp,sp,-16 + 800275c4: 00800693 li a3,8 + 800275c8: 10000613 li a2,256 + 800275cc: 10000593 li a1,256 + 800275d0: 00813023 sd s0,0(sp) + 800275d4: 00113423 sd ra,8(sp) + 800275d8: 00050413 mv s0,a0 + 800275dc: a3dff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 800275e0: ffffe797 auipc a5,0xffffe + 800275e4: f2878793 addi a5,a5,-216 # 80025508 <_ZL5M52CWjh> + 800275e8: 001a5717 auipc a4,0x1a5 + 800275ec: c8f73c23 sd a5,-872(a4) # 801cc280 + 800275f0: ffffe797 auipc a5,0xffffe + 800275f4: 14478793 addi a5,a5,324 # 80025734 <_ZL5M52PWjh> + 800275f8: 001a5717 auipc a4,0x1a5 + 800275fc: caf73023 sd a5,-864(a4) # 801cc298 + 80027600: fffff797 auipc a5,0xfffff + 80027604: 26c78793 addi a5,a5,620 # 8002686c <_ZL8M52Resetv> + 80027608: 00f43423 sd a5,8(s0) + 8002760c: fffff797 auipc a5,0xfffff + 80027610: 26c78793 addi a5,a5,620 # 80026878 <_ZL8M52Powerv> + 80027614: 00f43023 sd a5,0(s0) + 80027618: 00013403 ld s0,0(sp) + 8002761c: 00813083 ld ra,8(sp) + 80027620: 0001e697 auipc a3,0x1e + 80027624: ed068693 addi a3,a3,-304 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 80027628: 00000613 li a2,0 + 8002762c: 00200593 li a1,2 + 80027630: 001a5517 auipc a0,0x1a5 + 80027634: c2050513 addi a0,a0,-992 # 801cc250 + 80027638: 01010113 addi sp,sp,16 + 8002763c: 9d5d806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027640 <_Z13Mapper76_InitP8CartInfo>: + 80027640: ff010113 addi sp,sp,-16 + 80027644: 00000713 li a4,0 + 80027648: 00000693 li a3,0 + 8002764c: 08000613 li a2,128 + 80027650: 08000593 li a1,128 + 80027654: 00113423 sd ra,8(sp) + 80027658: 9c1ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 8002765c: 00813083 ld ra,8(sp) + 80027660: ffffe797 auipc a5,0xffffe + 80027664: 64878793 addi a5,a5,1608 # 80025ca8 <_ZL5M76CWjh> + 80027668: 001a5717 auipc a4,0x1a5 + 8002766c: c0f73c23 sd a5,-1000(a4) # 801cc280 + 80027670: 01010113 addi sp,sp,16 + 80027674: 00008067 ret + +0000000080027678 <_Z13Mapper74_InitP8CartInfo>: + 80027678: 04c52703 lw a4,76(a0) + 8002767c: fe010113 addi sp,sp,-32 + 80027680: 00800693 li a3,8 + 80027684: 10000613 li a2,256 + 80027688: 20000593 li a1,512 + 8002768c: 00113c23 sd ra,24(sp) + 80027690: 00813823 sd s0,16(sp) + 80027694: 00913423 sd s1,8(sp) + 80027698: 981ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 8002769c: ffffe797 auipc a5,0xffffe + 800276a0: 21078793 addi a5,a5,528 # 800258ac <_ZL5M74CWjh> + 800276a4: 001a5717 auipc a4,0x1a5 + 800276a8: bcf73e23 sd a5,-1060(a4) # 801cc280 + 800276ac: 00001537 lui a0,0x1 + 800276b0: 000017b7 lui a5,0x1 + 800276b4: 001a5417 auipc s0,0x1a5 + 800276b8: b8c40413 addi s0,s0,-1140 # 801cc240 + 800276bc: 8007879b addiw a5,a5,-2048 + 800276c0: 80050513 addi a0,a0,-2048 # 800 <_entry_offset+0x800> + 800276c4: 00f42023 sw a5,0(s0) + 800276c8: da5ea0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 800276cc: 00042603 lw a2,0(s0) + 800276d0: 00050593 mv a1,a0 + 800276d4: 001a5497 auipc s1,0x1a5 + 800276d8: b6448493 addi s1,s1,-1180 # 801cc238 + 800276dc: 00100693 li a3,1 + 800276e0: 01000513 li a0,16 + 800276e4: 00b4b023 sd a1,0(s1) + 800276e8: edde80ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 800276ec: 00042583 lw a1,0(s0) + 800276f0: 01013403 ld s0,16(sp) + 800276f4: 0004b503 ld a0,0(s1) + 800276f8: 01813083 ld ra,24(sp) + 800276fc: 00813483 ld s1,8(sp) + 80027700: 0001b697 auipc a3,0x1b + 80027704: a4868693 addi a3,a3,-1464 # 80042148 <_ZL9C96000PAL+0x738> + 80027708: 00000613 li a2,0 + 8002770c: 02010113 addi sp,sp,32 + 80027710: 901d806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027714 <_Z14Mapper114_InitP8CartInfo>: + 80027714: ff010113 addi sp,sp,-16 + 80027718: 00000713 li a4,0 + 8002771c: 00000693 li a3,0 + 80027720: 10000613 li a2,256 + 80027724: 10000593 li a1,256 + 80027728: 00113423 sd ra,8(sp) + 8002772c: 00813023 sd s0,0(sp) + 80027730: 00026797 auipc a5,0x26 + 80027734: 8207a423 sw zero,-2008(a5) # 8004cf58 <_ZL6isRevB> + 80027738: 00050413 mv s0,a0 + 8002773c: 8ddff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027740: ffffe797 auipc a5,0xffffe + 80027744: 23878793 addi a5,a5,568 # 80025978 <_ZL9M114PWRAPjh> + 80027748: 001a5717 auipc a4,0x1a5 + 8002774c: b4f73823 sd a5,-1200(a4) # 801cc298 + 80027750: fffff797 auipc a5,0xfffff + 80027754: df878793 addi a5,a5,-520 # 80026548 <_ZL9M114Powerv> + 80027758: 00f43023 sd a5,0(s0) + 8002775c: fffff797 auipc a5,0xfffff + 80027760: 09478793 addi a5,a5,148 # 800267f0 <_ZL9M114Resetv> + 80027764: 0001e697 auipc a3,0x1e + 80027768: d8c68693 addi a3,a3,-628 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 8002776c: 00000613 li a2,0 + 80027770: 00100593 li a1,1 + 80027774: 001a5517 auipc a0,0x1a5 + 80027778: adc50513 addi a0,a0,-1316 # 801cc250 + 8002777c: 00f43423 sd a5,8(s0) + 80027780: 891d80ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80027784: 00013403 ld s0,0(sp) + 80027788: 00813083 ld ra,8(sp) + 8002778c: 0001e697 auipc a3,0x1e + 80027790: 44468693 addi a3,a3,1092 # 80045bd0 <_ZZL5Do5SQiE3tal+0x90> + 80027794: 00000613 li a2,0 + 80027798: 00100593 li a1,1 + 8002779c: 001a5517 auipc a0,0x1a5 + 800277a0: ad050513 addi a0,a0,-1328 # 801cc26c <_ZL5cmdin> + 800277a4: 01010113 addi sp,sp,16 + 800277a8: 869d806f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800277ac <_Z14Mapper115_InitP8CartInfo>: + 800277ac: ff010113 addi sp,sp,-16 + 800277b0: 00000713 li a4,0 + 800277b4: 00000693 li a3,0 + 800277b8: 20000613 li a2,512 + 800277bc: 08000593 li a1,128 + 800277c0: 00813023 sd s0,0(sp) + 800277c4: 00113423 sd ra,8(sp) + 800277c8: 00050413 mv s0,a0 + 800277cc: 84dff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 800277d0: ffffe797 auipc a5,0xffffe + 800277d4: d8078793 addi a5,a5,-640 # 80025550 <_ZL6M115CWjh> + 800277d8: 001a5717 auipc a4,0x1a5 + 800277dc: aaf73423 sd a5,-1368(a4) # 801cc280 + 800277e0: ffffe797 auipc a5,0xffffe + 800277e4: 1f878793 addi a5,a5,504 # 800259d8 <_ZL6M115PWjh> + 800277e8: 001a5717 auipc a4,0x1a5 + 800277ec: aaf73823 sd a5,-1360(a4) # 801cc298 + 800277f0: fffff797 auipc a5,0xfffff + 800277f4: d9c78793 addi a5,a5,-612 # 8002658c <_ZL9M115Powerv> + 800277f8: 00f43023 sd a5,0(s0) + 800277fc: 00013403 ld s0,0(sp) + 80027800: 00813083 ld ra,8(sp) + 80027804: 0001e697 auipc a3,0x1e + 80027808: cec68693 addi a3,a3,-788 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 8002780c: 00000613 li a2,0 + 80027810: 00300593 li a1,3 + 80027814: 001a5517 auipc a0,0x1a5 + 80027818: a3c50513 addi a0,a0,-1476 # 801cc250 + 8002781c: 01010113 addi sp,sp,16 + 80027820: ff0d806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027824 <_Z14Mapper134_InitP8CartInfo>: + 80027824: ff010113 addi sp,sp,-16 + 80027828: 00000713 li a4,0 + 8002782c: 00000693 li a3,0 + 80027830: 10000613 li a2,256 + 80027834: 10000593 li a1,256 + 80027838: 00813023 sd s0,0(sp) + 8002783c: 00113423 sd ra,8(sp) + 80027840: 00050413 mv s0,a0 + 80027844: fd4ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027848: ffffe797 auipc a5,0xffffe + 8002784c: f2c78793 addi a5,a5,-212 # 80025774 <_ZL6M134PWjh> + 80027850: 001a5717 auipc a4,0x1a5 + 80027854: a4f73423 sd a5,-1464(a4) # 801cc298 + 80027858: ffffe797 auipc a5,0xffffe + 8002785c: d1078793 addi a5,a5,-752 # 80025568 <_ZL6M134CWjh> + 80027860: 001a5717 auipc a4,0x1a5 + 80027864: a2f73023 sd a5,-1504(a4) # 801cc280 + 80027868: fffff797 auipc a5,0xfffff + 8002786c: d6c78793 addi a5,a5,-660 # 800265d4 <_ZL9M134Powerv> + 80027870: 00f43023 sd a5,0(s0) + 80027874: fffff797 auipc a5,0xfffff + 80027878: f8078793 addi a5,a5,-128 # 800267f4 <_ZL9M134Resetv> + 8002787c: 00f43423 sd a5,8(s0) + 80027880: 00013403 ld s0,0(sp) + 80027884: 00813083 ld ra,8(sp) + 80027888: 0001e697 auipc a3,0x1e + 8002788c: c6868693 addi a3,a3,-920 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 80027890: 00000613 li a2,0 + 80027894: 00400593 li a1,4 + 80027898: 001a5517 auipc a0,0x1a5 + 8002789c: 9b850513 addi a0,a0,-1608 # 801cc250 + 800278a0: 01010113 addi sp,sp,16 + 800278a4: f6cd806f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800278a8 <_Z14Mapper165_InitP8CartInfo>: + 800278a8: 04c52703 lw a4,76(a0) + 800278ac: fe010113 addi sp,sp,-32 + 800278b0: 00800693 li a3,8 + 800278b4: 08000613 li a2,128 + 800278b8: 20000593 li a1,512 + 800278bc: 00113c23 sd ra,24(sp) + 800278c0: 00813823 sd s0,16(sp) + 800278c4: 00913423 sd s1,8(sp) + 800278c8: 00050413 mv s0,a0 + 800278cc: f4cff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 800278d0: ffffe797 auipc a5,0xffffe + 800278d4: 4cc78793 addi a5,a5,1228 # 80025d9c <_ZL7M165CWMjh> + 800278d8: 001a5717 auipc a4,0x1a5 + 800278dc: 9af73423 sd a5,-1624(a4) # 801cc280 + 800278e0: ffffe797 auipc a5,0xffffe + 800278e4: 47c78793 addi a5,a5,1148 # 80025d5c <_ZL7M165PPUj> + 800278e8: 001a5717 auipc a4,0x1a5 + 800278ec: e2f73023 sd a5,-480(a4) # 801cc708 + 800278f0: fffff797 auipc a5,0xfffff + 800278f4: d1878793 addi a5,a5,-744 # 80026608 <_ZL9M165Powerv> + 800278f8: 001a5497 auipc s1,0x1a5 + 800278fc: 94848493 addi s1,s1,-1720 # 801cc240 + 80027900: 00f43023 sd a5,0(s0) + 80027904: 00001537 lui a0,0x1 + 80027908: 000017b7 lui a5,0x1 + 8002790c: 00f4a023 sw a5,0(s1) + 80027910: b5dea0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80027914: 0004a603 lw a2,0(s1) + 80027918: 00050593 mv a1,a0 + 8002791c: 001a5417 auipc s0,0x1a5 + 80027920: 91c40413 addi s0,s0,-1764 # 801cc238 + 80027924: 00100693 li a3,1 + 80027928: 01000513 li a0,16 + 8002792c: 00b43023 sd a1,0(s0) + 80027930: c95e80ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 80027934: 0004a583 lw a1,0(s1) + 80027938: 00043503 ld a0,0(s0) + 8002793c: 0001b697 auipc a3,0x1b + 80027940: 80c68693 addi a3,a3,-2036 # 80042148 <_ZL9C96000PAL+0x738> + 80027944: 00000613 li a2,0 + 80027948: ec8d80ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002794c: 01013403 ld s0,16(sp) + 80027950: 01813083 ld ra,24(sp) + 80027954: 00813483 ld s1,8(sp) + 80027958: 0001e697 auipc a3,0x1e + 8002795c: b9868693 addi a3,a3,-1128 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 80027960: 00000613 li a2,0 + 80027964: 00400593 li a1,4 + 80027968: 001a5517 auipc a0,0x1a5 + 8002796c: 8e850513 addi a0,a0,-1816 # 801cc250 + 80027970: 02010113 addi sp,sp,32 + 80027974: e9cd806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027978 <_Z14Mapper191_InitP8CartInfo>: + 80027978: 04c52703 lw a4,76(a0) + 8002797c: fe010113 addi sp,sp,-32 + 80027980: 00800693 li a3,8 + 80027984: 10000613 li a2,256 + 80027988: 10000593 li a1,256 + 8002798c: 00113c23 sd ra,24(sp) + 80027990: 00813823 sd s0,16(sp) + 80027994: 00913423 sd s1,8(sp) + 80027998: e80ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 8002799c: ffffe797 auipc a5,0xffffe + 800279a0: f5478793 addi a5,a5,-172 # 800258f0 <_ZL6M191CWjh> + 800279a4: 001a5717 auipc a4,0x1a5 + 800279a8: 8cf73e23 sd a5,-1828(a4) # 801cc280 + 800279ac: 00001537 lui a0,0x1 + 800279b0: 000017b7 lui a5,0x1 + 800279b4: 001a5417 auipc s0,0x1a5 + 800279b8: 88c40413 addi s0,s0,-1908 # 801cc240 + 800279bc: 8007879b addiw a5,a5,-2048 + 800279c0: 80050513 addi a0,a0,-2048 # 800 <_entry_offset+0x800> + 800279c4: 00f42023 sw a5,0(s0) + 800279c8: aa5ea0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 800279cc: 00042603 lw a2,0(s0) + 800279d0: 00050593 mv a1,a0 + 800279d4: 001a5497 auipc s1,0x1a5 + 800279d8: 86448493 addi s1,s1,-1948 # 801cc238 + 800279dc: 00100693 li a3,1 + 800279e0: 01000513 li a0,16 + 800279e4: 00b4b023 sd a1,0(s1) + 800279e8: bdde80ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 800279ec: 00042583 lw a1,0(s0) + 800279f0: 01013403 ld s0,16(sp) + 800279f4: 0004b503 ld a0,0(s1) + 800279f8: 01813083 ld ra,24(sp) + 800279fc: 00813483 ld s1,8(sp) + 80027a00: 0001a697 auipc a3,0x1a + 80027a04: 74868693 addi a3,a3,1864 # 80042148 <_ZL9C96000PAL+0x738> + 80027a08: 00000613 li a2,0 + 80027a0c: 02010113 addi sp,sp,32 + 80027a10: e00d806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027a14 <_Z14Mapper192_InitP8CartInfo>: + 80027a14: 04c52703 lw a4,76(a0) + 80027a18: fe010113 addi sp,sp,-32 + 80027a1c: 00800693 li a3,8 + 80027a20: 10000613 li a2,256 + 80027a24: 20000593 li a1,512 + 80027a28: 00113c23 sd ra,24(sp) + 80027a2c: 00813823 sd s0,16(sp) + 80027a30: 00913423 sd s1,8(sp) + 80027a34: de4ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027a38: ffffe797 auipc a5,0xffffe + 80027a3c: ecc78793 addi a5,a5,-308 # 80025904 <_ZL6M192CWjh> + 80027a40: 001a5417 auipc s0,0x1a5 + 80027a44: 80040413 addi s0,s0,-2048 # 801cc240 + 80027a48: 001a5717 auipc a4,0x1a5 + 80027a4c: 82f73c23 sd a5,-1992(a4) # 801cc280 + 80027a50: 00001537 lui a0,0x1 + 80027a54: 000017b7 lui a5,0x1 + 80027a58: 00f42023 sw a5,0(s0) + 80027a5c: a11ea0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80027a60: 00042603 lw a2,0(s0) + 80027a64: 00050593 mv a1,a0 + 80027a68: 001a4497 auipc s1,0x1a4 + 80027a6c: 7d048493 addi s1,s1,2000 # 801cc238 + 80027a70: 00100693 li a3,1 + 80027a74: 01000513 li a0,16 + 80027a78: 00b4b023 sd a1,0(s1) + 80027a7c: b49e80ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 80027a80: 00042583 lw a1,0(s0) + 80027a84: 01013403 ld s0,16(sp) + 80027a88: 0004b503 ld a0,0(s1) + 80027a8c: 01813083 ld ra,24(sp) + 80027a90: 00813483 ld s1,8(sp) + 80027a94: 0001a697 auipc a3,0x1a + 80027a98: 6b468693 addi a3,a3,1716 # 80042148 <_ZL9C96000PAL+0x738> + 80027a9c: 00000613 li a2,0 + 80027aa0: 02010113 addi sp,sp,32 + 80027aa4: d6cd806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027aa8 <_Z14Mapper194_InitP8CartInfo>: + 80027aa8: 04c52703 lw a4,76(a0) # 104c <_entry_offset+0x104c> + 80027aac: fe010113 addi sp,sp,-32 + 80027ab0: 00800693 li a3,8 + 80027ab4: 10000613 li a2,256 + 80027ab8: 20000593 li a1,512 + 80027abc: 00113c23 sd ra,24(sp) + 80027ac0: 00813823 sd s0,16(sp) + 80027ac4: 00913423 sd s1,8(sp) + 80027ac8: d50ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027acc: ffffe797 auipc a5,0xffffe + 80027ad0: e6478793 addi a5,a5,-412 # 80025930 <_ZL6M194CWjh> + 80027ad4: 001a4717 auipc a4,0x1a4 + 80027ad8: 7af73623 sd a5,1964(a4) # 801cc280 + 80027adc: 00001537 lui a0,0x1 + 80027ae0: 000017b7 lui a5,0x1 + 80027ae4: 001a4417 auipc s0,0x1a4 + 80027ae8: 75c40413 addi s0,s0,1884 # 801cc240 + 80027aec: 8007879b addiw a5,a5,-2048 + 80027af0: 80050513 addi a0,a0,-2048 # 800 <_entry_offset+0x800> + 80027af4: 00f42023 sw a5,0(s0) + 80027af8: 975ea0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80027afc: 00042603 lw a2,0(s0) + 80027b00: 00050593 mv a1,a0 + 80027b04: 001a4497 auipc s1,0x1a4 + 80027b08: 73448493 addi s1,s1,1844 # 801cc238 + 80027b0c: 00100693 li a3,1 + 80027b10: 01000513 li a0,16 + 80027b14: 00b4b023 sd a1,0(s1) + 80027b18: aade80ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 80027b1c: 00042583 lw a1,0(s0) + 80027b20: 01013403 ld s0,16(sp) + 80027b24: 0004b503 ld a0,0(s1) + 80027b28: 01813083 ld ra,24(sp) + 80027b2c: 00813483 ld s1,8(sp) + 80027b30: 0001a697 auipc a3,0x1a + 80027b34: 61868693 addi a3,a3,1560 # 80042148 <_ZL9C96000PAL+0x738> + 80027b38: 00000613 li a2,0 + 80027b3c: 02010113 addi sp,sp,32 + 80027b40: cd0d806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027b44 <_Z14Mapper195_InitP8CartInfo>: + 80027b44: 04c52703 lw a4,76(a0) + 80027b48: fe010113 addi sp,sp,-32 + 80027b4c: 01000693 li a3,16 + 80027b50: 10000613 li a2,256 + 80027b54: 20000593 li a1,512 + 80027b58: 00113c23 sd ra,24(sp) + 80027b5c: 00813823 sd s0,16(sp) + 80027b60: 00913423 sd s1,8(sp) + 80027b64: 00050413 mv s0,a0 + 80027b68: cb0ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027b6c: ffffe797 auipc a5,0xffffe + 80027b70: de878793 addi a5,a5,-536 # 80025954 <_ZL6M195CWjh> + 80027b74: 001a4717 auipc a4,0x1a4 + 80027b78: 70f73623 sd a5,1804(a4) # 801cc280 + 80027b7c: fffff797 auipc a5,0xfffff + 80027b80: a9c78793 addi a5,a5,-1380 # 80026618 <_ZL9M195Powerv> + 80027b84: 001a4497 auipc s1,0x1a4 + 80027b88: 6bc48493 addi s1,s1,1724 # 801cc240 + 80027b8c: 00f43023 sd a5,0(s0) + 80027b90: 00001537 lui a0,0x1 + 80027b94: 000017b7 lui a5,0x1 + 80027b98: 00f4a023 sw a5,0(s1) + 80027b9c: 8d1ea0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80027ba0: 0004a603 lw a2,0(s1) + 80027ba4: 00050593 mv a1,a0 + 80027ba8: 001a4417 auipc s0,0x1a4 + 80027bac: 69040413 addi s0,s0,1680 # 801cc238 + 80027bb0: 00100693 li a3,1 + 80027bb4: 01000513 li a0,16 + 80027bb8: 00b43023 sd a1,0(s0) + 80027bbc: a09e80ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 80027bc0: 00043503 ld a0,0(s0) + 80027bc4: 01013403 ld s0,16(sp) + 80027bc8: 0004a583 lw a1,0(s1) + 80027bcc: 01813083 ld ra,24(sp) + 80027bd0: 00813483 ld s1,8(sp) + 80027bd4: 0001a697 auipc a3,0x1a + 80027bd8: 57468693 addi a3,a3,1396 # 80042148 <_ZL9C96000PAL+0x738> + 80027bdc: 00000613 li a2,0 + 80027be0: 02010113 addi sp,sp,32 + 80027be4: c2cd806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027be8 <_Z14Mapper196_InitP8CartInfo>: + 80027be8: ff010113 addi sp,sp,-16 + 80027bec: 00000713 li a4,0 + 80027bf0: 00000693 li a3,0 + 80027bf4: 08000613 li a2,128 + 80027bf8: 08000593 li a1,128 + 80027bfc: 00813023 sd s0,0(sp) + 80027c00: 00113423 sd ra,8(sp) + 80027c04: 00050413 mv s0,a0 + 80027c08: c10ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027c0c: ffffe797 auipc a5,0xffffe + 80027c10: 07c78793 addi a5,a5,124 # 80025c88 <_ZL6M196PWjh> + 80027c14: 001a4717 auipc a4,0x1a4 + 80027c18: 68f73223 sd a5,1668(a4) # 801cc298 + 80027c1c: fffff797 auipc a5,0xfffff + 80027c20: a5478793 addi a5,a5,-1452 # 80026670 <_ZL14Mapper196Powerv> + 80027c24: 00813083 ld ra,8(sp) + 80027c28: 00f43023 sd a5,0(s0) + 80027c2c: 00013403 ld s0,0(sp) + 80027c30: 01010113 addi sp,sp,16 + 80027c34: 00008067 ret + +0000000080027c38 <_Z14Mapper197_InitP8CartInfo>: + 80027c38: ff010113 addi sp,sp,-16 + 80027c3c: 00000713 li a4,0 + 80027c40: 00800693 li a3,8 + 80027c44: 20000613 li a2,512 + 80027c48: 08000593 li a1,128 + 80027c4c: 00113423 sd ra,8(sp) + 80027c50: bc8ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027c54: 00813083 ld ra,8(sp) + 80027c58: ffffe797 auipc a5,0xffffe + 80027c5c: 1dc78793 addi a5,a5,476 # 80025e34 <_ZL6M197CWjh> + 80027c60: 001a4717 auipc a4,0x1a4 + 80027c64: 62f73023 sd a5,1568(a4) # 801cc280 + 80027c68: 01010113 addi sp,sp,16 + 80027c6c: 00008067 ret + +0000000080027c70 <_Z14Mapper198_InitP8CartInfo>: + 80027c70: 04c52703 lw a4,76(a0) # 104c <_entry_offset+0x104c> + 80027c74: ff010113 addi sp,sp,-16 + 80027c78: 01000693 li a3,16 + 80027c7c: 00000613 li a2,0 + 80027c80: 40000593 li a1,1024 + 80027c84: 00813023 sd s0,0(sp) + 80027c88: 00113423 sd ra,8(sp) + 80027c8c: 00050413 mv s0,a0 + 80027c90: b88ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027c94: ffffe797 auipc a5,0xffffe + 80027c98: afc78793 addi a5,a5,-1284 # 80025790 <_ZL6M198PWjh> + 80027c9c: 001a4717 auipc a4,0x1a4 + 80027ca0: 5ef73e23 sd a5,1532(a4) # 801cc298 + 80027ca4: fffff797 auipc a5,0xfffff + 80027ca8: 97478793 addi a5,a5,-1676 # 80026618 <_ZL9M195Powerv> + 80027cac: 00813083 ld ra,8(sp) + 80027cb0: 00f43023 sd a5,0(s0) + 80027cb4: 00013403 ld s0,0(sp) + 80027cb8: 01010113 addi sp,sp,16 + 80027cbc: 00008067 ret + +0000000080027cc0 <_Z14Mapper205_InitP8CartInfo>: + 80027cc0: ff010113 addi sp,sp,-16 + 80027cc4: 00000713 li a4,0 + 80027cc8: 00800693 li a3,8 + 80027ccc: 08000613 li a2,128 + 80027cd0: 08000593 li a1,128 + 80027cd4: 00813023 sd s0,0(sp) + 80027cd8: 00113423 sd ra,8(sp) + 80027cdc: 00050413 mv s0,a0 + 80027ce0: b38ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027ce4: ffffe797 auipc a5,0xffffe + 80027ce8: ac078793 addi a5,a5,-1344 # 800257a4 <_ZL6M205PWjh> + 80027cec: 001a4717 auipc a4,0x1a4 + 80027cf0: 5af73623 sd a5,1452(a4) # 801cc298 + 80027cf4: ffffe797 auipc a5,0xffffe + 80027cf8: 88c78793 addi a5,a5,-1908 # 80025580 <_ZL6M205CWjh> + 80027cfc: 001a4717 auipc a4,0x1a4 + 80027d00: 58f73223 sd a5,1412(a4) # 801cc280 + 80027d04: fffff797 auipc a5,0xfffff + 80027d08: 9b878793 addi a5,a5,-1608 # 800266bc <_ZL9M205Powerv> + 80027d0c: 00f43023 sd a5,0(s0) + 80027d10: fffff797 auipc a5,0xfffff + 80027d14: ba078793 addi a5,a5,-1120 # 800268b0 <_ZL9M205Resetv> + 80027d18: 00f43423 sd a5,8(s0) + 80027d1c: 00013403 ld s0,0(sp) + 80027d20: 00813083 ld ra,8(sp) + 80027d24: 0001d697 auipc a3,0x1d + 80027d28: 7cc68693 addi a3,a3,1996 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 80027d2c: 00000613 li a2,0 + 80027d30: 00100593 li a1,1 + 80027d34: 001a4517 auipc a0,0x1a4 + 80027d38: 51c50513 addi a0,a0,1308 # 801cc250 + 80027d3c: 01010113 addi sp,sp,16 + 80027d40: ad0d806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027d44 <_Z14Mapper245_InitP8CartInfo>: + 80027d44: 04c52703 lw a4,76(a0) + 80027d48: ff010113 addi sp,sp,-16 + 80027d4c: 00800693 li a3,8 + 80027d50: 10000613 li a2,256 + 80027d54: 20000593 li a1,512 + 80027d58: 00813023 sd s0,0(sp) + 80027d5c: 00113423 sd ra,8(sp) + 80027d60: 00050413 mv s0,a0 + 80027d64: ab4ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027d68: ffffe797 auipc a5,0xffffe + 80027d6c: 27878793 addi a5,a5,632 # 80025fe0 <_ZL6M245CWjh> + 80027d70: 001a4717 auipc a4,0x1a4 + 80027d74: 50f73823 sd a5,1296(a4) # 801cc280 + 80027d78: ffffe797 auipc a5,0xffffe + 80027d7c: a4078793 addi a5,a5,-1472 # 800257b8 <_ZL6M245PWjh> + 80027d80: 001a4717 auipc a4,0x1a4 + 80027d84: 50f73c23 sd a5,1304(a4) # 801cc298 + 80027d88: fffff797 auipc a5,0xfffff + 80027d8c: 97878793 addi a5,a5,-1672 # 80026700 <_ZL9M245Powerv> + 80027d90: 00f43023 sd a5,0(s0) + 80027d94: 00013403 ld s0,0(sp) + 80027d98: 00813083 ld ra,8(sp) + 80027d9c: 0001d697 auipc a3,0x1d + 80027da0: 75468693 addi a3,a3,1876 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 80027da4: 00000613 li a2,0 + 80027da8: 00100593 li a1,1 + 80027dac: 001a4517 auipc a0,0x1a4 + 80027db0: 4a450513 addi a0,a0,1188 # 801cc250 + 80027db4: 01010113 addi sp,sp,16 + 80027db8: a58d806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027dbc <_Z14Mapper249_InitP8CartInfo>: + 80027dbc: 04c52703 lw a4,76(a0) + 80027dc0: ff010113 addi sp,sp,-16 + 80027dc4: 00800693 li a3,8 + 80027dc8: 10000613 li a2,256 + 80027dcc: 20000593 li a1,512 + 80027dd0: 00813023 sd s0,0(sp) + 80027dd4: 00113423 sd ra,8(sp) + 80027dd8: 00050413 mv s0,a0 + 80027ddc: a3cff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027de0: ffffd797 auipc a5,0xffffd + 80027de4: 7bc78793 addi a5,a5,1980 # 8002559c <_ZL6M249CWjh> + 80027de8: 001a4717 auipc a4,0x1a4 + 80027dec: 48f73c23 sd a5,1176(a4) # 801cc280 + 80027df0: ffffe797 auipc a5,0xffffe + 80027df4: 9e478793 addi a5,a5,-1564 # 800257d4 <_ZL6M249PWjh> + 80027df8: 001a4717 auipc a4,0x1a4 + 80027dfc: 4af73023 sd a5,1184(a4) # 801cc298 + 80027e00: fffff797 auipc a5,0xfffff + 80027e04: 90c78793 addi a5,a5,-1780 # 8002670c <_ZL9M249Powerv> + 80027e08: 00f43023 sd a5,0(s0) + 80027e0c: 00013403 ld s0,0(sp) + 80027e10: 00813083 ld ra,8(sp) + 80027e14: 0001d697 auipc a3,0x1d + 80027e18: 6dc68693 addi a3,a3,1756 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 80027e1c: 00000613 li a2,0 + 80027e20: 00100593 li a1,1 + 80027e24: 001a4517 auipc a0,0x1a4 + 80027e28: 42c50513 addi a0,a0,1068 # 801cc250 + 80027e2c: 01010113 addi sp,sp,16 + 80027e30: 9e0d806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027e34 <_Z14Mapper250_InitP8CartInfo>: + 80027e34: 04c52703 lw a4,76(a0) + 80027e38: ff010113 addi sp,sp,-16 + 80027e3c: 00800693 li a3,8 + 80027e40: 10000613 li a2,256 + 80027e44: 20000593 li a1,512 + 80027e48: 00813023 sd s0,0(sp) + 80027e4c: 00113423 sd ra,8(sp) + 80027e50: 00050413 mv s0,a0 + 80027e54: 9c4ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027e58: fffff797 auipc a5,0xfffff + 80027e5c: 8e478793 addi a5,a5,-1820 # 8002673c <_ZL10M250_Powerv> + 80027e60: 00813083 ld ra,8(sp) + 80027e64: 00f43023 sd a5,0(s0) + 80027e68: 00013403 ld s0,0(sp) + 80027e6c: 01010113 addi sp,sp,16 + 80027e70: 00008067 ret + +0000000080027e74 <_Z14Mapper254_InitP8CartInfo>: + 80027e74: 04c52703 lw a4,76(a0) + 80027e78: ff010113 addi sp,sp,-16 + 80027e7c: 00800693 li a3,8 + 80027e80: 08000613 li a2,128 + 80027e84: 08000593 li a1,128 + 80027e88: 00813023 sd s0,0(sp) + 80027e8c: 00113423 sd ra,8(sp) + 80027e90: 00050413 mv s0,a0 + 80027e94: 984ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027e98: fffff797 auipc a5,0xfffff + 80027e9c: 8e878793 addi a5,a5,-1816 # 80026780 <_ZL10M254_Powerv> + 80027ea0: 00f43023 sd a5,0(s0) + 80027ea4: 00013403 ld s0,0(sp) + 80027ea8: 00813083 ld ra,8(sp) + 80027eac: 0001d697 auipc a3,0x1d + 80027eb0: 64468693 addi a3,a3,1604 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 80027eb4: 00000613 li a2,0 + 80027eb8: 00200593 li a1,2 + 80027ebc: 001a4517 auipc a0,0x1a4 + 80027ec0: 39450513 addi a0,a0,916 # 801cc250 + 80027ec4: 01010113 addi sp,sp,16 + 80027ec8: 948d806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027ecc <_Z11TKSROM_InitP8CartInfo>: + 80027ecc: 04c52703 lw a4,76(a0) + 80027ed0: ff010113 addi sp,sp,-16 + 80027ed4: 00800693 li a3,8 + 80027ed8: 10000613 li a2,256 + 80027edc: 20000593 li a1,512 + 80027ee0: 00113423 sd ra,8(sp) + 80027ee4: 934ff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027ee8: ffffd797 auipc a5,0xffffd + 80027eec: 70c78793 addi a5,a5,1804 # 800255f4 <_ZL7TKSWRAPjh> + 80027ef0: 001a4717 auipc a4,0x1a4 + 80027ef4: 38f73823 sd a5,912(a4) # 801cc280 + 80027ef8: ffffd797 auipc a5,0xffffd + 80027efc: 45078793 addi a5,a5,1104 # 80025348 <_ZL10GENNOMWRAPh> + 80027f00: 00813083 ld ra,8(sp) + 80027f04: 001a4717 auipc a4,0x1a4 + 80027f08: 38f73623 sd a5,908(a4) # 801cc290 + 80027f0c: ffffd797 auipc a5,0xffffd + 80027f10: 4f478793 addi a5,a5,1268 # 80025400 <_ZL6TKSPPUj> + 80027f14: 001a4717 auipc a4,0x1a4 + 80027f18: 7ef73a23 sd a5,2036(a4) # 801cc708 + 80027f1c: 0001e697 auipc a3,0x1e + 80027f20: f2c68693 addi a3,a3,-212 # 80045e48 <_ZL8prg_perm+0x138> + 80027f24: 00000613 li a2,0 + 80027f28: 00100593 li a1,1 + 80027f2c: 001a4517 auipc a0,0x1a4 + 80027f30: 35050513 addi a0,a0,848 # 801cc27c <_ZL9PPUCHRBus> + 80027f34: 01010113 addi sp,sp,16 + 80027f38: 8d8d806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027f3c <_Z10TQROM_InitP8CartInfo>: + 80027f3c: fe010113 addi sp,sp,-32 + 80027f40: 00000713 li a4,0 + 80027f44: 00000693 li a3,0 + 80027f48: 04000613 li a2,64 + 80027f4c: 20000593 li a1,512 + 80027f50: 00113c23 sd ra,24(sp) + 80027f54: 00813823 sd s0,16(sp) + 80027f58: 00913423 sd s1,8(sp) + 80027f5c: 8bcff0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80027f60: ffffe797 auipc a5,0xffffe + 80027f64: 97878793 addi a5,a5,-1672 # 800258d8 <_ZL6TQWRAPjh> + 80027f68: 001a4417 auipc s0,0x1a4 + 80027f6c: 2d840413 addi s0,s0,728 # 801cc240 + 80027f70: 001a4717 auipc a4,0x1a4 + 80027f74: 30f73823 sd a5,784(a4) # 801cc280 + 80027f78: 00002537 lui a0,0x2 + 80027f7c: 000027b7 lui a5,0x2 + 80027f80: 00f42023 sw a5,0(s0) + 80027f84: ce8ea0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80027f88: 00042603 lw a2,0(s0) + 80027f8c: 00050593 mv a1,a0 + 80027f90: 001a4497 auipc s1,0x1a4 + 80027f94: 2a848493 addi s1,s1,680 # 801cc238 + 80027f98: 00100693 li a3,1 + 80027f9c: 01000513 li a0,16 + 80027fa0: 00b4b023 sd a1,0(s1) + 80027fa4: e20e80ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 80027fa8: 00042583 lw a1,0(s0) + 80027fac: 01013403 ld s0,16(sp) + 80027fb0: 0004b503 ld a0,0(s1) + 80027fb4: 01813083 ld ra,24(sp) + 80027fb8: 00813483 ld s1,8(sp) + 80027fbc: 0001a697 auipc a3,0x1a + 80027fc0: 18c68693 addi a3,a3,396 # 80042148 <_ZL9C96000PAL+0x738> + 80027fc4: 00000613 li a2,0 + 80027fc8: 02010113 addi sp,sp,32 + 80027fcc: 844d806f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080027fd0 <_Z14Mapper119_InitP8CartInfo>: + 80027fd0: f6dff06f j 80027f3c <_Z10TQROM_InitP8CartInfo> + +0000000080027fd4 <_ZL12M208ProtReadj>: + 80027fd4: 00357793 andi a5,a0,3 + 80027fd8: 001a4517 auipc a0,0x1a4 + 80027fdc: 27850513 addi a0,a0,632 # 801cc250 + 80027fe0: 00f50533 add a0,a0,a5 + 80027fe4: 00054503 lbu a0,0(a0) + 80027fe8: 00008067 ret + +0000000080027fec <_ZL9M208Powerv>: + 80027fec: ff010113 addi sp,sp,-16 + 80027ff0: 00300793 li a5,3 + 80027ff4: 00113423 sd ra,8(sp) + 80027ff8: 00813023 sd s0,0(sp) + 80027ffc: 001a4717 auipc a4,0x1a4 + 80028000: 24f70ca3 sb a5,601(a4) # 801cc255 + 80028004: 9bcfe0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 80028008: 00005537 lui a0,0x5 + 8002800c: fff50593 addi a1,a0,-1 # 4fff <_entry_offset+0x4fff> + 80028010: 00000617 auipc a2,0x0 + 80028014: 07860613 addi a2,a2,120 # 80028088 <_ZL9M208Writejh> + 80028018: 80050513 addi a0,a0,-2048 + 8002801c: 30d0b0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80028020: 00007537 lui a0,0x7 + 80028024: fff50593 addi a1,a0,-1 # 6fff <_entry_offset+0x6fff> + 80028028: 00000617 auipc a2,0x0 + 8002802c: 06060613 addi a2,a2,96 # 80028088 <_ZL9M208Writejh> + 80028030: 80050513 addi a0,a0,-2048 + 80028034: 2f50b0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80028038: 00006437 lui s0,0x6 + 8002803c: fff40593 addi a1,s0,-1 # 5fff <_entry_offset+0x5fff> + 80028040: 00000617 auipc a2,0x0 + 80028044: 07c60613 addi a2,a2,124 # 800280bc <_ZL13M208ProtWritejh> + 80028048: 00005537 lui a0,0x5 + 8002804c: 2dd0b0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80028050: fff40593 addi a1,s0,-1 + 80028054: 80040513 addi a0,s0,-2048 + 80028058: 00000617 auipc a2,0x0 + 8002805c: f7c60613 addi a2,a2,-132 # 80027fd4 <_ZL12M208ProtReadj> + 80028060: 1bd0b0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80028064: 00013403 ld s0,0(sp) + 80028068: 00813083 ld ra,8(sp) + 8002806c: 000105b7 lui a1,0x10 + 80028070: fffe8617 auipc a2,0xfffe8 + 80028074: 5f060613 addi a2,a2,1520 # 80010660 <_Z6CartBRj> + 80028078: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8002807c: 00008537 lui a0,0x8 + 80028080: 01010113 addi sp,sp,16 + 80028084: 1990b06f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080028088 <_ZL9M208Writejh>: + 80028088: 0035d793 srli a5,a1,0x3 + 8002808c: 0027f793 andi a5,a5,2 + 80028090: 0015f593 andi a1,a1,1 + 80028094: 00b7e5b3 or a1,a5,a1 + 80028098: 001a4517 auipc a0,0x1a4 + 8002809c: 1c454503 lbu a0,452(a0) # 801cc25c + 800280a0: 001a4797 auipc a5,0x1a4 + 800280a4: 1ab78aa3 sb a1,437(a5) # 801cc255 + 800280a8: dc5fd06f j 80025e6c <_Z10FixMMC3PRGi> + +00000000800280ac <_ZL6M208PWjh>: + 800280ac: 001a4597 auipc a1,0x1a4 + 800280b0: 1a95c583 lbu a1,425(a1) # 801cc255 + 800280b4: 00008537 lui a0,0x8 + 800280b8: d5de806f j 80010e14 <_Z8setprg32jj> + +00000000800280bc <_ZL13M208ProtWritejh>: + 800280bc: 000057b7 lui a5,0x5 + 800280c0: 7ff78793 addi a5,a5,2047 # 57ff <_entry_offset+0x57ff> + 800280c4: 00a7e863 bltu a5,a0,800280d4 <_ZL13M208ProtWritejh+0x18> + 800280c8: 001a4797 auipc a5,0x1a4 + 800280cc: 18b78623 sb a1,396(a5) # 801cc254 + 800280d0: 00008067 ret + 800280d4: 001a4797 auipc a5,0x1a4 + 800280d8: 17c78793 addi a5,a5,380 # 801cc250 + 800280dc: 0047c683 lbu a3,4(a5) + 800280e0: 0001e717 auipc a4,0x1e + 800280e4: d8070713 addi a4,a4,-640 # 80045e60 <_ZL3lut> + 800280e8: 00357513 andi a0,a0,3 + 800280ec: 00d70733 add a4,a4,a3 + 800280f0: 00074703 lbu a4,0(a4) + 800280f4: 00a78533 add a0,a5,a0 + 800280f8: 00e5c5b3 xor a1,a1,a4 + 800280fc: 00b50023 sb a1,0(a0) # 8000 <_entry_offset+0x8000> + 80028100: 00008067 ret + +0000000080028104 <_Z14Mapper208_InitP8CartInfo>: + 80028104: ff010113 addi sp,sp,-16 + 80028108: 00000693 li a3,0 + 8002810c: 10000613 li a2,256 + 80028110: 08000593 li a1,128 + 80028114: 00000713 li a4,0 + 80028118: 00813023 sd s0,0(sp) + 8002811c: 00113423 sd ra,8(sp) + 80028120: 00050413 mv s0,a0 + 80028124: ef5fe0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80028128: 00000797 auipc a5,0x0 + 8002812c: f8478793 addi a5,a5,-124 # 800280ac <_ZL6M208PWjh> + 80028130: 001a4717 auipc a4,0x1a4 + 80028134: 16f73423 sd a5,360(a4) # 801cc298 + 80028138: 00000797 auipc a5,0x0 + 8002813c: eb478793 addi a5,a5,-332 # 80027fec <_ZL9M208Powerv> + 80028140: 00f43023 sd a5,0(s0) + 80028144: 00013403 ld s0,0(sp) + 80028148: 00813083 ld ra,8(sp) + 8002814c: 0001d697 auipc a3,0x1d + 80028150: 3a468693 addi a3,a3,932 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 80028154: 00000613 li a2,0 + 80028158: 00600593 li a1,6 + 8002815c: 001a4517 auipc a0,0x1a4 + 80028160: 0f450513 addi a0,a0,244 # 801cc250 + 80028164: 01010113 addi sp,sp,16 + 80028168: ea9d706f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002816c <_ZL10VRC24_InitP8CartInfo>: + 8002816c: fe010113 addi sp,sp,-32 + 80028170: 00113c23 sd ra,24(sp) + 80028174: 00813823 sd s0,16(sp) + 80028178: 00913423 sd s1,8(sp) + 8002817c: 01213023 sd s2,0(sp) + 80028180: 00000797 auipc a5,0x0 + 80028184: 27078793 addi a5,a5,624 # 800283f0 <_ZL10VRC24Powerv> + 80028188: 00f53023 sd a5,0(a0) + 8002818c: 00000797 auipc a5,0x0 + 80028190: 22c78793 addi a5,a5,556 # 800283b8 <_ZL10VRC24Closev> + 80028194: 00f53823 sd a5,16(a0) + 80028198: 00000797 auipc a5,0x0 + 8002819c: 5ac78793 addi a5,a5,1452 # 80028744 <_Z12VRC24IRQHooki> + 800281a0: 001a4717 auipc a4,0x1a4 + 800281a4: 9af73023 sd a5,-1632(a4) # 801cbb40 + 800281a8: 00000797 auipc a5,0x0 + 800281ac: 20c78793 addi a5,a5,524 # 800283b4 <_ZL12StateRestorei> + 800281b0: 001a4497 auipc s1,0x1a4 + 800281b4: 12048493 addi s1,s1,288 # 801cc2d0 <_ZL8WRAMSIZE> + 800281b8: 00050413 mv s0,a0 + 800281bc: 001a4717 auipc a4,0x1a4 + 800281c0: 48f73e23 sd a5,1180(a4) # 801cc658 + 800281c4: 00002537 lui a0,0x2 + 800281c8: 000027b7 lui a5,0x2 + 800281cc: 00f4a023 sw a5,0(s1) + 800281d0: a9cea0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 800281d4: 0004a603 lw a2,0(s1) + 800281d8: 00050593 mv a1,a0 + 800281dc: 001a4917 auipc s2,0x1a4 + 800281e0: 0cc90913 addi s2,s2,204 # 801cc2a8 <_ZL4WRAM> + 800281e4: 00100693 li a3,1 + 800281e8: 01000513 li a0,16 + 800281ec: 00b93023 sd a1,0(s2) + 800281f0: b04e80ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 800281f4: 0004a583 lw a1,0(s1) + 800281f8: 00093503 ld a0,0(s2) + 800281fc: 0001d697 auipc a3,0x1d + 80028200: 12c68693 addi a3,a3,300 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80028204: 00000613 li a2,0 + 80028208: e09d70ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002820c: 04c42783 lw a5,76(s0) + 80028210: 00078a63 beqz a5,80028224 <_ZL10VRC24_InitP8CartInfo+0xb8> + 80028214: 00093703 ld a4,0(s2) + 80028218: 0004a783 lw a5,0(s1) + 8002821c: 00e43c23 sd a4,24(s0) + 80028220: 02f42c23 sw a5,56(s0) + 80028224: 01013403 ld s0,16(sp) + 80028228: 01813083 ld ra,24(sp) + 8002822c: 00813483 ld s1,8(sp) + 80028230: 00013903 ld s2,0(sp) + 80028234: 00000693 li a3,0 + 80028238: 00000613 li a2,0 + 8002823c: fff00593 li a1,-1 + 80028240: 00023517 auipc a0,0x23 + 80028244: 62050513 addi a0,a0,1568 # 8004b860 <_ZL9StateRegs> + 80028248: 02010113 addi sp,sp,32 + 8002824c: dc5d706f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080028250 <_ZL4Syncv>: + 80028250: fd010113 addi sp,sp,-48 + 80028254: 02813023 sd s0,32(sp) + 80028258: 00913c23 sd s1,24(sp) + 8002825c: 02113423 sd ra,40(sp) + 80028260: 01213823 sd s2,16(sp) + 80028264: 01313423 sd s3,8(sp) + 80028268: 01413023 sd s4,0(sp) + 8002826c: 001a4497 auipc s1,0x1a4 + 80028270: 05c48493 addi s1,s1,92 # 801cc2c8 <_ZL6prgreg> + 80028274: 001a4417 auipc s0,0x1a4 + 80028278: 06040413 addi s0,s0,96 # 801cc2d4 <_ZL8big_bank> + 8002827c: 0004c583 lbu a1,0(s1) + 80028280: 00044703 lbu a4,0(s0) + 80028284: 001a4797 auipc a5,0x1a4 + 80028288: 0467c783 lbu a5,70(a5) # 801cc2ca <_ZL6regcmd> + 8002828c: 0027f793 andi a5,a5,2 + 80028290: 00e5e5b3 or a1,a1,a4 + 80028294: 0ff5f593 andi a1,a1,255 + 80028298: 0a078463 beqz a5,80028340 <_ZL4Syncv+0xf0> + 8002829c: 0000c537 lui a0,0xc + 800282a0: ffce80ef jal ra,80010a9c <_Z7setprg8jj> + 800282a4: 00044583 lbu a1,0(s0) + 800282a8: 00008537 lui a0,0x8 + 800282ac: 01e5e593 ori a1,a1,30 + 800282b0: fece80ef jal ra,80010a9c <_Z7setprg8jj> + 800282b4: 00044783 lbu a5,0(s0) + 800282b8: 0014c583 lbu a1,1(s1) + 800282bc: 0000a537 lui a0,0xa + 800282c0: 00f5e5b3 or a1,a1,a5 + 800282c4: 0ff5f593 andi a1,a1,255 + 800282c8: fd4e80ef jal ra,80010a9c <_Z7setprg8jj> + 800282cc: 00044583 lbu a1,0(s0) + 800282d0: 0000e537 lui a0,0xe + 800282d4: 01f5e593 ori a1,a1,31 + 800282d8: fc4e80ef jal ra,80010a9c <_Z7setprg8jj> + 800282dc: 001a4797 auipc a5,0x1a4 + 800282e0: 8047b783 ld a5,-2044(a5) # 801cbae0 + 800282e4: 06078c63 beqz a5,8002835c <_ZL4Syncv+0x10c> + 800282e8: 00000513 li a0,0 + 800282ec: c19e80ef jal ra,80010f04 <_Z7setchr8j> + 800282f0: 001a4797 auipc a5,0x1a4 + 800282f4: fc17c783 lbu a5,-63(a5) # 801cc2b1 <_ZL4mirr> + 800282f8: 0037f793 andi a5,a5,3 + 800282fc: 00200713 li a4,2 + 80028300: 00200513 li a0,2 + 80028304: 00e78e63 beq a5,a4,80028320 <_ZL4Syncv+0xd0> + 80028308: 00300713 li a4,3 + 8002830c: 00300513 li a0,3 + 80028310: 00e78863 beq a5,a4,80028320 <_ZL4Syncv+0xd0> + 80028314: 00100713 li a4,1 + 80028318: 00100513 li a0,1 + 8002831c: 08e78863 beq a5,a4,800283ac <_ZL4Syncv+0x15c> + 80028320: 02013403 ld s0,32(sp) + 80028324: 02813083 ld ra,40(sp) + 80028328: 01813483 ld s1,24(sp) + 8002832c: 01013903 ld s2,16(sp) + 80028330: 00813983 ld s3,8(sp) + 80028334: 00013a03 ld s4,0(sp) + 80028338: 03010113 addi sp,sp,48 + 8002833c: d0de806f j 80011048 <_Z9setmirrori> + 80028340: 00008537 lui a0,0x8 + 80028344: f58e80ef jal ra,80010a9c <_Z7setprg8jj> + 80028348: 00044583 lbu a1,0(s0) + 8002834c: 0000c537 lui a0,0xc + 80028350: 01e5e593 ori a1,a1,30 + 80028354: f48e80ef jal ra,80010a9c <_Z7setprg8jj> + 80028358: f5dff06f j 800282b4 <_ZL4Syncv+0x64> + 8002835c: 0009f917 auipc s2,0x9f + 80028360: 31490913 addi s2,s2,788 # 800c7670 <_ZL5chrhi> + 80028364: 001a4497 auipc s1,0x1a4 + 80028368: f5448493 addi s1,s1,-172 # 801cc2b8 <_ZL6chrreg> + 8002836c: 00000413 li s0,0 + 80028370: 001a4a17 auipc s4,0x1a4 + 80028374: f40a0a13 addi s4,s4,-192 # 801cc2b0 <_ZL4is22> + 80028378: 000029b7 lui s3,0x2 + 8002837c: 00095783 lhu a5,0(s2) + 80028380: 0004c703 lbu a4,0(s1) + 80028384: 000a4583 lbu a1,0(s4) + 80028388: 00040513 mv a0,s0 + 8002838c: 00e7e7b3 or a5,a5,a4 + 80028390: 40b7d5bb sraw a1,a5,a1 + 80028394: 4004041b addiw s0,s0,1024 + 80028398: b0de80ef jal ra,80010ea4 <_Z7setchr1jj> + 8002839c: 00290913 addi s2,s2,2 + 800283a0: 00148493 addi s1,s1,1 + 800283a4: fd341ce3 bne s0,s3,8002837c <_ZL4Syncv+0x12c> + 800283a8: f49ff06f j 800282f0 <_ZL4Syncv+0xa0> + 800283ac: 00000513 li a0,0 + 800283b0: f71ff06f j 80028320 <_ZL4Syncv+0xd0> + +00000000800283b4 <_ZL12StateRestorei>: + 800283b4: e9dff06f j 80028250 <_ZL4Syncv> + +00000000800283b8 <_ZL10VRC24Closev>: + 800283b8: 001a4517 auipc a0,0x1a4 + 800283bc: ef053503 ld a0,-272(a0) # 801cc2a8 <_ZL4WRAM> + 800283c0: 02050263 beqz a0,800283e4 <_ZL10VRC24Closev+0x2c> + 800283c4: ff010113 addi sp,sp,-16 + 800283c8: 00113423 sd ra,8(sp) + 800283cc: 974ea0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 800283d0: 00813083 ld ra,8(sp) + 800283d4: 001a4797 auipc a5,0x1a4 + 800283d8: ec07ba23 sd zero,-300(a5) # 801cc2a8 <_ZL4WRAM> + 800283dc: 01010113 addi sp,sp,16 + 800283e0: 00008067 ret + 800283e4: 001a4797 auipc a5,0x1a4 + 800283e8: ec07b223 sd zero,-316(a5) # 801cc2a8 <_ZL4WRAM> + 800283ec: 00008067 ret + +00000000800283f0 <_ZL10VRC24Powerv>: + 800283f0: fe010113 addi sp,sp,-32 + 800283f4: 02000793 li a5,32 + 800283f8: 00813823 sd s0,16(sp) + 800283fc: 001a4717 auipc a4,0x1a4 + 80028400: ecf70c23 sb a5,-296(a4) # 801cc2d4 <_ZL8big_bank> + 80028404: 00113c23 sd ra,24(sp) + 80028408: 00913423 sd s1,8(sp) + 8002840c: 001a4417 auipc s0,0x1a4 + 80028410: e9c40413 addi s0,s0,-356 # 801cc2a8 <_ZL4WRAM> + 80028414: e3dff0ef jal ra,80028250 <_ZL4Syncv> + 80028418: 00043783 ld a5,0(s0) + 8002841c: 04078c63 beqz a5,80028474 <_ZL10VRC24Powerv+0x84> + 80028420: 00000613 li a2,0 + 80028424: 000065b7 lui a1,0x6 + 80028428: 01000513 li a0,16 + 8002842c: cbce80ef jal ra,800108e8 <_Z8setprg8rijj> + 80028430: 000084b7 lui s1,0x8 + 80028434: fffe8617 auipc a2,0xfffe8 + 80028438: 22c60613 addi a2,a2,556 # 80010660 <_Z6CartBRj> + 8002843c: fff48593 addi a1,s1,-1 # 7fff <_entry_offset+0x7fff> + 80028440: 00006537 lui a0,0x6 + 80028444: 5d80b0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80028448: fffe8617 auipc a2,0xfffe8 + 8002844c: 24460613 addi a2,a2,580 # 8001068c <_Z6CartBWjh> + 80028450: fff48593 addi a1,s1,-1 + 80028454: 00006537 lui a0,0x6 + 80028458: 6d00b0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002845c: 00043603 ld a2,0(s0) + 80028460: 001a4517 auipc a0,0x1a4 + 80028464: e7052503 lw a0,-400(a0) # 801cc2d0 <_ZL8WRAMSIZE> + 80028468: 000065b7 lui a1,0x6 + 8002846c: 00a5551b srliw a0,a0,0xa + 80028470: ba5d70ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 80028474: 00010437 lui s0,0x10 + 80028478: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002847c: fffe8617 auipc a2,0xfffe8 + 80028480: 1e460613 addi a2,a2,484 # 80010660 <_Z6CartBRj> + 80028484: 00008537 lui a0,0x8 + 80028488: 5940b0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002848c: fff40593 addi a1,s0,-1 + 80028490: 01013403 ld s0,16(sp) + 80028494: 01813083 ld ra,24(sp) + 80028498: 00813483 ld s1,8(sp) + 8002849c: 00000617 auipc a2,0x0 + 800284a0: 01460613 addi a2,a2,20 # 800284b0 <_ZL10VRC24Writejh> + 800284a4: 00008537 lui a0,0x8 + 800284a8: 02010113 addi sp,sp,32 + 800284ac: 67c0b06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +00000000800284b0 <_ZL10VRC24Writejh>: + 800284b0: ff010113 addi sp,sp,-16 + 800284b4: 001a4797 auipc a5,0x1a4 + 800284b8: e237c783 lbu a5,-477(a5) # 801cc2d7 <_ZL8reg2mask> + 800284bc: 00813023 sd s0,0(sp) + 800284c0: 0000f737 lui a4,0xf + 800284c4: 00113423 sd ra,8(sp) + 800284c8: 00f577b3 and a5,a0,a5 + 800284cc: 00058413 mv s0,a1 + 800284d0: 00e57733 and a4,a0,a4 + 800284d4: 00078463 beqz a5,800284dc <_ZL10VRC24Writejh+0x2c> + 800284d8: 00200793 li a5,2 + 800284dc: 001a4697 auipc a3,0x1a4 + 800284e0: dfa6c683 lbu a3,-518(a3) # 801cc2d6 <_ZL8reg1mask> + 800284e4: 00d57533 and a0,a0,a3 + 800284e8: 00a03533 snez a0,a0 + 800284ec: 00e56533 or a0,a0,a4 + 800284f0: 00a7e7b3 or a5,a5,a0 + 800284f4: ffff5737 lui a4,0xffff5 + 800284f8: 000036b7 lui a3,0x3 + 800284fc: 00f7063b addw a2,a4,a5 + 80028500: 00368693 addi a3,a3,3 # 3003 <_entry_offset+0x3003> + 80028504: 00060713 mv a4,a2 + 80028508: 02c6ea63 bltu a3,a2,8002853c <_ZL10VRC24Writejh+0x8c> + 8002850c: 001a3617 auipc a2,0x1a3 + 80028510: 5d463603 ld a2,1492(a2) # 801cbae0 + 80028514: 0004069b sext.w a3,s0 + 80028518: 12060663 beqz a2,80028644 <_ZL10VRC24Writejh+0x194> + 8002851c: 00269693 slli a3,a3,0x2 + 80028520: 0206f693 andi a3,a3,32 + 80028524: 001a4797 auipc a5,0x1a4 + 80028528: dad78823 sb a3,-592(a5) # 801cc2d4 <_ZL8big_bank> + 8002852c: 00013403 ld s0,0(sp) + 80028530: 00813083 ld ra,8(sp) + 80028534: 01010113 addi sp,sp,16 + 80028538: d19ff06f j 80028250 <_ZL4Syncv> + 8002853c: 0000f737 lui a4,0xf + 80028540: 1ae78e63 beq a5,a4,800286fc <_ZL10VRC24Writejh+0x24c> + 80028544: 04f76e63 bltu a4,a5,800285a0 <_ZL10VRC24Writejh+0xf0> + 80028548: 00009737 lui a4,0x9 + 8002854c: 00370693 addi a3,a4,3 # 9003 <_entry_offset+0x9003> + 80028550: 06f6ee63 bltu a3,a5,800285cc <_ZL10VRC24Writejh+0x11c> + 80028554: 00170713 addi a4,a4,1 + 80028558: 18f76c63 bltu a4,a5,800286f0 <_ZL10VRC24Writejh+0x240> + 8002855c: 00008737 lui a4,0x8 + 80028560: 00370693 addi a3,a4,3 # 8003 <_entry_offset+0x8003> + 80028564: 02f6f463 bgeu a3,a5,8002858c <_ZL10VRC24Writejh+0xdc> + 80028568: ffff7737 lui a4,0xffff7 + 8002856c: 00f707bb addw a5,a4,a5 + 80028570: 00100713 li a4,1 + 80028574: 00f76e63 bltu a4,a5,80028590 <_ZL10VRC24Writejh+0xe0> + 80028578: 0ff00793 li a5,255 + 8002857c: faf408e3 beq s0,a5,8002852c <_ZL10VRC24Writejh+0x7c> + 80028580: 001a4797 auipc a5,0x1a4 + 80028584: d28788a3 sb s0,-719(a5) # 801cc2b1 <_ZL4mirr> + 80028588: fa5ff06f j 8002852c <_ZL10VRC24Writejh+0x7c> + 8002858c: 08e7fe63 bgeu a5,a4,80028628 <_ZL10VRC24Writejh+0x178> + 80028590: 00813083 ld ra,8(sp) + 80028594: 00013403 ld s0,0(sp) + 80028598: 01010113 addi sp,sp,16 + 8002859c: 00008067 ret + 800285a0: 00270693 addi a3,a4,2 # ffffffffffff7002 <_end+0xffffffff7fe22002> + 800285a4: 10d78863 beq a5,a3,800286b4 <_ZL10VRC24Writejh+0x204> + 800285a8: 00370693 addi a3,a4,3 + 800285ac: 04d79663 bne a5,a3,800285f8 <_ZL10VRC24Writejh+0x148> + 800285b0: 00100513 li a0,1 + 800285b4: f9cd80ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 800285b8: 001a4797 auipc a5,0x1a4 + 800285bc: d087c783 lbu a5,-760(a5) # 801cc2c0 <_ZL6irqcmd> + 800285c0: 001a4717 auipc a4,0x1a4 + 800285c4: cef70023 sb a5,-800(a4) # 801cc2a0 <_ZL4IRQa> + 800285c8: fc9ff06f j 80028590 <_ZL10VRC24Writejh+0xe0> + 800285cc: ffff6737 lui a4,0xffff6 + 800285d0: 00f707bb addw a5,a4,a5 + 800285d4: 00300713 li a4,3 + 800285d8: faf76ce3 bltu a4,a5,80028590 <_ZL10VRC24Writejh+0xe0> + 800285dc: 001a4797 auipc a5,0x1a4 + 800285e0: cf97c783 lbu a5,-775(a5) # 801cc2d5 <_ZL8isPirate> + 800285e4: 14079063 bnez a5,80028724 <_ZL10VRC24Writejh+0x274> + 800285e8: 01f47413 andi s0,s0,31 + 800285ec: 001a4797 auipc a5,0x1a4 + 800285f0: cc878ea3 sb s0,-803(a5) # 801cc2c9 <_ZL6prgreg+0x1> + 800285f4: f39ff06f j 8002852c <_ZL10VRC24Writejh+0x7c> + 800285f8: 00170713 addi a4,a4,1 # ffffffffffff6001 <_end+0xffffffff7fe21001> + 800285fc: f8e79ae3 bne a5,a4,80028590 <_ZL10VRC24Writejh+0xe0> + 80028600: 00100513 li a0,1 + 80028604: f4cd80ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 80028608: 001a4717 auipc a4,0x1a4 + 8002860c: cc670713 addi a4,a4,-826 # 801cc2ce <_ZL8IRQLatch> + 80028610: 00074783 lbu a5,0(a4) + 80028614: 00441413 slli s0,s0,0x4 + 80028618: 00f7f793 andi a5,a5,15 + 8002861c: 0087e433 or s0,a5,s0 + 80028620: 00870023 sb s0,0(a4) + 80028624: f6dff06f j 80028590 <_ZL10VRC24Writejh+0xe0> + 80028628: 001a4797 auipc a5,0x1a4 + 8002862c: cad7c783 lbu a5,-851(a5) # 801cc2d5 <_ZL8isPirate> + 80028630: f60790e3 bnez a5,80028590 <_ZL10VRC24Writejh+0xe0> + 80028634: 01f47413 andi s0,s0,31 + 80028638: 001a4797 auipc a5,0x1a4 + 8002863c: c8878823 sb s0,-880(a5) # 801cc2c8 <_ZL6prgreg> + 80028640: eedff06f j 8002852c <_ZL10VRC24Writejh+0x7c> + 80028644: 0017d61b srliw a2,a5,0x1 + 80028648: 00167613 andi a2,a2,1 + 8002864c: 00b7571b srliw a4,a4,0xb + 80028650: 00e66733 or a4,a2,a4 + 80028654: 03071713 slli a4,a4,0x30 + 80028658: 03075713 srli a4,a4,0x30 + 8002865c: 001a4517 auipc a0,0x1a4 + 80028660: c5c50513 addi a0,a0,-932 # 801cc2b8 <_ZL6chrreg> + 80028664: 00e50533 add a0,a0,a4 + 80028668: 00054603 lbu a2,0(a0) + 8002866c: 00279793 slli a5,a5,0x2 + 80028670: 0047f793 andi a5,a5,4 + 80028674: 0f000593 li a1,240 + 80028678: 40f5d5bb sraw a1,a1,a5 + 8002867c: 00f47413 andi s0,s0,15 + 80028680: 00b67633 and a2,a2,a1 + 80028684: 00f4143b sllw s0,s0,a5 + 80028688: 00866433 or s0,a2,s0 + 8002868c: 00850023 sb s0,0(a0) + 80028690: e8078ee3 beqz a5,8002852c <_ZL10VRC24Writejh+0x7c> + 80028694: 00171713 slli a4,a4,0x1 + 80028698: 00469693 slli a3,a3,0x4 + 8002869c: 0009f797 auipc a5,0x9f + 800286a0: fd478793 addi a5,a5,-44 # 800c7670 <_ZL5chrhi> + 800286a4: 00e78733 add a4,a5,a4 + 800286a8: 1006f693 andi a3,a3,256 + 800286ac: 00d71023 sh a3,0(a4) + 800286b0: e7dff06f j 8002852c <_ZL10VRC24Writejh+0x7c> + 800286b4: 00100513 li a0,1 + 800286b8: e98d80ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 800286bc: 00247793 andi a5,s0,2 + 800286c0: 001a4717 auipc a4,0x1a4 + 800286c4: c0e74703 lbu a4,-1010(a4) # 801cc2ce <_ZL8IRQLatch> + 800286c8: 00147413 andi s0,s0,1 + 800286cc: 001a4697 auipc a3,0x1a4 + 800286d0: c0e69023 sh a4,-1024(a3) # 801cc2cc <_ZL8IRQCount> + 800286d4: 001a4697 auipc a3,0x1a4 + 800286d8: bc069f23 sh zero,-1058(a3) # 801cc2b2 <_ZL6acount> + 800286dc: 001a4717 auipc a4,0x1a4 + 800286e0: bcf70223 sb a5,-1084(a4) # 801cc2a0 <_ZL4IRQa> + 800286e4: 001a4797 auipc a5,0x1a4 + 800286e8: bc878e23 sb s0,-1060(a5) # 801cc2c0 <_ZL6irqcmd> + 800286ec: ea5ff06f j 80028590 <_ZL10VRC24Writejh+0xe0> + 800286f0: 001a4797 auipc a5,0x1a4 + 800286f4: bc878d23 sb s0,-1062(a5) # 801cc2ca <_ZL6regcmd> + 800286f8: e35ff06f j 8002852c <_ZL10VRC24Writejh+0x7c> + 800286fc: 00100513 li a0,1 + 80028700: e50d80ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 80028704: 001a4717 auipc a4,0x1a4 + 80028708: bca70713 addi a4,a4,-1078 # 801cc2ce <_ZL8IRQLatch> + 8002870c: 00074783 lbu a5,0(a4) + 80028710: 00f47413 andi s0,s0,15 + 80028714: ff07f793 andi a5,a5,-16 + 80028718: 0087e433 or s0,a5,s0 + 8002871c: 00870023 sb s0,0(a4) + 80028720: e71ff06f j 80028590 <_ZL10VRC24Writejh+0xe0> + 80028724: 00141413 slli s0,s0,0x1 + 80028728: 03e47413 andi s0,s0,62 + 8002872c: 001a4797 auipc a5,0x1a4 + 80028730: b9c78793 addi a5,a5,-1124 # 801cc2c8 <_ZL6prgreg> + 80028734: 00146713 ori a4,s0,1 + 80028738: 00878023 sb s0,0(a5) + 8002873c: 00e780a3 sb a4,1(a5) + 80028740: dedff06f j 8002852c <_ZL10VRC24Writejh+0x7c> + +0000000080028744 <_Z12VRC24IRQHooki>: + 80028744: 001a4797 auipc a5,0x1a4 + 80028748: b5c7c783 lbu a5,-1188(a5) # 801cc2a0 <_ZL4IRQa> + 8002874c: 0c078063 beqz a5,8002880c <_Z12VRC24IRQHooki+0xc8> + 80028750: fd010113 addi sp,sp,-48 + 80028754: 00913c23 sd s1,24(sp) + 80028758: 001a4497 auipc s1,0x1a4 + 8002875c: b5a48493 addi s1,s1,-1190 # 801cc2b2 <_ZL6acount> + 80028760: 0004d703 lhu a4,0(s1) + 80028764: 0015179b slliw a5,a0,0x1 + 80028768: 00a787bb addw a5,a5,a0 + 8002876c: 00e787bb addw a5,a5,a4 + 80028770: 03079793 slli a5,a5,0x30 + 80028774: 0307d793 srli a5,a5,0x30 + 80028778: 02113423 sd ra,40(sp) + 8002877c: 02813023 sd s0,32(sp) + 80028780: 01213823 sd s2,16(sp) + 80028784: 01313423 sd s3,8(sp) + 80028788: 00f49023 sh a5,0(s1) + 8002878c: 15400713 li a4,340 + 80028790: 0007861b sext.w a2,a5 + 80028794: 04f77e63 bgeu a4,a5,800287f0 <_Z12VRC24IRQHooki+0xac> + 80028798: 001a4917 auipc s2,0x1a4 + 8002879c: b3490913 addi s2,s2,-1228 # 801cc2cc <_ZL8IRQCount> + 800287a0: 00095683 lhu a3,0(s2) + 800287a4: 15400413 li s0,340 + 800287a8: 001a4997 auipc s3,0x1a4 + 800287ac: b2698993 addi s3,s3,-1242 # 801cc2ce <_ZL8IRQLatch> + 800287b0: 00000813 li a6,0 + 800287b4: 0200006f j 800287d4 <_Z12VRC24IRQHooki+0x90> + 800287b8: 03051793 slli a5,a0,0x30 + 800287bc: 03071693 slli a3,a4,0x30 + 800287c0: 0307d793 srli a5,a5,0x30 + 800287c4: 0306d693 srli a3,a3,0x30 + 800287c8: 00100813 li a6,1 + 800287cc: 04059263 bnez a1,80028810 <_Z12VRC24IRQHooki+0xcc> + 800287d0: 0007861b sext.w a2,a5 + 800287d4: 0016871b addiw a4,a3,1 + 800287d8: eab7851b addiw a0,a5,-341 + 800287dc: 10077593 andi a1,a4,256 + 800287e0: fcc46ce3 bltu s0,a2,800287b8 <_Z12VRC24IRQHooki+0x74> + 800287e4: 00080663 beqz a6,800287f0 <_Z12VRC24IRQHooki+0xac> + 800287e8: 00f49023 sh a5,0(s1) + 800287ec: 00d91023 sh a3,0(s2) + 800287f0: 02813083 ld ra,40(sp) + 800287f4: 02013403 ld s0,32(sp) + 800287f8: 01813483 ld s1,24(sp) + 800287fc: 01013903 ld s2,16(sp) + 80028800: 00813983 ld s3,8(sp) + 80028804: 03010113 addi sp,sp,48 + 80028808: 00008067 ret + 8002880c: 00008067 ret + 80028810: 00100513 li a0,1 + 80028814: 00f49023 sh a5,0(s1) + 80028818: 00d91023 sh a3,0(s2) + 8002881c: d1cd80ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 80028820: 0009c703 lbu a4,0(s3) + 80028824: 0004d783 lhu a5,0(s1) + 80028828: 03071693 slli a3,a4,0x30 + 8002882c: 0306d693 srli a3,a3,0x30 + 80028830: 00e91023 sh a4,0(s2) + 80028834: 0007861b sext.w a2,a5 + 80028838: f79ff06f j 800287b0 <_Z12VRC24IRQHooki+0x6c> + +000000008002883c <_Z13Mapper21_InitP8CartInfo>: + 8002883c: 001a4797 auipc a5,0x1a4 + 80028840: a8078ca3 sb zero,-1383(a5) # 801cc2d5 <_ZL8isPirate> + 80028844: 001a4797 auipc a5,0x1a4 + 80028848: a6078623 sb zero,-1428(a5) # 801cc2b0 <_ZL4is22> + 8002884c: 04200793 li a5,66 + 80028850: 001a4717 auipc a4,0x1a4 + 80028854: a8f70323 sb a5,-1402(a4) # 801cc2d6 <_ZL8reg1mask> + 80028858: f8400793 li a5,-124 + 8002885c: 001a4717 auipc a4,0x1a4 + 80028860: a6f70da3 sb a5,-1413(a4) # 801cc2d7 <_ZL8reg2mask> + 80028864: 909ff06f j 8002816c <_ZL10VRC24_InitP8CartInfo> + +0000000080028868 <_Z13Mapper22_InitP8CartInfo>: + 80028868: 00000717 auipc a4,0x0 + 8002886c: b8870713 addi a4,a4,-1144 # 800283f0 <_ZL10VRC24Powerv> + 80028870: 00100793 li a5,1 + 80028874: 00e53023 sd a4,0(a0) + 80028878: 001a4717 auipc a4,0x1a4 + 8002887c: a2f70c23 sb a5,-1480(a4) # 801cc2b0 <_ZL4is22> + 80028880: 001a4717 auipc a4,0x1a4 + 80028884: a4070aa3 sb zero,-1451(a4) # 801cc2d5 <_ZL8isPirate> + 80028888: 00200713 li a4,2 + 8002888c: 001a4817 auipc a6,0x1a4 + 80028890: a4e80523 sb a4,-1462(a6) # 801cc2d6 <_ZL8reg1mask> + 80028894: 001a4717 auipc a4,0x1a4 + 80028898: a4f701a3 sb a5,-1469(a4) # 801cc2d7 <_ZL8reg2mask> + 8002889c: 00000797 auipc a5,0x0 + 800288a0: b1878793 addi a5,a5,-1256 # 800283b4 <_ZL12StateRestorei> + 800288a4: 00000693 li a3,0 + 800288a8: 00000613 li a2,0 + 800288ac: fff00593 li a1,-1 + 800288b0: 00023517 auipc a0,0x23 + 800288b4: fb050513 addi a0,a0,-80 # 8004b860 <_ZL9StateRegs> + 800288b8: 001a4717 auipc a4,0x1a4 + 800288bc: daf73023 sd a5,-608(a4) # 801cc658 + 800288c0: f50d706f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800288c4 <_Z13Mapper23_InitP8CartInfo>: + 800288c4: 001a4797 auipc a5,0x1a4 + 800288c8: a00788a3 sb zero,-1519(a5) # 801cc2d5 <_ZL8isPirate> + 800288cc: 001a4797 auipc a5,0x1a4 + 800288d0: 9e078223 sb zero,-1564(a5) # 801cc2b0 <_ZL4is22> + 800288d4: 01500793 li a5,21 + 800288d8: 001a4717 auipc a4,0x1a4 + 800288dc: 9ef70f23 sb a5,-1538(a4) # 801cc2d6 <_ZL8reg1mask> + 800288e0: 02a00793 li a5,42 + 800288e4: 001a4717 auipc a4,0x1a4 + 800288e8: 9ef709a3 sb a5,-1549(a4) # 801cc2d7 <_ZL8reg2mask> + 800288ec: 881ff06f j 8002816c <_ZL10VRC24_InitP8CartInfo> + +00000000800288f0 <_Z13Mapper25_InitP8CartInfo>: + 800288f0: 001a4797 auipc a5,0x1a4 + 800288f4: 9e0782a3 sb zero,-1563(a5) # 801cc2d5 <_ZL8isPirate> + 800288f8: 001a4797 auipc a5,0x1a4 + 800288fc: 9a078c23 sb zero,-1608(a5) # 801cc2b0 <_ZL4is22> + 80028900: 00a00793 li a5,10 + 80028904: 001a4717 auipc a4,0x1a4 + 80028908: 9cf70923 sb a5,-1582(a4) # 801cc2d6 <_ZL8reg1mask> + 8002890c: 00500793 li a5,5 + 80028910: 001a4717 auipc a4,0x1a4 + 80028914: 9cf703a3 sb a5,-1593(a4) # 801cc2d7 <_ZL8reg2mask> + 80028918: 855ff06f j 8002816c <_ZL10VRC24_InitP8CartInfo> + +000000008002891c <_ZL12StateRestorei>: + 8002891c: 001a4317 auipc t1,0x1a4 + 80028920: 9cc33303 ld t1,-1588(t1) # 801cc2e8 <_ZL5WSync> + 80028924: 00030067 jr t1 + +0000000080028928 <_ZL10LatchClosev>: + 80028928: 001a4517 auipc a0,0x1a4 + 8002892c: 9b853503 ld a0,-1608(a0) # 801cc2e0 <_ZL4WRAM> + 80028930: 02050263 beqz a0,80028954 <_ZL10LatchClosev+0x2c> + 80028934: ff010113 addi sp,sp,-16 + 80028938: 00113423 sd ra,8(sp) + 8002893c: c05e90ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80028940: 00813083 ld ra,8(sp) + 80028944: 001a4797 auipc a5,0x1a4 + 80028948: 9807be23 sd zero,-1636(a5) # 801cc2e0 <_ZL4WRAM> + 8002894c: 01010113 addi sp,sp,16 + 80028950: 00008067 ret + 80028954: 001a4797 auipc a5,0x1a4 + 80028958: 9807b623 sd zero,-1652(a5) # 801cc2e0 <_ZL4WRAM> + 8002895c: 00008067 ret + +0000000080028960 <_ZL9UNROMSyncv>: + 80028960: ff010113 addi sp,sp,-16 + 80028964: 001a4597 auipc a1,0x1a4 + 80028968: 98c5c583 lbu a1,-1652(a1) # 801cc2f0 <_ZL6latche> + 8002896c: 00008537 lui a0,0x8 + 80028970: 00113423 sd ra,8(sp) + 80028974: ae4e80ef jal ra,80010c58 <_Z8setprg16jj> + 80028978: 0000c537 lui a0,0xc + 8002897c: fff00593 li a1,-1 + 80028980: ad8e80ef jal ra,80010c58 <_Z8setprg16jj> + 80028984: 00813083 ld ra,8(sp) + 80028988: 00000513 li a0,0 + 8002898c: 01010113 addi sp,sp,16 + 80028990: d74e806f j 80010f04 <_Z7setchr8j> + +0000000080028994 <_ZL6M8Syncv>: + 80028994: ff010113 addi sp,sp,-16 + 80028998: 00813023 sd s0,0(sp) + 8002899c: 001a4417 auipc s0,0x1a4 + 800289a0: 95440413 addi s0,s0,-1708 # 801cc2f0 <_ZL6latche> + 800289a4: 00044583 lbu a1,0(s0) + 800289a8: 00008537 lui a0,0x8 + 800289ac: 00113423 sd ra,8(sp) + 800289b0: 0035d593 srli a1,a1,0x3 + 800289b4: aa4e80ef jal ra,80010c58 <_Z8setprg16jj> + 800289b8: 0000c537 lui a0,0xc + 800289bc: 00100593 li a1,1 + 800289c0: a98e80ef jal ra,80010c58 <_Z8setprg16jj> + 800289c4: 00044503 lbu a0,0(s0) + 800289c8: 00013403 ld s0,0(sp) + 800289cc: 00813083 ld ra,8(sp) + 800289d0: 00357513 andi a0,a0,3 + 800289d4: 01010113 addi sp,sp,16 + 800289d8: d2ce806f j 80010f04 <_Z7setchr8j> + +00000000800289dc <_ZL7M70Syncv>: + 800289dc: ff010113 addi sp,sp,-16 + 800289e0: 00813023 sd s0,0(sp) + 800289e4: 001a4417 auipc s0,0x1a4 + 800289e8: 90c40413 addi s0,s0,-1780 # 801cc2f0 <_ZL6latche> + 800289ec: 00044583 lbu a1,0(s0) + 800289f0: 00008537 lui a0,0x8 + 800289f4: 00113423 sd ra,8(sp) + 800289f8: 0045d593 srli a1,a1,0x4 + 800289fc: a5ce80ef jal ra,80010c58 <_Z8setprg16jj> + 80028a00: 0000c537 lui a0,0xc + 80028a04: fff00593 li a1,-1 + 80028a08: a50e80ef jal ra,80010c58 <_Z8setprg16jj> + 80028a0c: 00044503 lbu a0,0(s0) + 80028a10: 00013403 ld s0,0(sp) + 80028a14: 00813083 ld ra,8(sp) + 80028a18: 00f57513 andi a0,a0,15 + 80028a1c: 01010113 addi sp,sp,16 + 80028a20: ce4e806f j 80010f04 <_Z7setchr8j> + +0000000080028a24 <_ZL11SSUNROMSyncv>: + 80028a24: 001a4597 auipc a1,0x1a4 + 80028a28: 8cc5c583 lbu a1,-1844(a1) # 801cc2f0 <_ZL6latche> + 80028a2c: ff010113 addi sp,sp,-16 + 80028a30: 0045d593 srli a1,a1,0x4 + 80028a34: 00008537 lui a0,0x8 + 80028a38: 00113423 sd ra,8(sp) + 80028a3c: a1ce80ef jal ra,80010c58 <_Z8setprg16jj> + 80028a40: 0000c537 lui a0,0xc + 80028a44: fff00593 li a1,-1 + 80028a48: a10e80ef jal ra,80010c58 <_Z8setprg16jj> + 80028a4c: 00813083 ld ra,8(sp) + 80028a50: 00000513 li a0,0 + 80028a54: 01010113 addi sp,sp,16 + 80028a58: cace806f j 80010f04 <_Z7setchr8j> + +0000000080028a5c <_ZL7M94Syncv>: + 80028a5c: 001a4597 auipc a1,0x1a4 + 80028a60: 8945c583 lbu a1,-1900(a1) # 801cc2f0 <_ZL6latche> + 80028a64: ff010113 addi sp,sp,-16 + 80028a68: 0025d593 srli a1,a1,0x2 + 80028a6c: 00008537 lui a0,0x8 + 80028a70: 00113423 sd ra,8(sp) + 80028a74: 9e4e80ef jal ra,80010c58 <_Z8setprg16jj> + 80028a78: 0000c537 lui a0,0xc + 80028a7c: fff00593 li a1,-1 + 80028a80: 9d8e80ef jal ra,80010c58 <_Z8setprg16jj> + 80028a84: 00813083 ld ra,8(sp) + 80028a88: 00000513 li a0,0 + 80028a8c: 01010113 addi sp,sp,16 + 80028a90: c74e806f j 80010f04 <_Z7setchr8j> + +0000000080028a94 <_ZL8M180Syncv>: + 80028a94: ff010113 addi sp,sp,-16 + 80028a98: 00000593 li a1,0 + 80028a9c: 00008537 lui a0,0x8 + 80028aa0: 00113423 sd ra,8(sp) + 80028aa4: 9b4e80ef jal ra,80010c58 <_Z8setprg16jj> + 80028aa8: 0000c537 lui a0,0xc + 80028aac: 001a4597 auipc a1,0x1a4 + 80028ab0: 8445c583 lbu a1,-1980(a1) # 801cc2f0 <_ZL6latche> + 80028ab4: 9a4e80ef jal ra,80010c58 <_Z8setprg16jj> + 80028ab8: 00813083 ld ra,8(sp) + 80028abc: 00000513 li a0,0 + 80028ac0: 01010113 addi sp,sp,16 + 80028ac4: c40e806f j 80010f04 <_Z7setchr8j> + +0000000080028ac8 <_ZL8M203Syncv>: + 80028ac8: ff010113 addi sp,sp,-16 + 80028acc: 00813023 sd s0,0(sp) + 80028ad0: 001a4417 auipc s0,0x1a4 + 80028ad4: 82040413 addi s0,s0,-2016 # 801cc2f0 <_ZL6latche> + 80028ad8: 00044583 lbu a1,0(s0) + 80028adc: 00008537 lui a0,0x8 + 80028ae0: 00113423 sd ra,8(sp) + 80028ae4: 4025d59b sraiw a1,a1,0x2 + 80028ae8: 0035f593 andi a1,a1,3 + 80028aec: 96ce80ef jal ra,80010c58 <_Z8setprg16jj> + 80028af0: 00044583 lbu a1,0(s0) + 80028af4: 0000c537 lui a0,0xc + 80028af8: 4025d59b sraiw a1,a1,0x2 + 80028afc: 0035f593 andi a1,a1,3 + 80028b00: 958e80ef jal ra,80010c58 <_Z8setprg16jj> + 80028b04: 00044503 lbu a0,0(s0) + 80028b08: 00013403 ld s0,0(sp) + 80028b0c: 00813083 ld ra,8(sp) + 80028b10: 00357513 andi a0,a0,3 + 80028b14: 01010113 addi sp,sp,16 + 80028b18: bece806f j 80010f04 <_Z7setchr8j> + +0000000080028b1c <_ZL10LatchWritejh>: + 80028b1c: ff010113 addi sp,sp,-16 + 80028b20: 00813023 sd s0,0(sp) + 80028b24: 00113423 sd ra,8(sp) + 80028b28: 001a3797 auipc a5,0x1a3 + 80028b2c: 7b17c783 lbu a5,1969(a5) # 801cc2d9 <_ZL12bus_conflict> + 80028b30: 00058413 mv s0,a1 + 80028b34: 02079263 bnez a5,80028b58 <_ZL10LatchWritejh+0x3c> + 80028b38: 00013403 ld s0,0(sp) + 80028b3c: 00813083 ld ra,8(sp) + 80028b40: 001a3797 auipc a5,0x1a3 + 80028b44: 7ab78823 sb a1,1968(a5) # 801cc2f0 <_ZL6latche> + 80028b48: 001a3317 auipc t1,0x1a3 + 80028b4c: 7a033303 ld t1,1952(t1) # 801cc2e8 <_ZL5WSync> + 80028b50: 01010113 addi sp,sp,16 + 80028b54: 00030067 jr t1 + 80028b58: b09e70ef jal ra,80010660 <_Z6CartBRj> + 80028b5c: 00857433 and s0,a0,s0 + 80028b60: 001a3797 auipc a5,0x1a3 + 80028b64: 78878823 sb s0,1936(a5) # 801cc2f0 <_ZL6latche> + 80028b68: 00013403 ld s0,0(sp) + 80028b6c: 00813083 ld ra,8(sp) + 80028b70: 001a3317 auipc t1,0x1a3 + 80028b74: 77833303 ld t1,1912(t1) # 801cc2e8 <_ZL5WSync> + 80028b78: 01010113 addi sp,sp,16 + 80028b7c: 00030067 jr t1 + +0000000080028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh>: + 80028b80: fd010113 addi sp,sp,-48 + 80028b84: 02813023 sd s0,32(sp) + 80028b88: 02113423 sd ra,40(sp) + 80028b8c: 00050413 mv s0,a0 + 80028b90: 00913c23 sd s1,24(sp) + 80028b94: 01213823 sd s2,16(sp) + 80028b98: 01313423 sd s3,8(sp) + 80028b9c: 00000897 auipc a7,0x0 + 80028ba0: 23c88893 addi a7,a7,572 # 80028dd8 <_ZL10LatchPowerv> + 80028ba4: 05052503 lw a0,80(a0) # c050 <_entry_offset+0xc050> + 80028ba8: 01143023 sd a7,0(s0) + 80028bac: 001a3897 auipc a7,0x1a3 + 80028bb0: 730886a3 sb a6,1837(a7) # 801cc2d9 <_ZL12bus_conflict> + 80028bb4: 001a3817 auipc a6,0x1a3 + 80028bb8: 72c80223 sb a2,1828(a6) # 801cc2d8 <_ZL10latcheinit> + 80028bbc: 001a3617 auipc a2,0x1a3 + 80028bc0: 72d61e23 sh a3,1852(a2) # 801cc2f8 <_ZL8addrreg0> + 80028bc4: 001a3697 auipc a3,0x1a3 + 80028bc8: 72e69b23 sh a4,1846(a3) # 801cc2fa <_ZL8addrreg1> + 80028bcc: 001a3717 auipc a4,0x1a3 + 80028bd0: 70b73e23 sd a1,1820(a4) # 801cc2e8 <_ZL5WSync> + 80028bd4: 00000717 auipc a4,0x0 + 80028bd8: d5470713 addi a4,a4,-684 # 80028928 <_ZL10LatchClosev> + 80028bdc: 00e43823 sd a4,16(s0) + 80028be0: 00000717 auipc a4,0x0 + 80028be4: d3c70713 addi a4,a4,-708 # 8002891c <_ZL12StateRestorei> + 80028be8: 001a4697 auipc a3,0x1a4 + 80028bec: a6e6b823 sd a4,-1424(a3) # 801cc658 + 80028bf0: 0c050863 beqz a0,80028cc0 <_ZL10Latch_InitP8CartInfoPFvvEhtthh+0x140> + 80028bf4: 05c42703 lw a4,92(s0) + 80028bf8: 05842683 lw a3,88(s0) + 80028bfc: 00d7073b addw a4,a4,a3 + 80028c00: 12e05463 blez a4,80028d28 <_ZL10Latch_InitP8CartInfoPFvvEhtthh+0x1a8> + 80028c04: 001a3497 auipc s1,0x1a3 + 80028c08: 6f048493 addi s1,s1,1776 # 801cc2f4 <_ZL8WRAMSIZE> + 80028c0c: 00002937 lui s2,0x2 + 80028c10: 00002537 lui a0,0x2 + 80028c14: 0124a023 sw s2,0(s1) + 80028c18: 855e90ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80028c1c: 0004a603 lw a2,0(s1) + 80028c20: 00050593 mv a1,a0 + 80028c24: 00100693 li a3,1 + 80028c28: 01000513 li a0,16 + 80028c2c: 001a3997 auipc s3,0x1a3 + 80028c30: 6b498993 addi s3,s3,1716 # 801cc2e0 <_ZL4WRAM> + 80028c34: 000084b7 lui s1,0x8 + 80028c38: 00b9b023 sd a1,0(s3) + 80028c3c: 8b9e70ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80028c40: fffe8617 auipc a2,0xfffe8 + 80028c44: a2060613 addi a2,a2,-1504 # 80010660 <_Z6CartBRj> + 80028c48: fff48593 addi a1,s1,-1 # 7fff <_entry_offset+0x7fff> + 80028c4c: 00006537 lui a0,0x6 + 80028c50: 5cd0a0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80028c54: fffe8617 auipc a2,0xfffe8 + 80028c58: a3860613 addi a2,a2,-1480 # 8001068c <_Z6CartBWjh> + 80028c5c: fff48593 addi a1,s1,-1 + 80028c60: 00006537 lui a0,0x6 + 80028c64: 6c50a0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80028c68: 00000613 li a2,0 + 80028c6c: 000065b7 lui a1,0x6 + 80028c70: 01000513 li a0,16 + 80028c74: c75e70ef jal ra,800108e8 <_Z8setprg8rijj> + 80028c78: 05c42783 lw a5,92(s0) + 80028c7c: 00078863 beqz a5,80028c8c <_ZL10Latch_InitP8CartInfoPFvvEhtthh+0x10c> + 80028c80: 0009b783 ld a5,0(s3) + 80028c84: 03242c23 sw s2,56(s0) + 80028c88: 00f43c23 sd a5,24(s0) + 80028c8c: 02013403 ld s0,32(sp) + 80028c90: 02813083 ld ra,40(sp) + 80028c94: 01813483 ld s1,24(sp) + 80028c98: 01013903 ld s2,16(sp) + 80028c9c: 00813983 ld s3,8(sp) + 80028ca0: 0001c697 auipc a3,0x1c + 80028ca4: 6c868693 addi a3,a3,1736 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 80028ca8: 00000613 li a2,0 + 80028cac: 00100593 li a1,1 + 80028cb0: 001a3517 auipc a0,0x1a3 + 80028cb4: 64050513 addi a0,a0,1600 # 801cc2f0 <_ZL6latche> + 80028cb8: 03010113 addi sp,sp,48 + 80028cbc: b54d706f j 80000010 <_Z10AddExStatePvjiPKc> + 80028cc0: fc0786e3 beqz a5,80028c8c <_ZL10Latch_InitP8CartInfoPFvvEhtthh+0x10c> + 80028cc4: 000027b7 lui a5,0x2 + 80028cc8: 001a3497 auipc s1,0x1a3 + 80028ccc: 62c48493 addi s1,s1,1580 # 801cc2f4 <_ZL8WRAMSIZE> + 80028cd0: 00002537 lui a0,0x2 + 80028cd4: 00f4a023 sw a5,0(s1) + 80028cd8: f94e90ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80028cdc: 0004a603 lw a2,0(s1) + 80028ce0: 00050593 mv a1,a0 + 80028ce4: 001a3917 auipc s2,0x1a3 + 80028ce8: 5fc90913 addi s2,s2,1532 # 801cc2e0 <_ZL4WRAM> + 80028cec: 01000513 li a0,16 + 80028cf0: 00100693 li a3,1 + 80028cf4: 00b93023 sd a1,0(s2) + 80028cf8: ffce70ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80028cfc: 04c42783 lw a5,76(s0) + 80028d00: 00093503 ld a0,0(s2) + 80028d04: 0004a583 lw a1,0(s1) + 80028d08: 00078663 beqz a5,80028d14 <_ZL10Latch_InitP8CartInfoPFvvEhtthh+0x194> + 80028d0c: 00a43c23 sd a0,24(s0) + 80028d10: 02b42c23 sw a1,56(s0) + 80028d14: 0001c697 auipc a3,0x1c + 80028d18: 61468693 addi a3,a3,1556 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80028d1c: 00000613 li a2,0 + 80028d20: af0d70ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80028d24: f69ff06f j 80028c8c <_ZL10Latch_InitP8CartInfoPFvvEhtthh+0x10c> + 80028d28: f60782e3 beqz a5,80028c8c <_ZL10Latch_InitP8CartInfoPFvvEhtthh+0x10c> + 80028d2c: ed9ff06f j 80028c04 <_ZL10Latch_InitP8CartInfoPFvvEhtthh+0x84> + +0000000080028d30 <_ZL9NROMPowerv>: + 80028d30: ff010113 addi sp,sp,-16 + 80028d34: 00000613 li a2,0 + 80028d38: 000065b7 lui a1,0x6 + 80028d3c: 01000513 li a0,16 + 80028d40: 00113423 sd ra,8(sp) + 80028d44: 00813023 sd s0,0(sp) + 80028d48: ba1e70ef jal ra,800108e8 <_Z8setprg8rijj> + 80028d4c: ffe00593 li a1,-2 + 80028d50: 00008537 lui a0,0x8 + 80028d54: f05e70ef jal ra,80010c58 <_Z8setprg16jj> + 80028d58: fff00593 li a1,-1 + 80028d5c: 0000c537 lui a0,0xc + 80028d60: ef9e70ef jal ra,80010c58 <_Z8setprg16jj> + 80028d64: 00000513 li a0,0 + 80028d68: 99ce80ef jal ra,80010f04 <_Z7setchr8j> + 80028d6c: 00008437 lui s0,0x8 + 80028d70: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 80028d74: fffe8617 auipc a2,0xfffe8 + 80028d78: 8ec60613 addi a2,a2,-1812 # 80010660 <_Z6CartBRj> + 80028d7c: 00006537 lui a0,0x6 + 80028d80: 49d0a0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80028d84: fff40593 addi a1,s0,-1 + 80028d88: fffe8617 auipc a2,0xfffe8 + 80028d8c: 90460613 addi a2,a2,-1788 # 8001068c <_Z6CartBWjh> + 80028d90: 00006537 lui a0,0x6 + 80028d94: 5950a0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80028d98: 000105b7 lui a1,0x10 + 80028d9c: fffe8617 auipc a2,0xfffe8 + 80028da0: 8c460613 addi a2,a2,-1852 # 80010660 <_Z6CartBRj> + 80028da4: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80028da8: 00008537 lui a0,0x8 + 80028dac: 4710a0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80028db0: 00013403 ld s0,0(sp) + 80028db4: 00813083 ld ra,8(sp) + 80028db8: 001a3517 auipc a0,0x1a3 + 80028dbc: 53c52503 lw a0,1340(a0) # 801cc2f4 <_ZL8WRAMSIZE> + 80028dc0: 001a3617 auipc a2,0x1a3 + 80028dc4: 52063603 ld a2,1312(a2) # 801cc2e0 <_ZL4WRAM> + 80028dc8: 000065b7 lui a1,0x6 + 80028dcc: 00a5551b srliw a0,a0,0xa + 80028dd0: 01010113 addi sp,sp,16 + 80028dd4: a40d706f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +0000000080028dd8 <_ZL10LatchPowerv>: + 80028dd8: ff010113 addi sp,sp,-16 + 80028ddc: 001a3797 auipc a5,0x1a3 + 80028de0: 4fc7c783 lbu a5,1276(a5) # 801cc2d8 <_ZL10latcheinit> + 80028de4: 00813023 sd s0,0(sp) + 80028de8: 001a3717 auipc a4,0x1a3 + 80028dec: 50f70423 sb a5,1288(a4) # 801cc2f0 <_ZL6latche> + 80028df0: 00113423 sd ra,8(sp) + 80028df4: 001a3797 auipc a5,0x1a3 + 80028df8: 4f47b783 ld a5,1268(a5) # 801cc2e8 <_ZL5WSync> + 80028dfc: 001a3417 auipc s0,0x1a3 + 80028e00: 4e440413 addi s0,s0,1252 # 801cc2e0 <_ZL4WRAM> + 80028e04: 000780e7 jalr a5 + 80028e08: 00043783 ld a5,0(s0) + 80028e0c: 06078a63 beqz a5,80028e80 <_ZL10LatchPowerv+0xa8> + 80028e10: 000105b7 lui a1,0x10 + 80028e14: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80028e18: fffe8617 auipc a2,0xfffe8 + 80028e1c: 84860613 addi a2,a2,-1976 # 80010660 <_Z6CartBRj> + 80028e20: 00006537 lui a0,0x6 + 80028e24: 3f90a0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80028e28: 000085b7 lui a1,0x8 + 80028e2c: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80028e30: fffe8617 auipc a2,0xfffe8 + 80028e34: 85c60613 addi a2,a2,-1956 # 8001068c <_Z6CartBWjh> + 80028e38: 00006537 lui a0,0x6 + 80028e3c: 4ed0a0ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80028e40: 00043603 ld a2,0(s0) + 80028e44: 001a3517 auipc a0,0x1a3 + 80028e48: 4b052503 lw a0,1200(a0) # 801cc2f4 <_ZL8WRAMSIZE> + 80028e4c: 000065b7 lui a1,0x6 + 80028e50: 00a5551b srliw a0,a0,0xa + 80028e54: 9c0d70ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 80028e58: 00013403 ld s0,0(sp) + 80028e5c: 00813083 ld ra,8(sp) + 80028e60: 001a3597 auipc a1,0x1a3 + 80028e64: 49a5d583 lhu a1,1178(a1) # 801cc2fa <_ZL8addrreg1> + 80028e68: 001a3517 auipc a0,0x1a3 + 80028e6c: 49055503 lhu a0,1168(a0) # 801cc2f8 <_ZL8addrreg0> + 80028e70: 00000617 auipc a2,0x0 + 80028e74: cac60613 addi a2,a2,-852 # 80028b1c <_ZL10LatchWritejh> + 80028e78: 01010113 addi sp,sp,16 + 80028e7c: 4ad0a06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80028e80: 000105b7 lui a1,0x10 + 80028e84: fffe7617 auipc a2,0xfffe7 + 80028e88: 7dc60613 addi a2,a2,2012 # 80010660 <_Z6CartBRj> + 80028e8c: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80028e90: 00008537 lui a0,0x8 + 80028e94: 3890a0ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80028e98: fc1ff06f j 80028e58 <_ZL10LatchPowerv+0x80> + +0000000080028e9c <_ZL9CNROMSyncv>: + 80028e9c: ff010113 addi sp,sp,-16 + 80028ea0: 001a3517 auipc a0,0x1a3 + 80028ea4: 45054503 lbu a0,1104(a0) # 801cc2f0 <_ZL6latche> + 80028ea8: 00113423 sd ra,8(sp) + 80028eac: 858e80ef jal ra,80010f04 <_Z7setchr8j> + 80028eb0: 00000593 li a1,0 + 80028eb4: 00008537 lui a0,0x8 + 80028eb8: f5de70ef jal ra,80010e14 <_Z8setprg32jj> + 80028ebc: 00813083 ld ra,8(sp) + 80028ec0: 00000613 li a2,0 + 80028ec4: 000065b7 lui a1,0x6 + 80028ec8: 01000513 li a0,16 + 80028ecc: 01010113 addi sp,sp,16 + 80028ed0: a19e706f j 800108e8 <_Z8setprg8rijj> + +0000000080028ed4 <_ZL7M11Syncv>: + 80028ed4: ff010113 addi sp,sp,-16 + 80028ed8: 00813023 sd s0,0(sp) + 80028edc: 001a3417 auipc s0,0x1a3 + 80028ee0: 41440413 addi s0,s0,1044 # 801cc2f0 <_ZL6latche> + 80028ee4: 00044583 lbu a1,0(s0) + 80028ee8: 00008537 lui a0,0x8 + 80028eec: 00113423 sd ra,8(sp) + 80028ef0: 00f5f593 andi a1,a1,15 + 80028ef4: f21e70ef jal ra,80010e14 <_Z8setprg32jj> + 80028ef8: 00044503 lbu a0,0(s0) + 80028efc: 00013403 ld s0,0(sp) + 80028f00: 00813083 ld ra,8(sp) + 80028f04: 00455513 srli a0,a0,0x4 + 80028f08: 01010113 addi sp,sp,16 + 80028f0c: ff9e706f j 80010f04 <_Z7setchr8j> + +0000000080028f10 <_ZL7M38Syncv>: + 80028f10: ff010113 addi sp,sp,-16 + 80028f14: 00813023 sd s0,0(sp) + 80028f18: 001a3417 auipc s0,0x1a3 + 80028f1c: 3d840413 addi s0,s0,984 # 801cc2f0 <_ZL6latche> + 80028f20: 00044583 lbu a1,0(s0) + 80028f24: 00008537 lui a0,0x8 + 80028f28: 00113423 sd ra,8(sp) + 80028f2c: 0035f593 andi a1,a1,3 + 80028f30: ee5e70ef jal ra,80010e14 <_Z8setprg32jj> + 80028f34: 00044503 lbu a0,0(s0) + 80028f38: 00013403 ld s0,0(sp) + 80028f3c: 00813083 ld ra,8(sp) + 80028f40: 00255513 srli a0,a0,0x2 + 80028f44: 01010113 addi sp,sp,16 + 80028f48: fbde706f j 80010f04 <_Z7setchr8j> + +0000000080028f4c <_ZL9MHROMSyncv>: + 80028f4c: ff010113 addi sp,sp,-16 + 80028f50: 00813023 sd s0,0(sp) + 80028f54: 001a3417 auipc s0,0x1a3 + 80028f58: 39c40413 addi s0,s0,924 # 801cc2f0 <_ZL6latche> + 80028f5c: 00044583 lbu a1,0(s0) + 80028f60: 00008537 lui a0,0x8 + 80028f64: 00113423 sd ra,8(sp) + 80028f68: 0045d593 srli a1,a1,0x4 + 80028f6c: ea9e70ef jal ra,80010e14 <_Z8setprg32jj> + 80028f70: 00044503 lbu a0,0(s0) + 80028f74: 00013403 ld s0,0(sp) + 80028f78: 00813083 ld ra,8(sp) + 80028f7c: 00f57513 andi a0,a0,15 + 80028f80: 01010113 addi sp,sp,16 + 80028f84: f81e706f j 80010f04 <_Z7setchr8j> + +0000000080028f88 <_ZL7M86Syncv>: + 80028f88: ff010113 addi sp,sp,-16 + 80028f8c: 00813023 sd s0,0(sp) + 80028f90: 001a3417 auipc s0,0x1a3 + 80028f94: 36040413 addi s0,s0,864 # 801cc2f0 <_ZL6latche> + 80028f98: 00044583 lbu a1,0(s0) + 80028f9c: 00008537 lui a0,0x8 + 80028fa0: 00113423 sd ra,8(sp) + 80028fa4: 4045d59b sraiw a1,a1,0x4 + 80028fa8: 0035f593 andi a1,a1,3 + 80028fac: e69e70ef jal ra,80010e14 <_Z8setprg32jj> + 80028fb0: 00044783 lbu a5,0(s0) + 80028fb4: 00013403 ld s0,0(sp) + 80028fb8: 00813083 ld ra,8(sp) + 80028fbc: 4047d51b sraiw a0,a5,0x4 + 80028fc0: 00457513 andi a0,a0,4 + 80028fc4: 0037f793 andi a5,a5,3 + 80028fc8: 00a7e533 or a0,a5,a0 + 80028fcc: 01010113 addi sp,sp,16 + 80028fd0: f35e706f j 80010f04 <_Z7setchr8j> + +0000000080028fd4 <_ZL7M87Syncv>: + 80028fd4: ff010113 addi sp,sp,-16 + 80028fd8: 00008537 lui a0,0x8 + 80028fdc: 00000593 li a1,0 + 80028fe0: 00113423 sd ra,8(sp) + 80028fe4: e31e70ef jal ra,80010e14 <_Z8setprg32jj> + 80028fe8: 001a3797 auipc a5,0x1a3 + 80028fec: 3087c783 lbu a5,776(a5) # 801cc2f0 <_ZL6latche> + 80028ff0: 00813083 ld ra,8(sp) + 80028ff4: 4017d51b sraiw a0,a5,0x1 + 80028ff8: 0017979b slliw a5,a5,0x1 + 80028ffc: 00157513 andi a0,a0,1 + 80029000: 0027f793 andi a5,a5,2 + 80029004: 00f56533 or a0,a0,a5 + 80029008: 01010113 addi sp,sp,16 + 8002900c: ef9e706f j 80010f04 <_Z7setchr8j> + +0000000080029010 <_ZL8M101Syncv>: + 80029010: ff010113 addi sp,sp,-16 + 80029014: 00008537 lui a0,0x8 + 80029018: 00000593 li a1,0 + 8002901c: 00113423 sd ra,8(sp) + 80029020: df5e70ef jal ra,80010e14 <_Z8setprg32jj> + 80029024: 00813083 ld ra,8(sp) + 80029028: 001a3517 auipc a0,0x1a3 + 8002902c: 2c854503 lbu a0,712(a0) # 801cc2f0 <_ZL6latche> + 80029030: 01010113 addi sp,sp,16 + 80029034: ed1e706f j 80010f04 <_Z7setchr8j> + +0000000080029038 <_ZL8M107Syncv>: + 80029038: ff010113 addi sp,sp,-16 + 8002903c: 00813023 sd s0,0(sp) + 80029040: 001a3417 auipc s0,0x1a3 + 80029044: 2b040413 addi s0,s0,688 # 801cc2f0 <_ZL6latche> + 80029048: 00044583 lbu a1,0(s0) + 8002904c: 00008537 lui a0,0x8 + 80029050: 00113423 sd ra,8(sp) + 80029054: 4015d59b sraiw a1,a1,0x1 + 80029058: 0035f593 andi a1,a1,3 + 8002905c: db9e70ef jal ra,80010e14 <_Z8setprg32jj> + 80029060: 00044503 lbu a0,0(s0) + 80029064: 00013403 ld s0,0(sp) + 80029068: 00813083 ld ra,8(sp) + 8002906c: 00757513 andi a0,a0,7 + 80029070: 01010113 addi sp,sp,16 + 80029074: e91e706f j 80010f04 <_Z7setchr8j> + +0000000080029078 <_ZL8M113Syncv>: + 80029078: ff010113 addi sp,sp,-16 + 8002907c: 00813023 sd s0,0(sp) + 80029080: 001a3417 auipc s0,0x1a3 + 80029084: 27040413 addi s0,s0,624 # 801cc2f0 <_ZL6latche> + 80029088: 00044583 lbu a1,0(s0) + 8002908c: 00008537 lui a0,0x8 + 80029090: 00113423 sd ra,8(sp) + 80029094: 4035d59b sraiw a1,a1,0x3 + 80029098: 0075f593 andi a1,a1,7 + 8002909c: d79e70ef jal ra,80010e14 <_Z8setprg32jj> + 800290a0: 00044783 lbu a5,0(s0) + 800290a4: 00013403 ld s0,0(sp) + 800290a8: 00813083 ld ra,8(sp) + 800290ac: 4037d51b sraiw a0,a5,0x3 + 800290b0: 00857513 andi a0,a0,8 + 800290b4: 0077f793 andi a5,a5,7 + 800290b8: 00a7e533 or a0,a5,a0 + 800290bc: 01010113 addi sp,sp,16 + 800290c0: e45e706f j 80010f04 <_Z7setchr8j> + +00000000800290c4 <_ZL8M240Syncv>: + 800290c4: ff010113 addi sp,sp,-16 + 800290c8: 00000613 li a2,0 + 800290cc: 000065b7 lui a1,0x6 + 800290d0: 01000513 li a0,16 + 800290d4: 00113423 sd ra,8(sp) + 800290d8: 00813023 sd s0,0(sp) + 800290dc: 80de70ef jal ra,800108e8 <_Z8setprg8rijj> + 800290e0: 001a3417 auipc s0,0x1a3 + 800290e4: 21040413 addi s0,s0,528 # 801cc2f0 <_ZL6latche> + 800290e8: 00044583 lbu a1,0(s0) + 800290ec: 00008537 lui a0,0x8 + 800290f0: 0045d593 srli a1,a1,0x4 + 800290f4: d21e70ef jal ra,80010e14 <_Z8setprg32jj> + 800290f8: 00044503 lbu a0,0(s0) + 800290fc: 00013403 ld s0,0(sp) + 80029100: 00813083 ld ra,8(sp) + 80029104: 00f57513 andi a0,a0,15 + 80029108: 01010113 addi sp,sp,16 + 8002910c: df9e706f j 80010f04 <_Z7setchr8j> + +0000000080029110 <_ZL8M241Syncv>: + 80029110: ff010113 addi sp,sp,-16 + 80029114: 00000513 li a0,0 + 80029118: 00113423 sd ra,8(sp) + 8002911c: de9e70ef jal ra,80010f04 <_Z7setchr8j> + 80029120: 000065b7 lui a1,0x6 + 80029124: 00000613 li a2,0 + 80029128: 01000513 li a0,16 + 8002912c: fbce70ef jal ra,800108e8 <_Z8setprg8rijj> + 80029130: 001a3597 auipc a1,0x1a3 + 80029134: 1c05c583 lbu a1,448(a1) # 801cc2f0 <_ZL6latche> + 80029138: 0185979b slliw a5,a1,0x18 + 8002913c: 4187d79b sraiw a5,a5,0x18 + 80029140: 0007d463 bgez a5,80029148 <_ZL8M241Syncv+0x38> + 80029144: 0085e593 ori a1,a1,8 + 80029148: 00813083 ld ra,8(sp) + 8002914c: 00008537 lui a0,0x8 + 80029150: 01010113 addi sp,sp,16 + 80029154: cc1e706f j 80010e14 <_Z8setprg32jj> + +0000000080029158 <_ZL9ANROMSyncv>: + 80029158: ff010113 addi sp,sp,-16 + 8002915c: 00813023 sd s0,0(sp) + 80029160: 001a3417 auipc s0,0x1a3 + 80029164: 19040413 addi s0,s0,400 # 801cc2f0 <_ZL6latche> + 80029168: 00044583 lbu a1,0(s0) + 8002916c: 00008537 lui a0,0x8 + 80029170: 00113423 sd ra,8(sp) + 80029174: 00f5f593 andi a1,a1,15 + 80029178: c9de70ef jal ra,80010e14 <_Z8setprg32jj> + 8002917c: 00044503 lbu a0,0(s0) + 80029180: 4045551b sraiw a0,a0,0x4 + 80029184: 00157513 andi a0,a0,1 + 80029188: 0025051b addiw a0,a0,2 + 8002918c: ebde70ef jal ra,80011048 <_Z9setmirrori> + 80029190: 00013403 ld s0,0(sp) + 80029194: 00813083 ld ra,8(sp) + 80029198: 00000513 li a0,0 + 8002919c: 01010113 addi sp,sp,16 + 800291a0: d65e706f j 80010f04 <_Z7setchr8j> + +00000000800291a4 <_ZL7M78Syncv>: + 800291a4: ff010113 addi sp,sp,-16 + 800291a8: 00813023 sd s0,0(sp) + 800291ac: 001a3417 auipc s0,0x1a3 + 800291b0: 14440413 addi s0,s0,324 # 801cc2f0 <_ZL6latche> + 800291b4: 00044583 lbu a1,0(s0) + 800291b8: 00008537 lui a0,0x8 + 800291bc: 00113423 sd ra,8(sp) + 800291c0: 0075f593 andi a1,a1,7 + 800291c4: a95e70ef jal ra,80010c58 <_Z8setprg16jj> + 800291c8: fff00593 li a1,-1 + 800291cc: 0000c537 lui a0,0xc + 800291d0: a89e70ef jal ra,80010c58 <_Z8setprg16jj> + 800291d4: 00044503 lbu a0,0(s0) + 800291d8: 00455513 srli a0,a0,0x4 + 800291dc: d29e70ef jal ra,80010f04 <_Z7setchr8j> + 800291e0: 00044503 lbu a0,0(s0) + 800291e4: 00013403 ld s0,0(sp) + 800291e8: 00813083 ld ra,8(sp) + 800291ec: 4035551b sraiw a0,a0,0x3 + 800291f0: 00157513 andi a0,a0,1 + 800291f4: 0025051b addiw a0,a0,2 + 800291f8: 01010113 addi sp,sp,16 + 800291fc: e4de706f j 80011048 <_Z9setmirrori> + +0000000080029200 <_ZL7M89Syncv>: + 80029200: ff010113 addi sp,sp,-16 + 80029204: 00813023 sd s0,0(sp) + 80029208: 001a3417 auipc s0,0x1a3 + 8002920c: 0e840413 addi s0,s0,232 # 801cc2f0 <_ZL6latche> + 80029210: 00044583 lbu a1,0(s0) + 80029214: 00008537 lui a0,0x8 + 80029218: 00113423 sd ra,8(sp) + 8002921c: 4045d59b sraiw a1,a1,0x4 + 80029220: 0075f593 andi a1,a1,7 + 80029224: a35e70ef jal ra,80010c58 <_Z8setprg16jj> + 80029228: fff00593 li a1,-1 + 8002922c: 0000c537 lui a0,0xc + 80029230: a29e70ef jal ra,80010c58 <_Z8setprg16jj> + 80029234: 00044783 lbu a5,0(s0) + 80029238: 4047d51b sraiw a0,a5,0x4 + 8002923c: 00857513 andi a0,a0,8 + 80029240: 0077f793 andi a5,a5,7 + 80029244: 00a7e533 or a0,a5,a0 + 80029248: cbde70ef jal ra,80010f04 <_Z7setchr8j> + 8002924c: 00044503 lbu a0,0(s0) + 80029250: 00013403 ld s0,0(sp) + 80029254: 00813083 ld ra,8(sp) + 80029258: 4035551b sraiw a0,a0,0x3 + 8002925c: 00157513 andi a0,a0,1 + 80029260: 0025051b addiw a0,a0,2 + 80029264: 01010113 addi sp,sp,16 + 80029268: de1e706f j 80011048 <_Z9setmirrori> + +000000008002926c <_ZL7M97Syncv>: + 8002926c: ff010113 addi sp,sp,-16 + 80029270: 00000513 li a0,0 + 80029274: 00113423 sd ra,8(sp) + 80029278: 00813023 sd s0,0(sp) + 8002927c: c89e70ef jal ra,80010f04 <_Z7setchr8j> + 80029280: fff00593 li a1,-1 + 80029284: 00008537 lui a0,0x8 + 80029288: 9d1e70ef jal ra,80010c58 <_Z8setprg16jj> + 8002928c: 001a3417 auipc s0,0x1a3 + 80029290: 06440413 addi s0,s0,100 # 801cc2f0 <_ZL6latche> + 80029294: 00044583 lbu a1,0(s0) + 80029298: 0000c537 lui a0,0xc + 8002929c: 00f5f593 andi a1,a1,15 + 800292a0: 9b9e70ef jal ra,80010c58 <_Z8setprg16jj> + 800292a4: 00044783 lbu a5,0(s0) + 800292a8: 00100693 li a3,1 + 800292ac: 4067d71b sraiw a4,a5,0x6 + 800292b0: 02d70e63 beq a4,a3,800292ec <_ZL7M97Syncv+0x80> + 800292b4: 00200693 li a3,2 + 800292b8: 00d71863 bne a4,a3,800292c8 <_ZL7M97Syncv+0x5c> + 800292bc: 00100513 li a0,1 + 800292c0: d89e70ef jal ra,80011048 <_Z9setmirrori> + 800292c4: 00044783 lbu a5,0(s0) + 800292c8: 00013403 ld s0,0(sp) + 800292cc: 00813083 ld ra,8(sp) + 800292d0: 4017d51b sraiw a0,a5,0x1 + 800292d4: 0017979b slliw a5,a5,0x1 + 800292d8: 00157513 andi a0,a0,1 + 800292dc: 0027f793 andi a5,a5,2 + 800292e0: 00f56533 or a0,a0,a5 + 800292e4: 01010113 addi sp,sp,16 + 800292e8: c1de706f j 80010f04 <_Z7setchr8j> + 800292ec: 00000513 li a0,0 + 800292f0: d59e70ef jal ra,80011048 <_Z9setmirrori> + 800292f4: 00044783 lbu a5,0(s0) + 800292f8: fd1ff06f j 800292c8 <_ZL7M97Syncv+0x5c> + +00000000800292fc <_ZL8M152Syncv>: + 800292fc: ff010113 addi sp,sp,-16 + 80029300: 00813023 sd s0,0(sp) + 80029304: 001a3417 auipc s0,0x1a3 + 80029308: fec40413 addi s0,s0,-20 # 801cc2f0 <_ZL6latche> + 8002930c: 00044583 lbu a1,0(s0) + 80029310: 00008537 lui a0,0x8 + 80029314: 00113423 sd ra,8(sp) + 80029318: 4045d59b sraiw a1,a1,0x4 + 8002931c: 0075f593 andi a1,a1,7 + 80029320: 939e70ef jal ra,80010c58 <_Z8setprg16jj> + 80029324: fff00593 li a1,-1 + 80029328: 0000c537 lui a0,0xc + 8002932c: 92de70ef jal ra,80010c58 <_Z8setprg16jj> + 80029330: 00044503 lbu a0,0(s0) + 80029334: 00f57513 andi a0,a0,15 + 80029338: bcde70ef jal ra,80010f04 <_Z7setchr8j> + 8002933c: 00044503 lbu a0,0(s0) + 80029340: 00013403 ld s0,0(sp) + 80029344: 00813083 ld ra,8(sp) + 80029348: 0075551b srliw a0,a0,0x7 + 8002934c: 0025051b addiw a0,a0,2 + 80029350: 01010113 addi sp,sp,16 + 80029354: cf5e706f j 80011048 <_Z9setmirrori> + +0000000080029358 <_ZL9CPROMSyncv>: + 80029358: ff010113 addi sp,sp,-16 + 8002935c: 00000593 li a1,0 + 80029360: 00000513 li a0,0 + 80029364: 00113423 sd ra,8(sp) + 80029368: b7de70ef jal ra,80010ee4 <_Z7setchr4jj> + 8002936c: 001a3597 auipc a1,0x1a3 + 80029370: f845c583 lbu a1,-124(a1) # 801cc2f0 <_ZL6latche> + 80029374: 0035f593 andi a1,a1,3 + 80029378: 00001537 lui a0,0x1 + 8002937c: b69e70ef jal ra,80010ee4 <_Z7setchr4jj> + 80029380: 00813083 ld ra,8(sp) + 80029384: 00000593 li a1,0 + 80029388: 00008537 lui a0,0x8 + 8002938c: 01010113 addi sp,sp,16 + 80029390: a85e706f j 80010e14 <_Z8setprg32jj> + +0000000080029394 <_ZL8M184Syncv>: + 80029394: ff010113 addi sp,sp,-16 + 80029398: 00813023 sd s0,0(sp) + 8002939c: 001a3417 auipc s0,0x1a3 + 800293a0: f5440413 addi s0,s0,-172 # 801cc2f0 <_ZL6latche> + 800293a4: 00044583 lbu a1,0(s0) + 800293a8: 00000513 li a0,0 + 800293ac: 00113423 sd ra,8(sp) + 800293b0: b35e70ef jal ra,80010ee4 <_Z7setchr4jj> + 800293b4: 00044583 lbu a1,0(s0) + 800293b8: 00001537 lui a0,0x1 + 800293bc: 0045d593 srli a1,a1,0x4 + 800293c0: b25e70ef jal ra,80010ee4 <_Z7setchr4jj> + 800293c4: 00013403 ld s0,0(sp) + 800293c8: 00813083 ld ra,8(sp) + 800293cc: 00000593 li a1,0 + 800293d0: 00008537 lui a0,0x8 + 800293d4: 01010113 addi sp,sp,16 + 800293d8: a3de706f j 80010e14 <_Z8setprg32jj> + +00000000800293dc <_ZL7M29Syncv>: + 800293dc: ff010113 addi sp,sp,-16 + 800293e0: 00813023 sd s0,0(sp) + 800293e4: 001a3417 auipc s0,0x1a3 + 800293e8: f0c40413 addi s0,s0,-244 # 801cc2f0 <_ZL6latche> + 800293ec: 00044583 lbu a1,0(s0) + 800293f0: 00008537 lui a0,0x8 + 800293f4: 00113423 sd ra,8(sp) + 800293f8: 4025d59b sraiw a1,a1,0x2 + 800293fc: 0075f593 andi a1,a1,7 + 80029400: 859e70ef jal ra,80010c58 <_Z8setprg16jj> + 80029404: fff00593 li a1,-1 + 80029408: 0000c537 lui a0,0xc + 8002940c: 84de70ef jal ra,80010c58 <_Z8setprg16jj> + 80029410: 00044583 lbu a1,0(s0) + 80029414: 00000513 li a0,0 + 80029418: 0035f593 andi a1,a1,3 + 8002941c: a69e70ef jal ra,80010e84 <_Z8setchr8rij> + 80029420: 00013403 ld s0,0(sp) + 80029424: 00813083 ld ra,8(sp) + 80029428: 00000613 li a2,0 + 8002942c: 000065b7 lui a1,0x6 + 80029430: 01000513 li a0,16 + 80029434: 01010113 addi sp,sp,16 + 80029438: cb0e706f j 800108e8 <_Z8setprg8rijj> + +000000008002943c <_Z9NROM_InitP8CartInfo>: + 8002943c: fe010113 addi sp,sp,-32 + 80029440: 00113c23 sd ra,24(sp) + 80029444: 00813823 sd s0,16(sp) + 80029448: 00913423 sd s1,8(sp) + 8002944c: 01213023 sd s2,0(sp) + 80029450: 00000797 auipc a5,0x0 + 80029454: 8e078793 addi a5,a5,-1824 # 80028d30 <_ZL9NROMPowerv> + 80029458: 00f53023 sd a5,0(a0) # c000 <_entry_offset+0xc000> + 8002945c: fffff797 auipc a5,0xfffff + 80029460: 4cc78793 addi a5,a5,1228 # 80028928 <_ZL10LatchClosev> + 80029464: 001a3497 auipc s1,0x1a3 + 80029468: e9048493 addi s1,s1,-368 # 801cc2f4 <_ZL8WRAMSIZE> + 8002946c: 00f53823 sd a5,16(a0) + 80029470: 00050413 mv s0,a0 + 80029474: 000027b7 lui a5,0x2 + 80029478: 00002537 lui a0,0x2 + 8002947c: 00f4a023 sw a5,0(s1) + 80029480: fede80ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80029484: 0004a603 lw a2,0(s1) + 80029488: 00050593 mv a1,a0 + 8002948c: 001a3917 auipc s2,0x1a3 + 80029490: e5490913 addi s2,s2,-428 # 801cc2e0 <_ZL4WRAM> + 80029494: 01000513 li a0,16 + 80029498: 00100693 li a3,1 + 8002949c: 00b93023 sd a1,0(s2) + 800294a0: 854e70ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 800294a4: 04c42783 lw a5,76(s0) + 800294a8: 00093503 ld a0,0(s2) + 800294ac: 0004a583 lw a1,0(s1) + 800294b0: 00078663 beqz a5,800294bc <_Z9NROM_InitP8CartInfo+0x80> + 800294b4: 00a43c23 sd a0,24(s0) + 800294b8: 02b42c23 sw a1,56(s0) + 800294bc: 01013403 ld s0,16(sp) + 800294c0: 01813083 ld ra,24(sp) + 800294c4: 00813483 ld s1,8(sp) + 800294c8: 00013903 ld s2,0(sp) + 800294cc: 0001c697 auipc a3,0x1c + 800294d0: e5c68693 addi a3,a3,-420 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 800294d4: 00000613 li a2,0 + 800294d8: 02010113 addi sp,sp,32 + 800294dc: b35d606f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800294e0 <_Z10UNROM_InitP8CartInfo>: + 800294e0: 00010737 lui a4,0x10 + 800294e4: 00100813 li a6,1 + 800294e8: 00000793 li a5,0 + 800294ec: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 800294f0: 000086b7 lui a3,0x8 + 800294f4: 00000613 li a2,0 + 800294f8: fffff597 auipc a1,0xfffff + 800294fc: 46858593 addi a1,a1,1128 # 80028960 <_ZL9UNROMSyncv> + 80029500: e80ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029504 <_Z10CNROM_InitP8CartInfo>: + 80029504: 00010737 lui a4,0x10 + 80029508: 00100813 li a6,1 + 8002950c: 00100793 li a5,1 + 80029510: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 80029514: 000086b7 lui a3,0x8 + 80029518: 00000613 li a2,0 + 8002951c: 00000597 auipc a1,0x0 + 80029520: 98058593 addi a1,a1,-1664 # 80028e9c <_ZL9CNROMSyncv> + 80029524: e5cff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029528 <_Z10ANROM_InitP8CartInfo>: + 80029528: 00010737 lui a4,0x10 + 8002952c: 000046b7 lui a3,0x4 + 80029530: 00000813 li a6,0 + 80029534: 00000793 li a5,0 + 80029538: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 8002953c: 02068693 addi a3,a3,32 # 4020 <_entry_offset+0x4020> + 80029540: 00000613 li a2,0 + 80029544: 00000597 auipc a1,0x0 + 80029548: c1458593 addi a1,a1,-1004 # 80029158 <_ZL9ANROMSyncv> + 8002954c: e34ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029550 <_Z12Mapper8_InitP8CartInfo>: + 80029550: 00010737 lui a4,0x10 + 80029554: 00000813 li a6,0 + 80029558: 00000793 li a5,0 + 8002955c: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 80029560: 000086b7 lui a3,0x8 + 80029564: 00000613 li a2,0 + 80029568: fffff597 auipc a1,0xfffff + 8002956c: 42c58593 addi a1,a1,1068 # 80028994 <_ZL6M8Syncv> + 80029570: e10ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029574 <_Z13Mapper11_InitP8CartInfo>: + 80029574: 00010737 lui a4,0x10 + 80029578: 00000813 li a6,0 + 8002957c: 00000793 li a5,0 + 80029580: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 80029584: 000086b7 lui a3,0x8 + 80029588: 00000613 li a2,0 + 8002958c: 00000597 auipc a1,0x0 + 80029590: 94858593 addi a1,a1,-1720 # 80028ed4 <_ZL7M11Syncv> + 80029594: decff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029598 <_Z14Mapper144_InitP8CartInfo>: + 80029598: 00010737 lui a4,0x10 + 8002959c: 000086b7 lui a3,0x8 + 800295a0: 00000813 li a6,0 + 800295a4: 00000793 li a5,0 + 800295a8: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 800295ac: 00168693 addi a3,a3,1 # 8001 <_entry_offset+0x8001> + 800295b0: 00000613 li a2,0 + 800295b4: 00000597 auipc a1,0x0 + 800295b8: 92058593 addi a1,a1,-1760 # 80028ed4 <_ZL7M11Syncv> + 800295bc: dc4ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +00000000800295c0 <_Z10CPROM_InitP8CartInfo>: + 800295c0: 00010737 lui a4,0x10 + 800295c4: 00000813 li a6,0 + 800295c8: 00000793 li a5,0 + 800295cc: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 800295d0: 000086b7 lui a3,0x8 + 800295d4: 00000613 li a2,0 + 800295d8: 00000597 auipc a1,0x0 + 800295dc: d8058593 addi a1,a1,-640 # 80029358 <_ZL9CPROMSyncv> + 800295e0: da0ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +00000000800295e4 <_Z13Mapper29_InitP8CartInfo>: + 800295e4: 00010737 lui a4,0x10 + 800295e8: 00000813 li a6,0 + 800295ec: 00100793 li a5,1 + 800295f0: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 800295f4: 000086b7 lui a3,0x8 + 800295f8: 00000613 li a2,0 + 800295fc: 00000597 auipc a1,0x0 + 80029600: de058593 addi a1,a1,-544 # 800293dc <_ZL7M29Syncv> + 80029604: d7cff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029608 <_Z13Mapper38_InitP8CartInfo>: + 80029608: 00008737 lui a4,0x8 + 8002960c: 00000813 li a6,0 + 80029610: 00000793 li a5,0 + 80029614: fff70713 addi a4,a4,-1 # 7fff <_entry_offset+0x7fff> + 80029618: 000076b7 lui a3,0x7 + 8002961c: 00000613 li a2,0 + 80029620: 00000597 auipc a1,0x0 + 80029624: 8f058593 addi a1,a1,-1808 # 80028f10 <_ZL7M38Syncv> + 80029628: d58ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +000000008002962c <_Z10MHROM_InitP8CartInfo>: + 8002962c: 00010737 lui a4,0x10 + 80029630: 00000813 li a6,0 + 80029634: 00000793 li a5,0 + 80029638: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 8002963c: 000086b7 lui a3,0x8 + 80029640: 00000613 li a2,0 + 80029644: 00000597 auipc a1,0x0 + 80029648: 90858593 addi a1,a1,-1784 # 80028f4c <_ZL9MHROMSyncv> + 8002964c: d34ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029650 <_Z13Mapper70_InitP8CartInfo>: + 80029650: 00010737 lui a4,0x10 + 80029654: 00000813 li a6,0 + 80029658: 00000793 li a5,0 + 8002965c: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 80029660: 000086b7 lui a3,0x8 + 80029664: 00000613 li a2,0 + 80029668: fffff597 auipc a1,0xfffff + 8002966c: 37458593 addi a1,a1,884 # 800289dc <_ZL7M70Syncv> + 80029670: d10ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029674 <_Z13Mapper78_InitP8CartInfo>: + 80029674: 00010737 lui a4,0x10 + 80029678: 00000813 li a6,0 + 8002967c: 00000793 li a5,0 + 80029680: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 80029684: 000086b7 lui a3,0x8 + 80029688: 00000613 li a2,0 + 8002968c: 00000597 auipc a1,0x0 + 80029690: b1858593 addi a1,a1,-1256 # 800291a4 <_ZL7M78Syncv> + 80029694: cecff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029698 <_Z13Mapper86_InitP8CartInfo>: + 80029698: 00007737 lui a4,0x7 + 8002969c: 00000813 li a6,0 + 800296a0: 00000793 li a5,0 + 800296a4: fff70713 addi a4,a4,-1 # 6fff <_entry_offset+0x6fff> + 800296a8: 000066b7 lui a3,0x6 + 800296ac: 0ff00613 li a2,255 + 800296b0: 00000597 auipc a1,0x0 + 800296b4: 8d858593 addi a1,a1,-1832 # 80028f88 <_ZL7M86Syncv> + 800296b8: cc8ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +00000000800296bc <_Z13Mapper87_InitP8CartInfo>: + 800296bc: 00010737 lui a4,0x10 + 800296c0: 00000813 li a6,0 + 800296c4: 00000793 li a5,0 + 800296c8: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 800296cc: 000066b7 lui a3,0x6 + 800296d0: 0ff00613 li a2,255 + 800296d4: 00000597 auipc a1,0x0 + 800296d8: 90058593 addi a1,a1,-1792 # 80028fd4 <_ZL7M87Syncv> + 800296dc: ca4ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +00000000800296e0 <_Z13Mapper89_InitP8CartInfo>: + 800296e0: 00010737 lui a4,0x10 + 800296e4: 00000813 li a6,0 + 800296e8: 00000793 li a5,0 + 800296ec: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 800296f0: 000086b7 lui a3,0x8 + 800296f4: 00000613 li a2,0 + 800296f8: 00000597 auipc a1,0x0 + 800296fc: b0858593 addi a1,a1,-1272 # 80029200 <_ZL7M89Syncv> + 80029700: c80ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029704 <_Z18SUNSOFT_UNROM_InitP8CartInfo>: + 80029704: 00010737 lui a4,0x10 + 80029708: 00000813 li a6,0 + 8002970c: 00000793 li a5,0 + 80029710: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 80029714: 000086b7 lui a3,0x8 + 80029718: 00000613 li a2,0 + 8002971c: fffff597 auipc a1,0xfffff + 80029720: 30858593 addi a1,a1,776 # 80028a24 <_ZL11SSUNROMSyncv> + 80029724: c5cff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029728 <_Z13Mapper94_InitP8CartInfo>: + 80029728: 00010737 lui a4,0x10 + 8002972c: 00000813 li a6,0 + 80029730: 00000793 li a5,0 + 80029734: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 80029738: 000086b7 lui a3,0x8 + 8002973c: 00000613 li a2,0 + 80029740: fffff597 auipc a1,0xfffff + 80029744: 31c58593 addi a1,a1,796 # 80028a5c <_ZL7M94Syncv> + 80029748: c38ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +000000008002974c <_Z13Mapper97_InitP8CartInfo>: + 8002974c: 00010737 lui a4,0x10 + 80029750: 00000813 li a6,0 + 80029754: 00000793 li a5,0 + 80029758: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 8002975c: 000086b7 lui a3,0x8 + 80029760: 0ff00613 li a2,255 + 80029764: 00000597 auipc a1,0x0 + 80029768: b0858593 addi a1,a1,-1272 # 8002926c <_ZL7M97Syncv> + 8002976c: c14ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029770 <_Z14Mapper101_InitP8CartInfo>: + 80029770: 00008737 lui a4,0x8 + 80029774: 00000813 li a6,0 + 80029778: 00000793 li a5,0 + 8002977c: fff70713 addi a4,a4,-1 # 7fff <_entry_offset+0x7fff> + 80029780: 000066b7 lui a3,0x6 + 80029784: 0ff00613 li a2,255 + 80029788: 00000597 auipc a1,0x0 + 8002978c: 88858593 addi a1,a1,-1912 # 80029010 <_ZL8M101Syncv> + 80029790: bf0ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029794 <_Z14Mapper107_InitP8CartInfo>: + 80029794: 00010737 lui a4,0x10 + 80029798: 00000813 li a6,0 + 8002979c: 00000793 li a5,0 + 800297a0: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 800297a4: 000086b7 lui a3,0x8 + 800297a8: 0ff00613 li a2,255 + 800297ac: 00000597 auipc a1,0x0 + 800297b0: 88c58593 addi a1,a1,-1908 # 80029038 <_ZL8M107Syncv> + 800297b4: bccff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +00000000800297b8 <_Z14Mapper113_InitP8CartInfo>: + 800297b8: 00008737 lui a4,0x8 + 800297bc: 000046b7 lui a3,0x4 + 800297c0: 00000813 li a6,0 + 800297c4: 00000793 li a5,0 + 800297c8: fff70713 addi a4,a4,-1 # 7fff <_entry_offset+0x7fff> + 800297cc: 10068693 addi a3,a3,256 # 4100 <_entry_offset+0x4100> + 800297d0: 00000613 li a2,0 + 800297d4: 00000597 auipc a1,0x0 + 800297d8: 8a458593 addi a1,a1,-1884 # 80029078 <_ZL8M113Syncv> + 800297dc: ba4ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +00000000800297e0 <_Z14Mapper140_InitP8CartInfo>: + 800297e0: 00008737 lui a4,0x8 + 800297e4: 00000813 li a6,0 + 800297e8: 00000793 li a5,0 + 800297ec: fff70713 addi a4,a4,-1 # 7fff <_entry_offset+0x7fff> + 800297f0: 000066b7 lui a3,0x6 + 800297f4: 00000613 li a2,0 + 800297f8: fffff597 auipc a1,0xfffff + 800297fc: 75458593 addi a1,a1,1876 # 80028f4c <_ZL9MHROMSyncv> + 80029800: b80ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029804 <_Z14Mapper152_InitP8CartInfo>: + 80029804: 00010737 lui a4,0x10 + 80029808: 00000813 li a6,0 + 8002980c: 00000793 li a5,0 + 80029810: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 80029814: 000086b7 lui a3,0x8 + 80029818: 00000613 li a2,0 + 8002981c: 00000597 auipc a1,0x0 + 80029820: ae058593 addi a1,a1,-1312 # 800292fc <_ZL8M152Syncv> + 80029824: b5cff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029828 <_Z14Mapper180_InitP8CartInfo>: + 80029828: 00010737 lui a4,0x10 + 8002982c: 00000813 li a6,0 + 80029830: 00000793 li a5,0 + 80029834: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 80029838: 000086b7 lui a3,0x8 + 8002983c: 00000613 li a2,0 + 80029840: fffff597 auipc a1,0xfffff + 80029844: 25458593 addi a1,a1,596 # 80028a94 <_ZL8M180Syncv> + 80029848: b38ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +000000008002984c <_Z14Mapper184_InitP8CartInfo>: + 8002984c: 00008737 lui a4,0x8 + 80029850: 00000813 li a6,0 + 80029854: 00000793 li a5,0 + 80029858: fff70713 addi a4,a4,-1 # 7fff <_entry_offset+0x7fff> + 8002985c: 000066b7 lui a3,0x6 + 80029860: 00000613 li a2,0 + 80029864: 00000597 auipc a1,0x0 + 80029868: b3058593 addi a1,a1,-1232 # 80029394 <_ZL8M184Syncv> + 8002986c: b14ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029870 <_Z14Mapper203_InitP8CartInfo>: + 80029870: 00010737 lui a4,0x10 + 80029874: 00000813 li a6,0 + 80029878: 00000793 li a5,0 + 8002987c: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 80029880: 000086b7 lui a3,0x8 + 80029884: 00000613 li a2,0 + 80029888: fffff597 auipc a1,0xfffff + 8002988c: 24058593 addi a1,a1,576 # 80028ac8 <_ZL8M203Syncv> + 80029890: af0ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +0000000080029894 <_Z14Mapper240_InitP8CartInfo>: + 80029894: 00006737 lui a4,0x6 + 80029898: 000046b7 lui a3,0x4 + 8002989c: 00000813 li a6,0 + 800298a0: 00100793 li a5,1 + 800298a4: fff70713 addi a4,a4,-1 # 5fff <_entry_offset+0x5fff> + 800298a8: 02068693 addi a3,a3,32 # 4020 <_entry_offset+0x4020> + 800298ac: 00000613 li a2,0 + 800298b0: 00000597 auipc a1,0x0 + 800298b4: 81458593 addi a1,a1,-2028 # 800290c4 <_ZL8M240Syncv> + 800298b8: ac8ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +00000000800298bc <_Z14Mapper241_InitP8CartInfo>: + 800298bc: 00010737 lui a4,0x10 + 800298c0: 00000813 li a6,0 + 800298c4: 00100793 li a5,1 + 800298c8: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 800298cc: 000086b7 lui a3,0x8 + 800298d0: 00000613 li a2,0 + 800298d4: 00000597 auipc a1,0x0 + 800298d8: 83c58593 addi a1,a1,-1988 # 80029110 <_ZL8M241Syncv> + 800298dc: aa4ff06f j 80028b80 <_ZL10Latch_InitP8CartInfoPFvvEhtthh> + +00000000800298e0 <_ZL9M189Powerv>: + 800298e0: ff010113 addi sp,sp,-16 + 800298e4: 00113423 sd ra,8(sp) + 800298e8: 001a3797 auipc a5,0x1a3 + 800298ec: 96878793 addi a5,a5,-1688 # 801cc250 + 800298f0: 000780a3 sb zero,1(a5) + 800298f4: 00078023 sb zero,0(a5) + 800298f8: 8c9fc0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 800298fc: 00813083 ld ra,8(sp) + 80029900: 000085b7 lui a1,0x8 + 80029904: 00004537 lui a0,0x4 + 80029908: 00000617 auipc a2,0x0 + 8002990c: 01860613 addi a2,a2,24 # 80029920 <_ZL9M189Writejh> + 80029910: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80029914: 12050513 addi a0,a0,288 # 4120 <_entry_offset+0x4120> + 80029918: 01010113 addi sp,sp,16 + 8002991c: 20c0a06f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +0000000080029920 <_ZL9M189Writejh>: + 80029920: 0045d793 srli a5,a1,0x4 + 80029924: 00f5e5b3 or a1,a1,a5 + 80029928: 001a3517 auipc a0,0x1a3 + 8002992c: 93454503 lbu a0,-1740(a0) # 801cc25c + 80029930: 001a3797 auipc a5,0x1a3 + 80029934: 92b78023 sb a1,-1760(a5) # 801cc250 + 80029938: d34fc06f j 80025e6c <_Z10FixMMC3PRGi> + +000000008002993c <_ZL6M189PWjh>: + 8002993c: 001a3597 auipc a1,0x1a3 + 80029940: 9145c583 lbu a1,-1772(a1) # 801cc250 + 80029944: 0075f593 andi a1,a1,7 + 80029948: 00008537 lui a0,0x8 + 8002994c: cc8e706f j 80010e14 <_Z8setprg32jj> + +0000000080029950 <_Z14Mapper189_InitP8CartInfo>: + 80029950: ff010113 addi sp,sp,-16 + 80029954: 00000693 li a3,0 + 80029958: 10000613 li a2,256 + 8002995c: 10000593 li a1,256 + 80029960: 00000713 li a4,0 + 80029964: 00813023 sd s0,0(sp) + 80029968: 00113423 sd ra,8(sp) + 8002996c: 00050413 mv s0,a0 + 80029970: ea8fd0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 80029974: 00000797 auipc a5,0x0 + 80029978: fc878793 addi a5,a5,-56 # 8002993c <_ZL6M189PWjh> + 8002997c: 001a3717 auipc a4,0x1a3 + 80029980: 90f73e23 sd a5,-1764(a4) # 801cc298 + 80029984: 00000797 auipc a5,0x0 + 80029988: f5c78793 addi a5,a5,-164 # 800298e0 <_ZL9M189Powerv> + 8002998c: 00f43023 sd a5,0(s0) + 80029990: 00013403 ld s0,0(sp) + 80029994: 00813083 ld ra,8(sp) + 80029998: 0001c697 auipc a3,0x1c + 8002999c: b5868693 addi a3,a3,-1192 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 800299a0: 00000613 li a2,0 + 800299a4: 00200593 li a1,2 + 800299a8: 001a3517 auipc a0,0x1a3 + 800299ac: 8a850513 addi a0,a0,-1880 # 801cc250 + 800299b0: 01010113 addi sp,sp,16 + 800299b4: e5cd606f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800299b8 <_ZL11M80RamWritejh>: + 800299b8: 001a3717 auipc a4,0x1a3 + 800299bc: 94474703 lbu a4,-1724(a4) # 801cc2fc <_ZL11wram_enable> + 800299c0: 0a300793 li a5,163 + 800299c4: 00f70463 beq a4,a5,800299cc <_ZL11M80RamWritejh+0x14> + 800299c8: 00008067 ret + 800299cc: 0ff57513 andi a0,a0,255 + 800299d0: 0009e797 auipc a5,0x9e + 800299d4: cb078793 addi a5,a5,-848 # 800c7680 <_ZL4wram> + 800299d8: 00a78533 add a0,a5,a0 + 800299dc: 00b50023 sb a1,0(a0) + 800299e0: 00008067 ret + +00000000800299e4 <_ZL10M80RamReadj>: + 800299e4: 001a3717 auipc a4,0x1a3 + 800299e8: 91874703 lbu a4,-1768(a4) # 801cc2fc <_ZL11wram_enable> + 800299ec: 0a300793 li a5,163 + 800299f0: 00f70663 beq a4,a5,800299fc <_ZL10M80RamReadj+0x18> + 800299f4: 0ff00513 li a0,255 + 800299f8: 00008067 ret + 800299fc: 0009e797 auipc a5,0x9e + 80029a00: c8478793 addi a5,a5,-892 # 800c7680 <_ZL4wram> + 80029a04: 0ff57513 andi a0,a0,255 + 80029a08: 00a78533 add a0,a5,a0 + 80029a0c: 00054503 lbu a0,0(a0) + 80029a10: 00008067 ret + +0000000080029a14 <_ZL4Syncv>: + 80029a14: fe010113 addi sp,sp,-32 + 80029a18: 00113c23 sd ra,24(sp) + 80029a1c: 00813823 sd s0,16(sp) + 80029a20: 00913423 sd s1,8(sp) + 80029a24: 01213023 sd s2,0(sp) + 80029a28: 001a3497 auipc s1,0x1a3 + 80029a2c: 8e048493 addi s1,s1,-1824 # 801cc308 <_ZL4preg> + 80029a30: 0004c583 lbu a1,0(s1) + 80029a34: 00008537 lui a0,0x8 + 80029a38: 001a3417 auipc s0,0x1a3 + 80029a3c: 8c840413 addi s0,s0,-1848 # 801cc300 <_ZL4creg> + 80029a40: 85ce70ef jal ra,80010a9c <_Z7setprg8jj> + 80029a44: 0014c583 lbu a1,1(s1) + 80029a48: 0000a537 lui a0,0xa + 80029a4c: 00001937 lui s2,0x1 + 80029a50: 84ce70ef jal ra,80010a9c <_Z7setprg8jj> + 80029a54: 0024c583 lbu a1,2(s1) + 80029a58: 0000c537 lui a0,0xc + 80029a5c: 000024b7 lui s1,0x2 + 80029a60: 83ce70ef jal ra,80010a9c <_Z7setprg8jj> + 80029a64: fff00593 li a1,-1 + 80029a68: 0000e537 lui a0,0xe + 80029a6c: 830e70ef jal ra,80010a9c <_Z7setprg8jj> + 80029a70: 00044583 lbu a1,0(s0) + 80029a74: 00000513 li a0,0 + 80029a78: 4015d59b sraiw a1,a1,0x1 + 80029a7c: 03f5f593 andi a1,a1,63 + 80029a80: c44e70ef jal ra,80010ec4 <_Z7setchr2jj> + 80029a84: 00144583 lbu a1,1(s0) + 80029a88: 80090513 addi a0,s2,-2048 # 800 <_entry_offset+0x800> + 80029a8c: 4015d59b sraiw a1,a1,0x1 + 80029a90: 03f5f593 andi a1,a1,63 + 80029a94: c30e70ef jal ra,80010ec4 <_Z7setchr2jj> + 80029a98: 00244583 lbu a1,2(s0) + 80029a9c: 00001537 lui a0,0x1 + 80029aa0: c04e70ef jal ra,80010ea4 <_Z7setchr1jj> + 80029aa4: 00344583 lbu a1,3(s0) + 80029aa8: 40090513 addi a0,s2,1024 + 80029aac: bf8e70ef jal ra,80010ea4 <_Z7setchr1jj> + 80029ab0: 00444583 lbu a1,4(s0) + 80029ab4: 80048513 addi a0,s1,-2048 # 1800 <_entry_offset+0x1800> + 80029ab8: bece70ef jal ra,80010ea4 <_Z7setchr1jj> + 80029abc: 00544583 lbu a1,5(s0) + 80029ac0: c0048513 addi a0,s1,-1024 + 80029ac4: be0e70ef jal ra,80010ea4 <_Z7setchr1jj> + 80029ac8: 001a3797 auipc a5,0x1a3 + 80029acc: 8547c783 lbu a5,-1964(a5) # 801cc31c <_ZL8isExMirr> + 80029ad0: 02078c63 beqz a5,80029b08 <_ZL4Syncv+0xf4> + 80029ad4: 001a3717 auipc a4,0x1a3 + 80029ad8: 84476703 lwu a4,-1980(a4) # 801cc318 <_ZL7lastppu> + 80029adc: 001a3797 auipc a5,0x1a3 + 80029ae0: 83478793 addi a5,a5,-1996 # 801cc310 <_ZL6mcache> + 80029ae4: 00e787b3 add a5,a5,a4 + 80029ae8: 0007c503 lbu a0,0(a5) + 80029aec: 01013403 ld s0,16(sp) + 80029af0: 01813083 ld ra,24(sp) + 80029af4: 00813483 ld s1,8(sp) + 80029af8: 00013903 ld s2,0(sp) + 80029afc: 0025051b addiw a0,a0,2 + 80029b00: 02010113 addi sp,sp,32 + 80029b04: d44e706f j 80011048 <_Z9setmirrori> + 80029b08: 01013403 ld s0,16(sp) + 80029b0c: 01813083 ld ra,24(sp) + 80029b10: 00813483 ld s1,8(sp) + 80029b14: 00013903 ld s2,0(sp) + 80029b18: 001a2517 auipc a0,0x1a2 + 80029b1c: 7ee54503 lbu a0,2030(a0) # 801cc306 <_ZL4mirr> + 80029b20: 02010113 addi sp,sp,32 + 80029b24: d24e706f j 80011048 <_Z9setmirrori> + +0000000080029b28 <_ZL12StateRestorei>: + 80029b28: eedff06f j 80029a14 <_ZL4Syncv> + +0000000080029b2c <_ZL8M80Writejh>: + 80029b2c: ffff87b7 lui a5,0xffff8 + 80029b30: 1107879b addiw a5,a5,272 + 80029b34: 00a7853b addw a0,a5,a0 + 80029b38: 0005071b sext.w a4,a0 + 80029b3c: 00f00793 li a5,15 + 80029b40: 04e7e663 bltu a5,a4,80029b8c <_ZL8M80Writejh+0x60> + 80029b44: 02051513 slli a0,a0,0x20 + 80029b48: 02055513 srli a0,a0,0x20 + 80029b4c: 0001c717 auipc a4,0x1c + 80029b50: 42c70713 addi a4,a4,1068 # 80045f78 <_ZL3lut+0x118> + 80029b54: 00251513 slli a0,a0,0x2 + 80029b58: 00e50533 add a0,a0,a4 + 80029b5c: 00052783 lw a5,0(a0) + 80029b60: 00e787b3 add a5,a5,a4 + 80029b64: 00078067 jr a5 # ffffffffffff8000 <_end+0xffffffff7fe23000> + 80029b68: 001a2797 auipc a5,0x1a2 + 80029b6c: 7ab78123 sb a1,1954(a5) # 801cc30a <_ZL4preg+0x2> + 80029b70: ea5ff06f j 80029a14 <_ZL4Syncv> + 80029b74: 001a2797 auipc a5,0x1a2 + 80029b78: 78b78a23 sb a1,1940(a5) # 801cc308 <_ZL4preg> + 80029b7c: e99ff06f j 80029a14 <_ZL4Syncv> + 80029b80: 001a2797 auipc a5,0x1a2 + 80029b84: 78b784a3 sb a1,1929(a5) # 801cc309 <_ZL4preg+0x1> + 80029b88: e8dff06f j 80029a14 <_ZL4Syncv> + 80029b8c: 00008067 ret + 80029b90: 4075d79b sraiw a5,a1,0x7 + 80029b94: 001a2717 auipc a4,0x1a2 + 80029b98: 76b707a3 sb a1,1903(a4) # 801cc303 <_ZL4creg+0x3> + 80029b9c: 001a2717 auipc a4,0x1a2 + 80029ba0: 76f70ca3 sb a5,1913(a4) # 801cc315 <_ZL6mcache+0x5> + 80029ba4: e71ff06f j 80029a14 <_ZL4Syncv> + 80029ba8: 001a2797 auipc a5,0x1a2 + 80029bac: 74b78a23 sb a1,1876(a5) # 801cc2fc <_ZL11wram_enable> + 80029bb0: 00008067 ret + 80029bb4: 4075d79b sraiw a5,a1,0x7 + 80029bb8: 001a2717 auipc a4,0x1a2 + 80029bbc: 74b70623 sb a1,1868(a4) # 801cc304 <_ZL4creg+0x4> + 80029bc0: 001a2717 auipc a4,0x1a2 + 80029bc4: 74f70b23 sb a5,1878(a4) # 801cc316 <_ZL6mcache+0x6> + 80029bc8: e4dff06f j 80029a14 <_ZL4Syncv> + 80029bcc: 4075d79b sraiw a5,a1,0x7 + 80029bd0: 001a2717 auipc a4,0x1a2 + 80029bd4: 72b70aa3 sb a1,1845(a4) # 801cc305 <_ZL4creg+0x5> + 80029bd8: 001a2717 auipc a4,0x1a2 + 80029bdc: 72f70fa3 sb a5,1855(a4) # 801cc317 <_ZL6mcache+0x7> + 80029be0: e35ff06f j 80029a14 <_ZL4Syncv> + 80029be4: 0015f593 andi a1,a1,1 + 80029be8: 001a2797 auipc a5,0x1a2 + 80029bec: 70b78f23 sb a1,1822(a5) # 801cc306 <_ZL4mirr> + 80029bf0: e25ff06f j 80029a14 <_ZL4Syncv> + 80029bf4: 0075d713 srli a4,a1,0x7 + 80029bf8: 001a2797 auipc a5,0x1a2 + 80029bfc: 71878793 addi a5,a5,1816 # 801cc310 <_ZL6mcache> + 80029c00: 001a2697 auipc a3,0x1a2 + 80029c04: 70b680a3 sb a1,1793(a3) # 801cc301 <_ZL4creg+0x1> + 80029c08: 00e781a3 sb a4,3(a5) + 80029c0c: 00e78123 sb a4,2(a5) + 80029c10: e05ff06f j 80029a14 <_ZL4Syncv> + 80029c14: 4075d79b sraiw a5,a1,0x7 + 80029c18: 001a2717 auipc a4,0x1a2 + 80029c1c: 6eb70523 sb a1,1770(a4) # 801cc302 <_ZL4creg+0x2> + 80029c20: 001a2717 auipc a4,0x1a2 + 80029c24: 6ef70a23 sb a5,1780(a4) # 801cc314 <_ZL6mcache+0x4> + 80029c28: dedff06f j 80029a14 <_ZL4Syncv> + 80029c2c: 0075d713 srli a4,a1,0x7 + 80029c30: 001a2797 auipc a5,0x1a2 + 80029c34: 6e078793 addi a5,a5,1760 # 801cc310 <_ZL6mcache> + 80029c38: 001a2697 auipc a3,0x1a2 + 80029c3c: 6cb68423 sb a1,1736(a3) # 801cc300 <_ZL4creg> + 80029c40: 00e780a3 sb a4,1(a5) + 80029c44: 00e78023 sb a4,0(a5) + 80029c48: dcdff06f j 80029a14 <_ZL4Syncv> + +0000000080029c4c <_ZL8M80Powerv>: + 80029c4c: ff010113 addi sp,sp,-16 + 80029c50: fff00793 li a5,-1 + 80029c54: 00113423 sd ra,8(sp) + 80029c58: 00813023 sd s0,0(sp) + 80029c5c: 001a2717 auipc a4,0x1a2 + 80029c60: 6af70023 sb a5,1696(a4) # 801cc2fc <_ZL11wram_enable> + 80029c64: 00008437 lui s0,0x8 + 80029c68: dadff0ef jal ra,80029a14 <_ZL4Syncv> + 80029c6c: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 80029c70: f0040513 addi a0,s0,-256 + 80029c74: 00000617 auipc a2,0x0 + 80029c78: d7060613 addi a2,a2,-656 # 800299e4 <_ZL10M80RamReadj> + 80029c7c: 5a1090ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80029c80: fff40593 addi a1,s0,-1 + 80029c84: f0040513 addi a0,s0,-256 + 80029c88: 00000617 auipc a2,0x0 + 80029c8c: d3060613 addi a2,a2,-720 # 800299b8 <_ZL11M80RamWritejh> + 80029c90: 699090ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80029c94: eff40593 addi a1,s0,-257 + 80029c98: ef040513 addi a0,s0,-272 + 80029c9c: 00000617 auipc a2,0x0 + 80029ca0: e9060613 addi a2,a2,-368 # 80029b2c <_ZL8M80Writejh> + 80029ca4: 685090ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80029ca8: 00013403 ld s0,0(sp) + 80029cac: 00813083 ld ra,8(sp) + 80029cb0: 000105b7 lui a1,0x10 + 80029cb4: fffe7617 auipc a2,0xfffe7 + 80029cb8: 9ac60613 addi a2,a2,-1620 # 80010660 <_Z6CartBRj> + 80029cbc: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80029cc0: 00008537 lui a0,0x8 + 80029cc4: 01010113 addi sp,sp,16 + 80029cc8: 5550906f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080029ccc <_ZL8M95Powerv>: + 80029ccc: ff010113 addi sp,sp,-16 + 80029cd0: ffe00793 li a5,-2 + 80029cd4: 00113423 sd ra,8(sp) + 80029cd8: 00813023 sd s0,0(sp) + 80029cdc: 001a2717 auipc a4,0x1a2 + 80029ce0: 62f70723 sb a5,1582(a4) # 801cc30a <_ZL4preg+0x2> + 80029ce4: 00010437 lui s0,0x10 + 80029ce8: 001a2797 auipc a5,0x1a2 + 80029cec: 6207b423 sd zero,1576(a5) # 801cc310 <_ZL6mcache> + 80029cf0: d25ff0ef jal ra,80029a14 <_ZL4Syncv> + 80029cf4: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80029cf8: 00000617 auipc a2,0x0 + 80029cfc: 07c60613 addi a2,a2,124 # 80029d74 <_ZL8M95Writejh> + 80029d00: 00008537 lui a0,0x8 + 80029d04: 625090ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80029d08: fff40593 addi a1,s0,-1 + 80029d0c: 00013403 ld s0,0(sp) + 80029d10: 00813083 ld ra,8(sp) + 80029d14: fffe7617 auipc a2,0xfffe7 + 80029d18: 94c60613 addi a2,a2,-1716 # 80010660 <_Z6CartBRj> + 80029d1c: 00008537 lui a0,0x8 + 80029d20: 01010113 addi sp,sp,16 + 80029d24: 4f90906f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080029d28 <_ZL9M207Powerv>: + 80029d28: ff010113 addi sp,sp,-16 + 80029d2c: 00113423 sd ra,8(sp) + 80029d30: 001a2797 auipc a5,0x1a2 + 80029d34: 5e07b023 sd zero,1504(a5) # 801cc310 <_ZL6mcache> + 80029d38: cddff0ef jal ra,80029a14 <_ZL4Syncv> + 80029d3c: 00008537 lui a0,0x8 + 80029d40: eff50593 addi a1,a0,-257 # 7eff <_entry_offset+0x7eff> + 80029d44: 00000617 auipc a2,0x0 + 80029d48: de860613 addi a2,a2,-536 # 80029b2c <_ZL8M80Writejh> + 80029d4c: ef050513 addi a0,a0,-272 + 80029d50: 5d9090ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80029d54: 00813083 ld ra,8(sp) + 80029d58: 000105b7 lui a1,0x10 + 80029d5c: fffe7617 auipc a2,0xfffe7 + 80029d60: 90460613 addi a2,a2,-1788 # 80010660 <_Z6CartBRj> + 80029d64: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80029d68: 00008537 lui a0,0x8 + 80029d6c: 01010113 addi sp,sp,16 + 80029d70: 4ad0906f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080029d74 <_ZL8M95Writejh>: + 80029d74: 0000f7b7 lui a5,0xf + 80029d78: 00178793 addi a5,a5,1 # f001 <_entry_offset+0xf001> + 80029d7c: 00f57533 and a0,a0,a5 + 80029d80: 000087b7 lui a5,0x8 + 80029d84: 04f50063 beq a0,a5,80029dc4 <_ZL8M95Writejh+0x50> + 80029d88: 00178793 addi a5,a5,1 # 8001 <_entry_offset+0x8001> + 80029d8c: 02f51a63 bne a0,a5,80029dc0 <_ZL8M95Writejh+0x4c> + 80029d90: 001a2797 auipc a5,0x1a2 + 80029d94: 56d7c783 lbu a5,1389(a5) # 801cc2fd <_ZL3cmd> + 80029d98: 0077f793 andi a5,a5,7 + 80029d9c: 0001c717 auipc a4,0x1c + 80029da0: 21c70713 addi a4,a4,540 # 80045fb8 <_ZL3lut+0x158> + 80029da4: 00279793 slli a5,a5,0x2 + 80029da8: 00e787b3 add a5,a5,a4 + 80029dac: 0007a783 lw a5,0(a5) + 80029db0: ff010113 addi sp,sp,-16 + 80029db4: 00113423 sd ra,8(sp) + 80029db8: 00e787b3 add a5,a5,a4 + 80029dbc: 00078067 jr a5 + 80029dc0: 00008067 ret + 80029dc4: 001a2797 auipc a5,0x1a2 + 80029dc8: 52b78ca3 sb a1,1337(a5) # 801cc2fd <_ZL3cmd> + 80029dcc: 00008067 ret + 80029dd0: 001a2797 auipc a5,0x1a2 + 80029dd4: 52b78ca3 sb a1,1337(a5) # 801cc309 <_ZL4preg+0x1> + 80029dd8: c3dff0ef jal ra,80029a14 <_ZL4Syncv> + 80029ddc: 00813083 ld ra,8(sp) + 80029de0: 01010113 addi sp,sp,16 + 80029de4: c31ff06f j 80029a14 <_ZL4Syncv> + 80029de8: 001a2797 auipc a5,0x1a2 + 80029dec: 52b78023 sb a1,1312(a5) # 801cc308 <_ZL4preg> + 80029df0: c25ff0ef jal ra,80029a14 <_ZL4Syncv> + 80029df4: fe9ff06f j 80029ddc <_ZL8M95Writejh+0x68> + 80029df8: 4055d79b sraiw a5,a1,0x5 + 80029dfc: 0017f793 andi a5,a5,1 + 80029e00: 01f5f593 andi a1,a1,31 + 80029e04: 001a2717 auipc a4,0x1a2 + 80029e08: 50b700a3 sb a1,1281(a4) # 801cc305 <_ZL4creg+0x5> + 80029e0c: 001a2717 auipc a4,0x1a2 + 80029e10: 50f705a3 sb a5,1291(a4) # 801cc317 <_ZL6mcache+0x7> + 80029e14: c01ff0ef jal ra,80029a14 <_ZL4Syncv> + 80029e18: fc5ff06f j 80029ddc <_ZL8M95Writejh+0x68> + 80029e1c: 4055d79b sraiw a5,a1,0x5 + 80029e20: 0017f793 andi a5,a5,1 + 80029e24: 01f5f593 andi a1,a1,31 + 80029e28: 001a2717 auipc a4,0x1a2 + 80029e2c: 4cb70e23 sb a1,1244(a4) # 801cc304 <_ZL4creg+0x4> + 80029e30: 001a2717 auipc a4,0x1a2 + 80029e34: 4ef70323 sb a5,1254(a4) # 801cc316 <_ZL6mcache+0x6> + 80029e38: bddff0ef jal ra,80029a14 <_ZL4Syncv> + 80029e3c: fa1ff06f j 80029ddc <_ZL8M95Writejh+0x68> + 80029e40: 4055d79b sraiw a5,a1,0x5 + 80029e44: 0017f793 andi a5,a5,1 + 80029e48: 01f5f593 andi a1,a1,31 + 80029e4c: 001a2717 auipc a4,0x1a2 + 80029e50: 4ab70ba3 sb a1,1207(a4) # 801cc303 <_ZL4creg+0x3> + 80029e54: 001a2717 auipc a4,0x1a2 + 80029e58: 4cf700a3 sb a5,1217(a4) # 801cc315 <_ZL6mcache+0x5> + 80029e5c: bb9ff0ef jal ra,80029a14 <_ZL4Syncv> + 80029e60: f7dff06f j 80029ddc <_ZL8M95Writejh+0x68> + 80029e64: 4055d79b sraiw a5,a1,0x5 + 80029e68: 0017f793 andi a5,a5,1 + 80029e6c: 01f5f593 andi a1,a1,31 + 80029e70: 001a2717 auipc a4,0x1a2 + 80029e74: 48b70923 sb a1,1170(a4) # 801cc302 <_ZL4creg+0x2> + 80029e78: 001a2717 auipc a4,0x1a2 + 80029e7c: 48f70e23 sb a5,1180(a4) # 801cc314 <_ZL6mcache+0x4> + 80029e80: b95ff0ef jal ra,80029a14 <_ZL4Syncv> + 80029e84: f59ff06f j 80029ddc <_ZL8M95Writejh+0x68> + 80029e88: 4055d79b sraiw a5,a1,0x5 + 80029e8c: 0017f793 andi a5,a5,1 + 80029e90: 001a2717 auipc a4,0x1a2 + 80029e94: 48070713 addi a4,a4,1152 # 801cc310 <_ZL6mcache> + 80029e98: 01f5f593 andi a1,a1,31 + 80029e9c: 001a2697 auipc a3,0x1a2 + 80029ea0: 46b682a3 sb a1,1125(a3) # 801cc301 <_ZL4creg+0x1> + 80029ea4: 00f701a3 sb a5,3(a4) + 80029ea8: 00f70123 sb a5,2(a4) + 80029eac: b69ff0ef jal ra,80029a14 <_ZL4Syncv> + 80029eb0: f2dff06f j 80029ddc <_ZL8M95Writejh+0x68> + 80029eb4: 4055d79b sraiw a5,a1,0x5 + 80029eb8: 0017f793 andi a5,a5,1 + 80029ebc: 001a2717 auipc a4,0x1a2 + 80029ec0: 45470713 addi a4,a4,1108 # 801cc310 <_ZL6mcache> + 80029ec4: 01f5f593 andi a1,a1,31 + 80029ec8: 001a2697 auipc a3,0x1a2 + 80029ecc: 42b68c23 sb a1,1080(a3) # 801cc300 <_ZL4creg> + 80029ed0: 00f700a3 sb a5,1(a4) + 80029ed4: 00f70023 sb a5,0(a4) + 80029ed8: b3dff0ef jal ra,80029a14 <_ZL4Syncv> + 80029edc: f01ff06f j 80029ddc <_ZL8M95Writejh+0x68> + +0000000080029ee0 <_ZL10MExMirrPPUj>: + 80029ee0: 000027b7 lui a5,0x2 + 80029ee4: 06f57663 bgeu a0,a5,80029f50 <_ZL10MExMirrPPUj+0x70> + 80029ee8: 00a5551b srliw a0,a0,0xa + 80029eec: 02051713 slli a4,a0,0x20 + 80029ef0: fe010113 addi sp,sp,-32 + 80029ef4: 02075713 srli a4,a4,0x20 + 80029ef8: 001a2797 auipc a5,0x1a2 + 80029efc: 41878793 addi a5,a5,1048 # 801cc310 <_ZL6mcache> + 80029f00: 00e787b3 add a5,a5,a4 + 80029f04: 00813823 sd s0,16(sp) + 80029f08: 00913423 sd s1,8(sp) + 80029f0c: 00113c23 sd ra,24(sp) + 80029f10: 00078783 lb a5,0(a5) + 80029f14: 00023417 auipc s0,0x23 + 80029f18: 1ec40413 addi s0,s0,492 # 8004d100 <_ZZL10MExMirrPPUjE8lastmirr> + 80029f1c: 00044683 lbu a3,0(s0) + 80029f20: 001a2497 auipc s1,0x1a2 + 80029f24: 3fd48493 addi s1,s1,1021 # 801cc31d <_ZZL10MExMirrPPUjE7curmirr> + 80029f28: 001a2717 auipc a4,0x1a2 + 80029f2c: 3ea72823 sw a0,1008(a4) # 801cc318 <_ZL7lastppu> + 80029f30: 00f48023 sb a5,0(s1) + 80029f34: 0ff7f713 andi a4,a5,255 + 80029f38: 00e69e63 bne a3,a4,80029f54 <_ZL10MExMirrPPUj+0x74> + 80029f3c: 01813083 ld ra,24(sp) + 80029f40: 01013403 ld s0,16(sp) + 80029f44: 00813483 ld s1,8(sp) + 80029f48: 02010113 addi sp,sp,32 + 80029f4c: 00008067 ret + 80029f50: 00008067 ret + 80029f54: 0027851b addiw a0,a5,2 + 80029f58: 8f0e70ef jal ra,80011048 <_Z9setmirrori> + 80029f5c: 0004c783 lbu a5,0(s1) + 80029f60: 01813083 ld ra,24(sp) + 80029f64: 00813483 ld s1,8(sp) + 80029f68: 00f40023 sb a5,0(s0) + 80029f6c: 01013403 ld s0,16(sp) + 80029f70: 02010113 addi sp,sp,32 + 80029f74: 00008067 ret + +0000000080029f78 <_Z13Mapper80_InitP8CartInfo>: + 80029f78: 00000717 auipc a4,0x0 + 80029f7c: cd470713 addi a4,a4,-812 # 80029c4c <_ZL8M80Powerv> + 80029f80: 00e53023 sd a4,0(a0) # 8000 <_entry_offset+0x8000> + 80029f84: 04c52783 lw a5,76(a0) + 80029f88: 001a2717 auipc a4,0x1a2 + 80029f8c: 38070a23 sb zero,916(a4) # 801cc31c <_ZL8isExMirr> + 80029f90: 00000717 auipc a4,0x0 + 80029f94: b9870713 addi a4,a4,-1128 # 80029b28 <_ZL12StateRestorei> + 80029f98: 001a2697 auipc a3,0x1a2 + 80029f9c: 6ce6b023 sd a4,1728(a3) # 801cc658 + 80029fa0: 00078c63 beqz a5,80029fb8 <_Z13Mapper80_InitP8CartInfo+0x40> + 80029fa4: 0009d797 auipc a5,0x9d + 80029fa8: 6dc78793 addi a5,a5,1756 # 800c7680 <_ZL4wram> + 80029fac: 00f53c23 sd a5,24(a0) + 80029fb0: 10000793 li a5,256 + 80029fb4: 02f52c23 sw a5,56(a0) + 80029fb8: 00000693 li a3,0 + 80029fbc: 00000613 li a2,0 + 80029fc0: fff00593 li a1,-1 + 80029fc4: 00023517 auipc a0,0x23 + 80029fc8: fa450513 addi a0,a0,-92 # 8004cf68 <_ZL11StateRegs80> + 80029fcc: 844d606f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080029fd0 <_Z13Mapper95_InitP8CartInfo>: + 80029fd0: 00000797 auipc a5,0x0 + 80029fd4: cfc78793 addi a5,a5,-772 # 80029ccc <_ZL8M95Powerv> + 80029fd8: 00f53023 sd a5,0(a0) + 80029fdc: 00100793 li a5,1 + 80029fe0: 001a2717 auipc a4,0x1a2 + 80029fe4: 32f70e23 sb a5,828(a4) # 801cc31c <_ZL8isExMirr> + 80029fe8: 00000797 auipc a5,0x0 + 80029fec: ef878793 addi a5,a5,-264 # 80029ee0 <_ZL10MExMirrPPUj> + 80029ff0: 001a2717 auipc a4,0x1a2 + 80029ff4: 70f73c23 sd a5,1816(a4) # 801cc708 + 80029ff8: 00000797 auipc a5,0x0 + 80029ffc: b3078793 addi a5,a5,-1232 # 80029b28 <_ZL12StateRestorei> + 8002a000: 00000693 li a3,0 + 8002a004: 00000613 li a2,0 + 8002a008: fff00593 li a1,-1 + 8002a00c: 00023517 auipc a0,0x23 + 8002a010: fec50513 addi a0,a0,-20 # 8004cff8 <_ZL11StateRegs95> + 8002a014: 001a2717 auipc a4,0x1a2 + 8002a018: 64f73223 sd a5,1604(a4) # 801cc658 + 8002a01c: ff5d506f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002a020 <_Z14Mapper207_InitP8CartInfo>: + 8002a020: 00000797 auipc a5,0x0 + 8002a024: d0878793 addi a5,a5,-760 # 80029d28 <_ZL9M207Powerv> + 8002a028: 00f53023 sd a5,0(a0) + 8002a02c: 00100793 li a5,1 + 8002a030: 001a2717 auipc a4,0x1a2 + 8002a034: 2ef70623 sb a5,748(a4) # 801cc31c <_ZL8isExMirr> + 8002a038: 00000797 auipc a5,0x0 + 8002a03c: ea878793 addi a5,a5,-344 # 80029ee0 <_ZL10MExMirrPPUj> + 8002a040: 001a2717 auipc a4,0x1a2 + 8002a044: 6cf73423 sd a5,1736(a4) # 801cc708 + 8002a048: 00000797 auipc a5,0x0 + 8002a04c: ae078793 addi a5,a5,-1312 # 80029b28 <_ZL12StateRestorei> + 8002a050: 00000693 li a3,0 + 8002a054: 00000613 li a2,0 + 8002a058: fff00593 li a1,-1 + 8002a05c: 00023517 auipc a0,0x23 + 8002a060: 02c50513 addi a0,a0,44 # 8004d088 <_ZL12StateRegs207> + 8002a064: 001a2717 auipc a4,0x1a2 + 8002a068: 5ef73a23 sd a5,1524(a4) # 801cc658 + 8002a06c: fa5d506f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002a070 <_ZL8M50Resetv>: + 8002a070: 00008067 ret + +000000008002a074 <_ZL4Syncv>: + 8002a074: ff010113 addi sp,sp,-16 + 8002a078: 00f00593 li a1,15 + 8002a07c: 00006537 lui a0,0x6 + 8002a080: 00113423 sd ra,8(sp) + 8002a084: a19e60ef jal ra,80010a9c <_Z7setprg8jj> + 8002a088: 00800593 li a1,8 + 8002a08c: 00008537 lui a0,0x8 + 8002a090: a0de60ef jal ra,80010a9c <_Z7setprg8jj> + 8002a094: 00900593 li a1,9 + 8002a098: 0000a537 lui a0,0xa + 8002a09c: a01e60ef jal ra,80010a9c <_Z7setprg8jj> + 8002a0a0: 001a2597 auipc a1,0x1a2 + 8002a0a4: 27e5c583 lbu a1,638(a1) # 801cc31e <_ZL3reg> + 8002a0a8: 0000c537 lui a0,0xc + 8002a0ac: 9f1e60ef jal ra,80010a9c <_Z7setprg8jj> + 8002a0b0: 0000e537 lui a0,0xe + 8002a0b4: 00b00593 li a1,11 + 8002a0b8: 9e5e60ef jal ra,80010a9c <_Z7setprg8jj> + 8002a0bc: 00813083 ld ra,8(sp) + 8002a0c0: 00000513 li a0,0 + 8002a0c4: 01010113 addi sp,sp,16 + 8002a0c8: e3de606f j 80010f04 <_Z7setchr8j> + +000000008002a0cc <_ZL12StateRestorei>: + 8002a0cc: fa9ff06f j 8002a074 <_ZL4Syncv> + +000000008002a0d0 <_ZL8M50Powerv>: + 8002a0d0: ff010113 addi sp,sp,-16 + 8002a0d4: 00113423 sd ra,8(sp) + 8002a0d8: 001a2797 auipc a5,0x1a2 + 8002a0dc: 24078323 sb zero,582(a5) # 801cc31e <_ZL3reg> + 8002a0e0: f95ff0ef jal ra,8002a074 <_ZL4Syncv> + 8002a0e4: 000105b7 lui a1,0x10 + 8002a0e8: fffe6617 auipc a2,0xfffe6 + 8002a0ec: 57860613 addi a2,a2,1400 # 80010660 <_Z6CartBRj> + 8002a0f0: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8002a0f4: 00006537 lui a0,0x6 + 8002a0f8: 125090ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002a0fc: 00813083 ld ra,8(sp) + 8002a100: 000065b7 lui a1,0x6 + 8002a104: 00004537 lui a0,0x4 + 8002a108: 00000617 auipc a2,0x0 + 8002a10c: 05860613 addi a2,a2,88 # 8002a160 <_ZL8M50Writejh> + 8002a110: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 8002a114: 02050513 addi a0,a0,32 # 4020 <_entry_offset+0x4020> + 8002a118: 01010113 addi sp,sp,16 + 8002a11c: 20d0906f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002a120 <_ZL10M50IRQHooki>: + 8002a120: 001a2797 auipc a5,0x1a2 + 8002a124: 2007a783 lw a5,512(a5) # 801cc320 <_ZL4IRQa> + 8002a128: 02078263 beqz a5,8002a14c <_ZL10M50IRQHooki+0x2c> + 8002a12c: 001a2797 auipc a5,0x1a2 + 8002a130: 1f878793 addi a5,a5,504 # 801cc324 <_ZL8IRQCount> + 8002a134: 0007a703 lw a4,0(a5) + 8002a138: 000016b7 lui a3,0x1 + 8002a13c: 00d77a63 bgeu a4,a3,8002a150 <_ZL10M50IRQHooki+0x30> + 8002a140: 00e5053b addw a0,a0,a4 + 8002a144: 00a7a023 sw a0,0(a5) + 8002a148: 00008067 ret + 8002a14c: 00008067 ret + 8002a150: 00100513 li a0,1 + 8002a154: 001a2797 auipc a5,0x1a2 + 8002a158: 1c07a623 sw zero,460(a5) # 801cc320 <_ZL4IRQa> + 8002a15c: bddd606f j 80000d38 <_Z14X6502_IRQBegini> + +000000008002a160 <_ZL8M50Writejh>: + 8002a160: 0000d737 lui a4,0xd + 8002a164: 16070713 addi a4,a4,352 # d160 <_entry_offset+0xd160> + 8002a168: 000047b7 lui a5,0x4 + 8002a16c: 00e57533 and a0,a0,a4 + 8002a170: 02078713 addi a4,a5,32 # 4020 <_entry_offset+0x4020> + 8002a174: 02e50663 beq a0,a4,8002a1a0 <_ZL8M50Writejh+0x40> + 8002a178: 12078793 addi a5,a5,288 + 8002a17c: 04f51a63 bne a0,a5,8002a1d0 <_ZL8M50Writejh+0x70> + 8002a180: 0015f593 andi a1,a1,1 + 8002a184: 001a2797 auipc a5,0x1a2 + 8002a188: 18b7ae23 sw a1,412(a5) # 801cc320 <_ZL4IRQa> + 8002a18c: 00059663 bnez a1,8002a198 <_ZL8M50Writejh+0x38> + 8002a190: 001a2797 auipc a5,0x1a2 + 8002a194: 1807aa23 sw zero,404(a5) # 801cc324 <_ZL8IRQCount> + 8002a198: 00100513 li a0,1 + 8002a19c: bb5d606f j 80000d50 <_Z12X6502_IRQEndi> + 8002a1a0: 0015d713 srli a4,a1,0x1 + 8002a1a4: 00259793 slli a5,a1,0x2 + 8002a1a8: 00177693 andi a3,a4,1 + 8002a1ac: 0047f793 andi a5,a5,4 + 8002a1b0: 00d7e7b3 or a5,a5,a3 + 8002a1b4: 0085f593 andi a1,a1,8 + 8002a1b8: 00b7e5b3 or a1,a5,a1 + 8002a1bc: 00277713 andi a4,a4,2 + 8002a1c0: 00e5e5b3 or a1,a1,a4 + 8002a1c4: 001a2797 auipc a5,0x1a2 + 8002a1c8: 14b78d23 sb a1,346(a5) # 801cc31e <_ZL3reg> + 8002a1cc: ea9ff06f j 8002a074 <_ZL4Syncv> + 8002a1d0: 00008067 ret + +000000008002a1d4 <_Z13Mapper50_InitP8CartInfo>: + 8002a1d4: 00000797 auipc a5,0x0 + 8002a1d8: efc78793 addi a5,a5,-260 # 8002a0d0 <_ZL8M50Powerv> + 8002a1dc: 00f53023 sd a5,0(a0) + 8002a1e0: 00000797 auipc a5,0x0 + 8002a1e4: e9078793 addi a5,a5,-368 # 8002a070 <_ZL8M50Resetv> + 8002a1e8: 00f53423 sd a5,8(a0) + 8002a1ec: 00000797 auipc a5,0x0 + 8002a1f0: f3478793 addi a5,a5,-204 # 8002a120 <_ZL10M50IRQHooki> + 8002a1f4: 001a2717 auipc a4,0x1a2 + 8002a1f8: 94f73623 sd a5,-1716(a4) # 801cbb40 + 8002a1fc: 00000797 auipc a5,0x0 + 8002a200: ed078793 addi a5,a5,-304 # 8002a0cc <_ZL12StateRestorei> + 8002a204: 00000693 li a3,0 + 8002a208: 00000613 li a2,0 + 8002a20c: fff00593 li a1,-1 + 8002a210: 00021517 auipc a0,0x21 + 8002a214: 75850513 addi a0,a0,1880 # 8004b968 <_ZL9StateRegs> + 8002a218: 001a2717 auipc a4,0x1a2 + 8002a21c: 44f73023 sd a5,1088(a4) # 801cc658 + 8002a220: df1d506f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002a224 <_ZL4Syncv>: + 8002a224: ff010113 addi sp,sp,-16 + 8002a228: 00813023 sd s0,0(sp) + 8002a22c: 001a2417 auipc s0,0x1a2 + 8002a230: 0fe40413 addi s0,s0,254 # 801cc32a <_ZL4mode> + 8002a234: 00045783 lhu a5,0(s0) + 8002a238: 001a2517 auipc a0,0x1a2 + 8002a23c: 0f054503 lbu a0,240(a0) # 801cc328 <_ZL4bank> + 8002a240: 00357513 andi a0,a0,3 + 8002a244: 0027979b slliw a5,a5,0x2 + 8002a248: 07c7f793 andi a5,a5,124 + 8002a24c: 00f56533 or a0,a0,a5 + 8002a250: 00113423 sd ra,8(sp) + 8002a254: cb1e60ef jal ra,80010f04 <_Z7setchr8j> + 8002a258: 00045583 lhu a1,0(s0) + 8002a25c: 0005879b sext.w a5,a1 + 8002a260: 4087d79b sraiw a5,a5,0x8 + 8002a264: 0205f713 andi a4,a1,32 + 8002a268: 03f7f793 andi a5,a5,63 + 8002a26c: 0405f593 andi a1,a1,64 + 8002a270: 00f5e5b3 or a1,a1,a5 + 8002a274: 04070463 beqz a4,8002a2bc <_ZL4Syncv+0x98> + 8002a278: 00008537 lui a0,0x8 + 8002a27c: 9dde60ef jal ra,80010c58 <_Z8setprg16jj> + 8002a280: 00045783 lhu a5,0(s0) + 8002a284: 0000c537 lui a0,0xc + 8002a288: 4087d59b sraiw a1,a5,0x8 + 8002a28c: 03f5f593 andi a1,a1,63 + 8002a290: 0407f793 andi a5,a5,64 + 8002a294: 00f5e5b3 or a1,a1,a5 + 8002a298: 9c1e60ef jal ra,80010c58 <_Z8setprg16jj> + 8002a29c: 00045503 lhu a0,0(s0) + 8002a2a0: 00013403 ld s0,0(sp) + 8002a2a4: 00813083 ld ra,8(sp) + 8002a2a8: 00755513 srli a0,a0,0x7 + 8002a2ac: 00154513 xori a0,a0,1 + 8002a2b0: 00157513 andi a0,a0,1 + 8002a2b4: 01010113 addi sp,sp,16 + 8002a2b8: d91e606f j 80011048 <_Z9setmirrori> + 8002a2bc: 0015d593 srli a1,a1,0x1 + 8002a2c0: 00008537 lui a0,0x8 + 8002a2c4: b51e60ef jal ra,80010e14 <_Z8setprg32jj> + 8002a2c8: fd5ff06f j 8002a29c <_ZL4Syncv+0x78> + +000000008002a2cc <_ZL12StateRestorei>: + 8002a2cc: f59ff06f j 8002a224 <_ZL4Syncv> + +000000008002a2d0 <_ZL8M62Resetv>: + 8002a2d0: 001a2797 auipc a5,0x1a2 + 8002a2d4: 04079d23 sh zero,90(a5) # 801cc32a <_ZL4mode> + 8002a2d8: 001a2797 auipc a5,0x1a2 + 8002a2dc: 04078823 sb zero,80(a5) # 801cc328 <_ZL4bank> + 8002a2e0: f45ff06f j 8002a224 <_ZL4Syncv> + +000000008002a2e4 <_ZL8M62Writejh>: + 8002a2e4: 03251513 slli a0,a0,0x32 + 8002a2e8: 03255513 srli a0,a0,0x32 + 8002a2ec: 0035f593 andi a1,a1,3 + 8002a2f0: 001a2797 auipc a5,0x1a2 + 8002a2f4: 02a79d23 sh a0,58(a5) # 801cc32a <_ZL4mode> + 8002a2f8: 001a2797 auipc a5,0x1a2 + 8002a2fc: 02b78823 sb a1,48(a5) # 801cc328 <_ZL4bank> + 8002a300: f25ff06f j 8002a224 <_ZL4Syncv> + +000000008002a304 <_ZL8M62Powerv>: + 8002a304: ff010113 addi sp,sp,-16 + 8002a308: 00113423 sd ra,8(sp) + 8002a30c: 00813023 sd s0,0(sp) + 8002a310: 001a2797 auipc a5,0x1a2 + 8002a314: 00079d23 sh zero,26(a5) # 801cc32a <_ZL4mode> + 8002a318: 00010437 lui s0,0x10 + 8002a31c: 001a2797 auipc a5,0x1a2 + 8002a320: 00078623 sb zero,12(a5) # 801cc328 <_ZL4bank> + 8002a324: f01ff0ef jal ra,8002a224 <_ZL4Syncv> + 8002a328: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002a32c: 00000617 auipc a2,0x0 + 8002a330: fb860613 addi a2,a2,-72 # 8002a2e4 <_ZL8M62Writejh> + 8002a334: 00008537 lui a0,0x8 + 8002a338: 7f0090ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002a33c: fff40593 addi a1,s0,-1 + 8002a340: 00013403 ld s0,0(sp) + 8002a344: 00813083 ld ra,8(sp) + 8002a348: fffe6617 auipc a2,0xfffe6 + 8002a34c: 31860613 addi a2,a2,792 # 80010660 <_Z6CartBRj> + 8002a350: 00008537 lui a0,0x8 + 8002a354: 01010113 addi sp,sp,16 + 8002a358: 6c40906f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +000000008002a35c <_Z13Mapper62_InitP8CartInfo>: + 8002a35c: ff010113 addi sp,sp,-16 + 8002a360: 00113423 sd ra,8(sp) + 8002a364: 00000797 auipc a5,0x0 + 8002a368: fa078793 addi a5,a5,-96 # 8002a304 <_ZL8M62Powerv> + 8002a36c: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 8002a370: 00000797 auipc a5,0x0 + 8002a374: f6078793 addi a5,a5,-160 # 8002a2d0 <_ZL8M62Resetv> + 8002a378: 00f53423 sd a5,8(a0) + 8002a37c: 00000693 li a3,0 + 8002a380: 00000613 li a2,0 + 8002a384: fff00593 li a1,-1 + 8002a388: 00021517 auipc a0,0x21 + 8002a38c: 64050513 addi a0,a0,1600 # 8004b9c8 <_ZL9StateRegs> + 8002a390: c81d50ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002a394: 00813083 ld ra,8(sp) + 8002a398: 00000797 auipc a5,0x0 + 8002a39c: f3478793 addi a5,a5,-204 # 8002a2cc <_ZL12StateRestorei> + 8002a3a0: 001a2717 auipc a4,0x1a2 + 8002a3a4: 2af73c23 sd a5,696(a4) # 801cc658 + 8002a3a8: 01010113 addi sp,sp,16 + 8002a3ac: 00008067 ret + +000000008002a3b0 <_ZL15UNL22211WriteLojh>: + 8002a3b0: 00357793 andi a5,a0,3 + 8002a3b4: 001a2517 auipc a0,0x1a2 + 8002a3b8: f7c50513 addi a0,a0,-132 # 801cc330 <_ZL3reg> + 8002a3bc: 00f50533 add a0,a0,a5 + 8002a3c0: 00b50023 sb a1,0(a0) + 8002a3c4: 00008067 ret + +000000008002a3c8 <_ZL14UNL22211ReadLoj>: + 8002a3c8: 001a2797 auipc a5,0x1a2 + 8002a3cc: f6878793 addi a5,a5,-152 # 801cc330 <_ZL3reg> + 8002a3d0: 0017c503 lbu a0,1(a5) + 8002a3d4: 0027c683 lbu a3,2(a5) + 8002a3d8: 001a2717 auipc a4,0x1a2 + 8002a3dc: f5d74703 lbu a4,-163(a4) # 801cc335 <_ZL5is173> + 8002a3e0: 00100793 li a5,1 + 8002a3e4: 00d54533 xor a0,a0,a3 + 8002a3e8: 0185151b slliw a0,a0,0x18 + 8002a3ec: 4185551b sraiw a0,a0,0x18 + 8002a3f0: 00071463 bnez a4,8002a3f8 <_ZL14UNL22211ReadLoj+0x30> + 8002a3f4: 04000793 li a5,64 + 8002a3f8: 00f56533 or a0,a0,a5 + 8002a3fc: 0ff57513 andi a0,a0,255 + 8002a400: 00008067 ret + +000000008002a404 <_ZL4Syncv>: + 8002a404: ff010113 addi sp,sp,-16 + 8002a408: 00813023 sd s0,0(sp) + 8002a40c: 001a2417 auipc s0,0x1a2 + 8002a410: f2440413 addi s0,s0,-220 # 801cc330 <_ZL3reg> + 8002a414: 00244583 lbu a1,2(s0) + 8002a418: 00008537 lui a0,0x8 + 8002a41c: 00113423 sd ra,8(sp) + 8002a420: 4025d59b sraiw a1,a1,0x2 + 8002a424: 0015f593 andi a1,a1,1 + 8002a428: 9ede60ef jal ra,80010e14 <_Z8setprg32jj> + 8002a42c: 001a2797 auipc a5,0x1a2 + 8002a430: f087c783 lbu a5,-248(a5) # 801cc334 <_ZL5is172> + 8002a434: 02078e63 beqz a5,8002a470 <_ZL4Syncv+0x6c> + 8002a438: 00244783 lbu a5,2(s0) + 8002a43c: 001a2517 auipc a0,0x1a2 + 8002a440: ef054503 lbu a0,-272(a0) # 801cc32c <_ZL3cmd> + 8002a444: 00013403 ld s0,0(sp) + 8002a448: 00a7c7b3 xor a5,a5,a0 + 8002a44c: 0ff7f793 andi a5,a5,255 + 8002a450: 00813083 ld ra,8(sp) + 8002a454: 4037d51b sraiw a0,a5,0x3 + 8002a458: 4057d79b sraiw a5,a5,0x5 + 8002a45c: 00257513 andi a0,a0,2 + 8002a460: 0017f793 andi a5,a5,1 + 8002a464: 00f56533 or a0,a0,a5 + 8002a468: 01010113 addi sp,sp,16 + 8002a46c: a99e606f j 80010f04 <_Z7setchr8j> + 8002a470: 00244503 lbu a0,2(s0) + 8002a474: 00013403 ld s0,0(sp) + 8002a478: 00813083 ld ra,8(sp) + 8002a47c: 00357513 andi a0,a0,3 + 8002a480: 01010113 addi sp,sp,16 + 8002a484: a81e606f j 80010f04 <_Z7setchr8j> + +000000008002a488 <_ZL12StateRestorei>: + 8002a488: f7dff06f j 8002a404 <_ZL4Syncv> + +000000008002a48c <_ZL15UNL22211WriteHijh>: + 8002a48c: 001a2797 auipc a5,0x1a2 + 8002a490: eab78023 sb a1,-352(a5) # 801cc32c <_ZL3cmd> + 8002a494: f71ff06f j 8002a404 <_ZL4Syncv> + +000000008002a498 <_ZL13UNL22211Powerv>: + 8002a498: fe010113 addi sp,sp,-32 + 8002a49c: 00113c23 sd ra,24(sp) + 8002a4a0: 00813823 sd s0,16(sp) + 8002a4a4: 00913423 sd s1,8(sp) + 8002a4a8: f5dff0ef jal ra,8002a404 <_ZL4Syncv> + 8002a4ac: 000104b7 lui s1,0x10 + 8002a4b0: fff48593 addi a1,s1,-1 # ffff <_entry_offset+0xffff> + 8002a4b4: fffe6617 auipc a2,0xfffe6 + 8002a4b8: 1ac60613 addi a2,a2,428 # 80010660 <_Z6CartBRj> + 8002a4bc: 00008537 lui a0,0x8 + 8002a4c0: 55c090ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002a4c4: 00004437 lui s0,0x4 + 8002a4c8: 10040593 addi a1,s0,256 # 4100 <_entry_offset+0x4100> + 8002a4cc: 00058513 mv a0,a1 + 8002a4d0: 00000617 auipc a2,0x0 + 8002a4d4: ef860613 addi a2,a2,-264 # 8002a3c8 <_ZL14UNL22211ReadLoj> + 8002a4d8: 544090ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002a4dc: 10340593 addi a1,s0,259 + 8002a4e0: 10040513 addi a0,s0,256 + 8002a4e4: 00000617 auipc a2,0x0 + 8002a4e8: ecc60613 addi a2,a2,-308 # 8002a3b0 <_ZL15UNL22211WriteLojh> + 8002a4ec: 63c090ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002a4f0: 01013403 ld s0,16(sp) + 8002a4f4: 01813083 ld ra,24(sp) + 8002a4f8: fff48593 addi a1,s1,-1 + 8002a4fc: 00813483 ld s1,8(sp) + 8002a500: 00000617 auipc a2,0x0 + 8002a504: f8c60613 addi a2,a2,-116 # 8002a48c <_ZL15UNL22211WriteHijh> + 8002a508: 00008537 lui a0,0x8 + 8002a50c: 02010113 addi sp,sp,32 + 8002a510: 6180906f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002a514 <_Z13UNL22211_InitP8CartInfo>: + 8002a514: 00000797 auipc a5,0x0 + 8002a518: f8478793 addi a5,a5,-124 # 8002a498 <_ZL13UNL22211Powerv> + 8002a51c: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 8002a520: 001a2797 auipc a5,0x1a2 + 8002a524: e0078a23 sb zero,-492(a5) # 801cc334 <_ZL5is172> + 8002a528: 001a2797 auipc a5,0x1a2 + 8002a52c: e00786a3 sb zero,-499(a5) # 801cc335 <_ZL5is173> + 8002a530: 00000797 auipc a5,0x0 + 8002a534: f5878793 addi a5,a5,-168 # 8002a488 <_ZL12StateRestorei> + 8002a538: 00000693 li a3,0 + 8002a53c: 00000613 li a2,0 + 8002a540: fff00593 li a1,-1 + 8002a544: 00021517 auipc a0,0x21 + 8002a548: 4cc50513 addi a0,a0,1228 # 8004ba10 <_ZL9StateRegs> + 8002a54c: 001a2717 auipc a4,0x1a2 + 8002a550: 10f73623 sd a5,268(a4) # 801cc658 + 8002a554: abdd506f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002a558 <_Z14Mapper172_InitP8CartInfo>: + 8002a558: 00000797 auipc a5,0x0 + 8002a55c: f4078793 addi a5,a5,-192 # 8002a498 <_ZL13UNL22211Powerv> + 8002a560: 00f53023 sd a5,0(a0) + 8002a564: 00100793 li a5,1 + 8002a568: 001a2717 auipc a4,0x1a2 + 8002a56c: dcf70623 sb a5,-564(a4) # 801cc334 <_ZL5is172> + 8002a570: 001a2797 auipc a5,0x1a2 + 8002a574: dc0782a3 sb zero,-571(a5) # 801cc335 <_ZL5is173> + 8002a578: 00000797 auipc a5,0x0 + 8002a57c: f1078793 addi a5,a5,-240 # 8002a488 <_ZL12StateRestorei> + 8002a580: 00000693 li a3,0 + 8002a584: 00000613 li a2,0 + 8002a588: fff00593 li a1,-1 + 8002a58c: 00021517 auipc a0,0x21 + 8002a590: 48450513 addi a0,a0,1156 # 8004ba10 <_ZL9StateRegs> + 8002a594: 001a2717 auipc a4,0x1a2 + 8002a598: 0cf73223 sd a5,196(a4) # 801cc658 + 8002a59c: a75d506f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002a5a0 <_Z14Mapper173_InitP8CartInfo>: + 8002a5a0: 00000797 auipc a5,0x0 + 8002a5a4: ef878793 addi a5,a5,-264 # 8002a498 <_ZL13UNL22211Powerv> + 8002a5a8: 00f53023 sd a5,0(a0) + 8002a5ac: 001a2797 auipc a5,0x1a2 + 8002a5b0: d8078423 sb zero,-632(a5) # 801cc334 <_ZL5is172> + 8002a5b4: 00100793 li a5,1 + 8002a5b8: 001a2717 auipc a4,0x1a2 + 8002a5bc: d6f70ea3 sb a5,-643(a4) # 801cc335 <_ZL5is173> + 8002a5c0: 00000797 auipc a5,0x0 + 8002a5c4: ec878793 addi a5,a5,-312 # 8002a488 <_ZL12StateRestorei> + 8002a5c8: 00000693 li a3,0 + 8002a5cc: 00000613 li a2,0 + 8002a5d0: fff00593 li a1,-1 + 8002a5d4: 00021517 auipc a0,0x21 + 8002a5d8: 43c50513 addi a0,a0,1084 # 8004ba10 <_ZL9StateRegs> + 8002a5dc: 001a2717 auipc a4,0x1a2 + 8002a5e0: 06f73e23 sd a5,124(a4) # 801cc658 + 8002a5e4: a2dd506f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002a5e8 <_ZL9M69Write0jh>: + 8002a5e8: 00f5f593 andi a1,a1,15 + 8002a5ec: 001a2797 auipc a5,0x1a2 + 8002a5f0: d6b78423 sb a1,-664(a5) # 801cc354 <_ZL6cmdreg> + 8002a5f4: 00008067 ret + +000000008002a5f8 <_ZL10M69SWrite0jh>: + 8002a5f8: ff010113 addi sp,sp,-16 + 8002a5fc: 00058513 mv a0,a1 + 8002a600: 00e00593 li a1,14 + 8002a604: 00113423 sd ra,8(sp) + 8002a608: 0690f0ef jal ra,80039e70 <__umoddi3> + 8002a60c: 00813083 ld ra,8(sp) + 8002a610: 001a2797 auipc a5,0x1a2 + 8002a614: d4a782a3 sb a0,-699(a5) # 801cc355 <_ZL6sndcmd> + 8002a618: 01010113 addi sp,sp,16 + 8002a61c: 00008067 ret + +000000008002a620 <_ZL6DoAYSQi>: + 8002a620: fd010113 addi sp,sp,-48 + 8002a624: 00913c23 sd s1,24(sp) + 8002a628: 001a1797 auipc a5,0x1a1 + 8002a62c: 5207a783 lw a5,1312(a5) # 801cbb48 + 8002a630: 00050493 mv s1,a0 + 8002a634: 001a1517 auipc a0,0x1a1 + 8002a638: 59c52503 lw a0,1436(a0) # 801cbbd0 + 8002a63c: 00a787bb addw a5,a5,a0 + 8002a640: 01213823 sd s2,16(sp) + 8002a644: 01313423 sd s3,8(sp) + 8002a648: 0107979b slliw a5,a5,0x10 + 8002a64c: 00249993 slli s3,s1,0x2 + 8002a650: 0009d917 auipc s2,0x9d + 8002a654: 14090913 addi s2,s2,320 # 800c7790 <_ZL5CAYBC> + 8002a658: 02079513 slli a0,a5,0x20 + 8002a65c: 01390933 add s2,s2,s3 + 8002a660: 02813023 sd s0,32(sp) + 8002a664: 001a1597 auipc a1,0x1a1 + 8002a668: 5685e583 lwu a1,1384(a1) # 801cbbcc + 8002a66c: 02055513 srli a0,a0,0x20 + 8002a670: 00092403 lw s0,0(s2) + 8002a674: 02113423 sd ra,40(sp) + 8002a678: 7b00f0ef jal ra,80039e28 <__udivdi3> + 8002a67c: 0005061b sext.w a2,a0 + 8002a680: 0ec45463 bge s0,a2,8002a768 <_ZL6DoAYSQi+0x148> + 8002a684: 0009d697 auipc a3,0x9d + 8002a688: 0fc68693 addi a3,a3,252 # 800c7780 <_ZL4sreg> + 8002a68c: 0084879b addiw a5,s1,8 + 8002a690: 00f687b3 add a5,a3,a5 + 8002a694: 0007c703 lbu a4,0(a5) + 8002a698: 0014959b slliw a1,s1,0x1 + 8002a69c: 0015879b addiw a5,a1,1 + 8002a6a0: 0027171b slliw a4,a4,0x2 + 8002a6a4: 03c77713 andi a4,a4,60 + 8002a6a8: 4017589b sraiw a7,a4,0x1 + 8002a6ac: 00b685b3 add a1,a3,a1 + 8002a6b0: 00f687b3 add a5,a3,a5 + 8002a6b4: 00e888bb addw a7,a7,a4 + 8002a6b8: 00c92023 sw a2,0(s2) + 8002a6bc: 0005c583 lbu a1,0(a1) + 8002a6c0: 0007c783 lbu a5,0(a5) + 8002a6c4: 0a088263 beqz a7,8002a768 <_ZL6DoAYSQi+0x148> + 8002a6c8: 0076c703 lbu a4,7(a3) + 8002a6cc: 409754bb sraw s1,a4,s1 + 8002a6d0: 0014f493 andi s1,s1,1 + 8002a6d4: 08049a63 bnez s1,8002a768 <_ZL6DoAYSQi+0x148> + 8002a6d8: 0087969b slliw a3,a5,0x8 + 8002a6dc: 000017b7 lui a5,0x1 + 8002a6e0: f0078793 addi a5,a5,-256 # f00 <_entry_offset+0xf00> + 8002a6e4: 0009de97 auipc t4,0x9d + 8002a6e8: 0cce8e93 addi t4,t4,204 # 800c77b0 <_ZL6vcount> + 8002a6ec: 00f6f6b3 and a3,a3,a5 + 8002a6f0: 013e87b3 add a5,t4,s3 + 8002a6f4: 00b6e6b3 or a3,a3,a1 + 8002a6f8: 0007a783 lw a5,0(a5) + 8002a6fc: 0016869b addiw a3,a3,1 + 8002a700: 0009d517 auipc a0,0x9d + 8002a704: 0a050513 addi a0,a0,160 # 800c77a0 <_ZL6dcount> + 8002a708: 0156969b slliw a3,a3,0x15 + 8002a70c: 001a1317 auipc t1,0x1a1 + 8002a710: 4b832303 lw t1,1208(t1) # 801cbbc4 + 8002a714: 01350533 add a0,a0,s3 + 8002a718: 0002de17 auipc t3,0x2d + 8002a71c: 2b0e0e13 addi t3,t3,688 # 800579c8 + 8002a720: 00052703 lw a4,0(a0) + 8002a724: 00070e63 beqz a4,8002a740 <_ZL6DoAYSQi+0x120> + 8002a728: 40445593 srai a1,s0,0x4 + 8002a72c: 00259593 slli a1,a1,0x2 + 8002a730: 00be05b3 add a1,t3,a1 + 8002a734: 0005a803 lw a6,0(a1) + 8002a738: 0118083b addw a6,a6,a7 + 8002a73c: 0105a023 sw a6,0(a1) + 8002a740: 406787bb subw a5,a5,t1 + 8002a744: 00f04a63 bgtz a5,8002a758 <_ZL6DoAYSQi+0x138> + 8002a748: 00d787bb addw a5,a5,a3 + 8002a74c: 00174713 xori a4,a4,1 + 8002a750: fef05ce3 blez a5,8002a748 <_ZL6DoAYSQi+0x128> + 8002a754: 00e52023 sw a4,0(a0) + 8002a758: 0014041b addiw s0,s0,1 + 8002a75c: fc8612e3 bne a2,s0,8002a720 <_ZL6DoAYSQi+0x100> + 8002a760: 013e8eb3 add t4,t4,s3 + 8002a764: 00fea023 sw a5,0(t4) + 8002a768: 02813083 ld ra,40(sp) + 8002a76c: 02013403 ld s0,32(sp) + 8002a770: 01813483 ld s1,24(sp) + 8002a774: 01013903 ld s2,16(sp) + 8002a778: 00813983 ld s3,8(sp) + 8002a77c: 03010113 addi sp,sp,48 + 8002a780: 00008067 ret + +000000008002a784 <_ZL8DoAYSQHQi>: + 8002a784: 0009d697 auipc a3,0x9d + 8002a788: ffc68693 addi a3,a3,-4 # 800c7780 <_ZL4sreg> + 8002a78c: 0076c783 lbu a5,7(a3) + 8002a790: 001a1817 auipc a6,0x1a1 + 8002a794: 44082803 lw a6,1088(a6) # 801cbbd0 + 8002a798: 001a1717 auipc a4,0x1a1 + 8002a79c: 3b072703 lw a4,944(a4) # 801cbb48 + 8002a7a0: 40a7d7bb sraw a5,a5,a0 + 8002a7a4: 00e8073b addw a4,a6,a4 + 8002a7a8: 0017f793 andi a5,a5,1 + 8002a7ac: 00070813 mv a6,a4 + 8002a7b0: 0009d897 auipc a7,0x9d + 8002a7b4: fe088893 addi a7,a7,-32 # 800c7790 <_ZL5CAYBC> + 8002a7b8: 00251313 slli t1,a0,0x2 + 8002a7bc: 0e079463 bnez a5,8002a8a4 <_ZL8DoAYSQHQi+0x120> + 8002a7c0: 006887b3 add a5,a7,t1 + 8002a7c4: 0007a783 lw a5,0(a5) + 8002a7c8: 0ce7fe63 bgeu a5,a4,8002a8a4 <_ZL8DoAYSQHQi+0x120> + 8002a7cc: 0015161b slliw a2,a0,0x1 + 8002a7d0: 0016071b addiw a4,a2,1 + 8002a7d4: 0085051b addiw a0,a0,8 + 8002a7d8: 00a68533 add a0,a3,a0 + 8002a7dc: 00e68733 add a4,a3,a4 + 8002a7e0: 00074703 lbu a4,0(a4) + 8002a7e4: 00054f03 lbu t5,0(a0) + 8002a7e8: 00c686b3 add a3,a3,a2 + 8002a7ec: fff8061b addiw a2,a6,-1 + 8002a7f0: 0006c583 lbu a1,0(a3) + 8002a7f4: 0087151b slliw a0,a4,0x8 + 8002a7f8: 40f6063b subw a2,a2,a5 + 8002a7fc: 006f1f1b slliw t5,t5,0x6 + 8002a800: 00001737 lui a4,0x1 + 8002a804: 3c0f7693 andi a3,t5,960 + 8002a808: f0070713 addi a4,a4,-256 # f00 <_entry_offset+0xf00> + 8002a80c: 0009de97 auipc t4,0x9d + 8002a810: fa4e8e93 addi t4,t4,-92 # 800c77b0 <_ZL6vcount> + 8002a814: 02079793 slli a5,a5,0x20 + 8002a818: 02061613 slli a2,a2,0x20 + 8002a81c: 0207d793 srli a5,a5,0x20 + 8002a820: 00e57533 and a0,a0,a4 + 8002a824: 4016df1b sraiw t5,a3,0x1 + 8002a828: 006e8733 add a4,t4,t1 + 8002a82c: 02065613 srli a2,a2,0x20 + 8002a830: 00b56533 or a0,a0,a1 + 8002a834: 00f60633 add a2,a2,a5 + 8002a838: 00df0f3b addw t5,t5,a3 + 8002a83c: 00279793 slli a5,a5,0x2 + 8002a840: 00032697 auipc a3,0x32 + 8002a844: 18868693 addi a3,a3,392 # 8005c9c8 + 8002a848: 00072703 lw a4,0(a4) + 8002a84c: 0015051b addiw a0,a0,1 + 8002a850: 00261613 slli a2,a2,0x2 + 8002a854: 00d787b3 add a5,a5,a3 + 8002a858: 0009d597 auipc a1,0x9d + 8002a85c: f4858593 addi a1,a1,-184 # 800c77a0 <_ZL6dcount> + 8002a860: 00032697 auipc a3,0x32 + 8002a864: 16c68693 addi a3,a3,364 # 8005c9cc + 8002a868: 0045151b slliw a0,a0,0x4 + 8002a86c: 00d60633 add a2,a2,a3 + 8002a870: 006585b3 add a1,a1,t1 + 8002a874: 0005a683 lw a3,0(a1) + 8002a878: fff7071b addiw a4,a4,-1 + 8002a87c: 0016ce13 xori t3,a3,1 + 8002a880: 00068863 beqz a3,8002a890 <_ZL8DoAYSQHQi+0x10c> + 8002a884: 0007a683 lw a3,0(a5) + 8002a888: 01e686bb addw a3,a3,t5 + 8002a88c: 00d7a023 sw a3,0(a5) + 8002a890: 00478793 addi a5,a5,4 + 8002a894: 00e05e63 blez a4,8002a8b0 <_ZL8DoAYSQHQi+0x12c> + 8002a898: fcc79ee3 bne a5,a2,8002a874 <_ZL8DoAYSQHQi+0xf0> + 8002a89c: 006e8eb3 add t4,t4,t1 + 8002a8a0: 00eea023 sw a4,0(t4) + 8002a8a4: 006888b3 add a7,a7,t1 + 8002a8a8: 0108a023 sw a6,0(a7) + 8002a8ac: 00008067 ret + 8002a8b0: 01c5a023 sw t3,0(a1) + 8002a8b4: 00050713 mv a4,a0 + 8002a8b8: fac79ee3 bne a5,a2,8002a874 <_ZL8DoAYSQHQi+0xf0> + 8002a8bc: fe1ff06f j 8002a89c <_ZL8DoAYSQHQi+0x118> + +000000008002a8c0 <_ZL10M69SWrite1jh>: + 8002a8c0: fe010113 addi sp,sp,-32 + 8002a8c4: 00913423 sd s1,8(sp) + 8002a8c8: 0019e497 auipc s1,0x19e + 8002a8cc: 41848493 addi s1,s1,1048 # 801c8ce0 + 8002a8d0: 00813823 sd s0,16(sp) + 8002a8d4: 01213023 sd s2,0(sp) + 8002a8d8: 0002d797 auipc a5,0x2d + 8002a8dc: 0b078793 addi a5,a5,176 # 80057988 + 8002a8e0: 00113c23 sd ra,24(sp) + 8002a8e4: 00000697 auipc a3,0x0 + 8002a8e8: 0d468693 addi a3,a3,212 # 8002a9b8 <_ZL7AYSoundi> + 8002a8ec: 03c4a703 lw a4,60(s1) + 8002a8f0: 00d7b023 sd a3,0(a5) + 8002a8f4: 00000697 auipc a3,0x0 + 8002a8f8: 11068693 addi a3,a3,272 # 8002aa04 <_ZL9AYSoundHQv> + 8002a8fc: 001a2917 auipc s2,0x1a2 + 8002a900: a5990913 addi s2,s2,-1447 # 801cc355 <_ZL6sndcmd> + 8002a904: 00d7b823 sd a3,16(a5) + 8002a908: 00058413 mv s0,a1 + 8002a90c: 00094783 lbu a5,0(s2) + 8002a910: 02071663 bnez a4,8002a93c <_ZL10M69SWrite1jh+0x7c> + 8002a914: 0009d717 auipc a4,0x9d + 8002a918: e6c70713 addi a4,a4,-404 # 800c7780 <_ZL4sreg> + 8002a91c: 00f707b3 add a5,a4,a5 + 8002a920: 00878023 sb s0,0(a5) + 8002a924: 01813083 ld ra,24(sp) + 8002a928: 01013403 ld s0,16(sp) + 8002a92c: 00813483 ld s1,8(sp) + 8002a930: 00013903 ld s2,0(sp) + 8002a934: 02010113 addi sp,sp,32 + 8002a938: 00008067 ret + 8002a93c: 00a00713 li a4,10 + 8002a940: fcf76ae3 bltu a4,a5,8002a914 <_ZL10M69SWrite1jh+0x54> + 8002a944: 0001b617 auipc a2,0x1b + 8002a948: 6a460613 addi a2,a2,1700 # 80045fe8 <_ZL3lut+0x188> + 8002a94c: 00279693 slli a3,a5,0x2 + 8002a950: 00c686b3 add a3,a3,a2 + 8002a954: 0006a703 lw a4,0(a3) + 8002a958: 00c70733 add a4,a4,a2 + 8002a95c: 00070067 jr a4 + 8002a960: 0404a783 lw a5,64(s1) + 8002a964: 00000513 li a0,0 + 8002a968: 04f05463 blez a5,8002a9b0 <_ZL10M69SWrite1jh+0xf0> + 8002a96c: e19ff0ef jal ra,8002a784 <_ZL8DoAYSQHQi> + 8002a970: 0404a783 lw a5,64(s1) + 8002a974: 00100513 li a0,1 + 8002a978: 00f05e63 blez a5,8002a994 <_ZL10M69SWrite1jh+0xd4> + 8002a97c: e09ff0ef jal ra,8002a784 <_ZL8DoAYSQHQi> + 8002a980: 00094783 lbu a5,0(s2) + 8002a984: f91ff06f j 8002a914 <_ZL10M69SWrite1jh+0x54> + 8002a988: 0404a783 lw a5,64(s1) + 8002a98c: 00000513 li a0,0 + 8002a990: fef046e3 bgtz a5,8002a97c <_ZL10M69SWrite1jh+0xbc> + 8002a994: c8dff0ef jal ra,8002a620 <_ZL6DoAYSQi> + 8002a998: 00094783 lbu a5,0(s2) + 8002a99c: f79ff06f j 8002a914 <_ZL10M69SWrite1jh+0x54> + 8002a9a0: 0404a783 lw a5,64(s1) + 8002a9a4: 00200513 li a0,2 + 8002a9a8: fcf04ae3 bgtz a5,8002a97c <_ZL10M69SWrite1jh+0xbc> + 8002a9ac: fe9ff06f j 8002a994 <_ZL10M69SWrite1jh+0xd4> + 8002a9b0: c71ff0ef jal ra,8002a620 <_ZL6DoAYSQi> + 8002a9b4: fbdff06f j 8002a970 <_ZL10M69SWrite1jh+0xb0> + +000000008002a9b8 <_ZL7AYSoundi>: + 8002a9b8: ff010113 addi sp,sp,-16 + 8002a9bc: 00813023 sd s0,0(sp) + 8002a9c0: 00050413 mv s0,a0 + 8002a9c4: 00000513 li a0,0 + 8002a9c8: 00113423 sd ra,8(sp) + 8002a9cc: c55ff0ef jal ra,8002a620 <_ZL6DoAYSQi> + 8002a9d0: 00100513 li a0,1 + 8002a9d4: c4dff0ef jal ra,8002a620 <_ZL6DoAYSQi> + 8002a9d8: 00200513 li a0,2 + 8002a9dc: c45ff0ef jal ra,8002a620 <_ZL6DoAYSQi> + 8002a9e0: 0009d797 auipc a5,0x9d + 8002a9e4: db078793 addi a5,a5,-592 # 800c7790 <_ZL5CAYBC> + 8002a9e8: 00813083 ld ra,8(sp) + 8002a9ec: 0087a023 sw s0,0(a5) + 8002a9f0: 0087a223 sw s0,4(a5) + 8002a9f4: 0087a423 sw s0,8(a5) + 8002a9f8: 00013403 ld s0,0(sp) + 8002a9fc: 01010113 addi sp,sp,16 + 8002aa00: 00008067 ret + +000000008002aa04 <_ZL9AYSoundHQv>: + 8002aa04: ff010113 addi sp,sp,-16 + 8002aa08: 00000513 li a0,0 + 8002aa0c: 00113423 sd ra,8(sp) + 8002aa10: d75ff0ef jal ra,8002a784 <_ZL8DoAYSQHQi> + 8002aa14: 00100513 li a0,1 + 8002aa18: d6dff0ef jal ra,8002a784 <_ZL8DoAYSQHQi> + 8002aa1c: 00813083 ld ra,8(sp) + 8002aa20: 00200513 li a0,2 + 8002aa24: 01010113 addi sp,sp,16 + 8002aa28: d5dff06f j 8002a784 <_ZL8DoAYSQHQi> + +000000008002aa2c <_ZL8AYHiSynci>: + 8002aa2c: 0009d797 auipc a5,0x9d + 8002aa30: d6478793 addi a5,a5,-668 # 800c7790 <_ZL5CAYBC> + 8002aa34: 00a7a023 sw a0,0(a5) + 8002aa38: 00a7a223 sw a0,4(a5) + 8002aa3c: 00a7a423 sw a0,8(a5) + 8002aa40: 00008067 ret + +000000008002aa44 <_Z12Mapper69_ESIv>: + 8002aa44: ff010113 addi sp,sp,-16 + 8002aa48: 00113423 sd ra,8(sp) + 8002aa4c: 0002d797 auipc a5,0x2d + 8002aa50: f3c78793 addi a5,a5,-196 # 80057988 + 8002aa54: 00000717 auipc a4,0x0 + 8002aa58: ff070713 addi a4,a4,-16 # 8002aa44 <_Z12Mapper69_ESIv> + 8002aa5c: 02e7b023 sd a4,32(a5) + 8002aa60: 00c00613 li a2,12 + 8002aa64: 00000717 auipc a4,0x0 + 8002aa68: fc870713 addi a4,a4,-56 # 8002aa2c <_ZL8AYHiSynci> + 8002aa6c: 00000593 li a1,0 + 8002aa70: 0009d517 auipc a0,0x9d + 8002aa74: d3050513 addi a0,a0,-720 # 800c77a0 <_ZL6dcount> + 8002aa78: 00e7bc23 sd a4,24(a5) + 8002aa7c: 7ad100ef jal ra,8003ba28 + 8002aa80: 00c00613 li a2,12 + 8002aa84: 00000593 li a1,0 + 8002aa88: 0009d517 auipc a0,0x9d + 8002aa8c: d2850513 addi a0,a0,-728 # 800c77b0 <_ZL6vcount> + 8002aa90: 799100ef jal ra,8003ba28 + 8002aa94: 00c00613 li a2,12 + 8002aa98: 00000593 li a1,0 + 8002aa9c: 0009d517 auipc a0,0x9d + 8002aaa0: cf450513 addi a0,a0,-780 # 800c7790 <_ZL5CAYBC> + 8002aaa4: 785100ef jal ra,8003ba28 + 8002aaa8: 00813083 ld ra,8(sp) + 8002aaac: 00000693 li a3,0 + 8002aab0: 00000613 li a2,0 + 8002aab4: fff00593 li a1,-1 + 8002aab8: 00022517 auipc a0,0x22 + 8002aabc: 38050513 addi a0,a0,896 # 8004ce38 <_ZL10SStateRegs> + 8002aac0: 01010113 addi sp,sp,16 + 8002aac4: d4cd506f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002aac8 <_ZL4Syncv>: + 8002aac8: fe010113 addi sp,sp,-32 + 8002aacc: 01213023 sd s2,0(sp) + 8002aad0: 00113c23 sd ra,24(sp) + 8002aad4: 00813823 sd s0,16(sp) + 8002aad8: 00913423 sd s1,8(sp) + 8002aadc: 001a2917 auipc s2,0x1a2 + 8002aae0: 87490913 addi s2,s2,-1932 # 801cc350 <_ZL4preg> + 8002aae4: 00394583 lbu a1,3(s2) + 8002aae8: 0c000793 li a5,192 + 8002aaec: 0c05f713 andi a4,a1,192 + 8002aaf0: 03f5f593 andi a1,a1,63 + 8002aaf4: 0af70663 beq a4,a5,8002aba0 <_ZL4Syncv+0xd8> + 8002aaf8: 00006537 lui a0,0x6 + 8002aafc: fa1e50ef jal ra,80010a9c <_Z7setprg8jj> + 8002ab00: 00094583 lbu a1,0(s2) + 8002ab04: 00008537 lui a0,0x8 + 8002ab08: 001a2497 auipc s1,0x1a2 + 8002ab0c: 83848493 addi s1,s1,-1992 # 801cc340 <_ZL4creg> + 8002ab10: f8de50ef jal ra,80010a9c <_Z7setprg8jj> + 8002ab14: 00194583 lbu a1,1(s2) + 8002ab18: 0000a537 lui a0,0xa + 8002ab1c: 00000413 li s0,0 + 8002ab20: f7de50ef jal ra,80010a9c <_Z7setprg8jj> + 8002ab24: 00294583 lbu a1,2(s2) + 8002ab28: 0000c537 lui a0,0xc + 8002ab2c: 00002937 lui s2,0x2 + 8002ab30: f6de50ef jal ra,80010a9c <_Z7setprg8jj> + 8002ab34: fff00593 li a1,-1 + 8002ab38: 0000e537 lui a0,0xe + 8002ab3c: f61e50ef jal ra,80010a9c <_Z7setprg8jj> + 8002ab40: 0004c583 lbu a1,0(s1) + 8002ab44: 00040513 mv a0,s0 + 8002ab48: 4004041b addiw s0,s0,1024 + 8002ab4c: b58e60ef jal ra,80010ea4 <_Z7setchr1jj> + 8002ab50: 00148493 addi s1,s1,1 + 8002ab54: ff2416e3 bne s0,s2,8002ab40 <_ZL4Syncv+0x78> + 8002ab58: 001a1797 auipc a5,0x1a1 + 8002ab5c: 7f07c783 lbu a5,2032(a5) # 801cc348 <_ZL4mirr> + 8002ab60: 0037f793 andi a5,a5,3 + 8002ab64: 00200713 li a4,2 + 8002ab68: 00200513 li a0,2 + 8002ab6c: 00e78e63 beq a5,a4,8002ab88 <_ZL4Syncv+0xc0> + 8002ab70: 00300713 li a4,3 + 8002ab74: 00300513 li a0,3 + 8002ab78: 00e78863 beq a5,a4,8002ab88 <_ZL4Syncv+0xc0> + 8002ab7c: 00100713 li a4,1 + 8002ab80: 00100513 li a0,1 + 8002ab84: 02e78863 beq a5,a4,8002abb4 <_ZL4Syncv+0xec> + 8002ab88: 01013403 ld s0,16(sp) + 8002ab8c: 01813083 ld ra,24(sp) + 8002ab90: 00813483 ld s1,8(sp) + 8002ab94: 00013903 ld s2,0(sp) + 8002ab98: 02010113 addi sp,sp,32 + 8002ab9c: cace606f j 80011048 <_Z9setmirrori> + 8002aba0: 00058613 mv a2,a1 + 8002aba4: 01000513 li a0,16 + 8002aba8: 000065b7 lui a1,0x6 + 8002abac: d3de50ef jal ra,800108e8 <_Z8setprg8rijj> + 8002abb0: f51ff06f j 8002ab00 <_ZL4Syncv+0x38> + 8002abb4: 01013403 ld s0,16(sp) + 8002abb8: 01813083 ld ra,24(sp) + 8002abbc: 00813483 ld s1,8(sp) + 8002abc0: 00013903 ld s2,0(sp) + 8002abc4: 00000513 li a0,0 + 8002abc8: 02010113 addi sp,sp,32 + 8002abcc: c7ce606f j 80011048 <_Z9setmirrori> + +000000008002abd0 <_ZL12StateRestorei>: + 8002abd0: ef9ff06f j 8002aac8 <_ZL4Syncv> + +000000008002abd4 <_ZL8M69Closev>: + 8002abd4: 001a1517 auipc a0,0x1a1 + 8002abd8: 76453503 ld a0,1892(a0) # 801cc338 <_ZL4WRAM> + 8002abdc: 02050263 beqz a0,8002ac00 <_ZL8M69Closev+0x2c> + 8002abe0: ff010113 addi sp,sp,-16 + 8002abe4: 00113423 sd ra,8(sp) + 8002abe8: 959e70ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002abec: 00813083 ld ra,8(sp) + 8002abf0: 001a1797 auipc a5,0x1a1 + 8002abf4: 7407b423 sd zero,1864(a5) # 801cc338 <_ZL4WRAM> + 8002abf8: 01010113 addi sp,sp,16 + 8002abfc: 00008067 ret + 8002ac00: 001a1797 auipc a5,0x1a1 + 8002ac04: 7207bc23 sd zero,1848(a5) # 801cc338 <_ZL4WRAM> + 8002ac08: 00008067 ret + +000000008002ac0c <_ZL11M69WRAMReadj>: + 8002ac0c: 001a1797 auipc a5,0x1a1 + 8002ac10: 7477c783 lbu a5,1863(a5) # 801cc353 <_ZL4preg+0x3> + 8002ac14: 0c07f793 andi a5,a5,192 + 8002ac18: 04000713 li a4,64 + 8002ac1c: 00e78463 beq a5,a4,8002ac24 <_ZL11M69WRAMReadj+0x18> + 8002ac20: a41e506f j 80010660 <_Z6CartBRj> + 8002ac24: 0002d517 auipc a0,0x2d + 8002ac28: c4454503 lbu a0,-956(a0) # 80057868 + 8002ac2c: 00008067 ret + +000000008002ac30 <_ZL8M69Powerv>: + 8002ac30: 001a1797 auipc a5,0x1a1 + 8002ac34: 720782a3 sb zero,1829(a5) # 801cc355 <_ZL6sndcmd> + 8002ac38: 001a1797 auipc a5,0x1a1 + 8002ac3c: 70078e23 sb zero,1820(a5) # 801cc354 <_ZL6cmdreg> + 8002ac40: 000107b7 lui a5,0x10 + 8002ac44: ff010113 addi sp,sp,-16 + 8002ac48: fff7879b addiw a5,a5,-1 + 8002ac4c: 00113423 sd ra,8(sp) + 8002ac50: 001a1717 auipc a4,0x1a1 + 8002ac54: 70f72423 sw a5,1800(a4) # 801cc358 <_ZL8IRQCount> + 8002ac58: 00813023 sd s0,0(sp) + 8002ac5c: 001a1797 auipc a5,0x1a1 + 8002ac60: 6c078d23 sb zero,1754(a5) # 801cc336 <_ZL4IRQa> + 8002ac64: 00008437 lui s0,0x8 + 8002ac68: e61ff0ef jal ra,8002aac8 <_ZL4Syncv> + 8002ac6c: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 8002ac70: 00000617 auipc a2,0x0 + 8002ac74: f9c60613 addi a2,a2,-100 # 8002ac0c <_ZL11M69WRAMReadj> + 8002ac78: 00006537 lui a0,0x6 + 8002ac7c: 5a1080ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002ac80: fff40593 addi a1,s0,-1 + 8002ac84: 00000617 auipc a2,0x0 + 8002ac88: 1cc60613 addi a2,a2,460 # 8002ae50 <_ZL12M69WRAMWritejh> + 8002ac8c: 00006537 lui a0,0x6 + 8002ac90: 699080ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002ac94: 00010437 lui s0,0x10 + 8002ac98: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002ac9c: fffe6617 auipc a2,0xfffe6 + 8002aca0: 9c460613 addi a2,a2,-1596 # 80010660 <_Z6CartBRj> + 8002aca4: 00008537 lui a0,0x8 + 8002aca8: 575080ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002acac: 0000a5b7 lui a1,0xa + 8002acb0: 00000617 auipc a2,0x0 + 8002acb4: 93860613 addi a2,a2,-1736 # 8002a5e8 <_ZL9M69Write0jh> + 8002acb8: fff58593 addi a1,a1,-1 # 9fff <_entry_offset+0x9fff> + 8002acbc: 00008537 lui a0,0x8 + 8002acc0: 669080ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002acc4: 0000c5b7 lui a1,0xc + 8002acc8: 00000617 auipc a2,0x0 + 8002accc: 06860613 addi a2,a2,104 # 8002ad30 <_ZL9M69Write1jh> + 8002acd0: fff58593 addi a1,a1,-1 # bfff <_entry_offset+0xbfff> + 8002acd4: 0000a537 lui a0,0xa + 8002acd8: 651080ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002acdc: 0000e5b7 lui a1,0xe + 8002ace0: 00000617 auipc a2,0x0 + 8002ace4: 91860613 addi a2,a2,-1768 # 8002a5f8 <_ZL10M69SWrite0jh> + 8002ace8: fff58593 addi a1,a1,-1 # dfff <_entry_offset+0xdfff> + 8002acec: 0000c537 lui a0,0xc + 8002acf0: 639080ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002acf4: fff40593 addi a1,s0,-1 + 8002acf8: 00000617 auipc a2,0x0 + 8002acfc: bc860613 addi a2,a2,-1080 # 8002a8c0 <_ZL10M69SWrite1jh> + 8002ad00: 0000e537 lui a0,0xe + 8002ad04: 625080ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002ad08: 00013403 ld s0,0(sp) + 8002ad0c: 00813083 ld ra,8(sp) + 8002ad10: 001a1517 auipc a0,0x1a1 + 8002ad14: 64c52503 lw a0,1612(a0) # 801cc35c <_ZL8WRAMSIZE> + 8002ad18: 001a1617 auipc a2,0x1a1 + 8002ad1c: 62063603 ld a2,1568(a2) # 801cc338 <_ZL4WRAM> + 8002ad20: 000065b7 lui a1,0x6 + 8002ad24: 00a5551b srliw a0,a0,0xa + 8002ad28: 01010113 addi sp,sp,16 + 8002ad2c: ae8d506f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +000000008002ad30 <_ZL9M69Write1jh>: + 8002ad30: 001a1797 auipc a5,0x1a1 + 8002ad34: 62478793 addi a5,a5,1572 # 801cc354 <_ZL6cmdreg> + 8002ad38: 0007c683 lbu a3,0(a5) + 8002ad3c: 00f00713 li a4,15 + 8002ad40: 04d76e63 bltu a4,a3,8002ad9c <_ZL9M69Write1jh+0x6c> + 8002ad44: 0001b717 auipc a4,0x1b + 8002ad48: 2d070713 addi a4,a4,720 # 80046014 <_ZL3lut+0x1b4> + 8002ad4c: 00269793 slli a5,a3,0x2 + 8002ad50: 00e787b3 add a5,a5,a4 + 8002ad54: 0007a783 lw a5,0(a5) + 8002ad58: 00e787b3 add a5,a5,a4 + 8002ad5c: 00078067 jr a5 + 8002ad60: 001a1697 auipc a3,0x1a1 + 8002ad64: 5f868693 addi a3,a3,1528 # 801cc358 <_ZL8IRQCount> + 8002ad68: 0006a783 lw a5,0(a3) + 8002ad6c: 00010737 lui a4,0x10 + 8002ad70: f0070713 addi a4,a4,-256 # ff00 <_entry_offset+0xff00> + 8002ad74: 00e7f7b3 and a5,a5,a4 + 8002ad78: 00b7e5b3 or a1,a5,a1 + 8002ad7c: 00b6a023 sw a1,0(a3) + 8002ad80: 00008067 ret + 8002ad84: 001a1717 auipc a4,0x1a1 + 8002ad88: 5d470713 addi a4,a4,1492 # 801cc358 <_ZL8IRQCount> + 8002ad8c: 00074783 lbu a5,0(a4) + 8002ad90: 0085959b slliw a1,a1,0x8 + 8002ad94: 00b7e5b3 or a1,a5,a1 + 8002ad98: 00b72023 sw a1,0(a4) + 8002ad9c: 00008067 ret + 8002ada0: 001a1797 auipc a5,0x1a1 + 8002ada4: 5ab78023 sb a1,1440(a5) # 801cc340 <_ZL4creg> + 8002ada8: d21ff06f j 8002aac8 <_ZL4Syncv> + 8002adac: 001a1797 auipc a5,0x1a1 + 8002adb0: 58b78aa3 sb a1,1429(a5) # 801cc341 <_ZL4creg+0x1> + 8002adb4: d15ff06f j 8002aac8 <_ZL4Syncv> + 8002adb8: 001a1797 auipc a5,0x1a1 + 8002adbc: 58b78523 sb a1,1418(a5) # 801cc342 <_ZL4creg+0x2> + 8002adc0: d09ff06f j 8002aac8 <_ZL4Syncv> + 8002adc4: 001a1797 auipc a5,0x1a1 + 8002adc8: 56b78fa3 sb a1,1407(a5) # 801cc343 <_ZL4creg+0x3> + 8002adcc: cfdff06f j 8002aac8 <_ZL4Syncv> + 8002add0: 001a1797 auipc a5,0x1a1 + 8002add4: 56b78a23 sb a1,1396(a5) # 801cc344 <_ZL4creg+0x4> + 8002add8: cf1ff06f j 8002aac8 <_ZL4Syncv> + 8002addc: 001a1797 auipc a5,0x1a1 + 8002ade0: 56b784a3 sb a1,1385(a5) # 801cc345 <_ZL4creg+0x5> + 8002ade4: ce5ff06f j 8002aac8 <_ZL4Syncv> + 8002ade8: 001a1797 auipc a5,0x1a1 + 8002adec: 54b78f23 sb a1,1374(a5) # 801cc346 <_ZL4creg+0x6> + 8002adf0: cd9ff06f j 8002aac8 <_ZL4Syncv> + 8002adf4: 001a1797 auipc a5,0x1a1 + 8002adf8: 54b789a3 sb a1,1363(a5) # 801cc347 <_ZL4creg+0x7> + 8002adfc: ccdff06f j 8002aac8 <_ZL4Syncv> + 8002ae00: 001a1797 auipc a5,0x1a1 + 8002ae04: 54b789a3 sb a1,1363(a5) # 801cc353 <_ZL4preg+0x3> + 8002ae08: cc1ff06f j 8002aac8 <_ZL4Syncv> + 8002ae0c: 001a1797 auipc a5,0x1a1 + 8002ae10: 54b78223 sb a1,1348(a5) # 801cc350 <_ZL4preg> + 8002ae14: cb5ff06f j 8002aac8 <_ZL4Syncv> + 8002ae18: 001a1797 auipc a5,0x1a1 + 8002ae1c: 52b78ca3 sb a1,1337(a5) # 801cc351 <_ZL4preg+0x1> + 8002ae20: ca9ff06f j 8002aac8 <_ZL4Syncv> + 8002ae24: 001a1797 auipc a5,0x1a1 + 8002ae28: 52b78723 sb a1,1326(a5) # 801cc352 <_ZL4preg+0x2> + 8002ae2c: c9dff06f j 8002aac8 <_ZL4Syncv> + 8002ae30: 0035f593 andi a1,a1,3 + 8002ae34: 001a1797 auipc a5,0x1a1 + 8002ae38: 50b78a23 sb a1,1300(a5) # 801cc348 <_ZL4mirr> + 8002ae3c: c8dff06f j 8002aac8 <_ZL4Syncv> + 8002ae40: 00100513 li a0,1 + 8002ae44: 001a1797 auipc a5,0x1a1 + 8002ae48: 4eb78923 sb a1,1266(a5) # 801cc336 <_ZL4IRQa> + 8002ae4c: f05d506f j 80000d50 <_Z12X6502_IRQEndi> + +000000008002ae50 <_ZL12M69WRAMWritejh>: + 8002ae50: 001a1797 auipc a5,0x1a1 + 8002ae54: 5037c783 lbu a5,1283(a5) # 801cc353 <_ZL4preg+0x3> + 8002ae58: 0c07f793 andi a5,a5,192 + 8002ae5c: 0c000713 li a4,192 + 8002ae60: 00e78463 beq a5,a4,8002ae68 <_ZL12M69WRAMWritejh+0x18> + 8002ae64: 00008067 ret + 8002ae68: 825e506f j 8001068c <_Z6CartBWjh> + +000000008002ae6c <_ZL10M69IRQHooki>: + 8002ae6c: 001a1797 auipc a5,0x1a1 + 8002ae70: 4ca7c783 lbu a5,1226(a5) # 801cc336 <_ZL4IRQa> + 8002ae74: 02078c63 beqz a5,8002aeac <_ZL10M69IRQHooki+0x40> + 8002ae78: ff010113 addi sp,sp,-16 + 8002ae7c: 00813023 sd s0,0(sp) + 8002ae80: 001a1417 auipc s0,0x1a1 + 8002ae84: 4d840413 addi s0,s0,1240 # 801cc358 <_ZL8IRQCount> + 8002ae88: 00042783 lw a5,0(s0) + 8002ae8c: 00113423 sd ra,8(sp) + 8002ae90: 40a787bb subw a5,a5,a0 + 8002ae94: 00f42023 sw a5,0(s0) + 8002ae98: 00f05c63 blez a5,8002aeb0 <_ZL10M69IRQHooki+0x44> + 8002ae9c: 00813083 ld ra,8(sp) + 8002aea0: 00013403 ld s0,0(sp) + 8002aea4: 01010113 addi sp,sp,16 + 8002aea8: 00008067 ret + 8002aeac: 00008067 ret + 8002aeb0: 00100513 li a0,1 + 8002aeb4: e85d50ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 8002aeb8: 001a1797 auipc a5,0x1a1 + 8002aebc: 46078f23 sb zero,1150(a5) # 801cc336 <_ZL4IRQa> + 8002aec0: 000107b7 lui a5,0x10 + 8002aec4: fff7879b addiw a5,a5,-1 + 8002aec8: 00813083 ld ra,8(sp) + 8002aecc: 00f42023 sw a5,0(s0) + 8002aed0: 00013403 ld s0,0(sp) + 8002aed4: 01010113 addi sp,sp,16 + 8002aed8: 00008067 ret + +000000008002aedc <_Z13Mapper69_InitP8CartInfo>: + 8002aedc: fe010113 addi sp,sp,-32 + 8002aee0: 00813823 sd s0,16(sp) + 8002aee4: 00113c23 sd ra,24(sp) + 8002aee8: 00913423 sd s1,8(sp) + 8002aeec: 01213023 sd s2,0(sp) + 8002aef0: 00000717 auipc a4,0x0 + 8002aef4: d4070713 addi a4,a4,-704 # 8002ac30 <_ZL8M69Powerv> + 8002aef8: 00e53023 sd a4,0(a0) + 8002aefc: 05052783 lw a5,80(a0) + 8002af00: 00000717 auipc a4,0x0 + 8002af04: cd470713 addi a4,a4,-812 # 8002abd4 <_ZL8M69Closev> + 8002af08: 00e53823 sd a4,16(a0) + 8002af0c: 00000717 auipc a4,0x0 + 8002af10: f6070713 addi a4,a4,-160 # 8002ae6c <_ZL10M69IRQHooki> + 8002af14: 001a1697 auipc a3,0x1a1 + 8002af18: c2e6b623 sd a4,-980(a3) # 801cbb40 + 8002af1c: 00050413 mv s0,a0 + 8002af20: 0a078863 beqz a5,8002afd0 <_Z13Mapper69_InitP8CartInfo+0xf4> + 8002af24: 05852783 lw a5,88(a0) + 8002af28: 05c52703 lw a4,92(a0) + 8002af2c: 001a1497 auipc s1,0x1a1 + 8002af30: 43048493 addi s1,s1,1072 # 801cc35c <_ZL8WRAMSIZE> + 8002af34: 00e7853b addw a0,a5,a4 + 8002af38: 00a4a023 sw a0,0(s1) + 8002af3c: d30e70ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002af40: 0004a603 lw a2,0(s1) + 8002af44: 00050593 mv a1,a0 + 8002af48: 001a1917 auipc s2,0x1a1 + 8002af4c: 3f090913 addi s2,s2,1008 # 801cc338 <_ZL4WRAM> + 8002af50: 00100693 li a3,1 + 8002af54: 01000513 li a0,16 + 8002af58: 00b93023 sd a1,0(s2) + 8002af5c: d98e50ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8002af60: 0004a583 lw a1,0(s1) + 8002af64: 00093503 ld a0,0(s2) + 8002af68: 0001a697 auipc a3,0x1a + 8002af6c: 3c068693 addi a3,a3,960 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 8002af70: 00000613 li a2,0 + 8002af74: 89cd50ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002af78: 04c42783 lw a5,76(s0) + 8002af7c: 00078a63 beqz a5,8002af90 <_Z13Mapper69_InitP8CartInfo+0xb4> + 8002af80: 00093703 ld a4,0(s2) + 8002af84: 0004a783 lw a5,0(s1) + 8002af88: 00e43c23 sd a4,24(s0) + 8002af8c: 02f42c23 sw a5,56(s0) + 8002af90: 00000797 auipc a5,0x0 + 8002af94: c4078793 addi a5,a5,-960 # 8002abd0 <_ZL12StateRestorei> + 8002af98: 001a1717 auipc a4,0x1a1 + 8002af9c: 6cf73023 sd a5,1728(a4) # 801cc658 + 8002afa0: aa5ff0ef jal ra,8002aa44 <_Z12Mapper69_ESIv> + 8002afa4: 01013403 ld s0,16(sp) + 8002afa8: 01813083 ld ra,24(sp) + 8002afac: 00813483 ld s1,8(sp) + 8002afb0: 00013903 ld s2,0(sp) + 8002afb4: 00000693 li a3,0 + 8002afb8: 00000613 li a2,0 + 8002afbc: fff00593 li a1,-1 + 8002afc0: 00021517 auipc a0,0x21 + 8002afc4: a9850513 addi a0,a0,-1384 # 8004ba58 <_ZL9StateRegs> + 8002afc8: 02010113 addi sp,sp,32 + 8002afcc: 844d506f j 80000010 <_Z10AddExStatePvjiPKc> + 8002afd0: 001a1497 auipc s1,0x1a1 + 8002afd4: 38c48493 addi s1,s1,908 # 801cc35c <_ZL8WRAMSIZE> + 8002afd8: 000027b7 lui a5,0x2 + 8002afdc: 00f4a023 sw a5,0(s1) + 8002afe0: 00002537 lui a0,0x2 + 8002afe4: f59ff06f j 8002af3c <_Z13Mapper69_InitP8CartInfo+0x60> + +000000008002afe8 <_ZL4Syncv>: + 8002afe8: ff010113 addi sp,sp,-16 + 8002afec: 001a1597 auipc a1,0x1a1 + 8002aff0: 3745c583 lbu a1,884(a1) # 801cc360 <_ZL3reg> + 8002aff4: 00006537 lui a0,0x6 + 8002aff8: 00113423 sd ra,8(sp) + 8002affc: aa1e50ef jal ra,80010a9c <_Z7setprg8jj> + 8002b000: 00008537 lui a0,0x8 + 8002b004: fff00593 li a1,-1 + 8002b008: e0de50ef jal ra,80010e14 <_Z8setprg32jj> + 8002b00c: 00813083 ld ra,8(sp) + 8002b010: 00000513 li a0,0 + 8002b014: 01010113 addi sp,sp,16 + 8002b018: eede506f j 80010f04 <_Z7setchr8j> + +000000008002b01c <_ZL12StateRestorei>: + 8002b01c: fcdff06f j 8002afe8 <_ZL4Syncv> + +000000008002b020 <_ZL9M108Writejh>: + 8002b020: 001a1797 auipc a5,0x1a1 + 8002b024: 34b78023 sb a1,832(a5) # 801cc360 <_ZL3reg> + 8002b028: fc1ff06f j 8002afe8 <_ZL4Syncv> + +000000008002b02c <_ZL9M108Powerv>: + 8002b02c: ff010113 addi sp,sp,-16 + 8002b030: 00113423 sd ra,8(sp) + 8002b034: 00813023 sd s0,0(sp) + 8002b038: fb1ff0ef jal ra,8002afe8 <_ZL4Syncv> + 8002b03c: 000085b7 lui a1,0x8 + 8002b040: fffe5617 auipc a2,0xfffe5 + 8002b044: 62060613 addi a2,a2,1568 # 80010660 <_Z6CartBRj> + 8002b048: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 8002b04c: 00006537 lui a0,0x6 + 8002b050: 1cd080ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002b054: 00010437 lui s0,0x10 + 8002b058: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002b05c: fffe5617 auipc a2,0xfffe5 + 8002b060: 60460613 addi a2,a2,1540 # 80010660 <_Z6CartBRj> + 8002b064: 00008537 lui a0,0x8 + 8002b068: 1b5080ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002b06c: 000095b7 lui a1,0x9 + 8002b070: 00000617 auipc a2,0x0 + 8002b074: fb060613 addi a2,a2,-80 # 8002b020 <_ZL9M108Writejh> + 8002b078: fff58593 addi a1,a1,-1 # 8fff <_entry_offset+0x8fff> + 8002b07c: 00008537 lui a0,0x8 + 8002b080: 2a9080ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002b084: fff40593 addi a1,s0,-1 + 8002b088: 00013403 ld s0,0(sp) + 8002b08c: 00813083 ld ra,8(sp) + 8002b090: 00000617 auipc a2,0x0 + 8002b094: f9060613 addi a2,a2,-112 # 8002b020 <_ZL9M108Writejh> + 8002b098: 0000f537 lui a0,0xf + 8002b09c: 01010113 addi sp,sp,16 + 8002b0a0: 2890806f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002b0a4 <_Z14Mapper108_InitP8CartInfo>: + 8002b0a4: 00000797 auipc a5,0x0 + 8002b0a8: f8878793 addi a5,a5,-120 # 8002b02c <_ZL9M108Powerv> + 8002b0ac: 00f53023 sd a5,0(a0) # f000 <_entry_offset+0xf000> + 8002b0b0: 00000797 auipc a5,0x0 + 8002b0b4: f6c78793 addi a5,a5,-148 # 8002b01c <_ZL12StateRestorei> + 8002b0b8: 00000693 li a3,0 + 8002b0bc: 00000613 li a2,0 + 8002b0c0: fff00593 li a1,-1 + 8002b0c4: 00021517 auipc a0,0x21 + 8002b0c8: a3c50513 addi a0,a0,-1476 # 8004bb00 <_ZL9StateRegs> + 8002b0cc: 001a1717 auipc a4,0x1a1 + 8002b0d0: 58f73623 sd a5,1420(a4) # 801cc658 + 8002b0d4: f3dd406f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002b0d8 <_ZL4Syncv>: + 8002b0d8: fe010113 addi sp,sp,-32 + 8002b0dc: 00113c23 sd ra,24(sp) + 8002b0e0: 00813823 sd s0,16(sp) + 8002b0e4: 00913423 sd s1,8(sp) + 8002b0e8: 01213023 sd s2,0(sp) + 8002b0ec: 001a1417 auipc s0,0x1a1 + 8002b0f0: 28440413 addi s0,s0,644 # 801cc370 <_ZL7prg_reg> + 8002b0f4: 00044583 lbu a1,0(s0) + 8002b0f8: 00008537 lui a0,0x8 + 8002b0fc: 001a1497 auipc s1,0x1a1 + 8002b100: 26c48493 addi s1,s1,620 # 801cc368 <_ZL7chr_reg> + 8002b104: 999e50ef jal ra,80010a9c <_Z7setprg8jj> + 8002b108: 00144583 lbu a1,1(s0) + 8002b10c: 0000a537 lui a0,0xa + 8002b110: 00000413 li s0,0 + 8002b114: 989e50ef jal ra,80010a9c <_Z7setprg8jj> + 8002b118: 00002937 lui s2,0x2 + 8002b11c: 0004c583 lbu a1,0(s1) + 8002b120: 00040513 mv a0,s0 + 8002b124: 4004041b addiw s0,s0,1024 + 8002b128: d7de50ef jal ra,80010ea4 <_Z7setchr1jj> + 8002b12c: 00148493 addi s1,s1,1 + 8002b130: ff2416e3 bne s0,s2,8002b11c <_ZL4Syncv+0x44> + 8002b134: 01013403 ld s0,16(sp) + 8002b138: 01813083 ld ra,24(sp) + 8002b13c: 00813483 ld s1,8(sp) + 8002b140: 00013903 ld s2,0(sp) + 8002b144: 001a1517 auipc a0,0x1a1 + 8002b148: 21e54503 lbu a0,542(a0) # 801cc362 <_ZL4mirr> + 8002b14c: 00154513 xori a0,a0,1 + 8002b150: 02010113 addi sp,sp,32 + 8002b154: ef5e506f j 80011048 <_Z9setmirrori> + +000000008002b158 <_ZL12StateRestorei>: + 8002b158: f81ff06f j 8002b0d8 <_ZL4Syncv> + +000000008002b15c <_ZL9M222Powerv>: + 8002b15c: ff010113 addi sp,sp,-16 + 8002b160: fff00593 li a1,-1 + 8002b164: 0000c537 lui a0,0xc + 8002b168: 00113423 sd ra,8(sp) + 8002b16c: 00813023 sd s0,0(sp) + 8002b170: ae9e50ef jal ra,80010c58 <_Z8setprg16jj> + 8002b174: 00010437 lui s0,0x10 + 8002b178: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002b17c: fffe5617 auipc a2,0xfffe5 + 8002b180: 4e460613 addi a2,a2,1252 # 80010660 <_Z6CartBRj> + 8002b184: 00008537 lui a0,0x8 + 8002b188: 095080ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002b18c: fff40593 addi a1,s0,-1 + 8002b190: 00013403 ld s0,0(sp) + 8002b194: 00813083 ld ra,8(sp) + 8002b198: 00000617 auipc a2,0x0 + 8002b19c: 01460613 addi a2,a2,20 # 8002b1ac <_ZL9M222Writejh> + 8002b1a0: 00008537 lui a0,0x8 + 8002b1a4: 01010113 addi sp,sp,16 + 8002b1a8: 1810806f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002b1ac <_ZL9M222Writejh>: + 8002b1ac: 0000f737 lui a4,0xf + 8002b1b0: 00370793 addi a5,a4,3 # f003 <_entry_offset+0xf003> + 8002b1b4: 0000c6b7 lui a3,0xc + 8002b1b8: 00f57533 and a0,a0,a5 + 8002b1bc: 00268793 addi a5,a3,2 # c002 <_entry_offset+0xc002> + 8002b1c0: 10f50263 beq a0,a5,8002b2c4 <_ZL9M222Writejh+0x118> + 8002b1c4: 02a7e663 bltu a5,a0,8002b1f0 <_ZL9M222Writejh+0x44> + 8002b1c8: 0000b7b7 lui a5,0xb + 8002b1cc: 10f50263 beq a0,a5,8002b2d0 <_ZL9M222Writejh+0x124> + 8002b1d0: 08a7e663 bltu a5,a0,8002b25c <_ZL9M222Writejh+0xb0> + 8002b1d4: 000097b7 lui a5,0x9 + 8002b1d8: 0cf50863 beq a0,a5,8002b2a8 <_ZL9M222Writejh+0xfc> + 8002b1dc: 0000a7b7 lui a5,0xa + 8002b1e0: 06f51463 bne a0,a5,8002b248 <_ZL9M222Writejh+0x9c> + 8002b1e4: 001a1797 auipc a5,0x1a1 + 8002b1e8: 18b786a3 sb a1,397(a5) # 801cc371 <_ZL7prg_reg+0x1> + 8002b1ec: 0ac0006f j 8002b298 <_ZL9M222Writejh+0xec> + 8002b1f0: 0000e7b7 lui a5,0xe + 8002b1f4: 0ef50463 beq a0,a5,8002b2dc <_ZL9M222Writejh+0x130> + 8002b1f8: 06a7fe63 bgeu a5,a0,8002b274 <_ZL9M222Writejh+0xc8> + 8002b1fc: 00278793 addi a5,a5,2 # e002 <_entry_offset+0xe002> + 8002b200: 08f50e63 beq a0,a5,8002b29c <_ZL9M222Writejh+0xf0> + 8002b204: 08e51a63 bne a0,a4,8002b298 <_ZL9M222Writejh+0xec> + 8002b208: ff010113 addi sp,sp,-16 + 8002b20c: 001a1797 auipc a5,0x1a1 + 8002b210: 14b78aa3 sb a1,341(a5) # 801cc361 <_ZL4IRQa> + 8002b214: 00113423 sd ra,8(sp) + 8002b218: 001a1717 auipc a4,0x1a1 + 8002b21c: 58872703 lw a4,1416(a4) # 801cc7a0 + 8002b220: 0ef00793 li a5,239 + 8002b224: 0ce7d263 bge a5,a4,8002b2e8 <_ZL9M222Writejh+0x13c> + 8002b228: 0045859b addiw a1,a1,4 + 8002b22c: 001a1797 auipc a5,0x1a1 + 8002b230: 14b78323 sb a1,326(a5) # 801cc372 <_ZL8IRQCount> + 8002b234: 00100513 li a0,1 + 8002b238: b19d50ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8002b23c: 00813083 ld ra,8(sp) + 8002b240: 01010113 addi sp,sp,16 + 8002b244: e95ff06f j 8002b0d8 <_ZL4Syncv> + 8002b248: 000087b7 lui a5,0x8 + 8002b24c: 04f51663 bne a0,a5,8002b298 <_ZL9M222Writejh+0xec> + 8002b250: 001a1797 auipc a5,0x1a1 + 8002b254: 12b78023 sb a1,288(a5) # 801cc370 <_ZL7prg_reg> + 8002b258: 0400006f j 8002b298 <_ZL9M222Writejh+0xec> + 8002b25c: 00278793 addi a5,a5,2 + 8002b260: 02f50863 beq a0,a5,8002b290 <_ZL9M222Writejh+0xe4> + 8002b264: 02d51a63 bne a0,a3,8002b298 <_ZL9M222Writejh+0xec> + 8002b268: 001a1797 auipc a5,0x1a1 + 8002b26c: 10b78123 sb a1,258(a5) # 801cc36a <_ZL7chr_reg+0x2> + 8002b270: 0280006f j 8002b298 <_ZL9M222Writejh+0xec> + 8002b274: 0000d7b7 lui a5,0xd + 8002b278: 04f50063 beq a0,a5,8002b2b8 <_ZL9M222Writejh+0x10c> + 8002b27c: 00278793 addi a5,a5,2 # d002 <_entry_offset+0xd002> + 8002b280: 00f51c63 bne a0,a5,8002b298 <_ZL9M222Writejh+0xec> + 8002b284: 001a1797 auipc a5,0x1a1 + 8002b288: 0eb784a3 sb a1,233(a5) # 801cc36d <_ZL7chr_reg+0x5> + 8002b28c: 00c0006f j 8002b298 <_ZL9M222Writejh+0xec> + 8002b290: 001a1797 auipc a5,0x1a1 + 8002b294: 0cb78ca3 sb a1,217(a5) # 801cc369 <_ZL7chr_reg+0x1> + 8002b298: e41ff06f j 8002b0d8 <_ZL4Syncv> + 8002b29c: 001a1797 auipc a5,0x1a1 + 8002b2a0: 0cb789a3 sb a1,211(a5) # 801cc36f <_ZL7chr_reg+0x7> + 8002b2a4: ff5ff06f j 8002b298 <_ZL9M222Writejh+0xec> + 8002b2a8: 0015f593 andi a1,a1,1 + 8002b2ac: 001a1797 auipc a5,0x1a1 + 8002b2b0: 0ab78b23 sb a1,182(a5) # 801cc362 <_ZL4mirr> + 8002b2b4: fe5ff06f j 8002b298 <_ZL9M222Writejh+0xec> + 8002b2b8: 001a1797 auipc a5,0x1a1 + 8002b2bc: 0ab78a23 sb a1,180(a5) # 801cc36c <_ZL7chr_reg+0x4> + 8002b2c0: fd9ff06f j 8002b298 <_ZL9M222Writejh+0xec> + 8002b2c4: 001a1797 auipc a5,0x1a1 + 8002b2c8: 0ab783a3 sb a1,167(a5) # 801cc36b <_ZL7chr_reg+0x3> + 8002b2cc: fcdff06f j 8002b298 <_ZL9M222Writejh+0xec> + 8002b2d0: 001a1797 auipc a5,0x1a1 + 8002b2d4: 08b78c23 sb a1,152(a5) # 801cc368 <_ZL7chr_reg> + 8002b2d8: fc1ff06f j 8002b298 <_ZL9M222Writejh+0xec> + 8002b2dc: 001a1797 auipc a5,0x1a1 + 8002b2e0: 08b78923 sb a1,146(a5) # 801cc36e <_ZL7chr_reg+0x6> + 8002b2e4: fb5ff06f j 8002b298 <_ZL9M222Writejh+0xec> + 8002b2e8: ff85859b addiw a1,a1,-8 + 8002b2ec: 001a1797 auipc a5,0x1a1 + 8002b2f0: 08b78323 sb a1,134(a5) # 801cc372 <_ZL8IRQCount> + 8002b2f4: f41ff06f j 8002b234 <_ZL9M222Writejh+0x88> + +000000008002b2f8 <_ZL7M222IRQv>: + 8002b2f8: 001a1797 auipc a5,0x1a1 + 8002b2fc: 0697c783 lbu a5,105(a5) # 801cc361 <_ZL4IRQa> + 8002b300: 02078263 beqz a5,8002b324 <_ZL7M222IRQv+0x2c> + 8002b304: 001a1717 auipc a4,0x1a1 + 8002b308: 06e70713 addi a4,a4,110 # 801cc372 <_ZL8IRQCount> + 8002b30c: 00074783 lbu a5,0(a4) + 8002b310: 0ed00693 li a3,237 + 8002b314: 0017879b addiw a5,a5,1 + 8002b318: 0ff7f793 andi a5,a5,255 + 8002b31c: 00f70023 sb a5,0(a4) + 8002b320: 00f6e463 bltu a3,a5,8002b328 <_ZL7M222IRQv+0x30> + 8002b324: 00008067 ret + 8002b328: 00100513 li a0,1 + 8002b32c: a0dd506f j 80000d38 <_Z14X6502_IRQBegini> + +000000008002b330 <_Z14Mapper222_InitP8CartInfo>: + 8002b330: 00000797 auipc a5,0x0 + 8002b334: e2c78793 addi a5,a5,-468 # 8002b15c <_ZL9M222Powerv> + 8002b338: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 8002b33c: 00000797 auipc a5,0x0 + 8002b340: fbc78793 addi a5,a5,-68 # 8002b2f8 <_ZL7M222IRQv> + 8002b344: 001a1717 auipc a4,0x1a1 + 8002b348: 36f73e23 sd a5,892(a4) # 801cc6c0 + 8002b34c: 00000797 auipc a5,0x0 + 8002b350: e0c78793 addi a5,a5,-500 # 8002b158 <_ZL12StateRestorei> + 8002b354: 00000693 li a3,0 + 8002b358: 00000613 li a2,0 + 8002b35c: fff00593 li a1,-1 + 8002b360: 00020517 auipc a0,0x20 + 8002b364: 7d050513 addi a0,a0,2000 # 8004bb30 <_ZL9StateRegs> + 8002b368: 001a1717 auipc a4,0x1a1 + 8002b36c: 2ef73823 sd a5,752(a4) # 801cc658 + 8002b370: ca1d406f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002b374 <_ZL13UNLA9746Powerv>: + 8002b374: ff010113 addi sp,sp,-16 + 8002b378: 00113423 sd ra,8(sp) + 8002b37c: e45fa0ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 8002b380: 00813083 ld ra,8(sp) + 8002b384: 0000c5b7 lui a1,0xc + 8002b388: 00000617 auipc a2,0x0 + 8002b38c: 01860613 addi a2,a2,24 # 8002b3a0 <_ZL13UNLA9746Writejh> + 8002b390: fff58593 addi a1,a1,-1 # bfff <_entry_offset+0xbfff> + 8002b394: 00008537 lui a0,0x8 + 8002b398: 01010113 addi sp,sp,16 + 8002b39c: 78c0806f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002b3a0 <_ZL13UNLA9746Writejh>: + 8002b3a0: 0000e737 lui a4,0xe + 8002b3a4: fe010113 addi sp,sp,-32 + 8002b3a8: 00370713 addi a4,a4,3 # e003 <_entry_offset+0xe003> + 8002b3ac: 000087b7 lui a5,0x8 + 8002b3b0: 00813823 sd s0,16(sp) + 8002b3b4: 00e57533 and a0,a0,a4 + 8002b3b8: 00113c23 sd ra,24(sp) + 8002b3bc: 00913423 sd s1,8(sp) + 8002b3c0: 01213023 sd s2,0(sp) + 8002b3c4: 00178713 addi a4,a5,1 # 8001 <_entry_offset+0x8001> + 8002b3c8: 00058413 mv s0,a1 + 8002b3cc: 02e50463 beq a0,a4,8002b3f4 <_ZL13UNLA9746Writejh+0x54> + 8002b3d0: 00278713 addi a4,a5,2 + 8002b3d4: 0ee50463 beq a0,a4,8002b4bc <_ZL13UNLA9746Writejh+0x11c> + 8002b3d8: 0af50e63 beq a0,a5,8002b494 <_ZL13UNLA9746Writejh+0xf4> + 8002b3dc: 01813083 ld ra,24(sp) + 8002b3e0: 01013403 ld s0,16(sp) + 8002b3e4: 00813483 ld s1,8(sp) + 8002b3e8: 00013903 ld s2,0(sp) + 8002b3ec: 02010113 addi sp,sp,32 + 8002b3f0: 00008067 ret + 8002b3f4: 0055d593 srli a1,a1,0x5 + 8002b3f8: 00345713 srli a4,s0,0x3 + 8002b3fc: 001a1497 auipc s1,0x1a1 + 8002b400: e5448493 addi s1,s1,-428 # 801cc250 + 8002b404: 00277713 andi a4,a4,2 + 8002b408: 00145913 srli s2,s0,0x1 + 8002b40c: 0015f593 andi a1,a1,1 + 8002b410: 0004c783 lbu a5,0(s1) + 8002b414: 00e5e5b3 or a1,a1,a4 + 8002b418: 00497693 andi a3,s2,4 + 8002b41c: 00141713 slli a4,s0,0x1 + 8002b420: 00d5e5b3 or a1,a1,a3 + 8002b424: 00877713 andi a4,a4,8 + 8002b428: 02500693 li a3,37 + 8002b42c: 00e5e5b3 or a1,a1,a4 + 8002b430: 0ed78063 beq a5,a3,8002b510 <_ZL13UNLA9746Writejh+0x170> + 8002b434: 04f6e663 bltu a3,a5,8002b480 <_ZL13UNLA9746Writejh+0xe0> + 8002b438: 02300713 li a4,35 + 8002b43c: 0ce78463 beq a5,a4,8002b504 <_ZL13UNLA9746Writejh+0x164> + 8002b440: 02400713 li a4,36 + 8002b444: 00e79663 bne a5,a4,8002b450 <_ZL13UNLA9746Writejh+0xb0> + 8002b448: 0000c537 lui a0,0xc + 8002b44c: e50e50ef jal ra,80010a9c <_Z7setprg8jj> + 8002b450: 0014c783 lbu a5,1(s1) + 8002b454: 01600713 li a4,22 + 8002b458: ff87879b addiw a5,a5,-8 + 8002b45c: 0ff7f793 andi a5,a5,255 + 8002b460: f6f76ee3 bltu a4,a5,8002b3dc <_ZL13UNLA9746Writejh+0x3c> + 8002b464: 0001b717 auipc a4,0x1b + 8002b468: c0470713 addi a4,a4,-1020 # 80046068 <_ZL3lut+0x208> + 8002b46c: 00279793 slli a5,a5,0x2 + 8002b470: 00e787b3 add a5,a5,a4 + 8002b474: 0007a783 lw a5,0(a5) + 8002b478: 00e787b3 add a5,a5,a4 + 8002b47c: 00078067 jr a5 + 8002b480: 02600713 li a4,38 + 8002b484: fce796e3 bne a5,a4,8002b450 <_ZL13UNLA9746Writejh+0xb0> + 8002b488: 00008537 lui a0,0x8 + 8002b48c: e10e50ef jal ra,80010a9c <_Z7setprg8jj> + 8002b490: fc1ff06f j 8002b450 <_ZL13UNLA9746Writejh+0xb0> + 8002b494: 01813083 ld ra,24(sp) + 8002b498: 01013403 ld s0,16(sp) + 8002b49c: 001a1797 auipc a5,0x1a1 + 8002b4a0: dab78aa3 sb a1,-587(a5) # 801cc251 + 8002b4a4: 001a1797 auipc a5,0x1a1 + 8002b4a8: da078623 sb zero,-596(a5) # 801cc250 + 8002b4ac: 00813483 ld s1,8(sp) + 8002b4b0: 00013903 ld s2,0(sp) + 8002b4b4: 02010113 addi sp,sp,32 + 8002b4b8: 00008067 ret + 8002b4bc: 01813083 ld ra,24(sp) + 8002b4c0: 01013403 ld s0,16(sp) + 8002b4c4: 001a1797 auipc a5,0x1a1 + 8002b4c8: d8b78623 sb a1,-628(a5) # 801cc250 + 8002b4cc: 001a1797 auipc a5,0x1a1 + 8002b4d0: d80782a3 sb zero,-635(a5) # 801cc251 + 8002b4d4: 00813483 ld s1,8(sp) + 8002b4d8: 00013903 ld s2,0(sp) + 8002b4dc: 02010113 addi sp,sp,32 + 8002b4e0: 00008067 ret + 8002b4e4: 0044141b slliw s0,s0,0x4 + 8002b4e8: 00848123 sb s0,2(s1) + 8002b4ec: 01813083 ld ra,24(sp) + 8002b4f0: 01013403 ld s0,16(sp) + 8002b4f4: 00813483 ld s1,8(sp) + 8002b4f8: 00013903 ld s2,0(sp) + 8002b4fc: 02010113 addi sp,sp,32 + 8002b500: 00008067 ret + 8002b504: 0000e537 lui a0,0xe + 8002b508: d94e50ef jal ra,80010a9c <_Z7setprg8jj> + 8002b50c: f45ff06f j 8002b450 <_ZL13UNLA9746Writejh+0xb0> + 8002b510: 0000a537 lui a0,0xa + 8002b514: d88e50ef jal ra,80010a9c <_Z7setprg8jj> + 8002b518: f39ff06f j 8002b450 <_ZL13UNLA9746Writejh+0xb0> + 8002b51c: 0024c583 lbu a1,2(s1) + 8002b520: 00002537 lui a0,0x2 + 8002b524: 80050513 addi a0,a0,-2048 # 1800 <_entry_offset+0x1800> + 8002b528: 00b965b3 or a1,s2,a1 + 8002b52c: 01013403 ld s0,16(sp) + 8002b530: 01813083 ld ra,24(sp) + 8002b534: 00813483 ld s1,8(sp) + 8002b538: 00013903 ld s2,0(sp) + 8002b53c: 02010113 addi sp,sp,32 + 8002b540: 965e506f j 80010ea4 <_Z7setchr1jj> + 8002b544: 0024c583 lbu a1,2(s1) + 8002b548: 40000513 li a0,1024 + 8002b54c: 00b965b3 or a1,s2,a1 + 8002b550: 0015e593 ori a1,a1,1 + 8002b554: 0005859b sext.w a1,a1 + 8002b558: fd5ff06f j 8002b52c <_ZL13UNLA9746Writejh+0x18c> + 8002b55c: 00001537 lui a0,0x1 + 8002b560: 0024c583 lbu a1,2(s1) + 8002b564: 80050513 addi a0,a0,-2048 # 800 <_entry_offset+0x800> + 8002b568: fc1ff06f j 8002b528 <_ZL13UNLA9746Writejh+0x188> + 8002b56c: 0024c783 lbu a5,2(s1) + 8002b570: 00001537 lui a0,0x1 + 8002b574: c0050513 addi a0,a0,-1024 # c00 <_entry_offset+0xc00> + 8002b578: 00f96933 or s2,s2,a5 + 8002b57c: 00196593 ori a1,s2,1 + 8002b580: 0005859b sext.w a1,a1 + 8002b584: fa9ff06f j 8002b52c <_ZL13UNLA9746Writejh+0x18c> + 8002b588: 0024c583 lbu a1,2(s1) + 8002b58c: 00001537 lui a0,0x1 + 8002b590: f99ff06f j 8002b528 <_ZL13UNLA9746Writejh+0x188> + 8002b594: 0024c583 lbu a1,2(s1) + 8002b598: 00000513 li a0,0 + 8002b59c: f8dff06f j 8002b528 <_ZL13UNLA9746Writejh+0x188> + 8002b5a0: 00002537 lui a0,0x2 + 8002b5a4: 0024c583 lbu a1,2(s1) + 8002b5a8: c0050513 addi a0,a0,-1024 # 1c00 <_entry_offset+0x1c00> + 8002b5ac: f7dff06f j 8002b528 <_ZL13UNLA9746Writejh+0x188> + 8002b5b0: 00001537 lui a0,0x1 + 8002b5b4: 0024c583 lbu a1,2(s1) + 8002b5b8: 40050513 addi a0,a0,1024 # 1400 <_entry_offset+0x1400> + 8002b5bc: f6dff06f j 8002b528 <_ZL13UNLA9746Writejh+0x188> + +000000008002b5c0 <_Z13UNLA9746_InitP8CartInfo>: + 8002b5c0: ff010113 addi sp,sp,-16 + 8002b5c4: 00000693 li a3,0 + 8002b5c8: 10000613 li a2,256 + 8002b5cc: 08000593 li a1,128 + 8002b5d0: 00000713 li a4,0 + 8002b5d4: 00813023 sd s0,0(sp) + 8002b5d8: 00113423 sd ra,8(sp) + 8002b5dc: 00050413 mv s0,a0 + 8002b5e0: a39fb0ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 8002b5e4: 00000797 auipc a5,0x0 + 8002b5e8: d9078793 addi a5,a5,-624 # 8002b374 <_ZL13UNLA9746Powerv> + 8002b5ec: 00f43023 sd a5,0(s0) + 8002b5f0: 00013403 ld s0,0(sp) + 8002b5f4: 00813083 ld ra,8(sp) + 8002b5f8: 0001a697 auipc a3,0x1a + 8002b5fc: ef868693 addi a3,a3,-264 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 8002b600: 00000613 li a2,0 + 8002b604: 00600593 li a1,6 + 8002b608: 001a1517 auipc a0,0x1a1 + 8002b60c: c4850513 addi a0,a0,-952 # 801cc250 + 8002b610: 01010113 addi sp,sp,16 + 8002b614: 9fdd406f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002b618 <_ZL9M106Resetv>: + 8002b618: 00008067 ret + +000000008002b61c <_ZL4Syncv>: + 8002b61c: fe010113 addi sp,sp,-32 + 8002b620: 00813823 sd s0,16(sp) + 8002b624: 0009c417 auipc s0,0x9c + 8002b628: 19c40413 addi s0,s0,412 # 800c77c0 <_ZL3reg> + 8002b62c: 00044583 lbu a1,0(s0) + 8002b630: 00000513 li a0,0 + 8002b634: 00113c23 sd ra,24(sp) + 8002b638: 0fe5f593 andi a1,a1,254 + 8002b63c: 00913423 sd s1,8(sp) + 8002b640: 01213023 sd s2,0(sp) + 8002b644: 861e50ef jal ra,80010ea4 <_Z7setchr1jj> + 8002b648: 00144583 lbu a1,1(s0) + 8002b64c: 40000513 li a0,1024 + 8002b650: 000014b7 lui s1,0x1 + 8002b654: 0015e593 ori a1,a1,1 + 8002b658: 84de50ef jal ra,80010ea4 <_Z7setchr1jj> + 8002b65c: 00244583 lbu a1,2(s0) + 8002b660: 80048513 addi a0,s1,-2048 # 800 <_entry_offset+0x800> + 8002b664: 00002937 lui s2,0x2 + 8002b668: 0fe5f593 andi a1,a1,254 + 8002b66c: 839e50ef jal ra,80010ea4 <_Z7setchr1jj> + 8002b670: 00344583 lbu a1,3(s0) + 8002b674: c0048513 addi a0,s1,-1024 + 8002b678: 0015e593 ori a1,a1,1 + 8002b67c: 829e50ef jal ra,80010ea4 <_Z7setchr1jj> + 8002b680: 00444583 lbu a1,4(s0) + 8002b684: 00001537 lui a0,0x1 + 8002b688: 81de50ef jal ra,80010ea4 <_Z7setchr1jj> + 8002b68c: 00544583 lbu a1,5(s0) + 8002b690: 40048513 addi a0,s1,1024 + 8002b694: 811e50ef jal ra,80010ea4 <_Z7setchr1jj> + 8002b698: 00644583 lbu a1,6(s0) + 8002b69c: 80090513 addi a0,s2,-2048 # 1800 <_entry_offset+0x1800> + 8002b6a0: 805e50ef jal ra,80010ea4 <_Z7setchr1jj> + 8002b6a4: 00744583 lbu a1,7(s0) + 8002b6a8: c0090513 addi a0,s2,-1024 + 8002b6ac: ff8e50ef jal ra,80010ea4 <_Z7setchr1jj> + 8002b6b0: 00000613 li a2,0 + 8002b6b4: 000065b7 lui a1,0x6 + 8002b6b8: 01000513 li a0,16 + 8002b6bc: a2ce50ef jal ra,800108e8 <_Z8setprg8rijj> + 8002b6c0: 00844583 lbu a1,8(s0) + 8002b6c4: 00008537 lui a0,0x8 + 8002b6c8: 00f5f593 andi a1,a1,15 + 8002b6cc: 0105e593 ori a1,a1,16 + 8002b6d0: bcce50ef jal ra,80010a9c <_Z7setprg8jj> + 8002b6d4: 00944583 lbu a1,9(s0) + 8002b6d8: 0000a537 lui a0,0xa + 8002b6dc: 01f5f593 andi a1,a1,31 + 8002b6e0: bbce50ef jal ra,80010a9c <_Z7setprg8jj> + 8002b6e4: 00a44583 lbu a1,10(s0) + 8002b6e8: 0000c537 lui a0,0xc + 8002b6ec: 01f5f593 andi a1,a1,31 + 8002b6f0: bace50ef jal ra,80010a9c <_Z7setprg8jj> + 8002b6f4: 00b44583 lbu a1,11(s0) + 8002b6f8: 0000e537 lui a0,0xe + 8002b6fc: 00f5f593 andi a1,a1,15 + 8002b700: 0105e593 ori a1,a1,16 + 8002b704: b98e50ef jal ra,80010a9c <_Z7setprg8jj> + 8002b708: 00c44503 lbu a0,12(s0) + 8002b70c: 01013403 ld s0,16(sp) + 8002b710: 01813083 ld ra,24(sp) + 8002b714: 00813483 ld s1,8(sp) + 8002b718: 00013903 ld s2,0(sp) + 8002b71c: fff54513 not a0,a0 + 8002b720: 00157513 andi a0,a0,1 + 8002b724: 02010113 addi sp,sp,32 + 8002b728: 921e506f j 80011048 <_Z9setmirrori> + +000000008002b72c <_ZL12StateRestorei>: + 8002b72c: ef1ff06f j 8002b61c <_ZL4Syncv> + +000000008002b730 <_ZL9M106Closev>: + 8002b730: 001a1517 auipc a0,0x1a1 + 8002b734: c4853503 ld a0,-952(a0) # 801cc378 <_ZL4WRAM> + 8002b738: 02050263 beqz a0,8002b75c <_ZL9M106Closev+0x2c> + 8002b73c: ff010113 addi sp,sp,-16 + 8002b740: 00113423 sd ra,8(sp) + 8002b744: dfde60ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002b748: 00813083 ld ra,8(sp) + 8002b74c: 001a1797 auipc a5,0x1a1 + 8002b750: c207b623 sd zero,-980(a5) # 801cc378 <_ZL4WRAM> + 8002b754: 01010113 addi sp,sp,16 + 8002b758: 00008067 ret + 8002b75c: 001a1797 auipc a5,0x1a1 + 8002b760: c007be23 sd zero,-996(a5) # 801cc378 <_ZL4WRAM> + 8002b764: 00008067 ret + +000000008002b768 <_ZL9M106Powerv>: + 8002b768: fe010113 addi sp,sp,-32 + 8002b76c: fff00793 li a5,-1 + 8002b770: 00113c23 sd ra,24(sp) + 8002b774: 00813823 sd s0,16(sp) + 8002b778: 00913423 sd s1,8(sp) + 8002b77c: 0009c717 auipc a4,0x9c + 8002b780: 04f72623 sw a5,76(a4) # 800c77c8 <_ZL3reg+0x8> + 8002b784: 000084b7 lui s1,0x8 + 8002b788: e95ff0ef jal ra,8002b61c <_ZL4Syncv> + 8002b78c: fff48593 addi a1,s1,-1 # 7fff <_entry_offset+0x7fff> + 8002b790: fffe5617 auipc a2,0xfffe5 + 8002b794: ed060613 addi a2,a2,-304 # 80010660 <_Z6CartBRj> + 8002b798: 00006537 lui a0,0x6 + 8002b79c: 280080ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002b7a0: 00010437 lui s0,0x10 + 8002b7a4: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002b7a8: fffe5617 auipc a2,0xfffe5 + 8002b7ac: eb860613 addi a2,a2,-328 # 80010660 <_Z6CartBRj> + 8002b7b0: 00008537 lui a0,0x8 + 8002b7b4: 268080ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002b7b8: fff48593 addi a1,s1,-1 + 8002b7bc: fffe5617 auipc a2,0xfffe5 + 8002b7c0: ed060613 addi a2,a2,-304 # 8001068c <_Z6CartBWjh> + 8002b7c4: 00006537 lui a0,0x6 + 8002b7c8: 360080ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002b7cc: fff40593 addi a1,s0,-1 + 8002b7d0: 01013403 ld s0,16(sp) + 8002b7d4: 01813083 ld ra,24(sp) + 8002b7d8: 00813483 ld s1,8(sp) + 8002b7dc: 00000617 auipc a2,0x0 + 8002b7e0: 06460613 addi a2,a2,100 # 8002b840 <_ZL9M106Writejh> + 8002b7e4: 00008537 lui a0,0x8 + 8002b7e8: 02010113 addi sp,sp,32 + 8002b7ec: 33c0806f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002b7f0 <_Z11M106CpuHooki>: + 8002b7f0: 001a1797 auipc a5,0x1a1 + 8002b7f4: b837c783 lbu a5,-1149(a5) # 801cc373 <_ZL4IRQa> + 8002b7f8: 02078063 beqz a5,8002b818 <_Z11M106CpuHooki+0x28> + 8002b7fc: 001a1717 auipc a4,0x1a1 + 8002b800: b8470713 addi a4,a4,-1148 # 801cc380 <_ZL8IRQCount> + 8002b804: 00072783 lw a5,0(a4) + 8002b808: 000106b7 lui a3,0x10 + 8002b80c: 00a787bb addw a5,a5,a0 + 8002b810: 00f72023 sw a5,0(a4) + 8002b814: 00f6e463 bltu a3,a5,8002b81c <_Z11M106CpuHooki+0x2c> + 8002b818: 00008067 ret + 8002b81c: ff010113 addi sp,sp,-16 + 8002b820: 00100513 li a0,1 + 8002b824: 00113423 sd ra,8(sp) + 8002b828: d10d50ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 8002b82c: 00813083 ld ra,8(sp) + 8002b830: 001a1797 auipc a5,0x1a1 + 8002b834: b40781a3 sb zero,-1213(a5) # 801cc373 <_ZL4IRQa> + 8002b838: 01010113 addi sp,sp,16 + 8002b83c: 00008067 ret + +000000008002b840 <_ZL9M106Writejh>: + 8002b840: 00f57513 andi a0,a0,15 + 8002b844: 00e00793 li a5,14 + 8002b848: 02f50463 beq a0,a5,8002b870 <_ZL9M106Writejh+0x30> + 8002b84c: 00f00793 li a5,15 + 8002b850: 04f50e63 beq a0,a5,8002b8ac <_ZL9M106Writejh+0x6c> + 8002b854: 00d00793 li a5,13 + 8002b858: 02f50e63 beq a0,a5,8002b894 <_ZL9M106Writejh+0x54> + 8002b85c: 0009c797 auipc a5,0x9c + 8002b860: f6478793 addi a5,a5,-156 # 800c77c0 <_ZL3reg> + 8002b864: 00a78533 add a0,a5,a0 + 8002b868: 00b50023 sb a1,0(a0) # 8000 <_entry_offset+0x8000> + 8002b86c: db1ff06f j 8002b61c <_ZL4Syncv> + 8002b870: 001a1697 auipc a3,0x1a1 + 8002b874: b1068693 addi a3,a3,-1264 # 801cc380 <_ZL8IRQCount> + 8002b878: 0006a783 lw a5,0(a3) + 8002b87c: 00010737 lui a4,0x10 + 8002b880: f0070713 addi a4,a4,-256 # ff00 <_entry_offset+0xff00> + 8002b884: 00e7f7b3 and a5,a5,a4 + 8002b888: 00b7e5b3 or a1,a5,a1 + 8002b88c: 00b6a023 sw a1,0(a3) + 8002b890: 00008067 ret + 8002b894: 00100513 li a0,1 + 8002b898: 001a1797 auipc a5,0x1a1 + 8002b89c: ac078da3 sb zero,-1317(a5) # 801cc373 <_ZL4IRQa> + 8002b8a0: 001a1797 auipc a5,0x1a1 + 8002b8a4: ae07a023 sw zero,-1312(a5) # 801cc380 <_ZL8IRQCount> + 8002b8a8: ca8d506f j 80000d50 <_Z12X6502_IRQEndi> + 8002b8ac: 001a1717 auipc a4,0x1a1 + 8002b8b0: ad470713 addi a4,a4,-1324 # 801cc380 <_ZL8IRQCount> + 8002b8b4: 00074783 lbu a5,0(a4) + 8002b8b8: 0085959b slliw a1,a1,0x8 + 8002b8bc: 00b7e5b3 or a1,a5,a1 + 8002b8c0: 00100793 li a5,1 + 8002b8c4: 00b72023 sw a1,0(a4) + 8002b8c8: 001a1717 auipc a4,0x1a1 + 8002b8cc: aaf705a3 sb a5,-1365(a4) # 801cc373 <_ZL4IRQa> + 8002b8d0: 00008067 ret + +000000008002b8d4 <_Z14Mapper106_InitP8CartInfo>: + 8002b8d4: fe010113 addi sp,sp,-32 + 8002b8d8: 00113c23 sd ra,24(sp) + 8002b8dc: 00813823 sd s0,16(sp) + 8002b8e0: 00913423 sd s1,8(sp) + 8002b8e4: 00000797 auipc a5,0x0 + 8002b8e8: e8478793 addi a5,a5,-380 # 8002b768 <_ZL9M106Powerv> + 8002b8ec: 00f53023 sd a5,0(a0) + 8002b8f0: 00000797 auipc a5,0x0 + 8002b8f4: d2878793 addi a5,a5,-728 # 8002b618 <_ZL9M106Resetv> + 8002b8f8: 00f53423 sd a5,8(a0) + 8002b8fc: 00000797 auipc a5,0x0 + 8002b900: e3478793 addi a5,a5,-460 # 8002b730 <_ZL9M106Closev> + 8002b904: 00f53823 sd a5,16(a0) + 8002b908: 00000797 auipc a5,0x0 + 8002b90c: ee878793 addi a5,a5,-280 # 8002b7f0 <_Z11M106CpuHooki> + 8002b910: 001a0717 auipc a4,0x1a0 + 8002b914: 22f73823 sd a5,560(a4) # 801cbb40 + 8002b918: 00000797 auipc a5,0x0 + 8002b91c: e1478793 addi a5,a5,-492 # 8002b72c <_ZL12StateRestorei> + 8002b920: 001a1417 auipc s0,0x1a1 + 8002b924: a6440413 addi s0,s0,-1436 # 801cc384 <_ZL8WRAMSIZE> + 8002b928: 001a1717 auipc a4,0x1a1 + 8002b92c: d2f73823 sd a5,-720(a4) # 801cc658 + 8002b930: 00002537 lui a0,0x2 + 8002b934: 000027b7 lui a5,0x2 + 8002b938: 00f42023 sw a5,0(s0) + 8002b93c: b31e60ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002b940: 00042603 lw a2,0(s0) + 8002b944: 00050593 mv a1,a0 + 8002b948: 001a1497 auipc s1,0x1a1 + 8002b94c: a3048493 addi s1,s1,-1488 # 801cc378 <_ZL4WRAM> + 8002b950: 00100693 li a3,1 + 8002b954: 01000513 li a0,16 + 8002b958: 00b4b023 sd a1,0(s1) + 8002b95c: b99e40ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8002b960: 00042583 lw a1,0(s0) + 8002b964: 0004b503 ld a0,0(s1) + 8002b968: 0001a697 auipc a3,0x1a + 8002b96c: 9c068693 addi a3,a3,-1600 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 8002b970: 00000613 li a2,0 + 8002b974: e9cd40ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002b978: 01013403 ld s0,16(sp) + 8002b97c: 01813083 ld ra,24(sp) + 8002b980: 00813483 ld s1,8(sp) + 8002b984: 00000693 li a3,0 + 8002b988: 00000613 li a2,0 + 8002b98c: fff00593 li a1,-1 + 8002b990: 00020517 auipc a0,0x20 + 8002b994: 23050513 addi a0,a0,560 # 8004bbc0 <_ZL9StateRegs> + 8002b998: 02010113 addi sp,sp,32 + 8002b99c: e74d406f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002b9a0 <_ZL4Syncv>: + 8002b9a0: ff010113 addi sp,sp,-16 + 8002b9a4: 001a1597 auipc a1,0x1a1 + 8002b9a8: 9ea5c583 lbu a1,-1558(a1) # 801cc38e <_ZL4preg> + 8002b9ac: 00006537 lui a0,0x6 + 8002b9b0: 00113423 sd ra,8(sp) + 8002b9b4: 8e8e50ef jal ra,80010a9c <_Z7setprg8jj> + 8002b9b8: fff00593 li a1,-1 + 8002b9bc: 00008537 lui a0,0x8 + 8002b9c0: c54e50ef jal ra,80010e14 <_Z8setprg32jj> + 8002b9c4: 001a1517 auipc a0,0x1a1 + 8002b9c8: 9c854503 lbu a0,-1592(a0) # 801cc38c <_ZL4creg> + 8002b9cc: d38e50ef jal ra,80010f04 <_Z7setchr8j> + 8002b9d0: 00813083 ld ra,8(sp) + 8002b9d4: 001a1517 auipc a0,0x1a1 + 8002b9d8: 9b954503 lbu a0,-1607(a0) # 801cc38d <_ZL4mirr> + 8002b9dc: 01010113 addi sp,sp,16 + 8002b9e0: e68e506f j 80011048 <_Z9setmirrori> + +000000008002b9e4 <_ZL12StateRestorei>: + 8002b9e4: fbdff06f j 8002b9a0 <_ZL4Syncv> + +000000008002b9e8 <_ZL8M42Powerv>: + 8002b9e8: 001a1797 auipc a5,0x1a1 + 8002b9ec: 9a078323 sb zero,-1626(a5) # 801cc38e <_ZL4preg> + 8002b9f0: ff010113 addi sp,sp,-16 + 8002b9f4: 00100793 li a5,1 + 8002b9f8: 00113423 sd ra,8(sp) + 8002b9fc: 00813023 sd s0,0(sp) + 8002ba00: 001a1717 auipc a4,0x1a1 + 8002ba04: 98f706a3 sb a5,-1651(a4) # 801cc38d <_ZL4mirr> + 8002ba08: 00010437 lui s0,0x10 + 8002ba0c: f95ff0ef jal ra,8002b9a0 <_ZL4Syncv> + 8002ba10: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002ba14: fffe5617 auipc a2,0xfffe5 + 8002ba18: c4c60613 addi a2,a2,-948 # 80010660 <_Z6CartBRj> + 8002ba1c: 00006537 lui a0,0x6 + 8002ba20: 7fd070ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002ba24: fff40593 addi a1,s0,-1 + 8002ba28: 00013403 ld s0,0(sp) + 8002ba2c: 00813083 ld ra,8(sp) + 8002ba30: 00000617 auipc a2,0x0 + 8002ba34: 06460613 addi a2,a2,100 # 8002ba94 <_ZL8M42Writejh> + 8002ba38: 00006537 lui a0,0x6 + 8002ba3c: 01010113 addi sp,sp,16 + 8002ba40: 0e80806f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002ba44 <_ZL10M42IRQHooki>: + 8002ba44: 001a1797 auipc a5,0x1a1 + 8002ba48: 9447a783 lw a5,-1724(a5) # 801cc388 <_ZL4IRQa> + 8002ba4c: 04078063 beqz a5,8002ba8c <_ZL10M42IRQHooki+0x48> + 8002ba50: 001a1717 auipc a4,0x1a1 + 8002ba54: 94070713 addi a4,a4,-1728 # 801cc390 <_ZL8IRQCount> + 8002ba58: 00072783 lw a5,0(a4) + 8002ba5c: 000086b7 lui a3,0x8 + 8002ba60: 00a787bb addw a5,a5,a0 + 8002ba64: 00078513 mv a0,a5 + 8002ba68: 00d7e863 bltu a5,a3,8002ba78 <_ZL10M42IRQHooki+0x34> + 8002ba6c: ffff87b7 lui a5,0xffff8 + 8002ba70: 00a787bb addw a5,a5,a0 + 8002ba74: 00078513 mv a0,a5 + 8002ba78: 00a72023 sw a0,0(a4) + 8002ba7c: 00006737 lui a4,0x6 + 8002ba80: 00100513 li a0,1 + 8002ba84: 00e7e663 bltu a5,a4,8002ba90 <_ZL10M42IRQHooki+0x4c> + 8002ba88: ab0d506f j 80000d38 <_Z14X6502_IRQBegini> + 8002ba8c: 00008067 ret + 8002ba90: ac0d506f j 80000d50 <_Z12X6502_IRQEndi> + +000000008002ba94 <_ZL8M42Writejh>: + 8002ba94: 0000e7b7 lui a5,0xe + 8002ba98: 00378713 addi a4,a5,3 # e003 <_entry_offset+0xe003> + 8002ba9c: 00e57533 and a0,a0,a4 + 8002baa0: 00178713 addi a4,a5,1 + 8002baa4: 04e50e63 beq a0,a4,8002bb00 <_ZL8M42Writejh+0x6c> + 8002baa8: 02a76063 bltu a4,a0,8002bac8 <_ZL8M42Writejh+0x34> + 8002baac: 00008737 lui a4,0x8 + 8002bab0: 04e50263 beq a0,a4,8002baf4 <_ZL8M42Writejh+0x60> + 8002bab4: 06f51263 bne a0,a5,8002bb18 <_ZL8M42Writejh+0x84> + 8002bab8: 00f5f593 andi a1,a1,15 + 8002babc: 001a1797 auipc a5,0x1a1 + 8002bac0: 8cb78923 sb a1,-1838(a5) # 801cc38e <_ZL4preg> + 8002bac4: eddff06f j 8002b9a0 <_ZL4Syncv> + 8002bac8: 00278793 addi a5,a5,2 + 8002bacc: 02f51263 bne a0,a5,8002baf0 <_ZL8M42Writejh+0x5c> + 8002bad0: 0025f593 andi a1,a1,2 + 8002bad4: 001a1797 auipc a5,0x1a1 + 8002bad8: 8ab7aa23 sw a1,-1868(a5) # 801cc388 <_ZL4IRQa> + 8002badc: 00059663 bnez a1,8002bae8 <_ZL8M42Writejh+0x54> + 8002bae0: 001a1797 auipc a5,0x1a1 + 8002bae4: 8a07a823 sw zero,-1872(a5) # 801cc390 <_ZL8IRQCount> + 8002bae8: 00100513 li a0,1 + 8002baec: a64d506f j 80000d50 <_Z12X6502_IRQEndi> + 8002baf0: 00008067 ret + 8002baf4: 001a1797 auipc a5,0x1a1 + 8002baf8: 88b78c23 sb a1,-1896(a5) # 801cc38c <_ZL4creg> + 8002bafc: ea5ff06f j 8002b9a0 <_ZL4Syncv> + 8002bb00: 0035d59b srliw a1,a1,0x3 + 8002bb04: 0015c593 xori a1,a1,1 + 8002bb08: 0015f593 andi a1,a1,1 + 8002bb0c: 001a1797 auipc a5,0x1a1 + 8002bb10: 88b780a3 sb a1,-1919(a5) # 801cc38d <_ZL4mirr> + 8002bb14: e8dff06f j 8002b9a0 <_ZL4Syncv> + 8002bb18: 00008067 ret + +000000008002bb1c <_Z13Mapper42_InitP8CartInfo>: + 8002bb1c: 00000797 auipc a5,0x0 + 8002bb20: ecc78793 addi a5,a5,-308 # 8002b9e8 <_ZL8M42Powerv> + 8002bb24: 00f53023 sd a5,0(a0) # 6000 <_entry_offset+0x6000> + 8002bb28: 00000797 auipc a5,0x0 + 8002bb2c: f1c78793 addi a5,a5,-228 # 8002ba44 <_ZL10M42IRQHooki> + 8002bb30: 001a0717 auipc a4,0x1a0 + 8002bb34: 00f73823 sd a5,16(a4) # 801cbb40 + 8002bb38: 00000797 auipc a5,0x0 + 8002bb3c: eac78793 addi a5,a5,-340 # 8002b9e4 <_ZL12StateRestorei> + 8002bb40: 00000693 li a3,0 + 8002bb44: 00000613 li a2,0 + 8002bb48: fff00593 li a1,-1 + 8002bb4c: 00020517 auipc a0,0x20 + 8002bb50: 0d450513 addi a0,a0,212 # 8004bc20 <_ZL9StateRegs> + 8002bb54: 001a1717 auipc a4,0x1a1 + 8002bb58: b0f73223 sd a5,-1276(a4) # 801cc658 + 8002bb5c: cb4d406f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002bb60 <_ZL4Syncv>: + 8002bb60: ff010113 addi sp,sp,-16 + 8002bb64: 00813023 sd s0,0(sp) + 8002bb68: 001a1417 auipc s0,0x1a1 + 8002bb6c: 82c40413 addi s0,s0,-2004 # 801cc394 <_ZL6cmdreg> + 8002bb70: 00045503 lhu a0,0(s0) + 8002bb74: 00113423 sd ra,8(sp) + 8002bb78: 40057793 andi a5,a0,1024 + 8002bb7c: 06078e63 beqz a5,8002bbf8 <_ZL4Syncv+0x98> + 8002bb80: 00200513 li a0,2 + 8002bb84: cc4e50ef jal ra,80011048 <_Z9setmirrori> + 8002bb88: 00045583 lhu a1,0(s0) + 8002bb8c: 03459713 slli a4,a1,0x34 + 8002bb90: 0005879b sext.w a5,a1 + 8002bb94: 08075263 bgez a4,8002bc18 <_ZL4Syncv+0xb8> + 8002bb98: 4037d59b sraiw a1,a5,0x3 + 8002bb9c: 0017971b slliw a4,a5,0x1 + 8002bba0: 03e77713 andi a4,a4,62 + 8002bba4: 0605f593 andi a1,a1,96 + 8002bba8: 40c7d79b sraiw a5,a5,0xc + 8002bbac: 00e5e5b3 or a1,a1,a4 + 8002bbb0: 0017f793 andi a5,a5,1 + 8002bbb4: 00f5e5b3 or a1,a1,a5 + 8002bbb8: 00008537 lui a0,0x8 + 8002bbbc: 89ce50ef jal ra,80010c58 <_Z8setprg16jj> + 8002bbc0: 00045783 lhu a5,0(s0) + 8002bbc4: 00013403 ld s0,0(sp) + 8002bbc8: 00813083 ld ra,8(sp) + 8002bbcc: 4037d59b sraiw a1,a5,0x3 + 8002bbd0: 0017971b slliw a4,a5,0x1 + 8002bbd4: 0605f593 andi a1,a1,96 + 8002bbd8: 03e77713 andi a4,a4,62 + 8002bbdc: 40c7d79b sraiw a5,a5,0xc + 8002bbe0: 00e5e5b3 or a1,a1,a4 + 8002bbe4: 0017f793 andi a5,a5,1 + 8002bbe8: 0000c537 lui a0,0xc + 8002bbec: 00f5e5b3 or a1,a1,a5 + 8002bbf0: 01010113 addi sp,sp,16 + 8002bbf4: 864e506f j 80010c58 <_Z8setprg16jj> + 8002bbf8: 00d5551b srliw a0,a0,0xd + 8002bbfc: 00154513 xori a0,a0,1 + 8002bc00: 00157513 andi a0,a0,1 + 8002bc04: c44e50ef jal ra,80011048 <_Z9setmirrori> + 8002bc08: 00045583 lhu a1,0(s0) + 8002bc0c: 03459713 slli a4,a1,0x34 + 8002bc10: 0005879b sext.w a5,a1 + 8002bc14: f80742e3 bltz a4,8002bb98 <_ZL4Syncv+0x38> + 8002bc18: 00013403 ld s0,0(sp) + 8002bc1c: 00813083 ld ra,8(sp) + 8002bc20: 4047d79b sraiw a5,a5,0x4 + 8002bc24: 0307f793 andi a5,a5,48 + 8002bc28: 01f5f593 andi a1,a1,31 + 8002bc2c: 00f5e5b3 or a1,a1,a5 + 8002bc30: 00008537 lui a0,0x8 + 8002bc34: 01010113 addi sp,sp,16 + 8002bc38: 9dce506f j 80010e14 <_Z8setprg32jj> + +000000008002bc3c <_ZL11M235Restorei>: + 8002bc3c: f25ff06f j 8002bb60 <_ZL4Syncv> + +000000008002bc40 <_ZL9M235Writejh>: + 8002bc40: 001a0797 auipc a5,0x1a0 + 8002bc44: 74a79a23 sh a0,1876(a5) # 801cc394 <_ZL6cmdreg> + 8002bc48: f19ff06f j 8002bb60 <_ZL4Syncv> + +000000008002bc4c <_ZL9M235Powerv>: + 8002bc4c: ff010113 addi sp,sp,-16 + 8002bc50: 00000513 li a0,0 + 8002bc54: 00113423 sd ra,8(sp) + 8002bc58: 00813023 sd s0,0(sp) + 8002bc5c: aa8e50ef jal ra,80010f04 <_Z7setchr8j> + 8002bc60: 00010437 lui s0,0x10 + 8002bc64: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002bc68: 00000617 auipc a2,0x0 + 8002bc6c: fd860613 addi a2,a2,-40 # 8002bc40 <_ZL9M235Writejh> + 8002bc70: 00008537 lui a0,0x8 + 8002bc74: 6b5070ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002bc78: fff40593 addi a1,s0,-1 + 8002bc7c: fffe5617 auipc a2,0xfffe5 + 8002bc80: 9e460613 addi a2,a2,-1564 # 80010660 <_Z6CartBRj> + 8002bc84: 00008537 lui a0,0x8 + 8002bc88: 595070ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002bc8c: 00013403 ld s0,0(sp) + 8002bc90: 00813083 ld ra,8(sp) + 8002bc94: 001a0797 auipc a5,0x1a0 + 8002bc98: 70079023 sh zero,1792(a5) # 801cc394 <_ZL6cmdreg> + 8002bc9c: 01010113 addi sp,sp,16 + 8002bca0: ec1ff06f j 8002bb60 <_ZL4Syncv> + +000000008002bca4 <_Z14Mapper235_InitP8CartInfo>: + 8002bca4: 00000797 auipc a5,0x0 + 8002bca8: fa878793 addi a5,a5,-88 # 8002bc4c <_ZL9M235Powerv> + 8002bcac: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 8002bcb0: 00000797 auipc a5,0x0 + 8002bcb4: f8c78793 addi a5,a5,-116 # 8002bc3c <_ZL11M235Restorei> + 8002bcb8: 00000693 li a3,0 + 8002bcbc: 00000613 li a2,0 + 8002bcc0: fff00593 li a1,-1 + 8002bcc4: 00020517 auipc a0,0x20 + 8002bcc8: fec50513 addi a0,a0,-20 # 8004bcb0 <_ZL9StateRegs> + 8002bccc: 001a1717 auipc a4,0x1a1 + 8002bcd0: 98f73623 sd a5,-1652(a4) # 801cc658 + 8002bcd4: b3cd406f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002bcd8 <_ZL10LatchWritejh>: + 8002bcd8: 001a0797 auipc a5,0x1a0 + 8002bcdc: 6ca79823 sh a0,1744(a5) # 801cc3a8 <_ZL6latche> + 8002bce0: 001a0317 auipc t1,0x1a0 + 8002bce4: 6c033303 ld t1,1728(t1) # 801cc3a0 <_ZL5WSync> + 8002bce8: 00030067 jr t1 + +000000008002bcec <_ZL10LatchResetv>: + 8002bcec: 001a0797 auipc a5,0x1a0 + 8002bcf0: 6aa7d783 lhu a5,1706(a5) # 801cc396 <_ZL10latcheinit> + 8002bcf4: 001a0717 auipc a4,0x1a0 + 8002bcf8: 6af71a23 sh a5,1716(a4) # 801cc3a8 <_ZL6latche> + 8002bcfc: 001a0317 auipc t1,0x1a0 + 8002bd00: 6a433303 ld t1,1700(t1) # 801cc3a0 <_ZL5WSync> + 8002bd04: 00030067 jr t1 + +000000008002bd08 <_ZL12StateRestorei>: + 8002bd08: 001a0317 auipc t1,0x1a0 + 8002bd0c: 69833303 ld t1,1688(t1) # 801cc3a0 <_ZL5WSync> + 8002bd10: 00030067 jr t1 + +000000008002bd14 <_ZL13BMCD1038Resetv>: + 8002bd14: 001a0717 auipc a4,0x1a0 + 8002bd18: 6ac70713 addi a4,a4,1708 # 801cc3c0 <_ZL9dipswitch> + 8002bd1c: 00074783 lbu a5,0(a4) + 8002bd20: 0017879b addiw a5,a5,1 + 8002bd24: 0037f793 andi a5,a5,3 + 8002bd28: 00f70023 sb a5,0(a4) + 8002bd2c: 00008067 ret + +000000008002bd30 <_ZL12BMCD1038Readj>: + 8002bd30: 001a0797 auipc a5,0x1a0 + 8002bd34: 6787d783 lhu a5,1656(a5) # 801cc3a8 <_ZL6latche> + 8002bd38: 1007f793 andi a5,a5,256 + 8002bd3c: 00078863 beqz a5,8002bd4c <_ZL12BMCD1038Readj+0x1c> + 8002bd40: 001a0517 auipc a0,0x1a0 + 8002bd44: 68054503 lbu a0,1664(a0) # 801cc3c0 <_ZL9dipswitch> + 8002bd48: 00008067 ret + 8002bd4c: 915e406f j 80010660 <_Z6CartBRj> + +000000008002bd50 <_ZL7M59Readj>: + 8002bd50: 001a0797 auipc a5,0x1a0 + 8002bd54: 6587d783 lhu a5,1624(a5) # 801cc3a8 <_ZL6latche> + 8002bd58: 1007f793 andi a5,a5,256 + 8002bd5c: 00078663 beqz a5,8002bd68 <_ZL7M59Readj+0x18> + 8002bd60: 00000513 li a0,0 + 8002bd64: 00008067 ret + 8002bd68: 8f9e406f j 80010660 <_Z6CartBRj> + +000000008002bd6c <_ZL7M92Syncv>: + 8002bd6c: fe010113 addi sp,sp,-32 + 8002bd70: 00913423 sd s1,8(sp) + 8002bd74: 00000593 li a1,0 + 8002bd78: 001a0497 auipc s1,0x1a0 + 8002bd7c: 63048493 addi s1,s1,1584 # 801cc3a8 <_ZL6latche> + 8002bd80: 00008537 lui a0,0x8 + 8002bd84: 00813823 sd s0,16(sp) + 8002bd88: 00113c23 sd ra,24(sp) + 8002bd8c: 0004c403 lbu s0,0(s1) + 8002bd90: ec9e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002bd94: 0004d583 lhu a1,0(s1) + 8002bd98: 000097b7 lui a5,0x9 + 8002bd9c: 0f047413 andi s0,s0,240 + 8002bda0: 02f5e463 bltu a1,a5,8002bdc8 <_ZL7M92Syncv+0x5c> + 8002bda4: 0d000793 li a5,208 + 8002bda8: 02f40863 beq s0,a5,8002bdd8 <_ZL7M92Syncv+0x6c> + 8002bdac: 0e000793 li a5,224 + 8002bdb0: 04f40263 beq s0,a5,8002bdf4 <_ZL7M92Syncv+0x88> + 8002bdb4: 01813083 ld ra,24(sp) + 8002bdb8: 01013403 ld s0,16(sp) + 8002bdbc: 00813483 ld s1,8(sp) + 8002bdc0: 02010113 addi sp,sp,32 + 8002bdc4: 00008067 ret + 8002bdc8: 07000793 li a5,112 + 8002bdcc: 02f40463 beq s0,a5,8002bdf4 <_ZL7M92Syncv+0x88> + 8002bdd0: 0b000793 li a5,176 + 8002bdd4: fef410e3 bne s0,a5,8002bdb4 <_ZL7M92Syncv+0x48> + 8002bdd8: 01013403 ld s0,16(sp) + 8002bddc: 01813083 ld ra,24(sp) + 8002bde0: 00813483 ld s1,8(sp) + 8002bde4: 00f5f593 andi a1,a1,15 + 8002bde8: 0000c537 lui a0,0xc + 8002bdec: 02010113 addi sp,sp,32 + 8002bdf0: e69e406f j 80010c58 <_Z8setprg16jj> + 8002bdf4: 01013403 ld s0,16(sp) + 8002bdf8: 01813083 ld ra,24(sp) + 8002bdfc: 00813483 ld s1,8(sp) + 8002be00: 00f5f513 andi a0,a1,15 + 8002be04: 02010113 addi sp,sp,32 + 8002be08: 8fce506f j 80010f04 <_Z7setchr8j> + +000000008002be0c <_ZL8M214Syncv>: + 8002be0c: ff010113 addi sp,sp,-16 + 8002be10: 00813023 sd s0,0(sp) + 8002be14: 001a0417 auipc s0,0x1a0 + 8002be18: 59440413 addi s0,s0,1428 # 801cc3a8 <_ZL6latche> + 8002be1c: 00045583 lhu a1,0(s0) + 8002be20: 00008537 lui a0,0x8 + 8002be24: 00113423 sd ra,8(sp) + 8002be28: 4025d59b sraiw a1,a1,0x2 + 8002be2c: 0035f593 andi a1,a1,3 + 8002be30: e29e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002be34: 00045583 lhu a1,0(s0) + 8002be38: 0000c537 lui a0,0xc + 8002be3c: 4025d59b sraiw a1,a1,0x2 + 8002be40: 0035f593 andi a1,a1,3 + 8002be44: e15e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002be48: 00045503 lhu a0,0(s0) + 8002be4c: 00013403 ld s0,0(sp) + 8002be50: 00813083 ld ra,8(sp) + 8002be54: 00357513 andi a0,a0,3 + 8002be58: 01010113 addi sp,sp,16 + 8002be5c: 8a8e506f j 80010f04 <_Z7setchr8j> + +000000008002be60 <_ZL8M217Syncv>: + 8002be60: ff010113 addi sp,sp,-16 + 8002be64: 00813023 sd s0,0(sp) + 8002be68: 001a0417 auipc s0,0x1a0 + 8002be6c: 54040413 addi s0,s0,1344 # 801cc3a8 <_ZL6latche> + 8002be70: 00045583 lhu a1,0(s0) + 8002be74: 00008537 lui a0,0x8 + 8002be78: 00113423 sd ra,8(sp) + 8002be7c: 4025d59b sraiw a1,a1,0x2 + 8002be80: 0035f593 andi a1,a1,3 + 8002be84: f91e40ef jal ra,80010e14 <_Z8setprg32jj> + 8002be88: 00045503 lhu a0,0(s0) + 8002be8c: 00013403 ld s0,0(sp) + 8002be90: 00813083 ld ra,8(sp) + 8002be94: 00757513 andi a0,a0,7 + 8002be98: 01010113 addi sp,sp,16 + 8002be9c: 868e506f j 80010f04 <_Z7setchr8j> + +000000008002bea0 <_ZL12BMCD1038Syncv>: + 8002bea0: ff010113 addi sp,sp,-16 + 8002bea4: 00813023 sd s0,0(sp) + 8002bea8: 001a0417 auipc s0,0x1a0 + 8002beac: 50040413 addi s0,s0,1280 # 801cc3a8 <_ZL6latche> + 8002beb0: 00045583 lhu a1,0(s0) + 8002beb4: 00113423 sd ra,8(sp) + 8002beb8: 0805f793 andi a5,a1,128 + 8002bebc: 0005859b sext.w a1,a1 + 8002bec0: 04078a63 beqz a5,8002bf14 <_ZL12BMCD1038Syncv+0x74> + 8002bec4: 4045d59b sraiw a1,a1,0x4 + 8002bec8: 0075f593 andi a1,a1,7 + 8002becc: 00008537 lui a0,0x8 + 8002bed0: d89e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002bed4: 00045583 lhu a1,0(s0) + 8002bed8: 0000c537 lui a0,0xc + 8002bedc: 4045d59b sraiw a1,a1,0x4 + 8002bee0: 0075f593 andi a1,a1,7 + 8002bee4: d75e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002bee8: 00045503 lhu a0,0(s0) + 8002beec: 00757513 andi a0,a0,7 + 8002bef0: 814e50ef jal ra,80010f04 <_Z7setchr8j> + 8002bef4: 00045503 lhu a0,0(s0) + 8002bef8: 00013403 ld s0,0(sp) + 8002befc: 00813083 ld ra,8(sp) + 8002bf00: 00355513 srli a0,a0,0x3 + 8002bf04: 00154513 xori a0,a0,1 + 8002bf08: 00157513 andi a0,a0,1 + 8002bf0c: 01010113 addi sp,sp,16 + 8002bf10: 938e506f j 80011048 <_Z9setmirrori> + 8002bf14: 4055d59b sraiw a1,a1,0x5 + 8002bf18: 0035f593 andi a1,a1,3 + 8002bf1c: 00008537 lui a0,0x8 + 8002bf20: ef5e40ef jal ra,80010e14 <_Z8setprg32jj> + 8002bf24: fc5ff06f j 8002bee8 <_ZL12BMCD1038Syncv+0x48> + +000000008002bf28 <_ZL12BMCGK192Syncv>: + 8002bf28: ff010113 addi sp,sp,-16 + 8002bf2c: 00813023 sd s0,0(sp) + 8002bf30: 001a0417 auipc s0,0x1a0 + 8002bf34: 47840413 addi s0,s0,1144 # 801cc3a8 <_ZL6latche> + 8002bf38: 00045583 lhu a1,0(s0) + 8002bf3c: 00113423 sd ra,8(sp) + 8002bf40: 0405f793 andi a5,a1,64 + 8002bf44: 04078863 beqz a5,8002bf94 <_ZL12BMCGK192Syncv+0x6c> + 8002bf48: 0075f593 andi a1,a1,7 + 8002bf4c: 00008537 lui a0,0x8 + 8002bf50: d09e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002bf54: 00045583 lhu a1,0(s0) + 8002bf58: 0000c537 lui a0,0xc + 8002bf5c: 0075f593 andi a1,a1,7 + 8002bf60: cf9e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002bf64: 00045503 lhu a0,0(s0) + 8002bf68: 4035551b sraiw a0,a0,0x3 + 8002bf6c: 00757513 andi a0,a0,7 + 8002bf70: f95e40ef jal ra,80010f04 <_Z7setchr8j> + 8002bf74: 00045503 lhu a0,0(s0) + 8002bf78: 00013403 ld s0,0(sp) + 8002bf7c: 00813083 ld ra,8(sp) + 8002bf80: 00755513 srli a0,a0,0x7 + 8002bf84: 00154513 xori a0,a0,1 + 8002bf88: 00157513 andi a0,a0,1 + 8002bf8c: 01010113 addi sp,sp,16 + 8002bf90: 8b8e506f j 80011048 <_Z9setmirrori> + 8002bf94: 4015d59b sraiw a1,a1,0x1 + 8002bf98: 0035f593 andi a1,a1,3 + 8002bf9c: 00008537 lui a0,0x8 + 8002bfa0: e75e40ef jal ra,80010e14 <_Z8setprg32jj> + 8002bfa4: fc1ff06f j 8002bf64 <_ZL12BMCGK192Syncv+0x3c> + +000000008002bfa8 <_ZL7M59Syncv>: + 8002bfa8: ff010113 addi sp,sp,-16 + 8002bfac: 00813023 sd s0,0(sp) + 8002bfb0: 001a0417 auipc s0,0x1a0 + 8002bfb4: 3f840413 addi s0,s0,1016 # 801cc3a8 <_ZL6latche> + 8002bfb8: 00045583 lhu a1,0(s0) + 8002bfbc: 00008537 lui a0,0x8 + 8002bfc0: 00113423 sd ra,8(sp) + 8002bfc4: 4045d59b sraiw a1,a1,0x4 + 8002bfc8: 0075f593 andi a1,a1,7 + 8002bfcc: e49e40ef jal ra,80010e14 <_Z8setprg32jj> + 8002bfd0: 00045503 lhu a0,0(s0) + 8002bfd4: 00757513 andi a0,a0,7 + 8002bfd8: f2de40ef jal ra,80010f04 <_Z7setchr8j> + 8002bfdc: 00045503 lhu a0,0(s0) + 8002bfe0: 00013403 ld s0,0(sp) + 8002bfe4: 00813083 ld ra,8(sp) + 8002bfe8: 4035551b sraiw a0,a0,0x3 + 8002bfec: 00157513 andi a0,a0,1 + 8002bff0: 01010113 addi sp,sp,16 + 8002bff4: 854e506f j 80011048 <_Z9setmirrori> + +000000008002bff8 <_ZL7M61Syncv>: + 8002bff8: ff010113 addi sp,sp,-16 + 8002bffc: 00813023 sd s0,0(sp) + 8002c000: 001a0417 auipc s0,0x1a0 + 8002c004: 3a840413 addi s0,s0,936 # 801cc3a8 <_ZL6latche> + 8002c008: 00045583 lhu a1,0(s0) + 8002c00c: 00113423 sd ra,8(sp) + 8002c010: 00159713 slli a4,a1,0x1 + 8002c014: 00e5c7b3 xor a5,a1,a4 + 8002c018: 0207f793 andi a5,a5,32 + 8002c01c: 06078463 beqz a5,8002c084 <_ZL7M61Syncv+0x8c> + 8002c020: 0005869b sext.w a3,a1 + 8002c024: 4046d59b sraiw a1,a3,0x4 + 8002c028: 01e77713 andi a4,a4,30 + 8002c02c: 0025f593 andi a1,a1,2 + 8002c030: 00e5e5b3 or a1,a1,a4 + 8002c034: 00008537 lui a0,0x8 + 8002c038: c21e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c03c: 00045783 lhu a5,0(s0) + 8002c040: 0000c537 lui a0,0xc + 8002c044: 0017959b slliw a1,a5,0x1 + 8002c048: 4047d79b sraiw a5,a5,0x4 + 8002c04c: 01e5f593 andi a1,a1,30 + 8002c050: 0027f793 andi a5,a5,2 + 8002c054: 00f5e5b3 or a1,a1,a5 + 8002c058: c01e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c05c: 00000513 li a0,0 + 8002c060: ea5e40ef jal ra,80010f04 <_Z7setchr8j> + 8002c064: 00045503 lhu a0,0(s0) + 8002c068: 00013403 ld s0,0(sp) + 8002c06c: 00813083 ld ra,8(sp) + 8002c070: 00755513 srli a0,a0,0x7 + 8002c074: 00154513 xori a0,a0,1 + 8002c078: 00157513 andi a0,a0,1 + 8002c07c: 01010113 addi sp,sp,16 + 8002c080: fc9e406f j 80011048 <_Z9setmirrori> + 8002c084: 00f5f593 andi a1,a1,15 + 8002c088: 00008537 lui a0,0x8 + 8002c08c: d89e40ef jal ra,80010e14 <_Z8setprg32jj> + 8002c090: fcdff06f j 8002c05c <_ZL7M61Syncv+0x64> + +000000008002c094 <_ZL8M200Syncv>: + 8002c094: ff010113 addi sp,sp,-16 + 8002c098: 00813023 sd s0,0(sp) + 8002c09c: 001a0417 auipc s0,0x1a0 + 8002c0a0: 30c40413 addi s0,s0,780 # 801cc3a8 <_ZL6latche> + 8002c0a4: 00045583 lhu a1,0(s0) + 8002c0a8: 00008537 lui a0,0x8 + 8002c0ac: 00113423 sd ra,8(sp) + 8002c0b0: 0075f593 andi a1,a1,7 + 8002c0b4: ba5e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c0b8: 00045583 lhu a1,0(s0) + 8002c0bc: 0000c537 lui a0,0xc + 8002c0c0: 0075f593 andi a1,a1,7 + 8002c0c4: b95e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c0c8: 00045503 lhu a0,0(s0) + 8002c0cc: 00757513 andi a0,a0,7 + 8002c0d0: e35e40ef jal ra,80010f04 <_Z7setchr8j> + 8002c0d4: 00045503 lhu a0,0(s0) + 8002c0d8: 00013403 ld s0,0(sp) + 8002c0dc: 00813083 ld ra,8(sp) + 8002c0e0: 4035551b sraiw a0,a0,0x3 + 8002c0e4: 00157513 andi a0,a0,1 + 8002c0e8: 01010113 addi sp,sp,16 + 8002c0ec: f5de406f j 80011048 <_Z9setmirrori> + +000000008002c0f0 <_ZL8M202Syncv>: + 8002c0f0: fe010113 addi sp,sp,-32 + 8002c0f4: 00913423 sd s1,8(sp) + 8002c0f8: 001a0497 auipc s1,0x1a0 + 8002c0fc: 2b04d483 lhu s1,688(s1) # 801cc3a8 <_ZL6latche> + 8002c100: 00813823 sd s0,16(sp) + 8002c104: 0014d413 srli s0,s1,0x1 + 8002c108: 00245793 srli a5,s0,0x2 + 8002c10c: 0014f713 andi a4,s1,1 + 8002c110: 01213023 sd s2,0(sp) + 8002c114: 00113c23 sd ra,24(sp) + 8002c118: 00e7f7b3 and a5,a5,a4 + 8002c11c: 00747913 andi s2,s0,7 + 8002c120: 04078463 beqz a5,8002c168 <_ZL8M202Syncv+0x78> + 8002c124: 00697593 andi a1,s2,6 + 8002c128: 00008537 lui a0,0x8 + 8002c12c: b2de40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c130: 00647593 andi a1,s0,6 + 8002c134: 0015e593 ori a1,a1,1 + 8002c138: 0000c537 lui a0,0xc + 8002c13c: b1de40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c140: fff4c513 not a0,s1 + 8002c144: 00157513 andi a0,a0,1 + 8002c148: f01e40ef jal ra,80011048 <_Z9setmirrori> + 8002c14c: 01013403 ld s0,16(sp) + 8002c150: 01813083 ld ra,24(sp) + 8002c154: 00813483 ld s1,8(sp) + 8002c158: 00090513 mv a0,s2 + 8002c15c: 00013903 ld s2,0(sp) + 8002c160: 02010113 addi sp,sp,32 + 8002c164: da1e406f j 80010f04 <_Z7setchr8j> + 8002c168: 00090593 mv a1,s2 + 8002c16c: 00008537 lui a0,0x8 + 8002c170: ae9e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c174: 00090593 mv a1,s2 + 8002c178: fc1ff06f j 8002c138 <_ZL8M202Syncv+0x48> + +000000008002c17c <_ZL8M204Syncv>: + 8002c17c: fe010113 addi sp,sp,-32 + 8002c180: 01213023 sd s2,0(sp) + 8002c184: 001a0917 auipc s2,0x1a0 + 8002c188: 22490913 addi s2,s2,548 # 801cc3a8 <_ZL6latche> + 8002c18c: 00813823 sd s0,16(sp) + 8002c190: 00095403 lhu s0,0(s2) + 8002c194: 00913423 sd s1,8(sp) + 8002c198: 00113c23 sd ra,24(sp) + 8002c19c: 00600793 li a5,6 + 8002c1a0: 00647493 andi s1,s0,6 + 8002c1a4: 04f48e63 beq s1,a5,8002c200 <_ZL8M204Syncv+0x84> + 8002c1a8: 00147413 andi s0,s0,1 + 8002c1ac: 0094043b addw s0,s0,s1 + 8002c1b0: 00040593 mv a1,s0 + 8002c1b4: 00008537 lui a0,0x8 + 8002c1b8: aa1e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c1bc: 00095583 lhu a1,0(s2) + 8002c1c0: 0015f593 andi a1,a1,1 + 8002c1c4: 009585b3 add a1,a1,s1 + 8002c1c8: 0000c537 lui a0,0xc + 8002c1cc: a8de40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c1d0: 00040513 mv a0,s0 + 8002c1d4: d31e40ef jal ra,80010f04 <_Z7setchr8j> + 8002c1d8: 00095503 lhu a0,0(s2) + 8002c1dc: 01013403 ld s0,16(sp) + 8002c1e0: 01813083 ld ra,24(sp) + 8002c1e4: 00813483 ld s1,8(sp) + 8002c1e8: 00013903 ld s2,0(sp) + 8002c1ec: 00455513 srli a0,a0,0x4 + 8002c1f0: 00154513 xori a0,a0,1 + 8002c1f4: 00157513 andi a0,a0,1 + 8002c1f8: 02010113 addi sp,sp,32 + 8002c1fc: e4de406f j 80011048 <_Z9setmirrori> + 8002c200: 00600593 li a1,6 + 8002c204: 00008537 lui a0,0x8 + 8002c208: a51e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c20c: 00600413 li s0,6 + 8002c210: 00100593 li a1,1 + 8002c214: fb1ff06f j 8002c1c4 <_ZL8M204Syncv+0x48> + +000000008002c218 <_ZL8M212Syncv>: + 8002c218: ff010113 addi sp,sp,-16 + 8002c21c: 00813023 sd s0,0(sp) + 8002c220: 001a0417 auipc s0,0x1a0 + 8002c224: 18840413 addi s0,s0,392 # 801cc3a8 <_ZL6latche> + 8002c228: 00045583 lhu a1,0(s0) + 8002c22c: 00113423 sd ra,8(sp) + 8002c230: 03159793 slli a5,a1,0x31 + 8002c234: 0407d063 bgez a5,8002c274 <_ZL8M212Syncv+0x5c> + 8002c238: 4015d59b sraiw a1,a1,0x1 + 8002c23c: 0035f593 andi a1,a1,3 + 8002c240: 00008537 lui a0,0x8 + 8002c244: bd1e40ef jal ra,80010e14 <_Z8setprg32jj> + 8002c248: 00045503 lhu a0,0(s0) + 8002c24c: 00757513 andi a0,a0,7 + 8002c250: cb5e40ef jal ra,80010f04 <_Z7setchr8j> + 8002c254: 00045503 lhu a0,0(s0) + 8002c258: 00013403 ld s0,0(sp) + 8002c25c: 00813083 ld ra,8(sp) + 8002c260: 00355513 srli a0,a0,0x3 + 8002c264: 00154513 xori a0,a0,1 + 8002c268: 00157513 andi a0,a0,1 + 8002c26c: 01010113 addi sp,sp,16 + 8002c270: dd9e406f j 80011048 <_Z9setmirrori> + 8002c274: 0075f593 andi a1,a1,7 + 8002c278: 00008537 lui a0,0x8 + 8002c27c: 9dde40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c280: 00045583 lhu a1,0(s0) + 8002c284: 0000c537 lui a0,0xc + 8002c288: 0075f593 andi a1,a1,7 + 8002c28c: 9cde40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c290: fb9ff06f j 8002c248 <_ZL8M212Syncv+0x30> + +000000008002c294 <_ZL8M213Syncv>: + 8002c294: ff010113 addi sp,sp,-16 + 8002c298: 00813023 sd s0,0(sp) + 8002c29c: 001a0417 auipc s0,0x1a0 + 8002c2a0: 10c40413 addi s0,s0,268 # 801cc3a8 <_ZL6latche> + 8002c2a4: 00045583 lhu a1,0(s0) + 8002c2a8: 00113423 sd ra,8(sp) + 8002c2ac: 0405f793 andi a5,a1,64 + 8002c2b0: 04078a63 beqz a5,8002c304 <_ZL8M213Syncv+0x70> + 8002c2b4: 0075f593 andi a1,a1,7 + 8002c2b8: 00008537 lui a0,0x8 + 8002c2bc: 99de40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c2c0: 00045583 lhu a1,0(s0) + 8002c2c4: 0000c537 lui a0,0xc + 8002c2c8: 0075f593 andi a1,a1,7 + 8002c2cc: 98de40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c2d0: 00045503 lhu a0,0(s0) + 8002c2d4: 4035551b sraiw a0,a0,0x3 + 8002c2d8: 00757513 andi a0,a0,7 + 8002c2dc: c29e40ef jal ra,80010f04 <_Z7setchr8j> + 8002c2e0: 00045503 lhu a0,0(s0) + 8002c2e4: 00013403 ld s0,0(sp) + 8002c2e8: 00813083 ld ra,8(sp) + 8002c2ec: 4065579b sraiw a5,a0,0x6 + 8002c2f0: 00f54533 xor a0,a0,a5 + 8002c2f4: fff54513 not a0,a0 + 8002c2f8: 00157513 andi a0,a0,1 + 8002c2fc: 01010113 addi sp,sp,16 + 8002c300: d49e406f j 80011048 <_Z9setmirrori> + 8002c304: 4015d59b sraiw a1,a1,0x1 + 8002c308: 0035f593 andi a1,a1,3 + 8002c30c: 00008537 lui a0,0x8 + 8002c310: b05e40ef jal ra,80010e14 <_Z8setprg32jj> + 8002c314: fbdff06f j 8002c2d0 <_ZL8M213Syncv+0x3c> + +000000008002c318 <_ZL8M229Syncv>: + 8002c318: ff010113 addi sp,sp,-16 + 8002c31c: 00813023 sd s0,0(sp) + 8002c320: 001a0417 auipc s0,0x1a0 + 8002c324: 08840413 addi s0,s0,136 # 801cc3a8 <_ZL6latche> + 8002c328: 00045503 lhu a0,0(s0) + 8002c32c: 00113423 sd ra,8(sp) + 8002c330: bd5e40ef jal ra,80010f04 <_Z7setchr8j> + 8002c334: 00045583 lhu a1,0(s0) + 8002c338: 01e5f793 andi a5,a1,30 + 8002c33c: 02079863 bnez a5,8002c36c <_ZL8M229Syncv+0x54> + 8002c340: 00000593 li a1,0 + 8002c344: 00008537 lui a0,0x8 + 8002c348: acde40ef jal ra,80010e14 <_Z8setprg32jj> + 8002c34c: 00045503 lhu a0,0(s0) + 8002c350: 00013403 ld s0,0(sp) + 8002c354: 00813083 ld ra,8(sp) + 8002c358: 00555513 srli a0,a0,0x5 + 8002c35c: 00154513 xori a0,a0,1 + 8002c360: 00157513 andi a0,a0,1 + 8002c364: 01010113 addi sp,sp,16 + 8002c368: ce1e406f j 80011048 <_Z9setmirrori> + 8002c36c: 01f5f593 andi a1,a1,31 + 8002c370: 00008537 lui a0,0x8 + 8002c374: 8e5e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c378: 00045583 lhu a1,0(s0) + 8002c37c: 0000c537 lui a0,0xc + 8002c380: 01f5f593 andi a1,a1,31 + 8002c384: 8d5e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c388: fc5ff06f j 8002c34c <_ZL8M229Syncv+0x34> + +000000008002c38c <_ZL8M231Syncv>: + 8002c38c: ff010113 addi sp,sp,-16 + 8002c390: 00000513 li a0,0 + 8002c394: 00813023 sd s0,0(sp) + 8002c398: 00113423 sd ra,8(sp) + 8002c39c: 001a0417 auipc s0,0x1a0 + 8002c3a0: 00c40413 addi s0,s0,12 # 801cc3a8 <_ZL6latche> + 8002c3a4: b61e40ef jal ra,80010f04 <_Z7setchr8j> + 8002c3a8: 00045583 lhu a1,0(s0) + 8002c3ac: 0205f793 andi a5,a1,32 + 8002c3b0: 02078a63 beqz a5,8002c3e4 <_ZL8M231Syncv+0x58> + 8002c3b4: 4015d59b sraiw a1,a1,0x1 + 8002c3b8: 00f5f593 andi a1,a1,15 + 8002c3bc: 00008537 lui a0,0x8 + 8002c3c0: a55e40ef jal ra,80010e14 <_Z8setprg32jj> + 8002c3c4: 00045503 lhu a0,0(s0) + 8002c3c8: 00013403 ld s0,0(sp) + 8002c3cc: 00813083 ld ra,8(sp) + 8002c3d0: 00755513 srli a0,a0,0x7 + 8002c3d4: 00154513 xori a0,a0,1 + 8002c3d8: 00157513 andi a0,a0,1 + 8002c3dc: 01010113 addi sp,sp,16 + 8002c3e0: c69e406f j 80011048 <_Z9setmirrori> + 8002c3e4: 01e5f593 andi a1,a1,30 + 8002c3e8: 00008537 lui a0,0x8 + 8002c3ec: 86de40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c3f0: 00045583 lhu a1,0(s0) + 8002c3f4: 0000c537 lui a0,0xc + 8002c3f8: 01e5f593 andi a1,a1,30 + 8002c3fc: 85de40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c400: fc5ff06f j 8002c3c4 <_ZL8M231Syncv+0x38> + +000000008002c404 <_ZL16BMC810544CA1Syncv>: + 8002c404: fe010113 addi sp,sp,-32 + 8002c408: 00813823 sd s0,16(sp) + 8002c40c: 001a0417 auipc s0,0x1a0 + 8002c410: f9c40413 addi s0,s0,-100 # 801cc3a8 <_ZL6latche> + 8002c414: 00045703 lhu a4,0(s0) + 8002c418: 00113c23 sd ra,24(sp) + 8002c41c: 00913423 sd s1,8(sp) + 8002c420: 0007079b sext.w a5,a4 + 8002c424: 04077713 andi a4,a4,64 + 8002c428: 04070063 beqz a4,8002c468 <_ZL16BMC810544CA1Syncv+0x64> + 8002c42c: 0077d593 srli a1,a5,0x7 + 8002c430: 00008537 lui a0,0x8 + 8002c434: 9e1e40ef jal ra,80010e14 <_Z8setprg32jj> + 8002c438: 00045503 lhu a0,0(s0) + 8002c43c: 00f57513 andi a0,a0,15 + 8002c440: ac5e40ef jal ra,80010f04 <_Z7setchr8j> + 8002c444: 00045503 lhu a0,0(s0) + 8002c448: 01013403 ld s0,16(sp) + 8002c44c: 01813083 ld ra,24(sp) + 8002c450: 00813483 ld s1,8(sp) + 8002c454: 00455513 srli a0,a0,0x4 + 8002c458: 00154513 xori a0,a0,1 + 8002c45c: 00157513 andi a0,a0,1 + 8002c460: 02010113 addi sp,sp,32 + 8002c464: be5e406f j 80011048 <_Z9setmirrori> + 8002c468: 4077d49b sraiw s1,a5,0x7 + 8002c46c: 4057d59b sraiw a1,a5,0x5 + 8002c470: 0014949b slliw s1,s1,0x1 + 8002c474: 0015f593 andi a1,a1,1 + 8002c478: 0095e5b3 or a1,a1,s1 + 8002c47c: 0005859b sext.w a1,a1 + 8002c480: 00008537 lui a0,0x8 + 8002c484: fd4e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c488: 00045583 lhu a1,0(s0) + 8002c48c: 0000c537 lui a0,0xc + 8002c490: 4055d59b sraiw a1,a1,0x5 + 8002c494: 0015f593 andi a1,a1,1 + 8002c498: 0095e5b3 or a1,a1,s1 + 8002c49c: 0005859b sext.w a1,a1 + 8002c4a0: fb8e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c4a4: f95ff06f j 8002c438 <_ZL16BMC810544CA1Syncv+0x34> + +000000008002c4a8 <_ZL8M212Readj>: + 8002c4a8: ff010113 addi sp,sp,-16 + 8002c4ac: 00813023 sd s0,0(sp) + 8002c4b0: 00113423 sd ra,8(sp) + 8002c4b4: 00050413 mv s0,a0 + 8002c4b8: a18e40ef jal ra,800106d0 <_Z8CartBROBj> + 8002c4bc: 0000e7b7 lui a5,0xe + 8002c4c0: 01078793 addi a5,a5,16 # e010 <_entry_offset+0xe010> + 8002c4c4: 00f47433 and s0,s0,a5 + 8002c4c8: 000067b7 lui a5,0x6 + 8002c4cc: 00f41663 bne s0,a5,8002c4d8 <_ZL8M212Readj+0x30> + 8002c4d0: f8056513 ori a0,a0,-128 + 8002c4d4: 0ff57513 andi a0,a0,255 + 8002c4d8: 00813083 ld ra,8(sp) + 8002c4dc: 00013403 ld s0,0(sp) + 8002c4e0: 01010113 addi sp,sp,16 + 8002c4e4: 00008067 ret + +000000008002c4e8 <_ZL10LatchClosev>: + 8002c4e8: 001a0517 auipc a0,0x1a0 + 8002c4ec: eb053503 ld a0,-336(a0) # 801cc398 <_ZL4WRAM> + 8002c4f0: 02050263 beqz a0,8002c514 <_ZL10LatchClosev+0x2c> + 8002c4f4: ff010113 addi sp,sp,-16 + 8002c4f8: 00113423 sd ra,8(sp) + 8002c4fc: 844e60ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002c500: 00813083 ld ra,8(sp) + 8002c504: 001a0797 auipc a5,0x1a0 + 8002c508: e807ba23 sd zero,-364(a5) # 801cc398 <_ZL4WRAM> + 8002c50c: 01010113 addi sp,sp,16 + 8002c510: 00008067 ret + 8002c514: 001a0797 auipc a5,0x1a0 + 8002c518: e807b223 sd zero,-380(a5) # 801cc398 <_ZL4WRAM> + 8002c51c: 00008067 ret + +000000008002c520 <_ZL10LatchPowerv>: + 8002c520: ff010113 addi sp,sp,-16 + 8002c524: 001a0797 auipc a5,0x1a0 + 8002c528: e727d783 lhu a5,-398(a5) # 801cc396 <_ZL10latcheinit> + 8002c52c: 00813023 sd s0,0(sp) + 8002c530: 001a0717 auipc a4,0x1a0 + 8002c534: e6f71c23 sh a5,-392(a4) # 801cc3a8 <_ZL6latche> + 8002c538: 00113423 sd ra,8(sp) + 8002c53c: 001a0797 auipc a5,0x1a0 + 8002c540: e647b783 ld a5,-412(a5) # 801cc3a0 <_ZL5WSync> + 8002c544: 001a0417 auipc s0,0x1a0 + 8002c548: e5440413 addi s0,s0,-428 # 801cc398 <_ZL4WRAM> + 8002c54c: 000780e7 jalr a5 + 8002c550: 00043783 ld a5,0(s0) + 8002c554: 06078a63 beqz a5,8002c5c8 <_ZL10LatchPowerv+0xa8> + 8002c558: 000105b7 lui a1,0x10 + 8002c55c: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8002c560: fffe4617 auipc a2,0xfffe4 + 8002c564: 10060613 addi a2,a2,256 # 80010660 <_Z6CartBRj> + 8002c568: 00006537 lui a0,0x6 + 8002c56c: 4b0070ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002c570: 000085b7 lui a1,0x8 + 8002c574: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 8002c578: fffe4617 auipc a2,0xfffe4 + 8002c57c: 11460613 addi a2,a2,276 # 8001068c <_Z6CartBWjh> + 8002c580: 00006537 lui a0,0x6 + 8002c584: 5a4070ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002c588: 00043603 ld a2,0(s0) + 8002c58c: 001a0517 auipc a0,0x1a0 + 8002c590: e2c52503 lw a0,-468(a0) # 801cc3b8 <_ZL8WRAMSIZE> + 8002c594: 000065b7 lui a1,0x6 + 8002c598: 00a5551b srliw a0,a0,0xa + 8002c59c: a79d30ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 8002c5a0: 00013403 ld s0,0(sp) + 8002c5a4: 00813083 ld ra,8(sp) + 8002c5a8: 001a0597 auipc a1,0x1a0 + 8002c5ac: e165d583 lhu a1,-490(a1) # 801cc3be <_ZL8addrreg1> + 8002c5b0: 001a0517 auipc a0,0x1a0 + 8002c5b4: e0c55503 lhu a0,-500(a0) # 801cc3bc <_ZL8addrreg0> + 8002c5b8: fffff617 auipc a2,0xfffff + 8002c5bc: 72060613 addi a2,a2,1824 # 8002bcd8 <_ZL10LatchWritejh> + 8002c5c0: 01010113 addi sp,sp,16 + 8002c5c4: 5640706f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002c5c8: 000105b7 lui a1,0x10 + 8002c5cc: 001a0617 auipc a2,0x1a0 + 8002c5d0: de463603 ld a2,-540(a2) # 801cc3b0 <_ZL7defread> + 8002c5d4: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8002c5d8: 00006537 lui a0,0x6 + 8002c5dc: 440070ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002c5e0: fc1ff06f j 8002c5a0 <_ZL10LatchPowerv+0x80> + +000000008002c5e4 <_ZL8M227Syncv>: + 8002c5e4: fd010113 addi sp,sp,-48 + 8002c5e8: 01313423 sd s3,8(sp) + 8002c5ec: 001a0997 auipc s3,0x1a0 + 8002c5f0: dbc98993 addi s3,s3,-580 # 801cc3a8 <_ZL6latche> + 8002c5f4: 0009d783 lhu a5,0(s3) + 8002c5f8: 01213823 sd s2,16(sp) + 8002c5fc: 02813023 sd s0,32(sp) + 8002c600: 0007891b sext.w s2,a5 + 8002c604: 4029541b sraiw s0,s2,0x2 + 8002c608: 4039569b sraiw a3,s2,0x3 + 8002c60c: fffff737 lui a4,0xfffff + 8002c610: 00913c23 sd s1,24(sp) + 8002c614: 01f47413 andi s0,s0,31 + 8002c618: 0206f693 andi a3,a3,32 + 8002c61c: 02113423 sd ra,40(sp) + 8002c620: 0000f637 lui a2,0xf + 8002c624: 00e7f733 and a4,a5,a4 + 8002c628: 0017f493 andi s1,a5,1 + 8002c62c: 00d46433 or s0,s0,a3 + 8002c630: 00096597 auipc a1,0x96 + 8002c634: fd05b583 ld a1,-48(a1) # 800c2600 + 8002c638: 0cc70e63 beq a4,a2,8002c714 <_ZL8M227Syncv+0x130> + 8002c63c: 00100693 li a3,1 + 8002c640: 00002637 lui a2,0x2 + 8002c644: 00000513 li a0,0 + 8002c648: f7de30ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 8002c64c: 0009d783 lhu a5,0(s3) + 8002c650: 0807f793 andi a5,a5,128 + 8002c654: 06078263 beqz a5,8002c6b8 <_ZL8M227Syncv+0xd4> + 8002c658: 0a049663 bnez s1,8002c704 <_ZL8M227Syncv+0x120> + 8002c65c: 00040593 mv a1,s0 + 8002c660: 00008537 lui a0,0x8 + 8002c664: df4e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c668: 00040593 mv a1,s0 + 8002c66c: 0000c537 lui a0,0xc + 8002c670: de8e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c674: 0009d503 lhu a0,0(s3) + 8002c678: 00155513 srli a0,a0,0x1 + 8002c67c: 00154513 xori a0,a0,1 + 8002c680: 00157513 andi a0,a0,1 + 8002c684: 9c5e40ef jal ra,80011048 <_Z9setmirrori> + 8002c688: 00000513 li a0,0 + 8002c68c: 879e40ef jal ra,80010f04 <_Z7setchr8j> + 8002c690: 02013403 ld s0,32(sp) + 8002c694: 02813083 ld ra,40(sp) + 8002c698: 01813483 ld s1,24(sp) + 8002c69c: 01013903 ld s2,16(sp) + 8002c6a0: 00813983 ld s3,8(sp) + 8002c6a4: 00000613 li a2,0 + 8002c6a8: 000065b7 lui a1,0x6 + 8002c6ac: 01000513 li a0,16 + 8002c6b0: 03010113 addi sp,sp,48 + 8002c6b4: a34e406f j 800108e8 <_Z8setprg8rijj> + 8002c6b8: 4099591b sraiw s2,s2,0x9 + 8002c6bc: 00197913 andi s2,s2,1 + 8002c6c0: 02048263 beqz s1,8002c6e4 <_ZL8M227Syncv+0x100> + 8002c6c4: 03e47593 andi a1,s0,62 + 8002c6c8: 00008537 lui a0,0x8 + 8002c6cc: 02090263 beqz s2,8002c6f0 <_ZL8M227Syncv+0x10c> + 8002c6d0: d88e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c6d4: 00746593 ori a1,s0,7 + 8002c6d8: 0000c537 lui a0,0xc + 8002c6dc: d7ce40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c6e0: f95ff06f j 8002c674 <_ZL8M227Syncv+0x90> + 8002c6e4: 00040593 mv a1,s0 + 8002c6e8: 00008537 lui a0,0x8 + 8002c6ec: fe0912e3 bnez s2,8002c6d0 <_ZL8M227Syncv+0xec> + 8002c6f0: d68e40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c6f4: 03847593 andi a1,s0,56 + 8002c6f8: 0000c537 lui a0,0xc + 8002c6fc: d5ce40ef jal ra,80010c58 <_Z8setprg16jj> + 8002c700: f75ff06f j 8002c674 <_ZL8M227Syncv+0x90> + 8002c704: 00145593 srli a1,s0,0x1 + 8002c708: 00008537 lui a0,0x8 + 8002c70c: f08e40ef jal ra,80010e14 <_Z8setprg32jj> + 8002c710: f65ff06f j 8002c674 <_ZL8M227Syncv+0x90> + 8002c714: 00000693 li a3,0 + 8002c718: 00002637 lui a2,0x2 + 8002c71c: 00000513 li a0,0 + 8002c720: ea5e30ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 8002c724: f29ff06f j 8002c64c <_ZL8M227Syncv+0x68> + +000000008002c728 <_ZL8M242Syncv>: + 8002c728: ff010113 addi sp,sp,-16 + 8002c72c: 00000513 li a0,0 + 8002c730: 00113423 sd ra,8(sp) + 8002c734: 00813023 sd s0,0(sp) + 8002c738: fcce40ef jal ra,80010f04 <_Z7setchr8j> + 8002c73c: 00000613 li a2,0 + 8002c740: 000065b7 lui a1,0x6 + 8002c744: 01000513 li a0,16 + 8002c748: 9a0e40ef jal ra,800108e8 <_Z8setprg8rijj> + 8002c74c: 001a0417 auipc s0,0x1a0 + 8002c750: c5c40413 addi s0,s0,-932 # 801cc3a8 <_ZL6latche> + 8002c754: 00045583 lhu a1,0(s0) + 8002c758: 00008537 lui a0,0x8 + 8002c75c: 4035d59b sraiw a1,a1,0x3 + 8002c760: 00f5f593 andi a1,a1,15 + 8002c764: eb0e40ef jal ra,80010e14 <_Z8setprg32jj> + 8002c768: 00045503 lhu a0,0(s0) + 8002c76c: 00013403 ld s0,0(sp) + 8002c770: 00813083 ld ra,8(sp) + 8002c774: 00155513 srli a0,a0,0x1 + 8002c778: 00154513 xori a0,a0,1 + 8002c77c: 00157513 andi a0,a0,1 + 8002c780: 01010113 addi sp,sp,16 + 8002c784: 8c5e406f j 80011048 <_Z9setmirrori> + +000000008002c788 <_ZL8M201Syncv>: + 8002c788: ff010113 addi sp,sp,-16 + 8002c78c: 00813023 sd s0,0(sp) + 8002c790: 001a0417 auipc s0,0x1a0 + 8002c794: c1840413 addi s0,s0,-1000 # 801cc3a8 <_ZL6latche> + 8002c798: 00045583 lhu a1,0(s0) + 8002c79c: 00113423 sd ra,8(sp) + 8002c7a0: 00008537 lui a0,0x8 + 8002c7a4: 0085f793 andi a5,a1,8 + 8002c7a8: 02078263 beqz a5,8002c7cc <_ZL8M201Syncv+0x44> + 8002c7ac: 0035f593 andi a1,a1,3 + 8002c7b0: e64e40ef jal ra,80010e14 <_Z8setprg32jj> + 8002c7b4: 00045503 lhu a0,0(s0) + 8002c7b8: 00013403 ld s0,0(sp) + 8002c7bc: 00813083 ld ra,8(sp) + 8002c7c0: 00357513 andi a0,a0,3 + 8002c7c4: 01010113 addi sp,sp,16 + 8002c7c8: f3ce406f j 80010f04 <_Z7setchr8j> + 8002c7cc: 00000593 li a1,0 + 8002c7d0: e44e40ef jal ra,80010e14 <_Z8setprg32jj> + 8002c7d4: 00013403 ld s0,0(sp) + 8002c7d8: 00813083 ld ra,8(sp) + 8002c7dc: 00000513 li a0,0 + 8002c7e0: 01010113 addi sp,sp,16 + 8002c7e4: f20e406f j 80010f04 <_Z7setchr8j> + +000000008002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0>: + 8002c7e8: 001a0797 auipc a5,0x1a0 + 8002c7ec: bad79723 sh a3,-1106(a5) # 801cc396 <_ZL10latcheinit> + 8002c7f0: ffff87b7 lui a5,0xffff8 + 8002c7f4: fe010113 addi sp,sp,-32 + 8002c7f8: 001a0697 auipc a3,0x1a0 + 8002c7fc: bcf69223 sh a5,-1084(a3) # 801cc3bc <_ZL8addrreg0> + 8002c800: fff00793 li a5,-1 + 8002c804: 00813823 sd s0,16(sp) + 8002c808: 001a0697 auipc a3,0x1a0 + 8002c80c: baf69b23 sh a5,-1098(a3) # 801cc3be <_ZL8addrreg1> + 8002c810: 00113c23 sd ra,24(sp) + 8002c814: 00913423 sd s1,8(sp) + 8002c818: 01213023 sd s2,0(sp) + 8002c81c: 001a0797 auipc a5,0x1a0 + 8002c820: b8b7b223 sd a1,-1148(a5) # 801cc3a0 <_ZL5WSync> + 8002c824: 00050413 mv s0,a0 + 8002c828: 0c060c63 beqz a2,8002c900 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0+0x118> + 8002c82c: 001a0797 auipc a5,0x1a0 + 8002c830: b8c7b223 sd a2,-1148(a5) # 801cc3b0 <_ZL7defread> + 8002c834: 00000797 auipc a5,0x0 + 8002c838: cec78793 addi a5,a5,-788 # 8002c520 <_ZL10LatchPowerv> + 8002c83c: 00f43023 sd a5,0(s0) + 8002c840: fffff797 auipc a5,0xfffff + 8002c844: 4ac78793 addi a5,a5,1196 # 8002bcec <_ZL10LatchResetv> + 8002c848: 00f43423 sd a5,8(s0) + 8002c84c: 00000797 auipc a5,0x0 + 8002c850: c9c78793 addi a5,a5,-868 # 8002c4e8 <_ZL10LatchClosev> + 8002c854: 00f43823 sd a5,16(s0) + 8002c858: 04071263 bnez a4,8002c89c <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0+0xb4> + 8002c85c: 01013403 ld s0,16(sp) + 8002c860: 01813083 ld ra,24(sp) + 8002c864: 00813483 ld s1,8(sp) + 8002c868: 00013903 ld s2,0(sp) + 8002c86c: fffff797 auipc a5,0xfffff + 8002c870: 49c78793 addi a5,a5,1180 # 8002bd08 <_ZL12StateRestorei> + 8002c874: 001a0717 auipc a4,0x1a0 + 8002c878: def73223 sd a5,-540(a4) # 801cc658 + 8002c87c: 00019697 auipc a3,0x19 + 8002c880: aec68693 addi a3,a3,-1300 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 8002c884: 00000613 li a2,0 + 8002c888: 00200593 li a1,2 + 8002c88c: 001a0517 auipc a0,0x1a0 + 8002c890: b1c50513 addi a0,a0,-1252 # 801cc3a8 <_ZL6latche> + 8002c894: 02010113 addi sp,sp,32 + 8002c898: f78d306f j 80000010 <_Z10AddExStatePvjiPKc> + 8002c89c: 000027b7 lui a5,0x2 + 8002c8a0: 001a0497 auipc s1,0x1a0 + 8002c8a4: b1848493 addi s1,s1,-1256 # 801cc3b8 <_ZL8WRAMSIZE> + 8002c8a8: 00002537 lui a0,0x2 + 8002c8ac: 00f4a023 sw a5,0(s1) + 8002c8b0: bbde50ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002c8b4: 0004a603 lw a2,0(s1) + 8002c8b8: 00050593 mv a1,a0 + 8002c8bc: 001a0917 auipc s2,0x1a0 + 8002c8c0: adc90913 addi s2,s2,-1316 # 801cc398 <_ZL4WRAM> + 8002c8c4: 01000513 li a0,16 + 8002c8c8: 00100693 li a3,1 + 8002c8cc: 00b93023 sd a1,0(s2) + 8002c8d0: c25e30ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8002c8d4: 04c42783 lw a5,76(s0) + 8002c8d8: 00093503 ld a0,0(s2) + 8002c8dc: 0004a583 lw a1,0(s1) + 8002c8e0: 00078663 beqz a5,8002c8ec <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0+0x104> + 8002c8e4: 00a43c23 sd a0,24(s0) + 8002c8e8: 02b42c23 sw a1,56(s0) + 8002c8ec: 00019697 auipc a3,0x19 + 8002c8f0: a3c68693 addi a3,a3,-1476 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 8002c8f4: 00000613 li a2,0 + 8002c8f8: f18d30ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002c8fc: f61ff06f j 8002c85c <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0+0x74> + 8002c900: fffe4797 auipc a5,0xfffe4 + 8002c904: dd078793 addi a5,a5,-560 # 800106d0 <_Z8CartBROBj> + 8002c908: 001a0697 auipc a3,0x1a0 + 8002c90c: aaf6b423 sd a5,-1368(a3) # 801cc3b0 <_ZL7defread> + 8002c910: f25ff06f j 8002c834 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0+0x4c> + +000000008002c914 <_Z13BMCD1038_InitP8CartInfo>: + 8002c914: ff010113 addi sp,sp,-16 + 8002c918: 00000693 li a3,0 + 8002c91c: fffff617 auipc a2,0xfffff + 8002c920: 41460613 addi a2,a2,1044 # 8002bd30 <_ZL12BMCD1038Readj> + 8002c924: fffff597 auipc a1,0xfffff + 8002c928: 57c58593 addi a1,a1,1404 # 8002bea0 <_ZL12BMCD1038Syncv> + 8002c92c: 00000713 li a4,0 + 8002c930: 00813023 sd s0,0(sp) + 8002c934: 00113423 sd ra,8(sp) + 8002c938: 00050413 mv s0,a0 + 8002c93c: eadff0ef jal ra,8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + 8002c940: fffff797 auipc a5,0xfffff + 8002c944: 3d478793 addi a5,a5,980 # 8002bd14 <_ZL13BMCD1038Resetv> + 8002c948: 00f43423 sd a5,8(s0) + 8002c94c: 00013403 ld s0,0(sp) + 8002c950: 00813083 ld ra,8(sp) + 8002c954: 00019697 auipc a3,0x19 + 8002c958: 77468693 addi a3,a3,1908 # 800460c8 <_ZL3lut+0x268> + 8002c95c: 00000613 li a2,0 + 8002c960: 00100593 li a1,1 + 8002c964: 001a0517 auipc a0,0x1a0 + 8002c968: a5c50513 addi a0,a0,-1444 # 801cc3c0 <_ZL9dipswitch> + 8002c96c: 01010113 addi sp,sp,16 + 8002c970: ea0d306f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002c974 <_Z13BMCGK192_InitP8CartInfo>: + 8002c974: 00000713 li a4,0 + 8002c978: 00000693 li a3,0 + 8002c97c: 00000613 li a2,0 + 8002c980: fffff597 auipc a1,0xfffff + 8002c984: 5a858593 addi a1,a1,1448 # 8002bf28 <_ZL12BMCGK192Syncv> + 8002c988: e61ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002c98c <_Z13Mapper59_InitP8CartInfo>: + 8002c98c: 00000713 li a4,0 + 8002c990: 00000693 li a3,0 + 8002c994: fffff617 auipc a2,0xfffff + 8002c998: 3bc60613 addi a2,a2,956 # 8002bd50 <_ZL7M59Readj> + 8002c99c: fffff597 auipc a1,0xfffff + 8002c9a0: 60c58593 addi a1,a1,1548 # 8002bfa8 <_ZL7M59Syncv> + 8002c9a4: e45ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002c9a8 <_Z13Mapper61_InitP8CartInfo>: + 8002c9a8: 00000713 li a4,0 + 8002c9ac: 00000693 li a3,0 + 8002c9b0: 00000613 li a2,0 + 8002c9b4: fffff597 auipc a1,0xfffff + 8002c9b8: 64458593 addi a1,a1,1604 # 8002bff8 <_ZL7M61Syncv> + 8002c9bc: e2dff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002c9c0 <_Z13Mapper92_InitP8CartInfo>: + 8002c9c0: 000086b7 lui a3,0x8 + 8002c9c4: 00000713 li a4,0 + 8002c9c8: 0b068693 addi a3,a3,176 # 80b0 <_entry_offset+0x80b0> + 8002c9cc: 00000613 li a2,0 + 8002c9d0: fffff597 auipc a1,0xfffff + 8002c9d4: 39c58593 addi a1,a1,924 # 8002bd6c <_ZL7M92Syncv> + 8002c9d8: e11ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002c9dc <_Z14Mapper200_InitP8CartInfo>: + 8002c9dc: 000106b7 lui a3,0x10 + 8002c9e0: 00000713 li a4,0 + 8002c9e4: fff68693 addi a3,a3,-1 # ffff <_entry_offset+0xffff> + 8002c9e8: 00000613 li a2,0 + 8002c9ec: fffff597 auipc a1,0xfffff + 8002c9f0: 6a858593 addi a1,a1,1704 # 8002c094 <_ZL8M200Syncv> + 8002c9f4: df5ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002c9f8 <_Z14Mapper201_InitP8CartInfo>: + 8002c9f8: 000106b7 lui a3,0x10 + 8002c9fc: 00000713 li a4,0 + 8002ca00: fff68693 addi a3,a3,-1 # ffff <_entry_offset+0xffff> + 8002ca04: 00000613 li a2,0 + 8002ca08: 00000597 auipc a1,0x0 + 8002ca0c: d8058593 addi a1,a1,-640 # 8002c788 <_ZL8M201Syncv> + 8002ca10: dd9ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002ca14 <_Z14Mapper202_InitP8CartInfo>: + 8002ca14: 00000713 li a4,0 + 8002ca18: 00000693 li a3,0 + 8002ca1c: 00000613 li a2,0 + 8002ca20: fffff597 auipc a1,0xfffff + 8002ca24: 6d058593 addi a1,a1,1744 # 8002c0f0 <_ZL8M202Syncv> + 8002ca28: dc1ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002ca2c <_Z14Mapper204_InitP8CartInfo>: + 8002ca2c: 000106b7 lui a3,0x10 + 8002ca30: 00000713 li a4,0 + 8002ca34: fff68693 addi a3,a3,-1 # ffff <_entry_offset+0xffff> + 8002ca38: 00000613 li a2,0 + 8002ca3c: fffff597 auipc a1,0xfffff + 8002ca40: 74058593 addi a1,a1,1856 # 8002c17c <_ZL8M204Syncv> + 8002ca44: da5ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002ca48 <_Z14Mapper212_InitP8CartInfo>: + 8002ca48: 00000713 li a4,0 + 8002ca4c: 00000693 li a3,0 + 8002ca50: 00000617 auipc a2,0x0 + 8002ca54: a5860613 addi a2,a2,-1448 # 8002c4a8 <_ZL8M212Readj> + 8002ca58: fffff597 auipc a1,0xfffff + 8002ca5c: 7c058593 addi a1,a1,1984 # 8002c218 <_ZL8M212Syncv> + 8002ca60: d89ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002ca64 <_Z14Mapper213_InitP8CartInfo>: + 8002ca64: 00000713 li a4,0 + 8002ca68: 00000693 li a3,0 + 8002ca6c: 00000613 li a2,0 + 8002ca70: 00000597 auipc a1,0x0 + 8002ca74: 82458593 addi a1,a1,-2012 # 8002c294 <_ZL8M213Syncv> + 8002ca78: d71ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002ca7c <_Z14Mapper214_InitP8CartInfo>: + 8002ca7c: 00000713 li a4,0 + 8002ca80: 00000693 li a3,0 + 8002ca84: 00000613 li a2,0 + 8002ca88: fffff597 auipc a1,0xfffff + 8002ca8c: 38458593 addi a1,a1,900 # 8002be0c <_ZL8M214Syncv> + 8002ca90: d59ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002ca94 <_Z14Mapper217_InitP8CartInfo>: + 8002ca94: 00000713 li a4,0 + 8002ca98: 00000693 li a3,0 + 8002ca9c: 00000613 li a2,0 + 8002caa0: fffff597 auipc a1,0xfffff + 8002caa4: 3c058593 addi a1,a1,960 # 8002be60 <_ZL8M217Syncv> + 8002caa8: d41ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002caac <_Z14Mapper227_InitP8CartInfo>: + 8002caac: 00100713 li a4,1 + 8002cab0: 00000693 li a3,0 + 8002cab4: 00000613 li a2,0 + 8002cab8: 00000597 auipc a1,0x0 + 8002cabc: b2c58593 addi a1,a1,-1236 # 8002c5e4 <_ZL8M227Syncv> + 8002cac0: d29ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002cac4 <_Z14Mapper229_InitP8CartInfo>: + 8002cac4: 00000713 li a4,0 + 8002cac8: 00000693 li a3,0 + 8002cacc: 00000613 li a2,0 + 8002cad0: 00000597 auipc a1,0x0 + 8002cad4: 84858593 addi a1,a1,-1976 # 8002c318 <_ZL8M229Syncv> + 8002cad8: d11ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002cadc <_Z14Mapper231_InitP8CartInfo>: + 8002cadc: 00000713 li a4,0 + 8002cae0: 00000693 li a3,0 + 8002cae4: 00000613 li a2,0 + 8002cae8: 00000597 auipc a1,0x0 + 8002caec: 8a458593 addi a1,a1,-1884 # 8002c38c <_ZL8M231Syncv> + 8002caf0: cf9ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002caf4 <_Z14Mapper242_InitP8CartInfo>: + 8002caf4: 00100713 li a4,1 + 8002caf8: 00000693 li a3,0 + 8002cafc: 00000613 li a2,0 + 8002cb00: 00000597 auipc a1,0x0 + 8002cb04: c2858593 addi a1,a1,-984 # 8002c728 <_ZL8M242Syncv> + 8002cb08: ce1ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002cb0c <_Z17BMC810544CA1_InitP8CartInfo>: + 8002cb0c: 00000713 li a4,0 + 8002cb10: 00000693 li a3,0 + 8002cb14: 00000613 li a2,0 + 8002cb18: 00000597 auipc a1,0x0 + 8002cb1c: 8ec58593 addi a1,a1,-1812 # 8002c404 <_ZL16BMC810544CA1Syncv> + 8002cb20: cc9ff06f j 8002c7e8 <_ZL10Latch_InitP8CartInfoPFvvEPFhjEttth.constprop.0> + +000000008002cb24 <_ZL4Syncv>: + 8002cb24: fd010113 addi sp,sp,-48 + 8002cb28: 01313423 sd s3,8(sp) + 8002cb2c: 001a0997 auipc s3,0x1a0 + 8002cb30: 8ac98993 addi s3,s3,-1876 # 801cc3d8 <_ZL6prgreg> + 8002cb34: 0009c583 lbu a1,0(s3) + 8002cb38: 00008537 lui a0,0x8 + 8002cb3c: 02113423 sd ra,40(sp) + 8002cb40: 02813023 sd s0,32(sp) + 8002cb44: 00913c23 sd s1,24(sp) + 8002cb48: 01213823 sd s2,16(sp) + 8002cb4c: f51e30ef jal ra,80010a9c <_Z7setprg8jj> + 8002cb50: 0019c583 lbu a1,1(s3) + 8002cb54: 0000a537 lui a0,0xa + 8002cb58: 001a0497 auipc s1,0x1a0 + 8002cb5c: 87048493 addi s1,s1,-1936 # 801cc3c8 <_ZL6chrreg> + 8002cb60: f3de30ef jal ra,80010a9c <_Z7setprg8jj> + 8002cb64: 0029c583 lbu a1,2(s3) + 8002cb68: 0000c537 lui a0,0xc + 8002cb6c: 00000413 li s0,0 + 8002cb70: f2de30ef jal ra,80010a9c <_Z7setprg8jj> + 8002cb74: 0039c583 lbu a1,3(s3) + 8002cb78: 0000e537 lui a0,0xe + 8002cb7c: 00002937 lui s2,0x2 + 8002cb80: f1de30ef jal ra,80010a9c <_Z7setprg8jj> + 8002cb84: 0004c583 lbu a1,0(s1) + 8002cb88: 00040513 mv a0,s0 + 8002cb8c: 4004041b addiw s0,s0,1024 + 8002cb90: b14e40ef jal ra,80010ea4 <_Z7setchr1jj> + 8002cb94: 00148493 addi s1,s1,1 + 8002cb98: ff2416e3 bne s0,s2,8002cb84 <_ZL4Syncv+0x60> + 8002cb9c: 02013403 ld s0,32(sp) + 8002cba0: 02813083 ld ra,40(sp) + 8002cba4: 01813483 ld s1,24(sp) + 8002cba8: 01013903 ld s2,16(sp) + 8002cbac: 00813983 ld s3,8(sp) + 8002cbb0: 001a0517 auipc a0,0x1a0 + 8002cbb4: 82054503 lbu a0,-2016(a0) # 801cc3d0 <_ZL6mirror> + 8002cbb8: 00154513 xori a0,a0,1 + 8002cbbc: 03010113 addi sp,sp,48 + 8002cbc0: c88e406f j 80011048 <_Z9setmirrori> + +000000008002cbc4 <_ZL12StateRestorei>: + 8002cbc4: f61ff06f j 8002cb24 <_ZL4Syncv> + +000000008002cbc8 <_ZL9M117Powerv>: + 8002cbc8: ffff07b7 lui a5,0xffff0 + 8002cbcc: ff010113 addi sp,sp,-16 + 8002cbd0: dfc7879b addiw a5,a5,-516 + 8002cbd4: 00113423 sd ra,8(sp) + 8002cbd8: 00813023 sd s0,0(sp) + 8002cbdc: 0019f717 auipc a4,0x19f + 8002cbe0: 7ef72e23 sw a5,2044(a4) # 801cc3d8 <_ZL6prgreg> + 8002cbe4: 00010437 lui s0,0x10 + 8002cbe8: f3dff0ef jal ra,8002cb24 <_ZL4Syncv> + 8002cbec: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002cbf0: fffe4617 auipc a2,0xfffe4 + 8002cbf4: a7060613 addi a2,a2,-1424 # 80010660 <_Z6CartBRj> + 8002cbf8: 00008537 lui a0,0x8 + 8002cbfc: 621060ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002cc00: fff40593 addi a1,s0,-1 + 8002cc04: 00013403 ld s0,0(sp) + 8002cc08: 00813083 ld ra,8(sp) + 8002cc0c: 00000617 auipc a2,0x0 + 8002cc10: 05c60613 addi a2,a2,92 # 8002cc68 <_ZL9M117Writejh> + 8002cc14: 00008537 lui a0,0x8 + 8002cc18: 01010113 addi sp,sp,16 + 8002cc1c: 70d0606f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002cc20 <_ZL11M117IRQHookv>: + 8002cc20: 0019f797 auipc a5,0x19f + 8002cc24: 7a178793 addi a5,a5,1953 # 801cc3c1 <_ZL4IRQa> + 8002cc28: 0007c683 lbu a3,0(a5) + 8002cc2c: 00300713 li a4,3 + 8002cc30: 00e68463 beq a3,a4,8002cc38 <_ZL11M117IRQHookv+0x18> + 8002cc34: 00008067 ret + 8002cc38: 0019f697 auipc a3,0x19f + 8002cc3c: 7a468693 addi a3,a3,1956 # 801cc3dc <_ZL8IRQCount> + 8002cc40: 0006c703 lbu a4,0(a3) + 8002cc44: fe0708e3 beqz a4,8002cc34 <_ZL11M117IRQHookv+0x14> + 8002cc48: fff7071b addiw a4,a4,-1 + 8002cc4c: 0ff77713 andi a4,a4,255 + 8002cc50: 00e68023 sb a4,0(a3) + 8002cc54: fe0710e3 bnez a4,8002cc34 <_ZL11M117IRQHookv+0x14> + 8002cc58: 00100713 li a4,1 + 8002cc5c: 00100513 li a0,1 + 8002cc60: 00e78023 sb a4,0(a5) + 8002cc64: 8d4d406f j 80000d38 <_Z14X6502_IRQBegini> + +000000008002cc68 <_ZL9M117Writejh>: + 8002cc68: 000087b7 lui a5,0x8 + 8002cc6c: 00378793 addi a5,a5,3 # 8003 <_entry_offset+0x8003> + 8002cc70: 08a7f463 bgeu a5,a0,8002ccf8 <_ZL9M117Writejh+0x90> + 8002cc74: ffff67b7 lui a5,0xffff6 + 8002cc78: 00a787bb addw a5,a5,a0 + 8002cc7c: 00700713 li a4,7 + 8002cc80: 02f77663 bgeu a4,a5,8002ccac <_ZL9M117Writejh+0x44> + 8002cc84: 0000c7b7 lui a5,0xc + 8002cc88: 00378713 addi a4,a5,3 # c003 <_entry_offset+0xc003> + 8002cc8c: 08e50263 beq a0,a4,8002cd10 <_ZL9M117Writejh+0xa8> + 8002cc90: 02a76a63 bltu a4,a0,8002ccc4 <_ZL9M117Writejh+0x5c> + 8002cc94: 00178713 addi a4,a5,1 + 8002cc98: 0ae50863 beq a0,a4,8002cd48 <_ZL9M117Writejh+0xe0> + 8002cc9c: 00278793 addi a5,a5,2 + 8002cca0: 0af51c63 bne a0,a5,8002cd58 <_ZL9M117Writejh+0xf0> + 8002cca4: 00100513 li a0,1 + 8002cca8: 8a8d406f j 80000d50 <_Z12X6502_IRQEndi> + 8002ccac: 00757513 andi a0,a0,7 + 8002ccb0: 0019f797 auipc a5,0x19f + 8002ccb4: 71878793 addi a5,a5,1816 # 801cc3c8 <_ZL6chrreg> + 8002ccb8: 00a78533 add a0,a5,a0 + 8002ccbc: 00b50023 sb a1,0(a0) # 8000 <_entry_offset+0x8000> + 8002ccc0: e65ff06f j 8002cb24 <_ZL4Syncv> + 8002ccc4: 0000d7b7 lui a5,0xd + 8002ccc8: 06f50863 beq a0,a5,8002cd38 <_ZL9M117Writejh+0xd0> + 8002cccc: 0000e7b7 lui a5,0xe + 8002ccd0: 08f51263 bne a0,a5,8002cd54 <_ZL9M117Writejh+0xec> + 8002ccd4: 0019f717 auipc a4,0x19f + 8002ccd8: 6ed70713 addi a4,a4,1773 # 801cc3c1 <_ZL4IRQa> + 8002ccdc: 00074783 lbu a5,0(a4) + 8002cce0: 0015f593 andi a1,a1,1 + 8002cce4: 00100513 li a0,1 + 8002cce8: ffe7f793 andi a5,a5,-2 + 8002ccec: 00b7e5b3 or a1,a5,a1 + 8002ccf0: 00b70023 sb a1,0(a4) + 8002ccf4: 85cd406f j 80000d50 <_Z12X6502_IRQEndi> + 8002ccf8: 00357513 andi a0,a0,3 + 8002ccfc: 0019f797 auipc a5,0x19f + 8002cd00: 6dc78793 addi a5,a5,1756 # 801cc3d8 <_ZL6prgreg> + 8002cd04: 00a78533 add a0,a5,a0 + 8002cd08: 00b50023 sb a1,0(a0) + 8002cd0c: e19ff06f j 8002cb24 <_ZL4Syncv> + 8002cd10: 0019f717 auipc a4,0x19f + 8002cd14: 6b170713 addi a4,a4,1713 # 801cc3c1 <_ZL4IRQa> + 8002cd18: 00074783 lbu a5,0(a4) + 8002cd1c: 0019f697 auipc a3,0x19f + 8002cd20: 6c16c683 lbu a3,1729(a3) # 801cc3dd <_ZL8IRQLatch> + 8002cd24: 0019f617 auipc a2,0x19f + 8002cd28: 6ad60c23 sb a3,1720(a2) # 801cc3dc <_ZL8IRQCount> + 8002cd2c: 0027e793 ori a5,a5,2 + 8002cd30: 00f70023 sb a5,0(a4) + 8002cd34: 00008067 ret + 8002cd38: 0015f593 andi a1,a1,1 + 8002cd3c: 0019f797 auipc a5,0x19f + 8002cd40: 68b78a23 sb a1,1684(a5) # 801cc3d0 <_ZL6mirror> + 8002cd44: 00008067 ret + 8002cd48: 0019f797 auipc a5,0x19f + 8002cd4c: 68b78aa3 sb a1,1685(a5) # 801cc3dd <_ZL8IRQLatch> + 8002cd50: 00008067 ret + 8002cd54: 00008067 ret + 8002cd58: 00008067 ret + +000000008002cd5c <_Z14Mapper117_InitP8CartInfo>: + 8002cd5c: 00000797 auipc a5,0x0 + 8002cd60: e6c78793 addi a5,a5,-404 # 8002cbc8 <_ZL9M117Powerv> + 8002cd64: 00f53023 sd a5,0(a0) + 8002cd68: 00000797 auipc a5,0x0 + 8002cd6c: eb878793 addi a5,a5,-328 # 8002cc20 <_ZL11M117IRQHookv> + 8002cd70: 001a0717 auipc a4,0x1a0 + 8002cd74: 94f73823 sd a5,-1712(a4) # 801cc6c0 + 8002cd78: 00000797 auipc a5,0x0 + 8002cd7c: e4c78793 addi a5,a5,-436 # 8002cbc4 <_ZL12StateRestorei> + 8002cd80: 00000693 li a3,0 + 8002cd84: 00000613 li a2,0 + 8002cd88: fff00593 li a1,-1 + 8002cd8c: 0001f517 auipc a0,0x1f + 8002cd90: f5450513 addi a0,a0,-172 # 8004bce0 <_ZL9StateRegs> + 8002cd94: 001a0717 auipc a4,0x1a0 + 8002cd98: 8cf73223 sd a5,-1852(a4) # 801cc658 + 8002cd9c: a74d306f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002cda0 <_ZL4Syncv>: + 8002cda0: fe010113 addi sp,sp,-32 + 8002cda4: 00813823 sd s0,16(sp) + 8002cda8: 0019f417 auipc s0,0x19f + 8002cdac: 64844403 lbu s0,1608(s0) # 801cc3f0 <_ZL4mirr> + 8002cdb0: fff44513 not a0,s0 + 8002cdb4: 000047b7 lui a5,0x4 + 8002cdb8: 00157513 andi a0,a0,1 + 8002cdbc: 00d41413 slli s0,s0,0xd + 8002cdc0: 00f47433 and s0,s0,a5 + 8002cdc4: 00113c23 sd ra,24(sp) + 8002cdc8: 00913423 sd s1,8(sp) + 8002cdcc: 01213023 sd s2,0(sp) + 8002cdd0: a78e40ef jal ra,80011048 <_Z9setmirrori> + 8002cdd4: 00000613 li a2,0 + 8002cdd8: 000065b7 lui a1,0x6 + 8002cddc: 01000513 li a0,16 + 8002cde0: b09e30ef jal ra,800108e8 <_Z8setprg8rijj> + 8002cde4: 0019f497 auipc s1,0x19f + 8002cde8: 61448493 addi s1,s1,1556 # 801cc3f8 <_ZL4preg> + 8002cdec: 0004c583 lbu a1,0(s1) + 8002cdf0: 00008537 lui a0,0x8 + 8002cdf4: 00856533 or a0,a0,s0 + 8002cdf8: ca5e30ef jal ra,80010a9c <_Z7setprg8jj> + 8002cdfc: 0014c583 lbu a1,1(s1) + 8002ce00: 0000a537 lui a0,0xa + 8002ce04: 0019f497 auipc s1,0x19f + 8002ce08: 5e448493 addi s1,s1,1508 # 801cc3e8 <_ZL4creg> + 8002ce0c: c91e30ef jal ra,80010a9c <_Z7setprg8jj> + 8002ce10: 0000c537 lui a0,0xc + 8002ce14: 00854533 xor a0,a0,s0 + 8002ce18: ffe00593 li a1,-2 + 8002ce1c: c81e30ef jal ra,80010a9c <_Z7setprg8jj> + 8002ce20: fff00593 li a1,-1 + 8002ce24: 0000e537 lui a0,0xe + 8002ce28: c75e30ef jal ra,80010a9c <_Z7setprg8jj> + 8002ce2c: 00000413 li s0,0 + 8002ce30: 00002937 lui s2,0x2 + 8002ce34: 0004c583 lbu a1,0(s1) + 8002ce38: 00040513 mv a0,s0 + 8002ce3c: 4004041b addiw s0,s0,1024 + 8002ce40: 864e40ef jal ra,80010ea4 <_Z7setchr1jj> + 8002ce44: 00148493 addi s1,s1,1 + 8002ce48: ff2416e3 bne s0,s2,8002ce34 <_ZL4Syncv+0x94> + 8002ce4c: 01813083 ld ra,24(sp) + 8002ce50: 01013403 ld s0,16(sp) + 8002ce54: 00813483 ld s1,8(sp) + 8002ce58: 00013903 ld s2,0(sp) + 8002ce5c: 02010113 addi sp,sp,32 + 8002ce60: 00008067 ret + +000000008002ce64 <_ZL12StateRestorei>: + 8002ce64: f3dff06f j 8002cda0 <_ZL4Syncv> + +000000008002ce68 <_ZL9M32Write3jh>: + 8002ce68: 00757793 andi a5,a0,7 + 8002ce6c: 0019f517 auipc a0,0x19f + 8002ce70: 57c50513 addi a0,a0,1404 # 801cc3e8 <_ZL4creg> + 8002ce74: 00f50533 add a0,a0,a5 + 8002ce78: 00b50023 sb a1,0(a0) + 8002ce7c: f25ff06f j 8002cda0 <_ZL4Syncv> + +000000008002ce80 <_ZL9M32Write2jh>: + 8002ce80: 0019f797 auipc a5,0x19f + 8002ce84: 56b78ca3 sb a1,1401(a5) # 801cc3f9 <_ZL4preg+0x1> + 8002ce88: f19ff06f j 8002cda0 <_ZL4Syncv> + +000000008002ce8c <_ZL9M32Write1jh>: + 8002ce8c: 0019f797 auipc a5,0x19f + 8002ce90: 56b78223 sb a1,1380(a5) # 801cc3f0 <_ZL4mirr> + 8002ce94: f0dff06f j 8002cda0 <_ZL4Syncv> + +000000008002ce98 <_ZL9M32Write0jh>: + 8002ce98: 0019f797 auipc a5,0x19f + 8002ce9c: 56b78023 sb a1,1376(a5) # 801cc3f8 <_ZL4preg> + 8002cea0: f01ff06f j 8002cda0 <_ZL4Syncv> + +000000008002cea4 <_ZL8M32Closev>: + 8002cea4: 0019f517 auipc a0,0x19f + 8002cea8: 53c53503 ld a0,1340(a0) # 801cc3e0 <_ZL4WRAM> + 8002ceac: 02050263 beqz a0,8002ced0 <_ZL8M32Closev+0x2c> + 8002ceb0: ff010113 addi sp,sp,-16 + 8002ceb4: 00113423 sd ra,8(sp) + 8002ceb8: e88e50ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002cebc: 00813083 ld ra,8(sp) + 8002cec0: 0019f797 auipc a5,0x19f + 8002cec4: 5207b023 sd zero,1312(a5) # 801cc3e0 <_ZL4WRAM> + 8002cec8: 01010113 addi sp,sp,16 + 8002cecc: 00008067 ret + 8002ced0: 0019f797 auipc a5,0x19f + 8002ced4: 5007b823 sd zero,1296(a5) # 801cc3e0 <_ZL4WRAM> + 8002ced8: 00008067 ret + +000000008002cedc <_ZL8M32Powerv>: + 8002cedc: ff010113 addi sp,sp,-16 + 8002cee0: 00113423 sd ra,8(sp) + 8002cee4: 00813023 sd s0,0(sp) + 8002cee8: eb9ff0ef jal ra,8002cda0 <_ZL4Syncv> + 8002ceec: 00008437 lui s0,0x8 + 8002cef0: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 8002cef4: fffe3617 auipc a2,0xfffe3 + 8002cef8: 76c60613 addi a2,a2,1900 # 80010660 <_Z6CartBRj> + 8002cefc: 00006537 lui a0,0x6 + 8002cf00: 31d060ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002cf04: fff40593 addi a1,s0,-1 + 8002cf08: fffe3617 auipc a2,0xfffe3 + 8002cf0c: 78460613 addi a2,a2,1924 # 8001068c <_Z6CartBWjh> + 8002cf10: 00006537 lui a0,0x6 + 8002cf14: 415060ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002cf18: 000105b7 lui a1,0x10 + 8002cf1c: fffe3617 auipc a2,0xfffe3 + 8002cf20: 74460613 addi a2,a2,1860 # 80010660 <_Z6CartBRj> + 8002cf24: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8002cf28: 00008537 lui a0,0x8 + 8002cf2c: 2f1060ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002cf30: 000095b7 lui a1,0x9 + 8002cf34: 00000617 auipc a2,0x0 + 8002cf38: f6460613 addi a2,a2,-156 # 8002ce98 <_ZL9M32Write0jh> + 8002cf3c: fff58593 addi a1,a1,-1 # 8fff <_entry_offset+0x8fff> + 8002cf40: 00008537 lui a0,0x8 + 8002cf44: 3e5060ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002cf48: 0000a5b7 lui a1,0xa + 8002cf4c: 00000617 auipc a2,0x0 + 8002cf50: f4060613 addi a2,a2,-192 # 8002ce8c <_ZL9M32Write1jh> + 8002cf54: fff58593 addi a1,a1,-1 # 9fff <_entry_offset+0x9fff> + 8002cf58: 00009537 lui a0,0x9 + 8002cf5c: 3cd060ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002cf60: 0000b5b7 lui a1,0xb + 8002cf64: 00000617 auipc a2,0x0 + 8002cf68: f1c60613 addi a2,a2,-228 # 8002ce80 <_ZL9M32Write2jh> + 8002cf6c: fff58593 addi a1,a1,-1 # afff <_entry_offset+0xafff> + 8002cf70: 0000a537 lui a0,0xa + 8002cf74: 3b5060ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002cf78: 0000c5b7 lui a1,0xc + 8002cf7c: 00000617 auipc a2,0x0 + 8002cf80: eec60613 addi a2,a2,-276 # 8002ce68 <_ZL9M32Write3jh> + 8002cf84: fff58593 addi a1,a1,-1 # bfff <_entry_offset+0xbfff> + 8002cf88: 0000b537 lui a0,0xb + 8002cf8c: 39d060ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002cf90: 00013403 ld s0,0(sp) + 8002cf94: 00813083 ld ra,8(sp) + 8002cf98: 0019f517 auipc a0,0x19f + 8002cf9c: 46452503 lw a0,1124(a0) # 801cc3fc <_ZL8WRAMSIZE> + 8002cfa0: 0019f617 auipc a2,0x19f + 8002cfa4: 44063603 ld a2,1088(a2) # 801cc3e0 <_ZL4WRAM> + 8002cfa8: 000065b7 lui a1,0x6 + 8002cfac: 00a5551b srliw a0,a0,0xa + 8002cfb0: 01010113 addi sp,sp,16 + 8002cfb4: 860d306f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +000000008002cfb8 <_Z13Mapper32_InitP8CartInfo>: + 8002cfb8: fe010113 addi sp,sp,-32 + 8002cfbc: 00113c23 sd ra,24(sp) + 8002cfc0: 00813823 sd s0,16(sp) + 8002cfc4: 00913423 sd s1,8(sp) + 8002cfc8: 00000797 auipc a5,0x0 + 8002cfcc: f1478793 addi a5,a5,-236 # 8002cedc <_ZL8M32Powerv> + 8002cfd0: 00f53023 sd a5,0(a0) + 8002cfd4: 00000797 auipc a5,0x0 + 8002cfd8: ed078793 addi a5,a5,-304 # 8002cea4 <_ZL8M32Closev> + 8002cfdc: 00f53823 sd a5,16(a0) + 8002cfe0: 00000797 auipc a5,0x0 + 8002cfe4: e8478793 addi a5,a5,-380 # 8002ce64 <_ZL12StateRestorei> + 8002cfe8: 0019f417 auipc s0,0x19f + 8002cfec: 41440413 addi s0,s0,1044 # 801cc3fc <_ZL8WRAMSIZE> + 8002cff0: 0019f717 auipc a4,0x19f + 8002cff4: 66f73423 sd a5,1640(a4) # 801cc658 + 8002cff8: 00002537 lui a0,0x2 + 8002cffc: 000027b7 lui a5,0x2 + 8002d000: 00f42023 sw a5,0(s0) + 8002d004: c68e50ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002d008: 00042603 lw a2,0(s0) + 8002d00c: 00050593 mv a1,a0 + 8002d010: 0019f497 auipc s1,0x19f + 8002d014: 3d048493 addi s1,s1,976 # 801cc3e0 <_ZL4WRAM> + 8002d018: 00100693 li a3,1 + 8002d01c: 01000513 li a0,16 + 8002d020: 00b4b023 sd a1,0(s1) + 8002d024: cd0e30ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8002d028: 00042583 lw a1,0(s0) + 8002d02c: 0004b503 ld a0,0(s1) + 8002d030: 00018697 auipc a3,0x18 + 8002d034: 2f868693 addi a3,a3,760 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 8002d038: 00000613 li a2,0 + 8002d03c: fd5d20ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002d040: 01013403 ld s0,16(sp) + 8002d044: 01813083 ld ra,24(sp) + 8002d048: 00813483 ld s1,8(sp) + 8002d04c: 00000693 li a3,0 + 8002d050: 00000613 li a2,0 + 8002d054: fff00593 li a1,-1 + 8002d058: 0001f517 auipc a0,0x1f + 8002d05c: d3050513 addi a0,a0,-720 # 8004bd88 <_ZL9StateRegs> + 8002d060: 02010113 addi sp,sp,32 + 8002d064: fadd206f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002d068 <_ZL4Syncv>: + 8002d068: ff010113 addi sp,sp,-16 + 8002d06c: 0019f597 auipc a1,0x19f + 8002d070: 3945c583 lbu a1,916(a1) # 801cc400 <_ZL3reg> + 8002d074: 00006537 lui a0,0x6 + 8002d078: 00113423 sd ra,8(sp) + 8002d07c: a21e30ef jal ra,80010a9c <_Z7setprg8jj> + 8002d080: 00008537 lui a0,0x8 + 8002d084: 00200593 li a1,2 + 8002d088: d8de30ef jal ra,80010e14 <_Z8setprg32jj> + 8002d08c: 00813083 ld ra,8(sp) + 8002d090: 00000513 li a0,0 + 8002d094: 01010113 addi sp,sp,16 + 8002d098: e6de306f j 80010f04 <_Z7setchr8j> + +000000008002d09c <_ZL12StateRestorei>: + 8002d09c: fcdff06f j 8002d068 <_ZL4Syncv> + +000000008002d0a0 <_ZL9M120Writejh>: + 8002d0a0: 000047b7 lui a5,0x4 + 8002d0a4: 1ff78793 addi a5,a5,511 # 41ff <_entry_offset+0x41ff> + 8002d0a8: 00f50463 beq a0,a5,8002d0b0 <_ZL9M120Writejh+0x10> + 8002d0ac: 00008067 ret + 8002d0b0: 0075f593 andi a1,a1,7 + 8002d0b4: 0019f797 auipc a5,0x19f + 8002d0b8: 34b78623 sb a1,844(a5) # 801cc400 <_ZL3reg> + 8002d0bc: fadff06f j 8002d068 <_ZL4Syncv> + +000000008002d0c0 <_ZL9M120Powerv>: + 8002d0c0: ff010113 addi sp,sp,-16 + 8002d0c4: 00113423 sd ra,8(sp) + 8002d0c8: 0019f797 auipc a5,0x19f + 8002d0cc: 32078c23 sb zero,824(a5) # 801cc400 <_ZL3reg> + 8002d0d0: f99ff0ef jal ra,8002d068 <_ZL4Syncv> + 8002d0d4: 000105b7 lui a1,0x10 + 8002d0d8: fffe3617 auipc a2,0xfffe3 + 8002d0dc: 58860613 addi a2,a2,1416 # 80010660 <_Z6CartBRj> + 8002d0e0: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8002d0e4: 00006537 lui a0,0x6 + 8002d0e8: 135060ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002d0ec: 00813083 ld ra,8(sp) + 8002d0f0: 000065b7 lui a1,0x6 + 8002d0f4: 00004537 lui a0,0x4 + 8002d0f8: 00000617 auipc a2,0x0 + 8002d0fc: fa860613 addi a2,a2,-88 # 8002d0a0 <_ZL9M120Writejh> + 8002d100: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 8002d104: 10050513 addi a0,a0,256 # 4100 <_entry_offset+0x4100> + 8002d108: 01010113 addi sp,sp,16 + 8002d10c: 21d0606f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002d110 <_Z14Mapper120_InitP8CartInfo>: + 8002d110: 00000797 auipc a5,0x0 + 8002d114: fb078793 addi a5,a5,-80 # 8002d0c0 <_ZL9M120Powerv> + 8002d118: 00f53023 sd a5,0(a0) + 8002d11c: 00000797 auipc a5,0x0 + 8002d120: f8078793 addi a5,a5,-128 # 8002d09c <_ZL12StateRestorei> + 8002d124: 00000693 li a3,0 + 8002d128: 00000613 li a2,0 + 8002d12c: fff00593 li a1,-1 + 8002d130: 0001f517 auipc a0,0x1f + 8002d134: cb850513 addi a0,a0,-840 # 8004bde8 <_ZL9StateRegs> + 8002d138: 0019f717 auipc a4,0x19f + 8002d13c: 52f73023 sd a5,1312(a4) # 801cc658 + 8002d140: ed1d206f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002d144 <_ZL4Syncv>: + 8002d144: ff010113 addi sp,sp,-16 + 8002d148: 00000613 li a2,0 + 8002d14c: 000065b7 lui a1,0x6 + 8002d150: 01000513 li a0,16 + 8002d154: 00113423 sd ra,8(sp) + 8002d158: 00813023 sd s0,0(sp) + 8002d15c: f8ce30ef jal ra,800108e8 <_Z8setprg8rijj> + 8002d160: 0019f417 auipc s0,0x19f + 8002d164: 2b040413 addi s0,s0,688 # 801cc410 <_ZL4regs> + 8002d168: 00044583 lbu a1,0(s0) + 8002d16c: 00008537 lui a0,0x8 + 8002d170: ca5e30ef jal ra,80010e14 <_Z8setprg32jj> + 8002d174: 00144583 lbu a1,1(s0) + 8002d178: 00000513 li a0,0 + 8002d17c: d69e30ef jal ra,80010ee4 <_Z7setchr4jj> + 8002d180: 00244583 lbu a1,2(s0) + 8002d184: 00013403 ld s0,0(sp) + 8002d188: 00813083 ld ra,8(sp) + 8002d18c: 00001537 lui a0,0x1 + 8002d190: 01010113 addi sp,sp,16 + 8002d194: d51e306f j 80010ee4 <_Z7setchr4jj> + +000000008002d198 <_ZL12StateRestorei>: + 8002d198: fadff06f j 8002d144 <_ZL4Syncv> + +000000008002d19c <_ZL8M34Writejh>: + 8002d19c: 000087b7 lui a5,0x8 + 8002d1a0: 02f57063 bgeu a0,a5,8002d1c0 <_ZL8M34Writejh+0x24> + 8002d1a4: ffe78713 addi a4,a5,-2 # 7ffe <_entry_offset+0x7ffe> + 8002d1a8: 02e50863 beq a0,a4,8002d1d8 <_ZL8M34Writejh+0x3c> + 8002d1ac: fff78713 addi a4,a5,-1 + 8002d1b0: 00e50e63 beq a0,a4,8002d1cc <_ZL8M34Writejh+0x30> + 8002d1b4: ffd78793 addi a5,a5,-3 + 8002d1b8: 00f50463 beq a0,a5,8002d1c0 <_ZL8M34Writejh+0x24> + 8002d1bc: f89ff06f j 8002d144 <_ZL4Syncv> + 8002d1c0: 0019f797 auipc a5,0x19f + 8002d1c4: 24b78823 sb a1,592(a5) # 801cc410 <_ZL4regs> + 8002d1c8: f7dff06f j 8002d144 <_ZL4Syncv> + 8002d1cc: 0019f797 auipc a5,0x19f + 8002d1d0: 24b78323 sb a1,582(a5) # 801cc412 <_ZL4regs+0x2> + 8002d1d4: f71ff06f j 8002d144 <_ZL4Syncv> + 8002d1d8: 0019f797 auipc a5,0x19f + 8002d1dc: 22b78ca3 sb a1,569(a5) # 801cc411 <_ZL4regs+0x1> + 8002d1e0: f65ff06f j 8002d144 <_ZL4Syncv> + +000000008002d1e4 <_ZL8M34Closev>: + 8002d1e4: 0019f517 auipc a0,0x19f + 8002d1e8: 22453503 ld a0,548(a0) # 801cc408 <_ZL4WRAM> + 8002d1ec: 02050263 beqz a0,8002d210 <_ZL8M34Closev+0x2c> + 8002d1f0: ff010113 addi sp,sp,-16 + 8002d1f4: 00113423 sd ra,8(sp) + 8002d1f8: b48e50ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002d1fc: 00813083 ld ra,8(sp) + 8002d200: 0019f797 auipc a5,0x19f + 8002d204: 2007b423 sd zero,520(a5) # 801cc408 <_ZL4WRAM> + 8002d208: 01010113 addi sp,sp,16 + 8002d20c: 00008067 ret + 8002d210: 0019f797 auipc a5,0x19f + 8002d214: 1e07bc23 sd zero,504(a5) # 801cc408 <_ZL4WRAM> + 8002d218: 00008067 ret + +000000008002d21c <_ZL8M34Powerv>: + 8002d21c: fe010113 addi sp,sp,-32 + 8002d220: 00113c23 sd ra,24(sp) + 8002d224: 00813823 sd s0,16(sp) + 8002d228: 00913423 sd s1,8(sp) + 8002d22c: 0019f797 auipc a5,0x19f + 8002d230: 1e478793 addi a5,a5,484 # 801cc410 <_ZL4regs> + 8002d234: 00100713 li a4,1 + 8002d238: 00079023 sh zero,0(a5) + 8002d23c: 00e78123 sb a4,2(a5) + 8002d240: 00008437 lui s0,0x8 + 8002d244: f01ff0ef jal ra,8002d144 <_ZL4Syncv> + 8002d248: ffc40593 addi a1,s0,-4 # 7ffc <_entry_offset+0x7ffc> + 8002d24c: fffe3617 auipc a2,0xfffe3 + 8002d250: 41460613 addi a2,a2,1044 # 80010660 <_Z6CartBRj> + 8002d254: 00006537 lui a0,0x6 + 8002d258: 7c4060ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002d25c: ffc40593 addi a1,s0,-4 + 8002d260: fffe3617 auipc a2,0xfffe3 + 8002d264: 42c60613 addi a2,a2,1068 # 8001068c <_Z6CartBWjh> + 8002d268: 00006537 lui a0,0x6 + 8002d26c: 0bd060ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002d270: 000104b7 lui s1,0x10 + 8002d274: fff48593 addi a1,s1,-1 # ffff <_entry_offset+0xffff> + 8002d278: fffe3617 auipc a2,0xfffe3 + 8002d27c: 3e860613 addi a2,a2,1000 # 80010660 <_Z6CartBRj> + 8002d280: 00008537 lui a0,0x8 + 8002d284: 798060ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002d288: fff48593 addi a1,s1,-1 + 8002d28c: ffd40513 addi a0,s0,-3 + 8002d290: 00000617 auipc a2,0x0 + 8002d294: f0c60613 addi a2,a2,-244 # 8002d19c <_ZL8M34Writejh> + 8002d298: 091060ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002d29c: 01013403 ld s0,16(sp) + 8002d2a0: 01813083 ld ra,24(sp) + 8002d2a4: 00813483 ld s1,8(sp) + 8002d2a8: 0019f517 auipc a0,0x19f + 8002d2ac: 16c52503 lw a0,364(a0) # 801cc414 <_ZL8WRAMSIZE> + 8002d2b0: 0019f617 auipc a2,0x19f + 8002d2b4: 15863603 ld a2,344(a2) # 801cc408 <_ZL4WRAM> + 8002d2b8: 000065b7 lui a1,0x6 + 8002d2bc: 00a5551b srliw a0,a0,0xa + 8002d2c0: 02010113 addi sp,sp,32 + 8002d2c4: d51d206f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +000000008002d2c8 <_Z13Mapper34_InitP8CartInfo>: + 8002d2c8: fe010113 addi sp,sp,-32 + 8002d2cc: 00113c23 sd ra,24(sp) + 8002d2d0: 00813823 sd s0,16(sp) + 8002d2d4: 00913423 sd s1,8(sp) + 8002d2d8: 00000797 auipc a5,0x0 + 8002d2dc: f4478793 addi a5,a5,-188 # 8002d21c <_ZL8M34Powerv> + 8002d2e0: 00f53023 sd a5,0(a0) + 8002d2e4: 00000797 auipc a5,0x0 + 8002d2e8: f0078793 addi a5,a5,-256 # 8002d1e4 <_ZL8M34Closev> + 8002d2ec: 00f53823 sd a5,16(a0) + 8002d2f0: 00000797 auipc a5,0x0 + 8002d2f4: ea878793 addi a5,a5,-344 # 8002d198 <_ZL12StateRestorei> + 8002d2f8: 0019f417 auipc s0,0x19f + 8002d2fc: 11c40413 addi s0,s0,284 # 801cc414 <_ZL8WRAMSIZE> + 8002d300: 0019f717 auipc a4,0x19f + 8002d304: 34f73c23 sd a5,856(a4) # 801cc658 + 8002d308: 00002537 lui a0,0x2 + 8002d30c: 000027b7 lui a5,0x2 + 8002d310: 00f42023 sw a5,0(s0) + 8002d314: 958e50ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002d318: 00042603 lw a2,0(s0) + 8002d31c: 00050593 mv a1,a0 + 8002d320: 0019f497 auipc s1,0x19f + 8002d324: 0e848493 addi s1,s1,232 # 801cc408 <_ZL4WRAM> + 8002d328: 00100693 li a3,1 + 8002d32c: 01000513 li a0,16 + 8002d330: 00b4b023 sd a1,0(s1) + 8002d334: 9c0e30ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8002d338: 00042583 lw a1,0(s0) + 8002d33c: 0004b503 ld a0,0(s1) + 8002d340: 00018697 auipc a3,0x18 + 8002d344: fe868693 addi a3,a3,-24 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 8002d348: 00000613 li a2,0 + 8002d34c: cc5d20ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002d350: 01013403 ld s0,16(sp) + 8002d354: 01813083 ld ra,24(sp) + 8002d358: 00813483 ld s1,8(sp) + 8002d35c: 00000693 li a3,0 + 8002d360: 00000613 li a2,0 + 8002d364: fff00593 li a1,-1 + 8002d368: 0001f517 auipc a0,0x1f + 8002d36c: ab050513 addi a0,a0,-1360 # 8004be18 <_ZL9StateRegs> + 8002d370: 02010113 addi sp,sp,32 + 8002d374: c9dd206f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002d378 <_ZL8M43Resetv>: + 8002d378: 00008067 ret + +000000008002d37c <_ZL4Syncv>: + 8002d37c: ff010113 addi sp,sp,-16 + 8002d380: 01000593 li a1,16 + 8002d384: 00005537 lui a0,0x5 + 8002d388: 00113423 sd ra,8(sp) + 8002d38c: 00813023 sd s0,0(sp) + 8002d390: d48e30ef jal ra,800108d8 <_Z7setprg4jj> + 8002d394: 0019f417 auipc s0,0x19f + 8002d398: 08c40413 addi s0,s0,140 # 801cc420 <_ZL4swap> + 8002d39c: 00044583 lbu a1,0(s0) + 8002d3a0: 00006537 lui a0,0x6 + 8002d3a4: 0015b593 seqz a1,a1 + 8002d3a8: 00159593 slli a1,a1,0x1 + 8002d3ac: ef0e30ef jal ra,80010a9c <_Z7setprg8jj> + 8002d3b0: 00100593 li a1,1 + 8002d3b4: 00008537 lui a0,0x8 + 8002d3b8: ee4e30ef jal ra,80010a9c <_Z7setprg8jj> + 8002d3bc: 00000593 li a1,0 + 8002d3c0: 0000a537 lui a0,0xa + 8002d3c4: ed8e30ef jal ra,80010a9c <_Z7setprg8jj> + 8002d3c8: 0019f597 auipc a1,0x19f + 8002d3cc: 0505c583 lbu a1,80(a1) # 801cc418 <_ZL3reg> + 8002d3d0: 0000c537 lui a0,0xc + 8002d3d4: ec8e30ef jal ra,80010a9c <_Z7setprg8jj> + 8002d3d8: 00044583 lbu a1,0(s0) + 8002d3dc: 0000e537 lui a0,0xe + 8002d3e0: 0015b593 seqz a1,a1 + 8002d3e4: 00858593 addi a1,a1,8 + 8002d3e8: eb4e30ef jal ra,80010a9c <_Z7setprg8jj> + 8002d3ec: 00013403 ld s0,0(sp) + 8002d3f0: 00813083 ld ra,8(sp) + 8002d3f4: 00000513 li a0,0 + 8002d3f8: 01010113 addi sp,sp,16 + 8002d3fc: b09e306f j 80010f04 <_Z7setchr8j> + +000000008002d400 <_ZL12StateRestorei>: + 8002d400: f7dff06f j 8002d37c <_ZL4Syncv> + +000000008002d404 <_ZL8M43Powerv>: + 8002d404: ff010113 addi sp,sp,-16 + 8002d408: 00113423 sd ra,8(sp) + 8002d40c: 00813023 sd s0,0(sp) + 8002d410: 0019f797 auipc a5,0x19f + 8002d414: 00078823 sb zero,16(a5) # 801cc420 <_ZL4swap> + 8002d418: 00010437 lui s0,0x10 + 8002d41c: 0019f797 auipc a5,0x19f + 8002d420: fe078e23 sb zero,-4(a5) # 801cc418 <_ZL3reg> + 8002d424: f59ff0ef jal ra,8002d37c <_ZL4Syncv> + 8002d428: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002d42c: fffe3617 auipc a2,0xfffe3 + 8002d430: 23460613 addi a2,a2,564 # 80010660 <_Z6CartBRj> + 8002d434: 00005537 lui a0,0x5 + 8002d438: 5e4060ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002d43c: fff40593 addi a1,s0,-1 + 8002d440: 00013403 ld s0,0(sp) + 8002d444: 00813083 ld ra,8(sp) + 8002d448: 00004537 lui a0,0x4 + 8002d44c: 00000617 auipc a2,0x0 + 8002d450: 05060613 addi a2,a2,80 # 8002d49c <_ZL8M43Writejh> + 8002d454: 02050513 addi a0,a0,32 # 4020 <_entry_offset+0x4020> + 8002d458: 01010113 addi sp,sp,16 + 8002d45c: 6cc0606f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002d460 <_ZL10M43IRQHooki>: + 8002d460: 0019f717 auipc a4,0x19f + 8002d464: fc470713 addi a4,a4,-60 # 801cc424 <_ZL8IRQCount> + 8002d468: 00072783 lw a5,0(a4) + 8002d46c: 0019f697 auipc a3,0x19f + 8002d470: fb06a683 lw a3,-80(a3) # 801cc41c <_ZL4IRQa> + 8002d474: 00a7853b addw a0,a5,a0 + 8002d478: 00a72023 sw a0,0(a4) + 8002d47c: 00068663 beqz a3,8002d488 <_ZL10M43IRQHooki+0x28> + 8002d480: 000017b7 lui a5,0x1 + 8002d484: 00f57463 bgeu a0,a5,8002d48c <_ZL10M43IRQHooki+0x2c> + 8002d488: 00008067 ret + 8002d48c: 00100513 li a0,1 + 8002d490: 0019f797 auipc a5,0x19f + 8002d494: f807a623 sw zero,-116(a5) # 801cc41c <_ZL4IRQa> + 8002d498: 8a1d306f j 80000d38 <_Z14X6502_IRQBegini> + +000000008002d49c <_ZL8M43Writejh>: + 8002d49c: 00300793 li a5,3 + 8002d4a0: 02079793 slli a5,a5,0x20 + 8002d4a4: fd010113 addi sp,sp,-48 + 8002d4a8: 00478813 addi a6,a5,4 + 8002d4ac: 00578613 addi a2,a5,5 + 8002d4b0: 00678693 addi a3,a5,6 + 8002d4b4: 00778793 addi a5,a5,7 + 8002d4b8: 00f13c23 sd a5,24(sp) + 8002d4bc: 0000f7b7 lui a5,0xf + 8002d4c0: 1ff78793 addi a5,a5,511 # f1ff <_entry_offset+0xf1ff> + 8002d4c4: 00004737 lui a4,0x4 + 8002d4c8: 00f57533 and a0,a0,a5 + 8002d4cc: 02113423 sd ra,40(sp) + 8002d4d0: 01013023 sd a6,0(sp) + 8002d4d4: 00c13423 sd a2,8(sp) + 8002d4d8: 00d13823 sd a3,16(sp) + 8002d4dc: 12070793 addi a5,a4,288 # 4120 <_entry_offset+0x4120> + 8002d4e0: 06f50263 beq a0,a5,8002d544 <_ZL8M43Writejh+0xa8> + 8002d4e4: 02a7ea63 bltu a5,a0,8002d518 <_ZL8M43Writejh+0x7c> + 8002d4e8: 02270713 addi a4,a4,34 + 8002d4ec: 04e51663 bne a0,a4,8002d538 <_ZL8M43Writejh+0x9c> + 8002d4f0: 0075f593 andi a1,a1,7 + 8002d4f4: 02010793 addi a5,sp,32 + 8002d4f8: 00259593 slli a1,a1,0x2 + 8002d4fc: 00b785b3 add a1,a5,a1 + 8002d500: fe05a783 lw a5,-32(a1) + 8002d504: 02813083 ld ra,40(sp) + 8002d508: 0019f717 auipc a4,0x19f + 8002d50c: f0f70823 sb a5,-240(a4) # 801cc418 <_ZL3reg> + 8002d510: 03010113 addi sp,sp,48 + 8002d514: e69ff06f j 8002d37c <_ZL4Syncv> + 8002d518: ffffc7b7 lui a5,0xffffc + 8002d51c: ede7879b addiw a5,a5,-290 + 8002d520: 00f5053b addw a0,a0,a5 + 8002d524: ffffc7b7 lui a5,0xffffc + 8002d528: fff78793 addi a5,a5,-1 # ffffffffffffbfff <_end+0xffffffff7fe26fff> + 8002d52c: 00f57533 and a0,a0,a5 + 8002d530: 0005051b sext.w a0,a0 + 8002d534: 02050463 beqz a0,8002d55c <_ZL8M43Writejh+0xc0> + 8002d538: 02813083 ld ra,40(sp) + 8002d53c: 03010113 addi sp,sp,48 + 8002d540: 00008067 ret + 8002d544: 02813083 ld ra,40(sp) + 8002d548: 0015f593 andi a1,a1,1 + 8002d54c: 0019f797 auipc a5,0x19f + 8002d550: ecb78a23 sb a1,-300(a5) # 801cc420 <_ZL4swap> + 8002d554: 03010113 addi sp,sp,48 + 8002d558: e25ff06f j 8002d37c <_ZL4Syncv> + 8002d55c: 0015f593 andi a1,a1,1 + 8002d560: 00100513 li a0,1 + 8002d564: 0019f797 auipc a5,0x19f + 8002d568: eab7ac23 sw a1,-328(a5) # 801cc41c <_ZL4IRQa> + 8002d56c: fe4d30ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8002d570: 02813083 ld ra,40(sp) + 8002d574: 0019f797 auipc a5,0x19f + 8002d578: ea07a823 sw zero,-336(a5) # 801cc424 <_ZL8IRQCount> + 8002d57c: 03010113 addi sp,sp,48 + 8002d580: 00008067 ret + +000000008002d584 <_Z13Mapper43_InitP8CartInfo>: + 8002d584: 00000797 auipc a5,0x0 + 8002d588: e8078793 addi a5,a5,-384 # 8002d404 <_ZL8M43Powerv> + 8002d58c: 00f53023 sd a5,0(a0) + 8002d590: 00000797 auipc a5,0x0 + 8002d594: de878793 addi a5,a5,-536 # 8002d378 <_ZL8M43Resetv> + 8002d598: 00f53423 sd a5,8(a0) + 8002d59c: 00000797 auipc a5,0x0 + 8002d5a0: ec478793 addi a5,a5,-316 # 8002d460 <_ZL10M43IRQHooki> + 8002d5a4: 0019e717 auipc a4,0x19e + 8002d5a8: 58f73e23 sd a5,1436(a4) # 801cbb40 + 8002d5ac: 00000797 auipc a5,0x0 + 8002d5b0: e5478793 addi a5,a5,-428 # 8002d400 <_ZL12StateRestorei> + 8002d5b4: 00000693 li a3,0 + 8002d5b8: 00000613 li a2,0 + 8002d5bc: fff00593 li a1,-1 + 8002d5c0: 0001f517 auipc a0,0x1f + 8002d5c4: 88850513 addi a0,a0,-1912 # 8004be48 <_ZL9StateRegs> + 8002d5c8: 0019f717 auipc a4,0x19f + 8002d5cc: 08f73823 sd a5,144(a4) # 801cc658 + 8002d5d0: a41d206f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002d5d4 <_ZL4Syncv>: + 8002d5d4: ff010113 addi sp,sp,-16 + 8002d5d8: 00813023 sd s0,0(sp) + 8002d5dc: 0019f417 auipc s0,0x19f + 8002d5e0: e5c40413 addi s0,s0,-420 # 801cc438 <_ZL6latche> + 8002d5e4: 00044583 lbu a1,0(s0) + 8002d5e8: 00008537 lui a0,0x8 + 8002d5ec: 00113423 sd ra,8(sp) + 8002d5f0: 0075f593 andi a1,a1,7 + 8002d5f4: 821e30ef jal ra,80010e14 <_Z8setprg32jj> + 8002d5f8: 00044583 lbu a1,0(s0) + 8002d5fc: 00000513 li a0,0 + 8002d600: 0045d593 srli a1,a1,0x4 + 8002d604: 8c1e30ef jal ra,80010ec4 <_Z7setchr2jj> + 8002d608: 000015b7 lui a1,0x1 + 8002d60c: 00200613 li a2,2 + 8002d610: 80058593 addi a1,a1,-2048 # 800 <_entry_offset+0x800> + 8002d614: 01000513 li a0,16 + 8002d618: 82de30ef jal ra,80010e44 <_Z8setchr2rijj> + 8002d61c: 00013403 ld s0,0(sp) + 8002d620: 00813083 ld ra,8(sp) + 8002d624: 00000613 li a2,0 + 8002d628: 000015b7 lui a1,0x1 + 8002d62c: 01000513 li a0,16 + 8002d630: 01010113 addi sp,sp,16 + 8002d634: 831e306f j 80010e64 <_Z8setchr4rijj> + +000000008002d638 <_ZL12StateRestorei>: + 8002d638: f9dff06f j 8002d5d4 <_ZL4Syncv> + +000000008002d63c <_ZL8M77Writejh>: + 8002d63c: 0019f797 auipc a5,0x19f + 8002d640: deb78e23 sb a1,-516(a5) # 801cc438 <_ZL6latche> + 8002d644: f91ff06f j 8002d5d4 <_ZL4Syncv> + +000000008002d648 <_ZL8M77Closev>: + 8002d648: 0019f517 auipc a0,0x19f + 8002d64c: de853503 ld a0,-536(a0) # 801cc430 <_ZL6CHRRAM> + 8002d650: 02050263 beqz a0,8002d674 <_ZL8M77Closev+0x2c> + 8002d654: ff010113 addi sp,sp,-16 + 8002d658: 00113423 sd ra,8(sp) + 8002d65c: ee5e40ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002d660: 00813083 ld ra,8(sp) + 8002d664: 0019f797 auipc a5,0x19f + 8002d668: dc07b623 sd zero,-564(a5) # 801cc430 <_ZL6CHRRAM> + 8002d66c: 01010113 addi sp,sp,16 + 8002d670: 00008067 ret + 8002d674: 0019f797 auipc a5,0x19f + 8002d678: da07be23 sd zero,-580(a5) # 801cc430 <_ZL6CHRRAM> + 8002d67c: 00008067 ret + +000000008002d680 <_ZL8M77Powerv>: + 8002d680: ff010113 addi sp,sp,-16 + 8002d684: 00113423 sd ra,8(sp) + 8002d688: 00813023 sd s0,0(sp) + 8002d68c: 0019f797 auipc a5,0x19f + 8002d690: da078623 sb zero,-596(a5) # 801cc438 <_ZL6latche> + 8002d694: 00010437 lui s0,0x10 + 8002d698: f3dff0ef jal ra,8002d5d4 <_ZL4Syncv> + 8002d69c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002d6a0: fffe3617 auipc a2,0xfffe3 + 8002d6a4: fc060613 addi a2,a2,-64 # 80010660 <_Z6CartBRj> + 8002d6a8: 00008537 lui a0,0x8 + 8002d6ac: 370060ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002d6b0: fff40593 addi a1,s0,-1 + 8002d6b4: 00013403 ld s0,0(sp) + 8002d6b8: 00813083 ld ra,8(sp) + 8002d6bc: 00000617 auipc a2,0x0 + 8002d6c0: f8060613 addi a2,a2,-128 # 8002d63c <_ZL8M77Writejh> + 8002d6c4: 00008537 lui a0,0x8 + 8002d6c8: 01010113 addi sp,sp,16 + 8002d6cc: 45c0606f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002d6d0 <_Z13Mapper77_InitP8CartInfo>: + 8002d6d0: fe010113 addi sp,sp,-32 + 8002d6d4: 00113c23 sd ra,24(sp) + 8002d6d8: 00813823 sd s0,16(sp) + 8002d6dc: 00913423 sd s1,8(sp) + 8002d6e0: 00000797 auipc a5,0x0 + 8002d6e4: fa078793 addi a5,a5,-96 # 8002d680 <_ZL8M77Powerv> + 8002d6e8: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 8002d6ec: 00000797 auipc a5,0x0 + 8002d6f0: f5c78793 addi a5,a5,-164 # 8002d648 <_ZL8M77Closev> + 8002d6f4: 00f53823 sd a5,16(a0) + 8002d6f8: 00000797 auipc a5,0x0 + 8002d6fc: f4078793 addi a5,a5,-192 # 8002d638 <_ZL12StateRestorei> + 8002d700: 0019f717 auipc a4,0x19f + 8002d704: f4f73c23 sd a5,-168(a4) # 801cc658 + 8002d708: 00002537 lui a0,0x2 + 8002d70c: 000027b7 lui a5,0x2 + 8002d710: 0019f417 auipc s0,0x19f + 8002d714: d1840413 addi s0,s0,-744 # 801cc428 <_ZL10CHRRAMSIZE> + 8002d718: 8007879b addiw a5,a5,-2048 + 8002d71c: 80050513 addi a0,a0,-2048 # 1800 <_entry_offset+0x1800> + 8002d720: 00f42023 sw a5,0(s0) + 8002d724: d49e40ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002d728: 00042603 lw a2,0(s0) + 8002d72c: 00050593 mv a1,a0 + 8002d730: 0019f497 auipc s1,0x19f + 8002d734: d0048493 addi s1,s1,-768 # 801cc430 <_ZL6CHRRAM> + 8002d738: 00100693 li a3,1 + 8002d73c: 01000513 li a0,16 + 8002d740: 00b4b023 sd a1,0(s1) + 8002d744: e81e20ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 8002d748: 00042583 lw a1,0(s0) + 8002d74c: 0004b503 ld a0,0(s1) + 8002d750: 00018697 auipc a3,0x18 + 8002d754: f2868693 addi a3,a3,-216 # 80045678 <_ZL10prot_array+0x10> + 8002d758: 00000613 li a2,0 + 8002d75c: 8b5d20ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002d760: 01013403 ld s0,16(sp) + 8002d764: 01813083 ld ra,24(sp) + 8002d768: 00813483 ld s1,8(sp) + 8002d76c: 00000693 li a3,0 + 8002d770: 00000613 li a2,0 + 8002d774: fff00593 li a1,-1 + 8002d778: 0001e517 auipc a0,0x1e + 8002d77c: 74850513 addi a0,a0,1864 # 8004bec0 <_ZL9StateRegs> + 8002d780: 02010113 addi sp,sp,32 + 8002d784: 88dd206f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002d788 <_ZL4Syncv>: + 8002d788: 0019f517 auipc a0,0x19f + 8002d78c: cc954503 lbu a0,-823(a0) # 801cc451 <_ZL6mirror> + 8002d790: fd010113 addi sp,sp,-48 + 8002d794: 00154513 xori a0,a0,1 + 8002d798: 02113423 sd ra,40(sp) + 8002d79c: 02813023 sd s0,32(sp) + 8002d7a0: 00913c23 sd s1,24(sp) + 8002d7a4: 01213823 sd s2,16(sp) + 8002d7a8: 01313423 sd s3,8(sp) + 8002d7ac: 0019f417 auipc s0,0x19f + 8002d7b0: c9440413 addi s0,s0,-876 # 801cc440 <_ZL3reg> + 8002d7b4: 895e30ef jal ra,80011048 <_Z9setmirrori> + 8002d7b8: 00044583 lbu a1,0(s0) + 8002d7bc: 00008537 lui a0,0x8 + 8002d7c0: 000019b7 lui s3,0x1 + 8002d7c4: ad8e30ef jal ra,80010a9c <_Z7setprg8jj> + 8002d7c8: 00144583 lbu a1,1(s0) + 8002d7cc: 0000a537 lui a0,0xa + 8002d7d0: 0019f917 auipc s2,0x19f + 8002d7d4: c8090913 addi s2,s2,-896 # 801cc450 <_ZL4bank> + 8002d7d8: ac4e30ef jal ra,80010a9c <_Z7setprg8jj> + 8002d7dc: 00244583 lbu a1,2(s0) + 8002d7e0: 00000513 li a0,0 + 8002d7e4: 000024b7 lui s1,0x2 + 8002d7e8: 0015d593 srli a1,a1,0x1 + 8002d7ec: ed8e30ef jal ra,80010ec4 <_Z7setchr2jj> + 8002d7f0: 00344583 lbu a1,3(s0) + 8002d7f4: 80098513 addi a0,s3,-2048 # 800 <_entry_offset+0x800> + 8002d7f8: 0015d593 srli a1,a1,0x1 + 8002d7fc: ec8e30ef jal ra,80010ec4 <_Z7setchr2jj> + 8002d800: 00094783 lbu a5,0(s2) + 8002d804: 00444583 lbu a1,4(s0) + 8002d808: 00001537 lui a0,0x1 + 8002d80c: 0047979b slliw a5,a5,0x4 + 8002d810: 1007f793 andi a5,a5,256 + 8002d814: 00b7e5b3 or a1,a5,a1 + 8002d818: e8ce30ef jal ra,80010ea4 <_Z7setchr1jj> + 8002d81c: 00094783 lbu a5,0(s2) + 8002d820: 00544583 lbu a1,5(s0) + 8002d824: 40098513 addi a0,s3,1024 + 8002d828: 0037979b slliw a5,a5,0x3 + 8002d82c: 1007f793 andi a5,a5,256 + 8002d830: 00b7e5b3 or a1,a5,a1 + 8002d834: e70e30ef jal ra,80010ea4 <_Z7setchr1jj> + 8002d838: 00094783 lbu a5,0(s2) + 8002d83c: 00644583 lbu a1,6(s0) + 8002d840: 80048513 addi a0,s1,-2048 # 1800 <_entry_offset+0x1800> + 8002d844: 0027979b slliw a5,a5,0x2 + 8002d848: 1007f793 andi a5,a5,256 + 8002d84c: 00b7e5b3 or a1,a5,a1 + 8002d850: e54e30ef jal ra,80010ea4 <_Z7setchr1jj> + 8002d854: 00094783 lbu a5,0(s2) + 8002d858: 00744583 lbu a1,7(s0) + 8002d85c: 02013403 ld s0,32(sp) + 8002d860: 02813083 ld ra,40(sp) + 8002d864: 01013903 ld s2,16(sp) + 8002d868: 00813983 ld s3,8(sp) + 8002d86c: c0048513 addi a0,s1,-1024 + 8002d870: 0017979b slliw a5,a5,0x1 + 8002d874: 01813483 ld s1,24(sp) + 8002d878: 1007f793 andi a5,a5,256 + 8002d87c: 00b7e5b3 or a1,a5,a1 + 8002d880: 03010113 addi sp,sp,48 + 8002d884: e20e306f j 80010ea4 <_Z7setchr1jj> + +000000008002d888 <_ZL12StateRestorei>: + 8002d888: f01ff06f j 8002d788 <_ZL4Syncv> + +000000008002d88c <_ZL9M112Writejh>: + 8002d88c: 0000c7b7 lui a5,0xc + 8002d890: 06f50063 beq a0,a5,8002d8f0 <_ZL9M112Writejh+0x64> + 8002d894: 02a7e863 bltu a5,a0,8002d8c4 <_ZL9M112Writejh+0x38> + 8002d898: 000087b7 lui a5,0x8 + 8002d89c: 04f50263 beq a0,a5,8002d8e0 <_ZL9M112Writejh+0x54> + 8002d8a0: 0000a7b7 lui a5,0xa + 8002d8a4: 04f51c63 bne a0,a5,8002d8fc <_ZL9M112Writejh+0x70> + 8002d8a8: 0019f717 auipc a4,0x19f + 8002d8ac: b9174703 lbu a4,-1135(a4) # 801cc439 <_ZL3cmd> + 8002d8b0: 0019f797 auipc a5,0x19f + 8002d8b4: b9078793 addi a5,a5,-1136 # 801cc440 <_ZL3reg> + 8002d8b8: 00e787b3 add a5,a5,a4 + 8002d8bc: 00b78023 sb a1,0(a5) + 8002d8c0: ec9ff06f j 8002d788 <_ZL4Syncv> + 8002d8c4: 0000e7b7 lui a5,0xe + 8002d8c8: 00f51a63 bne a0,a5,8002d8dc <_ZL9M112Writejh+0x50> + 8002d8cc: 0015f593 andi a1,a1,1 + 8002d8d0: 0019f797 auipc a5,0x19f + 8002d8d4: b8b780a3 sb a1,-1151(a5) # 801cc451 <_ZL6mirror> + 8002d8d8: eb1ff06f j 8002d788 <_ZL4Syncv> + 8002d8dc: 00008067 ret + 8002d8e0: 0075f593 andi a1,a1,7 + 8002d8e4: 0019f797 auipc a5,0x19f + 8002d8e8: b4b78aa3 sb a1,-1195(a5) # 801cc439 <_ZL3cmd> + 8002d8ec: 00008067 ret + 8002d8f0: 0019f797 auipc a5,0x19f + 8002d8f4: b6b78023 sb a1,-1184(a5) # 801cc450 <_ZL4bank> + 8002d8f8: e91ff06f j 8002d788 <_ZL4Syncv> + 8002d8fc: 00008067 ret + +000000008002d900 <_ZL9M112Closev>: + 8002d900: 0019f517 auipc a0,0x19f + 8002d904: b4853503 ld a0,-1208(a0) # 801cc448 <_ZL4WRAM> + 8002d908: 02050263 beqz a0,8002d92c <_ZL9M112Closev+0x2c> + 8002d90c: ff010113 addi sp,sp,-16 + 8002d910: 00113423 sd ra,8(sp) + 8002d914: c2de40ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002d918: 00813083 ld ra,8(sp) + 8002d91c: 0019f797 auipc a5,0x19f + 8002d920: b207b623 sd zero,-1236(a5) # 801cc448 <_ZL4WRAM> + 8002d924: 01010113 addi sp,sp,16 + 8002d928: 00008067 ret + 8002d92c: 0019f797 auipc a5,0x19f + 8002d930: b007be23 sd zero,-1252(a5) # 801cc448 <_ZL4WRAM> + 8002d934: 00008067 ret + +000000008002d938 <_ZL9M112Powerv>: + 8002d938: ff010113 addi sp,sp,-16 + 8002d93c: fff00593 li a1,-1 + 8002d940: 0000c537 lui a0,0xc + 8002d944: 00113423 sd ra,8(sp) + 8002d948: 00813023 sd s0,0(sp) + 8002d94c: 0019f797 auipc a5,0x19f + 8002d950: b0078223 sb zero,-1276(a5) # 801cc450 <_ZL4bank> + 8002d954: b04e30ef jal ra,80010c58 <_Z8setprg16jj> + 8002d958: 00000613 li a2,0 + 8002d95c: 000065b7 lui a1,0x6 + 8002d960: 01000513 li a0,16 + 8002d964: f85e20ef jal ra,800108e8 <_Z8setprg8rijj> + 8002d968: 00010437 lui s0,0x10 + 8002d96c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002d970: fffe3617 auipc a2,0xfffe3 + 8002d974: cf060613 addi a2,a2,-784 # 80010660 <_Z6CartBRj> + 8002d978: 00008537 lui a0,0x8 + 8002d97c: 0a0060ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002d980: fff40593 addi a1,s0,-1 + 8002d984: 00000617 auipc a2,0x0 + 8002d988: f0860613 addi a2,a2,-248 # 8002d88c <_ZL9M112Writejh> + 8002d98c: 00008537 lui a0,0x8 + 8002d990: 198060ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002d994: 000065b7 lui a1,0x6 + 8002d998: 00004537 lui a0,0x4 + 8002d99c: 00000617 auipc a2,0x0 + 8002d9a0: ef060613 addi a2,a2,-272 # 8002d88c <_ZL9M112Writejh> + 8002d9a4: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 8002d9a8: 02050513 addi a0,a0,32 # 4020 <_entry_offset+0x4020> + 8002d9ac: 17c060ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002d9b0: 00008437 lui s0,0x8 + 8002d9b4: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 8002d9b8: fffe3617 auipc a2,0xfffe3 + 8002d9bc: ca860613 addi a2,a2,-856 # 80010660 <_Z6CartBRj> + 8002d9c0: 00006537 lui a0,0x6 + 8002d9c4: 058060ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002d9c8: fff40593 addi a1,s0,-1 + 8002d9cc: fffe3617 auipc a2,0xfffe3 + 8002d9d0: cc060613 addi a2,a2,-832 # 8001068c <_Z6CartBWjh> + 8002d9d4: 00006537 lui a0,0x6 + 8002d9d8: 150060ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002d9dc: 00013403 ld s0,0(sp) + 8002d9e0: 00813083 ld ra,8(sp) + 8002d9e4: 0019f617 auipc a2,0x19f + 8002d9e8: a6463603 ld a2,-1436(a2) # 801cc448 <_ZL4WRAM> + 8002d9ec: 000065b7 lui a1,0x6 + 8002d9f0: 00800513 li a0,8 + 8002d9f4: 01010113 addi sp,sp,16 + 8002d9f8: e1cd206f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +000000008002d9fc <_Z14Mapper112_InitP8CartInfo>: + 8002d9fc: ff010113 addi sp,sp,-16 + 8002da00: 00113423 sd ra,8(sp) + 8002da04: 00813023 sd s0,0(sp) + 8002da08: 00000797 auipc a5,0x0 + 8002da0c: f3078793 addi a5,a5,-208 # 8002d938 <_ZL9M112Powerv> + 8002da10: 00f53023 sd a5,0(a0) # 6000 <_entry_offset+0x6000> + 8002da14: 00000797 auipc a5,0x0 + 8002da18: eec78793 addi a5,a5,-276 # 8002d900 <_ZL9M112Closev> + 8002da1c: 00f53823 sd a5,16(a0) + 8002da20: 00000797 auipc a5,0x0 + 8002da24: e6878793 addi a5,a5,-408 # 8002d888 <_ZL12StateRestorei> + 8002da28: 00002537 lui a0,0x2 + 8002da2c: 0019f717 auipc a4,0x19f + 8002da30: c2f73623 sd a5,-980(a4) # 801cc658 + 8002da34: a39e40ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002da38: 00050593 mv a1,a0 + 8002da3c: 0019f417 auipc s0,0x19f + 8002da40: a0c40413 addi s0,s0,-1524 # 801cc448 <_ZL4WRAM> + 8002da44: 00100693 li a3,1 + 8002da48: 00002637 lui a2,0x2 + 8002da4c: 01000513 li a0,16 + 8002da50: 00b43023 sd a1,0(s0) + 8002da54: aa1e20ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8002da58: 00043503 ld a0,0(s0) + 8002da5c: 00018697 auipc a3,0x18 + 8002da60: 8cc68693 addi a3,a3,-1844 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 8002da64: 00000613 li a2,0 + 8002da68: 000025b7 lui a1,0x2 + 8002da6c: da4d20ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002da70: 00013403 ld s0,0(sp) + 8002da74: 00813083 ld ra,8(sp) + 8002da78: 00000693 li a3,0 + 8002da7c: 00000613 li a2,0 + 8002da80: fff00593 li a1,-1 + 8002da84: 0001e517 auipc a0,0x1e + 8002da88: 46c50513 addi a0,a0,1132 # 8004bef0 <_ZL9StateRegs> + 8002da8c: 01010113 addi sp,sp,16 + 8002da90: d80d206f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002da94 <_ZL8M186Readj>: + 8002da94: 000047b7 lui a5,0x4 + 8002da98: 20278713 addi a4,a5,514 # 4202 <_entry_offset+0x4202> + 8002da9c: 04e50063 beq a0,a4,8002dadc <_ZL8M186Readj+0x48> + 8002daa0: 00a77e63 bgeu a4,a0,8002dabc <_ZL8M186Readj+0x28> + 8002daa4: 20378793 addi a5,a5,515 + 8002daa8: 40f50533 sub a0,a0,a5 + 8002daac: 00a03533 snez a0,a0 + 8002dab0: 40a0053b negw a0,a0 + 8002dab4: 0ff57513 andi a0,a0,255 + 8002dab8: 00008067 ret + 8002dabc: ffffc7b7 lui a5,0xffffc + 8002dac0: e007879b addiw a5,a5,-512 + 8002dac4: 00a7853b addw a0,a5,a0 + 8002dac8: 00100793 li a5,1 + 8002dacc: 00a7b533 sltu a0,a5,a0 + 8002dad0: 40a0053b negw a0,a0 + 8002dad4: 0ff57513 andi a0,a0,255 + 8002dad8: 00008067 ret + 8002dadc: 04000513 li a0,64 + 8002dae0: 00008067 ret + +000000008002dae4 <_ZL6ASWRAMj>: + 8002dae4: ffffc7b7 lui a5,0xffffc + 8002dae8: c007879b addiw a5,a5,-1024 + 8002daec: 00a787bb addw a5,a5,a0 + 8002daf0: 02079793 slli a5,a5,0x20 + 8002daf4: 0009a517 auipc a0,0x9a + 8002daf8: cdc50513 addi a0,a0,-804 # 800c77d0 <_ZL5SWRAM> + 8002dafc: 0207d793 srli a5,a5,0x20 + 8002db00: 00f507b3 add a5,a0,a5 + 8002db04: 0007c503 lbu a0,0(a5) # ffffffffffffc000 <_end+0xffffffff7fe27000> + 8002db08: 00008067 ret + +000000008002db0c <_ZL6BSWRAMjh>: + 8002db0c: ffffc7b7 lui a5,0xffffc + 8002db10: c007879b addiw a5,a5,-1024 + 8002db14: 00a7853b addw a0,a5,a0 + 8002db18: 02051513 slli a0,a0,0x20 + 8002db1c: 02055513 srli a0,a0,0x20 + 8002db20: 0009a797 auipc a5,0x9a + 8002db24: cb078793 addi a5,a5,-848 # 800c77d0 <_ZL5SWRAM> + 8002db28: 00a78533 add a0,a5,a0 + 8002db2c: 00b50023 sb a1,0(a0) + 8002db30: 00008067 ret + +000000008002db34 <_ZL4Syncv>: + 8002db34: ff010113 addi sp,sp,-16 + 8002db38: 00813023 sd s0,0(sp) + 8002db3c: 0019f417 auipc s0,0x19f + 8002db40: 92440413 addi s0,s0,-1756 # 801cc460 <_ZL4regs> + 8002db44: 00044603 lbu a2,0(s0) + 8002db48: 000065b7 lui a1,0x6 + 8002db4c: 01000513 li a0,16 + 8002db50: 00665613 srli a2,a2,0x6 + 8002db54: 00113423 sd ra,8(sp) + 8002db58: d91e20ef jal ra,800108e8 <_Z8setprg8rijj> + 8002db5c: 00144583 lbu a1,1(s0) + 8002db60: 00008537 lui a0,0x8 + 8002db64: 8f4e30ef jal ra,80010c58 <_Z8setprg16jj> + 8002db68: 00013403 ld s0,0(sp) + 8002db6c: 00813083 ld ra,8(sp) + 8002db70: 00000593 li a1,0 + 8002db74: 0000c537 lui a0,0xc + 8002db78: 01010113 addi sp,sp,16 + 8002db7c: 8dce306f j 80010c58 <_Z8setprg16jj> + +000000008002db80 <_ZL11M186Restorei>: + 8002db80: fb5ff06f j 8002db34 <_ZL4Syncv> + +000000008002db84 <_ZL9M186Writejh>: + 8002db84: 000047b7 lui a5,0x4 + 8002db88: 20378793 addi a5,a5,515 # 4203 <_entry_offset+0x4203> + 8002db8c: 00f577b3 and a5,a0,a5 + 8002db90: 00078c63 beqz a5,8002dba8 <_ZL9M186Writejh+0x24> + 8002db94: 00357513 andi a0,a0,3 + 8002db98: 0019f797 auipc a5,0x19f + 8002db9c: 8c878793 addi a5,a5,-1848 # 801cc460 <_ZL4regs> + 8002dba0: 00a78533 add a0,a5,a0 + 8002dba4: 00b50023 sb a1,0(a0) # c000 <_entry_offset+0xc000> + 8002dba8: f8dff06f j 8002db34 <_ZL4Syncv> + +000000008002dbac <_ZL9M186Closev>: + 8002dbac: 0019f517 auipc a0,0x19f + 8002dbb0: 8ac53503 ld a0,-1876(a0) # 801cc458 <_ZL4WRAM> + 8002dbb4: 02050263 beqz a0,8002dbd8 <_ZL9M186Closev+0x2c> + 8002dbb8: ff010113 addi sp,sp,-16 + 8002dbbc: 00113423 sd ra,8(sp) + 8002dbc0: 981e40ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002dbc4: 00813083 ld ra,8(sp) + 8002dbc8: 0019f797 auipc a5,0x19f + 8002dbcc: 8807b823 sd zero,-1904(a5) # 801cc458 <_ZL4WRAM> + 8002dbd0: 01010113 addi sp,sp,16 + 8002dbd4: 00008067 ret + 8002dbd8: 0019f797 auipc a5,0x19f + 8002dbdc: 8807b023 sd zero,-1920(a5) # 801cc458 <_ZL4WRAM> + 8002dbe0: 00008067 ret + +000000008002dbe4 <_ZL9M186Powerv>: + 8002dbe4: fe010113 addi sp,sp,-32 + 8002dbe8: 00000513 li a0,0 + 8002dbec: 00113c23 sd ra,24(sp) + 8002dbf0: 00813823 sd s0,16(sp) + 8002dbf4: 00913423 sd s1,8(sp) + 8002dbf8: 00010437 lui s0,0x10 + 8002dbfc: b08e30ef jal ra,80010f04 <_Z7setchr8j> + 8002dc00: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002dc04: fffe3617 auipc a2,0xfffe3 + 8002dc08: a5c60613 addi a2,a2,-1444 # 80010660 <_Z6CartBRj> + 8002dc0c: 00006537 lui a0,0x6 + 8002dc10: 60d050ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002dc14: fff40593 addi a1,s0,-1 + 8002dc18: fffe3617 auipc a2,0xfffe3 + 8002dc1c: a7460613 addi a2,a2,-1420 # 8001068c <_Z6CartBWjh> + 8002dc20: 00006537 lui a0,0x6 + 8002dc24: 705050ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002dc28: 00004437 lui s0,0x4 + 8002dc2c: 3ff40593 addi a1,s0,1023 # 43ff <_entry_offset+0x43ff> + 8002dc30: 20040513 addi a0,s0,512 + 8002dc34: 00000617 auipc a2,0x0 + 8002dc38: e6060613 addi a2,a2,-416 # 8002da94 <_ZL8M186Readj> + 8002dc3c: 5e1050ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002dc40: 3ff40593 addi a1,s0,1023 + 8002dc44: 20040513 addi a0,s0,512 + 8002dc48: 00000617 auipc a2,0x0 + 8002dc4c: f3c60613 addi a2,a2,-196 # 8002db84 <_ZL9M186Writejh> + 8002dc50: 6d9050ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002dc54: 000054b7 lui s1,0x5 + 8002dc58: fff48593 addi a1,s1,-1 # 4fff <_entry_offset+0x4fff> + 8002dc5c: 40040513 addi a0,s0,1024 + 8002dc60: 00000617 auipc a2,0x0 + 8002dc64: e8460613 addi a2,a2,-380 # 8002dae4 <_ZL6ASWRAMj> + 8002dc68: 5b5050ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002dc6c: fff48593 addi a1,s1,-1 + 8002dc70: 40040513 addi a0,s0,1024 + 8002dc74: 00000617 auipc a2,0x0 + 8002dc78: e9860613 addi a2,a2,-360 # 8002db0c <_ZL6BSWRAMjh> + 8002dc7c: 6ad050ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002dc80: 0019e617 auipc a2,0x19e + 8002dc84: 7d863603 ld a2,2008(a2) # 801cc458 <_ZL4WRAM> + 8002dc88: 000065b7 lui a1,0x6 + 8002dc8c: 02000513 li a0,32 + 8002dc90: b84d20ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 8002dc94: 0019e797 auipc a5,0x19e + 8002dc98: 7cc78793 addi a5,a5,1996 # 801cc460 <_ZL4regs> + 8002dc9c: 0037c703 lbu a4,3(a5) + 8002dca0: 00e78123 sb a4,2(a5) + 8002dca4: 00e780a3 sb a4,1(a5) + 8002dca8: 00e78023 sb a4,0(a5) + 8002dcac: 01013403 ld s0,16(sp) + 8002dcb0: 01813083 ld ra,24(sp) + 8002dcb4: 00813483 ld s1,8(sp) + 8002dcb8: 02010113 addi sp,sp,32 + 8002dcbc: e79ff06f j 8002db34 <_ZL4Syncv> + +000000008002dcc0 <_Z14Mapper186_InitP8CartInfo>: + 8002dcc0: ff010113 addi sp,sp,-16 + 8002dcc4: 00113423 sd ra,8(sp) + 8002dcc8: 00813023 sd s0,0(sp) + 8002dccc: 00000797 auipc a5,0x0 + 8002dcd0: f1878793 addi a5,a5,-232 # 8002dbe4 <_ZL9M186Powerv> + 8002dcd4: 00f53023 sd a5,0(a0) # 6000 <_entry_offset+0x6000> + 8002dcd8: 00000797 auipc a5,0x0 + 8002dcdc: ed478793 addi a5,a5,-300 # 8002dbac <_ZL9M186Closev> + 8002dce0: 00f53823 sd a5,16(a0) + 8002dce4: 00000797 auipc a5,0x0 + 8002dce8: e9c78793 addi a5,a5,-356 # 8002db80 <_ZL11M186Restorei> + 8002dcec: 00008537 lui a0,0x8 + 8002dcf0: 0019f717 auipc a4,0x19f + 8002dcf4: 96f73423 sd a5,-1688(a4) # 801cc658 + 8002dcf8: f74e40ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002dcfc: 00050593 mv a1,a0 + 8002dd00: 0019e417 auipc s0,0x19e + 8002dd04: 75840413 addi s0,s0,1880 # 801cc458 <_ZL4WRAM> + 8002dd08: 00100693 li a3,1 + 8002dd0c: 00008637 lui a2,0x8 + 8002dd10: 01000513 li a0,16 + 8002dd14: 00b43023 sd a1,0(s0) + 8002dd18: fdce20ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8002dd1c: 00043503 ld a0,0(s0) + 8002dd20: 00017697 auipc a3,0x17 + 8002dd24: 60868693 addi a3,a3,1544 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 8002dd28: 00000613 li a2,0 + 8002dd2c: 000085b7 lui a1,0x8 + 8002dd30: ae0d20ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002dd34: 00013403 ld s0,0(sp) + 8002dd38: 00813083 ld ra,8(sp) + 8002dd3c: 00000693 li a3,0 + 8002dd40: 00000613 li a2,0 + 8002dd44: fff00593 li a1,-1 + 8002dd48: 0001e517 auipc a0,0x1e + 8002dd4c: 22050513 addi a0,a0,544 # 8004bf68 <_ZL9StateRegs> + 8002dd50: 01010113 addi sp,sp,16 + 8002dd54: abcd206f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002dd58 <_ZL9M170ProtWjh>: + 8002dd58: 00159593 slli a1,a1,0x1 + 8002dd5c: f805f593 andi a1,a1,-128 + 8002dd60: 0019e797 auipc a5,0x19e + 8002dd64: 70b78223 sb a1,1796(a5) # 801cc464 <_ZL3reg> + 8002dd68: 00008067 ret + +000000008002dd6c <_ZL9M170ProtRj>: + 8002dd6c: 0002a797 auipc a5,0x2a + 8002dd70: afc7c783 lbu a5,-1284(a5) # 80057868 + 8002dd74: 07f7f793 andi a5,a5,127 + 8002dd78: 0019e517 auipc a0,0x19e + 8002dd7c: 6ec54503 lbu a0,1772(a0) # 801cc464 <_ZL3reg> + 8002dd80: 00a7e533 or a0,a5,a0 + 8002dd84: 00008067 ret + +000000008002dd88 <_ZL4Syncv>: + 8002dd88: ff010113 addi sp,sp,-16 + 8002dd8c: 00000593 li a1,0 + 8002dd90: 00008537 lui a0,0x8 + 8002dd94: 00113423 sd ra,8(sp) + 8002dd98: ec1e20ef jal ra,80010c58 <_Z8setprg16jj> + 8002dd9c: 0000c537 lui a0,0xc + 8002dda0: fff00593 li a1,-1 + 8002dda4: eb5e20ef jal ra,80010c58 <_Z8setprg16jj> + 8002dda8: 00813083 ld ra,8(sp) + 8002ddac: 00000513 li a0,0 + 8002ddb0: 01010113 addi sp,sp,16 + 8002ddb4: 950e306f j 80010f04 <_Z7setchr8j> + +000000008002ddb8 <_ZL12StateRestorei>: + 8002ddb8: fd1ff06f j 8002dd88 <_ZL4Syncv> + +000000008002ddbc <_ZL9M170Powerv>: + 8002ddbc: ff010113 addi sp,sp,-16 + 8002ddc0: 00113423 sd ra,8(sp) + 8002ddc4: 00813023 sd s0,0(sp) + 8002ddc8: fc1ff0ef jal ra,8002dd88 <_ZL4Syncv> + 8002ddcc: 000065b7 lui a1,0x6 + 8002ddd0: 50258593 addi a1,a1,1282 # 6502 <_entry_offset+0x6502> + 8002ddd4: 00058513 mv a0,a1 + 8002ddd8: 00000617 auipc a2,0x0 + 8002dddc: f8060613 addi a2,a2,-128 # 8002dd58 <_ZL9M170ProtWjh> + 8002dde0: 549050ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002dde4: 00000617 auipc a2,0x0 + 8002dde8: f7460613 addi a2,a2,-140 # 8002dd58 <_ZL9M170ProtWjh> + 8002ddec: 000075b7 lui a1,0x7 + 8002ddf0: 00007537 lui a0,0x7 + 8002ddf4: 535050ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002ddf8: 00007437 lui s0,0x7 + 8002ddfc: 00140593 addi a1,s0,1 # 7001 <_entry_offset+0x7001> + 8002de00: 00058513 mv a0,a1 + 8002de04: 00000617 auipc a2,0x0 + 8002de08: f6860613 addi a2,a2,-152 # 8002dd6c <_ZL9M170ProtRj> + 8002de0c: 411050ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002de10: 77740593 addi a1,s0,1911 + 8002de14: 00058513 mv a0,a1 + 8002de18: 00000617 auipc a2,0x0 + 8002de1c: f5460613 addi a2,a2,-172 # 8002dd6c <_ZL9M170ProtRj> + 8002de20: 3fd050ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002de24: 00013403 ld s0,0(sp) + 8002de28: 00813083 ld ra,8(sp) + 8002de2c: 000105b7 lui a1,0x10 + 8002de30: fffe3617 auipc a2,0xfffe3 + 8002de34: 83060613 addi a2,a2,-2000 # 80010660 <_Z6CartBRj> + 8002de38: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8002de3c: 00008537 lui a0,0x8 + 8002de40: 01010113 addi sp,sp,16 + 8002de44: 3d90506f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +000000008002de48 <_Z14Mapper170_InitP8CartInfo>: + 8002de48: 00000797 auipc a5,0x0 + 8002de4c: f7478793 addi a5,a5,-140 # 8002ddbc <_ZL9M170Powerv> + 8002de50: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 8002de54: 00000797 auipc a5,0x0 + 8002de58: f6478793 addi a5,a5,-156 # 8002ddb8 <_ZL12StateRestorei> + 8002de5c: 00000693 li a3,0 + 8002de60: 00000613 li a2,0 + 8002de64: fff00593 li a1,-1 + 8002de68: 0001e517 auipc a0,0x1e + 8002de6c: 14850513 addi a0,a0,328 # 8004bfb0 <_ZL9StateRegs> + 8002de70: 0019e717 auipc a4,0x19e + 8002de74: 7ef73423 sd a5,2024(a4) # 801cc658 + 8002de78: 998d206f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002de7c <_ZL4Syncv>: + 8002de7c: fc010113 addi sp,sp,-64 + 8002de80: 00000613 li a2,0 + 8002de84: 000065b7 lui a1,0x6 + 8002de88: 01000513 li a0,16 + 8002de8c: 02113c23 sd ra,56(sp) + 8002de90: 02813823 sd s0,48(sp) + 8002de94: 02913423 sd s1,40(sp) + 8002de98: 0019e417 auipc s0,0x19e + 8002de9c: 5d840413 addi s0,s0,1496 # 801cc470 <_ZL3prg> + 8002dea0: 03213023 sd s2,32(sp) + 8002dea4: 01313c23 sd s3,24(sp) + 8002dea8: 01413823 sd s4,16(sp) + 8002deac: 01513423 sd s5,8(sp) + 8002deb0: a39e20ef jal ra,800108e8 <_Z8setprg8rijj> + 8002deb4: 00044583 lbu a1,0(s0) + 8002deb8: 00008537 lui a0,0x8 + 8002debc: 0019ea97 auipc s5,0x19e + 8002dec0: 5d4a8a93 addi s5,s5,1492 # 801cc490 <_ZL5chrlo> + 8002dec4: bd9e20ef jal ra,80010a9c <_Z7setprg8jj> + 8002dec8: 00144583 lbu a1,1(s0) + 8002decc: 0000a537 lui a0,0xa + 8002ded0: 0019e497 auipc s1,0x19e + 8002ded4: 5b848493 addi s1,s1,1464 # 801cc488 <_ZL5chrhi> + 8002ded8: bc5e20ef jal ra,80010a9c <_Z7setprg8jj> + 8002dedc: ffe00593 li a1,-2 + 8002dee0: 0000c537 lui a0,0xc + 8002dee4: bb9e20ef jal ra,80010a9c <_Z7setprg8jj> + 8002dee8: fff00593 li a1,-1 + 8002deec: 0000e537 lui a0,0xe + 8002def0: bade20ef jal ra,80010a9c <_Z7setprg8jj> + 8002def4: 00000413 li s0,0 + 8002def8: 00100993 li s3,1 + 8002defc: 0019ea17 auipc s4,0x19e + 8002df00: 59ca0a13 addi s4,s4,1436 # 801cc498 <_ZL5vlock> + 8002df04: 00002937 lui s2,0x2 + 8002df08: 0180006f j 8002df20 <_ZL4Syncv+0xa4> + 8002df0c: 4004041b addiw s0,s0,1024 + 8002df10: f95e20ef jal ra,80010ea4 <_Z7setchr1jj> + 8002df14: 001a8a93 addi s5,s5,1 + 8002df18: 00148493 addi s1,s1,1 + 8002df1c: 05240a63 beq s0,s2,8002df70 <_ZL4Syncv+0xf4> + 8002df20: 0004c703 lbu a4,0(s1) + 8002df24: 000ac603 lbu a2,0(s5) + 8002df28: 00040513 mv a0,s0 + 8002df2c: 0087171b slliw a4,a4,0x8 + 8002df30: ffc6079b addiw a5,a2,-4 + 8002df34: 00e66633 or a2,a2,a4 + 8002df38: 0006061b sext.w a2,a2 + 8002df3c: 0ff7f793 andi a5,a5,255 + 8002df40: 00060593 mv a1,a2 + 8002df44: fcf9e4e3 bltu s3,a5,8002df0c <_ZL4Syncv+0x90> + 8002df48: 000a4783 lbu a5,0(s4) + 8002df4c: fc0790e3 bnez a5,8002df0c <_ZL4Syncv+0x90> + 8002df50: 00040593 mv a1,s0 + 8002df54: 00167613 andi a2,a2,1 + 8002df58: 01000513 li a0,16 + 8002df5c: 4004041b addiw s0,s0,1024 + 8002df60: ec5e20ef jal ra,80010e24 <_Z8setchr1rijj> + 8002df64: 001a8a93 addi s5,s5,1 + 8002df68: 00148493 addi s1,s1,1 + 8002df6c: fb241ae3 bne s0,s2,8002df20 <_ZL4Syncv+0xa4> + 8002df70: 0019e797 auipc a5,0x19e + 8002df74: 5107c783 lbu a5,1296(a5) # 801cc480 <_ZL4mirr> + 8002df78: 00200713 li a4,2 + 8002df7c: 06e78663 beq a5,a4,8002dfe8 <_ZL4Syncv+0x16c> + 8002df80: 02f76863 bltu a4,a5,8002dfb0 <_ZL4Syncv+0x134> + 8002df84: 00000513 li a0,0 + 8002df88: 04078c63 beqz a5,8002dfe0 <_ZL4Syncv+0x164> + 8002df8c: 03013403 ld s0,48(sp) + 8002df90: 03813083 ld ra,56(sp) + 8002df94: 02813483 ld s1,40(sp) + 8002df98: 02013903 ld s2,32(sp) + 8002df9c: 01813983 ld s3,24(sp) + 8002dfa0: 01013a03 ld s4,16(sp) + 8002dfa4: 00813a83 ld s5,8(sp) + 8002dfa8: 04010113 addi sp,sp,64 + 8002dfac: 89ce306f j 80011048 <_Z9setmirrori> + 8002dfb0: 00300713 li a4,3 + 8002dfb4: 00300513 li a0,3 + 8002dfb8: fce78ae3 beq a5,a4,8002df8c <_ZL4Syncv+0x110> + 8002dfbc: 03813083 ld ra,56(sp) + 8002dfc0: 03013403 ld s0,48(sp) + 8002dfc4: 02813483 ld s1,40(sp) + 8002dfc8: 02013903 ld s2,32(sp) + 8002dfcc: 01813983 ld s3,24(sp) + 8002dfd0: 01013a03 ld s4,16(sp) + 8002dfd4: 00813a83 ld s5,8(sp) + 8002dfd8: 04010113 addi sp,sp,64 + 8002dfdc: 00008067 ret + 8002dfe0: 00100513 li a0,1 + 8002dfe4: fa9ff06f j 8002df8c <_ZL4Syncv+0x110> + 8002dfe8: 00200513 li a0,2 + 8002dfec: fa1ff06f j 8002df8c <_ZL4Syncv+0x110> + +000000008002dff0 <_ZL12StateRestorei>: + 8002dff0: e8dff06f j 8002de7c <_ZL4Syncv> + +000000008002dff4 <_ZL9M253Closev>: + 8002dff4: ff010113 addi sp,sp,-16 + 8002dff8: 00113423 sd ra,8(sp) + 8002dffc: 0019e517 auipc a0,0x19e + 8002e000: 47c53503 ld a0,1148(a0) # 801cc478 <_ZL4WRAM> + 8002e004: 00050463 beqz a0,8002e00c <_ZL9M253Closev+0x18> + 8002e008: d38e40ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002e00c: 0019e517 auipc a0,0x19e + 8002e010: 49453503 ld a0,1172(a0) # 801cc4a0 <_ZL6CHRRAM> + 8002e014: 00050463 beqz a0,8002e01c <_ZL9M253Closev+0x28> + 8002e018: d28e40ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002e01c: 00813083 ld ra,8(sp) + 8002e020: 0019e797 auipc a5,0x19e + 8002e024: 4807b023 sd zero,1152(a5) # 801cc4a0 <_ZL6CHRRAM> + 8002e028: 0019e797 auipc a5,0x19e + 8002e02c: 4407b823 sd zero,1104(a5) # 801cc478 <_ZL4WRAM> + 8002e030: 01010113 addi sp,sp,16 + 8002e034: 00008067 ret + +000000008002e038 <_ZL9M253Powerv>: + 8002e038: ff010113 addi sp,sp,-16 + 8002e03c: 00113423 sd ra,8(sp) + 8002e040: 00813023 sd s0,0(sp) + 8002e044: 0019e797 auipc a5,0x19e + 8002e048: 44078a23 sb zero,1108(a5) # 801cc498 <_ZL5vlock> + 8002e04c: 00008437 lui s0,0x8 + 8002e050: e2dff0ef jal ra,8002de7c <_ZL4Syncv> + 8002e054: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 8002e058: fffe2617 auipc a2,0xfffe2 + 8002e05c: 60860613 addi a2,a2,1544 # 80010660 <_Z6CartBRj> + 8002e060: 00006537 lui a0,0x6 + 8002e064: 1b9050ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002e068: fff40593 addi a1,s0,-1 + 8002e06c: fffe2617 auipc a2,0xfffe2 + 8002e070: 62060613 addi a2,a2,1568 # 8001068c <_Z6CartBWjh> + 8002e074: 00006537 lui a0,0x6 + 8002e078: 2b1050ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002e07c: 00010437 lui s0,0x10 + 8002e080: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002e084: fffe2617 auipc a2,0xfffe2 + 8002e088: 5dc60613 addi a2,a2,1500 # 80010660 <_Z6CartBRj> + 8002e08c: 00008537 lui a0,0x8 + 8002e090: 18d050ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002e094: fff40593 addi a1,s0,-1 + 8002e098: 00000617 auipc a2,0x0 + 8002e09c: 10460613 addi a2,a2,260 # 8002e19c <_ZL9M253Writejh> + 8002e0a0: 00008537 lui a0,0x8 + 8002e0a4: 285050ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002e0a8: 00013403 ld s0,0(sp) + 8002e0ac: 00813083 ld ra,8(sp) + 8002e0b0: 0019e517 auipc a0,0x19e + 8002e0b4: 40452503 lw a0,1028(a0) # 801cc4b4 <_ZL8WRAMSIZE> + 8002e0b8: 0019e617 auipc a2,0x19e + 8002e0bc: 3c063603 ld a2,960(a2) # 801cc478 <_ZL4WRAM> + 8002e0c0: 000065b7 lui a1,0x6 + 8002e0c4: 00a5551b srliw a0,a0,0xa + 8002e0c8: 01010113 addi sp,sp,16 + 8002e0cc: f49d106f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +000000008002e0d0 <_ZL7M253IRQi>: + 8002e0d0: 0019e797 auipc a5,0x19e + 8002e0d4: 3a47a783 lw a5,932(a5) # 801cc474 <_ZL4IRQa> + 8002e0d8: 0c078063 beqz a5,8002e198 <_ZL7M253IRQi+0xc8> + 8002e0dc: fd010113 addi sp,sp,-48 + 8002e0e0: 00913c23 sd s1,24(sp) + 8002e0e4: 0019e497 auipc s1,0x19e + 8002e0e8: 3c448493 addi s1,s1,964 # 801cc4a8 <_ZL8IRQClock> + 8002e0ec: 0004a703 lw a4,0(s1) + 8002e0f0: 0015179b slliw a5,a0,0x1 + 8002e0f4: 00a7853b addw a0,a5,a0 + 8002e0f8: 00e507bb addw a5,a0,a4 + 8002e0fc: 02113423 sd ra,40(sp) + 8002e100: 02813023 sd s0,32(sp) + 8002e104: 01213823 sd s2,16(sp) + 8002e108: 01313423 sd s3,8(sp) + 8002e10c: 00f4a023 sw a5,0(s1) + 8002e110: 15400713 li a4,340 + 8002e114: 06f75463 bge a4,a5,8002e17c <_ZL7M253IRQi+0xac> + 8002e118: 0019e917 auipc s2,0x19e + 8002e11c: 39490913 addi s2,s2,916 # 801cc4ac <_ZL8IRQCount> + 8002e120: 00092703 lw a4,0(s2) + 8002e124: 15400413 li s0,340 + 8002e128: 0019e997 auipc s3,0x19e + 8002e12c: 38898993 addi s3,s3,904 # 801cc4b0 <_ZL8IRQLatch> + 8002e130: 00000613 li a2,0 + 8002e134: 02f45e63 bge s0,a5,8002e170 <_ZL7M253IRQi+0xa0> + 8002e138: 0017071b addiw a4,a4,1 + 8002e13c: 10077693 andi a3,a4,256 + 8002e140: eab7879b addiw a5,a5,-341 + 8002e144: 00100613 li a2,1 + 8002e148: fe0686e3 beqz a3,8002e134 <_ZL7M253IRQi+0x64> + 8002e14c: 00100513 li a0,1 + 8002e150: 00f4a023 sw a5,0(s1) + 8002e154: 00e92023 sw a4,0(s2) + 8002e158: be1d20ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 8002e15c: 0009a703 lw a4,0(s3) + 8002e160: 0004a783 lw a5,0(s1) + 8002e164: 00000613 li a2,0 + 8002e168: 00e92023 sw a4,0(s2) + 8002e16c: fc9ff06f j 8002e134 <_ZL7M253IRQi+0x64> + 8002e170: 00060663 beqz a2,8002e17c <_ZL7M253IRQi+0xac> + 8002e174: 00f4a023 sw a5,0(s1) + 8002e178: 00e92023 sw a4,0(s2) + 8002e17c: 02813083 ld ra,40(sp) + 8002e180: 02013403 ld s0,32(sp) + 8002e184: 01813483 ld s1,24(sp) + 8002e188: 01013903 ld s2,16(sp) + 8002e18c: 00813983 ld s3,8(sp) + 8002e190: 03010113 addi sp,sp,48 + 8002e194: 00008067 ret + 8002e198: 00008067 ret + +000000008002e19c <_ZL9M253Writejh>: + 8002e19c: ff010113 addi sp,sp,-16 + 8002e1a0: ffff5737 lui a4,0xffff5 + 8002e1a4: 000037b7 lui a5,0x3 + 8002e1a8: 00813023 sd s0,0(sp) + 8002e1ac: 00113423 sd ra,8(sp) + 8002e1b0: 00a7073b addw a4,a4,a0 + 8002e1b4: 00c78793 addi a5,a5,12 # 300c <_entry_offset+0x300c> + 8002e1b8: 00058413 mv s0,a1 + 8002e1bc: 08e7ee63 bltu a5,a4,8002e258 <_ZL9M253Writejh+0xbc> + 8002e1c0: 0085571b srliw a4,a0,0x8 + 8002e1c4: 00857793 andi a5,a0,8 + 8002e1c8: 00e7e7b3 or a5,a5,a4 + 8002e1cc: 0037d79b srliw a5,a5,0x3 + 8002e1d0: 0027879b addiw a5,a5,2 + 8002e1d4: 0077f813 andi a6,a5,7 + 8002e1d8: 0019e617 auipc a2,0x19e + 8002e1dc: 2b860613 addi a2,a2,696 # 801cc490 <_ZL5chrlo> + 8002e1e0: 01060633 add a2,a2,a6 + 8002e1e4: 00064683 lbu a3,0(a2) + 8002e1e8: 00457513 andi a0,a0,4 + 8002e1ec: 0f000593 li a1,240 + 8002e1f0: 40a5d5bb sraw a1,a1,a0 + 8002e1f4: 00f47713 andi a4,s0,15 + 8002e1f8: 00b6f6b3 and a3,a3,a1 + 8002e1fc: 00a7173b sllw a4,a4,a0 + 8002e200: 00e6e733 or a4,a3,a4 + 8002e204: 0ff77713 andi a4,a4,255 + 8002e208: 00e60023 sb a4,0(a2) + 8002e20c: 02080663 beqz a6,8002e238 <_ZL9M253Writejh+0x9c> + 8002e210: 00050c63 beqz a0,8002e228 <_ZL9M253Writejh+0x8c> + 8002e214: 0019e797 auipc a5,0x19e + 8002e218: 27478793 addi a5,a5,628 # 801cc488 <_ZL5chrhi> + 8002e21c: 01078833 add a6,a5,a6 + 8002e220: 4044541b sraiw s0,s0,0x4 + 8002e224: 00880023 sb s0,0(a6) + 8002e228: 00013403 ld s0,0(sp) + 8002e22c: 00813083 ld ra,8(sp) + 8002e230: 01010113 addi sp,sp,16 + 8002e234: c49ff06f j 8002de7c <_ZL4Syncv> + 8002e238: 0c800793 li a5,200 + 8002e23c: 0af70863 beq a4,a5,8002e2ec <_ZL9M253Writejh+0x150> + 8002e240: 08800793 li a5,136 + 8002e244: fcf716e3 bne a4,a5,8002e210 <_ZL9M253Writejh+0x74> + 8002e248: 00100793 li a5,1 + 8002e24c: 0019e717 auipc a4,0x19e + 8002e250: 24f70623 sb a5,588(a4) # 801cc498 <_ZL5vlock> + 8002e254: fbdff06f j 8002e210 <_ZL9M253Writejh+0x74> + 8002e258: 0000f7b7 lui a5,0xf + 8002e25c: 0cf50a63 beq a0,a5,8002e330 <_ZL9M253Writejh+0x194> + 8002e260: 02a7e463 bltu a5,a0,8002e288 <_ZL9M253Writejh+0xec> + 8002e264: 000097b7 lui a5,0x9 + 8002e268: 40078793 addi a5,a5,1024 # 9400 <_entry_offset+0x9400> + 8002e26c: 0af50a63 beq a0,a5,8002e320 <_ZL9M253Writejh+0x184> + 8002e270: 0000a7b7 lui a5,0xa + 8002e274: 01078793 addi a5,a5,16 # a010 <_entry_offset+0xa010> + 8002e278: 04f51e63 bne a0,a5,8002e2d4 <_ZL9M253Writejh+0x138> + 8002e27c: 0019e797 auipc a5,0x19e + 8002e280: 1eb78aa3 sb a1,501(a5) # 801cc471 <_ZL3prg+0x1> + 8002e284: fa5ff06f j 8002e228 <_ZL9M253Writejh+0x8c> + 8002e288: 00478713 addi a4,a5,4 + 8002e28c: 06e50663 beq a0,a4,8002e2f8 <_ZL9M253Writejh+0x15c> + 8002e290: 00878793 addi a5,a5,8 + 8002e294: 02f51863 bne a0,a5,8002e2c4 <_ZL9M253Writejh+0x128> + 8002e298: 00100513 li a0,1 + 8002e29c: ab5d20ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8002e2a0: 0019e797 auipc a5,0x19e + 8002e2a4: 2007a423 sw zero,520(a5) # 801cc4a8 <_ZL8IRQClock> + 8002e2a8: 0019e797 auipc a5,0x19e + 8002e2ac: 2087a783 lw a5,520(a5) # 801cc4b0 <_ZL8IRQLatch> + 8002e2b0: 00247413 andi s0,s0,2 + 8002e2b4: 0019e717 auipc a4,0x19e + 8002e2b8: 1ef72c23 sw a5,504(a4) # 801cc4ac <_ZL8IRQCount> + 8002e2bc: 0019e797 auipc a5,0x19e + 8002e2c0: 1a87ac23 sw s0,440(a5) # 801cc474 <_ZL4IRQa> + 8002e2c4: 00813083 ld ra,8(sp) + 8002e2c8: 00013403 ld s0,0(sp) + 8002e2cc: 01010113 addi sp,sp,16 + 8002e2d0: 00008067 ret + 8002e2d4: 000087b7 lui a5,0x8 + 8002e2d8: 01078793 addi a5,a5,16 # 8010 <_entry_offset+0x8010> + 8002e2dc: fef514e3 bne a0,a5,8002e2c4 <_ZL9M253Writejh+0x128> + 8002e2e0: 0019e797 auipc a5,0x19e + 8002e2e4: 18b78823 sb a1,400(a5) # 801cc470 <_ZL3prg> + 8002e2e8: f41ff06f j 8002e228 <_ZL9M253Writejh+0x8c> + 8002e2ec: 0019e797 auipc a5,0x19e + 8002e2f0: 1a078623 sb zero,428(a5) # 801cc498 <_ZL5vlock> + 8002e2f4: f1dff06f j 8002e210 <_ZL9M253Writejh+0x74> + 8002e2f8: 00100513 li a0,1 + 8002e2fc: a55d20ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8002e300: 0019e717 auipc a4,0x19e + 8002e304: 1b070713 addi a4,a4,432 # 801cc4b0 <_ZL8IRQLatch> + 8002e308: 00072783 lw a5,0(a4) + 8002e30c: 0044141b slliw s0,s0,0x4 + 8002e310: 00f7f793 andi a5,a5,15 + 8002e314: 0087e433 or s0,a5,s0 + 8002e318: 00872023 sw s0,0(a4) + 8002e31c: fa9ff06f j 8002e2c4 <_ZL9M253Writejh+0x128> + 8002e320: 0035f413 andi s0,a1,3 + 8002e324: 0019e797 auipc a5,0x19e + 8002e328: 14878e23 sb s0,348(a5) # 801cc480 <_ZL4mirr> + 8002e32c: efdff06f j 8002e228 <_ZL9M253Writejh+0x8c> + 8002e330: 00100513 li a0,1 + 8002e334: a1dd20ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8002e338: 0019e717 auipc a4,0x19e + 8002e33c: 17870713 addi a4,a4,376 # 801cc4b0 <_ZL8IRQLatch> + 8002e340: 00072783 lw a5,0(a4) + 8002e344: 00f47413 andi s0,s0,15 + 8002e348: 0f07f793 andi a5,a5,240 + 8002e34c: 0087e433 or s0,a5,s0 + 8002e350: 00872023 sw s0,0(a4) + 8002e354: f71ff06f j 8002e2c4 <_ZL9M253Writejh+0x128> + +000000008002e358 <_Z14Mapper253_InitP8CartInfo>: + 8002e358: fe010113 addi sp,sp,-32 + 8002e35c: 00113c23 sd ra,24(sp) + 8002e360: 00813823 sd s0,16(sp) + 8002e364: 00913423 sd s1,8(sp) + 8002e368: 01213023 sd s2,0(sp) + 8002e36c: 00000797 auipc a5,0x0 + 8002e370: ccc78793 addi a5,a5,-820 # 8002e038 <_ZL9M253Powerv> + 8002e374: 00f53023 sd a5,0(a0) + 8002e378: 00000797 auipc a5,0x0 + 8002e37c: c7c78793 addi a5,a5,-900 # 8002dff4 <_ZL9M253Closev> + 8002e380: 00f53823 sd a5,16(a0) + 8002e384: 00000797 auipc a5,0x0 + 8002e388: d4c78793 addi a5,a5,-692 # 8002e0d0 <_ZL7M253IRQi> + 8002e38c: 0019d717 auipc a4,0x19d + 8002e390: 7af73a23 sd a5,1972(a4) # 801cbb40 + 8002e394: 00000797 auipc a5,0x0 + 8002e398: c5c78793 addi a5,a5,-932 # 8002dff0 <_ZL12StateRestorei> + 8002e39c: 00050413 mv s0,a0 + 8002e3a0: 0019e717 auipc a4,0x19e + 8002e3a4: 2af73c23 sd a5,696(a4) # 801cc658 + 8002e3a8: 00001537 lui a0,0x1 + 8002e3ac: 000017b7 lui a5,0x1 + 8002e3b0: 8007879b addiw a5,a5,-2048 + 8002e3b4: 0019e497 auipc s1,0x19e + 8002e3b8: 0b448493 addi s1,s1,180 # 801cc468 <_ZL10CHRRAMSIZE> + 8002e3bc: 80050513 addi a0,a0,-2048 # 800 <_entry_offset+0x800> + 8002e3c0: 00f4a023 sw a5,0(s1) + 8002e3c4: 8a8e40ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002e3c8: 0004a603 lw a2,0(s1) + 8002e3cc: 00050593 mv a1,a0 + 8002e3d0: 0019e917 auipc s2,0x19e + 8002e3d4: 0d090913 addi s2,s2,208 # 801cc4a0 <_ZL6CHRRAM> + 8002e3d8: 00100693 li a3,1 + 8002e3dc: 01000513 li a0,16 + 8002e3e0: 00b93023 sd a1,0(s2) + 8002e3e4: 9e0e20ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 8002e3e8: 0004a583 lw a1,0(s1) + 8002e3ec: 00093503 ld a0,0(s2) + 8002e3f0: 00017697 auipc a3,0x17 + 8002e3f4: 28868693 addi a3,a3,648 # 80045678 <_ZL10prot_array+0x10> + 8002e3f8: 00000613 li a2,0 + 8002e3fc: c15d10ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002e400: 000027b7 lui a5,0x2 + 8002e404: 0019e497 auipc s1,0x19e + 8002e408: 0b048493 addi s1,s1,176 # 801cc4b4 <_ZL8WRAMSIZE> + 8002e40c: 00002537 lui a0,0x2 + 8002e410: 00f4a023 sw a5,0(s1) + 8002e414: 858e40ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002e418: 0004a603 lw a2,0(s1) + 8002e41c: 00050593 mv a1,a0 + 8002e420: 0019e917 auipc s2,0x19e + 8002e424: 05890913 addi s2,s2,88 # 801cc478 <_ZL4WRAM> + 8002e428: 00100693 li a3,1 + 8002e42c: 01000513 li a0,16 + 8002e430: 00b93023 sd a1,0(s2) + 8002e434: 8c0e20ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8002e438: 0004a583 lw a1,0(s1) + 8002e43c: 00093503 ld a0,0(s2) + 8002e440: 00017697 auipc a3,0x17 + 8002e444: ee868693 addi a3,a3,-280 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 8002e448: 00000613 li a2,0 + 8002e44c: bc5d10ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002e450: 04c42783 lw a5,76(s0) + 8002e454: 00078a63 beqz a5,8002e468 <_Z14Mapper253_InitP8CartInfo+0x110> + 8002e458: 00093703 ld a4,0(s2) + 8002e45c: 0004a783 lw a5,0(s1) + 8002e460: 00e43c23 sd a4,24(s0) + 8002e464: 02f42c23 sw a5,56(s0) + 8002e468: 01013403 ld s0,16(sp) + 8002e46c: 01813083 ld ra,24(sp) + 8002e470: 00813483 ld s1,8(sp) + 8002e474: 00013903 ld s2,0(sp) + 8002e478: 00000693 li a3,0 + 8002e47c: 00000613 li a2,0 + 8002e480: fff00593 li a1,-1 + 8002e484: 0001e517 auipc a0,0x1e + 8002e488: b5c50513 addi a0,a0,-1188 # 8004bfe0 <_ZL9StateRegs> + 8002e48c: 02010113 addi sp,sp,32 + 8002e490: b81d106f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002e494 <_ZL11M111FlashIDj>: + 8002e494: 1ff57793 andi a5,a0,511 + 8002e498: 00078c63 beqz a5,8002e4b0 <_ZL11M111FlashIDj+0x1c> + 8002e49c: 00100713 li a4,1 + 8002e4a0: 0ff00513 li a0,255 + 8002e4a4: 00e79863 bne a5,a4,8002e4b4 <_ZL11M111FlashIDj+0x20> + 8002e4a8: 0b700513 li a0,183 + 8002e4ac: 00008067 ret + 8002e4b0: 0bf00513 li a0,191 + 8002e4b4: 00008067 ret + +000000008002e4b8 <_ZL4Syncv>: + 8002e4b8: fc010113 addi sp,sp,-64 + 8002e4bc: 0019e617 auipc a2,0x19e + 8002e4c0: ffe64603 lbu a2,-2(a2) # 801cc4ba <_ZL3reg> + 8002e4c4: 02913423 sd s1,40(sp) + 8002e4c8: 000027b7 lui a5,0x2 + 8002e4cc: 00861493 slli s1,a2,0x8 + 8002e4d0: 00f4f7b3 and a5,s1,a5 + 8002e4d4: 01513423 sd s5,8(sp) + 8002e4d8: 000044b7 lui s1,0x4 + 8002e4dc: 00465a93 srli s5,a2,0x4 + 8002e4e0: 02813823 sd s0,48(sp) + 8002e4e4: 03213023 sd s2,32(sp) + 8002e4e8: 01313c23 sd s3,24(sp) + 8002e4ec: 01413823 sd s4,16(sp) + 8002e4f0: 02113c23 sd ra,56(sp) + 8002e4f4: 001afa93 andi s5,s5,1 + 8002e4f8: 00f67913 andi s2,a2,15 + 8002e4fc: 00f484bb addw s1,s1,a5 + 8002e500: 00000413 li s0,0 + 8002e504: 0019ea17 auipc s4,0x19e + 8002e508: fbca0a13 addi s4,s4,-68 # 801cc4c0 <_ZL6CHRRAM> + 8002e50c: 00400993 li s3,4 + 8002e510: 000a3503 ld a0,0(s4) + 8002e514: 00040613 mv a2,s0 + 8002e518: 00100593 li a1,1 + 8002e51c: 00950533 add a0,a0,s1 + 8002e520: 0014041b addiw s0,s0,1 + 8002e524: 9fde20ef jal ra,80010f20 <_Z9setntamemPhij> + 8002e528: 40048493 addi s1,s1,1024 # 4400 <_entry_offset+0x4400> + 8002e52c: ff3412e3 bne s0,s3,8002e510 <_ZL4Syncv+0x58> + 8002e530: 000a8593 mv a1,s5 + 8002e534: 01000513 li a0,16 + 8002e538: 94de20ef jal ra,80010e84 <_Z8setchr8rij> + 8002e53c: 03013403 ld s0,48(sp) + 8002e540: 03813083 ld ra,56(sp) + 8002e544: 02813483 ld s1,40(sp) + 8002e548: 01813983 ld s3,24(sp) + 8002e54c: 01013a03 ld s4,16(sp) + 8002e550: 00813a83 ld s5,8(sp) + 8002e554: 0019e517 auipc a0,0x19e + 8002e558: f6754503 lbu a0,-153(a0) # 801cc4bb <_ZL5flash> + 8002e55c: 00090613 mv a2,s2 + 8002e560: 02013903 ld s2,32(sp) + 8002e564: 00a03533 snez a0,a0 + 8002e568: 000085b7 lui a1,0x8 + 8002e56c: 00451513 slli a0,a0,0x4 + 8002e570: 04010113 addi sp,sp,64 + 8002e574: ef4e206f j 80010c68 <_Z9setprg32rijj> + +000000008002e578 <_ZL12StateRestorei>: + 8002e578: f41ff06f j 8002e4b8 <_ZL4Syncv> + +000000008002e57c <_ZL9M111Writejh>: + 8002e57c: ffffd7b7 lui a5,0xffffd + 8002e580: 00f57533 and a0,a0,a5 + 8002e584: 000057b7 lui a5,0x5 + 8002e588: 00f50463 beq a0,a5,8002e590 <_ZL9M111Writejh+0x14> + 8002e58c: 00008067 ret + 8002e590: 0019e797 auipc a5,0x19e + 8002e594: f2b78523 sb a1,-214(a5) # 801cc4ba <_ZL3reg> + 8002e598: f21ff06f j 8002e4b8 <_ZL4Syncv> + +000000008002e59c <_ZL9M111Closev>: + 8002e59c: ff010113 addi sp,sp,-16 + 8002e5a0: 00113423 sd ra,8(sp) + 8002e5a4: 0019e517 auipc a0,0x19e + 8002e5a8: f1c53503 ld a0,-228(a0) # 801cc4c0 <_ZL6CHRRAM> + 8002e5ac: 00050463 beqz a0,8002e5b4 <_ZL9M111Closev+0x18> + 8002e5b0: f91e30ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002e5b4: 0019e797 auipc a5,0x19e + 8002e5b8: f007b623 sd zero,-244(a5) # 801cc4c0 <_ZL6CHRRAM> + 8002e5bc: 0019e517 auipc a0,0x19e + 8002e5c0: f0c53503 ld a0,-244(a0) # 801cc4c8 <_ZL8FLASHROM> + 8002e5c4: 00050463 beqz a0,8002e5cc <_ZL9M111Closev+0x30> + 8002e5c8: f79e30ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002e5cc: 00813083 ld ra,8(sp) + 8002e5d0: 0019e797 auipc a5,0x19e + 8002e5d4: ee07bc23 sd zero,-264(a5) # 801cc4c8 <_ZL8FLASHROM> + 8002e5d8: 01010113 addi sp,sp,16 + 8002e5dc: 00008067 ret + +000000008002e5e0 <_ZL9M111Powerv>: + 8002e5e0: ff010113 addi sp,sp,-16 + 8002e5e4: fff00793 li a5,-1 + 8002e5e8: 0019e717 auipc a4,0x19e + 8002e5ec: ecf70923 sb a5,-302(a4) # 801cc4ba <_ZL3reg> + 8002e5f0: 00113423 sd ra,8(sp) + 8002e5f4: 00813023 sd s0,0(sp) + 8002e5f8: ec1ff0ef jal ra,8002e4b8 <_ZL4Syncv> + 8002e5fc: 00010437 lui s0,0x10 + 8002e600: fffe2617 auipc a2,0xfffe2 + 8002e604: 06060613 addi a2,a2,96 # 80010660 <_Z6CartBRj> + 8002e608: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002e60c: 00008537 lui a0,0x8 + 8002e610: 40c050ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002e614: 000065b7 lui a1,0x6 + 8002e618: 00000617 auipc a2,0x0 + 8002e61c: f6460613 addi a2,a2,-156 # 8002e57c <_ZL9M111Writejh> + 8002e620: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 8002e624: 00005537 lui a0,0x5 + 8002e628: 500050ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002e62c: 000085b7 lui a1,0x8 + 8002e630: 00000617 auipc a2,0x0 + 8002e634: f4c60613 addi a2,a2,-180 # 8002e57c <_ZL9M111Writejh> + 8002e638: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 8002e63c: 00007537 lui a0,0x7 + 8002e640: 4e8050ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002e644: 0019e797 auipc a5,0x19e + 8002e648: e777c783 lbu a5,-393(a5) # 801cc4bb <_ZL5flash> + 8002e64c: 00079a63 bnez a5,8002e660 <_ZL9M111Powerv+0x80> + 8002e650: 00813083 ld ra,8(sp) + 8002e654: 00013403 ld s0,0(sp) + 8002e658: 01010113 addi sp,sp,16 + 8002e65c: 00008067 ret + 8002e660: fff40593 addi a1,s0,-1 + 8002e664: 00013403 ld s0,0(sp) + 8002e668: 00813083 ld ra,8(sp) + 8002e66c: 0019e797 auipc a5,0x19e + 8002e670: e4078623 sb zero,-436(a5) # 801cc4b8 <_ZL10flash_mode> + 8002e674: 0019e797 auipc a5,0x19e + 8002e678: e40782a3 sb zero,-443(a5) # 801cc4b9 <_ZL14flash_sequence> + 8002e67c: 0019e797 auipc a5,0x19e + 8002e680: e4078a23 sb zero,-428(a5) # 801cc4d0 <_ZL8flash_id> + 8002e684: 00000617 auipc a2,0x0 + 8002e688: 03460613 addi a2,a2,52 # 8002e6b8 <_ZL9M111Flashjh> + 8002e68c: 00008537 lui a0,0x8 + 8002e690: 01010113 addi sp,sp,16 + 8002e694: 4940506f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002e698 <_Z15M111FlashIDExitv.part.0>: + 8002e698: 000105b7 lui a1,0x10 + 8002e69c: fffe2617 auipc a2,0xfffe2 + 8002e6a0: fc460613 addi a2,a2,-60 # 80010660 <_Z6CartBRj> + 8002e6a4: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8002e6a8: 00008537 lui a0,0x8 + 8002e6ac: 0019e797 auipc a5,0x19e + 8002e6b0: e2078223 sb zero,-476(a5) # 801cc4d0 <_ZL8flash_id> + 8002e6b4: 3680506f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +000000008002e6b8 <_ZL9M111Flashjh>: + 8002e6b8: ffff87b7 lui a5,0xffff8 + 8002e6bc: 00a787bb addw a5,a5,a0 + 8002e6c0: 00008737 lui a4,0x8 + 8002e6c4: 06e7fc63 bgeu a5,a4,8002e73c <_ZL9M111Flashjh+0x84> + 8002e6c8: 0019e797 auipc a5,0x19e + 8002e6cc: df27c783 lbu a5,-526(a5) # 801cc4ba <_ZL3reg> + 8002e6d0: fff70713 addi a4,a4,-1 # 7fff <_entry_offset+0x7fff> + 8002e6d4: 000786b7 lui a3,0x78 + 8002e6d8: 00f7979b slliw a5,a5,0xf + 8002e6dc: 0019e817 auipc a6,0x19e + 8002e6e0: ddc80813 addi a6,a6,-548 # 801cc4b8 <_ZL10flash_mode> + 8002e6e4: 00d7f7b3 and a5,a5,a3 + 8002e6e8: 00e57533 and a0,a0,a4 + 8002e6ec: 00084683 lbu a3,0(a6) + 8002e6f0: 00a7e7b3 or a5,a5,a0 + 8002e6f4: 0007879b sext.w a5,a5 + 8002e6f8: 00200613 li a2,2 + 8002e6fc: 00e7f733 and a4,a5,a4 + 8002e700: 0ac68063 beq a3,a2,8002e7a0 <_ZL9M111Flashjh+0xe8> + 8002e704: ff010113 addi sp,sp,-16 + 8002e708: 00113423 sd ra,8(sp) + 8002e70c: 00300513 li a0,3 + 8002e710: 06a68063 beq a3,a0,8002e770 <_ZL9M111Flashjh+0xb8> + 8002e714: 00100793 li a5,1 + 8002e718: 02f68463 beq a3,a5,8002e740 <_ZL9M111Flashjh+0x88> + 8002e71c: 000056b7 lui a3,0x5 + 8002e720: 55568693 addi a3,a3,1365 # 5555 <_entry_offset+0x5555> + 8002e724: 14d70a63 beq a4,a3,8002e878 <_ZL9M111Flashjh+0x1c0> + 8002e728: 0f000793 li a5,240 + 8002e72c: 16f58263 beq a1,a5,8002e890 <_ZL9M111Flashjh+0x1d8> + 8002e730: 00813083 ld ra,8(sp) + 8002e734: 01010113 addi sp,sp,16 + 8002e738: 00008067 ret + 8002e73c: 00008067 ret + 8002e740: 0019e517 auipc a0,0x19e + 8002e744: d7950513 addi a0,a0,-647 # 801cc4b9 <_ZL14flash_sequence> + 8002e748: 00054783 lbu a5,0(a0) + 8002e74c: 0c079263 bnez a5,8002e810 <_ZL9M111Flashjh+0x158> + 8002e750: 000037b7 lui a5,0x3 + 8002e754: aaa78793 addi a5,a5,-1366 # 2aaa <_entry_offset+0x2aaa> + 8002e758: 16f70663 beq a4,a5,8002e8c4 <_ZL9M111Flashjh+0x20c> + 8002e75c: 00813083 ld ra,8(sp) + 8002e760: 0019e797 auipc a5,0x19e + 8002e764: d4078c23 sb zero,-680(a5) # 801cc4b8 <_ZL10flash_mode> + 8002e768: 01010113 addi sp,sp,16 + 8002e76c: 00008067 ret + 8002e770: 0019e517 auipc a0,0x19e + 8002e774: d4950513 addi a0,a0,-695 # 801cc4b9 <_ZL14flash_sequence> + 8002e778: 00054683 lbu a3,0(a0) + 8002e77c: 04069863 bnez a3,8002e7cc <_ZL9M111Flashjh+0x114> + 8002e780: 000057b7 lui a5,0x5 + 8002e784: 55578793 addi a5,a5,1365 # 5555 <_entry_offset+0x5555> + 8002e788: fcf71ae3 bne a4,a5,8002e75c <_ZL9M111Flashjh+0xa4> + 8002e78c: 0aa00793 li a5,170 + 8002e790: fcf596e3 bne a1,a5,8002e75c <_ZL9M111Flashjh+0xa4> + 8002e794: 00100793 li a5,1 + 8002e798: 00f50023 sb a5,0(a0) + 8002e79c: f95ff06f j 8002e730 <_ZL9M111Flashjh+0x78> + 8002e7a0: 02079793 slli a5,a5,0x20 + 8002e7a4: 0019e717 auipc a4,0x19e + 8002e7a8: d2473703 ld a4,-732(a4) # 801cc4c8 <_ZL8FLASHROM> + 8002e7ac: 0207d793 srli a5,a5,0x20 + 8002e7b0: 00f707b3 add a5,a4,a5 + 8002e7b4: 0007c703 lbu a4,0(a5) + 8002e7b8: 00e5f5b3 and a1,a1,a4 + 8002e7bc: 00b78023 sb a1,0(a5) + 8002e7c0: 0019e797 auipc a5,0x19e + 8002e7c4: ce078c23 sb zero,-776(a5) # 801cc4b8 <_ZL10flash_mode> + 8002e7c8: 00008067 ret + 8002e7cc: 00100813 li a6,1 + 8002e7d0: 0d068c63 beq a3,a6,8002e8a8 <_ZL9M111Flashjh+0x1f0> + 8002e7d4: f8c694e3 bne a3,a2,8002e75c <_ZL9M111Flashjh+0xa4> + 8002e7d8: 000056b7 lui a3,0x5 + 8002e7dc: 55568693 addi a3,a3,1365 # 5555 <_entry_offset+0x5555> + 8002e7e0: 10d70663 beq a4,a3,8002e8ec <_ZL9M111Flashjh+0x234> + 8002e7e4: 03000713 li a4,48 + 8002e7e8: f6e59ae3 bne a1,a4,8002e75c <_ZL9M111Flashjh+0xa4> + 8002e7ec: 0007f737 lui a4,0x7f + 8002e7f0: 00e7f7b3 and a5,a5,a4 + 8002e7f4: 0019e517 auipc a0,0x19e + 8002e7f8: cd453503 ld a0,-812(a0) # 801cc4c8 <_ZL8FLASHROM> + 8002e7fc: 00001637 lui a2,0x1 + 8002e800: 0ff00593 li a1,255 + 8002e804: 00f50533 add a0,a0,a5 + 8002e808: 2200d0ef jal ra,8003ba28 + 8002e80c: f51ff06f j 8002e75c <_ZL9M111Flashjh+0xa4> + 8002e810: f4d796e3 bne a5,a3,8002e75c <_ZL9M111Flashjh+0xa4> + 8002e814: 000057b7 lui a5,0x5 + 8002e818: 55578793 addi a5,a5,1365 # 5555 <_entry_offset+0x5555> + 8002e81c: f4f710e3 bne a4,a5,8002e75c <_ZL9M111Flashjh+0xa4> + 8002e820: 0019e797 auipc a5,0x19e + 8002e824: c8078ca3 sb zero,-871(a5) # 801cc4b9 <_ZL14flash_sequence> + 8002e828: 0a000793 li a5,160 + 8002e82c: 0ef58063 beq a1,a5,8002e90c <_ZL9M111Flashjh+0x254> + 8002e830: 0ab7e063 bltu a5,a1,8002e8d0 <_ZL9M111Flashjh+0x218> + 8002e834: 08000793 li a5,128 + 8002e838: 0cf58e63 beq a1,a5,8002e914 <_ZL9M111Flashjh+0x25c> + 8002e83c: 09000793 li a5,144 + 8002e840: f0f59ee3 bne a1,a5,8002e75c <_ZL9M111Flashjh+0xa4> + 8002e844: 0019e797 auipc a5,0x19e + 8002e848: c8c78793 addi a5,a5,-884 # 801cc4d0 <_ZL8flash_id> + 8002e84c: 0007c703 lbu a4,0(a5) + 8002e850: f00716e3 bnez a4,8002e75c <_ZL9M111Flashjh+0xa4> + 8002e854: 000105b7 lui a1,0x10 + 8002e858: 00100713 li a4,1 + 8002e85c: 00000617 auipc a2,0x0 + 8002e860: c3860613 addi a2,a2,-968 # 8002e494 <_ZL11M111FlashIDj> + 8002e864: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8002e868: 00008537 lui a0,0x8 + 8002e86c: 00e78023 sb a4,0(a5) + 8002e870: 1ac050ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002e874: ee9ff06f j 8002e75c <_ZL9M111Flashjh+0xa4> + 8002e878: 0aa00713 li a4,170 + 8002e87c: eae596e3 bne a1,a4,8002e728 <_ZL9M111Flashjh+0x70> + 8002e880: 00f80023 sb a5,0(a6) + 8002e884: 0019e797 auipc a5,0x19e + 8002e888: c2078aa3 sb zero,-971(a5) # 801cc4b9 <_ZL14flash_sequence> + 8002e88c: ea5ff06f j 8002e730 <_ZL9M111Flashjh+0x78> + 8002e890: 0019e797 auipc a5,0x19e + 8002e894: c407c783 lbu a5,-960(a5) # 801cc4d0 <_ZL8flash_id> + 8002e898: e8078ce3 beqz a5,8002e730 <_ZL9M111Flashjh+0x78> + 8002e89c: 00813083 ld ra,8(sp) + 8002e8a0: 01010113 addi sp,sp,16 + 8002e8a4: df5ff06f j 8002e698 <_Z15M111FlashIDExitv.part.0> + 8002e8a8: 000037b7 lui a5,0x3 + 8002e8ac: aaa78793 addi a5,a5,-1366 # 2aaa <_entry_offset+0x2aaa> + 8002e8b0: eaf716e3 bne a4,a5,8002e75c <_ZL9M111Flashjh+0xa4> + 8002e8b4: 05500793 li a5,85 + 8002e8b8: eaf592e3 bne a1,a5,8002e75c <_ZL9M111Flashjh+0xa4> + 8002e8bc: 00c50023 sb a2,0(a0) # 8000 <_entry_offset+0x8000> + 8002e8c0: e71ff06f j 8002e730 <_ZL9M111Flashjh+0x78> + 8002e8c4: 05500793 li a5,85 + 8002e8c8: e8f59ae3 bne a1,a5,8002e75c <_ZL9M111Flashjh+0xa4> + 8002e8cc: ec9ff06f j 8002e794 <_ZL9M111Flashjh+0xdc> + 8002e8d0: 0f000793 li a5,240 + 8002e8d4: e8f594e3 bne a1,a5,8002e75c <_ZL9M111Flashjh+0xa4> + 8002e8d8: 0019e797 auipc a5,0x19e + 8002e8dc: bf87c783 lbu a5,-1032(a5) # 801cc4d0 <_ZL8flash_id> + 8002e8e0: e6078ee3 beqz a5,8002e75c <_ZL9M111Flashjh+0xa4> + 8002e8e4: db5ff0ef jal ra,8002e698 <_Z15M111FlashIDExitv.part.0> + 8002e8e8: e75ff06f j 8002e75c <_ZL9M111Flashjh+0xa4> + 8002e8ec: 01000713 li a4,16 + 8002e8f0: eee59ae3 bne a1,a4,8002e7e4 <_ZL9M111Flashjh+0x12c> + 8002e8f4: 00080637 lui a2,0x80 + 8002e8f8: 0ff00593 li a1,255 + 8002e8fc: 0019e517 auipc a0,0x19e + 8002e900: bcc53503 ld a0,-1076(a0) # 801cc4c8 <_ZL8FLASHROM> + 8002e904: 1240d0ef jal ra,8003ba28 + 8002e908: e55ff06f j 8002e75c <_ZL9M111Flashjh+0xa4> + 8002e90c: 00c80023 sb a2,0(a6) + 8002e910: e21ff06f j 8002e730 <_ZL9M111Flashjh+0x78> + 8002e914: 00300793 li a5,3 + 8002e918: 00f80023 sb a5,0(a6) + 8002e91c: e15ff06f j 8002e730 <_ZL9M111Flashjh+0x78> + +000000008002e920 <_Z14Mapper111_InitP8CartInfo>: + 8002e920: fe010113 addi sp,sp,-32 + 8002e924: 00113c23 sd ra,24(sp) + 8002e928: 00813823 sd s0,16(sp) + 8002e92c: 00913423 sd s1,8(sp) + 8002e930: 00000797 auipc a5,0x0 + 8002e934: cb078793 addi a5,a5,-848 # 8002e5e0 <_ZL9M111Powerv> + 8002e938: 00f53023 sd a5,0(a0) + 8002e93c: 00000797 auipc a5,0x0 + 8002e940: c6078793 addi a5,a5,-928 # 8002e59c <_ZL9M111Closev> + 8002e944: 00f53823 sd a5,16(a0) + 8002e948: 00050413 mv s0,a0 + 8002e94c: 00008537 lui a0,0x8 + 8002e950: b1de30ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002e954: 00050593 mv a1,a0 + 8002e958: 0019e497 auipc s1,0x19e + 8002e95c: b6848493 addi s1,s1,-1176 # 801cc4c0 <_ZL6CHRRAM> + 8002e960: 00100693 li a3,1 + 8002e964: 00008637 lui a2,0x8 + 8002e968: 01000513 li a0,16 + 8002e96c: 00b4b023 sd a1,0(s1) + 8002e970: c55e10ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 8002e974: 00000797 auipc a5,0x0 + 8002e978: c0478793 addi a5,a5,-1020 # 8002e578 <_ZL12StateRestorei> + 8002e97c: 00000693 li a3,0 + 8002e980: 00000613 li a2,0 + 8002e984: fff00593 li a1,-1 + 8002e988: 0001d517 auipc a0,0x1d + 8002e98c: 74850513 addi a0,a0,1864 # 8004c0d0 <_ZL9StateRegs> + 8002e990: 0019e717 auipc a4,0x19e + 8002e994: ccf73423 sd a5,-824(a4) # 801cc658 + 8002e998: e78d10ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002e99c: 0004b503 ld a0,0(s1) + 8002e9a0: 00017697 auipc a3,0x17 + 8002e9a4: cd868693 addi a3,a3,-808 # 80045678 <_ZL10prot_array+0x10> + 8002e9a8: 00000613 li a2,0 + 8002e9ac: 000085b7 lui a1,0x8 + 8002e9b0: e60d10ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002e9b4: 04c42783 lw a5,76(s0) + 8002e9b8: 00f03733 snez a4,a5 + 8002e9bc: 0019e697 auipc a3,0x19e + 8002e9c0: aee68fa3 sb a4,-1281(a3) # 801cc4bb <_ZL5flash> + 8002e9c4: 00079c63 bnez a5,8002e9dc <_Z14Mapper111_InitP8CartInfo+0xbc> + 8002e9c8: 01813083 ld ra,24(sp) + 8002e9cc: 01013403 ld s0,16(sp) + 8002e9d0: 00813483 ld s1,8(sp) + 8002e9d4: 02010113 addi sp,sp,32 + 8002e9d8: 00008067 ret + 8002e9dc: 00080537 lui a0,0x80 + 8002e9e0: a8de30ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002e9e4: 00080737 lui a4,0x80 + 8002e9e8: 02e42c23 sw a4,56(s0) + 8002e9ec: 0019e497 auipc s1,0x19e + 8002e9f0: adc48493 addi s1,s1,-1316 # 801cc4c8 <_ZL8FLASHROM> + 8002e9f4: 00017697 auipc a3,0x17 + 8002e9f8: 6f468693 addi a3,a3,1780 # 800460e8 <_ZL3lut+0x288> + 8002e9fc: 00000613 li a2,0 + 8002ea00: 000805b7 lui a1,0x80 + 8002ea04: 00a43c23 sd a0,24(s0) + 8002ea08: 00a4b023 sd a0,0(s1) + 8002ea0c: e04d10ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002ea10: fff00593 li a1,-1 + 8002ea14: 0001e517 auipc a0,0x1e + 8002ea18: 6f450513 addi a0,a0,1780 # 8004d108 <_ZL9FlashRegs> + 8002ea1c: 00000693 li a3,0 + 8002ea20: 00000613 li a2,0 + 8002ea24: decd10ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002ea28: 0004b583 ld a1,0(s1) + 8002ea2c: 0019d817 auipc a6,0x19d + 8002ea30: 23482803 lw a6,564(a6) # 801cbc60 + 8002ea34: 00080537 lui a0,0x80 + 8002ea38: 00e8181b slliw a6,a6,0xe + 8002ea3c: 00058713 mv a4,a1 + 8002ea40: 00a58533 add a0,a1,a0 + 8002ea44: 00000793 li a5,0 + 8002ea48: 0019d897 auipc a7,0x19d + 8002ea4c: 21088893 addi a7,a7,528 # 801cbc58 + 8002ea50: 0008b683 ld a3,0(a7) + 8002ea54: 02079613 slli a2,a5,0x20 + 8002ea58: 02065613 srli a2,a2,0x20 + 8002ea5c: 00c686b3 add a3,a3,a2 + 8002ea60: 0006c603 lbu a2,0(a3) + 8002ea64: 0017879b addiw a5,a5,1 + 8002ea68: 0107b6b3 sltu a3,a5,a6 + 8002ea6c: 40d006b3 neg a3,a3 + 8002ea70: 00c70023 sb a2,0(a4) # 80000 <_entry_offset+0x80000> + 8002ea74: 00170713 addi a4,a4,1 + 8002ea78: 00d7f7b3 and a5,a5,a3 + 8002ea7c: fca71ae3 bne a4,a0,8002ea50 <_Z14Mapper111_InitP8CartInfo+0x130> + 8002ea80: 01013403 ld s0,16(sp) + 8002ea84: 01813083 ld ra,24(sp) + 8002ea88: 00813483 ld s1,8(sp) + 8002ea8c: 00000693 li a3,0 + 8002ea90: 00080637 lui a2,0x80 + 8002ea94: 01000513 li a0,16 + 8002ea98: 02010113 addi sp,sp,32 + 8002ea9c: a59e106f j 800104f4 <_Z19SetupCartPRGMappingiPhji> + +000000008002eaa0 <_ZL9M156Resetv>: + 8002eaa0: 0019e797 auipc a5,0x19e + 8002eaa4: a5078793 addi a5,a5,-1456 # 801cc4f0 <_ZL5chrlo> + 8002eaa8: 0019e717 auipc a4,0x19e + 8002eaac: a4070713 addi a4,a4,-1472 # 801cc4e8 <_ZL5chrhi> + 8002eab0: 0019e697 auipc a3,0x19e + 8002eab4: a4868693 addi a3,a3,-1464 # 801cc4f8 <_ZL8WRAMSIZE> + 8002eab8: 00078023 sb zero,0(a5) + 8002eabc: 00070023 sb zero,0(a4) + 8002eac0: 00178793 addi a5,a5,1 + 8002eac4: 00170713 addi a4,a4,1 + 8002eac8: fed798e3 bne a5,a3,8002eab8 <_ZL9M156Resetv+0x18> + 8002eacc: 0019e797 auipc a5,0x19e + 8002ead0: a0078323 sb zero,-1530(a5) # 801cc4d2 <_ZL3prg> + 8002ead4: 0019e797 auipc a5,0x19e + 8002ead8: a0078623 sb zero,-1524(a5) # 801cc4e0 <_ZL4mirr> + 8002eadc: 0019e797 auipc a5,0x19e + 8002eae0: 9e078aa3 sb zero,-1547(a5) # 801cc4d1 <_ZL10mirrisused> + 8002eae4: 00008067 ret + +000000008002eae8 <_ZL9M156Closev>: + 8002eae8: 0019e517 auipc a0,0x19e + 8002eaec: 9f053503 ld a0,-1552(a0) # 801cc4d8 <_ZL4WRAM> + 8002eaf0: 02050263 beqz a0,8002eb14 <_ZL9M156Closev+0x2c> + 8002eaf4: ff010113 addi sp,sp,-16 + 8002eaf8: 00113423 sd ra,8(sp) + 8002eafc: a45e30ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002eb00: 00813083 ld ra,8(sp) + 8002eb04: 0019e797 auipc a5,0x19e + 8002eb08: 9c07ba23 sd zero,-1580(a5) # 801cc4d8 <_ZL4WRAM> + 8002eb0c: 01010113 addi sp,sp,16 + 8002eb10: 00008067 ret + 8002eb14: 0019e797 auipc a5,0x19e + 8002eb18: 9c07b223 sd zero,-1596(a5) # 801cc4d8 <_ZL4WRAM> + 8002eb1c: 00008067 ret + +000000008002eb20 <_ZL4Syncv>: + 8002eb20: fd010113 addi sp,sp,-48 + 8002eb24: 02813023 sd s0,32(sp) + 8002eb28: 00913c23 sd s1,24(sp) + 8002eb2c: 01213823 sd s2,16(sp) + 8002eb30: 01313423 sd s3,8(sp) + 8002eb34: 02113423 sd ra,40(sp) + 8002eb38: 0019e917 auipc s2,0x19e + 8002eb3c: 9b890913 addi s2,s2,-1608 # 801cc4f0 <_ZL5chrlo> + 8002eb40: 0019e497 auipc s1,0x19e + 8002eb44: 9a848493 addi s1,s1,-1624 # 801cc4e8 <_ZL5chrhi> + 8002eb48: 00000413 li s0,0 + 8002eb4c: 000029b7 lui s3,0x2 + 8002eb50: 0004c583 lbu a1,0(s1) + 8002eb54: 00094783 lbu a5,0(s2) + 8002eb58: 00040513 mv a0,s0 + 8002eb5c: 0085959b slliw a1,a1,0x8 + 8002eb60: 00f5e5b3 or a1,a1,a5 + 8002eb64: 0005859b sext.w a1,a1 + 8002eb68: 4004041b addiw s0,s0,1024 + 8002eb6c: b38e20ef jal ra,80010ea4 <_Z7setchr1jj> + 8002eb70: 00190913 addi s2,s2,1 + 8002eb74: 00148493 addi s1,s1,1 + 8002eb78: fd341ce3 bne s0,s3,8002eb50 <_ZL4Syncv+0x30> + 8002eb7c: 00000613 li a2,0 + 8002eb80: 000065b7 lui a1,0x6 + 8002eb84: 01000513 li a0,16 + 8002eb88: d61e10ef jal ra,800108e8 <_Z8setprg8rijj> + 8002eb8c: 0019e597 auipc a1,0x19e + 8002eb90: 9465c583 lbu a1,-1722(a1) # 801cc4d2 <_ZL3prg> + 8002eb94: 00008537 lui a0,0x8 + 8002eb98: 8c0e20ef jal ra,80010c58 <_Z8setprg16jj> + 8002eb9c: 0000c537 lui a0,0xc + 8002eba0: fff00593 li a1,-1 + 8002eba4: 8b4e20ef jal ra,80010c58 <_Z8setprg16jj> + 8002eba8: 0019e797 auipc a5,0x19e + 8002ebac: 9297c783 lbu a5,-1751(a5) # 801cc4d1 <_ZL10mirrisused> + 8002ebb0: 00200513 li a0,2 + 8002ebb4: 00078863 beqz a5,8002ebc4 <_ZL4Syncv+0xa4> + 8002ebb8: 0019e517 auipc a0,0x19e + 8002ebbc: 92854503 lbu a0,-1752(a0) # 801cc4e0 <_ZL4mirr> + 8002ebc0: 00154513 xori a0,a0,1 + 8002ebc4: 02013403 ld s0,32(sp) + 8002ebc8: 02813083 ld ra,40(sp) + 8002ebcc: 01813483 ld s1,24(sp) + 8002ebd0: 01013903 ld s2,16(sp) + 8002ebd4: 00813983 ld s3,8(sp) + 8002ebd8: 03010113 addi sp,sp,48 + 8002ebdc: c6ce206f j 80011048 <_Z9setmirrori> + +000000008002ebe0 <_ZL12StateRestorei>: + 8002ebe0: f41ff06f j 8002eb20 <_ZL4Syncv> + +000000008002ebe4 <_ZL9M156Writejh>: + 8002ebe4: ffff47b7 lui a5,0xffff4 + 8002ebe8: 00a787bb addw a5,a5,a0 + 8002ebec: 0007869b sext.w a3,a5 + 8002ebf0: 01400713 li a4,20 + 8002ebf4: 08d76463 bltu a4,a3,8002ec7c <_ZL9M156Writejh+0x98> + 8002ebf8: 02079793 slli a5,a5,0x20 + 8002ebfc: 0207d793 srli a5,a5,0x20 + 8002ec00: 00017717 auipc a4,0x17 + 8002ec04: 50870713 addi a4,a4,1288 # 80046108 <_ZL3lut+0x2a8> + 8002ec08: 00279793 slli a5,a5,0x2 + 8002ec0c: 00e787b3 add a5,a5,a4 + 8002ec10: 0007a783 lw a5,0(a5) # ffffffffffff4000 <_end+0xffffffff7fe1f000> + 8002ec14: 00e787b3 add a5,a5,a4 + 8002ec18: 00078067 jr a5 + 8002ec1c: 00357513 andi a0,a0,3 + 8002ec20: 0019e797 auipc a5,0x19e + 8002ec24: 8cc78793 addi a5,a5,-1844 # 801cc4ec <_ZL5chrhi+0x4> + 8002ec28: 00f50533 add a0,a0,a5 + 8002ec2c: 00b50023 sb a1,0(a0) + 8002ec30: ef1ff06f j 8002eb20 <_ZL4Syncv> + 8002ec34: 00357513 andi a0,a0,3 + 8002ec38: 0019e797 auipc a5,0x19e + 8002ec3c: 8b878793 addi a5,a5,-1864 # 801cc4f0 <_ZL5chrlo> + 8002ec40: 00a78533 add a0,a5,a0 + 8002ec44: 00b50023 sb a1,0(a0) + 8002ec48: ed9ff06f j 8002eb20 <_ZL4Syncv> + 8002ec4c: 00357513 andi a0,a0,3 + 8002ec50: 0019e797 auipc a5,0x19e + 8002ec54: 89878793 addi a5,a5,-1896 # 801cc4e8 <_ZL5chrhi> + 8002ec58: 00a78533 add a0,a5,a0 + 8002ec5c: 00b50023 sb a1,0(a0) + 8002ec60: ec1ff06f j 8002eb20 <_ZL4Syncv> + 8002ec64: 00357513 andi a0,a0,3 + 8002ec68: 0019e797 auipc a5,0x19e + 8002ec6c: 88c78793 addi a5,a5,-1908 # 801cc4f4 <_ZL5chrlo+0x4> + 8002ec70: 00f50533 add a0,a0,a5 + 8002ec74: 00b50023 sb a1,0(a0) + 8002ec78: ea9ff06f j 8002eb20 <_ZL4Syncv> + 8002ec7c: 00008067 ret + 8002ec80: 0019e797 auipc a5,0x19e + 8002ec84: 84b78923 sb a1,-1966(a5) # 801cc4d2 <_ZL3prg> + 8002ec88: e99ff06f j 8002eb20 <_ZL4Syncv> + 8002ec8c: 0019e797 auipc a5,0x19e + 8002ec90: 84b78a23 sb a1,-1964(a5) # 801cc4e0 <_ZL4mirr> + 8002ec94: 00100793 li a5,1 + 8002ec98: 0019e717 auipc a4,0x19e + 8002ec9c: 82f70ca3 sb a5,-1991(a4) # 801cc4d1 <_ZL10mirrisused> + 8002eca0: e81ff06f j 8002eb20 <_ZL4Syncv> + +000000008002eca4 <_ZL9M156Powerv>: + 8002eca4: ff010113 addi sp,sp,-16 + 8002eca8: 00113423 sd ra,8(sp) + 8002ecac: 0019e797 auipc a5,0x19e + 8002ecb0: 84478793 addi a5,a5,-1980 # 801cc4f0 <_ZL5chrlo> + 8002ecb4: 0019e717 auipc a4,0x19e + 8002ecb8: 83470713 addi a4,a4,-1996 # 801cc4e8 <_ZL5chrhi> + 8002ecbc: 0019e697 auipc a3,0x19e + 8002ecc0: 83c68693 addi a3,a3,-1988 # 801cc4f8 <_ZL8WRAMSIZE> + 8002ecc4: 00078023 sb zero,0(a5) + 8002ecc8: 00070023 sb zero,0(a4) + 8002eccc: 00178793 addi a5,a5,1 + 8002ecd0: 00170713 addi a4,a4,1 + 8002ecd4: fed798e3 bne a5,a3,8002ecc4 <_ZL9M156Powerv+0x20> + 8002ecd8: 0019d797 auipc a5,0x19d + 8002ecdc: 7e078d23 sb zero,2042(a5) # 801cc4d2 <_ZL3prg> + 8002ece0: 0019e797 auipc a5,0x19e + 8002ece4: 80078023 sb zero,-2048(a5) # 801cc4e0 <_ZL4mirr> + 8002ece8: 0019d797 auipc a5,0x19d + 8002ecec: 7e0784a3 sb zero,2025(a5) # 801cc4d1 <_ZL10mirrisused> + 8002ecf0: e31ff0ef jal ra,8002eb20 <_ZL4Syncv> + 8002ecf4: 000105b7 lui a1,0x10 + 8002ecf8: fffe2617 auipc a2,0xfffe2 + 8002ecfc: 96860613 addi a2,a2,-1688 # 80010660 <_Z6CartBRj> + 8002ed00: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8002ed04: 00006537 lui a0,0x6 + 8002ed08: 515040ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002ed0c: 000085b7 lui a1,0x8 + 8002ed10: fffe2617 auipc a2,0xfffe2 + 8002ed14: 97c60613 addi a2,a2,-1668 # 8001068c <_Z6CartBWjh> + 8002ed18: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 8002ed1c: 00006537 lui a0,0x6 + 8002ed20: 609040ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002ed24: 0000d5b7 lui a1,0xd + 8002ed28: 00000617 auipc a2,0x0 + 8002ed2c: ebc60613 addi a2,a2,-324 # 8002ebe4 <_ZL9M156Writejh> + 8002ed30: fff58593 addi a1,a1,-1 # cfff <_entry_offset+0xcfff> + 8002ed34: 0000c537 lui a0,0xc + 8002ed38: 5f1040ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002ed3c: 00813083 ld ra,8(sp) + 8002ed40: 0019d517 auipc a0,0x19d + 8002ed44: 7b852503 lw a0,1976(a0) # 801cc4f8 <_ZL8WRAMSIZE> + 8002ed48: 0019d617 auipc a2,0x19d + 8002ed4c: 79063603 ld a2,1936(a2) # 801cc4d8 <_ZL4WRAM> + 8002ed50: 000065b7 lui a1,0x6 + 8002ed54: 00a5551b srliw a0,a0,0xa + 8002ed58: 01010113 addi sp,sp,16 + 8002ed5c: ab8d106f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +000000008002ed60 <_Z14Mapper156_InitP8CartInfo>: + 8002ed60: fe010113 addi sp,sp,-32 + 8002ed64: 00113c23 sd ra,24(sp) + 8002ed68: 00813823 sd s0,16(sp) + 8002ed6c: 00913423 sd s1,8(sp) + 8002ed70: 00000797 auipc a5,0x0 + 8002ed74: d3078793 addi a5,a5,-720 # 8002eaa0 <_ZL9M156Resetv> + 8002ed78: 00f53423 sd a5,8(a0) + 8002ed7c: 00000797 auipc a5,0x0 + 8002ed80: f2878793 addi a5,a5,-216 # 8002eca4 <_ZL9M156Powerv> + 8002ed84: 00f53023 sd a5,0(a0) + 8002ed88: 00000797 auipc a5,0x0 + 8002ed8c: d6078793 addi a5,a5,-672 # 8002eae8 <_ZL9M156Closev> + 8002ed90: 0019d417 auipc s0,0x19d + 8002ed94: 76840413 addi s0,s0,1896 # 801cc4f8 <_ZL8WRAMSIZE> + 8002ed98: 00f53823 sd a5,16(a0) + 8002ed9c: 000027b7 lui a5,0x2 + 8002eda0: 00002537 lui a0,0x2 + 8002eda4: 00f42023 sw a5,0(s0) + 8002eda8: ec4e30ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002edac: 00042603 lw a2,0(s0) + 8002edb0: 00050593 mv a1,a0 + 8002edb4: 0019d497 auipc s1,0x19d + 8002edb8: 72448493 addi s1,s1,1828 # 801cc4d8 <_ZL4WRAM> + 8002edbc: 00100693 li a3,1 + 8002edc0: 01000513 li a0,16 + 8002edc4: 00b4b023 sd a1,0(s1) + 8002edc8: f2ce10ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8002edcc: 00042583 lw a1,0(s0) + 8002edd0: 0004b503 ld a0,0(s1) + 8002edd4: 00016697 auipc a3,0x16 + 8002edd8: 55468693 addi a3,a3,1364 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 8002eddc: 00000613 li a2,0 + 8002ede0: a30d10ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002ede4: 01013403 ld s0,16(sp) + 8002ede8: 01813083 ld ra,24(sp) + 8002edec: 00813483 ld s1,8(sp) + 8002edf0: 00000797 auipc a5,0x0 + 8002edf4: df078793 addi a5,a5,-528 # 8002ebe0 <_ZL12StateRestorei> + 8002edf8: 0019e717 auipc a4,0x19e + 8002edfc: 86f73023 sd a5,-1952(a4) # 801cc658 + 8002ee00: 00000693 li a3,0 + 8002ee04: 00000613 li a2,0 + 8002ee08: fff00593 li a1,-1 + 8002ee0c: 0001d517 auipc a0,0x1d + 8002ee10: 2f450513 addi a0,a0,756 # 8004c100 <_ZL9StateRegs> + 8002ee14: 02010113 addi sp,sp,32 + 8002ee18: 9f8d106f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002ee1c <_ZL4Syncv>: + 8002ee1c: fe010113 addi sp,sp,-32 + 8002ee20: 00813823 sd s0,16(sp) + 8002ee24: 0019d417 auipc s0,0x19d + 8002ee28: 6da40413 addi s0,s0,1754 # 801cc4fe <_ZL3cmd> + 8002ee2c: 00045503 lhu a0,0(s0) + 8002ee30: 00113c23 sd ra,24(sp) + 8002ee34: 00913423 sd s1,8(sp) + 8002ee38: fff54513 not a0,a0 + 8002ee3c: 00157513 andi a0,a0,1 + 8002ee40: a08e20ef jal ra,80011048 <_Z9setmirrori> + 8002ee44: 00000513 li a0,0 + 8002ee48: 8bce20ef jal ra,80010f04 <_Z7setchr8j> + 8002ee4c: 00045703 lhu a4,0(s0) + 8002ee50: 00277693 andi a3,a4,2 + 8002ee54: 0007079b sext.w a5,a4 + 8002ee58: 08068c63 beqz a3,8002eef0 <_ZL4Syncv+0xd4> + 8002ee5c: 4027d79b sraiw a5,a5,0x2 + 8002ee60: 0019d497 auipc s1,0x19d + 8002ee64: 6a048493 addi s1,s1,1696 # 801cc500 <_ZL4bank> + 8002ee68: 10077713 andi a4,a4,256 + 8002ee6c: 0004d583 lhu a1,0(s1) + 8002ee70: 03f7f793 andi a5,a5,63 + 8002ee74: 04071463 bnez a4,8002eebc <_ZL4Syncv+0xa0> + 8002ee78: 0065f593 andi a1,a1,6 + 8002ee7c: 00f5e5b3 or a1,a1,a5 + 8002ee80: 00008537 lui a0,0x8 + 8002ee84: dd5e10ef jal ra,80010c58 <_Z8setprg16jj> + 8002ee88: 00045783 lhu a5,0(s0) + 8002ee8c: 0004d583 lhu a1,0(s1) + 8002ee90: 01013403 ld s0,16(sp) + 8002ee94: 4027d79b sraiw a5,a5,0x2 + 8002ee98: 01813083 ld ra,24(sp) + 8002ee9c: 00813483 ld s1,8(sp) + 8002eea0: 03f7f793 andi a5,a5,63 + 8002eea4: 0065f593 andi a1,a1,6 + 8002eea8: 00f5e5b3 or a1,a1,a5 + 8002eeac: 0000c537 lui a0,0xc + 8002eeb0: 0015e593 ori a1,a1,1 + 8002eeb4: 02010113 addi sp,sp,32 + 8002eeb8: da1e106f j 80010c58 <_Z8setprg16jj> + 8002eebc: 00b7e5b3 or a1,a5,a1 + 8002eec0: 00008537 lui a0,0x8 + 8002eec4: d95e10ef jal ra,80010c58 <_Z8setprg16jj> + 8002eec8: 00045583 lhu a1,0(s0) + 8002eecc: 01013403 ld s0,16(sp) + 8002eed0: 01813083 ld ra,24(sp) + 8002eed4: 00813483 ld s1,8(sp) + 8002eed8: 4025d59b sraiw a1,a1,0x2 + 8002eedc: 0385f593 andi a1,a1,56 + 8002eee0: 0000c537 lui a0,0xc + 8002eee4: 0075e593 ori a1,a1,7 + 8002eee8: 02010113 addi sp,sp,32 + 8002eeec: d6de106f j 80010c58 <_Z8setprg16jj> + 8002eef0: 0019d497 auipc s1,0x19d + 8002eef4: 61048493 addi s1,s1,1552 # 801cc500 <_ZL4bank> + 8002eef8: 0004d583 lhu a1,0(s1) + 8002eefc: 4027d79b sraiw a5,a5,0x2 + 8002ef00: 03f7f793 andi a5,a5,63 + 8002ef04: 00b7e5b3 or a1,a5,a1 + 8002ef08: 00008537 lui a0,0x8 + 8002ef0c: d4de10ef jal ra,80010c58 <_Z8setprg16jj> + 8002ef10: 00045783 lhu a5,0(s0) + 8002ef14: 0004d583 lhu a1,0(s1) + 8002ef18: 01013403 ld s0,16(sp) + 8002ef1c: 01813083 ld ra,24(sp) + 8002ef20: 00813483 ld s1,8(sp) + 8002ef24: 4027d79b sraiw a5,a5,0x2 + 8002ef28: 03f7f793 andi a5,a5,63 + 8002ef2c: 0000c537 lui a0,0xc + 8002ef30: 00b7e5b3 or a1,a5,a1 + 8002ef34: 02010113 addi sp,sp,32 + 8002ef38: d21e106f j 80010c58 <_Z8setprg16jj> + +000000008002ef3c <_ZL12StateRestorei>: + 8002ef3c: ee1ff06f j 8002ee1c <_ZL4Syncv> + +000000008002ef40 <_ZL19UNLN625092WriteBankjh>: + 8002ef40: 00757513 andi a0,a0,7 + 8002ef44: 0019d797 auipc a5,0x19d + 8002ef48: 5aa79e23 sh a0,1468(a5) # 801cc500 <_ZL4bank> + 8002ef4c: ed1ff06f j 8002ee1c <_ZL4Syncv> + +000000008002ef50 <_ZL15UNLN625092Powerv>: + 8002ef50: ff010113 addi sp,sp,-16 + 8002ef54: 00113423 sd ra,8(sp) + 8002ef58: 00813023 sd s0,0(sp) + 8002ef5c: 0019d797 auipc a5,0x19d + 8002ef60: 5a079123 sh zero,1442(a5) # 801cc4fe <_ZL3cmd> + 8002ef64: 00010437 lui s0,0x10 + 8002ef68: 0019d797 auipc a5,0x19d + 8002ef6c: 58079c23 sh zero,1432(a5) # 801cc500 <_ZL4bank> + 8002ef70: eadff0ef jal ra,8002ee1c <_ZL4Syncv> + 8002ef74: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002ef78: fffe1617 auipc a2,0xfffe1 + 8002ef7c: 6e860613 addi a2,a2,1768 # 80010660 <_Z6CartBRj> + 8002ef80: 00008537 lui a0,0x8 + 8002ef84: 299040ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002ef88: 0000c5b7 lui a1,0xc + 8002ef8c: 00000617 auipc a2,0x0 + 8002ef90: 06c60613 addi a2,a2,108 # 8002eff8 <_ZL22UNLN625092WriteCommandjh> + 8002ef94: fff58593 addi a1,a1,-1 # bfff <_entry_offset+0xbfff> + 8002ef98: 00008537 lui a0,0x8 + 8002ef9c: 38d040ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002efa0: fff40593 addi a1,s0,-1 + 8002efa4: 00013403 ld s0,0(sp) + 8002efa8: 00813083 ld ra,8(sp) + 8002efac: 00000617 auipc a2,0x0 + 8002efb0: f9460613 addi a2,a2,-108 # 8002ef40 <_ZL19UNLN625092WriteBankjh> + 8002efb4: 0000c537 lui a0,0xc + 8002efb8: 01010113 addi sp,sp,16 + 8002efbc: 36d0406f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002efc0 <_ZL15UNLN625092Resetv>: + 8002efc0: 0019d797 auipc a5,0x19d + 8002efc4: 53c78793 addi a5,a5,1340 # 801cc4fc <_ZL3ass> + 8002efc8: 0007d583 lhu a1,0(a5) + 8002efcc: 00017517 auipc a0,0x17 + 8002efd0: 19c50513 addi a0,a0,412 # 80046168 <_ZL3lut+0x308> + 8002efd4: 0019d717 auipc a4,0x19d + 8002efd8: 52071523 sh zero,1322(a4) # 801cc4fe <_ZL3cmd> + 8002efdc: 0015859b addiw a1,a1,1 + 8002efe0: 03059593 slli a1,a1,0x30 + 8002efe4: 0305d593 srli a1,a1,0x30 + 8002efe8: 0019d717 auipc a4,0x19d + 8002efec: 50071c23 sh zero,1304(a4) # 801cc500 <_ZL4bank> + 8002eff0: 00b79023 sh a1,0(a5) + 8002eff4: 5540c06f j 8003b548 + +000000008002eff8 <_ZL22UNLN625092WriteCommandjh>: + 8002eff8: 0019d797 auipc a5,0x19d + 8002effc: 50a79323 sh a0,1286(a5) # 801cc4fe <_ZL3cmd> + 8002f000: 000087b7 lui a5,0x8 + 8002f004: 0f878793 addi a5,a5,248 # 80f8 <_entry_offset+0x80f8> + 8002f008: 00f50463 beq a0,a5,8002f010 <_ZL22UNLN625092WriteCommandjh+0x18> + 8002f00c: e11ff06f j 8002ee1c <_ZL4Syncv> + 8002f010: ff010113 addi sp,sp,-16 + 8002f014: 00813023 sd s0,0(sp) + 8002f018: 0019d417 auipc s0,0x19d + 8002f01c: 4e440413 addi s0,s0,1252 # 801cc4fc <_ZL3ass> + 8002f020: 00045583 lhu a1,0(s0) + 8002f024: 00008537 lui a0,0x8 + 8002f028: 00113423 sd ra,8(sp) + 8002f02c: c2de10ef jal ra,80010c58 <_Z8setprg16jj> + 8002f030: 00045583 lhu a1,0(s0) + 8002f034: 00013403 ld s0,0(sp) + 8002f038: 00813083 ld ra,8(sp) + 8002f03c: 0000c537 lui a0,0xc + 8002f040: 01010113 addi sp,sp,16 + 8002f044: c15e106f j 80010c58 <_Z8setprg16jj> + +000000008002f048 <_Z15UNLN625092_InitP8CartInfo>: + 8002f048: 00000797 auipc a5,0x0 + 8002f04c: f0878793 addi a5,a5,-248 # 8002ef50 <_ZL15UNLN625092Powerv> + 8002f050: 00f53023 sd a5,0(a0) # c000 <_entry_offset+0xc000> + 8002f054: 00000797 auipc a5,0x0 + 8002f058: f6c78793 addi a5,a5,-148 # 8002efc0 <_ZL15UNLN625092Resetv> + 8002f05c: 00f53423 sd a5,8(a0) + 8002f060: 00000797 auipc a5,0x0 + 8002f064: edc78793 addi a5,a5,-292 # 8002ef3c <_ZL12StateRestorei> + 8002f068: 00000693 li a3,0 + 8002f06c: 00000613 li a2,0 + 8002f070: fff00593 li a1,-1 + 8002f074: 0001d517 auipc a0,0x1d + 8002f078: 10450513 addi a0,a0,260 # 8004c178 <_ZL9StateRegs> + 8002f07c: 0019d717 auipc a4,0x19d + 8002f080: 5cf73e23 sd a5,1500(a4) # 801cc658 + 8002f084: f8dd006f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002f088 <_ZL4Syncv>: + 8002f088: ff010113 addi sp,sp,-16 + 8002f08c: 00813023 sd s0,0(sp) + 8002f090: 0019d417 auipc s0,0x19d + 8002f094: 49040413 addi s0,s0,1168 # 801cc520 <_ZL7chr_reg> + 8002f098: 00044583 lbu a1,0(s0) + 8002f09c: 00000513 li a0,0 + 8002f0a0: 00113423 sd ra,8(sp) + 8002f0a4: e21e10ef jal ra,80010ec4 <_Z7setchr2jj> + 8002f0a8: 00144583 lbu a1,1(s0) + 8002f0ac: 00001537 lui a0,0x1 + 8002f0b0: 80050513 addi a0,a0,-2048 # 800 <_entry_offset+0x800> + 8002f0b4: e11e10ef jal ra,80010ec4 <_Z7setchr2jj> + 8002f0b8: 00244583 lbu a1,2(s0) + 8002f0bc: 00001537 lui a0,0x1 + 8002f0c0: e05e10ef jal ra,80010ec4 <_Z7setchr2jj> + 8002f0c4: 00344583 lbu a1,3(s0) + 8002f0c8: 00002537 lui a0,0x2 + 8002f0cc: 80050513 addi a0,a0,-2048 # 1800 <_entry_offset+0x1800> + 8002f0d0: df5e10ef jal ra,80010ec4 <_Z7setchr2jj> + 8002f0d4: 01000513 li a0,16 + 8002f0d8: 00000613 li a2,0 + 8002f0dc: 000065b7 lui a1,0x6 + 8002f0e0: 809e10ef jal ra,800108e8 <_Z8setprg8rijj> + 8002f0e4: 00094797 auipc a5,0x94 + 8002f0e8: 9c47b783 ld a5,-1596(a5) # 800c2aa8 + 8002f0ec: 00000513 li a0,0 + 8002f0f0: 00078663 beqz a5,8002f0fc <_ZL4Syncv+0x74> + 8002f0f4: 0019d517 auipc a0,0x19d + 8002f0f8: 42454503 lbu a0,1060(a0) # 801cc518 <_ZL6kogame> + 8002f0fc: 000085b7 lui a1,0x8 + 8002f100: 0019d617 auipc a2,0x19d + 8002f104: 42464603 lbu a2,1060(a2) # 801cc524 <_ZL7prg_reg> + 8002f108: 9a5e10ef jal ra,80010aac <_Z9setprg16rijj> + 8002f10c: 00013403 ld s0,0(sp) + 8002f110: 00813083 ld ra,8(sp) + 8002f114: fff00593 li a1,-1 + 8002f118: 0000c537 lui a0,0xc + 8002f11c: 01010113 addi sp,sp,16 + 8002f120: b39e106f j 80010c58 <_Z8setprg16jj> + +000000008002f124 <_ZL11M68WriteROMjh>: + 8002f124: 0035d79b srliw a5,a1,0x3 + 8002f128: 0017c793 xori a5,a5,1 + 8002f12c: 0075f593 andi a1,a1,7 + 8002f130: 0017f793 andi a5,a5,1 + 8002f134: 0019d717 auipc a4,0x19d + 8002f138: 3eb70823 sb a1,1008(a4) # 801cc524 <_ZL7prg_reg> + 8002f13c: 0019d717 auipc a4,0x19d + 8002f140: 3cf70e23 sb a5,988(a4) # 801cc518 <_ZL6kogame> + 8002f144: f45ff06f j 8002f088 <_ZL4Syncv> + +000000008002f148 <_ZL11M68WriteCHRjh>: + 8002f148: 00c5551b srliw a0,a0,0xc + 8002f14c: 00357513 andi a0,a0,3 + 8002f150: 0019d797 auipc a5,0x19d + 8002f154: 3d078793 addi a5,a5,976 # 801cc520 <_ZL7chr_reg> + 8002f158: 00a78533 add a0,a5,a0 + 8002f15c: 00b50023 sb a1,0(a0) # c000 <_entry_offset+0xc000> + 8002f160: f29ff06f j 8002f088 <_ZL4Syncv> + +000000008002f164 <_ZL8M68NTfixv>: + 8002f164: 0019d717 auipc a4,0x19d + 8002f168: 3ac74703 lbu a4,940(a4) # 801cc510 <_ZL4mirr> + 8002f16c: 0019d697 auipc a3,0x19d + 8002f170: 9746b683 ld a3,-1676(a3) # 801cbae0 + 8002f174: 00377793 andi a5,a4,3 + 8002f178: 02068263 beqz a3,8002f19c <_ZL8M68NTfixv+0x38> + 8002f17c: 00200713 li a4,2 + 8002f180: 0ce78063 beq a5,a4,8002f240 <_ZL8M68NTfixv+0xdc> + 8002f184: 00300713 li a4,3 + 8002f188: 0ae78863 beq a5,a4,8002f238 <_ZL8M68NTfixv+0xd4> + 8002f18c: 00100713 li a4,1 + 8002f190: 0ae78063 beq a5,a4,8002f230 <_ZL8M68NTfixv+0xcc> + 8002f194: 00100513 li a0,1 + 8002f198: eb1e106f j 80011048 <_Z9setmirrori> + 8002f19c: 01077713 andi a4,a4,16 + 8002f1a0: fc070ee3 beqz a4,8002f17c <_ZL8M68NTfixv+0x18> + 8002f1a4: 0019d717 auipc a4,0x19d + 8002f1a8: 56070123 sb zero,1378(a4) # 801cc706 + 8002f1ac: 00200613 li a2,2 + 8002f1b0: 00093697 auipc a3,0x93 + 8002f1b4: 4506b683 ld a3,1104(a3) # 800c2600 + 8002f1b8: 00093717 auipc a4,0x93 + 8002f1bc: 24872703 lw a4,584(a4) # 800c2400 + 8002f1c0: 08c78463 beq a5,a2,8002f248 <_ZL8M68NTfixv+0xe4> + 8002f1c4: 00300613 li a2,3 + 8002f1c8: 10c78c63 beq a5,a2,8002f2e0 <_ZL8M68NTfixv+0x17c> + 8002f1cc: 00100613 li a2,1 + 8002f1d0: 0ac78a63 beq a5,a2,8002f284 <_ZL8M68NTfixv+0x120> + 8002f1d4: 0019d617 auipc a2,0x19d + 8002f1d8: 32e64603 lbu a2,814(a2) # 801cc502 <_ZL3nt1> + 8002f1dc: 0019d797 auipc a5,0x19d + 8002f1e0: 3277c783 lbu a5,807(a5) # 801cc503 <_ZL3nt2> + 8002f1e4: 08066613 ori a2,a2,128 + 8002f1e8: 0807e793 ori a5,a5,128 + 8002f1ec: 00c77633 and a2,a4,a2 + 8002f1f0: 00f777b3 and a5,a4,a5 + 8002f1f4: 00a7979b slliw a5,a5,0xa + 8002f1f8: 00a6171b slliw a4,a2,0xa + 8002f1fc: 02071713 slli a4,a4,0x20 + 8002f200: 02079793 slli a5,a5,0x20 + 8002f204: 02075713 srli a4,a4,0x20 + 8002f208: 0207d793 srli a5,a5,0x20 + 8002f20c: 0019d617 auipc a2,0x19d + 8002f210: 8b460613 addi a2,a2,-1868 # 801cbac0 + 8002f214: 00e68733 add a4,a3,a4 + 8002f218: 00f687b3 add a5,a3,a5 + 8002f21c: 00e63823 sd a4,16(a2) + 8002f220: 00e63023 sd a4,0(a2) + 8002f224: 00f63c23 sd a5,24(a2) + 8002f228: 00f63423 sd a5,8(a2) + 8002f22c: 00008067 ret + 8002f230: 00000513 li a0,0 + 8002f234: e15e106f j 80011048 <_Z9setmirrori> + 8002f238: 00300513 li a0,3 + 8002f23c: e0de106f j 80011048 <_Z9setmirrori> + 8002f240: 00200513 li a0,2 + 8002f244: e05e106f j 80011048 <_Z9setmirrori> + 8002f248: 0019d797 auipc a5,0x19d + 8002f24c: 2ba7c783 lbu a5,698(a5) # 801cc502 <_ZL3nt1> + 8002f250: 0807e793 ori a5,a5,128 + 8002f254: 00f777b3 and a5,a4,a5 + 8002f258: 00a7979b slliw a5,a5,0xa + 8002f25c: 02079793 slli a5,a5,0x20 + 8002f260: 0207d793 srli a5,a5,0x20 + 8002f264: 00f687b3 add a5,a3,a5 + 8002f268: 0019d717 auipc a4,0x19d + 8002f26c: 85870713 addi a4,a4,-1960 # 801cbac0 + 8002f270: 00f73c23 sd a5,24(a4) + 8002f274: 00f73823 sd a5,16(a4) + 8002f278: 00f73423 sd a5,8(a4) + 8002f27c: 00f73023 sd a5,0(a4) + 8002f280: 00008067 ret + 8002f284: 0019d617 auipc a2,0x19d + 8002f288: 27e64603 lbu a2,638(a2) # 801cc502 <_ZL3nt1> + 8002f28c: 0019d797 auipc a5,0x19d + 8002f290: 2777c783 lbu a5,631(a5) # 801cc503 <_ZL3nt2> + 8002f294: 08066613 ori a2,a2,128 + 8002f298: 0807e793 ori a5,a5,128 + 8002f29c: 00c77633 and a2,a4,a2 + 8002f2a0: 00f777b3 and a5,a4,a5 + 8002f2a4: 00a7979b slliw a5,a5,0xa + 8002f2a8: 00a6171b slliw a4,a2,0xa + 8002f2ac: 02071713 slli a4,a4,0x20 + 8002f2b0: 02079793 slli a5,a5,0x20 + 8002f2b4: 02075713 srli a4,a4,0x20 + 8002f2b8: 0207d793 srli a5,a5,0x20 + 8002f2bc: 0019d617 auipc a2,0x19d + 8002f2c0: 80460613 addi a2,a2,-2044 # 801cbac0 + 8002f2c4: 00e68733 add a4,a3,a4 + 8002f2c8: 00f687b3 add a5,a3,a5 + 8002f2cc: 00e63423 sd a4,8(a2) + 8002f2d0: 00e63023 sd a4,0(a2) + 8002f2d4: 00f63c23 sd a5,24(a2) + 8002f2d8: 00f63823 sd a5,16(a2) + 8002f2dc: 00008067 ret + 8002f2e0: 0019d797 auipc a5,0x19d + 8002f2e4: 2237c783 lbu a5,547(a5) # 801cc503 <_ZL3nt2> + 8002f2e8: 0807e793 ori a5,a5,128 + 8002f2ec: 00f77733 and a4,a4,a5 + 8002f2f0: 00a7171b slliw a4,a4,0xa + 8002f2f4: 02071713 slli a4,a4,0x20 + 8002f2f8: 02075713 srli a4,a4,0x20 + 8002f2fc: 00e687b3 add a5,a3,a4 + 8002f300: f69ff06f j 8002f268 <_ZL8M68NTfixv+0x104> + +000000008002f304 <_ZL12StateRestorei>: + 8002f304: ff010113 addi sp,sp,-16 + 8002f308: 00113423 sd ra,8(sp) + 8002f30c: d7dff0ef jal ra,8002f088 <_ZL4Syncv> + 8002f310: 00813083 ld ra,8(sp) + 8002f314: 01010113 addi sp,sp,16 + 8002f318: e4dff06f j 8002f164 <_ZL8M68NTfixv> + +000000008002f31c <_ZL11M68WriteMIRjh>: + 8002f31c: 0019d797 auipc a5,0x19d + 8002f320: 1eb78a23 sb a1,500(a5) # 801cc510 <_ZL4mirr> + 8002f324: e41ff06f j 8002f164 <_ZL8M68NTfixv> + +000000008002f328 <_ZL11M68WriteNT2jh>: + 8002f328: 0019d797 auipc a5,0x19d + 8002f32c: 1cb78da3 sb a1,475(a5) # 801cc503 <_ZL3nt2> + 8002f330: e35ff06f j 8002f164 <_ZL8M68NTfixv> + +000000008002f334 <_ZL11M68WriteNT1jh>: + 8002f334: 0019d797 auipc a5,0x19d + 8002f338: 1cb78723 sb a1,462(a5) # 801cc502 <_ZL3nt1> + 8002f33c: e29ff06f j 8002f164 <_ZL8M68NTfixv> + +000000008002f340 <_ZL8M68Closev>: + 8002f340: 0019d517 auipc a0,0x19d + 8002f344: 1c853503 ld a0,456(a0) # 801cc508 <_ZL4WRAM> + 8002f348: 02050263 beqz a0,8002f36c <_ZL8M68Closev+0x2c> + 8002f34c: ff010113 addi sp,sp,-16 + 8002f350: 00113423 sd ra,8(sp) + 8002f354: 9ece30ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002f358: 00813083 ld ra,8(sp) + 8002f35c: 0019d797 auipc a5,0x19d + 8002f360: 1a07b623 sd zero,428(a5) # 801cc508 <_ZL4WRAM> + 8002f364: 01010113 addi sp,sp,16 + 8002f368: 00008067 ret + 8002f36c: 0019d797 auipc a5,0x19d + 8002f370: 1807be23 sd zero,412(a5) # 801cc508 <_ZL4WRAM> + 8002f374: 00008067 ret + +000000008002f378 <_ZL7M68Readj>: + 8002f378: ff010113 addi sp,sp,-16 + 8002f37c: 0019d797 auipc a5,0x19d + 8002f380: 19c7c783 lbu a5,412(a5) # 801cc518 <_ZL6kogame> + 8002f384: 00813023 sd s0,0(sp) + 8002f388: 00113423 sd ra,8(sp) + 8002f38c: 0087f793 andi a5,a5,8 + 8002f390: 00050413 mv s0,a0 + 8002f394: 02079063 bnez a5,8002f3b4 <_ZL7M68Readj+0x3c> + 8002f398: 0019d717 auipc a4,0x19d + 8002f39c: 17c70713 addi a4,a4,380 # 801cc514 <_ZL5count> + 8002f3a0: 00072783 lw a5,0(a4) + 8002f3a4: 6f800693 li a3,1784 + 8002f3a8: 0017861b addiw a2,a5,1 + 8002f3ac: 00c72023 sw a2,0(a4) + 8002f3b0: 00d60c63 beq a2,a3,8002f3c8 <_ZL7M68Readj+0x50> + 8002f3b4: 00040513 mv a0,s0 + 8002f3b8: 00013403 ld s0,0(sp) + 8002f3bc: 00813083 ld ra,8(sp) + 8002f3c0: 01010113 addi sp,sp,16 + 8002f3c4: a9ce106f j 80010660 <_Z6CartBRj> + 8002f3c8: 00000513 li a0,0 + 8002f3cc: 0019d617 auipc a2,0x19d + 8002f3d0: 15864603 lbu a2,344(a2) # 801cc524 <_ZL7prg_reg> + 8002f3d4: 000085b7 lui a1,0x8 + 8002f3d8: ed4e10ef jal ra,80010aac <_Z9setprg16rijj> + 8002f3dc: 00040513 mv a0,s0 + 8002f3e0: 00013403 ld s0,0(sp) + 8002f3e4: 00813083 ld ra,8(sp) + 8002f3e8: 01010113 addi sp,sp,16 + 8002f3ec: a74e106f j 80010660 <_Z6CartBRj> + +000000008002f3f0 <_ZL10M68WriteLojh>: + 8002f3f0: fe010113 addi sp,sp,-32 + 8002f3f4: 00813823 sd s0,16(sp) + 8002f3f8: 00913423 sd s1,8(sp) + 8002f3fc: 00113c23 sd ra,24(sp) + 8002f400: 00058413 mv s0,a1 + 8002f404: 00050493 mv s1,a0 + 8002f408: 02059a63 bnez a1,8002f43c <_ZL10M68WriteLojh+0x4c> + 8002f40c: 0019d797 auipc a5,0x19d + 8002f410: 1007a423 sw zero,264(a5) # 801cc514 <_ZL5count> + 8002f414: 00093797 auipc a5,0x93 + 8002f418: 6947b783 ld a5,1684(a5) # 800c2aa8 + 8002f41c: 00000513 li a0,0 + 8002f420: 00078663 beqz a5,8002f42c <_ZL10M68WriteLojh+0x3c> + 8002f424: 0019d517 auipc a0,0x19d + 8002f428: 0f454503 lbu a0,244(a0) # 801cc518 <_ZL6kogame> + 8002f42c: 0019d617 auipc a2,0x19d + 8002f430: 0f864603 lbu a2,248(a2) # 801cc524 <_ZL7prg_reg> + 8002f434: 000085b7 lui a1,0x8 + 8002f438: e74e10ef jal ra,80010aac <_Z9setprg16rijj> + 8002f43c: 00040593 mv a1,s0 + 8002f440: 01013403 ld s0,16(sp) + 8002f444: 01813083 ld ra,24(sp) + 8002f448: 00048513 mv a0,s1 + 8002f44c: 00813483 ld s1,8(sp) + 8002f450: 02010113 addi sp,sp,32 + 8002f454: a38e106f j 8001068c <_Z6CartBWjh> + +000000008002f458 <_ZL8M68Powerv>: + 8002f458: fe010113 addi sp,sp,-32 + 8002f45c: 00113c23 sd ra,24(sp) + 8002f460: 00813823 sd s0,16(sp) + 8002f464: 00913423 sd s1,8(sp) + 8002f468: 01213023 sd s2,0(sp) + 8002f46c: 00008437 lui s0,0x8 + 8002f470: 0019d797 auipc a5,0x19d + 8002f474: 0a078a23 sb zero,180(a5) # 801cc524 <_ZL7prg_reg> + 8002f478: 0019d797 auipc a5,0x19d + 8002f47c: 0a078023 sb zero,160(a5) # 801cc518 <_ZL6kogame> + 8002f480: c09ff0ef jal ra,8002f088 <_ZL4Syncv> + 8002f484: ce1ff0ef jal ra,8002f164 <_ZL8M68NTfixv> + 8002f488: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 8002f48c: fffe1617 auipc a2,0xfffe1 + 8002f490: 1d460613 addi a2,a2,468 # 80010660 <_Z6CartBRj> + 8002f494: 00006537 lui a0,0x6 + 8002f498: 584040ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002f49c: 0000c937 lui s2,0xc + 8002f4a0: fff90593 addi a1,s2,-1 # bfff <_entry_offset+0xbfff> + 8002f4a4: 00000617 auipc a2,0x0 + 8002f4a8: ed460613 addi a2,a2,-300 # 8002f378 <_ZL7M68Readj> + 8002f4ac: 00008537 lui a0,0x8 + 8002f4b0: 56c040ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002f4b4: 000104b7 lui s1,0x10 + 8002f4b8: fff48593 addi a1,s1,-1 # ffff <_entry_offset+0xffff> + 8002f4bc: fffe1617 auipc a2,0xfffe1 + 8002f4c0: 1a460613 addi a2,a2,420 # 80010660 <_Z6CartBRj> + 8002f4c4: 0000c537 lui a0,0xc + 8002f4c8: 554040ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002f4cc: fff90593 addi a1,s2,-1 + 8002f4d0: 00000617 auipc a2,0x0 + 8002f4d4: c7860613 addi a2,a2,-904 # 8002f148 <_ZL11M68WriteCHRjh> + 8002f4d8: 00008537 lui a0,0x8 + 8002f4dc: 64c040ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002f4e0: 0000d5b7 lui a1,0xd + 8002f4e4: 00000617 auipc a2,0x0 + 8002f4e8: e5060613 addi a2,a2,-432 # 8002f334 <_ZL11M68WriteNT1jh> + 8002f4ec: fff58593 addi a1,a1,-1 # cfff <_entry_offset+0xcfff> + 8002f4f0: 0000c537 lui a0,0xc + 8002f4f4: 634040ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002f4f8: 0000e5b7 lui a1,0xe + 8002f4fc: 00000617 auipc a2,0x0 + 8002f500: e2c60613 addi a2,a2,-468 # 8002f328 <_ZL11M68WriteNT2jh> + 8002f504: fff58593 addi a1,a1,-1 # dfff <_entry_offset+0xdfff> + 8002f508: 0000d537 lui a0,0xd + 8002f50c: 61c040ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002f510: 0000f5b7 lui a1,0xf + 8002f514: 00000617 auipc a2,0x0 + 8002f518: e0860613 addi a2,a2,-504 # 8002f31c <_ZL11M68WriteMIRjh> + 8002f51c: fff58593 addi a1,a1,-1 # efff <_entry_offset+0xefff> + 8002f520: 0000e537 lui a0,0xe + 8002f524: 604040ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002f528: fff48593 addi a1,s1,-1 + 8002f52c: 00000617 auipc a2,0x0 + 8002f530: bf860613 addi a2,a2,-1032 # 8002f124 <_ZL11M68WriteROMjh> + 8002f534: 0000f537 lui a0,0xf + 8002f538: 5f0040ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002f53c: 00000617 auipc a2,0x0 + 8002f540: eb460613 addi a2,a2,-332 # 8002f3f0 <_ZL10M68WriteLojh> + 8002f544: 000065b7 lui a1,0x6 + 8002f548: 00006537 lui a0,0x6 + 8002f54c: 5dc040ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002f550: 00006537 lui a0,0x6 + 8002f554: fff40593 addi a1,s0,-1 + 8002f558: fffe1617 auipc a2,0xfffe1 + 8002f55c: 13460613 addi a2,a2,308 # 8001068c <_Z6CartBWjh> + 8002f560: 00150513 addi a0,a0,1 # 6001 <_entry_offset+0x6001> + 8002f564: 5c4040ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002f568: 01013403 ld s0,16(sp) + 8002f56c: 01813083 ld ra,24(sp) + 8002f570: 00813483 ld s1,8(sp) + 8002f574: 00013903 ld s2,0(sp) + 8002f578: 0019d517 auipc a0,0x19d + 8002f57c: fb052503 lw a0,-80(a0) # 801cc528 <_ZL8WRAMSIZE> + 8002f580: 0019d617 auipc a2,0x19d + 8002f584: f8863603 ld a2,-120(a2) # 801cc508 <_ZL4WRAM> + 8002f588: 000065b7 lui a1,0x6 + 8002f58c: 00a5551b srliw a0,a0,0xa + 8002f590: 02010113 addi sp,sp,32 + 8002f594: a81d006f j 80000014 <_Z16FCEU_CheatAddRAMijPh> + +000000008002f598 <_Z13Mapper68_InitP8CartInfo>: + 8002f598: fe010113 addi sp,sp,-32 + 8002f59c: 00113c23 sd ra,24(sp) + 8002f5a0: 00813823 sd s0,16(sp) + 8002f5a4: 00913423 sd s1,8(sp) + 8002f5a8: 01213023 sd s2,0(sp) + 8002f5ac: 00000797 auipc a5,0x0 + 8002f5b0: eac78793 addi a5,a5,-340 # 8002f458 <_ZL8M68Powerv> + 8002f5b4: 00f53023 sd a5,0(a0) + 8002f5b8: 00000797 auipc a5,0x0 + 8002f5bc: d8878793 addi a5,a5,-632 # 8002f340 <_ZL8M68Closev> + 8002f5c0: 00f53823 sd a5,16(a0) + 8002f5c4: 00000797 auipc a5,0x0 + 8002f5c8: d4078793 addi a5,a5,-704 # 8002f304 <_ZL12StateRestorei> + 8002f5cc: 0019d497 auipc s1,0x19d + 8002f5d0: f5c48493 addi s1,s1,-164 # 801cc528 <_ZL8WRAMSIZE> + 8002f5d4: 00050413 mv s0,a0 + 8002f5d8: 0019d717 auipc a4,0x19d + 8002f5dc: 08f73023 sd a5,128(a4) # 801cc658 + 8002f5e0: 00002537 lui a0,0x2 + 8002f5e4: 000027b7 lui a5,0x2 + 8002f5e8: 00f4a023 sw a5,0(s1) + 8002f5ec: e81e20ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002f5f0: 0004a603 lw a2,0(s1) + 8002f5f4: 00050593 mv a1,a0 + 8002f5f8: 0019d917 auipc s2,0x19d + 8002f5fc: f1090913 addi s2,s2,-240 # 801cc508 <_ZL4WRAM> + 8002f600: 01000513 li a0,16 + 8002f604: 00100693 li a3,1 + 8002f608: 00b93023 sd a1,0(s2) + 8002f60c: ee9e00ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8002f610: 04c42783 lw a5,76(s0) + 8002f614: 00093503 ld a0,0(s2) + 8002f618: 0004a583 lw a1,0(s1) + 8002f61c: 00078663 beqz a5,8002f628 <_Z13Mapper68_InitP8CartInfo+0x90> + 8002f620: 00a43c23 sd a0,24(s0) + 8002f624: 02b42c23 sw a1,56(s0) + 8002f628: 00016697 auipc a3,0x16 + 8002f62c: d0068693 addi a3,a3,-768 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 8002f630: 00000613 li a2,0 + 8002f634: 9ddd00ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002f638: 01013403 ld s0,16(sp) + 8002f63c: 01813083 ld ra,24(sp) + 8002f640: 00813483 ld s1,8(sp) + 8002f644: 00013903 ld s2,0(sp) + 8002f648: 00000693 li a3,0 + 8002f64c: 00000613 li a2,0 + 8002f650: fff00593 li a1,-1 + 8002f654: 0001d517 auipc a0,0x1d + 8002f658: b6c50513 addi a0,a0,-1172 # 8004c1c0 <_ZL9StateRegs> + 8002f65c: 02010113 addi sp,sp,32 + 8002f660: 9b1d006f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002f664 <_ZL4Syncv>: + 8002f664: fd010113 addi sp,sp,-48 + 8002f668: 02813023 sd s0,32(sp) + 8002f66c: 00913c23 sd s1,24(sp) + 8002f670: 01213823 sd s2,16(sp) + 8002f674: 01313423 sd s3,8(sp) + 8002f678: 02113423 sd ra,40(sp) + 8002f67c: 0019d497 auipc s1,0x19d + 8002f680: eb448493 addi s1,s1,-332 # 801cc530 <_ZL4regs> + 8002f684: 00008437 lui s0,0x8 + 8002f688: 000019b7 lui s3,0x1 + 8002f68c: 00010937 lui s2,0x10 + 8002f690: 0004c583 lbu a1,0(s1) + 8002f694: 00040513 mv a0,s0 + 8002f698: 0089843b addw s0,s3,s0 + 8002f69c: a3ce10ef jal ra,800108d8 <_Z7setprg4jj> + 8002f6a0: 00148493 addi s1,s1,1 + 8002f6a4: ff2416e3 bne s0,s2,8002f690 <_ZL4Syncv+0x2c> + 8002f6a8: 02813083 ld ra,40(sp) + 8002f6ac: 02013403 ld s0,32(sp) + 8002f6b0: 01813483 ld s1,24(sp) + 8002f6b4: 01013903 ld s2,16(sp) + 8002f6b8: 00813983 ld s3,8(sp) + 8002f6bc: 03010113 addi sp,sp,48 + 8002f6c0: 00008067 ret + +000000008002f6c4 <_ZL12StateRestorei>: + 8002f6c4: fa1ff06f j 8002f664 <_ZL4Syncv> + +000000008002f6c8 <_ZL8M31Writejh>: + 8002f6c8: ffffb7b7 lui a5,0xffffb + 8002f6cc: 00a787bb addw a5,a5,a0 + 8002f6d0: 00001737 lui a4,0x1 + 8002f6d4: 00e7e463 bltu a5,a4,8002f6dc <_ZL8M31Writejh+0x14> + 8002f6d8: 00008067 ret + 8002f6dc: 00757513 andi a0,a0,7 + 8002f6e0: 0019d797 auipc a5,0x19d + 8002f6e4: e5078793 addi a5,a5,-432 # 801cc530 <_ZL4regs> + 8002f6e8: 00a78533 add a0,a5,a0 + 8002f6ec: 00b50023 sb a1,0(a0) + 8002f6f0: f75ff06f j 8002f664 <_ZL4Syncv> + +000000008002f6f4 <_ZL8M31Powerv>: + 8002f6f4: ff010113 addi sp,sp,-16 + 8002f6f8: 00000513 li a0,0 + 8002f6fc: 00113423 sd ra,8(sp) + 8002f700: 805e10ef jal ra,80010f04 <_Z7setchr8j> + 8002f704: fff00793 li a5,-1 + 8002f708: 0019d717 auipc a4,0x19d + 8002f70c: e2f707a3 sb a5,-465(a4) # 801cc537 <_ZL4regs+0x7> + 8002f710: f55ff0ef jal ra,8002f664 <_ZL4Syncv> + 8002f714: 000105b7 lui a1,0x10 + 8002f718: fffe1617 auipc a2,0xfffe1 + 8002f71c: f4860613 addi a2,a2,-184 # 80010660 <_Z6CartBRj> + 8002f720: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8002f724: 00008537 lui a0,0x8 + 8002f728: 2f4040ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002f72c: 00813083 ld ra,8(sp) + 8002f730: 000065b7 lui a1,0x6 + 8002f734: 00000617 auipc a2,0x0 + 8002f738: f9460613 addi a2,a2,-108 # 8002f6c8 <_ZL8M31Writejh> + 8002f73c: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 8002f740: 00005537 lui a0,0x5 + 8002f744: 01010113 addi sp,sp,16 + 8002f748: 3e00406f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002f74c <_Z13Mapper31_InitP8CartInfo>: + 8002f74c: 00000797 auipc a5,0x0 + 8002f750: fa878793 addi a5,a5,-88 # 8002f6f4 <_ZL8M31Powerv> + 8002f754: 00f53023 sd a5,0(a0) # 5000 <_entry_offset+0x5000> + 8002f758: 00000797 auipc a5,0x0 + 8002f75c: f6c78793 addi a5,a5,-148 # 8002f6c4 <_ZL12StateRestorei> + 8002f760: 00000693 li a3,0 + 8002f764: 00000613 li a2,0 + 8002f768: fff00593 li a1,-1 + 8002f76c: 0001d517 auipc a0,0x1d + 8002f770: b1450513 addi a0,a0,-1260 # 8004c280 <_ZL9StateRegs> + 8002f774: 0019d717 auipc a4,0x19d + 8002f778: eef73223 sd a5,-284(a4) # 801cc658 + 8002f77c: 895d006f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002f780 <_ZL4Syncv>: + 8002f780: fe010113 addi sp,sp,-32 + 8002f784: 0019d797 auipc a5,0x19d + 8002f788: db47c783 lbu a5,-588(a5) # 801cc538 <_ZL3cmd> + 8002f78c: 00813823 sd s0,16(sp) + 8002f790: 00113c23 sd ra,24(sp) + 8002f794: 00099417 auipc s0,0x99 + 8002f798: c3c40413 addi s0,s0,-964 # 800c83d0 <_ZL4regs> + 8002f79c: 00913423 sd s1,8(sp) + 8002f7a0: 0207f793 andi a5,a5,32 + 8002f7a4: 00044583 lbu a1,0(s0) + 8002f7a8: 0a078c63 beqz a5,8002f860 <_ZL4Syncv+0xe0> + 8002f7ac: 00000513 li a0,0 + 8002f7b0: ef4e10ef jal ra,80010ea4 <_Z7setchr1jj> + 8002f7b4: 00844583 lbu a1,8(s0) + 8002f7b8: 40000513 li a0,1024 + 8002f7bc: 000014b7 lui s1,0x1 + 8002f7c0: ee4e10ef jal ra,80010ea4 <_Z7setchr1jj> + 8002f7c4: 00144583 lbu a1,1(s0) + 8002f7c8: 80048513 addi a0,s1,-2048 # 800 <_entry_offset+0x800> + 8002f7cc: ed8e10ef jal ra,80010ea4 <_Z7setchr1jj> + 8002f7d0: 00944583 lbu a1,9(s0) + 8002f7d4: c0048513 addi a0,s1,-1024 + 8002f7d8: ecce10ef jal ra,80010ea4 <_Z7setchr1jj> + 8002f7dc: 00244583 lbu a1,2(s0) + 8002f7e0: 00001537 lui a0,0x1 + 8002f7e4: 000024b7 lui s1,0x2 + 8002f7e8: ebce10ef jal ra,80010ea4 <_Z7setchr1jj> + 8002f7ec: 00344583 lbu a1,3(s0) + 8002f7f0: 00001537 lui a0,0x1 + 8002f7f4: 40050513 addi a0,a0,1024 # 1400 <_entry_offset+0x1400> + 8002f7f8: eace10ef jal ra,80010ea4 <_Z7setchr1jj> + 8002f7fc: 00444583 lbu a1,4(s0) + 8002f800: 80048513 addi a0,s1,-2048 # 1800 <_entry_offset+0x1800> + 8002f804: ea0e10ef jal ra,80010ea4 <_Z7setchr1jj> + 8002f808: 00544583 lbu a1,5(s0) + 8002f80c: c0048513 addi a0,s1,-1024 + 8002f810: e94e10ef jal ra,80010ea4 <_Z7setchr1jj> + 8002f814: 00644583 lbu a1,6(s0) + 8002f818: 00008537 lui a0,0x8 + 8002f81c: a80e10ef jal ra,80010a9c <_Z7setprg8jj> + 8002f820: 00744583 lbu a1,7(s0) + 8002f824: 0000a537 lui a0,0xa + 8002f828: a74e10ef jal ra,80010a9c <_Z7setprg8jj> + 8002f82c: 00a44583 lbu a1,10(s0) + 8002f830: 0000c537 lui a0,0xc + 8002f834: a68e10ef jal ra,80010a9c <_Z7setprg8jj> + 8002f838: 0000e537 lui a0,0xe + 8002f83c: fff00593 li a1,-1 + 8002f840: a5ce10ef jal ra,80010a9c <_Z7setprg8jj> + 8002f844: 01013403 ld s0,16(sp) + 8002f848: 01813083 ld ra,24(sp) + 8002f84c: 00813483 ld s1,8(sp) + 8002f850: 0019d517 auipc a0,0x19d + 8002f854: cea54503 lbu a0,-790(a0) # 801cc53a <_ZL4mirr> + 8002f858: 02010113 addi sp,sp,32 + 8002f85c: fece106f j 80011048 <_Z9setmirrori> + 8002f860: 0015d593 srli a1,a1,0x1 + 8002f864: 00000513 li a0,0 + 8002f868: e5ce10ef jal ra,80010ec4 <_Z7setchr2jj> + 8002f86c: 00144583 lbu a1,1(s0) + 8002f870: 00001537 lui a0,0x1 + 8002f874: 80050513 addi a0,a0,-2048 # 800 <_entry_offset+0x800> + 8002f878: 0015d593 srli a1,a1,0x1 + 8002f87c: e48e10ef jal ra,80010ec4 <_Z7setchr2jj> + 8002f880: f5dff06f j 8002f7dc <_ZL4Syncv+0x5c> + +000000008002f884 <_ZL12StateRestorei>: + 8002f884: efdff06f j 8002f780 <_ZL4Syncv> + +000000008002f888 <_ZL8M64Powerv>: + 8002f888: ff010113 addi sp,sp,-16 + 8002f88c: 00113423 sd ra,8(sp) + 8002f890: 00813023 sd s0,0(sp) + 8002f894: 00099797 auipc a5,0x99 + 8002f898: b3c78793 addi a5,a5,-1220 # 800c83d0 <_ZL4regs> + 8002f89c: fff00713 li a4,-1 + 8002f8a0: 00e7b023 sd a4,0(a5) + 8002f8a4: 00e79423 sh a4,8(a5) + 8002f8a8: 00010437 lui s0,0x10 + 8002f8ac: 00e78523 sb a4,10(a5) + 8002f8b0: 0019d697 auipc a3,0x19d + 8002f8b4: c8068523 sb zero,-886(a3) # 801cc53a <_ZL4mirr> + 8002f8b8: 0019d697 auipc a3,0x19d + 8002f8bc: c8068023 sb zero,-896(a3) # 801cc538 <_ZL3cmd> + 8002f8c0: ec1ff0ef jal ra,8002f780 <_ZL4Syncv> + 8002f8c4: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002f8c8: fffe1617 auipc a2,0xfffe1 + 8002f8cc: d9860613 addi a2,a2,-616 # 80010660 <_Z6CartBRj> + 8002f8d0: 00008537 lui a0,0x8 + 8002f8d4: 148040ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002f8d8: fff40593 addi a1,s0,-1 + 8002f8dc: 00013403 ld s0,0(sp) + 8002f8e0: 00813083 ld ra,8(sp) + 8002f8e4: 00000617 auipc a2,0x0 + 8002f8e8: 01460613 addi a2,a2,20 # 8002f8f8 <_ZL8M64Writejh> + 8002f8ec: 00008537 lui a0,0x8 + 8002f8f0: 01010113 addi sp,sp,16 + 8002f8f4: 2340406f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002f8f8 <_ZL8M64Writejh>: + 8002f8f8: 0000f7b7 lui a5,0xf + 8002f8fc: 00178793 addi a5,a5,1 # f001 <_entry_offset+0xf001> + 8002f900: 00f57533 and a0,a0,a5 + 8002f904: 0000c7b7 lui a5,0xc + 8002f908: 0af50663 beq a0,a5,8002f9b4 <_ZL8M64Writejh+0xbc> + 8002f90c: 02a7e663 bltu a5,a0,8002f938 <_ZL8M64Writejh+0x40> + 8002f910: 000087b7 lui a5,0x8 + 8002f914: 00178713 addi a4,a5,1 # 8001 <_entry_offset+0x8001> + 8002f918: 0ce50063 beq a0,a4,8002f9d8 <_ZL8M64Writejh+0xe0> + 8002f91c: 0000a737 lui a4,0xa + 8002f920: 06e51e63 bne a0,a4,8002f99c <_ZL8M64Writejh+0xa4> + 8002f924: fff5c593 not a1,a1 + 8002f928: 0015f593 andi a1,a1,1 + 8002f92c: 0019d797 auipc a5,0x19d + 8002f930: c0b78723 sb a1,-1010(a5) # 801cc53a <_ZL4mirr> + 8002f934: e4dff06f j 8002f780 <_ZL4Syncv> + 8002f938: 0000e737 lui a4,0xe + 8002f93c: 0ce50263 beq a0,a4,8002fa00 <_ZL8M64Writejh+0x108> + 8002f940: 00170713 addi a4,a4,1 # e001 <_entry_offset+0xe001> + 8002f944: 02e51263 bne a0,a4,8002f968 <_ZL8M64Writejh+0x70> + 8002f948: 00100793 li a5,1 + 8002f94c: 0019d717 auipc a4,0x19d + 8002f950: bef706a3 sb a5,-1043(a4) # 801cc539 <_ZL4IRQa> + 8002f954: 0019d717 auipc a4,0x19d + 8002f958: be774703 lbu a4,-1049(a4) # 801cc53b <_ZL5rmode> + 8002f95c: 00100793 li a5,1 + 8002f960: 0ef70c63 beq a4,a5,8002fa58 <_ZL8M64Writejh+0x160> + 8002f964: 00008067 ret + 8002f968: 00178793 addi a5,a5,1 + 8002f96c: 04f51063 bne a0,a5,8002f9ac <_ZL8M64Writejh+0xb4> + 8002f970: 00100793 li a5,1 + 8002f974: 0015f593 andi a1,a1,1 + 8002f978: 0019d717 auipc a4,0x19d + 8002f97c: bcf701a3 sb a5,-1085(a4) # 801cc53b <_ZL5rmode> + 8002f980: 0019d797 auipc a5,0x19d + 8002f984: bbe7c783 lbu a5,-1090(a5) # 801cc53e <_ZL8IRQLatch> + 8002f988: 0019d717 auipc a4,0x19d + 8002f98c: baf70aa3 sb a5,-1099(a4) # 801cc53d <_ZL8IRQCount> + 8002f990: 0019d797 auipc a5,0x19d + 8002f994: bab78623 sb a1,-1108(a5) # 801cc53c <_ZL7IRQmode> + 8002f998: 00008067 ret + 8002f99c: 00f51a63 bne a0,a5,8002f9b0 <_ZL8M64Writejh+0xb8> + 8002f9a0: 0019d797 auipc a5,0x19d + 8002f9a4: b8b78c23 sb a1,-1128(a5) # 801cc538 <_ZL3cmd> + 8002f9a8: 00008067 ret + 8002f9ac: 00008067 ret + 8002f9b0: 00008067 ret + 8002f9b4: 0019d797 auipc a5,0x19d + 8002f9b8: b8b78523 sb a1,-1142(a5) # 801cc53e <_ZL8IRQLatch> + 8002f9bc: 0019d717 auipc a4,0x19d + 8002f9c0: b7f74703 lbu a4,-1153(a4) # 801cc53b <_ZL5rmode> + 8002f9c4: 00100793 li a5,1 + 8002f9c8: f8f71ee3 bne a4,a5,8002f964 <_ZL8M64Writejh+0x6c> + 8002f9cc: 0019d797 auipc a5,0x19d + 8002f9d0: b6b788a3 sb a1,-1167(a5) # 801cc53d <_ZL8IRQCount> + 8002f9d4: 00008067 ret + 8002f9d8: 0019d797 auipc a5,0x19d + 8002f9dc: b607c783 lbu a5,-1184(a5) # 801cc538 <_ZL3cmd> + 8002f9e0: 00f7f793 andi a5,a5,15 + 8002f9e4: 00900713 li a4,9 + 8002f9e8: 04f76e63 bltu a4,a5,8002fa44 <_ZL8M64Writejh+0x14c> + 8002f9ec: 00099717 auipc a4,0x99 + 8002f9f0: 9e470713 addi a4,a4,-1564 # 800c83d0 <_ZL4regs> + 8002f9f4: 00f707b3 add a5,a4,a5 + 8002f9f8: 00b78023 sb a1,0(a5) + 8002f9fc: d85ff06f j 8002f780 <_ZL4Syncv> + 8002fa00: ff010113 addi sp,sp,-16 + 8002fa04: 00100513 li a0,1 + 8002fa08: 0019d797 auipc a5,0x19d + 8002fa0c: b20788a3 sb zero,-1231(a5) # 801cc539 <_ZL4IRQa> + 8002fa10: 00113423 sd ra,8(sp) + 8002fa14: b3cd10ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8002fa18: 0019d717 auipc a4,0x19d + 8002fa1c: b2374703 lbu a4,-1245(a4) # 801cc53b <_ZL5rmode> + 8002fa20: 00100793 li a5,1 + 8002fa24: 00f71a63 bne a4,a5,8002fa38 <_ZL8M64Writejh+0x140> + 8002fa28: 0019d797 auipc a5,0x19d + 8002fa2c: b167c783 lbu a5,-1258(a5) # 801cc53e <_ZL8IRQLatch> + 8002fa30: 0019d717 auipc a4,0x19d + 8002fa34: b0f706a3 sb a5,-1267(a4) # 801cc53d <_ZL8IRQCount> + 8002fa38: 00813083 ld ra,8(sp) + 8002fa3c: 01010113 addi sp,sp,16 + 8002fa40: 00008067 ret + 8002fa44: 00f00713 li a4,15 + 8002fa48: fae79ae3 bne a5,a4,8002f9fc <_ZL8M64Writejh+0x104> + 8002fa4c: 00099797 auipc a5,0x99 + 8002fa50: 98b78723 sb a1,-1650(a5) # 800c83da <_ZL4regs+0xa> + 8002fa54: fa9ff06f j 8002f9fc <_ZL8M64Writejh+0x104> + 8002fa58: 0019d797 auipc a5,0x19d + 8002fa5c: ae67c783 lbu a5,-1306(a5) # 801cc53e <_ZL8IRQLatch> + 8002fa60: 0019d717 auipc a4,0x19d + 8002fa64: acf70ea3 sb a5,-1315(a4) # 801cc53d <_ZL8IRQCount> + 8002fa68: 00008067 ret + +000000008002fa6c <_ZL10M64IRQHooki>: + 8002fa6c: 0019d797 auipc a5,0x19d + 8002fa70: ad07c783 lbu a5,-1328(a5) # 801cc53c <_ZL7IRQmode> + 8002fa74: 08078a63 beqz a5,8002fb08 <_ZL10M64IRQHooki+0x9c> + 8002fa78: fd010113 addi sp,sp,-48 + 8002fa7c: 00913c23 sd s1,24(sp) + 8002fa80: 0019d497 auipc s1,0x19d + 8002fa84: ac048493 addi s1,s1,-1344 # 801cc540 <_ZZL10M64IRQHookiE10smallcount> + 8002fa88: 0004a783 lw a5,0(s1) + 8002fa8c: 02113423 sd ra,40(sp) + 8002fa90: 02813023 sd s0,32(sp) + 8002fa94: 00a7873b addw a4,a5,a0 + 8002fa98: 01213823 sd s2,16(sp) + 8002fa9c: 01313423 sd s3,8(sp) + 8002faa0: 01413023 sd s4,0(sp) + 8002faa4: 00300693 li a3,3 + 8002faa8: 00e4a023 sw a4,0(s1) + 8002faac: 02e6de63 bge a3,a4,8002fae8 <_ZL10M64IRQHooki+0x7c> + 8002fab0: 0019d417 auipc s0,0x19d + 8002fab4: a8d40413 addi s0,s0,-1395 # 801cc53d <_ZL8IRQCount> + 8002fab8: 0ff00993 li s3,255 + 8002fabc: 0019da17 auipc s4,0x19d + 8002fac0: a7da0a13 addi s4,s4,-1411 # 801cc539 <_ZL4IRQa> + 8002fac4: 00300913 li s2,3 + 8002fac8: 00044783 lbu a5,0(s0) + 8002facc: ffc7071b addiw a4,a4,-4 + 8002fad0: 00e4a023 sw a4,0(s1) + 8002fad4: fff7879b addiw a5,a5,-1 + 8002fad8: 0ff7f793 andi a5,a5,255 + 8002fadc: 00f40023 sb a5,0(s0) + 8002fae0: 03378663 beq a5,s3,8002fb0c <_ZL10M64IRQHooki+0xa0> + 8002fae4: fee942e3 blt s2,a4,8002fac8 <_ZL10M64IRQHooki+0x5c> + 8002fae8: 02813083 ld ra,40(sp) + 8002faec: 02013403 ld s0,32(sp) + 8002faf0: 01813483 ld s1,24(sp) + 8002faf4: 01013903 ld s2,16(sp) + 8002faf8: 00813983 ld s3,8(sp) + 8002fafc: 00013a03 ld s4,0(sp) + 8002fb00: 03010113 addi sp,sp,48 + 8002fb04: 00008067 ret + 8002fb08: 00008067 ret + 8002fb0c: 000a4783 lbu a5,0(s4) + 8002fb10: fc078ae3 beqz a5,8002fae4 <_ZL10M64IRQHooki+0x78> + 8002fb14: 00100513 li a0,1 + 8002fb18: a20d10ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 8002fb1c: 0004a703 lw a4,0(s1) + 8002fb20: fae944e3 blt s2,a4,8002fac8 <_ZL10M64IRQHooki+0x5c> + 8002fb24: fc5ff06f j 8002fae8 <_ZL10M64IRQHooki+0x7c> + +000000008002fb28 <_ZL9M64HBHookv>: + 8002fb28: 0019d797 auipc a5,0x19d + 8002fb2c: a147c783 lbu a5,-1516(a5) # 801cc53c <_ZL7IRQmode> + 8002fb30: 02079e63 bnez a5,8002fb6c <_ZL9M64HBHookv+0x44> + 8002fb34: 0019d717 auipc a4,0x19d + 8002fb38: c6c72703 lw a4,-916(a4) # 801cc7a0 + 8002fb3c: 0f000793 li a5,240 + 8002fb40: 02f70663 beq a4,a5,8002fb6c <_ZL9M64HBHookv+0x44> + 8002fb44: 0019d717 auipc a4,0x19d + 8002fb48: 9f970713 addi a4,a4,-1543 # 801cc53d <_ZL8IRQCount> + 8002fb4c: 00074783 lbu a5,0(a4) + 8002fb50: 0019d697 auipc a3,0x19d + 8002fb54: 9e0685a3 sb zero,-1557(a3) # 801cc53b <_ZL5rmode> + 8002fb58: 0ff00693 li a3,255 + 8002fb5c: fff7879b addiw a5,a5,-1 + 8002fb60: 0ff7f793 andi a5,a5,255 + 8002fb64: 00f70023 sb a5,0(a4) + 8002fb68: 00d78463 beq a5,a3,8002fb70 <_ZL9M64HBHookv+0x48> + 8002fb6c: 00008067 ret + 8002fb70: 0019d797 auipc a5,0x19d + 8002fb74: 9c97c783 lbu a5,-1591(a5) # 801cc539 <_ZL4IRQa> + 8002fb78: fe078ae3 beqz a5,8002fb6c <_ZL9M64HBHookv+0x44> + 8002fb7c: 00100793 li a5,1 + 8002fb80: 00100513 li a0,1 + 8002fb84: 0019d717 auipc a4,0x19d + 8002fb88: 9af70ba3 sb a5,-1609(a4) # 801cc53b <_ZL5rmode> + 8002fb8c: 9acd106f j 80000d38 <_Z14X6502_IRQBegini> + +000000008002fb90 <_Z13Mapper64_InitP8CartInfo>: + 8002fb90: 00000797 auipc a5,0x0 + 8002fb94: cf878793 addi a5,a5,-776 # 8002f888 <_ZL8M64Powerv> + 8002fb98: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 8002fb9c: 00000797 auipc a5,0x0 + 8002fba0: f8c78793 addi a5,a5,-116 # 8002fb28 <_ZL9M64HBHookv> + 8002fba4: 0019d717 auipc a4,0x19d + 8002fba8: b0f73e23 sd a5,-1252(a4) # 801cc6c0 + 8002fbac: 00000797 auipc a5,0x0 + 8002fbb0: ec078793 addi a5,a5,-320 # 8002fa6c <_ZL10M64IRQHooki> + 8002fbb4: 0019c717 auipc a4,0x19c + 8002fbb8: f8f73623 sd a5,-116(a4) # 801cbb40 + 8002fbbc: 00000797 auipc a5,0x0 + 8002fbc0: cc878793 addi a5,a5,-824 # 8002f884 <_ZL12StateRestorei> + 8002fbc4: 00000693 li a3,0 + 8002fbc8: 00000613 li a2,0 + 8002fbcc: fff00593 li a1,-1 + 8002fbd0: 0001c517 auipc a0,0x1c + 8002fbd4: 6e050513 addi a0,a0,1760 # 8004c2b0 <_ZL9StateRegs> + 8002fbd8: 0019d717 auipc a4,0x19d + 8002fbdc: a8f73023 sd a5,-1408(a4) # 801cc658 + 8002fbe0: c30d006f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002fbe4 <_ZL19UNL6035052ProtWritejh>: + 8002fbe4: 0035f793 andi a5,a1,3 + 8002fbe8: 00017597 auipc a1,0x17 + 8002fbec: df858593 addi a1,a1,-520 # 800469e0 <_ZL3lut> + 8002fbf0: 00f585b3 add a1,a1,a5 + 8002fbf4: 0005c783 lbu a5,0(a1) + 8002fbf8: 0019c717 auipc a4,0x19c + 8002fbfc: 64f70c23 sb a5,1624(a4) # 801cc250 + 8002fc00: 00008067 ret + +000000008002fc04 <_ZL18UNL6035052ProtReadj>: + 8002fc04: 0019c517 auipc a0,0x19c + 8002fc08: 64c54503 lbu a0,1612(a0) # 801cc250 + 8002fc0c: 00008067 ret + +000000008002fc10 <_ZL15UNL6035052Powerv>: + 8002fc10: fe010113 addi sp,sp,-32 + 8002fc14: 00113c23 sd ra,24(sp) + 8002fc18: 00813823 sd s0,16(sp) + 8002fc1c: 00913423 sd s1,8(sp) + 8002fc20: 00004437 lui s0,0x4 + 8002fc24: d9cf60ef jal ra,800261c0 <_Z12GenMMC3Powerv> + 8002fc28: 000084b7 lui s1,0x8 + 8002fc2c: fff48593 addi a1,s1,-1 # 7fff <_entry_offset+0x7fff> + 8002fc30: 02040513 addi a0,s0,32 # 4020 <_entry_offset+0x4020> + 8002fc34: 00000617 auipc a2,0x0 + 8002fc38: fb060613 addi a2,a2,-80 # 8002fbe4 <_ZL19UNL6035052ProtWritejh> + 8002fc3c: 6ed030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002fc40: 02040513 addi a0,s0,32 + 8002fc44: 01013403 ld s0,16(sp) + 8002fc48: 01813083 ld ra,24(sp) + 8002fc4c: fff48593 addi a1,s1,-1 + 8002fc50: 00813483 ld s1,8(sp) + 8002fc54: 00000617 auipc a2,0x0 + 8002fc58: fb060613 addi a2,a2,-80 # 8002fc04 <_ZL18UNL6035052ProtReadj> + 8002fc5c: 02010113 addi sp,sp,32 + 8002fc60: 5bd0306f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +000000008002fc64 <_Z15UNL6035052_InitP8CartInfo>: + 8002fc64: ff010113 addi sp,sp,-16 + 8002fc68: 00000693 li a3,0 + 8002fc6c: 10000613 li a2,256 + 8002fc70: 08000593 li a1,128 + 8002fc74: 00000713 li a4,0 + 8002fc78: 00813023 sd s0,0(sp) + 8002fc7c: 00113423 sd ra,8(sp) + 8002fc80: 00050413 mv s0,a0 + 8002fc84: b94f70ef jal ra,80027018 <_Z12GenMMC3_InitP8CartInfoiiii> + 8002fc88: 00000797 auipc a5,0x0 + 8002fc8c: f8878793 addi a5,a5,-120 # 8002fc10 <_ZL15UNL6035052Powerv> + 8002fc90: 00f43023 sd a5,0(s0) + 8002fc94: 00013403 ld s0,0(sp) + 8002fc98: 00813083 ld ra,8(sp) + 8002fc9c: 00016697 auipc a3,0x16 + 8002fca0: 85468693 addi a3,a3,-1964 # 800454f0 <_ZZL8SetInputvE3moo+0x6a0> + 8002fca4: 00000613 li a2,0 + 8002fca8: 00600593 li a1,6 + 8002fcac: 0019c517 auipc a0,0x19c + 8002fcb0: 5a450513 addi a0,a0,1444 # 801cc250 + 8002fcb4: 01010113 addi sp,sp,16 + 8002fcb8: b58d006f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008002fcbc <_ZL13M103RamWrite0jh>: + 8002fcbc: 03351513 slli a0,a0,0x33 + 8002fcc0: 03355513 srli a0,a0,0x33 + 8002fcc4: 0019d797 auipc a5,0x19d + 8002fcc8: 8847b783 ld a5,-1916(a5) # 801cc548 <_ZL4WRAM> + 8002fccc: 00a78533 add a0,a5,a0 + 8002fcd0: 00b50023 sb a1,0(a0) + 8002fcd4: 00008067 ret + +000000008002fcd8 <_ZL13M103RamWrite1jh>: + 8002fcd8: ffff57b7 lui a5,0xffff5 + 8002fcdc: 8007879b addiw a5,a5,-2048 + 8002fce0: 00a787bb addw a5,a5,a0 + 8002fce4: 03379793 slli a5,a5,0x33 + 8002fce8: 00002737 lui a4,0x2 + 8002fcec: 0337d793 srli a5,a5,0x33 + 8002fcf0: 00f707bb addw a5,a4,a5 + 8002fcf4: 02079793 slli a5,a5,0x20 + 8002fcf8: 0207d793 srli a5,a5,0x20 + 8002fcfc: 0019d717 auipc a4,0x19d + 8002fd00: 84c73703 ld a4,-1972(a4) # 801cc548 <_ZL4WRAM> + 8002fd04: 00f707b3 add a5,a4,a5 + 8002fd08: 00b78023 sb a1,0(a5) # ffffffffffff5000 <_end+0xffffffff7fe20000> + 8002fd0c: 00008067 ret + +000000008002fd10 <_ZL4Syncv>: + 8002fd10: ff010113 addi sp,sp,-16 + 8002fd14: 00000513 li a0,0 + 8002fd18: 00113423 sd ra,8(sp) + 8002fd1c: 9e8e10ef jal ra,80010f04 <_Z7setchr8j> + 8002fd20: 00c00593 li a1,12 + 8002fd24: 00008537 lui a0,0x8 + 8002fd28: d75e00ef jal ra,80010a9c <_Z7setprg8jj> + 8002fd2c: 00f00593 li a1,15 + 8002fd30: 0000e537 lui a0,0xe + 8002fd34: d69e00ef jal ra,80010a9c <_Z7setprg8jj> + 8002fd38: 0019d797 auipc a5,0x19d + 8002fd3c: 81a7c783 lbu a5,-2022(a5) # 801cc552 <_ZL4reg2> + 8002fd40: 0107f793 andi a5,a5,16 + 8002fd44: 04078263 beqz a5,8002fd88 <_ZL4Syncv+0x78> + 8002fd48: 0019d597 auipc a1,0x19d + 8002fd4c: 8085c583 lbu a1,-2040(a1) # 801cc550 <_ZL4reg0> + 8002fd50: 00006537 lui a0,0x6 + 8002fd54: d49e00ef jal ra,80010a9c <_Z7setprg8jj> + 8002fd58: 00d00593 li a1,13 + 8002fd5c: 0000a537 lui a0,0xa + 8002fd60: d3de00ef jal ra,80010a9c <_Z7setprg8jj> + 8002fd64: 0000c537 lui a0,0xc + 8002fd68: 00e00593 li a1,14 + 8002fd6c: d31e00ef jal ra,80010a9c <_Z7setprg8jj> + 8002fd70: 00813083 ld ra,8(sp) + 8002fd74: 0019c517 auipc a0,0x19c + 8002fd78: 7dd54503 lbu a0,2013(a0) # 801cc551 <_ZL4reg1> + 8002fd7c: 00154513 xori a0,a0,1 + 8002fd80: 01010113 addi sp,sp,16 + 8002fd84: ac4e106f j 80011048 <_Z9setmirrori> + 8002fd88: 00000613 li a2,0 + 8002fd8c: 000065b7 lui a1,0x6 + 8002fd90: 01000513 li a0,16 + 8002fd94: b55e00ef jal ra,800108e8 <_Z8setprg8rijj> + 8002fd98: 01a00593 li a1,26 + 8002fd9c: 0000a537 lui a0,0xa + 8002fda0: b39e00ef jal ra,800108d8 <_Z7setprg4jj> + 8002fda4: 03600593 li a1,54 + 8002fda8: 0000b537 lui a0,0xb + 8002fdac: a21e00ef jal ra,800107cc <_Z7setprg2jj> + 8002fdb0: 0000c5b7 lui a1,0xc + 8002fdb4: 00400613 li a2,4 + 8002fdb8: 80058593 addi a1,a1,-2048 # b800 <_entry_offset+0xb800> + 8002fdbc: 01000513 li a0,16 + 8002fdc0: 94de00ef jal ra,8001070c <_Z8setprg2rijj> + 8002fdc4: 00500613 li a2,5 + 8002fdc8: 0000c5b7 lui a1,0xc + 8002fdcc: 01000513 li a0,16 + 8002fdd0: 93de00ef jal ra,8001070c <_Z8setprg2rijj> + 8002fdd4: 0000d5b7 lui a1,0xd + 8002fdd8: 00600613 li a2,6 + 8002fddc: 80058593 addi a1,a1,-2048 # c800 <_entry_offset+0xc800> + 8002fde0: 01000513 li a0,16 + 8002fde4: 929e00ef jal ra,8001070c <_Z8setprg2rijj> + 8002fde8: 0000d5b7 lui a1,0xd + 8002fdec: 01000513 li a0,16 + 8002fdf0: 00700613 li a2,7 + 8002fdf4: 919e00ef jal ra,8001070c <_Z8setprg2rijj> + 8002fdf8: 0000e537 lui a0,0xe + 8002fdfc: 80050513 addi a0,a0,-2048 # d800 <_entry_offset+0xd800> + 8002fe00: 03b00593 li a1,59 + 8002fe04: 9c9e00ef jal ra,800107cc <_Z7setprg2jj> + 8002fe08: 00813083 ld ra,8(sp) + 8002fe0c: 0019c517 auipc a0,0x19c + 8002fe10: 74554503 lbu a0,1861(a0) # 801cc551 <_ZL4reg1> + 8002fe14: 00154513 xori a0,a0,1 + 8002fe18: 01010113 addi sp,sp,16 + 8002fe1c: a2ce106f j 80011048 <_Z9setmirrori> + +000000008002fe20 <_ZL12StateRestorei>: + 8002fe20: ef1ff06f j 8002fd10 <_ZL4Syncv> + +000000008002fe24 <_ZL10M103Write2jh>: + 8002fe24: 0019c797 auipc a5,0x19c + 8002fe28: 72b78723 sb a1,1838(a5) # 801cc552 <_ZL4reg2> + 8002fe2c: ee5ff06f j 8002fd10 <_ZL4Syncv> + +000000008002fe30 <_ZL10M103Write1jh>: + 8002fe30: 0035d593 srli a1,a1,0x3 + 8002fe34: 0015f593 andi a1,a1,1 + 8002fe38: 0019c797 auipc a5,0x19c + 8002fe3c: 70b78ca3 sb a1,1817(a5) # 801cc551 <_ZL4reg1> + 8002fe40: ed1ff06f j 8002fd10 <_ZL4Syncv> + +000000008002fe44 <_ZL10M103Write0jh>: + 8002fe44: 00f5f593 andi a1,a1,15 + 8002fe48: 0019c797 auipc a5,0x19c + 8002fe4c: 70b78423 sb a1,1800(a5) # 801cc550 <_ZL4reg0> + 8002fe50: ec1ff06f j 8002fd10 <_ZL4Syncv> + +000000008002fe54 <_ZL9M103Closev>: + 8002fe54: 0019c517 auipc a0,0x19c + 8002fe58: 6f453503 ld a0,1780(a0) # 801cc548 <_ZL4WRAM> + 8002fe5c: 02050263 beqz a0,8002fe80 <_ZL9M103Closev+0x2c> + 8002fe60: ff010113 addi sp,sp,-16 + 8002fe64: 00113423 sd ra,8(sp) + 8002fe68: ed8e20ef jal ra,80012540 <_Z10FCEU_gfreePv> + 8002fe6c: 00813083 ld ra,8(sp) + 8002fe70: 0019c797 auipc a5,0x19c + 8002fe74: 6c07bc23 sd zero,1752(a5) # 801cc548 <_ZL4WRAM> + 8002fe78: 01010113 addi sp,sp,16 + 8002fe7c: 00008067 ret + 8002fe80: 0019c797 auipc a5,0x19c + 8002fe84: 6c07b423 sd zero,1736(a5) # 801cc548 <_ZL4WRAM> + 8002fe88: 00008067 ret + +000000008002fe8c <_ZL9M103Powerv>: + 8002fe8c: ff010113 addi sp,sp,-16 + 8002fe90: 00113423 sd ra,8(sp) + 8002fe94: 00813023 sd s0,0(sp) + 8002fe98: 0019c797 auipc a5,0x19c + 8002fe9c: 6a078ca3 sb zero,1721(a5) # 801cc551 <_ZL4reg1> + 8002fea0: 00008437 lui s0,0x8 + 8002fea4: 0019c797 auipc a5,0x19c + 8002fea8: 6a078623 sb zero,1708(a5) # 801cc550 <_ZL4reg0> + 8002feac: 0019c797 auipc a5,0x19c + 8002feb0: 6a078323 sb zero,1702(a5) # 801cc552 <_ZL4reg2> + 8002feb4: e5dff0ef jal ra,8002fd10 <_ZL4Syncv> + 8002feb8: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 8002febc: fffe0617 auipc a2,0xfffe0 + 8002fec0: 7a460613 addi a2,a2,1956 # 80010660 <_Z6CartBRj> + 8002fec4: 00006537 lui a0,0x6 + 8002fec8: 355030ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002fecc: fff40593 addi a1,s0,-1 + 8002fed0: 00000617 auipc a2,0x0 + 8002fed4: dec60613 addi a2,a2,-532 # 8002fcbc <_ZL13M103RamWrite0jh> + 8002fed8: 00006537 lui a0,0x6 + 8002fedc: 44d030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002fee0: 00010437 lui s0,0x10 + 8002fee4: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8002fee8: fffe0617 auipc a2,0xfffe0 + 8002feec: 77860613 addi a2,a2,1912 # 80010660 <_Z6CartBRj> + 8002fef0: 00008537 lui a0,0x8 + 8002fef4: 329030ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8002fef8: 0000d5b7 lui a1,0xd + 8002fefc: 0000c537 lui a0,0xc + 8002ff00: 00000617 auipc a2,0x0 + 8002ff04: dd860613 addi a2,a2,-552 # 8002fcd8 <_ZL13M103RamWrite1jh> + 8002ff08: 7ff58593 addi a1,a1,2047 # d7ff <_entry_offset+0xd7ff> + 8002ff0c: 80050513 addi a0,a0,-2048 # b800 <_entry_offset+0xb800> + 8002ff10: 419030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002ff14: 000095b7 lui a1,0x9 + 8002ff18: 00000617 auipc a2,0x0 + 8002ff1c: f2c60613 addi a2,a2,-212 # 8002fe44 <_ZL10M103Write0jh> + 8002ff20: fff58593 addi a1,a1,-1 # 8fff <_entry_offset+0x8fff> + 8002ff24: 00008537 lui a0,0x8 + 8002ff28: 401030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002ff2c: 0000f5b7 lui a1,0xf + 8002ff30: 00000617 auipc a2,0x0 + 8002ff34: f0060613 addi a2,a2,-256 # 8002fe30 <_ZL10M103Write1jh> + 8002ff38: fff58593 addi a1,a1,-1 # efff <_entry_offset+0xefff> + 8002ff3c: 0000e537 lui a0,0xe + 8002ff40: 3e9030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8002ff44: fff40593 addi a1,s0,-1 + 8002ff48: 00013403 ld s0,0(sp) + 8002ff4c: 00813083 ld ra,8(sp) + 8002ff50: 00000617 auipc a2,0x0 + 8002ff54: ed460613 addi a2,a2,-300 # 8002fe24 <_ZL10M103Write2jh> + 8002ff58: 0000f537 lui a0,0xf + 8002ff5c: 01010113 addi sp,sp,16 + 8002ff60: 3c90306f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008002ff64 <_Z14Mapper103_InitP8CartInfo>: + 8002ff64: fe010113 addi sp,sp,-32 + 8002ff68: 00113c23 sd ra,24(sp) + 8002ff6c: 00813823 sd s0,16(sp) + 8002ff70: 00913423 sd s1,8(sp) + 8002ff74: 00000797 auipc a5,0x0 + 8002ff78: f1878793 addi a5,a5,-232 # 8002fe8c <_ZL9M103Powerv> + 8002ff7c: 00f53023 sd a5,0(a0) # f000 <_entry_offset+0xf000> + 8002ff80: 00000797 auipc a5,0x0 + 8002ff84: ed478793 addi a5,a5,-300 # 8002fe54 <_ZL9M103Closev> + 8002ff88: 00f53823 sd a5,16(a0) + 8002ff8c: 00000797 auipc a5,0x0 + 8002ff90: e9478793 addi a5,a5,-364 # 8002fe20 <_ZL12StateRestorei> + 8002ff94: 0019c417 auipc s0,0x19c + 8002ff98: 5c040413 addi s0,s0,1472 # 801cc554 <_ZL8WRAMSIZE> + 8002ff9c: 0019c717 auipc a4,0x19c + 8002ffa0: 6af73e23 sd a5,1724(a4) # 801cc658 + 8002ffa4: 00004537 lui a0,0x4 + 8002ffa8: 000047b7 lui a5,0x4 + 8002ffac: 00f42023 sw a5,0(s0) + 8002ffb0: cbce20ef jal ra,8001246c <_Z12FCEU_gmallocj> + 8002ffb4: 00042603 lw a2,0(s0) + 8002ffb8: 00050593 mv a1,a0 + 8002ffbc: 0019c497 auipc s1,0x19c + 8002ffc0: 58c48493 addi s1,s1,1420 # 801cc548 <_ZL4WRAM> + 8002ffc4: 00100693 li a3,1 + 8002ffc8: 01000513 li a0,16 + 8002ffcc: 00b4b023 sd a1,0(s1) + 8002ffd0: d24e00ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 8002ffd4: 00042583 lw a1,0(s0) + 8002ffd8: 0004b503 ld a0,0(s1) + 8002ffdc: 00015697 auipc a3,0x15 + 8002ffe0: 34c68693 addi a3,a3,844 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 8002ffe4: 00000613 li a2,0 + 8002ffe8: 828d00ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8002ffec: 01013403 ld s0,16(sp) + 8002fff0: 01813083 ld ra,24(sp) + 8002fff4: 00813483 ld s1,8(sp) + 8002fff8: 00000693 li a3,0 + 8002fffc: 00000613 li a2,0 + 80030000: fff00593 li a1,-1 + 80030004: 0001c517 auipc a0,0x1c + 80030008: 38450513 addi a0,a0,900 # 8004c388 <_ZL9StateRegs> + 8003000c: 02010113 addi sp,sp,32 + 80030010: 800d006f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080030014 <_ZL8WriteEXPjh>: + 80030014: 0815f593 andi a1,a1,129 + 80030018: 0019c797 auipc a5,0x19c + 8003001c: 54b78423 sb a1,1352(a5) # 801cc560 + 80030020: 00008067 ret + +0000000080030024 <_ZL8M28Closev>: + 80030024: 00008067 ret + +0000000080030028 <_ZL4Syncv>: + 80030028: 0019c797 auipc a5,0x19c + 8003002c: 5357c783 lbu a5,1333(a5) # 801cc55d + 80030030: 03c7f793 andi a5,a5,60 + 80030034: 00016697 auipc a3,0x16 + 80030038: 16c68693 addi a3,a3,364 # 800461a0 <_ZL3lut+0x340> + 8003003c: 00279793 slli a5,a5,0x2 + 80030040: 00d787b3 add a5,a5,a3 + 80030044: 0007a703 lw a4,0(a5) + 80030048: ff010113 addi sp,sp,-16 + 8003004c: 0019c797 auipc a5,0x19c + 80030050: 5127c783 lbu a5,1298(a5) # 801cc55e + 80030054: 00d70733 add a4,a4,a3 + 80030058: 00113423 sd ra,8(sp) + 8003005c: 00813023 sd s0,0(sp) + 80030060: 0017979b slliw a5,a5,0x1 + 80030064: 00070067 jr a4 + 80030068: 00000713 li a4,0 + 8003006c: 00000793 li a5,0 + 80030070: 0019c597 auipc a1,0x19c + 80030074: 4e85a583 lw a1,1256(a1) # 801cc558 <_ZL12prg_mask_16k> + 80030078: 00e5f433 and s0,a1,a4 + 8003007c: 00008537 lui a0,0x8 + 80030080: 00f5f5b3 and a1,a1,a5 + 80030084: bd5e00ef jal ra,80010c58 <_Z8setprg16jj> + 80030088: 00040593 mv a1,s0 + 8003008c: 0000c537 lui a0,0xc + 80030090: bc9e00ef jal ra,80010c58 <_Z8setprg16jj> + 80030094: 00013403 ld s0,0(sp) + 80030098: 00813083 ld ra,8(sp) + 8003009c: 0019c517 auipc a0,0x19c + 800300a0: 4c054503 lbu a0,1216(a0) # 801cc55c + 800300a4: 01010113 addi sp,sp,16 + 800300a8: e5de006f j 80010f04 <_Z7setchr8j> + 800300ac: 0019c717 auipc a4,0x19c + 800300b0: 4b374703 lbu a4,1203(a4) # 801cc55f + 800300b4: 0017171b slliw a4,a4,0x1 + 800300b8: 00277713 andi a4,a4,2 + 800300bc: ffd7f793 andi a5,a5,-3 + 800300c0: 00f767b3 or a5,a4,a5 + 800300c4: 0017e713 ori a4,a5,1 + 800300c8: fa9ff06f j 80030070 <_ZL4Syncv+0x48> + 800300cc: 0019c717 auipc a4,0x19c + 800300d0: 49374703 lbu a4,1171(a4) # 801cc55f + 800300d4: 0017171b slliw a4,a4,0x1 + 800300d8: 00677713 andi a4,a4,6 + 800300dc: ff97f793 andi a5,a5,-7 + 800300e0: 00f767b3 or a5,a4,a5 + 800300e4: 0007879b sext.w a5,a5 + 800300e8: 0017e713 ori a4,a5,1 + 800300ec: f85ff06f j 80030070 <_ZL4Syncv+0x48> + 800300f0: 0019c717 auipc a4,0x19c + 800300f4: 46f74703 lbu a4,1135(a4) # 801cc55f + 800300f8: 0017171b slliw a4,a4,0x1 + 800300fc: 00e77713 andi a4,a4,14 + 80030100: ff17f793 andi a5,a5,-15 + 80030104: 00f767b3 or a5,a4,a5 + 80030108: 0007879b sext.w a5,a5 + 8003010c: 0017e713 ori a4,a5,1 + 80030110: f61ff06f j 80030070 <_ZL4Syncv+0x48> + 80030114: 0019c717 auipc a4,0x19c + 80030118: 44b74703 lbu a4,1099(a4) # 801cc55f + 8003011c: ff97f693 andi a3,a5,-7 + 80030120: 00777713 andi a4,a4,7 + 80030124: 00e6e6b3 or a3,a3,a4 + 80030128: 0017e713 ori a4,a5,1 + 8003012c: 0006879b sext.w a5,a3 + 80030130: f41ff06f j 80030070 <_ZL4Syncv+0x48> + 80030134: 0019c717 auipc a4,0x19c + 80030138: 42b74703 lbu a4,1067(a4) # 801cc55f + 8003013c: 00f77693 andi a3,a4,15 + 80030140: ff17f713 andi a4,a5,-15 + 80030144: 00d76733 or a4,a4,a3 + 80030148: 0007071b sext.w a4,a4 + 8003014c: f25ff06f j 80030070 <_ZL4Syncv+0x48> + 80030150: 0019c717 auipc a4,0x19c + 80030154: 40f74703 lbu a4,1039(a4) # 801cc55f + 80030158: 00777693 andi a3,a4,7 + 8003015c: ff97f713 andi a4,a5,-7 + 80030160: 00d76733 or a4,a4,a3 + 80030164: 0007071b sext.w a4,a4 + 80030168: f09ff06f j 80030070 <_ZL4Syncv+0x48> + 8003016c: 0019c717 auipc a4,0x19c + 80030170: 3f374703 lbu a4,1011(a4) # 801cc55f + 80030174: ffd7f693 andi a3,a5,-3 + 80030178: 00377713 andi a4,a4,3 + 8003017c: 00e6e6b3 or a3,a3,a4 + 80030180: 0017e713 ori a4,a5,1 + 80030184: 0006879b sext.w a5,a3 + 80030188: ee9ff06f j 80030070 <_ZL4Syncv+0x48> + 8003018c: 0019c717 auipc a4,0x19c + 80030190: 3d374703 lbu a4,979(a4) # 801cc55f + 80030194: ff17f693 andi a3,a5,-15 + 80030198: 00f77713 andi a4,a4,15 + 8003019c: 00e6e6b3 or a3,a3,a4 + 800301a0: 0017e713 ori a4,a5,1 + 800301a4: 0006879b sext.w a5,a3 + 800301a8: ec9ff06f j 80030070 <_ZL4Syncv+0x48> + 800301ac: 0019c717 auipc a4,0x19c + 800301b0: 3b374703 lbu a4,947(a4) # 801cc55f + 800301b4: 00177713 andi a4,a4,1 + 800301b8: 00f76733 or a4,a4,a5 + 800301bc: eb5ff06f j 80030070 <_ZL4Syncv+0x48> + 800301c0: 0019c697 auipc a3,0x19c + 800301c4: 39f6c683 lbu a3,927(a3) # 801cc55f + 800301c8: 0016f693 andi a3,a3,1 + 800301cc: 0017e713 ori a4,a5,1 + 800301d0: 00f6e7b3 or a5,a3,a5 + 800301d4: e9dff06f j 80030070 <_ZL4Syncv+0x48> + 800301d8: 0019c717 auipc a4,0x19c + 800301dc: 38774703 lbu a4,903(a4) # 801cc55f + 800301e0: 00377693 andi a3,a4,3 + 800301e4: ffd7f713 andi a4,a5,-3 + 800301e8: 00d76733 or a4,a4,a3 + 800301ec: 0007071b sext.w a4,a4 + 800301f0: e81ff06f j 80030070 <_ZL4Syncv+0x48> + +00000000800301f4 <_ZL12StateRestorei>: + 800301f4: e35ff06f j 80030028 <_ZL4Syncv> + +00000000800301f8 <_ZL8M28Resetv>: + 800301f8: 03f00793 li a5,63 + 800301fc: 0019c717 auipc a4,0x19c + 80030200: 36f70123 sb a5,866(a4) # 801cc55e + 80030204: 00f00793 li a5,15 + 80030208: 0019c717 auipc a4,0x19c + 8003020c: 34f70ba3 sb a5,855(a4) # 801cc55f + 80030210: e19ff06f j 80030028 <_ZL4Syncv> + +0000000080030214 <_ZL8M28Powerv>: + 80030214: 00093797 auipc a5,0x93 + 80030218: 9ac7a783 lw a5,-1620(a5) # 800c2bc0 + 8003021c: 000065b7 lui a1,0x6 + 80030220: ff010113 addi sp,sp,-16 + 80030224: fff7879b addiw a5,a5,-1 + 80030228: 00000617 auipc a2,0x0 + 8003022c: dec60613 addi a2,a2,-532 # 80030014 <_ZL8WriteEXPjh> + 80030230: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 80030234: 00005537 lui a0,0x5 + 80030238: 00113423 sd ra,8(sp) + 8003023c: 00813023 sd s0,0(sp) + 80030240: 0019c717 auipc a4,0x19c + 80030244: 30f72c23 sw a5,792(a4) # 801cc558 <_ZL12prg_mask_16k> + 80030248: 00010437 lui s0,0x10 + 8003024c: 0dd030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80030250: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80030254: 00000617 auipc a2,0x0 + 80030258: 0e860613 addi a2,a2,232 # 8003033c <_ZL8WritePRGjh> + 8003025c: 00008537 lui a0,0x8 + 80030260: 0c9030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80030264: fff40593 addi a1,s0,-1 + 80030268: fffe0617 auipc a2,0xfffe0 + 8003026c: 3f860613 addi a2,a2,1016 # 80010660 <_Z6CartBRj> + 80030270: 00008537 lui a0,0x8 + 80030274: 7a8030ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80030278: 00008437 lui s0,0x8 + 8003027c: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 80030280: fffe0617 auipc a2,0xfffe0 + 80030284: 3e060613 addi a2,a2,992 # 80010660 <_Z6CartBRj> + 80030288: 00006537 lui a0,0x6 + 8003028c: 790030ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80030290: fff40593 addi a1,s0,-1 + 80030294: fffe0617 auipc a2,0xfffe0 + 80030298: 3f860613 addi a2,a2,1016 # 8001068c <_Z6CartBWjh> + 8003029c: 00006537 lui a0,0x6 + 800302a0: 089030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800302a4: 03f00793 li a5,63 + 800302a8: 00013403 ld s0,0(sp) + 800302ac: 00813083 ld ra,8(sp) + 800302b0: 0019c717 auipc a4,0x19c + 800302b4: 2af70723 sb a5,686(a4) # 801cc55e + 800302b8: 00f00793 li a5,15 + 800302bc: 0019c717 auipc a4,0x19c + 800302c0: 2af701a3 sb a5,675(a4) # 801cc55f + 800302c4: 01010113 addi sp,sp,16 + 800302c8: d61ff06f j 80030028 <_ZL4Syncv> + +00000000800302cc <_Z10SyncMirrorv>: + 800302cc: 0019c797 auipc a5,0x19c + 800302d0: 2917c783 lbu a5,657(a5) # 801cc55d + 800302d4: 0037f793 andi a5,a5,3 + 800302d8: 00200713 li a4,2 + 800302dc: 00e78e63 beq a5,a4,800302f8 <_Z10SyncMirrorv+0x2c> + 800302e0: 00300713 li a4,3 + 800302e4: 02e78263 beq a5,a4,80030308 <_Z10SyncMirrorv+0x3c> + 800302e8: 00100713 li a4,1 + 800302ec: 00e78a63 beq a5,a4,80030300 <_Z10SyncMirrorv+0x34> + 800302f0: 00200513 li a0,2 + 800302f4: d55e006f j 80011048 <_Z9setmirrori> + 800302f8: 00100513 li a0,1 + 800302fc: d4de006f j 80011048 <_Z9setmirrori> + 80030300: 00300513 li a0,3 + 80030304: d45e006f j 80011048 <_Z9setmirrori> + 80030308: 00000513 li a0,0 + 8003030c: d3de006f j 80011048 <_Z9setmirrori> + +0000000080030310 <_Z6Mirrorh>: + 80030310: 0019c717 auipc a4,0x19c + 80030314: 24d70713 addi a4,a4,589 # 801cc55d + 80030318: 00074783 lbu a5,0(a4) + 8003031c: 0027f693 andi a3,a5,2 + 80030320: 00069c63 bnez a3,80030338 <_Z6Mirrorh+0x28> + 80030324: 4045551b sraiw a0,a0,0x4 + 80030328: 00157513 andi a0,a0,1 + 8003032c: ffe7f793 andi a5,a5,-2 + 80030330: 00f56533 or a0,a0,a5 + 80030334: 00a70023 sb a0,0(a4) + 80030338: f95ff06f j 800302cc <_Z10SyncMirrorv> + +000000008003033c <_ZL8WritePRGjh>: + 8003033c: ff010113 addi sp,sp,-16 + 80030340: 00113423 sd ra,8(sp) + 80030344: 0019c797 auipc a5,0x19c + 80030348: 21c7c783 lbu a5,540(a5) # 801cc560 + 8003034c: 08000713 li a4,128 + 80030350: 08e78063 beq a5,a4,800303d0 <_ZL8WritePRGjh+0x94> + 80030354: 02f76863 bltu a4,a5,80030384 <_ZL8WritePRGjh+0x48> + 80030358: 04078c63 beqz a5,800303b0 <_ZL8WritePRGjh+0x74> + 8003035c: 00100713 li a4,1 + 80030360: 04e79263 bne a5,a4,800303a4 <_ZL8WritePRGjh+0x68> + 80030364: 00f5f793 andi a5,a1,15 + 80030368: 00058513 mv a0,a1 + 8003036c: 0019c717 auipc a4,0x19c + 80030370: 1ef709a3 sb a5,499(a4) # 801cc55f + 80030374: f9dff0ef jal ra,80030310 <_Z6Mirrorh> + 80030378: 00813083 ld ra,8(sp) + 8003037c: 01010113 addi sp,sp,16 + 80030380: ca9ff06f j 80030028 <_ZL4Syncv> + 80030384: 08100713 li a4,129 + 80030388: 00e79e63 bne a5,a4,800303a4 <_ZL8WritePRGjh+0x68> + 8003038c: 00813083 ld ra,8(sp) + 80030390: 03f5f513 andi a0,a1,63 + 80030394: 0019c797 auipc a5,0x19c + 80030398: 1ca78523 sb a0,458(a5) # 801cc55e + 8003039c: 01010113 addi sp,sp,16 + 800303a0: c89ff06f j 80030028 <_ZL4Syncv> + 800303a4: 00813083 ld ra,8(sp) + 800303a8: 01010113 addi sp,sp,16 + 800303ac: 00008067 ret + 800303b0: 0035f793 andi a5,a1,3 + 800303b4: 00058513 mv a0,a1 + 800303b8: 0019c717 auipc a4,0x19c + 800303bc: 1af70223 sb a5,420(a4) # 801cc55c + 800303c0: f51ff0ef jal ra,80030310 <_Z6Mirrorh> + 800303c4: 00813083 ld ra,8(sp) + 800303c8: 01010113 addi sp,sp,16 + 800303cc: c5dff06f j 80030028 <_ZL4Syncv> + 800303d0: 03f5f513 andi a0,a1,63 + 800303d4: 0019c797 auipc a5,0x19c + 800303d8: 18a784a3 sb a0,393(a5) # 801cc55d + 800303dc: ef1ff0ef jal ra,800302cc <_Z10SyncMirrorv> + 800303e0: 00813083 ld ra,8(sp) + 800303e4: 01010113 addi sp,sp,16 + 800303e8: c41ff06f j 80030028 <_ZL4Syncv> + +00000000800303ec <_Z13Mapper28_InitP8CartInfo>: + 800303ec: 00000797 auipc a5,0x0 + 800303f0: e2878793 addi a5,a5,-472 # 80030214 <_ZL8M28Powerv> + 800303f4: 00f53023 sd a5,0(a0) # 6000 <_entry_offset+0x6000> + 800303f8: 00000797 auipc a5,0x0 + 800303fc: e0078793 addi a5,a5,-512 # 800301f8 <_ZL8M28Resetv> + 80030400: 00f53423 sd a5,8(a0) + 80030404: 00000797 auipc a5,0x0 + 80030408: c2078793 addi a5,a5,-992 # 80030024 <_ZL8M28Closev> + 8003040c: 00f53823 sd a5,16(a0) + 80030410: 00000797 auipc a5,0x0 + 80030414: de478793 addi a5,a5,-540 # 800301f4 <_ZL12StateRestorei> + 80030418: 00000693 li a3,0 + 8003041c: 00000613 li a2,0 + 80030420: fff00593 li a1,-1 + 80030424: 0001c517 auipc a0,0x1c + 80030428: fc450513 addi a0,a0,-60 # 8004c3e8 <_ZL9StateRegs> + 8003042c: 0019c717 auipc a4,0x19c + 80030430: 22f73623 sd a5,556(a4) # 801cc658 + 80030434: bddcf06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080030438 <_ZL9M168Dummyjh>: + 80030438: 00008067 ret + +000000008003043c <_ZL4Syncv>: + 8003043c: ff010113 addi sp,sp,-16 + 80030440: 00000613 li a2,0 + 80030444: 00000593 li a1,0 + 80030448: 01000513 li a0,16 + 8003044c: 00113423 sd ra,8(sp) + 80030450: 00813023 sd s0,0(sp) + 80030454: a11e00ef jal ra,80010e64 <_Z8setchr4rijj> + 80030458: 0019c417 auipc s0,0x19c + 8003045c: 11040413 addi s0,s0,272 # 801cc568 <_ZL3reg> + 80030460: 00044603 lbu a2,0(s0) + 80030464: 000015b7 lui a1,0x1 + 80030468: 01000513 li a0,16 + 8003046c: 00f67613 andi a2,a2,15 + 80030470: 9f5e00ef jal ra,80010e64 <_Z8setchr4rijj> + 80030474: 00044583 lbu a1,0(s0) + 80030478: 00008537 lui a0,0x8 + 8003047c: 0065d593 srli a1,a1,0x6 + 80030480: fd8e00ef jal ra,80010c58 <_Z8setprg16jj> + 80030484: 00013403 ld s0,0(sp) + 80030488: 00813083 ld ra,8(sp) + 8003048c: fff00593 li a1,-1 + 80030490: 0000c537 lui a0,0xc + 80030494: 01010113 addi sp,sp,16 + 80030498: fc0e006f j 80010c58 <_Z8setprg16jj> + +000000008003049c <_ZL12StateRestorei>: + 8003049c: fa1ff06f j 8003043c <_ZL4Syncv> + +00000000800304a0 <_ZL9M168Writejh>: + 800304a0: 0019c797 auipc a5,0x19c + 800304a4: 0cb78423 sb a1,200(a5) # 801cc568 <_ZL3reg> + 800304a8: f95ff06f j 8003043c <_ZL4Syncv> + +00000000800304ac <_ZL9M168Closev>: + 800304ac: 0019c517 auipc a0,0x19c + 800304b0: 0c453503 ld a0,196(a0) # 801cc570 <_ZL6CHRRAM> + 800304b4: 02050263 beqz a0,800304d8 <_ZL9M168Closev+0x2c> + 800304b8: ff010113 addi sp,sp,-16 + 800304bc: 00113423 sd ra,8(sp) + 800304c0: 880e20ef jal ra,80012540 <_Z10FCEU_gfreePv> + 800304c4: 00813083 ld ra,8(sp) + 800304c8: 0019c797 auipc a5,0x19c + 800304cc: 0a07b423 sd zero,168(a5) # 801cc570 <_ZL6CHRRAM> + 800304d0: 01010113 addi sp,sp,16 + 800304d4: 00008067 ret + 800304d8: 0019c797 auipc a5,0x19c + 800304dc: 0807bc23 sd zero,152(a5) # 801cc570 <_ZL6CHRRAM> + 800304e0: 00008067 ret + +00000000800304e4 <_ZL9M168Powerv>: + 800304e4: ff010113 addi sp,sp,-16 + 800304e8: 00113423 sd ra,8(sp) + 800304ec: 0019c797 auipc a5,0x19c + 800304f0: 06078e23 sb zero,124(a5) # 801cc568 <_ZL3reg> + 800304f4: f49ff0ef jal ra,8003043c <_ZL4Syncv> + 800304f8: 000085b7 lui a1,0x8 + 800304fc: 00004537 lui a0,0x4 + 80030500: 00000617 auipc a2,0x0 + 80030504: f3860613 addi a2,a2,-200 # 80030438 <_ZL9M168Dummyjh> + 80030508: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 8003050c: 02050513 addi a0,a0,32 # 4020 <_entry_offset+0x4020> + 80030510: 618030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80030514: 00000617 auipc a2,0x0 + 80030518: f8c60613 addi a2,a2,-116 # 800304a0 <_ZL9M168Writejh> + 8003051c: 0000b5b7 lui a1,0xb + 80030520: 0000b537 lui a0,0xb + 80030524: 604030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80030528: 00000617 auipc a2,0x0 + 8003052c: f1060613 addi a2,a2,-240 # 80030438 <_ZL9M168Dummyjh> + 80030530: 0000f5b7 lui a1,0xf + 80030534: 0000f537 lui a0,0xf + 80030538: 5f0030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8003053c: 0000f5b7 lui a1,0xf + 80030540: 08058593 addi a1,a1,128 # f080 <_entry_offset+0xf080> + 80030544: 00058513 mv a0,a1 + 80030548: 00000617 auipc a2,0x0 + 8003054c: ef060613 addi a2,a2,-272 # 80030438 <_ZL9M168Dummyjh> + 80030550: 5d8030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80030554: 00813083 ld ra,8(sp) + 80030558: 000105b7 lui a1,0x10 + 8003055c: fffe0617 auipc a2,0xfffe0 + 80030560: 10460613 addi a2,a2,260 # 80010660 <_Z6CartBRj> + 80030564: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80030568: 00008537 lui a0,0x8 + 8003056c: 01010113 addi sp,sp,16 + 80030570: 4ac0306f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +0000000080030574 <_Z14Mapper168_InitP8CartInfo>: + 80030574: fe010113 addi sp,sp,-32 + 80030578: 00113c23 sd ra,24(sp) + 8003057c: 00813823 sd s0,16(sp) + 80030580: 00913423 sd s1,8(sp) + 80030584: 00000717 auipc a4,0x0 + 80030588: f6070713 addi a4,a4,-160 # 800304e4 <_ZL9M168Powerv> + 8003058c: 00e53023 sd a4,0(a0) # 8000 <_entry_offset+0x8000> + 80030590: 00050793 mv a5,a0 + 80030594: 00000717 auipc a4,0x0 + 80030598: f1870713 addi a4,a4,-232 # 800304ac <_ZL9M168Closev> + 8003059c: 00e7b823 sd a4,16(a5) + 800305a0: 00000693 li a3,0 + 800305a4: 00000613 li a2,0 + 800305a8: fff00593 li a1,-1 + 800305ac: 00000797 auipc a5,0x0 + 800305b0: ef078793 addi a5,a5,-272 # 8003049c <_ZL12StateRestorei> + 800305b4: 0001c517 auipc a0,0x1c + 800305b8: ec450513 addi a0,a0,-316 # 8004c478 <_ZL9StateRegs> + 800305bc: 0019c717 auipc a4,0x19c + 800305c0: 08f73e23 sd a5,156(a4) # 801cc658 + 800305c4: a4dcf0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800305c8: 0019c417 auipc s0,0x19c + 800305cc: f9c40413 addi s0,s0,-100 # 801cc564 <_ZL10CHRRAMSIZE> + 800305d0: 000107b7 lui a5,0x10 + 800305d4: 00010537 lui a0,0x10 + 800305d8: 00f42023 sw a5,0(s0) + 800305dc: e91e10ef jal ra,8001246c <_Z12FCEU_gmallocj> + 800305e0: 00042603 lw a2,0(s0) + 800305e4: 00050593 mv a1,a0 + 800305e8: 0019c497 auipc s1,0x19c + 800305ec: f8848493 addi s1,s1,-120 # 801cc570 <_ZL6CHRRAM> + 800305f0: 00100693 li a3,1 + 800305f4: 01000513 li a0,16 + 800305f8: 00b4b023 sd a1,0(s1) + 800305fc: fc9df0ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 80030600: 00042583 lw a1,0(s0) + 80030604: 01013403 ld s0,16(sp) + 80030608: 0004b503 ld a0,0(s1) + 8003060c: 01813083 ld ra,24(sp) + 80030610: 00813483 ld s1,8(sp) + 80030614: 00015697 auipc a3,0x15 + 80030618: 06468693 addi a3,a3,100 # 80045678 <_ZL10prot_array+0x10> + 8003061c: 00000613 li a2,0 + 80030620: 02010113 addi sp,sp,32 + 80030624: 9edcf06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080030628 <_ZL12StateRestorei>: + 80030628: 0019c317 auipc t1,0x19c + 8003062c: f6833303 ld t1,-152(t1) # 801cc590 <_ZL5WSync> + 80030630: 00030067 jr t1 + +0000000080030634 <_ZL6Write3jh>: + 80030634: 0085551b srliw a0,a0,0x8 + 80030638: 00357513 andi a0,a0,3 + 8003063c: 0019c797 auipc a5,0x19c + 80030640: f4478793 addi a5,a5,-188 # 801cc580 <_ZL3reg> + 80030644: 00a78533 add a0,a5,a0 + 80030648: 00b50023 sb a1,0(a0) # 10000 <_entry_offset+0x10000> + 8003064c: 0019c317 auipc t1,0x19c + 80030650: f4433303 ld t1,-188(t1) # 801cc590 <_ZL5WSync> + 80030654: 00030067 jr t1 + +0000000080030658 <_ZL4Syncv>: + 80030658: ff010113 addi sp,sp,-16 + 8003065c: 00000613 li a2,0 + 80030660: 000065b7 lui a1,0x6 + 80030664: 01000513 li a0,16 + 80030668: 00113423 sd ra,8(sp) + 8003066c: a7ce00ef jal ra,800108e8 <_Z8setprg8rijj> + 80030670: 0019c797 auipc a5,0x19c + 80030674: f1078793 addi a5,a5,-240 # 801cc580 <_ZL3reg> + 80030678: 0007c583 lbu a1,0(a5) + 8003067c: 0017c783 lbu a5,1(a5) + 80030680: 00008537 lui a0,0x8 + 80030684: 0045959b slliw a1,a1,0x4 + 80030688: 00f7f793 andi a5,a5,15 + 8003068c: 00f5e5b3 or a1,a1,a5 + 80030690: 0005859b sext.w a1,a1 + 80030694: f80e00ef jal ra,80010e14 <_Z8setprg32jj> + 80030698: 00813083 ld ra,8(sp) + 8003069c: 00000513 li a0,0 + 800306a0: 01010113 addi sp,sp,16 + 800306a4: 861e006f j 80010f04 <_Z7setchr8j> + +00000000800306a8 <_ZL5Sync3v>: + 800306a8: ff010113 addi sp,sp,-16 + 800306ac: 00000513 li a0,0 + 800306b0: 00113423 sd ra,8(sp) + 800306b4: 851e00ef jal ra,80010f04 <_Z7setchr8j> + 800306b8: 00000613 li a2,0 + 800306bc: 000065b7 lui a1,0x6 + 800306c0: 01000513 li a0,16 + 800306c4: a24e00ef jal ra,800108e8 <_Z8setprg8rijj> + 800306c8: 0019c717 auipc a4,0x19c + 800306cc: eb870713 addi a4,a4,-328 # 801cc580 <_ZL3reg> + 800306d0: 00374783 lbu a5,3(a4) + 800306d4: 00016697 auipc a3,0x16 + 800306d8: bcc68693 addi a3,a3,-1076 # 800462a0 <_ZL3lut+0x440> + 800306dc: 0077f793 andi a5,a5,7 + 800306e0: 00279793 slli a5,a5,0x2 + 800306e4: 00d787b3 add a5,a5,a3 + 800306e8: 0007a783 lw a5,0(a5) + 800306ec: 00d787b3 add a5,a5,a3 + 800306f0: 00078067 jr a5 + 800306f4: 00274783 lbu a5,2(a4) + 800306f8: 00074583 lbu a1,0(a4) + 800306fc: 00813083 ld ra,8(sp) + 80030700: 0047979b slliw a5,a5,0x4 + 80030704: 0ff7f793 andi a5,a5,255 + 80030708: 00f5f593 andi a1,a1,15 + 8003070c: 00008537 lui a0,0x8 + 80030710: 00f5e5b3 or a1,a1,a5 + 80030714: 01010113 addi sp,sp,16 + 80030718: efce006f j 80010e14 <_Z8setprg32jj> + 8003071c: 00174783 lbu a5,1(a4) + 80030720: 00274583 lbu a1,2(a4) + 80030724: 00074703 lbu a4,0(a4) + 80030728: 4017d79b sraiw a5,a5,0x1 + 8003072c: 0045959b slliw a1,a1,0x4 + 80030730: 00813083 ld ra,8(sp) + 80030734: 0ff5f593 andi a1,a1,255 + 80030738: 0017f793 andi a5,a5,1 + 8003073c: 00b7e7b3 or a5,a5,a1 + 80030740: 00e77593 andi a1,a4,14 + 80030744: 00f5e5b3 or a1,a1,a5 + 80030748: 00008537 lui a0,0x8 + 8003074c: 01010113 addi sp,sp,16 + 80030750: ec4e006f j 80010e14 <_Z8setprg32jj> + 80030754: 00274783 lbu a5,2(a4) + 80030758: 00074583 lbu a1,0(a4) + 8003075c: 00813083 ld ra,8(sp) + 80030760: 0047979b slliw a5,a5,0x4 + 80030764: 0ff7f793 andi a5,a5,255 + 80030768: 00c5f593 andi a1,a1,12 + 8003076c: 00008537 lui a0,0x8 + 80030770: 00f5e5b3 or a1,a1,a5 + 80030774: 01010113 addi sp,sp,16 + 80030778: e9ce006f j 80010e14 <_Z8setprg32jj> + 8003077c: 00074583 lbu a1,0(a4) + 80030780: 00274783 lbu a5,2(a4) + 80030784: 00174683 lbu a3,1(a4) + 80030788: 00813083 ld ra,8(sp) + 8003078c: 00c5f593 andi a1,a1,12 + 80030790: 0026f713 andi a4,a3,2 + 80030794: 0047979b slliw a5,a5,0x4 + 80030798: 0ff7f793 andi a5,a5,255 + 8003079c: 00e5e5b3 or a1,a1,a4 + 800307a0: 00f5e5b3 or a1,a1,a5 + 800307a4: 00008537 lui a0,0x8 + 800307a8: 01010113 addi sp,sp,16 + 800307ac: e68e006f j 80010e14 <_Z8setprg32jj> + +00000000800307b0 <_ZL5Closev>: + 800307b0: 0019c517 auipc a0,0x19c + 800307b4: dd853503 ld a0,-552(a0) # 801cc588 <_ZL4WRAM> + 800307b8: 02050263 beqz a0,800307dc <_ZL5Closev+0x2c> + 800307bc: ff010113 addi sp,sp,-16 + 800307c0: 00113423 sd ra,8(sp) + 800307c4: d7de10ef jal ra,80012540 <_Z10FCEU_gfreePv> + 800307c8: 00813083 ld ra,8(sp) + 800307cc: 0019c797 auipc a5,0x19c + 800307d0: da07be23 sd zero,-580(a5) # 801cc588 <_ZL4WRAM> + 800307d4: 01010113 addi sp,sp,16 + 800307d8: 00008067 ret + 800307dc: 0019c797 auipc a5,0x19c + 800307e0: da07b623 sd zero,-596(a5) # 801cc588 <_ZL4WRAM> + 800307e4: 00008067 ret + +00000000800307e8 <_ZL5Powerv>: + 800307e8: ff010113 addi sp,sp,-16 + 800307ec: 00813023 sd s0,0(sp) + 800307f0: 0019c417 auipc s0,0x19c + 800307f4: d9040413 addi s0,s0,-624 # 801cc580 <_ZL3reg> + 800307f8: 00800613 li a2,8 + 800307fc: 00000593 li a1,0 + 80030800: 00040513 mv a0,s0 + 80030804: 00113423 sd ra,8(sp) + 80030808: 2200b0ef jal ra,8003ba28 + 8003080c: 000065b7 lui a1,0x6 + 80030810: fff00793 li a5,-1 + 80030814: 00000617 auipc a2,0x0 + 80030818: 25460613 addi a2,a2,596 # 80030a68 <_ZL5Writejh> + 8003081c: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 80030820: 00005537 lui a0,0x5 + 80030824: 00f400a3 sb a5,1(s0) + 80030828: 300030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8003082c: 000105b7 lui a1,0x10 + 80030830: fffe0617 auipc a2,0xfffe0 + 80030834: e3060613 addi a2,a2,-464 # 80010660 <_Z6CartBRj> + 80030838: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 8003083c: 00006537 lui a0,0x6 + 80030840: 1dc030ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80030844: 000085b7 lui a1,0x8 + 80030848: fffe0617 auipc a2,0xfffe0 + 8003084c: e4460613 addi a2,a2,-444 # 8001068c <_Z6CartBWjh> + 80030850: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 80030854: 00006537 lui a0,0x6 + 80030858: 2d0030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8003085c: 0019c517 auipc a0,0x19c + 80030860: d4052503 lw a0,-704(a0) # 801cc59c <_ZL8WRAMSIZE> + 80030864: 0019c617 auipc a2,0x19c + 80030868: d2463603 ld a2,-732(a2) # 801cc588 <_ZL4WRAM> + 8003086c: 000065b7 lui a1,0x6 + 80030870: 00a5551b srliw a0,a0,0xa + 80030874: fa0cf0ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 80030878: 00013403 ld s0,0(sp) + 8003087c: 00813083 ld ra,8(sp) + 80030880: 0019c317 auipc t1,0x19c + 80030884: d1033303 ld t1,-752(t1) # 801cc590 <_ZL5WSync> + 80030888: 01010113 addi sp,sp,16 + 8003088c: 00030067 jr t1 + +0000000080030890 <_ZL6Power3v>: + 80030890: 000065b7 lui a1,0x6 + 80030894: 070007b7 lui a5,0x7000 + 80030898: ff010113 addi sp,sp,-16 + 8003089c: 0037879b addiw a5,a5,3 + 800308a0: 00000617 auipc a2,0x0 + 800308a4: d9460613 addi a2,a2,-620 # 80030634 <_ZL6Write3jh> + 800308a8: fff58593 addi a1,a1,-1 # 5fff <_entry_offset+0x5fff> + 800308ac: 00005537 lui a0,0x5 + 800308b0: 00113423 sd ra,8(sp) + 800308b4: 0019c717 auipc a4,0x19c + 800308b8: ccf72623 sw a5,-820(a4) # 801cc580 <_ZL3reg> + 800308bc: 26c030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800308c0: 000105b7 lui a1,0x10 + 800308c4: fffe0617 auipc a2,0xfffe0 + 800308c8: d9c60613 addi a2,a2,-612 # 80010660 <_Z6CartBRj> + 800308cc: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 800308d0: 00006537 lui a0,0x6 + 800308d4: 148030ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800308d8: 000085b7 lui a1,0x8 + 800308dc: fffe0617 auipc a2,0xfffe0 + 800308e0: db060613 addi a2,a2,-592 # 8001068c <_Z6CartBWjh> + 800308e4: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 800308e8: 00006537 lui a0,0x6 + 800308ec: 23c030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800308f0: 0019c517 auipc a0,0x19c + 800308f4: cac52503 lw a0,-852(a0) # 801cc59c <_ZL8WRAMSIZE> + 800308f8: 0019c617 auipc a2,0x19c + 800308fc: c9063603 ld a2,-880(a2) # 801cc588 <_ZL4WRAM> + 80030900: 000065b7 lui a1,0x6 + 80030904: 00a5551b srliw a0,a0,0xa + 80030908: f0ccf0ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 8003090c: 00813083 ld ra,8(sp) + 80030910: 0019c317 auipc t1,0x19c + 80030914: c8033303 ld t1,-896(t1) # 801cc590 <_ZL5WSync> + 80030918: 01010113 addi sp,sp,16 + 8003091c: 00030067 jr t1 + +0000000080030920 <_ZL6Power2v>: + 80030920: ff010113 addi sp,sp,-16 + 80030924: 00800613 li a2,8 + 80030928: 00000593 li a1,0 + 8003092c: 0019c517 auipc a0,0x19c + 80030930: c5450513 addi a0,a0,-940 # 801cc580 <_ZL3reg> + 80030934: 00113423 sd ra,8(sp) + 80030938: 00813023 sd s0,0(sp) + 8003093c: 0ec0b0ef jal ra,8003ba28 + 80030940: 00004537 lui a0,0x4 + 80030944: 00100793 li a5,1 + 80030948: 01150513 addi a0,a0,17 # 4011 <_entry_offset+0x4011> + 8003094c: 0019c717 auipc a4,0x19c + 80030950: c2f70623 sb a5,-980(a4) # 801cc578 <_ZL10laststrobe> + 80030954: 00006437 lui s0,0x6 + 80030958: 184030ef jal ra,80033adc <_Z15GetWriteHandleri> + 8003095c: fff40593 addi a1,s0,-1 # 5fff <_entry_offset+0x5fff> + 80030960: 00000617 auipc a2,0x0 + 80030964: 08860613 addi a2,a2,136 # 800309e8 <_ZL7ReadLowj> + 80030968: 00005537 lui a0,0x5 + 8003096c: 0b0030ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80030970: fff40593 addi a1,s0,-1 + 80030974: 00000617 auipc a2,0x0 + 80030978: 17460613 addi a2,a2,372 # 80030ae8 <_ZL6Write2jh> + 8003097c: 00005537 lui a0,0x5 + 80030980: 1a8030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80030984: 000105b7 lui a1,0x10 + 80030988: fffe0617 auipc a2,0xfffe0 + 8003098c: cd860613 addi a2,a2,-808 # 80010660 <_Z6CartBRj> + 80030990: fff58593 addi a1,a1,-1 # ffff <_entry_offset+0xffff> + 80030994: 00006537 lui a0,0x6 + 80030998: 084030ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8003099c: 000085b7 lui a1,0x8 + 800309a0: fffe0617 auipc a2,0xfffe0 + 800309a4: cec60613 addi a2,a2,-788 # 8001068c <_Z6CartBWjh> + 800309a8: fff58593 addi a1,a1,-1 # 7fff <_entry_offset+0x7fff> + 800309ac: 00006537 lui a0,0x6 + 800309b0: 178030ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800309b4: 0019c517 auipc a0,0x19c + 800309b8: be852503 lw a0,-1048(a0) # 801cc59c <_ZL8WRAMSIZE> + 800309bc: 0019c617 auipc a2,0x19c + 800309c0: bcc63603 ld a2,-1076(a2) # 801cc588 <_ZL4WRAM> + 800309c4: 000065b7 lui a1,0x6 + 800309c8: 00a5551b srliw a0,a0,0xa + 800309cc: e48cf0ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 800309d0: 00013403 ld s0,0(sp) + 800309d4: 00813083 ld ra,8(sp) + 800309d8: 0019c317 auipc t1,0x19c + 800309dc: bb833303 ld t1,-1096(t1) # 801cc590 <_ZL5WSync> + 800309e0: 01010113 addi sp,sp,16 + 800309e4: 00030067 jr t1 + +00000000800309e8 <_ZL7ReadLowj>: + 800309e8: 00007737 lui a4,0x7 + 800309ec: 70070713 addi a4,a4,1792 # 7700 <_entry_offset+0x7700> + 800309f0: 000057b7 lui a5,0x5 + 800309f4: 00e57533 and a0,a0,a4 + 800309f8: 10078713 addi a4,a5,256 # 5100 <_entry_offset+0x5100> + 800309fc: 02e50e63 beq a0,a4,80030a38 <_ZL7ReadLowj+0x50> + 80030a00: 50078793 addi a5,a5,1280 + 80030a04: 02f51663 bne a0,a5,80030a30 <_ZL7ReadLowj+0x48> + 80030a08: 0019c517 auipc a0,0x19c + 80030a0c: b9054503 lbu a0,-1136(a0) # 801cc598 <_ZL7trigger> + 80030a10: 00050e63 beqz a0,80030a2c <_ZL7ReadLowj+0x44> + 80030a14: 0019c797 auipc a5,0x19c + 80030a18: b6c78793 addi a5,a5,-1172 # 801cc580 <_ZL3reg> + 80030a1c: 0027c503 lbu a0,2(a5) + 80030a20: 0017c783 lbu a5,1(a5) + 80030a24: 00f56533 or a0,a0,a5 + 80030a28: 0ff57513 andi a0,a0,255 + 80030a2c: 00008067 ret + 80030a30: 00400513 li a0,4 + 80030a34: 00008067 ret + 80030a38: 0019c797 auipc a5,0x19c + 80030a3c: b4878793 addi a5,a5,-1208 # 801cc580 <_ZL3reg> + 80030a40: 0027c503 lbu a0,2(a5) + 80030a44: 0007c683 lbu a3,0(a5) + 80030a48: 0017c703 lbu a4,1(a5) + 80030a4c: 0037c783 lbu a5,3(a5) + 80030a50: 00d56533 or a0,a0,a3 + 80030a54: 00e56533 or a0,a0,a4 + 80030a58: fff7c793 not a5,a5 + 80030a5c: 00f56533 or a0,a0,a5 + 80030a60: 0ff57513 andi a0,a0,255 + 80030a64: 00008067 ret + +0000000080030a68 <_ZL5Writejh>: + 80030a68: 00007737 lui a4,0x7 + 80030a6c: 30070713 addi a4,a4,768 # 7300 <_entry_offset+0x7300> + 80030a70: 000057b7 lui a5,0x5 + 80030a74: 00e57533 and a0,a0,a4 + 80030a78: 20078713 addi a4,a5,512 # 5200 <_entry_offset+0x5200> + 80030a7c: 04e50a63 beq a0,a4,80030ad0 <_ZL5Writejh+0x68> + 80030a80: 02a76263 bltu a4,a0,80030aa4 <_ZL5Writejh+0x3c> + 80030a84: 02f50c63 beq a0,a5,80030abc <_ZL5Writejh+0x54> + 80030a88: 10078793 addi a5,a5,256 + 80030a8c: 04f51c63 bne a0,a5,80030ae4 <_ZL5Writejh+0x7c> + 80030a90: 0019c797 auipc a5,0x19c + 80030a94: aeb78823 sb a1,-1296(a5) # 801cc580 <_ZL3reg> + 80030a98: 0019c317 auipc t1,0x19c + 80030a9c: af833303 ld t1,-1288(t1) # 801cc590 <_ZL5WSync> + 80030aa0: 00030067 jr t1 + 80030aa4: 30078793 addi a5,a5,768 + 80030aa8: 00f51863 bne a0,a5,80030ab8 <_ZL5Writejh+0x50> + 80030aac: 0019c797 auipc a5,0x19c + 80030ab0: acb78b23 sb a1,-1322(a5) # 801cc582 <_ZL3reg+0x2> + 80030ab4: 00008067 ret + 80030ab8: 00008067 ret + 80030abc: 0019c797 auipc a5,0x19c + 80030ac0: acb782a3 sb a1,-1339(a5) # 801cc581 <_ZL3reg+0x1> + 80030ac4: 0019c317 auipc t1,0x19c + 80030ac8: acc33303 ld t1,-1332(t1) # 801cc590 <_ZL5WSync> + 80030acc: 00030067 jr t1 + 80030ad0: 0019c797 auipc a5,0x19c + 80030ad4: aab789a3 sb a1,-1357(a5) # 801cc583 <_ZL3reg+0x3> + 80030ad8: 0019c317 auipc t1,0x19c + 80030adc: ab833303 ld t1,-1352(t1) # 801cc590 <_ZL5WSync> + 80030ae0: 00030067 jr t1 + 80030ae4: 00008067 ret + +0000000080030ae8 <_ZL6Write2jh>: + 80030ae8: 000057b7 lui a5,0x5 + 80030aec: 10178713 addi a4,a5,257 # 5101 <_entry_offset+0x5101> + 80030af0: 0ae50663 beq a0,a4,80030b9c <_ZL6Write2jh+0xb4> + 80030af4: 10078693 addi a3,a5,256 + 80030af8: 06d50663 beq a0,a3,80030b64 <_ZL6Write2jh+0x7c> + 80030afc: 00007737 lui a4,0x7 + 80030b00: 30070713 addi a4,a4,768 # 7300 <_entry_offset+0x7300> + 80030b04: 00e57533 and a0,a0,a4 + 80030b08: 20078713 addi a4,a5,512 + 80030b0c: 0ce50263 beq a0,a4,80030bd0 <_ZL6Write2jh+0xe8> + 80030b10: 06a76c63 bltu a4,a0,80030b88 <_ZL6Write2jh+0xa0> + 80030b14: 06f51663 bne a0,a5,80030b80 <_ZL6Write2jh+0x98> + 80030b18: ff010113 addi sp,sp,-16 + 80030b1c: 00813023 sd s0,0(sp) + 80030b20: 0019c417 auipc s0,0x19c + 80030b24: a6040413 addi s0,s0,-1440 # 801cc580 <_ZL3reg> + 80030b28: 0019c797 auipc a5,0x19c + 80030b2c: a687b783 ld a5,-1432(a5) # 801cc590 <_ZL5WSync> + 80030b30: 00113423 sd ra,8(sp) + 80030b34: 00b400a3 sb a1,1(s0) + 80030b38: 000780e7 jalr a5 + 80030b3c: 00140783 lb a5,1(s0) + 80030b40: 0007ca63 bltz a5,80030b54 <_ZL6Write2jh+0x6c> + 80030b44: 0019c717 auipc a4,0x19c + 80030b48: c5c72703 lw a4,-932(a4) # 801cc7a0 + 80030b4c: 07f00793 li a5,127 + 80030b50: 0ae7d063 bge a5,a4,80030bf0 <_ZL6Write2jh+0x108> + 80030b54: 00813083 ld ra,8(sp) + 80030b58: 00013403 ld s0,0(sp) + 80030b5c: 01010113 addi sp,sp,16 + 80030b60: 00008067 ret + 80030b64: 00600793 li a5,6 + 80030b68: 06f58e63 beq a1,a5,80030be4 <_ZL6Write2jh+0xfc> + 80030b6c: 0019c797 auipc a5,0x19c + 80030b70: a0b78ba3 sb a1,-1513(a5) # 801cc583 <_ZL3reg+0x3> + 80030b74: 0019c317 auipc t1,0x19c + 80030b78: a1c33303 ld t1,-1508(t1) # 801cc590 <_ZL5WSync> + 80030b7c: 00030067 jr t1 + 80030b80: fed506e3 beq a0,a3,80030b6c <_ZL6Write2jh+0x84> + 80030b84: 00008067 ret + 80030b88: 30078793 addi a5,a5,768 + 80030b8c: 04f51063 bne a0,a5,80030bcc <_ZL6Write2jh+0xe4> + 80030b90: 0019c797 auipc a5,0x19c + 80030b94: 9eb78923 sb a1,-1550(a5) # 801cc582 <_ZL3reg+0x2> + 80030b98: 00008067 ret + 80030b9c: 0019c797 auipc a5,0x19c + 80030ba0: 9dc78793 addi a5,a5,-1572 # 801cc578 <_ZL10laststrobe> + 80030ba4: 0007c703 lbu a4,0(a5) + 80030ba8: 00070e63 beqz a4,80030bc4 <_ZL6Write2jh+0xdc> + 80030bac: 00059c63 bnez a1,80030bc4 <_ZL6Write2jh+0xdc> + 80030bb0: 0019c697 auipc a3,0x19c + 80030bb4: 9e868693 addi a3,a3,-1560 # 801cc598 <_ZL7trigger> + 80030bb8: 0006c703 lbu a4,0(a3) + 80030bbc: 00174713 xori a4,a4,1 + 80030bc0: 00e68023 sb a4,0(a3) + 80030bc4: 00b78023 sb a1,0(a5) + 80030bc8: 00008067 ret + 80030bcc: 00008067 ret + 80030bd0: 0019c797 auipc a5,0x19c + 80030bd4: 9ab78823 sb a1,-1616(a5) # 801cc580 <_ZL3reg> + 80030bd8: 0019c317 auipc t1,0x19c + 80030bdc: 9b833303 ld t1,-1608(t1) # 801cc590 <_ZL5WSync> + 80030be0: 00030067 jr t1 + 80030be4: 00300593 li a1,3 + 80030be8: 00008537 lui a0,0x8 + 80030bec: a28e006f j 80010e14 <_Z8setprg32jj> + 80030bf0: 00013403 ld s0,0(sp) + 80030bf4: 00813083 ld ra,8(sp) + 80030bf8: 00000513 li a0,0 + 80030bfc: 01010113 addi sp,sp,16 + 80030c00: b04e006f j 80010f04 <_Z7setchr8j> + +0000000080030c04 <_ZL6M163HBv>: + 80030c04: 0019c797 auipc a5,0x19c + 80030c08: 97d78783 lb a5,-1667(a5) # 801cc581 <_ZL3reg+0x1> + 80030c0c: 0007c463 bltz a5,80030c14 <_ZL6M163HBv+0x10> + 80030c10: 00008067 ret + 80030c14: ff010113 addi sp,sp,-16 + 80030c18: 00113423 sd ra,8(sp) + 80030c1c: 0019c797 auipc a5,0x19c + 80030c20: b847a783 lw a5,-1148(a5) # 801cc7a0 + 80030c24: 0ef00713 li a4,239 + 80030c28: 00e78c63 beq a5,a4,80030c40 <_ZL6M163HBv+0x3c> + 80030c2c: 07f00713 li a4,127 + 80030c30: 02e78863 beq a5,a4,80030c60 <_ZL6M163HBv+0x5c> + 80030c34: 00813083 ld ra,8(sp) + 80030c38: 01010113 addi sp,sp,16 + 80030c3c: 00008067 ret + 80030c40: 00000593 li a1,0 + 80030c44: 00000513 li a0,0 + 80030c48: a9ce00ef jal ra,80010ee4 <_Z7setchr4jj> + 80030c4c: 00000593 li a1,0 + 80030c50: 00813083 ld ra,8(sp) + 80030c54: 00001537 lui a0,0x1 + 80030c58: 01010113 addi sp,sp,16 + 80030c5c: a88e006f j 80010ee4 <_Z7setchr4jj> + 80030c60: 00100593 li a1,1 + 80030c64: 00000513 li a0,0 + 80030c68: a7ce00ef jal ra,80010ee4 <_Z7setchr4jj> + 80030c6c: 00100593 li a1,1 + 80030c70: fe1ff06f j 80030c50 <_ZL6M163HBv+0x4c> + +0000000080030c74 <_Z14Mapper164_InitP8CartInfo>: + 80030c74: fe010113 addi sp,sp,-32 + 80030c78: 00113c23 sd ra,24(sp) + 80030c7c: 00813823 sd s0,16(sp) + 80030c80: 00913423 sd s1,8(sp) + 80030c84: 01213023 sd s2,0(sp) + 80030c88: 00000797 auipc a5,0x0 + 80030c8c: b6078793 addi a5,a5,-1184 # 800307e8 <_ZL5Powerv> + 80030c90: 00f53023 sd a5,0(a0) # 1000 <_entry_offset+0x1000> + 80030c94: 00000797 auipc a5,0x0 + 80030c98: b1c78793 addi a5,a5,-1252 # 800307b0 <_ZL5Closev> + 80030c9c: 00f53823 sd a5,16(a0) + 80030ca0: 00000797 auipc a5,0x0 + 80030ca4: 9b878793 addi a5,a5,-1608 # 80030658 <_ZL4Syncv> + 80030ca8: 0019c497 auipc s1,0x19c + 80030cac: 8f448493 addi s1,s1,-1804 # 801cc59c <_ZL8WRAMSIZE> + 80030cb0: 00050413 mv s0,a0 + 80030cb4: 0019c717 auipc a4,0x19c + 80030cb8: 8cf73e23 sd a5,-1828(a4) # 801cc590 <_ZL5WSync> + 80030cbc: 00002537 lui a0,0x2 + 80030cc0: 000027b7 lui a5,0x2 + 80030cc4: 00f4a023 sw a5,0(s1) + 80030cc8: fa4e10ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80030ccc: 0004a603 lw a2,0(s1) + 80030cd0: 00050593 mv a1,a0 + 80030cd4: 0019c917 auipc s2,0x19c + 80030cd8: 8b490913 addi s2,s2,-1868 # 801cc588 <_ZL4WRAM> + 80030cdc: 00100693 li a3,1 + 80030ce0: 01000513 li a0,16 + 80030ce4: 00b93023 sd a1,0(s2) + 80030ce8: 80ddf0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80030cec: 0004a583 lw a1,0(s1) + 80030cf0: 00093503 ld a0,0(s2) + 80030cf4: 00014697 auipc a3,0x14 + 80030cf8: 63468693 addi a3,a3,1588 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80030cfc: 00000613 li a2,0 + 80030d00: b10cf0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80030d04: 04c42783 lw a5,76(s0) + 80030d08: 00078a63 beqz a5,80030d1c <_Z14Mapper164_InitP8CartInfo+0xa8> + 80030d0c: 00093703 ld a4,0(s2) + 80030d10: 0004a783 lw a5,0(s1) + 80030d14: 00e43c23 sd a4,24(s0) + 80030d18: 02f42c23 sw a5,56(s0) + 80030d1c: 01013403 ld s0,16(sp) + 80030d20: 01813083 ld ra,24(sp) + 80030d24: 00813483 ld s1,8(sp) + 80030d28: 00013903 ld s2,0(sp) + 80030d2c: 00000797 auipc a5,0x0 + 80030d30: 8fc78793 addi a5,a5,-1796 # 80030628 <_ZL12StateRestorei> + 80030d34: 0019c717 auipc a4,0x19c + 80030d38: 92f73223 sd a5,-1756(a4) # 801cc658 + 80030d3c: 00000693 li a3,0 + 80030d40: 00000613 li a2,0 + 80030d44: fff00593 li a1,-1 + 80030d48: 0001b517 auipc a0,0x1b + 80030d4c: 76050513 addi a0,a0,1888 # 8004c4a8 <_ZL9StateRegs> + 80030d50: 02010113 addi sp,sp,32 + 80030d54: abccf06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080030d58 <_Z14Mapper163_InitP8CartInfo>: + 80030d58: fe010113 addi sp,sp,-32 + 80030d5c: 00113c23 sd ra,24(sp) + 80030d60: 00813823 sd s0,16(sp) + 80030d64: 00913423 sd s1,8(sp) + 80030d68: 01213023 sd s2,0(sp) + 80030d6c: 00000797 auipc a5,0x0 + 80030d70: bb478793 addi a5,a5,-1100 # 80030920 <_ZL6Power2v> + 80030d74: 00f53023 sd a5,0(a0) + 80030d78: 00000797 auipc a5,0x0 + 80030d7c: a3878793 addi a5,a5,-1480 # 800307b0 <_ZL5Closev> + 80030d80: 00f53823 sd a5,16(a0) + 80030d84: 00000797 auipc a5,0x0 + 80030d88: 8d478793 addi a5,a5,-1836 # 80030658 <_ZL4Syncv> + 80030d8c: 0019c717 auipc a4,0x19c + 80030d90: 80f73223 sd a5,-2044(a4) # 801cc590 <_ZL5WSync> + 80030d94: 00000797 auipc a5,0x0 + 80030d98: e7078793 addi a5,a5,-400 # 80030c04 <_ZL6M163HBv> + 80030d9c: 0019c497 auipc s1,0x19c + 80030da0: 80048493 addi s1,s1,-2048 # 801cc59c <_ZL8WRAMSIZE> + 80030da4: 00050413 mv s0,a0 + 80030da8: 0019c717 auipc a4,0x19c + 80030dac: 90f73c23 sd a5,-1768(a4) # 801cc6c0 + 80030db0: 00002537 lui a0,0x2 + 80030db4: 000027b7 lui a5,0x2 + 80030db8: 00f4a023 sw a5,0(s1) + 80030dbc: eb0e10ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80030dc0: 0004a603 lw a2,0(s1) + 80030dc4: 00050593 mv a1,a0 + 80030dc8: 0019b917 auipc s2,0x19b + 80030dcc: 7c090913 addi s2,s2,1984 # 801cc588 <_ZL4WRAM> + 80030dd0: 00100693 li a3,1 + 80030dd4: 01000513 li a0,16 + 80030dd8: 00b93023 sd a1,0(s2) + 80030ddc: f18df0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80030de0: 0004a583 lw a1,0(s1) + 80030de4: 00093503 ld a0,0(s2) + 80030de8: 00014697 auipc a3,0x14 + 80030dec: 54068693 addi a3,a3,1344 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80030df0: 00000613 li a2,0 + 80030df4: a1ccf0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80030df8: 04c42783 lw a5,76(s0) + 80030dfc: 00078a63 beqz a5,80030e10 <_Z14Mapper163_InitP8CartInfo+0xb8> + 80030e00: 00093703 ld a4,0(s2) + 80030e04: 0004a783 lw a5,0(s1) + 80030e08: 00e43c23 sd a4,24(s0) + 80030e0c: 02f42c23 sw a5,56(s0) + 80030e10: 01013403 ld s0,16(sp) + 80030e14: 01813083 ld ra,24(sp) + 80030e18: 00813483 ld s1,8(sp) + 80030e1c: 00013903 ld s2,0(sp) + 80030e20: 00000797 auipc a5,0x0 + 80030e24: 80878793 addi a5,a5,-2040 # 80030628 <_ZL12StateRestorei> + 80030e28: 0019c717 auipc a4,0x19c + 80030e2c: 82f73823 sd a5,-2000(a4) # 801cc658 + 80030e30: 00000693 li a3,0 + 80030e34: 00000613 li a2,0 + 80030e38: fff00593 li a1,-1 + 80030e3c: 0001b517 auipc a0,0x1b + 80030e40: 66c50513 addi a0,a0,1644 # 8004c4a8 <_ZL9StateRegs> + 80030e44: 02010113 addi sp,sp,32 + 80030e48: 9c8cf06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080030e4c <_Z13UNLFS304_InitP8CartInfo>: + 80030e4c: fe010113 addi sp,sp,-32 + 80030e50: 00113c23 sd ra,24(sp) + 80030e54: 00813823 sd s0,16(sp) + 80030e58: 00913423 sd s1,8(sp) + 80030e5c: 01213023 sd s2,0(sp) + 80030e60: 00000797 auipc a5,0x0 + 80030e64: a3078793 addi a5,a5,-1488 # 80030890 <_ZL6Power3v> + 80030e68: 00f53023 sd a5,0(a0) + 80030e6c: 00000797 auipc a5,0x0 + 80030e70: 94478793 addi a5,a5,-1724 # 800307b0 <_ZL5Closev> + 80030e74: 00f53823 sd a5,16(a0) + 80030e78: 00000797 auipc a5,0x0 + 80030e7c: 83078793 addi a5,a5,-2000 # 800306a8 <_ZL5Sync3v> + 80030e80: 0019b497 auipc s1,0x19b + 80030e84: 71c48493 addi s1,s1,1820 # 801cc59c <_ZL8WRAMSIZE> + 80030e88: 00050413 mv s0,a0 + 80030e8c: 0019b717 auipc a4,0x19b + 80030e90: 70f73223 sd a5,1796(a4) # 801cc590 <_ZL5WSync> + 80030e94: 00002537 lui a0,0x2 + 80030e98: 000027b7 lui a5,0x2 + 80030e9c: 00f4a023 sw a5,0(s1) + 80030ea0: dcce10ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80030ea4: 0004a603 lw a2,0(s1) + 80030ea8: 00050593 mv a1,a0 + 80030eac: 0019b917 auipc s2,0x19b + 80030eb0: 6dc90913 addi s2,s2,1756 # 801cc588 <_ZL4WRAM> + 80030eb4: 00100693 li a3,1 + 80030eb8: 01000513 li a0,16 + 80030ebc: 00b93023 sd a1,0(s2) + 80030ec0: e34df0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80030ec4: 0004a583 lw a1,0(s1) + 80030ec8: 00093503 ld a0,0(s2) + 80030ecc: 00014697 auipc a3,0x14 + 80030ed0: 45c68693 addi a3,a3,1116 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 80030ed4: 00000613 li a2,0 + 80030ed8: 938cf0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80030edc: 04c42783 lw a5,76(s0) + 80030ee0: 00078a63 beqz a5,80030ef4 <_Z13UNLFS304_InitP8CartInfo+0xa8> + 80030ee4: 00093703 ld a4,0(s2) + 80030ee8: 0004a783 lw a5,0(s1) + 80030eec: 00e43c23 sd a4,24(s0) + 80030ef0: 02f42c23 sw a5,56(s0) + 80030ef4: 01013403 ld s0,16(sp) + 80030ef8: 01813083 ld ra,24(sp) + 80030efc: 00813483 ld s1,8(sp) + 80030f00: 00013903 ld s2,0(sp) + 80030f04: fffff797 auipc a5,0xfffff + 80030f08: 72478793 addi a5,a5,1828 # 80030628 <_ZL12StateRestorei> + 80030f0c: 0019b717 auipc a4,0x19b + 80030f10: 74f73623 sd a5,1868(a4) # 801cc658 + 80030f14: 00000693 li a3,0 + 80030f18: 00000613 li a2,0 + 80030f1c: fff00593 li a1,-1 + 80030f20: 0001b517 auipc a0,0x1b + 80030f24: 58850513 addi a0,a0,1416 # 8004c4a8 <_ZL9StateRegs> + 80030f28: 02010113 addi sp,sp,32 + 80030f2c: 8e4cf06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080030f30 <_ZL9M193Resetv>: + 80030f30: 00008067 ret + +0000000080030f34 <_ZL4Syncv>: + 80030f34: 0019b517 auipc a0,0x19b + 80030f38: 67d54503 lbu a0,1661(a0) # 801cc5b1 <_ZL6mirror> + 80030f3c: ff010113 addi sp,sp,-16 + 80030f40: 00154513 xori a0,a0,1 + 80030f44: 00113423 sd ra,8(sp) + 80030f48: 00813023 sd s0,0(sp) + 80030f4c: 0019b417 auipc s0,0x19b + 80030f50: 65c40413 addi s0,s0,1628 # 801cc5a8 <_ZL3reg> + 80030f54: 8f4e00ef jal ra,80011048 <_Z9setmirrori> + 80030f58: 00344583 lbu a1,3(s0) + 80030f5c: 00008537 lui a0,0x8 + 80030f60: b3ddf0ef jal ra,80010a9c <_Z7setprg8jj> + 80030f64: 00d00593 li a1,13 + 80030f68: 0000a537 lui a0,0xa + 80030f6c: b31df0ef jal ra,80010a9c <_Z7setprg8jj> + 80030f70: 00e00593 li a1,14 + 80030f74: 0000c537 lui a0,0xc + 80030f78: b25df0ef jal ra,80010a9c <_Z7setprg8jj> + 80030f7c: 00f00593 li a1,15 + 80030f80: 0000e537 lui a0,0xe + 80030f84: b19df0ef jal ra,80010a9c <_Z7setprg8jj> + 80030f88: 00044583 lbu a1,0(s0) + 80030f8c: 00000513 li a0,0 + 80030f90: 0025d593 srli a1,a1,0x2 + 80030f94: f51df0ef jal ra,80010ee4 <_Z7setchr4jj> + 80030f98: 00144583 lbu a1,1(s0) + 80030f9c: 00001537 lui a0,0x1 + 80030fa0: 0015d593 srli a1,a1,0x1 + 80030fa4: f21df0ef jal ra,80010ec4 <_Z7setchr2jj> + 80030fa8: 00244583 lbu a1,2(s0) + 80030fac: 00013403 ld s0,0(sp) + 80030fb0: 00813083 ld ra,8(sp) + 80030fb4: 00002537 lui a0,0x2 + 80030fb8: 80050513 addi a0,a0,-2048 # 1800 <_entry_offset+0x1800> + 80030fbc: 0015d593 srli a1,a1,0x1 + 80030fc0: 01010113 addi sp,sp,16 + 80030fc4: f01df06f j 80010ec4 <_Z7setchr2jj> + +0000000080030fc8 <_ZL12StateRestorei>: + 80030fc8: f6dff06f j 80030f34 <_ZL4Syncv> + +0000000080030fcc <_ZL9M193Writejh>: + 80030fcc: 00357793 andi a5,a0,3 + 80030fd0: 0019b517 auipc a0,0x19b + 80030fd4: 5d850513 addi a0,a0,1496 # 801cc5a8 <_ZL3reg> + 80030fd8: 00f50533 add a0,a0,a5 + 80030fdc: 00b50023 sb a1,0(a0) + 80030fe0: f55ff06f j 80030f34 <_ZL4Syncv> + +0000000080030fe4 <_ZL9M193Powerv>: + 80030fe4: ff010113 addi sp,sp,-16 + 80030fe8: 00113423 sd ra,8(sp) + 80030fec: 00813023 sd s0,0(sp) + 80030ff0: 0019b797 auipc a5,0x19b + 80030ff4: 5c078023 sb zero,1472(a5) # 801cc5b0 <_ZL4bank> + 80030ff8: f3dff0ef jal ra,80030f34 <_ZL4Syncv> + 80030ffc: 000065b7 lui a1,0x6 + 80031000: 00000617 auipc a2,0x0 + 80031004: fcc60613 addi a2,a2,-52 # 80030fcc <_ZL9M193Writejh> + 80031008: 00358593 addi a1,a1,3 # 6003 <_entry_offset+0x6003> + 8003100c: 00006537 lui a0,0x6 + 80031010: 319020ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80031014: 00010437 lui s0,0x10 + 80031018: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8003101c: fffdf617 auipc a2,0xfffdf + 80031020: 64460613 addi a2,a2,1604 # 80010660 <_Z6CartBRj> + 80031024: 00008537 lui a0,0x8 + 80031028: 1f5020ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8003102c: fff40593 addi a1,s0,-1 + 80031030: 00013403 ld s0,0(sp) + 80031034: 00813083 ld ra,8(sp) + 80031038: fffdf617 auipc a2,0xfffdf + 8003103c: 65460613 addi a2,a2,1620 # 8001068c <_Z6CartBWjh> + 80031040: 00008537 lui a0,0x8 + 80031044: 01010113 addi sp,sp,16 + 80031048: 2e10206f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008003104c <_Z14Mapper193_InitP8CartInfo>: + 8003104c: 00000797 auipc a5,0x0 + 80031050: f9878793 addi a5,a5,-104 # 80030fe4 <_ZL9M193Powerv> + 80031054: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 80031058: 00000797 auipc a5,0x0 + 8003105c: ed878793 addi a5,a5,-296 # 80030f30 <_ZL9M193Resetv> + 80031060: 00f53423 sd a5,8(a0) + 80031064: 00000797 auipc a5,0x0 + 80031068: f6478793 addi a5,a5,-156 # 80030fc8 <_ZL12StateRestorei> + 8003106c: 00000693 li a3,0 + 80031070: 00000613 li a2,0 + 80031074: fff00593 li a1,-1 + 80031078: 0001b517 auipc a0,0x1b + 8003107c: 49050513 addi a0,a0,1168 # 8004c508 <_ZL9StateRegs> + 80031080: 0019b717 auipc a4,0x19b + 80031084: 5cf73c23 sd a5,1496(a4) # 801cc658 + 80031088: f89ce06f j 80000010 <_Z10AddExStatePvjiPKc> + +000000008003108c <_ZL6MBWRAMjh>: + 8003108c: 0019b797 auipc a5,0x19b + 80031090: 54f7c783 lbu a5,1359(a5) # 801cc5db <_ZL5DRegs+0x3> + 80031094: 0107f793 andi a5,a5,16 + 80031098: 00078863 beqz a5,800310a8 <_ZL6MBWRAMjh+0x1c> + 8003109c: 0019b797 auipc a5,0x19b + 800310a0: 5407a783 lw a5,1344(a5) # 801cc5dc <_ZL5is155> + 800310a4: 02078663 beqz a5,800310d0 <_ZL6MBWRAMjh+0x44> + 800310a8: 00b5579b srliw a5,a0,0xb + 800310ac: 00379713 slli a4,a5,0x3 + 800310b0: 00092797 auipc a5,0x92 + 800310b4: b9078793 addi a5,a5,-1136 # 800c2c40 + 800310b8: 00e787b3 add a5,a5,a4 + 800310bc: 0007b783 ld a5,0(a5) + 800310c0: 02051513 slli a0,a0,0x20 + 800310c4: 02055513 srli a0,a0,0x20 + 800310c8: 00a78533 add a0,a5,a0 + 800310cc: 00b50023 sb a1,0(a0) + 800310d0: 00008067 ret + +00000000800310d4 <_ZL6MAWRAMj>: + 800310d4: 0019b797 auipc a5,0x19b + 800310d8: 5077c783 lbu a5,1287(a5) # 801cc5db <_ZL5DRegs+0x3> + 800310dc: 0107f793 andi a5,a5,16 + 800310e0: 00078863 beqz a5,800310f0 <_ZL6MAWRAMj+0x1c> + 800310e4: 0019b797 auipc a5,0x19b + 800310e8: 4f87a783 lw a5,1272(a5) # 801cc5dc <_ZL5is155> + 800310ec: 02078863 beqz a5,8003111c <_ZL6MAWRAMj+0x48> + 800310f0: 00b5579b srliw a5,a0,0xb + 800310f4: 00379713 slli a4,a5,0x3 + 800310f8: 00092797 auipc a5,0x92 + 800310fc: b4878793 addi a5,a5,-1208 # 800c2c40 + 80031100: 00e787b3 add a5,a5,a4 + 80031104: 0007b783 ld a5,0(a5) + 80031108: 02051513 slli a0,a0,0x20 + 8003110c: 02055513 srli a0,a0,0x20 + 80031110: 00a78533 add a0,a5,a0 + 80031114: 00054503 lbu a0,0(a0) + 80031118: 00008067 ret + 8003111c: 00026517 auipc a0,0x26 + 80031120: 74c54503 lbu a0,1868(a0) # 80057868 + 80031124: 00008067 ret + +0000000080031128 <_ZL7MMC1CHRv>: + 80031128: fe010113 addi sp,sp,-32 + 8003112c: 00813823 sd s0,16(sp) + 80031130: 00113c23 sd ra,24(sp) + 80031134: 0019b417 auipc s0,0x19b + 80031138: 4a440413 addi s0,s0,1188 # 801cc5d8 <_ZL5DRegs> + 8003113c: 00913423 sd s1,8(sp) + 80031140: 0019b797 auipc a5,0x19b + 80031144: 4c07a783 lw a5,1216(a5) # 801cc600 <_ZL8WRAMSIZE> + 80031148: 00002737 lui a4,0x2 + 8003114c: 00144583 lbu a1,1(s0) + 80031150: 02f77463 bgeu a4,a5,80031178 <_ZL7MMC1CHRv+0x50> + 80031154: 00004737 lui a4,0x4 + 80031158: 0005859b sext.w a1,a1 + 8003115c: 08f77863 bgeu a4,a5,800311ec <_ZL7MMC1CHRv+0xc4> + 80031160: 4025d59b sraiw a1,a1,0x2 + 80031164: 0035f613 andi a2,a1,3 + 80031168: 01000513 li a0,16 + 8003116c: 000065b7 lui a1,0x6 + 80031170: f78df0ef jal ra,800108e8 <_Z8setprg8rijj> + 80031174: 00144583 lbu a1,1(s0) + 80031178: 0019b497 auipc s1,0x19b + 8003117c: 44848493 addi s1,s1,1096 # 801cc5c0 <_ZL12MMC1CHRHook4> + 80031180: 00044783 lbu a5,0(s0) + 80031184: 0004b703 ld a4,0(s1) + 80031188: 0107f793 andi a5,a5,16 + 8003118c: 08070863 beqz a4,8003121c <_ZL7MMC1CHRv+0xf4> + 80031190: 02079a63 bnez a5,800311c4 <_ZL7MMC1CHRv+0x9c> + 80031194: 0fe5f593 andi a1,a1,254 + 80031198: 00000513 li a0,0 + 8003119c: 000700e7 jalr a4 # 4000 <_entry_offset+0x4000> + 800311a0: 00144583 lbu a1,1(s0) + 800311a4: 01013403 ld s0,16(sp) + 800311a8: 0004b303 ld t1,0(s1) + 800311ac: 01813083 ld ra,24(sp) + 800311b0: 00813483 ld s1,8(sp) + 800311b4: 00001537 lui a0,0x1 + 800311b8: 0015e593 ori a1,a1,1 + 800311bc: 02010113 addi sp,sp,32 + 800311c0: 00030067 jr t1 + 800311c4: 00000513 li a0,0 + 800311c8: 000700e7 jalr a4 + 800311cc: 00244583 lbu a1,2(s0) + 800311d0: 01013403 ld s0,16(sp) + 800311d4: 0004b303 ld t1,0(s1) + 800311d8: 01813083 ld ra,24(sp) + 800311dc: 00813483 ld s1,8(sp) + 800311e0: 00001537 lui a0,0x1 + 800311e4: 02010113 addi sp,sp,32 + 800311e8: 00030067 jr t1 + 800311ec: 4035d59b sraiw a1,a1,0x3 + 800311f0: 0015f613 andi a2,a1,1 + 800311f4: 01000513 li a0,16 + 800311f8: 000065b7 lui a1,0x6 + 800311fc: eecdf0ef jal ra,800108e8 <_Z8setprg8rijj> + 80031200: 0019b497 auipc s1,0x19b + 80031204: 3c048493 addi s1,s1,960 # 801cc5c0 <_ZL12MMC1CHRHook4> + 80031208: 00044783 lbu a5,0(s0) + 8003120c: 0004b703 ld a4,0(s1) + 80031210: 00144583 lbu a1,1(s0) + 80031214: 0107f793 andi a5,a5,16 + 80031218: f6071ce3 bnez a4,80031190 <_ZL7MMC1CHRv+0x68> + 8003121c: 02078463 beqz a5,80031244 <_ZL7MMC1CHRv+0x11c> + 80031220: 00000513 li a0,0 + 80031224: cc1df0ef jal ra,80010ee4 <_Z7setchr4jj> + 80031228: 00244583 lbu a1,2(s0) + 8003122c: 01013403 ld s0,16(sp) + 80031230: 01813083 ld ra,24(sp) + 80031234: 00813483 ld s1,8(sp) + 80031238: 00001537 lui a0,0x1 + 8003123c: 02010113 addi sp,sp,32 + 80031240: ca5df06f j 80010ee4 <_Z7setchr4jj> + 80031244: 01013403 ld s0,16(sp) + 80031248: 01813083 ld ra,24(sp) + 8003124c: 00813483 ld s1,8(sp) + 80031250: 0015d513 srli a0,a1,0x1 + 80031254: 02010113 addi sp,sp,32 + 80031258: caddf06f j 80010f04 <_Z7setchr8j> + +000000008003125c <_ZL7MMC1PRGv>: + 8003125c: fe010113 addi sp,sp,-32 + 80031260: 00913423 sd s1,8(sp) + 80031264: 00113c23 sd ra,24(sp) + 80031268: 00813823 sd s0,16(sp) + 8003126c: 0019b797 auipc a5,0x19b + 80031270: 36c78793 addi a5,a5,876 # 801cc5d8 <_ZL5DRegs> + 80031274: 0019b497 auipc s1,0x19b + 80031278: 35448493 addi s1,s1,852 # 801cc5c8 <_ZL13MMC1PRGHook16> + 8003127c: 0017c403 lbu s0,1(a5) + 80031280: 0037c603 lbu a2,3(a5) + 80031284: 0004b683 ld a3,0(s1) + 80031288: 0007c783 lbu a5,0(a5) + 8003128c: 01047413 andi s0,s0,16 + 80031290: 00f67593 andi a1,a2,15 + 80031294: 00c7f713 andi a4,a5,12 + 80031298: 06068263 beqz a3,800312fc <_ZL7MMC1PRGv+0xa0> + 8003129c: 00800513 li a0,8 + 800312a0: 0ea70a63 beq a4,a0,80031394 <_ZL7MMC1PRGv+0x138> + 800312a4: 02e56063 bltu a0,a4,800312c4 <_ZL7MMC1PRGv+0x68> + 800312a8: 0087f793 andi a5,a5,8 + 800312ac: 0a078a63 beqz a5,80031360 <_ZL7MMC1PRGv+0x104> + 800312b0: 01813083 ld ra,24(sp) + 800312b4: 01013403 ld s0,16(sp) + 800312b8: 00813483 ld s1,8(sp) + 800312bc: 02010113 addi sp,sp,32 + 800312c0: 00008067 ret + 800312c4: 00c00793 li a5,12 + 800312c8: fef714e3 bne a4,a5,800312b0 <_ZL7MMC1PRGv+0x54> + 800312cc: 00b465b3 or a1,s0,a1 + 800312d0: 00008537 lui a0,0x8 + 800312d4: 000680e7 jalr a3 + 800312d8: 00f4059b addiw a1,s0,15 + 800312dc: 01013403 ld s0,16(sp) + 800312e0: 0004b303 ld t1,0(s1) + 800312e4: 01813083 ld ra,24(sp) + 800312e8: 00813483 ld s1,8(sp) + 800312ec: 03f5f593 andi a1,a1,63 + 800312f0: 0000c537 lui a0,0xc + 800312f4: 02010113 addi sp,sp,32 + 800312f8: 00030067 jr t1 + 800312fc: 00800693 li a3,8 + 80031300: 0cd70063 beq a4,a3,800313c0 <_ZL7MMC1PRGv+0x164> + 80031304: 02e6ee63 bltu a3,a4,80031340 <_ZL7MMC1PRGv+0xe4> + 80031308: 0087f793 andi a5,a5,8 + 8003130c: fa0792e3 bnez a5,800312b0 <_ZL7MMC1PRGv+0x54> + 80031310: ffe5f793 andi a5,a1,-2 + 80031314: 008785b3 add a1,a5,s0 + 80031318: 00008537 lui a0,0x8 + 8003131c: 0087843b addw s0,a5,s0 + 80031320: 939df0ef jal ra,80010c58 <_Z8setprg16jj> + 80031324: 0014059b addiw a1,s0,1 + 80031328: 0000c537 lui a0,0xc + 8003132c: 01013403 ld s0,16(sp) + 80031330: 01813083 ld ra,24(sp) + 80031334: 00813483 ld s1,8(sp) + 80031338: 02010113 addi sp,sp,32 + 8003133c: 91ddf06f j 80010c58 <_Z8setprg16jj> + 80031340: 00c00793 li a5,12 + 80031344: f6f716e3 bne a4,a5,800312b0 <_ZL7MMC1PRGv+0x54> + 80031348: 008585b3 add a1,a1,s0 + 8003134c: 00008537 lui a0,0x8 + 80031350: 0004041b sext.w s0,s0 + 80031354: 905df0ef jal ra,80010c58 <_Z8setprg16jj> + 80031358: 00f4059b addiw a1,s0,15 + 8003135c: fcdff06f j 80031328 <_ZL7MMC1PRGv+0xcc> + 80031360: 00e67613 andi a2,a2,14 + 80031364: 00c46433 or s0,s0,a2 + 80031368: 00040593 mv a1,s0 + 8003136c: 00008537 lui a0,0x8 + 80031370: 000680e7 jalr a3 + 80031374: 00140593 addi a1,s0,1 + 80031378: 01013403 ld s0,16(sp) + 8003137c: 0004b303 ld t1,0(s1) + 80031380: 01813083 ld ra,24(sp) + 80031384: 00813483 ld s1,8(sp) + 80031388: 0000c537 lui a0,0xc + 8003138c: 02010113 addi sp,sp,32 + 80031390: 00030067 jr t1 + 80031394: 00b465b3 or a1,s0,a1 + 80031398: 0000c537 lui a0,0xc + 8003139c: 000680e7 jalr a3 + 800313a0: 00040593 mv a1,s0 + 800313a4: 01013403 ld s0,16(sp) + 800313a8: 0004b303 ld t1,0(s1) + 800313ac: 01813083 ld ra,24(sp) + 800313b0: 00813483 ld s1,8(sp) + 800313b4: 00008537 lui a0,0x8 + 800313b8: 02010113 addi sp,sp,32 + 800313bc: 00030067 jr t1 + 800313c0: 0000c537 lui a0,0xc + 800313c4: 008585b3 add a1,a1,s0 + 800313c8: 891df0ef jal ra,80010c58 <_Z8setprg16jj> + 800313cc: 00040593 mv a1,s0 + 800313d0: 00008537 lui a0,0x8 + 800313d4: f59ff06f j 8003132c <_ZL7MMC1PRGv+0xd0> + +00000000800313d8 <_ZL10NWCCHRHookjh>: + 800313d8: ff010113 addi sp,sp,-16 + 800313dc: 00813023 sd s0,0(sp) + 800313e0: 00113423 sd ra,8(sp) + 800313e4: 0105f793 andi a5,a1,16 + 800313e8: 00058413 mv s0,a1 + 800313ec: 04079063 bnez a5,8003142c <_ZL10NWCCHRHookjh+0x54> + 800313f0: 0019b797 auipc a5,0x19b + 800313f4: 20878023 sb s0,512(a5) # 801cc5f0 <_ZL6NWCRec> + 800313f8: 00847793 andi a5,s0,8 + 800313fc: 00078a63 beqz a5,80031410 <_ZL10NWCCHRHookjh+0x38> + 80031400: 00013403 ld s0,0(sp) + 80031404: 00813083 ld ra,8(sp) + 80031408: 01010113 addi sp,sp,16 + 8003140c: e51ff06f j 8003125c <_ZL7MMC1PRGv> + 80031410: 4014559b sraiw a1,s0,0x1 + 80031414: 00013403 ld s0,0(sp) + 80031418: 00813083 ld ra,8(sp) + 8003141c: 0035f593 andi a1,a1,3 + 80031420: 00008537 lui a0,0x8 + 80031424: 01010113 addi sp,sp,16 + 80031428: 9eddf06f j 80010e14 <_Z8setprg32jj> + 8003142c: 00100513 li a0,1 + 80031430: 0019b797 auipc a5,0x19b + 80031434: 1807a423 sw zero,392(a5) # 801cc5b8 <_ZL11NWCIRQCount> + 80031438: 919cf0ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8003143c: fb5ff06f j 800313f0 <_ZL10NWCCHRHookjh+0x18> + +0000000080031440 <_ZL11GenMMC1InitP8CartInfoiiii>: + 80031440: fc010113 addi sp,sp,-64 + 80031444: 40e687bb subw a5,a3,a4 + 80031448: 02913423 sd s1,40(sp) + 8003144c: 00070493 mv s1,a4 + 80031450: 0019b717 auipc a4,0x19b + 80031454: 18072623 sw zero,396(a4) # 801cc5dc <_ZL5is155> + 80031458: 00000717 auipc a4,0x0 + 8003145c: 1b470713 addi a4,a4,436 # 8003160c <_ZL12GenMMC1Closev> + 80031460: 02813823 sd s0,48(sp) + 80031464: 03213023 sd s2,32(sp) + 80031468: 01313c23 sd s3,24(sp) + 8003146c: 01413823 sd s4,16(sp) + 80031470: 00a6969b slliw a3,a3,0xa + 80031474: 02113c23 sd ra,56(sp) + 80031478: 01513423 sd s5,8(sp) + 8003147c: 0019b997 auipc s3,0x19b + 80031480: 18498993 addi s3,s3,388 # 801cc600 <_ZL8WRAMSIZE> + 80031484: 0019ba17 auipc s4,0x19b + 80031488: 130a0a13 addi s4,s4,304 # 801cc5b4 <_ZL11NONBRAMSIZE> + 8003148c: 00a7979b slliw a5,a5,0xa + 80031490: 00e53823 sd a4,16(a0) # 8010 <_entry_offset+0x8010> + 80031494: 00050413 mv s0,a0 + 80031498: 0019b717 auipc a4,0x19b + 8003149c: 12073423 sd zero,296(a4) # 801cc5c0 <_ZL12MMC1CHRHook4> + 800314a0: 0019b717 auipc a4,0x19b + 800314a4: 12073423 sd zero,296(a4) # 801cc5c8 <_ZL13MMC1PRGHook16> + 800314a8: 0006851b sext.w a0,a3 + 800314ac: 00d9a023 sw a3,0(s3) + 800314b0: 00fa2023 sw a5,0(s4) + 800314b4: 00060913 mv s2,a2 + 800314b8: 0a051a63 bnez a0,8003156c <_ZL11GenMMC1InitP8CartInfoiiii+0x12c> + 800314bc: 10090663 beqz s2,800315c8 <_ZL11GenMMC1InitP8CartInfoiiii+0x188> + 800314c0: 00014697 auipc a3,0x14 + 800314c4: ff068693 addi a3,a3,-16 # 800454b0 <_ZZL8SetInputvE3moo+0x660> + 800314c8: 00000613 li a2,0 + 800314cc: 00400593 li a1,4 + 800314d0: 0019b517 auipc a0,0x19b + 800314d4: 10850513 addi a0,a0,264 # 801cc5d8 <_ZL5DRegs> + 800314d8: b39ce0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800314dc: 00000797 auipc a5,0x0 + 800314e0: 33c78793 addi a5,a5,828 # 80031818 <_ZL12GenMMC1Powerv> + 800314e4: 00f43023 sd a5,0(s0) + 800314e8: 00015697 auipc a3,0x15 + 800314ec: de868693 addi a3,a3,-536 # 800462d0 <_ZL3lut+0x470> + 800314f0: 00000797 auipc a5,0x0 + 800314f4: 44878793 addi a5,a5,1096 # 80031938 <_ZL12MMC1_Restorei> + 800314f8: 00100613 li a2,1 + 800314fc: 00800593 li a1,8 + 80031500: 0019b517 auipc a0,0x19b + 80031504: 0f850513 addi a0,a0,248 # 801cc5f8 <_ZL6lreset> + 80031508: 0019b717 auipc a4,0x19b + 8003150c: 14f73823 sd a5,336(a4) # 801cc658 + 80031510: b01ce0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80031514: 00015697 auipc a3,0x15 + 80031518: dc468693 addi a3,a3,-572 # 800462d8 <_ZL3lut+0x478> + 8003151c: 00100613 li a2,1 + 80031520: 00100593 li a1,1 + 80031524: 0019b517 auipc a0,0x19b + 80031528: 0c050513 addi a0,a0,192 # 801cc5e4 <_ZL6Buffer> + 8003152c: ae5ce0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80031530: 03013403 ld s0,48(sp) + 80031534: 03813083 ld ra,56(sp) + 80031538: 02813483 ld s1,40(sp) + 8003153c: 02013903 ld s2,32(sp) + 80031540: 01813983 ld s3,24(sp) + 80031544: 01013a03 ld s4,16(sp) + 80031548: 00813a83 ld s5,8(sp) + 8003154c: 00015697 auipc a3,0x15 + 80031550: d9468693 addi a3,a3,-620 # 800462e0 <_ZL3lut+0x480> + 80031554: 00100613 li a2,1 + 80031558: 00100593 li a1,1 + 8003155c: 0019b517 auipc a0,0x19b + 80031560: 05650513 addi a0,a0,86 # 801cc5b2 <_ZL11BufferShift> + 80031564: 04010113 addi sp,sp,64 + 80031568: aa9ce06f j 80000010 <_Z10AddExStatePvjiPKc> + 8003156c: f01e00ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80031570: 0009a603 lw a2,0(s3) + 80031574: 00050593 mv a1,a0 + 80031578: 0019ba97 auipc s5,0x19b + 8003157c: 058a8a93 addi s5,s5,88 # 801cc5d0 <_ZL4WRAM> + 80031580: 00100693 li a3,1 + 80031584: 01000513 li a0,16 + 80031588: 00bab023 sd a1,0(s5) + 8003158c: f69de0ef jal ra,800104f4 <_Z19SetupCartPRGMappingiPhji> + 80031590: 0009a583 lw a1,0(s3) + 80031594: 000ab503 ld a0,0(s5) + 80031598: 00014697 auipc a3,0x14 + 8003159c: d9068693 addi a3,a3,-624 # 80045328 <_ZZL8SetInputvE3moo+0x4d8> + 800315a0: 00000613 li a2,0 + 800315a4: a6dce0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800315a8: f0048ae3 beqz s1,800314bc <_ZL11GenMMC1InitP8CartInfoiiii+0x7c> + 800315ac: 000a6703 lwu a4,0(s4) + 800315b0: 000ab783 ld a5,0(s5) + 800315b4: 00a4949b slliw s1,s1,0xa + 800315b8: 02942c23 sw s1,56(s0) + 800315bc: 00e787b3 add a5,a5,a4 + 800315c0: 00f43c23 sd a5,24(s0) + 800315c4: ee091ee3 bnez s2,800314c0 <_ZL11GenMMC1InitP8CartInfoiiii+0x80> + 800315c8: 00002537 lui a0,0x2 + 800315cc: ea1e00ef jal ra,8001246c <_Z12FCEU_gmallocj> + 800315d0: 00050593 mv a1,a0 + 800315d4: 0019b497 auipc s1,0x19b + 800315d8: 01448493 addi s1,s1,20 # 801cc5e8 <_ZL6CHRRAM> + 800315dc: 00100693 li a3,1 + 800315e0: 00002637 lui a2,0x2 + 800315e4: 00000513 li a0,0 + 800315e8: 00b4b023 sd a1,0(s1) + 800315ec: fd9de0ef jal ra,800105c4 <_Z19SetupCartCHRMappingiPhji> + 800315f0: 0004b503 ld a0,0(s1) + 800315f4: 00011697 auipc a3,0x11 + 800315f8: b5468693 addi a3,a3,-1196 # 80042148 <_ZL9C96000PAL+0x738> + 800315fc: 00000613 li a2,0 + 80031600: 000025b7 lui a1,0x2 + 80031604: a0dce0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80031608: eb9ff06f j 800314c0 <_ZL11GenMMC1InitP8CartInfoiiii+0x80> + +000000008003160c <_ZL12GenMMC1Closev>: + 8003160c: ff010113 addi sp,sp,-16 + 80031610: 00113423 sd ra,8(sp) + 80031614: 0019b517 auipc a0,0x19b + 80031618: fd453503 ld a0,-44(a0) # 801cc5e8 <_ZL6CHRRAM> + 8003161c: 00050463 beqz a0,80031624 <_ZL12GenMMC1Closev+0x18> + 80031620: f21e00ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80031624: 0019b517 auipc a0,0x19b + 80031628: fac53503 ld a0,-84(a0) # 801cc5d0 <_ZL4WRAM> + 8003162c: 00050463 beqz a0,80031634 <_ZL12GenMMC1Closev+0x28> + 80031630: f11e00ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80031634: 00813083 ld ra,8(sp) + 80031638: 0019b797 auipc a5,0x19b + 8003163c: f807bc23 sd zero,-104(a5) # 801cc5d0 <_ZL4WRAM> + 80031640: 0019b797 auipc a5,0x19b + 80031644: fa07b423 sd zero,-88(a5) # 801cc5e8 <_ZL6CHRRAM> + 80031648: 01010113 addi sp,sp,16 + 8003164c: 00008067 ret + +0000000080031650 <_ZL10MMC1MIRRORv.part.0>: + 80031650: 0019b797 auipc a5,0x19b + 80031654: f887c783 lbu a5,-120(a5) # 801cc5d8 <_ZL5DRegs> + 80031658: 0037f793 andi a5,a5,3 + 8003165c: 00200713 li a4,2 + 80031660: 00e78e63 beq a5,a4,8003167c <_ZL10MMC1MIRRORv.part.0+0x2c> + 80031664: 00300713 li a4,3 + 80031668: 02e78263 beq a5,a4,8003168c <_ZL10MMC1MIRRORv.part.0+0x3c> + 8003166c: 00100713 li a4,1 + 80031670: 00e78a63 beq a5,a4,80031684 <_ZL10MMC1MIRRORv.part.0+0x34> + 80031674: 00200513 li a0,2 + 80031678: 9d1df06f j 80011048 <_Z9setmirrori> + 8003167c: 00100513 li a0,1 + 80031680: 9c9df06f j 80011048 <_Z9setmirrori> + 80031684: 00300513 li a0,3 + 80031688: 9c1df06f j 80011048 <_Z9setmirrori> + 8003168c: 00000513 li a0,0 + 80031690: 9b9df06f j 80011048 <_Z9setmirrori> + +0000000080031694 <_ZL10MMC1_writejh>: + 80031694: fe010113 addi sp,sp,-32 + 80031698: 00813823 sd s0,16(sp) + 8003169c: 00913423 sd s1,8(sp) + 800316a0: 01213023 sd s2,0(sp) + 800316a4: 0019b497 auipc s1,0x19b + 800316a8: ff448493 addi s1,s1,-12 # 801cc698 + 800316ac: 0019a917 auipc s2,0x19a + 800316b0: 4a090913 addi s2,s2,1184 # 801cbb4c + 800316b4: 0019b417 auipc s0,0x19b + 800316b8: f4440413 addi s0,s0,-188 # 801cc5f8 <_ZL6lreset> + 800316bc: 00096703 lwu a4,0(s2) + 800316c0: 0004b683 ld a3,0(s1) + 800316c4: 00043783 ld a5,0(s0) + 800316c8: 00113c23 sd ra,24(sp) + 800316cc: 00d70733 add a4,a4,a3 + 800316d0: 00278793 addi a5,a5,2 + 800316d4: 04f76863 bltu a4,a5,80031724 <_ZL10MMC1_writejh+0x90> + 800316d8: 0185979b slliw a5,a1,0x18 + 800316dc: 4187d79b sraiw a5,a5,0x18 + 800316e0: 0c07c863 bltz a5,800317b0 <_ZL10MMC1_writejh+0x11c> + 800316e4: 0019b697 auipc a3,0x19b + 800316e8: ece68693 addi a3,a3,-306 # 801cc5b2 <_ZL11BufferShift> + 800316ec: 0006c783 lbu a5,0(a3) + 800316f0: 0019b717 auipc a4,0x19b + 800316f4: ef470713 addi a4,a4,-268 # 801cc5e4 <_ZL6Buffer> + 800316f8: 00074603 lbu a2,0(a4) + 800316fc: 0015f593 andi a1,a1,1 + 80031700: 00f595bb sllw a1,a1,a5 + 80031704: 00c5e5b3 or a1,a1,a2 + 80031708: 0017879b addiw a5,a5,1 + 8003170c: 0ff7f793 andi a5,a5,255 + 80031710: 0ff5f593 andi a1,a1,255 + 80031714: 00b70023 sb a1,0(a4) + 80031718: 00f68023 sb a5,0(a3) + 8003171c: 00500713 li a4,5 + 80031720: 00e78e63 beq a5,a4,8003173c <_ZL10MMC1_writejh+0xa8> + 80031724: 01813083 ld ra,24(sp) + 80031728: 01013403 ld s0,16(sp) + 8003172c: 00813483 ld s1,8(sp) + 80031730: 00013903 ld s2,0(sp) + 80031734: 02010113 addi sp,sp,32 + 80031738: 00008067 ret + 8003173c: 00d5551b srliw a0,a0,0xd + 80031740: ffc5051b addiw a0,a0,-4 + 80031744: 0019b797 auipc a5,0x19b + 80031748: e9478793 addi a5,a5,-364 # 801cc5d8 <_ZL5DRegs> + 8003174c: 00a787b3 add a5,a5,a0 + 80031750: 00b78023 sb a1,0(a5) + 80031754: 0019b797 auipc a5,0x19b + 80031758: e8078823 sb zero,-368(a5) # 801cc5e4 <_ZL6Buffer> + 8003175c: 0019b797 auipc a5,0x19b + 80031760: e4078b23 sb zero,-426(a5) # 801cc5b2 <_ZL11BufferShift> + 80031764: 00200793 li a5,2 + 80031768: 08f50263 beq a0,a5,800317ec <_ZL10MMC1_writejh+0x158> + 8003176c: 02a7e263 bltu a5,a0,80031790 <_ZL10MMC1_writejh+0xfc> + 80031770: 08050a63 beqz a0,80031804 <_ZL10MMC1_writejh+0x170> + 80031774: 9b5ff0ef jal ra,80031128 <_ZL7MMC1CHRv> + 80031778: 01013403 ld s0,16(sp) + 8003177c: 01813083 ld ra,24(sp) + 80031780: 00813483 ld s1,8(sp) + 80031784: 00013903 ld s2,0(sp) + 80031788: 02010113 addi sp,sp,32 + 8003178c: ad1ff06f j 8003125c <_ZL7MMC1PRGv> + 80031790: 00300793 li a5,3 + 80031794: f8f518e3 bne a0,a5,80031724 <_ZL10MMC1_writejh+0x90> + 80031798: 01013403 ld s0,16(sp) + 8003179c: 01813083 ld ra,24(sp) + 800317a0: 00813483 ld s1,8(sp) + 800317a4: 00013903 ld s2,0(sp) + 800317a8: 02010113 addi sp,sp,32 + 800317ac: ab1ff06f j 8003125c <_ZL7MMC1PRGv> + 800317b0: 0019b717 auipc a4,0x19b + 800317b4: e2870713 addi a4,a4,-472 # 801cc5d8 <_ZL5DRegs> + 800317b8: 00074783 lbu a5,0(a4) + 800317bc: 0019b697 auipc a3,0x19b + 800317c0: e2068423 sb zero,-472(a3) # 801cc5e4 <_ZL6Buffer> + 800317c4: 0019b697 auipc a3,0x19b + 800317c8: de068723 sb zero,-530(a3) # 801cc5b2 <_ZL11BufferShift> + 800317cc: 00c7e793 ori a5,a5,12 + 800317d0: 00f70023 sb a5,0(a4) + 800317d4: a89ff0ef jal ra,8003125c <_ZL7MMC1PRGv> + 800317d8: 00096783 lwu a5,0(s2) + 800317dc: 0004b703 ld a4,0(s1) + 800317e0: 00e787b3 add a5,a5,a4 + 800317e4: 00f43023 sd a5,0(s0) + 800317e8: f3dff06f j 80031724 <_ZL10MMC1_writejh+0x90> + 800317ec: 01013403 ld s0,16(sp) + 800317f0: 01813083 ld ra,24(sp) + 800317f4: 00813483 ld s1,8(sp) + 800317f8: 00013903 ld s2,0(sp) + 800317fc: 02010113 addi sp,sp,32 + 80031800: 929ff06f j 80031128 <_ZL7MMC1CHRv> + 80031804: 0019b797 auipc a5,0x19b + 80031808: ddc7a783 lw a5,-548(a5) # 801cc5e0 <_ZL5is171> + 8003180c: f60794e3 bnez a5,80031774 <_ZL10MMC1_writejh+0xe0> + 80031810: e41ff0ef jal ra,80031650 <_ZL10MMC1MIRRORv.part.0> + 80031814: f61ff06f j 80031774 <_ZL10MMC1_writejh+0xe0> + +0000000080031818 <_ZL12GenMMC1Powerv>: + 80031818: ff010113 addi sp,sp,-16 + 8003181c: 00813023 sd s0,0(sp) + 80031820: 00010437 lui s0,0x10 + 80031824: 00000617 auipc a2,0x0 + 80031828: e7060613 addi a2,a2,-400 # 80031694 <_ZL10MMC1_writejh> + 8003182c: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80031830: 00008537 lui a0,0x8 + 80031834: 00113423 sd ra,8(sp) + 80031838: 0019b797 auipc a5,0x19b + 8003183c: dc07b023 sd zero,-576(a5) # 801cc5f8 <_ZL6lreset> + 80031840: 2e8020ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80031844: fffdf617 auipc a2,0xfffdf + 80031848: e1c60613 addi a2,a2,-484 # 80010660 <_Z6CartBRj> + 8003184c: fff40593 addi a1,s0,-1 + 80031850: 00008537 lui a0,0x8 + 80031854: 1c8020ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80031858: 0019b797 auipc a5,0x19b + 8003185c: da87a783 lw a5,-600(a5) # 801cc600 <_ZL8WRAMSIZE> + 80031860: 04079263 bnez a5,800318a4 <_ZL12GenMMC1Powerv+0x8c> + 80031864: 0019b797 auipc a5,0x19b + 80031868: d4078723 sb zero,-690(a5) # 801cc5b2 <_ZL11BufferShift> + 8003186c: 0019b797 auipc a5,0x19b + 80031870: d6078c23 sb zero,-648(a5) # 801cc5e4 <_ZL6Buffer> + 80031874: 01f00793 li a5,31 + 80031878: 0019b717 auipc a4,0x19b + 8003187c: d6f72023 sw a5,-672(a4) # 801cc5d8 <_ZL5DRegs> + 80031880: 0019b797 auipc a5,0x19b + 80031884: d607a783 lw a5,-672(a5) # 801cc5e0 <_ZL5is171> + 80031888: 00079463 bnez a5,80031890 <_ZL12GenMMC1Powerv+0x78> + 8003188c: dc5ff0ef jal ra,80031650 <_ZL10MMC1MIRRORv.part.0> + 80031890: 899ff0ef jal ra,80031128 <_ZL7MMC1CHRv> + 80031894: 00013403 ld s0,0(sp) + 80031898: 00813083 ld ra,8(sp) + 8003189c: 01010113 addi sp,sp,16 + 800318a0: 9bdff06f j 8003125c <_ZL7MMC1PRGv> + 800318a4: 0019b417 auipc s0,0x19b + 800318a8: d2c40413 addi s0,s0,-724 # 801cc5d0 <_ZL4WRAM> + 800318ac: 00043603 ld a2,0(s0) + 800318b0: 000065b7 lui a1,0x6 + 800318b4: 00800513 li a0,8 + 800318b8: f5cce0ef jal ra,80000014 <_Z16FCEU_CheatAddRAMijPh> + 800318bc: 0019b597 auipc a1,0x19b + 800318c0: cf85a583 lw a1,-776(a1) # 801cc5b4 <_ZL11NONBRAMSIZE> + 800318c4: 04059263 bnez a1,80031908 <_ZL12GenMMC1Powerv+0xf0> + 800318c8: 00008437 lui s0,0x8 + 800318cc: fff40593 addi a1,s0,-1 # 7fff <_entry_offset+0x7fff> + 800318d0: 00000617 auipc a2,0x0 + 800318d4: 80460613 addi a2,a2,-2044 # 800310d4 <_ZL6MAWRAMj> + 800318d8: 00006537 lui a0,0x6 + 800318dc: 140020ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 800318e0: fff40593 addi a1,s0,-1 + 800318e4: fffff617 auipc a2,0xfffff + 800318e8: 7a860613 addi a2,a2,1960 # 8003108c <_ZL6MBWRAMjh> + 800318ec: 00006537 lui a0,0x6 + 800318f0: 238020ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800318f4: 00000613 li a2,0 + 800318f8: 000065b7 lui a1,0x6 + 800318fc: 01000513 li a0,16 + 80031900: fe9de0ef jal ra,800108e8 <_Z8setprg8rijj> + 80031904: f61ff06f j 80031864 <_ZL12GenMMC1Powerv+0x4c> + 80031908: 00043503 ld a0,0(s0) + 8003190c: 00100613 li a2,1 + 80031910: 644020ef jal ra,80033f54 <_Z15FCEU_MemoryRandPhjb> + 80031914: fb5ff06f j 800318c8 <_ZL12GenMMC1Powerv+0xb0> + +0000000080031918 <_ZL8NWCPowerv>: + 80031918: ff010113 addi sp,sp,-16 + 8003191c: 00113423 sd ra,8(sp) + 80031920: ef9ff0ef jal ra,80031818 <_ZL12GenMMC1Powerv> + 80031924: 00813083 ld ra,8(sp) + 80031928: 00000593 li a1,0 + 8003192c: 00000513 li a0,0 + 80031930: 01010113 addi sp,sp,16 + 80031934: d50df06f j 80010e84 <_Z8setchr8rij> + +0000000080031938 <_ZL12MMC1_Restorei>: + 80031938: ff010113 addi sp,sp,-16 + 8003193c: 00113423 sd ra,8(sp) + 80031940: 0019b797 auipc a5,0x19b + 80031944: ca07a783 lw a5,-864(a5) # 801cc5e0 <_ZL5is171> + 80031948: 00079463 bnez a5,80031950 <_ZL12MMC1_Restorei+0x18> + 8003194c: d05ff0ef jal ra,80031650 <_ZL10MMC1MIRRORv.part.0> + 80031950: fd8ff0ef jal ra,80031128 <_ZL7MMC1CHRv> + 80031954: 909ff0ef jal ra,8003125c <_ZL7MMC1PRGv> + 80031958: 00813083 ld ra,8(sp) + 8003195c: 0019b797 auipc a5,0x19b + 80031960: c807be23 sd zero,-868(a5) # 801cc5f8 <_ZL6lreset> + 80031964: 01010113 addi sp,sp,16 + 80031968: 00008067 ret + +000000008003196c <_ZL10NWCIRQHooki>: + 8003196c: 0019b797 auipc a5,0x19b + 80031970: c847c783 lbu a5,-892(a5) # 801cc5f0 <_ZL6NWCRec> + 80031974: 0107f793 andi a5,a5,16 + 80031978: 02079863 bnez a5,800319a8 <_ZL10NWCIRQHooki+0x3c> + 8003197c: 0019b717 auipc a4,0x19b + 80031980: c3c70713 addi a4,a4,-964 # 801cc5b8 <_ZL11NWCIRQCount> + 80031984: 00072783 lw a5,0(a4) + 80031988: 3e0006b7 lui a3,0x3e000 + 8003198c: 00a7853b addw a0,a5,a0 + 80031990: 1c0007b7 lui a5,0x1c000 + 80031994: 00f567b3 or a5,a0,a5 + 80031998: 0007879b sext.w a5,a5 + 8003199c: 00d7f863 bgeu a5,a3,800319ac <_ZL10NWCIRQHooki+0x40> + 800319a0: 00a72023 sw a0,0(a4) + 800319a4: 00008067 ret + 800319a8: 00008067 ret + 800319ac: 00100513 li a0,1 + 800319b0: 0019b797 auipc a5,0x19b + 800319b4: c007a423 sw zero,-1016(a5) # 801cc5b8 <_ZL11NWCIRQCount> + 800319b8: b80cf06f j 80000d38 <_Z14X6502_IRQBegini> + +00000000800319bc <_ZL10NWCPRGHookjh>: + 800319bc: 0019b797 auipc a5,0x19b + 800319c0: c347c783 lbu a5,-972(a5) # 801cc5f0 <_ZL6NWCRec> + 800319c4: 0087f713 andi a4,a5,8 + 800319c8: 00070863 beqz a4,800319d8 <_ZL10NWCPRGHookjh+0x1c> + 800319cc: 0075f593 andi a1,a1,7 + 800319d0: 0085e593 ori a1,a1,8 + 800319d4: a84df06f j 80010c58 <_Z8setprg16jj> + 800319d8: 4017d59b sraiw a1,a5,0x1 + 800319dc: 0035f593 andi a1,a1,3 + 800319e0: 00008537 lui a0,0x8 + 800319e4: c30df06f j 80010e14 <_Z8setprg32jj> + +00000000800319e8 <_Z14Mapper105_InitP8CartInfo>: + 800319e8: ff010113 addi sp,sp,-16 + 800319ec: 00000713 li a4,0 + 800319f0: 00800693 li a3,8 + 800319f4: 10000613 li a2,256 + 800319f8: 10000593 li a1,256 + 800319fc: 00813023 sd s0,0(sp) + 80031a00: 00113423 sd ra,8(sp) + 80031a04: 00050413 mv s0,a0 + 80031a08: a39ff0ef jal ra,80031440 <_ZL11GenMMC1InitP8CartInfoiiii> + 80031a0c: 00000797 auipc a5,0x0 + 80031a10: f6078793 addi a5,a5,-160 # 8003196c <_ZL10NWCIRQHooki> + 80031a14: 0019a717 auipc a4,0x19a + 80031a18: 12f73623 sd a5,300(a4) # 801cbb40 + 80031a1c: 00000797 auipc a5,0x0 + 80031a20: 9bc78793 addi a5,a5,-1604 # 800313d8 <_ZL10NWCCHRHookjh> + 80031a24: 0019b717 auipc a4,0x19b + 80031a28: b8f73e23 sd a5,-1124(a4) # 801cc5c0 <_ZL12MMC1CHRHook4> + 80031a2c: 00000797 auipc a5,0x0 + 80031a30: f9078793 addi a5,a5,-112 # 800319bc <_ZL10NWCPRGHookjh> + 80031a34: 0019b717 auipc a4,0x19b + 80031a38: b8f73a23 sd a5,-1132(a4) # 801cc5c8 <_ZL13MMC1PRGHook16> + 80031a3c: 00000797 auipc a5,0x0 + 80031a40: edc78793 addi a5,a5,-292 # 80031918 <_ZL8NWCPowerv> + 80031a44: 00813083 ld ra,8(sp) + 80031a48: 00f43023 sd a5,0(s0) + 80031a4c: 00013403 ld s0,0(sp) + 80031a50: 01010113 addi sp,sp,16 + 80031a54: 00008067 ret + +0000000080031a58 <_Z12Mapper1_InitP8CartInfo>: + 80031a58: fe010113 addi sp,sp,-32 + 80031a5c: 00813823 sd s0,16(sp) + 80031a60: 04c52403 lw s0,76(a0) # 804c <_entry_offset+0x804c> + 80031a64: 00913423 sd s1,8(sp) + 80031a68: 00113c23 sd ra,24(sp) + 80031a6c: 01213023 sd s2,0(sp) + 80031a70: 00050493 mv s1,a0 + 80031a74: 00040463 beqz s0,80031a7c <_Z12Mapper1_InitP8CartInfo+0x24> + 80031a78: 00800413 li s0,8 + 80031a7c: 0784a783 lw a5,120(s1) + 80031a80: c3de8737 lui a4,0xc3de8 + 80031a84: c6970713 addi a4,a4,-919 # ffffffffc3de7c69 <_end+0xffffffff43c12c69> + 80031a88: 02e78863 beq a5,a4,80031ab8 <_Z12Mapper1_InitP8CartInfo+0x60> + 80031a8c: 10f76263 bltu a4,a5,80031b90 <_Z12Mapper1_InitP8CartInfo+0x138> + 80031a90: 4642e737 lui a4,0x4642e + 80031a94: da670713 addi a4,a4,-602 # 4642dda6 <_entry_offset+0x4642dda6> + 80031a98: 12e78063 beq a5,a4,80031bb8 <_Z12Mapper1_InitP8CartInfo+0x160> + 80031a9c: 04f77e63 bgeu a4,a5,80031af8 <_Z12Mapper1_InitP8CartInfo+0xa0> + 80031aa0: abbf7737 lui a4,0xabbf7 + 80031aa4: 21770713 addi a4,a4,535 # ffffffffabbf7217 <_end+0xffffffff2ba22217> + 80031aa8: 10e78863 beq a5,a4,80031bb8 <_Z12Mapper1_InitP8CartInfo+0x160> + 80031aac: b8748737 lui a4,0xb8748 + 80031ab0: abf70713 addi a4,a4,-1345 # ffffffffb8747abf <_end+0xffffffff38572abf> + 80031ab4: 06e79463 bne a5,a4,80031b1c <_Z12Mapper1_InitP8CartInfo+0xc4> + 80031ab8: 02000413 li s0,32 + 80031abc: 02000913 li s2,32 + 80031ac0: 00015517 auipc a0,0x15 + 80031ac4: 82850513 addi a0,a0,-2008 # 800462e8 <_ZL3lut+0x488> + 80031ac8: 281090ef jal ra,8003b548 + 80031acc: 00040713 mv a4,s0 + 80031ad0: 01013403 ld s0,16(sp) + 80031ad4: 01813083 ld ra,24(sp) + 80031ad8: 00090693 mv a3,s2 + 80031adc: 00048513 mv a0,s1 + 80031ae0: 00013903 ld s2,0(sp) + 80031ae4: 00813483 ld s1,8(sp) + 80031ae8: 10000613 li a2,256 + 80031aec: 20000593 li a1,512 + 80031af0: 02010113 addi sp,sp,32 + 80031af4: 94dff06f j 80031440 <_ZL11GenMMC1InitP8CartInfoiiii> + 80031af8: 2b11e737 lui a4,0x2b11e + 80031afc: 0b070713 addi a4,a4,176 # 2b11e0b0 <_entry_offset+0x2b11e0b0> + 80031b00: 0ae78c63 beq a5,a4,80031bb8 <_Z12Mapper1_InitP8CartInfo+0x160> + 80031b04: 3f7ad737 lui a4,0x3f7ad + 80031b08: 41570713 addi a4,a4,1045 # 3f7ad415 <_entry_offset+0x3f7ad415> + 80031b0c: 0ae78663 beq a5,a4,80031bb8 <_Z12Mapper1_InitP8CartInfo+0x160> + 80031b10: 2225c737 lui a4,0x2225c + 80031b14: 20f70713 addi a4,a4,527 # 2225c20f <_entry_offset+0x2225c20f> + 80031b18: 0ae78063 beq a5,a4,80031bb8 <_Z12Mapper1_InitP8CartInfo+0x160> + 80031b1c: 0504a783 lw a5,80(s1) + 80031b20: 00800913 li s2,8 + 80031b24: fa0784e3 beqz a5,80031acc <_Z12Mapper1_InitP8CartInfo+0x74> + 80031b28: 05c4a683 lw a3,92(s1) + 80031b2c: 0584a703 lw a4,88(s1) + 80031b30: 00600613 li a2,6 + 80031b34: 41f6d41b sraiw s0,a3,0x1f + 80031b38: 00d7073b addw a4,a4,a3 + 80031b3c: 41f7579b sraiw a5,a4,0x1f + 80031b40: 0167d79b srliw a5,a5,0x16 + 80031b44: 00e787bb addw a5,a5,a4 + 80031b48: 40a7d79b sraiw a5,a5,0xa + 80031b4c: 0164541b srliw s0,s0,0x16 + 80031b50: 00d4043b addw s0,s0,a3 + 80031b54: fff7869b addiw a3,a5,-1 + 80031b58: 40a4541b sraiw s0,s0,0xa + 80031b5c: 08d67063 bgeu a2,a3,80031bdc <_Z12Mapper1_InitP8CartInfo+0x184> + 80031b60: 0007861b sext.w a2,a5 + 80031b64: 02000693 li a3,32 + 80031b68: 00c6d463 bge a3,a2,80031b70 <_Z12Mapper1_InitP8CartInfo+0x118> + 80031b6c: 02000793 li a5,32 + 80031b70: 0007891b sext.w s2,a5 + 80031b74: 0004069b sext.w a3,s0 + 80031b78: 00d95463 bge s2,a3,80031b80 <_Z12Mapper1_InitP8CartInfo+0x128> + 80031b7c: 0007841b sext.w s0,a5 + 80031b80: 000027b7 lui a5,0x2 + 80031b84: 3ff78793 addi a5,a5,1023 # 23ff <_entry_offset+0x23ff> + 80031b88: f2e7cce3 blt a5,a4,80031ac0 <_Z12Mapper1_InitP8CartInfo+0x68> + 80031b8c: f41ff06f j 80031acc <_Z12Mapper1_InitP8CartInfo+0x74> + 80031b90: c9557737 lui a4,0xc9557 + 80031b94: b3670713 addi a4,a4,-1226 # ffffffffc9556b36 <_end+0xffffffff49381b36> + 80031b98: f2e780e3 beq a5,a4,80031ab8 <_Z12Mapper1_InitP8CartInfo+0x60> + 80031b9c: 02f77463 bgeu a4,a5,80031bc4 <_Z12Mapper1_InitP8CartInfo+0x16c> + 80031ba0: ccf36737 lui a4,0xccf36 + 80031ba4: c0270713 addi a4,a4,-1022 # ffffffffccf35c02 <_end+0xffffffff4cd60c02> + 80031ba8: 00e78863 beq a5,a4,80031bb8 <_Z12Mapper1_InitP8CartInfo+0x160> + 80031bac: fb697737 lui a4,0xfb697 + 80031bb0: 43a70713 addi a4,a4,1082 # fffffffffb69743a <_end+0xffffffff7b4c243a> + 80031bb4: f6e794e3 bne a5,a4,80031b1c <_Z12Mapper1_InitP8CartInfo+0xc4> + 80031bb8: 00800413 li s0,8 + 80031bbc: 01000913 li s2,16 + 80031bc0: f01ff06f j 80031ac0 <_Z12Mapper1_InitP8CartInfo+0x68> + 80031bc4: c6182737 lui a4,0xc6182 + 80031bc8: 02470713 addi a4,a4,36 # ffffffffc6182024 <_end+0xffffffff45fad024> + 80031bcc: f4e798e3 bne a5,a4,80031b1c <_Z12Mapper1_InitP8CartInfo+0xc4> + 80031bd0: 00800413 li s0,8 + 80031bd4: 01000913 li s2,16 + 80031bd8: ee9ff06f j 80031ac0 <_Z12Mapper1_InitP8CartInfo+0x68> + 80031bdc: 0004079b sext.w a5,s0 + 80031be0: 00f95463 bge s2,a5,80031be8 <_Z12Mapper1_InitP8CartInfo+0x190> + 80031be4: 00800413 li s0,8 + 80031be8: 00800913 li s2,8 + 80031bec: ee1ff06f j 80031acc <_Z12Mapper1_InitP8CartInfo+0x74> + +0000000080031bf0 <_Z14Mapper155_InitP8CartInfo>: + 80031bf0: 04c52703 lw a4,76(a0) + 80031bf4: ff010113 addi sp,sp,-16 + 80031bf8: 00113423 sd ra,8(sp) + 80031bfc: 00070463 beqz a4,80031c04 <_Z14Mapper155_InitP8CartInfo+0x14> + 80031c00: 00800713 li a4,8 + 80031c04: 00800693 li a3,8 + 80031c08: 10000613 li a2,256 + 80031c0c: 20000593 li a1,512 + 80031c10: 831ff0ef jal ra,80031440 <_ZL11GenMMC1InitP8CartInfoiiii> + 80031c14: 00813083 ld ra,8(sp) + 80031c18: 00100793 li a5,1 + 80031c1c: 0019b717 auipc a4,0x19b + 80031c20: 9cf72023 sw a5,-1600(a4) # 801cc5dc <_ZL5is155> + 80031c24: 01010113 addi sp,sp,16 + 80031c28: 00008067 ret + +0000000080031c2c <_Z14Mapper171_InitP8CartInfo>: + 80031c2c: ff010113 addi sp,sp,-16 + 80031c30: 00000713 li a4,0 + 80031c34: 00000693 li a3,0 + 80031c38: 02000613 li a2,32 + 80031c3c: 02000593 li a1,32 + 80031c40: 00113423 sd ra,8(sp) + 80031c44: ffcff0ef jal ra,80031440 <_ZL11GenMMC1InitP8CartInfoiiii> + 80031c48: 00813083 ld ra,8(sp) + 80031c4c: 00100793 li a5,1 + 80031c50: 0019b717 auipc a4,0x19b + 80031c54: 98f72823 sw a5,-1648(a4) # 801cc5e0 <_ZL5is171> + 80031c58: 01010113 addi sp,sp,16 + 80031c5c: 00008067 ret + +0000000080031c60 <_ZL7M57Readj>: + 80031c60: 0019b517 auipc a0,0x19b + 80031c64: 9a654503 lbu a0,-1626(a0) # 801cc606 <_ZL8hrd_flag> + 80031c68: 00008067 ret + +0000000080031c6c <_ZL4Syncv>: + 80031c6c: ff010113 addi sp,sp,-16 + 80031c70: 00813023 sd s0,0(sp) + 80031c74: 0019b417 auipc s0,0x19b + 80031c78: 99140413 addi s0,s0,-1647 # 801cc605 <_ZL7prg_reg> + 80031c7c: 00044583 lbu a1,0(s0) + 80031c80: 00113423 sd ra,8(sp) + 80031c84: 0185979b slliw a5,a1,0x18 + 80031c88: 4187d79b sraiw a5,a5,0x18 + 80031c8c: 0005859b sext.w a1,a1 + 80031c90: 0607c463 bltz a5,80031cf8 <_ZL4Syncv+0x8c> + 80031c94: 0055d593 srli a1,a1,0x5 + 80031c98: 00008537 lui a0,0x8 + 80031c9c: fbdde0ef jal ra,80010c58 <_Z8setprg16jj> + 80031ca0: 00044583 lbu a1,0(s0) + 80031ca4: 0000c537 lui a0,0xc + 80031ca8: 4055d59b sraiw a1,a1,0x5 + 80031cac: 0035f593 andi a1,a1,3 + 80031cb0: fa9de0ef jal ra,80010c58 <_Z8setprg16jj> + 80031cb4: 00044503 lbu a0,0(s0) + 80031cb8: 4035551b sraiw a0,a0,0x3 + 80031cbc: 00157513 andi a0,a0,1 + 80031cc0: b88df0ef jal ra,80011048 <_Z9setmirrori> + 80031cc4: 00044783 lbu a5,0(s0) + 80031cc8: 0019b517 auipc a0,0x19b + 80031ccc: 93c54503 lbu a0,-1732(a0) # 801cc604 <_ZL7chr_reg> + 80031cd0: 00013403 ld s0,0(sp) + 80031cd4: 00813083 ld ra,8(sp) + 80031cd8: 0077f713 andi a4,a5,7 + 80031cdc: 00357513 andi a0,a0,3 + 80031ce0: 4017d79b sraiw a5,a5,0x1 + 80031ce4: 0087f793 andi a5,a5,8 + 80031ce8: 00e56533 or a0,a0,a4 + 80031cec: 00f56533 or a0,a0,a5 + 80031cf0: 01010113 addi sp,sp,16 + 80031cf4: a10df06f j 80010f04 <_Z7setchr8j> + 80031cf8: 0065d593 srli a1,a1,0x6 + 80031cfc: 00008537 lui a0,0x8 + 80031d00: 914df0ef jal ra,80010e14 <_Z8setprg32jj> + 80031d04: fb1ff06f j 80031cb4 <_ZL4Syncv+0x48> + +0000000080031d08 <_ZL12StateRestorei>: + 80031d08: f65ff06f j 80031c6c <_ZL4Syncv> + +0000000080031d0c <_ZL8M57Writejh>: + 80031d0c: 000097b7 lui a5,0x9 + 80031d10: 80078793 addi a5,a5,-2048 # 8800 <_entry_offset+0x8800> + 80031d14: 00f57533 and a0,a0,a5 + 80031d18: 00f50863 beq a0,a5,80031d28 <_ZL8M57Writejh+0x1c> + 80031d1c: 0019b797 auipc a5,0x19b + 80031d20: 8eb78423 sb a1,-1816(a5) # 801cc604 <_ZL7chr_reg> + 80031d24: f49ff06f j 80031c6c <_ZL4Syncv> + 80031d28: 0019b797 auipc a5,0x19b + 80031d2c: 8cb78ea3 sb a1,-1827(a5) # 801cc605 <_ZL7prg_reg> + 80031d30: f3dff06f j 80031c6c <_ZL4Syncv> + +0000000080031d34 <_ZL8M57Resetv>: + 80031d34: 0019b797 auipc a5,0x19b + 80031d38: 8d278793 addi a5,a5,-1838 # 801cc606 <_ZL8hrd_flag> + 80031d3c: 0007c583 lbu a1,0(a5) + 80031d40: 00014517 auipc a0,0x14 + 80031d44: 5f050513 addi a0,a0,1520 # 80046330 <_ZL3lut+0x4d0> + 80031d48: 0015859b addiw a1,a1,1 + 80031d4c: 0035f593 andi a1,a1,3 + 80031d50: 00b78023 sb a1,0(a5) + 80031d54: 7f40906f j 8003b548 + +0000000080031d58 <_ZL8M57Powerv>: + 80031d58: ff010113 addi sp,sp,-16 + 80031d5c: 00813023 sd s0,0(sp) + 80031d60: 00010437 lui s0,0x10 + 80031d64: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80031d68: fffdf617 auipc a2,0xfffdf + 80031d6c: 8f860613 addi a2,a2,-1800 # 80010660 <_Z6CartBRj> + 80031d70: 00008537 lui a0,0x8 + 80031d74: 00113423 sd ra,8(sp) + 80031d78: 0019b797 auipc a5,0x19b + 80031d7c: 880786a3 sb zero,-1907(a5) # 801cc605 <_ZL7prg_reg> + 80031d80: 0019b797 auipc a5,0x19b + 80031d84: 88078223 sb zero,-1916(a5) # 801cc604 <_ZL7chr_reg> + 80031d88: 0019b797 auipc a5,0x19b + 80031d8c: 86078f23 sb zero,-1922(a5) # 801cc606 <_ZL8hrd_flag> + 80031d90: 48d010ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80031d94: fff40593 addi a1,s0,-1 + 80031d98: 00000617 auipc a2,0x0 + 80031d9c: f7460613 addi a2,a2,-140 # 80031d0c <_ZL8M57Writejh> + 80031da0: 00008537 lui a0,0x8 + 80031da4: 585010ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80031da8: 00000617 auipc a2,0x0 + 80031dac: eb860613 addi a2,a2,-328 # 80031c60 <_ZL7M57Readj> + 80031db0: 000065b7 lui a1,0x6 + 80031db4: 00006537 lui a0,0x6 + 80031db8: 465010ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80031dbc: 00013403 ld s0,0(sp) + 80031dc0: 00813083 ld ra,8(sp) + 80031dc4: 01010113 addi sp,sp,16 + 80031dc8: ea5ff06f j 80031c6c <_ZL4Syncv> + +0000000080031dcc <_Z13Mapper57_InitP8CartInfo>: + 80031dcc: 00000797 auipc a5,0x0 + 80031dd0: f8c78793 addi a5,a5,-116 # 80031d58 <_ZL8M57Powerv> + 80031dd4: 00f53023 sd a5,0(a0) # 6000 <_entry_offset+0x6000> + 80031dd8: 00000797 auipc a5,0x0 + 80031ddc: f5c78793 addi a5,a5,-164 # 80031d34 <_ZL8M57Resetv> + 80031de0: 00f53423 sd a5,8(a0) + 80031de4: 00000797 auipc a5,0x0 + 80031de8: f2478793 addi a5,a5,-220 # 80031d08 <_ZL12StateRestorei> + 80031dec: 00000693 li a3,0 + 80031df0: 00000613 li a2,0 + 80031df4: fff00593 li a1,-1 + 80031df8: 0001a517 auipc a0,0x1a + 80031dfc: 78850513 addi a0,a0,1928 # 8004c580 <_ZL9StateRegs> + 80031e00: 0019b717 auipc a4,0x19b + 80031e04: 84f73c23 sd a5,-1960(a4) # 801cc658 + 80031e08: a08ce06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080031e0c : + 80031e0c: 02059793 slli a5,a1,0x20 + 80031e10: 0207d793 srli a5,a5,0x20 + 80031e14: 01c78793 addi a5,a5,28 + 80031e18: 00279793 slli a5,a5,0x2 + 80031e1c: 00f507b3 add a5,a0,a5 + 80031e20: 00c7a623 sw a2,12(a5) + 80031e24: 18060c63 beqz a2,80031fbc + 80031e28: fff6061b addiw a2,a2,-1 + 80031e2c: 02061613 slli a2,a2,0x20 + 80031e30: 01d65613 srli a2,a2,0x1d + 80031e34: 00014797 auipc a5,0x14 + 80031e38: 65c78793 addi a5,a5,1628 # 80046490 + 80031e3c: 00c787b3 add a5,a5,a2 + 80031e40: 0007c683 lbu a3,0(a5) + 80031e44: 0015959b slliw a1,a1,0x1 + 80031e48: 02059613 slli a2,a1,0x20 + 80031e4c: 02065613 srli a2,a2,0x20 + 80031e50: 00461713 slli a4,a2,0x4 + 80031e54: 00c70733 add a4,a4,a2 + 80031e58: 00371713 slli a4,a4,0x3 + 80031e5c: 00e50733 add a4,a0,a4 + 80031e60: 0076d69b srliw a3,a3,0x7 + 80031e64: 0cd72c23 sw a3,216(a4) + 80031e68: 0007c683 lbu a3,0(a5) + 80031e6c: 0015e593 ori a1,a1,1 + 80031e70: 02059593 slli a1,a1,0x20 + 80031e74: 0066d693 srli a3,a3,0x6 + 80031e78: 0016f693 andi a3,a3,1 + 80031e7c: 0cd72e23 sw a3,220(a4) + 80031e80: 0007c603 lbu a2,0(a5) + 80031e84: 0205d593 srli a1,a1,0x20 + 80031e88: 00459693 slli a3,a1,0x4 + 80031e8c: 00b685b3 add a1,a3,a1 + 80031e90: 00565693 srli a3,a2,0x5 + 80031e94: 0016f693 andi a3,a3,1 + 80031e98: 0ad72c23 sw a3,184(a4) + 80031e9c: 0007c683 lbu a3,0(a5) + 80031ea0: 00359593 slli a1,a1,0x3 + 80031ea4: 00b50533 add a0,a0,a1 + 80031ea8: 0046d693 srli a3,a3,0x4 + 80031eac: 0016f693 andi a3,a3,1 + 80031eb0: 0cd72823 sw a3,208(a4) + 80031eb4: 0007c683 lbu a3,0(a5) + 80031eb8: 00f6f693 andi a3,a3,15 + 80031ebc: 0ad72e23 sw a3,188(a4) + 80031ec0: 0017c683 lbu a3,1(a5) + 80031ec4: 0076d69b srliw a3,a3,0x7 + 80031ec8: 0cd52c23 sw a3,216(a0) + 80031ecc: 0017c683 lbu a3,1(a5) + 80031ed0: 0066d693 srli a3,a3,0x6 + 80031ed4: 0016f693 andi a3,a3,1 + 80031ed8: 0cd52e23 sw a3,220(a0) + 80031edc: 0017c683 lbu a3,1(a5) + 80031ee0: 0056d693 srli a3,a3,0x5 + 80031ee4: 0016f693 andi a3,a3,1 + 80031ee8: 0ad52c23 sw a3,184(a0) + 80031eec: 0017c683 lbu a3,1(a5) + 80031ef0: 0046d693 srli a3,a3,0x4 + 80031ef4: 0016f693 andi a3,a3,1 + 80031ef8: 0cd52823 sw a3,208(a0) + 80031efc: 0017c683 lbu a3,1(a5) + 80031f00: 00f6f693 andi a3,a3,15 + 80031f04: 0ad52e23 sw a3,188(a0) + 80031f08: 0027c683 lbu a3,2(a5) + 80031f0c: 0066d69b srliw a3,a3,0x6 + 80031f10: 0cd72a23 sw a3,212(a4) + 80031f14: 0027c683 lbu a3,2(a5) + 80031f18: 03f6f693 andi a3,a3,63 + 80031f1c: 0ad72823 sw a3,176(a4) + 80031f20: 0037c683 lbu a3,3(a5) + 80031f24: 0066d69b srliw a3,a3,0x6 + 80031f28: 0cd52a23 sw a3,212(a0) + 80031f2c: 0037c683 lbu a3,3(a5) + 80031f30: 0046d693 srli a3,a3,0x4 + 80031f34: 0016f693 andi a3,a3,1 + 80031f38: 0ed52023 sw a3,224(a0) + 80031f3c: 0037c683 lbu a3,3(a5) + 80031f40: 0036d693 srli a3,a3,0x3 + 80031f44: 0016f693 andi a3,a3,1 + 80031f48: 0ed72023 sw a3,224(a4) + 80031f4c: 0037c683 lbu a3,3(a5) + 80031f50: 0076f693 andi a3,a3,7 + 80031f54: 0ad72a23 sw a3,180(a4) + 80031f58: 0047c683 lbu a3,4(a5) + 80031f5c: 0046d69b srliw a3,a3,0x4 + 80031f60: 0cd72023 sw a3,192(a4) + 80031f64: 0047c683 lbu a3,4(a5) + 80031f68: 00f6f693 andi a3,a3,15 + 80031f6c: 0cd72223 sw a3,196(a4) + 80031f70: 0057c683 lbu a3,5(a5) + 80031f74: 0046d69b srliw a3,a3,0x4 + 80031f78: 0cd52023 sw a3,192(a0) + 80031f7c: 0057c683 lbu a3,5(a5) + 80031f80: 00f6f693 andi a3,a3,15 + 80031f84: 0cd52223 sw a3,196(a0) + 80031f88: 0067c683 lbu a3,6(a5) + 80031f8c: 0046d69b srliw a3,a3,0x4 + 80031f90: 0cd72423 sw a3,200(a4) + 80031f94: 0067c683 lbu a3,6(a5) + 80031f98: 00f6f693 andi a3,a3,15 + 80031f9c: 0cd72623 sw a3,204(a4) + 80031fa0: 0077c703 lbu a4,7(a5) + 80031fa4: 0047571b srliw a4,a4,0x4 + 80031fa8: 0ce52423 sw a4,200(a0) + 80031fac: 0077c783 lbu a5,7(a5) + 80031fb0: 00f7f793 andi a5,a5,15 + 80031fb4: 0cf52623 sw a5,204(a0) + 80031fb8: 00008067 ret + 80031fbc: 02e54683 lbu a3,46(a0) + 80031fc0: 02e50793 addi a5,a0,46 + 80031fc4: e81ff06f j 80031e44 + +0000000080031fc8 : + 80031fc8: ff010113 addi sp,sp,-16 + 80031fcc: 21600613 li a2,534 + 80031fd0: 00014597 auipc a1,0x14 + 80031fd4: 37858593 addi a1,a1,888 # 80046348 <_ZL3lut+0x4e8> + 80031fd8: 0000b517 auipc a0,0xb + 80031fdc: d3850513 addi a0,a0,-712 # 8003cd10 <_etext+0x2c> + 80031fe0: 00113423 sd ra,8(sp) + 80031fe4: 564090ef jal ra,8003b548 + 80031fe8: 00100513 li a0,1 + 80031fec: 589070ef jal ra,80039d74 + +0000000080031ff0 : + 80031ff0: 3c80806f j 8003a3b8 + +0000000080031ff4 : + 80031ff4: 07852783 lw a5,120(a0) + 80031ff8: ff010113 addi sp,sp,-16 + 80031ffc: 00113423 sd ra,8(sp) + 80032000: 00078c63 beqz a5,80032018 + 80032004: 0000c7b7 lui a5,0xc + 80032008: 2347879b addiw a5,a5,564 + 8003200c: 0001b717 auipc a4,0x1b + 80032010: 16f72023 sw a5,352(a4) # 8004d16c + 80032014: fb5ff0ef jal ra,80031fc8 + 80032018: 0001b797 auipc a5,0x1b + 8003201c: 14b7aa23 sw a1,340(a5) # 8004d16c + 80032020: ff5ff06f j 80032014 + +0000000080032024 : + 80032024: 2cc05463 blez a2,800322ec + 80032028: fff60e9b addiw t4,a2,-1 + 8003202c: 020e9e93 slli t4,t4,0x20 + 80032030: 020ede93 srli t4,t4,0x20 + 80032034: f9010113 addi sp,sp,-112 + 80032038: 001e8e93 addi t4,t4,1 + 8003203c: 05213c23 sd s2,88(sp) + 80032040: 002e9e93 slli t4,t4,0x2 + 80032044: 0b450793 addi a5,a0,180 + 80032048: 000102b7 lui t0,0x10 + 8003204c: 00040937 lui s2,0x40 + 80032050: 06913023 sd s1,96(sp) + 80032054: 05313823 sd s3,80(sp) + 80032058: 05413423 sd s4,72(sp) + 8003205c: 05513023 sd s5,64(sp) + 80032060: 03613c23 sd s6,56(sp) + 80032064: 03713823 sd s7,48(sp) + 80032068: 03813423 sd s8,40(sp) + 8003206c: 03913023 sd s9,32(sp) + 80032070: 01a13c23 sd s10,24(sp) + 80032074: 01b13823 sd s11,16(sp) + 80032078: 06813423 sd s0,104(sp) + 8003207c: 01d58eb3 add t4,a1,t4 + 80032080: 0b850d93 addi s11,a0,184 + 80032084: 71850d13 addi s10,a0,1816 + 80032088: 00f13423 sd a5,8(sp) + 8003208c: fff28293 addi t0,t0,-1 # ffff <_entry_offset+0xffff> + 80032090: fff90913 addi s2,s2,-1 # 3ffff <_entry_offset+0x3ffff> + 80032094: 00400493 li s1,4 + 80032098: 00100f93 li t6,1 + 8003209c: 07f00c93 li s9,127 + 800320a0: 00600c13 li s8,6 + 800320a4: 00400bb7 lui s7,0x400 + 800320a8: 00200b13 li s6,2 + 800320ac: 00f00a93 li s5,15 + 800320b0: 00200a13 li s4,2 + 800320b4: 00014997 auipc s3,0x14 + 800320b8: 39c98993 addi s3,s3,924 # 80046450 + 800320bc: 00600f13 li t5,6 + 800320c0: 06852703 lw a4,104(a0) + 800320c4: 07052783 lw a5,112(a0) + 800320c8: 06052a23 sw zero,116(a0) + 800320cc: 00577733 and a4,a4,t0 + 800320d0: 0057f7b3 and a5,a5,t0 + 800320d4: 06f52823 sw a5,112(a0) + 800320d8: 06e52423 sw a4,104(a0) + 800320dc: 06052623 sw zero,108(a0) + 800320e0: 000d8793 mv a5,s11 + 800320e4: 00300813 li a6,3 + 800320e8: 0ff00893 li a7,255 + 800320ec: 0680006f j 80032154 + 800320f0: 0f471c63 bne a4,s4,800321e8 + 800320f4: 0107e603 lwu a2,16(a5) + 800320f8: 0707a703 lw a4,112(a5) + 800320fc: 0747a303 lw t1,116(a5) + 80032100: 00261613 slli a2,a2,0x2 + 80032104: 00c98633 add a2,s3,a2 + 80032108: 00062e03 lw t3,0(a2) + 8003210c: 00e3033b addw t1,t1,a4 + 80032110: 0667a823 sw t1,112(a5) + 80032114: 00f7571b srliw a4,a4,0xf + 80032118: 01c36c63 bltu t1,t3,80032130 + 8003211c: 0007a603 lw a2,0(a5) + 80032120: 07c7a823 sw t3,112(a5) + 80032124: 0c060e63 beqz a2,80032200 + 80032128: 0707a623 sw a6,108(a5) + 8003212c: 0607aa23 sw zero,116(a5) + 80032130: 0647a603 lw a2,100(a5) + 80032134: 00e6073b addw a4,a2,a4 + 80032138: 0017161b slliw a2,a4,0x1 + 8003213c: 00060713 mv a4,a2 + 80032140: 00c8f463 bgeu a7,a2,80032148 + 80032144: 0ff00713 li a4,255 + 80032148: 06e7ac23 sw a4,120(a5) + 8003214c: 08878793 addi a5,a5,136 + 80032150: 0afd0e63 beq s10,a5,8003220c + 80032154: 0247a603 lw a2,36(a5) + 80032158: 0487a703 lw a4,72(a5) + 8003215c: 00061663 bnez a2,80032168 + 80032160: 04c7a603 lw a2,76(a5) + 80032164: 00e6073b addw a4,a2,a4 + 80032168: 01277633 and a2,a4,s2 + 8003216c: 06c7a703 lw a4,108(a5) + 80032170: 0096531b srliw t1,a2,0x9 + 80032174: 04c7a423 sw a2,72(a5) + 80032178: 0467a823 sw t1,80(a5) + 8003217c: 07070a63 beq a4,a6,800321f0 + 80032180: 04e84063 blt a6,a4,800321c0 + 80032184: f7f716e3 bne a4,t6,800320f0 + 80032188: 0707a603 lw a2,112(a5) + 8003218c: 0747a703 lw a4,116(a5) + 80032190: 00e6063b addw a2,a2,a4 + 80032194: 01767733 and a4,a2,s7 + 80032198: 06c7a823 sw a2,112(a5) + 8003219c: 0007071b sext.w a4,a4 + 800321a0: 00071663 bnez a4,800321ac + 800321a4: 0087a603 lw a2,8(a5) + 800321a8: f95614e3 bne a2,s5,80032130 + 800321ac: 0607a823 sw zero,112(a5) + 800321b0: 0767a623 sw s6,108(a5) + 800321b4: 0607aa23 sw zero,116(a5) + 800321b8: 00000713 li a4,0 + 800321bc: f75ff06f j 80032130 + 800321c0: ffc7061b addiw a2,a4,-4 + 800321c4: 07f00713 li a4,127 + 800321c8: f6cfe4e3 bltu t6,a2,80032130 + 800321cc: 0707a303 lw t1,112(a5) + 800321d0: 0747a603 lw a2,116(a5) + 800321d4: 00f3571b srliw a4,t1,0xf + 800321d8: 0066063b addw a2,a2,t1 + 800321dc: 06c7a823 sw a2,112(a5) + 800321e0: f4ecf8e3 bgeu s9,a4,80032130 + 800321e4: 0787a623 sw s8,108(a5) + 800321e8: 07f00713 li a4,127 + 800321ec: f45ff06f j 80032130 + 800321f0: 0707a703 lw a4,112(a5) + 800321f4: 0007a603 lw a2,0(a5) + 800321f8: 00f7571b srliw a4,a4,0xf + 800321fc: f2061ae3 bnez a2,80032130 + 80032200: 0697a623 sw s1,108(a5) + 80032204: 0607aa23 sw zero,116(a5) + 80032208: f29ff06f j 80032130 + 8003220c: 71052403 lw s0,1808(a0) + 80032210: 00813803 ld a6,8(sp) + 80032214: 00000713 li a4,0 + 80032218: 00000e13 li t3,0 + 8003221c: 00100393 li t2,1 + 80032220: 001e161b slliw a2,t3,0x1 + 80032224: 00166613 ori a2,a2,1 + 80032228: 0006061b sext.w a2,a2 + 8003222c: 01c3933b sllw t1,t2,t3 + 80032230: 00461793 slli a5,a2,0x4 + 80032234: 00c788b3 add a7,a5,a2 + 80032238: 00647333 and t1,s0,t1 + 8003223c: 00389893 slli a7,a7,0x3 + 80032240: 0003031b sext.w t1,t1 + 80032244: 011508b3 add a7,a0,a7 + 80032248: 001e0e1b addiw t3,t3,1 + 8003224c: 02031c63 bnez t1,80032284 + 80032250: 1248a603 lw a2,292(a7) + 80032254: 00088793 mv a5,a7 + 80032258: 03e60663 beq a2,t5,80032284 + 8003225c: 03882603 lw a2,56(a6) + 80032260: 02082c23 sw zero,56(a6) + 80032264: 4016589b sraiw a7,a2,0x1 + 80032268: 03182a23 sw a7,52(a6) + 8003226c: 02c82e23 sw a2,60(a6) + 80032270: 0ec7a603 lw a2,236(a5) + 80032274: 0e07a623 sw zero,236(a5) + 80032278: 4016589b sraiw a7,a2,0x1 + 8003227c: 0ec7a823 sw a2,240(a5) + 80032280: 00e8873b addw a4,a7,a4 + 80032284: 11080813 addi a6,a6,272 + 80032288: f9ee1ce3 bne t3,t5,80032220 + 8003228c: 0107171b slliw a4,a4,0x10 + 80032290: 0005a783 lw a5,0(a1) + 80032294: 4107571b sraiw a4,a4,0x10 + 80032298: 00008637 lui a2,0x8 + 8003229c: 00c7073b addw a4,a4,a2 + 800322a0: 00d7173b sllw a4,a4,a3 + 800322a4: 00e7873b addw a4,a5,a4 + 800322a8: 00e5a023 sw a4,0(a1) + 800322ac: 00458593 addi a1,a1,4 + 800322b0: e1d598e3 bne a1,t4,800320c0 + 800322b4: 06813403 ld s0,104(sp) + 800322b8: 06013483 ld s1,96(sp) + 800322bc: 05813903 ld s2,88(sp) + 800322c0: 05013983 ld s3,80(sp) + 800322c4: 04813a03 ld s4,72(sp) + 800322c8: 04013a83 ld s5,64(sp) + 800322cc: 03813b03 ld s6,56(sp) + 800322d0: 03013b83 ld s7,48(sp) + 800322d4: 02813c03 ld s8,40(sp) + 800322d8: 02013c83 ld s9,32(sp) + 800322dc: 01813d03 ld s10,24(sp) + 800322e0: 01013d83 ld s11,16(sp) + 800322e4: 07010113 addi sp,sp,112 + 800322e8: 00008067 ret + 800322ec: 00008067 ret + +00000000800322f0 : + 800322f0: 03f5f593 andi a1,a1,63 + 800322f4: 03500793 li a5,53 + 800322f8: 12b7ee63 bltu a5,a1,80032434 + 800322fc: 00014697 auipc a3,0x14 + 80032300: 07c68693 addi a3,a3,124 # 80046378 <_ZL3lut+0x518> + 80032304: 00259713 slli a4,a1,0x2 + 80032308: 00d70733 add a4,a4,a3 + 8003230c: 00072783 lw a5,0(a4) + 80032310: fc010113 addi sp,sp,-64 + 80032314: 02813823 sd s0,48(sp) + 80032318: 00d787b3 add a5,a5,a3 + 8003231c: 03213023 sd s2,32(sp) + 80032320: 02113c23 sd ra,56(sp) + 80032324: 02913423 sd s1,40(sp) + 80032328: 01313c23 sd s3,24(sp) + 8003232c: 01413823 sd s4,16(sp) + 80032330: 01513423 sd s5,8(sp) + 80032334: 01613023 sd s6,0(sp) + 80032338: 00050413 mv s0,a0 + 8003233c: 0ff67913 andi s2,a2,255 + 80032340: 00078067 jr a5 + 80032344: fd05849b addiw s1,a1,-48 + 80032348: 02049793 slli a5,s1,0x20 + 8003234c: 0207d793 srli a5,a5,0x20 + 80032350: 00f507b3 add a5,a0,a5 + 80032354: 02c78423 sb a2,40(a5) + 80032358: 0004859b sext.w a1,s1 + 8003235c: 00495613 srli a2,s2,0x4 + 80032360: aadff0ef jal ra,80031e0c + 80032364: 0014959b slliw a1,s1,0x1 + 80032368: 0015e793 ori a5,a1,1 + 8003236c: 0007871b sext.w a4,a5 + 80032370: 02059593 slli a1,a1,0x20 + 80032374: 0205d593 srli a1,a1,0x20 + 80032378: 00471793 slli a5,a4,0x4 + 8003237c: 02071693 slli a3,a4,0x20 + 80032380: 0206d693 srli a3,a3,0x20 + 80032384: 00e787b3 add a5,a5,a4 + 80032388: 00459493 slli s1,a1,0x4 + 8003238c: 00469513 slli a0,a3,0x4 + 80032390: 00379793 slli a5,a5,0x3 + 80032394: 0029191b slliw s2,s2,0x2 + 80032398: 00b485b3 add a1,s1,a1 + 8003239c: 00f407b3 add a5,s0,a5 + 800323a0: 00d50533 add a0,a0,a3 + 800323a4: 03c97913 andi s2,s2,60 + 800323a8: 00359593 slli a1,a1,0x3 + 800323ac: 1127aa23 sw s2,276(a5) + 800323b0: 00b405b3 add a1,s0,a1 + 800323b4: 00351513 slli a0,a0,0x3 + 800323b8: 0e05e783 lwu a5,224(a1) + 800323bc: 1005a223 sw zero,260(a1) + 800323c0: 1005ae23 sw zero,284(a1) + 800323c4: 1205a023 sw zero,288(a1) + 800323c8: 1205a623 sw zero,300(a1) + 800323cc: 00a40433 add s0,s0,a0 + 800323d0: 0e046683 lwu a3,224(s0) + 800323d4: 00014717 auipc a4,0x14 + 800323d8: 13470713 addi a4,a4,308 # 80046508 + 800323dc: 00379793 slli a5,a5,0x3 + 800323e0: 00f707b3 add a5,a4,a5 + 800323e4: 00369693 slli a3,a3,0x3 + 800323e8: 0007b603 ld a2,0(a5) + 800323ec: 00d70733 add a4,a4,a3 + 800323f0: 00073783 ld a5,0(a4) + 800323f4: 0ec5bc23 sd a2,248(a1) + 800323f8: 10042223 sw zero,260(s0) + 800323fc: 10042e23 sw zero,284(s0) + 80032400: 12042023 sw zero,288(s0) + 80032404: 0ef43c23 sd a5,248(s0) + 80032408: 12042623 sw zero,300(s0) + 8003240c: 03813083 ld ra,56(sp) + 80032410: 03013403 ld s0,48(sp) + 80032414: 02813483 ld s1,40(sp) + 80032418: 02013903 ld s2,32(sp) + 8003241c: 01813983 ld s3,24(sp) + 80032420: 01013a03 ld s4,16(sp) + 80032424: 00813a83 ld s5,8(sp) + 80032428: 00013b03 ld s6,0(sp) + 8003242c: 04010113 addi sp,sp,64 + 80032430: 00008067 ret + 80032434: 00008067 ret + 80032438: ff05869b addiw a3,a1,-16 + 8003243c: 00068593 mv a1,a3 + 80032440: 00d506b3 add a3,a0,a3 + 80032444: 0226c703 lbu a4,34(a3) + 80032448: 0015959b slliw a1,a1,0x1 + 8003244c: 0015e513 ori a0,a1,1 + 80032450: 00451793 slli a5,a0,0x4 + 80032454: 00a787b3 add a5,a5,a0 + 80032458: 0087171b slliw a4,a4,0x8 + 8003245c: 00459513 slli a0,a1,0x4 + 80032460: 10077713 andi a4,a4,256 + 80032464: 00b505b3 add a1,a0,a1 + 80032468: 00379793 slli a5,a5,0x3 + 8003246c: 00c68e23 sb a2,28(a3) + 80032470: 00f407b3 add a5,s0,a5 + 80032474: 01276933 or s2,a4,s2 + 80032478: 00359513 slli a0,a1,0x3 + 8003247c: 1127a623 sw s2,268(a5) + 80032480: 00a40433 add s0,s0,a0 + 80032484: 0e046703 lwu a4,224(s0) + 80032488: 11242623 sw s2,268(s0) + 8003248c: 10042223 sw zero,260(s0) + 80032490: 10042e23 sw zero,284(s0) + 80032494: 12042023 sw zero,288(s0) + 80032498: 12042623 sw zero,300(s0) + 8003249c: 0e07e603 lwu a2,224(a5) + 800324a0: 00014697 auipc a3,0x14 + 800324a4: 06868693 addi a3,a3,104 # 80046508 + 800324a8: 00371713 slli a4,a4,0x3 + 800324ac: 00e68733 add a4,a3,a4 + 800324b0: 00361613 slli a2,a2,0x3 + 800324b4: 00073583 ld a1,0(a4) + 800324b8: 00c686b3 add a3,a3,a2 + 800324bc: 0006b703 ld a4,0(a3) + 800324c0: 0eb43c23 sd a1,248(s0) + 800324c4: 1007a223 sw zero,260(a5) + 800324c8: 1007ae23 sw zero,284(a5) + 800324cc: 1207a023 sw zero,288(a5) + 800324d0: 0ee7bc23 sd a4,248(a5) + 800324d4: 1207a623 sw zero,300(a5) + 800324d8: f35ff06f j 8003240c + 800324dc: fe05859b addiw a1,a1,-32 + 800324e0: 0015989b slliw a7,a1,0x1 + 800324e4: 00b40f33 add t5,s0,a1 + 800324e8: 0018ee93 ori t4,a7,1 + 800324ec: 01cf4e03 lbu t3,28(t5) + 800324f0: 004e9793 slli a5,t4,0x4 + 800324f4: 0089131b slliw t1,s2,0x8 + 800324f8: 01d78833 add a6,a5,t4 + 800324fc: 00489713 slli a4,a7,0x4 + 80032500: 10037313 andi t1,t1,256 + 80032504: 00381813 slli a6,a6,0x3 + 80032508: 011706b3 add a3,a4,a7 + 8003250c: 02cf0123 sb a2,34(t5) + 80032510: 01040833 add a6,s0,a6 + 80032514: 006e0e3b addw t3,t3,t1 + 80032518: 00369693 slli a3,a3,0x3 + 8003251c: 11c82623 sw t3,268(a6) + 80032520: 00d406b3 add a3,s0,a3 + 80032524: 0019531b srliw t1,s2,0x1 + 80032528: 11c6a623 sw t3,268(a3) + 8003252c: 00737313 andi t1,t1,7 + 80032530: 10682823 sw t1,272(a6) + 80032534: 0059591b srliw s2,s2,0x5 + 80032538: 1066a823 sw t1,272(a3) + 8003253c: 00197913 andi s2,s2,1 + 80032540: 11282c23 sw s2,280(a6) + 80032544: 0e46a803 lw a6,228(a3) + 80032548: 00088513 mv a0,a7 + 8003254c: 00080463 beqz a6,80032554 + 80032550: 1126ac23 sw s2,280(a3) + 80032554: 01067613 andi a2,a2,16 + 80032558: 0005069b sext.w a3,a0 + 8003255c: 0015051b addiw a0,a0,1 + 80032560: 3c061663 bnez a2,8003292c + 80032564: 00c50513 addi a0,a0,12 + 80032568: 00251693 slli a3,a0,0x2 + 8003256c: 00d406b3 add a3,s0,a3 + 80032570: 0086a683 lw a3,8(a3) + 80032574: 02068663 beqz a3,800325a0 + 80032578: 01d786b3 add a3,a5,t4 + 8003257c: 00369693 slli a3,a3,0x3 + 80032580: 0b068693 addi a3,a3,176 + 80032584: 00d406b3 add a3,s0,a3 + 80032588: 0746a503 lw a0,116(a3) + 8003258c: 00100613 li a2,1 + 80032590: 00c51463 bne a0,a2,80032598 + 80032594: 0606ac23 sw zero,120(a3) + 80032598: 00500613 li a2,5 + 8003259c: 06c6aa23 sw a2,116(a3) + 800325a0: 02458593 addi a1,a1,36 + 800325a4: 00259693 slli a3,a1,0x2 + 800325a8: 00d406b3 add a3,s0,a3 + 800325ac: 0006a223 sw zero,4(a3) + 800325b0: 01170733 add a4,a4,a7 + 800325b4: 00371713 slli a4,a4,0x3 + 800325b8: 01d787b3 add a5,a5,t4 + 800325bc: 00e40733 add a4,s0,a4 + 800325c0: 00379793 slli a5,a5,0x3 + 800325c4: 0e076603 lwu a2,224(a4) + 800325c8: 10072223 sw zero,260(a4) + 800325cc: 10072e23 sw zero,284(a4) + 800325d0: 12072023 sw zero,288(a4) + 800325d4: 12072623 sw zero,300(a4) + 800325d8: 00f407b3 add a5,s0,a5 + 800325dc: 0e07e583 lwu a1,224(a5) + 800325e0: 00014697 auipc a3,0x14 + 800325e4: f2868693 addi a3,a3,-216 # 80046508 + 800325e8: 00361613 slli a2,a2,0x3 + 800325ec: 00c68633 add a2,a3,a2 + 800325f0: 00359593 slli a1,a1,0x3 + 800325f4: 00063603 ld a2,0(a2) # 8000 <_entry_offset+0x8000> + 800325f8: 00b686b3 add a3,a3,a1 + 800325fc: 0006b683 ld a3,0(a3) + 80032600: 0ec73c23 sd a2,248(a4) + 80032604: 1007a223 sw zero,260(a5) + 80032608: 0ed7bc23 sd a3,248(a5) + 8003260c: 03840713 addi a4,s0,56 + 80032610: 02240693 addi a3,s0,34 + 80032614: 1007ae23 sw zero,284(a5) + 80032618: 1207a023 sw zero,288(a5) + 8003261c: 1207a623 sw zero,300(a5) + 80032620: 06840413 addi s0,s0,104 + 80032624: 0006c783 lbu a5,0(a3) + 80032628: 00870713 addi a4,a4,8 + 8003262c: 00168693 addi a3,a3,1 + 80032630: 0107f793 andi a5,a5,16 + 80032634: 0ff7f793 andi a5,a5,255 + 80032638: fef72e23 sw a5,-4(a4) + 8003263c: fef72c23 sw a5,-8(a4) + 80032640: fe8712e3 bne a4,s0,80032624 + 80032644: dc9ff06f j 8003240c + 80032648: 02c50723 sb a2,46(a0) + 8003264c: 07c50913 addi s2,a0,124 + 80032650: 10450993 addi s3,a0,260 + 80032654: 00000493 li s1,0 + 80032658: 00600a13 li s4,6 + 8003265c: 0140006f j 80032670 + 80032660: 0014849b addiw s1,s1,1 + 80032664: 00490913 addi s2,s2,4 + 80032668: 11098993 addi s3,s3,272 + 8003266c: db4480e3 beq s1,s4,8003240c + 80032670: 00092783 lw a5,0(s2) + 80032674: fe0796e3 bnez a5,80032660 + 80032678: 00000613 li a2,0 + 8003267c: 00048593 mv a1,s1 + 80032680: 00040513 mv a0,s0 + 80032684: f88ff0ef jal ra,80031e0c + 80032688: 0009a023 sw zero,0(s3) + 8003268c: 0009ae23 sw zero,28(s3) + 80032690: 0209a423 sw zero,40(s3) + 80032694: fcdff06f j 80032660 + 80032698: 02c507a3 sb a2,47(a0) + 8003269c: 07c50993 addi s3,a0,124 + 800326a0: 00000913 li s2,0 + 800326a4: 00600a13 li s4,6 + 800326a8: 0100006f j 800326b8 + 800326ac: 0019091b addiw s2,s2,1 + 800326b0: 00498993 addi s3,s3,4 + 800326b4: d5490ce3 beq s2,s4,8003240c + 800326b8: 0009a783 lw a5,0(s3) + 800326bc: fe0798e3 bnez a5,800326ac + 800326c0: 0009049b sext.w s1,s2 + 800326c4: 00048593 mv a1,s1 + 800326c8: 0014949b slliw s1,s1,0x1 + 800326cc: 00000613 li a2,0 + 800326d0: 00040513 mv a0,s0 + 800326d4: 0014e493 ori s1,s1,1 + 800326d8: f34ff0ef jal ra,80031e0c + 800326dc: 0004849b sext.w s1,s1 + 800326e0: 00449793 slli a5,s1,0x4 + 800326e4: 009784b3 add s1,a5,s1 + 800326e8: 00349493 slli s1,s1,0x3 + 800326ec: 009404b3 add s1,s0,s1 + 800326f0: 1004a223 sw zero,260(s1) + 800326f4: 1204a023 sw zero,288(s1) + 800326f8: 1204a623 sw zero,300(s1) + 800326fc: fb1ff06f j 800326ac + 80032700: 02c50a23 sb a2,52(a0) + 80032704: 07c50913 addi s2,a0,124 + 80032708: 12c50993 addi s3,a0,300 + 8003270c: 00000493 li s1,0 + 80032710: 00600a13 li s4,6 + 80032714: 0140006f j 80032728 + 80032718: 0014849b addiw s1,s1,1 + 8003271c: 00490913 addi s2,s2,4 + 80032720: 11098993 addi s3,s3,272 + 80032724: cf4484e3 beq s1,s4,8003240c + 80032728: 00092783 lw a5,0(s2) + 8003272c: fe0796e3 bnez a5,80032718 + 80032730: 00000613 li a2,0 + 80032734: 00048593 mv a1,s1 + 80032738: 00040513 mv a0,s0 + 8003273c: ed0ff0ef jal ra,80031e0c + 80032740: 0009a023 sw zero,0(s3) + 80032744: fd5ff06f j 80032718 + 80032748: 02c50aa3 sb a2,53(a0) + 8003274c: 07c50993 addi s3,a0,124 + 80032750: 00000913 li s2,0 + 80032754: 00600a13 li s4,6 + 80032758: 0100006f j 80032768 + 8003275c: 0019091b addiw s2,s2,1 + 80032760: 00498993 addi s3,s3,4 + 80032764: cb4904e3 beq s2,s4,8003240c + 80032768: 0009a783 lw a5,0(s3) + 8003276c: fe0798e3 bnez a5,8003275c + 80032770: 0009049b sext.w s1,s2 + 80032774: 00048593 mv a1,s1 + 80032778: 0014949b slliw s1,s1,0x1 + 8003277c: 00000613 li a2,0 + 80032780: 00040513 mv a0,s0 + 80032784: 0014e493 ori s1,s1,1 + 80032788: e84ff0ef jal ra,80031e0c + 8003278c: 0004849b sext.w s1,s1 + 80032790: 00449793 slli a5,s1,0x4 + 80032794: 009784b3 add s1,a5,s1 + 80032798: 00349493 slli s1,s1,0x3 + 8003279c: 009404b3 add s1,s0,s1 + 800327a0: 1204a623 sw zero,300(s1) + 800327a4: fb9ff06f j 8003275c + 800327a8: 02c50823 sb a2,48(a0) + 800327ac: 07c50913 addi s2,a0,124 + 800327b0: 11c50993 addi s3,a0,284 + 800327b4: 00000493 li s1,0 + 800327b8: 00600a13 li s4,6 + 800327bc: 0140006f j 800327d0 + 800327c0: 0014849b addiw s1,s1,1 + 800327c4: 00490913 addi s2,s2,4 + 800327c8: 11098993 addi s3,s3,272 + 800327cc: c54480e3 beq s1,s4,8003240c + 800327d0: 00092783 lw a5,0(s2) + 800327d4: fe0796e3 bnez a5,800327c0 + 800327d8: 00000613 li a2,0 + 800327dc: 00048593 mv a1,s1 + 800327e0: 00040513 mv a0,s0 + 800327e4: e28ff0ef jal ra,80031e0c + 800327e8: 0009a023 sw zero,0(s3) + 800327ec: fd5ff06f j 800327c0 + 800327f0: 02c508a3 sb a2,49(a0) + 800327f4: 07c50993 addi s3,a0,124 + 800327f8: 0e050a13 addi s4,a0,224 + 800327fc: 00000913 li s2,0 + 80032800: 00014b17 auipc s6,0x14 + 80032804: d08b0b13 addi s6,s6,-760 # 80046508 + 80032808: 00600a93 li s5,6 + 8003280c: 0140006f j 80032820 + 80032810: 0019091b addiw s2,s2,1 + 80032814: 00498993 addi s3,s3,4 + 80032818: 110a0a13 addi s4,s4,272 + 8003281c: bf5908e3 beq s2,s5,8003240c + 80032820: 0009a783 lw a5,0(s3) + 80032824: fe0796e3 bnez a5,80032810 + 80032828: 0009049b sext.w s1,s2 + 8003282c: 00048593 mv a1,s1 + 80032830: 0014949b slliw s1,s1,0x1 + 80032834: 00000613 li a2,0 + 80032838: 00040513 mv a0,s0 + 8003283c: 0014e493 ori s1,s1,1 + 80032840: dccff0ef jal ra,80031e0c + 80032844: 0004849b sext.w s1,s1 + 80032848: 00449793 slli a5,s1,0x4 + 8003284c: 009784b3 add s1,a5,s1 + 80032850: 00349493 slli s1,s1,0x3 + 80032854: 000a6703 lwu a4,0(s4) + 80032858: 009404b3 add s1,s0,s1 + 8003285c: 0e04e783 lwu a5,224(s1) + 80032860: 00371713 slli a4,a4,0x3 + 80032864: 00eb0733 add a4,s6,a4 + 80032868: 00379793 slli a5,a5,0x3 + 8003286c: 00073703 ld a4,0(a4) + 80032870: 00fb07b3 add a5,s6,a5 + 80032874: 0007b783 ld a5,0(a5) + 80032878: 00ea3c23 sd a4,24(s4) + 8003287c: 0ef4bc23 sd a5,248(s1) + 80032880: f91ff06f j 80032810 + 80032884: 02c50923 sb a2,50(a0) + 80032888: 07c50913 addi s2,a0,124 + 8003288c: 12c50993 addi s3,a0,300 + 80032890: 00000493 li s1,0 + 80032894: 00600a13 li s4,6 + 80032898: 0140006f j 800328ac + 8003289c: 0014849b addiw s1,s1,1 + 800328a0: 00490913 addi s2,s2,4 + 800328a4: 11098993 addi s3,s3,272 + 800328a8: b74482e3 beq s1,s4,8003240c + 800328ac: 00092783 lw a5,0(s2) + 800328b0: fe0796e3 bnez a5,8003289c + 800328b4: 00000613 li a2,0 + 800328b8: 00048593 mv a1,s1 + 800328bc: 00040513 mv a0,s0 + 800328c0: d4cff0ef jal ra,80031e0c + 800328c4: 0009a023 sw zero,0(s3) + 800328c8: fd5ff06f j 8003289c + 800328cc: 02c509a3 sb a2,51(a0) + 800328d0: 07c50993 addi s3,a0,124 + 800328d4: 00000913 li s2,0 + 800328d8: 00600a13 li s4,6 + 800328dc: 0100006f j 800328ec + 800328e0: 0019091b addiw s2,s2,1 + 800328e4: 00498993 addi s3,s3,4 + 800328e8: b34902e3 beq s2,s4,8003240c + 800328ec: 0009a783 lw a5,0(s3) + 800328f0: fe0798e3 bnez a5,800328e0 + 800328f4: 0009049b sext.w s1,s2 + 800328f8: 00048593 mv a1,s1 + 800328fc: 0014949b slliw s1,s1,0x1 + 80032900: 00000613 li a2,0 + 80032904: 00040513 mv a0,s0 + 80032908: 0014e493 ori s1,s1,1 + 8003290c: d00ff0ef jal ra,80031e0c + 80032910: 0004849b sext.w s1,s1 + 80032914: 00449793 slli a5,s1,0x4 + 80032918: 009784b3 add s1,a5,s1 + 8003291c: 00349493 slli s1,s1,0x3 + 80032920: 009404b3 add s1,s0,s1 + 80032924: 1204a623 sw zero,300(s1) + 80032928: fb9ff06f j 800328e0 + 8003292c: 00269693 slli a3,a3,0x2 + 80032930: 00d406b3 add a3,s0,a3 + 80032934: 0386a603 lw a2,56(a3) + 80032938: 02061063 bnez a2,80032958 + 8003293c: 01170633 add a2,a4,a7 + 80032940: 00361613 slli a2,a2,0x3 + 80032944: 00c40633 add a2,s0,a2 + 80032948: 00100513 li a0,1 + 8003294c: 12a62223 sw a0,292(a2) + 80032950: 12062423 sw zero,296(a2) + 80032954: 10062023 sw zero,256(a2) + 80032958: 03c6a683 lw a3,60(a3) + 8003295c: 02069063 bnez a3,8003297c + 80032960: 01d786b3 add a3,a5,t4 + 80032964: 00369693 slli a3,a3,0x3 + 80032968: 00d406b3 add a3,s0,a3 + 8003296c: 00100613 li a2,1 + 80032970: 12c6a223 sw a2,292(a3) + 80032974: 1206a423 sw zero,296(a3) + 80032978: 1006a023 sw zero,256(a3) + 8003297c: 02458593 addi a1,a1,36 + 80032980: 00259693 slli a3,a1,0x2 + 80032984: 00d406b3 add a3,s0,a3 + 80032988: 00100613 li a2,1 + 8003298c: 00c6a223 sw a2,4(a3) + 80032990: c21ff06f j 800325b0 + +0000000080032994 : + 80032994: fe010113 addi sp,sp,-32 + 80032998: 00913423 sd s1,8(sp) + 8003299c: 0e450793 addi a5,a0,228 + 800329a0: 00050493 mv s1,a0 + 800329a4: 00113c23 sd ra,24(sp) + 800329a8: 00813823 sd s0,16(sp) + 800329ac: 01213023 sd s2,0(sp) + 800329b0: 00000713 li a4,0 + 800329b4: 00096517 auipc a0,0x96 + 800329b8: a2c50513 addi a0,a0,-1492 # 800c83e0 + 800329bc: 004005b7 lui a1,0x400 + 800329c0: 00c00613 li a2,12 + 800329c4: 00177693 andi a3,a4,1 + 800329c8: 00d7a023 sw a3,0(a5) + 800329cc: 00a7ba23 sd a0,20(a5) + 800329d0: 0007ae23 sw zero,28(a5) + 800329d4: 0207a023 sw zero,32(a5) + 800329d8: 0007a423 sw zero,8(a5) + 800329dc: 0007a623 sw zero,12(a5) + 800329e0: 0007a223 sw zero,4(a5) + 800329e4: 0407a023 sw zero,64(a5) + 800329e8: 04b7a223 sw a1,68(a5) + 800329ec: 0407a423 sw zero,72(a5) + 800329f0: 0207ae23 sw zero,60(a5) + 800329f4: 0207ac23 sw zero,56(a5) + 800329f8: 0207aa23 sw zero,52(a5) + 800329fc: 0207a423 sw zero,40(a5) + 80032a00: 0207a623 sw zero,44(a5) + 80032a04: 0207a823 sw zero,48(a5) + 80032a08: 0207a223 sw zero,36(a5) + 80032a0c: 0407a623 sw zero,76(a5) + 80032a10: 0017071b addiw a4,a4,1 + 80032a14: 08878793 addi a5,a5,136 + 80032a18: fac716e3 bne a4,a2,800329c4 + 80032a1c: 0804aa23 sw zero,148(s1) + 80032a20: 0804bc23 sd zero,152(s1) + 80032a24: 0a04b023 sd zero,160(s1) + 80032a28: 0a04a423 sw zero,168(s1) + 80032a2c: 00000413 li s0,0 + 80032a30: 04000913 li s2,64 + 80032a34: 00040593 mv a1,s0 + 80032a38: 00000613 li a2,0 + 80032a3c: 0014041b addiw s0,s0,1 + 80032a40: 00048513 mv a0,s1 + 80032a44: 8adff0ef jal ra,800322f0 + 80032a48: ff2416e3 bne s0,s2,80032a34 + 80032a4c: 00100413 li s0,1 + 80032a50: 0001a597 auipc a1,0x1a + 80032a54: 71c5e583 lwu a1,1820(a1) # 8004d16c + 80032a58: 01f41513 slli a0,s0,0x1f + 80032a5c: 3cc070ef jal ra,80039e28 <__udivdi3> + 80032a60: 00a4a423 sw a0,8(s1) + 80032a64: 04800593 li a1,72 + 80032a68: 0001a517 auipc a0,0x1a + 80032a6c: 70056503 lwu a0,1792(a0) # 8004d168 + 80032a70: 3b8070ef jal ra,80039e28 <__udivdi3> + 80032a74: 02051593 slli a1,a0,0x20 + 80032a78: 0205d593 srli a1,a1,0x20 + 80032a7c: 01f41513 slli a0,s0,0x1f + 80032a80: 3a8070ef jal ra,80039e28 <__udivdi3> + 80032a84: 01813083 ld ra,24(sp) + 80032a88: 01013403 ld s0,16(sp) + 80032a8c: 00a4a823 sw a0,16(s1) + 80032a90: 0004a623 sw zero,12(s1) + 80032a94: 00013903 ld s2,0(sp) + 80032a98: 00813483 ld s1,8(sp) + 80032a9c: 02010113 addi sp,sp,32 + 80032aa0: 00008067 ret + +0000000080032aa4 : + 80032aa4: 00050c63 beqz a0,80032abc + 80032aa8: 00053023 sd zero,0(a0) + 80032aac: 06052423 sw zero,104(a0) + 80032ab0: 06052823 sw zero,112(a0) + 80032ab4: 70052823 sw zero,1808(a0) + 80032ab8: eddff06f j 80032994 + 80032abc: 00008067 ret + +0000000080032ac0 : + 80032ac0: 0001a717 auipc a4,0x1a + 80032ac4: 6a870713 addi a4,a4,1704 # 8004d168 + 80032ac8: 00072683 lw a3,0(a4) + 80032acc: ff010113 addi sp,sp,-16 + 80032ad0: 00113423 sd ra,8(sp) + 80032ad4: 00813023 sd s0,0(sp) + 80032ad8: 04a69e63 bne a3,a0,80032b34 + 80032adc: 0001a797 auipc a5,0x1a + 80032ae0: 69078793 addi a5,a5,1680 # 8004d16c + 80032ae4: 0007a703 lw a4,0(a5) + 80032ae8: 06b71a63 bne a4,a1,80032b5c + 80032aec: 71800513 li a0,1816 + 80032af0: 0b9070ef jal ra,8003a3a8 + 80032af4: 00050413 mv s0,a0 + 80032af8: 02050463 beqz a0,80032b20 + 80032afc: 71800613 li a2,1816 + 80032b00: 00000593 li a1,0 + 80032b04: 725080ef jal ra,8003ba28 + 80032b08: 00040513 mv a0,s0 + 80032b0c: 70042823 sw zero,1808(s0) + 80032b10: 00043023 sd zero,0(s0) + 80032b14: 06042423 sw zero,104(s0) + 80032b18: 06042823 sw zero,112(s0) + 80032b1c: e79ff0ef jal ra,80032994 + 80032b20: 00813083 ld ra,8(sp) + 80032b24: 00040513 mv a0,s0 + 80032b28: 00013403 ld s0,0(sp) + 80032b2c: 01010113 addi sp,sp,16 + 80032b30: 00008067 ret + 80032b34: 00050793 mv a5,a0 + 80032b38: 10400613 li a2,260 + 80032b3c: 00014597 auipc a1,0x14 + 80032b40: 80c58593 addi a1,a1,-2036 # 80046348 <_ZL3lut+0x4e8> + 80032b44: 0000a517 auipc a0,0xa + 80032b48: 1cc50513 addi a0,a0,460 # 8003cd10 <_etext+0x2c> + 80032b4c: 00f72023 sw a5,0(a4) + 80032b50: 1f9080ef jal ra,8003b548 + 80032b54: 00100513 li a0,1 + 80032b58: 21c070ef jal ra,80039d74 + 80032b5c: 00b7a023 sw a1,0(a5) + 80032b60: c68ff0ef jal ra,80031fc8 + +0000000080032b64 <_ZL12StateRestorei>: + 80032b64: 0019a317 auipc t1,0x19a + 80032b68: ab433303 ld t1,-1356(t1) # 801cc618 <_ZL6WHSync> + 80032b6c: 00030067 jr t1 + +0000000080032b70 <_ZL19UNROM512LLatchWritejh>: + 80032b70: 0019a797 auipc a5,0x19a + 80032b74: aab78d23 sb a1,-1350(a5) # 801cc62a <_ZL6latche> + 80032b78: 0019a797 auipc a5,0x19a + 80032b7c: aaa79823 sh a0,-1360(a5) # 801cc628 <_ZL6latcha> + 80032b80: 0019a317 auipc t1,0x19a + 80032b84: aa033303 ld t1,-1376(t1) # 801cc620 <_ZL6WLSync> + 80032b88: 00030067 jr t1 + +0000000080032b8c <_ZL18UNROM512LatchClosev>: + 80032b8c: ff010113 addi sp,sp,-16 + 80032b90: 00113423 sd ra,8(sp) + 80032b94: 0019a517 auipc a0,0x19a + 80032b98: a7c53503 ld a0,-1412(a0) # 801cc610 <_ZL17flash_write_count> + 80032b9c: 00050463 beqz a0,80032ba4 <_ZL18UNROM512LatchClosev+0x18> + 80032ba0: 9a1df0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80032ba4: 0019a517 auipc a0,0x19a + 80032ba8: a8c53503 ld a0,-1396(a0) # 801cc630 <_ZL9flashdata> + 80032bac: 00050463 beqz a0,80032bb4 <_ZL18UNROM512LatchClosev+0x28> + 80032bb0: 991df0ef jal ra,80012540 <_Z10FCEU_gfreePv> + 80032bb4: 00813083 ld ra,8(sp) + 80032bb8: 0019a797 auipc a5,0x19a + 80032bbc: a407bc23 sd zero,-1448(a5) # 801cc610 <_ZL17flash_write_count> + 80032bc0: 0019a797 auipc a5,0x19a + 80032bc4: a607b823 sd zero,-1424(a5) # 801cc630 <_ZL9flashdata> + 80032bc8: 01010113 addi sp,sp,16 + 80032bcc: 00008067 ret + +0000000080032bd0 <_ZL19UNROM512HLatchWritejh>: + 80032bd0: fe010113 addi sp,sp,-32 + 80032bd4: 00813823 sd s0,16(sp) + 80032bd8: 00913423 sd s1,8(sp) + 80032bdc: 00113c23 sd ra,24(sp) + 80032be0: 0019a797 auipc a5,0x19a + 80032be4: a2e7c783 lbu a5,-1490(a5) # 801cc60e <_ZL12bus_conflict> + 80032be8: 00050493 mv s1,a0 + 80032bec: 00058413 mv s0,a1 + 80032bf0: 02079863 bnez a5,80032c20 <_ZL19UNROM512HLatchWritejh+0x50> + 80032bf4: 0019a797 auipc a5,0x19a + 80032bf8: a2878b23 sb s0,-1482(a5) # 801cc62a <_ZL6latche> + 80032bfc: 01013403 ld s0,16(sp) + 80032c00: 01813083 ld ra,24(sp) + 80032c04: 0019a797 auipc a5,0x19a + 80032c08: a2979223 sh s1,-1500(a5) # 801cc628 <_ZL6latcha> + 80032c0c: 00813483 ld s1,8(sp) + 80032c10: 0019a317 auipc t1,0x19a + 80032c14: a0833303 ld t1,-1528(t1) # 801cc618 <_ZL6WHSync> + 80032c18: 02010113 addi sp,sp,32 + 80032c1c: 00030067 jr t1 + 80032c20: a41dd0ef jal ra,80010660 <_Z6CartBRj> + 80032c24: fc8508e3 beq a0,s0,80032bf4 <_ZL19UNROM512HLatchWritejh+0x24> + 80032c28: 00000413 li s0,0 + 80032c2c: fc9ff06f j 80032bf4 <_ZL19UNROM512HLatchWritejh+0x24> + +0000000080032c30 <_ZL13UNROM512LSyncv>: + 80032c30: f9010113 addi sp,sp,-112 + 80032c34: 00014597 auipc a1,0x14 + 80032c38: d745b583 ld a1,-652(a1) # 800469a8 + 80032c3c: 05500713 li a4,85 + 80032c40: 00100813 li a6,1 + 80032c44: 06113423 sd ra,104(sp) + 80032c48: 06813023 sd s0,96(sp) + 80032c4c: 04913c23 sd s1,88(sp) + 80032c50: 0019a897 auipc a7,0x19a + 80032c54: 9b888893 addi a7,a7,-1608 # 801cc608 <_ZL10flash_mode> + 80032c58: 00b13423 sd a1,8(sp) + 80032c5c: 00014597 auipc a1,0x14 + 80032c60: d545b583 ld a1,-684(a1) # 800469b0 + 80032c64: 02071613 slli a2,a4,0x20 + 80032c68: 02171693 slli a3,a4,0x21 + 80032c6c: 02081793 slli a5,a6,0x20 + 80032c70: 00b13823 sd a1,16(sp) + 80032c74: 0008c503 lbu a0,0(a7) + 80032c78: 0000b5b7 lui a1,0xb + 80032c7c: 0aa60613 addi a2,a2,170 + 80032c80: 08068693 addi a3,a3,128 + 80032c84: 00178793 addi a5,a5,1 + 80032c88: aaa5859b addiw a1,a1,-1366 + 80032c8c: 00b12c23 sw a1,24(sp) + 80032c90: 02c13023 sd a2,32(sp) + 80032c94: 02d13423 sd a3,40(sp) + 80032c98: 02e12823 sw a4,48(sp) + 80032c9c: 03013c23 sd a6,56(sp) + 80032ca0: 04f13023 sd a5,64(sp) + 80032ca4: 04012423 sw zero,72(sp) + 80032ca8: 06051463 bnez a0,80032d10 <_ZL13UNROM512LSyncv+0xe0> + 80032cac: 0019a597 auipc a1,0x19a + 80032cb0: 96058593 addi a1,a1,-1696 # 801cc60c <_ZL11flash_state> + 80032cb4: 0005c703 lbu a4,0(a1) + 80032cb8: 05010513 addi a0,sp,80 + 80032cbc: 0019a617 auipc a2,0x19a + 80032cc0: 96c65603 lhu a2,-1684(a2) # 801cc628 <_ZL6latcha> + 80032cc4: 00271793 slli a5,a4,0x2 + 80032cc8: 00f507b3 add a5,a0,a5 + 80032ccc: fb87a503 lw a0,-72(a5) + 80032cd0: 0019a697 auipc a3,0x19a + 80032cd4: 95a6c683 lbu a3,-1702(a3) # 801cc62a <_ZL6latche> + 80032cd8: 04c50c63 beq a0,a2,80032d30 <_ZL13UNROM512LSyncv+0x100> + 80032cdc: 00200793 li a5,2 + 80032ce0: 0cf70063 beq a4,a5,80032da0 <_ZL13UNROM512LSyncv+0x170> + 80032ce4: 0f000793 li a5,240 + 80032ce8: 00f69663 bne a3,a5,80032cf4 <_ZL13UNROM512LSyncv+0xc4> + 80032cec: 0019a797 auipc a5,0x19a + 80032cf0: 920780a3 sb zero,-1759(a5) # 801cc60d <_ZL11software_id> + 80032cf4: 06813083 ld ra,104(sp) + 80032cf8: 06013403 ld s0,96(sp) + 80032cfc: 0019a797 auipc a5,0x19a + 80032d00: 90078823 sb zero,-1776(a5) # 801cc60c <_ZL11flash_state> + 80032d04: 05813483 ld s1,88(sp) + 80032d08: 07010113 addi sp,sp,112 + 80032d0c: 00008067 ret + 80032d10: 05050a63 beq a0,a6,80032d64 <_ZL13UNROM512LSyncv+0x134> + 80032d14: 00200793 li a5,2 + 80032d18: 0cf50463 beq a0,a5,80032de0 <_ZL13UNROM512LSyncv+0x1b0> + 80032d1c: 06813083 ld ra,104(sp) + 80032d20: 06013403 ld s0,96(sp) + 80032d24: 05813483 ld s1,88(sp) + 80032d28: 07010113 addi sp,sp,112 + 80032d2c: 00008067 ret + 80032d30: fd07a503 lw a0,-48(a5) + 80032d34: fad514e3 bne a0,a3,80032cdc <_ZL13UNROM512LSyncv+0xac> + 80032d38: fe87a783 lw a5,-24(a5) + 80032d3c: 0019a517 auipc a0,0x19a + 80032d40: 8cb54503 lbu a0,-1845(a0) # 801cc607 <_ZL10flash_bank> + 80032d44: f8f51ce3 bne a0,a5,80032cdc <_ZL13UNROM512LSyncv+0xac> + 80032d48: 0017071b addiw a4,a4,1 + 80032d4c: 0ff77713 andi a4,a4,255 + 80032d50: 00e58023 sb a4,0(a1) + 80032d54: 00500793 li a5,5 + 80032d58: fcf712e3 bne a4,a5,80032d1c <_ZL13UNROM512LSyncv+0xec> + 80032d5c: 01088023 sb a6,0(a7) + 80032d60: fbdff06f j 80032d1c <_ZL13UNROM512LSyncv+0xec> + 80032d64: 0019a797 auipc a5,0x19a + 80032d68: 8c67c783 lbu a5,-1850(a5) # 801cc62a <_ZL6latche> + 80032d6c: 03000713 li a4,48 + 80032d70: 0ee78263 beq a5,a4,80032e54 <_ZL13UNROM512LSyncv+0x224> + 80032d74: 01000713 li a4,16 + 80032d78: 16e78e63 beq a5,a4,80032ef4 <_ZL13UNROM512LSyncv+0x2c4> + 80032d7c: 06813083 ld ra,104(sp) + 80032d80: 06013403 ld s0,96(sp) + 80032d84: 0019a797 auipc a5,0x19a + 80032d88: 88078423 sb zero,-1912(a5) # 801cc60c <_ZL11flash_state> + 80032d8c: 0019a797 auipc a5,0x19a + 80032d90: 86078e23 sb zero,-1924(a5) # 801cc608 <_ZL10flash_mode> + 80032d94: 05813483 ld s1,88(sp) + 80032d98: 07010113 addi sp,sp,112 + 80032d9c: 00008067 ret + 80032da0: 000097b7 lui a5,0x9 + 80032da4: 55578793 addi a5,a5,1365 # 9555 <_entry_offset+0x9555> + 80032da8: f2f61ee3 bne a2,a5,80032ce4 <_ZL13UNROM512LSyncv+0xb4> + 80032dac: 0a000793 li a5,160 + 80032db0: 12f68263 beq a3,a5,80032ed4 <_ZL13UNROM512LSyncv+0x2a4> + 80032db4: 09000793 li a5,144 + 80032db8: f2f696e3 bne a3,a5,80032ce4 <_ZL13UNROM512LSyncv+0xb4> + 80032dbc: 0019a797 auipc a5,0x19a + 80032dc0: 84b7c783 lbu a5,-1973(a5) # 801cc607 <_ZL10flash_bank> + 80032dc4: 00100713 li a4,1 + 80032dc8: f2e796e3 bne a5,a4,80032cf4 <_ZL13UNROM512LSyncv+0xc4> + 80032dcc: 0019a717 auipc a4,0x19a + 80032dd0: 84070023 sb zero,-1984(a4) # 801cc60c <_ZL11flash_state> + 80032dd4: 0019a717 auipc a4,0x19a + 80032dd8: 82f70ca3 sb a5,-1991(a4) # 801cc60d <_ZL11software_id> + 80032ddc: f41ff06f j 80032d1c <_ZL13UNROM512LSyncv+0xec> + 80032de0: 0019a497 auipc s1,0x19a + 80032de4: 84848493 addi s1,s1,-1976 # 801cc628 <_ZL6latcha> + 80032de8: 0004d603 lhu a2,0(s1) + 80032dec: 0019a797 auipc a5,0x19a + 80032df0: 81b7c783 lbu a5,-2021(a5) # 801cc607 <_ZL10flash_bank> + 80032df4: 0027979b slliw a5,a5,0x2 + 80032df8: 00c6571b srliw a4,a2,0xc + 80032dfc: 00377713 andi a4,a4,3 + 80032e00: 00e787bb addw a5,a5,a4 + 80032e04: 02079793 slli a5,a5,0x20 + 80032e08: 0019a717 auipc a4,0x19a + 80032e0c: 80873703 ld a4,-2040(a4) # 801cc610 <_ZL17flash_write_count> + 80032e10: 01e7d793 srli a5,a5,0x1e + 80032e14: 00f707b3 add a5,a4,a5 + 80032e18: 0007a683 lw a3,0(a5) + 80032e1c: 00b65713 srli a4,a2,0xb + 80032e20: 00096417 auipc s0,0x96 + 80032e24: dc040413 addi s0,s0,-576 # 800c8be0 <_ZL9FlashPage> + 80032e28: 14068463 beqz a3,80032f70 <_ZL13UNROM512LSyncv+0x340> + 80032e2c: 00371713 slli a4,a4,0x3 + 80032e30: 00e40733 add a4,s0,a4 + 80032e34: 00073503 ld a0,0(a4) + 80032e38: 00199717 auipc a4,0x199 + 80032e3c: 7f274703 lbu a4,2034(a4) # 801cc62a <_ZL6latche> + 80032e40: 00c50633 add a2,a0,a2 + 80032e44: 00064783 lbu a5,0(a2) + 80032e48: 00e7f7b3 and a5,a5,a4 + 80032e4c: 00f60023 sb a5,0(a2) + 80032e50: f2dff06f j 80032d7c <_ZL13UNROM512LSyncv+0x14c> + 80032e54: 00199717 auipc a4,0x199 + 80032e58: 7d475703 lhu a4,2004(a4) # 801cc628 <_ZL6latcha> + 80032e5c: 00199797 auipc a5,0x199 + 80032e60: 7ab7c783 lbu a5,1963(a5) # 801cc607 <_ZL10flash_bank> + 80032e64: 00c7569b srliw a3,a4,0xc + 80032e68: 0036f693 andi a3,a3,3 + 80032e6c: 0027979b slliw a5,a5,0x2 + 80032e70: 00d787bb addw a5,a5,a3 + 80032e74: 02079793 slli a5,a5,0x20 + 80032e78: 00199697 auipc a3,0x199 + 80032e7c: 7986b683 ld a3,1944(a3) # 801cc610 <_ZL17flash_write_count> + 80032e80: 01e7d793 srli a5,a5,0x1e + 80032e84: 00f687b3 add a5,a3,a5 + 80032e88: 0007a683 lw a3,0(a5) + 80032e8c: 0016861b addiw a2,a3,1 + 80032e90: 02060e63 beqz a2,80032ecc <_ZL13UNROM512LSyncv+0x29c> + 80032e94: 00c7a023 sw a2,0(a5) + 80032e98: 00875793 srli a5,a4,0x8 + 80032e9c: 0f07f693 andi a3,a5,240 + 80032ea0: 00096797 auipc a5,0x96 + 80032ea4: d4078793 addi a5,a5,-704 # 800c8be0 <_ZL9FlashPage> + 80032ea8: 00d787b3 add a5,a5,a3 + 80032eac: 0007b503 ld a0,0(a5) + 80032eb0: fffff7b7 lui a5,0xfffff + 80032eb4: 00f77733 and a4,a4,a5 + 80032eb8: 00001637 lui a2,0x1 + 80032ebc: 0ff00593 li a1,255 + 80032ec0: 00e50533 add a0,a0,a4 + 80032ec4: 365080ef jal ra,8003ba28 + 80032ec8: eb5ff06f j 80032d7c <_ZL13UNROM512LSyncv+0x14c> + 80032ecc: 00a7a023 sw a0,0(a5) # fffffffffffff000 <_end+0xffffffff7fe2a000> + 80032ed0: fc9ff06f j 80032e98 <_ZL13UNROM512LSyncv+0x268> + 80032ed4: 00199697 auipc a3,0x199 + 80032ed8: 7336c683 lbu a3,1843(a3) # 801cc607 <_ZL10flash_bank> + 80032edc: 00100793 li a5,1 + 80032ee0: e0f69ae3 bne a3,a5,80032cf4 <_ZL13UNROM512LSyncv+0xc4> + 80032ee4: 00300793 li a5,3 + 80032ee8: 00f58023 sb a5,0(a1) + 80032eec: 00e88023 sb a4,0(a7) + 80032ef0: e2dff06f j 80032d1c <_ZL13UNROM512LSyncv+0xec> + 80032ef4: 00199597 auipc a1,0x199 + 80032ef8: d6c58593 addi a1,a1,-660 # 801cbc60 + 80032efc: 0005a603 lw a2,0(a1) + 80032f00: 0026179b slliw a5,a2,0x2 + 80032f04: 04078663 beqz a5,80032f50 <_ZL13UNROM512LSyncv+0x320> + 80032f08: 00199517 auipc a0,0x199 + 80032f0c: 70853503 ld a0,1800(a0) # 801cc610 <_ZL17flash_write_count> + 80032f10: 00000693 li a3,0 + 80032f14: 00100813 li a6,1 + 80032f18: 0180006f j 80032f30 <_ZL13UNROM512LSyncv+0x300> + 80032f1c: 00c7a023 sw a2,0(a5) + 80032f20: 0005a603 lw a2,0(a1) + 80032f24: 0016869b addiw a3,a3,1 + 80032f28: 0026179b slliw a5,a2,0x2 + 80032f2c: 02f6f263 bgeu a3,a5,80032f50 <_ZL13UNROM512LSyncv+0x320> + 80032f30: 3ff6f793 andi a5,a3,1023 + 80032f34: 00279793 slli a5,a5,0x2 + 80032f38: 00f507b3 add a5,a0,a5 + 80032f3c: 0007a703 lw a4,0(a5) + 80032f40: 0017061b addiw a2,a4,1 + 80032f44: fc061ce3 bnez a2,80032f1c <_ZL13UNROM512LSyncv+0x2ec> + 80032f48: 0107a023 sw a6,0(a5) + 80032f4c: fd5ff06f j 80032f20 <_ZL13UNROM512LSyncv+0x2f0> + 80032f50: 00e6161b slliw a2,a2,0xe + 80032f54: 02061613 slli a2,a2,0x20 + 80032f58: 02065613 srli a2,a2,0x20 + 80032f5c: 0ff00593 li a1,255 + 80032f60: 00199517 auipc a0,0x199 + 80032f64: 6d053503 ld a0,1744(a0) # 801cc630 <_ZL9flashdata> + 80032f68: 2c1080ef jal ra,8003ba28 + 80032f6c: e11ff06f j 80032d7c <_ZL13UNROM512LSyncv+0x14c> + 80032f70: 01e77693 andi a3,a4,30 + 80032f74: 00369693 slli a3,a3,0x3 + 80032f78: 00090717 auipc a4,0x90 + 80032f7c: cc870713 addi a4,a4,-824 # 800c2c40 + 80032f80: 00d70733 add a4,a4,a3 + 80032f84: 00d406b3 add a3,s0,a3 + 80032f88: 00073583 ld a1,0(a4) + 80032f8c: 0006b703 ld a4,0(a3) + 80032f90: fffff537 lui a0,0xfffff + 80032f94: 00a67533 and a0,a2,a0 + 80032f98: 00a585b3 add a1,a1,a0 + 80032f9c: 00001637 lui a2,0x1 + 80032fa0: 00a70533 add a0,a4,a0 + 80032fa4: 0107a023 sw a6,0(a5) + 80032fa8: 3ad080ef jal ra,8003bb54 + 80032fac: 0004d603 lhu a2,0(s1) + 80032fb0: 00b65713 srli a4,a2,0xb + 80032fb4: e79ff06f j 80032e2c <_ZL13UNROM512LSyncv+0x1fc> + +0000000080032fb8 <_ZL18UNROM512LatchPowerv>: + 80032fb8: ff010113 addi sp,sp,-16 + 80032fbc: 00199797 auipc a5,0x199 + 80032fc0: 64e7c783 lbu a5,1614(a5) # 801cc60a <_ZL10latcheinit> + 80032fc4: 00113423 sd ra,8(sp) + 80032fc8: 00813023 sd s0,0(sp) + 80032fcc: 00199717 auipc a4,0x199 + 80032fd0: 64f70f23 sb a5,1630(a4) # 801cc62a <_ZL6latche> + 80032fd4: 00199797 auipc a5,0x199 + 80032fd8: 6447b783 ld a5,1604(a5) # 801cc618 <_ZL6WHSync> + 80032fdc: 000780e7 jalr a5 + 80032fe0: 00010437 lui s0,0x10 + 80032fe4: 00000617 auipc a2,0x0 + 80032fe8: 07860613 addi a2,a2,120 # 8003305c <_ZL17UNROM512LatchReadj> + 80032fec: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80032ff0: 00008537 lui a0,0x8 + 80032ff4: 229000ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80032ff8: 00199797 auipc a5,0x199 + 80032ffc: 6117c783 lbu a5,1553(a5) # 801cc609 <_ZL10flash_save> + 80033000: 02079263 bnez a5,80033024 <_ZL18UNROM512LatchPowerv+0x6c> + 80033004: fff40593 addi a1,s0,-1 + 80033008: 00013403 ld s0,0(sp) + 8003300c: 00813083 ld ra,8(sp) + 80033010: 00000617 auipc a2,0x0 + 80033014: bc060613 addi a2,a2,-1088 # 80032bd0 <_ZL19UNROM512HLatchWritejh> + 80033018: 00008537 lui a0,0x8 + 8003301c: 01010113 addi sp,sp,16 + 80033020: 3090006f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80033024: 0000c5b7 lui a1,0xc + 80033028: 00000617 auipc a2,0x0 + 8003302c: b4860613 addi a2,a2,-1208 # 80032b70 <_ZL19UNROM512LLatchWritejh> + 80033030: fff58593 addi a1,a1,-1 # bfff <_entry_offset+0xbfff> + 80033034: 00008537 lui a0,0x8 + 80033038: 2f1000ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8003303c: fff40593 addi a1,s0,-1 + 80033040: 00013403 ld s0,0(sp) + 80033044: 00813083 ld ra,8(sp) + 80033048: 00000617 auipc a2,0x0 + 8003304c: b8860613 addi a2,a2,-1144 # 80032bd0 <_ZL19UNROM512HLatchWritejh> + 80033050: 0000c537 lui a0,0xc + 80033054: 01010113 addi sp,sp,16 + 80033058: 2d10006f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +000000008003305c <_ZL17UNROM512LatchReadj>: + 8003305c: ffffb7b7 lui a5,0xffffb + 80033060: ff010113 addi sp,sp,-16 + 80033064: 6b57879b addiw a5,a5,1717 + 80033068: 00f11423 sh a5,8(sp) + 8003306c: fb700793 li a5,-73 + 80033070: 00f10523 sb a5,10(sp) + 80033074: 00199797 auipc a5,0x199 + 80033078: 5997c783 lbu a5,1433(a5) # 801cc60d <_ZL11software_id> + 8003307c: 02078863 beqz a5,800330ac <_ZL17UNROM512LatchReadj+0x50> + 80033080: 00157793 andi a5,a0,1 + 80033084: 0bf00513 li a0,191 + 80033088: 00078e63 beqz a5,800330a4 <_ZL17UNROM512LatchReadj+0x48> + 8003308c: 00199797 auipc a5,0x199 + 80033090: bd47a783 lw a5,-1068(a5) # 801cbc60 + 80033094: 0047d79b srliw a5,a5,0x4 + 80033098: 01010713 addi a4,sp,16 + 8003309c: 00f707b3 add a5,a4,a5 + 800330a0: ff87c503 lbu a0,-8(a5) + 800330a4: 01010113 addi sp,sp,16 + 800330a8: 00008067 ret + 800330ac: 02051593 slli a1,a0,0x20 + 800330b0: 00199717 auipc a4,0x199 + 800330b4: 55974703 lbu a4,1369(a4) # 801cc609 <_ZL10flash_save> + 800330b8: 00b5579b srliw a5,a0,0xb + 800330bc: 0205d593 srli a1,a1,0x20 + 800330c0: 04070063 beqz a4,80033100 <_ZL17UNROM512LatchReadj+0xa4> + 800330c4: 00c5571b srliw a4,a0,0xc + 800330c8: 0000c6b7 lui a3,0xc + 800330cc: 00199617 auipc a2,0x199 + 800330d0: 54463603 ld a2,1348(a2) # 801cc610 <_ZL17flash_write_count> + 800330d4: 00377813 andi a6,a4,3 + 800330d8: 04d57863 bgeu a0,a3,80033128 <_ZL17UNROM512LatchReadj+0xcc> + 800330dc: 00199697 auipc a3,0x199 + 800330e0: 52b6c683 lbu a3,1323(a3) # 801cc607 <_ZL10flash_bank> + 800330e4: 0026969b slliw a3,a3,0x2 + 800330e8: 010686bb addw a3,a3,a6 + 800330ec: 02069693 slli a3,a3,0x20 + 800330f0: 01e6d693 srli a3,a3,0x1e + 800330f4: 00d606b3 add a3,a2,a3 + 800330f8: 0006a703 lw a4,0(a3) + 800330fc: 04071c63 bnez a4,80033154 <_ZL17UNROM512LatchReadj+0xf8> + 80033100: 02079793 slli a5,a5,0x20 + 80033104: 01d7d793 srli a5,a5,0x1d + 80033108: 00090717 auipc a4,0x90 + 8003310c: b3870713 addi a4,a4,-1224 # 800c2c40 + 80033110: 00f707b3 add a5,a4,a5 + 80033114: 0007b783 ld a5,0(a5) + 80033118: 00b787b3 add a5,a5,a1 + 8003311c: 0007c503 lbu a0,0(a5) + 80033120: 01010113 addi sp,sp,16 + 80033124: 00008067 ret + 80033128: 00199717 auipc a4,0x199 + 8003312c: b3872703 lw a4,-1224(a4) # 801cbc60 + 80033130: fff7071b addiw a4,a4,-1 + 80033134: 0ff77713 andi a4,a4,255 + 80033138: 0027171b slliw a4,a4,0x2 + 8003313c: 0107073b addw a4,a4,a6 + 80033140: 02071713 slli a4,a4,0x20 + 80033144: 01e75713 srli a4,a4,0x1e + 80033148: 00e60733 add a4,a2,a4 + 8003314c: 00072703 lw a4,0(a4) + 80033150: fa0708e3 beqz a4,80033100 <_ZL17UNROM512LatchReadj+0xa4> + 80033154: 02079793 slli a5,a5,0x20 + 80033158: 01d7d793 srli a5,a5,0x1d + 8003315c: 00096717 auipc a4,0x96 + 80033160: a8470713 addi a4,a4,-1404 # 800c8be0 <_ZL9FlashPage> + 80033164: 00f707b3 add a5,a4,a5 + 80033168: 0007b783 ld a5,0(a5) + 8003316c: 00b787b3 add a5,a5,a1 + 80033170: 0007c503 lbu a0,0(a5) + 80033174: f31ff06f j 800330a4 <_ZL17UNROM512LatchReadj+0x48> + +0000000080033178 <_Z9setfprg16jj>: + 80033178: 00090717 auipc a4,0x90 + 8003317c: a4872703 lw a4,-1464(a4) # 800c2bc0 + 80033180: 000047b7 lui a5,0x4 + 80033184: 00199817 auipc a6,0x199 + 80033188: 4ac83803 ld a6,1196(a6) # 801cc630 <_ZL9flashdata> + 8003318c: 06f76263 bltu a4,a5,800331f0 <_Z9setfprg16jj+0x78> + 80033190: 00b5571b srliw a4,a0,0xb + 80033194: 00b5589b srliw a7,a0,0xb + 80033198: 0c080c63 beqz a6,80033270 <_Z9setfprg16jj+0xf8> + 8003319c: 0008f797 auipc a5,0x8f + 800331a0: 6847a783 lw a5,1668(a5) # 800c2820 + 800331a4: 00f5f7b3 and a5,a1,a5 + 800331a8: 00e7979b slliw a5,a5,0xe + 800331ac: 02079793 slli a5,a5,0x20 + 800331b0: 02051513 slli a0,a0,0x20 + 800331b4: 0207d793 srli a5,a5,0x20 + 800331b8: 02055513 srli a0,a0,0x20 + 800331bc: 40a787b3 sub a5,a5,a0 + 800331c0: 00f807b3 add a5,a6,a5 + 800331c4: 0077071b addiw a4,a4,7 + 800331c8: 00096597 auipc a1,0x96 + 800331cc: a1858593 addi a1,a1,-1512 # 800c8be0 <_ZL9FlashPage> + 800331d0: 02071693 slli a3,a4,0x20 + 800331d4: 01d6d693 srli a3,a3,0x1d + 800331d8: 00d586b3 add a3,a1,a3 + 800331dc: 0007061b sext.w a2,a4 + 800331e0: 00f6b023 sd a5,0(a3) + 800331e4: fff7071b addiw a4,a4,-1 + 800331e8: ff1614e3 bne a2,a7,800331d0 <_Z9setfprg16jj+0x58> + 800331ec: 00008067 ret + 800331f0: 00004337 lui t1,0x4 + 800331f4: 000018b7 lui a7,0x1 + 800331f8: 0035969b slliw a3,a1,0x3 + 800331fc: 0008fe17 auipc t3,0x8f + 80033200: 6a4e2e03 lw t3,1700(t3) # 800c28a0 + 80033204: 00a3033b addw t1,t1,a0 + 80033208: 00096597 auipc a1,0x96 + 8003320c: 9d858593 addi a1,a1,-1576 # 800c8be0 <_ZL9FlashPage> + 80033210: 8008889b addiw a7,a7,-2048 + 80033214: 0140006f j 80033228 <_Z9setfprg16jj+0xb0> + 80033218: 00f73023 sd a5,0(a4) + 8003321c: 00a8853b addw a0,a7,a0 + 80033220: 0016869b addiw a3,a3,1 + 80033224: 04a30463 beq t1,a0,8003326c <_Z9setfprg16jj+0xf4> + 80033228: 01c6f733 and a4,a3,t3 + 8003322c: 00b7171b slliw a4,a4,0xb + 80033230: 02051793 slli a5,a0,0x20 + 80033234: 02071713 slli a4,a4,0x20 + 80033238: 02075713 srli a4,a4,0x20 + 8003323c: 0207d793 srli a5,a5,0x20 + 80033240: 00b5561b srliw a2,a0,0xb + 80033244: 40f707b3 sub a5,a4,a5 + 80033248: 02061713 slli a4,a2,0x20 + 8003324c: 01d75713 srli a4,a4,0x1d + 80033250: 00f807b3 add a5,a6,a5 + 80033254: 00e58733 add a4,a1,a4 + 80033258: fc0810e3 bnez a6,80033218 <_Z9setfprg16jj+0xa0> + 8003325c: 00073023 sd zero,0(a4) + 80033260: 00a8853b addw a0,a7,a0 + 80033264: 0016869b addiw a3,a3,1 + 80033268: fca310e3 bne t1,a0,80033228 <_Z9setfprg16jj+0xb0> + 8003326c: 00008067 ret + 80033270: 0077079b addiw a5,a4,7 + 80033274: 00096597 auipc a1,0x96 + 80033278: 96c58593 addi a1,a1,-1684 # 800c8be0 <_ZL9FlashPage> + 8003327c: 02079713 slli a4,a5,0x20 + 80033280: 01d75713 srli a4,a4,0x1d + 80033284: 00e58733 add a4,a1,a4 + 80033288: 0007869b sext.w a3,a5 + 8003328c: 00073023 sd zero,0(a4) + 80033290: fff7879b addiw a5,a5,-1 + 80033294: ff1694e3 bne a3,a7,8003327c <_Z9setfprg16jj+0x104> + 80033298: 00008067 ret + +000000008003329c <_ZL13UNROM512HSyncv>: + 8003329c: fe010113 addi sp,sp,-32 + 800332a0: 00813823 sd s0,16(sp) + 800332a4: 00199417 auipc s0,0x199 + 800332a8: 38640413 addi s0,s0,902 # 801cc62a <_ZL6latche> + 800332ac: 00044783 lbu a5,0(s0) + 800332b0: 00199597 auipc a1,0x199 + 800332b4: 9b05a583 lw a1,-1616(a1) # 801cbc60 + 800332b8: fff5859b addiw a1,a1,-1 + 800332bc: 00913423 sd s1,8(sp) + 800332c0: 00f5f5b3 and a1,a1,a5 + 800332c4: 00199497 auipc s1,0x199 + 800332c8: 34348493 addi s1,s1,835 # 801cc607 <_ZL10flash_bank> + 800332cc: 00008537 lui a0,0x8 + 800332d0: 00113c23 sd ra,24(sp) + 800332d4: 00b48023 sb a1,0(s1) + 800332d8: 981dd0ef jal ra,80010c58 <_Z8setprg16jj> + 800332dc: fff00593 li a1,-1 + 800332e0: 0000c537 lui a0,0xc + 800332e4: 975dd0ef jal ra,80010c58 <_Z8setprg16jj> + 800332e8: 0004c583 lbu a1,0(s1) + 800332ec: 00008537 lui a0,0x8 + 800332f0: e89ff0ef jal ra,80033178 <_Z9setfprg16jj> + 800332f4: fff00593 li a1,-1 + 800332f8: 0000c537 lui a0,0xc + 800332fc: e7dff0ef jal ra,80033178 <_Z9setfprg16jj> + 80033300: 00044583 lbu a1,0(s0) + 80033304: 00199797 auipc a5,0x199 + 80033308: 3077c783 lbu a5,775(a5) # 801cc60b <_ZL11chrram_mask> + 8003330c: 00000513 li a0,0 + 80033310: 00f5f5b3 and a1,a1,a5 + 80033314: 0055d593 srli a1,a1,0x5 + 80033318: b6ddd0ef jal ra,80010e84 <_Z8setchr8rij> + 8003331c: 00044503 lbu a0,0(s0) + 80033320: 01013403 ld s0,16(sp) + 80033324: 01813083 ld ra,24(sp) + 80033328: 00813483 ld s1,8(sp) + 8003332c: 4075551b sraiw a0,a0,0x7 + 80033330: 0025051b addiw a0,a0,2 + 80033334: 02010113 addi sp,sp,32 + 80033338: d11dd06f j 80011048 <_Z9setmirrori> + +000000008003333c <_Z13UNROM512_InitP8CartInfo>: + 8003333c: 04c52783 lw a5,76(a0) # c04c <_entry_offset+0xc04c> + 80033340: fe010113 addi sp,sp,-32 + 80033344: 06052603 lw a2,96(a0) + 80033348: 00813823 sd s0,16(sp) + 8003334c: 00913423 sd s1,8(sp) + 80033350: 00113c23 sd ra,24(sp) + 80033354: 01213023 sd s2,0(sp) + 80033358: 00199497 auipc s1,0x199 + 8003335c: 2b148493 addi s1,s1,689 # 801cc609 <_ZL10flash_save> + 80033360: 00f48023 sb a5,0(s1) + 80033364: 00199717 auipc a4,0x199 + 80033368: 2a070423 sb zero,680(a4) # 801cc60c <_ZL11flash_state> + 8003336c: 00199717 auipc a4,0x199 + 80033370: 28070da3 sb zero,667(a4) # 801cc607 <_ZL10flash_bank> + 80033374: 000027b7 lui a5,0x2 + 80033378: 00050413 mv s0,a0 + 8003337c: 14f60663 beq a2,a5,800334c8 <_Z13UNROM512_InitP8CartInfo+0x18c> + 80033380: 000047b7 lui a5,0x4 + 80033384: 10f60263 beq a2,a5,80033488 <_Z13UNROM512_InitP8CartInfo+0x14c> + 80033388: 06000793 li a5,96 + 8003338c: 00199717 auipc a4,0x199 + 80033390: 26f70fa3 sb a5,639(a4) # 801cc60b <_ZL11chrram_mask> + 80033394: 0008f717 auipc a4,0x8f + 80033398: 06274703 lbu a4,98(a4) # 800c23f6 + 8003339c: 4027579b sraiw a5,a4,0x2 + 800333a0: 0027f693 andi a3,a5,2 + 800333a4: 00177793 andi a5,a4,1 + 800333a8: 00d7e7b3 or a5,a5,a3 + 800333ac: 00200713 li a4,2 + 800333b0: 10e78263 beq a5,a4,800334b4 <_Z13UNROM512_InitP8CartInfo+0x178> + 800333b4: 00300713 li a4,3 + 800333b8: 20e78e63 beq a5,a4,800335d4 <_Z13UNROM512_InitP8CartInfo+0x298> + 800333bc: 00100713 li a4,1 + 800333c0: 00000613 li a2,0 + 800333c4: 00100593 li a1,1 + 800333c8: 20e78063 beq a5,a4,800335c8 <_Z13UNROM512_InitP8CartInfo+0x28c> + 800333cc: 00000513 li a0,0 + 800333d0: cbddd0ef jal ra,8001108c <_Z18SetupCartMirroringiiPh> + 800333d4: 04c42783 lw a5,76(s0) + 800333d8: 0004c703 lbu a4,0(s1) + 800333dc: 0017b793 seqz a5,a5 + 800333e0: 00199697 auipc a3,0x199 + 800333e4: 22f68723 sb a5,558(a3) # 801cc60e <_ZL12bus_conflict> + 800333e8: 00000797 auipc a5,0x0 + 800333ec: bd078793 addi a5,a5,-1072 # 80032fb8 <_ZL18UNROM512LatchPowerv> + 800333f0: 00f43023 sd a5,0(s0) + 800333f4: 00199797 auipc a5,0x199 + 800333f8: 20078b23 sb zero,534(a5) # 801cc60a <_ZL10latcheinit> + 800333fc: 00000797 auipc a5,0x0 + 80033400: 83478793 addi a5,a5,-1996 # 80032c30 <_ZL13UNROM512LSyncv> + 80033404: 00199697 auipc a3,0x199 + 80033408: 20f6be23 sd a5,540(a3) # 801cc620 <_ZL6WLSync> + 8003340c: 00000797 auipc a5,0x0 + 80033410: e9078793 addi a5,a5,-368 # 8003329c <_ZL13UNROM512HSyncv> + 80033414: 00199697 auipc a3,0x199 + 80033418: 20f6b223 sd a5,516(a3) # 801cc618 <_ZL6WHSync> + 8003341c: fffff797 auipc a5,0xfffff + 80033420: 77078793 addi a5,a5,1904 # 80032b8c <_ZL18UNROM512LatchClosev> + 80033424: 00f43823 sd a5,16(s0) + 80033428: fffff797 auipc a5,0xfffff + 8003342c: 73c78793 addi a5,a5,1852 # 80032b64 <_ZL12StateRestorei> + 80033430: 00199697 auipc a3,0x199 + 80033434: 22f6b423 sd a5,552(a3) # 801cc658 + 80033438: 08071e63 bnez a4,800334d4 <_Z13UNROM512_InitP8CartInfo+0x198> + 8003343c: 00012697 auipc a3,0x12 + 80033440: f2c68693 addi a3,a3,-212 # 80045368 <_ZZL8SetInputvE3moo+0x518> + 80033444: 00000613 li a2,0 + 80033448: 00100593 li a1,1 + 8003344c: 00199517 auipc a0,0x199 + 80033450: 1de50513 addi a0,a0,478 # 801cc62a <_ZL6latche> + 80033454: bbdcc0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80033458: 01013403 ld s0,16(sp) + 8003345c: 01813083 ld ra,24(sp) + 80033460: 00813483 ld s1,8(sp) + 80033464: 00013903 ld s2,0(sp) + 80033468: 00013697 auipc a3,0x13 + 8003346c: 11068693 addi a3,a3,272 # 80046578 + 80033470: 00000613 li a2,0 + 80033474: 00100593 li a1,1 + 80033478: 00199517 auipc a0,0x199 + 8003347c: 19650513 addi a0,a0,406 # 801cc60e <_ZL12bus_conflict> + 80033480: 02010113 addi sp,sp,32 + 80033484: b8dcc06f j 80000010 <_Z10AddExStatePvjiPKc> + 80033488: 02000793 li a5,32 + 8003348c: 00199717 auipc a4,0x199 + 80033490: 16f70fa3 sb a5,383(a4) # 801cc60b <_ZL11chrram_mask> + 80033494: 0008f717 auipc a4,0x8f + 80033498: f6274703 lbu a4,-158(a4) # 800c23f6 + 8003349c: 4027579b sraiw a5,a4,0x2 + 800334a0: 0027f693 andi a3,a5,2 + 800334a4: 00177793 andi a5,a4,1 + 800334a8: 00d7e7b3 or a5,a5,a3 + 800334ac: 00200713 li a4,2 + 800334b0: f0e792e3 bne a5,a4,800333b4 <_Z13UNROM512_InitP8CartInfo+0x78> + 800334b4: 00000613 li a2,0 + 800334b8: 00000593 li a1,0 + 800334bc: 00200513 li a0,2 + 800334c0: bcddd0ef jal ra,8001108c <_Z18SetupCartMirroringiiPh> + 800334c4: f11ff06f j 800333d4 <_Z13UNROM512_InitP8CartInfo+0x98> + 800334c8: 00199797 auipc a5,0x199 + 800334cc: 140781a3 sb zero,323(a5) # 801cc60b <_ZL11chrram_mask> + 800334d0: ec5ff06f j 80033394 <_Z13UNROM512_InitP8CartInfo+0x58> + 800334d4: 00198497 auipc s1,0x198 + 800334d8: 78c48493 addi s1,s1,1932 # 801cbc60 + 800334dc: 0004a503 lw a0,0(s1) + 800334e0: 00199917 auipc s2,0x199 + 800334e4: 15090913 addi s2,s2,336 # 801cc630 <_ZL9flashdata> + 800334e8: 00e5151b slliw a0,a0,0xe + 800334ec: f81de0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 800334f0: 0004a783 lw a5,0(s1) + 800334f4: 00a93023 sd a0,0(s2) + 800334f8: 0047951b slliw a0,a5,0x4 + 800334fc: f71de0ef jal ra,8001246c <_Z12FCEU_gmallocj> + 80033500: 0004a703 lw a4,0(s1) + 80033504: 00093883 ld a7,0(s2) + 80033508: 00a43c23 sd a0,24(s0) + 8003350c: 0047159b slliw a1,a4,0x4 + 80033510: 00e7171b slliw a4,a4,0xe + 80033514: 02e42e23 sw a4,60(s0) + 80033518: 03143023 sd a7,32(s0) + 8003351c: 02b42c23 sw a1,56(s0) + 80033520: 00013697 auipc a3,0x13 + 80033524: ff868693 addi a3,a3,-8 # 80046518 + 80033528: 00000613 li a2,0 + 8003352c: 00199717 auipc a4,0x199 + 80033530: 0ea73223 sd a0,228(a4) # 801cc610 <_ZL17flash_write_count> + 80033534: addcc0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80033538: 0004a583 lw a1,0(s1) + 8003353c: 00093503 ld a0,0(s2) + 80033540: 00013697 auipc a3,0x13 + 80033544: ff068693 addi a3,a3,-16 # 80046530 + 80033548: 00000613 li a2,0 + 8003354c: 00e5959b slliw a1,a1,0xe + 80033550: ac1cc0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80033554: 00013697 auipc a3,0x13 + 80033558: fec68693 addi a3,a3,-20 # 80046540 + 8003355c: 00000613 li a2,0 + 80033560: 00100593 li a1,1 + 80033564: 00199517 auipc a0,0x199 + 80033568: 0a850513 addi a0,a0,168 # 801cc60c <_ZL11flash_state> + 8003356c: aa5cc0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 80033570: 00013697 auipc a3,0x13 + 80033574: fe068693 addi a3,a3,-32 # 80046550 + 80033578: 00000613 li a2,0 + 8003357c: 00100593 li a1,1 + 80033580: 00199517 auipc a0,0x199 + 80033584: 08850513 addi a0,a0,136 # 801cc608 <_ZL10flash_mode> + 80033588: a89cc0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 8003358c: 00013697 auipc a3,0x13 + 80033590: fd468693 addi a3,a3,-44 # 80046560 + 80033594: 00000613 li a2,0 + 80033598: 00100593 li a1,1 + 8003359c: 00199517 auipc a0,0x199 + 800335a0: 06b50513 addi a0,a0,107 # 801cc607 <_ZL10flash_bank> + 800335a4: a6dcc0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800335a8: 00013697 auipc a3,0x13 + 800335ac: fc868693 addi a3,a3,-56 # 80046570 + 800335b0: 00000613 li a2,0 + 800335b4: 00200593 li a1,2 + 800335b8: 00199517 auipc a0,0x199 + 800335bc: 07050513 addi a0,a0,112 # 801cc628 <_ZL6latcha> + 800335c0: a51cc0ef jal ra,80000010 <_Z10AddExStatePvjiPKc> + 800335c4: e79ff06f j 8003343c <_Z13UNROM512_InitP8CartInfo+0x100> + 800335c8: 00100513 li a0,1 + 800335cc: ac1dd0ef jal ra,8001108c <_Z18SetupCartMirroringiiPh> + 800335d0: e05ff06f j 800333d4 <_Z13UNROM512_InitP8CartInfo+0x98> + 800335d4: ffffe7b7 lui a5,0xffffe + 800335d8: 00f60633 add a2,a2,a5 + 800335dc: 00198797 auipc a5,0x198 + 800335e0: 68c7b783 ld a5,1676(a5) # 801cbc68 + 800335e4: 00c78633 add a2,a5,a2 + 800335e8: 00100593 li a1,1 + 800335ec: 00400513 li a0,4 + 800335f0: a9ddd0ef jal ra,8001108c <_Z18SetupCartMirroringiiPh> + 800335f4: de1ff06f j 800333d4 <_Z13UNROM512_InitP8CartInfo+0x98> + +00000000800335f8 <_ZL4Syncv>: + 800335f8: ff010113 addi sp,sp,-16 + 800335fc: 00199597 auipc a1,0x199 + 80033600: 03d5c583 lbu a1,61(a1) # 801cc639 <_ZL4preg> + 80033604: 00008537 lui a0,0x8 + 80033608: 00113423 sd ra,8(sp) + 8003360c: e4cdd0ef jal ra,80010c58 <_Z8setprg16jj> + 80033610: 0000c537 lui a0,0xc + 80033614: fff00593 li a1,-1 + 80033618: e40dd0ef jal ra,80010c58 <_Z8setprg16jj> + 8003361c: 00813083 ld ra,8(sp) + 80033620: 00199517 auipc a0,0x199 + 80033624: 01854503 lbu a0,24(a0) # 801cc638 <_ZL4creg> + 80033628: 01010113 addi sp,sp,16 + 8003362c: 8d9dd06f j 80010f04 <_Z7setchr8j> + +0000000080033630 <_ZL12StateRestorei>: + 80033630: fc9ff06f j 800335f8 <_ZL4Syncv> + +0000000080033634 <_ZL8M72Writejh>: + 80033634: 0185979b slliw a5,a1,0x18 + 80033638: 4187d79b sraiw a5,a5,0x18 + 8003363c: 0007d863 bgez a5,8003364c <_ZL8M72Writejh+0x18> + 80033640: 00f5f793 andi a5,a1,15 + 80033644: 00199717 auipc a4,0x199 + 80033648: fef70aa3 sb a5,-11(a4) # 801cc639 <_ZL4preg> + 8003364c: 0405f793 andi a5,a1,64 + 80033650: 00078863 beqz a5,80033660 <_ZL8M72Writejh+0x2c> + 80033654: 00f5f593 andi a1,a1,15 + 80033658: 00199797 auipc a5,0x199 + 8003365c: feb78023 sb a1,-32(a5) # 801cc638 <_ZL4creg> + 80033660: f99ff06f j 800335f8 <_ZL4Syncv> + +0000000080033664 <_ZL8M72Powerv>: + 80033664: ff010113 addi sp,sp,-16 + 80033668: 00113423 sd ra,8(sp) + 8003366c: 00813023 sd s0,0(sp) + 80033670: f89ff0ef jal ra,800335f8 <_ZL4Syncv> + 80033674: 00010437 lui s0,0x10 + 80033678: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 8003367c: fffdd617 auipc a2,0xfffdd + 80033680: fe460613 addi a2,a2,-28 # 80010660 <_Z6CartBRj> + 80033684: 00008537 lui a0,0x8 + 80033688: 394000ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 8003368c: fff40593 addi a1,s0,-1 + 80033690: 00013403 ld s0,0(sp) + 80033694: 00813083 ld ra,8(sp) + 80033698: 00000617 auipc a2,0x0 + 8003369c: f9c60613 addi a2,a2,-100 # 80033634 <_ZL8M72Writejh> + 800336a0: 00006537 lui a0,0x6 + 800336a4: 01010113 addi sp,sp,16 + 800336a8: 4800006f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +00000000800336ac <_Z13Mapper72_InitP8CartInfo>: + 800336ac: 00000797 auipc a5,0x0 + 800336b0: fb878793 addi a5,a5,-72 # 80033664 <_ZL8M72Powerv> + 800336b4: 00f53023 sd a5,0(a0) # 6000 <_entry_offset+0x6000> + 800336b8: 00000797 auipc a5,0x0 + 800336bc: f7878793 addi a5,a5,-136 # 80033630 <_ZL12StateRestorei> + 800336c0: 00000693 li a3,0 + 800336c4: 00000613 li a2,0 + 800336c8: fff00593 li a1,-1 + 800336cc: 00019517 auipc a0,0x19 + 800336d0: f1450513 addi a0,a0,-236 # 8004c5e0 <_ZL9StateRegs> + 800336d4: 00199717 auipc a4,0x199 + 800336d8: f8f73223 sd a5,-124(a4) # 801cc658 + 800336dc: 935cc06f j 80000010 <_Z10AddExStatePvjiPKc> + +00000000800336e0 <_ZL4Syncv>: + 800336e0: 00199597 auipc a1,0x199 + 800336e4: f5c5c583 lbu a1,-164(a1) # 801cc63c <_ZL7mainreg> + 800336e8: ff010113 addi sp,sp,-16 + 800336ec: 0075f593 andi a1,a1,7 + 800336f0: 00008537 lui a0,0x8 + 800336f4: 00113423 sd ra,8(sp) + 800336f8: f1cdd0ef jal ra,80010e14 <_Z8setprg32jj> + 800336fc: 00199517 auipc a0,0x199 + 80033700: f3e54503 lbu a0,-194(a0) # 801cc63a <_ZL6chrreg> + 80033704: 801dd0ef jal ra,80010f04 <_Z7setchr8j> + 80033708: 00813083 ld ra,8(sp) + 8003370c: 00199517 auipc a0,0x199 + 80033710: f2f54503 lbu a0,-209(a0) # 801cc63b <_ZL6mirror> + 80033714: 01010113 addi sp,sp,16 + 80033718: 931dd06f j 80011048 <_Z9setmirrori> + +000000008003371c <_ZL12StateRestorei>: + 8003371c: fc5ff06f j 800336e0 <_ZL4Syncv> + +0000000080033720 <_ZL9M41Write0jh>: + 80033720: 00199617 auipc a2,0x199 + 80033724: f1a60613 addi a2,a2,-230 # 801cc63a <_ZL6chrreg> + 80033728: 00064783 lbu a5,0(a2) + 8003372c: 4055571b sraiw a4,a0,0x5 + 80033730: 0015569b srliw a3,a0,0x1 + 80033734: 00174713 xori a4,a4,1 + 80033738: 00c6f693 andi a3,a3,12 + 8003373c: 0037f793 andi a5,a5,3 + 80033740: 00177713 andi a4,a4,1 + 80033744: 00d7e7b3 or a5,a5,a3 + 80033748: 00199697 auipc a3,0x199 + 8003374c: eea68a23 sb a0,-268(a3) # 801cc63c <_ZL7mainreg> + 80033750: 00199697 auipc a3,0x199 + 80033754: eee685a3 sb a4,-277(a3) # 801cc63b <_ZL6mirror> + 80033758: 00f60023 sb a5,0(a2) + 8003375c: f85ff06f j 800336e0 <_ZL4Syncv> + +0000000080033760 <_ZL8M41Powerv>: + 80033760: ff010113 addi sp,sp,-16 + 80033764: 00113423 sd ra,8(sp) + 80033768: 00813023 sd s0,0(sp) + 8003376c: 00199797 auipc a5,0x199 + 80033770: ec078723 sb zero,-306(a5) # 801cc63a <_ZL6chrreg> + 80033774: 00010437 lui s0,0x10 + 80033778: 00199797 auipc a5,0x199 + 8003377c: ec078223 sb zero,-316(a5) # 801cc63c <_ZL7mainreg> + 80033780: f61ff0ef jal ra,800336e0 <_ZL4Syncv> + 80033784: fff40593 addi a1,s0,-1 # ffff <_entry_offset+0xffff> + 80033788: fffdd617 auipc a2,0xfffdd + 8003378c: ed860613 addi a2,a2,-296 # 80010660 <_Z6CartBRj> + 80033790: 00008537 lui a0,0x8 + 80033794: 288000ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80033798: 000065b7 lui a1,0x6 + 8003379c: 00000617 auipc a2,0x0 + 800337a0: f8460613 addi a2,a2,-124 # 80033720 <_ZL9M41Write0jh> + 800337a4: 7ff58593 addi a1,a1,2047 # 67ff <_entry_offset+0x67ff> + 800337a8: 00006537 lui a0,0x6 + 800337ac: 37c000ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 800337b0: fff40593 addi a1,s0,-1 + 800337b4: 00013403 ld s0,0(sp) + 800337b8: 00813083 ld ra,8(sp) + 800337bc: 00000617 auipc a2,0x0 + 800337c0: 01460613 addi a2,a2,20 # 800337d0 <_ZL9M41Write1jh> + 800337c4: 00008537 lui a0,0x8 + 800337c8: 01010113 addi sp,sp,16 + 800337cc: 35c0006f j 80033b28 <_Z15SetWriteHandleriiPFvjhE> + +00000000800337d0 <_ZL9M41Write1jh>: + 800337d0: 00199797 auipc a5,0x199 + 800337d4: e6c7c783 lbu a5,-404(a5) # 801cc63c <_ZL7mainreg> + 800337d8: 0047f793 andi a5,a5,4 + 800337dc: 00079463 bnez a5,800337e4 <_ZL9M41Write1jh+0x14> + 800337e0: 00008067 ret + 800337e4: 00199717 auipc a4,0x199 + 800337e8: e5670713 addi a4,a4,-426 # 801cc63a <_ZL6chrreg> + 800337ec: 00074783 lbu a5,0(a4) + 800337f0: 00357513 andi a0,a0,3 + 800337f4: 00c7f793 andi a5,a5,12 + 800337f8: 00a7e533 or a0,a5,a0 + 800337fc: 00a70023 sb a0,0(a4) + 80033800: ee1ff06f j 800336e0 <_ZL4Syncv> + +0000000080033804 <_Z13Mapper41_InitP8CartInfo>: + 80033804: 00000797 auipc a5,0x0 + 80033808: f5c78793 addi a5,a5,-164 # 80033760 <_ZL8M41Powerv> + 8003380c: 00f53023 sd a5,0(a0) # 8000 <_entry_offset+0x8000> + 80033810: 00000797 auipc a5,0x0 + 80033814: f0c78793 addi a5,a5,-244 # 8003371c <_ZL12StateRestorei> + 80033818: 00000693 li a3,0 + 8003381c: 00000613 li a2,0 + 80033820: fff00593 li a1,-1 + 80033824: 00019517 auipc a0,0x19 + 80033828: e0450513 addi a0,a0,-508 # 8004c628 <_ZL9StateRegs> + 8003382c: 00199717 auipc a4,0x199 + 80033830: e2f73623 sd a5,-468(a4) # 801cc658 + 80033834: fdccc06f j 80000010 <_Z10AddExStatePvjiPKc> + +0000000080033838 <_ZL5BNulljh>: + 80033838: 00008067 ret + +000000008003383c <_ZL5ANullj>: + 8003383c: 00024517 auipc a0,0x24 + 80033840: 02c54503 lbu a0,44(a0) # 80057868 + 80033844: 00008067 ret + +0000000080033848 <_ZL5BRAMLjh>: + 80033848: 02051793 slli a5,a0,0x20 + 8003384c: 0207d793 srli a5,a5,0x20 + 80033850: 00195517 auipc a0,0x195 + 80033854: 4d850513 addi a0,a0,1240 # 801c8d28 + 80033858: 00f50533 add a0,a0,a5 + 8003385c: 00b50023 sb a1,0(a0) + 80033860: 00008067 ret + +0000000080033864 <_ZL5BRAMHjh>: + 80033864: 7ff57793 andi a5,a0,2047 + 80033868: 00195517 auipc a0,0x195 + 8003386c: 4c050513 addi a0,a0,1216 # 801c8d28 + 80033870: 00f50533 add a0,a0,a5 + 80033874: 00b50023 sb a1,0(a0) + 80033878: 00008067 ret + +000000008003387c <_ZL5ARAMLj>: + 8003387c: 02051793 slli a5,a0,0x20 + 80033880: 0207d793 srli a5,a5,0x20 + 80033884: 00195517 auipc a0,0x195 + 80033888: 4a450513 addi a0,a0,1188 # 801c8d28 + 8003388c: 00f50533 add a0,a0,a5 + 80033890: 00054503 lbu a0,0(a0) + 80033894: 00008067 ret + +0000000080033898 <_ZL5ARAMHj>: + 80033898: 7ff57793 andi a5,a0,2047 + 8003389c: 00195517 auipc a0,0x195 + 800338a0: 48c50513 addi a0,a0,1164 # 801c8d28 + 800338a4: 00f50533 add a0,a0,a5 + 800338a8: 00054503 lbu a0,0(a0) + 800338ac: 00008067 ret + +00000000800338b0 <_ZL14FCEU_CloseGamev>: + 800338b0: ff010113 addi sp,sp,-16 + 800338b4: 00813023 sd s0,0(sp) + 800338b8: 00199417 auipc s0,0x199 + 800338bc: d9040413 addi s0,s0,-624 # 801cc648 + 800338c0: 00043783 ld a5,0(s0) + 800338c4: 00113423 sd ra,8(sp) + 800338c8: 04078a63 beqz a5,8003391c <_ZL14FCEU_CloseGamev+0x6c> + 800338cc: 0007b503 ld a0,0(a5) + 800338d0: 00050863 beqz a0,800338e0 <_ZL14FCEU_CloseGamev+0x30> + 800338d4: 2e5060ef jal ra,8003a3b8 + 800338d8: 00043783 ld a5,0(s0) + 800338dc: 0007b023 sd zero,0(a5) + 800338e0: 00300513 li a0,3 + 800338e4: 00199797 auipc a5,0x199 + 800338e8: d6c7b783 ld a5,-660(a5) # 801cc650 + 800338ec: 000780e7 jalr a5 + 800338f0: 00198517 auipc a0,0x198 + 800338f4: 23053503 ld a0,560(a0) # 801cbb20 + 800338f8: 00050863 beqz a0,80033908 <_ZL14FCEU_CloseGamev+0x58> + 800338fc: 00010637 lui a2,0x10 + 80033900: 00000593 li a1,0 + 80033904: 124080ef jal ra,8003ba28 + 80033908: 845dd0ef jal ra,8001114c <_Z15FCEU_CloseGeniev> + 8003390c: 00043503 ld a0,0(s0) + 80033910: 2a9060ef jal ra,8003a3b8 + 80033914: 00199797 auipc a5,0x199 + 80033918: d207ba23 sd zero,-716(a5) # 801cc648 + 8003391c: 00813083 ld ra,8(sp) + 80033920: 00013403 ld s0,0(sp) + 80033924: 01010113 addi sp,sp,16 + 80033928: 00008067 ret + +000000008003392c <_Z12FlushGenieRWv>: + 8003392c: 00199797 auipc a5,0x199 + 80033930: d447a783 lw a5,-700(a5) # 801cc670 <_ZL6RWWrap> + 80033934: 08078c63 beqz a5,800339cc <_Z12FlushGenieRWv+0xa0> + 80033938: ff010113 addi sp,sp,-16 + 8003393c: 00813023 sd s0,0(sp) + 80033940: 00199417 auipc s0,0x199 + 80033944: d3840413 addi s0,s0,-712 # 801cc678 <_ZL7BWriteG> + 80033948: 00043603 ld a2,0(s0) + 8003394c: 00199517 auipc a0,0x199 + 80033950: d1c53503 ld a0,-740(a0) # 801cc668 <_ZL6AReadG> + 80033954: 00113423 sd ra,8(sp) + 80033958: 00050693 mv a3,a0 + 8003395c: 000d5797 auipc a5,0xd5 + 80033960: 38478793 addi a5,a5,900 # 80108ce0 + 80033964: 00155717 auipc a4,0x155 + 80033968: 37c70713 addi a4,a4,892 # 80188ce0 + 8003396c: 00115897 auipc a7,0x115 + 80033970: 37488893 addi a7,a7,884 # 80148ce0 + 80033974: 0006b803 ld a6,0(a3) + 80033978: 00063583 ld a1,0(a2) # 10000 <_entry_offset+0x10000> + 8003397c: 00878793 addi a5,a5,8 + 80033980: ff07bc23 sd a6,-8(a5) + 80033984: 00b73023 sd a1,0(a4) + 80033988: 00868693 addi a3,a3,8 + 8003398c: 00860613 addi a2,a2,8 + 80033990: 00870713 addi a4,a4,8 + 80033994: ff1790e3 bne a5,a7,80033974 <_Z12FlushGenieRWv+0x48> + 80033998: 221060ef jal ra,8003a3b8 + 8003399c: 00043503 ld a0,0(s0) + 800339a0: 219060ef jal ra,8003a3b8 + 800339a4: 00813083 ld ra,8(sp) + 800339a8: 00013403 ld s0,0(sp) + 800339ac: 00199797 auipc a5,0x199 + 800339b0: ca07be23 sd zero,-836(a5) # 801cc668 <_ZL6AReadG> + 800339b4: 00199797 auipc a5,0x199 + 800339b8: cc07b223 sd zero,-828(a5) # 801cc678 <_ZL7BWriteG> + 800339bc: 00199797 auipc a5,0x199 + 800339c0: ca07aa23 sw zero,-844(a5) # 801cc670 <_ZL6RWWrap> + 800339c4: 01010113 addi sp,sp,16 + 800339c8: 00008067 ret + 800339cc: 00008067 ret + +00000000800339d0 <_Z14GetReadHandleri>: + 800339d0: 000087b7 lui a5,0x8 + 800339d4: 02f54863 blt a0,a5,80033a04 <_Z14GetReadHandleri+0x34> + 800339d8: 00199797 auipc a5,0x199 + 800339dc: c987a783 lw a5,-872(a5) # 801cc670 <_ZL6RWWrap> + 800339e0: 02078263 beqz a5,80033a04 <_Z14GetReadHandleri+0x34> + 800339e4: 00351513 slli a0,a0,0x3 + 800339e8: 00199797 auipc a5,0x199 + 800339ec: c807b783 ld a5,-896(a5) # 801cc668 <_ZL6AReadG> + 800339f0: 00a787b3 add a5,a5,a0 + 800339f4: fffc0537 lui a0,0xfffc0 + 800339f8: 00f50533 add a0,a0,a5 + 800339fc: 00053503 ld a0,0(a0) # fffffffffffc0000 <_end+0xffffffff7fdeb000> + 80033a00: 00008067 ret + 80033a04: 00095797 auipc a5,0x95 + 80033a08: 2dc78793 addi a5,a5,732 # 800c8ce0 + 80033a0c: 00351513 slli a0,a0,0x3 + 80033a10: 00a78533 add a0,a5,a0 + 80033a14: 00053503 ld a0,0(a0) + 80033a18: 00008067 ret + +0000000080033a1c <_Z14SetReadHandleriiPFhjE>: + 80033a1c: 0a060a63 beqz a2,80033ad0 <_Z14SetReadHandleriiPFhjE+0xb4> + 80033a20: 00199797 auipc a5,0x199 + 80033a24: c507a783 lw a5,-944(a5) # 801cc670 <_ZL6RWWrap> + 80033a28: 06078263 beqz a5,80033a8c <_Z14SetReadHandleriiPFhjE+0x70> + 80033a2c: 0aa5c063 blt a1,a0,80033acc <_Z14SetReadHandleriiPFhjE+0xb0> + 80033a30: 00199e17 auipc t3,0x199 + 80033a34: c38e3e03 ld t3,-968(t3) # 801cc668 <_ZL6AReadG> + 80033a38: 0005869b sext.w a3,a1 + 80033a3c: 00008337 lui t1,0x8 + 80033a40: 00095897 auipc a7,0x95 + 80033a44: 2a088893 addi a7,a7,672 # 800c8ce0 + 80033a48: fffc0837 lui a6,0xfffc0 + 80033a4c: 0140006f j 80033a60 <_Z14SetReadHandleriiPFhjE+0x44> + 80033a50: fff58593 addi a1,a1,-1 + 80033a54: 00c7b023 sd a2,0(a5) + 80033a58: 0005869b sext.w a3,a1 + 80033a5c: 02a6c663 blt a3,a0,80033a88 <_Z14SetReadHandleriiPFhjE+0x6c> + 80033a60: 00359793 slli a5,a1,0x3 + 80033a64: 010787b3 add a5,a5,a6 + 80033a68: 00359713 slli a4,a1,0x3 + 80033a6c: 00fe07b3 add a5,t3,a5 + 80033a70: 01170733 add a4,a4,a7 + 80033a74: fc66dee3 bge a3,t1,80033a50 <_Z14SetReadHandleriiPFhjE+0x34> + 80033a78: fff58593 addi a1,a1,-1 + 80033a7c: 00c73023 sd a2,0(a4) + 80033a80: 0005869b sext.w a3,a1 + 80033a84: fca6dee3 bge a3,a0,80033a60 <_Z14SetReadHandleriiPFhjE+0x44> + 80033a88: 00008067 ret + 80033a8c: 04a5c063 blt a1,a0,80033acc <_Z14SetReadHandleriiPFhjE+0xb0> + 80033a90: 40a587bb subw a5,a1,a0 + 80033a94: 02079793 slli a5,a5,0x20 + 80033a98: 0207d793 srli a5,a5,0x20 + 80033a9c: 40f587b3 sub a5,a1,a5 + 80033aa0: 00095717 auipc a4,0x95 + 80033aa4: 24070713 addi a4,a4,576 # 800c8ce0 + 80033aa8: 00359593 slli a1,a1,0x3 + 80033aac: 00379793 slli a5,a5,0x3 + 80033ab0: 00e585b3 add a1,a1,a4 + 80033ab4: 00095717 auipc a4,0x95 + 80033ab8: 22470713 addi a4,a4,548 # 800c8cd8 <_ZL9FlashPage+0xf8> + 80033abc: 00e787b3 add a5,a5,a4 + 80033ac0: 00c5b023 sd a2,0(a1) + 80033ac4: ff858593 addi a1,a1,-8 + 80033ac8: fef59ce3 bne a1,a5,80033ac0 <_Z14SetReadHandleriiPFhjE+0xa4> + 80033acc: 00008067 ret + 80033ad0: 00000617 auipc a2,0x0 + 80033ad4: d6c60613 addi a2,a2,-660 # 8003383c <_ZL5ANullj> + 80033ad8: f49ff06f j 80033a20 <_Z14SetReadHandleriiPFhjE+0x4> + +0000000080033adc <_Z15GetWriteHandleri>: + 80033adc: 00199797 auipc a5,0x199 + 80033ae0: b947a783 lw a5,-1132(a5) # 801cc670 <_ZL6RWWrap> + 80033ae4: 02078663 beqz a5,80033b10 <_Z15GetWriteHandleri+0x34> + 80033ae8: 000087b7 lui a5,0x8 + 80033aec: 02f54263 blt a0,a5,80033b10 <_Z15GetWriteHandleri+0x34> + 80033af0: 00351513 slli a0,a0,0x3 + 80033af4: 00199797 auipc a5,0x199 + 80033af8: b847b783 ld a5,-1148(a5) # 801cc678 <_ZL7BWriteG> + 80033afc: 00a787b3 add a5,a5,a0 + 80033b00: fffc0537 lui a0,0xfffc0 + 80033b04: 00f50533 add a0,a0,a5 + 80033b08: 00053503 ld a0,0(a0) # fffffffffffc0000 <_end+0xffffffff7fdeb000> + 80033b0c: 00008067 ret + 80033b10: 00115797 auipc a5,0x115 + 80033b14: 1d078793 addi a5,a5,464 # 80148ce0 + 80033b18: 00351513 slli a0,a0,0x3 + 80033b1c: 00a78533 add a0,a5,a0 + 80033b20: 00053503 ld a0,0(a0) + 80033b24: 00008067 ret + +0000000080033b28 <_Z15SetWriteHandleriiPFvjhE>: + 80033b28: 0a060a63 beqz a2,80033bdc <_Z15SetWriteHandleriiPFvjhE+0xb4> + 80033b2c: 00199797 auipc a5,0x199 + 80033b30: b447a783 lw a5,-1212(a5) # 801cc670 <_ZL6RWWrap> + 80033b34: 06078263 beqz a5,80033b98 <_Z15SetWriteHandleriiPFvjhE+0x70> + 80033b38: 0aa5c063 blt a1,a0,80033bd8 <_Z15SetWriteHandleriiPFvjhE+0xb0> + 80033b3c: 00199e17 auipc t3,0x199 + 80033b40: b3ce3e03 ld t3,-1220(t3) # 801cc678 <_ZL7BWriteG> + 80033b44: 0005869b sext.w a3,a1 + 80033b48: 00008337 lui t1,0x8 + 80033b4c: 00115897 auipc a7,0x115 + 80033b50: 19488893 addi a7,a7,404 # 80148ce0 + 80033b54: fffc0837 lui a6,0xfffc0 + 80033b58: 0140006f j 80033b6c <_Z15SetWriteHandleriiPFvjhE+0x44> + 80033b5c: fff58593 addi a1,a1,-1 + 80033b60: 00c7b023 sd a2,0(a5) + 80033b64: 0005869b sext.w a3,a1 + 80033b68: 02a6c663 blt a3,a0,80033b94 <_Z15SetWriteHandleriiPFvjhE+0x6c> + 80033b6c: 00359793 slli a5,a1,0x3 + 80033b70: 010787b3 add a5,a5,a6 + 80033b74: 00359713 slli a4,a1,0x3 + 80033b78: 00fe07b3 add a5,t3,a5 + 80033b7c: 01170733 add a4,a4,a7 + 80033b80: fc66dee3 bge a3,t1,80033b5c <_Z15SetWriteHandleriiPFvjhE+0x34> + 80033b84: fff58593 addi a1,a1,-1 + 80033b88: 00c73023 sd a2,0(a4) + 80033b8c: 0005869b sext.w a3,a1 + 80033b90: fca6dee3 bge a3,a0,80033b6c <_Z15SetWriteHandleriiPFvjhE+0x44> + 80033b94: 00008067 ret + 80033b98: 04a5c063 blt a1,a0,80033bd8 <_Z15SetWriteHandleriiPFvjhE+0xb0> + 80033b9c: 40a587bb subw a5,a1,a0 + 80033ba0: 02079793 slli a5,a5,0x20 + 80033ba4: 0207d793 srli a5,a5,0x20 + 80033ba8: 40f587b3 sub a5,a1,a5 + 80033bac: 00115717 auipc a4,0x115 + 80033bb0: 13470713 addi a4,a4,308 # 80148ce0 + 80033bb4: 00359593 slli a1,a1,0x3 + 80033bb8: 00379793 slli a5,a5,0x3 + 80033bbc: 00e585b3 add a1,a1,a4 + 80033bc0: 00115717 auipc a4,0x115 + 80033bc4: 11870713 addi a4,a4,280 # 80148cd8 + 80033bc8: 00e787b3 add a5,a5,a4 + 80033bcc: 00c5b023 sd a2,0(a1) + 80033bd0: ff858593 addi a1,a1,-8 + 80033bd4: fef59ce3 bne a1,a5,80033bcc <_Z15SetWriteHandleriiPFvjhE+0xa4> + 80033bd8: 00008067 ret + 80033bdc: 00000617 auipc a2,0x0 + 80033be0: c5c60613 addi a2,a2,-932 # 80033838 <_ZL5BNulljh> + 80033be4: f49ff06f j 80033b2c <_Z15SetWriteHandleriiPFvjhE+0x4> + +0000000080033be8 <_Z15ResetGameLoadedv>: + 80033be8: ff010113 addi sp,sp,-16 + 80033bec: 00113423 sd ra,8(sp) + 80033bf0: 00199797 auipc a5,0x199 + 80033bf4: a587b783 ld a5,-1448(a5) # 801cc648 + 80033bf8: 00078463 beqz a5,80033c00 <_Z15ResetGameLoadedv+0x18> + 80033bfc: cb5ff0ef jal ra,800338b0 <_ZL14FCEU_CloseGamev> + 80033c00: 00199797 auipc a5,0x199 + 80033c04: a407a023 sw zero,-1472(a5) # 801cc640 + 80033c08: 00199797 auipc a5,0x199 + 80033c0c: a407b823 sd zero,-1456(a5) # 801cc658 + 80033c10: 00199797 auipc a5,0x199 + 80033c14: ae07bc23 sd zero,-1288(a5) # 801cc708 + 80033c18: 00199797 auipc a5,0x199 + 80033c1c: aa07b423 sd zero,-1368(a5) # 801cc6c0 + 80033c20: 00199797 auipc a5,0x199 + 80033c24: a807b823 sd zero,-1392(a5) # 801cc6b0 + 80033c28: 00199797 auipc a5,0x199 + 80033c2c: a807b823 sd zero,-1392(a5) # 801cc6b8 + 80033c30: 00024797 auipc a5,0x24 + 80033c34: d807b783 ld a5,-640(a5) # 800579b0 + 80033c38: 00078463 beqz a5,80033c40 <_Z15ResetGameLoadedv+0x58> + 80033c3c: 000780e7 jalr a5 + 80033c40: 03000613 li a2,48 + 80033c44: 00000593 li a1,0 + 80033c48: 00024517 auipc a0,0x24 + 80033c4c: d4050513 addi a0,a0,-704 # 80057988 + 80033c50: 5d9070ef jal ra,8003ba28 + 80033c54: 00199717 auipc a4,0x199 + 80033c58: a0c70713 addi a4,a4,-1524 # 801cc660 + 80033c5c: 00074783 lbu a5,0(a4) + 80033c60: 00198697 auipc a3,0x198 + 80033c64: ee06b023 sd zero,-288(a3) # 801cbb40 + 80033c68: 00199697 auipc a3,0x199 + 80033c6c: a606a623 sw zero,-1428(a3) # 801cc6d4 + 80033c70: 0017f793 andi a5,a5,1 + 80033c74: 00f70023 sb a5,0(a4) + 80033c78: 00813083 ld ra,8(sp) + 80033c7c: 00199697 auipc a3,0x199 + 80033c80: a806a023 sw zero,-1408(a3) # 801cc6fc + 80033c84: 00199697 auipc a3,0x199 + 80033c88: a806a623 sw zero,-1396(a3) # 801cc710 + 80033c8c: 00198797 auipc a5,0x198 + 80033c90: e607aa23 sw zero,-396(a5) # 801cbb00 + 80033c94: 01010113 addi sp,sp,16 + 80033c98: 00008067 ret + +0000000080033c9c <_Z16FCEUI_Initializev>: + 80033c9c: ff010113 addi sp,sp,-16 + 80033ca0: 00000513 li a0,0 + 80033ca4: 00113423 sd ra,8(sp) + 80033ca8: 00813023 sd s0,0(sp) + 80033cac: 6ac060ef jal ra,8003a358 + 80033cb0: e41cc0ef jal ra,80000af0 <_Z21FCEU_InitVirtualVideov> + 80033cb4: 00000793 li a5,0 + 80033cb8: 04050e63 beqz a0,80033d14 <_Z16FCEUI_Initializev+0x78> + 80033cbc: 00195417 auipc s0,0x195 + 80033cc0: 02440413 addi s0,s0,36 # 801c8ce0 + 80033cc4: 00000593 li a1,0 + 80033cc8: 04800613 li a2,72 + 80033ccc: 00040513 mv a0,s0 + 80033cd0: 559070ef jal ra,8003ba28 + 80033cd4: 00100793 li a5,1 + 80033cd8: 0ef00693 li a3,239 + 80033cdc: 02879793 slli a5,a5,0x28 + 80033ce0: 10078713 addi a4,a5,256 + 80033ce4: 02069613 slli a2,a3,0x20 + 80033ce8: 09678793 addi a5,a5,150 + 80033cec: 00195597 auipc a1,0x195 + 80033cf0: 0205a023 sw zero,32(a1) # 801c8d0c + 80033cf4: 00f43423 sd a5,8(s0) + 80033cf8: 02c43823 sd a2,48(s0) + 80033cfc: 02d42c23 sw a3,56(s0) + 80033d00: 00e43823 sd a4,16(s0) + 80033d04: 00e43c23 sd a4,24(s0) + 80033d08: 1c1040ef jal ra,800386c8 <_Z12FCEUPPU_Initv> + 80033d0c: 890cd0ef jal ra,80000d9c <_Z10X6502_Initv> + 80033d10: 00100793 li a5,1 + 80033d14: 00813083 ld ra,8(sp) + 80033d18: 00013403 ld s0,0(sp) + 80033d1c: 00078513 mv a0,a5 + 80033d20: 01010113 addi sp,sp,16 + 80033d24: 00008067 ret + +0000000080033d28 <_Z10FCEUI_Killv>: + 80033d28: ff010113 addi sp,sp,-16 + 80033d2c: 00113423 sd ra,8(sp) + 80033d30: dbdcc0ef jal ra,80000aec <_Z21FCEU_KillVirtualVideov> + 80033d34: 00813083 ld ra,8(sp) + 80033d38: 01010113 addi sp,sp,16 + 80033d3c: c40dd06f j 8001117c <_Z14FCEU_KillGeniev> + +0000000080033d40 <_Z13FCEUI_EmulatePPhPPiS1_i>: + 80033d40: fd010113 addi sp,sp,-48 + 80033d44: 02813023 sd s0,32(sp) + 80033d48: 00913c23 sd s1,24(sp) + 80033d4c: 01213823 sd s2,16(sp) + 80033d50: 01313423 sd s3,8(sp) + 80033d54: 02113423 sd ra,40(sp) + 80033d58: 01413023 sd s4,0(sp) + 80033d5c: 00199797 auipc a5,0x199 + 80033d60: 9247c783 lbu a5,-1756(a5) # 801cc680 + 80033d64: 00050993 mv s3,a0 + 80033d68: 00058493 mv s1,a1 + 80033d6c: 00060913 mv s2,a2 + 80033d70: 00068413 mv s0,a3 + 80033d74: 0a079263 bnez a5,80033e18 <_Z13FCEUI_EmulatePPhPPiS1_i+0xd8> + 80033d78: 00199a17 auipc s4,0x199 + 80033d7c: 8c8a0a13 addi s4,s4,-1848 # 801cc640 + 80033d80: 000a2783 lw a5,0(s4) + 80033d84: 0027f713 andi a4,a5,2 + 80033d88: 0007071b sext.w a4,a4 + 80033d8c: 0a071e63 bnez a4,80033e48 <_Z13FCEUI_EmulatePPhPPiS1_i+0x108> + 80033d90: 0017f793 andi a5,a5,1 + 80033d94: 16079063 bnez a5,80033ef4 <_Z13FCEUI_EmulatePPhPPiS1_i+0x1b4> + 80033d98: d1ccc0ef jal ra,800002b4 <_Z16FCEU_UpdateInputv> + 80033d9c: 00040513 mv a0,s0 + 80033da0: 3c1020ef jal ra,80036960 <_Z12FCEUPPU_Loopi> + 80033da4: 00200793 li a5,2 + 80033da8: 0af41e63 bne s0,a5,80033e64 <_Z13FCEUI_EmulatePPhPPiS1_i+0x124> + 80033dac: 00199717 auipc a4,0x199 + 80033db0: 8ec70713 addi a4,a4,-1812 # 801cc698 + 80033db4: 00073683 ld a3,0(a4) + 80033db8: 00198797 auipc a5,0x198 + 80033dbc: d947e783 lwu a5,-620(a5) # 801cbb4c + 80033dc0: 00198617 auipc a2,0x198 + 80033dc4: d8062423 sw zero,-632(a2) # 801cbb48 + 80033dc8: 00d787b3 add a5,a5,a3 + 80033dcc: 00f73023 sd a5,0(a4) + 80033dd0: 00198797 auipc a5,0x198 + 80033dd4: d607ae23 sw zero,-644(a5) # 801cbb4c + 80033dd8: 0009b023 sd zero,0(s3) + 80033ddc: 0004b023 sd zero,0(s1) + 80033de0: 00092023 sw zero,0(s2) + 80033de4: 000a2783 lw a5,0(s4) + 80033de8: 0027f793 andi a5,a5,2 + 80033dec: 00078663 beqz a5,80033df8 <_Z13FCEUI_EmulatePPhPPiS1_i+0xb8> + 80033df0: 00100793 li a5,1 + 80033df4: 00fa2023 sw a5,0(s4) + 80033df8: 02813083 ld ra,40(sp) + 80033dfc: 02013403 ld s0,32(sp) + 80033e00: 01813483 ld s1,24(sp) + 80033e04: 01013903 ld s2,16(sp) + 80033e08: 00813983 ld s3,8(sp) + 80033e0c: 00013a03 ld s4,0(sp) + 80033e10: 03010113 addi sp,sp,48 + 80033e14: 00008067 ret + 80033e18: 00199697 auipc a3,0x199 + 80033e1c: 86c68693 addi a3,a3,-1940 # 801cc684 + 80033e20: 0006a703 lw a4,0(a3) + 80033e24: 00019797 auipc a5,0x19 + 80033e28: 34c7a783 lw a5,844(a5) # 8004d170 + 80033e2c: 08071663 bnez a4,80033eb8 <_Z13FCEUI_EmulatePPhPPiS1_i+0x178> + 80033e30: 08f05663 blez a5,80033ebc <_Z13FCEUI_EmulatePPhPPiS1_i+0x17c> + 80033e34: 00100793 li a5,1 + 80033e38: 00f6a023 sw a5,0(a3) + 80033e3c: 00199a17 auipc s4,0x199 + 80033e40: 804a0a13 addi s4,s4,-2044 # 801cc640 + 80033e44: 00200793 li a5,2 + 80033e48: ffe7f793 andi a5,a5,-2 + 80033e4c: 00fa2023 sw a5,0(s4) + 80033e50: c64cc0ef jal ra,800002b4 <_Z16FCEU_UpdateInputv> + 80033e54: 00040513 mv a0,s0 + 80033e58: 309020ef jal ra,80036960 <_Z12FCEUPPU_Loopi> + 80033e5c: 00200793 li a5,2 + 80033e60: f4f406e3 beq s0,a5,80033dac <_Z13FCEUI_EmulatePPhPPiS1_i+0x6c> + 80033e64: ea8d90ef jal ra,8000d50c <_Z17FlushEmulateSoundv> + 80033e68: 00199717 auipc a4,0x199 + 80033e6c: 83070713 addi a4,a4,-2000 # 801cc698 + 80033e70: 00073683 ld a3,0(a4) + 80033e74: 00198797 auipc a5,0x198 + 80033e78: cd87e783 lwu a5,-808(a5) # 801cbb4c + 80033e7c: 00198617 auipc a2,0x198 + 80033e80: cc062623 sw zero,-820(a2) # 801cbb48 + 80033e84: 00d787b3 add a5,a5,a3 + 80033e88: 00f73023 sd a5,0(a4) + 80033e8c: 00198797 auipc a5,0x198 + 80033e90: cc07a023 sw zero,-832(a5) # 801cbb4c + 80033e94: 0a041a63 bnez s0,80033f48 <_Z13FCEUI_EmulatePPhPPiS1_i+0x208> + 80033e98: 00198797 auipc a5,0x198 + 80033e9c: c887b783 ld a5,-888(a5) # 801cbb20 + 80033ea0: 00f9b023 sd a5,0(s3) + 80033ea4: 00026797 auipc a5,0x26 + 80033ea8: 32478793 addi a5,a5,804 # 8005a1c8 + 80033eac: 00f4b023 sd a5,0(s1) + 80033eb0: 00a92023 sw a0,0(s2) + 80033eb4: f31ff06f j 80033de4 <_Z13FCEUI_EmulatePPhPPiS1_i+0xa4> + 80033eb8: 00f74e63 blt a4,a5,80033ed4 <_Z13FCEUI_EmulatePPhPPiS1_i+0x194> + 80033ebc: 00200793 li a5,2 + 80033ec0: 00198a17 auipc s4,0x198 + 80033ec4: 780a0a13 addi s4,s4,1920 # 801cc640 + 80033ec8: ffe7f793 andi a5,a5,-2 + 80033ecc: 00fa2023 sw a5,0(s4) + 80033ed0: f81ff06f j 80033e50 <_Z13FCEUI_EmulatePPhPPiS1_i+0x110> + 80033ed4: 00198a17 auipc s4,0x198 + 80033ed8: 76ca0a13 addi s4,s4,1900 # 801cc640 + 80033edc: 000a2783 lw a5,0(s4) + 80033ee0: 0017071b addiw a4,a4,1 + 80033ee4: 00e6a023 sw a4,0(a3) + 80033ee8: 0027f713 andi a4,a5,2 + 80033eec: 0007071b sext.w a4,a4 + 80033ef0: e9dff06f j 80033d8c <_Z13FCEUI_EmulatePPhPPiS1_i+0x4c> + 80033ef4: 00198417 auipc s0,0x198 + 80033ef8: c2c40413 addi s0,s0,-980 # 801cbb20 + 80033efc: 00043503 ld a0,0(s0) + 80033f00: 00010637 lui a2,0x10 + 80033f04: 00198597 auipc a1,0x198 + 80033f08: c145b583 ld a1,-1004(a1) # 801cbb18 + 80033f0c: 449070ef jal ra,8003bb54 + 80033f10: 00043783 ld a5,0(s0) + 80033f14: 02813083 ld ra,40(sp) + 80033f18: 02013403 ld s0,32(sp) + 80033f1c: 00f9b023 sd a5,0(s3) + 80033f20: 00026797 auipc a5,0x26 + 80033f24: 2a878793 addi a5,a5,680 # 8005a1c8 + 80033f28: 00f4b023 sd a5,0(s1) + 80033f2c: 00092023 sw zero,0(s2) + 80033f30: 01813483 ld s1,24(sp) + 80033f34: 01013903 ld s2,16(sp) + 80033f38: 00813983 ld s3,8(sp) + 80033f3c: 00013a03 ld s4,0(sp) + 80033f40: 03010113 addi sp,sp,48 + 80033f44: 00008067 ret + 80033f48: 0009b023 sd zero,0(s3) + 80033f4c: f59ff06f j 80033ea4 <_Z13FCEUI_EmulatePPhPPiS1_i+0x164> + +0000000080033f50 <_Z15FCEUI_CloseGamev>: + 80033f50: 961ff06f j 800338b0 <_ZL14FCEU_CloseGamev> + +0000000080033f54 <_Z15FCEU_MemoryRandPhjb>: + 80033f54: 00008067 ret + +0000000080033f58 <_Z8PowerNESv>: + 80033f58: 00198797 auipc a5,0x198 + 80033f5c: 6f07b783 ld a5,1776(a5) # 801cc648 + 80033f60: 2a078663 beqz a5,8003420c <_Z8PowerNESv+0x2b4> + 80033f64: ff010113 addi sp,sp,-16 + 80033f68: 00113423 sd ra,8(sp) + 80033f6c: 00198797 auipc a5,0x198 + 80033f70: 7047a783 lw a5,1796(a5) # 801cc670 <_ZL6RWWrap> + 80033f74: 1a078e63 beqz a5,80034130 <_Z8PowerNESv+0x1d8> + 80033f78: 00010737 lui a4,0x10 + 80033f7c: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 80033f80: 00371693 slli a3,a4,0x3 + 80033f84: 00068793 mv a5,a3 + 80033f88: fffc0537 lui a0,0xfffc0 + 80033f8c: 00198317 auipc t1,0x198 + 80033f90: 6dc33303 ld t1,1756(t1) # 801cc668 <_ZL6AReadG> + 80033f94: 00095817 auipc a6,0x95 + 80033f98: d4c80813 addi a6,a6,-692 # 800c8ce0 + 80033f9c: 00a787b3 add a5,a5,a0 + 80033fa0: 000088b7 lui a7,0x8 + 80033fa4: 0007061b sext.w a2,a4 + 80033fa8: 00000597 auipc a1,0x0 + 80033fac: 89458593 addi a1,a1,-1900 # 8003383c <_ZL5ANullj> + 80033fb0: 00d806b3 add a3,a6,a3 + 80033fb4: 00f307b3 add a5,t1,a5 + 80033fb8: 03164463 blt a2,a7,80033fe0 <_Z8PowerNESv+0x88> + 80033fbc: 00b7b023 sd a1,0(a5) + 80033fc0: fff70713 addi a4,a4,-1 + 80033fc4: 00371693 slli a3,a4,0x3 + 80033fc8: 00068793 mv a5,a3 + 80033fcc: 00a787b3 add a5,a5,a0 + 80033fd0: 0007061b sext.w a2,a4 + 80033fd4: 00d806b3 add a3,a6,a3 + 80033fd8: 00f307b3 add a5,t1,a5 + 80033fdc: ff1650e3 bge a2,a7,80033fbc <_Z8PowerNESv+0x64> + 80033fe0: 00b6b023 sd a1,0(a3) + 80033fe4: fc061ee3 bnez a2,80033fc0 <_Z8PowerNESv+0x68> + 80033fe8: 00010737 lui a4,0x10 + 80033fec: fff70713 addi a4,a4,-1 # ffff <_entry_offset+0xffff> + 80033ff0: 00371693 slli a3,a4,0x3 + 80033ff4: 00068793 mv a5,a3 + 80033ff8: fffc08b7 lui a7,0xfffc0 + 80033ffc: 00198e17 auipc t3,0x198 + 80034000: 67ce3e03 ld t3,1660(t3) # 801cc678 <_ZL7BWriteG> + 80034004: 00115517 auipc a0,0x115 + 80034008: cdc50513 addi a0,a0,-804 # 80148ce0 + 8003400c: 011787b3 add a5,a5,a7 + 80034010: 00008337 lui t1,0x8 + 80034014: 0007061b sext.w a2,a4 + 80034018: 00000597 auipc a1,0x0 + 8003401c: 82058593 addi a1,a1,-2016 # 80033838 <_ZL5BNulljh> + 80034020: 00d506b3 add a3,a0,a3 + 80034024: 00fe07b3 add a5,t3,a5 + 80034028: 02664463 blt a2,t1,80034050 <_Z8PowerNESv+0xf8> + 8003402c: 00b7b023 sd a1,0(a5) + 80034030: fff70713 addi a4,a4,-1 + 80034034: 00371693 slli a3,a4,0x3 + 80034038: 00068793 mv a5,a3 + 8003403c: 011787b3 add a5,a5,a7 + 80034040: 0007061b sext.w a2,a4 + 80034044: 00d506b3 add a3,a0,a3 + 80034048: 00fe07b3 add a5,t3,a5 + 8003404c: fe6650e3 bge a2,t1,8003402c <_Z8PowerNESv+0xd4> + 80034050: 00b6b023 sd a1,0(a3) + 80034054: fc061ee3 bnez a2,80034030 <_Z8PowerNESv+0xd8> + 80034058: 00099797 auipc a5,0x99 + 8003405c: c8078793 addi a5,a5,-896 # 800cccd8 + 80034060: 00000717 auipc a4,0x0 + 80034064: 81c70713 addi a4,a4,-2020 # 8003387c <_ZL5ARAMLj> + 80034068: 00e7b023 sd a4,0(a5) + 8003406c: 00078693 mv a3,a5 + 80034070: ff878793 addi a5,a5,-8 + 80034074: fed81ae3 bne a6,a3,80034068 <_Z8PowerNESv+0x110> + 80034078: 00119797 auipc a5,0x119 + 8003407c: c6078793 addi a5,a5,-928 # 8014ccd8 + 80034080: fffff717 auipc a4,0xfffff + 80034084: 7c870713 addi a4,a4,1992 # 80033848 <_ZL5BRAMLjh> + 80034088: 00e7b023 sd a4,0(a5) + 8003408c: 00078693 mv a3,a5 + 80034090: ff878793 addi a5,a5,-8 + 80034094: fed51ae3 bne a0,a3,80034088 <_Z8PowerNESv+0x130> + 80034098: 000a5797 auipc a5,0xa5 + 8003409c: c4078793 addi a5,a5,-960 # 800d8cd8 + 800340a0: 00099697 auipc a3,0x99 + 800340a4: c3868693 addi a3,a3,-968 # 800cccd8 + 800340a8: fffff717 auipc a4,0xfffff + 800340ac: 7f070713 addi a4,a4,2032 # 80033898 <_ZL5ARAMHj> + 800340b0: 00e7b023 sd a4,0(a5) + 800340b4: ff878793 addi a5,a5,-8 + 800340b8: fed79ce3 bne a5,a3,800340b0 <_Z8PowerNESv+0x158> + 800340bc: 00125797 auipc a5,0x125 + 800340c0: c1c78793 addi a5,a5,-996 # 80158cd8 + 800340c4: 00119697 auipc a3,0x119 + 800340c8: c1468693 addi a3,a3,-1004 # 8014ccd8 + 800340cc: fffff717 auipc a4,0xfffff + 800340d0: 79870713 addi a4,a4,1944 # 80033864 <_ZL5BRAMHjh> + 800340d4: 00e7b023 sd a4,0(a5) + 800340d8: ff878793 addi a5,a5,-8 + 800340dc: fed79ce3 bne a5,a3,800340d4 <_Z8PowerNESv+0x17c> + 800340e0: acccc0ef jal ra,800003ac <_Z15InitializeInputv> + 800340e4: e0cd90ef jal ra,8000d6f0 <_Z13FCEUSND_Powerv> + 800340e8: 6d4040ef jal ra,800387bc <_Z13FCEUPPU_Powerv> + 800340ec: 00198797 auipc a5,0x198 + 800340f0: 5647b783 ld a5,1380(a5) # 801cc650 + 800340f4: 00200513 li a0,2 + 800340f8: 000780e7 jalr a5 + 800340fc: 00198797 auipc a5,0x198 + 80034100: 5807be23 sd zero,1436(a5) # 801cc698 + 80034104: d1dcc0ef jal ra,80000e20 <_Z11X6502_Powerv> + 80034108: 00010637 lui a2,0x10 + 8003410c: 00000593 li a1,0 + 80034110: 00198517 auipc a0,0x198 + 80034114: a0853503 ld a0,-1528(a0) # 801cbb18 + 80034118: 111070ef jal ra,8003ba28 + 8003411c: 00813083 ld ra,8(sp) + 80034120: 00012517 auipc a0,0x12 + 80034124: 46050513 addi a0,a0,1120 # 80046580 + 80034128: 01010113 addi sp,sp,16 + 8003412c: 41c0706f j 8003b548 + 80034130: 00115797 auipc a5,0x115 + 80034134: ba878793 addi a5,a5,-1112 # 80148cd8 + 80034138: 00095617 auipc a2,0x95 + 8003413c: ba860613 addi a2,a2,-1112 # 800c8ce0 + 80034140: fffff597 auipc a1,0xfffff + 80034144: 6fc58593 addi a1,a1,1788 # 8003383c <_ZL5ANullj> + 80034148: 00b7b023 sd a1,0(a5) + 8003414c: 00078713 mv a4,a5 + 80034150: ff878793 addi a5,a5,-8 + 80034154: fec71ae3 bne a4,a2,80034148 <_Z8PowerNESv+0x1f0> + 80034158: 00195797 auipc a5,0x195 + 8003415c: b8078793 addi a5,a5,-1152 # 801c8cd8 + 80034160: 00115697 auipc a3,0x115 + 80034164: b8068693 addi a3,a3,-1152 # 80148ce0 + 80034168: fffff597 auipc a1,0xfffff + 8003416c: 6d058593 addi a1,a1,1744 # 80033838 <_ZL5BNulljh> + 80034170: 00b7b023 sd a1,0(a5) + 80034174: 00078713 mv a4,a5 + 80034178: ff878793 addi a5,a5,-8 + 8003417c: fed71ae3 bne a4,a3,80034170 <_Z8PowerNESv+0x218> + 80034180: 00099797 auipc a5,0x99 + 80034184: b5878793 addi a5,a5,-1192 # 800cccd8 + 80034188: fffff717 auipc a4,0xfffff + 8003418c: 6f470713 addi a4,a4,1780 # 8003387c <_ZL5ARAMLj> + 80034190: 00e7b023 sd a4,0(a5) + 80034194: 00078593 mv a1,a5 + 80034198: ff878793 addi a5,a5,-8 + 8003419c: fec59ae3 bne a1,a2,80034190 <_Z8PowerNESv+0x238> + 800341a0: 00119797 auipc a5,0x119 + 800341a4: b3878793 addi a5,a5,-1224 # 8014ccd8 + 800341a8: fffff717 auipc a4,0xfffff + 800341ac: 6a070713 addi a4,a4,1696 # 80033848 <_ZL5BRAMLjh> + 800341b0: 00e7b023 sd a4,0(a5) + 800341b4: 00078613 mv a2,a5 + 800341b8: ff878793 addi a5,a5,-8 + 800341bc: fed61ae3 bne a2,a3,800341b0 <_Z8PowerNESv+0x258> + 800341c0: 000a5797 auipc a5,0xa5 + 800341c4: b1878793 addi a5,a5,-1256 # 800d8cd8 + 800341c8: 00099697 auipc a3,0x99 + 800341cc: b1068693 addi a3,a3,-1264 # 800cccd8 + 800341d0: fffff717 auipc a4,0xfffff + 800341d4: 6c870713 addi a4,a4,1736 # 80033898 <_ZL5ARAMHj> + 800341d8: 00e7b023 sd a4,0(a5) + 800341dc: ff878793 addi a5,a5,-8 + 800341e0: fed79ce3 bne a5,a3,800341d8 <_Z8PowerNESv+0x280> + 800341e4: 00125797 auipc a5,0x125 + 800341e8: af478793 addi a5,a5,-1292 # 80158cd8 + 800341ec: 00119697 auipc a3,0x119 + 800341f0: aec68693 addi a3,a3,-1300 # 8014ccd8 + 800341f4: fffff717 auipc a4,0xfffff + 800341f8: 67070713 addi a4,a4,1648 # 80033864 <_ZL5BRAMHjh> + 800341fc: 00e7b023 sd a4,0(a5) + 80034200: ff878793 addi a5,a5,-8 + 80034204: fed79ce3 bne a5,a3,800341fc <_Z8PowerNESv+0x2a4> + 80034208: ed9ff06f j 800340e0 <_Z8PowerNESv+0x188> + 8003420c: 00008067 ret + +0000000080034210 <_Z16FCEU_ResetVidSysv>: + 80034210: 00198797 auipc a5,0x198 + 80034214: 4387b783 ld a5,1080(a5) # 801cc648 + 80034218: 0107a783 lw a5,16(a5) + 8003421c: ff010113 addi sp,sp,-16 + 80034220: 00113423 sd ra,8(sp) + 80034224: 04078263 beqz a5,80034268 <_Z16FCEU_ResetVidSysv+0x58> + 80034228: 00100713 li a4,1 + 8003422c: 0ce78063 beq a5,a4,800342ec <_Z16FCEU_ResetVidSysv+0xdc> + 80034230: 00195517 auipc a0,0x195 + 80034234: ab052503 lw a0,-1360(a0) # 801c8ce0 + 80034238: 02050863 beqz a0,80034268 <_Z16FCEU_ResetVidSysv+0x58> + 8003423c: 00198797 auipc a5,0x198 + 80034240: 42e78223 sb a4,1060(a5) # 801cc660 + 80034244: 00198797 auipc a5,0x198 + 80034248: 9c07aa23 sw zero,-1580(a5) # 801cbc18 + 8003424c: 00198797 auipc a5,0x198 + 80034250: 5487a783 lw a5,1352(a5) # 801cc794 + 80034254: 0a079c63 bnez a5,8003430c <_Z16FCEU_ResetVidSysv+0xfc> + 80034258: 00198717 auipc a4,0x198 + 8003425c: 43474703 lbu a4,1076(a4) # 801cc68c + 80034260: 0f000793 li a5,240 + 80034264: 0300006f j 80034294 <_Z16FCEU_ResetVidSysv+0x84> + 80034268: 00198797 auipc a5,0x198 + 8003426c: 3e078c23 sb zero,1016(a5) # 801cc660 + 80034270: 00198797 auipc a5,0x198 + 80034274: 5247a783 lw a5,1316(a5) # 801cc794 + 80034278: 04079863 bnez a5,800342c8 <_Z16FCEU_ResetVidSysv+0xb8> + 8003427c: 00198517 auipc a0,0x198 + 80034280: 99c52503 lw a0,-1636(a0) # 801cbc18 + 80034284: 00198717 auipc a4,0x198 + 80034288: 40874703 lbu a4,1032(a4) # 801cc68c + 8003428c: 08050e63 beqz a0,80034328 <_Z16FCEU_ResetVidSysv+0x118> + 80034290: 12200793 li a5,290 + 80034294: 00198697 auipc a3,0x198 + 80034298: 3ef6aa23 sw a5,1012(a3) # 801cc688 + 8003429c: 00070863 beqz a4,800342ac <_Z16FCEU_ResetVidSysv+0x9c> + 800342a0: 00198717 auipc a4,0x198 + 800342a4: 3f072703 lw a4,1008(a4) # 801cc690 + 800342a8: 00f707bb addw a5,a4,a5 + 800342ac: 00a03533 snez a0,a0 + 800342b0: 00198717 auipc a4,0x198 + 800342b4: 3ef72823 sw a5,1008(a4) # 801cc6a0 + 800342b8: 388040ef jal ra,80038640 <_Z22FCEUPPU_SetVideoSystemi> + 800342bc: 00813083 ld ra,8(sp) + 800342c0: 01010113 addi sp,sp,16 + 800342c4: d18d906f j 8000d7dc <_Z17SetSoundVariablesv> + 800342c8: 00198517 auipc a0,0x198 + 800342cc: 95052503 lw a0,-1712(a0) # 801cbc18 + 800342d0: 00198717 auipc a4,0x198 + 800342d4: 3a070e23 sb zero,956(a4) # 801cc68c + 800342d8: 04050c63 beqz a0,80034330 <_Z16FCEU_ResetVidSysv+0x120> + 800342dc: 1227879b addiw a5,a5,290 + 800342e0: 00198697 auipc a3,0x198 + 800342e4: 3af6a423 sw a5,936(a3) # 801cc688 + 800342e8: fc5ff06f j 800342ac <_Z16FCEU_ResetVidSysv+0x9c> + 800342ec: 00198717 auipc a4,0x198 + 800342f0: 36f70a23 sb a5,884(a4) # 801cc660 + 800342f4: 00198797 auipc a5,0x198 + 800342f8: 9207a223 sw zero,-1756(a5) # 801cbc18 + 800342fc: 00198797 auipc a5,0x198 + 80034300: 4987a783 lw a5,1176(a5) # 801cc794 + 80034304: 00100513 li a0,1 + 80034308: f40788e3 beqz a5,80034258 <_Z16FCEU_ResetVidSysv+0x48> + 8003430c: 0f07871b addiw a4,a5,240 + 80034310: 00198797 auipc a5,0x198 + 80034314: 36078e23 sb zero,892(a5) # 801cc68c + 80034318: 0007079b sext.w a5,a4 + 8003431c: 00198697 auipc a3,0x198 + 80034320: 36e6a623 sw a4,876(a3) # 801cc688 + 80034324: f89ff06f j 800342ac <_Z16FCEU_ResetVidSysv+0x9c> + 80034328: 0f000793 li a5,240 + 8003432c: f69ff06f j 80034294 <_Z16FCEU_ResetVidSysv+0x84> + 80034330: 0f07879b addiw a5,a5,240 + 80034334: 00198697 auipc a3,0x198 + 80034338: 34f6aa23 sw a5,852(a3) # 801cc688 + 8003433c: f71ff06f j 800342ac <_Z16FCEU_ResetVidSysv+0x9c> + +0000000080034340 <_Z21FCEUI_LoadGameVirtualPKcib>: + 80034340: 81010113 addi sp,sp,-2032 + 80034344: 7e813023 sd s0,2016(sp) + 80034348: 7c913c23 sd s1,2008(sp) + 8003434c: 7d213823 sd s2,2000(sp) + 80034350: 7d313423 sd s3,1992(sp) + 80034354: 7d413023 sd s4,1984(sp) + 80034358: 7b513c23 sd s5,1976(sp) + 8003435c: 7b613823 sd s6,1968(sp) + 80034360: 7b713423 sd s7,1960(sp) + 80034364: 7e113423 sd ra,2024(sp) + 80034368: 000016b7 lui a3,0x1 + 8003436c: f7010113 addi sp,sp,-144 + 80034370: 82068893 addi a7,a3,-2016 # 820 <_entry_offset+0x820> + 80034374: 01010313 addi t1,sp,16 + 80034378: 006888b3 add a7,a7,t1 + 8003437c: fffff737 lui a4,0xfffff + 80034380: 7e470813 addi a6,a4,2020 # fffffffffffff7e4 <_end+0xffffffff7fe2a7e4> + 80034384: 7e870793 addi a5,a4,2024 + 80034388: 00e88733 add a4,a7,a4 + 8003438c: 00e13423 sd a4,8(sp) + 80034390: 00813303 ld t1,8(sp) + 80034394: 01088833 add a6,a7,a6 + 80034398: 00f887b3 add a5,a7,a5 + 8003439c: 00012897 auipc a7,0x12 + 800343a0: 1f488893 addi a7,a7,500 # 80046590 + 800343a4: 7f133423 sd a7,2024(t1) # 87e8 <_entry_offset+0x87e8> + 800343a8: 00058493 mv s1,a1 + 800343ac: 00012897 auipc a7,0x12 + 800343b0: 1ec88893 addi a7,a7,492 # 80046598 + 800343b4: 00060993 mv s3,a2 + 800343b8: 00198a17 auipc s4,0x198 + 800343bc: 2a8a0a13 addi s4,s4,680 # 801cc660 + 800343c0: 00198a97 auipc s5,0x198 + 800343c4: 858a8a93 addi s5,s5,-1960 # 801cbc18 + 800343c8: fff00713 li a4,-1 + 800343cc: 00000693 li a3,0 + 800343d0: 00009617 auipc a2,0x9 + 800343d4: 96060613 addi a2,a2,-1696 # 8003cd30 <_etext+0x4c> + 800343d8: 00000593 li a1,0 + 800343dc: 000a4b03 lbu s6,0(s4) + 800343e0: 000aab83 lw s7,0(s5) + 800343e4: 00050913 mv s2,a0 + 800343e8: 7f133823 sd a7,2032(t1) + 800343ec: 7e033c23 sd zero,2040(t1) + 800343f0: 7e032223 sw zero,2020(t1) + 800343f4: 8eccc0ef jal ra,800004e0 <_Z10FCEU_fopenPKcS0_S0_PciPS0_Pi> + 800343f8: 00050413 mv s0,a0 + 800343fc: 18050663 beqz a0,80034588 <_Z21FCEUI_LoadGameVirtualPKcib+0x248> + 80034400: 00090593 mv a1,s2 + 80034404: 03010513 addi a0,sp,48 + 80034408: 700070ef jal ra,8003bb08 + 8003440c: fdcff0ef jal ra,80033be8 <_Z15ResetGameLoadedv> + 80034410: 00012517 auipc a0,0x12 + 80034414: 1a850513 addi a0,a0,424 # 800465b8 + 80034418: 130070ef jal ra,8003b548 + 8003441c: c94ff0ef jal ra,800338b0 <_ZL14FCEU_CloseGamev> + 80034420: 04000513 li a0,64 + 80034424: 785050ef jal ra,8003a3a8 + 80034428: 00198917 auipc s2,0x198 + 8003442c: 22090913 addi s2,s2,544 # 801cc648 + 80034430: 04000613 li a2,64 + 80034434: 00000593 li a1,0 + 80034438: 00a93023 sd a0,0(s2) + 8003443c: 5ec070ef jal ra,8003ba28 + 80034440: 00842603 lw a2,8(s0) + 80034444: 00093783 ld a5,0(s2) + 80034448: fff00693 li a3,-1 + 8003444c: 02069713 slli a4,a3,0x20 + 80034450: 00270713 addi a4,a4,2 + 80034454: 02c7ae23 sw a2,60(a5) + 80034458: 0207ac23 sw zero,56(a5) + 8003445c: 0207aa23 sw zero,52(a5) + 80034460: 0007b023 sd zero,0(a5) + 80034464: 0007a623 sw zero,12(a5) + 80034468: 00e7b823 sd a4,16(a5) + 8003446c: 00d7bc23 sd a3,24(a5) + 80034470: 0207a023 sw zero,32(a5) + 80034474: 00048613 mv a2,s1 + 80034478: 00040593 mv a1,s0 + 8003447c: 03010513 addi a0,sp,48 + 80034480: cb5da0ef jal ra,8000f134 <_Z8iNESLoadPKcP8FCEUFILEi> + 80034484: 04050063 beqz a0,800344c4 <_Z21FCEUI_LoadGameVirtualPKcib+0x184> + 80034488: 12049263 bnez s1,800345ac <_Z21FCEUI_LoadGameVirtualPKcib+0x26c> + 8003448c: acdff0ef jal ra,80033f58 <_Z8PowerNESv> + 80034490: 00093703 ld a4,0(s2) + 80034494: 00300793 li a5,3 + 80034498: 00c72703 lw a4,12(a4) + 8003449c: 00f70463 beq a4,a5,800344a4 <_Z21FCEUI_LoadGameVirtualPKcib+0x164> + 800344a0: cf4cc0ef jal ra,80000994 <_Z20FCEU_LoadGamePalettev> + 800344a4: d18cc0ef jal ra,800009bc <_Z17FCEU_ResetPalettev> + 800344a8: 060b1863 bnez s6,80034518 <_Z21FCEUI_LoadGameVirtualPKcib+0x1d8> + 800344ac: 000a4783 lbu a5,0(s4) + 800344b0: 0a079e63 bnez a5,8003456c <_Z21FCEUI_LoadGameVirtualPKcib+0x22c> + 800344b4: 080b9a63 bnez s7,80034548 <_Z21FCEUI_LoadGameVirtualPKcib+0x208> + 800344b8: 000aa783 lw a5,0(s5) + 800344bc: 00078e63 beqz a5,800344d8 <_Z21FCEUI_LoadGameVirtualPKcib+0x198> + 800344c0: 0640006f j 80034524 <_Z21FCEUI_LoadGameVirtualPKcib+0x1e4> + 800344c4: 0e098863 beqz s3,800345b4 <_Z21FCEUI_LoadGameVirtualPKcib+0x274> + 800344c8: 00093503 ld a0,0(s2) + 800344cc: 6ed050ef jal ra,8003a3b8 + 800344d0: 00198797 auipc a5,0x198 + 800344d4: 1607bc23 sd zero,376(a5) # 801cc648 + 800344d8: 00040513 mv a0,s0 + 800344dc: 91ccc0ef jal ra,800005f8 <_Z11FCEU_fcloseP8FCEUFILE> + 800344e0: 00093403 ld s0,0(s2) + 800344e4: 09010113 addi sp,sp,144 + 800344e8: 7e813083 ld ra,2024(sp) + 800344ec: 00040513 mv a0,s0 + 800344f0: 7d813483 ld s1,2008(sp) + 800344f4: 7e013403 ld s0,2016(sp) + 800344f8: 7d013903 ld s2,2000(sp) + 800344fc: 7c813983 ld s3,1992(sp) + 80034500: 7c013a03 ld s4,1984(sp) + 80034504: 7b813a83 ld s5,1976(sp) + 80034508: 7b013b03 ld s6,1968(sp) + 8003450c: 7a813b83 ld s7,1960(sp) + 80034510: 7f010113 addi sp,sp,2032 + 80034514: 00008067 ret + 80034518: 020b9463 bnez s7,80034540 <_Z21FCEUI_LoadGameVirtualPKcib+0x200> + 8003451c: 000aa783 lw a5,0(s5) + 80034520: 0a078263 beqz a5,800345c4 <_Z21FCEUI_LoadGameVirtualPKcib+0x284> + 80034524: 00012517 auipc a0,0x12 + 80034528: 0b450513 addi a0,a0,180 # 800465d8 + 8003452c: 01c070ef jal ra,8003b548 + 80034530: 00012517 auipc a0,0x12 + 80034534: 0a850513 addi a0,a0,168 # 800465d8 + 80034538: 010070ef jal ra,8003b548 + 8003453c: f9dff06f j 800344d8 <_Z21FCEUI_LoadGameVirtualPKcib+0x198> + 80034540: 000a4783 lbu a5,0(s4) + 80034544: f8079ae3 bnez a5,800344d8 <_Z21FCEUI_LoadGameVirtualPKcib+0x198> + 80034548: 000aa783 lw a5,0(s5) + 8003454c: f80796e3 bnez a5,800344d8 <_Z21FCEUI_LoadGameVirtualPKcib+0x198> + 80034550: 00012517 auipc a0,0x12 + 80034554: 09850513 addi a0,a0,152 # 800465e8 + 80034558: 7f1060ef jal ra,8003b548 + 8003455c: 00012517 auipc a0,0x12 + 80034560: 08c50513 addi a0,a0,140 # 800465e8 + 80034564: 7e5060ef jal ra,8003b548 + 80034568: f71ff06f j 800344d8 <_Z21FCEUI_LoadGameVirtualPKcib+0x198> + 8003456c: 00012517 auipc a0,0x12 + 80034570: 05c50513 addi a0,a0,92 # 800465c8 + 80034574: 7d5060ef jal ra,8003b548 + 80034578: 00012517 auipc a0,0x12 + 8003457c: 05050513 addi a0,a0,80 # 800465c8 + 80034580: 7c9060ef jal ra,8003b548 + 80034584: f55ff06f j 800344d8 <_Z21FCEUI_LoadGameVirtualPKcib+0x198> + 80034588: f4099ee3 bnez s3,800344e4 <_Z21FCEUI_LoadGameVirtualPKcib+0x1a4> + 8003458c: 00813783 ld a5,8(sp) + 80034590: 7e47a783 lw a5,2020(a5) + 80034594: f40798e3 bnez a5,800344e4 <_Z21FCEUI_LoadGameVirtualPKcib+0x1a4> + 80034598: 00090593 mv a1,s2 + 8003459c: 00012517 auipc a0,0x12 + 800345a0: 00450513 addi a0,a0,4 # 800465a0 + 800345a4: 7a5060ef jal ra,8003b548 + 800345a8: f3dff06f j 800344e4 <_Z21FCEUI_LoadGameVirtualPKcib+0x1a4> + 800345ac: c65ff0ef jal ra,80034210 <_Z16FCEU_ResetVidSysv> + 800345b0: eddff06f j 8003448c <_Z21FCEUI_LoadGameVirtualPKcib+0x14c> + 800345b4: 00012517 auipc a0,0x12 + 800345b8: 04450513 addi a0,a0,68 # 800465f8 + 800345bc: 78d060ef jal ra,8003b548 + 800345c0: f09ff06f j 800344c8 <_Z21FCEUI_LoadGameVirtualPKcib+0x188> + 800345c4: 000a4783 lbu a5,0(s4) + 800345c8: f80784e3 beqz a5,80034550 <_Z21FCEUI_LoadGameVirtualPKcib+0x210> + 800345cc: f0dff06f j 800344d8 <_Z21FCEUI_LoadGameVirtualPKcib+0x198> + +00000000800345d0 <_Z14FCEUI_LoadGamePKcib>: + 800345d0: d71ff06f j 80034340 <_Z21FCEUI_LoadGameVirtualPKcib> + +00000000800345d4 <_Z22FCEUI_SetRenderedLinesiiii>: + 800345d4: 00194797 auipc a5,0x194 + 800345d8: 70c78793 addi a5,a5,1804 # 801c8ce0 + 800345dc: 02a7a623 sw a0,44(a5) + 800345e0: 02b7aa23 sw a1,52(a5) + 800345e4: 02c7a823 sw a2,48(a5) + 800345e8: 02d7ac23 sw a3,56(a5) + 800345ec: 00198717 auipc a4,0x198 + 800345f0: 07474703 lbu a4,116(a4) # 801cc660 + 800345f4: 00071863 bnez a4,80034604 <_Z22FCEUI_SetRenderedLinesiiii+0x30> + 800345f8: 00197717 auipc a4,0x197 + 800345fc: 62072703 lw a4,1568(a4) # 801cbc18 + 80034600: 00070863 beqz a4,80034610 <_Z22FCEUI_SetRenderedLinesiiii+0x3c> + 80034604: 02c7a223 sw a2,36(a5) + 80034608: 02d7a423 sw a3,40(a5) + 8003460c: 00008067 ret + 80034610: 02a7a223 sw a0,36(a5) + 80034614: 02b7a423 sw a1,40(a5) + 80034618: 00008067 ret + +000000008003461c <_Z18FCEUI_SetVidSystemi>: + 8003461c: 00a03533 snez a0,a0 + 80034620: 00194797 auipc a5,0x194 + 80034624: 6ca7a023 sw a0,1728(a5) # 801c8ce0 + 80034628: 00198797 auipc a5,0x198 + 8003462c: 0207b783 ld a5,32(a5) # 801cc648 + 80034630: 02078063 beqz a5,80034650 <_Z18FCEUI_SetVidSystemi+0x34> + 80034634: ff010113 addi sp,sp,-16 + 80034638: 00113423 sd ra,8(sp) + 8003463c: bd5ff0ef jal ra,80034210 <_Z16FCEU_ResetVidSysv> + 80034640: b7ccc0ef jal ra,800009bc <_Z17FCEU_ResetPalettev> + 80034644: 00813083 ld ra,8(sp) + 80034648: 01010113 addi sp,sp,16 + 8003464c: b78da06f j 8000e9c4 <_Z18FCEUD_VideoChangedv> + 80034650: 00008067 ret + +0000000080034654 <_Z15FCEUI_SetRegionii>: + 80034654: 00100793 li a5,1 + 80034658: 0cf50c63 beq a0,a5,80034730 <_Z15FCEUI_SetRegionii+0xdc> + 8003465c: 00200713 li a4,2 + 80034660: 0ae50663 beq a0,a4,8003470c <_Z15FCEUI_SetRegionii+0xb8> + 80034664: 08050463 beqz a0,800346ec <_Z15FCEUI_SetRegionii+0x98> + 80034668: 00198717 auipc a4,0x198 + 8003466c: 02070713 addi a4,a4,32 # 801cc688 + 80034670: 00072683 lw a3,0(a4) + 80034674: 00197517 auipc a0,0x197 + 80034678: 5b452503 lw a0,1460(a0) # 801cbc28 + 8003467c: 00a03533 snez a0,a0 + 80034680: 00198797 auipc a5,0x198 + 80034684: 1147a783 lw a5,276(a5) # 801cc794 + 80034688: 00d787bb addw a5,a5,a3 + 8003468c: 00f72023 sw a5,0(a4) + 80034690: 00198697 auipc a3,0x198 + 80034694: ffc6c683 lbu a3,-4(a3) # 801cc68c + 80034698: 0007871b sext.w a4,a5 + 8003469c: 00068863 beqz a3,800346ac <_Z15FCEUI_SetRegionii+0x58> + 800346a0: 00198717 auipc a4,0x198 + 800346a4: ff072703 lw a4,-16(a4) # 801cc690 + 800346a8: 00f7073b addw a4,a4,a5 + 800346ac: 00198797 auipc a5,0x198 + 800346b0: fee7aa23 sw a4,-12(a5) # 801cc6a0 + 800346b4: 00194797 auipc a5,0x194 + 800346b8: 62a7a623 sw a0,1580(a5) # 801c8ce0 + 800346bc: 00198797 auipc a5,0x198 + 800346c0: f8c7b783 ld a5,-116(a5) # 801cc648 + 800346c4: 02078263 beqz a5,800346e8 <_Z15FCEUI_SetRegionii+0x94> + 800346c8: ff010113 addi sp,sp,-16 + 800346cc: 00113423 sd ra,8(sp) + 800346d0: b41ff0ef jal ra,80034210 <_Z16FCEU_ResetVidSysv> + 800346d4: ae8cc0ef jal ra,800009bc <_Z17FCEU_ResetPalettev> + 800346d8: aecda0ef jal ra,8000e9c4 <_Z18FCEUD_VideoChangedv> + 800346dc: 00813083 ld ra,8(sp) + 800346e0: 01010113 addi sp,sp,16 + 800346e4: 80dd906f j 8000def0 <_Z18RefreshThrottleFPSv> + 800346e8: 809d906f j 8000def0 <_Z18RefreshThrottleFPSv> + 800346ec: 00197797 auipc a5,0x197 + 800346f0: 5207ae23 sw zero,1340(a5) # 801cbc28 + 800346f4: 00197797 auipc a5,0x197 + 800346f8: 5207a223 sw zero,1316(a5) # 801cbc18 + 800346fc: 0f000693 li a3,240 + 80034700: 00198717 auipc a4,0x198 + 80034704: f8870713 addi a4,a4,-120 # 801cc688 + 80034708: f79ff06f j 80034680 <_Z15FCEUI_SetRegionii+0x2c> + 8003470c: 00197717 auipc a4,0x197 + 80034710: 50072e23 sw zero,1308(a4) # 801cbc28 + 80034714: 00197717 auipc a4,0x197 + 80034718: 50f72223 sw a5,1284(a4) # 801cbc18 + 8003471c: 00000513 li a0,0 + 80034720: 12200693 li a3,290 + 80034724: 00198717 auipc a4,0x198 + 80034728: f6470713 addi a4,a4,-156 # 801cc688 + 8003472c: f55ff06f j 80034680 <_Z15FCEUI_SetRegionii+0x2c> + 80034730: 00197797 auipc a5,0x197 + 80034734: 4ea7ac23 sw a0,1272(a5) # 801cbc28 + 80034738: 00197797 auipc a5,0x197 + 8003473c: 4e07a023 sw zero,1248(a5) # 801cbc18 + 80034740: 0f000693 li a3,240 + 80034744: 00198717 auipc a4,0x198 + 80034748: f4470713 addi a4,a4,-188 # 801cc688 + 8003474c: f35ff06f j 80034680 <_Z15FCEUI_SetRegionii+0x2c> + +0000000080034750 <_Z19FCEUI_GetDesiredFPSv>: + 80034750: 00198797 auipc a5,0x198 + 80034754: f107c783 lbu a5,-240(a5) # 801cc660 + 80034758: 03200513 li a0,50 + 8003475c: 00079863 bnez a5,8003476c <_Z19FCEUI_GetDesiredFPSv+0x1c> + 80034760: 00197797 auipc a5,0x197 + 80034764: 4b87a783 lw a5,1208(a5) # 801cbc18 + 80034768: 00078463 beqz a5,80034770 <_Z19FCEUI_GetDesiredFPSv+0x20> + 8003476c: 00008067 ret + 80034770: 03c00513 li a0,60 + 80034774: 00008067 ret + +0000000080034778 <_Z21FCEUI_EmulationPausedv>: + 80034778: 00198517 auipc a0,0x198 + 8003477c: ec852503 lw a0,-312(a0) # 801cc640 + 80034780: 00157513 andi a0,a0,1 + 80034784: 00008067 ret + +0000000080034788 <_ZL5B2002jh>: + 80034788: 00198797 auipc a5,0x198 + 8003478c: f6b78ea3 sb a1,-131(a5) # 801cc705 + 80034790: 00008067 ret + +0000000080034794 <_ZL5B2003jh>: + 80034794: 0075f793 andi a5,a1,7 + 80034798: 00198717 auipc a4,0x198 + 8003479c: f6b706a3 sb a1,-147(a4) # 801cc705 + 800347a0: 00198717 auipc a4,0x198 + 800347a4: f6b701a3 sb a1,-157(a4) # 801cc703 + 800347a8: 00198717 auipc a4,0x198 + 800347ac: f4f70fa3 sb a5,-161(a4) # 801cc707 + 800347b0: 00008067 ret + +00000000800347b4 <_ZL5B4014jh>: + 800347b4: fd010113 addi sp,sp,-48 + 800347b8: 00913c23 sd s1,24(sp) + 800347bc: 01213823 sd s2,16(sp) + 800347c0: 000024b7 lui s1,0x2 + 800347c4: 0085991b slliw s2,a1,0x8 + 800347c8: 02813023 sd s0,32(sp) + 800347cc: 01313423 sd s3,8(sp) + 800347d0: 02113423 sd ra,40(sp) + 800347d4: 00058993 mv s3,a1 + 800347d8: 00859413 slli s0,a1,0x8 + 800347dc: 1009091b addiw s2,s2,256 + 800347e0: 00448493 addi s1,s1,4 # 2004 <_entry_offset+0x2004> + 800347e4: 00040513 mv a0,s0 + 800347e8: c50cc0ef jal ra,80000c38 <_Z9X6502_DMRj> + 800347ec: 00050593 mv a1,a0 + 800347f0: 0014041b addiw s0,s0,1 + 800347f4: 00048513 mv a0,s1 + 800347f8: cd0cc0ef jal ra,80000cc8 <_Z9X6502_DMWjh> + 800347fc: ff2414e3 bne s0,s2,800347e4 <_ZL5B4014jh+0x30> + 80034800: 02813083 ld ra,40(sp) + 80034804: 02013403 ld s0,32(sp) + 80034808: 00198797 auipc a5,0x198 + 8003480c: f1378823 sb s3,-240(a5) # 801cc718 + 80034810: 01813483 ld s1,24(sp) + 80034814: 01013903 ld s2,16(sp) + 80034818: 00813983 ld s3,8(sp) + 8003481c: 03010113 addi sp,sp,48 + 80034820: 00008067 ret + +0000000080034824 <_Z22FFCEUX_PPURead_Defaultj>: + 80034824: ff010113 addi sp,sp,-16 + 80034828: 00813023 sd s0,0(sp) + 8003482c: 00113423 sd ra,8(sp) + 80034830: 00198797 auipc a5,0x198 + 80034834: ed87b783 ld a5,-296(a5) # 801cc708 + 80034838: 00050413 mv s0,a0 + 8003483c: 00078463 beqz a5,80034844 <_Z22FFCEUX_PPURead_Defaultj+0x20> + 80034840: 000780e7 jalr a5 + 80034844: 000027b7 lui a5,0x2 + 80034848: 08f46263 bltu s0,a5,800348cc <_Z22FFCEUX_PPURead_Defaultj+0xa8> + 8003484c: 000047b7 lui a5,0x4 + 80034850: eff78793 addi a5,a5,-257 # 3eff <_entry_offset+0x3eff> + 80034854: 0287ee63 bltu a5,s0,80034890 <_Z22FFCEUX_PPURead_Defaultj+0x6c> + 80034858: 00a4579b srliw a5,s0,0xa + 8003485c: 0037f793 andi a5,a5,3 + 80034860: 00379793 slli a5,a5,0x3 + 80034864: 00197717 auipc a4,0x197 + 80034868: 25c70713 addi a4,a4,604 # 801cbac0 + 8003486c: 00f707b3 add a5,a4,a5 + 80034870: 0007b503 ld a0,0(a5) + 80034874: 3ff47413 andi s0,s0,1023 + 80034878: 00850433 add s0,a0,s0 + 8003487c: 00044503 lbu a0,0(s0) + 80034880: 00813083 ld ra,8(sp) + 80034884: 00013403 ld s0,0(sp) + 80034888: 01010113 addi sp,sp,16 + 8003488c: 00008067 ret + 80034890: 00198717 auipc a4,0x198 + 80034894: e7174703 lbu a4,-399(a4) # 801cc701 + 80034898: 00347793 andi a5,s0,3 + 8003489c: 00177713 andi a4,a4,1 + 800348a0: 06079263 bnez a5,80034904 <_Z22FFCEUX_PPURead_Defaultj+0xe0> + 800348a4: 00c47793 andi a5,s0,12 + 800348a8: 06079e63 bnez a5,80034924 <_Z22FFCEUX_PPURead_Defaultj+0x100> + 800348ac: 00195517 auipc a0,0x195 + 800348b0: 47c54503 lbu a0,1148(a0) # 801c9d28 + 800348b4: fc0706e3 beqz a4,80034880 <_Z22FFCEUX_PPURead_Defaultj+0x5c> + 800348b8: 03057513 andi a0,a0,48 + 800348bc: 00813083 ld ra,8(sp) + 800348c0: 00013403 ld s0,0(sp) + 800348c4: 01010113 addi sp,sp,16 + 800348c8: 00008067 ret + 800348cc: 00a4579b srliw a5,s0,0xa + 800348d0: 00379713 slli a4,a5,0x3 + 800348d4: 0008e797 auipc a5,0x8e + 800348d8: 46c78793 addi a5,a5,1132 # 800c2d40 + 800348dc: 00e787b3 add a5,a5,a4 + 800348e0: 0007b503 ld a0,0(a5) + 800348e4: 02041413 slli s0,s0,0x20 + 800348e8: 02045413 srli s0,s0,0x20 + 800348ec: 00850433 add s0,a0,s0 + 800348f0: 00044503 lbu a0,0(s0) + 800348f4: 00813083 ld ra,8(sp) + 800348f8: 00013403 ld s0,0(sp) + 800348fc: 01010113 addi sp,sp,16 + 80034900: 00008067 ret + 80034904: 01f47413 andi s0,s0,31 + 80034908: 00195797 auipc a5,0x195 + 8003490c: 42078793 addi a5,a5,1056 # 801c9d28 + 80034910: 00878433 add s0,a5,s0 + 80034914: 00044503 lbu a0,0(s0) + 80034918: f60704e3 beqz a4,80034880 <_Z22FFCEUX_PPURead_Defaultj+0x5c> + 8003491c: 03057513 andi a0,a0,48 + 80034920: f9dff06f j 800348bc <_Z22FFCEUX_PPURead_Defaultj+0x98> + 80034924: 0024579b srliw a5,s0,0x2 + 80034928: 0037f793 andi a5,a5,3 + 8003492c: fff7879b addiw a5,a5,-1 + 80034930: 02079793 slli a5,a5,0x20 + 80034934: 0207d793 srli a5,a5,0x20 + 80034938: 00198697 auipc a3,0x198 + 8003493c: de868693 addi a3,a3,-536 # 801cc720 + 80034940: 00f687b3 add a5,a3,a5 + 80034944: 0007c503 lbu a0,0(a5) + 80034948: f2070ce3 beqz a4,80034880 <_Z22FFCEUX_PPURead_Defaultj+0x5c> + 8003494c: 03057513 andi a0,a0,48 + 80034950: f6dff06f j 800348bc <_Z22FFCEUX_PPURead_Defaultj+0x98> + +0000000080034954 <_ZL5B2004jh>: + 80034954: 00198717 auipc a4,0x198 + 80034958: dac70713 addi a4,a4,-596 # 801cc700 + 8003495c: 00198797 auipc a5,0x198 + 80034960: dab784a3 sb a1,-599(a5) # 801cc705 + 80034964: 00198697 auipc a3,0x198 + 80034968: e306a683 lw a3,-464(a3) # 801cc794 + 8003496c: 00374783 lbu a5,3(a4) + 80034970: 02068863 beqz a3,800349a0 <_ZL5B2004jh+0x4c> + 80034974: 0037f613 andi a2,a5,3 + 80034978: 00200693 li a3,2 + 8003497c: 0007851b sext.w a0,a5 + 80034980: 08d60063 beq a2,a3,80034a00 <_ZL5B2004jh+0xac> + 80034984: 00196697 auipc a3,0x196 + 80034988: bc468693 addi a3,a3,-1084 # 801ca548 + 8003498c: 00a686b3 add a3,a3,a0 + 80034990: 0017879b addiw a5,a5,1 + 80034994: 00b68023 sb a1,0(a3) + 80034998: 00f701a3 sb a5,3(a4) + 8003499c: 00008067 ret + 800349a0: 00198617 auipc a2,0x198 + 800349a4: d6760613 addi a2,a2,-665 # 801cc707 + 800349a8: 00064683 lbu a3,0(a2) + 800349ac: 00700513 li a0,7 + 800349b0: 02d56463 bltu a0,a3,800349d8 <_ZL5B2004jh+0x84> + 800349b4: 00196517 auipc a0,0x196 + 800349b8: b9450513 addi a0,a0,-1132 # 801ca548 + 800349bc: 00d50533 add a0,a0,a3 + 800349c0: 00b50023 sb a1,0(a0) + 800349c4: 0017879b addiw a5,a5,1 + 800349c8: 0016869b addiw a3,a3,1 + 800349cc: 00f701a3 sb a5,3(a4) + 800349d0: 00d60023 sb a3,0(a2) + 800349d4: 00008067 ret + 800349d8: fef576e3 bgeu a0,a5,800349c4 <_ZL5B2004jh+0x70> + 800349dc: 00196517 auipc a0,0x196 + 800349e0: b6c50513 addi a0,a0,-1172 # 801ca548 + 800349e4: 00f50533 add a0,a0,a5 + 800349e8: 0016869b addiw a3,a3,1 + 800349ec: 0017879b addiw a5,a5,1 + 800349f0: 00b50023 sb a1,0(a0) + 800349f4: 00f701a3 sb a5,3(a4) + 800349f8: 00d60023 sb a3,0(a2) + 800349fc: 00008067 ret + 80034a00: 00196697 auipc a3,0x196 + 80034a04: b4868693 addi a3,a3,-1208 # 801ca548 + 80034a08: 0e35f593 andi a1,a1,227 + 80034a0c: 00a686b3 add a3,a3,a0 + 80034a10: 0017879b addiw a5,a5,1 + 80034a14: 00b68023 sb a1,0(a3) + 80034a18: 00f701a3 sb a5,3(a4) + 80034a1c: 00008067 ret + +0000000080034a20 <_ZL14CheckSpriteHiti>: + 80034a20: 00198f97 auipc t6,0x198 + 80034a24: d38f8f93 addi t6,t6,-712 # 801cc758 <_ZL6sphitx> + 80034a28: 000fa803 lw a6,0(t6) + 80034a2c: 10000793 li a5,256 + 80034a30: ff05071b addiw a4,a0,-16 + 80034a34: 06f80e63 beq a6,a5,80034ab0 <_ZL14CheckSpriteHiti+0x90> + 80034a38: 06e85c63 bge a6,a4,80034ab0 <_ZL14CheckSpriteHiti+0x90> + 80034a3c: 410505bb subw a1,a0,a6 + 80034a40: fef5859b addiw a1,a1,-17 + 80034a44: 02059593 slli a1,a1,0x20 + 80034a48: 00198317 auipc t1,0x198 + 80034a4c: d1834303 lbu t1,-744(t1) # 801cc760 <_ZL9sphitdata> + 80034a50: 00198897 auipc a7,0x198 + 80034a54: d008b883 ld a7,-768(a7) # 801cc750 <_ZL6Plinef> + 80034a58: 00080e9b sext.w t4,a6 + 80034a5c: 0205d593 srli a1,a1,0x20 + 80034a60: 00000793 li a5,0 + 80034a64: 08000513 li a0,128 + 80034a68: 0fe00f13 li t5,254 + 80034a6c: 00700e13 li t3,7 + 80034a70: 00f80733 add a4,a6,a5 + 80034a74: 00e886b3 add a3,a7,a4 + 80034a78: 40f5573b sraw a4,a0,a5 + 80034a7c: 00e37733 and a4,t1,a4 + 80034a80: 0007861b sext.w a2,a5 + 80034a84: 00070c63 beqz a4,80034a9c <_ZL14CheckSpriteHiti+0x7c> + 80034a88: 0006c703 lbu a4,0(a3) + 80034a8c: 01d6063b addw a2,a2,t4 + 80034a90: 04077713 andi a4,a4,64 + 80034a94: 00071463 bnez a4,80034a9c <_ZL14CheckSpriteHiti+0x7c> + 80034a98: 00cf5e63 bge t5,a2,80034ab4 <_ZL14CheckSpriteHiti+0x94> + 80034a9c: 01c78a63 beq a5,t3,80034ab0 <_ZL14CheckSpriteHiti+0x90> + 80034aa0: 00178713 addi a4,a5,1 + 80034aa4: 00b78663 beq a5,a1,80034ab0 <_ZL14CheckSpriteHiti+0x90> + 80034aa8: 00070793 mv a5,a4 + 80034aac: fc5ff06f j 80034a70 <_ZL14CheckSpriteHiti+0x50> + 80034ab0: 00008067 ret + 80034ab4: 00198717 auipc a4,0x198 + 80034ab8: c4c70713 addi a4,a4,-948 # 801cc700 + 80034abc: 00274783 lbu a5,2(a4) + 80034ac0: 10000693 li a3,256 + 80034ac4: 00dfa023 sw a3,0(t6) + 80034ac8: 0407e793 ori a5,a5,64 + 80034acc: 00f70123 sb a5,2(a4) + 80034ad0: 00008067 ret + +0000000080034ad4 <_ZL6Fixit1v.part.0>: + 80034ad4: 00198617 auipc a2,0x198 + 80034ad8: c4060613 addi a2,a2,-960 # 801cc714 + 80034adc: 00062683 lw a3,0(a2) + 80034ae0: 000077b7 lui a5,0x7 + 80034ae4: 000075b7 lui a1,0x7 + 80034ae8: 00f6f733 and a4,a3,a5 + 80034aec: 0007071b sext.w a4,a4 + 80034af0: 00b70a63 beq a4,a1,80034b04 <_ZL6Fixit1v.part.0+0x30> + 80034af4: 000017b7 lui a5,0x1 + 80034af8: 00d787bb addw a5,a5,a3 + 80034afc: 00f62023 sw a5,0(a2) + 80034b00: 00008067 ret + 80034b04: 00f6c7b3 xor a5,a3,a5 + 80034b08: 3e07f593 andi a1,a5,992 + 80034b0c: 3a000513 li a0,928 + 80034b10: 0007879b sext.w a5,a5 + 80034b14: 02a58063 beq a1,a0,80034b34 <_ZL6Fixit1v.part.0+0x60> + 80034b18: 3e000513 li a0,992 + 80034b1c: 0207879b addiw a5,a5,32 + 80034b20: fca59ee3 bne a1,a0,80034afc <_ZL6Fixit1v.part.0+0x28> + 80034b24: 3e070713 addi a4,a4,992 + 80034b28: 00e6c733 xor a4,a3,a4 + 80034b2c: 0007079b sext.w a5,a4 + 80034b30: fcdff06f j 80034afc <_ZL6Fixit1v.part.0+0x28> + 80034b34: 000087b7 lui a5,0x8 + 80034b38: ba078793 addi a5,a5,-1120 # 7ba0 <_entry_offset+0x7ba0> + 80034b3c: 00f6c7b3 xor a5,a3,a5 + 80034b40: 00f62023 sw a5,0(a2) + 80034b44: 00008067 ret + +0000000080034b48 <_ZL11RefreshLinei>: + 80034b48: f8010113 addi sp,sp,-128 + 80034b4c: 06913423 sd s1,104(sp) + 80034b50: 05513423 sd s5,72(sp) + 80034b54: 06113c23 sd ra,120(sp) + 80034b58: 06813823 sd s0,112(sp) + 80034b5c: 07213023 sd s2,96(sp) + 80034b60: 05313c23 sd s3,88(sp) + 80034b64: 05413823 sd s4,80(sp) + 80034b68: 05613023 sd s6,64(sp) + 80034b6c: 03713c23 sd s7,56(sp) + 80034b70: 03813823 sd s8,48(sp) + 80034b74: 03913423 sd s9,40(sp) + 80034b78: 03a13023 sd s10,32(sp) + 80034b7c: 01b13c23 sd s11,24(sp) + 80034b80: 00198717 auipc a4,0x198 + 80034b84: bd872703 lw a4,-1064(a4) # 801cc758 <_ZL6sphitx> + 80034b88: 10000793 li a5,256 + 80034b8c: 00050493 mv s1,a0 + 80034b90: 40355a93 srai s5,a0,0x3 + 80034b94: 00f70a63 beq a4,a5,80034ba8 <_ZL11RefreshLinei+0x60> + 80034b98: 00198797 auipc a5,0x198 + 80034b9c: b6a7c783 lbu a5,-1174(a5) # 801cc702 + 80034ba0: 0407f793 andi a5,a5,64 + 80034ba4: 1e078863 beqz a5,80034d94 <_ZL11RefreshLinei+0x24c> + 80034ba8: 02200793 li a5,34 + 80034bac: 000a8613 mv a2,s5 + 80034bb0: 0157d463 bge a5,s5,80034bb8 <_ZL11RefreshLinei+0x70> + 80034bb4: 02200613 li a2,34 + 80034bb8: 00198b17 auipc s6,0x198 + 80034bbc: ba4b0b13 addi s6,s6,-1116 # 801cc75c <_ZL9firsttile> + 80034bc0: 000b2383 lw t2,0(s6) + 80034bc4: 0006091b sext.w s2,a2 + 80034bc8: 407607bb subw a5,a2,t2 + 80034bcc: 00f13023 sd a5,0(sp) + 80034bd0: 00078613 mv a2,a5 + 80034bd4: 18f05263 blez a5,80034d58 <_ZL11RefreshLinei+0x210> + 80034bd8: 00198797 auipc a5,0x198 + 80034bdc: b307b783 ld a5,-1232(a5) # 801cc708 + 80034be0: 54079e63 bnez a5,8003513c <_ZL11RefreshLinei+0x5f4> + 80034be4: 00198797 auipc a5,0x198 + 80034be8: b187a783 lw a5,-1256(a5) # 801cc6fc + 80034bec: 58079063 bnez a5,8003516c <_ZL11RefreshLinei+0x624> + 80034bf0: 00198797 auipc a5,0x198 + 80034bf4: ae47a783 lw a5,-1308(a5) # 801cc6d4 + 80034bf8: 56079663 bnez a5,80035164 <_ZL11RefreshLinei+0x61c> + 80034bfc: 00198797 auipc a5,0x198 + 80034c00: b147a783 lw a5,-1260(a5) # 801cc710 + 80034c04: 54079c63 bnez a5,8003515c <_ZL11RefreshLinei+0x614> + 80034c08: 00198b97 auipc s7,0x198 + 80034c0c: af8b8b93 addi s7,s7,-1288 # 801cc700 + 80034c10: 00195e17 auipc t3,0x195 + 80034c14: 118e0e13 addi t3,t3,280 # 801c9d28 + 80034c18: 001bc883 lbu a7,1(s7) + 80034c1c: 000e4283 lbu t0,0(t3) + 80034c20: 0018f793 andi a5,a7,1 + 80034c24: 0182959b slliw a1,t0,0x18 + 80034c28: 4185d59b sraiw a1,a1,0x18 + 80034c2c: 00078463 beqz a5,80034c34 <_ZL11RefreshLinei+0xec> + 80034c30: 0305f593 andi a1,a1,48 + 80034c34: 00198717 auipc a4,0x198 + 80034c38: b0470713 addi a4,a4,-1276 # 801cc738 <_ZL5Pline> + 80034c3c: 0405e593 ori a1,a1,64 + 80034c40: 00073403 ld s0,0(a4) + 80034c44: 0ff5f713 andi a4,a1,255 + 80034c48: 0188f793 andi a5,a7,24 + 80034c4c: 00e13423 sd a4,8(sp) + 80034c50: 0c078263 beqz a5,80034d14 <_ZL11RefreshLinei+0x1cc> + 80034c54: 00198717 auipc a4,0x198 + 80034c58: ac070713 addi a4,a4,-1344 # 801cc714 + 80034c5c: 00198797 auipc a5,0x198 + 80034c60: acc7a783 lw a5,-1332(a5) # 801cc728 <_ZL16PALcache_outdate> + 80034c64: 00072703 lw a4,0(a4) + 80034c68: 000bcc03 lbu s8,0(s7) + 80034c6c: 16078863 beqz a5,80034ddc <_ZL11RefreshLinei+0x294> + 80034c70: 004e4a03 lbu s4,4(t3) + 80034c74: 008e4983 lbu s3,8(t3) + 80034c78: 00ce4083 lbu ra,12(t3) + 80034c7c: 0402ee93 ori t4,t0,64 + 80034c80: 040a6613 ori a2,s4,64 + 80034c84: 0400e793 ori a5,ra,64 + 80034c88: 0409e693 ori a3,s3,64 + 80034c8c: 00fe0623 sb a5,12(t3) + 80034c90: 01de0023 sb t4,0(t3) + 80034c94: 00ce0223 sb a2,4(t3) + 80034c98: 00de0423 sb a3,8(t3) + 80034c9c: 00195e17 auipc t3,0x195 + 80034ca0: 08ce0e13 addi t3,t3,140 # 801c9d28 + 80034ca4: 00196317 auipc t1,0x196 + 80034ca8: 5ac30313 addi t1,t1,1452 # 801cb250 <_ZL8PALcache> + 80034cac: 000e0813 mv a6,t3 + 80034cb0: 000e8793 mv a5,t4 + 80034cb4: 00000513 li a0,0 + 80034cb8: 00195f97 auipc t6,0x195 + 80034cbc: 080f8f93 addi t6,t6,128 # 801c9d38 + 80034cc0: 10000f13 li t5,256 + 80034cc4: 0087979b slliw a5,a5,0x8 + 80034cc8: 0107979b slliw a5,a5,0x10 + 80034ccc: 4107d79b sraiw a5,a5,0x10 + 80034cd0: 00195617 auipc a2,0x195 + 80034cd4: 05960613 addi a2,a2,89 # 801c9d29 + 80034cd8: 00030593 mv a1,t1 + 80034cdc: 000e8693 mv a3,t4 + 80034ce0: 00c0006f j 80034cec <_ZL11RefreshLinei+0x1a4> + 80034ce4: 00064683 lbu a3,0(a2) + 80034ce8: 00160613 addi a2,a2,1 + 80034cec: 00d7e6b3 or a3,a5,a3 + 80034cf0: 00d59023 sh a3,0(a1) # 7000 <_entry_offset+0x7000> + 80034cf4: 00258593 addi a1,a1,2 + 80034cf8: fecf96e3 bne t6,a2,80034ce4 <_ZL11RefreshLinei+0x19c> + 80034cfc: 0105051b addiw a0,a0,16 + 80034d00: 00180813 addi a6,a6,1 + 80034d04: 02030313 addi t1,t1,32 + 80034d08: 0be50663 beq a0,t5,80034db4 <_ZL11RefreshLinei+0x26c> + 80034d0c: 00084783 lbu a5,0(a6) + 80034d10: fb5ff06f j 80034cc4 <_ZL11RefreshLinei+0x17c> + 80034d14: 0036199b slliw s3,a2,0x3 + 80034d18: 00098613 mv a2,s3 + 80034d1c: 00070593 mv a1,a4 + 80034d20: 00040513 mv a0,s0 + 80034d24: 505060ef jal ra,8003ba28 + 80034d28: 00198797 auipc a5,0x198 + 80034d2c: a1078793 addi a5,a5,-1520 # 801cc738 <_ZL5Pline> + 80034d30: 01340633 add a2,s0,s3 + 80034d34: 00c7b023 sd a2,0(a5) + 80034d38: 012b2023 sw s2,0(s6) + 80034d3c: 10b00793 li a5,267 + 80034d40: 0097dc63 bge a5,s1,80034d58 <_ZL11RefreshLinei+0x210> + 80034d44: 00198797 auipc a5,0x198 + 80034d48: a047a783 lw a5,-1532(a5) # 801cc748 <_ZL5tofix> + 80034d4c: 00078663 beqz a5,80034d58 <_ZL11RefreshLinei+0x210> + 80034d50: 00198797 auipc a5,0x198 + 80034d54: 9e07ac23 sw zero,-1544(a5) # 801cc748 <_ZL5tofix> + 80034d58: 07813083 ld ra,120(sp) + 80034d5c: 07013403 ld s0,112(sp) + 80034d60: 06813483 ld s1,104(sp) + 80034d64: 06013903 ld s2,96(sp) + 80034d68: 05813983 ld s3,88(sp) + 80034d6c: 05013a03 ld s4,80(sp) + 80034d70: 04813a83 ld s5,72(sp) + 80034d74: 04013b03 ld s6,64(sp) + 80034d78: 03813b83 ld s7,56(sp) + 80034d7c: 03013c03 ld s8,48(sp) + 80034d80: 02813c83 ld s9,40(sp) + 80034d84: 02013d03 ld s10,32(sp) + 80034d88: 01813d83 ld s11,24(sp) + 80034d8c: 08010113 addi sp,sp,128 + 80034d90: 00008067 ret + 80034d94: ff05079b addiw a5,a0,-16 + 80034d98: e0f758e3 bge a4,a5,80034ba8 <_ZL11RefreshLinei+0x60> + 80034d9c: 4035569b sraiw a3,a0,0x3 + 80034da0: ffe6879b addiw a5,a3,-2 + 80034da4: 0037979b slliw a5,a5,0x3 + 80034da8: e0f740e3 blt a4,a5,80034ba8 <_ZL11RefreshLinei+0x60> + 80034dac: 00168a9b addiw s5,a3,1 + 80034db0: df9ff06f j 80034ba8 <_ZL11RefreshLinei+0x60> + 80034db4: 03f2f293 andi t0,t0,63 + 80034db8: 03fa7a13 andi s4,s4,63 + 80034dbc: 03f9f993 andi s3,s3,63 + 80034dc0: 03f0f093 andi ra,ra,63 + 80034dc4: 005e0023 sb t0,0(t3) + 80034dc8: 014e0223 sb s4,4(t3) + 80034dcc: 013e0423 sb s3,8(t3) + 80034dd0: 001e0623 sb ra,12(t3) + 80034dd4: 00198797 auipc a5,0x198 + 80034dd8: 9407aa23 sw zero,-1708(a5) # 801cc728 <_ZL16PALcache_outdate> + 80034ddc: 00a7579b srliw a5,a4,0xa + 80034de0: 0037f793 andi a5,a5,3 + 80034de4: 00379793 slli a5,a5,0x3 + 80034de8: 00197697 auipc a3,0x197 + 80034dec: cd868693 addi a3,a3,-808 # 801cbac0 + 80034df0: 00f687b3 add a5,a3,a5 + 80034df4: 00377313 andi t1,a4,3 + 80034df8: 0007be83 ld t4,0(a5) + 80034dfc: 00030f13 mv t5,t1 + 80034e00: 02030863 beqz t1,80034e30 <_ZL11RefreshLinei+0x2e8> + 80034e04: 0047569b srliw a3,a4,0x4 + 80034e08: 0027579b srliw a5,a4,0x2 + 80034e0c: 0386f613 andi a2,a3,56 + 80034e10: 0077f793 andi a5,a5,7 + 80034e14: 00c7e7b3 or a5,a5,a2 + 80034e18: 3c07e793 ori a5,a5,960 + 80034e1c: 00fe87b3 add a5,t4,a5 + 80034e20: 0007c303 lbu t1,0(a5) + 80034e24: 0046f693 andi a3,a3,4 + 80034e28: 0023131b slliw t1,t1,0x2 + 80034e2c: 40d3533b sraw t1,t1,a3 + 80034e30: 2323d663 bge t2,s2,8003505c <_ZL11RefreshLinei+0x514> + 80034e34: 008c1f9b slliw t6,s8,0x8 + 80034e38: 000017b7 lui a5,0x1 + 80034e3c: 00ffffb3 and t6,t6,a5 + 80034e40: 00198797 auipc a5,0x198 + 80034e44: 93878793 addi a5,a5,-1736 # 801cc778 <_ZZL11RefreshLineiE6pshift> + 80034e48: 0007a603 lw a2,0(a5) + 80034e4c: 0047a683 lw a3,4(a5) + 80034e50: 00c75c1b srliw s8,a4,0xc + 80034e54: 00198797 auipc a5,0x198 + 80034e58: 92c78793 addi a5,a5,-1748 # 801cc780 <_ZZL11RefreshLineiE7atlatch> + 80034e5c: 007c7c13 andi s8,s8,7 + 80034e60: 0007a583 lw a1,0(a5) + 80034e64: 018fefb3 or t6,t6,s8 + 80034e68: 00198d97 auipc s11,0x198 + 80034e6c: 8bcdcd83 lbu s11,-1860(s11) # 801cc724 + 80034e70: 00800513 li a0,8 + 80034e74: 000f8f9b sext.w t6,t6 + 80034e78: 41b5053b subw a0,a0,s11 + 80034e7c: 00038893 mv a7,t2 + 80034e80: 0008ea17 auipc s4,0x8e + 80034e84: ec0a0a13 addi s4,s4,-320 # 800c2d40 + 80034e88: 00100993 li s3,1 + 80034e8c: 00196d17 auipc s10,0x196 + 80034e90: 9c4d0d13 addi s10,s10,-1596 # 801ca850 <_ZL7ppulut1> + 80034e94: 00196c97 auipc s9,0x196 + 80034e98: dbcc8c93 addi s9,s9,-580 # 801cac50 <_ZL7ppulut2> + 80034e9c: 00196c17 auipc s8,0x196 + 80034ea0: 1b4c0c13 addi s8,s8,436 # 801cb050 <_ZL7ppulut3> + 80034ea4: 00196e17 auipc t3,0x196 + 80034ea8: 3ace0e13 addi t3,t3,940 # 801cb250 <_ZL8PALcache> + 80034eac: 01f00093 li ra,31 + 80034eb0: 0b19d663 bge s3,a7,80034f5c <_ZL11RefreshLinei+0x414> + 80034eb4: 0035979b slliw a5,a1,0x3 + 80034eb8: 00a652bb srlw t0,a2,a0 + 80034ebc: 00a6d83b srlw a6,a3,a0 + 80034ec0: 00fde7b3 or a5,s11,a5 + 80034ec4: 0ff2f293 andi t0,t0,255 + 80034ec8: 0ff87813 andi a6,a6,255 + 80034ecc: 02079793 slli a5,a5,0x20 + 80034ed0: 00229293 slli t0,t0,0x2 + 80034ed4: 00281813 slli a6,a6,0x2 + 80034ed8: 0207d793 srli a5,a5,0x20 + 80034edc: 005d02b3 add t0,s10,t0 + 80034ee0: 010c8833 add a6,s9,a6 + 80034ee4: 00279793 slli a5,a5,0x2 + 80034ee8: 00082803 lw a6,0(a6) + 80034eec: 0002a283 lw t0,0(t0) + 80034ef0: 00fc07b3 add a5,s8,a5 + 80034ef4: 0007a783 lw a5,0(a5) + 80034ef8: 0102e2b3 or t0,t0,a6 + 80034efc: 00840413 addi s0,s0,8 + 80034f00: 00f2e7b3 or a5,t0,a5 + 80034f04: 0ff7f813 andi a6,a5,255 + 80034f08: 00181813 slli a6,a6,0x1 + 80034f0c: 010e0833 add a6,t3,a6 + 80034f10: 00085283 lhu t0,0(a6) + 80034f14: 0087d81b srliw a6,a5,0x8 + 80034f18: 0ff87813 andi a6,a6,255 + 80034f1c: 00181813 slli a6,a6,0x1 + 80034f20: fe541c23 sh t0,-8(s0) + 80034f24: 010e0833 add a6,t3,a6 + 80034f28: 00085283 lhu t0,0(a6) + 80034f2c: 0107d81b srliw a6,a5,0x10 + 80034f30: 0ff87813 andi a6,a6,255 + 80034f34: 00181813 slli a6,a6,0x1 + 80034f38: fe541d23 sh t0,-6(s0) + 80034f3c: 010e0833 add a6,t3,a6 + 80034f40: 00085803 lhu a6,0(a6) + 80034f44: 0187d79b srliw a5,a5,0x18 + 80034f48: 00179793 slli a5,a5,0x1 + 80034f4c: ff041e23 sh a6,-4(s0) + 80034f50: 00fe07b3 add a5,t3,a5 + 80034f54: 0007d783 lhu a5,0(a5) + 80034f58: fef41f23 sh a5,-2(s0) + 80034f5c: 3ff77793 andi a5,a4,1023 + 80034f60: 00fe87b3 add a5,t4,a5 + 80034f64: 0007c783 lbu a5,0(a5) + 80034f68: 0047979b slliw a5,a5,0x4 + 80034f6c: 01f787bb addw a5,a5,t6 + 80034f70: 020f1863 bnez t5,80034fa0 <_ZL11RefreshLinei+0x458> + 80034f74: 0047531b srliw t1,a4,0x4 + 80034f78: 0027581b srliw a6,a4,0x2 + 80034f7c: 03837f13 andi t5,t1,56 + 80034f80: 00787813 andi a6,a6,7 + 80034f84: 01e86833 or a6,a6,t5 + 80034f88: 3c086813 ori a6,a6,960 + 80034f8c: 010e8833 add a6,t4,a6 + 80034f90: 00084803 lbu a6,0(a6) + 80034f94: 00437313 andi t1,t1,4 + 80034f98: 0028181b slliw a6,a6,0x2 + 80034f9c: 4068533b sraw t1,a6,t1 + 80034fa0: 00a7d81b srliw a6,a5,0xa + 80034fa4: 02081813 slli a6,a6,0x20 + 80034fa8: 01d85813 srli a6,a6,0x1d + 80034fac: 010a0833 add a6,s4,a6 + 80034fb0: 00083f03 ld t5,0(a6) + 80034fb4: 02079793 slli a5,a5,0x20 + 80034fb8: 0207d793 srli a5,a5,0x20 + 80034fbc: 00ff07b3 add a5,t5,a5 + 80034fc0: 0007cf03 lbu t5,0(a5) + 80034fc4: 00277813 andi a6,a4,2 + 80034fc8: 0087c783 lbu a5,8(a5) + 80034fcc: 0103583b srlw a6,t1,a6 + 80034fd0: 00c87813 andi a6,a6,12 + 80034fd4: 0025d59b srliw a1,a1,0x2 + 80034fd8: 0086161b slliw a2,a2,0x8 + 80034fdc: 0086969b slliw a3,a3,0x8 + 80034fe0: 00b865b3 or a1,a6,a1 + 80034fe4: 01e66633 or a2,a2,t5 + 80034fe8: 00f6e6b3 or a3,a3,a5 + 80034fec: 01f77813 andi a6,a4,31 + 80034ff0: 0005859b sext.w a1,a1 + 80034ff4: 0006061b sext.w a2,a2 + 80034ff8: 0006869b sext.w a3,a3 + 80034ffc: 00180c63 beq a6,ra,80035014 <_ZL11RefreshLinei+0x4cc> + 80035000: 0018889b addiw a7,a7,1 + 80035004: 0017071b addiw a4,a4,1 + 80035008: 03190a63 beq s2,a7,8003503c <_ZL11RefreshLinei+0x4f4> + 8003500c: 00377f13 andi t5,a4,3 + 80035010: ea1ff06f j 80034eb0 <_ZL11RefreshLinei+0x368> + 80035014: 41f74713 xori a4,a4,1055 + 80035018: 00a7579b srliw a5,a4,0xa + 8003501c: 0037f793 andi a5,a5,3 + 80035020: 00379793 slli a5,a5,0x3 + 80035024: 00197817 auipc a6,0x197 + 80035028: a9c80813 addi a6,a6,-1380 # 801cbac0 + 8003502c: 00f807b3 add a5,a6,a5 + 80035030: 0018889b addiw a7,a7,1 + 80035034: 0007be83 ld t4,0(a5) + 80035038: fd191ae3 bne s2,a7,8003500c <_ZL11RefreshLinei+0x4c4> + 8003503c: 00197797 auipc a5,0x197 + 80035040: 73c78793 addi a5,a5,1852 # 801cc778 <_ZZL11RefreshLineiE6pshift> + 80035044: 001bc883 lbu a7,1(s7) + 80035048: 00c7a023 sw a2,0(a5) + 8003504c: 00d7a223 sw a3,4(a5) + 80035050: 00197797 auipc a5,0x197 + 80035054: 73078793 addi a5,a5,1840 # 801cc780 <_ZZL11RefreshLineiE7atlatch> + 80035058: 00b7a023 sw a1,0(a5) + 8003505c: 00197797 auipc a5,0x197 + 80035060: 6b878793 addi a5,a5,1720 # 801cc714 + 80035064: 00e7a023 sw a4,0(a5) + 80035068: 00200793 li a5,2 + 8003506c: 0477c263 blt a5,t2,800350b0 <_ZL11RefreshLinei+0x568> + 80035070: 0557d063 bge a5,s5,800350b0 <_ZL11RefreshLinei+0x568> + 80035074: 0028f793 andi a5,a7,2 + 80035078: 02079c63 bnez a5,800350b0 <_ZL11RefreshLinei+0x568> + 8003507c: 00813683 ld a3,8(sp) + 80035080: 0106971b slliw a4,a3,0x10 + 80035084: 0086979b slliw a5,a3,0x8 + 80035088: 00e7e7b3 or a5,a5,a4 + 8003508c: 00f6e7b3 or a5,a3,a5 + 80035090: 0186971b slliw a4,a3,0x18 + 80035094: 00e7e7b3 or a5,a5,a4 + 80035098: 0007879b sext.w a5,a5 + 8003509c: 00197717 auipc a4,0x197 + 800350a0: 6b473703 ld a4,1716(a4) # 801cc750 <_ZL6Plinef> + 800350a4: 00f72223 sw a5,4(a4) + 800350a8: 00f72023 sw a5,0(a4) + 800350ac: 001bc883 lbu a7,1(s7) + 800350b0: 0088f893 andi a7,a7,8 + 800350b4: 02089663 bnez a7,800350e0 <_ZL11RefreshLinei+0x598> + 800350b8: ffe3839b addiw t2,t2,-2 + 800350bc: 0603c663 bltz t2,80035128 <_ZL11RefreshLinei+0x5e0> + 800350c0: 00013783 ld a5,0(sp) + 800350c4: 00813583 ld a1,8(sp) + 800350c8: 0033939b slliw t2,t2,0x3 + 800350cc: 00197517 auipc a0,0x197 + 800350d0: 68453503 ld a0,1668(a0) # 801cc750 <_ZL6Plinef> + 800350d4: 0037961b slliw a2,a5,0x3 + 800350d8: 00750533 add a0,a0,t2 + 800350dc: 14d060ef jal ra,8003ba28 + 800350e0: 10b00793 li a5,267 + 800350e4: 0297d463 bge a5,s1,8003510c <_ZL11RefreshLinei+0x5c4> + 800350e8: 00197797 auipc a5,0x197 + 800350ec: 6607a783 lw a5,1632(a5) # 801cc748 <_ZL5tofix> + 800350f0: 00078e63 beqz a5,8003510c <_ZL11RefreshLinei+0x5c4> + 800350f4: 001bc783 lbu a5,1(s7) + 800350f8: 0187f793 andi a5,a5,24 + 800350fc: 00078463 beqz a5,80035104 <_ZL11RefreshLinei+0x5bc> + 80035100: 9d5ff0ef jal ra,80034ad4 <_ZL6Fixit1v.part.0> + 80035104: 00197797 auipc a5,0x197 + 80035108: 6407a223 sw zero,1604(a5) # 801cc748 <_ZL5tofix> + 8003510c: 00048513 mv a0,s1 + 80035110: 911ff0ef jal ra,80034a20 <_ZL14CheckSpriteHiti> + 80035114: 00197797 auipc a5,0x197 + 80035118: 62478793 addi a5,a5,1572 # 801cc738 <_ZL5Pline> + 8003511c: 0087b023 sd s0,0(a5) + 80035120: 012b2023 sw s2,0(s6) + 80035124: c35ff06f j 80034d58 <_ZL11RefreshLinei+0x210> + 80035128: ffe9079b addiw a5,s2,-2 + 8003512c: 00f13023 sd a5,0(sp) + 80035130: faf058e3 blez a5,800350e0 <_ZL11RefreshLinei+0x598> + 80035134: 00000393 li t2,0 + 80035138: f89ff06f j 800350c0 <_ZL11RefreshLinei+0x578> + 8003513c: 45f00613 li a2,1119 + 80035140: 00011597 auipc a1,0x11 + 80035144: 4e858593 addi a1,a1,1256 # 80046628 + 80035148: 00008517 auipc a0,0x8 + 8003514c: bc850513 addi a0,a0,-1080 # 8003cd10 <_etext+0x2c> + 80035150: 3f8060ef jal ra,8003b548 + 80035154: 00100513 li a0,1 + 80035158: 41d040ef jal ra,80039d74 + 8003515c: 46200613 li a2,1122 + 80035160: fe1ff06f j 80035140 <_ZL11RefreshLinei+0x5f8> + 80035164: 46100613 li a2,1121 + 80035168: fd9ff06f j 80035140 <_ZL11RefreshLinei+0x5f8> + 8003516c: 46000613 li a2,1120 + 80035170: fd1ff06f j 80035140 <_ZL11RefreshLinei+0x5f8> + +0000000080035174 <_Z18FCEUPPU_LineUpdatev.part.0>: + 80035174: 00197517 auipc a0,0x197 + 80035178: 9d852503 lw a0,-1576(a0) # 801cbb4c + 8003517c: 0015179b slliw a5,a0,0x1 + 80035180: 00a787bb addw a5,a5,a0 + 80035184: 0047979b slliw a5,a5,0x4 + 80035188: 00197517 auipc a0,0x197 + 8003518c: 60852503 lw a0,1544(a0) # 801cc790 + 80035190: 40a787bb subw a5,a5,a0 + 80035194: 00197717 auipc a4,0x197 + 80035198: 4cc74703 lbu a4,1228(a4) # 801cc660 + 8003519c: 0047d51b srliw a0,a5,0x4 + 800351a0: 02070663 beqz a4,800351cc <_Z18FCEUPPU_LineUpdatev.part.0+0x58> + 800351a4: 02079513 slli a0,a5,0x20 + 800351a8: ff010113 addi sp,sp,-16 + 800351ac: 00f00593 li a1,15 + 800351b0: 02055513 srli a0,a0,0x20 + 800351b4: 00113423 sd ra,8(sp) + 800351b8: 471040ef jal ra,80039e28 <__udivdi3> + 800351bc: 00813083 ld ra,8(sp) + 800351c0: 0005051b sext.w a0,a0 + 800351c4: 01010113 addi sp,sp,16 + 800351c8: 981ff06f j 80034b48 <_ZL11RefreshLinei> + 800351cc: 97dff06f j 80034b48 <_ZL11RefreshLinei> + +00000000800351d0 <_ZL5A2007j>: + 800351d0: fb010113 addi sp,sp,-80 + 800351d4: 04813023 sd s0,64(sp) + 800351d8: 03213823 sd s2,48(sp) + 800351dc: 00197417 auipc s0,0x197 + 800351e0: 5b840413 addi s0,s0,1464 # 801cc794 + 800351e4: 00197917 auipc s2,0x197 + 800351e8: 53090913 addi s2,s2,1328 # 801cc714 + 800351ec: 02913c23 sd s1,56(sp) + 800351f0: 00042783 lw a5,0(s0) + 800351f4: 00092483 lw s1,0(s2) + 800351f8: 000046b7 lui a3,0x4 + 800351fc: 03413023 sd s4,32(sp) + 80035200: fff68713 addi a4,a3,-1 # 3fff <_entry_offset+0x3fff> + 80035204: 04113423 sd ra,72(sp) + 80035208: 03313423 sd s3,40(sp) + 8003520c: 01513c23 sd s5,24(sp) + 80035210: 01613823 sd s6,16(sp) + 80035214: 01713423 sd s7,8(sp) + 80035218: 00e4fa33 and s4,s1,a4 + 8003521c: 1a078463 beqz a5,800353c4 <_ZL5A2007j+0x1f4> + 80035220: 00197417 auipc s0,0x197 + 80035224: 82040413 addi s0,s0,-2016 # 801cba40 + 80035228: 00442783 lw a5,4(s0) + 8003522c: 00842503 lw a0,8(s0) + 80035230: 01042803 lw a6,16(s0) + 80035234: 00c42583 lw a1,12(s0) + 80035238: 00a5151b slliw a0,a0,0xa + 8003523c: 00042603 lw a2,0(s0) + 80035240: 00b7979b slliw a5,a5,0xb + 80035244: 00a7e7b3 or a5,a5,a0 + 80035248: 0055959b slliw a1,a1,0x5 + 8003524c: 0107e7b3 or a5,a5,a6 + 80035250: 00b7e7b3 or a5,a5,a1 + 80035254: 00c6161b slliw a2,a2,0xc + 80035258: 000035b7 lui a1,0x3 + 8003525c: 00b67633 and a2,a2,a1 + 80035260: 00c7e7b3 or a5,a5,a2 + 80035264: 0007879b sext.w a5,a5 + 80035268: 00e7f533 and a0,a5,a4 + 8003526c: f0068693 addi a3,a3,-256 + 80035270: 00197b17 auipc s6,0x197 + 80035274: 4b3b0b13 addi s6,s6,1203 # 801cc723 + 80035278: 00a92023 sw a0,0(s2) + 8003527c: 00d7f7b3 and a5,a5,a3 + 80035280: 000b4983 lbu s3,0(s6) + 80035284: 00197717 auipc a4,0x197 + 80035288: 42c73703 ld a4,1068(a4) # 801cc6b0 + 8003528c: 2ad78463 beq a5,a3,80035534 <_ZL5A2007j+0x364> + 80035290: 000700e7 jalr a4 + 80035294: 00ab0023 sb a0,0(s6) + 80035298: 00197a97 auipc s5,0x197 + 8003529c: 468a8a93 addi s5,s5,1128 # 801cc700 + 800352a0: 03442703 lw a4,52(s0) + 800352a4: 0f000793 li a5,240 + 800352a8: 00c42603 lw a2,12(s0) + 800352ac: 00042803 lw a6,0(s0) + 800352b0: 00442503 lw a0,4(s0) + 800352b4: 04e7e863 bltu a5,a4,80035304 <_ZL5A2007j+0x134> + 800352b8: 001ac783 lbu a5,1(s5) + 800352bc: 0187f793 andi a5,a5,24 + 800352c0: 04078263 beqz a5,80035304 <_ZL5A2007j+0x134> + 800352c4: 0018071b addiw a4,a6,1 + 800352c8: 0037579b srliw a5,a4,0x3 + 800352cc: 00c7863b addw a2,a5,a2 + 800352d0: 01f67793 andi a5,a2,31 + 800352d4: 00f42623 sw a5,12(s0) + 800352d8: 01e00693 li a3,30 + 800352dc: 0037559b srliw a1,a4,0x3 + 800352e0: 00579613 slli a2,a5,0x5 + 800352e4: 36d78263 beq a5,a3,80035648 <_ZL5A2007j+0x478> + 800352e8: 00777713 andi a4,a4,7 + 800352ec: 00157693 andi a3,a0,1 + 800352f0: 00842583 lw a1,8(s0) + 800352f4: 01042783 lw a5,16(s0) + 800352f8: 00e42023 sw a4,0(s0) + 800352fc: 00d42223 sw a3,4(s0) + 80035300: 06c0006f j 8003536c <_ZL5A2007j+0x19c> + 80035304: 000ac583 lbu a1,0(s5) + 80035308: 01042783 lw a5,16(s0) + 8003530c: 0045f593 andi a1,a1,4 + 80035310: 20059e63 bnez a1,8003552c <_ZL5A2007j+0x35c> + 80035314: 0017879b addiw a5,a5,1 + 80035318: 0057d71b srliw a4,a5,0x5 + 8003531c: 00177713 andi a4,a4,1 + 80035320: 00c7063b addw a2,a4,a2 + 80035324: 00842703 lw a4,8(s0) + 80035328: 0056559b srliw a1,a2,0x5 + 8003532c: 01f7f793 andi a5,a5,31 + 80035330: 00e585bb addw a1,a1,a4 + 80035334: 0015d69b srliw a3,a1,0x1 + 80035338: 00a686bb addw a3,a3,a0 + 8003533c: 0016d71b srliw a4,a3,0x1 + 80035340: 0107073b addw a4,a4,a6 + 80035344: 01f67613 andi a2,a2,31 + 80035348: 0015f593 andi a1,a1,1 + 8003534c: 0016f693 andi a3,a3,1 + 80035350: 00777713 andi a4,a4,7 + 80035354: 00c42623 sw a2,12(s0) + 80035358: 00f42823 sw a5,16(s0) + 8003535c: 00b42423 sw a1,8(s0) + 80035360: 00d42223 sw a3,4(s0) + 80035364: 00e42023 sw a4,0(s0) + 80035368: 00561613 slli a2,a2,0x5 + 8003536c: 00b6969b slliw a3,a3,0xb + 80035370: 00c7e7b3 or a5,a5,a2 + 80035374: 00d7e7b3 or a5,a5,a3 + 80035378: 00a5959b slliw a1,a1,0xa + 8003537c: 00c7171b slliw a4,a4,0xc + 80035380: 000036b7 lui a3,0x3 + 80035384: 00b7e7b3 or a5,a5,a1 + 80035388: 00d77733 and a4,a4,a3 + 8003538c: 00e7e7b3 or a5,a5,a4 + 80035390: 00f92023 sw a5,0(s2) + 80035394: 04813083 ld ra,72(sp) + 80035398: 04013403 ld s0,64(sp) + 8003539c: 03813483 ld s1,56(sp) + 800353a0: 03013903 ld s2,48(sp) + 800353a4: 02013a03 ld s4,32(sp) + 800353a8: 01813a83 ld s5,24(sp) + 800353ac: 01013b03 ld s6,16(sp) + 800353b0: 00813b83 ld s7,8(sp) + 800353b4: 00098513 mv a0,s3 + 800353b8: 02813983 ld s3,40(sp) + 800353bc: 05010113 addi sp,sp,80 + 800353c0: 00008067 ret + 800353c4: 00197797 auipc a5,0x197 + 800353c8: 3747b783 ld a5,884(a5) # 801cc738 <_ZL5Pline> + 800353cc: 00078463 beqz a5,800353d4 <_ZL5A2007j+0x204> + 800353d0: da5ff0ef jal ra,80035174 <_Z18FCEUPPU_LineUpdatev.part.0> + 800353d4: 00004737 lui a4,0x4 + 800353d8: 00197b97 auipc s7,0x197 + 800353dc: 330b8b93 addi s7,s7,816 # 801cc708 + 800353e0: eff70713 addi a4,a4,-257 # 3eff <_entry_offset+0x3eff> + 800353e4: 000bb783 ld a5,0(s7) + 800353e8: 09477c63 bgeu a4,s4,80035480 <_ZL5A2007j+0x2b0> + 800353ec: 00197a97 auipc s5,0x197 + 800353f0: 314a8a93 addi s5,s5,788 # 801cc700 + 800353f4: 001ac703 lbu a4,1(s5) + 800353f8: 0034f693 andi a3,s1,3 + 800353fc: 00177613 andi a2,a4,1 + 80035400: 1c069663 bnez a3,800355cc <_ZL5A2007j+0x3fc> + 80035404: 00c4f693 andi a3,s1,12 + 80035408: 20069863 bnez a3,80035618 <_ZL5A2007j+0x448> + 8003540c: 00195997 auipc s3,0x195 + 80035410: 91c9c983 lbu s3,-1764(s3) # 801c9d28 + 80035414: 1c061863 bnez a2,800355e4 <_ZL5A2007j+0x414> + 80035418: 00196697 auipc a3,0x196 + 8003541c: 6c06b683 ld a3,1728(a3) # 801cbad8 + 80035420: 3ff4f493 andi s1,s1,1023 + 80035424: 009684b3 add s1,a3,s1 + 80035428: 0004c683 lbu a3,0(s1) + 8003542c: 00197617 auipc a2,0x197 + 80035430: 2ed60ba3 sb a3,759(a2) # 801cc723 + 80035434: 0a078c63 beqz a5,800354ec <_ZL5A2007j+0x31c> + 80035438: 000a0513 mv a0,s4 + 8003543c: 000780e7 jalr a5 + 80035440: 001ac703 lbu a4,1(s5) + 80035444: 000bb783 ld a5,0(s7) + 80035448: 00092683 lw a3,0(s2) + 8003544c: 01877713 andi a4,a4,24 + 80035450: 0a071463 bnez a4,800354f8 <_ZL5A2007j+0x328> + 80035454: 000ac703 lbu a4,0(s5) + 80035458: 00477713 andi a4,a4,4 + 8003545c: 18070863 beqz a4,800355ec <_ZL5A2007j+0x41c> + 80035460: 0206869b addiw a3,a3,32 + 80035464: 00d92023 sw a3,0(s2) + 80035468: f20786e3 beqz a5,80035394 <_ZL5A2007j+0x1c4> + 8003546c: 00092503 lw a0,0(s2) + 80035470: 03251513 slli a0,a0,0x32 + 80035474: 03255513 srli a0,a0,0x32 + 80035478: 000780e7 jalr a5 + 8003547c: f19ff06f j 80035394 <_ZL5A2007j+0x1c4> + 80035480: 00197b17 auipc s6,0x197 + 80035484: 2a3b0b13 addi s6,s6,675 # 801cc723 + 80035488: 000b4983 lbu s3,0(s6) + 8003548c: 00098713 mv a4,s3 + 80035490: 00078863 beqz a5,800354a0 <_ZL5A2007j+0x2d0> + 80035494: 000a0513 mv a0,s4 + 80035498: 000780e7 jalr a5 + 8003549c: 000b4703 lbu a4,0(s6) + 800354a0: 00197797 auipc a5,0x197 + 800354a4: 26e782a3 sb a4,613(a5) # 801cc705 + 800354a8: 03249793 slli a5,s1,0x32 + 800354ac: 0c07d663 bgez a5,80035578 <_ZL5A2007j+0x3a8> + 800354b0: 00aa5a1b srliw s4,s4,0xa + 800354b4: 003a7a13 andi s4,s4,3 + 800354b8: 00196797 auipc a5,0x196 + 800354bc: 60878793 addi a5,a5,1544 # 801cbac0 + 800354c0: 003a1a13 slli s4,s4,0x3 + 800354c4: 01478a33 add s4,a5,s4 + 800354c8: 000a3783 ld a5,0(s4) + 800354cc: 3ff4f493 andi s1,s1,1023 + 800354d0: 00197a97 auipc s5,0x197 + 800354d4: 230a8a93 addi s5,s5,560 # 801cc700 + 800354d8: 009784b3 add s1,a5,s1 + 800354dc: 0004c683 lbu a3,0(s1) + 800354e0: 000bb783 ld a5,0(s7) + 800354e4: 001ac703 lbu a4,1(s5) + 800354e8: 00db0023 sb a3,0(s6) + 800354ec: 01877713 andi a4,a4,24 + 800354f0: 00092683 lw a3,0(s2) + 800354f4: f60700e3 beqz a4,80035454 <_ZL5A2007j+0x284> + 800354f8: 00197617 auipc a2,0x197 + 800354fc: 2a862603 lw a2,680(a2) # 801cc7a0 + 80035500: 0ef00713 li a4,239 + 80035504: f4c748e3 blt a4,a2,80035454 <_ZL5A2007j+0x284> + 80035508: 00007737 lui a4,0x7 + 8003550c: 00e6f633 and a2,a3,a4 + 80035510: 0006061b sext.w a2,a2 + 80035514: 000075b7 lui a1,0x7 + 80035518: 1ab60263 beq a2,a1,800356bc <_ZL5A2007j+0x4ec> + 8003551c: 00001737 lui a4,0x1 + 80035520: 00d7073b addw a4,a4,a3 + 80035524: 00e92023 sw a4,0(s2) + 80035528: f41ff06f j 80035468 <_ZL5A2007j+0x298> + 8003552c: 0016061b addiw a2,a2,1 + 80035530: df5ff06f j 80035324 <_ZL5A2007j+0x154> + 80035534: 00197a97 auipc s5,0x197 + 80035538: 1cca8a93 addi s5,s5,460 # 801cc700 + 8003553c: 001ac683 lbu a3,1(s5) + 80035540: 0034f793 andi a5,s1,3 + 80035544: 0016f693 andi a3,a3,1 + 80035548: 0a079863 bnez a5,800355f8 <_ZL5A2007j+0x428> + 8003554c: 00c4f493 andi s1,s1,12 + 80035550: 10049c63 bnez s1,80035668 <_ZL5A2007j+0x498> + 80035554: 00194997 auipc s3,0x194 + 80035558: 7d49c983 lbu s3,2004(s3) # 801c9d28 + 8003555c: 00068463 beqz a3,80035564 <_ZL5A2007j+0x394> + 80035560: 0309f993 andi s3,s3,48 + 80035564: fffff7b7 lui a5,0xfffff + 80035568: 00a7853b addw a0,a5,a0 + 8003556c: 000700e7 jalr a4 # 1000 <_entry_offset+0x1000> + 80035570: 00ab0023 sb a0,0(s6) + 80035574: d2dff06f j 800352a0 <_ZL5A2007j+0xd0> + 80035578: 00197797 auipc a5,0x197 + 8003557c: 15c7a783 lw a5,348(a5) # 801cc6d4 + 80035580: 00078663 beqz a5,8003558c <_ZL5A2007j+0x3bc> + 80035584: 00042783 lw a5,0(s0) + 80035588: 10079863 bnez a5,80035698 <_ZL5A2007j+0x4c8> + 8003558c: 00aa579b srliw a5,s4,0xa + 80035590: 00379713 slli a4,a5,0x3 + 80035594: 0008d797 auipc a5,0x8d + 80035598: 7ac78793 addi a5,a5,1964 # 800c2d40 + 8003559c: 00e787b3 add a5,a5,a4 + 800355a0: 0007b783 ld a5,0(a5) + 800355a4: 020a1a13 slli s4,s4,0x20 + 800355a8: 020a5a13 srli s4,s4,0x20 + 800355ac: 014787b3 add a5,a5,s4 + 800355b0: 0007c683 lbu a3,0(a5) + 800355b4: 00197a97 auipc s5,0x197 + 800355b8: 14ca8a93 addi s5,s5,332 # 801cc700 + 800355bc: 000bb783 ld a5,0(s7) + 800355c0: 001ac703 lbu a4,1(s5) + 800355c4: 00db0023 sb a3,0(s6) + 800355c8: f25ff06f j 800354ec <_ZL5A2007j+0x31c> + 800355cc: 01f4f593 andi a1,s1,31 + 800355d0: 00194697 auipc a3,0x194 + 800355d4: 75868693 addi a3,a3,1880 # 801c9d28 + 800355d8: 00b686b3 add a3,a3,a1 + 800355dc: 0006c983 lbu s3,0(a3) + 800355e0: e2060ce3 beqz a2,80035418 <_ZL5A2007j+0x248> + 800355e4: 0309f993 andi s3,s3,48 + 800355e8: e31ff06f j 80035418 <_ZL5A2007j+0x248> + 800355ec: 0016869b addiw a3,a3,1 + 800355f0: 00d92023 sw a3,0(s2) + 800355f4: e75ff06f j 80035468 <_ZL5A2007j+0x298> + 800355f8: 01f4f493 andi s1,s1,31 + 800355fc: 00194797 auipc a5,0x194 + 80035600: 72c78793 addi a5,a5,1836 # 801c9d28 + 80035604: 009784b3 add s1,a5,s1 + 80035608: 0004c983 lbu s3,0(s1) + 8003560c: f4068ce3 beqz a3,80035564 <_ZL5A2007j+0x394> + 80035610: 0309f993 andi s3,s3,48 + 80035614: f51ff06f j 80035564 <_ZL5A2007j+0x394> + 80035618: 002a569b srliw a3,s4,0x2 + 8003561c: 0036f693 andi a3,a3,3 + 80035620: fff6869b addiw a3,a3,-1 + 80035624: 02069693 slli a3,a3,0x20 + 80035628: 0206d693 srli a3,a3,0x20 + 8003562c: 00197597 auipc a1,0x197 + 80035630: 0f458593 addi a1,a1,244 # 801cc720 + 80035634: 00d586b3 add a3,a1,a3 + 80035638: 0006c983 lbu s3,0(a3) + 8003563c: dc060ee3 beqz a2,80035418 <_ZL5A2007j+0x248> + 80035640: 0309f993 andi s3,s3,48 + 80035644: dd5ff06f j 80035418 <_ZL5A2007j+0x248> + 80035648: 00100793 li a5,1 + 8003564c: 3c000613 li a2,960 + 80035650: c8f59ce3 bne a1,a5,800352e8 <_ZL5A2007j+0x118> + 80035654: 0015051b addiw a0,a0,1 + 80035658: 00196797 auipc a5,0x196 + 8003565c: 3e07aa23 sw zero,1012(a5) # 801cba4c + 80035660: 00000613 li a2,0 + 80035664: c85ff06f j 800352e8 <_ZL5A2007j+0x118> + 80035668: 002a579b srliw a5,s4,0x2 + 8003566c: 0037f793 andi a5,a5,3 + 80035670: fff7879b addiw a5,a5,-1 + 80035674: 02079793 slli a5,a5,0x20 + 80035678: 0207d793 srli a5,a5,0x20 + 8003567c: 00197617 auipc a2,0x197 + 80035680: 0a460613 addi a2,a2,164 # 801cc720 + 80035684: 00f607b3 add a5,a2,a5 + 80035688: 0007c983 lbu s3,0(a5) + 8003568c: ec068ce3 beqz a3,80035564 <_ZL5A2007j+0x394> + 80035690: 0309f993 andi s3,s3,48 + 80035694: ed1ff06f j 80035564 <_ZL5A2007j+0x394> + 80035698: 000a0513 mv a0,s4 + 8003569c: d20ea0ef jal ra,8001fbbc <_Z13MMC5BGVRAMADRj> + 800356a0: 00054683 lbu a3,0(a0) + 800356a4: 00197a97 auipc s5,0x197 + 800356a8: 05ca8a93 addi s5,s5,92 # 801cc700 + 800356ac: 000bb783 ld a5,0(s7) + 800356b0: 001ac703 lbu a4,1(s5) + 800356b4: 00db0023 sb a3,0(s6) + 800356b8: e35ff06f j 800354ec <_ZL5A2007j+0x31c> + 800356bc: 00e6c733 xor a4,a3,a4 + 800356c0: 3e077593 andi a1,a4,992 + 800356c4: 3a000513 li a0,928 + 800356c8: 0007071b sext.w a4,a4 + 800356cc: 02a58263 beq a1,a0,800356f0 <_ZL5A2007j+0x520> + 800356d0: 3e000513 li a0,992 + 800356d4: 0207071b addiw a4,a4,32 + 800356d8: e4a596e3 bne a1,a0,80035524 <_ZL5A2007j+0x354> + 800356dc: 3e060613 addi a2,a2,992 + 800356e0: 00c6c6b3 xor a3,a3,a2 + 800356e4: 0006871b sext.w a4,a3 + 800356e8: 00e92023 sw a4,0(s2) + 800356ec: d7dff06f j 80035468 <_ZL5A2007j+0x298> + 800356f0: 00008737 lui a4,0x8 + 800356f4: ba070713 addi a4,a4,-1120 # 7ba0 <_entry_offset+0x7ba0> + 800356f8: 00e6c733 xor a4,a3,a4 + 800356fc: 00e92023 sw a4,0(s2) + 80035700: d69ff06f j 80035468 <_ZL5A2007j+0x298> + +0000000080035704 <_ZL5B2006jh>: + 80035704: fe010113 addi sp,sp,-32 + 80035708: 00913423 sd s1,8(sp) + 8003570c: 00113c23 sd ra,24(sp) + 80035710: 00813823 sd s0,16(sp) + 80035714: 01213023 sd s2,0(sp) + 80035718: 00197797 auipc a5,0x197 + 8003571c: 07c7a783 lw a5,124(a5) # 801cc794 + 80035720: 00058493 mv s1,a1 + 80035724: 00079a63 bnez a5,80035738 <_ZL5B2006jh+0x34> + 80035728: 00197797 auipc a5,0x197 + 8003572c: 0107b783 ld a5,16(a5) # 801cc738 <_ZL5Pline> + 80035730: 00078463 beqz a5,80035738 <_ZL5B2006jh+0x34> + 80035734: a41ff0ef jal ra,80035174 <_Z18FCEUPPU_LineUpdatev.part.0> + 80035738: 00197917 auipc s2,0x197 + 8003573c: 07090913 addi s2,s2,112 # 801cc7a8 + 80035740: 00094583 lbu a1,0(s2) + 80035744: 00197797 auipc a5,0x197 + 80035748: fd878793 addi a5,a5,-40 # 801cc71c + 8003574c: 00197717 auipc a4,0x197 + 80035750: fa970ca3 sb s1,-71(a4) # 801cc705 + 80035754: 0007a503 lw a0,0(a5) + 80035758: 0004841b sext.w s0,s1 + 8003575c: 08059263 bnez a1,800357e0 <_ZL5B2006jh+0xdc> + 80035760: 00196717 auipc a4,0x196 + 80035764: 2e070713 addi a4,a4,736 # 801cba40 + 80035768: 00004837 lui a6,0x4 + 8003576c: 02072683 lw a3,32(a4) + 80035770: 0084161b slliw a2,s0,0x8 + 80035774: f0080813 addi a6,a6,-256 # 3f00 <_entry_offset+0x3f00> + 80035778: 01067633 and a2,a2,a6 + 8003577c: 0034131b slliw t1,s0,0x3 + 80035780: 4024589b sraiw a7,s0,0x2 + 80035784: 4034581b sraiw a6,s0,0x3 + 80035788: 4044541b sraiw s0,s0,0x4 + 8003578c: 00347413 andi s0,s0,3 + 80035790: 0ff57513 andi a0,a0,255 + 80035794: 01813083 ld ra,24(sp) + 80035798: 00a66533 or a0,a2,a0 + 8003579c: 00872a23 sw s0,20(a4) + 800357a0: 0076f693 andi a3,a3,7 + 800357a4: 01013403 ld s0,16(sp) + 800357a8: 01837313 andi t1,t1,24 + 800357ac: 00a7a023 sw a0,0(a5) + 800357b0: 0066e6b3 or a3,a3,t1 + 800357b4: 0018f893 andi a7,a7,1 + 800357b8: 00187613 andi a2,a6,1 + 800357bc: 0015c793 xori a5,a1,1 + 800357c0: 00f90023 sb a5,0(s2) + 800357c4: 02d72023 sw a3,32(a4) + 800357c8: 01172e23 sw a7,28(a4) + 800357cc: 00c72c23 sw a2,24(a4) + 800357d0: 00813483 ld s1,8(sp) + 800357d4: 00013903 ld s2,0(sp) + 800357d8: 02010113 addi sp,sp,32 + 800357dc: 00008067 ret + 800357e0: 00010737 lui a4,0x10 + 800357e4: f0070713 addi a4,a4,-256 # ff00 <_entry_offset+0xff00> + 800357e8: 00e57533 and a0,a0,a4 + 800357ec: 00956533 or a0,a0,s1 + 800357f0: 00a7a023 sw a0,0(a5) + 800357f4: 00197797 auipc a5,0x197 + 800357f8: f2a7a023 sw a0,-224(a5) # 801cc714 + 800357fc: 00100793 li a5,1 + 80035800: 00197717 auipc a4,0x197 + 80035804: eaf72423 sw a5,-344(a4) # 801cc6a8 + 80035808: 00197797 auipc a5,0x197 + 8003580c: f007b783 ld a5,-256(a5) # 801cc708 + 80035810: 00078663 beqz a5,8003581c <_ZL5B2006jh+0x118> + 80035814: 000780e7 jalr a5 + 80035818: 00094583 lbu a1,0(s2) + 8003581c: 00196797 auipc a5,0x196 + 80035820: 22478793 addi a5,a5,548 # 801cba40 + 80035824: 0207a703 lw a4,32(a5) + 80035828: 0147a503 lw a0,20(a5) + 8003582c: 0187a603 lw a2,24(a5) + 80035830: 01c7a683 lw a3,28(a5) + 80035834: 01877713 andi a4,a4,24 + 80035838: 00545413 srli s0,s0,0x5 + 8003583c: 00e46433 or s0,s0,a4 + 80035840: 01f4f493 andi s1,s1,31 + 80035844: 0287a023 sw s0,32(a5) + 80035848: 0087a623 sw s0,12(a5) + 8003584c: 01813083 ld ra,24(sp) + 80035850: 01013403 ld s0,16(sp) + 80035854: 0297a223 sw s1,36(a5) + 80035858: 0097a823 sw s1,16(a5) + 8003585c: 00a7a023 sw a0,0(a5) + 80035860: 00c7a223 sw a2,4(a5) + 80035864: 00d7a423 sw a3,8(a5) + 80035868: 0015c793 xori a5,a1,1 + 8003586c: 00f90023 sb a5,0(s2) + 80035870: 00813483 ld s1,8(sp) + 80035874: 00013903 ld s2,0(sp) + 80035878: 02010113 addi sp,sp,32 + 8003587c: 00008067 ret + +0000000080035880 <_ZL5B2005jh>: + 80035880: fe010113 addi sp,sp,-32 + 80035884: 00813823 sd s0,16(sp) + 80035888: 00913423 sd s1,8(sp) + 8003588c: 01213023 sd s2,0(sp) + 80035890: 00113c23 sd ra,24(sp) + 80035894: 00197917 auipc s2,0x197 + 80035898: e8890913 addi s2,s2,-376 # 801cc71c + 8003589c: 00197797 auipc a5,0x197 + 800358a0: ef87a783 lw a5,-264(a5) # 801cc794 + 800358a4: 00092483 lw s1,0(s2) + 800358a8: 00058413 mv s0,a1 + 800358ac: 00079a63 bnez a5,800358c0 <_ZL5B2005jh+0x40> + 800358b0: 00197797 auipc a5,0x197 + 800358b4: e887b783 ld a5,-376(a5) # 801cc738 <_ZL5Pline> + 800358b8: 00078463 beqz a5,800358c0 <_ZL5B2005jh+0x40> + 800358bc: 8b9ff0ef jal ra,80035174 <_Z18FCEUPPU_LineUpdatev.part.0> + 800358c0: 00197597 auipc a1,0x197 + 800358c4: ee858593 addi a1,a1,-280 # 801cc7a8 + 800358c8: 0005c683 lbu a3,0(a1) + 800358cc: 0004061b sext.w a2,s0 + 800358d0: 00197797 auipc a5,0x197 + 800358d4: e2878aa3 sb s0,-459(a5) # 801cc705 + 800358d8: 4036551b sraiw a0,a2,0x3 + 800358dc: 00747813 andi a6,s0,7 + 800358e0: 04069a63 bnez a3,80035934 <_ZL5B2005jh+0xb4> + 800358e4: 000107b7 lui a5,0x10 + 800358e8: fe078793 addi a5,a5,-32 # ffe0 <_entry_offset+0xffe0> + 800358ec: 00f4f7b3 and a5,s1,a5 + 800358f0: 00196717 auipc a4,0x196 + 800358f4: 15070713 addi a4,a4,336 # 801cba40 + 800358f8: 00a7e7b3 or a5,a5,a0 + 800358fc: 0007879b sext.w a5,a5 + 80035900: 00197617 auipc a2,0x197 + 80035904: e3060223 sb a6,-476(a2) # 801cc724 + 80035908: 02a72223 sw a0,36(a4) + 8003590c: 03072423 sw a6,40(a4) + 80035910: 0016c693 xori a3,a3,1 + 80035914: 00d58023 sb a3,0(a1) + 80035918: 01813083 ld ra,24(sp) + 8003591c: 01013403 ld s0,16(sp) + 80035920: 00f92023 sw a5,0(s2) + 80035924: 00813483 ld s1,8(sp) + 80035928: 00013903 ld s2,0(sp) + 8003592c: 02010113 addi sp,sp,32 + 80035930: 00008067 ret + 80035934: 0026171b slliw a4,a2,0x2 + 80035938: 00c6179b slliw a5,a2,0xc + 8003593c: 00007637 lui a2,0x7 + 80035940: 00c7f7b3 and a5,a5,a2 + 80035944: 00009637 lui a2,0x9 + 80035948: fe077713 andi a4,a4,-32 + 8003594c: c1f60613 addi a2,a2,-993 # 8c1f <_entry_offset+0x8c1f> + 80035950: 00f767b3 or a5,a4,a5 + 80035954: 00c4f4b3 and s1,s1,a2 + 80035958: 00196717 auipc a4,0x196 + 8003595c: 0e870713 addi a4,a4,232 # 801cba40 + 80035960: 0097e7b3 or a5,a5,s1 + 80035964: 0007879b sext.w a5,a5 + 80035968: 02a72023 sw a0,32(a4) + 8003596c: 01072a23 sw a6,20(a4) + 80035970: fa1ff06f j 80035910 <_ZL5B2005jh+0x90> + +0000000080035974 <_ZL5A2002j>: + 80035974: ff010113 addi sp,sp,-16 + 80035978: 00113423 sd ra,8(sp) + 8003597c: 00197797 auipc a5,0x197 + 80035980: e187a783 lw a5,-488(a5) # 801cc794 + 80035984: 00079a63 bnez a5,80035998 <_ZL5A2002j+0x24> + 80035988: 00197797 auipc a5,0x197 + 8003598c: db07b783 ld a5,-592(a5) # 801cc738 <_ZL5Pline> + 80035990: 00078463 beqz a5,80035998 <_ZL5A2002j+0x24> + 80035994: fe0ff0ef jal ra,80035174 <_Z18FCEUPPU_LineUpdatev.part.0> + 80035998: 00197717 auipc a4,0x197 + 8003599c: d6d70713 addi a4,a4,-659 # 801cc705 + 800359a0: 00074503 lbu a0,0(a4) + 800359a4: 00197697 auipc a3,0x197 + 800359a8: d5c68693 addi a3,a3,-676 # 801cc700 + 800359ac: 0026c783 lbu a5,2(a3) + 800359b0: 01f57513 andi a0,a0,31 + 800359b4: 00197617 auipc a2,0x197 + 800359b8: de060a23 sb zero,-524(a2) # 801cc7a8 + 800359bc: 00a7e533 or a0,a5,a0 + 800359c0: 07f7f793 andi a5,a5,127 + 800359c4: 00f68123 sb a5,2(a3) + 800359c8: 00a70023 sb a0,0(a4) + 800359cc: 00813083 ld ra,8(sp) + 800359d0: 01010113 addi sp,sp,16 + 800359d4: 00008067 ret + +00000000800359d8 <_ZL5B2001jh>: + 800359d8: ff010113 addi sp,sp,-16 + 800359dc: 00813023 sd s0,0(sp) + 800359e0: 00113423 sd ra,8(sp) + 800359e4: 00197797 auipc a5,0x197 + 800359e8: db07a783 lw a5,-592(a5) # 801cc794 + 800359ec: 00058413 mv s0,a1 + 800359f0: 00079a63 bnez a5,80035a04 <_ZL5B2001jh+0x2c> + 800359f4: 00197797 auipc a5,0x197 + 800359f8: d447b783 ld a5,-700(a5) # 801cc738 <_ZL5Pline> + 800359fc: 00078463 beqz a5,80035a04 <_ZL5B2001jh+0x2c> + 80035a00: f74ff0ef jal ra,80035174 <_Z18FCEUPPU_LineUpdatev.part.0> + 80035a04: 00196717 auipc a4,0x196 + 80035a08: 1e074703 lbu a4,480(a4) # 801cbbe4 + 80035a0c: 0004079b sext.w a5,s0 + 80035a10: 02070263 beqz a4,80035a34 <_ZL5B2001jh+0x5c> + 80035a14: 4017d71b sraiw a4,a5,0x1 + 80035a18: 00179793 slli a5,a5,0x1 + 80035a1c: 0407f793 andi a5,a5,64 + 80035a20: 02077713 andi a4,a4,32 + 80035a24: 00f76733 or a4,a4,a5 + 80035a28: f9f47793 andi a5,s0,-97 + 80035a2c: 00f76433 or s0,a4,a5 + 80035a30: 00040793 mv a5,s0 + 80035a34: 00197717 auipc a4,0x197 + 80035a38: cc8708a3 sb s0,-815(a4) # 801cc705 + 80035a3c: 00197717 auipc a4,0x197 + 80035a40: cc8702a3 sb s0,-827(a4) # 801cc701 + 80035a44: 0e047413 andi s0,s0,224 + 80035a48: 00040863 beqz s0,80035a58 <_ZL5B2001jh+0x80> + 80035a4c: 4057d79b sraiw a5,a5,0x5 + 80035a50: 00197717 auipc a4,0x197 + 80035a54: cef70823 sb a5,-784(a4) # 801cc740 <_ZL5deemp> + 80035a58: 00813083 ld ra,8(sp) + 80035a5c: 00013403 ld s0,0(sp) + 80035a60: 01010113 addi sp,sp,16 + 80035a64: 00008067 ret + +0000000080035a68 <_ZL5B2000jh>: + 80035a68: fe010113 addi sp,sp,-32 + 80035a6c: 00813823 sd s0,16(sp) + 80035a70: 00113c23 sd ra,24(sp) + 80035a74: 00913423 sd s1,8(sp) + 80035a78: 00197797 auipc a5,0x197 + 80035a7c: d1c7a783 lw a5,-740(a5) # 801cc794 + 80035a80: 00058413 mv s0,a1 + 80035a84: 00079a63 bnez a5,80035a98 <_ZL5B2000jh+0x30> + 80035a88: 00197797 auipc a5,0x197 + 80035a8c: cb07b783 ld a5,-848(a5) # 801cc738 <_ZL5Pline> + 80035a90: 00078463 beqz a5,80035a98 <_ZL5B2000jh+0x30> + 80035a94: ee0ff0ef jal ra,80035174 <_Z18FCEUPPU_LineUpdatev.part.0> + 80035a98: 00197497 auipc s1,0x197 + 80035a9c: c6848493 addi s1,s1,-920 # 801cc700 + 80035aa0: 00048783 lb a5,0(s1) + 80035aa4: 00197717 auipc a4,0x197 + 80035aa8: c68700a3 sb s0,-927(a4) # 801cc705 + 80035aac: 0007c863 bltz a5,80035abc <_ZL5B2000jh+0x54> + 80035ab0: 0184179b slliw a5,s0,0x18 + 80035ab4: 4187d79b sraiw a5,a5,0x18 + 80035ab8: 0607cc63 bltz a5,80035b30 <_ZL5B2000jh+0xc8> + 80035abc: 00197517 auipc a0,0x197 + 80035ac0: c6050513 addi a0,a0,-928 # 801cc71c + 80035ac4: 00052703 lw a4,0(a0) + 80035ac8: 0000f6b7 lui a3,0xf + 80035acc: 3ff68693 addi a3,a3,1023 # f3ff <_entry_offset+0xf3ff> + 80035ad0: 00d77733 and a4,a4,a3 + 80035ad4: 000016b7 lui a3,0x1 + 80035ad8: 00a4159b slliw a1,s0,0xa + 80035adc: c0068693 addi a3,a3,-1024 # c00 <_entry_offset+0xc00> + 80035ae0: 0004079b sext.w a5,s0 + 80035ae4: 00d5f5b3 and a1,a1,a3 + 80035ae8: 00848023 sb s0,0(s1) + 80035aec: 01813083 ld ra,24(sp) + 80035af0: 4017d61b sraiw a2,a5,0x1 + 80035af4: 00b76733 or a4,a4,a1 + 80035af8: 4047d79b sraiw a5,a5,0x4 + 80035afc: 00147593 andi a1,s0,1 + 80035b00: 01013403 ld s0,16(sp) + 80035b04: 00196697 auipc a3,0x196 + 80035b08: f3c68693 addi a3,a3,-196 # 801cba40 + 80035b0c: 00167613 andi a2,a2,1 + 80035b10: 0017f793 andi a5,a5,1 + 80035b14: 00e52023 sw a4,0(a0) + 80035b18: 00b6ae23 sw a1,28(a3) + 80035b1c: 00c6ac23 sw a2,24(a3) + 80035b20: 02f6a623 sw a5,44(a3) + 80035b24: 00813483 ld s1,8(sp) + 80035b28: 02010113 addi sp,sp,32 + 80035b2c: 00008067 ret + 80035b30: 00248783 lb a5,2(s1) + 80035b34: f807d4e3 bgez a5,80035abc <_ZL5B2000jh+0x54> + 80035b38: a4ccb0ef jal ra,80000d84 <_Z11TriggerNMI2v> + 80035b3c: f81ff06f j 80035abc <_ZL5B2000jh+0x54> + +0000000080035b40 <_ZL5A200xj>: + 80035b40: 00197797 auipc a5,0x197 + 80035b44: c547a783 lw a5,-940(a5) # 801cc794 + 80035b48: 02079863 bnez a5,80035b78 <_ZL5A200xj+0x38> + 80035b4c: 00197797 auipc a5,0x197 + 80035b50: bec7b783 ld a5,-1044(a5) # 801cc738 <_ZL5Pline> + 80035b54: 02078263 beqz a5,80035b78 <_ZL5A200xj+0x38> + 80035b58: ff010113 addi sp,sp,-16 + 80035b5c: 00113423 sd ra,8(sp) + 80035b60: e14ff0ef jal ra,80035174 <_Z18FCEUPPU_LineUpdatev.part.0> + 80035b64: 00813083 ld ra,8(sp) + 80035b68: 00197517 auipc a0,0x197 + 80035b6c: b9d54503 lbu a0,-1123(a0) # 801cc705 + 80035b70: 01010113 addi sp,sp,16 + 80035b74: 00008067 ret + 80035b78: 00197517 auipc a0,0x197 + 80035b7c: b8d54503 lbu a0,-1139(a0) # 801cc705 + 80035b80: 00008067 ret + +0000000080035b84 <_ZL7ResetRLPh>: + 80035b84: ff010113 addi sp,sp,-16 + 80035b88: 10000613 li a2,256 + 80035b8c: 0ff00593 li a1,255 + 80035b90: 00813023 sd s0,0(sp) + 80035b94: 00113423 sd ra,8(sp) + 80035b98: 00050413 mv s0,a0 + 80035b9c: 68d050ef jal ra,8003ba28 + 80035ba0: 00196717 auipc a4,0x196 + 80035ba4: fac72703 lw a4,-84(a4) # 801cbb4c + 80035ba8: 0017179b slliw a5,a4,0x1 + 80035bac: 00e787bb addw a5,a5,a4 + 80035bb0: 0047979b slliw a5,a5,0x4 + 80035bb4: 00022717 auipc a4,0x22 + 80035bb8: cac72703 lw a4,-852(a4) # 80057860 + 80035bbc: 00e787bb addw a5,a5,a4 + 80035bc0: 00197717 auipc a4,0x197 + 80035bc4: bcf72823 sw a5,-1072(a4) # 801cc790 + 80035bc8: 00197797 auipc a5,0x197 + 80035bcc: b807a023 sw zero,-1152(a5) # 801cc748 <_ZL5tofix> + 80035bd0: 00197717 auipc a4,0x197 + 80035bd4: b8873023 sd s0,-1152(a4) # 801cc750 <_ZL6Plinef> + 80035bd8: 00197717 auipc a4,0x197 + 80035bdc: b6873023 sd s0,-1184(a4) # 801cc738 <_ZL5Pline> + 80035be0: 00197717 auipc a4,0x197 + 80035be4: b6072e23 sw zero,-1156(a4) # 801cc75c <_ZL9firsttile> + 80035be8: 00197797 auipc a5,0x197 + 80035bec: bac7a783 lw a5,-1108(a5) # 801cc794 + 80035bf0: 00079663 bnez a5,80035bfc <_ZL7ResetRLPh+0x78> + 80035bf4: 00040463 beqz s0,80035bfc <_ZL7ResetRLPh+0x78> + 80035bf8: d7cff0ef jal ra,80035174 <_Z18FCEUPPU_LineUpdatev.part.0> + 80035bfc: 00813083 ld ra,8(sp) + 80035c00: 00013403 ld s0,0(sp) + 80035c04: 00100793 li a5,1 + 80035c08: 00197717 auipc a4,0x197 + 80035c0c: b4f72023 sw a5,-1216(a4) # 801cc748 <_ZL5tofix> + 80035c10: 01010113 addi sp,sp,16 + 80035c14: 00008067 ret + +0000000080035c18 <_ZL5A2004j>: + 80035c18: f7010113 addi sp,sp,-144 + 80035c1c: 08113423 sd ra,136(sp) + 80035c20: 08813023 sd s0,128(sp) + 80035c24: 06913c23 sd s1,120(sp) + 80035c28: 07213823 sd s2,112(sp) + 80035c2c: 07313423 sd s3,104(sp) + 80035c30: 07413023 sd s4,96(sp) + 80035c34: 05513c23 sd s5,88(sp) + 80035c38: 05613823 sd s6,80(sp) + 80035c3c: 05713423 sd s7,72(sp) + 80035c40: 05813023 sd s8,64(sp) + 80035c44: 03913c23 sd s9,56(sp) + 80035c48: 03a13823 sd s10,48(sp) + 80035c4c: 03b13423 sd s11,40(sp) + 80035c50: 00197797 auipc a5,0x197 + 80035c54: b447a783 lw a5,-1212(a5) # 801cc794 + 80035c58: 08078e63 beqz a5,80035cf4 <_ZL5A2004j+0xdc> + 80035c5c: 00196697 auipc a3,0x196 + 80035c60: de468693 addi a3,a3,-540 # 801cba40 + 80035c64: 0346ad03 lw s10,52(a3) + 80035c68: 0f000793 li a5,240 + 80035c6c: 00197717 auipc a4,0x197 + 80035c70: a9470713 addi a4,a4,-1388 # 801cc700 + 80035c74: 03a7c863 blt a5,s10,80035ca4 <_ZL5A2004j+0x8c> + 80035c78: 00174783 lbu a5,1(a4) + 80035c7c: 0187f793 andi a5,a5,24 + 80035c80: 02078263 beqz a5,80035ca4 <_ZL5A2004j+0x8c> + 80035c84: 0386a803 lw a6,56(a3) + 80035c88: 03f00793 li a5,63 + 80035c8c: 0907c263 blt a5,a6,80035d10 <_ZL5A2004j+0xf8> + 80035c90: 0ff00793 li a5,255 + 80035c94: 00196717 auipc a4,0x196 + 80035c98: e0f72e23 sw a5,-484(a4) # 801cbab0 + 80035c9c: 0ff00513 li a0,255 + 80035ca0: 0180006f j 80035cb8 <_ZL5A2004j+0xa0> + 80035ca4: 00374703 lbu a4,3(a4) + 80035ca8: 00195797 auipc a5,0x195 + 80035cac: 8a078793 addi a5,a5,-1888 # 801ca548 + 80035cb0: 00e787b3 add a5,a5,a4 + 80035cb4: 0007c503 lbu a0,0(a5) + 80035cb8: 08813083 ld ra,136(sp) + 80035cbc: 08013403 ld s0,128(sp) + 80035cc0: 07813483 ld s1,120(sp) + 80035cc4: 07013903 ld s2,112(sp) + 80035cc8: 06813983 ld s3,104(sp) + 80035ccc: 06013a03 ld s4,96(sp) + 80035cd0: 05813a83 ld s5,88(sp) + 80035cd4: 05013b03 ld s6,80(sp) + 80035cd8: 04813b83 ld s7,72(sp) + 80035cdc: 04013c03 ld s8,64(sp) + 80035ce0: 03813c83 ld s9,56(sp) + 80035ce4: 03013d03 ld s10,48(sp) + 80035ce8: 02813d83 ld s11,40(sp) + 80035cec: 09010113 addi sp,sp,144 + 80035cf0: 00008067 ret + 80035cf4: 00197797 auipc a5,0x197 + 80035cf8: a447b783 ld a5,-1468(a5) # 801cc738 <_ZL5Pline> + 80035cfc: 00078463 beqz a5,80035d04 <_ZL5A2004j+0xec> + 80035d00: c74ff0ef jal ra,80035174 <_Z18FCEUPPU_LineUpdatev.part.0> + 80035d04: 00197517 auipc a0,0x197 + 80035d08: a0154503 lbu a0,-1535(a0) # 801cc705 + 80035d0c: fadff06f j 80035cb8 <_ZL5A2004j+0xa0> + 80035d10: 00196e17 auipc t3,0x196 + 80035d14: d70e0e13 addi t3,t3,-656 # 801cba80 + 80035d18: 030e2d83 lw s11,48(t3) + 80035d1c: 034e2783 lw a5,52(t3) + 80035d20: 0ffdf513 andi a0,s11,255 + 80035d24: 18f80463 beq a6,a5,80035eac <_ZL5A2004j+0x294> + 80035d28: 00074683 lbu a3,0(a4) + 80035d2c: 00195297 auipc t0,0x195 + 80035d30: 81c28293 addi t0,t0,-2020 # 801ca548 + 80035d34: 0fc2c503 lbu a0,252(t0) + 80035d38: 0206f693 andi a3,a3,32 + 80035d3c: 000e2483 lw s1,0(t3) + 80035d40: 008e2583 lw a1,8(t3) + 80035d44: 00050b9b sext.w s7,a0 + 80035d48: ff800993 li s3,-8 + 80035d4c: 00068463 beqz a3,80035d54 <_ZL5A2004j+0x13c> + 80035d50: ff000993 li s3,-16 + 80035d54: 00374883 lbu a7,3(a4) + 80035d58: 00ce2c83 lw s9,12(t3) + 80035d5c: 004e2683 lw a3,4(t3) + 80035d60: 0f88f613 andi a2,a7,248 + 80035d64: 00166613 ori a2,a2,1 + 80035d68: 00060b13 mv s6,a2 + 80035d6c: 038e2703 lw a4,56(t3) + 80035d70: 01628b33 add s6,t0,s6 + 80035d74: 01613823 sd s6,16(sp) + 80035d78: 0f88f893 andi a7,a7,248 + 80035d7c: 000c8393 mv t2,s9 + 80035d80: 000d8f93 mv t6,s11 + 80035d84: 00000c13 li s8,0 + 80035d88: 00000913 li s2,0 + 80035d8c: 00013423 sd zero,8(sp) + 80035d90: 00000e93 li t4,0 + 80035d94: 00000a13 li s4,0 + 80035d98: 00000a93 li s5,0 + 80035d9c: 0ff00f13 li t5,255 + 80035da0: 00400313 li t1,4 + 80035da4: 13f00413 li s0,319 + 80035da8: 00011617 auipc a2,0x11 + 80035dac: 8a460613 addi a2,a2,-1884 # 8004664c + 80035db0: fffd0b1b addiw s6,s10,-1 + 80035db4: 0cff4263 blt t5,a5,80035e78 <_ZL5A2004j+0x260> + 80035db8: 26e36463 bltu t1,a4,80036020 <_ZL5A2004j+0x408> + 80035dbc: 00271713 slli a4,a4,0x2 + 80035dc0: 00c70733 add a4,a4,a2 + 80035dc4: 00072703 lw a4,0(a4) + 80035dc8: 00c70733 add a4,a4,a2 + 80035dcc: 00070067 jr a4 + 80035dd0: 0115873b addw a4,a1,a7 + 80035dd4: 00e28733 add a4,t0,a4 + 80035dd8: 0017859b addiw a1,a5,1 + 80035ddc: 00074f83 lbu t6,0(a4) + 80035de0: 26b802e3 beq a6,a1,80036844 <_ZL5A2004j+0xc2c> + 80035de4: 1abf44e3 blt t5,a1,8003678c <_ZL5A2004j+0xb74> + 80035de8: 00058793 mv a5,a1 + 80035dec: 00100913 li s2,1 + 80035df0: 00000593 li a1,0 + 80035df4: 00100a13 li s4,1 + 80035df8: 00100a93 li s5,1 + 80035dfc: 0017f713 andi a4,a5,1 + 80035e00: 30070c63 beqz a4,80036118 <_ZL5A2004j+0x500> + 80035e04: 00269e9b slliw t4,a3,0x2 + 80035e08: 01d5eeb3 or t4,a1,t4 + 80035e0c: 000e8e9b sext.w t4,t4 + 80035e10: 01d28eb3 add t4,t0,t4 + 80035e14: 000ece83 lbu t4,0(t4) + 80035e18: 41db0ebb subw t4,s6,t4 + 80035e1c: 01d9feb3 and t4,s3,t4 + 80035e20: 000e8e9b sext.w t4,t4 + 80035e24: 2c0e9c63 bnez t4,800360fc <_ZL5A2004j+0x4e4> + 80035e28: 00178f9b addiw t6,a5,1 + 80035e2c: 05f800e3 beq a6,t6,8003666c <_ZL5A2004j+0xa54> + 80035e30: 41ff4a63 blt t5,t6,80036244 <_ZL5A2004j+0x62c> + 80035e34: 00070593 mv a1,a4 + 80035e38: 000f8793 mv a5,t6 + 80035e3c: 00100913 li s2,1 + 80035e40: 00100a93 li s5,1 + 80035e44: 00d5e733 or a4,a1,a3 + 80035e48: 00070f9b sext.w t6,a4 + 80035e4c: 01f28fb3 add t6,t0,t6 + 80035e50: 0017fe93 andi t4,a5,1 + 80035e54: 000fcf83 lbu t6,0(t6) + 80035e58: 2c0e8a63 beqz t4,8003612c <_ZL5A2004j+0x514> + 80035e5c: 0015859b addiw a1,a1,1 + 80035e60: 14658263 beq a1,t1,80035fa4 <_ZL5A2004j+0x38c> + 80035e64: 0017879b addiw a5,a5,1 + 80035e68: 00100913 li s2,1 + 80035e6c: 56f80a63 beq a6,a5,800363e0 <_ZL5A2004j+0x7c8> + 80035e70: fcff5ae3 bge t5,a5,80035e44 <_ZL5A2004j+0x22c> + 80035e74: 00300713 li a4,3 + 80035e78: 18f45463 bge s0,a5,80036000 <_ZL5A2004j+0x3e8> + 80035e7c: 000a8463 beqz s5,80035e84 <_ZL5A2004j+0x26c> + 80035e80: 02ee2c23 sw a4,56(t3) + 80035e84: 000a0463 beqz s4,80035e8c <_ZL5A2004j+0x274> + 80035e88: 00de2223 sw a3,4(t3) + 80035e8c: 00813783 ld a5,8(sp) + 80035e90: 32079863 bnez a5,800361c0 <_ZL5A2004j+0x5a8> + 80035e94: 00090463 beqz s2,80035e9c <_ZL5A2004j+0x284> + 80035e98: 00be2423 sw a1,8(t3) + 80035e9c: 000c0463 beqz s8,80035ea4 <_ZL5A2004j+0x28c> + 80035ea0: 009e2023 sw s1,0(t3) + 80035ea4: 320c9863 bnez s9,800361d4 <_ZL5A2004j+0x5bc> + 80035ea8: 037e2823 sw s7,48(t3) + 80035eac: 030e2a23 sw a6,52(t3) + 80035eb0: e09ff06f j 80035cb8 <_ZL5A2004j+0xa0> + 80035eb4: 00b8873b addw a4,a7,a1 + 80035eb8: 00176713 ori a4,a4,1 + 80035ebc: 0007071b sext.w a4,a4 + 80035ec0: 0017859b addiw a1,a5,1 + 80035ec4: 00e28733 add a4,t0,a4 + 80035ec8: 00b13c23 sd a1,24(sp) + 80035ecc: 00074f83 lbu t6,0(a4) + 80035ed0: 22b800e3 beq a6,a1,800368f0 <_ZL5A2004j+0xcd8> + 80035ed4: 00100a93 li s5,1 + 80035ed8: 00100a13 li s4,1 + 80035edc: 00100913 li s2,1 + 80035ee0: 7cbf4263 blt t5,a1,800366a4 <_ZL5A2004j+0xa8c> + 80035ee4: 01813783 ld a5,24(sp) + 80035ee8: 000d0593 mv a1,s10 + 80035eec: 00100e93 li t4,1 + 80035ef0: 00269f9b slliw t6,a3,0x2 + 80035ef4: 00dec463 blt t4,a3,80035efc <_ZL5A2004j+0x2e4> + 80035ef8: 011f8fbb addw t6,t6,a7 + 80035efc: 01f28eb3 add t4,t0,t6 + 80035f00: 00438713 addi a4,t2,4 + 80035f04: 000ece83 lbu t4,0(t4) + 80035f08: 00271713 slli a4,a4,0x2 + 80035f0c: 00ee0733 add a4,t3,a4 + 80035f10: 01f72023 sw t6,0(a4) + 80035f14: 0017f713 andi a4,a5,1 + 80035f18: 000e8f9b sext.w t6,t4 + 80035f1c: 1c070c63 beqz a4,800360f4 <_ZL5A2004j+0x4dc> + 80035f20: 41db0ebb subw t4,s6,t4 + 80035f24: 01d9feb3 and t4,s3,t4 + 80035f28: 000e8e9b sext.w t4,t4 + 80035f2c: 200e9a63 bnez t4,80036140 <_ZL5A2004j+0x528> + 80035f30: 0017891b addiw s2,a5,1 + 80035f34: 00090593 mv a1,s2 + 80035f38: 0013839b addiw t2,t2,1 + 80035f3c: 71280a63 beq a6,s2,80036650 <_ZL5A2004j+0xa38> + 80035f40: 2b2f4663 blt t5,s2,800361ec <_ZL5A2004j+0x5d4> + 80035f44: 00070593 mv a1,a4 + 80035f48: 00100713 li a4,1 + 80035f4c: 00090793 mv a5,s2 + 80035f50: 00e13423 sd a4,8(sp) + 80035f54: 00100913 li s2,1 + 80035f58: 00100a93 li s5,1 + 80035f5c: 00269e9b slliw t4,a3,0x2 + 80035f60: 01d8873b addw a4,a7,t4 + 80035f64: 0017fd13 andi s10,a5,1 + 80035f68: 000d0863 beqz s10,80035f78 <_ZL5A2004j+0x360> + 80035f6c: 0015859b addiw a1,a1,1 + 80035f70: 1e658a63 beq a1,t1,80036164 <_ZL5A2004j+0x54c> + 80035f74: 00100913 li s2,1 + 80035f78: 00100f93 li t6,1 + 80035f7c: 24dfd863 bge t6,a3,800361cc <_ZL5A2004j+0x5b4> + 80035f80: 00beefb3 or t6,t4,a1 + 80035f84: 000f8f9b sext.w t6,t6 + 80035f88: 01f28fb3 add t6,t0,t6 + 80035f8c: 0017879b addiw a5,a5,1 + 80035f90: 000fcf83 lbu t6,0(t6) + 80035f94: 44f80e63 beq a6,a5,800363f0 <_ZL5A2004j+0x7d8> + 80035f98: fcff56e3 bge t5,a5,80035f64 <_ZL5A2004j+0x34c> + 80035f9c: 00100713 li a4,1 + 80035fa0: 0600006f j 80036000 <_ZL5A2004j+0x3e8> + 80035fa4: 0017891b addiw s2,a5,1 + 80035fa8: 0016869b addiw a3,a3,1 + 80035fac: 00090713 mv a4,s2 + 80035fb0: 03f6f693 andi a3,a3,63 + 80035fb4: 77280263 beq a6,s2,80036718 <_ZL5A2004j+0xb00> + 80035fb8: 332f4a63 blt t5,s2,800362ec <_ZL5A2004j+0x6d4> + 80035fbc: 00090793 mv a5,s2 + 80035fc0: 00100a13 li s4,1 + 80035fc4: 00100a93 li s5,1 + 80035fc8: 0017f713 andi a4,a5,1 + 80035fcc: 00070863 beqz a4,80035fdc <_ZL5A2004j+0x3c4> + 80035fd0: 0016869b addiw a3,a3,1 + 80035fd4: 03f6f693 andi a3,a3,63 + 80035fd8: 00100a13 li s4,1 + 80035fdc: 0026971b slliw a4,a3,0x2 + 80035fe0: 00e28733 add a4,t0,a4 + 80035fe4: 0017879b addiw a5,a5,1 + 80035fe8: 00074f83 lbu t6,0(a4) + 80035fec: 3cf80e63 beq a6,a5,800363c8 <_ZL5A2004j+0x7b0> + 80035ff0: fcff5ce3 bge t5,a5,80035fc8 <_ZL5A2004j+0x3b0> + 80035ff4: 00100913 li s2,1 + 80035ff8: 00000593 li a1,0 + 80035ffc: 00400713 li a4,4 + 80036000: 4037de9b sraiw t4,a5,0x3 + 80036004: 007efe93 andi t4,t4,7 + 80036008: 047ece63 blt t4,t2,80036064 <_ZL5A2004j+0x44c> + 8003600c: 0c048a63 beqz s1,800360e0 <_ZL5A2004j+0x4c8> + 80036010: 000b8f93 mv t6,s7 + 80036014: 00100c13 li s8,1 + 80036018: 00000493 li s1,0 + 8003601c: 00100e93 li t4,1 + 80036020: 0017879b addiw a5,a5,1 + 80036024: d8f818e3 bne a6,a5,80035db4 <_ZL5A2004j+0x19c> + 80036028: 000a8463 beqz s5,80036030 <_ZL5A2004j+0x418> + 8003602c: 02ee2c23 sw a4,56(t3) + 80036030: 000a0463 beqz s4,80036038 <_ZL5A2004j+0x420> + 80036034: 00de2223 sw a3,4(t3) + 80036038: 260e8063 beqz t4,80036298 <_ZL5A2004j+0x680> + 8003603c: 03fe2823 sw t6,48(t3) + 80036040: 00813783 ld a5,8(sp) + 80036044: 16079a63 bnez a5,800361b8 <_ZL5A2004j+0x5a0> + 80036048: 00090463 beqz s2,80036050 <_ZL5A2004j+0x438> + 8003604c: 00be2423 sw a1,8(t3) + 80036050: 0ffff513 andi a0,t6,255 + 80036054: e40c0ce3 beqz s8,80035eac <_ZL5A2004j+0x294> + 80036058: 009e2023 sw s1,0(t3) + 8003605c: 030e2a23 sw a6,52(t3) + 80036060: c59ff06f j 80035cb8 <_ZL5A2004j+0xa0> + 80036064: 0047ff93 andi t6,a5,4 + 80036068: 040f9a63 bnez t6,800360bc <_ZL5A2004j+0x4a4> + 8003606c: 004e8e93 addi t4,t4,4 + 80036070: 002e9e93 slli t4,t4,0x2 + 80036074: 01de0eb3 add t4,t3,t4 + 80036078: 000eaf83 lw t6,0(t4) + 8003607c: 00158e9b addiw t4,a1,1 + 80036080: 01f5e5b3 or a1,a1,t6 + 80036084: 0005859b sext.w a1,a1 + 80036088: 00b285b3 add a1,t0,a1 + 8003608c: 0005cf83 lbu t6,0(a1) + 80036090: 046e8e63 beq t4,t1,800360ec <_ZL5A2004j+0x4d4> + 80036094: 000e8593 mv a1,t4 + 80036098: 00100913 li s2,1 + 8003609c: 00100e93 li t4,1 + 800360a0: f81ff06f j 80036020 <_ZL5A2004j+0x408> + 800360a4: 00090793 mv a5,s2 + 800360a8: 00100913 li s2,1 + 800360ac: 00000593 li a1,0 + 800360b0: 00100a13 li s4,1 + 800360b4: 00200713 li a4,2 + 800360b8: 00100a93 li s5,1 + 800360bc: 003eee93 ori t4,t4,3 + 800360c0: 004e8e93 addi t4,t4,4 + 800360c4: 002e9e93 slli t4,t4,0x2 + 800360c8: 01de0eb3 add t4,t3,t4 + 800360cc: 000eaf83 lw t6,0(t4) + 800360d0: 00100e93 li t4,1 + 800360d4: 01f28fb3 add t6,t0,t6 + 800360d8: 000fcf83 lbu t6,0(t6) + 800360dc: f45ff06f j 80036020 <_ZL5A2004j+0x408> + 800360e0: 00100e93 li t4,1 + 800360e4: 0ff00f93 li t6,255 + 800360e8: f39ff06f j 80036020 <_ZL5A2004j+0x408> + 800360ec: 00000593 li a1,0 + 800360f0: 00100913 li s2,1 + 800360f4: 00100e93 li t4,1 + 800360f8: f29ff06f j 80036020 <_ZL5A2004j+0x408> + 800360fc: 0016869b addiw a3,a3,1 + 80036100: 04000713 li a4,64 + 80036104: 18e68e63 beq a3,a4,800362a0 <_ZL5A2004j+0x688> + 80036108: 0015859b addiw a1,a1,1 + 8003610c: 0035f593 andi a1,a1,3 + 80036110: 00100913 li s2,1 + 80036114: 00100a13 li s4,1 + 80036118: 0017879b addiw a5,a5,1 + 8003611c: 40f80063 beq a6,a5,8003651c <_ZL5A2004j+0x904> + 80036120: ccff5ee3 bge t5,a5,80035dfc <_ZL5A2004j+0x1e4> + 80036124: 00200713 li a4,2 + 80036128: ed9ff06f j 80036000 <_ZL5A2004j+0x3e8> + 8003612c: 0017879b addiw a5,a5,1 + 80036130: 2af80863 beq a6,a5,800363e0 <_ZL5A2004j+0x7c8> + 80036134: d0ff5ae3 bge t5,a5,80035e48 <_ZL5A2004j+0x230> + 80036138: 00300713 li a4,3 + 8003613c: ec5ff06f j 80036000 <_ZL5A2004j+0x3e8> + 80036140: 0016869b addiw a3,a3,1 + 80036144: 04000e93 li t4,64 + 80036148: 19d68063 beq a3,t4,800362c8 <_ZL5A2004j+0x6b0> + 8003614c: 00800e93 li t4,8 + 80036150: 21d38e63 beq t2,t4,8003636c <_ZL5A2004j+0x754> + 80036154: 00100e93 li t4,1 + 80036158: 00100a13 li s4,1 + 8003615c: 00000713 li a4,0 + 80036160: ec1ff06f j 80036020 <_ZL5A2004j+0x408> + 80036164: 0016869b addiw a3,a3,1 + 80036168: 04000593 li a1,64 + 8003616c: 1cb68c63 beq a3,a1,80036344 <_ZL5A2004j+0x72c> + 80036170: 00800593 li a1,8 + 80036174: 34b38a63 beq t2,a1,800364c8 <_ZL5A2004j+0x8b0> + 80036178: 00100e93 li t4,1 + 8003617c: 0026959b slliw a1,a3,0x2 + 80036180: d2dedae3 bge t4,a3,80035eb4 <_ZL5A2004j+0x29c> + 80036184: 0015e713 ori a4,a1,1 + 80036188: 00e28733 add a4,t0,a4 + 8003618c: 0017879b addiw a5,a5,1 + 80036190: 00074f83 lbu t6,0(a4) + 80036194: 6ef80e63 beq a6,a5,80036890 <_ZL5A2004j+0xc78> + 80036198: 00100a93 li s5,1 + 8003619c: 00100a13 li s4,1 + 800361a0: 00100913 li s2,1 + 800361a4: 000d0593 mv a1,s10 + 800361a8: 00000713 li a4,0 + 800361ac: d4ff50e3 bge t5,a5,80035eec <_ZL5A2004j+0x2d4> + 800361b0: e4f458e3 bge s0,a5,80036000 <_ZL5A2004j+0x3e8> + 800361b4: cc9ff06f j 80035e7c <_ZL5A2004j+0x264> + 800361b8: 007e2623 sw t2,12(t3) + 800361bc: e8dff06f j 80036048 <_ZL5A2004j+0x430> + 800361c0: 007e2623 sw t2,12(t3) + 800361c4: 00038c93 mv s9,t2 + 800361c8: ccdff06f j 80035e94 <_ZL5A2004j+0x27c> + 800361cc: 00e5efb3 or t6,a1,a4 + 800361d0: db5ff06f j 80035f84 <_ZL5A2004j+0x36c> + 800361d4: 010e2783 lw a5,16(t3) + 800361d8: 030e2a23 sw a6,52(t3) + 800361dc: 00f282b3 add t0,t0,a5 + 800361e0: 0002c503 lbu a0,0(t0) + 800361e4: 02ae2823 sw a0,48(t3) + 800361e8: ad1ff06f j 80035cb8 <_ZL5A2004j+0xa0> + 800361ec: 59244463 blt s0,s2,80036774 <_ZL5A2004j+0xb5c> + 800361f0: 4035d59b sraiw a1,a1,0x3 + 800361f4: 0075fe93 andi t4,a1,7 + 800361f8: 1a7eda63 bge t4,t2,800363ac <_ZL5A2004j+0x794> + 800361fc: 00497593 andi a1,s2,4 + 80036200: 3a059263 bnez a1,800365a4 <_ZL5A2004j+0x98c> + 80036204: 004e8593 addi a1,t4,4 + 80036208: 00259593 slli a1,a1,0x2 + 8003620c: 00be05b3 add a1,t3,a1 + 80036210: 0005a583 lw a1,0(a1) + 80036214: 0027879b addiw a5,a5,2 + 80036218: 0015e593 ori a1,a1,1 + 8003621c: 00b285b3 add a1,t0,a1 + 80036220: 0005cf83 lbu t6,0(a1) + 80036224: 72f80663 beq a6,a5,80036950 <_ZL5A2004j+0xd38> + 80036228: 00100e93 li t4,1 + 8003622c: 01d13423 sd t4,8(sp) + 80036230: 00100913 li s2,1 + 80036234: 00200593 li a1,2 + 80036238: 00100a93 li s5,1 + 8003623c: dcf452e3 bge s0,a5,80036000 <_ZL5A2004j+0x3e8> + 80036240: c3dff06f j 80035e7c <_ZL5A2004j+0x264> + 80036244: 51f44e63 blt s0,t6,80036760 <_ZL5A2004j+0xb48> + 80036248: 403fd59b sraiw a1,t6,0x3 + 8003624c: 0075fe93 andi t4,a1,7 + 80036250: 147ed263 bge t4,t2,80036394 <_ZL5A2004j+0x77c> + 80036254: 004ff593 andi a1,t6,4 + 80036258: 2c059c63 bnez a1,80036530 <_ZL5A2004j+0x918> + 8003625c: 004e8713 addi a4,t4,4 + 80036260: 00271713 slli a4,a4,0x2 + 80036264: 00ee0733 add a4,t3,a4 + 80036268: 00072703 lw a4,0(a4) + 8003626c: 0027879b addiw a5,a5,2 + 80036270: 00176713 ori a4,a4,1 + 80036274: 00e28733 add a4,t0,a4 + 80036278: 00074f83 lbu t6,0(a4) + 8003627c: 6af80e63 beq a6,a5,80036938 <_ZL5A2004j+0xd20> + 80036280: 00100913 li s2,1 + 80036284: 00200593 li a1,2 + 80036288: 00300713 li a4,3 + 8003628c: 00100a93 li s5,1 + 80036290: d6f458e3 bge s0,a5,80036000 <_ZL5A2004j+0x3e8> + 80036294: be9ff06f j 80035e7c <_ZL5A2004j+0x264> + 80036298: 000d8f93 mv t6,s11 + 8003629c: da5ff06f j 80036040 <_ZL5A2004j+0x428> + 800362a0: 0015859b addiw a1,a1,1 + 800362a4: 0017891b addiw s2,a5,1 + 800362a8: 0035f593 andi a1,a1,3 + 800362ac: 55280c63 beq a6,s2,80036804 <_ZL5A2004j+0xbec> + 800362b0: 1b2f4c63 blt t5,s2,80036468 <_ZL5A2004j+0x850> + 800362b4: 00090793 mv a5,s2 + 800362b8: 00100a13 li s4,1 + 800362bc: 00100a93 li s5,1 + 800362c0: 00000693 li a3,0 + 800362c4: d05ff06f j 80035fc8 <_ZL5A2004j+0x3b0> + 800362c8: 00178a1b addiw s4,a5,1 + 800362cc: 000a0713 mv a4,s4 + 800362d0: 53480063 beq a6,s4,800367f0 <_ZL5A2004j+0xbd8> + 800362d4: 134f4663 blt t5,s4,80036400 <_ZL5A2004j+0x7e8> + 800362d8: 000a0793 mv a5,s4 + 800362dc: 00100a93 li s5,1 + 800362e0: 00100a13 li s4,1 + 800362e4: 00000693 li a3,0 + 800362e8: ce1ff06f j 80035fc8 <_ZL5A2004j+0x3b0> + 800362ec: 59244463 blt s0,s2,80036874 <_ZL5A2004j+0xc5c> + 800362f0: 4037571b sraiw a4,a4,0x3 + 800362f4: 00777e93 andi t4,a4,7 + 800362f8: 207ed663 bge t4,t2,80036504 <_ZL5A2004j+0x8ec> + 800362fc: 00497713 andi a4,s2,4 + 80036300: 32071c63 bnez a4,80036638 <_ZL5A2004j+0xa20> + 80036304: 004e8713 addi a4,t4,4 + 80036308: 00271713 slli a4,a4,0x2 + 8003630c: 00ee0733 add a4,t3,a4 + 80036310: 00072703 lw a4,0(a4) + 80036314: 0027879b addiw a5,a5,2 + 80036318: 00476713 ori a4,a4,4 + 8003631c: 00e28733 add a4,t0,a4 + 80036320: 00074f83 lbu t6,0(a4) + 80036324: 00400713 li a4,4 + 80036328: 5ef80063 beq a6,a5,80036908 <_ZL5A2004j+0xcf0> + 8003632c: 00100913 li s2,1 + 80036330: 00500593 li a1,5 + 80036334: 00100a13 li s4,1 + 80036338: 00100a93 li s5,1 + 8003633c: ccf452e3 bge s0,a5,80036000 <_ZL5A2004j+0x3e8> + 80036340: b3dff06f j 80035e7c <_ZL5A2004j+0x264> + 80036344: 01013683 ld a3,16(sp) + 80036348: 0017859b addiw a1,a5,1 + 8003634c: 0006cf83 lbu t6,0(a3) + 80036350: 4cb80863 beq a6,a1,80036820 <_ZL5A2004j+0xc08> + 80036354: 1ebf4a63 blt t5,a1,80036548 <_ZL5A2004j+0x930> + 80036358: 00058793 mv a5,a1 + 8003635c: 00100a13 li s4,1 + 80036360: 00100a93 li s5,1 + 80036364: 00000693 li a3,0 + 80036368: c61ff06f j 80035fc8 <_ZL5A2004j+0x3b0> + 8003636c: 0017891b addiw s2,a5,1 + 80036370: 00090593 mv a1,s2 + 80036374: 4d280863 beq a6,s2,80036844 <_ZL5A2004j+0xc2c> + 80036378: 252f4463 blt t5,s2,800365c0 <_ZL5A2004j+0x9a8> + 8003637c: 00090793 mv a5,s2 + 80036380: 00000593 li a1,0 + 80036384: 00100913 li s2,1 + 80036388: 00100a13 li s4,1 + 8003638c: 00100a93 li s5,1 + 80036390: a6dff06f j 80035dfc <_ZL5A2004j+0x1e4> + 80036394: 00070593 mv a1,a4 + 80036398: 000f8793 mv a5,t6 + 8003639c: 00100913 li s2,1 + 800363a0: 00300713 li a4,3 + 800363a4: 00100a93 li s5,1 + 800363a8: c65ff06f j 8003600c <_ZL5A2004j+0x3f4> + 800363ac: 00100e93 li t4,1 + 800363b0: 00090793 mv a5,s2 + 800363b4: 00070593 mv a1,a4 + 800363b8: 00100913 li s2,1 + 800363bc: 01d13423 sd t4,8(sp) + 800363c0: 00100a93 li s5,1 + 800363c4: c49ff06f j 8003600c <_ZL5A2004j+0x3f4> + 800363c8: 00100913 li s2,1 + 800363cc: 00000593 li a1,0 + 800363d0: 00100e93 li t4,1 + 800363d4: 00400713 li a4,4 + 800363d8: c40a9ae3 bnez s5,8003602c <_ZL5A2004j+0x414> + 800363dc: c55ff06f j 80036030 <_ZL5A2004j+0x418> + 800363e0: 00100e93 li t4,1 + 800363e4: 00300713 li a4,3 + 800363e8: c40a92e3 bnez s5,8003602c <_ZL5A2004j+0x414> + 800363ec: c45ff06f j 80036030 <_ZL5A2004j+0x418> + 800363f0: 00100e93 li t4,1 + 800363f4: 00100713 li a4,1 + 800363f8: c20a9ae3 bnez s5,8003602c <_ZL5A2004j+0x414> + 800363fc: c35ff06f j 80036030 <_ZL5A2004j+0x418> + 80036400: 47444063 blt s0,s4,80036860 <_ZL5A2004j+0xc48> + 80036404: 4037571b sraiw a4,a4,0x3 + 80036408: 00777e93 andi t4,a4,7 + 8003640c: 207eda63 bge t4,t2,80036620 <_ZL5A2004j+0xa08> + 80036410: 004a7713 andi a4,s4,4 + 80036414: 0007069b sext.w a3,a4 + 80036418: 2e071463 bnez a4,80036700 <_ZL5A2004j+0xae8> + 8003641c: 004e8713 addi a4,t4,4 + 80036420: 00271713 slli a4,a4,0x2 + 80036424: 00ee0733 add a4,t3,a4 + 80036428: 00072e83 lw t4,0(a4) + 8003642c: 0015871b addiw a4,a1,1 + 80036430: 01d5e5b3 or a1,a1,t4 + 80036434: 0005859b sext.w a1,a1 + 80036438: 00b285b3 add a1,t0,a1 + 8003643c: 0005cf83 lbu t6,0(a1) + 80036440: 3e670e63 beq a4,t1,8003683c <_ZL5A2004j+0xc24> + 80036444: 0027879b addiw a5,a5,2 + 80036448: 00070593 mv a1,a4 + 8003644c: 4ef80c63 beq a6,a5,80036944 <_ZL5A2004j+0xd2c> + 80036450: 00100913 li s2,1 + 80036454: 00100a13 li s4,1 + 80036458: 00400713 li a4,4 + 8003645c: 00100a93 li s5,1 + 80036460: baf450e3 bge s0,a5,80036000 <_ZL5A2004j+0x3e8> + 80036464: a19ff06f j 80035e7c <_ZL5A2004j+0x264> + 80036468: 3f244a63 blt s0,s2,8003685c <_ZL5A2004j+0xc44> + 8003646c: 4039571b sraiw a4,s2,0x3 + 80036470: 00777e93 andi t4,a4,7 + 80036474: 187ed863 bge t4,t2,80036604 <_ZL5A2004j+0x9ec> + 80036478: 00497713 andi a4,s2,4 + 8003647c: 0007069b sext.w a3,a4 + 80036480: 2a071663 bnez a4,8003672c <_ZL5A2004j+0xb14> + 80036484: 004e8713 addi a4,t4,4 + 80036488: 00271713 slli a4,a4,0x2 + 8003648c: 00ee0733 add a4,t3,a4 + 80036490: 00072e83 lw t4,0(a4) + 80036494: 0015871b addiw a4,a1,1 + 80036498: 01d5e5b3 or a1,a1,t4 + 8003649c: 0005859b sext.w a1,a1 + 800364a0: 00b285b3 add a1,t0,a1 + 800364a4: 0005cf83 lbu t6,0(a1) + 800364a8: f8671ee3 bne a4,t1,80036444 <_ZL5A2004j+0x82c> + 800364ac: 00090793 mv a5,s2 + 800364b0: 00000593 li a1,0 + 800364b4: 00100913 li s2,1 + 800364b8: 00100e93 li t4,1 + 800364bc: 00100a13 li s4,1 + 800364c0: 00100a93 li s5,1 + 800364c4: b5dff06f j 80036020 <_ZL5A2004j+0x408> + 800364c8: 00100e93 li t4,1 + 800364cc: 0026959b slliw a1,a3,0x2 + 800364d0: 90ded0e3 bge t4,a3,80035dd0 <_ZL5A2004j+0x1b8> + 800364d4: 00b285b3 add a1,t0,a1 + 800364d8: 0017879b addiw a5,a5,1 + 800364dc: 0005cf83 lbu t6,0(a1) + 800364e0: 42f80a63 beq a6,a5,80036914 <_ZL5A2004j+0xcfc> + 800364e4: 00100913 li s2,1 + 800364e8: 00000593 li a1,0 + 800364ec: 00100a13 li s4,1 + 800364f0: e8ff5ee3 bge t5,a5,8003638c <_ZL5A2004j+0x774> + 800364f4: 00200713 li a4,2 + 800364f8: 00100a93 li s5,1 + 800364fc: b0f452e3 bge s0,a5,80036000 <_ZL5A2004j+0x3e8> + 80036500: 97dff06f j 80035e7c <_ZL5A2004j+0x264> + 80036504: 00090793 mv a5,s2 + 80036508: 00400713 li a4,4 + 8003650c: 00100913 li s2,1 + 80036510: 00100a13 li s4,1 + 80036514: 00100a93 li s5,1 + 80036518: af5ff06f j 8003600c <_ZL5A2004j+0x3f4> + 8003651c: 00068f93 mv t6,a3 + 80036520: 00100e93 li t4,1 + 80036524: 00200713 li a4,2 + 80036528: b00a92e3 bnez s5,8003602c <_ZL5A2004j+0x414> + 8003652c: b05ff06f j 80036030 <_ZL5A2004j+0x418> + 80036530: 00070593 mv a1,a4 + 80036534: 000f8793 mv a5,t6 + 80036538: 00100913 li s2,1 + 8003653c: 00300713 li a4,3 + 80036540: 00100a93 li s5,1 + 80036544: b79ff06f j 800360bc <_ZL5A2004j+0x4a4> + 80036548: 36b44a63 blt s0,a1,800368bc <_ZL5A2004j+0xca4> + 8003654c: 4035d71b sraiw a4,a1,0x3 + 80036550: 00777e93 andi t4,a4,7 + 80036554: 127ed863 bge t4,t2,80036684 <_ZL5A2004j+0xa6c> + 80036558: 0045f713 andi a4,a1,4 + 8003655c: 0007069b sext.w a3,a4 + 80036560: 26071863 bnez a4,800367d0 <_ZL5A2004j+0xbb8> + 80036564: 004e8713 addi a4,t4,4 + 80036568: 00271713 slli a4,a4,0x2 + 8003656c: 00ee0733 add a4,t3,a4 + 80036570: 00072703 lw a4,0(a4) + 80036574: 0027879b addiw a5,a5,2 + 80036578: 00176713 ori a4,a4,1 + 8003657c: 00e28733 add a4,t0,a4 + 80036580: 00074f83 lbu t6,0(a4) + 80036584: 00400713 li a4,4 + 80036588: 16f80063 beq a6,a5,800366e8 <_ZL5A2004j+0xad0> + 8003658c: 00100913 li s2,1 + 80036590: 00200593 li a1,2 + 80036594: 00100a13 li s4,1 + 80036598: 00100a93 li s5,1 + 8003659c: a6f452e3 bge s0,a5,80036000 <_ZL5A2004j+0x3e8> + 800365a0: 8ddff06f j 80035e7c <_ZL5A2004j+0x264> + 800365a4: 00100f93 li t6,1 + 800365a8: 00090793 mv a5,s2 + 800365ac: 00070593 mv a1,a4 + 800365b0: 00100913 li s2,1 + 800365b4: 01f13423 sd t6,8(sp) + 800365b8: 00100a93 li s5,1 + 800365bc: b01ff06f j 800360bc <_ZL5A2004j+0x4a4> + 800365c0: 31244c63 blt s0,s2,800368d8 <_ZL5A2004j+0xcc0> + 800365c4: 4035d59b sraiw a1,a1,0x3 + 800365c8: 00497f93 andi t6,s2,4 + 800365cc: 0075fe93 andi t4,a1,7 + 800365d0: ac0f9ae3 bnez t6,800360a4 <_ZL5A2004j+0x48c> + 800365d4: 004e8593 addi a1,t4,4 + 800365d8: 00259593 slli a1,a1,0x2 + 800365dc: 00be05b3 add a1,t3,a1 + 800365e0: 0005a583 lw a1,0(a1) + 800365e4: 0027879b addiw a5,a5,2 + 800365e8: 00b285b3 add a1,t0,a1 + 800365ec: 0005cf83 lbu t6,0(a1) + 800365f0: 00070593 mv a1,a4 + 800365f4: 1cf80863 beq a6,a5,800367c4 <_ZL5A2004j+0xbac> + 800365f8: 00100913 li s2,1 + 800365fc: 00100a13 li s4,1 + 80036600: ef5ff06f j 800364f4 <_ZL5A2004j+0x8dc> + 80036604: 00090793 mv a5,s2 + 80036608: 00100a13 li s4,1 + 8003660c: 00100913 li s2,1 + 80036610: 00400713 li a4,4 + 80036614: 00100a93 li s5,1 + 80036618: 00000693 li a3,0 + 8003661c: 9f1ff06f j 8003600c <_ZL5A2004j+0x3f4> + 80036620: 000a0793 mv a5,s4 + 80036624: 00400713 li a4,4 + 80036628: 00100a13 li s4,1 + 8003662c: 00100a93 li s5,1 + 80036630: 00000693 li a3,0 + 80036634: 9d9ff06f j 8003600c <_ZL5A2004j+0x3f4> + 80036638: 00090793 mv a5,s2 + 8003663c: 00400713 li a4,4 + 80036640: 00100913 li s2,1 + 80036644: 00100a13 li s4,1 + 80036648: 00100a93 li s5,1 + 8003664c: a71ff06f j 800360bc <_ZL5A2004j+0x4a4> + 80036650: 00100793 li a5,1 + 80036654: 00070593 mv a1,a4 + 80036658: 00100913 li s2,1 + 8003665c: 00f13423 sd a5,8(sp) + 80036660: 00100e93 li t4,1 + 80036664: 02ee2c23 sw a4,56(t3) + 80036668: 9c9ff06f j 80036030 <_ZL5A2004j+0x418> + 8003666c: 00070593 mv a1,a4 + 80036670: 00068f93 mv t6,a3 + 80036674: 00100913 li s2,1 + 80036678: 00300713 li a4,3 + 8003667c: 00100e93 li t4,1 + 80036680: fe5ff06f j 80036664 <_ZL5A2004j+0xa4c> + 80036684: 00058793 mv a5,a1 + 80036688: 00400713 li a4,4 + 8003668c: 000d0593 mv a1,s10 + 80036690: 00100913 li s2,1 + 80036694: 00100a13 li s4,1 + 80036698: 00100a93 li s5,1 + 8003669c: 00000693 li a3,0 + 800366a0: 96dff06f j 8003600c <_ZL5A2004j+0x3f4> + 800366a4: 01813703 ld a4,24(sp) + 800366a8: 26e44e63 blt s0,a4,80036924 <_ZL5A2004j+0xd0c> + 800366ac: 4035de9b sraiw t4,a1,0x3 + 800366b0: 007efe93 andi t4,t4,7 + 800366b4: 087eda63 bge t4,t2,80036748 <_ZL5A2004j+0xb30> + 800366b8: 00477593 andi a1,a4,4 + 800366bc: 0005871b sext.w a4,a1 + 800366c0: 1e059063 bnez a1,800368a0 <_ZL5A2004j+0xc88> + 800366c4: 004e8593 addi a1,t4,4 + 800366c8: 00259593 slli a1,a1,0x2 + 800366cc: 00be05b3 add a1,t3,a1 + 800366d0: 0005a583 lw a1,0(a1) + 800366d4: 0027879b addiw a5,a5,2 + 800366d8: 0015e593 ori a1,a1,1 + 800366dc: 00b285b3 add a1,t0,a1 + 800366e0: 0005cf83 lbu t6,0(a1) + 800366e4: eaf814e3 bne a6,a5,8003658c <_ZL5A2004j+0x974> + 800366e8: 00200593 li a1,2 + 800366ec: 00100a13 li s4,1 + 800366f0: 00100e93 li t4,1 + 800366f4: 00100913 li s2,1 + 800366f8: 02ee2c23 sw a4,56(t3) + 800366fc: 935ff06f j 80036030 <_ZL5A2004j+0x418> + 80036700: 000a0793 mv a5,s4 + 80036704: 00400713 li a4,4 + 80036708: 00100a13 li s4,1 + 8003670c: 00100a93 li s5,1 + 80036710: 00000693 li a3,0 + 80036714: 9a9ff06f j 800360bc <_ZL5A2004j+0x4a4> + 80036718: 00400713 li a4,4 + 8003671c: 00100913 li s2,1 + 80036720: 00100a13 li s4,1 + 80036724: 00100e93 li t4,1 + 80036728: f3dff06f j 80036664 <_ZL5A2004j+0xa4c> + 8003672c: 00090793 mv a5,s2 + 80036730: 00100a13 li s4,1 + 80036734: 00100913 li s2,1 + 80036738: 00400713 li a4,4 + 8003673c: 00100a93 li s5,1 + 80036740: 00000693 li a3,0 + 80036744: 979ff06f j 800360bc <_ZL5A2004j+0x4a4> + 80036748: 01813783 ld a5,24(sp) + 8003674c: 000d0593 mv a1,s10 + 80036750: 000a8913 mv s2,s5 + 80036754: 000a8a13 mv s4,s5 + 80036758: 00000713 li a4,0 + 8003675c: 8b1ff06f j 8003600c <_ZL5A2004j+0x3f4> + 80036760: 00070593 mv a1,a4 + 80036764: 00300713 li a4,3 + 80036768: 00100913 li s2,1 + 8003676c: 02ee2c23 sw a4,56(t3) + 80036770: f14ff06f j 80035e84 <_ZL5A2004j+0x26c> + 80036774: 00100793 li a5,1 + 80036778: 00070593 mv a1,a4 + 8003677c: 00100913 li s2,1 + 80036780: 00f13423 sd a5,8(sp) + 80036784: 02ee2c23 sw a4,56(t3) + 80036788: efcff06f j 80035e84 <_ZL5A2004j+0x26c> + 8003678c: 14b44663 blt s0,a1,800368d8 <_ZL5A2004j+0xcc0> + 80036790: 4035de9b sraiw t4,a1,0x3 + 80036794: 0045f713 andi a4,a1,4 + 80036798: 007efe93 andi t4,t4,7 + 8003679c: 0e071663 bnez a4,80036888 <_ZL5A2004j+0xc70> + 800367a0: 004e8713 addi a4,t4,4 + 800367a4: 00271713 slli a4,a4,0x2 + 800367a8: 00ee0733 add a4,t3,a4 + 800367ac: 00072703 lw a4,0(a4) + 800367b0: 0027879b addiw a5,a5,2 + 800367b4: 000d0593 mv a1,s10 + 800367b8: 00e28733 add a4,t0,a4 + 800367bc: 00074f83 lbu t6,0(a4) + 800367c0: e2f81ce3 bne a6,a5,800365f8 <_ZL5A2004j+0x9e0> + 800367c4: 00100a13 li s4,1 + 800367c8: 00200713 li a4,2 + 800367cc: f25ff06f j 800366f0 <_ZL5A2004j+0xad8> + 800367d0: 00058793 mv a5,a1 + 800367d4: 00400713 li a4,4 + 800367d8: 000d0593 mv a1,s10 + 800367dc: 00100913 li s2,1 + 800367e0: 00100a13 li s4,1 + 800367e4: 00100a93 li s5,1 + 800367e8: 00000693 li a3,0 + 800367ec: 8d1ff06f j 800360bc <_ZL5A2004j+0x4a4> + 800367f0: 00100a13 li s4,1 + 800367f4: 00000693 li a3,0 + 800367f8: 00400713 li a4,4 + 800367fc: 00100e93 li t4,1 + 80036800: e65ff06f j 80036664 <_ZL5A2004j+0xa4c> + 80036804: 00100913 li s2,1 + 80036808: 00000f93 li t6,0 + 8003680c: 00100a13 li s4,1 + 80036810: 00000693 li a3,0 + 80036814: 00400713 li a4,4 + 80036818: 00100e93 li t4,1 + 8003681c: e49ff06f j 80036664 <_ZL5A2004j+0xa4c> + 80036820: 00400713 li a4,4 + 80036824: 000d0593 mv a1,s10 + 80036828: 00100913 li s2,1 + 8003682c: 00100a13 li s4,1 + 80036830: 00000693 li a3,0 + 80036834: 00100e93 li t4,1 + 80036838: e2dff06f j 80036664 <_ZL5A2004j+0xa4c> + 8003683c: 000a0793 mv a5,s4 + 80036840: c71ff06f j 800364b0 <_ZL5A2004j+0x898> + 80036844: 00100913 li s2,1 + 80036848: 00000593 li a1,0 + 8003684c: 00100a13 li s4,1 + 80036850: 00200713 li a4,2 + 80036854: 00100e93 li t4,1 + 80036858: e0dff06f j 80036664 <_ZL5A2004j+0xa4c> + 8003685c: 00100913 li s2,1 + 80036860: 00400713 li a4,4 + 80036864: 00100a13 li s4,1 + 80036868: 00000693 li a3,0 + 8003686c: 02ee2c23 sw a4,56(t3) + 80036870: e14ff06f j 80035e84 <_ZL5A2004j+0x26c> + 80036874: 00400713 li a4,4 + 80036878: 00100913 li s2,1 + 8003687c: 00100a13 li s4,1 + 80036880: 02ee2c23 sw a4,56(t3) + 80036884: e00ff06f j 80035e84 <_ZL5A2004j+0x26c> + 80036888: 00058793 mv a5,a1 + 8003688c: 81dff06f j 800360a8 <_ZL5A2004j+0x490> + 80036890: 000d0593 mv a1,s10 + 80036894: 00100a13 li s4,1 + 80036898: 00000713 li a4,0 + 8003689c: e55ff06f j 800366f0 <_ZL5A2004j+0xad8> + 800368a0: 01813783 ld a5,24(sp) + 800368a4: 000d0593 mv a1,s10 + 800368a8: 00100913 li s2,1 + 800368ac: 00100a13 li s4,1 + 800368b0: 00000713 li a4,0 + 800368b4: 00100a93 li s5,1 + 800368b8: 805ff06f j 800360bc <_ZL5A2004j+0x4a4> + 800368bc: 00400713 li a4,4 + 800368c0: 000d0593 mv a1,s10 + 800368c4: 00100913 li s2,1 + 800368c8: 00100a13 li s4,1 + 800368cc: 00000693 li a3,0 + 800368d0: 02ee2c23 sw a4,56(t3) + 800368d4: db0ff06f j 80035e84 <_ZL5A2004j+0x26c> + 800368d8: 00200713 li a4,2 + 800368dc: 00100913 li s2,1 + 800368e0: 00000593 li a1,0 + 800368e4: 00100a13 li s4,1 + 800368e8: 02ee2c23 sw a4,56(t3) + 800368ec: d98ff06f j 80035e84 <_ZL5A2004j+0x26c> + 800368f0: 000d0593 mv a1,s10 + 800368f4: 00100913 li s2,1 + 800368f8: 00100a13 li s4,1 + 800368fc: 00000713 li a4,0 + 80036900: 00100e93 li t4,1 + 80036904: d61ff06f j 80036664 <_ZL5A2004j+0xa4c> + 80036908: 00500593 li a1,5 + 8003690c: 00100a13 li s4,1 + 80036910: de1ff06f j 800366f0 <_ZL5A2004j+0xad8> + 80036914: 00000593 li a1,0 + 80036918: 00100a13 li s4,1 + 8003691c: 00200713 li a4,2 + 80036920: dd1ff06f j 800366f0 <_ZL5A2004j+0xad8> + 80036924: 00000713 li a4,0 + 80036928: 000d0593 mv a1,s10 + 8003692c: 000a0913 mv s2,s4 + 80036930: 02ee2c23 sw a4,56(t3) + 80036934: d50ff06f j 80035e84 <_ZL5A2004j+0x26c> + 80036938: 00200593 li a1,2 + 8003693c: 00300713 li a4,3 + 80036940: db1ff06f j 800366f0 <_ZL5A2004j+0xad8> + 80036944: 00100a13 li s4,1 + 80036948: 00400713 li a4,4 + 8003694c: da5ff06f j 800366f0 <_ZL5A2004j+0xad8> + 80036950: 00100793 li a5,1 + 80036954: 00200593 li a1,2 + 80036958: 00f13423 sd a5,8(sp) + 8003695c: d95ff06f j 800366f0 <_ZL5A2004j+0xad8> + +0000000080036960 <_Z12FCEUPPU_Loopi>: + 80036960: f2010113 addi sp,sp,-224 + 80036964: 0c113c23 sd ra,216(sp) + 80036968: 0c813823 sd s0,208(sp) + 8003696c: 0c913423 sd s1,200(sp) + 80036970: 0d213023 sd s2,192(sp) + 80036974: 0b313c23 sd s3,184(sp) + 80036978: 0b413823 sd s4,176(sp) + 8003697c: 0b513423 sd s5,168(sp) + 80036980: 0b613023 sd s6,160(sp) + 80036984: 09713c23 sd s7,152(sp) + 80036988: 09813823 sd s8,144(sp) + 8003698c: 09913423 sd s9,136(sp) + 80036990: 09a13023 sd s10,128(sp) + 80036994: 07b13c23 sd s11,120(sp) + 80036998: 00196797 auipc a5,0x196 + 8003699c: dfc7a783 lw a5,-516(a5) # 801cc794 + 800369a0: 04a13c23 sd a0,88(sp) + 800369a4: 00078c63 beqz a5,800369bc <_Z12FCEUPPU_Loopi+0x5c> + 800369a8: 00196797 auipc a5,0x196 + 800369ac: ca07b783 ld a5,-864(a5) # 801cc648 + 800369b0: 00c7a703 lw a4,12(a5) + 800369b4: 00300793 li a5,3 + 800369b8: 36f71463 bne a4,a5,80036d20 <_Z12FCEUPPU_Loopi+0x3c0> + 800369bc: 00016417 auipc s0,0x16 + 800369c0: 7c440413 addi s0,s0,1988 # 8004d180 <_ZL7ppudead> + 800369c4: 00042a03 lw s4,0(s0) + 800369c8: 080a0a63 beqz s4,80036a5c <_Z12FCEUPPU_Loopi+0xfc> + 800369cc: 0000f637 lui a2,0xf + 800369d0: 08000593 li a1,128 + 800369d4: 00195517 auipc a0,0x195 + 800369d8: 14c53503 ld a0,332(a0) # 801cbb20 + 800369dc: 04c050ef jal ra,8003ba28 + 800369e0: 00196517 auipc a0,0x196 + 800369e4: d4c52503 lw a0,-692(a0) # 801cc72c <_ZL19scanlines_per_frame> + 800369e8: 0025179b slliw a5,a0,0x2 + 800369ec: 00a787bb addw a5,a5,a0 + 800369f0: 0047971b slliw a4,a5,0x4 + 800369f4: 00e787bb addw a5,a5,a4 + 800369f8: 0027979b slliw a5,a5,0x2 + 800369fc: 00a7853b addw a0,a5,a0 + 80036a00: c60ca0ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80036a04: 00042783 lw a5,0(s0) + 80036a08: fff7879b addiw a5,a5,-1 + 80036a0c: 00f42023 sw a5,0(s0) + 80036a10: a14ca0ef jal ra,80000c24 <_Z7ShowFPSv> + 80036a14: 05813783 ld a5,88(sp) + 80036a18: 0017ba13 seqz s4,a5 + 80036a1c: 0d813083 ld ra,216(sp) + 80036a20: 0d013403 ld s0,208(sp) + 80036a24: 0c813483 ld s1,200(sp) + 80036a28: 0c013903 ld s2,192(sp) + 80036a2c: 0b813983 ld s3,184(sp) + 80036a30: 0a813a83 ld s5,168(sp) + 80036a34: 0a013b03 ld s6,160(sp) + 80036a38: 09813b83 ld s7,152(sp) + 80036a3c: 09013c03 ld s8,144(sp) + 80036a40: 08813c83 ld s9,136(sp) + 80036a44: 08013d03 ld s10,128(sp) + 80036a48: 07813d83 ld s11,120(sp) + 80036a4c: 000a0513 mv a0,s4 + 80036a50: 0b013a03 ld s4,176(sp) + 80036a54: 0e010113 addi sp,sp,224 + 80036a58: 00008067 ret + 80036a5c: 15500513 li a0,341 + 80036a60: c00ca0ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80036a64: 00196417 auipc s0,0x196 + 80036a68: c9c40413 addi s0,s0,-868 # 801cc700 + 80036a6c: 00244783 lbu a5,2(s0) + 80036a70: 00c00513 li a0,12 + 80036a74: 00196a97 auipc s5,0x196 + 80036a78: bd4a8a93 addi s5,s5,-1068 # 801cc648 + 80036a7c: f807e793 ori a5,a5,-128 + 80036a80: 00f40123 sb a5,2(s0) + 80036a84: 00196797 auipc a5,0x196 + 80036a88: c80781a3 sb zero,-893(a5) # 801cc707 + 80036a8c: 00196797 auipc a5,0x196 + 80036a90: c6078ba3 sb zero,-905(a5) # 801cc703 + 80036a94: bccca0ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80036a98: 000ab703 ld a4,0(s5) + 80036a9c: 00300793 li a5,3 + 80036aa0: 00c72703 lw a4,12(a4) + 80036aa4: 00f71463 bne a4,a5,80036aac <_Z12FCEUPPU_Loopi+0x14c> + 80036aa8: 4a40106f j 80037f4c <_Z12FCEUPPU_Loopi+0x15ec> + 80036aac: 00040783 lb a5,0(s0) + 80036ab0: 0007d463 bgez a5,80036ab8 <_Z12FCEUPPU_Loopi+0x158> + 80036ab4: 42c0106f j 80037ee0 <_Z12FCEUPPU_Loopi+0x1580> + 80036ab8: 00196517 auipc a0,0x196 + 80036abc: c7452503 lw a0,-908(a0) # 801cc72c <_ZL19scanlines_per_frame> + 80036ac0: 0025179b slliw a5,a0,0x2 + 80036ac4: 00a787bb addw a5,a5,a0 + 80036ac8: 0047971b slliw a4,a5,0x4 + 80036acc: 00e787bb addw a5,a5,a4 + 80036ad0: 0027979b slliw a5,a5,0x2 + 80036ad4: 00a787bb addw a5,a5,a0 + 80036ad8: fffec537 lui a0,0xfffec + 80036adc: d9a5051b addiw a0,a0,-614 + 80036ae0: 00a7853b addw a0,a5,a0 + 80036ae4: 00196997 auipc s3,0x196 + 80036ae8: ba898993 addi s3,s3,-1112 # 801cc68c + 80036aec: b74ca0ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80036af0: 0009c783 lbu a5,0(s3) + 80036af4: 04078e63 beqz a5,80036b50 <_Z12FCEUPPU_Loopi+0x1f0> + 80036af8: 00196717 auipc a4,0x196 + 80036afc: bac72703 lw a4,-1108(a4) # 801cc6a4 + 80036b00: 04070863 beqz a4,80036b50 <_Z12FCEUPPU_Loopi+0x1f0> + 80036b04: 00195797 auipc a5,0x195 + 80036b08: 0557c783 lbu a5,85(a5) # 801cbb59 + 80036b0c: 00078863 beqz a5,80036b1c <_Z12FCEUPPU_Loopi+0x1bc> + 80036b10: 00016797 auipc a5,0x16 + 80036b14: 6647c783 lbu a5,1636(a5) # 8004d174 + 80036b18: 02079c63 bnez a5,80036b50 <_Z12FCEUPPU_Loopi+0x1f0> + 80036b1c: 0027179b slliw a5,a4,0x2 + 80036b20: 00e787bb addw a5,a5,a4 + 80036b24: 0047951b slliw a0,a5,0x4 + 80036b28: 00a7853b addw a0,a5,a0 + 80036b2c: 0025151b slliw a0,a0,0x2 + 80036b30: 00e5053b addw a0,a0,a4 + 80036b34: 00100793 li a5,1 + 80036b38: ff45051b addiw a0,a0,-12 + 80036b3c: 00196717 auipc a4,0x196 + 80036b40: b4f708a3 sb a5,-1199(a4) # 801cc68d + 80036b44: b1cca0ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80036b48: 00196797 auipc a5,0x196 + 80036b4c: b40782a3 sb zero,-1211(a5) # 801cc68d + 80036b50: 00244783 lbu a5,2(s0) + 80036b54: 10000513 li a0,256 + 80036b58: 01f7f793 andi a5,a5,31 + 80036b5c: 00f40123 sb a5,2(s0) + 80036b60: b00ca0ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80036b64: 00144783 lbu a5,1(s0) + 80036b68: 0187f793 andi a5,a5,24 + 80036b6c: 06078663 beqz a5,80036bd8 <_Z12FCEUPPU_Loopi+0x278> + 80036b70: 00196717 auipc a4,0x196 + 80036b74: b5073703 ld a4,-1200(a4) # 801cc6c0 + 80036b78: 00070c63 beqz a4,80036b90 <_Z12FCEUPPU_Loopi+0x230> + 80036b7c: 00044783 lbu a5,0(s0) + 80036b80: 01800693 li a3,24 + 80036b84: 0387f793 andi a5,a5,56 + 80036b88: 00d78463 beq a5,a3,80036b90 <_Z12FCEUPPU_Loopi+0x230> + 80036b8c: 000700e7 jalr a4 + 80036b90: 00196497 auipc s1,0x196 + 80036b94: b7848493 addi s1,s1,-1160 # 801cc708 + 80036b98: 0004b783 ld a5,0(s1) + 80036b9c: 02078663 beqz a5,80036bc8 <_Z12FCEUPPU_Loopi+0x268> + 80036ba0: 02a00913 li s2,42 + 80036ba4: 0080006f j 80036bac <_Z12FCEUPPU_Loopi+0x24c> + 80036ba8: 0004b783 ld a5,0(s1) + 80036bac: 00002537 lui a0,0x2 + 80036bb0: 000780e7 jalr a5 + 80036bb4: 0004b783 ld a5,0(s1) + 80036bb8: fff9091b addiw s2,s2,-1 + 80036bbc: 00000513 li a0,0 + 80036bc0: 000780e7 jalr a5 + 80036bc4: fe0912e3 bnez s2,80036ba8 <_Z12FCEUPPU_Loopi+0x248> + 80036bc8: 00196797 auipc a5,0x196 + 80036bcc: b007b783 ld a5,-1280(a5) # 801cc6c8 + 80036bd0: 00078463 beqz a5,80036bd8 <_Z12FCEUPPU_Loopi+0x278> + 80036bd4: 000780e7 jalr a5 + 80036bd8: 04500513 li a0,69 + 80036bdc: a84ca0ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80036be0: 00144783 lbu a5,1(s0) + 80036be4: 0187f793 andi a5,a5,24 + 80036be8: 02078663 beqz a5,80036c14 <_Z12FCEUPPU_Loopi+0x2b4> + 80036bec: 00196517 auipc a0,0x196 + 80036bf0: b3052503 lw a0,-1232(a0) # 801cc71c + 80036bf4: 00196797 auipc a5,0x196 + 80036bf8: b2a7a023 sw a0,-1248(a5) # 801cc714 + 80036bfc: 00196797 auipc a5,0x196 + 80036c00: b0c7b783 ld a5,-1268(a5) # 801cc708 + 80036c04: 00078863 beqz a5,80036c14 <_Z12FCEUPPU_Loopi+0x2b4> + 80036c08: 03251513 slli a0,a0,0x32 + 80036c0c: 03255513 srli a0,a0,0x32 + 80036c10: 000780e7 jalr a5 + 80036c14: 00195d17 auipc s10,0x195 + 80036c18: f0cd0d13 addi s10,s10,-244 # 801cbb20 + 80036c1c: 000d3503 ld a0,0(s10) + 80036c20: 00196497 auipc s1,0x196 + 80036c24: b1048493 addi s1,s1,-1264 # 801cc730 <_ZL4kook> + 80036c28: 00196797 auipc a5,0x196 + 80036c2c: ae078ea3 sb zero,-1283(a5) # 801cc725 <_ZL10numsprites> + 80036c30: 00196797 auipc a5,0x196 + 80036c34: b007aa23 sw zero,-1260(a5) # 801cc744 <_ZL5spork> + 80036c38: f4dfe0ef jal ra,80035b84 <_ZL7ResetRLPh> + 80036c3c: 0004a783 lw a5,0(s1) + 80036c40: 01000513 li a0,16 + 80036c44: 40f5053b subw a0,a0,a5 + 80036c48: a18ca0ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80036c4c: 000ab683 ld a3,0(s5) + 80036c50: 0004a783 lw a5,0(s1) + 80036c54: 00300713 li a4,3 + 80036c58: 00c6a683 lw a3,12(a3) + 80036c5c: 0017c793 xori a5,a5,1 + 80036c60: 00f4a023 sw a5,0(s1) + 80036c64: 00e69463 bne a3,a4,80036c6c <_Z12FCEUPPU_Loopi+0x30c> + 80036c68: 2800106f j 80037ee8 <_Z12FCEUPPU_Loopi+0x1588> + 80036c6c: 05813783 ld a5,88(sp) + 80036c70: 0e078663 beqz a5,80036d5c <_Z12FCEUPPU_Loopi+0x3fc> + 80036c74: 00244783 lbu a5,2(s0) + 80036c78: 00196497 auipc s1,0x196 + 80036c7c: a4848493 addi s1,s1,-1464 # 801cc6c0 + 80036c80: 0004b703 ld a4,0(s1) + 80036c84: 00194917 auipc s2,0x194 + 80036c88: 8c494903 lbu s2,-1852(s2) # 801ca548 + 80036c8c: 0207e793 ori a5,a5,32 + 80036c90: 00190a9b addiw s5,s2,1 + 80036c94: 00f40123 sb a5,2(s0) + 80036c98: 000a8913 mv s2,s5 + 80036c9c: 00071463 bnez a4,80036ca4 <_Z12FCEUPPU_Loopi+0x344> + 80036ca0: 1d80106f j 80037e78 <_Z12FCEUPPU_Loopi+0x1518> + 80036ca4: 10000513 li a0,256 + 80036ca8: 9b8ca0ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80036cac: 00196917 auipc s2,0x196 + 80036cb0: af490913 addi s2,s2,-1292 # 801cc7a0 + 80036cb4: 00196797 auipc a5,0x196 + 80036cb8: ae07a623 sw zero,-1300(a5) # 801cc7a0 + 80036cbc: 0ef00993 li s3,239 + 80036cc0: 0280006f j 80036ce8 <_Z12FCEUPPU_Loopi+0x388> + 80036cc4: 05500513 li a0,85 + 80036cc8: 01378463 beq a5,s3,80036cd0 <_Z12FCEUPPU_Loopi+0x370> + 80036ccc: 15500513 li a0,341 + 80036cd0: 990ca0ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80036cd4: 00092783 lw a5,0(s2) + 80036cd8: 0017871b addiw a4,a5,1 + 80036cdc: 00e92023 sw a4,0(s2) + 80036ce0: 00e9d463 bge s3,a4,80036ce8 <_Z12FCEUPPU_Loopi+0x388> + 80036ce4: 1f40106f j 80037ed8 <_Z12FCEUPPU_Loopi+0x1578> + 80036ce8: 00144783 lbu a5,1(s0) + 80036cec: 0187f793 andi a5,a5,24 + 80036cf0: 00078663 beqz a5,80036cfc <_Z12FCEUPPU_Loopi+0x39c> + 80036cf4: 0004b783 ld a5,0(s1) + 80036cf8: 000780e7 jalr a5 + 80036cfc: 00092783 lw a5,0(s2) + 80036d00: fd5792e3 bne a5,s5,80036cc4 <_Z12FCEUPPU_Loopi+0x364> + 80036d04: 00144703 lbu a4,1(s0) + 80036d08: 01077713 andi a4,a4,16 + 80036d0c: fa070ce3 beqz a4,80036cc4 <_Z12FCEUPPU_Loopi+0x364> + 80036d10: 00244703 lbu a4,2(s0) + 80036d14: 04076713 ori a4,a4,64 + 80036d18: 00e40123 sb a4,2(s0) + 80036d1c: fa9ff06f j 80036cc4 <_Z12FCEUPPU_Loopi+0x364> + 80036d20: 0d013403 ld s0,208(sp) + 80036d24: 0d813083 ld ra,216(sp) + 80036d28: 0c813483 ld s1,200(sp) + 80036d2c: 0c013903 ld s2,192(sp) + 80036d30: 0b813983 ld s3,184(sp) + 80036d34: 0b013a03 ld s4,176(sp) + 80036d38: 0a813a83 ld s5,168(sp) + 80036d3c: 0a013b03 ld s6,160(sp) + 80036d40: 09813b83 ld s7,152(sp) + 80036d44: 09013c03 ld s8,144(sp) + 80036d48: 08813c83 ld s9,136(sp) + 80036d4c: 08013d03 ld s10,128(sp) + 80036d50: 07813d83 ld s11,120(sp) + 80036d54: 0e010113 addi sp,sp,224 + 80036d58: 4690106f j 800389c0 <_Z14FCEUX_PPU_Loopi> + 80036d5c: 00144783 lbu a5,1(s0) + 80036d60: 00195717 auipc a4,0x195 + 80036d64: df970713 addi a4,a4,-519 # 801cbb59 + 80036d68: 00074683 lbu a3,0(a4) + 80036d6c: 0057d793 srli a5,a5,0x5 + 80036d70: 00196717 auipc a4,0x196 + 80036d74: 9d070713 addi a4,a4,-1584 # 801cc740 <_ZL5deemp> + 80036d78: 00f70023 sb a5,0(a4) + 80036d7c: 00196717 auipc a4,0x196 + 80036d80: 90c70713 addi a4,a4,-1780 # 801cc688 + 80036d84: 00072703 lw a4,0(a4) + 80036d88: 36068c63 beqz a3,80037100 <_Z12FCEUPPU_Loopi+0x7a0> + 80036d8c: 00016697 auipc a3,0x16 + 80036d90: 3e86c683 lbu a3,1000(a3) # 8004d174 + 80036d94: 36068663 beqz a3,80037100 <_Z12FCEUPPU_Loopi+0x7a0> + 80036d98: 00196697 auipc a3,0x196 + 80036d9c: 90868693 addi a3,a3,-1784 # 801cc6a0 + 80036da0: 04d13823 sd a3,80(sp) + 80036da4: 00e6a023 sw a4,0(a3) + 80036da8: 00196697 auipc a3,0x196 + 80036dac: 9e06ac23 sw zero,-1544(a3) # 801cc7a0 + 80036db0: 00196a17 auipc s4,0x196 + 80036db4: 924a0a13 addi s4,s4,-1756 # 801cc6d4 + 80036db8: 2ee05663 blez a4,800370a4 <_Z12FCEUPPU_Loopi+0x744> + 80036dbc: 00001c37 lui s8,0x1 + 80036dc0: fe0c0713 addi a4,s8,-32 # fe0 <_entry_offset+0xfe0> + 80036dc4: 02e13c23 sd a4,56(sp) + 80036dc8: 00279793 slli a5,a5,0x2 + 80036dcc: 00194717 auipc a4,0x194 + 80036dd0: 68470713 addi a4,a4,1668 # 801cb450 <_ZL8deempcnt> + 80036dd4: 00f707b3 add a5,a4,a5 + 80036dd8: 0007a703 lw a4,0(a5) + 80036ddc: 3f3f4bb7 lui s7,0x3f3f4 + 80036de0: 80808b37 lui s6,0x80808 + 80036de4: 0017071b addiw a4,a4,1 + 80036de8: 00000513 li a0,0 + 80036dec: 0ef00693 li a3,239 + 80036df0: 00e7a023 sw a4,0(a5) + 80036df4: 00196917 auipc s2,0x196 + 80036df8: 9ac90913 addi s2,s2,-1620 # 801cc7a0 + 80036dfc: 00196a17 auipc s4,0x196 + 80036e00: 8d8a0a13 addi s4,s4,-1832 # 801cc6d4 + 80036e04: f3fb8b93 addi s7,s7,-193 # 3f3f3f3f <_entry_offset+0x3f3f3f3f> + 80036e08: 080b0b13 addi s6,s6,128 # ffffffff80808080 <_end+0xffffffff00633080> + 80036e0c: 08a6de63 bge a3,a0,80036ea8 <_Z12FCEUPPU_Loopi+0x548> + 80036e10: 14500513 li a0,325 + 80036e14: 84cca0ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80036e18: 00092783 lw a5,0(s2) + 80036e1c: 01000513 li a0,16 + 80036e20: 0017879b addiw a5,a5,1 + 80036e24: 00f92023 sw a5,0(s2) + 80036e28: 838ca0ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80036e2c: 00196797 auipc a5,0x196 + 80036e30: 85c78793 addi a5,a5,-1956 # 801cc688 + 80036e34: 0007a703 lw a4,0(a5) + 80036e38: 00092503 lw a0,0(s2) + 80036e3c: 05013783 ld a5,80(sp) + 80036e40: 0007a783 lw a5,0(a5) + 80036e44: 24e54a63 blt a0,a4,80037098 <_Z12FCEUPPU_Loopi+0x738> + 80036e48: 24f50863 beq a0,a5,80037098 <_Z12FCEUPPU_Loopi+0x738> + 80036e4c: 00195717 auipc a4,0x195 + 80036e50: d0d70713 addi a4,a4,-755 # 801cbb59 + 80036e54: 00074703 lbu a4,0(a4) + 80036e58: 00070863 beqz a4,80036e68 <_Z12FCEUPPU_Loopi+0x508> + 80036e5c: 00016717 auipc a4,0x16 + 80036e60: 31874703 lbu a4,792(a4) # 8004d174 + 80036e64: 24071063 bnez a4,800370a4 <_Z12FCEUPPU_Loopi+0x744> + 80036e68: 00100713 li a4,1 + 80036e6c: 00196697 auipc a3,0x196 + 80036e70: 82e680a3 sb a4,-2015(a3) # 801cc68d + 80036e74: 22f55863 bge a0,a5,800370a4 <_Z12FCEUPPU_Loopi+0x744> + 80036e78: 00196797 auipc a5,0x196 + 80036e7c: 8c878793 addi a5,a5,-1848 # 801cc740 <_ZL5deemp> + 80036e80: 0007c783 lbu a5,0(a5) + 80036e84: 00194717 auipc a4,0x194 + 80036e88: 5cc70713 addi a4,a4,1484 # 801cb450 <_ZL8deempcnt> + 80036e8c: 0ef00693 li a3,239 + 80036e90: 00279793 slli a5,a5,0x2 + 80036e94: 00f707b3 add a5,a4,a5 + 80036e98: 0007a703 lw a4,0(a5) + 80036e9c: 0017071b addiw a4,a4,1 + 80036ea0: 00e7a023 sw a4,0(a5) + 80036ea4: f6a6c6e3 blt a3,a0,80036e10 <_Z12FCEUPPU_Loopi+0x4b0> + 80036ea8: 000d3483 ld s1,0(s10) + 80036eac: 000a2703 lw a4,0(s4) + 80036eb0: 0085179b slliw a5,a0,0x8 + 80036eb4: 00f484b3 add s1,s1,a5 + 80036eb8: 1e071ee3 bnez a4,800378b4 <_Z12FCEUPPU_Loopi+0xf54> + 80036ebc: 10000513 li a0,256 + 80036ec0: fa1c90ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80036ec4: 11000513 li a0,272 + 80036ec8: c81fd0ef jal ra,80034b48 <_ZL11RefreshLinei> + 80036ecc: 00196797 auipc a5,0x196 + 80036ed0: 87c78793 addi a5,a5,-1924 # 801cc748 <_ZL5tofix> + 80036ed4: 0007a783 lw a5,0(a5) + 80036ed8: 00078a63 beqz a5,80036eec <_Z12FCEUPPU_Loopi+0x58c> + 80036edc: 00144783 lbu a5,1(s0) + 80036ee0: 0187f793 andi a5,a5,24 + 80036ee4: 00078463 beqz a5,80036eec <_Z12FCEUPPU_Loopi+0x58c> + 80036ee8: bedfd0ef jal ra,80034ad4 <_ZL6Fixit1v.part.0> + 80036eec: 11000513 li a0,272 + 80036ef0: b31fd0ef jal ra,80034a20 <_ZL14CheckSpriteHiti> + 80036ef4: 00196797 auipc a5,0x196 + 80036ef8: 8407b223 sd zero,-1980(a5) # 801cc738 <_ZL5Pline> + 80036efc: 00016797 auipc a5,0x16 + 80036f00: 2887c783 lbu a5,648(a5) # 8004d184 <_ZL8renderbg> + 80036f04: 02079263 bnez a5,80036f28 <_Z12FCEUPPU_Loopi+0x5c8> + 80036f08: 00016597 auipc a1,0x16 + 80036f0c: 27d5c583 lbu a1,637(a1) # 8004d185 + 80036f10: 0ff00793 li a5,255 + 80036f14: 40f588e3 beq a1,a5,80037b24 <_Z12FCEUPPU_Loopi+0x11c4> + 80036f18: 10000613 li a2,256 + 80036f1c: 0405e593 ori a1,a1,64 + 80036f20: 00048513 mv a0,s1 + 80036f24: 305040ef jal ra,8003ba28 + 80036f28: 00144703 lbu a4,1(s0) + 80036f2c: 01077793 andi a5,a4,16 + 80036f30: 10079ae3 bnez a5,80037844 <_Z12FCEUPPU_Loopi+0xee4> + 80036f34: 01877693 andi a3,a4,24 + 80036f38: 0fc48793 addi a5,s1,252 + 80036f3c: 02068a63 beqz a3,80036f70 <_Z12FCEUPPU_Loopi+0x610> + 80036f40: 00177693 andi a3,a4,1 + 80036f44: 02068663 beqz a3,80036f70 <_Z12FCEUPPU_Loopi+0x610> + 80036f48: 303035b7 lui a1,0x30303 + 80036f4c: 00078713 mv a4,a5 + 80036f50: 03058593 addi a1,a1,48 # 30303030 <_entry_offset+0x30303030> + 80036f54: 00072683 lw a3,0(a4) + 80036f58: 00070613 mv a2,a4 + 80036f5c: ffc70713 addi a4,a4,-4 + 80036f60: 00b6f6b3 and a3,a3,a1 + 80036f64: 00d72223 sw a3,4(a4) + 80036f68: fec496e3 bne s1,a2,80036f54 <_Z12FCEUPPU_Loopi+0x5f4> + 80036f6c: 00144703 lbu a4,1(s0) + 80036f70: 00575693 srli a3,a4,0x5 + 80036f74: 00700613 li a2,7 + 80036f78: 40c68063 beq a3,a2,80037378 <_Z12FCEUPPU_Loopi+0xa18> + 80036f7c: 0e077713 andi a4,a4,224 + 80036f80: 18070c63 beqz a4,80037118 <_Z12FCEUPPU_Loopi+0x7b8> + 80036f84: 40404637 lui a2,0x40404 + 80036f88: 04060613 addi a2,a2,64 # 40404040 <_entry_offset+0x40404040> + 80036f8c: 0007a703 lw a4,0(a5) + 80036f90: 00078693 mv a3,a5 + 80036f94: ffc78793 addi a5,a5,-4 + 80036f98: 00c76733 or a4,a4,a2 + 80036f9c: 00e7a223 sw a4,4(a5) + 80036fa0: fed496e3 bne s1,a3,80036f8c <_Z12FCEUPPU_Loopi+0x62c> + 80036fa4: 00144783 lbu a5,1(s0) + 80036fa8: 10000713 li a4,256 + 80036fac: 00195697 auipc a3,0x195 + 80036fb0: 7ac68693 addi a3,a3,1964 # 801cc758 <_ZL6sphitx> + 80036fb4: 00e6a023 sw a4,0(a3) + 80036fb8: 0187f793 andi a5,a5,24 + 80036fbc: 00195497 auipc s1,0x195 + 80036fc0: 70448493 addi s1,s1,1796 # 801cc6c0 + 80036fc4: 18079863 bnez a5,80037154 <_Z12FCEUPPU_Loopi+0x7f4> + 80036fc8: 00600513 li a0,6 + 80036fcc: e95c90ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80036fd0: 00144783 lbu a5,1(s0) + 80036fd4: 0187f793 andi a5,a5,24 + 80036fd8: 02078863 beqz a5,80037008 <_Z12FCEUPPU_Loopi+0x6a8> + 80036fdc: 00195617 auipc a2,0x195 + 80036fe0: 73860613 addi a2,a2,1848 # 801cc714 + 80036fe4: 00062703 lw a4,0(a2) + 80036fe8: 000106b7 lui a3,0x10 + 80036fec: 00195797 auipc a5,0x195 + 80036ff0: 7307a783 lw a5,1840(a5) # 801cc71c + 80036ff4: be068693 addi a3,a3,-1056 # fbe0 <_entry_offset+0xfbe0> + 80036ff8: 00d77733 and a4,a4,a3 + 80036ffc: 41f7f793 andi a5,a5,1055 + 80037000: 00e7e7b3 or a5,a5,a4 + 80037004: 00f62023 sw a5,0(a2) + 80037008: 03f00513 li a0,63 + 8003700c: e55c90ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80037010: 0004b703 ld a4,0(s1) + 80037014: 00144783 lbu a5,1(s0) + 80037018: 02070263 beqz a4,8003703c <_Z12FCEUPPU_Loopi+0x6dc> + 8003701c: 0187f693 andi a3,a5,24 + 80037020: 00068e63 beqz a3,8003703c <_Z12FCEUPPU_Loopi+0x6dc> + 80037024: 00044683 lbu a3,0(s0) + 80037028: 01800613 li a2,24 + 8003702c: 0386f693 andi a3,a3,56 + 80037030: 00c68663 beq a3,a2,8003703c <_Z12FCEUPPU_Loopi+0x6dc> + 80037034: 000700e7 jalr a4 + 80037038: 00144783 lbu a5,1(s0) + 8003703c: 0107f793 andi a5,a5,16 + 80037040: 34079e63 bnez a5,8003739c <_Z12FCEUPPU_Loopi+0xa3c> + 80037044: 00195717 auipc a4,0x195 + 80037048: 68473703 ld a4,1668(a4) # 801cc6c8 + 8003704c: 00070a63 beqz a4,80037060 <_Z12FCEUPPU_Loopi+0x700> + 80037050: 00144783 lbu a5,1(s0) + 80037054: 0187f793 andi a5,a5,24 + 80037058: 00078463 beqz a5,80037060 <_Z12FCEUPPU_Loopi+0x700> + 8003705c: 000700e7 jalr a4 + 80037060: 00092783 lw a5,0(s2) + 80037064: 0ef00713 li a4,239 + 80037068: 0017869b addiw a3,a5,1 + 8003706c: 00d92023 sw a3,0(s2) + 80037070: 04d756e3 bge a4,a3,800378bc <_Z12FCEUPPU_Loopi+0xf5c> + 80037074: 01000513 li a0,16 + 80037078: de9c90ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 8003707c: 00195797 auipc a5,0x195 + 80037080: 60c78793 addi a5,a5,1548 # 801cc688 + 80037084: 0007a703 lw a4,0(a5) + 80037088: 00092503 lw a0,0(s2) + 8003708c: 05013783 ld a5,80(sp) + 80037090: 0007a783 lw a5,0(a5) + 80037094: dae55ae3 bge a0,a4,80036e48 <_Z12FCEUPPU_Loopi+0x4e8> + 80037098: 00195717 auipc a4,0x195 + 8003709c: 5e070aa3 sb zero,1525(a4) # 801cc68d + 800370a0: dcf54ce3 blt a0,a5,80036e78 <_Z12FCEUPPU_Loopi+0x518> + 800370a4: 000a2783 lw a5,0(s4) + 800370a8: 00195717 auipc a4,0x195 + 800370ac: aa0708a3 sb zero,-1359(a4) # 801cbb59 + 800370b0: 680796e3 bnez a5,80037f3c <_Z12FCEUPPU_Loopi+0x15dc> + 800370b4: 00194797 auipc a5,0x194 + 800370b8: 39c78793 addi a5,a5,924 # 801cb450 <_ZL8deempcnt> + 800370bc: 00000613 li a2,0 + 800370c0: 00100713 li a4,1 + 800370c4: 00700593 li a1,7 + 800370c8: 0047a683 lw a3,4(a5) + 800370cc: 00d65663 bge a2,a3,800370d8 <_Z12FCEUPPU_Loopi+0x778> + 800370d0: 00068613 mv a2,a3 + 800370d4: 04e13c23 sd a4,88(sp) + 800370d8: 0007a223 sw zero,4(a5) + 800370dc: 0017071b addiw a4,a4,1 + 800370e0: 00478793 addi a5,a5,4 + 800370e4: feb712e3 bne a4,a1,800370c8 <_Z12FCEUPPU_Loopi+0x768> + 800370e8: 05814503 lbu a0,88(sp) + 800370ec: 00000593 li a1,0 + 800370f0: 00100a13 li s4,1 + 800370f4: dd0c90ef jal ra,800006c4 <_Z21SetNESDeemph_OldHackyhi> + 800370f8: b2dc90ef jal ra,80000c24 <_Z7ShowFPSv> + 800370fc: 921ff06f j 80036a1c <_Z12FCEUPPU_Loopi+0xbc> + 80037100: 0009c683 lbu a3,0(s3) + 80037104: c8068ae3 beqz a3,80036d98 <_Z12FCEUPPU_Loopi+0x438> + 80037108: 00195697 auipc a3,0x195 + 8003710c: 5886a683 lw a3,1416(a3) # 801cc690 + 80037110: 00e6873b addw a4,a3,a4 + 80037114: c85ff06f j 80036d98 <_Z12FCEUPPU_Loopi+0x438> + 80037118: 0007a703 lw a4,0(a5) + 8003711c: 00078693 mv a3,a5 + 80037120: ffc78793 addi a5,a5,-4 + 80037124: 01777733 and a4,a4,s7 + 80037128: 01676733 or a4,a4,s6 + 8003712c: 00e7a223 sw a4,4(a5) + 80037130: e6d48ae3 beq s1,a3,80036fa4 <_Z12FCEUPPU_Loopi+0x644> + 80037134: 0007a703 lw a4,0(a5) + 80037138: 00078693 mv a3,a5 + 8003713c: ffc78793 addi a5,a5,-4 + 80037140: 01777733 and a4,a4,s7 + 80037144: 01676733 or a4,a4,s6 + 80037148: 00e7a223 sw a4,4(a5) + 8003714c: fcd496e3 bne s1,a3,80037118 <_Z12FCEUPPU_Loopi+0x7b8> + 80037150: e55ff06f j 80036fa4 <_Z12FCEUPPU_Loopi+0x644> + 80037154: 00044e83 lbu t4,0(s0) + 80037158: 00195497 auipc s1,0x195 + 8003715c: 5b048493 addi s1,s1,1456 # 801cc708 + 80037160: 0004b683 ld a3,0(s1) + 80037164: 000e879b sext.w a5,t4 + 80037168: 4017da9b sraiw s5,a5,0x1 + 8003716c: fffec993 not s3,t4 + 80037170: 0ff9f993 andi s3,s3,255 + 80037174: 010afa93 andi s5,s5,16 + 80037178: 4029d71b sraiw a4,s3,0x2 + 8003717c: 4027d59b sraiw a1,a5,0x2 + 80037180: 008ef993 andi s3,t4,8 + 80037184: 007a879b addiw a5,s5,7 + 80037188: 00e9f9b3 and s3,s3,a4 + 8003718c: 0085f593 andi a1,a1,8 + 80037190: 04f13023 sd a5,64(sp) + 80037194: 04013423 sd zero,72(sp) + 80037198: 00092603 lw a2,0(s2) + 8003719c: 0099999b slliw s3,s3,0x9 + 800371a0: 0085859b addiw a1,a1,8 + 800371a4: 00000c13 li s8,0 + 800371a8: 340684e3 beqz a3,80037cf0 <_Z12FCEUPPU_Loopi+0x1390> + 800371ac: 00193697 auipc a3,0x193 + 800371b0: 39c68693 addi a3,a3,924 # 801ca548 + 800371b4: 03f00813 li a6,63 + 800371b8: 00016317 auipc t1,0x16 + 800371bc: fc030313 addi t1,t1,-64 # 8004d178 <_ZL10maxsprites> + 800371c0: 03f00c93 li s9,63 + 800371c4: 00193a97 auipc s5,0x193 + 800371c8: 484a8a93 addi s5,s5,1156 # 801ca648 + 800371cc: 00193d97 auipc s11,0x193 + 800371d0: 47cd8d93 addi s11,s11,1148 # 801ca648 + 800371d4: 1100006f j 800372e4 <_Z12FCEUPPU_Loopi+0x984> + 800371d8: 00001537 lui a0,0x1 + 800371dc: 03813783 ld a5,56(sp) + 800371e0: 00c7171b slliw a4,a4,0xc + 800371e4: 00a77733 and a4,a4,a0 + 800371e8: 0026c503 lbu a0,2(a3) + 800371ec: 00f2f2b3 and t0,t0,a5 + 800371f0: 00576733 or a4,a4,t0 + 800371f4: 0185129b slliw t0,a0,0x18 + 800371f8: 00867f93 andi t6,a2,8 + 800371fc: 4182d29b sraiw t0,t0,0x18 + 80037200: 0007071b sext.w a4,a4 + 80037204: 000f8f9b sext.w t6,t6 + 80037208: 1202c663 bltz t0,80037334 <_Z12FCEUPPU_Loopi+0x9d4> + 8003720c: 01f6063b addw a2,a2,t6 + 80037210: 00e6063b addw a2,a2,a4 + 80037214: 000a2283 lw t0,0(s4) + 80037218: 00a6571b srliw a4,a2,0xa + 8003721c: 02061f93 slli t6,a2,0x20 + 80037220: 02071713 slli a4,a4,0x20 + 80037224: 020fdf93 srli t6,t6,0x20 + 80037228: 01d75713 srli a4,a4,0x1d + 8003722c: 12028a63 beqz t0,80037360 <_Z12FCEUPPU_Loopi+0xa00> + 80037230: 0008b797 auipc a5,0x8b + 80037234: 5b078793 addi a5,a5,1456 # 800c27e0 + 80037238: 00e78733 add a4,a5,a4 + 8003723c: 00073703 ld a4,0(a4) + 80037240: 01f70fb3 add t6,a4,t6 + 80037244: 000fc283 lbu t0,0(t6) + 80037248: 00c13423 sd a2,8(sp) + 8003724c: 00700713 li a4,7 + 80037250: 06510423 sb t0,104(sp) + 80037254: 05876a63 bltu a4,s8,800372a8 <_Z12FCEUPPU_Loopi+0x948> + 80037258: 0004b703 ld a4,0(s1) + 8003725c: 00002537 lui a0,0x2 + 80037260: 02b13823 sd a1,48(sp) + 80037264: 02d13423 sd a3,40(sp) + 80037268: 03013023 sd a6,32(sp) + 8003726c: 01f13c23 sd t6,24(sp) + 80037270: 01e13823 sd t5,16(sp) + 80037274: 000700e7 jalr a4 + 80037278: 00813603 ld a2,8(sp) + 8003727c: 0004b703 ld a4,0(s1) + 80037280: 00060513 mv a0,a2 + 80037284: 000700e7 jalr a4 + 80037288: 02813683 ld a3,40(sp) + 8003728c: 03013583 ld a1,48(sp) + 80037290: 02013803 ld a6,32(sp) + 80037294: 0026c503 lbu a0,2(a3) + 80037298: 01813f83 ld t6,24(sp) + 8003729c: 01013f03 ld t5,16(sp) + 800372a0: 00016317 auipc t1,0x16 + 800372a4: ed830313 addi t1,t1,-296 # 8004d178 <_ZL10maxsprites> + 800372a8: 008fc603 lbu a2,8(t6) + 800372ac: 0036c703 lbu a4,3(a3) + 800372b0: 06a10523 sb a0,106(sp) + 800372b4: 06c104a3 sb a2,105(sp) + 800372b8: 06e105a3 sb a4,107(sp) + 800372bc: 06812703 lw a4,104(sp) + 800372c0: 002f1f13 slli t5,t5,0x2 + 800372c4: 01ea8f33 add t5,s5,t5 + 800372c8: 001c079b addiw a5,s8,1 + 800372cc: 00ef2023 sw a4,0(t5) + 800372d0: 0ff7fc13 andi s8,a5,255 + 800372d4: 00468693 addi a3,a3,4 + 800372d8: fff8081b addiw a6,a6,-1 + 800372dc: 77b68263 beq a3,s11,80037a40 <_Z12FCEUPPU_Loopi+0x10e0> + 800372e0: 00092603 lw a2,0(s2) + 800372e4: 0006c703 lbu a4,0(a3) + 800372e8: 40e6063b subw a2,a2,a4 + 800372ec: 0006071b sext.w a4,a2 + 800372f0: feb772e3 bgeu a4,a1,800372d4 <_Z12FCEUPPU_Loopi+0x974> + 800372f4: 00032703 lw a4,0(t1) + 800372f8: 000c0f1b sext.w t5,s8 + 800372fc: 72ec5c63 bge s8,a4,80037a34 <_Z12FCEUPPU_Loopi+0x10d4> + 80037300: 53980c63 beq a6,s9,80037838 <_Z12FCEUPPU_Loopi+0xed8> + 80037304: 00044503 lbu a0,0(s0) + 80037308: 0016c703 lbu a4,1(a3) + 8003730c: 02057513 andi a0,a0,32 + 80037310: 0047129b slliw t0,a4,0x4 + 80037314: ec0512e3 bnez a0,800371d8 <_Z12FCEUPPU_Loopi+0x878> + 80037318: 0026c503 lbu a0,2(a3) + 8003731c: 0132873b addw a4,t0,s3 + 80037320: 00867f93 andi t6,a2,8 + 80037324: 0185129b slliw t0,a0,0x18 + 80037328: 4182d29b sraiw t0,t0,0x18 + 8003732c: 000f8f9b sext.w t6,t6 + 80037330: ec02dee3 bgez t0,8003720c <_Z12FCEUPPU_Loopi+0x8ac> + 80037334: 04013783 ld a5,64(sp) + 80037338: 000a2283 lw t0,0(s4) + 8003733c: 40c7863b subw a2,a5,a2 + 80037340: 41f6063b subw a2,a2,t6 + 80037344: 00e6063b addw a2,a2,a4 + 80037348: 00a6571b srliw a4,a2,0xa + 8003734c: 02061f93 slli t6,a2,0x20 + 80037350: 02071713 slli a4,a4,0x20 + 80037354: 020fdf93 srli t6,t6,0x20 + 80037358: 01d75713 srli a4,a4,0x1d + 8003735c: ec029ae3 bnez t0,80037230 <_Z12FCEUPPU_Loopi+0x8d0> + 80037360: 0008c797 auipc a5,0x8c + 80037364: 9e078793 addi a5,a5,-1568 # 800c2d40 + 80037368: 00e78733 add a4,a5,a4 + 8003736c: 00073703 ld a4,0(a4) + 80037370: 01f70fb3 add t6,a4,t6 + 80037374: ed1ff06f j 80037244 <_Z12FCEUPPU_Loopi+0x8e4> + 80037378: c0c0c637 lui a2,0xc0c0c + 8003737c: 0c060613 addi a2,a2,192 # ffffffffc0c0c0c0 <_end+0xffffffff40a370c0> + 80037380: 0007a703 lw a4,0(a5) + 80037384: 00078693 mv a3,a5 + 80037388: ffc78793 addi a5,a5,-4 + 8003738c: 00c76733 or a4,a4,a2 + 80037390: 00e7a223 sw a4,4(a5) + 80037394: fed496e3 bne s1,a3,80037380 <_Z12FCEUPPU_Loopi+0xa20> + 80037398: c0dff06f j 80036fa4 <_Z12FCEUPPU_Loopi+0x644> + 8003739c: 00195997 auipc s3,0x195 + 800373a0: 38998993 addi s3,s3,905 # 801cc725 <_ZL10numsprites> + 800373a4: 0009c783 lbu a5,0(s3) + 800373a8: 00195717 auipc a4,0x195 + 800373ac: 38072e23 sw zero,924(a4) # 801cc744 <_ZL5spork> + 800373b0: c8078ae3 beqz a5,80037044 <_Z12FCEUPPU_Loopi+0x6e4> + 800373b4: 10000613 li a2,256 + 800373b8: 08000593 li a1,128 + 800373bc: 00193517 auipc a0,0x193 + 800373c0: 38c50513 addi a0,a0,908 # 801ca748 <_ZL10sprlinebuf> + 800373c4: 664040ef jal ra,8003ba28 + 800373c8: 0009c603 lbu a2,0(s3) + 800373cc: 00144783 lbu a5,1(s0) + 800373d0: 00244a83 lbu s5,2(s0) + 800373d4: fff6061b addiw a2,a2,-1 + 800373d8: 0ff67613 andi a2,a2,255 + 800373dc: 00195697 auipc a3,0x195 + 800373e0: 37c68693 addi a3,a3,892 # 801cc758 <_ZL6sphitx> + 800373e4: 00261713 slli a4,a2,0x2 + 800373e8: 0006ad83 lw s11,0(a3) + 800373ec: 00195497 auipc s1,0x195 + 800373f0: 37448493 addi s1,s1,884 # 801cc760 <_ZL9sphitdata> + 800373f4: 00c98023 sb a2,0(s3) + 800373f8: 00193697 auipc a3,0x193 + 800373fc: 25068693 addi a3,a3,592 # 801ca648 + 80037400: 0017f793 andi a5,a5,1 + 80037404: 0004cc03 lbu s8,0(s1) + 80037408: 00e686b3 add a3,a3,a4 + 8003740c: 0006061b sext.w a2,a2 + 80037410: 00195097 auipc ra,0x195 + 80037414: 3160c083 lbu ra,790(ra) # 801cc726 <_ZL11SpriteBlurp> + 80037418: 040afa93 andi s5,s5,64 + 8003741c: fff00893 li a7,-1 + 80037420: 00078463 beqz a5,80037428 <_Z12FCEUPPU_Loopi+0xac8> + 80037424: 03000893 li a7,48 + 80037428: 0188989b slliw a7,a7,0x18 + 8003742c: 4188d89b sraiw a7,a7,0x18 + 80037430: 00000993 li s3,0 + 80037434: 00193397 auipc t2,0x193 + 80037438: 41c38393 addi t2,t2,1052 # 801ca850 <_ZL7ppulut1> + 8003743c: 00194297 auipc t0,0x194 + 80037440: 81428293 addi t0,t0,-2028 # 801cac50 <_ZL7ppulut2> + 80037444: 00193f97 auipc t6,0x193 + 80037448: 304f8f93 addi t6,t6,772 # 801ca748 <_ZL10sprlinebuf> + 8003744c: 00193317 auipc t1,0x193 + 80037450: 8dc30313 addi t1,t1,-1828 # 801c9d28 + 80037454: fff00e13 li t3,-1 + 80037458: 0006c583 lbu a1,0(a3) + 8003745c: 0016c703 lbu a4,1(a3) + 80037460: 00e5e7b3 or a5,a1,a4 + 80037464: 1c078663 beqz a5,80037630 <_Z12FCEUPPU_Loopi+0xcd0> + 80037468: 00259593 slli a1,a1,0x2 + 8003746c: 00271713 slli a4,a4,0x2 + 80037470: 0026c503 lbu a0,2(a3) + 80037474: 00b385b3 add a1,t2,a1 + 80037478: 00e28733 add a4,t0,a4 + 8003747c: 0005a803 lw a6,0(a1) + 80037480: 00072703 lw a4,0(a4) + 80037484: 0036ce83 lbu t4,3(a3) + 80037488: 0025159b slliw a1,a0,0x2 + 8003748c: 00e86733 or a4,a6,a4 + 80037490: 00c5f593 andi a1,a1,12 + 80037494: 04057f13 andi t5,a0,64 + 80037498: 0007071b sext.w a4,a4 + 8003749c: 01df8833 add a6,t6,t4 + 800374a0: 0105859b addiw a1,a1,16 + 800374a4: 02057513 andi a0,a0,32 + 800374a8: 1c060063 beqz a2,80037668 <_Z12FCEUPPU_Loopi+0xd08> + 800374ac: 42050263 beqz a0,800378d0 <_Z12FCEUPPU_Loopi+0xf70> + 800374b0: 6c0f0063 beqz t5,80037b70 <_Z12FCEUPPU_Loopi+0x1210> + 800374b4: 0187951b slliw a0,a5,0x18 + 800374b8: 4185551b sraiw a0,a0,0x18 + 800374bc: 02055463 bgez a0,800374e4 <_Z12FCEUPPU_Loopi+0xb84> + 800374c0: 00377513 andi a0,a4,3 + 800374c4: 00b56533 or a0,a0,a1 + 800374c8: 02051513 slli a0,a0,0x20 + 800374cc: 02055513 srli a0,a0,0x20 + 800374d0: 00a30533 add a0,t1,a0 + 800374d4: 00054503 lbu a0,0(a0) + 800374d8: 00a8f533 and a0,a7,a0 + 800374dc: 04056513 ori a0,a0,64 + 800374e0: 00a803a3 sb a0,7(a6) + 800374e4: 0407f513 andi a0,a5,64 + 800374e8: 02050663 beqz a0,80037514 <_Z12FCEUPPU_Loopi+0xbb4> + 800374ec: 0047551b srliw a0,a4,0x4 + 800374f0: 00357513 andi a0,a0,3 + 800374f4: 00b56533 or a0,a0,a1 + 800374f8: 02051513 slli a0,a0,0x20 + 800374fc: 02055513 srli a0,a0,0x20 + 80037500: 00a30533 add a0,t1,a0 + 80037504: 00054503 lbu a0,0(a0) + 80037508: 00a8f533 and a0,a7,a0 + 8003750c: 04056513 ori a0,a0,64 + 80037510: 00a80323 sb a0,6(a6) + 80037514: 0207f513 andi a0,a5,32 + 80037518: 02050663 beqz a0,80037544 <_Z12FCEUPPU_Loopi+0xbe4> + 8003751c: 0087551b srliw a0,a4,0x8 + 80037520: 00357513 andi a0,a0,3 + 80037524: 00b56533 or a0,a0,a1 + 80037528: 02051513 slli a0,a0,0x20 + 8003752c: 02055513 srli a0,a0,0x20 + 80037530: 00a30533 add a0,t1,a0 + 80037534: 00054503 lbu a0,0(a0) + 80037538: 00a8f533 and a0,a7,a0 + 8003753c: 04056513 ori a0,a0,64 + 80037540: 00a802a3 sb a0,5(a6) + 80037544: 0107f513 andi a0,a5,16 + 80037548: 02050663 beqz a0,80037574 <_Z12FCEUPPU_Loopi+0xc14> + 8003754c: 00c7551b srliw a0,a4,0xc + 80037550: 00357513 andi a0,a0,3 + 80037554: 00b56533 or a0,a0,a1 + 80037558: 02051513 slli a0,a0,0x20 + 8003755c: 02055513 srli a0,a0,0x20 + 80037560: 00a30533 add a0,t1,a0 + 80037564: 00054503 lbu a0,0(a0) + 80037568: 00a8f533 and a0,a7,a0 + 8003756c: 04056513 ori a0,a0,64 + 80037570: 00a80223 sb a0,4(a6) + 80037574: 0087f513 andi a0,a5,8 + 80037578: 02050663 beqz a0,800375a4 <_Z12FCEUPPU_Loopi+0xc44> + 8003757c: 0107551b srliw a0,a4,0x10 + 80037580: 00357513 andi a0,a0,3 + 80037584: 00b56533 or a0,a0,a1 + 80037588: 02051513 slli a0,a0,0x20 + 8003758c: 02055513 srli a0,a0,0x20 + 80037590: 00a30533 add a0,t1,a0 + 80037594: 00054503 lbu a0,0(a0) + 80037598: 00a8f533 and a0,a7,a0 + 8003759c: 04056513 ori a0,a0,64 + 800375a0: 00a801a3 sb a0,3(a6) + 800375a4: 0047f513 andi a0,a5,4 + 800375a8: 02050663 beqz a0,800375d4 <_Z12FCEUPPU_Loopi+0xc74> + 800375ac: 0147551b srliw a0,a4,0x14 + 800375b0: 00357513 andi a0,a0,3 + 800375b4: 00b56533 or a0,a0,a1 + 800375b8: 02051513 slli a0,a0,0x20 + 800375bc: 02055513 srli a0,a0,0x20 + 800375c0: 00a30533 add a0,t1,a0 + 800375c4: 00054503 lbu a0,0(a0) + 800375c8: 00a8f533 and a0,a7,a0 + 800375cc: 04056513 ori a0,a0,64 + 800375d0: 00a80123 sb a0,2(a6) + 800375d4: 0027f513 andi a0,a5,2 + 800375d8: 02050663 beqz a0,80037604 <_Z12FCEUPPU_Loopi+0xca4> + 800375dc: 0187551b srliw a0,a4,0x18 + 800375e0: 00357513 andi a0,a0,3 + 800375e4: 00b56533 or a0,a0,a1 + 800375e8: 02051513 slli a0,a0,0x20 + 800375ec: 02055513 srli a0,a0,0x20 + 800375f0: 00a30533 add a0,t1,a0 + 800375f4: 00054503 lbu a0,0(a0) + 800375f8: 00a8f533 and a0,a7,a0 + 800375fc: 04056513 ori a0,a0,64 + 80037600: 00a800a3 sb a0,1(a6) + 80037604: 0017f793 andi a5,a5,1 + 80037608: 02078463 beqz a5,80037630 <_Z12FCEUPPU_Loopi+0xcd0> + 8003760c: 01c7571b srliw a4,a4,0x1c + 80037610: 00b76733 or a4,a4,a1 + 80037614: 02071793 slli a5,a4,0x20 + 80037618: 0207d793 srli a5,a5,0x20 + 8003761c: 00f307b3 add a5,t1,a5 + 80037620: 0007c783 lbu a5,0(a5) + 80037624: 00f8f7b3 and a5,a7,a5 + 80037628: 0407e793 ori a5,a5,64 + 8003762c: 00f80023 sb a5,0(a6) + 80037630: fff6061b addiw a2,a2,-1 + 80037634: ffc68693 addi a3,a3,-4 + 80037638: e3c610e3 bne a2,t3,80037458 <_Z12FCEUPPU_Loopi+0xaf8> + 8003763c: 00098a63 beqz s3,80037650 <_Z12FCEUPPU_Loopi+0xcf0> + 80037640: 00195797 auipc a5,0x195 + 80037644: 11878793 addi a5,a5,280 # 801cc758 <_ZL6sphitx> + 80037648: 01b7a023 sw s11,0(a5) + 8003764c: 01848023 sb s8,0(s1) + 80037650: 00195797 auipc a5,0x195 + 80037654: 0c078b23 sb zero,214(a5) # 801cc726 <_ZL11SpriteBlurp> + 80037658: 00100793 li a5,1 + 8003765c: 00195717 auipc a4,0x195 + 80037660: 0ef72423 sw a5,232(a4) # 801cc744 <_ZL5spork> + 80037664: 9e1ff06f j 80037044 <_Z12FCEUPPU_Loopi+0x6e4> + 80037668: e40082e3 beqz ra,800374ac <_Z12FCEUPPU_Loopi+0xb4c> + 8003766c: e40a90e3 bnez s5,800374ac <_Z12FCEUPPU_Loopi+0xb4c> + 80037670: 000e8d9b sext.w s11,t4 + 80037674: 4e0f0863 beqz t5,80037b64 <_Z12FCEUPPU_Loopi+0x1204> + 80037678: 0077de9b srliw t4,a5,0x7 + 8003767c: 00579993 slli s3,a5,0x5 + 80037680: 00779f13 slli t5,a5,0x7 + 80037684: 01df6f33 or t5,t5,t4 + 80037688: 0409fe93 andi t4,s3,64 + 8003768c: 00379993 slli s3,a5,0x3 + 80037690: 01df6f33 or t5,t5,t4 + 80037694: 0209fe93 andi t4,s3,32 + 80037698: 00179993 slli s3,a5,0x1 + 8003769c: 01df6f33 or t5,t5,t4 + 800376a0: 0109fe93 andi t4,s3,16 + 800376a4: 0017d993 srli s3,a5,0x1 + 800376a8: 01df6f33 or t5,t5,t4 + 800376ac: 0089fe93 andi t4,s3,8 + 800376b0: 0037d993 srli s3,a5,0x3 + 800376b4: 01df6f33 or t5,t5,t4 + 800376b8: 0049fe93 andi t4,s3,4 + 800376bc: 0057d993 srli s3,a5,0x5 + 800376c0: 01df6f33 or t5,t5,t4 + 800376c4: 0029fe93 andi t4,s3,2 + 800376c8: 01df6eb3 or t4,t5,t4 + 800376cc: 0ffefc13 andi s8,t4,255 + 800376d0: 040518e3 bnez a0,80037f20 <_Z12FCEUPPU_Loopi+0x15c0> + 800376d4: 0187951b slliw a0,a5,0x18 + 800376d8: 4185551b sraiw a0,a0,0x18 + 800376dc: 00100993 li s3,1 + 800376e0: 02055263 bgez a0,80037704 <_Z12FCEUPPU_Loopi+0xda4> + 800376e4: 00377513 andi a0,a4,3 + 800376e8: 00b56533 or a0,a0,a1 + 800376ec: 02051513 slli a0,a0,0x20 + 800376f0: 02055513 srli a0,a0,0x20 + 800376f4: 00a30533 add a0,t1,a0 + 800376f8: 00054503 lbu a0,0(a0) + 800376fc: 00a8f533 and a0,a7,a0 + 80037700: 00a803a3 sb a0,7(a6) + 80037704: 0407f513 andi a0,a5,64 + 80037708: 02050463 beqz a0,80037730 <_Z12FCEUPPU_Loopi+0xdd0> + 8003770c: 0047551b srliw a0,a4,0x4 + 80037710: 00357513 andi a0,a0,3 + 80037714: 00b56533 or a0,a0,a1 + 80037718: 02051513 slli a0,a0,0x20 + 8003771c: 02055513 srli a0,a0,0x20 + 80037720: 00a30533 add a0,t1,a0 + 80037724: 00054503 lbu a0,0(a0) + 80037728: 00a8f533 and a0,a7,a0 + 8003772c: 00a80323 sb a0,6(a6) + 80037730: 0207f513 andi a0,a5,32 + 80037734: 02050463 beqz a0,8003775c <_Z12FCEUPPU_Loopi+0xdfc> + 80037738: 0087551b srliw a0,a4,0x8 + 8003773c: 00357513 andi a0,a0,3 + 80037740: 00b56533 or a0,a0,a1 + 80037744: 02051513 slli a0,a0,0x20 + 80037748: 02055513 srli a0,a0,0x20 + 8003774c: 00a30533 add a0,t1,a0 + 80037750: 00054503 lbu a0,0(a0) + 80037754: 00a8f533 and a0,a7,a0 + 80037758: 00a802a3 sb a0,5(a6) + 8003775c: 0107f513 andi a0,a5,16 + 80037760: 02050463 beqz a0,80037788 <_Z12FCEUPPU_Loopi+0xe28> + 80037764: 00c7551b srliw a0,a4,0xc + 80037768: 00357513 andi a0,a0,3 + 8003776c: 00b56533 or a0,a0,a1 + 80037770: 02051513 slli a0,a0,0x20 + 80037774: 02055513 srli a0,a0,0x20 + 80037778: 00a30533 add a0,t1,a0 + 8003777c: 00054503 lbu a0,0(a0) + 80037780: 00a8f533 and a0,a7,a0 + 80037784: 00a80223 sb a0,4(a6) + 80037788: 0087f513 andi a0,a5,8 + 8003778c: 02050463 beqz a0,800377b4 <_Z12FCEUPPU_Loopi+0xe54> + 80037790: 0107551b srliw a0,a4,0x10 + 80037794: 00357513 andi a0,a0,3 + 80037798: 00b56533 or a0,a0,a1 + 8003779c: 02051513 slli a0,a0,0x20 + 800377a0: 02055513 srli a0,a0,0x20 + 800377a4: 00a30533 add a0,t1,a0 + 800377a8: 00054503 lbu a0,0(a0) + 800377ac: 00a8f533 and a0,a7,a0 + 800377b0: 00a801a3 sb a0,3(a6) + 800377b4: 0047f513 andi a0,a5,4 + 800377b8: 02050463 beqz a0,800377e0 <_Z12FCEUPPU_Loopi+0xe80> + 800377bc: 0147551b srliw a0,a4,0x14 + 800377c0: 00357513 andi a0,a0,3 + 800377c4: 00b56533 or a0,a0,a1 + 800377c8: 02051513 slli a0,a0,0x20 + 800377cc: 02055513 srli a0,a0,0x20 + 800377d0: 00a30533 add a0,t1,a0 + 800377d4: 00054503 lbu a0,0(a0) + 800377d8: 00a8f533 and a0,a7,a0 + 800377dc: 00a80123 sb a0,2(a6) + 800377e0: 0027f513 andi a0,a5,2 + 800377e4: 02050463 beqz a0,8003780c <_Z12FCEUPPU_Loopi+0xeac> + 800377e8: 0187551b srliw a0,a4,0x18 + 800377ec: 00357513 andi a0,a0,3 + 800377f0: 00b56533 or a0,a0,a1 + 800377f4: 02051513 slli a0,a0,0x20 + 800377f8: 02055513 srli a0,a0,0x20 + 800377fc: 00a30533 add a0,t1,a0 + 80037800: 00054503 lbu a0,0(a0) + 80037804: 00a8f533 and a0,a7,a0 + 80037808: 00a800a3 sb a0,1(a6) + 8003780c: 0017f793 andi a5,a5,1 + 80037810: e20780e3 beqz a5,80037630 <_Z12FCEUPPU_Loopi+0xcd0> + 80037814: 01c7571b srliw a4,a4,0x1c + 80037818: 00b76733 or a4,a4,a1 + 8003781c: 02071793 slli a5,a4,0x20 + 80037820: 0207d793 srli a5,a5,0x20 + 80037824: 00f307b3 add a5,t1,a5 + 80037828: 0007c783 lbu a5,0(a5) + 8003782c: 00f8f7b3 and a5,a7,a5 + 80037830: 00f80023 sb a5,0(a6) + 80037834: dfdff06f j 80037630 <_Z12FCEUPPU_Loopi+0xcd0> + 80037838: 00100793 li a5,1 + 8003783c: 04f13423 sd a5,72(sp) + 80037840: ac5ff06f j 80037304 <_Z12FCEUPPU_Loopi+0x9a4> + 80037844: 00195797 auipc a5,0x195 + 80037848: f007a783 lw a5,-256(a5) # 801cc744 <_ZL5spork> + 8003784c: ee078463 beqz a5,80036f34 <_Z12FCEUPPU_Loopi+0x5d4> + 80037850: 00195797 auipc a5,0x195 + 80037854: ee07aa23 sw zero,-268(a5) # 801cc744 <_ZL5spork> + 80037858: 00016797 auipc a5,0x16 + 8003785c: 9247c783 lbu a5,-1756(a5) # 8004d17c <_ZL13rendersprites> + 80037860: ec078a63 beqz a5,80036f34 <_Z12FCEUPPU_Loopi+0x5d4> + 80037864: 00193797 auipc a5,0x193 + 80037868: ee478793 addi a5,a5,-284 # 801ca748 <_ZL10sprlinebuf> + 8003786c: 00048693 mv a3,s1 + 80037870: 00193597 auipc a1,0x193 + 80037874: fd858593 addi a1,a1,-40 # 801ca848 <_ZL10sprlinebuf+0x100> + 80037878: 0007c703 lbu a4,0(a5) + 8003787c: 0187161b slliw a2,a4,0x18 + 80037880: 4186561b sraiw a2,a2,0x18 + 80037884: 00064e63 bltz a2,800378a0 <_Z12FCEUPPU_Loopi+0xf40> + 80037888: 04077613 andi a2,a4,64 + 8003788c: 00060863 beqz a2,8003789c <_Z12FCEUPPU_Loopi+0xf3c> + 80037890: 0006c603 lbu a2,0(a3) + 80037894: 04067613 andi a2,a2,64 + 80037898: 00060463 beqz a2,800378a0 <_Z12FCEUPPU_Loopi+0xf40> + 8003789c: 00e68023 sb a4,0(a3) + 800378a0: 00178793 addi a5,a5,1 + 800378a4: 00168693 addi a3,a3,1 + 800378a8: fcf598e3 bne a1,a5,80037878 <_Z12FCEUPPU_Loopi+0xf18> + 800378ac: 00144703 lbu a4,1(s0) + 800378b0: e84ff06f j 80036f34 <_Z12FCEUPPU_Loopi+0x5d4> + 800378b4: f98e80ef jal ra,8002004c <_Z7MMC5_hbi> + 800378b8: e04ff06f j 80036ebc <_Z12FCEUPPU_Loopi+0x55c> + 800378bc: 000d3503 ld a0,0(s10) + 800378c0: 0086979b slliw a5,a3,0x8 + 800378c4: 00f50533 add a0,a0,a5 + 800378c8: abcfe0ef jal ra,80035b84 <_ZL7ResetRLPh> + 800378cc: fa8ff06f j 80037074 <_Z12FCEUPPU_Loopi+0x714> + 800378d0: 0187951b slliw a0,a5,0x18 + 800378d4: 4185551b sraiw a0,a0,0x18 + 800378d8: e00f14e3 bnez t5,800376e0 <_Z12FCEUPPU_Loopi+0xd80> + 800378dc: 02055263 bgez a0,80037900 <_Z12FCEUPPU_Loopi+0xfa0> + 800378e0: 00377513 andi a0,a4,3 + 800378e4: 00b56533 or a0,a0,a1 + 800378e8: 02051513 slli a0,a0,0x20 + 800378ec: 02055513 srli a0,a0,0x20 + 800378f0: 00a30533 add a0,t1,a0 + 800378f4: 00054503 lbu a0,0(a0) + 800378f8: 00a8f533 and a0,a7,a0 + 800378fc: 00a80023 sb a0,0(a6) + 80037900: 0407f513 andi a0,a5,64 + 80037904: 02050463 beqz a0,8003792c <_Z12FCEUPPU_Loopi+0xfcc> + 80037908: 0047551b srliw a0,a4,0x4 + 8003790c: 00357513 andi a0,a0,3 + 80037910: 00b56533 or a0,a0,a1 + 80037914: 02051513 slli a0,a0,0x20 + 80037918: 02055513 srli a0,a0,0x20 + 8003791c: 00a30533 add a0,t1,a0 + 80037920: 00054503 lbu a0,0(a0) + 80037924: 00a8f533 and a0,a7,a0 + 80037928: 00a800a3 sb a0,1(a6) + 8003792c: 0207f513 andi a0,a5,32 + 80037930: 02050463 beqz a0,80037958 <_Z12FCEUPPU_Loopi+0xff8> + 80037934: 0087551b srliw a0,a4,0x8 + 80037938: 00357513 andi a0,a0,3 + 8003793c: 00b56533 or a0,a0,a1 + 80037940: 02051513 slli a0,a0,0x20 + 80037944: 02055513 srli a0,a0,0x20 + 80037948: 00a30533 add a0,t1,a0 + 8003794c: 00054503 lbu a0,0(a0) + 80037950: 00a8f533 and a0,a7,a0 + 80037954: 00a80123 sb a0,2(a6) + 80037958: 0107f513 andi a0,a5,16 + 8003795c: 02050463 beqz a0,80037984 <_Z12FCEUPPU_Loopi+0x1024> + 80037960: 00c7551b srliw a0,a4,0xc + 80037964: 00357513 andi a0,a0,3 + 80037968: 00b56533 or a0,a0,a1 + 8003796c: 02051513 slli a0,a0,0x20 + 80037970: 02055513 srli a0,a0,0x20 + 80037974: 00a30533 add a0,t1,a0 + 80037978: 00054503 lbu a0,0(a0) + 8003797c: 00a8f533 and a0,a7,a0 + 80037980: 00a801a3 sb a0,3(a6) + 80037984: 0087f513 andi a0,a5,8 + 80037988: 02050463 beqz a0,800379b0 <_Z12FCEUPPU_Loopi+0x1050> + 8003798c: 0107551b srliw a0,a4,0x10 + 80037990: 00357513 andi a0,a0,3 + 80037994: 00b56533 or a0,a0,a1 + 80037998: 02051513 slli a0,a0,0x20 + 8003799c: 02055513 srli a0,a0,0x20 + 800379a0: 00a30533 add a0,t1,a0 + 800379a4: 00054503 lbu a0,0(a0) + 800379a8: 00a8f533 and a0,a7,a0 + 800379ac: 00a80223 sb a0,4(a6) + 800379b0: 0047f513 andi a0,a5,4 + 800379b4: 02050463 beqz a0,800379dc <_Z12FCEUPPU_Loopi+0x107c> + 800379b8: 0147551b srliw a0,a4,0x14 + 800379bc: 00357513 andi a0,a0,3 + 800379c0: 00b56533 or a0,a0,a1 + 800379c4: 02051513 slli a0,a0,0x20 + 800379c8: 02055513 srli a0,a0,0x20 + 800379cc: 00a30533 add a0,t1,a0 + 800379d0: 00054503 lbu a0,0(a0) + 800379d4: 00a8f533 and a0,a7,a0 + 800379d8: 00a802a3 sb a0,5(a6) + 800379dc: 0027f513 andi a0,a5,2 + 800379e0: 02050463 beqz a0,80037a08 <_Z12FCEUPPU_Loopi+0x10a8> + 800379e4: 0187551b srliw a0,a4,0x18 + 800379e8: 00357513 andi a0,a0,3 + 800379ec: 00b56533 or a0,a0,a1 + 800379f0: 02051513 slli a0,a0,0x20 + 800379f4: 02055513 srli a0,a0,0x20 + 800379f8: 00a30533 add a0,t1,a0 + 800379fc: 00054503 lbu a0,0(a0) + 80037a00: 00a8f533 and a0,a7,a0 + 80037a04: 00a80323 sb a0,6(a6) + 80037a08: 0017f793 andi a5,a5,1 + 80037a0c: c20782e3 beqz a5,80037630 <_Z12FCEUPPU_Loopi+0xcd0> + 80037a10: 01c7571b srliw a4,a4,0x1c + 80037a14: 00b76733 or a4,a4,a1 + 80037a18: 02071793 slli a5,a4,0x20 + 80037a1c: 0207d793 srli a5,a5,0x20 + 80037a20: 00f307b3 add a5,t1,a5 + 80037a24: 0007c783 lbu a5,0(a5) + 80037a28: 00f8f7b3 and a5,a7,a5 + 80037a2c: 00f803a3 sb a5,7(a6) + 80037a30: c01ff06f j 80037630 <_Z12FCEUPPU_Loopi+0xcd0> + 80037a34: 00244703 lbu a4,2(s0) + 80037a38: 02076713 ori a4,a4,32 + 80037a3c: 00e40123 sb a4,2(s0) + 80037a40: 00800713 li a4,8 + 80037a44: 11876863 bltu a4,s8,80037b54 <_Z12FCEUPPU_Loopi+0x11f4> + 80037a48: 0004b703 ld a4,0(s1) + 80037a4c: 02070c63 beqz a4,80037a84 <_Z12FCEUPPU_Loopi+0x1124> + 80037a50: 00800d93 li s11,8 + 80037a54: 418d8dbb subw s11,s11,s8 + 80037a58: 020d8663 beqz s11,80037a84 <_Z12FCEUPPU_Loopi+0x1124> + 80037a5c: 00000a93 li s5,0 + 80037a60: 0080006f j 80037a68 <_Z12FCEUPPU_Loopi+0x1108> + 80037a64: 0004b703 ld a4,0(s1) + 80037a68: 00002537 lui a0,0x2 + 80037a6c: 000700e7 jalr a4 + 80037a70: 0004b703 ld a4,0(s1) + 80037a74: 001a8a9b addiw s5,s5,1 + 80037a78: 00098513 mv a0,s3 + 80037a7c: 000700e7 jalr a4 + 80037a80: ffba92e3 bne s5,s11,80037a64 <_Z12FCEUPPU_Loopi+0x1104> + 80037a84: 00195797 auipc a5,0x195 + 80037a88: cb8780a3 sb s8,-863(a5) # 801cc725 <_ZL10numsprites> + 80037a8c: 04813783 ld a5,72(sp) + 80037a90: 00195497 auipc s1,0x195 + 80037a94: c3048493 addi s1,s1,-976 # 801cc6c0 + 80037a98: 0004b703 ld a4,0(s1) + 80037a9c: 00195697 auipc a3,0x195 + 80037aa0: c8f68523 sb a5,-886(a3) # 801cc726 <_ZL11SpriteBlurp> + 80037aa4: d2070263 beqz a4,80036fc8 <_Z12FCEUPPU_Loopi+0x668> + 80037aa8: 00144783 lbu a5,1(s0) + 80037aac: 0187f793 andi a5,a5,24 + 80037ab0: d0078c63 beqz a5,80036fc8 <_Z12FCEUPPU_Loopi+0x668> + 80037ab4: 00044783 lbu a5,0(s0) + 80037ab8: 01800713 li a4,24 + 80037abc: 0387f793 andi a5,a5,56 + 80037ac0: d0e78463 beq a5,a4,80036fc8 <_Z12FCEUPPU_Loopi+0x668> + 80037ac4: 00600513 li a0,6 + 80037ac8: b98c90ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80037acc: 00144783 lbu a5,1(s0) + 80037ad0: 0187f793 andi a5,a5,24 + 80037ad4: 02078863 beqz a5,80037b04 <_Z12FCEUPPU_Loopi+0x11a4> + 80037ad8: 00195617 auipc a2,0x195 + 80037adc: c3c60613 addi a2,a2,-964 # 801cc714 + 80037ae0: 00062703 lw a4,0(a2) + 80037ae4: 000106b7 lui a3,0x10 + 80037ae8: 00195797 auipc a5,0x195 + 80037aec: c347a783 lw a5,-972(a5) # 801cc71c + 80037af0: be068693 addi a3,a3,-1056 # fbe0 <_entry_offset+0xfbe0> + 80037af4: 00d77733 and a4,a4,a3 + 80037af8: 41f7f793 andi a5,a5,1055 + 80037afc: 00e7e7b3 or a5,a5,a4 + 80037b00: 00f62023 sw a5,0(a2) + 80037b04: 00400513 li a0,4 + 80037b08: b58c90ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80037b0c: 0004b783 ld a5,0(s1) + 80037b10: 000780e7 jalr a5 + 80037b14: 03b00513 li a0,59 + 80037b18: b48c90ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80037b1c: 00144783 lbu a5,1(s0) + 80037b20: d1cff06f j 8003703c <_Z12FCEUPPU_Loopi+0x6dc> + 80037b24: 00144783 lbu a5,1(s0) + 80037b28: 00192597 auipc a1,0x192 + 80037b2c: 2005c583 lbu a1,512(a1) # 801c9d28 + 80037b30: 0017f793 andi a5,a5,1 + 80037b34: be078263 beqz a5,80036f18 <_Z12FCEUPPU_Loopi+0x5b8> + 80037b38: 0305f593 andi a1,a1,48 + 80037b3c: bdcff06f j 80036f18 <_Z12FCEUPPU_Loopi+0x5b8> + 80037b40: 00244703 lbu a4,2(s0) + 80037b44: 02076713 ori a4,a4,32 + 80037b48: 00e40123 sb a4,2(s0) + 80037b4c: 00800713 li a4,8 + 80037b50: f3877ae3 bgeu a4,s8,80037a84 <_Z12FCEUPPU_Loopi+0x1124> + 80037b54: 00244703 lbu a4,2(s0) + 80037b58: 02076713 ori a4,a4,32 + 80037b5c: 00e40123 sb a4,2(s0) + 80037b60: f25ff06f j 80037a84 <_Z12FCEUPPU_Loopi+0x1124> + 80037b64: 3c050263 beqz a0,80037f28 <_Z12FCEUPPU_Loopi+0x15c8> + 80037b68: 00078c13 mv s8,a5 + 80037b6c: 00100993 li s3,1 + 80037b70: 0187951b slliw a0,a5,0x18 + 80037b74: 4185551b sraiw a0,a0,0x18 + 80037b78: 02055463 bgez a0,80037ba0 <_Z12FCEUPPU_Loopi+0x1240> + 80037b7c: 00377513 andi a0,a4,3 + 80037b80: 00b56533 or a0,a0,a1 + 80037b84: 02051513 slli a0,a0,0x20 + 80037b88: 02055513 srli a0,a0,0x20 + 80037b8c: 00a30533 add a0,t1,a0 + 80037b90: 00054503 lbu a0,0(a0) # 2000 <_entry_offset+0x2000> + 80037b94: 00a8f533 and a0,a7,a0 + 80037b98: 04056513 ori a0,a0,64 + 80037b9c: 00a80023 sb a0,0(a6) + 80037ba0: 0407f513 andi a0,a5,64 + 80037ba4: 02050663 beqz a0,80037bd0 <_Z12FCEUPPU_Loopi+0x1270> + 80037ba8: 0047551b srliw a0,a4,0x4 + 80037bac: 00357513 andi a0,a0,3 + 80037bb0: 00b56533 or a0,a0,a1 + 80037bb4: 02051513 slli a0,a0,0x20 + 80037bb8: 02055513 srli a0,a0,0x20 + 80037bbc: 00a30533 add a0,t1,a0 + 80037bc0: 00054503 lbu a0,0(a0) + 80037bc4: 00a8f533 and a0,a7,a0 + 80037bc8: 04056513 ori a0,a0,64 + 80037bcc: 00a800a3 sb a0,1(a6) + 80037bd0: 0207f513 andi a0,a5,32 + 80037bd4: 02050663 beqz a0,80037c00 <_Z12FCEUPPU_Loopi+0x12a0> + 80037bd8: 0087551b srliw a0,a4,0x8 + 80037bdc: 00357513 andi a0,a0,3 + 80037be0: 00b56533 or a0,a0,a1 + 80037be4: 02051513 slli a0,a0,0x20 + 80037be8: 02055513 srli a0,a0,0x20 + 80037bec: 00a30533 add a0,t1,a0 + 80037bf0: 00054503 lbu a0,0(a0) + 80037bf4: 00a8f533 and a0,a7,a0 + 80037bf8: 04056513 ori a0,a0,64 + 80037bfc: 00a80123 sb a0,2(a6) + 80037c00: 0107f513 andi a0,a5,16 + 80037c04: 02050663 beqz a0,80037c30 <_Z12FCEUPPU_Loopi+0x12d0> + 80037c08: 00c7551b srliw a0,a4,0xc + 80037c0c: 00357513 andi a0,a0,3 + 80037c10: 00b56533 or a0,a0,a1 + 80037c14: 02051513 slli a0,a0,0x20 + 80037c18: 02055513 srli a0,a0,0x20 + 80037c1c: 00a30533 add a0,t1,a0 + 80037c20: 00054503 lbu a0,0(a0) + 80037c24: 00a8f533 and a0,a7,a0 + 80037c28: 04056513 ori a0,a0,64 + 80037c2c: 00a801a3 sb a0,3(a6) + 80037c30: 0087f513 andi a0,a5,8 + 80037c34: 02050663 beqz a0,80037c60 <_Z12FCEUPPU_Loopi+0x1300> + 80037c38: 0107551b srliw a0,a4,0x10 + 80037c3c: 00357513 andi a0,a0,3 + 80037c40: 00b56533 or a0,a0,a1 + 80037c44: 02051513 slli a0,a0,0x20 + 80037c48: 02055513 srli a0,a0,0x20 + 80037c4c: 00a30533 add a0,t1,a0 + 80037c50: 00054503 lbu a0,0(a0) + 80037c54: 00a8f533 and a0,a7,a0 + 80037c58: 04056513 ori a0,a0,64 + 80037c5c: 00a80223 sb a0,4(a6) + 80037c60: 0047f513 andi a0,a5,4 + 80037c64: 02050663 beqz a0,80037c90 <_Z12FCEUPPU_Loopi+0x1330> + 80037c68: 0147551b srliw a0,a4,0x14 + 80037c6c: 00357513 andi a0,a0,3 + 80037c70: 00b56533 or a0,a0,a1 + 80037c74: 02051513 slli a0,a0,0x20 + 80037c78: 02055513 srli a0,a0,0x20 + 80037c7c: 00a30533 add a0,t1,a0 + 80037c80: 00054503 lbu a0,0(a0) + 80037c84: 00a8f533 and a0,a7,a0 + 80037c88: 04056513 ori a0,a0,64 + 80037c8c: 00a802a3 sb a0,5(a6) + 80037c90: 0027f513 andi a0,a5,2 + 80037c94: 02050663 beqz a0,80037cc0 <_Z12FCEUPPU_Loopi+0x1360> + 80037c98: 0187551b srliw a0,a4,0x18 + 80037c9c: 00357513 andi a0,a0,3 + 80037ca0: 00b56533 or a0,a0,a1 + 80037ca4: 02051513 slli a0,a0,0x20 + 80037ca8: 02055513 srli a0,a0,0x20 + 80037cac: 00a30533 add a0,t1,a0 + 80037cb0: 00054503 lbu a0,0(a0) + 80037cb4: 00a8f533 and a0,a7,a0 + 80037cb8: 04056513 ori a0,a0,64 + 80037cbc: 00a80323 sb a0,6(a6) + 80037cc0: 0017f793 andi a5,a5,1 + 80037cc4: 960786e3 beqz a5,80037630 <_Z12FCEUPPU_Loopi+0xcd0> + 80037cc8: 01c7571b srliw a4,a4,0x1c + 80037ccc: 00b76733 or a4,a4,a1 + 80037cd0: 02071793 slli a5,a4,0x20 + 80037cd4: 0207d793 srli a5,a5,0x20 + 80037cd8: 00f307b3 add a5,t1,a5 + 80037cdc: 0007c783 lbu a5,0(a5) + 80037ce0: 00f8f7b3 and a5,a7,a5 + 80037ce4: 0407e793 ori a5,a5,64 + 80037ce8: 00f803a3 sb a5,7(a6) + 80037cec: 945ff06f j 80037630 <_Z12FCEUPPU_Loopi+0xcd0> + 80037cf0: 00193697 auipc a3,0x193 + 80037cf4: 85868693 addi a3,a3,-1960 # 801ca548 + 80037cf8: 03f00893 li a7,63 + 80037cfc: 00015297 auipc t0,0x15 + 80037d00: 47c28293 addi t0,t0,1148 # 8004d178 <_ZL10maxsprites> + 80037d04: 03f00493 li s1,63 + 80037d08: 020efe93 andi t4,t4,32 + 80037d0c: 00193397 auipc t2,0x193 + 80037d10: 93c38393 addi t2,t2,-1732 # 801ca648 + 80037d14: 0008bd97 auipc s11,0x8b + 80037d18: 02cd8d93 addi s11,s11,44 # 800c2d40 + 80037d1c: 00100c93 li s9,1 + 80037d20: 00001ab7 lui s5,0x1 + 80037d24: 00193f97 auipc t6,0x193 + 80037d28: 924f8f93 addi t6,t6,-1756 # 801ca648 + 80037d2c: 0bc0006f j 80037de8 <_Z12FCEUPPU_Loopi+0x1488> + 80037d30: 03813783 ld a5,56(sp) + 80037d34: 00c3131b slliw t1,t1,0xc + 80037d38: 01537333 and t1,t1,s5 + 80037d3c: 00fe7e33 and t3,t3,a5 + 80037d40: 01c36e33 or t3,t1,t3 + 80037d44: 000e081b sext.w a6,t3 + 80037d48: 0026ce03 lbu t3,2(a3) + 80037d4c: 00877313 andi t1,a4,8 + 80037d50: 0003031b sext.w t1,t1 + 80037d54: 018e1f1b slliw t5,t3,0x18 + 80037d58: 418f5f1b sraiw t5,t5,0x18 + 80037d5c: 0c0f4a63 bltz t5,80037e30 <_Z12FCEUPPU_Loopi+0x14d0> + 80037d60: 0067073b addw a4,a4,t1 + 80037d64: 0107083b addw a6,a4,a6 + 80037d68: 000a2083 lw ra,0(s4) + 80037d6c: 00a85f1b srliw t5,a6,0xa + 80037d70: 020f1f13 slli t5,t5,0x20 + 80037d74: 02081813 slli a6,a6,0x20 + 80037d78: 02085813 srli a6,a6,0x20 + 80037d7c: 01df5f13 srli t5,t5,0x1d + 80037d80: 0c008e63 beqz ra,80037e5c <_Z12FCEUPPU_Loopi+0x14fc> + 80037d84: 00194797 auipc a5,0x194 + 80037d88: f1478793 addi a5,a5,-236 # 801cbc98 + 80037d8c: 0007a703 lw a4,0(a5) + 80037d90: 0d970663 beq a4,s9,80037e5c <_Z12FCEUPPU_Loopi+0x14fc> + 80037d94: 0008b797 auipc a5,0x8b + 80037d98: a4c78793 addi a5,a5,-1460 # 800c27e0 + 80037d9c: 01e78f33 add t5,a5,t5 + 80037da0: 000f3703 ld a4,0(t5) + 80037da4: 01070833 add a6,a4,a6 + 80037da8: 00084703 lbu a4,0(a6) + 80037dac: 0036c303 lbu t1,3(a3) + 80037db0: 00884803 lbu a6,8(a6) + 80037db4: 06e10423 sb a4,104(sp) + 80037db8: 066105a3 sb t1,107(sp) + 80037dbc: 070104a3 sb a6,105(sp) + 80037dc0: 07c10523 sb t3,106(sp) + 80037dc4: 06812703 lw a4,104(sp) + 80037dc8: 00251513 slli a0,a0,0x2 + 80037dcc: 00a38533 add a0,t2,a0 + 80037dd0: 001c079b addiw a5,s8,1 + 80037dd4: 00e52023 sw a4,0(a0) + 80037dd8: 0ff7fc13 andi s8,a5,255 + 80037ddc: 00468693 addi a3,a3,4 + 80037de0: fff8889b addiw a7,a7,-1 + 80037de4: d7f684e3 beq a3,t6,80037b4c <_Z12FCEUPPU_Loopi+0x11ec> + 80037de8: 0006c703 lbu a4,0(a3) + 80037dec: 40e6073b subw a4,a2,a4 + 80037df0: 0007051b sext.w a0,a4 + 80037df4: feb574e3 bgeu a0,a1,80037ddc <_Z12FCEUPPU_Loopi+0x147c> + 80037df8: 0002a803 lw a6,0(t0) + 80037dfc: 000c051b sext.w a0,s8 + 80037e00: d50c50e3 bge s8,a6,80037b40 <_Z12FCEUPPU_Loopi+0x11e0> + 80037e04: 06988463 beq a7,s1,80037e6c <_Z12FCEUPPU_Loopi+0x150c> + 80037e08: 0016c303 lbu t1,1(a3) + 80037e0c: 00431e1b slliw t3,t1,0x4 + 80037e10: f20e90e3 bnez t4,80037d30 <_Z12FCEUPPU_Loopi+0x13d0> + 80037e14: 013e083b addw a6,t3,s3 + 80037e18: 0026ce03 lbu t3,2(a3) + 80037e1c: 00877313 andi t1,a4,8 + 80037e20: 0003031b sext.w t1,t1 + 80037e24: 018e1f1b slliw t5,t3,0x18 + 80037e28: 418f5f1b sraiw t5,t5,0x18 + 80037e2c: f20f5ae3 bgez t5,80037d60 <_Z12FCEUPPU_Loopi+0x1400> + 80037e30: 04013783 ld a5,64(sp) + 80037e34: 000a2083 lw ra,0(s4) + 80037e38: 40e7873b subw a4,a5,a4 + 80037e3c: 4067073b subw a4,a4,t1 + 80037e40: 0107083b addw a6,a4,a6 + 80037e44: 00a85f1b srliw t5,a6,0xa + 80037e48: 020f1f13 slli t5,t5,0x20 + 80037e4c: 02081813 slli a6,a6,0x20 + 80037e50: 02085813 srli a6,a6,0x20 + 80037e54: 01df5f13 srli t5,t5,0x1d + 80037e58: f20096e3 bnez ra,80037d84 <_Z12FCEUPPU_Loopi+0x1424> + 80037e5c: 01ed8f33 add t5,s11,t5 + 80037e60: 000f3303 ld t1,0(t5) + 80037e64: 01030833 add a6,t1,a6 + 80037e68: f41ff06f j 80037da8 <_Z12FCEUPPU_Loopi+0x1448> + 80037e6c: 00100793 li a5,1 + 80037e70: 04f13423 sd a5,72(sp) + 80037e74: f95ff06f j 80037e08 <_Z12FCEUPPU_Loopi+0x14a8> + 80037e78: 0ef00793 li a5,239 + 80037e7c: 0957ca63 blt a5,s5,80037f10 <_Z12FCEUPPU_Loopi+0x15b0> + 80037e80: 002a979b slliw a5,s5,0x2 + 80037e84: 015787bb addw a5,a5,s5 + 80037e88: 0047951b slliw a0,a5,0x4 + 80037e8c: 00a787bb addw a5,a5,a0 + 80037e90: 0027951b slliw a0,a5,0x2 + 80037e94: 0155053b addw a0,a0,s5 + 80037e98: fc9c80ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80037e9c: 00144783 lbu a5,1(s0) + 80037ea0: 0107f793 andi a5,a5,16 + 80037ea4: 00078863 beqz a5,80037eb4 <_Z12FCEUPPU_Loopi+0x1554> + 80037ea8: 00244783 lbu a5,2(s0) + 80037eac: 0407e793 ori a5,a5,64 + 80037eb0: 00f40123 sb a5,2(s0) + 80037eb4: 0f000513 li a0,240 + 80037eb8: 4125053b subw a0,a0,s2 + 80037ebc: 0025179b slliw a5,a0,0x2 + 80037ec0: 00a787bb addw a5,a5,a0 + 80037ec4: 0047971b slliw a4,a5,0x4 + 80037ec8: 00e787bb addw a5,a5,a4 + 80037ecc: 0027979b slliw a5,a5,0x2 + 80037ed0: 00a7853b addw a0,a5,a0 + 80037ed4: f8dc80ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80037ed8: d4dc80ef jal ra,80000c24 <_Z7ShowFPSv> + 80037edc: b41fe06f j 80036a1c <_Z12FCEUPPU_Loopi+0xbc> + 80037ee0: e8dc80ef jal ra,80000d6c <_Z10TriggerNMIv> + 80037ee4: bd5fe06f j 80036ab8 <_Z12FCEUPPU_Loopi+0x158> + 80037ee8: 00194517 auipc a0,0x194 + 80037eec: 7a052503 lw a0,1952(a0) # 801cc688 + 80037ef0: 0025179b slliw a5,a0,0x2 + 80037ef4: 00a787bb addw a5,a5,a0 + 80037ef8: 0047971b slliw a4,a5,0x4 + 80037efc: 00e787bb addw a5,a5,a4 + 80037f00: 0027979b slliw a5,a5,0x2 + 80037f04: 00a7853b addw a0,a5,a0 + 80037f08: f59c80ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80037f0c: b05fe06f j 80036a10 <_Z12FCEUPPU_Loopi+0xb0> + 80037f10: 00014537 lui a0,0x14 + 80037f14: fb050513 addi a0,a0,-80 # 13fb0 <_entry_offset+0x13fb0> + 80037f18: f49c80ef jal ra,80000e60 <_Z14X6502_RunDebugi> + 80037f1c: fbdff06f j 80037ed8 <_Z12FCEUPPU_Loopi+0x1578> + 80037f20: 00100993 li s3,1 + 80037f24: d90ff06f j 800374b4 <_Z12FCEUPPU_Loopi+0xb54> + 80037f28: 0187951b slliw a0,a5,0x18 + 80037f2c: 4185551b sraiw a0,a0,0x18 + 80037f30: 00078c13 mv s8,a5 + 80037f34: 00100993 li s3,1 + 80037f38: 9a5ff06f j 800378dc <_Z12FCEUPPU_Loopi+0xf7c> + 80037f3c: 00195517 auipc a0,0x195 + 80037f40: 86452503 lw a0,-1948(a0) # 801cc7a0 + 80037f44: 908e80ef jal ra,8002004c <_Z7MMC5_hbi> + 80037f48: 96cff06f j 800370b4 <_Z12FCEUPPU_Loopi+0x754> + 80037f4c: 69000613 li a2,1680 + 80037f50: 0000e597 auipc a1,0xe + 80037f54: 6d858593 addi a1,a1,1752 # 80046628 + 80037f58: 00005517 auipc a0,0x5 + 80037f5c: db850513 addi a0,a0,-584 # 8003cd10 <_etext+0x2c> + 80037f60: 5e8030ef jal ra,8003b548 + 80037f64: 00100513 li a0,1 + 80037f68: 60d010ef jal ra,80039d74 + +0000000080037f6c <_ZL5B2007jh>: + 80037f6c: fc010113 addi sp,sp,-64 + 80037f70: 03213023 sd s2,32(sp) + 80037f74: 02113c23 sd ra,56(sp) + 80037f78: 02813823 sd s0,48(sp) + 80037f7c: 02913423 sd s1,40(sp) + 80037f80: 01313c23 sd s3,24(sp) + 80037f84: 00195797 auipc a5,0x195 + 80037f88: 8107a783 lw a5,-2032(a5) # 801cc794 + 80037f8c: 00058913 mv s2,a1 + 80037f90: 14078263 beqz a5,800380d4 <_ZL5B2007jh+0x168> + 80037f94: 00194417 auipc s0,0x194 + 80037f98: aac40413 addi s0,s0,-1364 # 801cba40 + 80037f9c: 00442783 lw a5,4(s0) + 80037fa0: 00842603 lw a2,8(s0) + 80037fa4: 01042503 lw a0,16(s0) + 80037fa8: 00c42683 lw a3,12(s0) + 80037fac: 00042703 lw a4,0(s0) + 80037fb0: 00b7979b slliw a5,a5,0xb + 80037fb4: 00a6161b slliw a2,a2,0xa + 80037fb8: 00c7e7b3 or a5,a5,a2 + 80037fbc: 00a7e7b3 or a5,a5,a0 + 80037fc0: 0056969b slliw a3,a3,0x5 + 80037fc4: 00d7e7b3 or a5,a5,a3 + 80037fc8: 00c7171b slliw a4,a4,0xc + 80037fcc: 000036b7 lui a3,0x3 + 80037fd0: 00d77733 and a4,a4,a3 + 80037fd4: 00e7e7b3 or a5,a5,a4 + 80037fd8: 03279513 slli a0,a5,0x32 + 80037fdc: 03255513 srli a0,a0,0x32 + 80037fe0: 00194997 auipc s3,0x194 + 80037fe4: 73498993 addi s3,s3,1844 # 801cc714 + 80037fe8: 00194717 auipc a4,0x194 + 80037fec: 70b70ea3 sb a1,1821(a4) # 801cc705 + 80037ff0: 00a9a023 sw a0,0(s3) + 80037ff4: 00194717 auipc a4,0x194 + 80037ff8: 6c473703 ld a4,1732(a4) # 801cc6b8 + 80037ffc: 0007849b sext.w s1,a5 + 80038000: 28070a63 beqz a4,80038294 <_ZL5B2007jh+0x328> + 80038004: 000700e7 jalr a4 + 80038008: 03442583 lw a1,52(s0) + 8003800c: 0f000713 li a4,240 + 80038010: 00c42603 lw a2,12(s0) + 80038014: 00042503 lw a0,0(s0) + 80038018: 00442803 lw a6,4(s0) + 8003801c: 1ab77863 bgeu a4,a1,800381cc <_ZL5B2007jh+0x260> + 80038020: 00194597 auipc a1,0x194 + 80038024: 6e058593 addi a1,a1,1760 # 801cc700 + 80038028: 0005c583 lbu a1,0(a1) + 8003802c: 01042783 lw a5,16(s0) + 80038030: 0045f593 andi a1,a1,4 + 80038034: 1e059663 bnez a1,80038220 <_ZL5B2007jh+0x2b4> + 80038038: 0017879b addiw a5,a5,1 + 8003803c: 0057d71b srliw a4,a5,0x5 + 80038040: 00177713 andi a4,a4,1 + 80038044: 00c7063b addw a2,a4,a2 + 80038048: 00842703 lw a4,8(s0) + 8003804c: 0056559b srliw a1,a2,0x5 + 80038050: 01f7f793 andi a5,a5,31 + 80038054: 00e585bb addw a1,a1,a4 + 80038058: 0015d69b srliw a3,a1,0x1 + 8003805c: 010686bb addw a3,a3,a6 + 80038060: 0016d71b srliw a4,a3,0x1 + 80038064: 00a7073b addw a4,a4,a0 + 80038068: 01f67613 andi a2,a2,31 + 8003806c: 0015f593 andi a1,a1,1 + 80038070: 0016f693 andi a3,a3,1 + 80038074: 00777713 andi a4,a4,7 + 80038078: 00c42623 sw a2,12(s0) + 8003807c: 00f42823 sw a5,16(s0) + 80038080: 00b42423 sw a1,8(s0) + 80038084: 00d42223 sw a3,4(s0) + 80038088: 00e42023 sw a4,0(s0) + 8003808c: 00561613 slli a2,a2,0x5 + 80038090: 00b6969b slliw a3,a3,0xb + 80038094: 00c7e7b3 or a5,a5,a2 + 80038098: 00d7e7b3 or a5,a5,a3 + 8003809c: 00a5959b slliw a1,a1,0xa + 800380a0: 00c7171b slliw a4,a4,0xc + 800380a4: 000036b7 lui a3,0x3 + 800380a8: 00b7e7b3 or a5,a5,a1 + 800380ac: 00d77733 and a4,a4,a3 + 800380b0: 00e7e7b3 or a5,a5,a4 + 800380b4: 00f9a023 sw a5,0(s3) + 800380b8: 03813083 ld ra,56(sp) + 800380bc: 03013403 ld s0,48(sp) + 800380c0: 02813483 ld s1,40(sp) + 800380c4: 02013903 ld s2,32(sp) + 800380c8: 01813983 ld s3,24(sp) + 800380cc: 04010113 addi sp,sp,64 + 800380d0: 00008067 ret + 800380d4: 00194997 auipc s3,0x194 + 800380d8: 64098993 addi s3,s3,1600 # 801cc714 + 800380dc: 0009a703 lw a4,0(s3) + 800380e0: 000046b7 lui a3,0x4 + 800380e4: 00194617 auipc a2,0x194 + 800380e8: 62b600a3 sb a1,1569(a2) # 801cc705 + 800380ec: fff68793 addi a5,a3,-1 # 3fff <_entry_offset+0x3fff> + 800380f0: 03271593 slli a1,a4,0x32 + 800380f4: 00070613 mv a2,a4 + 800380f8: 00f777b3 and a5,a4,a5 + 800380fc: 0605cc63 bltz a1,80038174 <_ZL5B2007jh+0x208> + 80038100: 00194617 auipc a2,0x194 + 80038104: 60464603 lbu a2,1540(a2) # 801cc704 + 80038108: 00a7d69b srliw a3,a5,0xa + 8003810c: 40d656bb sraw a3,a2,a3 + 80038110: 0016f693 andi a3,a3,1 + 80038114: 00a7d61b srliw a2,a5,0xa + 80038118: 14069663 bnez a3,80038264 <_ZL5B2007jh+0x2f8> + 8003811c: 00194797 auipc a5,0x194 + 80038120: 5e47c783 lbu a5,1508(a5) # 801cc700 + 80038124: 0047f793 andi a5,a5,4 + 80038128: 04078063 beqz a5,80038168 <_ZL5B2007jh+0x1fc> + 8003812c: 0207071b addiw a4,a4,32 + 80038130: 00e9a023 sw a4,0(s3) + 80038134: 00194317 auipc t1,0x194 + 80038138: 5d433303 ld t1,1492(t1) # 801cc708 + 8003813c: f6030ee3 beqz t1,800380b8 <_ZL5B2007jh+0x14c> + 80038140: 0009a503 lw a0,0(s3) + 80038144: 03013403 ld s0,48(sp) + 80038148: 03813083 ld ra,56(sp) + 8003814c: 02813483 ld s1,40(sp) + 80038150: 02013903 ld s2,32(sp) + 80038154: 01813983 ld s3,24(sp) + 80038158: 03251513 slli a0,a0,0x32 + 8003815c: 03255513 srli a0,a0,0x32 + 80038160: 04010113 addi sp,sp,64 + 80038164: 00030067 jr t1 + 80038168: 0017071b addiw a4,a4,1 + 8003816c: 00e9a023 sw a4,0(s3) + 80038170: fc5ff06f j 80038134 <_ZL5B2007jh+0x1c8> + 80038174: eff68693 addi a3,a3,-257 + 80038178: 0af6e863 bltu a3,a5,80038228 <_ZL5B2007jh+0x2bc> + 8003817c: 00a7d79b srliw a5,a5,0xa + 80038180: 00194697 auipc a3,0x194 + 80038184: 5906a683 lw a3,1424(a3) # 801cc710 + 80038188: 0037f793 andi a5,a5,3 + 8003818c: 18068263 beqz a3,80038310 <_ZL5B2007jh+0x3a4> + 80038190: 00194697 auipc a3,0x194 + 80038194: 60c6c683 lbu a3,1548(a3) # 801cc79c + 80038198: 0016f593 andi a1,a3,1 + 8003819c: 16058a63 beqz a1,80038310 <_ZL5B2007jh+0x3a4> + 800381a0: 4016d69b sraiw a3,a3,0x1 + 800381a4: 00d7d7bb srlw a5,a5,a3 + 800381a8: 00a7979b slliw a5,a5,0xa + 800381ac: 4007f793 andi a5,a5,1024 + 800381b0: 3ff67613 andi a2,a2,1023 + 800381b4: 00c7e7b3 or a5,a5,a2 + 800381b8: 00192697 auipc a3,0x192 + 800381bc: b9068693 addi a3,a3,-1136 # 801c9d48 + 800381c0: 00f687b3 add a5,a3,a5 + 800381c4: 01278023 sb s2,0(a5) + 800381c8: f55ff06f j 8003811c <_ZL5B2007jh+0x1b0> + 800381cc: 00194597 auipc a1,0x194 + 800381d0: 53458593 addi a1,a1,1332 # 801cc700 + 800381d4: 0015c703 lbu a4,1(a1) + 800381d8: 01877713 andi a4,a4,24 + 800381dc: e40706e3 beqz a4,80038028 <_ZL5B2007jh+0xbc> + 800381e0: 0015071b addiw a4,a0,1 + 800381e4: 0037579b srliw a5,a4,0x3 + 800381e8: 00c7863b addw a2,a5,a2 + 800381ec: 01f67793 andi a5,a2,31 + 800381f0: 00f42623 sw a5,12(s0) + 800381f4: 01e00693 li a3,30 + 800381f8: 0037559b srliw a1,a4,0x3 + 800381fc: 00579613 slli a2,a5,0x5 + 80038200: 16d78863 beq a5,a3,80038370 <_ZL5B2007jh+0x404> + 80038204: 00777713 andi a4,a4,7 + 80038208: 00187693 andi a3,a6,1 + 8003820c: 00842583 lw a1,8(s0) + 80038210: 01042783 lw a5,16(s0) + 80038214: 00e42023 sw a4,0(s0) + 80038218: 00d42223 sw a3,4(s0) + 8003821c: e75ff06f j 80038090 <_ZL5B2007jh+0x124> + 80038220: 0016061b addiw a2,a2,1 + 80038224: e25ff06f j 80038048 <_ZL5B2007jh+0xdc> + 80038228: 00367693 andi a3,a2,3 + 8003822c: 03f97913 andi s2,s2,63 + 80038230: 10069e63 bnez a3,8003834c <_ZL5B2007jh+0x3e0> + 80038234: 00c67613 andi a2,a2,12 + 80038238: 18061c63 bnez a2,800383d0 <_ZL5B2007jh+0x464> + 8003823c: 00192797 auipc a5,0x192 + 80038240: aec78793 addi a5,a5,-1300 # 801c9d28 + 80038244: 01278623 sb s2,12(a5) + 80038248: 01278423 sb s2,8(a5) + 8003824c: 01278223 sb s2,4(a5) + 80038250: 01278023 sb s2,0(a5) + 80038254: 00100793 li a5,1 + 80038258: 00194697 auipc a3,0x194 + 8003825c: 4cf6a823 sw a5,1232(a3) # 801cc728 <_ZL16PALcache_outdate> + 80038260: ebdff06f j 8003811c <_ZL5B2007jh+0x1b0> + 80038264: 02061613 slli a2,a2,0x20 + 80038268: 0008b717 auipc a4,0x8b + 8003826c: ad870713 addi a4,a4,-1320 # 800c2d40 + 80038270: 01d65613 srli a2,a2,0x1d + 80038274: 00c70633 add a2,a4,a2 + 80038278: 00063703 ld a4,0(a2) + 8003827c: 02079793 slli a5,a5,0x20 + 80038280: 0207d793 srli a5,a5,0x20 + 80038284: 00f707b3 add a5,a4,a5 + 80038288: 01278023 sb s2,0(a5) + 8003828c: 0009a703 lw a4,0(s3) + 80038290: e8dff06f j 8003811c <_ZL5B2007jh+0x1b0> + 80038294: 00194797 auipc a5,0x194 + 80038298: 4747b783 ld a5,1140(a5) # 801cc708 + 8003829c: 00078863 beqz a5,800382ac <_ZL5B2007jh+0x340> + 800382a0: 00a13423 sd a0,8(sp) + 800382a4: 000780e7 jalr a5 + 800382a8: 00813503 ld a0,8(sp) + 800382ac: 03249793 slli a5,s1,0x32 + 800382b0: 0e07d063 bgez a5,80038390 <_ZL5B2007jh+0x424> + 800382b4: 000047b7 lui a5,0x4 + 800382b8: eff78793 addi a5,a5,-257 # 3eff <_entry_offset+0x3eff> + 800382bc: 12a7ee63 bltu a5,a0,800383f8 <_ZL5B2007jh+0x48c> + 800382c0: 00a5551b srliw a0,a0,0xa + 800382c4: 00194797 auipc a5,0x194 + 800382c8: 44c7a783 lw a5,1100(a5) # 801cc710 + 800382cc: 00357513 andi a0,a0,3 + 800382d0: 16078a63 beqz a5,80038444 <_ZL5B2007jh+0x4d8> + 800382d4: 00194797 auipc a5,0x194 + 800382d8: 4c87c783 lbu a5,1224(a5) # 801cc79c + 800382dc: 0017f713 andi a4,a5,1 + 800382e0: 16070263 beqz a4,80038444 <_ZL5B2007jh+0x4d8> + 800382e4: 4017d79b sraiw a5,a5,0x1 + 800382e8: 00f557bb srlw a5,a0,a5 + 800382ec: 00a7979b slliw a5,a5,0xa + 800382f0: 4007f793 andi a5,a5,1024 + 800382f4: 3ff4f493 andi s1,s1,1023 + 800382f8: 0097e7b3 or a5,a5,s1 + 800382fc: 00192717 auipc a4,0x192 + 80038300: a4c70713 addi a4,a4,-1460 # 801c9d48 + 80038304: 00f707b3 add a5,a4,a5 + 80038308: 01278023 sb s2,0(a5) + 8003830c: cfdff06f j 80038008 <_ZL5B2007jh+0x9c> + 80038310: 00194697 auipc a3,0x194 + 80038314: 3f66c683 lbu a3,1014(a3) # 801cc706 + 80038318: 40f6d6bb sraw a3,a3,a5 + 8003831c: 0016f693 andi a3,a3,1 + 80038320: de068ee3 beqz a3,8003811c <_ZL5B2007jh+0x1b0> + 80038324: 00379793 slli a5,a5,0x3 + 80038328: 00193697 auipc a3,0x193 + 8003832c: 79868693 addi a3,a3,1944 # 801cbac0 + 80038330: 00f687b3 add a5,a3,a5 + 80038334: 0007b783 ld a5,0(a5) + 80038338: 3ff77713 andi a4,a4,1023 + 8003833c: 00e78733 add a4,a5,a4 + 80038340: 01270023 sb s2,0(a4) + 80038344: 0009a703 lw a4,0(s3) + 80038348: dd5ff06f j 8003811c <_ZL5B2007jh+0x1b0> + 8003834c: 00192797 auipc a5,0x192 + 80038350: 9dc78793 addi a5,a5,-1572 # 801c9d28 + 80038354: 01f67613 andi a2,a2,31 + 80038358: 00c78633 add a2,a5,a2 + 8003835c: 00100793 li a5,1 + 80038360: 01260023 sb s2,0(a2) + 80038364: 00194697 auipc a3,0x194 + 80038368: 3cf6a223 sw a5,964(a3) # 801cc728 <_ZL16PALcache_outdate> + 8003836c: db1ff06f j 8003811c <_ZL5B2007jh+0x1b0> + 80038370: 00100793 li a5,1 + 80038374: 3c000613 li a2,960 + 80038378: e8f596e3 bne a1,a5,80038204 <_ZL5B2007jh+0x298> + 8003837c: 0018081b addiw a6,a6,1 + 80038380: 00193797 auipc a5,0x193 + 80038384: 6c07a623 sw zero,1740(a5) # 801cba4c + 80038388: 00000613 li a2,0 + 8003838c: e79ff06f j 80038204 <_ZL5B2007jh+0x298> + 80038390: 00194717 auipc a4,0x194 + 80038394: 37474703 lbu a4,884(a4) # 801cc704 + 80038398: 00a55793 srli a5,a0,0xa + 8003839c: 40f757bb sraw a5,a4,a5 + 800383a0: 0017f793 andi a5,a5,1 + 800383a4: 00a5571b srliw a4,a0,0xa + 800383a8: c60780e3 beqz a5,80038008 <_ZL5B2007jh+0x9c> + 800383ac: 02071713 slli a4,a4,0x20 + 800383b0: 0008b797 auipc a5,0x8b + 800383b4: 99078793 addi a5,a5,-1648 # 800c2d40 + 800383b8: 01d75713 srli a4,a4,0x1d + 800383bc: 00e78733 add a4,a5,a4 + 800383c0: 00073783 ld a5,0(a4) + 800383c4: 00a78533 add a0,a5,a0 + 800383c8: 01250023 sb s2,0(a0) + 800383cc: c3dff06f j 80038008 <_ZL5B2007jh+0x9c> + 800383d0: 0027d79b srliw a5,a5,0x2 + 800383d4: 0037f793 andi a5,a5,3 + 800383d8: fff7879b addiw a5,a5,-1 + 800383dc: 02079793 slli a5,a5,0x20 + 800383e0: 0207d793 srli a5,a5,0x20 + 800383e4: 00194697 auipc a3,0x194 + 800383e8: 33c68693 addi a3,a3,828 # 801cc720 + 800383ec: 00f687b3 add a5,a3,a5 + 800383f0: 01278023 sb s2,0(a5) + 800383f4: d29ff06f j 8003811c <_ZL5B2007jh+0x1b0> + 800383f8: 0034f793 andi a5,s1,3 + 800383fc: 03f97913 andi s2,s2,63 + 80038400: 06079e63 bnez a5,8003847c <_ZL5B2007jh+0x510> + 80038404: 00c4f793 andi a5,s1,12 + 80038408: 08079c63 bnez a5,800384a0 <_ZL5B2007jh+0x534> + 8003840c: 00192797 auipc a5,0x192 + 80038410: 91c78793 addi a5,a5,-1764 # 801c9d28 + 80038414: 01278623 sb s2,12(a5) + 80038418: 01278423 sb s2,8(a5) + 8003841c: 01278223 sb s2,4(a5) + 80038420: 01278023 sb s2,0(a5) + 80038424: 01278e23 sb s2,28(a5) + 80038428: 01278c23 sb s2,24(a5) + 8003842c: 01278a23 sb s2,20(a5) + 80038430: 01278823 sb s2,16(a5) + 80038434: 00100793 li a5,1 + 80038438: 00194717 auipc a4,0x194 + 8003843c: 2ef72823 sw a5,752(a4) # 801cc728 <_ZL16PALcache_outdate> + 80038440: bc9ff06f j 80038008 <_ZL5B2007jh+0x9c> + 80038444: 00194797 auipc a5,0x194 + 80038448: 2c27c783 lbu a5,706(a5) # 801cc706 + 8003844c: 40a7d7bb sraw a5,a5,a0 + 80038450: 0017f793 andi a5,a5,1 + 80038454: ba078ae3 beqz a5,80038008 <_ZL5B2007jh+0x9c> + 80038458: 00193797 auipc a5,0x193 + 8003845c: 66878793 addi a5,a5,1640 # 801cbac0 + 80038460: 00351513 slli a0,a0,0x3 + 80038464: 00a78533 add a0,a5,a0 + 80038468: 00053783 ld a5,0(a0) + 8003846c: 3ff4f493 andi s1,s1,1023 + 80038470: 009787b3 add a5,a5,s1 + 80038474: 01278023 sb s2,0(a5) + 80038478: b91ff06f j 80038008 <_ZL5B2007jh+0x9c> + 8003847c: 00192717 auipc a4,0x192 + 80038480: 8ac70713 addi a4,a4,-1876 # 801c9d28 + 80038484: 01f4f793 andi a5,s1,31 + 80038488: 00f707b3 add a5,a4,a5 + 8003848c: 01278023 sb s2,0(a5) + 80038490: 00100793 li a5,1 + 80038494: 00194717 auipc a4,0x194 + 80038498: 28f72a23 sw a5,660(a4) # 801cc728 <_ZL16PALcache_outdate> + 8003849c: b6dff06f j 80038008 <_ZL5B2007jh+0x9c> + 800384a0: 0025579b srliw a5,a0,0x2 + 800384a4: 0037f793 andi a5,a5,3 + 800384a8: fff7879b addiw a5,a5,-1 + 800384ac: 02079793 slli a5,a5,0x20 + 800384b0: 0207d793 srli a5,a5,0x20 + 800384b4: 00194717 auipc a4,0x194 + 800384b8: 26c70713 addi a4,a4,620 # 801cc720 + 800384bc: 00f707b3 add a5,a4,a5 + 800384c0: 01278023 sb s2,0(a5) + 800384c4: b45ff06f j 80038008 <_ZL5B2007jh+0x9c> + +00000000800384c8 <_Z19newppu_get_scanlinev>: + 800384c8: 00193517 auipc a0,0x193 + 800384cc: 5ac52503 lw a0,1452(a0) # 801cba74 + 800384d0: 00008067 ret + +00000000800384d4 <_Z19READPAL_MOTHEROFALLj>: + 800384d4: 00194797 auipc a5,0x194 + 800384d8: 22d7c783 lbu a5,557(a5) # 801cc701 + 800384dc: 00357713 andi a4,a0,3 + 800384e0: 0017f793 andi a5,a5,1 + 800384e4: 04071863 bnez a4,80038534 <_Z19READPAL_MOTHEROFALLj+0x60> + 800384e8: 00c57713 andi a4,a0,12 + 800384ec: 00071c63 bnez a4,80038504 <_Z19READPAL_MOTHEROFALLj+0x30> + 800384f0: 00192517 auipc a0,0x192 + 800384f4: 83854503 lbu a0,-1992(a0) # 801c9d28 + 800384f8: 00078463 beqz a5,80038500 <_Z19READPAL_MOTHEROFALLj+0x2c> + 800384fc: 03057513 andi a0,a0,48 + 80038500: 00008067 ret + 80038504: 0025551b srliw a0,a0,0x2 + 80038508: 00357513 andi a0,a0,3 + 8003850c: fff5051b addiw a0,a0,-1 + 80038510: 02051513 slli a0,a0,0x20 + 80038514: 02055513 srli a0,a0,0x20 + 80038518: 00194717 auipc a4,0x194 + 8003851c: 20870713 addi a4,a4,520 # 801cc720 + 80038520: 00a70533 add a0,a4,a0 + 80038524: 00054503 lbu a0,0(a0) + 80038528: fc078ce3 beqz a5,80038500 <_Z19READPAL_MOTHEROFALLj+0x2c> + 8003852c: 03057513 andi a0,a0,48 + 80038530: fd1ff06f j 80038500 <_Z19READPAL_MOTHEROFALLj+0x2c> + 80038534: 01f57513 andi a0,a0,31 + 80038538: 00191717 auipc a4,0x191 + 8003853c: 7f070713 addi a4,a4,2032 # 801c9d28 + 80038540: 00a70533 add a0,a4,a0 + 80038544: 00054503 lbu a0,0(a0) + 80038548: fa078ce3 beqz a5,80038500 <_Z19READPAL_MOTHEROFALLj+0x2c> + 8003854c: 03057513 andi a0,a0,48 + 80038550: fb1ff06f j 80038500 <_Z19READPAL_MOTHEROFALLj+0x2c> + +0000000080038554 <_Z14FCEUPPU_GetCHRjj>: + 80038554: 00194717 auipc a4,0x194 + 80038558: 18072703 lw a4,384(a4) # 801cc6d4 + 8003855c: 00050793 mv a5,a0 + 80038560: 08070063 beqz a4,800385e0 <_Z14FCEUPPU_GetCHRjj+0x8c> + 80038564: 00194697 auipc a3,0x194 + 80038568: 1746c683 lbu a3,372(a3) # 801cc6d8 + 8003856c: 00100713 li a4,1 + 80038570: 00e68463 beq a3,a4,80038578 <_Z14FCEUPPU_GetCHRjj+0x24> + 80038574: e48e706f j 8001fbbc <_Z13MMC5BGVRAMADRj> + 80038578: 00194717 auipc a4,0x194 + 8003857c: 16873703 ld a4,360(a4) # 801cc6e0 + 80038580: 3ff5f593 andi a1,a1,1023 + 80038584: 00b705b3 add a1,a4,a1 + 80038588: 0005c703 lbu a4,0(a1) + 8003858c: 00194517 auipc a0,0x194 + 80038590: 16052503 lw a0,352(a0) # 801cc6ec + 80038594: 00a77733 and a4,a4,a0 + 80038598: 00c7171b slliw a4,a4,0xc + 8003859c: 03479513 slli a0,a5,0x34 + 800385a0: 0003f7b7 lui a5,0x3f + 800385a4: 00f777b3 and a5,a4,a5 + 800385a8: 03455513 srli a0,a0,0x34 + 800385ac: 00194717 auipc a4,0x194 + 800385b0: 12474703 lbu a4,292(a4) # 801cc6d0 + 800385b4: 00a7e533 or a0,a5,a0 + 800385b8: 02051513 slli a0,a0,0x20 + 800385bc: 0127179b slliw a5,a4,0x12 + 800385c0: 000c0737 lui a4,0xc0 + 800385c4: 00e7f7b3 and a5,a5,a4 + 800385c8: 02055513 srli a0,a0,0x20 + 800385cc: 00f50533 add a0,a0,a5 + 800385d0: 00194797 auipc a5,0x194 + 800385d4: 1207b783 ld a5,288(a5) # 801cc6f0 + 800385d8: 00a78533 add a0,a5,a0 + 800385dc: 00008067 ret + 800385e0: 00a5571b srliw a4,a0,0xa + 800385e4: 00371693 slli a3,a4,0x3 + 800385e8: 0008a717 auipc a4,0x8a + 800385ec: 75870713 addi a4,a4,1880 # 800c2d40 + 800385f0: 00d70733 add a4,a4,a3 + 800385f4: 00073703 ld a4,0(a4) + 800385f8: 02051513 slli a0,a0,0x20 + 800385fc: 02055513 srli a0,a0,0x20 + 80038600: 00a70533 add a0,a4,a0 + 80038604: 00008067 ret + +0000000080038608 <_Z18FCEUPPU_LineUpdatev>: + 80038608: 00194797 auipc a5,0x194 + 8003860c: 18c7a783 lw a5,396(a5) # 801cc794 + 80038610: 00079a63 bnez a5,80038624 <_Z18FCEUPPU_LineUpdatev+0x1c> + 80038614: 00194797 auipc a5,0x194 + 80038618: 1247b783 ld a5,292(a5) # 801cc738 <_ZL5Pline> + 8003861c: 00078463 beqz a5,80038624 <_Z18FCEUPPU_LineUpdatev+0x1c> + 80038620: b55fc06f j 80035174 <_Z18FCEUPPU_LineUpdatev.part.0> + 80038624: 00008067 ret + +0000000080038628 <_Z29FCEUI_DisableSpriteLimitationi>: + 80038628: 04000793 li a5,64 + 8003862c: 00051463 bnez a0,80038634 <_Z29FCEUI_DisableSpriteLimitationi+0xc> + 80038630: 00800793 li a5,8 + 80038634: 00015717 auipc a4,0x15 + 80038638: b4f72223 sw a5,-1212(a4) # 8004d178 <_ZL10maxsprites> + 8003863c: 00008067 ret + +0000000080038640 <_Z22FCEUPPU_SetVideoSystemi>: + 80038640: 02050c63 beqz a0,80038678 <_Z22FCEUPPU_SetVideoSystemi+0x38> + 80038644: 00193797 auipc a5,0x193 + 80038648: 5d47a783 lw a5,1492(a5) # 801cbc18 + 8003864c: 10600713 li a4,262 + 80038650: 04078863 beqz a5,800386a0 <_Z22FCEUPPU_SetVideoSystemi+0x60> + 80038654: 00190797 auipc a5,0x190 + 80038658: 68c78793 addi a5,a5,1676 # 801c8ce0 + 8003865c: 0307a603 lw a2,48(a5) + 80038660: 0387a683 lw a3,56(a5) + 80038664: 00194597 auipc a1,0x194 + 80038668: 0ce5a423 sw a4,200(a1) # 801cc72c <_ZL19scanlines_per_frame> + 8003866c: 02c7a223 sw a2,36(a5) + 80038670: 02d7a423 sw a3,40(a5) + 80038674: 00008067 ret + 80038678: 00190797 auipc a5,0x190 + 8003867c: 66878793 addi a5,a5,1640 # 801c8ce0 + 80038680: 02c7a683 lw a3,44(a5) + 80038684: 0347a703 lw a4,52(a5) + 80038688: 10600613 li a2,262 + 8003868c: 00194597 auipc a1,0x194 + 80038690: 0ac5a023 sw a2,160(a1) # 801cc72c <_ZL19scanlines_per_frame> + 80038694: 02d7a223 sw a3,36(a5) + 80038698: 02e7a423 sw a4,40(a5) + 8003869c: 00008067 ret + 800386a0: 00190797 auipc a5,0x190 + 800386a4: 64078793 addi a5,a5,1600 # 801c8ce0 + 800386a8: 0307a603 lw a2,48(a5) + 800386ac: 0387a683 lw a3,56(a5) + 800386b0: 13800713 li a4,312 + 800386b4: 00194597 auipc a1,0x194 + 800386b8: 06e5ac23 sw a4,120(a1) # 801cc72c <_ZL19scanlines_per_frame> + 800386bc: 02c7a223 sw a2,36(a5) + 800386c0: 02d7a423 sw a3,40(a5) + 800386c4: 00008067 ret + +00000000800386c8 <_Z12FCEUPPU_Initv>: + 800386c8: 00192517 auipc a0,0x192 + 800386cc: 18850513 addi a0,a0,392 # 801ca850 <_ZL7ppulut1> + 800386d0: 00192597 auipc a1,0x192 + 800386d4: 58058593 addi a1,a1,1408 # 801cac50 <_ZL7ppulut2> + 800386d8: 00000613 li a2,0 + 800386dc: 00700313 li t1,7 + 800386e0: 00800893 li a7,8 + 800386e4: 10000813 li a6,256 + 800386e8: 00000713 li a4,0 + 800386ec: 00000693 li a3,0 + 800386f0: 40d307bb subw a5,t1,a3 + 800386f4: 40f657bb sraw a5,a2,a5 + 800386f8: 00269e1b slliw t3,a3,0x2 + 800386fc: 0017f793 andi a5,a5,1 + 80038700: 01c797bb sllw a5,a5,t3 + 80038704: 00f76733 or a4,a4,a5 + 80038708: 0016869b addiw a3,a3,1 + 8003870c: 0007071b sext.w a4,a4 + 80038710: ff1690e3 bne a3,a7,800386f0 <_Z12FCEUPPU_Initv+0x28> + 80038714: 0017179b slliw a5,a4,0x1 + 80038718: 00e52023 sw a4,0(a0) + 8003871c: 00f5a023 sw a5,0(a1) + 80038720: 0016061b addiw a2,a2,1 + 80038724: 00450513 addi a0,a0,4 + 80038728: 00458593 addi a1,a1,4 + 8003872c: fb061ee3 bne a2,a6,800386e8 <_Z12FCEUPPU_Initv+0x20> + 80038730: 00000713 li a4,0 + 80038734: 00193f17 auipc t5,0x193 + 80038738: 91cf0f13 addi t5,t5,-1764 # 801cb050 <_ZL7ppulut3> + 8003873c: 02200e93 li t4,34 + 80038740: 00800e13 li t3,8 + 80038744: 01000313 li t1,16 + 80038748: 0037181b slliw a6,a4,0x3 + 8003874c: 00000693 li a3,0 + 80038750: 00d86633 or a2,a6,a3 + 80038754: 0006889b sext.w a7,a3 + 80038758: 00200513 li a0,2 + 8003875c: 00000593 li a1,0 + 80038760: 4038d79b sraiw a5,a7,0x3 + 80038764: 0017979b slliw a5,a5,0x1 + 80038768: 40f757bb sraw a5,a4,a5 + 8003876c: 0037f793 andi a5,a5,3 + 80038770: 00a797bb sllw a5,a5,a0 + 80038774: 00f5e5b3 or a1,a1,a5 + 80038778: 0045051b addiw a0,a0,4 + 8003877c: 0005859b sext.w a1,a1 + 80038780: 0018889b addiw a7,a7,1 + 80038784: fdd51ee3 bne a0,t4,80038760 <_Z12FCEUPPU_Initv+0x98> + 80038788: 00261613 slli a2,a2,0x2 + 8003878c: 00cf0633 add a2,t5,a2 + 80038790: 00b62023 sw a1,0(a2) + 80038794: 0016869b addiw a3,a3,1 + 80038798: fbc69ce3 bne a3,t3,80038750 <_Z12FCEUPPU_Initv+0x88> + 8003879c: 0017071b addiw a4,a4,1 + 800387a0: fa6714e3 bne a4,t1,80038748 <_Z12FCEUPPU_Initv+0x80> + 800387a4: 00008067 ret + +00000000800387a8 <_Z14PPU_ResetHooksv>: + 800387a8: ffffc797 auipc a5,0xffffc + 800387ac: 07c78793 addi a5,a5,124 # 80034824 <_Z22FFCEUX_PPURead_Defaultj> + 800387b0: 00194717 auipc a4,0x194 + 800387b4: f0f73023 sd a5,-256(a4) # 801cc6b0 + 800387b8: 00008067 ret + +00000000800387bc <_Z13FCEUPPU_Powerv>: + 800387bc: 00001637 lui a2,0x1 + 800387c0: ff010113 addi sp,sp,-16 + 800387c4: 80060613 addi a2,a2,-2048 # 800 <_entry_offset+0x800> + 800387c8: 00000593 li a1,0 + 800387cc: 00191517 auipc a0,0x191 + 800387d0: d5c50513 addi a0,a0,-676 # 801c9528 + 800387d4: 00113423 sd ra,8(sp) + 800387d8: 250030ef jal ra,8003ba28 + 800387dc: 02000613 li a2,32 + 800387e0: 00000593 li a1,0 + 800387e4: 00191517 auipc a0,0x191 + 800387e8: 54450513 addi a0,a0,1348 # 801c9d28 + 800387ec: 23c030ef jal ra,8003ba28 + 800387f0: 00300613 li a2,3 + 800387f4: 00000593 li a1,0 + 800387f8: 00194517 auipc a0,0x194 + 800387fc: f2850513 addi a0,a0,-216 # 801cc720 + 80038800: 228030ef jal ra,8003ba28 + 80038804: 10000613 li a2,256 + 80038808: 00000593 li a1,0 + 8003880c: 00192517 auipc a0,0x192 + 80038810: d3c50513 addi a0,a0,-708 # 801ca548 + 80038814: 214030ef jal ra,8003ba28 + 80038818: 00194717 auipc a4,0x194 + 8003881c: ee072423 sw zero,-280(a4) # 801cc700 + 80038820: 00194717 auipc a4,0x194 + 80038824: f00701a3 sb zero,-253(a4) # 801cc723 + 80038828: 00194717 auipc a4,0x194 + 8003882c: ec070fa3 sb zero,-289(a4) # 801cc707 + 80038830: 00194717 auipc a4,0x194 + 80038834: ec070aa3 sb zero,-299(a4) # 801cc705 + 80038838: 00194717 auipc a4,0x194 + 8003883c: ee072223 sw zero,-284(a4) # 801cc71c + 80038840: 00194717 auipc a4,0x194 + 80038844: ec072a23 sw zero,-300(a4) # 801cc714 + 80038848: 00194717 auipc a4,0x194 + 8003884c: f6070023 sb zero,-160(a4) # 801cc7a8 + 80038850: 00200713 li a4,2 + 80038854: 00100793 li a5,1 + 80038858: 00015697 auipc a3,0x15 + 8003885c: 92e6a423 sw a4,-1752(a3) # 8004d180 <_ZL7ppudead> + 80038860: 00015717 auipc a4,0x15 + 80038864: 92f70323 sb a5,-1754(a4) # 8004d186 + 80038868: 00194717 auipc a4,0x194 + 8003886c: eaf70fa3 sb a5,-321(a4) # 801cc727 <_ZL13new_ppu_reset> + 80038870: 00194717 auipc a4,0x194 + 80038874: ec072023 sw zero,-320(a4) # 801cc730 <_ZL4kook> + 80038878: 000a0797 auipc a5,0xa0 + 8003887c: 46878793 addi a5,a5,1128 # 800d8ce0 + 80038880: 00120717 auipc a4,0x120 + 80038884: 46070713 addi a4,a4,1120 # 80158ce0 + 80038888: 000b0397 auipc t2,0xb0 + 8003888c: 45838393 addi t2,t2,1112 # 800e8ce0 + 80038890: ffffd697 auipc a3,0xffffd + 80038894: 2b068693 addi a3,a3,688 # 80035b40 <_ZL5A200xj> + 80038898: ffffd297 auipc t0,0xffffd + 8003889c: 1d028293 addi t0,t0,464 # 80035a68 <_ZL5B2000jh> + 800388a0: ffffdf97 auipc t6,0xffffd + 800388a4: 138f8f93 addi t6,t6,312 # 800359d8 <_ZL5B2001jh> + 800388a8: ffffdf17 auipc t5,0xffffd + 800388ac: 0ccf0f13 addi t5,t5,204 # 80035974 <_ZL5A2002j> + 800388b0: ffffce97 auipc t4,0xffffc + 800388b4: ed8e8e93 addi t4,t4,-296 # 80034788 <_ZL5B2002jh> + 800388b8: ffffce17 auipc t3,0xffffc + 800388bc: edce0e13 addi t3,t3,-292 # 80034794 <_ZL5B2003jh> + 800388c0: ffffd317 auipc t1,0xffffd + 800388c4: 35830313 addi t1,t1,856 # 80035c18 <_ZL5A2004j> + 800388c8: ffffc897 auipc a7,0xffffc + 800388cc: 08c88893 addi a7,a7,140 # 80034954 <_ZL5B2004jh> + 800388d0: ffffd817 auipc a6,0xffffd + 800388d4: fb080813 addi a6,a6,-80 # 80035880 <_ZL5B2005jh> + 800388d8: ffffd517 auipc a0,0xffffd + 800388dc: e2c50513 addi a0,a0,-468 # 80035704 <_ZL5B2006jh> + 800388e0: ffffd597 auipc a1,0xffffd + 800388e4: 8f058593 addi a1,a1,-1808 # 800351d0 <_ZL5A2007j> + 800388e8: fffff617 auipc a2,0xfffff + 800388ec: 68460613 addi a2,a2,1668 # 80037f6c <_ZL5B2007jh> + 800388f0: 00d7b023 sd a3,0(a5) + 800388f4: 00573023 sd t0,0(a4) + 800388f8: 00d7b423 sd a3,8(a5) + 800388fc: 01f73423 sd t6,8(a4) + 80038900: 01e7b823 sd t5,16(a5) + 80038904: 01d73823 sd t4,16(a4) + 80038908: 00d7bc23 sd a3,24(a5) + 8003890c: 01c73c23 sd t3,24(a4) + 80038910: 0267b023 sd t1,32(a5) + 80038914: 03173023 sd a7,32(a4) + 80038918: 02d7b423 sd a3,40(a5) + 8003891c: 03073423 sd a6,40(a4) + 80038920: 02d7b823 sd a3,48(a5) + 80038924: 02a73823 sd a0,48(a4) + 80038928: 02b7bc23 sd a1,56(a5) + 8003892c: 02c73c23 sd a2,56(a4) + 80038930: 04078793 addi a5,a5,64 + 80038934: 04070713 addi a4,a4,64 + 80038938: fa779ce3 bne a5,t2,800388f0 <_Z13FCEUPPU_Powerv+0x134> + 8003893c: 00813083 ld ra,8(sp) + 80038940: ffffc797 auipc a5,0xffffc + 80038944: e7478793 addi a5,a5,-396 # 800347b4 <_ZL5B4014jh> + 80038948: 00130717 auipc a4,0x130 + 8003894c: 42f73c23 sd a5,1080(a4) # 80168d80 + 80038950: 01010113 addi sp,sp,16 + 80038954: 00008067 ret + +0000000080038958 <_Z6runppui>: + 80038958: fe010113 addi sp,sp,-32 + 8003895c: 00913423 sd s1,8(sp) + 80038960: 00193497 auipc s1,0x193 + 80038964: 0e048493 addi s1,s1,224 # 801cba40 + 80038968: 0384a783 lw a5,56(s1) + 8003896c: 03c4a583 lw a1,60(s1) + 80038970: 00813823 sd s0,16(sp) + 80038974: 00050413 mv s0,a0 + 80038978: 00a7853b addw a0,a5,a0 + 8003897c: 00113c23 sd ra,24(sp) + 80038980: 524010ef jal ra,80039ea4 <__moddi3> + 80038984: 02a4ac23 sw a0,56(s1) + 80038988: 00194797 auipc a5,0x194 + 8003898c: d9f7c783 lbu a5,-609(a5) # 801cc727 <_ZL13new_ppu_reset> + 80038990: 00078c63 beqz a5,800389a8 <_Z6runppui+0x50> + 80038994: 01813083 ld ra,24(sp) + 80038998: 01013403 ld s0,16(sp) + 8003899c: 00813483 ld s1,8(sp) + 800389a0: 02010113 addi sp,sp,32 + 800389a4: 00008067 ret + 800389a8: 00040513 mv a0,s0 + 800389ac: 01013403 ld s0,16(sp) + 800389b0: 01813083 ld ra,24(sp) + 800389b4: 00813483 ld s1,8(sp) + 800389b8: 02010113 addi sp,sp,32 + 800389bc: ca4c806f j 80000e60 <_Z14X6502_RunDebugi> + +00000000800389c0 <_Z14FCEUX_PPU_Loopi>: + 800389c0: ef010113 addi sp,sp,-272 + 800389c4: 0f413023 sd s4,224(sp) + 800389c8: 10113423 sd ra,264(sp) + 800389cc: 10813023 sd s0,256(sp) + 800389d0: 0e913c23 sd s1,248(sp) + 800389d4: 0f213823 sd s2,240(sp) + 800389d8: 0f313423 sd s3,232(sp) + 800389dc: 0d513c23 sd s5,216(sp) + 800389e0: 0d613823 sd s6,208(sp) + 800389e4: 0d713423 sd s7,200(sp) + 800389e8: 0d813023 sd s8,192(sp) + 800389ec: 0b913c23 sd s9,184(sp) + 800389f0: 0ba13823 sd s10,176(sp) + 800389f4: 0bb13423 sd s11,168(sp) + 800389f8: 00194797 auipc a5,0x194 + 800389fc: d2f7c783 lbu a5,-721(a5) # 801cc727 <_ZL13new_ppu_reset> + 80038a00: 00193a17 auipc s4,0x193 + 80038a04: 040a0a13 addi s4,s4,64 # 801cba40 + 80038a08: 08078863 beqz a5,80038a98 <_Z14FCEUX_PPU_Loopi+0xd8> + 80038a0c: 00193797 auipc a5,0x193 + 80038a10: 0207ba23 sd zero,52(a5) # 801cba40 + 80038a14: 00193797 auipc a5,0x193 + 80038a18: 0207ba23 sd zero,52(a5) # 801cba48 + 80038a1c: 00193797 auipc a5,0x193 + 80038a20: 0207ba23 sd zero,52(a5) # 801cba50 + 80038a24: 00193797 auipc a5,0x193 + 80038a28: 0207ba23 sd zero,52(a5) # 801cba58 + 80038a2c: 00193797 auipc a5,0x193 + 80038a30: 0207ba23 sd zero,52(a5) # 801cba60 + 80038a34: 00193797 auipc a5,0x193 + 80038a38: 0207ba23 sd zero,52(a5) # 801cba68 + 80038a3c: 00193797 auipc a5,0x193 + 80038a40: 0207aa23 sw zero,52(a5) # 801cba70 + 80038a44: 15500793 li a5,341 + 80038a48: 02079793 slli a5,a5,0x20 + 80038a4c: 02fa3c23 sd a5,56(s4) + 80038a50: 00193797 auipc a5,0x193 + 80038a54: 0207b823 sd zero,48(a5) # 801cba80 + 80038a58: 00193797 auipc a5,0x193 + 80038a5c: 0207b823 sd zero,48(a5) # 801cba88 + 80038a60: 00193797 auipc a5,0x193 + 80038a64: 0207b823 sd zero,48(a5) # 801cba90 + 80038a68: 00193797 auipc a5,0x193 + 80038a6c: 0207b823 sd zero,48(a5) # 801cba98 + 80038a70: 00193797 auipc a5,0x193 + 80038a74: 0207b823 sd zero,48(a5) # 801cbaa0 + 80038a78: 00193797 auipc a5,0x193 + 80038a7c: 0207b823 sd zero,48(a5) # 801cbaa8 + 80038a80: 00193797 auipc a5,0x193 + 80038a84: 0207b823 sd zero,48(a5) # 801cbab0 + 80038a88: 00193797 auipc a5,0x193 + 80038a8c: 0207a823 sw zero,48(a5) # 801cbab8 + 80038a90: 00194797 auipc a5,0x194 + 80038a94: c8078ba3 sb zero,-873(a5) # 801cc727 <_ZL13new_ppu_reset> + 80038a98: 00014417 auipc s0,0x14 + 80038a9c: 6e840413 addi s0,s0,1768 # 8004d180 <_ZL7ppudead> + 80038aa0: 00042783 lw a5,0(s0) + 80038aa4: 00078463 beqz a5,80038aac <_Z14FCEUX_PPU_Loopi+0xec> + 80038aa8: 23c0106f j 80039ce4 <_Z14FCEUX_PPU_Loopi+0x1324> + 80038aac: 00194b97 auipc s7,0x194 + 80038ab0: c54b8b93 addi s7,s7,-940 # 801cc700 + 80038ab4: 002bc783 lbu a5,2(s7) + 80038ab8: 00194717 auipc a4,0x194 + 80038abc: ce072023 sw zero,-800(a4) # 801cc798 + 80038ac0: 01400413 li s0,20 + 80038ac4: f807e793 ori a5,a5,-128 + 80038ac8: 00fb8123 sb a5,2(s7) + 80038acc: 00194797 auipc a5,0x194 + 80038ad0: c2078da3 sb zero,-965(a5) # 801cc707 + 80038ad4: 00194797 auipc a5,0x194 + 80038ad8: c20787a3 sb zero,-977(a5) # 801cc703 + 80038adc: 0f100793 li a5,241 + 80038ae0: 02fa2a23 sw a5,52(s4) + 80038ae4: fff4041b addiw s0,s0,-1 + 80038ae8: 00100513 li a0,1 + 80038aec: e6dff0ef jal ra,80038958 <_Z6runppui> + 80038af0: fe041ae3 bnez s0,80038ae4 <_Z14FCEUX_PPU_Loopi+0x124> + 80038af4: 000b8783 lb a5,0(s7) + 80038af8: 0007d463 bgez a5,80038b00 <_Z14FCEUX_PPU_Loopi+0x140> + 80038afc: 23c0106f j 80039d38 <_Z14FCEUX_PPU_Loopi+0x1378> + 80038b00: 00194797 auipc a5,0x194 + 80038b04: b6078793 addi a5,a5,-1184 # 801cc660 + 80038b08: 0007c783 lbu a5,0(a5) + 80038b0c: 04600993 li s3,70 + 80038b10: 00079463 bnez a5,80038b18 <_Z14FCEUX_PPU_Loopi+0x158> + 80038b14: 1bc0106f j 80039cd0 <_Z14FCEUX_PPU_Loopi+0x1310> + 80038b18: 00000913 li s2,0 + 80038b1c: 01400413 li s0,20 + 80038b20: 15500493 li s1,341 + 80038b24: 0014041b addiw s0,s0,1 + 80038b28: 00100513 li a0,1 + 80038b2c: e2dff0ef jal ra,80038958 <_Z6runppui> + 80038b30: fe941ae3 bne s0,s1,80038b24 <_Z14FCEUX_PPU_Loopi+0x164> + 80038b34: 034a2783 lw a5,52(s4) + 80038b38: 0019091b addiw s2,s2,1 + 80038b3c: 00000413 li s0,0 + 80038b40: 0017879b addiw a5,a5,1 + 80038b44: 02fa2a23 sw a5,52(s4) + 80038b48: fd299ee3 bne s3,s2,80038b24 <_Z14FCEUX_PPU_Loopi+0x164> + 80038b4c: 00194797 auipc a5,0x194 + 80038b50: b3c78793 addi a5,a5,-1220 # 801cc688 + 80038b54: 0007a783 lw a5,0(a5) + 80038b58: 00194717 auipc a4,0x194 + 80038b5c: ba070523 sb zero,-1110(a4) # 801cc702 + 80038b60: 00f04463 bgtz a5,80038b68 <_Z14FCEUX_PPU_Loopi+0x1a8> + 80038b64: 1f40106f j 80039d58 <_Z14FCEUX_PPU_Loopi+0x1398> + 80038b68: fff00793 li a5,-1 + 80038b6c: 08f13423 sd a5,136(sp) + 80038b70: 00194797 auipc a5,0x194 + 80038b74: b6478793 addi a5,a5,-1180 # 801cc6d4 + 80038b78: 08f13c23 sd a5,152(sp) + 80038b7c: 000027b7 lui a5,0x2 + 80038b80: 3c078793 addi a5,a5,960 # 23c0 <_entry_offset+0x23c0> + 80038b84: 02f13023 sd a5,32(sp) + 80038b88: 000047b7 lui a5,0x4 + 80038b8c: f0078793 addi a5,a5,-256 # 3f00 <_entry_offset+0x3f00> + 80038b90: 04013423 sd zero,72(sp) + 80038b94: 00194a97 auipc s5,0x194 + 80038b98: b80a8a93 addi s5,s5,-1152 # 801cc714 + 80038b9c: 00194b17 auipc s6,0x194 + 80038ba0: b14b0b13 addi s6,s6,-1260 # 801cc6b0 + 80038ba4: 04f13023 sd a5,64(sp) + 80038ba8: 00193797 auipc a5,0x193 + 80038bac: fa478793 addi a5,a5,-92 # 801cbb4c + 80038bb0: 0007a703 lw a4,0(a5) + 80038bb4: 0001f797 auipc a5,0x1f + 80038bb8: c9c78793 addi a5,a5,-868 # 80057850 + 80038bbc: 0107a683 lw a3,16(a5) + 80038bc0: 0017179b slliw a5,a4,0x1 + 80038bc4: 00e787bb addw a5,a5,a4 + 80038bc8: 0047979b slliw a5,a5,0x4 + 80038bcc: 04000713 li a4,64 + 80038bd0: 00d787bb addw a5,a5,a3 + 80038bd4: 00100613 li a2,1 + 80038bd8: 00193697 auipc a3,0x193 + 80038bdc: ea868693 addi a3,a3,-344 # 801cba80 + 80038be0: 02e6aa23 sw a4,52(a3) + 80038be4: 00c6b023 sd a2,0(a3) + 80038be8: 00c6b423 sd a2,8(a3) + 80038bec: 00194697 auipc a3,0x194 + 80038bf0: ba468693 addi a3,a3,-1116 # 801cc790 + 80038bf4: 00f6a023 sw a5,0(a3) + 80038bf8: 00193717 auipc a4,0x193 + 80038bfc: ec072023 sw zero,-320(a4) # 801cbab8 + 80038c00: 00194797 auipc a5,0x194 + 80038c04: b9878793 addi a5,a5,-1128 # 801cc798 + 80038c08: 00193717 auipc a4,0x193 + 80038c0c: e8073423 sd zero,-376(a4) # 801cba90 + 80038c10: 00193717 auipc a4,0x193 + 80038c14: e8073423 sd zero,-376(a4) # 801cba98 + 80038c18: 00193717 auipc a4,0x193 + 80038c1c: e8073423 sd zero,-376(a4) # 801cbaa0 + 80038c20: 00193717 auipc a4,0x193 + 80038c24: e8073423 sd zero,-376(a4) # 801cbaa8 + 80038c28: 00194717 auipc a4,0x194 + 80038c2c: b6072223 sw zero,-1180(a4) # 801cc78c + 80038c30: 00100693 li a3,1 + 80038c34: 04813703 ld a4,72(sp) + 80038c38: 00d7a023 sw a3,0(a5) + 80038c3c: 08812783 lw a5,136(sp) + 80038c40: 02ea2a23 sw a4,52(s4) + 80038c44: 04f13823 sd a5,80(sp) + 80038c48: 00070a63 beqz a4,80038c5c <_Z14FCEUX_PPU_Loopi+0x29c> + 80038c4c: 09813783 ld a5,152(sp) + 80038c50: 0007a783 lw a5,0(a5) + 80038c54: 00078463 beqz a5,80038c5c <_Z14FCEUX_PPU_Loopi+0x29c> + 80038c58: 7f90006f j 80039c50 <_Z14FCEUX_PPU_Loopi+0x1290> + 80038c5c: 00194617 auipc a2,0x194 + 80038c60: b0860613 addi a2,a2,-1272 # 801cc764 <_ZZ14FCEUX_PPU_LoopiE7oamslot> + 80038c64: 08813703 ld a4,136(sp) + 80038c68: 00062783 lw a5,0(a2) + 80038c6c: 00194697 auipc a3,0x194 + 80038c70: b0468693 addi a3,a3,-1276 # 801cc770 <_ZZ14FCEUX_PPU_LoopiE9oamcounts> + 80038c74: 0087171b slliw a4,a4,0x8 + 80038c78: 06e13823 sd a4,112(sp) + 80038c7c: 00279713 slli a4,a5,0x2 + 80038c80: 08e13023 sd a4,128(sp) + 80038c84: 00e68733 add a4,a3,a4 + 80038c88: 0017c593 xori a1,a5,1 + 80038c8c: 00072683 lw a3,0(a4) + 80038c90: 00979713 slli a4,a5,0x9 + 80038c94: 00679793 slli a5,a5,0x6 + 80038c98: 00270713 addi a4,a4,2 + 80038c9c: 06f13c23 sd a5,120(sp) + 80038ca0: 04813903 ld s2,72(sp) + 80038ca4: 00192797 auipc a5,0x192 + 80038ca8: 7cc78793 addi a5,a5,1996 # 801cb470 <_ZZ14FCEUX_PPU_LoopiE4oams> + 80038cac: 00b62023 sw a1,0(a2) + 80038cb0: 00e787b3 add a5,a5,a4 + 80038cb4: 00194617 auipc a2,0x194 + 80038cb8: ab460613 addi a2,a2,-1356 # 801cc768 <_ZZ14FCEUX_PPU_LoopiE8oamcount> + 80038cbc: 08b13823 sd a1,144(sp) + 80038cc0: 00d62023 sw a3,0(a2) + 80038cc4: 00193c97 auipc s9,0x193 + 80038cc8: bb8c8c93 addi s9,s9,-1096 # 801cb87c + 80038ccc: 02f13423 sd a5,40(sp) + 80038cd0: 00100d13 li s10,1 + 80038cd4: 004a2783 lw a5,4(s4) + 80038cd8: 008a2683 lw a3,8(s4) + 80038cdc: 010a2603 lw a2,16(s4) + 80038ce0: 00ca2703 lw a4,12(s4) + 80038ce4: 00a6969b slliw a3,a3,0xa + 80038ce8: 00b7979b slliw a5,a5,0xb + 80038cec: 00d7e7b3 or a5,a5,a3 + 80038cf0: 0057171b slliw a4,a4,0x5 + 80038cf4: 00c7e7b3 or a5,a5,a2 + 80038cf8: 00e7e7b3 or a5,a5,a4 + 80038cfc: 00194717 auipc a4,0x194 + 80038d00: a0070713 addi a4,a4,-1536 # 801cc6fc + 80038d04: 0007879b sext.w a5,a5 + 80038d08: 00002537 lui a0,0x2 + 80038d0c: 00072703 lw a4,0(a4) + 80038d10: 00a7e533 or a0,a5,a0 + 80038d14: 00194697 auipc a3,0x194 + 80038d18: 9e468693 addi a3,a3,-1564 # 801cc6f8 + 80038d1c: 00aaa023 sw a0,0(s5) + 80038d20: 00a6a023 sw a0,0(a3) + 80038d24: 0c070ae3 beqz a4,800395f8 <_Z14FCEUX_PPU_Loopi+0xc38> + 80038d28: 0095579b srliw a5,a0,0x9 + 80038d2c: 0017f793 andi a5,a5,1 + 80038d30: 02fa2623 sw a5,44(s4) + 80038d34: 000b3703 ld a4,0(s6) + 80038d38: 00351793 slli a5,a0,0x3 + 80038d3c: 0087f793 andi a5,a5,8 + 80038d40: 00fc80a3 sb a5,1(s9) + 80038d44: 000700e7 jalr a4 + 80038d48: 00050793 mv a5,a0 + 80038d4c: 00fc8023 sb a5,0(s9) + 80038d50: 00200513 li a0,2 + 80038d54: c05ff0ef jal ra,80038958 <_Z6runppui> + 80038d58: 004a2503 lw a0,4(s4) + 80038d5c: 008a2683 lw a3,8(s4) + 80038d60: 010a2703 lw a4,16(s4) + 80038d64: 00ca2783 lw a5,12(s4) + 80038d68: 00a6969b slliw a3,a3,0xa + 80038d6c: 00b5151b slliw a0,a0,0xb + 80038d70: 0027571b srliw a4,a4,0x2 + 80038d74: 00d56533 or a0,a0,a3 + 80038d78: 00777713 andi a4,a4,7 + 80038d7c: 0017979b slliw a5,a5,0x1 + 80038d80: 00e56533 or a0,a0,a4 + 80038d84: 0387f793 andi a5,a5,56 + 80038d88: 00f56533 or a0,a0,a5 + 80038d8c: 02013783 ld a5,32(sp) + 80038d90: 00f56533 or a0,a0,a5 + 80038d94: 000b3783 ld a5,0(s6) + 80038d98: 0005051b sext.w a0,a0 + 80038d9c: 00aaa023 sw a0,0(s5) + 80038da0: 000780e7 jalr a5 + 80038da4: 00ca2783 lw a5,12(s4) + 80038da8: 0027f793 andi a5,a5,2 + 80038dac: 00078663 beqz a5,80038db8 <_Z14FCEUX_PPU_Loopi+0x3f8> + 80038db0: 4045551b sraiw a0,a0,0x4 + 80038db4: 0ff57513 andi a0,a0,255 + 80038db8: 010a2783 lw a5,16(s4) + 80038dbc: 0027f793 andi a5,a5,2 + 80038dc0: 00078663 beqz a5,80038dcc <_Z14FCEUX_PPU_Loopi+0x40c> + 80038dc4: 4025551b sraiw a0,a0,0x2 + 80038dc8: 0ff57513 andi a0,a0,255 + 80038dcc: 00251513 slli a0,a0,0x2 + 80038dd0: 00c57793 andi a5,a0,12 + 80038dd4: 00fc8123 sb a5,2(s9) + 80038dd8: 00100513 li a0,1 + 80038ddc: b7dff0ef jal ra,80038958 <_Z6runppui> + 80038de0: 001bc783 lbu a5,1(s7) + 80038de4: 0187f793 andi a5,a5,24 + 80038de8: 02078a63 beqz a5,80038e1c <_Z14FCEUX_PPU_Loopi+0x45c> + 80038dec: 010a2783 lw a5,16(s4) + 80038df0: 008a2603 lw a2,8(s4) + 80038df4: 038a2683 lw a3,56(s4) + 80038df8: 0017879b addiw a5,a5,1 + 80038dfc: 0057d71b srliw a4,a5,0x5 + 80038e00: 00c7073b addw a4,a4,a2 + 80038e04: 01f7f793 andi a5,a5,31 + 80038e08: 00177713 andi a4,a4,1 + 80038e0c: 00fa2823 sw a5,16(s4) + 80038e10: 00ea2423 sw a4,8(s4) + 80038e14: 0fb00793 li a5,251 + 80038e18: 02f68ce3 beq a3,a5,80039650 <_Z14FCEUX_PPU_Loopi+0xc90> + 80038e1c: 00100513 li a0,1 + 80038e20: b39ff0ef jal ra,80038958 <_Z6runppui> + 80038e24: 02ca2503 lw a0,44(s4) + 80038e28: 000cc783 lbu a5,0(s9) + 80038e2c: 000a2683 lw a3,0(s4) + 80038e30: 00c5151b slliw a0,a0,0xc + 80038e34: 0047971b slliw a4,a5,0x4 + 80038e38: 00d56533 or a0,a0,a3 + 80038e3c: 00e56533 or a0,a0,a4 + 80038e40: 00194717 auipc a4,0x194 + 80038e44: 8bc70713 addi a4,a4,-1860 # 801cc6fc + 80038e48: 00072703 lw a4,0(a4) + 80038e4c: 0005051b sext.w a0,a0 + 80038e50: 02fa2823 sw a5,48(s4) + 80038e54: 00aaa023 sw a0,0(s5) + 80038e58: 74070c63 beqz a4,800395b0 <_Z14FCEUX_PPU_Loopi+0xbf0> + 80038e5c: 001cc703 lbu a4,1(s9) + 80038e60: 000b3783 ld a5,0(s6) + 80038e64: 00e56533 or a0,a0,a4 + 80038e68: 000780e7 jalr a5 + 80038e6c: 00050793 mv a5,a0 + 80038e70: 00fc81a3 sb a5,3(s9) + 80038e74: 00200513 li a0,2 + 80038e78: ae1ff0ef jal ra,80038958 <_Z6runppui> + 80038e7c: 001cc503 lbu a0,1(s9) + 80038e80: 000aa703 lw a4,0(s5) + 80038e84: 000b3783 ld a5,0(s6) + 80038e88: 00e56533 or a0,a0,a4 + 80038e8c: 0005051b sext.w a0,a0 + 80038e90: 000780e7 jalr a5 + 80038e94: 00050793 mv a5,a0 + 80038e98: 00fc8223 sb a5,4(s9) + 80038e9c: 00200513 li a0,2 + 80038ea0: ab9ff0ef jal ra,80038958 <_Z6runppui> + 80038ea4: 00014797 auipc a5,0x14 + 80038ea8: 2e178793 addi a5,a5,737 # 8004d185 + 80038eac: 0007ce03 lbu t3,0(a5) + 80038eb0: 0ff00793 li a5,255 + 80038eb4: 5cfe0e63 beq t3,a5,80039490 <_Z14FCEUX_PPU_Loopi+0xad0> + 80038eb8: 00090663 beqz s2,80038ec4 <_Z14FCEUX_PPU_Loopi+0x504> + 80038ebc: 0f000793 li a5,240 + 80038ec0: 7f27dc63 bge a5,s2,800396b8 <_Z14FCEUX_PPU_Loopi+0xcf8> + 80038ec4: 001d0d13 addi s10,s10,1 + 80038ec8: 02100793 li a5,33 + 80038ecc: 006c8c93 addi s9,s9,6 + 80038ed0: e0fd12e3 bne s10,a5,80038cd4 <_Z14FCEUX_PPU_Loopi+0x314> + 80038ed4: 09013703 ld a4,144(sp) + 80038ed8: 000bc783 lbu a5,0(s7) + 80038edc: 01000413 li s0,16 + 80038ee0: 00271093 slli ra,a4,0x2 + 80038ee4: 00194717 auipc a4,0x194 + 80038ee8: 88c70713 addi a4,a4,-1908 # 801cc770 <_ZZ14FCEUX_PPU_LoopiE9oamcounts> + 80038eec: 00170733 add a4,a4,ra + 80038ef0: 00072023 sw zero,0(a4) + 80038ef4: 0207f793 andi a5,a5,32 + 80038ef8: 00194717 auipc a4,0x194 + 80038efc: 86072823 sw zero,-1936(a4) # 801cc768 <_ZZ14FCEUX_PPU_LoopiE8oamcount> + 80038f00: 00079463 bnez a5,80038f08 <_Z14FCEUX_PPU_Loopi+0x548> + 80038f04: 00800413 li s0,8 + 80038f08: 00014797 auipc a5,0x14 + 80038f0c: 27078793 addi a5,a5,624 # 8004d178 <_ZL10maxsprites> + 80038f10: 001bce83 lbu t4,1(s7) + 80038f14: 0007af83 lw t6,0(a5) + 80038f18: 09013783 ld a5,144(sp) + 80038f1c: 002bcf03 lbu t5,2(s7) + 80038f20: 05013483 ld s1,80(sp) + 80038f24: 018efe93 andi t4,t4,24 + 80038f28: 00191717 auipc a4,0x191 + 80038f2c: 62070713 addi a4,a4,1568 # 801ca548 + 80038f30: 00000593 li a1,0 + 80038f34: 04000693 li a3,64 + 80038f38: 00000293 li t0,0 + 80038f3c: 00000893 li a7,0 + 80038f40: 00679513 slli a0,a5,0x6 + 80038f44: 00700313 li t1,7 + 80038f48: 00100e13 li t3,1 + 80038f4c: 04000813 li a6,64 + 80038f50: 00800393 li t2,8 + 80038f54: 00074603 lbu a2,0(a4) + 80038f58: 00b507b3 add a5,a0,a1 + 80038f5c: 00379793 slli a5,a5,0x3 + 80038f60: 00192997 auipc s3,0x192 + 80038f64: 51098993 addi s3,s3,1296 # 801cb470 <_ZZ14FCEUX_PPU_LoopiE4oams> + 80038f68: 00f987b3 add a5,s3,a5 + 80038f6c: 000783a3 sb zero,7(a5) + 80038f70: 0006079b sext.w a5,a2 + 80038f74: 00878933 add s2,a5,s0 + 80038f78: 04c4cc63 blt s1,a2,80038fd0 <_Z14FCEUX_PPU_Loopi+0x610> + 80038f7c: 00b507b3 add a5,a0,a1 + 80038f80: 00379793 slli a5,a5,0x3 + 80038f84: 00f987b3 add a5,s3,a5 + 80038f88: 40d809bb subw s3,a6,a3 + 80038f8c: 0524d263 bge s1,s2,80038fd0 <_Z14FCEUX_PPU_Loopi+0x610> + 80038f90: 00b35a63 bge t1,a1,80038fa4 <_Z14FCEUX_PPU_Loopi+0x5e4> + 80038f94: 000e8863 beqz t4,80038fa4 <_Z14FCEUX_PPU_Loopi+0x5e4> + 80038f98: 020f6f13 ori t5,t5,32 + 80038f9c: 467f84e3 beq t6,t2,80039c04 <_Z14FCEUX_PPU_Loopi+0x1244> + 80038fa0: 00100293 li t0,1 + 80038fa4: 00374883 lbu a7,3(a4) + 80038fa8: 00174c03 lbu s8,1(a4) + 80038fac: 00274903 lbu s2,2(a4) + 80038fb0: 011781a3 sb a7,3(a5) + 80038fb4: 00c78023 sb a2,0(a5) + 80038fb8: 018780a3 sb s8,1(a5) + 80038fbc: 01278123 sb s2,2(a5) + 80038fc0: 01c783a3 sb t3,7(a5) + 80038fc4: 01378323 sb s3,6(a5) + 80038fc8: 0015859b addiw a1,a1,1 + 80038fcc: 00100893 li a7,1 + 80038fd0: fff6869b addiw a3,a3,-1 + 80038fd4: 00470713 addi a4,a4,4 + 80038fd8: f6069ee3 bnez a3,80038f54 <_Z14FCEUX_PPU_Loopi+0x594> + 80038fdc: 460886e3 beqz a7,80039c48 <_Z14FCEUX_PPU_Loopi+0x1288> + 80038fe0: 00193797 auipc a5,0x193 + 80038fe4: 78878793 addi a5,a5,1928 # 801cc768 <_ZZ14FCEUX_PPU_LoopiE8oamcount> + 80038fe8: 00b7a023 sw a1,0(a5) + 80038fec: 00028463 beqz t0,80038ff4 <_Z14FCEUX_PPU_Loopi+0x634> + 80038ff0: 01eb8123 sb t5,2(s7) + 80038ff4: 00193797 auipc a5,0x193 + 80038ff8: 77c78793 addi a5,a5,1916 # 801cc770 <_ZZ14FCEUX_PPU_LoopiE9oamcounts> + 80038ffc: 001780b3 add ra,a5,ra + 80039000: 00193717 auipc a4,0x193 + 80039004: 79870713 addi a4,a4,1944 # 801cc798 + 80039008: 00200793 li a5,2 + 8003900c: 00b0a023 sw a1,0(ra) + 80039010: 00f72023 sw a5,0(a4) + 80039014: 17f05263 blez t6,80039178 <_Z14FCEUX_PPU_Loopi+0x7b8> + 80039018: 09013783 ld a5,144(sp) + 8003901c: 00192717 auipc a4,0x192 + 80039020: 45470713 addi a4,a4,1108 # 801cb470 <_ZZ14FCEUX_PPU_LoopiE4oams> + 80039024: 00000d13 li s10,0 + 80039028: 00979793 slli a5,a5,0x9 + 8003902c: 00f70cb3 add s9,a4,a5 + 80039030: fff4079b addiw a5,s0,-1 + 80039034: 00f12423 sw a5,8(sp) + 80039038: 00700493 li s1,7 + 8003903c: 000019b7 lui s3,0x1 + 80039040: 00200c13 li s8,2 + 80039044: 00193917 auipc s2,0x193 + 80039048: 8fc90913 addi s2,s2,-1796 # 801cb940 + 8003904c: 12bd0463 beq s10,a1,80039174 <_Z14FCEUX_PPU_Loopi+0x7b4> + 80039050: 000cc783 lbu a5,0(s9) + 80039054: 05013683 ld a3,80(sp) + 80039058: 002c8703 lb a4,2(s9) + 8003905c: 40f685bb subw a1,a3,a5 + 80039060: 00075663 bgez a4,8003906c <_Z14FCEUX_PPU_Loopi+0x6ac> + 80039064: 00812703 lw a4,8(sp) + 80039068: 40b705bb subw a1,a4,a1 + 8003906c: 007cc783 lbu a5,7(s9) + 80039070: 001cc703 lbu a4,1(s9) + 80039074: 62078a63 beqz a5,800396a8 <_Z14FCEUX_PPU_Loopi+0xce8> + 80039078: 0007071b sext.w a4,a4 + 8003907c: 0075f513 andi a0,a1,7 + 80039080: 000bc683 lbu a3,0(s7) + 80039084: 0206f793 andi a5,a3,32 + 80039088: 60078463 beqz a5,80039690 <_Z14FCEUX_PPU_Loopi+0xcd0> + 8003908c: 0fe77793 andi a5,a4,254 + 80039090: 0035d59b srliw a1,a1,0x3 + 80039094: 00b7e5b3 or a1,a5,a1 + 80039098: 00c7179b slliw a5,a4,0xc + 8003909c: 0045959b slliw a1,a1,0x4 + 800390a0: 0137f7b3 and a5,a5,s3 + 800390a4: 00b7e7b3 or a5,a5,a1 + 800390a8: 0007879b sext.w a5,a5 + 800390ac: 001bc703 lbu a4,1(s7) + 800390b0: 00a78dbb addw s11,a5,a0 + 800390b4: 000d8413 mv s0,s11 + 800390b8: 01877713 andi a4,a4,24 + 800390bc: 00200513 li a0,2 + 800390c0: 00070c63 beqz a4,800390d8 <_Z14FCEUX_PPU_Loopi+0x718> + 800390c4: 04813783 ld a5,72(sp) + 800390c8: 1c079ce3 bnez a5,80039aa0 <_Z14FCEUX_PPU_Loopi+0x10e0> + 800390cc: 038a2583 lw a1,56(s4) + 800390d0: 13000713 li a4,304 + 800390d4: 46e58663 beq a1,a4,80039540 <_Z14FCEUX_PPU_Loopi+0xb80> + 800390d8: 4ba4da63 bge s1,s10,8003958c <_Z14FCEUX_PPU_Loopi+0xbcc> + 800390dc: 000bc703 lbu a4,0(s7) + 800390e0: 01800593 li a1,24 + 800390e4: 03877713 andi a4,a4,56 + 800390e8: 4ab70c63 beq a4,a1,800395a0 <_Z14FCEUX_PPU_Loopi+0xbe0> + 800390ec: 3d8d0263 beq s10,s8,800394b0 <_Z14FCEUX_PPU_Loopi+0xaf0> + 800390f0: 41a4d063 bge s1,s10,800394f0 <_Z14FCEUX_PPU_Loopi+0xb30> + 800390f4: 000b3703 ld a4,0(s6) + 800390f8: 008aa023 sw s0,0(s5) + 800390fc: 000d8513 mv a0,s11 + 80039100: 000700e7 jalr a4 + 80039104: 000aa783 lw a5,0(s5) + 80039108: 000b3703 ld a4,0(s6) + 8003910c: 00ac8223 sb a0,4(s9) + 80039110: 0087851b addiw a0,a5,8 + 80039114: 00aaa023 sw a0,0(s5) + 80039118: 000700e7 jalr a4 + 8003911c: 00ac82a3 sb a0,5(s9) + 80039120: 002cc783 lbu a5,2(s9) + 80039124: 0407f793 andi a5,a5,64 + 80039128: 02079263 bnez a5,8003914c <_Z14FCEUX_PPU_Loopi+0x78c> + 8003912c: 004cc703 lbu a4,4(s9) + 80039130: 005cc783 lbu a5,5(s9) + 80039134: 00e90733 add a4,s2,a4 + 80039138: 00f907b3 add a5,s2,a5 + 8003913c: 00074703 lbu a4,0(a4) + 80039140: 0007c783 lbu a5,0(a5) + 80039144: 00ec8223 sb a4,4(s9) + 80039148: 00fc82a3 sb a5,5(s9) + 8003914c: 00014797 auipc a5,0x14 + 80039150: 02c78793 addi a5,a5,44 # 8004d178 <_ZL10maxsprites> + 80039154: 0007a783 lw a5,0(a5) + 80039158: 001d0d1b addiw s10,s10,1 + 8003915c: 008c8c93 addi s9,s9,8 + 80039160: 00fd5c63 bge s10,a5,80039178 <_Z14FCEUX_PPU_Loopi+0x7b8> + 80039164: 00193797 auipc a5,0x193 + 80039168: 60478793 addi a5,a5,1540 # 801cc768 <_ZZ14FCEUX_PPU_LoopiE8oamcount> + 8003916c: 0007a583 lw a1,0(a5) + 80039170: eebd10e3 bne s10,a1,80039050 <_Z14FCEUX_PPU_Loopi+0x690> + 80039174: eda4dee3 bge s1,s10,80039050 <_Z14FCEUX_PPU_Loopi+0x690> + 80039178: 00100793 li a5,1 + 8003917c: 00193717 auipc a4,0x193 + 80039180: 61c70713 addi a4,a4,1564 # 801cc798 + 80039184: 00f72023 sw a5,0(a4) + 80039188: 00192417 auipc s0,0x192 + 8003918c: 6e840413 addi s0,s0,1768 # 801cb870 + 80039190: 00002937 lui s2,0x2 + 80039194: 00193497 auipc s1,0x193 + 80039198: 57c48493 addi s1,s1,1404 # 801cc710 + 8003919c: 00191d97 auipc s11,0x191 + 800391a0: bacd8d93 addi s11,s11,-1108 # 801c9d48 + 800391a4: 00193d17 auipc s10,0x193 + 800391a8: 5f8d0d13 addi s10,s10,1528 # 801cc79c + 800391ac: 0fb00993 li s3,251 + 800391b0: 01e00c93 li s9,30 + 800391b4: 00089c17 auipc s8,0x89 + 800391b8: 44cc0c13 addi s8,s8,1100 # 800c2600 + 800391bc: 004a2783 lw a5,4(s4) + 800391c0: 008a2683 lw a3,8(s4) + 800391c4: 010a2603 lw a2,16(s4) + 800391c8: 00ca2703 lw a4,12(s4) + 800391cc: 00a6969b slliw a3,a3,0xa + 800391d0: 00b7979b slliw a5,a5,0xb + 800391d4: 00d7e7b3 or a5,a5,a3 + 800391d8: 0057171b slliw a4,a4,0x5 + 800391dc: 00c7e7b3 or a5,a5,a2 + 800391e0: 00e7e7b3 or a5,a5,a4 + 800391e4: 0007879b sext.w a5,a5 + 800391e8: 00193717 auipc a4,0x193 + 800391ec: 51470713 addi a4,a4,1300 # 801cc6fc + 800391f0: 0127e533 or a0,a5,s2 + 800391f4: 00072703 lw a4,0(a4) + 800391f8: 0005051b sext.w a0,a0 + 800391fc: 00193697 auipc a3,0x193 + 80039200: 4fc68693 addi a3,a3,1276 # 801cc6f8 + 80039204: 00aaa023 sw a0,0(s5) + 80039208: 00a6a023 sw a0,0(a3) + 8003920c: 140708e3 beqz a4,80039b5c <_Z14FCEUX_PPU_Loopi+0x119c> + 80039210: 0095579b srliw a5,a0,0x9 + 80039214: 0017f793 andi a5,a5,1 + 80039218: 02fa2623 sw a5,44(s4) + 8003921c: 000b3703 ld a4,0(s6) + 80039220: 00351793 slli a5,a0,0x3 + 80039224: 0087f793 andi a5,a5,8 + 80039228: 00f400a3 sb a5,1(s0) + 8003922c: 000700e7 jalr a4 + 80039230: 00050793 mv a5,a0 + 80039234: 00f40023 sb a5,0(s0) + 80039238: 00200513 li a0,2 + 8003923c: f1cff0ef jal ra,80038958 <_Z6runppui> + 80039240: 004a2503 lw a0,4(s4) + 80039244: 008a2683 lw a3,8(s4) + 80039248: 010a2703 lw a4,16(s4) + 8003924c: 00ca2783 lw a5,12(s4) + 80039250: 00a6969b slliw a3,a3,0xa + 80039254: 00b5151b slliw a0,a0,0xb + 80039258: 0027571b srliw a4,a4,0x2 + 8003925c: 00d56533 or a0,a0,a3 + 80039260: 00777713 andi a4,a4,7 + 80039264: 0017979b slliw a5,a5,0x1 + 80039268: 00e56533 or a0,a0,a4 + 8003926c: 0387f793 andi a5,a5,56 + 80039270: 00f56533 or a0,a0,a5 + 80039274: 02013783 ld a5,32(sp) + 80039278: 00f56533 or a0,a0,a5 + 8003927c: 000b3783 ld a5,0(s6) + 80039280: 0005051b sext.w a0,a0 + 80039284: 00aaa023 sw a0,0(s5) + 80039288: 000780e7 jalr a5 + 8003928c: 00ca2783 lw a5,12(s4) + 80039290: 0027f793 andi a5,a5,2 + 80039294: 00078663 beqz a5,800392a0 <_Z14FCEUX_PPU_Loopi+0x8e0> + 80039298: 4045551b sraiw a0,a0,0x4 + 8003929c: 0ff57513 andi a0,a0,255 + 800392a0: 010a2783 lw a5,16(s4) + 800392a4: 0027f793 andi a5,a5,2 + 800392a8: 00078663 beqz a5,800392b4 <_Z14FCEUX_PPU_Loopi+0x8f4> + 800392ac: 4025551b sraiw a0,a0,0x2 + 800392b0: 0ff57513 andi a0,a0,255 + 800392b4: 00251793 slli a5,a0,0x2 + 800392b8: 00c7f793 andi a5,a5,12 + 800392bc: 00f40123 sb a5,2(s0) + 800392c0: 00100513 li a0,1 + 800392c4: e94ff0ef jal ra,80038958 <_Z6runppui> + 800392c8: 001bc783 lbu a5,1(s7) + 800392cc: 0187f793 andi a5,a5,24 + 800392d0: 02078863 beqz a5,80039300 <_Z14FCEUX_PPU_Loopi+0x940> + 800392d4: 010a2783 lw a5,16(s4) + 800392d8: 008a2603 lw a2,8(s4) + 800392dc: 038a2683 lw a3,56(s4) + 800392e0: 0017879b addiw a5,a5,1 + 800392e4: 0057d71b srliw a4,a5,0x5 + 800392e8: 00c7073b addw a4,a4,a2 + 800392ec: 01f7f793 andi a5,a5,31 + 800392f0: 00177713 andi a4,a4,1 + 800392f4: 00fa2823 sw a5,16(s4) + 800392f8: 00ea2423 sw a4,8(s4) + 800392fc: 0d3686e3 beq a3,s3,80039bc8 <_Z14FCEUX_PPU_Loopi+0x1208> + 80039300: 00100513 li a0,1 + 80039304: e54ff0ef jal ra,80038958 <_Z6runppui> + 80039308: 02ca2503 lw a0,44(s4) + 8003930c: 00044783 lbu a5,0(s0) + 80039310: 000a2683 lw a3,0(s4) + 80039314: 00c5151b slliw a0,a0,0xc + 80039318: 0047971b slliw a4,a5,0x4 + 8003931c: 00d56533 or a0,a0,a3 + 80039320: 00e56533 or a0,a0,a4 + 80039324: 00193717 auipc a4,0x193 + 80039328: 3d870713 addi a4,a4,984 # 801cc6fc + 8003932c: 00072703 lw a4,0(a4) + 80039330: 0005051b sext.w a0,a0 + 80039334: 02fa2823 sw a5,48(s4) + 80039338: 00aaa023 sw a0,0(s5) + 8003933c: 7e070063 beqz a4,80039b1c <_Z14FCEUX_PPU_Loopi+0x115c> + 80039340: 00144703 lbu a4,1(s0) + 80039344: 000b3783 ld a5,0(s6) + 80039348: 00e56533 or a0,a0,a4 + 8003934c: 000780e7 jalr a5 + 80039350: 00050793 mv a5,a0 + 80039354: 00f401a3 sb a5,3(s0) + 80039358: 00200513 li a0,2 + 8003935c: dfcff0ef jal ra,80038958 <_Z6runppui> + 80039360: 00144503 lbu a0,1(s0) + 80039364: 000aa703 lw a4,0(s5) + 80039368: 000b3783 ld a5,0(s6) + 8003936c: 00e56533 or a0,a0,a4 + 80039370: 0005051b sext.w a0,a0 + 80039374: 000780e7 jalr a5 + 80039378: 00050793 mv a5,a0 + 8003937c: 00f40223 sb a5,4(s0) + 80039380: 00200513 li a0,2 + 80039384: dd4ff0ef jal ra,80038958 <_Z6runppui> + 80039388: 00640413 addi s0,s0,6 + 8003938c: 00192797 auipc a5,0x192 + 80039390: 4f078793 addi a5,a5,1264 # 801cb87c + 80039394: e28794e3 bne a5,s0,800391bc <_Z14FCEUX_PPU_Loopi+0x7fc> + 80039398: 00200513 li a0,2 + 8003939c: dbcff0ef jal ra,80038958 <_Z6runppui> + 800393a0: 04813783 ld a5,72(sp) + 800393a4: 7e079e63 bnez a5,80039ba0 <_Z14FCEUX_PPU_Loopi+0x11e0> + 800393a8: 00014697 auipc a3,0x14 + 800393ac: dde68693 addi a3,a3,-546 # 8004d186 + 800393b0: 0006c783 lbu a5,0(a3) + 800393b4: 02078063 beqz a5,800393d4 <_Z14FCEUX_PPU_Loopi+0xa14> + 800393b8: 001bc703 lbu a4,1(s7) + 800393bc: 01877713 andi a4,a4,24 + 800393c0: 00070a63 beqz a4,800393d4 <_Z14FCEUX_PPU_Loopi+0xa14> + 800393c4: 00193717 auipc a4,0x193 + 800393c8: 29c70713 addi a4,a4,668 # 801cc660 + 800393cc: 00074703 lbu a4,0(a4) + 800393d0: 0e070ae3 beqz a4,80039cc4 <_Z14FCEUX_PPU_Loopi+0x1304> + 800393d4: 15500713 li a4,341 + 800393d8: 02ea2e23 sw a4,60(s4) + 800393dc: 0017c793 xori a5,a5,1 + 800393e0: 00200513 li a0,2 + 800393e4: 00f68023 sb a5,0(a3) + 800393e8: d70ff0ef jal ra,80038958 <_Z6runppui> + 800393ec: 03ca2703 lw a4,60(s4) + 800393f0: 15500793 li a5,341 + 800393f4: 7cf70463 beq a4,a5,80039bbc <_Z14FCEUX_PPU_Loopi+0x11fc> + 800393f8: 04813703 ld a4,72(sp) + 800393fc: 08813683 ld a3,136(sp) + 80039400: 00193797 auipc a5,0x193 + 80039404: 28878793 addi a5,a5,648 # 801cc688 + 80039408: 0007a783 lw a5,0(a5) + 8003940c: 0017071b addiw a4,a4,1 + 80039410: 0016869b addiw a3,a3,1 + 80039414: 04e13423 sd a4,72(sp) + 80039418: 08d13423 sd a3,136(sp) + 8003941c: f8f74663 blt a4,a5,80038ba8 <_Z14FCEUX_PPU_Loopi+0x1e8> + 80039420: 09813783 ld a5,152(sp) + 80039424: 00192717 auipc a4,0x192 + 80039428: 72070aa3 sb zero,1845(a4) # 801cbb59 + 8003942c: 0007a783 lw a5,0(a5) + 80039430: 0a0794e3 bnez a5,80039cd8 <_Z14FCEUX_PPU_Loopi+0x1318> + 80039434: 15500513 li a0,341 + 80039438: d20ff0ef jal ra,80038958 <_Z6runppui> + 8003943c: 00193717 auipc a4,0x193 + 80039440: 34c70713 addi a4,a4,844 # 801cc788 + 80039444: 00072783 lw a5,0(a4) + 80039448: 0017879b addiw a5,a5,1 + 8003944c: 00f72023 sw a5,0(a4) + 80039450: 10813083 ld ra,264(sp) + 80039454: 10013403 ld s0,256(sp) + 80039458: 0f813483 ld s1,248(sp) + 8003945c: 0f013903 ld s2,240(sp) + 80039460: 0e813983 ld s3,232(sp) + 80039464: 0e013a03 ld s4,224(sp) + 80039468: 0d813a83 ld s5,216(sp) + 8003946c: 0d013b03 ld s6,208(sp) + 80039470: 0c813b83 ld s7,200(sp) + 80039474: 0c013c03 ld s8,192(sp) + 80039478: 0b813c83 ld s9,184(sp) + 8003947c: 0b013d03 ld s10,176(sp) + 80039480: 0a813d83 ld s11,168(sp) + 80039484: 00000513 li a0,0 + 80039488: 11010113 addi sp,sp,272 + 8003948c: 00008067 ret + 80039490: 001bc783 lbu a5,1(s7) + 80039494: 00191717 auipc a4,0x191 + 80039498: 89470713 addi a4,a4,-1900 # 801c9d28 + 8003949c: 00074e03 lbu t3,0(a4) + 800394a0: 0017f793 andi a5,a5,1 + 800394a4: a0078ae3 beqz a5,80038eb8 <_Z14FCEUX_PPU_Loopi+0x4f8> + 800394a8: 030e7e13 andi t3,t3,48 + 800394ac: a0dff06f j 80038eb8 <_Z14FCEUX_PPU_Loopi+0x4f8> + 800394b0: 001bc703 lbu a4,1(s7) + 800394b4: 01877713 andi a4,a4,24 + 800394b8: 02070c63 beqz a4,800394f0 <_Z14FCEUX_PPU_Loopi+0xb30> + 800394bc: 00193797 auipc a5,0x193 + 800394c0: 20478793 addi a5,a5,516 # 801cc6c0 + 800394c4: 0007b703 ld a4,0(a5) + 800394c8: 00070a63 beqz a4,800394dc <_Z14FCEUX_PPU_Loopi+0xb1c> + 800394cc: 000700e7 jalr a4 + 800394d0: 001bc703 lbu a4,1(s7) + 800394d4: 01877713 andi a4,a4,24 + 800394d8: 00070c63 beqz a4,800394f0 <_Z14FCEUX_PPU_Loopi+0xb30> + 800394dc: 00193797 auipc a5,0x193 + 800394e0: 1ec78793 addi a5,a5,492 # 801cc6c8 + 800394e4: 0007b703 ld a4,0(a5) + 800394e8: 00070463 beqz a4,800394f0 <_Z14FCEUX_PPU_Loopi+0xb30> + 800394ec: 000700e7 jalr a4 + 800394f0: 00200513 li a0,2 + 800394f4: c64ff0ef jal ra,80038958 <_Z6runppui> + 800394f8: 000b3703 ld a4,0(s6) + 800394fc: 008aa023 sw s0,0(s5) + 80039500: 000d8513 mv a0,s11 + 80039504: 000700e7 jalr a4 + 80039508: 00050793 mv a5,a0 + 8003950c: 00fc8223 sb a5,4(s9) + 80039510: 00200513 li a0,2 + 80039514: c44ff0ef jal ra,80038958 <_Z6runppui> + 80039518: 000aa503 lw a0,0(s5) + 8003951c: 000b3783 ld a5,0(s6) + 80039520: 0085051b addiw a0,a0,8 + 80039524: 00aaa023 sw a0,0(s5) + 80039528: 000780e7 jalr a5 + 8003952c: 00050793 mv a5,a0 + 80039530: 00fc82a3 sb a5,5(s9) + 80039534: 00200513 li a0,2 + 80039538: c20ff0ef jal ra,80038958 <_Z6runppui> + 8003953c: be5ff06f j 80039120 <_Z14FCEUX_PPU_Loopi+0x760> + 80039540: 00100513 li a0,1 + 80039544: c14ff0ef jal ra,80038958 <_Z6runppui> + 80039548: 001bc703 lbu a4,1(s7) + 8003954c: 01877713 andi a4,a4,24 + 80039550: 02070663 beqz a4,8003957c <_Z14FCEUX_PPU_Loopi+0xbbc> + 80039554: 014a2883 lw a7,20(s4) + 80039558: 018a2803 lw a6,24(s4) + 8003955c: 01ca2503 lw a0,28(s4) + 80039560: 020a2583 lw a1,32(s4) + 80039564: 024a2703 lw a4,36(s4) + 80039568: 011a2023 sw a7,0(s4) + 8003956c: 010a2223 sw a6,4(s4) + 80039570: 00aa2423 sw a0,8(s4) + 80039574: 00ba2623 sw a1,12(s4) + 80039578: 00ea2823 sw a4,16(s4) + 8003957c: 00100513 li a0,1 + 80039580: bd8ff0ef jal ra,80038958 <_Z6runppui> + 80039584: 00000513 li a0,0 + 80039588: b5a4cae3 blt s1,s10,800390dc <_Z14FCEUX_PPU_Loopi+0x71c> + 8003958c: bccff0ef jal ra,80038958 <_Z6runppui> + 80039590: 000bc703 lbu a4,0(s7) + 80039594: 01800593 li a1,24 + 80039598: 03877713 andi a4,a4,56 + 8003959c: b4b718e3 bne a4,a1,800390ec <_Z14FCEUX_PPU_Loopi+0x72c> + 800395a0: b58d18e3 bne s10,s8,800390f0 <_Z14FCEUX_PPU_Loopi+0x730> + 800395a4: 001bc703 lbu a4,1(s7) + 800395a8: 01877713 andi a4,a4,24 + 800395ac: f2dff06f j 800394d8 <_Z14FCEUX_PPU_Loopi+0xb18> + 800395b0: 00193797 auipc a5,0x193 + 800395b4: 16078793 addi a5,a5,352 # 801cc710 + 800395b8: 0007a783 lw a5,0(a5) + 800395bc: 00078863 beqz a5,800395cc <_Z14FCEUX_PPU_Loopi+0xc0c> + 800395c0: 005cc783 lbu a5,5(s9) + 800395c4: 0407f793 andi a5,a5,64 + 800395c8: 46079c63 bnez a5,80039a40 <_Z14FCEUX_PPU_Loopi+0x1080> + 800395cc: 000b3783 ld a5,0(s6) + 800395d0: 000780e7 jalr a5 + 800395d4: 00050793 mv a5,a0 + 800395d8: 00fc81a3 sb a5,3(s9) + 800395dc: 00200513 li a0,2 + 800395e0: b78ff0ef jal ra,80038958 <_Z6runppui> + 800395e4: 000aa503 lw a0,0(s5) + 800395e8: 000b3783 ld a5,0(s6) + 800395ec: 00856513 ori a0,a0,8 + 800395f0: 00aaa023 sw a0,0(s5) + 800395f4: 89dff06f j 80038e90 <_Z14FCEUX_PPU_Loopi+0x4d0> + 800395f8: 00193717 auipc a4,0x193 + 800395fc: 11870713 addi a4,a4,280 # 801cc710 + 80039600: 00072703 lw a4,0(a4) + 80039604: f2070863 beqz a4,80038d34 <_Z14FCEUX_PPU_Loopi+0x374> + 80039608: 00a5571b srliw a4,a0,0xa + 8003960c: 00193697 auipc a3,0x193 + 80039610: 1906c683 lbu a3,400(a3) # 801cc79c + 80039614: 00377713 andi a4,a4,3 + 80039618: 4016d69b sraiw a3,a3,0x1 + 8003961c: 00d7573b srlw a4,a4,a3 + 80039620: 00a7171b slliw a4,a4,0xa + 80039624: 40077713 andi a4,a4,1024 + 80039628: 3ff7f793 andi a5,a5,1023 + 8003962c: 00f767b3 or a5,a4,a5 + 80039630: 00190717 auipc a4,0x190 + 80039634: 71870713 addi a4,a4,1816 # 801c9d48 + 80039638: 00f707b3 add a5,a4,a5 + 8003963c: 0007c783 lbu a5,0(a5) + 80039640: 03f7f713 andi a4,a5,63 + 80039644: 00fc82a3 sb a5,5(s9) + 80039648: 02ea2623 sw a4,44(s4) + 8003964c: ee8ff06f j 80038d34 <_Z14FCEUX_PPU_Loopi+0x374> + 80039650: 000a2783 lw a5,0(s4) + 80039654: 00ca2703 lw a4,12(s4) + 80039658: 01e00613 li a2,30 + 8003965c: 0017879b addiw a5,a5,1 + 80039660: 0037d69b srliw a3,a5,0x3 + 80039664: 00d7073b addw a4,a4,a3 + 80039668: 01f77713 andi a4,a4,31 + 8003966c: 00ea2623 sw a4,12(s4) + 80039670: 004a2683 lw a3,4(s4) + 80039674: 0037d59b srliw a1,a5,0x3 + 80039678: 48c70663 beq a4,a2,80039b04 <_Z14FCEUX_PPU_Loopi+0x1144> + 8003967c: 0077f793 andi a5,a5,7 + 80039680: 0016f693 andi a3,a3,1 + 80039684: 00fa2023 sw a5,0(s4) + 80039688: 00da2223 sw a3,4(s4) + 8003968c: f90ff06f j 80038e1c <_Z14FCEUX_PPU_Loopi+0x45c> + 80039690: 0096979b slliw a5,a3,0x9 + 80039694: 0137f7b3 and a5,a5,s3 + 80039698: 0047171b slliw a4,a4,0x4 + 8003969c: 00e7e7b3 or a5,a5,a4 + 800396a0: 0007879b sext.w a5,a5 + 800396a4: a09ff06f j 800390ac <_Z14FCEUX_PPU_Loopi+0x6ec> + 800396a8: 00000513 li a0,0 + 800396ac: 00000713 li a4,0 + 800396b0: 00000593 li a1,0 + 800396b4: 9cdff06f j 80039080 <_Z14FCEUX_PPU_Loopi+0x6c0> + 800396b8: 08013703 ld a4,128(sp) + 800396bc: 00193797 auipc a5,0x193 + 800396c0: 0b478793 addi a5,a5,180 # 801cc770 <_ZZ14FCEUX_PPU_LoopiE9oamcounts> + 800396c4: 001bc983 lbu s3,1(s7) + 800396c8: 00e787b3 add a5,a5,a4 + 800396cc: 0007af83 lw t6,0(a5) + 800396d0: 07013783 ld a5,112(sp) + 800396d4: 003d1d93 slli s11,s10,0x3 + 800396d8: 00193697 auipc a3,0x193 + 800396dc: 09068693 addi a3,a3,144 # 801cc768 <_ZZ14FCEUX_PPU_LoopiE8oamcount> + 800396e0: ff878793 addi a5,a5,-8 + 800396e4: 01b787b3 add a5,a5,s11 + 800396e8: 003d171b slliw a4,s10,0x3 + 800396ec: 01f6a023 sw t6,0(a3) + 800396f0: 00192c17 auipc s8,0x192 + 800396f4: 430c3c03 ld s8,1072(s8) # 801cbb20 + 800396f8: 00192d97 auipc s11,0x192 + 800396fc: 438dbd83 ld s11,1080(s11) # 801cbb30 + 80039700: 0109f693 andi a3,s3,16 + 80039704: 00fc0c33 add s8,s8,a5 + 80039708: 00fd8db3 add s11,s11,a5 + 8003970c: 000d061b sext.w a2,s10 + 80039710: ff87041b addiw s0,a4,-8 + 80039714: 0089f793 andi a5,s3,8 + 80039718: 3c068463 beqz a3,80039ae0 <_Z14FCEUX_PPU_Loopi+0x1120> + 8003971c: 00100693 li a3,1 + 80039720: 2cd60463 beq a2,a3,800399e8 <_Z14FCEUX_PPU_Loopi+0x1028> + 80039724: 00100e93 li t4,1 + 80039728: 00100293 li t0,1 + 8003972c: 2c078a63 beqz a5,80039a00 <_Z14FCEUX_PPU_Loopi+0x1040> + 80039730: 07813783 ld a5,120(sp) + 80039734: ffff849b addiw s1,t6,-1 + 80039738: 02049493 slli s1,s1,0x20 + 8003973c: 0204d493 srli s1,s1,0x20 + 80039740: 00f484b3 add s1,s1,a5 + 80039744: 00014797 auipc a5,0x14 + 80039748: a407c783 lbu a5,-1472(a5) # 8004d184 <_ZL8renderbg> + 8003974c: 00f13423 sd a5,8(sp) + 80039750: 00014797 auipc a5,0x14 + 80039754: a2c7c783 lbu a5,-1492(a5) # 8004d17c <_ZL13rendersprites> + 80039758: 00349493 slli s1,s1,0x3 + 8003975c: 02f13823 sd a5,48(sp) + 80039760: 00192797 auipc a5,0x192 + 80039764: d1a78793 addi a5,a5,-742 # 801cb47a <_ZZ14FCEUX_PPU_LoopiE4oams+0xa> + 80039768: 00f484b3 add s1,s1,a5 + 8003976c: 05213c23 sd s2,88(sp) + 80039770: 0007079b sext.w a5,a4 + 80039774: 000d8913 mv s2,s11 + 80039778: 000c0d93 mv s11,s8 + 8003977c: 00098c13 mv s8,s3 + 80039780: 07913023 sd s9,96(sp) + 80039784: 07a13423 sd s10,104(sp) + 80039788: 00f13823 sd a5,16(sp) + 8003978c: 03c13c23 sd t3,56(sp) + 80039790: 018c7713 andi a4,s8,24 + 80039794: 00048993 mv s3,s1 + 80039798: 00193f17 auipc t5,0x193 + 8003979c: ff4f0f13 addi t5,t5,-12 # 801cc78c + 800397a0: 000e8c93 mv s9,t4 + 800397a4: 000f8d13 mv s10,t6 + 800397a8: 00028493 mv s1,t0 + 800397ac: 22071863 bnez a4,800399dc <_Z14FCEUX_PPU_Loopi+0x101c> + 800397b0: 004a2783 lw a5,4(s4) + 800397b4: 008a2503 lw a0,8(s4) + 800397b8: 010a2583 lw a1,16(s4) + 800397bc: 00ca2603 lw a2,12(s4) + 800397c0: 00a5151b slliw a0,a0,0xa + 800397c4: 000a2683 lw a3,0(s4) + 800397c8: 00b7979b slliw a5,a5,0xb + 800397cc: 00a7e7b3 or a5,a5,a0 + 800397d0: 0056161b slliw a2,a2,0x5 + 800397d4: 00b7e7b3 or a5,a5,a1 + 800397d8: 00c7e7b3 or a5,a5,a2 + 800397dc: 00c6969b slliw a3,a3,0xc + 800397e0: 00003637 lui a2,0x3 + 800397e4: 00c6f6b3 and a3,a3,a2 + 800397e8: 04013603 ld a2,64(sp) + 800397ec: 00d7e7b3 or a5,a5,a3 + 800397f0: 0007879b sext.w a5,a5 + 800397f4: 00c7f6b3 and a3,a5,a2 + 800397f8: 00000513 li a0,0 + 800397fc: 00c69663 bne a3,a2,80039808 <_Z14FCEUX_PPU_Loopi+0xe48> + 80039800: 01f7f713 andi a4,a5,31 + 80039804: 00070513 mv a0,a4 + 80039808: 00e13c23 sd a4,24(sp) + 8003980c: cc9fe0ef jal ra,800384d4 <_Z19READPAL_MOTHEROFALLj> + 80039810: 01813703 ld a4,24(sp) + 80039814: 00193f17 auipc t5,0x193 + 80039818: f78f0f13 addi t5,t5,-136 # 801cc78c + 8003981c: 06048263 beqz s1,80039880 <_Z14FCEUX_PPU_Loopi+0xec0> + 80039820: 028a2683 lw a3,40(s4) + 80039824: 00192817 auipc a6,0x192 + 80039828: 04c80813 addi a6,a6,76 # 801cb870 + 8003982c: 008686bb addw a3,a3,s0 + 80039830: 4036d79b sraiw a5,a3,0x3 + 80039834: 00179593 slli a1,a5,0x1 + 80039838: 00f585b3 add a1,a1,a5 + 8003983c: 00159593 slli a1,a1,0x1 + 80039840: 00358793 addi a5,a1,3 + 80039844: 00f807b3 add a5,a6,a5 + 80039848: 0007c703 lbu a4,0(a5) + 8003984c: 0017c603 lbu a2,1(a5) + 80039850: 00b805b3 add a1,a6,a1 + 80039854: fff6c793 not a5,a3 + 80039858: 0077f793 andi a5,a5,7 + 8003985c: 0025c683 lbu a3,2(a1) + 80039860: 40f7573b sraw a4,a4,a5 + 80039864: 40f657bb sraw a5,a2,a5 + 80039868: 00177713 andi a4,a4,1 + 8003986c: 0017979b slliw a5,a5,0x1 + 80039870: 00d76733 or a4,a4,a3 + 80039874: 0027f793 andi a5,a5,2 + 80039878: 00f76733 or a4,a4,a5 + 8003987c: 0ff77713 andi a4,a4,255 + 80039880: 00813783 ld a5,8(sp) + 80039884: 02078063 beqz a5,800398a4 <_Z14FCEUX_PPU_Loopi+0xee4> + 80039888: 00190797 auipc a5,0x190 + 8003988c: 4a078793 addi a5,a5,1184 # 801c9d28 + 80039890: 00e786b3 add a3,a5,a4 + 80039894: 001c7793 andi a5,s8,1 + 80039898: 0006c503 lbu a0,0(a3) + 8003989c: 00078463 beqz a5,800398a4 <_Z14FCEUX_PPU_Loopi+0xee4> + 800398a0: 03057513 andi a0,a0,48 + 800398a4: 0fa05063 blez s10,80039984 <_Z14FCEUX_PPU_Loopi+0xfc4> + 800398a8: 001c7793 andi a5,s8,1 + 800398ac: 002bc083 lbu ra,2(s7) + 800398b0: fff00893 li a7,-1 + 800398b4: 00078463 beqz a5,800398bc <_Z14FCEUX_PPU_Loopi+0xefc> + 800398b8: 03000893 li a7,48 + 800398bc: 02813783 ld a5,40(sp) + 800398c0: 0188989b slliw a7,a7,0x18 + 800398c4: 4188d89b sraiw a7,a7,0x18 + 800398c8: 00000393 li t2,0 + 800398cc: 00000313 li t1,0 + 800398d0: 00377713 andi a4,a4,3 + 800398d4: 0017c603 lbu a2,1(a5) + 800398d8: 0ac44063 blt s0,a2,80039978 <_Z14FCEUX_PPU_Loopi+0xfb8> + 800398dc: 0076069b addiw a3,a2,7 + 800398e0: 0886cc63 blt a3,s0,80039978 <_Z14FCEUX_PPU_Loopi+0xfb8> + 800398e4: 0027c603 lbu a2,2(a5) + 800398e8: 0037c683 lbu a3,3(a5) + 800398ec: 4016581b sraiw a6,a2,0x1 + 800398f0: 4016d59b sraiw a1,a3,0x1 + 800398f4: 01078123 sb a6,2(a5) + 800398f8: 00b781a3 sb a1,3(a5) + 800398fc: 060c8e63 beqz s9,80039978 <_Z14FCEUX_PPU_Loopi+0xfb8> + 80039900: 06031c63 bnez t1,80039978 <_Z14FCEUX_PPU_Loopi+0xfb8> + 80039904: 0016969b slliw a3,a3,0x1 + 80039908: 0026f693 andi a3,a3,2 + 8003990c: 00167613 andi a2,a2,1 + 80039910: 00c6e6b3 or a3,a3,a2 + 80039914: 06068263 beqz a3,80039978 <_Z14FCEUX_PPU_Loopi+0xfb8> + 80039918: 0007c603 lbu a2,0(a5) + 8003991c: 0047c583 lbu a1,4(a5) + 80039920: 02067813 andi a6,a2,32 + 80039924: 0e059863 bnez a1,80039a14 <_Z14FCEUX_PPU_Loopi+0x1054> + 80039928: 00070e63 beqz a4,80039944 <_Z14FCEUX_PPU_Loopi+0xf84> + 8003992c: 0fe00593 li a1,254 + 80039930: 0085c663 blt a1,s0,8003993c <_Z14FCEUX_PPU_Loopi+0xf7c> + 80039934: 0400e093 ori ra,ra,64 + 80039938: 000c8393 mv t2,s9 + 8003993c: 000c8313 mv t1,s9 + 80039940: 02081c63 bnez a6,80039978 <_Z14FCEUX_PPU_Loopi+0xfb8> + 80039944: 03013583 ld a1,48(sp) + 80039948: 000c8313 mv t1,s9 + 8003994c: 02058663 beqz a1,80039978 <_Z14FCEUX_PPU_Loopi+0xfb8> + 80039950: 00261613 slli a2,a2,0x2 + 80039954: 00c67613 andi a2,a2,12 + 80039958: 00c6e6b3 or a3,a3,a2 + 8003995c: 0106869b addiw a3,a3,16 + 80039960: 00190617 auipc a2,0x190 + 80039964: 3c860613 addi a2,a2,968 # 801c9d28 + 80039968: 00d606b3 add a3,a2,a3 + 8003996c: 0006c503 lbu a0,0(a3) + 80039970: 00058313 mv t1,a1 + 80039974: 00a8f533 and a0,a7,a0 + 80039978: 00878793 addi a5,a5,8 + 8003997c: f4f99ce3 bne s3,a5,800398d4 <_Z14FCEUX_PPU_Loopi+0xf14> + 80039980: 10039c63 bnez t2,80039a98 <_Z14FCEUX_PPU_Loopi+0x10d8> + 80039984: 005c5793 srli a5,s8,0x5 + 80039988: 00700713 li a4,7 + 8003998c: 08e78c63 beq a5,a4,80039a24 <_Z14FCEUX_PPU_Loopi+0x1064> + 80039990: 0e0c7c13 andi s8,s8,224 + 80039994: 060c0a63 beqz s8,80039a08 <_Z14FCEUX_PPU_Loopi+0x1048> + 80039998: 04056513 ori a0,a0,64 + 8003999c: 0ff57513 andi a0,a0,255 + 800399a0: 00ad8023 sb a0,0(s11) + 800399a4: 001bc783 lbu a5,1(s7) + 800399a8: 00190913 addi s2,s2,1 # 2001 <_entry_offset+0x2001> + 800399ac: 0014041b addiw s0,s0,1 + 800399b0: 4057d79b sraiw a5,a5,0x5 + 800399b4: fef90fa3 sb a5,-1(s2) + 800399b8: 000f2783 lw a5,0(t5) + 800399bc: 001d8d93 addi s11,s11,1 + 800399c0: 0017879b addiw a5,a5,1 + 800399c4: 00ff2023 sw a5,0(t5) + 800399c8: 01013783 ld a5,16(sp) + 800399cc: 06f40263 beq s0,a5,80039a30 <_Z14FCEUX_PPU_Loopi+0x1070> + 800399d0: 001bcc03 lbu s8,1(s7) + 800399d4: 018c7713 andi a4,s8,24 + 800399d8: dc070ce3 beqz a4,800397b0 <_Z14FCEUX_PPU_Loopi+0xdf0> + 800399dc: 03813503 ld a0,56(sp) + 800399e0: 00000713 li a4,0 + 800399e4: e39ff06f j 8003981c <_Z14FCEUX_PPU_Loopi+0xe5c> + 800399e8: 0029de9b srliw t4,s3,0x2 + 800399ec: 001efe93 andi t4,t4,1 + 800399f0: 00078863 beqz a5,80039a00 <_Z14FCEUX_PPU_Loopi+0x1040> + 800399f4: 0029f793 andi a5,s3,2 + 800399f8: 00100293 li t0,1 + 800399fc: d2079ae3 bnez a5,80039730 <_Z14FCEUX_PPU_Loopi+0xd70> + 80039a00: 00000293 li t0,0 + 80039a04: d2dff06f j 80039730 <_Z14FCEUX_PPU_Loopi+0xd70> + 80039a08: 03f57513 andi a0,a0,63 + 80039a0c: 08056513 ori a0,a0,128 + 80039a10: f91ff06f j 800399a0 <_Z14FCEUX_PPU_Loopi+0xfe0> + 80039a14: f20808e3 beqz a6,80039944 <_Z14FCEUX_PPU_Loopi+0xf84> + 80039a18: f20706e3 beqz a4,80039944 <_Z14FCEUX_PPU_Loopi+0xf84> + 80039a1c: 000c8313 mv t1,s9 + 80039a20: f59ff06f j 80039978 <_Z14FCEUX_PPU_Loopi+0xfb8> + 80039a24: fc056513 ori a0,a0,-64 + 80039a28: 0ff57513 andi a0,a0,255 + 80039a2c: f75ff06f j 800399a0 <_Z14FCEUX_PPU_Loopi+0xfe0> + 80039a30: 05813903 ld s2,88(sp) + 80039a34: 06013c83 ld s9,96(sp) + 80039a38: 06813d03 ld s10,104(sp) + 80039a3c: c88ff06f j 80038ec4 <_Z14FCEUX_PPU_Loopi+0x504> + 80039a40: 00089417 auipc s0,0x89 + 80039a44: bc040413 addi s0,s0,-1088 # 800c2600 + 80039a48: 00043703 ld a4,0(s0) + 80039a4c: 02051793 slli a5,a0,0x20 + 80039a50: 0207d793 srli a5,a5,0x20 + 80039a54: 00f707b3 add a5,a4,a5 + 80039a58: 0007c783 lbu a5,0(a5) + 80039a5c: 00200513 li a0,2 + 80039a60: 00fc81a3 sb a5,3(s9) + 80039a64: ef5fe0ef jal ra,80038958 <_Z6runppui> + 80039a68: 000aa783 lw a5,0(s5) + 80039a6c: 00043703 ld a4,0(s0) + 80039a70: 00200513 li a0,2 + 80039a74: 0087e793 ori a5,a5,8 + 80039a78: 02079693 slli a3,a5,0x20 + 80039a7c: 0206d693 srli a3,a3,0x20 + 80039a80: 00faa023 sw a5,0(s5) + 80039a84: 00d707b3 add a5,a4,a3 + 80039a88: 0007c783 lbu a5,0(a5) + 80039a8c: 00fc8223 sb a5,4(s9) + 80039a90: ec9fe0ef jal ra,80038958 <_Z6runppui> + 80039a94: c10ff06f j 80038ea4 <_Z14FCEUX_PPU_Loopi+0x4e4> + 80039a98: 001b8123 sb ra,2(s7) + 80039a9c: ee9ff06f j 80039984 <_Z14FCEUX_PPU_Loopi+0xfc4> + 80039aa0: 04813783 ld a5,72(sp) + 80039aa4: 0f000713 li a4,240 + 80039aa8: e2f74863 blt a4,a5,800390d8 <_Z14FCEUX_PPU_Loopi+0x718> + 80039aac: 038a2583 lw a1,56(s4) + 80039ab0: 10000713 li a4,256 + 80039ab4: e2e59263 bne a1,a4,800390d8 <_Z14FCEUX_PPU_Loopi+0x718> + 80039ab8: 00100513 li a0,1 + 80039abc: e9dfe0ef jal ra,80038958 <_Z6runppui> + 80039ac0: 001bc703 lbu a4,1(s7) + 80039ac4: 01877713 andi a4,a4,24 + 80039ac8: aa070ae3 beqz a4,8003957c <_Z14FCEUX_PPU_Loopi+0xbbc> + 80039acc: 024a2583 lw a1,36(s4) + 80039ad0: 01ca2703 lw a4,28(s4) + 80039ad4: 00ba2823 sw a1,16(s4) + 80039ad8: 00ea2423 sw a4,8(s4) + 80039adc: aa1ff06f j 8003957c <_Z14FCEUX_PPU_Loopi+0xbbc> + 80039ae0: 00000e93 li t4,0 + 80039ae4: f0078ee3 beqz a5,80039a00 <_Z14FCEUX_PPU_Loopi+0x1040> + 80039ae8: 00100793 li a5,1 + 80039aec: 00100293 li t0,1 + 80039af0: c4f610e3 bne a2,a5,80039730 <_Z14FCEUX_PPU_Loopi+0xd70> + 80039af4: 0029f793 andi a5,s3,2 + 80039af8: 00100293 li t0,1 + 80039afc: c2079ae3 bnez a5,80039730 <_Z14FCEUX_PPU_Loopi+0xd70> + 80039b00: f01ff06f j 80039a00 <_Z14FCEUX_PPU_Loopi+0x1040> + 80039b04: 00100713 li a4,1 + 80039b08: b6e59ae3 bne a1,a4,8003967c <_Z14FCEUX_PPU_Loopi+0xcbc> + 80039b0c: 0016869b addiw a3,a3,1 + 80039b10: 00192717 auipc a4,0x192 + 80039b14: f2072e23 sw zero,-196(a4) # 801cba4c + 80039b18: b65ff06f j 8003967c <_Z14FCEUX_PPU_Loopi+0xcbc> + 80039b1c: 0004a783 lw a5,0(s1) + 80039b20: 00078863 beqz a5,80039b30 <_Z14FCEUX_PPU_Loopi+0x1170> + 80039b24: 00544783 lbu a5,5(s0) + 80039b28: 0407f793 andi a5,a5,64 + 80039b2c: 12079863 bnez a5,80039c5c <_Z14FCEUX_PPU_Loopi+0x129c> + 80039b30: 000b3783 ld a5,0(s6) + 80039b34: 000780e7 jalr a5 + 80039b38: 00050793 mv a5,a0 + 80039b3c: 00f401a3 sb a5,3(s0) + 80039b40: 00200513 li a0,2 + 80039b44: e15fe0ef jal ra,80038958 <_Z6runppui> + 80039b48: 000aa503 lw a0,0(s5) + 80039b4c: 000b3783 ld a5,0(s6) + 80039b50: 00856513 ori a0,a0,8 + 80039b54: 00aaa023 sw a0,0(s5) + 80039b58: 81dff06f j 80039374 <_Z14FCEUX_PPU_Loopi+0x9b4> + 80039b5c: 0004a703 lw a4,0(s1) + 80039b60: ea070e63 beqz a4,8003921c <_Z14FCEUX_PPU_Loopi+0x85c> + 80039b64: 000d4683 lbu a3,0(s10) + 80039b68: 00a5571b srliw a4,a0,0xa + 80039b6c: 00377713 andi a4,a4,3 + 80039b70: 4016d69b sraiw a3,a3,0x1 + 80039b74: 00d7573b srlw a4,a4,a3 + 80039b78: 00a7171b slliw a4,a4,0xa + 80039b7c: 40077713 andi a4,a4,1024 + 80039b80: 3ff7f793 andi a5,a5,1023 + 80039b84: 00f767b3 or a5,a4,a5 + 80039b88: 00fd87b3 add a5,s11,a5 + 80039b8c: 0007c783 lbu a5,0(a5) + 80039b90: 03f7f713 andi a4,a5,63 + 80039b94: 00f402a3 sb a5,5(s0) + 80039b98: 02ea2623 sw a4,44(s4) + 80039b9c: e80ff06f j 8003921c <_Z14FCEUX_PPU_Loopi+0x85c> + 80039ba0: 15500793 li a5,341 + 80039ba4: 00200513 li a0,2 + 80039ba8: 02fa2e23 sw a5,60(s4) + 80039bac: dadfe0ef jal ra,80038958 <_Z6runppui> + 80039bb0: 03ca2703 lw a4,60(s4) + 80039bb4: 15500793 li a5,341 + 80039bb8: 84f710e3 bne a4,a5,800393f8 <_Z14FCEUX_PPU_Loopi+0xa38> + 80039bbc: 00100513 li a0,1 + 80039bc0: d99fe0ef jal ra,80038958 <_Z6runppui> + 80039bc4: 835ff06f j 800393f8 <_Z14FCEUX_PPU_Loopi+0xa38> + 80039bc8: 000a2783 lw a5,0(s4) + 80039bcc: 00ca2703 lw a4,12(s4) + 80039bd0: 004a2683 lw a3,4(s4) + 80039bd4: 0017879b addiw a5,a5,1 + 80039bd8: 0037d61b srliw a2,a5,0x3 + 80039bdc: 00c7073b addw a4,a4,a2 + 80039be0: 01f77713 andi a4,a4,31 + 80039be4: 00ea2623 sw a4,12(s4) + 80039be8: 0037d61b srliw a2,a5,0x3 + 80039bec: 0d970063 beq a4,s9,80039cac <_Z14FCEUX_PPU_Loopi+0x12ec> + 80039bf0: 0077f793 andi a5,a5,7 + 80039bf4: 0016f693 andi a3,a3,1 + 80039bf8: 00fa2023 sw a5,0(s4) + 80039bfc: 00da2223 sw a3,4(s4) + 80039c00: f00ff06f j 80039300 <_Z14FCEUX_PPU_Loopi+0x940> + 80039c04: 00088863 beqz a7,80039c14 <_Z14FCEUX_PPU_Loopi+0x1254> + 80039c08: 00193797 auipc a5,0x193 + 80039c0c: b6078793 addi a5,a5,-1184 # 801cc768 <_ZZ14FCEUX_PPU_LoopiE8oamcount> + 80039c10: 00b7a023 sw a1,0(a5) + 80039c14: 00193797 auipc a5,0x193 + 80039c18: b5478793 addi a5,a5,-1196 # 801cc768 <_ZZ14FCEUX_PPU_LoopiE8oamcount> + 80039c1c: 0007a583 lw a1,0(a5) + 80039c20: 00193797 auipc a5,0x193 + 80039c24: b5078793 addi a5,a5,-1200 # 801cc770 <_ZZ14FCEUX_PPU_LoopiE9oamcounts> + 80039c28: 001780b3 add ra,a5,ra + 80039c2c: 00193717 auipc a4,0x193 + 80039c30: b6c70713 addi a4,a4,-1172 # 801cc798 + 80039c34: 00200793 li a5,2 + 80039c38: 01eb8123 sb t5,2(s7) + 80039c3c: 00b0a023 sw a1,0(ra) + 80039c40: 00f72023 sw a5,0(a4) + 80039c44: bd4ff06f j 80039018 <_Z14FCEUX_PPU_Loopi+0x658> + 80039c48: 00000593 li a1,0 + 80039c4c: ba0ff06f j 80038fec <_Z14FCEUX_PPU_Loopi+0x62c> + 80039c50: 05013503 ld a0,80(sp) + 80039c54: bf8e60ef jal ra,8002004c <_Z7MMC5_hbi> + 80039c58: 804ff06f j 80038c5c <_Z14FCEUX_PPU_Loopi+0x29c> + 80039c5c: 000c3703 ld a4,0(s8) + 80039c60: 02051793 slli a5,a0,0x20 + 80039c64: 0207d793 srli a5,a5,0x20 + 80039c68: 00f707b3 add a5,a4,a5 + 80039c6c: 0007c783 lbu a5,0(a5) + 80039c70: 00200513 li a0,2 + 80039c74: 00f401a3 sb a5,3(s0) + 80039c78: ce1fe0ef jal ra,80038958 <_Z6runppui> + 80039c7c: 000aa783 lw a5,0(s5) + 80039c80: 000c3703 ld a4,0(s8) + 80039c84: 00200513 li a0,2 + 80039c88: 0087e793 ori a5,a5,8 + 80039c8c: 02079693 slli a3,a5,0x20 + 80039c90: 0206d693 srli a3,a3,0x20 + 80039c94: 00faa023 sw a5,0(s5) + 80039c98: 00d707b3 add a5,a4,a3 + 80039c9c: 0007c783 lbu a5,0(a5) + 80039ca0: 00f40223 sb a5,4(s0) + 80039ca4: cb5fe0ef jal ra,80038958 <_Z6runppui> + 80039ca8: ee0ff06f j 80039388 <_Z14FCEUX_PPU_Loopi+0x9c8> + 80039cac: 00100713 li a4,1 + 80039cb0: f4e610e3 bne a2,a4,80039bf0 <_Z14FCEUX_PPU_Loopi+0x1230> + 80039cb4: 0016869b addiw a3,a3,1 + 80039cb8: 00192717 auipc a4,0x192 + 80039cbc: d8072a23 sw zero,-620(a4) # 801cba4c + 80039cc0: f31ff06f j 80039bf0 <_Z14FCEUX_PPU_Loopi+0x1230> + 80039cc4: 15400713 li a4,340 + 80039cc8: 02ea2e23 sw a4,60(s4) + 80039ccc: f10ff06f j 800393dc <_Z14FCEUX_PPU_Loopi+0xa1c> + 80039cd0: 01400993 li s3,20 + 80039cd4: e45fe06f j 80038b18 <_Z14FCEUX_PPU_Loopi+0x158> + 80039cd8: 0f000513 li a0,240 + 80039cdc: b70e60ef jal ra,8002004c <_Z7MMC5_hbi> + 80039ce0: f54ff06f j 80039434 <_Z14FCEUX_PPU_Loopi+0xa74> + 80039ce4: 0f100793 li a5,241 + 80039ce8: 02fa2a23 sw a5,52(s4) + 80039cec: 00193797 auipc a5,0x193 + 80039cf0: 9747c783 lbu a5,-1676(a5) # 801cc660 + 80039cf4: 02079a63 bnez a5,80039d28 <_Z14FCEUX_PPU_Loopi+0x1368> + 80039cf8: 00002537 lui a0,0x2 + 80039cfc: aa450513 addi a0,a0,-1372 # 1aa4 <_entry_offset+0x1aa4> + 80039d00: c59fe0ef jal ra,80038958 <_Z6runppui> + 80039d04: 00014537 lui a0,0x14 + 80039d08: 25a50513 addi a0,a0,602 # 1425a <_entry_offset+0x1425a> + 80039d0c: 00192797 auipc a5,0x192 + 80039d10: d607a423 sw zero,-664(a5) # 801cba74 + 80039d14: c45fe0ef jal ra,80038958 <_Z6runppui> + 80039d18: 00042783 lw a5,0(s0) + 80039d1c: fff7879b addiw a5,a5,-1 + 80039d20: 00f42023 sw a5,0(s0) + 80039d24: f2cff06f j 80039450 <_Z14FCEUX_PPU_Loopi+0xa90> + 80039d28: 00006537 lui a0,0x6 + 80039d2c: d3e50513 addi a0,a0,-706 # 5d3e <_entry_offset+0x5d3e> + 80039d30: c29fe0ef jal ra,80038958 <_Z6runppui> + 80039d34: fd1ff06f j 80039d04 <_Z14FCEUX_PPU_Loopi+0x1344> + 80039d38: 834c70ef jal ra,80000d6c <_Z10TriggerNMIv> + 80039d3c: 00193797 auipc a5,0x193 + 80039d40: 92478793 addi a5,a5,-1756 # 801cc660 + 80039d44: 0007c783 lbu a5,0(a5) + 80039d48: 04600993 li s3,70 + 80039d4c: 00078463 beqz a5,80039d54 <_Z14FCEUX_PPU_Loopi+0x1394> + 80039d50: dc9fe06f j 80038b18 <_Z14FCEUX_PPU_Loopi+0x158> + 80039d54: f7dff06f j 80039cd0 <_Z14FCEUX_PPU_Loopi+0x1310> + 80039d58: 00193797 auipc a5,0x193 + 80039d5c: 97c78793 addi a5,a5,-1668 # 801cc6d4 + 80039d60: 08f13c23 sd a5,152(sp) + 80039d64: ebcff06f j 80039420 <_Z14FCEUX_PPU_Loopi+0xa60> + +0000000080039d68 : + 80039d68: 00050513 mv a0,a0 + 80039d6c: 0000007b 0x7b + 80039d70: 00008067 ret + +0000000080039d74 : + 80039d74: 00050513 mv a0,a0 + 80039d78: 0000006b 0x6b + 80039d7c: 0000006f j 80039d7c + +0000000080039d80 <_assert>: + 80039d80: 00051a63 bnez a0,80039d94 <_assert+0x14> + 80039d84: 00100793 li a5,1 + 80039d88: 00078513 mv a0,a5 + 80039d8c: 0000006b 0x6b + 80039d90: 0000006f j 80039d90 <_assert+0x10> + 80039d94: 00008067 ret + +0000000080039d98 <_trm_init>: + 80039d98: ff010113 addi sp,sp,-16 + 80039d9c: 00113423 sd ra,8(sp) + 80039da0: 5cc000ef jal ra,8003a36c + 80039da4: 0000d517 auipc a0,0xd + 80039da8: c4450513 addi a0,a0,-956 # 800469e8 + 80039dac: a01d40ef jal ra,8000e7ac
+ 80039db0: 00050513 mv a0,a0 + 80039db4: 0000006b 0x6b + 80039db8: 0000006f j 80039db8 <_trm_init+0x20> + +0000000080039dbc <__muldi3>: + 80039dbc: 00050613 mv a2,a0 + 80039dc0: 00000513 li a0,0 + 80039dc4: 0015f693 andi a3,a1,1 + 80039dc8: 00068463 beqz a3,80039dd0 <__muldi3+0x14> + 80039dcc: 00c50533 add a0,a0,a2 + 80039dd0: 0015d593 srli a1,a1,0x1 + 80039dd4: 00161613 slli a2,a2,0x1 + 80039dd8: fe0596e3 bnez a1,80039dc4 <__muldi3+0x8> + 80039ddc: 00008067 ret + +0000000080039de0 <__udivsi3>: + 80039de0: 02051513 slli a0,a0,0x20 + 80039de4: 02059593 slli a1,a1,0x20 + 80039de8: 00008293 mv t0,ra + 80039dec: 03c000ef jal ra,80039e28 <__udivdi3> + 80039df0: 0005051b sext.w a0,a0 + 80039df4: 00028067 jr t0 + +0000000080039df8 <__umodsi3>: + 80039df8: 02051513 slli a0,a0,0x20 + 80039dfc: 02059593 slli a1,a1,0x20 + 80039e00: 02055513 srli a0,a0,0x20 + 80039e04: 0205d593 srli a1,a1,0x20 + 80039e08: 00008293 mv t0,ra + 80039e0c: 01c000ef jal ra,80039e28 <__udivdi3> + 80039e10: 0005851b sext.w a0,a1 + 80039e14: 00028067 jr t0 + +0000000080039e18 <__divsi3>: + 80039e18: fff00293 li t0,-1 + 80039e1c: 0a558c63 beq a1,t0,80039ed4 <__moddi3+0x30> + +0000000080039e20 <__divdi3>: + 80039e20: 06054063 bltz a0,80039e80 <__umoddi3+0x10> + 80039e24: 0605c663 bltz a1,80039e90 <__umoddi3+0x20> + +0000000080039e28 <__udivdi3>: + 80039e28: 00058613 mv a2,a1 + 80039e2c: 00050593 mv a1,a0 + 80039e30: fff00513 li a0,-1 + 80039e34: 02060c63 beqz a2,80039e6c <__udivdi3+0x44> + 80039e38: 00100693 li a3,1 + 80039e3c: 00b67a63 bgeu a2,a1,80039e50 <__udivdi3+0x28> + 80039e40: 00c05863 blez a2,80039e50 <__udivdi3+0x28> + 80039e44: 00161613 slli a2,a2,0x1 + 80039e48: 00169693 slli a3,a3,0x1 + 80039e4c: feb66ae3 bltu a2,a1,80039e40 <__udivdi3+0x18> + 80039e50: 00000513 li a0,0 + 80039e54: 00c5e663 bltu a1,a2,80039e60 <__udivdi3+0x38> + 80039e58: 40c585b3 sub a1,a1,a2 + 80039e5c: 00d56533 or a0,a0,a3 + 80039e60: 0016d693 srli a3,a3,0x1 + 80039e64: 00165613 srli a2,a2,0x1 + 80039e68: fe0696e3 bnez a3,80039e54 <__udivdi3+0x2c> + 80039e6c: 00008067 ret + +0000000080039e70 <__umoddi3>: + 80039e70: 00008293 mv t0,ra + 80039e74: fb5ff0ef jal ra,80039e28 <__udivdi3> + 80039e78: 00058513 mv a0,a1 + 80039e7c: 00028067 jr t0 + 80039e80: 40a00533 neg a0,a0 + 80039e84: 00b04863 bgtz a1,80039e94 <__umoddi3+0x24> + 80039e88: 40b005b3 neg a1,a1 + 80039e8c: f9dff06f j 80039e28 <__udivdi3> + 80039e90: 40b005b3 neg a1,a1 + 80039e94: 00008293 mv t0,ra + 80039e98: f91ff0ef jal ra,80039e28 <__udivdi3> + 80039e9c: 40a00533 neg a0,a0 + 80039ea0: 00028067 jr t0 + +0000000080039ea4 <__moddi3>: + 80039ea4: 00008293 mv t0,ra + 80039ea8: 0005ca63 bltz a1,80039ebc <__moddi3+0x18> + 80039eac: 00054c63 bltz a0,80039ec4 <__moddi3+0x20> + 80039eb0: f79ff0ef jal ra,80039e28 <__udivdi3> + 80039eb4: 00058513 mv a0,a1 + 80039eb8: 00028067 jr t0 + 80039ebc: 40b005b3 neg a1,a1 + 80039ec0: fe0558e3 bgez a0,80039eb0 <__moddi3+0xc> + 80039ec4: 40a00533 neg a0,a0 + 80039ec8: f61ff0ef jal ra,80039e28 <__udivdi3> + 80039ecc: 40b00533 neg a0,a1 + 80039ed0: 00028067 jr t0 + 80039ed4: 01f29293 slli t0,t0,0x1f + 80039ed8: f45514e3 bne a0,t0,80039e20 <__divdi3> + 80039edc: 00008067 ret + +0000000080039ee0 <__am_timer_config>: + 80039ee0: 00100793 li a5,1 + 80039ee4: 00f50023 sb a5,0(a0) + 80039ee8: 00f500a3 sb a5,1(a0) + 80039eec: 00008067 ret + +0000000080039ef0 <__am_input_config>: + 80039ef0: 00100793 li a5,1 + 80039ef4: 00f50023 sb a5,0(a0) + 80039ef8: 00008067 ret + +0000000080039efc : + 80039efc: ff010113 addi sp,sp,-16 + 80039f00: 00813023 sd s0,0(sp) + 80039f04: 00113423 sd ra,8(sp) + 80039f08: 0000c417 auipc s0,0xc + 80039f0c: 75840413 addi s0,s0,1880 # 80046660 + 80039f10: 04100513 li a0,65 + 80039f14: 00140413 addi s0,s0,1 + 80039f18: e51ff0ef jal ra,80039d68 + 80039f1c: 00044503 lbu a0,0(s0) + 80039f20: fe051ae3 bnez a0,80039f14 + 80039f24: 0000c417 auipc s0,0xc + 80039f28: 74c40413 addi s0,s0,1868 # 80046670 + 80039f2c: 06100513 li a0,97 + 80039f30: 00140413 addi s0,s0,1 + 80039f34: e35ff0ef jal ra,80039d68 + 80039f38: 00044503 lbu a0,0(s0) + 80039f3c: fe051ae3 bnez a0,80039f30 + 80039f40: 0000c417 auipc s0,0xc + 80039f44: 75040413 addi s0,s0,1872 # 80046690 + 80039f48: 02000513 li a0,32 + 80039f4c: 00140413 addi s0,s0,1 + 80039f50: e19ff0ef jal ra,80039d68 + 80039f54: 00044503 lbu a0,0(s0) + 80039f58: fe051ae3 bnez a0,80039f4c + 80039f5c: 00100513 li a0,1 + 80039f60: e15ff0ef jal ra,80039d74 + +0000000080039f64 : + 80039f64: ff010113 addi sp,sp,-16 + 80039f68: 00113423 sd ra,8(sp) + 80039f6c: 0001d797 auipc a5,0x1d + 80039f70: 24478793 addi a5,a5,580 # 800571b0 + 80039f74: 0001d697 auipc a3,0x1d + 80039f78: 63c68693 addi a3,a3,1596 # 800575b0 + 80039f7c: 00000617 auipc a2,0x0 + 80039f80: f8060613 addi a2,a2,-128 # 80039efc + 80039f84: 00c0006f j 80039f90 + 80039f88: 00878793 addi a5,a5,8 + 80039f8c: 00d78c63 beq a5,a3,80039fa4 + 80039f90: 0007b703 ld a4,0(a5) + 80039f94: fe071ae3 bnez a4,80039f88 + 80039f98: 00c7b023 sd a2,0(a5) + 80039f9c: 00878793 addi a5,a5,8 + 80039fa0: fed798e3 bne a5,a3,80039f90 + 80039fa4: 030000ef jal ra,80039fd4 <__am_timer_init> + 80039fa8: 00813083 ld ra,8(sp) + 80039fac: 00100513 li a0,1 + 80039fb0: 01010113 addi sp,sp,16 + 80039fb4: 00008067 ret + +0000000080039fb8 : + 80039fb8: 00351793 slli a5,a0,0x3 + 80039fbc: 0001d517 auipc a0,0x1d + 80039fc0: 1f450513 addi a0,a0,500 # 800571b0 + 80039fc4: 00f50533 add a0,a0,a5 + 80039fc8: 00053303 ld t1,0(a0) + 80039fcc: 00058513 mv a0,a1 + 80039fd0: 00030067 jr t1 + +0000000080039fd4 <__am_timer_init>: + 80039fd4: 00008067 ret + +0000000080039fd8 <__am_timer_uptime>: + 80039fd8: fd010113 addi sp,sp,-48 + 80039fdc: 00913c23 sd s1,24(sp) + 80039fe0: 02113423 sd ra,40(sp) + 80039fe4: 02813023 sd s0,32(sp) + 80039fe8: 01213823 sd s2,16(sp) + 80039fec: 01313423 sd s3,8(sp) + 80039ff0: 00050493 mv s1,a0 + 80039ff4: b0002973 csrr s2,mcycle + 80039ff8: 000f49b7 lui s3,0xf4 + 80039ffc: 24098593 addi a1,s3,576 # f4240 <_entry_offset+0xf4240> + 8003a000: 00090513 mv a0,s2 + 8003a004: e25ff0ef jal ra,80039e28 <__udivdi3> + 8003a008: 00551413 slli s0,a0,0x5 + 8003a00c: 40a407b3 sub a5,s0,a0 + 8003a010: 00679413 slli s0,a5,0x6 + 8003a014: 40f40433 sub s0,s0,a5 + 8003a018: 00341413 slli s0,s0,0x3 + 8003a01c: 00a40433 add s0,s0,a0 + 8003a020: 24098593 addi a1,s3,576 + 8003a024: 00090513 mv a0,s2 + 8003a028: e49ff0ef jal ra,80039e70 <__umoddi3> + 8003a02c: 00641413 slli s0,s0,0x6 + 8003a030: 00a40433 add s0,s0,a0 + 8003a034: 0084b023 sd s0,0(s1) + 8003a038: 02813083 ld ra,40(sp) + 8003a03c: 02013403 ld s0,32(sp) + 8003a040: 01813483 ld s1,24(sp) + 8003a044: 01013903 ld s2,16(sp) + 8003a048: 00813983 ld s3,8(sp) + 8003a04c: 03010113 addi sp,sp,48 + 8003a050: 00008067 ret + +000000008003a054 : + 8003a054: fc010113 addi sp,sp,-64 + 8003a058: 01313c23 sd s3,24(sp) + 8003a05c: 00058993 mv s3,a1 + 8003a060: 00050793 mv a5,a0 + 8003a064: 03800613 li a2,56 + 8003a068: 00000593 li a1,0 + 8003a06c: 00098513 mv a0,s3 + 8003a070: 02813823 sd s0,48(sp) + 8003a074: 03213023 sd s2,32(sp) + 8003a078: 0007b403 ld s0,0(a5) + 8003a07c: 01413823 sd s4,16(sp) + 8003a080: 02113c23 sd ra,56(sp) + 8003a084: 02913423 sd s1,40(sp) + 8003a088: 01513423 sd s5,8(sp) + 8003a08c: 19d010ef jal ra,8003ba28 + 8003a090: 7b200793 li a5,1970 + 8003a094: 00f9aa23 sw a5,20(s3) + 8003a098: 7b200913 li s2,1970 + 8003a09c: 0000da17 auipc s4,0xd + 8003a0a0: 954a0a13 addi s4,s4,-1708 # 800469f0 + 8003a0a4: 0100006f j 8003a0b4 + 8003a0a8: 40e40433 sub s0,s0,a4 + 8003a0ac: 00d9aa23 sw a3,20(s3) + 8003a0b0: 00068913 mv s2,a3 + 8003a0b4: 0009049b sext.w s1,s2 + 8003a0b8: 06400593 li a1,100 + 8003a0bc: 00048513 mv a0,s1 + 8003a0c0: de5ff0ef jal ra,80039ea4 <__moddi3> + 8003a0c4: 00050793 mv a5,a0 + 8003a0c8: 0007879b sext.w a5,a5 + 8003a0cc: 00048513 mv a0,s1 + 8003a0d0: 00397493 andi s1,s2,3 + 8003a0d4: 19000593 li a1,400 + 8003a0d8: 0014b493 seqz s1,s1 + 8003a0dc: 00079863 bnez a5,8003a0ec + 8003a0e0: dc5ff0ef jal ra,80039ea4 <__moddi3> + 8003a0e4: 0005049b sext.w s1,a0 + 8003a0e8: 0014b493 seqz s1,s1 + 8003a0ec: 00249793 slli a5,s1,0x2 + 8003a0f0: 00fa07b3 add a5,s4,a5 + 8003a0f4: 0007e703 lwu a4,0(a5) + 8003a0f8: 0019069b addiw a3,s2,1 + 8003a0fc: fae456e3 bge s0,a4,8003a0a8 + 8003a100: 000155b7 lui a1,0x15 + 8003a104: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 8003a108: 00040513 mv a0,s0 + 8003a10c: d15ff0ef jal ra,80039e20 <__divdi3> + 8003a110: 00149793 slli a5,s1,0x1 + 8003a114: 009784b3 add s1,a5,s1 + 8003a118: 00449793 slli a5,s1,0x4 + 8003a11c: 0000c497 auipc s1,0xc + 8003a120: 5b448493 addi s1,s1,1460 # 800466d0 + 8003a124: 00f484b3 add s1,s1,a5 + 8003a128: 0004e783 lwu a5,0(s1) + 8003a12c: 0005051b sext.w a0,a0 + 8003a130: 00a9ae23 sw a0,28(s3) + 8003a134: 14f44463 blt s0,a5,8003a27c + 8003a138: 00100713 li a4,1 + 8003a13c: 40f40433 sub s0,s0,a5 + 8003a140: 0044e783 lwu a5,4(s1) + 8003a144: 00070a1b sext.w s4,a4 + 8003a148: 00448493 addi s1,s1,4 + 8003a14c: 00170713 addi a4,a4,1 + 8003a150: fef456e3 bge s0,a5,8003a13c + 8003a154: 000155b7 lui a1,0x15 + 8003a158: 0149a823 sw s4,16(s3) + 8003a15c: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 8003a160: 00040513 mv a0,s0 + 8003a164: cbdff0ef jal ra,80039e20 <__divdi3> + 8003a168: 0005051b sext.w a0,a0 + 8003a16c: 0015079b addiw a5,a0,1 + 8003a170: 000155b7 lui a1,0x15 + 8003a174: 00f9a623 sw a5,12(s3) + 8003a178: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 8003a17c: 00040513 mv a0,s0 + 8003a180: 00001ab7 lui s5,0x1 + 8003a184: 0007841b sext.w s0,a5 + 8003a188: d1dff0ef jal ra,80039ea4 <__moddi3> + 8003a18c: e10a8593 addi a1,s5,-496 # e10 <_entry_offset+0xe10> + 8003a190: 00050493 mv s1,a0 + 8003a194: c8dff0ef jal ra,80039e20 <__divdi3> + 8003a198: e10a8593 addi a1,s5,-496 + 8003a19c: 00a9a423 sw a0,8(s3) + 8003a1a0: 00048513 mv a0,s1 + 8003a1a4: d01ff0ef jal ra,80039ea4 <__moddi3> + 8003a1a8: 03c00593 li a1,60 + 8003a1ac: 00050493 mv s1,a0 + 8003a1b0: c71ff0ef jal ra,80039e20 <__divdi3> + 8003a1b4: 00a9a223 sw a0,4(s3) + 8003a1b8: 03c00593 li a1,60 + 8003a1bc: 00048513 mv a0,s1 + 8003a1c0: ce5ff0ef jal ra,80039ea4 <__moddi3> + 8003a1c4: 001a0a1b addiw s4,s4,1 + 8003a1c8: 0ffa7793 andi a5,s4,255 + 8003a1cc: 0037b793 sltiu a5,a5,3 + 8003a1d0: 40f9093b subw s2,s2,a5 + 8003a1d4: 03091913 slli s2,s2,0x30 + 8003a1d8: 03095913 srli s2,s2,0x30 + 8003a1dc: 00a9a023 sw a0,0(s3) + 8003a1e0: 06400593 li a1,100 + 8003a1e4: 00090513 mv a0,s2 + 8003a1e8: c41ff0ef jal ra,80039e28 <__udivdi3> + 8003a1ec: 0029549b srliw s1,s2,0x2 + 8003a1f0: 0105179b slliw a5,a0,0x10 + 8003a1f4: 0107d79b srliw a5,a5,0x10 + 8003a1f8: 012484bb addw s1,s1,s2 + 8003a1fc: 19000593 li a1,400 + 8003a200: 00090513 mv a0,s2 + 8003a204: 0ffa7a13 andi s4,s4,255 + 8003a208: 40f484bb subw s1,s1,a5 + 8003a20c: fffa0a1b addiw s4,s4,-1 + 8003a210: c19ff0ef jal ra,80039e28 <__udivdi3> + 8003a214: 0000c797 auipc a5,0xc + 8003a218: 51c78793 addi a5,a5,1308 # 80046730 + 8003a21c: 002a1a13 slli s4,s4,0x2 + 8003a220: 01478a33 add s4,a5,s4 + 8003a224: 000a2783 lw a5,0(s4) + 8003a228: 0105151b slliw a0,a0,0x10 + 8003a22c: 0105551b srliw a0,a0,0x10 + 8003a230: 00a484bb addw s1,s1,a0 + 8003a234: 00f484bb addw s1,s1,a5 + 8003a238: 0ff47513 andi a0,s0,255 + 8003a23c: 00a4853b addw a0,s1,a0 + 8003a240: 00700593 li a1,7 + 8003a244: c61ff0ef jal ra,80039ea4 <__moddi3> + 8003a248: 03813083 ld ra,56(sp) + 8003a24c: 03013403 ld s0,48(sp) + 8003a250: 0ff57513 andi a0,a0,255 + 8003a254: 00a9ac23 sw a0,24(s3) + 8003a258: 0209a023 sw zero,32(s3) + 8003a25c: 02813483 ld s1,40(sp) + 8003a260: 02013903 ld s2,32(sp) + 8003a264: 01013a03 ld s4,16(sp) + 8003a268: 00813a83 ld s5,8(sp) + 8003a26c: 00098513 mv a0,s3 + 8003a270: 01813983 ld s3,24(sp) + 8003a274: 04010113 addi sp,sp,64 + 8003a278: 00008067 ret + 8003a27c: 00000a13 li s4,0 + 8003a280: eedff06f j 8003a16c + +000000008003a284 <__am_timer_rtc>: + 8003a284: f9010113 addi sp,sp,-112 + 8003a288: 06813023 sd s0,96(sp) + 8003a28c: 06113423 sd ra,104(sp) + 8003a290: 04913c23 sd s1,88(sp) + 8003a294: 05213823 sd s2,80(sp) + 8003a298: 00050413 mv s0,a0 + 8003a29c: b00024f3 csrr s1,mcycle + 8003a2a0: 000f4937 lui s2,0xf4 + 8003a2a4: 24090593 addi a1,s2,576 # f4240 <_entry_offset+0xf4240> + 8003a2a8: 00048513 mv a0,s1 + 8003a2ac: b7dff0ef jal ra,80039e28 <__udivdi3> + 8003a2b0: 00050793 mv a5,a0 + 8003a2b4: 24090593 addi a1,s2,576 + 8003a2b8: 00048513 mv a0,s1 + 8003a2bc: 00f13423 sd a5,8(sp) + 8003a2c0: bb1ff0ef jal ra,80039e70 <__umoddi3> + 8003a2c4: 00050793 mv a5,a0 + 8003a2c8: 01810593 addi a1,sp,24 + 8003a2cc: 00810513 addi a0,sp,8 + 8003a2d0: 00f13823 sd a5,16(sp) + 8003a2d4: d81ff0ef jal ra,8003a054 + 8003a2d8: 01812703 lw a4,24(sp) + 8003a2dc: 02812783 lw a5,40(sp) + 8003a2e0: 06813083 ld ra,104(sp) + 8003a2e4: 00e42a23 sw a4,20(s0) + 8003a2e8: 01c12703 lw a4,28(sp) + 8003a2ec: 0017879b addiw a5,a5,1 + 8003a2f0: 00f42223 sw a5,4(s0) + 8003a2f4: 00e42823 sw a4,16(s0) + 8003a2f8: 02012703 lw a4,32(sp) + 8003a2fc: 02c12783 lw a5,44(sp) + 8003a300: 05813483 ld s1,88(sp) + 8003a304: 00e42623 sw a4,12(s0) + 8003a308: 02412703 lw a4,36(sp) + 8003a30c: 00f42023 sw a5,0(s0) + 8003a310: 05013903 ld s2,80(sp) + 8003a314: 00e42423 sw a4,8(s0) + 8003a318: 06013403 ld s0,96(sp) + 8003a31c: 07010113 addi sp,sp,112 + 8003a320: 00008067 ret + +000000008003a324 <__am_input_keybrd>: + 8003a324: 00050023 sb zero,0(a0) + 8003a328: 00052223 sw zero,4(a0) + 8003a32c: 00008067 ret + +000000008003a330 : + 8003a330: 00054783 lbu a5,0(a0) + 8003a334: 00158593 addi a1,a1,1 + 8003a338: 00150513 addi a0,a0,1 + 8003a33c: fff5c703 lbu a4,-1(a1) + 8003a340: 00078863 beqz a5,8003a350 + 8003a344: fee786e3 beq a5,a4,8003a330 + 8003a348: 40e7853b subw a0,a5,a4 + 8003a34c: 00008067 ret + 8003a350: 40e0053b negw a0,a4 + 8003a354: 00008067 ret + +000000008003a358 : + 8003a358: 02051513 slli a0,a0,0x20 + 8003a35c: 02055513 srli a0,a0,0x20 + 8003a360: 0001d797 auipc a5,0x1d + 8003a364: 24a7b823 sd a0,592(a5) # 800575b0 + 8003a368: 00008067 ret + +000000008003a36c : + 8003a36c: 0001d797 auipc a5,0x1d + 8003a370: e3478793 addi a5,a5,-460 # 800571a0 + 8003a374: 0007b503 ld a0,0(a5) + 8003a378: 0087b583 ld a1,8(a5) + 8003a37c: ff010113 addi sp,sp,-16 + 8003a380: 00000693 li a3,0 + 8003a384: 00000613 li a2,0 + 8003a388: 40a585b3 sub a1,a1,a0 + 8003a38c: 00113423 sd ra,8(sp) + 8003a390: 0a1010ef jal ra,8003bc30 + 8003a394: 00813083 ld ra,8(sp) + 8003a398: 00192797 auipc a5,0x192 + 8003a39c: 40a7bc23 sd a0,1048(a5) # 801cc7b0 + 8003a3a0: 01010113 addi sp,sp,16 + 8003a3a4: 00008067 ret + +000000008003a3a8 : + 8003a3a8: 00050593 mv a1,a0 + 8003a3ac: 00192517 auipc a0,0x192 + 8003a3b0: 40453503 ld a0,1028(a0) # 801cc7b0 + 8003a3b4: 2510106f j 8003be04 + +000000008003a3b8 : + 8003a3b8: 00050593 mv a1,a0 + 8003a3bc: 00192517 auipc a0,0x192 + 8003a3c0: 3f453503 ld a0,1012(a0) # 801cc7b0 + 8003a3c4: 7150106f j 8003c2d8 + +000000008003a3c8 : + 8003a3c8: 00757793 andi a5,a0,7 + 8003a3cc: 02078463 beqz a5,8003a3f4 + 8003a3d0: 00050793 mv a5,a0 + 8003a3d4: 0100006f j 8003a3e4 + 8003a3d8: 00178793 addi a5,a5,1 + 8003a3dc: 0077f713 andi a4,a5,7 + 8003a3e0: 00070c63 beqz a4,8003a3f8 + 8003a3e4: 0007c703 lbu a4,0(a5) + 8003a3e8: fe0718e3 bnez a4,8003a3d8 + 8003a3ec: 40a78533 sub a0,a5,a0 + 8003a3f0: 00008067 ret + 8003a3f4: 00050793 mv a5,a0 + 8003a3f8: 0000c817 auipc a6,0xc + 8003a3fc: 5c083803 ld a6,1472(a6) # 800469b8 + 8003a400: 0000c597 auipc a1,0xc + 8003a404: 5c05b583 ld a1,1472(a1) # 800469c0 + 8003a408: 0007b603 ld a2,0(a5) + 8003a40c: 00878693 addi a3,a5,8 + 8003a410: 01060733 add a4,a2,a6 + 8003a414: fff64613 not a2,a2 + 8003a418: 00c77733 and a4,a4,a2 + 8003a41c: 00b77733 and a4,a4,a1 + 8003a420: 04070263 beqz a4,8003a464 + 8003a424: ff86c703 lbu a4,-8(a3) + 8003a428: fc0702e3 beqz a4,8003a3ec + 8003a42c: ff96c703 lbu a4,-7(a3) + 8003a430: 04070463 beqz a4,8003a478 + 8003a434: ffa6c703 lbu a4,-6(a3) + 8003a438: 04070663 beqz a4,8003a484 + 8003a43c: ffb6c703 lbu a4,-5(a3) + 8003a440: 04070863 beqz a4,8003a490 + 8003a444: ffc6c703 lbu a4,-4(a3) + 8003a448: 04070a63 beqz a4,8003a49c + 8003a44c: ffd6c703 lbu a4,-3(a3) + 8003a450: 04070c63 beqz a4,8003a4a8 + 8003a454: ffe6c703 lbu a4,-2(a3) + 8003a458: 04070e63 beqz a4,8003a4b4 + 8003a45c: fff6c703 lbu a4,-1(a3) + 8003a460: 00070663 beqz a4,8003a46c + 8003a464: 00068793 mv a5,a3 + 8003a468: fa1ff06f j 8003a408 + 8003a46c: 40a787b3 sub a5,a5,a0 + 8003a470: 00778513 addi a0,a5,7 + 8003a474: 00008067 ret + 8003a478: 40a787b3 sub a5,a5,a0 + 8003a47c: 00178513 addi a0,a5,1 + 8003a480: 00008067 ret + 8003a484: 40a787b3 sub a5,a5,a0 + 8003a488: 00278513 addi a0,a5,2 + 8003a48c: 00008067 ret + 8003a490: 40a787b3 sub a5,a5,a0 + 8003a494: 00378513 addi a0,a5,3 + 8003a498: 00008067 ret + 8003a49c: 40a787b3 sub a5,a5,a0 + 8003a4a0: 00478513 addi a0,a5,4 + 8003a4a4: 00008067 ret + 8003a4a8: 40a787b3 sub a5,a5,a0 + 8003a4ac: 00578513 addi a0,a5,5 + 8003a4b0: 00008067 ret + 8003a4b4: 40a787b3 sub a5,a5,a0 + 8003a4b8: 00678513 addi a0,a5,6 + 8003a4bc: 00008067 ret + +000000008003a4c0 <_out_buffer>: + 8003a4c0: 00d67663 bgeu a2,a3,8003a4cc <_out_buffer+0xc> + 8003a4c4: 00c585b3 add a1,a1,a2 + 8003a4c8: 00a58023 sb a0,0(a1) + 8003a4cc: 00008067 ret + +000000008003a4d0 <_out_null>: + 8003a4d0: 00008067 ret + +000000008003a4d4 <_ntoa_format>: + 8003a4d4: fa010113 addi sp,sp,-96 + 8003a4d8: 07012303 lw t1,112(sp) + 8003a4dc: 03313c23 sd s3,56(sp) + 8003a4e0: 03413823 sd s4,48(sp) + 8003a4e4: 03513423 sd s5,40(sp) + 8003a4e8: 03613023 sd s6,32(sp) + 8003a4ec: 01713c23 sd s7,24(sp) + 8003a4f0: 01813823 sd s8,16(sp) + 8003a4f4: 01913423 sd s9,8(sp) + 8003a4f8: 00237e13 andi t3,t1,2 + 8003a4fc: 01037e93 andi t4,t1,16 + 8003a500: 04113c23 sd ra,88(sp) + 8003a504: 04813823 sd s0,80(sp) + 8003a508: 04913423 sd s1,72(sp) + 8003a50c: 05213023 sd s2,64(sp) + 8003a510: 06012f03 lw t5,96(sp) + 8003a514: 06812c03 lw s8,104(sp) + 8003a518: 00050a13 mv s4,a0 + 8003a51c: 00058a93 mv s5,a1 + 8003a520: 00060b93 mv s7,a2 + 8003a524: 00068b13 mv s6,a3 + 8003a528: 00070993 mv s3,a4 + 8003a52c: 000e0c9b sext.w s9,t3 + 8003a530: 000e8e9b sext.w t4,t4 + 8003a534: 060e1c63 bnez t3,8003a5ac <_ntoa_format+0xd8> + 8003a538: 020f1693 slli a3,t5,0x20 + 8003a53c: 00137513 andi a0,t1,1 + 8003a540: 0206d693 srli a3,a3,0x20 + 8003a544: 180c1e63 bnez s8,8003a6e0 <_ntoa_format+0x20c> + 8003a548: 02d7f663 bgeu a5,a3,8003a574 <_ntoa_format+0xa0> + 8003a54c: 02000713 li a4,32 + 8003a550: 36e78e63 beq a5,a4,8003a8cc <_ntoa_format+0x3f8> + 8003a554: 03000613 li a2,48 + 8003a558: 02000593 li a1,32 + 8003a55c: 0080006f j 8003a564 <_ntoa_format+0x90> + 8003a560: 00b78a63 beq a5,a1,8003a574 <_ntoa_format+0xa0> + 8003a564: 00178793 addi a5,a5,1 + 8003a568: 00f98733 add a4,s3,a5 + 8003a56c: fec70fa3 sb a2,-1(a4) + 8003a570: fed7e8e3 bltu a5,a3,8003a560 <_ntoa_format+0x8c> + 8003a574: 02050c63 beqz a0,8003a5ac <_ntoa_format+0xd8> + 8003a578: 020c1913 slli s2,s8,0x20 + 8003a57c: 02095913 srli s2,s2,0x20 + 8003a580: 0327f663 bgeu a5,s2,8003a5ac <_ntoa_format+0xd8> + 8003a584: 02000713 li a4,32 + 8003a588: 36e78863 beq a5,a4,8003a8f8 <_ntoa_format+0x424> + 8003a58c: 03000693 li a3,48 + 8003a590: 02000613 li a2,32 + 8003a594: 0080006f j 8003a59c <_ntoa_format+0xc8> + 8003a598: 16c78463 beq a5,a2,8003a700 <_ntoa_format+0x22c> + 8003a59c: 00178793 addi a5,a5,1 + 8003a5a0: 00f98733 add a4,s3,a5 + 8003a5a4: fed70fa3 sb a3,-1(a4) + 8003a5a8: ff2798e3 bne a5,s2,8003a598 <_ntoa_format+0xc4> + 8003a5ac: 1a0e8663 beqz t4,8003a758 <_ntoa_format+0x284> + 8003a5b0: 40037713 andi a4,t1,1024 + 8003a5b4: 20071463 bnez a4,8003a7bc <_ntoa_format+0x2e8> + 8003a5b8: 1e079663 bnez a5,8003a7a4 <_ntoa_format+0x2d0> + 8003a5bc: 01000793 li a5,16 + 8003a5c0: 2af88863 beq a7,a5,8003a870 <_ntoa_format+0x39c> + 8003a5c4: 00200793 li a5,2 + 8003a5c8: 2ef88a63 beq a7,a5,8003a8bc <_ntoa_format+0x3e8> + 8003a5cc: 03000793 li a5,48 + 8003a5d0: 00f98023 sb a5,0(s3) + 8003a5d4: 00100793 li a5,1 + 8003a5d8: 1a080463 beqz a6,8003a780 <_ntoa_format+0x2ac> + 8003a5dc: 00f98733 add a4,s3,a5 + 8003a5e0: 00178413 addi s0,a5,1 + 8003a5e4: 02d00793 li a5,45 + 8003a5e8: 00f70023 sb a5,0(a4) + 8003a5ec: 00337313 andi t1,t1,3 + 8003a5f0: 20031263 bnez t1,8003a7f4 <_ntoa_format+0x320> + 8003a5f4: 020c1913 slli s2,s8,0x20 + 8003a5f8: 02095913 srli s2,s2,0x20 + 8003a5fc: 1f247c63 bgeu s0,s2,8003a7f4 <_ntoa_format+0x320> + 8003a600: 40890933 sub s2,s2,s0 + 8003a604: 01790933 add s2,s2,s7 + 8003a608: 000b8493 mv s1,s7 + 8003a60c: 00048613 mv a2,s1 + 8003a610: 000b0693 mv a3,s6 + 8003a614: 00148493 addi s1,s1,1 + 8003a618: 000a8593 mv a1,s5 + 8003a61c: 02000513 li a0,32 + 8003a620: 000a00e7 jalr s4 + 8003a624: ff2494e3 bne s1,s2,8003a60c <_ntoa_format+0x138> + 8003a628: 02040663 beqz s0,8003a654 <_ntoa_format+0x180> + 8003a62c: 01240933 add s2,s0,s2 + 8003a630: 012984b3 add s1,s3,s2 + 8003a634: 00898433 add s0,s3,s0 + 8003a638: fff44503 lbu a0,-1(s0) + 8003a63c: 40848633 sub a2,s1,s0 + 8003a640: 000b0693 mv a3,s6 + 8003a644: fff40413 addi s0,s0,-1 + 8003a648: 000a8593 mv a1,s5 + 8003a64c: 000a00e7 jalr s4 + 8003a650: fe8994e3 bne s3,s0,8003a638 <_ntoa_format+0x164> + 8003a654: 040c8a63 beqz s9,8003a6a8 <_ntoa_format+0x1d4> + 8003a658: 020c1c13 slli s8,s8,0x20 + 8003a65c: 41790433 sub s0,s2,s7 + 8003a660: 020c5c13 srli s8,s8,0x20 + 8003a664: 05847263 bgeu s0,s8,8003a6a8 <_ntoa_format+0x1d4> + 8003a668: 01740633 add a2,s0,s7 + 8003a66c: 000b0693 mv a3,s6 + 8003a670: 00140413 addi s0,s0,1 + 8003a674: 000a8593 mv a1,s5 + 8003a678: 02000513 li a0,32 + 8003a67c: 000a00e7 jalr s4 + 8003a680: ff8464e3 bltu s0,s8,8003a668 <_ntoa_format+0x194> + 8003a684: 41790733 sub a4,s2,s7 + 8003a688: 00170713 addi a4,a4,1 + 8003a68c: 00000793 li a5,0 + 8003a690: 00ec6863 bltu s8,a4,8003a6a0 <_ntoa_format+0x1cc> + 8003a694: fffb8793 addi a5,s7,-1 + 8003a698: 01878c33 add s8,a5,s8 + 8003a69c: 412c07b3 sub a5,s8,s2 + 8003a6a0: 00190913 addi s2,s2,1 + 8003a6a4: 00f90933 add s2,s2,a5 + 8003a6a8: 05813083 ld ra,88(sp) + 8003a6ac: 05013403 ld s0,80(sp) + 8003a6b0: 04813483 ld s1,72(sp) + 8003a6b4: 03813983 ld s3,56(sp) + 8003a6b8: 03013a03 ld s4,48(sp) + 8003a6bc: 02813a83 ld s5,40(sp) + 8003a6c0: 02013b03 ld s6,32(sp) + 8003a6c4: 01813b83 ld s7,24(sp) + 8003a6c8: 01013c03 ld s8,16(sp) + 8003a6cc: 00813c83 ld s9,8(sp) + 8003a6d0: 00090513 mv a0,s2 + 8003a6d4: 04013903 ld s2,64(sp) + 8003a6d8: 06010113 addi sp,sp,96 + 8003a6dc: 00008067 ret + 8003a6e0: 12050863 beqz a0,8003a810 <_ntoa_format+0x33c> + 8003a6e4: 00081663 bnez a6,8003a6f0 <_ntoa_format+0x21c> + 8003a6e8: 00c37713 andi a4,t1,12 + 8003a6ec: 00070463 beqz a4,8003a6f4 <_ntoa_format+0x220> + 8003a6f0: fffc0c1b addiw s8,s8,-1 + 8003a6f4: e8d7f2e3 bgeu a5,a3,8003a578 <_ntoa_format+0xa4> + 8003a6f8: 02000713 li a4,32 + 8003a6fc: e4e79ce3 bne a5,a4,8003a554 <_ntoa_format+0x80> + 8003a700: 0e0e8063 beqz t4,8003a7e0 <_ntoa_format+0x30c> + 8003a704: 40037793 andi a5,t1,1024 + 8003a708: 04079c63 bnez a5,8003a760 <_ntoa_format+0x28c> + 8003a70c: 02000793 li a5,32 + 8003a710: 0aff1063 bne t5,a5,8003a7b0 <_ntoa_format+0x2dc> + 8003a714: 02000793 li a5,32 + 8003a718: 01f00713 li a4,31 + 8003a71c: 01000693 li a3,16 + 8003a720: 1ad88c63 beq a7,a3,8003a8d8 <_ntoa_format+0x404> + 8003a724: 00200693 li a3,2 + 8003a728: 00070793 mv a5,a4 + 8003a72c: 00d89e63 bne a7,a3,8003a748 <_ntoa_format+0x274> + 8003a730: 00e986b3 add a3,s3,a4 + 8003a734: 00170793 addi a5,a4,1 + 8003a738: 06200713 li a4,98 + 8003a73c: 00e68023 sb a4,0(a3) + 8003a740: 02000713 li a4,32 + 8003a744: 00e78e63 beq a5,a4,8003a760 <_ntoa_format+0x28c> + 8003a748: 00f98733 add a4,s3,a5 + 8003a74c: 03000693 li a3,48 + 8003a750: 00d70023 sb a3,0(a4) + 8003a754: 00178793 addi a5,a5,1 + 8003a758: 02000713 li a4,32 + 8003a75c: e6e79ee3 bne a5,a4,8003a5d8 <_ntoa_format+0x104> + 8003a760: 00337313 andi t1,t1,3 + 8003a764: 08031263 bnez t1,8003a7e8 <_ntoa_format+0x314> + 8003a768: 02000413 li s0,32 + 8003a76c: 020c1913 slli s2,s8,0x20 + 8003a770: 02095913 srli s2,s2,0x20 + 8003a774: e92466e3 bltu s0,s2,8003a600 <_ntoa_format+0x12c> + 8003a778: 000b8913 mv s2,s7 + 8003a77c: eadff06f j 8003a628 <_ntoa_format+0x154> + 8003a780: 00437713 andi a4,t1,4 + 8003a784: 06071c63 bnez a4,8003a7fc <_ntoa_format+0x328> + 8003a788: 00837713 andi a4,t1,8 + 8003a78c: 0c071863 bnez a4,8003a85c <_ntoa_format+0x388> + 8003a790: 00337313 andi t1,t1,3 + 8003a794: 00078413 mv s0,a5 + 8003a798: fc030ae3 beqz t1,8003a76c <_ntoa_format+0x298> + 8003a79c: 000b8913 mv s2,s7 + 8003a7a0: e89ff06f j 8003a628 <_ntoa_format+0x154> + 8003a7a4: 020f1f13 slli t5,t5,0x20 + 8003a7a8: 020f5f13 srli t5,t5,0x20 + 8003a7ac: 0aff0263 beq t5,a5,8003a850 <_ntoa_format+0x37c> + 8003a7b0: 020c1913 slli s2,s8,0x20 + 8003a7b4: 02095913 srli s2,s2,0x20 + 8003a7b8: 08f90c63 beq s2,a5,8003a850 <_ntoa_format+0x37c> + 8003a7bc: 01000713 li a4,16 + 8003a7c0: 06e88663 beq a7,a4,8003a82c <_ntoa_format+0x358> + 8003a7c4: 00200713 li a4,2 + 8003a7c8: f6e89ce3 bne a7,a4,8003a740 <_ntoa_format+0x26c> + 8003a7cc: 02000713 li a4,32 + 8003a7d0: f8e788e3 beq a5,a4,8003a760 <_ntoa_format+0x28c> + 8003a7d4: 00f986b3 add a3,s3,a5 + 8003a7d8: 00178793 addi a5,a5,1 + 8003a7dc: f5dff06f j 8003a738 <_ntoa_format+0x264> + 8003a7e0: 00337313 andi t1,t1,3 + 8003a7e4: 0c030063 beqz t1,8003a8a4 <_ntoa_format+0x3d0> + 8003a7e8: 000b8913 mv s2,s7 + 8003a7ec: 02000413 li s0,32 + 8003a7f0: e3dff06f j 8003a62c <_ntoa_format+0x158> + 8003a7f4: 000b8913 mv s2,s7 + 8003a7f8: e35ff06f j 8003a62c <_ntoa_format+0x158> + 8003a7fc: 00f98733 add a4,s3,a5 + 8003a800: 00178413 addi s0,a5,1 + 8003a804: 02b00793 li a5,43 + 8003a808: 00f70023 sb a5,0(a4) + 8003a80c: de1ff06f j 8003a5ec <_ntoa_format+0x118> + 8003a810: d8d7fee3 bgeu a5,a3,8003a5ac <_ntoa_format+0xd8> + 8003a814: 02000713 li a4,32 + 8003a818: d2e79ee3 bne a5,a4,8003a554 <_ntoa_format+0x80> + 8003a81c: 0e0e8c63 beqz t4,8003a914 <_ntoa_format+0x440> + 8003a820: 40037793 andi a5,t1,1024 + 8003a824: f2079ee3 bnez a5,8003a760 <_ntoa_format+0x28c> + 8003a828: ee5ff06f j 8003a70c <_ntoa_format+0x238> + 8003a82c: 02037713 andi a4,t1,32 + 8003a830: 04071c63 bnez a4,8003a888 <_ntoa_format+0x3b4> + 8003a834: 02000713 li a4,32 + 8003a838: f2e784e3 beq a5,a4,8003a760 <_ntoa_format+0x28c> + 8003a83c: 00f98733 add a4,s3,a5 + 8003a840: 00178793 addi a5,a5,1 + 8003a844: 07800693 li a3,120 + 8003a848: 00d70023 sb a3,0(a4) + 8003a84c: ef5ff06f j 8003a740 <_ntoa_format+0x26c> + 8003a850: fff78713 addi a4,a5,-1 + 8003a854: d60704e3 beqz a4,8003a5bc <_ntoa_format+0xe8> + 8003a858: ec5ff06f j 8003a71c <_ntoa_format+0x248> + 8003a85c: 00f98733 add a4,s3,a5 + 8003a860: 00178413 addi s0,a5,1 + 8003a864: 02000793 li a5,32 + 8003a868: 00f70023 sb a5,0(a4) + 8003a86c: d81ff06f j 8003a5ec <_ntoa_format+0x118> + 8003a870: 02037793 andi a5,t1,32 + 8003a874: 02079c63 bnez a5,8003a8ac <_ntoa_format+0x3d8> + 8003a878: 07800793 li a5,120 + 8003a87c: 00f98023 sb a5,0(s3) + 8003a880: 00100793 li a5,1 + 8003a884: ec5ff06f j 8003a748 <_ntoa_format+0x274> + 8003a888: 02000713 li a4,32 + 8003a88c: ece78ae3 beq a5,a4,8003a760 <_ntoa_format+0x28c> + 8003a890: 00f98733 add a4,s3,a5 + 8003a894: 05800693 li a3,88 + 8003a898: 00d70023 sb a3,0(a4) + 8003a89c: 00178793 addi a5,a5,1 + 8003a8a0: ea1ff06f j 8003a740 <_ntoa_format+0x26c> + 8003a8a4: 02000413 li s0,32 + 8003a8a8: d4dff06f j 8003a5f4 <_ntoa_format+0x120> + 8003a8ac: 05800793 li a5,88 + 8003a8b0: 00f98023 sb a5,0(s3) + 8003a8b4: 00100793 li a5,1 + 8003a8b8: e91ff06f j 8003a748 <_ntoa_format+0x274> + 8003a8bc: 06200793 li a5,98 + 8003a8c0: 00f98023 sb a5,0(s3) + 8003a8c4: 00100793 li a5,1 + 8003a8c8: e81ff06f j 8003a748 <_ntoa_format+0x274> + 8003a8cc: e2051ae3 bnez a0,8003a700 <_ntoa_format+0x22c> + 8003a8d0: 000c8c13 mv s8,s9 + 8003a8d4: f49ff06f j 8003a81c <_ntoa_format+0x348> + 8003a8d8: 02037693 andi a3,t1,32 + 8003a8dc: ffe78713 addi a4,a5,-2 + 8003a8e0: 00069863 bnez a3,8003a8f0 <_ntoa_format+0x41c> + 8003a8e4: 00e98733 add a4,s3,a4 + 8003a8e8: fff78793 addi a5,a5,-1 + 8003a8ec: f59ff06f j 8003a844 <_ntoa_format+0x370> + 8003a8f0: 00070793 mv a5,a4 + 8003a8f4: f9dff06f j 8003a890 <_ntoa_format+0x3bc> + 8003a8f8: 000e8e63 beqz t4,8003a914 <_ntoa_format+0x440> + 8003a8fc: 40037713 andi a4,t1,1024 + 8003a900: 00071e63 bnez a4,8003a91c <_ntoa_format+0x448> + 8003a904: 02ff0e63 beq t5,a5,8003a940 <_ntoa_format+0x46c> + 8003a908: e4fc1ce3 bne s8,a5,8003a760 <_ntoa_format+0x28c> + 8003a90c: 01f00713 li a4,31 + 8003a910: e0dff06f j 8003a71c <_ntoa_format+0x248> + 8003a914: 02000413 li s0,32 + 8003a918: cd5ff06f j 8003a5ec <_ntoa_format+0x118> + 8003a91c: 01000793 li a5,16 + 8003a920: 02f88c63 beq a7,a5,8003a958 <_ntoa_format+0x484> + 8003a924: 00200793 li a5,2 + 8003a928: e2f88ce3 beq a7,a5,8003a760 <_ntoa_format+0x28c> + 8003a92c: 00337313 andi t1,t1,3 + 8003a930: ea031ce3 bnez t1,8003a7e8 <_ntoa_format+0x314> + 8003a934: 02000413 li s0,32 + 8003a938: cd2464e3 bltu s0,s2,8003a600 <_ntoa_format+0x12c> + 8003a93c: e3dff06f j 8003a778 <_ntoa_format+0x2a4> + 8003a940: 01000713 li a4,16 + 8003a944: f8e88ae3 beq a7,a4,8003a8d8 <_ntoa_format+0x404> + 8003a948: 00200793 li a5,2 + 8003a94c: 00f88c63 beq a7,a5,8003a964 <_ntoa_format+0x490> + 8003a950: 01f00793 li a5,31 + 8003a954: df5ff06f j 8003a748 <_ntoa_format+0x274> + 8003a958: 02037793 andi a5,t1,32 + 8003a95c: fc0788e3 beqz a5,8003a92c <_ntoa_format+0x458> + 8003a960: e01ff06f j 8003a760 <_ntoa_format+0x28c> + 8003a964: 01f00713 li a4,31 + 8003a968: dc9ff06f j 8003a730 <_ntoa_format+0x25c> + +000000008003a96c <_ntoa_long>: + 8003a96c: f4010113 addi sp,sp,-192 + 8003a970: 09413823 sd s4,144(sp) + 8003a974: 09513423 sd s5,136(sp) + 8003a978: 09613023 sd s6,128(sp) + 8003a97c: 07713c23 sd s7,120(sp) + 8003a980: 07813823 sd s8,112(sp) + 8003a984: 07913423 sd s9,104(sp) + 8003a988: 05b13c23 sd s11,88(sp) + 8003a98c: 0a113c23 sd ra,184(sp) + 8003a990: 0a813823 sd s0,176(sp) + 8003a994: 0a913423 sd s1,168(sp) + 8003a998: 0b213023 sd s2,160(sp) + 8003a99c: 09313c23 sd s3,152(sp) + 8003a9a0: 07a13023 sd s10,96(sp) + 8003a9a4: 02a13023 sd a0,32(sp) + 8003a9a8: 03113423 sd a7,40(sp) + 8003a9ac: 0c812a03 lw s4,200(sp) + 8003a9b0: 00070d93 mv s11,a4 + 8003a9b4: 00058b13 mv s6,a1 + 8003a9b8: 00060b93 mv s7,a2 + 8003a9bc: 00068c13 mv s8,a3 + 8003a9c0: 00078c93 mv s9,a5 + 8003a9c4: 00080a93 mv s5,a6 + 8003a9c8: 00071863 bnez a4,8003a9d8 <_ntoa_long+0x6c> + 8003a9cc: 400a7793 andi a5,s4,1024 + 8003a9d0: fefa7a13 andi s4,s4,-17 + 8003a9d4: 0e079663 bnez a5,8003aac0 <_ntoa_long+0x154> + 8003a9d8: 020a7793 andi a5,s4,32 + 8003a9dc: 06100413 li s0,97 + 8003a9e0: 0c079c63 bnez a5,8003aab8 <_ntoa_long+0x14c> + 8003a9e4: 00000d13 li s10,0 + 8003a9e8: 03010493 addi s1,sp,48 + 8003a9ec: 00900913 li s2,9 + 8003a9f0: ff64041b addiw s0,s0,-10 + 8003a9f4: 02000993 li s3,32 + 8003a9f8: 00c0006f j 8003aa04 <_ntoa_long+0x98> + 8003a9fc: 053d0463 beq s10,s3,8003aa44 <_ntoa_long+0xd8> + 8003aa00: 00050d93 mv s11,a0 + 8003aa04: 000a8593 mv a1,s5 + 8003aa08: 000d8513 mv a0,s11 + 8003aa0c: c64ff0ef jal ra,80039e70 <__umoddi3> + 8003aa10: 0ff57313 andi t1,a0,255 + 8003aa14: 0303071b addiw a4,t1,48 + 8003aa18: 0064033b addw t1,s0,t1 + 8003aa1c: 0ff37313 andi t1,t1,255 + 8003aa20: 00a96463 bltu s2,a0,8003aa28 <_ntoa_long+0xbc> + 8003aa24: 0ff77313 andi t1,a4,255 + 8003aa28: 001d0d13 addi s10,s10,1 + 8003aa2c: 01a48733 add a4,s1,s10 + 8003aa30: 000d8513 mv a0,s11 + 8003aa34: 000a8593 mv a1,s5 + 8003aa38: fe670fa3 sb t1,-1(a4) + 8003aa3c: becff0ef jal ra,80039e28 <__udivdi3> + 8003aa40: fb5dfee3 bgeu s11,s5,8003a9fc <_ntoa_long+0x90> + 8003aa44: 0c012703 lw a4,192(sp) + 8003aa48: 02813783 ld a5,40(sp) + 8003aa4c: 02013503 ld a0,32(sp) + 8003aa50: 01413823 sd s4,16(sp) + 8003aa54: 00e13423 sd a4,8(sp) + 8003aa58: 00f13023 sd a5,0(sp) + 8003aa5c: 000a889b sext.w a7,s5 + 8003aa60: 000c8813 mv a6,s9 + 8003aa64: 000d0793 mv a5,s10 + 8003aa68: 00048713 mv a4,s1 + 8003aa6c: 000c0693 mv a3,s8 + 8003aa70: 000b8613 mv a2,s7 + 8003aa74: 000b0593 mv a1,s6 + 8003aa78: a5dff0ef jal ra,8003a4d4 <_ntoa_format> + 8003aa7c: 0b813083 ld ra,184(sp) + 8003aa80: 0b013403 ld s0,176(sp) + 8003aa84: 0a813483 ld s1,168(sp) + 8003aa88: 0a013903 ld s2,160(sp) + 8003aa8c: 09813983 ld s3,152(sp) + 8003aa90: 09013a03 ld s4,144(sp) + 8003aa94: 08813a83 ld s5,136(sp) + 8003aa98: 08013b03 ld s6,128(sp) + 8003aa9c: 07813b83 ld s7,120(sp) + 8003aaa0: 07013c03 ld s8,112(sp) + 8003aaa4: 06813c83 ld s9,104(sp) + 8003aaa8: 06013d03 ld s10,96(sp) + 8003aaac: 05813d83 ld s11,88(sp) + 8003aab0: 0c010113 addi sp,sp,192 + 8003aab4: 00008067 ret + 8003aab8: 04100413 li s0,65 + 8003aabc: f29ff06f j 8003a9e4 <_ntoa_long+0x78> + 8003aac0: 00000d13 li s10,0 + 8003aac4: 03010493 addi s1,sp,48 + 8003aac8: f7dff06f j 8003aa44 <_ntoa_long+0xd8> + +000000008003aacc <_ntoa_long_long>: + 8003aacc: f4010113 addi sp,sp,-192 + 8003aad0: 09413823 sd s4,144(sp) + 8003aad4: 09513423 sd s5,136(sp) + 8003aad8: 09613023 sd s6,128(sp) + 8003aadc: 07713c23 sd s7,120(sp) + 8003aae0: 07813823 sd s8,112(sp) + 8003aae4: 07913423 sd s9,104(sp) + 8003aae8: 05b13c23 sd s11,88(sp) + 8003aaec: 0a113c23 sd ra,184(sp) + 8003aaf0: 0a813823 sd s0,176(sp) + 8003aaf4: 0a913423 sd s1,168(sp) + 8003aaf8: 0b213023 sd s2,160(sp) + 8003aafc: 09313c23 sd s3,152(sp) + 8003ab00: 07a13023 sd s10,96(sp) + 8003ab04: 02a13023 sd a0,32(sp) + 8003ab08: 03113423 sd a7,40(sp) + 8003ab0c: 0c812a03 lw s4,200(sp) + 8003ab10: 00070d93 mv s11,a4 + 8003ab14: 00058b13 mv s6,a1 + 8003ab18: 00060b93 mv s7,a2 + 8003ab1c: 00068c13 mv s8,a3 + 8003ab20: 00078c93 mv s9,a5 + 8003ab24: 00080a93 mv s5,a6 + 8003ab28: 00071863 bnez a4,8003ab38 <_ntoa_long_long+0x6c> + 8003ab2c: 400a7793 andi a5,s4,1024 + 8003ab30: fefa7a13 andi s4,s4,-17 + 8003ab34: 0e079663 bnez a5,8003ac20 <_ntoa_long_long+0x154> + 8003ab38: 020a7793 andi a5,s4,32 + 8003ab3c: 06100413 li s0,97 + 8003ab40: 0c079c63 bnez a5,8003ac18 <_ntoa_long_long+0x14c> + 8003ab44: 00000d13 li s10,0 + 8003ab48: 03010493 addi s1,sp,48 + 8003ab4c: 00900913 li s2,9 + 8003ab50: ff64041b addiw s0,s0,-10 + 8003ab54: 02000993 li s3,32 + 8003ab58: 00c0006f j 8003ab64 <_ntoa_long_long+0x98> + 8003ab5c: 053d0463 beq s10,s3,8003aba4 <_ntoa_long_long+0xd8> + 8003ab60: 00050d93 mv s11,a0 + 8003ab64: 000a8593 mv a1,s5 + 8003ab68: 000d8513 mv a0,s11 + 8003ab6c: b04ff0ef jal ra,80039e70 <__umoddi3> + 8003ab70: 0ff57313 andi t1,a0,255 + 8003ab74: 0303071b addiw a4,t1,48 + 8003ab78: 0064033b addw t1,s0,t1 + 8003ab7c: 0ff37313 andi t1,t1,255 + 8003ab80: 00a96463 bltu s2,a0,8003ab88 <_ntoa_long_long+0xbc> + 8003ab84: 0ff77313 andi t1,a4,255 + 8003ab88: 001d0d13 addi s10,s10,1 + 8003ab8c: 01a48733 add a4,s1,s10 + 8003ab90: 000d8513 mv a0,s11 + 8003ab94: 000a8593 mv a1,s5 + 8003ab98: fe670fa3 sb t1,-1(a4) + 8003ab9c: a8cff0ef jal ra,80039e28 <__udivdi3> + 8003aba0: fb5dfee3 bgeu s11,s5,8003ab5c <_ntoa_long_long+0x90> + 8003aba4: 0c012703 lw a4,192(sp) + 8003aba8: 02813783 ld a5,40(sp) + 8003abac: 02013503 ld a0,32(sp) + 8003abb0: 01413823 sd s4,16(sp) + 8003abb4: 00e13423 sd a4,8(sp) + 8003abb8: 00f13023 sd a5,0(sp) + 8003abbc: 000a889b sext.w a7,s5 + 8003abc0: 000c8813 mv a6,s9 + 8003abc4: 000d0793 mv a5,s10 + 8003abc8: 00048713 mv a4,s1 + 8003abcc: 000c0693 mv a3,s8 + 8003abd0: 000b8613 mv a2,s7 + 8003abd4: 000b0593 mv a1,s6 + 8003abd8: 8fdff0ef jal ra,8003a4d4 <_ntoa_format> + 8003abdc: 0b813083 ld ra,184(sp) + 8003abe0: 0b013403 ld s0,176(sp) + 8003abe4: 0a813483 ld s1,168(sp) + 8003abe8: 0a013903 ld s2,160(sp) + 8003abec: 09813983 ld s3,152(sp) + 8003abf0: 09013a03 ld s4,144(sp) + 8003abf4: 08813a83 ld s5,136(sp) + 8003abf8: 08013b03 ld s6,128(sp) + 8003abfc: 07813b83 ld s7,120(sp) + 8003ac00: 07013c03 ld s8,112(sp) + 8003ac04: 06813c83 ld s9,104(sp) + 8003ac08: 06013d03 ld s10,96(sp) + 8003ac0c: 05813d83 ld s11,88(sp) + 8003ac10: 0c010113 addi sp,sp,192 + 8003ac14: 00008067 ret + 8003ac18: 04100413 li s0,65 + 8003ac1c: f29ff06f j 8003ab44 <_ntoa_long_long+0x78> + 8003ac20: 00000d13 li s10,0 + 8003ac24: 03010493 addi s1,sp,48 + 8003ac28: f7dff06f j 8003aba4 <_ntoa_long_long+0xd8> + +000000008003ac2c <_vsnprintf>: + 8003ac2c: f6010113 addi sp,sp,-160 + 8003ac30: 08913423 sd s1,136(sp) + 8003ac34: 09213023 sd s2,128(sp) + 8003ac38: 07313c23 sd s3,120(sp) + 8003ac3c: 05713c23 sd s7,88(sp) + 8003ac40: 05813823 sd s8,80(sp) + 8003ac44: 08113c23 sd ra,152(sp) + 8003ac48: 08813823 sd s0,144(sp) + 8003ac4c: 07413823 sd s4,112(sp) + 8003ac50: 07513423 sd s5,104(sp) + 8003ac54: 07613023 sd s6,96(sp) + 8003ac58: 05913423 sd s9,72(sp) + 8003ac5c: 05a13023 sd s10,64(sp) + 8003ac60: 03b13c23 sd s11,56(sp) + 8003ac64: 00058493 mv s1,a1 + 8003ac68: 00060c13 mv s8,a2 + 8003ac6c: 00068b93 mv s7,a3 + 8003ac70: 00070993 mv s3,a4 + 8003ac74: 00000917 auipc s2,0x0 + 8003ac78: 85c90913 addi s2,s2,-1956 # 8003a4d0 <_out_null> + 8003ac7c: 00058463 beqz a1,8003ac84 <_vsnprintf+0x58> + 8003ac80: 00050913 mv s2,a0 + 8003ac84: 000bc503 lbu a0,0(s7) + 8003ac88: 00000d13 li s10,0 + 8003ac8c: 66050663 beqz a0,8003b2f8 <_vsnprintf+0x6cc> + 8003ac90: 000107b7 lui a5,0x10 + 8003ac94: fff78793 addi a5,a5,-1 # ffff <_entry_offset+0xffff> + 8003ac98: 02500a13 li s4,37 + 8003ac9c: 0000c417 auipc s0,0xc + 8003aca0: ac440413 addi s0,s0,-1340 # 80046760 + 8003aca4: 00f13c23 sd a5,24(sp) + 8003aca8: 0200006f j 8003acc8 <_vsnprintf+0x9c> + 8003acac: 000d0613 mv a2,s10 + 8003acb0: 000c0693 mv a3,s8 + 8003acb4: 00048593 mv a1,s1 + 8003acb8: 001d0d13 addi s10,s10,1 + 8003acbc: 000900e7 jalr s2 + 8003acc0: 000bc503 lbu a0,0(s7) + 8003acc4: 1c050263 beqz a0,8003ae88 <_vsnprintf+0x25c> + 8003acc8: 001b8b93 addi s7,s7,1 + 8003accc: ff4510e3 bne a0,s4,8003acac <_vsnprintf+0x80> + 8003acd0: 00000593 li a1,0 + 8003acd4: 01000813 li a6,16 + 8003acd8: 000bc503 lbu a0,0(s7) + 8003acdc: 001b8713 addi a4,s7,1 + 8003ace0: 00070613 mv a2,a4 + 8003ace4: fe05079b addiw a5,a0,-32 + 8003ace8: 0ff7f793 andi a5,a5,255 + 8003acec: 00f86c63 bltu a6,a5,8003ad04 <_vsnprintf+0xd8> + 8003acf0: 00279793 slli a5,a5,0x2 + 8003acf4: 008787b3 add a5,a5,s0 + 8003acf8: 0007a783 lw a5,0(a5) + 8003acfc: 008787b3 add a5,a5,s0 + 8003ad00: 00078067 jr a5 + 8003ad04: fd05079b addiw a5,a0,-48 + 8003ad08: 0ff7f793 andi a5,a5,255 + 8003ad0c: 00900813 li a6,9 + 8003ad10: 0ef87c63 bgeu a6,a5,8003ae08 <_vsnprintf+0x1dc> + 8003ad14: 02a00793 li a5,42 + 8003ad18: 20f50463 beq a0,a5,8003af20 <_vsnprintf+0x2f4> + 8003ad1c: 000b8613 mv a2,s7 + 8003ad20: 00000d93 li s11,0 + 8003ad24: 00070b93 mv s7,a4 + 8003ad28: 02e00793 li a5,46 + 8003ad2c: 00000c93 li s9,0 + 8003ad30: 12f50463 beq a0,a5,8003ae58 <_vsnprintf+0x22c> + 8003ad34: f985079b addiw a5,a0,-104 + 8003ad38: 0ff7f793 andi a5,a5,255 + 8003ad3c: 01200713 li a4,18 + 8003ad40: 08f76463 bltu a4,a5,8003adc8 <_vsnprintf+0x19c> + 8003ad44: 0000c717 auipc a4,0xc + 8003ad48: a6070713 addi a4,a4,-1440 # 800467a4 + 8003ad4c: 00279793 slli a5,a5,0x2 + 8003ad50: 00e787b3 add a5,a5,a4 + 8003ad54: 0007a783 lw a5,0(a5) + 8003ad58: 00e787b3 add a5,a5,a4 + 8003ad5c: 00078067 jr a5 + 8003ad60: 0015e593 ori a1,a1,1 + 8003ad64: 0005859b sext.w a1,a1 + 8003ad68: 00070b93 mv s7,a4 + 8003ad6c: f6dff06f j 8003acd8 <_vsnprintf+0xac> + 8003ad70: 0025e593 ori a1,a1,2 + 8003ad74: 0005859b sext.w a1,a1 + 8003ad78: 00070b93 mv s7,a4 + 8003ad7c: f5dff06f j 8003acd8 <_vsnprintf+0xac> + 8003ad80: 0045e593 ori a1,a1,4 + 8003ad84: 0005859b sext.w a1,a1 + 8003ad88: 00070b93 mv s7,a4 + 8003ad8c: f4dff06f j 8003acd8 <_vsnprintf+0xac> + 8003ad90: 0105e593 ori a1,a1,16 + 8003ad94: 0005859b sext.w a1,a1 + 8003ad98: 00070b93 mv s7,a4 + 8003ad9c: f3dff06f j 8003acd8 <_vsnprintf+0xac> + 8003ada0: 0085e593 ori a1,a1,8 + 8003ada4: 0005859b sext.w a1,a1 + 8003ada8: 00070b93 mv s7,a4 + 8003adac: f2dff06f j 8003acd8 <_vsnprintf+0xac> + 8003adb0: 00164503 lbu a0,1(a2) + 8003adb4: 06800793 li a5,104 + 8003adb8: 52f50663 beq a0,a5,8003b2e4 <_vsnprintf+0x6b8> + 8003adbc: 0805e593 ori a1,a1,128 + 8003adc0: 0005859b sext.w a1,a1 + 8003adc4: 001b8b93 addi s7,s7,1 + 8003adc8: fdb5079b addiw a5,a0,-37 + 8003adcc: 0ff7f793 andi a5,a5,255 + 8003add0: 05300713 li a4,83 + 8003add4: ecf76ce3 bltu a4,a5,8003acac <_vsnprintf+0x80> + 8003add8: 0000c717 auipc a4,0xc + 8003addc: a1870713 addi a4,a4,-1512 # 800467f0 + 8003ade0: 00279793 slli a5,a5,0x2 + 8003ade4: 00e787b3 add a5,a5,a4 + 8003ade8: 0007a783 lw a5,0(a5) + 8003adec: 00e787b3 add a5,a5,a4 + 8003adf0: 00078067 jr a5 + 8003adf4: 00164503 lbu a0,1(a2) + 8003adf8: 1005e593 ori a1,a1,256 + 8003adfc: 0005859b sext.w a1,a1 + 8003ae00: 001b8b93 addi s7,s7,1 + 8003ae04: fc5ff06f j 8003adc8 <_vsnprintf+0x19c> + 8003ae08: 00000d93 li s11,0 + 8003ae0c: 00900813 li a6,9 + 8003ae10: 0080006f j 8003ae18 <_vsnprintf+0x1ec> + 8003ae14: 00170713 addi a4,a4,1 + 8003ae18: 002d979b slliw a5,s11,0x2 + 8003ae1c: 01b787bb addw a5,a5,s11 + 8003ae20: 0017979b slliw a5,a5,0x1 + 8003ae24: 00a787bb addw a5,a5,a0 + 8003ae28: 00074503 lbu a0,0(a4) + 8003ae2c: 000b8893 mv a7,s7 + 8003ae30: fd078d9b addiw s11,a5,-48 + 8003ae34: fd05061b addiw a2,a0,-48 + 8003ae38: 0ff67613 andi a2,a2,255 + 8003ae3c: 00070b93 mv s7,a4 + 8003ae40: fcc87ae3 bgeu a6,a2,8003ae14 <_vsnprintf+0x1e8> + 8003ae44: 02e00793 li a5,46 + 8003ae48: 00070613 mv a2,a4 + 8003ae4c: 00288b93 addi s7,a7,2 + 8003ae50: 00000c93 li s9,0 + 8003ae54: eef510e3 bne a0,a5,8003ad34 <_vsnprintf+0x108> + 8003ae58: 00164503 lbu a0,1(a2) + 8003ae5c: 4005e593 ori a1,a1,1024 + 8003ae60: 00900713 li a4,9 + 8003ae64: fd05079b addiw a5,a0,-48 + 8003ae68: 0ff7f793 andi a5,a5,255 + 8003ae6c: 0005859b sext.w a1,a1 + 8003ae70: 06f77c63 bgeu a4,a5,8003aee8 <_vsnprintf+0x2bc> + 8003ae74: 02a00793 li a5,42 + 8003ae78: 32f50e63 beq a0,a5,8003b1b4 <_vsnprintf+0x588> + 8003ae7c: 000b8613 mv a2,s7 + 8003ae80: 001b8b93 addi s7,s7,1 + 8003ae84: eb1ff06f j 8003ad34 <_vsnprintf+0x108> + 8003ae88: 000d041b sext.w s0,s10 + 8003ae8c: 018d6463 bltu s10,s8,8003ae94 <_vsnprintf+0x268> + 8003ae90: fffc0d13 addi s10,s8,-1 + 8003ae94: 000c0693 mv a3,s8 + 8003ae98: 000d0613 mv a2,s10 + 8003ae9c: 00048593 mv a1,s1 + 8003aea0: 00000513 li a0,0 + 8003aea4: 000900e7 jalr s2 + 8003aea8: 09813083 ld ra,152(sp) + 8003aeac: 00040513 mv a0,s0 + 8003aeb0: 09013403 ld s0,144(sp) + 8003aeb4: 08813483 ld s1,136(sp) + 8003aeb8: 08013903 ld s2,128(sp) + 8003aebc: 07813983 ld s3,120(sp) + 8003aec0: 07013a03 ld s4,112(sp) + 8003aec4: 06813a83 ld s5,104(sp) + 8003aec8: 06013b03 ld s6,96(sp) + 8003aecc: 05813b83 ld s7,88(sp) + 8003aed0: 05013c03 ld s8,80(sp) + 8003aed4: 04813c83 ld s9,72(sp) + 8003aed8: 04013d03 ld s10,64(sp) + 8003aedc: 03813d83 ld s11,56(sp) + 8003aee0: 0a010113 addi sp,sp,160 + 8003aee4: 00008067 ret + 8003aee8: 002c979b slliw a5,s9,0x2 + 8003aeec: 019788bb addw a7,a5,s9 + 8003aef0: 000b8813 mv a6,s7 + 8003aef4: 0018989b slliw a7,a7,0x1 + 8003aef8: 001b8b93 addi s7,s7,1 + 8003aefc: 00a888bb addw a7,a7,a0 + 8003af00: 000bc503 lbu a0,0(s7) + 8003af04: fd088c9b addiw s9,a7,-48 + 8003af08: fd05079b addiw a5,a0,-48 + 8003af0c: 0ff7f793 andi a5,a5,255 + 8003af10: fcf77ce3 bgeu a4,a5,8003aee8 <_vsnprintf+0x2bc> + 8003af14: 000b8613 mv a2,s7 + 8003af18: 00280b93 addi s7,a6,2 + 8003af1c: e19ff06f j 8003ad34 <_vsnprintf+0x108> + 8003af20: 0009a783 lw a5,0(s3) + 8003af24: 00898993 addi s3,s3,8 + 8003af28: 00078d9b sext.w s11,a5 + 8003af2c: 0007c863 bltz a5,8003af3c <_vsnprintf+0x310> + 8003af30: 001bc503 lbu a0,1(s7) + 8003af34: 002b8b93 addi s7,s7,2 + 8003af38: df1ff06f j 8003ad28 <_vsnprintf+0xfc> + 8003af3c: 0025e593 ori a1,a1,2 + 8003af40: 001bc503 lbu a0,1(s7) + 8003af44: 0005859b sext.w a1,a1 + 8003af48: 40f00dbb negw s11,a5 + 8003af4c: 002b8b93 addi s7,s7,2 + 8003af50: dd9ff06f j 8003ad28 <_vsnprintf+0xfc> + 8003af54: 07800793 li a5,120 + 8003af58: 00898a93 addi s5,s3,8 + 8003af5c: 56f50063 beq a0,a5,8003b4bc <_vsnprintf+0x890> + 8003af60: 05800793 li a5,88 + 8003af64: 28f50463 beq a0,a5,8003b1ec <_vsnprintf+0x5c0> + 8003af68: 06f00793 li a5,111 + 8003af6c: 4af50c63 beq a0,a5,8003b424 <_vsnprintf+0x7f8> + 8003af70: 06200793 li a5,98 + 8003af74: 54f50063 beq a0,a5,8003b4b4 <_vsnprintf+0x888> + 8003af78: fef5ff13 andi t5,a1,-17 + 8003af7c: 4005f793 andi a5,a1,1024 + 8003af80: 06900713 li a4,105 + 8003af84: 000f0f1b sext.w t5,t5 + 8003af88: 0007879b sext.w a5,a5 + 8003af8c: 5ae51063 bne a0,a4,8003b52c <_vsnprintf+0x900> + 8003af90: 48079663 bnez a5,8003b41c <_vsnprintf+0x7f0> + 8003af94: 2005f593 andi a1,a1,512 + 8003af98: 0005879b sext.w a5,a1 + 8003af9c: 00a00813 li a6,10 + 8003afa0: 42079663 bnez a5,8003b3cc <_vsnprintf+0x7a0> + 8003afa4: 100f7793 andi a5,t5,256 + 8003afa8: 000f0613 mv a2,t5 + 8003afac: 4e079063 bnez a5,8003b48c <_vsnprintf+0x860> + 8003afb0: 040f7713 andi a4,t5,64 + 8003afb4: 0009a783 lw a5,0(s3) + 8003afb8: 4a071a63 bnez a4,8003b46c <_vsnprintf+0x840> + 8003afbc: 08067613 andi a2,a2,128 + 8003afc0: 52060a63 beqz a2,8003b4f4 <_vsnprintf+0x8c8> + 8003afc4: 0107979b slliw a5,a5,0x10 + 8003afc8: 4107d79b sraiw a5,a5,0x10 + 8003afcc: 40f7d61b sraiw a2,a5,0xf + 8003afd0: 00c7c733 xor a4,a5,a2 + 8003afd4: 40c7073b subw a4,a4,a2 + 8003afd8: 03071713 slli a4,a4,0x30 + 8003afdc: 03075713 srli a4,a4,0x30 + 8003afe0: 000d0613 mv a2,s10 + 8003afe4: 01e13423 sd t5,8(sp) + 8003afe8: 01b13023 sd s11,0(sp) + 8003afec: 000c8893 mv a7,s9 + 8003aff0: 01f7d79b srliw a5,a5,0x1f + 8003aff4: 000c0693 mv a3,s8 + 8003aff8: 00048593 mv a1,s1 + 8003affc: 00090513 mv a0,s2 + 8003b000: 96dff0ef jal ra,8003a96c <_ntoa_long> + 8003b004: 00050d13 mv s10,a0 + 8003b008: 000a8993 mv s3,s5 + 8003b00c: cb5ff06f j 8003acc0 <_vsnprintf+0x94> + 8003b010: 00164503 lbu a0,1(a2) + 8003b014: 06c00793 li a5,108 + 8003b018: def510e3 bne a0,a5,8003adf8 <_vsnprintf+0x1cc> + 8003b01c: 3005e593 ori a1,a1,768 + 8003b020: 00264503 lbu a0,2(a2) + 8003b024: 0005859b sext.w a1,a1 + 8003b028: 00360b93 addi s7,a2,3 + 8003b02c: d9dff06f j 8003adc8 <_vsnprintf+0x19c> + 8003b030: 00898793 addi a5,s3,8 + 8003b034: 001d0813 addi a6,s10,1 + 8003b038: 0025f593 andi a1,a1,2 + 8003b03c: 02f13023 sd a5,32(sp) + 8003b040: 00080b13 mv s6,a6 + 8003b044: 32058263 beqz a1,8003b368 <_vsnprintf+0x73c> + 8003b048: 0009c503 lbu a0,0(s3) + 8003b04c: 000c0693 mv a3,s8 + 8003b050: 000d0613 mv a2,s10 + 8003b054: 00048593 mv a1,s1 + 8003b058: 000900e7 jalr s2 + 8003b05c: 00100793 li a5,1 + 8003b060: 43b7f063 bgeu a5,s11,8003b480 <_vsnprintf+0x854> + 8003b064: ffed879b addiw a5,s11,-2 + 8003b068: 02079a93 slli s5,a5,0x20 + 8003b06c: 020ada93 srli s5,s5,0x20 + 8003b070: 002d0d13 addi s10,s10,2 + 8003b074: 015d0cb3 add s9,s10,s5 + 8003b078: 000b0613 mv a2,s6 + 8003b07c: 000c0693 mv a3,s8 + 8003b080: 001b0b13 addi s6,s6,1 + 8003b084: 00048593 mv a1,s1 + 8003b088: 02000513 li a0,32 + 8003b08c: 000900e7 jalr s2 + 8003b090: ff6c94e3 bne s9,s6,8003b078 <_vsnprintf+0x44c> + 8003b094: 02013983 ld s3,32(sp) + 8003b098: 015d0d33 add s10,s10,s5 + 8003b09c: c25ff06f j 8003acc0 <_vsnprintf+0x94> + 8003b0a0: 000d0613 mv a2,s10 + 8003b0a4: 000c0693 mv a3,s8 + 8003b0a8: 00048593 mv a1,s1 + 8003b0ac: 02500513 li a0,37 + 8003b0b0: 001d0d13 addi s10,s10,1 + 8003b0b4: 000900e7 jalr s2 + 8003b0b8: c09ff06f j 8003acc0 <_vsnprintf+0x94> + 8003b0bc: 0009ba83 ld s5,0(s3) + 8003b0c0: 00898793 addi a5,s3,8 + 8003b0c4: 02f13023 sd a5,32(sp) + 8003b0c8: 000ac503 lbu a0,0(s5) + 8003b0cc: 100c9663 bnez s9,8003b1d8 <_vsnprintf+0x5ac> + 8003b0d0: ffe00793 li a5,-2 + 8003b0d4: 42050863 beqz a0,8003b504 <_vsnprintf+0x8d8> + 8003b0d8: 00178693 addi a3,a5,1 + 8003b0dc: 00da8633 add a2,s5,a3 + 8003b0e0: 000a8793 mv a5,s5 + 8003b0e4: 0080006f j 8003b0ec <_vsnprintf+0x4c0> + 8003b0e8: 1ec78863 beq a5,a2,8003b2d8 <_vsnprintf+0x6ac> + 8003b0ec: 0017c703 lbu a4,1(a5) + 8003b0f0: 00178793 addi a5,a5,1 + 8003b0f4: fe071ae3 bnez a4,8003b0e8 <_vsnprintf+0x4bc> + 8003b0f8: 415787bb subw a5,a5,s5 + 8003b0fc: 00f13823 sd a5,16(sp) + 8003b100: 4005f793 andi a5,a1,1024 + 8003b104: 0007899b sext.w s3,a5 + 8003b108: 00078c63 beqz a5,8003b120 <_vsnprintf+0x4f4> + 8003b10c: 01013703 ld a4,16(sp) + 8003b110: 000c879b sext.w a5,s9 + 8003b114: 01977463 bgeu a4,s9,8003b11c <_vsnprintf+0x4f0> + 8003b118: 0007079b sext.w a5,a4 + 8003b11c: 00f13823 sd a5,16(sp) + 8003b120: 0025f593 andi a1,a1,2 + 8003b124: 0005879b sext.w a5,a1 + 8003b128: 02f13423 sd a5,40(sp) + 8003b12c: 1c058a63 beqz a1,8003b300 <_vsnprintf+0x6d4> + 8003b130: 14050863 beqz a0,8003b280 <_vsnprintf+0x654> + 8003b134: 000d0613 mv a2,s10 + 8003b138: 00098863 beqz s3,8003b148 <_vsnprintf+0x51c> + 8003b13c: fffc879b addiw a5,s9,-1 + 8003b140: 120c8863 beqz s9,8003b270 <_vsnprintf+0x644> + 8003b144: 00078c93 mv s9,a5 + 8003b148: 000c0693 mv a3,s8 + 8003b14c: 00048593 mv a1,s1 + 8003b150: 00160b13 addi s6,a2,1 + 8003b154: 000900e7 jalr s2 + 8003b158: 41ab07b3 sub a5,s6,s10 + 8003b15c: 00fa87b3 add a5,s5,a5 + 8003b160: 0007c503 lbu a0,0(a5) + 8003b164: 10050863 beqz a0,8003b274 <_vsnprintf+0x648> + 8003b168: 000b0613 mv a2,s6 + 8003b16c: fcdff06f j 8003b138 <_vsnprintf+0x50c> + 8003b170: 0009b703 ld a4,0(s3) + 8003b174: 0215e593 ori a1,a1,33 + 8003b178: 0005859b sext.w a1,a1 + 8003b17c: 01000793 li a5,16 + 8003b180: 000d0613 mv a2,s10 + 8003b184: 00b13423 sd a1,8(sp) + 8003b188: 00f13023 sd a5,0(sp) + 8003b18c: 000c8893 mv a7,s9 + 8003b190: 01000813 li a6,16 + 8003b194: 00000793 li a5,0 + 8003b198: 000c0693 mv a3,s8 + 8003b19c: 00048593 mv a1,s1 + 8003b1a0: 00090513 mv a0,s2 + 8003b1a4: 929ff0ef jal ra,8003aacc <_ntoa_long_long> + 8003b1a8: 00898993 addi s3,s3,8 + 8003b1ac: 00050d13 mv s10,a0 + 8003b1b0: b11ff06f j 8003acc0 <_vsnprintf+0x94> + 8003b1b4: 0009a883 lw a7,0(s3) + 8003b1b8: 00264503 lbu a0,2(a2) + 8003b1bc: 00360b93 addi s7,a2,3 + 8003b1c0: fff8c793 not a5,a7 + 8003b1c4: 43f7d793 srai a5,a5,0x3f + 8003b1c8: 00f8fcb3 and s9,a7,a5 + 8003b1cc: 00898993 addi s3,s3,8 + 8003b1d0: 00260613 addi a2,a2,2 + 8003b1d4: b61ff06f j 8003ad34 <_vsnprintf+0x108> + 8003b1d8: 020c9793 slli a5,s9,0x20 + 8003b1dc: 0207d793 srli a5,a5,0x20 + 8003b1e0: 32050263 beqz a0,8003b504 <_vsnprintf+0x8d8> + 8003b1e4: fff78793 addi a5,a5,-1 + 8003b1e8: ef1ff06f j 8003b0d8 <_vsnprintf+0x4ac> + 8003b1ec: ff35ff13 andi t5,a1,-13 + 8003b1f0: 000f0f1b sext.w t5,t5 + 8003b1f4: 4005f793 andi a5,a1,1024 + 8003b1f8: 020f6f13 ori t5,t5,32 + 8003b1fc: 20078863 beqz a5,8003b40c <_vsnprintf+0x7e0> + 8003b200: 01000813 li a6,16 + 8003b204: ffef7f13 andi t5,t5,-2 + 8003b208: 000f0f1b sext.w t5,t5 + 8003b20c: 200f7793 andi a5,t5,512 + 8003b210: 06900713 li a4,105 + 8003b214: 0007879b sext.w a5,a5 + 8003b218: d8e504e3 beq a0,a4,8003afa0 <_vsnprintf+0x374> + 8003b21c: 06400713 li a4,100 + 8003b220: d8e500e3 beq a0,a4,8003afa0 <_vsnprintf+0x374> + 8003b224: 22079663 bnez a5,8003b450 <_vsnprintf+0x824> + 8003b228: 100f7793 andi a5,t5,256 + 8003b22c: 000f0713 mv a4,t5 + 8003b230: 2a079463 bnez a5,8003b4d8 <_vsnprintf+0x8ac> + 8003b234: 040f7793 andi a5,t5,64 + 8003b238: 24079063 bnez a5,8003b478 <_vsnprintf+0x84c> + 8003b23c: 08077713 andi a4,a4,128 + 8003b240: 2c070663 beqz a4,8003b50c <_vsnprintf+0x8e0> + 8003b244: 0009a703 lw a4,0(s3) + 8003b248: 01813783 ld a5,24(sp) + 8003b24c: 00e7f733 and a4,a5,a4 + 8003b250: 02071713 slli a4,a4,0x20 + 8003b254: 000d0613 mv a2,s10 + 8003b258: 01e13423 sd t5,8(sp) + 8003b25c: 01b13023 sd s11,0(sp) + 8003b260: 000c8893 mv a7,s9 + 8003b264: 00000793 li a5,0 + 8003b268: 02075713 srli a4,a4,0x20 + 8003b26c: d89ff06f j 8003aff4 <_vsnprintf+0x3c8> + 8003b270: 00060b13 mv s6,a2 + 8003b274: 02813783 ld a5,40(sp) + 8003b278: 04078a63 beqz a5,8003b2cc <_vsnprintf+0x6a0> + 8003b27c: 000b0d13 mv s10,s6 + 8003b280: 01013703 ld a4,16(sp) + 8003b284: 0db77e63 bgeu a4,s11,8003b360 <_vsnprintf+0x734> + 8003b288: fffd879b addiw a5,s11,-1 + 8003b28c: 40e7873b subw a4,a5,a4 + 8003b290: 02071713 slli a4,a4,0x20 + 8003b294: 02075713 srli a4,a4,0x20 + 8003b298: 001d0813 addi a6,s10,1 + 8003b29c: 01070b33 add s6,a4,a6 + 8003b2a0: 0080006f j 8003b2a8 <_vsnprintf+0x67c> + 8003b2a4: 00180813 addi a6,a6,1 + 8003b2a8: 000d0613 mv a2,s10 + 8003b2ac: 01013823 sd a6,16(sp) + 8003b2b0: 000c0693 mv a3,s8 + 8003b2b4: 00048593 mv a1,s1 + 8003b2b8: 02000513 li a0,32 + 8003b2bc: 00080d13 mv s10,a6 + 8003b2c0: 000900e7 jalr s2 + 8003b2c4: 01013803 ld a6,16(sp) + 8003b2c8: fd0b1ee3 bne s6,a6,8003b2a4 <_vsnprintf+0x678> + 8003b2cc: 02013983 ld s3,32(sp) + 8003b2d0: 000b0d13 mv s10,s6 + 8003b2d4: 9edff06f j 8003acc0 <_vsnprintf+0x94> + 8003b2d8: 0006879b sext.w a5,a3 + 8003b2dc: 00f13823 sd a5,16(sp) + 8003b2e0: e21ff06f j 8003b100 <_vsnprintf+0x4d4> + 8003b2e4: 0c05e593 ori a1,a1,192 + 8003b2e8: 00264503 lbu a0,2(a2) + 8003b2ec: 0005859b sext.w a1,a1 + 8003b2f0: 00360b93 addi s7,a2,3 + 8003b2f4: ad5ff06f j 8003adc8 <_vsnprintf+0x19c> + 8003b2f8: 00000413 li s0,0 + 8003b2fc: b91ff06f j 8003ae8c <_vsnprintf+0x260> + 8003b300: 01013703 ld a4,16(sp) + 8003b304: 0017079b addiw a5,a4,1 + 8003b308: 21b77c63 bgeu a4,s11,8003b520 <_vsnprintf+0x8f4> + 8003b30c: fffd879b addiw a5,s11,-1 + 8003b310: 40e787bb subw a5,a5,a4 + 8003b314: 02079793 slli a5,a5,0x20 + 8003b318: 0207d793 srli a5,a5,0x20 + 8003b31c: 001d0813 addi a6,s10,1 + 8003b320: 01078b33 add s6,a5,a6 + 8003b324: 00c0006f j 8003b330 <_vsnprintf+0x704> + 8003b328: 01013803 ld a6,16(sp) + 8003b32c: 00180813 addi a6,a6,1 + 8003b330: 000d0613 mv a2,s10 + 8003b334: 000c0693 mv a3,s8 + 8003b338: 00080d13 mv s10,a6 + 8003b33c: 01013823 sd a6,16(sp) + 8003b340: 00048593 mv a1,s1 + 8003b344: 02000513 li a0,32 + 8003b348: 000900e7 jalr s2 + 8003b34c: fd6d1ee3 bne s10,s6,8003b328 <_vsnprintf+0x6fc> + 8003b350: 000ac503 lbu a0,0(s5) + 8003b354: 001d879b addiw a5,s11,1 + 8003b358: 00f13823 sd a5,16(sp) + 8003b35c: dc051ce3 bnez a0,8003b134 <_vsnprintf+0x508> + 8003b360: 000d0b13 mv s6,s10 + 8003b364: f69ff06f j 8003b2cc <_vsnprintf+0x6a0> + 8003b368: 00100793 li a5,1 + 8003b36c: 1bb7f463 bgeu a5,s11,8003b514 <_vsnprintf+0x8e8> + 8003b370: ffed879b addiw a5,s11,-2 + 8003b374: 02079a93 slli s5,a5,0x20 + 8003b378: 020ada93 srli s5,s5,0x20 + 8003b37c: 010a8ab3 add s5,s5,a6 + 8003b380: 00c0006f j 8003b38c <_vsnprintf+0x760> + 8003b384: 01013803 ld a6,16(sp) + 8003b388: 00180813 addi a6,a6,1 + 8003b38c: 000d0613 mv a2,s10 + 8003b390: 000c0693 mv a3,s8 + 8003b394: 00080d13 mv s10,a6 + 8003b398: 01013823 sd a6,16(sp) + 8003b39c: 00048593 mv a1,s1 + 8003b3a0: 02000513 li a0,32 + 8003b3a4: 000900e7 jalr s2 + 8003b3a8: fdaa9ee3 bne s5,s10,8003b384 <_vsnprintf+0x758> + 8003b3ac: 001a8d13 addi s10,s5,1 + 8003b3b0: 0009c503 lbu a0,0(s3) + 8003b3b4: 000c0693 mv a3,s8 + 8003b3b8: 000a8613 mv a2,s5 + 8003b3bc: 00048593 mv a1,s1 + 8003b3c0: 000900e7 jalr s2 + 8003b3c4: 02013983 ld s3,32(sp) + 8003b3c8: 8f9ff06f j 8003acc0 <_vsnprintf+0x94> + 8003b3cc: 0009b783 ld a5,0(s3) + 8003b3d0: 000d0613 mv a2,s10 + 8003b3d4: 01e13423 sd t5,8(sp) + 8003b3d8: 43f7d713 srai a4,a5,0x3f + 8003b3dc: 00f745b3 xor a1,a4,a5 + 8003b3e0: 01b13023 sd s11,0(sp) + 8003b3e4: 000c8893 mv a7,s9 + 8003b3e8: 03f7d793 srli a5,a5,0x3f + 8003b3ec: 40e58733 sub a4,a1,a4 + 8003b3f0: 000c0693 mv a3,s8 + 8003b3f4: 00048593 mv a1,s1 + 8003b3f8: 00090513 mv a0,s2 + 8003b3fc: ed0ff0ef jal ra,8003aacc <_ntoa_long_long> + 8003b400: 00050d13 mv s10,a0 + 8003b404: 000a8993 mv s3,s5 + 8003b408: 8b9ff06f j 8003acc0 <_vsnprintf+0x94> + 8003b40c: 2005f793 andi a5,a1,512 + 8003b410: 0007879b sext.w a5,a5 + 8003b414: 01000813 li a6,16 + 8003b418: e0dff06f j 8003b224 <_vsnprintf+0x5f8> + 8003b41c: 00a00813 li a6,10 + 8003b420: de5ff06f j 8003b204 <_vsnprintf+0x5d8> + 8003b424: 00800813 li a6,8 + 8003b428: 00058f13 mv t5,a1 + 8003b42c: 400f7713 andi a4,t5,1024 + 8003b430: 06400613 li a2,100 + 8003b434: 000f0793 mv a5,t5 + 8003b438: 0007071b sext.w a4,a4 + 8003b43c: 0ec51c63 bne a0,a2,8003b534 <_vsnprintf+0x908> + 8003b440: dc0712e3 bnez a4,8003b204 <_vsnprintf+0x5d8> + 8003b444: 2007f793 andi a5,a5,512 + 8003b448: 0007879b sext.w a5,a5 + 8003b44c: b55ff06f j 8003afa0 <_vsnprintf+0x374> + 8003b450: 0009b703 ld a4,0(s3) + 8003b454: 000d0613 mv a2,s10 + 8003b458: 01e13423 sd t5,8(sp) + 8003b45c: 01b13023 sd s11,0(sp) + 8003b460: 000c8893 mv a7,s9 + 8003b464: 00000793 li a5,0 + 8003b468: f89ff06f j 8003b3f0 <_vsnprintf+0x7c4> + 8003b46c: 0ff7f793 andi a5,a5,255 + 8003b470: 00078713 mv a4,a5 + 8003b474: b6dff06f j 8003afe0 <_vsnprintf+0x3b4> + 8003b478: 0009c703 lbu a4,0(s3) + 8003b47c: dd5ff06f j 8003b250 <_vsnprintf+0x624> + 8003b480: 02013983 ld s3,32(sp) + 8003b484: 000b0d13 mv s10,s6 + 8003b488: 839ff06f j 8003acc0 <_vsnprintf+0x94> + 8003b48c: 0009b783 ld a5,0(s3) + 8003b490: 000d0613 mv a2,s10 + 8003b494: 01e13423 sd t5,8(sp) + 8003b498: 43f7d713 srai a4,a5,0x3f + 8003b49c: 00f745b3 xor a1,a4,a5 + 8003b4a0: 01b13023 sd s11,0(sp) + 8003b4a4: 000c8893 mv a7,s9 + 8003b4a8: 03f7d793 srli a5,a5,0x3f + 8003b4ac: 40e58733 sub a4,a1,a4 + 8003b4b0: b45ff06f j 8003aff4 <_vsnprintf+0x3c8> + 8003b4b4: 00200813 li a6,2 + 8003b4b8: f71ff06f j 8003b428 <_vsnprintf+0x7fc> + 8003b4bc: 4005f713 andi a4,a1,1024 + 8003b4c0: 0007071b sext.w a4,a4 + 8003b4c4: 01000813 li a6,16 + 8003b4c8: ff35f593 andi a1,a1,-13 + 8003b4cc: 00058f1b sext.w t5,a1 + 8003b4d0: d2071ae3 bnez a4,8003b204 <_vsnprintf+0x5d8> + 8003b4d4: d39ff06f j 8003b20c <_vsnprintf+0x5e0> + 8003b4d8: 0009b703 ld a4,0(s3) + 8003b4dc: 000d0613 mv a2,s10 + 8003b4e0: 01e13423 sd t5,8(sp) + 8003b4e4: 01b13023 sd s11,0(sp) + 8003b4e8: 000c8893 mv a7,s9 + 8003b4ec: 00000793 li a5,0 + 8003b4f0: b05ff06f j 8003aff4 <_vsnprintf+0x3c8> + 8003b4f4: 41f7d61b sraiw a2,a5,0x1f + 8003b4f8: 00c7c733 xor a4,a5,a2 + 8003b4fc: 40c7073b subw a4,a4,a2 + 8003b500: ae1ff06f j 8003afe0 <_vsnprintf+0x3b4> + 8003b504: 00013823 sd zero,16(sp) + 8003b508: bf9ff06f j 8003b100 <_vsnprintf+0x4d4> + 8003b50c: 0009a703 lw a4,0(s3) + 8003b510: d41ff06f j 8003b250 <_vsnprintf+0x624> + 8003b514: 000d0a93 mv s5,s10 + 8003b518: 00080d13 mv s10,a6 + 8003b51c: e95ff06f j 8003b3b0 <_vsnprintf+0x784> + 8003b520: 00f13823 sd a5,16(sp) + 8003b524: c00518e3 bnez a0,8003b134 <_vsnprintf+0x508> + 8003b528: e39ff06f j 8003b360 <_vsnprintf+0x734> + 8003b52c: 00a00813 li a6,10 + 8003b530: efdff06f j 8003b42c <_vsnprintf+0x800> + 8003b534: 000f0593 mv a1,t5 + 8003b538: f91ff06f j 8003b4c8 <_vsnprintf+0x89c> + +000000008003b53c <_out_char>: + 8003b53c: 00051463 bnez a0,8003b544 <_out_char+0x8> + 8003b540: 00008067 ret + 8003b544: 825fe06f j 80039d68 + +000000008003b548 : + 8003b548: fa010113 addi sp,sp,-96 + 8003b54c: 02810313 addi t1,sp,40 + 8003b550: 02b13423 sd a1,40(sp) + 8003b554: 02c13823 sd a2,48(sp) + 8003b558: 02d13c23 sd a3,56(sp) + 8003b55c: 04e13023 sd a4,64(sp) + 8003b560: 00050693 mv a3,a0 + 8003b564: 00010593 mv a1,sp + 8003b568: 00030713 mv a4,t1 + 8003b56c: fff00613 li a2,-1 + 8003b570: 00000517 auipc a0,0x0 + 8003b574: fcc50513 addi a0,a0,-52 # 8003b53c <_out_char> + 8003b578: 00113c23 sd ra,24(sp) + 8003b57c: 04f13423 sd a5,72(sp) + 8003b580: 05013823 sd a6,80(sp) + 8003b584: 05113c23 sd a7,88(sp) + 8003b588: 00613423 sd t1,8(sp) + 8003b58c: ea0ff0ef jal ra,8003ac2c <_vsnprintf> + 8003b590: 01813083 ld ra,24(sp) + 8003b594: 06010113 addi sp,sp,96 + 8003b598: 00008067 ret + +000000008003b59c : + 8003b59c: fb010113 addi sp,sp,-80 + 8003b5a0: 02010313 addi t1,sp,32 + 8003b5a4: 02c13023 sd a2,32(sp) + 8003b5a8: 02d13423 sd a3,40(sp) + 8003b5ac: 02e13823 sd a4,48(sp) + 8003b5b0: 00058693 mv a3,a1 + 8003b5b4: 00030713 mv a4,t1 + 8003b5b8: 00050593 mv a1,a0 + 8003b5bc: fff00613 li a2,-1 + 8003b5c0: fffff517 auipc a0,0xfffff + 8003b5c4: f0050513 addi a0,a0,-256 # 8003a4c0 <_out_buffer> + 8003b5c8: 00113c23 sd ra,24(sp) + 8003b5cc: 02f13c23 sd a5,56(sp) + 8003b5d0: 05013023 sd a6,64(sp) + 8003b5d4: 05113423 sd a7,72(sp) + 8003b5d8: 00613423 sd t1,8(sp) + 8003b5dc: e50ff0ef jal ra,8003ac2c <_vsnprintf> + 8003b5e0: 01813083 ld ra,24(sp) + 8003b5e4: 05010113 addi sp,sp,80 + 8003b5e8: 00008067 ret + +000000008003b5ec : + 8003b5ec: 00f00793 li a5,15 + 8003b5f0: 02c7ea63 bltu a5,a2,8003b624 + 8003b5f4: 02060463 beqz a2,8003b61c + 8003b5f8: 00a60633 add a2,a2,a0 + 8003b5fc: 40a585b3 sub a1,a1,a0 + 8003b600: 00a587b3 add a5,a1,a0 + 8003b604: 00054703 lbu a4,0(a0) + 8003b608: 0007c783 lbu a5,0(a5) + 8003b60c: 00150513 addi a0,a0,1 + 8003b610: 40f706b3 sub a3,a4,a5 + 8003b614: 04f71663 bne a4,a5,8003b660 + 8003b618: fec514e3 bne a0,a2,8003b600 + 8003b61c: 00000513 li a0,0 + 8003b620: 00008067 ret + 8003b624: 0075f793 andi a5,a1,7 + 8003b628: 00058713 mv a4,a1 + 8003b62c: 02078e63 beqz a5,8003b668 + 8003b630: 00c50633 add a2,a0,a2 + 8003b634: 0100006f j 8003b644 + 8003b638: 40a606b3 sub a3,a2,a0 + 8003b63c: 00058713 mv a4,a1 + 8003b640: 02080663 beqz a6,8003b66c + 8003b644: 0005c783 lbu a5,0(a1) + 8003b648: 00054703 lbu a4,0(a0) + 8003b64c: 00158593 addi a1,a1,1 + 8003b650: 0075f813 andi a6,a1,7 + 8003b654: 00150513 addi a0,a0,1 + 8003b658: 40f706b3 sub a3,a4,a5 + 8003b65c: fcf70ee3 beq a4,a5,8003b638 + 8003b660: 0006851b sext.w a0,a3 + 8003b664: 00008067 ret + 8003b668: 00060693 mv a3,a2 + 8003b66c: 0036d793 srli a5,a3,0x3 + 8003b670: 00757813 andi a6,a0,7 + 8003b674: ff010113 addi sp,sp,-16 + 8003b678: 0037f613 andi a2,a5,3 + 8003b67c: 0a081663 bnez a6,8003b728 + 8003b680: 00100813 li a6,1 + 8003b684: 1d060263 beq a2,a6,8003b848 + 8003b688: 00300813 li a6,3 + 8003b68c: 17060a63 beq a2,a6,8003b800 + 8003b690: 12060663 beqz a2,8003b7bc + 8003b694: 00053e03 ld t3,0(a0) + 8003b698: 0005b303 ld t1,0(a1) + 8003b69c: ff050613 addi a2,a0,-16 + 8003b6a0: ff070593 addi a1,a4,-16 + 8003b6a4: 00278793 addi a5,a5,2 + 8003b6a8: 01863883 ld a7,24(a2) + 8003b6ac: 0185b803 ld a6,24(a1) + 8003b6b0: 346e0863 beq t3,t1,8003ba00 + 8003b6b4: 01c13423 sd t3,8(sp) + 8003b6b8: 00613023 sd t1,0(sp) + 8003b6bc: 00810593 addi a1,sp,8 + 8003b6c0: 00010613 mv a2,sp + 8003b6c4: 0005c783 lbu a5,0(a1) + 8003b6c8: 00064803 lbu a6,0(a2) + 8003b6cc: 00158593 addi a1,a1,1 + 8003b6d0: 00160613 addi a2,a2,1 + 8003b6d4: ff0788e3 beq a5,a6,8003b6c4 + 8003b6d8: 410787bb subw a5,a5,a6 + 8003b6dc: 0c079c63 bnez a5,8003b7b4 + 8003b6e0: ff86f593 andi a1,a3,-8 + 8003b6e4: 0076f613 andi a2,a3,7 + 8003b6e8: 00b50533 add a0,a0,a1 + 8003b6ec: 00e585b3 add a1,a1,a4 + 8003b6f0: 0a060c63 beqz a2,8003b7a8 + 8003b6f4: 00a60633 add a2,a2,a0 + 8003b6f8: 40a585b3 sub a1,a1,a0 + 8003b6fc: 0080006f j 8003b704 + 8003b700: 0ac50463 beq a0,a2,8003b7a8 + 8003b704: 00a587b3 add a5,a1,a0 + 8003b708: 00054703 lbu a4,0(a0) + 8003b70c: 0007c783 lbu a5,0(a5) + 8003b710: 00150513 addi a0,a0,1 + 8003b714: 40f706b3 sub a3,a4,a5 + 8003b718: fef704e3 beq a4,a5,8003b700 + 8003b71c: 0006851b sext.w a0,a3 + 8003b720: 01010113 addi sp,sp,16 + 8003b724: 00008067 ret + 8003b728: 0038189b slliw a7,a6,0x3 + 8003b72c: 04000313 li t1,64 + 8003b730: 00100e13 li t3,1 + 8003b734: 411308bb subw a7,t1,a7 + 8003b738: 00381813 slli a6,a6,0x3 + 8003b73c: ff857313 andi t1,a0,-8 + 8003b740: 21c60063 beq a2,t3,8003b940 + 8003b744: 00300e13 li t3,3 + 8003b748: 1bc60063 beq a2,t3,8003b8e8 + 8003b74c: 14060463 beqz a2,8003b894 + 8003b750: 00033e83 ld t4,0(t1) + 8003b754: 00833603 ld a2,8(t1) + 8003b758: 0005b283 ld t0,0(a1) + 8003b75c: ff830f13 addi t5,t1,-8 + 8003b760: ff070593 addi a1,a4,-16 + 8003b764: 00278793 addi a5,a5,2 + 8003b768: 010ede33 srl t3,t4,a6 + 8003b76c: 01161333 sll t1,a2,a7 + 8003b770: 006e6e33 or t3,t3,t1 + 8003b774: 018f3e83 ld t4,24(t5) + 8003b778: 0185bf83 ld t6,24(a1) + 8003b77c: 285e0c63 beq t3,t0,8003ba14 + 8003b780: 01c13423 sd t3,8(sp) + 8003b784: 00513023 sd t0,0(sp) + 8003b788: 00810593 addi a1,sp,8 + 8003b78c: 00010613 mv a2,sp + 8003b790: 0005c783 lbu a5,0(a1) + 8003b794: 00064803 lbu a6,0(a2) + 8003b798: 00158593 addi a1,a1,1 + 8003b79c: 00160613 addi a2,a2,1 + 8003b7a0: ff0788e3 beq a5,a6,8003b790 + 8003b7a4: f35ff06f j 8003b6d8 + 8003b7a8: 00000513 li a0,0 + 8003b7ac: 01010113 addi sp,sp,16 + 8003b7b0: 00008067 ret + 8003b7b4: 0007851b sext.w a0,a5 + 8003b7b8: f69ff06f j 8003b720 + 8003b7bc: f20782e3 beqz a5,8003b6e0 + 8003b7c0: 00053e03 ld t3,0(a0) + 8003b7c4: 0005b303 ld t1,0(a1) + 8003b7c8: 00050613 mv a2,a0 + 8003b7cc: 00863883 ld a7,8(a2) + 8003b7d0: 0085b803 ld a6,8(a1) + 8003b7d4: 046e0063 beq t3,t1,8003b814 + 8003b7d8: 01c13423 sd t3,8(sp) + 8003b7dc: 00613023 sd t1,0(sp) + 8003b7e0: 00810593 addi a1,sp,8 + 8003b7e4: 00010613 mv a2,sp + 8003b7e8: 0005c783 lbu a5,0(a1) + 8003b7ec: 00064803 lbu a6,0(a2) + 8003b7f0: 00158593 addi a1,a1,1 + 8003b7f4: 00160613 addi a2,a2,1 + 8003b7f8: ff0788e3 beq a5,a6,8003b7e8 + 8003b7fc: eddff06f j 8003b6d8 + 8003b800: 00053883 ld a7,0(a0) + 8003b804: 0005b803 ld a6,0(a1) + 8003b808: ff850613 addi a2,a0,-8 + 8003b80c: ff870593 addi a1,a4,-8 + 8003b810: 00178793 addi a5,a5,1 + 8003b814: 01063e03 ld t3,16(a2) + 8003b818: 0105b303 ld t1,16(a1) + 8003b81c: e90886e3 beq a7,a6,8003b6a8 + 8003b820: 01113423 sd a7,8(sp) + 8003b824: 01013023 sd a6,0(sp) + 8003b828: 00810593 addi a1,sp,8 + 8003b82c: 00010613 mv a2,sp + 8003b830: 0005c783 lbu a5,0(a1) + 8003b834: 00064803 lbu a6,0(a2) + 8003b838: 00158593 addi a1,a1,1 + 8003b83c: 00160613 addi a2,a2,1 + 8003b840: ff0788e3 beq a5,a6,8003b830 + 8003b844: e95ff06f j 8003b6d8 + 8003b848: fff78793 addi a5,a5,-1 + 8003b84c: 00053883 ld a7,0(a0) + 8003b850: 0005b803 ld a6,0(a1) + 8003b854: 14078463 beqz a5,8003b99c + 8003b858: 00850613 addi a2,a0,8 + 8003b85c: 00870593 addi a1,a4,8 + 8003b860: 00063e03 ld t3,0(a2) + 8003b864: 0005b303 ld t1,0(a1) + 8003b868: f70882e3 beq a7,a6,8003b7cc + 8003b86c: 01113423 sd a7,8(sp) + 8003b870: 01013023 sd a6,0(sp) + 8003b874: 00810593 addi a1,sp,8 + 8003b878: 00010613 mv a2,sp + 8003b87c: 0005c783 lbu a5,0(a1) + 8003b880: 00064803 lbu a6,0(a2) + 8003b884: 00158593 addi a1,a1,1 + 8003b888: 00160613 addi a2,a2,1 + 8003b88c: ff0788e3 beq a5,a6,8003b87c + 8003b890: e49ff06f j 8003b6d8 + 8003b894: e40786e3 beqz a5,8003b6e0 + 8003b898: 00033e83 ld t4,0(t1) + 8003b89c: 00833e03 ld t3,8(t1) + 8003b8a0: 0005b283 ld t0,0(a1) + 8003b8a4: 00830f13 addi t5,t1,8 + 8003b8a8: 010ed633 srl a2,t4,a6 + 8003b8ac: 011e1333 sll t1,t3,a7 + 8003b8b0: 00666633 or a2,a2,t1 + 8003b8b4: 008f3e83 ld t4,8(t5) + 8003b8b8: 0085b303 ld t1,8(a1) + 8003b8bc: 04560263 beq a2,t0,8003b900 + 8003b8c0: 00c13423 sd a2,8(sp) + 8003b8c4: 00513023 sd t0,0(sp) + 8003b8c8: 00810593 addi a1,sp,8 + 8003b8cc: 00010613 mv a2,sp + 8003b8d0: 0005c783 lbu a5,0(a1) + 8003b8d4: 00064803 lbu a6,0(a2) + 8003b8d8: 00158593 addi a1,a1,1 + 8003b8dc: 00160613 addi a2,a2,1 + 8003b8e0: ff0788e3 beq a5,a6,8003b8d0 + 8003b8e4: df5ff06f j 8003b6d8 + 8003b8e8: 00033e03 ld t3,0(t1) + 8003b8ec: 00833e83 ld t4,8(t1) + 8003b8f0: 00030f13 mv t5,t1 + 8003b8f4: 00178793 addi a5,a5,1 + 8003b8f8: 0005b303 ld t1,0(a1) + 8003b8fc: ff870593 addi a1,a4,-8 + 8003b900: 011e9633 sll a2,t4,a7 + 8003b904: 010e5e33 srl t3,t3,a6 + 8003b908: 00ce6e33 or t3,t3,a2 + 8003b90c: 0105b283 ld t0,16(a1) + 8003b910: 010f3603 ld a2,16(t5) + 8003b914: e46e0ae3 beq t3,t1,8003b768 + 8003b918: 01c13423 sd t3,8(sp) + 8003b91c: 00613023 sd t1,0(sp) + 8003b920: 00810593 addi a1,sp,8 + 8003b924: 00010613 mv a2,sp + 8003b928: 0005c783 lbu a5,0(a1) + 8003b92c: 00064803 lbu a6,0(a2) + 8003b930: 00158593 addi a1,a1,1 + 8003b934: 00160613 addi a2,a2,1 + 8003b938: ff0788e3 beq a5,a6,8003b928 + 8003b93c: d9dff06f j 8003b6d8 + 8003b940: fff78793 addi a5,a5,-1 + 8003b944: 00033603 ld a2,0(t1) + 8003b948: 00833e83 ld t4,8(t1) + 8003b94c: 0005bf83 ld t6,0(a1) + 8003b950: 06078c63 beqz a5,8003b9c8 + 8003b954: 01030f13 addi t5,t1,16 + 8003b958: 00870593 addi a1,a4,8 + 8003b95c: 01065633 srl a2,a2,a6 + 8003b960: 011e9333 sll t1,t4,a7 + 8003b964: 00666633 or a2,a2,t1 + 8003b968: 000f3e03 ld t3,0(t5) + 8003b96c: 0005b283 ld t0,0(a1) + 8003b970: f3f60ce3 beq a2,t6,8003b8a8 + 8003b974: 00c13423 sd a2,8(sp) + 8003b978: 01f13023 sd t6,0(sp) + 8003b97c: 00810593 addi a1,sp,8 + 8003b980: 00010613 mv a2,sp + 8003b984: 0005c783 lbu a5,0(a1) + 8003b988: 00064803 lbu a6,0(a2) + 8003b98c: 00158593 addi a1,a1,1 + 8003b990: 00160613 addi a2,a2,1 + 8003b994: ff0788e3 beq a5,a6,8003b984 + 8003b998: d41ff06f j 8003b6d8 + 8003b99c: d50882e3 beq a7,a6,8003b6e0 + 8003b9a0: 01113423 sd a7,8(sp) + 8003b9a4: 01013023 sd a6,0(sp) + 8003b9a8: 00810593 addi a1,sp,8 + 8003b9ac: 00010613 mv a2,sp + 8003b9b0: 0005c783 lbu a5,0(a1) + 8003b9b4: 00064803 lbu a6,0(a2) + 8003b9b8: 00158593 addi a1,a1,1 + 8003b9bc: 00160613 addi a2,a2,1 + 8003b9c0: ff0788e3 beq a5,a6,8003b9b0 + 8003b9c4: d15ff06f j 8003b6d8 + 8003b9c8: 01065833 srl a6,a2,a6 + 8003b9cc: 011e97b3 sll a5,t4,a7 + 8003b9d0: 00f867b3 or a5,a6,a5 + 8003b9d4: d1f786e3 beq a5,t6,8003b6e0 + 8003b9d8: 00f13423 sd a5,8(sp) + 8003b9dc: 01f13023 sd t6,0(sp) + 8003b9e0: 00810593 addi a1,sp,8 + 8003b9e4: 00010613 mv a2,sp + 8003b9e8: 0005c783 lbu a5,0(a1) + 8003b9ec: 00064803 lbu a6,0(a2) + 8003b9f0: 00158593 addi a1,a1,1 + 8003b9f4: 00160613 addi a2,a2,1 + 8003b9f8: ff0788e3 beq a5,a6,8003b9e8 + 8003b9fc: cddff06f j 8003b6d8 + 8003ba00: ffc78793 addi a5,a5,-4 + 8003ba04: f8078ce3 beqz a5,8003b99c + 8003ba08: 02060613 addi a2,a2,32 + 8003ba0c: 02058593 addi a1,a1,32 + 8003ba10: e51ff06f j 8003b860 + 8003ba14: ffc78793 addi a5,a5,-4 + 8003ba18: fa0788e3 beqz a5,8003b9c8 + 8003ba1c: 020f0f13 addi t5,t5,32 + 8003ba20: 02058593 addi a1,a1,32 + 8003ba24: f39ff06f j 8003b95c + +000000008003ba28 : + 8003ba28: 00700713 li a4,7 + 8003ba2c: 00050793 mv a5,a0 + 8003ba30: 0ac77a63 bgeu a4,a2,8003bae4 + 8003ba34: 0ff5f893 andi a7,a1,255 + 8003ba38: 00889693 slli a3,a7,0x8 + 8003ba3c: 0116e6b3 or a3,a3,a7 + 8003ba40: 01069713 slli a4,a3,0x10 + 8003ba44: 00d766b3 or a3,a4,a3 + 8003ba48: 02069713 slli a4,a3,0x20 + 8003ba4c: 00757813 andi a6,a0,7 + 8003ba50: 00d76733 or a4,a4,a3 + 8003ba54: 0a080663 beqz a6,8003bb00 + 8003ba58: 00c50633 add a2,a0,a2 + 8003ba5c: 01178023 sb a7,0(a5) + 8003ba60: 00178793 addi a5,a5,1 + 8003ba64: 0077f813 andi a6,a5,7 + 8003ba68: 40f606b3 sub a3,a2,a5 + 8003ba6c: fe0818e3 bnez a6,8003ba5c + 8003ba70: 0066d813 srli a6,a3,0x6 + 8003ba74: 04080063 beqz a6,8003bab4 + 8003ba78: 00681613 slli a2,a6,0x6 + 8003ba7c: 00078893 mv a7,a5 + 8003ba80: 00f60633 add a2,a2,a5 + 8003ba84: 00e7b023 sd a4,0(a5) + 8003ba88: 00e7b423 sd a4,8(a5) + 8003ba8c: 00e7b823 sd a4,16(a5) + 8003ba90: 00e7bc23 sd a4,24(a5) + 8003ba94: 02e7b023 sd a4,32(a5) + 8003ba98: 02e7b423 sd a4,40(a5) + 8003ba9c: 02e7b823 sd a4,48(a5) + 8003baa0: 02e7bc23 sd a4,56(a5) + 8003baa4: 04078793 addi a5,a5,64 + 8003baa8: fcf61ee3 bne a2,a5,8003ba84 + 8003baac: 00681793 slli a5,a6,0x6 + 8003bab0: 011787b3 add a5,a5,a7 + 8003bab4: 0036d813 srli a6,a3,0x3 + 8003bab8: 00787813 andi a6,a6,7 + 8003babc: 02080263 beqz a6,8003bae0 + 8003bac0: 00381613 slli a2,a6,0x3 + 8003bac4: 00078893 mv a7,a5 + 8003bac8: 00f60633 add a2,a2,a5 + 8003bacc: 00e7b023 sd a4,0(a5) + 8003bad0: 00878793 addi a5,a5,8 + 8003bad4: fef61ce3 bne a2,a5,8003bacc + 8003bad8: 00381793 slli a5,a6,0x3 + 8003badc: 011787b3 add a5,a5,a7 + 8003bae0: 0076f613 andi a2,a3,7 + 8003bae4: 0ff5f593 andi a1,a1,255 + 8003bae8: 00c78733 add a4,a5,a2 + 8003baec: 00060863 beqz a2,8003bafc + 8003baf0: 00b78023 sb a1,0(a5) + 8003baf4: 00178793 addi a5,a5,1 + 8003baf8: fef71ce3 bne a4,a5,8003baf0 + 8003bafc: 00008067 ret + 8003bb00: 00060693 mv a3,a2 + 8003bb04: f6dff06f j 8003ba70 + +000000008003bb08 : + 8003bb08: 40b506b3 sub a3,a0,a1 + 8003bb0c: 0005c703 lbu a4,0(a1) + 8003bb10: 00d587b3 add a5,a1,a3 + 8003bb14: 00158593 addi a1,a1,1 + 8003bb18: 00e78023 sb a4,0(a5) + 8003bb1c: fe0718e3 bnez a4,8003bb0c + 8003bb20: 00008067 ret + +000000008003bb24 : + 8003bb24: 00050713 mv a4,a0 + 8003bb28: 00074683 lbu a3,0(a4) + 8003bb2c: 00070793 mv a5,a4 + 8003bb30: 00170713 addi a4,a4,1 + 8003bb34: fe069ae3 bnez a3,8003bb28 + 8003bb38: fff78793 addi a5,a5,-1 + 8003bb3c: 0005c703 lbu a4,0(a1) + 8003bb40: 00178793 addi a5,a5,1 + 8003bb44: 00158593 addi a1,a1,1 + 8003bb48: 00e78023 sb a4,0(a5) + 8003bb4c: fe0718e3 bnez a4,8003bb3c + 8003bb50: 00008067 ret + +000000008003bb54 : + 8003bb54: fd010113 addi sp,sp,-48 + 8003bb58: 02813023 sd s0,32(sp) + 8003bb5c: 01213823 sd s2,16(sp) + 8003bb60: 02113423 sd ra,40(sp) + 8003bb64: 00913c23 sd s1,24(sp) + 8003bb68: 01313423 sd s3,8(sp) + 8003bb6c: 00f00793 li a5,15 + 8003bb70: 00050913 mv s2,a0 + 8003bb74: 00050713 mv a4,a0 + 8003bb78: 00058413 mv s0,a1 + 8003bb7c: 04c7fe63 bgeu a5,a2,8003bbd8 + 8003bb80: 40a00533 neg a0,a0 + 8003bb84: 00757513 andi a0,a0,7 + 8003bb88: 40a604b3 sub s1,a2,a0 + 8003bb8c: 08050e63 beqz a0,8003bc28 + 8003bb90: 012509b3 add s3,a0,s2 + 8003bb94: 00058793 mv a5,a1 + 8003bb98: 0007c683 lbu a3,0(a5) + 8003bb9c: 00170713 addi a4,a4,1 + 8003bba0: 00178793 addi a5,a5,1 + 8003bba4: fed70fa3 sb a3,-1(a4) + 8003bba8: fee998e3 bne s3,a4,8003bb98 + 8003bbac: 00a58433 add s0,a1,a0 + 8003bbb0: 00747793 andi a5,s0,7 + 8003bbb4: 0034d613 srli a2,s1,0x3 + 8003bbb8: 00040593 mv a1,s0 + 8003bbbc: 00098513 mv a0,s3 + 8003bbc0: 06079063 bnez a5,8003bc20 + 8003bbc4: 69d000ef jal ra,8003ca60 <_wordcopy_fwd_aligned> + 8003bbc8: ff84f713 andi a4,s1,-8 + 8003bbcc: 00e40433 add s0,s0,a4 + 8003bbd0: 0074f613 andi a2,s1,7 + 8003bbd4: 01370733 add a4,a4,s3 + 8003bbd8: fff70713 addi a4,a4,-1 + 8003bbdc: 00040793 mv a5,s0 + 8003bbe0: 008605b3 add a1,a2,s0 + 8003bbe4: 40870733 sub a4,a4,s0 + 8003bbe8: 00060c63 beqz a2,8003bc00 + 8003bbec: 0007c603 lbu a2,0(a5) + 8003bbf0: 00178793 addi a5,a5,1 + 8003bbf4: 00f706b3 add a3,a4,a5 + 8003bbf8: 00c68023 sb a2,0(a3) + 8003bbfc: fef598e3 bne a1,a5,8003bbec + 8003bc00: 02813083 ld ra,40(sp) + 8003bc04: 02013403 ld s0,32(sp) + 8003bc08: 01813483 ld s1,24(sp) + 8003bc0c: 00813983 ld s3,8(sp) + 8003bc10: 00090513 mv a0,s2 + 8003bc14: 01013903 ld s2,16(sp) + 8003bc18: 03010113 addi sp,sp,48 + 8003bc1c: 00008067 ret + 8003bc20: 789000ef jal ra,8003cba8 <_wordcopy_fwd_dest_aligned> + 8003bc24: fa5ff06f j 8003bbc8 + 8003bc28: 00090993 mv s3,s2 + 8003bc2c: f85ff06f j 8003bbb0 + +000000008003bc30 : + 8003bc30: 1a050e63 beqz a0,8003bdec + 8003bc34: fd010113 addi sp,sp,-48 + 8003bc38: 02813023 sd s0,32(sp) + 8003bc3c: 00913c23 sd s1,24(sp) + 8003bc40: 01f57793 andi a5,a0,31 + 8003bc44: 02113423 sd ra,40(sp) + 8003bc48: 01213823 sd s2,16(sp) + 8003bc4c: 01313423 sd s3,8(sp) + 8003bc50: 01413023 sd s4,0(sp) + 8003bc54: 00050493 mv s1,a0 + 8003bc58: 00050413 mv s0,a0 + 8003bc5c: 00000513 li a0,0 + 8003bc60: 14079a63 bnez a5,8003bdb4 + 8003bc64: 27f00713 li a4,639 + 8003bc68: 00058913 mv s2,a1 + 8003bc6c: 00078513 mv a0,a5 + 8003bc70: 14b77263 bgeu a4,a1,8003bdb4 + 8003bc74: 0074f513 andi a0,s1,7 + 8003bc78: 00153513 seqz a0,a0 + 8003bc7c: 00060a13 mv s4,a2 + 8003bc80: 00068993 mv s3,a3 + 8003bc84: 8fcfe0ef jal ra,80039d80 <_assert> + 8003bc88: 20048793 addi a5,s1,512 + 8003bc8c: 2004b023 sd zero,512(s1) + 8003bc90: 2144b423 sd s4,520(s1) + 8003bc94: 2134b823 sd s3,528(s1) + 8003bc98: 00043023 sd zero,0(s0) + 8003bc9c: 00840413 addi s0,s0,8 + 8003bca0: fe879ce3 bne a5,s0,8003bc98 + 8003bca4: fff00793 li a5,-1 + 8003bca8: dc090413 addi s0,s2,-576 + 8003bcac: 03f79793 slli a5,a5,0x3f + 8003bcb0: 1287f863 bgeu a5,s0,8003bde0 + 8003bcb4: 00078413 mv s0,a5 + 8003bcb8: 00100513 li a0,1 + 8003bcbc: 8c4fe0ef jal ra,80039d80 <_assert> + 8003bcc0: f8300793 li a5,-125 + 8003bcc4: 0017d793 srli a5,a5,0x1 + 8003bcc8: fc040513 addi a0,s0,-64 + 8003bccc: 00f53533 sltu a0,a0,a5 + 8003bcd0: 8b0fe0ef jal ra,80039d80 <_assert> + 8003bcd4: 01f4f513 andi a0,s1,31 + 8003bcd8: 00153513 seqz a0,a0 + 8003bcdc: 8a4fe0ef jal ra,80039d80 <_assert> + 8003bce0: 00100513 li a0,1 + 8003bce4: 2404b023 sd zero,576(s1) + 8003bce8: 2404b423 sd zero,584(s1) + 8003bcec: 2484b823 sd s0,592(s1) + 8003bcf0: 24048c23 sb zero,600(s1) + 8003bcf4: 2604b023 sd zero,608(s1) + 8003bcf8: 2604b423 sd zero,616(s1) + 8003bcfc: 884fe0ef jal ra,80039d80 <_assert> + 8003bd00: 00100513 li a0,1 + 8003bd04: 87cfe0ef jal ra,80039d80 <_assert> + 8003bd08: 2504b503 ld a0,592(s1) + 8003bd0c: 24048a13 addi s4,s1,576 + 8003bd10: 04053513 sltiu a0,a0,64 + 8003bd14: 00154513 xori a0,a0,1 + 8003bd18: 00157513 andi a0,a0,1 + 8003bd1c: 864fe0ef jal ra,80039d80 <_assert> + 8003bd20: 2504b503 ld a0,592(s1) + 8003bd24: 03f57513 andi a0,a0,63 + 8003bd28: 00153513 seqz a0,a0 + 8003bd2c: 854fe0ef jal ra,80039d80 <_assert> + 8003bd30: 2504b703 ld a4,592(s1) + 8003bd34: 00100793 li a5,1 + 8003bd38: 00675713 srli a4,a4,0x6 + 8003bd3c: 0ae7fc63 bgeu a5,a4,8003bdf4 + 8003bd40: 00000793 li a5,0 + 8003bd44: 00100693 li a3,1 + 8003bd48: 0017879b addiw a5,a5,1 + 8003bd4c: 00175713 srli a4,a4,0x1 + 8003bd50: 0ff7f793 andi a5,a5,255 + 8003bd54: fed71ae3 bne a4,a3,8003bd48 + 8003bd58: 00078993 mv s3,a5 + 8003bd5c: 0407b513 sltiu a0,a5,64 + 8003bd60: 00f71933 sll s2,a4,a5 + 8003bd64: 81cfe0ef jal ra,80039d80 <_assert> + 8003bd68: 00399793 slli a5,s3,0x3 + 8003bd6c: 00f487b3 add a5,s1,a5 + 8003bd70: 0007b703 ld a4,0(a5) + 8003bd74: 2604b423 sd zero,616(s1) + 8003bd78: 26e4b023 sd a4,608(s1) + 8003bd7c: 00070463 beqz a4,8003bd84 + 8003bd80: 03473423 sd s4,40(a4) + 8003bd84: 0147b023 sd s4,0(a5) + 8003bd88: 2004b503 ld a0,512(s1) + 8003bd8c: 00a96533 or a0,s2,a0 + 8003bd90: 20a4b023 sd a0,512(s1) + 8003bd94: 00a03533 snez a0,a0 + 8003bd98: fe9fd0ef jal ra,80039d80 <_assert> + 8003bd9c: 00048513 mv a0,s1 + 8003bda0: 2084bc23 sd s0,536(s1) + 8003bda4: 2204b023 sd zero,544(s1) + 8003bda8: 2204b423 sd zero,552(s1) + 8003bdac: 2204b823 sd zero,560(s1) + 8003bdb0: 2204bc23 sd zero,568(s1) + 8003bdb4: 02813083 ld ra,40(sp) + 8003bdb8: 02013403 ld s0,32(sp) + 8003bdbc: 01813483 ld s1,24(sp) + 8003bdc0: 01013903 ld s2,16(sp) + 8003bdc4: 00813983 ld s3,8(sp) + 8003bdc8: 00013a03 ld s4,0(sp) + 8003bdcc: 03010113 addi sp,sp,48 + 8003bdd0: 00008067 ret + 8003bdd4: 00100513 li a0,1 + 8003bdd8: fff40413 addi s0,s0,-1 + 8003bddc: fa5fd0ef jal ra,80039d80 <_assert> + 8003bde0: 03f47793 andi a5,s0,63 + 8003bde4: fe0798e3 bnez a5,8003bdd4 + 8003bde8: ed1ff06f j 8003bcb8 + 8003bdec: 00000513 li a0,0 + 8003bdf0: 00008067 ret + 8003bdf4: 00100913 li s2,1 + 8003bdf8: 00000993 li s3,0 + 8003bdfc: 00100513 li a0,1 + 8003be00: f65ff06f j 8003bd64 + +000000008003be04 : + 8003be04: fb010113 addi sp,sp,-80 + 8003be08: 03313423 sd s3,40(sp) + 8003be0c: 00a039b3 snez s3,a0 + 8003be10: 01513c23 sd s5,24(sp) + 8003be14: 00050a93 mv s5,a0 + 8003be18: 00098513 mv a0,s3 + 8003be1c: 02913c23 sd s1,56(sp) + 8003be20: 04113423 sd ra,72(sp) + 8003be24: 04813023 sd s0,64(sp) + 8003be28: 03213823 sd s2,48(sp) + 8003be2c: 03413023 sd s4,32(sp) + 8003be30: 01613823 sd s6,16(sp) + 8003be34: 01713423 sd s7,8(sp) + 8003be38: 00058493 mv s1,a1 + 8003be3c: f45fd0ef jal ra,80039d80 <_assert> + 8003be40: 218ab503 ld a0,536(s5) + 8003be44: fff00793 li a5,-1 + 8003be48: 03f79793 slli a5,a5,0x3f + 8003be4c: 00178793 addi a5,a5,1 + 8003be50: 00f53533 sltu a0,a0,a5 + 8003be54: f2dfd0ef jal ra,80039d80 <_assert> + 8003be58: 40048063 beqz s1,8003c258 + 8003be5c: 218ab783 ld a5,536(s5) + 8003be60: fe078793 addi a5,a5,-32 + 8003be64: 4297e663 bltu a5,s1,8003c290 + 8003be68: 02048913 addi s2,s1,32 + 8003be6c: 00100793 li a5,1 + 8003be70: 4327f663 bgeu a5,s2,8003c29c + 8003be74: 00090713 mv a4,s2 + 8003be78: 00000793 li a5,0 + 8003be7c: 00100693 li a3,1 + 8003be80: 0017879b addiw a5,a5,1 + 8003be84: 00175713 srli a4,a4,0x1 + 8003be88: 0ff7f793 andi a5,a5,255 + 8003be8c: fed71ae3 bne a4,a3,8003be80 + 8003be90: 01f48a13 addi s4,s1,31 + 8003be94: 012a7a33 and s4,s4,s2 + 8003be98: 01403a33 snez s4,s4 + 8003be9c: fff00513 li a0,-1 + 8003bea0: 00fa07bb addw a5,s4,a5 + 8003bea4: 00100413 li s0,1 + 8003bea8: 03f51513 slli a0,a0,0x3f + 8003beac: 00f41a33 sll s4,s0,a5 + 8003beb0: 00150513 addi a0,a0,1 + 8003beb4: 00aa3533 sltu a0,s4,a0 + 8003beb8: ec9fd0ef jal ra,80039d80 <_assert> + 8003bebc: 040a3513 sltiu a0,s4,64 + 8003bec0: 00154513 xori a0,a0,1 + 8003bec4: 00157513 andi a0,a0,1 + 8003bec8: eb9fd0ef jal ra,80039d80 <_assert> + 8003becc: 012a3533 sltu a0,s4,s2 + 8003bed0: 00154513 xori a0,a0,1 + 8003bed4: 00157513 andi a0,a0,1 + 8003bed8: ea9fd0ef jal ra,80039d80 <_assert> + 8003bedc: fffa0513 addi a0,s4,-1 + 8003bee0: 01457533 and a0,a0,s4 + 8003bee4: 00153513 seqz a0,a0 + 8003bee8: e99fd0ef jal ra,80039d80 <_assert> + 8003beec: 006a5613 srli a2,s4,0x6 + 8003bef0: 3ac47a63 bgeu s0,a2,8003c2a4 + 8003bef4: 00060713 mv a4,a2 + 8003bef8: 00000793 li a5,0 + 8003befc: 00100693 li a3,1 + 8003bf00: 0017879b addiw a5,a5,1 + 8003bf04: 00175713 srli a4,a4,0x1 + 8003bf08: 0ff7f793 andi a5,a5,255 + 8003bf0c: fed71ae3 bne a4,a3,8003bf00 + 8003bf10: fff60713 addi a4,a2,-1 + 8003bf14: 00c77733 and a4,a4,a2 + 8003bf18: 00e03733 snez a4,a4 + 8003bf1c: 00f707bb addw a5,a4,a5 + 8003bf20: 0ff7fb13 andi s6,a5,255 + 8003bf24: 040b3513 sltiu a0,s6,64 + 8003bf28: e59fd0ef jal ra,80039d80 <_assert> + 8003bf2c: 208ab703 ld a4,520(s5) + 8003bf30: fff00793 li a5,-1 + 8003bf34: 01679433 sll s0,a5,s6 + 8003bf38: 00070463 beqz a4,8003bf40 + 8003bf3c: 000700e7 jalr a4 + 8003bf40: 200ab783 ld a5,512(s5) + 8003bf44: 00f477b3 and a5,s0,a5 + 8003bf48: 40f00433 neg s0,a5 + 8003bf4c: 00f47433 and s0,s0,a5 + 8003bf50: 34040e63 beqz s0,8003c2ac + 8003bf54: fff40513 addi a0,s0,-1 + 8003bf58: 00857533 and a0,a0,s0 + 8003bf5c: 00153513 seqz a0,a0 + 8003bf60: e21fd0ef jal ra,80039d80 <_assert> + 8003bf64: 00100793 li a5,1 + 8003bf68: 34f40a63 beq s0,a5,8003c2bc + 8003bf6c: 00000793 li a5,0 + 8003bf70: 00100713 li a4,1 + 8003bf74: 0017879b addiw a5,a5,1 + 8003bf78: 00145413 srli s0,s0,0x1 + 8003bf7c: 0ff7f793 andi a5,a5,255 + 8003bf80: fee41ae3 bne s0,a4,8003bf74 + 8003bf84: 0007851b sext.w a0,a5 + 8003bf88: 0407b413 sltiu s0,a5,64 + 8003bf8c: 00050b93 mv s7,a0 + 8003bf90: 01653533 sltu a0,a0,s6 + 8003bf94: 00154513 xori a0,a0,1 + 8003bf98: 00157513 andi a0,a0,1 + 8003bf9c: de5fd0ef jal ra,80039d80 <_assert> + 8003bfa0: 00040513 mv a0,s0 + 8003bfa4: dddfd0ef jal ra,80039d80 <_assert> + 8003bfa8: 003b9793 slli a5,s7,0x3 + 8003bfac: 00fa87b3 add a5,s5,a5 + 8003bfb0: 0007bb03 ld s6,0(a5) + 8003bfb4: 01603433 snez s0,s6 + 8003bfb8: 00040513 mv a0,s0 + 8003bfbc: dc5fd0ef jal ra,80039d80 <_assert> + 8003bfc0: 010b3503 ld a0,16(s6) + 8003bfc4: 01453533 sltu a0,a0,s4 + 8003bfc8: 00154513 xori a0,a0,1 + 8003bfcc: 00157513 andi a0,a0,1 + 8003bfd0: db1fd0ef jal ra,80039d80 <_assert> + 8003bfd4: 010b3503 ld a0,16(s6) + 8003bfd8: 03f57513 andi a0,a0,63 + 8003bfdc: 00153513 seqz a0,a0 + 8003bfe0: da1fd0ef jal ra,80039d80 <_assert> + 8003bfe4: 018b4503 lbu a0,24(s6) + 8003bfe8: 00154513 xori a0,a0,1 + 8003bfec: d95fd0ef jal ra,80039d80 <_assert> + 8003bff0: 00098513 mv a0,s3 + 8003bff4: d8dfd0ef jal ra,80039d80 <_assert> + 8003bff8: 00040513 mv a0,s0 + 8003bffc: d85fd0ef jal ra,80039d80 <_assert> + 8003c000: 010b3503 ld a0,16(s6) + 8003c004: 04053513 sltiu a0,a0,64 + 8003c008: 00154513 xori a0,a0,1 + 8003c00c: 00157513 andi a0,a0,1 + 8003c010: d71fd0ef jal ra,80039d80 <_assert> + 8003c014: 010b3503 ld a0,16(s6) + 8003c018: 03f57513 andi a0,a0,63 + 8003c01c: 00153513 seqz a0,a0 + 8003c020: d61fd0ef jal ra,80039d80 <_assert> + 8003c024: 010b3703 ld a4,16(s6) + 8003c028: 00100793 li a5,1 + 8003c02c: 00675713 srli a4,a4,0x6 + 8003c030: 28e7fe63 bgeu a5,a4,8003c2cc + 8003c034: 00000793 li a5,0 + 8003c038: 00100693 li a3,1 + 8003c03c: 0017879b addiw a5,a5,1 + 8003c040: 00175713 srli a4,a4,0x1 + 8003c044: 0ff7f793 andi a5,a5,255 + 8003c048: fed71ae3 bne a4,a3,8003c03c + 8003c04c: 0407b513 sltiu a0,a5,64 + 8003c050: 00078413 mv s0,a5 + 8003c054: d2dfd0ef jal ra,80039d80 <_assert> + 8003c058: 020b3783 ld a5,32(s6) + 8003c05c: 00078663 beqz a5,8003c068 + 8003c060: 028b3703 ld a4,40(s6) + 8003c064: 02e7b423 sd a4,40(a5) + 8003c068: 028b3503 ld a0,40(s6) + 8003c06c: 00050463 beqz a0,8003c074 + 8003c070: 02f53023 sd a5,32(a0) + 8003c074: 00341b93 slli s7,s0,0x3 + 8003c078: 017a8bb3 add s7,s5,s7 + 8003c07c: 000bb783 ld a5,0(s7) + 8003c080: 02fb1863 bne s6,a5,8003c0b0 + 8003c084: 00153513 seqz a0,a0 + 8003c088: cf9fd0ef jal ra,80039d80 <_assert> + 8003c08c: 020b3783 ld a5,32(s6) + 8003c090: 00fbb023 sd a5,0(s7) + 8003c094: 00079e63 bnez a5,8003c0b0 + 8003c098: 200ab703 ld a4,512(s5) + 8003c09c: 00100793 li a5,1 + 8003c0a0: 008797b3 sll a5,a5,s0 + 8003c0a4: fff7c793 not a5,a5 + 8003c0a8: 00f777b3 and a5,a4,a5 + 8003c0ac: 20fab023 sd a5,512(s5) + 8003c0b0: 010b3403 ld s0,16(s6) + 8003c0b4: 218ab503 ld a0,536(s5) + 8003c0b8: 014b3823 sd s4,16(s6) + 8003c0bc: 41440433 sub s0,s0,s4 + 8003c0c0: 00a43533 sltu a0,s0,a0 + 8003c0c4: cbdfd0ef jal ra,80039d80 <_assert> + 8003c0c8: 03f47513 andi a0,s0,63 + 8003c0cc: 00153513 seqz a0,a0 + 8003c0d0: cb1fd0ef jal ra,80039d80 <_assert> + 8003c0d4: 03f00793 li a5,63 + 8003c0d8: 0c87fc63 bgeu a5,s0,8003c1b0 + 8003c0dc: 014b0bb3 add s7,s6,s4 + 8003c0e0: 01fbf513 andi a0,s7,31 + 8003c0e4: 00153513 seqz a0,a0 + 8003c0e8: c99fd0ef jal ra,80039d80 <_assert> + 8003c0ec: 000b3783 ld a5,0(s6) + 8003c0f0: 008bb823 sd s0,16(s7) + 8003c0f4: 000b8c23 sb zero,24(s7) + 8003c0f8: 00fbb023 sd a5,0(s7) + 8003c0fc: 00078463 beqz a5,8003c104 + 8003c100: 0177b423 sd s7,8(a5) + 8003c104: 017b3023 sd s7,0(s6) + 8003c108: 00098513 mv a0,s3 + 8003c10c: 016bb423 sd s6,8(s7) + 8003c110: c71fd0ef jal ra,80039d80 <_assert> + 8003c114: 00100513 li a0,1 + 8003c118: c69fd0ef jal ra,80039d80 <_assert> + 8003c11c: 010bb503 ld a0,16(s7) + 8003c120: 00100413 li s0,1 + 8003c124: 00000993 li s3,0 + 8003c128: 04053513 sltiu a0,a0,64 + 8003c12c: 00154513 xori a0,a0,1 + 8003c130: 00157513 andi a0,a0,1 + 8003c134: c4dfd0ef jal ra,80039d80 <_assert> + 8003c138: 010bb503 ld a0,16(s7) + 8003c13c: 03f57513 andi a0,a0,63 + 8003c140: 00153513 seqz a0,a0 + 8003c144: c3dfd0ef jal ra,80039d80 <_assert> + 8003c148: 010bb703 ld a4,16(s7) + 8003c14c: 00100613 li a2,1 + 8003c150: 00000793 li a5,0 + 8003c154: 00675713 srli a4,a4,0x6 + 8003c158: 00100693 li a3,1 + 8003c15c: 00100513 li a0,1 + 8003c160: 02e67063 bgeu a2,a4,8003c180 + 8003c164: 0017879b addiw a5,a5,1 + 8003c168: 00175713 srli a4,a4,0x1 + 8003c16c: 0ff7f793 andi a5,a5,255 + 8003c170: fed71ae3 bne a4,a3,8003c164 + 8003c174: 00078993 mv s3,a5 + 8003c178: 0407b513 sltiu a0,a5,64 + 8003c17c: 00f71433 sll s0,a4,a5 + 8003c180: c01fd0ef jal ra,80039d80 <_assert> + 8003c184: 00399793 slli a5,s3,0x3 + 8003c188: 00fa87b3 add a5,s5,a5 + 8003c18c: 0007b703 ld a4,0(a5) + 8003c190: 020bb423 sd zero,40(s7) + 8003c194: 02ebb023 sd a4,32(s7) + 8003c198: 00070463 beqz a4,8003c1a0 + 8003c19c: 03773423 sd s7,40(a4) + 8003c1a0: 0177b023 sd s7,0(a5) + 8003c1a4: 200ab703 ld a4,512(s5) + 8003c1a8: 00876733 or a4,a4,s0 + 8003c1ac: 20eab023 sd a4,512(s5) + 8003c1b0: 220ab503 ld a0,544(s5) + 8003c1b4: 03f57513 andi a0,a0,63 + 8003c1b8: 00153513 seqz a0,a0 + 8003c1bc: bc5fd0ef jal ra,80039d80 <_assert> + 8003c1c0: 220ab783 ld a5,544(s5) + 8003c1c4: 218ab503 ld a0,536(s5) + 8003c1c8: 00fa0a33 add s4,s4,a5 + 8003c1cc: 01453533 sltu a0,a0,s4 + 8003c1d0: 00154513 xori a0,a0,1 + 8003c1d4: 234ab023 sd s4,544(s5) + 8003c1d8: 00157513 andi a0,a0,1 + 8003c1dc: ba5fd0ef jal ra,80039d80 <_assert> + 8003c1e0: 220ab783 ld a5,544(s5) + 8003c1e4: 228ab703 ld a4,552(s5) + 8003c1e8: 00f77463 bgeu a4,a5,8003c1f0 + 8003c1ec: 22fab423 sd a5,552(s5) + 8003c1f0: 010b3503 ld a0,16(s6) + 8003c1f4: 020b0413 addi s0,s6,32 + 8003c1f8: 01253533 sltu a0,a0,s2 + 8003c1fc: 00154513 xori a0,a0,1 + 8003c200: 00157513 andi a0,a0,1 + 8003c204: b7dfd0ef jal ra,80039d80 <_assert> + 8003c208: 230ab783 ld a5,560(s5) + 8003c20c: 00100713 li a4,1 + 8003c210: 00eb0c23 sb a4,24(s6) + 8003c214: 0097f463 bgeu a5,s1,8003c21c + 8003c218: 229ab823 sd s1,560(s5) + 8003c21c: 210ab783 ld a5,528(s5) + 8003c220: 00078463 beqz a5,8003c228 + 8003c224: 000780e7 jalr a5 + 8003c228: 04813083 ld ra,72(sp) + 8003c22c: 00040513 mv a0,s0 + 8003c230: 04013403 ld s0,64(sp) + 8003c234: 03813483 ld s1,56(sp) + 8003c238: 03013903 ld s2,48(sp) + 8003c23c: 02813983 ld s3,40(sp) + 8003c240: 02013a03 ld s4,32(sp) + 8003c244: 01813a83 ld s5,24(sp) + 8003c248: 01013b03 ld s6,16(sp) + 8003c24c: 00813b83 ld s7,8(sp) + 8003c250: 05010113 addi sp,sp,80 + 8003c254: 00008067 ret + 8003c258: 208ab783 ld a5,520(s5) + 8003c25c: 02078663 beqz a5,8003c288 + 8003c260: 000780e7 jalr a5 + 8003c264: 230ab783 ld a5,560(s5) + 8003c268: 0097f463 bgeu a5,s1,8003c270 + 8003c26c: 229ab823 sd s1,560(s5) + 8003c270: 00048c63 beqz s1,8003c288 + 8003c274: 238ab783 ld a5,568(s5) + 8003c278: 00000413 li s0,0 + 8003c27c: 00178793 addi a5,a5,1 + 8003c280: 22fabc23 sd a5,568(s5) + 8003c284: f99ff06f j 8003c21c + 8003c288: 00000413 li s0,0 + 8003c28c: f91ff06f j 8003c21c + 8003c290: 208ab783 ld a5,520(s5) + 8003c294: fc0796e3 bnez a5,8003c260 + 8003c298: fcdff06f j 8003c264 + 8003c29c: 00000793 li a5,0 + 8003c2a0: bf1ff06f j 8003be90 + 8003c2a4: 00000793 li a5,0 + 8003c2a8: c69ff06f j 8003bf10 + 8003c2ac: 230ab783 ld a5,560(s5) + 8003c2b0: fc97f2e3 bgeu a5,s1,8003c274 + 8003c2b4: 229ab823 sd s1,560(s5) + 8003c2b8: fb9ff06f j 8003c270 + 8003c2bc: 00000b93 li s7,0 + 8003c2c0: 00100413 li s0,1 + 8003c2c4: 00000513 li a0,0 + 8003c2c8: cc9ff06f j 8003bf90 + 8003c2cc: 00000413 li s0,0 + 8003c2d0: 00100513 li a0,1 + 8003c2d4: d81ff06f j 8003c054 + +000000008003c2d8 : + 8003c2d8: fc010113 addi sp,sp,-64 + 8003c2dc: 01413823 sd s4,16(sp) + 8003c2e0: 00a03a33 snez s4,a0 + 8003c2e4: 02913423 sd s1,40(sp) + 8003c2e8: 00050493 mv s1,a0 + 8003c2ec: 000a0513 mv a0,s4 + 8003c2f0: 02813823 sd s0,48(sp) + 8003c2f4: 02113c23 sd ra,56(sp) + 8003c2f8: 03213023 sd s2,32(sp) + 8003c2fc: 01313c23 sd s3,24(sp) + 8003c300: 01513423 sd s5,8(sp) + 8003c304: 01613023 sd s6,0(sp) + 8003c308: 00058413 mv s0,a1 + 8003c30c: a75fd0ef jal ra,80039d80 <_assert> + 8003c310: 2184b503 ld a0,536(s1) + 8003c314: fff00793 li a5,-1 + 8003c318: 03f79793 slli a5,a5,0x3f + 8003c31c: 00178793 addi a5,a5,1 + 8003c320: 00f53533 sltu a0,a0,a5 + 8003c324: a5dfd0ef jal ra,80039d80 <_assert> + 8003c328: 34040e63 beqz s0,8003c684 + 8003c32c: 00747513 andi a0,s0,7 + 8003c330: 00153513 seqz a0,a0 + 8003c334: a4dfd0ef jal ra,80039d80 <_assert> + 8003c338: fe040a93 addi s5,s0,-32 + 8003c33c: 24048513 addi a0,s1,576 + 8003c340: 00aab533 sltu a0,s5,a0 + 8003c344: 00154513 xori a0,a0,1 + 8003c348: 00157513 andi a0,a0,1 + 8003c34c: a35fd0ef jal ra,80039d80 <_assert> + 8003c350: 2184b503 ld a0,536(s1) + 8003c354: 00a48533 add a0,s1,a0 + 8003c358: 20050513 addi a0,a0,512 + 8003c35c: 01553533 sltu a0,a0,s5 + 8003c360: 00154513 xori a0,a0,1 + 8003c364: 00157513 andi a0,a0,1 + 8003c368: a19fd0ef jal ra,80039d80 <_assert> + 8003c36c: ff844503 lbu a0,-8(s0) + 8003c370: a11fd0ef jal ra,80039d80 <_assert> + 8003c374: fe043503 ld a0,-32(s0) + 8003c378: 00757513 andi a0,a0,7 + 8003c37c: 00153513 seqz a0,a0 + 8003c380: a01fd0ef jal ra,80039d80 <_assert> + 8003c384: fe843503 ld a0,-24(s0) + 8003c388: 00757513 andi a0,a0,7 + 8003c38c: 00153513 seqz a0,a0 + 8003c390: 9f1fd0ef jal ra,80039d80 <_assert> + 8003c394: ff043503 ld a0,-16(s0) + 8003c398: 04053513 sltiu a0,a0,64 + 8003c39c: 00154513 xori a0,a0,1 + 8003c3a0: 00157513 andi a0,a0,1 + 8003c3a4: 9ddfd0ef jal ra,80039d80 <_assert> + 8003c3a8: 2184b783 ld a5,536(s1) + 8003c3ac: ff043503 ld a0,-16(s0) + 8003c3b0: 00a7b533 sltu a0,a5,a0 + 8003c3b4: 00154513 xori a0,a0,1 + 8003c3b8: 00157513 andi a0,a0,1 + 8003c3bc: 9c5fd0ef jal ra,80039d80 <_assert> + 8003c3c0: ff043503 ld a0,-16(s0) + 8003c3c4: 03f57513 andi a0,a0,63 + 8003c3c8: 00153513 seqz a0,a0 + 8003c3cc: 9b5fd0ef jal ra,80039d80 <_assert> + 8003c3d0: 2084b783 ld a5,520(s1) + 8003c3d4: 00078463 beqz a5,8003c3dc + 8003c3d8: 000780e7 jalr a5 + 8003c3dc: 2204b503 ld a0,544(s1) + 8003c3e0: ff043783 ld a5,-16(s0) + 8003c3e4: fe040c23 sb zero,-8(s0) + 8003c3e8: 00f53533 sltu a0,a0,a5 + 8003c3ec: 00154513 xori a0,a0,1 + 8003c3f0: 00157513 andi a0,a0,1 + 8003c3f4: 98dfd0ef jal ra,80039d80 <_assert> + 8003c3f8: 2204b783 ld a5,544(s1) + 8003c3fc: ff043703 ld a4,-16(s0) + 8003c400: fe843903 ld s2,-24(s0) + 8003c404: fe043983 ld s3,-32(s0) + 8003c408: 40e787b3 sub a5,a5,a4 + 8003c40c: 22f4b023 sd a5,544(s1) + 8003c410: 28090e63 beqz s2,8003c6ac + 8003c414: 01894783 lbu a5,24(s2) + 8003c418: 28079a63 bnez a5,8003c6ac + 8003c41c: 000a0513 mv a0,s4 + 8003c420: 4a098c63 beqz s3,8003c8d8 + 8003c424: 0189c783 lbu a5,24(s3) + 8003c428: 4a079863 bnez a5,8003c8d8 + 8003c42c: 955fd0ef jal ra,80039d80 <_assert> + 8003c430: 00100513 li a0,1 + 8003c434: 94dfd0ef jal ra,80039d80 <_assert> + 8003c438: 01093503 ld a0,16(s2) + 8003c43c: 04053513 sltiu a0,a0,64 + 8003c440: 00154513 xori a0,a0,1 + 8003c444: 00157513 andi a0,a0,1 + 8003c448: 939fd0ef jal ra,80039d80 <_assert> + 8003c44c: 01093503 ld a0,16(s2) + 8003c450: 03f57513 andi a0,a0,63 + 8003c454: 00153513 seqz a0,a0 + 8003c458: 929fd0ef jal ra,80039d80 <_assert> + 8003c45c: 01093703 ld a4,16(s2) + 8003c460: 00100793 li a5,1 + 8003c464: 00675713 srli a4,a4,0x6 + 8003c468: 5ee7f663 bgeu a5,a4,8003ca54 + 8003c46c: 00000793 li a5,0 + 8003c470: 00100693 li a3,1 + 8003c474: 0017879b addiw a5,a5,1 + 8003c478: 00175713 srli a4,a4,0x1 + 8003c47c: 0ff7f793 andi a5,a5,255 + 8003c480: fed71ae3 bne a4,a3,8003c474 + 8003c484: 0407b513 sltiu a0,a5,64 + 8003c488: 00078a93 mv s5,a5 + 8003c48c: 8f5fd0ef jal ra,80039d80 <_assert> + 8003c490: 02093783 ld a5,32(s2) + 8003c494: 00078663 beqz a5,8003c4a0 + 8003c498: 02893703 ld a4,40(s2) + 8003c49c: 02e7b423 sd a4,40(a5) + 8003c4a0: 02893503 ld a0,40(s2) + 8003c4a4: 00050463 beqz a0,8003c4ac + 8003c4a8: 02f53023 sd a5,32(a0) + 8003c4ac: 003a9b13 slli s6,s5,0x3 + 8003c4b0: 01648b33 add s6,s1,s6 + 8003c4b4: 000b3783 ld a5,0(s6) + 8003c4b8: 02f91863 bne s2,a5,8003c4e8 + 8003c4bc: 00153513 seqz a0,a0 + 8003c4c0: 8c1fd0ef jal ra,80039d80 <_assert> + 8003c4c4: 02093783 ld a5,32(s2) + 8003c4c8: 00fb3023 sd a5,0(s6) + 8003c4cc: 00079e63 bnez a5,8003c4e8 + 8003c4d0: 2004b703 ld a4,512(s1) + 8003c4d4: 00100793 li a5,1 + 8003c4d8: 015797b3 sll a5,a5,s5 + 8003c4dc: fff7c793 not a5,a5 + 8003c4e0: 00f777b3 and a5,a4,a5 + 8003c4e4: 20f4b023 sd a5,512(s1) + 8003c4e8: 000a0513 mv a0,s4 + 8003c4ec: 895fd0ef jal ra,80039d80 <_assert> + 8003c4f0: 00100513 li a0,1 + 8003c4f4: 88dfd0ef jal ra,80039d80 <_assert> + 8003c4f8: 0109b503 ld a0,16(s3) + 8003c4fc: 04053513 sltiu a0,a0,64 + 8003c500: 00154513 xori a0,a0,1 + 8003c504: 00157513 andi a0,a0,1 + 8003c508: 879fd0ef jal ra,80039d80 <_assert> + 8003c50c: 0109b503 ld a0,16(s3) + 8003c510: 03f57513 andi a0,a0,63 + 8003c514: 00153513 seqz a0,a0 + 8003c518: 869fd0ef jal ra,80039d80 <_assert> + 8003c51c: 0109b703 ld a4,16(s3) + 8003c520: 00100793 li a5,1 + 8003c524: 00675713 srli a4,a4,0x6 + 8003c528: 52e7f063 bgeu a5,a4,8003ca48 + 8003c52c: 00000793 li a5,0 + 8003c530: 00100693 li a3,1 + 8003c534: 0017879b addiw a5,a5,1 + 8003c538: 00175713 srli a4,a4,0x1 + 8003c53c: 0ff7f793 andi a5,a5,255 + 8003c540: fed71ae3 bne a4,a3,8003c534 + 8003c544: 0407b513 sltiu a0,a5,64 + 8003c548: 00078a93 mv s5,a5 + 8003c54c: 835fd0ef jal ra,80039d80 <_assert> + 8003c550: 0209b783 ld a5,32(s3) + 8003c554: 00078663 beqz a5,8003c560 + 8003c558: 0289b703 ld a4,40(s3) + 8003c55c: 02e7b423 sd a4,40(a5) + 8003c560: 0289b503 ld a0,40(s3) + 8003c564: 00050463 beqz a0,8003c56c + 8003c568: 02f53023 sd a5,32(a0) + 8003c56c: 003a9b13 slli s6,s5,0x3 + 8003c570: 01648b33 add s6,s1,s6 + 8003c574: 000b3783 ld a5,0(s6) + 8003c578: 02f99863 bne s3,a5,8003c5a8 + 8003c57c: 00153513 seqz a0,a0 + 8003c580: 801fd0ef jal ra,80039d80 <_assert> + 8003c584: 0209b783 ld a5,32(s3) + 8003c588: 00fb3023 sd a5,0(s6) + 8003c58c: 00079e63 bnez a5,8003c5a8 + 8003c590: 2004b703 ld a4,512(s1) + 8003c594: 00100793 li a5,1 + 8003c598: 015797b3 sll a5,a5,s5 + 8003c59c: fff7c793 not a5,a5 + 8003c5a0: 00f777b3 and a5,a4,a5 + 8003c5a4: 20f4b023 sd a5,512(s1) + 8003c5a8: 01093783 ld a5,16(s2) + 8003c5ac: 0109b683 ld a3,16(s3) + 8003c5b0: ff043703 ld a4,-16(s0) + 8003c5b4: 00d787b3 add a5,a5,a3 + 8003c5b8: 00e787b3 add a5,a5,a4 + 8003c5bc: 00f93823 sd a5,16(s2) + 8003c5c0: fe043823 sd zero,-16(s0) + 8003c5c4: 0009b823 sd zero,16(s3) + 8003c5c8: 01093503 ld a0,16(s2) + 8003c5cc: 03f57513 andi a0,a0,63 + 8003c5d0: 00153513 seqz a0,a0 + 8003c5d4: facfd0ef jal ra,80039d80 <_assert> + 8003c5d8: 0009b783 ld a5,0(s3) + 8003c5dc: 00f93023 sd a5,0(s2) + 8003c5e0: 00078463 beqz a5,8003c5e8 + 8003c5e4: 0127b423 sd s2,8(a5) + 8003c5e8: 000a0513 mv a0,s4 + 8003c5ec: f94fd0ef jal ra,80039d80 <_assert> + 8003c5f0: 00100513 li a0,1 + 8003c5f4: f8cfd0ef jal ra,80039d80 <_assert> + 8003c5f8: 01093503 ld a0,16(s2) + 8003c5fc: 04053513 sltiu a0,a0,64 + 8003c600: 00154513 xori a0,a0,1 + 8003c604: 00157513 andi a0,a0,1 + 8003c608: f78fd0ef jal ra,80039d80 <_assert> + 8003c60c: 01093503 ld a0,16(s2) + 8003c610: 03f57513 andi a0,a0,63 + 8003c614: 00153513 seqz a0,a0 + 8003c618: f68fd0ef jal ra,80039d80 <_assert> + 8003c61c: 01093783 ld a5,16(s2) + 8003c620: 00100713 li a4,1 + 8003c624: 0067d793 srli a5,a5,0x6 + 8003c628: 40f77863 bgeu a4,a5,8003ca38 + 8003c62c: 00000513 li a0,0 + 8003c630: 0015051b addiw a0,a0,1 + 8003c634: 0017d793 srli a5,a5,0x1 + 8003c638: 0ff57513 andi a0,a0,255 + 8003c63c: fee79ae3 bne a5,a4,8003c630 + 8003c640: 00050993 mv s3,a0 + 8003c644: 01379433 sll s0,a5,s3 + 8003c648: 04053513 sltiu a0,a0,64 + 8003c64c: f34fd0ef jal ra,80039d80 <_assert> + 8003c650: 00399793 slli a5,s3,0x3 + 8003c654: 00f487b3 add a5,s1,a5 + 8003c658: 0007b703 ld a4,0(a5) + 8003c65c: 02093423 sd zero,40(s2) + 8003c660: 02e93023 sd a4,32(s2) + 8003c664: 00070463 beqz a4,8003c66c + 8003c668: 03273423 sd s2,40(a4) + 8003c66c: 0127b023 sd s2,0(a5) + 8003c670: 2004b783 ld a5,512(s1) + 8003c674: 2104b303 ld t1,528(s1) + 8003c678: 0087e7b3 or a5,a5,s0 + 8003c67c: 20f4b023 sd a5,512(s1) + 8003c680: 1c031863 bnez t1,8003c850 + 8003c684: 03813083 ld ra,56(sp) + 8003c688: 03013403 ld s0,48(sp) + 8003c68c: 02813483 ld s1,40(sp) + 8003c690: 02013903 ld s2,32(sp) + 8003c694: 01813983 ld s3,24(sp) + 8003c698: 01013a03 ld s4,16(sp) + 8003c69c: 00813a83 ld s5,8(sp) + 8003c6a0: 00013b03 ld s6,0(sp) + 8003c6a4: 04010113 addi sp,sp,64 + 8003c6a8: 00008067 ret + 8003c6ac: 1c098663 beqz s3,8003c878 + 8003c6b0: 0189c783 lbu a5,24(s3) + 8003c6b4: 1c079263 bnez a5,8003c878 + 8003c6b8: 000a0513 mv a0,s4 + 8003c6bc: ec4fd0ef jal ra,80039d80 <_assert> + 8003c6c0: 00100513 li a0,1 + 8003c6c4: ebcfd0ef jal ra,80039d80 <_assert> + 8003c6c8: 0109b503 ld a0,16(s3) + 8003c6cc: 00000913 li s2,0 + 8003c6d0: 04053513 sltiu a0,a0,64 + 8003c6d4: 00154513 xori a0,a0,1 + 8003c6d8: 00157513 andi a0,a0,1 + 8003c6dc: ea4fd0ef jal ra,80039d80 <_assert> + 8003c6e0: 0109b503 ld a0,16(s3) + 8003c6e4: 03f57513 andi a0,a0,63 + 8003c6e8: 00153513 seqz a0,a0 + 8003c6ec: e94fd0ef jal ra,80039d80 <_assert> + 8003c6f0: 0109b703 ld a4,16(s3) + 8003c6f4: 00100613 li a2,1 + 8003c6f8: 00000793 li a5,0 + 8003c6fc: 00675713 srli a4,a4,0x6 + 8003c700: 00100693 li a3,1 + 8003c704: 00100513 li a0,1 + 8003c708: 00e67e63 bgeu a2,a4,8003c724 + 8003c70c: 0017879b addiw a5,a5,1 + 8003c710: 00175713 srli a4,a4,0x1 + 8003c714: 0ff7f793 andi a5,a5,255 + 8003c718: fed71ae3 bne a4,a3,8003c70c + 8003c71c: 0407b513 sltiu a0,a5,64 + 8003c720: 00078913 mv s2,a5 + 8003c724: e5cfd0ef jal ra,80039d80 <_assert> + 8003c728: 0209b783 ld a5,32(s3) + 8003c72c: 00078663 beqz a5,8003c738 + 8003c730: 0289b703 ld a4,40(s3) + 8003c734: 02e7b423 sd a4,40(a5) + 8003c738: 0289b503 ld a0,40(s3) + 8003c73c: 00050463 beqz a0,8003c744 + 8003c740: 02f53023 sd a5,32(a0) + 8003c744: 00391b13 slli s6,s2,0x3 + 8003c748: 01648b33 add s6,s1,s6 + 8003c74c: 000b3783 ld a5,0(s6) + 8003c750: 02f99863 bne s3,a5,8003c780 + 8003c754: 00153513 seqz a0,a0 + 8003c758: e28fd0ef jal ra,80039d80 <_assert> + 8003c75c: 0209b783 ld a5,32(s3) + 8003c760: 00fb3023 sd a5,0(s6) + 8003c764: 00079e63 bnez a5,8003c780 + 8003c768: 2004b703 ld a4,512(s1) + 8003c76c: 00100793 li a5,1 + 8003c770: 012797b3 sll a5,a5,s2 + 8003c774: fff7c793 not a5,a5 + 8003c778: 00f777b3 and a5,a4,a5 + 8003c77c: 20f4b023 sd a5,512(s1) + 8003c780: ff043783 ld a5,-16(s0) + 8003c784: 0109b703 ld a4,16(s3) + 8003c788: 00e787b3 add a5,a5,a4 + 8003c78c: fef43823 sd a5,-16(s0) + 8003c790: 0009b823 sd zero,16(s3) + 8003c794: ff043503 ld a0,-16(s0) + 8003c798: 03f57513 andi a0,a0,63 + 8003c79c: 00153513 seqz a0,a0 + 8003c7a0: de0fd0ef jal ra,80039d80 <_assert> + 8003c7a4: 0009b783 ld a5,0(s3) + 8003c7a8: fef43023 sd a5,-32(s0) + 8003c7ac: 00078463 beqz a5,8003c7b4 + 8003c7b0: 0157b423 sd s5,8(a5) + 8003c7b4: 000a0513 mv a0,s4 + 8003c7b8: dc8fd0ef jal ra,80039d80 <_assert> + 8003c7bc: 00100513 li a0,1 + 8003c7c0: dc0fd0ef jal ra,80039d80 <_assert> + 8003c7c4: ff043503 ld a0,-16(s0) + 8003c7c8: 04053513 sltiu a0,a0,64 + 8003c7cc: 00154513 xori a0,a0,1 + 8003c7d0: 00157513 andi a0,a0,1 + 8003c7d4: dacfd0ef jal ra,80039d80 <_assert> + 8003c7d8: ff043503 ld a0,-16(s0) + 8003c7dc: 03f57513 andi a0,a0,63 + 8003c7e0: 00153513 seqz a0,a0 + 8003c7e4: d9cfd0ef jal ra,80039d80 <_assert> + 8003c7e8: ff043783 ld a5,-16(s0) + 8003c7ec: 00100713 li a4,1 + 8003c7f0: 0067d793 srli a5,a5,0x6 + 8003c7f4: 22f77a63 bgeu a4,a5,8003ca28 + 8003c7f8: 00000513 li a0,0 + 8003c7fc: 0015051b addiw a0,a0,1 + 8003c800: 0017d793 srli a5,a5,0x1 + 8003c804: 0ff57513 andi a0,a0,255 + 8003c808: fee79ae3 bne a5,a4,8003c7fc + 8003c80c: 00050993 mv s3,a0 + 8003c810: 01379933 sll s2,a5,s3 + 8003c814: 04053513 sltiu a0,a0,64 + 8003c818: d68fd0ef jal ra,80039d80 <_assert> + 8003c81c: 00399793 slli a5,s3,0x3 + 8003c820: 00f487b3 add a5,s1,a5 + 8003c824: 0007b703 ld a4,0(a5) + 8003c828: 00043423 sd zero,8(s0) + 8003c82c: 00e43023 sd a4,0(s0) + 8003c830: 00070463 beqz a4,8003c838 + 8003c834: 03573423 sd s5,40(a4) + 8003c838: 0157b023 sd s5,0(a5) + 8003c83c: 2004b783 ld a5,512(s1) + 8003c840: 2104b303 ld t1,528(s1) + 8003c844: 0127e7b3 or a5,a5,s2 + 8003c848: 20f4b023 sd a5,512(s1) + 8003c84c: e2030ce3 beqz t1,8003c684 + 8003c850: 03013403 ld s0,48(sp) + 8003c854: 03813083 ld ra,56(sp) + 8003c858: 02813483 ld s1,40(sp) + 8003c85c: 02013903 ld s2,32(sp) + 8003c860: 01813983 ld s3,24(sp) + 8003c864: 01013a03 ld s4,16(sp) + 8003c868: 00813a83 ld s5,8(sp) + 8003c86c: 00013b03 ld s6,0(sp) + 8003c870: 04010113 addi sp,sp,64 + 8003c874: 00030067 jr t1 + 8003c878: 000a0513 mv a0,s4 + 8003c87c: d04fd0ef jal ra,80039d80 <_assert> + 8003c880: 00100513 li a0,1 + 8003c884: cfcfd0ef jal ra,80039d80 <_assert> + 8003c888: ff043503 ld a0,-16(s0) + 8003c88c: 04053513 sltiu a0,a0,64 + 8003c890: 00154513 xori a0,a0,1 + 8003c894: 00157513 andi a0,a0,1 + 8003c898: ce8fd0ef jal ra,80039d80 <_assert> + 8003c89c: ff043503 ld a0,-16(s0) + 8003c8a0: 03f57513 andi a0,a0,63 + 8003c8a4: 00153513 seqz a0,a0 + 8003c8a8: cd8fd0ef jal ra,80039d80 <_assert> + 8003c8ac: ff043783 ld a5,-16(s0) + 8003c8b0: 00100693 li a3,1 + 8003c8b4: 00000513 li a0,0 + 8003c8b8: 0067d793 srli a5,a5,0x6 + 8003c8bc: 00100713 li a4,1 + 8003c8c0: 16f6f463 bgeu a3,a5,8003ca28 + 8003c8c4: 0015051b addiw a0,a0,1 + 8003c8c8: 0017d793 srli a5,a5,0x1 + 8003c8cc: 0ff57513 andi a0,a0,255 + 8003c8d0: fee79ae3 bne a5,a4,8003c8c4 + 8003c8d4: f39ff06f j 8003c80c + 8003c8d8: ca8fd0ef jal ra,80039d80 <_assert> + 8003c8dc: 00100513 li a0,1 + 8003c8e0: ca0fd0ef jal ra,80039d80 <_assert> + 8003c8e4: 01093503 ld a0,16(s2) + 8003c8e8: 00000a93 li s5,0 + 8003c8ec: 04053513 sltiu a0,a0,64 + 8003c8f0: 00154513 xori a0,a0,1 + 8003c8f4: 00157513 andi a0,a0,1 + 8003c8f8: c88fd0ef jal ra,80039d80 <_assert> + 8003c8fc: 01093503 ld a0,16(s2) + 8003c900: 03f57513 andi a0,a0,63 + 8003c904: 00153513 seqz a0,a0 + 8003c908: c78fd0ef jal ra,80039d80 <_assert> + 8003c90c: 01093703 ld a4,16(s2) + 8003c910: 00100613 li a2,1 + 8003c914: 00000793 li a5,0 + 8003c918: 00675713 srli a4,a4,0x6 + 8003c91c: 00100693 li a3,1 + 8003c920: 00100513 li a0,1 + 8003c924: 00e67e63 bgeu a2,a4,8003c940 + 8003c928: 0017879b addiw a5,a5,1 + 8003c92c: 00175713 srli a4,a4,0x1 + 8003c930: 0ff7f793 andi a5,a5,255 + 8003c934: fed71ae3 bne a4,a3,8003c928 + 8003c938: 0407b513 sltiu a0,a5,64 + 8003c93c: 00078a93 mv s5,a5 + 8003c940: c40fd0ef jal ra,80039d80 <_assert> + 8003c944: 02093783 ld a5,32(s2) + 8003c948: 00078663 beqz a5,8003c954 + 8003c94c: 02893703 ld a4,40(s2) + 8003c950: 02e7b423 sd a4,40(a5) + 8003c954: 02893503 ld a0,40(s2) + 8003c958: 00050463 beqz a0,8003c960 + 8003c95c: 02f53023 sd a5,32(a0) + 8003c960: 003a9b13 slli s6,s5,0x3 + 8003c964: 01648b33 add s6,s1,s6 + 8003c968: 000b3783 ld a5,0(s6) + 8003c96c: 02f91863 bne s2,a5,8003c99c + 8003c970: 00153513 seqz a0,a0 + 8003c974: c0cfd0ef jal ra,80039d80 <_assert> + 8003c978: 02093783 ld a5,32(s2) + 8003c97c: 00fb3023 sd a5,0(s6) + 8003c980: 00079e63 bnez a5,8003c99c + 8003c984: 2004b703 ld a4,512(s1) + 8003c988: 00100793 li a5,1 + 8003c98c: 015797b3 sll a5,a5,s5 + 8003c990: fff7c793 not a5,a5 + 8003c994: 00f777b3 and a5,a4,a5 + 8003c998: 20f4b023 sd a5,512(s1) + 8003c99c: 01093783 ld a5,16(s2) + 8003c9a0: ff043703 ld a4,-16(s0) + 8003c9a4: 00e787b3 add a5,a5,a4 + 8003c9a8: 00f93823 sd a5,16(s2) + 8003c9ac: fe043823 sd zero,-16(s0) + 8003c9b0: 01093503 ld a0,16(s2) + 8003c9b4: 03f57513 andi a0,a0,63 + 8003c9b8: 00153513 seqz a0,a0 + 8003c9bc: bc4fd0ef jal ra,80039d80 <_assert> + 8003c9c0: 01393023 sd s3,0(s2) + 8003c9c4: 00098463 beqz s3,8003c9cc + 8003c9c8: 0129b423 sd s2,8(s3) + 8003c9cc: 000a0513 mv a0,s4 + 8003c9d0: bb0fd0ef jal ra,80039d80 <_assert> + 8003c9d4: 00100513 li a0,1 + 8003c9d8: ba8fd0ef jal ra,80039d80 <_assert> + 8003c9dc: 01093503 ld a0,16(s2) + 8003c9e0: 04053513 sltiu a0,a0,64 + 8003c9e4: 00154513 xori a0,a0,1 + 8003c9e8: 00157513 andi a0,a0,1 + 8003c9ec: b94fd0ef jal ra,80039d80 <_assert> + 8003c9f0: 01093503 ld a0,16(s2) + 8003c9f4: 03f57513 andi a0,a0,63 + 8003c9f8: 00153513 seqz a0,a0 + 8003c9fc: b84fd0ef jal ra,80039d80 <_assert> + 8003ca00: 01093783 ld a5,16(s2) + 8003ca04: 00100713 li a4,1 + 8003ca08: 0067d793 srli a5,a5,0x6 + 8003ca0c: 02f77663 bgeu a4,a5,8003ca38 + 8003ca10: 00000513 li a0,0 + 8003ca14: 0015051b addiw a0,a0,1 + 8003ca18: 0017d793 srli a5,a5,0x1 + 8003ca1c: 0ff57513 andi a0,a0,255 + 8003ca20: fee79ae3 bne a5,a4,8003ca14 + 8003ca24: c1dff06f j 8003c640 + 8003ca28: 00100913 li s2,1 + 8003ca2c: 00000993 li s3,0 + 8003ca30: 00100513 li a0,1 + 8003ca34: de5ff06f j 8003c818 + 8003ca38: 00100413 li s0,1 + 8003ca3c: 00000993 li s3,0 + 8003ca40: 00100513 li a0,1 + 8003ca44: c09ff06f j 8003c64c + 8003ca48: 00000a93 li s5,0 + 8003ca4c: 00100513 li a0,1 + 8003ca50: afdff06f j 8003c54c + 8003ca54: 00000a93 li s5,0 + 8003ca58: 00100513 li a0,1 + 8003ca5c: a31ff06f j 8003c48c + +000000008003ca60 <_wordcopy_fwd_aligned>: + 8003ca60: 00767793 andi a5,a2,7 + 8003ca64: 0000a717 auipc a4,0xa + 8003ca68: edc70713 addi a4,a4,-292 # 80046940 + 8003ca6c: 00279793 slli a5,a5,0x2 + 8003ca70: 00e787b3 add a5,a5,a4 + 8003ca74: 0007a783 lw a5,0(a5) + 8003ca78: 00e787b3 add a5,a5,a4 + 8003ca7c: 00078067 jr a5 + 8003ca80: 0005b703 ld a4,0(a1) + 8003ca84: ff050793 addi a5,a0,-16 + 8003ca88: ff858593 addi a1,a1,-8 + 8003ca8c: 00160613 addi a2,a2,1 + 8003ca90: 0105b803 ld a6,16(a1) + 8003ca94: 01878693 addi a3,a5,24 + 8003ca98: 00e53023 sd a4,0(a0) + 8003ca9c: 0185b703 ld a4,24(a1) + 8003caa0: 02078513 addi a0,a5,32 + 8003caa4: 0106b023 sd a6,0(a3) + 8003caa8: 0205b803 ld a6,32(a1) + 8003caac: 02878693 addi a3,a5,40 + 8003cab0: 00e53023 sd a4,0(a0) + 8003cab4: 0285b703 ld a4,40(a1) + 8003cab8: 03078513 addi a0,a5,48 + 8003cabc: 0106b023 sd a6,0(a3) + 8003cac0: 0305b803 ld a6,48(a1) + 8003cac4: 03878693 addi a3,a5,56 + 8003cac8: 00e53023 sd a4,0(a0) + 8003cacc: 0385b703 ld a4,56(a1) + 8003cad0: 04078793 addi a5,a5,64 + 8003cad4: 0106b023 sd a6,0(a3) + 8003cad8: ff860613 addi a2,a2,-8 + 8003cadc: 00078513 mv a0,a5 + 8003cae0: 04058593 addi a1,a1,64 + 8003cae4: 02060063 beqz a2,8003cb04 <_wordcopy_fwd_aligned+0xa4> + 8003cae8: 0005b803 ld a6,0(a1) + 8003caec: 00878693 addi a3,a5,8 + 8003caf0: 00e53023 sd a4,0(a0) + 8003caf4: 0085b703 ld a4,8(a1) + 8003caf8: 01078513 addi a0,a5,16 + 8003cafc: 0106b023 sd a6,0(a3) + 8003cb00: f91ff06f j 8003ca90 <_wordcopy_fwd_aligned+0x30> + 8003cb04: 00e53023 sd a4,0(a0) + 8003cb08: 00008067 ret + 8003cb0c: fff60613 addi a2,a2,-1 + 8003cb10: 0005b703 ld a4,0(a1) + 8003cb14: fe0608e3 beqz a2,8003cb04 <_wordcopy_fwd_aligned+0xa4> + 8003cb18: 00858593 addi a1,a1,8 + 8003cb1c: 00050793 mv a5,a0 + 8003cb20: fc9ff06f j 8003cae8 <_wordcopy_fwd_aligned+0x88> + 8003cb24: 0005b803 ld a6,0(a1) + 8003cb28: 00050693 mv a3,a0 + 8003cb2c: fd058593 addi a1,a1,-48 + 8003cb30: fc850793 addi a5,a0,-56 + 8003cb34: 00660613 addi a2,a2,6 + 8003cb38: f95ff06f j 8003cacc <_wordcopy_fwd_aligned+0x6c> + 8003cb3c: 0005b703 ld a4,0(a1) + 8003cb40: fd050793 addi a5,a0,-48 + 8003cb44: fd858593 addi a1,a1,-40 + 8003cb48: 00560613 addi a2,a2,5 + 8003cb4c: f75ff06f j 8003cac0 <_wordcopy_fwd_aligned+0x60> + 8003cb50: 0005b803 ld a6,0(a1) + 8003cb54: 00050693 mv a3,a0 + 8003cb58: fe058593 addi a1,a1,-32 + 8003cb5c: fd850793 addi a5,a0,-40 + 8003cb60: 00460613 addi a2,a2,4 + 8003cb64: f51ff06f j 8003cab4 <_wordcopy_fwd_aligned+0x54> + 8003cb68: 0005b703 ld a4,0(a1) + 8003cb6c: fe050793 addi a5,a0,-32 + 8003cb70: fe858593 addi a1,a1,-24 + 8003cb74: 00360613 addi a2,a2,3 + 8003cb78: f31ff06f j 8003caa8 <_wordcopy_fwd_aligned+0x48> + 8003cb7c: 0005b803 ld a6,0(a1) + 8003cb80: 00050693 mv a3,a0 + 8003cb84: ff058593 addi a1,a1,-16 + 8003cb88: fe850793 addi a5,a0,-24 + 8003cb8c: 00260613 addi a2,a2,2 + 8003cb90: f0dff06f j 8003ca9c <_wordcopy_fwd_aligned+0x3c> + 8003cb94: f6060ae3 beqz a2,8003cb08 <_wordcopy_fwd_aligned+0xa8> + 8003cb98: 0005b803 ld a6,0(a1) + 8003cb9c: 00050693 mv a3,a0 + 8003cba0: ff850793 addi a5,a0,-8 + 8003cba4: f51ff06f j 8003caf4 <_wordcopy_fwd_aligned+0x94> + +000000008003cba8 <_wordcopy_fwd_dest_aligned>: + 8003cba8: 0075f713 andi a4,a1,7 + 8003cbac: 0037179b slliw a5,a4,0x3 + 8003cbb0: 00371313 slli t1,a4,0x3 + 8003cbb4: 00367693 andi a3,a2,3 + 8003cbb8: 04000713 li a4,64 + 8003cbbc: 00200813 li a6,2 + 8003cbc0: 40f707bb subw a5,a4,a5 + 8003cbc4: ff85f593 andi a1,a1,-8 + 8003cbc8: 0d068e63 beq a3,a6,8003cca4 <_wordcopy_fwd_dest_aligned+0xfc> + 8003cbcc: 00300713 li a4,3 + 8003cbd0: 02e68c63 beq a3,a4,8003cc08 <_wordcopy_fwd_dest_aligned+0x60> + 8003cbd4: 00100713 li a4,1 + 8003cbd8: 00e68663 beq a3,a4,8003cbe4 <_wordcopy_fwd_dest_aligned+0x3c> + 8003cbdc: 0e061863 bnez a2,8003cccc <_wordcopy_fwd_dest_aligned+0x124> + 8003cbe0: 00008067 ret + 8003cbe4: fff60613 addi a2,a2,-1 + 8003cbe8: 0005b703 ld a4,0(a1) + 8003cbec: 0085b803 ld a6,8(a1) + 8003cbf0: 0c061863 bnez a2,8003ccc0 <_wordcopy_fwd_dest_aligned+0x118> + 8003cbf4: 00675733 srl a4,a4,t1 + 8003cbf8: 00f817b3 sll a5,a6,a5 + 8003cbfc: 00f76733 or a4,a4,a5 + 8003cc00: 00e53023 sd a4,0(a0) + 8003cc04: 00008067 ret + 8003cc08: 0005b703 ld a4,0(a1) + 8003cc0c: 0085b683 ld a3,8(a1) + 8003cc10: 00058893 mv a7,a1 + 8003cc14: 00160613 addi a2,a2,1 + 8003cc18: ff050593 addi a1,a0,-16 + 8003cc1c: 0340006f j 8003cc50 <_wordcopy_fwd_dest_aligned+0xa8> + 8003cc20: 006756b3 srl a3,a4,t1 + 8003cc24: 00f81733 sll a4,a6,a5 + 8003cc28: 00e6e6b3 or a3,a3,a4 + 8003cc2c: 00858e13 addi t3,a1,8 + 8003cc30: 0008b703 ld a4,0(a7) + 8003cc34: 00d53023 sd a3,0(a0) + 8003cc38: 00f716b3 sll a3,a4,a5 + 8003cc3c: 00685833 srl a6,a6,t1 + 8003cc40: 00d86833 or a6,a6,a3 + 8003cc44: 01058513 addi a0,a1,16 + 8003cc48: 0088b683 ld a3,8(a7) + 8003cc4c: 010e3023 sd a6,0(t3) + 8003cc50: 00675733 srl a4,a4,t1 + 8003cc54: 00f69833 sll a6,a3,a5 + 8003cc58: 01076833 or a6,a4,a6 + 8003cc5c: 01858e13 addi t3,a1,24 + 8003cc60: 0108b703 ld a4,16(a7) + 8003cc64: 01053023 sd a6,0(a0) + 8003cc68: 00f71533 sll a0,a4,a5 + 8003cc6c: 0066d6b3 srl a3,a3,t1 + 8003cc70: 00a6e6b3 or a3,a3,a0 + 8003cc74: 0188b803 ld a6,24(a7) + 8003cc78: 02058593 addi a1,a1,32 + 8003cc7c: 00de3023 sd a3,0(t3) + 8003cc80: ffc60613 addi a2,a2,-4 + 8003cc84: 00058513 mv a0,a1 + 8003cc88: 02088893 addi a7,a7,32 + 8003cc8c: f8061ae3 bnez a2,8003cc20 <_wordcopy_fwd_dest_aligned+0x78> + 8003cc90: 00675733 srl a4,a4,t1 + 8003cc94: 00f817b3 sll a5,a6,a5 + 8003cc98: 00f76733 or a4,a4,a5 + 8003cc9c: 00e53023 sd a4,0(a0) + 8003cca0: f65ff06f j 8003cc04 <_wordcopy_fwd_dest_aligned+0x5c> + 8003cca4: 0005b683 ld a3,0(a1) + 8003cca8: 0085b703 ld a4,8(a1) + 8003ccac: ff858893 addi a7,a1,-8 + 8003ccb0: 00050e13 mv t3,a0 + 8003ccb4: fe850593 addi a1,a0,-24 + 8003ccb8: 00260613 addi a2,a2,2 + 8003ccbc: fadff06f j 8003cc68 <_wordcopy_fwd_dest_aligned+0xc0> + 8003ccc0: 01058893 addi a7,a1,16 + 8003ccc4: 00050593 mv a1,a0 + 8003ccc8: f59ff06f j 8003cc20 <_wordcopy_fwd_dest_aligned+0x78> + 8003cccc: 0005b803 ld a6,0(a1) + 8003ccd0: 0085b703 ld a4,8(a1) + 8003ccd4: 00858893 addi a7,a1,8 + 8003ccd8: 00050e13 mv t3,a0 + 8003ccdc: ff850593 addi a1,a0,-8 + 8003cce0: f59ff06f j 8003cc38 <_wordcopy_fwd_dest_aligned+0x90> diff --git a/bin/custom-output/rt-thread/rtthread.elf b/bin/custom-output/rt-thread/rtthread.elf new file mode 100755 index 0000000000000000000000000000000000000000..e508b3ece4ea6bb8f8d0565bcef1b33f7e46e837 GIT binary patch literal 647992 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 z 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

2F1` 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

: + 800002c8: ff010113 addi sp,sp,-16 + 800002cc: 00113423 sd ra,8(sp) + 800002d0: 00813023 sd s0,0(sp) + 800002d4: 01010413 addi s0,sp,16 + 800002d8: 00015517 auipc a0,0x15 + 800002dc: 36850513 addi a0,a0,872 # 80015640 + 800002e0: 73d070ef jal ra,8000821c + 800002e4: 00000793 li a5,0 + 800002e8: 00078513 mv a0,a5 + 800002ec: 00813083 ld ra,8(sp) + 800002f0: 00013403 ld s0,0(sp) + 800002f4: 01010113 addi sp,sp,16 + 800002f8: 00008067 ret + +00000000800002fc : + 800002fc: fe010113 addi sp,sp,-32 + 80000300: 00813c23 sd s0,24(sp) + 80000304: 02010413 addi s0,sp,32 + 80000308: f14027f3 csrr a5,mhartid + 8000030c: fef42623 sw a5,-20(s0) + 80000310: fec42783 lw a5,-20(s0) + 80000314: 00078513 mv a0,a5 + 80000318: 01813403 ld s0,24(sp) + 8000031c: 02010113 addi sp,sp,32 + 80000320: 00008067 ret + +0000000080000324 : + 80000324: fe010113 addi sp,sp,-32 + 80000328: 00113c23 sd ra,24(sp) + 8000032c: 00813823 sd s0,16(sp) + 80000330: 02010413 addi s0,sp,32 + 80000334: fc9ff0ef jal ra,800002fc + 80000338: 00050793 mv a5,a0 + 8000033c: 0007879b sext.w a5,a5 + 80000340: fef42623 sw a5,-20(s0) + 80000344: fec42783 lw a5,-20(s0) + 80000348: 00c7979b slliw a5,a5,0xc + 8000034c: 0007879b sext.w a5,a5 + 80000350: 00078713 mv a4,a5 + 80000354: 0c2007b7 lui a5,0xc200 + 80000358: 00478793 addi a5,a5,4 # c200004 <__STACKSIZE__+0xc1fc004> + 8000035c: 00f707b3 add a5,a4,a5 + 80000360: 0007a783 lw a5,0(a5) + 80000364: fef42423 sw a5,-24(s0) + 80000368: fe842783 lw a5,-24(s0) + 8000036c: 00078513 mv a0,a5 + 80000370: 01813083 ld ra,24(sp) + 80000374: 01013403 ld s0,16(sp) + 80000378: 02010113 addi sp,sp,32 + 8000037c: 00008067 ret + +0000000080000380 : + 80000380: fd010113 addi sp,sp,-48 + 80000384: 02113423 sd ra,40(sp) + 80000388: 02813023 sd s0,32(sp) + 8000038c: 03010413 addi s0,sp,48 + 80000390: 00050793 mv a5,a0 + 80000394: fcf42e23 sw a5,-36(s0) + 80000398: f65ff0ef jal ra,800002fc + 8000039c: 00050793 mv a5,a0 + 800003a0: 0007879b sext.w a5,a5 + 800003a4: fef42623 sw a5,-20(s0) + 800003a8: fec42783 lw a5,-20(s0) + 800003ac: 00c7979b slliw a5,a5,0xc + 800003b0: 0007879b sext.w a5,a5 + 800003b4: 00078713 mv a4,a5 + 800003b8: 0c2007b7 lui a5,0xc200 + 800003bc: 00478793 addi a5,a5,4 # c200004 <__STACKSIZE__+0xc1fc004> + 800003c0: 00f707b3 add a5,a4,a5 + 800003c4: 00078713 mv a4,a5 + 800003c8: fdc42783 lw a5,-36(s0) + 800003cc: 00f72023 sw a5,0(a4) + 800003d0: 00000013 nop + 800003d4: 02813083 ld ra,40(sp) + 800003d8: 02013403 ld s0,32(sp) + 800003dc: 03010113 addi sp,sp,48 + 800003e0: 00008067 ret + +00000000800003e4 : + 800003e4: f9010113 addi sp,sp,-112 + 800003e8: 06813423 sd s0,104(sp) + 800003ec: 07010413 addi s0,sp,112 + 800003f0: fca43423 sd a0,-56(s0) + 800003f4: fcb43023 sd a1,-64(s0) + 800003f8: fac43c23 sd a2,-72(s0) + 800003fc: fad43823 sd a3,-80(s0) + 80000400: fae43423 sd a4,-88(s0) + 80000404: faf43023 sd a5,-96(s0) + 80000408: f9043c23 sd a6,-104(s0) + 8000040c: fb843503 ld a0,-72(s0) + 80000410: fb043583 ld a1,-80(s0) + 80000414: fa843603 ld a2,-88(s0) + 80000418: fa043683 ld a3,-96(s0) + 8000041c: f9843703 ld a4,-104(s0) + 80000420: fc043803 ld a6,-64(s0) + 80000424: fc843883 ld a7,-56(s0) + 80000428: 00000073 ecall + 8000042c: 00050793 mv a5,a0 + 80000430: fcf43823 sd a5,-48(s0) + 80000434: 00058793 mv a5,a1 + 80000438: fcf43c23 sd a5,-40(s0) + 8000043c: fd043783 ld a5,-48(s0) + 80000440: fef43023 sd a5,-32(s0) + 80000444: fd843783 ld a5,-40(s0) + 80000448: fef43423 sd a5,-24(s0) + 8000044c: 00000713 li a4,0 + 80000450: fe043703 ld a4,-32(s0) + 80000454: 00000793 li a5,0 + 80000458: fe843783 ld a5,-24(s0) + 8000045c: 00070313 mv t1,a4 + 80000460: 00078393 mv t2,a5 + 80000464: 00030713 mv a4,t1 + 80000468: 00038793 mv a5,t2 + 8000046c: 00070513 mv a0,a4 + 80000470: 00078593 mv a1,a5 + 80000474: 06813403 ld s0,104(sp) + 80000478: 07010113 addi sp,sp,112 + 8000047c: 00008067 ret + +0000000080000480 : + 80000480: ff010113 addi sp,sp,-16 + 80000484: 00113423 sd ra,8(sp) + 80000488: 00813023 sd s0,0(sp) + 8000048c: 01010413 addi s0,sp,16 + 80000490: 00000813 li a6,0 + 80000494: 00000793 li a5,0 + 80000498: 00000713 li a4,0 + 8000049c: 00000693 li a3,0 + 800004a0: 00000613 li a2,0 + 800004a4: 00000593 li a1,0 + 800004a8: 00800513 li a0,8 + 800004ac: f39ff0ef jal ra,800003e4 + 800004b0: 00000013 nop + 800004b4: 00813083 ld ra,8(sp) + 800004b8: 00013403 ld s0,0(sp) + 800004bc: 01010113 addi sp,sp,16 + 800004c0: 00008067 ret + +00000000800004c4 : + 800004c4: ff010113 addi sp,sp,-16 + 800004c8: 00113423 sd ra,8(sp) + 800004cc: 00813023 sd s0,0(sp) + 800004d0: 01010413 addi s0,sp,16 + 800004d4: 0002b717 auipc a4,0x2b + 800004d8: db070713 addi a4,a4,-592 # 8002b284 <__bss_end> + 800004dc: 00022797 auipc a5,0x22 + 800004e0: ae478793 addi a5,a5,-1308 # 80021fc0 + 800004e4: 40f707b3 sub a5,a4,a5 + 800004e8: 00078613 mv a2,a5 + 800004ec: 00000593 li a1,0 + 800004f0: 00022517 auipc a0,0x22 + 800004f4: ad050513 addi a0,a0,-1328 # 80021fc0 + 800004f8: 5cc060ef jal ra,80006ac4 + 800004fc: c79ff0ef jal ra,80000174 + 80000500: 42c060ef jal ra,8000692c + 80000504: 00000013 nop + 80000508: 00813083 ld ra,8(sp) + 8000050c: 00013403 ld s0,0(sp) + 80000510: 01010113 addi sp,sp,16 + 80000514: 00008067 ret + +0000000080000518 : + 80000518: ff010113 addi sp,sp,-16 + 8000051c: 00113423 sd ra,8(sp) + 80000520: 00813023 sd s0,0(sp) + 80000524: 01010413 addi s0,sp,16 + 80000528: 79c080ef jal ra,80008cc4 + 8000052c: 208000ef jal ra,80000734 + 80000530: 0002b717 auipc a4,0x2b + 80000534: d5470713 addi a4,a4,-684 # 8002b284 <__bss_end> + 80000538: 064007b7 lui a5,0x6400 + 8000053c: 00f707b3 add a5,a4,a5 + 80000540: 00078593 mv a1,a5 + 80000544: 0002b517 auipc a0,0x2b + 80000548: d4050513 addi a0,a0,-704 # 8002b284 <__bss_end> + 8000054c: 6ad030ef jal ra,800043f8 + 80000550: 00015517 auipc a0,0x15 + 80000554: 10050513 addi a0,a0,256 # 80015650 + 80000558: 401070ef jal ra,80008158 + 8000055c: 424080ef jal ra,80008980 + 80000560: 0002b697 auipc a3,0x2b + 80000564: d2468693 addi a3,a3,-732 # 8002b284 <__bss_end> + 80000568: 0002b717 auipc a4,0x2b + 8000056c: d1c70713 addi a4,a4,-740 # 8002b284 <__bss_end> + 80000570: 064007b7 lui a5,0x6400 + 80000574: 00f707b3 add a5,a4,a5 + 80000578: 00078613 mv a2,a5 + 8000057c: 00068593 mv a1,a3 + 80000580: 00015517 auipc a0,0x15 + 80000584: 0d850513 addi a0,a0,216 # 80015658 + 80000588: 495070ef jal ra,8000821c + 8000058c: 2e0060ef jal ra,8000686c + 80000590: 00000013 nop + 80000594: 00813083 ld ra,8(sp) + 80000598: 00013403 ld s0,0(sp) + 8000059c: 01010113 addi sp,sp,16 + 800005a0: 00008067 ret + +00000000800005a4 : + 800005a4: ff010113 addi sp,sp,-16 + 800005a8: 00113423 sd ra,8(sp) + 800005ac: 00813023 sd s0,0(sp) + 800005b0: 01010413 addi s0,sp,16 + 800005b4: ecdff0ef jal ra,80000480 + 800005b8: 0000006f j 800005b8 + +00000000800005bc : + 800005bc: ff010113 addi sp,sp,-16 + 800005c0: 00813423 sd s0,8(sp) + 800005c4: 01010413 addi s0,sp,16 + 800005c8: 00000013 nop + 800005cc: 00813403 ld s0,8(sp) + 800005d0: 01010113 addi sp,sp,16 + 800005d4: 00008067 ret + +00000000800005d8 : + 800005d8: fe010113 addi sp,sp,-32 + 800005dc: 00113c23 sd ra,24(sp) + 800005e0: 00813823 sd s0,16(sp) + 800005e4: 02010413 addi s0,sp,32 + 800005e8: fea43423 sd a0,-24(s0) + 800005ec: feb43023 sd a1,-32(s0) + 800005f0: fe843783 ld a5,-24(s0) + 800005f4: 00079e63 bnez a5,80000610 + 800005f8: 03a00613 li a2,58 + 800005fc: 00018597 auipc a1,0x18 + 80000600: d1c58593 addi a1,a1,-740 # 80018318 <__FUNCTION__.3511> + 80000604: 00015517 auipc a0,0x15 + 80000608: 07450513 addi a0,a0,116 # 80015678 + 8000060c: 671070ef jal ra,8000847c + 80000610: fe843783 ld a5,-24(s0) + 80000614: fe043703 ld a4,-32(s0) + 80000618: 00072683 lw a3,0(a4) + 8000061c: 08d7a423 sw a3,136(a5) # 6400088 <__STACKSIZE__+0x63fc088> + 80000620: 00472703 lw a4,4(a4) + 80000624: 08e7a623 sw a4,140(a5) + 80000628: 00000793 li a5,0 + 8000062c: 00078513 mv a0,a5 + 80000630: 01813083 ld ra,24(sp) + 80000634: 01013403 ld s0,16(sp) + 80000638: 02010113 addi sp,sp,32 + 8000063c: 00008067 ret + +0000000080000640 : + 80000640: fc010113 addi sp,sp,-64 + 80000644: 02113c23 sd ra,56(sp) + 80000648: 02813823 sd s0,48(sp) + 8000064c: 04010413 addi s0,sp,64 + 80000650: fca43c23 sd a0,-40(s0) + 80000654: 00058793 mv a5,a1 + 80000658: fcc43423 sd a2,-56(s0) + 8000065c: fcf42a23 sw a5,-44(s0) + 80000660: fd843783 ld a5,-40(s0) + 80000664: 0787b783 ld a5,120(a5) + 80000668: fef43423 sd a5,-24(s0) + 8000066c: 00100793 li a5,1 + 80000670: fef42223 sw a5,-28(s0) + 80000674: fe843783 ld a5,-24(s0) + 80000678: 00079e63 bnez a5,80000694 + 8000067c: 04700613 li a2,71 + 80000680: 00018597 auipc a1,0x18 + 80000684: cb058593 addi a1,a1,-848 # 80018330 <__FUNCTION__.3519> + 80000688: 00015517 auipc a0,0x15 + 8000068c: 00850513 addi a0,a0,8 # 80015690 + 80000690: 5ed070ef jal ra,8000847c + 80000694: fe442783 lw a5,-28(s0) + 80000698: 0007871b sext.w a4,a5 + 8000069c: 00300793 li a5,3 + 800006a0: 00f71e63 bne a4,a5,800006bc + 800006a4: 04800613 li a2,72 + 800006a8: 00018597 auipc a1,0x18 + 800006ac: c8858593 addi a1,a1,-888 # 80018330 <__FUNCTION__.3519> + 800006b0: 00015517 auipc a0,0x15 + 800006b4: ff050513 addi a0,a0,-16 # 800156a0 + 800006b8: 5c5070ef jal ra,8000847c + 800006bc: 00000013 nop + 800006c0: 00000793 li a5,0 + 800006c4: 00078513 mv a0,a5 + 800006c8: 03813083 ld ra,56(sp) + 800006cc: 03013403 ld s0,48(sp) + 800006d0: 04010113 addi sp,sp,64 + 800006d4: 00008067 ret + +00000000800006d8 : + 800006d8: fe010113 addi sp,sp,-32 + 800006dc: 00813c23 sd s0,24(sp) + 800006e0: 02010413 addi s0,sp,32 + 800006e4: fea43423 sd a0,-24(s0) + 800006e8: 00058793 mv a5,a1 + 800006ec: fef403a3 sb a5,-25(s0) + 800006f0: fe744783 lbu a5,-25(s0) + 800006f4: 00078513 mv a0,a5 + 800006f8: 0000007b 0x7b + 800006fc: 00000013 nop + 80000700: 00078513 mv a0,a5 + 80000704: 01813403 ld s0,24(sp) + 80000708: 02010113 addi sp,sp,32 + 8000070c: 00008067 ret + +0000000080000710 : + 80000710: fe010113 addi sp,sp,-32 + 80000714: 00813c23 sd s0,24(sp) + 80000718: 02010413 addi s0,sp,32 + 8000071c: fea43423 sd a0,-24(s0) + 80000720: fff00793 li a5,-1 + 80000724: 00078513 mv a0,a5 + 80000728: 01813403 ld s0,24(sp) + 8000072c: 02010113 addi sp,sp,32 + 80000730: 00008067 ret + +0000000080000734 : + 80000734: fd010113 addi sp,sp,-48 + 80000738: 02113423 sd ra,40(sp) + 8000073c: 02813023 sd s0,32(sp) + 80000740: 03010413 addi s0,sp,48 + 80000744: 0001c7b7 lui a5,0x1c + 80000748: 2007879b addiw a5,a5,512 + 8000074c: fcf42c23 sw a5,-40(s0) + 80000750: fdc42783 lw a5,-36(s0) + 80000754: ff07f793 andi a5,a5,-16 + 80000758: 0087e793 ori a5,a5,8 + 8000075c: fcf42e23 sw a5,-36(s0) + 80000760: fdc42783 lw a5,-36(s0) + 80000764: fcf7f793 andi a5,a5,-49 + 80000768: fcf42e23 sw a5,-36(s0) + 8000076c: fdc42783 lw a5,-36(s0) + 80000770: f3f7f793 andi a5,a5,-193 + 80000774: fcf42e23 sw a5,-36(s0) + 80000778: fdc42783 lw a5,-36(s0) + 8000077c: eff7f793 andi a5,a5,-257 + 80000780: fcf42e23 sw a5,-36(s0) + 80000784: fdc42783 lw a5,-36(s0) + 80000788: dff7f793 andi a5,a5,-513 + 8000078c: fcf42e23 sw a5,-36(s0) + 80000790: fdc42703 lw a4,-36(s0) + 80000794: fc0007b7 lui a5,0xfc000 + 80000798: 3ff78793 addi a5,a5,1023 # fffffffffc0003ff <__bss_end+0xffffffff7bfd517b> + 8000079c: 00f777b3 and a5,a4,a5 + 800007a0: 00078713 mv a4,a5 + 800007a4: 000107b7 lui a5,0x10 + 800007a8: 00f767b3 or a5,a4,a5 + 800007ac: fcf42e23 sw a5,-36(s0) + 800007b0: fdc42703 lw a4,-36(s0) + 800007b4: 040007b7 lui a5,0x4000 + 800007b8: fff78793 addi a5,a5,-1 # 3ffffff <__STACKSIZE__+0x3ffbfff> + 800007bc: 00f777b3 and a5,a4,a5 + 800007c0: fcf42e23 sw a5,-36(s0) + 800007c4: 00022797 auipc a5,0x22 + 800007c8: 93c78793 addi a5,a5,-1732 # 80022100 + 800007cc: fef43423 sd a5,-24(s0) + 800007d0: 00022797 auipc a5,0x22 + 800007d4: 9d078793 addi a5,a5,-1584 # 800221a0 + 800007d8: fef43023 sd a5,-32(s0) + 800007dc: fe843783 ld a5,-24(s0) + 800007e0: 00018717 auipc a4,0x18 + 800007e4: b1070713 addi a4,a4,-1264 # 800182f0 <_uart_ops> + 800007e8: 08e7b023 sd a4,128(a5) + 800007ec: fe843783 ld a5,-24(s0) + 800007f0: fd843703 ld a4,-40(s0) + 800007f4: 08e7b423 sd a4,136(a5) + 800007f8: fe843783 ld a5,-24(s0) + 800007fc: 0001c737 lui a4,0x1c + 80000800: 2007071b addiw a4,a4,512 + 80000804: 08e7a423 sw a4,136(a5) + 80000808: fe043783 ld a5,-32(s0) + 8000080c: 10000737 lui a4,0x10000 + 80000810: 00e7b023 sd a4,0(a5) + 80000814: fe043783 ld a5,-32(s0) + 80000818: 00a00713 li a4,10 + 8000081c: 00e7a423 sw a4,8(a5) + 80000820: d9dff0ef jal ra,800005bc + 80000824: fe043683 ld a3,-32(s0) + 80000828: 04300613 li a2,67 + 8000082c: 00015597 auipc a1,0x15 + 80000830: e8458593 addi a1,a1,-380 # 800156b0 + 80000834: fe843503 ld a0,-24(s0) + 80000838: 5440f0ef jal ra,8000fd7c + 8000083c: 00000793 li a5,0 + 80000840: 00078513 mv a0,a5 + 80000844: 02813083 ld ra,40(sp) + 80000848: 02013403 ld s0,32(sp) + 8000084c: 03010113 addi sp,sp,48 + 80000850: 00008067 ret + +0000000080000854 : + 80000854: fe010113 addi sp,sp,-32 + 80000858: 00113c23 sd ra,24(sp) + 8000085c: 00813823 sd s0,16(sp) + 80000860: 02010413 addi s0,sp,32 + 80000864: fea43423 sd a0,-24(s0) + 80000868: fe843503 ld a0,-24(s0) + 8000086c: 171060ef jal ra,800071dc + 80000870: 00050793 mv a5,a0 + 80000874: 00078513 mv a0,a5 + 80000878: 01813083 ld ra,24(sp) + 8000087c: 01013403 ld s0,16(sp) + 80000880: 02010113 addi sp,sp,32 + 80000884: 00008067 ret + +0000000080000888 : + 80000888: fd010113 addi sp,sp,-48 + 8000088c: 02813423 sd s0,40(sp) + 80000890: 03010413 addi s0,sp,48 + 80000894: fca43c23 sd a0,-40(s0) + 80000898: fcb43823 sd a1,-48(s0) + 8000089c: fd843783 ld a5,-40(s0) + 800008a0: fef43423 sd a5,-24(s0) + 800008a4: fd043783 ld a5,-48(s0) + 800008a8: fef43023 sd a5,-32(s0) + 800008ac: 02c0006f j 800008d8 + 800008b0: fe043783 ld a5,-32(s0) + 800008b4: 0007c703 lbu a4,0(a5) + 800008b8: fe843783 ld a5,-24(s0) + 800008bc: 00e78023 sb a4,0(a5) + 800008c0: fe843783 ld a5,-24(s0) + 800008c4: 00178793 addi a5,a5,1 + 800008c8: fef43423 sd a5,-24(s0) + 800008cc: fe043783 ld a5,-32(s0) + 800008d0: 00178793 addi a5,a5,1 + 800008d4: fef43023 sd a5,-32(s0) + 800008d8: fe043783 ld a5,-32(s0) + 800008dc: 0007c783 lbu a5,0(a5) + 800008e0: fc0798e3 bnez a5,800008b0 + 800008e4: fe843783 ld a5,-24(s0) + 800008e8: 00078023 sb zero,0(a5) + 800008ec: fd843783 ld a5,-40(s0) + 800008f0: 00078513 mv a0,a5 + 800008f4: 02813403 ld s0,40(sp) + 800008f8: 03010113 addi sp,sp,48 + 800008fc: 00008067 ret + +0000000080000900 : + 80000900: fd010113 addi sp,sp,-48 + 80000904: 02113423 sd ra,40(sp) + 80000908: 02813023 sd s0,32(sp) + 8000090c: 03010413 addi s0,sp,48 + 80000910: fea43423 sd a0,-24(s0) + 80000914: feb43023 sd a1,-32(s0) + 80000918: fcc43c23 sd a2,-40(s0) + 8000091c: fd843603 ld a2,-40(s0) + 80000920: fe043583 ld a1,-32(s0) + 80000924: fe843503 ld a0,-24(s0) + 80000928: 6f8060ef jal ra,80007020 + 8000092c: 00050793 mv a5,a0 + 80000930: 00078513 mv a0,a5 + 80000934: 02813083 ld ra,40(sp) + 80000938: 02013403 ld s0,32(sp) + 8000093c: 03010113 addi sp,sp,48 + 80000940: 00008067 ret + +0000000080000944 : + 80000944: fd010113 addi sp,sp,-48 + 80000948: 02113423 sd ra,40(sp) + 8000094c: 02813023 sd s0,32(sp) + 80000950: 03010413 addi s0,sp,48 + 80000954: fca43c23 sd a0,-40(s0) + 80000958: fcb43823 sd a1,-48(s0) + 8000095c: fd843503 ld a0,-40(s0) + 80000960: 07d060ef jal ra,800071dc + 80000964: fea43423 sd a0,-24(s0) + 80000968: fd843703 ld a4,-40(s0) + 8000096c: fe843783 ld a5,-24(s0) + 80000970: 00f707b3 add a5,a4,a5 + 80000974: fd043583 ld a1,-48(s0) + 80000978: 00078513 mv a0,a5 + 8000097c: f0dff0ef jal ra,80000888 + 80000980: fd843783 ld a5,-40(s0) + 80000984: 00078513 mv a0,a5 + 80000988: 02813083 ld ra,40(sp) + 8000098c: 02013403 ld s0,32(sp) + 80000990: 03010113 addi sp,sp,48 + 80000994: 00008067 ret + +0000000080000998 : + 80000998: fe010113 addi sp,sp,-32 + 8000099c: 00113c23 sd ra,24(sp) + 800009a0: 00813823 sd s0,16(sp) + 800009a4: 02010413 addi s0,sp,32 + 800009a8: fea43423 sd a0,-24(s0) + 800009ac: feb43023 sd a1,-32(s0) + 800009b0: fe043583 ld a1,-32(s0) + 800009b4: fe843503 ld a0,-24(s0) + 800009b8: 7a4060ef jal ra,8000715c + 800009bc: 00050793 mv a5,a0 + 800009c0: 00078513 mv a0,a5 + 800009c4: 01813083 ld ra,24(sp) + 800009c8: 01013403 ld s0,16(sp) + 800009cc: 02010113 addi sp,sp,32 + 800009d0: 00008067 ret + +00000000800009d4 : + 800009d4: fd010113 addi sp,sp,-48 + 800009d8: 02113423 sd ra,40(sp) + 800009dc: 02813023 sd s0,32(sp) + 800009e0: 03010413 addi s0,sp,48 + 800009e4: fea43423 sd a0,-24(s0) + 800009e8: feb43023 sd a1,-32(s0) + 800009ec: fcc43c23 sd a2,-40(s0) + 800009f0: fd843603 ld a2,-40(s0) + 800009f4: fe043583 ld a1,-32(s0) + 800009f8: fe843503 ld a0,-24(s0) + 800009fc: 6d0060ef jal ra,800070cc + 80000a00: 00050793 mv a5,a0 + 80000a04: 00078513 mv a0,a5 + 80000a08: 02813083 ld ra,40(sp) + 80000a0c: 02013403 ld s0,32(sp) + 80000a10: 03010113 addi sp,sp,48 + 80000a14: 00008067 ret + +0000000080000a18 : + 80000a18: fd010113 addi sp,sp,-48 + 80000a1c: 02113423 sd ra,40(sp) + 80000a20: 02813023 sd s0,32(sp) + 80000a24: 03010413 addi s0,sp,48 + 80000a28: fea43423 sd a0,-24(s0) + 80000a2c: 00058793 mv a5,a1 + 80000a30: fcc43c23 sd a2,-40(s0) + 80000a34: fef42223 sw a5,-28(s0) + 80000a38: fe442783 lw a5,-28(s0) + 80000a3c: fd843603 ld a2,-40(s0) + 80000a40: 00078593 mv a1,a5 + 80000a44: fe843503 ld a0,-24(s0) + 80000a48: 07c060ef jal ra,80006ac4 + 80000a4c: 00050793 mv a5,a0 + 80000a50: 00078513 mv a0,a5 + 80000a54: 02813083 ld ra,40(sp) + 80000a58: 02013403 ld s0,32(sp) + 80000a5c: 03010113 addi sp,sp,48 + 80000a60: 00008067 ret + +0000000080000a64 : + 80000a64: fd010113 addi sp,sp,-48 + 80000a68: 02113423 sd ra,40(sp) + 80000a6c: 02813023 sd s0,32(sp) + 80000a70: 03010413 addi s0,sp,48 + 80000a74: fea43423 sd a0,-24(s0) + 80000a78: feb43023 sd a1,-32(s0) + 80000a7c: fcc43c23 sd a2,-40(s0) + 80000a80: fd843603 ld a2,-40(s0) + 80000a84: fe043583 ld a1,-32(s0) + 80000a88: fe843503 ld a0,-24(s0) + 80000a8c: 1a8060ef jal ra,80006c34 + 80000a90: 00000013 nop + 80000a94: 00078513 mv a0,a5 + 80000a98: 02813083 ld ra,40(sp) + 80000a9c: 02013403 ld s0,32(sp) + 80000aa0: 03010113 addi sp,sp,48 + 80000aa4: 00008067 ret + +0000000080000aa8 : + 80000aa8: fd010113 addi sp,sp,-48 + 80000aac: 02113423 sd ra,40(sp) + 80000ab0: 02813023 sd s0,32(sp) + 80000ab4: 03010413 addi s0,sp,48 + 80000ab8: fea43423 sd a0,-24(s0) + 80000abc: feb43023 sd a1,-32(s0) + 80000ac0: fcc43c23 sd a2,-40(s0) + 80000ac4: fd843603 ld a2,-40(s0) + 80000ac8: fe043583 ld a1,-32(s0) + 80000acc: fe843503 ld a0,-24(s0) + 80000ad0: 3f4060ef jal ra,80006ec4 + 80000ad4: 00050793 mv a5,a0 + 80000ad8: 00078513 mv a0,a5 + 80000adc: 02813083 ld ra,40(sp) + 80000ae0: 02013403 ld s0,32(sp) + 80000ae4: 03010113 addi sp,sp,48 + 80000ae8: 00008067 ret + +0000000080000aec : + 80000aec: fe010113 addi sp,sp,-32 + 80000af0: 00113c23 sd ra,24(sp) + 80000af4: 00813823 sd s0,16(sp) + 80000af8: 02010413 addi s0,sp,32 + 80000afc: fea43423 sd a0,-24(s0) + 80000b00: feb43023 sd a1,-32(s0) + 80000b04: fe043583 ld a1,-32(s0) + 80000b08: fe843503 ld a0,-24(s0) + 80000b0c: 45c060ef jal ra,80006f68 + 80000b10: 00050793 mv a5,a0 + 80000b14: 00078513 mv a0,a5 + 80000b18: 01813083 ld ra,24(sp) + 80000b1c: 01013403 ld s0,16(sp) + 80000b20: 02010113 addi sp,sp,32 + 80000b24: 00008067 ret + +0000000080000b28 : + 80000b28: fd010113 addi sp,sp,-48 + 80000b2c: 02813423 sd s0,40(sp) + 80000b30: 03010413 addi s0,sp,48 + 80000b34: fca43c23 sd a0,-40(s0) + 80000b38: 00058793 mv a5,a1 + 80000b3c: fcf42a23 sw a5,-44(s0) + 80000b40: fd843783 ld a5,-40(s0) + 80000b44: 00079663 bnez a5,80000b50 + 80000b48: 00000793 li a5,0 + 80000b4c: 0440006f j 80000b90 + 80000b50: fe043423 sd zero,-24(s0) + 80000b54: 02c0006f j 80000b80 + 80000b58: fd843783 ld a5,-40(s0) + 80000b5c: 0007c703 lbu a4,0(a5) + 80000b60: fd442783 lw a5,-44(s0) + 80000b64: 0ff7f793 andi a5,a5,255 + 80000b68: 00f71663 bne a4,a5,80000b74 + 80000b6c: fd843783 ld a5,-40(s0) + 80000b70: fef43423 sd a5,-24(s0) + 80000b74: fd843783 ld a5,-40(s0) + 80000b78: 00178793 addi a5,a5,1 + 80000b7c: fcf43c23 sd a5,-40(s0) + 80000b80: fd843783 ld a5,-40(s0) + 80000b84: 0007c783 lbu a5,0(a5) + 80000b88: fc0798e3 bnez a5,80000b58 + 80000b8c: fe843783 ld a5,-24(s0) + 80000b90: 00078513 mv a0,a5 + 80000b94: 02813403 ld s0,40(sp) + 80000b98: 03010113 addi sp,sp,48 + 80000b9c: 00008067 ret + +0000000080000ba0 : + 80000ba0: fd010113 addi sp,sp,-48 + 80000ba4: 02813423 sd s0,40(sp) + 80000ba8: 03010413 addi s0,sp,48 + 80000bac: fca43c23 sd a0,-40(s0) + 80000bb0: fe042623 sw zero,-20(s0) + 80000bb4: 0100006f j 80000bc4 + 80000bb8: fd843783 ld a5,-40(s0) + 80000bbc: 00178793 addi a5,a5,1 + 80000bc0: fcf43c23 sd a5,-40(s0) + 80000bc4: fd843783 ld a5,-40(s0) + 80000bc8: 0007c783 lbu a5,0(a5) + 80000bcc: 00078713 mv a4,a5 + 80000bd0: 02000793 li a5,32 + 80000bd4: fef702e3 beq a4,a5,80000bb8 + 80000bd8: 0440006f j 80000c1c + 80000bdc: fec42703 lw a4,-20(s0) + 80000be0: 00070793 mv a5,a4 + 80000be4: 0027979b slliw a5,a5,0x2 + 80000be8: 00e787bb addw a5,a5,a4 + 80000bec: 0017979b slliw a5,a5,0x1 + 80000bf0: 0007871b sext.w a4,a5 + 80000bf4: fd843783 ld a5,-40(s0) + 80000bf8: 0007c783 lbu a5,0(a5) + 80000bfc: 0007879b sext.w a5,a5 + 80000c00: 00f707bb addw a5,a4,a5 + 80000c04: 0007879b sext.w a5,a5 + 80000c08: fd07879b addiw a5,a5,-48 + 80000c0c: fef42623 sw a5,-20(s0) + 80000c10: fd843783 ld a5,-40(s0) + 80000c14: 00178793 addi a5,a5,1 + 80000c18: fcf43c23 sd a5,-40(s0) + 80000c1c: fd843783 ld a5,-40(s0) + 80000c20: 0007c783 lbu a5,0(a5) + 80000c24: 00078713 mv a4,a5 + 80000c28: 02f00793 li a5,47 + 80000c2c: 00e7fc63 bgeu a5,a4,80000c44 + 80000c30: fd843783 ld a5,-40(s0) + 80000c34: 0007c783 lbu a5,0(a5) + 80000c38: 00078713 mv a4,a5 + 80000c3c: 03900793 li a5,57 + 80000c40: f8e7fee3 bgeu a5,a4,80000bdc + 80000c44: fec42783 lw a5,-20(s0) + 80000c48: 00078513 mv a0,a5 + 80000c4c: 02813403 ld s0,40(sp) + 80000c50: 03010113 addi sp,sp,48 + 80000c54: 00008067 ret + +0000000080000c58 : + 80000c58: fe010113 addi sp,sp,-32 + 80000c5c: 00813c23 sd s0,24(sp) + 80000c60: 02010413 addi s0,sp,32 + 80000c64: fea43423 sd a0,-24(s0) + 80000c68: fe843783 ld a5,-24(s0) + 80000c6c: fe843703 ld a4,-24(s0) + 80000c70: 00e7b423 sd a4,8(a5) + 80000c74: fe843783 ld a5,-24(s0) + 80000c78: 0087b703 ld a4,8(a5) + 80000c7c: fe843783 ld a5,-24(s0) + 80000c80: 00e7b023 sd a4,0(a5) + 80000c84: 00000013 nop + 80000c88: 01813403 ld s0,24(sp) + 80000c8c: 02010113 addi sp,sp,32 + 80000c90: 00008067 ret + +0000000080000c94 : + 80000c94: fe010113 addi sp,sp,-32 + 80000c98: 00813c23 sd s0,24(sp) + 80000c9c: 02010413 addi s0,sp,32 + 80000ca0: fea43423 sd a0,-24(s0) + 80000ca4: feb43023 sd a1,-32(s0) + 80000ca8: fe843783 ld a5,-24(s0) + 80000cac: 0087b783 ld a5,8(a5) + 80000cb0: fe043703 ld a4,-32(s0) + 80000cb4: 00e7b023 sd a4,0(a5) + 80000cb8: fe843783 ld a5,-24(s0) + 80000cbc: 0087b703 ld a4,8(a5) + 80000cc0: fe043783 ld a5,-32(s0) + 80000cc4: 00e7b423 sd a4,8(a5) + 80000cc8: fe843783 ld a5,-24(s0) + 80000ccc: fe043703 ld a4,-32(s0) + 80000cd0: 00e7b423 sd a4,8(a5) + 80000cd4: fe043783 ld a5,-32(s0) + 80000cd8: fe843703 ld a4,-24(s0) + 80000cdc: 00e7b023 sd a4,0(a5) + 80000ce0: 00000013 nop + 80000ce4: 01813403 ld s0,24(sp) + 80000ce8: 02010113 addi sp,sp,32 + 80000cec: 00008067 ret + +0000000080000cf0 : + 80000cf0: fe010113 addi sp,sp,-32 + 80000cf4: 00813c23 sd s0,24(sp) + 80000cf8: 02010413 addi s0,sp,32 + 80000cfc: fea43423 sd a0,-24(s0) + 80000d00: fe843783 ld a5,-24(s0) + 80000d04: 0007b783 ld a5,0(a5) + 80000d08: fe843703 ld a4,-24(s0) + 80000d0c: 40f707b3 sub a5,a4,a5 + 80000d10: 0017b793 seqz a5,a5 + 80000d14: 0ff7f793 andi a5,a5,255 + 80000d18: 0007879b sext.w a5,a5 + 80000d1c: 00078513 mv a0,a5 + 80000d20: 01813403 ld s0,24(sp) + 80000d24: 02010113 addi sp,sp,32 + 80000d28: 00008067 ret + +0000000080000d2c : + 80000d2c: fe010113 addi sp,sp,-32 + 80000d30: 00113c23 sd ra,24(sp) + 80000d34: 00813823 sd s0,16(sp) + 80000d38: 02010413 addi s0,sp,32 + 80000d3c: fea43423 sd a0,-24(s0) + 80000d40: fe843783 ld a5,-24(s0) + 80000d44: 02878793 addi a5,a5,40 + 80000d48: 00078513 mv a0,a5 + 80000d4c: f0dff0ef jal ra,80000c58 + 80000d50: 00000793 li a5,0 + 80000d54: 00078513 mv a0,a5 + 80000d58: 01813083 ld ra,24(sp) + 80000d5c: 01013403 ld s0,16(sp) + 80000d60: 02010113 addi sp,sp,32 + 80000d64: 00008067 ret + +0000000080000d68 : + 80000d68: fc010113 addi sp,sp,-64 + 80000d6c: 02113c23 sd ra,56(sp) + 80000d70: 02813823 sd s0,48(sp) + 80000d74: 04010413 addi s0,sp,64 + 80000d78: fca43c23 sd a0,-40(s0) + 80000d7c: fcb43823 sd a1,-48(s0) + 80000d80: 00060793 mv a5,a2 + 80000d84: fcf407a3 sb a5,-49(s0) + 80000d88: fd043503 ld a0,-48(s0) + 80000d8c: 3f8050ef jal ra,80006184 + 80000d90: fcf44783 lbu a5,-49(s0) + 80000d94: 0007879b sext.w a5,a5 + 80000d98: 00078a63 beqz a5,80000dac + 80000d9c: 00078713 mv a4,a5 + 80000da0: 00100793 li a5,1 + 80000da4: 02f70063 beq a4,a5,80000dc4 + 80000da8: 0a80006f j 80000e50 + 80000dac: fd043783 ld a5,-48(s0) + 80000db0: 02878793 addi a5,a5,40 + 80000db4: 00078593 mv a1,a5 + 80000db8: fd843503 ld a0,-40(s0) + 80000dbc: ed9ff0ef jal ra,80000c94 + 80000dc0: 0b00006f j 80000e70 + 80000dc4: fd843783 ld a5,-40(s0) + 80000dc8: 0007b783 ld a5,0(a5) + 80000dcc: fef43423 sd a5,-24(s0) + 80000dd0: 0500006f j 80000e20 + 80000dd4: fe843783 ld a5,-24(s0) + 80000dd8: fd878793 addi a5,a5,-40 + 80000ddc: fef43023 sd a5,-32(s0) + 80000de0: fd043783 ld a5,-48(s0) + 80000de4: 0697c703 lbu a4,105(a5) + 80000de8: fe043783 ld a5,-32(s0) + 80000dec: 0697c783 lbu a5,105(a5) + 80000df0: 02f77263 bgeu a4,a5,80000e14 + 80000df4: fe043783 ld a5,-32(s0) + 80000df8: 02878713 addi a4,a5,40 + 80000dfc: fd043783 ld a5,-48(s0) + 80000e00: 02878793 addi a5,a5,40 + 80000e04: 00078593 mv a1,a5 + 80000e08: 00070513 mv a0,a4 + 80000e0c: e89ff0ef jal ra,80000c94 + 80000e10: 01c0006f j 80000e2c + 80000e14: fe843783 ld a5,-24(s0) + 80000e18: 0007b783 ld a5,0(a5) + 80000e1c: fef43423 sd a5,-24(s0) + 80000e20: fe843703 ld a4,-24(s0) + 80000e24: fd843783 ld a5,-40(s0) + 80000e28: faf716e3 bne a4,a5,80000dd4 + 80000e2c: fe843703 ld a4,-24(s0) + 80000e30: fd843783 ld a5,-40(s0) + 80000e34: 02f71c63 bne a4,a5,80000e6c + 80000e38: fd043783 ld a5,-48(s0) + 80000e3c: 02878793 addi a5,a5,40 + 80000e40: 00078593 mv a1,a5 + 80000e44: fd843503 ld a0,-40(s0) + 80000e48: e4dff0ef jal ra,80000c94 + 80000e4c: 0200006f j 80000e6c + 80000e50: 07f00613 li a2,127 + 80000e54: 00017597 auipc a1,0x17 + 80000e58: 50c58593 addi a1,a1,1292 # 80018360 <__FUNCTION__.2633> + 80000e5c: 00015517 auipc a0,0x15 + 80000e60: 85c50513 addi a0,a0,-1956 # 800156b8 + 80000e64: 618070ef jal ra,8000847c + 80000e68: 0080006f j 80000e70 + 80000e6c: 00000013 nop + 80000e70: 00000793 li a5,0 + 80000e74: 00078513 mv a0,a5 + 80000e78: 03813083 ld ra,56(sp) + 80000e7c: 03013403 ld s0,48(sp) + 80000e80: 04010113 addi sp,sp,64 + 80000e84: 00008067 ret + +0000000080000e88 : + 80000e88: fd010113 addi sp,sp,-48 + 80000e8c: 02113423 sd ra,40(sp) + 80000e90: 02813023 sd s0,32(sp) + 80000e94: 03010413 addi s0,sp,48 + 80000e98: fca43c23 sd a0,-40(s0) + 80000e9c: fd843783 ld a5,-40(s0) + 80000ea0: 0007b783 ld a5,0(a5) + 80000ea4: fd878793 addi a5,a5,-40 + 80000ea8: fef43423 sd a5,-24(s0) + 80000eac: fe843503 ld a0,-24(s0) + 80000eb0: 434050ef jal ra,800062e4 + 80000eb4: 00000793 li a5,0 + 80000eb8: 00078513 mv a0,a5 + 80000ebc: 02813083 ld ra,40(sp) + 80000ec0: 02013403 ld s0,32(sp) + 80000ec4: 03010113 addi sp,sp,48 + 80000ec8: 00008067 ret + +0000000080000ecc : + 80000ecc: fd010113 addi sp,sp,-48 + 80000ed0: 02113423 sd ra,40(sp) + 80000ed4: 02813023 sd s0,32(sp) + 80000ed8: 03010413 addi s0,sp,48 + 80000edc: fea43423 sd a0,-24(s0) + 80000ee0: feb43023 sd a1,-32(s0) + 80000ee4: 00060793 mv a5,a2 + 80000ee8: 00068713 mv a4,a3 + 80000eec: fcf42e23 sw a5,-36(s0) + 80000ef0: 00070793 mv a5,a4 + 80000ef4: fcf40da3 sb a5,-37(s0) + 80000ef8: fe843783 ld a5,-24(s0) + 80000efc: 00079e63 bnez a5,80000f18 + 80000f00: 0d500613 li a2,213 + 80000f04: 00017597 auipc a1,0x17 + 80000f08: 43c58593 addi a1,a1,1084 # 80018340 <__FUNCTION__.2652> + 80000f0c: 00014517 auipc a0,0x14 + 80000f10: 7b450513 addi a0,a0,1972 # 800156c0 + 80000f14: 568070ef jal ra,8000847c + 80000f18: fdc42783 lw a5,-36(s0) + 80000f1c: 0007871b sext.w a4,a5 + 80000f20: 000107b7 lui a5,0x10 + 80000f24: 00f76e63 bltu a4,a5,80000f40 + 80000f28: 0d600613 li a2,214 + 80000f2c: 00017597 auipc a1,0x17 + 80000f30: 41458593 addi a1,a1,1044 # 80018340 <__FUNCTION__.2652> + 80000f34: 00014517 auipc a0,0x14 + 80000f38: 79c50513 addi a0,a0,1948 # 800156d0 + 80000f3c: 540070ef jal ra,8000847c + 80000f40: fe843783 ld a5,-24(s0) + 80000f44: fe043603 ld a2,-32(s0) + 80000f48: 00200593 li a1,2 + 80000f4c: 00078513 mv a0,a5 + 80000f50: 40d000ef jal ra,80001b5c + 80000f54: fe843783 ld a5,-24(s0) + 80000f58: 00078513 mv a0,a5 + 80000f5c: dd1ff0ef jal ra,80000d2c + 80000f60: fdc42783 lw a5,-36(s0) + 80000f64: 03079713 slli a4,a5,0x30 + 80000f68: 03075713 srli a4,a4,0x30 + 80000f6c: fe843783 ld a5,-24(s0) + 80000f70: 02e79c23 sh a4,56(a5) # 10038 <__STACKSIZE__+0xc038> + 80000f74: fe843783 ld a5,-24(s0) + 80000f78: fdb44703 lbu a4,-37(s0) + 80000f7c: 00e78aa3 sb a4,21(a5) + 80000f80: 00000793 li a5,0 + 80000f84: 00078513 mv a0,a5 + 80000f88: 02813083 ld ra,40(sp) + 80000f8c: 02013403 ld s0,32(sp) + 80000f90: 03010113 addi sp,sp,48 + 80000f94: 00008067 ret + +0000000080000f98 : + 80000f98: fb010113 addi sp,sp,-80 + 80000f9c: 04113423 sd ra,72(sp) + 80000fa0: 04813023 sd s0,64(sp) + 80000fa4: 02913c23 sd s1,56(sp) + 80000fa8: 05010413 addi s0,sp,80 + 80000fac: faa43c23 sd a0,-72(s0) + 80000fb0: 00058793 mv a5,a1 + 80000fb4: faf42a23 sw a5,-76(s0) + 80000fb8: fb843783 ld a5,-72(s0) + 80000fbc: 00079e63 bnez a5,80000fd8 + 80000fc0: 15300613 li a2,339 + 80000fc4: 00017597 auipc a1,0x17 + 80000fc8: 38c58593 addi a1,a1,908 # 80018350 <__FUNCTION__.2676> + 80000fcc: 00014517 auipc a0,0x14 + 80000fd0: 6f450513 addi a0,a0,1780 # 800156c0 + 80000fd4: 4a8070ef jal ra,8000847c + 80000fd8: fb843783 ld a5,-72(s0) + 80000fdc: 00078513 mv a0,a5 + 80000fe0: 014010ef jal ra,80001ff4 + 80000fe4: 00050793 mv a5,a0 + 80000fe8: 00078713 mv a4,a5 + 80000fec: 00200793 li a5,2 + 80000ff0: 00f70e63 beq a4,a5,8000100c + 80000ff4: 15400613 li a2,340 + 80000ff8: 00017597 auipc a1,0x17 + 80000ffc: 35858593 addi a1,a1,856 # 80018350 <__FUNCTION__.2676> + 80001000: 00014517 auipc a0,0x14 + 80001004: 6e850513 addi a0,a0,1768 # 800156e8 + 80001008: 474070ef jal ra,8000847c + 8000100c: 00021797 auipc a5,0x21 + 80001010: fc478793 addi a5,a5,-60 # 80021fd0 + 80001014: 0007b783 ld a5,0(a5) + 80001018: 00078e63 beqz a5,80001034 + 8000101c: 00021797 auipc a5,0x21 + 80001020: fb478793 addi a5,a5,-76 # 80021fd0 + 80001024: 0007b703 ld a4,0(a5) + 80001028: fb843783 ld a5,-72(s0) + 8000102c: 00078513 mv a0,a5 + 80001030: 000700e7 jalr a4 # 10000000 <__STACKSIZE__+0xfffc000> + 80001034: 940ff0ef jal ra,80000174 + 80001038: 00050493 mv s1,a0 + 8000103c: fb843783 ld a5,-72(s0) + 80001040: 0387d783 lhu a5,56(a5) + 80001044: 02078663 beqz a5,80001070 + 80001048: fb843783 ld a5,-72(s0) + 8000104c: 0387d783 lhu a5,56(a5) + 80001050: fff7879b addiw a5,a5,-1 + 80001054: 03079713 slli a4,a5,0x30 + 80001058: 03075713 srli a4,a4,0x30 + 8000105c: fb843783 ld a5,-72(s0) + 80001060: 02e79c23 sh a4,56(a5) + 80001064: 00048513 mv a0,s1 + 80001068: 914ff0ef jal ra,8000017c + 8000106c: 1340006f j 800011a0 + 80001070: fb442783 lw a5,-76(s0) + 80001074: 00079a63 bnez a5,80001088 + 80001078: 00048513 mv a0,s1 + 8000107c: 900ff0ef jal ra,8000017c + 80001080: ffe00793 li a5,-2 + 80001084: 1480006f j 800011cc + 80001088: 8ecff0ef jal ra,80000174 + 8000108c: fca43c23 sd a0,-40(s0) + 80001090: 13d040ef jal ra,800059cc + 80001094: 00050793 mv a5,a0 + 80001098: 02079863 bnez a5,800010c8 + 8000109c: 00017597 auipc a1,0x17 + 800010a0: 2b458593 addi a1,a1,692 # 80018350 <__FUNCTION__.2676> + 800010a4: 00014517 auipc a0,0x14 + 800010a8: 72450513 addi a0,a0,1828 # 800157c8 + 800010ac: 170070ef jal ra,8000821c + 800010b0: 17400613 li a2,372 + 800010b4: 00017597 auipc a1,0x17 + 800010b8: 29c58593 addi a1,a1,668 # 80018350 <__FUNCTION__.2676> + 800010bc: 00014517 auipc a0,0x14 + 800010c0: 5fc50513 addi a0,a0,1532 # 800156b8 + 800010c4: 3b8070ef jal ra,8000847c + 800010c8: 8acff0ef jal ra,80000174 + 800010cc: fca43823 sd a0,-48(s0) + 800010d0: 504050ef jal ra,800065d4 + 800010d4: 00050793 mv a5,a0 + 800010d8: 02078863 beqz a5,80001108 + 800010dc: 00017597 auipc a1,0x17 + 800010e0: 27458593 addi a1,a1,628 # 80018350 <__FUNCTION__.2676> + 800010e4: 00014517 auipc a0,0x14 + 800010e8: 67c50513 addi a0,a0,1660 # 80015760 + 800010ec: 130070ef jal ra,8000821c + 800010f0: 17400613 li a2,372 + 800010f4: 00017597 auipc a1,0x17 + 800010f8: 25c58593 addi a1,a1,604 # 80018350 <__FUNCTION__.2676> + 800010fc: 00014517 auipc a0,0x14 + 80001100: 5bc50513 addi a0,a0,1468 # 800156b8 + 80001104: 378070ef jal ra,8000847c + 80001108: fd043503 ld a0,-48(s0) + 8000110c: 870ff0ef jal ra,8000017c + 80001110: fd843503 ld a0,-40(s0) + 80001114: 868ff0ef jal ra,8000017c + 80001118: 0b5040ef jal ra,800059cc + 8000111c: fca43423 sd a0,-56(s0) + 80001120: fc843783 ld a5,-56(s0) + 80001124: 0607b023 sd zero,96(a5) + 80001128: fb843783 ld a5,-72(s0) + 8000112c: 02878713 addi a4,a5,40 + 80001130: fb843783 ld a5,-72(s0) + 80001134: 0157c783 lbu a5,21(a5) + 80001138: 00078613 mv a2,a5 + 8000113c: fc843583 ld a1,-56(s0) + 80001140: 00070513 mv a0,a4 + 80001144: c25ff0ef jal ra,80000d68 + 80001148: fb442783 lw a5,-76(s0) + 8000114c: 02f05863 blez a5,8000117c + 80001150: fc843783 ld a5,-56(s0) + 80001154: 08878793 addi a5,a5,136 + 80001158: fb440713 addi a4,s0,-76 + 8000115c: 00070613 mv a2,a4 + 80001160: 00000593 li a1,0 + 80001164: 00078513 mv a0,a5 + 80001168: 0f1020ef jal ra,80003a58 + 8000116c: fc843783 ld a5,-56(s0) + 80001170: 08878793 addi a5,a5,136 + 80001174: 00078513 mv a0,a5 + 80001178: 3bc020ef jal ra,80003534 + 8000117c: 00048513 mv a0,s1 + 80001180: ffdfe0ef jal ra,8000017c + 80001184: 274010ef jal ra,800023f8 + 80001188: fc843783 ld a5,-56(s0) + 8000118c: 0607b783 ld a5,96(a5) + 80001190: 00078863 beqz a5,800011a0 + 80001194: fc843783 ld a5,-56(s0) + 80001198: 0607b783 ld a5,96(a5) + 8000119c: 0300006f j 800011cc + 800011a0: 00021797 auipc a5,0x21 + 800011a4: e3878793 addi a5,a5,-456 # 80021fd8 + 800011a8: 0007b783 ld a5,0(a5) + 800011ac: 00078e63 beqz a5,800011c8 + 800011b0: 00021797 auipc a5,0x21 + 800011b4: e2878793 addi a5,a5,-472 # 80021fd8 + 800011b8: 0007b703 ld a4,0(a5) + 800011bc: fb843783 ld a5,-72(s0) + 800011c0: 00078513 mv a0,a5 + 800011c4: 000700e7 jalr a4 + 800011c8: 00000793 li a5,0 + 800011cc: 00078513 mv a0,a5 + 800011d0: 04813083 ld ra,72(sp) + 800011d4: 04013403 ld s0,64(sp) + 800011d8: 03813483 ld s1,56(sp) + 800011dc: 05010113 addi sp,sp,80 + 800011e0: 00008067 ret + +00000000800011e4 : + 800011e4: fd010113 addi sp,sp,-48 + 800011e8: 02113423 sd ra,40(sp) + 800011ec: 02813023 sd s0,32(sp) + 800011f0: 00913c23 sd s1,24(sp) + 800011f4: 01213823 sd s2,16(sp) + 800011f8: 03010413 addi s0,sp,48 + 800011fc: fca43c23 sd a0,-40(s0) + 80001200: fd843783 ld a5,-40(s0) + 80001204: 00079e63 bnez a5,80001220 + 80001208: 1c000613 li a2,448 + 8000120c: 00017597 auipc a1,0x17 + 80001210: 16c58593 addi a1,a1,364 # 80018378 <__FUNCTION__.2687> + 80001214: 00014517 auipc a0,0x14 + 80001218: 4ac50513 addi a0,a0,1196 # 800156c0 + 8000121c: 260070ef jal ra,8000847c + 80001220: fd843783 ld a5,-40(s0) + 80001224: 00078513 mv a0,a5 + 80001228: 5cd000ef jal ra,80001ff4 + 8000122c: 00050793 mv a5,a0 + 80001230: 00078713 mv a4,a5 + 80001234: 00200793 li a5,2 + 80001238: 00f70e63 beq a4,a5,80001254 + 8000123c: 1c100613 li a2,449 + 80001240: 00017597 auipc a1,0x17 + 80001244: 13858593 addi a1,a1,312 # 80018378 <__FUNCTION__.2687> + 80001248: 00014517 auipc a0,0x14 + 8000124c: 4a050513 addi a0,a0,1184 # 800156e8 + 80001250: 22c070ef jal ra,8000847c + 80001254: 00021797 auipc a5,0x21 + 80001258: d8c78793 addi a5,a5,-628 # 80021fe0 + 8000125c: 0007b783 ld a5,0(a5) + 80001260: 00078e63 beqz a5,8000127c + 80001264: 00021797 auipc a5,0x21 + 80001268: d7c78793 addi a5,a5,-644 # 80021fe0 + 8000126c: 0007b703 ld a4,0(a5) + 80001270: fd843783 ld a5,-40(s0) + 80001274: 00078513 mv a0,a5 + 80001278: 000700e7 jalr a4 + 8000127c: 00000913 li s2,0 + 80001280: ef5fe0ef jal ra,80000174 + 80001284: 00050493 mv s1,a0 + 80001288: fd843783 ld a5,-40(s0) + 8000128c: 02878793 addi a5,a5,40 + 80001290: 00078513 mv a0,a5 + 80001294: a5dff0ef jal ra,80000cf0 + 80001298: 00050793 mv a5,a0 + 8000129c: 00079e63 bnez a5,800012b8 + 800012a0: fd843783 ld a5,-40(s0) + 800012a4: 02878793 addi a5,a5,40 + 800012a8: 00078513 mv a0,a5 + 800012ac: bddff0ef jal ra,80000e88 + 800012b0: 00100913 li s2,1 + 800012b4: 04c0006f j 80001300 + 800012b8: fd843783 ld a5,-40(s0) + 800012bc: 0387d783 lhu a5,56(a5) + 800012c0: 0007871b sext.w a4,a5 + 800012c4: 000107b7 lui a5,0x10 + 800012c8: fff78793 addi a5,a5,-1 # ffff <__STACKSIZE__+0xbfff> + 800012cc: 02f70263 beq a4,a5,800012f0 + 800012d0: fd843783 ld a5,-40(s0) + 800012d4: 0387d783 lhu a5,56(a5) + 800012d8: 0017879b addiw a5,a5,1 + 800012dc: 03079713 slli a4,a5,0x30 + 800012e0: 03075713 srli a4,a4,0x30 + 800012e4: fd843783 ld a5,-40(s0) + 800012e8: 02e79c23 sh a4,56(a5) + 800012ec: 0140006f j 80001300 + 800012f0: 00048513 mv a0,s1 + 800012f4: e89fe0ef jal ra,8000017c + 800012f8: ffd00793 li a5,-3 + 800012fc: 0200006f j 8000131c + 80001300: 00048513 mv a0,s1 + 80001304: e79fe0ef jal ra,8000017c + 80001308: 00090713 mv a4,s2 + 8000130c: 00100793 li a5,1 + 80001310: 00f71463 bne a4,a5,80001318 + 80001314: 0e4010ef jal ra,800023f8 + 80001318: 00000793 li a5,0 + 8000131c: 00078513 mv a0,a5 + 80001320: 02813083 ld ra,40(sp) + 80001324: 02013403 ld s0,32(sp) + 80001328: 01813483 ld s1,24(sp) + 8000132c: 01013903 ld s2,16(sp) + 80001330: 03010113 addi sp,sp,48 + 80001334: 00008067 ret + +0000000080001338 : + 80001338: fd010113 addi sp,sp,-48 + 8000133c: 02113423 sd ra,40(sp) + 80001340: 02813023 sd s0,32(sp) + 80001344: 03010413 addi s0,sp,48 + 80001348: fea43423 sd a0,-24(s0) + 8000134c: feb43023 sd a1,-32(s0) + 80001350: 00060793 mv a5,a2 + 80001354: fcf40fa3 sb a5,-33(s0) + 80001358: fe843783 ld a5,-24(s0) + 8000135c: 00079e63 bnez a5,80001378 + 80001360: 22a00613 li a2,554 + 80001364: 00017597 auipc a1,0x17 + 80001368: 02458593 addi a1,a1,36 # 80018388 <__FUNCTION__.2701> + 8000136c: 00014517 auipc a0,0x14 + 80001370: 49450513 addi a0,a0,1172 # 80015800 + 80001374: 108070ef jal ra,8000847c + 80001378: fe843783 ld a5,-24(s0) + 8000137c: fe043603 ld a2,-32(s0) + 80001380: 00300593 li a1,3 + 80001384: 00078513 mv a0,a5 + 80001388: 7d4000ef jal ra,80001b5c + 8000138c: fe843783 ld a5,-24(s0) + 80001390: 00078513 mv a0,a5 + 80001394: 999ff0ef jal ra,80000d2c + 80001398: fe843783 ld a5,-24(s0) + 8000139c: 00100713 li a4,1 + 800013a0: 02e79c23 sh a4,56(a5) + 800013a4: fe843783 ld a5,-24(s0) + 800013a8: 0407b023 sd zero,64(a5) + 800013ac: fe843783 ld a5,-24(s0) + 800013b0: fff00713 li a4,-1 + 800013b4: 02e78d23 sb a4,58(a5) + 800013b8: fe843783 ld a5,-24(s0) + 800013bc: 02078da3 sb zero,59(a5) + 800013c0: fe843783 ld a5,-24(s0) + 800013c4: 00100713 li a4,1 + 800013c8: 00e78aa3 sb a4,21(a5) + 800013cc: 00000793 li a5,0 + 800013d0: 00078513 mv a0,a5 + 800013d4: 02813083 ld ra,40(sp) + 800013d8: 02013403 ld s0,32(sp) + 800013dc: 03010113 addi sp,sp,48 + 800013e0: 00008067 ret + +00000000800013e4 : + 800013e4: fb010113 addi sp,sp,-80 + 800013e8: 04113423 sd ra,72(sp) + 800013ec: 04813023 sd s0,64(sp) + 800013f0: 02913c23 sd s1,56(sp) + 800013f4: 05010413 addi s0,sp,80 + 800013f8: faa43c23 sd a0,-72(s0) + 800013fc: 00058793 mv a5,a1 + 80001400: faf42a23 sw a5,-76(s0) + 80001404: d71fe0ef jal ra,80000174 + 80001408: fca43c23 sd a0,-40(s0) + 8000140c: 5c0040ef jal ra,800059cc + 80001410: 00050793 mv a5,a0 + 80001414: 02079863 bnez a5,80001444 + 80001418: 00017597 auipc a1,0x17 + 8000141c: f8058593 addi a1,a1,-128 # 80018398 <__FUNCTION__.2725> + 80001420: 00014517 auipc a0,0x14 + 80001424: 3a850513 addi a0,a0,936 # 800157c8 + 80001428: 5f5060ef jal ra,8000821c + 8000142c: 2aa00613 li a2,682 + 80001430: 00017597 auipc a1,0x17 + 80001434: f6858593 addi a1,a1,-152 # 80018398 <__FUNCTION__.2725> + 80001438: 00014517 auipc a0,0x14 + 8000143c: 28050513 addi a0,a0,640 # 800156b8 + 80001440: 03c070ef jal ra,8000847c + 80001444: d31fe0ef jal ra,80000174 + 80001448: fca43823 sd a0,-48(s0) + 8000144c: 188050ef jal ra,800065d4 + 80001450: 00050793 mv a5,a0 + 80001454: 02078863 beqz a5,80001484 + 80001458: 00017597 auipc a1,0x17 + 8000145c: f4058593 addi a1,a1,-192 # 80018398 <__FUNCTION__.2725> + 80001460: 00014517 auipc a0,0x14 + 80001464: 30050513 addi a0,a0,768 # 80015760 + 80001468: 5b5060ef jal ra,8000821c + 8000146c: 2aa00613 li a2,682 + 80001470: 00017597 auipc a1,0x17 + 80001474: f2858593 addi a1,a1,-216 # 80018398 <__FUNCTION__.2725> + 80001478: 00014517 auipc a0,0x14 + 8000147c: 24050513 addi a0,a0,576 # 800156b8 + 80001480: 7fd060ef jal ra,8000847c + 80001484: fd043503 ld a0,-48(s0) + 80001488: cf5fe0ef jal ra,8000017c + 8000148c: fd843503 ld a0,-40(s0) + 80001490: cedfe0ef jal ra,8000017c + 80001494: fb843783 ld a5,-72(s0) + 80001498: 00079e63 bnez a5,800014b4 + 8000149c: 2ad00613 li a2,685 + 800014a0: 00017597 auipc a1,0x17 + 800014a4: ef858593 addi a1,a1,-264 # 80018398 <__FUNCTION__.2725> + 800014a8: 00014517 auipc a0,0x14 + 800014ac: 35850513 addi a0,a0,856 # 80015800 + 800014b0: 7cd060ef jal ra,8000847c + 800014b4: fb843783 ld a5,-72(s0) + 800014b8: 00078513 mv a0,a5 + 800014bc: 339000ef jal ra,80001ff4 + 800014c0: 00050793 mv a5,a0 + 800014c4: 00078713 mv a4,a5 + 800014c8: 00300793 li a5,3 + 800014cc: 00f70e63 beq a4,a5,800014e8 + 800014d0: 2ae00613 li a2,686 + 800014d4: 00017597 auipc a1,0x17 + 800014d8: ec458593 addi a1,a1,-316 # 80018398 <__FUNCTION__.2725> + 800014dc: 00014517 auipc a0,0x14 + 800014e0: 33c50513 addi a0,a0,828 # 80015818 + 800014e4: 799060ef jal ra,8000847c + 800014e8: 4e4040ef jal ra,800059cc + 800014ec: fca43423 sd a0,-56(s0) + 800014f0: c85fe0ef jal ra,80000174 + 800014f4: 00050493 mv s1,a0 + 800014f8: 00021797 auipc a5,0x21 + 800014fc: ad878793 addi a5,a5,-1320 # 80021fd0 + 80001500: 0007b783 ld a5,0(a5) + 80001504: 00078e63 beqz a5,80001520 + 80001508: 00021797 auipc a5,0x21 + 8000150c: ac878793 addi a5,a5,-1336 # 80021fd0 + 80001510: 0007b703 ld a4,0(a5) + 80001514: fb843783 ld a5,-72(s0) + 80001518: 00078513 mv a0,a5 + 8000151c: 000700e7 jalr a4 + 80001520: fc843783 ld a5,-56(s0) + 80001524: 0607b023 sd zero,96(a5) + 80001528: fb843783 ld a5,-72(s0) + 8000152c: 0407b783 ld a5,64(a5) + 80001530: fc843703 ld a4,-56(s0) + 80001534: 04f71263 bne a4,a5,80001578 + 80001538: fb843783 ld a5,-72(s0) + 8000153c: 03b7c783 lbu a5,59(a5) + 80001540: 00078713 mv a4,a5 + 80001544: 0ff00793 li a5,255 + 80001548: 02f70063 beq a4,a5,80001568 + 8000154c: fb843783 ld a5,-72(s0) + 80001550: 03b7c783 lbu a5,59(a5) + 80001554: 0017879b addiw a5,a5,1 + 80001558: 0ff7f713 andi a4,a5,255 + 8000155c: fb843783 ld a5,-72(s0) + 80001560: 02e78da3 sb a4,59(a5) + 80001564: 1740006f j 800016d8 + 80001568: 00048513 mv a0,s1 + 8000156c: c11fe0ef jal ra,8000017c + 80001570: ffd00793 li a5,-3 + 80001574: 1980006f j 8000170c + 80001578: fb843783 ld a5,-72(s0) + 8000157c: 0387d783 lhu a5,56(a5) + 80001580: 06078e63 beqz a5,800015fc + 80001584: fb843783 ld a5,-72(s0) + 80001588: 0387d783 lhu a5,56(a5) + 8000158c: fff7879b addiw a5,a5,-1 + 80001590: 03079713 slli a4,a5,0x30 + 80001594: 03075713 srli a4,a4,0x30 + 80001598: fb843783 ld a5,-72(s0) + 8000159c: 02e79c23 sh a4,56(a5) + 800015a0: fb843783 ld a5,-72(s0) + 800015a4: fc843703 ld a4,-56(s0) + 800015a8: 04e7b023 sd a4,64(a5) + 800015ac: fc843783 ld a5,-56(s0) + 800015b0: 0697c703 lbu a4,105(a5) + 800015b4: fb843783 ld a5,-72(s0) + 800015b8: 02e78d23 sb a4,58(a5) + 800015bc: fb843783 ld a5,-72(s0) + 800015c0: 03b7c783 lbu a5,59(a5) + 800015c4: 00078713 mv a4,a5 + 800015c8: 0ff00793 li a5,255 + 800015cc: 02f70063 beq a4,a5,800015ec + 800015d0: fb843783 ld a5,-72(s0) + 800015d4: 03b7c783 lbu a5,59(a5) + 800015d8: 0017879b addiw a5,a5,1 + 800015dc: 0ff7f713 andi a4,a5,255 + 800015e0: fb843783 ld a5,-72(s0) + 800015e4: 02e78da3 sb a4,59(a5) + 800015e8: 0f00006f j 800016d8 + 800015ec: 00048513 mv a0,s1 + 800015f0: b8dfe0ef jal ra,8000017c + 800015f4: ffd00793 li a5,-3 + 800015f8: 1140006f j 8000170c + 800015fc: fb442783 lw a5,-76(s0) + 80001600: 02079063 bnez a5,80001620 + 80001604: fc843783 ld a5,-56(s0) + 80001608: ffe00713 li a4,-2 + 8000160c: 06e7b023 sd a4,96(a5) + 80001610: 00048513 mv a0,s1 + 80001614: b69fe0ef jal ra,8000017c + 80001618: ffe00793 li a5,-2 + 8000161c: 0f00006f j 8000170c + 80001620: fc843783 ld a5,-56(s0) + 80001624: 0697c703 lbu a4,105(a5) + 80001628: fb843783 ld a5,-72(s0) + 8000162c: 0407b783 ld a5,64(a5) + 80001630: 0697c783 lbu a5,105(a5) + 80001634: 02f77263 bgeu a4,a5,80001658 + 80001638: fb843783 ld a5,-72(s0) + 8000163c: 0407b703 ld a4,64(a5) + 80001640: fc843783 ld a5,-56(s0) + 80001644: 06978793 addi a5,a5,105 + 80001648: 00078613 mv a2,a5 + 8000164c: 00200593 li a1,2 + 80001650: 00070513 mv a0,a4 + 80001654: 15d040ef jal ra,80005fb0 + 80001658: fb843783 ld a5,-72(s0) + 8000165c: 02878713 addi a4,a5,40 + 80001660: fb843783 ld a5,-72(s0) + 80001664: 0157c783 lbu a5,21(a5) + 80001668: 00078613 mv a2,a5 + 8000166c: fc843583 ld a1,-56(s0) + 80001670: 00070513 mv a0,a4 + 80001674: ef4ff0ef jal ra,80000d68 + 80001678: fb442783 lw a5,-76(s0) + 8000167c: 02f05863 blez a5,800016ac + 80001680: fc843783 ld a5,-56(s0) + 80001684: 08878793 addi a5,a5,136 + 80001688: fb440713 addi a4,s0,-76 + 8000168c: 00070613 mv a2,a4 + 80001690: 00000593 li a1,0 + 80001694: 00078513 mv a0,a5 + 80001698: 3c0020ef jal ra,80003a58 + 8000169c: fc843783 ld a5,-56(s0) + 800016a0: 08878793 addi a5,a5,136 + 800016a4: 00078513 mv a0,a5 + 800016a8: 68d010ef jal ra,80003534 + 800016ac: 00048513 mv a0,s1 + 800016b0: acdfe0ef jal ra,8000017c + 800016b4: 545000ef jal ra,800023f8 + 800016b8: fc843783 ld a5,-56(s0) + 800016bc: 0607b783 ld a5,96(a5) + 800016c0: 00078863 beqz a5,800016d0 + 800016c4: fc843783 ld a5,-56(s0) + 800016c8: 0607b783 ld a5,96(a5) + 800016cc: 0400006f j 8000170c + 800016d0: aa5fe0ef jal ra,80000174 + 800016d4: 00050493 mv s1,a0 + 800016d8: 00048513 mv a0,s1 + 800016dc: aa1fe0ef jal ra,8000017c + 800016e0: 00021797 auipc a5,0x21 + 800016e4: 8f878793 addi a5,a5,-1800 # 80021fd8 + 800016e8: 0007b783 ld a5,0(a5) + 800016ec: 00078e63 beqz a5,80001708 + 800016f0: 00021797 auipc a5,0x21 + 800016f4: 8e878793 addi a5,a5,-1816 # 80021fd8 + 800016f8: 0007b703 ld a4,0(a5) + 800016fc: fb843783 ld a5,-72(s0) + 80001700: 00078513 mv a0,a5 + 80001704: 000700e7 jalr a4 + 80001708: 00000793 li a5,0 + 8000170c: 00078513 mv a0,a5 + 80001710: 04813083 ld ra,72(sp) + 80001714: 04013403 ld s0,64(sp) + 80001718: 03813483 ld s1,56(sp) + 8000171c: 05010113 addi sp,sp,80 + 80001720: 00008067 ret + +0000000080001724 : + 80001724: fb010113 addi sp,sp,-80 + 80001728: 04113423 sd ra,72(sp) + 8000172c: 04813023 sd s0,64(sp) + 80001730: 02913c23 sd s1,56(sp) + 80001734: 05010413 addi s0,sp,80 + 80001738: faa43c23 sd a0,-72(s0) + 8000173c: fb843783 ld a5,-72(s0) + 80001740: 00079e63 bnez a5,8000175c + 80001744: 35400613 li a2,852 + 80001748: 00017597 auipc a1,0x17 + 8000174c: c6058593 addi a1,a1,-928 # 800183a8 <__FUNCTION__.2736> + 80001750: 00014517 auipc a0,0x14 + 80001754: 0b050513 addi a0,a0,176 # 80015800 + 80001758: 525060ef jal ra,8000847c + 8000175c: fb843783 ld a5,-72(s0) + 80001760: 00078513 mv a0,a5 + 80001764: 091000ef jal ra,80001ff4 + 80001768: 00050793 mv a5,a0 + 8000176c: 00078713 mv a4,a5 + 80001770: 00300793 li a5,3 + 80001774: 00f70e63 beq a4,a5,80001790 + 80001778: 35500613 li a2,853 + 8000177c: 00017597 auipc a1,0x17 + 80001780: c2c58593 addi a1,a1,-980 # 800183a8 <__FUNCTION__.2736> + 80001784: 00014517 auipc a0,0x14 + 80001788: 09450513 addi a0,a0,148 # 80015818 + 8000178c: 4f1060ef jal ra,8000847c + 80001790: fc042e23 sw zero,-36(s0) + 80001794: 9e1fe0ef jal ra,80000174 + 80001798: fca43823 sd a0,-48(s0) + 8000179c: 230040ef jal ra,800059cc + 800017a0: 00050793 mv a5,a0 + 800017a4: 02079863 bnez a5,800017d4 + 800017a8: 00017597 auipc a1,0x17 + 800017ac: c0058593 addi a1,a1,-1024 # 800183a8 <__FUNCTION__.2736> + 800017b0: 00014517 auipc a0,0x14 + 800017b4: 01850513 addi a0,a0,24 # 800157c8 + 800017b8: 265060ef jal ra,8000821c + 800017bc: 35a00613 li a2,858 + 800017c0: 00017597 auipc a1,0x17 + 800017c4: be858593 addi a1,a1,-1048 # 800183a8 <__FUNCTION__.2736> + 800017c8: 00014517 auipc a0,0x14 + 800017cc: ef050513 addi a0,a0,-272 # 800156b8 + 800017d0: 4ad060ef jal ra,8000847c + 800017d4: 9a1fe0ef jal ra,80000174 + 800017d8: fca43423 sd a0,-56(s0) + 800017dc: 5f9040ef jal ra,800065d4 + 800017e0: 00050793 mv a5,a0 + 800017e4: 02078863 beqz a5,80001814 + 800017e8: 00017597 auipc a1,0x17 + 800017ec: bc058593 addi a1,a1,-1088 # 800183a8 <__FUNCTION__.2736> + 800017f0: 00014517 auipc a0,0x14 + 800017f4: f7050513 addi a0,a0,-144 # 80015760 + 800017f8: 225060ef jal ra,8000821c + 800017fc: 35a00613 li a2,858 + 80001800: 00017597 auipc a1,0x17 + 80001804: ba858593 addi a1,a1,-1112 # 800183a8 <__FUNCTION__.2736> + 80001808: 00014517 auipc a0,0x14 + 8000180c: eb050513 addi a0,a0,-336 # 800156b8 + 80001810: 46d060ef jal ra,8000847c + 80001814: fc843503 ld a0,-56(s0) + 80001818: 965fe0ef jal ra,8000017c + 8000181c: fd043503 ld a0,-48(s0) + 80001820: 95dfe0ef jal ra,8000017c + 80001824: 1a8040ef jal ra,800059cc + 80001828: fca43023 sd a0,-64(s0) + 8000182c: 949fe0ef jal ra,80000174 + 80001830: 00050493 mv s1,a0 + 80001834: 00020797 auipc a5,0x20 + 80001838: 7ac78793 addi a5,a5,1964 # 80021fe0 + 8000183c: 0007b783 ld a5,0(a5) + 80001840: 00078e63 beqz a5,8000185c + 80001844: 00020797 auipc a5,0x20 + 80001848: 79c78793 addi a5,a5,1948 # 80021fe0 + 8000184c: 0007b703 ld a4,0(a5) + 80001850: fb843783 ld a5,-72(s0) + 80001854: 00078513 mv a0,a5 + 80001858: 000700e7 jalr a4 + 8000185c: fb843783 ld a5,-72(s0) + 80001860: 0407b783 ld a5,64(a5) + 80001864: fc043703 ld a4,-64(s0) + 80001868: 02f70063 beq a4,a5,80001888 + 8000186c: fc043783 ld a5,-64(s0) + 80001870: fff00713 li a4,-1 + 80001874: 06e7b023 sd a4,96(a5) + 80001878: 00048513 mv a0,s1 + 8000187c: 901fe0ef jal ra,8000017c + 80001880: fff00793 li a5,-1 + 80001884: 1780006f j 800019fc + 80001888: fb843783 ld a5,-72(s0) + 8000188c: 03b7c783 lbu a5,59(a5) + 80001890: fff7879b addiw a5,a5,-1 + 80001894: 0ff7f713 andi a4,a5,255 + 80001898: fb843783 ld a5,-72(s0) + 8000189c: 02e78da3 sb a4,59(a5) + 800018a0: fb843783 ld a5,-72(s0) + 800018a4: 03b7c783 lbu a5,59(a5) + 800018a8: 12079a63 bnez a5,800019dc + 800018ac: fb843783 ld a5,-72(s0) + 800018b0: 03a7c703 lbu a4,58(a5) + 800018b4: fb843783 ld a5,-72(s0) + 800018b8: 0407b783 ld a5,64(a5) + 800018bc: 0697c783 lbu a5,105(a5) + 800018c0: 02f70263 beq a4,a5,800018e4 + 800018c4: fb843783 ld a5,-72(s0) + 800018c8: 0407b703 ld a4,64(a5) + 800018cc: fb843783 ld a5,-72(s0) + 800018d0: 03a78793 addi a5,a5,58 + 800018d4: 00078613 mv a2,a5 + 800018d8: 00200593 li a1,2 + 800018dc: 00070513 mv a0,a4 + 800018e0: 6d0040ef jal ra,80005fb0 + 800018e4: fb843783 ld a5,-72(s0) + 800018e8: 02878793 addi a5,a5,40 + 800018ec: 00078513 mv a0,a5 + 800018f0: c00ff0ef jal ra,80000cf0 + 800018f4: 00050793 mv a5,a0 + 800018f8: 08079463 bnez a5,80001980 + 800018fc: fb843783 ld a5,-72(s0) + 80001900: 0287b783 ld a5,40(a5) + 80001904: fd878793 addi a5,a5,-40 + 80001908: fcf43023 sd a5,-64(s0) + 8000190c: fb843783 ld a5,-72(s0) + 80001910: fc043703 ld a4,-64(s0) + 80001914: 04e7b023 sd a4,64(a5) + 80001918: fc043783 ld a5,-64(s0) + 8000191c: 0697c703 lbu a4,105(a5) + 80001920: fb843783 ld a5,-72(s0) + 80001924: 02e78d23 sb a4,58(a5) + 80001928: fb843783 ld a5,-72(s0) + 8000192c: 03b7c783 lbu a5,59(a5) + 80001930: 00078713 mv a4,a5 + 80001934: 0ff00793 li a5,255 + 80001938: 02f70c63 beq a4,a5,80001970 + 8000193c: fb843783 ld a5,-72(s0) + 80001940: 03b7c783 lbu a5,59(a5) + 80001944: 0017879b addiw a5,a5,1 + 80001948: 0ff7f713 andi a4,a5,255 + 8000194c: fb843783 ld a5,-72(s0) + 80001950: 02e78da3 sb a4,59(a5) + 80001954: fb843783 ld a5,-72(s0) + 80001958: 02878793 addi a5,a5,40 + 8000195c: 00078513 mv a0,a5 + 80001960: d28ff0ef jal ra,80000e88 + 80001964: 00100793 li a5,1 + 80001968: fcf42e23 sw a5,-36(s0) + 8000196c: 0700006f j 800019dc + 80001970: 00048513 mv a0,s1 + 80001974: 809fe0ef jal ra,8000017c + 80001978: ffd00793 li a5,-3 + 8000197c: 0800006f j 800019fc + 80001980: fb843783 ld a5,-72(s0) + 80001984: 0387d783 lhu a5,56(a5) + 80001988: 0007871b sext.w a4,a5 + 8000198c: 000107b7 lui a5,0x10 + 80001990: fff78793 addi a5,a5,-1 # ffff <__STACKSIZE__+0xbfff> + 80001994: 02f70c63 beq a4,a5,800019cc + 80001998: fb843783 ld a5,-72(s0) + 8000199c: 0387d783 lhu a5,56(a5) + 800019a0: 0017879b addiw a5,a5,1 + 800019a4: 03079713 slli a4,a5,0x30 + 800019a8: 03075713 srli a4,a4,0x30 + 800019ac: fb843783 ld a5,-72(s0) + 800019b0: 02e79c23 sh a4,56(a5) + 800019b4: fb843783 ld a5,-72(s0) + 800019b8: 0407b023 sd zero,64(a5) + 800019bc: fb843783 ld a5,-72(s0) + 800019c0: fff00713 li a4,-1 + 800019c4: 02e78d23 sb a4,58(a5) + 800019c8: 0140006f j 800019dc + 800019cc: 00048513 mv a0,s1 + 800019d0: facfe0ef jal ra,8000017c + 800019d4: ffd00793 li a5,-3 + 800019d8: 0240006f j 800019fc + 800019dc: 00048513 mv a0,s1 + 800019e0: f9cfe0ef jal ra,8000017c + 800019e4: fdc42783 lw a5,-36(s0) + 800019e8: 0007871b sext.w a4,a5 + 800019ec: 00100793 li a5,1 + 800019f0: 00f71463 bne a4,a5,800019f8 + 800019f4: 205000ef jal ra,800023f8 + 800019f8: 00000793 li a5,0 + 800019fc: 00078513 mv a0,a5 + 80001a00: 04813083 ld ra,72(sp) + 80001a04: 04013403 ld s0,64(sp) + 80001a08: 03813483 ld s1,56(sp) + 80001a0c: 05010113 addi sp,sp,80 + 80001a10: 00008067 ret + +0000000080001a14 : + 80001a14: fe010113 addi sp,sp,-32 + 80001a18: 00813c23 sd s0,24(sp) + 80001a1c: 02010413 addi s0,sp,32 + 80001a20: fea43423 sd a0,-24(s0) + 80001a24: feb43023 sd a1,-32(s0) + 80001a28: fe843783 ld a5,-24(s0) + 80001a2c: 0007b783 ld a5,0(a5) + 80001a30: fe043703 ld a4,-32(s0) + 80001a34: 00e7b423 sd a4,8(a5) + 80001a38: fe843783 ld a5,-24(s0) + 80001a3c: 0007b703 ld a4,0(a5) + 80001a40: fe043783 ld a5,-32(s0) + 80001a44: 00e7b023 sd a4,0(a5) + 80001a48: fe843783 ld a5,-24(s0) + 80001a4c: fe043703 ld a4,-32(s0) + 80001a50: 00e7b023 sd a4,0(a5) + 80001a54: fe043783 ld a5,-32(s0) + 80001a58: fe843703 ld a4,-24(s0) + 80001a5c: 00e7b423 sd a4,8(a5) + 80001a60: 00000013 nop + 80001a64: 01813403 ld s0,24(sp) + 80001a68: 02010113 addi sp,sp,32 + 80001a6c: 00008067 ret + +0000000080001a70 : + 80001a70: fe010113 addi sp,sp,-32 + 80001a74: 00813c23 sd s0,24(sp) + 80001a78: 02010413 addi s0,sp,32 + 80001a7c: fea43423 sd a0,-24(s0) + 80001a80: fe843783 ld a5,-24(s0) + 80001a84: 0007b783 ld a5,0(a5) + 80001a88: fe843703 ld a4,-24(s0) + 80001a8c: 00873703 ld a4,8(a4) + 80001a90: 00e7b423 sd a4,8(a5) + 80001a94: fe843783 ld a5,-24(s0) + 80001a98: 0087b783 ld a5,8(a5) + 80001a9c: fe843703 ld a4,-24(s0) + 80001aa0: 00073703 ld a4,0(a4) + 80001aa4: 00e7b023 sd a4,0(a5) + 80001aa8: fe843783 ld a5,-24(s0) + 80001aac: fe843703 ld a4,-24(s0) + 80001ab0: 00e7b423 sd a4,8(a5) + 80001ab4: fe843783 ld a5,-24(s0) + 80001ab8: 0087b703 ld a4,8(a5) + 80001abc: fe843783 ld a5,-24(s0) + 80001ac0: 00e7b023 sd a4,0(a5) + 80001ac4: 00000013 nop + 80001ac8: 01813403 ld s0,24(sp) + 80001acc: 02010113 addi sp,sp,32 + 80001ad0: 00008067 ret + +0000000080001ad4 : + 80001ad4: fd010113 addi sp,sp,-48 + 80001ad8: 02813423 sd s0,40(sp) + 80001adc: 03010413 addi s0,sp,48 + 80001ae0: 00050793 mv a5,a0 + 80001ae4: fcf42e23 sw a5,-36(s0) + 80001ae8: fe042623 sw zero,-20(s0) + 80001aec: 04c0006f j 80001b38 + 80001af0: 00018717 auipc a4,0x18 + 80001af4: 28070713 addi a4,a4,640 # 80019d70 + 80001af8: fec42783 lw a5,-20(s0) + 80001afc: 00579793 slli a5,a5,0x5 + 80001b00: 00f707b3 add a5,a4,a5 + 80001b04: 0007a703 lw a4,0(a5) + 80001b08: fdc42783 lw a5,-36(s0) + 80001b0c: 0007879b sext.w a5,a5 + 80001b10: 00e79e63 bne a5,a4,80001b2c + 80001b14: fec42783 lw a5,-20(s0) + 80001b18: 00579713 slli a4,a5,0x5 + 80001b1c: 00018797 auipc a5,0x18 + 80001b20: 25478793 addi a5,a5,596 # 80019d70 + 80001b24: 00f707b3 add a5,a4,a5 + 80001b28: 0240006f j 80001b4c + 80001b2c: fec42783 lw a5,-20(s0) + 80001b30: 0017879b addiw a5,a5,1 + 80001b34: fef42623 sw a5,-20(s0) + 80001b38: fec42783 lw a5,-20(s0) + 80001b3c: 0007871b sext.w a4,a5 + 80001b40: 00800793 li a5,8 + 80001b44: fae7d6e3 bge a5,a4,80001af0 + 80001b48: 00000793 li a5,0 + 80001b4c: 00078513 mv a0,a5 + 80001b50: 02813403 ld s0,40(sp) + 80001b54: 03010113 addi sp,sp,48 + 80001b58: 00008067 ret + +0000000080001b5c : + 80001b5c: fa010113 addi sp,sp,-96 + 80001b60: 04113c23 sd ra,88(sp) + 80001b64: 04813823 sd s0,80(sp) + 80001b68: 04913423 sd s1,72(sp) + 80001b6c: 06010413 addi s0,sp,96 + 80001b70: faa43c23 sd a0,-72(s0) + 80001b74: 00058793 mv a5,a1 + 80001b78: fac43423 sd a2,-88(s0) + 80001b7c: faf42a23 sw a5,-76(s0) + 80001b80: fc043c23 sd zero,-40(s0) + 80001b84: fb442783 lw a5,-76(s0) + 80001b88: 00078513 mv a0,a5 + 80001b8c: f49ff0ef jal ra,80001ad4 + 80001b90: fca43823 sd a0,-48(s0) + 80001b94: fd043783 ld a5,-48(s0) + 80001b98: 00079e63 bnez a5,80001bb4 + 80001b9c: 13800613 li a2,312 + 80001ba0: 00017597 auipc a1,0x17 + 80001ba4: 82058593 addi a1,a1,-2016 # 800183c0 <__FUNCTION__.2690> + 80001ba8: 00014517 auipc a0,0x14 + 80001bac: fc050513 addi a0,a0,-64 # 80015b68 + 80001bb0: 0cd060ef jal ra,8000847c + 80001bb4: 529000ef jal ra,800028dc + 80001bb8: fd043783 ld a5,-48(s0) + 80001bbc: 0087b783 ld a5,8(a5) + 80001bc0: fcf43c23 sd a5,-40(s0) + 80001bc4: 0480006f j 80001c0c + 80001bc8: fd843783 ld a5,-40(s0) + 80001bcc: fe878793 addi a5,a5,-24 + 80001bd0: fcf43423 sd a5,-56(s0) + 80001bd4: fc843783 ld a5,-56(s0) + 80001bd8: 02078463 beqz a5,80001c00 + 80001bdc: fc843703 ld a4,-56(s0) + 80001be0: fb843783 ld a5,-72(s0) + 80001be4: 00f71e63 bne a4,a5,80001c00 + 80001be8: 14800613 li a2,328 + 80001bec: 00016597 auipc a1,0x16 + 80001bf0: 7d458593 addi a1,a1,2004 # 800183c0 <__FUNCTION__.2690> + 80001bf4: 00014517 auipc a0,0x14 + 80001bf8: f8c50513 addi a0,a0,-116 # 80015b80 + 80001bfc: 081060ef jal ra,8000847c + 80001c00: fd843783 ld a5,-40(s0) + 80001c04: 0007b783 ld a5,0(a5) + 80001c08: fcf43c23 sd a5,-40(s0) + 80001c0c: fd043783 ld a5,-48(s0) + 80001c10: 00878793 addi a5,a5,8 + 80001c14: fd843703 ld a4,-40(s0) + 80001c18: faf718e3 bne a4,a5,80001bc8 + 80001c1c: 529000ef jal ra,80002944 + 80001c20: fb442783 lw a5,-76(s0) + 80001c24: 0ff7f793 andi a5,a5,255 + 80001c28: f807e793 ori a5,a5,-128 + 80001c2c: 0ff7f713 andi a4,a5,255 + 80001c30: fb843783 ld a5,-72(s0) + 80001c34: 00e78a23 sb a4,20(a5) + 80001c38: fb843783 ld a5,-72(s0) + 80001c3c: 01400613 li a2,20 + 80001c40: fa843583 ld a1,-88(s0) + 80001c44: 00078513 mv a0,a5 + 80001c48: 3d8050ef jal ra,80007020 + 80001c4c: 00020797 auipc a5,0x20 + 80001c50: 37478793 addi a5,a5,884 # 80021fc0 + 80001c54: 0007b783 ld a5,0(a5) + 80001c58: 00078c63 beqz a5,80001c70 + 80001c5c: 00020797 auipc a5,0x20 + 80001c60: 36478793 addi a5,a5,868 # 80021fc0 + 80001c64: 0007b783 ld a5,0(a5) + 80001c68: fb843503 ld a0,-72(s0) + 80001c6c: 000780e7 jalr a5 + 80001c70: d04fe0ef jal ra,80000174 + 80001c74: 00050493 mv s1,a0 + 80001c78: fd043783 ld a5,-48(s0) + 80001c7c: 00878713 addi a4,a5,8 + 80001c80: fb843783 ld a5,-72(s0) + 80001c84: 01878793 addi a5,a5,24 + 80001c88: 00078593 mv a1,a5 + 80001c8c: 00070513 mv a0,a4 + 80001c90: d85ff0ef jal ra,80001a14 + 80001c94: 00048513 mv a0,s1 + 80001c98: ce4fe0ef jal ra,8000017c + 80001c9c: 00000013 nop + 80001ca0: 05813083 ld ra,88(sp) + 80001ca4: 05013403 ld s0,80(sp) + 80001ca8: 04813483 ld s1,72(sp) + 80001cac: 06010113 addi sp,sp,96 + 80001cb0: 00008067 ret + +0000000080001cb4 : + 80001cb4: fd010113 addi sp,sp,-48 + 80001cb8: 02113423 sd ra,40(sp) + 80001cbc: 02813023 sd s0,32(sp) + 80001cc0: 00913c23 sd s1,24(sp) + 80001cc4: 03010413 addi s0,sp,48 + 80001cc8: fca43c23 sd a0,-40(s0) + 80001ccc: fd843783 ld a5,-40(s0) + 80001cd0: 00079e63 bnez a5,80001cec + 80001cd4: 17500613 li a2,373 + 80001cd8: 00016597 auipc a1,0x16 + 80001cdc: 6f858593 addi a1,a1,1784 # 800183d0 <__FUNCTION__.2699> + 80001ce0: 00014517 auipc a0,0x14 + 80001ce4: eb050513 addi a0,a0,-336 # 80015b90 + 80001ce8: 794060ef jal ra,8000847c + 80001cec: 00020797 auipc a5,0x20 + 80001cf0: 2dc78793 addi a5,a5,732 # 80021fc8 + 80001cf4: 0007b783 ld a5,0(a5) + 80001cf8: 00078c63 beqz a5,80001d10 + 80001cfc: 00020797 auipc a5,0x20 + 80001d00: 2cc78793 addi a5,a5,716 # 80021fc8 + 80001d04: 0007b783 ld a5,0(a5) + 80001d08: fd843503 ld a0,-40(s0) + 80001d0c: 000780e7 jalr a5 + 80001d10: fd843783 ld a5,-40(s0) + 80001d14: 00078a23 sb zero,20(a5) + 80001d18: c5cfe0ef jal ra,80000174 + 80001d1c: 00050493 mv s1,a0 + 80001d20: fd843783 ld a5,-40(s0) + 80001d24: 01878793 addi a5,a5,24 + 80001d28: 00078513 mv a0,a5 + 80001d2c: d45ff0ef jal ra,80001a70 + 80001d30: 00048513 mv a0,s1 + 80001d34: c48fe0ef jal ra,8000017c + 80001d38: 00000013 nop + 80001d3c: 02813083 ld ra,40(sp) + 80001d40: 02013403 ld s0,32(sp) + 80001d44: 01813483 ld s1,24(sp) + 80001d48: 03010113 addi sp,sp,48 + 80001d4c: 00008067 ret + +0000000080001d50 : + 80001d50: fb010113 addi sp,sp,-80 + 80001d54: 04113423 sd ra,72(sp) + 80001d58: 04813023 sd s0,64(sp) + 80001d5c: 02913c23 sd s1,56(sp) + 80001d60: 05010413 addi s0,sp,80 + 80001d64: 00050793 mv a5,a0 + 80001d68: fab43823 sd a1,-80(s0) + 80001d6c: faf42e23 sw a5,-68(s0) + 80001d70: c04fe0ef jal ra,80000174 + 80001d74: fca43c23 sd a0,-40(s0) + 80001d78: 05d040ef jal ra,800065d4 + 80001d7c: 00050793 mv a5,a0 + 80001d80: 02078863 beqz a5,80001db0 + 80001d84: 00016597 auipc a1,0x16 + 80001d88: 66458593 addi a1,a1,1636 # 800183e8 <__FUNCTION__.2708> + 80001d8c: 00014517 auipc a0,0x14 + 80001d90: e1c50513 addi a0,a0,-484 # 80015ba8 + 80001d94: 488060ef jal ra,8000821c + 80001d98: 19800613 li a2,408 + 80001d9c: 00016597 auipc a1,0x16 + 80001da0: 64c58593 addi a1,a1,1612 # 800183e8 <__FUNCTION__.2708> + 80001da4: 00014517 auipc a0,0x14 + 80001da8: e2c50513 addi a0,a0,-468 # 80015bd0 + 80001dac: 6d0060ef jal ra,8000847c + 80001db0: fd843503 ld a0,-40(s0) + 80001db4: bc8fe0ef jal ra,8000017c + 80001db8: fbc42783 lw a5,-68(s0) + 80001dbc: 00078513 mv a0,a5 + 80001dc0: d15ff0ef jal ra,80001ad4 + 80001dc4: fca43823 sd a0,-48(s0) + 80001dc8: fd043783 ld a5,-48(s0) + 80001dcc: 00079e63 bnez a5,80001de8 + 80001dd0: 19c00613 li a2,412 + 80001dd4: 00016597 auipc a1,0x16 + 80001dd8: 61458593 addi a1,a1,1556 # 800183e8 <__FUNCTION__.2708> + 80001ddc: 00014517 auipc a0,0x14 + 80001de0: d8c50513 addi a0,a0,-628 # 80015b68 + 80001de4: 698060ef jal ra,8000847c + 80001de8: fd043783 ld a5,-48(s0) + 80001dec: 0187b783 ld a5,24(a5) + 80001df0: 00078513 mv a0,a5 + 80001df4: 035020ef jal ra,80004628 + 80001df8: fca43423 sd a0,-56(s0) + 80001dfc: fc843783 ld a5,-56(s0) + 80001e00: 00079663 bnez a5,80001e0c + 80001e04: 00000793 li a5,0 + 80001e08: 09c0006f j 80001ea4 + 80001e0c: fd043783 ld a5,-48(s0) + 80001e10: 0187b783 ld a5,24(a5) + 80001e14: 00078613 mv a2,a5 + 80001e18: 00000593 li a1,0 + 80001e1c: fc843503 ld a0,-56(s0) + 80001e20: 4a5040ef jal ra,80006ac4 + 80001e24: fbc42783 lw a5,-68(s0) + 80001e28: 0ff7f713 andi a4,a5,255 + 80001e2c: fc843783 ld a5,-56(s0) + 80001e30: 00e78a23 sb a4,20(a5) + 80001e34: fc843783 ld a5,-56(s0) + 80001e38: 00078aa3 sb zero,21(a5) + 80001e3c: fc843783 ld a5,-56(s0) + 80001e40: 01400613 li a2,20 + 80001e44: fb043583 ld a1,-80(s0) + 80001e48: 00078513 mv a0,a5 + 80001e4c: 1d4050ef jal ra,80007020 + 80001e50: 00020797 auipc a5,0x20 + 80001e54: 17078793 addi a5,a5,368 # 80021fc0 + 80001e58: 0007b783 ld a5,0(a5) + 80001e5c: 00078c63 beqz a5,80001e74 + 80001e60: 00020797 auipc a5,0x20 + 80001e64: 16078793 addi a5,a5,352 # 80021fc0 + 80001e68: 0007b783 ld a5,0(a5) + 80001e6c: fc843503 ld a0,-56(s0) + 80001e70: 000780e7 jalr a5 + 80001e74: b00fe0ef jal ra,80000174 + 80001e78: 00050493 mv s1,a0 + 80001e7c: fd043783 ld a5,-48(s0) + 80001e80: 00878713 addi a4,a5,8 + 80001e84: fc843783 ld a5,-56(s0) + 80001e88: 01878793 addi a5,a5,24 + 80001e8c: 00078593 mv a1,a5 + 80001e90: 00070513 mv a0,a4 + 80001e94: b81ff0ef jal ra,80001a14 + 80001e98: 00048513 mv a0,s1 + 80001e9c: ae0fe0ef jal ra,8000017c + 80001ea0: fc843783 ld a5,-56(s0) + 80001ea4: 00078513 mv a0,a5 + 80001ea8: 04813083 ld ra,72(sp) + 80001eac: 04013403 ld s0,64(sp) + 80001eb0: 03813483 ld s1,56(sp) + 80001eb4: 05010113 addi sp,sp,80 + 80001eb8: 00008067 ret + +0000000080001ebc : + 80001ebc: fd010113 addi sp,sp,-48 + 80001ec0: 02113423 sd ra,40(sp) + 80001ec4: 02813023 sd s0,32(sp) + 80001ec8: 00913c23 sd s1,24(sp) + 80001ecc: 03010413 addi s0,sp,48 + 80001ed0: fca43c23 sd a0,-40(s0) + 80001ed4: fd843783 ld a5,-40(s0) + 80001ed8: 00079e63 bnez a5,80001ef4 + 80001edc: 1d600613 li a2,470 + 80001ee0: 00016597 auipc a1,0x16 + 80001ee4: 52058593 addi a1,a1,1312 # 80018400 <__FUNCTION__.2713> + 80001ee8: 00014517 auipc a0,0x14 + 80001eec: ca850513 addi a0,a0,-856 # 80015b90 + 80001ef0: 58c060ef jal ra,8000847c + 80001ef4: fd843783 ld a5,-40(s0) + 80001ef8: 0147c783 lbu a5,20(a5) + 80001efc: 0187979b slliw a5,a5,0x18 + 80001f00: 4187d79b sraiw a5,a5,0x18 + 80001f04: 0007de63 bgez a5,80001f20 + 80001f08: 1d700613 li a2,471 + 80001f0c: 00016597 auipc a1,0x16 + 80001f10: 4f458593 addi a1,a1,1268 # 80018400 <__FUNCTION__.2713> + 80001f14: 00014517 auipc a0,0x14 + 80001f18: cc450513 addi a0,a0,-828 # 80015bd8 + 80001f1c: 560060ef jal ra,8000847c + 80001f20: 00020797 auipc a5,0x20 + 80001f24: 0a878793 addi a5,a5,168 # 80021fc8 + 80001f28: 0007b783 ld a5,0(a5) + 80001f2c: 00078c63 beqz a5,80001f44 + 80001f30: 00020797 auipc a5,0x20 + 80001f34: 09878793 addi a5,a5,152 # 80021fc8 + 80001f38: 0007b783 ld a5,0(a5) + 80001f3c: fd843503 ld a0,-40(s0) + 80001f40: 000780e7 jalr a5 + 80001f44: fd843783 ld a5,-40(s0) + 80001f48: 00078a23 sb zero,20(a5) + 80001f4c: a28fe0ef jal ra,80000174 + 80001f50: 00050493 mv s1,a0 + 80001f54: fd843783 ld a5,-40(s0) + 80001f58: 01878793 addi a5,a5,24 + 80001f5c: 00078513 mv a0,a5 + 80001f60: b11ff0ef jal ra,80001a70 + 80001f64: 00048513 mv a0,s1 + 80001f68: a14fe0ef jal ra,8000017c + 80001f6c: fd843503 ld a0,-40(s0) + 80001f70: 725020ef jal ra,80004e94 + 80001f74: 00000013 nop + 80001f78: 02813083 ld ra,40(sp) + 80001f7c: 02013403 ld s0,32(sp) + 80001f80: 01813483 ld s1,24(sp) + 80001f84: 03010113 addi sp,sp,48 + 80001f88: 00008067 ret + +0000000080001f8c : + 80001f8c: fe010113 addi sp,sp,-32 + 80001f90: 00113c23 sd ra,24(sp) + 80001f94: 00813823 sd s0,16(sp) + 80001f98: 02010413 addi s0,sp,32 + 80001f9c: fea43423 sd a0,-24(s0) + 80001fa0: fe843783 ld a5,-24(s0) + 80001fa4: 00079e63 bnez a5,80001fc0 + 80001fa8: 1f800613 li a2,504 + 80001fac: 00016597 auipc a1,0x16 + 80001fb0: 46c58593 addi a1,a1,1132 # 80018418 <__FUNCTION__.2717> + 80001fb4: 00014517 auipc a0,0x14 + 80001fb8: bdc50513 addi a0,a0,-1060 # 80015b90 + 80001fbc: 4c0060ef jal ra,8000847c + 80001fc0: fe843783 ld a5,-24(s0) + 80001fc4: 0147c783 lbu a5,20(a5) + 80001fc8: 0187979b slliw a5,a5,0x18 + 80001fcc: 4187d79b sraiw a5,a5,0x18 + 80001fd0: 0007d663 bgez a5,80001fdc + 80001fd4: 00100793 li a5,1 + 80001fd8: 0080006f j 80001fe0 + 80001fdc: 00000793 li a5,0 + 80001fe0: 00078513 mv a0,a5 + 80001fe4: 01813083 ld ra,24(sp) + 80001fe8: 01013403 ld s0,16(sp) + 80001fec: 02010113 addi sp,sp,32 + 80001ff0: 00008067 ret + +0000000080001ff4 : + 80001ff4: fe010113 addi sp,sp,-32 + 80001ff8: 00113c23 sd ra,24(sp) + 80001ffc: 00813823 sd s0,16(sp) + 80002000: 02010413 addi s0,sp,32 + 80002004: fea43423 sd a0,-24(s0) + 80002008: fe843783 ld a5,-24(s0) + 8000200c: 00079e63 bnez a5,80002028 + 80002010: 20b00613 li a2,523 + 80002014: 00016597 auipc a1,0x16 + 80002018: 42458593 addi a1,a1,1060 # 80018438 <__FUNCTION__.2721> + 8000201c: 00014517 auipc a0,0x14 + 80002020: b7450513 addi a0,a0,-1164 # 80015b90 + 80002024: 458060ef jal ra,8000847c + 80002028: fe843783 ld a5,-24(s0) + 8000202c: 0147c783 lbu a5,20(a5) + 80002030: 07f7f793 andi a5,a5,127 + 80002034: 0ff7f793 andi a5,a5,255 + 80002038: 00078513 mv a0,a5 + 8000203c: 01813083 ld ra,24(sp) + 80002040: 01013403 ld s0,16(sp) + 80002044: 02010113 addi sp,sp,32 + 80002048: 00008067 ret + +000000008000204c : + 8000204c: fc010113 addi sp,sp,-64 + 80002050: 02113c23 sd ra,56(sp) + 80002054: 02813823 sd s0,48(sp) + 80002058: 04010413 addi s0,sp,64 + 8000205c: fca43423 sd a0,-56(s0) + 80002060: 00058793 mv a5,a1 + 80002064: fcf403a3 sb a5,-57(s0) + 80002068: fe043023 sd zero,-32(s0) + 8000206c: fe043423 sd zero,-24(s0) + 80002070: fc043c23 sd zero,-40(s0) + 80002074: fc744783 lbu a5,-57(s0) + 80002078: 0007879b sext.w a5,a5 + 8000207c: 00078513 mv a0,a5 + 80002080: a55ff0ef jal ra,80001ad4 + 80002084: fca43c23 sd a0,-40(s0) + 80002088: fc843783 ld a5,-56(s0) + 8000208c: 00078663 beqz a5,80002098 + 80002090: fd843783 ld a5,-40(s0) + 80002094: 00079663 bnez a5,800020a0 + 80002098: 00000793 li a5,0 + 8000209c: 0b80006f j 80002154 + 800020a0: 8d4fe0ef jal ra,80000174 + 800020a4: fca43823 sd a0,-48(s0) + 800020a8: 52c040ef jal ra,800065d4 + 800020ac: 00050793 mv a5,a0 + 800020b0: 02078863 beqz a5,800020e0 + 800020b4: 00016597 auipc a1,0x16 + 800020b8: 39c58593 addi a1,a1,924 # 80018450 <__FUNCTION__.2730> + 800020bc: 00014517 auipc a0,0x14 + 800020c0: aec50513 addi a0,a0,-1300 # 80015ba8 + 800020c4: 158060ef jal ra,8000821c + 800020c8: 22800613 li a2,552 + 800020cc: 00016597 auipc a1,0x16 + 800020d0: 38458593 addi a1,a1,900 # 80018450 <__FUNCTION__.2730> + 800020d4: 00014517 auipc a0,0x14 + 800020d8: afc50513 addi a0,a0,-1284 # 80015bd0 + 800020dc: 3a0060ef jal ra,8000847c + 800020e0: fd043503 ld a0,-48(s0) + 800020e4: 898fe0ef jal ra,8000017c + 800020e8: 7f4000ef jal ra,800028dc + 800020ec: fd843783 ld a5,-40(s0) + 800020f0: 0087b783 ld a5,8(a5) + 800020f4: fef43423 sd a5,-24(s0) + 800020f8: 0440006f j 8000213c + 800020fc: fe843783 ld a5,-24(s0) + 80002100: fe878793 addi a5,a5,-24 + 80002104: fef43023 sd a5,-32(s0) + 80002108: fe043783 ld a5,-32(s0) + 8000210c: 01400613 li a2,20 + 80002110: fc843583 ld a1,-56(s0) + 80002114: 00078513 mv a0,a5 + 80002118: 7b5040ef jal ra,800070cc + 8000211c: 00050793 mv a5,a0 + 80002120: 00079863 bnez a5,80002130 + 80002124: 021000ef jal ra,80002944 + 80002128: fe043783 ld a5,-32(s0) + 8000212c: 0280006f j 80002154 + 80002130: fe843783 ld a5,-24(s0) + 80002134: 0007b783 ld a5,0(a5) + 80002138: fef43423 sd a5,-24(s0) + 8000213c: fd843783 ld a5,-40(s0) + 80002140: 00878793 addi a5,a5,8 + 80002144: fe843703 ld a4,-24(s0) + 80002148: faf71ae3 bne a4,a5,800020fc + 8000214c: 7f8000ef jal ra,80002944 + 80002150: 00000793 li a5,0 + 80002154: 00078513 mv a0,a5 + 80002158: 03813083 ld ra,56(sp) + 8000215c: 03013403 ld s0,48(sp) + 80002160: 04010113 addi sp,sp,64 + 80002164: 00008067 ret + +0000000080002168 : + 80002168: fe010113 addi sp,sp,-32 + 8000216c: 00813c23 sd s0,24(sp) + 80002170: 02010413 addi s0,sp,32 + 80002174: fea43423 sd a0,-24(s0) + 80002178: fe843783 ld a5,-24(s0) + 8000217c: fe843703 ld a4,-24(s0) + 80002180: 00e7b423 sd a4,8(a5) + 80002184: fe843783 ld a5,-24(s0) + 80002188: 0087b703 ld a4,8(a5) + 8000218c: fe843783 ld a5,-24(s0) + 80002190: 00e7b023 sd a4,0(a5) + 80002194: 00000013 nop + 80002198: 01813403 ld s0,24(sp) + 8000219c: 02010113 addi sp,sp,32 + 800021a0: 00008067 ret + +00000000800021a4 : + 800021a4: fe010113 addi sp,sp,-32 + 800021a8: 00813c23 sd s0,24(sp) + 800021ac: 02010413 addi s0,sp,32 + 800021b0: fea43423 sd a0,-24(s0) + 800021b4: feb43023 sd a1,-32(s0) + 800021b8: fe843783 ld a5,-24(s0) + 800021bc: 0087b783 ld a5,8(a5) + 800021c0: fe043703 ld a4,-32(s0) + 800021c4: 00e7b023 sd a4,0(a5) + 800021c8: fe843783 ld a5,-24(s0) + 800021cc: 0087b703 ld a4,8(a5) + 800021d0: fe043783 ld a5,-32(s0) + 800021d4: 00e7b423 sd a4,8(a5) + 800021d8: fe843783 ld a5,-24(s0) + 800021dc: fe043703 ld a4,-32(s0) + 800021e0: 00e7b423 sd a4,8(a5) + 800021e4: fe043783 ld a5,-32(s0) + 800021e8: fe843703 ld a4,-24(s0) + 800021ec: 00e7b023 sd a4,0(a5) + 800021f0: 00000013 nop + 800021f4: 01813403 ld s0,24(sp) + 800021f8: 02010113 addi sp,sp,32 + 800021fc: 00008067 ret + +0000000080002200 : + 80002200: fe010113 addi sp,sp,-32 + 80002204: 00813c23 sd s0,24(sp) + 80002208: 02010413 addi s0,sp,32 + 8000220c: fea43423 sd a0,-24(s0) + 80002210: fe843783 ld a5,-24(s0) + 80002214: 0007b783 ld a5,0(a5) + 80002218: fe843703 ld a4,-24(s0) + 8000221c: 00873703 ld a4,8(a4) + 80002220: 00e7b423 sd a4,8(a5) + 80002224: fe843783 ld a5,-24(s0) + 80002228: 0087b783 ld a5,8(a5) + 8000222c: fe843703 ld a4,-24(s0) + 80002230: 00073703 ld a4,0(a4) + 80002234: 00e7b023 sd a4,0(a5) + 80002238: fe843783 ld a5,-24(s0) + 8000223c: fe843703 ld a4,-24(s0) + 80002240: 00e7b423 sd a4,8(a5) + 80002244: fe843783 ld a5,-24(s0) + 80002248: 0087b703 ld a4,8(a5) + 8000224c: fe843783 ld a5,-24(s0) + 80002250: 00e7b023 sd a4,0(a5) + 80002254: 00000013 nop + 80002258: 01813403 ld s0,24(sp) + 8000225c: 02010113 addi sp,sp,32 + 80002260: 00008067 ret + +0000000080002264 : + 80002264: fe010113 addi sp,sp,-32 + 80002268: 00813c23 sd s0,24(sp) + 8000226c: 02010413 addi s0,sp,32 + 80002270: fea43423 sd a0,-24(s0) + 80002274: fe843783 ld a5,-24(s0) + 80002278: 0007b783 ld a5,0(a5) + 8000227c: fe843703 ld a4,-24(s0) + 80002280: 40f707b3 sub a5,a4,a5 + 80002284: 0017b793 seqz a5,a5 + 80002288: 0ff7f793 andi a5,a5,255 + 8000228c: 0007879b sext.w a5,a5 + 80002290: 00078513 mv a0,a5 + 80002294: 01813403 ld s0,24(sp) + 80002298: 02010113 addi sp,sp,32 + 8000229c: 00008067 ret + +00000000800022a0 <_get_highest_priority_thread>: + 800022a0: fd010113 addi sp,sp,-48 + 800022a4: 02113423 sd ra,40(sp) + 800022a8: 02813023 sd s0,32(sp) + 800022ac: 00913c23 sd s1,24(sp) + 800022b0: 01213823 sd s2,16(sp) + 800022b4: 03010413 addi s0,sp,48 + 800022b8: fca43c23 sd a0,-40(s0) + 800022bc: 00020797 auipc a5,0x20 + 800022c0: d2c78793 addi a5,a5,-724 # 80021fe8 + 800022c4: 0007a783 lw a5,0(a5) + 800022c8: 0007879b sext.w a5,a5 + 800022cc: 00078513 mv a0,a5 + 800022d0: 074060ef jal ra,80008344 <__rt_ffs> + 800022d4: 00050793 mv a5,a0 + 800022d8: fff7879b addiw a5,a5,-1 + 800022dc: 0007879b sext.w a5,a5 + 800022e0: 00078493 mv s1,a5 + 800022e4: 00020717 auipc a4,0x20 + 800022e8: ecc70713 addi a4,a4,-308 # 800221b0 + 800022ec: 00449793 slli a5,s1,0x4 + 800022f0: 00f707b3 add a5,a4,a5 + 800022f4: 0007b783 ld a5,0(a5) + 800022f8: fd878913 addi s2,a5,-40 + 800022fc: fd843783 ld a5,-40(s0) + 80002300: 0097b023 sd s1,0(a5) + 80002304: 00090793 mv a5,s2 + 80002308: 00078513 mv a0,a5 + 8000230c: 02813083 ld ra,40(sp) + 80002310: 02013403 ld s0,32(sp) + 80002314: 01813483 ld s1,24(sp) + 80002318: 01013903 ld s2,16(sp) + 8000231c: 03010113 addi sp,sp,48 + 80002320: 00008067 ret + +0000000080002324 : + 80002324: fe010113 addi sp,sp,-32 + 80002328: 00113c23 sd ra,24(sp) + 8000232c: 00813823 sd s0,16(sp) + 80002330: 00913423 sd s1,8(sp) + 80002334: 02010413 addi s0,sp,32 + 80002338: 00020797 auipc a5,0x20 + 8000233c: cb478793 addi a5,a5,-844 # 80021fec + 80002340: 00079023 sh zero,0(a5) + 80002344: 00000493 li s1,0 + 80002348: 0200006f j 80002368 + 8000234c: 00449713 slli a4,s1,0x4 + 80002350: 00020797 auipc a5,0x20 + 80002354: e6078793 addi a5,a5,-416 # 800221b0 + 80002358: 00f707b3 add a5,a4,a5 + 8000235c: 00078513 mv a0,a5 + 80002360: e09ff0ef jal ra,80002168 + 80002364: 00148493 addi s1,s1,1 + 80002368: 01f00793 li a5,31 + 8000236c: fe97d0e3 bge a5,s1,8000234c + 80002370: 00020797 auipc a5,0x20 + 80002374: c7878793 addi a5,a5,-904 # 80021fe8 + 80002378: 0007a023 sw zero,0(a5) + 8000237c: 00000013 nop + 80002380: 01813083 ld ra,24(sp) + 80002384: 01013403 ld s0,16(sp) + 80002388: 00813483 ld s1,8(sp) + 8000238c: 02010113 addi sp,sp,32 + 80002390: 00008067 ret + +0000000080002394 : + 80002394: fd010113 addi sp,sp,-48 + 80002398: 02113423 sd ra,40(sp) + 8000239c: 02813023 sd s0,32(sp) + 800023a0: 00913c23 sd s1,24(sp) + 800023a4: 03010413 addi s0,sp,48 + 800023a8: fd840793 addi a5,s0,-40 + 800023ac: 00078513 mv a0,a5 + 800023b0: ef1ff0ef jal ra,800022a0 <_get_highest_priority_thread> + 800023b4: 00050493 mv s1,a0 + 800023b8: 00020797 auipc a5,0x20 + 800023bc: c3878793 addi a5,a5,-968 # 80021ff0 + 800023c0: 0097b023 sd s1,0(a5) + 800023c4: 00048513 mv a0,s1 + 800023c8: 448000ef jal ra,80002810 + 800023cc: 00300793 li a5,3 + 800023d0: 06f48423 sb a5,104(s1) + 800023d4: 03848793 addi a5,s1,56 + 800023d8: 00078513 mv a0,a5 + 800023dc: da9fd0ef jal ra,80000184 + 800023e0: 00000013 nop + 800023e4: 02813083 ld ra,40(sp) + 800023e8: 02013403 ld s0,32(sp) + 800023ec: 01813483 ld s1,24(sp) + 800023f0: 03010113 addi sp,sp,48 + 800023f4: 00008067 ret + +00000000800023f8 : + 800023f8: fc010113 addi sp,sp,-64 + 800023fc: 02113c23 sd ra,56(sp) + 80002400: 02813823 sd s0,48(sp) + 80002404: 04010413 addi s0,sp,64 + 80002408: d6dfd0ef jal ra,80000174 + 8000240c: fca43c23 sd a0,-40(s0) + 80002410: 00020797 auipc a5,0x20 + 80002414: bdc78793 addi a5,a5,-1060 # 80021fec + 80002418: 00079783 lh a5,0(a5) + 8000241c: 2a079063 bnez a5,800026bc + 80002420: 00020797 auipc a5,0x20 + 80002424: bc878793 addi a5,a5,-1080 # 80021fe8 + 80002428: 0007a783 lw a5,0(a5) + 8000242c: 28078863 beqz a5,800026bc + 80002430: fe042223 sw zero,-28(s0) + 80002434: fc840793 addi a5,s0,-56 + 80002438: 00078513 mv a0,a5 + 8000243c: e65ff0ef jal ra,800022a0 <_get_highest_priority_thread> + 80002440: fea43423 sd a0,-24(s0) + 80002444: 00020797 auipc a5,0x20 + 80002448: bac78793 addi a5,a5,-1108 # 80021ff0 + 8000244c: 0007b783 ld a5,0(a5) + 80002450: 0687c783 lbu a5,104(a5) + 80002454: 0007879b sext.w a5,a5 + 80002458: 0077f793 andi a5,a5,7 + 8000245c: 0007879b sext.w a5,a5 + 80002460: 00078713 mv a4,a5 + 80002464: 00300793 li a5,3 + 80002468: 0af71a63 bne a4,a5,8000251c + 8000246c: 00020797 auipc a5,0x20 + 80002470: b8478793 addi a5,a5,-1148 # 80021ff0 + 80002474: 0007b783 ld a5,0(a5) + 80002478: 0697c783 lbu a5,105(a5) + 8000247c: 00078713 mv a4,a5 + 80002480: fc843783 ld a5,-56(s0) + 80002484: 00f77c63 bgeu a4,a5,8000249c + 80002488: 00020797 auipc a5,0x20 + 8000248c: b6878793 addi a5,a5,-1176 # 80021ff0 + 80002490: 0007b783 ld a5,0(a5) + 80002494: fef43423 sd a5,-24(s0) + 80002498: 05c0006f j 800024f4 + 8000249c: 00020797 auipc a5,0x20 + 800024a0: b5478793 addi a5,a5,-1196 # 80021ff0 + 800024a4: 0007b783 ld a5,0(a5) + 800024a8: 0697c783 lbu a5,105(a5) + 800024ac: 00078713 mv a4,a5 + 800024b0: fc843783 ld a5,-56(s0) + 800024b4: 02f71c63 bne a4,a5,800024ec + 800024b8: 00020797 auipc a5,0x20 + 800024bc: b3878793 addi a5,a5,-1224 # 80021ff0 + 800024c0: 0007b783 ld a5,0(a5) + 800024c4: 0687c783 lbu a5,104(a5) + 800024c8: 0007879b sext.w a5,a5 + 800024cc: 0087f793 andi a5,a5,8 + 800024d0: 0007879b sext.w a5,a5 + 800024d4: 00079c63 bnez a5,800024ec + 800024d8: 00020797 auipc a5,0x20 + 800024dc: b1878793 addi a5,a5,-1256 # 80021ff0 + 800024e0: 0007b783 ld a5,0(a5) + 800024e4: fef43423 sd a5,-24(s0) + 800024e8: 00c0006f j 800024f4 + 800024ec: 00100793 li a5,1 + 800024f0: fef42223 sw a5,-28(s0) + 800024f4: 00020797 auipc a5,0x20 + 800024f8: afc78793 addi a5,a5,-1284 # 80021ff0 + 800024fc: 0007b783 ld a5,0(a5) + 80002500: 0687c703 lbu a4,104(a5) + 80002504: 00020797 auipc a5,0x20 + 80002508: aec78793 addi a5,a5,-1300 # 80021ff0 + 8000250c: 0007b783 ld a5,0(a5) + 80002510: ff777713 andi a4,a4,-9 + 80002514: 0ff77713 andi a4,a4,255 + 80002518: 06e78423 sb a4,104(a5) + 8000251c: 00020797 auipc a5,0x20 + 80002520: ad478793 addi a5,a5,-1324 # 80021ff0 + 80002524: 0007b783 ld a5,0(a5) + 80002528: fe843703 ld a4,-24(s0) + 8000252c: 12f70c63 beq a4,a5,80002664 + 80002530: fc843783 ld a5,-56(s0) + 80002534: 0ff7f713 andi a4,a5,255 + 80002538: 00020797 auipc a5,0x20 + 8000253c: ac078793 addi a5,a5,-1344 # 80021ff8 + 80002540: 00e78023 sb a4,0(a5) + 80002544: 00020797 auipc a5,0x20 + 80002548: aac78793 addi a5,a5,-1364 # 80021ff0 + 8000254c: 0007b783 ld a5,0(a5) + 80002550: fcf43823 sd a5,-48(s0) + 80002554: 00020797 auipc a5,0x20 + 80002558: a9c78793 addi a5,a5,-1380 # 80021ff0 + 8000255c: fe843703 ld a4,-24(s0) + 80002560: 00e7b023 sd a4,0(a5) + 80002564: 00020797 auipc a5,0x20 + 80002568: a9c78793 addi a5,a5,-1380 # 80022000 + 8000256c: 0007b783 ld a5,0(a5) + 80002570: 00078e63 beqz a5,8000258c + 80002574: 00020797 auipc a5,0x20 + 80002578: a8c78793 addi a5,a5,-1396 # 80022000 + 8000257c: 0007b783 ld a5,0(a5) + 80002580: fe843583 ld a1,-24(s0) + 80002584: fd043503 ld a0,-48(s0) + 80002588: 000780e7 jalr a5 + 8000258c: fe442783 lw a5,-28(s0) + 80002590: 0007879b sext.w a5,a5 + 80002594: 00078663 beqz a5,800025a0 + 80002598: fd043503 ld a0,-48(s0) + 8000259c: 13c000ef jal ra,800026d8 + 800025a0: fe843503 ld a0,-24(s0) + 800025a4: 26c000ef jal ra,80002810 + 800025a8: fe843783 ld a5,-24(s0) + 800025ac: 0687c783 lbu a5,104(a5) + 800025b0: 0187979b slliw a5,a5,0x18 + 800025b4: 4187d79b sraiw a5,a5,0x18 + 800025b8: ff87f793 andi a5,a5,-8 + 800025bc: 0187979b slliw a5,a5,0x18 + 800025c0: 4187d79b sraiw a5,a5,0x18 + 800025c4: 0037e793 ori a5,a5,3 + 800025c8: 0187979b slliw a5,a5,0x18 + 800025cc: 4187d79b sraiw a5,a5,0x18 + 800025d0: 0ff7f713 andi a4,a5,255 + 800025d4: fe843783 ld a5,-24(s0) + 800025d8: 06e78423 sb a4,104(a5) + 800025dc: 00020797 auipc a5,0x20 + 800025e0: ab478793 addi a5,a5,-1356 # 80022090 + 800025e4: 0007c783 lbu a5,0(a5) + 800025e8: 0ff7f793 andi a5,a5,255 + 800025ec: 04079a63 bnez a5,80002640 + 800025f0: 00020797 auipc a5,0x20 + 800025f4: a1878793 addi a5,a5,-1512 # 80022008 + 800025f8: 0007b783 ld a5,0(a5) + 800025fc: 00078c63 beqz a5,80002614 + 80002600: 00020797 auipc a5,0x20 + 80002604: a0878793 addi a5,a5,-1528 # 80022008 + 80002608: 0007b783 ld a5,0(a5) + 8000260c: fd043503 ld a0,-48(s0) + 80002610: 000780e7 jalr a5 + 80002614: fd043783 ld a5,-48(s0) + 80002618: 03878793 addi a5,a5,56 + 8000261c: 00078713 mv a4,a5 + 80002620: fe843783 ld a5,-24(s0) + 80002624: 03878793 addi a5,a5,56 + 80002628: 00078593 mv a1,a5 + 8000262c: 00070513 mv a0,a4 + 80002630: b65fd0ef jal ra,80000194 + 80002634: fd843503 ld a0,-40(s0) + 80002638: b45fd0ef jal ra,8000017c + 8000263c: 08c0006f j 800026c8 + 80002640: fd043783 ld a5,-48(s0) + 80002644: 03878793 addi a5,a5,56 + 80002648: 00078713 mv a4,a5 + 8000264c: fe843783 ld a5,-24(s0) + 80002650: 03878793 addi a5,a5,56 + 80002654: 00078593 mv a1,a5 + 80002658: 00070513 mv a0,a4 + 8000265c: 5bc060ef jal ra,80008c18 + 80002660: 05c0006f j 800026bc + 80002664: 00020797 auipc a5,0x20 + 80002668: 98c78793 addi a5,a5,-1652 # 80021ff0 + 8000266c: 0007b783 ld a5,0(a5) + 80002670: 00078513 mv a0,a5 + 80002674: 19c000ef jal ra,80002810 + 80002678: 00020797 auipc a5,0x20 + 8000267c: 97878793 addi a5,a5,-1672 # 80021ff0 + 80002680: 0007b783 ld a5,0(a5) + 80002684: 0687c783 lbu a5,104(a5) + 80002688: 0187979b slliw a5,a5,0x18 + 8000268c: 4187d79b sraiw a5,a5,0x18 + 80002690: ff87f793 andi a5,a5,-8 + 80002694: 0187979b slliw a5,a5,0x18 + 80002698: 4187d79b sraiw a5,a5,0x18 + 8000269c: 0037e793 ori a5,a5,3 + 800026a0: 0187971b slliw a4,a5,0x18 + 800026a4: 4187571b sraiw a4,a4,0x18 + 800026a8: 00020797 auipc a5,0x20 + 800026ac: 94878793 addi a5,a5,-1720 # 80021ff0 + 800026b0: 0007b783 ld a5,0(a5) + 800026b4: 0ff77713 andi a4,a4,255 + 800026b8: 06e78423 sb a4,104(a5) + 800026bc: fd843503 ld a0,-40(s0) + 800026c0: abdfd0ef jal ra,8000017c + 800026c4: 00000013 nop + 800026c8: 03813083 ld ra,56(sp) + 800026cc: 03013403 ld s0,48(sp) + 800026d0: 04010113 addi sp,sp,64 + 800026d4: 00008067 ret + +00000000800026d8 : + 800026d8: fd010113 addi sp,sp,-48 + 800026dc: 02113423 sd ra,40(sp) + 800026e0: 02813023 sd s0,32(sp) + 800026e4: 00913c23 sd s1,24(sp) + 800026e8: 03010413 addi s0,sp,48 + 800026ec: fca43c23 sd a0,-40(s0) + 800026f0: fd843783 ld a5,-40(s0) + 800026f4: 00079e63 bnez a5,80002710 + 800026f8: 2c700613 li a2,711 + 800026fc: 00016597 auipc a1,0x16 + 80002700: d6458593 addi a1,a1,-668 # 80018460 <__FUNCTION__.2663> + 80002704: 00013517 auipc a0,0x13 + 80002708: 50450513 addi a0,a0,1284 # 80015c08 + 8000270c: 571050ef jal ra,8000847c + 80002710: a65fd0ef jal ra,80000174 + 80002714: 00050493 mv s1,a0 + 80002718: 00020797 auipc a5,0x20 + 8000271c: 8d878793 addi a5,a5,-1832 # 80021ff0 + 80002720: 0007b783 ld a5,0(a5) + 80002724: fd843703 ld a4,-40(s0) + 80002728: 02f71e63 bne a4,a5,80002764 + 8000272c: fd843783 ld a5,-40(s0) + 80002730: 0687c783 lbu a5,104(a5) + 80002734: 0187979b slliw a5,a5,0x18 + 80002738: 4187d79b sraiw a5,a5,0x18 + 8000273c: ff87f793 andi a5,a5,-8 + 80002740: 0187979b slliw a5,a5,0x18 + 80002744: 4187d79b sraiw a5,a5,0x18 + 80002748: 0037e793 ori a5,a5,3 + 8000274c: 0187979b slliw a5,a5,0x18 + 80002750: 4187d79b sraiw a5,a5,0x18 + 80002754: 0ff7f713 andi a4,a5,255 + 80002758: fd843783 ld a5,-40(s0) + 8000275c: 06e78423 sb a4,104(a5) + 80002760: 0900006f j 800027f0 + 80002764: fd843783 ld a5,-40(s0) + 80002768: 0687c783 lbu a5,104(a5) + 8000276c: 0187979b slliw a5,a5,0x18 + 80002770: 4187d79b sraiw a5,a5,0x18 + 80002774: ff87f793 andi a5,a5,-8 + 80002778: 0187979b slliw a5,a5,0x18 + 8000277c: 4187d79b sraiw a5,a5,0x18 + 80002780: 0017e793 ori a5,a5,1 + 80002784: 0187979b slliw a5,a5,0x18 + 80002788: 4187d79b sraiw a5,a5,0x18 + 8000278c: 0ff7f713 andi a4,a5,255 + 80002790: fd843783 ld a5,-40(s0) + 80002794: 06e78423 sb a4,104(a5) + 80002798: fd843783 ld a5,-40(s0) + 8000279c: 0697c783 lbu a5,105(a5) + 800027a0: 0007879b sext.w a5,a5 + 800027a4: 00479713 slli a4,a5,0x4 + 800027a8: 00020797 auipc a5,0x20 + 800027ac: a0878793 addi a5,a5,-1528 # 800221b0 + 800027b0: 00f70733 add a4,a4,a5 + 800027b4: fd843783 ld a5,-40(s0) + 800027b8: 02878793 addi a5,a5,40 + 800027bc: 00078593 mv a1,a5 + 800027c0: 00070513 mv a0,a4 + 800027c4: 9e1ff0ef jal ra,800021a4 + 800027c8: fd843783 ld a5,-40(s0) + 800027cc: 06c7a703 lw a4,108(a5) + 800027d0: 00020797 auipc a5,0x20 + 800027d4: 81878793 addi a5,a5,-2024 # 80021fe8 + 800027d8: 0007a783 lw a5,0(a5) + 800027dc: 00f767b3 or a5,a4,a5 + 800027e0: 0007871b sext.w a4,a5 + 800027e4: 00020797 auipc a5,0x20 + 800027e8: 80478793 addi a5,a5,-2044 # 80021fe8 + 800027ec: 00e7a023 sw a4,0(a5) + 800027f0: 00048513 mv a0,s1 + 800027f4: 989fd0ef jal ra,8000017c + 800027f8: 00000013 nop + 800027fc: 02813083 ld ra,40(sp) + 80002800: 02013403 ld s0,32(sp) + 80002804: 01813483 ld s1,24(sp) + 80002808: 03010113 addi sp,sp,48 + 8000280c: 00008067 ret + +0000000080002810 : + 80002810: fd010113 addi sp,sp,-48 + 80002814: 02113423 sd ra,40(sp) + 80002818: 02813023 sd s0,32(sp) + 8000281c: 00913c23 sd s1,24(sp) + 80002820: 03010413 addi s0,sp,48 + 80002824: fca43c23 sd a0,-40(s0) + 80002828: fd843783 ld a5,-40(s0) + 8000282c: 00079e63 bnez a5,80002848 + 80002830: 32800613 li a2,808 + 80002834: 00016597 auipc a1,0x16 + 80002838: c4c58593 addi a1,a1,-948 # 80018480 <__FUNCTION__.2669> + 8000283c: 00013517 auipc a0,0x13 + 80002840: 3cc50513 addi a0,a0,972 # 80015c08 + 80002844: 439050ef jal ra,8000847c + 80002848: 92dfd0ef jal ra,80000174 + 8000284c: 00050493 mv s1,a0 + 80002850: fd843783 ld a5,-40(s0) + 80002854: 02878793 addi a5,a5,40 + 80002858: 00078513 mv a0,a5 + 8000285c: 9a5ff0ef jal ra,80002200 + 80002860: fd843783 ld a5,-40(s0) + 80002864: 0697c783 lbu a5,105(a5) + 80002868: 0007879b sext.w a5,a5 + 8000286c: 00479713 slli a4,a5,0x4 + 80002870: 00020797 auipc a5,0x20 + 80002874: 94078793 addi a5,a5,-1728 # 800221b0 + 80002878: 00f707b3 add a5,a4,a5 + 8000287c: 00078513 mv a0,a5 + 80002880: 9e5ff0ef jal ra,80002264 + 80002884: 00050793 mv a5,a0 + 80002888: 02078a63 beqz a5,800028bc + 8000288c: fd843783 ld a5,-40(s0) + 80002890: 06c7a783 lw a5,108(a5) + 80002894: fff7c793 not a5,a5 + 80002898: 0007871b sext.w a4,a5 + 8000289c: 0001f797 auipc a5,0x1f + 800028a0: 74c78793 addi a5,a5,1868 # 80021fe8 + 800028a4: 0007a783 lw a5,0(a5) + 800028a8: 00f777b3 and a5,a4,a5 + 800028ac: 0007871b sext.w a4,a5 + 800028b0: 0001f797 auipc a5,0x1f + 800028b4: 73878793 addi a5,a5,1848 # 80021fe8 + 800028b8: 00e7a023 sw a4,0(a5) + 800028bc: 00048513 mv a0,s1 + 800028c0: 8bdfd0ef jal ra,8000017c + 800028c4: 00000013 nop + 800028c8: 02813083 ld ra,40(sp) + 800028cc: 02013403 ld s0,32(sp) + 800028d0: 01813483 ld s1,24(sp) + 800028d4: 03010113 addi sp,sp,48 + 800028d8: 00008067 ret + +00000000800028dc : + 800028dc: ff010113 addi sp,sp,-16 + 800028e0: 00113423 sd ra,8(sp) + 800028e4: 00813023 sd s0,0(sp) + 800028e8: 01010413 addi s0,sp,16 + 800028ec: 889fd0ef jal ra,80000174 + 800028f0: 00050093 mv ra,a0 + 800028f4: 0001f797 auipc a5,0x1f + 800028f8: 6f878793 addi a5,a5,1784 # 80021fec + 800028fc: 00079783 lh a5,0(a5) + 80002900: 03079793 slli a5,a5,0x30 + 80002904: 0307d793 srli a5,a5,0x30 + 80002908: 0017879b addiw a5,a5,1 + 8000290c: 03079793 slli a5,a5,0x30 + 80002910: 0307d793 srli a5,a5,0x30 + 80002914: 0107971b slliw a4,a5,0x10 + 80002918: 4107571b sraiw a4,a4,0x10 + 8000291c: 0001f797 auipc a5,0x1f + 80002920: 6d078793 addi a5,a5,1744 # 80021fec + 80002924: 00e79023 sh a4,0(a5) + 80002928: 00008513 mv a0,ra + 8000292c: 851fd0ef jal ra,8000017c + 80002930: 00000013 nop + 80002934: 00813083 ld ra,8(sp) + 80002938: 00013403 ld s0,0(sp) + 8000293c: 01010113 addi sp,sp,16 + 80002940: 00008067 ret + +0000000080002944 : + 80002944: ff010113 addi sp,sp,-16 + 80002948: 00113423 sd ra,8(sp) + 8000294c: 00813023 sd s0,0(sp) + 80002950: 01010413 addi s0,sp,16 + 80002954: 821fd0ef jal ra,80000174 + 80002958: 00050093 mv ra,a0 + 8000295c: 0001f797 auipc a5,0x1f + 80002960: 69078793 addi a5,a5,1680 # 80021fec + 80002964: 00079783 lh a5,0(a5) + 80002968: 03079793 slli a5,a5,0x30 + 8000296c: 0307d793 srli a5,a5,0x30 + 80002970: fff7879b addiw a5,a5,-1 + 80002974: 03079793 slli a5,a5,0x30 + 80002978: 0307d793 srli a5,a5,0x30 + 8000297c: 0107971b slliw a4,a5,0x10 + 80002980: 4107571b sraiw a4,a4,0x10 + 80002984: 0001f797 auipc a5,0x1f + 80002988: 66878793 addi a5,a5,1640 # 80021fec + 8000298c: 00e79023 sh a4,0(a5) + 80002990: 0001f797 auipc a5,0x1f + 80002994: 65c78793 addi a5,a5,1628 # 80021fec + 80002998: 00079783 lh a5,0(a5) + 8000299c: 0007879b sext.w a5,a5 + 800029a0: 02f04863 bgtz a5,800029d0 + 800029a4: 0001f797 auipc a5,0x1f + 800029a8: 64878793 addi a5,a5,1608 # 80021fec + 800029ac: 00079023 sh zero,0(a5) + 800029b0: 00008513 mv a0,ra + 800029b4: fc8fd0ef jal ra,8000017c + 800029b8: 0001f797 auipc a5,0x1f + 800029bc: 63878793 addi a5,a5,1592 # 80021ff0 + 800029c0: 0007b783 ld a5,0(a5) + 800029c4: 00078a63 beqz a5,800029d8 + 800029c8: a31ff0ef jal ra,800023f8 + 800029cc: 00c0006f j 800029d8 + 800029d0: 00008513 mv a0,ra + 800029d4: fa8fd0ef jal ra,8000017c + 800029d8: 00000013 nop + 800029dc: 00813083 ld ra,8(sp) + 800029e0: 00013403 ld s0,0(sp) + 800029e4: 01010113 addi sp,sp,16 + 800029e8: 00008067 ret + +00000000800029ec : + 800029ec: fd010113 addi sp,sp,-48 + 800029f0: 02113423 sd ra,40(sp) + 800029f4: 02813023 sd s0,32(sp) + 800029f8: 03010413 addi s0,sp,48 + 800029fc: fea43423 sd a0,-24(s0) + 80002a00: feb43023 sd a1,-32(s0) + 80002a04: 00060793 mv a5,a2 + 80002a08: fcf41f23 sh a5,-34(s0) + 80002a0c: fe843783 ld a5,-24(s0) + 80002a10: 00079663 bnez a5,80002a1c + 80002a14: fff00793 li a5,-1 + 80002a18: 0500006f j 80002a68 + 80002a1c: fe043503 ld a0,-32(s0) + 80002a20: 05c000ef jal ra,80002a7c + 80002a24: 00050793 mv a5,a0 + 80002a28: 00078663 beqz a5,80002a34 + 80002a2c: fff00793 li a5,-1 + 80002a30: 0380006f j 80002a68 + 80002a34: fe843783 ld a5,-24(s0) + 80002a38: fe043603 ld a2,-32(s0) + 80002a3c: 00900593 li a1,9 + 80002a40: 00078513 mv a0,a5 + 80002a44: 918ff0ef jal ra,80001b5c + 80002a48: fe843783 ld a5,-24(s0) + 80002a4c: fde45703 lhu a4,-34(s0) + 80002a50: 02e79623 sh a4,44(a5) + 80002a54: fe843783 ld a5,-24(s0) + 80002a58: 02078823 sb zero,48(a5) + 80002a5c: fe843783 ld a5,-24(s0) + 80002a60: 02079723 sh zero,46(a5) + 80002a64: 00000793 li a5,0 + 80002a68: 00078513 mv a0,a5 + 80002a6c: 02813083 ld ra,40(sp) + 80002a70: 02013403 ld s0,32(sp) + 80002a74: 03010113 addi sp,sp,48 + 80002a78: 00008067 ret + +0000000080002a7c : + 80002a7c: fe010113 addi sp,sp,-32 + 80002a80: 00113c23 sd ra,24(sp) + 80002a84: 00813823 sd s0,16(sp) + 80002a88: 02010413 addi s0,sp,32 + 80002a8c: fea43423 sd a0,-24(s0) + 80002a90: 00900593 li a1,9 + 80002a94: fe843503 ld a0,-24(s0) + 80002a98: db4ff0ef jal ra,8000204c + 80002a9c: 00050793 mv a5,a0 + 80002aa0: 00078513 mv a0,a5 + 80002aa4: 01813083 ld ra,24(sp) + 80002aa8: 01013403 ld s0,16(sp) + 80002aac: 02010113 addi sp,sp,32 + 80002ab0: 00008067 ret + +0000000080002ab4 : + 80002ab4: fd010113 addi sp,sp,-48 + 80002ab8: 02113423 sd ra,40(sp) + 80002abc: 02813023 sd s0,32(sp) + 80002ac0: 03010413 addi s0,sp,48 + 80002ac4: fca43c23 sd a0,-40(s0) + 80002ac8: 00058793 mv a5,a1 + 80002acc: fcf41b23 sh a5,-42(s0) + 80002ad0: fe043423 sd zero,-24(s0) + 80002ad4: fd843783 ld a5,-40(s0) + 80002ad8: 00079e63 bnez a5,80002af4 + 80002adc: 0c900613 li a2,201 + 80002ae0: 00016597 auipc a1,0x16 + 80002ae4: 9c058593 addi a1,a1,-1600 # 800184a0 <__FUNCTION__.2568> + 80002ae8: 00013517 auipc a0,0x13 + 80002aec: 13850513 addi a0,a0,312 # 80015c20 + 80002af0: 18d050ef jal ra,8000847c + 80002af4: fd843783 ld a5,-40(s0) + 80002af8: 00078513 mv a0,a5 + 80002afc: cf8ff0ef jal ra,80001ff4 + 80002b00: 00050793 mv a5,a0 + 80002b04: 00078713 mv a4,a5 + 80002b08: 00900793 li a5,9 + 80002b0c: 00f70e63 beq a4,a5,80002b28 + 80002b10: 0ca00613 li a2,202 + 80002b14: 00016597 auipc a1,0x16 + 80002b18: 98c58593 addi a1,a1,-1652 # 800184a0 <__FUNCTION__.2568> + 80002b1c: 00013517 auipc a0,0x13 + 80002b20: 11450513 addi a0,a0,276 # 80015c30 + 80002b24: 159050ef jal ra,8000847c + 80002b28: fd843783 ld a5,-40(s0) + 80002b2c: 02c7d783 lhu a5,44(a5) + 80002b30: 0007879b sext.w a5,a5 + 80002b34: 0107f793 andi a5,a5,16 + 80002b38: 0007879b sext.w a5,a5 + 80002b3c: 06079463 bnez a5,80002ba4 + 80002b40: fd843783 ld a5,-40(s0) + 80002b44: 0487b783 ld a5,72(a5) + 80002b48: 04078063 beqz a5,80002b88 + 80002b4c: fd843783 ld a5,-40(s0) + 80002b50: 0487b783 ld a5,72(a5) + 80002b54: fd843503 ld a0,-40(s0) + 80002b58: 000780e7 jalr a5 + 80002b5c: fea43423 sd a0,-24(s0) + 80002b60: fe843783 ld a5,-24(s0) + 80002b64: 02078263 beqz a5,80002b88 + 80002b68: fd843783 ld a5,-40(s0) + 80002b6c: fe843603 ld a2,-24(s0) + 80002b70: 00078593 mv a1,a5 + 80002b74: 00013517 auipc a0,0x13 + 80002b78: 15c50513 addi a0,a0,348 # 80015cd0 + 80002b7c: 6a0050ef jal ra,8000821c + 80002b80: fe843783 ld a5,-24(s0) + 80002b84: 1140006f j 80002c98 + 80002b88: fd843783 ld a5,-40(s0) + 80002b8c: 02c7d783 lhu a5,44(a5) + 80002b90: 0107e793 ori a5,a5,16 + 80002b94: 03079713 slli a4,a5,0x30 + 80002b98: 03075713 srli a4,a4,0x30 + 80002b9c: fd843783 ld a5,-40(s0) + 80002ba0: 02e79623 sh a4,44(a5) + 80002ba4: fd843783 ld a5,-40(s0) + 80002ba8: 02c7d783 lhu a5,44(a5) + 80002bac: 0007879b sext.w a5,a5 + 80002bb0: 0087f793 andi a5,a5,8 + 80002bb4: 0007879b sext.w a5,a5 + 80002bb8: 02078263 beqz a5,80002bdc + 80002bbc: fd843783 ld a5,-40(s0) + 80002bc0: 02e7d783 lhu a5,46(a5) + 80002bc4: 0007879b sext.w a5,a5 + 80002bc8: 0087f793 andi a5,a5,8 + 80002bcc: 0007879b sext.w a5,a5 + 80002bd0: 00078663 beqz a5,80002bdc + 80002bd4: ff900793 li a5,-7 + 80002bd8: 0c00006f j 80002c98 + 80002bdc: fd843783 ld a5,-40(s0) + 80002be0: 0507b783 ld a5,80(a5) + 80002be4: 02078263 beqz a5,80002c08 + 80002be8: fd843783 ld a5,-40(s0) + 80002bec: 0507b703 ld a4,80(a5) + 80002bf0: fd645783 lhu a5,-42(s0) + 80002bf4: 00078593 mv a1,a5 + 80002bf8: fd843503 ld a0,-40(s0) + 80002bfc: 000700e7 jalr a4 + 80002c00: fea43423 sd a0,-24(s0) + 80002c04: 0240006f j 80002c28 + 80002c08: fd645703 lhu a4,-42(s0) + 80002c0c: 000017b7 lui a5,0x1 + 80002c10: f0f78793 addi a5,a5,-241 # f0f <__STACKSIZE__-0x30f1> + 80002c14: 00f777b3 and a5,a4,a5 + 80002c18: 03079713 slli a4,a5,0x30 + 80002c1c: 03075713 srli a4,a4,0x30 + 80002c20: fd843783 ld a5,-40(s0) + 80002c24: 02e79723 sh a4,46(a5) + 80002c28: fe843783 ld a5,-24(s0) + 80002c2c: 00078863 beqz a5,80002c3c + 80002c30: fe843703 ld a4,-24(s0) + 80002c34: ffa00793 li a5,-6 + 80002c38: 04f71e63 bne a4,a5,80002c94 + 80002c3c: fd843783 ld a5,-40(s0) + 80002c40: 02e7d783 lhu a5,46(a5) + 80002c44: 0087e793 ori a5,a5,8 + 80002c48: 03079713 slli a4,a5,0x30 + 80002c4c: 03075713 srli a4,a4,0x30 + 80002c50: fd843783 ld a5,-40(s0) + 80002c54: 02e79723 sh a4,46(a5) + 80002c58: fd843783 ld a5,-40(s0) + 80002c5c: 0307c783 lbu a5,48(a5) + 80002c60: 0017879b addiw a5,a5,1 + 80002c64: 0ff7f713 andi a4,a5,255 + 80002c68: fd843783 ld a5,-40(s0) + 80002c6c: 02e78823 sb a4,48(a5) + 80002c70: fd843783 ld a5,-40(s0) + 80002c74: 0307c783 lbu a5,48(a5) + 80002c78: 00079e63 bnez a5,80002c94 + 80002c7c: 0f800613 li a2,248 + 80002c80: 00016597 auipc a1,0x16 + 80002c84: 82058593 addi a1,a1,-2016 # 800184a0 <__FUNCTION__.2568> + 80002c88: 00013517 auipc a0,0x13 + 80002c8c: 08050513 addi a0,a0,128 # 80015d08 + 80002c90: 7ec050ef jal ra,8000847c + 80002c94: fe843783 ld a5,-24(s0) + 80002c98: 00078513 mv a0,a5 + 80002c9c: 02813083 ld ra,40(sp) + 80002ca0: 02013403 ld s0,32(sp) + 80002ca4: 03010113 addi sp,sp,48 + 80002ca8: 00008067 ret + +0000000080002cac : + 80002cac: fd010113 addi sp,sp,-48 + 80002cb0: 02113423 sd ra,40(sp) + 80002cb4: 02813023 sd s0,32(sp) + 80002cb8: 03010413 addi s0,sp,48 + 80002cbc: fca43c23 sd a0,-40(s0) + 80002cc0: fe043423 sd zero,-24(s0) + 80002cc4: fd843783 ld a5,-40(s0) + 80002cc8: 00079e63 bnez a5,80002ce4 + 80002ccc: 10a00613 li a2,266 + 80002cd0: 00015597 auipc a1,0x15 + 80002cd4: 7e058593 addi a1,a1,2016 # 800184b0 <__FUNCTION__.2573> + 80002cd8: 00013517 auipc a0,0x13 + 80002cdc: f4850513 addi a0,a0,-184 # 80015c20 + 80002ce0: 79c050ef jal ra,8000847c + 80002ce4: fd843783 ld a5,-40(s0) + 80002ce8: 00078513 mv a0,a5 + 80002cec: b08ff0ef jal ra,80001ff4 + 80002cf0: 00050793 mv a5,a0 + 80002cf4: 00078713 mv a4,a5 + 80002cf8: 00900793 li a5,9 + 80002cfc: 00f70e63 beq a4,a5,80002d18 + 80002d00: 10b00613 li a2,267 + 80002d04: 00015597 auipc a1,0x15 + 80002d08: 7ac58593 addi a1,a1,1964 # 800184b0 <__FUNCTION__.2573> + 80002d0c: 00013517 auipc a0,0x13 + 80002d10: f2450513 addi a0,a0,-220 # 80015c30 + 80002d14: 768050ef jal ra,8000847c + 80002d18: fd843783 ld a5,-40(s0) + 80002d1c: 0307c783 lbu a5,48(a5) + 80002d20: 00079663 bnez a5,80002d2c + 80002d24: fff00793 li a5,-1 + 80002d28: 0700006f j 80002d98 + 80002d2c: fd843783 ld a5,-40(s0) + 80002d30: 0307c783 lbu a5,48(a5) + 80002d34: fff7879b addiw a5,a5,-1 + 80002d38: 0ff7f713 andi a4,a5,255 + 80002d3c: fd843783 ld a5,-40(s0) + 80002d40: 02e78823 sb a4,48(a5) + 80002d44: fd843783 ld a5,-40(s0) + 80002d48: 0307c783 lbu a5,48(a5) + 80002d4c: 00078663 beqz a5,80002d58 + 80002d50: 00000793 li a5,0 + 80002d54: 0440006f j 80002d98 + 80002d58: fd843783 ld a5,-40(s0) + 80002d5c: 0587b783 ld a5,88(a5) + 80002d60: 00078c63 beqz a5,80002d78 + 80002d64: fd843783 ld a5,-40(s0) + 80002d68: 0587b783 ld a5,88(a5) + 80002d6c: fd843503 ld a0,-40(s0) + 80002d70: 000780e7 jalr a5 + 80002d74: fea43423 sd a0,-24(s0) + 80002d78: fe843783 ld a5,-24(s0) + 80002d7c: 00078863 beqz a5,80002d8c + 80002d80: fe843703 ld a4,-24(s0) + 80002d84: ffa00793 li a5,-6 + 80002d88: 00f71663 bne a4,a5,80002d94 + 80002d8c: fd843783 ld a5,-40(s0) + 80002d90: 02079723 sh zero,46(a5) + 80002d94: fe843783 ld a5,-24(s0) + 80002d98: 00078513 mv a0,a5 + 80002d9c: 02813083 ld ra,40(sp) + 80002da0: 02013403 ld s0,32(sp) + 80002da4: 03010113 addi sp,sp,48 + 80002da8: 00008067 ret + +0000000080002dac : + 80002dac: fd010113 addi sp,sp,-48 + 80002db0: 02113423 sd ra,40(sp) + 80002db4: 02813023 sd s0,32(sp) + 80002db8: 03010413 addi s0,sp,48 + 80002dbc: fea43423 sd a0,-24(s0) + 80002dc0: feb43023 sd a1,-32(s0) + 80002dc4: fcc43c23 sd a2,-40(s0) + 80002dc8: fcd43823 sd a3,-48(s0) + 80002dcc: fe843783 ld a5,-24(s0) + 80002dd0: 00079e63 bnez a5,80002dec + 80002dd4: 13400613 li a2,308 + 80002dd8: 00015597 auipc a1,0x15 + 80002ddc: 6e858593 addi a1,a1,1768 # 800184c0 <__FUNCTION__.2580> + 80002de0: 00013517 auipc a0,0x13 + 80002de4: e4050513 addi a0,a0,-448 # 80015c20 + 80002de8: 694050ef jal ra,8000847c + 80002dec: fe843783 ld a5,-24(s0) + 80002df0: 00078513 mv a0,a5 + 80002df4: a00ff0ef jal ra,80001ff4 + 80002df8: 00050793 mv a5,a0 + 80002dfc: 00078713 mv a4,a5 + 80002e00: 00900793 li a5,9 + 80002e04: 00f70e63 beq a4,a5,80002e20 + 80002e08: 13500613 li a2,309 + 80002e0c: 00015597 auipc a1,0x15 + 80002e10: 6b458593 addi a1,a1,1716 # 800184c0 <__FUNCTION__.2580> + 80002e14: 00013517 auipc a0,0x13 + 80002e18: e1c50513 addi a0,a0,-484 # 80015c30 + 80002e1c: 660050ef jal ra,8000847c + 80002e20: fe843783 ld a5,-24(s0) + 80002e24: 0307c783 lbu a5,48(a5) + 80002e28: 00079a63 bnez a5,80002e3c + 80002e2c: fff00513 li a0,-1 + 80002e30: 419030ef jal ra,80006a48 + 80002e34: 00000793 li a5,0 + 80002e38: 0400006f j 80002e78 + 80002e3c: fe843783 ld a5,-24(s0) + 80002e40: 0607b783 ld a5,96(a5) + 80002e44: 02078463 beqz a5,80002e6c + 80002e48: fe843783 ld a5,-24(s0) + 80002e4c: 0607b783 ld a5,96(a5) + 80002e50: fd043683 ld a3,-48(s0) + 80002e54: fd843603 ld a2,-40(s0) + 80002e58: fe043583 ld a1,-32(s0) + 80002e5c: fe843503 ld a0,-24(s0) + 80002e60: 000780e7 jalr a5 + 80002e64: 00050793 mv a5,a0 + 80002e68: 0100006f j 80002e78 + 80002e6c: ffa00513 li a0,-6 + 80002e70: 3d9030ef jal ra,80006a48 + 80002e74: 00000793 li a5,0 + 80002e78: 00078513 mv a0,a5 + 80002e7c: 02813083 ld ra,40(sp) + 80002e80: 02013403 ld s0,32(sp) + 80002e84: 03010113 addi sp,sp,48 + 80002e88: 00008067 ret + +0000000080002e8c : + 80002e8c: fd010113 addi sp,sp,-48 + 80002e90: 02113423 sd ra,40(sp) + 80002e94: 02813023 sd s0,32(sp) + 80002e98: 03010413 addi s0,sp,48 + 80002e9c: fea43423 sd a0,-24(s0) + 80002ea0: feb43023 sd a1,-32(s0) + 80002ea4: fcc43c23 sd a2,-40(s0) + 80002ea8: fcd43823 sd a3,-48(s0) + 80002eac: fe843783 ld a5,-24(s0) + 80002eb0: 00079e63 bnez a5,80002ecc + 80002eb4: 15b00613 li a2,347 + 80002eb8: 00015597 auipc a1,0x15 + 80002ebc: 61858593 addi a1,a1,1560 # 800184d0 <__FUNCTION__.2587> + 80002ec0: 00013517 auipc a0,0x13 + 80002ec4: d6050513 addi a0,a0,-672 # 80015c20 + 80002ec8: 5b4050ef jal ra,8000847c + 80002ecc: fe843783 ld a5,-24(s0) + 80002ed0: 00078513 mv a0,a5 + 80002ed4: 920ff0ef jal ra,80001ff4 + 80002ed8: 00050793 mv a5,a0 + 80002edc: 00078713 mv a4,a5 + 80002ee0: 00900793 li a5,9 + 80002ee4: 00f70e63 beq a4,a5,80002f00 + 80002ee8: 15c00613 li a2,348 + 80002eec: 00015597 auipc a1,0x15 + 80002ef0: 5e458593 addi a1,a1,1508 # 800184d0 <__FUNCTION__.2587> + 80002ef4: 00013517 auipc a0,0x13 + 80002ef8: d3c50513 addi a0,a0,-708 # 80015c30 + 80002efc: 580050ef jal ra,8000847c + 80002f00: fe843783 ld a5,-24(s0) + 80002f04: 0307c783 lbu a5,48(a5) + 80002f08: 00079a63 bnez a5,80002f1c + 80002f0c: fff00513 li a0,-1 + 80002f10: 339030ef jal ra,80006a48 + 80002f14: 00000793 li a5,0 + 80002f18: 0400006f j 80002f58 + 80002f1c: fe843783 ld a5,-24(s0) + 80002f20: 0687b783 ld a5,104(a5) + 80002f24: 02078463 beqz a5,80002f4c + 80002f28: fe843783 ld a5,-24(s0) + 80002f2c: 0687b783 ld a5,104(a5) + 80002f30: fd043683 ld a3,-48(s0) + 80002f34: fd843603 ld a2,-40(s0) + 80002f38: fe043583 ld a1,-32(s0) + 80002f3c: fe843503 ld a0,-24(s0) + 80002f40: 000780e7 jalr a5 + 80002f44: 00050793 mv a5,a0 + 80002f48: 0100006f j 80002f58 + 80002f4c: ffa00513 li a0,-6 + 80002f50: 2f9030ef jal ra,80006a48 + 80002f54: 00000793 li a5,0 + 80002f58: 00078513 mv a0,a5 + 80002f5c: 02813083 ld ra,40(sp) + 80002f60: 02013403 ld s0,32(sp) + 80002f64: 03010113 addi sp,sp,48 + 80002f68: 00008067 ret + +0000000080002f6c : + 80002f6c: fd010113 addi sp,sp,-48 + 80002f70: 02113423 sd ra,40(sp) + 80002f74: 02813023 sd s0,32(sp) + 80002f78: 03010413 addi s0,sp,48 + 80002f7c: fea43423 sd a0,-24(s0) + 80002f80: 00058793 mv a5,a1 + 80002f84: fcc43c23 sd a2,-40(s0) + 80002f88: fef42223 sw a5,-28(s0) + 80002f8c: fe843783 ld a5,-24(s0) + 80002f90: 00079e63 bnez a5,80002fac + 80002f94: 17c00613 li a2,380 + 80002f98: 00015597 auipc a1,0x15 + 80002f9c: 54858593 addi a1,a1,1352 # 800184e0 <__FUNCTION__.2593> + 80002fa0: 00013517 auipc a0,0x13 + 80002fa4: c8050513 addi a0,a0,-896 # 80015c20 + 80002fa8: 4d4050ef jal ra,8000847c + 80002fac: fe843783 ld a5,-24(s0) + 80002fb0: 00078513 mv a0,a5 + 80002fb4: 840ff0ef jal ra,80001ff4 + 80002fb8: 00050793 mv a5,a0 + 80002fbc: 00078713 mv a4,a5 + 80002fc0: 00900793 li a5,9 + 80002fc4: 00f70e63 beq a4,a5,80002fe0 + 80002fc8: 17d00613 li a2,381 + 80002fcc: 00015597 auipc a1,0x15 + 80002fd0: 51458593 addi a1,a1,1300 # 800184e0 <__FUNCTION__.2593> + 80002fd4: 00013517 auipc a0,0x13 + 80002fd8: c5c50513 addi a0,a0,-932 # 80015c30 + 80002fdc: 4a0050ef jal ra,8000847c + 80002fe0: fe843783 ld a5,-24(s0) + 80002fe4: 0707b783 ld a5,112(a5) + 80002fe8: 02078463 beqz a5,80003010 + 80002fec: fe843783 ld a5,-24(s0) + 80002ff0: 0707b703 ld a4,112(a5) + 80002ff4: fe442783 lw a5,-28(s0) + 80002ff8: fd843603 ld a2,-40(s0) + 80002ffc: 00078593 mv a1,a5 + 80003000: fe843503 ld a0,-24(s0) + 80003004: 000700e7 jalr a4 + 80003008: 00050793 mv a5,a0 + 8000300c: 0080006f j 80003014 + 80003010: ffa00793 li a5,-6 + 80003014: 00078513 mv a0,a5 + 80003018: 02813083 ld ra,40(sp) + 8000301c: 02013403 ld s0,32(sp) + 80003020: 03010113 addi sp,sp,48 + 80003024: 00008067 ret + +0000000080003028 : + 80003028: fe010113 addi sp,sp,-32 + 8000302c: 00113c23 sd ra,24(sp) + 80003030: 00813823 sd s0,16(sp) + 80003034: 02010413 addi s0,sp,32 + 80003038: fea43423 sd a0,-24(s0) + 8000303c: feb43023 sd a1,-32(s0) + 80003040: fe843783 ld a5,-24(s0) + 80003044: 00079e63 bnez a5,80003060 + 80003048: 19600613 li a2,406 + 8000304c: 00015597 auipc a1,0x15 + 80003050: 4ac58593 addi a1,a1,1196 # 800184f8 <__FUNCTION__.2600> + 80003054: 00013517 auipc a0,0x13 + 80003058: bcc50513 addi a0,a0,-1076 # 80015c20 + 8000305c: 420050ef jal ra,8000847c + 80003060: fe843783 ld a5,-24(s0) + 80003064: 00078513 mv a0,a5 + 80003068: f8dfe0ef jal ra,80001ff4 + 8000306c: 00050793 mv a5,a0 + 80003070: 00078713 mv a4,a5 + 80003074: 00900793 li a5,9 + 80003078: 00f70e63 beq a4,a5,80003094 + 8000307c: 19700613 li a2,407 + 80003080: 00015597 auipc a1,0x15 + 80003084: 47858593 addi a1,a1,1144 # 800184f8 <__FUNCTION__.2600> + 80003088: 00013517 auipc a0,0x13 + 8000308c: ba850513 addi a0,a0,-1112 # 80015c30 + 80003090: 3ec050ef jal ra,8000847c + 80003094: fe843783 ld a5,-24(s0) + 80003098: fe043703 ld a4,-32(s0) + 8000309c: 02e7bc23 sd a4,56(a5) + 800030a0: 00000793 li a5,0 + 800030a4: 00078513 mv a0,a5 + 800030a8: 01813083 ld ra,24(sp) + 800030ac: 01013403 ld s0,16(sp) + 800030b0: 02010113 addi sp,sp,32 + 800030b4: 00008067 ret + +00000000800030b8 : + 800030b8: fe010113 addi sp,sp,-32 + 800030bc: 00813c23 sd s0,24(sp) + 800030c0: 02010413 addi s0,sp,32 + 800030c4: fea43423 sd a0,-24(s0) + 800030c8: fe843783 ld a5,-24(s0) + 800030cc: fe843703 ld a4,-24(s0) + 800030d0: 00e7b423 sd a4,8(a5) + 800030d4: fe843783 ld a5,-24(s0) + 800030d8: 0087b703 ld a4,8(a5) + 800030dc: fe843783 ld a5,-24(s0) + 800030e0: 00e7b023 sd a4,0(a5) + 800030e4: 00000013 nop + 800030e8: 01813403 ld s0,24(sp) + 800030ec: 02010113 addi sp,sp,32 + 800030f0: 00008067 ret + +00000000800030f4 : + 800030f4: fe010113 addi sp,sp,-32 + 800030f8: 00813c23 sd s0,24(sp) + 800030fc: 02010413 addi s0,sp,32 + 80003100: fea43423 sd a0,-24(s0) + 80003104: feb43023 sd a1,-32(s0) + 80003108: fe843783 ld a5,-24(s0) + 8000310c: 0007b783 ld a5,0(a5) + 80003110: fe043703 ld a4,-32(s0) + 80003114: 00e7b423 sd a4,8(a5) + 80003118: fe843783 ld a5,-24(s0) + 8000311c: 0007b703 ld a4,0(a5) + 80003120: fe043783 ld a5,-32(s0) + 80003124: 00e7b023 sd a4,0(a5) + 80003128: fe843783 ld a5,-24(s0) + 8000312c: fe043703 ld a4,-32(s0) + 80003130: 00e7b023 sd a4,0(a5) + 80003134: fe043783 ld a5,-32(s0) + 80003138: fe843703 ld a4,-24(s0) + 8000313c: 00e7b423 sd a4,8(a5) + 80003140: 00000013 nop + 80003144: 01813403 ld s0,24(sp) + 80003148: 02010113 addi sp,sp,32 + 8000314c: 00008067 ret + +0000000080003150 : + 80003150: fe010113 addi sp,sp,-32 + 80003154: 00813c23 sd s0,24(sp) + 80003158: 02010413 addi s0,sp,32 + 8000315c: fea43423 sd a0,-24(s0) + 80003160: fe843783 ld a5,-24(s0) + 80003164: 0007b783 ld a5,0(a5) + 80003168: fe843703 ld a4,-24(s0) + 8000316c: 00873703 ld a4,8(a4) + 80003170: 00e7b423 sd a4,8(a5) + 80003174: fe843783 ld a5,-24(s0) + 80003178: 0087b783 ld a5,8(a5) + 8000317c: fe843703 ld a4,-24(s0) + 80003180: 00073703 ld a4,0(a4) + 80003184: 00e7b023 sd a4,0(a5) + 80003188: fe843783 ld a5,-24(s0) + 8000318c: fe843703 ld a4,-24(s0) + 80003190: 00e7b423 sd a4,8(a5) + 80003194: fe843783 ld a5,-24(s0) + 80003198: 0087b703 ld a4,8(a5) + 8000319c: fe843783 ld a5,-24(s0) + 800031a0: 00e7b023 sd a4,0(a5) + 800031a4: 00000013 nop + 800031a8: 01813403 ld s0,24(sp) + 800031ac: 02010113 addi sp,sp,32 + 800031b0: 00008067 ret + +00000000800031b4 : + 800031b4: fe010113 addi sp,sp,-32 + 800031b8: 00813c23 sd s0,24(sp) + 800031bc: 02010413 addi s0,sp,32 + 800031c0: fea43423 sd a0,-24(s0) + 800031c4: fe843783 ld a5,-24(s0) + 800031c8: 0007b783 ld a5,0(a5) + 800031cc: fe843703 ld a4,-24(s0) + 800031d0: 40f707b3 sub a5,a4,a5 + 800031d4: 0017b793 seqz a5,a5 + 800031d8: 0ff7f793 andi a5,a5,255 + 800031dc: 0007879b sext.w a5,a5 + 800031e0: 00078513 mv a0,a5 + 800031e4: 01813403 ld s0,24(sp) + 800031e8: 02010113 addi sp,sp,32 + 800031ec: 00008067 ret + +00000000800031f0 <_rt_timer_init>: + 800031f0: fc010113 addi sp,sp,-64 + 800031f4: 02113c23 sd ra,56(sp) + 800031f8: 02813823 sd s0,48(sp) + 800031fc: 04010413 addi s0,sp,64 + 80003200: fca43c23 sd a0,-40(s0) + 80003204: fcb43823 sd a1,-48(s0) + 80003208: fcc43423 sd a2,-56(s0) + 8000320c: 00068793 mv a5,a3 + 80003210: fcf42223 sw a5,-60(s0) + 80003214: 00070793 mv a5,a4 + 80003218: fcf401a3 sb a5,-61(s0) + 8000321c: fd843783 ld a5,-40(s0) + 80003220: fc344703 lbu a4,-61(s0) + 80003224: 00e78aa3 sb a4,21(a5) + 80003228: fd843783 ld a5,-40(s0) + 8000322c: 0157c783 lbu a5,21(a5) + 80003230: ffe7f793 andi a5,a5,-2 + 80003234: 0ff7f713 andi a4,a5,255 + 80003238: fd843783 ld a5,-40(s0) + 8000323c: 00e78aa3 sb a4,21(a5) + 80003240: fd843783 ld a5,-40(s0) + 80003244: fd043703 ld a4,-48(s0) + 80003248: 02e7bc23 sd a4,56(a5) + 8000324c: fd843783 ld a5,-40(s0) + 80003250: fc843703 ld a4,-56(s0) + 80003254: 04e7b023 sd a4,64(a5) + 80003258: fd843783 ld a5,-40(s0) + 8000325c: 0407a623 sw zero,76(a5) + 80003260: fd843783 ld a5,-40(s0) + 80003264: fc442703 lw a4,-60(s0) + 80003268: 04e7a423 sw a4,72(a5) + 8000326c: fe042623 sw zero,-20(s0) + 80003270: 0300006f j 800032a0 <_rt_timer_init+0xb0> + 80003274: fec42783 lw a5,-20(s0) + 80003278: 00278793 addi a5,a5,2 + 8000327c: 00479793 slli a5,a5,0x4 + 80003280: fd843703 ld a4,-40(s0) + 80003284: 00f707b3 add a5,a4,a5 + 80003288: 00878793 addi a5,a5,8 + 8000328c: 00078513 mv a0,a5 + 80003290: e29ff0ef jal ra,800030b8 + 80003294: fec42783 lw a5,-20(s0) + 80003298: 0017879b addiw a5,a5,1 + 8000329c: fef42623 sw a5,-20(s0) + 800032a0: fec42783 lw a5,-20(s0) + 800032a4: 0007879b sext.w a5,a5 + 800032a8: fcf056e3 blez a5,80003274 <_rt_timer_init+0x84> + 800032ac: 00000013 nop + 800032b0: 00000013 nop + 800032b4: 03813083 ld ra,56(sp) + 800032b8: 03013403 ld s0,48(sp) + 800032bc: 04010113 addi sp,sp,64 + 800032c0: 00008067 ret + +00000000800032c4 : + 800032c4: fc010113 addi sp,sp,-64 + 800032c8: 02113c23 sd ra,56(sp) + 800032cc: 02813823 sd s0,48(sp) + 800032d0: 02913423 sd s1,40(sp) + 800032d4: 04010413 addi s0,sp,64 + 800032d8: fca43423 sd a0,-56(s0) + 800032dc: fff00793 li a5,-1 + 800032e0: fcf42e23 sw a5,-36(s0) + 800032e4: e91fc0ef jal ra,80000174 + 800032e8: 00050493 mv s1,a0 + 800032ec: fc843503 ld a0,-56(s0) + 800032f0: ec5ff0ef jal ra,800031b4 + 800032f4: 00050793 mv a5,a0 + 800032f8: 02079063 bnez a5,80003318 + 800032fc: fc843783 ld a5,-56(s0) + 80003300: 0007b783 ld a5,0(a5) + 80003304: fd878793 addi a5,a5,-40 + 80003308: fcf43823 sd a5,-48(s0) + 8000330c: fd043783 ld a5,-48(s0) + 80003310: 04c7a783 lw a5,76(a5) + 80003314: fcf42e23 sw a5,-36(s0) + 80003318: 00048513 mv a0,s1 + 8000331c: e61fc0ef jal ra,8000017c + 80003320: fdc42783 lw a5,-36(s0) + 80003324: 00078513 mv a0,a5 + 80003328: 03813083 ld ra,56(sp) + 8000332c: 03013403 ld s0,48(sp) + 80003330: 02813483 ld s1,40(sp) + 80003334: 04010113 addi sp,sp,64 + 80003338: 00008067 ret + +000000008000333c <_rt_timer_remove>: + 8000333c: fd010113 addi sp,sp,-48 + 80003340: 02113423 sd ra,40(sp) + 80003344: 02813023 sd s0,32(sp) + 80003348: 03010413 addi s0,sp,48 + 8000334c: fca43c23 sd a0,-40(s0) + 80003350: fe042623 sw zero,-20(s0) + 80003354: 0300006f j 80003384 <_rt_timer_remove+0x48> + 80003358: fec42783 lw a5,-20(s0) + 8000335c: 00278793 addi a5,a5,2 + 80003360: 00479793 slli a5,a5,0x4 + 80003364: fd843703 ld a4,-40(s0) + 80003368: 00f707b3 add a5,a4,a5 + 8000336c: 00878793 addi a5,a5,8 + 80003370: 00078513 mv a0,a5 + 80003374: dddff0ef jal ra,80003150 + 80003378: fec42783 lw a5,-20(s0) + 8000337c: 0017879b addiw a5,a5,1 + 80003380: fef42623 sw a5,-20(s0) + 80003384: fec42783 lw a5,-20(s0) + 80003388: 0007879b sext.w a5,a5 + 8000338c: fcf056e3 blez a5,80003358 <_rt_timer_remove+0x1c> + 80003390: 00000013 nop + 80003394: 00000013 nop + 80003398: 02813083 ld ra,40(sp) + 8000339c: 02013403 ld s0,32(sp) + 800033a0: 03010113 addi sp,sp,48 + 800033a4: 00008067 ret + +00000000800033a8 : + 800033a8: fc010113 addi sp,sp,-64 + 800033ac: 02113c23 sd ra,56(sp) + 800033b0: 02813823 sd s0,48(sp) + 800033b4: 04010413 addi s0,sp,64 + 800033b8: fea43423 sd a0,-24(s0) + 800033bc: feb43023 sd a1,-32(s0) + 800033c0: fcc43c23 sd a2,-40(s0) + 800033c4: fcd43823 sd a3,-48(s0) + 800033c8: 00070693 mv a3,a4 + 800033cc: 00078713 mv a4,a5 + 800033d0: 00068793 mv a5,a3 + 800033d4: fcf42623 sw a5,-52(s0) + 800033d8: 00070793 mv a5,a4 + 800033dc: fcf405a3 sb a5,-53(s0) + 800033e0: fe843783 ld a5,-24(s0) + 800033e4: 00079e63 bnez a5,80003400 + 800033e8: 0c900613 li a2,201 + 800033ec: 00015597 auipc a1,0x15 + 800033f0: 13c58593 addi a1,a1,316 # 80018528 <__FUNCTION__.2665> + 800033f4: 00013517 auipc a0,0x13 + 800033f8: 92c50513 addi a0,a0,-1748 # 80015d20 + 800033fc: 080050ef jal ra,8000847c + 80003400: fe843783 ld a5,-24(s0) + 80003404: fe043603 ld a2,-32(s0) + 80003408: 00a00593 li a1,10 + 8000340c: 00078513 mv a0,a5 + 80003410: f4cfe0ef jal ra,80001b5c + 80003414: fcb44703 lbu a4,-53(s0) + 80003418: fcc42783 lw a5,-52(s0) + 8000341c: 00078693 mv a3,a5 + 80003420: fd043603 ld a2,-48(s0) + 80003424: fd843583 ld a1,-40(s0) + 80003428: fe843503 ld a0,-24(s0) + 8000342c: dc5ff0ef jal ra,800031f0 <_rt_timer_init> + 80003430: 00000013 nop + 80003434: 03813083 ld ra,56(sp) + 80003438: 03013403 ld s0,48(sp) + 8000343c: 04010113 addi sp,sp,64 + 80003440: 00008067 ret + +0000000080003444 : + 80003444: fd010113 addi sp,sp,-48 + 80003448: 02113423 sd ra,40(sp) + 8000344c: 02813023 sd s0,32(sp) + 80003450: 00913c23 sd s1,24(sp) + 80003454: 03010413 addi s0,sp,48 + 80003458: fca43c23 sd a0,-40(s0) + 8000345c: fd843783 ld a5,-40(s0) + 80003460: 00079e63 bnez a5,8000347c + 80003464: 0de00613 li a2,222 + 80003468: 00015597 auipc a1,0x15 + 8000346c: 0d058593 addi a1,a1,208 # 80018538 <__FUNCTION__.2670> + 80003470: 00013517 auipc a0,0x13 + 80003474: 8b050513 addi a0,a0,-1872 # 80015d20 + 80003478: 004050ef jal ra,8000847c + 8000347c: fd843783 ld a5,-40(s0) + 80003480: 00078513 mv a0,a5 + 80003484: b71fe0ef jal ra,80001ff4 + 80003488: 00050793 mv a5,a0 + 8000348c: 00078713 mv a4,a5 + 80003490: 00a00793 li a5,10 + 80003494: 00f70e63 beq a4,a5,800034b0 + 80003498: 0df00613 li a2,223 + 8000349c: 00015597 auipc a1,0x15 + 800034a0: 09c58593 addi a1,a1,156 # 80018538 <__FUNCTION__.2670> + 800034a4: 00013517 auipc a0,0x13 + 800034a8: 89450513 addi a0,a0,-1900 # 80015d38 + 800034ac: 7d1040ef jal ra,8000847c + 800034b0: fd843783 ld a5,-40(s0) + 800034b4: 00078513 mv a0,a5 + 800034b8: ad5fe0ef jal ra,80001f8c + 800034bc: 00050793 mv a5,a0 + 800034c0: 00079e63 bnez a5,800034dc + 800034c4: 0e000613 li a2,224 + 800034c8: 00015597 auipc a1,0x15 + 800034cc: 07058593 addi a1,a1,112 # 80018538 <__FUNCTION__.2670> + 800034d0: 00013517 auipc a0,0x13 + 800034d4: 8a850513 addi a0,a0,-1880 # 80015d78 + 800034d8: 7a5040ef jal ra,8000847c + 800034dc: c99fc0ef jal ra,80000174 + 800034e0: 00050493 mv s1,a0 + 800034e4: fd843503 ld a0,-40(s0) + 800034e8: e55ff0ef jal ra,8000333c <_rt_timer_remove> + 800034ec: fd843783 ld a5,-40(s0) + 800034f0: 0157c783 lbu a5,21(a5) + 800034f4: ffe7f793 andi a5,a5,-2 + 800034f8: 0ff7f713 andi a4,a5,255 + 800034fc: fd843783 ld a5,-40(s0) + 80003500: 00e78aa3 sb a4,21(a5) + 80003504: 00048513 mv a0,s1 + 80003508: c75fc0ef jal ra,8000017c + 8000350c: fd843783 ld a5,-40(s0) + 80003510: 00078513 mv a0,a5 + 80003514: fa0fe0ef jal ra,80001cb4 + 80003518: 00000793 li a5,0 + 8000351c: 00078513 mv a0,a5 + 80003520: 02813083 ld ra,40(sp) + 80003524: 02013403 ld s0,32(sp) + 80003528: 01813483 ld s1,24(sp) + 8000352c: 03010113 addi sp,sp,48 + 80003530: 00008067 ret + +0000000080003534 : + 80003534: fa010113 addi sp,sp,-96 + 80003538: 04113c23 sd ra,88(sp) + 8000353c: 04813823 sd s0,80(sp) + 80003540: 04913423 sd s1,72(sp) + 80003544: 06010413 addi s0,sp,96 + 80003548: faa43423 sd a0,-88(s0) + 8000354c: fa843783 ld a5,-88(s0) + 80003550: 00079e63 bnez a5,8000356c + 80003554: 14500613 li a2,325 + 80003558: 00015597 auipc a1,0x15 + 8000355c: ff058593 addi a1,a1,-16 # 80018548 <__FUNCTION__.2694> + 80003560: 00012517 auipc a0,0x12 + 80003564: 7c050513 addi a0,a0,1984 # 80015d20 + 80003568: 715040ef jal ra,8000847c + 8000356c: fa843783 ld a5,-88(s0) + 80003570: 00078513 mv a0,a5 + 80003574: a81fe0ef jal ra,80001ff4 + 80003578: 00050793 mv a5,a0 + 8000357c: 00078713 mv a4,a5 + 80003580: 00a00793 li a5,10 + 80003584: 00f70e63 beq a4,a5,800035a0 + 80003588: 14600613 li a2,326 + 8000358c: 00015597 auipc a1,0x15 + 80003590: fbc58593 addi a1,a1,-68 # 80018548 <__FUNCTION__.2694> + 80003594: 00012517 auipc a0,0x12 + 80003598: 7a450513 addi a0,a0,1956 # 80015d38 + 8000359c: 6e1040ef jal ra,8000847c + 800035a0: bd5fc0ef jal ra,80000174 + 800035a4: 00050493 mv s1,a0 + 800035a8: fa843503 ld a0,-88(s0) + 800035ac: d91ff0ef jal ra,8000333c <_rt_timer_remove> + 800035b0: fa843783 ld a5,-88(s0) + 800035b4: 0157c783 lbu a5,21(a5) + 800035b8: ffe7f793 andi a5,a5,-2 + 800035bc: 0ff7f713 andi a4,a5,255 + 800035c0: fa843783 ld a5,-88(s0) + 800035c4: 00e78aa3 sb a4,21(a5) + 800035c8: 0001f797 auipc a5,0x1f + 800035cc: a1078793 addi a5,a5,-1520 # 80021fd8 + 800035d0: 0007b783 ld a5,0(a5) + 800035d4: 00078e63 beqz a5,800035f0 + 800035d8: 0001f797 auipc a5,0x1f + 800035dc: a0078793 addi a5,a5,-1536 # 80021fd8 + 800035e0: 0007b703 ld a4,0(a5) + 800035e4: fa843783 ld a5,-88(s0) + 800035e8: 00078513 mv a0,a5 + 800035ec: 000700e7 jalr a4 + 800035f0: fa843783 ld a5,-88(s0) + 800035f4: 0487a783 lw a5,72(a5) + 800035f8: 00078713 mv a4,a5 + 800035fc: 800007b7 lui a5,0x80000 + 80003600: ffe7c793 xori a5,a5,-2 + 80003604: 00e7fe63 bgeu a5,a4,80003620 + 80003608: 15500613 li a2,341 + 8000360c: 00015597 auipc a1,0x15 + 80003610: f3c58593 addi a1,a1,-196 # 80018548 <__FUNCTION__.2694> + 80003614: 00012517 auipc a0,0x12 + 80003618: 7cc50513 addi a0,a0,1996 # 80015de0 + 8000361c: 661040ef jal ra,8000847c + 80003620: 7fd020ef jal ra,8000661c + 80003624: 00050793 mv a5,a0 + 80003628: 0007871b sext.w a4,a5 + 8000362c: fa843783 ld a5,-88(s0) + 80003630: 0487a783 lw a5,72(a5) # ffffffff80000048 <__bss_end+0xfffffffefffd4dc4> + 80003634: 00f707bb addw a5,a4,a5 + 80003638: 0007871b sext.w a4,a5 + 8000363c: fa843783 ld a5,-88(s0) + 80003640: 04e7a623 sw a4,76(a5) + 80003644: fa843783 ld a5,-88(s0) + 80003648: 0157c783 lbu a5,21(a5) + 8000364c: 0007879b sext.w a5,a5 + 80003650: 0047f793 andi a5,a5,4 + 80003654: 0007879b sext.w a5,a5 + 80003658: 00078a63 beqz a5,8000366c + 8000365c: 0001f797 auipc a5,0x1f + 80003660: d6478793 addi a5,a5,-668 # 800223c0 + 80003664: fcf43823 sd a5,-48(s0) + 80003668: 0100006f j 80003678 + 8000366c: 0001f797 auipc a5,0x1f + 80003670: d4478793 addi a5,a5,-700 # 800223b0 + 80003674: fcf43823 sd a5,-48(s0) + 80003678: fd043783 ld a5,-48(s0) + 8000367c: faf43823 sd a5,-80(s0) + 80003680: fc042e23 sw zero,-36(s0) + 80003684: 1340006f j 800037b8 + 80003688: fdc46783 lwu a5,-36(s0) + 8000368c: 00379793 slli a5,a5,0x3 + 80003690: fe040713 addi a4,s0,-32 + 80003694: 00f707b3 add a5,a4,a5 + 80003698: fd07b783 ld a5,-48(a5) + 8000369c: 0007b783 ld a5,0(a5) + 800036a0: fcf43023 sd a5,-64(s0) + 800036a4: fdc46783 lwu a5,-36(s0) + 800036a8: 00479793 slli a5,a5,0x4 + 800036ac: 02878793 addi a5,a5,40 + 800036b0: 40f007b3 neg a5,a5 + 800036b4: fc043703 ld a4,-64(s0) + 800036b8: 00f707b3 add a5,a4,a5 + 800036bc: faf43c23 sd a5,-72(s0) + 800036c0: fb843783 ld a5,-72(s0) + 800036c4: 04c7a703 lw a4,76(a5) + 800036c8: fa843783 ld a5,-88(s0) + 800036cc: 04c7a783 lw a5,76(a5) + 800036d0: 02f70863 beq a4,a5,80003700 + 800036d4: fb843783 ld a5,-72(s0) + 800036d8: 04c7a703 lw a4,76(a5) + 800036dc: fa843783 ld a5,-88(s0) + 800036e0: 04c7a783 lw a5,76(a5) + 800036e4: 40f707bb subw a5,a4,a5 + 800036e8: 0007879b sext.w a5,a5 + 800036ec: 00078713 mv a4,a5 + 800036f0: 800007b7 lui a5,0x80000 + 800036f4: ffe7c793 xori a5,a5,-2 + 800036f8: 06e7f463 bgeu a5,a4,80003760 + 800036fc: 0080006f j 80003704 + 80003700: 00000013 nop + 80003704: fdc46783 lwu a5,-36(s0) + 80003708: 00379793 slli a5,a5,0x3 + 8000370c: fe040713 addi a4,s0,-32 + 80003710: 00f707b3 add a5,a4,a5 + 80003714: fd07b783 ld a5,-48(a5) # ffffffff7fffffd0 <__bss_end+0xfffffffefffd4d4c> + 80003718: 0007b703 ld a4,0(a5) + 8000371c: fdc46783 lwu a5,-36(s0) + 80003720: 00379793 slli a5,a5,0x3 + 80003724: fe040693 addi a3,s0,-32 + 80003728: 00f687b3 add a5,a3,a5 + 8000372c: fce7b823 sd a4,-48(a5) + 80003730: fdc46783 lwu a5,-36(s0) + 80003734: 00379793 slli a5,a5,0x3 + 80003738: fe040713 addi a4,s0,-32 + 8000373c: 00f707b3 add a5,a4,a5 + 80003740: fd07b703 ld a4,-48(a5) + 80003744: fdc46783 lwu a5,-36(s0) + 80003748: 00479793 slli a5,a5,0x4 + 8000374c: fd043683 ld a3,-48(s0) + 80003750: 00f687b3 add a5,a3,a5 + 80003754: 0087b783 ld a5,8(a5) + 80003758: f2f718e3 bne a4,a5,80003688 + 8000375c: 0080006f j 80003764 + 80003760: 00000013 nop + 80003764: fdc42783 lw a5,-36(s0) + 80003768: 0007879b sext.w a5,a5 + 8000376c: 04078063 beqz a5,800037ac + 80003770: fdc46783 lwu a5,-36(s0) + 80003774: 00379793 slli a5,a5,0x3 + 80003778: fe040713 addi a4,s0,-32 + 8000377c: 00f707b3 add a5,a4,a5 + 80003780: fd07b783 ld a5,-48(a5) + 80003784: fdc42703 lw a4,-36(s0) + 80003788: 0017071b addiw a4,a4,1 + 8000378c: 0007069b sext.w a3,a4 + 80003790: 01078713 addi a4,a5,16 + 80003794: 02069793 slli a5,a3,0x20 + 80003798: 0207d793 srli a5,a5,0x20 + 8000379c: 00379793 slli a5,a5,0x3 + 800037a0: fe040693 addi a3,s0,-32 + 800037a4: 00f687b3 add a5,a3,a5 + 800037a8: fce7b823 sd a4,-48(a5) + 800037ac: fdc42783 lw a5,-36(s0) + 800037b0: 0017879b addiw a5,a5,1 + 800037b4: fcf42e23 sw a5,-36(s0) + 800037b8: fdc42783 lw a5,-36(s0) + 800037bc: 0007879b sext.w a5,a5 + 800037c0: f60788e3 beqz a5,80003730 + 800037c4: 0001f797 auipc a5,0x1f + 800037c8: 85c78793 addi a5,a5,-1956 # 80022020 + 800037cc: 0007a783 lw a5,0(a5) + 800037d0: 0017879b addiw a5,a5,1 + 800037d4: 0007871b sext.w a4,a5 + 800037d8: 0001f797 auipc a5,0x1f + 800037dc: 84878793 addi a5,a5,-1976 # 80022020 + 800037e0: 00e7a023 sw a4,0(a5) + 800037e4: 0001f797 auipc a5,0x1f + 800037e8: 83c78793 addi a5,a5,-1988 # 80022020 + 800037ec: 0007a783 lw a5,0(a5) + 800037f0: fcf42623 sw a5,-52(s0) + 800037f4: fb043703 ld a4,-80(s0) + 800037f8: fa843783 ld a5,-88(s0) + 800037fc: 02878793 addi a5,a5,40 + 80003800: 00078593 mv a1,a5 + 80003804: 00070513 mv a0,a4 + 80003808: 8edff0ef jal ra,800030f4 + 8000380c: 00200793 li a5,2 + 80003810: fcf42e23 sw a5,-36(s0) + 80003814: 08c0006f j 800038a0 + 80003818: fcc42783 lw a5,-52(s0) + 8000381c: 0037f793 andi a5,a5,3 + 80003820: 0007879b sext.w a5,a5 + 80003824: 08079863 bnez a5,800038b4 + 80003828: 00100713 li a4,1 + 8000382c: fdc42783 lw a5,-36(s0) + 80003830: 40f707bb subw a5,a4,a5 + 80003834: 0007879b sext.w a5,a5 + 80003838: 02079793 slli a5,a5,0x20 + 8000383c: 0207d793 srli a5,a5,0x20 + 80003840: 00379793 slli a5,a5,0x3 + 80003844: fe040713 addi a4,s0,-32 + 80003848: 00f707b3 add a5,a4,a5 + 8000384c: fd07b683 ld a3,-48(a5) + 80003850: 00100713 li a4,1 + 80003854: fdc42783 lw a5,-36(s0) + 80003858: 40f707bb subw a5,a4,a5 + 8000385c: 0007879b sext.w a5,a5 + 80003860: 02079793 slli a5,a5,0x20 + 80003864: 0207d793 srli a5,a5,0x20 + 80003868: 00278793 addi a5,a5,2 + 8000386c: 00479793 slli a5,a5,0x4 + 80003870: fa843703 ld a4,-88(s0) + 80003874: 00f707b3 add a5,a4,a5 + 80003878: 00878793 addi a5,a5,8 + 8000387c: 00078593 mv a1,a5 + 80003880: 00068513 mv a0,a3 + 80003884: 871ff0ef jal ra,800030f4 + 80003888: fcc42783 lw a5,-52(s0) + 8000388c: 0027d79b srliw a5,a5,0x2 + 80003890: fcf42623 sw a5,-52(s0) + 80003894: fdc42783 lw a5,-36(s0) + 80003898: 0017879b addiw a5,a5,1 + 8000389c: fcf42e23 sw a5,-36(s0) + 800038a0: fdc42783 lw a5,-36(s0) + 800038a4: 0007871b sext.w a4,a5 + 800038a8: 00100793 li a5,1 + 800038ac: f6e7f6e3 bgeu a5,a4,80003818 + 800038b0: 0080006f j 800038b8 + 800038b4: 00000013 nop + 800038b8: fa843783 ld a5,-88(s0) + 800038bc: 0157c783 lbu a5,21(a5) + 800038c0: 0017e793 ori a5,a5,1 + 800038c4: 0ff7f713 andi a4,a5,255 + 800038c8: fa843783 ld a5,-88(s0) + 800038cc: 00e78aa3 sb a4,21(a5) + 800038d0: 00048513 mv a0,s1 + 800038d4: 8a9fc0ef jal ra,8000017c + 800038d8: fa843783 ld a5,-88(s0) + 800038dc: 0157c783 lbu a5,21(a5) + 800038e0: 0007879b sext.w a5,a5 + 800038e4: 0047f793 andi a5,a5,4 + 800038e8: 0007879b sext.w a5,a5 + 800038ec: 04078863 beqz a5,8000393c + 800038f0: 00016797 auipc a5,0x16 + 800038f4: 6b078793 addi a5,a5,1712 # 80019fa0 + 800038f8: 0007c783 lbu a5,0(a5) + 800038fc: 00078713 mv a4,a5 + 80003900: 00100793 li a5,1 + 80003904: 02f71c63 bne a4,a5,8000393c + 80003908: 0001f797 auipc a5,0x1f + 8000390c: ac878793 addi a5,a5,-1336 # 800223d0 + 80003910: 0687c783 lbu a5,104(a5) + 80003914: 0007879b sext.w a5,a5 + 80003918: 0077f793 andi a5,a5,7 + 8000391c: 0007879b sext.w a5,a5 + 80003920: 00078713 mv a4,a5 + 80003924: 00200793 li a5,2 + 80003928: 00f71a63 bne a4,a5,8000393c + 8000392c: 0001f517 auipc a0,0x1f + 80003930: aa450513 addi a0,a0,-1372 # 800223d0 + 80003934: 1b1020ef jal ra,800062e4 + 80003938: ac1fe0ef jal ra,800023f8 + 8000393c: 00000793 li a5,0 + 80003940: 00078513 mv a0,a5 + 80003944: 05813083 ld ra,88(sp) + 80003948: 05013403 ld s0,80(sp) + 8000394c: 04813483 ld s1,72(sp) + 80003950: 06010113 addi sp,sp,96 + 80003954: 00008067 ret + +0000000080003958 : + 80003958: fd010113 addi sp,sp,-48 + 8000395c: 02113423 sd ra,40(sp) + 80003960: 02813023 sd s0,32(sp) + 80003964: 00913c23 sd s1,24(sp) + 80003968: 03010413 addi s0,sp,48 + 8000396c: fca43c23 sd a0,-40(s0) + 80003970: fd843783 ld a5,-40(s0) + 80003974: 00079e63 bnez a5,80003990 + 80003978: 1bb00613 li a2,443 + 8000397c: 00015597 auipc a1,0x15 + 80003980: bdc58593 addi a1,a1,-1060 # 80018558 <__FUNCTION__.2711> + 80003984: 00012517 auipc a0,0x12 + 80003988: 39c50513 addi a0,a0,924 # 80015d20 + 8000398c: 2f1040ef jal ra,8000847c + 80003990: fd843783 ld a5,-40(s0) + 80003994: 00078513 mv a0,a5 + 80003998: e5cfe0ef jal ra,80001ff4 + 8000399c: 00050793 mv a5,a0 + 800039a0: 00078713 mv a4,a5 + 800039a4: 00a00793 li a5,10 + 800039a8: 00f70e63 beq a4,a5,800039c4 + 800039ac: 1bc00613 li a2,444 + 800039b0: 00015597 auipc a1,0x15 + 800039b4: ba858593 addi a1,a1,-1112 # 80018558 <__FUNCTION__.2711> + 800039b8: 00012517 auipc a0,0x12 + 800039bc: 38050513 addi a0,a0,896 # 80015d38 + 800039c0: 2bd040ef jal ra,8000847c + 800039c4: fd843783 ld a5,-40(s0) + 800039c8: 0157c783 lbu a5,21(a5) + 800039cc: 0007879b sext.w a5,a5 + 800039d0: 0017f793 andi a5,a5,1 + 800039d4: 0007879b sext.w a5,a5 + 800039d8: 00079663 bnez a5,800039e4 + 800039dc: fff00793 li a5,-1 + 800039e0: 0600006f j 80003a40 + 800039e4: 0001e797 auipc a5,0x1e + 800039e8: 5fc78793 addi a5,a5,1532 # 80021fe0 + 800039ec: 0007b783 ld a5,0(a5) + 800039f0: 00078e63 beqz a5,80003a0c + 800039f4: 0001e797 auipc a5,0x1e + 800039f8: 5ec78793 addi a5,a5,1516 # 80021fe0 + 800039fc: 0007b703 ld a4,0(a5) + 80003a00: fd843783 ld a5,-40(s0) + 80003a04: 00078513 mv a0,a5 + 80003a08: 000700e7 jalr a4 + 80003a0c: f68fc0ef jal ra,80000174 + 80003a10: 00050493 mv s1,a0 + 80003a14: fd843503 ld a0,-40(s0) + 80003a18: 925ff0ef jal ra,8000333c <_rt_timer_remove> + 80003a1c: fd843783 ld a5,-40(s0) + 80003a20: 0157c783 lbu a5,21(a5) + 80003a24: ffe7f793 andi a5,a5,-2 + 80003a28: 0ff7f713 andi a4,a5,255 + 80003a2c: fd843783 ld a5,-40(s0) + 80003a30: 00e78aa3 sb a4,21(a5) + 80003a34: 00048513 mv a0,s1 + 80003a38: f44fc0ef jal ra,8000017c + 80003a3c: 00000793 li a5,0 + 80003a40: 00078513 mv a0,a5 + 80003a44: 02813083 ld ra,40(sp) + 80003a48: 02013403 ld s0,32(sp) + 80003a4c: 01813483 ld s1,24(sp) + 80003a50: 03010113 addi sp,sp,48 + 80003a54: 00008067 ret + +0000000080003a58 : + 80003a58: fd010113 addi sp,sp,-48 + 80003a5c: 02113423 sd ra,40(sp) + 80003a60: 02813023 sd s0,32(sp) + 80003a64: 03010413 addi s0,sp,48 + 80003a68: fea43423 sd a0,-24(s0) + 80003a6c: 00058793 mv a5,a1 + 80003a70: fcc43c23 sd a2,-40(s0) + 80003a74: fef42223 sw a5,-28(s0) + 80003a78: fe843783 ld a5,-24(s0) + 80003a7c: 00079e63 bnez a5,80003a98 + 80003a80: 1df00613 li a2,479 + 80003a84: 00015597 auipc a1,0x15 + 80003a88: ae458593 addi a1,a1,-1308 # 80018568 <__FUNCTION__.2718> + 80003a8c: 00012517 auipc a0,0x12 + 80003a90: 29450513 addi a0,a0,660 # 80015d20 + 80003a94: 1e9040ef jal ra,8000847c + 80003a98: fe843783 ld a5,-24(s0) + 80003a9c: 00078513 mv a0,a5 + 80003aa0: d54fe0ef jal ra,80001ff4 + 80003aa4: 00050793 mv a5,a0 + 80003aa8: 00078713 mv a4,a5 + 80003aac: 00a00793 li a5,10 + 80003ab0: 00f70e63 beq a4,a5,80003acc + 80003ab4: 1e000613 li a2,480 + 80003ab8: 00015597 auipc a1,0x15 + 80003abc: ab058593 addi a1,a1,-1360 # 80018568 <__FUNCTION__.2718> + 80003ac0: 00012517 auipc a0,0x12 + 80003ac4: 27850513 addi a0,a0,632 # 80015d38 + 80003ac8: 1b5040ef jal ra,8000847c + 80003acc: ea8fc0ef jal ra,80000174 + 80003ad0: 00050093 mv ra,a0 + 80003ad4: fe442783 lw a5,-28(s0) + 80003ad8: 0007871b sext.w a4,a5 + 80003adc: 00400793 li a5,4 + 80003ae0: 0ce7e263 bltu a5,a4,80003ba4 + 80003ae4: fe446783 lwu a5,-28(s0) + 80003ae8: 00279713 slli a4,a5,0x2 + 80003aec: 00015797 auipc a5,0x15 + 80003af0: a2878793 addi a5,a5,-1496 # 80018514 <__FUNCTION__.2600+0x1c> + 80003af4: 00f707b3 add a5,a4,a5 + 80003af8: 0007a783 lw a5,0(a5) + 80003afc: 0007871b sext.w a4,a5 + 80003b00: 00015797 auipc a5,0x15 + 80003b04: a1478793 addi a5,a5,-1516 # 80018514 <__FUNCTION__.2600+0x1c> + 80003b08: 00f707b3 add a5,a4,a5 + 80003b0c: 00078067 jr a5 + 80003b10: fe843783 ld a5,-24(s0) + 80003b14: 0487a703 lw a4,72(a5) + 80003b18: fd843783 ld a5,-40(s0) + 80003b1c: 00e7a023 sw a4,0(a5) + 80003b20: 0880006f j 80003ba8 + 80003b24: fd843783 ld a5,-40(s0) + 80003b28: 0007a703 lw a4,0(a5) + 80003b2c: fe843783 ld a5,-24(s0) + 80003b30: 04e7a423 sw a4,72(a5) + 80003b34: 0740006f j 80003ba8 + 80003b38: fe843783 ld a5,-24(s0) + 80003b3c: 0157c783 lbu a5,21(a5) + 80003b40: ffd7f793 andi a5,a5,-3 + 80003b44: 0ff7f713 andi a4,a5,255 + 80003b48: fe843783 ld a5,-24(s0) + 80003b4c: 00e78aa3 sb a4,21(a5) + 80003b50: 0580006f j 80003ba8 + 80003b54: fe843783 ld a5,-24(s0) + 80003b58: 0157c783 lbu a5,21(a5) + 80003b5c: 0027e793 ori a5,a5,2 + 80003b60: 0ff7f713 andi a4,a5,255 + 80003b64: fe843783 ld a5,-24(s0) + 80003b68: 00e78aa3 sb a4,21(a5) + 80003b6c: 03c0006f j 80003ba8 + 80003b70: fe843783 ld a5,-24(s0) + 80003b74: 0157c783 lbu a5,21(a5) + 80003b78: 0007879b sext.w a5,a5 + 80003b7c: 0017f793 andi a5,a5,1 + 80003b80: 0007879b sext.w a5,a5 + 80003b84: 00078a63 beqz a5,80003b98 + 80003b88: fd843783 ld a5,-40(s0) + 80003b8c: 00100713 li a4,1 + 80003b90: 00e7a023 sw a4,0(a5) + 80003b94: 0140006f j 80003ba8 + 80003b98: fd843783 ld a5,-40(s0) + 80003b9c: 0007a023 sw zero,0(a5) + 80003ba0: 0080006f j 80003ba8 + 80003ba4: 00000013 nop + 80003ba8: 00008513 mv a0,ra + 80003bac: dd0fc0ef jal ra,8000017c + 80003bb0: 00000793 li a5,0 + 80003bb4: 00078513 mv a0,a5 + 80003bb8: 02813083 ld ra,40(sp) + 80003bbc: 02013403 ld s0,32(sp) + 80003bc0: 03010113 addi sp,sp,48 + 80003bc4: 00008067 ret + +0000000080003bc8 : + 80003bc8: fc010113 addi sp,sp,-64 + 80003bcc: 02113c23 sd ra,56(sp) + 80003bd0: 02813823 sd s0,48(sp) + 80003bd4: 02913423 sd s1,40(sp) + 80003bd8: 04010413 addi s0,sp,64 + 80003bdc: fc040793 addi a5,s0,-64 + 80003be0: 00078513 mv a0,a5 + 80003be4: cd4ff0ef jal ra,800030b8 + 80003be8: 235020ef jal ra,8000661c + 80003bec: 00050793 mv a5,a0 + 80003bf0: fcf42e23 sw a5,-36(s0) + 80003bf4: d80fc0ef jal ra,80000174 + 80003bf8: 00050493 mv s1,a0 + 80003bfc: 1700006f j 80003d6c + 80003c00: 0001e797 auipc a5,0x1e + 80003c04: 7b078793 addi a5,a5,1968 # 800223b0 + 80003c08: 0007b783 ld a5,0(a5) + 80003c0c: fd878793 addi a5,a5,-40 + 80003c10: fcf43823 sd a5,-48(s0) + 80003c14: fd043783 ld a5,-48(s0) + 80003c18: 04c7a783 lw a5,76(a5) + 80003c1c: fdc42703 lw a4,-36(s0) + 80003c20: 40f707bb subw a5,a4,a5 + 80003c24: 0007879b sext.w a5,a5 + 80003c28: 00078713 mv a4,a5 + 80003c2c: 800007b7 lui a5,0x80000 + 80003c30: ffe7c793 xori a5,a5,-2 + 80003c34: 14e7e863 bltu a5,a4,80003d84 + 80003c38: 0001e797 auipc a5,0x1e + 80003c3c: 3d878793 addi a5,a5,984 # 80022010 + 80003c40: 0007b783 ld a5,0(a5) + 80003c44: 00078c63 beqz a5,80003c5c + 80003c48: 0001e797 auipc a5,0x1e + 80003c4c: 3c878793 addi a5,a5,968 # 80022010 + 80003c50: 0007b783 ld a5,0(a5) + 80003c54: fd043503 ld a0,-48(s0) + 80003c58: 000780e7 jalr a5 + 80003c5c: fd043503 ld a0,-48(s0) + 80003c60: edcff0ef jal ra,8000333c <_rt_timer_remove> + 80003c64: fd043783 ld a5,-48(s0) + 80003c68: 0157c783 lbu a5,21(a5) + 80003c6c: 0007879b sext.w a5,a5 + 80003c70: 0027f793 andi a5,a5,2 + 80003c74: 0007879b sext.w a5,a5 + 80003c78: 00079e63 bnez a5,80003c94 + 80003c7c: fd043783 ld a5,-48(s0) + 80003c80: 0157c783 lbu a5,21(a5) + 80003c84: ffe7f793 andi a5,a5,-2 + 80003c88: 0ff7f713 andi a4,a5,255 + 80003c8c: fd043783 ld a5,-48(s0) + 80003c90: 00e78aa3 sb a4,21(a5) + 80003c94: fd043783 ld a5,-48(s0) + 80003c98: 02878713 addi a4,a5,40 + 80003c9c: fc040793 addi a5,s0,-64 + 80003ca0: 00070593 mv a1,a4 + 80003ca4: 00078513 mv a0,a5 + 80003ca8: c4cff0ef jal ra,800030f4 + 80003cac: fd043783 ld a5,-48(s0) + 80003cb0: 0387b703 ld a4,56(a5) + 80003cb4: fd043783 ld a5,-48(s0) + 80003cb8: 0407b783 ld a5,64(a5) + 80003cbc: 00078513 mv a0,a5 + 80003cc0: 000700e7 jalr a4 + 80003cc4: 159020ef jal ra,8000661c + 80003cc8: 00050793 mv a5,a0 + 80003ccc: fcf42e23 sw a5,-36(s0) + 80003cd0: 0001e797 auipc a5,0x1e + 80003cd4: 34878793 addi a5,a5,840 # 80022018 + 80003cd8: 0007b783 ld a5,0(a5) + 80003cdc: 00078c63 beqz a5,80003cf4 + 80003ce0: 0001e797 auipc a5,0x1e + 80003ce4: 33878793 addi a5,a5,824 # 80022018 + 80003ce8: 0007b783 ld a5,0(a5) + 80003cec: fd043503 ld a0,-48(s0) + 80003cf0: 000780e7 jalr a5 + 80003cf4: fc040793 addi a5,s0,-64 + 80003cf8: 00078513 mv a0,a5 + 80003cfc: cb8ff0ef jal ra,800031b4 + 80003d00: 00050793 mv a5,a0 + 80003d04: 00078463 beqz a5,80003d0c + 80003d08: 0640006f j 80003d6c + 80003d0c: fd043783 ld a5,-48(s0) + 80003d10: 02878793 addi a5,a5,40 + 80003d14: 00078513 mv a0,a5 + 80003d18: c38ff0ef jal ra,80003150 + 80003d1c: fd043783 ld a5,-48(s0) + 80003d20: 0157c783 lbu a5,21(a5) + 80003d24: 0007879b sext.w a5,a5 + 80003d28: 0027f793 andi a5,a5,2 + 80003d2c: 0007879b sext.w a5,a5 + 80003d30: 02078e63 beqz a5,80003d6c + 80003d34: fd043783 ld a5,-48(s0) + 80003d38: 0157c783 lbu a5,21(a5) + 80003d3c: 0007879b sext.w a5,a5 + 80003d40: 0017f793 andi a5,a5,1 + 80003d44: 0007879b sext.w a5,a5 + 80003d48: 02078263 beqz a5,80003d6c + 80003d4c: fd043783 ld a5,-48(s0) + 80003d50: 0157c783 lbu a5,21(a5) + 80003d54: ffe7f793 andi a5,a5,-2 + 80003d58: 0ff7f713 andi a4,a5,255 + 80003d5c: fd043783 ld a5,-48(s0) + 80003d60: 00e78aa3 sb a4,21(a5) + 80003d64: fd043503 ld a0,-48(s0) + 80003d68: fccff0ef jal ra,80003534 + 80003d6c: 0001e517 auipc a0,0x1e + 80003d70: 64450513 addi a0,a0,1604 # 800223b0 + 80003d74: c40ff0ef jal ra,800031b4 + 80003d78: 00050793 mv a5,a0 + 80003d7c: e80782e3 beqz a5,80003c00 + 80003d80: 0080006f j 80003d88 + 80003d84: 00000013 nop + 80003d88: 00048513 mv a0,s1 + 80003d8c: bf0fc0ef jal ra,8000017c + 80003d90: 00000013 nop + 80003d94: 03813083 ld ra,56(sp) + 80003d98: 03013403 ld s0,48(sp) + 80003d9c: 02813483 ld s1,40(sp) + 80003da0: 04010113 addi sp,sp,64 + 80003da4: 00008067 ret + +0000000080003da8 : + 80003da8: fc010113 addi sp,sp,-64 + 80003dac: 02113c23 sd ra,56(sp) + 80003db0: 02813823 sd s0,48(sp) + 80003db4: 02913423 sd s1,40(sp) + 80003db8: 04010413 addi s0,sp,64 + 80003dbc: fc040793 addi a5,s0,-64 + 80003dc0: 00078513 mv a0,a5 + 80003dc4: af4ff0ef jal ra,800030b8 + 80003dc8: bacfc0ef jal ra,80000174 + 80003dcc: 00050493 mv s1,a0 + 80003dd0: 19c0006f j 80003f6c + 80003dd4: 0001e797 auipc a5,0x1e + 80003dd8: 5ec78793 addi a5,a5,1516 # 800223c0 + 80003ddc: 0007b783 ld a5,0(a5) + 80003de0: fd878793 addi a5,a5,-40 + 80003de4: fcf43c23 sd a5,-40(s0) + 80003de8: 035020ef jal ra,8000661c + 80003dec: 00050793 mv a5,a0 + 80003df0: fcf42a23 sw a5,-44(s0) + 80003df4: fd843783 ld a5,-40(s0) + 80003df8: 04c7a783 lw a5,76(a5) + 80003dfc: fd442703 lw a4,-44(s0) + 80003e00: 40f707bb subw a5,a4,a5 + 80003e04: 0007879b sext.w a5,a5 + 80003e08: 00078713 mv a4,a5 + 80003e0c: 800007b7 lui a5,0x80000 + 80003e10: ffe7c793 xori a5,a5,-2 + 80003e14: 16e7e863 bltu a5,a4,80003f84 + 80003e18: 0001e797 auipc a5,0x1e + 80003e1c: 1f878793 addi a5,a5,504 # 80022010 + 80003e20: 0007b783 ld a5,0(a5) + 80003e24: 00078c63 beqz a5,80003e3c + 80003e28: 0001e797 auipc a5,0x1e + 80003e2c: 1e878793 addi a5,a5,488 # 80022010 + 80003e30: 0007b783 ld a5,0(a5) + 80003e34: fd843503 ld a0,-40(s0) + 80003e38: 000780e7 jalr a5 + 80003e3c: fd843503 ld a0,-40(s0) + 80003e40: cfcff0ef jal ra,8000333c <_rt_timer_remove> + 80003e44: fd843783 ld a5,-40(s0) + 80003e48: 0157c783 lbu a5,21(a5) + 80003e4c: 0007879b sext.w a5,a5 + 80003e50: 0027f793 andi a5,a5,2 + 80003e54: 0007879b sext.w a5,a5 + 80003e58: 00079e63 bnez a5,80003e74 + 80003e5c: fd843783 ld a5,-40(s0) + 80003e60: 0157c783 lbu a5,21(a5) + 80003e64: ffe7f793 andi a5,a5,-2 + 80003e68: 0ff7f713 andi a4,a5,255 + 80003e6c: fd843783 ld a5,-40(s0) + 80003e70: 00e78aa3 sb a4,21(a5) + 80003e74: fd843783 ld a5,-40(s0) + 80003e78: 02878713 addi a4,a5,40 + 80003e7c: fc040793 addi a5,s0,-64 + 80003e80: 00070593 mv a1,a4 + 80003e84: 00078513 mv a0,a5 + 80003e88: a6cff0ef jal ra,800030f4 + 80003e8c: 00016797 auipc a5,0x16 + 80003e90: 11478793 addi a5,a5,276 # 80019fa0 + 80003e94: 00078023 sb zero,0(a5) + 80003e98: 00048513 mv a0,s1 + 80003e9c: ae0fc0ef jal ra,8000017c + 80003ea0: fd843783 ld a5,-40(s0) + 80003ea4: 0387b703 ld a4,56(a5) + 80003ea8: fd843783 ld a5,-40(s0) + 80003eac: 0407b783 ld a5,64(a5) + 80003eb0: 00078513 mv a0,a5 + 80003eb4: 000700e7 jalr a4 + 80003eb8: 0001e797 auipc a5,0x1e + 80003ebc: 16078793 addi a5,a5,352 # 80022018 + 80003ec0: 0007b783 ld a5,0(a5) + 80003ec4: 00078c63 beqz a5,80003edc + 80003ec8: 0001e797 auipc a5,0x1e + 80003ecc: 15078793 addi a5,a5,336 # 80022018 + 80003ed0: 0007b783 ld a5,0(a5) + 80003ed4: fd843503 ld a0,-40(s0) + 80003ed8: 000780e7 jalr a5 + 80003edc: a98fc0ef jal ra,80000174 + 80003ee0: 00050493 mv s1,a0 + 80003ee4: 00016797 auipc a5,0x16 + 80003ee8: 0bc78793 addi a5,a5,188 # 80019fa0 + 80003eec: 00100713 li a4,1 + 80003ef0: 00e78023 sb a4,0(a5) + 80003ef4: fc040793 addi a5,s0,-64 + 80003ef8: 00078513 mv a0,a5 + 80003efc: ab8ff0ef jal ra,800031b4 + 80003f00: 00050793 mv a5,a0 + 80003f04: 00078463 beqz a5,80003f0c + 80003f08: 0640006f j 80003f6c + 80003f0c: fd843783 ld a5,-40(s0) + 80003f10: 02878793 addi a5,a5,40 + 80003f14: 00078513 mv a0,a5 + 80003f18: a38ff0ef jal ra,80003150 + 80003f1c: fd843783 ld a5,-40(s0) + 80003f20: 0157c783 lbu a5,21(a5) + 80003f24: 0007879b sext.w a5,a5 + 80003f28: 0027f793 andi a5,a5,2 + 80003f2c: 0007879b sext.w a5,a5 + 80003f30: 02078e63 beqz a5,80003f6c + 80003f34: fd843783 ld a5,-40(s0) + 80003f38: 0157c783 lbu a5,21(a5) + 80003f3c: 0007879b sext.w a5,a5 + 80003f40: 0017f793 andi a5,a5,1 + 80003f44: 0007879b sext.w a5,a5 + 80003f48: 02078263 beqz a5,80003f6c + 80003f4c: fd843783 ld a5,-40(s0) + 80003f50: 0157c783 lbu a5,21(a5) + 80003f54: ffe7f793 andi a5,a5,-2 + 80003f58: 0ff7f713 andi a4,a5,255 + 80003f5c: fd843783 ld a5,-40(s0) + 80003f60: 00e78aa3 sb a4,21(a5) + 80003f64: fd843503 ld a0,-40(s0) + 80003f68: dccff0ef jal ra,80003534 + 80003f6c: 0001e517 auipc a0,0x1e + 80003f70: 45450513 addi a0,a0,1108 # 800223c0 + 80003f74: a40ff0ef jal ra,800031b4 + 80003f78: 00050793 mv a5,a0 + 80003f7c: e4078ce3 beqz a5,80003dd4 + 80003f80: 0080006f j 80003f88 + 80003f84: 00000013 nop + 80003f88: 00048513 mv a0,s1 + 80003f8c: 9f0fc0ef jal ra,8000017c + 80003f90: 00000013 nop + 80003f94: 03813083 ld ra,56(sp) + 80003f98: 03013403 ld s0,48(sp) + 80003f9c: 02813483 ld s1,40(sp) + 80003fa0: 04010113 addi sp,sp,64 + 80003fa4: 00008067 ret + +0000000080003fa8 : + 80003fa8: fd010113 addi sp,sp,-48 + 80003fac: 02113423 sd ra,40(sp) + 80003fb0: 02813023 sd s0,32(sp) + 80003fb4: 03010413 addi s0,sp,48 + 80003fb8: fca43c23 sd a0,-40(s0) + 80003fbc: 0001e517 auipc a0,0x1e + 80003fc0: 40450513 addi a0,a0,1028 # 800223c0 + 80003fc4: b00ff0ef jal ra,800032c4 + 80003fc8: 00050793 mv a5,a0 + 80003fcc: fef42623 sw a5,-20(s0) + 80003fd0: fec42783 lw a5,-20(s0) + 80003fd4: 0007871b sext.w a4,a5 + 80003fd8: fff00793 li a5,-1 + 80003fdc: 00f71e63 bne a4,a5,80003ff8 + 80003fe0: 1ed010ef jal ra,800059cc + 80003fe4: 00050793 mv a5,a0 + 80003fe8: 00078513 mv a0,a5 + 80003fec: 198020ef jal ra,80006184 + 80003ff0: c08fe0ef jal ra,800023f8 + 80003ff4: 04c0006f j 80004040 + 80003ff8: 624020ef jal ra,8000661c + 80003ffc: 00050793 mv a5,a0 + 80004000: fef42423 sw a5,-24(s0) + 80004004: fec42703 lw a4,-20(s0) + 80004008: fe842783 lw a5,-24(s0) + 8000400c: 40f707bb subw a5,a4,a5 + 80004010: 0007879b sext.w a5,a5 + 80004014: 00078713 mv a4,a5 + 80004018: 800007b7 lui a5,0x80000 + 8000401c: ffe7c793 xori a5,a5,-2 + 80004020: 02e7e063 bltu a5,a4,80004040 + 80004024: fec42703 lw a4,-20(s0) + 80004028: fe842783 lw a5,-24(s0) + 8000402c: 40f707bb subw a5,a4,a5 + 80004030: fef42623 sw a5,-20(s0) + 80004034: fec42783 lw a5,-20(s0) + 80004038: 00078513 mv a0,a5 + 8000403c: 6e9010ef jal ra,80005f24 + 80004040: d69ff0ef jal ra,80003da8 + 80004044: f79ff06f j 80003fbc + +0000000080004048 : + 80004048: fe010113 addi sp,sp,-32 + 8000404c: 00113c23 sd ra,24(sp) + 80004050: 00813823 sd s0,16(sp) + 80004054: 02010413 addi s0,sp,32 + 80004058: fe042623 sw zero,-20(s0) + 8000405c: 02c0006f j 80004088 + 80004060: fec42783 lw a5,-20(s0) + 80004064: 00479713 slli a4,a5,0x4 + 80004068: 0001e797 auipc a5,0x1e + 8000406c: 34878793 addi a5,a5,840 # 800223b0 + 80004070: 00f707b3 add a5,a4,a5 + 80004074: 00078513 mv a0,a5 + 80004078: 840ff0ef jal ra,800030b8 + 8000407c: fec42783 lw a5,-20(s0) + 80004080: 0017879b addiw a5,a5,1 + 80004084: fef42623 sw a5,-20(s0) + 80004088: fec42783 lw a5,-20(s0) + 8000408c: 0007879b sext.w a5,a5 + 80004090: fc0788e3 beqz a5,80004060 + 80004094: 00000013 nop + 80004098: 00000013 nop + 8000409c: 01813083 ld ra,24(sp) + 800040a0: 01013403 ld s0,16(sp) + 800040a4: 02010113 addi sp,sp,32 + 800040a8: 00008067 ret + +00000000800040ac : + 800040ac: fe010113 addi sp,sp,-32 + 800040b0: 00113c23 sd ra,24(sp) + 800040b4: 00813823 sd s0,16(sp) + 800040b8: 02010413 addi s0,sp,32 + 800040bc: fe042623 sw zero,-20(s0) + 800040c0: 02c0006f j 800040ec + 800040c4: fec42783 lw a5,-20(s0) + 800040c8: 00479713 slli a4,a5,0x4 + 800040cc: 0001e797 auipc a5,0x1e + 800040d0: 2f478793 addi a5,a5,756 # 800223c0 + 800040d4: 00f707b3 add a5,a4,a5 + 800040d8: 00078513 mv a0,a5 + 800040dc: fddfe0ef jal ra,800030b8 + 800040e0: fec42783 lw a5,-20(s0) + 800040e4: 0017879b addiw a5,a5,1 + 800040e8: fef42623 sw a5,-20(s0) + 800040ec: fec42783 lw a5,-20(s0) + 800040f0: 0007879b sext.w a5,a5 + 800040f4: fc0788e3 beqz a5,800040c4 + 800040f8: 00a00893 li a7,10 + 800040fc: 00400813 li a6,4 + 80004100: 000047b7 lui a5,0x4 + 80004104: 0001e717 auipc a4,0x1e + 80004108: 3b470713 addi a4,a4,948 # 800224b8 + 8000410c: 00000693 li a3,0 + 80004110: 00000617 auipc a2,0x0 + 80004114: e9860613 addi a2,a2,-360 # 80003fa8 + 80004118: 00012597 auipc a1,0x12 + 8000411c: cf058593 addi a1,a1,-784 # 80015e08 + 80004120: 0001e517 auipc a0,0x1e + 80004124: 2b050513 addi a0,a0,688 # 800223d0 + 80004128: 7d0010ef jal ra,800058f8 + 8000412c: 0001e517 auipc a0,0x1e + 80004130: 2a450513 addi a0,a0,676 # 800223d0 + 80004134: 0c1010ef jal ra,800059f4 + 80004138: 00000013 nop + 8000413c: 01813083 ld ra,24(sp) + 80004140: 01013403 ld s0,16(sp) + 80004144: 02010113 addi sp,sp,32 + 80004148: 00008067 ret + +000000008000414c : + 8000414c: fd010113 addi sp,sp,-48 + 80004150: 02813423 sd s0,40(sp) + 80004154: 03010413 addi s0,sp,48 + 80004158: fca43c23 sd a0,-40(s0) + 8000415c: fcb43823 sd a1,-48(s0) + 80004160: fe042623 sw zero,-20(s0) + 80004164: 0440006f j 800041a8 + 80004168: fec42783 lw a5,-20(s0) + 8000416c: fd043703 ld a4,-48(s0) + 80004170: 00f707b3 add a5,a4,a5 + 80004174: 0007c783 lbu a5,0(a5) # 4000 <__STACKSIZE__> + 80004178: 04078263 beqz a5,800041bc + 8000417c: fec42783 lw a5,-20(s0) + 80004180: fd043703 ld a4,-48(s0) + 80004184: 00f707b3 add a5,a4,a5 + 80004188: 0007c703 lbu a4,0(a5) + 8000418c: fd843683 ld a3,-40(s0) + 80004190: fec42783 lw a5,-20(s0) + 80004194: 00f687b3 add a5,a3,a5 + 80004198: 00e78c23 sb a4,24(a5) + 8000419c: fec42783 lw a5,-20(s0) + 800041a0: 0017879b addiw a5,a5,1 + 800041a4: fef42623 sw a5,-20(s0) + 800041a8: fec42783 lw a5,-20(s0) + 800041ac: 00078713 mv a4,a5 + 800041b0: 00700793 li a5,7 + 800041b4: fae7fae3 bgeu a5,a4,80004168 + 800041b8: 02c0006f j 800041e4 + 800041bc: 00000013 nop + 800041c0: 0240006f j 800041e4 + 800041c4: fd843703 ld a4,-40(s0) + 800041c8: fec42783 lw a5,-20(s0) + 800041cc: 00f707b3 add a5,a4,a5 + 800041d0: 02000713 li a4,32 + 800041d4: 00e78c23 sb a4,24(a5) + 800041d8: fec42783 lw a5,-20(s0) + 800041dc: 0017879b addiw a5,a5,1 + 800041e0: fef42623 sw a5,-20(s0) + 800041e4: fec42783 lw a5,-20(s0) + 800041e8: 00078713 mv a4,a5 + 800041ec: 00700793 li a5,7 + 800041f0: fce7fae3 bgeu a5,a4,800041c4 + 800041f4: 00000013 nop + 800041f8: 00000013 nop + 800041fc: 02813403 ld s0,40(sp) + 80004200: 03010113 addi sp,sp,48 + 80004204: 00008067 ret + +0000000080004208 : + 80004208: fd010113 addi sp,sp,-48 + 8000420c: 02113423 sd ra,40(sp) + 80004210: 02813023 sd s0,32(sp) + 80004214: 03010413 addi s0,sp,48 + 80004218: fca43c23 sd a0,-40(s0) + 8000421c: 0001e797 auipc a5,0x1e + 80004220: e1c78793 addi a5,a5,-484 # 80022038 + 80004224: 0007b783 ld a5,0(a5) + 80004228: fd843703 ld a4,-40(s0) + 8000422c: 00f77e63 bgeu a4,a5,80004248 + 80004230: 0a100613 li a2,161 + 80004234: 00014597 auipc a1,0x14 + 80004238: 3d458593 addi a1,a1,980 # 80018608 <__FUNCTION__.2654> + 8000423c: 00012517 auipc a0,0x12 + 80004240: bd450513 addi a0,a0,-1068 # 80015e10 + 80004244: 238040ef jal ra,8000847c + 80004248: 0001e797 auipc a5,0x1e + 8000424c: df878793 addi a5,a5,-520 # 80022040 + 80004250: 0007b783 ld a5,0(a5) + 80004254: fd843703 ld a4,-40(s0) + 80004258: 00f76e63 bltu a4,a5,80004274 + 8000425c: 0a200613 li a2,162 + 80004260: 00014597 auipc a1,0x14 + 80004264: 3a858593 addi a1,a1,936 # 80018608 <__FUNCTION__.2654> + 80004268: 00012517 auipc a0,0x12 + 8000426c: bc850513 addi a0,a0,-1080 # 80015e30 + 80004270: 20c040ef jal ra,8000847c + 80004274: fd843783 ld a5,-40(s0) + 80004278: 0027d783 lhu a5,2(a5) + 8000427c: 00078e63 beqz a5,80004298 + 80004280: 0a300613 li a2,163 + 80004284: 00014597 auipc a1,0x14 + 80004288: 38458593 addi a1,a1,900 # 80018608 <__FUNCTION__.2654> + 8000428c: 00012517 auipc a0,0x12 + 80004290: bd450513 addi a0,a0,-1068 # 80015e60 + 80004294: 1e8040ef jal ra,8000847c + 80004298: 0001e797 auipc a5,0x1e + 8000429c: da078793 addi a5,a5,-608 # 80022038 + 800042a0: 0007b703 ld a4,0(a5) + 800042a4: fd843783 ld a5,-40(s0) + 800042a8: 0087b783 ld a5,8(a5) + 800042ac: 00f707b3 add a5,a4,a5 + 800042b0: fef43423 sd a5,-24(s0) + 800042b4: fd843703 ld a4,-40(s0) + 800042b8: fe843783 ld a5,-24(s0) + 800042bc: 08f70663 beq a4,a5,80004348 + 800042c0: fe843783 ld a5,-24(s0) + 800042c4: 0027d783 lhu a5,2(a5) + 800042c8: 08079063 bnez a5,80004348 + 800042cc: 0001e797 auipc a5,0x1e + 800042d0: d7478793 addi a5,a5,-652 # 80022040 + 800042d4: 0007b783 ld a5,0(a5) + 800042d8: fe843703 ld a4,-24(s0) + 800042dc: 06f70663 beq a4,a5,80004348 + 800042e0: 0001e797 auipc a5,0x1e + 800042e4: d6878793 addi a5,a5,-664 # 80022048 + 800042e8: 0007b783 ld a5,0(a5) + 800042ec: fe843703 ld a4,-24(s0) + 800042f0: 00f71a63 bne a4,a5,80004304 + 800042f4: 0001e797 auipc a5,0x1e + 800042f8: d5478793 addi a5,a5,-684 # 80022048 + 800042fc: fd843703 ld a4,-40(s0) + 80004300: 00e7b023 sd a4,0(a5) + 80004304: fe843783 ld a5,-24(s0) + 80004308: 0087b703 ld a4,8(a5) + 8000430c: fd843783 ld a5,-40(s0) + 80004310: 00e7b423 sd a4,8(a5) + 80004314: 0001e797 auipc a5,0x1e + 80004318: d2478793 addi a5,a5,-732 # 80022038 + 8000431c: 0007b783 ld a5,0(a5) + 80004320: fd843703 ld a4,-40(s0) + 80004324: 40f706b3 sub a3,a4,a5 + 80004328: 0001e797 auipc a5,0x1e + 8000432c: d1078793 addi a5,a5,-752 # 80022038 + 80004330: 0007b703 ld a4,0(a5) + 80004334: fe843783 ld a5,-24(s0) + 80004338: 0087b783 ld a5,8(a5) + 8000433c: 00f707b3 add a5,a4,a5 + 80004340: 00068713 mv a4,a3 + 80004344: 00e7b823 sd a4,16(a5) + 80004348: 0001e797 auipc a5,0x1e + 8000434c: cf078793 addi a5,a5,-784 # 80022038 + 80004350: 0007b703 ld a4,0(a5) + 80004354: fd843783 ld a5,-40(s0) + 80004358: 0107b783 ld a5,16(a5) + 8000435c: 00f707b3 add a5,a4,a5 + 80004360: fef43023 sd a5,-32(s0) + 80004364: fe043703 ld a4,-32(s0) + 80004368: fd843783 ld a5,-40(s0) + 8000436c: 06f70c63 beq a4,a5,800043e4 + 80004370: fe043783 ld a5,-32(s0) + 80004374: 0027d783 lhu a5,2(a5) + 80004378: 06079663 bnez a5,800043e4 + 8000437c: 0001e797 auipc a5,0x1e + 80004380: ccc78793 addi a5,a5,-820 # 80022048 + 80004384: 0007b783 ld a5,0(a5) + 80004388: fd843703 ld a4,-40(s0) + 8000438c: 00f71a63 bne a4,a5,800043a0 + 80004390: 0001e797 auipc a5,0x1e + 80004394: cb878793 addi a5,a5,-840 # 80022048 + 80004398: fe043703 ld a4,-32(s0) + 8000439c: 00e7b023 sd a4,0(a5) + 800043a0: fd843783 ld a5,-40(s0) + 800043a4: 0087b703 ld a4,8(a5) + 800043a8: fe043783 ld a5,-32(s0) + 800043ac: 00e7b423 sd a4,8(a5) + 800043b0: 0001e797 auipc a5,0x1e + 800043b4: c8878793 addi a5,a5,-888 # 80022038 + 800043b8: 0007b783 ld a5,0(a5) + 800043bc: fe043703 ld a4,-32(s0) + 800043c0: 40f706b3 sub a3,a4,a5 + 800043c4: 0001e797 auipc a5,0x1e + 800043c8: c7478793 addi a5,a5,-908 # 80022038 + 800043cc: 0007b703 ld a4,0(a5) + 800043d0: fd843783 ld a5,-40(s0) + 800043d4: 0087b783 ld a5,8(a5) + 800043d8: 00f707b3 add a5,a4,a5 + 800043dc: 00068713 mv a4,a3 + 800043e0: 00e7b823 sd a4,16(a5) + 800043e4: 00000013 nop + 800043e8: 02813083 ld ra,40(sp) + 800043ec: 02013403 ld s0,32(sp) + 800043f0: 03010113 addi sp,sp,48 + 800043f4: 00008067 ret + +00000000800043f8 : + 800043f8: fc010113 addi sp,sp,-64 + 800043fc: 02113c23 sd ra,56(sp) + 80004400: 02813823 sd s0,48(sp) + 80004404: 04010413 addi s0,sp,64 + 80004408: fca43423 sd a0,-56(s0) + 8000440c: fcb43023 sd a1,-64(s0) + 80004410: fc843783 ld a5,-56(s0) + 80004414: 00778793 addi a5,a5,7 + 80004418: ff87f793 andi a5,a5,-8 + 8000441c: fef43423 sd a5,-24(s0) + 80004420: fc043783 ld a5,-64(s0) + 80004424: ff87f793 andi a5,a5,-8 + 80004428: fef43023 sd a5,-32(s0) + 8000442c: d49fb0ef jal ra,80000174 + 80004430: fca43c23 sd a0,-40(s0) + 80004434: 1a0020ef jal ra,800065d4 + 80004438: 00050793 mv a5,a0 + 8000443c: 02078863 beqz a5,8000446c + 80004440: 00014597 auipc a1,0x14 + 80004444: 1d858593 addi a1,a1,472 # 80018618 <__FUNCTION__.2663> + 80004448: 00012517 auipc a0,0x12 + 8000444c: a2850513 addi a0,a0,-1496 # 80015e70 + 80004450: 5cd030ef jal ra,8000821c + 80004454: 0d200613 li a2,210 + 80004458: 00014597 auipc a1,0x14 + 8000445c: 1c058593 addi a1,a1,448 # 80018618 <__FUNCTION__.2663> + 80004460: 00012517 auipc a0,0x12 + 80004464: a3850513 addi a0,a0,-1480 # 80015e98 + 80004468: 014040ef jal ra,8000847c + 8000446c: fd843503 ld a0,-40(s0) + 80004470: d0dfb0ef jal ra,8000017c + 80004474: fe043703 ld a4,-32(s0) + 80004478: 04000793 li a5,64 + 8000447c: 16e7fe63 bgeu a5,a4,800045f8 + 80004480: fe043783 ld a5,-32(s0) + 80004484: fc078793 addi a5,a5,-64 + 80004488: fe843703 ld a4,-24(s0) + 8000448c: 16e7e663 bltu a5,a4,800045f8 + 80004490: fe043703 ld a4,-32(s0) + 80004494: fe843783 ld a5,-24(s0) + 80004498: 40f707b3 sub a5,a4,a5 + 8000449c: fc078713 addi a4,a5,-64 + 800044a0: 0001e797 auipc a5,0x1e + 800044a4: bb078793 addi a5,a5,-1104 # 80022050 + 800044a8: 00e7b023 sd a4,0(a5) + 800044ac: fe843703 ld a4,-24(s0) + 800044b0: 0001e797 auipc a5,0x1e + 800044b4: b8878793 addi a5,a5,-1144 # 80022038 + 800044b8: 00e7b023 sd a4,0(a5) + 800044bc: 0001e797 auipc a5,0x1e + 800044c0: b7c78793 addi a5,a5,-1156 # 80022038 + 800044c4: 0007b783 ld a5,0(a5) + 800044c8: fcf43823 sd a5,-48(s0) + 800044cc: fd043783 ld a5,-48(s0) + 800044d0: 00002737 lui a4,0x2 + 800044d4: ea07071b addiw a4,a4,-352 + 800044d8: 00e79023 sh a4,0(a5) + 800044dc: 0001e797 auipc a5,0x1e + 800044e0: b7478793 addi a5,a5,-1164 # 80022050 + 800044e4: 0007b783 ld a5,0(a5) + 800044e8: 02078713 addi a4,a5,32 + 800044ec: fd043783 ld a5,-48(s0) + 800044f0: 00e7b423 sd a4,8(a5) + 800044f4: fd043783 ld a5,-48(s0) + 800044f8: 0007b823 sd zero,16(a5) + 800044fc: fd043783 ld a5,-48(s0) + 80004500: 00079123 sh zero,2(a5) + 80004504: 00012597 auipc a1,0x12 + 80004508: 9dc58593 addi a1,a1,-1572 # 80015ee0 + 8000450c: fd043503 ld a0,-48(s0) + 80004510: c3dff0ef jal ra,8000414c + 80004514: 0001e797 auipc a5,0x1e + 80004518: b2478793 addi a5,a5,-1244 # 80022038 + 8000451c: 0007b703 ld a4,0(a5) + 80004520: fd043783 ld a5,-48(s0) + 80004524: 0087b783 ld a5,8(a5) + 80004528: 00f70733 add a4,a4,a5 + 8000452c: 0001e797 auipc a5,0x1e + 80004530: b1478793 addi a5,a5,-1260 # 80022040 + 80004534: 00e7b023 sd a4,0(a5) + 80004538: 0001e797 auipc a5,0x1e + 8000453c: b0878793 addi a5,a5,-1272 # 80022040 + 80004540: 0007b783 ld a5,0(a5) + 80004544: 00002737 lui a4,0x2 + 80004548: ea07071b addiw a4,a4,-352 + 8000454c: 00e79023 sh a4,0(a5) + 80004550: 0001e797 auipc a5,0x1e + 80004554: af078793 addi a5,a5,-1296 # 80022040 + 80004558: 0007b783 ld a5,0(a5) + 8000455c: 00100713 li a4,1 + 80004560: 00e79123 sh a4,2(a5) + 80004564: 0001e797 auipc a5,0x1e + 80004568: aec78793 addi a5,a5,-1300 # 80022050 + 8000456c: 0007b703 ld a4,0(a5) + 80004570: 0001e797 auipc a5,0x1e + 80004574: ad078793 addi a5,a5,-1328 # 80022040 + 80004578: 0007b783 ld a5,0(a5) + 8000457c: 02070713 addi a4,a4,32 # 2020 <__STACKSIZE__-0x1fe0> + 80004580: 00e7b423 sd a4,8(a5) + 80004584: 0001e797 auipc a5,0x1e + 80004588: acc78793 addi a5,a5,-1332 # 80022050 + 8000458c: 0007b703 ld a4,0(a5) + 80004590: 0001e797 auipc a5,0x1e + 80004594: ab078793 addi a5,a5,-1360 # 80022040 + 80004598: 0007b783 ld a5,0(a5) + 8000459c: 02070713 addi a4,a4,32 + 800045a0: 00e7b823 sd a4,16(a5) + 800045a4: 0001e797 auipc a5,0x1e + 800045a8: a9c78793 addi a5,a5,-1380 # 80022040 + 800045ac: 0007b783 ld a5,0(a5) + 800045b0: 00012597 auipc a1,0x12 + 800045b4: 93058593 addi a1,a1,-1744 # 80015ee0 + 800045b8: 00078513 mv a0,a5 + 800045bc: b91ff0ef jal ra,8000414c + 800045c0: 00100693 li a3,1 + 800045c4: 00100613 li a2,1 + 800045c8: 00012597 auipc a1,0x12 + 800045cc: 92058593 addi a1,a1,-1760 # 80015ee8 + 800045d0: 00022517 auipc a0,0x22 + 800045d4: ee850513 addi a0,a0,-280 # 800264b8 + 800045d8: 8f5fc0ef jal ra,80000ecc + 800045dc: 0001e797 auipc a5,0x1e + 800045e0: a5c78793 addi a5,a5,-1444 # 80022038 + 800045e4: 0007b703 ld a4,0(a5) + 800045e8: 0001e797 auipc a5,0x1e + 800045ec: a6078793 addi a5,a5,-1440 # 80022048 + 800045f0: 00e7b023 sd a4,0(a5) + 800045f4: 0240006f j 80004618 + 800045f8: fc843783 ld a5,-56(s0) + 800045fc: fc043703 ld a4,-64(s0) + 80004600: 00070613 mv a2,a4 + 80004604: 00078593 mv a1,a5 + 80004608: 00012517 auipc a0,0x12 + 8000460c: 89850513 addi a0,a0,-1896 # 80015ea0 + 80004610: 40d030ef jal ra,8000821c + 80004614: 00000013 nop + 80004618: 03813083 ld ra,56(sp) + 8000461c: 03013403 ld s0,48(sp) + 80004620: 04010113 addi sp,sp,64 + 80004624: 00008067 ret + +0000000080004628 : + 80004628: fb010113 addi sp,sp,-80 + 8000462c: 04113423 sd ra,72(sp) + 80004630: 04813023 sd s0,64(sp) + 80004634: 05010413 addi s0,sp,80 + 80004638: faa43c23 sd a0,-72(s0) + 8000463c: fb843783 ld a5,-72(s0) + 80004640: 00079663 bnez a5,8000464c + 80004644: 00000793 li a5,0 + 80004648: 4d00006f j 80004b18 + 8000464c: b29fb0ef jal ra,80000174 + 80004650: fea43023 sd a0,-32(s0) + 80004654: 781010ef jal ra,800065d4 + 80004658: 00050793 mv a5,a0 + 8000465c: 02078863 beqz a5,8000468c + 80004660: 00014597 auipc a1,0x14 + 80004664: fd058593 addi a1,a1,-48 # 80018630 <__FUNCTION__.2672> + 80004668: 00012517 auipc a0,0x12 + 8000466c: 80850513 addi a0,a0,-2040 # 80015e70 + 80004670: 3ad030ef jal ra,8000821c + 80004674: 11800613 li a2,280 + 80004678: 00014597 auipc a1,0x14 + 8000467c: fb858593 addi a1,a1,-72 # 80018630 <__FUNCTION__.2672> + 80004680: 00012517 auipc a0,0x12 + 80004684: 81850513 addi a0,a0,-2024 # 80015e98 + 80004688: 5f5030ef jal ra,8000847c + 8000468c: fe043503 ld a0,-32(s0) + 80004690: aedfb0ef jal ra,8000017c + 80004694: fb843783 ld a5,-72(s0) + 80004698: 00778793 addi a5,a5,7 + 8000469c: ff87f793 andi a5,a5,-8 + 800046a0: faf43c23 sd a5,-72(s0) + 800046a4: 0001e797 auipc a5,0x1e + 800046a8: 9ac78793 addi a5,a5,-1620 # 80022050 + 800046ac: 0007b783 ld a5,0(a5) + 800046b0: fb843703 ld a4,-72(s0) + 800046b4: 00e7f663 bgeu a5,a4,800046c0 + 800046b8: 00000793 li a5,0 + 800046bc: 45c0006f j 80004b18 + 800046c0: fb843703 ld a4,-72(s0) + 800046c4: 01700793 li a5,23 + 800046c8: 00e7e663 bltu a5,a4,800046d4 + 800046cc: 01800793 li a5,24 + 800046d0: faf43c23 sd a5,-72(s0) + 800046d4: fff00593 li a1,-1 + 800046d8: 00022517 auipc a0,0x22 + 800046dc: de050513 addi a0,a0,-544 # 800264b8 + 800046e0: 8b9fc0ef jal ra,80000f98 + 800046e4: 0001e797 auipc a5,0x1e + 800046e8: 96478793 addi a5,a5,-1692 # 80022048 + 800046ec: 0007b703 ld a4,0(a5) + 800046f0: 0001e797 auipc a5,0x1e + 800046f4: 94878793 addi a5,a5,-1720 # 80022038 + 800046f8: 0007b783 ld a5,0(a5) + 800046fc: 40f707b3 sub a5,a4,a5 + 80004700: fef43423 sd a5,-24(s0) + 80004704: 3e80006f j 80004aec + 80004708: 0001e797 auipc a5,0x1e + 8000470c: 93078793 addi a5,a5,-1744 # 80022038 + 80004710: 0007b703 ld a4,0(a5) + 80004714: fe843783 ld a5,-24(s0) + 80004718: 00f707b3 add a5,a4,a5 + 8000471c: fcf43c23 sd a5,-40(s0) + 80004720: fd843783 ld a5,-40(s0) + 80004724: 0027d783 lhu a5,2(a5) + 80004728: 3a079463 bnez a5,80004ad0 + 8000472c: fd843783 ld a5,-40(s0) + 80004730: 0087b703 ld a4,8(a5) + 80004734: fe843783 ld a5,-24(s0) + 80004738: 40f707b3 sub a5,a4,a5 + 8000473c: fe078793 addi a5,a5,-32 + 80004740: fb843703 ld a4,-72(s0) + 80004744: 38e7e663 bltu a5,a4,80004ad0 + 80004748: fd843783 ld a5,-40(s0) + 8000474c: 0087b703 ld a4,8(a5) + 80004750: fe843783 ld a5,-24(s0) + 80004754: 40f707b3 sub a5,a4,a5 + 80004758: fe078713 addi a4,a5,-32 + 8000475c: fb843783 ld a5,-72(s0) + 80004760: 03878793 addi a5,a5,56 + 80004764: 12f76263 bltu a4,a5,80004888 + 80004768: fe843703 ld a4,-24(s0) + 8000476c: fb843783 ld a5,-72(s0) + 80004770: 00f707b3 add a5,a4,a5 + 80004774: 02078793 addi a5,a5,32 + 80004778: fcf43823 sd a5,-48(s0) + 8000477c: 0001e797 auipc a5,0x1e + 80004780: 8bc78793 addi a5,a5,-1860 # 80022038 + 80004784: 0007b703 ld a4,0(a5) + 80004788: fd043783 ld a5,-48(s0) + 8000478c: 00f707b3 add a5,a4,a5 + 80004790: fcf43423 sd a5,-56(s0) + 80004794: fc843783 ld a5,-56(s0) + 80004798: 00002737 lui a4,0x2 + 8000479c: ea07071b addiw a4,a4,-352 + 800047a0: 00e79023 sh a4,0(a5) + 800047a4: fc843783 ld a5,-56(s0) + 800047a8: 00079123 sh zero,2(a5) + 800047ac: fd843783 ld a5,-40(s0) + 800047b0: 0087b703 ld a4,8(a5) + 800047b4: fc843783 ld a5,-56(s0) + 800047b8: 00e7b423 sd a4,8(a5) + 800047bc: fc843783 ld a5,-56(s0) + 800047c0: fe843703 ld a4,-24(s0) + 800047c4: 00e7b823 sd a4,16(a5) + 800047c8: 00011597 auipc a1,0x11 + 800047cc: 72858593 addi a1,a1,1832 # 80015ef0 + 800047d0: fc843503 ld a0,-56(s0) + 800047d4: 979ff0ef jal ra,8000414c + 800047d8: fd843783 ld a5,-40(s0) + 800047dc: fd043703 ld a4,-48(s0) + 800047e0: 00e7b423 sd a4,8(a5) + 800047e4: fd843783 ld a5,-40(s0) + 800047e8: 00100713 li a4,1 + 800047ec: 00e79123 sh a4,2(a5) + 800047f0: fc843783 ld a5,-56(s0) + 800047f4: 0087b703 ld a4,8(a5) + 800047f8: 0001e797 auipc a5,0x1e + 800047fc: 85878793 addi a5,a5,-1960 # 80022050 + 80004800: 0007b783 ld a5,0(a5) + 80004804: 02078793 addi a5,a5,32 + 80004808: 02f70263 beq a4,a5,8000482c + 8000480c: 0001e797 auipc a5,0x1e + 80004810: 82c78793 addi a5,a5,-2004 # 80022038 + 80004814: 0007b703 ld a4,0(a5) + 80004818: fc843783 ld a5,-56(s0) + 8000481c: 0087b783 ld a5,8(a5) + 80004820: 00f707b3 add a5,a4,a5 + 80004824: fd043703 ld a4,-48(s0) + 80004828: 00e7b823 sd a4,16(a5) + 8000482c: 0001e797 auipc a5,0x1e + 80004830: 82c78793 addi a5,a5,-2004 # 80022058 + 80004834: 0007b703 ld a4,0(a5) + 80004838: fb843783 ld a5,-72(s0) + 8000483c: 00f707b3 add a5,a4,a5 + 80004840: 02078713 addi a4,a5,32 + 80004844: 0001e797 auipc a5,0x1e + 80004848: 81478793 addi a5,a5,-2028 # 80022058 + 8000484c: 00e7b023 sd a4,0(a5) + 80004850: 0001e797 auipc a5,0x1e + 80004854: 81078793 addi a5,a5,-2032 # 80022060 + 80004858: 0007b703 ld a4,0(a5) + 8000485c: 0001d797 auipc a5,0x1d + 80004860: 7fc78793 addi a5,a5,2044 # 80022058 + 80004864: 0007b783 ld a5,0(a5) + 80004868: 08f77e63 bgeu a4,a5,80004904 + 8000486c: 0001d797 auipc a5,0x1d + 80004870: 7ec78793 addi a5,a5,2028 # 80022058 + 80004874: 0007b703 ld a4,0(a5) + 80004878: 0001d797 auipc a5,0x1d + 8000487c: 7e878793 addi a5,a5,2024 # 80022060 + 80004880: 00e7b023 sd a4,0(a5) + 80004884: 0800006f j 80004904 + 80004888: fd843783 ld a5,-40(s0) + 8000488c: 00100713 li a4,1 + 80004890: 00e79123 sh a4,2(a5) + 80004894: fd843783 ld a5,-40(s0) + 80004898: 0087b783 ld a5,8(a5) + 8000489c: 0001d717 auipc a4,0x1d + 800048a0: 79c70713 addi a4,a4,1948 # 80022038 + 800048a4: 00073703 ld a4,0(a4) + 800048a8: fd843683 ld a3,-40(s0) + 800048ac: 40e68733 sub a4,a3,a4 + 800048b0: 40e78733 sub a4,a5,a4 + 800048b4: 0001d797 auipc a5,0x1d + 800048b8: 7a478793 addi a5,a5,1956 # 80022058 + 800048bc: 0007b783 ld a5,0(a5) + 800048c0: 00f70733 add a4,a4,a5 + 800048c4: 0001d797 auipc a5,0x1d + 800048c8: 79478793 addi a5,a5,1940 # 80022058 + 800048cc: 00e7b023 sd a4,0(a5) + 800048d0: 0001d797 auipc a5,0x1d + 800048d4: 79078793 addi a5,a5,1936 # 80022060 + 800048d8: 0007b703 ld a4,0(a5) + 800048dc: 0001d797 auipc a5,0x1d + 800048e0: 77c78793 addi a5,a5,1916 # 80022058 + 800048e4: 0007b783 ld a5,0(a5) + 800048e8: 00f77e63 bgeu a4,a5,80004904 + 800048ec: 0001d797 auipc a5,0x1d + 800048f0: 76c78793 addi a5,a5,1900 # 80022058 + 800048f4: 0007b703 ld a4,0(a5) + 800048f8: 0001d797 auipc a5,0x1d + 800048fc: 76878793 addi a5,a5,1896 # 80022060 + 80004900: 00e7b023 sd a4,0(a5) + 80004904: fd843783 ld a5,-40(s0) + 80004908: 00002737 lui a4,0x2 + 8000490c: ea07071b addiw a4,a4,-352 + 80004910: 00e79023 sh a4,0(a5) + 80004914: 0b8010ef jal ra,800059cc + 80004918: 00050793 mv a5,a0 + 8000491c: 00078e63 beqz a5,80004938 + 80004920: 0ac010ef jal ra,800059cc + 80004924: 00050793 mv a5,a0 + 80004928: 00078593 mv a1,a5 + 8000492c: fd843503 ld a0,-40(s0) + 80004930: 81dff0ef jal ra,8000414c + 80004934: 0140006f j 80004948 + 80004938: 00011597 auipc a1,0x11 + 8000493c: 5c058593 addi a1,a1,1472 # 80015ef8 + 80004940: fd843503 ld a0,-40(s0) + 80004944: 809ff0ef jal ra,8000414c + 80004948: 0001d797 auipc a5,0x1d + 8000494c: 70078793 addi a5,a5,1792 # 80022048 + 80004950: 0007b783 ld a5,0(a5) + 80004954: fd843703 ld a4,-40(s0) + 80004958: 0af71663 bne a4,a5,80004a04 + 8000495c: 0300006f j 8000498c + 80004960: 0001d797 auipc a5,0x1d + 80004964: 6d878793 addi a5,a5,1752 # 80022038 + 80004968: 0007b703 ld a4,0(a5) + 8000496c: 0001d797 auipc a5,0x1d + 80004970: 6dc78793 addi a5,a5,1756 # 80022048 + 80004974: 0007b783 ld a5,0(a5) + 80004978: 0087b783 ld a5,8(a5) + 8000497c: 00f70733 add a4,a4,a5 + 80004980: 0001d797 auipc a5,0x1d + 80004984: 6c878793 addi a5,a5,1736 # 80022048 + 80004988: 00e7b023 sd a4,0(a5) + 8000498c: 0001d797 auipc a5,0x1d + 80004990: 6bc78793 addi a5,a5,1724 # 80022048 + 80004994: 0007b783 ld a5,0(a5) + 80004998: 0027d783 lhu a5,2(a5) + 8000499c: 02078063 beqz a5,800049bc + 800049a0: 0001d797 auipc a5,0x1d + 800049a4: 6a878793 addi a5,a5,1704 # 80022048 + 800049a8: 0007b703 ld a4,0(a5) + 800049ac: 0001d797 auipc a5,0x1d + 800049b0: 69478793 addi a5,a5,1684 # 80022040 + 800049b4: 0007b783 ld a5,0(a5) + 800049b8: faf714e3 bne a4,a5,80004960 + 800049bc: 0001d797 auipc a5,0x1d + 800049c0: 68c78793 addi a5,a5,1676 # 80022048 + 800049c4: 0007b703 ld a4,0(a5) + 800049c8: 0001d797 auipc a5,0x1d + 800049cc: 67878793 addi a5,a5,1656 # 80022040 + 800049d0: 0007b783 ld a5,0(a5) + 800049d4: 02f70863 beq a4,a5,80004a04 + 800049d8: 0001d797 auipc a5,0x1d + 800049dc: 67078793 addi a5,a5,1648 # 80022048 + 800049e0: 0007b783 ld a5,0(a5) + 800049e4: 0027d783 lhu a5,2(a5) + 800049e8: 00078e63 beqz a5,80004a04 + 800049ec: 18200613 li a2,386 + 800049f0: 00014597 auipc a1,0x14 + 800049f4: c4058593 addi a1,a1,-960 # 80018630 <__FUNCTION__.2672> + 800049f8: 00011517 auipc a0,0x11 + 800049fc: 50850513 addi a0,a0,1288 # 80015f00 + 80004a00: 27d030ef jal ra,8000847c + 80004a04: 00022517 auipc a0,0x22 + 80004a08: ab450513 addi a0,a0,-1356 # 800264b8 + 80004a0c: fd8fc0ef jal ra,800011e4 + 80004a10: fd843703 ld a4,-40(s0) + 80004a14: fb843783 ld a5,-72(s0) + 80004a18: 00f707b3 add a5,a4,a5 + 80004a1c: 02078793 addi a5,a5,32 + 80004a20: 0001d717 auipc a4,0x1d + 80004a24: 62070713 addi a4,a4,1568 # 80022040 + 80004a28: 00073703 ld a4,0(a4) + 80004a2c: 00f77e63 bgeu a4,a5,80004a48 + 80004a30: 18600613 li a2,390 + 80004a34: 00014597 auipc a1,0x14 + 80004a38: bfc58593 addi a1,a1,-1028 # 80018630 <__FUNCTION__.2672> + 80004a3c: 00011517 auipc a0,0x11 + 80004a40: 4ec50513 addi a0,a0,1260 # 80015f28 + 80004a44: 239030ef jal ra,8000847c + 80004a48: fd843783 ld a5,-40(s0) + 80004a4c: 02078793 addi a5,a5,32 + 80004a50: 0077f793 andi a5,a5,7 + 80004a54: 00078e63 beqz a5,80004a70 + 80004a58: 18700613 li a2,391 + 80004a5c: 00014597 auipc a1,0x14 + 80004a60: bd458593 addi a1,a1,-1068 # 80018630 <__FUNCTION__.2672> + 80004a64: 00011517 auipc a0,0x11 + 80004a68: 50c50513 addi a0,a0,1292 # 80015f70 + 80004a6c: 211030ef jal ra,8000847c + 80004a70: fd843783 ld a5,-40(s0) + 80004a74: 0077f793 andi a5,a5,7 + 80004a78: 00078e63 beqz a5,80004a94 + 80004a7c: 18800613 li a2,392 + 80004a80: 00014597 auipc a1,0x14 + 80004a84: bb058593 addi a1,a1,-1104 # 80018630 <__FUNCTION__.2672> + 80004a88: 00011517 auipc a0,0x11 + 80004a8c: 53850513 addi a0,a0,1336 # 80015fc0 + 80004a90: 1ed030ef jal ra,8000847c + 80004a94: 0001d797 auipc a5,0x1d + 80004a98: 59478793 addi a5,a5,1428 # 80022028 + 80004a9c: 0007b783 ld a5,0(a5) + 80004aa0: 02078263 beqz a5,80004ac4 + 80004aa4: 0001d797 auipc a5,0x1d + 80004aa8: 58478793 addi a5,a5,1412 # 80022028 + 80004aac: 0007b703 ld a4,0(a5) + 80004ab0: fd843783 ld a5,-40(s0) + 80004ab4: 02078793 addi a5,a5,32 + 80004ab8: fb843583 ld a1,-72(s0) + 80004abc: 00078513 mv a0,a5 + 80004ac0: 000700e7 jalr a4 + 80004ac4: fd843783 ld a5,-40(s0) + 80004ac8: 02078793 addi a5,a5,32 + 80004acc: 04c0006f j 80004b18 + 80004ad0: 0001d797 auipc a5,0x1d + 80004ad4: 56878793 addi a5,a5,1384 # 80022038 + 80004ad8: 0007b703 ld a4,0(a5) + 80004adc: fe843783 ld a5,-24(s0) + 80004ae0: 00f707b3 add a5,a4,a5 + 80004ae4: 0087b783 ld a5,8(a5) + 80004ae8: fef43423 sd a5,-24(s0) + 80004aec: 0001d797 auipc a5,0x1d + 80004af0: 56478793 addi a5,a5,1380 # 80022050 + 80004af4: 0007b703 ld a4,0(a5) + 80004af8: fb843783 ld a5,-72(s0) + 80004afc: 40f707b3 sub a5,a4,a5 + 80004b00: fe843703 ld a4,-24(s0) + 80004b04: c0f762e3 bltu a4,a5,80004708 + 80004b08: 00022517 auipc a0,0x22 + 80004b0c: 9b050513 addi a0,a0,-1616 # 800264b8 + 80004b10: ed4fc0ef jal ra,800011e4 + 80004b14: 00000793 li a5,0 + 80004b18: 00078513 mv a0,a5 + 80004b1c: 04813083 ld ra,72(sp) + 80004b20: 04013403 ld s0,64(sp) + 80004b24: 05010113 addi sp,sp,80 + 80004b28: 00008067 ret + +0000000080004b2c : + 80004b2c: fa010113 addi sp,sp,-96 + 80004b30: 04113c23 sd ra,88(sp) + 80004b34: 04813823 sd s0,80(sp) + 80004b38: 06010413 addi s0,sp,96 + 80004b3c: faa43423 sd a0,-88(s0) + 80004b40: fab43023 sd a1,-96(s0) + 80004b44: e30fb0ef jal ra,80000174 + 80004b48: fea43423 sd a0,-24(s0) + 80004b4c: 289010ef jal ra,800065d4 + 80004b50: 00050793 mv a5,a0 + 80004b54: 02078863 beqz a5,80004b84 + 80004b58: 00014597 auipc a1,0x14 + 80004b5c: ae858593 addi a1,a1,-1304 # 80018640 <__FUNCTION__.2690> + 80004b60: 00011517 auipc a0,0x11 + 80004b64: 31050513 addi a0,a0,784 # 80015e70 + 80004b68: 6b4030ef jal ra,8000821c + 80004b6c: 1ac00613 li a2,428 + 80004b70: 00014597 auipc a1,0x14 + 80004b74: ad058593 addi a1,a1,-1328 # 80018640 <__FUNCTION__.2690> + 80004b78: 00011517 auipc a0,0x11 + 80004b7c: 32050513 addi a0,a0,800 # 80015e98 + 80004b80: 0fd030ef jal ra,8000847c + 80004b84: fe843503 ld a0,-24(s0) + 80004b88: df4fb0ef jal ra,8000017c + 80004b8c: fa043783 ld a5,-96(s0) + 80004b90: 00778793 addi a5,a5,7 + 80004b94: ff87f793 andi a5,a5,-8 + 80004b98: faf43023 sd a5,-96(s0) + 80004b9c: 0001d797 auipc a5,0x1d + 80004ba0: 4b478793 addi a5,a5,1204 # 80022050 + 80004ba4: 0007b783 ld a5,0(a5) + 80004ba8: fa043703 ld a4,-96(s0) + 80004bac: 00e7f663 bgeu a5,a4,80004bb8 + 80004bb0: 00000793 li a5,0 + 80004bb4: 2580006f j 80004e0c + 80004bb8: fa043783 ld a5,-96(s0) + 80004bbc: 00079a63 bnez a5,80004bd0 + 80004bc0: fa843503 ld a0,-88(s0) + 80004bc4: 2d0000ef jal ra,80004e94 + 80004bc8: 00000793 li a5,0 + 80004bcc: 2400006f j 80004e0c + 80004bd0: fa843783 ld a5,-88(s0) + 80004bd4: 00079a63 bnez a5,80004be8 + 80004bd8: fa043503 ld a0,-96(s0) + 80004bdc: a4dff0ef jal ra,80004628 + 80004be0: 00050793 mv a5,a0 + 80004be4: 2280006f j 80004e0c + 80004be8: fff00593 li a1,-1 + 80004bec: 00022517 auipc a0,0x22 + 80004bf0: 8cc50513 addi a0,a0,-1844 # 800264b8 + 80004bf4: ba4fc0ef jal ra,80000f98 + 80004bf8: 0001d797 auipc a5,0x1d + 80004bfc: 44078793 addi a5,a5,1088 # 80022038 + 80004c00: 0007b783 ld a5,0(a5) + 80004c04: fa843703 ld a4,-88(s0) + 80004c08: 00f76c63 bltu a4,a5,80004c20 + 80004c0c: 0001d797 auipc a5,0x1d + 80004c10: 43478793 addi a5,a5,1076 # 80022040 + 80004c14: 0007b783 ld a5,0(a5) + 80004c18: fa843703 ld a4,-88(s0) + 80004c1c: 00f76c63 bltu a4,a5,80004c34 + 80004c20: 00022517 auipc a0,0x22 + 80004c24: 89850513 addi a0,a0,-1896 # 800264b8 + 80004c28: dbcfc0ef jal ra,800011e4 + 80004c2c: fa843783 ld a5,-88(s0) + 80004c30: 1dc0006f j 80004e0c + 80004c34: fa843783 ld a5,-88(s0) + 80004c38: fe078793 addi a5,a5,-32 + 80004c3c: fef43023 sd a5,-32(s0) + 80004c40: 0001d797 auipc a5,0x1d + 80004c44: 3f878793 addi a5,a5,1016 # 80022038 + 80004c48: 0007b783 ld a5,0(a5) + 80004c4c: fe043703 ld a4,-32(s0) + 80004c50: 40f707b3 sub a5,a4,a5 + 80004c54: fcf43c23 sd a5,-40(s0) + 80004c58: fe043783 ld a5,-32(s0) + 80004c5c: 0087b703 ld a4,8(a5) + 80004c60: fd843783 ld a5,-40(s0) + 80004c64: 40f707b3 sub a5,a4,a5 + 80004c68: fe078793 addi a5,a5,-32 + 80004c6c: fcf43823 sd a5,-48(s0) + 80004c70: fd043703 ld a4,-48(s0) + 80004c74: fa043783 ld a5,-96(s0) + 80004c78: 00f71c63 bne a4,a5,80004c90 + 80004c7c: 00022517 auipc a0,0x22 + 80004c80: 83c50513 addi a0,a0,-1988 # 800264b8 + 80004c84: d60fc0ef jal ra,800011e4 + 80004c88: fa843783 ld a5,-88(s0) + 80004c8c: 1800006f j 80004e0c + 80004c90: fa043783 ld a5,-96(s0) + 80004c94: 03878793 addi a5,a5,56 + 80004c98: fd043703 ld a4,-48(s0) + 80004c9c: 12e7f263 bgeu a5,a4,80004dc0 + 80004ca0: fa043703 ld a4,-96(s0) + 80004ca4: fd043783 ld a5,-48(s0) + 80004ca8: 40f70733 sub a4,a4,a5 + 80004cac: 0001d797 auipc a5,0x1d + 80004cb0: 3ac78793 addi a5,a5,940 # 80022058 + 80004cb4: 0007b783 ld a5,0(a5) + 80004cb8: 00f70733 add a4,a4,a5 + 80004cbc: 0001d797 auipc a5,0x1d + 80004cc0: 39c78793 addi a5,a5,924 # 80022058 + 80004cc4: 00e7b023 sd a4,0(a5) + 80004cc8: fd843703 ld a4,-40(s0) + 80004ccc: fa043783 ld a5,-96(s0) + 80004cd0: 00f707b3 add a5,a4,a5 + 80004cd4: 02078793 addi a5,a5,32 + 80004cd8: fcf43023 sd a5,-64(s0) + 80004cdc: 0001d797 auipc a5,0x1d + 80004ce0: 35c78793 addi a5,a5,860 # 80022038 + 80004ce4: 0007b703 ld a4,0(a5) + 80004ce8: fc043783 ld a5,-64(s0) + 80004cec: 00f707b3 add a5,a4,a5 + 80004cf0: faf43c23 sd a5,-72(s0) + 80004cf4: fb843783 ld a5,-72(s0) + 80004cf8: 00002737 lui a4,0x2 + 80004cfc: ea07071b addiw a4,a4,-352 + 80004d00: 00e79023 sh a4,0(a5) + 80004d04: fb843783 ld a5,-72(s0) + 80004d08: 00079123 sh zero,2(a5) + 80004d0c: fe043783 ld a5,-32(s0) + 80004d10: 0087b703 ld a4,8(a5) + 80004d14: fb843783 ld a5,-72(s0) + 80004d18: 00e7b423 sd a4,8(a5) + 80004d1c: fb843783 ld a5,-72(s0) + 80004d20: fd843703 ld a4,-40(s0) + 80004d24: 00e7b823 sd a4,16(a5) + 80004d28: 00011597 auipc a1,0x11 + 80004d2c: 1c858593 addi a1,a1,456 # 80015ef0 + 80004d30: fb843503 ld a0,-72(s0) + 80004d34: c18ff0ef jal ra,8000414c + 80004d38: fe043783 ld a5,-32(s0) + 80004d3c: fc043703 ld a4,-64(s0) + 80004d40: 00e7b423 sd a4,8(a5) + 80004d44: fb843783 ld a5,-72(s0) + 80004d48: 0087b703 ld a4,8(a5) + 80004d4c: 0001d797 auipc a5,0x1d + 80004d50: 30478793 addi a5,a5,772 # 80022050 + 80004d54: 0007b783 ld a5,0(a5) + 80004d58: 02078793 addi a5,a5,32 + 80004d5c: 02f70263 beq a4,a5,80004d80 + 80004d60: 0001d797 auipc a5,0x1d + 80004d64: 2d878793 addi a5,a5,728 # 80022038 + 80004d68: 0007b703 ld a4,0(a5) + 80004d6c: fb843783 ld a5,-72(s0) + 80004d70: 0087b783 ld a5,8(a5) + 80004d74: 00f707b3 add a5,a4,a5 + 80004d78: fc043703 ld a4,-64(s0) + 80004d7c: 00e7b823 sd a4,16(a5) + 80004d80: 0001d797 auipc a5,0x1d + 80004d84: 2c878793 addi a5,a5,712 # 80022048 + 80004d88: 0007b783 ld a5,0(a5) + 80004d8c: fb843703 ld a4,-72(s0) + 80004d90: 00f77a63 bgeu a4,a5,80004da4 + 80004d94: 0001d797 auipc a5,0x1d + 80004d98: 2b478793 addi a5,a5,692 # 80022048 + 80004d9c: fb843703 ld a4,-72(s0) + 80004da0: 00e7b023 sd a4,0(a5) + 80004da4: fb843503 ld a0,-72(s0) + 80004da8: c60ff0ef jal ra,80004208 + 80004dac: 00021517 auipc a0,0x21 + 80004db0: 70c50513 addi a0,a0,1804 # 800264b8 + 80004db4: c30fc0ef jal ra,800011e4 + 80004db8: fa843783 ld a5,-88(s0) + 80004dbc: 0500006f j 80004e0c + 80004dc0: 00021517 auipc a0,0x21 + 80004dc4: 6f850513 addi a0,a0,1784 # 800264b8 + 80004dc8: c1cfc0ef jal ra,800011e4 + 80004dcc: fa043503 ld a0,-96(s0) + 80004dd0: 859ff0ef jal ra,80004628 + 80004dd4: fca43423 sd a0,-56(s0) + 80004dd8: fc843783 ld a5,-56(s0) + 80004ddc: 02078663 beqz a5,80004e08 + 80004de0: fd043703 ld a4,-48(s0) + 80004de4: fa043783 ld a5,-96(s0) + 80004de8: 00f77463 bgeu a4,a5,80004df0 + 80004dec: 00070793 mv a5,a4 + 80004df0: 00078613 mv a2,a5 + 80004df4: fa843583 ld a1,-88(s0) + 80004df8: fc843503 ld a0,-56(s0) + 80004dfc: 639010ef jal ra,80006c34 + 80004e00: fa843503 ld a0,-88(s0) + 80004e04: 090000ef jal ra,80004e94 + 80004e08: fc843783 ld a5,-56(s0) + 80004e0c: 00078513 mv a0,a5 + 80004e10: 05813083 ld ra,88(sp) + 80004e14: 05013403 ld s0,80(sp) + 80004e18: 06010113 addi sp,sp,96 + 80004e1c: 00008067 ret + +0000000080004e20 : + 80004e20: fd010113 addi sp,sp,-48 + 80004e24: 02113423 sd ra,40(sp) + 80004e28: 02813023 sd s0,32(sp) + 80004e2c: 03010413 addi s0,sp,48 + 80004e30: fca43c23 sd a0,-40(s0) + 80004e34: fcb43823 sd a1,-48(s0) + 80004e38: fd043583 ld a1,-48(s0) + 80004e3c: fd843503 ld a0,-40(s0) + 80004e40: b10fb0ef jal ra,80000150 <__muldi3> + 80004e44: 00050793 mv a5,a0 + 80004e48: 00078513 mv a0,a5 + 80004e4c: fdcff0ef jal ra,80004628 + 80004e50: fea43423 sd a0,-24(s0) + 80004e54: fe843783 ld a5,-24(s0) + 80004e58: 02078263 beqz a5,80004e7c + 80004e5c: fd043583 ld a1,-48(s0) + 80004e60: fd843503 ld a0,-40(s0) + 80004e64: aecfb0ef jal ra,80000150 <__muldi3> + 80004e68: 00050793 mv a5,a0 + 80004e6c: 00078613 mv a2,a5 + 80004e70: 00000593 li a1,0 + 80004e74: fe843503 ld a0,-24(s0) + 80004e78: 44d010ef jal ra,80006ac4 + 80004e7c: fe843783 ld a5,-24(s0) + 80004e80: 00078513 mv a0,a5 + 80004e84: 02813083 ld ra,40(sp) + 80004e88: 02013403 ld s0,32(sp) + 80004e8c: 03010113 addi sp,sp,48 + 80004e90: 00008067 ret + +0000000080004e94 : + 80004e94: fd010113 addi sp,sp,-48 + 80004e98: 02113423 sd ra,40(sp) + 80004e9c: 02813023 sd s0,32(sp) + 80004ea0: 03010413 addi s0,sp,48 + 80004ea4: fca43c23 sd a0,-40(s0) + 80004ea8: fd843783 ld a5,-40(s0) + 80004eac: 26078863 beqz a5,8000511c + 80004eb0: ac4fb0ef jal ra,80000174 + 80004eb4: fea43423 sd a0,-24(s0) + 80004eb8: 71c010ef jal ra,800065d4 + 80004ebc: 00050793 mv a5,a0 + 80004ec0: 02078863 beqz a5,80004ef0 + 80004ec4: 00015597 auipc a1,0x15 + 80004ec8: e9c58593 addi a1,a1,-356 # 80019d60 <__rt_init_end> + 80004ecc: 00011517 auipc a0,0x11 + 80004ed0: fa450513 addi a0,a0,-92 # 80015e70 + 80004ed4: 348030ef jal ra,8000821c + 80004ed8: 22f00613 li a2,559 + 80004edc: 00015597 auipc a1,0x15 + 80004ee0: e8458593 addi a1,a1,-380 # 80019d60 <__rt_init_end> + 80004ee4: 00011517 auipc a0,0x11 + 80004ee8: fb450513 addi a0,a0,-76 # 80015e98 + 80004eec: 590030ef jal ra,8000847c + 80004ef0: fe843503 ld a0,-24(s0) + 80004ef4: a88fb0ef jal ra,8000017c + 80004ef8: fd843783 ld a5,-40(s0) + 80004efc: 0077f793 andi a5,a5,7 + 80004f00: 00078e63 beqz a5,80004f1c + 80004f04: 23100613 li a2,561 + 80004f08: 00015597 auipc a1,0x15 + 80004f0c: e5858593 addi a1,a1,-424 # 80019d60 <__rt_init_end> + 80004f10: 00011517 auipc a0,0x11 + 80004f14: 0e050513 addi a0,a0,224 # 80015ff0 + 80004f18: 564030ef jal ra,8000847c + 80004f1c: 0001d797 auipc a5,0x1d + 80004f20: 11c78793 addi a5,a5,284 # 80022038 + 80004f24: 0007b783 ld a5,0(a5) + 80004f28: fd843703 ld a4,-40(s0) + 80004f2c: 00f76c63 bltu a4,a5,80004f44 + 80004f30: 0001d797 auipc a5,0x1d + 80004f34: 11078793 addi a5,a5,272 # 80022040 + 80004f38: 0007b783 ld a5,0(a5) + 80004f3c: fd843703 ld a4,-40(s0) + 80004f40: 00f76e63 bltu a4,a5,80004f5c + 80004f44: 23200613 li a2,562 + 80004f48: 00015597 auipc a1,0x15 + 80004f4c: e1858593 addi a1,a1,-488 # 80019d60 <__rt_init_end> + 80004f50: 00011517 auipc a0,0x11 + 80004f54: 0d050513 addi a0,a0,208 # 80016020 + 80004f58: 524030ef jal ra,8000847c + 80004f5c: 0001d797 auipc a5,0x1d + 80004f60: 0d478793 addi a5,a5,212 # 80022030 + 80004f64: 0007b783 ld a5,0(a5) + 80004f68: 00078c63 beqz a5,80004f80 + 80004f6c: 0001d797 auipc a5,0x1d + 80004f70: 0c478793 addi a5,a5,196 # 80022030 + 80004f74: 0007b783 ld a5,0(a5) + 80004f78: fd843503 ld a0,-40(s0) + 80004f7c: 000780e7 jalr a5 + 80004f80: 0001d797 auipc a5,0x1d + 80004f84: 0b878793 addi a5,a5,184 # 80022038 + 80004f88: 0007b783 ld a5,0(a5) + 80004f8c: fd843703 ld a4,-40(s0) + 80004f90: 18f76a63 bltu a4,a5,80005124 + 80004f94: 0001d797 auipc a5,0x1d + 80004f98: 0ac78793 addi a5,a5,172 # 80022040 + 80004f9c: 0007b783 ld a5,0(a5) + 80004fa0: fd843703 ld a4,-40(s0) + 80004fa4: 18f77063 bgeu a4,a5,80005124 + 80004fa8: fd843783 ld a5,-40(s0) + 80004fac: fe078793 addi a5,a5,-32 + 80004fb0: fef43023 sd a5,-32(s0) + 80004fb4: fff00593 li a1,-1 + 80004fb8: 00021517 auipc a0,0x21 + 80004fbc: 50050513 addi a0,a0,1280 # 800264b8 + 80004fc0: fd9fb0ef jal ra,80000f98 + 80004fc4: fe043783 ld a5,-32(s0) + 80004fc8: 0027d783 lhu a5,2(a5) + 80004fcc: 00078e63 beqz a5,80004fe8 + 80004fd0: fe043783 ld a5,-32(s0) + 80004fd4: 0007d783 lhu a5,0(a5) + 80004fd8: 0007871b sext.w a4,a5 + 80004fdc: 000027b7 lui a5,0x2 + 80004fe0: ea078793 addi a5,a5,-352 # 1ea0 <__STACKSIZE__-0x2160> + 80004fe4: 04f70063 beq a4,a5,80005024 + 80004fe8: 00011517 auipc a0,0x11 + 80004fec: 09850513 addi a0,a0,152 # 80016080 + 80004ff0: 22c030ef jal ra,8000821c + 80004ff4: fe043783 ld a5,-32(s0) + 80004ff8: 0027d783 lhu a5,2(a5) + 80004ffc: 0007871b sext.w a4,a5 + 80005000: fe043783 ld a5,-32(s0) + 80005004: 0007d783 lhu a5,0(a5) + 80005008: 0007879b sext.w a5,a5 + 8000500c: 00078693 mv a3,a5 + 80005010: 00070613 mv a2,a4 + 80005014: fe043583 ld a1,-32(s0) + 80005018: 00011517 auipc a0,0x11 + 8000501c: 08850513 addi a0,a0,136 # 800160a0 + 80005020: 1fc030ef jal ra,8000821c + 80005024: fe043783 ld a5,-32(s0) + 80005028: 0027d783 lhu a5,2(a5) + 8000502c: 00079e63 bnez a5,80005048 + 80005030: 25100613 li a2,593 + 80005034: 00015597 auipc a1,0x15 + 80005038: d2c58593 addi a1,a1,-724 # 80019d60 <__rt_init_end> + 8000503c: 00011517 auipc a0,0x11 + 80005040: 09450513 addi a0,a0,148 # 800160d0 + 80005044: 438030ef jal ra,8000847c + 80005048: fe043783 ld a5,-32(s0) + 8000504c: 0007d783 lhu a5,0(a5) + 80005050: 0007871b sext.w a4,a5 + 80005054: 000027b7 lui a5,0x2 + 80005058: ea078793 addi a5,a5,-352 # 1ea0 <__STACKSIZE__-0x2160> + 8000505c: 00f70e63 beq a4,a5,80005078 + 80005060: 25200613 li a2,594 + 80005064: 00015597 auipc a1,0x15 + 80005068: cfc58593 addi a1,a1,-772 # 80019d60 <__rt_init_end> + 8000506c: 00011517 auipc a0,0x11 + 80005070: 07450513 addi a0,a0,116 # 800160e0 + 80005074: 408030ef jal ra,8000847c + 80005078: fe043783 ld a5,-32(s0) + 8000507c: 00079123 sh zero,2(a5) + 80005080: fe043783 ld a5,-32(s0) + 80005084: 00002737 lui a4,0x2 + 80005088: ea07071b addiw a4,a4,-352 + 8000508c: 00e79023 sh a4,0(a5) + 80005090: 00011597 auipc a1,0x11 + 80005094: e6058593 addi a1,a1,-416 # 80015ef0 + 80005098: fe043503 ld a0,-32(s0) + 8000509c: 8b0ff0ef jal ra,8000414c + 800050a0: 0001d797 auipc a5,0x1d + 800050a4: fa878793 addi a5,a5,-88 # 80022048 + 800050a8: 0007b783 ld a5,0(a5) + 800050ac: fe043703 ld a4,-32(s0) + 800050b0: 00f77a63 bgeu a4,a5,800050c4 + 800050b4: 0001d797 auipc a5,0x1d + 800050b8: f9478793 addi a5,a5,-108 # 80022048 + 800050bc: fe043703 ld a4,-32(s0) + 800050c0: 00e7b023 sd a4,0(a5) + 800050c4: 0001d797 auipc a5,0x1d + 800050c8: f7478793 addi a5,a5,-140 # 80022038 + 800050cc: 0007b783 ld a5,0(a5) + 800050d0: fe043703 ld a4,-32(s0) + 800050d4: 40f707b3 sub a5,a4,a5 + 800050d8: 00078713 mv a4,a5 + 800050dc: fe043783 ld a5,-32(s0) + 800050e0: 0087b783 ld a5,8(a5) + 800050e4: 40f70733 sub a4,a4,a5 + 800050e8: 0001d797 auipc a5,0x1d + 800050ec: f7078793 addi a5,a5,-144 # 80022058 + 800050f0: 0007b783 ld a5,0(a5) + 800050f4: 00f70733 add a4,a4,a5 + 800050f8: 0001d797 auipc a5,0x1d + 800050fc: f6078793 addi a5,a5,-160 # 80022058 + 80005100: 00e7b023 sd a4,0(a5) + 80005104: fe043503 ld a0,-32(s0) + 80005108: 900ff0ef jal ra,80004208 + 8000510c: 00021517 auipc a0,0x21 + 80005110: 3ac50513 addi a0,a0,940 # 800264b8 + 80005114: 8d0fc0ef jal ra,800011e4 + 80005118: 0100006f j 80005128 + 8000511c: 00000013 nop + 80005120: 0080006f j 80005128 + 80005124: 00000013 nop + 80005128: 02813083 ld ra,40(sp) + 8000512c: 02013403 ld s0,32(sp) + 80005130: 03010113 addi sp,sp,48 + 80005134: 00008067 ret + +0000000080005138 : + 80005138: ff010113 addi sp,sp,-16 + 8000513c: 00113423 sd ra,8(sp) + 80005140: 00813023 sd s0,0(sp) + 80005144: 01010413 addi s0,sp,16 + 80005148: 0001d797 auipc a5,0x1d + 8000514c: f0878793 addi a5,a5,-248 # 80022050 + 80005150: 0007b783 ld a5,0(a5) + 80005154: 00078593 mv a1,a5 + 80005158: 00011517 auipc a0,0x11 + 8000515c: fa850513 addi a0,a0,-88 # 80016100 + 80005160: 0bc030ef jal ra,8000821c + 80005164: 0001d797 auipc a5,0x1d + 80005168: ef478793 addi a5,a5,-268 # 80022058 + 8000516c: 0007b783 ld a5,0(a5) + 80005170: 00078593 mv a1,a5 + 80005174: 00011517 auipc a0,0x11 + 80005178: fa450513 addi a0,a0,-92 # 80016118 + 8000517c: 0a0030ef jal ra,8000821c + 80005180: 0001d797 auipc a5,0x1d + 80005184: ee078793 addi a5,a5,-288 # 80022060 + 80005188: 0007b783 ld a5,0(a5) + 8000518c: 00078593 mv a1,a5 + 80005190: 00011517 auipc a0,0x11 + 80005194: fa050513 addi a0,a0,-96 # 80016130 + 80005198: 084030ef jal ra,8000821c + 8000519c: 00000013 nop + 800051a0: 00813083 ld ra,8(sp) + 800051a4: 00013403 ld s0,0(sp) + 800051a8: 01010113 addi sp,sp,16 + 800051ac: 00008067 ret + +00000000800051b0 : + 800051b0: fd010113 addi sp,sp,-48 + 800051b4: 02113423 sd ra,40(sp) + 800051b8: 02813023 sd s0,32(sp) + 800051bc: 03010413 addi s0,sp,48 + 800051c0: fb5fa0ef jal ra,80000174 + 800051c4: 00050793 mv a5,a0 + 800051c8: fef43023 sd a5,-32(s0) + 800051cc: 0001d797 auipc a5,0x1d + 800051d0: e6c78793 addi a5,a5,-404 # 80022038 + 800051d4: 0007b783 ld a5,0(a5) + 800051d8: fef43423 sd a5,-24(s0) + 800051dc: 0980006f j 80005274 + 800051e0: fe843783 ld a5,-24(s0) + 800051e4: 0001d717 auipc a4,0x1d + 800051e8: e5470713 addi a4,a4,-428 # 80022038 + 800051ec: 00073703 ld a4,0(a4) + 800051f0: 40e787b3 sub a5,a5,a4 + 800051f4: fcf42e23 sw a5,-36(s0) + 800051f8: fdc42783 lw a5,-36(s0) + 800051fc: 0007879b sext.w a5,a5 + 80005200: 0807ce63 bltz a5,8000529c + 80005204: 0001d797 auipc a5,0x1d + 80005208: e4c78793 addi a5,a5,-436 # 80022050 + 8000520c: 0007b783 ld a5,0(a5) + 80005210: 0007871b sext.w a4,a5 + 80005214: fdc42783 lw a5,-36(s0) + 80005218: 0007879b sext.w a5,a5 + 8000521c: 08f74463 blt a4,a5,800052a4 + 80005220: fe843783 ld a5,-24(s0) + 80005224: 0007d783 lhu a5,0(a5) + 80005228: 0007871b sext.w a4,a5 + 8000522c: 000027b7 lui a5,0x2 + 80005230: ea078793 addi a5,a5,-352 # 1ea0 <__STACKSIZE__-0x2160> + 80005234: 06f71c63 bne a4,a5,800052ac + 80005238: fe843783 ld a5,-24(s0) + 8000523c: 0027d783 lhu a5,2(a5) + 80005240: 00078c63 beqz a5,80005258 + 80005244: fe843783 ld a5,-24(s0) + 80005248: 0027d783 lhu a5,2(a5) + 8000524c: 0007871b sext.w a4,a5 + 80005250: 00100793 li a5,1 + 80005254: 06f71063 bne a4,a5,800052b4 + 80005258: 0001d797 auipc a5,0x1d + 8000525c: de078793 addi a5,a5,-544 # 80022038 + 80005260: 0007b703 ld a4,0(a5) + 80005264: fe843783 ld a5,-24(s0) + 80005268: 0087b783 ld a5,8(a5) + 8000526c: 00f707b3 add a5,a4,a5 + 80005270: fef43423 sd a5,-24(s0) + 80005274: 0001d797 auipc a5,0x1d + 80005278: dcc78793 addi a5,a5,-564 # 80022040 + 8000527c: 0007b783 ld a5,0(a5) + 80005280: fe843703 ld a4,-24(s0) + 80005284: f4f71ee3 bne a4,a5,800051e0 + 80005288: fe043783 ld a5,-32(s0) + 8000528c: 00078513 mv a0,a5 + 80005290: eedfa0ef jal ra,8000017c + 80005294: 00000793 li a5,0 + 80005298: 0a80006f j 80005340 + 8000529c: 00000013 nop + 800052a0: 0180006f j 800052b8 + 800052a4: 00000013 nop + 800052a8: 0100006f j 800052b8 + 800052ac: 00000013 nop + 800052b0: 0080006f j 800052b8 + 800052b4: 00000013 nop + 800052b8: 00011517 auipc a0,0x11 + 800052bc: e9850513 addi a0,a0,-360 # 80016150 + 800052c0: 75d020ef jal ra,8000821c + 800052c4: fe843583 ld a1,-24(s0) + 800052c8: 00011517 auipc a0,0x11 + 800052cc: ea050513 addi a0,a0,-352 # 80016168 + 800052d0: 74d020ef jal ra,8000821c + 800052d4: fe843783 ld a5,-24(s0) + 800052d8: 0007d783 lhu a5,0(a5) + 800052dc: 0007879b sext.w a5,a5 + 800052e0: 00078593 mv a1,a5 + 800052e4: 00011517 auipc a0,0x11 + 800052e8: e9c50513 addi a0,a0,-356 # 80016180 + 800052ec: 731020ef jal ra,8000821c + 800052f0: fe843783 ld a5,-24(s0) + 800052f4: 0027d783 lhu a5,2(a5) + 800052f8: 0007879b sext.w a5,a5 + 800052fc: 00078593 mv a1,a5 + 80005300: 00011517 auipc a0,0x11 + 80005304: e9850513 addi a0,a0,-360 # 80016198 + 80005308: 715020ef jal ra,8000821c + 8000530c: fe843783 ld a5,-24(s0) + 80005310: 0087b703 ld a4,8(a5) + 80005314: fdc42783 lw a5,-36(s0) + 80005318: 40f707b3 sub a5,a4,a5 + 8000531c: fe078793 addi a5,a5,-32 + 80005320: 00078593 mv a1,a5 + 80005324: 00011517 auipc a0,0x11 + 80005328: e8450513 addi a0,a0,-380 # 800161a8 + 8000532c: 6f1020ef jal ra,8000821c + 80005330: fe043783 ld a5,-32(s0) + 80005334: 00078513 mv a0,a5 + 80005338: e45fa0ef jal ra,8000017c + 8000533c: 00000793 li a5,0 + 80005340: 00078513 mv a0,a5 + 80005344: 02813083 ld ra,40(sp) + 80005348: 02013403 ld s0,32(sp) + 8000534c: 03010113 addi sp,sp,48 + 80005350: 00008067 ret + +0000000080005354 : + 80005354: fd010113 addi sp,sp,-48 + 80005358: 02113423 sd ra,40(sp) + 8000535c: 02813023 sd s0,32(sp) + 80005360: 03010413 addi s0,sp,48 + 80005364: 00050793 mv a5,a0 + 80005368: fcb43823 sd a1,-48(s0) + 8000536c: fcf42e23 sw a5,-36(s0) + 80005370: dc9ff0ef jal ra,80005138 + 80005374: 00011517 auipc a0,0x11 + 80005378: e4450513 addi a0,a0,-444 # 800161b8 + 8000537c: 6a1020ef jal ra,8000821c + 80005380: 0001d797 auipc a5,0x1d + 80005384: cb878793 addi a5,a5,-840 # 80022038 + 80005388: 0007b783 ld a5,0(a5) + 8000538c: 00078593 mv a1,a5 + 80005390: 00011517 auipc a0,0x11 + 80005394: e4050513 addi a0,a0,-448 # 800161d0 + 80005398: 685020ef jal ra,8000821c + 8000539c: 0001d797 auipc a5,0x1d + 800053a0: cac78793 addi a5,a5,-852 # 80022048 + 800053a4: 0007b783 ld a5,0(a5) + 800053a8: 00078593 mv a1,a5 + 800053ac: 00011517 auipc a0,0x11 + 800053b0: e3c50513 addi a0,a0,-452 # 800161e8 + 800053b4: 669020ef jal ra,8000821c + 800053b8: 0001d797 auipc a5,0x1d + 800053bc: c8878793 addi a5,a5,-888 # 80022040 + 800053c0: 0007b783 ld a5,0(a5) + 800053c4: 00078593 mv a1,a5 + 800053c8: 00011517 auipc a0,0x11 + 800053cc: e3850513 addi a0,a0,-456 # 80016200 + 800053d0: 64d020ef jal ra,8000821c + 800053d4: 00011517 auipc a0,0x11 + 800053d8: e4450513 addi a0,a0,-444 # 80016218 + 800053dc: 641020ef jal ra,8000821c + 800053e0: 0001d797 auipc a5,0x1d + 800053e4: c5878793 addi a5,a5,-936 # 80022038 + 800053e8: 0007b783 ld a5,0(a5) + 800053ec: fef43423 sd a5,-24(s0) + 800053f0: 16c0006f j 8000555c + 800053f4: fe843783 ld a5,-24(s0) + 800053f8: 0001d717 auipc a4,0x1d + 800053fc: c4070713 addi a4,a4,-960 # 80022038 + 80005400: 00073703 ld a4,0(a4) + 80005404: 40e787b3 sub a5,a5,a4 + 80005408: fef42223 sw a5,-28(s0) + 8000540c: fe843583 ld a1,-24(s0) + 80005410: 00011517 auipc a0,0x11 + 80005414: e2850513 addi a0,a0,-472 # 80016238 + 80005418: 605020ef jal ra,8000821c + 8000541c: fe843783 ld a5,-24(s0) + 80005420: 0087b783 ld a5,8(a5) + 80005424: 0007871b sext.w a4,a5 + 80005428: fe442783 lw a5,-28(s0) + 8000542c: 40f707bb subw a5,a4,a5 + 80005430: 0007879b sext.w a5,a5 + 80005434: fe07879b addiw a5,a5,-32 + 80005438: 0007879b sext.w a5,a5 + 8000543c: fef42023 sw a5,-32(s0) + 80005440: fe042783 lw a5,-32(s0) + 80005444: 0007871b sext.w a4,a5 + 80005448: 3ff00793 li a5,1023 + 8000544c: 00e7ce63 blt a5,a4,80005468 + 80005450: fe042783 lw a5,-32(s0) + 80005454: 00078593 mv a1,a5 + 80005458: 00011517 auipc a0,0x11 + 8000545c: df050513 addi a0,a0,-528 # 80016248 + 80005460: 5bd020ef jal ra,8000821c + 80005464: 0680006f j 800054cc + 80005468: fe042783 lw a5,-32(s0) + 8000546c: 0007871b sext.w a4,a5 + 80005470: 001007b7 lui a5,0x100 + 80005474: 02f75863 bge a4,a5,800054a4 + 80005478: fe042783 lw a5,-32(s0) + 8000547c: 41f7d71b sraiw a4,a5,0x1f + 80005480: 0167571b srliw a4,a4,0x16 + 80005484: 00f707bb addw a5,a4,a5 + 80005488: 40a7d79b sraiw a5,a5,0xa + 8000548c: 0007879b sext.w a5,a5 + 80005490: 00078593 mv a1,a5 + 80005494: 00011517 auipc a0,0x11 + 80005498: dbc50513 addi a0,a0,-580 # 80016250 + 8000549c: 581020ef jal ra,8000821c + 800054a0: 02c0006f j 800054cc + 800054a4: fe042783 lw a5,-32(s0) + 800054a8: 41f7d71b sraiw a4,a5,0x1f + 800054ac: 00c7571b srliw a4,a4,0xc + 800054b0: 00f707bb addw a5,a4,a5 + 800054b4: 4147d79b sraiw a5,a5,0x14 + 800054b8: 0007879b sext.w a5,a5 + 800054bc: 00078593 mv a1,a5 + 800054c0: 00011517 auipc a0,0x11 + 800054c4: d9850513 addi a0,a0,-616 # 80016258 + 800054c8: 555020ef jal ra,8000821c + 800054cc: fe843783 ld a5,-24(s0) + 800054d0: 0187c783 lbu a5,24(a5) # 100018 <__STACKSIZE__+0xfc018> + 800054d4: 0007859b sext.w a1,a5 + 800054d8: fe843783 ld a5,-24(s0) + 800054dc: 0197c783 lbu a5,25(a5) + 800054e0: 0007861b sext.w a2,a5 + 800054e4: fe843783 ld a5,-24(s0) + 800054e8: 01a7c783 lbu a5,26(a5) + 800054ec: 0007869b sext.w a3,a5 + 800054f0: fe843783 ld a5,-24(s0) + 800054f4: 01b7c783 lbu a5,27(a5) + 800054f8: 0007879b sext.w a5,a5 + 800054fc: 00078713 mv a4,a5 + 80005500: 00011517 auipc a0,0x11 + 80005504: d6050513 addi a0,a0,-672 # 80016260 + 80005508: 515020ef jal ra,8000821c + 8000550c: fe843783 ld a5,-24(s0) + 80005510: 0007d783 lhu a5,0(a5) + 80005514: 0007871b sext.w a4,a5 + 80005518: 000027b7 lui a5,0x2 + 8000551c: ea078793 addi a5,a5,-352 # 1ea0 <__STACKSIZE__-0x2160> + 80005520: 00f70a63 beq a4,a5,80005534 + 80005524: 00011517 auipc a0,0x11 + 80005528: d4c50513 addi a0,a0,-692 # 80016270 + 8000552c: 4f1020ef jal ra,8000821c + 80005530: 0100006f j 80005540 + 80005534: 00011517 auipc a0,0x11 + 80005538: d4450513 addi a0,a0,-700 # 80016278 + 8000553c: 4e1020ef jal ra,8000821c + 80005540: 0001d797 auipc a5,0x1d + 80005544: af878793 addi a5,a5,-1288 # 80022038 + 80005548: 0007b703 ld a4,0(a5) + 8000554c: fe843783 ld a5,-24(s0) + 80005550: 0087b783 ld a5,8(a5) + 80005554: 00f707b3 add a5,a4,a5 + 80005558: fef43423 sd a5,-24(s0) + 8000555c: 0001d797 auipc a5,0x1d + 80005560: ae478793 addi a5,a5,-1308 # 80022040 + 80005564: 0007b783 ld a5,0(a5) + 80005568: fe843703 ld a4,-24(s0) + 8000556c: e8f714e3 bne a4,a5,800053f4 + 80005570: 00000793 li a5,0 + 80005574: 00078513 mv a0,a5 + 80005578: 02813083 ld ra,40(sp) + 8000557c: 02013403 ld s0,32(sp) + 80005580: 03010113 addi sp,sp,48 + 80005584: 00008067 ret + +0000000080005588 : + 80005588: fe010113 addi sp,sp,-32 + 8000558c: 00813c23 sd s0,24(sp) + 80005590: 02010413 addi s0,sp,32 + 80005594: fea43423 sd a0,-24(s0) + 80005598: fe843783 ld a5,-24(s0) + 8000559c: fe843703 ld a4,-24(s0) + 800055a0: 00e7b423 sd a4,8(a5) + 800055a4: fe843783 ld a5,-24(s0) + 800055a8: 0087b703 ld a4,8(a5) + 800055ac: fe843783 ld a5,-24(s0) + 800055b0: 00e7b023 sd a4,0(a5) + 800055b4: 00000013 nop + 800055b8: 01813403 ld s0,24(sp) + 800055bc: 02010113 addi sp,sp,32 + 800055c0: 00008067 ret + +00000000800055c4 : + 800055c4: fe010113 addi sp,sp,-32 + 800055c8: 00813c23 sd s0,24(sp) + 800055cc: 02010413 addi s0,sp,32 + 800055d0: fea43423 sd a0,-24(s0) + 800055d4: fe843783 ld a5,-24(s0) + 800055d8: 0007b783 ld a5,0(a5) + 800055dc: fe843703 ld a4,-24(s0) + 800055e0: 00873703 ld a4,8(a4) + 800055e4: 00e7b423 sd a4,8(a5) + 800055e8: fe843783 ld a5,-24(s0) + 800055ec: 0087b783 ld a5,8(a5) + 800055f0: fe843703 ld a4,-24(s0) + 800055f4: 00073703 ld a4,0(a4) + 800055f8: 00e7b023 sd a4,0(a5) + 800055fc: fe843783 ld a5,-24(s0) + 80005600: fe843703 ld a4,-24(s0) + 80005604: 00e7b423 sd a4,8(a5) + 80005608: fe843783 ld a5,-24(s0) + 8000560c: 0087b703 ld a4,8(a5) + 80005610: fe843783 ld a5,-24(s0) + 80005614: 00e7b023 sd a4,0(a5) + 80005618: 00000013 nop + 8000561c: 01813403 ld s0,24(sp) + 80005620: 02010113 addi sp,sp,32 + 80005624: 00008067 ret + +0000000080005628 <_rt_thread_cleanup_execute>: + 80005628: fd010113 addi sp,sp,-48 + 8000562c: 02113423 sd ra,40(sp) + 80005630: 02813023 sd s0,32(sp) + 80005634: 00913c23 sd s1,24(sp) + 80005638: 03010413 addi s0,sp,48 + 8000563c: fca43c23 sd a0,-40(s0) + 80005640: b35fa0ef jal ra,80000174 + 80005644: 00050493 mv s1,a0 + 80005648: fd843783 ld a5,-40(s0) + 8000564c: 0d87b783 ld a5,216(a5) + 80005650: 00078a63 beqz a5,80005664 <_rt_thread_cleanup_execute+0x3c> + 80005654: fd843783 ld a5,-40(s0) + 80005658: 0d87b783 ld a5,216(a5) + 8000565c: fd843503 ld a0,-40(s0) + 80005660: 000780e7 jalr a5 + 80005664: 00048513 mv a0,s1 + 80005668: b15fa0ef jal ra,8000017c + 8000566c: 00000013 nop + 80005670: 02813083 ld ra,40(sp) + 80005674: 02013403 ld s0,32(sp) + 80005678: 01813483 ld s1,24(sp) + 8000567c: 03010113 addi sp,sp,48 + 80005680: 00008067 ret + +0000000080005684 <_rt_thread_exit>: + 80005684: fd010113 addi sp,sp,-48 + 80005688: 02113423 sd ra,40(sp) + 8000568c: 02813023 sd s0,32(sp) + 80005690: 00913c23 sd s1,24(sp) + 80005694: 03010413 addi s0,sp,48 + 80005698: 334000ef jal ra,800059cc + 8000569c: fca43c23 sd a0,-40(s0) + 800056a0: ad5fa0ef jal ra,80000174 + 800056a4: 00050493 mv s1,a0 + 800056a8: fd843503 ld a0,-40(s0) + 800056ac: f7dff0ef jal ra,80005628 <_rt_thread_cleanup_execute> + 800056b0: fd843503 ld a0,-40(s0) + 800056b4: 95cfd0ef jal ra,80002810 + 800056b8: fd843783 ld a5,-40(s0) + 800056bc: 00400713 li a4,4 + 800056c0: 06e78423 sb a4,104(a5) + 800056c4: fd843783 ld a5,-40(s0) + 800056c8: 08878793 addi a5,a5,136 + 800056cc: 00078513 mv a0,a5 + 800056d0: d75fd0ef jal ra,80003444 + 800056d4: fd843503 ld a0,-40(s0) + 800056d8: 8b5fc0ef jal ra,80001f8c + 800056dc: 00050793 mv a5,a0 + 800056e0: 00078713 mv a4,a5 + 800056e4: 00100793 li a5,1 + 800056e8: 00f71863 bne a4,a5,800056f8 <_rt_thread_exit+0x74> + 800056ec: fd843503 ld a0,-40(s0) + 800056f0: dc4fc0ef jal ra,80001cb4 + 800056f4: 00c0006f j 80005700 <_rt_thread_exit+0x7c> + 800056f8: fd843503 ld a0,-40(s0) + 800056fc: 6cd020ef jal ra,800085c8 + 80005700: cf9fc0ef jal ra,800023f8 + 80005704: 00048513 mv a0,s1 + 80005708: a75fa0ef jal ra,8000017c + 8000570c: 00000013 nop + 80005710: 02813083 ld ra,40(sp) + 80005714: 02013403 ld s0,32(sp) + 80005718: 01813483 ld s1,24(sp) + 8000571c: 03010113 addi sp,sp,48 + 80005720: 00008067 ret + +0000000080005724 <_rt_thread_init>: + 80005724: fb010113 addi sp,sp,-80 + 80005728: 04113423 sd ra,72(sp) + 8000572c: 04813023 sd s0,64(sp) + 80005730: 05010413 addi s0,sp,80 + 80005734: fea43423 sd a0,-24(s0) + 80005738: feb43023 sd a1,-32(s0) + 8000573c: fcc43c23 sd a2,-40(s0) + 80005740: fcd43823 sd a3,-48(s0) + 80005744: fce43423 sd a4,-56(s0) + 80005748: 00080693 mv a3,a6 + 8000574c: 00088713 mv a4,a7 + 80005750: fcf42223 sw a5,-60(s0) + 80005754: 00068793 mv a5,a3 + 80005758: fcf401a3 sb a5,-61(s0) + 8000575c: 00070793 mv a5,a4 + 80005760: faf42e23 sw a5,-68(s0) + 80005764: fe843783 ld a5,-24(s0) + 80005768: 02878793 addi a5,a5,40 + 8000576c: 00078513 mv a0,a5 + 80005770: e19ff0ef jal ra,80005588 + 80005774: fe843783 ld a5,-24(s0) + 80005778: fd843703 ld a4,-40(s0) + 8000577c: 04e7b023 sd a4,64(a5) + 80005780: fe843783 ld a5,-24(s0) + 80005784: fd043703 ld a4,-48(s0) + 80005788: 04e7b423 sd a4,72(a5) + 8000578c: fe843783 ld a5,-24(s0) + 80005790: fc843703 ld a4,-56(s0) + 80005794: 04e7b823 sd a4,80(a5) + 80005798: fe843783 ld a5,-24(s0) + 8000579c: fc442703 lw a4,-60(s0) + 800057a0: 04e7ac23 sw a4,88(a5) + 800057a4: fe843783 ld a5,-24(s0) + 800057a8: 0507b703 ld a4,80(a5) + 800057ac: fe843783 ld a5,-24(s0) + 800057b0: 0587a783 lw a5,88(a5) + 800057b4: 02079793 slli a5,a5,0x20 + 800057b8: 0207d793 srli a5,a5,0x20 + 800057bc: 00078613 mv a2,a5 + 800057c0: 02300593 li a1,35 + 800057c4: 00070513 mv a0,a4 + 800057c8: 2fc010ef jal ra,80006ac4 + 800057cc: fe843783 ld a5,-24(s0) + 800057d0: 0407b503 ld a0,64(a5) + 800057d4: fe843783 ld a5,-24(s0) + 800057d8: 0487b583 ld a1,72(a5) + 800057dc: fe843783 ld a5,-24(s0) + 800057e0: 0507b703 ld a4,80(a5) + 800057e4: fe843783 ld a5,-24(s0) + 800057e8: 0587a783 lw a5,88(a5) + 800057ec: 02079793 slli a5,a5,0x20 + 800057f0: 0207d793 srli a5,a5,0x20 + 800057f4: ff878793 addi a5,a5,-8 + 800057f8: 00f707b3 add a5,a4,a5 + 800057fc: 00000697 auipc a3,0x0 + 80005800: e8868693 addi a3,a3,-376 # 80005684 <_rt_thread_exit> + 80005804: 00078613 mv a2,a5 + 80005808: 320030ef jal ra,80008b28 + 8000580c: 00050713 mv a4,a0 + 80005810: fe843783 ld a5,-24(s0) + 80005814: 02e7bc23 sd a4,56(a5) + 80005818: fc344783 lbu a5,-61(s0) + 8000581c: 0ff7f713 andi a4,a5,255 + 80005820: 01f00793 li a5,31 + 80005824: 00e7fe63 bgeu a5,a4,80005840 <_rt_thread_init+0x11c> + 80005828: 0ae00613 li a2,174 + 8000582c: 00013597 auipc a1,0x13 + 80005830: e2458593 addi a1,a1,-476 # 80018650 <__FUNCTION__.2648> + 80005834: 00011517 auipc a0,0x11 + 80005838: a4c50513 addi a0,a0,-1460 # 80016280 + 8000583c: 441020ef jal ra,8000847c + 80005840: fe843783 ld a5,-24(s0) + 80005844: fc344703 lbu a4,-61(s0) + 80005848: 06e78523 sb a4,106(a5) + 8000584c: fe843783 ld a5,-24(s0) + 80005850: fc344703 lbu a4,-61(s0) + 80005854: 06e784a3 sb a4,105(a5) + 80005858: fe843783 ld a5,-24(s0) + 8000585c: 0607a623 sw zero,108(a5) + 80005860: fbc46703 lwu a4,-68(s0) + 80005864: fe843783 ld a5,-24(s0) + 80005868: 06e7bc23 sd a4,120(a5) + 8000586c: fbc46703 lwu a4,-68(s0) + 80005870: fe843783 ld a5,-24(s0) + 80005874: 08e7b023 sd a4,128(a5) + 80005878: fe843783 ld a5,-24(s0) + 8000587c: 0607b023 sd zero,96(a5) + 80005880: fe843783 ld a5,-24(s0) + 80005884: 06078423 sb zero,104(a5) + 80005888: fe843783 ld a5,-24(s0) + 8000588c: 0c07bc23 sd zero,216(a5) + 80005890: fe843783 ld a5,-24(s0) + 80005894: 0e07b023 sd zero,224(a5) + 80005898: fe843783 ld a5,-24(s0) + 8000589c: 08878513 addi a0,a5,136 + 800058a0: fe843583 ld a1,-24(s0) + 800058a4: 00000793 li a5,0 + 800058a8: 00000713 li a4,0 + 800058ac: fe843683 ld a3,-24(s0) + 800058b0: 00001617 auipc a2,0x1 + 800058b4: b3c60613 addi a2,a2,-1220 # 800063ec + 800058b8: af1fd0ef jal ra,800033a8 + 800058bc: 0001c797 auipc a5,0x1c + 800058c0: 7bc78793 addi a5,a5,1980 # 80022078 + 800058c4: 0007b783 ld a5,0(a5) + 800058c8: 00078c63 beqz a5,800058e0 <_rt_thread_init+0x1bc> + 800058cc: 0001c797 auipc a5,0x1c + 800058d0: 7ac78793 addi a5,a5,1964 # 80022078 + 800058d4: 0007b783 ld a5,0(a5) + 800058d8: fe843503 ld a0,-24(s0) + 800058dc: 000780e7 jalr a5 + 800058e0: 00000793 li a5,0 + 800058e4: 00078513 mv a0,a5 + 800058e8: 04813083 ld ra,72(sp) + 800058ec: 04013403 ld s0,64(sp) + 800058f0: 05010113 addi sp,sp,80 + 800058f4: 00008067 ret + +00000000800058f8 : + 800058f8: fb010113 addi sp,sp,-80 + 800058fc: 04113423 sd ra,72(sp) + 80005900: 04813023 sd s0,64(sp) + 80005904: 05010413 addi s0,sp,80 + 80005908: fea43423 sd a0,-24(s0) + 8000590c: feb43023 sd a1,-32(s0) + 80005910: fcc43c23 sd a2,-40(s0) + 80005914: fcd43823 sd a3,-48(s0) + 80005918: fce43423 sd a4,-56(s0) + 8000591c: 00080693 mv a3,a6 + 80005920: 00088713 mv a4,a7 + 80005924: fcf42223 sw a5,-60(s0) + 80005928: 00068793 mv a5,a3 + 8000592c: fcf401a3 sb a5,-61(s0) + 80005930: 00070793 mv a5,a4 + 80005934: faf42e23 sw a5,-68(s0) + 80005938: fe843783 ld a5,-24(s0) + 8000593c: 00079e63 bnez a5,80005958 + 80005940: 10f00613 li a2,271 + 80005944: 00013597 auipc a1,0x13 + 80005948: d1c58593 addi a1,a1,-740 # 80018660 <__FUNCTION__.2660> + 8000594c: 00011517 auipc a0,0x11 + 80005950: 95c50513 addi a0,a0,-1700 # 800162a8 + 80005954: 329020ef jal ra,8000847c + 80005958: fc843783 ld a5,-56(s0) + 8000595c: 00079e63 bnez a5,80005978 + 80005960: 11000613 li a2,272 + 80005964: 00013597 auipc a1,0x13 + 80005968: cfc58593 addi a1,a1,-772 # 80018660 <__FUNCTION__.2660> + 8000596c: 00011517 auipc a0,0x11 + 80005970: 95450513 addi a0,a0,-1708 # 800162c0 + 80005974: 309020ef jal ra,8000847c + 80005978: fe043603 ld a2,-32(s0) + 8000597c: 00100593 li a1,1 + 80005980: fe843503 ld a0,-24(s0) + 80005984: 9d8fc0ef jal ra,80001b5c + 80005988: fbc42683 lw a3,-68(s0) + 8000598c: fc344703 lbu a4,-61(s0) + 80005990: fc442783 lw a5,-60(s0) + 80005994: 00068893 mv a7,a3 + 80005998: 00070813 mv a6,a4 + 8000599c: fc843703 ld a4,-56(s0) + 800059a0: fd043683 ld a3,-48(s0) + 800059a4: fd843603 ld a2,-40(s0) + 800059a8: fe043583 ld a1,-32(s0) + 800059ac: fe843503 ld a0,-24(s0) + 800059b0: d75ff0ef jal ra,80005724 <_rt_thread_init> + 800059b4: 00050793 mv a5,a0 + 800059b8: 00078513 mv a0,a5 + 800059bc: 04813083 ld ra,72(sp) + 800059c0: 04013403 ld s0,64(sp) + 800059c4: 05010113 addi sp,sp,80 + 800059c8: 00008067 ret + +00000000800059cc : + 800059cc: ff010113 addi sp,sp,-16 + 800059d0: 00813423 sd s0,8(sp) + 800059d4: 01010413 addi s0,sp,16 + 800059d8: 0001c797 auipc a5,0x1c + 800059dc: 61878793 addi a5,a5,1560 # 80021ff0 + 800059e0: 0007b783 ld a5,0(a5) + 800059e4: 00078513 mv a0,a5 + 800059e8: 00813403 ld s0,8(sp) + 800059ec: 01010113 addi sp,sp,16 + 800059f0: 00008067 ret + +00000000800059f4 : + 800059f4: fe010113 addi sp,sp,-32 + 800059f8: 00113c23 sd ra,24(sp) + 800059fc: 00813823 sd s0,16(sp) + 80005a00: 02010413 addi s0,sp,32 + 80005a04: fea43423 sd a0,-24(s0) + 80005a08: fe843783 ld a5,-24(s0) + 80005a0c: 00079e63 bnez a5,80005a28 + 80005a10: 14100613 li a2,321 + 80005a14: 00013597 auipc a1,0x13 + 80005a18: c5c58593 addi a1,a1,-932 # 80018670 <__FUNCTION__.2669> + 80005a1c: 00011517 auipc a0,0x11 + 80005a20: 88c50513 addi a0,a0,-1908 # 800162a8 + 80005a24: 259020ef jal ra,8000847c + 80005a28: fe843783 ld a5,-24(s0) + 80005a2c: 0687c783 lbu a5,104(a5) + 80005a30: 0007879b sext.w a5,a5 + 80005a34: 0077f793 andi a5,a5,7 + 80005a38: 0007879b sext.w a5,a5 + 80005a3c: 00078e63 beqz a5,80005a58 + 80005a40: 14200613 li a2,322 + 80005a44: 00013597 auipc a1,0x13 + 80005a48: c2c58593 addi a1,a1,-980 # 80018670 <__FUNCTION__.2669> + 80005a4c: 00011517 auipc a0,0x11 + 80005a50: 88c50513 addi a0,a0,-1908 # 800162d8 + 80005a54: 229020ef jal ra,8000847c + 80005a58: fe843503 ld a0,-24(s0) + 80005a5c: d98fc0ef jal ra,80001ff4 + 80005a60: 00050793 mv a5,a0 + 80005a64: 00078713 mv a4,a5 + 80005a68: 00100793 li a5,1 + 80005a6c: 00f70e63 beq a4,a5,80005a88 + 80005a70: 14300613 li a2,323 + 80005a74: 00013597 auipc a1,0x13 + 80005a78: bfc58593 addi a1,a1,-1028 # 80018670 <__FUNCTION__.2669> + 80005a7c: 00011517 auipc a0,0x11 + 80005a80: 89450513 addi a0,a0,-1900 # 80016310 + 80005a84: 1f9020ef jal ra,8000847c + 80005a88: fe843783 ld a5,-24(s0) + 80005a8c: 06a7c703 lbu a4,106(a5) + 80005a90: fe843783 ld a5,-24(s0) + 80005a94: 06e784a3 sb a4,105(a5) + 80005a98: fe843783 ld a5,-24(s0) + 80005a9c: 0697c783 lbu a5,105(a5) + 80005aa0: 0007879b sext.w a5,a5 + 80005aa4: 00100713 li a4,1 + 80005aa8: 00f717b3 sll a5,a4,a5 + 80005aac: 0007871b sext.w a4,a5 + 80005ab0: fe843783 ld a5,-24(s0) + 80005ab4: 06e7a623 sw a4,108(a5) + 80005ab8: fe843783 ld a5,-24(s0) + 80005abc: 00200713 li a4,2 + 80005ac0: 06e78423 sb a4,104(a5) + 80005ac4: fe843503 ld a0,-24(s0) + 80005ac8: 01d000ef jal ra,800062e4 + 80005acc: f01ff0ef jal ra,800059cc + 80005ad0: 00050793 mv a5,a0 + 80005ad4: 00078463 beqz a5,80005adc + 80005ad8: 921fc0ef jal ra,800023f8 + 80005adc: 00000793 li a5,0 + 80005ae0: 00078513 mv a0,a5 + 80005ae4: 01813083 ld ra,24(sp) + 80005ae8: 01013403 ld s0,16(sp) + 80005aec: 02010113 addi sp,sp,32 + 80005af0: 00008067 ret + +0000000080005af4 : + 80005af4: fd010113 addi sp,sp,-48 + 80005af8: 02113423 sd ra,40(sp) + 80005afc: 02813023 sd s0,32(sp) + 80005b00: 03010413 addi s0,sp,48 + 80005b04: fca43c23 sd a0,-40(s0) + 80005b08: fd843783 ld a5,-40(s0) + 80005b0c: 00079e63 bnez a5,80005b28 + 80005b10: 16e00613 li a2,366 + 80005b14: 00013597 auipc a1,0x13 + 80005b18: b7458593 addi a1,a1,-1164 # 80018688 <__FUNCTION__.2674> + 80005b1c: 00010517 auipc a0,0x10 + 80005b20: 78c50513 addi a0,a0,1932 # 800162a8 + 80005b24: 159020ef jal ra,8000847c + 80005b28: fd843503 ld a0,-40(s0) + 80005b2c: cc8fc0ef jal ra,80001ff4 + 80005b30: 00050793 mv a5,a0 + 80005b34: 00078713 mv a4,a5 + 80005b38: 00100793 li a5,1 + 80005b3c: 00f70e63 beq a4,a5,80005b58 + 80005b40: 16f00613 li a2,367 + 80005b44: 00013597 auipc a1,0x13 + 80005b48: b4458593 addi a1,a1,-1212 # 80018688 <__FUNCTION__.2674> + 80005b4c: 00010517 auipc a0,0x10 + 80005b50: 7c450513 addi a0,a0,1988 # 80016310 + 80005b54: 129020ef jal ra,8000847c + 80005b58: fd843503 ld a0,-40(s0) + 80005b5c: c30fc0ef jal ra,80001f8c + 80005b60: 00050793 mv a5,a0 + 80005b64: 00079e63 bnez a5,80005b80 + 80005b68: 17000613 li a2,368 + 80005b6c: 00013597 auipc a1,0x13 + 80005b70: b1c58593 addi a1,a1,-1252 # 80018688 <__FUNCTION__.2674> + 80005b74: 00010517 auipc a0,0x10 + 80005b78: 7e450513 addi a0,a0,2020 # 80016358 + 80005b7c: 101020ef jal ra,8000847c + 80005b80: fd843783 ld a5,-40(s0) + 80005b84: 0687c783 lbu a5,104(a5) + 80005b88: 0007879b sext.w a5,a5 + 80005b8c: 0077f793 andi a5,a5,7 + 80005b90: 0007879b sext.w a5,a5 + 80005b94: 00078713 mv a4,a5 + 80005b98: 00400793 li a5,4 + 80005b9c: 00f71663 bne a4,a5,80005ba8 + 80005ba0: 00000793 li a5,0 + 80005ba4: 0880006f j 80005c2c + 80005ba8: fd843783 ld a5,-40(s0) + 80005bac: 0687c783 lbu a5,104(a5) + 80005bb0: 0007879b sext.w a5,a5 + 80005bb4: 0077f793 andi a5,a5,7 + 80005bb8: 0007879b sext.w a5,a5 + 80005bbc: 00078663 beqz a5,80005bc8 + 80005bc0: fd843503 ld a0,-40(s0) + 80005bc4: c4dfc0ef jal ra,80002810 + 80005bc8: fd843503 ld a0,-40(s0) + 80005bcc: a5dff0ef jal ra,80005628 <_rt_thread_cleanup_execute> + 80005bd0: fd843783 ld a5,-40(s0) + 80005bd4: 08878793 addi a5,a5,136 + 80005bd8: 00078513 mv a0,a5 + 80005bdc: 869fd0ef jal ra,80003444 + 80005be0: fd843783 ld a5,-40(s0) + 80005be4: 00400713 li a4,4 + 80005be8: 06e78423 sb a4,104(a5) + 80005bec: fd843503 ld a0,-40(s0) + 80005bf0: b9cfc0ef jal ra,80001f8c + 80005bf4: 00050793 mv a5,a0 + 80005bf8: 00078713 mv a4,a5 + 80005bfc: 00100793 li a5,1 + 80005c00: 00f71863 bne a4,a5,80005c10 + 80005c04: fd843503 ld a0,-40(s0) + 80005c08: 8acfc0ef jal ra,80001cb4 + 80005c0c: 01c0006f j 80005c28 + 80005c10: d64fa0ef jal ra,80000174 + 80005c14: fea43423 sd a0,-24(s0) + 80005c18: fd843503 ld a0,-40(s0) + 80005c1c: 1ad020ef jal ra,800085c8 + 80005c20: fe843503 ld a0,-24(s0) + 80005c24: d58fa0ef jal ra,8000017c + 80005c28: 00000793 li a5,0 + 80005c2c: 00078513 mv a0,a5 + 80005c30: 02813083 ld ra,40(sp) + 80005c34: 02013403 ld s0,32(sp) + 80005c38: 03010113 addi sp,sp,48 + 80005c3c: 00008067 ret + +0000000080005c40 : + 80005c40: fb010113 addi sp,sp,-80 + 80005c44: 04113423 sd ra,72(sp) + 80005c48: 04813023 sd s0,64(sp) + 80005c4c: 05010413 addi s0,sp,80 + 80005c50: fca43c23 sd a0,-40(s0) + 80005c54: fcb43823 sd a1,-48(s0) + 80005c58: fcc43423 sd a2,-56(s0) + 80005c5c: 00068613 mv a2,a3 + 80005c60: 00070693 mv a3,a4 + 80005c64: 00078713 mv a4,a5 + 80005c68: 00060793 mv a5,a2 + 80005c6c: fcf42223 sw a5,-60(s0) + 80005c70: 00068793 mv a5,a3 + 80005c74: fcf401a3 sb a5,-61(s0) + 80005c78: 00070793 mv a5,a4 + 80005c7c: faf42e23 sw a5,-68(s0) + 80005c80: fd843583 ld a1,-40(s0) + 80005c84: 00100513 li a0,1 + 80005c88: 8c8fc0ef jal ra,80001d50 + 80005c8c: fea43423 sd a0,-24(s0) + 80005c90: fe843783 ld a5,-24(s0) + 80005c94: 00079663 bnez a5,80005ca0 + 80005c98: 00000793 li a5,0 + 80005c9c: 05c0006f j 80005cf8 + 80005ca0: fc446783 lwu a5,-60(s0) + 80005ca4: 00078513 mv a0,a5 + 80005ca8: 981fe0ef jal ra,80004628 + 80005cac: fea43023 sd a0,-32(s0) + 80005cb0: fe043783 ld a5,-32(s0) + 80005cb4: 00079a63 bnez a5,80005cc8 + 80005cb8: fe843503 ld a0,-24(s0) + 80005cbc: a00fc0ef jal ra,80001ebc + 80005cc0: 00000793 li a5,0 + 80005cc4: 0340006f j 80005cf8 + 80005cc8: fbc42683 lw a3,-68(s0) + 80005ccc: fc344703 lbu a4,-61(s0) + 80005cd0: fc442783 lw a5,-60(s0) + 80005cd4: 00068893 mv a7,a3 + 80005cd8: 00070813 mv a6,a4 + 80005cdc: fe043703 ld a4,-32(s0) + 80005ce0: fc843683 ld a3,-56(s0) + 80005ce4: fd043603 ld a2,-48(s0) + 80005ce8: fd843583 ld a1,-40(s0) + 80005cec: fe843503 ld a0,-24(s0) + 80005cf0: a35ff0ef jal ra,80005724 <_rt_thread_init> + 80005cf4: fe843783 ld a5,-24(s0) + 80005cf8: 00078513 mv a0,a5 + 80005cfc: 04813083 ld ra,72(sp) + 80005d00: 04013403 ld s0,64(sp) + 80005d04: 05010113 addi sp,sp,80 + 80005d08: 00008067 ret + +0000000080005d0c : + 80005d0c: fd010113 addi sp,sp,-48 + 80005d10: 02113423 sd ra,40(sp) + 80005d14: 02813023 sd s0,32(sp) + 80005d18: 03010413 addi s0,sp,48 + 80005d1c: fca43c23 sd a0,-40(s0) + 80005d20: fd843783 ld a5,-40(s0) + 80005d24: 00079e63 bnez a5,80005d40 + 80005d28: 1d500613 li a2,469 + 80005d2c: 00013597 auipc a1,0x13 + 80005d30: 97458593 addi a1,a1,-1676 # 800186a0 <__FUNCTION__.2690> + 80005d34: 00010517 auipc a0,0x10 + 80005d38: 57450513 addi a0,a0,1396 # 800162a8 + 80005d3c: 740020ef jal ra,8000847c + 80005d40: fd843503 ld a0,-40(s0) + 80005d44: ab0fc0ef jal ra,80001ff4 + 80005d48: 00050793 mv a5,a0 + 80005d4c: 00078713 mv a4,a5 + 80005d50: 00100793 li a5,1 + 80005d54: 00f70e63 beq a4,a5,80005d70 + 80005d58: 1d600613 li a2,470 + 80005d5c: 00013597 auipc a1,0x13 + 80005d60: 94458593 addi a1,a1,-1724 # 800186a0 <__FUNCTION__.2690> + 80005d64: 00010517 auipc a0,0x10 + 80005d68: 5ac50513 addi a0,a0,1452 # 80016310 + 80005d6c: 710020ef jal ra,8000847c + 80005d70: fd843503 ld a0,-40(s0) + 80005d74: a18fc0ef jal ra,80001f8c + 80005d78: 00050793 mv a5,a0 + 80005d7c: 00078e63 beqz a5,80005d98 + 80005d80: 1d700613 li a2,471 + 80005d84: 00013597 auipc a1,0x13 + 80005d88: 91c58593 addi a1,a1,-1764 # 800186a0 <__FUNCTION__.2690> + 80005d8c: 00010517 auipc a0,0x10 + 80005d90: 5fc50513 addi a0,a0,1532 # 80016388 + 80005d94: 6e8020ef jal ra,8000847c + 80005d98: fd843783 ld a5,-40(s0) + 80005d9c: 0687c783 lbu a5,104(a5) + 80005da0: 0007879b sext.w a5,a5 + 80005da4: 0077f793 andi a5,a5,7 + 80005da8: 0007879b sext.w a5,a5 + 80005dac: 00078713 mv a4,a5 + 80005db0: 00400793 li a5,4 + 80005db4: 00f71663 bne a4,a5,80005dc0 + 80005db8: 00000793 li a5,0 + 80005dbc: 0640006f j 80005e20 + 80005dc0: fd843783 ld a5,-40(s0) + 80005dc4: 0687c783 lbu a5,104(a5) + 80005dc8: 0007879b sext.w a5,a5 + 80005dcc: 0077f793 andi a5,a5,7 + 80005dd0: 0007879b sext.w a5,a5 + 80005dd4: 00078663 beqz a5,80005de0 + 80005dd8: fd843503 ld a0,-40(s0) + 80005ddc: a35fc0ef jal ra,80002810 + 80005de0: fd843503 ld a0,-40(s0) + 80005de4: 845ff0ef jal ra,80005628 <_rt_thread_cleanup_execute> + 80005de8: fd843783 ld a5,-40(s0) + 80005dec: 08878793 addi a5,a5,136 + 80005df0: 00078513 mv a0,a5 + 80005df4: e50fd0ef jal ra,80003444 + 80005df8: b7cfa0ef jal ra,80000174 + 80005dfc: fea43423 sd a0,-24(s0) + 80005e00: fd843783 ld a5,-40(s0) + 80005e04: 00400713 li a4,4 + 80005e08: 06e78423 sb a4,104(a5) + 80005e0c: fd843503 ld a0,-40(s0) + 80005e10: 7b8020ef jal ra,800085c8 + 80005e14: fe843503 ld a0,-24(s0) + 80005e18: b64fa0ef jal ra,8000017c + 80005e1c: 00000793 li a5,0 + 80005e20: 00078513 mv a0,a5 + 80005e24: 02813083 ld ra,40(sp) + 80005e28: 02013403 ld s0,32(sp) + 80005e2c: 03010113 addi sp,sp,48 + 80005e30: 00008067 ret + +0000000080005e34 : + 80005e34: fc010113 addi sp,sp,-64 + 80005e38: 02113c23 sd ra,56(sp) + 80005e3c: 02813823 sd s0,48(sp) + 80005e40: 02913423 sd s1,40(sp) + 80005e44: 04010413 addi s0,sp,64 + 80005e48: 00050793 mv a5,a0 + 80005e4c: fcf42623 sw a5,-52(s0) + 80005e50: b7dff0ef jal ra,800059cc + 80005e54: fca43c23 sd a0,-40(s0) + 80005e58: fd843783 ld a5,-40(s0) + 80005e5c: 00079e63 bnez a5,80005e78 + 80005e60: 21d00613 li a2,541 + 80005e64: 00013597 auipc a1,0x13 + 80005e68: 85458593 addi a1,a1,-1964 # 800186b8 <__FUNCTION__.2701> + 80005e6c: 00010517 auipc a0,0x10 + 80005e70: 43c50513 addi a0,a0,1084 # 800162a8 + 80005e74: 608020ef jal ra,8000847c + 80005e78: fd843503 ld a0,-40(s0) + 80005e7c: 978fc0ef jal ra,80001ff4 + 80005e80: 00050793 mv a5,a0 + 80005e84: 00078713 mv a4,a5 + 80005e88: 00100793 li a5,1 + 80005e8c: 00f70e63 beq a4,a5,80005ea8 + 80005e90: 21e00613 li a2,542 + 80005e94: 00013597 auipc a1,0x13 + 80005e98: 82458593 addi a1,a1,-2012 # 800186b8 <__FUNCTION__.2701> + 80005e9c: 00010517 auipc a0,0x10 + 80005ea0: 47450513 addi a0,a0,1140 # 80016310 + 80005ea4: 5d8020ef jal ra,8000847c + 80005ea8: accfa0ef jal ra,80000174 + 80005eac: 00050493 mv s1,a0 + 80005eb0: fd843503 ld a0,-40(s0) + 80005eb4: 2d0000ef jal ra,80006184 + 80005eb8: fd843783 ld a5,-40(s0) + 80005ebc: 08878793 addi a5,a5,136 + 80005ec0: fcc40713 addi a4,s0,-52 + 80005ec4: 00070613 mv a2,a4 + 80005ec8: 00000593 li a1,0 + 80005ecc: 00078513 mv a0,a5 + 80005ed0: b89fd0ef jal ra,80003a58 + 80005ed4: fd843783 ld a5,-40(s0) + 80005ed8: 08878793 addi a5,a5,136 + 80005edc: 00078513 mv a0,a5 + 80005ee0: e54fd0ef jal ra,80003534 + 80005ee4: 00048513 mv a0,s1 + 80005ee8: a94fa0ef jal ra,8000017c + 80005eec: d0cfc0ef jal ra,800023f8 + 80005ef0: fd843783 ld a5,-40(s0) + 80005ef4: 0607b703 ld a4,96(a5) + 80005ef8: ffe00793 li a5,-2 + 80005efc: 00f71663 bne a4,a5,80005f08 + 80005f00: fd843783 ld a5,-40(s0) + 80005f04: 0607b023 sd zero,96(a5) + 80005f08: 00000793 li a5,0 + 80005f0c: 00078513 mv a0,a5 + 80005f10: 03813083 ld ra,56(sp) + 80005f14: 03013403 ld s0,48(sp) + 80005f18: 02813483 ld s1,40(sp) + 80005f1c: 04010113 addi sp,sp,64 + 80005f20: 00008067 ret + +0000000080005f24 : + 80005f24: fe010113 addi sp,sp,-32 + 80005f28: 00113c23 sd ra,24(sp) + 80005f2c: 00813823 sd s0,16(sp) + 80005f30: 02010413 addi s0,sp,32 + 80005f34: 00050793 mv a5,a0 + 80005f38: fef42623 sw a5,-20(s0) + 80005f3c: fec42783 lw a5,-20(s0) + 80005f40: 00078513 mv a0,a5 + 80005f44: ef1ff0ef jal ra,80005e34 + 80005f48: 00050793 mv a5,a0 + 80005f4c: 00078513 mv a0,a5 + 80005f50: 01813083 ld ra,24(sp) + 80005f54: 01013403 ld s0,16(sp) + 80005f58: 02010113 addi sp,sp,32 + 80005f5c: 00008067 ret + +0000000080005f60 : + 80005f60: fd010113 addi sp,sp,-48 + 80005f64: 02113423 sd ra,40(sp) + 80005f68: 02813023 sd s0,32(sp) + 80005f6c: 03010413 addi s0,sp,48 + 80005f70: 00050793 mv a5,a0 + 80005f74: fcf42e23 sw a5,-36(s0) + 80005f78: fdc42783 lw a5,-36(s0) + 80005f7c: 00078513 mv a0,a5 + 80005f80: 784000ef jal ra,80006704 + 80005f84: 00050793 mv a5,a0 + 80005f88: fef42623 sw a5,-20(s0) + 80005f8c: fec42783 lw a5,-20(s0) + 80005f90: 00078513 mv a0,a5 + 80005f94: ea1ff0ef jal ra,80005e34 + 80005f98: 00050793 mv a5,a0 + 80005f9c: 00078513 mv a0,a5 + 80005fa0: 02813083 ld ra,40(sp) + 80005fa4: 02013403 ld s0,32(sp) + 80005fa8: 03010113 addi sp,sp,48 + 80005fac: 00008067 ret + +0000000080005fb0 : + 80005fb0: fb010113 addi sp,sp,-80 + 80005fb4: 04113423 sd ra,72(sp) + 80005fb8: 04813023 sd s0,64(sp) + 80005fbc: 02913c23 sd s1,56(sp) + 80005fc0: 05010413 addi s0,sp,80 + 80005fc4: fca43423 sd a0,-56(s0) + 80005fc8: 00058793 mv a5,a1 + 80005fcc: fac43c23 sd a2,-72(s0) + 80005fd0: fcf42223 sw a5,-60(s0) + 80005fd4: fc843783 ld a5,-56(s0) + 80005fd8: 00079e63 bnez a5,80005ff4 + 80005fdc: 2a200613 li a2,674 + 80005fe0: 00012597 auipc a1,0x12 + 80005fe4: 6e858593 addi a1,a1,1768 # 800186c8 <__FUNCTION__.2724> + 80005fe8: 00010517 auipc a0,0x10 + 80005fec: 2c050513 addi a0,a0,704 # 800162a8 + 80005ff0: 48c020ef jal ra,8000847c + 80005ff4: fc843503 ld a0,-56(s0) + 80005ff8: ffdfb0ef jal ra,80001ff4 + 80005ffc: 00050793 mv a5,a0 + 80006000: 00078713 mv a4,a5 + 80006004: 00100793 li a5,1 + 80006008: 00f70e63 beq a4,a5,80006024 + 8000600c: 2a300613 li a2,675 + 80006010: 00012597 auipc a1,0x12 + 80006014: 6b858593 addi a1,a1,1720 # 800186c8 <__FUNCTION__.2724> + 80006018: 00010517 auipc a0,0x10 + 8000601c: 2f850513 addi a0,a0,760 # 80016310 + 80006020: 45c020ef jal ra,8000847c + 80006024: fc442783 lw a5,-60(s0) + 80006028: 0007871b sext.w a4,a5 + 8000602c: 00200793 li a5,2 + 80006030: 02f70a63 beq a4,a5,80006064 + 80006034: fc442783 lw a5,-60(s0) + 80006038: 0007871b sext.w a4,a5 + 8000603c: 00200793 li a5,2 + 80006040: 12e7c263 blt a5,a4,80006164 + 80006044: fc442783 lw a5,-60(s0) + 80006048: 0007879b sext.w a5,a5 + 8000604c: 0c078463 beqz a5,80006114 + 80006050: fc442783 lw a5,-60(s0) + 80006054: 0007871b sext.w a4,a5 + 80006058: 00100793 li a5,1 + 8000605c: 0cf70463 beq a4,a5,80006124 + 80006060: 1040006f j 80006164 + 80006064: 910fa0ef jal ra,80000174 + 80006068: 00050493 mv s1,a0 + 8000606c: fc843783 ld a5,-56(s0) + 80006070: 0687c783 lbu a5,104(a5) + 80006074: 0007879b sext.w a5,a5 + 80006078: 0077f793 andi a5,a5,7 + 8000607c: 0007879b sext.w a5,a5 + 80006080: 00078713 mv a4,a5 + 80006084: 00100793 li a5,1 + 80006088: 04f71663 bne a4,a5,800060d4 + 8000608c: fc843503 ld a0,-56(s0) + 80006090: f80fc0ef jal ra,80002810 + 80006094: fb843783 ld a5,-72(s0) + 80006098: 0007c703 lbu a4,0(a5) + 8000609c: fc843783 ld a5,-56(s0) + 800060a0: 06e784a3 sb a4,105(a5) + 800060a4: fc843783 ld a5,-56(s0) + 800060a8: 0697c783 lbu a5,105(a5) + 800060ac: 0007879b sext.w a5,a5 + 800060b0: 00100713 li a4,1 + 800060b4: 00f717bb sllw a5,a4,a5 + 800060b8: 0007879b sext.w a5,a5 + 800060bc: 0007871b sext.w a4,a5 + 800060c0: fc843783 ld a5,-56(s0) + 800060c4: 06e7a623 sw a4,108(a5) + 800060c8: fc843503 ld a0,-56(s0) + 800060cc: e0cfc0ef jal ra,800026d8 + 800060d0: 0380006f j 80006108 + 800060d4: fb843783 ld a5,-72(s0) + 800060d8: 0007c703 lbu a4,0(a5) + 800060dc: fc843783 ld a5,-56(s0) + 800060e0: 06e784a3 sb a4,105(a5) + 800060e4: fc843783 ld a5,-56(s0) + 800060e8: 0697c783 lbu a5,105(a5) + 800060ec: 0007879b sext.w a5,a5 + 800060f0: 00100713 li a4,1 + 800060f4: 00f717bb sllw a5,a4,a5 + 800060f8: 0007879b sext.w a5,a5 + 800060fc: 0007871b sext.w a4,a5 + 80006100: fc843783 ld a5,-56(s0) + 80006104: 06e7a623 sw a4,108(a5) + 80006108: 00048513 mv a0,s1 + 8000610c: 870fa0ef jal ra,8000017c + 80006110: 0580006f j 80006168 + 80006114: fc843503 ld a0,-56(s0) + 80006118: 8ddff0ef jal ra,800059f4 + 8000611c: 00050793 mv a5,a0 + 80006120: 04c0006f j 8000616c + 80006124: fc843503 ld a0,-56(s0) + 80006128: e65fb0ef jal ra,80001f8c + 8000612c: 00050793 mv a5,a0 + 80006130: 00078713 mv a4,a5 + 80006134: 00100793 li a5,1 + 80006138: 00f71a63 bne a4,a5,8000614c + 8000613c: fc843503 ld a0,-56(s0) + 80006140: 9b5ff0ef jal ra,80005af4 + 80006144: fca43c23 sd a0,-40(s0) + 80006148: 0100006f j 80006158 + 8000614c: fc843503 ld a0,-56(s0) + 80006150: bbdff0ef jal ra,80005d0c + 80006154: fca43c23 sd a0,-40(s0) + 80006158: aa0fc0ef jal ra,800023f8 + 8000615c: fd843783 ld a5,-40(s0) + 80006160: 00c0006f j 8000616c + 80006164: 00000013 nop + 80006168: 00000793 li a5,0 + 8000616c: 00078513 mv a0,a5 + 80006170: 04813083 ld ra,72(sp) + 80006174: 04013403 ld s0,64(sp) + 80006178: 03813483 ld s1,56(sp) + 8000617c: 05010113 addi sp,sp,80 + 80006180: 00008067 ret + +0000000080006184 : + 80006184: fd010113 addi sp,sp,-48 + 80006188: 02113423 sd ra,40(sp) + 8000618c: 02813023 sd s0,32(sp) + 80006190: 00913c23 sd s1,24(sp) + 80006194: 01213823 sd s2,16(sp) + 80006198: 03010413 addi s0,sp,48 + 8000619c: fca43c23 sd a0,-40(s0) + 800061a0: fd843783 ld a5,-40(s0) + 800061a4: 00079e63 bnez a5,800061c0 + 800061a8: 31400613 li a2,788 + 800061ac: 00012597 auipc a1,0x12 + 800061b0: 53458593 addi a1,a1,1332 # 800186e0 <__FUNCTION__.2736> + 800061b4: 00010517 auipc a0,0x10 + 800061b8: 0f450513 addi a0,a0,244 # 800162a8 + 800061bc: 2c0020ef jal ra,8000847c + 800061c0: fd843503 ld a0,-40(s0) + 800061c4: e31fb0ef jal ra,80001ff4 + 800061c8: 00050793 mv a5,a0 + 800061cc: 00078713 mv a4,a5 + 800061d0: 00100793 li a5,1 + 800061d4: 00f70e63 beq a4,a5,800061f0 + 800061d8: 31500613 li a2,789 + 800061dc: 00012597 auipc a1,0x12 + 800061e0: 50458593 addi a1,a1,1284 # 800186e0 <__FUNCTION__.2736> + 800061e4: 00010517 auipc a0,0x10 + 800061e8: 12c50513 addi a0,a0,300 # 80016310 + 800061ec: 290020ef jal ra,8000847c + 800061f0: fd843783 ld a5,-40(s0) + 800061f4: 0687c783 lbu a5,104(a5) + 800061f8: 0077f493 andi s1,a5,7 + 800061fc: 00100793 li a5,1 + 80006200: 00f48a63 beq s1,a5,80006214 + 80006204: 00300793 li a5,3 + 80006208: 00f48663 beq s1,a5,80006214 + 8000620c: fff00793 li a5,-1 + 80006210: 0b80006f j 800062c8 + 80006214: f61f90ef jal ra,80000174 + 80006218: 00050913 mv s2,a0 + 8000621c: 00300793 li a5,3 + 80006220: 02f49663 bne s1,a5,8000624c + 80006224: fa8ff0ef jal ra,800059cc + 80006228: 00050713 mv a4,a0 + 8000622c: fd843783 ld a5,-40(s0) + 80006230: 00e78e63 beq a5,a4,8000624c + 80006234: 32600613 li a2,806 + 80006238: 00012597 auipc a1,0x12 + 8000623c: 4a858593 addi a1,a1,1192 # 800186e0 <__FUNCTION__.2736> + 80006240: 00010517 auipc a0,0x10 + 80006244: 19850513 addi a0,a0,408 # 800163d8 + 80006248: 234020ef jal ra,8000847c + 8000624c: fd843503 ld a0,-40(s0) + 80006250: dc0fc0ef jal ra,80002810 + 80006254: fd843783 ld a5,-40(s0) + 80006258: 0687c783 lbu a5,104(a5) + 8000625c: 0187979b slliw a5,a5,0x18 + 80006260: 4187d79b sraiw a5,a5,0x18 + 80006264: ff87f793 andi a5,a5,-8 + 80006268: 0187979b slliw a5,a5,0x18 + 8000626c: 4187d79b sraiw a5,a5,0x18 + 80006270: 0027e793 ori a5,a5,2 + 80006274: 0187979b slliw a5,a5,0x18 + 80006278: 4187d79b sraiw a5,a5,0x18 + 8000627c: 0ff7f713 andi a4,a5,255 + 80006280: fd843783 ld a5,-40(s0) + 80006284: 06e78423 sb a4,104(a5) + 80006288: fd843783 ld a5,-40(s0) + 8000628c: 08878793 addi a5,a5,136 + 80006290: 00078513 mv a0,a5 + 80006294: ec4fd0ef jal ra,80003958 + 80006298: 00090513 mv a0,s2 + 8000629c: ee1f90ef jal ra,8000017c + 800062a0: 0001c797 auipc a5,0x1c + 800062a4: dc878793 addi a5,a5,-568 # 80022068 + 800062a8: 0007b783 ld a5,0(a5) + 800062ac: 00078c63 beqz a5,800062c4 + 800062b0: 0001c797 auipc a5,0x1c + 800062b4: db878793 addi a5,a5,-584 # 80022068 + 800062b8: 0007b783 ld a5,0(a5) + 800062bc: fd843503 ld a0,-40(s0) + 800062c0: 000780e7 jalr a5 + 800062c4: 00000793 li a5,0 + 800062c8: 00078513 mv a0,a5 + 800062cc: 02813083 ld ra,40(sp) + 800062d0: 02013403 ld s0,32(sp) + 800062d4: 01813483 ld s1,24(sp) + 800062d8: 01013903 ld s2,16(sp) + 800062dc: 03010113 addi sp,sp,48 + 800062e0: 00008067 ret + +00000000800062e4 : + 800062e4: fd010113 addi sp,sp,-48 + 800062e8: 02113423 sd ra,40(sp) + 800062ec: 02813023 sd s0,32(sp) + 800062f0: 00913c23 sd s1,24(sp) + 800062f4: 03010413 addi s0,sp,48 + 800062f8: fca43c23 sd a0,-40(s0) + 800062fc: fd843783 ld a5,-40(s0) + 80006300: 00079e63 bnez a5,8000631c + 80006304: 34400613 li a2,836 + 80006308: 00012597 auipc a1,0x12 + 8000630c: 3f058593 addi a1,a1,1008 # 800186f8 <__FUNCTION__.2741> + 80006310: 00010517 auipc a0,0x10 + 80006314: f9850513 addi a0,a0,-104 # 800162a8 + 80006318: 164020ef jal ra,8000847c + 8000631c: fd843503 ld a0,-40(s0) + 80006320: cd5fb0ef jal ra,80001ff4 + 80006324: 00050793 mv a5,a0 + 80006328: 00078713 mv a4,a5 + 8000632c: 00100793 li a5,1 + 80006330: 00f70e63 beq a4,a5,8000634c + 80006334: 34500613 li a2,837 + 80006338: 00012597 auipc a1,0x12 + 8000633c: 3c058593 addi a1,a1,960 # 800186f8 <__FUNCTION__.2741> + 80006340: 00010517 auipc a0,0x10 + 80006344: fd050513 addi a0,a0,-48 # 80016310 + 80006348: 134020ef jal ra,8000847c + 8000634c: fd843783 ld a5,-40(s0) + 80006350: 0687c783 lbu a5,104(a5) + 80006354: 0007879b sext.w a5,a5 + 80006358: 0077f793 andi a5,a5,7 + 8000635c: 0007879b sext.w a5,a5 + 80006360: 00078713 mv a4,a5 + 80006364: 00200793 li a5,2 + 80006368: 00f70663 beq a4,a5,80006374 + 8000636c: fff00793 li a5,-1 + 80006370: 0640006f j 800063d4 + 80006374: e01f90ef jal ra,80000174 + 80006378: 00050493 mv s1,a0 + 8000637c: fd843783 ld a5,-40(s0) + 80006380: 02878793 addi a5,a5,40 + 80006384: 00078513 mv a0,a5 + 80006388: a3cff0ef jal ra,800055c4 + 8000638c: fd843783 ld a5,-40(s0) + 80006390: 08878793 addi a5,a5,136 + 80006394: 00078513 mv a0,a5 + 80006398: dc0fd0ef jal ra,80003958 + 8000639c: fd843503 ld a0,-40(s0) + 800063a0: b38fc0ef jal ra,800026d8 + 800063a4: 00048513 mv a0,s1 + 800063a8: dd5f90ef jal ra,8000017c + 800063ac: 0001c797 auipc a5,0x1c + 800063b0: cc478793 addi a5,a5,-828 # 80022070 + 800063b4: 0007b783 ld a5,0(a5) + 800063b8: 00078c63 beqz a5,800063d0 + 800063bc: 0001c797 auipc a5,0x1c + 800063c0: cb478793 addi a5,a5,-844 # 80022070 + 800063c4: 0007b783 ld a5,0(a5) + 800063c8: fd843503 ld a0,-40(s0) + 800063cc: 000780e7 jalr a5 + 800063d0: 00000793 li a5,0 + 800063d4: 00078513 mv a0,a5 + 800063d8: 02813083 ld ra,40(sp) + 800063dc: 02013403 ld s0,32(sp) + 800063e0: 01813483 ld s1,24(sp) + 800063e4: 03010113 addi sp,sp,48 + 800063e8: 00008067 ret + +00000000800063ec : + 800063ec: fc010113 addi sp,sp,-64 + 800063f0: 02113c23 sd ra,56(sp) + 800063f4: 02813823 sd s0,48(sp) + 800063f8: 02913423 sd s1,40(sp) + 800063fc: 04010413 addi s0,sp,64 + 80006400: fca43423 sd a0,-56(s0) + 80006404: fc843783 ld a5,-56(s0) + 80006408: fcf43c23 sd a5,-40(s0) + 8000640c: fd843783 ld a5,-40(s0) + 80006410: 00079e63 bnez a5,8000642c + 80006414: 37200613 li a2,882 + 80006418: 00012597 auipc a1,0x12 + 8000641c: 2f858593 addi a1,a1,760 # 80018710 <__FUNCTION__.2747> + 80006420: 00010517 auipc a0,0x10 + 80006424: e8850513 addi a0,a0,-376 # 800162a8 + 80006428: 054020ef jal ra,8000847c + 8000642c: fd843783 ld a5,-40(s0) + 80006430: 0687c783 lbu a5,104(a5) + 80006434: 0007879b sext.w a5,a5 + 80006438: 0077f793 andi a5,a5,7 + 8000643c: 0007879b sext.w a5,a5 + 80006440: 00078713 mv a4,a5 + 80006444: 00200793 li a5,2 + 80006448: 00f70e63 beq a4,a5,80006464 + 8000644c: 37300613 li a2,883 + 80006450: 00012597 auipc a1,0x12 + 80006454: 2c058593 addi a1,a1,704 # 80018710 <__FUNCTION__.2747> + 80006458: 00010517 auipc a0,0x10 + 8000645c: fa050513 addi a0,a0,-96 # 800163f8 + 80006460: 01c020ef jal ra,8000847c + 80006464: fd843503 ld a0,-40(s0) + 80006468: b8dfb0ef jal ra,80001ff4 + 8000646c: 00050793 mv a5,a0 + 80006470: 00078713 mv a4,a5 + 80006474: 00100793 li a5,1 + 80006478: 00f70e63 beq a4,a5,80006494 + 8000647c: 37400613 li a2,884 + 80006480: 00012597 auipc a1,0x12 + 80006484: 29058593 addi a1,a1,656 # 80018710 <__FUNCTION__.2747> + 80006488: 00010517 auipc a0,0x10 + 8000648c: e8850513 addi a0,a0,-376 # 80016310 + 80006490: 7ed010ef jal ra,8000847c + 80006494: ce1f90ef jal ra,80000174 + 80006498: 00050493 mv s1,a0 + 8000649c: fd843783 ld a5,-40(s0) + 800064a0: ffe00713 li a4,-2 + 800064a4: 06e7b023 sd a4,96(a5) + 800064a8: fd843783 ld a5,-40(s0) + 800064ac: 02878793 addi a5,a5,40 + 800064b0: 00078513 mv a0,a5 + 800064b4: 910ff0ef jal ra,800055c4 + 800064b8: fd843503 ld a0,-40(s0) + 800064bc: a1cfc0ef jal ra,800026d8 + 800064c0: 00048513 mv a0,s1 + 800064c4: cb9f90ef jal ra,8000017c + 800064c8: f31fb0ef jal ra,800023f8 + 800064cc: 00000013 nop + 800064d0: 03813083 ld ra,56(sp) + 800064d4: 03013403 ld s0,48(sp) + 800064d8: 02813483 ld s1,40(sp) + 800064dc: 04010113 addi sp,sp,64 + 800064e0: 00008067 ret + +00000000800064e4 : + 800064e4: fe010113 addi sp,sp,-32 + 800064e8: 00113c23 sd ra,24(sp) + 800064ec: 00813823 sd s0,16(sp) + 800064f0: 02010413 addi s0,sp,32 + 800064f4: c81f90ef jal ra,80000174 + 800064f8: fea43423 sd a0,-24(s0) + 800064fc: 0001c797 auipc a5,0x1c + 80006500: b9478793 addi a5,a5,-1132 # 80022090 + 80006504: 0007c783 lbu a5,0(a5) + 80006508: 0ff7f793 andi a5,a5,255 + 8000650c: 0017879b addiw a5,a5,1 + 80006510: 0ff7f713 andi a4,a5,255 + 80006514: 0001c797 auipc a5,0x1c + 80006518: b7c78793 addi a5,a5,-1156 # 80022090 + 8000651c: 00e78023 sb a4,0(a5) + 80006520: 0001c797 auipc a5,0x1c + 80006524: b6078793 addi a5,a5,-1184 # 80022080 + 80006528: 0007b783 ld a5,0(a5) + 8000652c: 00078a63 beqz a5,80006540 + 80006530: 0001c797 auipc a5,0x1c + 80006534: b5078793 addi a5,a5,-1200 # 80022080 + 80006538: 0007b783 ld a5,0(a5) + 8000653c: 000780e7 jalr a5 + 80006540: fe843503 ld a0,-24(s0) + 80006544: c39f90ef jal ra,8000017c + 80006548: 00000013 nop + 8000654c: 01813083 ld ra,24(sp) + 80006550: 01013403 ld s0,16(sp) + 80006554: 02010113 addi sp,sp,32 + 80006558: 00008067 ret + +000000008000655c : + 8000655c: fe010113 addi sp,sp,-32 + 80006560: 00113c23 sd ra,24(sp) + 80006564: 00813823 sd s0,16(sp) + 80006568: 02010413 addi s0,sp,32 + 8000656c: c09f90ef jal ra,80000174 + 80006570: fea43423 sd a0,-24(s0) + 80006574: 0001c797 auipc a5,0x1c + 80006578: b1478793 addi a5,a5,-1260 # 80022088 + 8000657c: 0007b783 ld a5,0(a5) + 80006580: 00078a63 beqz a5,80006594 + 80006584: 0001c797 auipc a5,0x1c + 80006588: b0478793 addi a5,a5,-1276 # 80022088 + 8000658c: 0007b783 ld a5,0(a5) + 80006590: 000780e7 jalr a5 + 80006594: 0001c797 auipc a5,0x1c + 80006598: afc78793 addi a5,a5,-1284 # 80022090 + 8000659c: 0007c783 lbu a5,0(a5) + 800065a0: 0ff7f793 andi a5,a5,255 + 800065a4: fff7879b addiw a5,a5,-1 + 800065a8: 0ff7f713 andi a4,a5,255 + 800065ac: 0001c797 auipc a5,0x1c + 800065b0: ae478793 addi a5,a5,-1308 # 80022090 + 800065b4: 00e78023 sb a4,0(a5) + 800065b8: fe843503 ld a0,-24(s0) + 800065bc: bc1f90ef jal ra,8000017c + 800065c0: 00000013 nop + 800065c4: 01813083 ld ra,24(sp) + 800065c8: 01013403 ld s0,16(sp) + 800065cc: 02010113 addi sp,sp,32 + 800065d0: 00008067 ret + +00000000800065d4 : + 800065d4: fe010113 addi sp,sp,-32 + 800065d8: 00113c23 sd ra,24(sp) + 800065dc: 00813823 sd s0,16(sp) + 800065e0: 02010413 addi s0,sp,32 + 800065e4: b91f90ef jal ra,80000174 + 800065e8: fea43423 sd a0,-24(s0) + 800065ec: 0001c797 auipc a5,0x1c + 800065f0: aa478793 addi a5,a5,-1372 # 80022090 + 800065f4: 0007c783 lbu a5,0(a5) + 800065f8: fef403a3 sb a5,-25(s0) + 800065fc: fe843503 ld a0,-24(s0) + 80006600: b7df90ef jal ra,8000017c + 80006604: fe744783 lbu a5,-25(s0) + 80006608: 00078513 mv a0,a5 + 8000660c: 01813083 ld ra,24(sp) + 80006610: 01013403 ld s0,16(sp) + 80006614: 02010113 addi sp,sp,32 + 80006618: 00008067 ret + +000000008000661c : + 8000661c: ff010113 addi sp,sp,-16 + 80006620: 00813423 sd s0,8(sp) + 80006624: 01010413 addi s0,sp,16 + 80006628: 0001c797 auipc a5,0x1c + 8000662c: a6c78793 addi a5,a5,-1428 # 80022094 + 80006630: 0007a783 lw a5,0(a5) + 80006634: 0007879b sext.w a5,a5 + 80006638: 00078513 mv a0,a5 + 8000663c: 00813403 ld s0,8(sp) + 80006640: 01010113 addi sp,sp,16 + 80006644: 00008067 ret + +0000000080006648 : + 80006648: fe010113 addi sp,sp,-32 + 8000664c: 00113c23 sd ra,24(sp) + 80006650: 00813823 sd s0,16(sp) + 80006654: 02010413 addi s0,sp,32 + 80006658: b1df90ef jal ra,80000174 + 8000665c: fea43423 sd a0,-24(s0) + 80006660: 0001c797 auipc a5,0x1c + 80006664: a3478793 addi a5,a5,-1484 # 80022094 + 80006668: 0007a783 lw a5,0(a5) + 8000666c: 0007879b sext.w a5,a5 + 80006670: 0017879b addiw a5,a5,1 + 80006674: 0007871b sext.w a4,a5 + 80006678: 0001c797 auipc a5,0x1c + 8000667c: a1c78793 addi a5,a5,-1508 # 80022094 + 80006680: 00e7a023 sw a4,0(a5) + 80006684: b48ff0ef jal ra,800059cc + 80006688: fea43023 sd a0,-32(s0) + 8000668c: fe043783 ld a5,-32(s0) + 80006690: 0807b783 ld a5,128(a5) + 80006694: fff78713 addi a4,a5,-1 + 80006698: fe043783 ld a5,-32(s0) + 8000669c: 08e7b023 sd a4,128(a5) + 800066a0: fe043783 ld a5,-32(s0) + 800066a4: 0807b783 ld a5,128(a5) + 800066a8: 02079e63 bnez a5,800066e4 + 800066ac: fe043783 ld a5,-32(s0) + 800066b0: 0787b703 ld a4,120(a5) + 800066b4: fe043783 ld a5,-32(s0) + 800066b8: 08e7b023 sd a4,128(a5) + 800066bc: fe043783 ld a5,-32(s0) + 800066c0: 0687c783 lbu a5,104(a5) + 800066c4: 0087e793 ori a5,a5,8 + 800066c8: 0ff7f713 andi a4,a5,255 + 800066cc: fe043783 ld a5,-32(s0) + 800066d0: 06e78423 sb a4,104(a5) + 800066d4: fe843503 ld a0,-24(s0) + 800066d8: aa5f90ef jal ra,8000017c + 800066dc: d1dfb0ef jal ra,800023f8 + 800066e0: 00c0006f j 800066ec + 800066e4: fe843503 ld a0,-24(s0) + 800066e8: a95f90ef jal ra,8000017c + 800066ec: cdcfd0ef jal ra,80003bc8 + 800066f0: 00000013 nop + 800066f4: 01813083 ld ra,24(sp) + 800066f8: 01013403 ld s0,16(sp) + 800066fc: 02010113 addi sp,sp,32 + 80006700: 00008067 ret + +0000000080006704 : + 80006704: fd010113 addi sp,sp,-48 + 80006708: 02113423 sd ra,40(sp) + 8000670c: 02813023 sd s0,32(sp) + 80006710: 03010413 addi s0,sp,48 + 80006714: 00050793 mv a5,a0 + 80006718: fcf42e23 sw a5,-36(s0) + 8000671c: fdc42783 lw a5,-36(s0) + 80006720: 0007879b sext.w a5,a5 + 80006724: 0007d863 bgez a5,80006734 + 80006728: fff00793 li a5,-1 + 8000672c: fef42623 sw a5,-20(s0) + 80006730: 0a40006f j 800067d4 + 80006734: fdc42783 lw a5,-36(s0) + 80006738: 3e800593 li a1,1000 + 8000673c: 00078513 mv a0,a5 + 80006740: 951f90ef jal ra,80000090 <__divdi3> + 80006744: 00050793 mv a5,a0 + 80006748: 0007879b sext.w a5,a5 + 8000674c: 00078713 mv a4,a5 + 80006750: 00070793 mv a5,a4 + 80006754: 0017979b slliw a5,a5,0x1 + 80006758: 00e787bb addw a5,a5,a4 + 8000675c: 0037979b slliw a5,a5,0x3 + 80006760: 00e787bb addw a5,a5,a4 + 80006764: 0027979b slliw a5,a5,0x2 + 80006768: 0007879b sext.w a5,a5 + 8000676c: fef42623 sw a5,-20(s0) + 80006770: fdc42783 lw a5,-36(s0) + 80006774: 3e800593 li a1,1000 + 80006778: 00078513 mv a0,a5 + 8000677c: 999f90ef jal ra,80000114 <__moddi3> + 80006780: 00050793 mv a5,a0 + 80006784: 0007879b sext.w a5,a5 + 80006788: 00078713 mv a4,a5 + 8000678c: 00070793 mv a5,a4 + 80006790: 0017979b slliw a5,a5,0x1 + 80006794: 00e787bb addw a5,a5,a4 + 80006798: 0037979b slliw a5,a5,0x3 + 8000679c: 00e787bb addw a5,a5,a4 + 800067a0: 0027979b slliw a5,a5,0x2 + 800067a4: 0007879b sext.w a5,a5 + 800067a8: 3e77879b addiw a5,a5,999 + 800067ac: 0007879b sext.w a5,a5 + 800067b0: 3e800593 li a1,1000 + 800067b4: 00078513 mv a0,a5 + 800067b8: 8d9f90ef jal ra,80000090 <__divdi3> + 800067bc: 00050793 mv a5,a0 + 800067c0: 0007879b sext.w a5,a5 + 800067c4: 0007879b sext.w a5,a5 + 800067c8: fec42703 lw a4,-20(s0) + 800067cc: 00f707bb addw a5,a4,a5 + 800067d0: fef42623 sw a5,-20(s0) + 800067d4: fec42783 lw a5,-20(s0) + 800067d8: 00078513 mv a0,a5 + 800067dc: 02813083 ld ra,40(sp) + 800067e0: 02013403 ld s0,32(sp) + 800067e4: 03010113 addi sp,sp,48 + 800067e8: 00008067 ret + +00000000800067ec : + 800067ec: ff010113 addi sp,sp,-16 + 800067f0: 00813423 sd s0,8(sp) + 800067f4: 01010413 addi s0,sp,16 + 800067f8: 00000793 li a5,0 + 800067fc: 00078513 mv a0,a5 + 80006800: 00813403 ld s0,8(sp) + 80006804: 01010113 addi sp,sp,16 + 80006808: 00008067 ret + +000000008000680c : + 8000680c: ff010113 addi sp,sp,-16 + 80006810: 00813423 sd s0,8(sp) + 80006814: 01010413 addi s0,sp,16 + 80006818: 00000793 li a5,0 + 8000681c: 00078513 mv a0,a5 + 80006820: 00813403 ld s0,8(sp) + 80006824: 01010113 addi sp,sp,16 + 80006828: 00008067 ret + +000000008000682c : + 8000682c: ff010113 addi sp,sp,-16 + 80006830: 00813423 sd s0,8(sp) + 80006834: 01010413 addi s0,sp,16 + 80006838: 00000793 li a5,0 + 8000683c: 00078513 mv a0,a5 + 80006840: 00813403 ld s0,8(sp) + 80006844: 01010113 addi sp,sp,16 + 80006848: 00008067 ret + +000000008000684c : + 8000684c: ff010113 addi sp,sp,-16 + 80006850: 00813423 sd s0,8(sp) + 80006854: 01010413 addi s0,sp,16 + 80006858: 00000793 li a5,0 + 8000685c: 00078513 mv a0,a5 + 80006860: 00813403 ld s0,8(sp) + 80006864: 01010113 addi sp,sp,16 + 80006868: 00008067 ret + +000000008000686c : + 8000686c: fe010113 addi sp,sp,-32 + 80006870: 00113c23 sd ra,24(sp) + 80006874: 00813823 sd s0,16(sp) + 80006878: 02010413 addi s0,sp,32 + 8000687c: 00013797 auipc a5,0x13 + 80006880: 4b478793 addi a5,a5,1204 # 80019d30 <__rt_init_rti_board_start> + 80006884: fef43423 sd a5,-24(s0) + 80006888: 01c0006f j 800068a4 + 8000688c: fe843783 ld a5,-24(s0) + 80006890: 0007b783 ld a5,0(a5) + 80006894: 000780e7 jalr a5 + 80006898: fe843783 ld a5,-24(s0) + 8000689c: 00878793 addi a5,a5,8 + 800068a0: fef43423 sd a5,-24(s0) + 800068a4: fe843703 ld a4,-24(s0) + 800068a8: 00013797 auipc a5,0x13 + 800068ac: 49078793 addi a5,a5,1168 # 80019d38 <__rt_init_rti_board_end> + 800068b0: fcf76ee3 bltu a4,a5,8000688c + 800068b4: 00000013 nop + 800068b8: 00000013 nop + 800068bc: 01813083 ld ra,24(sp) + 800068c0: 01013403 ld s0,16(sp) + 800068c4: 02010113 addi sp,sp,32 + 800068c8: 00008067 ret + +00000000800068cc : + 800068cc: fe010113 addi sp,sp,-32 + 800068d0: 00113c23 sd ra,24(sp) + 800068d4: 00813823 sd s0,16(sp) + 800068d8: 02010413 addi s0,sp,32 + 800068dc: 00013797 auipc a5,0x13 + 800068e0: 45c78793 addi a5,a5,1116 # 80019d38 <__rt_init_rti_board_end> + 800068e4: fef43423 sd a5,-24(s0) + 800068e8: 01c0006f j 80006904 + 800068ec: fe843783 ld a5,-24(s0) + 800068f0: 0007b783 ld a5,0(a5) + 800068f4: 000780e7 jalr a5 + 800068f8: fe843783 ld a5,-24(s0) + 800068fc: 00878793 addi a5,a5,8 + 80006900: fef43423 sd a5,-24(s0) + 80006904: fe843703 ld a4,-24(s0) + 80006908: 00013797 auipc a5,0x13 + 8000690c: 45078793 addi a5,a5,1104 # 80019d58 <__rt_init_rti_end> + 80006910: fcf76ee3 bltu a4,a5,800068ec + 80006914: 00000013 nop + 80006918: 00000013 nop + 8000691c: 01813083 ld ra,24(sp) + 80006920: 01013403 ld s0,16(sp) + 80006924: 02010113 addi sp,sp,32 + 80006928: 00008067 ret + +000000008000692c : + 8000692c: ff010113 addi sp,sp,-16 + 80006930: 00113423 sd ra,8(sp) + 80006934: 00813023 sd s0,0(sp) + 80006938: 01010413 addi s0,sp,16 + 8000693c: 0c0000ef jal ra,800069fc + 80006940: 00000793 li a5,0 + 80006944: 00078513 mv a0,a5 + 80006948: 00813083 ld ra,8(sp) + 8000694c: 00013403 ld s0,0(sp) + 80006950: 01010113 addi sp,sp,16 + 80006954: 00008067 ret + +0000000080006958 : + 80006958: fe010113 addi sp,sp,-32 + 8000695c: 00113c23 sd ra,24(sp) + 80006960: 00813823 sd s0,16(sp) + 80006964: 02010413 addi s0,sp,32 + 80006968: fea43423 sd a0,-24(s0) + 8000696c: f61ff0ef jal ra,800068cc + 80006970: 959f90ef jal ra,800002c8
+ 80006974: 00000013 nop + 80006978: 01813083 ld ra,24(sp) + 8000697c: 01013403 ld s0,16(sp) + 80006980: 02010113 addi sp,sp,32 + 80006984: 00008067 ret + +0000000080006988 : + 80006988: fe010113 addi sp,sp,-32 + 8000698c: 00113c23 sd ra,24(sp) + 80006990: 00813823 sd s0,16(sp) + 80006994: 02010413 addi s0,sp,32 + 80006998: 01400793 li a5,20 + 8000699c: 00a00713 li a4,10 + 800069a0: 000046b7 lui a3,0x4 + 800069a4: 00000613 li a2,0 + 800069a8: 00000597 auipc a1,0x0 + 800069ac: fb058593 addi a1,a1,-80 # 80006958 + 800069b0: 00010517 auipc a0,0x10 + 800069b4: a8850513 addi a0,a0,-1400 # 80016438 + 800069b8: a88ff0ef jal ra,80005c40 + 800069bc: fea43423 sd a0,-24(s0) + 800069c0: fe843783 ld a5,-24(s0) + 800069c4: 00079e63 bnez a5,800069e0 + 800069c8: 0cb00613 li a2,203 + 800069cc: 00012597 auipc a1,0x12 + 800069d0: d5c58593 addi a1,a1,-676 # 80018728 <__FUNCTION__.2659> + 800069d4: 00010517 auipc a0,0x10 + 800069d8: a6c50513 addi a0,a0,-1428 # 80016440 + 800069dc: 2a1010ef jal ra,8000847c + 800069e0: fe843503 ld a0,-24(s0) + 800069e4: 810ff0ef jal ra,800059f4 + 800069e8: 00000013 nop + 800069ec: 01813083 ld ra,24(sp) + 800069f0: 01013403 ld s0,16(sp) + 800069f4: 02010113 addi sp,sp,32 + 800069f8: 00008067 ret + +00000000800069fc : + 800069fc: ff010113 addi sp,sp,-16 + 80006a00: 00113423 sd ra,8(sp) + 80006a04: 00813023 sd s0,0(sp) + 80006a08: 01010413 addi s0,sp,16 + 80006a0c: f68f90ef jal ra,80000174 + 80006a10: b09f90ef jal ra,80000518 + 80006a14: 085000ef jal ra,80007298 + 80006a18: e30fd0ef jal ra,80004048 + 80006a1c: 909fb0ef jal ra,80002324 + 80006a20: f69ff0ef jal ra,80006988 + 80006a24: e88fd0ef jal ra,800040ac + 80006a28: 5c1010ef jal ra,800087e8 + 80006a2c: 969fb0ef jal ra,80002394 + 80006a30: 00000793 li a5,0 + 80006a34: 00078513 mv a0,a5 + 80006a38: 00813083 ld ra,8(sp) + 80006a3c: 00013403 ld s0,0(sp) + 80006a40: 01010113 addi sp,sp,16 + 80006a44: 00008067 ret + +0000000080006a48 : + 80006a48: fd010113 addi sp,sp,-48 + 80006a4c: 02113423 sd ra,40(sp) + 80006a50: 02813023 sd s0,32(sp) + 80006a54: 03010413 addi s0,sp,48 + 80006a58: fca43c23 sd a0,-40(s0) + 80006a5c: b79ff0ef jal ra,800065d4 + 80006a60: 00050793 mv a5,a0 + 80006a64: 00078e63 beqz a5,80006a80 + 80006a68: fd843783 ld a5,-40(s0) + 80006a6c: 0007871b sext.w a4,a5 + 80006a70: 0001b797 auipc a5,0x1b + 80006a74: 62878793 addi a5,a5,1576 # 80022098 <__rt_errno> + 80006a78: 00e7a023 sw a4,0(a5) + 80006a7c: 0380006f j 80006ab4 + 80006a80: f4dfe0ef jal ra,800059cc + 80006a84: fea43423 sd a0,-24(s0) + 80006a88: fe843783 ld a5,-24(s0) + 80006a8c: 00079e63 bnez a5,80006aa8 + 80006a90: fd843783 ld a5,-40(s0) + 80006a94: 0007871b sext.w a4,a5 + 80006a98: 0001b797 auipc a5,0x1b + 80006a9c: 60078793 addi a5,a5,1536 # 80022098 <__rt_errno> + 80006aa0: 00e7a023 sw a4,0(a5) + 80006aa4: 0100006f j 80006ab4 + 80006aa8: fe843783 ld a5,-24(s0) + 80006aac: fd843703 ld a4,-40(s0) + 80006ab0: 06e7b023 sd a4,96(a5) + 80006ab4: 02813083 ld ra,40(sp) + 80006ab8: 02013403 ld s0,32(sp) + 80006abc: 03010113 addi sp,sp,48 + 80006ac0: 00008067 ret + +0000000080006ac4 : + 80006ac4: fa010113 addi sp,sp,-96 + 80006ac8: 04813c23 sd s0,88(sp) + 80006acc: 06010413 addi s0,sp,96 + 80006ad0: faa43c23 sd a0,-72(s0) + 80006ad4: 00058793 mv a5,a1 + 80006ad8: fac43423 sd a2,-88(s0) + 80006adc: faf42a23 sw a5,-76(s0) + 80006ae0: fb843783 ld a5,-72(s0) + 80006ae4: fef43023 sd a5,-32(s0) + 80006ae8: fb442783 lw a5,-76(s0) + 80006aec: 0ff7f793 andi a5,a5,255 + 80006af0: fcf42623 sw a5,-52(s0) + 80006af4: fa843703 ld a4,-88(s0) + 80006af8: 00700793 li a5,7 + 80006afc: 10e7fa63 bgeu a5,a4,80006c10 + 80006b00: fb843783 ld a5,-72(s0) + 80006b04: 0077f793 andi a5,a5,7 + 80006b08: 10079463 bnez a5,80006c10 + 80006b0c: fb843783 ld a5,-72(s0) + 80006b10: fcf43823 sd a5,-48(s0) + 80006b14: fc043c23 sd zero,-40(s0) + 80006b18: fe042623 sw zero,-20(s0) + 80006b1c: 0240006f j 80006b40 + 80006b20: fd843783 ld a5,-40(s0) + 80006b24: 00879713 slli a4,a5,0x8 + 80006b28: fcc46783 lwu a5,-52(s0) + 80006b2c: 00f767b3 or a5,a4,a5 + 80006b30: fcf43c23 sd a5,-40(s0) + 80006b34: fec42783 lw a5,-20(s0) + 80006b38: 0017879b addiw a5,a5,1 + 80006b3c: fef42623 sw a5,-20(s0) + 80006b40: fec42783 lw a5,-20(s0) + 80006b44: 0007871b sext.w a4,a5 + 80006b48: 00700793 li a5,7 + 80006b4c: fce7fae3 bgeu a5,a4,80006b20 + 80006b50: 0600006f j 80006bb0 + 80006b54: fd043783 ld a5,-48(s0) + 80006b58: 00878713 addi a4,a5,8 + 80006b5c: fce43823 sd a4,-48(s0) + 80006b60: fd843703 ld a4,-40(s0) + 80006b64: 00e7b023 sd a4,0(a5) + 80006b68: fd043783 ld a5,-48(s0) + 80006b6c: 00878713 addi a4,a5,8 + 80006b70: fce43823 sd a4,-48(s0) + 80006b74: fd843703 ld a4,-40(s0) + 80006b78: 00e7b023 sd a4,0(a5) + 80006b7c: fd043783 ld a5,-48(s0) + 80006b80: 00878713 addi a4,a5,8 + 80006b84: fce43823 sd a4,-48(s0) + 80006b88: fd843703 ld a4,-40(s0) + 80006b8c: 00e7b023 sd a4,0(a5) + 80006b90: fd043783 ld a5,-48(s0) + 80006b94: 00878713 addi a4,a5,8 + 80006b98: fce43823 sd a4,-48(s0) + 80006b9c: fd843703 ld a4,-40(s0) + 80006ba0: 00e7b023 sd a4,0(a5) + 80006ba4: fa843783 ld a5,-88(s0) + 80006ba8: fe078793 addi a5,a5,-32 + 80006bac: faf43423 sd a5,-88(s0) + 80006bb0: fa843703 ld a4,-88(s0) + 80006bb4: 01f00793 li a5,31 + 80006bb8: f8e7eee3 bltu a5,a4,80006b54 + 80006bbc: 0240006f j 80006be0 + 80006bc0: fd043783 ld a5,-48(s0) + 80006bc4: 00878713 addi a4,a5,8 + 80006bc8: fce43823 sd a4,-48(s0) + 80006bcc: fd843703 ld a4,-40(s0) + 80006bd0: 00e7b023 sd a4,0(a5) + 80006bd4: fa843783 ld a5,-88(s0) + 80006bd8: ff878793 addi a5,a5,-8 + 80006bdc: faf43423 sd a5,-88(s0) + 80006be0: fa843703 ld a4,-88(s0) + 80006be4: 00700793 li a5,7 + 80006be8: fce7ece3 bltu a5,a4,80006bc0 + 80006bec: fd043783 ld a5,-48(s0) + 80006bf0: fef43023 sd a5,-32(s0) + 80006bf4: 01c0006f j 80006c10 + 80006bf8: fe043783 ld a5,-32(s0) + 80006bfc: 00178713 addi a4,a5,1 + 80006c00: fee43023 sd a4,-32(s0) + 80006c04: fcc42703 lw a4,-52(s0) + 80006c08: 0ff77713 andi a4,a4,255 + 80006c0c: 00e78023 sb a4,0(a5) + 80006c10: fa843783 ld a5,-88(s0) + 80006c14: fff78713 addi a4,a5,-1 + 80006c18: fae43423 sd a4,-88(s0) + 80006c1c: fc079ee3 bnez a5,80006bf8 + 80006c20: fb843783 ld a5,-72(s0) + 80006c24: 00078513 mv a0,a5 + 80006c28: 05813403 ld s0,88(sp) + 80006c2c: 06010113 addi sp,sp,96 + 80006c30: 00008067 ret + +0000000080006c34 : + 80006c34: fa010113 addi sp,sp,-96 + 80006c38: 04813c23 sd s0,88(sp) + 80006c3c: 06010413 addi s0,sp,96 + 80006c40: faa43c23 sd a0,-72(s0) + 80006c44: fab43823 sd a1,-80(s0) + 80006c48: fac43423 sd a2,-88(s0) + 80006c4c: fb843783 ld a5,-72(s0) + 80006c50: fef43423 sd a5,-24(s0) + 80006c54: fb043783 ld a5,-80(s0) + 80006c58: fef43023 sd a5,-32(s0) + 80006c5c: fa843783 ld a5,-88(s0) + 80006c60: fcf42623 sw a5,-52(s0) + 80006c64: fcc42783 lw a5,-52(s0) + 80006c68: 00078713 mv a4,a5 + 80006c6c: 01f00793 li a5,31 + 80006c70: 14e7f263 bgeu a5,a4,80006db4 + 80006c74: fe043703 ld a4,-32(s0) + 80006c78: fe843783 ld a5,-24(s0) + 80006c7c: 00f767b3 or a5,a4,a5 + 80006c80: 0077f793 andi a5,a5,7 + 80006c84: 12079863 bnez a5,80006db4 + 80006c88: fe843783 ld a5,-24(s0) + 80006c8c: fcf43c23 sd a5,-40(s0) + 80006c90: fe043783 ld a5,-32(s0) + 80006c94: fcf43823 sd a5,-48(s0) + 80006c98: 0940006f j 80006d2c + 80006c9c: fd043703 ld a4,-48(s0) + 80006ca0: 00870793 addi a5,a4,8 + 80006ca4: fcf43823 sd a5,-48(s0) + 80006ca8: fd843783 ld a5,-40(s0) + 80006cac: 00878693 addi a3,a5,8 + 80006cb0: fcd43c23 sd a3,-40(s0) + 80006cb4: 00073703 ld a4,0(a4) + 80006cb8: 00e7b023 sd a4,0(a5) + 80006cbc: fd043703 ld a4,-48(s0) + 80006cc0: 00870793 addi a5,a4,8 + 80006cc4: fcf43823 sd a5,-48(s0) + 80006cc8: fd843783 ld a5,-40(s0) + 80006ccc: 00878693 addi a3,a5,8 + 80006cd0: fcd43c23 sd a3,-40(s0) + 80006cd4: 00073703 ld a4,0(a4) + 80006cd8: 00e7b023 sd a4,0(a5) + 80006cdc: fd043703 ld a4,-48(s0) + 80006ce0: 00870793 addi a5,a4,8 + 80006ce4: fcf43823 sd a5,-48(s0) + 80006ce8: fd843783 ld a5,-40(s0) + 80006cec: 00878693 addi a3,a5,8 + 80006cf0: fcd43c23 sd a3,-40(s0) + 80006cf4: 00073703 ld a4,0(a4) + 80006cf8: 00e7b023 sd a4,0(a5) + 80006cfc: fd043703 ld a4,-48(s0) + 80006d00: 00870793 addi a5,a4,8 + 80006d04: fcf43823 sd a5,-48(s0) + 80006d08: fd843783 ld a5,-40(s0) + 80006d0c: 00878693 addi a3,a5,8 + 80006d10: fcd43c23 sd a3,-40(s0) + 80006d14: 00073703 ld a4,0(a4) + 80006d18: 00e7b023 sd a4,0(a5) + 80006d1c: fcc42783 lw a5,-52(s0) + 80006d20: fe07879b addiw a5,a5,-32 + 80006d24: 0007879b sext.w a5,a5 + 80006d28: fcf42623 sw a5,-52(s0) + 80006d2c: fcc42783 lw a5,-52(s0) + 80006d30: 00078713 mv a4,a5 + 80006d34: 01f00793 li a5,31 + 80006d38: f6e7e2e3 bltu a5,a4,80006c9c + 80006d3c: 0340006f j 80006d70 + 80006d40: fd043703 ld a4,-48(s0) + 80006d44: 00870793 addi a5,a4,8 + 80006d48: fcf43823 sd a5,-48(s0) + 80006d4c: fd843783 ld a5,-40(s0) + 80006d50: 00878693 addi a3,a5,8 + 80006d54: fcd43c23 sd a3,-40(s0) + 80006d58: 00073703 ld a4,0(a4) + 80006d5c: 00e7b023 sd a4,0(a5) + 80006d60: fcc42783 lw a5,-52(s0) + 80006d64: ff87879b addiw a5,a5,-8 + 80006d68: 0007879b sext.w a5,a5 + 80006d6c: fcf42623 sw a5,-52(s0) + 80006d70: fcc42783 lw a5,-52(s0) + 80006d74: 00078713 mv a4,a5 + 80006d78: 00700793 li a5,7 + 80006d7c: fce7e2e3 bltu a5,a4,80006d40 + 80006d80: fd843783 ld a5,-40(s0) + 80006d84: fef43423 sd a5,-24(s0) + 80006d88: fd043783 ld a5,-48(s0) + 80006d8c: fef43023 sd a5,-32(s0) + 80006d90: 0240006f j 80006db4 + 80006d94: fe043703 ld a4,-32(s0) + 80006d98: 00170793 addi a5,a4,1 + 80006d9c: fef43023 sd a5,-32(s0) + 80006da0: fe843783 ld a5,-24(s0) + 80006da4: 00178693 addi a3,a5,1 + 80006da8: fed43423 sd a3,-24(s0) + 80006dac: 00074703 lbu a4,0(a4) + 80006db0: 00e78023 sb a4,0(a5) + 80006db4: fcc42783 lw a5,-52(s0) + 80006db8: fff7871b addiw a4,a5,-1 + 80006dbc: fce42623 sw a4,-52(s0) + 80006dc0: fc079ae3 bnez a5,80006d94 + 80006dc4: fb843783 ld a5,-72(s0) + 80006dc8: 00078513 mv a0,a5 + 80006dcc: 05813403 ld s0,88(sp) + 80006dd0: 06010113 addi sp,sp,96 + 80006dd4: 00008067 ret + +0000000080006dd8 : + 80006dd8: fc010113 addi sp,sp,-64 + 80006ddc: 02813c23 sd s0,56(sp) + 80006de0: 04010413 addi s0,sp,64 + 80006de4: fca43c23 sd a0,-40(s0) + 80006de8: fcb43823 sd a1,-48(s0) + 80006dec: fcc43423 sd a2,-56(s0) + 80006df0: fd843783 ld a5,-40(s0) + 80006df4: fef43423 sd a5,-24(s0) + 80006df8: fd043783 ld a5,-48(s0) + 80006dfc: fef43023 sd a5,-32(s0) + 80006e00: fe043703 ld a4,-32(s0) + 80006e04: fe843783 ld a5,-24(s0) + 80006e08: 08f77c63 bgeu a4,a5,80006ea0 + 80006e0c: fe043703 ld a4,-32(s0) + 80006e10: fc843783 ld a5,-56(s0) + 80006e14: 00f707b3 add a5,a4,a5 + 80006e18: fe843703 ld a4,-24(s0) + 80006e1c: 08f77263 bgeu a4,a5,80006ea0 + 80006e20: fe843703 ld a4,-24(s0) + 80006e24: fc843783 ld a5,-56(s0) + 80006e28: 00f707b3 add a5,a4,a5 + 80006e2c: fef43423 sd a5,-24(s0) + 80006e30: fe043703 ld a4,-32(s0) + 80006e34: fc843783 ld a5,-56(s0) + 80006e38: 00f707b3 add a5,a4,a5 + 80006e3c: fef43023 sd a5,-32(s0) + 80006e40: 02c0006f j 80006e6c + 80006e44: fe043783 ld a5,-32(s0) + 80006e48: fff78793 addi a5,a5,-1 + 80006e4c: fef43023 sd a5,-32(s0) + 80006e50: fe843783 ld a5,-24(s0) + 80006e54: fff78793 addi a5,a5,-1 + 80006e58: fef43423 sd a5,-24(s0) + 80006e5c: fe043783 ld a5,-32(s0) + 80006e60: 0007c703 lbu a4,0(a5) + 80006e64: fe843783 ld a5,-24(s0) + 80006e68: 00e78023 sb a4,0(a5) + 80006e6c: fc843783 ld a5,-56(s0) + 80006e70: fff78713 addi a4,a5,-1 + 80006e74: fce43423 sd a4,-56(s0) + 80006e78: fc0796e3 bnez a5,80006e44 + 80006e7c: 0340006f j 80006eb0 + 80006e80: fe043703 ld a4,-32(s0) + 80006e84: 00170793 addi a5,a4,1 + 80006e88: fef43023 sd a5,-32(s0) + 80006e8c: fe843783 ld a5,-24(s0) + 80006e90: 00178693 addi a3,a5,1 + 80006e94: fed43423 sd a3,-24(s0) + 80006e98: 00074703 lbu a4,0(a4) + 80006e9c: 00e78023 sb a4,0(a5) + 80006ea0: fc843783 ld a5,-56(s0) + 80006ea4: fff78713 addi a4,a5,-1 + 80006ea8: fce43423 sd a4,-56(s0) + 80006eac: fc079ae3 bnez a5,80006e80 + 80006eb0: fd843783 ld a5,-40(s0) + 80006eb4: 00078513 mv a0,a5 + 80006eb8: 03813403 ld s0,56(sp) + 80006ebc: 04010113 addi sp,sp,64 + 80006ec0: 00008067 ret + +0000000080006ec4 : + 80006ec4: fb010113 addi sp,sp,-80 + 80006ec8: 04813423 sd s0,72(sp) + 80006ecc: 05010413 addi s0,sp,80 + 80006ed0: fca43423 sd a0,-56(s0) + 80006ed4: fcb43023 sd a1,-64(s0) + 80006ed8: fac43c23 sd a2,-72(s0) + 80006edc: fc042e23 sw zero,-36(s0) + 80006ee0: fc843783 ld a5,-56(s0) + 80006ee4: fef43423 sd a5,-24(s0) + 80006ee8: fc043783 ld a5,-64(s0) + 80006eec: fef43023 sd a5,-32(s0) + 80006ef0: 0540006f j 80006f44 + 80006ef4: fe843783 ld a5,-24(s0) + 80006ef8: 0007c783 lbu a5,0(a5) + 80006efc: 0007871b sext.w a4,a5 + 80006f00: fe043783 ld a5,-32(s0) + 80006f04: 0007c783 lbu a5,0(a5) + 80006f08: 0007879b sext.w a5,a5 + 80006f0c: 40f707bb subw a5,a4,a5 + 80006f10: fcf42e23 sw a5,-36(s0) + 80006f14: fdc42783 lw a5,-36(s0) + 80006f18: 0007879b sext.w a5,a5 + 80006f1c: 02079a63 bnez a5,80006f50 + 80006f20: fe843783 ld a5,-24(s0) + 80006f24: 00178793 addi a5,a5,1 + 80006f28: fef43423 sd a5,-24(s0) + 80006f2c: fe043783 ld a5,-32(s0) + 80006f30: 00178793 addi a5,a5,1 + 80006f34: fef43023 sd a5,-32(s0) + 80006f38: fb843783 ld a5,-72(s0) + 80006f3c: fff78793 addi a5,a5,-1 + 80006f40: faf43c23 sd a5,-72(s0) + 80006f44: fb843783 ld a5,-72(s0) + 80006f48: fa0796e3 bnez a5,80006ef4 + 80006f4c: 0080006f j 80006f54 + 80006f50: 00000013 nop + 80006f54: fdc42783 lw a5,-36(s0) + 80006f58: 00078513 mv a0,a5 + 80006f5c: 04813403 ld s0,72(sp) + 80006f60: 05010113 addi sp,sp,80 + 80006f64: 00008067 ret + +0000000080006f68 : + 80006f68: fd010113 addi sp,sp,-48 + 80006f6c: 02113423 sd ra,40(sp) + 80006f70: 02813023 sd s0,32(sp) + 80006f74: 03010413 addi s0,sp,48 + 80006f78: fca43c23 sd a0,-40(s0) + 80006f7c: fcb43823 sd a1,-48(s0) + 80006f80: fd043503 ld a0,-48(s0) + 80006f84: 258000ef jal ra,800071dc + 80006f88: 00050793 mv a5,a0 + 80006f8c: fef42423 sw a5,-24(s0) + 80006f90: fe842783 lw a5,-24(s0) + 80006f94: 0007879b sext.w a5,a5 + 80006f98: 00079663 bnez a5,80006fa4 + 80006f9c: fd843783 ld a5,-40(s0) + 80006fa0: 06c0006f j 8000700c + 80006fa4: fd843503 ld a0,-40(s0) + 80006fa8: 234000ef jal ra,800071dc + 80006fac: 00050793 mv a5,a0 + 80006fb0: fef42623 sw a5,-20(s0) + 80006fb4: 0400006f j 80006ff4 + 80006fb8: fec42783 lw a5,-20(s0) + 80006fbc: fff7879b addiw a5,a5,-1 + 80006fc0: fef42623 sw a5,-20(s0) + 80006fc4: fe842783 lw a5,-24(s0) + 80006fc8: 00078613 mv a2,a5 + 80006fcc: fd043583 ld a1,-48(s0) + 80006fd0: fd843503 ld a0,-40(s0) + 80006fd4: ef1ff0ef jal ra,80006ec4 + 80006fd8: 00050793 mv a5,a0 + 80006fdc: 00079663 bnez a5,80006fe8 + 80006fe0: fd843783 ld a5,-40(s0) + 80006fe4: 0280006f j 8000700c + 80006fe8: fd843783 ld a5,-40(s0) + 80006fec: 00178793 addi a5,a5,1 + 80006ff0: fcf43c23 sd a5,-40(s0) + 80006ff4: fec42703 lw a4,-20(s0) + 80006ff8: fe842783 lw a5,-24(s0) + 80006ffc: 0007071b sext.w a4,a4 + 80007000: 0007879b sext.w a5,a5 + 80007004: faf75ae3 bge a4,a5,80006fb8 + 80007008: 00000793 li a5,0 + 8000700c: 00078513 mv a0,a5 + 80007010: 02813083 ld ra,40(sp) + 80007014: 02013403 ld s0,32(sp) + 80007018: 03010113 addi sp,sp,48 + 8000701c: 00008067 ret + +0000000080007020 : + 80007020: fc010113 addi sp,sp,-64 + 80007024: 02813c23 sd s0,56(sp) + 80007028: 04010413 addi s0,sp,64 + 8000702c: fca43c23 sd a0,-40(s0) + 80007030: fcb43823 sd a1,-48(s0) + 80007034: fcc43423 sd a2,-56(s0) + 80007038: fc843783 ld a5,-56(s0) + 8000703c: 06078e63 beqz a5,800070b8 + 80007040: fd843783 ld a5,-40(s0) + 80007044: fef43423 sd a5,-24(s0) + 80007048: fd043783 ld a5,-48(s0) + 8000704c: fef43023 sd a5,-32(s0) + 80007050: fe043703 ld a4,-32(s0) + 80007054: 00170793 addi a5,a4,1 + 80007058: fef43023 sd a5,-32(s0) + 8000705c: fe843783 ld a5,-24(s0) + 80007060: 00178693 addi a3,a5,1 + 80007064: fed43423 sd a3,-24(s0) + 80007068: 00074703 lbu a4,0(a4) + 8000706c: 00e78023 sb a4,0(a5) + 80007070: 0007c783 lbu a5,0(a5) + 80007074: 02079863 bnez a5,800070a4 + 80007078: 0140006f j 8000708c + 8000707c: fe843783 ld a5,-24(s0) + 80007080: 00178713 addi a4,a5,1 + 80007084: fee43423 sd a4,-24(s0) + 80007088: 00078023 sb zero,0(a5) + 8000708c: fc843783 ld a5,-56(s0) + 80007090: fff78793 addi a5,a5,-1 + 80007094: fcf43423 sd a5,-56(s0) + 80007098: fc843783 ld a5,-56(s0) + 8000709c: fe0790e3 bnez a5,8000707c + 800070a0: 0180006f j 800070b8 + 800070a4: fc843783 ld a5,-56(s0) + 800070a8: fff78793 addi a5,a5,-1 + 800070ac: fcf43423 sd a5,-56(s0) + 800070b0: fc843783 ld a5,-56(s0) + 800070b4: f8079ee3 bnez a5,80007050 + 800070b8: fd843783 ld a5,-40(s0) + 800070bc: 00078513 mv a0,a5 + 800070c0: 03813403 ld s0,56(sp) + 800070c4: 04010113 addi sp,sp,64 + 800070c8: 00008067 ret + +00000000800070cc : + 800070cc: fd010113 addi sp,sp,-48 + 800070d0: 02813423 sd s0,40(sp) + 800070d4: 02913023 sd s1,32(sp) + 800070d8: 03010413 addi s0,sp,48 + 800070dc: fea43423 sd a0,-24(s0) + 800070e0: feb43023 sd a1,-32(s0) + 800070e4: fcc43c23 sd a2,-40(s0) + 800070e8: 00000493 li s1,0 + 800070ec: 0500006f j 8000713c + 800070f0: fe843783 ld a5,-24(s0) + 800070f4: 0007c703 lbu a4,0(a5) + 800070f8: fe043783 ld a5,-32(s0) + 800070fc: 00178693 addi a3,a5,1 + 80007100: fed43023 sd a3,-32(s0) + 80007104: 0007c783 lbu a5,0(a5) + 80007108: 40f707bb subw a5,a4,a5 + 8000710c: 0ff7f793 andi a5,a5,255 + 80007110: 0187949b slliw s1,a5,0x18 + 80007114: 4184d49b sraiw s1,s1,0x18 + 80007118: 02049663 bnez s1,80007144 + 8000711c: fe843783 ld a5,-24(s0) + 80007120: 00178713 addi a4,a5,1 + 80007124: fee43423 sd a4,-24(s0) + 80007128: 0007c783 lbu a5,0(a5) + 8000712c: 00078c63 beqz a5,80007144 + 80007130: fd843783 ld a5,-40(s0) + 80007134: fff78793 addi a5,a5,-1 + 80007138: fcf43c23 sd a5,-40(s0) + 8000713c: fd843783 ld a5,-40(s0) + 80007140: fa0798e3 bnez a5,800070f0 + 80007144: 0004879b sext.w a5,s1 + 80007148: 00078513 mv a0,a5 + 8000714c: 02813403 ld s0,40(sp) + 80007150: 02013483 ld s1,32(sp) + 80007154: 03010113 addi sp,sp,48 + 80007158: 00008067 ret + +000000008000715c : + 8000715c: fe010113 addi sp,sp,-32 + 80007160: 00813c23 sd s0,24(sp) + 80007164: 02010413 addi s0,sp,32 + 80007168: fea43423 sd a0,-24(s0) + 8000716c: feb43023 sd a1,-32(s0) + 80007170: 01c0006f j 8000718c + 80007174: fe843783 ld a5,-24(s0) + 80007178: 00178793 addi a5,a5,1 + 8000717c: fef43423 sd a5,-24(s0) + 80007180: fe043783 ld a5,-32(s0) + 80007184: 00178793 addi a5,a5,1 + 80007188: fef43023 sd a5,-32(s0) + 8000718c: fe843783 ld a5,-24(s0) + 80007190: 0007c783 lbu a5,0(a5) + 80007194: 00078c63 beqz a5,800071ac + 80007198: fe843783 ld a5,-24(s0) + 8000719c: 0007c703 lbu a4,0(a5) + 800071a0: fe043783 ld a5,-32(s0) + 800071a4: 0007c783 lbu a5,0(a5) + 800071a8: fcf706e3 beq a4,a5,80007174 + 800071ac: fe843783 ld a5,-24(s0) + 800071b0: 0007c783 lbu a5,0(a5) + 800071b4: 0007871b sext.w a4,a5 + 800071b8: fe043783 ld a5,-32(s0) + 800071bc: 0007c783 lbu a5,0(a5) + 800071c0: 0007879b sext.w a5,a5 + 800071c4: 40f707bb subw a5,a4,a5 + 800071c8: 0007879b sext.w a5,a5 + 800071cc: 00078513 mv a0,a5 + 800071d0: 01813403 ld s0,24(sp) + 800071d4: 02010113 addi sp,sp,32 + 800071d8: 00008067 ret + +00000000800071dc : + 800071dc: fd010113 addi sp,sp,-48 + 800071e0: 02813423 sd s0,40(sp) + 800071e4: 03010413 addi s0,sp,48 + 800071e8: fca43c23 sd a0,-40(s0) + 800071ec: fd843783 ld a5,-40(s0) + 800071f0: fef43423 sd a5,-24(s0) + 800071f4: 0100006f j 80007204 + 800071f8: fe843783 ld a5,-24(s0) + 800071fc: 00178793 addi a5,a5,1 + 80007200: fef43423 sd a5,-24(s0) + 80007204: fe843783 ld a5,-24(s0) + 80007208: 0007c783 lbu a5,0(a5) + 8000720c: fe0796e3 bnez a5,800071f8 + 80007210: fe843703 ld a4,-24(s0) + 80007214: fd843783 ld a5,-40(s0) + 80007218: 40f707b3 sub a5,a4,a5 + 8000721c: 00078513 mv a0,a5 + 80007220: 02813403 ld s0,40(sp) + 80007224: 03010113 addi sp,sp,48 + 80007228: 00008067 ret + +000000008000722c : + 8000722c: fd010113 addi sp,sp,-48 + 80007230: 02113423 sd ra,40(sp) + 80007234: 02813023 sd s0,32(sp) + 80007238: 03010413 addi s0,sp,48 + 8000723c: fca43c23 sd a0,-40(s0) + 80007240: fd843503 ld a0,-40(s0) + 80007244: f99ff0ef jal ra,800071dc + 80007248: 00050793 mv a5,a0 + 8000724c: 00178793 addi a5,a5,1 + 80007250: fef43423 sd a5,-24(s0) + 80007254: fe843503 ld a0,-24(s0) + 80007258: bd0fd0ef jal ra,80004628 + 8000725c: fea43023 sd a0,-32(s0) + 80007260: fe043783 ld a5,-32(s0) + 80007264: 00079663 bnez a5,80007270 + 80007268: 00000793 li a5,0 + 8000726c: 0180006f j 80007284 + 80007270: fe843603 ld a2,-24(s0) + 80007274: fd843583 ld a1,-40(s0) + 80007278: fe043503 ld a0,-32(s0) + 8000727c: 9b9ff0ef jal ra,80006c34 + 80007280: fe043783 ld a5,-32(s0) + 80007284: 00078513 mv a0,a5 + 80007288: 02813083 ld ra,40(sp) + 8000728c: 02013403 ld s0,32(sp) + 80007290: 03010113 addi sp,sp,48 + 80007294: 00008067 ret + +0000000080007298 : + 80007298: ff010113 addi sp,sp,-16 + 8000729c: 00113423 sd ra,8(sp) + 800072a0: 00813023 sd s0,0(sp) + 800072a4: 01010413 addi s0,sp,16 + 800072a8: 0000f517 auipc a0,0xf + 800072ac: 1a850513 addi a0,a0,424 # 80016450 + 800072b0: 76d000ef jal ra,8000821c + 800072b4: 0000f517 auipc a0,0xf + 800072b8: 1ac50513 addi a0,a0,428 # 80016460 + 800072bc: 761000ef jal ra,8000821c + 800072c0: 0000f717 auipc a4,0xf + 800072c4: 1c870713 addi a4,a4,456 # 80016488 + 800072c8: 00400693 li a3,4 + 800072cc: 00000613 li a2,0 + 800072d0: 00400593 li a1,4 + 800072d4: 0000f517 auipc a0,0xf + 800072d8: 1c450513 addi a0,a0,452 # 80016498 + 800072dc: 741000ef jal ra,8000821c + 800072e0: 0000f517 auipc a0,0xf + 800072e4: 1d850513 addi a0,a0,472 # 800164b8 + 800072e8: 735000ef jal ra,8000821c + 800072ec: 00000013 nop + 800072f0: 00813083 ld ra,8(sp) + 800072f4: 00013403 ld s0,0(sp) + 800072f8: 01010113 addi sp,sp,16 + 800072fc: 00008067 ret + +0000000080007300 : + 80007300: fd010113 addi sp,sp,-48 + 80007304: 02113423 sd ra,40(sp) + 80007308: 02813023 sd s0,32(sp) + 8000730c: 03010413 addi s0,sp,48 + 80007310: fca43c23 sd a0,-40(s0) + 80007314: 00058793 mv a5,a1 + 80007318: fcf42a23 sw a5,-44(s0) + 8000731c: fd442783 lw a5,-44(s0) + 80007320: 0007871b sext.w a4,a5 + 80007324: 00a00793 li a5,10 + 80007328: 04f71463 bne a4,a5,80007370 + 8000732c: fd843783 ld a5,-40(s0) + 80007330: 0007b783 ld a5,0(a5) + 80007334: 00a00593 li a1,10 + 80007338: 00078513 mv a0,a5 + 8000733c: da5f80ef jal ra,800000e0 <__umoddi3> + 80007340: 00050793 mv a5,a0 + 80007344: fef42623 sw a5,-20(s0) + 80007348: fd843783 ld a5,-40(s0) + 8000734c: 0007b783 ld a5,0(a5) + 80007350: 00a00593 li a1,10 + 80007354: 00078513 mv a0,a5 + 80007358: d41f80ef jal ra,80000098 <__udivdi3> + 8000735c: 00050793 mv a5,a0 + 80007360: 00078713 mv a4,a5 + 80007364: fd843783 ld a5,-40(s0) + 80007368: 00e7b023 sd a4,0(a5) + 8000736c: 0300006f j 8000739c + 80007370: fd843783 ld a5,-40(s0) + 80007374: 0007b783 ld a5,0(a5) + 80007378: 0007879b sext.w a5,a5 + 8000737c: 00f7f793 andi a5,a5,15 + 80007380: fef42623 sw a5,-20(s0) + 80007384: fd843783 ld a5,-40(s0) + 80007388: 0007b783 ld a5,0(a5) + 8000738c: 0047d793 srli a5,a5,0x4 + 80007390: 00078713 mv a4,a5 + 80007394: fd843783 ld a5,-40(s0) + 80007398: 00e7b023 sd a4,0(a5) + 8000739c: fec42783 lw a5,-20(s0) + 800073a0: 00078513 mv a0,a5 + 800073a4: 02813083 ld ra,40(sp) + 800073a8: 02013403 ld s0,32(sp) + 800073ac: 03010113 addi sp,sp,48 + 800073b0: 00008067 ret + +00000000800073b4 : + 800073b4: fe010113 addi sp,sp,-32 + 800073b8: 00813c23 sd s0,24(sp) + 800073bc: 00913823 sd s1,16(sp) + 800073c0: 02010413 addi s0,sp,32 + 800073c4: fea43423 sd a0,-24(s0) + 800073c8: 00000493 li s1,0 + 800073cc: 0480006f j 80007414 + 800073d0: 00048713 mv a4,s1 + 800073d4: 00070793 mv a5,a4 + 800073d8: 0027979b slliw a5,a5,0x2 + 800073dc: 00e787bb addw a5,a5,a4 + 800073e0: 0017979b slliw a5,a5,0x1 + 800073e4: 0007871b sext.w a4,a5 + 800073e8: fe843783 ld a5,-24(s0) + 800073ec: 0007b783 ld a5,0(a5) + 800073f0: 00178613 addi a2,a5,1 + 800073f4: fe843683 ld a3,-24(s0) + 800073f8: 00c6b023 sd a2,0(a3) # 4000 <__STACKSIZE__> + 800073fc: 0007c783 lbu a5,0(a5) + 80007400: 0007879b sext.w a5,a5 + 80007404: 00f707bb addw a5,a4,a5 + 80007408: 0007879b sext.w a5,a5 + 8000740c: fd07879b addiw a5,a5,-48 + 80007410: 0007849b sext.w s1,a5 + 80007414: fe843783 ld a5,-24(s0) + 80007418: 0007b783 ld a5,0(a5) + 8000741c: 0007c783 lbu a5,0(a5) + 80007420: 0007879b sext.w a5,a5 + 80007424: fd07879b addiw a5,a5,-48 + 80007428: 0007879b sext.w a5,a5 + 8000742c: 0007879b sext.w a5,a5 + 80007430: 00078713 mv a4,a5 + 80007434: 00900793 li a5,9 + 80007438: f8e7fce3 bgeu a5,a4,800073d0 + 8000743c: 00048793 mv a5,s1 + 80007440: 00078513 mv a0,a5 + 80007444: 01813403 ld s0,24(sp) + 80007448: 01013483 ld s1,16(sp) + 8000744c: 02010113 addi sp,sp,32 + 80007450: 00008067 ret + +0000000080007454 : + 80007454: f8010113 addi sp,sp,-128 + 80007458: 06113c23 sd ra,120(sp) + 8000745c: 06813823 sd s0,112(sp) + 80007460: 06913423 sd s1,104(sp) + 80007464: 07213023 sd s2,96(sp) + 80007468: 08010413 addi s0,sp,128 + 8000746c: faa43423 sd a0,-88(s0) + 80007470: fab43023 sd a1,-96(s0) + 80007474: f8c43c23 sd a2,-104(s0) + 80007478: 00068593 mv a1,a3 + 8000747c: 00070613 mv a2,a4 + 80007480: 00078693 mv a3,a5 + 80007484: 00080713 mv a4,a6 + 80007488: 00058793 mv a5,a1 + 8000748c: f8f42a23 sw a5,-108(s0) + 80007490: 00060793 mv a5,a2 + 80007494: f8f42823 sw a5,-112(s0) + 80007498: 00068793 mv a5,a3 + 8000749c: f8f42623 sw a5,-116(s0) + 800074a0: 00070793 mv a5,a4 + 800074a4: f8f42423 sw a5,-120(s0) + 800074a8: f8c42783 lw a5,-116(s0) + 800074ac: fcf42c23 sw a5,-40(s0) + 800074b0: f9042483 lw s1,-112(s0) + 800074b4: f8842783 lw a5,-120(s0) + 800074b8: 0407f793 andi a5,a5,64 + 800074bc: 0007879b sext.w a5,a5 + 800074c0: 00078863 beqz a5,800074d0 + 800074c4: 00011797 auipc a5,0x11 + 800074c8: 3fc78793 addi a5,a5,1020 # 800188c0 + 800074cc: 00c0006f j 800074d8 + 800074d0: 00011797 auipc a5,0x11 + 800074d4: 40878793 addi a5,a5,1032 # 800188d8 + 800074d8: fcf43823 sd a5,-48(s0) + 800074dc: f8842783 lw a5,-120(s0) + 800074e0: 0107f793 andi a5,a5,16 + 800074e4: 0007879b sext.w a5,a5 + 800074e8: 00078863 beqz a5,800074f8 + 800074ec: f8842783 lw a5,-120(s0) + 800074f0: ffe7f793 andi a5,a5,-2 + 800074f4: f8f42423 sw a5,-120(s0) + 800074f8: f8842783 lw a5,-120(s0) + 800074fc: 0017f793 andi a5,a5,1 + 80007500: 0007879b sext.w a5,a5 + 80007504: 00078663 beqz a5,80007510 + 80007508: 03000793 li a5,48 + 8000750c: 0080006f j 80007514 + 80007510: 02000793 li a5,32 + 80007514: fcf407a3 sb a5,-49(s0) + 80007518: fc040fa3 sb zero,-33(s0) + 8000751c: f8842783 lw a5,-120(s0) + 80007520: 0027f793 andi a5,a5,2 + 80007524: 0007879b sext.w a5,a5 + 80007528: 04078c63 beqz a5,80007580 + 8000752c: f9843783 ld a5,-104(s0) + 80007530: 0007de63 bgez a5,8000754c + 80007534: 02d00793 li a5,45 + 80007538: fcf40fa3 sb a5,-33(s0) + 8000753c: f9843783 ld a5,-104(s0) + 80007540: 40f007b3 neg a5,a5 + 80007544: f8f43c23 sd a5,-104(s0) + 80007548: 0380006f j 80007580 + 8000754c: f8842783 lw a5,-120(s0) + 80007550: 0047f793 andi a5,a5,4 + 80007554: 0007879b sext.w a5,a5 + 80007558: 00078863 beqz a5,80007568 + 8000755c: 02b00793 li a5,43 + 80007560: fcf40fa3 sb a5,-33(s0) + 80007564: 01c0006f j 80007580 + 80007568: f8842783 lw a5,-120(s0) + 8000756c: 0087f793 andi a5,a5,8 + 80007570: 0007879b sext.w a5,a5 + 80007574: 00078663 beqz a5,80007580 + 80007578: 02000793 li a5,32 + 8000757c: fcf40fa3 sb a5,-33(s0) + 80007580: 00000913 li s2,0 + 80007584: f9843783 ld a5,-104(s0) + 80007588: 06079263 bnez a5,800075ec + 8000758c: 00090793 mv a5,s2 + 80007590: 0017871b addiw a4,a5,1 + 80007594: 0007091b sext.w s2,a4 + 80007598: fe040713 addi a4,s0,-32 + 8000759c: 00f707b3 add a5,a4,a5 + 800075a0: 03000713 li a4,48 + 800075a4: fce78c23 sb a4,-40(a5) + 800075a8: 04c0006f j 800075f4 + 800075ac: f9442703 lw a4,-108(s0) + 800075b0: f9840793 addi a5,s0,-104 + 800075b4: 00070593 mv a1,a4 + 800075b8: 00078513 mv a0,a5 + 800075bc: d45ff0ef jal ra,80007300 + 800075c0: 00050793 mv a5,a0 + 800075c4: 00078713 mv a4,a5 + 800075c8: fd043783 ld a5,-48(s0) + 800075cc: 00e78733 add a4,a5,a4 + 800075d0: 00090793 mv a5,s2 + 800075d4: 0017869b addiw a3,a5,1 + 800075d8: 0006891b sext.w s2,a3 + 800075dc: 00074703 lbu a4,0(a4) + 800075e0: fe040693 addi a3,s0,-32 + 800075e4: 00f687b3 add a5,a3,a5 + 800075e8: fce78c23 sb a4,-40(a5) + 800075ec: f9843783 ld a5,-104(s0) + 800075f0: fa079ee3 bnez a5,800075ac + 800075f4: f8c42783 lw a5,-116(s0) + 800075f8: 0007879b sext.w a5,a5 + 800075fc: 00090713 mv a4,s2 + 80007600: 00e7d463 bge a5,a4,80007608 + 80007604: f9242623 sw s2,-116(s0) + 80007608: f8c42783 lw a5,-116(s0) + 8000760c: 40f487bb subw a5,s1,a5 + 80007610: 0007849b sext.w s1,a5 + 80007614: f8842783 lw a5,-120(s0) + 80007618: 0117f793 andi a5,a5,17 + 8000761c: 0007879b sext.w a5,a5 + 80007620: 04079c63 bnez a5,80007678 + 80007624: fdf44783 lbu a5,-33(s0) + 80007628: 0ff7f793 andi a5,a5,255 + 8000762c: 02078e63 beqz a5,80007668 + 80007630: 00048793 mv a5,s1 + 80007634: 02f05a63 blez a5,80007668 + 80007638: fff4879b addiw a5,s1,-1 + 8000763c: 0007849b sext.w s1,a5 + 80007640: 0280006f j 80007668 + 80007644: fa843703 ld a4,-88(s0) + 80007648: fa043783 ld a5,-96(s0) + 8000764c: 00f77863 bgeu a4,a5,8000765c + 80007650: fa843783 ld a5,-88(s0) + 80007654: 02000713 li a4,32 + 80007658: 00e78023 sb a4,0(a5) + 8000765c: fa843783 ld a5,-88(s0) + 80007660: 00178793 addi a5,a5,1 + 80007664: faf43423 sd a5,-88(s0) + 80007668: 00048793 mv a5,s1 + 8000766c: fff7871b addiw a4,a5,-1 + 80007670: 0007049b sext.w s1,a4 + 80007674: fcf048e3 bgtz a5,80007644 + 80007678: fdf44783 lbu a5,-33(s0) + 8000767c: 0ff7f793 andi a5,a5,255 + 80007680: 02078863 beqz a5,800076b0 + 80007684: fa843703 ld a4,-88(s0) + 80007688: fa043783 ld a5,-96(s0) + 8000768c: 00f77863 bgeu a4,a5,8000769c + 80007690: fa843783 ld a5,-88(s0) + 80007694: fdf44703 lbu a4,-33(s0) + 80007698: 00e78023 sb a4,0(a5) + 8000769c: fff4879b addiw a5,s1,-1 + 800076a0: 0007849b sext.w s1,a5 + 800076a4: fa843783 ld a5,-88(s0) + 800076a8: 00178793 addi a5,a5,1 + 800076ac: faf43423 sd a5,-88(s0) + 800076b0: f8842783 lw a5,-120(s0) + 800076b4: 0107f793 andi a5,a5,16 + 800076b8: 0007879b sext.w a5,a5 + 800076bc: 06079263 bnez a5,80007720 + 800076c0: 0280006f j 800076e8 + 800076c4: fa843703 ld a4,-88(s0) + 800076c8: fa043783 ld a5,-96(s0) + 800076cc: 00f77863 bgeu a4,a5,800076dc + 800076d0: fa843783 ld a5,-88(s0) + 800076d4: fcf44703 lbu a4,-49(s0) + 800076d8: 00e78023 sb a4,0(a5) + 800076dc: fa843783 ld a5,-88(s0) + 800076e0: 00178793 addi a5,a5,1 + 800076e4: faf43423 sd a5,-88(s0) + 800076e8: 00048793 mv a5,s1 + 800076ec: fff7871b addiw a4,a5,-1 + 800076f0: 0007049b sext.w s1,a4 + 800076f4: fcf048e3 bgtz a5,800076c4 + 800076f8: 0280006f j 80007720 + 800076fc: fa843703 ld a4,-88(s0) + 80007700: fa043783 ld a5,-96(s0) + 80007704: 00f77863 bgeu a4,a5,80007714 + 80007708: fa843783 ld a5,-88(s0) + 8000770c: 03000713 li a4,48 + 80007710: 00e78023 sb a4,0(a5) + 80007714: fa843783 ld a5,-88(s0) + 80007718: 00178793 addi a5,a5,1 + 8000771c: faf43423 sd a5,-88(s0) + 80007720: f8c42783 lw a5,-116(s0) + 80007724: fff7871b addiw a4,a5,-1 + 80007728: f8e42623 sw a4,-116(s0) + 8000772c: 00090713 mv a4,s2 + 80007730: fcf746e3 blt a4,a5,800076fc + 80007734: 0300006f j 80007764 + 80007738: fa843703 ld a4,-88(s0) + 8000773c: fa043783 ld a5,-96(s0) + 80007740: 00f77c63 bgeu a4,a5,80007758 + 80007744: fe040793 addi a5,s0,-32 + 80007748: 012787b3 add a5,a5,s2 + 8000774c: fd87c703 lbu a4,-40(a5) + 80007750: fa843783 ld a5,-88(s0) + 80007754: 00e78023 sb a4,0(a5) + 80007758: fa843783 ld a5,-88(s0) + 8000775c: 00178793 addi a5,a5,1 + 80007760: faf43423 sd a5,-88(s0) + 80007764: 00090793 mv a5,s2 + 80007768: fff7871b addiw a4,a5,-1 + 8000776c: 0007091b sext.w s2,a4 + 80007770: 02f05c63 blez a5,800077a8 + 80007774: fd842783 lw a5,-40(s0) + 80007778: 0007879b sext.w a5,a5 + 8000777c: fa079ee3 bnez a5,80007738 + 80007780: 0280006f j 800077a8 + 80007784: fa843703 ld a4,-88(s0) + 80007788: fa043783 ld a5,-96(s0) + 8000778c: 00f77863 bgeu a4,a5,8000779c + 80007790: fa843783 ld a5,-88(s0) + 80007794: 02000713 li a4,32 + 80007798: 00e78023 sb a4,0(a5) + 8000779c: fa843783 ld a5,-88(s0) + 800077a0: 00178793 addi a5,a5,1 + 800077a4: faf43423 sd a5,-88(s0) + 800077a8: 00048793 mv a5,s1 + 800077ac: fff7871b addiw a4,a5,-1 + 800077b0: 0007049b sext.w s1,a4 + 800077b4: fcf048e3 bgtz a5,80007784 + 800077b8: fa843783 ld a5,-88(s0) + 800077bc: 00078513 mv a0,a5 + 800077c0: 07813083 ld ra,120(sp) + 800077c4: 07013403 ld s0,112(sp) + 800077c8: 06813483 ld s1,104(sp) + 800077cc: 06013903 ld s2,96(sp) + 800077d0: 08010113 addi sp,sp,128 + 800077d4: 00008067 ret + +00000000800077d8 : + 800077d8: f9010113 addi sp,sp,-112 + 800077dc: 06113423 sd ra,104(sp) + 800077e0: 06813023 sd s0,96(sp) + 800077e4: 07010413 addi s0,sp,112 + 800077e8: faa43423 sd a0,-88(s0) + 800077ec: fab43023 sd a1,-96(s0) + 800077f0: f8c43c23 sd a2,-104(s0) + 800077f4: f8d43823 sd a3,-112(s0) + 800077f8: fa843783 ld a5,-88(s0) + 800077fc: fcf43c23 sd a5,-40(s0) + 80007800: fa843703 ld a4,-88(s0) + 80007804: fa043783 ld a5,-96(s0) + 80007808: 00f707b3 add a5,a4,a5 + 8000780c: fcf43823 sd a5,-48(s0) + 80007810: fd043703 ld a4,-48(s0) + 80007814: fa843783 ld a5,-88(s0) + 80007818: 78f77063 bgeu a4,a5,80007f98 + 8000781c: fff00793 li a5,-1 + 80007820: fcf43823 sd a5,-48(s0) + 80007824: fd043703 ld a4,-48(s0) + 80007828: fa843783 ld a5,-88(s0) + 8000782c: 40f707b3 sub a5,a4,a5 + 80007830: faf43023 sd a5,-96(s0) + 80007834: 7640006f j 80007f98 + 80007838: f9843783 ld a5,-104(s0) + 8000783c: 0007c783 lbu a5,0(a5) + 80007840: 00078713 mv a4,a5 + 80007844: 02500793 li a5,37 + 80007848: 02f70863 beq a4,a5,80007878 + 8000784c: fd843703 ld a4,-40(s0) + 80007850: fd043783 ld a5,-48(s0) + 80007854: 00f77a63 bgeu a4,a5,80007868 + 80007858: f9843783 ld a5,-104(s0) + 8000785c: 0007c703 lbu a4,0(a5) + 80007860: fd843783 ld a5,-40(s0) + 80007864: 00e78023 sb a4,0(a5) + 80007868: fd843783 ld a5,-40(s0) + 8000786c: 00178793 addi a5,a5,1 + 80007870: fcf43c23 sd a5,-40(s0) + 80007874: 7180006f j 80007f8c + 80007878: fc040323 sb zero,-58(s0) + 8000787c: f9843783 ld a5,-104(s0) + 80007880: 00178793 addi a5,a5,1 + 80007884: f8f43c23 sd a5,-104(s0) + 80007888: f9843783 ld a5,-104(s0) + 8000788c: 0007c783 lbu a5,0(a5) + 80007890: 00078713 mv a4,a5 + 80007894: 02d00793 li a5,45 + 80007898: 00f71a63 bne a4,a5,800078ac + 8000789c: fc644783 lbu a5,-58(s0) + 800078a0: 0107e793 ori a5,a5,16 + 800078a4: fcf40323 sb a5,-58(s0) + 800078a8: fd5ff06f j 8000787c + 800078ac: f9843783 ld a5,-104(s0) + 800078b0: 0007c783 lbu a5,0(a5) + 800078b4: 00078713 mv a4,a5 + 800078b8: 02b00793 li a5,43 + 800078bc: 00f71a63 bne a4,a5,800078d0 + 800078c0: fc644783 lbu a5,-58(s0) + 800078c4: 0047e793 ori a5,a5,4 + 800078c8: fcf40323 sb a5,-58(s0) + 800078cc: fb1ff06f j 8000787c + 800078d0: f9843783 ld a5,-104(s0) + 800078d4: 0007c783 lbu a5,0(a5) + 800078d8: 00078713 mv a4,a5 + 800078dc: 02000793 li a5,32 + 800078e0: 00f71a63 bne a4,a5,800078f4 + 800078e4: fc644783 lbu a5,-58(s0) + 800078e8: 0087e793 ori a5,a5,8 + 800078ec: fcf40323 sb a5,-58(s0) + 800078f0: f8dff06f j 8000787c + 800078f4: f9843783 ld a5,-104(s0) + 800078f8: 0007c783 lbu a5,0(a5) + 800078fc: 00078713 mv a4,a5 + 80007900: 02300793 li a5,35 + 80007904: 00f71a63 bne a4,a5,80007918 + 80007908: fc644783 lbu a5,-58(s0) + 8000790c: 0207e793 ori a5,a5,32 + 80007910: fcf40323 sb a5,-58(s0) + 80007914: f69ff06f j 8000787c + 80007918: f9843783 ld a5,-104(s0) + 8000791c: 0007c783 lbu a5,0(a5) + 80007920: 00078713 mv a4,a5 + 80007924: 03000793 li a5,48 + 80007928: 00f71a63 bne a4,a5,8000793c + 8000792c: fc644783 lbu a5,-58(s0) + 80007930: 0017e793 ori a5,a5,1 + 80007934: fcf40323 sb a5,-58(s0) + 80007938: f45ff06f j 8000787c + 8000793c: 00000013 nop + 80007940: fff00793 li a5,-1 + 80007944: fcf42023 sw a5,-64(s0) + 80007948: f9843783 ld a5,-104(s0) + 8000794c: 0007c783 lbu a5,0(a5) + 80007950: 0007879b sext.w a5,a5 + 80007954: fd07879b addiw a5,a5,-48 + 80007958: 0007879b sext.w a5,a5 + 8000795c: 0007879b sext.w a5,a5 + 80007960: 00078713 mv a4,a5 + 80007964: 00900793 li a5,9 + 80007968: 00e7ee63 bltu a5,a4,80007984 + 8000796c: f9840793 addi a5,s0,-104 + 80007970: 00078513 mv a0,a5 + 80007974: a41ff0ef jal ra,800073b4 + 80007978: 00050793 mv a5,a0 + 8000797c: fcf42023 sw a5,-64(s0) + 80007980: 05c0006f j 800079dc + 80007984: f9843783 ld a5,-104(s0) + 80007988: 0007c783 lbu a5,0(a5) + 8000798c: 00078713 mv a4,a5 + 80007990: 02a00793 li a5,42 + 80007994: 04f71463 bne a4,a5,800079dc + 80007998: f9843783 ld a5,-104(s0) + 8000799c: 00178793 addi a5,a5,1 + 800079a0: f8f43c23 sd a5,-104(s0) + 800079a4: f9043783 ld a5,-112(s0) + 800079a8: 00878713 addi a4,a5,8 + 800079ac: f8e43823 sd a4,-112(s0) + 800079b0: 0007a783 lw a5,0(a5) + 800079b4: fcf42023 sw a5,-64(s0) + 800079b8: fc042783 lw a5,-64(s0) + 800079bc: 0007879b sext.w a5,a5 + 800079c0: 0007de63 bgez a5,800079dc + 800079c4: fc042783 lw a5,-64(s0) + 800079c8: 40f007bb negw a5,a5 + 800079cc: fcf42023 sw a5,-64(s0) + 800079d0: fc644783 lbu a5,-58(s0) + 800079d4: 0107e793 ori a5,a5,16 + 800079d8: fcf40323 sb a5,-58(s0) + 800079dc: fff00793 li a5,-1 + 800079e0: faf42e23 sw a5,-68(s0) + 800079e4: f9843783 ld a5,-104(s0) + 800079e8: 0007c783 lbu a5,0(a5) + 800079ec: 00078713 mv a4,a5 + 800079f0: 02e00793 li a5,46 + 800079f4: 08f71863 bne a4,a5,80007a84 + 800079f8: f9843783 ld a5,-104(s0) + 800079fc: 00178793 addi a5,a5,1 + 80007a00: f8f43c23 sd a5,-104(s0) + 80007a04: f9843783 ld a5,-104(s0) + 80007a08: 0007c783 lbu a5,0(a5) + 80007a0c: 0007879b sext.w a5,a5 + 80007a10: fd07879b addiw a5,a5,-48 + 80007a14: 0007879b sext.w a5,a5 + 80007a18: 0007879b sext.w a5,a5 + 80007a1c: 00078713 mv a4,a5 + 80007a20: 00900793 li a5,9 + 80007a24: 00e7ee63 bltu a5,a4,80007a40 + 80007a28: f9840793 addi a5,s0,-104 + 80007a2c: 00078513 mv a0,a5 + 80007a30: 985ff0ef jal ra,800073b4 + 80007a34: 00050793 mv a5,a0 + 80007a38: faf42e23 sw a5,-68(s0) + 80007a3c: 0380006f j 80007a74 + 80007a40: f9843783 ld a5,-104(s0) + 80007a44: 0007c783 lbu a5,0(a5) + 80007a48: 00078713 mv a4,a5 + 80007a4c: 02a00793 li a5,42 + 80007a50: 02f71263 bne a4,a5,80007a74 + 80007a54: f9843783 ld a5,-104(s0) + 80007a58: 00178793 addi a5,a5,1 + 80007a5c: f8f43c23 sd a5,-104(s0) + 80007a60: f9043783 ld a5,-112(s0) + 80007a64: 00878713 addi a4,a5,8 + 80007a68: f8e43823 sd a4,-112(s0) + 80007a6c: 0007a783 lw a5,0(a5) + 80007a70: faf42e23 sw a5,-68(s0) + 80007a74: fbc42783 lw a5,-68(s0) + 80007a78: 0007879b sext.w a5,a5 + 80007a7c: 0007d463 bgez a5,80007a84 + 80007a80: fa042e23 sw zero,-68(s0) + 80007a84: fc0402a3 sb zero,-59(s0) + 80007a88: f9843783 ld a5,-104(s0) + 80007a8c: 0007c783 lbu a5,0(a5) + 80007a90: 00078713 mv a4,a5 + 80007a94: 06800793 li a5,104 + 80007a98: 00f70c63 beq a4,a5,80007ab0 + 80007a9c: f9843783 ld a5,-104(s0) + 80007aa0: 0007c783 lbu a5,0(a5) + 80007aa4: 00078713 mv a4,a5 + 80007aa8: 06c00793 li a5,108 + 80007aac: 00f71e63 bne a4,a5,80007ac8 + 80007ab0: f9843783 ld a5,-104(s0) + 80007ab4: 0007c783 lbu a5,0(a5) + 80007ab8: fcf402a3 sb a5,-59(s0) + 80007abc: f9843783 ld a5,-104(s0) + 80007ac0: 00178793 addi a5,a5,1 + 80007ac4: f8f43c23 sd a5,-104(s0) + 80007ac8: 00a00793 li a5,10 + 80007acc: fcf403a3 sb a5,-57(s0) + 80007ad0: f9843783 ld a5,-104(s0) + 80007ad4: 0007c783 lbu a5,0(a5) + 80007ad8: 0007879b sext.w a5,a5 + 80007adc: 00078693 mv a3,a5 + 80007ae0: 02500713 li a4,37 + 80007ae4: 30e68e63 beq a3,a4,80007e00 + 80007ae8: 00078693 mv a3,a5 + 80007aec: 02500713 li a4,37 + 80007af0: 36e6c663 blt a3,a4,80007e5c + 80007af4: 00078693 mv a3,a5 + 80007af8: 07800713 li a4,120 + 80007afc: 36d74063 blt a4,a3,80007e5c + 80007b00: 00078693 mv a3,a5 + 80007b04: 05800713 li a4,88 + 80007b08: 34e6ca63 blt a3,a4,80007e5c + 80007b0c: fa87869b addiw a3,a5,-88 + 80007b10: 0006871b sext.w a4,a3 + 80007b14: 02000793 li a5,32 + 80007b18: 34e7e263 bltu a5,a4,80007e5c + 80007b1c: 02069793 slli a5,a3,0x20 + 80007b20: 0207d793 srli a5,a5,0x20 + 80007b24: 00279713 slli a4,a5,0x2 + 80007b28: 00011797 auipc a5,0x11 + 80007b2c: c1478793 addi a5,a5,-1004 # 8001873c <__FUNCTION__.2659+0x14> + 80007b30: 00f707b3 add a5,a4,a5 + 80007b34: 0007a783 lw a5,0(a5) + 80007b38: 0007871b sext.w a4,a5 + 80007b3c: 00011797 auipc a5,0x11 + 80007b40: c0078793 addi a5,a5,-1024 # 8001873c <__FUNCTION__.2659+0x14> + 80007b44: 00f707b3 add a5,a4,a5 + 80007b48: 00078067 jr a5 + 80007b4c: fc644783 lbu a5,-58(s0) + 80007b50: 0007879b sext.w a5,a5 + 80007b54: 0107f793 andi a5,a5,16 + 80007b58: 0007879b sext.w a5,a5 + 80007b5c: 04079263 bnez a5,80007ba0 + 80007b60: 0280006f j 80007b88 + 80007b64: fd843703 ld a4,-40(s0) + 80007b68: fd043783 ld a5,-48(s0) + 80007b6c: 00f77863 bgeu a4,a5,80007b7c + 80007b70: fd843783 ld a5,-40(s0) + 80007b74: 02000713 li a4,32 + 80007b78: 00e78023 sb a4,0(a5) + 80007b7c: fd843783 ld a5,-40(s0) + 80007b80: 00178793 addi a5,a5,1 + 80007b84: fcf43c23 sd a5,-40(s0) + 80007b88: fc042783 lw a5,-64(s0) + 80007b8c: fff7879b addiw a5,a5,-1 + 80007b90: fcf42023 sw a5,-64(s0) + 80007b94: fc042783 lw a5,-64(s0) + 80007b98: 0007879b sext.w a5,a5 + 80007b9c: fcf044e3 bgtz a5,80007b64 + 80007ba0: f9043783 ld a5,-112(s0) + 80007ba4: 00878713 addi a4,a5,8 + 80007ba8: f8e43823 sd a4,-112(s0) + 80007bac: 0007a783 lw a5,0(a5) + 80007bb0: faf40da3 sb a5,-69(s0) + 80007bb4: fd843703 ld a4,-40(s0) + 80007bb8: fd043783 ld a5,-48(s0) + 80007bbc: 00f77863 bgeu a4,a5,80007bcc + 80007bc0: fd843783 ld a5,-40(s0) + 80007bc4: fbb44703 lbu a4,-69(s0) + 80007bc8: 00e78023 sb a4,0(a5) + 80007bcc: fd843783 ld a5,-40(s0) + 80007bd0: 00178793 addi a5,a5,1 + 80007bd4: fcf43c23 sd a5,-40(s0) + 80007bd8: 0280006f j 80007c00 + 80007bdc: fd843703 ld a4,-40(s0) + 80007be0: fd043783 ld a5,-48(s0) + 80007be4: 00f77863 bgeu a4,a5,80007bf4 + 80007be8: fd843783 ld a5,-40(s0) + 80007bec: 02000713 li a4,32 + 80007bf0: 00e78023 sb a4,0(a5) + 80007bf4: fd843783 ld a5,-40(s0) + 80007bf8: 00178793 addi a5,a5,1 + 80007bfc: fcf43c23 sd a5,-40(s0) + 80007c00: fc042783 lw a5,-64(s0) + 80007c04: fff7879b addiw a5,a5,-1 + 80007c08: fcf42023 sw a5,-64(s0) + 80007c0c: fc042783 lw a5,-64(s0) + 80007c10: 0007879b sext.w a5,a5 + 80007c14: fcf044e3 bgtz a5,80007bdc + 80007c18: 3740006f j 80007f8c + 80007c1c: f9043783 ld a5,-112(s0) + 80007c20: 00878713 addi a4,a5,8 + 80007c24: f8e43823 sd a4,-112(s0) + 80007c28: 0007b783 ld a5,0(a5) + 80007c2c: fcf43423 sd a5,-56(s0) + 80007c30: fc843783 ld a5,-56(s0) + 80007c34: 00079863 bnez a5,80007c44 + 80007c38: 0000f797 auipc a5,0xf + 80007c3c: 8b078793 addi a5,a5,-1872 # 800164e8 + 80007c40: fcf43423 sd a5,-56(s0) + 80007c44: fe042223 sw zero,-28(s0) + 80007c48: 0100006f j 80007c58 + 80007c4c: fe442783 lw a5,-28(s0) + 80007c50: 0017879b addiw a5,a5,1 + 80007c54: fef42223 sw a5,-28(s0) + 80007c58: fe442703 lw a4,-28(s0) + 80007c5c: fc042783 lw a5,-64(s0) + 80007c60: 0007071b sext.w a4,a4 + 80007c64: 0007879b sext.w a5,a5 + 80007c68: 00f70c63 beq a4,a5,80007c80 + 80007c6c: fe442783 lw a5,-28(s0) + 80007c70: fc843703 ld a4,-56(s0) + 80007c74: 00f707b3 add a5,a4,a5 + 80007c78: 0007c783 lbu a5,0(a5) + 80007c7c: fc0798e3 bnez a5,80007c4c + 80007c80: fbc42783 lw a5,-68(s0) + 80007c84: 0007879b sext.w a5,a5 + 80007c88: 02f05063 blez a5,80007ca8 + 80007c8c: fe442703 lw a4,-28(s0) + 80007c90: fbc42783 lw a5,-68(s0) + 80007c94: 0007071b sext.w a4,a4 + 80007c98: 0007879b sext.w a5,a5 + 80007c9c: 00e7d663 bge a5,a4,80007ca8 + 80007ca0: fbc42783 lw a5,-68(s0) + 80007ca4: fef42223 sw a5,-28(s0) + 80007ca8: fc644783 lbu a5,-58(s0) + 80007cac: 0007879b sext.w a5,a5 + 80007cb0: 0107f793 andi a5,a5,16 + 80007cb4: 0007879b sext.w a5,a5 + 80007cb8: 04079263 bnez a5,80007cfc + 80007cbc: 0280006f j 80007ce4 + 80007cc0: fd843703 ld a4,-40(s0) + 80007cc4: fd043783 ld a5,-48(s0) + 80007cc8: 00f77863 bgeu a4,a5,80007cd8 + 80007ccc: fd843783 ld a5,-40(s0) + 80007cd0: 02000713 li a4,32 + 80007cd4: 00e78023 sb a4,0(a5) + 80007cd8: fd843783 ld a5,-40(s0) + 80007cdc: 00178793 addi a5,a5,1 + 80007ce0: fcf43c23 sd a5,-40(s0) + 80007ce4: fc042783 lw a5,-64(s0) + 80007ce8: fff7871b addiw a4,a5,-1 + 80007cec: fce42023 sw a4,-64(s0) + 80007cf0: fe442703 lw a4,-28(s0) + 80007cf4: 0007071b sext.w a4,a4 + 80007cf8: fcf744e3 blt a4,a5,80007cc0 + 80007cfc: fe042423 sw zero,-24(s0) + 80007d00: 0440006f j 80007d44 + 80007d04: fd843703 ld a4,-40(s0) + 80007d08: fd043783 ld a5,-48(s0) + 80007d0c: 00f77a63 bgeu a4,a5,80007d20 + 80007d10: fc843783 ld a5,-56(s0) + 80007d14: 0007c703 lbu a4,0(a5) + 80007d18: fd843783 ld a5,-40(s0) + 80007d1c: 00e78023 sb a4,0(a5) + 80007d20: fd843783 ld a5,-40(s0) + 80007d24: 00178793 addi a5,a5,1 + 80007d28: fcf43c23 sd a5,-40(s0) + 80007d2c: fc843783 ld a5,-56(s0) + 80007d30: 00178793 addi a5,a5,1 + 80007d34: fcf43423 sd a5,-56(s0) + 80007d38: fe842783 lw a5,-24(s0) + 80007d3c: 0017879b addiw a5,a5,1 + 80007d40: fef42423 sw a5,-24(s0) + 80007d44: fe842703 lw a4,-24(s0) + 80007d48: fe442783 lw a5,-28(s0) + 80007d4c: 0007071b sext.w a4,a4 + 80007d50: 0007879b sext.w a5,a5 + 80007d54: faf748e3 blt a4,a5,80007d04 + 80007d58: 0280006f j 80007d80 + 80007d5c: fd843703 ld a4,-40(s0) + 80007d60: fd043783 ld a5,-48(s0) + 80007d64: 00f77863 bgeu a4,a5,80007d74 + 80007d68: fd843783 ld a5,-40(s0) + 80007d6c: 02000713 li a4,32 + 80007d70: 00e78023 sb a4,0(a5) + 80007d74: fd843783 ld a5,-40(s0) + 80007d78: 00178793 addi a5,a5,1 + 80007d7c: fcf43c23 sd a5,-40(s0) + 80007d80: fc042783 lw a5,-64(s0) + 80007d84: fff7871b addiw a4,a5,-1 + 80007d88: fce42023 sw a4,-64(s0) + 80007d8c: fe442703 lw a4,-28(s0) + 80007d90: 0007071b sext.w a4,a4 + 80007d94: fcf744e3 blt a4,a5,80007d5c + 80007d98: 1f40006f j 80007f8c + 80007d9c: fc042783 lw a5,-64(s0) + 80007da0: 0007871b sext.w a4,a5 + 80007da4: fff00793 li a5,-1 + 80007da8: 00f71c63 bne a4,a5,80007dc0 + 80007dac: 01000793 li a5,16 + 80007db0: fcf42023 sw a5,-64(s0) + 80007db4: fc644783 lbu a5,-58(s0) + 80007db8: 0017e793 ori a5,a5,1 + 80007dbc: fcf40323 sb a5,-58(s0) + 80007dc0: f9043783 ld a5,-112(s0) + 80007dc4: 00878713 addi a4,a5,8 + 80007dc8: f8e43823 sd a4,-112(s0) + 80007dcc: 0007b783 ld a5,0(a5) + 80007dd0: 00078613 mv a2,a5 + 80007dd4: fc644783 lbu a5,-58(s0) + 80007dd8: 0007869b sext.w a3,a5 + 80007ddc: fbc42783 lw a5,-68(s0) + 80007de0: fc042703 lw a4,-64(s0) + 80007de4: 00068813 mv a6,a3 + 80007de8: 01000693 li a3,16 + 80007dec: fd043583 ld a1,-48(s0) + 80007df0: fd843503 ld a0,-40(s0) + 80007df4: e60ff0ef jal ra,80007454 + 80007df8: fca43c23 sd a0,-40(s0) + 80007dfc: 1900006f j 80007f8c + 80007e00: fd843703 ld a4,-40(s0) + 80007e04: fd043783 ld a5,-48(s0) + 80007e08: 00f77863 bgeu a4,a5,80007e18 + 80007e0c: fd843783 ld a5,-40(s0) + 80007e10: 02500713 li a4,37 + 80007e14: 00e78023 sb a4,0(a5) + 80007e18: fd843783 ld a5,-40(s0) + 80007e1c: 00178793 addi a5,a5,1 + 80007e20: fcf43c23 sd a5,-40(s0) + 80007e24: 1680006f j 80007f8c + 80007e28: 00800793 li a5,8 + 80007e2c: fcf403a3 sb a5,-57(s0) + 80007e30: 09c0006f j 80007ecc + 80007e34: fc644783 lbu a5,-58(s0) + 80007e38: 0407e793 ori a5,a5,64 + 80007e3c: fcf40323 sb a5,-58(s0) + 80007e40: 01000793 li a5,16 + 80007e44: fcf403a3 sb a5,-57(s0) + 80007e48: 0840006f j 80007ecc + 80007e4c: fc644783 lbu a5,-58(s0) + 80007e50: 0027e793 ori a5,a5,2 + 80007e54: fcf40323 sb a5,-58(s0) + 80007e58: 0700006f j 80007ec8 + 80007e5c: fd843703 ld a4,-40(s0) + 80007e60: fd043783 ld a5,-48(s0) + 80007e64: 00f77863 bgeu a4,a5,80007e74 + 80007e68: fd843783 ld a5,-40(s0) + 80007e6c: 02500713 li a4,37 + 80007e70: 00e78023 sb a4,0(a5) + 80007e74: fd843783 ld a5,-40(s0) + 80007e78: 00178793 addi a5,a5,1 + 80007e7c: fcf43c23 sd a5,-40(s0) + 80007e80: f9843783 ld a5,-104(s0) + 80007e84: 0007c783 lbu a5,0(a5) + 80007e88: 02078863 beqz a5,80007eb8 + 80007e8c: fd843703 ld a4,-40(s0) + 80007e90: fd043783 ld a5,-48(s0) + 80007e94: 00f77a63 bgeu a4,a5,80007ea8 + 80007e98: f9843783 ld a5,-104(s0) + 80007e9c: 0007c703 lbu a4,0(a5) + 80007ea0: fd843783 ld a5,-40(s0) + 80007ea4: 00e78023 sb a4,0(a5) + 80007ea8: fd843783 ld a5,-40(s0) + 80007eac: 00178793 addi a5,a5,1 + 80007eb0: fcf43c23 sd a5,-40(s0) + 80007eb4: 0d80006f j 80007f8c + 80007eb8: f9843783 ld a5,-104(s0) + 80007ebc: fff78793 addi a5,a5,-1 + 80007ec0: f8f43c23 sd a5,-104(s0) + 80007ec4: 0c80006f j 80007f8c + 80007ec8: 00000013 nop + 80007ecc: fc544783 lbu a5,-59(s0) + 80007ed0: 0ff7f713 andi a4,a5,255 + 80007ed4: 06c00793 li a5,108 + 80007ed8: 00f71e63 bne a4,a5,80007ef4 + 80007edc: f9043783 ld a5,-112(s0) + 80007ee0: 00878713 addi a4,a5,8 + 80007ee4: f8e43823 sd a4,-112(s0) + 80007ee8: 0007a783 lw a5,0(a5) + 80007eec: fef42623 sw a5,-20(s0) + 80007ef0: 06c0006f j 80007f5c + 80007ef4: fc544783 lbu a5,-59(s0) + 80007ef8: 0ff7f713 andi a4,a5,255 + 80007efc: 06800793 li a5,104 + 80007f00: 04f71463 bne a4,a5,80007f48 + 80007f04: f9043783 ld a5,-112(s0) + 80007f08: 00878713 addi a4,a5,8 + 80007f0c: f8e43823 sd a4,-112(s0) + 80007f10: 0007a783 lw a5,0(a5) + 80007f14: 03079793 slli a5,a5,0x30 + 80007f18: 0307d793 srli a5,a5,0x30 + 80007f1c: fef42623 sw a5,-20(s0) + 80007f20: fc644783 lbu a5,-58(s0) + 80007f24: 0007879b sext.w a5,a5 + 80007f28: 0027f793 andi a5,a5,2 + 80007f2c: 0007879b sext.w a5,a5 + 80007f30: 02078663 beqz a5,80007f5c + 80007f34: fec42783 lw a5,-20(s0) + 80007f38: 0107979b slliw a5,a5,0x10 + 80007f3c: 4107d79b sraiw a5,a5,0x10 + 80007f40: fef42623 sw a5,-20(s0) + 80007f44: 0180006f j 80007f5c + 80007f48: f9043783 ld a5,-112(s0) + 80007f4c: 00878713 addi a4,a5,8 + 80007f50: f8e43823 sd a4,-112(s0) + 80007f54: 0007a783 lw a5,0(a5) + 80007f58: fef42623 sw a5,-20(s0) + 80007f5c: fec46603 lwu a2,-20(s0) + 80007f60: fc744783 lbu a5,-57(s0) + 80007f64: 0007869b sext.w a3,a5 + 80007f68: fc644783 lbu a5,-58(s0) + 80007f6c: 0007859b sext.w a1,a5 + 80007f70: fbc42783 lw a5,-68(s0) + 80007f74: fc042703 lw a4,-64(s0) + 80007f78: 00058813 mv a6,a1 + 80007f7c: fd043583 ld a1,-48(s0) + 80007f80: fd843503 ld a0,-40(s0) + 80007f84: cd0ff0ef jal ra,80007454 + 80007f88: fca43c23 sd a0,-40(s0) + 80007f8c: f9843783 ld a5,-104(s0) + 80007f90: 00178793 addi a5,a5,1 + 80007f94: f8f43c23 sd a5,-104(s0) + 80007f98: f9843783 ld a5,-104(s0) + 80007f9c: 0007c783 lbu a5,0(a5) + 80007fa0: 88079ce3 bnez a5,80007838 + 80007fa4: fa043783 ld a5,-96(s0) + 80007fa8: 02078463 beqz a5,80007fd0 + 80007fac: fd843703 ld a4,-40(s0) + 80007fb0: fd043783 ld a5,-48(s0) + 80007fb4: 00f77863 bgeu a4,a5,80007fc4 + 80007fb8: fd843783 ld a5,-40(s0) + 80007fbc: 00078023 sb zero,0(a5) + 80007fc0: 0100006f j 80007fd0 + 80007fc4: fd043783 ld a5,-48(s0) + 80007fc8: fff78793 addi a5,a5,-1 + 80007fcc: 00078023 sb zero,0(a5) + 80007fd0: fd843703 ld a4,-40(s0) + 80007fd4: fa843783 ld a5,-88(s0) + 80007fd8: 40f707b3 sub a5,a4,a5 + 80007fdc: 0007879b sext.w a5,a5 + 80007fe0: 00078513 mv a0,a5 + 80007fe4: 06813083 ld ra,104(sp) + 80007fe8: 06013403 ld s0,96(sp) + 80007fec: 07010113 addi sp,sp,112 + 80007ff0: 00008067 ret + +0000000080007ff4 : + 80007ff4: f9010113 addi sp,sp,-112 + 80007ff8: 02113c23 sd ra,56(sp) + 80007ffc: 02813823 sd s0,48(sp) + 80008000: 04010413 addi s0,sp,64 + 80008004: fca43c23 sd a0,-40(s0) + 80008008: fcb43823 sd a1,-48(s0) + 8000800c: fcc43423 sd a2,-56(s0) + 80008010: 00d43423 sd a3,8(s0) + 80008014: 00e43823 sd a4,16(s0) + 80008018: 00f43c23 sd a5,24(s0) + 8000801c: 03043023 sd a6,32(s0) + 80008020: 03143423 sd a7,40(s0) + 80008024: 03040793 addi a5,s0,48 + 80008028: fcf43023 sd a5,-64(s0) + 8000802c: fc043783 ld a5,-64(s0) + 80008030: fd878793 addi a5,a5,-40 + 80008034: fef43023 sd a5,-32(s0) + 80008038: fe043783 ld a5,-32(s0) + 8000803c: 00078693 mv a3,a5 + 80008040: fc843603 ld a2,-56(s0) + 80008044: fd043583 ld a1,-48(s0) + 80008048: fd843503 ld a0,-40(s0) + 8000804c: f8cff0ef jal ra,800077d8 + 80008050: 00050793 mv a5,a0 + 80008054: fef42623 sw a5,-20(s0) + 80008058: fec42783 lw a5,-20(s0) + 8000805c: 00078513 mv a0,a5 + 80008060: 03813083 ld ra,56(sp) + 80008064: 03013403 ld s0,48(sp) + 80008068: 07010113 addi sp,sp,112 + 8000806c: 00008067 ret + +0000000080008070 : + 80008070: fd010113 addi sp,sp,-48 + 80008074: 02113423 sd ra,40(sp) + 80008078: 02813023 sd s0,32(sp) + 8000807c: 03010413 addi s0,sp,48 + 80008080: fea43423 sd a0,-24(s0) + 80008084: feb43023 sd a1,-32(s0) + 80008088: fcc43c23 sd a2,-40(s0) + 8000808c: fd843683 ld a3,-40(s0) + 80008090: fe043603 ld a2,-32(s0) + 80008094: fff00593 li a1,-1 + 80008098: fe843503 ld a0,-24(s0) + 8000809c: f3cff0ef jal ra,800077d8 + 800080a0: 00050793 mv a5,a0 + 800080a4: 00078513 mv a0,a5 + 800080a8: 02813083 ld ra,40(sp) + 800080ac: 02013403 ld s0,32(sp) + 800080b0: 03010113 addi sp,sp,48 + 800080b4: 00008067 ret + +00000000800080b8 : + 800080b8: f9010113 addi sp,sp,-112 + 800080bc: 02113c23 sd ra,56(sp) + 800080c0: 02813823 sd s0,48(sp) + 800080c4: 04010413 addi s0,sp,64 + 800080c8: fca43c23 sd a0,-40(s0) + 800080cc: fcb43823 sd a1,-48(s0) + 800080d0: 00c43023 sd a2,0(s0) + 800080d4: 00d43423 sd a3,8(s0) + 800080d8: 00e43823 sd a4,16(s0) + 800080dc: 00f43c23 sd a5,24(s0) + 800080e0: 03043023 sd a6,32(s0) + 800080e4: 03143423 sd a7,40(s0) + 800080e8: 03040793 addi a5,s0,48 + 800080ec: fcf43423 sd a5,-56(s0) + 800080f0: fc843783 ld a5,-56(s0) + 800080f4: fd078793 addi a5,a5,-48 + 800080f8: fef43023 sd a5,-32(s0) + 800080fc: fe043783 ld a5,-32(s0) + 80008100: 00078613 mv a2,a5 + 80008104: fd043583 ld a1,-48(s0) + 80008108: fd843503 ld a0,-40(s0) + 8000810c: f65ff0ef jal ra,80008070 + 80008110: 00050793 mv a5,a0 + 80008114: fef42623 sw a5,-20(s0) + 80008118: fec42783 lw a5,-20(s0) + 8000811c: 00078513 mv a0,a5 + 80008120: 03813083 ld ra,56(sp) + 80008124: 03013403 ld s0,48(sp) + 80008128: 07010113 addi sp,sp,112 + 8000812c: 00008067 ret + +0000000080008130 : + 80008130: ff010113 addi sp,sp,-16 + 80008134: 00813423 sd s0,8(sp) + 80008138: 01010413 addi s0,sp,16 + 8000813c: 0001a797 auipc a5,0x1a + 80008140: f6478793 addi a5,a5,-156 # 800220a0 <_console_device> + 80008144: 0007b783 ld a5,0(a5) + 80008148: 00078513 mv a0,a5 + 8000814c: 00813403 ld s0,8(sp) + 80008150: 01010113 addi sp,sp,16 + 80008154: 00008067 ret + +0000000080008158 : + 80008158: fd010113 addi sp,sp,-48 + 8000815c: 02113423 sd ra,40(sp) + 80008160: 02813023 sd s0,32(sp) + 80008164: 03010413 addi s0,sp,48 + 80008168: fca43c23 sd a0,-40(s0) + 8000816c: 0001a797 auipc a5,0x1a + 80008170: f3478793 addi a5,a5,-204 # 800220a0 <_console_device> + 80008174: 0007b783 ld a5,0(a5) + 80008178: fef43423 sd a5,-24(s0) + 8000817c: fd843503 ld a0,-40(s0) + 80008180: 8fdfa0ef jal ra,80002a7c + 80008184: fea43023 sd a0,-32(s0) + 80008188: fe043703 ld a4,-32(s0) + 8000818c: fe843783 ld a5,-24(s0) + 80008190: 00f71663 bne a4,a5,8000819c + 80008194: 00000793 li a5,0 + 80008198: 0500006f j 800081e8 + 8000819c: fe043783 ld a5,-32(s0) + 800081a0: 04078263 beqz a5,800081e4 + 800081a4: 0001a797 auipc a5,0x1a + 800081a8: efc78793 addi a5,a5,-260 # 800220a0 <_console_device> + 800081ac: 0007b783 ld a5,0(a5) + 800081b0: 00078c63 beqz a5,800081c8 + 800081b4: 0001a797 auipc a5,0x1a + 800081b8: eec78793 addi a5,a5,-276 # 800220a0 <_console_device> + 800081bc: 0007b783 ld a5,0(a5) + 800081c0: 00078513 mv a0,a5 + 800081c4: ae9fa0ef jal ra,80002cac + 800081c8: 04300593 li a1,67 + 800081cc: fe043503 ld a0,-32(s0) + 800081d0: 8e5fa0ef jal ra,80002ab4 + 800081d4: 0001a797 auipc a5,0x1a + 800081d8: ecc78793 addi a5,a5,-308 # 800220a0 <_console_device> + 800081dc: fe043703 ld a4,-32(s0) + 800081e0: 00e7b023 sd a4,0(a5) + 800081e4: fe843783 ld a5,-24(s0) + 800081e8: 00078513 mv a0,a5 + 800081ec: 02813083 ld ra,40(sp) + 800081f0: 02013403 ld s0,32(sp) + 800081f4: 03010113 addi sp,sp,48 + 800081f8: 00008067 ret + +00000000800081fc : + 800081fc: fe010113 addi sp,sp,-32 + 80008200: 00813c23 sd s0,24(sp) + 80008204: 02010413 addi s0,sp,32 + 80008208: fea43423 sd a0,-24(s0) + 8000820c: 00000013 nop + 80008210: 01813403 ld s0,24(sp) + 80008214: 02010113 addi sp,sp,32 + 80008218: 00008067 ret + +000000008000821c : + 8000821c: f8010113 addi sp,sp,-128 + 80008220: 02113c23 sd ra,56(sp) + 80008224: 02813823 sd s0,48(sp) + 80008228: 04010413 addi s0,sp,64 + 8000822c: fca43423 sd a0,-56(s0) + 80008230: 00b43423 sd a1,8(s0) + 80008234: 00c43823 sd a2,16(s0) + 80008238: 00d43c23 sd a3,24(s0) + 8000823c: 02e43023 sd a4,32(s0) + 80008240: 02f43423 sd a5,40(s0) + 80008244: 03043823 sd a6,48(s0) + 80008248: 03143c23 sd a7,56(s0) + 8000824c: 04040793 addi a5,s0,64 + 80008250: fcf43023 sd a5,-64(s0) + 80008254: fc043783 ld a5,-64(s0) + 80008258: fc878793 addi a5,a5,-56 + 8000825c: fcf43c23 sd a5,-40(s0) + 80008260: fd843783 ld a5,-40(s0) + 80008264: 00078693 mv a3,a5 + 80008268: fc843603 ld a2,-56(s0) + 8000826c: 0ff00593 li a1,255 + 80008270: 0001e517 auipc a0,0x1e + 80008274: 28850513 addi a0,a0,648 # 800264f8 + 80008278: d60ff0ef jal ra,800077d8 + 8000827c: 00050793 mv a5,a0 + 80008280: fef43423 sd a5,-24(s0) + 80008284: fe843703 ld a4,-24(s0) + 80008288: 0ff00793 li a5,255 + 8000828c: 00e7f663 bgeu a5,a4,80008298 + 80008290: 0ff00793 li a5,255 + 80008294: fef43423 sd a5,-24(s0) + 80008298: 0001a797 auipc a5,0x1a + 8000829c: e0878793 addi a5,a5,-504 # 800220a0 <_console_device> + 800082a0: 0007b783 ld a5,0(a5) + 800082a4: 00079a63 bnez a5,800082b8 + 800082a8: 0001e517 auipc a0,0x1e + 800082ac: 25050513 addi a0,a0,592 # 800264f8 + 800082b0: f4dff0ef jal ra,800081fc + 800082b4: 07c0006f j 80008330 + 800082b8: 0001a797 auipc a5,0x1a + 800082bc: de878793 addi a5,a5,-536 # 800220a0 <_console_device> + 800082c0: 0007b783 ld a5,0(a5) + 800082c4: 02e7d783 lhu a5,46(a5) + 800082c8: fef41323 sh a5,-26(s0) + 800082cc: 0001a797 auipc a5,0x1a + 800082d0: dd478793 addi a5,a5,-556 # 800220a0 <_console_device> + 800082d4: 0007b783 ld a5,0(a5) + 800082d8: 02e7d703 lhu a4,46(a5) + 800082dc: 0001a797 auipc a5,0x1a + 800082e0: dc478793 addi a5,a5,-572 # 800220a0 <_console_device> + 800082e4: 0007b783 ld a5,0(a5) + 800082e8: 04076713 ori a4,a4,64 + 800082ec: 03071713 slli a4,a4,0x30 + 800082f0: 03075713 srli a4,a4,0x30 + 800082f4: 02e79723 sh a4,46(a5) + 800082f8: 0001a797 auipc a5,0x1a + 800082fc: da878793 addi a5,a5,-600 # 800220a0 <_console_device> + 80008300: 0007b783 ld a5,0(a5) + 80008304: fe843683 ld a3,-24(s0) + 80008308: 0001e617 auipc a2,0x1e + 8000830c: 1f060613 addi a2,a2,496 # 800264f8 + 80008310: 00000593 li a1,0 + 80008314: 00078513 mv a0,a5 + 80008318: b75fa0ef jal ra,80002e8c + 8000831c: 0001a797 auipc a5,0x1a + 80008320: d8478793 addi a5,a5,-636 # 800220a0 <_console_device> + 80008324: 0007b783 ld a5,0(a5) + 80008328: fe645703 lhu a4,-26(s0) + 8000832c: 02e79723 sh a4,46(a5) + 80008330: 00000013 nop + 80008334: 03813083 ld ra,56(sp) + 80008338: 03013403 ld s0,48(sp) + 8000833c: 08010113 addi sp,sp,128 + 80008340: 00008067 ret + +0000000080008344 <__rt_ffs>: + 80008344: fe010113 addi sp,sp,-32 + 80008348: 00813c23 sd s0,24(sp) + 8000834c: 02010413 addi s0,sp,32 + 80008350: 00050793 mv a5,a0 + 80008354: fef42623 sw a5,-20(s0) + 80008358: fec42783 lw a5,-20(s0) + 8000835c: 0007879b sext.w a5,a5 + 80008360: 00079663 bnez a5,8000836c <__rt_ffs+0x28> + 80008364: 00000793 li a5,0 + 80008368: 1040006f j 8000846c <__rt_ffs+0x128> + 8000836c: fec42783 lw a5,-20(s0) + 80008370: 0ff7f793 andi a5,a5,255 + 80008374: 0007879b sext.w a5,a5 + 80008378: 02078863 beqz a5,800083a8 <__rt_ffs+0x64> + 8000837c: fec42783 lw a5,-20(s0) + 80008380: 0ff7f793 andi a5,a5,255 + 80008384: 0007879b sext.w a5,a5 + 80008388: 00010717 auipc a4,0x10 + 8000838c: 43870713 addi a4,a4,1080 # 800187c0 <__lowest_bit_bitmap> + 80008390: 00f707b3 add a5,a4,a5 + 80008394: 0007c783 lbu a5,0(a5) + 80008398: 0007879b sext.w a5,a5 + 8000839c: 0017879b addiw a5,a5,1 + 800083a0: 0007879b sext.w a5,a5 + 800083a4: 0c80006f j 8000846c <__rt_ffs+0x128> + 800083a8: fec42703 lw a4,-20(s0) + 800083ac: 000107b7 lui a5,0x10 + 800083b0: f0078793 addi a5,a5,-256 # ff00 <__STACKSIZE__+0xbf00> + 800083b4: 00f777b3 and a5,a4,a5 + 800083b8: 0007879b sext.w a5,a5 + 800083bc: 02078c63 beqz a5,800083f4 <__rt_ffs+0xb0> + 800083c0: fec42783 lw a5,-20(s0) + 800083c4: 4087d79b sraiw a5,a5,0x8 + 800083c8: 0007879b sext.w a5,a5 + 800083cc: 0ff7f793 andi a5,a5,255 + 800083d0: 0007879b sext.w a5,a5 + 800083d4: 00010717 auipc a4,0x10 + 800083d8: 3ec70713 addi a4,a4,1004 # 800187c0 <__lowest_bit_bitmap> + 800083dc: 00f707b3 add a5,a4,a5 + 800083e0: 0007c783 lbu a5,0(a5) + 800083e4: 0007879b sext.w a5,a5 + 800083e8: 0097879b addiw a5,a5,9 + 800083ec: 0007879b sext.w a5,a5 + 800083f0: 07c0006f j 8000846c <__rt_ffs+0x128> + 800083f4: fec42703 lw a4,-20(s0) + 800083f8: 00ff07b7 lui a5,0xff0 + 800083fc: 00f777b3 and a5,a4,a5 + 80008400: 0007879b sext.w a5,a5 + 80008404: 02078c63 beqz a5,8000843c <__rt_ffs+0xf8> + 80008408: fec42783 lw a5,-20(s0) + 8000840c: 4107d79b sraiw a5,a5,0x10 + 80008410: 0007879b sext.w a5,a5 + 80008414: 0ff7f793 andi a5,a5,255 + 80008418: 0007879b sext.w a5,a5 + 8000841c: 00010717 auipc a4,0x10 + 80008420: 3a470713 addi a4,a4,932 # 800187c0 <__lowest_bit_bitmap> + 80008424: 00f707b3 add a5,a4,a5 + 80008428: 0007c783 lbu a5,0(a5) # ff0000 <__STACKSIZE__+0xfec000> + 8000842c: 0007879b sext.w a5,a5 + 80008430: 0117879b addiw a5,a5,17 + 80008434: 0007879b sext.w a5,a5 + 80008438: 0340006f j 8000846c <__rt_ffs+0x128> + 8000843c: fec42783 lw a5,-20(s0) + 80008440: 0187d79b srliw a5,a5,0x18 + 80008444: 0007879b sext.w a5,a5 + 80008448: 00010717 auipc a4,0x10 + 8000844c: 37870713 addi a4,a4,888 # 800187c0 <__lowest_bit_bitmap> + 80008450: 02079793 slli a5,a5,0x20 + 80008454: 0207d793 srli a5,a5,0x20 + 80008458: 00f707b3 add a5,a4,a5 + 8000845c: 0007c783 lbu a5,0(a5) + 80008460: 0007879b sext.w a5,a5 + 80008464: 0197879b addiw a5,a5,25 + 80008468: 0007879b sext.w a5,a5 + 8000846c: 00078513 mv a0,a5 + 80008470: 01813403 ld s0,24(sp) + 80008474: 02010113 addi sp,sp,32 + 80008478: 00008067 ret + +000000008000847c : + 8000847c: fc010113 addi sp,sp,-64 + 80008480: 02113c23 sd ra,56(sp) + 80008484: 02813823 sd s0,48(sp) + 80008488: 04010413 addi s0,sp,64 + 8000848c: fca43c23 sd a0,-40(s0) + 80008490: fcb43823 sd a1,-48(s0) + 80008494: fcc43423 sd a2,-56(s0) + 80008498: fe0407a3 sb zero,-17(s0) + 8000849c: 0001a797 auipc a5,0x1a + 800084a0: c0c78793 addi a5,a5,-1012 # 800220a8 + 800084a4: 0007b783 ld a5,0(a5) + 800084a8: 02079863 bnez a5,800084d8 + 800084ac: fc843683 ld a3,-56(s0) + 800084b0: fd043603 ld a2,-48(s0) + 800084b4: fd843583 ld a1,-40(s0) + 800084b8: 0000e517 auipc a0,0xe + 800084bc: 03850513 addi a0,a0,56 # 800164f0 + 800084c0: d5dff0ef jal ra,8000821c + 800084c4: 00000013 nop + 800084c8: fef44783 lbu a5,-17(s0) + 800084cc: 0ff7f793 andi a5,a5,255 + 800084d0: fe078ce3 beqz a5,800084c8 + 800084d4: 0200006f j 800084f4 + 800084d8: 0001a797 auipc a5,0x1a + 800084dc: bd078793 addi a5,a5,-1072 # 800220a8 + 800084e0: 0007b783 ld a5,0(a5) + 800084e4: fc843603 ld a2,-56(s0) + 800084e8: fd043583 ld a1,-48(s0) + 800084ec: fd843503 ld a0,-40(s0) + 800084f0: 000780e7 jalr a5 + 800084f4: 00000013 nop + 800084f8: 03813083 ld ra,56(sp) + 800084fc: 03013403 ld s0,48(sp) + 80008500: 04010113 addi sp,sp,64 + 80008504: 00008067 ret + +0000000080008508 : + 80008508: fe010113 addi sp,sp,-32 + 8000850c: 00813c23 sd s0,24(sp) + 80008510: 02010413 addi s0,sp,32 + 80008514: fea43423 sd a0,-24(s0) + 80008518: feb43023 sd a1,-32(s0) + 8000851c: fe843783 ld a5,-24(s0) + 80008520: 0007b783 ld a5,0(a5) + 80008524: fe043703 ld a4,-32(s0) + 80008528: 00e7b423 sd a4,8(a5) + 8000852c: fe843783 ld a5,-24(s0) + 80008530: 0007b703 ld a4,0(a5) + 80008534: fe043783 ld a5,-32(s0) + 80008538: 00e7b023 sd a4,0(a5) + 8000853c: fe843783 ld a5,-24(s0) + 80008540: fe043703 ld a4,-32(s0) + 80008544: 00e7b023 sd a4,0(a5) + 80008548: fe043783 ld a5,-32(s0) + 8000854c: fe843703 ld a4,-24(s0) + 80008550: 00e7b423 sd a4,8(a5) + 80008554: 00000013 nop + 80008558: 01813403 ld s0,24(sp) + 8000855c: 02010113 addi sp,sp,32 + 80008560: 00008067 ret + +0000000080008564 : + 80008564: fe010113 addi sp,sp,-32 + 80008568: 00813c23 sd s0,24(sp) + 8000856c: 02010413 addi s0,sp,32 + 80008570: fea43423 sd a0,-24(s0) + 80008574: fe843783 ld a5,-24(s0) + 80008578: 0007b783 ld a5,0(a5) + 8000857c: fe843703 ld a4,-24(s0) + 80008580: 00873703 ld a4,8(a4) + 80008584: 00e7b423 sd a4,8(a5) + 80008588: fe843783 ld a5,-24(s0) + 8000858c: 0087b783 ld a5,8(a5) + 80008590: fe843703 ld a4,-24(s0) + 80008594: 00073703 ld a4,0(a4) + 80008598: 00e7b023 sd a4,0(a5) + 8000859c: fe843783 ld a5,-24(s0) + 800085a0: fe843703 ld a4,-24(s0) + 800085a4: 00e7b423 sd a4,8(a5) + 800085a8: fe843783 ld a5,-24(s0) + 800085ac: 0087b703 ld a4,8(a5) + 800085b0: fe843783 ld a5,-24(s0) + 800085b4: 00e7b023 sd a4,0(a5) + 800085b8: 00000013 nop + 800085bc: 01813403 ld s0,24(sp) + 800085c0: 02010113 addi sp,sp,32 + 800085c4: 00008067 ret + +00000000800085c8 : + 800085c8: fe010113 addi sp,sp,-32 + 800085cc: 00113c23 sd ra,24(sp) + 800085d0: 00813823 sd s0,16(sp) + 800085d4: 02010413 addi s0,sp,32 + 800085d8: fea43423 sd a0,-24(s0) + 800085dc: fe843783 ld a5,-24(s0) + 800085e0: 02878793 addi a5,a5,40 + 800085e4: 00078593 mv a1,a5 + 800085e8: 00012517 auipc a0,0x12 + 800085ec: 8a850513 addi a0,a0,-1880 # 80019e90 <_rt_thread_defunct> + 800085f0: f19ff0ef jal ra,80008508 + 800085f4: 00000013 nop + 800085f8: 01813083 ld ra,24(sp) + 800085fc: 01013403 ld s0,16(sp) + 80008600: 02010113 addi sp,sp,32 + 80008604: 00008067 ret + +0000000080008608 : + 80008608: fe010113 addi sp,sp,-32 + 8000860c: 00113c23 sd ra,24(sp) + 80008610: 00813823 sd s0,16(sp) + 80008614: 02010413 addi s0,sp,32 + 80008618: fe043423 sd zero,-24(s0) + 8000861c: 00012797 auipc a5,0x12 + 80008620: 87478793 addi a5,a5,-1932 # 80019e90 <_rt_thread_defunct> + 80008624: fef43023 sd a5,-32(s0) + 80008628: fe043783 ld a5,-32(s0) + 8000862c: 0007b783 ld a5,0(a5) + 80008630: fe043703 ld a4,-32(s0) + 80008634: 02f70263 beq a4,a5,80008658 + 80008638: fe043783 ld a5,-32(s0) + 8000863c: 0007b783 ld a5,0(a5) + 80008640: fd878793 addi a5,a5,-40 + 80008644: fef43423 sd a5,-24(s0) + 80008648: fe843783 ld a5,-24(s0) + 8000864c: 02878793 addi a5,a5,40 + 80008650: 00078513 mv a0,a5 + 80008654: f11ff0ef jal ra,80008564 + 80008658: fe843783 ld a5,-24(s0) + 8000865c: 00078513 mv a0,a5 + 80008660: 01813083 ld ra,24(sp) + 80008664: 01013403 ld s0,16(sp) + 80008668: 02010113 addi sp,sp,32 + 8000866c: 00008067 ret + +0000000080008670 : + 80008670: fd010113 addi sp,sp,-48 + 80008674: 02113423 sd ra,40(sp) + 80008678: 02813023 sd s0,32(sp) + 8000867c: 03010413 addi s0,sp,48 + 80008680: af5f70ef jal ra,80000174 + 80008684: fea43023 sd a0,-32(s0) + 80008688: f4dfd0ef jal ra,800065d4 + 8000868c: 00050793 mv a5,a0 + 80008690: 02078863 beqz a5,800086c0 + 80008694: 00010597 auipc a1,0x10 + 80008698: 25c58593 addi a1,a1,604 # 800188f0 <__FUNCTION__.2651> + 8000869c: 0000e517 auipc a0,0xe + 800086a0: e8c50513 addi a0,a0,-372 # 80016528 + 800086a4: b79ff0ef jal ra,8000821c + 800086a8: 0cb00613 li a2,203 + 800086ac: 00010597 auipc a1,0x10 + 800086b0: 24458593 addi a1,a1,580 # 800188f0 <__FUNCTION__.2651> + 800086b4: 0000e517 auipc a0,0xe + 800086b8: e9c50513 addi a0,a0,-356 # 80016550 + 800086bc: dc1ff0ef jal ra,8000847c + 800086c0: fe043503 ld a0,-32(s0) + 800086c4: ab9f70ef jal ra,8000017c + 800086c8: aadf70ef jal ra,80000174 + 800086cc: fea43423 sd a0,-24(s0) + 800086d0: f39ff0ef jal ra,80008608 + 800086d4: fca43c23 sd a0,-40(s0) + 800086d8: fd843783 ld a5,-40(s0) + 800086dc: 00079863 bnez a5,800086ec + 800086e0: fe843503 ld a0,-24(s0) + 800086e4: a99f70ef jal ra,8000017c + 800086e8: 0840006f j 8000876c + 800086ec: fd843783 ld a5,-40(s0) + 800086f0: 0d87b783 ld a5,216(a5) + 800086f4: fcf43823 sd a5,-48(s0) + 800086f8: fd043783 ld a5,-48(s0) + 800086fc: 02078063 beqz a5,8000871c + 80008700: fe843503 ld a0,-24(s0) + 80008704: a79f70ef jal ra,8000017c + 80008708: fd043783 ld a5,-48(s0) + 8000870c: fd843503 ld a0,-40(s0) + 80008710: 000780e7 jalr a5 + 80008714: a61f70ef jal ra,80000174 + 80008718: fea43423 sd a0,-24(s0) + 8000871c: fd843503 ld a0,-40(s0) + 80008720: 86df90ef jal ra,80001f8c + 80008724: 00050793 mv a5,a0 + 80008728: 00078713 mv a4,a5 + 8000872c: 00100793 li a5,1 + 80008730: 00f71c63 bne a4,a5,80008748 + 80008734: fd843503 ld a0,-40(s0) + 80008738: d7cf90ef jal ra,80001cb4 + 8000873c: fe843503 ld a0,-24(s0) + 80008740: a3df70ef jal ra,8000017c + 80008744: f3dff06f j 80008680 + 80008748: fe843503 ld a0,-24(s0) + 8000874c: a31f70ef jal ra,8000017c + 80008750: fd843783 ld a5,-40(s0) + 80008754: 0507b783 ld a5,80(a5) + 80008758: 00078513 mv a0,a5 + 8000875c: f38fc0ef jal ra,80004e94 + 80008760: fd843503 ld a0,-40(s0) + 80008764: f58f90ef jal ra,80001ebc + 80008768: f19ff06f j 80008680 + 8000876c: 00000013 nop + 80008770: 02813083 ld ra,40(sp) + 80008774: 02013403 ld s0,32(sp) + 80008778: 03010113 addi sp,sp,48 + 8000877c: 00008067 ret + +0000000080008780 : + 80008780: fd010113 addi sp,sp,-48 + 80008784: 02113423 sd ra,40(sp) + 80008788: 02813023 sd s0,32(sp) + 8000878c: 03010413 addi s0,sp,48 + 80008790: fca43c23 sd a0,-40(s0) + 80008794: fe043423 sd zero,-24(s0) + 80008798: 03c0006f j 800087d4 + 8000879c: 00022717 auipc a4,0x22 + 800087a0: f4470713 addi a4,a4,-188 # 8002a6e0 + 800087a4: fe843783 ld a5,-24(s0) + 800087a8: 00379793 slli a5,a5,0x3 + 800087ac: 00f707b3 add a5,a4,a5 + 800087b0: 0007b783 ld a5,0(a5) + 800087b4: fef43023 sd a5,-32(s0) + 800087b8: fe043783 ld a5,-32(s0) + 800087bc: 00078663 beqz a5,800087c8 + 800087c0: fe043783 ld a5,-32(s0) + 800087c4: 000780e7 jalr a5 + 800087c8: fe843783 ld a5,-24(s0) + 800087cc: 00178793 addi a5,a5,1 + 800087d0: fef43423 sd a5,-24(s0) + 800087d4: fe843703 ld a4,-24(s0) + 800087d8: 00300793 li a5,3 + 800087dc: fce7f0e3 bgeu a5,a4,8000879c + 800087e0: e91ff0ef jal ra,80008670 + 800087e4: fb1ff06f j 80008794 + +00000000800087e8 : + 800087e8: fd010113 addi sp,sp,-48 + 800087ec: 02113423 sd ra,40(sp) + 800087f0: 02813023 sd s0,32(sp) + 800087f4: 03010413 addi s0,sp,48 + 800087f8: fe043423 sd zero,-24(s0) + 800087fc: 0b40006f j 800088b0 + 80008800: fd040793 addi a5,s0,-48 + 80008804: fe843603 ld a2,-24(s0) + 80008808: 0000e597 auipc a1,0xe + 8000880c: d5058593 addi a1,a1,-688 # 80016558 + 80008810: 00078513 mv a0,a5 + 80008814: 8a5ff0ef jal ra,800080b8 + 80008818: fe843703 ld a4,-24(s0) + 8000881c: 00070793 mv a5,a4 + 80008820: 00379793 slli a5,a5,0x3 + 80008824: 40e787b3 sub a5,a5,a4 + 80008828: 00279793 slli a5,a5,0x2 + 8000882c: 00e787b3 add a5,a5,a4 + 80008830: 00379793 slli a5,a5,0x3 + 80008834: 0001e717 auipc a4,0x1e + 80008838: dc470713 addi a4,a4,-572 # 800265f8 + 8000883c: 00e78533 add a0,a5,a4 + 80008840: fe843783 ld a5,-24(s0) + 80008844: 00e79713 slli a4,a5,0xe + 80008848: 0001e797 auipc a5,0x1e + 8000884c: e9878793 addi a5,a5,-360 # 800266e0 + 80008850: 00f70733 add a4,a4,a5 + 80008854: fd040593 addi a1,s0,-48 + 80008858: 02000893 li a7,32 + 8000885c: 01f00813 li a6,31 + 80008860: 000047b7 lui a5,0x4 + 80008864: 00000693 li a3,0 + 80008868: 00000617 auipc a2,0x0 + 8000886c: f1860613 addi a2,a2,-232 # 80008780 + 80008870: 888fd0ef jal ra,800058f8 + 80008874: fe843703 ld a4,-24(s0) + 80008878: 00070793 mv a5,a4 + 8000887c: 00379793 slli a5,a5,0x3 + 80008880: 40e787b3 sub a5,a5,a4 + 80008884: 00279793 slli a5,a5,0x2 + 80008888: 00e787b3 add a5,a5,a4 + 8000888c: 00379793 slli a5,a5,0x3 + 80008890: 0001e717 auipc a4,0x1e + 80008894: d6870713 addi a4,a4,-664 # 800265f8 + 80008898: 00e787b3 add a5,a5,a4 + 8000889c: 00078513 mv a0,a5 + 800088a0: 954fd0ef jal ra,800059f4 + 800088a4: fe843783 ld a5,-24(s0) + 800088a8: 00178793 addi a5,a5,1 # 4001 <__STACKSIZE__+0x1> + 800088ac: fef43423 sd a5,-24(s0) + 800088b0: fe843783 ld a5,-24(s0) + 800088b4: f40786e3 beqz a5,80008800 + 800088b8: 00000013 nop + 800088bc: 00000013 nop + 800088c0: 02813083 ld ra,40(sp) + 800088c4: 02013403 ld s0,32(sp) + 800088c8: 03010113 addi sp,sp,48 + 800088cc: 00008067 ret + +00000000800088d0 : + 800088d0: fe010113 addi sp,sp,-32 + 800088d4: 00813c23 sd s0,24(sp) + 800088d8: 02010413 addi s0,sp,32 + 800088dc: f14027f3 csrr a5,mhartid + 800088e0: fef42623 sw a5,-20(s0) + 800088e4: fec42783 lw a5,-20(s0) + 800088e8: 00078513 mv a0,a5 + 800088ec: 01813403 ld s0,24(sp) + 800088f0: 02010113 addi sp,sp,32 + 800088f4: 00008067 ret + +00000000800088f8 : + 800088f8: fd010113 addi sp,sp,-48 + 800088fc: 02113423 sd ra,40(sp) + 80008900: 02813023 sd s0,32(sp) + 80008904: 00913c23 sd s1,24(sp) + 80008908: 01213823 sd s2,16(sp) + 8000890c: 03010413 addi s0,sp,48 + 80008910: 000187b7 lui a5,0x18 + 80008914: 6a07879b addiw a5,a5,1696 + 80008918: fcf42e23 sw a5,-36(s0) + 8000891c: d2dfd0ef jal ra,80006648 + 80008920: 0200c7b7 lui a5,0x200c + 80008924: ff878793 addi a5,a5,-8 # 200bff8 <__STACKSIZE__+0x2007ff8> + 80008928: 0007b903 ld s2,0(a5) + 8000892c: fdc42483 lw s1,-36(s0) + 80008930: fa1ff0ef jal ra,800088d0 + 80008934: 00050793 mv a5,a0 + 80008938: 0007879b sext.w a5,a5 + 8000893c: 0027979b slliw a5,a5,0x2 + 80008940: 0007879b sext.w a5,a5 + 80008944: 02079713 slli a4,a5,0x20 + 80008948: 02075713 srli a4,a4,0x20 + 8000894c: 020047b7 lui a5,0x2004 + 80008950: 00f707b3 add a5,a4,a5 + 80008954: 00078713 mv a4,a5 + 80008958: 009907b3 add a5,s2,s1 + 8000895c: 00f73023 sd a5,0(a4) + 80008960: 00000793 li a5,0 + 80008964: 00078513 mv a0,a5 + 80008968: 02813083 ld ra,40(sp) + 8000896c: 02013403 ld s0,32(sp) + 80008970: 01813483 ld s1,24(sp) + 80008974: 01013903 ld s2,16(sp) + 80008978: 03010113 addi sp,sp,48 + 8000897c: 00008067 ret + +0000000080008980 : + 80008980: fc010113 addi sp,sp,-64 + 80008984: 02113c23 sd ra,56(sp) + 80008988: 02813823 sd s0,48(sp) + 8000898c: 02913423 sd s1,40(sp) + 80008990: 04010413 addi s0,sp,64 + 80008994: 000187b7 lui a5,0x18 + 80008998: 6a078793 addi a5,a5,1696 # 186a0 <__STACKSIZE__+0x146a0> + 8000899c: fcf43c23 sd a5,-40(s0) + 800089a0: 08000793 li a5,128 + 800089a4: 3047b7f3 csrrc a5,mie,a5 + 800089a8: fcf43823 sd a5,-48(s0) + 800089ac: 08000793 li a5,128 + 800089b0: 3447b7f3 csrrc a5,mip,a5 + 800089b4: fcf43423 sd a5,-56(s0) + 800089b8: 0200c7b7 lui a5,0x200c + 800089bc: ff878793 addi a5,a5,-8 # 200bff8 <__STACKSIZE__+0x2007ff8> + 800089c0: 0007b483 ld s1,0(a5) + 800089c4: f0dff0ef jal ra,800088d0 + 800089c8: 00050793 mv a5,a0 + 800089cc: 0007879b sext.w a5,a5 + 800089d0: 0027979b slliw a5,a5,0x2 + 800089d4: 0007879b sext.w a5,a5 + 800089d8: 02079713 slli a4,a5,0x20 + 800089dc: 02075713 srli a4,a4,0x20 + 800089e0: 020047b7 lui a5,0x2004 + 800089e4: 00f707b3 add a5,a4,a5 + 800089e8: 00078713 mv a4,a5 + 800089ec: fd843783 ld a5,-40(s0) + 800089f0: 00f487b3 add a5,s1,a5 + 800089f4: 00f73023 sd a5,0(a4) + 800089f8: 08000793 li a5,128 + 800089fc: 3047a7f3 csrrs a5,mie,a5 + 80008a00: fcf43023 sd a5,-64(s0) + 80008a04: 00000793 li a5,0 + 80008a08: 00078513 mv a0,a5 + 80008a0c: 03813083 ld ra,56(sp) + 80008a10: 03013403 ld s0,48(sp) + 80008a14: 02813483 ld s1,40(sp) + 80008a18: 04010113 addi sp,sp,64 + 80008a1c: 00008067 ret + +0000000080008a20 : + 80008a20: f0010113 addi sp,sp,-256 + 80008a24: 00113423 sd ra,8(sp) + 80008a28: 300020f3 csrr ra,mstatus + 80008a2c: 00113823 sd ra,16(sp) + 80008a30: 341020f3 csrr ra,mepc + 80008a34: 00113023 sd ra,0(sp) + 80008a38: 02413023 sd tp,32(sp) + 80008a3c: 02513423 sd t0,40(sp) + 80008a40: 02613823 sd t1,48(sp) + 80008a44: 02713c23 sd t2,56(sp) + 80008a48: 04813023 sd s0,64(sp) + 80008a4c: 04913423 sd s1,72(sp) + 80008a50: 04a13823 sd a0,80(sp) + 80008a54: 04b13c23 sd a1,88(sp) + 80008a58: 06c13023 sd a2,96(sp) + 80008a5c: 06d13423 sd a3,104(sp) + 80008a60: 06e13823 sd a4,112(sp) + 80008a64: 06f13c23 sd a5,120(sp) + 80008a68: 09013023 sd a6,128(sp) + 80008a6c: 09113423 sd a7,136(sp) + 80008a70: 09213823 sd s2,144(sp) + 80008a74: 09313c23 sd s3,152(sp) + 80008a78: 0b413023 sd s4,160(sp) + 80008a7c: 0b513423 sd s5,168(sp) + 80008a80: 0b613823 sd s6,176(sp) + 80008a84: 0b713c23 sd s7,184(sp) + 80008a88: 0d813023 sd s8,192(sp) + 80008a8c: 0d913423 sd s9,200(sp) + 80008a90: 0da13823 sd s10,208(sp) + 80008a94: 0db13c23 sd s11,216(sp) + 80008a98: 0fc13023 sd t3,224(sp) + 80008a9c: 0fd13423 sd t4,232(sp) + 80008aa0: 0fe13823 sd t5,240(sp) + 80008aa4: 0ff13c23 sd t6,248(sp) + 80008aa8: 00010413 mv s0,sp + 80008aac: f14022f3 csrr t0,mhartid + 80008ab0: 82018113 addi sp,gp,-2016 # 80019fc0 <__stack_start__> + 80008ab4: 00128313 addi t1,t0,1 # 8001 <__STACKSIZE__+0x4001> + 80008ab8: 000043b7 lui t2,0x4 + 80008abc: 00000e13 li t3,0 + +0000000080008ac0 : + 80008ac0: 007e0e33 add t3,t3,t2 + 80008ac4: fff30313 addi t1,t1,-1 + 80008ac8: fe031ce3 bnez t1,80008ac0 + 80008acc: 000e0313 mv t1,t3 + 80008ad0: 00610133 add sp,sp,t1 + 80008ad4: a11fd0ef jal ra,800064e4 + 80008ad8: 34202573 csrr a0,mcause + 80008adc: 341025f3 csrr a1,mepc + 80008ae0: 00040613 mv a2,s0 + 80008ae4: 6bc000ef jal ra,800091a0 + 80008ae8: a75fd0ef jal ra,8000655c + 80008aec: 00040113 mv sp,s0 + 80008af0: 00019417 auipc s0,0x19 + 80008af4: 5d040413 addi s0,s0,1488 # 800220c0 + 80008af8: 00042903 lw s2,0(s0) + 80008afc: 02090463 beqz s2,80008b24 + 80008b00: 00042023 sw zero,0(s0) + 80008b04: 00019417 auipc s0,0x19 + 80008b08: 5ac40413 addi s0,s0,1452 # 800220b0 + 80008b0c: 00043483 ld s1,0(s0) + 80008b10: 0024b023 sd sp,0(s1) + 80008b14: 00019417 auipc s0,0x19 + 80008b18: 5a440413 addi s0,s0,1444 # 800220b8 + 80008b1c: 00043483 ld s1,0(s0) + 80008b20: 0004b103 ld sp,0(s1) + +0000000080008b24 : + 80008b24: f0cf706f j 80000230 + +0000000080008b28 : + 80008b28: fb010113 addi sp,sp,-80 + 80008b2c: 04813423 sd s0,72(sp) + 80008b30: 05010413 addi s0,sp,80 + 80008b34: fca43423 sd a0,-56(s0) + 80008b38: fcb43023 sd a1,-64(s0) + 80008b3c: fac43c23 sd a2,-72(s0) + 80008b40: fad43823 sd a3,-80(s0) + 80008b44: fb843783 ld a5,-72(s0) + 80008b48: 00878793 addi a5,a5,8 # 2004008 <__STACKSIZE__+0x2000008> + 80008b4c: fef43023 sd a5,-32(s0) + 80008b50: fe043783 ld a5,-32(s0) + 80008b54: ff87f793 andi a5,a5,-8 + 80008b58: fef43023 sd a5,-32(s0) + 80008b5c: fe043783 ld a5,-32(s0) + 80008b60: ef878793 addi a5,a5,-264 + 80008b64: fef43023 sd a5,-32(s0) + 80008b68: fe043783 ld a5,-32(s0) + 80008b6c: fcf43c23 sd a5,-40(s0) + 80008b70: fe042623 sw zero,-20(s0) + 80008b74: 0300006f j 80008ba4 + 80008b78: fec42783 lw a5,-20(s0) + 80008b7c: 00379793 slli a5,a5,0x3 + 80008b80: fd843703 ld a4,-40(s0) + 80008b84: 00f707b3 add a5,a4,a5 + 80008b88: 37ab7737 lui a4,0x37ab7 + 80008b8c: 00271713 slli a4,a4,0x2 + 80008b90: eef70713 addi a4,a4,-273 # 37ab6eef <__STACKSIZE__+0x37ab2eef> + 80008b94: 00e7b023 sd a4,0(a5) + 80008b98: fec42783 lw a5,-20(s0) + 80008b9c: 0017879b addiw a5,a5,1 + 80008ba0: fef42623 sw a5,-20(s0) + 80008ba4: fec42783 lw a5,-20(s0) + 80008ba8: 00078713 mv a4,a5 + 80008bac: 02000793 li a5,32 + 80008bb0: fce7f4e3 bgeu a5,a4,80008b78 + 80008bb4: fb043703 ld a4,-80(s0) + 80008bb8: fd843783 ld a5,-40(s0) + 80008bbc: 00e7b423 sd a4,8(a5) + 80008bc0: 00018713 mv a4,gp + 80008bc4: fd843783 ld a5,-40(s0) + 80008bc8: 00e7bc23 sd a4,24(a5) + 80008bcc: fc043703 ld a4,-64(s0) + 80008bd0: fd843783 ld a5,-40(s0) + 80008bd4: 04e7b823 sd a4,80(a5) + 80008bd8: fc843703 ld a4,-56(s0) + 80008bdc: fd843783 ld a5,-40(s0) + 80008be0: 00e7b023 sd a4,0(a5) + 80008be4: fe043783 ld a5,-32(s0) + 80008be8: 10878713 addi a4,a5,264 + 80008bec: fd843783 ld a5,-40(s0) + 80008bf0: 10e7b023 sd a4,256(a5) + 80008bf4: fd843783 ld a5,-40(s0) + 80008bf8: 00008737 lui a4,0x8 + 80008bfc: 88070713 addi a4,a4,-1920 # 7880 <__STACKSIZE__+0x3880> + 80008c00: 00e7b823 sd a4,16(a5) + 80008c04: fe043783 ld a5,-32(s0) + 80008c08: 00078513 mv a0,a5 + 80008c0c: 04813403 ld s0,72(sp) + 80008c10: 05010113 addi sp,sp,80 + 80008c14: 00008067 ret + +0000000080008c18 : + 80008c18: fe010113 addi sp,sp,-32 + 80008c1c: 00813c23 sd s0,24(sp) + 80008c20: 02010413 addi s0,sp,32 + 80008c24: fea43423 sd a0,-24(s0) + 80008c28: feb43023 sd a1,-32(s0) + 80008c2c: 00019797 auipc a5,0x19 + 80008c30: 49478793 addi a5,a5,1172 # 800220c0 + 80008c34: 0007b783 ld a5,0(a5) + 80008c38: 00079a63 bnez a5,80008c4c + 80008c3c: 00019797 auipc a5,0x19 + 80008c40: 47478793 addi a5,a5,1140 # 800220b0 + 80008c44: fe843703 ld a4,-24(s0) + 80008c48: 00e7b023 sd a4,0(a5) + 80008c4c: 00019797 auipc a5,0x19 + 80008c50: 46c78793 addi a5,a5,1132 # 800220b8 + 80008c54: fe043703 ld a4,-32(s0) + 80008c58: 00e7b023 sd a4,0(a5) + 80008c5c: 00019797 auipc a5,0x19 + 80008c60: 46478793 addi a5,a5,1124 # 800220c0 + 80008c64: 00100713 li a4,1 + 80008c68: 00e7b023 sd a4,0(a5) + 80008c6c: 00000013 nop + 80008c70: 01813403 ld s0,24(sp) + 80008c74: 02010113 addi sp,sp,32 + 80008c78: 00008067 ret + +0000000080008c7c : + 80008c7c: fe010113 addi sp,sp,-32 + 80008c80: 00113c23 sd ra,24(sp) + 80008c84: 00813823 sd s0,16(sp) + 80008c88: 02010413 addi s0,sp,32 + 80008c8c: 00050793 mv a5,a0 + 80008c90: feb43023 sd a1,-32(s0) + 80008c94: fef42623 sw a5,-20(s0) + 80008c98: fec42783 lw a5,-20(s0) + 80008c9c: 00078593 mv a1,a5 + 80008ca0: 0000e517 auipc a0,0xe + 80008ca4: 8c050513 addi a0,a0,-1856 # 80016560 + 80008ca8: d74ff0ef jal ra,8000821c + 80008cac: 00000793 li a5,0 + 80008cb0: 00078513 mv a0,a5 + 80008cb4: 01813083 ld ra,24(sp) + 80008cb8: 01013403 ld s0,16(sp) + 80008cbc: 02010113 addi sp,sp,32 + 80008cc0: 00008067 ret + +0000000080008cc4 : + 80008cc4: fe010113 addi sp,sp,-32 + 80008cc8: 00813c23 sd s0,24(sp) + 80008ccc: 02010413 addi s0,sp,32 + 80008cd0: fe042623 sw zero,-20(s0) + 80008cd4: fe042623 sw zero,-20(s0) + 80008cd8: 0480006f j 80008d20 + 80008cdc: 00022717 auipc a4,0x22 + 80008ce0: a2470713 addi a4,a4,-1500 # 8002a700 + 80008ce4: fec42783 lw a5,-20(s0) + 80008ce8: 00479793 slli a5,a5,0x4 + 80008cec: 00f707b3 add a5,a4,a5 + 80008cf0: 00000717 auipc a4,0x0 + 80008cf4: f8c70713 addi a4,a4,-116 # 80008c7c + 80008cf8: 00e7b023 sd a4,0(a5) + 80008cfc: 00022717 auipc a4,0x22 + 80008d00: a0470713 addi a4,a4,-1532 # 8002a700 + 80008d04: fec42783 lw a5,-20(s0) + 80008d08: 00479793 slli a5,a5,0x4 + 80008d0c: 00f707b3 add a5,a4,a5 + 80008d10: 0007b423 sd zero,8(a5) + 80008d14: fec42783 lw a5,-20(s0) + 80008d18: 0017879b addiw a5,a5,1 + 80008d1c: fef42623 sw a5,-20(s0) + 80008d20: fec42783 lw a5,-20(s0) + 80008d24: 0007871b sext.w a4,a5 + 80008d28: 07f00793 li a5,127 + 80008d2c: fae7d8e3 bge a5,a4,80008cdc + 80008d30: 00000013 nop + 80008d34: 00000013 nop + 80008d38: 01813403 ld s0,24(sp) + 80008d3c: 02010113 addi sp,sp,32 + 80008d40: 00008067 ret + +0000000080008d44 : + 80008d44: fc010113 addi sp,sp,-64 + 80008d48: 02113c23 sd ra,56(sp) + 80008d4c: 02813823 sd s0,48(sp) + 80008d50: 04010413 addi s0,sp,64 + 80008d54: fca43423 sd a0,-56(s0) + 80008d58: 0000e517 auipc a0,0xe + 80008d5c: 83050513 addi a0,a0,-2000 # 80016588 + 80008d60: cbcff0ef jal ra,8000821c + 80008d64: 0000e517 auipc a0,0xe + 80008d68: 85450513 addi a0,a0,-1964 # 800165b8 + 80008d6c: cb0ff0ef jal ra,8000821c + 80008d70: fc843783 ld a5,-56(s0) + 80008d74: 0087b703 ld a4,8(a5) + 80008d78: fc843783 ld a5,-56(s0) + 80008d7c: 1007b783 ld a5,256(a5) + 80008d80: 00078613 mv a2,a5 + 80008d84: 00070593 mv a1,a4 + 80008d88: 0000e517 auipc a0,0xe + 80008d8c: 84850513 addi a0,a0,-1976 # 800165d0 + 80008d90: c8cff0ef jal ra,8000821c + 80008d94: fc843783 ld a5,-56(s0) + 80008d98: 0187b703 ld a4,24(a5) + 80008d9c: fc843783 ld a5,-56(s0) + 80008da0: 0207b783 ld a5,32(a5) + 80008da4: 00078613 mv a2,a5 + 80008da8: 00070593 mv a1,a4 + 80008dac: 0000e517 auipc a0,0xe + 80008db0: 84450513 addi a0,a0,-1980 # 800165f0 + 80008db4: c68ff0ef jal ra,8000821c + 80008db8: 0000e517 auipc a0,0xe + 80008dbc: 85850513 addi a0,a0,-1960 # 80016610 + 80008dc0: c5cff0ef jal ra,8000821c + 80008dc4: fc843783 ld a5,-56(s0) + 80008dc8: 0287b703 ld a4,40(a5) + 80008dcc: fc843783 ld a5,-56(s0) + 80008dd0: 0307b783 ld a5,48(a5) + 80008dd4: 00078613 mv a2,a5 + 80008dd8: 00070593 mv a1,a4 + 80008ddc: 0000e517 auipc a0,0xe + 80008de0: 84c50513 addi a0,a0,-1972 # 80016628 + 80008de4: c38ff0ef jal ra,8000821c + 80008de8: fc843783 ld a5,-56(s0) + 80008dec: 0387b783 ld a5,56(a5) + 80008df0: 00078593 mv a1,a5 + 80008df4: 0000e517 auipc a0,0xe + 80008df8: 85450513 addi a0,a0,-1964 # 80016648 + 80008dfc: c20ff0ef jal ra,8000821c + 80008e00: fc843783 ld a5,-56(s0) + 80008e04: 0e07b703 ld a4,224(a5) + 80008e08: fc843783 ld a5,-56(s0) + 80008e0c: 0e87b783 ld a5,232(a5) + 80008e10: 00078613 mv a2,a5 + 80008e14: 00070593 mv a1,a4 + 80008e18: 0000e517 auipc a0,0xe + 80008e1c: 84050513 addi a0,a0,-1984 # 80016658 + 80008e20: bfcff0ef jal ra,8000821c + 80008e24: fc843783 ld a5,-56(s0) + 80008e28: 0f07b703 ld a4,240(a5) + 80008e2c: fc843783 ld a5,-56(s0) + 80008e30: 0f87b783 ld a5,248(a5) + 80008e34: 00078613 mv a2,a5 + 80008e38: 00070593 mv a1,a4 + 80008e3c: 0000e517 auipc a0,0xe + 80008e40: 83c50513 addi a0,a0,-1988 # 80016678 + 80008e44: bd8ff0ef jal ra,8000821c + 80008e48: 0000e517 auipc a0,0xe + 80008e4c: 85050513 addi a0,a0,-1968 # 80016698 + 80008e50: bccff0ef jal ra,8000821c + 80008e54: fc843783 ld a5,-56(s0) + 80008e58: 0407b703 ld a4,64(a5) + 80008e5c: fc843783 ld a5,-56(s0) + 80008e60: 0487b783 ld a5,72(a5) + 80008e64: 00078613 mv a2,a5 + 80008e68: 00070593 mv a1,a4 + 80008e6c: 0000e517 auipc a0,0xe + 80008e70: 84450513 addi a0,a0,-1980 # 800166b0 + 80008e74: ba8ff0ef jal ra,8000821c + 80008e78: fc843783 ld a5,-56(s0) + 80008e7c: 0907b703 ld a4,144(a5) + 80008e80: fc843783 ld a5,-56(s0) + 80008e84: 0987b783 ld a5,152(a5) + 80008e88: 00078613 mv a2,a5 + 80008e8c: 00070593 mv a1,a4 + 80008e90: 0000e517 auipc a0,0xe + 80008e94: 84850513 addi a0,a0,-1976 # 800166d8 + 80008e98: b84ff0ef jal ra,8000821c + 80008e9c: fc843783 ld a5,-56(s0) + 80008ea0: 0a07b703 ld a4,160(a5) + 80008ea4: fc843783 ld a5,-56(s0) + 80008ea8: 0a87b783 ld a5,168(a5) + 80008eac: 00078613 mv a2,a5 + 80008eb0: 00070593 mv a1,a4 + 80008eb4: 0000e517 auipc a0,0xe + 80008eb8: 84450513 addi a0,a0,-1980 # 800166f8 + 80008ebc: b60ff0ef jal ra,8000821c + 80008ec0: fc843783 ld a5,-56(s0) + 80008ec4: 0b07b703 ld a4,176(a5) + 80008ec8: fc843783 ld a5,-56(s0) + 80008ecc: 0b87b783 ld a5,184(a5) + 80008ed0: 00078613 mv a2,a5 + 80008ed4: 00070593 mv a1,a4 + 80008ed8: 0000e517 auipc a0,0xe + 80008edc: 84050513 addi a0,a0,-1984 # 80016718 + 80008ee0: b3cff0ef jal ra,8000821c + 80008ee4: fc843783 ld a5,-56(s0) + 80008ee8: 0c07b703 ld a4,192(a5) + 80008eec: fc843783 ld a5,-56(s0) + 80008ef0: 0c87b783 ld a5,200(a5) + 80008ef4: 00078613 mv a2,a5 + 80008ef8: 00070593 mv a1,a4 + 80008efc: 0000e517 auipc a0,0xe + 80008f00: 83c50513 addi a0,a0,-1988 # 80016738 + 80008f04: b18ff0ef jal ra,8000821c + 80008f08: fc843783 ld a5,-56(s0) + 80008f0c: 0d07b703 ld a4,208(a5) + 80008f10: fc843783 ld a5,-56(s0) + 80008f14: 0d87b783 ld a5,216(a5) + 80008f18: 00078613 mv a2,a5 + 80008f1c: 00070593 mv a1,a4 + 80008f20: 0000e517 auipc a0,0xe + 80008f24: 83850513 addi a0,a0,-1992 # 80016758 + 80008f28: af4ff0ef jal ra,8000821c + 80008f2c: 0000e517 auipc a0,0xe + 80008f30: 85450513 addi a0,a0,-1964 # 80016780 + 80008f34: ae8ff0ef jal ra,8000821c + 80008f38: fc843783 ld a5,-56(s0) + 80008f3c: 0507b703 ld a4,80(a5) + 80008f40: fc843783 ld a5,-56(s0) + 80008f44: 0587b783 ld a5,88(a5) + 80008f48: 00078613 mv a2,a5 + 80008f4c: 00070593 mv a1,a4 + 80008f50: 0000e517 auipc a0,0xe + 80008f54: 85050513 addi a0,a0,-1968 # 800167a0 + 80008f58: ac4ff0ef jal ra,8000821c + 80008f5c: fc843783 ld a5,-56(s0) + 80008f60: 0607b703 ld a4,96(a5) + 80008f64: fc843783 ld a5,-56(s0) + 80008f68: 0687b783 ld a5,104(a5) + 80008f6c: 00078613 mv a2,a5 + 80008f70: 00070593 mv a1,a4 + 80008f74: 0000e517 auipc a0,0xe + 80008f78: 84c50513 addi a0,a0,-1972 # 800167c0 + 80008f7c: aa0ff0ef jal ra,8000821c + 80008f80: fc843783 ld a5,-56(s0) + 80008f84: 0707b703 ld a4,112(a5) + 80008f88: fc843783 ld a5,-56(s0) + 80008f8c: 0787b783 ld a5,120(a5) + 80008f90: 00078613 mv a2,a5 + 80008f94: 00070593 mv a1,a4 + 80008f98: 0000e517 auipc a0,0xe + 80008f9c: 84850513 addi a0,a0,-1976 # 800167e0 + 80008fa0: a7cff0ef jal ra,8000821c + 80008fa4: fc843783 ld a5,-56(s0) + 80008fa8: 0807b703 ld a4,128(a5) + 80008fac: fc843783 ld a5,-56(s0) + 80008fb0: 0887b783 ld a5,136(a5) + 80008fb4: 00078613 mv a2,a5 + 80008fb8: 00070593 mv a1,a4 + 80008fbc: 0000e517 auipc a0,0xe + 80008fc0: 84450513 addi a0,a0,-1980 # 80016800 + 80008fc4: a58ff0ef jal ra,8000821c + 80008fc8: fc843783 ld a5,-56(s0) + 80008fcc: 0107b783 ld a5,16(a5) + 80008fd0: 00078593 mv a1,a5 + 80008fd4: 0000e517 auipc a0,0xe + 80008fd8: 84c50513 addi a0,a0,-1972 # 80016820 + 80008fdc: a40ff0ef jal ra,8000821c + 80008fe0: fc843783 ld a5,-56(s0) + 80008fe4: 0107b783 ld a5,16(a5) + 80008fe8: 0027f793 andi a5,a5,2 + 80008fec: 00078863 beqz a5,80008ffc + 80008ff0: 0000e797 auipc a5,0xe + 80008ff4: 84078793 addi a5,a5,-1984 # 80016830 + 80008ff8: 00c0006f j 80009004 + 80008ffc: 0000e797 auipc a5,0xe + 80009000: 85478793 addi a5,a5,-1964 # 80016850 + 80009004: 00078593 mv a1,a5 + 80009008: 0000e517 auipc a0,0xe + 8000900c: 86850513 addi a0,a0,-1944 # 80016870 + 80009010: a0cff0ef jal ra,8000821c + 80009014: fc843783 ld a5,-56(s0) + 80009018: 0107b783 ld a5,16(a5) + 8000901c: 0207f793 andi a5,a5,32 + 80009020: 00078863 beqz a5,80009030 + 80009024: 0000e797 auipc a5,0xe + 80009028: 85478793 addi a5,a5,-1964 # 80016878 + 8000902c: 00c0006f j 80009038 + 80009030: 0000e797 auipc a5,0xe + 80009034: 87078793 addi a5,a5,-1936 # 800168a0 + 80009038: 00078593 mv a1,a5 + 8000903c: 0000e517 auipc a0,0xe + 80009040: 83450513 addi a0,a0,-1996 # 80016870 + 80009044: 9d8ff0ef jal ra,8000821c + 80009048: fc843783 ld a5,-56(s0) + 8000904c: 0107b783 ld a5,16(a5) + 80009050: 1007f793 andi a5,a5,256 + 80009054: 00078863 beqz a5,80009064 + 80009058: 0000e797 auipc a5,0xe + 8000905c: 87078793 addi a5,a5,-1936 # 800168c8 + 80009060: 00c0006f j 8000906c + 80009064: 0000e797 auipc a5,0xe + 80009068: 88c78793 addi a5,a5,-1908 # 800168f0 + 8000906c: 00078593 mv a1,a5 + 80009070: 0000e517 auipc a0,0xe + 80009074: 80050513 addi a0,a0,-2048 # 80016870 + 80009078: 9a4ff0ef jal ra,8000821c + 8000907c: fc843783 ld a5,-56(s0) + 80009080: 0107b703 ld a4,16(a5) + 80009084: 000407b7 lui a5,0x40 + 80009088: 00f777b3 and a5,a4,a5 + 8000908c: 00078863 beqz a5,8000909c + 80009090: 0000e797 auipc a5,0xe + 80009094: 88078793 addi a5,a5,-1920 # 80016910 + 80009098: 00c0006f j 800090a4 + 8000909c: 0000e797 auipc a5,0xe + 800090a0: 89478793 addi a5,a5,-1900 # 80016930 + 800090a4: 00078593 mv a1,a5 + 800090a8: 0000d517 auipc a0,0xd + 800090ac: 7c850513 addi a0,a0,1992 # 80016870 + 800090b0: 96cff0ef jal ra,8000821c + 800090b4: fc843783 ld a5,-56(s0) + 800090b8: 0107b703 ld a4,16(a5) + 800090bc: 000807b7 lui a5,0x80 + 800090c0: 00f777b3 and a5,a4,a5 + 800090c4: 00078863 beqz a5,800090d4 + 800090c8: 0000e797 auipc a5,0xe + 800090cc: 88878793 addi a5,a5,-1912 # 80016950 + 800090d0: 00c0006f j 800090dc + 800090d4: 0000e797 auipc a5,0xe + 800090d8: 8a478793 addi a5,a5,-1884 # 80016978 + 800090dc: 00078593 mv a1,a5 + 800090e0: 0000d517 auipc a0,0xd + 800090e4: 79050513 addi a0,a0,1936 # 80016870 + 800090e8: 934ff0ef jal ra,8000821c + 800090ec: 180027f3 csrr a5,satp + 800090f0: fef43023 sd a5,-32(s0) + 800090f4: fe043783 ld a5,-32(s0) + 800090f8: fcf43c23 sd a5,-40(s0) + 800090fc: fd843583 ld a1,-40(s0) + 80009100: 0000e517 auipc a0,0xe + 80009104: 8a050513 addi a0,a0,-1888 # 800169a0 + 80009108: 914ff0ef jal ra,8000821c + 8000910c: 0000e797 auipc a5,0xe + 80009110: 8a478793 addi a5,a5,-1884 # 800169b0 + 80009114: fef43423 sd a5,-24(s0) + 80009118: fd843783 ld a5,-40(s0) + 8000911c: 03c7d793 srli a5,a5,0x3c + 80009120: 00900713 li a4,9 + 80009124: 02e78e63 beq a5,a4,80009160 + 80009128: 00900713 li a4,9 + 8000912c: 04f76263 bltu a4,a5,80009170 + 80009130: 00078863 beqz a5,80009140 + 80009134: 00800713 li a4,8 + 80009138: 00e78c63 beq a5,a4,80009150 + 8000913c: 0340006f j 80009170 + 80009140: 0000e797 auipc a5,0xe + 80009144: 8a078793 addi a5,a5,-1888 # 800169e0 + 80009148: fef43423 sd a5,-24(s0) + 8000914c: 0240006f j 80009170 + 80009150: 0000e797 auipc a5,0xe + 80009154: 8b878793 addi a5,a5,-1864 # 80016a08 + 80009158: fef43423 sd a5,-24(s0) + 8000915c: 0140006f j 80009170 + 80009160: 0000e797 auipc a5,0xe + 80009164: 8d878793 addi a5,a5,-1832 # 80016a38 + 80009168: fef43423 sd a5,-24(s0) + 8000916c: 00000013 nop + 80009170: fe843583 ld a1,-24(s0) + 80009174: 0000e517 auipc a0,0xe + 80009178: 8f450513 addi a0,a0,-1804 # 80016a68 + 8000917c: 8a0ff0ef jal ra,8000821c + 80009180: 0000e517 auipc a0,0xe + 80009184: 8f850513 addi a0,a0,-1800 # 80016a78 + 80009188: 894ff0ef jal ra,8000821c + 8000918c: 00000013 nop + 80009190: 03813083 ld ra,56(sp) + 80009194: 03013403 ld s0,48(sp) + 80009198: 04010113 addi sp,sp,64 + 8000919c: 00008067 ret + +00000000800091a0 : + 800091a0: fc010113 addi sp,sp,-64 + 800091a4: 02113c23 sd ra,56(sp) + 800091a8: 02813823 sd s0,48(sp) + 800091ac: 04010413 addi s0,sp,64 + 800091b0: fca43c23 sd a0,-40(s0) + 800091b4: fcb43823 sd a1,-48(s0) + 800091b8: fcc43423 sd a2,-56(s0) + 800091bc: fcd43023 sd a3,-64(s0) + 800091c0: fd843783 ld a5,-40(s0) + 800091c4: fef42623 sw a5,-20(s0) + 800091c8: fe042423 sw zero,-24(s0) + 800091cc: fd843783 ld a5,-40(s0) + 800091d0: 1007d863 bgez a5,800092e0 + 800091d4: fec42783 lw a5,-20(s0) + 800091d8: ffd7869b addiw a3,a5,-3 + 800091dc: 0006871b sext.w a4,a3 + 800091e0: 00800793 li a5,8 + 800091e4: 28e7e263 bltu a5,a4,80009468 + 800091e8: 02069793 slli a5,a3,0x20 + 800091ec: 0207d793 srli a5,a5,0x20 + 800091f0: 00279713 slli a4,a5,0x2 + 800091f4: 0000f797 auipc a5,0xf + 800091f8: 71078793 addi a5,a5,1808 # 80018904 <__FUNCTION__.2651+0x14> + 800091fc: 00f707b3 add a5,a4,a5 + 80009200: 0007a783 lw a5,0(a5) + 80009204: 0007871b sext.w a4,a5 + 80009208: 0000f797 auipc a5,0xf + 8000920c: 6fc78793 addi a5,a5,1788 # 80018904 <__FUNCTION__.2651+0x14> + 80009210: 00f707b3 add a5,a4,a5 + 80009214: 00078067 jr a5 + 80009218: ee0ff0ef jal ra,800088f8 + 8000921c: 24c0006f j 80009468 + 80009220: ed8ff0ef jal ra,800088f8 + 80009224: 2440006f j 80009468 + 80009228: 8fcf70ef jal ra,80000324 + 8000922c: 00050793 mv a5,a0 + 80009230: fef42423 sw a5,-24(s0) + 80009234: fe842783 lw a5,-24(s0) + 80009238: 00078513 mv a0,a5 + 8000923c: 944f70ef jal ra,80000380 + 80009240: 00021717 auipc a4,0x21 + 80009244: 4c070713 addi a4,a4,1216 # 8002a700 + 80009248: fe842783 lw a5,-24(s0) + 8000924c: 00479793 slli a5,a5,0x4 + 80009250: 00f707b3 add a5,a4,a5 + 80009254: 0007b683 ld a3,0(a5) + 80009258: 00021717 auipc a4,0x21 + 8000925c: 4a870713 addi a4,a4,1192 # 8002a700 + 80009260: fe842783 lw a5,-24(s0) + 80009264: 00479793 slli a5,a5,0x4 + 80009268: 00f707b3 add a5,a4,a5 + 8000926c: 0087b703 ld a4,8(a5) + 80009270: fe842783 lw a5,-24(s0) + 80009274: 00070593 mv a1,a4 + 80009278: 00078513 mv a0,a5 + 8000927c: 000680e7 jalr a3 + 80009280: 1e80006f j 80009468 + 80009284: 8a0f70ef jal ra,80000324 + 80009288: 00050793 mv a5,a0 + 8000928c: fef42423 sw a5,-24(s0) + 80009290: fe842783 lw a5,-24(s0) + 80009294: 00078513 mv a0,a5 + 80009298: 8e8f70ef jal ra,80000380 + 8000929c: 00021717 auipc a4,0x21 + 800092a0: 46470713 addi a4,a4,1124 # 8002a700 + 800092a4: fe842783 lw a5,-24(s0) + 800092a8: 00479793 slli a5,a5,0x4 + 800092ac: 00f707b3 add a5,a4,a5 + 800092b0: 0007b683 ld a3,0(a5) + 800092b4: 00021717 auipc a4,0x21 + 800092b8: 44c70713 addi a4,a4,1100 # 8002a700 + 800092bc: fe842783 lw a5,-24(s0) + 800092c0: 00479793 slli a5,a5,0x4 + 800092c4: 00f707b3 add a5,a4,a5 + 800092c8: 0087b703 ld a4,8(a5) + 800092cc: fe842783 lw a5,-24(s0) + 800092d0: 00070593 mv a1,a4 + 800092d4: 00078513 mv a0,a5 + 800092d8: 000680e7 jalr a3 + 800092dc: 18c0006f j 80009468 + 800092e0: e95f60ef jal ra,80000174 + 800092e4: fc843683 ld a3,-56(s0) + 800092e8: fd043603 ld a2,-48(s0) + 800092ec: fd843583 ld a1,-40(s0) + 800092f0: 0000d517 auipc a0,0xd + 800092f4: 7b850513 addi a0,a0,1976 # 80016aa8 + 800092f8: f25fe0ef jal ra,8000821c + 800092fc: ed0fc0ef jal ra,800059cc + 80009300: fea43023 sd a0,-32(s0) + 80009304: 0000d517 auipc a0,0xd + 80009308: 7cc50513 addi a0,a0,1996 # 80016ad0 + 8000930c: f11fe0ef jal ra,8000821c + 80009310: fec42783 lw a5,-20(s0) + 80009314: 0007871b sext.w a4,a5 + 80009318: 00b00793 li a5,11 + 8000931c: 0ee7e863 bltu a5,a4,8000940c + 80009320: fec46783 lwu a5,-20(s0) + 80009324: 00279713 slli a4,a5,0x2 + 80009328: 0000f797 auipc a5,0xf + 8000932c: 60078793 addi a5,a5,1536 # 80018928 <__FUNCTION__.2651+0x38> + 80009330: 00f707b3 add a5,a4,a5 + 80009334: 0007a783 lw a5,0(a5) + 80009338: 0007871b sext.w a4,a5 + 8000933c: 0000f797 auipc a5,0xf + 80009340: 5ec78793 addi a5,a5,1516 # 80018928 <__FUNCTION__.2651+0x38> + 80009344: 00f707b3 add a5,a4,a5 + 80009348: 00078067 jr a5 + 8000934c: 0000d517 auipc a0,0xd + 80009350: 79450513 addi a0,a0,1940 # 80016ae0 + 80009354: ec9fe0ef jal ra,8000821c + 80009358: 0cc0006f j 80009424 + 8000935c: 0000d517 auipc a0,0xd + 80009360: 7a450513 addi a0,a0,1956 # 80016b00 + 80009364: eb9fe0ef jal ra,8000821c + 80009368: 0bc0006f j 80009424 + 8000936c: 0000d517 auipc a0,0xd + 80009370: 7b450513 addi a0,a0,1972 # 80016b20 + 80009374: ea9fe0ef jal ra,8000821c + 80009378: 0ac0006f j 80009424 + 8000937c: 0000d517 auipc a0,0xd + 80009380: 7bc50513 addi a0,a0,1980 # 80016b38 + 80009384: e99fe0ef jal ra,8000821c + 80009388: 09c0006f j 80009424 + 8000938c: 0000d517 auipc a0,0xd + 80009390: 7bc50513 addi a0,a0,1980 # 80016b48 + 80009394: e89fe0ef jal ra,8000821c + 80009398: 08c0006f j 80009424 + 8000939c: 0000d517 auipc a0,0xd + 800093a0: 7c450513 addi a0,a0,1988 # 80016b60 + 800093a4: e79fe0ef jal ra,8000821c + 800093a8: 07c0006f j 80009424 + 800093ac: 0000d517 auipc a0,0xd + 800093b0: 7cc50513 addi a0,a0,1996 # 80016b78 + 800093b4: e69fe0ef jal ra,8000821c + 800093b8: 06c0006f j 80009424 + 800093bc: 0000d517 auipc a0,0xd + 800093c0: 7dc50513 addi a0,a0,2012 # 80016b98 + 800093c4: e59fe0ef jal ra,8000821c + 800093c8: 05c0006f j 80009424 + 800093cc: 0000d517 auipc a0,0xd + 800093d0: 7e450513 addi a0,a0,2020 # 80016bb0 + 800093d4: e49fe0ef jal ra,8000821c + 800093d8: 04c0006f j 80009424 + 800093dc: 0000d517 auipc a0,0xd + 800093e0: 7f450513 addi a0,a0,2036 # 80016bd0 + 800093e4: e39fe0ef jal ra,8000821c + 800093e8: 03c0006f j 80009424 + 800093ec: 0000e517 auipc a0,0xe + 800093f0: 80450513 addi a0,a0,-2044 # 80016bf0 + 800093f4: e29fe0ef jal ra,8000821c + 800093f8: 02c0006f j 80009424 + 800093fc: 0000e517 auipc a0,0xe + 80009400: 81450513 addi a0,a0,-2028 # 80016c10 + 80009404: e19fe0ef jal ra,8000821c + 80009408: 01c0006f j 80009424 + 8000940c: fec42783 lw a5,-20(s0) + 80009410: 00078593 mv a1,a5 + 80009414: 0000e517 auipc a0,0xe + 80009418: 81c50513 addi a0,a0,-2020 # 80016c30 + 8000941c: e01fe0ef jal ra,8000821c + 80009420: 00000013 nop + 80009424: 0000e517 auipc a0,0xe + 80009428: 82c50513 addi a0,a0,-2004 # 80016c50 + 8000942c: df1fe0ef jal ra,8000821c + 80009430: fc043503 ld a0,-64(s0) + 80009434: 911ff0ef jal ra,80008d44 + 80009438: fc843583 ld a1,-56(s0) + 8000943c: 0000e517 auipc a0,0xe + 80009440: 81c50513 addi a0,a0,-2020 # 80016c58 + 80009444: dd9fe0ef jal ra,8000821c + 80009448: fe043783 ld a5,-32(s0) + 8000944c: 00078613 mv a2,a5 + 80009450: 01400593 li a1,20 + 80009454: 0000e517 auipc a0,0xe + 80009458: 81c50513 addi a0,a0,-2020 # 80016c70 + 8000945c: dc1fe0ef jal ra,8000821c + 80009460: 3fd030ef jal ra,8000d05c + 80009464: 0000006f j 80009464 + 80009468: 00000513 li a0,0 + 8000946c: d11f60ef jal ra,8000017c + 80009470: 00000013 nop + 80009474: 03813083 ld ra,56(sp) + 80009478: 03013403 ld s0,48(sp) + 8000947c: 04010113 addi sp,sp,64 + 80009480: 00008067 ret + +0000000080009484 : + 80009484: ff010113 addi sp,sp,-16 + 80009488: 00813423 sd s0,8(sp) + 8000948c: 01010413 addi s0,sp,16 + 80009490: 00100793 li a5,1 + 80009494: 00078513 mv a0,a5 + 80009498: 00813403 ld s0,8(sp) + 8000949c: 01010113 addi sp,sp,16 + 800094a0: 00008067 ret + +00000000800094a4 : + 800094a4: fd010113 addi sp,sp,-48 + 800094a8: 02113423 sd ra,40(sp) + 800094ac: 02813023 sd s0,32(sp) + 800094b0: 03010413 addi s0,sp,48 + 800094b4: 00050793 mv a5,a0 + 800094b8: fcb43823 sd a1,-48(s0) + 800094bc: fcf42e23 sw a5,-36(s0) + 800094c0: 0000d517 auipc a0,0xd + 800094c4: 7c850513 addi a0,a0,1992 # 80016c88 + 800094c8: d55fe0ef jal ra,8000821c + 800094cc: 00019797 auipc a5,0x19 + 800094d0: bfc78793 addi a5,a5,-1028 # 800220c8 <_syscall_table_begin> + 800094d4: 0007b783 ld a5,0(a5) + 800094d8: fef43423 sd a5,-24(s0) + 800094dc: 0640006f j 80009540 + 800094e0: fe843783 ld a5,-24(s0) + 800094e4: 0007b783 ld a5,0(a5) + 800094e8: 00600613 li a2,6 + 800094ec: 0000d597 auipc a1,0xd + 800094f0: 7bc58593 addi a1,a1,1980 # 80016ca8 + 800094f4: 00078513 mv a0,a5 + 800094f8: cdcf70ef jal ra,800009d4 + 800094fc: 00050793 mv a5,a0 + 80009500: 02079863 bnez a5,80009530 + 80009504: fe843783 ld a5,-24(s0) + 80009508: 0007b783 ld a5,0(a5) + 8000950c: 00678713 addi a4,a5,6 + 80009510: fe843783 ld a5,-24(s0) + 80009514: 0087b783 ld a5,8(a5) + 80009518: 00078613 mv a2,a5 + 8000951c: 00070593 mv a1,a4 + 80009520: 0000d517 auipc a0,0xd + 80009524: 79050513 addi a0,a0,1936 # 80016cb0 + 80009528: cf5fe0ef jal ra,8000821c + 8000952c: 0080006f j 80009534 + 80009530: 00000013 nop + 80009534: fe843783 ld a5,-24(s0) + 80009538: 01878793 addi a5,a5,24 + 8000953c: fef43423 sd a5,-24(s0) + 80009540: 00019797 auipc a5,0x19 + 80009544: b9078793 addi a5,a5,-1136 # 800220d0 <_syscall_table_end> + 80009548: 0007b783 ld a5,0(a5) + 8000954c: fe843703 ld a4,-24(s0) + 80009550: f8f768e3 bltu a4,a5,800094e0 + 80009554: 0000d517 auipc a0,0xd + 80009558: 76c50513 addi a0,a0,1900 # 80016cc0 + 8000955c: cc1fe0ef jal ra,8000821c + 80009560: 00000793 li a5,0 + 80009564: 00078513 mv a0,a5 + 80009568: 02813083 ld ra,40(sp) + 8000956c: 02013403 ld s0,32(sp) + 80009570: 03010113 addi sp,sp,48 + 80009574: 00008067 ret + +0000000080009578 : + 80009578: fe010113 addi sp,sp,-32 + 8000957c: 00113c23 sd ra,24(sp) + 80009580: 00813823 sd s0,16(sp) + 80009584: 02010413 addi s0,sp,32 + 80009588: 00050793 mv a5,a0 + 8000958c: feb43023 sd a1,-32(s0) + 80009590: fef42623 sw a5,-20(s0) + 80009594: 2c9030ef jal ra,8000d05c + 80009598: 00000793 li a5,0 + 8000959c: 00078513 mv a0,a5 + 800095a0: 01813083 ld ra,24(sp) + 800095a4: 01013403 ld s0,16(sp) + 800095a8: 02010113 addi sp,sp,32 + 800095ac: 00008067 ret + +00000000800095b0 : + 800095b0: fe010113 addi sp,sp,-32 + 800095b4: 00113c23 sd ra,24(sp) + 800095b8: 00813823 sd s0,16(sp) + 800095bc: 02010413 addi s0,sp,32 + 800095c0: 00050793 mv a5,a0 + 800095c4: feb43023 sd a1,-32(s0) + 800095c8: fef42623 sw a5,-20(s0) + 800095cc: b6dfb0ef jal ra,80005138 + 800095d0: 00000793 li a5,0 + 800095d4: 00078513 mv a0,a5 + 800095d8: 01813083 ld ra,24(sp) + 800095dc: 01013403 ld s0,16(sp) + 800095e0: 02010113 addi sp,sp,32 + 800095e4: 00008067 ret + +00000000800095e8 : + 800095e8: fb010113 addi sp,sp,-80 + 800095ec: 04113423 sd ra,72(sp) + 800095f0: 04813023 sd s0,64(sp) + 800095f4: 05010413 addi s0,sp,80 + 800095f8: fca43423 sd a0,-56(s0) + 800095fc: fcb43023 sd a1,-64(s0) + 80009600: fac43c23 sd a2,-72(s0) + 80009604: fc843783 ld a5,-56(s0) + 80009608: fef43423 sd a5,-24(s0) + 8000960c: fe043023 sd zero,-32(s0) + 80009610: fc043c23 sd zero,-40(s0) + 80009614: 2500006f j 80009864 + 80009618: fe843783 ld a5,-24(s0) + 8000961c: 00078023 sb zero,0(a5) + 80009620: fe843783 ld a5,-24(s0) + 80009624: 00178793 addi a5,a5,1 + 80009628: fef43423 sd a5,-24(s0) + 8000962c: fe043783 ld a5,-32(s0) + 80009630: 00178793 addi a5,a5,1 + 80009634: fef43023 sd a5,-32(s0) + 80009638: fe843783 ld a5,-24(s0) + 8000963c: 0007c783 lbu a5,0(a5) + 80009640: 00078713 mv a4,a5 + 80009644: 02000793 li a5,32 + 80009648: 00f70c63 beq a4,a5,80009660 + 8000964c: fe843783 ld a5,-24(s0) + 80009650: 0007c783 lbu a5,0(a5) + 80009654: 00078713 mv a4,a5 + 80009658: 00900793 li a5,9 + 8000965c: 00f71863 bne a4,a5,8000966c + 80009660: fe043703 ld a4,-32(s0) + 80009664: fc043783 ld a5,-64(s0) + 80009668: faf768e3 bltu a4,a5,80009618 + 8000966c: fd843703 ld a4,-40(s0) + 80009670: 00900793 li a5,9 + 80009674: 06e7f263 bgeu a5,a4,800096d8 + 80009678: 0000d517 auipc a0,0xd + 8000967c: 65050513 addi a0,a0,1616 # 80016cc8 + 80009680: b9dfe0ef jal ra,8000821c + 80009684: fc043823 sd zero,-48(s0) + 80009688: 0340006f j 800096bc + 8000968c: fd043783 ld a5,-48(s0) + 80009690: 00379793 slli a5,a5,0x3 + 80009694: fb843703 ld a4,-72(s0) + 80009698: 00f707b3 add a5,a4,a5 + 8000969c: 0007b783 ld a5,0(a5) + 800096a0: 00078593 mv a1,a5 + 800096a4: 0000d517 auipc a0,0xd + 800096a8: 64450513 addi a0,a0,1604 # 80016ce8 + 800096ac: b71fe0ef jal ra,8000821c + 800096b0: fd043783 ld a5,-48(s0) + 800096b4: 00178793 addi a5,a5,1 + 800096b8: fcf43823 sd a5,-48(s0) + 800096bc: fd043703 ld a4,-48(s0) + 800096c0: fd843783 ld a5,-40(s0) + 800096c4: fcf764e3 bltu a4,a5,8000968c + 800096c8: 0000d517 auipc a0,0xd + 800096cc: 5f850513 addi a0,a0,1528 # 80016cc0 + 800096d0: b4dfe0ef jal ra,8000821c + 800096d4: 1b40006f j 80009888 + 800096d8: fe043703 ld a4,-32(s0) + 800096dc: fc043783 ld a5,-64(s0) + 800096e0: 18f77a63 bgeu a4,a5,80009874 + 800096e4: fe843783 ld a5,-24(s0) + 800096e8: 0007c783 lbu a5,0(a5) + 800096ec: 00078713 mv a4,a5 + 800096f0: 02200793 li a5,34 + 800096f4: 0ef71863 bne a4,a5,800097e4 + 800096f8: fe843783 ld a5,-24(s0) + 800096fc: 00178793 addi a5,a5,1 + 80009700: fef43423 sd a5,-24(s0) + 80009704: fe043783 ld a5,-32(s0) + 80009708: 00178793 addi a5,a5,1 + 8000970c: fef43023 sd a5,-32(s0) + 80009710: fd843783 ld a5,-40(s0) + 80009714: 00379793 slli a5,a5,0x3 + 80009718: fb843703 ld a4,-72(s0) + 8000971c: 00f707b3 add a5,a4,a5 + 80009720: fe843703 ld a4,-24(s0) + 80009724: 00e7b023 sd a4,0(a5) + 80009728: fd843783 ld a5,-40(s0) + 8000972c: 00178793 addi a5,a5,1 + 80009730: fcf43c23 sd a5,-40(s0) + 80009734: 0600006f j 80009794 + 80009738: fe843783 ld a5,-24(s0) + 8000973c: 0007c783 lbu a5,0(a5) + 80009740: 00078713 mv a4,a5 + 80009744: 05c00793 li a5,92 + 80009748: 02f71a63 bne a4,a5,8000977c + 8000974c: fe843783 ld a5,-24(s0) + 80009750: 00178793 addi a5,a5,1 + 80009754: 0007c783 lbu a5,0(a5) + 80009758: 00078713 mv a4,a5 + 8000975c: 02200793 li a5,34 + 80009760: 00f71e63 bne a4,a5,8000977c + 80009764: fe843783 ld a5,-24(s0) + 80009768: 00178793 addi a5,a5,1 + 8000976c: fef43423 sd a5,-24(s0) + 80009770: fe043783 ld a5,-32(s0) + 80009774: 00178793 addi a5,a5,1 + 80009778: fef43023 sd a5,-32(s0) + 8000977c: fe843783 ld a5,-24(s0) + 80009780: 00178793 addi a5,a5,1 + 80009784: fef43423 sd a5,-24(s0) + 80009788: fe043783 ld a5,-32(s0) + 8000978c: 00178793 addi a5,a5,1 + 80009790: fef43023 sd a5,-32(s0) + 80009794: fe843783 ld a5,-24(s0) + 80009798: 0007c783 lbu a5,0(a5) + 8000979c: 00078713 mv a4,a5 + 800097a0: 02200793 li a5,34 + 800097a4: 00f70863 beq a4,a5,800097b4 + 800097a8: fe043703 ld a4,-32(s0) + 800097ac: fc043783 ld a5,-64(s0) + 800097b0: f8f764e3 bltu a4,a5,80009738 + 800097b4: fe043703 ld a4,-32(s0) + 800097b8: fc043783 ld a5,-64(s0) + 800097bc: 0cf77063 bgeu a4,a5,8000987c + 800097c0: fe843783 ld a5,-24(s0) + 800097c4: 00078023 sb zero,0(a5) + 800097c8: fe843783 ld a5,-24(s0) + 800097cc: 00178793 addi a5,a5,1 + 800097d0: fef43423 sd a5,-24(s0) + 800097d4: fe043783 ld a5,-32(s0) + 800097d8: 00178793 addi a5,a5,1 + 800097dc: fef43023 sd a5,-32(s0) + 800097e0: 0840006f j 80009864 + 800097e4: fd843783 ld a5,-40(s0) + 800097e8: 00379793 slli a5,a5,0x3 + 800097ec: fb843703 ld a4,-72(s0) + 800097f0: 00f707b3 add a5,a4,a5 + 800097f4: fe843703 ld a4,-24(s0) + 800097f8: 00e7b023 sd a4,0(a5) + 800097fc: fd843783 ld a5,-40(s0) + 80009800: 00178793 addi a5,a5,1 + 80009804: fcf43c23 sd a5,-40(s0) + 80009808: 01c0006f j 80009824 + 8000980c: fe843783 ld a5,-24(s0) + 80009810: 00178793 addi a5,a5,1 + 80009814: fef43423 sd a5,-24(s0) + 80009818: fe043783 ld a5,-32(s0) + 8000981c: 00178793 addi a5,a5,1 + 80009820: fef43023 sd a5,-32(s0) + 80009824: fe843783 ld a5,-24(s0) + 80009828: 0007c783 lbu a5,0(a5) + 8000982c: 00078713 mv a4,a5 + 80009830: 02000793 li a5,32 + 80009834: 02f70263 beq a4,a5,80009858 + 80009838: fe843783 ld a5,-24(s0) + 8000983c: 0007c783 lbu a5,0(a5) + 80009840: 00078713 mv a4,a5 + 80009844: 00900793 li a5,9 + 80009848: 00f70863 beq a4,a5,80009858 + 8000984c: fe043703 ld a4,-32(s0) + 80009850: fc043783 ld a5,-64(s0) + 80009854: faf76ce3 bltu a4,a5,8000980c + 80009858: fe043703 ld a4,-32(s0) + 8000985c: fc043783 ld a5,-64(s0) + 80009860: 02f77263 bgeu a4,a5,80009884 + 80009864: fe043703 ld a4,-32(s0) + 80009868: fc043783 ld a5,-64(s0) + 8000986c: dcf766e3 bltu a4,a5,80009638 + 80009870: 0180006f j 80009888 + 80009874: 00000013 nop + 80009878: 0100006f j 80009888 + 8000987c: 00000013 nop + 80009880: 0080006f j 80009888 + 80009884: 00000013 nop + 80009888: fd843783 ld a5,-40(s0) + 8000988c: 0007879b sext.w a5,a5 + 80009890: 00078513 mv a0,a5 + 80009894: 04813083 ld ra,72(sp) + 80009898: 04013403 ld s0,64(sp) + 8000989c: 05010113 addi sp,sp,80 + 800098a0: 00008067 ret + +00000000800098a4 : + 800098a4: fd010113 addi sp,sp,-48 + 800098a8: 02113423 sd ra,40(sp) + 800098ac: 02813023 sd s0,32(sp) + 800098b0: 03010413 addi s0,sp,48 + 800098b4: fca43c23 sd a0,-40(s0) + 800098b8: 00058793 mv a5,a1 + 800098bc: fcf42a23 sw a5,-44(s0) + 800098c0: fe043023 sd zero,-32(s0) + 800098c4: 00019797 auipc a5,0x19 + 800098c8: 80478793 addi a5,a5,-2044 # 800220c8 <_syscall_table_begin> + 800098cc: 0007b783 ld a5,0(a5) + 800098d0: fef43423 sd a5,-24(s0) + 800098d4: 0900006f j 80009964 + 800098d8: fe843783 ld a5,-24(s0) + 800098dc: 0007b783 ld a5,0(a5) + 800098e0: 00600613 li a2,6 + 800098e4: 0000d597 auipc a1,0xd + 800098e8: 3c458593 addi a1,a1,964 # 80016ca8 + 800098ec: 00078513 mv a0,a5 + 800098f0: 8e4f70ef jal ra,800009d4 + 800098f4: 00050793 mv a5,a0 + 800098f8: 04079e63 bnez a5,80009954 + 800098fc: fe843783 ld a5,-24(s0) + 80009900: 0007b783 ld a5,0(a5) + 80009904: 00678793 addi a5,a5,6 + 80009908: fd442703 lw a4,-44(s0) + 8000990c: 00070613 mv a2,a4 + 80009910: fd843583 ld a1,-40(s0) + 80009914: 00078513 mv a0,a5 + 80009918: 8bcf70ef jal ra,800009d4 + 8000991c: 00050793 mv a5,a0 + 80009920: 02079c63 bnez a5,80009958 + 80009924: fe843783 ld a5,-24(s0) + 80009928: 0007b783 ld a5,0(a5) + 8000992c: fd442703 lw a4,-44(s0) + 80009930: 0067071b addiw a4,a4,6 + 80009934: 0007071b sext.w a4,a4 + 80009938: 00e787b3 add a5,a5,a4 + 8000993c: 0007c783 lbu a5,0(a5) + 80009940: 00079c63 bnez a5,80009958 + 80009944: fe843783 ld a5,-24(s0) + 80009948: 0107b783 ld a5,16(a5) + 8000994c: fef43023 sd a5,-32(s0) + 80009950: 0280006f j 80009978 + 80009954: 00000013 nop + 80009958: fe843783 ld a5,-24(s0) + 8000995c: 01878793 addi a5,a5,24 + 80009960: fef43423 sd a5,-24(s0) + 80009964: 00018797 auipc a5,0x18 + 80009968: 76c78793 addi a5,a5,1900 # 800220d0 <_syscall_table_end> + 8000996c: 0007b783 ld a5,0(a5) + 80009970: fe843703 ld a4,-24(s0) + 80009974: f6f762e3 bltu a4,a5,800098d8 + 80009978: fe043783 ld a5,-32(s0) + 8000997c: 00078513 mv a0,a5 + 80009980: 02813083 ld ra,40(sp) + 80009984: 02013403 ld s0,32(sp) + 80009988: 03010113 addi sp,sp,48 + 8000998c: 00008067 ret + +0000000080009990 <_msh_exec_cmd>: + 80009990: f6010113 addi sp,sp,-160 + 80009994: 08113c23 sd ra,152(sp) + 80009998: 08813823 sd s0,144(sp) + 8000999c: 0a010413 addi s0,sp,160 + 800099a0: f6a43c23 sd a0,-136(s0) + 800099a4: f6b43823 sd a1,-144(s0) + 800099a8: f6c43423 sd a2,-152(s0) + 800099ac: fe043423 sd zero,-24(s0) + 800099b0: f7843783 ld a5,-136(s0) + 800099b4: 00079e63 bnez a5,800099d0 <_msh_exec_cmd+0x40> + 800099b8: 13600613 li a2,310 + 800099bc: 0000f597 auipc a1,0xf + 800099c0: 02c58593 addi a1,a1,44 # 800189e8 <__FUNCTION__.4522> + 800099c4: 0000d517 auipc a0,0xd + 800099c8: 32c50513 addi a0,a0,812 # 80016cf0 + 800099cc: ab1fe0ef jal ra,8000847c + 800099d0: f6843783 ld a5,-152(s0) + 800099d4: 02079663 bnez a5,80009a00 <_msh_exec_cmd+0x70> + 800099d8: 13700613 li a2,311 + 800099dc: 0000f597 auipc a1,0xf + 800099e0: 00c58593 addi a1,a1,12 # 800189e8 <__FUNCTION__.4522> + 800099e4: 0000d517 auipc a0,0xd + 800099e8: 31450513 addi a0,a0,788 # 80016cf8 + 800099ec: a91fe0ef jal ra,8000847c + 800099f0: 0100006f j 80009a00 <_msh_exec_cmd+0x70> + 800099f4: fe843783 ld a5,-24(s0) + 800099f8: 00178793 addi a5,a5,1 + 800099fc: fef43423 sd a5,-24(s0) + 80009a00: f7843703 ld a4,-136(s0) + 80009a04: fe843783 ld a5,-24(s0) + 80009a08: 00f707b3 add a5,a4,a5 + 80009a0c: 0007c783 lbu a5,0(a5) + 80009a10: 00078713 mv a4,a5 + 80009a14: 02000793 li a5,32 + 80009a18: 02f70663 beq a4,a5,80009a44 <_msh_exec_cmd+0xb4> + 80009a1c: f7843703 ld a4,-136(s0) + 80009a20: fe843783 ld a5,-24(s0) + 80009a24: 00f707b3 add a5,a4,a5 + 80009a28: 0007c783 lbu a5,0(a5) + 80009a2c: 00078713 mv a4,a5 + 80009a30: 00900793 li a5,9 + 80009a34: 00f70863 beq a4,a5,80009a44 <_msh_exec_cmd+0xb4> + 80009a38: fe843703 ld a4,-24(s0) + 80009a3c: f7043783 ld a5,-144(s0) + 80009a40: faf76ae3 bltu a4,a5,800099f4 <_msh_exec_cmd+0x64> + 80009a44: fe843783 ld a5,-24(s0) + 80009a48: 00079663 bnez a5,80009a54 <_msh_exec_cmd+0xc4> + 80009a4c: fff00793 li a5,-1 + 80009a50: 09c0006f j 80009aec <_msh_exec_cmd+0x15c> + 80009a54: fe843783 ld a5,-24(s0) + 80009a58: 0007879b sext.w a5,a5 + 80009a5c: 00078593 mv a1,a5 + 80009a60: f7843503 ld a0,-136(s0) + 80009a64: e41ff0ef jal ra,800098a4 + 80009a68: fea43023 sd a0,-32(s0) + 80009a6c: fe043783 ld a5,-32(s0) + 80009a70: 00079663 bnez a5,80009a7c <_msh_exec_cmd+0xec> + 80009a74: fff00793 li a5,-1 + 80009a78: 0740006f j 80009aec <_msh_exec_cmd+0x15c> + 80009a7c: f8840793 addi a5,s0,-120 + 80009a80: 05000613 li a2,80 + 80009a84: 00000593 li a1,0 + 80009a88: 00078513 mv a0,a5 + 80009a8c: f8df60ef jal ra,80000a18 + 80009a90: f8840793 addi a5,s0,-120 + 80009a94: 00078613 mv a2,a5 + 80009a98: f7043583 ld a1,-144(s0) + 80009a9c: f7843503 ld a0,-136(s0) + 80009aa0: b49ff0ef jal ra,800095e8 + 80009aa4: 00050793 mv a5,a0 + 80009aa8: fcf42e23 sw a5,-36(s0) + 80009aac: fdc42783 lw a5,-36(s0) + 80009ab0: 0007879b sext.w a5,a5 + 80009ab4: 00079663 bnez a5,80009ac0 <_msh_exec_cmd+0x130> + 80009ab8: fff00793 li a5,-1 + 80009abc: 0300006f j 80009aec <_msh_exec_cmd+0x15c> + 80009ac0: f8840713 addi a4,s0,-120 + 80009ac4: fdc42783 lw a5,-36(s0) + 80009ac8: fe043683 ld a3,-32(s0) + 80009acc: 00070593 mv a1,a4 + 80009ad0: 00078513 mv a0,a5 + 80009ad4: 000680e7 jalr a3 + 80009ad8: 00050793 mv a5,a0 + 80009adc: 00078713 mv a4,a5 + 80009ae0: f6843783 ld a5,-152(s0) + 80009ae4: 00e7a023 sw a4,0(a5) + 80009ae8: 00000793 li a5,0 + 80009aec: 00078513 mv a0,a5 + 80009af0: 09813083 ld ra,152(sp) + 80009af4: 09013403 ld s0,144(sp) + 80009af8: 0a010113 addi sp,sp,160 + 80009afc: 00008067 ret + +0000000080009b00 : + 80009b00: fd010113 addi sp,sp,-48 + 80009b04: 02113423 sd ra,40(sp) + 80009b08: 02813023 sd s0,32(sp) + 80009b0c: 03010413 addi s0,sp,48 + 80009b10: fca43c23 sd a0,-40(s0) + 80009b14: fcb43823 sd a1,-48(s0) + 80009b18: 01c0006f j 80009b34 + 80009b1c: fd843783 ld a5,-40(s0) + 80009b20: 00178793 addi a5,a5,1 + 80009b24: fcf43c23 sd a5,-40(s0) + 80009b28: fd043783 ld a5,-48(s0) + 80009b2c: fff78793 addi a5,a5,-1 + 80009b30: fcf43823 sd a5,-48(s0) + 80009b34: fd043783 ld a5,-48(s0) + 80009b38: 02078663 beqz a5,80009b64 + 80009b3c: fd843783 ld a5,-40(s0) + 80009b40: 0007c783 lbu a5,0(a5) + 80009b44: 00078713 mv a4,a5 + 80009b48: 02000793 li a5,32 + 80009b4c: fcf708e3 beq a4,a5,80009b1c + 80009b50: fd843783 ld a5,-40(s0) + 80009b54: 0007c783 lbu a5,0(a5) + 80009b58: 00078713 mv a4,a5 + 80009b5c: 00900793 li a5,9 + 80009b60: faf70ee3 beq a4,a5,80009b1c + 80009b64: fd043783 ld a5,-48(s0) + 80009b68: 00079663 bnez a5,80009b74 + 80009b6c: 00000793 li a5,0 + 80009b70: 0a00006f j 80009c10 + 80009b74: fe440793 addi a5,s0,-28 + 80009b78: 00078613 mv a2,a5 + 80009b7c: fd043583 ld a1,-48(s0) + 80009b80: fd843503 ld a0,-40(s0) + 80009b84: e0dff0ef jal ra,80009990 <_msh_exec_cmd> + 80009b88: 00050793 mv a5,a0 + 80009b8c: 00079663 bnez a5,80009b98 + 80009b90: fe442783 lw a5,-28(s0) + 80009b94: 07c0006f j 80009c10 + 80009b98: fd043783 ld a5,-48(s0) + 80009b9c: 0007879b sext.w a5,a5 + 80009ba0: 00078593 mv a1,a5 + 80009ba4: fd843503 ld a0,-40(s0) + 80009ba8: 405010ef jal ra,8000b7ac + 80009bac: 00050793 mv a5,a0 + 80009bb0: 00079663 bnez a5,80009bbc + 80009bb4: 00000793 li a5,0 + 80009bb8: 0580006f j 80009c10 + 80009bbc: fd843783 ld a5,-40(s0) + 80009bc0: fef43423 sd a5,-24(s0) + 80009bc4: 0100006f j 80009bd4 + 80009bc8: fe843783 ld a5,-24(s0) + 80009bcc: 00178793 addi a5,a5,1 + 80009bd0: fef43423 sd a5,-24(s0) + 80009bd4: fe843783 ld a5,-24(s0) + 80009bd8: 0007c783 lbu a5,0(a5) + 80009bdc: 00078713 mv a4,a5 + 80009be0: 02000793 li a5,32 + 80009be4: 00f70863 beq a4,a5,80009bf4 + 80009be8: fe843783 ld a5,-24(s0) + 80009bec: 0007c783 lbu a5,0(a5) + 80009bf0: fc079ce3 bnez a5,80009bc8 + 80009bf4: fe843783 ld a5,-24(s0) + 80009bf8: 00078023 sb zero,0(a5) + 80009bfc: fd843583 ld a1,-40(s0) + 80009c00: 0000d517 auipc a0,0xd + 80009c04: 10050513 addi a0,a0,256 # 80016d00 + 80009c08: e14fe0ef jal ra,8000821c + 80009c0c: fff00793 li a5,-1 + 80009c10: 00078513 mv a0,a5 + 80009c14: 02813083 ld ra,40(sp) + 80009c18: 02013403 ld s0,32(sp) + 80009c1c: 03010113 addi sp,sp,48 + 80009c20: 00008067 ret + +0000000080009c24 : + 80009c24: fd010113 addi sp,sp,-48 + 80009c28: 02813423 sd s0,40(sp) + 80009c2c: 03010413 addi s0,sp,48 + 80009c30: fca43c23 sd a0,-40(s0) + 80009c34: fcb43823 sd a1,-48(s0) + 80009c38: fd843783 ld a5,-40(s0) + 80009c3c: fef43423 sd a5,-24(s0) + 80009c40: 01c0006f j 80009c5c + 80009c44: fe843783 ld a5,-24(s0) + 80009c48: 00178793 addi a5,a5,1 + 80009c4c: fef43423 sd a5,-24(s0) + 80009c50: fd043783 ld a5,-48(s0) + 80009c54: 00178793 addi a5,a5,1 + 80009c58: fcf43823 sd a5,-48(s0) + 80009c5c: fe843783 ld a5,-24(s0) + 80009c60: 0007c783 lbu a5,0(a5) + 80009c64: 02078263 beqz a5,80009c88 + 80009c68: fd043783 ld a5,-48(s0) + 80009c6c: 0007c783 lbu a5,0(a5) + 80009c70: 00078c63 beqz a5,80009c88 + 80009c74: fe843783 ld a5,-24(s0) + 80009c78: 0007c703 lbu a4,0(a5) + 80009c7c: fd043783 ld a5,-48(s0) + 80009c80: 0007c783 lbu a5,0(a5) + 80009c84: fcf700e3 beq a4,a5,80009c44 + 80009c88: fe843703 ld a4,-24(s0) + 80009c8c: fd843783 ld a5,-40(s0) + 80009c90: 40f707b3 sub a5,a4,a5 + 80009c94: 0007879b sext.w a5,a5 + 80009c98: 00078513 mv a0,a5 + 80009c9c: 02813403 ld s0,40(sp) + 80009ca0: 03010113 addi sp,sp,48 + 80009ca4: 00008067 ret + +0000000080009ca8 : + 80009ca8: f9010113 addi sp,sp,-112 + 80009cac: 06113423 sd ra,104(sp) + 80009cb0: 06813023 sd s0,96(sp) + 80009cb4: 04913c23 sd s1,88(sp) + 80009cb8: 07010413 addi s0,sp,112 + 80009cbc: f8a43c23 sd a0,-104(s0) + 80009cc0: fc043c23 sd zero,-40(s0) + 80009cc4: fa043c23 sd zero,-72(s0) + 80009cc8: f9843783 ld a5,-104(s0) + 80009ccc: 32078a63 beqz a5,8000a000 + 80009cd0: 10000513 li a0,256 + 80009cd4: 955fa0ef jal ra,80004628 + 80009cd8: faa43823 sd a0,-80(s0) + 80009cdc: fb043783 ld a5,-80(s0) + 80009ce0: 32078463 beqz a5,8000a008 + 80009ce4: f9843783 ld a5,-104(s0) + 80009ce8: 0007c783 lbu a5,0(a5) + 80009cec: 00078713 mv a4,a5 + 80009cf0: 02f00793 li a5,47 + 80009cf4: 04f70663 beq a4,a5,80009d40 + 80009cf8: 10000593 li a1,256 + 80009cfc: fb043503 ld a0,-80(s0) + 80009d00: 46c080ef jal ra,8001216c + 80009d04: fb043503 ld a0,-80(s0) + 80009d08: cd4fd0ef jal ra,800071dc + 80009d0c: 00050793 mv a5,a0 + 80009d10: fff78793 addi a5,a5,-1 + 80009d14: fb043703 ld a4,-80(s0) + 80009d18: 00f707b3 add a5,a4,a5 + 80009d1c: 0007c783 lbu a5,0(a5) + 80009d20: 00078713 mv a4,a5 + 80009d24: 02f00793 li a5,47 + 80009d28: 02f70063 beq a4,a5,80009d48 + 80009d2c: 0000d597 auipc a1,0xd + 80009d30: fec58593 addi a1,a1,-20 # 80016d18 + 80009d34: fb043503 ld a0,-80(s0) + 80009d38: c0df60ef jal ra,80000944 + 80009d3c: 00c0006f j 80009d48 + 80009d40: fb043783 ld a5,-80(s0) + 80009d44: 00078023 sb zero,0(a5) + 80009d48: fc043423 sd zero,-56(s0) + 80009d4c: f9843783 ld a5,-104(s0) + 80009d50: fcf43823 sd a5,-48(s0) + 80009d54: fd043783 ld a5,-48(s0) + 80009d58: 0007c783 lbu a5,0(a5) + 80009d5c: 00078713 mv a4,a5 + 80009d60: 02f00793 li a5,47 + 80009d64: 00f71863 bne a4,a5,80009d74 + 80009d68: fd043783 ld a5,-48(s0) + 80009d6c: 00178793 addi a5,a5,1 + 80009d70: fcf43423 sd a5,-56(s0) + 80009d74: fd043783 ld a5,-48(s0) + 80009d78: 0007c783 lbu a5,0(a5) + 80009d7c: 00078a63 beqz a5,80009d90 + 80009d80: fd043783 ld a5,-48(s0) + 80009d84: 00178793 addi a5,a5,1 + 80009d88: fcf43823 sd a5,-48(s0) + 80009d8c: fc9ff06f j 80009d54 + 80009d90: 00000013 nop + 80009d94: fc843783 ld a5,-56(s0) + 80009d98: 00079663 bnez a5,80009da4 + 80009d9c: f9843783 ld a5,-104(s0) + 80009da0: fcf43423 sd a5,-56(s0) + 80009da4: fc843783 ld a5,-56(s0) + 80009da8: 08078c63 beqz a5,80009e40 + 80009dac: fc843783 ld a5,-56(s0) + 80009db0: faf43423 sd a5,-88(s0) + 80009db4: fb043783 ld a5,-80(s0) + 80009db8: fcf43823 sd a5,-48(s0) + 80009dbc: 0100006f j 80009dcc + 80009dc0: fd043783 ld a5,-48(s0) + 80009dc4: 00178793 addi a5,a5,1 + 80009dc8: fcf43823 sd a5,-48(s0) + 80009dcc: fd043783 ld a5,-48(s0) + 80009dd0: 0007c783 lbu a5,0(a5) + 80009dd4: fe0796e3 bnez a5,80009dc0 + 80009dd8: f9843783 ld a5,-104(s0) + 80009ddc: fcf43423 sd a5,-56(s0) + 80009de0: 0240006f j 80009e04 + 80009de4: fc843703 ld a4,-56(s0) + 80009de8: 00170793 addi a5,a4,1 + 80009dec: fcf43423 sd a5,-56(s0) + 80009df0: fd043783 ld a5,-48(s0) + 80009df4: 00178693 addi a3,a5,1 + 80009df8: fcd43823 sd a3,-48(s0) + 80009dfc: 00074703 lbu a4,0(a4) + 80009e00: 00e78023 sb a4,0(a5) + 80009e04: fc843703 ld a4,-56(s0) + 80009e08: fa843783 ld a5,-88(s0) + 80009e0c: fcf71ce3 bne a4,a5,80009de4 + 80009e10: fd043783 ld a5,-48(s0) + 80009e14: 00078023 sb zero,0(a5) + 80009e18: fb043503 ld a0,-80(s0) + 80009e1c: 705070ef jal ra,80011d20 + 80009e20: fca43c23 sd a0,-40(s0) + 80009e24: fd843783 ld a5,-40(s0) + 80009e28: 00079863 bnez a5,80009e38 + 80009e2c: fb043503 ld a0,-80(s0) + 80009e30: 864fb0ef jal ra,80004e94 + 80009e34: 1d80006f j 8000a00c + 80009e38: fa843783 ld a5,-88(s0) + 80009e3c: fcf43423 sd a5,-56(s0) + 80009e40: fc843783 ld a5,-56(s0) + 80009e44: 0007c783 lbu a5,0(a5) + 80009e48: 02079a63 bnez a5,80009e7c + 80009e4c: fd843503 ld a0,-40(s0) + 80009e50: 7d1070ef jal ra,80011e20 + 80009e54: faa43c23 sd a0,-72(s0) + 80009e58: fb843783 ld a5,-72(s0) + 80009e5c: 18078663 beqz a5,80009fe8 + 80009e60: fb843783 ld a5,-72(s0) + 80009e64: 00478793 addi a5,a5,4 + 80009e68: 00078593 mv a1,a5 + 80009e6c: 0000d517 auipc a0,0xd + 80009e70: eb450513 addi a0,a0,-332 # 80016d20 + 80009e74: ba8fe0ef jal ra,8000821c + 80009e78: fd5ff06f j 80009e4c + 80009e7c: fc043023 sd zero,-64(s0) + 80009e80: fd843503 ld a0,-40(s0) + 80009e84: 79d070ef jal ra,80011e20 + 80009e88: faa43c23 sd a0,-72(s0) + 80009e8c: fb843783 ld a5,-72(s0) + 80009e90: 08078a63 beqz a5,80009f24 + 80009e94: fb843783 ld a5,-72(s0) + 80009e98: 00478493 addi s1,a5,4 + 80009e9c: fc843503 ld a0,-56(s0) + 80009ea0: b3cfd0ef jal ra,800071dc + 80009ea4: 00050793 mv a5,a0 + 80009ea8: 00078613 mv a2,a5 + 80009eac: 00048593 mv a1,s1 + 80009eb0: fc843503 ld a0,-56(s0) + 80009eb4: b21f60ef jal ra,800009d4 + 80009eb8: 00050793 mv a5,a0 + 80009ebc: fc0792e3 bnez a5,80009e80 + 80009ec0: fc043783 ld a5,-64(s0) + 80009ec4: 02079663 bnez a5,80009ef0 + 80009ec8: fb843783 ld a5,-72(s0) + 80009ecc: 00478793 addi a5,a5,4 + 80009ed0: 00078513 mv a0,a5 + 80009ed4: b08fd0ef jal ra,800071dc + 80009ed8: fca43023 sd a0,-64(s0) + 80009edc: fb843783 ld a5,-72(s0) + 80009ee0: 00478793 addi a5,a5,4 + 80009ee4: 00078593 mv a1,a5 + 80009ee8: fb043503 ld a0,-80(s0) + 80009eec: 99df60ef jal ra,80000888 + 80009ef0: fb843783 ld a5,-72(s0) + 80009ef4: 00478793 addi a5,a5,4 + 80009ef8: fb043583 ld a1,-80(s0) + 80009efc: 00078513 mv a0,a5 + 80009f00: d25ff0ef jal ra,80009c24 + 80009f04: 00050793 mv a5,a0 + 80009f08: faf43023 sd a5,-96(s0) + 80009f0c: fa043703 ld a4,-96(s0) + 80009f10: fc043783 ld a5,-64(s0) + 80009f14: f6f776e3 bgeu a4,a5,80009e80 + 80009f18: fa043783 ld a5,-96(s0) + 80009f1c: fcf43023 sd a5,-64(s0) + 80009f20: f61ff06f j 80009e80 + 80009f24: 00000013 nop + 80009f28: fc043783 ld a5,-64(s0) + 80009f2c: 0c078063 beqz a5,80009fec + 80009f30: fb043503 ld a0,-80(s0) + 80009f34: aa8fd0ef jal ra,800071dc + 80009f38: 00050713 mv a4,a0 + 80009f3c: fc043783 ld a5,-64(s0) + 80009f40: 06e7f663 bgeu a5,a4,80009fac + 80009f44: fd843503 ld a0,-40(s0) + 80009f48: 00c080ef jal ra,80011f54 + 80009f4c: fd843503 ld a0,-40(s0) + 80009f50: 6d1070ef jal ra,80011e20 + 80009f54: faa43c23 sd a0,-72(s0) + 80009f58: fb843783 ld a5,-72(s0) + 80009f5c: 04078663 beqz a5,80009fa8 + 80009f60: fb843783 ld a5,-72(s0) + 80009f64: 00478493 addi s1,a5,4 + 80009f68: fc843503 ld a0,-56(s0) + 80009f6c: a70fd0ef jal ra,800071dc + 80009f70: 00050793 mv a5,a0 + 80009f74: 00078613 mv a2,a5 + 80009f78: 00048593 mv a1,s1 + 80009f7c: fc843503 ld a0,-56(s0) + 80009f80: a55f60ef jal ra,800009d4 + 80009f84: 00050793 mv a5,a0 + 80009f88: fc0792e3 bnez a5,80009f4c + 80009f8c: fb843783 ld a5,-72(s0) + 80009f90: 00478793 addi a5,a5,4 + 80009f94: 00078593 mv a1,a5 + 80009f98: 0000d517 auipc a0,0xd + 80009f9c: d8850513 addi a0,a0,-632 # 80016d20 + 80009fa0: a7cfe0ef jal ra,8000821c + 80009fa4: fa9ff06f j 80009f4c + 80009fa8: 00000013 nop + 80009fac: fc843703 ld a4,-56(s0) + 80009fb0: f9843783 ld a5,-104(s0) + 80009fb4: 40f707b3 sub a5,a4,a5 + 80009fb8: faf43023 sd a5,-96(s0) + 80009fbc: fc043603 ld a2,-64(s0) + 80009fc0: fb043583 ld a1,-80(s0) + 80009fc4: fc843503 ld a0,-56(s0) + 80009fc8: a9df60ef jal ra,80000a64 + 80009fcc: fa043703 ld a4,-96(s0) + 80009fd0: fc043783 ld a5,-64(s0) + 80009fd4: 00f707b3 add a5,a4,a5 + 80009fd8: f9843703 ld a4,-104(s0) + 80009fdc: 00f707b3 add a5,a4,a5 + 80009fe0: 00078023 sb zero,0(a5) + 80009fe4: 0080006f j 80009fec + 80009fe8: 00000013 nop + 80009fec: fd843503 ld a0,-40(s0) + 80009ff0: 7e5070ef jal ra,80011fd4 + 80009ff4: fb043503 ld a0,-80(s0) + 80009ff8: e9dfa0ef jal ra,80004e94 + 80009ffc: 0100006f j 8000a00c + 8000a000: 00000013 nop + 8000a004: 0080006f j 8000a00c + 8000a008: 00000013 nop + 8000a00c: 06813083 ld ra,104(sp) + 8000a010: 06013403 ld s0,96(sp) + 8000a014: 05813483 ld s1,88(sp) + 8000a018: 07010113 addi sp,sp,112 + 8000a01c: 00008067 ret + +000000008000a020 : + 8000a020: fb010113 addi sp,sp,-80 + 8000a024: 04113423 sd ra,72(sp) + 8000a028: 04813023 sd s0,64(sp) + 8000a02c: 05010413 addi s0,sp,80 + 8000a030: faa43c23 sd a0,-72(s0) + 8000a034: fe042623 sw zero,-20(s0) + 8000a038: fe043023 sd zero,-32(s0) + 8000a03c: fb843783 ld a5,-72(s0) + 8000a040: 0007c783 lbu a5,0(a5) + 8000a044: 00079a63 bnez a5,8000a058 + 8000a048: 00000593 li a1,0 + 8000a04c: 00000513 li a0,0 + 8000a050: c54ff0ef jal ra,800094a4 + 8000a054: 1780006f j 8000a1cc + 8000a058: fb843503 ld a0,-72(s0) + 8000a05c: 980fd0ef jal ra,800071dc + 8000a060: 00050713 mv a4,a0 + 8000a064: fb843783 ld a5,-72(s0) + 8000a068: 00e787b3 add a5,a5,a4 + 8000a06c: fcf43823 sd a5,-48(s0) + 8000a070: 0380006f j 8000a0a8 + 8000a074: fd043783 ld a5,-48(s0) + 8000a078: 0007c783 lbu a5,0(a5) + 8000a07c: 00078713 mv a4,a5 + 8000a080: 02000793 li a5,32 + 8000a084: 00f71c63 bne a4,a5,8000a09c + 8000a088: fd043783 ld a5,-48(s0) + 8000a08c: 00178793 addi a5,a5,1 + 8000a090: 00078513 mv a0,a5 + 8000a094: c15ff0ef jal ra,80009ca8 + 8000a098: 01c0006f j 8000a0b4 + 8000a09c: fd043783 ld a5,-48(s0) + 8000a0a0: fff78793 addi a5,a5,-1 + 8000a0a4: fcf43823 sd a5,-48(s0) + 8000a0a8: fd043703 ld a4,-48(s0) + 8000a0ac: fb843783 ld a5,-72(s0) + 8000a0b0: fcf712e3 bne a4,a5,8000a074 + 8000a0b4: 00018797 auipc a5,0x18 + 8000a0b8: 01478793 addi a5,a5,20 # 800220c8 <_syscall_table_begin> + 8000a0bc: 0007b783 ld a5,0(a5) + 8000a0c0: fcf43c23 sd a5,-40(s0) + 8000a0c4: 0d40006f j 8000a198 + 8000a0c8: fd843783 ld a5,-40(s0) + 8000a0cc: 0007b783 ld a5,0(a5) + 8000a0d0: 00600613 li a2,6 + 8000a0d4: 0000d597 auipc a1,0xd + 8000a0d8: bd458593 addi a1,a1,-1068 # 80016ca8 + 8000a0dc: 00078513 mv a0,a5 + 8000a0e0: 8f5f60ef jal ra,800009d4 + 8000a0e4: 00050793 mv a5,a0 + 8000a0e8: 0a079063 bnez a5,8000a188 + 8000a0ec: fd843783 ld a5,-40(s0) + 8000a0f0: 0007b783 ld a5,0(a5) + 8000a0f4: 00678793 addi a5,a5,6 + 8000a0f8: fcf43423 sd a5,-56(s0) + 8000a0fc: fb843503 ld a0,-72(s0) + 8000a100: f54f60ef jal ra,80000854 + 8000a104: 00050793 mv a5,a0 + 8000a108: 00078613 mv a2,a5 + 8000a10c: fc843583 ld a1,-56(s0) + 8000a110: fb843503 ld a0,-72(s0) + 8000a114: 8c1f60ef jal ra,800009d4 + 8000a118: 00050793 mv a5,a0 + 8000a11c: 06079863 bnez a5,8000a18c + 8000a120: fec42783 lw a5,-20(s0) + 8000a124: 0007879b sext.w a5,a5 + 8000a128: 00079e63 bnez a5,8000a144 + 8000a12c: fc843783 ld a5,-56(s0) + 8000a130: fef43023 sd a5,-32(s0) + 8000a134: fe043503 ld a0,-32(s0) + 8000a138: f1cf60ef jal ra,80000854 + 8000a13c: 00050793 mv a5,a0 + 8000a140: fef42623 sw a5,-20(s0) + 8000a144: fc843583 ld a1,-56(s0) + 8000a148: fe043503 ld a0,-32(s0) + 8000a14c: ad9ff0ef jal ra,80009c24 + 8000a150: 00050793 mv a5,a0 + 8000a154: fcf42223 sw a5,-60(s0) + 8000a158: fc442703 lw a4,-60(s0) + 8000a15c: fec42783 lw a5,-20(s0) + 8000a160: 0007071b sext.w a4,a4 + 8000a164: 0007879b sext.w a5,a5 + 8000a168: 00f75663 bge a4,a5,8000a174 + 8000a16c: fc442783 lw a5,-60(s0) + 8000a170: fef42623 sw a5,-20(s0) + 8000a174: fc843583 ld a1,-56(s0) + 8000a178: 0000d517 auipc a0,0xd + 8000a17c: ba850513 addi a0,a0,-1112 # 80016d20 + 8000a180: 89cfe0ef jal ra,8000821c + 8000a184: 0080006f j 8000a18c + 8000a188: 00000013 nop + 8000a18c: fd843783 ld a5,-40(s0) + 8000a190: 01878793 addi a5,a5,24 + 8000a194: fcf43c23 sd a5,-40(s0) + 8000a198: 00018797 auipc a5,0x18 + 8000a19c: f3878793 addi a5,a5,-200 # 800220d0 <_syscall_table_end> + 8000a1a0: 0007b783 ld a5,0(a5) + 8000a1a4: fd843703 ld a4,-40(s0) + 8000a1a8: f2f760e3 bltu a4,a5,8000a0c8 + 8000a1ac: fe043783 ld a5,-32(s0) + 8000a1b0: 00078c63 beqz a5,8000a1c8 + 8000a1b4: fec42783 lw a5,-20(s0) + 8000a1b8: 00078613 mv a2,a5 + 8000a1bc: fe043583 ld a1,-32(s0) + 8000a1c0: fb843503 ld a0,-72(s0) + 8000a1c4: e5dfc0ef jal ra,80007020 + 8000a1c8: 00000013 nop + 8000a1cc: 04813083 ld ra,72(sp) + 8000a1d0: 04013403 ld s0,64(sp) + 8000a1d4: 05010113 addi sp,sp,80 + 8000a1d8: 00008067 ret + +000000008000a1dc : + 8000a1dc: fe010113 addi sp,sp,-32 + 8000a1e0: 00113c23 sd ra,24(sp) + 8000a1e4: 00813823 sd s0,16(sp) + 8000a1e8: 00913423 sd s1,8(sp) + 8000a1ec: 02010413 addi s0,sp,32 + 8000a1f0: 00018797 auipc a5,0x18 + 8000a1f4: ef878793 addi a5,a5,-264 # 800220e8 + 8000a1f8: 0007b783 ld a5,0(a5) + 8000a1fc: 0447c783 lbu a5,68(a5) + 8000a200: 0027f793 andi a5,a5,2 + 8000a204: 0ff7f793 andi a5,a5,255 + 8000a208: 00079e63 bnez a5,8000a224 + 8000a20c: 00021797 auipc a5,0x21 + 8000a210: cf478793 addi a5,a5,-780 # 8002af00 + 8000a214: 00078023 sb zero,0(a5) + 8000a218: 00021797 auipc a5,0x21 + 8000a21c: ce878793 addi a5,a5,-792 # 8002af00 + 8000a220: 0d40006f j 8000a2f4 + 8000a224: 00018797 auipc a5,0x18 + 8000a228: ecc78793 addi a5,a5,-308 # 800220f0 + 8000a22c: 0007b783 ld a5,0(a5) + 8000a230: 02078863 beqz a5,8000a260 + 8000a234: 00018797 auipc a5,0x18 + 8000a238: ebc78793 addi a5,a5,-324 # 800220f0 + 8000a23c: 0007b783 ld a5,0(a5) + 8000a240: 10000613 li a2,256 + 8000a244: 00078593 mv a1,a5 + 8000a248: 00021517 auipc a0,0x21 + 8000a24c: cb850513 addi a0,a0,-840 # 8002af00 + 8000a250: eb0f60ef jal ra,80000900 + 8000a254: 00021797 auipc a5,0x21 + 8000a258: cac78793 addi a5,a5,-852 # 8002af00 + 8000a25c: 0980006f j 8000a2f4 + 8000a260: a24ff0ef jal ra,80009484 + 8000a264: 00050793 mv a5,a0 + 8000a268: 00078e63 beqz a5,8000a284 + 8000a26c: 0000d597 auipc a1,0xd + 8000a270: abc58593 addi a1,a1,-1348 # 80016d28 + 8000a274: 00021517 auipc a0,0x21 + 8000a278: c8c50513 addi a0,a0,-884 # 8002af00 + 8000a27c: e0cf60ef jal ra,80000888 + 8000a280: 0180006f j 8000a298 + 8000a284: 0000d597 auipc a1,0xd + 8000a288: aac58593 addi a1,a1,-1364 # 80016d30 + 8000a28c: 00021517 auipc a0,0x21 + 8000a290: c7450513 addi a0,a0,-908 # 8002af00 + 8000a294: df4f60ef jal ra,80000888 + 8000a298: 00021517 auipc a0,0x21 + 8000a29c: c6850513 addi a0,a0,-920 # 8002af00 + 8000a2a0: f3dfc0ef jal ra,800071dc + 8000a2a4: 00050713 mv a4,a0 + 8000a2a8: 00021797 auipc a5,0x21 + 8000a2ac: c5878793 addi a5,a5,-936 # 8002af00 + 8000a2b0: 00f704b3 add s1,a4,a5 + 8000a2b4: 00021517 auipc a0,0x21 + 8000a2b8: c4c50513 addi a0,a0,-948 # 8002af00 + 8000a2bc: f21fc0ef jal ra,800071dc + 8000a2c0: 00050713 mv a4,a0 + 8000a2c4: 10000793 li a5,256 + 8000a2c8: 40e787b3 sub a5,a5,a4 + 8000a2cc: 00078593 mv a1,a5 + 8000a2d0: 00048513 mv a0,s1 + 8000a2d4: 699070ef jal ra,8001216c + 8000a2d8: 0000d597 auipc a1,0xd + 8000a2dc: a6058593 addi a1,a1,-1440 # 80016d38 + 8000a2e0: 00021517 auipc a0,0x21 + 8000a2e4: c2050513 addi a0,a0,-992 # 8002af00 + 8000a2e8: e5cf60ef jal ra,80000944 + 8000a2ec: 00021797 auipc a5,0x21 + 8000a2f0: c1478793 addi a5,a5,-1004 # 8002af00 + 8000a2f4: 00078513 mv a0,a5 + 8000a2f8: 01813083 ld ra,24(sp) + 8000a2fc: 01013403 ld s0,16(sp) + 8000a300: 00813483 ld s1,8(sp) + 8000a304: 02010113 addi sp,sp,32 + 8000a308: 00008067 ret + +000000008000a30c : + 8000a30c: fe010113 addi sp,sp,-32 + 8000a310: 00113c23 sd ra,24(sp) + 8000a314: 00813823 sd s0,16(sp) + 8000a318: 02010413 addi s0,sp,32 + 8000a31c: 00050793 mv a5,a0 + 8000a320: fef42623 sw a5,-20(s0) + 8000a324: 00018797 auipc a5,0x18 + 8000a328: dc478793 addi a5,a5,-572 # 800220e8 + 8000a32c: 0007b783 ld a5,0(a5) + 8000a330: 00079e63 bnez a5,8000a34c + 8000a334: 0a300613 li a2,163 + 8000a338: 0000e597 auipc a1,0xe + 8000a33c: 6c058593 addi a1,a1,1728 # 800189f8 <__FUNCTION__.4529> + 8000a340: 0000d517 auipc a0,0xd + 8000a344: a0050513 addi a0,a0,-1536 # 80016d40 + 8000a348: 934fe0ef jal ra,8000847c + 8000a34c: 00018797 auipc a5,0x18 + 8000a350: d9c78793 addi a5,a5,-612 # 800220e8 + 8000a354: 0007b783 ld a5,0(a5) + 8000a358: fec42703 lw a4,-20(s0) + 8000a35c: 00177713 andi a4,a4,1 + 8000a360: 0ff77713 andi a4,a4,255 + 8000a364: 00177713 andi a4,a4,1 + 8000a368: 0017161b slliw a2,a4,0x1 + 8000a36c: 0447c703 lbu a4,68(a5) + 8000a370: ffd77713 andi a4,a4,-3 + 8000a374: 00070693 mv a3,a4 + 8000a378: 00060713 mv a4,a2 + 8000a37c: 00e6e733 or a4,a3,a4 + 8000a380: 04e78223 sb a4,68(a5) + 8000a384: 00000013 nop + 8000a388: 01813083 ld ra,24(sp) + 8000a38c: 01013403 ld s0,16(sp) + 8000a390: 02010113 addi sp,sp,32 + 8000a394: 00008067 ret + +000000008000a398 : + 8000a398: fe010113 addi sp,sp,-32 + 8000a39c: 00113c23 sd ra,24(sp) + 8000a3a0: 00813823 sd s0,16(sp) + 8000a3a4: 02010413 addi s0,sp,32 + 8000a3a8: fe0407a3 sb zero,-17(s0) + 8000a3ac: 00018797 auipc a5,0x18 + 8000a3b0: d3c78793 addi a5,a5,-708 # 800220e8 + 8000a3b4: 0007b783 ld a5,0(a5) + 8000a3b8: 02079463 bnez a5,8000a3e0 + 8000a3bc: 0af00613 li a2,175 + 8000a3c0: 0000e597 auipc a1,0xe + 8000a3c4: 65058593 addi a1,a1,1616 # 80018a10 <__FUNCTION__.4534> + 8000a3c8: 0000d517 auipc a0,0xd + 8000a3cc: 97850513 addi a0,a0,-1672 # 80016d40 + 8000a3d0: 8acfe0ef jal ra,8000847c + 8000a3d4: 00c0006f j 8000a3e0 + 8000a3d8: 01400513 li a0,20 + 8000a3dc: b85fb0ef jal ra,80005f60 + 8000a3e0: 00018797 auipc a5,0x18 + 8000a3e4: d0878793 addi a5,a5,-760 # 800220e8 + 8000a3e8: 0007b783 ld a5,0(a5) + 8000a3ec: 2307b783 ld a5,560(a5) + 8000a3f0: fef40713 addi a4,s0,-17 + 8000a3f4: 00100693 li a3,1 + 8000a3f8: 00070613 mv a2,a4 + 8000a3fc: fff00593 li a1,-1 + 8000a400: 00078513 mv a0,a5 + 8000a404: 9a9f80ef jal ra,80002dac + 8000a408: 00050713 mv a4,a0 + 8000a40c: 00100793 li a5,1 + 8000a410: fcf714e3 bne a4,a5,8000a3d8 + 8000a414: fef44783 lbu a5,-17(s0) + 8000a418: 0007879b sext.w a5,a5 + 8000a41c: 00078513 mv a0,a5 + 8000a420: 01813083 ld ra,24(sp) + 8000a424: 01013403 ld s0,16(sp) + 8000a428: 02010113 addi sp,sp,32 + 8000a42c: 00008067 ret + +000000008000a430 : + 8000a430: fe010113 addi sp,sp,-32 + 8000a434: 00113c23 sd ra,24(sp) + 8000a438: 00813823 sd s0,16(sp) + 8000a43c: 02010413 addi s0,sp,32 + 8000a440: fea43423 sd a0,-24(s0) + 8000a444: feb43023 sd a1,-32(s0) + 8000a448: 00018797 auipc a5,0x18 + 8000a44c: ca078793 addi a5,a5,-864 # 800220e8 + 8000a450: 0007b783 ld a5,0(a5) + 8000a454: 00079e63 bnez a5,8000a470 + 8000a458: 0bf00613 li a2,191 + 8000a45c: 0000e597 auipc a1,0xe + 8000a460: 5c458593 addi a1,a1,1476 # 80018a20 <__FUNCTION__.4542> + 8000a464: 0000d517 auipc a0,0xd + 8000a468: 8dc50513 addi a0,a0,-1828 # 80016d40 + 8000a46c: 810fe0ef jal ra,8000847c + 8000a470: 00018797 auipc a5,0x18 + 8000a474: c7878793 addi a5,a5,-904 # 800220e8 + 8000a478: 0007b783 ld a5,0(a5) + 8000a47c: 00078513 mv a0,a5 + 8000a480: d65f60ef jal ra,800011e4 + 8000a484: 00000793 li a5,0 + 8000a488: 00078513 mv a0,a5 + 8000a48c: 01813083 ld ra,24(sp) + 8000a490: 01013403 ld s0,16(sp) + 8000a494: 02010113 addi sp,sp,32 + 8000a498: 00008067 ret + +000000008000a49c : + 8000a49c: fd010113 addi sp,sp,-48 + 8000a4a0: 02113423 sd ra,40(sp) + 8000a4a4: 02813023 sd s0,32(sp) + 8000a4a8: 03010413 addi s0,sp,48 + 8000a4ac: fca43c23 sd a0,-40(s0) + 8000a4b0: fe043423 sd zero,-24(s0) + 8000a4b4: 00018797 auipc a5,0x18 + 8000a4b8: c3478793 addi a5,a5,-972 # 800220e8 + 8000a4bc: 0007b783 ld a5,0(a5) + 8000a4c0: 00079e63 bnez a5,8000a4dc + 8000a4c4: 0d200613 li a2,210 + 8000a4c8: 0000e597 auipc a1,0xe + 8000a4cc: 56858593 addi a1,a1,1384 # 80018a30 <__FUNCTION__.4547> + 8000a4d0: 0000d517 auipc a0,0xd + 8000a4d4: 87050513 addi a0,a0,-1936 # 80016d40 + 8000a4d8: fa5fd0ef jal ra,8000847c + 8000a4dc: fd843503 ld a0,-40(s0) + 8000a4e0: d9cf80ef jal ra,80002a7c + 8000a4e4: fea43423 sd a0,-24(s0) + 8000a4e8: fe843783 ld a5,-24(s0) + 8000a4ec: 00079c63 bnez a5,8000a504 + 8000a4f0: fd843583 ld a1,-40(s0) + 8000a4f4: 0000d517 auipc a0,0xd + 8000a4f8: 86450513 addi a0,a0,-1948 # 80016d58 + 8000a4fc: d21fd0ef jal ra,8000821c + 8000a500: 0e80006f j 8000a5e8 + 8000a504: 00018797 auipc a5,0x18 + 8000a508: be478793 addi a5,a5,-1052 # 800220e8 + 8000a50c: 0007b783 ld a5,0(a5) + 8000a510: 2307b783 ld a5,560(a5) + 8000a514: fe843703 ld a4,-24(s0) + 8000a518: 0cf70663 beq a4,a5,8000a5e4 + 8000a51c: 04300593 li a1,67 + 8000a520: fe843503 ld a0,-24(s0) + 8000a524: d90f80ef jal ra,80002ab4 + 8000a528: 00050793 mv a5,a0 + 8000a52c: 0a079e63 bnez a5,8000a5e8 + 8000a530: 00018797 auipc a5,0x18 + 8000a534: bb878793 addi a5,a5,-1096 # 800220e8 + 8000a538: 0007b783 ld a5,0(a5) + 8000a53c: 2307b783 ld a5,560(a5) + 8000a540: 02078c63 beqz a5,8000a578 + 8000a544: 00018797 auipc a5,0x18 + 8000a548: ba478793 addi a5,a5,-1116 # 800220e8 + 8000a54c: 0007b783 ld a5,0(a5) + 8000a550: 2307b783 ld a5,560(a5) + 8000a554: 00078513 mv a0,a5 + 8000a558: f54f80ef jal ra,80002cac + 8000a55c: 00018797 auipc a5,0x18 + 8000a560: b8c78793 addi a5,a5,-1140 # 800220e8 + 8000a564: 0007b783 ld a5,0(a5) + 8000a568: 2307b783 ld a5,560(a5) + 8000a56c: 00000593 li a1,0 + 8000a570: 00078513 mv a0,a5 + 8000a574: ab5f80ef jal ra,80003028 + 8000a578: 00018797 auipc a5,0x18 + 8000a57c: b7078793 addi a5,a5,-1168 # 800220e8 + 8000a580: 0007b783 ld a5,0(a5) + 8000a584: 1da78793 addi a5,a5,474 + 8000a588: 05100613 li a2,81 + 8000a58c: 00000593 li a1,0 + 8000a590: 00078513 mv a0,a5 + 8000a594: c84f60ef jal ra,80000a18 + 8000a598: 00018797 auipc a5,0x18 + 8000a59c: b5078793 addi a5,a5,-1200 # 800220e8 + 8000a5a0: 0007b783 ld a5,0(a5) + 8000a5a4: 22079623 sh zero,556(a5) + 8000a5a8: 00018717 auipc a4,0x18 + 8000a5ac: b4070713 addi a4,a4,-1216 # 800220e8 + 8000a5b0: 00073703 ld a4,0(a4) + 8000a5b4: 22c7d783 lhu a5,556(a5) + 8000a5b8: 22f71723 sh a5,558(a4) + 8000a5bc: 00018797 auipc a5,0x18 + 8000a5c0: b2c78793 addi a5,a5,-1236 # 800220e8 + 8000a5c4: 0007b783 ld a5,0(a5) + 8000a5c8: fe843703 ld a4,-24(s0) + 8000a5cc: 22e7b823 sd a4,560(a5) + 8000a5d0: 00000597 auipc a1,0x0 + 8000a5d4: e6058593 addi a1,a1,-416 # 8000a430 + 8000a5d8: fe843503 ld a0,-24(s0) + 8000a5dc: a4df80ef jal ra,80003028 + 8000a5e0: 0080006f j 8000a5e8 + 8000a5e4: 00000013 nop + 8000a5e8: 02813083 ld ra,40(sp) + 8000a5ec: 02013403 ld s0,32(sp) + 8000a5f0: 03010113 addi sp,sp,48 + 8000a5f4: 00008067 ret + +000000008000a5f8 : + 8000a5f8: fe010113 addi sp,sp,-32 + 8000a5fc: 00113c23 sd ra,24(sp) + 8000a600: 00813823 sd s0,16(sp) + 8000a604: 02010413 addi s0,sp,32 + 8000a608: fea43423 sd a0,-24(s0) + 8000a60c: 0000c517 auipc a0,0xc + 8000a610: 76c50513 addi a0,a0,1900 # 80016d78 + 8000a614: c09fd0ef jal ra,8000821c + 8000a618: e6dfe0ef jal ra,80009484 + 8000a61c: 00050793 mv a5,a0 + 8000a620: 00078713 mv a4,a5 + 8000a624: 00100793 li a5,1 + 8000a628: 00f71663 bne a4,a5,8000a634 + 8000a62c: fe843503 ld a0,-24(s0) + 8000a630: 9f1ff0ef jal ra,8000a020 + 8000a634: ba9ff0ef jal ra,8000a1dc + 8000a638: 00050793 mv a5,a0 + 8000a63c: fe843603 ld a2,-24(s0) + 8000a640: 00078593 mv a1,a5 + 8000a644: 0000c517 auipc a0,0xc + 8000a648: 73c50513 addi a0,a0,1852 # 80016d80 + 8000a64c: bd1fd0ef jal ra,8000821c + 8000a650: 00000013 nop + 8000a654: 01813083 ld ra,24(sp) + 8000a658: 01013403 ld s0,16(sp) + 8000a65c: 02010113 addi sp,sp,32 + 8000a660: 00008067 ret + +000000008000a664 : + 8000a664: fe010113 addi sp,sp,-32 + 8000a668: 00113c23 sd ra,24(sp) + 8000a66c: 00813823 sd s0,16(sp) + 8000a670: 02010413 addi s0,sp,32 + 8000a674: fea43423 sd a0,-24(s0) + 8000a678: 0000c517 auipc a0,0xc + 8000a67c: 71050513 addi a0,a0,1808 # 80016d88 + 8000a680: b9dfd0ef jal ra,8000821c + 8000a684: b59ff0ef jal ra,8000a1dc + 8000a688: 00050713 mv a4,a0 + 8000a68c: fe843783 ld a5,-24(s0) + 8000a690: 1da78793 addi a5,a5,474 + 8000a694: 00078613 mv a2,a5 + 8000a698: 00070593 mv a1,a4 + 8000a69c: 0000c517 auipc a0,0xc + 8000a6a0: 6e450513 addi a0,a0,1764 # 80016d80 + 8000a6a4: b79fd0ef jal ra,8000821c + 8000a6a8: 00000793 li a5,0 + 8000a6ac: 00078513 mv a0,a5 + 8000a6b0: 01813083 ld ra,24(sp) + 8000a6b4: 01013403 ld s0,16(sp) + 8000a6b8: 02010113 addi sp,sp,32 + 8000a6bc: 00008067 ret + +000000008000a6c0 : + 8000a6c0: fd010113 addi sp,sp,-48 + 8000a6c4: 02113423 sd ra,40(sp) + 8000a6c8: 02813023 sd s0,32(sp) + 8000a6cc: 03010413 addi s0,sp,48 + 8000a6d0: fca43c23 sd a0,-40(s0) + 8000a6d4: fd843783 ld a5,-40(s0) + 8000a6d8: 22c7d783 lhu a5,556(a5) + 8000a6dc: 26078063 beqz a5,8000a93c + 8000a6e0: fd843783 ld a5,-40(s0) + 8000a6e4: 0487d783 lhu a5,72(a5) + 8000a6e8: 0007871b sext.w a4,a5 + 8000a6ec: 00400793 li a5,4 + 8000a6f0: 12e7fc63 bgeu a5,a4,8000a828 + 8000a6f4: fd843783 ld a5,-40(s0) + 8000a6f8: 18a78713 addi a4,a5,394 + 8000a6fc: fd843783 ld a5,-40(s0) + 8000a700: 1da78793 addi a5,a5,474 + 8000a704: 05000613 li a2,80 + 8000a708: 00078593 mv a1,a5 + 8000a70c: 00070513 mv a0,a4 + 8000a710: b98f60ef jal ra,80000aa8 + 8000a714: 00050793 mv a5,a0 + 8000a718: 22078263 beqz a5,8000a93c + 8000a71c: fe042623 sw zero,-20(s0) + 8000a720: 0700006f j 8000a790 + 8000a724: fec42703 lw a4,-20(s0) + 8000a728: 00070793 mv a5,a4 + 8000a72c: 00279793 slli a5,a5,0x2 + 8000a730: 00e787b3 add a5,a5,a4 + 8000a734: 00479793 slli a5,a5,0x4 + 8000a738: 04078793 addi a5,a5,64 + 8000a73c: fd843703 ld a4,-40(s0) + 8000a740: 00f707b3 add a5,a4,a5 + 8000a744: 00a78693 addi a3,a5,10 + 8000a748: fec42783 lw a5,-20(s0) + 8000a74c: 0017879b addiw a5,a5,1 + 8000a750: 0007871b sext.w a4,a5 + 8000a754: 00070793 mv a5,a4 + 8000a758: 00279793 slli a5,a5,0x2 + 8000a75c: 00e787b3 add a5,a5,a4 + 8000a760: 00479793 slli a5,a5,0x4 + 8000a764: 04078793 addi a5,a5,64 + 8000a768: fd843703 ld a4,-40(s0) + 8000a76c: 00f707b3 add a5,a4,a5 + 8000a770: 00a78793 addi a5,a5,10 + 8000a774: 05000613 li a2,80 + 8000a778: 00078593 mv a1,a5 + 8000a77c: 00068513 mv a0,a3 + 8000a780: ae4f60ef jal ra,80000a64 + 8000a784: fec42783 lw a5,-20(s0) + 8000a788: 0017879b addiw a5,a5,1 + 8000a78c: fef42623 sw a5,-20(s0) + 8000a790: fec42783 lw a5,-20(s0) + 8000a794: 0007871b sext.w a4,a5 + 8000a798: 00300793 li a5,3 + 8000a79c: f8e7d4e3 bge a5,a4,8000a724 + 8000a7a0: fec42703 lw a4,-20(s0) + 8000a7a4: 00070793 mv a5,a4 + 8000a7a8: 00279793 slli a5,a5,0x2 + 8000a7ac: 00e787b3 add a5,a5,a4 + 8000a7b0: 00479793 slli a5,a5,0x4 + 8000a7b4: 04078793 addi a5,a5,64 + 8000a7b8: fd843703 ld a4,-40(s0) + 8000a7bc: 00f707b3 add a5,a4,a5 + 8000a7c0: 00a78793 addi a5,a5,10 + 8000a7c4: 05000613 li a2,80 + 8000a7c8: 00000593 li a1,0 + 8000a7cc: 00078513 mv a0,a5 + 8000a7d0: a48f60ef jal ra,80000a18 + 8000a7d4: fec42703 lw a4,-20(s0) + 8000a7d8: 00070793 mv a5,a4 + 8000a7dc: 00279793 slli a5,a5,0x2 + 8000a7e0: 00e787b3 add a5,a5,a4 + 8000a7e4: 00479793 slli a5,a5,0x4 + 8000a7e8: 04078793 addi a5,a5,64 + 8000a7ec: fd843703 ld a4,-40(s0) + 8000a7f0: 00f707b3 add a5,a4,a5 + 8000a7f4: 00a78713 addi a4,a5,10 + 8000a7f8: fd843783 ld a5,-40(s0) + 8000a7fc: 1da78693 addi a3,a5,474 + 8000a800: fd843783 ld a5,-40(s0) + 8000a804: 22c7d783 lhu a5,556(a5) + 8000a808: 00078613 mv a2,a5 + 8000a80c: 00068593 mv a1,a3 + 8000a810: 00070513 mv a0,a4 + 8000a814: a50f60ef jal ra,80000a64 + 8000a818: fd843783 ld a5,-40(s0) + 8000a81c: 00500713 li a4,5 + 8000a820: 04e79423 sh a4,72(a5) + 8000a824: 1180006f j 8000a93c + 8000a828: fd843783 ld a5,-40(s0) + 8000a82c: 0487d783 lhu a5,72(a5) + 8000a830: 04078c63 beqz a5,8000a888 + 8000a834: fd843783 ld a5,-40(s0) + 8000a838: 0487d783 lhu a5,72(a5) + 8000a83c: 0007879b sext.w a5,a5 + 8000a840: fff7879b addiw a5,a5,-1 + 8000a844: 0007871b sext.w a4,a5 + 8000a848: 00070793 mv a5,a4 + 8000a84c: 00279793 slli a5,a5,0x2 + 8000a850: 00e787b3 add a5,a5,a4 + 8000a854: 00479793 slli a5,a5,0x4 + 8000a858: 04078793 addi a5,a5,64 + 8000a85c: fd843703 ld a4,-40(s0) + 8000a860: 00f707b3 add a5,a4,a5 + 8000a864: 00a78713 addi a4,a5,10 + 8000a868: fd843783 ld a5,-40(s0) + 8000a86c: 1da78793 addi a5,a5,474 + 8000a870: 05000613 li a2,80 + 8000a874: 00078593 mv a1,a5 + 8000a878: 00070513 mv a0,a4 + 8000a87c: a2cf60ef jal ra,80000aa8 + 8000a880: 00050793 mv a5,a0 + 8000a884: 0a078c63 beqz a5,8000a93c + 8000a888: fd843783 ld a5,-40(s0) + 8000a88c: 0487d703 lhu a4,72(a5) + 8000a890: fd843783 ld a5,-40(s0) + 8000a894: 04e79323 sh a4,70(a5) + 8000a898: fd843783 ld a5,-40(s0) + 8000a89c: 0487d783 lhu a5,72(a5) + 8000a8a0: 0007871b sext.w a4,a5 + 8000a8a4: 00070793 mv a5,a4 + 8000a8a8: 00279793 slli a5,a5,0x2 + 8000a8ac: 00e787b3 add a5,a5,a4 + 8000a8b0: 00479793 slli a5,a5,0x4 + 8000a8b4: 04078793 addi a5,a5,64 + 8000a8b8: fd843703 ld a4,-40(s0) + 8000a8bc: 00f707b3 add a5,a4,a5 + 8000a8c0: 00a78793 addi a5,a5,10 + 8000a8c4: 05000613 li a2,80 + 8000a8c8: 00000593 li a1,0 + 8000a8cc: 00078513 mv a0,a5 + 8000a8d0: 948f60ef jal ra,80000a18 + 8000a8d4: fd843783 ld a5,-40(s0) + 8000a8d8: 0487d783 lhu a5,72(a5) + 8000a8dc: 0007871b sext.w a4,a5 + 8000a8e0: 00070793 mv a5,a4 + 8000a8e4: 00279793 slli a5,a5,0x2 + 8000a8e8: 00e787b3 add a5,a5,a4 + 8000a8ec: 00479793 slli a5,a5,0x4 + 8000a8f0: 04078793 addi a5,a5,64 + 8000a8f4: fd843703 ld a4,-40(s0) + 8000a8f8: 00f707b3 add a5,a4,a5 + 8000a8fc: 00a78713 addi a4,a5,10 + 8000a900: fd843783 ld a5,-40(s0) + 8000a904: 1da78693 addi a3,a5,474 + 8000a908: fd843783 ld a5,-40(s0) + 8000a90c: 22c7d783 lhu a5,556(a5) + 8000a910: 00078613 mv a2,a5 + 8000a914: 00068593 mv a1,a3 + 8000a918: 00070513 mv a0,a4 + 8000a91c: 948f60ef jal ra,80000a64 + 8000a920: fd843783 ld a5,-40(s0) + 8000a924: 0487d783 lhu a5,72(a5) + 8000a928: 0017879b addiw a5,a5,1 + 8000a92c: 03079713 slli a4,a5,0x30 + 8000a930: 03075713 srli a4,a4,0x30 + 8000a934: fd843783 ld a5,-40(s0) + 8000a938: 04e79423 sh a4,72(a5) + 8000a93c: fd843783 ld a5,-40(s0) + 8000a940: 0487d703 lhu a4,72(a5) + 8000a944: fd843783 ld a5,-40(s0) + 8000a948: 04e79323 sh a4,70(a5) + 8000a94c: 00000013 nop + 8000a950: 02813083 ld ra,40(sp) + 8000a954: 02013403 ld s0,32(sp) + 8000a958: 03010113 addi sp,sp,48 + 8000a95c: 00008067 ret + +000000008000a960 : + 8000a960: fc010113 addi sp,sp,-64 + 8000a964: 02113c23 sd ra,56(sp) + 8000a968: 02813823 sd s0,48(sp) + 8000a96c: 04010413 addi s0,sp,64 + 8000a970: fca43423 sd a0,-56(s0) + 8000a974: 00017797 auipc a5,0x17 + 8000a978: 77478793 addi a5,a5,1908 # 800220e8 + 8000a97c: 0007b783 ld a5,0(a5) + 8000a980: 0447c703 lbu a4,68(a5) + 8000a984: 00176713 ori a4,a4,1 + 8000a988: 04e78223 sb a4,68(a5) + 8000a98c: 00017797 auipc a5,0x17 + 8000a990: 75c78793 addi a5,a5,1884 # 800220e8 + 8000a994: 0007b783 ld a5,0(a5) + 8000a998: 2307b783 ld a5,560(a5) + 8000a99c: 02079063 bnez a5,8000a9bc + 8000a9a0: f90fd0ef jal ra,80008130 + 8000a9a4: fca43c23 sd a0,-40(s0) + 8000a9a8: fd843783 ld a5,-40(s0) + 8000a9ac: 00078863 beqz a5,8000a9bc + 8000a9b0: fd843783 ld a5,-40(s0) + 8000a9b4: 00078513 mv a0,a5 + 8000a9b8: ae5ff0ef jal ra,8000a49c + 8000a9bc: 821ff0ef jal ra,8000a1dc + 8000a9c0: 00050793 mv a5,a0 + 8000a9c4: 00078513 mv a0,a5 + 8000a9c8: 855fd0ef jal ra,8000821c + 8000a9cc: 9cdff0ef jal ra,8000a398 + 8000a9d0: 00050793 mv a5,a0 + 8000a9d4: fcf42a23 sw a5,-44(s0) + 8000a9d8: fd442783 lw a5,-44(s0) + 8000a9dc: 0007879b sext.w a5,a5 + 8000a9e0: 2a07cae3 bltz a5,8000b494 + 8000a9e4: fd442783 lw a5,-44(s0) + 8000a9e8: 0007871b sext.w a4,a5 + 8000a9ec: 01b00793 li a5,27 + 8000a9f0: 00f71e63 bne a4,a5,8000aa0c + 8000a9f4: 00017797 auipc a5,0x17 + 8000a9f8: 6f478793 addi a5,a5,1780 # 800220e8 + 8000a9fc: 0007b783 ld a5,0(a5) + 8000aa00: 00100713 li a4,1 + 8000aa04: 04e7a023 sw a4,64(a5) + 8000aa08: 2b90006f j 8000b4c0 + 8000aa0c: 00017797 auipc a5,0x17 + 8000aa10: 6dc78793 addi a5,a5,1756 # 800220e8 + 8000aa14: 0007b783 ld a5,0(a5) + 8000aa18: 0407a783 lw a5,64(a5) + 8000aa1c: 00078713 mv a4,a5 + 8000aa20: 00100793 li a5,1 + 8000aa24: 04f71063 bne a4,a5,8000aa64 + 8000aa28: fd442783 lw a5,-44(s0) + 8000aa2c: 0007871b sext.w a4,a5 + 8000aa30: 05b00793 li a5,91 + 8000aa34: 00f71e63 bne a4,a5,8000aa50 + 8000aa38: 00017797 auipc a5,0x17 + 8000aa3c: 6b078793 addi a5,a5,1712 # 800220e8 + 8000aa40: 0007b783 ld a5,0(a5) + 8000aa44: 00200713 li a4,2 + 8000aa48: 04e7a023 sw a4,64(a5) + 8000aa4c: 2750006f j 8000b4c0 + 8000aa50: 00017797 auipc a5,0x17 + 8000aa54: 69878793 addi a5,a5,1688 # 800220e8 + 8000aa58: 0007b783 ld a5,0(a5) + 8000aa5c: 0407a023 sw zero,64(a5) + 8000aa60: 3900006f j 8000adf0 + 8000aa64: 00017797 auipc a5,0x17 + 8000aa68: 68478793 addi a5,a5,1668 # 800220e8 + 8000aa6c: 0007b783 ld a5,0(a5) + 8000aa70: 0407a783 lw a5,64(a5) + 8000aa74: 00078713 mv a4,a5 + 8000aa78: 00200793 li a5,2 + 8000aa7c: 36f71a63 bne a4,a5,8000adf0 + 8000aa80: 00017797 auipc a5,0x17 + 8000aa84: 66878793 addi a5,a5,1640 # 800220e8 + 8000aa88: 0007b783 ld a5,0(a5) + 8000aa8c: 0407a023 sw zero,64(a5) + 8000aa90: fd442783 lw a5,-44(s0) + 8000aa94: 0007871b sext.w a4,a5 + 8000aa98: 04100793 li a5,65 + 8000aa9c: 10f71263 bne a4,a5,8000aba0 + 8000aaa0: 00017797 auipc a5,0x17 + 8000aaa4: 64878793 addi a5,a5,1608 # 800220e8 + 8000aaa8: 0007b783 ld a5,0(a5) + 8000aaac: 0467d783 lhu a5,70(a5) + 8000aab0: 0c078e63 beqz a5,8000ab8c + 8000aab4: 00017797 auipc a5,0x17 + 8000aab8: 63478793 addi a5,a5,1588 # 800220e8 + 8000aabc: 0007b783 ld a5,0(a5) + 8000aac0: 0467d703 lhu a4,70(a5) + 8000aac4: fff7071b addiw a4,a4,-1 + 8000aac8: 03071713 slli a4,a4,0x30 + 8000aacc: 03075713 srli a4,a4,0x30 + 8000aad0: 04e79323 sh a4,70(a5) + 8000aad4: 00017797 auipc a5,0x17 + 8000aad8: 61478793 addi a5,a5,1556 # 800220e8 + 8000aadc: 0007b783 ld a5,0(a5) + 8000aae0: 1da78513 addi a0,a5,474 + 8000aae4: 00017797 auipc a5,0x17 + 8000aae8: 60478793 addi a5,a5,1540 # 800220e8 + 8000aaec: 0007b683 ld a3,0(a5) + 8000aaf0: 00017797 auipc a5,0x17 + 8000aaf4: 5f878793 addi a5,a5,1528 # 800220e8 + 8000aaf8: 0007b783 ld a5,0(a5) + 8000aafc: 0467d783 lhu a5,70(a5) + 8000ab00: 0007871b sext.w a4,a5 + 8000ab04: 00070793 mv a5,a4 + 8000ab08: 00279793 slli a5,a5,0x2 + 8000ab0c: 00e787b3 add a5,a5,a4 + 8000ab10: 00479793 slli a5,a5,0x4 + 8000ab14: 04078793 addi a5,a5,64 + 8000ab18: 00f687b3 add a5,a3,a5 + 8000ab1c: 00a78793 addi a5,a5,10 + 8000ab20: 05000613 li a2,80 + 8000ab24: 00078593 mv a1,a5 + 8000ab28: f3df50ef jal ra,80000a64 + 8000ab2c: 00017797 auipc a5,0x17 + 8000ab30: 5bc78793 addi a5,a5,1468 # 800220e8 + 8000ab34: 0007b783 ld a5,0(a5) + 8000ab38: 1da78793 addi a5,a5,474 + 8000ab3c: 00078513 mv a0,a5 + 8000ab40: d15f50ef jal ra,80000854 + 8000ab44: 00050713 mv a4,a0 + 8000ab48: 00017797 auipc a5,0x17 + 8000ab4c: 5a078793 addi a5,a5,1440 # 800220e8 + 8000ab50: 0007b783 ld a5,0(a5) + 8000ab54: 03071713 slli a4,a4,0x30 + 8000ab58: 03075713 srli a4,a4,0x30 + 8000ab5c: 22e79623 sh a4,556(a5) + 8000ab60: 00017717 auipc a4,0x17 + 8000ab64: 58870713 addi a4,a4,1416 # 800220e8 + 8000ab68: 00073703 ld a4,0(a4) + 8000ab6c: 22c7d783 lhu a5,556(a5) + 8000ab70: 22f71723 sh a5,558(a4) + 8000ab74: 00017797 auipc a5,0x17 + 8000ab78: 57478793 addi a5,a5,1396 # 800220e8 + 8000ab7c: 0007b783 ld a5,0(a5) + 8000ab80: 00078513 mv a0,a5 + 8000ab84: ae1ff0ef jal ra,8000a664 + 8000ab88: 1390006f j 8000b4c0 + 8000ab8c: 00017797 auipc a5,0x17 + 8000ab90: 55c78793 addi a5,a5,1372 # 800220e8 + 8000ab94: 0007b783 ld a5,0(a5) + 8000ab98: 04079323 sh zero,70(a5) + 8000ab9c: 1250006f j 8000b4c0 + 8000aba0: fd442783 lw a5,-44(s0) + 8000aba4: 0007871b sext.w a4,a5 + 8000aba8: 04200793 li a5,66 + 8000abac: 14f71a63 bne a4,a5,8000ad00 + 8000abb0: 00017797 auipc a5,0x17 + 8000abb4: 53878793 addi a5,a5,1336 # 800220e8 + 8000abb8: 0007b783 ld a5,0(a5) + 8000abbc: 0467d783 lhu a5,70(a5) + 8000abc0: 0007871b sext.w a4,a5 + 8000abc4: 00017797 auipc a5,0x17 + 8000abc8: 52478793 addi a5,a5,1316 # 800220e8 + 8000abcc: 0007b783 ld a5,0(a5) + 8000abd0: 0487d783 lhu a5,72(a5) + 8000abd4: 0007879b sext.w a5,a5 + 8000abd8: fff7879b addiw a5,a5,-1 + 8000abdc: 0007879b sext.w a5,a5 + 8000abe0: 02f75463 bge a4,a5,8000ac08 + 8000abe4: 00017797 auipc a5,0x17 + 8000abe8: 50478793 addi a5,a5,1284 # 800220e8 + 8000abec: 0007b783 ld a5,0(a5) + 8000abf0: 0467d703 lhu a4,70(a5) + 8000abf4: 0017071b addiw a4,a4,1 + 8000abf8: 03071713 slli a4,a4,0x30 + 8000abfc: 03075713 srli a4,a4,0x30 + 8000ac00: 04e79323 sh a4,70(a5) + 8000ac04: 0440006f j 8000ac48 + 8000ac08: 00017797 auipc a5,0x17 + 8000ac0c: 4e078793 addi a5,a5,1248 # 800220e8 + 8000ac10: 0007b783 ld a5,0(a5) + 8000ac14: 0487d783 lhu a5,72(a5) + 8000ac18: 080782e3 beqz a5,8000b49c + 8000ac1c: 00017797 auipc a5,0x17 + 8000ac20: 4cc78793 addi a5,a5,1228 # 800220e8 + 8000ac24: 0007b783 ld a5,0(a5) + 8000ac28: 0487d703 lhu a4,72(a5) + 8000ac2c: 00017797 auipc a5,0x17 + 8000ac30: 4bc78793 addi a5,a5,1212 # 800220e8 + 8000ac34: 0007b783 ld a5,0(a5) + 8000ac38: fff7071b addiw a4,a4,-1 + 8000ac3c: 03071713 slli a4,a4,0x30 + 8000ac40: 03075713 srli a4,a4,0x30 + 8000ac44: 04e79323 sh a4,70(a5) + 8000ac48: 00017797 auipc a5,0x17 + 8000ac4c: 4a078793 addi a5,a5,1184 # 800220e8 + 8000ac50: 0007b783 ld a5,0(a5) + 8000ac54: 1da78513 addi a0,a5,474 + 8000ac58: 00017797 auipc a5,0x17 + 8000ac5c: 49078793 addi a5,a5,1168 # 800220e8 + 8000ac60: 0007b683 ld a3,0(a5) + 8000ac64: 00017797 auipc a5,0x17 + 8000ac68: 48478793 addi a5,a5,1156 # 800220e8 + 8000ac6c: 0007b783 ld a5,0(a5) + 8000ac70: 0467d783 lhu a5,70(a5) + 8000ac74: 0007871b sext.w a4,a5 + 8000ac78: 00070793 mv a5,a4 + 8000ac7c: 00279793 slli a5,a5,0x2 + 8000ac80: 00e787b3 add a5,a5,a4 + 8000ac84: 00479793 slli a5,a5,0x4 + 8000ac88: 04078793 addi a5,a5,64 + 8000ac8c: 00f687b3 add a5,a3,a5 + 8000ac90: 00a78793 addi a5,a5,10 + 8000ac94: 05000613 li a2,80 + 8000ac98: 00078593 mv a1,a5 + 8000ac9c: dc9f50ef jal ra,80000a64 + 8000aca0: 00017797 auipc a5,0x17 + 8000aca4: 44878793 addi a5,a5,1096 # 800220e8 + 8000aca8: 0007b783 ld a5,0(a5) + 8000acac: 1da78793 addi a5,a5,474 + 8000acb0: 00078513 mv a0,a5 + 8000acb4: ba1f50ef jal ra,80000854 + 8000acb8: 00050713 mv a4,a0 + 8000acbc: 00017797 auipc a5,0x17 + 8000acc0: 42c78793 addi a5,a5,1068 # 800220e8 + 8000acc4: 0007b783 ld a5,0(a5) + 8000acc8: 03071713 slli a4,a4,0x30 + 8000accc: 03075713 srli a4,a4,0x30 + 8000acd0: 22e79623 sh a4,556(a5) + 8000acd4: 00017717 auipc a4,0x17 + 8000acd8: 41470713 addi a4,a4,1044 # 800220e8 + 8000acdc: 00073703 ld a4,0(a4) + 8000ace0: 22c7d783 lhu a5,556(a5) + 8000ace4: 22f71723 sh a5,558(a4) + 8000ace8: 00017797 auipc a5,0x17 + 8000acec: 40078793 addi a5,a5,1024 # 800220e8 + 8000acf0: 0007b783 ld a5,0(a5) + 8000acf4: 00078513 mv a0,a5 + 8000acf8: 96dff0ef jal ra,8000a664 + 8000acfc: 7c40006f j 8000b4c0 + 8000ad00: fd442783 lw a5,-44(s0) + 8000ad04: 0007871b sext.w a4,a5 + 8000ad08: 04400793 li a5,68 + 8000ad0c: 04f71463 bne a4,a5,8000ad54 + 8000ad10: 00017797 auipc a5,0x17 + 8000ad14: 3d878793 addi a5,a5,984 # 800220e8 + 8000ad18: 0007b783 ld a5,0(a5) + 8000ad1c: 22e7d783 lhu a5,558(a5) + 8000ad20: 78078263 beqz a5,8000b4a4 + 8000ad24: 0000c517 auipc a0,0xc + 8000ad28: 06c50513 addi a0,a0,108 # 80016d90 + 8000ad2c: cf0fd0ef jal ra,8000821c + 8000ad30: 00017797 auipc a5,0x17 + 8000ad34: 3b878793 addi a5,a5,952 # 800220e8 + 8000ad38: 0007b783 ld a5,0(a5) + 8000ad3c: 22e7d703 lhu a4,558(a5) + 8000ad40: fff7071b addiw a4,a4,-1 + 8000ad44: 03071713 slli a4,a4,0x30 + 8000ad48: 03075713 srli a4,a4,0x30 + 8000ad4c: 22e79723 sh a4,558(a5) + 8000ad50: 7540006f j 8000b4a4 + 8000ad54: fd442783 lw a5,-44(s0) + 8000ad58: 0007871b sext.w a4,a5 + 8000ad5c: 04300793 li a5,67 + 8000ad60: 08f71863 bne a4,a5,8000adf0 + 8000ad64: 00017797 auipc a5,0x17 + 8000ad68: 38478793 addi a5,a5,900 # 800220e8 + 8000ad6c: 0007b783 ld a5,0(a5) + 8000ad70: 22e7d703 lhu a4,558(a5) + 8000ad74: 00017797 auipc a5,0x17 + 8000ad78: 37478793 addi a5,a5,884 # 800220e8 + 8000ad7c: 0007b783 ld a5,0(a5) + 8000ad80: 22c7d783 lhu a5,556(a5) + 8000ad84: 0007071b sext.w a4,a4 + 8000ad88: 0007879b sext.w a5,a5 + 8000ad8c: 72f77063 bgeu a4,a5,8000b4ac + 8000ad90: 00017797 auipc a5,0x17 + 8000ad94: 35878793 addi a5,a5,856 # 800220e8 + 8000ad98: 0007b703 ld a4,0(a5) + 8000ad9c: 00017797 auipc a5,0x17 + 8000ada0: 34c78793 addi a5,a5,844 # 800220e8 + 8000ada4: 0007b783 ld a5,0(a5) + 8000ada8: 22e7d783 lhu a5,558(a5) + 8000adac: 0007879b sext.w a5,a5 + 8000adb0: 00f707b3 add a5,a4,a5 + 8000adb4: 1da7c783 lbu a5,474(a5) + 8000adb8: 0007879b sext.w a5,a5 + 8000adbc: 00078593 mv a1,a5 + 8000adc0: 0000c517 auipc a0,0xc + 8000adc4: fd850513 addi a0,a0,-40 # 80016d98 + 8000adc8: c54fd0ef jal ra,8000821c + 8000adcc: 00017797 auipc a5,0x17 + 8000add0: 31c78793 addi a5,a5,796 # 800220e8 + 8000add4: 0007b783 ld a5,0(a5) + 8000add8: 22e7d703 lhu a4,558(a5) + 8000addc: 0017071b addiw a4,a4,1 + 8000ade0: 03071713 slli a4,a4,0x30 + 8000ade4: 03075713 srli a4,a4,0x30 + 8000ade8: 22e79723 sh a4,558(a5) + 8000adec: 6c00006f j 8000b4ac + 8000adf0: fd442783 lw a5,-44(s0) + 8000adf4: 0007879b sext.w a5,a5 + 8000adf8: 6a078e63 beqz a5,8000b4b4 + 8000adfc: fd442783 lw a5,-44(s0) + 8000ae00: 0007871b sext.w a4,a5 + 8000ae04: 0ff00793 li a5,255 + 8000ae08: 6af70663 beq a4,a5,8000b4b4 + 8000ae0c: fd442783 lw a5,-44(s0) + 8000ae10: 0007871b sext.w a4,a5 + 8000ae14: 00900793 li a5,9 + 8000ae18: 0af71463 bne a4,a5,8000aec0 + 8000ae1c: fe042623 sw zero,-20(s0) + 8000ae20: 01c0006f j 8000ae3c + 8000ae24: 0000c517 auipc a0,0xc + 8000ae28: f6c50513 addi a0,a0,-148 # 80016d90 + 8000ae2c: bf0fd0ef jal ra,8000821c + 8000ae30: fec42783 lw a5,-20(s0) + 8000ae34: 0017879b addiw a5,a5,1 + 8000ae38: fef42623 sw a5,-20(s0) + 8000ae3c: 00017797 auipc a5,0x17 + 8000ae40: 2ac78793 addi a5,a5,684 # 800220e8 + 8000ae44: 0007b783 ld a5,0(a5) + 8000ae48: 22e7d783 lhu a5,558(a5) + 8000ae4c: 0007871b sext.w a4,a5 + 8000ae50: fec42783 lw a5,-20(s0) + 8000ae54: 0007879b sext.w a5,a5 + 8000ae58: fce7c6e3 blt a5,a4,8000ae24 + 8000ae5c: 00017797 auipc a5,0x17 + 8000ae60: 28c78793 addi a5,a5,652 # 800220e8 + 8000ae64: 0007b783 ld a5,0(a5) + 8000ae68: 1da78793 addi a5,a5,474 + 8000ae6c: 00078513 mv a0,a5 + 8000ae70: f88ff0ef jal ra,8000a5f8 + 8000ae74: 00017797 auipc a5,0x17 + 8000ae78: 27478793 addi a5,a5,628 # 800220e8 + 8000ae7c: 0007b783 ld a5,0(a5) + 8000ae80: 1da78793 addi a5,a5,474 + 8000ae84: 00078513 mv a0,a5 + 8000ae88: 9cdf50ef jal ra,80000854 + 8000ae8c: 00050713 mv a4,a0 + 8000ae90: 00017797 auipc a5,0x17 + 8000ae94: 25878793 addi a5,a5,600 # 800220e8 + 8000ae98: 0007b783 ld a5,0(a5) + 8000ae9c: 03071713 slli a4,a4,0x30 + 8000aea0: 03075713 srli a4,a4,0x30 + 8000aea4: 22e79623 sh a4,556(a5) + 8000aea8: 00017717 auipc a4,0x17 + 8000aeac: 24070713 addi a4,a4,576 # 800220e8 + 8000aeb0: 00073703 ld a4,0(a4) + 8000aeb4: 22c7d783 lhu a5,556(a5) + 8000aeb8: 22f71723 sh a5,558(a4) + 8000aebc: 6040006f j 8000b4c0 + 8000aec0: fd442783 lw a5,-44(s0) + 8000aec4: 0007871b sext.w a4,a5 + 8000aec8: 07f00793 li a5,127 + 8000aecc: 00f70a63 beq a4,a5,8000aee0 + 8000aed0: fd442783 lw a5,-44(s0) + 8000aed4: 0007871b sext.w a4,a5 + 8000aed8: 00800793 li a5,8 + 8000aedc: 20f71863 bne a4,a5,8000b0ec + 8000aee0: 00017797 auipc a5,0x17 + 8000aee4: 20878793 addi a5,a5,520 # 800220e8 + 8000aee8: 0007b783 ld a5,0(a5) + 8000aeec: 22e7d783 lhu a5,558(a5) + 8000aef0: 5c078663 beqz a5,8000b4bc + 8000aef4: 00017797 auipc a5,0x17 + 8000aef8: 1f478793 addi a5,a5,500 # 800220e8 + 8000aefc: 0007b783 ld a5,0(a5) + 8000af00: 22c7d703 lhu a4,556(a5) + 8000af04: fff7071b addiw a4,a4,-1 + 8000af08: 03071713 slli a4,a4,0x30 + 8000af0c: 03075713 srli a4,a4,0x30 + 8000af10: 22e79623 sh a4,556(a5) + 8000af14: 00017797 auipc a5,0x17 + 8000af18: 1d478793 addi a5,a5,468 # 800220e8 + 8000af1c: 0007b783 ld a5,0(a5) + 8000af20: 22e7d703 lhu a4,558(a5) + 8000af24: fff7071b addiw a4,a4,-1 + 8000af28: 03071713 slli a4,a4,0x30 + 8000af2c: 03075713 srli a4,a4,0x30 + 8000af30: 22e79723 sh a4,558(a5) + 8000af34: 00017797 auipc a5,0x17 + 8000af38: 1b478793 addi a5,a5,436 # 800220e8 + 8000af3c: 0007b783 ld a5,0(a5) + 8000af40: 22c7d703 lhu a4,556(a5) + 8000af44: 00017797 auipc a5,0x17 + 8000af48: 1a478793 addi a5,a5,420 # 800220e8 + 8000af4c: 0007b783 ld a5,0(a5) + 8000af50: 22e7d783 lhu a5,558(a5) + 8000af54: 0007071b sext.w a4,a4 + 8000af58: 0007879b sext.w a5,a5 + 8000af5c: 14e7fc63 bgeu a5,a4,8000b0b4 + 8000af60: 00017797 auipc a5,0x17 + 8000af64: 18878793 addi a5,a5,392 # 800220e8 + 8000af68: 0007b703 ld a4,0(a5) + 8000af6c: 00017797 auipc a5,0x17 + 8000af70: 17c78793 addi a5,a5,380 # 800220e8 + 8000af74: 0007b783 ld a5,0(a5) + 8000af78: 22e7d783 lhu a5,558(a5) + 8000af7c: 0007879b sext.w a5,a5 + 8000af80: 1d078793 addi a5,a5,464 + 8000af84: 00f707b3 add a5,a4,a5 + 8000af88: 00a78693 addi a3,a5,10 + 8000af8c: 00017797 auipc a5,0x17 + 8000af90: 15c78793 addi a5,a5,348 # 800220e8 + 8000af94: 0007b703 ld a4,0(a5) + 8000af98: 00017797 auipc a5,0x17 + 8000af9c: 15078793 addi a5,a5,336 # 800220e8 + 8000afa0: 0007b783 ld a5,0(a5) + 8000afa4: 22e7d783 lhu a5,558(a5) + 8000afa8: 0007879b sext.w a5,a5 + 8000afac: 0017879b addiw a5,a5,1 + 8000afb0: 0007879b sext.w a5,a5 + 8000afb4: 1d078793 addi a5,a5,464 + 8000afb8: 00f707b3 add a5,a4,a5 + 8000afbc: 00a78593 addi a1,a5,10 + 8000afc0: 00017797 auipc a5,0x17 + 8000afc4: 12878793 addi a5,a5,296 # 800220e8 + 8000afc8: 0007b783 ld a5,0(a5) + 8000afcc: 22c7d783 lhu a5,556(a5) + 8000afd0: 0007871b sext.w a4,a5 + 8000afd4: 00017797 auipc a5,0x17 + 8000afd8: 11478793 addi a5,a5,276 # 800220e8 + 8000afdc: 0007b783 ld a5,0(a5) + 8000afe0: 22e7d783 lhu a5,558(a5) + 8000afe4: 0007879b sext.w a5,a5 + 8000afe8: 40f707bb subw a5,a4,a5 + 8000afec: 0007879b sext.w a5,a5 + 8000aff0: 00078613 mv a2,a5 + 8000aff4: 00068513 mv a0,a3 + 8000aff8: de1fb0ef jal ra,80006dd8 + 8000affc: 00017797 auipc a5,0x17 + 8000b000: 0ec78793 addi a5,a5,236 # 800220e8 + 8000b004: 0007b703 ld a4,0(a5) + 8000b008: 00017797 auipc a5,0x17 + 8000b00c: 0e078793 addi a5,a5,224 # 800220e8 + 8000b010: 0007b783 ld a5,0(a5) + 8000b014: 22c7d783 lhu a5,556(a5) + 8000b018: 0007879b sext.w a5,a5 + 8000b01c: 00f707b3 add a5,a4,a5 + 8000b020: 1c078d23 sb zero,474(a5) + 8000b024: 00017797 auipc a5,0x17 + 8000b028: 0c478793 addi a5,a5,196 # 800220e8 + 8000b02c: 0007b703 ld a4,0(a5) + 8000b030: 00017797 auipc a5,0x17 + 8000b034: 0b878793 addi a5,a5,184 # 800220e8 + 8000b038: 0007b783 ld a5,0(a5) + 8000b03c: 22e7d783 lhu a5,558(a5) + 8000b040: 0007879b sext.w a5,a5 + 8000b044: 1d078793 addi a5,a5,464 + 8000b048: 00f707b3 add a5,a4,a5 + 8000b04c: 00a78793 addi a5,a5,10 + 8000b050: 00078593 mv a1,a5 + 8000b054: 0000c517 auipc a0,0xc + 8000b058: d4c50513 addi a0,a0,-692 # 80016da0 + 8000b05c: 9c0fd0ef jal ra,8000821c + 8000b060: 00017797 auipc a5,0x17 + 8000b064: 08878793 addi a5,a5,136 # 800220e8 + 8000b068: 0007b783 ld a5,0(a5) + 8000b06c: 22e7d783 lhu a5,558(a5) + 8000b070: fef42423 sw a5,-24(s0) + 8000b074: 01c0006f j 8000b090 + 8000b078: 0000c517 auipc a0,0xc + 8000b07c: d1850513 addi a0,a0,-744 # 80016d90 + 8000b080: 99cfd0ef jal ra,8000821c + 8000b084: fe842783 lw a5,-24(s0) + 8000b088: 0017879b addiw a5,a5,1 + 8000b08c: fef42423 sw a5,-24(s0) + 8000b090: 00017797 auipc a5,0x17 + 8000b094: 05878793 addi a5,a5,88 # 800220e8 + 8000b098: 0007b783 ld a5,0(a5) + 8000b09c: 22c7d783 lhu a5,556(a5) + 8000b0a0: 0007871b sext.w a4,a5 + 8000b0a4: fe842783 lw a5,-24(s0) + 8000b0a8: 0007879b sext.w a5,a5 + 8000b0ac: fcf756e3 bge a4,a5,8000b078 + 8000b0b0: 4100006f j 8000b4c0 + 8000b0b4: 0000c517 auipc a0,0xc + 8000b0b8: cf450513 addi a0,a0,-780 # 80016da8 + 8000b0bc: 960fd0ef jal ra,8000821c + 8000b0c0: 00017797 auipc a5,0x17 + 8000b0c4: 02878793 addi a5,a5,40 # 800220e8 + 8000b0c8: 0007b703 ld a4,0(a5) + 8000b0cc: 00017797 auipc a5,0x17 + 8000b0d0: 01c78793 addi a5,a5,28 # 800220e8 + 8000b0d4: 0007b783 ld a5,0(a5) + 8000b0d8: 22c7d783 lhu a5,556(a5) + 8000b0dc: 0007879b sext.w a5,a5 + 8000b0e0: 00f707b3 add a5,a4,a5 + 8000b0e4: 1c078d23 sb zero,474(a5) + 8000b0e8: 3d80006f j 8000b4c0 + 8000b0ec: fd442783 lw a5,-44(s0) + 8000b0f0: 0007871b sext.w a4,a5 + 8000b0f4: 00d00793 li a5,13 + 8000b0f8: 00f70a63 beq a4,a5,8000b10c + 8000b0fc: fd442783 lw a5,-44(s0) + 8000b100: 0007871b sext.w a4,a5 + 8000b104: 00a00793 li a5,10 + 8000b108: 0cf71c63 bne a4,a5,8000b1e0 + 8000b10c: 00017797 auipc a5,0x17 + 8000b110: fdc78793 addi a5,a5,-36 # 800220e8 + 8000b114: 0007b783 ld a5,0(a5) + 8000b118: 00078513 mv a0,a5 + 8000b11c: da4ff0ef jal ra,8000a6c0 + 8000b120: b64fe0ef jal ra,80009484 + 8000b124: 00050793 mv a5,a0 + 8000b128: 00078713 mv a4,a5 + 8000b12c: 00100793 li a5,1 + 8000b130: 04f71c63 bne a4,a5,8000b188 + 8000b134: 00017797 auipc a5,0x17 + 8000b138: fb478793 addi a5,a5,-76 # 800220e8 + 8000b13c: 0007b783 ld a5,0(a5) + 8000b140: 0447c783 lbu a5,68(a5) + 8000b144: 0017f793 andi a5,a5,1 + 8000b148: 0ff7f793 andi a5,a5,255 + 8000b14c: 00078863 beqz a5,8000b15c + 8000b150: 0000c517 auipc a0,0xc + 8000b154: c2850513 addi a0,a0,-984 # 80016d78 + 8000b158: 8c4fd0ef jal ra,8000821c + 8000b15c: 00017797 auipc a5,0x17 + 8000b160: f8c78793 addi a5,a5,-116 # 800220e8 + 8000b164: 0007b783 ld a5,0(a5) + 8000b168: 1da78713 addi a4,a5,474 + 8000b16c: 00017797 auipc a5,0x17 + 8000b170: f7c78793 addi a5,a5,-132 # 800220e8 + 8000b174: 0007b783 ld a5,0(a5) + 8000b178: 22c7d783 lhu a5,556(a5) + 8000b17c: 00078593 mv a1,a5 + 8000b180: 00070513 mv a0,a4 + 8000b184: 97dfe0ef jal ra,80009b00 + 8000b188: 854ff0ef jal ra,8000a1dc + 8000b18c: 00050793 mv a5,a0 + 8000b190: 00078513 mv a0,a5 + 8000b194: 888fd0ef jal ra,8000821c + 8000b198: 00017797 auipc a5,0x17 + 8000b19c: f5078793 addi a5,a5,-176 # 800220e8 + 8000b1a0: 0007b783 ld a5,0(a5) + 8000b1a4: 1da78793 addi a5,a5,474 + 8000b1a8: 05100613 li a2,81 + 8000b1ac: 00000593 li a1,0 + 8000b1b0: 00078513 mv a0,a5 + 8000b1b4: 865f50ef jal ra,80000a18 + 8000b1b8: 00017797 auipc a5,0x17 + 8000b1bc: f3078793 addi a5,a5,-208 # 800220e8 + 8000b1c0: 0007b783 ld a5,0(a5) + 8000b1c4: 22079623 sh zero,556(a5) + 8000b1c8: 00017717 auipc a4,0x17 + 8000b1cc: f2070713 addi a4,a4,-224 # 800220e8 + 8000b1d0: 00073703 ld a4,0(a4) + 8000b1d4: 22c7d783 lhu a5,556(a5) + 8000b1d8: 22f71723 sh a5,558(a4) + 8000b1dc: 2e40006f j 8000b4c0 + 8000b1e0: 00017797 auipc a5,0x17 + 8000b1e4: f0878793 addi a5,a5,-248 # 800220e8 + 8000b1e8: 0007b783 ld a5,0(a5) + 8000b1ec: 22c7d783 lhu a5,556(a5) + 8000b1f0: 0007871b sext.w a4,a5 + 8000b1f4: 04f00793 li a5,79 + 8000b1f8: 00e7fa63 bgeu a5,a4,8000b20c + 8000b1fc: 00017797 auipc a5,0x17 + 8000b200: eec78793 addi a5,a5,-276 # 800220e8 + 8000b204: 0007b783 ld a5,0(a5) + 8000b208: 22079623 sh zero,556(a5) + 8000b20c: 00017797 auipc a5,0x17 + 8000b210: edc78793 addi a5,a5,-292 # 800220e8 + 8000b214: 0007b783 ld a5,0(a5) + 8000b218: 22e7d703 lhu a4,558(a5) + 8000b21c: 00017797 auipc a5,0x17 + 8000b220: ecc78793 addi a5,a5,-308 # 800220e8 + 8000b224: 0007b783 ld a5,0(a5) + 8000b228: 22c7d783 lhu a5,556(a5) + 8000b22c: 0007071b sext.w a4,a4 + 8000b230: 0007879b sext.w a5,a5 + 8000b234: 16f77e63 bgeu a4,a5,8000b3b0 + 8000b238: 00017797 auipc a5,0x17 + 8000b23c: eb078793 addi a5,a5,-336 # 800220e8 + 8000b240: 0007b703 ld a4,0(a5) + 8000b244: 00017797 auipc a5,0x17 + 8000b248: ea478793 addi a5,a5,-348 # 800220e8 + 8000b24c: 0007b783 ld a5,0(a5) + 8000b250: 22e7d783 lhu a5,558(a5) + 8000b254: 0007879b sext.w a5,a5 + 8000b258: 0017879b addiw a5,a5,1 + 8000b25c: 0007879b sext.w a5,a5 + 8000b260: 1d078793 addi a5,a5,464 + 8000b264: 00f707b3 add a5,a4,a5 + 8000b268: 00a78693 addi a3,a5,10 + 8000b26c: 00017797 auipc a5,0x17 + 8000b270: e7c78793 addi a5,a5,-388 # 800220e8 + 8000b274: 0007b703 ld a4,0(a5) + 8000b278: 00017797 auipc a5,0x17 + 8000b27c: e7078793 addi a5,a5,-400 # 800220e8 + 8000b280: 0007b783 ld a5,0(a5) + 8000b284: 22e7d783 lhu a5,558(a5) + 8000b288: 0007879b sext.w a5,a5 + 8000b28c: 1d078793 addi a5,a5,464 + 8000b290: 00f707b3 add a5,a4,a5 + 8000b294: 00a78593 addi a1,a5,10 + 8000b298: 00017797 auipc a5,0x17 + 8000b29c: e5078793 addi a5,a5,-432 # 800220e8 + 8000b2a0: 0007b783 ld a5,0(a5) + 8000b2a4: 22c7d783 lhu a5,556(a5) + 8000b2a8: 0007871b sext.w a4,a5 + 8000b2ac: 00017797 auipc a5,0x17 + 8000b2b0: e3c78793 addi a5,a5,-452 # 800220e8 + 8000b2b4: 0007b783 ld a5,0(a5) + 8000b2b8: 22e7d783 lhu a5,558(a5) + 8000b2bc: 0007879b sext.w a5,a5 + 8000b2c0: 40f707bb subw a5,a4,a5 + 8000b2c4: 0007879b sext.w a5,a5 + 8000b2c8: 00078613 mv a2,a5 + 8000b2cc: 00068513 mv a0,a3 + 8000b2d0: b09fb0ef jal ra,80006dd8 + 8000b2d4: 00017797 auipc a5,0x17 + 8000b2d8: e1478793 addi a5,a5,-492 # 800220e8 + 8000b2dc: 0007b683 ld a3,0(a5) + 8000b2e0: 00017797 auipc a5,0x17 + 8000b2e4: e0878793 addi a5,a5,-504 # 800220e8 + 8000b2e8: 0007b783 ld a5,0(a5) + 8000b2ec: 22e7d783 lhu a5,558(a5) + 8000b2f0: 0007879b sext.w a5,a5 + 8000b2f4: fd442703 lw a4,-44(s0) + 8000b2f8: 0ff77713 andi a4,a4,255 + 8000b2fc: 00f687b3 add a5,a3,a5 + 8000b300: 1ce78d23 sb a4,474(a5) + 8000b304: 00017797 auipc a5,0x17 + 8000b308: de478793 addi a5,a5,-540 # 800220e8 + 8000b30c: 0007b783 ld a5,0(a5) + 8000b310: 0447c783 lbu a5,68(a5) + 8000b314: 0017f793 andi a5,a5,1 + 8000b318: 0ff7f793 andi a5,a5,255 + 8000b31c: 04078063 beqz a5,8000b35c + 8000b320: 00017797 auipc a5,0x17 + 8000b324: dc878793 addi a5,a5,-568 # 800220e8 + 8000b328: 0007b703 ld a4,0(a5) + 8000b32c: 00017797 auipc a5,0x17 + 8000b330: dbc78793 addi a5,a5,-580 # 800220e8 + 8000b334: 0007b783 ld a5,0(a5) + 8000b338: 22e7d783 lhu a5,558(a5) + 8000b33c: 0007879b sext.w a5,a5 + 8000b340: 1d078793 addi a5,a5,464 + 8000b344: 00f707b3 add a5,a4,a5 + 8000b348: 00a78793 addi a5,a5,10 + 8000b34c: 00078593 mv a1,a5 + 8000b350: 0000c517 auipc a0,0xc + 8000b354: a6050513 addi a0,a0,-1440 # 80016db0 + 8000b358: ec5fc0ef jal ra,8000821c + 8000b35c: 00017797 auipc a5,0x17 + 8000b360: d8c78793 addi a5,a5,-628 # 800220e8 + 8000b364: 0007b783 ld a5,0(a5) + 8000b368: 22e7d783 lhu a5,558(a5) + 8000b36c: fef42223 sw a5,-28(s0) + 8000b370: 01c0006f j 8000b38c + 8000b374: 0000c517 auipc a0,0xc + 8000b378: a1c50513 addi a0,a0,-1508 # 80016d90 + 8000b37c: ea1fc0ef jal ra,8000821c + 8000b380: fe442783 lw a5,-28(s0) + 8000b384: 0017879b addiw a5,a5,1 + 8000b388: fef42223 sw a5,-28(s0) + 8000b38c: 00017797 auipc a5,0x17 + 8000b390: d5c78793 addi a5,a5,-676 # 800220e8 + 8000b394: 0007b783 ld a5,0(a5) + 8000b398: 22c7d783 lhu a5,556(a5) + 8000b39c: 0007871b sext.w a4,a5 + 8000b3a0: fe442783 lw a5,-28(s0) + 8000b3a4: 0007879b sext.w a5,a5 + 8000b3a8: fce7c6e3 blt a5,a4,8000b374 + 8000b3ac: 0640006f j 8000b410 + 8000b3b0: 00017797 auipc a5,0x17 + 8000b3b4: d3878793 addi a5,a5,-712 # 800220e8 + 8000b3b8: 0007b683 ld a3,0(a5) + 8000b3bc: 00017797 auipc a5,0x17 + 8000b3c0: d2c78793 addi a5,a5,-724 # 800220e8 + 8000b3c4: 0007b783 ld a5,0(a5) + 8000b3c8: 22c7d783 lhu a5,556(a5) + 8000b3cc: 0007879b sext.w a5,a5 + 8000b3d0: fd442703 lw a4,-44(s0) + 8000b3d4: 0ff77713 andi a4,a4,255 + 8000b3d8: 00f687b3 add a5,a3,a5 + 8000b3dc: 1ce78d23 sb a4,474(a5) + 8000b3e0: 00017797 auipc a5,0x17 + 8000b3e4: d0878793 addi a5,a5,-760 # 800220e8 + 8000b3e8: 0007b783 ld a5,0(a5) + 8000b3ec: 0447c783 lbu a5,68(a5) + 8000b3f0: 0017f793 andi a5,a5,1 + 8000b3f4: 0ff7f793 andi a5,a5,255 + 8000b3f8: 00078c63 beqz a5,8000b410 + 8000b3fc: fd442783 lw a5,-44(s0) + 8000b400: 00078593 mv a1,a5 + 8000b404: 0000c517 auipc a0,0xc + 8000b408: 99450513 addi a0,a0,-1644 # 80016d98 + 8000b40c: e11fc0ef jal ra,8000821c + 8000b410: fc042a23 sw zero,-44(s0) + 8000b414: 00017797 auipc a5,0x17 + 8000b418: cd478793 addi a5,a5,-812 # 800220e8 + 8000b41c: 0007b783 ld a5,0(a5) + 8000b420: 22c7d703 lhu a4,556(a5) + 8000b424: 0017071b addiw a4,a4,1 + 8000b428: 03071713 slli a4,a4,0x30 + 8000b42c: 03075713 srli a4,a4,0x30 + 8000b430: 22e79623 sh a4,556(a5) + 8000b434: 00017797 auipc a5,0x17 + 8000b438: cb478793 addi a5,a5,-844 # 800220e8 + 8000b43c: 0007b783 ld a5,0(a5) + 8000b440: 22e7d703 lhu a4,558(a5) + 8000b444: 0017071b addiw a4,a4,1 + 8000b448: 03071713 slli a4,a4,0x30 + 8000b44c: 03075713 srli a4,a4,0x30 + 8000b450: 22e79723 sh a4,558(a5) + 8000b454: 00017797 auipc a5,0x17 + 8000b458: c9478793 addi a5,a5,-876 # 800220e8 + 8000b45c: 0007b783 ld a5,0(a5) + 8000b460: 22c7d783 lhu a5,556(a5) + 8000b464: 0007871b sext.w a4,a5 + 8000b468: 04f00793 li a5,79 + 8000b46c: d6e7f063 bgeu a5,a4,8000a9cc + 8000b470: 00017797 auipc a5,0x17 + 8000b474: c7878793 addi a5,a5,-904 # 800220e8 + 8000b478: 0007b783 ld a5,0(a5) + 8000b47c: 22079623 sh zero,556(a5) + 8000b480: 00017797 auipc a5,0x17 + 8000b484: c6878793 addi a5,a5,-920 # 800220e8 + 8000b488: 0007b783 ld a5,0(a5) + 8000b48c: 22079723 sh zero,558(a5) + 8000b490: d3cff06f j 8000a9cc + 8000b494: 00000013 nop + 8000b498: d34ff06f j 8000a9cc + 8000b49c: 00000013 nop + 8000b4a0: d2cff06f j 8000a9cc + 8000b4a4: 00000013 nop + 8000b4a8: d24ff06f j 8000a9cc + 8000b4ac: 00000013 nop + 8000b4b0: d1cff06f j 8000a9cc + 8000b4b4: 00000013 nop + 8000b4b8: d14ff06f j 8000a9cc + 8000b4bc: 00000013 nop + 8000b4c0: d0cff06f j 8000a9cc + +000000008000b4c4 : + 8000b4c4: fe010113 addi sp,sp,-32 + 8000b4c8: 00813c23 sd s0,24(sp) + 8000b4cc: 02010413 addi s0,sp,32 + 8000b4d0: fea43423 sd a0,-24(s0) + 8000b4d4: feb43023 sd a1,-32(s0) + 8000b4d8: 00017797 auipc a5,0x17 + 8000b4dc: bf078793 addi a5,a5,-1040 # 800220c8 <_syscall_table_begin> + 8000b4e0: fe843703 ld a4,-24(s0) + 8000b4e4: 00e7b023 sd a4,0(a5) + 8000b4e8: 00017797 auipc a5,0x17 + 8000b4ec: be878793 addi a5,a5,-1048 # 800220d0 <_syscall_table_end> + 8000b4f0: fe043703 ld a4,-32(s0) + 8000b4f4: 00e7b023 sd a4,0(a5) + 8000b4f8: 00000013 nop + 8000b4fc: 01813403 ld s0,24(sp) + 8000b500: 02010113 addi sp,sp,32 + 8000b504: 00008067 ret + +000000008000b508 : + 8000b508: fe010113 addi sp,sp,-32 + 8000b50c: 00813c23 sd s0,24(sp) + 8000b510: 02010413 addi s0,sp,32 + 8000b514: fea43423 sd a0,-24(s0) + 8000b518: feb43023 sd a1,-32(s0) + 8000b51c: 00017797 auipc a5,0x17 + 8000b520: bbc78793 addi a5,a5,-1092 # 800220d8 <_sysvar_table_begin> + 8000b524: fe843703 ld a4,-24(s0) + 8000b528: 00e7b023 sd a4,0(a5) + 8000b52c: 00017797 auipc a5,0x17 + 8000b530: bb478793 addi a5,a5,-1100 # 800220e0 <_sysvar_table_end> + 8000b534: fe043703 ld a4,-32(s0) + 8000b538: 00e7b023 sd a4,0(a5) + 8000b53c: 00000013 nop + 8000b540: 01813403 ld s0,24(sp) + 8000b544: 02010113 addi sp,sp,32 + 8000b548: 00008067 ret + +000000008000b54c : + 8000b54c: fe010113 addi sp,sp,-32 + 8000b550: 00113c23 sd ra,24(sp) + 8000b554: 00813823 sd s0,16(sp) + 8000b558: 02010413 addi s0,sp,32 + 8000b55c: fe043423 sd zero,-24(s0) + 8000b560: 0000e597 auipc a1,0xe + 8000b564: 7c858593 addi a1,a1,1992 # 80019d28 <__rt_init_rti_start> + 8000b568: 0000e517 auipc a0,0xe + 8000b56c: 25050513 addi a0,a0,592 # 800197b8 <__fsym___cmd_reboot> + 8000b570: f55ff0ef jal ra,8000b4c4 + 8000b574: 0000e597 auipc a1,0xe + 8000b578: 7b458593 addi a1,a1,1972 # 80019d28 <__rt_init_rti_start> + 8000b57c: 0000e517 auipc a0,0xe + 8000b580: 7ac50513 addi a0,a0,1964 # 80019d28 <__rt_init_rti_start> + 8000b584: f85ff0ef jal ra,8000b508 + 8000b588: 23800593 li a1,568 + 8000b58c: 00100513 li a0,1 + 8000b590: 891f90ef jal ra,80004e20 + 8000b594: 00050713 mv a4,a0 + 8000b598: 00017797 auipc a5,0x17 + 8000b59c: b5078793 addi a5,a5,-1200 # 800220e8 + 8000b5a0: 00e7b023 sd a4,0(a5) + 8000b5a4: 00017797 auipc a5,0x17 + 8000b5a8: b4478793 addi a5,a5,-1212 # 800220e8 + 8000b5ac: 0007b783 ld a5,0(a5) + 8000b5b0: 00079c63 bnez a5,8000b5c8 + 8000b5b4: 0000c517 auipc a0,0xc + 8000b5b8: 80450513 addi a0,a0,-2044 # 80016db8 + 8000b5bc: c61fc0ef jal ra,8000821c + 8000b5c0: fff00793 li a5,-1 + 8000b5c4: 0740006f j 8000b638 + 8000b5c8: 00a00793 li a5,10 + 8000b5cc: 01400713 li a4,20 + 8000b5d0: 000016b7 lui a3,0x1 + 8000b5d4: 00000613 li a2,0 + 8000b5d8: fffff597 auipc a1,0xfffff + 8000b5dc: 38858593 addi a1,a1,904 # 8000a960 + 8000b5e0: 0000b517 auipc a0,0xb + 8000b5e4: 7f050513 addi a0,a0,2032 # 80016dd0 + 8000b5e8: e58fa0ef jal ra,80005c40 + 8000b5ec: fea43023 sd a0,-32(s0) + 8000b5f0: 00017797 auipc a5,0x17 + 8000b5f4: af878793 addi a5,a5,-1288 # 800220e8 + 8000b5f8: 0007b783 ld a5,0(a5) + 8000b5fc: 00000693 li a3,0 + 8000b600: 00000613 li a2,0 + 8000b604: 0000b597 auipc a1,0xb + 8000b608: 7d458593 addi a1,a1,2004 # 80016dd8 + 8000b60c: 00078513 mv a0,a5 + 8000b610: 8bdf50ef jal ra,80000ecc + 8000b614: 00100513 li a0,1 + 8000b618: cf5fe0ef jal ra,8000a30c + 8000b61c: fe043783 ld a5,-32(s0) + 8000b620: 00078a63 beqz a5,8000b634 + 8000b624: fe843783 ld a5,-24(s0) + 8000b628: 00079663 bnez a5,8000b634 + 8000b62c: fe043503 ld a0,-32(s0) + 8000b630: bc4fa0ef jal ra,800059f4 + 8000b634: 00000793 li a5,0 + 8000b638: 00078513 mv a0,a5 + 8000b63c: 01813083 ld ra,24(sp) + 8000b640: 01013403 ld s0,16(sp) + 8000b644: 02010113 addi sp,sp,32 + 8000b648: 00008067 ret + +000000008000b64c : + 8000b64c: fd010113 addi sp,sp,-48 + 8000b650: 02113423 sd ra,40(sp) + 8000b654: 02813023 sd s0,32(sp) + 8000b658: 03010413 addi s0,sp,48 + 8000b65c: 00050793 mv a5,a0 + 8000b660: fcb43823 sd a1,-48(s0) + 8000b664: 00060713 mv a4,a2 + 8000b668: fcf42e23 sw a5,-36(s0) + 8000b66c: 00070793 mv a5,a4 + 8000b670: fcf42c23 sw a5,-40(s0) + 8000b674: fe042623 sw zero,-20(s0) + 8000b678: feb40713 addi a4,s0,-21 + 8000b67c: fdc42783 lw a5,-36(s0) + 8000b680: 00100613 li a2,1 + 8000b684: 00070593 mv a1,a4 + 8000b688: 00078513 mv a0,a5 + 8000b68c: 1f8060ef jal ra,80011884 + 8000b690: 00050793 mv a5,a0 + 8000b694: 00078713 mv a4,a5 + 8000b698: 00100793 li a5,1 + 8000b69c: 00f70663 beq a4,a5,8000b6a8 + 8000b6a0: 00000793 li a5,0 + 8000b6a4: 0f40006f j 8000b798 + 8000b6a8: feb44783 lbu a5,-21(s0) + 8000b6ac: 00078713 mv a4,a5 + 8000b6b0: 00a00793 li a5,10 + 8000b6b4: fcf702e3 beq a4,a5,8000b678 + 8000b6b8: feb44783 lbu a5,-21(s0) + 8000b6bc: 00078713 mv a4,a5 + 8000b6c0: 00d00793 li a5,13 + 8000b6c4: faf70ae3 beq a4,a5,8000b678 + 8000b6c8: fec42783 lw a5,-20(s0) + 8000b6cc: 0017871b addiw a4,a5,1 + 8000b6d0: fee42623 sw a4,-20(s0) + 8000b6d4: 00078713 mv a4,a5 + 8000b6d8: fd043783 ld a5,-48(s0) + 8000b6dc: 00e787b3 add a5,a5,a4 + 8000b6e0: feb44703 lbu a4,-21(s0) + 8000b6e4: 00e78023 sb a4,0(a5) + 8000b6e8: 0980006f j 8000b780 + 8000b6ec: feb40713 addi a4,s0,-21 + 8000b6f0: fdc42783 lw a5,-36(s0) + 8000b6f4: 00100613 li a2,1 + 8000b6f8: 00070593 mv a1,a4 + 8000b6fc: 00078513 mv a0,a5 + 8000b700: 184060ef jal ra,80011884 + 8000b704: 00050793 mv a5,a0 + 8000b708: 00078713 mv a4,a5 + 8000b70c: 00100793 li a5,1 + 8000b710: 04f71e63 bne a4,a5,8000b76c + 8000b714: feb44783 lbu a5,-21(s0) + 8000b718: 00078713 mv a4,a5 + 8000b71c: 00a00793 li a5,10 + 8000b720: 00f70a63 beq a4,a5,8000b734 + 8000b724: feb44783 lbu a5,-21(s0) + 8000b728: 00078713 mv a4,a5 + 8000b72c: 00d00793 li a5,13 + 8000b730: 00f71c63 bne a4,a5,8000b748 + 8000b734: fec42783 lw a5,-20(s0) + 8000b738: fd043703 ld a4,-48(s0) + 8000b73c: 00f707b3 add a5,a4,a5 + 8000b740: 00078023 sb zero,0(a5) + 8000b744: 0500006f j 8000b794 + 8000b748: fec42783 lw a5,-20(s0) + 8000b74c: 0017871b addiw a4,a5,1 + 8000b750: fee42623 sw a4,-20(s0) + 8000b754: 00078713 mv a4,a5 + 8000b758: fd043783 ld a5,-48(s0) + 8000b75c: 00e787b3 add a5,a5,a4 + 8000b760: feb44703 lbu a4,-21(s0) + 8000b764: 00e78023 sb a4,0(a5) + 8000b768: 0180006f j 8000b780 + 8000b76c: fec42783 lw a5,-20(s0) + 8000b770: fd043703 ld a4,-48(s0) + 8000b774: 00f707b3 add a5,a4,a5 + 8000b778: 00078023 sb zero,0(a5) + 8000b77c: 0180006f j 8000b794 + 8000b780: fec42703 lw a4,-20(s0) + 8000b784: fd842783 lw a5,-40(s0) + 8000b788: 0007071b sext.w a4,a4 + 8000b78c: 0007879b sext.w a5,a5 + 8000b790: f4f74ee3 blt a4,a5,8000b6ec + 8000b794: fec42783 lw a5,-20(s0) + 8000b798: 00078513 mv a0,a5 + 8000b79c: 02813083 ld ra,40(sp) + 8000b7a0: 02013403 ld s0,32(sp) + 8000b7a4: 03010113 addi sp,sp,48 + 8000b7a8: 00008067 ret + +000000008000b7ac : + 8000b7ac: fb010113 addi sp,sp,-80 + 8000b7b0: 04113423 sd ra,72(sp) + 8000b7b4: 04813023 sd s0,64(sp) + 8000b7b8: 05010413 addi s0,sp,80 + 8000b7bc: faa43c23 sd a0,-72(s0) + 8000b7c0: 00058793 mv a5,a1 + 8000b7c4: faf42a23 sw a5,-76(s0) + 8000b7c8: fff00793 li a5,-1 + 8000b7cc: fef42423 sw a5,-24(s0) + 8000b7d0: fe042223 sw zero,-28(s0) + 8000b7d4: fb442783 lw a5,-76(s0) + 8000b7d8: 0007879b sext.w a5,a5 + 8000b7dc: 00079c63 bnez a5,8000b7f4 + 8000b7e0: fff00793 li a5,-1 + 8000b7e4: 25c0006f j 8000ba40 + 8000b7e8: fe442783 lw a5,-28(s0) + 8000b7ec: 0017879b addiw a5,a5,1 + 8000b7f0: fef42223 sw a5,-28(s0) + 8000b7f4: fe442783 lw a5,-28(s0) + 8000b7f8: fb843703 ld a4,-72(s0) + 8000b7fc: 00f707b3 add a5,a4,a5 + 8000b800: 0007c783 lbu a5,0(a5) + 8000b804: 00078713 mv a4,a5 + 8000b808: 02000793 li a5,32 + 8000b80c: 02f70a63 beq a4,a5,8000b840 + 8000b810: fe442783 lw a5,-28(s0) + 8000b814: fb843703 ld a4,-72(s0) + 8000b818: 00f707b3 add a5,a4,a5 + 8000b81c: 0007c783 lbu a5,0(a5) + 8000b820: 00078713 mv a4,a5 + 8000b824: 00900793 li a5,9 + 8000b828: 00f70c63 beq a4,a5,8000b840 + 8000b82c: fe442703 lw a4,-28(s0) + 8000b830: fb442783 lw a5,-76(s0) + 8000b834: 0007071b sext.w a4,a4 + 8000b838: 0007879b sext.w a5,a5 + 8000b83c: faf746e3 blt a4,a5,8000b7e8 + 8000b840: fe442783 lw a5,-28(s0) + 8000b844: 0207879b addiw a5,a5,32 + 8000b848: fcf42c23 sw a5,-40(s0) + 8000b84c: fd842783 lw a5,-40(s0) + 8000b850: 00078513 mv a0,a5 + 8000b854: dd5f80ef jal ra,80004628 + 8000b858: fca43823 sd a0,-48(s0) + 8000b85c: fd043783 ld a5,-48(s0) + 8000b860: 00079663 bnez a5,8000b86c + 8000b864: ffb00793 li a5,-5 + 8000b868: 1d80006f j 8000ba40 + 8000b86c: fe442783 lw a5,-28(s0) + 8000b870: 00078613 mv a2,a5 + 8000b874: fb843583 ld a1,-72(s0) + 8000b878: fd043503 ld a0,-48(s0) + 8000b87c: 9e8f50ef jal ra,80000a64 + 8000b880: fe442783 lw a5,-28(s0) + 8000b884: fd043703 ld a4,-48(s0) + 8000b888: 00f707b3 add a5,a4,a5 + 8000b88c: 00078023 sb zero,0(a5) + 8000b890: 0000b597 auipc a1,0xb + 8000b894: 55058593 addi a1,a1,1360 # 80016de0 + 8000b898: fd043503 ld a0,-48(s0) + 8000b89c: a50f50ef jal ra,80000aec + 8000b8a0: 00050793 mv a5,a0 + 8000b8a4: 00079e63 bnez a5,8000b8c0 + 8000b8a8: 0000b597 auipc a1,0xb + 8000b8ac: 54058593 addi a1,a1,1344 # 80016de8 + 8000b8b0: fd043503 ld a0,-48(s0) + 8000b8b4: a38f50ef jal ra,80000aec + 8000b8b8: 00050793 mv a5,a0 + 8000b8bc: 06078663 beqz a5,8000b928 + 8000b8c0: 00000613 li a2,0 + 8000b8c4: 00000593 li a1,0 + 8000b8c8: fd043503 ld a0,-48(s0) + 8000b8cc: 649050ef jal ra,80011714 + 8000b8d0: 00050793 mv a5,a0 + 8000b8d4: fef42423 sw a5,-24(s0) + 8000b8d8: fe842783 lw a5,-24(s0) + 8000b8dc: 0007879b sext.w a5,a5 + 8000b8e0: 0407d463 bgez a5,8000b928 + 8000b8e4: fd842783 lw a5,-40(s0) + 8000b8e8: fff7879b addiw a5,a5,-1 + 8000b8ec: 0007879b sext.w a5,a5 + 8000b8f0: 00078593 mv a1,a5 + 8000b8f4: fe442783 lw a5,-28(s0) + 8000b8f8: fb843703 ld a4,-72(s0) + 8000b8fc: 00078693 mv a3,a5 + 8000b900: 0000b617 auipc a2,0xb + 8000b904: 4f060613 addi a2,a2,1264 # 80016df0 + 8000b908: fd043503 ld a0,-48(s0) + 8000b90c: ee8fc0ef jal ra,80007ff4 + 8000b910: 00000613 li a2,0 + 8000b914: 00000593 li a1,0 + 8000b918: fd043503 ld a0,-48(s0) + 8000b91c: 5f9050ef jal ra,80011714 + 8000b920: 00050793 mv a5,a0 + 8000b924: fef42423 sw a5,-24(s0) + 8000b928: fd043503 ld a0,-48(s0) + 8000b92c: d68f90ef jal ra,80004e94 + 8000b930: fe842783 lw a5,-24(s0) + 8000b934: 0007879b sext.w a5,a5 + 8000b938: 0e07ce63 bltz a5,8000ba34 + 8000b93c: 10000513 li a0,256 + 8000b940: ce9f80ef jal ra,80004628 + 8000b944: fca43423 sd a0,-56(s0) + 8000b948: fc843783 ld a5,-56(s0) + 8000b94c: 00079c63 bnez a5,8000b964 + 8000b950: fe842783 lw a5,-24(s0) + 8000b954: 00078513 mv a0,a5 + 8000b958: 695050ef jal ra,800117ec + 8000b95c: ffb00793 li a5,-5 + 8000b960: 0e00006f j 8000ba40 + 8000b964: fe842783 lw a5,-24(s0) + 8000b968: 10000613 li a2,256 + 8000b96c: fc843583 ld a1,-56(s0) + 8000b970: 00078513 mv a0,a5 + 8000b974: cd9ff0ef jal ra,8000b64c + 8000b978: 00050793 mv a5,a0 + 8000b97c: fcf42223 sw a5,-60(s0) + 8000b980: fc442783 lw a5,-60(s0) + 8000b984: 0007879b sext.w a5,a5 + 8000b988: 08f05263 blez a5,8000ba0c + 8000b98c: fe0401a3 sb zero,-29(s0) + 8000b990: fc042e23 sw zero,-36(s0) + 8000b994: 0440006f j 8000b9d8 + 8000b998: fdc42783 lw a5,-36(s0) + 8000b99c: fc843703 ld a4,-56(s0) + 8000b9a0: 00f707b3 add a5,a4,a5 + 8000b9a4: 0007c783 lbu a5,0(a5) + 8000b9a8: fef401a3 sb a5,-29(s0) + 8000b9ac: fe344783 lbu a5,-29(s0) + 8000b9b0: 0ff7f713 andi a4,a5,255 + 8000b9b4: 02000793 li a5,32 + 8000b9b8: 00f70a63 beq a4,a5,8000b9cc + 8000b9bc: fe344783 lbu a5,-29(s0) + 8000b9c0: 0ff7f713 andi a4,a5,255 + 8000b9c4: 00900793 li a5,9 + 8000b9c8: 02f71263 bne a4,a5,8000b9ec + 8000b9cc: fdc42783 lw a5,-36(s0) + 8000b9d0: 0017879b addiw a5,a5,1 + 8000b9d4: fcf42e23 sw a5,-36(s0) + 8000b9d8: fdc42703 lw a4,-36(s0) + 8000b9dc: fc442783 lw a5,-60(s0) + 8000b9e0: 0007071b sext.w a4,a4 + 8000b9e4: 0007879b sext.w a5,a5 + 8000b9e8: faf748e3 blt a4,a5,8000b998 + 8000b9ec: fe344783 lbu a5,-29(s0) + 8000b9f0: 0ff7f713 andi a4,a5,255 + 8000b9f4: 02300793 li a5,35 + 8000b9f8: 00f70a63 beq a4,a5,8000ba0c + 8000b9fc: fc442783 lw a5,-60(s0) + 8000ba00: 00078593 mv a1,a5 + 8000ba04: fc843503 ld a0,-56(s0) + 8000ba08: 8f8fe0ef jal ra,80009b00 + 8000ba0c: fc442783 lw a5,-60(s0) + 8000ba10: 0007879b sext.w a5,a5 + 8000ba14: f4f048e3 bgtz a5,8000b964 + 8000ba18: fe842783 lw a5,-24(s0) + 8000ba1c: 00078513 mv a0,a5 + 8000ba20: 5cd050ef jal ra,800117ec + 8000ba24: fc843503 ld a0,-56(s0) + 8000ba28: c6cf90ef jal ra,80004e94 + 8000ba2c: fe042623 sw zero,-20(s0) + 8000ba30: 00c0006f j 8000ba3c + 8000ba34: fff00793 li a5,-1 + 8000ba38: fef42623 sw a5,-20(s0) + 8000ba3c: fec42783 lw a5,-20(s0) + 8000ba40: 00078513 mv a0,a5 + 8000ba44: 04813083 ld ra,72(sp) + 8000ba48: 04013403 ld s0,64(sp) + 8000ba4c: 05010113 addi sp,sp,80 + 8000ba50: 00008067 ret + +000000008000ba54 : + 8000ba54: fe010113 addi sp,sp,-32 + 8000ba58: 00113c23 sd ra,24(sp) + 8000ba5c: 00813823 sd s0,16(sp) + 8000ba60: 02010413 addi s0,sp,32 + 8000ba64: 00050793 mv a5,a0 + 8000ba68: feb43023 sd a1,-32(s0) + 8000ba6c: fef42623 sw a5,-20(s0) + 8000ba70: fec42783 lw a5,-20(s0) + 8000ba74: 0007871b sext.w a4,a5 + 8000ba78: 00100793 li a5,1 + 8000ba7c: 00f71a63 bne a4,a5,8000ba90 + 8000ba80: 0000e517 auipc a0,0xe + 8000ba84: 42050513 addi a0,a0,1056 # 80019ea0 + 8000ba88: 7dd070ef jal ra,80013a64 + 8000ba8c: 0180006f j 8000baa4 + 8000ba90: fe043783 ld a5,-32(s0) + 8000ba94: 00878793 addi a5,a5,8 + 8000ba98: 0007b783 ld a5,0(a5) + 8000ba9c: 00078513 mv a0,a5 + 8000baa0: 7c5070ef jal ra,80013a64 + 8000baa4: 00000793 li a5,0 + 8000baa8: 00078513 mv a0,a5 + 8000baac: 01813083 ld ra,24(sp) + 8000bab0: 01013403 ld s0,16(sp) + 8000bab4: 02010113 addi sp,sp,32 + 8000bab8: 00008067 ret + +000000008000babc : + 8000babc: fe010113 addi sp,sp,-32 + 8000bac0: 00113c23 sd ra,24(sp) + 8000bac4: 00813823 sd s0,16(sp) + 8000bac8: 02010413 addi s0,sp,32 + 8000bacc: 00050793 mv a5,a0 + 8000bad0: feb43023 sd a1,-32(s0) + 8000bad4: fef42623 sw a5,-20(s0) + 8000bad8: fec42783 lw a5,-20(s0) + 8000badc: 0007871b sext.w a4,a5 + 8000bae0: 00300793 li a5,3 + 8000bae4: 02f70063 beq a4,a5,8000bb04 + 8000bae8: 0000b517 auipc a0,0xb + 8000baec: 31850513 addi a0,a0,792 # 80016e00 + 8000baf0: f2cfc0ef jal ra,8000821c + 8000baf4: 0000b517 auipc a0,0xb + 8000baf8: 32450513 addi a0,a0,804 # 80016e18 + 8000bafc: f20fc0ef jal ra,8000821c + 8000bb00: 0280006f j 8000bb28 + 8000bb04: fe043783 ld a5,-32(s0) + 8000bb08: 00878793 addi a5,a5,8 + 8000bb0c: 0007b703 ld a4,0(a5) + 8000bb10: fe043783 ld a5,-32(s0) + 8000bb14: 01078793 addi a5,a5,16 + 8000bb18: 0007b783 ld a5,0(a5) + 8000bb1c: 00078593 mv a1,a5 + 8000bb20: 00070513 mv a0,a4 + 8000bb24: 5e4080ef jal ra,80014108 + 8000bb28: 00000793 li a5,0 + 8000bb2c: 00078513 mv a0,a5 + 8000bb30: 01813083 ld ra,24(sp) + 8000bb34: 01013403 ld s0,16(sp) + 8000bb38: 02010113 addi sp,sp,32 + 8000bb3c: 00008067 ret + +000000008000bb40 : + 8000bb40: fb010113 addi sp,sp,-80 + 8000bb44: 04113423 sd ra,72(sp) + 8000bb48: 04813023 sd s0,64(sp) + 8000bb4c: 02913c23 sd s1,56(sp) + 8000bb50: 05010413 addi s0,sp,80 + 8000bb54: 00050793 mv a5,a0 + 8000bb58: fab43823 sd a1,-80(s0) + 8000bb5c: faf42e23 sw a5,-68(s0) + 8000bb60: fbc42783 lw a5,-68(s0) + 8000bb64: 0007871b sext.w a4,a5 + 8000bb68: 00300793 li a5,3 + 8000bb6c: 02f70063 beq a4,a5,8000bb8c + 8000bb70: 0000b517 auipc a0,0xb + 8000bb74: 2c050513 addi a0,a0,704 # 80016e30 + 8000bb78: ea4fc0ef jal ra,8000821c + 8000bb7c: 0000b517 auipc a0,0xb + 8000bb80: 2cc50513 addi a0,a0,716 # 80016e48 + 8000bb84: e98fc0ef jal ra,8000821c + 8000bb88: 1c80006f j 8000bd50 + 8000bb8c: fc043c23 sd zero,-40(s0) + 8000bb90: fb043783 ld a5,-80(s0) + 8000bb94: 00878793 addi a5,a5,8 + 8000bb98: 0007b703 ld a4,0(a5) + 8000bb9c: fb043783 ld a5,-80(s0) + 8000bba0: 01078793 addi a5,a5,16 + 8000bba4: 0007b783 ld a5,0(a5) + 8000bba8: 00078613 mv a2,a5 + 8000bbac: 00070593 mv a1,a4 + 8000bbb0: 0000b517 auipc a0,0xb + 8000bbb4: 2d050513 addi a0,a0,720 # 80016e80 + 8000bbb8: e64fc0ef jal ra,8000821c + 8000bbbc: fb043783 ld a5,-80(s0) + 8000bbc0: 01078793 addi a5,a5,16 + 8000bbc4: 0007b783 ld a5,0(a5) + 8000bbc8: 00000613 li a2,0 + 8000bbcc: 000105b7 lui a1,0x10 + 8000bbd0: 00078513 mv a0,a5 + 8000bbd4: 341050ef jal ra,80011714 + 8000bbd8: 00050793 mv a5,a0 + 8000bbdc: fcf42623 sw a5,-52(s0) + 8000bbe0: fcc42783 lw a5,-52(s0) + 8000bbe4: 0007879b sext.w a5,a5 + 8000bbe8: 0c07c863 bltz a5,8000bcb8 + 8000bbec: fcc42783 lw a5,-52(s0) + 8000bbf0: 00078513 mv a0,a5 + 8000bbf4: 3f9050ef jal ra,800117ec + 8000bbf8: 10000513 li a0,256 + 8000bbfc: a2df80ef jal ra,80004628 + 8000bc00: fca43c23 sd a0,-40(s0) + 8000bc04: fd843783 ld a5,-40(s0) + 8000bc08: 00079c63 bnez a5,8000bc20 + 8000bc0c: 0000b517 auipc a0,0xb + 8000bc10: 28450513 addi a0,a0,644 # 80016e90 + 8000bc14: e08fc0ef jal ra,8000821c + 8000bc18: ffb00793 li a5,-5 + 8000bc1c: 1380006f j 8000bd54 + 8000bc20: fb043783 ld a5,-80(s0) + 8000bc24: 00878793 addi a5,a5,8 + 8000bc28: 0007b483 ld s1,0(a5) + 8000bc2c: fb043783 ld a5,-80(s0) + 8000bc30: 00878793 addi a5,a5,8 + 8000bc34: 0007b783 ld a5,0(a5) + 8000bc38: 00078513 mv a0,a5 + 8000bc3c: da0fb0ef jal ra,800071dc + 8000bc40: 00050793 mv a5,a0 + 8000bc44: 00f487b3 add a5,s1,a5 + 8000bc48: fcf43823 sd a5,-48(s0) + 8000bc4c: 0240006f j 8000bc70 + 8000bc50: fd043783 ld a5,-48(s0) + 8000bc54: 0007c783 lbu a5,0(a5) + 8000bc58: 00078713 mv a4,a5 + 8000bc5c: 02f00793 li a5,47 + 8000bc60: 02f70463 beq a4,a5,8000bc88 + 8000bc64: fd043783 ld a5,-48(s0) + 8000bc68: fff78793 addi a5,a5,-1 + 8000bc6c: fcf43823 sd a5,-48(s0) + 8000bc70: fb043783 ld a5,-80(s0) + 8000bc74: 00878793 addi a5,a5,8 + 8000bc78: 0007b783 ld a5,0(a5) + 8000bc7c: fd043703 ld a4,-48(s0) + 8000bc80: fcf718e3 bne a4,a5,8000bc50 + 8000bc84: 0080006f j 8000bc8c + 8000bc88: 00000013 nop + 8000bc8c: fb043783 ld a5,-80(s0) + 8000bc90: 01078793 addi a5,a5,16 + 8000bc94: 0007b783 ld a5,0(a5) + 8000bc98: fd043703 ld a4,-48(s0) + 8000bc9c: 00078693 mv a3,a5 + 8000bca0: 0000b617 auipc a2,0xb + 8000bca4: 20060613 addi a2,a2,512 # 80016ea0 + 8000bca8: 0ff00593 li a1,255 + 8000bcac: fd843503 ld a0,-40(s0) + 8000bcb0: b44fc0ef jal ra,80007ff4 + 8000bcb4: 0600006f j 8000bd14 + 8000bcb8: fb043783 ld a5,-80(s0) + 8000bcbc: 01078793 addi a5,a5,16 + 8000bcc0: 0007b783 ld a5,0(a5) + 8000bcc4: 00000613 li a2,0 + 8000bcc8: 00000593 li a1,0 + 8000bccc: 00078513 mv a0,a5 + 8000bcd0: 245050ef jal ra,80011714 + 8000bcd4: 00050793 mv a5,a0 + 8000bcd8: fcf42623 sw a5,-52(s0) + 8000bcdc: fcc42783 lw a5,-52(s0) + 8000bce0: 0007879b sext.w a5,a5 + 8000bce4: 0207c263 bltz a5,8000bd08 + 8000bce8: fcc42783 lw a5,-52(s0) + 8000bcec: 00078513 mv a0,a5 + 8000bcf0: 2fd050ef jal ra,800117ec + 8000bcf4: fb043783 ld a5,-80(s0) + 8000bcf8: 01078793 addi a5,a5,16 + 8000bcfc: 0007b783 ld a5,0(a5) + 8000bd00: 00078513 mv a0,a5 + 8000bd04: 689050ef jal ra,80011b8c + 8000bd08: fb043783 ld a5,-80(s0) + 8000bd0c: 0107b783 ld a5,16(a5) + 8000bd10: fcf43c23 sd a5,-40(s0) + 8000bd14: fb043783 ld a5,-80(s0) + 8000bd18: 00878793 addi a5,a5,8 + 8000bd1c: 0007b783 ld a5,0(a5) + 8000bd20: fd843583 ld a1,-40(s0) + 8000bd24: 00078513 mv a0,a5 + 8000bd28: 601050ef jal ra,80011b28 + 8000bd2c: fd843783 ld a5,-40(s0) + 8000bd30: 02078063 beqz a5,8000bd50 + 8000bd34: fb043783 ld a5,-80(s0) + 8000bd38: 01078793 addi a5,a5,16 + 8000bd3c: 0007b783 ld a5,0(a5) + 8000bd40: fd843703 ld a4,-40(s0) + 8000bd44: 00f70663 beq a4,a5,8000bd50 + 8000bd48: fd843503 ld a0,-40(s0) + 8000bd4c: 948f90ef jal ra,80004e94 + 8000bd50: 00000793 li a5,0 + 8000bd54: 00078513 mv a0,a5 + 8000bd58: 04813083 ld ra,72(sp) + 8000bd5c: 04013403 ld s0,64(sp) + 8000bd60: 03813483 ld s1,56(sp) + 8000bd64: 05010113 addi sp,sp,80 + 8000bd68: 00008067 ret + +000000008000bd6c : + 8000bd6c: fd010113 addi sp,sp,-48 + 8000bd70: 02113423 sd ra,40(sp) + 8000bd74: 02813023 sd s0,32(sp) + 8000bd78: 03010413 addi s0,sp,48 + 8000bd7c: 00050793 mv a5,a0 + 8000bd80: fcb43823 sd a1,-48(s0) + 8000bd84: fcf42e23 sw a5,-36(s0) + 8000bd88: fdc42783 lw a5,-36(s0) + 8000bd8c: 0007871b sext.w a4,a5 + 8000bd90: 00100793 li a5,1 + 8000bd94: 02f71263 bne a4,a5,8000bdb8 + 8000bd98: 0000b517 auipc a0,0xb + 8000bd9c: 11050513 addi a0,a0,272 # 80016ea8 + 8000bda0: c7cfc0ef jal ra,8000821c + 8000bda4: 0000b517 auipc a0,0xb + 8000bda8: 11c50513 addi a0,a0,284 # 80016ec0 + 8000bdac: c70fc0ef jal ra,8000821c + 8000bdb0: 00000793 li a5,0 + 8000bdb4: 0500006f j 8000be04 + 8000bdb8: 00100793 li a5,1 + 8000bdbc: fef42623 sw a5,-20(s0) + 8000bdc0: 02c0006f j 8000bdec + 8000bdc4: fec42783 lw a5,-20(s0) + 8000bdc8: 00379793 slli a5,a5,0x3 + 8000bdcc: fd043703 ld a4,-48(s0) + 8000bdd0: 00f707b3 add a5,a4,a5 + 8000bdd4: 0007b783 ld a5,0(a5) + 8000bdd8: 00078513 mv a0,a5 + 8000bddc: 699070ef jal ra,80013c74 + 8000bde0: fec42783 lw a5,-20(s0) + 8000bde4: 0017879b addiw a5,a5,1 + 8000bde8: fef42623 sw a5,-20(s0) + 8000bdec: fec42703 lw a4,-20(s0) + 8000bdf0: fdc42783 lw a5,-36(s0) + 8000bdf4: 0007071b sext.w a4,a4 + 8000bdf8: 0007879b sext.w a5,a5 + 8000bdfc: fcf744e3 blt a4,a5,8000bdc4 + 8000be00: 00000793 li a5,0 + 8000be04: 00078513 mv a0,a5 + 8000be08: 02813083 ld ra,40(sp) + 8000be0c: 02013403 ld s0,32(sp) + 8000be10: 03010113 addi sp,sp,48 + 8000be14: 00008067 ret + +000000008000be18 : + 8000be18: fc010113 addi sp,sp,-64 + 8000be1c: 02113c23 sd ra,56(sp) + 8000be20: 02813823 sd s0,48(sp) + 8000be24: 04010413 addi s0,sp,64 + 8000be28: fca43423 sd a0,-56(s0) + 8000be2c: 00058793 mv a5,a1 + 8000be30: 00060713 mv a4,a2 + 8000be34: fcf403a3 sb a5,-57(s0) + 8000be38: 00070793 mv a5,a4 + 8000be3c: fcf40323 sb a5,-58(s0) + 8000be40: fe043423 sd zero,-24(s0) + 8000be44: fe043023 sd zero,-32(s0) + 8000be48: fc843783 ld a5,-56(s0) + 8000be4c: 1c078063 beqz a5,8000c00c + 8000be50: 10000513 li a0,256 + 8000be54: fd4f80ef jal ra,80004628 + 8000be58: fca43c23 sd a0,-40(s0) + 8000be5c: fd843783 ld a5,-40(s0) + 8000be60: 1a078a63 beqz a5,8000c014 + 8000be64: fc843503 ld a0,-56(s0) + 8000be68: 6b9050ef jal ra,80011d20 + 8000be6c: fea43423 sd a0,-24(s0) + 8000be70: fe843783 ld a5,-24(s0) + 8000be74: 02079663 bnez a5,8000bea0 + 8000be78: fc744783 lbu a5,-57(s0) + 8000be7c: 0ff7f793 andi a5,a5,255 + 8000be80: 00079a63 bnez a5,8000be94 + 8000be84: fc843583 ld a1,-56(s0) + 8000be88: 0000b517 auipc a0,0xb + 8000be8c: 05050513 addi a0,a0,80 # 80016ed8 + 8000be90: b8cfc0ef jal ra,8000821c + 8000be94: fd843503 ld a0,-40(s0) + 8000be98: ffdf80ef jal ra,80004e94 + 8000be9c: 17c0006f j 8000c018 + 8000bea0: fe843503 ld a0,-24(s0) + 8000bea4: 77d050ef jal ra,80011e20 + 8000bea8: fea43023 sd a0,-32(s0) + 8000beac: fe043783 ld a5,-32(s0) + 8000beb0: 0e078c63 beqz a5,8000bfa8 + 8000beb4: fe043783 ld a5,-32(s0) + 8000beb8: 00478793 addi a5,a5,4 + 8000bebc: 00078593 mv a1,a5 + 8000bec0: 0000b517 auipc a0,0xb + 8000bec4: 03050513 addi a0,a0,48 # 80016ef0 + 8000bec8: a94fb0ef jal ra,8000715c + 8000becc: 00050793 mv a5,a0 + 8000bed0: fc0788e3 beqz a5,8000bea0 + 8000bed4: fe043783 ld a5,-32(s0) + 8000bed8: 00478793 addi a5,a5,4 + 8000bedc: 00078593 mv a1,a5 + 8000bee0: 0000b517 auipc a0,0xb + 8000bee4: 01850513 addi a0,a0,24 # 80016ef8 + 8000bee8: a74fb0ef jal ra,8000715c + 8000beec: 00050793 mv a5,a0 + 8000bef0: fa0788e3 beqz a5,8000bea0 + 8000bef4: fe043783 ld a5,-32(s0) + 8000bef8: 00478793 addi a5,a5,4 + 8000befc: 00078693 mv a3,a5 + 8000bf00: fc843603 ld a2,-56(s0) + 8000bf04: 0000b597 auipc a1,0xb + 8000bf08: f9c58593 addi a1,a1,-100 # 80016ea0 + 8000bf0c: fd843503 ld a0,-40(s0) + 8000bf10: 9a8fc0ef jal ra,800080b8 + 8000bf14: fe043783 ld a5,-32(s0) + 8000bf18: 0007c783 lbu a5,0(a5) + 8000bf1c: 00078713 mv a4,a5 + 8000bf20: 00100793 li a5,1 + 8000bf24: 04f71a63 bne a4,a5,8000bf78 + 8000bf28: fd843503 ld a0,-40(s0) + 8000bf2c: 461050ef jal ra,80011b8c + 8000bf30: 00050793 mv a5,a0 + 8000bf34: 02078263 beqz a5,8000bf58 + 8000bf38: fc744783 lbu a5,-57(s0) + 8000bf3c: 0ff7f793 andi a5,a5,255 + 8000bf40: f60790e3 bnez a5,8000bea0 + 8000bf44: fd843583 ld a1,-40(s0) + 8000bf48: 0000b517 auipc a0,0xb + 8000bf4c: f9050513 addi a0,a0,-112 # 80016ed8 + 8000bf50: accfc0ef jal ra,8000821c + 8000bf54: f4dff06f j 8000bea0 + 8000bf58: fc644783 lbu a5,-58(s0) + 8000bf5c: 0ff7f793 andi a5,a5,255 + 8000bf60: f40780e3 beqz a5,8000bea0 + 8000bf64: fd843583 ld a1,-40(s0) + 8000bf68: 0000b517 auipc a0,0xb + 8000bf6c: f9850513 addi a0,a0,-104 # 80016f00 + 8000bf70: aacfc0ef jal ra,8000821c + 8000bf74: f2dff06f j 8000bea0 + 8000bf78: fe043783 ld a5,-32(s0) + 8000bf7c: 0007c783 lbu a5,0(a5) + 8000bf80: 00078713 mv a4,a5 + 8000bf84: 00200793 li a5,2 + 8000bf88: f0f71ce3 bne a4,a5,8000bea0 + 8000bf8c: fc644703 lbu a4,-58(s0) + 8000bf90: fc744783 lbu a5,-57(s0) + 8000bf94: 00070613 mv a2,a4 + 8000bf98: 00078593 mv a1,a5 + 8000bf9c: fd843503 ld a0,-40(s0) + 8000bfa0: e79ff0ef jal ra,8000be18 + 8000bfa4: efdff06f j 8000bea0 + 8000bfa8: 00000013 nop + 8000bfac: fe843503 ld a0,-24(s0) + 8000bfb0: 024060ef jal ra,80011fd4 + 8000bfb4: fd843503 ld a0,-40(s0) + 8000bfb8: eddf80ef jal ra,80004e94 + 8000bfbc: fc843503 ld a0,-56(s0) + 8000bfc0: 3cd050ef jal ra,80011b8c + 8000bfc4: 00050793 mv a5,a0 + 8000bfc8: 02078263 beqz a5,8000bfec + 8000bfcc: fc744783 lbu a5,-57(s0) + 8000bfd0: 0ff7f793 andi a5,a5,255 + 8000bfd4: 04079263 bnez a5,8000c018 + 8000bfd8: fc843583 ld a1,-56(s0) + 8000bfdc: 0000b517 auipc a0,0xb + 8000bfe0: efc50513 addi a0,a0,-260 # 80016ed8 + 8000bfe4: a38fc0ef jal ra,8000821c + 8000bfe8: 0300006f j 8000c018 + 8000bfec: fc644783 lbu a5,-58(s0) + 8000bff0: 0ff7f793 andi a5,a5,255 + 8000bff4: 02078263 beqz a5,8000c018 + 8000bff8: fc843583 ld a1,-56(s0) + 8000bffc: 0000b517 auipc a0,0xb + 8000c000: f1450513 addi a0,a0,-236 # 80016f10 + 8000c004: a18fc0ef jal ra,8000821c + 8000c008: 0100006f j 8000c018 + 8000c00c: 00000013 nop + 8000c010: 0080006f j 8000c018 + 8000c014: 00000013 nop + 8000c018: 03813083 ld ra,56(sp) + 8000c01c: 03013403 ld s0,48(sp) + 8000c020: 04010113 addi sp,sp,64 + 8000c024: 00008067 ret + +000000008000c028 : + 8000c028: f5010113 addi sp,sp,-176 + 8000c02c: 0a113423 sd ra,168(sp) + 8000c030: 0a813023 sd s0,160(sp) + 8000c034: 0b010413 addi s0,sp,176 + 8000c038: 00050793 mv a5,a0 + 8000c03c: f4b43823 sd a1,-176(s0) + 8000c040: f4f42e23 sw a5,-164(s0) + 8000c044: fe0403a3 sb zero,-25(s0) + 8000c048: fe040323 sb zero,-26(s0) + 8000c04c: fe0402a3 sb zero,-27(s0) + 8000c050: f5c42783 lw a5,-164(s0) + 8000c054: 0007871b sext.w a4,a5 + 8000c058: 00100793 li a5,1 + 8000c05c: 02f71263 bne a4,a5,8000c080 + 8000c060: 0000b517 auipc a0,0xb + 8000c064: ec850513 addi a0,a0,-312 # 80016f28 + 8000c068: 9b4fc0ef jal ra,8000821c + 8000c06c: 0000b517 auipc a0,0xb + 8000c070: edc50513 addi a0,a0,-292 # 80016f48 + 8000c074: 9a8fc0ef jal ra,8000821c + 8000c078: 00000793 li a5,0 + 8000c07c: 2d40006f j 8000c350 + 8000c080: f5043783 ld a5,-176(s0) + 8000c084: 00878793 addi a5,a5,8 + 8000c088: 0007b783 ld a5,0(a5) + 8000c08c: 0007c783 lbu a5,0(a5) + 8000c090: 00078713 mv a4,a5 + 8000c094: 02d00793 li a5,45 + 8000c098: 10f71663 bne a4,a5,8000c1a4 + 8000c09c: fe042423 sw zero,-24(s0) + 8000c0a0: 0d00006f j 8000c170 + 8000c0a4: f5043783 ld a5,-176(s0) + 8000c0a8: 00878793 addi a5,a5,8 + 8000c0ac: 0007b703 ld a4,0(a5) + 8000c0b0: fe842783 lw a5,-24(s0) + 8000c0b4: 00f707b3 add a5,a4,a5 + 8000c0b8: 0007c783 lbu a5,0(a5) + 8000c0bc: 0007879b sext.w a5,a5 + 8000c0c0: 00078693 mv a3,a5 + 8000c0c4: 07600713 li a4,118 + 8000c0c8: 04e68c63 beq a3,a4,8000c120 + 8000c0cc: 00078693 mv a3,a5 + 8000c0d0: 07600713 li a4,118 + 8000c0d4: 04d74c63 blt a4,a3,8000c12c + 8000c0d8: 00078693 mv a3,a5 + 8000c0dc: 07200713 li a4,114 + 8000c0e0: 02e68a63 beq a3,a4,8000c114 + 8000c0e4: 00078693 mv a3,a5 + 8000c0e8: 07200713 li a4,114 + 8000c0ec: 04d74063 blt a4,a3,8000c12c + 8000c0f0: 00078693 mv a3,a5 + 8000c0f4: 02d00713 li a4,45 + 8000c0f8: 06e68463 beq a3,a4,8000c160 + 8000c0fc: 00078713 mv a4,a5 + 8000c100: 06600793 li a5,102 + 8000c104: 02f71463 bne a4,a5,8000c12c + 8000c108: 00100793 li a5,1 + 8000c10c: fef403a3 sb a5,-25(s0) + 8000c110: 0540006f j 8000c164 + 8000c114: 00100793 li a5,1 + 8000c118: fef40323 sb a5,-26(s0) + 8000c11c: 0480006f j 8000c164 + 8000c120: 00100793 li a5,1 + 8000c124: fef402a3 sb a5,-27(s0) + 8000c128: 03c0006f j 8000c164 + 8000c12c: f5043783 ld a5,-176(s0) + 8000c130: 00878793 addi a5,a5,8 + 8000c134: 0007b703 ld a4,0(a5) + 8000c138: fe842783 lw a5,-24(s0) + 8000c13c: 00f707b3 add a5,a4,a5 + 8000c140: 0007c783 lbu a5,0(a5) + 8000c144: 0007879b sext.w a5,a5 + 8000c148: 00078593 mv a1,a5 + 8000c14c: 0000b517 auipc a0,0xb + 8000c150: e1c50513 addi a0,a0,-484 # 80016f68 + 8000c154: 8c8fc0ef jal ra,8000821c + 8000c158: 00000793 li a5,0 + 8000c15c: 1f40006f j 8000c350 + 8000c160: 00000013 nop + 8000c164: fe842783 lw a5,-24(s0) + 8000c168: 0017879b addiw a5,a5,1 + 8000c16c: fef42423 sw a5,-24(s0) + 8000c170: f5043783 ld a5,-176(s0) + 8000c174: 00878793 addi a5,a5,8 + 8000c178: 0007b703 ld a4,0(a5) + 8000c17c: fe842783 lw a5,-24(s0) + 8000c180: 00f707b3 add a5,a4,a5 + 8000c184: 0007c783 lbu a5,0(a5) + 8000c188: f0079ee3 bnez a5,8000c0a4 + 8000c18c: f5c42783 lw a5,-164(s0) + 8000c190: fff7879b addiw a5,a5,-1 + 8000c194: f4f42e23 sw a5,-164(s0) + 8000c198: f5043783 ld a5,-176(s0) + 8000c19c: 00878793 addi a5,a5,8 + 8000c1a0: f4f43823 sd a5,-176(s0) + 8000c1a4: 00100793 li a5,1 + 8000c1a8: fef42623 sw a5,-20(s0) + 8000c1ac: 18c0006f j 8000c338 + 8000c1b0: fec42783 lw a5,-20(s0) + 8000c1b4: 00379793 slli a5,a5,0x3 + 8000c1b8: f5043703 ld a4,-176(s0) + 8000c1bc: 00f707b3 add a5,a4,a5 + 8000c1c0: 0007b783 ld a5,0(a5) + 8000c1c4: f6040713 addi a4,s0,-160 + 8000c1c8: 00070593 mv a1,a4 + 8000c1cc: 00078513 mv a0,a5 + 8000c1d0: 219050ef jal ra,80011be8 + 8000c1d4: 00050793 mv a5,a0 + 8000c1d8: 12079263 bnez a5,8000c2fc + 8000c1dc: f7042783 lw a5,-144(s0) + 8000c1e0: 00078713 mv a4,a5 + 8000c1e4: 000047b7 lui a5,0x4 + 8000c1e8: 00f777b3 and a5,a4,a5 + 8000c1ec: 0007879b sext.w a5,a5 + 8000c1f0: 06078463 beqz a5,8000c258 + 8000c1f4: fe644783 lbu a5,-26(s0) + 8000c1f8: 0ff7f793 andi a5,a5,255 + 8000c1fc: 02079663 bnez a5,8000c228 + 8000c200: fec42783 lw a5,-20(s0) + 8000c204: 00379793 slli a5,a5,0x3 + 8000c208: f5043703 ld a4,-176(s0) + 8000c20c: 00f707b3 add a5,a4,a5 + 8000c210: 0007b783 ld a5,0(a5) # 4000 <__STACKSIZE__> + 8000c214: 00078593 mv a1,a5 + 8000c218: 0000b517 auipc a0,0xb + 8000c21c: d6850513 addi a0,a0,-664 # 80016f80 + 8000c220: ffdfb0ef jal ra,8000821c + 8000c224: 1080006f j 8000c32c + 8000c228: fec42783 lw a5,-20(s0) + 8000c22c: 00379793 slli a5,a5,0x3 + 8000c230: f5043703 ld a4,-176(s0) + 8000c234: 00f707b3 add a5,a4,a5 + 8000c238: 0007b783 ld a5,0(a5) + 8000c23c: fe544683 lbu a3,-27(s0) + 8000c240: fe744703 lbu a4,-25(s0) + 8000c244: 00068613 mv a2,a3 + 8000c248: 00070593 mv a1,a4 + 8000c24c: 00078513 mv a0,a5 + 8000c250: bc9ff0ef jal ra,8000be18 + 8000c254: 0d80006f j 8000c32c + 8000c258: f7042783 lw a5,-144(s0) + 8000c25c: 00078713 mv a4,a5 + 8000c260: 000087b7 lui a5,0x8 + 8000c264: 00f777b3 and a5,a4,a5 + 8000c268: 0007879b sext.w a5,a5 + 8000c26c: 0c078063 beqz a5,8000c32c + 8000c270: fec42783 lw a5,-20(s0) + 8000c274: 00379793 slli a5,a5,0x3 + 8000c278: f5043703 ld a4,-176(s0) + 8000c27c: 00f707b3 add a5,a4,a5 + 8000c280: 0007b783 ld a5,0(a5) # 8000 <__STACKSIZE__+0x4000> + 8000c284: 00078513 mv a0,a5 + 8000c288: 105050ef jal ra,80011b8c + 8000c28c: 00050793 mv a5,a0 + 8000c290: 02078c63 beqz a5,8000c2c8 + 8000c294: fe744783 lbu a5,-25(s0) + 8000c298: 0ff7f793 andi a5,a5,255 + 8000c29c: 08079863 bnez a5,8000c32c + 8000c2a0: fec42783 lw a5,-20(s0) + 8000c2a4: 00379793 slli a5,a5,0x3 + 8000c2a8: f5043703 ld a4,-176(s0) + 8000c2ac: 00f707b3 add a5,a4,a5 + 8000c2b0: 0007b783 ld a5,0(a5) + 8000c2b4: 00078593 mv a1,a5 + 8000c2b8: 0000b517 auipc a0,0xb + 8000c2bc: c2050513 addi a0,a0,-992 # 80016ed8 + 8000c2c0: f5dfb0ef jal ra,8000821c + 8000c2c4: 0680006f j 8000c32c + 8000c2c8: fe544783 lbu a5,-27(s0) + 8000c2cc: 0ff7f793 andi a5,a5,255 + 8000c2d0: 04078e63 beqz a5,8000c32c + 8000c2d4: fec42783 lw a5,-20(s0) + 8000c2d8: 00379793 slli a5,a5,0x3 + 8000c2dc: f5043703 ld a4,-176(s0) + 8000c2e0: 00f707b3 add a5,a4,a5 + 8000c2e4: 0007b783 ld a5,0(a5) + 8000c2e8: 00078593 mv a1,a5 + 8000c2ec: 0000b517 auipc a0,0xb + 8000c2f0: c1450513 addi a0,a0,-1004 # 80016f00 + 8000c2f4: f29fb0ef jal ra,8000821c + 8000c2f8: 0340006f j 8000c32c + 8000c2fc: fe744783 lbu a5,-25(s0) + 8000c300: 0ff7f793 andi a5,a5,255 + 8000c304: 02079463 bnez a5,8000c32c + 8000c308: fec42783 lw a5,-20(s0) + 8000c30c: 00379793 slli a5,a5,0x3 + 8000c310: f5043703 ld a4,-176(s0) + 8000c314: 00f707b3 add a5,a4,a5 + 8000c318: 0007b783 ld a5,0(a5) + 8000c31c: 00078593 mv a1,a5 + 8000c320: 0000b517 auipc a0,0xb + 8000c324: c8850513 addi a0,a0,-888 # 80016fa8 + 8000c328: ef5fb0ef jal ra,8000821c + 8000c32c: fec42783 lw a5,-20(s0) + 8000c330: 0017879b addiw a5,a5,1 + 8000c334: fef42623 sw a5,-20(s0) + 8000c338: fec42703 lw a4,-20(s0) + 8000c33c: f5c42783 lw a5,-164(s0) + 8000c340: 0007071b sext.w a4,a4 + 8000c344: 0007879b sext.w a5,a5 + 8000c348: e6f744e3 blt a4,a5,8000c1b0 + 8000c34c: 00000793 li a5,0 + 8000c350: 00078513 mv a0,a5 + 8000c354: 0a813083 ld ra,168(sp) + 8000c358: 0a013403 ld s0,160(sp) + 8000c35c: 0b010113 addi sp,sp,176 + 8000c360: 00008067 ret + +000000008000c364 : + 8000c364: fe010113 addi sp,sp,-32 + 8000c368: 00113c23 sd ra,24(sp) + 8000c36c: 00813823 sd s0,16(sp) + 8000c370: 02010413 addi s0,sp,32 + 8000c374: 00050793 mv a5,a0 + 8000c378: feb43023 sd a1,-32(s0) + 8000c37c: fef42623 sw a5,-20(s0) + 8000c380: fec42783 lw a5,-20(s0) + 8000c384: 0007871b sext.w a4,a5 + 8000c388: 00100793 li a5,1 + 8000c38c: 00f71e63 bne a4,a5,8000c3a8 + 8000c390: 0000e597 auipc a1,0xe + 8000c394: b1058593 addi a1,a1,-1264 # 80019ea0 + 8000c398: 0000b517 auipc a0,0xb + 8000c39c: c4050513 addi a0,a0,-960 # 80016fd8 + 8000c3a0: e7dfb0ef jal ra,8000821c + 8000c3a4: 04c0006f j 8000c3f0 + 8000c3a8: fec42783 lw a5,-20(s0) + 8000c3ac: 0007871b sext.w a4,a5 + 8000c3b0: 00200793 li a5,2 + 8000c3b4: 02f71e63 bne a4,a5,8000c3f0 + 8000c3b8: fe043783 ld a5,-32(s0) + 8000c3bc: 00878793 addi a5,a5,8 + 8000c3c0: 0007b783 ld a5,0(a5) + 8000c3c4: 00078513 mv a0,a5 + 8000c3c8: 4ad050ef jal ra,80012074 + 8000c3cc: 00050793 mv a5,a0 + 8000c3d0: 02078063 beqz a5,8000c3f0 + 8000c3d4: fe043783 ld a5,-32(s0) + 8000c3d8: 00878793 addi a5,a5,8 + 8000c3dc: 0007b783 ld a5,0(a5) + 8000c3e0: 00078593 mv a1,a5 + 8000c3e4: 0000b517 auipc a0,0xb + 8000c3e8: bfc50513 addi a0,a0,-1028 # 80016fe0 + 8000c3ec: e31fb0ef jal ra,8000821c + 8000c3f0: 00000793 li a5,0 + 8000c3f4: 00078513 mv a0,a5 + 8000c3f8: 01813083 ld ra,24(sp) + 8000c3fc: 01013403 ld s0,16(sp) + 8000c400: 02010113 addi sp,sp,32 + 8000c404: 00008067 ret + +000000008000c408 : + 8000c408: fe010113 addi sp,sp,-32 + 8000c40c: 00113c23 sd ra,24(sp) + 8000c410: 00813823 sd s0,16(sp) + 8000c414: 02010413 addi s0,sp,32 + 8000c418: 00050793 mv a5,a0 + 8000c41c: feb43023 sd a1,-32(s0) + 8000c420: fef42623 sw a5,-20(s0) + 8000c424: 0000e597 auipc a1,0xe + 8000c428: a7c58593 addi a1,a1,-1412 # 80019ea0 + 8000c42c: 0000b517 auipc a0,0xb + 8000c430: bac50513 addi a0,a0,-1108 # 80016fd8 + 8000c434: de9fb0ef jal ra,8000821c + 8000c438: 00000793 li a5,0 + 8000c43c: 00078513 mv a0,a5 + 8000c440: 01813083 ld ra,24(sp) + 8000c444: 01013403 ld s0,16(sp) + 8000c448: 02010113 addi sp,sp,32 + 8000c44c: 00008067 ret + +000000008000c450 : + 8000c450: fe010113 addi sp,sp,-32 + 8000c454: 00113c23 sd ra,24(sp) + 8000c458: 00813823 sd s0,16(sp) + 8000c45c: 02010413 addi s0,sp,32 + 8000c460: 00050793 mv a5,a0 + 8000c464: feb43023 sd a1,-32(s0) + 8000c468: fef42623 sw a5,-20(s0) + 8000c46c: fec42783 lw a5,-20(s0) + 8000c470: 0007871b sext.w a4,a5 + 8000c474: 00100793 li a5,1 + 8000c478: 02f71063 bne a4,a5,8000c498 + 8000c47c: 0000b517 auipc a0,0xb + 8000c480: b7c50513 addi a0,a0,-1156 # 80016ff8 + 8000c484: d99fb0ef jal ra,8000821c + 8000c488: 0000b517 auipc a0,0xb + 8000c48c: b9850513 addi a0,a0,-1128 # 80017020 + 8000c490: d8dfb0ef jal ra,8000821c + 8000c494: 01c0006f j 8000c4b0 + 8000c498: fe043783 ld a5,-32(s0) + 8000c49c: 00878793 addi a5,a5,8 + 8000c4a0: 0007b783 ld a5,0(a5) + 8000c4a4: 00000593 li a1,0 + 8000c4a8: 00078513 mv a0,a5 + 8000c4ac: 7a0050ef jal ra,80011c4c + 8000c4b0: 00000793 li a5,0 + 8000c4b4: 00078513 mv a0,a5 + 8000c4b8: 01813083 ld ra,24(sp) + 8000c4bc: 01013403 ld s0,16(sp) + 8000c4c0: 02010113 addi sp,sp,32 + 8000c4c4: 00008067 ret + +000000008000c4c8 : + 8000c4c8: fd010113 addi sp,sp,-48 + 8000c4cc: 02113423 sd ra,40(sp) + 8000c4d0: 02813023 sd s0,32(sp) + 8000c4d4: 03010413 addi s0,sp,48 + 8000c4d8: 00050793 mv a5,a0 + 8000c4dc: fcb43823 sd a1,-48(s0) + 8000c4e0: fcf42e23 sw a5,-36(s0) + 8000c4e4: fe042623 sw zero,-20(s0) + 8000c4e8: 0000b797 auipc a5,0xb + 8000c4ec: b7078793 addi a5,a5,-1168 # 80017058 + 8000c4f0: fef43023 sd a5,-32(s0) + 8000c4f4: fdc42783 lw a5,-36(s0) + 8000c4f8: 0007871b sext.w a4,a5 + 8000c4fc: 00200793 li a5,2 + 8000c500: 02f71463 bne a4,a5,8000c528 + 8000c504: fd043783 ld a5,-48(s0) + 8000c508: 00878793 addi a5,a5,8 + 8000c50c: 0007b783 ld a5,0(a5) + 8000c510: 00078593 mv a1,a5 + 8000c514: fe043503 ld a0,-32(s0) + 8000c518: 619040ef jal ra,80011330 + 8000c51c: 00050793 mv a5,a0 + 8000c520: fef42623 sw a5,-20(s0) + 8000c524: 07c0006f j 8000c5a0 + 8000c528: fdc42783 lw a5,-36(s0) + 8000c52c: 0007871b sext.w a4,a5 + 8000c530: 00400793 li a5,4 + 8000c534: 04f71c63 bne a4,a5,8000c58c + 8000c538: fd043783 ld a5,-48(s0) + 8000c53c: 00878793 addi a5,a5,8 + 8000c540: 0007b783 ld a5,0(a5) + 8000c544: 0000b597 auipc a1,0xb + 8000c548: b1c58593 addi a1,a1,-1252 # 80017060 + 8000c54c: 00078513 mv a0,a5 + 8000c550: c48f40ef jal ra,80000998 + 8000c554: 00050793 mv a5,a0 + 8000c558: 04079463 bnez a5,8000c5a0 + 8000c55c: fd043783 ld a5,-48(s0) + 8000c560: 0107b783 ld a5,16(a5) + 8000c564: fef43023 sd a5,-32(s0) + 8000c568: fd043783 ld a5,-48(s0) + 8000c56c: 01878793 addi a5,a5,24 + 8000c570: 0007b783 ld a5,0(a5) + 8000c574: 00078593 mv a1,a5 + 8000c578: fe043503 ld a0,-32(s0) + 8000c57c: 5b5040ef jal ra,80011330 + 8000c580: 00050793 mv a5,a0 + 8000c584: fef42623 sw a5,-20(s0) + 8000c588: 0180006f j 8000c5a0 + 8000c58c: 0000b517 auipc a0,0xb + 8000c590: adc50513 addi a0,a0,-1316 # 80017068 + 8000c594: c89fb0ef jal ra,8000821c + 8000c598: 00000793 li a5,0 + 8000c59c: 0280006f j 8000c5c4 + 8000c5a0: fec42783 lw a5,-20(s0) + 8000c5a4: 0007879b sext.w a5,a5 + 8000c5a8: 00078c63 beqz a5,8000c5c0 + 8000c5ac: fec42783 lw a5,-20(s0) + 8000c5b0: 00078593 mv a1,a5 + 8000c5b4: 0000b517 auipc a0,0xb + 8000c5b8: ad450513 addi a0,a0,-1324 # 80017088 + 8000c5bc: c61fb0ef jal ra,8000821c + 8000c5c0: 00000793 li a5,0 + 8000c5c4: 00078513 mv a0,a5 + 8000c5c8: 02813083 ld ra,40(sp) + 8000c5cc: 02013403 ld s0,32(sp) + 8000c5d0: 03010113 addi sp,sp,48 + 8000c5d4: 00008067 ret + +000000008000c5d8 : + 8000c5d8: fc010113 addi sp,sp,-64 + 8000c5dc: 02113c23 sd ra,56(sp) + 8000c5e0: 02813823 sd s0,48(sp) + 8000c5e4: 04010413 addi s0,sp,64 + 8000c5e8: 00050793 mv a5,a0 + 8000c5ec: fcb43023 sd a1,-64(s0) + 8000c5f0: fcf42623 sw a5,-52(s0) + 8000c5f4: fcc42783 lw a5,-52(s0) + 8000c5f8: 0007871b sext.w a4,a5 + 8000c5fc: 00100793 li a5,1 + 8000c600: 08f71c63 bne a4,a5,8000c698 + 8000c604: 0000b517 auipc a0,0xb + 8000c608: a9c50513 addi a0,a0,-1380 # 800170a0 + 8000c60c: c11fb0ef jal ra,8000821c + 8000c610: 0000b517 auipc a0,0xb + 8000c614: ab050513 addi a0,a0,-1360 # 800170c0 + 8000c618: c05fb0ef jal ra,8000821c + 8000c61c: 0001f797 auipc a5,0x1f + 8000c620: a8478793 addi a5,a5,-1404 # 8002b0a0 + 8000c624: fef43423 sd a5,-24(s0) + 8000c628: 0580006f j 8000c680 + 8000c62c: fe843783 ld a5,-24(s0) + 8000c630: 04078263 beqz a5,8000c674 + 8000c634: fe843783 ld a5,-24(s0) + 8000c638: 0087b783 ld a5,8(a5) + 8000c63c: 02078c63 beqz a5,8000c674 + 8000c640: fe843783 ld a5,-24(s0) + 8000c644: 0107b783 ld a5,16(a5) + 8000c648: 0007b703 ld a4,0(a5) + 8000c64c: fe843783 ld a5,-24(s0) + 8000c650: 0007b783 ld a5,0(a5) + 8000c654: 00078613 mv a2,a5 + 8000c658: fe843783 ld a5,-24(s0) + 8000c65c: 0087b783 ld a5,8(a5) + 8000c660: 00078693 mv a3,a5 + 8000c664: 00070593 mv a1,a4 + 8000c668: 0000b517 auipc a0,0xb + 8000c66c: a7850513 addi a0,a0,-1416 # 800170e0 + 8000c670: badfb0ef jal ra,8000821c + 8000c674: fe843783 ld a5,-24(s0) + 8000c678: 02078793 addi a5,a5,32 + 8000c67c: fef43423 sd a5,-24(s0) + 8000c680: fe843703 ld a4,-24(s0) + 8000c684: 0001f797 auipc a5,0x1f + 8000c688: a5c78793 addi a5,a5,-1444 # 8002b0e0 + 8000c68c: faf760e3 bltu a4,a5,8000c62c + 8000c690: 00000793 li a5,0 + 8000c694: 0a80006f j 8000c73c + 8000c698: fcc42783 lw a5,-52(s0) + 8000c69c: 0007871b sext.w a4,a5 + 8000c6a0: 00400793 li a5,4 + 8000c6a4: 08f71463 bne a4,a5,8000c72c + 8000c6a8: fc043783 ld a5,-64(s0) + 8000c6ac: 0087b783 ld a5,8(a5) + 8000c6b0: fef43023 sd a5,-32(s0) + 8000c6b4: fc043783 ld a5,-64(s0) + 8000c6b8: 0107b783 ld a5,16(a5) + 8000c6bc: fcf43c23 sd a5,-40(s0) + 8000c6c0: fc043783 ld a5,-64(s0) + 8000c6c4: 0187b783 ld a5,24(a5) + 8000c6c8: fcf43823 sd a5,-48(s0) + 8000c6cc: fd843683 ld a3,-40(s0) + 8000c6d0: fd043603 ld a2,-48(s0) + 8000c6d4: fe043583 ld a1,-32(s0) + 8000c6d8: 0000b517 auipc a0,0xb + 8000c6dc: a2050513 addi a0,a0,-1504 # 800170f8 + 8000c6e0: b3dfb0ef jal ra,8000821c + 8000c6e4: 00000713 li a4,0 + 8000c6e8: 00000693 li a3,0 + 8000c6ec: fd043603 ld a2,-48(s0) + 8000c6f0: fd843583 ld a1,-40(s0) + 8000c6f4: fe043503 ld a0,-32(s0) + 8000c6f8: 784040ef jal ra,80010e7c + 8000c6fc: 00050793 mv a5,a0 + 8000c700: 00079c63 bnez a5,8000c718 + 8000c704: 0000b517 auipc a0,0xb + 8000c708: a1c50513 addi a0,a0,-1508 # 80017120 + 8000c70c: b11fb0ef jal ra,8000821c + 8000c710: 00000793 li a5,0 + 8000c714: 0280006f j 8000c73c + 8000c718: 0000b517 auipc a0,0xb + 8000c71c: a1850513 addi a0,a0,-1512 # 80017130 + 8000c720: afdfb0ef jal ra,8000821c + 8000c724: fff00793 li a5,-1 + 8000c728: 0140006f j 8000c73c + 8000c72c: 0000b517 auipc a0,0xb + 8000c730: a1450513 addi a0,a0,-1516 # 80017140 + 8000c734: ae9fb0ef jal ra,8000821c + 8000c738: fff00793 li a5,-1 + 8000c73c: 00078513 mv a0,a5 + 8000c740: 03813083 ld ra,56(sp) + 8000c744: 03013403 ld s0,48(sp) + 8000c748: 04010113 addi sp,sp,64 + 8000c74c: 00008067 ret + +000000008000c750 : + 8000c750: fd010113 addi sp,sp,-48 + 8000c754: 02113423 sd ra,40(sp) + 8000c758: 02813023 sd s0,32(sp) + 8000c75c: 03010413 addi s0,sp,48 + 8000c760: 00050793 mv a5,a0 + 8000c764: fcb43823 sd a1,-48(s0) + 8000c768: fcf42e23 sw a5,-36(s0) + 8000c76c: fd043783 ld a5,-48(s0) + 8000c770: 0087b783 ld a5,8(a5) + 8000c774: fef43423 sd a5,-24(s0) + 8000c778: fdc42783 lw a5,-36(s0) + 8000c77c: 0007871b sext.w a4,a5 + 8000c780: 00200793 li a5,2 + 8000c784: 00f70c63 beq a4,a5,8000c79c + 8000c788: 0000b517 auipc a0,0xb + 8000c78c: 9e850513 addi a0,a0,-1560 # 80017170 + 8000c790: a8dfb0ef jal ra,8000821c + 8000c794: fff00793 li a5,-1 + 8000c798: 0480006f j 8000c7e0 + 8000c79c: fe843583 ld a1,-24(s0) + 8000c7a0: 0000b517 auipc a0,0xb + 8000c7a4: 9f050513 addi a0,a0,-1552 # 80017190 + 8000c7a8: a75fb0ef jal ra,8000821c + 8000c7ac: fe843503 ld a0,-24(s0) + 8000c7b0: 225040ef jal ra,800111d4 + 8000c7b4: 00050793 mv a5,a0 + 8000c7b8: 0007dc63 bgez a5,8000c7d0 + 8000c7bc: 0000b517 auipc a0,0xb + 8000c7c0: 97450513 addi a0,a0,-1676 # 80017130 + 8000c7c4: a59fb0ef jal ra,8000821c + 8000c7c8: fff00793 li a5,-1 + 8000c7cc: 0140006f j 8000c7e0 + 8000c7d0: 0000b517 auipc a0,0xb + 8000c7d4: 95050513 addi a0,a0,-1712 # 80017120 + 8000c7d8: a45fb0ef jal ra,8000821c + 8000c7dc: 00000793 li a5,0 + 8000c7e0: 00078513 mv a0,a5 + 8000c7e4: 02813083 ld ra,40(sp) + 8000c7e8: 02013403 ld s0,32(sp) + 8000c7ec: 03010113 addi sp,sp,48 + 8000c7f0: 00008067 ret + +000000008000c7f4 : + 8000c7f4: fe010113 addi sp,sp,-32 + 8000c7f8: 00113c23 sd ra,24(sp) + 8000c7fc: 00813823 sd s0,16(sp) + 8000c800: 02010413 addi s0,sp,32 + 8000c804: 00050793 mv a5,a0 + 8000c808: feb43023 sd a1,-32(s0) + 8000c80c: fef42623 sw a5,-20(s0) + 8000c810: fec42783 lw a5,-20(s0) + 8000c814: 0007871b sext.w a4,a5 + 8000c818: 00200793 li a5,2 + 8000c81c: 00f70a63 beq a4,a5,8000c830 + 8000c820: 0000b517 auipc a0,0xb + 8000c824: 98050513 addi a0,a0,-1664 # 800171a0 + 8000c828: 56d040ef jal ra,80011594 + 8000c82c: 0700006f j 8000c89c + 8000c830: fe043783 ld a5,-32(s0) + 8000c834: 00878793 addi a5,a5,8 + 8000c838: 0007b783 ld a5,0(a5) + 8000c83c: 0000b597 auipc a1,0xb + 8000c840: 96c58593 addi a1,a1,-1684 # 800171a8 + 8000c844: 00078513 mv a0,a5 + 8000c848: 950f40ef jal ra,80000998 + 8000c84c: 00050793 mv a5,a0 + 8000c850: 02078463 beqz a5,8000c878 + 8000c854: fe043783 ld a5,-32(s0) + 8000c858: 00878793 addi a5,a5,8 + 8000c85c: 0007b783 ld a5,0(a5) + 8000c860: 0000b597 auipc a1,0xb + 8000c864: 95058593 addi a1,a1,-1712 # 800171b0 + 8000c868: 00078513 mv a0,a5 + 8000c86c: 92cf40ef jal ra,80000998 + 8000c870: 00050793 mv a5,a0 + 8000c874: 00079a63 bnez a5,8000c888 + 8000c878: 0000b517 auipc a0,0xb + 8000c87c: 94050513 addi a0,a0,-1728 # 800171b8 + 8000c880: 99dfb0ef jal ra,8000821c + 8000c884: 0180006f j 8000c89c + 8000c888: fe043783 ld a5,-32(s0) + 8000c88c: 00878793 addi a5,a5,8 + 8000c890: 0007b783 ld a5,0(a5) + 8000c894: 00078513 mv a0,a5 + 8000c898: 4fd040ef jal ra,80011594 + 8000c89c: 00000793 li a5,0 + 8000c8a0: 00078513 mv a0,a5 + 8000c8a4: 01813083 ld ra,24(sp) + 8000c8a8: 01013403 ld s0,16(sp) + 8000c8ac: 02010113 addi sp,sp,32 + 8000c8b0: 00008067 ret + +000000008000c8b4 : + 8000c8b4: fc010113 addi sp,sp,-64 + 8000c8b8: 02113c23 sd ra,56(sp) + 8000c8bc: 02813823 sd s0,48(sp) + 8000c8c0: 02913423 sd s1,40(sp) + 8000c8c4: 04010413 addi s0,sp,64 + 8000c8c8: 00050793 mv a5,a0 + 8000c8cc: fcb43023 sd a1,-64(s0) + 8000c8d0: fcf42623 sw a5,-52(s0) + 8000c8d4: fcc42783 lw a5,-52(s0) + 8000c8d8: 0007871b sext.w a4,a5 + 8000c8dc: 00200793 li a5,2 + 8000c8e0: 02f71263 bne a4,a5,8000c904 + 8000c8e4: fc043783 ld a5,-64(s0) + 8000c8e8: 00878793 addi a5,a5,8 + 8000c8ec: 0007b783 ld a5,0(a5) + 8000c8f0: 00078593 mv a1,a5 + 8000c8f4: 0000a517 auipc a0,0xa + 8000c8f8: 6e450513 addi a0,a0,1764 # 80016fd8 + 8000c8fc: 921fb0ef jal ra,8000821c + 8000c900: 0b80006f j 8000c9b8 + 8000c904: fcc42783 lw a5,-52(s0) + 8000c908: 0007871b sext.w a4,a5 + 8000c90c: 00300793 li a5,3 + 8000c910: 08f71e63 bne a4,a5,8000c9ac + 8000c914: fc043783 ld a5,-64(s0) + 8000c918: 01078793 addi a5,a5,16 + 8000c91c: 0007b783 ld a5,0(a5) + 8000c920: 00000613 li a2,0 + 8000c924: 44200593 li a1,1090 + 8000c928: 00078513 mv a0,a5 + 8000c92c: 5e9040ef jal ra,80011714 + 8000c930: 00050793 mv a5,a0 + 8000c934: fcf42e23 sw a5,-36(s0) + 8000c938: fdc42783 lw a5,-36(s0) + 8000c93c: 0007879b sext.w a5,a5 + 8000c940: 0407c663 bltz a5,8000c98c + 8000c944: fc043783 ld a5,-64(s0) + 8000c948: 00878793 addi a5,a5,8 + 8000c94c: 0007b483 ld s1,0(a5) + 8000c950: fc043783 ld a5,-64(s0) + 8000c954: 00878793 addi a5,a5,8 + 8000c958: 0007b783 ld a5,0(a5) + 8000c95c: 00078513 mv a0,a5 + 8000c960: ef5f30ef jal ra,80000854 + 8000c964: 00050713 mv a4,a0 + 8000c968: fdc42783 lw a5,-36(s0) + 8000c96c: 00070613 mv a2,a4 + 8000c970: 00048593 mv a1,s1 + 8000c974: 00078513 mv a0,a5 + 8000c978: 7b5040ef jal ra,8001192c + 8000c97c: fdc42783 lw a5,-36(s0) + 8000c980: 00078513 mv a0,a5 + 8000c984: 669040ef jal ra,800117ec + 8000c988: 0300006f j 8000c9b8 + 8000c98c: fc043783 ld a5,-64(s0) + 8000c990: 01078793 addi a5,a5,16 + 8000c994: 0007b783 ld a5,0(a5) + 8000c998: 00078593 mv a1,a5 + 8000c99c: 0000b517 auipc a0,0xb + 8000c9a0: 82c50513 addi a0,a0,-2004 # 800171c8 + 8000c9a4: 879fb0ef jal ra,8000821c + 8000c9a8: 0100006f j 8000c9b8 + 8000c9ac: 0000b517 auipc a0,0xb + 8000c9b0: 83450513 addi a0,a0,-1996 # 800171e0 + 8000c9b4: 869fb0ef jal ra,8000821c + 8000c9b8: 00000793 li a5,0 + 8000c9bc: 00078513 mv a0,a5 + 8000c9c0: 03813083 ld ra,56(sp) + 8000c9c4: 03013403 ld s0,48(sp) + 8000c9c8: 02813483 ld s1,40(sp) + 8000c9cc: 04010113 addi sp,sp,64 + 8000c9d0: 00008067 ret + +000000008000c9d4 : + 8000c9d4: fb010113 addi sp,sp,-80 + 8000c9d8: 04113423 sd ra,72(sp) + 8000c9dc: 04813023 sd s0,64(sp) + 8000c9e0: 05010413 addi s0,sp,80 + 8000c9e4: 00050793 mv a5,a0 + 8000c9e8: fab43823 sd a1,-80(s0) + 8000c9ec: faf42e23 sw a5,-68(s0) + 8000c9f0: fc0407a3 sb zero,-49(s0) + 8000c9f4: fe043423 sd zero,-24(s0) + 8000c9f8: fe042223 sw zero,-28(s0) + 8000c9fc: fc042a23 sw zero,-44(s0) + 8000ca00: fe042023 sw zero,-32(s0) + 8000ca04: fc042e23 sw zero,-36(s0) + 8000ca08: fc042c23 sw zero,-40(s0) + 8000ca0c: fbc42783 lw a5,-68(s0) + 8000ca10: 0007871b sext.w a4,a5 + 8000ca14: 00100793 li a5,1 + 8000ca18: 00e7cc63 blt a5,a4,8000ca30 + 8000ca1c: 0000a517 auipc a0,0xa + 8000ca20: 7ec50513 addi a0,a0,2028 # 80017208 + 8000ca24: ff8fb0ef jal ra,8000821c + 8000ca28: fff00793 li a5,-1 + 8000ca2c: 29c0006f j 8000ccc8 + 8000ca30: fbc42783 lw a5,-68(s0) + 8000ca34: 0007871b sext.w a4,a5 + 8000ca38: 00200793 li a5,2 + 8000ca3c: 00f71e63 bne a4,a5,8000ca58 + 8000ca40: 00a00793 li a5,10 + 8000ca44: fcf42e23 sw a5,-36(s0) + 8000ca48: fb043783 ld a5,-80(s0) + 8000ca4c: 0087b783 ld a5,8(a5) + 8000ca50: fef43423 sd a5,-24(s0) + 8000ca54: 0a80006f j 8000cafc + 8000ca58: fb043783 ld a5,-80(s0) + 8000ca5c: 00878793 addi a5,a5,8 + 8000ca60: 0007b783 ld a5,0(a5) + 8000ca64: 0000a597 auipc a1,0xa + 8000ca68: 7cc58593 addi a1,a1,1996 # 80017230 + 8000ca6c: 00078513 mv a0,a5 + 8000ca70: eecfa0ef jal ra,8000715c + 8000ca74: 00050793 mv a5,a0 + 8000ca78: 06079863 bnez a5,8000cae8 + 8000ca7c: fb043783 ld a5,-80(s0) + 8000ca80: 01078793 addi a5,a5,16 + 8000ca84: 0007b783 ld a5,0(a5) + 8000ca88: 0007c783 lbu a5,0(a5) + 8000ca8c: 00078713 mv a4,a5 + 8000ca90: 02b00793 li a5,43 + 8000ca94: 02f70263 beq a4,a5,8000cab8 + 8000ca98: fb043783 ld a5,-80(s0) + 8000ca9c: 01078793 addi a5,a5,16 + 8000caa0: 0007b783 ld a5,0(a5) + 8000caa4: 00078513 mv a0,a5 + 8000caa8: 8f8f40ef jal ra,80000ba0 + 8000caac: 00050793 mv a5,a0 + 8000cab0: fcf42e23 sw a5,-36(s0) + 8000cab4: 0240006f j 8000cad8 + 8000cab8: fb043783 ld a5,-80(s0) + 8000cabc: 01078793 addi a5,a5,16 + 8000cac0: 0007b783 ld a5,0(a5) + 8000cac4: 00178793 addi a5,a5,1 + 8000cac8: 00078513 mv a0,a5 + 8000cacc: 8d4f40ef jal ra,80000ba0 + 8000cad0: 00050793 mv a5,a0 + 8000cad4: fcf42c23 sw a5,-40(s0) + 8000cad8: fb043783 ld a5,-80(s0) + 8000cadc: 0187b783 ld a5,24(a5) + 8000cae0: fef43423 sd a5,-24(s0) + 8000cae4: 0180006f j 8000cafc + 8000cae8: 0000a517 auipc a0,0xa + 8000caec: 72050513 addi a0,a0,1824 # 80017208 + 8000caf0: f2cfb0ef jal ra,8000821c + 8000caf4: fff00793 li a5,-1 + 8000caf8: 1d00006f j 8000ccc8 + 8000cafc: 00000593 li a1,0 + 8000cb00: fe843503 ld a0,-24(s0) + 8000cb04: 411040ef jal ra,80011714 + 8000cb08: 00050793 mv a5,a0 + 8000cb0c: fcf42823 sw a5,-48(s0) + 8000cb10: fd042783 lw a5,-48(s0) + 8000cb14: 0007879b sext.w a5,a5 + 8000cb18: 0207da63 bgez a5,8000cb4c + 8000cb1c: 0000a517 auipc a0,0xa + 8000cb20: 71c50513 addi a0,a0,1820 # 80017238 + 8000cb24: ef8fb0ef jal ra,8000821c + 8000cb28: fff00793 li a5,-1 + 8000cb2c: 19c0006f j 8000ccc8 + 8000cb30: fcf44783 lbu a5,-49(s0) + 8000cb34: 00078713 mv a4,a5 + 8000cb38: 00a00793 li a5,10 + 8000cb3c: 00f71863 bne a4,a5,8000cb4c + 8000cb40: fe442783 lw a5,-28(s0) + 8000cb44: 0017879b addiw a5,a5,1 + 8000cb48: fef42223 sw a5,-28(s0) + 8000cb4c: fcf40713 addi a4,s0,-49 + 8000cb50: fd042783 lw a5,-48(s0) + 8000cb54: 00100613 li a2,1 + 8000cb58: 00070593 mv a1,a4 + 8000cb5c: 00078513 mv a0,a5 + 8000cb60: 525040ef jal ra,80011884 + 8000cb64: 00050793 mv a5,a0 + 8000cb68: fcf044e3 bgtz a5,8000cb30 + 8000cb6c: fe442783 lw a5,-28(s0) + 8000cb70: 00078593 mv a1,a5 + 8000cb74: 0000a517 auipc a0,0xa + 8000cb78: 6dc50513 addi a0,a0,1756 # 80017250 + 8000cb7c: ea0fb0ef jal ra,8000821c + 8000cb80: fd842783 lw a5,-40(s0) + 8000cb84: 0007879b sext.w a5,a5 + 8000cb88: 04078663 beqz a5,8000cbd4 + 8000cb8c: fe442703 lw a4,-28(s0) + 8000cb90: fd842783 lw a5,-40(s0) + 8000cb94: 0007071b sext.w a4,a4 + 8000cb98: 0007879b sext.w a5,a5 + 8000cb9c: 00e7fc63 bgeu a5,a4,8000cbb4 + 8000cba0: fe442703 lw a4,-28(s0) + 8000cba4: fd842783 lw a5,-40(s0) + 8000cba8: 40f707bb subw a5,a4,a5 + 8000cbac: fcf42e23 sw a5,-36(s0) + 8000cbb0: 0240006f j 8000cbd4 + 8000cbb4: 0000a517 auipc a0,0xa + 8000cbb8: 6bc50513 addi a0,a0,1724 # 80017270 + 8000cbbc: e60fb0ef jal ra,8000821c + 8000cbc0: fd042783 lw a5,-48(s0) + 8000cbc4: 00078513 mv a0,a5 + 8000cbc8: 425040ef jal ra,800117ec + 8000cbcc: fff00793 li a5,-1 + 8000cbd0: 0f80006f j 8000ccc8 + 8000cbd4: fdc42703 lw a4,-36(s0) + 8000cbd8: fe442783 lw a5,-28(s0) + 8000cbdc: 0007071b sext.w a4,a4 + 8000cbe0: 0007879b sext.w a5,a5 + 8000cbe4: 02e7f263 bgeu a5,a4,8000cc08 + 8000cbe8: 0000a517 auipc a0,0xa + 8000cbec: 68850513 addi a0,a0,1672 # 80017270 + 8000cbf0: e2cfb0ef jal ra,8000821c + 8000cbf4: fd042783 lw a5,-48(s0) + 8000cbf8: 00078513 mv a0,a5 + 8000cbfc: 3f1040ef jal ra,800117ec + 8000cc00: fff00793 li a5,-1 + 8000cc04: 0c40006f j 8000ccc8 + 8000cc08: fdc42783 lw a5,-36(s0) + 8000cc0c: 00078593 mv a1,a5 + 8000cc10: 0000a517 auipc a0,0xa + 8000cc14: 6a050513 addi a0,a0,1696 # 800172b0 + 8000cc18: e04fb0ef jal ra,8000821c + 8000cc1c: fe442703 lw a4,-28(s0) + 8000cc20: fdc42783 lw a5,-36(s0) + 8000cc24: 40f707bb subw a5,a4,a5 + 8000cc28: fcf42a23 sw a5,-44(s0) + 8000cc2c: fd042783 lw a5,-48(s0) + 8000cc30: 00000613 li a2,0 + 8000cc34: 00000593 li a1,0 + 8000cc38: 00078513 mv a0,a5 + 8000cc3c: 599040ef jal ra,800119d4 + 8000cc40: 04c0006f j 8000cc8c + 8000cc44: fcf44783 lbu a5,-49(s0) + 8000cc48: 00078713 mv a4,a5 + 8000cc4c: 00a00793 li a5,10 + 8000cc50: 00f71863 bne a4,a5,8000cc60 + 8000cc54: fe042783 lw a5,-32(s0) + 8000cc58: 0017879b addiw a5,a5,1 + 8000cc5c: fef42023 sw a5,-32(s0) + 8000cc60: fe042703 lw a4,-32(s0) + 8000cc64: fd442783 lw a5,-44(s0) + 8000cc68: 0007071b sext.w a4,a4 + 8000cc6c: 0007879b sext.w a5,a5 + 8000cc70: 00e7fe63 bgeu a5,a4,8000cc8c + 8000cc74: fcf44783 lbu a5,-49(s0) + 8000cc78: 0007879b sext.w a5,a5 + 8000cc7c: 00078593 mv a1,a5 + 8000cc80: 0000a517 auipc a0,0xa + 8000cc84: 65050513 addi a0,a0,1616 # 800172d0 + 8000cc88: d94fb0ef jal ra,8000821c + 8000cc8c: fcf40713 addi a4,s0,-49 + 8000cc90: fd042783 lw a5,-48(s0) + 8000cc94: 00100613 li a2,1 + 8000cc98: 00070593 mv a1,a4 + 8000cc9c: 00078513 mv a0,a5 + 8000cca0: 3e5040ef jal ra,80011884 + 8000cca4: 00050793 mv a5,a0 + 8000cca8: f8f04ee3 bgtz a5,8000cc44 + 8000ccac: 0000a517 auipc a0,0xa + 8000ccb0: 62c50513 addi a0,a0,1580 # 800172d8 + 8000ccb4: d68fb0ef jal ra,8000821c + 8000ccb8: fd042783 lw a5,-48(s0) + 8000ccbc: 00078513 mv a0,a5 + 8000ccc0: 32d040ef jal ra,800117ec + 8000ccc4: 00000793 li a5,0 + 8000ccc8: 00078513 mv a0,a5 + 8000cccc: 04813083 ld ra,72(sp) + 8000ccd0: 04013403 ld s0,64(sp) + 8000ccd4: 05010113 addi sp,sp,80 + 8000ccd8: 00008067 ret + +000000008000ccdc : + 8000ccdc: fe010113 addi sp,sp,-32 + 8000cce0: 00813c23 sd s0,24(sp) + 8000cce4: 02010413 addi s0,sp,32 + 8000cce8: fea43423 sd a0,-24(s0) + 8000ccec: fe843783 ld a5,-24(s0) + 8000ccf0: 0007b783 ld a5,0(a5) + 8000ccf4: fe843703 ld a4,-24(s0) + 8000ccf8: 40f707b3 sub a5,a4,a5 + 8000ccfc: 0017b793 seqz a5,a5 + 8000cd00: 0ff7f793 andi a5,a5,255 + 8000cd04: 0007879b sext.w a5,a5 + 8000cd08: 00078513 mv a0,a5 + 8000cd0c: 01813403 ld s0,24(sp) + 8000cd10: 02010113 addi sp,sp,32 + 8000cd14: 00008067 ret + +000000008000cd18 : + 8000cd18: fd010113 addi sp,sp,-48 + 8000cd1c: 02813423 sd s0,40(sp) + 8000cd20: 03010413 addi s0,sp,48 + 8000cd24: fca43c23 sd a0,-40(s0) + 8000cd28: fe042623 sw zero,-20(s0) + 8000cd2c: fd843783 ld a5,-40(s0) + 8000cd30: fef43023 sd a5,-32(s0) + 8000cd34: 01c0006f j 8000cd50 + 8000cd38: fe043783 ld a5,-32(s0) + 8000cd3c: 0007b783 ld a5,0(a5) + 8000cd40: fef43023 sd a5,-32(s0) + 8000cd44: fec42783 lw a5,-20(s0) + 8000cd48: 0017879b addiw a5,a5,1 + 8000cd4c: fef42623 sw a5,-20(s0) + 8000cd50: fe043783 ld a5,-32(s0) + 8000cd54: 0007b783 ld a5,0(a5) + 8000cd58: fd843703 ld a4,-40(s0) + 8000cd5c: fcf71ee3 bne a4,a5,8000cd38 + 8000cd60: fec42783 lw a5,-20(s0) + 8000cd64: 00078513 mv a0,a5 + 8000cd68: 02813403 ld s0,40(sp) + 8000cd6c: 03010113 addi sp,sp,48 + 8000cd70: 00008067 ret + +000000008000cd74 : + 8000cd74: ff010113 addi sp,sp,-16 + 8000cd78: 00113423 sd ra,8(sp) + 8000cd7c: 00813023 sd s0,0(sp) + 8000cd80: 01010413 addi s0,sp,16 + 8000cd84: 0000a517 auipc a0,0xa + 8000cd88: 55c50513 addi a0,a0,1372 # 800172e0 + 8000cd8c: c90fb0ef jal ra,8000821c + 8000cd90: 00000793 li a5,0 + 8000cd94: 00078513 mv a0,a5 + 8000cd98: 00813083 ld ra,8(sp) + 8000cd9c: 00013403 ld s0,0(sp) + 8000cda0: 01010113 addi sp,sp,16 + 8000cda4: 00008067 ret + +000000008000cda8 : + 8000cda8: ff010113 addi sp,sp,-16 + 8000cdac: 00113423 sd ra,8(sp) + 8000cdb0: 00813023 sd s0,0(sp) + 8000cdb4: 01010413 addi s0,sp,16 + 8000cdb8: 0000a517 auipc a0,0xa + 8000cdbc: 54050513 addi a0,a0,1344 # 800172f8 + 8000cdc0: c5cfb0ef jal ra,8000821c + 8000cdc4: 00000793 li a5,0 + 8000cdc8: 00078513 mv a0,a5 + 8000cdcc: 00813083 ld ra,8(sp) + 8000cdd0: 00013403 ld s0,0(sp) + 8000cdd4: 01010113 addi sp,sp,16 + 8000cdd8: 00008067 ret + +000000008000cddc : + 8000cddc: ff010113 addi sp,sp,-16 + 8000cde0: 00113423 sd ra,8(sp) + 8000cde4: 00813023 sd s0,0(sp) + 8000cde8: 01010413 addi s0,sp,16 + 8000cdec: cacfa0ef jal ra,80007298 + 8000cdf0: 00000793 li a5,0 + 8000cdf4: 00078513 mv a0,a5 + 8000cdf8: 00813083 ld ra,8(sp) + 8000cdfc: 00013403 ld s0,0(sp) + 8000ce00: 01010113 addi sp,sp,16 + 8000ce04: 00008067 ret + +000000008000ce08 : + 8000ce08: fe010113 addi sp,sp,-32 + 8000ce0c: 00113c23 sd ra,24(sp) + 8000ce10: 00813823 sd s0,16(sp) + 8000ce14: 02010413 addi s0,sp,32 + 8000ce18: 00050793 mv a5,a0 + 8000ce1c: fef42623 sw a5,-20(s0) + 8000ce20: 0100006f j 8000ce30 + 8000ce24: 0000a517 auipc a0,0xa + 8000ce28: 4dc50513 addi a0,a0,1244 # 80017300 + 8000ce2c: bf0fb0ef jal ra,8000821c + 8000ce30: fec42783 lw a5,-20(s0) + 8000ce34: fff7871b addiw a4,a5,-1 + 8000ce38: fee42623 sw a4,-20(s0) + 8000ce3c: fe0794e3 bnez a5,8000ce24 + 8000ce40: 00000013 nop + 8000ce44: 00000013 nop + 8000ce48: 01813083 ld ra,24(sp) + 8000ce4c: 01013403 ld s0,16(sp) + 8000ce50: 02010113 addi sp,sp,32 + 8000ce54: 00008067 ret + +000000008000ce58 : + 8000ce58: fc010113 addi sp,sp,-64 + 8000ce5c: 02113c23 sd ra,56(sp) + 8000ce60: 02813823 sd s0,48(sp) + 8000ce64: 04010413 addi s0,sp,64 + 8000ce68: fca43c23 sd a0,-40(s0) + 8000ce6c: 00058793 mv a5,a1 + 8000ce70: fcc43423 sd a2,-56(s0) + 8000ce74: 00068713 mv a4,a3 + 8000ce78: fcf40ba3 sb a5,-41(s0) + 8000ce7c: 00070793 mv a5,a4 + 8000ce80: fcf42823 sw a5,-48(s0) + 8000ce84: fd744783 lbu a5,-41(s0) + 8000ce88: 0007879b sext.w a5,a5 + 8000ce8c: 00078513 mv a0,a5 + 8000ce90: c45f40ef jal ra,80001ad4 + 8000ce94: fea43423 sd a0,-24(s0) + 8000ce98: fe843783 ld a5,-24(s0) + 8000ce9c: 00878793 addi a5,a5,8 + 8000cea0: fef43023 sd a5,-32(s0) + 8000cea4: fd843783 ld a5,-40(s0) + 8000cea8: fe043703 ld a4,-32(s0) + 8000ceac: 00e7b023 sd a4,0(a5) + 8000ceb0: fd843783 ld a5,-40(s0) + 8000ceb4: fd744703 lbu a4,-41(s0) + 8000ceb8: 00e78823 sb a4,16(a5) + 8000cebc: fd843783 ld a5,-40(s0) + 8000cec0: fc843703 ld a4,-56(s0) + 8000cec4: 00e7b423 sd a4,8(a5) + 8000cec8: fd843783 ld a5,-40(s0) + 8000cecc: fd042703 lw a4,-48(s0) + 8000ced0: 00e7aa23 sw a4,20(a5) + 8000ced4: fd843783 ld a5,-40(s0) + 8000ced8: 0007ac23 sw zero,24(a5) + 8000cedc: 00000013 nop + 8000cee0: 03813083 ld ra,56(sp) + 8000cee4: 03013403 ld s0,48(sp) + 8000cee8: 04010113 addi sp,sp,64 + 8000ceec: 00008067 ret + +000000008000cef0 : + 8000cef0: fa010113 addi sp,sp,-96 + 8000cef4: 04113c23 sd ra,88(sp) + 8000cef8: 04813823 sd s0,80(sp) + 8000cefc: 06010413 addi s0,sp,96 + 8000cf00: faa43423 sd a0,-88(s0) + 8000cf04: fab43023 sd a1,-96(s0) + 8000cf08: fe042623 sw zero,-20(s0) + 8000cf0c: fa043783 ld a5,-96(s0) + 8000cf10: 0007ac23 sw zero,24(a5) + 8000cf14: fa043783 ld a5,-96(s0) + 8000cf18: 0147a783 lw a5,20(a5) + 8000cf1c: 00078863 beqz a5,8000cf2c + 8000cf20: fa043783 ld a5,-96(s0) + 8000cf24: 0107c783 lbu a5,16(a5) + 8000cf28: 00079663 bnez a5,8000cf34 + 8000cf2c: 00000793 li a5,0 + 8000cf30: 1180006f j 8000d048 + 8000cf34: fa043783 ld a5,-96(s0) + 8000cf38: 0007b783 ld a5,0(a5) + 8000cf3c: fcf43423 sd a5,-56(s0) + 8000cf40: fa843783 ld a5,-88(s0) + 8000cf44: 00079c63 bnez a5,8000cf5c + 8000cf48: fc843783 ld a5,-56(s0) + 8000cf4c: fef43023 sd a5,-32(s0) + 8000cf50: 00100793 li a5,1 + 8000cf54: fef42623 sw a5,-20(s0) + 8000cf58: 00c0006f j 8000cf64 + 8000cf5c: fa843783 ld a5,-88(s0) + 8000cf60: fef43023 sd a5,-32(s0) + 8000cf64: a10f30ef jal ra,80000174 + 8000cf68: 00050793 mv a5,a0 + 8000cf6c: fcf43023 sd a5,-64(s0) + 8000cf70: fec42783 lw a5,-20(s0) + 8000cf74: 0007879b sext.w a5,a5 + 8000cf78: 04079463 bnez a5,8000cfc0 + 8000cf7c: fe043783 ld a5,-32(s0) + 8000cf80: fe878793 addi a5,a5,-24 + 8000cf84: faf43c23 sd a5,-72(s0) + 8000cf88: fb843783 ld a5,-72(s0) + 8000cf8c: 0147c783 lbu a5,20(a5) + 8000cf90: 0007879b sext.w a5,a5 + 8000cf94: f7f7f793 andi a5,a5,-129 + 8000cf98: 0007871b sext.w a4,a5 + 8000cf9c: fa043783 ld a5,-96(s0) + 8000cfa0: 0107c783 lbu a5,16(a5) + 8000cfa4: 0007879b sext.w a5,a5 + 8000cfa8: 00f70c63 beq a4,a5,8000cfc0 + 8000cfac: fc043783 ld a5,-64(s0) + 8000cfb0: 00078513 mv a0,a5 + 8000cfb4: 9c8f30ef jal ra,8000017c + 8000cfb8: 00000793 li a5,0 + 8000cfbc: 08c0006f j 8000d048 + 8000cfc0: fc042a23 sw zero,-44(s0) + 8000cfc4: fa043783 ld a5,-96(s0) + 8000cfc8: 0087b783 ld a5,8(a5) + 8000cfcc: fcf43c23 sd a5,-40(s0) + 8000cfd0: fe043783 ld a5,-32(s0) + 8000cfd4: 0007b783 ld a5,0(a5) + 8000cfd8: fef43023 sd a5,-32(s0) + 8000cfdc: fe043703 ld a4,-32(s0) + 8000cfe0: fc843783 ld a5,-56(s0) + 8000cfe4: 00f71663 bne a4,a5,8000cff0 + 8000cfe8: fe043023 sd zero,-32(s0) + 8000cfec: 0400006f j 8000d02c + 8000cff0: fd442783 lw a5,-44(s0) + 8000cff4: 0017879b addiw a5,a5,1 + 8000cff8: fcf42a23 sw a5,-44(s0) + 8000cffc: fd843783 ld a5,-40(s0) + 8000d000: 00878713 addi a4,a5,8 + 8000d004: fce43c23 sd a4,-40(s0) + 8000d008: fe043703 ld a4,-32(s0) + 8000d00c: 00e7b023 sd a4,0(a5) + 8000d010: fa043783 ld a5,-96(s0) + 8000d014: 0147a703 lw a4,20(a5) + 8000d018: fd442783 lw a5,-44(s0) + 8000d01c: 0007879b sext.w a5,a5 + 8000d020: 00e78463 beq a5,a4,8000d028 + 8000d024: fadff06f j 8000cfd0 + 8000d028: 00000013 nop + 8000d02c: fc043783 ld a5,-64(s0) + 8000d030: 00078513 mv a0,a5 + 8000d034: 948f30ef jal ra,8000017c + 8000d038: fa043783 ld a5,-96(s0) + 8000d03c: fd442703 lw a4,-44(s0) + 8000d040: 00e7ac23 sw a4,24(a5) + 8000d044: fe043783 ld a5,-32(s0) + 8000d048: 00078513 mv a0,a5 + 8000d04c: 05813083 ld ra,88(sp) + 8000d050: 05013403 ld s0,80(sp) + 8000d054: 06010113 addi sp,sp,96 + 8000d058: 00008067 ret + +000000008000d05c : + 8000d05c: e5010113 addi sp,sp,-432 + 8000d060: 1a113423 sd ra,424(sp) + 8000d064: 1a813023 sd s0,416(sp) + 8000d068: 18913c23 sd s1,408(sp) + 8000d06c: 19213823 sd s2,400(sp) + 8000d070: 1b010413 addi s0,sp,432 + 8000d074: fc043c23 sd zero,-40(s0) + 8000d078: 0000a797 auipc a5,0xa + 8000d07c: 29078793 addi a5,a5,656 # 80017308 + 8000d080: fcf43023 sd a5,-64(s0) + 8000d084: f3840713 addi a4,s0,-200 + 8000d088: f7840793 addi a5,s0,-136 + 8000d08c: 00800693 li a3,8 + 8000d090: 00070613 mv a2,a4 + 8000d094: 00100593 li a1,1 + 8000d098: 00078513 mv a0,a5 + 8000d09c: dbdff0ef jal ra,8000ce58 + 8000d0a0: 01400793 li a5,20 + 8000d0a4: faf42e23 sw a5,-68(s0) + 8000d0a8: fbc42783 lw a5,-68(s0) + 8000d0ac: fc043603 ld a2,-64(s0) + 8000d0b0: 00078593 mv a1,a5 + 8000d0b4: 0000a517 auipc a0,0xa + 8000d0b8: 25c50513 addi a0,a0,604 # 80017310 + 8000d0bc: 960fb0ef jal ra,8000821c + 8000d0c0: fbc42783 lw a5,-68(s0) + 8000d0c4: 00078513 mv a0,a5 + 8000d0c8: d41ff0ef jal ra,8000ce08 + 8000d0cc: 0000a517 auipc a0,0xa + 8000d0d0: 28c50513 addi a0,a0,652 # 80017358 + 8000d0d4: 948fb0ef jal ra,8000821c + 8000d0d8: f7840793 addi a5,s0,-136 + 8000d0dc: 00078593 mv a1,a5 + 8000d0e0: fd843503 ld a0,-40(s0) + 8000d0e4: e0dff0ef jal ra,8000cef0 + 8000d0e8: fca43c23 sd a0,-40(s0) + 8000d0ec: fc042a23 sw zero,-44(s0) + 8000d0f0: 2500006f j 8000d340 + 8000d0f4: fd442783 lw a5,-44(s0) + 8000d0f8: 00379793 slli a5,a5,0x3 + 8000d0fc: fe040713 addi a4,s0,-32 + 8000d100: 00f707b3 add a5,a4,a5 + 8000d104: f587b783 ld a5,-168(a5) + 8000d108: fe878793 addi a5,a5,-24 + 8000d10c: faf43823 sd a5,-80(s0) + 8000d110: 864f30ef jal ra,80000174 + 8000d114: 00050793 mv a5,a0 + 8000d118: faf43423 sd a5,-88(s0) + 8000d11c: fb043783 ld a5,-80(s0) + 8000d120: 0147c783 lbu a5,20(a5) + 8000d124: 0007879b sext.w a5,a5 + 8000d128: f7f7f793 andi a5,a5,-129 + 8000d12c: 0007871b sext.w a4,a5 + 8000d130: f8844783 lbu a5,-120(s0) + 8000d134: 0007879b sext.w a5,a5 + 8000d138: 00f70a63 beq a4,a5,8000d14c + 8000d13c: fa843783 ld a5,-88(s0) + 8000d140: 00078513 mv a0,a5 + 8000d144: 838f30ef jal ra,8000017c + 8000d148: 1ec0006f j 8000d334 + 8000d14c: e5040793 addi a5,s0,-432 + 8000d150: 0e800613 li a2,232 + 8000d154: fb043583 ld a1,-80(s0) + 8000d158: 00078513 mv a0,a5 + 8000d15c: 909f30ef jal ra,80000a64 + 8000d160: fa843783 ld a5,-88(s0) + 8000d164: 00078513 mv a0,a5 + 8000d168: 814f30ef jal ra,8000017c + 8000d16c: fb043783 ld a5,-80(s0) + 8000d170: faf43023 sd a5,-96(s0) + 8000d174: fa043683 ld a3,-96(s0) + 8000d178: fa043783 ld a5,-96(s0) + 8000d17c: 0697c783 lbu a5,105(a5) + 8000d180: 0007871b sext.w a4,a5 + 8000d184: fbc42783 lw a5,-68(s0) + 8000d188: 01400613 li a2,20 + 8000d18c: 00078593 mv a1,a5 + 8000d190: 0000a517 auipc a0,0xa + 8000d194: 20850513 addi a0,a0,520 # 80017398 + 8000d198: 884fb0ef jal ra,8000821c + 8000d19c: fa043783 ld a5,-96(s0) + 8000d1a0: 0687c783 lbu a5,104(a5) + 8000d1a4: 0077f793 andi a5,a5,7 + 8000d1a8: f8f40fa3 sb a5,-97(s0) + 8000d1ac: f9f44783 lbu a5,-97(s0) + 8000d1b0: 0ff7f713 andi a4,a5,255 + 8000d1b4: 00100793 li a5,1 + 8000d1b8: 00f71a63 bne a4,a5,8000d1cc + 8000d1bc: 0000a517 auipc a0,0xa + 8000d1c0: 1ec50513 addi a0,a0,492 # 800173a8 + 8000d1c4: 858fb0ef jal ra,8000821c + 8000d1c8: 07c0006f j 8000d244 + 8000d1cc: f9f44783 lbu a5,-97(s0) + 8000d1d0: 0ff7f713 andi a4,a5,255 + 8000d1d4: 00200793 li a5,2 + 8000d1d8: 00f71a63 bne a4,a5,8000d1ec + 8000d1dc: 0000a517 auipc a0,0xa + 8000d1e0: 1dc50513 addi a0,a0,476 # 800173b8 + 8000d1e4: 838fb0ef jal ra,8000821c + 8000d1e8: 05c0006f j 8000d244 + 8000d1ec: f9f44783 lbu a5,-97(s0) + 8000d1f0: 0ff7f793 andi a5,a5,255 + 8000d1f4: 00079a63 bnez a5,8000d208 + 8000d1f8: 0000a517 auipc a0,0xa + 8000d1fc: 1d050513 addi a0,a0,464 # 800173c8 + 8000d200: 81cfb0ef jal ra,8000821c + 8000d204: 0400006f j 8000d244 + 8000d208: f9f44783 lbu a5,-97(s0) + 8000d20c: 0ff7f713 andi a4,a5,255 + 8000d210: 00400793 li a5,4 + 8000d214: 00f71a63 bne a4,a5,8000d228 + 8000d218: 0000a517 auipc a0,0xa + 8000d21c: 1c050513 addi a0,a0,448 # 800173d8 + 8000d220: ffdfa0ef jal ra,8000821c + 8000d224: 0200006f j 8000d244 + 8000d228: f9f44783 lbu a5,-97(s0) + 8000d22c: 0ff7f713 andi a4,a5,255 + 8000d230: 00300793 li a5,3 + 8000d234: 00f71863 bne a4,a5,8000d244 + 8000d238: 0000a517 auipc a0,0xa + 8000d23c: 1b050513 addi a0,a0,432 # 800173e8 + 8000d240: fddfa0ef jal ra,8000821c + 8000d244: fa043783 ld a5,-96(s0) + 8000d248: 0507b783 ld a5,80(a5) + 8000d24c: fcf43423 sd a5,-56(s0) + 8000d250: 0100006f j 8000d260 + 8000d254: fc843783 ld a5,-56(s0) + 8000d258: 00178793 addi a5,a5,1 + 8000d25c: fcf43423 sd a5,-56(s0) + 8000d260: fc843783 ld a5,-56(s0) + 8000d264: 0007c783 lbu a5,0(a5) + 8000d268: 00078713 mv a4,a5 + 8000d26c: 02300793 li a5,35 + 8000d270: fef702e3 beq a4,a5,8000d254 + 8000d274: fa043783 ld a5,-96(s0) + 8000d278: 0587a783 lw a5,88(a5) + 8000d27c: 02079713 slli a4,a5,0x20 + 8000d280: 02075713 srli a4,a4,0x20 + 8000d284: fa043783 ld a5,-96(s0) + 8000d288: 0507b783 ld a5,80(a5) + 8000d28c: 00078693 mv a3,a5 + 8000d290: fa043783 ld a5,-96(s0) + 8000d294: 0387b783 ld a5,56(a5) + 8000d298: 40f687b3 sub a5,a3,a5 + 8000d29c: 00f704b3 add s1,a4,a5 + 8000d2a0: fa043783 ld a5,-96(s0) + 8000d2a4: 0587a903 lw s2,88(a5) + 8000d2a8: fa043783 ld a5,-96(s0) + 8000d2ac: 0587a783 lw a5,88(a5) + 8000d2b0: 02079713 slli a4,a5,0x20 + 8000d2b4: 02075713 srli a4,a4,0x20 + 8000d2b8: fa043783 ld a5,-96(s0) + 8000d2bc: 0507b783 ld a5,80(a5) + 8000d2c0: 00078693 mv a3,a5 + 8000d2c4: fc843783 ld a5,-56(s0) + 8000d2c8: 40f687b3 sub a5,a3,a5 + 8000d2cc: 00f70733 add a4,a4,a5 + 8000d2d0: 00070793 mv a5,a4 + 8000d2d4: 00179793 slli a5,a5,0x1 + 8000d2d8: 00e787b3 add a5,a5,a4 + 8000d2dc: 00379793 slli a5,a5,0x3 + 8000d2e0: 00e787b3 add a5,a5,a4 + 8000d2e4: 00279793 slli a5,a5,0x2 + 8000d2e8: 00078713 mv a4,a5 + 8000d2ec: fa043783 ld a5,-96(s0) + 8000d2f0: 0587a783 lw a5,88(a5) + 8000d2f4: 02079793 slli a5,a5,0x20 + 8000d2f8: 0207d793 srli a5,a5,0x20 + 8000d2fc: 00078593 mv a1,a5 + 8000d300: 00070513 mv a0,a4 + 8000d304: d95f20ef jal ra,80000098 <__udivdi3> + 8000d308: 00050793 mv a5,a0 + 8000d30c: 00078693 mv a3,a5 + 8000d310: fa043783 ld a5,-96(s0) + 8000d314: 0807b703 ld a4,128(a5) + 8000d318: fa043783 ld a5,-96(s0) + 8000d31c: 0607b783 ld a5,96(a5) + 8000d320: 00090613 mv a2,s2 + 8000d324: 00048593 mv a1,s1 + 8000d328: 0000a517 auipc a0,0xa + 8000d32c: 0d050513 addi a0,a0,208 # 800173f8 + 8000d330: eedfa0ef jal ra,8000821c + 8000d334: fd442783 lw a5,-44(s0) + 8000d338: 0017879b addiw a5,a5,1 + 8000d33c: fcf42a23 sw a5,-44(s0) + 8000d340: f9042703 lw a4,-112(s0) + 8000d344: fd442783 lw a5,-44(s0) + 8000d348: 0007879b sext.w a5,a5 + 8000d34c: dae7c4e3 blt a5,a4,8000d0f4 + 8000d350: fd843783 ld a5,-40(s0) + 8000d354: d80792e3 bnez a5,8000d0d8 + 8000d358: 00000793 li a5,0 + 8000d35c: 00078513 mv a0,a5 + 8000d360: 1a813083 ld ra,424(sp) + 8000d364: 1a013403 ld s0,416(sp) + 8000d368: 19813483 ld s1,408(sp) + 8000d36c: 19013903 ld s2,400(sp) + 8000d370: 1b010113 addi sp,sp,432 + 8000d374: 00008067 ret + +000000008000d378 : + 8000d378: fd010113 addi sp,sp,-48 + 8000d37c: 02113423 sd ra,40(sp) + 8000d380: 02813023 sd s0,32(sp) + 8000d384: 03010413 addi s0,sp,48 + 8000d388: fca43c23 sd a0,-40(s0) + 8000d38c: fd843783 ld a5,-40(s0) + 8000d390: 0007b783 ld a5,0(a5) + 8000d394: fef43423 sd a5,-24(s0) + 8000d398: 04c0006f j 8000d3e4 + 8000d39c: fe843783 ld a5,-24(s0) + 8000d3a0: fd878793 addi a5,a5,-40 + 8000d3a4: fef43023 sd a5,-32(s0) + 8000d3a8: fe043783 ld a5,-32(s0) + 8000d3ac: 00078593 mv a1,a5 + 8000d3b0: 0000a517 auipc a0,0xa + 8000d3b4: 07050513 addi a0,a0,112 # 80017420 + 8000d3b8: e65fa0ef jal ra,8000821c + 8000d3bc: fe843783 ld a5,-24(s0) + 8000d3c0: 0007b783 ld a5,0(a5) + 8000d3c4: fd843703 ld a4,-40(s0) + 8000d3c8: 00f70863 beq a4,a5,8000d3d8 + 8000d3cc: 0000a517 auipc a0,0xa + 8000d3d0: 05c50513 addi a0,a0,92 # 80017428 + 8000d3d4: e49fa0ef jal ra,8000821c + 8000d3d8: fe843783 ld a5,-24(s0) + 8000d3dc: 0007b783 ld a5,0(a5) + 8000d3e0: fef43423 sd a5,-24(s0) + 8000d3e4: fe843703 ld a4,-24(s0) + 8000d3e8: fd843783 ld a5,-40(s0) + 8000d3ec: faf718e3 bne a4,a5,8000d39c + 8000d3f0: 00000013 nop + 8000d3f4: 00000013 nop + 8000d3f8: 02813083 ld ra,40(sp) + 8000d3fc: 02013403 ld s0,32(sp) + 8000d400: 03010113 addi sp,sp,48 + 8000d404: 00008067 ret + +000000008000d408 : + 8000d408: f4010113 addi sp,sp,-192 + 8000d40c: 0a113c23 sd ra,184(sp) + 8000d410: 0a813823 sd s0,176(sp) + 8000d414: 0a913423 sd s1,168(sp) + 8000d418: 0b213023 sd s2,160(sp) + 8000d41c: 0c010413 addi s0,sp,192 + 8000d420: fc043c23 sd zero,-40(s0) + 8000d424: 0000a797 auipc a5,0xa + 8000d428: 00c78793 addi a5,a5,12 # 80017430 + 8000d42c: fcf43423 sd a5,-56(s0) + 8000d430: f4840713 addi a4,s0,-184 + 8000d434: f8840793 addi a5,s0,-120 + 8000d438: 00800693 li a3,8 + 8000d43c: 00070613 mv a2,a4 + 8000d440: 00200593 li a1,2 + 8000d444: 00078513 mv a0,a5 + 8000d448: a11ff0ef jal ra,8000ce58 + 8000d44c: 01400793 li a5,20 + 8000d450: fcf42223 sw a5,-60(s0) + 8000d454: fc442783 lw a5,-60(s0) + 8000d458: fc843603 ld a2,-56(s0) + 8000d45c: 00078593 mv a1,a5 + 8000d460: 0000a517 auipc a0,0xa + 8000d464: fe050513 addi a0,a0,-32 # 80017440 + 8000d468: db5fa0ef jal ra,8000821c + 8000d46c: fc442783 lw a5,-60(s0) + 8000d470: 00078513 mv a0,a5 + 8000d474: 995ff0ef jal ra,8000ce08 + 8000d478: 0000a517 auipc a0,0xa + 8000d47c: fe850513 addi a0,a0,-24 # 80017460 + 8000d480: d9dfa0ef jal ra,8000821c + 8000d484: f8840793 addi a5,s0,-120 + 8000d488: 00078593 mv a1,a5 + 8000d48c: fd843503 ld a0,-40(s0) + 8000d490: a61ff0ef jal ra,8000cef0 + 8000d494: fca43c23 sd a0,-40(s0) + 8000d498: fc042a23 sw zero,-44(s0) + 8000d49c: 13c0006f j 8000d5d8 + 8000d4a0: fd442783 lw a5,-44(s0) + 8000d4a4: 00379793 slli a5,a5,0x3 + 8000d4a8: fe040713 addi a4,s0,-32 + 8000d4ac: 00f707b3 add a5,a4,a5 + 8000d4b0: f687b783 ld a5,-152(a5) + 8000d4b4: fe878793 addi a5,a5,-24 + 8000d4b8: faf43c23 sd a5,-72(s0) + 8000d4bc: cb9f20ef jal ra,80000174 + 8000d4c0: 00050793 mv a5,a0 + 8000d4c4: faf43823 sd a5,-80(s0) + 8000d4c8: fb843783 ld a5,-72(s0) + 8000d4cc: 0147c783 lbu a5,20(a5) + 8000d4d0: 0007879b sext.w a5,a5 + 8000d4d4: f7f7f793 andi a5,a5,-129 + 8000d4d8: 0007871b sext.w a4,a5 + 8000d4dc: f9844783 lbu a5,-104(s0) + 8000d4e0: 0007879b sext.w a5,a5 + 8000d4e4: 00f70a63 beq a4,a5,8000d4f8 + 8000d4e8: fb043783 ld a5,-80(s0) + 8000d4ec: 00078513 mv a0,a5 + 8000d4f0: c8df20ef jal ra,8000017c + 8000d4f4: 0d80006f j 8000d5cc + 8000d4f8: fb043783 ld a5,-80(s0) + 8000d4fc: 00078513 mv a0,a5 + 8000d500: c7df20ef jal ra,8000017c + 8000d504: fb843783 ld a5,-72(s0) + 8000d508: faf43423 sd a5,-88(s0) + 8000d50c: fa843783 ld a5,-88(s0) + 8000d510: 02878793 addi a5,a5,40 + 8000d514: 00078513 mv a0,a5 + 8000d518: fc4ff0ef jal ra,8000ccdc + 8000d51c: 00050793 mv a5,a0 + 8000d520: 06079463 bnez a5,8000d588 + 8000d524: fa843483 ld s1,-88(s0) + 8000d528: fa843783 ld a5,-88(s0) + 8000d52c: 0387d783 lhu a5,56(a5) + 8000d530: 0007891b sext.w s2,a5 + 8000d534: fa843783 ld a5,-88(s0) + 8000d538: 02878793 addi a5,a5,40 + 8000d53c: 00078513 mv a0,a5 + 8000d540: fd8ff0ef jal ra,8000cd18 + 8000d544: 00050793 mv a5,a0 + 8000d548: 0007879b sext.w a5,a5 + 8000d54c: fc442583 lw a1,-60(s0) + 8000d550: 00090713 mv a4,s2 + 8000d554: 00048693 mv a3,s1 + 8000d558: 01400613 li a2,20 + 8000d55c: 0000a517 auipc a0,0xa + 8000d560: f1c50513 addi a0,a0,-228 # 80017478 + 8000d564: cb9fa0ef jal ra,8000821c + 8000d568: fa843783 ld a5,-88(s0) + 8000d56c: 02878793 addi a5,a5,40 + 8000d570: 00078513 mv a0,a5 + 8000d574: e05ff0ef jal ra,8000d378 + 8000d578: 0000a517 auipc a0,0xa + 8000d57c: f1050513 addi a0,a0,-240 # 80017488 + 8000d580: c9dfa0ef jal ra,8000821c + 8000d584: 0480006f j 8000d5cc + 8000d588: fa843483 ld s1,-88(s0) + 8000d58c: fa843783 ld a5,-88(s0) + 8000d590: 0387d783 lhu a5,56(a5) + 8000d594: 0007891b sext.w s2,a5 + 8000d598: fa843783 ld a5,-88(s0) + 8000d59c: 02878793 addi a5,a5,40 + 8000d5a0: 00078513 mv a0,a5 + 8000d5a4: f74ff0ef jal ra,8000cd18 + 8000d5a8: 00050793 mv a5,a0 + 8000d5ac: 0007879b sext.w a5,a5 + 8000d5b0: fc442583 lw a1,-60(s0) + 8000d5b4: 00090713 mv a4,s2 + 8000d5b8: 00048693 mv a3,s1 + 8000d5bc: 01400613 li a2,20 + 8000d5c0: 0000a517 auipc a0,0xa + 8000d5c4: ed050513 addi a0,a0,-304 # 80017490 + 8000d5c8: c55fa0ef jal ra,8000821c + 8000d5cc: fd442783 lw a5,-44(s0) + 8000d5d0: 0017879b addiw a5,a5,1 + 8000d5d4: fcf42a23 sw a5,-44(s0) + 8000d5d8: fa042703 lw a4,-96(s0) + 8000d5dc: fd442783 lw a5,-44(s0) + 8000d5e0: 0007879b sext.w a5,a5 + 8000d5e4: eae7cee3 blt a5,a4,8000d4a0 + 8000d5e8: fd843783 ld a5,-40(s0) + 8000d5ec: e8079ce3 bnez a5,8000d484 + 8000d5f0: 00000793 li a5,0 + 8000d5f4: 00078513 mv a0,a5 + 8000d5f8: 0b813083 ld ra,184(sp) + 8000d5fc: 0b013403 ld s0,176(sp) + 8000d600: 0a813483 ld s1,168(sp) + 8000d604: 0a013903 ld s2,160(sp) + 8000d608: 0c010113 addi sp,sp,192 + 8000d60c: 00008067 ret + +000000008000d610 : + 8000d610: f4010113 addi sp,sp,-192 + 8000d614: 0a113c23 sd ra,184(sp) + 8000d618: 0a813823 sd s0,176(sp) + 8000d61c: 0a913423 sd s1,168(sp) + 8000d620: 0b213023 sd s2,160(sp) + 8000d624: 0c010413 addi s0,sp,192 + 8000d628: fc043c23 sd zero,-40(s0) + 8000d62c: 0000a797 auipc a5,0xa + 8000d630: e7478793 addi a5,a5,-396 # 800174a0 + 8000d634: fcf43423 sd a5,-56(s0) + 8000d638: f4840713 addi a4,s0,-184 + 8000d63c: f8840793 addi a5,s0,-120 + 8000d640: 00800693 li a3,8 + 8000d644: 00070613 mv a2,a4 + 8000d648: 00400593 li a1,4 + 8000d64c: 00078513 mv a0,a5 + 8000d650: 809ff0ef jal ra,8000ce58 + 8000d654: 01400793 li a5,20 + 8000d658: fcf42223 sw a5,-60(s0) + 8000d65c: fc442783 lw a5,-60(s0) + 8000d660: fc843603 ld a2,-56(s0) + 8000d664: 00078593 mv a1,a5 + 8000d668: 0000a517 auipc a0,0xa + 8000d66c: e4050513 addi a0,a0,-448 # 800174a8 + 8000d670: badfa0ef jal ra,8000821c + 8000d674: fc442783 lw a5,-60(s0) + 8000d678: 00078513 mv a0,a5 + 8000d67c: f8cff0ef jal ra,8000ce08 + 8000d680: 0000a517 auipc a0,0xa + 8000d684: e5050513 addi a0,a0,-432 # 800174d0 + 8000d688: b95fa0ef jal ra,8000821c + 8000d68c: f8840793 addi a5,s0,-120 + 8000d690: 00078593 mv a1,a5 + 8000d694: fd843503 ld a0,-40(s0) + 8000d698: 859ff0ef jal ra,8000cef0 + 8000d69c: fca43c23 sd a0,-40(s0) + 8000d6a0: fc042a23 sw zero,-44(s0) + 8000d6a4: 1180006f j 8000d7bc + 8000d6a8: fd442783 lw a5,-44(s0) + 8000d6ac: 00379793 slli a5,a5,0x3 + 8000d6b0: fe040713 addi a4,s0,-32 + 8000d6b4: 00f707b3 add a5,a4,a5 + 8000d6b8: f687b783 ld a5,-152(a5) + 8000d6bc: fe878793 addi a5,a5,-24 + 8000d6c0: faf43c23 sd a5,-72(s0) + 8000d6c4: ab1f20ef jal ra,80000174 + 8000d6c8: 00050793 mv a5,a0 + 8000d6cc: faf43823 sd a5,-80(s0) + 8000d6d0: fb843783 ld a5,-72(s0) + 8000d6d4: 0147c783 lbu a5,20(a5) + 8000d6d8: 0007879b sext.w a5,a5 + 8000d6dc: f7f7f793 andi a5,a5,-129 + 8000d6e0: 0007871b sext.w a4,a5 + 8000d6e4: f9844783 lbu a5,-104(s0) + 8000d6e8: 0007879b sext.w a5,a5 + 8000d6ec: 00f70a63 beq a4,a5,8000d700 + 8000d6f0: fb043783 ld a5,-80(s0) + 8000d6f4: 00078513 mv a0,a5 + 8000d6f8: a85f20ef jal ra,8000017c + 8000d6fc: 0b40006f j 8000d7b0 + 8000d700: fb043783 ld a5,-80(s0) + 8000d704: 00078513 mv a0,a5 + 8000d708: a75f20ef jal ra,8000017c + 8000d70c: fb843783 ld a5,-72(s0) + 8000d710: faf43423 sd a5,-88(s0) + 8000d714: fa843783 ld a5,-88(s0) + 8000d718: 02878793 addi a5,a5,40 + 8000d71c: 00078513 mv a0,a5 + 8000d720: dbcff0ef jal ra,8000ccdc + 8000d724: 00050793 mv a5,a0 + 8000d728: 06079263 bnez a5,8000d78c + 8000d72c: fa843483 ld s1,-88(s0) + 8000d730: fa843783 ld a5,-88(s0) + 8000d734: 0387a903 lw s2,56(a5) + 8000d738: fa843783 ld a5,-88(s0) + 8000d73c: 02878793 addi a5,a5,40 + 8000d740: 00078513 mv a0,a5 + 8000d744: dd4ff0ef jal ra,8000cd18 + 8000d748: 00050793 mv a5,a0 + 8000d74c: 0007879b sext.w a5,a5 + 8000d750: fc442583 lw a1,-60(s0) + 8000d754: 00090713 mv a4,s2 + 8000d758: 00048693 mv a3,s1 + 8000d75c: 01400613 li a2,20 + 8000d760: 0000a517 auipc a0,0xa + 8000d764: d9050513 addi a0,a0,-624 # 800174f0 + 8000d768: ab5fa0ef jal ra,8000821c + 8000d76c: fa843783 ld a5,-88(s0) + 8000d770: 02878793 addi a5,a5,40 + 8000d774: 00078513 mv a0,a5 + 8000d778: c01ff0ef jal ra,8000d378 + 8000d77c: 0000a517 auipc a0,0xa + 8000d780: d0c50513 addi a0,a0,-756 # 80017488 + 8000d784: a99fa0ef jal ra,8000821c + 8000d788: 0280006f j 8000d7b0 + 8000d78c: fa843683 ld a3,-88(s0) + 8000d790: fa843783 ld a5,-88(s0) + 8000d794: 0387a703 lw a4,56(a5) + 8000d798: fc442783 lw a5,-60(s0) + 8000d79c: 01400613 li a2,20 + 8000d7a0: 00078593 mv a1,a5 + 8000d7a4: 0000a517 auipc a0,0xa + 8000d7a8: d6450513 addi a0,a0,-668 # 80017508 + 8000d7ac: a71fa0ef jal ra,8000821c + 8000d7b0: fd442783 lw a5,-44(s0) + 8000d7b4: 0017879b addiw a5,a5,1 + 8000d7b8: fcf42a23 sw a5,-44(s0) + 8000d7bc: fa042703 lw a4,-96(s0) + 8000d7c0: fd442783 lw a5,-44(s0) + 8000d7c4: 0007879b sext.w a5,a5 + 8000d7c8: eee7c0e3 blt a5,a4,8000d6a8 + 8000d7cc: fd843783 ld a5,-40(s0) + 8000d7d0: ea079ee3 bnez a5,8000d68c + 8000d7d4: 00000793 li a5,0 + 8000d7d8: 00078513 mv a0,a5 + 8000d7dc: 0b813083 ld ra,184(sp) + 8000d7e0: 0b013403 ld s0,176(sp) + 8000d7e4: 0a813483 ld s1,168(sp) + 8000d7e8: 0a013903 ld s2,160(sp) + 8000d7ec: 0c010113 addi sp,sp,192 + 8000d7f0: 00008067 ret + +000000008000d7f4 : + 8000d7f4: f3010113 addi sp,sp,-208 + 8000d7f8: 0c113423 sd ra,200(sp) + 8000d7fc: 0c813023 sd s0,192(sp) + 8000d800: 0a913c23 sd s1,184(sp) + 8000d804: 0b213823 sd s2,176(sp) + 8000d808: 0b313423 sd s3,168(sp) + 8000d80c: 0d010413 addi s0,sp,208 + 8000d810: fc043423 sd zero,-56(s0) + 8000d814: 0000a797 auipc a5,0xa + 8000d818: d0c78793 addi a5,a5,-756 # 80017520 + 8000d81c: faf43c23 sd a5,-72(s0) + 8000d820: f3840713 addi a4,s0,-200 + 8000d824: f7840793 addi a5,s0,-136 + 8000d828: 00800693 li a3,8 + 8000d82c: 00070613 mv a2,a4 + 8000d830: 00300593 li a1,3 + 8000d834: 00078513 mv a0,a5 + 8000d838: e20ff0ef jal ra,8000ce58 + 8000d83c: 01400793 li a5,20 + 8000d840: faf42a23 sw a5,-76(s0) + 8000d844: fb442783 lw a5,-76(s0) + 8000d848: fb843603 ld a2,-72(s0) + 8000d84c: 00078593 mv a1,a5 + 8000d850: 0000a517 auipc a0,0xa + 8000d854: cd850513 addi a0,a0,-808 # 80017528 + 8000d858: 9c5fa0ef jal ra,8000821c + 8000d85c: fb442783 lw a5,-76(s0) + 8000d860: 00078513 mv a0,a5 + 8000d864: da4ff0ef jal ra,8000ce08 + 8000d868: 0000a517 auipc a0,0xa + 8000d86c: ce850513 addi a0,a0,-792 # 80017550 + 8000d870: 9adfa0ef jal ra,8000821c + 8000d874: f7840793 addi a5,s0,-136 + 8000d878: 00078593 mv a1,a5 + 8000d87c: fc843503 ld a0,-56(s0) + 8000d880: e70ff0ef jal ra,8000cef0 + 8000d884: fca43423 sd a0,-56(s0) + 8000d888: fc042223 sw zero,-60(s0) + 8000d88c: 0d80006f j 8000d964 + 8000d890: fc442783 lw a5,-60(s0) + 8000d894: 00379793 slli a5,a5,0x3 + 8000d898: fd040713 addi a4,s0,-48 + 8000d89c: 00f707b3 add a5,a4,a5 + 8000d8a0: f687b783 ld a5,-152(a5) + 8000d8a4: fe878793 addi a5,a5,-24 + 8000d8a8: faf43423 sd a5,-88(s0) + 8000d8ac: 8c9f20ef jal ra,80000174 + 8000d8b0: 00050793 mv a5,a0 + 8000d8b4: faf43023 sd a5,-96(s0) + 8000d8b8: fa843783 ld a5,-88(s0) + 8000d8bc: 0147c783 lbu a5,20(a5) + 8000d8c0: 0007879b sext.w a5,a5 + 8000d8c4: f7f7f793 andi a5,a5,-129 + 8000d8c8: 0007871b sext.w a4,a5 + 8000d8cc: f8844783 lbu a5,-120(s0) + 8000d8d0: 0007879b sext.w a5,a5 + 8000d8d4: 00f70a63 beq a4,a5,8000d8e8 + 8000d8d8: fa043783 ld a5,-96(s0) + 8000d8dc: 00078513 mv a0,a5 + 8000d8e0: 89df20ef jal ra,8000017c + 8000d8e4: 0740006f j 8000d958 + 8000d8e8: fa043783 ld a5,-96(s0) + 8000d8ec: 00078513 mv a0,a5 + 8000d8f0: 88df20ef jal ra,8000017c + 8000d8f4: fa843783 ld a5,-88(s0) + 8000d8f8: f8f43c23 sd a5,-104(s0) + 8000d8fc: f9843483 ld s1,-104(s0) + 8000d900: f9843783 ld a5,-104(s0) + 8000d904: 0407b783 ld a5,64(a5) + 8000d908: 00078993 mv s3,a5 + 8000d90c: f9843783 ld a5,-104(s0) + 8000d910: 03b7c783 lbu a5,59(a5) + 8000d914: 0007891b sext.w s2,a5 + 8000d918: f9843783 ld a5,-104(s0) + 8000d91c: 02878793 addi a5,a5,40 + 8000d920: 00078513 mv a0,a5 + 8000d924: bf4ff0ef jal ra,8000cd18 + 8000d928: 00050793 mv a5,a0 + 8000d92c: 0007879b sext.w a5,a5 + 8000d930: fb442583 lw a1,-76(s0) + 8000d934: 00078893 mv a7,a5 + 8000d938: 00090813 mv a6,s2 + 8000d93c: 00098793 mv a5,s3 + 8000d940: 01400713 li a4,20 + 8000d944: 00048693 mv a3,s1 + 8000d948: 01400613 li a2,20 + 8000d94c: 0000a517 auipc a0,0xa + 8000d950: c2450513 addi a0,a0,-988 # 80017570 + 8000d954: 8c9fa0ef jal ra,8000821c + 8000d958: fc442783 lw a5,-60(s0) + 8000d95c: 0017879b addiw a5,a5,1 + 8000d960: fcf42223 sw a5,-60(s0) + 8000d964: f9042703 lw a4,-112(s0) + 8000d968: fc442783 lw a5,-60(s0) + 8000d96c: 0007879b sext.w a5,a5 + 8000d970: f2e7c0e3 blt a5,a4,8000d890 + 8000d974: fc843783 ld a5,-56(s0) + 8000d978: ee079ee3 bnez a5,8000d874 + 8000d97c: 00000793 li a5,0 + 8000d980: 00078513 mv a0,a5 + 8000d984: 0c813083 ld ra,200(sp) + 8000d988: 0c013403 ld s0,192(sp) + 8000d98c: 0b813483 ld s1,184(sp) + 8000d990: 0b013903 ld s2,176(sp) + 8000d994: 0a813983 ld s3,168(sp) + 8000d998: 0d010113 addi sp,sp,208 + 8000d99c: 00008067 ret + +000000008000d9a0 : + 8000d9a0: f3010113 addi sp,sp,-208 + 8000d9a4: 0c113423 sd ra,200(sp) + 8000d9a8: 0c813023 sd s0,192(sp) + 8000d9ac: 0a913c23 sd s1,184(sp) + 8000d9b0: 0b213823 sd s2,176(sp) + 8000d9b4: 0b313423 sd s3,168(sp) + 8000d9b8: 0d010413 addi s0,sp,208 + 8000d9bc: fc043423 sd zero,-56(s0) + 8000d9c0: 0000a797 auipc a5,0xa + 8000d9c4: bc878793 addi a5,a5,-1080 # 80017588 + 8000d9c8: faf43c23 sd a5,-72(s0) + 8000d9cc: f3840713 addi a4,s0,-200 + 8000d9d0: f7840793 addi a5,s0,-136 + 8000d9d4: 00800693 li a3,8 + 8000d9d8: 00070613 mv a2,a4 + 8000d9dc: 00500593 li a1,5 + 8000d9e0: 00078513 mv a0,a5 + 8000d9e4: c74ff0ef jal ra,8000ce58 + 8000d9e8: 01400793 li a5,20 + 8000d9ec: faf42a23 sw a5,-76(s0) + 8000d9f0: fb442783 lw a5,-76(s0) + 8000d9f4: fb843603 ld a2,-72(s0) + 8000d9f8: 00078593 mv a1,a5 + 8000d9fc: 0000a517 auipc a0,0xa + 8000da00: b9450513 addi a0,a0,-1132 # 80017590 + 8000da04: 819fa0ef jal ra,8000821c + 8000da08: fb442783 lw a5,-76(s0) + 8000da0c: 00078513 mv a0,a5 + 8000da10: bf8ff0ef jal ra,8000ce08 + 8000da14: 0000a517 auipc a0,0xa + 8000da18: ba450513 addi a0,a0,-1116 # 800175b8 + 8000da1c: 801fa0ef jal ra,8000821c + 8000da20: f7840793 addi a5,s0,-136 + 8000da24: 00078593 mv a1,a5 + 8000da28: fc843503 ld a0,-56(s0) + 8000da2c: cc4ff0ef jal ra,8000cef0 + 8000da30: fca43423 sd a0,-56(s0) + 8000da34: fc042223 sw zero,-60(s0) + 8000da38: 1640006f j 8000db9c + 8000da3c: fc442783 lw a5,-60(s0) + 8000da40: 00379793 slli a5,a5,0x3 + 8000da44: fd040713 addi a4,s0,-48 + 8000da48: 00f707b3 add a5,a4,a5 + 8000da4c: f687b783 ld a5,-152(a5) + 8000da50: fe878793 addi a5,a5,-24 + 8000da54: faf43423 sd a5,-88(s0) + 8000da58: f1cf20ef jal ra,80000174 + 8000da5c: 00050793 mv a5,a0 + 8000da60: faf43023 sd a5,-96(s0) + 8000da64: fa843783 ld a5,-88(s0) + 8000da68: 0147c783 lbu a5,20(a5) + 8000da6c: 0007879b sext.w a5,a5 + 8000da70: f7f7f793 andi a5,a5,-129 + 8000da74: 0007871b sext.w a4,a5 + 8000da78: f8844783 lbu a5,-120(s0) + 8000da7c: 0007879b sext.w a5,a5 + 8000da80: 00f70a63 beq a4,a5,8000da94 + 8000da84: fa043783 ld a5,-96(s0) + 8000da88: 00078513 mv a0,a5 + 8000da8c: ef0f20ef jal ra,8000017c + 8000da90: 1000006f j 8000db90 + 8000da94: fa043783 ld a5,-96(s0) + 8000da98: 00078513 mv a0,a5 + 8000da9c: ee0f20ef jal ra,8000017c + 8000daa0: fa843783 ld a5,-88(s0) + 8000daa4: f8f43c23 sd a5,-104(s0) + 8000daa8: f9843783 ld a5,-104(s0) + 8000daac: 02878793 addi a5,a5,40 + 8000dab0: 00078513 mv a0,a5 + 8000dab4: a28ff0ef jal ra,8000ccdc + 8000dab8: 00050793 mv a5,a0 + 8000dabc: 06079e63 bnez a5,8000db38 + 8000dac0: f9843483 ld s1,-104(s0) + 8000dac4: f9843783 ld a5,-104(s0) + 8000dac8: 0427d783 lhu a5,66(a5) + 8000dacc: 0007891b sext.w s2,a5 + 8000dad0: f9843783 ld a5,-104(s0) + 8000dad4: 0407d783 lhu a5,64(a5) + 8000dad8: 0007899b sext.w s3,a5 + 8000dadc: f9843783 ld a5,-104(s0) + 8000dae0: 02878793 addi a5,a5,40 + 8000dae4: 00078513 mv a0,a5 + 8000dae8: a30ff0ef jal ra,8000cd18 + 8000daec: 00050793 mv a5,a0 + 8000daf0: 0007879b sext.w a5,a5 + 8000daf4: fb442583 lw a1,-76(s0) + 8000daf8: 00078813 mv a6,a5 + 8000dafc: 00098793 mv a5,s3 + 8000db00: 00090713 mv a4,s2 + 8000db04: 00048693 mv a3,s1 + 8000db08: 01400613 li a2,20 + 8000db0c: 0000a517 auipc a0,0xa + 8000db10: acc50513 addi a0,a0,-1332 # 800175d8 + 8000db14: f08fa0ef jal ra,8000821c + 8000db18: f9843783 ld a5,-104(s0) + 8000db1c: 02878793 addi a5,a5,40 + 8000db20: 00078513 mv a0,a5 + 8000db24: 855ff0ef jal ra,8000d378 + 8000db28: 0000a517 auipc a0,0xa + 8000db2c: 96050513 addi a0,a0,-1696 # 80017488 + 8000db30: eecfa0ef jal ra,8000821c + 8000db34: 05c0006f j 8000db90 + 8000db38: f9843483 ld s1,-104(s0) + 8000db3c: f9843783 ld a5,-104(s0) + 8000db40: 0427d783 lhu a5,66(a5) + 8000db44: 0007891b sext.w s2,a5 + 8000db48: f9843783 ld a5,-104(s0) + 8000db4c: 0407d783 lhu a5,64(a5) + 8000db50: 0007899b sext.w s3,a5 + 8000db54: f9843783 ld a5,-104(s0) + 8000db58: 02878793 addi a5,a5,40 + 8000db5c: 00078513 mv a0,a5 + 8000db60: 9b8ff0ef jal ra,8000cd18 + 8000db64: 00050793 mv a5,a0 + 8000db68: 0007879b sext.w a5,a5 + 8000db6c: fb442583 lw a1,-76(s0) + 8000db70: 00078813 mv a6,a5 + 8000db74: 00098793 mv a5,s3 + 8000db78: 00090713 mv a4,s2 + 8000db7c: 00048693 mv a3,s1 + 8000db80: 01400613 li a2,20 + 8000db84: 0000a517 auipc a0,0xa + 8000db88: a6c50513 addi a0,a0,-1428 # 800175f0 + 8000db8c: e90fa0ef jal ra,8000821c + 8000db90: fc442783 lw a5,-60(s0) + 8000db94: 0017879b addiw a5,a5,1 + 8000db98: fcf42223 sw a5,-60(s0) + 8000db9c: f9042703 lw a4,-112(s0) + 8000dba0: fc442783 lw a5,-60(s0) + 8000dba4: 0007879b sext.w a5,a5 + 8000dba8: e8e7cae3 blt a5,a4,8000da3c + 8000dbac: fc843783 ld a5,-56(s0) + 8000dbb0: e60798e3 bnez a5,8000da20 + 8000dbb4: 00000793 li a5,0 + 8000dbb8: 00078513 mv a0,a5 + 8000dbbc: 0c813083 ld ra,200(sp) + 8000dbc0: 0c013403 ld s0,192(sp) + 8000dbc4: 0b813483 ld s1,184(sp) + 8000dbc8: 0b013903 ld s2,176(sp) + 8000dbcc: 0a813983 ld s3,168(sp) + 8000dbd0: 0d010113 addi sp,sp,208 + 8000dbd4: 00008067 ret + +000000008000dbd8 : + 8000dbd8: f4010113 addi sp,sp,-192 + 8000dbdc: 0a113c23 sd ra,184(sp) + 8000dbe0: 0a813823 sd s0,176(sp) + 8000dbe4: 0a913423 sd s1,168(sp) + 8000dbe8: 0b213023 sd s2,160(sp) + 8000dbec: 0c010413 addi s0,sp,192 + 8000dbf0: fc043c23 sd zero,-40(s0) + 8000dbf4: 0000a797 auipc a5,0xa + 8000dbf8: a1478793 addi a5,a5,-1516 # 80017608 + 8000dbfc: fcf43423 sd a5,-56(s0) + 8000dc00: f4840713 addi a4,s0,-184 + 8000dc04: f8840793 addi a5,s0,-120 + 8000dc08: 00800693 li a3,8 + 8000dc0c: 00070613 mv a2,a4 + 8000dc10: 00600593 li a1,6 + 8000dc14: 00078513 mv a0,a5 + 8000dc18: a40ff0ef jal ra,8000ce58 + 8000dc1c: 01400793 li a5,20 + 8000dc20: fcf42223 sw a5,-60(s0) + 8000dc24: fc442783 lw a5,-60(s0) + 8000dc28: fc843603 ld a2,-56(s0) + 8000dc2c: 00078593 mv a1,a5 + 8000dc30: 0000a517 auipc a0,0xa + 8000dc34: 9e850513 addi a0,a0,-1560 # 80017618 + 8000dc38: de4fa0ef jal ra,8000821c + 8000dc3c: fc442783 lw a5,-60(s0) + 8000dc40: 00078513 mv a0,a5 + 8000dc44: 9c4ff0ef jal ra,8000ce08 + 8000dc48: 0000a517 auipc a0,0xa + 8000dc4c: 9f050513 addi a0,a0,-1552 # 80017638 + 8000dc50: dccfa0ef jal ra,8000821c + 8000dc54: f8840793 addi a5,s0,-120 + 8000dc58: 00078593 mv a1,a5 + 8000dc5c: fd843503 ld a0,-40(s0) + 8000dc60: a90ff0ef jal ra,8000cef0 + 8000dc64: fca43c23 sd a0,-40(s0) + 8000dc68: fc042a23 sw zero,-44(s0) + 8000dc6c: 13c0006f j 8000dda8 + 8000dc70: fd442783 lw a5,-44(s0) + 8000dc74: 00379793 slli a5,a5,0x3 + 8000dc78: fe040713 addi a4,s0,-32 + 8000dc7c: 00f707b3 add a5,a4,a5 + 8000dc80: f687b783 ld a5,-152(a5) + 8000dc84: fe878793 addi a5,a5,-24 + 8000dc88: faf43c23 sd a5,-72(s0) + 8000dc8c: ce8f20ef jal ra,80000174 + 8000dc90: 00050793 mv a5,a0 + 8000dc94: faf43823 sd a5,-80(s0) + 8000dc98: fb843783 ld a5,-72(s0) + 8000dc9c: 0147c783 lbu a5,20(a5) + 8000dca0: 0007879b sext.w a5,a5 + 8000dca4: f7f7f793 andi a5,a5,-129 + 8000dca8: 0007871b sext.w a4,a5 + 8000dcac: f9844783 lbu a5,-104(s0) + 8000dcb0: 0007879b sext.w a5,a5 + 8000dcb4: 00f70a63 beq a4,a5,8000dcc8 + 8000dcb8: fb043783 ld a5,-80(s0) + 8000dcbc: 00078513 mv a0,a5 + 8000dcc0: cbcf20ef jal ra,8000017c + 8000dcc4: 0d80006f j 8000dd9c + 8000dcc8: fb043783 ld a5,-80(s0) + 8000dccc: 00078513 mv a0,a5 + 8000dcd0: cacf20ef jal ra,8000017c + 8000dcd4: fb843783 ld a5,-72(s0) + 8000dcd8: faf43423 sd a5,-88(s0) + 8000dcdc: fa843783 ld a5,-88(s0) + 8000dce0: 02878793 addi a5,a5,40 + 8000dce4: 00078513 mv a0,a5 + 8000dce8: ff5fe0ef jal ra,8000ccdc + 8000dcec: 00050793 mv a5,a0 + 8000dcf0: 06079463 bnez a5,8000dd58 + 8000dcf4: fa843483 ld s1,-88(s0) + 8000dcf8: fa843783 ld a5,-88(s0) + 8000dcfc: 0447d783 lhu a5,68(a5) + 8000dd00: 0007891b sext.w s2,a5 + 8000dd04: fa843783 ld a5,-88(s0) + 8000dd08: 02878793 addi a5,a5,40 + 8000dd0c: 00078513 mv a0,a5 + 8000dd10: 808ff0ef jal ra,8000cd18 + 8000dd14: 00050793 mv a5,a0 + 8000dd18: 0007879b sext.w a5,a5 + 8000dd1c: fc442583 lw a1,-60(s0) + 8000dd20: 00090713 mv a4,s2 + 8000dd24: 00048693 mv a3,s1 + 8000dd28: 01400613 li a2,20 + 8000dd2c: 0000a517 auipc a0,0xa + 8000dd30: 92450513 addi a0,a0,-1756 # 80017650 + 8000dd34: ce8fa0ef jal ra,8000821c + 8000dd38: fa843783 ld a5,-88(s0) + 8000dd3c: 02878793 addi a5,a5,40 + 8000dd40: 00078513 mv a0,a5 + 8000dd44: e34ff0ef jal ra,8000d378 + 8000dd48: 00009517 auipc a0,0x9 + 8000dd4c: 74050513 addi a0,a0,1856 # 80017488 + 8000dd50: cccfa0ef jal ra,8000821c + 8000dd54: 0480006f j 8000dd9c + 8000dd58: fa843483 ld s1,-88(s0) + 8000dd5c: fa843783 ld a5,-88(s0) + 8000dd60: 0447d783 lhu a5,68(a5) + 8000dd64: 0007891b sext.w s2,a5 + 8000dd68: fa843783 ld a5,-88(s0) + 8000dd6c: 02878793 addi a5,a5,40 + 8000dd70: 00078513 mv a0,a5 + 8000dd74: fa5fe0ef jal ra,8000cd18 + 8000dd78: 00050793 mv a5,a0 + 8000dd7c: 0007879b sext.w a5,a5 + 8000dd80: fc442583 lw a1,-60(s0) + 8000dd84: 00090713 mv a4,s2 + 8000dd88: 00048693 mv a3,s1 + 8000dd8c: 01400613 li a2,20 + 8000dd90: 0000a517 auipc a0,0xa + 8000dd94: 8d850513 addi a0,a0,-1832 # 80017668 + 8000dd98: c84fa0ef jal ra,8000821c + 8000dd9c: fd442783 lw a5,-44(s0) + 8000dda0: 0017879b addiw a5,a5,1 + 8000dda4: fcf42a23 sw a5,-44(s0) + 8000dda8: fa042703 lw a4,-96(s0) + 8000ddac: fd442783 lw a5,-44(s0) + 8000ddb0: 0007879b sext.w a5,a5 + 8000ddb4: eae7cee3 blt a5,a4,8000dc70 + 8000ddb8: fd843783 ld a5,-40(s0) + 8000ddbc: e8079ce3 bnez a5,8000dc54 + 8000ddc0: 00000793 li a5,0 + 8000ddc4: 00078513 mv a0,a5 + 8000ddc8: 0b813083 ld ra,184(sp) + 8000ddcc: 0b013403 ld s0,176(sp) + 8000ddd0: 0a813483 ld s1,168(sp) + 8000ddd4: 0a013903 ld s2,160(sp) + 8000ddd8: 0c010113 addi sp,sp,192 + 8000dddc: 00008067 ret + +000000008000dde0 : + 8000dde0: f5010113 addi sp,sp,-176 + 8000dde4: 0a113423 sd ra,168(sp) + 8000dde8: 0a813023 sd s0,160(sp) + 8000ddec: 0b010413 addi s0,sp,176 + 8000ddf0: fe043423 sd zero,-24(s0) + 8000ddf4: 0000a797 auipc a5,0xa + 8000ddf8: 88c78793 addi a5,a5,-1908 # 80017680 + 8000ddfc: fcf43823 sd a5,-48(s0) + 8000de00: f5040713 addi a4,s0,-176 + 8000de04: f9040793 addi a5,s0,-112 + 8000de08: 00800693 li a3,8 + 8000de0c: 00070613 mv a2,a4 + 8000de10: 00800593 li a1,8 + 8000de14: 00078513 mv a0,a5 + 8000de18: 840ff0ef jal ra,8000ce58 + 8000de1c: 01400793 li a5,20 + 8000de20: fcf42623 sw a5,-52(s0) + 8000de24: fcc42783 lw a5,-52(s0) + 8000de28: fd043603 ld a2,-48(s0) + 8000de2c: 00078593 mv a1,a5 + 8000de30: 0000a517 auipc a0,0xa + 8000de34: 85850513 addi a0,a0,-1960 # 80017688 + 8000de38: be4fa0ef jal ra,8000821c + 8000de3c: fcc42783 lw a5,-52(s0) + 8000de40: 00078513 mv a0,a5 + 8000de44: fc5fe0ef jal ra,8000ce08 + 8000de48: 0000a517 auipc a0,0xa + 8000de4c: 86850513 addi a0,a0,-1944 # 800176b0 + 8000de50: bccfa0ef jal ra,8000821c + 8000de54: f9040793 addi a5,s0,-112 + 8000de58: 00078593 mv a1,a5 + 8000de5c: fe843503 ld a0,-24(s0) + 8000de60: 890ff0ef jal ra,8000cef0 + 8000de64: fea43423 sd a0,-24(s0) + 8000de68: fe042223 sw zero,-28(s0) + 8000de6c: 1640006f j 8000dfd0 + 8000de70: fe442783 lw a5,-28(s0) + 8000de74: 00379793 slli a5,a5,0x3 + 8000de78: ff040713 addi a4,s0,-16 + 8000de7c: 00f707b3 add a5,a4,a5 + 8000de80: f607b783 ld a5,-160(a5) + 8000de84: fe878793 addi a5,a5,-24 + 8000de88: fcf43023 sd a5,-64(s0) + 8000de8c: ae8f20ef jal ra,80000174 + 8000de90: 00050793 mv a5,a0 + 8000de94: faf43c23 sd a5,-72(s0) + 8000de98: fc043783 ld a5,-64(s0) + 8000de9c: 0147c783 lbu a5,20(a5) + 8000dea0: 0007879b sext.w a5,a5 + 8000dea4: f7f7f793 andi a5,a5,-129 + 8000dea8: 0007871b sext.w a4,a5 + 8000deac: fa044783 lbu a5,-96(s0) + 8000deb0: 0007879b sext.w a5,a5 + 8000deb4: 00f70a63 beq a4,a5,8000dec8 + 8000deb8: fb843783 ld a5,-72(s0) + 8000debc: 00078513 mv a0,a5 + 8000dec0: abcf20ef jal ra,8000017c + 8000dec4: 1000006f j 8000dfc4 + 8000dec8: fb843783 ld a5,-72(s0) + 8000decc: 00078513 mv a0,a5 + 8000ded0: aacf20ef jal ra,8000017c + 8000ded4: fc043783 ld a5,-64(s0) + 8000ded8: faf43823 sd a5,-80(s0) + 8000dedc: fe042023 sw zero,-32(s0) + 8000dee0: fb043783 ld a5,-80(s0) + 8000dee4: 0587b783 ld a5,88(a5) + 8000dee8: fcf43c23 sd a5,-40(s0) + 8000deec: 01c0006f j 8000df08 + 8000def0: fe042783 lw a5,-32(s0) + 8000def4: 0017879b addiw a5,a5,1 + 8000def8: fef42023 sw a5,-32(s0) + 8000defc: fd843783 ld a5,-40(s0) + 8000df00: 0007b783 ld a5,0(a5) + 8000df04: fcf43c23 sd a5,-40(s0) + 8000df08: fb043783 ld a5,-80(s0) + 8000df0c: 05878793 addi a5,a5,88 + 8000df10: fd843703 ld a4,-40(s0) + 8000df14: fcf71ee3 bne a4,a5,8000def0 + 8000df18: fe042783 lw a5,-32(s0) + 8000df1c: 0007879b sext.w a5,a5 + 8000df20: 06f05263 blez a5,8000df84 + 8000df24: fb043683 ld a3,-80(s0) + 8000df28: fb043783 ld a5,-80(s0) + 8000df2c: 0387b703 ld a4,56(a5) + 8000df30: fb043783 ld a5,-80(s0) + 8000df34: 0487b603 ld a2,72(a5) + 8000df38: fb043783 ld a5,-80(s0) + 8000df3c: 0507b783 ld a5,80(a5) + 8000df40: fe042503 lw a0,-32(s0) + 8000df44: fcc42583 lw a1,-52(s0) + 8000df48: 00050893 mv a7,a0 + 8000df4c: 00078813 mv a6,a5 + 8000df50: 00060793 mv a5,a2 + 8000df54: 01400613 li a2,20 + 8000df58: 00009517 auipc a0,0x9 + 8000df5c: 78050513 addi a0,a0,1920 # 800176d8 + 8000df60: abcfa0ef jal ra,8000821c + 8000df64: fb043783 ld a5,-80(s0) + 8000df68: 05878793 addi a5,a5,88 + 8000df6c: 00078513 mv a0,a5 + 8000df70: c08ff0ef jal ra,8000d378 + 8000df74: 00009517 auipc a0,0x9 + 8000df78: 51450513 addi a0,a0,1300 # 80017488 + 8000df7c: aa0fa0ef jal ra,8000821c + 8000df80: 0440006f j 8000dfc4 + 8000df84: fb043683 ld a3,-80(s0) + 8000df88: fb043783 ld a5,-80(s0) + 8000df8c: 0387b703 ld a4,56(a5) + 8000df90: fb043783 ld a5,-80(s0) + 8000df94: 0487b603 ld a2,72(a5) + 8000df98: fb043783 ld a5,-80(s0) + 8000df9c: 0507b783 ld a5,80(a5) + 8000dfa0: fe042503 lw a0,-32(s0) + 8000dfa4: fcc42583 lw a1,-52(s0) + 8000dfa8: 00050893 mv a7,a0 + 8000dfac: 00078813 mv a6,a5 + 8000dfb0: 00060793 mv a5,a2 + 8000dfb4: 01400613 li a2,20 + 8000dfb8: 00009517 auipc a0,0x9 + 8000dfbc: 74050513 addi a0,a0,1856 # 800176f8 + 8000dfc0: a5cfa0ef jal ra,8000821c + 8000dfc4: fe442783 lw a5,-28(s0) + 8000dfc8: 0017879b addiw a5,a5,1 + 8000dfcc: fef42223 sw a5,-28(s0) + 8000dfd0: fa842703 lw a4,-88(s0) + 8000dfd4: fe442783 lw a5,-28(s0) + 8000dfd8: 0007879b sext.w a5,a5 + 8000dfdc: e8e7cae3 blt a5,a4,8000de70 + 8000dfe0: fe843783 ld a5,-24(s0) + 8000dfe4: e60798e3 bnez a5,8000de54 + 8000dfe8: 00000793 li a5,0 + 8000dfec: 00078513 mv a0,a5 + 8000dff0: 0a813083 ld ra,168(sp) + 8000dff4: 0a013403 ld s0,160(sp) + 8000dff8: 0b010113 addi sp,sp,176 + 8000dffc: 00008067 ret + +000000008000e000 : + 8000e000: f5010113 addi sp,sp,-176 + 8000e004: 0a113423 sd ra,168(sp) + 8000e008: 0a813023 sd s0,160(sp) + 8000e00c: 0b010413 addi s0,sp,176 + 8000e010: fe043423 sd zero,-24(s0) + 8000e014: 00009797 auipc a5,0x9 + 8000e018: 70478793 addi a5,a5,1796 # 80017718 + 8000e01c: fcf43c23 sd a5,-40(s0) + 8000e020: f5840713 addi a4,s0,-168 + 8000e024: f9840793 addi a5,s0,-104 + 8000e028: 00800693 li a3,8 + 8000e02c: 00070613 mv a2,a4 + 8000e030: 00a00593 li a1,10 + 8000e034: 00078513 mv a0,a5 + 8000e038: e21fe0ef jal ra,8000ce58 + 8000e03c: 01400793 li a5,20 + 8000e040: fcf42a23 sw a5,-44(s0) + 8000e044: fd442783 lw a5,-44(s0) + 8000e048: fd843603 ld a2,-40(s0) + 8000e04c: 00078593 mv a1,a5 + 8000e050: 00009517 auipc a0,0x9 + 8000e054: 6d050513 addi a0,a0,1744 # 80017720 + 8000e058: 9c4fa0ef jal ra,8000821c + 8000e05c: fd442783 lw a5,-44(s0) + 8000e060: 00078513 mv a0,a5 + 8000e064: da5fe0ef jal ra,8000ce08 + 8000e068: 00009517 auipc a0,0x9 + 8000e06c: 6e050513 addi a0,a0,1760 # 80017748 + 8000e070: 9acfa0ef jal ra,8000821c + 8000e074: f9840793 addi a5,s0,-104 + 8000e078: 00078593 mv a1,a5 + 8000e07c: fe843503 ld a0,-24(s0) + 8000e080: e71fe0ef jal ra,8000cef0 + 8000e084: fea43423 sd a0,-24(s0) + 8000e088: fe042223 sw zero,-28(s0) + 8000e08c: 0d80006f j 8000e164 + 8000e090: fe442783 lw a5,-28(s0) + 8000e094: 00379793 slli a5,a5,0x3 + 8000e098: ff040713 addi a4,s0,-16 + 8000e09c: 00f707b3 add a5,a4,a5 + 8000e0a0: f687b783 ld a5,-152(a5) + 8000e0a4: fe878793 addi a5,a5,-24 + 8000e0a8: fcf43423 sd a5,-56(s0) + 8000e0ac: 8c8f20ef jal ra,80000174 + 8000e0b0: 00050793 mv a5,a0 + 8000e0b4: fcf43023 sd a5,-64(s0) + 8000e0b8: fc843783 ld a5,-56(s0) + 8000e0bc: 0147c783 lbu a5,20(a5) + 8000e0c0: 0007879b sext.w a5,a5 + 8000e0c4: f7f7f793 andi a5,a5,-129 + 8000e0c8: 0007871b sext.w a4,a5 + 8000e0cc: fa844783 lbu a5,-88(s0) + 8000e0d0: 0007879b sext.w a5,a5 + 8000e0d4: 00f70a63 beq a4,a5,8000e0e8 + 8000e0d8: fc043783 ld a5,-64(s0) + 8000e0dc: 00078513 mv a0,a5 + 8000e0e0: 89cf20ef jal ra,8000017c + 8000e0e4: 0740006f j 8000e158 + 8000e0e8: fc043783 ld a5,-64(s0) + 8000e0ec: 00078513 mv a0,a5 + 8000e0f0: 88cf20ef jal ra,8000017c + 8000e0f4: fc843783 ld a5,-56(s0) + 8000e0f8: faf43c23 sd a5,-72(s0) + 8000e0fc: fb843683 ld a3,-72(s0) + 8000e100: fb843783 ld a5,-72(s0) + 8000e104: 0487a703 lw a4,72(a5) + 8000e108: fb843783 ld a5,-72(s0) + 8000e10c: 04c7a783 lw a5,76(a5) + 8000e110: fd442583 lw a1,-44(s0) + 8000e114: 01400613 li a2,20 + 8000e118: 00009517 auipc a0,0x9 + 8000e11c: 65850513 addi a0,a0,1624 # 80017770 + 8000e120: 8fcfa0ef jal ra,8000821c + 8000e124: fb843783 ld a5,-72(s0) + 8000e128: 0157c783 lbu a5,21(a5) + 8000e12c: 0007879b sext.w a5,a5 + 8000e130: 0017f793 andi a5,a5,1 + 8000e134: 0007879b sext.w a5,a5 + 8000e138: 00078a63 beqz a5,8000e14c + 8000e13c: 00009517 auipc a0,0x9 + 8000e140: 64c50513 addi a0,a0,1612 # 80017788 + 8000e144: 8d8fa0ef jal ra,8000821c + 8000e148: 0100006f j 8000e158 + 8000e14c: 00009517 auipc a0,0x9 + 8000e150: 64c50513 addi a0,a0,1612 # 80017798 + 8000e154: 8c8fa0ef jal ra,8000821c + 8000e158: fe442783 lw a5,-28(s0) + 8000e15c: 0017879b addiw a5,a5,1 + 8000e160: fef42223 sw a5,-28(s0) + 8000e164: fb042703 lw a4,-80(s0) + 8000e168: fe442783 lw a5,-28(s0) + 8000e16c: 0007879b sext.w a5,a5 + 8000e170: f2e7c0e3 blt a5,a4,8000e090 + 8000e174: fe843783 ld a5,-24(s0) + 8000e178: ee079ee3 bnez a5,8000e074 + 8000e17c: ca0f80ef jal ra,8000661c + 8000e180: 00050793 mv a5,a0 + 8000e184: 0007879b sext.w a5,a5 + 8000e188: 00078593 mv a1,a5 + 8000e18c: 00009517 auipc a0,0x9 + 8000e190: 61c50513 addi a0,a0,1564 # 800177a8 + 8000e194: 888fa0ef jal ra,8000821c + 8000e198: 00000793 li a5,0 + 8000e19c: 00078513 mv a0,a5 + 8000e1a0: 0a813083 ld ra,168(sp) + 8000e1a4: 0a013403 ld s0,160(sp) + 8000e1a8: 0b010113 addi sp,sp,176 + 8000e1ac: 00008067 ret + +000000008000e1b0 : + 8000e1b0: f5010113 addi sp,sp,-176 + 8000e1b4: 0a113423 sd ra,168(sp) + 8000e1b8: 0a813023 sd s0,160(sp) + 8000e1bc: 0b010413 addi s0,sp,176 + 8000e1c0: fe043423 sd zero,-24(s0) + 8000e1c4: 00009797 auipc a5,0x9 + 8000e1c8: 76c78793 addi a5,a5,1900 # 80017930 + 8000e1cc: fcf43c23 sd a5,-40(s0) + 8000e1d0: f5840713 addi a4,s0,-168 + 8000e1d4: f9840793 addi a5,s0,-104 + 8000e1d8: 00800693 li a3,8 + 8000e1dc: 00070613 mv a2,a4 + 8000e1e0: 00900593 li a1,9 + 8000e1e4: 00078513 mv a0,a5 + 8000e1e8: c71fe0ef jal ra,8000ce58 + 8000e1ec: 01400793 li a5,20 + 8000e1f0: fcf42a23 sw a5,-44(s0) + 8000e1f4: fd442783 lw a5,-44(s0) + 8000e1f8: fd843603 ld a2,-40(s0) + 8000e1fc: 00078593 mv a1,a5 + 8000e200: 00009517 auipc a0,0x9 + 8000e204: 73850513 addi a0,a0,1848 # 80017938 + 8000e208: 814fa0ef jal ra,8000821c + 8000e20c: fd442783 lw a5,-44(s0) + 8000e210: 00078513 mv a0,a5 + 8000e214: bf5fe0ef jal ra,8000ce08 + 8000e218: 00009517 auipc a0,0x9 + 8000e21c: 74850513 addi a0,a0,1864 # 80017960 + 8000e220: ffdf90ef jal ra,8000821c + 8000e224: f9840793 addi a5,s0,-104 + 8000e228: 00078593 mv a1,a5 + 8000e22c: fe843503 ld a0,-24(s0) + 8000e230: cc1fe0ef jal ra,8000cef0 + 8000e234: fea43423 sd a0,-24(s0) + 8000e238: fe042223 sw zero,-28(s0) + 8000e23c: 0e40006f j 8000e320 + 8000e240: fe442783 lw a5,-28(s0) + 8000e244: 00379793 slli a5,a5,0x3 + 8000e248: ff040713 addi a4,s0,-16 + 8000e24c: 00f707b3 add a5,a4,a5 + 8000e250: f687b783 ld a5,-152(a5) + 8000e254: fe878793 addi a5,a5,-24 + 8000e258: fcf43423 sd a5,-56(s0) + 8000e25c: f19f10ef jal ra,80000174 + 8000e260: 00050793 mv a5,a0 + 8000e264: fcf43023 sd a5,-64(s0) + 8000e268: fc843783 ld a5,-56(s0) + 8000e26c: 0147c783 lbu a5,20(a5) + 8000e270: 0007879b sext.w a5,a5 + 8000e274: f7f7f793 andi a5,a5,-129 + 8000e278: 0007871b sext.w a4,a5 + 8000e27c: fa844783 lbu a5,-88(s0) + 8000e280: 0007879b sext.w a5,a5 + 8000e284: 00f70a63 beq a4,a5,8000e298 + 8000e288: fc043783 ld a5,-64(s0) + 8000e28c: 00078513 mv a0,a5 + 8000e290: eedf10ef jal ra,8000017c + 8000e294: 0800006f j 8000e314 + 8000e298: fc043783 ld a5,-64(s0) + 8000e29c: 00078513 mv a0,a5 + 8000e2a0: eddf10ef jal ra,8000017c + 8000e2a4: fc843783 ld a5,-56(s0) + 8000e2a8: faf43c23 sd a5,-72(s0) + 8000e2ac: fb843683 ld a3,-72(s0) + 8000e2b0: fb843783 ld a5,-72(s0) + 8000e2b4: 0287a783 lw a5,40(a5) + 8000e2b8: 00078713 mv a4,a5 + 8000e2bc: 01600793 li a5,22 + 8000e2c0: 02e7e663 bltu a5,a4,8000e2ec + 8000e2c4: fb843783 ld a5,-72(s0) + 8000e2c8: 0287a783 lw a5,40(a5) + 8000e2cc: 0000b717 auipc a4,0xb + 8000e2d0: e5470713 addi a4,a4,-428 # 80019120 + 8000e2d4: 02079793 slli a5,a5,0x20 + 8000e2d8: 0207d793 srli a5,a5,0x20 + 8000e2dc: 00379793 slli a5,a5,0x3 + 8000e2e0: 00f707b3 add a5,a4,a5 + 8000e2e4: 0007b703 ld a4,0(a5) + 8000e2e8: 00c0006f j 8000e2f4 + 8000e2ec: 00009717 auipc a4,0x9 + 8000e2f0: 63c70713 addi a4,a4,1596 # 80017928 + 8000e2f4: fb843783 ld a5,-72(s0) + 8000e2f8: 0307c783 lbu a5,48(a5) + 8000e2fc: 0007879b sext.w a5,a5 + 8000e300: fd442583 lw a1,-44(s0) + 8000e304: 01400613 li a2,20 + 8000e308: 00009517 auipc a0,0x9 + 8000e30c: 68050513 addi a0,a0,1664 # 80017988 + 8000e310: f0df90ef jal ra,8000821c + 8000e314: fe442783 lw a5,-28(s0) + 8000e318: 0017879b addiw a5,a5,1 + 8000e31c: fef42223 sw a5,-28(s0) + 8000e320: fb042703 lw a4,-80(s0) + 8000e324: fe442783 lw a5,-28(s0) + 8000e328: 0007879b sext.w a5,a5 + 8000e32c: f0e7cae3 blt a5,a4,8000e240 + 8000e330: fe843783 ld a5,-24(s0) + 8000e334: ee0798e3 bnez a5,8000e224 + 8000e338: 00000793 li a5,0 + 8000e33c: 00078513 mv a0,a5 + 8000e340: 0a813083 ld ra,168(sp) + 8000e344: 0a013403 ld s0,160(sp) + 8000e348: 0b010113 addi sp,sp,176 + 8000e34c: 00008067 ret + +000000008000e350 : + 8000e350: fe010113 addi sp,sp,-32 + 8000e354: 00113c23 sd ra,24(sp) + 8000e358: 00813823 sd s0,16(sp) + 8000e35c: 02010413 addi s0,sp,32 + 8000e360: 00009517 auipc a0,0x9 + 8000e364: 64050513 addi a0,a0,1600 # 800179a0 + 8000e368: eb5f90ef jal ra,8000821c + 8000e36c: 00014797 auipc a5,0x14 + 8000e370: d5c78793 addi a5,a5,-676 # 800220c8 <_syscall_table_begin> + 8000e374: 0007b783 ld a5,0(a5) + 8000e378: fef43423 sd a5,-24(s0) + 8000e37c: 0600006f j 8000e3dc + 8000e380: fe843783 ld a5,-24(s0) + 8000e384: 0007b783 ld a5,0(a5) + 8000e388: 00200613 li a2,2 + 8000e38c: 00009597 auipc a1,0x9 + 8000e390: 62c58593 addi a1,a1,1580 # 800179b8 + 8000e394: 00078513 mv a0,a5 + 8000e398: e3cf20ef jal ra,800009d4 + 8000e39c: 00050793 mv a5,a0 + 8000e3a0: 02078663 beqz a5,8000e3cc + 8000e3a4: fe843783 ld a5,-24(s0) + 8000e3a8: 0007b703 ld a4,0(a5) + 8000e3ac: fe843783 ld a5,-24(s0) + 8000e3b0: 0087b783 ld a5,8(a5) + 8000e3b4: 00078613 mv a2,a5 + 8000e3b8: 00070593 mv a1,a4 + 8000e3bc: 00009517 auipc a0,0x9 + 8000e3c0: 60450513 addi a0,a0,1540 # 800179c0 + 8000e3c4: e59f90ef jal ra,8000821c + 8000e3c8: 0080006f j 8000e3d0 + 8000e3cc: 00000013 nop + 8000e3d0: fe843783 ld a5,-24(s0) + 8000e3d4: 01878793 addi a5,a5,24 + 8000e3d8: fef43423 sd a5,-24(s0) + 8000e3dc: 00014797 auipc a5,0x14 + 8000e3e0: cf478793 addi a5,a5,-780 # 800220d0 <_syscall_table_end> + 8000e3e4: 0007b783 ld a5,0(a5) + 8000e3e8: fe843703 ld a4,-24(s0) + 8000e3ec: f8f76ae3 bltu a4,a5,8000e380 + 8000e3f0: 00000793 li a5,0 + 8000e3f4: 00078513 mv a0,a5 + 8000e3f8: 01813083 ld ra,24(sp) + 8000e3fc: 01013403 ld s0,16(sp) + 8000e400: 02010113 addi sp,sp,32 + 8000e404: 00008067 ret + +000000008000e408 <_serial_poll_rx>: + 8000e408: fc010113 addi sp,sp,-64 + 8000e40c: 02113c23 sd ra,56(sp) + 8000e410: 02813823 sd s0,48(sp) + 8000e414: 04010413 addi s0,sp,64 + 8000e418: fca43c23 sd a0,-40(s0) + 8000e41c: fcb43823 sd a1,-48(s0) + 8000e420: 00060793 mv a5,a2 + 8000e424: fcf42623 sw a5,-52(s0) + 8000e428: fd843783 ld a5,-40(s0) + 8000e42c: 00079e63 bnez a5,8000e448 <_serial_poll_rx+0x40> + 8000e430: 0d700613 li a2,215 + 8000e434: 0000b597 auipc a1,0xb + 8000e438: e4458593 addi a1,a1,-444 # 80019278 <__FUNCTION__.3026> + 8000e43c: 00009517 auipc a0,0x9 + 8000e440: 59450513 addi a0,a0,1428 # 800179d0 + 8000e444: 838fa0ef jal ra,8000847c + 8000e448: fcc42783 lw a5,-52(s0) + 8000e44c: fef42623 sw a5,-20(s0) + 8000e450: 0800006f j 8000e4d0 <_serial_poll_rx+0xc8> + 8000e454: fd843783 ld a5,-40(s0) + 8000e458: 0807b783 ld a5,128(a5) + 8000e45c: 0187b783 ld a5,24(a5) + 8000e460: fd843503 ld a0,-40(s0) + 8000e464: 000780e7 jalr a5 + 8000e468: 00050793 mv a5,a0 + 8000e46c: fef42423 sw a5,-24(s0) + 8000e470: fe842783 lw a5,-24(s0) + 8000e474: 0007871b sext.w a4,a5 + 8000e478: fff00793 li a5,-1 + 8000e47c: 06f70263 beq a4,a5,8000e4e0 <_serial_poll_rx+0xd8> + 8000e480: fe842783 lw a5,-24(s0) + 8000e484: 0ff7f713 andi a4,a5,255 + 8000e488: fd043783 ld a5,-48(s0) + 8000e48c: 00e78023 sb a4,0(a5) + 8000e490: fd043783 ld a5,-48(s0) + 8000e494: 00178793 addi a5,a5,1 + 8000e498: fcf43823 sd a5,-48(s0) + 8000e49c: fcc42783 lw a5,-52(s0) + 8000e4a0: fff7879b addiw a5,a5,-1 + 8000e4a4: fcf42623 sw a5,-52(s0) + 8000e4a8: fd843783 ld a5,-40(s0) + 8000e4ac: 02e7d783 lhu a5,46(a5) + 8000e4b0: 0007879b sext.w a5,a5 + 8000e4b4: 0407f793 andi a5,a5,64 + 8000e4b8: 0007879b sext.w a5,a5 + 8000e4bc: 00078a63 beqz a5,8000e4d0 <_serial_poll_rx+0xc8> + 8000e4c0: fe842783 lw a5,-24(s0) + 8000e4c4: 0007871b sext.w a4,a5 + 8000e4c8: 00a00793 li a5,10 + 8000e4cc: 00f70e63 beq a4,a5,8000e4e8 <_serial_poll_rx+0xe0> + 8000e4d0: fcc42783 lw a5,-52(s0) + 8000e4d4: 0007879b sext.w a5,a5 + 8000e4d8: f6079ee3 bnez a5,8000e454 <_serial_poll_rx+0x4c> + 8000e4dc: 0100006f j 8000e4ec <_serial_poll_rx+0xe4> + 8000e4e0: 00000013 nop + 8000e4e4: 0080006f j 8000e4ec <_serial_poll_rx+0xe4> + 8000e4e8: 00000013 nop + 8000e4ec: fec42703 lw a4,-20(s0) + 8000e4f0: fcc42783 lw a5,-52(s0) + 8000e4f4: 40f707bb subw a5,a4,a5 + 8000e4f8: 0007879b sext.w a5,a5 + 8000e4fc: 00078513 mv a0,a5 + 8000e500: 03813083 ld ra,56(sp) + 8000e504: 03013403 ld s0,48(sp) + 8000e508: 04010113 addi sp,sp,64 + 8000e50c: 00008067 ret + +000000008000e510 <_serial_poll_tx>: + 8000e510: fc010113 addi sp,sp,-64 + 8000e514: 02113c23 sd ra,56(sp) + 8000e518: 02813823 sd s0,48(sp) + 8000e51c: 04010413 addi s0,sp,64 + 8000e520: fca43c23 sd a0,-40(s0) + 8000e524: fcb43823 sd a1,-48(s0) + 8000e528: 00060793 mv a5,a2 + 8000e52c: fcf42623 sw a5,-52(s0) + 8000e530: fd843783 ld a5,-40(s0) + 8000e534: 00079e63 bnez a5,8000e550 <_serial_poll_tx+0x40> + 8000e538: 0ee00613 li a2,238 + 8000e53c: 0000b597 auipc a1,0xb + 8000e540: d6c58593 addi a1,a1,-660 # 800192a8 <__FUNCTION__.3036> + 8000e544: 00009517 auipc a0,0x9 + 8000e548: 48c50513 addi a0,a0,1164 # 800179d0 + 8000e54c: f31f90ef jal ra,8000847c + 8000e550: fcc42783 lw a5,-52(s0) + 8000e554: fef42623 sw a5,-20(s0) + 8000e558: 0800006f j 8000e5d8 <_serial_poll_tx+0xc8> + 8000e55c: fd043783 ld a5,-48(s0) + 8000e560: 0007c783 lbu a5,0(a5) + 8000e564: 00078713 mv a4,a5 + 8000e568: 00a00793 li a5,10 + 8000e56c: 02f71a63 bne a4,a5,8000e5a0 <_serial_poll_tx+0x90> + 8000e570: fd843783 ld a5,-40(s0) + 8000e574: 02e7d783 lhu a5,46(a5) + 8000e578: 0007879b sext.w a5,a5 + 8000e57c: 0407f793 andi a5,a5,64 + 8000e580: 0007879b sext.w a5,a5 + 8000e584: 00078e63 beqz a5,8000e5a0 <_serial_poll_tx+0x90> + 8000e588: fd843783 ld a5,-40(s0) + 8000e58c: 0807b783 ld a5,128(a5) + 8000e590: 0107b783 ld a5,16(a5) + 8000e594: 00d00593 li a1,13 + 8000e598: fd843503 ld a0,-40(s0) + 8000e59c: 000780e7 jalr a5 + 8000e5a0: fd843783 ld a5,-40(s0) + 8000e5a4: 0807b783 ld a5,128(a5) + 8000e5a8: 0107b703 ld a4,16(a5) + 8000e5ac: fd043783 ld a5,-48(s0) + 8000e5b0: 0007c783 lbu a5,0(a5) + 8000e5b4: 00078593 mv a1,a5 + 8000e5b8: fd843503 ld a0,-40(s0) + 8000e5bc: 000700e7 jalr a4 + 8000e5c0: fd043783 ld a5,-48(s0) + 8000e5c4: 00178793 addi a5,a5,1 + 8000e5c8: fcf43823 sd a5,-48(s0) + 8000e5cc: fcc42783 lw a5,-52(s0) + 8000e5d0: fff7879b addiw a5,a5,-1 + 8000e5d4: fcf42623 sw a5,-52(s0) + 8000e5d8: fcc42783 lw a5,-52(s0) + 8000e5dc: 0007879b sext.w a5,a5 + 8000e5e0: f6079ee3 bnez a5,8000e55c <_serial_poll_tx+0x4c> + 8000e5e4: fec42703 lw a4,-20(s0) + 8000e5e8: fcc42783 lw a5,-52(s0) + 8000e5ec: 40f707bb subw a5,a4,a5 + 8000e5f0: 0007879b sext.w a5,a5 + 8000e5f4: 00078513 mv a0,a5 + 8000e5f8: 03813083 ld ra,56(sp) + 8000e5fc: 03013403 ld s0,48(sp) + 8000e600: 04010113 addi sp,sp,64 + 8000e604: 00008067 ret + +000000008000e608 <_serial_int_rx>: + 8000e608: fb010113 addi sp,sp,-80 + 8000e60c: 04113423 sd ra,72(sp) + 8000e610: 04813023 sd s0,64(sp) + 8000e614: 05010413 addi s0,sp,80 + 8000e618: fca43423 sd a0,-56(s0) + 8000e61c: fcb43023 sd a1,-64(s0) + 8000e620: 00060793 mv a5,a2 + 8000e624: faf42e23 sw a5,-68(s0) + 8000e628: fc843783 ld a5,-56(s0) + 8000e62c: 00079e63 bnez a5,8000e648 <_serial_int_rx+0x40> + 8000e630: 10d00613 li a2,269 + 8000e634: 0000b597 auipc a1,0xb + 8000e638: c2458593 addi a1,a1,-988 # 80019258 <__FUNCTION__.3047> + 8000e63c: 00009517 auipc a0,0x9 + 8000e640: 39450513 addi a0,a0,916 # 800179d0 + 8000e644: e39f90ef jal ra,8000847c + 8000e648: fbc42783 lw a5,-68(s0) + 8000e64c: fef42623 sw a5,-20(s0) + 8000e650: fc843783 ld a5,-56(s0) + 8000e654: 0907b783 ld a5,144(a5) + 8000e658: fef43023 sd a5,-32(s0) + 8000e65c: fe043783 ld a5,-32(s0) + 8000e660: 10079a63 bnez a5,8000e774 <_serial_int_rx+0x16c> + 8000e664: 11100613 li a2,273 + 8000e668: 0000b597 auipc a1,0xb + 8000e66c: bf058593 addi a1,a1,-1040 # 80019258 <__FUNCTION__.3047> + 8000e670: 00009517 auipc a0,0x9 + 8000e674: 37850513 addi a0,a0,888 # 800179e8 + 8000e678: e05f90ef jal ra,8000847c + 8000e67c: 0f80006f j 8000e774 <_serial_int_rx+0x16c> + 8000e680: af5f10ef jal ra,80000174 + 8000e684: fca43c23 sd a0,-40(s0) + 8000e688: fe043783 ld a5,-32(s0) + 8000e68c: 00a7d703 lhu a4,10(a5) + 8000e690: fe043783 ld a5,-32(s0) + 8000e694: 0087d783 lhu a5,8(a5) + 8000e698: 0007071b sext.w a4,a4 + 8000e69c: 0007879b sext.w a5,a5 + 8000e6a0: 00f71e63 bne a4,a5,8000e6bc <_serial_int_rx+0xb4> + 8000e6a4: fe043783 ld a5,-32(s0) + 8000e6a8: 00c7a783 lw a5,12(a5) + 8000e6ac: 00079863 bnez a5,8000e6bc <_serial_int_rx+0xb4> + 8000e6b0: fd843503 ld a0,-40(s0) + 8000e6b4: ac9f10ef jal ra,8000017c + 8000e6b8: 0c80006f j 8000e780 <_serial_int_rx+0x178> + 8000e6bc: fe043783 ld a5,-32(s0) + 8000e6c0: 0007b783 ld a5,0(a5) + 8000e6c4: fe043703 ld a4,-32(s0) + 8000e6c8: 00a75703 lhu a4,10(a4) + 8000e6cc: 00e787b3 add a5,a5,a4 + 8000e6d0: 0007c783 lbu a5,0(a5) + 8000e6d4: fcf42a23 sw a5,-44(s0) + 8000e6d8: fe043783 ld a5,-32(s0) + 8000e6dc: 00a7d783 lhu a5,10(a5) + 8000e6e0: 0017879b addiw a5,a5,1 + 8000e6e4: 03079713 slli a4,a5,0x30 + 8000e6e8: 03075713 srli a4,a4,0x30 + 8000e6ec: fe043783 ld a5,-32(s0) + 8000e6f0: 00e79523 sh a4,10(a5) + 8000e6f4: fe043783 ld a5,-32(s0) + 8000e6f8: 00a7d703 lhu a4,10(a5) + 8000e6fc: fc843783 ld a5,-56(s0) + 8000e700: 0887b783 ld a5,136(a5) + 8000e704: 02a7d793 srli a5,a5,0x2a + 8000e708: fff7f793 andi a5,a5,-1 + 8000e70c: 03079793 slli a5,a5,0x30 + 8000e710: 0307d793 srli a5,a5,0x30 + 8000e714: 0007071b sext.w a4,a4 + 8000e718: 0007879b sext.w a5,a5 + 8000e71c: 00f76663 bltu a4,a5,8000e728 <_serial_int_rx+0x120> + 8000e720: fe043783 ld a5,-32(s0) + 8000e724: 00079523 sh zero,10(a5) + 8000e728: fe043783 ld a5,-32(s0) + 8000e72c: 00c7a783 lw a5,12(a5) + 8000e730: 00078713 mv a4,a5 + 8000e734: 00100793 li a5,1 + 8000e738: 00f71663 bne a4,a5,8000e744 <_serial_int_rx+0x13c> + 8000e73c: fe043783 ld a5,-32(s0) + 8000e740: 0007a623 sw zero,12(a5) + 8000e744: fd843503 ld a0,-40(s0) + 8000e748: a35f10ef jal ra,8000017c + 8000e74c: fd442783 lw a5,-44(s0) + 8000e750: 0ff7f713 andi a4,a5,255 + 8000e754: fc043783 ld a5,-64(s0) + 8000e758: 00e78023 sb a4,0(a5) + 8000e75c: fc043783 ld a5,-64(s0) + 8000e760: 00178793 addi a5,a5,1 + 8000e764: fcf43023 sd a5,-64(s0) + 8000e768: fbc42783 lw a5,-68(s0) + 8000e76c: fff7879b addiw a5,a5,-1 + 8000e770: faf42e23 sw a5,-68(s0) + 8000e774: fbc42783 lw a5,-68(s0) + 8000e778: 0007879b sext.w a5,a5 + 8000e77c: f00792e3 bnez a5,8000e680 <_serial_int_rx+0x78> + 8000e780: fec42703 lw a4,-20(s0) + 8000e784: fbc42783 lw a5,-68(s0) + 8000e788: 40f707bb subw a5,a4,a5 + 8000e78c: 0007879b sext.w a5,a5 + 8000e790: 00078513 mv a0,a5 + 8000e794: 04813083 ld ra,72(sp) + 8000e798: 04013403 ld s0,64(sp) + 8000e79c: 05010113 addi sp,sp,80 + 8000e7a0: 00008067 ret + +000000008000e7a4 <_serial_int_tx>: + 8000e7a4: fc010113 addi sp,sp,-64 + 8000e7a8: 02113c23 sd ra,56(sp) + 8000e7ac: 02813823 sd s0,48(sp) + 8000e7b0: 04010413 addi s0,sp,64 + 8000e7b4: fca43c23 sd a0,-40(s0) + 8000e7b8: fcb43823 sd a1,-48(s0) + 8000e7bc: 00060793 mv a5,a2 + 8000e7c0: fcf42623 sw a5,-52(s0) + 8000e7c4: fd843783 ld a5,-40(s0) + 8000e7c8: 00079e63 bnez a5,8000e7e4 <_serial_int_tx+0x40> + 8000e7cc: 13d00613 li a2,317 + 8000e7d0: 0000b597 auipc a1,0xb + 8000e7d4: ac858593 addi a1,a1,-1336 # 80019298 <__FUNCTION__.3060> + 8000e7d8: 00009517 auipc a0,0x9 + 8000e7dc: 1f850513 addi a0,a0,504 # 800179d0 + 8000e7e0: c9df90ef jal ra,8000847c + 8000e7e4: fcc42783 lw a5,-52(s0) + 8000e7e8: fef42623 sw a5,-20(s0) + 8000e7ec: fd843783 ld a5,-40(s0) + 8000e7f0: 0987b783 ld a5,152(a5) + 8000e7f4: fef43023 sd a5,-32(s0) + 8000e7f8: fe043783 ld a5,-32(s0) + 8000e7fc: 0e079263 bnez a5,8000e8e0 <_serial_int_tx+0x13c> + 8000e800: 14100613 li a2,321 + 8000e804: 0000b597 auipc a1,0xb + 8000e808: a9458593 addi a1,a1,-1388 # 80019298 <__FUNCTION__.3060> + 8000e80c: 00009517 auipc a0,0x9 + 8000e810: 1f450513 addi a0,a0,500 # 80017a00 + 8000e814: c69f90ef jal ra,8000847c + 8000e818: 0c80006f j 8000e8e0 <_serial_int_tx+0x13c> + 8000e81c: fd043783 ld a5,-48(s0) + 8000e820: 0007c783 lbu a5,0(a5) + 8000e824: 00078713 mv a4,a5 + 8000e828: 00a00793 li a5,10 + 8000e82c: 04f71c63 bne a4,a5,8000e884 <_serial_int_tx+0xe0> + 8000e830: fd843783 ld a5,-40(s0) + 8000e834: 02e7d783 lhu a5,46(a5) + 8000e838: 0007879b sext.w a5,a5 + 8000e83c: 0407f793 andi a5,a5,64 + 8000e840: 0007879b sext.w a5,a5 + 8000e844: 04078063 beqz a5,8000e884 <_serial_int_tx+0xe0> + 8000e848: fd843783 ld a5,-40(s0) + 8000e84c: 0807b783 ld a5,128(a5) + 8000e850: 0107b783 ld a5,16(a5) + 8000e854: 00d00593 li a1,13 + 8000e858: fd843503 ld a0,-40(s0) + 8000e85c: 000780e7 jalr a5 + 8000e860: 00050793 mv a5,a0 + 8000e864: 00078713 mv a4,a5 + 8000e868: fff00793 li a5,-1 + 8000e86c: 00f71c63 bne a4,a5,8000e884 <_serial_int_tx+0xe0> + 8000e870: fe043783 ld a5,-32(s0) + 8000e874: fff00593 li a1,-1 + 8000e878: 00078513 mv a0,a5 + 8000e87c: 7d1010ef jal ra,8001084c + 8000e880: 0600006f j 8000e8e0 <_serial_int_tx+0x13c> + 8000e884: fd843783 ld a5,-40(s0) + 8000e888: 0807b783 ld a5,128(a5) + 8000e88c: 0107b703 ld a4,16(a5) + 8000e890: fd043783 ld a5,-48(s0) + 8000e894: 0007c783 lbu a5,0(a5) + 8000e898: 00078593 mv a1,a5 + 8000e89c: fd843503 ld a0,-40(s0) + 8000e8a0: 000700e7 jalr a4 + 8000e8a4: 00050793 mv a5,a0 + 8000e8a8: 00078713 mv a4,a5 + 8000e8ac: fff00793 li a5,-1 + 8000e8b0: 00f71c63 bne a4,a5,8000e8c8 <_serial_int_tx+0x124> + 8000e8b4: fe043783 ld a5,-32(s0) + 8000e8b8: fff00593 li a1,-1 + 8000e8bc: 00078513 mv a0,a5 + 8000e8c0: 78d010ef jal ra,8001084c + 8000e8c4: 01c0006f j 8000e8e0 <_serial_int_tx+0x13c> + 8000e8c8: fd043783 ld a5,-48(s0) + 8000e8cc: 00178793 addi a5,a5,1 + 8000e8d0: fcf43823 sd a5,-48(s0) + 8000e8d4: fcc42783 lw a5,-52(s0) + 8000e8d8: fff7879b addiw a5,a5,-1 + 8000e8dc: fcf42623 sw a5,-52(s0) + 8000e8e0: fcc42783 lw a5,-52(s0) + 8000e8e4: 0007879b sext.w a5,a5 + 8000e8e8: f2079ae3 bnez a5,8000e81c <_serial_int_tx+0x78> + 8000e8ec: fec42703 lw a4,-20(s0) + 8000e8f0: fcc42783 lw a5,-52(s0) + 8000e8f4: 40f707bb subw a5,a4,a5 + 8000e8f8: 0007879b sext.w a5,a5 + 8000e8fc: 00078513 mv a0,a5 + 8000e900: 03813083 ld ra,56(sp) + 8000e904: 03013403 ld s0,48(sp) + 8000e908: 04010113 addi sp,sp,64 + 8000e90c: 00008067 ret + +000000008000e910 <_serial_fifo_calc_recved_len>: + 8000e910: fd010113 addi sp,sp,-48 + 8000e914: 02113423 sd ra,40(sp) + 8000e918: 02813023 sd s0,32(sp) + 8000e91c: 03010413 addi s0,sp,48 + 8000e920: fca43c23 sd a0,-40(s0) + 8000e924: fd843783 ld a5,-40(s0) + 8000e928: 0907b783 ld a5,144(a5) + 8000e92c: fef43423 sd a5,-24(s0) + 8000e930: fe843783 ld a5,-24(s0) + 8000e934: 00079e63 bnez a5,8000e950 <_serial_fifo_calc_recved_len+0x40> + 8000e938: 17100613 li a2,369 + 8000e93c: 0000b597 auipc a1,0xb + 8000e940: 89c58593 addi a1,a1,-1892 # 800191d8 <__FUNCTION__.3072> + 8000e944: 00009517 auipc a0,0x9 + 8000e948: 0a450513 addi a0,a0,164 # 800179e8 + 8000e94c: b31f90ef jal ra,8000847c + 8000e950: fe843783 ld a5,-24(s0) + 8000e954: 0087d703 lhu a4,8(a5) + 8000e958: fe843783 ld a5,-24(s0) + 8000e95c: 00a7d783 lhu a5,10(a5) + 8000e960: 0007071b sext.w a4,a4 + 8000e964: 0007879b sext.w a5,a5 + 8000e968: 02f71a63 bne a4,a5,8000e99c <_serial_fifo_calc_recved_len+0x8c> + 8000e96c: fe843783 ld a5,-24(s0) + 8000e970: 00c7a783 lw a5,12(a5) + 8000e974: 02078063 beqz a5,8000e994 <_serial_fifo_calc_recved_len+0x84> + 8000e978: fd843783 ld a5,-40(s0) + 8000e97c: 0887b783 ld a5,136(a5) + 8000e980: 02a7d793 srli a5,a5,0x2a + 8000e984: fff7f793 andi a5,a5,-1 + 8000e988: 03079793 slli a5,a5,0x30 + 8000e98c: 0307d793 srli a5,a5,0x30 + 8000e990: 0900006f j 8000ea20 <_serial_fifo_calc_recved_len+0x110> + 8000e994: 00000793 li a5,0 + 8000e998: 0880006f j 8000ea20 <_serial_fifo_calc_recved_len+0x110> + 8000e99c: fe843783 ld a5,-24(s0) + 8000e9a0: 0087d703 lhu a4,8(a5) + 8000e9a4: fe843783 ld a5,-24(s0) + 8000e9a8: 00a7d783 lhu a5,10(a5) + 8000e9ac: 0007071b sext.w a4,a4 + 8000e9b0: 0007879b sext.w a5,a5 + 8000e9b4: 02e7f463 bgeu a5,a4,8000e9dc <_serial_fifo_calc_recved_len+0xcc> + 8000e9b8: fe843783 ld a5,-24(s0) + 8000e9bc: 0087d783 lhu a5,8(a5) + 8000e9c0: 0007871b sext.w a4,a5 + 8000e9c4: fe843783 ld a5,-24(s0) + 8000e9c8: 00a7d783 lhu a5,10(a5) + 8000e9cc: 0007879b sext.w a5,a5 + 8000e9d0: 40f707bb subw a5,a4,a5 + 8000e9d4: 0007879b sext.w a5,a5 + 8000e9d8: 0480006f j 8000ea20 <_serial_fifo_calc_recved_len+0x110> + 8000e9dc: fd843783 ld a5,-40(s0) + 8000e9e0: 0887b783 ld a5,136(a5) + 8000e9e4: 02a7d793 srli a5,a5,0x2a + 8000e9e8: fff7f793 andi a5,a5,-1 + 8000e9ec: 03079793 slli a5,a5,0x30 + 8000e9f0: 0307d793 srli a5,a5,0x30 + 8000e9f4: 0007871b sext.w a4,a5 + 8000e9f8: fe843783 ld a5,-24(s0) + 8000e9fc: 00a7d783 lhu a5,10(a5) + 8000ea00: 0007869b sext.w a3,a5 + 8000ea04: fe843783 ld a5,-24(s0) + 8000ea08: 0087d783 lhu a5,8(a5) + 8000ea0c: 0007879b sext.w a5,a5 + 8000ea10: 40f687bb subw a5,a3,a5 + 8000ea14: 0007879b sext.w a5,a5 + 8000ea18: 40f707bb subw a5,a4,a5 + 8000ea1c: 0007879b sext.w a5,a5 + 8000ea20: 00078513 mv a0,a5 + 8000ea24: 02813083 ld ra,40(sp) + 8000ea28: 02013403 ld s0,32(sp) + 8000ea2c: 03010113 addi sp,sp,48 + 8000ea30: 00008067 ret + +000000008000ea34 : + 8000ea34: fe010113 addi sp,sp,-32 + 8000ea38: 00113c23 sd ra,24(sp) + 8000ea3c: 00813823 sd s0,16(sp) + 8000ea40: 02010413 addi s0,sp,32 + 8000ea44: fea43423 sd a0,-24(s0) + 8000ea48: fe843503 ld a0,-24(s0) + 8000ea4c: ec5ff0ef jal ra,8000e910 <_serial_fifo_calc_recved_len> + 8000ea50: 00050793 mv a5,a0 + 8000ea54: 00078513 mv a0,a5 + 8000ea58: 01813083 ld ra,24(sp) + 8000ea5c: 01013403 ld s0,16(sp) + 8000ea60: 02010113 addi sp,sp,32 + 8000ea64: 00008067 ret + +000000008000ea68 : + 8000ea68: fd010113 addi sp,sp,-48 + 8000ea6c: 02113423 sd ra,40(sp) + 8000ea70: 02813023 sd s0,32(sp) + 8000ea74: 03010413 addi s0,sp,48 + 8000ea78: fca43c23 sd a0,-40(s0) + 8000ea7c: fcb43823 sd a1,-48(s0) + 8000ea80: fd843783 ld a5,-40(s0) + 8000ea84: 0907b783 ld a5,144(a5) + 8000ea88: fef43423 sd a5,-24(s0) + 8000ea8c: fe843783 ld a5,-24(s0) + 8000ea90: 00079e63 bnez a5,8000eaac + 8000ea94: 19c00613 li a2,412 + 8000ea98: 0000a597 auipc a1,0xa + 8000ea9c: 76058593 addi a1,a1,1888 # 800191f8 <__FUNCTION__.3081> + 8000eaa0: 00009517 auipc a0,0x9 + 8000eaa4: f4850513 addi a0,a0,-184 # 800179e8 + 8000eaa8: 9d5f90ef jal ra,8000847c + 8000eaac: fd843503 ld a0,-40(s0) + 8000eab0: f85ff0ef jal ra,8000ea34 + 8000eab4: 00050713 mv a4,a0 + 8000eab8: fd043783 ld a5,-48(s0) + 8000eabc: 00f77e63 bgeu a4,a5,8000ead8 + 8000eac0: 19d00613 li a2,413 + 8000eac4: 0000a597 auipc a1,0xa + 8000eac8: 73458593 addi a1,a1,1844 # 800191f8 <__FUNCTION__.3081> + 8000eacc: 00009517 auipc a0,0x9 + 8000ead0: fc450513 addi a0,a0,-60 # 80017a90 + 8000ead4: 9a9f90ef jal ra,8000847c + 8000ead8: fe843783 ld a5,-24(s0) + 8000eadc: 00c7a783 lw a5,12(a5) + 8000eae0: 00078a63 beqz a5,8000eaf4 + 8000eae4: fd043783 ld a5,-48(s0) + 8000eae8: 00078663 beqz a5,8000eaf4 + 8000eaec: fe843783 ld a5,-24(s0) + 8000eaf0: 0007a623 sw zero,12(a5) + 8000eaf4: fe843783 ld a5,-24(s0) + 8000eaf8: 00a7d703 lhu a4,10(a5) + 8000eafc: fd043783 ld a5,-48(s0) + 8000eb00: 03079793 slli a5,a5,0x30 + 8000eb04: 0307d793 srli a5,a5,0x30 + 8000eb08: 00f707bb addw a5,a4,a5 + 8000eb0c: 03079713 slli a4,a5,0x30 + 8000eb10: 03075713 srli a4,a4,0x30 + 8000eb14: fe843783 ld a5,-24(s0) + 8000eb18: 00e79523 sh a4,10(a5) + 8000eb1c: fe843783 ld a5,-24(s0) + 8000eb20: 00a7d703 lhu a4,10(a5) + 8000eb24: fd843783 ld a5,-40(s0) + 8000eb28: 0887b783 ld a5,136(a5) + 8000eb2c: 02a7d793 srli a5,a5,0x2a + 8000eb30: fff7f793 andi a5,a5,-1 + 8000eb34: 03079793 slli a5,a5,0x30 + 8000eb38: 0307d793 srli a5,a5,0x30 + 8000eb3c: 0007071b sext.w a4,a4 + 8000eb40: 0007879b sext.w a5,a5 + 8000eb44: 04f76263 bltu a4,a5,8000eb88 + 8000eb48: fe843783 ld a5,-24(s0) + 8000eb4c: 00a7d703 lhu a4,10(a5) + 8000eb50: fd843783 ld a5,-40(s0) + 8000eb54: 0887b783 ld a5,136(a5) + 8000eb58: 02a7d793 srli a5,a5,0x2a + 8000eb5c: fff7f793 andi a5,a5,-1 + 8000eb60: 03079793 slli a5,a5,0x30 + 8000eb64: 0307d793 srli a5,a5,0x30 + 8000eb68: 00078593 mv a1,a5 + 8000eb6c: 00070513 mv a0,a4 + 8000eb70: d70f10ef jal ra,800000e0 <__umoddi3> + 8000eb74: 00050793 mv a5,a0 + 8000eb78: 03079713 slli a4,a5,0x30 + 8000eb7c: 03075713 srli a4,a4,0x30 + 8000eb80: fe843783 ld a5,-24(s0) + 8000eb84: 00e79523 sh a4,10(a5) + 8000eb88: 00000013 nop + 8000eb8c: 02813083 ld ra,40(sp) + 8000eb90: 02013403 ld s0,32(sp) + 8000eb94: 03010113 addi sp,sp,48 + 8000eb98: 00008067 ret + +000000008000eb9c <_serial_dma_rx>: + 8000eb9c: fa010113 addi sp,sp,-96 + 8000eba0: 04113c23 sd ra,88(sp) + 8000eba4: 04813823 sd s0,80(sp) + 8000eba8: 06010413 addi s0,sp,96 + 8000ebac: faa43c23 sd a0,-72(s0) + 8000ebb0: fab43823 sd a1,-80(s0) + 8000ebb4: 00060793 mv a5,a2 + 8000ebb8: faf42623 sw a5,-84(s0) + 8000ebbc: fb843783 ld a5,-72(s0) + 8000ebc0: 00078663 beqz a5,8000ebcc <_serial_dma_rx+0x30> + 8000ebc4: fb043783 ld a5,-80(s0) + 8000ebc8: 00079e63 bnez a5,8000ebe4 <_serial_dma_rx+0x48> + 8000ebcc: 1df00613 li a2,479 + 8000ebd0: 0000a597 auipc a1,0xa + 8000ebd4: 69858593 addi a1,a1,1688 # 80019268 <__FUNCTION__.3094> + 8000ebd8: 00009517 auipc a0,0x9 + 8000ebdc: ee050513 addi a0,a0,-288 # 80017ab8 + 8000ebe0: 89df90ef jal ra,8000847c + 8000ebe4: d90f10ef jal ra,80000174 + 8000ebe8: fca43c23 sd a0,-40(s0) + 8000ebec: fb843783 ld a5,-72(s0) + 8000ebf0: 08c7a783 lw a5,140(a5) + 8000ebf4: 00078713 mv a4,a5 + 8000ebf8: 040007b7 lui a5,0x4000 + 8000ebfc: c0078793 addi a5,a5,-1024 # 3fffc00 <__STACKSIZE__+0x3ffbc00> + 8000ec00: 00f777b3 and a5,a4,a5 + 8000ec04: 0007879b sext.w a5,a5 + 8000ec08: 0c079e63 bnez a5,8000ece4 <_serial_dma_rx+0x148> + 8000ec0c: fe042623 sw zero,-20(s0) + 8000ec10: fb843783 ld a5,-72(s0) + 8000ec14: 0907b783 ld a5,144(a5) + 8000ec18: fcf43023 sd a5,-64(s0) + 8000ec1c: fc043783 ld a5,-64(s0) + 8000ec20: 00079e63 bnez a5,8000ec3c <_serial_dma_rx+0xa0> + 8000ec24: 1e900613 li a2,489 + 8000ec28: 0000a597 auipc a1,0xa + 8000ec2c: 64058593 addi a1,a1,1600 # 80019268 <__FUNCTION__.3094> + 8000ec30: 00009517 auipc a0,0x9 + 8000ec34: eb850513 addi a0,a0,-328 # 80017ae8 + 8000ec38: 845f90ef jal ra,8000847c + 8000ec3c: fc043783 ld a5,-64(s0) + 8000ec40: 0007a783 lw a5,0(a5) + 8000ec44: 00078713 mv a4,a5 + 8000ec48: 00100793 li a5,1 + 8000ec4c: 06f70063 beq a4,a5,8000ecac <_serial_dma_rx+0x110> + 8000ec50: fc043783 ld a5,-64(s0) + 8000ec54: 00100713 li a4,1 + 8000ec58: 00e7a023 sw a4,0(a5) + 8000ec5c: fb843783 ld a5,-72(s0) + 8000ec60: 0807b783 ld a5,128(a5) + 8000ec64: 0207b783 ld a5,32(a5) + 8000ec68: 00079e63 bnez a5,8000ec84 <_serial_dma_rx+0xe8> + 8000ec6c: 1ee00613 li a2,494 + 8000ec70: 0000a597 auipc a1,0xa + 8000ec74: 5f858593 addi a1,a1,1528 # 80019268 <__FUNCTION__.3094> + 8000ec78: 00009517 auipc a0,0x9 + 8000ec7c: e8850513 addi a0,a0,-376 # 80017b00 + 8000ec80: ffcf90ef jal ra,8000847c + 8000ec84: fb843783 ld a5,-72(s0) + 8000ec88: 0807b783 ld a5,128(a5) + 8000ec8c: 0207b703 ld a4,32(a5) + 8000ec90: fac42783 lw a5,-84(s0) + 8000ec94: 00100693 li a3,1 + 8000ec98: 00078613 mv a2,a5 + 8000ec9c: fb043583 ld a1,-80(s0) + 8000eca0: fb843503 ld a0,-72(s0) + 8000eca4: 000700e7 jalr a4 + 8000eca8: 00c0006f j 8000ecb4 <_serial_dma_rx+0x118> + 8000ecac: ff900793 li a5,-7 + 8000ecb0: fef42623 sw a5,-20(s0) + 8000ecb4: fd843503 ld a0,-40(s0) + 8000ecb8: cc4f10ef jal ra,8000017c + 8000ecbc: fec42783 lw a5,-20(s0) + 8000ecc0: 0007879b sext.w a5,a5 + 8000ecc4: 00079663 bnez a5,8000ecd0 <_serial_dma_rx+0x134> + 8000ecc8: fac42783 lw a5,-84(s0) + 8000eccc: 1b80006f j 8000ee84 <_serial_dma_rx+0x2e8> + 8000ecd0: fec42783 lw a5,-20(s0) + 8000ecd4: 00078513 mv a0,a5 + 8000ecd8: d71f70ef jal ra,80006a48 + 8000ecdc: 00000793 li a5,0 + 8000ece0: 1a40006f j 8000ee84 <_serial_dma_rx+0x2e8> + 8000ece4: fb843783 ld a5,-72(s0) + 8000ece8: 0907b783 ld a5,144(a5) + 8000ecec: fcf43823 sd a5,-48(s0) + 8000ecf0: fe043023 sd zero,-32(s0) + 8000ecf4: fb843503 ld a0,-72(s0) + 8000ecf8: d3dff0ef jal ra,8000ea34 + 8000ecfc: fca43423 sd a0,-56(s0) + 8000ed00: fd043783 ld a5,-48(s0) + 8000ed04: 00079e63 bnez a5,8000ed20 <_serial_dma_rx+0x184> + 8000ed08: 1fe00613 li a2,510 + 8000ed0c: 0000a597 auipc a1,0xa + 8000ed10: 55c58593 addi a1,a1,1372 # 80019268 <__FUNCTION__.3094> + 8000ed14: 00009517 auipc a0,0x9 + 8000ed18: cd450513 addi a0,a0,-812 # 800179e8 + 8000ed1c: f60f90ef jal ra,8000847c + 8000ed20: fc843783 ld a5,-56(s0) + 8000ed24: 0007871b sext.w a4,a5 + 8000ed28: fac42783 lw a5,-84(s0) + 8000ed2c: 0007879b sext.w a5,a5 + 8000ed30: 00e7d863 bge a5,a4,8000ed40 <_serial_dma_rx+0x1a4> + 8000ed34: fac42783 lw a5,-84(s0) + 8000ed38: fef43023 sd a5,-32(s0) + 8000ed3c: 00c0006f j 8000ed48 <_serial_dma_rx+0x1ac> + 8000ed40: fc843783 ld a5,-56(s0) + 8000ed44: fef43023 sd a5,-32(s0) + 8000ed48: fd043783 ld a5,-48(s0) + 8000ed4c: 00a7d783 lhu a5,10(a5) + 8000ed50: 00078713 mv a4,a5 + 8000ed54: fe043783 ld a5,-32(s0) + 8000ed58: 00f707b3 add a5,a4,a5 + 8000ed5c: fb843703 ld a4,-72(s0) + 8000ed60: 08873703 ld a4,136(a4) + 8000ed64: 02a75713 srli a4,a4,0x2a + 8000ed68: fff77713 andi a4,a4,-1 + 8000ed6c: 03071713 slli a4,a4,0x30 + 8000ed70: 03075713 srli a4,a4,0x30 + 8000ed74: 02e7f663 bgeu a5,a4,8000eda0 <_serial_dma_rx+0x204> + 8000ed78: fd043783 ld a5,-48(s0) + 8000ed7c: 0007b783 ld a5,0(a5) + 8000ed80: fd043703 ld a4,-48(s0) + 8000ed84: 00a75703 lhu a4,10(a4) + 8000ed88: 00e787b3 add a5,a5,a4 + 8000ed8c: fe043603 ld a2,-32(s0) + 8000ed90: 00078593 mv a1,a5 + 8000ed94: fb043503 ld a0,-80(s0) + 8000ed98: e9df70ef jal ra,80006c34 + 8000ed9c: 0cc0006f j 8000ee68 <_serial_dma_rx+0x2cc> + 8000eda0: fd043783 ld a5,-48(s0) + 8000eda4: 0007b783 ld a5,0(a5) + 8000eda8: fd043703 ld a4,-48(s0) + 8000edac: 00a75703 lhu a4,10(a4) + 8000edb0: 00e786b3 add a3,a5,a4 + 8000edb4: fb843783 ld a5,-72(s0) + 8000edb8: 0887b783 ld a5,136(a5) + 8000edbc: 02a7d793 srli a5,a5,0x2a + 8000edc0: fff7f793 andi a5,a5,-1 + 8000edc4: 03079793 slli a5,a5,0x30 + 8000edc8: 0307d793 srli a5,a5,0x30 + 8000edcc: 0007871b sext.w a4,a5 + 8000edd0: fd043783 ld a5,-48(s0) + 8000edd4: 00a7d783 lhu a5,10(a5) + 8000edd8: 0007879b sext.w a5,a5 + 8000eddc: 40f707bb subw a5,a4,a5 + 8000ede0: 0007879b sext.w a5,a5 + 8000ede4: 00078613 mv a2,a5 + 8000ede8: 00068593 mv a1,a3 + 8000edec: fb043503 ld a0,-80(s0) + 8000edf0: e45f70ef jal ra,80006c34 + 8000edf4: fb843783 ld a5,-72(s0) + 8000edf8: 0887b783 ld a5,136(a5) + 8000edfc: 02a7d793 srli a5,a5,0x2a + 8000ee00: fff7f793 andi a5,a5,-1 + 8000ee04: 03079793 slli a5,a5,0x30 + 8000ee08: 0307d793 srli a5,a5,0x30 + 8000ee0c: 00078713 mv a4,a5 + 8000ee10: fd043783 ld a5,-48(s0) + 8000ee14: 00a7d783 lhu a5,10(a5) + 8000ee18: 40f707b3 sub a5,a4,a5 + 8000ee1c: fb043703 ld a4,-80(s0) + 8000ee20: 00f706b3 add a3,a4,a5 + 8000ee24: fd043783 ld a5,-48(s0) + 8000ee28: 0007b583 ld a1,0(a5) + 8000ee2c: fd043783 ld a5,-48(s0) + 8000ee30: 00a7d783 lhu a5,10(a5) + 8000ee34: 00078713 mv a4,a5 + 8000ee38: fe043783 ld a5,-32(s0) + 8000ee3c: 00f707b3 add a5,a4,a5 + 8000ee40: fb843703 ld a4,-72(s0) + 8000ee44: 08873703 ld a4,136(a4) + 8000ee48: 02a75713 srli a4,a4,0x2a + 8000ee4c: fff77713 andi a4,a4,-1 + 8000ee50: 03071713 slli a4,a4,0x30 + 8000ee54: 03075713 srli a4,a4,0x30 + 8000ee58: 40e787b3 sub a5,a5,a4 + 8000ee5c: 00078613 mv a2,a5 + 8000ee60: 00068513 mv a0,a3 + 8000ee64: dd1f70ef jal ra,80006c34 + 8000ee68: fe043583 ld a1,-32(s0) + 8000ee6c: fb843503 ld a0,-72(s0) + 8000ee70: bf9ff0ef jal ra,8000ea68 + 8000ee74: fd843503 ld a0,-40(s0) + 8000ee78: b04f10ef jal ra,8000017c + 8000ee7c: fe043783 ld a5,-32(s0) + 8000ee80: 0007879b sext.w a5,a5 + 8000ee84: 00078513 mv a0,a5 + 8000ee88: 05813083 ld ra,88(sp) + 8000ee8c: 05013403 ld s0,80(sp) + 8000ee90: 06010113 addi sp,sp,96 + 8000ee94: 00008067 ret + +000000008000ee98 <_serial_dma_tx>: + 8000ee98: fb010113 addi sp,sp,-80 + 8000ee9c: 04113423 sd ra,72(sp) + 8000eea0: 04813023 sd s0,64(sp) + 8000eea4: 05010413 addi s0,sp,80 + 8000eea8: fca43423 sd a0,-56(s0) + 8000eeac: fcb43023 sd a1,-64(s0) + 8000eeb0: 00060793 mv a5,a2 + 8000eeb4: faf42e23 sw a5,-68(s0) + 8000eeb8: fc843783 ld a5,-56(s0) + 8000eebc: 0987b783 ld a5,152(a5) + 8000eec0: fef43423 sd a5,-24(s0) + 8000eec4: fe843783 ld a5,-24(s0) + 8000eec8: 00878793 addi a5,a5,8 + 8000eecc: fbc42703 lw a4,-68(s0) + 8000eed0: fff00693 li a3,-1 + 8000eed4: 00070613 mv a2,a4 + 8000eed8: fc043583 ld a1,-64(s0) + 8000eedc: 00078513 mv a0,a5 + 8000eee0: 1dc010ef jal ra,800100bc + 8000eee4: fea43023 sd a0,-32(s0) + 8000eee8: fe043783 ld a5,-32(s0) + 8000eeec: 06079663 bnez a5,8000ef58 <_serial_dma_tx+0xc0> + 8000eef0: a84f10ef jal ra,80000174 + 8000eef4: fca43c23 sd a0,-40(s0) + 8000eef8: fe843783 ld a5,-24(s0) + 8000eefc: 0007a783 lw a5,0(a5) + 8000ef00: 00078713 mv a4,a5 + 8000ef04: 00100793 li a5,1 + 8000ef08: 04f70063 beq a4,a5,8000ef48 <_serial_dma_tx+0xb0> + 8000ef0c: fe843783 ld a5,-24(s0) + 8000ef10: 00100713 li a4,1 + 8000ef14: 00e7a023 sw a4,0(a5) + 8000ef18: fd843503 ld a0,-40(s0) + 8000ef1c: a60f10ef jal ra,8000017c + 8000ef20: fc843783 ld a5,-56(s0) + 8000ef24: 0807b783 ld a5,128(a5) + 8000ef28: 0207b703 ld a4,32(a5) + 8000ef2c: fbc42783 lw a5,-68(s0) + 8000ef30: 00200693 li a3,2 + 8000ef34: 00078613 mv a2,a5 + 8000ef38: fc043583 ld a1,-64(s0) + 8000ef3c: fc843503 ld a0,-56(s0) + 8000ef40: 000700e7 jalr a4 + 8000ef44: 00c0006f j 8000ef50 <_serial_dma_tx+0xb8> + 8000ef48: fd843503 ld a0,-40(s0) + 8000ef4c: a30f10ef jal ra,8000017c + 8000ef50: fbc42783 lw a5,-68(s0) + 8000ef54: 0100006f j 8000ef64 <_serial_dma_tx+0xcc> + 8000ef58: fe043503 ld a0,-32(s0) + 8000ef5c: aedf70ef jal ra,80006a48 + 8000ef60: 00000793 li a5,0 + 8000ef64: 00078513 mv a0,a5 + 8000ef68: 04813083 ld ra,72(sp) + 8000ef6c: 04013403 ld s0,64(sp) + 8000ef70: 05010113 addi sp,sp,80 + 8000ef74: 00008067 ret + +000000008000ef78 : + 8000ef78: fd010113 addi sp,sp,-48 + 8000ef7c: 02113423 sd ra,40(sp) + 8000ef80: 02813023 sd s0,32(sp) + 8000ef84: 03010413 addi s0,sp,48 + 8000ef88: fca43c23 sd a0,-40(s0) + 8000ef8c: fe043423 sd zero,-24(s0) + 8000ef90: fd843783 ld a5,-40(s0) + 8000ef94: 00079e63 bnez a5,8000efb0 + 8000ef98: 24000613 li a2,576 + 8000ef9c: 0000a597 auipc a1,0xa + 8000efa0: 27c58593 addi a1,a1,636 # 80019218 <__FUNCTION__.3113> + 8000efa4: 00009517 auipc a0,0x9 + 8000efa8: b8450513 addi a0,a0,-1148 # 80017b28 + 8000efac: cd0f90ef jal ra,8000847c + 8000efb0: fd843783 ld a5,-40(s0) + 8000efb4: fef43023 sd a5,-32(s0) + 8000efb8: fe043783 ld a5,-32(s0) + 8000efbc: 0807b823 sd zero,144(a5) + 8000efc0: fe043783 ld a5,-32(s0) + 8000efc4: 0807bc23 sd zero,152(a5) + 8000efc8: fe043783 ld a5,-32(s0) + 8000efcc: 0807b783 ld a5,128(a5) + 8000efd0: 0007b783 ld a5,0(a5) + 8000efd4: 02078463 beqz a5,8000effc + 8000efd8: fe043783 ld a5,-32(s0) + 8000efdc: 0807b783 ld a5,128(a5) + 8000efe0: 0007b703 ld a4,0(a5) + 8000efe4: fe043783 ld a5,-32(s0) + 8000efe8: 08878793 addi a5,a5,136 + 8000efec: 00078593 mv a1,a5 + 8000eff0: fe043503 ld a0,-32(s0) + 8000eff4: 000700e7 jalr a4 + 8000eff8: fea43423 sd a0,-24(s0) + 8000effc: fe843783 ld a5,-24(s0) + 8000f000: 00078513 mv a0,a5 + 8000f004: 02813083 ld ra,40(sp) + 8000f008: 02013403 ld s0,32(sp) + 8000f00c: 03010113 addi sp,sp,48 + 8000f010: 00008067 ret + +000000008000f014 : + 8000f014: fa010113 addi sp,sp,-96 + 8000f018: 04113c23 sd ra,88(sp) + 8000f01c: 04813823 sd s0,80(sp) + 8000f020: 06010413 addi s0,sp,96 + 8000f024: faa43423 sd a0,-88(s0) + 8000f028: 00058793 mv a5,a1 + 8000f02c: faf41323 sh a5,-90(s0) + 8000f030: fe041723 sh zero,-18(s0) + 8000f034: fa843783 ld a5,-88(s0) + 8000f038: 00079e63 bnez a5,8000f054 + 8000f03c: 25300613 li a2,595 + 8000f040: 0000a597 auipc a1,0xa + 8000f044: 1e858593 addi a1,a1,488 # 80019228 <__FUNCTION__.3120> + 8000f048: 00009517 auipc a0,0x9 + 8000f04c: ae050513 addi a0,a0,-1312 # 80017b28 + 8000f050: c2cf90ef jal ra,8000847c + 8000f054: fa843783 ld a5,-88(s0) + 8000f058: fef43023 sd a5,-32(s0) + 8000f05c: fa645783 lhu a5,-90(s0) + 8000f060: 0007879b sext.w a5,a5 + 8000f064: 2007f793 andi a5,a5,512 + 8000f068: 0007879b sext.w a5,a5 + 8000f06c: 02078263 beqz a5,8000f090 + 8000f070: fa843783 ld a5,-88(s0) + 8000f074: 02c7d783 lhu a5,44(a5) + 8000f078: 0007879b sext.w a5,a5 + 8000f07c: 2007f793 andi a5,a5,512 + 8000f080: 0007879b sext.w a5,a5 + 8000f084: 00079663 bnez a5,8000f090 + 8000f088: ff800793 li a5,-8 + 8000f08c: 5d80006f j 8000f664 + 8000f090: fa645783 lhu a5,-90(s0) + 8000f094: 0007871b sext.w a4,a5 + 8000f098: 000017b7 lui a5,0x1 + 8000f09c: 80078793 addi a5,a5,-2048 # 800 <__STACKSIZE__-0x3800> + 8000f0a0: 00f777b3 and a5,a4,a5 + 8000f0a4: 0007879b sext.w a5,a5 + 8000f0a8: 02078663 beqz a5,8000f0d4 + 8000f0ac: fa843783 ld a5,-88(s0) + 8000f0b0: 02c7d783 lhu a5,44(a5) + 8000f0b4: 0007871b sext.w a4,a5 + 8000f0b8: 000017b7 lui a5,0x1 + 8000f0bc: 80078793 addi a5,a5,-2048 # 800 <__STACKSIZE__-0x3800> + 8000f0c0: 00f777b3 and a5,a4,a5 + 8000f0c4: 0007879b sext.w a5,a5 + 8000f0c8: 00079663 bnez a5,8000f0d4 + 8000f0cc: ff800793 li a5,-8 + 8000f0d0: 5940006f j 8000f664 + 8000f0d4: fa645783 lhu a5,-90(s0) + 8000f0d8: 0007879b sext.w a5,a5 + 8000f0dc: 1007f793 andi a5,a5,256 + 8000f0e0: 0007879b sext.w a5,a5 + 8000f0e4: 02078263 beqz a5,8000f108 + 8000f0e8: fa843783 ld a5,-88(s0) + 8000f0ec: 02c7d783 lhu a5,44(a5) + 8000f0f0: 0007879b sext.w a5,a5 + 8000f0f4: 1007f793 andi a5,a5,256 + 8000f0f8: 0007879b sext.w a5,a5 + 8000f0fc: 00079663 bnez a5,8000f108 + 8000f100: ff800793 li a5,-8 + 8000f104: 5600006f j 8000f664 + 8000f108: fa645783 lhu a5,-90(s0) + 8000f10c: 0007879b sext.w a5,a5 + 8000f110: 4007f793 andi a5,a5,1024 + 8000f114: 0007879b sext.w a5,a5 + 8000f118: 02078263 beqz a5,8000f13c + 8000f11c: fa843783 ld a5,-88(s0) + 8000f120: 02c7d783 lhu a5,44(a5) + 8000f124: 0007879b sext.w a5,a5 + 8000f128: 4007f793 andi a5,a5,1024 + 8000f12c: 0007879b sext.w a5,a5 + 8000f130: 00079663 bnez a5,8000f13c + 8000f134: ff800793 li a5,-8 + 8000f138: 52c0006f j 8000f664 + 8000f13c: fa645783 lhu a5,-90(s0) + 8000f140: 0007879b sext.w a5,a5 + 8000f144: 0407f793 andi a5,a5,64 + 8000f148: 0007879b sext.w a5,a5 + 8000f14c: 00079e63 bnez a5,8000f168 + 8000f150: fa843783 ld a5,-88(s0) + 8000f154: 02e7d783 lhu a5,46(a5) + 8000f158: 0007879b sext.w a5,a5 + 8000f15c: 0407f793 andi a5,a5,64 + 8000f160: 0007879b sext.w a5,a5 + 8000f164: 00078663 beqz a5,8000f170 + 8000f168: 04000793 li a5,64 + 8000f16c: fef41723 sh a5,-18(s0) + 8000f170: fa645783 lhu a5,-90(s0) + 8000f174: 0ff7f793 andi a5,a5,255 + 8000f178: 03079713 slli a4,a5,0x30 + 8000f17c: 03075713 srli a4,a4,0x30 + 8000f180: fa843783 ld a5,-88(s0) + 8000f184: 02e79723 sh a4,46(a5) + 8000f188: fe043783 ld a5,-32(s0) + 8000f18c: 0907b783 ld a5,144(a5) + 8000f190: 26079663 bnez a5,8000f3fc + 8000f194: fa645783 lhu a5,-90(s0) + 8000f198: 0007879b sext.w a5,a5 + 8000f19c: 1007f793 andi a5,a5,256 + 8000f1a0: 0007879b sext.w a5,a5 + 8000f1a4: 0e078663 beqz a5,8000f290 + 8000f1a8: fe043783 ld a5,-32(s0) + 8000f1ac: 0887b783 ld a5,136(a5) + 8000f1b0: 02a7d793 srli a5,a5,0x2a + 8000f1b4: fff7f793 andi a5,a5,-1 + 8000f1b8: 03079793 slli a5,a5,0x30 + 8000f1bc: 0307d793 srli a5,a5,0x30 + 8000f1c0: 01078793 addi a5,a5,16 + 8000f1c4: 00078513 mv a0,a5 + 8000f1c8: c60f50ef jal ra,80004628 + 8000f1cc: fca43423 sd a0,-56(s0) + 8000f1d0: fc843783 ld a5,-56(s0) + 8000f1d4: 00079e63 bnez a5,8000f1f0 + 8000f1d8: 27200613 li a2,626 + 8000f1dc: 0000a597 auipc a1,0xa + 8000f1e0: 04c58593 addi a1,a1,76 # 80019228 <__FUNCTION__.3120> + 8000f1e4: 00009517 auipc a0,0x9 + 8000f1e8: 80450513 addi a0,a0,-2044 # 800179e8 + 8000f1ec: a90f90ef jal ra,8000847c + 8000f1f0: fc843783 ld a5,-56(s0) + 8000f1f4: 01078713 addi a4,a5,16 + 8000f1f8: fc843783 ld a5,-56(s0) + 8000f1fc: 00e7b023 sd a4,0(a5) + 8000f200: fc843783 ld a5,-56(s0) + 8000f204: 0007b703 ld a4,0(a5) + 8000f208: fe043783 ld a5,-32(s0) + 8000f20c: 0887b783 ld a5,136(a5) + 8000f210: 02a7d793 srli a5,a5,0x2a + 8000f214: fff7f793 andi a5,a5,-1 + 8000f218: 03079793 slli a5,a5,0x30 + 8000f21c: 0307d793 srli a5,a5,0x30 + 8000f220: 00078613 mv a2,a5 + 8000f224: 00000593 li a1,0 + 8000f228: 00070513 mv a0,a4 + 8000f22c: 899f70ef jal ra,80006ac4 + 8000f230: fc843783 ld a5,-56(s0) + 8000f234: 00079423 sh zero,8(a5) + 8000f238: fc843783 ld a5,-56(s0) + 8000f23c: 00079523 sh zero,10(a5) + 8000f240: fc843783 ld a5,-56(s0) + 8000f244: 0007a623 sw zero,12(a5) + 8000f248: fe043783 ld a5,-32(s0) + 8000f24c: fc843703 ld a4,-56(s0) + 8000f250: 08e7b823 sd a4,144(a5) + 8000f254: fa843783 ld a5,-88(s0) + 8000f258: 02e7d783 lhu a5,46(a5) + 8000f25c: 1007e793 ori a5,a5,256 + 8000f260: 03079713 slli a4,a5,0x30 + 8000f264: 03075713 srli a4,a4,0x30 + 8000f268: fa843783 ld a5,-88(s0) + 8000f26c: 02e79723 sh a4,46(a5) + 8000f270: fe043783 ld a5,-32(s0) + 8000f274: 0807b783 ld a5,128(a5) + 8000f278: 0087b783 ld a5,8(a5) + 8000f27c: 10000613 li a2,256 + 8000f280: 01000593 li a1,16 + 8000f284: fe043503 ld a0,-32(s0) + 8000f288: 000780e7 jalr a5 + 8000f28c: 1d40006f j 8000f460 + 8000f290: fa645783 lhu a5,-90(s0) + 8000f294: 0007879b sext.w a5,a5 + 8000f298: 2007f793 andi a5,a5,512 + 8000f29c: 0007879b sext.w a5,a5 + 8000f2a0: 14078863 beqz a5,8000f3f0 + 8000f2a4: fe043783 ld a5,-32(s0) + 8000f2a8: 08c7a783 lw a5,140(a5) + 8000f2ac: 00078713 mv a4,a5 + 8000f2b0: 040007b7 lui a5,0x4000 + 8000f2b4: c0078793 addi a5,a5,-1024 # 3fffc00 <__STACKSIZE__+0x3ffbc00> + 8000f2b8: 00f777b3 and a5,a4,a5 + 8000f2bc: 0007879b sext.w a5,a5 + 8000f2c0: 04079463 bnez a5,8000f308 + 8000f2c4: 00400513 li a0,4 + 8000f2c8: b60f50ef jal ra,80004628 + 8000f2cc: fca43823 sd a0,-48(s0) + 8000f2d0: fd043783 ld a5,-48(s0) + 8000f2d4: 00079e63 bnez a5,8000f2f0 + 8000f2d8: 28500613 li a2,645 + 8000f2dc: 0000a597 auipc a1,0xa + 8000f2e0: f4c58593 addi a1,a1,-180 # 80019228 <__FUNCTION__.3120> + 8000f2e4: 00009517 auipc a0,0x9 + 8000f2e8: 80450513 addi a0,a0,-2044 # 80017ae8 + 8000f2ec: 990f90ef jal ra,8000847c + 8000f2f0: fd043783 ld a5,-48(s0) + 8000f2f4: 0007a023 sw zero,0(a5) + 8000f2f8: fe043783 ld a5,-32(s0) + 8000f2fc: fd043703 ld a4,-48(s0) + 8000f300: 08e7b823 sd a4,144(a5) + 8000f304: 0cc0006f j 8000f3d0 + 8000f308: fe043783 ld a5,-32(s0) + 8000f30c: 0887b783 ld a5,136(a5) + 8000f310: 02a7d793 srli a5,a5,0x2a + 8000f314: fff7f793 andi a5,a5,-1 + 8000f318: 03079793 slli a5,a5,0x30 + 8000f31c: 0307d793 srli a5,a5,0x30 + 8000f320: 01078793 addi a5,a5,16 + 8000f324: 00078513 mv a0,a5 + 8000f328: b00f50ef jal ra,80004628 + 8000f32c: fca43c23 sd a0,-40(s0) + 8000f330: fd843783 ld a5,-40(s0) + 8000f334: 00079e63 bnez a5,8000f350 + 8000f338: 28e00613 li a2,654 + 8000f33c: 0000a597 auipc a1,0xa + 8000f340: eec58593 addi a1,a1,-276 # 80019228 <__FUNCTION__.3120> + 8000f344: 00008517 auipc a0,0x8 + 8000f348: 6a450513 addi a0,a0,1700 # 800179e8 + 8000f34c: 930f90ef jal ra,8000847c + 8000f350: fd843783 ld a5,-40(s0) + 8000f354: 01078713 addi a4,a5,16 + 8000f358: fd843783 ld a5,-40(s0) + 8000f35c: 00e7b023 sd a4,0(a5) + 8000f360: fd843783 ld a5,-40(s0) + 8000f364: 0007b703 ld a4,0(a5) + 8000f368: fe043783 ld a5,-32(s0) + 8000f36c: 0887b783 ld a5,136(a5) + 8000f370: 02a7d793 srli a5,a5,0x2a + 8000f374: fff7f793 andi a5,a5,-1 + 8000f378: 03079793 slli a5,a5,0x30 + 8000f37c: 0307d793 srli a5,a5,0x30 + 8000f380: 00078613 mv a2,a5 + 8000f384: 00000593 li a1,0 + 8000f388: 00070513 mv a0,a4 + 8000f38c: f38f70ef jal ra,80006ac4 + 8000f390: fd843783 ld a5,-40(s0) + 8000f394: 00079423 sh zero,8(a5) + 8000f398: fd843783 ld a5,-40(s0) + 8000f39c: 00079523 sh zero,10(a5) + 8000f3a0: fd843783 ld a5,-40(s0) + 8000f3a4: 0007a623 sw zero,12(a5) + 8000f3a8: fe043783 ld a5,-32(s0) + 8000f3ac: fd843703 ld a4,-40(s0) + 8000f3b0: 08e7b823 sd a4,144(a5) + 8000f3b4: fe043783 ld a5,-32(s0) + 8000f3b8: 0807b783 ld a5,128(a5) + 8000f3bc: 0087b783 ld a5,8(a5) + 8000f3c0: 20000613 li a2,512 + 8000f3c4: 00300593 li a1,3 + 8000f3c8: fe043503 ld a0,-32(s0) + 8000f3cc: 000780e7 jalr a5 + 8000f3d0: fa843783 ld a5,-88(s0) + 8000f3d4: 02e7d783 lhu a5,46(a5) + 8000f3d8: 2007e793 ori a5,a5,512 + 8000f3dc: 03079713 slli a4,a5,0x30 + 8000f3e0: 03075713 srli a4,a4,0x30 + 8000f3e4: fa843783 ld a5,-88(s0) + 8000f3e8: 02e79723 sh a4,46(a5) + 8000f3ec: 0740006f j 8000f460 + 8000f3f0: fe043783 ld a5,-32(s0) + 8000f3f4: 0807b823 sd zero,144(a5) + 8000f3f8: 0680006f j 8000f460 + 8000f3fc: fa645783 lhu a5,-90(s0) + 8000f400: 0007879b sext.w a5,a5 + 8000f404: 1007f793 andi a5,a5,256 + 8000f408: 0007879b sext.w a5,a5 + 8000f40c: 02078263 beqz a5,8000f430 + 8000f410: fa843783 ld a5,-88(s0) + 8000f414: 02e7d783 lhu a5,46(a5) + 8000f418: 1007e793 ori a5,a5,256 + 8000f41c: 03079713 slli a4,a5,0x30 + 8000f420: 03075713 srli a4,a4,0x30 + 8000f424: fa843783 ld a5,-88(s0) + 8000f428: 02e79723 sh a4,46(a5) + 8000f42c: 0340006f j 8000f460 + 8000f430: fa645783 lhu a5,-90(s0) + 8000f434: 0007879b sext.w a5,a5 + 8000f438: 2007f793 andi a5,a5,512 + 8000f43c: 0007879b sext.w a5,a5 + 8000f440: 02078063 beqz a5,8000f460 + 8000f444: fa843783 ld a5,-88(s0) + 8000f448: 02e7d783 lhu a5,46(a5) + 8000f44c: 2007e793 ori a5,a5,512 + 8000f450: 03079713 slli a4,a5,0x30 + 8000f454: 03075713 srli a4,a4,0x30 + 8000f458: fa843783 ld a5,-88(s0) + 8000f45c: 02e79723 sh a4,46(a5) + 8000f460: fe043783 ld a5,-32(s0) + 8000f464: 0987b783 ld a5,152(a5) + 8000f468: 16079263 bnez a5,8000f5cc + 8000f46c: fa645783 lhu a5,-90(s0) + 8000f470: 0007879b sext.w a5,a5 + 8000f474: 4007f793 andi a5,a5,1024 + 8000f478: 0007879b sext.w a5,a5 + 8000f47c: 08078263 beqz a5,8000f500 + 8000f480: 01800513 li a0,24 + 8000f484: 9a4f50ef jal ra,80004628 + 8000f488: faa43c23 sd a0,-72(s0) + 8000f48c: fb843783 ld a5,-72(s0) + 8000f490: 00079e63 bnez a5,8000f4ac + 8000f494: 2b100613 li a2,689 + 8000f498: 0000a597 auipc a1,0xa + 8000f49c: d9058593 addi a1,a1,-624 # 80019228 <__FUNCTION__.3120> + 8000f4a0: 00008517 auipc a0,0x8 + 8000f4a4: 69850513 addi a0,a0,1688 # 80017b38 + 8000f4a8: fd5f80ef jal ra,8000847c + 8000f4ac: fb843783 ld a5,-72(s0) + 8000f4b0: 00078513 mv a0,a5 + 8000f4b4: 328010ef jal ra,800107dc + 8000f4b8: fe043783 ld a5,-32(s0) + 8000f4bc: fb843703 ld a4,-72(s0) + 8000f4c0: 08e7bc23 sd a4,152(a5) + 8000f4c4: fa843783 ld a5,-88(s0) + 8000f4c8: 02e7d783 lhu a5,46(a5) + 8000f4cc: 4007e793 ori a5,a5,1024 + 8000f4d0: 03079713 slli a4,a5,0x30 + 8000f4d4: 03075713 srli a4,a4,0x30 + 8000f4d8: fa843783 ld a5,-88(s0) + 8000f4dc: 02e79723 sh a4,46(a5) + 8000f4e0: fe043783 ld a5,-32(s0) + 8000f4e4: 0807b783 ld a5,128(a5) + 8000f4e8: 0087b783 ld a5,8(a5) + 8000f4ec: 40000613 li a2,1024 + 8000f4f0: 01000593 li a1,16 + 8000f4f4: fe043503 ld a0,-32(s0) + 8000f4f8: 000780e7 jalr a5 + 8000f4fc: 1440006f j 8000f640 + 8000f500: fa645783 lhu a5,-90(s0) + 8000f504: 0007871b sext.w a4,a5 + 8000f508: 000017b7 lui a5,0x1 + 8000f50c: 80078793 addi a5,a5,-2048 # 800 <__STACKSIZE__-0x3800> + 8000f510: 00f777b3 and a5,a4,a5 + 8000f514: 0007879b sext.w a5,a5 + 8000f518: 0a078463 beqz a5,8000f5c0 + 8000f51c: 04800513 li a0,72 + 8000f520: 908f50ef jal ra,80004628 + 8000f524: fca43023 sd a0,-64(s0) + 8000f528: fc043783 ld a5,-64(s0) + 8000f52c: 00079e63 bnez a5,8000f548 + 8000f530: 2c000613 li a2,704 + 8000f534: 0000a597 auipc a1,0xa + 8000f538: cf458593 addi a1,a1,-780 # 80019228 <__FUNCTION__.3120> + 8000f53c: 00008517 auipc a0,0x8 + 8000f540: 61450513 addi a0,a0,1556 # 80017b50 + 8000f544: f39f80ef jal ra,8000847c + 8000f548: fc043783 ld a5,-64(s0) + 8000f54c: 0007a023 sw zero,0(a5) + 8000f550: fc043783 ld a5,-64(s0) + 8000f554: 00878793 addi a5,a5,8 + 8000f558: 00000693 li a3,0 + 8000f55c: 00400613 li a2,4 + 8000f560: 00800593 li a1,8 + 8000f564: 00078513 mv a0,a5 + 8000f568: 1f1000ef jal ra,8000ff58 + 8000f56c: fe043783 ld a5,-32(s0) + 8000f570: fc043703 ld a4,-64(s0) + 8000f574: 08e7bc23 sd a4,152(a5) + 8000f578: fa843783 ld a5,-88(s0) + 8000f57c: 02e7d703 lhu a4,46(a5) + 8000f580: 000017b7 lui a5,0x1 + 8000f584: 80078793 addi a5,a5,-2048 # 800 <__STACKSIZE__-0x3800> + 8000f588: 00f767b3 or a5,a4,a5 + 8000f58c: 03079713 slli a4,a5,0x30 + 8000f590: 03075713 srli a4,a4,0x30 + 8000f594: fa843783 ld a5,-88(s0) + 8000f598: 02e79723 sh a4,46(a5) + 8000f59c: fe043783 ld a5,-32(s0) + 8000f5a0: 0807b783 ld a5,128(a5) + 8000f5a4: 0087b703 ld a4,8(a5) + 8000f5a8: 000017b7 lui a5,0x1 + 8000f5ac: 80078613 addi a2,a5,-2048 # 800 <__STACKSIZE__-0x3800> + 8000f5b0: 00300593 li a1,3 + 8000f5b4: fe043503 ld a0,-32(s0) + 8000f5b8: 000700e7 jalr a4 + 8000f5bc: 0840006f j 8000f640 + 8000f5c0: fe043783 ld a5,-32(s0) + 8000f5c4: 0807bc23 sd zero,152(a5) + 8000f5c8: 0780006f j 8000f640 + 8000f5cc: fa645783 lhu a5,-90(s0) + 8000f5d0: 0007879b sext.w a5,a5 + 8000f5d4: 4007f793 andi a5,a5,1024 + 8000f5d8: 0007879b sext.w a5,a5 + 8000f5dc: 02078263 beqz a5,8000f600 + 8000f5e0: fa843783 ld a5,-88(s0) + 8000f5e4: 02e7d783 lhu a5,46(a5) + 8000f5e8: 4007e793 ori a5,a5,1024 + 8000f5ec: 03079713 slli a4,a5,0x30 + 8000f5f0: 03075713 srli a4,a4,0x30 + 8000f5f4: fa843783 ld a5,-88(s0) + 8000f5f8: 02e79723 sh a4,46(a5) + 8000f5fc: 0440006f j 8000f640 + 8000f600: fa645783 lhu a5,-90(s0) + 8000f604: 0007871b sext.w a4,a5 + 8000f608: 000017b7 lui a5,0x1 + 8000f60c: 80078793 addi a5,a5,-2048 # 800 <__STACKSIZE__-0x3800> + 8000f610: 00f777b3 and a5,a4,a5 + 8000f614: 0007879b sext.w a5,a5 + 8000f618: 02078463 beqz a5,8000f640 + 8000f61c: fa843783 ld a5,-88(s0) + 8000f620: 02e7d703 lhu a4,46(a5) + 8000f624: 000017b7 lui a5,0x1 + 8000f628: 80078793 addi a5,a5,-2048 # 800 <__STACKSIZE__-0x3800> + 8000f62c: 00f767b3 or a5,a4,a5 + 8000f630: 03079713 slli a4,a5,0x30 + 8000f634: 03075713 srli a4,a4,0x30 + 8000f638: fa843783 ld a5,-88(s0) + 8000f63c: 02e79723 sh a4,46(a5) + 8000f640: fa843783 ld a5,-88(s0) + 8000f644: 02e7d703 lhu a4,46(a5) + 8000f648: fee45783 lhu a5,-18(s0) + 8000f64c: 00f767b3 or a5,a4,a5 + 8000f650: 03079713 slli a4,a5,0x30 + 8000f654: 03075713 srli a4,a4,0x30 + 8000f658: fa843783 ld a5,-88(s0) + 8000f65c: 02e79723 sh a4,46(a5) + 8000f660: 00000793 li a5,0 + 8000f664: 00078513 mv a0,a5 + 8000f668: 05813083 ld ra,88(sp) + 8000f66c: 05013403 ld s0,80(sp) + 8000f670: 06010113 addi sp,sp,96 + 8000f674: 00008067 ret + +000000008000f678 : + 8000f678: fb010113 addi sp,sp,-80 + 8000f67c: 04113423 sd ra,72(sp) + 8000f680: 04813023 sd s0,64(sp) + 8000f684: 05010413 addi s0,sp,80 + 8000f688: faa43c23 sd a0,-72(s0) + 8000f68c: fb843783 ld a5,-72(s0) + 8000f690: 00079e63 bnez a5,8000f6ac + 8000f694: 2e400613 li a2,740 + 8000f698: 0000a597 auipc a1,0xa + 8000f69c: ba058593 addi a1,a1,-1120 # 80019238 <__FUNCTION__.3130> + 8000f6a0: 00008517 auipc a0,0x8 + 8000f6a4: 48850513 addi a0,a0,1160 # 80017b28 + 8000f6a8: dd5f80ef jal ra,8000847c + 8000f6ac: fb843783 ld a5,-72(s0) + 8000f6b0: fef43423 sd a5,-24(s0) + 8000f6b4: fb843783 ld a5,-72(s0) + 8000f6b8: 0307c783 lbu a5,48(a5) + 8000f6bc: 00078713 mv a4,a5 + 8000f6c0: 00100793 li a5,1 + 8000f6c4: 00e7f663 bgeu a5,a4,8000f6d0 + 8000f6c8: 00000793 li a5,0 + 8000f6cc: 2f40006f j 8000f9c0 + 8000f6d0: fb843783 ld a5,-72(s0) + 8000f6d4: 02e7d783 lhu a5,46(a5) + 8000f6d8: 0007879b sext.w a5,a5 + 8000f6dc: 1007f793 andi a5,a5,256 + 8000f6e0: 0007879b sext.w a5,a5 + 8000f6e4: 06078e63 beqz a5,8000f760 + 8000f6e8: fe843783 ld a5,-24(s0) + 8000f6ec: 0807b783 ld a5,128(a5) + 8000f6f0: 0087b783 ld a5,8(a5) + 8000f6f4: 10000613 li a2,256 + 8000f6f8: 01100593 li a1,17 + 8000f6fc: fe843503 ld a0,-24(s0) + 8000f700: 000780e7 jalr a5 + 8000f704: fb843783 ld a5,-72(s0) + 8000f708: 02e7d783 lhu a5,46(a5) + 8000f70c: eff7f793 andi a5,a5,-257 + 8000f710: 03079713 slli a4,a5,0x30 + 8000f714: 03075713 srli a4,a4,0x30 + 8000f718: fb843783 ld a5,-72(s0) + 8000f71c: 02e79723 sh a4,46(a5) + 8000f720: fe843783 ld a5,-24(s0) + 8000f724: 0907b783 ld a5,144(a5) + 8000f728: fcf43823 sd a5,-48(s0) + 8000f72c: fd043783 ld a5,-48(s0) + 8000f730: 00079e63 bnez a5,8000f74c + 8000f734: 2f300613 li a2,755 + 8000f738: 0000a597 auipc a1,0xa + 8000f73c: b0058593 addi a1,a1,-1280 # 80019238 <__FUNCTION__.3130> + 8000f740: 00008517 auipc a0,0x8 + 8000f744: 2a850513 addi a0,a0,680 # 800179e8 + 8000f748: d35f80ef jal ra,8000847c + 8000f74c: fd043503 ld a0,-48(s0) + 8000f750: f44f50ef jal ra,80004e94 + 8000f754: fe843783 ld a5,-24(s0) + 8000f758: 0807b823 sd zero,144(a5) + 8000f75c: 0e80006f j 8000f844 + 8000f760: fb843783 ld a5,-72(s0) + 8000f764: 02e7d783 lhu a5,46(a5) + 8000f768: 0007879b sext.w a5,a5 + 8000f76c: 2007f793 andi a5,a5,512 + 8000f770: 0007879b sext.w a5,a5 + 8000f774: 0c078863 beqz a5,8000f844 + 8000f778: fe843783 ld a5,-24(s0) + 8000f77c: 0807b783 ld a5,128(a5) + 8000f780: 0087b783 ld a5,8(a5) + 8000f784: 20000613 li a2,512 + 8000f788: 01100593 li a1,17 + 8000f78c: fe843503 ld a0,-24(s0) + 8000f790: 000780e7 jalr a5 + 8000f794: fb843783 ld a5,-72(s0) + 8000f798: 02e7d783 lhu a5,46(a5) + 8000f79c: dff7f793 andi a5,a5,-513 + 8000f7a0: 03079713 slli a4,a5,0x30 + 8000f7a4: 03075713 srli a4,a4,0x30 + 8000f7a8: fb843783 ld a5,-72(s0) + 8000f7ac: 02e79723 sh a4,46(a5) + 8000f7b0: fe843783 ld a5,-24(s0) + 8000f7b4: 08c7a783 lw a5,140(a5) + 8000f7b8: 00078713 mv a4,a5 + 8000f7bc: 040007b7 lui a5,0x4000 + 8000f7c0: c0078793 addi a5,a5,-1024 # 3fffc00 <__STACKSIZE__+0x3ffbc00> + 8000f7c4: 00f777b3 and a5,a4,a5 + 8000f7c8: 0007879b sext.w a5,a5 + 8000f7cc: 02079e63 bnez a5,8000f808 + 8000f7d0: fe843783 ld a5,-24(s0) + 8000f7d4: 0907b783 ld a5,144(a5) + 8000f7d8: fcf43c23 sd a5,-40(s0) + 8000f7dc: fd843783 ld a5,-40(s0) + 8000f7e0: 00079e63 bnez a5,8000f7fc + 8000f7e4: 30500613 li a2,773 + 8000f7e8: 0000a597 auipc a1,0xa + 8000f7ec: a5058593 addi a1,a1,-1456 # 80019238 <__FUNCTION__.3130> + 8000f7f0: 00008517 auipc a0,0x8 + 8000f7f4: 2f850513 addi a0,a0,760 # 80017ae8 + 8000f7f8: c85f80ef jal ra,8000847c + 8000f7fc: fd843503 ld a0,-40(s0) + 8000f800: e94f50ef jal ra,80004e94 + 8000f804: 0380006f j 8000f83c + 8000f808: fe843783 ld a5,-24(s0) + 8000f80c: 0907b783 ld a5,144(a5) + 8000f810: fef43023 sd a5,-32(s0) + 8000f814: fe043783 ld a5,-32(s0) + 8000f818: 00079e63 bnez a5,8000f834 + 8000f81c: 30e00613 li a2,782 + 8000f820: 0000a597 auipc a1,0xa + 8000f824: a1858593 addi a1,a1,-1512 # 80019238 <__FUNCTION__.3130> + 8000f828: 00008517 auipc a0,0x8 + 8000f82c: 1c050513 addi a0,a0,448 # 800179e8 + 8000f830: c4df80ef jal ra,8000847c + 8000f834: fe043503 ld a0,-32(s0) + 8000f838: e5cf50ef jal ra,80004e94 + 8000f83c: fe843783 ld a5,-24(s0) + 8000f840: 0807b823 sd zero,144(a5) + 8000f844: fb843783 ld a5,-72(s0) + 8000f848: 02e7d783 lhu a5,46(a5) + 8000f84c: 0007879b sext.w a5,a5 + 8000f850: 4007f793 andi a5,a5,1024 + 8000f854: 0007879b sext.w a5,a5 + 8000f858: 06078e63 beqz a5,8000f8d4 + 8000f85c: fe843783 ld a5,-24(s0) + 8000f860: 0807b783 ld a5,128(a5) + 8000f864: 0087b783 ld a5,8(a5) + 8000f868: 40000613 li a2,1024 + 8000f86c: 01100593 li a1,17 + 8000f870: fe843503 ld a0,-24(s0) + 8000f874: 000780e7 jalr a5 + 8000f878: fb843783 ld a5,-72(s0) + 8000f87c: 02e7d783 lhu a5,46(a5) + 8000f880: bff7f793 andi a5,a5,-1025 + 8000f884: 03079713 slli a4,a5,0x30 + 8000f888: 03075713 srli a4,a4,0x30 + 8000f88c: fb843783 ld a5,-72(s0) + 8000f890: 02e79723 sh a4,46(a5) + 8000f894: fe843783 ld a5,-24(s0) + 8000f898: 0987b783 ld a5,152(a5) + 8000f89c: fcf43023 sd a5,-64(s0) + 8000f8a0: fc043783 ld a5,-64(s0) + 8000f8a4: 00079e63 bnez a5,8000f8c0 + 8000f8a8: 31f00613 li a2,799 + 8000f8ac: 0000a597 auipc a1,0xa + 8000f8b0: 98c58593 addi a1,a1,-1652 # 80019238 <__FUNCTION__.3130> + 8000f8b4: 00008517 auipc a0,0x8 + 8000f8b8: 28450513 addi a0,a0,644 # 80017b38 + 8000f8bc: bc1f80ef jal ra,8000847c + 8000f8c0: fc043503 ld a0,-64(s0) + 8000f8c4: dd0f50ef jal ra,80004e94 + 8000f8c8: fe843783 ld a5,-24(s0) + 8000f8cc: 0807bc23 sd zero,152(a5) + 8000f8d0: 0b40006f j 8000f984 + 8000f8d4: fb843783 ld a5,-72(s0) + 8000f8d8: 02e7d783 lhu a5,46(a5) + 8000f8dc: 0007871b sext.w a4,a5 + 8000f8e0: 000017b7 lui a5,0x1 + 8000f8e4: 80078793 addi a5,a5,-2048 # 800 <__STACKSIZE__-0x3800> + 8000f8e8: 00f777b3 and a5,a4,a5 + 8000f8ec: 0007879b sext.w a5,a5 + 8000f8f0: 08078a63 beqz a5,8000f984 + 8000f8f4: fe843783 ld a5,-24(s0) + 8000f8f8: 0807b783 ld a5,128(a5) + 8000f8fc: 0087b703 ld a4,8(a5) + 8000f900: 000017b7 lui a5,0x1 + 8000f904: 80078613 addi a2,a5,-2048 # 800 <__STACKSIZE__-0x3800> + 8000f908: 01100593 li a1,17 + 8000f90c: fe843503 ld a0,-24(s0) + 8000f910: 000700e7 jalr a4 + 8000f914: fb843783 ld a5,-72(s0) + 8000f918: 02e7d703 lhu a4,46(a5) + 8000f91c: fffff7b7 lui a5,0xfffff + 8000f920: 7ff78793 addi a5,a5,2047 # fffffffffffff7ff <__bss_end+0xffffffff7ffd457b> + 8000f924: 00f777b3 and a5,a4,a5 + 8000f928: 03079713 slli a4,a5,0x30 + 8000f92c: 03075713 srli a4,a4,0x30 + 8000f930: fb843783 ld a5,-72(s0) + 8000f934: 02e79723 sh a4,46(a5) + 8000f938: fe843783 ld a5,-24(s0) + 8000f93c: 0987b783 ld a5,152(a5) + 8000f940: fcf43423 sd a5,-56(s0) + 8000f944: fc843783 ld a5,-56(s0) + 8000f948: 00079e63 bnez a5,8000f964 + 8000f94c: 33000613 li a2,816 + 8000f950: 0000a597 auipc a1,0xa + 8000f954: 8e858593 addi a1,a1,-1816 # 80019238 <__FUNCTION__.3130> + 8000f958: 00008517 auipc a0,0x8 + 8000f95c: 1f850513 addi a0,a0,504 # 80017b50 + 8000f960: b1df80ef jal ra,8000847c + 8000f964: fc843783 ld a5,-56(s0) + 8000f968: 00878793 addi a5,a5,8 + 8000f96c: 00078513 mv a0,a5 + 8000f970: 4e5000ef jal ra,80010654 + 8000f974: fc843503 ld a0,-56(s0) + 8000f978: d1cf50ef jal ra,80004e94 + 8000f97c: fe843783 ld a5,-24(s0) + 8000f980: 0807bc23 sd zero,152(a5) + 8000f984: fe843783 ld a5,-24(s0) + 8000f988: 0807b783 ld a5,128(a5) + 8000f98c: 0087b783 ld a5,8(a5) + 8000f990: 00000613 li a2,0 + 8000f994: 00400593 li a1,4 + 8000f998: fe843503 ld a0,-24(s0) + 8000f99c: 000780e7 jalr a5 + 8000f9a0: fb843783 ld a5,-72(s0) + 8000f9a4: 02c7d783 lhu a5,44(a5) + 8000f9a8: fef7f793 andi a5,a5,-17 + 8000f9ac: 03079713 slli a4,a5,0x30 + 8000f9b0: 03075713 srli a4,a4,0x30 + 8000f9b4: fb843783 ld a5,-72(s0) + 8000f9b8: 02e79623 sh a4,44(a5) + 8000f9bc: 00000793 li a5,0 + 8000f9c0: 00078513 mv a0,a5 + 8000f9c4: 04813083 ld ra,72(sp) + 8000f9c8: 04013403 ld s0,64(sp) + 8000f9cc: 05010113 addi sp,sp,80 + 8000f9d0: 00008067 ret + +000000008000f9d4 : + 8000f9d4: fc010113 addi sp,sp,-64 + 8000f9d8: 02113c23 sd ra,56(sp) + 8000f9dc: 02813823 sd s0,48(sp) + 8000f9e0: 04010413 addi s0,sp,64 + 8000f9e4: fca43c23 sd a0,-40(s0) + 8000f9e8: fcb43823 sd a1,-48(s0) + 8000f9ec: fcc43423 sd a2,-56(s0) + 8000f9f0: fcd43023 sd a3,-64(s0) + 8000f9f4: fd843783 ld a5,-40(s0) + 8000f9f8: 00079e63 bnez a5,8000fa14 + 8000f9fc: 34700613 li a2,839 + 8000fa00: 0000a597 auipc a1,0xa + 8000fa04: 84858593 addi a1,a1,-1976 # 80019248 <__FUNCTION__.3143> + 8000fa08: 00008517 auipc a0,0x8 + 8000fa0c: 12050513 addi a0,a0,288 # 80017b28 + 8000fa10: a6df80ef jal ra,8000847c + 8000fa14: fc043783 ld a5,-64(s0) + 8000fa18: 00079663 bnez a5,8000fa24 + 8000fa1c: 00000793 li a5,0 + 8000fa20: 0980006f j 8000fab8 + 8000fa24: fd843783 ld a5,-40(s0) + 8000fa28: fef43423 sd a5,-24(s0) + 8000fa2c: fd843783 ld a5,-40(s0) + 8000fa30: 02e7d783 lhu a5,46(a5) + 8000fa34: 0007879b sext.w a5,a5 + 8000fa38: 1007f793 andi a5,a5,256 + 8000fa3c: 0007879b sext.w a5,a5 + 8000fa40: 02078263 beqz a5,8000fa64 + 8000fa44: fc043783 ld a5,-64(s0) + 8000fa48: 0007879b sext.w a5,a5 + 8000fa4c: 00078613 mv a2,a5 + 8000fa50: fc843583 ld a1,-56(s0) + 8000fa54: fe843503 ld a0,-24(s0) + 8000fa58: bb1fe0ef jal ra,8000e608 <_serial_int_rx> + 8000fa5c: 00050793 mv a5,a0 + 8000fa60: 0580006f j 8000fab8 + 8000fa64: fd843783 ld a5,-40(s0) + 8000fa68: 02e7d783 lhu a5,46(a5) + 8000fa6c: 0007879b sext.w a5,a5 + 8000fa70: 2007f793 andi a5,a5,512 + 8000fa74: 0007879b sext.w a5,a5 + 8000fa78: 02078263 beqz a5,8000fa9c + 8000fa7c: fc043783 ld a5,-64(s0) + 8000fa80: 0007879b sext.w a5,a5 + 8000fa84: 00078613 mv a2,a5 + 8000fa88: fc843583 ld a1,-56(s0) + 8000fa8c: fe843503 ld a0,-24(s0) + 8000fa90: 90cff0ef jal ra,8000eb9c <_serial_dma_rx> + 8000fa94: 00050793 mv a5,a0 + 8000fa98: 0200006f j 8000fab8 + 8000fa9c: fc043783 ld a5,-64(s0) + 8000faa0: 0007879b sext.w a5,a5 + 8000faa4: 00078613 mv a2,a5 + 8000faa8: fc843583 ld a1,-56(s0) + 8000faac: fe843503 ld a0,-24(s0) + 8000fab0: 959fe0ef jal ra,8000e408 <_serial_poll_rx> + 8000fab4: 00050793 mv a5,a0 + 8000fab8: 00078513 mv a0,a5 + 8000fabc: 03813083 ld ra,56(sp) + 8000fac0: 03013403 ld s0,48(sp) + 8000fac4: 04010113 addi sp,sp,64 + 8000fac8: 00008067 ret + +000000008000facc : + 8000facc: fc010113 addi sp,sp,-64 + 8000fad0: 02113c23 sd ra,56(sp) + 8000fad4: 02813823 sd s0,48(sp) + 8000fad8: 04010413 addi s0,sp,64 + 8000fadc: fca43c23 sd a0,-40(s0) + 8000fae0: fcb43823 sd a1,-48(s0) + 8000fae4: fcc43423 sd a2,-56(s0) + 8000fae8: fcd43023 sd a3,-64(s0) + 8000faec: fd843783 ld a5,-40(s0) + 8000faf0: 00079e63 bnez a5,8000fb0c + 8000faf4: 36100613 li a2,865 + 8000faf8: 00009597 auipc a1,0x9 + 8000fafc: 79058593 addi a1,a1,1936 # 80019288 <__FUNCTION__.3151> + 8000fb00: 00008517 auipc a0,0x8 + 8000fb04: 02850513 addi a0,a0,40 # 80017b28 + 8000fb08: 975f80ef jal ra,8000847c + 8000fb0c: fc043783 ld a5,-64(s0) + 8000fb10: 00079663 bnez a5,8000fb1c + 8000fb14: 00000793 li a5,0 + 8000fb18: 0a00006f j 8000fbb8 + 8000fb1c: fd843783 ld a5,-40(s0) + 8000fb20: fef43423 sd a5,-24(s0) + 8000fb24: fd843783 ld a5,-40(s0) + 8000fb28: 02e7d783 lhu a5,46(a5) + 8000fb2c: 0007879b sext.w a5,a5 + 8000fb30: 4007f793 andi a5,a5,1024 + 8000fb34: 0007879b sext.w a5,a5 + 8000fb38: 02078263 beqz a5,8000fb5c + 8000fb3c: fc043783 ld a5,-64(s0) + 8000fb40: 0007879b sext.w a5,a5 + 8000fb44: 00078613 mv a2,a5 + 8000fb48: fc843583 ld a1,-56(s0) + 8000fb4c: fe843503 ld a0,-24(s0) + 8000fb50: c55fe0ef jal ra,8000e7a4 <_serial_int_tx> + 8000fb54: 00050793 mv a5,a0 + 8000fb58: 0600006f j 8000fbb8 + 8000fb5c: fd843783 ld a5,-40(s0) + 8000fb60: 02e7d783 lhu a5,46(a5) + 8000fb64: 0007871b sext.w a4,a5 + 8000fb68: 000017b7 lui a5,0x1 + 8000fb6c: 80078793 addi a5,a5,-2048 # 800 <__STACKSIZE__-0x3800> + 8000fb70: 00f777b3 and a5,a4,a5 + 8000fb74: 0007879b sext.w a5,a5 + 8000fb78: 02078263 beqz a5,8000fb9c + 8000fb7c: fc043783 ld a5,-64(s0) + 8000fb80: 0007879b sext.w a5,a5 + 8000fb84: 00078613 mv a2,a5 + 8000fb88: fc843583 ld a1,-56(s0) + 8000fb8c: fe843503 ld a0,-24(s0) + 8000fb90: b08ff0ef jal ra,8000ee98 <_serial_dma_tx> + 8000fb94: 00050793 mv a5,a0 + 8000fb98: 0200006f j 8000fbb8 + 8000fb9c: fc043783 ld a5,-64(s0) + 8000fba0: 0007879b sext.w a5,a5 + 8000fba4: 00078613 mv a2,a5 + 8000fba8: fc843583 ld a1,-56(s0) + 8000fbac: fe843503 ld a0,-24(s0) + 8000fbb0: 961fe0ef jal ra,8000e510 <_serial_poll_tx> + 8000fbb4: 00050793 mv a5,a0 + 8000fbb8: 00078513 mv a0,a5 + 8000fbbc: 03813083 ld ra,56(sp) + 8000fbc0: 03013403 ld s0,48(sp) + 8000fbc4: 04010113 addi sp,sp,64 + 8000fbc8: 00008067 ret + +000000008000fbcc : + 8000fbcc: fb010113 addi sp,sp,-80 + 8000fbd0: 04113423 sd ra,72(sp) + 8000fbd4: 04813023 sd s0,64(sp) + 8000fbd8: 05010413 addi s0,sp,80 + 8000fbdc: fca43423 sd a0,-56(s0) + 8000fbe0: 00058793 mv a5,a1 + 8000fbe4: fac43c23 sd a2,-72(s0) + 8000fbe8: fcf42223 sw a5,-60(s0) + 8000fbec: fe043423 sd zero,-24(s0) + 8000fbf0: fc843783 ld a5,-56(s0) + 8000fbf4: 00079e63 bnez a5,8000fc10 + 8000fbf8: 3dc00613 li a2,988 + 8000fbfc: 00009597 auipc a1,0x9 + 8000fc00: 6bc58593 addi a1,a1,1724 # 800192b8 <__FUNCTION__.3159> + 8000fc04: 00008517 auipc a0,0x8 + 8000fc08: f2450513 addi a0,a0,-220 # 80017b28 + 8000fc0c: 871f80ef jal ra,8000847c + 8000fc10: fc843783 ld a5,-56(s0) + 8000fc14: fef43023 sd a5,-32(s0) + 8000fc18: fc442783 lw a5,-60(s0) + 8000fc1c: 0007871b sext.w a4,a5 + 8000fc20: 00300793 li a5,3 + 8000fc24: 06f70a63 beq a4,a5,8000fc98 + 8000fc28: fc442783 lw a5,-60(s0) + 8000fc2c: 0007871b sext.w a4,a5 + 8000fc30: 00300793 li a5,3 + 8000fc34: 10e7c263 blt a5,a4,8000fd38 + 8000fc38: fc442783 lw a5,-60(s0) + 8000fc3c: 0007871b sext.w a4,a5 + 8000fc40: 00100793 li a5,1 + 8000fc44: 02f70a63 beq a4,a5,8000fc78 + 8000fc48: fc442783 lw a5,-60(s0) + 8000fc4c: 0007871b sext.w a4,a5 + 8000fc50: 00200793 li a5,2 + 8000fc54: 0ef71263 bne a4,a5,8000fd38 + 8000fc58: fc843783 ld a5,-56(s0) + 8000fc5c: 02c7d783 lhu a5,44(a5) + 8000fc60: 0207e793 ori a5,a5,32 + 8000fc64: 03079713 slli a4,a5,0x30 + 8000fc68: 03075713 srli a4,a4,0x30 + 8000fc6c: fc843783 ld a5,-56(s0) + 8000fc70: 02e79623 sh a4,44(a5) + 8000fc74: 0f00006f j 8000fd64 + 8000fc78: fc843783 ld a5,-56(s0) + 8000fc7c: 02c7d783 lhu a5,44(a5) + 8000fc80: fdf7f793 andi a5,a5,-33 + 8000fc84: 03079713 slli a4,a5,0x30 + 8000fc88: 03075713 srli a4,a4,0x30 + 8000fc8c: fc843783 ld a5,-56(s0) + 8000fc90: 02e79623 sh a4,44(a5) + 8000fc94: 0d00006f j 8000fd64 + 8000fc98: fb843783 ld a5,-72(s0) + 8000fc9c: 0c078263 beqz a5,8000fd60 + 8000fca0: fb843783 ld a5,-72(s0) + 8000fca4: fcf43c23 sd a5,-40(s0) + 8000fca8: fd843783 ld a5,-40(s0) + 8000fcac: 0047a783 lw a5,4(a5) + 8000fcb0: 00a7d79b srliw a5,a5,0xa + 8000fcb4: fff7f793 andi a5,a5,-1 + 8000fcb8: 03079713 slli a4,a5,0x30 + 8000fcbc: 03075713 srli a4,a4,0x30 + 8000fcc0: fe043783 ld a5,-32(s0) + 8000fcc4: 0887b783 ld a5,136(a5) + 8000fcc8: 02a7d793 srli a5,a5,0x2a + 8000fccc: fff7f793 andi a5,a5,-1 + 8000fcd0: 03079793 slli a5,a5,0x30 + 8000fcd4: 0307d793 srli a5,a5,0x30 + 8000fcd8: 0007071b sext.w a4,a4 + 8000fcdc: 0007879b sext.w a5,a5 + 8000fce0: 00f70c63 beq a4,a5,8000fcf8 + 8000fce4: fe043783 ld a5,-32(s0) + 8000fce8: 0307c783 lbu a5,48(a5) + 8000fcec: 00078663 beqz a5,8000fcf8 + 8000fcf0: 00700793 li a5,7 + 8000fcf4: 0740006f j 8000fd68 + 8000fcf8: fe043783 ld a5,-32(s0) + 8000fcfc: fd843703 ld a4,-40(s0) + 8000fd00: 00072683 lw a3,0(a4) + 8000fd04: 08d7a423 sw a3,136(a5) + 8000fd08: 00472703 lw a4,4(a4) + 8000fd0c: 08e7a623 sw a4,140(a5) + 8000fd10: fe043783 ld a5,-32(s0) + 8000fd14: 0307c783 lbu a5,48(a5) + 8000fd18: 04078463 beqz a5,8000fd60 + 8000fd1c: fe043783 ld a5,-32(s0) + 8000fd20: 0807b783 ld a5,128(a5) + 8000fd24: 0007b783 ld a5,0(a5) + 8000fd28: fb843583 ld a1,-72(s0) + 8000fd2c: fe043503 ld a0,-32(s0) + 8000fd30: 000780e7 jalr a5 + 8000fd34: 02c0006f j 8000fd60 + 8000fd38: fe043783 ld a5,-32(s0) + 8000fd3c: 0807b783 ld a5,128(a5) + 8000fd40: 0087b703 ld a4,8(a5) + 8000fd44: fc442783 lw a5,-60(s0) + 8000fd48: fb843603 ld a2,-72(s0) + 8000fd4c: 00078593 mv a1,a5 + 8000fd50: fe043503 ld a0,-32(s0) + 8000fd54: 000700e7 jalr a4 + 8000fd58: fea43423 sd a0,-24(s0) + 8000fd5c: 0080006f j 8000fd64 + 8000fd60: 00000013 nop + 8000fd64: fe843783 ld a5,-24(s0) + 8000fd68: 00078513 mv a0,a5 + 8000fd6c: 04813083 ld ra,72(sp) + 8000fd70: 04013403 ld s0,64(sp) + 8000fd74: 05010113 addi sp,sp,80 + 8000fd78: 00008067 ret + +000000008000fd7c : + 8000fd7c: fc010113 addi sp,sp,-64 + 8000fd80: 02113c23 sd ra,56(sp) + 8000fd84: 02813823 sd s0,48(sp) + 8000fd88: 04010413 addi s0,sp,64 + 8000fd8c: fca43c23 sd a0,-40(s0) + 8000fd90: fcb43823 sd a1,-48(s0) + 8000fd94: 00060793 mv a5,a2 + 8000fd98: fcd43023 sd a3,-64(s0) + 8000fd9c: fcf42623 sw a5,-52(s0) + 8000fda0: fd843783 ld a5,-40(s0) + 8000fda4: 00079e63 bnez a5,8000fdc0 + 8000fda8: 49b00613 li a2,1179 + 8000fdac: 00009597 auipc a1,0x9 + 8000fdb0: 52458593 addi a1,a1,1316 # 800192d0 <__FUNCTION__.3174> + 8000fdb4: 00008517 auipc a0,0x8 + 8000fdb8: c1c50513 addi a0,a0,-996 # 800179d0 + 8000fdbc: ec0f80ef jal ra,8000847c + 8000fdc0: fd843783 ld a5,-40(s0) + 8000fdc4: fef43423 sd a5,-24(s0) + 8000fdc8: fe843783 ld a5,-24(s0) + 8000fdcc: 0207a423 sw zero,40(a5) + 8000fdd0: fe843783 ld a5,-24(s0) + 8000fdd4: 0207bc23 sd zero,56(a5) + 8000fdd8: fe843783 ld a5,-24(s0) + 8000fddc: 0407b023 sd zero,64(a5) + 8000fde0: fe843783 ld a5,-24(s0) + 8000fde4: fffff717 auipc a4,0xfffff + 8000fde8: 19470713 addi a4,a4,404 # 8000ef78 + 8000fdec: 04e7b423 sd a4,72(a5) + 8000fdf0: fe843783 ld a5,-24(s0) + 8000fdf4: fffff717 auipc a4,0xfffff + 8000fdf8: 22070713 addi a4,a4,544 # 8000f014 + 8000fdfc: 04e7b823 sd a4,80(a5) + 8000fe00: fe843783 ld a5,-24(s0) + 8000fe04: 00000717 auipc a4,0x0 + 8000fe08: 87470713 addi a4,a4,-1932 # 8000f678 + 8000fe0c: 04e7bc23 sd a4,88(a5) + 8000fe10: fe843783 ld a5,-24(s0) + 8000fe14: 00000717 auipc a4,0x0 + 8000fe18: bc070713 addi a4,a4,-1088 # 8000f9d4 + 8000fe1c: 06e7b023 sd a4,96(a5) + 8000fe20: fe843783 ld a5,-24(s0) + 8000fe24: 00000717 auipc a4,0x0 + 8000fe28: ca870713 addi a4,a4,-856 # 8000facc + 8000fe2c: 06e7b423 sd a4,104(a5) + 8000fe30: fe843783 ld a5,-24(s0) + 8000fe34: 00000717 auipc a4,0x0 + 8000fe38: d9870713 addi a4,a4,-616 # 8000fbcc + 8000fe3c: 06e7b823 sd a4,112(a5) + 8000fe40: fe843783 ld a5,-24(s0) + 8000fe44: fc043703 ld a4,-64(s0) + 8000fe48: 06e7bc23 sd a4,120(a5) + 8000fe4c: fcc42783 lw a5,-52(s0) + 8000fe50: 03079793 slli a5,a5,0x30 + 8000fe54: 0307d793 srli a5,a5,0x30 + 8000fe58: 00078613 mv a2,a5 + 8000fe5c: fd043583 ld a1,-48(s0) + 8000fe60: fe843503 ld a0,-24(s0) + 8000fe64: b89f20ef jal ra,800029ec + 8000fe68: fea43023 sd a0,-32(s0) + 8000fe6c: fe043783 ld a5,-32(s0) + 8000fe70: 00078513 mv a0,a5 + 8000fe74: 03813083 ld ra,56(sp) + 8000fe78: 03013403 ld s0,48(sp) + 8000fe7c: 04010113 addi sp,sp,64 + 8000fe80: 00008067 ret + +000000008000fe84 : + 8000fe84: fe010113 addi sp,sp,-32 + 8000fe88: 00813c23 sd s0,24(sp) + 8000fe8c: 02010413 addi s0,sp,32 + 8000fe90: fea43423 sd a0,-24(s0) + 8000fe94: fe843783 ld a5,-24(s0) + 8000fe98: fe843703 ld a4,-24(s0) + 8000fe9c: 00e7b423 sd a4,8(a5) + 8000fea0: fe843783 ld a5,-24(s0) + 8000fea4: 0087b703 ld a4,8(a5) + 8000fea8: fe843783 ld a5,-24(s0) + 8000feac: 00e7b023 sd a4,0(a5) + 8000feb0: 00000013 nop + 8000feb4: 01813403 ld s0,24(sp) + 8000feb8: 02010113 addi sp,sp,32 + 8000febc: 00008067 ret + +000000008000fec0 : + 8000fec0: fe010113 addi sp,sp,-32 + 8000fec4: 00813c23 sd s0,24(sp) + 8000fec8: 02010413 addi s0,sp,32 + 8000fecc: fea43423 sd a0,-24(s0) + 8000fed0: feb43023 sd a1,-32(s0) + 8000fed4: fe843783 ld a5,-24(s0) + 8000fed8: 0087b783 ld a5,8(a5) + 8000fedc: fe043703 ld a4,-32(s0) + 8000fee0: 00e7b023 sd a4,0(a5) + 8000fee4: fe843783 ld a5,-24(s0) + 8000fee8: 0087b703 ld a4,8(a5) + 8000feec: fe043783 ld a5,-32(s0) + 8000fef0: 00e7b423 sd a4,8(a5) + 8000fef4: fe843783 ld a5,-24(s0) + 8000fef8: fe043703 ld a4,-32(s0) + 8000fefc: 00e7b423 sd a4,8(a5) + 8000ff00: fe043783 ld a5,-32(s0) + 8000ff04: fe843703 ld a4,-24(s0) + 8000ff08: 00e7b023 sd a4,0(a5) + 8000ff0c: 00000013 nop + 8000ff10: 01813403 ld s0,24(sp) + 8000ff14: 02010113 addi sp,sp,32 + 8000ff18: 00008067 ret + +000000008000ff1c : + 8000ff1c: fe010113 addi sp,sp,-32 + 8000ff20: 00813c23 sd s0,24(sp) + 8000ff24: 02010413 addi s0,sp,32 + 8000ff28: fea43423 sd a0,-24(s0) + 8000ff2c: fe843783 ld a5,-24(s0) + 8000ff30: 0007b783 ld a5,0(a5) + 8000ff34: fe843703 ld a4,-24(s0) + 8000ff38: 40f707b3 sub a5,a4,a5 + 8000ff3c: 0017b793 seqz a5,a5 + 8000ff40: 0ff7f793 andi a5,a5,255 + 8000ff44: 0007879b sext.w a5,a5 + 8000ff48: 00078513 mv a0,a5 + 8000ff4c: 01813403 ld s0,24(sp) + 8000ff50: 02010113 addi sp,sp,32 + 8000ff54: 00008067 ret + +000000008000ff58 : + 8000ff58: fd010113 addi sp,sp,-48 + 8000ff5c: 02113423 sd ra,40(sp) + 8000ff60: 02813023 sd s0,32(sp) + 8000ff64: 03010413 addi s0,sp,48 + 8000ff68: fea43423 sd a0,-24(s0) + 8000ff6c: 00058793 mv a5,a1 + 8000ff70: 00060713 mv a4,a2 + 8000ff74: fcd43c23 sd a3,-40(s0) + 8000ff78: fef41323 sh a5,-26(s0) + 8000ff7c: 00070793 mv a5,a4 + 8000ff80: fef41223 sh a5,-28(s0) + 8000ff84: fe843783 ld a5,-24(s0) + 8000ff88: 00079e63 bnez a5,8000ffa4 + 8000ff8c: 01e00613 li a2,30 + 8000ff90: 00009597 auipc a1,0x9 + 8000ff94: 35858593 addi a1,a1,856 # 800192e8 <__FUNCTION__.3029> + 8000ff98: 00008517 auipc a0,0x8 + 8000ff9c: bf850513 addi a0,a0,-1032 # 80017b90 + 8000ffa0: cdcf80ef jal ra,8000847c + 8000ffa4: fe645783 lhu a5,-26(s0) + 8000ffa8: 0007879b sext.w a5,a5 + 8000ffac: 00079e63 bnez a5,8000ffc8 + 8000ffb0: 01f00613 li a2,31 + 8000ffb4: 00009597 auipc a1,0x9 + 8000ffb8: 33458593 addi a1,a1,820 # 800192e8 <__FUNCTION__.3029> + 8000ffbc: 00008517 auipc a0,0x8 + 8000ffc0: bec50513 addi a0,a0,-1044 # 80017ba8 + 8000ffc4: cb8f80ef jal ra,8000847c + 8000ffc8: fe843783 ld a5,-24(s0) + 8000ffcc: fd843703 ld a4,-40(s0) + 8000ffd0: 02e7bc23 sd a4,56(a5) + 8000ffd4: fe843783 ld a5,-24(s0) + 8000ffd8: bead1737 lui a4,0xbead1 + 8000ffdc: e0e7071b addiw a4,a4,-498 + 8000ffe0: 00e7a023 sw a4,0(a5) + 8000ffe4: fe843783 ld a5,-24(s0) + 8000ffe8: fe645703 lhu a4,-26(s0) + 8000ffec: 00e79223 sh a4,4(a5) + 8000fff0: fe843783 ld a5,-24(s0) + 8000fff4: fe445703 lhu a4,-28(s0) + 8000fff8: 00e79323 sh a4,6(a5) + 8000fffc: fe843783 ld a5,-24(s0) + 80010000: 0087a683 lw a3,8(a5) + 80010004: ffff8737 lui a4,0xffff8 + 80010008: 00e6f733 and a4,a3,a4 + 8001000c: 00e7a423 sw a4,8(a5) + 80010010: fe843783 ld a5,-24(s0) + 80010014: 0087a683 lw a3,8(a5) + 80010018: 80010737 lui a4,0x80010 + 8001001c: fff70713 addi a4,a4,-1 # ffffffff8000ffff <__bss_end+0xfffffffefffe4d7b> + 80010020: 00e6f733 and a4,a3,a4 + 80010024: 00e7a423 sw a4,8(a5) + 80010028: fe843783 ld a5,-24(s0) + 8001002c: 0087a683 lw a3,8(a5) + 80010030: 00008737 lui a4,0x8 + 80010034: 00e6e733 or a4,a3,a4 + 80010038: 00e7a423 sw a4,8(a5) + 8001003c: fe843783 ld a5,-24(s0) + 80010040: 0087a683 lw a3,8(a5) + 80010044: 80000737 lui a4,0x80000 + 80010048: fff74713 not a4,a4 + 8001004c: 00e6f733 and a4,a3,a4 + 80010050: 00e7a423 sw a4,8(a5) + 80010054: fe843783 ld a5,-24(s0) + 80010058: 01878793 addi a5,a5,24 + 8001005c: 00078513 mv a0,a5 + 80010060: e25ff0ef jal ra,8000fe84 + 80010064: fe843783 ld a5,-24(s0) + 80010068: 02878793 addi a5,a5,40 + 8001006c: 00078513 mv a0,a5 + 80010070: e15ff0ef jal ra,8000fe84 + 80010074: fe645783 lhu a5,-26(s0) + 80010078: 00479793 slli a5,a5,0x4 + 8001007c: 00078513 mv a0,a5 + 80010080: da8f40ef jal ra,80004628 + 80010084: 00050713 mv a4,a0 + 80010088: fe843783 ld a5,-24(s0) + 8001008c: 00e7b823 sd a4,16(a5) + 80010090: fe843783 ld a5,-24(s0) + 80010094: 0107b783 ld a5,16(a5) + 80010098: 00079663 bnez a5,800100a4 + 8001009c: ffb00793 li a5,-5 + 800100a0: 0080006f j 800100a8 + 800100a4: 00000793 li a5,0 + 800100a8: 00078513 mv a0,a5 + 800100ac: 02813083 ld ra,40(sp) + 800100b0: 02013403 ld s0,32(sp) + 800100b4: 03010113 addi sp,sp,48 + 800100b8: 00008067 ret + +00000000800100bc : + 800100bc: fb010113 addi sp,sp,-80 + 800100c0: 04113423 sd ra,72(sp) + 800100c4: 04813023 sd s0,64(sp) + 800100c8: 05010413 addi s0,sp,80 + 800100cc: fca43423 sd a0,-56(s0) + 800100d0: fcb43023 sd a1,-64(s0) + 800100d4: fac43c23 sd a2,-72(s0) + 800100d8: 00068793 mv a5,a3 + 800100dc: faf42a23 sw a5,-76(s0) + 800100e0: fc843783 ld a5,-56(s0) + 800100e4: 00079e63 bnez a5,80010100 + 800100e8: 04200613 li a2,66 + 800100ec: 00009597 auipc a1,0x9 + 800100f0: 21458593 addi a1,a1,532 # 80019300 <__FUNCTION__.3039> + 800100f4: 00008517 auipc a0,0x8 + 800100f8: a9c50513 addi a0,a0,-1380 # 80017b90 + 800100fc: b80f80ef jal ra,8000847c + 80010100: fc843783 ld a5,-56(s0) + 80010104: 0007a783 lw a5,0(a5) + 80010108: 00078713 mv a4,a5 + 8001010c: bead17b7 lui a5,0xbead1 + 80010110: e0e78793 addi a5,a5,-498 # ffffffffbead0e0e <__bss_end+0xffffffff3eaa5b8a> + 80010114: 00f70e63 beq a4,a5,80010130 + 80010118: 04300613 li a2,67 + 8001011c: 00009597 auipc a1,0x9 + 80010120: 1e458593 addi a1,a1,484 # 80019300 <__FUNCTION__.3039> + 80010124: 00008517 auipc a0,0x8 + 80010128: a9450513 addi a0,a0,-1388 # 80017bb8 + 8001012c: b50f80ef jal ra,8000847c + 80010130: fe043023 sd zero,-32(s0) + 80010134: 899f50ef jal ra,800059cc + 80010138: fca43c23 sd a0,-40(s0) + 8001013c: 838f00ef jal ra,80000174 + 80010140: 00050793 mv a5,a0 + 80010144: fef43423 sd a5,-24(s0) + 80010148: 0f00006f j 80010238 + 8001014c: fb442783 lw a5,-76(s0) + 80010150: 00079863 bnez a5,80010160 + 80010154: ffe00793 li a5,-2 + 80010158: fef43023 sd a5,-32(s0) + 8001015c: 3080006f j 80010464 + 80010160: 814f00ef jal ra,80000174 + 80010164: fca43823 sd a0,-48(s0) + 80010168: c6cf60ef jal ra,800065d4 + 8001016c: 00050793 mv a5,a0 + 80010170: 02078863 beqz a5,800101a0 + 80010174: 00009597 auipc a1,0x9 + 80010178: 18c58593 addi a1,a1,396 # 80019300 <__FUNCTION__.3039> + 8001017c: 00008517 auipc a0,0x8 + 80010180: a5c50513 addi a0,a0,-1444 # 80017bd8 + 80010184: 898f80ef jal ra,8000821c + 80010188: 05400613 li a2,84 + 8001018c: 00009597 auipc a1,0x9 + 80010190: 17458593 addi a1,a1,372 # 80019300 <__FUNCTION__.3039> + 80010194: 00008517 auipc a0,0x8 + 80010198: a6c50513 addi a0,a0,-1428 # 80017c00 + 8001019c: ae0f80ef jal ra,8000847c + 800101a0: fd043503 ld a0,-48(s0) + 800101a4: fd9ef0ef jal ra,8000017c + 800101a8: fd843783 ld a5,-40(s0) + 800101ac: 0607b023 sd zero,96(a5) + 800101b0: fd843503 ld a0,-40(s0) + 800101b4: fd1f50ef jal ra,80006184 + 800101b8: fc843783 ld a5,-56(s0) + 800101bc: 01878713 addi a4,a5,24 + 800101c0: fd843783 ld a5,-40(s0) + 800101c4: 02878793 addi a5,a5,40 + 800101c8: 00078593 mv a1,a5 + 800101cc: 00070513 mv a0,a4 + 800101d0: cf1ff0ef jal ra,8000fec0 + 800101d4: fb442783 lw a5,-76(s0) + 800101d8: 02f05863 blez a5,80010208 + 800101dc: fd843783 ld a5,-40(s0) + 800101e0: 08878793 addi a5,a5,136 + 800101e4: fb440713 addi a4,s0,-76 + 800101e8: 00070613 mv a2,a4 + 800101ec: 00000593 li a1,0 + 800101f0: 00078513 mv a0,a5 + 800101f4: 865f30ef jal ra,80003a58 + 800101f8: fd843783 ld a5,-40(s0) + 800101fc: 08878793 addi a5,a5,136 + 80010200: 00078513 mv a0,a5 + 80010204: b30f30ef jal ra,80003534 + 80010208: fe843783 ld a5,-24(s0) + 8001020c: 00078513 mv a0,a5 + 80010210: f6def0ef jal ra,8000017c + 80010214: 9e4f20ef jal ra,800023f8 + 80010218: fd843783 ld a5,-40(s0) + 8001021c: 0607b783 ld a5,96(a5) + 80010220: fef43023 sd a5,-32(s0) + 80010224: f51ef0ef jal ra,80000174 + 80010228: 00050793 mv a5,a0 + 8001022c: fef43423 sd a5,-24(s0) + 80010230: fe043783 ld a5,-32(s0) + 80010234: 22079263 bnez a5,80010458 + 80010238: fc843783 ld a5,-56(s0) + 8001023c: 0087a783 lw a5,8(a5) + 80010240: 00078713 mv a4,a5 + 80010244: 800007b7 lui a5,0x80000 + 80010248: 00f777b3 and a5,a4,a5 + 8001024c: 0007879b sext.w a5,a5 + 80010250: ee079ee3 bnez a5,8001014c + 80010254: fc843783 ld a5,-56(s0) + 80010258: 0107b703 ld a4,16(a5) # ffffffff80000010 <__bss_end+0xfffffffefffd4d8c> + 8001025c: fc843783 ld a5,-56(s0) + 80010260: 0087b783 ld a5,8(a5) + 80010264: 0107d793 srli a5,a5,0x10 + 80010268: 00078693 mv a3,a5 + 8001026c: 000087b7 lui a5,0x8 + 80010270: fff78793 addi a5,a5,-1 # 7fff <__STACKSIZE__+0x3fff> + 80010274: 00f6f7b3 and a5,a3,a5 + 80010278: 03079793 slli a5,a5,0x30 + 8001027c: 0307d793 srli a5,a5,0x30 + 80010280: 00479793 slli a5,a5,0x4 + 80010284: 00f707b3 add a5,a4,a5 + 80010288: fc043703 ld a4,-64(s0) + 8001028c: 00e7b023 sd a4,0(a5) + 80010290: fc843783 ld a5,-56(s0) + 80010294: 0107b703 ld a4,16(a5) + 80010298: fc843783 ld a5,-56(s0) + 8001029c: 0087b783 ld a5,8(a5) + 800102a0: 0107d793 srli a5,a5,0x10 + 800102a4: 00078693 mv a3,a5 + 800102a8: 000087b7 lui a5,0x8 + 800102ac: fff78793 addi a5,a5,-1 # 7fff <__STACKSIZE__+0x3fff> + 800102b0: 00f6f7b3 and a5,a3,a5 + 800102b4: 03079793 slli a5,a5,0x30 + 800102b8: 0307d793 srli a5,a5,0x30 + 800102bc: 00479793 slli a5,a5,0x4 + 800102c0: 00f707b3 add a5,a4,a5 + 800102c4: fb843703 ld a4,-72(s0) + 800102c8: 00e7b423 sd a4,8(a5) + 800102cc: fc843783 ld a5,-56(s0) + 800102d0: 0087b783 ld a5,8(a5) + 800102d4: 0107d793 srli a5,a5,0x10 + 800102d8: 00078713 mv a4,a5 + 800102dc: 000087b7 lui a5,0x8 + 800102e0: fff78793 addi a5,a5,-1 # 7fff <__STACKSIZE__+0x3fff> + 800102e4: 00f777b3 and a5,a4,a5 + 800102e8: 03079793 slli a5,a5,0x30 + 800102ec: 0307d793 srli a5,a5,0x30 + 800102f0: 0017879b addiw a5,a5,1 + 800102f4: 03079793 slli a5,a5,0x30 + 800102f8: 0307d793 srli a5,a5,0x30 + 800102fc: 00078713 mv a4,a5 + 80010300: 000087b7 lui a5,0x8 + 80010304: fff78793 addi a5,a5,-1 # 7fff <__STACKSIZE__+0x3fff> + 80010308: 00f777b3 and a5,a4,a5 + 8001030c: 03079713 slli a4,a5,0x30 + 80010310: 03075713 srli a4,a4,0x30 + 80010314: fc843783 ld a5,-56(s0) + 80010318: 00070693 mv a3,a4 + 8001031c: 00008737 lui a4,0x8 + 80010320: fff70713 addi a4,a4,-1 # 7fff <__STACKSIZE__+0x3fff> + 80010324: 00e6f733 and a4,a3,a4 + 80010328: 0107171b slliw a4,a4,0x10 + 8001032c: 0087a603 lw a2,8(a5) + 80010330: 800106b7 lui a3,0x80010 + 80010334: fff68693 addi a3,a3,-1 # ffffffff8000ffff <__bss_end+0xfffffffefffe4d7b> + 80010338: 00d676b3 and a3,a2,a3 + 8001033c: 00e6e733 or a4,a3,a4 + 80010340: 00e7a423 sw a4,8(a5) + 80010344: fc843783 ld a5,-56(s0) + 80010348: 0087b783 ld a5,8(a5) + 8001034c: 0107d793 srli a5,a5,0x10 + 80010350: 00078713 mv a4,a5 + 80010354: 000087b7 lui a5,0x8 + 80010358: fff78793 addi a5,a5,-1 # 7fff <__STACKSIZE__+0x3fff> + 8001035c: 00f777b3 and a5,a4,a5 + 80010360: 03079793 slli a5,a5,0x30 + 80010364: 0307d793 srli a5,a5,0x30 + 80010368: 0007871b sext.w a4,a5 + 8001036c: fc843783 ld a5,-56(s0) + 80010370: 0047d783 lhu a5,4(a5) + 80010374: 0007879b sext.w a5,a5 + 80010378: 00f71e63 bne a4,a5,80010394 + 8001037c: fc843783 ld a5,-56(s0) + 80010380: 0087a683 lw a3,8(a5) + 80010384: 80010737 lui a4,0x80010 + 80010388: fff70713 addi a4,a4,-1 # ffffffff8000ffff <__bss_end+0xfffffffefffe4d7b> + 8001038c: 00e6f733 and a4,a3,a4 + 80010390: 00e7a423 sw a4,8(a5) + 80010394: fc843783 ld a5,-56(s0) + 80010398: 0087a683 lw a3,8(a5) + 8001039c: ffff8737 lui a4,0xffff8 + 800103a0: fff70713 addi a4,a4,-1 # ffffffffffff7fff <__bss_end+0xffffffff7ffccd7b> + 800103a4: 00e6f733 and a4,a3,a4 + 800103a8: 00e7a423 sw a4,8(a5) + 800103ac: fc843783 ld a5,-56(s0) + 800103b0: 0087b783 ld a5,8(a5) + 800103b4: 0107d793 srli a5,a5,0x10 + 800103b8: 00078713 mv a4,a5 + 800103bc: 000087b7 lui a5,0x8 + 800103c0: fff78793 addi a5,a5,-1 # 7fff <__STACKSIZE__+0x3fff> + 800103c4: 00f777b3 and a5,a4,a5 + 800103c8: 03079713 slli a4,a5,0x30 + 800103cc: 03075713 srli a4,a4,0x30 + 800103d0: fc843783 ld a5,-56(s0) + 800103d4: 0087b783 ld a5,8(a5) + 800103d8: 00078693 mv a3,a5 + 800103dc: 000087b7 lui a5,0x8 + 800103e0: fff78793 addi a5,a5,-1 # 7fff <__STACKSIZE__+0x3fff> + 800103e4: 00f6f7b3 and a5,a3,a5 + 800103e8: 03079793 slli a5,a5,0x30 + 800103ec: 0307d793 srli a5,a5,0x30 + 800103f0: 0007071b sext.w a4,a4 + 800103f4: 0007879b sext.w a5,a5 + 800103f8: 00f71c63 bne a4,a5,80010410 + 800103fc: fc843783 ld a5,-56(s0) + 80010400: 0087a683 lw a3,8(a5) + 80010404: 80000737 lui a4,0x80000 + 80010408: 00e6e733 or a4,a3,a4 + 8001040c: 00e7a423 sw a4,8(a5) + 80010410: fc843783 ld a5,-56(s0) + 80010414: 02878793 addi a5,a5,40 + 80010418: 00078513 mv a0,a5 + 8001041c: b01ff0ef jal ra,8000ff1c + 80010420: 00050793 mv a5,a0 + 80010424: 02079e63 bnez a5,80010460 + 80010428: fc843783 ld a5,-56(s0) + 8001042c: 0287b783 ld a5,40(a5) + 80010430: fd878793 addi a5,a5,-40 + 80010434: fcf43c23 sd a5,-40(s0) + 80010438: fd843503 ld a0,-40(s0) + 8001043c: ea9f50ef jal ra,800062e4 + 80010440: fe843783 ld a5,-24(s0) + 80010444: 00078513 mv a0,a5 + 80010448: d35ef0ef jal ra,8000017c + 8001044c: fadf10ef jal ra,800023f8 + 80010450: fe043783 ld a5,-32(s0) + 80010454: 0480006f j 8001049c + 80010458: 00000013 nop + 8001045c: 0080006f j 80010464 + 80010460: 00000013 nop + 80010464: fe843783 ld a5,-24(s0) + 80010468: 00078513 mv a0,a5 + 8001046c: d11ef0ef jal ra,8000017c + 80010470: fe043783 ld a5,-32(s0) + 80010474: 02079263 bnez a5,80010498 + 80010478: fc843783 ld a5,-56(s0) + 8001047c: 0387b783 ld a5,56(a5) + 80010480: 00078c63 beqz a5,80010498 + 80010484: fc843783 ld a5,-56(s0) + 80010488: 0387b783 ld a5,56(a5) + 8001048c: 00200593 li a1,2 + 80010490: fc843503 ld a0,-56(s0) + 80010494: 000780e7 jalr a5 + 80010498: fe043783 ld a5,-32(s0) + 8001049c: 00078513 mv a0,a5 + 800104a0: 04813083 ld ra,72(sp) + 800104a4: 04013403 ld s0,64(sp) + 800104a8: 05010113 addi sp,sp,80 + 800104ac: 00008067 ret + +00000000800104b0 : + 800104b0: fd010113 addi sp,sp,-48 + 800104b4: 02113423 sd ra,40(sp) + 800104b8: 02813023 sd s0,32(sp) + 800104bc: 03010413 addi s0,sp,48 + 800104c0: fca43c23 sd a0,-40(s0) + 800104c4: fd843783 ld a5,-40(s0) + 800104c8: 00079e63 bnez a5,800104e4 + 800104cc: 12900613 li a2,297 + 800104d0: 00009597 auipc a1,0x9 + 800104d4: e4858593 addi a1,a1,-440 # 80019318 <__FUNCTION__.3072> + 800104d8: 00007517 auipc a0,0x7 + 800104dc: 6b850513 addi a0,a0,1720 # 80017b90 + 800104e0: f9df70ef jal ra,8000847c + 800104e4: fd843783 ld a5,-40(s0) + 800104e8: 0007a783 lw a5,0(a5) + 800104ec: 00078713 mv a4,a5 + 800104f0: bead17b7 lui a5,0xbead1 + 800104f4: e0e78793 addi a5,a5,-498 # ffffffffbead0e0e <__bss_end+0xffffffff3eaa5b8a> + 800104f8: 00f70e63 beq a4,a5,80010514 + 800104fc: 12a00613 li a2,298 + 80010500: 00009597 auipc a1,0x9 + 80010504: e1858593 addi a1,a1,-488 # 80019318 <__FUNCTION__.3072> + 80010508: 00007517 auipc a0,0x7 + 8001050c: 6b050513 addi a0,a0,1712 # 80017bb8 + 80010510: f6df70ef jal ra,8000847c + 80010514: c61ef0ef jal ra,80000174 + 80010518: 00050793 mv a5,a0 + 8001051c: fef43423 sd a5,-24(s0) + 80010520: fd843783 ld a5,-40(s0) + 80010524: 0087a683 lw a3,8(a5) + 80010528: ffff8737 lui a4,0xffff8 + 8001052c: 00e6f733 and a4,a3,a4 + 80010530: 00e7a423 sw a4,8(a5) + 80010534: fd843783 ld a5,-40(s0) + 80010538: 0087a683 lw a3,8(a5) + 8001053c: 80010737 lui a4,0x80010 + 80010540: fff70713 addi a4,a4,-1 # ffffffff8000ffff <__bss_end+0xfffffffefffe4d7b> + 80010544: 00e6f733 and a4,a3,a4 + 80010548: 00e7a423 sw a4,8(a5) + 8001054c: fd843783 ld a5,-40(s0) + 80010550: 0087a683 lw a3,8(a5) + 80010554: 00008737 lui a4,0x8 + 80010558: 00e6e733 or a4,a3,a4 + 8001055c: 00e7a423 sw a4,8(a5) + 80010560: fd843783 ld a5,-40(s0) + 80010564: 0087a683 lw a3,8(a5) + 80010568: 80000737 lui a4,0x80000 + 8001056c: fff74713 not a4,a4 + 80010570: 00e6f733 and a4,a3,a4 + 80010574: 00e7a423 sw a4,8(a5) + 80010578: fe843783 ld a5,-24(s0) + 8001057c: 00078513 mv a0,a5 + 80010580: bfdef0ef jal ra,8000017c + 80010584: b58f20ef jal ra,800028dc + 80010588: 0400006f j 800105c8 + 8001058c: be9ef0ef jal ra,80000174 + 80010590: 00050793 mv a5,a0 + 80010594: fef43423 sd a5,-24(s0) + 80010598: fd843783 ld a5,-40(s0) + 8001059c: 0287b783 ld a5,40(a5) + 800105a0: fd878793 addi a5,a5,-40 + 800105a4: fef43023 sd a5,-32(s0) + 800105a8: fe043783 ld a5,-32(s0) + 800105ac: fff00713 li a4,-1 + 800105b0: 06e7b023 sd a4,96(a5) + 800105b4: fe043503 ld a0,-32(s0) + 800105b8: d2df50ef jal ra,800062e4 + 800105bc: fe843783 ld a5,-24(s0) + 800105c0: 00078513 mv a0,a5 + 800105c4: bb9ef0ef jal ra,8000017c + 800105c8: fd843783 ld a5,-40(s0) + 800105cc: 02878793 addi a5,a5,40 + 800105d0: 00078513 mv a0,a5 + 800105d4: 949ff0ef jal ra,8000ff1c + 800105d8: 00050793 mv a5,a0 + 800105dc: fa0788e3 beqz a5,8001058c + 800105e0: 0400006f j 80010620 + 800105e4: b91ef0ef jal ra,80000174 + 800105e8: 00050793 mv a5,a0 + 800105ec: fef43423 sd a5,-24(s0) + 800105f0: fd843783 ld a5,-40(s0) + 800105f4: 0187b783 ld a5,24(a5) + 800105f8: fd878793 addi a5,a5,-40 + 800105fc: fef43023 sd a5,-32(s0) + 80010600: fe043783 ld a5,-32(s0) + 80010604: fff00713 li a4,-1 + 80010608: 06e7b023 sd a4,96(a5) + 8001060c: fe043503 ld a0,-32(s0) + 80010610: cd5f50ef jal ra,800062e4 + 80010614: fe843783 ld a5,-24(s0) + 80010618: 00078513 mv a0,a5 + 8001061c: b61ef0ef jal ra,8000017c + 80010620: fd843783 ld a5,-40(s0) + 80010624: 01878793 addi a5,a5,24 + 80010628: 00078513 mv a0,a5 + 8001062c: 8f1ff0ef jal ra,8000ff1c + 80010630: 00050793 mv a5,a0 + 80010634: fa0788e3 beqz a5,800105e4 + 80010638: b0cf20ef jal ra,80002944 + 8001063c: dbdf10ef jal ra,800023f8 + 80010640: 00000013 nop + 80010644: 02813083 ld ra,40(sp) + 80010648: 02013403 ld s0,32(sp) + 8001064c: 03010113 addi sp,sp,48 + 80010650: 00008067 ret + +0000000080010654 : + 80010654: fd010113 addi sp,sp,-48 + 80010658: 02113423 sd ra,40(sp) + 8001065c: 02813023 sd s0,32(sp) + 80010660: 03010413 addi s0,sp,48 + 80010664: fca43c23 sd a0,-40(s0) + 80010668: fd843783 ld a5,-40(s0) + 8001066c: 00079e63 bnez a5,80010688 + 80010670: 17100613 li a2,369 + 80010674: 00009597 auipc a1,0x9 + 80010678: cbc58593 addi a1,a1,-836 # 80019330 <__FUNCTION__.3083> + 8001067c: 00007517 auipc a0,0x7 + 80010680: 51450513 addi a0,a0,1300 # 80017b90 + 80010684: df9f70ef jal ra,8000847c + 80010688: fd843783 ld a5,-40(s0) + 8001068c: 0007a783 lw a5,0(a5) + 80010690: 00078713 mv a4,a5 + 80010694: bead17b7 lui a5,0xbead1 + 80010698: e0e78793 addi a5,a5,-498 # ffffffffbead0e0e <__bss_end+0xffffffff3eaa5b8a> + 8001069c: 00f70e63 beq a4,a5,800106b8 + 800106a0: 17200613 li a2,370 + 800106a4: 00009597 auipc a1,0x9 + 800106a8: c8c58593 addi a1,a1,-884 # 80019330 <__FUNCTION__.3083> + 800106ac: 00007517 auipc a0,0x7 + 800106b0: 50c50513 addi a0,a0,1292 # 80017bb8 + 800106b4: dc9f70ef jal ra,8000847c + 800106b8: fd843503 ld a0,-40(s0) + 800106bc: df5ff0ef jal ra,800104b0 + 800106c0: ab5ef0ef jal ra,80000174 + 800106c4: 00050793 mv a5,a0 + 800106c8: fef43423 sd a5,-24(s0) + 800106cc: fd843783 ld a5,-40(s0) + 800106d0: 0007a023 sw zero,0(a5) + 800106d4: fe843783 ld a5,-24(s0) + 800106d8: 00078513 mv a0,a5 + 800106dc: aa1ef0ef jal ra,8000017c + 800106e0: fd843783 ld a5,-40(s0) + 800106e4: 0107b783 ld a5,16(a5) + 800106e8: 00078513 mv a0,a5 + 800106ec: fa8f40ef jal ra,80004e94 + 800106f0: 00000793 li a5,0 + 800106f4: 00078513 mv a0,a5 + 800106f8: 02813083 ld ra,40(sp) + 800106fc: 02013403 ld s0,32(sp) + 80010700: 03010113 addi sp,sp,48 + 80010704: 00008067 ret + +0000000080010708 : + 80010708: fe010113 addi sp,sp,-32 + 8001070c: 00813c23 sd s0,24(sp) + 80010710: 02010413 addi s0,sp,32 + 80010714: fea43423 sd a0,-24(s0) + 80010718: fe843783 ld a5,-24(s0) + 8001071c: fe843703 ld a4,-24(s0) + 80010720: 00e7b423 sd a4,8(a5) + 80010724: fe843783 ld a5,-24(s0) + 80010728: 0087b703 ld a4,8(a5) + 8001072c: fe843783 ld a5,-24(s0) + 80010730: 00e7b023 sd a4,0(a5) + 80010734: 00000013 nop + 80010738: 01813403 ld s0,24(sp) + 8001073c: 02010113 addi sp,sp,32 + 80010740: 00008067 ret + +0000000080010744 : + 80010744: fe010113 addi sp,sp,-32 + 80010748: 00813c23 sd s0,24(sp) + 8001074c: 02010413 addi s0,sp,32 + 80010750: fea43423 sd a0,-24(s0) + 80010754: feb43023 sd a1,-32(s0) + 80010758: fe843783 ld a5,-24(s0) + 8001075c: 0087b783 ld a5,8(a5) + 80010760: fe043703 ld a4,-32(s0) + 80010764: 00e7b023 sd a4,0(a5) + 80010768: fe843783 ld a5,-24(s0) + 8001076c: 0087b703 ld a4,8(a5) + 80010770: fe043783 ld a5,-32(s0) + 80010774: 00e7b423 sd a4,8(a5) + 80010778: fe843783 ld a5,-24(s0) + 8001077c: fe043703 ld a4,-32(s0) + 80010780: 00e7b423 sd a4,8(a5) + 80010784: fe043783 ld a5,-32(s0) + 80010788: fe843703 ld a4,-24(s0) + 8001078c: 00e7b023 sd a4,0(a5) + 80010790: 00000013 nop + 80010794: 01813403 ld s0,24(sp) + 80010798: 02010113 addi sp,sp,32 + 8001079c: 00008067 ret + +00000000800107a0 : + 800107a0: fe010113 addi sp,sp,-32 + 800107a4: 00813c23 sd s0,24(sp) + 800107a8: 02010413 addi s0,sp,32 + 800107ac: fea43423 sd a0,-24(s0) + 800107b0: fe843783 ld a5,-24(s0) + 800107b4: 0007b783 ld a5,0(a5) + 800107b8: fe843703 ld a4,-24(s0) + 800107bc: 40f707b3 sub a5,a4,a5 + 800107c0: 0017b793 seqz a5,a5 + 800107c4: 0ff7f793 andi a5,a5,255 + 800107c8: 0007879b sext.w a5,a5 + 800107cc: 00078513 mv a0,a5 + 800107d0: 01813403 ld s0,24(sp) + 800107d4: 02010113 addi sp,sp,32 + 800107d8: 00008067 ret + +00000000800107dc : + 800107dc: fd010113 addi sp,sp,-48 + 800107e0: 02113423 sd ra,40(sp) + 800107e4: 02813023 sd s0,32(sp) + 800107e8: 03010413 addi s0,sp,48 + 800107ec: fca43c23 sd a0,-40(s0) + 800107f0: fd843783 ld a5,-40(s0) + 800107f4: 00079e63 bnez a5,80010810 + 800107f8: 01500613 li a2,21 + 800107fc: 00009597 auipc a1,0x9 + 80010800: b4c58593 addi a1,a1,-1204 # 80019348 <__FUNCTION__.3023> + 80010804: 00007517 auipc a0,0x7 + 80010808: 42c50513 addi a0,a0,1068 # 80017c30 + 8001080c: c71f70ef jal ra,8000847c + 80010810: 965ef0ef jal ra,80000174 + 80010814: fea43423 sd a0,-24(s0) + 80010818: fd843783 ld a5,-40(s0) + 8001081c: 0007a023 sw zero,0(a5) + 80010820: fd843783 ld a5,-40(s0) + 80010824: 00878793 addi a5,a5,8 + 80010828: 00078513 mv a0,a5 + 8001082c: eddff0ef jal ra,80010708 + 80010830: fe843503 ld a0,-24(s0) + 80010834: 949ef0ef jal ra,8000017c + 80010838: 00000013 nop + 8001083c: 02813083 ld ra,40(sp) + 80010840: 02013403 ld s0,32(sp) + 80010844: 03010113 addi sp,sp,48 + 80010848: 00008067 ret + +000000008001084c : + 8001084c: fc010113 addi sp,sp,-64 + 80010850: 02113c23 sd ra,56(sp) + 80010854: 02813823 sd s0,48(sp) + 80010858: 04010413 addi s0,sp,64 + 8001085c: fca43423 sd a0,-56(s0) + 80010860: 00058793 mv a5,a1 + 80010864: fcf42223 sw a5,-60(s0) + 80010868: fc843783 ld a5,-56(s0) + 8001086c: 00079e63 bnez a5,80010888 + 80010870: 02400613 li a2,36 + 80010874: 00009597 auipc a1,0x9 + 80010878: aec58593 addi a1,a1,-1300 # 80019360 <__FUNCTION__.3031> + 8001087c: 00007517 auipc a0,0x7 + 80010880: 3b450513 addi a0,a0,948 # 80017c30 + 80010884: bf9f70ef jal ra,8000847c + 80010888: fe043423 sd zero,-24(s0) + 8001088c: 940f50ef jal ra,800059cc + 80010890: fca43c23 sd a0,-40(s0) + 80010894: 8e1ef0ef jal ra,80000174 + 80010898: fea43023 sd a0,-32(s0) + 8001089c: fc843783 ld a5,-56(s0) + 800108a0: 0007a783 lw a5,0(a5) + 800108a4: 00078713 mv a4,a5 + 800108a8: 00100793 li a5,1 + 800108ac: 10f70863 beq a4,a5,800109bc + 800108b0: fc843783 ld a5,-56(s0) + 800108b4: 00878793 addi a5,a5,8 + 800108b8: 00078513 mv a0,a5 + 800108bc: ee5ff0ef jal ra,800107a0 + 800108c0: 00050793 mv a5,a0 + 800108c4: 00079e63 bnez a5,800108e0 + 800108c8: 02d00613 li a2,45 + 800108cc: 00009597 auipc a1,0x9 + 800108d0: a9458593 addi a1,a1,-1388 # 80019360 <__FUNCTION__.3031> + 800108d4: 00007517 auipc a0,0x7 + 800108d8: 37450513 addi a0,a0,884 # 80017c48 + 800108dc: ba1f70ef jal ra,8000847c + 800108e0: fc442783 lw a5,-60(s0) + 800108e4: 00079863 bnez a5,800108f4 + 800108e8: ffe00793 li a5,-2 + 800108ec: fef43423 sd a5,-24(s0) + 800108f0: 0d40006f j 800109c4 + 800108f4: fd843783 ld a5,-40(s0) + 800108f8: 0607b023 sd zero,96(a5) + 800108fc: fd843503 ld a0,-40(s0) + 80010900: 885f50ef jal ra,80006184 + 80010904: fc843783 ld a5,-56(s0) + 80010908: 00878713 addi a4,a5,8 + 8001090c: fd843783 ld a5,-40(s0) + 80010910: 02878793 addi a5,a5,40 + 80010914: 00078593 mv a1,a5 + 80010918: 00070513 mv a0,a4 + 8001091c: e29ff0ef jal ra,80010744 + 80010920: 855ef0ef jal ra,80000174 + 80010924: fca43823 sd a0,-48(s0) + 80010928: cadf50ef jal ra,800065d4 + 8001092c: 00050793 mv a5,a0 + 80010930: 02078863 beqz a5,80010960 + 80010934: 00009597 auipc a1,0x9 + 80010938: a2c58593 addi a1,a1,-1492 # 80019360 <__FUNCTION__.3031> + 8001093c: 00007517 auipc a0,0x7 + 80010940: 33c50513 addi a0,a0,828 # 80017c78 + 80010944: 8d9f70ef jal ra,8000821c + 80010948: 04000613 li a2,64 + 8001094c: 00009597 auipc a1,0x9 + 80010950: a1458593 addi a1,a1,-1516 # 80019360 <__FUNCTION__.3031> + 80010954: 00007517 auipc a0,0x7 + 80010958: 34c50513 addi a0,a0,844 # 80017ca0 + 8001095c: b21f70ef jal ra,8000847c + 80010960: fd043503 ld a0,-48(s0) + 80010964: 819ef0ef jal ra,8000017c + 80010968: fc442783 lw a5,-60(s0) + 8001096c: 02f05863 blez a5,8001099c + 80010970: fd843783 ld a5,-40(s0) + 80010974: 08878793 addi a5,a5,136 + 80010978: fc440713 addi a4,s0,-60 + 8001097c: 00070613 mv a2,a4 + 80010980: 00000593 li a1,0 + 80010984: 00078513 mv a0,a5 + 80010988: 8d0f30ef jal ra,80003a58 + 8001098c: fd843783 ld a5,-40(s0) + 80010990: 08878793 addi a5,a5,136 + 80010994: 00078513 mv a0,a5 + 80010998: b9df20ef jal ra,80003534 + 8001099c: fe043503 ld a0,-32(s0) + 800109a0: fdcef0ef jal ra,8000017c + 800109a4: a55f10ef jal ra,800023f8 + 800109a8: fd843783 ld a5,-40(s0) + 800109ac: 0607b783 ld a5,96(a5) + 800109b0: fef43423 sd a5,-24(s0) + 800109b4: fc0ef0ef jal ra,80000174 + 800109b8: fea43023 sd a0,-32(s0) + 800109bc: fc843783 ld a5,-56(s0) + 800109c0: 0007a023 sw zero,0(a5) + 800109c4: fe043503 ld a0,-32(s0) + 800109c8: fb4ef0ef jal ra,8000017c + 800109cc: fe843783 ld a5,-24(s0) + 800109d0: 00078513 mv a0,a5 + 800109d4: 03813083 ld ra,56(sp) + 800109d8: 03013403 ld s0,48(sp) + 800109dc: 04010113 addi sp,sp,64 + 800109e0: 00008067 ret + +00000000800109e4 : + 800109e4: fe010113 addi sp,sp,-32 + 800109e8: 00113c23 sd ra,24(sp) + 800109ec: 00813823 sd s0,16(sp) + 800109f0: 02010413 addi s0,sp,32 + 800109f4: fea43423 sd a0,-24(s0) + 800109f8: feb43023 sd a1,-32(s0) + 800109fc: 0001a797 auipc a5,0x1a + 80010a00: 60c78793 addi a5,a5,1548 # 8002b008 <_hw_pin> + 80010a04: 0807b783 ld a5,128(a5) + 80010a08: 00079e63 bnez a5,80010a24 + 80010a0c: 08a00613 li a2,138 + 80010a10: 00009597 auipc a1,0x9 + 80010a14: a1058593 addi a1,a1,-1520 # 80019420 <__FUNCTION__.3713> + 80010a18: 00007517 auipc a0,0x7 + 80010a1c: 2a050513 addi a0,a0,672 # 80017cb8 + 80010a20: a5df70ef jal ra,8000847c + 80010a24: 0001a797 auipc a5,0x1a + 80010a28: 5e478793 addi a5,a5,1508 # 8002b008 <_hw_pin> + 80010a2c: 0807b783 ld a5,128(a5) + 80010a30: 0007b783 ld a5,0(a5) + 80010a34: fe043603 ld a2,-32(s0) + 80010a38: fe843583 ld a1,-24(s0) + 80010a3c: 0001a517 auipc a0,0x1a + 80010a40: 5cc50513 addi a0,a0,1484 # 8002b008 <_hw_pin> + 80010a44: 000780e7 jalr a5 + 80010a48: 00000013 nop + 80010a4c: 01813083 ld ra,24(sp) + 80010a50: 01013403 ld s0,16(sp) + 80010a54: 02010113 addi sp,sp,32 + 80010a58: 00008067 ret + +0000000080010a5c : + 80010a5c: fe010113 addi sp,sp,-32 + 80010a60: 00113c23 sd ra,24(sp) + 80010a64: 00813823 sd s0,16(sp) + 80010a68: 02010413 addi s0,sp,32 + 80010a6c: fea43423 sd a0,-24(s0) + 80010a70: feb43023 sd a1,-32(s0) + 80010a74: 0001a797 auipc a5,0x1a + 80010a78: 59478793 addi a5,a5,1428 # 8002b008 <_hw_pin> + 80010a7c: 0807b783 ld a5,128(a5) + 80010a80: 00079e63 bnez a5,80010a9c + 80010a84: 09100613 li a2,145 + 80010a88: 00009597 auipc a1,0x9 + 80010a8c: 9a858593 addi a1,a1,-1624 # 80019430 <__FUNCTION__.3721> + 80010a90: 00007517 auipc a0,0x7 + 80010a94: 22850513 addi a0,a0,552 # 80017cb8 + 80010a98: 9e5f70ef jal ra,8000847c + 80010a9c: 0001a797 auipc a5,0x1a + 80010aa0: 56c78793 addi a5,a5,1388 # 8002b008 <_hw_pin> + 80010aa4: 0807b783 ld a5,128(a5) + 80010aa8: 0087b783 ld a5,8(a5) + 80010aac: fe043603 ld a2,-32(s0) + 80010ab0: fe843583 ld a1,-24(s0) + 80010ab4: 0001a517 auipc a0,0x1a + 80010ab8: 55450513 addi a0,a0,1364 # 8002b008 <_hw_pin> + 80010abc: 000780e7 jalr a5 + 80010ac0: 00000013 nop + 80010ac4: 01813083 ld ra,24(sp) + 80010ac8: 01013403 ld s0,16(sp) + 80010acc: 02010113 addi sp,sp,32 + 80010ad0: 00008067 ret + +0000000080010ad4 : + 80010ad4: fe010113 addi sp,sp,-32 + 80010ad8: 00113c23 sd ra,24(sp) + 80010adc: 00813823 sd s0,16(sp) + 80010ae0: 02010413 addi s0,sp,32 + 80010ae4: fea43423 sd a0,-24(s0) + 80010ae8: 0001a797 auipc a5,0x1a + 80010aec: 52078793 addi a5,a5,1312 # 8002b008 <_hw_pin> + 80010af0: 0807b783 ld a5,128(a5) + 80010af4: 00079e63 bnez a5,80010b10 + 80010af8: 09800613 li a2,152 + 80010afc: 00009597 auipc a1,0x9 + 80010b00: 94458593 addi a1,a1,-1724 # 80019440 <__FUNCTION__.3728> + 80010b04: 00007517 auipc a0,0x7 + 80010b08: 1b450513 addi a0,a0,436 # 80017cb8 + 80010b0c: 971f70ef jal ra,8000847c + 80010b10: 0001a797 auipc a5,0x1a + 80010b14: 4f878793 addi a5,a5,1272 # 8002b008 <_hw_pin> + 80010b18: 0807b783 ld a5,128(a5) + 80010b1c: 0107b783 ld a5,16(a5) + 80010b20: fe843583 ld a1,-24(s0) + 80010b24: 0001a517 auipc a0,0x1a + 80010b28: 4e450513 addi a0,a0,1252 # 8002b008 <_hw_pin> + 80010b2c: 000780e7 jalr a5 + 80010b30: 00050793 mv a5,a0 + 80010b34: 00078513 mv a0,a5 + 80010b38: 01813083 ld ra,24(sp) + 80010b3c: 01013403 ld s0,16(sp) + 80010b40: 02010113 addi sp,sp,32 + 80010b44: 00008067 ret + +0000000080010b48 : + 80010b48: fe010113 addi sp,sp,-32 + 80010b4c: 00113c23 sd ra,24(sp) + 80010b50: 00813823 sd s0,16(sp) + 80010b54: 02010413 addi s0,sp,32 + 80010b58: fea43423 sd a0,-24(s0) + 80010b5c: 0001a797 auipc a5,0x1a + 80010b60: 4ac78793 addi a5,a5,1196 # 8002b008 <_hw_pin> + 80010b64: 0807b783 ld a5,128(a5) + 80010b68: 00079e63 bnez a5,80010b84 + 80010b6c: 09f00613 li a2,159 + 80010b70: 00009597 auipc a1,0x9 + 80010b74: 8e058593 addi a1,a1,-1824 # 80019450 <__FUNCTION__.3735> + 80010b78: 00007517 auipc a0,0x7 + 80010b7c: 14050513 addi a0,a0,320 # 80017cb8 + 80010b80: 8fdf70ef jal ra,8000847c + 80010b84: fe843783 ld a5,-24(s0) + 80010b88: 0007c783 lbu a5,0(a5) + 80010b8c: 00078713 mv a4,a5 + 80010b90: 05000793 li a5,80 + 80010b94: 00f70e63 beq a4,a5,80010bb0 + 80010b98: 0a000613 li a2,160 + 80010b9c: 00009597 auipc a1,0x9 + 80010ba0: 8b458593 addi a1,a1,-1868 # 80019450 <__FUNCTION__.3735> + 80010ba4: 00007517 auipc a0,0x7 + 80010ba8: 12c50513 addi a0,a0,300 # 80017cd0 + 80010bac: 8d1f70ef jal ra,8000847c + 80010bb0: 0001a797 auipc a5,0x1a + 80010bb4: 45878793 addi a5,a5,1112 # 8002b008 <_hw_pin> + 80010bb8: 0807b783 ld a5,128(a5) + 80010bbc: 0307b783 ld a5,48(a5) + 80010bc0: 00079663 bnez a5,80010bcc + 80010bc4: ffa00793 li a5,-6 + 80010bc8: 0200006f j 80010be8 + 80010bcc: 0001a797 auipc a5,0x1a + 80010bd0: 43c78793 addi a5,a5,1084 # 8002b008 <_hw_pin> + 80010bd4: 0807b783 ld a5,128(a5) + 80010bd8: 0307b783 ld a5,48(a5) + 80010bdc: fe843503 ld a0,-24(s0) + 80010be0: 000780e7 jalr a5 + 80010be4: 00050793 mv a5,a0 + 80010be8: 00078513 mv a0,a5 + 80010bec: 01813083 ld ra,24(sp) + 80010bf0: 01013403 ld s0,16(sp) + 80010bf4: 02010113 addi sp,sp,32 + 80010bf8: 00008067 ret + +0000000080010bfc : + 80010bfc: fc010113 addi sp,sp,-64 + 80010c00: 02113c23 sd ra,56(sp) + 80010c04: 02813823 sd s0,48(sp) + 80010c08: 04010413 addi s0,sp,64 + 80010c0c: fca43423 sd a0,-56(s0) + 80010c10: fe042623 sw zero,-20(s0) + 80010c14: fe043023 sd zero,-32(s0) + 80010c18: 698010ef jal ra,800122b0 + 80010c1c: 0001a797 auipc a5,0x1a + 80010c20: 47478793 addi a5,a5,1140 # 8002b090 + 80010c24: fcf43c23 sd a5,-40(s0) + 80010c28: 06c0006f j 80010c94 + 80010c2c: fd843783 ld a5,-40(s0) + 80010c30: 0007b783 ld a5,0(a5) + 80010c34: 00079c63 bnez a5,80010c4c + 80010c38: fe043783 ld a5,-32(s0) + 80010c3c: 04079663 bnez a5,80010c88 + 80010c40: fd843783 ld a5,-40(s0) + 80010c44: fef43023 sd a5,-32(s0) + 80010c48: 0400006f j 80010c88 + 80010c4c: fd843783 ld a5,-40(s0) + 80010c50: 0007b783 ld a5,0(a5) + 80010c54: 0007b703 ld a4,0(a5) + 80010c58: fc843783 ld a5,-56(s0) + 80010c5c: 0007b783 ld a5,0(a5) + 80010c60: 00078593 mv a1,a5 + 80010c64: 00070513 mv a0,a4 + 80010c68: d31ef0ef jal ra,80000998 + 80010c6c: 00050793 mv a5,a0 + 80010c70: 00079c63 bnez a5,80010c88 + 80010c74: fef00513 li a0,-17 + 80010c78: dd1f50ef jal ra,80006a48 + 80010c7c: fff00793 li a5,-1 + 80010c80: fef42623 sw a5,-20(s0) + 80010c84: 0200006f j 80010ca4 + 80010c88: fd843783 ld a5,-40(s0) + 80010c8c: 00878793 addi a5,a5,8 + 80010c90: fcf43c23 sd a5,-40(s0) + 80010c94: fd843703 ld a4,-40(s0) + 80010c98: 0001a797 auipc a5,0x1a + 80010c9c: 40878793 addi a5,a5,1032 # 8002b0a0 + 80010ca0: f8f766e3 bltu a4,a5,80010c2c + 80010ca4: fe043783 ld a5,-32(s0) + 80010ca8: 04079463 bnez a5,80010cf0 + 80010cac: fe400513 li a0,-28 + 80010cb0: d99f50ef jal ra,80006a48 + 80010cb4: 00007517 auipc a0,0x7 + 80010cb8: 02c50513 addi a0,a0,44 # 80017ce0 + 80010cbc: d60f70ef jal ra,8000821c + 80010cc0: fc843783 ld a5,-56(s0) + 80010cc4: 0007b783 ld a5,0(a5) + 80010cc8: 00078593 mv a1,a5 + 80010ccc: 00007517 auipc a0,0x7 + 80010cd0: 02450513 addi a0,a0,36 # 80017cf0 + 80010cd4: d48f70ef jal ra,8000821c + 80010cd8: 00007517 auipc a0,0x7 + 80010cdc: 05050513 addi a0,a0,80 # 80017d28 + 80010ce0: d3cf70ef jal ra,8000821c + 80010ce4: fff00793 li a5,-1 + 80010ce8: fef42623 sw a5,-20(s0) + 80010cec: 01c0006f j 80010d08 + 80010cf0: fec42783 lw a5,-20(s0) + 80010cf4: 0007879b sext.w a5,a5 + 80010cf8: 00079863 bnez a5,80010d08 + 80010cfc: fe043783 ld a5,-32(s0) + 80010d00: fc843703 ld a4,-56(s0) + 80010d04: 00e7b023 sd a4,0(a5) + 80010d08: 618010ef jal ra,80012320 + 80010d0c: fec42783 lw a5,-20(s0) + 80010d10: 00078513 mv a0,a5 + 80010d14: 03813083 ld ra,56(sp) + 80010d18: 03013403 ld s0,48(sp) + 80010d1c: 04010113 addi sp,sp,64 + 80010d20: 00008067 ret + +0000000080010d24 : + 80010d24: fc010113 addi sp,sp,-64 + 80010d28: 02113c23 sd ra,56(sp) + 80010d2c: 02813823 sd s0,48(sp) + 80010d30: 04010413 addi s0,sp,64 + 80010d34: fca43423 sd a0,-56(s0) + 80010d38: fe043023 sd zero,-32(s0) + 80010d3c: fc042e23 sw zero,-36(s0) + 80010d40: fc843783 ld a5,-56(s0) + 80010d44: 00079e63 bnez a5,80010d60 + 80010d48: 05600613 li a2,86 + 80010d4c: 00008597 auipc a1,0x8 + 80010d50: 74c58593 addi a1,a1,1868 # 80019498 <__FUNCTION__.4112> + 80010d54: 00007517 auipc a0,0x7 + 80010d58: fdc50513 addi a0,a0,-36 # 80017d30 + 80010d5c: f20f70ef jal ra,8000847c + 80010d60: 550010ef jal ra,800122b0 + 80010d64: 0001a797 auipc a5,0x1a + 80010d68: 33c78793 addi a5,a5,828 # 8002b0a0 + 80010d6c: fef43423 sd a5,-24(s0) + 80010d70: 0e00006f j 80010e50 + 80010d74: fe843783 ld a5,-24(s0) + 80010d78: 0087b783 ld a5,8(a5) + 80010d7c: 0a078a63 beqz a5,80010e30 + 80010d80: fe843783 ld a5,-24(s0) + 80010d84: 0107b783 ld a5,16(a5) + 80010d88: 0a078463 beqz a5,80010e30 + 80010d8c: fe843783 ld a5,-24(s0) + 80010d90: 0087b783 ld a5,8(a5) + 80010d94: 00078513 mv a0,a5 + 80010d98: abdef0ef jal ra,80000854 + 80010d9c: 00050793 mv a5,a0 + 80010da0: fcf42c23 sw a5,-40(s0) + 80010da4: fd842703 lw a4,-40(s0) + 80010da8: fdc42783 lw a5,-36(s0) + 80010dac: 0007071b sext.w a4,a4 + 80010db0: 0007879b sext.w a5,a5 + 80010db4: 08f76263 bltu a4,a5,80010e38 + 80010db8: fe843783 ld a5,-24(s0) + 80010dbc: 0087b783 ld a5,8(a5) + 80010dc0: fd846703 lwu a4,-40(s0) + 80010dc4: 00070613 mv a2,a4 + 80010dc8: fc843583 ld a1,-56(s0) + 80010dcc: 00078513 mv a0,a5 + 80010dd0: c05ef0ef jal ra,800009d4 + 80010dd4: 00050793 mv a5,a0 + 80010dd8: 06079063 bnez a5,80010e38 + 80010ddc: fd842783 lw a5,-40(s0) + 80010de0: 0007871b sext.w a4,a5 + 80010de4: 00100793 li a5,1 + 80010de8: 02e7fa63 bgeu a5,a4,80010e1c + 80010dec: fc843503 ld a0,-56(s0) + 80010df0: a65ef0ef jal ra,80000854 + 80010df4: 00050713 mv a4,a0 + 80010df8: fd846783 lwu a5,-40(s0) + 80010dfc: 02e7f063 bgeu a5,a4,80010e1c + 80010e00: fd846783 lwu a5,-40(s0) + 80010e04: fc843703 ld a4,-56(s0) + 80010e08: 00f707b3 add a5,a4,a5 + 80010e0c: 0007c783 lbu a5,0(a5) + 80010e10: 00078713 mv a4,a5 + 80010e14: 02f00793 li a5,47 + 80010e18: 02f71463 bne a4,a5,80010e40 + 80010e1c: fe843783 ld a5,-24(s0) + 80010e20: fef43023 sd a5,-32(s0) + 80010e24: fd842783 lw a5,-40(s0) + 80010e28: fcf42e23 sw a5,-36(s0) + 80010e2c: 0180006f j 80010e44 + 80010e30: 00000013 nop + 80010e34: 0100006f j 80010e44 + 80010e38: 00000013 nop + 80010e3c: 0080006f j 80010e44 + 80010e40: 00000013 nop + 80010e44: fe843783 ld a5,-24(s0) + 80010e48: 02078793 addi a5,a5,32 + 80010e4c: fef43423 sd a5,-24(s0) + 80010e50: fe843703 ld a4,-24(s0) + 80010e54: 0001a797 auipc a5,0x1a + 80010e58: 28c78793 addi a5,a5,652 # 8002b0e0 + 80010e5c: f0f76ce3 bltu a4,a5,80010d74 + 80010e60: 4c0010ef jal ra,80012320 + 80010e64: fe043783 ld a5,-32(s0) + 80010e68: 00078513 mv a0,a5 + 80010e6c: 03813083 ld ra,56(sp) + 80010e70: 03013403 ld s0,48(sp) + 80010e74: 04010113 addi sp,sp,64 + 80010e78: 00008067 ret + +0000000080010e7c : + 80010e7c: f5010113 addi sp,sp,-176 + 80010e80: 0a113423 sd ra,168(sp) + 80010e84: 0a813023 sd s0,160(sp) + 80010e88: 0b010413 addi s0,sp,176 + 80010e8c: f6a43c23 sd a0,-136(s0) + 80010e90: f6b43823 sd a1,-144(s0) + 80010e94: f6c43423 sd a2,-152(s0) + 80010e98: f6d43023 sd a3,-160(s0) + 80010e9c: f4e43c23 sd a4,-168(s0) + 80010ea0: fc043c23 sd zero,-40(s0) + 80010ea4: fc043423 sd zero,-56(s0) + 80010ea8: f7843783 ld a5,-136(s0) + 80010eac: 00079663 bnez a5,80010eb8 + 80010eb0: fc043823 sd zero,-48(s0) + 80010eb4: 0280006f j 80010edc + 80010eb8: f7843503 ld a0,-136(s0) + 80010ebc: bc1f10ef jal ra,80002a7c + 80010ec0: fca43823 sd a0,-48(s0) + 80010ec4: fd043783 ld a5,-48(s0) + 80010ec8: 00079a63 bnez a5,80010edc + 80010ecc: fed00513 li a0,-19 + 80010ed0: b79f50ef jal ra,80006a48 + 80010ed4: fff00793 li a5,-1 + 80010ed8: 2e80006f j 800111c0 + 80010edc: 3d4010ef jal ra,800122b0 + 80010ee0: 0001a797 auipc a5,0x1a + 80010ee4: 1b078793 addi a5,a5,432 # 8002b090 + 80010ee8: fef43423 sd a5,-24(s0) + 80010eec: 03c0006f j 80010f28 + 80010ef0: fe843783 ld a5,-24(s0) + 80010ef4: 0007b783 ld a5,0(a5) + 80010ef8: 02078263 beqz a5,80010f1c + 80010efc: fe843783 ld a5,-24(s0) + 80010f00: 0007b783 ld a5,0(a5) + 80010f04: 0007b783 ld a5,0(a5) + 80010f08: f6843583 ld a1,-152(s0) + 80010f0c: 00078513 mv a0,a5 + 80010f10: a89ef0ef jal ra,80000998 + 80010f14: 00050793 mv a5,a0 + 80010f18: 02078263 beqz a5,80010f3c + 80010f1c: fe843783 ld a5,-24(s0) + 80010f20: 00878793 addi a5,a5,8 + 80010f24: fef43423 sd a5,-24(s0) + 80010f28: fe843703 ld a4,-24(s0) + 80010f2c: 0001a797 auipc a5,0x1a + 80010f30: 17478793 addi a5,a5,372 # 8002b0a0 + 80010f34: faf76ee3 bltu a4,a5,80010ef0 + 80010f38: 0080006f j 80010f40 + 80010f3c: 00000013 nop + 80010f40: 3e0010ef jal ra,80012320 + 80010f44: fe843703 ld a4,-24(s0) + 80010f48: 0001a797 auipc a5,0x1a + 80010f4c: 15878793 addi a5,a5,344 # 8002b0a0 + 80010f50: 00f71a63 bne a4,a5,80010f64 + 80010f54: fed00513 li a0,-19 + 80010f58: af1f50ef jal ra,80006a48 + 80010f5c: fff00793 li a5,-1 + 80010f60: 2600006f j 800111c0 + 80010f64: fe843783 ld a5,-24(s0) + 80010f68: 0007b783 ld a5,0(a5) + 80010f6c: 00078a63 beqz a5,80010f80 + 80010f70: fe843783 ld a5,-24(s0) + 80010f74: 0007b783 ld a5,0(a5) + 80010f78: 0187b783 ld a5,24(a5) + 80010f7c: 00079a63 bnez a5,80010f90 + 80010f80: fda00513 li a0,-38 + 80010f84: ac5f50ef jal ra,80006a48 + 80010f88: fff00793 li a5,-1 + 80010f8c: 2340006f j 800111c0 + 80010f90: f7043583 ld a1,-144(s0) + 80010f94: 00000513 li a0,0 + 80010f98: 285010ef jal ra,80012a1c + 80010f9c: fca43423 sd a0,-56(s0) + 80010fa0: fc843783 ld a5,-56(s0) + 80010fa4: 00079a63 bnez a5,80010fb8 + 80010fa8: fec00513 li a0,-20 + 80010fac: a9df50ef jal ra,80006a48 + 80010fb0: fff00793 li a5,-1 + 80010fb4: 20c0006f j 800111c0 + 80010fb8: 00007597 auipc a1,0x7 + 80010fbc: df058593 addi a1,a1,-528 # 80017da8 + 80010fc0: fc843503 ld a0,-56(s0) + 80010fc4: 9d5ef0ef jal ra,80000998 + 80010fc8: 00050793 mv a5,a0 + 80010fcc: 04078e63 beqz a5,80011028 + 80010fd0: 00007597 auipc a1,0x7 + 80010fd4: de058593 addi a1,a1,-544 # 80017db0 + 80010fd8: fc843503 ld a0,-56(s0) + 80010fdc: 9bdef0ef jal ra,80000998 + 80010fe0: 00050793 mv a5,a0 + 80010fe4: 04078263 beqz a5,80011028 + 80010fe8: f8040793 addi a5,s0,-128 + 80010fec: 00010637 lui a2,0x10 + 80010ff0: fc843583 ld a1,-56(s0) + 80010ff4: 00078513 mv a0,a5 + 80010ff8: 04c020ef jal ra,80013044 + 80010ffc: 00050793 mv a5,a0 + 80011000: 0007de63 bgez a5,8001101c + 80011004: fc843503 ld a0,-56(s0) + 80011008: e8df30ef jal ra,80004e94 + 8001100c: fec00513 li a0,-20 + 80011010: a39f50ef jal ra,80006a48 + 80011014: fff00793 li a5,-1 + 80011018: 1a80006f j 800111c0 + 8001101c: f8040793 addi a5,s0,-128 + 80011020: 00078513 mv a0,a5 + 80011024: 268020ef jal ra,8001328c + 80011028: 288010ef jal ra,800122b0 + 8001102c: 0001a797 auipc a5,0x1a + 80011030: 07478793 addi a5,a5,116 # 8002b0a0 + 80011034: fef43023 sd a5,-32(s0) + 80011038: 0580006f j 80011090 + 8001103c: fe043783 ld a5,-32(s0) + 80011040: 0107b783 ld a5,16(a5) + 80011044: 00079c63 bnez a5,8001105c + 80011048: fd843783 ld a5,-40(s0) + 8001104c: 02079c63 bnez a5,80011084 + 80011050: fe043783 ld a5,-32(s0) + 80011054: fcf43c23 sd a5,-40(s0) + 80011058: 02c0006f j 80011084 + 8001105c: fe043783 ld a5,-32(s0) + 80011060: 0087b783 ld a5,8(a5) + 80011064: f7043583 ld a1,-144(s0) + 80011068: 00078513 mv a0,a5 + 8001106c: 92def0ef jal ra,80000998 + 80011070: 00050793 mv a5,a0 + 80011074: 00079863 bnez a5,80011084 + 80011078: fea00513 li a0,-22 + 8001107c: 9cdf50ef jal ra,80006a48 + 80011080: 1300006f j 800111b0 + 80011084: fe043783 ld a5,-32(s0) + 80011088: 02078793 addi a5,a5,32 + 8001108c: fef43023 sd a5,-32(s0) + 80011090: fe043703 ld a4,-32(s0) + 80011094: 0001a797 auipc a5,0x1a + 80011098: 04c78793 addi a5,a5,76 # 8002b0e0 + 8001109c: faf760e3 bltu a4,a5,8001103c + 800110a0: fd843783 ld a5,-40(s0) + 800110a4: 04079463 bnez a5,800110ec + 800110a8: fe043703 ld a4,-32(s0) + 800110ac: 0001a797 auipc a5,0x1a + 800110b0: 03478793 addi a5,a5,52 # 8002b0e0 + 800110b4: 02f71c63 bne a4,a5,800110ec + 800110b8: fe400513 li a0,-28 + 800110bc: 98df50ef jal ra,80006a48 + 800110c0: 00007517 auipc a0,0x7 + 800110c4: c2050513 addi a0,a0,-992 # 80017ce0 + 800110c8: 954f70ef jal ra,8000821c + 800110cc: f6843583 ld a1,-152(s0) + 800110d0: 00007517 auipc a0,0x7 + 800110d4: ce850513 addi a0,a0,-792 # 80017db8 + 800110d8: 944f70ef jal ra,8000821c + 800110dc: 00007517 auipc a0,0x7 + 800110e0: c4c50513 addi a0,a0,-948 # 80017d28 + 800110e4: 938f70ef jal ra,8000821c + 800110e8: 0c80006f j 800111b0 + 800110ec: fd843783 ld a5,-40(s0) + 800110f0: fc843703 ld a4,-56(s0) + 800110f4: 00e7b423 sd a4,8(a5) + 800110f8: fe843783 ld a5,-24(s0) + 800110fc: 0007b703 ld a4,0(a5) + 80011100: fd843783 ld a5,-40(s0) + 80011104: 00e7b823 sd a4,16(a5) + 80011108: fd843783 ld a5,-40(s0) + 8001110c: fd043703 ld a4,-48(s0) + 80011110: 00e7b023 sd a4,0(a5) + 80011114: 20c010ef jal ra,80012320 + 80011118: fd043783 ld a5,-48(s0) + 8001111c: 02078c63 beqz a5,80011154 + 80011120: fd843783 ld a5,-40(s0) + 80011124: 0007b783 ld a5,0(a5) + 80011128: 00300593 li a1,3 + 8001112c: 00078513 mv a0,a5 + 80011130: 985f10ef jal ra,80002ab4 + 80011134: 00050793 mv a5,a0 + 80011138: 00078e63 beqz a5,80011154 + 8001113c: 174010ef jal ra,800122b0 + 80011140: 02000613 li a2,32 + 80011144: 00000593 li a1,0 + 80011148: fd843503 ld a0,-40(s0) + 8001114c: 8cdef0ef jal ra,80000a18 + 80011150: 0600006f j 800111b0 + 80011154: fe843783 ld a5,-24(s0) + 80011158: 0007b783 ld a5,0(a5) + 8001115c: 0187b783 ld a5,24(a5) + 80011160: f5843603 ld a2,-168(s0) + 80011164: f6043583 ld a1,-160(s0) + 80011168: fd843503 ld a0,-40(s0) + 8001116c: 000780e7 jalr a5 + 80011170: 00050793 mv a5,a0 + 80011174: 0207da63 bgez a5,800111a8 + 80011178: fd043783 ld a5,-48(s0) + 8001117c: 00078a63 beqz a5,80011190 + 80011180: fd843783 ld a5,-40(s0) + 80011184: 0007b783 ld a5,0(a5) + 80011188: 00078513 mv a0,a5 + 8001118c: b21f10ef jal ra,80002cac + 80011190: 120010ef jal ra,800122b0 + 80011194: 02000613 li a2,32 + 80011198: 00000593 li a1,0 + 8001119c: fd843503 ld a0,-40(s0) + 800111a0: 879ef0ef jal ra,80000a18 + 800111a4: 00c0006f j 800111b0 + 800111a8: 00000793 li a5,0 + 800111ac: 0140006f j 800111c0 + 800111b0: 170010ef jal ra,80012320 + 800111b4: fc843503 ld a0,-56(s0) + 800111b8: cddf30ef jal ra,80004e94 + 800111bc: fff00793 li a5,-1 + 800111c0: 00078513 mv a0,a5 + 800111c4: 0a813083 ld ra,168(sp) + 800111c8: 0a013403 ld s0,160(sp) + 800111cc: 0b010113 addi sp,sp,176 + 800111d0: 00008067 ret + +00000000800111d4 : + 800111d4: fc010113 addi sp,sp,-64 + 800111d8: 02113c23 sd ra,56(sp) + 800111dc: 02813823 sd s0,48(sp) + 800111e0: 04010413 addi s0,sp,64 + 800111e4: fca43423 sd a0,-56(s0) + 800111e8: fe043023 sd zero,-32(s0) + 800111ec: fc843583 ld a1,-56(s0) + 800111f0: 00000513 li a0,0 + 800111f4: 029010ef jal ra,80012a1c + 800111f8: fca43c23 sd a0,-40(s0) + 800111fc: fd843783 ld a5,-40(s0) + 80011200: 00079a63 bnez a5,80011214 + 80011204: fec00513 li a0,-20 + 80011208: 841f50ef jal ra,80006a48 + 8001120c: fff00793 li a5,-1 + 80011210: 10c0006f j 8001131c + 80011214: 09c010ef jal ra,800122b0 + 80011218: 0001a797 auipc a5,0x1a + 8001121c: e8878793 addi a5,a5,-376 # 8002b0a0 + 80011220: fef43423 sd a5,-24(s0) + 80011224: 0440006f j 80011268 + 80011228: fe843783 ld a5,-24(s0) + 8001122c: 0087b783 ld a5,8(a5) + 80011230: 02078663 beqz a5,8001125c + 80011234: fe843783 ld a5,-24(s0) + 80011238: 0087b783 ld a5,8(a5) + 8001123c: fd843583 ld a1,-40(s0) + 80011240: 00078513 mv a0,a5 + 80011244: f54ef0ef jal ra,80000998 + 80011248: 00050793 mv a5,a0 + 8001124c: 00079863 bnez a5,8001125c + 80011250: fe843783 ld a5,-24(s0) + 80011254: fef43023 sd a5,-32(s0) + 80011258: 0200006f j 80011278 + 8001125c: fe843783 ld a5,-24(s0) + 80011260: 02078793 addi a5,a5,32 + 80011264: fef43423 sd a5,-24(s0) + 80011268: fe843703 ld a4,-24(s0) + 8001126c: 0001a797 auipc a5,0x1a + 80011270: e7478793 addi a5,a5,-396 # 8002b0e0 + 80011274: faf76ae3 bltu a4,a5,80011228 + 80011278: fe043783 ld a5,-32(s0) + 8001127c: 08078663 beqz a5,80011308 + 80011280: fe043783 ld a5,-32(s0) + 80011284: 0107b783 ld a5,16(a5) + 80011288: 0207b783 ld a5,32(a5) + 8001128c: 06078e63 beqz a5,80011308 + 80011290: fe043783 ld a5,-32(s0) + 80011294: 0107b783 ld a5,16(a5) + 80011298: 0207b783 ld a5,32(a5) + 8001129c: fe043503 ld a0,-32(s0) + 800112a0: 000780e7 jalr a5 + 800112a4: 00050793 mv a5,a0 + 800112a8: 0607c063 bltz a5,80011308 + 800112ac: fe043783 ld a5,-32(s0) + 800112b0: 0007b783 ld a5,0(a5) + 800112b4: 00078a63 beqz a5,800112c8 + 800112b8: fe043783 ld a5,-32(s0) + 800112bc: 0007b783 ld a5,0(a5) + 800112c0: 00078513 mv a0,a5 + 800112c4: 9e9f10ef jal ra,80002cac + 800112c8: fe043783 ld a5,-32(s0) + 800112cc: 0087b783 ld a5,8(a5) + 800112d0: 00078a63 beqz a5,800112e4 + 800112d4: fe043783 ld a5,-32(s0) + 800112d8: 0087b783 ld a5,8(a5) + 800112dc: 00078513 mv a0,a5 + 800112e0: bb5f30ef jal ra,80004e94 + 800112e4: 02000613 li a2,32 + 800112e8: 00000593 li a1,0 + 800112ec: fe043503 ld a0,-32(s0) + 800112f0: f28ef0ef jal ra,80000a18 + 800112f4: 02c010ef jal ra,80012320 + 800112f8: fd843503 ld a0,-40(s0) + 800112fc: b99f30ef jal ra,80004e94 + 80011300: 00000793 li a5,0 + 80011304: 0180006f j 8001131c + 80011308: 00000013 nop + 8001130c: 014010ef jal ra,80012320 + 80011310: fd843503 ld a0,-40(s0) + 80011314: b81f30ef jal ra,80004e94 + 80011318: fff00793 li a5,-1 + 8001131c: 00078513 mv a0,a5 + 80011320: 03813083 ld ra,56(sp) + 80011324: 03013403 ld s0,48(sp) + 80011328: 04010113 addi sp,sp,64 + 8001132c: 00008067 ret + +0000000080011330 : + 80011330: fc010113 addi sp,sp,-64 + 80011334: 02113c23 sd ra,56(sp) + 80011338: 02813823 sd s0,48(sp) + 8001133c: 04010413 addi s0,sp,64 + 80011340: fca43423 sd a0,-56(s0) + 80011344: fcb43023 sd a1,-64(s0) + 80011348: fe043023 sd zero,-32(s0) + 8001134c: fc043783 ld a5,-64(s0) + 80011350: 00078863 beqz a5,80011360 + 80011354: fc043503 ld a0,-64(s0) + 80011358: f24f10ef jal ra,80002a7c + 8001135c: fea43023 sd a0,-32(s0) + 80011360: fe043783 ld a5,-32(s0) + 80011364: 02079e63 bnez a5,800113a0 + 80011368: fed00513 li a0,-19 + 8001136c: edcf50ef jal ra,80006a48 + 80011370: 00007517 auipc a0,0x7 + 80011374: 97050513 addi a0,a0,-1680 # 80017ce0 + 80011378: ea5f60ef jal ra,8000821c + 8001137c: fc043583 ld a1,-64(s0) + 80011380: 00007517 auipc a0,0x7 + 80011384: a7050513 addi a0,a0,-1424 # 80017df0 + 80011388: e95f60ef jal ra,8000821c + 8001138c: 00007517 auipc a0,0x7 + 80011390: 99c50513 addi a0,a0,-1636 # 80017d28 + 80011394: e89f60ef jal ra,8000821c + 80011398: fff00793 li a5,-1 + 8001139c: 1380006f j 800114d4 + 800113a0: 711000ef jal ra,800122b0 + 800113a4: fe042623 sw zero,-20(s0) + 800113a8: 05c0006f j 80011404 + 800113ac: 0001a717 auipc a4,0x1a + 800113b0: ce470713 addi a4,a4,-796 # 8002b090 + 800113b4: fec42783 lw a5,-20(s0) + 800113b8: 00379793 slli a5,a5,0x3 + 800113bc: 00f707b3 add a5,a4,a5 + 800113c0: 0007b783 ld a5,0(a5) + 800113c4: 02078a63 beqz a5,800113f8 + 800113c8: 0001a717 auipc a4,0x1a + 800113cc: cc870713 addi a4,a4,-824 # 8002b090 + 800113d0: fec42783 lw a5,-20(s0) + 800113d4: 00379793 slli a5,a5,0x3 + 800113d8: 00f707b3 add a5,a4,a5 + 800113dc: 0007b783 ld a5,0(a5) + 800113e0: 0007b783 ld a5,0(a5) + 800113e4: fc843583 ld a1,-56(s0) + 800113e8: 00078513 mv a0,a5 + 800113ec: dacef0ef jal ra,80000998 + 800113f0: 00050793 mv a5,a0 + 800113f4: 02078263 beqz a5,80011418 + 800113f8: fec42783 lw a5,-20(s0) + 800113fc: 0017879b addiw a5,a5,1 + 80011400: fef42623 sw a5,-20(s0) + 80011404: fec42783 lw a5,-20(s0) + 80011408: 0007871b sext.w a4,a5 + 8001140c: 00100793 li a5,1 + 80011410: f8e7dee3 bge a5,a4,800113ac + 80011414: 0080006f j 8001141c + 80011418: 00000013 nop + 8001141c: 705000ef jal ra,80012320 + 80011420: fec42783 lw a5,-20(s0) + 80011424: 0007871b sext.w a4,a5 + 80011428: 00100793 li a5,1 + 8001142c: 06e7ce63 blt a5,a4,800114a8 + 80011430: 0001a717 auipc a4,0x1a + 80011434: c6070713 addi a4,a4,-928 # 8002b090 + 80011438: fec42783 lw a5,-20(s0) + 8001143c: 00379793 slli a5,a5,0x3 + 80011440: 00f707b3 add a5,a4,a5 + 80011444: 0007b783 ld a5,0(a5) + 80011448: fcf43c23 sd a5,-40(s0) + 8001144c: fd843783 ld a5,-40(s0) + 80011450: 0287b783 ld a5,40(a5) + 80011454: 02079e63 bnez a5,80011490 + 80011458: 00007517 auipc a0,0x7 + 8001145c: 88850513 addi a0,a0,-1912 # 80017ce0 + 80011460: dbdf60ef jal ra,8000821c + 80011464: fc843583 ld a1,-56(s0) + 80011468: 00007517 auipc a0,0x7 + 8001146c: 9a850513 addi a0,a0,-1624 # 80017e10 + 80011470: dadf60ef jal ra,8000821c + 80011474: 00007517 auipc a0,0x7 + 80011478: 8b450513 addi a0,a0,-1868 # 80017d28 + 8001147c: da1f60ef jal ra,8000821c + 80011480: fda00513 li a0,-38 + 80011484: dc4f50ef jal ra,80006a48 + 80011488: fff00793 li a5,-1 + 8001148c: 0480006f j 800114d4 + 80011490: fd843783 ld a5,-40(s0) + 80011494: 0287b783 ld a5,40(a5) + 80011498: fe043503 ld a0,-32(s0) + 8001149c: 000780e7 jalr a5 + 800114a0: 00050793 mv a5,a0 + 800114a4: 0300006f j 800114d4 + 800114a8: 00007517 auipc a0,0x7 + 800114ac: 83850513 addi a0,a0,-1992 # 80017ce0 + 800114b0: d6df60ef jal ra,8000821c + 800114b4: fc843583 ld a1,-56(s0) + 800114b8: 00007517 auipc a0,0x7 + 800114bc: 99050513 addi a0,a0,-1648 # 80017e48 + 800114c0: d5df60ef jal ra,8000821c + 800114c4: 00007517 auipc a0,0x7 + 800114c8: 86450513 addi a0,a0,-1948 # 80017d28 + 800114cc: d51f60ef jal ra,8000821c + 800114d0: fff00793 li a5,-1 + 800114d4: 00078513 mv a0,a5 + 800114d8: 03813083 ld ra,56(sp) + 800114dc: 03013403 ld s0,48(sp) + 800114e0: 04010113 addi sp,sp,64 + 800114e4: 00008067 ret + +00000000800114e8 : + 800114e8: fd010113 addi sp,sp,-48 + 800114ec: 02113423 sd ra,40(sp) + 800114f0: 02813023 sd s0,32(sp) + 800114f4: 03010413 addi s0,sp,48 + 800114f8: fca43c23 sd a0,-40(s0) + 800114fc: fcb43823 sd a1,-48(s0) + 80011500: fd843503 ld a0,-40(s0) + 80011504: 821ff0ef jal ra,80010d24 + 80011508: fea43423 sd a0,-24(s0) + 8001150c: fe843783 ld a5,-24(s0) + 80011510: 02078a63 beqz a5,80011544 + 80011514: fe843783 ld a5,-24(s0) + 80011518: 0107b783 ld a5,16(a5) + 8001151c: 0307b783 ld a5,48(a5) + 80011520: 02078263 beqz a5,80011544 + 80011524: fe843783 ld a5,-24(s0) + 80011528: 0107b783 ld a5,16(a5) + 8001152c: 0307b783 ld a5,48(a5) + 80011530: fd043583 ld a1,-48(s0) + 80011534: fe843503 ld a0,-24(s0) + 80011538: 000780e7 jalr a5 + 8001153c: 00050793 mv a5,a0 + 80011540: 0080006f j 80011548 + 80011544: fff00793 li a5,-1 + 80011548: 00078513 mv a0,a5 + 8001154c: 02813083 ld ra,40(sp) + 80011550: 02013403 ld s0,32(sp) + 80011554: 03010113 addi sp,sp,48 + 80011558: 00008067 ret + +000000008001155c : + 8001155c: fe010113 addi sp,sp,-32 + 80011560: 00113c23 sd ra,24(sp) + 80011564: 00813823 sd s0,16(sp) + 80011568: 02010413 addi s0,sp,32 + 8001156c: fea43423 sd a0,-24(s0) + 80011570: feb43023 sd a1,-32(s0) + 80011574: fe043583 ld a1,-32(s0) + 80011578: fe843503 ld a0,-24(s0) + 8001157c: db5ff0ef jal ra,80011330 + 80011580: 00000013 nop + 80011584: 01813083 ld ra,24(sp) + 80011588: 01013403 ld s0,16(sp) + 8001158c: 02010113 addi sp,sp,32 + 80011590: 00008067 ret + +0000000080011594 : + 80011594: f9010113 addi sp,sp,-112 + 80011598: 06113423 sd ra,104(sp) + 8001159c: 06813023 sd s0,96(sp) + 800115a0: 07010413 addi s0,sp,112 + 800115a4: f8a43c23 sd a0,-104(s0) + 800115a8: fe042623 sw zero,-20(s0) + 800115ac: fc042e23 sw zero,-36(s0) + 800115b0: 00007797 auipc a5,0x7 + 800115b4: 8b878793 addi a5,a5,-1864 # 80017e68 + 800115b8: faf43423 sd a5,-88(s0) + 800115bc: 00007797 auipc a5,0x7 + 800115c0: 8b478793 addi a5,a5,-1868 # 80017e70 + 800115c4: faf43823 sd a5,-80(s0) + 800115c8: 00007797 auipc a5,0x7 + 800115cc: 8b078793 addi a5,a5,-1872 # 80017e78 + 800115d0: faf43c23 sd a5,-72(s0) + 800115d4: fc040793 addi a5,s0,-64 + 800115d8: 00078593 mv a1,a5 + 800115dc: f9843503 ld a0,-104(s0) + 800115e0: f09ff0ef jal ra,800114e8 + 800115e4: 00050793 mv a5,a0 + 800115e8: fcf42c23 sw a5,-40(s0) + 800115ec: fd842783 lw a5,-40(s0) + 800115f0: 0007879b sext.w a5,a5 + 800115f4: 00078c63 beqz a5,8001160c + 800115f8: 00007517 auipc a0,0x7 + 800115fc: 88850513 addi a0,a0,-1912 # 80017e80 + 80011600: c1df60ef jal ra,8000821c + 80011604: fff00793 li a5,-1 + 80011608: 0f80006f j 80011700 + 8001160c: fc043783 ld a5,-64(s0) + 80011610: 00078713 mv a4,a5 + 80011614: fd043783 ld a5,-48(s0) + 80011618: 00078593 mv a1,a5 + 8001161c: 00070513 mv a0,a4 + 80011620: b31ee0ef jal ra,80000150 <__muldi3> + 80011624: 00050793 mv a5,a0 + 80011628: 43f7d713 srai a4,a5,0x3f + 8001162c: 3ff77713 andi a4,a4,1023 + 80011630: 00f707b3 add a5,a4,a5 + 80011634: 40a7d793 srai a5,a5,0xa + 80011638: fef43023 sd a5,-32(s0) + 8001163c: fc042e23 sw zero,-36(s0) + 80011640: 0740006f j 800116b4 + 80011644: fe043703 ld a4,-32(s0) + 80011648: 3ff00793 li a5,1023 + 8001164c: 06e7de63 bge a5,a4,800116c8 + 80011650: fe043703 ld a4,-32(s0) + 80011654: 43f75793 srai a5,a4,0x3f + 80011658: 0367d793 srli a5,a5,0x36 + 8001165c: 00f70733 add a4,a4,a5 + 80011660: 3ff77713 andi a4,a4,1023 + 80011664: 40f707b3 sub a5,a4,a5 + 80011668: 00078713 mv a4,a5 + 8001166c: 00070793 mv a5,a4 + 80011670: 00279793 slli a5,a5,0x2 + 80011674: 00e787b3 add a5,a5,a4 + 80011678: 00179793 slli a5,a5,0x1 + 8001167c: 43f7d713 srai a4,a5,0x3f + 80011680: 3ff77713 andi a4,a4,1023 + 80011684: 00f707b3 add a5,a4,a5 + 80011688: 40a7d793 srai a5,a5,0xa + 8001168c: fef42623 sw a5,-20(s0) + 80011690: fe043783 ld a5,-32(s0) + 80011694: 43f7d713 srai a4,a5,0x3f + 80011698: 3ff77713 andi a4,a4,1023 + 8001169c: 00f707b3 add a5,a4,a5 + 800116a0: 40a7d793 srai a5,a5,0xa + 800116a4: fef43023 sd a5,-32(s0) + 800116a8: fdc42783 lw a5,-36(s0) + 800116ac: 0017879b addiw a5,a5,1 + 800116b0: fcf42e23 sw a5,-36(s0) + 800116b4: fdc42783 lw a5,-36(s0) + 800116b8: 0007871b sext.w a4,a5 + 800116bc: 00100793 li a5,1 + 800116c0: f8e7d2e3 bge a5,a4,80011644 + 800116c4: 0080006f j 800116cc + 800116c8: 00000013 nop + 800116cc: fe043583 ld a1,-32(s0) + 800116d0: fdc42783 lw a5,-36(s0) + 800116d4: 00379793 slli a5,a5,0x3 + 800116d8: ff040713 addi a4,s0,-16 + 800116dc: 00f707b3 add a5,a4,a5 + 800116e0: fb87b683 ld a3,-72(a5) + 800116e4: fd043703 ld a4,-48(s0) + 800116e8: fc043783 ld a5,-64(s0) + 800116ec: fec42603 lw a2,-20(s0) + 800116f0: 00006517 auipc a0,0x6 + 800116f4: 7a850513 addi a0,a0,1960 # 80017e98 + 800116f8: b25f60ef jal ra,8000821c + 800116fc: 00000793 li a5,0 + 80011700: 00078513 mv a0,a5 + 80011704: 06813083 ld ra,104(sp) + 80011708: 06013403 ld s0,96(sp) + 8001170c: 07010113 addi sp,sp,112 + 80011710: 00008067 ret + +0000000080011714 : + 80011714: f9010113 addi sp,sp,-112 + 80011718: 02113c23 sd ra,56(sp) + 8001171c: 02813823 sd s0,48(sp) + 80011720: 04010413 addi s0,sp,64 + 80011724: fca43423 sd a0,-56(s0) + 80011728: 00c43023 sd a2,0(s0) + 8001172c: 00d43423 sd a3,8(s0) + 80011730: 00e43823 sd a4,16(s0) + 80011734: 00f43c23 sd a5,24(s0) + 80011738: 03043023 sd a6,32(s0) + 8001173c: 03143423 sd a7,40(s0) + 80011740: 00058793 mv a5,a1 + 80011744: fcf42223 sw a5,-60(s0) + 80011748: 629000ef jal ra,80012570 + 8001174c: 00050793 mv a5,a0 + 80011750: fef42623 sw a5,-20(s0) + 80011754: fec42783 lw a5,-20(s0) + 80011758: 0007879b sext.w a5,a5 + 8001175c: 0007da63 bgez a5,80011770 + 80011760: ff400513 li a0,-12 + 80011764: ae4f50ef jal ra,80006a48 + 80011768: fff00793 li a5,-1 + 8001176c: 06c0006f j 800117d8 + 80011770: fec42783 lw a5,-20(s0) + 80011774: 00078513 mv a0,a5 + 80011778: 6c1000ef jal ra,80012638 + 8001177c: fea43023 sd a0,-32(s0) + 80011780: fc442783 lw a5,-60(s0) + 80011784: 00078613 mv a2,a5 + 80011788: fc843583 ld a1,-56(s0) + 8001178c: fe043503 ld a0,-32(s0) + 80011790: 0b5010ef jal ra,80013044 + 80011794: 00050793 mv a5,a0 + 80011798: fcf42e23 sw a5,-36(s0) + 8001179c: fdc42783 lw a5,-36(s0) + 800117a0: 0007879b sext.w a5,a5 + 800117a4: 0207d463 bgez a5,800117cc + 800117a8: fe043503 ld a0,-32(s0) + 800117ac: 765000ef jal ra,80012710 + 800117b0: fe043503 ld a0,-32(s0) + 800117b4: 75d000ef jal ra,80012710 + 800117b8: fdc42783 lw a5,-36(s0) + 800117bc: 00078513 mv a0,a5 + 800117c0: a88f50ef jal ra,80006a48 + 800117c4: fff00793 li a5,-1 + 800117c8: 0100006f j 800117d8 + 800117cc: fe043503 ld a0,-32(s0) + 800117d0: 741000ef jal ra,80012710 + 800117d4: fec42783 lw a5,-20(s0) + 800117d8: 00078513 mv a0,a5 + 800117dc: 03813083 ld ra,56(sp) + 800117e0: 03013403 ld s0,48(sp) + 800117e4: 07010113 addi sp,sp,112 + 800117e8: 00008067 ret + +00000000800117ec : + 800117ec: fd010113 addi sp,sp,-48 + 800117f0: 02113423 sd ra,40(sp) + 800117f4: 02813023 sd s0,32(sp) + 800117f8: 03010413 addi s0,sp,48 + 800117fc: 00050793 mv a5,a0 + 80011800: fcf42e23 sw a5,-36(s0) + 80011804: fdc42783 lw a5,-36(s0) + 80011808: 00078513 mv a0,a5 + 8001180c: 62d000ef jal ra,80012638 + 80011810: fea43423 sd a0,-24(s0) + 80011814: fe843783 ld a5,-24(s0) + 80011818: 00079a63 bnez a5,8001182c + 8001181c: ff700513 li a0,-9 + 80011820: a28f50ef jal ra,80006a48 + 80011824: fff00793 li a5,-1 + 80011828: 0480006f j 80011870 + 8001182c: fe843503 ld a0,-24(s0) + 80011830: 25d010ef jal ra,8001328c + 80011834: 00050793 mv a5,a0 + 80011838: fef42223 sw a5,-28(s0) + 8001183c: fe843503 ld a0,-24(s0) + 80011840: 6d1000ef jal ra,80012710 + 80011844: fe442783 lw a5,-28(s0) + 80011848: 0007879b sext.w a5,a5 + 8001184c: 0007dc63 bgez a5,80011864 + 80011850: fe442783 lw a5,-28(s0) + 80011854: 00078513 mv a0,a5 + 80011858: 9f0f50ef jal ra,80006a48 + 8001185c: fff00793 li a5,-1 + 80011860: 0100006f j 80011870 + 80011864: fe843503 ld a0,-24(s0) + 80011868: 6a9000ef jal ra,80012710 + 8001186c: 00000793 li a5,0 + 80011870: 00078513 mv a0,a5 + 80011874: 02813083 ld ra,40(sp) + 80011878: 02013403 ld s0,32(sp) + 8001187c: 03010113 addi sp,sp,48 + 80011880: 00008067 ret + +0000000080011884 : + 80011884: fc010113 addi sp,sp,-64 + 80011888: 02113c23 sd ra,56(sp) + 8001188c: 02813823 sd s0,48(sp) + 80011890: 04010413 addi s0,sp,64 + 80011894: 00050793 mv a5,a0 + 80011898: fcb43823 sd a1,-48(s0) + 8001189c: fcc43423 sd a2,-56(s0) + 800118a0: fcf42e23 sw a5,-36(s0) + 800118a4: fdc42783 lw a5,-36(s0) + 800118a8: 00078513 mv a0,a5 + 800118ac: 58d000ef jal ra,80012638 + 800118b0: fea43423 sd a0,-24(s0) + 800118b4: fe843783 ld a5,-24(s0) + 800118b8: 00079a63 bnez a5,800118cc + 800118bc: ff700513 li a0,-9 + 800118c0: 988f50ef jal ra,80006a48 + 800118c4: fff00793 li a5,-1 + 800118c8: 0500006f j 80011918 + 800118cc: fc843603 ld a2,-56(s0) + 800118d0: fd043583 ld a1,-48(s0) + 800118d4: fe843503 ld a0,-24(s0) + 800118d8: 24d010ef jal ra,80013324 + 800118dc: 00050793 mv a5,a0 + 800118e0: fef42223 sw a5,-28(s0) + 800118e4: fe442783 lw a5,-28(s0) + 800118e8: 0007879b sext.w a5,a5 + 800118ec: 0207d063 bgez a5,8001190c + 800118f0: fe843503 ld a0,-24(s0) + 800118f4: 61d000ef jal ra,80012710 + 800118f8: fe442783 lw a5,-28(s0) + 800118fc: 00078513 mv a0,a5 + 80011900: 948f50ef jal ra,80006a48 + 80011904: fff00793 li a5,-1 + 80011908: 0100006f j 80011918 + 8001190c: fe843503 ld a0,-24(s0) + 80011910: 601000ef jal ra,80012710 + 80011914: fe442783 lw a5,-28(s0) + 80011918: 00078513 mv a0,a5 + 8001191c: 03813083 ld ra,56(sp) + 80011920: 03013403 ld s0,48(sp) + 80011924: 04010113 addi sp,sp,64 + 80011928: 00008067 ret + +000000008001192c : + 8001192c: fc010113 addi sp,sp,-64 + 80011930: 02113c23 sd ra,56(sp) + 80011934: 02813823 sd s0,48(sp) + 80011938: 04010413 addi s0,sp,64 + 8001193c: 00050793 mv a5,a0 + 80011940: fcb43823 sd a1,-48(s0) + 80011944: fcc43423 sd a2,-56(s0) + 80011948: fcf42e23 sw a5,-36(s0) + 8001194c: fdc42783 lw a5,-36(s0) + 80011950: 00078513 mv a0,a5 + 80011954: 4e5000ef jal ra,80012638 + 80011958: fea43423 sd a0,-24(s0) + 8001195c: fe843783 ld a5,-24(s0) + 80011960: 00079a63 bnez a5,80011974 + 80011964: ff700513 li a0,-9 + 80011968: 8e0f50ef jal ra,80006a48 + 8001196c: fff00793 li a5,-1 + 80011970: 0500006f j 800119c0 + 80011974: fc843603 ld a2,-56(s0) + 80011978: fd043583 ld a1,-48(s0) + 8001197c: fe843503 ld a0,-24(s0) + 80011980: 455010ef jal ra,800135d4 + 80011984: 00050793 mv a5,a0 + 80011988: fef42223 sw a5,-28(s0) + 8001198c: fe442783 lw a5,-28(s0) + 80011990: 0007879b sext.w a5,a5 + 80011994: 0207d063 bgez a5,800119b4 + 80011998: fe843503 ld a0,-24(s0) + 8001199c: 575000ef jal ra,80012710 + 800119a0: fe442783 lw a5,-28(s0) + 800119a4: 00078513 mv a0,a5 + 800119a8: 8a0f50ef jal ra,80006a48 + 800119ac: fff00793 li a5,-1 + 800119b0: 0100006f j 800119c0 + 800119b4: fe843503 ld a0,-24(s0) + 800119b8: 559000ef jal ra,80012710 + 800119bc: fe442783 lw a5,-28(s0) + 800119c0: 00078513 mv a0,a5 + 800119c4: 03813083 ld ra,56(sp) + 800119c8: 03013403 ld s0,48(sp) + 800119cc: 04010113 addi sp,sp,64 + 800119d0: 00008067 ret + +00000000800119d4 : + 800119d4: fd010113 addi sp,sp,-48 + 800119d8: 02113423 sd ra,40(sp) + 800119dc: 02813023 sd s0,32(sp) + 800119e0: 03010413 addi s0,sp,48 + 800119e4: 00050793 mv a5,a0 + 800119e8: fcb43823 sd a1,-48(s0) + 800119ec: 00060713 mv a4,a2 + 800119f0: fcf42e23 sw a5,-36(s0) + 800119f4: 00070793 mv a5,a4 + 800119f8: fcf42c23 sw a5,-40(s0) + 800119fc: fdc42783 lw a5,-36(s0) + 80011a00: 00078513 mv a0,a5 + 80011a04: 435000ef jal ra,80012638 + 80011a08: fea43423 sd a0,-24(s0) + 80011a0c: fe843783 ld a5,-24(s0) + 80011a10: 00079a63 bnez a5,80011a24 + 80011a14: ff700513 li a0,-9 + 80011a18: 830f50ef jal ra,80006a48 + 80011a1c: fff00793 li a5,-1 + 80011a20: 0f40006f j 80011b14 + 80011a24: fd842783 lw a5,-40(s0) + 80011a28: 0007871b sext.w a4,a5 + 80011a2c: 00200793 li a5,2 + 80011a30: 04f70463 beq a4,a5,80011a78 + 80011a34: fd842783 lw a5,-40(s0) + 80011a38: 0007871b sext.w a4,a5 + 80011a3c: 00200793 li a5,2 + 80011a40: 04e7c863 blt a5,a4,80011a90 + 80011a44: fd842783 lw a5,-40(s0) + 80011a48: 0007879b sext.w a5,a5 + 80011a4c: 04078e63 beqz a5,80011aa8 + 80011a50: fd842783 lw a5,-40(s0) + 80011a54: 0007871b sext.w a4,a5 + 80011a58: 00100793 li a5,1 + 80011a5c: 02f71a63 bne a4,a5,80011a90 + 80011a60: fe843783 ld a5,-24(s0) + 80011a64: 0387b783 ld a5,56(a5) + 80011a68: fd043703 ld a4,-48(s0) + 80011a6c: 00f707b3 add a5,a4,a5 + 80011a70: fcf43823 sd a5,-48(s0) + 80011a74: 0380006f j 80011aac + 80011a78: fe843783 ld a5,-24(s0) + 80011a7c: 0307b703 ld a4,48(a5) + 80011a80: fd043783 ld a5,-48(s0) + 80011a84: 00f707b3 add a5,a4,a5 + 80011a88: fcf43823 sd a5,-48(s0) + 80011a8c: 0200006f j 80011aac + 80011a90: fe843503 ld a0,-24(s0) + 80011a94: 47d000ef jal ra,80012710 + 80011a98: fea00513 li a0,-22 + 80011a9c: fadf40ef jal ra,80006a48 + 80011aa0: fff00793 li a5,-1 + 80011aa4: 0700006f j 80011b14 + 80011aa8: 00000013 nop + 80011aac: fd043783 ld a5,-48(s0) + 80011ab0: 0007de63 bgez a5,80011acc + 80011ab4: fe843503 ld a0,-24(s0) + 80011ab8: 459000ef jal ra,80012710 + 80011abc: fea00513 li a0,-22 + 80011ac0: f89f40ef jal ra,80006a48 + 80011ac4: fff00793 li a5,-1 + 80011ac8: 04c0006f j 80011b14 + 80011acc: fd043583 ld a1,-48(s0) + 80011ad0: fe843503 ld a0,-24(s0) + 80011ad4: 379010ef jal ra,8001364c + 80011ad8: 00050793 mv a5,a0 + 80011adc: fef42223 sw a5,-28(s0) + 80011ae0: fe442783 lw a5,-28(s0) + 80011ae4: 0007879b sext.w a5,a5 + 80011ae8: 0207d063 bgez a5,80011b08 + 80011aec: fe843503 ld a0,-24(s0) + 80011af0: 421000ef jal ra,80012710 + 80011af4: fe442783 lw a5,-28(s0) + 80011af8: 00078513 mv a0,a5 + 80011afc: f4df40ef jal ra,80006a48 + 80011b00: fff00793 li a5,-1 + 80011b04: 0100006f j 80011b14 + 80011b08: fe843503 ld a0,-24(s0) + 80011b0c: 405000ef jal ra,80012710 + 80011b10: fd043783 ld a5,-48(s0) + 80011b14: 00078513 mv a0,a5 + 80011b18: 02813083 ld ra,40(sp) + 80011b1c: 02013403 ld s0,32(sp) + 80011b20: 03010113 addi sp,sp,48 + 80011b24: 00008067 ret + +0000000080011b28 : + 80011b28: fd010113 addi sp,sp,-48 + 80011b2c: 02113423 sd ra,40(sp) + 80011b30: 02813023 sd s0,32(sp) + 80011b34: 03010413 addi s0,sp,48 + 80011b38: fca43c23 sd a0,-40(s0) + 80011b3c: fcb43823 sd a1,-48(s0) + 80011b40: fd043583 ld a1,-48(s0) + 80011b44: fd843503 ld a0,-40(s0) + 80011b48: 599010ef jal ra,800138e0 + 80011b4c: 00050793 mv a5,a0 + 80011b50: fef42623 sw a5,-20(s0) + 80011b54: fec42783 lw a5,-20(s0) + 80011b58: 0007879b sext.w a5,a5 + 80011b5c: 0007dc63 bgez a5,80011b74 + 80011b60: fec42783 lw a5,-20(s0) + 80011b64: 00078513 mv a0,a5 + 80011b68: ee1f40ef jal ra,80006a48 + 80011b6c: fff00793 li a5,-1 + 80011b70: 0080006f j 80011b78 + 80011b74: 00000793 li a5,0 + 80011b78: 00078513 mv a0,a5 + 80011b7c: 02813083 ld ra,40(sp) + 80011b80: 02013403 ld s0,32(sp) + 80011b84: 03010113 addi sp,sp,48 + 80011b88: 00008067 ret + +0000000080011b8c : + 80011b8c: fd010113 addi sp,sp,-48 + 80011b90: 02113423 sd ra,40(sp) + 80011b94: 02813023 sd s0,32(sp) + 80011b98: 03010413 addi s0,sp,48 + 80011b9c: fca43c23 sd a0,-40(s0) + 80011ba0: fd843503 ld a0,-40(s0) + 80011ba4: 0c5010ef jal ra,80013468 + 80011ba8: 00050793 mv a5,a0 + 80011bac: fef42623 sw a5,-20(s0) + 80011bb0: fec42783 lw a5,-20(s0) + 80011bb4: 0007879b sext.w a5,a5 + 80011bb8: 0007dc63 bgez a5,80011bd0 + 80011bbc: fec42783 lw a5,-20(s0) + 80011bc0: 00078513 mv a0,a5 + 80011bc4: e85f40ef jal ra,80006a48 + 80011bc8: fff00793 li a5,-1 + 80011bcc: 0080006f j 80011bd4 + 80011bd0: 00000793 li a5,0 + 80011bd4: 00078513 mv a0,a5 + 80011bd8: 02813083 ld ra,40(sp) + 80011bdc: 02013403 ld s0,32(sp) + 80011be0: 03010113 addi sp,sp,48 + 80011be4: 00008067 ret + +0000000080011be8 : + 80011be8: fd010113 addi sp,sp,-48 + 80011bec: 02113423 sd ra,40(sp) + 80011bf0: 02813023 sd s0,32(sp) + 80011bf4: 03010413 addi s0,sp,48 + 80011bf8: fca43c23 sd a0,-40(s0) + 80011bfc: fcb43823 sd a1,-48(s0) + 80011c00: fd043583 ld a1,-48(s0) + 80011c04: fd843503 ld a0,-40(s0) + 80011c08: 2d5010ef jal ra,800136dc + 80011c0c: 00050793 mv a5,a0 + 80011c10: fef42623 sw a5,-20(s0) + 80011c14: fec42783 lw a5,-20(s0) + 80011c18: 0007879b sext.w a5,a5 + 80011c1c: 0007dc63 bgez a5,80011c34 + 80011c20: fec42783 lw a5,-20(s0) + 80011c24: 00078513 mv a0,a5 + 80011c28: e21f40ef jal ra,80006a48 + 80011c2c: fff00793 li a5,-1 + 80011c30: 0080006f j 80011c38 + 80011c34: fec42783 lw a5,-20(s0) + 80011c38: 00078513 mv a0,a5 + 80011c3c: 02813083 ld ra,40(sp) + 80011c40: 02013403 ld s0,32(sp) + 80011c44: 03010113 addi sp,sp,48 + 80011c48: 00008067 ret + +0000000080011c4c : + 80011c4c: fc010113 addi sp,sp,-64 + 80011c50: 02113c23 sd ra,56(sp) + 80011c54: 02813823 sd s0,48(sp) + 80011c58: 04010413 addi s0,sp,64 + 80011c5c: fca43423 sd a0,-56(s0) + 80011c60: 00058793 mv a5,a1 + 80011c64: fcf42223 sw a5,-60(s0) + 80011c68: 109000ef jal ra,80012570 + 80011c6c: 00050793 mv a5,a0 + 80011c70: fef42623 sw a5,-20(s0) + 80011c74: fec42783 lw a5,-20(s0) + 80011c78: 0007871b sext.w a4,a5 + 80011c7c: fff00793 li a5,-1 + 80011c80: 00f71a63 bne a4,a5,80011c94 + 80011c84: ff400513 li a0,-12 + 80011c88: dc1f40ef jal ra,80006a48 + 80011c8c: fff00793 li a5,-1 + 80011c90: 07c0006f j 80011d0c + 80011c94: fec42783 lw a5,-20(s0) + 80011c98: 00078513 mv a0,a5 + 80011c9c: 19d000ef jal ra,80012638 + 80011ca0: fea43023 sd a0,-32(s0) + 80011ca4: 000107b7 lui a5,0x10 + 80011ca8: 04078613 addi a2,a5,64 # 10040 <__STACKSIZE__+0xc040> + 80011cac: fc843583 ld a1,-56(s0) + 80011cb0: fe043503 ld a0,-32(s0) + 80011cb4: 390010ef jal ra,80013044 + 80011cb8: 00050793 mv a5,a0 + 80011cbc: fcf42e23 sw a5,-36(s0) + 80011cc0: fdc42783 lw a5,-36(s0) + 80011cc4: 0007879b sext.w a5,a5 + 80011cc8: 0207d463 bgez a5,80011cf0 + 80011ccc: fe043503 ld a0,-32(s0) + 80011cd0: 241000ef jal ra,80012710 + 80011cd4: fe043503 ld a0,-32(s0) + 80011cd8: 239000ef jal ra,80012710 + 80011cdc: fdc42783 lw a5,-36(s0) + 80011ce0: 00078513 mv a0,a5 + 80011ce4: d65f40ef jal ra,80006a48 + 80011ce8: fff00793 li a5,-1 + 80011cec: 0200006f j 80011d0c + 80011cf0: fe043503 ld a0,-32(s0) + 80011cf4: 598010ef jal ra,8001328c + 80011cf8: fe043503 ld a0,-32(s0) + 80011cfc: 215000ef jal ra,80012710 + 80011d00: fe043503 ld a0,-32(s0) + 80011d04: 20d000ef jal ra,80012710 + 80011d08: 00000793 li a5,0 + 80011d0c: 00078513 mv a0,a5 + 80011d10: 03813083 ld ra,56(sp) + 80011d14: 03013403 ld s0,48(sp) + 80011d18: 04010113 addi sp,sp,64 + 80011d1c: 00008067 ret + +0000000080011d20 : + 80011d20: fc010113 addi sp,sp,-64 + 80011d24: 02113c23 sd ra,56(sp) + 80011d28: 02813823 sd s0,48(sp) + 80011d2c: 04010413 addi s0,sp,64 + 80011d30: fca43423 sd a0,-56(s0) + 80011d34: fe043423 sd zero,-24(s0) + 80011d38: 039000ef jal ra,80012570 + 80011d3c: 00050793 mv a5,a0 + 80011d40: fef42223 sw a5,-28(s0) + 80011d44: fe442783 lw a5,-28(s0) + 80011d48: 0007871b sext.w a4,a5 + 80011d4c: fff00793 li a5,-1 + 80011d50: 00f71a63 bne a4,a5,80011d64 + 80011d54: ff400513 li a0,-12 + 80011d58: cf1f40ef jal ra,80006a48 + 80011d5c: 00000793 li a5,0 + 80011d60: 0ac0006f j 80011e0c + 80011d64: fe442783 lw a5,-28(s0) + 80011d68: 00078513 mv a0,a5 + 80011d6c: 0cd000ef jal ra,80012638 + 80011d70: fca43c23 sd a0,-40(s0) + 80011d74: 00010637 lui a2,0x10 + 80011d78: fc843583 ld a1,-56(s0) + 80011d7c: fd843503 ld a0,-40(s0) + 80011d80: 2c4010ef jal ra,80013044 + 80011d84: 00050793 mv a5,a0 + 80011d88: fcf42a23 sw a5,-44(s0) + 80011d8c: fd442783 lw a5,-44(s0) + 80011d90: 0007879b sext.w a5,a5 + 80011d94: 0407cc63 bltz a5,80011dec + 80011d98: 20c00513 li a0,524 + 80011d9c: 88df20ef jal ra,80004628 + 80011da0: fea43423 sd a0,-24(s0) + 80011da4: fe843783 ld a5,-24(s0) + 80011da8: 00079c63 bnez a5,80011dc0 + 80011dac: fd843503 ld a0,-40(s0) + 80011db0: 4dc010ef jal ra,8001328c + 80011db4: fd843503 ld a0,-40(s0) + 80011db8: 159000ef jal ra,80012710 + 80011dbc: 0200006f j 80011ddc + 80011dc0: 20c00613 li a2,524 + 80011dc4: 00000593 li a1,0 + 80011dc8: fe843503 ld a0,-24(s0) + 80011dcc: c4dee0ef jal ra,80000a18 + 80011dd0: fe843783 ld a5,-24(s0) + 80011dd4: fe442703 lw a4,-28(s0) + 80011dd8: 00e7a023 sw a4,0(a5) + 80011ddc: fd843503 ld a0,-40(s0) + 80011de0: 131000ef jal ra,80012710 + 80011de4: fe843783 ld a5,-24(s0) + 80011de8: 0240006f j 80011e0c + 80011dec: fd843503 ld a0,-40(s0) + 80011df0: 121000ef jal ra,80012710 + 80011df4: fd843503 ld a0,-40(s0) + 80011df8: 119000ef jal ra,80012710 + 80011dfc: fd442783 lw a5,-44(s0) + 80011e00: 00078513 mv a0,a5 + 80011e04: c45f40ef jal ra,80006a48 + 80011e08: 00000793 li a5,0 + 80011e0c: 00078513 mv a0,a5 + 80011e10: 03813083 ld ra,56(sp) + 80011e14: 03013403 ld s0,48(sp) + 80011e18: 04010113 addi sp,sp,64 + 80011e1c: 00008067 ret + +0000000080011e20 : + 80011e20: fc010113 addi sp,sp,-64 + 80011e24: 02113c23 sd ra,56(sp) + 80011e28: 02813823 sd s0,48(sp) + 80011e2c: 04010413 addi s0,sp,64 + 80011e30: fca43423 sd a0,-56(s0) + 80011e34: fc843783 ld a5,-56(s0) + 80011e38: 0007a783 lw a5,0(a5) + 80011e3c: 00078513 mv a0,a5 + 80011e40: 7f8000ef jal ra,80012638 + 80011e44: fea43423 sd a0,-24(s0) + 80011e48: fe843783 ld a5,-24(s0) + 80011e4c: 00079a63 bnez a5,80011e60 + 80011e50: ff700513 li a0,-9 + 80011e54: bf5f40ef jal ra,80006a48 + 80011e58: 00000793 li a5,0 + 80011e5c: 0e40006f j 80011f40 + 80011e60: fc843783 ld a5,-56(s0) + 80011e64: 2047a783 lw a5,516(a5) + 80011e68: 04078063 beqz a5,80011ea8 + 80011e6c: fc843783 ld a5,-56(s0) + 80011e70: 2087a783 lw a5,520(a5) + 80011e74: fc843703 ld a4,-56(s0) + 80011e78: 00f707b3 add a5,a4,a5 + 80011e7c: 00478793 addi a5,a5,4 + 80011e80: fef43023 sd a5,-32(s0) + 80011e84: fc843783 ld a5,-56(s0) + 80011e88: 2087a703 lw a4,520(a5) + 80011e8c: fe043783 ld a5,-32(s0) + 80011e90: 0027d783 lhu a5,2(a5) + 80011e94: 0007879b sext.w a5,a5 + 80011e98: 00f707bb addw a5,a4,a5 + 80011e9c: 0007871b sext.w a4,a5 + 80011ea0: fc843783 ld a5,-56(s0) + 80011ea4: 20e7a423 sw a4,520(a5) + 80011ea8: fc843783 ld a5,-56(s0) + 80011eac: 2047a783 lw a5,516(a5) + 80011eb0: 00078c63 beqz a5,80011ec8 + 80011eb4: fc843783 ld a5,-56(s0) + 80011eb8: 2087a703 lw a4,520(a5) + 80011ebc: fc843783 ld a5,-56(s0) + 80011ec0: 2047a783 lw a5,516(a5) + 80011ec4: 06f74063 blt a4,a5,80011f24 + 80011ec8: fc843783 ld a5,-56(s0) + 80011ecc: 00478793 addi a5,a5,4 + 80011ed0: 1ff00613 li a2,511 + 80011ed4: 00078593 mv a1,a5 + 80011ed8: fe843503 ld a0,-24(s0) + 80011edc: 4f8010ef jal ra,800133d4 + 80011ee0: 00050793 mv a5,a0 + 80011ee4: fcf42e23 sw a5,-36(s0) + 80011ee8: fdc42783 lw a5,-36(s0) + 80011eec: 0007879b sext.w a5,a5 + 80011ef0: 02f04063 bgtz a5,80011f10 + 80011ef4: fe843503 ld a0,-24(s0) + 80011ef8: 019000ef jal ra,80012710 + 80011efc: fdc42783 lw a5,-36(s0) + 80011f00: 00078513 mv a0,a5 + 80011f04: b45f40ef jal ra,80006a48 + 80011f08: 00000793 li a5,0 + 80011f0c: 0340006f j 80011f40 + 80011f10: fc843783 ld a5,-56(s0) + 80011f14: fdc42703 lw a4,-36(s0) + 80011f18: 20e7a223 sw a4,516(a5) + 80011f1c: fc843783 ld a5,-56(s0) + 80011f20: 2007a423 sw zero,520(a5) + 80011f24: fe843503 ld a0,-24(s0) + 80011f28: 7e8000ef jal ra,80012710 + 80011f2c: fc843783 ld a5,-56(s0) + 80011f30: 00478793 addi a5,a5,4 + 80011f34: fc843703 ld a4,-56(s0) + 80011f38: 20872703 lw a4,520(a4) + 80011f3c: 00e787b3 add a5,a5,a4 + 80011f40: 00078513 mv a0,a5 + 80011f44: 03813083 ld ra,56(sp) + 80011f48: 03013403 ld s0,48(sp) + 80011f4c: 04010113 addi sp,sp,64 + 80011f50: 00008067 ret + +0000000080011f54 : + 80011f54: fd010113 addi sp,sp,-48 + 80011f58: 02113423 sd ra,40(sp) + 80011f5c: 02813023 sd s0,32(sp) + 80011f60: 03010413 addi s0,sp,48 + 80011f64: fca43c23 sd a0,-40(s0) + 80011f68: fd843783 ld a5,-40(s0) + 80011f6c: 0007a783 lw a5,0(a5) + 80011f70: 00078513 mv a0,a5 + 80011f74: 6c4000ef jal ra,80012638 + 80011f78: fea43423 sd a0,-24(s0) + 80011f7c: fe843783 ld a5,-24(s0) + 80011f80: 00079863 bnez a5,80011f90 + 80011f84: ff700513 li a0,-9 + 80011f88: ac1f40ef jal ra,80006a48 + 80011f8c: 0380006f j 80011fc4 + 80011f90: 00000593 li a1,0 + 80011f94: fe843503 ld a0,-24(s0) + 80011f98: 6b4010ef jal ra,8001364c + 80011f9c: 00050793 mv a5,a0 + 80011fa0: 0007ce63 bltz a5,80011fbc + 80011fa4: fd843783 ld a5,-40(s0) + 80011fa8: 2007a423 sw zero,520(a5) + 80011fac: fd843783 ld a5,-40(s0) + 80011fb0: 2087a703 lw a4,520(a5) + 80011fb4: fd843783 ld a5,-40(s0) + 80011fb8: 20e7a223 sw a4,516(a5) + 80011fbc: fe843503 ld a0,-24(s0) + 80011fc0: 750000ef jal ra,80012710 + 80011fc4: 02813083 ld ra,40(sp) + 80011fc8: 02013403 ld s0,32(sp) + 80011fcc: 03010113 addi sp,sp,48 + 80011fd0: 00008067 ret + +0000000080011fd4 : + 80011fd4: fd010113 addi sp,sp,-48 + 80011fd8: 02113423 sd ra,40(sp) + 80011fdc: 02813023 sd s0,32(sp) + 80011fe0: 03010413 addi s0,sp,48 + 80011fe4: fca43c23 sd a0,-40(s0) + 80011fe8: fd843783 ld a5,-40(s0) + 80011fec: 0007a783 lw a5,0(a5) + 80011ff0: 00078513 mv a0,a5 + 80011ff4: 644000ef jal ra,80012638 + 80011ff8: fea43423 sd a0,-24(s0) + 80011ffc: fe843783 ld a5,-24(s0) + 80012000: 00079a63 bnez a5,80012014 + 80012004: ff700513 li a0,-9 + 80012008: a41f40ef jal ra,80006a48 + 8001200c: fff00793 li a5,-1 + 80012010: 0500006f j 80012060 + 80012014: fe843503 ld a0,-24(s0) + 80012018: 274010ef jal ra,8001328c + 8001201c: 00050793 mv a5,a0 + 80012020: fef42223 sw a5,-28(s0) + 80012024: fe843503 ld a0,-24(s0) + 80012028: 6e8000ef jal ra,80012710 + 8001202c: fe843503 ld a0,-24(s0) + 80012030: 6e0000ef jal ra,80012710 + 80012034: fd843503 ld a0,-40(s0) + 80012038: e5df20ef jal ra,80004e94 + 8001203c: fe442783 lw a5,-28(s0) + 80012040: 0007879b sext.w a5,a5 + 80012044: 0007dc63 bgez a5,8001205c + 80012048: fe442783 lw a5,-28(s0) + 8001204c: 00078513 mv a0,a5 + 80012050: 9f9f40ef jal ra,80006a48 + 80012054: fff00793 li a5,-1 + 80012058: 0080006f j 80012060 + 8001205c: 00000793 li a5,0 + 80012060: 00078513 mv a0,a5 + 80012064: 02813083 ld ra,40(sp) + 80012068: 02013403 ld s0,32(sp) + 8001206c: 03010113 addi sp,sp,48 + 80012070: 00008067 ret + +0000000080012074 : + 80012074: fd010113 addi sp,sp,-48 + 80012078: 02113423 sd ra,40(sp) + 8001207c: 02813023 sd s0,32(sp) + 80012080: 03010413 addi s0,sp,48 + 80012084: fca43c23 sd a0,-40(s0) + 80012088: fd843783 ld a5,-40(s0) + 8001208c: 02079463 bnez a5,800120b4 + 80012090: 220000ef jal ra,800122b0 + 80012094: 00008597 auipc a1,0x8 + 80012098: e0c58593 addi a1,a1,-500 # 80019ea0 + 8001209c: 00006517 auipc a0,0x6 + 800120a0: e3450513 addi a0,a0,-460 # 80017ed0 + 800120a4: 978f60ef jal ra,8000821c + 800120a8: 278000ef jal ra,80012320 + 800120ac: 00000793 li a5,0 + 800120b0: 0a80006f j 80012158 + 800120b4: fd843503 ld a0,-40(s0) + 800120b8: f9cee0ef jal ra,80000854 + 800120bc: 00050713 mv a4,a0 + 800120c0: 10000793 li a5,256 + 800120c4: 00e7fa63 bgeu a5,a4,800120d8 + 800120c8: fec00513 li a0,-20 + 800120cc: 97df40ef jal ra,80006a48 + 800120d0: fff00793 li a5,-1 + 800120d4: 0840006f j 80012158 + 800120d8: fd843583 ld a1,-40(s0) + 800120dc: 00000513 li a0,0 + 800120e0: 13d000ef jal ra,80012a1c + 800120e4: fea43423 sd a0,-24(s0) + 800120e8: fe843783 ld a5,-24(s0) + 800120ec: 00079a63 bnez a5,80012100 + 800120f0: fec00513 li a0,-20 + 800120f4: 955f40ef jal ra,80006a48 + 800120f8: fff00793 li a5,-1 + 800120fc: 05c0006f j 80012158 + 80012100: 1b0000ef jal ra,800122b0 + 80012104: fe843503 ld a0,-24(s0) + 80012108: c19ff0ef jal ra,80011d20 + 8001210c: fea43023 sd a0,-32(s0) + 80012110: fe043783 ld a5,-32(s0) + 80012114: 00079c63 bnez a5,8001212c + 80012118: fe843503 ld a0,-24(s0) + 8001211c: d79f20ef jal ra,80004e94 + 80012120: 200000ef jal ra,80012320 + 80012124: fff00793 li a5,-1 + 80012128: 0300006f j 80012158 + 8001212c: fe043503 ld a0,-32(s0) + 80012130: ea5ff0ef jal ra,80011fd4 + 80012134: 10000613 li a2,256 + 80012138: fe843583 ld a1,-24(s0) + 8001213c: 00008517 auipc a0,0x8 + 80012140: d6450513 addi a0,a0,-668 # 80019ea0 + 80012144: fbcee0ef jal ra,80000900 + 80012148: fe843503 ld a0,-24(s0) + 8001214c: d49f20ef jal ra,80004e94 + 80012150: 1d0000ef jal ra,80012320 + 80012154: 00000793 li a5,0 + 80012158: 00078513 mv a0,a5 + 8001215c: 02813083 ld ra,40(sp) + 80012160: 02013403 ld s0,32(sp) + 80012164: 03010113 addi sp,sp,48 + 80012168: 00008067 ret + +000000008001216c : + 8001216c: fe010113 addi sp,sp,-32 + 80012170: 00113c23 sd ra,24(sp) + 80012174: 00813823 sd s0,16(sp) + 80012178: 02010413 addi s0,sp,32 + 8001217c: fea43423 sd a0,-24(s0) + 80012180: feb43023 sd a1,-32(s0) + 80012184: 12c000ef jal ra,800122b0 + 80012188: fe043603 ld a2,-32(s0) + 8001218c: 00008597 auipc a1,0x8 + 80012190: d1458593 addi a1,a1,-748 # 80019ea0 + 80012194: fe843503 ld a0,-24(s0) + 80012198: f68ee0ef jal ra,80000900 + 8001219c: 184000ef jal ra,80012320 + 800121a0: fe843783 ld a5,-24(s0) + 800121a4: 00078513 mv a0,a5 + 800121a8: 01813083 ld ra,24(sp) + 800121ac: 01013403 ld s0,16(sp) + 800121b0: 02010113 addi sp,sp,32 + 800121b4: 00008067 ret + +00000000800121b8 : + 800121b8: ff010113 addi sp,sp,-16 + 800121bc: 00113423 sd ra,8(sp) + 800121c0: 00813023 sd s0,0(sp) + 800121c4: 01010413 addi s0,sp,16 + 800121c8: 00010797 auipc a5,0x10 + 800121cc: f3078793 addi a5,a5,-208 # 800220f8 + 800121d0: 0007a783 lw a5,0(a5) + 800121d4: 00078c63 beqz a5,800121ec + 800121d8: 00006517 auipc a0,0x6 + 800121dc: d0050513 addi a0,a0,-768 # 80017ed8 + 800121e0: 83cf60ef jal ra,8000821c + 800121e4: 00000793 li a5,0 + 800121e8: 0b40006f j 8001229c + 800121ec: 01000613 li a2,16 + 800121f0: 00000593 li a1,0 + 800121f4: 00019517 auipc a0,0x19 + 800121f8: e9c50513 addi a0,a0,-356 # 8002b090 + 800121fc: 81dee0ef jal ra,80000a18 + 80012200: 04000613 li a2,64 + 80012204: 00000593 li a1,0 + 80012208: 00019517 auipc a0,0x19 + 8001220c: e9850513 addi a0,a0,-360 # 8002b0a0 + 80012210: 809ee0ef jal ra,80000a18 + 80012214: 01000613 li a2,16 + 80012218: 00000593 li a1,0 + 8001221c: 00019517 auipc a0,0x19 + 80012220: f0c50513 addi a0,a0,-244 # 8002b128 <_fdtab> + 80012224: ff4ee0ef jal ra,80000a18 + 80012228: 00000613 li a2,0 + 8001222c: 00006597 auipc a1,0x6 + 80012230: cc458593 addi a1,a1,-828 # 80017ef0 + 80012234: 00019517 auipc a0,0x19 + 80012238: eac50513 addi a0,a0,-340 # 8002b0e0 + 8001223c: 8fcef0ef jal ra,80001338 + 80012240: 10000613 li a2,256 + 80012244: 00000593 li a1,0 + 80012248: 00008517 auipc a0,0x8 + 8001224c: c5850513 addi a0,a0,-936 # 80019ea0 + 80012250: fc8ee0ef jal ra,80000a18 + 80012254: 00008797 auipc a5,0x8 + 80012258: c4c78793 addi a5,a5,-948 # 80019ea0 + 8001225c: 02f00713 li a4,47 + 80012260: 00e78023 sb a4,0(a5) + 80012264: 1f5020ef jal ra,80014c58 + 80012268: 00000713 li a4,0 + 8001226c: 00000693 li a3,0 + 80012270: 00006617 auipc a2,0x6 + 80012274: c8860613 addi a2,a2,-888 # 80017ef8 + 80012278: 00006597 auipc a1,0x6 + 8001227c: c8858593 addi a1,a1,-888 # 80017f00 + 80012280: 00000513 li a0,0 + 80012284: bf9fe0ef jal ra,80010e7c + 80012288: 00010797 auipc a5,0x10 + 8001228c: e7078793 addi a5,a5,-400 # 800220f8 + 80012290: 00100713 li a4,1 + 80012294: 00e7a023 sw a4,0(a5) + 80012298: 00000793 li a5,0 + 8001229c: 00078513 mv a0,a5 + 800122a0: 00813083 ld ra,8(sp) + 800122a4: 00013403 ld s0,0(sp) + 800122a8: 01010113 addi sp,sp,16 + 800122ac: 00008067 ret + +00000000800122b0 : + 800122b0: fe010113 addi sp,sp,-32 + 800122b4: 00113c23 sd ra,24(sp) + 800122b8: 00813823 sd s0,16(sp) + 800122bc: 02010413 addi s0,sp,32 + 800122c0: ff900793 li a5,-7 + 800122c4: fef43423 sd a5,-24(s0) + 800122c8: 0180006f j 800122e0 + 800122cc: fff00593 li a1,-1 + 800122d0: 00019517 auipc a0,0x19 + 800122d4: e1050513 addi a0,a0,-496 # 8002b0e0 + 800122d8: 90cef0ef jal ra,800013e4 + 800122dc: fea43423 sd a0,-24(s0) + 800122e0: fe843703 ld a4,-24(s0) + 800122e4: ff900793 li a5,-7 + 800122e8: fef702e3 beq a4,a5,800122cc + 800122ec: fe843783 ld a5,-24(s0) + 800122f0: 00078e63 beqz a5,8001230c + 800122f4: 06b00613 li a2,107 + 800122f8: 00007597 auipc a1,0x7 + 800122fc: 23058593 addi a1,a1,560 # 80019528 <__FUNCTION__.4119> + 80012300: 00006517 auipc a0,0x6 + 80012304: c0850513 addi a0,a0,-1016 # 80017f08 + 80012308: 974f60ef jal ra,8000847c + 8001230c: 00000013 nop + 80012310: 01813083 ld ra,24(sp) + 80012314: 01013403 ld s0,16(sp) + 80012318: 02010113 addi sp,sp,32 + 8001231c: 00008067 ret + +0000000080012320 : + 80012320: ff010113 addi sp,sp,-16 + 80012324: 00113423 sd ra,8(sp) + 80012328: 00813023 sd s0,0(sp) + 8001232c: 01010413 addi s0,sp,16 + 80012330: 00019517 auipc a0,0x19 + 80012334: db050513 addi a0,a0,-592 # 8002b0e0 + 80012338: becef0ef jal ra,80001724 + 8001233c: 00000013 nop + 80012340: 00813083 ld ra,8(sp) + 80012344: 00013403 ld s0,0(sp) + 80012348: 01010113 addi sp,sp,16 + 8001234c: 00008067 ret + +0000000080012350 : + 80012350: fb010113 addi sp,sp,-80 + 80012354: 04113423 sd ra,72(sp) + 80012358: 04813023 sd s0,64(sp) + 8001235c: 02913c23 sd s1,56(sp) + 80012360: 05010413 addi s0,sp,80 + 80012364: faa43c23 sd a0,-72(s0) + 80012368: 00058793 mv a5,a1 + 8001236c: faf42a23 sw a5,-76(s0) + 80012370: fb442783 lw a5,-76(s0) + 80012374: fcf42e23 sw a5,-36(s0) + 80012378: 04c0006f j 800123c4 + 8001237c: fb843783 ld a5,-72(s0) + 80012380: 0087b703 ld a4,8(a5) + 80012384: fdc42783 lw a5,-36(s0) + 80012388: 00379793 slli a5,a5,0x3 + 8001238c: 00f707b3 add a5,a4,a5 + 80012390: 0007b783 ld a5,0(a5) + 80012394: 04078663 beqz a5,800123e0 + 80012398: fb843783 ld a5,-72(s0) + 8001239c: 0087b703 ld a4,8(a5) + 800123a0: fdc42783 lw a5,-36(s0) + 800123a4: 00379793 slli a5,a5,0x3 + 800123a8: 00f707b3 add a5,a4,a5 + 800123ac: 0007b783 ld a5,0(a5) + 800123b0: 0107a783 lw a5,16(a5) + 800123b4: 02078a63 beqz a5,800123e8 + 800123b8: fdc42783 lw a5,-36(s0) + 800123bc: 0017879b addiw a5,a5,1 + 800123c0: fcf42e23 sw a5,-36(s0) + 800123c4: fb843783 ld a5,-72(s0) + 800123c8: 0007a783 lw a5,0(a5) + 800123cc: 0007871b sext.w a4,a5 + 800123d0: fdc42783 lw a5,-36(s0) + 800123d4: 0007879b sext.w a5,a5 + 800123d8: fae7c2e3 blt a5,a4,8001237c + 800123dc: 0100006f j 800123ec + 800123e0: 00000013 nop + 800123e4: 0080006f j 800123ec + 800123e8: 00000013 nop + 800123ec: fb843783 ld a5,-72(s0) + 800123f0: 0007a703 lw a4,0(a5) + 800123f4: fdc42783 lw a5,-36(s0) + 800123f8: 0cf71463 bne a4,a5,800124c0 + 800123fc: fb843783 ld a5,-72(s0) + 80012400: 0007a783 lw a5,0(a5) + 80012404: 00078713 mv a4,a5 + 80012408: 01f00793 li a5,31 + 8001240c: 0ae7ea63 bltu a5,a4,800124c0 + 80012410: fb843783 ld a5,-72(s0) + 80012414: 0007a783 lw a5,0(a5) + 80012418: 0047879b addiw a5,a5,4 + 8001241c: 0007879b sext.w a5,a5 + 80012420: fcf42a23 sw a5,-44(s0) + 80012424: fd442783 lw a5,-44(s0) + 80012428: 0007869b sext.w a3,a5 + 8001242c: 02000713 li a4,32 + 80012430: 00d75463 bge a4,a3,80012438 + 80012434: 02000793 li a5,32 + 80012438: fcf42a23 sw a5,-44(s0) + 8001243c: fb843783 ld a5,-72(s0) + 80012440: 0087b703 ld a4,8(a5) + 80012444: fd442783 lw a5,-44(s0) + 80012448: 00379793 slli a5,a5,0x3 + 8001244c: 00078593 mv a1,a5 + 80012450: 00070513 mv a0,a4 + 80012454: ed8f20ef jal ra,80004b2c + 80012458: fca43423 sd a0,-56(s0) + 8001245c: fc843783 ld a5,-56(s0) + 80012460: 0e078463 beqz a5,80012548 + 80012464: fb843783 ld a5,-72(s0) + 80012468: 0007a783 lw a5,0(a5) + 8001246c: fcf42c23 sw a5,-40(s0) + 80012470: 0240006f j 80012494 + 80012474: fd842783 lw a5,-40(s0) + 80012478: 00379793 slli a5,a5,0x3 + 8001247c: fc843703 ld a4,-56(s0) + 80012480: 00f707b3 add a5,a4,a5 + 80012484: 0007b023 sd zero,0(a5) + 80012488: fd842783 lw a5,-40(s0) + 8001248c: 0017879b addiw a5,a5,1 + 80012490: fcf42c23 sw a5,-40(s0) + 80012494: fd842703 lw a4,-40(s0) + 80012498: fd442783 lw a5,-44(s0) + 8001249c: 0007071b sext.w a4,a4 + 800124a0: 0007879b sext.w a5,a5 + 800124a4: fcf748e3 blt a4,a5,80012474 + 800124a8: fb843783 ld a5,-72(s0) + 800124ac: fc843703 ld a4,-56(s0) + 800124b0: 00e7b423 sd a4,8(a5) + 800124b4: fd442703 lw a4,-44(s0) + 800124b8: fb843783 ld a5,-72(s0) + 800124bc: 00e7a023 sw a4,0(a5) + 800124c0: fb843783 ld a5,-72(s0) + 800124c4: 0007a783 lw a5,0(a5) + 800124c8: 0007871b sext.w a4,a5 + 800124cc: fdc42783 lw a5,-36(s0) + 800124d0: 0007879b sext.w a5,a5 + 800124d4: 06e7de63 bge a5,a4,80012550 + 800124d8: fb843783 ld a5,-72(s0) + 800124dc: 0087b703 ld a4,8(a5) + 800124e0: fdc42783 lw a5,-36(s0) + 800124e4: 00379793 slli a5,a5,0x3 + 800124e8: 00f707b3 add a5,a4,a5 + 800124ec: 0007b783 ld a5,0(a5) + 800124f0: 06079063 bnez a5,80012550 + 800124f4: fb843783 ld a5,-72(s0) + 800124f8: 0087b703 ld a4,8(a5) + 800124fc: fdc42783 lw a5,-36(s0) + 80012500: 00379793 slli a5,a5,0x3 + 80012504: 00f704b3 add s1,a4,a5 + 80012508: 04800593 li a1,72 + 8001250c: 00100513 li a0,1 + 80012510: 911f20ef jal ra,80004e20 + 80012514: 00050793 mv a5,a0 + 80012518: 00f4b023 sd a5,0(s1) + 8001251c: fb843783 ld a5,-72(s0) + 80012520: 0087b703 ld a4,8(a5) + 80012524: fdc42783 lw a5,-36(s0) + 80012528: 00379793 slli a5,a5,0x3 + 8001252c: 00f707b3 add a5,a4,a5 + 80012530: 0007b783 ld a5,0(a5) + 80012534: 00079e63 bnez a5,80012550 + 80012538: fb843783 ld a5,-72(s0) + 8001253c: 0007a783 lw a5,0(a5) + 80012540: fcf42e23 sw a5,-36(s0) + 80012544: 0100006f j 80012554 + 80012548: 00000013 nop + 8001254c: 0080006f j 80012554 + 80012550: 00000013 nop + 80012554: fdc42783 lw a5,-36(s0) + 80012558: 00078513 mv a0,a5 + 8001255c: 04813083 ld ra,72(sp) + 80012560: 04013403 ld s0,64(sp) + 80012564: 03813483 ld s1,56(sp) + 80012568: 05010113 addi sp,sp,80 + 8001256c: 00008067 ret + +0000000080012570 : + 80012570: fd010113 addi sp,sp,-48 + 80012574: 02113423 sd ra,40(sp) + 80012578: 02813023 sd s0,32(sp) + 8001257c: 03010413 addi s0,sp,48 + 80012580: 071000ef jal ra,80012df0 + 80012584: fea43023 sd a0,-32(s0) + 80012588: d29ff0ef jal ra,800122b0 + 8001258c: 00000593 li a1,0 + 80012590: fe043503 ld a0,-32(s0) + 80012594: dbdff0ef jal ra,80012350 + 80012598: 00050793 mv a5,a0 + 8001259c: fef42623 sw a5,-20(s0) + 800125a0: fe043783 ld a5,-32(s0) + 800125a4: 0007a703 lw a4,0(a5) + 800125a8: fec42783 lw a5,-20(s0) + 800125ac: 02f71a63 bne a4,a5,800125e0 + 800125b0: ffc00793 li a5,-4 + 800125b4: fef42623 sw a5,-20(s0) + 800125b8: 00006517 auipc a0,0x6 + 800125bc: 95850513 addi a0,a0,-1704 # 80017f10 + 800125c0: c5df50ef jal ra,8000821c + 800125c4: 00006517 auipc a0,0x6 + 800125c8: 95c50513 addi a0,a0,-1700 # 80017f20 + 800125cc: c51f50ef jal ra,8000821c + 800125d0: 00006517 auipc a0,0x6 + 800125d4: 99050513 addi a0,a0,-1648 # 80017f60 + 800125d8: c45f50ef jal ra,8000821c + 800125dc: 0380006f j 80012614 + 800125e0: fe043783 ld a5,-32(s0) + 800125e4: 0087b703 ld a4,8(a5) + 800125e8: fec42783 lw a5,-20(s0) + 800125ec: 00379793 slli a5,a5,0x3 + 800125f0: 00f707b3 add a5,a4,a5 + 800125f4: 0007b783 ld a5,0(a5) + 800125f8: fcf43c23 sd a5,-40(s0) + 800125fc: fd843783 ld a5,-40(s0) + 80012600: 00100713 li a4,1 + 80012604: 00e7a823 sw a4,16(a5) + 80012608: fd843783 ld a5,-40(s0) + 8001260c: dfd00713 li a4,-515 + 80012610: 00e79023 sh a4,0(a5) + 80012614: d0dff0ef jal ra,80012320 + 80012618: fec42783 lw a5,-20(s0) + 8001261c: 0037879b addiw a5,a5,3 + 80012620: 0007879b sext.w a5,a5 + 80012624: 00078513 mv a0,a5 + 80012628: 02813083 ld ra,40(sp) + 8001262c: 02013403 ld s0,32(sp) + 80012630: 03010113 addi sp,sp,48 + 80012634: 00008067 ret + +0000000080012638 : + 80012638: fd010113 addi sp,sp,-48 + 8001263c: 02113423 sd ra,40(sp) + 80012640: 02813023 sd s0,32(sp) + 80012644: 03010413 addi s0,sp,48 + 80012648: 00050793 mv a5,a0 + 8001264c: fcf42e23 sw a5,-36(s0) + 80012650: 7a0000ef jal ra,80012df0 + 80012654: fea43423 sd a0,-24(s0) + 80012658: fdc42783 lw a5,-36(s0) + 8001265c: ffd7879b addiw a5,a5,-3 + 80012660: fcf42e23 sw a5,-36(s0) + 80012664: fdc42783 lw a5,-36(s0) + 80012668: 0007879b sext.w a5,a5 + 8001266c: 0007ce63 bltz a5,80012688 + 80012670: fe843783 ld a5,-24(s0) + 80012674: 0007a783 lw a5,0(a5) + 80012678: 0007871b sext.w a4,a5 + 8001267c: fdc42783 lw a5,-36(s0) + 80012680: 0007879b sext.w a5,a5 + 80012684: 00e7c663 blt a5,a4,80012690 + 80012688: 00000793 li a5,0 + 8001268c: 0700006f j 800126fc + 80012690: c21ff0ef jal ra,800122b0 + 80012694: fe843783 ld a5,-24(s0) + 80012698: 0087b703 ld a4,8(a5) + 8001269c: fdc42783 lw a5,-36(s0) + 800126a0: 00379793 slli a5,a5,0x3 + 800126a4: 00f707b3 add a5,a4,a5 + 800126a8: 0007b783 ld a5,0(a5) + 800126ac: fef43023 sd a5,-32(s0) + 800126b0: fe043783 ld a5,-32(s0) + 800126b4: 00078e63 beqz a5,800126d0 + 800126b8: fe043783 ld a5,-32(s0) + 800126bc: 0007d783 lhu a5,0(a5) + 800126c0: 0007871b sext.w a4,a5 + 800126c4: 000107b7 lui a5,0x10 + 800126c8: dfd78793 addi a5,a5,-515 # fdfd <__STACKSIZE__+0xbdfd> + 800126cc: 00f70863 beq a4,a5,800126dc + 800126d0: c51ff0ef jal ra,80012320 + 800126d4: 00000793 li a5,0 + 800126d8: 0240006f j 800126fc + 800126dc: fe043783 ld a5,-32(s0) + 800126e0: 0107a783 lw a5,16(a5) + 800126e4: 0017879b addiw a5,a5,1 + 800126e8: 0007871b sext.w a4,a5 + 800126ec: fe043783 ld a5,-32(s0) + 800126f0: 00e7a823 sw a4,16(a5) + 800126f4: c2dff0ef jal ra,80012320 + 800126f8: fe043783 ld a5,-32(s0) + 800126fc: 00078513 mv a0,a5 + 80012700: 02813083 ld ra,40(sp) + 80012704: 02013403 ld s0,32(sp) + 80012708: 03010113 addi sp,sp,48 + 8001270c: 00008067 ret + +0000000080012710 : + 80012710: fd010113 addi sp,sp,-48 + 80012714: 02113423 sd ra,40(sp) + 80012718: 02813023 sd s0,32(sp) + 8001271c: 03010413 addi s0,sp,48 + 80012720: fca43c23 sd a0,-40(s0) + 80012724: fd843783 ld a5,-40(s0) + 80012728: 00079e63 bnez a5,80012744 + 8001272c: 0fd00613 li a2,253 + 80012730: 00007597 auipc a1,0x7 + 80012734: 63858593 addi a1,a1,1592 # 80019d68 <__FUNCTION__.4153> + 80012738: 00006517 auipc a0,0x6 + 8001273c: 83050513 addi a0,a0,-2000 # 80017f68 + 80012740: d3df50ef jal ra,8000847c + 80012744: b6dff0ef jal ra,800122b0 + 80012748: fd843783 ld a5,-40(s0) + 8001274c: 0107a783 lw a5,16(a5) + 80012750: fff7879b addiw a5,a5,-1 + 80012754: 0007871b sext.w a4,a5 + 80012758: fd843783 ld a5,-40(s0) + 8001275c: 00e7a823 sw a4,16(a5) + 80012760: fd843783 ld a5,-40(s0) + 80012764: 0107a783 lw a5,16(a5) + 80012768: 06079e63 bnez a5,800127e4 + 8001276c: 684000ef jal ra,80012df0 + 80012770: fea43023 sd a0,-32(s0) + 80012774: fe042623 sw zero,-20(s0) + 80012778: 0540006f j 800127cc + 8001277c: fe043783 ld a5,-32(s0) + 80012780: 0087b703 ld a4,8(a5) + 80012784: fec42783 lw a5,-20(s0) + 80012788: 00379793 slli a5,a5,0x3 + 8001278c: 00f707b3 add a5,a4,a5 + 80012790: 0007b783 ld a5,0(a5) + 80012794: fd843703 ld a4,-40(s0) + 80012798: 02f71463 bne a4,a5,800127c0 + 8001279c: fd843503 ld a0,-40(s0) + 800127a0: ef4f20ef jal ra,80004e94 + 800127a4: fe043783 ld a5,-32(s0) + 800127a8: 0087b703 ld a4,8(a5) + 800127ac: fec42783 lw a5,-20(s0) + 800127b0: 00379793 slli a5,a5,0x3 + 800127b4: 00f707b3 add a5,a4,a5 + 800127b8: 0007b023 sd zero,0(a5) + 800127bc: 0280006f j 800127e4 + 800127c0: fec42783 lw a5,-20(s0) + 800127c4: 0017879b addiw a5,a5,1 + 800127c8: fef42623 sw a5,-20(s0) + 800127cc: fe043783 ld a5,-32(s0) + 800127d0: 0007a783 lw a5,0(a5) + 800127d4: 0007871b sext.w a4,a5 + 800127d8: fec42783 lw a5,-20(s0) + 800127dc: 0007879b sext.w a5,a5 + 800127e0: f8e7cee3 blt a5,a4,8001277c + 800127e4: b3dff0ef jal ra,80012320 + 800127e8: 00000013 nop + 800127ec: 02813083 ld ra,40(sp) + 800127f0: 02013403 ld s0,32(sp) + 800127f4: 03010113 addi sp,sp,48 + 800127f8: 00008067 ret + +00000000800127fc : + 800127fc: fb010113 addi sp,sp,-80 + 80012800: 04113423 sd ra,72(sp) + 80012804: 04813023 sd s0,64(sp) + 80012808: 05010413 addi s0,sp,80 + 8001280c: faa43c23 sd a0,-72(s0) + 80012810: 5e0000ef jal ra,80012df0 + 80012814: fca43c23 sd a0,-40(s0) + 80012818: fb843583 ld a1,-72(s0) + 8001281c: 00000513 li a0,0 + 80012820: 1fc000ef jal ra,80012a1c + 80012824: fca43823 sd a0,-48(s0) + 80012828: fd043783 ld a5,-48(s0) + 8001282c: 12078c63 beqz a5,80012964 + 80012830: fd043503 ld a0,-48(s0) + 80012834: cf0fe0ef jal ra,80010d24 + 80012838: fca43423 sd a0,-56(s0) + 8001283c: fc843783 ld a5,-56(s0) + 80012840: 00079a63 bnez a5,80012854 + 80012844: fd043503 ld a0,-48(s0) + 80012848: e4cf20ef jal ra,80004e94 + 8001284c: fff00793 li a5,-1 + 80012850: 1180006f j 80012968 + 80012854: fc843783 ld a5,-56(s0) + 80012858: 0087b783 ld a5,8(a5) + 8001285c: 0007c783 lbu a5,0(a5) + 80012860: 00078713 mv a4,a5 + 80012864: 02f00793 li a5,47 + 80012868: 02f71263 bne a4,a5,8001288c + 8001286c: fc843783 ld a5,-56(s0) + 80012870: 0087b783 ld a5,8(a5) + 80012874: 00178793 addi a5,a5,1 + 80012878: 0007c783 lbu a5,0(a5) + 8001287c: 00079863 bnez a5,8001288c + 80012880: fd043783 ld a5,-48(s0) + 80012884: fef43023 sd a5,-32(s0) + 80012888: 0240006f j 800128ac + 8001288c: fc843783 ld a5,-56(s0) + 80012890: 0087b783 ld a5,8(a5) + 80012894: 00078513 mv a0,a5 + 80012898: fbded0ef jal ra,80000854 + 8001289c: 00050713 mv a4,a0 + 800128a0: fd043783 ld a5,-48(s0) + 800128a4: 00e787b3 add a5,a5,a4 + 800128a8: fef43023 sd a5,-32(s0) + 800128ac: a05ff0ef jal ra,800122b0 + 800128b0: fe042623 sw zero,-20(s0) + 800128b4: 0900006f j 80012944 + 800128b8: fd843783 ld a5,-40(s0) + 800128bc: 0087b703 ld a4,8(a5) + 800128c0: fec46783 lwu a5,-20(s0) + 800128c4: 00379793 slli a5,a5,0x3 + 800128c8: 00f707b3 add a5,a4,a5 + 800128cc: 0007b783 ld a5,0(a5) + 800128d0: fcf43023 sd a5,-64(s0) + 800128d4: fc043783 ld a5,-64(s0) + 800128d8: 04078e63 beqz a5,80012934 + 800128dc: fc043783 ld a5,-64(s0) + 800128e0: 0207b783 ld a5,32(a5) + 800128e4: 04078863 beqz a5,80012934 + 800128e8: fc043783 ld a5,-64(s0) + 800128ec: 0087b783 ld a5,8(a5) + 800128f0: 04078263 beqz a5,80012934 + 800128f4: fc043783 ld a5,-64(s0) + 800128f8: 0187b783 ld a5,24(a5) + 800128fc: fc843703 ld a4,-56(s0) + 80012900: 02f71c63 bne a4,a5,80012938 + 80012904: fc043783 ld a5,-64(s0) + 80012908: 0087b783 ld a5,8(a5) + 8001290c: fe043583 ld a1,-32(s0) + 80012910: 00078513 mv a0,a5 + 80012914: 884ee0ef jal ra,80000998 + 80012918: 00050793 mv a5,a0 + 8001291c: 00079e63 bnez a5,80012938 + 80012920: fd043503 ld a0,-48(s0) + 80012924: d70f20ef jal ra,80004e94 + 80012928: 9f9ff0ef jal ra,80012320 + 8001292c: 00000793 li a5,0 + 80012930: 0380006f j 80012968 + 80012934: 00000013 nop + 80012938: fec42783 lw a5,-20(s0) + 8001293c: 0017879b addiw a5,a5,1 + 80012940: fef42623 sw a5,-20(s0) + 80012944: fd843783 ld a5,-40(s0) + 80012948: 0007a703 lw a4,0(a5) + 8001294c: fec42783 lw a5,-20(s0) + 80012950: 0007879b sext.w a5,a5 + 80012954: f6e7e2e3 bltu a5,a4,800128b8 + 80012958: 9c9ff0ef jal ra,80012320 + 8001295c: fd043503 ld a0,-48(s0) + 80012960: d34f20ef jal ra,80004e94 + 80012964: fff00793 li a5,-1 + 80012968: 00078513 mv a0,a5 + 8001296c: 04813083 ld ra,72(sp) + 80012970: 04013403 ld s0,64(sp) + 80012974: 05010113 addi sp,sp,80 + 80012978: 00008067 ret + +000000008001297c : + 8001297c: fc010113 addi sp,sp,-64 + 80012980: 02113c23 sd ra,56(sp) + 80012984: 02813823 sd s0,48(sp) + 80012988: 02913423 sd s1,40(sp) + 8001298c: 04010413 addi s0,sp,64 + 80012990: fca43423 sd a0,-56(s0) + 80012994: fcb43023 sd a1,-64(s0) + 80012998: fc843503 ld a0,-56(s0) + 8001299c: eb9ed0ef jal ra,80000854 + 800129a0: 00050493 mv s1,a0 + 800129a4: fc043503 ld a0,-64(s0) + 800129a8: eaded0ef jal ra,80000854 + 800129ac: 00050793 mv a5,a0 + 800129b0: 00f49663 bne s1,a5,800129bc + 800129b4: 00000793 li a5,0 + 800129b8: 04c0006f j 80012a04 + 800129bc: fc843503 ld a0,-56(s0) + 800129c0: e95ed0ef jal ra,80000854 + 800129c4: 00050713 mv a4,a0 + 800129c8: fc043783 ld a5,-64(s0) + 800129cc: 00e787b3 add a5,a5,a4 + 800129d0: fcf43c23 sd a5,-40(s0) + 800129d4: fd843783 ld a5,-40(s0) + 800129d8: 0007c783 lbu a5,0(a5) + 800129dc: 00078713 mv a4,a5 + 800129e0: 02f00793 li a5,47 + 800129e4: 00f70e63 beq a4,a5,80012a00 + 800129e8: fd843703 ld a4,-40(s0) + 800129ec: fc043783 ld a5,-64(s0) + 800129f0: 00f70863 beq a4,a5,80012a00 + 800129f4: fd843783 ld a5,-40(s0) + 800129f8: fff78793 addi a5,a5,-1 + 800129fc: fcf43c23 sd a5,-40(s0) + 80012a00: fd843783 ld a5,-40(s0) + 80012a04: 00078513 mv a0,a5 + 80012a08: 03813083 ld ra,56(sp) + 80012a0c: 03013403 ld s0,48(sp) + 80012a10: 02813483 ld s1,40(sp) + 80012a14: 04010113 addi sp,sp,64 + 80012a18: 00008067 ret + +0000000080012a1c : + 80012a1c: fa010113 addi sp,sp,-96 + 80012a20: 04113c23 sd ra,88(sp) + 80012a24: 04813823 sd s0,80(sp) + 80012a28: 04913423 sd s1,72(sp) + 80012a2c: 06010413 addi s0,sp,96 + 80012a30: faa43423 sd a0,-88(s0) + 80012a34: fab43023 sd a1,-96(s0) + 80012a38: fa043783 ld a5,-96(s0) + 80012a3c: 00079e63 bnez a5,80012a58 + 80012a40: 17c00613 li a2,380 + 80012a44: 00007597 auipc a1,0x7 + 80012a48: af458593 addi a1,a1,-1292 # 80019538 <__FUNCTION__.4185> + 80012a4c: 00005517 auipc a0,0x5 + 80012a50: 52c50513 addi a0,a0,1324 # 80017f78 + 80012a54: a29f50ef jal ra,8000847c + 80012a58: fa843783 ld a5,-88(s0) + 80012a5c: 00079863 bnez a5,80012a6c + 80012a60: 00007797 auipc a5,0x7 + 80012a64: 44078793 addi a5,a5,1088 # 80019ea0 + 80012a68: faf43423 sd a5,-88(s0) + 80012a6c: fa043783 ld a5,-96(s0) + 80012a70: 0007c783 lbu a5,0(a5) + 80012a74: 00078713 mv a4,a5 + 80012a78: 02f00793 li a5,47 + 80012a7c: 08f70063 beq a4,a5,80012afc + 80012a80: fa843503 ld a0,-88(s0) + 80012a84: dd1ed0ef jal ra,80000854 + 80012a88: 00050493 mv s1,a0 + 80012a8c: fa043503 ld a0,-96(s0) + 80012a90: dc5ed0ef jal ra,80000854 + 80012a94: 00050793 mv a5,a0 + 80012a98: 00f487b3 add a5,s1,a5 + 80012a9c: 00278793 addi a5,a5,2 + 80012aa0: 00078513 mv a0,a5 + 80012aa4: b85f10ef jal ra,80004628 + 80012aa8: fca43c23 sd a0,-40(s0) + 80012aac: fd843783 ld a5,-40(s0) + 80012ab0: 00079663 bnez a5,80012abc + 80012ab4: 00000793 li a5,0 + 80012ab8: 3200006f j 80012dd8 + 80012abc: fa843503 ld a0,-88(s0) + 80012ac0: d95ed0ef jal ra,80000854 + 80012ac4: 00050493 mv s1,a0 + 80012ac8: fa043503 ld a0,-96(s0) + 80012acc: d89ed0ef jal ra,80000854 + 80012ad0: 00050793 mv a5,a0 + 80012ad4: 00f487b3 add a5,s1,a5 + 80012ad8: 00278793 addi a5,a5,2 + 80012adc: fa043703 ld a4,-96(s0) + 80012ae0: fa843683 ld a3,-88(s0) + 80012ae4: 00005617 auipc a2,0x5 + 80012ae8: 4ac60613 addi a2,a2,1196 # 80017f90 + 80012aec: 00078593 mv a1,a5 + 80012af0: fd843503 ld a0,-40(s0) + 80012af4: d00f50ef jal ra,80007ff4 + 80012af8: 0200006f j 80012b18 + 80012afc: fa043503 ld a0,-96(s0) + 80012b00: f2cf40ef jal ra,8000722c + 80012b04: fca43c23 sd a0,-40(s0) + 80012b08: fd843783 ld a5,-40(s0) + 80012b0c: 00079663 bnez a5,80012b18 + 80012b10: 00000793 li a5,0 + 80012b14: 2c40006f j 80012dd8 + 80012b18: fd843783 ld a5,-40(s0) + 80012b1c: fcf43423 sd a5,-56(s0) + 80012b20: fd843783 ld a5,-40(s0) + 80012b24: fcf43823 sd a5,-48(s0) + 80012b28: fd043783 ld a5,-48(s0) + 80012b2c: faf43c23 sd a5,-72(s0) + 80012b30: fc843783 ld a5,-56(s0) + 80012b34: 0007c783 lbu a5,0(a5) + 80012b38: fcf403a3 sb a5,-57(s0) + 80012b3c: fc744783 lbu a5,-57(s0) + 80012b40: 0ff7f713 andi a4,a5,255 + 80012b44: 02e00793 li a5,46 + 80012b48: 12f71063 bne a4,a5,80012c68 + 80012b4c: fc843783 ld a5,-56(s0) + 80012b50: 00178793 addi a5,a5,1 + 80012b54: 0007c783 lbu a5,0(a5) + 80012b58: 00079a63 bnez a5,80012b6c + 80012b5c: fc843783 ld a5,-56(s0) + 80012b60: 00178793 addi a5,a5,1 + 80012b64: fcf43423 sd a5,-56(s0) + 80012b68: 1000006f j 80012c68 + 80012b6c: fc843783 ld a5,-56(s0) + 80012b70: 00178793 addi a5,a5,1 + 80012b74: 0007c783 lbu a5,0(a5) + 80012b78: 00078713 mv a4,a5 + 80012b7c: 02f00793 li a5,47 + 80012b80: 04f71263 bne a4,a5,80012bc4 + 80012b84: fc843783 ld a5,-56(s0) + 80012b88: 00278793 addi a5,a5,2 + 80012b8c: fcf43423 sd a5,-56(s0) + 80012b90: 0100006f j 80012ba0 + 80012b94: fc843783 ld a5,-56(s0) + 80012b98: 00178793 addi a5,a5,1 + 80012b9c: fcf43423 sd a5,-56(s0) + 80012ba0: fc843783 ld a5,-56(s0) + 80012ba4: 0007c783 lbu a5,0(a5) + 80012ba8: 00078713 mv a4,a5 + 80012bac: 02f00793 li a5,47 + 80012bb0: 1af71a63 bne a4,a5,80012d64 + 80012bb4: fc843783 ld a5,-56(s0) + 80012bb8: 0007c783 lbu a5,0(a5) + 80012bbc: fc079ce3 bnez a5,80012b94 + 80012bc0: 1a40006f j 80012d64 + 80012bc4: fc843783 ld a5,-56(s0) + 80012bc8: 00178793 addi a5,a5,1 + 80012bcc: 0007c783 lbu a5,0(a5) + 80012bd0: 00078713 mv a4,a5 + 80012bd4: 02e00793 li a5,46 + 80012bd8: 08f71863 bne a4,a5,80012c68 + 80012bdc: fc843783 ld a5,-56(s0) + 80012be0: 00278793 addi a5,a5,2 + 80012be4: 0007c783 lbu a5,0(a5) + 80012be8: 00079a63 bnez a5,80012bfc + 80012bec: fc843783 ld a5,-56(s0) + 80012bf0: 00278793 addi a5,a5,2 + 80012bf4: fcf43423 sd a5,-56(s0) + 80012bf8: 1100006f j 80012d08 + 80012bfc: fc843783 ld a5,-56(s0) + 80012c00: 00278793 addi a5,a5,2 + 80012c04: 0007c783 lbu a5,0(a5) + 80012c08: 00078713 mv a4,a5 + 80012c0c: 02f00793 li a5,47 + 80012c10: 04f71c63 bne a4,a5,80012c68 + 80012c14: fc843783 ld a5,-56(s0) + 80012c18: 00378793 addi a5,a5,3 + 80012c1c: fcf43423 sd a5,-56(s0) + 80012c20: 0100006f j 80012c30 + 80012c24: fc843783 ld a5,-56(s0) + 80012c28: 00178793 addi a5,a5,1 + 80012c2c: fcf43423 sd a5,-56(s0) + 80012c30: fc843783 ld a5,-56(s0) + 80012c34: 0007c783 lbu a5,0(a5) + 80012c38: 00078713 mv a4,a5 + 80012c3c: 02f00793 li a5,47 + 80012c40: 0cf71263 bne a4,a5,80012d04 + 80012c44: fc843783 ld a5,-56(s0) + 80012c48: 0007c783 lbu a5,0(a5) + 80012c4c: fc079ce3 bnez a5,80012c24 + 80012c50: 0b40006f j 80012d04 + 80012c54: fd043783 ld a5,-48(s0) + 80012c58: 00178713 addi a4,a5,1 + 80012c5c: fce43823 sd a4,-48(s0) + 80012c60: fc744703 lbu a4,-57(s0) + 80012c64: 00e78023 sb a4,0(a5) + 80012c68: fc843783 ld a5,-56(s0) + 80012c6c: 00178713 addi a4,a5,1 + 80012c70: fce43423 sd a4,-56(s0) + 80012c74: 0007c783 lbu a5,0(a5) + 80012c78: fcf403a3 sb a5,-57(s0) + 80012c7c: fc744783 lbu a5,-57(s0) + 80012c80: 0ff7f793 andi a5,a5,255 + 80012c84: 00078a63 beqz a5,80012c98 + 80012c88: fc744783 lbu a5,-57(s0) + 80012c8c: 0ff7f713 andi a4,a5,255 + 80012c90: 02f00793 li a5,47 + 80012c94: fcf710e3 bne a4,a5,80012c54 + 80012c98: fc744783 lbu a5,-57(s0) + 80012c9c: 0ff7f713 andi a4,a5,255 + 80012ca0: 02f00793 li a5,47 + 80012ca4: 04f71863 bne a4,a5,80012cf4 + 80012ca8: fd043783 ld a5,-48(s0) + 80012cac: 00178713 addi a4,a5,1 + 80012cb0: fce43823 sd a4,-48(s0) + 80012cb4: 02f00713 li a4,47 + 80012cb8: 00e78023 sb a4,0(a5) + 80012cbc: 0180006f j 80012cd4 + 80012cc0: fc843783 ld a5,-56(s0) + 80012cc4: 00178713 addi a4,a5,1 + 80012cc8: fce43423 sd a4,-56(s0) + 80012ccc: 0007c783 lbu a5,0(a5) + 80012cd0: fcf403a3 sb a5,-57(s0) + 80012cd4: fc744783 lbu a5,-57(s0) + 80012cd8: 0ff7f713 andi a4,a5,255 + 80012cdc: 02f00793 li a5,47 + 80012ce0: fef700e3 beq a4,a5,80012cc0 + 80012ce4: fc843783 ld a5,-56(s0) + 80012ce8: fff78793 addi a5,a5,-1 + 80012cec: fcf43423 sd a5,-56(s0) + 80012cf0: 07c0006f j 80012d6c + 80012cf4: fc744783 lbu a5,-57(s0) + 80012cf8: 0ff7f793 andi a5,a5,255 + 80012cfc: 06079863 bnez a5,80012d6c + 80012d00: 0740006f j 80012d74 + 80012d04: 00000013 nop + 80012d08: fd043783 ld a5,-48(s0) + 80012d0c: fff78793 addi a5,a5,-1 + 80012d10: fcf43823 sd a5,-48(s0) + 80012d14: fd043703 ld a4,-48(s0) + 80012d18: fb843783 ld a5,-72(s0) + 80012d1c: 02f77063 bgeu a4,a5,80012d3c + 80012d20: fd843503 ld a0,-40(s0) + 80012d24: 970f20ef jal ra,80004e94 + 80012d28: 00000793 li a5,0 + 80012d2c: 0ac0006f j 80012dd8 + 80012d30: fd043783 ld a5,-48(s0) + 80012d34: fff78793 addi a5,a5,-1 + 80012d38: fcf43823 sd a5,-48(s0) + 80012d3c: fb843703 ld a4,-72(s0) + 80012d40: fd043783 ld a5,-48(s0) + 80012d44: def776e3 bgeu a4,a5,80012b30 + 80012d48: fd043783 ld a5,-48(s0) + 80012d4c: fff78793 addi a5,a5,-1 + 80012d50: 0007c783 lbu a5,0(a5) + 80012d54: 00078713 mv a4,a5 + 80012d58: 02f00793 li a5,47 + 80012d5c: fcf71ae3 bne a4,a5,80012d30 + 80012d60: dd1ff06f j 80012b30 + 80012d64: 00000013 nop + 80012d68: dc9ff06f j 80012b30 + 80012d6c: 00000013 nop + 80012d70: dc1ff06f j 80012b30 + 80012d74: fd043783 ld a5,-48(s0) + 80012d78: 00078023 sb zero,0(a5) + 80012d7c: fd043783 ld a5,-48(s0) + 80012d80: fff78793 addi a5,a5,-1 + 80012d84: fcf43823 sd a5,-48(s0) + 80012d88: fd043703 ld a4,-48(s0) + 80012d8c: fd843783 ld a5,-40(s0) + 80012d90: 02f70063 beq a4,a5,80012db0 + 80012d94: fd043783 ld a5,-48(s0) + 80012d98: 0007c783 lbu a5,0(a5) + 80012d9c: 00078713 mv a4,a5 + 80012da0: 02f00793 li a5,47 + 80012da4: 00f71663 bne a4,a5,80012db0 + 80012da8: fd043783 ld a5,-48(s0) + 80012dac: 00078023 sb zero,0(a5) + 80012db0: fd843783 ld a5,-40(s0) + 80012db4: 0007c783 lbu a5,0(a5) + 80012db8: 00079e63 bnez a5,80012dd4 + 80012dbc: fd843783 ld a5,-40(s0) + 80012dc0: 02f00713 li a4,47 + 80012dc4: 00e78023 sb a4,0(a5) + 80012dc8: fd843783 ld a5,-40(s0) + 80012dcc: 00178793 addi a5,a5,1 + 80012dd0: 00078023 sb zero,0(a5) + 80012dd4: fd843783 ld a5,-40(s0) + 80012dd8: 00078513 mv a0,a5 + 80012ddc: 05813083 ld ra,88(sp) + 80012de0: 05013403 ld s0,80(sp) + 80012de4: 04813483 ld s1,72(sp) + 80012de8: 06010113 addi sp,sp,96 + 80012dec: 00008067 ret + +0000000080012df0 : + 80012df0: fe010113 addi sp,sp,-32 + 80012df4: 00813c23 sd s0,24(sp) + 80012df8: 02010413 addi s0,sp,32 + 80012dfc: 00018797 auipc a5,0x18 + 80012e00: 32c78793 addi a5,a5,812 # 8002b128 <_fdtab> + 80012e04: fef43423 sd a5,-24(s0) + 80012e08: fe843783 ld a5,-24(s0) + 80012e0c: 00078513 mv a0,a5 + 80012e10: 01813403 ld s0,24(sp) + 80012e14: 02010113 addi sp,sp,32 + 80012e18: 00008067 ret + +0000000080012e1c : + 80012e1c: fd010113 addi sp,sp,-48 + 80012e20: 02113423 sd ra,40(sp) + 80012e24: 02813023 sd s0,32(sp) + 80012e28: 03010413 addi s0,sp,48 + 80012e2c: fc5ff0ef jal ra,80012df0 + 80012e30: fea43023 sd a0,-32(s0) + 80012e34: fe043783 ld a5,-32(s0) + 80012e38: 00079663 bnez a5,80012e44 + 80012e3c: fff00793 li a5,-1 + 80012e40: 1f00006f j 80013030 + 80012e44: a99ef0ef jal ra,800028dc + 80012e48: 00005517 auipc a0,0x5 + 80012e4c: 15050513 addi a0,a0,336 # 80017f98 + 80012e50: bccf50ef jal ra,8000821c + 80012e54: 00005517 auipc a0,0x5 + 80012e58: 16450513 addi a0,a0,356 # 80017fb8 + 80012e5c: bc0f50ef jal ra,8000821c + 80012e60: fe042623 sw zero,-20(s0) + 80012e64: 1ac0006f j 80013010 + 80012e68: fe043783 ld a5,-32(s0) + 80012e6c: 0087b703 ld a4,8(a5) + 80012e70: fec42783 lw a5,-20(s0) + 80012e74: 00379793 slli a5,a5,0x3 + 80012e78: 00f707b3 add a5,a4,a5 + 80012e7c: 0007b783 ld a5,0(a5) + 80012e80: fcf43c23 sd a5,-40(s0) + 80012e84: fd843783 ld a5,-40(s0) + 80012e88: 16078e63 beqz a5,80013004 + 80012e8c: fd843783 ld a5,-40(s0) + 80012e90: 0207b783 ld a5,32(a5) + 80012e94: 16078863 beqz a5,80013004 + 80012e98: fec42783 lw a5,-20(s0) + 80012e9c: 0037879b addiw a5,a5,3 + 80012ea0: 0007879b sext.w a5,a5 + 80012ea4: 00078593 mv a1,a5 + 80012ea8: 00005517 auipc a0,0x5 + 80012eac: 13050513 addi a0,a0,304 # 80017fd8 + 80012eb0: b6cf50ef jal ra,8000821c + 80012eb4: fd843783 ld a5,-40(s0) + 80012eb8: 0027d783 lhu a5,2(a5) + 80012ebc: 0007871b sext.w a4,a5 + 80012ec0: 00200793 li a5,2 + 80012ec4: 00f71e63 bne a4,a5,80012ee0 + 80012ec8: 00005597 auipc a1,0x5 + 80012ecc: 11858593 addi a1,a1,280 # 80017fe0 + 80012ed0: 00005517 auipc a0,0x5 + 80012ed4: 11850513 addi a0,a0,280 # 80017fe8 + 80012ed8: b44f50ef jal ra,8000821c + 80012edc: 0c00006f j 80012f9c + 80012ee0: fd843783 ld a5,-40(s0) + 80012ee4: 0027d783 lhu a5,2(a5) + 80012ee8: 00079e63 bnez a5,80012f04 + 80012eec: 00005597 auipc a1,0x5 + 80012ef0: 10458593 addi a1,a1,260 # 80017ff0 + 80012ef4: 00005517 auipc a0,0x5 + 80012ef8: 0f450513 addi a0,a0,244 # 80017fe8 + 80012efc: b20f50ef jal ra,8000821c + 80012f00: 09c0006f j 80012f9c + 80012f04: fd843783 ld a5,-40(s0) + 80012f08: 0027d783 lhu a5,2(a5) + 80012f0c: 0007871b sext.w a4,a5 + 80012f10: 00100793 li a5,1 + 80012f14: 00f71e63 bne a4,a5,80012f30 + 80012f18: 00005597 auipc a1,0x5 + 80012f1c: 0e058593 addi a1,a1,224 # 80017ff8 + 80012f20: 00005517 auipc a0,0x5 + 80012f24: 0c850513 addi a0,a0,200 # 80017fe8 + 80012f28: af4f50ef jal ra,8000821c + 80012f2c: 0700006f j 80012f9c + 80012f30: fd843783 ld a5,-40(s0) + 80012f34: 0027d783 lhu a5,2(a5) + 80012f38: 0007871b sext.w a4,a5 + 80012f3c: 00300793 li a5,3 + 80012f40: 00f71e63 bne a4,a5,80012f5c + 80012f44: 00005597 auipc a1,0x5 + 80012f48: 0bc58593 addi a1,a1,188 # 80018000 + 80012f4c: 00005517 auipc a0,0x5 + 80012f50: 09c50513 addi a0,a0,156 # 80017fe8 + 80012f54: ac8f50ef jal ra,8000821c + 80012f58: 0440006f j 80012f9c + 80012f5c: fd843783 ld a5,-40(s0) + 80012f60: 0027d783 lhu a5,2(a5) + 80012f64: 0007871b sext.w a4,a5 + 80012f68: 00400793 li a5,4 + 80012f6c: 00f71e63 bne a4,a5,80012f88 + 80012f70: 00005597 auipc a1,0x5 + 80012f74: 09858593 addi a1,a1,152 # 80018008 + 80012f78: 00005517 auipc a0,0x5 + 80012f7c: 07050513 addi a0,a0,112 # 80017fe8 + 80012f80: a9cf50ef jal ra,8000821c + 80012f84: 0180006f j 80012f9c + 80012f88: 00005597 auipc a1,0x5 + 80012f8c: 08858593 addi a1,a1,136 # 80018010 + 80012f90: 00005517 auipc a0,0x5 + 80012f94: 08850513 addi a0,a0,136 # 80018018 + 80012f98: a84f50ef jal ra,8000821c + 80012f9c: fd843783 ld a5,-40(s0) + 80012fa0: 0107a783 lw a5,16(a5) + 80012fa4: 00078593 mv a1,a5 + 80012fa8: 00005517 auipc a0,0x5 + 80012fac: 07850513 addi a0,a0,120 # 80018020 + 80012fb0: a6cf50ef jal ra,8000821c + 80012fb4: fd843783 ld a5,-40(s0) + 80012fb8: 0007d783 lhu a5,0(a5) + 80012fbc: 0007879b sext.w a5,a5 + 80012fc0: 00078593 mv a1,a5 + 80012fc4: 00005517 auipc a0,0x5 + 80012fc8: 06450513 addi a0,a0,100 # 80018028 + 80012fcc: a50f50ef jal ra,8000821c + 80012fd0: fd843783 ld a5,-40(s0) + 80012fd4: 0087b783 ld a5,8(a5) + 80012fd8: 02078063 beqz a5,80012ff8 + 80012fdc: fd843783 ld a5,-40(s0) + 80012fe0: 0087b783 ld a5,8(a5) + 80012fe4: 00078593 mv a1,a5 + 80012fe8: 00005517 auipc a0,0x5 + 80012fec: 04850513 addi a0,a0,72 # 80018030 + 80012ff0: a2cf50ef jal ra,8000821c + 80012ff4: 0100006f j 80013004 + 80012ff8: 00005517 auipc a0,0x5 + 80012ffc: f6850513 addi a0,a0,-152 # 80017f60 + 80013000: a1cf50ef jal ra,8000821c + 80013004: fec42783 lw a5,-20(s0) + 80013008: 0017879b addiw a5,a5,1 + 8001300c: fef42623 sw a5,-20(s0) + 80013010: fe043783 ld a5,-32(s0) + 80013014: 0007a783 lw a5,0(a5) + 80013018: 0007871b sext.w a4,a5 + 8001301c: fec42783 lw a5,-20(s0) + 80013020: 0007879b sext.w a5,a5 + 80013024: e4e7c2e3 blt a5,a4,80012e68 + 80013028: 91def0ef jal ra,80002944 + 8001302c: 00000793 li a5,0 + 80013030: 00078513 mv a0,a5 + 80013034: 02813083 ld ra,40(sp) + 80013038: 02013403 ld s0,32(sp) + 8001303c: 03010113 addi sp,sp,48 + 80013040: 00008067 ret + +0000000080013044 : + 80013044: fb010113 addi sp,sp,-80 + 80013048: 04113423 sd ra,72(sp) + 8001304c: 04813023 sd s0,64(sp) + 80013050: 05010413 addi s0,sp,80 + 80013054: fca43423 sd a0,-56(s0) + 80013058: fcb43023 sd a1,-64(s0) + 8001305c: 00060793 mv a5,a2 + 80013060: faf42e23 sw a5,-68(s0) + 80013064: fc843783 ld a5,-56(s0) + 80013068: 00079663 bnez a5,80013074 + 8001306c: fea00793 li a5,-22 + 80013070: 2080006f j 80013278 + 80013074: fc043583 ld a1,-64(s0) + 80013078: 00000513 li a0,0 + 8001307c: 9a1ff0ef jal ra,80012a1c + 80013080: fea43423 sd a0,-24(s0) + 80013084: fe843783 ld a5,-24(s0) + 80013088: 00079663 bnez a5,80013094 + 8001308c: ff400793 li a5,-12 + 80013090: 1e80006f j 80013278 + 80013094: fe843503 ld a0,-24(s0) + 80013098: c8dfd0ef jal ra,80010d24 + 8001309c: fea43023 sd a0,-32(s0) + 800130a0: fe043783 ld a5,-32(s0) + 800130a4: 00079a63 bnez a5,800130b8 + 800130a8: fe843503 ld a0,-24(s0) + 800130ac: de9f10ef jal ra,80004e94 + 800130b0: ffe00793 li a5,-2 + 800130b4: 1c40006f j 80013278 + 800130b8: fc843783 ld a5,-56(s0) + 800130bc: fe043703 ld a4,-32(s0) + 800130c0: 00e7bc23 sd a4,24(a5) + 800130c4: fe043783 ld a5,-32(s0) + 800130c8: 0107b783 ld a5,16(a5) + 800130cc: 0107b703 ld a4,16(a5) + 800130d0: fc843783 ld a5,-56(s0) + 800130d4: 02e7b023 sd a4,32(a5) + 800130d8: fc843783 ld a5,-56(s0) + 800130dc: 00079123 sh zero,2(a5) + 800130e0: fbc42703 lw a4,-68(s0) + 800130e4: fc843783 ld a5,-56(s0) + 800130e8: 02e7a423 sw a4,40(a5) + 800130ec: fc843783 ld a5,-56(s0) + 800130f0: 0207b823 sd zero,48(a5) + 800130f4: fc843783 ld a5,-56(s0) + 800130f8: 0207bc23 sd zero,56(a5) + 800130fc: fc843783 ld a5,-56(s0) + 80013100: fe043703 ld a4,-32(s0) + 80013104: 04e7b023 sd a4,64(a5) + 80013108: fe043783 ld a5,-32(s0) + 8001310c: 0107b783 ld a5,16(a5) + 80013110: 0087a783 lw a5,8(a5) + 80013114: 0017f793 andi a5,a5,1 + 80013118: 0007879b sext.w a5,a5 + 8001311c: 06079a63 bnez a5,80013190 + 80013120: fe043783 ld a5,-32(s0) + 80013124: 0087b783 ld a5,8(a5) + 80013128: fe843583 ld a1,-24(s0) + 8001312c: 00078513 mv a0,a5 + 80013130: 84dff0ef jal ra,8001297c + 80013134: 00050793 mv a5,a0 + 80013138: 02079063 bnez a5,80013158 + 8001313c: 00005517 auipc a0,0x5 + 80013140: efc50513 addi a0,a0,-260 # 80018038 + 80013144: 8e8f40ef jal ra,8000722c + 80013148: 00050713 mv a4,a0 + 8001314c: fc843783 ld a5,-56(s0) + 80013150: 00e7b423 sd a4,8(a5) + 80013154: 0300006f j 80013184 + 80013158: fe043783 ld a5,-32(s0) + 8001315c: 0087b783 ld a5,8(a5) + 80013160: fe843583 ld a1,-24(s0) + 80013164: 00078513 mv a0,a5 + 80013168: 815ff0ef jal ra,8001297c + 8001316c: 00050793 mv a5,a0 + 80013170: 00078513 mv a0,a5 + 80013174: 8b8f40ef jal ra,8000722c + 80013178: 00050713 mv a4,a0 + 8001317c: fc843783 ld a5,-56(s0) + 80013180: 00e7b423 sd a4,8(a5) + 80013184: fe843503 ld a0,-24(s0) + 80013188: d0df10ef jal ra,80004e94 + 8001318c: 0100006f j 8001319c + 80013190: fc843783 ld a5,-56(s0) + 80013194: fe843703 ld a4,-24(s0) + 80013198: 00e7b423 sd a4,8(a5) + 8001319c: fc843783 ld a5,-56(s0) + 800131a0: 0207b783 ld a5,32(a5) + 800131a4: 0007b783 ld a5,0(a5) + 800131a8: 02079263 bnez a5,800131cc + 800131ac: fc843783 ld a5,-56(s0) + 800131b0: 0087b783 ld a5,8(a5) + 800131b4: 00078513 mv a0,a5 + 800131b8: cddf10ef jal ra,80004e94 + 800131bc: fc843783 ld a5,-56(s0) + 800131c0: 0007b423 sd zero,8(a5) + 800131c4: fda00793 li a5,-38 + 800131c8: 0b00006f j 80013278 + 800131cc: fc843783 ld a5,-56(s0) + 800131d0: 0207b783 ld a5,32(a5) + 800131d4: 0007b783 ld a5,0(a5) + 800131d8: fc843503 ld a0,-56(s0) + 800131dc: 000780e7 jalr a5 + 800131e0: 00050793 mv a5,a0 + 800131e4: fcf42e23 sw a5,-36(s0) + 800131e8: fdc42783 lw a5,-36(s0) + 800131ec: 0007879b sext.w a5,a5 + 800131f0: 0207d263 bgez a5,80013214 + 800131f4: fc843783 ld a5,-56(s0) + 800131f8: 0087b783 ld a5,8(a5) + 800131fc: 00078513 mv a0,a5 + 80013200: c95f10ef jal ra,80004e94 + 80013204: fc843783 ld a5,-56(s0) + 80013208: 0007b423 sd zero,8(a5) + 8001320c: fdc42783 lw a5,-36(s0) + 80013210: 0680006f j 80013278 + 80013214: fc843783 ld a5,-56(s0) + 80013218: 0287a783 lw a5,40(a5) + 8001321c: 00078713 mv a4,a5 + 80013220: 010007b7 lui a5,0x1000 + 80013224: 00f767b3 or a5,a4,a5 + 80013228: 0007871b sext.w a4,a5 + 8001322c: fc843783 ld a5,-56(s0) + 80013230: 02e7a423 sw a4,40(a5) # 1000028 <__STACKSIZE__+0xffc028> + 80013234: fbc42703 lw a4,-68(s0) + 80013238: 000107b7 lui a5,0x10 + 8001323c: 00f777b3 and a5,a4,a5 + 80013240: 0007879b sext.w a5,a5 + 80013244: 02078863 beqz a5,80013274 + 80013248: fc843783 ld a5,-56(s0) + 8001324c: 00200713 li a4,2 + 80013250: 00e79123 sh a4,2(a5) # 10002 <__STACKSIZE__+0xc002> + 80013254: fc843783 ld a5,-56(s0) + 80013258: 0287a783 lw a5,40(a5) + 8001325c: 00078713 mv a4,a5 + 80013260: 020007b7 lui a5,0x2000 + 80013264: 00f767b3 or a5,a4,a5 + 80013268: 0007871b sext.w a4,a5 + 8001326c: fc843783 ld a5,-56(s0) + 80013270: 02e7a423 sw a4,40(a5) # 2000028 <__STACKSIZE__+0x1ffc028> + 80013274: 00000793 li a5,0 + 80013278: 00078513 mv a0,a5 + 8001327c: 04813083 ld ra,72(sp) + 80013280: 04013403 ld s0,64(sp) + 80013284: 05010113 addi sp,sp,80 + 80013288: 00008067 ret + +000000008001328c : + 8001328c: fd010113 addi sp,sp,-48 + 80013290: 02113423 sd ra,40(sp) + 80013294: 02813023 sd s0,32(sp) + 80013298: 03010413 addi s0,sp,48 + 8001329c: fca43c23 sd a0,-40(s0) + 800132a0: fe042623 sw zero,-20(s0) + 800132a4: fd843783 ld a5,-40(s0) + 800132a8: 00079663 bnez a5,800132b4 + 800132ac: ffa00793 li a5,-6 + 800132b0: 0600006f j 80013310 + 800132b4: fd843783 ld a5,-40(s0) + 800132b8: 0207b783 ld a5,32(a5) + 800132bc: 0087b783 ld a5,8(a5) + 800132c0: 02078063 beqz a5,800132e0 + 800132c4: fd843783 ld a5,-40(s0) + 800132c8: 0207b783 ld a5,32(a5) + 800132cc: 0087b783 ld a5,8(a5) + 800132d0: fd843503 ld a0,-40(s0) + 800132d4: 000780e7 jalr a5 + 800132d8: 00050793 mv a5,a0 + 800132dc: fef42623 sw a5,-20(s0) + 800132e0: fec42783 lw a5,-20(s0) + 800132e4: 0007879b sext.w a5,a5 + 800132e8: 0007d663 bgez a5,800132f4 + 800132ec: fec42783 lw a5,-20(s0) + 800132f0: 0200006f j 80013310 + 800132f4: fd843783 ld a5,-40(s0) + 800132f8: 0087b783 ld a5,8(a5) + 800132fc: 00078513 mv a0,a5 + 80013300: b95f10ef jal ra,80004e94 + 80013304: fd843783 ld a5,-40(s0) + 80013308: 0007b423 sd zero,8(a5) + 8001330c: fec42783 lw a5,-20(s0) + 80013310: 00078513 mv a0,a5 + 80013314: 02813083 ld ra,40(sp) + 80013318: 02013403 ld s0,32(sp) + 8001331c: 03010113 addi sp,sp,48 + 80013320: 00008067 ret + +0000000080013324 : + 80013324: fc010113 addi sp,sp,-64 + 80013328: 02113c23 sd ra,56(sp) + 8001332c: 02813823 sd s0,48(sp) + 80013330: 04010413 addi s0,sp,64 + 80013334: fca43c23 sd a0,-40(s0) + 80013338: fcb43823 sd a1,-48(s0) + 8001333c: fcc43423 sd a2,-56(s0) + 80013340: fe042623 sw zero,-20(s0) + 80013344: fd843783 ld a5,-40(s0) + 80013348: 00079663 bnez a5,80013354 + 8001334c: fea00793 li a5,-22 + 80013350: 0700006f j 800133c0 + 80013354: fd843783 ld a5,-40(s0) + 80013358: 0207b783 ld a5,32(a5) + 8001335c: 0187b783 ld a5,24(a5) + 80013360: 00079663 bnez a5,8001336c + 80013364: fda00793 li a5,-38 + 80013368: 0580006f j 800133c0 + 8001336c: fd843783 ld a5,-40(s0) + 80013370: 0207b783 ld a5,32(a5) + 80013374: 0187b783 ld a5,24(a5) + 80013378: fc843603 ld a2,-56(s0) + 8001337c: fd043583 ld a1,-48(s0) + 80013380: fd843503 ld a0,-40(s0) + 80013384: 000780e7 jalr a5 + 80013388: 00050793 mv a5,a0 + 8001338c: fef42623 sw a5,-20(s0) + 80013390: fec42783 lw a5,-20(s0) + 80013394: 0007879b sext.w a5,a5 + 80013398: 0207d263 bgez a5,800133bc + 8001339c: fd843783 ld a5,-40(s0) + 800133a0: 0287a783 lw a5,40(a5) + 800133a4: 00078713 mv a4,a5 + 800133a8: 040007b7 lui a5,0x4000 + 800133ac: 00f767b3 or a5,a4,a5 + 800133b0: 0007871b sext.w a4,a5 + 800133b4: fd843783 ld a5,-40(s0) + 800133b8: 02e7a423 sw a4,40(a5) # 4000028 <__STACKSIZE__+0x3ffc028> + 800133bc: fec42783 lw a5,-20(s0) + 800133c0: 00078513 mv a0,a5 + 800133c4: 03813083 ld ra,56(sp) + 800133c8: 03013403 ld s0,48(sp) + 800133cc: 04010113 addi sp,sp,64 + 800133d0: 00008067 ret + +00000000800133d4 : + 800133d4: fd010113 addi sp,sp,-48 + 800133d8: 02113423 sd ra,40(sp) + 800133dc: 02813023 sd s0,32(sp) + 800133e0: 03010413 addi s0,sp,48 + 800133e4: fea43423 sd a0,-24(s0) + 800133e8: feb43023 sd a1,-32(s0) + 800133ec: fcc43c23 sd a2,-40(s0) + 800133f0: fe843783 ld a5,-24(s0) + 800133f4: 00078c63 beqz a5,8001340c + 800133f8: fe843783 ld a5,-24(s0) + 800133fc: 0027d783 lhu a5,2(a5) + 80013400: 0007871b sext.w a4,a5 + 80013404: 00200793 li a5,2 + 80013408: 00f70663 beq a4,a5,80013414 + 8001340c: fea00793 li a5,-22 + 80013410: 0440006f j 80013454 + 80013414: fe843783 ld a5,-24(s0) + 80013418: 0207b783 ld a5,32(a5) + 8001341c: 0387b783 ld a5,56(a5) + 80013420: 02078863 beqz a5,80013450 + 80013424: fe843783 ld a5,-24(s0) + 80013428: 0207b783 ld a5,32(a5) + 8001342c: 0387b703 ld a4,56(a5) + 80013430: fd843783 ld a5,-40(s0) + 80013434: 0007879b sext.w a5,a5 + 80013438: 00078613 mv a2,a5 + 8001343c: fe043583 ld a1,-32(s0) + 80013440: fe843503 ld a0,-24(s0) + 80013444: 000700e7 jalr a4 + 80013448: 00050793 mv a5,a0 + 8001344c: 0080006f j 80013454 + 80013450: fda00793 li a5,-38 + 80013454: 00078513 mv a0,a5 + 80013458: 02813083 ld ra,40(sp) + 8001345c: 02013403 ld s0,32(sp) + 80013460: 03010113 addi sp,sp,48 + 80013464: 00008067 ret + +0000000080013468 : + 80013468: fb010113 addi sp,sp,-80 + 8001346c: 04113423 sd ra,72(sp) + 80013470: 04813023 sd s0,64(sp) + 80013474: 02913c23 sd s1,56(sp) + 80013478: 05010413 addi s0,sp,80 + 8001347c: faa43c23 sd a0,-72(s0) + 80013480: fb843583 ld a1,-72(s0) + 80013484: 00000513 li a0,0 + 80013488: d94ff0ef jal ra,80012a1c + 8001348c: fca43823 sd a0,-48(s0) + 80013490: fd043783 ld a5,-48(s0) + 80013494: 00079663 bnez a5,800134a0 + 80013498: fea00793 li a5,-22 + 8001349c: 1200006f j 800135bc + 800134a0: fd043503 ld a0,-48(s0) + 800134a4: 881fd0ef jal ra,80010d24 + 800134a8: fca43423 sd a0,-56(s0) + 800134ac: fc843783 ld a5,-56(s0) + 800134b0: 00079863 bnez a5,800134c0 + 800134b4: ffe00793 li a5,-2 + 800134b8: fcf42e23 sw a5,-36(s0) + 800134bc: 0f40006f j 800135b0 + 800134c0: fd043503 ld a0,-48(s0) + 800134c4: b38ff0ef jal ra,800127fc + 800134c8: 00050793 mv a5,a0 + 800134cc: 00079863 bnez a5,800134dc + 800134d0: ff000793 li a5,-16 + 800134d4: fcf42e23 sw a5,-36(s0) + 800134d8: 0d80006f j 800135b0 + 800134dc: fc843783 ld a5,-56(s0) + 800134e0: 0107b783 ld a5,16(a5) + 800134e4: 0387b783 ld a5,56(a5) + 800134e8: 0c078063 beqz a5,800135a8 + 800134ec: fc843783 ld a5,-56(s0) + 800134f0: 0107b783 ld a5,16(a5) + 800134f4: 0087a783 lw a5,8(a5) + 800134f8: 0017f793 andi a5,a5,1 + 800134fc: 0007879b sext.w a5,a5 + 80013500: 08079263 bnez a5,80013584 + 80013504: fc843783 ld a5,-56(s0) + 80013508: 0087b783 ld a5,8(a5) + 8001350c: fd043583 ld a1,-48(s0) + 80013510: 00078513 mv a0,a5 + 80013514: c68ff0ef jal ra,8001297c + 80013518: 00050793 mv a5,a0 + 8001351c: 02079663 bnez a5,80013548 + 80013520: fc843783 ld a5,-56(s0) + 80013524: 0107b783 ld a5,16(a5) + 80013528: 0387b783 ld a5,56(a5) + 8001352c: 00005597 auipc a1,0x5 + 80013530: b0c58593 addi a1,a1,-1268 # 80018038 + 80013534: fc843503 ld a0,-56(s0) + 80013538: 000780e7 jalr a5 + 8001353c: 00050793 mv a5,a0 + 80013540: fcf42e23 sw a5,-36(s0) + 80013544: 06c0006f j 800135b0 + 80013548: fc843783 ld a5,-56(s0) + 8001354c: 0107b783 ld a5,16(a5) + 80013550: 0387b483 ld s1,56(a5) + 80013554: fc843783 ld a5,-56(s0) + 80013558: 0087b783 ld a5,8(a5) + 8001355c: fd043583 ld a1,-48(s0) + 80013560: 00078513 mv a0,a5 + 80013564: c18ff0ef jal ra,8001297c + 80013568: 00050793 mv a5,a0 + 8001356c: 00078593 mv a1,a5 + 80013570: fc843503 ld a0,-56(s0) + 80013574: 000480e7 jalr s1 + 80013578: 00050793 mv a5,a0 + 8001357c: fcf42e23 sw a5,-36(s0) + 80013580: 0300006f j 800135b0 + 80013584: fc843783 ld a5,-56(s0) + 80013588: 0107b783 ld a5,16(a5) + 8001358c: 0387b783 ld a5,56(a5) + 80013590: fd043583 ld a1,-48(s0) + 80013594: fc843503 ld a0,-56(s0) + 80013598: 000780e7 jalr a5 + 8001359c: 00050793 mv a5,a0 + 800135a0: fcf42e23 sw a5,-36(s0) + 800135a4: 00c0006f j 800135b0 + 800135a8: fda00793 li a5,-38 + 800135ac: fcf42e23 sw a5,-36(s0) + 800135b0: fd043503 ld a0,-48(s0) + 800135b4: 8e1f10ef jal ra,80004e94 + 800135b8: fdc42783 lw a5,-36(s0) + 800135bc: 00078513 mv a0,a5 + 800135c0: 04813083 ld ra,72(sp) + 800135c4: 04013403 ld s0,64(sp) + 800135c8: 03813483 ld s1,56(sp) + 800135cc: 05010113 addi sp,sp,80 + 800135d0: 00008067 ret + +00000000800135d4 : + 800135d4: fd010113 addi sp,sp,-48 + 800135d8: 02113423 sd ra,40(sp) + 800135dc: 02813023 sd s0,32(sp) + 800135e0: 03010413 addi s0,sp,48 + 800135e4: fea43423 sd a0,-24(s0) + 800135e8: feb43023 sd a1,-32(s0) + 800135ec: fcc43c23 sd a2,-40(s0) + 800135f0: fe843783 ld a5,-24(s0) + 800135f4: 00079663 bnez a5,80013600 + 800135f8: fea00793 li a5,-22 + 800135fc: 03c0006f j 80013638 + 80013600: fe843783 ld a5,-24(s0) + 80013604: 0207b783 ld a5,32(a5) + 80013608: 0207b783 ld a5,32(a5) + 8001360c: 00079663 bnez a5,80013618 + 80013610: fda00793 li a5,-38 + 80013614: 0240006f j 80013638 + 80013618: fe843783 ld a5,-24(s0) + 8001361c: 0207b783 ld a5,32(a5) + 80013620: 0207b783 ld a5,32(a5) + 80013624: fd843603 ld a2,-40(s0) + 80013628: fe043583 ld a1,-32(s0) + 8001362c: fe843503 ld a0,-24(s0) + 80013630: 000780e7 jalr a5 + 80013634: 00050793 mv a5,a0 + 80013638: 00078513 mv a0,a5 + 8001363c: 02813083 ld ra,40(sp) + 80013640: 02013403 ld s0,32(sp) + 80013644: 03010113 addi sp,sp,48 + 80013648: 00008067 ret + +000000008001364c : + 8001364c: fd010113 addi sp,sp,-48 + 80013650: 02113423 sd ra,40(sp) + 80013654: 02813023 sd s0,32(sp) + 80013658: 03010413 addi s0,sp,48 + 8001365c: fca43c23 sd a0,-40(s0) + 80013660: fcb43823 sd a1,-48(s0) + 80013664: fd843783 ld a5,-40(s0) + 80013668: 00079663 bnez a5,80013674 + 8001366c: fea00793 li a5,-22 + 80013670: 0580006f j 800136c8 + 80013674: fd843783 ld a5,-40(s0) + 80013678: 0207b783 ld a5,32(a5) + 8001367c: 0307b783 ld a5,48(a5) + 80013680: 00079663 bnez a5,8001368c + 80013684: fda00793 li a5,-38 + 80013688: 0400006f j 800136c8 + 8001368c: fd843783 ld a5,-40(s0) + 80013690: 0207b783 ld a5,32(a5) + 80013694: 0307b783 ld a5,48(a5) + 80013698: fd043583 ld a1,-48(s0) + 8001369c: fd843503 ld a0,-40(s0) + 800136a0: 000780e7 jalr a5 + 800136a4: 00050793 mv a5,a0 + 800136a8: fef42623 sw a5,-20(s0) + 800136ac: fec42783 lw a5,-20(s0) + 800136b0: 0007879b sext.w a5,a5 + 800136b4: 0007c863 bltz a5,800136c4 + 800136b8: fec42703 lw a4,-20(s0) + 800136bc: fd843783 ld a5,-40(s0) + 800136c0: 02e7bc23 sd a4,56(a5) + 800136c4: fec42783 lw a5,-20(s0) + 800136c8: 00078513 mv a0,a5 + 800136cc: 02813083 ld ra,40(sp) + 800136d0: 02013403 ld s0,32(sp) + 800136d4: 03010113 addi sp,sp,48 + 800136d8: 00008067 ret + +00000000800136dc : + 800136dc: fb010113 addi sp,sp,-80 + 800136e0: 04113423 sd ra,72(sp) + 800136e4: 04813023 sd s0,64(sp) + 800136e8: 02913c23 sd s1,56(sp) + 800136ec: 05010413 addi s0,sp,80 + 800136f0: faa43c23 sd a0,-72(s0) + 800136f4: fab43823 sd a1,-80(s0) + 800136f8: fb843583 ld a1,-72(s0) + 800136fc: 00000513 li a0,0 + 80013700: b1cff0ef jal ra,80012a1c + 80013704: fca43823 sd a0,-48(s0) + 80013708: fd043783 ld a5,-48(s0) + 8001370c: 00079663 bnez a5,80013718 + 80013710: fff00793 li a5,-1 + 80013714: 1b40006f j 800138c8 + 80013718: fd043503 ld a0,-48(s0) + 8001371c: e08fd0ef jal ra,80010d24 + 80013720: fca43423 sd a0,-56(s0) + 80013724: fc843783 ld a5,-56(s0) + 80013728: 02079e63 bnez a5,80013764 + 8001372c: 00005517 auipc a0,0x5 + 80013730: 91450513 addi a0,a0,-1772 # 80018040 + 80013734: ae9f40ef jal ra,8000821c + 80013738: fd043583 ld a1,-48(s0) + 8001373c: 00005517 auipc a0,0x5 + 80013740: 91450513 addi a0,a0,-1772 # 80018050 + 80013744: ad9f40ef jal ra,8000821c + 80013748: 00005517 auipc a0,0x5 + 8001374c: 93850513 addi a0,a0,-1736 # 80018080 + 80013750: acdf40ef jal ra,8000821c + 80013754: fd043503 ld a0,-48(s0) + 80013758: f3cf10ef jal ra,80004e94 + 8001375c: ffe00793 li a5,-2 + 80013760: 1680006f j 800138c8 + 80013764: fd043783 ld a5,-48(s0) + 80013768: 0007c783 lbu a5,0(a5) + 8001376c: 00078713 mv a4,a5 + 80013770: 02f00793 li a5,47 + 80013774: 00f71a63 bne a4,a5,80013788 + 80013778: fd043783 ld a5,-48(s0) + 8001377c: 00178793 addi a5,a5,1 + 80013780: 0007c783 lbu a5,0(a5) + 80013784: 02078063 beqz a5,800137a4 + 80013788: fc843783 ld a5,-56(s0) + 8001378c: 0087b783 ld a5,8(a5) + 80013790: fd043583 ld a1,-48(s0) + 80013794: 00078513 mv a0,a5 + 80013798: 9e4ff0ef jal ra,8001297c + 8001379c: 00050793 mv a5,a0 + 800137a0: 04079e63 bnez a5,800137fc + 800137a4: fb043783 ld a5,-80(s0) + 800137a8: 0007b023 sd zero,0(a5) + 800137ac: fb043783 ld a5,-80(s0) + 800137b0: 1b600713 li a4,438 + 800137b4: 00e7a823 sw a4,16(a5) + 800137b8: fb043783 ld a5,-80(s0) + 800137bc: 0107a783 lw a5,16(a5) + 800137c0: 00078713 mv a4,a5 + 800137c4: 000047b7 lui a5,0x4 + 800137c8: 04978793 addi a5,a5,73 # 4049 <__STACKSIZE__+0x49> + 800137cc: 00f767b3 or a5,a4,a5 + 800137d0: 0007871b sext.w a4,a5 + 800137d4: fb043783 ld a5,-80(s0) + 800137d8: 00e7a823 sw a4,16(a5) + 800137dc: fb043783 ld a5,-80(s0) + 800137e0: 0207b823 sd zero,48(a5) + 800137e4: fb043783 ld a5,-80(s0) + 800137e8: 0407bc23 sd zero,88(a5) + 800137ec: fd043503 ld a0,-48(s0) + 800137f0: ea4f10ef jal ra,80004e94 + 800137f4: 00000793 li a5,0 + 800137f8: 0d00006f j 800138c8 + 800137fc: fc843783 ld a5,-56(s0) + 80013800: 0107b783 ld a5,16(a5) + 80013804: 0407b783 ld a5,64(a5) + 80013808: 02079c63 bnez a5,80013840 + 8001380c: fd043503 ld a0,-48(s0) + 80013810: e84f10ef jal ra,80004e94 + 80013814: 00005517 auipc a0,0x5 + 80013818: 82c50513 addi a0,a0,-2004 # 80018040 + 8001381c: a01f40ef jal ra,8000821c + 80013820: 00005517 auipc a0,0x5 + 80013824: 86850513 addi a0,a0,-1944 # 80018088 + 80013828: 9f5f40ef jal ra,8000821c + 8001382c: 00005517 auipc a0,0x5 + 80013830: 85450513 addi a0,a0,-1964 # 80018080 + 80013834: 9e9f40ef jal ra,8000821c + 80013838: fda00793 li a5,-38 + 8001383c: 08c0006f j 800138c8 + 80013840: fc843783 ld a5,-56(s0) + 80013844: 0107b783 ld a5,16(a5) + 80013848: 0087a783 lw a5,8(a5) + 8001384c: 0017f793 andi a5,a5,1 + 80013850: 0007879b sext.w a5,a5 + 80013854: 02078663 beqz a5,80013880 + 80013858: fc843783 ld a5,-56(s0) + 8001385c: 0107b783 ld a5,16(a5) + 80013860: 0407b783 ld a5,64(a5) + 80013864: fb043603 ld a2,-80(s0) + 80013868: fd043583 ld a1,-48(s0) + 8001386c: fc843503 ld a0,-56(s0) + 80013870: 000780e7 jalr a5 + 80013874: 00050793 mv a5,a0 + 80013878: fcf42e23 sw a5,-36(s0) + 8001387c: 0400006f j 800138bc + 80013880: fc843783 ld a5,-56(s0) + 80013884: 0107b783 ld a5,16(a5) + 80013888: 0407b483 ld s1,64(a5) + 8001388c: fc843783 ld a5,-56(s0) + 80013890: 0087b783 ld a5,8(a5) + 80013894: fd043583 ld a1,-48(s0) + 80013898: 00078513 mv a0,a5 + 8001389c: 8e0ff0ef jal ra,8001297c + 800138a0: 00050793 mv a5,a0 + 800138a4: fb043603 ld a2,-80(s0) + 800138a8: 00078593 mv a1,a5 + 800138ac: fc843503 ld a0,-56(s0) + 800138b0: 000480e7 jalr s1 + 800138b4: 00050793 mv a5,a0 + 800138b8: fcf42e23 sw a5,-36(s0) + 800138bc: fd043503 ld a0,-48(s0) + 800138c0: dd4f10ef jal ra,80004e94 + 800138c4: fdc42783 lw a5,-36(s0) + 800138c8: 00078513 mv a0,a5 + 800138cc: 04813083 ld ra,72(sp) + 800138d0: 04013403 ld s0,64(sp) + 800138d4: 03813483 ld s1,56(sp) + 800138d8: 05010113 addi sp,sp,80 + 800138dc: 00008067 ret + +00000000800138e0 : + 800138e0: fa010113 addi sp,sp,-96 + 800138e4: 04113c23 sd ra,88(sp) + 800138e8: 04813823 sd s0,80(sp) + 800138ec: 04913423 sd s1,72(sp) + 800138f0: 05213023 sd s2,64(sp) + 800138f4: 06010413 addi s0,sp,96 + 800138f8: faa43423 sd a0,-88(s0) + 800138fc: fab43023 sd a1,-96(s0) + 80013900: fc042e23 sw zero,-36(s0) + 80013904: fc043823 sd zero,-48(s0) + 80013908: fc043423 sd zero,-56(s0) + 8001390c: fa843583 ld a1,-88(s0) + 80013910: 00000513 li a0,0 + 80013914: 908ff0ef jal ra,80012a1c + 80013918: fca43423 sd a0,-56(s0) + 8001391c: fc843783 ld a5,-56(s0) + 80013920: 00079863 bnez a5,80013930 + 80013924: ffe00793 li a5,-2 + 80013928: fcf42e23 sw a5,-36(s0) + 8001392c: 1080006f j 80013a34 + 80013930: fa043583 ld a1,-96(s0) + 80013934: 00000513 li a0,0 + 80013938: 8e4ff0ef jal ra,80012a1c + 8001393c: fca43823 sd a0,-48(s0) + 80013940: fd043783 ld a5,-48(s0) + 80013944: 00079863 bnez a5,80013954 + 80013948: ffe00793 li a5,-2 + 8001394c: fcf42e23 sw a5,-36(s0) + 80013950: 0e40006f j 80013a34 + 80013954: fc843503 ld a0,-56(s0) + 80013958: bccfd0ef jal ra,80010d24 + 8001395c: fca43023 sd a0,-64(s0) + 80013960: fd043503 ld a0,-48(s0) + 80013964: bc0fd0ef jal ra,80010d24 + 80013968: faa43c23 sd a0,-72(s0) + 8001396c: fc043703 ld a4,-64(s0) + 80013970: fb843783 ld a5,-72(s0) + 80013974: 0af71c63 bne a4,a5,80013a2c + 80013978: fc043783 ld a5,-64(s0) + 8001397c: 0107b783 ld a5,16(a5) + 80013980: 0487b783 ld a5,72(a5) + 80013984: 00079863 bnez a5,80013994 + 80013988: fda00793 li a5,-38 + 8001398c: fcf42e23 sw a5,-36(s0) + 80013990: 0a40006f j 80013a34 + 80013994: fc043783 ld a5,-64(s0) + 80013998: 0107b783 ld a5,16(a5) + 8001399c: 0087a783 lw a5,8(a5) + 800139a0: 0017f793 andi a5,a5,1 + 800139a4: 0007879b sext.w a5,a5 + 800139a8: 02078663 beqz a5,800139d4 + 800139ac: fc043783 ld a5,-64(s0) + 800139b0: 0107b783 ld a5,16(a5) + 800139b4: 0487b783 ld a5,72(a5) + 800139b8: fd043603 ld a2,-48(s0) + 800139bc: fc843583 ld a1,-56(s0) + 800139c0: fc043503 ld a0,-64(s0) + 800139c4: 000780e7 jalr a5 + 800139c8: 00050793 mv a5,a0 + 800139cc: fcf42e23 sw a5,-36(s0) + 800139d0: 0640006f j 80013a34 + 800139d4: fc043783 ld a5,-64(s0) + 800139d8: 0107b783 ld a5,16(a5) + 800139dc: 0487b903 ld s2,72(a5) + 800139e0: fc043783 ld a5,-64(s0) + 800139e4: 0087b783 ld a5,8(a5) + 800139e8: fc843583 ld a1,-56(s0) + 800139ec: 00078513 mv a0,a5 + 800139f0: f8dfe0ef jal ra,8001297c + 800139f4: 00050493 mv s1,a0 + 800139f8: fb843783 ld a5,-72(s0) + 800139fc: 0087b783 ld a5,8(a5) + 80013a00: fd043583 ld a1,-48(s0) + 80013a04: 00078513 mv a0,a5 + 80013a08: f75fe0ef jal ra,8001297c + 80013a0c: 00050793 mv a5,a0 + 80013a10: 00078613 mv a2,a5 + 80013a14: 00048593 mv a1,s1 + 80013a18: fc043503 ld a0,-64(s0) + 80013a1c: 000900e7 jalr s2 + 80013a20: 00050793 mv a5,a0 + 80013a24: fcf42e23 sw a5,-36(s0) + 80013a28: 00c0006f j 80013a34 + 80013a2c: fee00793 li a5,-18 + 80013a30: fcf42e23 sw a5,-36(s0) + 80013a34: fc843503 ld a0,-56(s0) + 80013a38: c5cf10ef jal ra,80004e94 + 80013a3c: fd043503 ld a0,-48(s0) + 80013a40: c54f10ef jal ra,80004e94 + 80013a44: fdc42783 lw a5,-36(s0) + 80013a48: 00078513 mv a0,a5 + 80013a4c: 05813083 ld ra,88(sp) + 80013a50: 05013403 ld s0,80(sp) + 80013a54: 04813483 ld s1,72(sp) + 80013a58: 04013903 ld s2,64(sp) + 80013a5c: 06010113 addi sp,sp,96 + 80013a60: 00008067 ret + +0000000080013a64 : + 80013a64: f4010113 addi sp,sp,-192 + 80013a68: 0a113c23 sd ra,184(sp) + 80013a6c: 0a813823 sd s0,176(sp) + 80013a70: 0c010413 addi s0,sp,192 + 80013a74: f4a43423 sd a0,-184(s0) + 80013a78: fe043023 sd zero,-32(s0) + 80013a7c: f4843783 ld a5,-184(s0) + 80013a80: 02079063 bnez a5,80013aa0 + 80013a84: 00006517 auipc a0,0x6 + 80013a88: 41c50513 addi a0,a0,1052 # 80019ea0 + 80013a8c: fa0f30ef jal ra,8000722c + 80013a90: fea43423 sd a0,-24(s0) + 80013a94: fe843783 ld a5,-24(s0) + 80013a98: 00079863 bnez a5,80013aa8 + 80013a9c: 1800006f j 80013c1c + 80013aa0: f4843783 ld a5,-184(s0) + 80013aa4: fef43423 sd a5,-24(s0) + 80013aa8: 00010637 lui a2,0x10 + 80013aac: fe843583 ld a1,-24(s0) + 80013ab0: 00017517 auipc a0,0x17 + 80013ab4: 68850513 addi a0,a0,1672 # 8002b138 + 80013ab8: d8cff0ef jal ra,80013044 + 80013abc: 00050793 mv a5,a0 + 80013ac0: 14079063 bnez a5,80013c00 + 80013ac4: fe843583 ld a1,-24(s0) + 80013ac8: 00004517 auipc a0,0x4 + 80013acc: 5f050513 addi a0,a0,1520 # 800180b8 + 80013ad0: f4cf40ef jal ra,8000821c + 80013ad4: 10400613 li a2,260 + 80013ad8: 00000593 li a1,0 + 80013adc: 00017517 auipc a0,0x17 + 80013ae0: 6a450513 addi a0,a0,1700 # 8002b180 + 80013ae4: f35ec0ef jal ra,80000a18 + 80013ae8: 10400613 li a2,260 + 80013aec: 00017597 auipc a1,0x17 + 80013af0: 69458593 addi a1,a1,1684 # 8002b180 + 80013af4: 00017517 auipc a0,0x17 + 80013af8: 64450513 addi a0,a0,1604 # 8002b138 + 80013afc: 8d9ff0ef jal ra,800133d4 + 80013b00: 00050793 mv a5,a0 + 80013b04: fcf42e23 sw a5,-36(s0) + 80013b08: fdc42783 lw a5,-36(s0) + 80013b0c: 0007879b sext.w a5,a5 + 80013b10: 0cf05663 blez a5,80013bdc + 80013b14: f5840793 addi a5,s0,-168 + 80013b18: 08000613 li a2,128 + 80013b1c: 00000593 li a1,0 + 80013b20: 00078513 mv a0,a5 + 80013b24: ef5ec0ef jal ra,80000a18 + 80013b28: 00017597 auipc a1,0x17 + 80013b2c: 65c58593 addi a1,a1,1628 # 8002b184 + 80013b30: fe843503 ld a0,-24(s0) + 80013b34: ee9fe0ef jal ra,80012a1c + 80013b38: fea43023 sd a0,-32(s0) + 80013b3c: fe043783 ld a5,-32(s0) + 80013b40: 0a078663 beqz a5,80013bec + 80013b44: f5840793 addi a5,s0,-168 + 80013b48: 00078593 mv a1,a5 + 80013b4c: fe043503 ld a0,-32(s0) + 80013b50: b8dff0ef jal ra,800136dc + 80013b54: 00050793 mv a5,a0 + 80013b58: 06079463 bnez a5,80013bc0 + 80013b5c: 00017597 auipc a1,0x17 + 80013b60: 62858593 addi a1,a1,1576 # 8002b184 + 80013b64: 00004517 auipc a0,0x4 + 80013b68: 56450513 addi a0,a0,1380 # 800180c8 + 80013b6c: eb0f40ef jal ra,8000821c + 80013b70: f6842783 lw a5,-152(s0) + 80013b74: 00078713 mv a4,a5 + 80013b78: 0000f7b7 lui a5,0xf + 80013b7c: 00f777b3 and a5,a4,a5 + 80013b80: 0007879b sext.w a5,a5 + 80013b84: 00078713 mv a4,a5 + 80013b88: 000047b7 lui a5,0x4 + 80013b8c: 00f71e63 bne a4,a5,80013ba8 + 80013b90: 00004597 auipc a1,0x4 + 80013b94: 54058593 addi a1,a1,1344 # 800180d0 + 80013b98: 00004517 auipc a0,0x4 + 80013b9c: 54050513 addi a0,a0,1344 # 800180d8 + 80013ba0: e7cf40ef jal ra,8000821c + 80013ba4: 0300006f j 80013bd4 + 80013ba8: f8843783 ld a5,-120(s0) + 80013bac: 00078593 mv a1,a5 + 80013bb0: 00004517 auipc a0,0x4 + 80013bb4: 53050513 addi a0,a0,1328 # 800180e0 + 80013bb8: e64f40ef jal ra,8000821c + 80013bbc: 0180006f j 80013bd4 + 80013bc0: 00017597 auipc a1,0x17 + 80013bc4: 5c458593 addi a1,a1,1476 # 8002b184 + 80013bc8: 00004517 auipc a0,0x4 + 80013bcc: 52050513 addi a0,a0,1312 # 800180e8 + 80013bd0: e4cf40ef jal ra,8000821c + 80013bd4: fe043503 ld a0,-32(s0) + 80013bd8: abcf10ef jal ra,80004e94 + 80013bdc: fdc42783 lw a5,-36(s0) + 80013be0: 0007879b sext.w a5,a5 + 80013be4: eef048e3 bgtz a5,80013ad4 + 80013be8: 0080006f j 80013bf0 + 80013bec: 00000013 nop + 80013bf0: 00017517 auipc a0,0x17 + 80013bf4: 54850513 addi a0,a0,1352 # 8002b138 + 80013bf8: e94ff0ef jal ra,8001328c + 80013bfc: 0100006f j 80013c0c + 80013c00: 00004517 auipc a0,0x4 + 80013c04: 4f850513 addi a0,a0,1272 # 800180f8 + 80013c08: e14f40ef jal ra,8000821c + 80013c0c: f4843783 ld a5,-184(s0) + 80013c10: 00079663 bnez a5,80013c1c + 80013c14: fe843503 ld a0,-24(s0) + 80013c18: a7cf10ef jal ra,80004e94 + 80013c1c: 0b813083 ld ra,184(sp) + 80013c20: 0b013403 ld s0,176(sp) + 80013c24: 0c010113 addi sp,sp,192 + 80013c28: 00008067 ret + +0000000080013c2c : + 80013c2c: fe010113 addi sp,sp,-32 + 80013c30: 00113c23 sd ra,24(sp) + 80013c34: 00813823 sd s0,16(sp) + 80013c38: 02010413 addi s0,sp,32 + 80013c3c: fea43423 sd a0,-24(s0) + 80013c40: fe843503 ld a0,-24(s0) + 80013c44: 825ff0ef jal ra,80013468 + 80013c48: 00050793 mv a5,a0 + 80013c4c: 0007da63 bgez a5,80013c60 + 80013c50: fe843583 ld a1,-24(s0) + 80013c54: 00004517 auipc a0,0x4 + 80013c58: 4bc50513 addi a0,a0,1212 # 80018110 + 80013c5c: dc0f40ef jal ra,8000821c + 80013c60: 00000013 nop + 80013c64: 01813083 ld ra,24(sp) + 80013c68: 01013403 ld s0,16(sp) + 80013c6c: 02010113 addi sp,sp,32 + 80013c70: 00008067 ret + +0000000080013c74 : + 80013c74: f8010113 addi sp,sp,-128 + 80013c78: 06113c23 sd ra,120(sp) + 80013c7c: 06813823 sd s0,112(sp) + 80013c80: 08010413 addi s0,sp,128 + 80013c84: f8a43423 sd a0,-120(s0) + 80013c88: 00000613 li a2,0 + 80013c8c: f8843583 ld a1,-120(s0) + 80013c90: 00017517 auipc a0,0x17 + 80013c94: 4a850513 addi a0,a0,1192 # 8002b138 + 80013c98: bacff0ef jal ra,80013044 + 80013c9c: 00050793 mv a5,a0 + 80013ca0: 0007dc63 bgez a5,80013cb8 + 80013ca4: f8843583 ld a1,-120(s0) + 80013ca8: 00004517 auipc a0,0x4 + 80013cac: 48050513 addi a0,a0,1152 # 80018128 + 80013cb0: d6cf40ef jal ra,8000821c + 80013cb4: 07c0006f j 80013d30 + 80013cb8: f9840793 addi a5,s0,-104 + 80013cbc: 05100613 li a2,81 + 80013cc0: 00000593 li a1,0 + 80013cc4: 00078513 mv a0,a5 + 80013cc8: d51ec0ef jal ra,80000a18 + 80013ccc: f9840793 addi a5,s0,-104 + 80013cd0: 05000613 li a2,80 + 80013cd4: 00078593 mv a1,a5 + 80013cd8: 00017517 auipc a0,0x17 + 80013cdc: 46050513 addi a0,a0,1120 # 8002b138 + 80013ce0: e44ff0ef jal ra,80013324 + 80013ce4: 00050793 mv a5,a0 + 80013ce8: fef42623 sw a5,-20(s0) + 80013cec: fec42783 lw a5,-20(s0) + 80013cf0: 0007879b sext.w a5,a5 + 80013cf4: 00078c63 beqz a5,80013d0c + 80013cf8: f9840793 addi a5,s0,-104 + 80013cfc: 00078593 mv a1,a5 + 80013d00: 00004517 auipc a0,0x4 + 80013d04: 43850513 addi a0,a0,1080 # 80018138 + 80013d08: d14f40ef jal ra,8000821c + 80013d0c: fec42783 lw a5,-20(s0) + 80013d10: 0007879b sext.w a5,a5 + 80013d14: fa0792e3 bnez a5,80013cb8 + 80013d18: 00004517 auipc a0,0x4 + 80013d1c: 36850513 addi a0,a0,872 # 80018080 + 80013d20: cfcf40ef jal ra,8000821c + 80013d24: 00017517 auipc a0,0x17 + 80013d28: 41450513 addi a0,a0,1044 # 8002b138 + 80013d2c: d60ff0ef jal ra,8001328c + 80013d30: 07813083 ld ra,120(sp) + 80013d34: 07013403 ld s0,112(sp) + 80013d38: 08010113 addi sp,sp,128 + 80013d3c: 00008067 ret + +0000000080013d40 : + 80013d40: f8010113 addi sp,sp,-128 + 80013d44: 06113c23 sd ra,120(sp) + 80013d48: 06813823 sd s0,112(sp) + 80013d4c: 08010413 addi s0,sp,128 + 80013d50: f8a43423 sd a0,-120(s0) + 80013d54: f8b43023 sd a1,-128(s0) + 80013d58: 00001537 lui a0,0x1 + 80013d5c: 8cdf00ef jal ra,80004628 + 80013d60: fea43423 sd a0,-24(s0) + 80013d64: fe843783 ld a5,-24(s0) + 80013d68: 00079a63 bnez a5,80013d7c + 80013d6c: 00004517 auipc a0,0x4 + 80013d70: 3d450513 addi a0,a0,980 # 80018140 + 80013d74: ca8f40ef jal ra,8000821c + 80013d78: 1200006f j 80013e98 + 80013d7c: f9840793 addi a5,s0,-104 + 80013d80: 00000613 li a2,0 + 80013d84: f8843583 ld a1,-120(s0) + 80013d88: 00078513 mv a0,a5 + 80013d8c: ab8ff0ef jal ra,80013044 + 80013d90: 00050793 mv a5,a0 + 80013d94: 0207d063 bgez a5,80013db4 + 80013d98: fe843503 ld a0,-24(s0) + 80013d9c: 8f8f10ef jal ra,80004e94 + 80013da0: f8843583 ld a1,-120(s0) + 80013da4: 00004517 auipc a0,0x4 + 80013da8: 3ac50513 addi a0,a0,940 # 80018150 + 80013dac: c70f40ef jal ra,8000821c + 80013db0: 0e80006f j 80013e98 + 80013db4: 04100613 li a2,65 + 80013db8: f8043583 ld a1,-128(s0) + 80013dbc: 00017517 auipc a0,0x17 + 80013dc0: 37c50513 addi a0,a0,892 # 8002b138 + 80013dc4: a80ff0ef jal ra,80013044 + 80013dc8: 00050793 mv a5,a0 + 80013dcc: 0207d663 bgez a5,80013df8 + 80013dd0: fe843503 ld a0,-24(s0) + 80013dd4: 8c0f10ef jal ra,80004e94 + 80013dd8: f9840793 addi a5,s0,-104 + 80013ddc: 00078513 mv a0,a5 + 80013de0: cacff0ef jal ra,8001328c + 80013de4: f8043583 ld a1,-128(s0) + 80013de8: 00004517 auipc a0,0x4 + 80013dec: 37850513 addi a0,a0,888 # 80018160 + 80013df0: c2cf40ef jal ra,8000821c + 80013df4: 0a40006f j 80013e98 + 80013df8: f9840793 addi a5,s0,-104 + 80013dfc: 00001637 lui a2,0x1 + 80013e00: fe843583 ld a1,-24(s0) + 80013e04: 00078513 mv a0,a5 + 80013e08: d1cff0ef jal ra,80013324 + 80013e0c: 00050793 mv a5,a0 + 80013e10: fef42223 sw a5,-28(s0) + 80013e14: fe442783 lw a5,-28(s0) + 80013e18: 0007879b sext.w a5,a5 + 80013e1c: 04f05863 blez a5,80013e6c + 80013e20: fe442783 lw a5,-28(s0) + 80013e24: 00078613 mv a2,a5 + 80013e28: fe843583 ld a1,-24(s0) + 80013e2c: 00017517 auipc a0,0x17 + 80013e30: 30c50513 addi a0,a0,780 # 8002b138 + 80013e34: fa0ff0ef jal ra,800135d4 + 80013e38: 00050793 mv a5,a0 + 80013e3c: fef42023 sw a5,-32(s0) + 80013e40: fe042703 lw a4,-32(s0) + 80013e44: fe442783 lw a5,-28(s0) + 80013e48: 0007071b sext.w a4,a4 + 80013e4c: 0007879b sext.w a5,a5 + 80013e50: 00f70e63 beq a4,a5,80013e6c + 80013e54: fe042783 lw a5,-32(s0) + 80013e58: 00078593 mv a1,a5 + 80013e5c: 00004517 auipc a0,0x4 + 80013e60: 31c50513 addi a0,a0,796 # 80018178 + 80013e64: bb8f40ef jal ra,8000821c + 80013e68: 0100006f j 80013e78 + 80013e6c: fe442783 lw a5,-28(s0) + 80013e70: 0007879b sext.w a5,a5 + 80013e74: f8f042e3 bgtz a5,80013df8 + 80013e78: f9840793 addi a5,s0,-104 + 80013e7c: 00078513 mv a0,a5 + 80013e80: c0cff0ef jal ra,8001328c + 80013e84: 00017517 auipc a0,0x17 + 80013e88: 2b450513 addi a0,a0,692 # 8002b138 + 80013e8c: c00ff0ef jal ra,8001328c + 80013e90: fe843503 ld a0,-24(s0) + 80013e94: 800f10ef jal ra,80004e94 + 80013e98: 07813083 ld ra,120(sp) + 80013e9c: 07013403 ld s0,112(sp) + 80013ea0: 08010113 addi sp,sp,128 + 80013ea4: 00008067 ret + +0000000080013ea8 : + 80013ea8: df010113 addi sp,sp,-528 + 80013eac: 20113423 sd ra,520(sp) + 80013eb0: 20813023 sd s0,512(sp) + 80013eb4: 21010413 addi s0,sp,528 + 80013eb8: dea43c23 sd a0,-520(s0) + 80013ebc: deb43823 sd a1,-528(s0) + 80013ec0: e0840793 addi a5,s0,-504 + 80013ec4: 00010637 lui a2,0x10 + 80013ec8: df843583 ld a1,-520(s0) + 80013ecc: 00078513 mv a0,a5 + 80013ed0: 974ff0ef jal ra,80013044 + 80013ed4: 00050793 mv a5,a0 + 80013ed8: 0007dc63 bgez a5,80013ef0 + 80013edc: df843583 ld a1,-520(s0) + 80013ee0: 00004517 auipc a0,0x4 + 80013ee4: 2c050513 addi a0,a0,704 # 800181a0 + 80013ee8: b34f40ef jal ra,8000821c + 80013eec: 1b40006f j 800140a0 + 80013ef0: ed040793 addi a5,s0,-304 + 80013ef4: 10400613 li a2,260 + 80013ef8: 00000593 li a1,0 + 80013efc: 00078513 mv a0,a5 + 80013f00: b19ec0ef jal ra,80000a18 + 80013f04: ed040713 addi a4,s0,-304 + 80013f08: e0840793 addi a5,s0,-504 + 80013f0c: 10400613 li a2,260 + 80013f10: 00070593 mv a1,a4 + 80013f14: 00078513 mv a0,a5 + 80013f18: cbcff0ef jal ra,800133d4 + 80013f1c: 00050793 mv a5,a0 + 80013f20: fef42623 sw a5,-20(s0) + 80013f24: fec42783 lw a5,-20(s0) + 80013f28: 0007879b sext.w a5,a5 + 80013f2c: 14f05e63 blez a5,80014088 + 80013f30: fe043023 sd zero,-32(s0) + 80013f34: fc043c23 sd zero,-40(s0) + 80013f38: ed040793 addi a5,s0,-304 + 80013f3c: 00478793 addi a5,a5,4 # 4004 <__STACKSIZE__+0x4> + 80013f40: 00004597 auipc a1,0x4 + 80013f44: 27058593 addi a1,a1,624 # 800181b0 + 80013f48: 00078513 mv a0,a5 + 80013f4c: a4dec0ef jal ra,80000998 + 80013f50: 00050793 mv a5,a0 + 80013f54: 12078863 beqz a5,80014084 + 80013f58: ed040793 addi a5,s0,-304 + 80013f5c: 00478793 addi a5,a5,4 + 80013f60: 00004597 auipc a1,0x4 + 80013f64: 25858593 addi a1,a1,600 # 800181b8 + 80013f68: 00078513 mv a0,a5 + 80013f6c: a2dec0ef jal ra,80000998 + 80013f70: 00050793 mv a5,a0 + 80013f74: 10078863 beqz a5,80014084 + 80013f78: ed040793 addi a5,s0,-304 + 80013f7c: 00478793 addi a5,a5,4 + 80013f80: 00078593 mv a1,a5 + 80013f84: df843503 ld a0,-520(s0) + 80013f88: a95fe0ef jal ra,80012a1c + 80013f8c: fea43023 sd a0,-32(s0) + 80013f90: fe043783 ld a5,-32(s0) + 80013f94: 00079a63 bnez a5,80013fa8 + 80013f98: 00004517 auipc a0,0x4 + 80013f9c: 22850513 addi a0,a0,552 # 800181c0 + 80013fa0: a7cf40ef jal ra,8000821c + 80013fa4: 0f00006f j 80014094 + 80013fa8: ed040793 addi a5,s0,-304 + 80013fac: 00478793 addi a5,a5,4 + 80013fb0: 00078593 mv a1,a5 + 80013fb4: df043503 ld a0,-528(s0) + 80013fb8: a65fe0ef jal ra,80012a1c + 80013fbc: fca43c23 sd a0,-40(s0) + 80013fc0: fd843783 ld a5,-40(s0) + 80013fc4: 00079e63 bnez a5,80013fe0 + 80013fc8: 00004517 auipc a0,0x4 + 80013fcc: 1f850513 addi a0,a0,504 # 800181c0 + 80013fd0: a4cf40ef jal ra,8000821c + 80013fd4: fe043503 ld a0,-32(s0) + 80013fd8: ebdf00ef jal ra,80004e94 + 80013fdc: 0b80006f j 80014094 + 80013fe0: e5040793 addi a5,s0,-432 + 80013fe4: 08000613 li a2,128 + 80013fe8: 00000593 li a1,0 + 80013fec: 00078513 mv a0,a5 + 80013ff0: a29ec0ef jal ra,80000a18 + 80013ff4: e5040793 addi a5,s0,-432 + 80013ff8: 00078593 mv a1,a5 + 80013ffc: fe043503 ld a0,-32(s0) + 80014000: edcff0ef jal ra,800136dc + 80014004: 00050793 mv a5,a0 + 80014008: 02078063 beqz a5,80014028 + 8001400c: ed040793 addi a5,s0,-304 + 80014010: 00478793 addi a5,a5,4 + 80014014: 00078593 mv a1,a5 + 80014018: 00004517 auipc a0,0x4 + 8001401c: 1b850513 addi a0,a0,440 # 800181d0 + 80014020: 9fcf40ef jal ra,8000821c + 80014024: 0640006f j 80014088 + 80014028: e6042783 lw a5,-416(s0) + 8001402c: 00078713 mv a4,a5 + 80014030: 0000f7b7 lui a5,0xf + 80014034: 00f777b3 and a5,a4,a5 + 80014038: 0007879b sext.w a5,a5 + 8001403c: 00078713 mv a4,a5 + 80014040: 000047b7 lui a5,0x4 + 80014044: 02f71063 bne a4,a5,80014064 + 80014048: 00000593 li a1,0 + 8001404c: fd843503 ld a0,-40(s0) + 80014050: bfdfd0ef jal ra,80011c4c + 80014054: fd843583 ld a1,-40(s0) + 80014058: fe043503 ld a0,-32(s0) + 8001405c: e4dff0ef jal ra,80013ea8 + 80014060: 0100006f j 80014070 + 80014064: fd843583 ld a1,-40(s0) + 80014068: fe043503 ld a0,-32(s0) + 8001406c: cd5ff0ef jal ra,80013d40 + 80014070: fe043503 ld a0,-32(s0) + 80014074: e21f00ef jal ra,80004e94 + 80014078: fd843503 ld a0,-40(s0) + 8001407c: e19f00ef jal ra,80004e94 + 80014080: 0080006f j 80014088 + 80014084: 00000013 nop + 80014088: fec42783 lw a5,-20(s0) + 8001408c: 0007879b sext.w a5,a5 + 80014090: e6f040e3 bgtz a5,80013ef0 + 80014094: e0840793 addi a5,s0,-504 + 80014098: 00078513 mv a0,a5 + 8001409c: 9f0ff0ef jal ra,8001328c + 800140a0: 20813083 ld ra,520(sp) + 800140a4: 20013403 ld s0,512(sp) + 800140a8: 21010113 addi sp,sp,528 + 800140ac: 00008067 ret + +00000000800140b0 <_get_path_lastname>: + 800140b0: fd010113 addi sp,sp,-48 + 800140b4: 02113423 sd ra,40(sp) + 800140b8: 02813023 sd s0,32(sp) + 800140bc: 03010413 addi s0,sp,48 + 800140c0: fca43c23 sd a0,-40(s0) + 800140c4: 02f00593 li a1,47 + 800140c8: fd843503 ld a0,-40(s0) + 800140cc: a5dec0ef jal ra,80000b28 + 800140d0: fea43423 sd a0,-24(s0) + 800140d4: fe843783 ld a5,-24(s0) + 800140d8: 00079663 bnez a5,800140e4 <_get_path_lastname+0x34> + 800140dc: fd843783 ld a5,-40(s0) + 800140e0: 0140006f j 800140f4 <_get_path_lastname+0x44> + 800140e4: fe843783 ld a5,-24(s0) + 800140e8: 00178793 addi a5,a5,1 # 4001 <__STACKSIZE__+0x1> + 800140ec: fef43423 sd a5,-24(s0) + 800140f0: fe843783 ld a5,-24(s0) + 800140f4: 00078513 mv a0,a5 + 800140f8: 02813083 ld ra,40(sp) + 800140fc: 02013403 ld s0,32(sp) + 80014100: 03010113 addi sp,sp,48 + 80014104: 00008067 ret + +0000000080014108 : + 80014108: f4010113 addi sp,sp,-192 + 8001410c: 0a113c23 sd ra,184(sp) + 80014110: 0a813823 sd s0,176(sp) + 80014114: 0c010413 addi s0,sp,192 + 80014118: f4a43423 sd a0,-184(s0) + 8001411c: f4b43023 sd a1,-192(s0) + 80014120: fe042623 sw zero,-20(s0) + 80014124: f5840793 addi a5,s0,-168 + 80014128: 00078593 mv a1,a5 + 8001412c: f4843503 ld a0,-184(s0) + 80014130: dacff0ef jal ra,800136dc + 80014134: 00050793 mv a5,a0 + 80014138: 0007dc63 bgez a5,80014150 + 8001413c: f4843583 ld a1,-184(s0) + 80014140: 00004517 auipc a0,0x4 + 80014144: 0a850513 addi a0,a0,168 # 800181e8 + 80014148: 8d4f40ef jal ra,8000821c + 8001414c: 1e00006f j 8001432c + 80014150: f6842783 lw a5,-152(s0) + 80014154: 00078713 mv a4,a5 + 80014158: 0000f7b7 lui a5,0xf + 8001415c: 00f777b3 and a5,a4,a5 + 80014160: 0007879b sext.w a5,a5 + 80014164: 00078713 mv a4,a5 + 80014168: 000047b7 lui a5,0x4 + 8001416c: 00f71a63 bne a4,a5,80014180 + 80014170: fec42783 lw a5,-20(s0) + 80014174: 0017e793 ori a5,a5,1 + 80014178: fef42623 sw a5,-20(s0) + 8001417c: 0100006f j 8001418c + 80014180: fec42783 lw a5,-20(s0) + 80014184: 0027e793 ori a5,a5,2 + 80014188: fef42623 sw a5,-20(s0) + 8001418c: f5840793 addi a5,s0,-168 + 80014190: 00078593 mv a1,a5 + 80014194: f4043503 ld a0,-192(s0) + 80014198: d44ff0ef jal ra,800136dc + 8001419c: 00050793 mv a5,a0 + 800141a0: 0407c063 bltz a5,800141e0 + 800141a4: f6842783 lw a5,-152(s0) + 800141a8: 00078713 mv a4,a5 + 800141ac: 0000f7b7 lui a5,0xf + 800141b0: 00f777b3 and a5,a4,a5 + 800141b4: 0007879b sext.w a5,a5 + 800141b8: 00078713 mv a4,a5 + 800141bc: 000047b7 lui a5,0x4 + 800141c0: 00f71a63 bne a4,a5,800141d4 + 800141c4: fec42783 lw a5,-20(s0) + 800141c8: 0047e793 ori a5,a5,4 + 800141cc: fef42623 sw a5,-20(s0) + 800141d0: 0100006f j 800141e0 + 800141d4: fec42783 lw a5,-20(s0) + 800141d8: 0087e793 ori a5,a5,8 + 800141dc: fef42623 sw a5,-20(s0) + 800141e0: fec42783 lw a5,-20(s0) + 800141e4: 0017f793 andi a5,a5,1 + 800141e8: 0007879b sext.w a5,a5 + 800141ec: 02078263 beqz a5,80014210 + 800141f0: fec42783 lw a5,-20(s0) + 800141f4: 0087f793 andi a5,a5,8 + 800141f8: 0007879b sext.w a5,a5 + 800141fc: 00078a63 beqz a5,80014210 + 80014200: 00004517 auipc a0,0x4 + 80014204: 00050513 mv a0,a0 + 80014208: 814f40ef jal ra,8000821c + 8001420c: 1200006f j 8001432c + 80014210: fec42783 lw a5,-20(s0) + 80014214: 0027f793 andi a5,a5,2 + 80014218: 0007879b sext.w a5,a5 + 8001421c: 06078863 beqz a5,8001428c + 80014220: fec42783 lw a5,-20(s0) + 80014224: 0047f793 andi a5,a5,4 + 80014228: 0007879b sext.w a5,a5 + 8001422c: 04078863 beqz a5,8001427c + 80014230: f4843503 ld a0,-184(s0) + 80014234: e7dff0ef jal ra,800140b0 <_get_path_lastname> + 80014238: 00050793 mv a5,a0 + 8001423c: 00078593 mv a1,a5 + 80014240: f4043503 ld a0,-192(s0) + 80014244: fd8fe0ef jal ra,80012a1c + 80014248: fca43c23 sd a0,-40(s0) + 8001424c: fd843783 ld a5,-40(s0) + 80014250: 00079a63 bnez a5,80014264 + 80014254: 00004517 auipc a0,0x4 + 80014258: eec50513 addi a0,a0,-276 # 80018140 + 8001425c: fc1f30ef jal ra,8000821c + 80014260: 0cc0006f j 8001432c + 80014264: fd843583 ld a1,-40(s0) + 80014268: f4843503 ld a0,-184(s0) + 8001426c: ad5ff0ef jal ra,80013d40 + 80014270: fd843503 ld a0,-40(s0) + 80014274: c21f00ef jal ra,80004e94 + 80014278: 0b40006f j 8001432c + 8001427c: f4043583 ld a1,-192(s0) + 80014280: f4843503 ld a0,-184(s0) + 80014284: abdff0ef jal ra,80013d40 + 80014288: 0a40006f j 8001432c + 8001428c: fec42783 lw a5,-20(s0) + 80014290: 0047f793 andi a5,a5,4 + 80014294: 0007879b sext.w a5,a5 + 80014298: 04078e63 beqz a5,800142f4 + 8001429c: f4843503 ld a0,-184(s0) + 800142a0: e11ff0ef jal ra,800140b0 <_get_path_lastname> + 800142a4: 00050793 mv a5,a0 + 800142a8: 00078593 mv a1,a5 + 800142ac: f4043503 ld a0,-192(s0) + 800142b0: f6cfe0ef jal ra,80012a1c + 800142b4: fea43023 sd a0,-32(s0) + 800142b8: fe043783 ld a5,-32(s0) + 800142bc: 00079a63 bnez a5,800142d0 + 800142c0: 00004517 auipc a0,0x4 + 800142c4: e8050513 addi a0,a0,-384 # 80018140 + 800142c8: f55f30ef jal ra,8000821c + 800142cc: 0600006f j 8001432c + 800142d0: 00000593 li a1,0 + 800142d4: fe043503 ld a0,-32(s0) + 800142d8: 975fd0ef jal ra,80011c4c + 800142dc: fe043583 ld a1,-32(s0) + 800142e0: f4843503 ld a0,-184(s0) + 800142e4: bc5ff0ef jal ra,80013ea8 + 800142e8: fe043503 ld a0,-32(s0) + 800142ec: ba9f00ef jal ra,80004e94 + 800142f0: 03c0006f j 8001432c + 800142f4: fec42783 lw a5,-20(s0) + 800142f8: 00c7f793 andi a5,a5,12 + 800142fc: 0007879b sext.w a5,a5 + 80014300: 02079063 bnez a5,80014320 + 80014304: 00000593 li a1,0 + 80014308: f4043503 ld a0,-192(s0) + 8001430c: 941fd0ef jal ra,80011c4c + 80014310: f4043583 ld a1,-192(s0) + 80014314: f4843503 ld a0,-184(s0) + 80014318: b91ff0ef jal ra,80013ea8 + 8001431c: 0100006f j 8001432c + 80014320: f4043583 ld a1,-192(s0) + 80014324: f4843503 ld a0,-184(s0) + 80014328: b81ff0ef jal ra,80013ea8 + 8001432c: 0b813083 ld ra,184(sp) + 80014330: 0b013403 ld s0,176(sp) + 80014334: 0c010113 addi sp,sp,192 + 80014338: 00008067 ret + +000000008001433c : + 8001433c: fd010113 addi sp,sp,-48 + 80014340: 02813423 sd s0,40(sp) + 80014344: 03010413 addi s0,sp,48 + 80014348: fea43423 sd a0,-24(s0) + 8001434c: feb43023 sd a1,-32(s0) + 80014350: fcc43c23 sd a2,-40(s0) + 80014354: 00000793 li a5,0 + 80014358: 00078513 mv a0,a5 + 8001435c: 02813403 ld s0,40(sp) + 80014360: 03010113 addi sp,sp,48 + 80014364: 00008067 ret + +0000000080014368 : + 80014368: fc010113 addi sp,sp,-64 + 8001436c: 02113c23 sd ra,56(sp) + 80014370: 02813823 sd s0,48(sp) + 80014374: 04010413 addi s0,sp,64 + 80014378: fca43c23 sd a0,-40(s0) + 8001437c: 00058793 mv a5,a1 + 80014380: fcc43423 sd a2,-56(s0) + 80014384: fcf42a23 sw a5,-44(s0) + 80014388: fd843783 ld a5,-40(s0) + 8001438c: 00079e63 bnez a5,800143a8 + 80014390: 02500613 li a2,37 + 80014394: 00005597 auipc a1,0x5 + 80014398: 2d458593 addi a1,a1,724 # 80019668 <__FUNCTION__.4110> + 8001439c: 00004517 auipc a0,0x4 + 800143a0: e9450513 addi a0,a0,-364 # 80018230 + 800143a4: 8d8f40ef jal ra,8000847c + 800143a8: fd843783 ld a5,-40(s0) + 800143ac: 0407b783 ld a5,64(a5) # 4040 <__STACKSIZE__+0x40> + 800143b0: fef43423 sd a5,-24(s0) + 800143b4: fe843783 ld a5,-24(s0) + 800143b8: 00079e63 bnez a5,800143d4 + 800143bc: 02900613 li a2,41 + 800143c0: 00005597 auipc a1,0x5 + 800143c4: 2a858593 addi a1,a1,680 # 80019668 <__FUNCTION__.4110> + 800143c8: 00004517 auipc a0,0x4 + 800143cc: e7850513 addi a0,a0,-392 # 80018240 + 800143d0: 8acf40ef jal ra,8000847c + 800143d4: fd442783 lw a5,-44(s0) + 800143d8: fc843603 ld a2,-56(s0) + 800143dc: 00078593 mv a1,a5 + 800143e0: fe843503 ld a0,-24(s0) + 800143e4: b89ee0ef jal ra,80002f6c + 800143e8: fea43023 sd a0,-32(s0) + 800143ec: fe043783 ld a5,-32(s0) + 800143f0: 00079663 bnez a5,800143fc + 800143f4: 00000793 li a5,0 + 800143f8: 00c0006f j 80014404 + 800143fc: fe043783 ld a5,-32(s0) + 80014400: 0007879b sext.w a5,a5 + 80014404: 00078513 mv a0,a5 + 80014408: 03813083 ld ra,56(sp) + 8001440c: 03013403 ld s0,48(sp) + 80014410: 04010113 addi sp,sp,64 + 80014414: 00008067 ret + +0000000080014418 : + 80014418: fc010113 addi sp,sp,-64 + 8001441c: 02113c23 sd ra,56(sp) + 80014420: 02813823 sd s0,48(sp) + 80014424: 04010413 addi s0,sp,64 + 80014428: fca43c23 sd a0,-40(s0) + 8001442c: fcb43823 sd a1,-48(s0) + 80014430: fcc43423 sd a2,-56(s0) + 80014434: fd843783 ld a5,-40(s0) + 80014438: 00079e63 bnez a5,80014454 + 8001443c: 03800613 li a2,56 + 80014440: 00005597 auipc a1,0x5 + 80014444: 24058593 addi a1,a1,576 # 80019680 <__FUNCTION__.4118> + 80014448: 00004517 auipc a0,0x4 + 8001444c: de850513 addi a0,a0,-536 # 80018230 + 80014450: 82cf40ef jal ra,8000847c + 80014454: fd843783 ld a5,-40(s0) + 80014458: 0407b783 ld a5,64(a5) + 8001445c: fef43423 sd a5,-24(s0) + 80014460: fe843783 ld a5,-24(s0) + 80014464: 00079e63 bnez a5,80014480 + 80014468: 03c00613 li a2,60 + 8001446c: 00005597 auipc a1,0x5 + 80014470: 21458593 addi a1,a1,532 # 80019680 <__FUNCTION__.4118> + 80014474: 00004517 auipc a0,0x4 + 80014478: dcc50513 addi a0,a0,-564 # 80018240 + 8001447c: 800f40ef jal ra,8000847c + 80014480: fd843783 ld a5,-40(s0) + 80014484: 0387b783 ld a5,56(a5) + 80014488: fc843683 ld a3,-56(s0) + 8001448c: fd043603 ld a2,-48(s0) + 80014490: 00078593 mv a1,a5 + 80014494: fe843503 ld a0,-24(s0) + 80014498: 915ee0ef jal ra,80002dac + 8001449c: 00050793 mv a5,a0 + 800144a0: fef42223 sw a5,-28(s0) + 800144a4: fd843783 ld a5,-40(s0) + 800144a8: 0387b703 ld a4,56(a5) + 800144ac: fe442783 lw a5,-28(s0) + 800144b0: 00f70733 add a4,a4,a5 + 800144b4: fd843783 ld a5,-40(s0) + 800144b8: 02e7bc23 sd a4,56(a5) + 800144bc: fe442783 lw a5,-28(s0) + 800144c0: 00078513 mv a0,a5 + 800144c4: 03813083 ld ra,56(sp) + 800144c8: 03013403 ld s0,48(sp) + 800144cc: 04010113 addi sp,sp,64 + 800144d0: 00008067 ret + +00000000800144d4 : + 800144d4: fc010113 addi sp,sp,-64 + 800144d8: 02113c23 sd ra,56(sp) + 800144dc: 02813823 sd s0,48(sp) + 800144e0: 04010413 addi s0,sp,64 + 800144e4: fca43c23 sd a0,-40(s0) + 800144e8: fcb43823 sd a1,-48(s0) + 800144ec: fcc43423 sd a2,-56(s0) + 800144f0: fd843783 ld a5,-40(s0) + 800144f4: 00079e63 bnez a5,80014510 + 800144f8: 04a00613 li a2,74 + 800144fc: 00005597 auipc a1,0x5 + 80014500: 19c58593 addi a1,a1,412 # 80019698 <__FUNCTION__.4126> + 80014504: 00004517 auipc a0,0x4 + 80014508: d2c50513 addi a0,a0,-724 # 80018230 + 8001450c: f71f30ef jal ra,8000847c + 80014510: fd843783 ld a5,-40(s0) + 80014514: 0407b783 ld a5,64(a5) + 80014518: fef43423 sd a5,-24(s0) + 8001451c: fe843783 ld a5,-24(s0) + 80014520: 00079e63 bnez a5,8001453c + 80014524: 04e00613 li a2,78 + 80014528: 00005597 auipc a1,0x5 + 8001452c: 17058593 addi a1,a1,368 # 80019698 <__FUNCTION__.4126> + 80014530: 00004517 auipc a0,0x4 + 80014534: d1050513 addi a0,a0,-752 # 80018240 + 80014538: f45f30ef jal ra,8000847c + 8001453c: fd843783 ld a5,-40(s0) + 80014540: 0387b783 ld a5,56(a5) + 80014544: fc843683 ld a3,-56(s0) + 80014548: fd043603 ld a2,-48(s0) + 8001454c: 00078593 mv a1,a5 + 80014550: fe843503 ld a0,-24(s0) + 80014554: 939ee0ef jal ra,80002e8c + 80014558: 00050793 mv a5,a0 + 8001455c: fef42223 sw a5,-28(s0) + 80014560: fd843783 ld a5,-40(s0) + 80014564: 0387b703 ld a4,56(a5) + 80014568: fe442783 lw a5,-28(s0) + 8001456c: 00f70733 add a4,a4,a5 + 80014570: fd843783 ld a5,-40(s0) + 80014574: 02e7bc23 sd a4,56(a5) + 80014578: fe442783 lw a5,-28(s0) + 8001457c: 00078513 mv a0,a5 + 80014580: 03813083 ld ra,56(sp) + 80014584: 03013403 ld s0,48(sp) + 80014588: 04010113 addi sp,sp,64 + 8001458c: 00008067 ret + +0000000080014590 : + 80014590: fc010113 addi sp,sp,-64 + 80014594: 02113c23 sd ra,56(sp) + 80014598: 02813823 sd s0,48(sp) + 8001459c: 04010413 addi s0,sp,64 + 800145a0: fca43423 sd a0,-56(s0) + 800145a4: fc843783 ld a5,-56(s0) + 800145a8: 00079e63 bnez a5,800145c4 + 800145ac: 05c00613 li a2,92 + 800145b0: 00005597 auipc a1,0x5 + 800145b4: 10058593 addi a1,a1,256 # 800196b0 <__FUNCTION__.4132> + 800145b8: 00004517 auipc a0,0x4 + 800145bc: c7850513 addi a0,a0,-904 # 80018230 + 800145c0: ebdf30ef jal ra,8000847c + 800145c4: fc843783 ld a5,-56(s0) + 800145c8: 0027d783 lhu a5,2(a5) + 800145cc: 0007871b sext.w a4,a5 + 800145d0: 00200793 li a5,2 + 800145d4: 04f71063 bne a4,a5,80014614 + 800145d8: fc843783 ld a5,-56(s0) + 800145dc: 0407b783 ld a5,64(a5) + 800145e0: fcf43c23 sd a5,-40(s0) + 800145e4: fd843783 ld a5,-40(s0) + 800145e8: 00079e63 bnez a5,80014604 + 800145ec: 06300613 li a2,99 + 800145f0: 00005597 auipc a1,0x5 + 800145f4: 0c058593 addi a1,a1,192 # 800196b0 <__FUNCTION__.4132> + 800145f8: 00004517 auipc a0,0x4 + 800145fc: c6050513 addi a0,a0,-928 # 80018258 + 80014600: e7df30ef jal ra,8000847c + 80014604: fd843503 ld a0,-40(s0) + 80014608: 88df00ef jal ra,80004e94 + 8001460c: 00000793 li a5,0 + 80014610: 0580006f j 80014668 + 80014614: fc843783 ld a5,-56(s0) + 80014618: 0407b783 ld a5,64(a5) + 8001461c: fef43423 sd a5,-24(s0) + 80014620: fe843783 ld a5,-24(s0) + 80014624: 00079e63 bnez a5,80014640 + 80014628: 06c00613 li a2,108 + 8001462c: 00005597 auipc a1,0x5 + 80014630: 08458593 addi a1,a1,132 # 800196b0 <__FUNCTION__.4132> + 80014634: 00004517 auipc a0,0x4 + 80014638: c0c50513 addi a0,a0,-1012 # 80018240 + 8001463c: e41f30ef jal ra,8000847c + 80014640: fe843503 ld a0,-24(s0) + 80014644: e68ee0ef jal ra,80002cac + 80014648: fea43023 sd a0,-32(s0) + 8001464c: fe043783 ld a5,-32(s0) + 80014650: 00079a63 bnez a5,80014664 + 80014654: fc843783 ld a5,-56(s0) + 80014658: 0407b023 sd zero,64(a5) + 8001465c: 00000793 li a5,0 + 80014660: 0080006f j 80014668 + 80014664: ffb00793 li a5,-5 + 80014668: 00078513 mv a0,a5 + 8001466c: 03813083 ld ra,56(sp) + 80014670: 03013403 ld s0,48(sp) + 80014674: 04010113 addi sp,sp,64 + 80014678: 00008067 ret + +000000008001467c : + 8001467c: fa010113 addi sp,sp,-96 + 80014680: 04113c23 sd ra,88(sp) + 80014684: 04813823 sd s0,80(sp) + 80014688: 06010413 addi s0,sp,96 + 8001468c: faa43423 sd a0,-88(s0) + 80014690: fa843783 ld a5,-88(s0) + 80014694: 0087b783 ld a5,8(a5) + 80014698: 0007c783 lbu a5,0(a5) + 8001469c: 00078713 mv a4,a5 + 800146a0: 02f00793 li a5,47 + 800146a4: 16f71463 bne a4,a5,8001480c + 800146a8: fa843783 ld a5,-88(s0) + 800146ac: 0087b783 ld a5,8(a5) + 800146b0: 00178793 addi a5,a5,1 + 800146b4: 0007c783 lbu a5,0(a5) + 800146b8: 14079a63 bnez a5,8001480c + 800146bc: fa843783 ld a5,-88(s0) + 800146c0: 0287a783 lw a5,40(a5) + 800146c4: 00078713 mv a4,a5 + 800146c8: 000107b7 lui a5,0x10 + 800146cc: 00f777b3 and a5,a4,a5 + 800146d0: 0007879b sext.w a5,a5 + 800146d4: 12078c63 beqz a5,8001480c + 800146d8: fe042223 sw zero,-28(s0) + 800146dc: a00ee0ef jal ra,800028dc + 800146e0: 00900513 li a0,9 + 800146e4: bf0ed0ef jal ra,80001ad4 + 800146e8: fca43c23 sd a0,-40(s0) + 800146ec: fd843783 ld a5,-40(s0) + 800146f0: 00079e63 bnez a5,8001470c + 800146f4: 08e00613 li a2,142 + 800146f8: 00005597 auipc a1,0x5 + 800146fc: fd058593 addi a1,a1,-48 # 800196c8 <__FUNCTION__.4144> + 80014700: 00004517 auipc a0,0x4 + 80014704: b7050513 addi a0,a0,-1168 # 80018270 + 80014708: d75f30ef jal ra,8000847c + 8001470c: fd843783 ld a5,-40(s0) + 80014710: 0087b783 ld a5,8(a5) # 10008 <__STACKSIZE__+0xc008> + 80014714: fef43423 sd a5,-24(s0) + 80014718: 01c0006f j 80014734 + 8001471c: fe442783 lw a5,-28(s0) + 80014720: 0017879b addiw a5,a5,1 + 80014724: fef42223 sw a5,-28(s0) + 80014728: fe843783 ld a5,-24(s0) + 8001472c: 0007b783 ld a5,0(a5) + 80014730: fef43423 sd a5,-24(s0) + 80014734: fd843783 ld a5,-40(s0) + 80014738: 00878793 addi a5,a5,8 + 8001473c: fe843703 ld a4,-24(s0) + 80014740: fcf71ee3 bne a4,a5,8001471c + 80014744: fe446783 lwu a5,-28(s0) + 80014748: 00278793 addi a5,a5,2 + 8001474c: 00379793 slli a5,a5,0x3 + 80014750: 00078513 mv a0,a5 + 80014754: ed5ef0ef jal ra,80004628 + 80014758: fca43823 sd a0,-48(s0) + 8001475c: fd043783 ld a5,-48(s0) + 80014760: 08078a63 beqz a5,800147f4 + 80014764: fd043783 ld a5,-48(s0) + 80014768: 01078713 addi a4,a5,16 + 8001476c: fd043783 ld a5,-48(s0) + 80014770: 00e7b023 sd a4,0(a5) + 80014774: fd043783 ld a5,-48(s0) + 80014778: 00079423 sh zero,8(a5) + 8001477c: fe442783 lw a5,-28(s0) + 80014780: 03079713 slli a4,a5,0x30 + 80014784: 03075713 srli a4,a4,0x30 + 80014788: fd043783 ld a5,-48(s0) + 8001478c: 00e79523 sh a4,10(a5) + 80014790: fe042223 sw zero,-28(s0) + 80014794: fd843783 ld a5,-40(s0) + 80014798: 0087b783 ld a5,8(a5) + 8001479c: fef43423 sd a5,-24(s0) + 800147a0: 0440006f j 800147e4 + 800147a4: fe843783 ld a5,-24(s0) + 800147a8: fe878793 addi a5,a5,-24 + 800147ac: fcf43423 sd a5,-56(s0) + 800147b0: fd043783 ld a5,-48(s0) + 800147b4: 0007b703 ld a4,0(a5) + 800147b8: fe446783 lwu a5,-28(s0) + 800147bc: 00379793 slli a5,a5,0x3 + 800147c0: 00f707b3 add a5,a4,a5 + 800147c4: fc843703 ld a4,-56(s0) + 800147c8: 00e7b023 sd a4,0(a5) + 800147cc: fe442783 lw a5,-28(s0) + 800147d0: 0017879b addiw a5,a5,1 + 800147d4: fef42223 sw a5,-28(s0) + 800147d8: fe843783 ld a5,-24(s0) + 800147dc: 0007b783 ld a5,0(a5) + 800147e0: fef43423 sd a5,-24(s0) + 800147e4: fd843783 ld a5,-40(s0) + 800147e8: 00878793 addi a5,a5,8 + 800147ec: fe843703 ld a4,-24(s0) + 800147f0: faf71ae3 bne a4,a5,800147a4 + 800147f4: 950ee0ef jal ra,80002944 + 800147f8: fa843783 ld a5,-88(s0) + 800147fc: fd043703 ld a4,-48(s0) + 80014800: 04e7b023 sd a4,64(a5) + 80014804: 00000793 li a5,0 + 80014808: 07c0006f j 80014884 + 8001480c: fa843783 ld a5,-88(s0) + 80014810: 0087b783 ld a5,8(a5) + 80014814: 00178793 addi a5,a5,1 + 80014818: 00078513 mv a0,a5 + 8001481c: a60ee0ef jal ra,80002a7c + 80014820: fca43023 sd a0,-64(s0) + 80014824: fc043783 ld a5,-64(s0) + 80014828: 00079663 bnez a5,80014834 + 8001482c: fed00793 li a5,-19 + 80014830: 0540006f j 80014884 + 80014834: 00300593 li a1,3 + 80014838: fc043503 ld a0,-64(s0) + 8001483c: a78ee0ef jal ra,80002ab4 + 80014840: faa43c23 sd a0,-72(s0) + 80014844: fb843783 ld a5,-72(s0) + 80014848: 00078863 beqz a5,80014858 + 8001484c: fb843703 ld a4,-72(s0) + 80014850: ffa00793 li a5,-6 + 80014854: 02f71263 bne a4,a5,80014878 + 80014858: fa843783 ld a5,-88(s0) + 8001485c: fc043703 ld a4,-64(s0) + 80014860: 04e7b023 sd a4,64(a5) + 80014864: fa843783 ld a5,-88(s0) + 80014868: 00400713 li a4,4 + 8001486c: 00e79123 sh a4,2(a5) + 80014870: 00000793 li a5,0 + 80014874: 0100006f j 80014884 + 80014878: fa843783 ld a5,-88(s0) + 8001487c: 0407b023 sd zero,64(a5) + 80014880: ffb00793 li a5,-5 + 80014884: 00078513 mv a0,a5 + 80014888: 05813083 ld ra,88(sp) + 8001488c: 05013403 ld s0,80(sp) + 80014890: 06010113 addi sp,sp,96 + 80014894: 00008067 ret + +0000000080014898 : + 80014898: fc010113 addi sp,sp,-64 + 8001489c: 02113c23 sd ra,56(sp) + 800148a0: 02813823 sd s0,48(sp) + 800148a4: 04010413 addi s0,sp,64 + 800148a8: fca43c23 sd a0,-40(s0) + 800148ac: fcb43823 sd a1,-48(s0) + 800148b0: fcc43423 sd a2,-56(s0) + 800148b4: fd043783 ld a5,-48(s0) + 800148b8: 0007c783 lbu a5,0(a5) + 800148bc: 00078713 mv a4,a5 + 800148c0: 02f00793 li a5,47 + 800148c4: 08f71663 bne a4,a5,80014950 + 800148c8: fd043783 ld a5,-48(s0) + 800148cc: 00178793 addi a5,a5,1 + 800148d0: 0007c783 lbu a5,0(a5) + 800148d4: 06079e63 bnez a5,80014950 + 800148d8: fc843783 ld a5,-56(s0) + 800148dc: 0007b023 sd zero,0(a5) + 800148e0: fc843783 ld a5,-56(s0) + 800148e4: 00008737 lui a4,0x8 + 800148e8: 1b67071b addiw a4,a4,438 + 800148ec: 00e7a823 sw a4,16(a5) + 800148f0: fc843783 ld a5,-56(s0) + 800148f4: 0107a783 lw a5,16(a5) + 800148f8: 00078713 mv a4,a5 + 800148fc: ffff87b7 lui a5,0xffff8 + 80014900: fff78793 addi a5,a5,-1 # ffffffffffff7fff <__bss_end+0xffffffff7ffccd7b> + 80014904: 00f777b3 and a5,a4,a5 + 80014908: 0007871b sext.w a4,a5 + 8001490c: fc843783 ld a5,-56(s0) + 80014910: 00e7a823 sw a4,16(a5) + 80014914: fc843783 ld a5,-56(s0) + 80014918: 0107a783 lw a5,16(a5) + 8001491c: 00078713 mv a4,a5 + 80014920: 000047b7 lui a5,0x4 + 80014924: 04978793 addi a5,a5,73 # 4049 <__STACKSIZE__+0x49> + 80014928: 00f767b3 or a5,a4,a5 + 8001492c: 0007871b sext.w a4,a5 + 80014930: fc843783 ld a5,-56(s0) + 80014934: 00e7a823 sw a4,16(a5) + 80014938: fc843783 ld a5,-56(s0) + 8001493c: 0207b823 sd zero,48(a5) + 80014940: fc843783 ld a5,-56(s0) + 80014944: 0407bc23 sd zero,88(a5) + 80014948: 00000793 li a5,0 + 8001494c: 1100006f j 80014a5c + 80014950: fd043783 ld a5,-48(s0) + 80014954: 00178793 addi a5,a5,1 + 80014958: 00078513 mv a0,a5 + 8001495c: 920ee0ef jal ra,80002a7c + 80014960: fea43423 sd a0,-24(s0) + 80014964: fe843783 ld a5,-24(s0) + 80014968: 0e078863 beqz a5,80014a58 + 8001496c: fc843783 ld a5,-56(s0) + 80014970: 0007b023 sd zero,0(a5) + 80014974: fc843783 ld a5,-56(s0) + 80014978: 1b600713 li a4,438 + 8001497c: 00e7a823 sw a4,16(a5) + 80014980: fe843783 ld a5,-24(s0) + 80014984: 0287a783 lw a5,40(a5) + 80014988: 02079463 bnez a5,800149b0 + 8001498c: fc843783 ld a5,-56(s0) + 80014990: 0107a783 lw a5,16(a5) + 80014994: 00078713 mv a4,a5 + 80014998: 000027b7 lui a5,0x2 + 8001499c: 00f767b3 or a5,a4,a5 + 800149a0: 0007871b sext.w a4,a5 + 800149a4: fc843783 ld a5,-56(s0) + 800149a8: 00e7a823 sw a4,16(a5) # 2010 <__STACKSIZE__-0x1ff0> + 800149ac: 0940006f j 80014a40 + 800149b0: fe843783 ld a5,-24(s0) + 800149b4: 0287a783 lw a5,40(a5) + 800149b8: 00078713 mv a4,a5 + 800149bc: 00100793 li a5,1 + 800149c0: 02f71463 bne a4,a5,800149e8 + 800149c4: fc843783 ld a5,-56(s0) + 800149c8: 0107a783 lw a5,16(a5) + 800149cc: 00078713 mv a4,a5 + 800149d0: 000067b7 lui a5,0x6 + 800149d4: 00f767b3 or a5,a4,a5 + 800149d8: 0007871b sext.w a4,a5 + 800149dc: fc843783 ld a5,-56(s0) + 800149e0: 00e7a823 sw a4,16(a5) # 6010 <__STACKSIZE__+0x2010> + 800149e4: 05c0006f j 80014a40 + 800149e8: fe843783 ld a5,-24(s0) + 800149ec: 0287a783 lw a5,40(a5) + 800149f0: 00078713 mv a4,a5 + 800149f4: 00f00793 li a5,15 + 800149f8: 02f71463 bne a4,a5,80014a20 + 800149fc: fc843783 ld a5,-56(s0) + 80014a00: 0107a783 lw a5,16(a5) + 80014a04: 00078713 mv a4,a5 + 80014a08: 000017b7 lui a5,0x1 + 80014a0c: 00f767b3 or a5,a4,a5 + 80014a10: 0007871b sext.w a4,a5 + 80014a14: fc843783 ld a5,-56(s0) + 80014a18: 00e7a823 sw a4,16(a5) # 1010 <__STACKSIZE__-0x2ff0> + 80014a1c: 0240006f j 80014a40 + 80014a20: fc843783 ld a5,-56(s0) + 80014a24: 0107a783 lw a5,16(a5) + 80014a28: 00078713 mv a4,a5 + 80014a2c: 000087b7 lui a5,0x8 + 80014a30: 00f767b3 or a5,a4,a5 + 80014a34: 0007871b sext.w a4,a5 + 80014a38: fc843783 ld a5,-56(s0) + 80014a3c: 00e7a823 sw a4,16(a5) # 8010 <__STACKSIZE__+0x4010> + 80014a40: fc843783 ld a5,-56(s0) + 80014a44: 0207b823 sd zero,48(a5) + 80014a48: fc843783 ld a5,-56(s0) + 80014a4c: 0407bc23 sd zero,88(a5) + 80014a50: 00000793 li a5,0 + 80014a54: 0080006f j 80014a5c + 80014a58: ffe00793 li a5,-2 + 80014a5c: 00078513 mv a0,a5 + 80014a60: 03813083 ld ra,56(sp) + 80014a64: 03013403 ld s0,48(sp) + 80014a68: 04010113 addi sp,sp,64 + 80014a6c: 00008067 ret + +0000000080014a70 : + 80014a70: fb010113 addi sp,sp,-80 + 80014a74: 04113423 sd ra,72(sp) + 80014a78: 04813023 sd s0,64(sp) + 80014a7c: 05010413 addi s0,sp,80 + 80014a80: fca43423 sd a0,-56(s0) + 80014a84: fcb43023 sd a1,-64(s0) + 80014a88: 00060793 mv a5,a2 + 80014a8c: faf42e23 sw a5,-68(s0) + 80014a90: fc843783 ld a5,-56(s0) + 80014a94: 0407b783 ld a5,64(a5) + 80014a98: fef43023 sd a5,-32(s0) + 80014a9c: fe043783 ld a5,-32(s0) + 80014aa0: 00079e63 bnez a5,80014abc + 80014aa4: 10b00613 li a2,267 + 80014aa8: 00005597 auipc a1,0x5 + 80014aac: c3858593 addi a1,a1,-968 # 800196e0 <__FUNCTION__.4166> + 80014ab0: 00003517 auipc a0,0x3 + 80014ab4: 7a850513 addi a0,a0,1960 # 80018258 + 80014ab8: 9c5f30ef jal ra,8000847c + 80014abc: fbc46783 lwu a5,-68(s0) + 80014ac0: 10400593 li a1,260 + 80014ac4: 00078513 mv a0,a5 + 80014ac8: dd0eb0ef jal ra,80000098 <__udivdi3> + 80014acc: 00050793 mv a5,a0 + 80014ad0: faf42e23 sw a5,-68(s0) + 80014ad4: fbc42783 lw a5,-68(s0) + 80014ad8: 0007879b sext.w a5,a5 + 80014adc: 00079663 bnez a5,80014ae8 + 80014ae0: fea00793 li a5,-22 + 80014ae4: 1340006f j 80014c18 + 80014ae8: fe042623 sw zero,-20(s0) + 80014aec: 0ac0006f j 80014b98 + 80014af0: fe043783 ld a5,-32(s0) + 80014af4: 0007b703 ld a4,0(a5) + 80014af8: fe043783 ld a5,-32(s0) + 80014afc: 0087d783 lhu a5,8(a5) + 80014b00: 0007879b sext.w a5,a5 + 80014b04: fec42683 lw a3,-20(s0) + 80014b08: 00f687bb addw a5,a3,a5 + 80014b0c: 0007879b sext.w a5,a5 + 80014b10: 02079793 slli a5,a5,0x20 + 80014b14: 0207d793 srli a5,a5,0x20 + 80014b18: 00379793 slli a5,a5,0x3 + 80014b1c: 00f707b3 add a5,a4,a5 + 80014b20: 0007b783 ld a5,0(a5) + 80014b24: fcf43c23 sd a5,-40(s0) + 80014b28: fec46703 lwu a4,-20(s0) + 80014b2c: 00070793 mv a5,a4 + 80014b30: 00679793 slli a5,a5,0x6 + 80014b34: 00e787b3 add a5,a5,a4 + 80014b38: 00279793 slli a5,a5,0x2 + 80014b3c: 00078713 mv a4,a5 + 80014b40: fc043783 ld a5,-64(s0) + 80014b44: 00e787b3 add a5,a5,a4 + 80014b48: fcf43823 sd a5,-48(s0) + 80014b4c: fd043783 ld a5,-48(s0) + 80014b50: 00100713 li a4,1 + 80014b54: 00e78023 sb a4,0(a5) + 80014b58: fd043783 ld a5,-48(s0) + 80014b5c: 01400713 li a4,20 + 80014b60: 00e780a3 sb a4,1(a5) + 80014b64: fd043783 ld a5,-48(s0) + 80014b68: 10400713 li a4,260 + 80014b6c: 00e79123 sh a4,2(a5) + 80014b70: fd043783 ld a5,-48(s0) + 80014b74: 00478793 addi a5,a5,4 + 80014b78: fd843703 ld a4,-40(s0) + 80014b7c: 01400613 li a2,20 + 80014b80: 00070593 mv a1,a4 + 80014b84: 00078513 mv a0,a5 + 80014b88: c98f20ef jal ra,80007020 + 80014b8c: fec42783 lw a5,-20(s0) + 80014b90: 0017879b addiw a5,a5,1 + 80014b94: fef42623 sw a5,-20(s0) + 80014b98: fec42703 lw a4,-20(s0) + 80014b9c: fbc42783 lw a5,-68(s0) + 80014ba0: 0007071b sext.w a4,a4 + 80014ba4: 0007879b sext.w a5,a5 + 80014ba8: 02f77663 bgeu a4,a5,80014bd4 + 80014bac: fe043783 ld a5,-32(s0) + 80014bb0: 0087d783 lhu a5,8(a5) + 80014bb4: 0007879b sext.w a5,a5 + 80014bb8: fec42703 lw a4,-20(s0) + 80014bbc: 00f707bb addw a5,a4,a5 + 80014bc0: 0007871b sext.w a4,a5 + 80014bc4: fe043783 ld a5,-32(s0) + 80014bc8: 00a7d783 lhu a5,10(a5) + 80014bcc: 0007879b sext.w a5,a5 + 80014bd0: f2f760e3 bltu a4,a5,80014af0 + 80014bd4: fe043783 ld a5,-32(s0) + 80014bd8: 0087d703 lhu a4,8(a5) + 80014bdc: fec42783 lw a5,-20(s0) + 80014be0: 03079793 slli a5,a5,0x30 + 80014be4: 0307d793 srli a5,a5,0x30 + 80014be8: 00f707bb addw a5,a4,a5 + 80014bec: 03079713 slli a4,a5,0x30 + 80014bf0: 03075713 srli a4,a4,0x30 + 80014bf4: fe043783 ld a5,-32(s0) + 80014bf8: 00e79423 sh a4,8(a5) + 80014bfc: fec42703 lw a4,-20(s0) + 80014c00: 00070793 mv a5,a4 + 80014c04: 0067979b slliw a5,a5,0x6 + 80014c08: 00e787bb addw a5,a5,a4 + 80014c0c: 0027979b slliw a5,a5,0x2 + 80014c10: 0007879b sext.w a5,a5 + 80014c14: 0007879b sext.w a5,a5 + 80014c18: 00078513 mv a0,a5 + 80014c1c: 04813083 ld ra,72(sp) + 80014c20: 04013403 ld s0,64(sp) + 80014c24: 05010113 addi sp,sp,80 + 80014c28: 00008067 ret + +0000000080014c2c : + 80014c2c: fd010113 addi sp,sp,-48 + 80014c30: 02813423 sd s0,40(sp) + 80014c34: 03010413 addi s0,sp,48 + 80014c38: fca43c23 sd a0,-40(s0) + 80014c3c: fcb43823 sd a1,-48(s0) + 80014c40: fe042623 sw zero,-20(s0) + 80014c44: fec42783 lw a5,-20(s0) + 80014c48: 00078513 mv a0,a5 + 80014c4c: 02813403 ld s0,40(sp) + 80014c50: 03010113 addi sp,sp,48 + 80014c54: 00008067 ret + +0000000080014c58 : + 80014c58: ff010113 addi sp,sp,-16 + 80014c5c: 00113423 sd ra,8(sp) + 80014c60: 00813023 sd s0,0(sp) + 80014c64: 01010413 addi s0,sp,16 + 80014c68: 00005517 auipc a0,0x5 + 80014c6c: 9b050513 addi a0,a0,-1616 # 80019618 <_device_fs> + 80014c70: f8dfb0ef jal ra,80010bfc + 80014c74: 00000793 li a5,0 + 80014c78: 00078513 mv a0,a5 + 80014c7c: 00813083 ld ra,8(sp) + 80014c80: 00013403 ld s0,0(sp) + 80014c84: 01010113 addi sp,sp,16 + 80014c88: 00008067 ret + +0000000080014c8c : + 80014c8c: fc010113 addi sp,sp,-64 + 80014c90: 02813c23 sd s0,56(sp) + 80014c94: 04010413 addi s0,sp,64 + 80014c98: fca43c23 sd a0,-40(s0) + 80014c9c: fcb43823 sd a1,-48(s0) + 80014ca0: fcc43423 sd a2,-56(s0) + 80014ca4: fc843783 ld a5,-56(s0) + 80014ca8: 00079663 bnez a5,80014cb4 + 80014cac: ffb00793 li a5,-5 + 80014cb0: 01c0006f j 80014ccc + 80014cb4: fc843783 ld a5,-56(s0) + 80014cb8: fef43423 sd a5,-24(s0) + 80014cbc: fd843783 ld a5,-40(s0) + 80014cc0: fe843703 ld a4,-24(s0) + 80014cc4: 00e7bc23 sd a4,24(a5) + 80014cc8: 00000793 li a5,0 + 80014ccc: 00078513 mv a0,a5 + 80014cd0: 03813403 ld s0,56(sp) + 80014cd4: 04010113 addi sp,sp,64 + 80014cd8: 00008067 ret + +0000000080014cdc : + 80014cdc: fe010113 addi sp,sp,-32 + 80014ce0: 00813c23 sd s0,24(sp) + 80014ce4: 02010413 addi s0,sp,32 + 80014ce8: fea43423 sd a0,-24(s0) + 80014cec: 00000793 li a5,0 + 80014cf0: 00078513 mv a0,a5 + 80014cf4: 01813403 ld s0,24(sp) + 80014cf8: 02010113 addi sp,sp,32 + 80014cfc: 00008067 ret + +0000000080014d00 : + 80014d00: fd010113 addi sp,sp,-48 + 80014d04: 02813423 sd s0,40(sp) + 80014d08: 03010413 addi s0,sp,48 + 80014d0c: fea43423 sd a0,-24(s0) + 80014d10: 00058793 mv a5,a1 + 80014d14: fcc43c23 sd a2,-40(s0) + 80014d18: fef42223 sw a5,-28(s0) + 80014d1c: ffb00793 li a5,-5 + 80014d20: 00078513 mv a0,a5 + 80014d24: 02813403 ld s0,40(sp) + 80014d28: 03010113 addi sp,sp,48 + 80014d2c: 00008067 ret + +0000000080014d30 : + 80014d30: fe010113 addi sp,sp,-32 + 80014d34: 00813c23 sd s0,24(sp) + 80014d38: 02010413 addi s0,sp,32 + 80014d3c: fea43423 sd a0,-24(s0) + 80014d40: fe843783 ld a5,-24(s0) + 80014d44: 0007a783 lw a5,0(a5) + 80014d48: 00078c63 beqz a5,80014d60 + 80014d4c: fe843783 ld a5,-24(s0) + 80014d50: 0007a783 lw a5,0(a5) + 80014d54: 00078713 mv a4,a5 + 80014d58: 00100793 li a5,1 + 80014d5c: 00f71a63 bne a4,a5,80014d70 + 80014d60: fe843783 ld a5,-24(s0) + 80014d64: 0187b703 ld a4,24(a5) + 80014d68: fff00793 li a5,-1 + 80014d6c: 00f71663 bne a4,a5,80014d78 + 80014d70: fff00793 li a5,-1 + 80014d74: 0080006f j 80014d7c + 80014d78: 00000793 li a5,0 + 80014d7c: 00078513 mv a0,a5 + 80014d80: 01813403 ld s0,24(sp) + 80014d84: 02010113 addi sp,sp,32 + 80014d88: 00008067 ret + +0000000080014d8c : + 80014d8c: fa010113 addi sp,sp,-96 + 80014d90: 04113c23 sd ra,88(sp) + 80014d94: 04813823 sd s0,80(sp) + 80014d98: 06010413 addi s0,sp,96 + 80014d9c: faa43c23 sd a0,-72(s0) + 80014da0: fab43823 sd a1,-80(s0) + 80014da4: fac43423 sd a2,-88(s0) + 80014da8: fb843503 ld a0,-72(s0) + 80014dac: f85ff0ef jal ra,80014d30 + 80014db0: 00050793 mv a5,a0 + 80014db4: 00078663 beqz a5,80014dc0 + 80014db8: 00000793 li a5,0 + 80014dbc: 2b00006f j 8001506c + 80014dc0: fb043783 ld a5,-80(s0) + 80014dc4: 0007c783 lbu a5,0(a5) + 80014dc8: 00078713 mv a4,a5 + 80014dcc: 02f00793 li a5,47 + 80014dd0: 02f71663 bne a4,a5,80014dfc + 80014dd4: fb043783 ld a5,-80(s0) + 80014dd8: 00178793 addi a5,a5,1 + 80014ddc: 0007c783 lbu a5,0(a5) + 80014de0: 00079e63 bnez a5,80014dfc + 80014de4: fb843783 ld a5,-72(s0) + 80014de8: 0187b703 ld a4,24(a5) + 80014dec: fa843783 ld a5,-88(s0) + 80014df0: 00e7b023 sd a4,0(a5) + 80014df4: fb843783 ld a5,-72(s0) + 80014df8: 2740006f j 8001506c + 80014dfc: fb843783 ld a5,-72(s0) + 80014e00: 0107b783 ld a5,16(a5) + 80014e04: fcf43423 sd a5,-56(s0) + 80014e08: fb843783 ld a5,-72(s0) + 80014e0c: 0187b783 ld a5,24(a5) + 80014e10: fcf43023 sd a5,-64(s0) + 80014e14: fb043783 ld a5,-80(s0) + 80014e18: fcf43823 sd a5,-48(s0) + 80014e1c: 0100006f j 80014e2c + 80014e20: fd043783 ld a5,-48(s0) + 80014e24: 00178793 addi a5,a5,1 + 80014e28: fcf43823 sd a5,-48(s0) + 80014e2c: fd043783 ld a5,-48(s0) + 80014e30: 0007c783 lbu a5,0(a5) + 80014e34: 00078c63 beqz a5,80014e4c + 80014e38: fd043783 ld a5,-48(s0) + 80014e3c: 0007c783 lbu a5,0(a5) + 80014e40: 00078713 mv a4,a5 + 80014e44: 02f00793 li a5,47 + 80014e48: fcf70ce3 beq a4,a5,80014e20 + 80014e4c: fd043783 ld a5,-48(s0) + 80014e50: fcf43c23 sd a5,-40(s0) + 80014e54: 0100006f j 80014e64 + 80014e58: fd043783 ld a5,-48(s0) + 80014e5c: 00178793 addi a5,a5,1 + 80014e60: fcf43823 sd a5,-48(s0) + 80014e64: fd043783 ld a5,-48(s0) + 80014e68: 0007c783 lbu a5,0(a5) + 80014e6c: 00078713 mv a4,a5 + 80014e70: 02f00793 li a5,47 + 80014e74: 1ef70263 beq a4,a5,80015058 + 80014e78: fd043783 ld a5,-48(s0) + 80014e7c: 0007c783 lbu a5,0(a5) + 80014e80: fc079ce3 bnez a5,80014e58 + 80014e84: 1d40006f j 80015058 + 80014e88: fe043023 sd zero,-32(s0) + 80014e8c: fe043423 sd zero,-24(s0) + 80014e90: 1ac0006f j 8001503c + 80014e94: fe843783 ld a5,-24(s0) + 80014e98: 00579793 slli a5,a5,0x5 + 80014e9c: fc843703 ld a4,-56(s0) + 80014ea0: 00f707b3 add a5,a4,a5 + 80014ea4: 00078513 mv a0,a5 + 80014ea8: e89ff0ef jal ra,80014d30 + 80014eac: 00050793 mv a5,a0 + 80014eb0: 00078663 beqz a5,80014ebc + 80014eb4: 00000793 li a5,0 + 80014eb8: 1b40006f j 8001506c + 80014ebc: fe843783 ld a5,-24(s0) + 80014ec0: 00579793 slli a5,a5,0x5 + 80014ec4: fc843703 ld a4,-56(s0) + 80014ec8: 00f707b3 add a5,a4,a5 + 80014ecc: 0087b783 ld a5,8(a5) + 80014ed0: 00078513 mv a0,a5 + 80014ed4: b08f20ef jal ra,800071dc + 80014ed8: 00050693 mv a3,a0 + 80014edc: fd043703 ld a4,-48(s0) + 80014ee0: fd843783 ld a5,-40(s0) + 80014ee4: 40f707b3 sub a5,a4,a5 + 80014ee8: 14f69463 bne a3,a5,80015030 + 80014eec: fe843783 ld a5,-24(s0) + 80014ef0: 00579793 slli a5,a5,0x5 + 80014ef4: fc843703 ld a4,-56(s0) + 80014ef8: 00f707b3 add a5,a4,a5 + 80014efc: 0087b683 ld a3,8(a5) + 80014f00: fd043703 ld a4,-48(s0) + 80014f04: fd843783 ld a5,-40(s0) + 80014f08: 40f707b3 sub a5,a4,a5 + 80014f0c: 00078613 mv a2,a5 + 80014f10: fd843583 ld a1,-40(s0) + 80014f14: 00068513 mv a0,a3 + 80014f18: 9b4f20ef jal ra,800070cc + 80014f1c: 00050793 mv a5,a0 + 80014f20: 10079863 bnez a5,80015030 + 80014f24: fe843783 ld a5,-24(s0) + 80014f28: 00579793 slli a5,a5,0x5 + 80014f2c: fc843703 ld a4,-56(s0) + 80014f30: 00f707b3 add a5,a4,a5 + 80014f34: 0187b783 ld a5,24(a5) + 80014f38: fcf43023 sd a5,-64(s0) + 80014f3c: 0100006f j 80014f4c + 80014f40: fd043783 ld a5,-48(s0) + 80014f44: 00178793 addi a5,a5,1 + 80014f48: fcf43823 sd a5,-48(s0) + 80014f4c: fd043783 ld a5,-48(s0) + 80014f50: 0007c783 lbu a5,0(a5) + 80014f54: 00078c63 beqz a5,80014f6c + 80014f58: fd043783 ld a5,-48(s0) + 80014f5c: 0007c783 lbu a5,0(a5) + 80014f60: 00078713 mv a4,a5 + 80014f64: 02f00793 li a5,47 + 80014f68: fcf70ce3 beq a4,a5,80014f40 + 80014f6c: fd043783 ld a5,-48(s0) + 80014f70: fcf43c23 sd a5,-40(s0) + 80014f74: 0100006f j 80014f84 + 80014f78: fd043783 ld a5,-48(s0) + 80014f7c: 00178793 addi a5,a5,1 + 80014f80: fcf43823 sd a5,-48(s0) + 80014f84: fd043783 ld a5,-48(s0) + 80014f88: 0007c783 lbu a5,0(a5) + 80014f8c: 00078713 mv a4,a5 + 80014f90: 02f00793 li a5,47 + 80014f94: 00f70863 beq a4,a5,80014fa4 + 80014f98: fd043783 ld a5,-48(s0) + 80014f9c: 0007c783 lbu a5,0(a5) + 80014fa0: fc079ce3 bnez a5,80014f78 + 80014fa4: fd843783 ld a5,-40(s0) + 80014fa8: 0007c783 lbu a5,0(a5) + 80014fac: 02079263 bnez a5,80014fd0 + 80014fb0: fa843783 ld a5,-88(s0) + 80014fb4: fc043703 ld a4,-64(s0) + 80014fb8: 00e7b023 sd a4,0(a5) + 80014fbc: fe843783 ld a5,-24(s0) + 80014fc0: 00579793 slli a5,a5,0x5 + 80014fc4: fc843703 ld a4,-56(s0) + 80014fc8: 00f707b3 add a5,a4,a5 + 80014fcc: 0a00006f j 8001506c + 80014fd0: fe843783 ld a5,-24(s0) + 80014fd4: 00579793 slli a5,a5,0x5 + 80014fd8: fc843703 ld a4,-56(s0) + 80014fdc: 00f707b3 add a5,a4,a5 + 80014fe0: 0007a783 lw a5,0(a5) + 80014fe4: 00078713 mv a4,a5 + 80014fe8: 00100793 li a5,1 + 80014fec: 02f71463 bne a4,a5,80015014 + 80014ff0: fe843783 ld a5,-24(s0) + 80014ff4: 00579793 slli a5,a5,0x5 + 80014ff8: fc843703 ld a4,-56(s0) + 80014ffc: 00f707b3 add a5,a4,a5 + 80015000: 0107b783 ld a5,16(a5) + 80015004: fcf43423 sd a5,-56(s0) + 80015008: 00100793 li a5,1 + 8001500c: fef43023 sd a5,-32(s0) + 80015010: 0400006f j 80015050 + 80015014: fd843783 ld a5,-40(s0) + 80015018: 02079a63 bnez a5,8001504c + 8001501c: fe843783 ld a5,-24(s0) + 80015020: 00579793 slli a5,a5,0x5 + 80015024: fc843703 ld a4,-56(s0) + 80015028: 00f707b3 add a5,a4,a5 + 8001502c: 0400006f j 8001506c + 80015030: fe843783 ld a5,-24(s0) + 80015034: 00178793 addi a5,a5,1 + 80015038: fef43423 sd a5,-24(s0) + 8001503c: fe843703 ld a4,-24(s0) + 80015040: fc043783 ld a5,-64(s0) + 80015044: e4f768e3 bltu a4,a5,80014e94 + 80015048: 0080006f j 80015050 + 8001504c: 00000013 nop + 80015050: fe043783 ld a5,-32(s0) + 80015054: 00078863 beqz a5,80015064 + 80015058: fc843783 ld a5,-56(s0) + 8001505c: e20796e3 bnez a5,80014e88 + 80015060: 0080006f j 80015068 + 80015064: 00000013 nop + 80015068: 00000793 li a5,0 + 8001506c: 00078513 mv a0,a5 + 80015070: 05813083 ld ra,88(sp) + 80015074: 05013403 ld s0,80(sp) + 80015078: 06010113 addi sp,sp,96 + 8001507c: 00008067 ret + +0000000080015080 : + 80015080: fc010113 addi sp,sp,-64 + 80015084: 02113c23 sd ra,56(sp) + 80015088: 02813823 sd s0,48(sp) + 8001508c: 04010413 addi s0,sp,64 + 80015090: fca43c23 sd a0,-40(s0) + 80015094: fcb43823 sd a1,-48(s0) + 80015098: fcc43423 sd a2,-56(s0) + 8001509c: fd843783 ld a5,-40(s0) + 800150a0: 0407b783 ld a5,64(a5) + 800150a4: fef43023 sd a5,-32(s0) + 800150a8: fe043783 ld a5,-32(s0) + 800150ac: 00079e63 bnez a5,800150c8 + 800150b0: 08900613 li a2,137 + 800150b4: 00004597 auipc a1,0x4 + 800150b8: 6dc58593 addi a1,a1,1756 # 80019790 <__FUNCTION__.4153> + 800150bc: 00003517 auipc a0,0x3 + 800150c0: 1d450513 addi a0,a0,468 # 80018290 + 800150c4: bb8f30ef jal ra,8000847c + 800150c8: fe043503 ld a0,-32(s0) + 800150cc: c65ff0ef jal ra,80014d30 + 800150d0: 00050793 mv a5,a0 + 800150d4: 00078663 beqz a5,800150e0 + 800150d8: ffb00793 li a5,-5 + 800150dc: 0980006f j 80015174 + 800150e0: fd843783 ld a5,-40(s0) + 800150e4: 0307b783 ld a5,48(a5) + 800150e8: fd843703 ld a4,-40(s0) + 800150ec: 03873703 ld a4,56(a4) # 8038 <__STACKSIZE__+0x4038> + 800150f0: 40e787b3 sub a5,a5,a4 + 800150f4: fc843703 ld a4,-56(s0) + 800150f8: 00f77863 bgeu a4,a5,80015108 + 800150fc: fc843783 ld a5,-56(s0) + 80015100: fef43423 sd a5,-24(s0) + 80015104: 01c0006f j 80015120 + 80015108: fd843783 ld a5,-40(s0) + 8001510c: 0307b783 ld a5,48(a5) + 80015110: fd843703 ld a4,-40(s0) + 80015114: 03873703 ld a4,56(a4) + 80015118: 40e787b3 sub a5,a5,a4 + 8001511c: fef43423 sd a5,-24(s0) + 80015120: fe843783 ld a5,-24(s0) + 80015124: 02078463 beqz a5,8001514c + 80015128: fe043783 ld a5,-32(s0) + 8001512c: 0107b783 ld a5,16(a5) + 80015130: fd843703 ld a4,-40(s0) + 80015134: 03873703 ld a4,56(a4) + 80015138: 00e787b3 add a5,a5,a4 + 8001513c: fe843603 ld a2,-24(s0) + 80015140: 00078593 mv a1,a5 + 80015144: fd043503 ld a0,-48(s0) + 80015148: 91deb0ef jal ra,80000a64 + 8001514c: fd843783 ld a5,-40(s0) + 80015150: 0387b783 ld a5,56(a5) + 80015154: 00078713 mv a4,a5 + 80015158: fe843783 ld a5,-24(s0) + 8001515c: 00f707b3 add a5,a4,a5 + 80015160: 00078713 mv a4,a5 + 80015164: fd843783 ld a5,-40(s0) + 80015168: 02e7bc23 sd a4,56(a5) + 8001516c: fe843783 ld a5,-24(s0) + 80015170: 0007879b sext.w a5,a5 + 80015174: 00078513 mv a0,a5 + 80015178: 03813083 ld ra,56(sp) + 8001517c: 03013403 ld s0,48(sp) + 80015180: 04010113 addi sp,sp,64 + 80015184: 00008067 ret + +0000000080015188 : + 80015188: fe010113 addi sp,sp,-32 + 8001518c: 00813c23 sd s0,24(sp) + 80015190: 02010413 addi s0,sp,32 + 80015194: fea43423 sd a0,-24(s0) + 80015198: feb43023 sd a1,-32(s0) + 8001519c: fe843783 ld a5,-24(s0) + 800151a0: 0307b703 ld a4,48(a5) + 800151a4: fe043783 ld a5,-32(s0) + 800151a8: 02f76063 bltu a4,a5,800151c8 + 800151ac: fe843783 ld a5,-24(s0) + 800151b0: fe043703 ld a4,-32(s0) + 800151b4: 02e7bc23 sd a4,56(a5) + 800151b8: fe843783 ld a5,-24(s0) + 800151bc: 0387b783 ld a5,56(a5) + 800151c0: 0007879b sext.w a5,a5 + 800151c4: 0080006f j 800151cc + 800151c8: ffb00793 li a5,-5 + 800151cc: 00078513 mv a0,a5 + 800151d0: 01813403 ld s0,24(sp) + 800151d4: 02010113 addi sp,sp,32 + 800151d8: 00008067 ret + +00000000800151dc : + 800151dc: fe010113 addi sp,sp,-32 + 800151e0: 00813c23 sd s0,24(sp) + 800151e4: 02010413 addi s0,sp,32 + 800151e8: fea43423 sd a0,-24(s0) + 800151ec: fe843783 ld a5,-24(s0) + 800151f0: 0407b023 sd zero,64(a5) + 800151f4: 00000793 li a5,0 + 800151f8: 00078513 mv a0,a5 + 800151fc: 01813403 ld s0,24(sp) + 80015200: 02010113 addi sp,sp,32 + 80015204: 00008067 ret + +0000000080015208 : + 80015208: fc010113 addi sp,sp,-64 + 8001520c: 02113c23 sd ra,56(sp) + 80015210: 02813823 sd s0,48(sp) + 80015214: 04010413 addi s0,sp,64 + 80015218: fca43423 sd a0,-56(s0) + 8001521c: fc843783 ld a5,-56(s0) + 80015220: 0407b783 ld a5,64(a5) + 80015224: fef43423 sd a5,-24(s0) + 80015228: fe843783 ld a5,-24(s0) + 8001522c: 0187b783 ld a5,24(a5) + 80015230: fef43023 sd a5,-32(s0) + 80015234: fe043503 ld a0,-32(s0) + 80015238: af9ff0ef jal ra,80014d30 + 8001523c: 00050793 mv a5,a0 + 80015240: 00078663 beqz a5,8001524c + 80015244: ffb00793 li a5,-5 + 80015248: 0d00006f j 80015318 + 8001524c: fc843783 ld a5,-56(s0) + 80015250: 0287a783 lw a5,40(a5) + 80015254: 6437f793 andi a5,a5,1603 + 80015258: 0007879b sext.w a5,a5 + 8001525c: 00078663 beqz a5,80015268 + 80015260: fea00793 li a5,-22 + 80015264: 0b40006f j 80015318 + 80015268: fc843783 ld a5,-56(s0) + 8001526c: 0087b783 ld a5,8(a5) + 80015270: fd040713 addi a4,s0,-48 + 80015274: 00070613 mv a2,a4 + 80015278: 00078593 mv a1,a5 + 8001527c: fe043503 ld a0,-32(s0) + 80015280: b0dff0ef jal ra,80014d8c + 80015284: fca43c23 sd a0,-40(s0) + 80015288: fd843783 ld a5,-40(s0) + 8001528c: 00079663 bnez a5,80015298 + 80015290: ffe00793 li a5,-2 + 80015294: 0840006f j 80015318 + 80015298: fd843783 ld a5,-40(s0) + 8001529c: 0007a783 lw a5,0(a5) + 800152a0: 00078713 mv a4,a5 + 800152a4: 00100793 li a5,1 + 800152a8: 02f71463 bne a4,a5,800152d0 + 800152ac: fc843783 ld a5,-56(s0) + 800152b0: 0287a783 lw a5,40(a5) + 800152b4: 00078713 mv a4,a5 + 800152b8: 000107b7 lui a5,0x10 + 800152bc: 00f777b3 and a5,a4,a5 + 800152c0: 0007879b sext.w a5,a5 + 800152c4: 02079863 bnez a5,800152f4 + 800152c8: ffe00793 li a5,-2 + 800152cc: 04c0006f j 80015318 + 800152d0: fc843783 ld a5,-56(s0) + 800152d4: 0287a783 lw a5,40(a5) # 10028 <__STACKSIZE__+0xc028> + 800152d8: 00078713 mv a4,a5 + 800152dc: 000107b7 lui a5,0x10 + 800152e0: 00f777b3 and a5,a4,a5 + 800152e4: 0007879b sext.w a5,a5 + 800152e8: 00078663 beqz a5,800152f4 + 800152ec: ffe00793 li a5,-2 + 800152f0: 0280006f j 80015318 + 800152f4: fc843783 ld a5,-56(s0) + 800152f8: fd843703 ld a4,-40(s0) + 800152fc: 04e7b023 sd a4,64(a5) # 10040 <__STACKSIZE__+0xc040> + 80015300: fd043703 ld a4,-48(s0) + 80015304: fc843783 ld a5,-56(s0) + 80015308: 02e7b823 sd a4,48(a5) + 8001530c: fc843783 ld a5,-56(s0) + 80015310: 0207bc23 sd zero,56(a5) + 80015314: 00000793 li a5,0 + 80015318: 00078513 mv a0,a5 + 8001531c: 03813083 ld ra,56(sp) + 80015320: 03013403 ld s0,48(sp) + 80015324: 04010113 addi sp,sp,64 + 80015328: 00008067 ret + +000000008001532c : + 8001532c: fb010113 addi sp,sp,-80 + 80015330: 04113423 sd ra,72(sp) + 80015334: 04813023 sd s0,64(sp) + 80015338: 05010413 addi s0,sp,80 + 8001533c: fca43423 sd a0,-56(s0) + 80015340: fcb43023 sd a1,-64(s0) + 80015344: fac43c23 sd a2,-72(s0) + 80015348: fc843783 ld a5,-56(s0) + 8001534c: 0187b783 ld a5,24(a5) + 80015350: fef43423 sd a5,-24(s0) + 80015354: fd840793 addi a5,s0,-40 + 80015358: 00078613 mv a2,a5 + 8001535c: fc043583 ld a1,-64(s0) + 80015360: fe843503 ld a0,-24(s0) + 80015364: a29ff0ef jal ra,80014d8c + 80015368: fea43023 sd a0,-32(s0) + 8001536c: fe043783 ld a5,-32(s0) + 80015370: 00079663 bnez a5,8001537c + 80015374: ffe00793 li a5,-2 + 80015378: 0980006f j 80015410 + 8001537c: fb843783 ld a5,-72(s0) + 80015380: 0007b023 sd zero,0(a5) + 80015384: fb843783 ld a5,-72(s0) + 80015388: 00008737 lui a4,0x8 + 8001538c: 1b67071b addiw a4,a4,438 + 80015390: 00e7a823 sw a4,16(a5) + 80015394: fe043783 ld a5,-32(s0) + 80015398: 0007a783 lw a5,0(a5) + 8001539c: 00078713 mv a4,a5 + 800153a0: 00100793 li a5,1 + 800153a4: 04f71663 bne a4,a5,800153f0 + 800153a8: fb843783 ld a5,-72(s0) + 800153ac: 0107a783 lw a5,16(a5) + 800153b0: 00078713 mv a4,a5 + 800153b4: ffff87b7 lui a5,0xffff8 + 800153b8: fff78793 addi a5,a5,-1 # ffffffffffff7fff <__bss_end+0xffffffff7ffccd7b> + 800153bc: 00f777b3 and a5,a4,a5 + 800153c0: 0007871b sext.w a4,a5 + 800153c4: fb843783 ld a5,-72(s0) + 800153c8: 00e7a823 sw a4,16(a5) + 800153cc: fb843783 ld a5,-72(s0) + 800153d0: 0107a783 lw a5,16(a5) + 800153d4: 00078713 mv a4,a5 + 800153d8: 000047b7 lui a5,0x4 + 800153dc: 04978793 addi a5,a5,73 # 4049 <__STACKSIZE__+0x49> + 800153e0: 00f767b3 or a5,a4,a5 + 800153e4: 0007871b sext.w a4,a5 + 800153e8: fb843783 ld a5,-72(s0) + 800153ec: 00e7a823 sw a4,16(a5) + 800153f0: fe043783 ld a5,-32(s0) + 800153f4: 0187b783 ld a5,24(a5) + 800153f8: 00078713 mv a4,a5 + 800153fc: fb843783 ld a5,-72(s0) + 80015400: 02e7b823 sd a4,48(a5) + 80015404: fb843783 ld a5,-72(s0) + 80015408: 0407bc23 sd zero,88(a5) + 8001540c: 00000793 li a5,0 + 80015410: 00078513 mv a0,a5 + 80015414: 04813083 ld ra,72(sp) + 80015418: 04013403 ld s0,64(sp) + 8001541c: 05010113 addi sp,sp,80 + 80015420: 00008067 ret + +0000000080015424 : + 80015424: fa010113 addi sp,sp,-96 + 80015428: 04113c23 sd ra,88(sp) + 8001542c: 04813823 sd s0,80(sp) + 80015430: 06010413 addi s0,sp,96 + 80015434: faa43c23 sd a0,-72(s0) + 80015438: fab43823 sd a1,-80(s0) + 8001543c: 00060793 mv a5,a2 + 80015440: faf42623 sw a5,-84(s0) + 80015444: fb843783 ld a5,-72(s0) + 80015448: 0407b783 ld a5,64(a5) + 8001544c: fef43023 sd a5,-32(s0) + 80015450: fe043503 ld a0,-32(s0) + 80015454: 8ddff0ef jal ra,80014d30 + 80015458: 00050793 mv a5,a0 + 8001545c: 00078663 beqz a5,80015468 + 80015460: ffb00793 li a5,-5 + 80015464: 1900006f j 800155f4 + 80015468: fe043783 ld a5,-32(s0) + 8001546c: 0007a783 lw a5,0(a5) + 80015470: 00078713 mv a4,a5 + 80015474: 00100793 li a5,1 + 80015478: 00f70e63 beq a4,a5,80015494 + 8001547c: 0fd00613 li a2,253 + 80015480: 00004597 auipc a1,0x4 + 80015484: 32058593 addi a1,a1,800 # 800197a0 <__FUNCTION__.4186> + 80015488: 00003517 auipc a0,0x3 + 8001548c: e1850513 addi a0,a0,-488 # 800182a0 + 80015490: fedf20ef jal ra,8000847c + 80015494: fe043783 ld a5,-32(s0) + 80015498: 0107b783 ld a5,16(a5) + 8001549c: fef43023 sd a5,-32(s0) + 800154a0: fac46783 lwu a5,-84(s0) + 800154a4: 10400593 li a1,260 + 800154a8: 00078513 mv a0,a5 + 800154ac: bedea0ef jal ra,80000098 <__udivdi3> + 800154b0: 00050793 mv a5,a0 + 800154b4: faf42623 sw a5,-84(s0) + 800154b8: fac42783 lw a5,-84(s0) + 800154bc: 0007879b sext.w a5,a5 + 800154c0: 00079663 bnez a5,800154cc + 800154c4: fea00793 li a5,-22 + 800154c8: 12c0006f j 800155f4 + 800154cc: fe043423 sd zero,-24(s0) + 800154d0: fe043423 sd zero,-24(s0) + 800154d4: 0d80006f j 800155ac + 800154d8: fe843703 ld a4,-24(s0) + 800154dc: 00070793 mv a5,a4 + 800154e0: 00679793 slli a5,a5,0x6 + 800154e4: 00e787b3 add a5,a5,a4 + 800154e8: 00279793 slli a5,a5,0x2 + 800154ec: 00078713 mv a4,a5 + 800154f0: fb043783 ld a5,-80(s0) + 800154f4: 00e787b3 add a5,a5,a4 + 800154f8: fcf43c23 sd a5,-40(s0) + 800154fc: fb843783 ld a5,-72(s0) + 80015500: 0387b783 ld a5,56(a5) + 80015504: 00579793 slli a5,a5,0x5 + 80015508: fe043703 ld a4,-32(s0) + 8001550c: 00f707b3 add a5,a4,a5 + 80015510: fcf43823 sd a5,-48(s0) + 80015514: fd043783 ld a5,-48(s0) + 80015518: 0087b783 ld a5,8(a5) + 8001551c: fcf43423 sd a5,-56(s0) + 80015520: fd043783 ld a5,-48(s0) + 80015524: 0007a783 lw a5,0(a5) + 80015528: 00078713 mv a4,a5 + 8001552c: 00100793 li a5,1 + 80015530: 00f71a63 bne a4,a5,80015544 + 80015534: fd843783 ld a5,-40(s0) + 80015538: 00200713 li a4,2 + 8001553c: 00e78023 sb a4,0(a5) + 80015540: 0100006f j 80015550 + 80015544: fd843783 ld a5,-40(s0) + 80015548: 00100713 li a4,1 + 8001554c: 00e78023 sb a4,0(a5) + 80015550: fc843503 ld a0,-56(s0) + 80015554: c89f10ef jal ra,800071dc + 80015558: 00050793 mv a5,a0 + 8001555c: 0ff7f713 andi a4,a5,255 + 80015560: fd843783 ld a5,-40(s0) + 80015564: 00e780a3 sb a4,1(a5) + 80015568: fd843783 ld a5,-40(s0) + 8001556c: 10400713 li a4,260 + 80015570: 00e79123 sh a4,2(a5) + 80015574: fd843783 ld a5,-40(s0) + 80015578: 00478793 addi a5,a5,4 + 8001557c: 10000613 li a2,256 + 80015580: fc843583 ld a1,-56(s0) + 80015584: 00078513 mv a0,a5 + 80015588: a99f10ef jal ra,80007020 + 8001558c: fb843783 ld a5,-72(s0) + 80015590: 0387b783 ld a5,56(a5) + 80015594: 00178713 addi a4,a5,1 + 80015598: fb843783 ld a5,-72(s0) + 8001559c: 02e7bc23 sd a4,56(a5) + 800155a0: fe843783 ld a5,-24(s0) + 800155a4: 00178793 addi a5,a5,1 + 800155a8: fef43423 sd a5,-24(s0) + 800155ac: fac46783 lwu a5,-84(s0) + 800155b0: fe843703 ld a4,-24(s0) + 800155b4: 00f77e63 bgeu a4,a5,800155d0 + 800155b8: fb843783 ld a5,-72(s0) + 800155bc: 0387b783 ld a5,56(a5) + 800155c0: 00078713 mv a4,a5 + 800155c4: fb843783 ld a5,-72(s0) + 800155c8: 0307b783 ld a5,48(a5) + 800155cc: f0f766e3 bltu a4,a5,800154d8 + 800155d0: fe843783 ld a5,-24(s0) + 800155d4: 0007879b sext.w a5,a5 + 800155d8: 00078713 mv a4,a5 + 800155dc: 00070793 mv a5,a4 + 800155e0: 0067979b slliw a5,a5,0x6 + 800155e4: 00e787bb addw a5,a5,a4 + 800155e8: 0027979b slliw a5,a5,0x2 + 800155ec: 0007879b sext.w a5,a5 + 800155f0: 0007879b sext.w a5,a5 + 800155f4: 00078513 mv a0,a5 + 800155f8: 05813083 ld ra,88(sp) + 800155fc: 05013403 ld s0,80(sp) + 80015600: 06010113 addi sp,sp,96 + 80015604: 00008067 ret + +0000000080015608 : + 80015608: ff010113 addi sp,sp,-16 + 8001560c: 00113423 sd ra,8(sp) + 80015610: 00813023 sd s0,0(sp) + 80015614: 01010413 addi s0,sp,16 + 80015618: 00004517 auipc a0,0x4 + 8001561c: 12850513 addi a0,a0,296 # 80019740 <_romfs> + 80015620: ddcfb0ef jal ra,80010bfc + 80015624: 00000793 li a5,0 + 80015628: 00078513 mv a0,a5 + 8001562c: 00813083 ld ra,8(sp) + 80015630: 00013403 ld s0,0(sp) + 80015634: 01010113 addi sp,sp,16 + 80015638: 00008067 ret + 8001563c: 0000 unimp + 8001563e: 0000 unimp + 80015640: 6548 ld a0,136(a0) + 80015642: 6c6c ld a1,216(s0) + 80015644: 4952206f j 800382d8 <__bss_end+0xd054> + 80015648: 562d4353 0x562d4353 + 8001564c: 0a21 addi s4,s4,8 + 8001564e: 0000 unimp + 80015650: 6175 addi sp,sp,368 + 80015652: 7472 ld s0,312(sp) + 80015654: 0000 unimp + 80015656: 0000 unimp + 80015658: 6568 ld a0,200(a0) + 8001565a: 7061 c.lui zero,0xffff8 + 8001565c: 203a fld ft0,392(sp) + 8001565e: 2578305b 0x2578305b + 80015662: 3830 fld fa2,112(s0) + 80015664: 2078 fld fa4,192(s0) + 80015666: 202d 0x202d + 80015668: 7830 ld a2,112(s0) + 8001566a: 3025 0x3025 + 8001566c: 7838 ld a4,112(s0) + 8001566e: 0a5d addi s4,s4,23 + ... + 80015678: 69726573 csrrsi a0,0x697,4 + 8001567c: 6c61 lui s8,0x18 + 8001567e: 2120 fld fs0,64(a0) + 80015680: 203d 0x203d + 80015682: 5452 lw s0,52(sp) + 80015684: 4e5f 4c55 004c 0x4c4c554e5f + 8001568a: 0000 unimp + 8001568c: 0000 unimp + 8001568e: 0000 unimp + 80015690: 6175 addi sp,sp,368 + 80015692: 7472 ld s0,312(sp) + 80015694: 2120 fld fs0,64(a0) + 80015696: 203d 0x203d + 80015698: 5452 lw s0,52(sp) + 8001569a: 4e5f 4c55 004c 0x4c4c554e5f + 800156a0: 6e616863 bltu sp,t1,80015d90 + 800156a4: 656e ld a0,216(sp) + 800156a6: 206c fld fa1,192(s0) + 800156a8: 3d21 addiw s10,s10,-24 + 800156aa: 3320 fld fs0,96(a4) + 800156ac: 0000 unimp + 800156ae: 0000 unimp + 800156b0: 6175 addi sp,sp,368 + 800156b2: 7472 ld s0,312(sp) + 800156b4: 0000 unimp + 800156b6: 0000 unimp + 800156b8: 0030 addi a2,sp,8 + 800156ba: 0000 unimp + 800156bc: 0000 unimp + 800156be: 0000 unimp + 800156c0: 206d6573 csrrsi a0,0x206,26 + 800156c4: 3d21 addiw s10,s10,-24 + 800156c6: 5220 lw s0,96(a2) + 800156c8: 5f54 lw a3,60(a4) + 800156ca: 554e lw a0,240(sp) + 800156cc: 4c4c lw a1,28(s0) + 800156ce: 0000 unimp + 800156d0: 6176 ld sp,344(sp) + 800156d2: 756c ld a1,232(a0) + 800156d4: 2065 0x2065 + 800156d6: 203c fld fa5,64(s0) + 800156d8: 7830 ld a2,112(s0) + 800156da: 3031 0x3031 + 800156dc: 3030 fld fa2,96(s0) + 800156de: 5530 lw a2,104(a0) + ... + 800156e8: 7472 ld s0,312(sp) + 800156ea: 6f5f 6a62 6365 0x63656a626f5f + 800156f0: 5f74 lw a3,124(a4) + 800156f2: 5f746567 0x5f746567 + 800156f6: 7974 ld a3,240(a0) + 800156f8: 6570 ld a2,200(a0) + 800156fa: 2628 fld fa0,72(a2) + 800156fc: 2d6d6573 csrrsi a0,0x2d6,26 + 80015700: 703e 0x703e + 80015702: 7261 lui tp,0xffff8 + 80015704: 6e65 lui t3,0x19 + 80015706: 2e74 fld fa3,216(a2) + 80015708: 6170 ld a2,192(a0) + 8001570a: 6572 ld a0,280(sp) + 8001570c: 746e ld s0,248(sp) + 8001570e: 2029 0x2029 + 80015710: 3d3d addiw s10,s10,-17 + 80015712: 5220 lw s0,96(a2) + 80015714: 5f54 lw a3,60(a4) + 80015716: 656a624f 0x656a624f + 8001571a: 435f7463 bgeu t5,s5,80015b42 + 8001571e: 616c ld a1,192(a0) + 80015720: 535f7373 csrrci t1,0x535,30 + 80015724: 6d65 lui s10,0x19 + 80015726: 7061 c.lui zero,0xffff8 + 80015728: 6f68 ld a0,216(a4) + 8001572a: 6572 ld a0,280(sp) + 8001572c: 0000 unimp + 8001572e: 0000 unimp + 80015730: 7472 ld s0,312(sp) + 80015732: 6f5f 6a62 6365 0x63656a626f5f + 80015738: 5f74 lw a3,124(a4) + 8001573a: 7369 lui t1,0xffffa + 8001573c: 735f 7379 6574 0x65747379735f + 80015742: 6f6d lui t5,0x1b + 80015744: 6a62 ld s4,24(sp) + 80015746: 6365 lui t1,0x19 + 80015748: 2874 fld fa3,208(s0) + 8001574a: 7326 ld t1,104(sp) + 8001574c: 6d65 lui s10,0x19 + 8001574e: 3e2d addiw t3,t3,-21 + 80015750: 6170 ld a2,192(a0) + 80015752: 6572 ld a0,280(sp) + 80015754: 746e ld s0,248(sp) + 80015756: 702e 0x702e + 80015758: 7261 lui tp,0xffff8 + 8001575a: 6e65 lui t3,0x19 + 8001575c: 2974 fld fa3,208(a0) + 8001575e: 0000 unimp + 80015760: 7546 ld a0,112(sp) + 80015762: 636e ld t1,216(sp) + 80015764: 6974 ld a3,208(a0) + 80015766: 255b6e6f jal t3,800cc1ba <__bss_end+0xa0f36> + 8001576a: 73205d73 csrrwi s10,0x732,0 + 8001576e: 6168 ld a0,192(a0) + 80015770: 6c6c ld a1,216(s0) + 80015772: 6e20 ld s0,88(a2) + 80015774: 6220746f jal s0,8001cd96 <__global_pointer$+0x25f6> + 80015778: 2065 0x2065 + 8001577a: 7375 lui t1,0xffffd + 8001577c: 6465 lui s0,0x19 + 8001577e: 6920 ld s0,80(a0) + 80015780: 206e fld ft0,216(sp) + 80015782: 5349 li t1,-14 + 80015784: 0a52 slli s4,s4,0x14 + 80015786: 0000 unimp + 80015788: 7472 ld s0,312(sp) + 8001578a: 6f5f 6a62 6365 0x63656a626f5f + 80015790: 5f74 lw a3,124(a4) + 80015792: 7369 lui t1,0xffffa + 80015794: 735f 7379 6574 0x65747379735f + 8001579a: 6f6d lui t5,0x1b + 8001579c: 6a62 ld s4,24(sp) + 8001579e: 6365 lui t1,0x19 + 800157a0: 2874 fld fa3,208(s0) + 800157a2: 7326 ld t1,104(sp) + 800157a4: 6d65 lui s10,0x19 + 800157a6: 3e2d addiw t3,t3,-21 + 800157a8: 6170 ld a2,192(a0) + 800157aa: 6572 ld a0,280(sp) + 800157ac: 746e ld s0,248(sp) + 800157ae: 702e 0x702e + 800157b0: 7261 lui tp,0xffff8 + 800157b2: 6e65 lui t3,0x19 + 800157b4: 2974 fld fa3,208(a0) + 800157b6: 3d20 fld fs0,120(a0) + 800157b8: 203d 0x203d + 800157ba: 5452 lw s0,52(sp) + 800157bc: 465f 4c41 4553 0x45534c41465f + 800157c2: 0000 unimp + 800157c4: 0000 unimp + 800157c6: 0000 unimp + 800157c8: 7546 ld a0,112(sp) + 800157ca: 636e ld t1,216(sp) + 800157cc: 6974 ld a3,208(a0) + 800157ce: 255b6e6f jal t3,800cc222 <__bss_end+0xa0f9e> + 800157d2: 73205d73 csrrwi s10,0x732,0 + 800157d6: 6168 ld a0,192(a0) + 800157d8: 6c6c ld a1,216(s0) + 800157da: 6e20 ld s0,88(a2) + 800157dc: 6220746f jal s0,8001cdfe <__global_pointer$+0x265e> + 800157e0: 2065 0x2065 + 800157e2: 7375 lui t1,0xffffd + 800157e4: 6465 lui s0,0x19 + 800157e6: 6220 ld s0,64(a2) + 800157e8: 6665 lui a2,0x19 + 800157ea: 2065726f jal tp,8006c9f0 <__bss_end+0x4176c> + 800157ee: 65686373 csrrsi t1,0x656,16 + 800157f2: 7564 ld s1,232(a0) + 800157f4: 656c ld a1,200(a0) + 800157f6: 2072 fld ft0,280(sp) + 800157f8: 72617473 csrrci s0,0x726,2 + 800157fc: 0a74 addi a3,sp,284 + 800157fe: 0000 unimp + 80015800: 756d lui a0,0xffffb + 80015802: 6574 ld a3,200(a0) + 80015804: 2078 fld fa4,192(s0) + 80015806: 3d21 addiw s10,s10,-24 + 80015808: 5220 lw s0,96(a2) + 8001580a: 5f54 lw a3,60(a4) + 8001580c: 554e lw a0,240(sp) + 8001580e: 4c4c lw a1,28(s0) + ... + 80015818: 7472 ld s0,312(sp) + 8001581a: 6f5f 6a62 6365 0x63656a626f5f + 80015820: 5f74 lw a3,124(a4) + 80015822: 5f746567 0x5f746567 + 80015826: 7974 ld a3,240(a0) + 80015828: 6570 ld a2,200(a0) + 8001582a: 2628 fld fa0,72(a2) + 8001582c: 756d lui a0,0xffffb + 8001582e: 6574 ld a3,200(a0) + 80015830: 2d78 fld fa4,216(a0) + 80015832: 703e 0x703e + 80015834: 7261 lui tp,0xffff8 + 80015836: 6e65 lui t3,0x19 + 80015838: 2e74 fld fa3,216(a2) + 8001583a: 6170 ld a2,192(a0) + 8001583c: 6572 ld a0,280(sp) + 8001583e: 746e ld s0,248(sp) + 80015840: 2029 0x2029 + 80015842: 3d3d addiw s10,s10,-17 + 80015844: 5220 lw s0,96(a2) + 80015846: 5f54 lw a3,60(a4) + 80015848: 656a624f 0x656a624f + 8001584c: 435f7463 bgeu t5,s5,80015c74 + 80015850: 616c ld a1,192(a0) + 80015852: 4d5f7373 csrrci t1,0x4d5,30 + 80015856: 7475 lui s0,0xffffd + 80015858: 7865 lui a6,0xffff9 + 8001585a: 0000 unimp + 8001585c: 0000 unimp + 8001585e: 0000 unimp + 80015860: 7472 ld s0,312(sp) + 80015862: 6f5f 6a62 6365 0x63656a626f5f + 80015868: 5f74 lw a3,124(a4) + 8001586a: 7369 lui t1,0xffffa + 8001586c: 735f 7379 6574 0x65747379735f + 80015872: 6f6d lui t5,0x1b + 80015874: 6a62 ld s4,24(sp) + 80015876: 6365 lui t1,0x19 + 80015878: 2874 fld fa3,208(s0) + 8001587a: 6d26 ld s10,72(sp) + 8001587c: 7475 lui s0,0xffffd + 8001587e: 7865 lui a6,0xffff9 + 80015880: 3e2d addiw t3,t3,-21 + 80015882: 6170 ld a2,192(a0) + 80015884: 6572 ld a0,280(sp) + 80015886: 746e ld s0,248(sp) + 80015888: 702e 0x702e + 8001588a: 7261 lui tp,0xffff8 + 8001588c: 6e65 lui t3,0x19 + 8001588e: 2974 fld fa3,208(a0) + ... + 80015898: 7472 ld s0,312(sp) + 8001589a: 6f5f 6a62 6365 0x63656a626f5f + 800158a0: 5f74 lw a3,124(a4) + 800158a2: 7369 lui t1,0xffffa + 800158a4: 735f 7379 6574 0x65747379735f + 800158aa: 6f6d lui t5,0x1b + 800158ac: 6a62 ld s4,24(sp) + 800158ae: 6365 lui t1,0x19 + 800158b0: 2874 fld fa3,208(s0) + 800158b2: 6d26 ld s10,72(sp) + 800158b4: 7475 lui s0,0xffffd + 800158b6: 7865 lui a6,0xffff9 + 800158b8: 3e2d addiw t3,t3,-21 + 800158ba: 6170 ld a2,192(a0) + 800158bc: 6572 ld a0,280(sp) + 800158be: 746e ld s0,248(sp) + 800158c0: 702e 0x702e + 800158c2: 7261 lui tp,0xffff8 + 800158c4: 6e65 lui t3,0x19 + 800158c6: 2974 fld fa3,208(a0) + 800158c8: 3d20 fld fs0,120(a0) + 800158ca: 203d 0x203d + 800158cc: 5452 lw s0,52(sp) + 800158ce: 465f 4c41 4553 0x45534c41465f + 800158d4: 0000 unimp + 800158d6: 0000 unimp + 800158d8: 7665 lui a2,0xffff9 + 800158da: 6e65 lui t3,0x19 + 800158dc: 2074 fld fa3,192(s0) + 800158de: 3d21 addiw s10,s10,-24 + 800158e0: 5220 lw s0,96(a2) + 800158e2: 5f54 lw a3,60(a4) + 800158e4: 554e lw a0,240(sp) + 800158e6: 4c4c lw a1,28(s0) + ... + 800158f0: 7472 ld s0,312(sp) + 800158f2: 6f5f 6a62 6365 0x63656a626f5f + 800158f8: 5f74 lw a3,124(a4) + 800158fa: 5f746567 0x5f746567 + 800158fe: 7974 ld a3,240(a0) + 80015900: 6570 ld a2,200(a0) + 80015902: 2628 fld fa0,72(a2) + 80015904: 7665 lui a2,0xffff9 + 80015906: 6e65 lui t3,0x19 + 80015908: 2d74 fld fa3,216(a0) + 8001590a: 703e 0x703e + 8001590c: 7261 lui tp,0xffff8 + 8001590e: 6e65 lui t3,0x19 + 80015910: 2e74 fld fa3,216(a2) + 80015912: 6170 ld a2,192(a0) + 80015914: 6572 ld a0,280(sp) + 80015916: 746e ld s0,248(sp) + 80015918: 2029 0x2029 + 8001591a: 3d3d addiw s10,s10,-17 + 8001591c: 5220 lw s0,96(a2) + 8001591e: 5f54 lw a3,60(a4) + 80015920: 656a624f 0x656a624f + 80015924: 435f7463 bgeu t5,s5,80015d4c + 80015928: 616c ld a1,192(a0) + 8001592a: 455f7373 csrrci t1,0x455,30 + 8001592e: 6576 ld a0,344(sp) + 80015930: 746e ld s0,248(sp) + 80015932: 0000 unimp + 80015934: 0000 unimp + 80015936: 0000 unimp + 80015938: 7472 ld s0,312(sp) + 8001593a: 6f5f 6a62 6365 0x63656a626f5f + 80015940: 5f74 lw a3,124(a4) + 80015942: 7369 lui t1,0xffffa + 80015944: 735f 7379 6574 0x65747379735f + 8001594a: 6f6d lui t5,0x1b + 8001594c: 6a62 ld s4,24(sp) + 8001594e: 6365 lui t1,0x19 + 80015950: 2874 fld fa3,208(s0) + 80015952: 6526 ld a0,72(sp) + 80015954: 6576 ld a0,344(sp) + 80015956: 746e ld s0,248(sp) + 80015958: 3e2d addiw t3,t3,-21 + 8001595a: 6170 ld a2,192(a0) + 8001595c: 6572 ld a0,280(sp) + 8001595e: 746e ld s0,248(sp) + 80015960: 702e 0x702e + 80015962: 7261 lui tp,0xffff8 + 80015964: 6e65 lui t3,0x19 + 80015966: 2974 fld fa3,208(a0) + ... + 80015970: 7472 ld s0,312(sp) + 80015972: 6f5f 6a62 6365 0x63656a626f5f + 80015978: 5f74 lw a3,124(a4) + 8001597a: 7369 lui t1,0xffffa + 8001597c: 735f 7379 6574 0x65747379735f + 80015982: 6f6d lui t5,0x1b + 80015984: 6a62 ld s4,24(sp) + 80015986: 6365 lui t1,0x19 + 80015988: 2874 fld fa3,208(s0) + 8001598a: 6526 ld a0,72(sp) + 8001598c: 6576 ld a0,344(sp) + 8001598e: 746e ld s0,248(sp) + 80015990: 3e2d addiw t3,t3,-21 + 80015992: 6170 ld a2,192(a0) + 80015994: 6572 ld a0,280(sp) + 80015996: 746e ld s0,248(sp) + 80015998: 702e 0x702e + 8001599a: 7261 lui tp,0xffff8 + 8001599c: 6e65 lui t3,0x19 + 8001599e: 2974 fld fa3,208(a0) + 800159a0: 3d20 fld fs0,120(a0) + 800159a2: 203d 0x203d + 800159a4: 5452 lw s0,52(sp) + 800159a6: 465f 4c41 4553 0x45534c41465f + 800159ac: 0000 unimp + 800159ae: 0000 unimp + 800159b0: 626d lui tp,0x1b + 800159b2: 2120 fld fs0,64(a0) + 800159b4: 203d 0x203d + 800159b6: 5452 lw s0,52(sp) + 800159b8: 4e5f 4c55 004c 0x4c4c554e5f + 800159be: 0000 unimp + 800159c0: 7472 ld s0,312(sp) + 800159c2: 6f5f 6a62 6365 0x63656a626f5f + 800159c8: 5f74 lw a3,124(a4) + 800159ca: 5f746567 0x5f746567 + 800159ce: 7974 ld a3,240(a0) + 800159d0: 6570 ld a2,200(a0) + 800159d2: 2628 fld fa0,72(a2) + 800159d4: 626d lui tp,0x1b + 800159d6: 3e2d addiw t3,t3,-21 + 800159d8: 6170 ld a2,192(a0) + 800159da: 6572 ld a0,280(sp) + 800159dc: 746e ld s0,248(sp) + 800159de: 702e 0x702e + 800159e0: 7261 lui tp,0xffff8 + 800159e2: 6e65 lui t3,0x19 + 800159e4: 2974 fld fa3,208(a0) + 800159e6: 3d20 fld fs0,120(a0) + 800159e8: 203d 0x203d + 800159ea: 5452 lw s0,52(sp) + 800159ec: 4f5f 6a62 6365 0x63656a624f5f + 800159f2: 5f74 lw a3,124(a4) + 800159f4: 73616c43 fmadd.d fs8,ft2,fs6,fa4,unknown + 800159f8: 614d5f73 csrrwi t5,0x614,26 + 800159fc: 6c69 lui s8,0x1a + 800159fe: 6f42 ld t5,16(sp) + 80015a00: 0078 addi a4,sp,12 + 80015a02: 0000 unimp + 80015a04: 0000 unimp + 80015a06: 0000 unimp + 80015a08: 7472 ld s0,312(sp) + 80015a0a: 6f5f 6a62 6365 0x63656a626f5f + 80015a10: 5f74 lw a3,124(a4) + 80015a12: 7369 lui t1,0xffffa + 80015a14: 735f 7379 6574 0x65747379735f + 80015a1a: 6f6d lui t5,0x1b + 80015a1c: 6a62 ld s4,24(sp) + 80015a1e: 6365 lui t1,0x19 + 80015a20: 2874 fld fa3,208(s0) + 80015a22: 6d26 ld s10,72(sp) + 80015a24: 2d62 fld fs10,24(sp) + 80015a26: 703e 0x703e + 80015a28: 7261 lui tp,0xffff8 + 80015a2a: 6e65 lui t3,0x19 + 80015a2c: 2e74 fld fa3,216(a2) + 80015a2e: 6170 ld a2,192(a0) + 80015a30: 6572 ld a0,280(sp) + 80015a32: 746e ld s0,248(sp) + 80015a34: 0029 c.nop 10 + 80015a36: 0000 unimp + 80015a38: 7472 ld s0,312(sp) + 80015a3a: 6f5f 6a62 6365 0x63656a626f5f + 80015a40: 5f74 lw a3,124(a4) + 80015a42: 7369 lui t1,0xffffa + 80015a44: 735f 7379 6574 0x65747379735f + 80015a4a: 6f6d lui t5,0x1b + 80015a4c: 6a62 ld s4,24(sp) + 80015a4e: 6365 lui t1,0x19 + 80015a50: 2874 fld fa3,208(s0) + 80015a52: 6d26 ld s10,72(sp) + 80015a54: 2d62 fld fs10,24(sp) + 80015a56: 703e 0x703e + 80015a58: 7261 lui tp,0xffff8 + 80015a5a: 6e65 lui t3,0x19 + 80015a5c: 2e74 fld fa3,216(a2) + 80015a5e: 6170 ld a2,192(a0) + 80015a60: 6572 ld a0,280(sp) + 80015a62: 746e ld s0,248(sp) + 80015a64: 2029 0x2029 + 80015a66: 3d3d addiw s10,s10,-17 + 80015a68: 5220 lw s0,96(a2) + 80015a6a: 5f54 lw a3,60(a4) + 80015a6c: 4146 lw sp,80(sp) + 80015a6e: 534c lw a1,36(a4) + 80015a70: 0045 c.nop 17 + 80015a72: 0000 unimp + 80015a74: 0000 unimp + 80015a76: 0000 unimp + 80015a78: 716d addi sp,sp,-272 + 80015a7a: 2120 fld fs0,64(a0) + 80015a7c: 203d 0x203d + 80015a7e: 5452 lw s0,52(sp) + 80015a80: 4e5f 4c55 004c 0x4c4c554e5f + 80015a86: 0000 unimp + 80015a88: 7472 ld s0,312(sp) + 80015a8a: 6f5f 6a62 6365 0x63656a626f5f + 80015a90: 5f74 lw a3,124(a4) + 80015a92: 5f746567 0x5f746567 + 80015a96: 7974 ld a3,240(a0) + 80015a98: 6570 ld a2,200(a0) + 80015a9a: 2628 fld fa0,72(a2) + 80015a9c: 716d addi sp,sp,-272 + 80015a9e: 3e2d addiw t3,t3,-21 + 80015aa0: 6170 ld a2,192(a0) + 80015aa2: 6572 ld a0,280(sp) + 80015aa4: 746e ld s0,248(sp) + 80015aa6: 702e 0x702e + 80015aa8: 7261 lui tp,0xffff8 + 80015aaa: 6e65 lui t3,0x19 + 80015aac: 2974 fld fa3,208(a0) + 80015aae: 3d20 fld fs0,120(a0) + 80015ab0: 203d 0x203d + 80015ab2: 5452 lw s0,52(sp) + 80015ab4: 4f5f 6a62 6365 0x63656a624f5f + 80015aba: 5f74 lw a3,124(a4) + 80015abc: 73616c43 fmadd.d fs8,ft2,fs6,fa4,unknown + 80015ac0: 654d5f73 csrrwi t5,0x654,26 + 80015ac4: 67617373 csrrci t1,0x676,2 + 80015ac8: 5165 li sp,-7 + 80015aca: 6575 lui a0,0x1d + 80015acc: 6575 lui a0,0x1d + 80015ace: 0000 unimp + 80015ad0: 7472 ld s0,312(sp) + 80015ad2: 6f5f 6a62 6365 0x63656a626f5f + 80015ad8: 5f74 lw a3,124(a4) + 80015ada: 7369 lui t1,0xffffa + 80015adc: 735f 7379 6574 0x65747379735f + 80015ae2: 6f6d lui t5,0x1b + 80015ae4: 6a62 ld s4,24(sp) + 80015ae6: 6365 lui t1,0x19 + 80015ae8: 2874 fld fa3,208(s0) + 80015aea: 6d26 ld s10,72(sp) + 80015aec: 2d71 addiw s10,s10,28 + 80015aee: 703e 0x703e + 80015af0: 7261 lui tp,0xffff8 + 80015af2: 6e65 lui t3,0x19 + 80015af4: 2e74 fld fa3,216(a2) + 80015af6: 6170 ld a2,192(a0) + 80015af8: 6572 ld a0,280(sp) + 80015afa: 746e ld s0,248(sp) + 80015afc: 0029 c.nop 10 + 80015afe: 0000 unimp + 80015b00: 7472 ld s0,312(sp) + 80015b02: 6f5f 6a62 6365 0x63656a626f5f + 80015b08: 5f74 lw a3,124(a4) + 80015b0a: 7369 lui t1,0xffffa + 80015b0c: 735f 7379 6574 0x65747379735f + 80015b12: 6f6d lui t5,0x1b + 80015b14: 6a62 ld s4,24(sp) + 80015b16: 6365 lui t1,0x19 + 80015b18: 2874 fld fa3,208(s0) + 80015b1a: 6d26 ld s10,72(sp) + 80015b1c: 2d71 addiw s10,s10,28 + 80015b1e: 703e 0x703e + 80015b20: 7261 lui tp,0xffff8 + 80015b22: 6e65 lui t3,0x19 + 80015b24: 2e74 fld fa3,216(a2) + 80015b26: 6170 ld a2,192(a0) + 80015b28: 6572 ld a0,280(sp) + 80015b2a: 746e ld s0,248(sp) + 80015b2c: 2029 0x2029 + 80015b2e: 3d3d addiw s10,s10,-17 + 80015b30: 5220 lw s0,96(a2) + 80015b32: 5f54 lw a3,60(a4) + 80015b34: 4146 lw sp,80(sp) + 80015b36: 534c lw a1,36(a4) + 80015b38: 0045 c.nop 17 + 80015b3a: 0000 unimp + 80015b3c: 0000 unimp + 80015b3e: 0000 unimp + 80015b40: 7562 ld a0,56(sp) + 80015b42: 6666 ld a2,88(sp) + 80015b44: 7265 lui tp,0xffff9 + 80015b46: 2120 fld fs0,64(a0) + 80015b48: 203d 0x203d + 80015b4a: 5452 lw s0,52(sp) + 80015b4c: 4e5f 4c55 004c 0x4c4c554e5f + 80015b52: 0000 unimp + 80015b54: 0000 unimp + 80015b56: 0000 unimp + 80015b58: 657a6973 csrrsi s2,0x657,20 + 80015b5c: 2120 fld fs0,64(a0) + 80015b5e: 203d 0x203d + 80015b60: 0030 addi a2,sp,8 + 80015b62: 0000 unimp + 80015b64: 0000 unimp + 80015b66: 0000 unimp + 80015b68: 6e69 lui t3,0x1a + 80015b6a: 6f66 ld t5,88(sp) + 80015b6c: 6d72 ld s10,280(sp) + 80015b6e: 7461 lui s0,0xffff8 + 80015b70: 6f69 lui t5,0x1a + 80015b72: 206e fld ft0,216(sp) + 80015b74: 3d21 addiw s10,s10,-24 + 80015b76: 5220 lw s0,96(a2) + 80015b78: 5f54 lw a3,60(a4) + 80015b7a: 554e lw a0,240(sp) + 80015b7c: 4c4c lw a1,28(s0) + 80015b7e: 0000 unimp + 80015b80: 206a626f jal tp,800bbd86 <__bss_end+0x90b02> + 80015b84: 3d21 addiw s10,s10,-24 + 80015b86: 6f20 ld s0,88(a4) + 80015b88: 6a62 ld s4,24(sp) + 80015b8a: 6365 lui t1,0x19 + 80015b8c: 0074 addi a3,sp,12 + 80015b8e: 0000 unimp + 80015b90: 656a626f jal tp,800bc1e6 <__bss_end+0x90f62> + 80015b94: 21207463 bgeu zero,s2,80015d9c + 80015b98: 203d 0x203d + 80015b9a: 5452 lw s0,52(sp) + 80015b9c: 4e5f 4c55 004c 0x4c4c554e5f + 80015ba2: 0000 unimp + 80015ba4: 0000 unimp + 80015ba6: 0000 unimp + 80015ba8: 7546 ld a0,112(sp) + 80015baa: 636e ld t1,216(sp) + 80015bac: 6974 ld a3,208(a0) + 80015bae: 255b6e6f jal t3,800cc602 <__bss_end+0xa137e> + 80015bb2: 73205d73 csrrwi s10,0x732,0 + 80015bb6: 6168 ld a0,192(a0) + 80015bb8: 6c6c ld a1,216(s0) + 80015bba: 6e20 ld s0,88(a2) + 80015bbc: 6220746f jal s0,8001d1de <__global_pointer$+0x2a3e> + 80015bc0: 2065 0x2065 + 80015bc2: 7375 lui t1,0xffffd + 80015bc4: 6465 lui s0,0x19 + 80015bc6: 6920 ld s0,80(a0) + 80015bc8: 206e fld ft0,216(sp) + 80015bca: 5349 li t1,-14 + 80015bcc: 0a52 slli s4,s4,0x14 + 80015bce: 0000 unimp + 80015bd0: 0030 addi a2,sp,8 + 80015bd2: 0000 unimp + 80015bd4: 0000 unimp + 80015bd6: 0000 unimp + 80015bd8: 2821 addiw a6,a6,8 + 80015bda: 656a626f jal tp,800bc230 <__bss_end+0x90fac> + 80015bde: 3e2d7463 bgeu s10,sp,80015fc6 + 80015be2: 7974 ld a3,240(a0) + 80015be4: 6570 ld a2,200(a0) + 80015be6: 2620 fld fs0,72(a2) + 80015be8: 5220 lw s0,96(a2) + 80015bea: 5f54 lw a3,60(a4) + 80015bec: 656a624f 0x656a624f + 80015bf0: 435f7463 bgeu t5,s5,80016018 + 80015bf4: 616c ld a1,192(a0) + 80015bf6: 535f7373 csrrci t1,0x535,30 + 80015bfa: 6174 ld a3,192(a0) + 80015bfc: 6974 ld a3,208(a0) + 80015bfe: 00002963 0x2963 + 80015c02: 0000 unimp + 80015c04: 0000 unimp + 80015c06: 0000 unimp + 80015c08: 6874 ld a3,208(s0) + 80015c0a: 6572 ld a0,280(sp) + 80015c0c: 6461 lui s0,0x18 + 80015c0e: 2120 fld fs0,64(a0) + 80015c10: 203d 0x203d + 80015c12: 5452 lw s0,52(sp) + 80015c14: 4e5f 4c55 004c 0x4c4c554e5f + 80015c1a: 0000 unimp + 80015c1c: 0000 unimp + 80015c1e: 0000 unimp + 80015c20: 6564 ld s1,200(a0) + 80015c22: 2076 fld ft0,344(sp) + 80015c24: 3d21 addiw s10,s10,-24 + 80015c26: 5220 lw s0,96(a2) + 80015c28: 5f54 lw a3,60(a4) + 80015c2a: 554e lw a0,240(sp) + 80015c2c: 4c4c lw a1,28(s0) + 80015c2e: 0000 unimp + 80015c30: 7472 ld s0,312(sp) + 80015c32: 6f5f 6a62 6365 0x63656a626f5f + 80015c38: 5f74 lw a3,124(a4) + 80015c3a: 5f746567 0x5f746567 + 80015c3e: 7974 ld a3,240(a0) + 80015c40: 6570 ld a2,200(a0) + 80015c42: 2628 fld fa0,72(a2) + 80015c44: 6564 ld s1,200(a0) + 80015c46: 2d76 fld fs10,344(sp) + 80015c48: 703e 0x703e + 80015c4a: 7261 lui tp,0xffff8 + 80015c4c: 6e65 lui t3,0x19 + 80015c4e: 2974 fld fa3,208(a0) + 80015c50: 3d20 fld fs0,120(a0) + 80015c52: 203d 0x203d + 80015c54: 5452 lw s0,52(sp) + 80015c56: 4f5f 6a62 6365 0x63656a624f5f + 80015c5c: 5f74 lw a3,124(a4) + 80015c5e: 73616c43 fmadd.d fs8,ft2,fs6,fa4,unknown + 80015c62: 65445f73 csrrwi t5,0x654,8 + 80015c66: 6976 ld s2,344(sp) + 80015c68: 00006563 bltu zero,zero,80015c72 + 80015c6c: 0000 unimp + 80015c6e: 0000 unimp + 80015c70: 7472 ld s0,312(sp) + 80015c72: 6f5f 6a62 6365 0x63656a626f5f + 80015c78: 5f74 lw a3,124(a4) + 80015c7a: 7369 lui t1,0xffffa + 80015c7c: 735f 7379 6574 0x65747379735f + 80015c82: 6f6d lui t5,0x1b + 80015c84: 6a62 ld s4,24(sp) + 80015c86: 6365 lui t1,0x19 + 80015c88: 2874 fld fa3,208(s0) + 80015c8a: 6426 ld s0,72(sp) + 80015c8c: 7665 lui a2,0xffff9 + 80015c8e: 3e2d addiw t3,t3,-21 + 80015c90: 6170 ld a2,192(a0) + 80015c92: 6572 ld a0,280(sp) + 80015c94: 746e ld s0,248(sp) + 80015c96: 0029 c.nop 10 + 80015c98: 7472 ld s0,312(sp) + 80015c9a: 6f5f 6a62 6365 0x63656a626f5f + 80015ca0: 5f74 lw a3,124(a4) + 80015ca2: 7369 lui t1,0xffffa + 80015ca4: 735f 7379 6574 0x65747379735f + 80015caa: 6f6d lui t5,0x1b + 80015cac: 6a62 ld s4,24(sp) + 80015cae: 6365 lui t1,0x19 + 80015cb0: 2874 fld fa3,208(s0) + 80015cb2: 6426 ld s0,72(sp) + 80015cb4: 7665 lui a2,0xffff9 + 80015cb6: 3e2d addiw t3,t3,-21 + 80015cb8: 6170 ld a2,192(a0) + 80015cba: 6572 ld a0,280(sp) + 80015cbc: 746e ld s0,248(sp) + 80015cbe: 2029 0x2029 + 80015cc0: 3d3d addiw s10,s10,-17 + 80015cc2: 5220 lw s0,96(a2) + 80015cc4: 5f54 lw a3,60(a4) + 80015cc6: 4146 lw sp,80(sp) + 80015cc8: 534c lw a1,36(a4) + 80015cca: 0045 c.nop 17 + 80015ccc: 0000 unimp + 80015cce: 0000 unimp + 80015cd0: 6f54 ld a3,152(a4) + 80015cd2: 6920 ld s0,80(a0) + 80015cd4: 696e ld s2,216(sp) + 80015cd6: 6974 ld a3,208(a0) + 80015cd8: 6c61 lui s8,0x18 + 80015cda: 7a69 lui s4,0xffffa + 80015cdc: 2065 0x2065 + 80015cde: 6564 ld s1,200(a0) + 80015ce0: 6976 ld s2,344(sp) + 80015ce2: 253a6563 bltu s4,s3,80015f2c + 80015ce6: 61662073 csrs 0x616,a2 + 80015cea: 6c69 lui s8,0x1a + 80015cec: 6465 lui s0,0x19 + 80015cee: 202e fld ft0,200(sp) + 80015cf0: 6854 ld a3,144(s0) + 80015cf2: 2065 0x2065 + 80015cf4: 7265 lui tp,0xffff9 + 80015cf6: 6f72 ld t5,280(sp) + 80015cf8: 2072 fld ft0,280(sp) + 80015cfa: 65646f63 bltu s0,s6,80016358 + 80015cfe: 6920 ld s0,80(a0) + 80015d00: 64252073 csrs 0x642,a0 + 80015d04: 000a c.slli zero,0x2 + 80015d06: 0000 unimp + 80015d08: 6564 ld s1,200(a0) + 80015d0a: 2d76 fld fs10,344(sp) + 80015d0c: 723e ld tp,488(sp) + 80015d0e: 6665 lui a2,0x19 + 80015d10: 635f 756f 746e 0x746e756f635f + 80015d16: 2120 fld fs0,64(a0) + 80015d18: 203d 0x203d + 80015d1a: 0030 addi a2,sp,8 + 80015d1c: 0000 unimp + 80015d1e: 0000 unimp + 80015d20: 6974 ld a3,208(a0) + 80015d22: 656d lui a0,0x1b + 80015d24: 2072 fld ft0,280(sp) + 80015d26: 3d21 addiw s10,s10,-24 + 80015d28: 5220 lw s0,96(a2) + 80015d2a: 5f54 lw a3,60(a4) + 80015d2c: 554e lw a0,240(sp) + 80015d2e: 4c4c lw a1,28(s0) + ... + 80015d38: 7472 ld s0,312(sp) + 80015d3a: 6f5f 6a62 6365 0x63656a626f5f + 80015d40: 5f74 lw a3,124(a4) + 80015d42: 5f746567 0x5f746567 + 80015d46: 7974 ld a3,240(a0) + 80015d48: 6570 ld a2,200(a0) + 80015d4a: 2628 fld fa0,72(a2) + 80015d4c: 6974 ld a3,208(a0) + 80015d4e: 656d lui a0,0x1b + 80015d50: 2d72 fld fs10,280(sp) + 80015d52: 703e 0x703e + 80015d54: 7261 lui tp,0xffff8 + 80015d56: 6e65 lui t3,0x19 + 80015d58: 2974 fld fa3,208(a0) + 80015d5a: 3d20 fld fs0,120(a0) + 80015d5c: 203d 0x203d + 80015d5e: 5452 lw s0,52(sp) + 80015d60: 4f5f 6a62 6365 0x63656a624f5f + 80015d66: 5f74 lw a3,124(a4) + 80015d68: 73616c43 fmadd.d fs8,ft2,fs6,fa4,unknown + 80015d6c: 69545f73 csrrwi t5,0x695,8 + 80015d70: 656d lui a0,0x1b + 80015d72: 0072 c.slli zero,0x1c + 80015d74: 0000 unimp + 80015d76: 0000 unimp + 80015d78: 7472 ld s0,312(sp) + 80015d7a: 6f5f 6a62 6365 0x63656a626f5f + 80015d80: 5f74 lw a3,124(a4) + 80015d82: 7369 lui t1,0xffffa + 80015d84: 735f 7379 6574 0x65747379735f + 80015d8a: 6f6d lui t5,0x1b + 80015d8c: 6a62 ld s4,24(sp) + 80015d8e: 6365 lui t1,0x19 + 80015d90: 2874 fld fa3,208(s0) + 80015d92: 7426 ld s0,104(sp) + 80015d94: 6d69 lui s10,0x1a + 80015d96: 7265 lui tp,0xffff9 + 80015d98: 3e2d addiw t3,t3,-21 + 80015d9a: 6170 ld a2,192(a0) + 80015d9c: 6572 ld a0,280(sp) + 80015d9e: 746e ld s0,248(sp) + 80015da0: 0029 c.nop 10 + 80015da2: 0000 unimp + 80015da4: 0000 unimp + 80015da6: 0000 unimp + 80015da8: 7472 ld s0,312(sp) + 80015daa: 6f5f 6a62 6365 0x63656a626f5f + 80015db0: 5f74 lw a3,124(a4) + 80015db2: 7369 lui t1,0xffffa + 80015db4: 735f 7379 6574 0x65747379735f + 80015dba: 6f6d lui t5,0x1b + 80015dbc: 6a62 ld s4,24(sp) + 80015dbe: 6365 lui t1,0x19 + 80015dc0: 2874 fld fa3,208(s0) + 80015dc2: 7426 ld s0,104(sp) + 80015dc4: 6d69 lui s10,0x1a + 80015dc6: 7265 lui tp,0xffff9 + 80015dc8: 3e2d addiw t3,t3,-21 + 80015dca: 6170 ld a2,192(a0) + 80015dcc: 6572 ld a0,280(sp) + 80015dce: 746e ld s0,248(sp) + 80015dd0: 2029 0x2029 + 80015dd2: 3d3d addiw s10,s10,-17 + 80015dd4: 5220 lw s0,96(a2) + 80015dd6: 5f54 lw a3,60(a4) + 80015dd8: 4146 lw sp,80(sp) + 80015dda: 534c lw a1,36(a4) + 80015ddc: 0045 c.nop 17 + 80015dde: 0000 unimp + 80015de0: 6974 ld a3,208(a0) + 80015de2: 656d lui a0,0x1b + 80015de4: 2d72 fld fs10,280(sp) + 80015de6: 693e ld s2,456(sp) + 80015de8: 696e ld s2,216(sp) + 80015dea: 5f74 lw a3,124(a4) + 80015dec: 6974 ld a3,208(a0) + 80015dee: 3c206b63 bltu zero,sp,800161c4 + 80015df2: 5220 lw s0,96(a2) + 80015df4: 5f54 lw a3,60(a4) + 80015df6: 4954 lw a3,20(a0) + 80015df8: 4d5f4b43 0x4d5f4b43 + 80015dfc: 5841 li a6,-16 + 80015dfe: 2f20 fld fs0,88(a4) + 80015e00: 3220 fld fs0,96(a2) + 80015e02: 0000 unimp + 80015e04: 0000 unimp + 80015e06: 0000 unimp + 80015e08: 6974 ld a3,208(a0) + 80015e0a: 656d lui a0,0x1b + 80015e0c: 0072 c.slli zero,0x1c + 80015e0e: 0000 unimp + 80015e10: 7228 ld a0,96(a2) + 80015e12: 5f74 lw a3,124(a4) + 80015e14: 6975 lui s2,0x1d + 80015e16: 746e ld s0,248(sp) + 80015e18: 5f38 lw a4,120(a4) + 80015e1a: 2074 fld fa3,192(s0) + 80015e1c: 292a fld fs2,136(sp) + 80015e1e: 656d lui a0,0x1b + 80015e20: 206d 0x206d + 80015e22: 3d3e fld fs10,488(sp) + 80015e24: 6820 ld s0,80(s0) + 80015e26: 6165 addi sp,sp,112 + 80015e28: 5f70 lw a2,124(a4) + 80015e2a: 7470 ld a2,232(s0) + 80015e2c: 0072 c.slli zero,0x1c + 80015e2e: 0000 unimp + 80015e30: 7228 ld a0,96(a2) + 80015e32: 5f74 lw a3,124(a4) + 80015e34: 6975 lui s2,0x1d + 80015e36: 746e ld s0,248(sp) + 80015e38: 5f38 lw a4,120(a4) + 80015e3a: 2074 fld fa3,192(s0) + 80015e3c: 292a fld fs2,136(sp) + 80015e3e: 656d lui a0,0x1b + 80015e40: 206d 0x206d + 80015e42: 203c fld fa5,64(s0) + 80015e44: 7228 ld a0,96(a2) + 80015e46: 5f74 lw a3,124(a4) + 80015e48: 6975 lui s2,0x1d + 80015e4a: 746e ld s0,248(sp) + 80015e4c: 5f38 lw a4,120(a4) + 80015e4e: 2074 fld fa3,192(s0) + 80015e50: 292a fld fs2,136(sp) + 80015e52: 6568 ld a0,200(a0) + 80015e54: 7061 c.lui zero,0xffff8 + 80015e56: 655f 646e 0000 0x646e655f + 80015e5c: 0000 unimp + 80015e5e: 0000 unimp + 80015e60: 656d lui a0,0x1b + 80015e62: 2d6d addiw s10,s10,27 + 80015e64: 753e ld a0,488(sp) + 80015e66: 20646573 csrrsi a0,0x206,8 + 80015e6a: 3d3d addiw s10,s10,-17 + 80015e6c: 3020 fld fs0,96(s0) + 80015e6e: 0000 unimp + 80015e70: 7546 ld a0,112(sp) + 80015e72: 636e ld t1,216(sp) + 80015e74: 6974 ld a3,208(a0) + 80015e76: 255b6e6f jal t3,800cc8ca <__bss_end+0xa1646> + 80015e7a: 73205d73 csrrwi s10,0x732,0 + 80015e7e: 6168 ld a0,192(a0) + 80015e80: 6c6c ld a1,216(s0) + 80015e82: 6e20 ld s0,88(a2) + 80015e84: 6220746f jal s0,8001d4a6 <__global_pointer$+0x2d06> + 80015e88: 2065 0x2065 + 80015e8a: 7375 lui t1,0xffffd + 80015e8c: 6465 lui s0,0x19 + 80015e8e: 6920 ld s0,80(a0) + 80015e90: 206e fld ft0,216(sp) + 80015e92: 5349 li t1,-14 + 80015e94: 0a52 slli s4,s4,0x14 + 80015e96: 0000 unimp + 80015e98: 0030 addi a2,sp,8 + 80015e9a: 0000 unimp + 80015e9c: 0000 unimp + 80015e9e: 0000 unimp + 80015ea0: 656d lui a0,0x1b + 80015ea2: 206d 0x206d + 80015ea4: 6e69 lui t3,0x1a + 80015ea6: 7469 lui s0,0xffffa + 80015ea8: 202c fld fa1,64(s0) + 80015eaa: 7265 lui tp,0xffff9 + 80015eac: 6f72 ld t5,280(sp) + 80015eae: 2072 fld ft0,280(sp) + 80015eb0: 6562 ld a0,24(sp) + 80015eb2: 206e6967 0x206e6967 + 80015eb6: 6461 lui s0,0x18 + 80015eb8: 7264 ld s1,224(a2) + 80015eba: 7365 lui t1,0xffff9 + 80015ebc: 78302073 csrr zero,0x783 + 80015ec0: 7825 lui a6,0xfffe9 + 80015ec2: 202c fld fa1,64(s0) + 80015ec4: 6e61 lui t3,0x18 + 80015ec6: 2064 fld fs1,192(s0) + 80015ec8: 6e65 lui t3,0x19 + 80015eca: 2064 fld fs1,192(s0) + 80015ecc: 6461 lui s0,0x18 + 80015ece: 7264 ld s1,224(a2) + 80015ed0: 7365 lui t1,0xffff9 + 80015ed2: 78302073 csrr zero,0x783 + 80015ed6: 7825 lui a6,0xfffe9 + 80015ed8: 000a c.slli zero,0x2 + 80015eda: 0000 unimp + 80015edc: 0000 unimp + 80015ede: 0000 unimp + 80015ee0: 4e49 li t3,18 + 80015ee2: 5449 li s0,-14 + 80015ee4: 0000 unimp + 80015ee6: 0000 unimp + 80015ee8: 6568 ld a0,200(a0) + 80015eea: 7061 c.lui zero,0xffff8 + 80015eec: 0000 unimp + 80015eee: 0000 unimp + 80015ef0: 2020 fld fs0,64(s0) + 80015ef2: 2020 fld fs0,64(s0) + 80015ef4: 0000 unimp + 80015ef6: 0000 unimp + 80015ef8: 4f4e lw t5,208(sp) + 80015efa: 454e lw a0,208(sp) + 80015efc: 0000 unimp + 80015efe: 0000 unimp + 80015f00: 2828 fld fa0,80(s0) + 80015f02: 666c ld a1,200(a2) + 80015f04: 6572 ld a0,280(sp) + 80015f06: 2065 0x2065 + 80015f08: 3d3d addiw s10,s10,-17 + 80015f0a: 6820 ld s0,80(s0) + 80015f0c: 6165 addi sp,sp,112 + 80015f0e: 5f70 lw a2,124(a4) + 80015f10: 6e65 lui t3,0x19 + 80015f12: 2964 fld fs1,208(a0) + 80015f14: 7c20 ld s0,120(s0) + 80015f16: 207c fld fa5,192(s0) + 80015f18: 2128 fld fa0,64(a0) + 80015f1a: 666c ld a1,200(a2) + 80015f1c: 6572 ld a0,280(sp) + 80015f1e: 2d65 addiw s10,s10,25 + 80015f20: 753e ld a0,488(sp) + 80015f22: 29646573 csrrsi a0,0x296,8 + 80015f26: 0029 c.nop 10 + 80015f28: 7228 ld a0,96(a2) + 80015f2a: 5f74 lw a3,124(a4) + 80015f2c: 6275 lui tp,0x1d + 80015f2e: 7361 lui t1,0xffff8 + 80015f30: 5f65 li t5,-7 + 80015f32: 2974 fld fa3,208(a0) + 80015f34: 656d lui a0,0x1b + 80015f36: 206d 0x206d + 80015f38: 4953202b 0x4953202b + 80015f3c: 455a lw a0,148(sp) + 80015f3e: 535f464f fnmadd.d fa2,ft10,fs5,fa0,rmm + 80015f42: 5254 lw a3,36(a2) + 80015f44: 4355 li t1,21 + 80015f46: 5f54 lw a3,60(a4) + 80015f48: 454d li a0,19 + 80015f4a: 204d 0x204d + 80015f4c: 6973202b 0x6973202b + 80015f50: 657a ld a0,408(sp) + 80015f52: 3c20 fld fs0,120(s0) + 80015f54: 203d 0x203d + 80015f56: 7228 ld a0,96(a2) + 80015f58: 5f74 lw a3,124(a4) + 80015f5a: 6275 lui tp,0x1d + 80015f5c: 7361 lui t1,0xffff8 + 80015f5e: 5f65 li t5,-7 + 80015f60: 2974 fld fa3,208(a0) + 80015f62: 6568 ld a0,200(a0) + 80015f64: 7061 c.lui zero,0xffff8 + 80015f66: 655f 646e 0000 0x646e655f + 80015f6c: 0000 unimp + 80015f6e: 0000 unimp + 80015f70: 7228 ld a0,96(a2) + 80015f72: 5f74 lw a3,124(a4) + 80015f74: 6275 lui tp,0x1d + 80015f76: 7361 lui t1,0xffff8 + 80015f78: 5f65 li t5,-7 + 80015f7a: 2974 fld fa3,208(a0) + 80015f7c: 2828 fld fa0,80(s0) + 80015f7e: 7472 ld s0,312(sp) + 80015f80: 755f 6e69 3874 0x38746e69755f + 80015f86: 745f 2a20 6d29 0x6d292a20745f + 80015f8c: 6d65 lui s10,0x19 + 80015f8e: 2b20 fld fs0,80(a4) + 80015f90: 5320 lw s0,96(a4) + 80015f92: 5a49 li s4,-14 + 80015f94: 4f45 li t5,17 + 80015f96: 5f46 lw t5,112(sp) + 80015f98: 55525453 0x55525453 + 80015f9c: 4d5f5443 0x4d5f5443 + 80015fa0: 4d45 li s10,17 + 80015fa2: 2029 0x2029 + 80015fa4: 2025 0x2025 + 80015fa6: 5452 lw s0,52(sp) + 80015fa8: 415f 494c 4e47 0x4e47494c415f + 80015fae: 535f 5a49 2045 0x20455a49535f + 80015fb4: 3d3d addiw s10,s10,-17 + 80015fb6: 3020 fld fs0,96(s0) + ... + 80015fc0: 2828 fld fa0,80(s0) + 80015fc2: 7228 ld a0,96(a2) + 80015fc4: 5f74 lw a3,124(a4) + 80015fc6: 6275 lui tp,0x1d + 80015fc8: 7361 lui t1,0xffff8 + 80015fca: 5f65 li t5,-7 + 80015fcc: 2974 fld fa3,208(a0) + 80015fce: 656d lui a0,0x1b + 80015fd0: 296d addiw s2,s2,27 + 80015fd2: 2620 fld fs0,72(a2) + 80015fd4: 2820 fld fs0,80(s0) + 80015fd6: 5452 lw s0,52(sp) + 80015fd8: 415f 494c 4e47 0x4e47494c415f + 80015fde: 535f 5a49 2045 0x20455a49535f + 80015fe4: 202d 0x202d + 80015fe6: 2931 addiw s2,s2,12 + 80015fe8: 2029 0x2029 + 80015fea: 3d3d addiw s10,s10,-17 + 80015fec: 3020 fld fs0,96(s0) + 80015fee: 0000 unimp + 80015ff0: 2828 fld fa0,80(s0) + 80015ff2: 7228 ld a0,96(a2) + 80015ff4: 5f74 lw a3,124(a4) + 80015ff6: 6275 lui tp,0x1d + 80015ff8: 7361 lui t1,0xffff8 + 80015ffa: 5f65 li t5,-7 + 80015ffc: 2974 fld fa3,208(a0) + 80015ffe: 6d72 ld s10,280(sp) + 80016000: 6d65 lui s10,0x19 + 80016002: 2029 0x2029 + 80016004: 2026 fld ft0,72(sp) + 80016006: 5228 lw a0,96(a2) + 80016008: 5f54 lw a3,60(a4) + 8001600a: 4c41 li s8,16 + 8001600c: 4749 li a4,18 + 8001600e: 5f4e lw t5,240(sp) + 80016010: 455a4953 0x455a4953 + 80016014: 2d20 fld fs0,88(a0) + 80016016: 3120 fld fs0,96(a0) + 80016018: 2929 addiw s2,s2,10 + 8001601a: 3d20 fld fs0,120(a0) + 8001601c: 203d 0x203d + 8001601e: 0030 addi a2,sp,8 + 80016020: 7228 ld a0,96(a2) + 80016022: 5f74 lw a3,124(a4) + 80016024: 6975 lui s2,0x1d + 80016026: 746e ld s0,248(sp) + 80016028: 5f38 lw a4,120(a4) + 8001602a: 2074 fld fa3,192(s0) + 8001602c: 292a fld fs2,136(sp) + 8001602e: 6d72 ld s10,280(sp) + 80016030: 6d65 lui s10,0x19 + 80016032: 3e20 fld fs0,120(a2) + 80016034: 203d 0x203d + 80016036: 7228 ld a0,96(a2) + 80016038: 5f74 lw a3,124(a4) + 8001603a: 6975 lui s2,0x1d + 8001603c: 746e ld s0,248(sp) + 8001603e: 5f38 lw a4,120(a4) + 80016040: 2074 fld fa3,192(s0) + 80016042: 292a fld fs2,136(sp) + 80016044: 6568 ld a0,200(a0) + 80016046: 7061 c.lui zero,0xffff8 + 80016048: 705f 7274 2620 0x26207274705f + 8001604e: 2026 fld ft0,72(sp) + 80016050: 7228 ld a0,96(a2) + 80016052: 5f74 lw a3,124(a4) + 80016054: 6975 lui s2,0x1d + 80016056: 746e ld s0,248(sp) + 80016058: 5f38 lw a4,120(a4) + 8001605a: 2074 fld fa3,192(s0) + 8001605c: 292a fld fs2,136(sp) + 8001605e: 6d72 ld s10,280(sp) + 80016060: 6d65 lui s10,0x19 + 80016062: 3c20 fld fs0,120(s0) + 80016064: 2820 fld fs0,80(s0) + 80016066: 7472 ld s0,312(sp) + 80016068: 755f 6e69 3874 0x38746e69755f + 8001606e: 745f 2a20 6829 0x68292a20745f + 80016074: 6165 addi sp,sp,112 + 80016076: 5f70 lw a2,124(a4) + 80016078: 6e65 lui t3,0x19 + 8001607a: 0064 addi s1,sp,12 + 8001607c: 0000 unimp + 8001607e: 0000 unimp + 80016080: 6f74 ld a3,216(a4) + 80016082: 6620 ld s0,72(a2) + 80016084: 6572 ld a0,280(sp) + 80016086: 2065 0x2065 + 80016088: 2061 0x2061 + 8001608a: 6162 ld sp,24(sp) + 8001608c: 2064 fld fs1,192(s0) + 8001608e: 6164 ld s1,192(a0) + 80016090: 6174 ld a3,192(a0) + 80016092: 6220 ld s0,64(a2) + 80016094: 6f6c ld a1,216(a4) + 80016096: 0a3a6b63 bltu s4,gp,8001614c + 8001609a: 0000 unimp + 8001609c: 0000 unimp + 8001609e: 0000 unimp + 800160a0: 656d lui a0,0x1b + 800160a2: 3a6d addiw s4,s4,-5 + 800160a4: 3020 fld fs0,96(s0) + 800160a6: 2578 fld fa4,200(a0) + 800160a8: 3830 fld fa2,112(s0) + 800160aa: 2c78 fld fa4,216(s0) + 800160ac: 7520 ld s0,104(a0) + 800160ae: 20646573 csrrsi a0,0x206,8 + 800160b2: 6c66 ld s8,88(sp) + 800160b4: 6761 lui a4,0x18 + 800160b6: 203a fld ft0,392(sp) + 800160b8: 6425 lui s0,0x9 + 800160ba: 202c fld fa1,64(s0) + 800160bc: 616d addi sp,sp,240 + 800160be: 20636967 0x20636967 + 800160c2: 65646f63 bltu s0,s6,80016720 + 800160c6: 203a fld ft0,392(sp) + 800160c8: 7830 ld a2,112(s0) + 800160ca: 3025 0x3025 + 800160cc: 7834 ld a3,112(s0) + 800160ce: 000a c.slli zero,0x2 + 800160d0: 656d lui a0,0x1b + 800160d2: 2d6d addiw s10,s10,27 + 800160d4: 753e ld a0,488(sp) + 800160d6: 00646573 csrrsi a0,0x6,8 + 800160da: 0000 unimp + 800160dc: 0000 unimp + 800160de: 0000 unimp + 800160e0: 656d lui a0,0x1b + 800160e2: 2d6d addiw s10,s10,27 + 800160e4: 6d3e ld s10,456(sp) + 800160e6: 6761 lui a4,0x18 + 800160e8: 6369 lui t1,0x1a + 800160ea: 3d20 fld fs0,120(a0) + 800160ec: 203d 0x203d + 800160ee: 4548 lw a0,12(a0) + 800160f0: 5041 c.li zero,-16 + 800160f2: 4d5f 4741 4349 0x434947414d5f + ... + 80016100: 6f74 ld a3,216(a4) + 80016102: 6174 ld a3,192(a0) + 80016104: 206c fld fa1,192(s0) + 80016106: 656d lui a0,0x1b + 80016108: 6f6d lui t5,0x1b + 8001610a: 7972 ld s2,312(sp) + 8001610c: 203a fld ft0,392(sp) + 8001610e: 6425 lui s0,0x9 + 80016110: 000a c.slli zero,0x2 + 80016112: 0000 unimp + 80016114: 0000 unimp + 80016116: 0000 unimp + 80016118: 7375 lui t1,0xffffd + 8001611a: 6465 lui s0,0x19 + 8001611c: 6d20 ld s0,88(a0) + 8001611e: 6d65 lui s10,0x19 + 80016120: 2079726f jal tp,800adb26 <__bss_end+0x828a2> + 80016124: 203a fld ft0,392(sp) + 80016126: 6425 lui s0,0x9 + 80016128: 000a c.slli zero,0x2 + 8001612a: 0000 unimp + 8001612c: 0000 unimp + 8001612e: 0000 unimp + 80016130: 616d addi sp,sp,240 + 80016132: 6978 ld a4,208(a0) + 80016134: 756d lui a0,0xffffb + 80016136: 206d 0x206d + 80016138: 6c61 lui s8,0x18 + 8001613a: 6f6c ld a1,216(a4) + 8001613c: 65746163 bltu s0,s7,8001677e + 80016140: 2064 fld fs1,192(s0) + 80016142: 656d lui a0,0x1b + 80016144: 6f6d lui t5,0x1b + 80016146: 7972 ld s2,312(sp) + 80016148: 203a fld ft0,392(sp) + 8001614a: 6425 lui s0,0x9 + 8001614c: 000a c.slli zero,0x2 + 8001614e: 0000 unimp + 80016150: 654d lui a0,0x13 + 80016152: 6f6d lui t5,0x1b + 80016154: 7972 ld s2,312(sp) + 80016156: 6220 ld s0,64(a2) + 80016158: 6f6c ld a1,216(a4) + 8001615a: 77206b63 bltu zero,s2,800168d0 + 8001615e: 6f72 ld t5,280(sp) + 80016160: 676e ld a4,216(sp) + 80016162: 0a3a slli s4,s4,0xe + 80016164: 0000 unimp + 80016166: 0000 unimp + 80016168: 6461 lui s0,0x18 + 8001616a: 7264 ld s1,224(a2) + 8001616c: 7365 lui t1,0xffff9 + 8001616e: 30203a73 csrrc s4,medeleg,zero + 80016172: 2578 fld fa4,200(a0) + 80016174: 3830 fld fa2,112(s0) + 80016176: 0a78 addi a4,sp,284 + ... + 80016180: 2020 fld fs0,64(s0) + 80016182: 616d addi sp,sp,240 + 80016184: 3a636967 0x3a636967 + 80016188: 3020 fld fs0,96(s0) + 8001618a: 2578 fld fa4,200(a0) + 8001618c: 3430 fld fa2,104(s0) + 8001618e: 0a78 addi a4,sp,284 + ... + 80016198: 2020 fld fs0,64(s0) + 8001619a: 7520 ld s0,104(a0) + 8001619c: 3a646573 csrrsi a0,0x3a6,8 + 800161a0: 2520 fld fs0,72(a0) + 800161a2: 0a64 addi s1,sp,284 + 800161a4: 0000 unimp + 800161a6: 0000 unimp + 800161a8: 2020 fld fs0,64(s0) + 800161aa: 657a6973 csrrsi s2,0x657,20 + 800161ae: 203a fld ft0,392(sp) + 800161b0: 6425 lui s0,0x9 + 800161b2: 000a c.slli zero,0x2 + 800161b4: 0000 unimp + 800161b6: 0000 unimp + 800161b8: 6d0a ld s10,128(sp) + 800161ba: 6d65 lui s10,0x19 + 800161bc: 2079726f jal tp,800adbc2 <__bss_end+0x8293e> + 800161c0: 6568 ld a0,200(a0) + 800161c2: 7061 c.lui zero,0xffff8 + 800161c4: 6120 ld s0,64(a0) + 800161c6: 6464 ld s1,200(s0) + 800161c8: 6572 ld a0,280(sp) + 800161ca: 0a3a7373 csrrci t1,0xa3,20 + 800161ce: 0000 unimp + 800161d0: 6568 ld a0,200(a0) + 800161d2: 7061 c.lui zero,0xffff8 + 800161d4: 705f 7274 203a 0x203a7274705f + 800161da: 7830 ld a2,112(s0) + 800161dc: 3025 0x3025 + 800161de: 7838 ld a4,112(s0) + 800161e0: 000a c.slli zero,0x2 + 800161e2: 0000 unimp + 800161e4: 0000 unimp + 800161e6: 0000 unimp + 800161e8: 666c ld a1,200(a2) + 800161ea: 6572 ld a0,280(sp) + 800161ec: 2065 0x2065 + 800161ee: 2020 fld fs0,64(s0) + 800161f0: 203a fld ft0,392(sp) + 800161f2: 7830 ld a2,112(s0) + 800161f4: 3025 0x3025 + 800161f6: 7838 ld a4,112(s0) + 800161f8: 000a c.slli zero,0x2 + 800161fa: 0000 unimp + 800161fc: 0000 unimp + 800161fe: 0000 unimp + 80016200: 6568 ld a0,200(a0) + 80016202: 7061 c.lui zero,0xffff8 + 80016204: 655f 646e 203a 0x203a646e655f + 8001620a: 7830 ld a2,112(s0) + 8001620c: 3025 0x3025 + 8001620e: 7838 ld a4,112(s0) + 80016210: 000a c.slli zero,0x2 + 80016212: 0000 unimp + 80016214: 0000 unimp + 80016216: 0000 unimp + 80016218: 2d0a fld fs10,128(sp) + 8001621a: 6d2d lui s10,0xb + 8001621c: 6d65 lui s10,0x19 + 8001621e: 2079726f jal tp,800adc24 <__bss_end+0x829a0> + 80016222: 7469 lui s0,0xffffa + 80016224: 6d65 lui s10,0x19 + 80016226: 6920 ld s0,80(a0) + 80016228: 666e ld a2,216(sp) + 8001622a: 616d726f jal tp,800ed840 <__bss_end+0xc25bc> + 8001622e: 6974 ld a3,208(a0) + 80016230: 2d206e6f jal t3,8001c502 <__global_pointer$+0x1d62> + 80016234: 0a2d addi s4,s4,11 + 80016236: 0000 unimp + 80016238: 2578305b 0x2578305b + 8001623c: 3830 fld fa2,112(s0) + 8001623e: 2078 fld fa4,192(s0) + 80016240: 202d 0x202d + 80016242: 0000 unimp + 80016244: 0000 unimp + 80016246: 0000 unimp + 80016248: 3525 addiw a0,a0,-23 + 8001624a: 0064 addi s1,sp,12 + 8001624c: 0000 unimp + 8001624e: 0000 unimp + 80016250: 3425 addiw s0,s0,-23 + 80016252: 4b64 lw s1,84(a4) + 80016254: 0000 unimp + 80016256: 0000 unimp + 80016258: 3425 addiw s0,s0,-23 + 8001625a: 4d64 lw s1,92(a0) + 8001625c: 0000 unimp + 8001625e: 0000 unimp + 80016260: 205d 0x205d + 80016262: 6325 lui t1,0x9 + 80016264: 6325 lui t1,0x9 + 80016266: 6325 lui t1,0x9 + 80016268: 6325 lui t1,0x9 + 8001626a: 0000 unimp + 8001626c: 0000 unimp + 8001626e: 0000 unimp + 80016270: 203a fld ft0,392(sp) + 80016272: 2a2a fld fs4,136(sp) + 80016274: 0a2a slli s4,s4,0xa + 80016276: 0000 unimp + 80016278: 000a c.slli zero,0x2 + 8001627a: 0000 unimp + 8001627c: 0000 unimp + 8001627e: 0000 unimp + 80016280: 7270 ld a2,224(a2) + 80016282: 6f69 lui t5,0x1a + 80016284: 6972 ld s2,280(sp) + 80016286: 7974 ld a3,240(a0) + 80016288: 3c20 fld fs0,120(s0) + 8001628a: 5220 lw s0,96(a2) + 8001628c: 5f54 lw a3,60(a4) + 8001628e: 4854 lw a3,20(s0) + 80016290: 4552 lw a0,20(sp) + 80016292: 4441 li s0,16 + 80016294: 505f 4952 524f 0x524f4952505f + 8001629a: 5449 li s0,-14 + 8001629c: 5f59 li t5,-10 + 8001629e: 414d li sp,19 + 800162a0: 0058 addi a4,sp,4 + 800162a2: 0000 unimp + 800162a4: 0000 unimp + 800162a6: 0000 unimp + 800162a8: 6874 ld a3,208(s0) + 800162aa: 6572 ld a0,280(sp) + 800162ac: 6461 lui s0,0x18 + 800162ae: 2120 fld fs0,64(a0) + 800162b0: 203d 0x203d + 800162b2: 5452 lw s0,52(sp) + 800162b4: 4e5f 4c55 004c 0x4c4c554e5f + 800162ba: 0000 unimp + 800162bc: 0000 unimp + 800162be: 0000 unimp + 800162c0: 63617473 csrrci s0,0x636,2 + 800162c4: 74735f6b 0x74735f6b + 800162c8: 7261 lui tp,0xffff8 + 800162ca: 2074 fld fa3,192(s0) + 800162cc: 3d21 addiw s10,s10,-24 + 800162ce: 5220 lw s0,96(a2) + 800162d0: 5f54 lw a3,60(a4) + 800162d2: 554e lw a0,240(sp) + 800162d4: 4c4c lw a1,28(s0) + 800162d6: 0000 unimp + 800162d8: 7428 ld a0,104(s0) + 800162da: 7268 ld a0,224(a2) + 800162dc: 6165 addi sp,sp,112 + 800162de: 2d64 fld fs1,216(a0) + 800162e0: 733e ld t1,488(sp) + 800162e2: 6174 ld a3,192(a0) + 800162e4: 2074 fld fa3,192(s0) + 800162e6: 2026 fld ft0,72(sp) + 800162e8: 5452 lw s0,52(sp) + 800162ea: 545f 5248 4145 0x41455248545f + 800162f0: 5f44 lw s1,60(a4) + 800162f2: 54415453 0x54415453 + 800162f6: 4d5f 5341 294b 0x294b53414d5f + 800162fc: 3d20 fld fs0,120(a0) + 800162fe: 203d 0x203d + 80016300: 5452 lw s0,52(sp) + 80016302: 545f 5248 4145 0x41455248545f + 80016308: 5f44 lw s1,60(a4) + 8001630a: 4e49 li t3,18 + 8001630c: 5449 li s0,-14 + 8001630e: 0000 unimp + 80016310: 7472 ld s0,312(sp) + 80016312: 6f5f 6a62 6365 0x63656a626f5f + 80016318: 5f74 lw a3,124(a4) + 8001631a: 5f746567 0x5f746567 + 8001631e: 7974 ld a3,240(a0) + 80016320: 6570 ld a2,200(a0) + 80016322: 2828 fld fa0,80(s0) + 80016324: 7472 ld s0,312(sp) + 80016326: 6f5f 6a62 6365 0x63656a626f5f + 8001632c: 5f74 lw a3,124(a4) + 8001632e: 2974 fld fa3,208(a0) + 80016330: 6874 ld a3,208(s0) + 80016332: 6572 ld a0,280(sp) + 80016334: 6461 lui s0,0x18 + 80016336: 2029 0x2029 + 80016338: 3d3d addiw s10,s10,-17 + 8001633a: 5220 lw s0,96(a2) + 8001633c: 5f54 lw a3,60(a4) + 8001633e: 656a624f 0x656a624f + 80016342: 435f7463 bgeu t5,s5,8001676a + 80016346: 616c ld a1,192(a0) + 80016348: 545f7373 csrrci t1,0x545,30 + 8001634c: 7268 ld a0,224(a2) + 8001634e: 6165 addi sp,sp,112 + 80016350: 0064 addi s1,sp,12 + 80016352: 0000 unimp + 80016354: 0000 unimp + 80016356: 0000 unimp + 80016358: 7472 ld s0,312(sp) + 8001635a: 6f5f 6a62 6365 0x63656a626f5f + 80016360: 5f74 lw a3,124(a4) + 80016362: 7369 lui t1,0xffffa + 80016364: 735f 7379 6574 0x65747379735f + 8001636a: 6f6d lui t5,0x1b + 8001636c: 6a62 ld s4,24(sp) + 8001636e: 6365 lui t1,0x19 + 80016370: 2874 fld fa3,208(s0) + 80016372: 7228 ld a0,96(a2) + 80016374: 5f74 lw a3,124(a4) + 80016376: 656a626f jal tp,800bc9cc <__bss_end+0x91748> + 8001637a: 745f7463 bgeu t5,t0,80016ac2 + 8001637e: 7429 lui s0,0xfffea + 80016380: 7268 ld a0,224(a2) + 80016382: 6165 addi sp,sp,112 + 80016384: 2964 fld fs1,208(a0) + 80016386: 0000 unimp + 80016388: 7472 ld s0,312(sp) + 8001638a: 6f5f 6a62 6365 0x63656a626f5f + 80016390: 5f74 lw a3,124(a4) + 80016392: 7369 lui t1,0xffffa + 80016394: 735f 7379 6574 0x65747379735f + 8001639a: 6f6d lui t5,0x1b + 8001639c: 6a62 ld s4,24(sp) + 8001639e: 6365 lui t1,0x19 + 800163a0: 2874 fld fa3,208(s0) + 800163a2: 7228 ld a0,96(a2) + 800163a4: 5f74 lw a3,124(a4) + 800163a6: 656a626f jal tp,800bc9fc <__bss_end+0x91778> + 800163aa: 745f7463 bgeu t5,t0,80016af2 + 800163ae: 7429 lui s0,0xfffea + 800163b0: 7268 ld a0,224(a2) + 800163b2: 6165 addi sp,sp,112 + 800163b4: 2964 fld fs1,208(a0) + 800163b6: 3d20 fld fs0,120(a0) + 800163b8: 203d 0x203d + 800163ba: 5452 lw s0,52(sp) + 800163bc: 465f 4c41 4553 0x45534c41465f + 800163c2: 0000 unimp + 800163c4: 0000 unimp + 800163c6: 0000 unimp + 800163c8: 6974 ld a3,208(a0) + 800163ca: 21206b63 bltu zero,s2,800165e0 + 800163ce: 203d 0x203d + 800163d0: 5452 lw s0,52(sp) + 800163d2: 4e5f 4c55 004c 0x4c4c554e5f + 800163d8: 6874 ld a3,208(s0) + 800163da: 6572 ld a0,280(sp) + 800163dc: 6461 lui s0,0x18 + 800163de: 3d20 fld fs0,120(a0) + 800163e0: 203d 0x203d + 800163e2: 7472 ld s0,312(sp) + 800163e4: 745f 7268 6165 0x61657268745f + 800163ea: 5f64 lw s1,124(a4) + 800163ec: 666c6573 csrrsi a0,0x666,24 + 800163f0: 2928 fld fa0,80(a0) + 800163f2: 0000 unimp + 800163f4: 0000 unimp + 800163f6: 0000 unimp + 800163f8: 7428 ld a0,104(s0) + 800163fa: 7268 ld a0,224(a2) + 800163fc: 6165 addi sp,sp,112 + 800163fe: 2d64 fld fs1,216(a0) + 80016400: 733e ld t1,488(sp) + 80016402: 6174 ld a3,192(a0) + 80016404: 2074 fld fa3,192(s0) + 80016406: 2026 fld ft0,72(sp) + 80016408: 5452 lw s0,52(sp) + 8001640a: 545f 5248 4145 0x41455248545f + 80016410: 5f44 lw s1,60(a4) + 80016412: 54415453 0x54415453 + 80016416: 4d5f 5341 294b 0x294b53414d5f + 8001641c: 3d20 fld fs0,120(a0) + 8001641e: 203d 0x203d + 80016420: 5452 lw s0,52(sp) + 80016422: 545f 5248 4145 0x41455248545f + 80016428: 5f44 lw s1,60(a4) + 8001642a: 50535553 0x50535553 + 8001642e: 4e45 li t3,17 + 80016430: 0044 addi s1,sp,4 + 80016432: 0000 unimp + 80016434: 0000 unimp + 80016436: 0000 unimp + 80016438: 616d addi sp,sp,240 + 8001643a: 6e69 lui t3,0x1a + 8001643c: 0000 unimp + 8001643e: 0000 unimp + 80016440: 6974 ld a3,208(a0) + 80016442: 2064 fld fs1,192(s0) + 80016444: 3d21 addiw s10,s10,-24 + 80016446: 5220 lw s0,96(a2) + 80016448: 5f54 lw a3,60(a4) + 8001644a: 554e lw a0,240(sp) + 8001644c: 4c4c lw a1,28(s0) + 8001644e: 0000 unimp + 80016450: 200a fld ft0,128(sp) + 80016452: 205c fld fa5,128(s0) + 80016454: 207c fld fa5,192(s0) + 80016456: 00000a2f 0xa2f + 8001645a: 0000 unimp + 8001645c: 0000 unimp + 8001645e: 0000 unimp + 80016460: 202d 0x202d + 80016462: 5452 lw s0,52(sp) + 80016464: 2d20 fld fs0,88(a0) + 80016466: 2020 fld fs0,64(s0) + 80016468: 2020 fld fs0,64(s0) + 8001646a: 5420 lw s0,104(s0) + 8001646c: 7268 ld a0,224(a2) + 8001646e: 6165 addi sp,sp,112 + 80016470: 2064 fld fs1,192(s0) + 80016472: 7265704f fnmadd.d ft0,fa0,ft6,fa4 + 80016476: 7461 lui s0,0xffff8 + 80016478: 6e69 lui t3,0x1a + 8001647a: 79532067 0x79532067 + 8001647e: 6d657473 csrrci s0,0x6d6,10 + 80016482: 000a c.slli zero,0x2 + 80016484: 0000 unimp + 80016486: 0000 unimp + 80016488: 7541 lui a0,0xffff0 + 8001648a: 39322067 0x39322067 + 8001648e: 3220 fld fs0,96(a2) + 80016490: 3230 fld fa2,96(a2) + 80016492: 0031 c.nop 12 + 80016494: 0000 unimp + 80016496: 0000 unimp + 80016498: 2f20 fld fs0,88(a4) + 8001649a: 7c20 ld s0,120(s0) + 8001649c: 5c20 lw s0,120(s0) + 8001649e: 2020 fld fs0,64(s0) + 800164a0: 2020 fld fs0,64(s0) + 800164a2: 2520 fld fs0,72(a0) + 800164a4: 2e64 fld fs1,216(a2) + 800164a6: 6425 lui s0,0x9 + 800164a8: 252e fld fa0,200(sp) + 800164aa: 2064 fld fs1,192(s0) + 800164ac: 7562 ld a0,56(sp) + 800164ae: 6c69 lui s8,0x1a + 800164b0: 2064 fld fs1,192(s0) + 800164b2: 7325 lui t1,0xfffe9 + 800164b4: 000a c.slli zero,0x2 + 800164b6: 0000 unimp + 800164b8: 3220 fld fs0,96(a2) + 800164ba: 3030 fld fa2,96(s0) + 800164bc: 2036 fld ft0,328(sp) + 800164be: 202d 0x202d + 800164c0: 3032 fld ft0,296(sp) + 800164c2: 3132 fld ft2,296(sp) + 800164c4: 4320 lw s0,64(a4) + 800164c6: 7279706f j 800ae3ec <__bss_end+0x83168> + 800164ca: 6769 lui a4,0x1a + 800164cc: 7468 ld a0,232(s0) + 800164ce: 6220 ld s0,64(a2) + 800164d0: 2079 0x2079 + 800164d2: 7472 ld s0,312(sp) + 800164d4: 742d lui s0,0xfffeb + 800164d6: 7268 ld a0,224(a2) + 800164d8: 6165 addi sp,sp,112 + 800164da: 2064 fld fs1,192(s0) + 800164dc: 6574 ld a3,200(a0) + 800164de: 6d61 lui s10,0x18 + 800164e0: 000a c.slli zero,0x2 + 800164e2: 0000 unimp + 800164e4: 0000 unimp + 800164e6: 0000 unimp + 800164e8: 4e28 lw a0,88(a2) + 800164ea: 4c55 li s8,21 + 800164ec: 294c fld fa1,144(a0) + 800164ee: 0000 unimp + 800164f0: 2528 fld fa0,72(a0) + 800164f2: 61202973 csrr s2,0x612 + 800164f6: 72657373 csrrci t1,0x726,10 + 800164fa: 6974 ld a3,208(a0) + 800164fc: 66206e6f jal t3,8001cb5e <__global_pointer$+0x23be> + 80016500: 6961 lui s2,0x18 + 80016502: 656c ld a1,200(a0) + 80016504: 2064 fld fs1,192(s0) + 80016506: 7461 lui s0,0xffff8 + 80016508: 6620 ld s0,72(a2) + 8001650a: 6e75 lui t3,0x1d + 8001650c: 6f697463 bgeu s2,s6,80016bf4 + 80016510: 3a6e fld fs4,248(sp) + 80016512: 7325 lui t1,0xfffe9 + 80016514: 202c fld fa1,64(s0) + 80016516: 696c ld a1,208(a0) + 80016518: 656e ld a0,216(sp) + 8001651a: 6e20 ld s0,88(a2) + 8001651c: 6d75 lui s10,0x1d + 8001651e: 6562 ld a0,24(sp) + 80016520: 3a72 fld fs4,312(sp) + 80016522: 6425 lui s0,0x9 + 80016524: 0a20 addi s0,sp,280 + 80016526: 0000 unimp + 80016528: 7546 ld a0,112(sp) + 8001652a: 636e ld t1,216(sp) + 8001652c: 6974 ld a3,208(a0) + 8001652e: 255b6e6f jal t3,800ccf82 <__bss_end+0xa1cfe> + 80016532: 73205d73 csrrwi s10,0x732,0 + 80016536: 6168 ld a0,192(a0) + 80016538: 6c6c ld a1,216(s0) + 8001653a: 6e20 ld s0,88(a2) + 8001653c: 6220746f jal s0,8001db5e <__global_pointer$+0x33be> + 80016540: 2065 0x2065 + 80016542: 7375 lui t1,0xffffd + 80016544: 6465 lui s0,0x19 + 80016546: 6920 ld s0,80(a0) + 80016548: 206e fld ft0,216(sp) + 8001654a: 5349 li t1,-14 + 8001654c: 0a52 slli s4,s4,0x14 + 8001654e: 0000 unimp + 80016550: 0030 addi a2,sp,8 + 80016552: 0000 unimp + 80016554: 0000 unimp + 80016556: 0000 unimp + 80016558: 6974 ld a3,208(a0) + 8001655a: 6c64 ld s1,216(s0) + 8001655c: 2565 addiw a0,a0,25 + 8001655e: 0064 addi s1,sp,12 + 80016560: 4e55 li t3,21 + 80016562: 682d lui a6,0xb + 80016564: 6e61 lui t3,0x18 + 80016566: 6c64 ld s1,216(s0) + 80016568: 6465 lui s0,0x19 + 8001656a: 6920 ld s0,80(a0) + 8001656c: 746e ld s0,248(sp) + 8001656e: 7265 lui tp,0xffff9 + 80016570: 7572 ld a0,312(sp) + 80016572: 7470 ld a2,232(s0) + 80016574: 2520 fld fs0,72(a0) + 80016576: 2064 fld fs1,192(s0) + 80016578: 7563636f jal t1,8004ccce <__bss_end+0x21a4a> + 8001657c: 7272 ld tp,312(sp) + 8001657e: 6465 lui s0,0x19 + 80016580: 2121 addiw sp,sp,8 + 80016582: 0a21 addi s4,s4,8 + 80016584: 0000 unimp + 80016586: 0000 unimp + 80016588: 2d2d addiw s10,s10,11 + 8001658a: 2d2d addiw s10,s10,11 + 8001658c: 2d2d addiw s10,s10,11 + 8001658e: 2d2d addiw s10,s10,11 + 80016590: 2d2d addiw s10,s10,11 + 80016592: 2d2d addiw s10,s10,11 + 80016594: 2d2d addiw s10,s10,11 + 80016596: 7544 ld s1,168(a0) + 80016598: 706d c.lui zero,0xffffb + 8001659a: 5220 lw s0,96(a2) + 8001659c: 6765 lui a4,0x19 + 8001659e: 7369 lui t1,0xffffa + 800165a0: 6574 ld a3,200(a0) + 800165a2: 7372 ld t1,312(sp) + 800165a4: 2d2d addiw s10,s10,11 + 800165a6: 2d2d addiw s10,s10,11 + 800165a8: 2d2d addiw s10,s10,11 + 800165aa: 2d2d addiw s10,s10,11 + 800165ac: 2d2d addiw s10,s10,11 + 800165ae: 2d2d addiw s10,s10,11 + 800165b0: 2d2d addiw s10,s10,11 + 800165b2: 2d2d addiw s10,s10,11 + 800165b4: 0a2d addi s4,s4,11 + 800165b6: 0000 unimp + 800165b8: 7546 ld a0,112(sp) + 800165ba: 636e ld t1,216(sp) + 800165bc: 6974 ld a3,208(a0) + 800165be: 52206e6f jal t3,8001cae0 <__global_pointer$+0x2340> + 800165c2: 6765 lui a4,0x19 + 800165c4: 7369 lui t1,0xffffa + 800165c6: 6574 ld a3,200(a0) + 800165c8: 7372 ld t1,312(sp) + 800165ca: 0a3a slli s4,s4,0xe + 800165cc: 0000 unimp + 800165ce: 0000 unimp + 800165d0: 7209 lui tp,0xfffe2 + 800165d2: 2861 addiw a6,a6,24 + 800165d4: 3178 fld fa4,224(a0) + 800165d6: 2029 0x2029 + 800165d8: 203d 0x203d + 800165da: 7830 ld a2,112(s0) + 800165dc: 7025 c.lui zero,0xfffe9 + 800165de: 7509 lui a0,0xfffe2 + 800165e0: 5f726573 csrrsi a0,0x5f7,4 + 800165e4: 3d207073 csrci 0x3d2,0 + 800165e8: 3020 fld fs0,96(s0) + 800165ea: 2578 fld fa4,200(a0) + 800165ec: 0a70 addi a2,sp,284 + 800165ee: 0000 unimp + 800165f0: 6709 lui a4,0x2 + 800165f2: 2870 fld fa2,208(s0) + 800165f4: 3378 fld fa4,224(a4) + 800165f6: 2029 0x2029 + 800165f8: 203d 0x203d + 800165fa: 7830 ld a2,112(s0) + 800165fc: 7025 c.lui zero,0xfffe9 + 800165fe: 7409 lui s0,0xfffe2 + 80016600: 2870 fld fa2,208(s0) + 80016602: 3478 fld fa4,232(s0) + 80016604: 2029 0x2029 + 80016606: 203d 0x203d + 80016608: 7830 ld a2,112(s0) + 8001660a: 7025 c.lui zero,0xfffe9 + 8001660c: 000a c.slli zero,0x2 + 8001660e: 0000 unimp + 80016610: 6554 ld a3,136(a0) + 80016612: 706d c.lui zero,0xffffb + 80016614: 7261726f jal tp,8002dd3a <__bss_end+0x2ab6> + 80016618: 2079 0x2079 + 8001661a: 6552 ld a0,272(sp) + 8001661c: 74736967 0x74736967 + 80016620: 7265 lui tp,0xffff9 + 80016622: 000a3a73 csrrc s4,ustatus,s4 + 80016626: 0000 unimp + 80016628: 7409 lui s0,0xfffe2 + 8001662a: 2830 fld fa2,80(s0) + 8001662c: 3578 fld fa4,232(a0) + 8001662e: 2029 0x2029 + 80016630: 203d 0x203d + 80016632: 7830 ld a2,112(s0) + 80016634: 7025 c.lui zero,0xfffe9 + 80016636: 7409 lui s0,0xfffe2 + 80016638: 2831 addiw a6,a6,12 + 8001663a: 3678 fld fa4,232(a2) + 8001663c: 2029 0x2029 + 8001663e: 203d 0x203d + 80016640: 7830 ld a2,112(s0) + 80016642: 7025 c.lui zero,0xfffe9 + 80016644: 000a c.slli zero,0x2 + 80016646: 0000 unimp + 80016648: 7409 lui s0,0xfffe2 + 8001664a: 2832 fld fa6,264(sp) + 8001664c: 3778 fld fa4,232(a4) + 8001664e: 2029 0x2029 + 80016650: 203d 0x203d + 80016652: 7830 ld a2,112(s0) + 80016654: 7025 c.lui zero,0xfffe9 + 80016656: 000a c.slli zero,0x2 + 80016658: 7409 lui s0,0xfffe2 + 8001665a: 32782833 0x32782833 + 8001665e: 2938 fld fa4,80(a0) + 80016660: 3d20 fld fs0,120(a0) + 80016662: 3020 fld fs0,96(s0) + 80016664: 2578 fld fa4,200(a0) + 80016666: 0970 addi a2,sp,156 + 80016668: 3474 fld fa3,232(s0) + 8001666a: 7828 ld a0,112(s0) + 8001666c: 3932 fld fs2,296(sp) + 8001666e: 2029 0x2029 + 80016670: 203d 0x203d + 80016672: 7830 ld a2,112(s0) + 80016674: 7025 c.lui zero,0xfffe9 + 80016676: 000a c.slli zero,0x2 + 80016678: 7409 lui s0,0xfffe2 + 8001667a: 2835 addiw a6,a6,13 + 8001667c: 3378 fld fa4,224(a4) + 8001667e: 2930 fld fa2,80(a0) + 80016680: 3d20 fld fs0,120(a0) + 80016682: 3020 fld fs0,96(s0) + 80016684: 2578 fld fa4,200(a0) + 80016686: 0970 addi a2,sp,156 + 80016688: 3674 fld fa3,232(a2) + 8001668a: 7828 ld a0,112(s0) + 8001668c: 20293133 0x20293133 + 80016690: 203d 0x203d + 80016692: 7830 ld a2,112(s0) + 80016694: 7025 c.lui zero,0xfffe9 + 80016696: 000a c.slli zero,0x2 + 80016698: 65766153 0x65766153 + 8001669c: 2064 fld fs1,192(s0) + 8001669e: 6552 ld a0,272(sp) + 800166a0: 74736967 0x74736967 + 800166a4: 7265 lui tp,0xffff9 + 800166a6: 000a3a73 csrrc s4,ustatus,s4 + 800166aa: 0000 unimp + 800166ac: 0000 unimp + 800166ae: 0000 unimp + 800166b0: 7309 lui t1,0xfffe2 + 800166b2: 2f30 fld fa2,88(a4) + 800166b4: 7066 0x7066 + 800166b6: 7828 ld a0,112(s0) + 800166b8: 2938 fld fa4,80(a0) + 800166ba: 3d20 fld fs0,120(a0) + 800166bc: 3020 fld fs0,96(s0) + 800166be: 2578 fld fa4,200(a0) + 800166c0: 0970 addi a2,sp,156 + 800166c2: 78283173 csrrc sp,0x782,a6 + 800166c6: 2939 addiw s2,s2,14 + 800166c8: 3d20 fld fs0,120(a0) + 800166ca: 3020 fld fs0,96(s0) + 800166cc: 2578 fld fa4,200(a0) + 800166ce: 0a70 addi a2,sp,284 + ... + 800166d8: 7309 lui t1,0xfffe2 + 800166da: 2832 fld fa6,264(sp) + 800166dc: 3178 fld fa4,224(a0) + 800166de: 2938 fld fa4,80(a0) + 800166e0: 3d20 fld fs0,120(a0) + 800166e2: 3020 fld fs0,96(s0) + 800166e4: 2578 fld fa4,200(a0) + 800166e6: 0970 addi a2,sp,156 + 800166e8: 78283373 csrrc t1,0x782,a6 + 800166ec: 3931 addiw s2,s2,-20 + 800166ee: 2029 0x2029 + 800166f0: 203d 0x203d + 800166f2: 7830 ld a2,112(s0) + 800166f4: 7025 c.lui zero,0xfffe9 + 800166f6: 000a c.slli zero,0x2 + 800166f8: 7309 lui t1,0xfffe2 + 800166fa: 2834 fld fa3,80(s0) + 800166fc: 3278 fld fa4,224(a2) + 800166fe: 2930 fld fa2,80(a0) + 80016700: 3d20 fld fs0,120(a0) + 80016702: 3020 fld fs0,96(s0) + 80016704: 2578 fld fa4,200(a0) + 80016706: 0970 addi a2,sp,156 + 80016708: 78283573 csrrc a0,0x782,a6 + 8001670c: 3132 fld ft2,296(sp) + 8001670e: 2029 0x2029 + 80016710: 203d 0x203d + 80016712: 7830 ld a2,112(s0) + 80016714: 7025 c.lui zero,0xfffe9 + 80016716: 000a c.slli zero,0x2 + 80016718: 7309 lui t1,0xfffe2 + 8001671a: 2836 fld fa6,328(sp) + 8001671c: 3278 fld fa4,224(a2) + 8001671e: 2932 fld fs2,264(sp) + 80016720: 3d20 fld fs0,120(a0) + 80016722: 3020 fld fs0,96(s0) + 80016724: 2578 fld fa4,200(a0) + 80016726: 0970 addi a2,sp,156 + 80016728: 78283773 csrrc a4,0x782,a6 + 8001672c: 3332 fld ft6,296(sp) + 8001672e: 2029 0x2029 + 80016730: 203d 0x203d + 80016732: 7830 ld a2,112(s0) + 80016734: 7025 c.lui zero,0xfffe9 + 80016736: 000a c.slli zero,0x2 + 80016738: 7309 lui t1,0xfffe2 + 8001673a: 2838 fld fa4,80(s0) + 8001673c: 3278 fld fa4,224(a2) + 8001673e: 2934 fld fa3,80(a0) + 80016740: 3d20 fld fs0,120(a0) + 80016742: 3020 fld fs0,96(s0) + 80016744: 2578 fld fa4,200(a0) + 80016746: 0970 addi a2,sp,156 + 80016748: 78283973 csrrc s2,0x782,a6 + 8001674c: 3532 fld fa0,296(sp) + 8001674e: 2029 0x2029 + 80016750: 203d 0x203d + 80016752: 7830 ld a2,112(s0) + 80016754: 7025 c.lui zero,0xfffe9 + 80016756: 000a c.slli zero,0x2 + 80016758: 7309 lui t1,0xfffe2 + 8001675a: 3031 0x3031 + 8001675c: 7828 ld a0,112(s0) + 8001675e: 3632 fld fa2,296(sp) + 80016760: 2029 0x2029 + 80016762: 203d 0x203d + 80016764: 7830 ld a2,112(s0) + 80016766: 7025 c.lui zero,0xfffe9 + 80016768: 7309 lui t1,0xfffe2 + 8001676a: 3131 addiw sp,sp,-20 + 8001676c: 7828 ld a0,112(s0) + 8001676e: 3732 fld fa4,296(sp) + 80016770: 2029 0x2029 + 80016772: 203d 0x203d + 80016774: 7830 ld a2,112(s0) + 80016776: 7025 c.lui zero,0xfffe9 + 80016778: 000a c.slli zero,0x2 + 8001677a: 0000 unimp + 8001677c: 0000 unimp + 8001677e: 0000 unimp + 80016780: 7546 ld a0,112(sp) + 80016782: 636e ld t1,216(sp) + 80016784: 6974 ld a3,208(a0) + 80016786: 41206e6f jal t3,8001cb98 <__global_pointer$+0x23f8> + 8001678a: 6772 ld a4,280(sp) + 8001678c: 6d75 lui s10,0x1d + 8001678e: 6e65 lui t3,0x19 + 80016790: 7374 ld a3,224(a4) + 80016792: 5220 lw s0,96(a2) + 80016794: 6765 lui a4,0x19 + 80016796: 7369 lui t1,0xffffa + 80016798: 6574 ld a3,200(a0) + 8001679a: 7372 ld t1,312(sp) + 8001679c: 0a3a slli s4,s4,0xe + 8001679e: 0000 unimp + 800167a0: 6109 addi sp,sp,128 + 800167a2: 2830 fld fa2,80(s0) + 800167a4: 3178 fld fa4,224(a0) + 800167a6: 2930 fld fa2,80(a0) + 800167a8: 3d20 fld fs0,120(a0) + 800167aa: 3020 fld fs0,96(s0) + 800167ac: 2578 fld fa4,200(a0) + 800167ae: 0970 addi a2,sp,156 + 800167b0: 3161 addiw sp,sp,-8 + 800167b2: 7828 ld a0,112(s0) + 800167b4: 3131 addiw sp,sp,-20 + 800167b6: 2029 0x2029 + 800167b8: 203d 0x203d + 800167ba: 7830 ld a2,112(s0) + 800167bc: 7025 c.lui zero,0xfffe9 + 800167be: 000a c.slli zero,0x2 + 800167c0: 6109 addi sp,sp,128 + 800167c2: 2832 fld fa6,264(sp) + 800167c4: 3178 fld fa4,224(a0) + 800167c6: 2932 fld fs2,264(sp) + 800167c8: 3d20 fld fs0,120(a0) + 800167ca: 3020 fld fs0,96(s0) + 800167cc: 2578 fld fa4,200(a0) + 800167ce: 0970 addi a2,sp,156 + 800167d0: 3361 addiw t1,t1,-8 + 800167d2: 7828 ld a0,112(s0) + 800167d4: 3331 addiw t1,t1,-20 + 800167d6: 2029 0x2029 + 800167d8: 203d 0x203d + 800167da: 7830 ld a2,112(s0) + 800167dc: 7025 c.lui zero,0xfffe9 + 800167de: 000a c.slli zero,0x2 + 800167e0: 6109 addi sp,sp,128 + 800167e2: 2834 fld fa3,80(s0) + 800167e4: 3178 fld fa4,224(a0) + 800167e6: 2934 fld fa3,80(a0) + 800167e8: 3d20 fld fs0,120(a0) + 800167ea: 3020 fld fs0,96(s0) + 800167ec: 2578 fld fa4,200(a0) + 800167ee: 0970 addi a2,sp,156 + 800167f0: 3561 addiw a0,a0,-8 + 800167f2: 7828 ld a0,112(s0) + 800167f4: 3531 addiw a0,a0,-20 + 800167f6: 2029 0x2029 + 800167f8: 203d 0x203d + 800167fa: 7830 ld a2,112(s0) + 800167fc: 7025 c.lui zero,0xfffe9 + 800167fe: 000a c.slli zero,0x2 + 80016800: 6109 addi sp,sp,128 + 80016802: 2836 fld fa6,328(sp) + 80016804: 3178 fld fa4,224(a0) + 80016806: 2936 fld fs2,328(sp) + 80016808: 3d20 fld fs0,120(a0) + 8001680a: 3020 fld fs0,96(s0) + 8001680c: 2578 fld fa4,200(a0) + 8001680e: 0970 addi a2,sp,156 + 80016810: 3761 addiw a4,a4,-8 + 80016812: 7828 ld a0,112(s0) + 80016814: 3731 addiw a4,a4,-20 + 80016816: 2029 0x2029 + 80016818: 203d 0x203d + 8001681a: 7830 ld a2,112(s0) + 8001681c: 7025 c.lui zero,0xfffe9 + 8001681e: 000a c.slli zero,0x2 + 80016820: 7378 ld a4,224(a4) + 80016822: 6174 ld a3,192(a0) + 80016824: 7574 ld a3,232(a0) + 80016826: 203d2073 csrs hideleg,s10 + 8001682a: 7830 ld a2,112(s0) + 8001682c: 7025 c.lui zero,0xfffe9 + 8001682e: 000a c.slli zero,0x2 + 80016830: 65707553 0x65707553 + 80016834: 7672 ld a2,312(sp) + 80016836: 7369 lui t1,0xffffa + 80016838: 4920726f jal tp,8001dcca <__global_pointer$+0x352a> + 8001683c: 746e ld s0,248(sp) + 8001683e: 7265 lui tp,0xffff9 + 80016840: 7572 ld a0,312(sp) + 80016842: 7470 ld a2,232(s0) + 80016844: 4520 lw s0,72(a0) + 80016846: 616e ld sp,216(sp) + 80016848: 6c62 ld s8,24(sp) + 8001684a: 6465 lui s0,0x19 + 8001684c: 0000 unimp + 8001684e: 0000 unimp + 80016850: 65707553 0x65707553 + 80016854: 7672 ld a2,312(sp) + 80016856: 7369 lui t1,0xffffa + 80016858: 4920726f jal tp,8001dcea <__global_pointer$+0x354a> + 8001685c: 746e ld s0,248(sp) + 8001685e: 7265 lui tp,0xffff9 + 80016860: 7572 ld a0,312(sp) + 80016862: 7470 ld a2,232(s0) + 80016864: 4420 lw s0,72(s0) + 80016866: 7369 lui t1,0xffffa + 80016868: 6261 lui tp,0x18 + 8001686a: 656c ld a1,200(a0) + 8001686c: 0064 addi s1,sp,12 + 8001686e: 0000 unimp + 80016870: 2509 addiw a0,a0,2 + 80016872: 00000a73 0xa73 + 80016876: 0000 unimp + 80016878: 614c ld a1,128(a0) + 8001687a: 54207473 csrrci s0,0x542,0 + 8001687e: 6d69 lui s10,0x1a + 80016880: 2065 0x2065 + 80016882: 65707553 0x65707553 + 80016886: 7672 ld a2,312(sp) + 80016888: 7369 lui t1,0xffffa + 8001688a: 4920726f jal tp,8001dd1c <__global_pointer$+0x357c> + 8001688e: 746e ld s0,248(sp) + 80016890: 7265 lui tp,0xffff9 + 80016892: 7572 ld a0,312(sp) + 80016894: 7470 ld a2,232(s0) + 80016896: 4520 lw s0,72(a0) + 80016898: 616e ld sp,216(sp) + 8001689a: 6c62 ld s8,24(sp) + 8001689c: 6465 lui s0,0x19 + 8001689e: 0000 unimp + 800168a0: 614c ld a1,128(a0) + 800168a2: 54207473 csrrci s0,0x542,0 + 800168a6: 6d69 lui s10,0x1a + 800168a8: 2065 0x2065 + 800168aa: 65707553 0x65707553 + 800168ae: 7672 ld a2,312(sp) + 800168b0: 7369 lui t1,0xffffa + 800168b2: 4920726f jal tp,8001dd44 <__global_pointer$+0x35a4> + 800168b6: 746e ld s0,248(sp) + 800168b8: 7265 lui tp,0xffff9 + 800168ba: 7572 ld a0,312(sp) + 800168bc: 7470 ld a2,232(s0) + 800168be: 4420 lw s0,72(s0) + 800168c0: 7369 lui t1,0xffffa + 800168c2: 6261 lui tp,0x18 + 800168c4: 656c ld a1,200(a0) + 800168c6: 0064 addi s1,sp,12 + 800168c8: 614c ld a1,128(a0) + 800168ca: 50207473 csrrci s0,0x502,0 + 800168ce: 6972 ld s2,280(sp) + 800168d0: 6976 ld s2,344(sp) + 800168d2: 656c ld a1,200(a0) + 800168d4: 69206567 0x69206567 + 800168d8: 75532073 csrs 0x755,t1 + 800168dc: 6570 ld a2,200(a0) + 800168de: 7672 ld a2,312(sp) + 800168e0: 7369 lui t1,0xffffa + 800168e2: 4d20726f jal tp,8001ddb4 <__global_pointer$+0x3614> + 800168e6: 0065646f jal s0,8006c8ec <__bss_end+0x41668> + 800168ea: 0000 unimp + 800168ec: 0000 unimp + 800168ee: 0000 unimp + 800168f0: 614c ld a1,128(a0) + 800168f2: 50207473 csrrci s0,0x502,0 + 800168f6: 6972 ld s2,280(sp) + 800168f8: 6976 ld s2,344(sp) + 800168fa: 656c ld a1,200(a0) + 800168fc: 69206567 0x69206567 + 80016900: 73552073 csrs 0x735,a0 + 80016904: 7265 lui tp,0xffff9 + 80016906: 4d20 lw s0,88(a0) + 80016908: 0065646f jal s0,8006c90e <__bss_end+0x4168a> + 8001690c: 0000 unimp + 8001690e: 0000 unimp + 80016910: 6550 ld a2,136(a0) + 80016912: 6d72 ld s10,280(sp) + 80016914: 7469 lui s0,0xffffa + 80016916: 7420 ld s0,104(s0) + 80016918: 6341206f j 80028f4c + 8001691c: 73736563 bltu t1,s7,80017046 + 80016920: 5520 lw s0,104(a0) + 80016922: 20726573 csrrsi a0,0x207,4 + 80016926: 6150 ld a2,128(a0) + 80016928: 00006567 0x6567 + 8001692c: 0000 unimp + 8001692e: 0000 unimp + 80016930: 6f4e ld t5,208(sp) + 80016932: 2074 fld fa3,192(s0) + 80016934: 6550 ld a2,136(a0) + 80016936: 6d72 ld s10,280(sp) + 80016938: 7469 lui s0,0xffffa + 8001693a: 7420 ld s0,104(s0) + 8001693c: 6341206f j 80028f70 + 80016940: 73736563 bltu t1,s7,8001706a + 80016944: 5520 lw s0,104(a0) + 80016946: 20726573 csrrsi a0,0x207,4 + 8001694a: 6150 ld a2,128(a0) + 8001694c: 00006567 0x6567 + 80016950: 6550 ld a2,136(a0) + 80016952: 6d72 ld s10,280(sp) + 80016954: 7469 lui s0,0xffffa + 80016956: 7420 ld s0,104(s0) + 80016958: 6552206f j 800397ac <__bss_end+0xe528> + 8001695c: 6461 lui s0,0x18 + 8001695e: 4520 lw s0,72(a0) + 80016960: 6578 ld a4,200(a0) + 80016962: 61747563 bgeu s0,s7,80016f6c + 80016966: 6c62 ld s8,24(sp) + 80016968: 2d65 addiw s10,s10,25 + 8001696a: 796c6e6f jal t3,800dd100 <__bss_end+0xb1e7c> + 8001696e: 5020 lw s0,96(s0) + 80016970: 6761 lui a4,0x18 + 80016972: 0065 c.nop 25 + 80016974: 0000 unimp + 80016976: 0000 unimp + 80016978: 6f4e ld t5,208(sp) + 8001697a: 2074 fld fa3,192(s0) + 8001697c: 6550 ld a2,136(a0) + 8001697e: 6d72 ld s10,280(sp) + 80016980: 7469 lui s0,0xffffa + 80016982: 7420 ld s0,104(s0) + 80016984: 6552206f j 800397d8 <__bss_end+0xe554> + 80016988: 6461 lui s0,0x18 + 8001698a: 4520 lw s0,72(a0) + 8001698c: 6578 ld a4,200(a0) + 8001698e: 61747563 bgeu s0,s7,80016f98 + 80016992: 6c62 ld s8,24(sp) + 80016994: 2d65 addiw s10,s10,25 + 80016996: 796c6e6f jal t3,800dd12c <__bss_end+0xb1ea8> + 8001699a: 5020 lw s0,96(s0) + 8001699c: 6761 lui a4,0x18 + 8001699e: 0065 c.nop 25 + 800169a0: 70746173 csrrsi sp,0x707,8 + 800169a4: 3d20 fld fs0,120(a0) + 800169a6: 3020 fld fs0,96(s0) + 800169a8: 2578 fld fa4,200(a0) + 800169aa: 0a70 addi a2,sp,284 + 800169ac: 0000 unimp + 800169ae: 0000 unimp + 800169b0: 6e55 lui t3,0x15 + 800169b2: 776f6e6b 0x776f6e6b + 800169b6: 206e fld ft0,216(sp) + 800169b8: 6441 lui s0,0x10 + 800169ba: 7264 ld s1,224(a2) + 800169bc: 7365 lui t1,0xffff9 + 800169be: 72542073 csrs 0x725,s0 + 800169c2: 6e61 lui t3,0x18 + 800169c4: 74616c73 csrrsi s8,0x746,2 + 800169c8: 6f69 lui t5,0x1a + 800169ca: 2f6e fld ft10,216(sp) + 800169cc: 7250 ld a2,160(a2) + 800169ce: 6365746f jal s0,8006e004 <__bss_end+0x42d80> + 800169d2: 6974 ld a3,208(a0) + 800169d4: 4d206e6f jal t3,8001cea6 <__global_pointer$+0x2706> + 800169d8: 0065646f jal s0,8006c9de <__bss_end+0x4175a> + 800169dc: 0000 unimp + 800169de: 0000 unimp + 800169e0: 6f4e ld t5,208(sp) + 800169e2: 4120 lw s0,64(a0) + 800169e4: 6464 ld s1,200(s0) + 800169e6: 6572 ld a0,280(sp) + 800169e8: 54207373 csrrci t1,0x542,0 + 800169ec: 6172 ld sp,280(sp) + 800169ee: 736e ld t1,248(sp) + 800169f0: 616c ld a1,192(a0) + 800169f2: 6974 ld a3,208(a0) + 800169f4: 502f6e6f jal t3,8010cef6 <__bss_end+0xe1c72> + 800169f8: 6f72 ld t5,280(sp) + 800169fa: 6574 ld a3,200(a0) + 800169fc: 6f697463 bgeu s2,s6,800170e4 + 80016a00: 206e fld ft0,216(sp) + 80016a02: 6f4d lui t5,0x13 + 80016a04: 6564 ld s1,200(a0) + 80016a06: 0000 unimp + 80016a08: 6150 ld a2,128(a0) + 80016a0a: 622d6567 0x622d6567 + 80016a0e: 7361 lui t1,0xffff8 + 80016a10: 6465 lui s0,0x19 + 80016a12: 3320 fld fs0,96(a4) + 80016a14: 2d39 addiw s10,s10,14 + 80016a16: 6962 ld s2,24(sp) + 80016a18: 2074 fld fa3,192(s0) + 80016a1a: 6956 ld s2,336(sp) + 80016a1c: 7472 ld s0,312(sp) + 80016a1e: 6175 addi sp,sp,368 + 80016a20: 206c fld fa1,192(s0) + 80016a22: 6441 lui s0,0x10 + 80016a24: 7264 ld s1,224(a2) + 80016a26: 7365 lui t1,0xffff9 + 80016a28: 676e6973 csrrsi s2,0x676,28 + 80016a2c: 4d20 lw s0,88(a0) + 80016a2e: 0065646f jal s0,8006ca34 <__bss_end+0x417b0> + 80016a32: 0000 unimp + 80016a34: 0000 unimp + 80016a36: 0000 unimp + 80016a38: 6150 ld a2,128(a0) + 80016a3a: 622d6567 0x622d6567 + 80016a3e: 7361 lui t1,0xffff8 + 80016a40: 6465 lui s0,0x19 + 80016a42: 3420 fld fs0,104(s0) + 80016a44: 2d38 fld fa4,88(a0) + 80016a46: 6962 ld s2,24(sp) + 80016a48: 2074 fld fa3,192(s0) + 80016a4a: 6956 ld s2,336(sp) + 80016a4c: 7472 ld s0,312(sp) + 80016a4e: 6175 addi sp,sp,368 + 80016a50: 206c fld fa1,192(s0) + 80016a52: 6441 lui s0,0x10 + 80016a54: 7264 ld s1,224(a2) + 80016a56: 7365 lui t1,0xffff9 + 80016a58: 676e6973 csrrsi s2,0x676,28 + 80016a5c: 4d20 lw s0,88(a0) + 80016a5e: 0065646f jal s0,8006ca64 <__bss_end+0x417e0> + 80016a62: 0000 unimp + 80016a64: 0000 unimp + 80016a66: 0000 unimp + 80016a68: 4d09 li s10,2 + 80016a6a: 2065646f jal s0,8006cc70 <__bss_end+0x419ec> + 80016a6e: 203d 0x203d + 80016a70: 7325 lui t1,0xfffe9 + 80016a72: 000a c.slli zero,0x2 + 80016a74: 0000 unimp + 80016a76: 0000 unimp + 80016a78: 2d2d addiw s10,s10,11 + 80016a7a: 2d2d addiw s10,s10,11 + 80016a7c: 2d2d addiw s10,s10,11 + 80016a7e: 2d2d addiw s10,s10,11 + 80016a80: 2d2d addiw s10,s10,11 + 80016a82: 2d2d addiw s10,s10,11 + 80016a84: 2d2d addiw s10,s10,11 + 80016a86: 2d2d addiw s10,s10,11 + 80016a88: 442d li s0,11 + 80016a8a: 6d75 lui s10,0x1d + 80016a8c: 2070 fld fa2,192(s0) + 80016a8e: 2d2d4b4f 0x2d2d4b4f + 80016a92: 2d2d addiw s10,s10,11 + 80016a94: 2d2d addiw s10,s10,11 + 80016a96: 2d2d addiw s10,s10,11 + 80016a98: 2d2d addiw s10,s10,11 + 80016a9a: 2d2d addiw s10,s10,11 + 80016a9c: 2d2d addiw s10,s10,11 + 80016a9e: 2d2d addiw s10,s10,11 + 80016aa0: 2d2d addiw s10,s10,11 + 80016aa2: 2d2d addiw s10,s10,11 + 80016aa4: 0a2d addi s4,s4,11 + 80016aa6: 0000 unimp + 80016aa8: 6378 ld a4,192(a4) + 80016aaa: 7561 lui a0,0xffff8 + 80016aac: 3d206573 csrrsi a0,0x3d2,0 + 80016ab0: 2520 fld fs0,72(a0) + 80016ab2: 3830 fld fa2,112(s0) + 80016ab4: 2c78 fld fa4,216(s0) + 80016ab6: 7478 ld a4,232(s0) + 80016ab8: 6176 ld sp,344(sp) + 80016aba: 206c fld fa1,192(s0) + 80016abc: 203d 0x203d + 80016abe: 3025 0x3025 + 80016ac0: 7838 ld a4,112(s0) + 80016ac2: 782c ld a1,112(s0) + 80016ac4: 7065 c.lui zero,0xffff9 + 80016ac6: 203d2063 0x203d2063 + 80016aca: 3025 0x3025 + 80016acc: 7838 ld a4,112(s0) + 80016ace: 000a c.slli zero,0x2 + 80016ad0: 450a lw a0,128(sp) + 80016ad2: 6378 ld a4,192(a4) + 80016ad4: 7065 c.lui zero,0xffff9 + 80016ad6: 6974 ld a3,208(a0) + 80016ad8: 0a3a6e6f jal t3,800bd37a <__bss_end+0x920f6> + 80016adc: 0000 unimp + 80016ade: 0000 unimp + 80016ae0: 6e49 lui t3,0x12 + 80016ae2: 75727473 csrrci s0,0x757,4 + 80016ae6: 6f697463 bgeu s2,s6,800171ce + 80016aea: 206e fld ft0,216(sp) + 80016aec: 6461 lui s0,0x18 + 80016aee: 7264 ld s1,224(a2) + 80016af0: 7365 lui t1,0xffff9 + 80016af2: 696d2073 csrs 0x696,s10 + 80016af6: 696c6173 csrrsi sp,0x696,24 + 80016afa: 64656e67 0x64656e67 + 80016afe: 0000 unimp + 80016b00: 6e49 lui t3,0x12 + 80016b02: 75727473 csrrci s0,0x757,4 + 80016b06: 6f697463 bgeu s2,s6,800171ee + 80016b0a: 206e fld ft0,216(sp) + 80016b0c: 6361 lui t1,0x18 + 80016b0e: 73736563 bltu t1,s7,80017238 + 80016b12: 6620 ld s0,72(a2) + 80016b14: 7561 lui a0,0xffff8 + 80016b16: 746c ld a1,232(s0) + ... + 80016b20: 6c49 lui s8,0x12 + 80016b22: 656c ld a1,200(a0) + 80016b24: 206c6167 0x206c6167 + 80016b28: 6e69 lui t3,0x1a + 80016b2a: 75727473 csrrci s0,0x757,4 + 80016b2e: 6f697463 bgeu s2,s6,80017216 + 80016b32: 006e c.slli zero,0x1b + 80016b34: 0000 unimp + 80016b36: 0000 unimp + 80016b38: 7242 ld tp,48(sp) + 80016b3a: 6165 addi sp,sp,112 + 80016b3c: 696f706b 0x696f706b + 80016b40: 746e ld s0,248(sp) + 80016b42: 0000 unimp + 80016b44: 0000 unimp + 80016b46: 0000 unimp + 80016b48: 6f4c ld a1,152(a4) + 80016b4a: 6461 lui s0,0x18 + 80016b4c: 6120 ld s0,64(a0) + 80016b4e: 6464 ld s1,200(s0) + 80016b50: 6572 ld a0,280(sp) + 80016b52: 6d207373 csrrci t1,0x6d2,0 + 80016b56: 7369 lui t1,0xffffa + 80016b58: 6c61 lui s8,0x18 + 80016b5a: 6769 lui a4,0x1a + 80016b5c: 656e ld a0,216(sp) + 80016b5e: 0064 addi s1,sp,12 + 80016b60: 6f4c ld a1,152(a4) + 80016b62: 6461 lui s0,0x18 + 80016b64: 6120 ld s0,64(a0) + 80016b66: 73656363 bltu a0,s6,8001728c + 80016b6a: 61662073 csrs 0x616,a2 + 80016b6e: 6c75 lui s8,0x1d + 80016b70: 0074 addi a3,sp,12 + 80016b72: 0000 unimp + 80016b74: 0000 unimp + 80016b76: 0000 unimp + 80016b78: 726f7453 0x726f7453 + 80016b7c: 2065 0x2065 + 80016b7e: 6461 lui s0,0x18 + 80016b80: 7264 ld s1,224(a2) + 80016b82: 7365 lui t1,0xffff9 + 80016b84: 696d2073 csrs 0x696,s10 + 80016b88: 696c6173 csrrsi sp,0x696,24 + 80016b8c: 64656e67 0x64656e67 + ... + 80016b98: 726f7453 0x726f7453 + 80016b9c: 2065 0x2065 + 80016b9e: 6361 lui t1,0x18 + 80016ba0: 73736563 bltu t1,s7,800172ca + 80016ba4: 6620 ld s0,72(a2) + 80016ba6: 7561 lui a0,0xffff8 + 80016ba8: 746c ld a1,232(s0) + 80016baa: 0000 unimp + 80016bac: 0000 unimp + 80016bae: 0000 unimp + 80016bb0: 6e45 lui t3,0x11 + 80016bb2: 6976 ld s2,344(sp) + 80016bb4: 6f72 ld t5,280(sp) + 80016bb6: 6d6e ld s10,216(sp) + 80016bb8: 6e65 lui t3,0x19 + 80016bba: 2074 fld fa3,192(s0) + 80016bbc: 6c6c6163 bltu s8,t1,8001727e + 80016bc0: 6620 ld s0,72(a2) + 80016bc2: 6f72 ld t5,280(sp) + 80016bc4: 206d 0x206d + 80016bc6: 2d55 addiw s10,s10,21 + 80016bc8: 6f6d lui t5,0x1b + 80016bca: 6564 ld s1,200(a0) + 80016bcc: 0000 unimp + 80016bce: 0000 unimp + 80016bd0: 6e45 lui t3,0x11 + 80016bd2: 6976 ld s2,344(sp) + 80016bd4: 6f72 ld t5,280(sp) + 80016bd6: 6d6e ld s10,216(sp) + 80016bd8: 6e65 lui t3,0x19 + 80016bda: 2074 fld fa3,192(s0) + 80016bdc: 6c6c6163 bltu s8,t1,8001729e + 80016be0: 6620 ld s0,72(a2) + 80016be2: 6f72 ld t5,280(sp) + 80016be4: 206d 0x206d + 80016be6: 6f6d2d53 0x6f6d2d53 + 80016bea: 6564 ld s1,200(a0) + 80016bec: 0000 unimp + 80016bee: 0000 unimp + 80016bf0: 6e45 lui t3,0x11 + 80016bf2: 6976 ld s2,344(sp) + 80016bf4: 6f72 ld t5,280(sp) + 80016bf6: 6d6e ld s10,216(sp) + 80016bf8: 6e65 lui t3,0x19 + 80016bfa: 2074 fld fa3,192(s0) + 80016bfc: 6c6c6163 bltu s8,t1,800172be + 80016c00: 6620 ld s0,72(a2) + 80016c02: 6f72 ld t5,280(sp) + 80016c04: 206d 0x206d + 80016c06: 2d48 fld fa0,152(a0) + 80016c08: 6f6d lui t5,0x1b + 80016c0a: 6564 ld s1,200(a0) + 80016c0c: 0000 unimp + 80016c0e: 0000 unimp + 80016c10: 6e45 lui t3,0x11 + 80016c12: 6976 ld s2,344(sp) + 80016c14: 6f72 ld t5,280(sp) + 80016c16: 6d6e ld s10,216(sp) + 80016c18: 6e65 lui t3,0x19 + 80016c1a: 2074 fld fa3,192(s0) + 80016c1c: 6c6c6163 bltu s8,t1,800172de + 80016c20: 6620 ld s0,72(a2) + 80016c22: 6f72 ld t5,280(sp) + 80016c24: 206d 0x206d + 80016c26: 2d4d addiw s10,s10,19 + 80016c28: 6f6d lui t5,0x1b + 80016c2a: 6564 ld s1,200(a0) + 80016c2c: 0000 unimp + 80016c2e: 0000 unimp + 80016c30: 6b55 lui s6,0x15 + 80016c32: 6f6e ld t5,216(sp) + 80016c34: 65206e77 0x65206e77 + 80016c38: 6378 ld a4,192(a4) + 80016c3a: 7065 c.lui zero,0xffff9 + 80016c3c: 6974 ld a3,208(a0) + 80016c3e: 3a206e6f jal t3,8001cfe0 <__global_pointer$+0x2840> + 80016c42: 2520 fld fs0,72(a0) + 80016c44: 3830 fld fa2,112(s0) + 80016c46: 586c lw a1,116(s0) + ... + 80016c50: 000a c.slli zero,0x2 + 80016c52: 0000 unimp + 80016c54: 0000 unimp + 80016c56: 0000 unimp + 80016c58: 7865 lui a6,0xffff9 + 80016c5a: 74706563 bltu zero,t2,800173a4 + 80016c5e: 6f69 lui t5,0x1a + 80016c60: 206e fld ft0,216(sp) + 80016c62: 6370 ld a2,192(a4) + 80016c64: 3d20 fld fs0,120(a0) + 80016c66: 203e fld ft0,456(sp) + 80016c68: 7830 ld a2,112(s0) + 80016c6a: 3025 0x3025 + 80016c6c: 7838 ld a4,112(s0) + 80016c6e: 000a c.slli zero,0x2 + 80016c70: 72727563 bgeu tp,t2,8001739a + 80016c74: 6e65 lui t3,0x19 + 80016c76: 2074 fld fa3,192(s0) + 80016c78: 6874 ld a3,208(s0) + 80016c7a: 6572 ld a0,280(sp) + 80016c7c: 6461 lui s0,0x18 + 80016c7e: 203a fld ft0,392(sp) + 80016c80: 2e25 addiw t3,t3,9 + 80016c82: 732a ld t1,168(sp) + 80016c84: 000a c.slli zero,0x2 + 80016c86: 0000 unimp + 80016c88: 5452 lw s0,52(sp) + 80016c8a: 542d li s0,-21 + 80016c8c: 7268 ld a0,224(a2) + 80016c8e: 6165 addi sp,sp,112 + 80016c90: 2064 fld fs1,192(s0) + 80016c92: 6c656873 csrrsi a6,0x6c6,10 + 80016c96: 206c fld fa1,192(s0) + 80016c98: 6d6d6f63 bltu s10,s6,80017376 + 80016c9c: 6e61 lui t3,0x18 + 80016c9e: 7364 ld s1,224(a4) + 80016ca0: 0a3a slli s4,s4,0xe + 80016ca2: 0000 unimp + 80016ca4: 0000 unimp + 80016ca6: 0000 unimp + 80016ca8: 5f5f 6d63 5f64 0x5f646d635f5f + 80016cae: 0000 unimp + 80016cb0: 2d25 addiw s10,s10,9 + 80016cb2: 3631 addiw a2,a2,-20 + 80016cb4: 202d2073 csrs hedeleg,s10 + 80016cb8: 7325 lui t1,0xfffe9 + 80016cba: 000a c.slli zero,0x2 + 80016cbc: 0000 unimp + 80016cbe: 0000 unimp + 80016cc0: 000a c.slli zero,0x2 + 80016cc2: 0000 unimp + 80016cc4: 0000 unimp + 80016cc6: 0000 unimp + 80016cc8: 6f54 ld a3,152(a4) + 80016cca: 616d206f j 800e92e0 <__bss_end+0xbe05c> + 80016cce: 796e ld s2,248(sp) + 80016cd0: 6120 ld s0,64(a0) + 80016cd2: 6772 ld a4,280(sp) + 80016cd4: 20212073 csrs hedeleg,sp + 80016cd8: 6f206557 0x6f206557 + 80016cdc: 6c6e ld s8,216(sp) + 80016cde: 2079 0x2079 + 80016ce0: 7355 lui t1,0xffff5 + 80016ce2: 3a65 addiw s4,s4,-7 + 80016ce4: 000a c.slli zero,0x2 + 80016ce6: 0000 unimp + 80016ce8: 7325 lui t1,0xfffe9 + 80016cea: 0020 addi s0,sp,8 + 80016cec: 0000 unimp + 80016cee: 0000 unimp + 80016cf0: 00646d63 bltu s0,t1,80016d0a + 80016cf4: 0000 unimp + 80016cf6: 0000 unimp + 80016cf8: 6572 ld a0,280(sp) + 80016cfa: 7074 ld a3,224(s0) + 80016cfc: 0000 unimp + 80016cfe: 0000 unimp + 80016d00: 7325 lui t1,0xfffe9 + 80016d02: 203a fld ft0,392(sp) + 80016d04: 6d6d6f63 bltu s10,s6,800173e2 + 80016d08: 6e61 lui t3,0x18 + 80016d0a: 2064 fld fs1,192(s0) + 80016d0c: 6f6e ld t5,216(sp) + 80016d0e: 2074 fld fa3,192(s0) + 80016d10: 6f66 ld t5,88(sp) + 80016d12: 6e75 lui t3,0x1d + 80016d14: 2e64 fld fs1,216(a2) + 80016d16: 000a c.slli zero,0x2 + 80016d18: 0000002f 0x2f + 80016d1c: 0000 unimp + 80016d1e: 0000 unimp + 80016d20: 7325 lui t1,0xfffe9 + 80016d22: 000a c.slli zero,0x2 + 80016d24: 0000 unimp + 80016d26: 0000 unimp + 80016d28: 736d lui t1,0xffffb + 80016d2a: 2068 fld fa0,192(s0) + 80016d2c: 0000 unimp + 80016d2e: 0000 unimp + 80016d30: 6966 ld s2,88(sp) + 80016d32: 736e ld t1,248(sp) + 80016d34: 2068 fld fa0,192(s0) + 80016d36: 0000 unimp + 80016d38: 003e c.slli zero,0xf + 80016d3a: 0000 unimp + 80016d3c: 0000 unimp + 80016d3e: 0000 unimp + 80016d40: 6c656873 csrrsi a6,0x6c6,10 + 80016d44: 206c fld fa1,192(s0) + 80016d46: 3d21 addiw s10,s10,-24 + 80016d48: 5220 lw s0,96(a2) + 80016d4a: 5f54 lw a3,60(a4) + 80016d4c: 554e lw a0,240(sp) + 80016d4e: 4c4c lw a1,28(s0) + ... + 80016d58: 6966 ld s2,88(sp) + 80016d5a: 736e ld t1,248(sp) + 80016d5c: 3a68 fld fa0,240(a2) + 80016d5e: 6320 ld s0,64(a4) + 80016d60: 6e61 lui t3,0x18 + 80016d62: 6e20 ld s0,88(a2) + 80016d64: 6620746f jal s0,8001e3c6 <__stack_cpu0+0x406> + 80016d68: 6e69 lui t3,0x1a + 80016d6a: 2064 fld fs1,192(s0) + 80016d6c: 6564 ld s1,200(a0) + 80016d6e: 6976 ld s2,344(sp) + 80016d70: 203a6563 bltu s4,gp,80016f7a + 80016d74: 7325 lui t1,0xfffe9 + 80016d76: 000a c.slli zero,0x2 + 80016d78: 000a c.slli zero,0x2 + 80016d7a: 0000 unimp + 80016d7c: 0000 unimp + 80016d7e: 0000 unimp + 80016d80: 7325 lui t1,0xfffe9 + 80016d82: 7325 lui t1,0xfffe9 + 80016d84: 0000 unimp + 80016d86: 0000 unimp + 80016d88: 4b325b1b 0x4b325b1b + 80016d8c: 000d c.nop 3 + 80016d8e: 0000 unimp + 80016d90: 0008 0x8 + 80016d92: 0000 unimp + 80016d94: 0000 unimp + 80016d96: 0000 unimp + 80016d98: 6325 lui t1,0x9 + 80016d9a: 0000 unimp + 80016d9c: 0000 unimp + 80016d9e: 0000 unimp + 80016da0: 2508 fld fa0,8(a0) + 80016da2: 08202073 csrr zero,0x82 + 80016da6: 0000 unimp + 80016da8: 2008 fld fa0,0(s0) + 80016daa: 0008 0x8 + 80016dac: 0000 unimp + 80016dae: 0000 unimp + 80016db0: 7325 lui t1,0xfffe9 + 80016db2: 0000 unimp + 80016db4: 0000 unimp + 80016db6: 0000 unimp + 80016db8: 6f6e ld t5,216(sp) + 80016dba: 6d20 ld s0,88(a0) + 80016dbc: 6d65 lui s10,0x19 + 80016dbe: 2079726f jal tp,800ae7c4 <__bss_end+0x83540> + 80016dc2: 6f66 ld t5,88(sp) + 80016dc4: 2072 fld ft0,280(sp) + 80016dc6: 6c656873 csrrsi a6,0x6c6,10 + 80016dca: 0a6c addi a1,sp,284 + 80016dcc: 0000 unimp + 80016dce: 0000 unimp + 80016dd0: 7374 ld a3,224(a4) + 80016dd2: 6568 ld a0,200(a0) + 80016dd4: 6c6c ld a1,216(s0) + 80016dd6: 0000 unimp + 80016dd8: 78726873 csrrsi a6,0x787,4 + 80016ddc: 0000 unimp + 80016dde: 0000 unimp + 80016de0: 732e ld t1,232(sp) + 80016de2: 0068 addi a0,sp,12 + 80016de4: 0000 unimp + 80016de6: 0000 unimp + 80016de8: 532e lw t1,232(sp) + 80016dea: 0048 addi a0,sp,4 + 80016dec: 0000 unimp + 80016dee: 0000 unimp + 80016df0: 6e69622f 0x6e69622f + 80016df4: 2a2e252f 0x2a2e252f + 80016df8: 00000073 ecall + 80016dfc: 0000 unimp + 80016dfe: 0000 unimp + 80016e00: 7355 lui t1,0xffff5 + 80016e02: 6761 lui a4,0x18 + 80016e04: 3a65 addiw s4,s4,-7 + 80016e06: 6320 ld s0,64(a4) + 80016e08: 2070 fld fa2,192(s0) + 80016e0a: 52554f53 0x52554f53 + 80016e0e: 44204543 0x44204543 + 80016e12: 5345 li t1,-15 + 80016e14: 0a54 addi a3,sp,276 + 80016e16: 0000 unimp + 80016e18: 79706f43 fmadd.s ft10,ft0,fs7,fa5,unknown + 80016e1c: 5320 lw s0,96(a4) + 80016e1e: 4352554f fnmadd.d fa0,ft4,fs5,fs0,unknown + 80016e22: 2045 0x2045 + 80016e24: 6f74 ld a3,216(a4) + 80016e26: 4420 lw s0,72(s0) + 80016e28: 5345 li t1,-15 + 80016e2a: 2e54 fld fa3,152(a2) + 80016e2c: 000a c.slli zero,0x2 + 80016e2e: 0000 unimp + 80016e30: 7355 lui t1,0xffff5 + 80016e32: 6761 lui a4,0x18 + 80016e34: 3a65 addiw s4,s4,-7 + 80016e36: 6d20 ld s0,88(a0) + 80016e38: 2076 fld ft0,344(sp) + 80016e3a: 52554f53 0x52554f53 + 80016e3e: 44204543 0x44204543 + 80016e42: 5345 li t1,-15 + 80016e44: 0a54 addi a3,sp,276 + 80016e46: 0000 unimp + 80016e48: 6552 ld a0,272(sp) + 80016e4a: 616e ld sp,216(sp) + 80016e4c: 656d lui a0,0x1b + 80016e4e: 5320 lw s0,96(a4) + 80016e50: 4352554f fnmadd.d fa0,ft4,fs5,fs0,unknown + 80016e54: 2045 0x2045 + 80016e56: 6f74 ld a3,216(a4) + 80016e58: 4420 lw s0,72(s0) + 80016e5a: 5345 li t1,-15 + 80016e5c: 2c54 fld fa3,152(s0) + 80016e5e: 6f20 ld s0,88(a4) + 80016e60: 2072 fld ft0,280(sp) + 80016e62: 6f6d lui t5,0x1b + 80016e64: 6576 ld a0,344(sp) + 80016e66: 5320 lw s0,96(a4) + 80016e68: 4352554f fnmadd.d fa0,ft4,fs5,fs0,unknown + 80016e6c: 2845 addiw a6,a6,17 + 80016e6e: 74202973 csrr s2,0x742 + 80016e72: 4944206f j 80059306 <__bss_end+0x2e082> + 80016e76: 4552 lw a0,20(sp) + 80016e78: 524f5443 fmadd.d fs0,ft10,ft4,fa0,unknown + 80016e7c: 2e59 addiw t3,t3,22 + 80016e7e: 000a c.slli zero,0x2 + 80016e80: 7325 lui t1,0xfffe9 + 80016e82: 3d20 fld fs0,120(a0) + 80016e84: 203e fld ft0,456(sp) + 80016e86: 7325 lui t1,0xfffe9 + 80016e88: 000a c.slli zero,0x2 + 80016e8a: 0000 unimp + 80016e8c: 0000 unimp + 80016e8e: 0000 unimp + 80016e90: 2074756f jal a0,8005e896 <__bss_end+0x33612> + 80016e94: 6d20666f jal a2,8001d566 <__global_pointer$+0x2dc6> + 80016e98: 6d65 lui s10,0x19 + 80016e9a: 0a79726f jal tp,800ae740 <__bss_end+0x834bc> + 80016e9e: 0000 unimp + 80016ea0: 7325 lui t1,0xfffe9 + 80016ea2: 0073252f amoadd.w a0,t2,(t1) + 80016ea6: 0000 unimp + 80016ea8: 7355 lui t1,0xffff5 + 80016eaa: 6761 lui a4,0x18 + 80016eac: 3a65 addiw s4,s4,-7 + 80016eae: 6320 ld s0,64(a4) + 80016eb0: 7461 lui s0,0xffff8 + 80016eb2: 5b20 lw s0,112(a4) + 80016eb4: 4946 lw s2,80(sp) + 80016eb6: 454c lw a1,12(a0) + 80016eb8: 2e5d addiw t3,t3,23 + 80016eba: 2e2e fld ft8,200(sp) + 80016ebc: 000a c.slli zero,0x2 + 80016ebe: 0000 unimp + 80016ec0: 636e6f43 fmadd.d ft10,ft8,fs6,fa2,unknown + 80016ec4: 7461 lui s0,0xffff8 + 80016ec6: 6e65 lui t3,0x19 + 80016ec8: 7461 lui s0,0xffff8 + 80016eca: 2065 0x2065 + 80016ecc: 4946 lw s2,80(sp) + 80016ece: 454c lw a1,12(a0) + 80016ed0: 7328 ld a0,96(a4) + 80016ed2: 0a29 addi s4,s4,10 + 80016ed4: 0000 unimp + 80016ed6: 0000 unimp + 80016ed8: 6e6e6163 bltu t3,t1,800175ba + 80016edc: 7220746f jal s0,8001e5fe <__stack_cpu0+0x63e> + 80016ee0: 6d65 lui s10,0x19 + 80016ee2: 2065766f jal a2,8006e0e8 <__bss_end+0x42e64> + 80016ee6: 27732527 fsw fs7,618(t1) # ffffffffffff526a <__bss_end+0xffffffff7ffc9fe6> + 80016eea: 000a c.slli zero,0x2 + 80016eec: 0000 unimp + 80016eee: 0000 unimp + 80016ef0: 002e c.slli zero,0xb + 80016ef2: 0000 unimp + 80016ef4: 0000 unimp + 80016ef6: 0000 unimp + 80016ef8: 2e2e fld ft8,200(sp) + 80016efa: 0000 unimp + 80016efc: 0000 unimp + 80016efe: 0000 unimp + 80016f00: 6572 ld a0,280(sp) + 80016f02: 6f6d lui t5,0x1b + 80016f04: 6576 ld a0,344(sp) + 80016f06: 2064 fld fs1,192(s0) + 80016f08: 27732527 fsw fs7,618(t1) + 80016f0c: 000a c.slli zero,0x2 + 80016f0e: 0000 unimp + 80016f10: 6572 ld a0,280(sp) + 80016f12: 6f6d lui t5,0x1b + 80016f14: 6576 ld a0,344(sp) + 80016f16: 2064 fld fs1,192(s0) + 80016f18: 6964 ld s1,208(a0) + 80016f1a: 6572 ld a0,280(sp) + 80016f1c: 726f7463 bgeu t5,t1,80017644 + 80016f20: 2079 0x2079 + 80016f22: 27732527 fsw fs7,618(t1) + 80016f26: 000a c.slli zero,0x2 + 80016f28: 7355 lui t1,0xffff5 + 80016f2a: 6761 lui a4,0x18 + 80016f2c: 3a65 addiw s4,s4,-7 + 80016f2e: 7220 ld s0,96(a2) + 80016f30: 206d 0x206d + 80016f32: 6974706f j 8005edc8 <__bss_end+0x33b44> + 80016f36: 73286e6f jal t3,8009d668 <__bss_end+0x723e4> + 80016f3a: 2029 0x2029 + 80016f3c: 4946 lw s2,80(sp) + 80016f3e: 454c lw a1,12(a0) + 80016f40: 2e2e fld ft8,200(sp) + 80016f42: 0a2e slli s4,s4,0xb + 80016f44: 0000 unimp + 80016f46: 0000 unimp + 80016f48: 6552 ld a0,272(sp) + 80016f4a: 6f6d lui t5,0x1b + 80016f4c: 6576 ld a0,344(sp) + 80016f4e: 2820 fld fs0,80(s0) + 80016f50: 6e75 lui t3,0x1d + 80016f52: 696c ld a1,208(a0) + 80016f54: 6b6e ld s6,216(sp) + 80016f56: 2029 0x2029 + 80016f58: 6874 ld a3,208(s0) + 80016f5a: 2065 0x2065 + 80016f5c: 4946 lw s2,80(sp) + 80016f5e: 454c lw a1,12(a0) + 80016f60: 7328 ld a0,96(a4) + 80016f62: 2e29 addiw t3,t3,10 + 80016f64: 000a c.slli zero,0x2 + 80016f66: 0000 unimp + 80016f68: 7245 lui tp,0xffff1 + 80016f6a: 6f72 ld t5,280(sp) + 80016f6c: 3a72 fld fs4,312(sp) + 80016f6e: 4220 lw s0,64(a2) + 80016f70: 6461 lui s0,0x18 + 80016f72: 6f20 ld s0,88(a4) + 80016f74: 7470 ld a2,232(s0) + 80016f76: 6f69 lui t5,0x1a + 80016f78: 3a6e fld fs4,248(sp) + 80016f7a: 2520 fld fs0,72(a0) + 80016f7c: 00000a63 beqz zero,80016f90 + 80016f80: 6e6e6163 bltu t3,t1,80017662 + 80016f84: 7220746f jal s0,8001e6a6 <__stack_cpu0+0x6e6> + 80016f88: 6d65 lui s10,0x19 + 80016f8a: 2065766f jal a2,8006e190 <__bss_end+0x42f0c> + 80016f8e: 27732527 fsw fs7,618(t1) # ffffffffffff526a <__bss_end+0xffffffff7ffc9fe6> + 80016f92: 203a fld ft0,392(sp) + 80016f94: 7349 lui t1,0xffff2 + 80016f96: 6120 ld s0,64(a0) + 80016f98: 6420 ld s0,72(s0) + 80016f9a: 7269 lui tp,0xffffa + 80016f9c: 6365 lui t1,0x19 + 80016f9e: 6f74 ld a3,216(a4) + 80016fa0: 7972 ld s2,312(sp) + 80016fa2: 000a c.slli zero,0x2 + 80016fa4: 0000 unimp + 80016fa6: 0000 unimp + 80016fa8: 6e6e6163 bltu t3,t1,8001768a + 80016fac: 7220746f jal s0,8001e6ce <__stack_cpu0+0x70e> + 80016fb0: 6d65 lui s10,0x19 + 80016fb2: 2065766f jal a2,8006e1b8 <__bss_end+0x42f34> + 80016fb6: 27732527 fsw fs7,618(t1) # 1926a <__STACKSIZE__+0x1526a> + 80016fba: 203a fld ft0,392(sp) + 80016fbc: 6f4e ld t5,208(sp) + 80016fbe: 7320 ld s0,96(a4) + 80016fc0: 6375 lui t1,0x1d + 80016fc2: 2068 fld fa0,192(s0) + 80016fc4: 6966 ld s2,88(sp) + 80016fc6: 656c ld a1,200(a0) + 80016fc8: 6f20 ld s0,88(a4) + 80016fca: 2072 fld ft0,280(sp) + 80016fcc: 6964 ld s1,208(a0) + 80016fce: 6572 ld a0,280(sp) + 80016fd0: 726f7463 bgeu t5,t1,800176f8 + 80016fd4: 0a79 addi s4,s4,30 + 80016fd6: 0000 unimp + 80016fd8: 7325 lui t1,0xfffe9 + 80016fda: 000a c.slli zero,0x2 + 80016fdc: 0000 unimp + 80016fde: 0000 unimp + 80016fe0: 6f4e ld t5,208(sp) + 80016fe2: 7320 ld s0,96(a4) + 80016fe4: 6375 lui t1,0x1d + 80016fe6: 2068 fld fa0,192(s0) + 80016fe8: 6964 ld s1,208(a0) + 80016fea: 6572 ld a0,280(sp) + 80016fec: 726f7463 bgeu t5,t1,80017714 + 80016ff0: 3a79 addiw s4,s4,-2 + 80016ff2: 2520 fld fs0,72(a0) + 80016ff4: 00000a73 0xa73 + 80016ff8: 7355 lui t1,0xffff5 + 80016ffa: 6761 lui a4,0x18 + 80016ffc: 3a65 addiw s4,s4,-7 + 80016ffe: 6d20 ld s0,88(a0) + 80017000: 7269646b 0x7269646b + 80017004: 5b20 lw s0,112(a4) + 80017006: 4954504f fnmadd.s ft0,fs0,fs5,fs1,unknown + 8001700a: 205d4e4f fnmadd.s ft8,fs10,ft5,ft4,rmm + 8001700e: 4944 lw s1,20(a0) + 80017010: 4552 lw a0,20(sp) + 80017012: 524f5443 fmadd.d fs0,ft10,ft4,fa0,unknown + 80017016: 0a59 addi s4,s4,22 + ... + 80017020: 61657243 fmadd.s ft4,fa0,fs6,fa2 + 80017024: 6574 ld a3,200(a0) + 80017026: 7420 ld s0,104(s0) + 80017028: 6568 ld a0,200(a0) + 8001702a: 4420 lw s0,72(s0) + 8001702c: 5249 li tp,-14 + 8001702e: 4345 li t1,17 + 80017030: 4f54 lw a3,28(a4) + 80017032: 5952 lw s2,52(sp) + 80017034: 202c fld fa1,64(s0) + 80017036: 6669 lui a2,0x1a + 80017038: 7420 ld s0,104(s0) + 8001703a: 6568 ld a0,200(a0) + 8001703c: 2079 0x2079 + 8001703e: 6f64 ld s1,216(a4) + 80017040: 6e20 ld s0,88(a2) + 80017042: 6120746f jal s0,8001e654 <__stack_cpu0+0x694> + 80017046: 726c ld a1,224(a2) + 80017048: 6165 addi sp,sp,112 + 8001704a: 7964 ld s1,240(a0) + 8001704c: 6520 ld s0,72(a0) + 8001704e: 6978 ld a4,208(a0) + 80017050: 0a2e7473 csrrci s0,0xa2,28 + 80017054: 0000 unimp + 80017056: 0000 unimp + 80017058: 6c65 lui s8,0x19 + 8001705a: 006d c.nop 27 + 8001705c: 0000 unimp + 8001705e: 0000 unimp + 80017060: 742d lui s0,0xfffeb + 80017062: 0000 unimp + 80017064: 0000 unimp + 80017066: 0000 unimp + 80017068: 7355 lui t1,0xffff5 + 8001706a: 6761 lui a4,0x18 + 8001706c: 3a65 addiw s4,s4,-7 + 8001706e: 6d20 ld s0,88(a0) + 80017070: 2073666b 0x2073666b + 80017074: 20742d5b 0x20742d5b + 80017078: 7974 ld a3,240(a0) + 8001707a: 6570 ld a2,200(a0) + 8001707c: 205d 0x205d + 8001707e: 6564 ld s1,200(a0) + 80017080: 6976 ld s2,344(sp) + 80017082: 000a6563 bltu s4,zero,8001708c + 80017086: 0000 unimp + 80017088: 6b6d lui s6,0x1b + 8001708a: 7366 ld t1,120(sp) + 8001708c: 6620 ld s0,72(a2) + 8001708e: 6961 lui s2,0x18 + 80017090: 656c ld a1,200(a0) + 80017092: 2c64 fld fs1,216(s0) + 80017094: 7220 ld s0,96(a2) + 80017096: 7365 lui t1,0xffff9 + 80017098: 6c75 lui s8,0x1d + 8001709a: 3d74 fld fa3,248(a0) + 8001709c: 6425 lui s0,0x9 + 8001709e: 000a c.slli zero,0x2 + 800170a0: 6966 ld s2,88(sp) + 800170a2: 656c ld a1,200(a0) + 800170a4: 74737973 csrrci s2,0x747,6 + 800170a8: 6d65 lui s10,0x19 + 800170aa: 2020 fld fs0,64(s0) + 800170ac: 6564 ld s1,200(a0) + 800170ae: 6976 ld s2,344(sp) + 800170b0: 20206563 bltu zero,sp,800172ba + 800170b4: 6f6d lui t5,0x1b + 800170b6: 6e75 lui t3,0x1d + 800170b8: 7074 ld a3,224(s0) + 800170ba: 746e696f jal s2,800fd800 <__bss_end+0xd257c> + 800170be: 000a c.slli zero,0x2 + 800170c0: 2d2d addiw s10,s10,11 + 800170c2: 2d2d addiw s10,s10,11 + 800170c4: 2d2d addiw s10,s10,11 + 800170c6: 2d2d addiw s10,s10,11 + 800170c8: 2d2d addiw s10,s10,11 + 800170ca: 2020 fld fs0,64(s0) + 800170cc: 2d2d addiw s10,s10,11 + 800170ce: 2d2d addiw s10,s10,11 + 800170d0: 2d2d addiw s10,s10,11 + 800170d2: 2020 fld fs0,64(s0) + 800170d4: 2d2d addiw s10,s10,11 + 800170d6: 2d2d addiw s10,s10,11 + 800170d8: 2d2d addiw s10,s10,11 + 800170da: 2d2d addiw s10,s10,11 + 800170dc: 2d2d addiw s10,s10,11 + 800170de: 000a c.slli zero,0x2 + 800170e0: 2d25 addiw s10,s10,9 + 800170e2: 3031 0x3031 + 800170e4: 25202073 csrr zero,0x252 + 800170e8: 362d addiw a2,a2,-21 + 800170ea: 25202073 csrr zero,0x252 + 800170ee: 732d lui t1,0xfffeb + 800170f0: 000a c.slli zero,0x2 + 800170f2: 0000 unimp + 800170f4: 0000 unimp + 800170f6: 0000 unimp + 800170f8: 6f6d lui t5,0x1b + 800170fa: 6e75 lui t3,0x1d + 800170fc: 2074 fld fa3,192(s0) + 800170fe: 6564 ld s1,200(a0) + 80017100: 6976 ld s2,344(sp) + 80017102: 25206563 bltu zero,s2,8001734c + 80017106: 73252873 csrrs a6,0x732,a0 + 8001710a: 2029 0x2029 + 8001710c: 6f746e6f jal t3,8005e002 <__bss_end+0x32d7e> + 80017110: 2520 fld fs0,72(a0) + 80017112: 2e2e2073 csrs 0x2e2,t3 + 80017116: 202e fld ft0,200(sp) + ... + 80017120: 63637573 csrrci a0,0x636,6 + 80017124: 6565 lui a0,0x19 + 80017126: 2164 fld fs1,192(a0) + 80017128: 000a c.slli zero,0x2 + 8001712a: 0000 unimp + 8001712c: 0000 unimp + 8001712e: 0000 unimp + 80017130: 6166 ld sp,88(sp) + 80017132: 6c69 lui s8,0x1a + 80017134: 6465 lui s0,0x19 + 80017136: 0a21 addi s4,s4,8 + ... + 80017140: 7355 lui t1,0xffff5 + 80017142: 6761 lui a4,0x18 + 80017144: 3a65 addiw s4,s4,-7 + 80017146: 6d20 ld s0,88(a0) + 80017148: 746e756f jal a0,800fe88e <__bss_end+0xd360a> + 8001714c: 3c20 fld fs0,120(s0) + 8001714e: 6564 ld s1,200(a0) + 80017150: 6976 ld s2,344(sp) + 80017152: 203e6563 bltu t3,gp,8001735c + 80017156: 6d3c ld a5,88(a0) + 80017158: 746e756f jal a0,800fe89e <__bss_end+0xd361a> + 8001715c: 6f70 ld a2,216(a4) + 8001715e: 6e69 lui t3,0x1a + 80017160: 3e74 fld fa3,248(a2) + 80017162: 3c20 fld fs0,120(s0) + 80017164: 7366 ld t1,120(sp) + 80017166: 7974 ld a3,240(a0) + 80017168: 6570 ld a2,200(a0) + 8001716a: 2e3e fld ft8,456(sp) + 8001716c: 000a c.slli zero,0x2 + 8001716e: 0000 unimp + 80017170: 7355 lui t1,0xffff5 + 80017172: 6761 lui a4,0x18 + 80017174: 3a65 addiw s4,s4,-7 + 80017176: 7520 ld s0,104(a0) + 80017178: 6d6e ld s10,216(sp) + 8001717a: 746e756f jal a0,800fe8c0 <__bss_end+0xd363c> + 8001717e: 3c20 fld fs0,120(s0) + 80017180: 6f6d lui t5,0x1b + 80017182: 6e75 lui t3,0x1d + 80017184: 7074 ld a3,224(s0) + 80017186: 746e696f jal s2,800fd8cc <__bss_end+0xd2648> + 8001718a: 2e3e fld ft8,456(sp) + 8001718c: 000a c.slli zero,0x2 + 8001718e: 0000 unimp + 80017190: 6e75 lui t3,0x1d + 80017192: 6f6d lui t5,0x1b + 80017194: 6e75 lui t3,0x1d + 80017196: 2074 fld fa3,192(s0) + 80017198: 7325 lui t1,0xfffe9 + 8001719a: 2e20 fld fs0,88(a2) + 8001719c: 2e2e fld ft8,200(sp) + 8001719e: 0020 addi s0,sp,8 + 800171a0: 0000002f 0x2f + 800171a4: 0000 unimp + 800171a6: 0000 unimp + 800171a8: 2d2d addiw s10,s10,11 + 800171aa: 6568 ld a0,200(a0) + 800171ac: 706c ld a1,224(s0) + 800171ae: 0000 unimp + 800171b0: 682d lui a6,0xb + 800171b2: 0000 unimp + 800171b4: 0000 unimp + 800171b6: 0000 unimp + 800171b8: 6664 ld s1,200(a2) + 800171ba: 5b20 lw s0,112(a4) + 800171bc: 6170 ld a2,192(a0) + 800171be: 6874 ld a3,208(s0) + 800171c0: 0a5d addi s4,s4,23 + 800171c2: 0000 unimp + 800171c4: 0000 unimp + 800171c6: 0000 unimp + 800171c8: 6e65706f j 8006e8ae <__bss_end+0x4362a> + 800171cc: 6620 ld s0,72(a2) + 800171ce: 6c69 lui s8,0x1a + 800171d0: 3a65 addiw s4,s4,-7 + 800171d2: 7325 lui t1,0xfffe9 + 800171d4: 6620 ld s0,72(a2) + 800171d6: 6961 lui s2,0x18 + 800171d8: 656c ld a1,200(a0) + 800171da: 2164 fld fs1,192(a0) + 800171dc: 000a c.slli zero,0x2 + 800171de: 0000 unimp + 800171e0: 7355 lui t1,0xffff5 + 800171e2: 6761 lui a4,0x18 + 800171e4: 3a65 addiw s4,s4,-7 + 800171e6: 6520 ld s0,72(a0) + 800171e8: 206f6863 bltu t5,t1,800173f8 + 800171ec: 7322 ld t1,40(sp) + 800171ee: 7274 ld a3,224(a2) + 800171f0: 6e69 lui t3,0x1a + 800171f2: 5b202267 0x5b202267 + 800171f6: 6966 ld s2,88(sp) + 800171f8: 656c ld a1,200(a0) + 800171fa: 616e ld sp,216(sp) + 800171fc: 656d lui a0,0x1b + 800171fe: 0a5d addi s4,s4,23 + ... + 80017208: 7355 lui t1,0xffff5 + 8001720a: 6761 lui a4,0x18 + 8001720c: 3a65 addiw s4,s4,-7 + 8001720e: 7420 ld s0,104(s0) + 80017210: 6961 lui s2,0x18 + 80017212: 206c fld fa1,192(s0) + 80017214: 206e2d5b 0x206e2d5b + 80017218: 756e ld a0,248(sp) + 8001721a: 626d lui tp,0x1b + 8001721c: 7265 lui tp,0xffff9 + 8001721e: 3c205d73 csrrwi s10,0x3c2,0 + 80017222: 6966 ld s2,88(sp) + 80017224: 656c ld a1,200(a0) + 80017226: 616e ld sp,216(sp) + 80017228: 656d lui a0,0x1b + 8001722a: 0a3e slli s4,s4,0xf + 8001722c: 0000 unimp + 8001722e: 0000 unimp + 80017230: 6e2d lui t3,0xb + 80017232: 0000 unimp + 80017234: 0000 unimp + 80017236: 0000 unimp + 80017238: 6946 ld s2,80(sp) + 8001723a: 656c ld a1,200(a0) + 8001723c: 6420 ld s0,72(s0) + 8001723e: 6e73656f jal a0,8004e124 <__bss_end+0x22ea0> + 80017242: 65207427 0x65207427 + 80017246: 6978 ld a4,208(a0) + 80017248: 000a7473 csrrci s0,ustatus,20 + 8001724c: 0000 unimp + 8001724e: 0000 unimp + 80017250: 540a lw s0,160(sp) + 80017252: 6c61746f jal s0,8002e918 <__bss_end+0x3694> + 80017256: 4e20 lw s0,88(a2) + 80017258: 6d75 lui s10,0x1d + 8001725a: 6562 ld a0,24(sp) + 8001725c: 2072 fld ft0,280(sp) + 8001725e: 6c20666f jal a2,8001d920 <__global_pointer$+0x3180> + 80017262: 6e69 lui t3,0x1a + 80017264: 7365 lui t1,0xffff9 + 80017266: 253a fld fa0,392(sp) + 80017268: 0a64 addi s1,sp,284 + 8001726a: 0000 unimp + 8001726c: 0000 unimp + 8001726e: 0000 unimp + 80017270: 450a lw a0,128(sp) + 80017272: 7272 ld tp,312(sp) + 80017274: 523a726f jal tp,800bef96 <__bss_end+0x93d12> + 80017278: 7165 addi sp,sp,-400 + 8001727a: 6975 lui s2,0x1d + 8001727c: 6572 ld a0,280(sp) + 8001727e: 2064 fld fs1,192(s0) + 80017280: 696c ld a1,208(a0) + 80017282: 656e ld a0,216(sp) + 80017284: 72612073 csrs 0x726,sp + 80017288: 2065 0x2065 + 8001728a: 6f6d lui t5,0x1b + 8001728c: 6572 ld a0,280(sp) + 8001728e: 7420 ld s0,104(s0) + 80017290: 6168 ld a0,192(a0) + 80017292: 206e fld ft0,216(sp) + 80017294: 6f74 ld a3,216(a4) + 80017296: 6174 ld a3,192(a0) + 80017298: 206c fld fa1,192(s0) + 8001729a: 756e ld a0,248(sp) + 8001729c: 626d lui tp,0x1b + 8001729e: 7265 lui tp,0xffff9 + 800172a0: 6f20 ld s0,88(a4) + 800172a2: 2066 fld ft0,88(sp) + 800172a4: 696c ld a1,208(a0) + 800172a6: 656e ld a0,216(sp) + 800172a8: 00000a73 0xa73 + 800172ac: 0000 unimp + 800172ae: 0000 unimp + 800172b0: 6552 ld a0,272(sp) + 800172b2: 7571 lui a0,0xffffc + 800172b4: 7269 lui tp,0xffffa + 800172b6: 6465 lui s0,0x19 + 800172b8: 4e20 lw s0,88(a2) + 800172ba: 6d75 lui s10,0x1d + 800172bc: 6562 ld a0,24(sp) + 800172be: 2072 fld ft0,280(sp) + 800172c0: 6c20666f jal a2,8001d982 <__global_pointer$+0x31e2> + 800172c4: 6e69 lui t3,0x1a + 800172c6: 7365 lui t1,0xffff9 + 800172c8: 253a fld fa0,392(sp) + 800172ca: 0a64 addi s1,sp,284 + 800172cc: 0000 unimp + 800172ce: 0000 unimp + 800172d0: 6325 lui t1,0x9 + 800172d2: 0000 unimp + 800172d4: 0000 unimp + 800172d6: 0000 unimp + 800172d8: 000a c.slli zero,0x2 + 800172da: 0000 unimp + 800172dc: 0000 unimp + 800172de: 0000 unimp + 800172e0: 6548 ld a0,136(a0) + 800172e2: 6c6c ld a1,216(s0) + 800172e4: 5452206f j 8003a028 <__bss_end+0xeda4> + 800172e8: 542d li s0,-21 + 800172ea: 7268 ld a0,224(a2) + 800172ec: 6165 addi sp,sp,112 + 800172ee: 2164 fld fs1,192(a0) + 800172f0: 000a c.slli zero,0x2 + 800172f2: 0000 unimp + 800172f4: 0000 unimp + 800172f6: 0000 unimp + 800172f8: 4a325b1b 0x4a325b1b + 800172fc: 00485b1b srliw s6,a6,0x4 + 80017300: 002d c.nop 11 + 80017302: 0000 unimp + 80017304: 0000 unimp + 80017306: 0000 unimp + 80017308: 6874 ld a3,208(s0) + 8001730a: 6572 ld a0,280(sp) + 8001730c: 6461 lui s0,0x18 + 8001730e: 0000 unimp + 80017310: 2d25 addiw s10,s10,9 + 80017312: 2e2a fld ft8,136(sp) + 80017314: 72702073 csrr zero,0x727 + 80017318: 2069 0x2069 + 8001731a: 7320 ld s0,96(a4) + 8001731c: 6174 ld a3,192(a0) + 8001731e: 7574 ld a3,232(a0) + 80017320: 20202073 csrr zero,hedeleg + 80017324: 2020 fld fs0,64(s0) + 80017326: 7320 ld s0,96(a4) + 80017328: 2070 fld fa2,192(s0) + 8001732a: 2020 fld fs0,64(s0) + 8001732c: 2020 fld fs0,64(s0) + 8001732e: 63617473 csrrci s0,0x636,2 + 80017332: 6973206b 0x6973206b + 80017336: 657a ld a0,408(sp) + 80017338: 6d20 ld s0,88(a0) + 8001733a: 7861 lui a6,0xffff8 + 8001733c: 7520 ld s0,104(a0) + 8001733e: 20646573 csrrsi a0,0x206,8 + 80017342: 656c ld a1,200(a0) + 80017344: 7466 ld s0,120(sp) + 80017346: 7420 ld s0,104(s0) + 80017348: 6369 lui t1,0x1a + 8001734a: 6520206b 0x6520206b + 8001734e: 7272 ld tp,312(sp) + 80017350: 000a726f jal tp,800be350 <__bss_end+0x930cc> + 80017354: 0000 unimp + 80017356: 0000 unimp + 80017358: 2d20 fld fs0,88(a0) + 8001735a: 2d2d addiw s10,s10,11 + 8001735c: 2020 fld fs0,64(s0) + 8001735e: 2d2d addiw s10,s10,11 + 80017360: 2d2d addiw s10,s10,11 + 80017362: 2d2d addiw s10,s10,11 + 80017364: 202d 0x202d + 80017366: 2d2d addiw s10,s10,11 + 80017368: 2d2d addiw s10,s10,11 + 8001736a: 2d2d addiw s10,s10,11 + 8001736c: 2d2d addiw s10,s10,11 + 8001736e: 2d2d addiw s10,s10,11 + 80017370: 2d20 fld fs0,88(a0) + 80017372: 2d2d addiw s10,s10,11 + 80017374: 2d2d addiw s10,s10,11 + 80017376: 2d2d addiw s10,s10,11 + 80017378: 2d2d addiw s10,s10,11 + 8001737a: 202d 0x202d + 8001737c: 2d20 fld fs0,88(a0) + 8001737e: 2d2d addiw s10,s10,11 + 80017380: 2d2d addiw s10,s10,11 + 80017382: 202d 0x202d + 80017384: 2d20 fld fs0,88(a0) + 80017386: 2d2d addiw s10,s10,11 + 80017388: 2d2d addiw s10,s10,11 + 8001738a: 2d2d addiw s10,s10,11 + 8001738c: 2d2d addiw s10,s10,11 + 8001738e: 202d 0x202d + 80017390: 2d2d addiw s10,s10,11 + 80017392: 0a2d addi s4,s4,11 + 80017394: 0000 unimp + 80017396: 0000 unimp + 80017398: 2d25 addiw s10,s10,9 + 8001739a: 2e2a fld ft8,136(sp) + 8001739c: 732a ld t1,168(sp) + 8001739e: 2520 fld fs0,72(a0) + 800173a0: 00206433 or s0,zero,sp + 800173a4: 0000 unimp + 800173a6: 0000 unimp + 800173a8: 7220 ld s0,96(a2) + 800173aa: 6165 addi sp,sp,112 + 800173ac: 7964 ld s1,240(a0) + 800173ae: 2020 fld fs0,64(s0) + ... + 800173b8: 7320 ld s0,96(a4) + 800173ba: 7375 lui t1,0xffffd + 800173bc: 6570 ld a2,200(a0) + 800173be: 646e ld s0,216(sp) + ... + 800173c8: 6920 ld s0,80(a0) + 800173ca: 696e ld s2,216(sp) + 800173cc: 2074 fld fa3,192(s0) + 800173ce: 2020 fld fs0,64(s0) + ... + 800173d8: 6320 ld s0,64(a4) + 800173da: 6f6c ld a1,216(a4) + 800173dc: 20206573 csrrsi a0,hedeleg,0 + ... + 800173e8: 7220 ld s0,96(a2) + 800173ea: 6e75 lui t3,0x1d + 800173ec: 696e ld s2,216(sp) + 800173ee: 676e ld a4,216(sp) + ... + 800173f8: 3020 fld fs0,96(s0) + 800173fa: 2578 fld fa4,200(a0) + 800173fc: 3830 fld fa2,112(s0) + 800173fe: 2078 fld fa4,192(s0) + 80017400: 7830 ld a2,112(s0) + 80017402: 3025 0x3025 + 80017404: 7838 ld a4,112(s0) + 80017406: 2020 fld fs0,64(s0) + 80017408: 2020 fld fs0,64(s0) + 8001740a: 3025 0x3025 + 8001740c: 6432 ld s0,264(sp) + 8001740e: 2525 addiw a0,a0,9 + 80017410: 2020 fld fs0,64(s0) + 80017412: 3020 fld fs0,96(s0) + 80017414: 2578 fld fa4,200(a0) + 80017416: 3830 fld fa2,112(s0) + 80017418: 2078 fld fa4,192(s0) + 8001741a: 3025 0x3025 + 8001741c: 000a6433 or s0,s4,zero + 80017420: 7325 lui t1,0xfffe9 + 80017422: 0000 unimp + 80017424: 0000 unimp + 80017426: 0000 unimp + 80017428: 0000002f 0x2f + 8001742c: 0000 unimp + 8001742e: 0000 unimp + 80017430: 616d6573 csrrsi a0,0x616,26 + 80017434: 6870 ld a2,208(s0) + 80017436: 0065726f jal tp,8006e43c <__bss_end+0x431b8> + 8001743a: 0000 unimp + 8001743c: 0000 unimp + 8001743e: 0000 unimp + 80017440: 2d25 addiw s10,s10,9 + 80017442: 2e2a fld ft8,136(sp) + 80017444: 20762073 csrs 0x207,a2 + 80017448: 2020 fld fs0,64(s0) + 8001744a: 70737573 csrrci a0,0x707,6 + 8001744e: 6e65 lui t3,0x19 + 80017450: 2064 fld fs1,192(s0) + 80017452: 6874 ld a3,208(s0) + 80017454: 6572 ld a0,280(sp) + 80017456: 6461 lui s0,0x18 + 80017458: 000a c.slli zero,0x2 + 8001745a: 0000 unimp + 8001745c: 0000 unimp + 8001745e: 0000 unimp + 80017460: 2d20 fld fs0,88(a0) + 80017462: 2d2d addiw s10,s10,11 + 80017464: 2d20 fld fs0,88(a0) + 80017466: 2d2d addiw s10,s10,11 + 80017468: 2d2d addiw s10,s10,11 + 8001746a: 2d2d addiw s10,s10,11 + 8001746c: 2d2d addiw s10,s10,11 + 8001746e: 2d2d addiw s10,s10,11 + 80017470: 2d2d addiw s10,s10,11 + 80017472: 0a2d addi s4,s4,11 + 80017474: 0000 unimp + 80017476: 0000 unimp + 80017478: 2d25 addiw s10,s10,9 + 8001747a: 2e2a fld ft8,136(sp) + 8001747c: 732a ld t1,168(sp) + 8001747e: 2520 fld fs0,72(a0) + 80017480: 3330 fld fa2,96(a4) + 80017482: 2064 fld fs1,192(s0) + 80017484: 6425 lui s0,0x9 + 80017486: 003a c.slli zero,0xe + 80017488: 000a c.slli zero,0x2 + 8001748a: 0000 unimp + 8001748c: 0000 unimp + 8001748e: 0000 unimp + 80017490: 2d25 addiw s10,s10,9 + 80017492: 2e2a fld ft8,136(sp) + 80017494: 732a ld t1,168(sp) + 80017496: 2520 fld fs0,72(a0) + 80017498: 3330 fld fa2,96(a4) + 8001749a: 2064 fld fs1,192(s0) + 8001749c: 6425 lui s0,0x9 + 8001749e: 000a c.slli zero,0x2 + 800174a0: 7665 lui a2,0xffff9 + 800174a2: 6e65 lui t3,0x19 + 800174a4: 0074 addi a3,sp,12 + 800174a6: 0000 unimp + 800174a8: 2d25 addiw s10,s10,9 + 800174aa: 2e2a fld ft8,136(sp) + 800174ac: 20202073 csrr zero,hedeleg + 800174b0: 2020 fld fs0,64(s0) + 800174b2: 7320 ld s0,96(a4) + 800174b4: 7465 lui s0,0xffff9 + 800174b6: 2020 fld fs0,64(s0) + 800174b8: 2020 fld fs0,64(s0) + 800174ba: 70737573 csrrci a0,0x707,6 + 800174be: 6e65 lui t3,0x19 + 800174c0: 2064 fld fs1,192(s0) + 800174c2: 6874 ld a3,208(s0) + 800174c4: 6572 ld a0,280(sp) + 800174c6: 6461 lui s0,0x18 + 800174c8: 000a c.slli zero,0x2 + 800174ca: 0000 unimp + 800174cc: 0000 unimp + 800174ce: 0000 unimp + 800174d0: 2020 fld fs0,64(s0) + 800174d2: 2d2d addiw s10,s10,11 + 800174d4: 2d2d addiw s10,s10,11 + 800174d6: 2d2d addiw s10,s10,11 + 800174d8: 2d2d addiw s10,s10,11 + 800174da: 2d2d addiw s10,s10,11 + 800174dc: 2d20 fld fs0,88(a0) + 800174de: 2d2d addiw s10,s10,11 + 800174e0: 2d2d addiw s10,s10,11 + 800174e2: 2d2d addiw s10,s10,11 + 800174e4: 2d2d addiw s10,s10,11 + 800174e6: 2d2d addiw s10,s10,11 + 800174e8: 2d2d addiw s10,s10,11 + 800174ea: 0a2d addi s4,s4,11 + 800174ec: 0000 unimp + 800174ee: 0000 unimp + 800174f0: 2d25 addiw s10,s10,9 + 800174f2: 2e2a fld ft8,136(sp) + 800174f4: 732a ld t1,168(sp) + 800174f6: 2020 fld fs0,64(s0) + 800174f8: 7830 ld a2,112(s0) + 800174fa: 3025 0x3025 + 800174fc: 7838 ld a4,112(s0) + 800174fe: 2520 fld fs0,72(a0) + 80017500: 3330 fld fa2,96(a4) + 80017502: 3a64 fld fs1,240(a2) + 80017504: 0000 unimp + 80017506: 0000 unimp + 80017508: 2d25 addiw s10,s10,9 + 8001750a: 2e2a fld ft8,136(sp) + 8001750c: 732a ld t1,168(sp) + 8001750e: 2020 fld fs0,64(s0) + 80017510: 7830 ld a2,112(s0) + 80017512: 3025 0x3025 + 80017514: 7838 ld a4,112(s0) + 80017516: 3020 fld fs0,96(s0) + 80017518: 000a c.slli zero,0x2 + 8001751a: 0000 unimp + 8001751c: 0000 unimp + 8001751e: 0000 unimp + 80017520: 756d lui a0,0xffffb + 80017522: 6574 ld a3,200(a0) + 80017524: 0078 addi a4,sp,12 + 80017526: 0000 unimp + 80017528: 2d25 addiw s10,s10,9 + 8001752a: 2e2a fld ft8,136(sp) + 8001752c: 20202073 csrr zero,hedeleg + 80017530: 656e776f jal a4,800feb86 <__bss_end+0xd3902> + 80017534: 2072 fld ft0,280(sp) + 80017536: 6820 ld s0,80(s0) + 80017538: 20646c6f jal s8,8005d73e <__bss_end+0x324ba> + 8001753c: 70737573 csrrci a0,0x707,6 + 80017540: 6e65 lui t3,0x19 + 80017542: 2064 fld fs1,192(s0) + 80017544: 6874 ld a3,208(s0) + 80017546: 6572 ld a0,280(sp) + 80017548: 6461 lui s0,0x18 + 8001754a: 000a c.slli zero,0x2 + 8001754c: 0000 unimp + 8001754e: 0000 unimp + 80017550: 2d20 fld fs0,88(a0) + 80017552: 2d2d addiw s10,s10,11 + 80017554: 2d2d addiw s10,s10,11 + 80017556: 2d2d addiw s10,s10,11 + 80017558: 202d 0x202d + 8001755a: 2d2d addiw s10,s10,11 + 8001755c: 2d2d addiw s10,s10,11 + 8001755e: 2d20 fld fs0,88(a0) + 80017560: 2d2d addiw s10,s10,11 + 80017562: 2d2d addiw s10,s10,11 + 80017564: 2d2d addiw s10,s10,11 + 80017566: 2d2d addiw s10,s10,11 + 80017568: 2d2d addiw s10,s10,11 + 8001756a: 2d2d addiw s10,s10,11 + 8001756c: 0a2d addi s4,s4,11 + 8001756e: 0000 unimp + 80017570: 2d25 addiw s10,s10,9 + 80017572: 2e2a fld ft8,136(sp) + 80017574: 732a ld t1,168(sp) + 80017576: 2520 fld fs0,72(a0) + 80017578: 382d addiw a6,a6,-21 + 8001757a: 2a2e fld fs4,200(sp) + 8001757c: 30252073 csrs medeleg,a0 + 80017580: 6434 ld a3,72(s0) + 80017582: 2520 fld fs0,72(a0) + 80017584: 0a64 addi s1,sp,284 + 80017586: 0000 unimp + 80017588: 616d addi sp,sp,240 + 8001758a: 6c69 lui s8,0x1a + 8001758c: 6f62 ld t5,24(sp) + 8001758e: 0078 addi a4,sp,12 + 80017590: 2d25 addiw s10,s10,9 + 80017592: 2e2a fld ft8,136(sp) + 80017594: 6e652073 csrs 0x6e6,a0 + 80017598: 7274 ld a3,224(a2) + 8001759a: 2079 0x2079 + 8001759c: 657a6973 csrrsi s2,0x657,20 + 800175a0: 7320 ld s0,96(a4) + 800175a2: 7375 lui t1,0xffffd + 800175a4: 6570 ld a2,200(a0) + 800175a6: 646e ld s0,216(sp) + 800175a8: 7420 ld s0,104(s0) + 800175aa: 7268 ld a0,224(a2) + 800175ac: 6165 addi sp,sp,112 + 800175ae: 0a64 addi s1,sp,284 + ... + 800175b8: 2d20 fld fs0,88(a0) + 800175ba: 2d2d addiw s10,s10,11 + 800175bc: 202d 0x202d + 800175be: 2d20 fld fs0,88(a0) + 800175c0: 2d2d addiw s10,s10,11 + 800175c2: 202d 0x202d + 800175c4: 2d2d addiw s10,s10,11 + 800175c6: 2d2d addiw s10,s10,11 + 800175c8: 2d2d addiw s10,s10,11 + 800175ca: 2d2d addiw s10,s10,11 + 800175cc: 2d2d addiw s10,s10,11 + 800175ce: 2d2d addiw s10,s10,11 + 800175d0: 2d2d addiw s10,s10,11 + 800175d2: 000a c.slli zero,0x2 + 800175d4: 0000 unimp + 800175d6: 0000 unimp + 800175d8: 2d25 addiw s10,s10,9 + 800175da: 2e2a fld ft8,136(sp) + 800175dc: 732a ld t1,168(sp) + 800175de: 2520 fld fs0,72(a0) + 800175e0: 3430 fld fa2,104(s0) + 800175e2: 2064 fld fs1,192(s0) + 800175e4: 2520 fld fs0,72(a0) + 800175e6: 3430 fld fa2,104(s0) + 800175e8: 2064 fld fs1,192(s0) + 800175ea: 6425 lui s0,0x9 + 800175ec: 003a c.slli zero,0xe + 800175ee: 0000 unimp + 800175f0: 2d25 addiw s10,s10,9 + 800175f2: 2e2a fld ft8,136(sp) + 800175f4: 732a ld t1,168(sp) + 800175f6: 2520 fld fs0,72(a0) + 800175f8: 3430 fld fa2,104(s0) + 800175fa: 2064 fld fs1,192(s0) + 800175fc: 2520 fld fs0,72(a0) + 800175fe: 3430 fld fa2,104(s0) + 80017600: 2064 fld fs1,192(s0) + 80017602: 6425 lui s0,0x9 + 80017604: 000a c.slli zero,0x2 + 80017606: 0000 unimp + 80017608: 736d lui t1,0xffffb + 8001760a: 65757167 0x65757167 + 8001760e: 6575 lui a0,0x1d + ... + 80017618: 2d25 addiw s10,s10,9 + 8001761a: 2e2a fld ft8,136(sp) + 8001761c: 6e652073 csrs 0x6e6,a0 + 80017620: 7274 ld a3,224(a2) + 80017622: 2079 0x2079 + 80017624: 70737573 csrrci a0,0x707,6 + 80017628: 6e65 lui t3,0x19 + 8001762a: 2064 fld fs1,192(s0) + 8001762c: 6874 ld a3,208(s0) + 8001762e: 6572 ld a0,280(sp) + 80017630: 6461 lui s0,0x18 + 80017632: 000a c.slli zero,0x2 + 80017634: 0000 unimp + 80017636: 0000 unimp + 80017638: 2d20 fld fs0,88(a0) + 8001763a: 2d2d addiw s10,s10,11 + 8001763c: 202d 0x202d + 8001763e: 2d20 fld fs0,88(a0) + 80017640: 2d2d addiw s10,s10,11 + 80017642: 2d2d addiw s10,s10,11 + 80017644: 2d2d addiw s10,s10,11 + 80017646: 2d2d addiw s10,s10,11 + 80017648: 2d2d addiw s10,s10,11 + 8001764a: 2d2d addiw s10,s10,11 + 8001764c: 0a2d addi s4,s4,11 + 8001764e: 0000 unimp + 80017650: 2d25 addiw s10,s10,9 + 80017652: 2e2a fld ft8,136(sp) + 80017654: 732a ld t1,168(sp) + 80017656: 2520 fld fs0,72(a0) + 80017658: 3430 fld fa2,104(s0) + 8001765a: 2064 fld fs1,192(s0) + 8001765c: 2520 fld fs0,72(a0) + 8001765e: 3a64 fld fs1,240(a2) + ... + 80017668: 2d25 addiw s10,s10,9 + 8001766a: 2e2a fld ft8,136(sp) + 8001766c: 732a ld t1,168(sp) + 8001766e: 2520 fld fs0,72(a0) + 80017670: 3430 fld fa2,104(s0) + 80017672: 2064 fld fs1,192(s0) + 80017674: 2520 fld fs0,72(a0) + 80017676: 0a64 addi s1,sp,284 + ... + 80017680: 656d lui a0,0x1b + 80017682: 706d c.lui zero,0xffffb + 80017684: 006c6f6f jal t5,800dd68a <__bss_end+0xb2406> + 80017688: 2d25 addiw s10,s10,9 + 8001768a: 2e2a fld ft8,136(sp) + 8001768c: 6c622073 csrs 0x6c6,tp + 80017690: 206b636f jal t1,800cd896 <__bss_end+0xa2612> + 80017694: 6f74 ld a3,216(a4) + 80017696: 6174 ld a3,192(a0) + 80017698: 206c fld fa1,192(s0) + 8001769a: 7266 ld tp,120(sp) + 8001769c: 6565 lui a0,0x19 + 8001769e: 7320 ld s0,96(a4) + 800176a0: 7375 lui t1,0xffffd + 800176a2: 6570 ld a2,200(a0) + 800176a4: 646e ld s0,216(sp) + 800176a6: 7420 ld s0,104(s0) + 800176a8: 7268 ld a0,224(a2) + 800176aa: 6165 addi sp,sp,112 + 800176ac: 0a64 addi s1,sp,284 + 800176ae: 0000 unimp + 800176b0: 2d20 fld fs0,88(a0) + 800176b2: 2d2d addiw s10,s10,11 + 800176b4: 202d 0x202d + 800176b6: 2d20 fld fs0,88(a0) + 800176b8: 2d2d addiw s10,s10,11 + 800176ba: 202d 0x202d + 800176bc: 2d20 fld fs0,88(a0) + 800176be: 2d2d addiw s10,s10,11 + 800176c0: 202d 0x202d + 800176c2: 2d2d addiw s10,s10,11 + 800176c4: 2d2d addiw s10,s10,11 + 800176c6: 2d2d addiw s10,s10,11 + 800176c8: 2d2d addiw s10,s10,11 + 800176ca: 2d2d addiw s10,s10,11 + 800176cc: 2d2d addiw s10,s10,11 + 800176ce: 2d2d addiw s10,s10,11 + 800176d0: 000a c.slli zero,0x2 + 800176d2: 0000 unimp + 800176d4: 0000 unimp + 800176d6: 0000 unimp + 800176d8: 2d25 addiw s10,s10,9 + 800176da: 2e2a fld ft8,136(sp) + 800176dc: 732a ld t1,168(sp) + 800176de: 2520 fld fs0,72(a0) + 800176e0: 3430 fld fa2,104(s0) + 800176e2: 2064 fld fs1,192(s0) + 800176e4: 2520 fld fs0,72(a0) + 800176e6: 3430 fld fa2,104(s0) + 800176e8: 2064 fld fs1,192(s0) + 800176ea: 2520 fld fs0,72(a0) + 800176ec: 3430 fld fa2,104(s0) + 800176ee: 2064 fld fs1,192(s0) + 800176f0: 6425 lui s0,0x9 + 800176f2: 003a c.slli zero,0xe + 800176f4: 0000 unimp + 800176f6: 0000 unimp + 800176f8: 2d25 addiw s10,s10,9 + 800176fa: 2e2a fld ft8,136(sp) + 800176fc: 732a ld t1,168(sp) + 800176fe: 2520 fld fs0,72(a0) + 80017700: 3430 fld fa2,104(s0) + 80017702: 2064 fld fs1,192(s0) + 80017704: 2520 fld fs0,72(a0) + 80017706: 3430 fld fa2,104(s0) + 80017708: 2064 fld fs1,192(s0) + 8001770a: 2520 fld fs0,72(a0) + 8001770c: 3430 fld fa2,104(s0) + 8001770e: 2064 fld fs1,192(s0) + 80017710: 6425 lui s0,0x9 + 80017712: 000a c.slli zero,0x2 + 80017714: 0000 unimp + 80017716: 0000 unimp + 80017718: 6974 ld a3,208(a0) + 8001771a: 656d lui a0,0x1b + 8001771c: 0072 c.slli zero,0x1c + 8001771e: 0000 unimp + 80017720: 2d25 addiw s10,s10,9 + 80017722: 2e2a fld ft8,136(sp) + 80017724: 70202073 csrr zero,0x702 + 80017728: 7265 lui tp,0xffff9 + 8001772a: 6f69 lui t5,0x1a + 8001772c: 6964 ld s1,208(a0) + 8001772e: 20202063 0x20202063 + 80017732: 6974 ld a3,208(a0) + 80017734: 656d lui a0,0x1b + 80017736: 2074756f jal a0,8005f13c <__bss_end+0x33eb8> + 8001773a: 2020 fld fs0,64(s0) + 8001773c: 2020 fld fs0,64(s0) + 8001773e: 2020 fld fs0,64(s0) + 80017740: 6c66 ld s8,88(sp) + 80017742: 6761 lui a4,0x18 + 80017744: 000a c.slli zero,0x2 + 80017746: 0000 unimp + 80017748: 2d20 fld fs0,88(a0) + 8001774a: 2d2d addiw s10,s10,11 + 8001774c: 2d2d addiw s10,s10,11 + 8001774e: 2d2d addiw s10,s10,11 + 80017750: 2d2d addiw s10,s10,11 + 80017752: 202d 0x202d + 80017754: 2d2d addiw s10,s10,11 + 80017756: 2d2d addiw s10,s10,11 + 80017758: 2d2d addiw s10,s10,11 + 8001775a: 2d2d addiw s10,s10,11 + 8001775c: 2d2d addiw s10,s10,11 + 8001775e: 2d20 fld fs0,88(a0) + 80017760: 2d2d addiw s10,s10,11 + 80017762: 2d2d addiw s10,s10,11 + 80017764: 2d2d addiw s10,s10,11 + 80017766: 2d2d addiw s10,s10,11 + 80017768: 2d2d addiw s10,s10,11 + 8001776a: 000a c.slli zero,0x2 + 8001776c: 0000 unimp + 8001776e: 0000 unimp + 80017770: 2d25 addiw s10,s10,9 + 80017772: 2e2a fld ft8,136(sp) + 80017774: 732a ld t1,168(sp) + 80017776: 3020 fld fs0,96(s0) + 80017778: 2578 fld fa4,200(a0) + 8001777a: 3830 fld fa2,112(s0) + 8001777c: 2078 fld fa4,192(s0) + 8001777e: 7830 ld a2,112(s0) + 80017780: 3025 0x3025 + 80017782: 7838 ld a4,112(s0) + 80017784: 0020 addi s0,sp,8 + 80017786: 0000 unimp + 80017788: 6361 lui t1,0x18 + 8001778a: 6974 ld a3,208(a0) + 8001778c: 6176 ld sp,344(sp) + 8001778e: 6574 ld a3,200(a0) + 80017790: 0a64 addi s1,sp,284 + 80017792: 0000 unimp + 80017794: 0000 unimp + 80017796: 0000 unimp + 80017798: 6564 ld s1,200(a0) + 8001779a: 6361 lui t1,0x18 + 8001779c: 6974 ld a3,208(a0) + 8001779e: 6176 ld sp,344(sp) + 800177a0: 6574 ld a3,200(a0) + 800177a2: 0a64 addi s1,sp,284 + 800177a4: 0000 unimp + 800177a6: 0000 unimp + 800177a8: 72727563 bgeu tp,t2,80017ed2 + 800177ac: 6e65 lui t3,0x19 + 800177ae: 2074 fld fa3,192(s0) + 800177b0: 6974 ld a3,208(a0) + 800177b2: 303a6b63 bltu s4,gp,80017ac8 + 800177b6: 2578 fld fa4,200(a0) + 800177b8: 3830 fld fa2,112(s0) + 800177ba: 0a78 addi a4,sp,284 + 800177bc: 0000 unimp + 800177be: 0000 unimp + 800177c0: 72616843 fmadd.d fa6,ft2,ft6,fa4,unknown + 800177c4: 6361 lui t1,0x18 + 800177c6: 6574 ld a3,200(a0) + 800177c8: 2072 fld ft0,280(sp) + 800177ca: 6544 ld s1,136(a0) + 800177cc: 6976 ld s2,344(sp) + 800177ce: 00006563 bltu zero,zero,800177d8 + 800177d2: 0000 unimp + 800177d4: 0000 unimp + 800177d6: 0000 unimp + 800177d8: 6c42 ld s8,16(sp) + 800177da: 206b636f jal t1,800cd9e0 <__bss_end+0xa275c> + 800177de: 6544 ld s1,136(a0) + 800177e0: 6976 ld s2,344(sp) + 800177e2: 00006563 bltu zero,zero,800177ec + 800177e6: 0000 unimp + 800177e8: 654e ld a0,208(sp) + 800177ea: 7774 ld a3,232(a4) + 800177ec: 206b726f jal tp,800ce9f2 <__bss_end+0xa376e> + 800177f0: 6e49 lui t3,0x12 + 800177f2: 6574 ld a3,200(a0) + 800177f4: 6672 ld a2,280(sp) + 800177f6: 6361 lui t1,0x18 + 800177f8: 0065 c.nop 25 + 800177fa: 0000 unimp + 800177fc: 0000 unimp + 800177fe: 0000 unimp + 80017800: 544d li s0,-13 + 80017802: 2044 fld fs1,128(s0) + 80017804: 6544 ld s1,136(a0) + 80017806: 6976 ld s2,344(sp) + 80017808: 00006563 bltu zero,zero,80017812 + 8001780c: 0000 unimp + 8001780e: 0000 unimp + 80017810: 204e4143 fmadd.s ft2,ft8,ft4,ft4,rmm + 80017814: 6544 ld s1,136(a0) + 80017816: 6976 ld s2,344(sp) + 80017818: 00006563 bltu zero,zero,80017822 + 8001781c: 0000 unimp + 8001781e: 0000 unimp + 80017820: 5452 lw s0,52(sp) + 80017822: 00000043 fmadd.s ft0,ft0,ft0,ft0,rne + 80017826: 0000 unimp + 80017828: 6e756f53 0x6e756f53 + 8001782c: 2064 fld fs1,192(s0) + 8001782e: 6544 ld s1,136(a0) + 80017830: 6976 ld s2,344(sp) + 80017832: 00006563 bltu zero,zero,8001783c + 80017836: 0000 unimp + 80017838: 70617247 fmsub.s ft4,ft2,ft6,fa4 + 8001783c: 6968 ld a0,208(a0) + 8001783e: 65442063 0x65442063 + 80017842: 6976 ld s2,344(sp) + 80017844: 00006563 bltu zero,zero,8001784e + 80017848: 3249 addiw tp,tp,-14 + 8001784a: 75422043 0x75422043 + 8001784e: 53550073 0x53550073 + 80017852: 2042 fld ft0,16(sp) + 80017854: 76616c53 0x76616c53 + 80017858: 2065 0x2065 + 8001785a: 6544 ld s1,136(a0) + 8001785c: 6976 ld s2,344(sp) + 8001785e: 00006563 bltu zero,zero,80017868 + 80017862: 0000 unimp + 80017864: 0000 unimp + 80017866: 0000 unimp + 80017868: 5355 li t1,-11 + 8001786a: 2042 fld ft0,16(sp) + 8001786c: 6f48 ld a0,152(a4) + 8001786e: 42207473 csrrci s0,0x422,0 + 80017872: 7375 lui t1,0xffffd + 80017874: 0000 unimp + 80017876: 0000 unimp + 80017878: 20495053 0x20495053 + 8001787c: 7542 ld a0,48(sp) + 8001787e: 50530073 0x50530073 + 80017882: 2049 0x2049 + 80017884: 6544 ld s1,136(a0) + 80017886: 6976 ld s2,344(sp) + 80017888: 00006563 bltu zero,zero,80017892 + 8001788c: 0000 unimp + 8001788e: 0000 unimp + 80017890: 4f494453 0x4f494453 + 80017894: 4220 lw s0,64(a2) + 80017896: 7375 lui t1,0xffffd + ... + 800178a0: 4d50 lw a2,28(a0) + 800178a2: 5020 lw s0,96(s0) + 800178a4: 64756573 csrrsi a0,0x647,10 + 800178a8: 6544206f j 80059efc <__bss_end+0x2ec78> + 800178ac: 6976 ld s2,344(sp) + 800178ae: 00006563 bltu zero,zero,800178b8 + 800178b2: 0000 unimp + 800178b4: 0000 unimp + 800178b6: 0000 unimp + 800178b8: 6950 ld a2,144(a0) + 800178ba: 6570 ld a2,200(a0) + 800178bc: 0000 unimp + 800178be: 0000 unimp + 800178c0: 6f50 ld a2,152(a4) + 800178c2: 7472 ld s0,312(sp) + 800178c4: 6c61 lui s8,0x18 + 800178c6: 4420 lw s0,72(s0) + 800178c8: 7665 lui a2,0xffff9 + 800178ca: 6369 lui t1,0x1a + 800178cc: 0065 c.nop 25 + 800178ce: 0000 unimp + 800178d0: 6954 ld a3,144(a0) + 800178d2: 656d lui a0,0x1b + 800178d4: 2072 fld ft0,280(sp) + 800178d6: 6544 ld s1,136(a0) + 800178d8: 6976 ld s2,344(sp) + 800178da: 00006563 bltu zero,zero,800178e4 + 800178de: 0000 unimp + 800178e0: 694d lui s2,0x13 + 800178e2: 6c656373 csrrsi t1,0x6c6,10 + 800178e6: 616c ld a1,192(a0) + 800178e8: 656e ld a0,216(sp) + 800178ea: 2073756f jal a0,8004f2f0 <__bss_end+0x2406c> + 800178ee: 6544 ld s1,136(a0) + 800178f0: 6976 ld s2,344(sp) + 800178f2: 00006563 bltu zero,zero,800178fc + 800178f6: 0000 unimp + 800178f8: 736e6553 0x736e6553 + 800178fc: 4420726f jal tp,8001ed3e <__stack_cpu0+0xd7e> + 80017900: 7665 lui a2,0xffff9 + 80017902: 6369 lui t1,0x1a + 80017904: 0065 c.nop 25 + 80017906: 0000 unimp + 80017908: 6f54 ld a3,152(a4) + 8001790a: 6375 lui t1,0x1d + 8001790c: 2068 fld fa0,192(s0) + 8001790e: 6544 ld s1,136(a0) + 80017910: 6976 ld s2,344(sp) + 80017912: 00006563 bltu zero,zero,8001791c + 80017916: 0000 unimp + 80017918: 6850 ld a2,144(s0) + 8001791a: 2079 0x2079 + 8001791c: 6544 ld s1,136(a0) + 8001791e: 6976 ld s2,344(sp) + 80017920: 00006563 bltu zero,zero,8001792a + 80017924: 0000 unimp + 80017926: 0000 unimp + 80017928: 6e55 lui t3,0x15 + 8001792a: 776f6e6b 0x776f6e6b + 8001792e: 006e c.slli zero,0x1b + 80017930: 6564 ld s1,200(a0) + 80017932: 6976 ld s2,344(sp) + 80017934: 00006563 bltu zero,zero,8001793e + 80017938: 2d25 addiw s10,s10,9 + 8001793a: 2e2a fld ft8,136(sp) + 8001793c: 20202073 csrr zero,hedeleg + 80017940: 2020 fld fs0,64(s0) + 80017942: 2020 fld fs0,64(s0) + 80017944: 2020 fld fs0,64(s0) + 80017946: 7974 ld a3,240(a0) + 80017948: 6570 ld a2,200(a0) + 8001794a: 2020 fld fs0,64(s0) + 8001794c: 2020 fld fs0,64(s0) + 8001794e: 2020 fld fs0,64(s0) + 80017950: 2020 fld fs0,64(s0) + 80017952: 7220 ld s0,96(a2) + 80017954: 6665 lui a2,0x19 + 80017956: 6320 ld s0,64(a4) + 80017958: 746e756f jal a0,800ff09e <__bss_end+0xd3e1a> + 8001795c: 000a c.slli zero,0x2 + 8001795e: 0000 unimp + 80017960: 2d20 fld fs0,88(a0) + 80017962: 2d2d addiw s10,s10,11 + 80017964: 2d2d addiw s10,s10,11 + 80017966: 2d2d addiw s10,s10,11 + 80017968: 2d2d addiw s10,s10,11 + 8001796a: 2d2d addiw s10,s10,11 + 8001796c: 2d2d addiw s10,s10,11 + 8001796e: 2d2d addiw s10,s10,11 + 80017970: 2d2d addiw s10,s10,11 + 80017972: 2d2d addiw s10,s10,11 + 80017974: 202d 0x202d + 80017976: 2d2d addiw s10,s10,11 + 80017978: 2d2d addiw s10,s10,11 + 8001797a: 2d2d addiw s10,s10,11 + 8001797c: 2d2d addiw s10,s10,11 + 8001797e: 2d2d addiw s10,s10,11 + 80017980: 000a c.slli zero,0x2 + 80017982: 0000 unimp + 80017984: 0000 unimp + 80017986: 0000 unimp + 80017988: 2d25 addiw s10,s10,9 + 8001798a: 2e2a fld ft8,136(sp) + 8001798c: 732a ld t1,168(sp) + 8001798e: 2520 fld fs0,72(a0) + 80017990: 322d addiw tp,tp,-21 + 80017992: 7330 ld a2,96(a4) + 80017994: 2520 fld fs0,72(a0) + 80017996: 382d addiw a6,a6,-21 + 80017998: 0a64 addi s1,sp,284 + 8001799a: 0000 unimp + 8001799c: 0000 unimp + 8001799e: 0000 unimp + 800179a0: 2d2d addiw s10,s10,11 + 800179a2: 7546 ld a0,112(sp) + 800179a4: 636e ld t1,216(sp) + 800179a6: 6974 ld a3,208(a0) + 800179a8: 4c206e6f jal t3,8001de6a <__global_pointer$+0x36ca> + 800179ac: 7369 lui t1,0xffffa + 800179ae: 3a74 fld fa3,240(a2) + 800179b0: 000a c.slli zero,0x2 + 800179b2: 0000 unimp + 800179b4: 0000 unimp + 800179b6: 0000 unimp + 800179b8: 5f5f 0000 0000 0x5f5f + 800179be: 0000 unimp + 800179c0: 2d25 addiw s10,s10,9 + 800179c2: 3631 addiw a2,a2,-20 + 800179c4: 2d2d2073 csrs 0x2d2,s10 + 800179c8: 2520 fld fs0,72(a0) + 800179ca: 00000a73 0xa73 + 800179ce: 0000 unimp + 800179d0: 69726573 csrrsi a0,0x697,4 + 800179d4: 6c61 lui s8,0x18 + 800179d6: 2120 fld fs0,64(a0) + 800179d8: 203d 0x203d + 800179da: 5452 lw s0,52(sp) + 800179dc: 4e5f 4c55 004c 0x4c4c554e5f + 800179e2: 0000 unimp + 800179e4: 0000 unimp + 800179e6: 0000 unimp + 800179e8: 7872 ld a6,312(sp) + 800179ea: 665f 6669 206f 0x206f6669665f + 800179f0: 3d21 addiw s10,s10,-24 + 800179f2: 5220 lw s0,96(a2) + 800179f4: 5f54 lw a3,60(a4) + 800179f6: 554e lw a0,240(sp) + 800179f8: 4c4c lw a1,28(s0) + 800179fa: 0000 unimp + 800179fc: 0000 unimp + 800179fe: 0000 unimp + 80017a00: 7874 ld a3,240(s0) + 80017a02: 2120 fld fs0,64(a0) + 80017a04: 203d 0x203d + 80017a06: 5452 lw s0,52(sp) + 80017a08: 4e5f 4c55 004c 0x4c4c554e5f + 80017a0e: 0000 unimp + 80017a10: 552f575b 0x552f575b + 80017a14: 5241 li tp,-16 + 80017a16: 5d54 lw a3,60(a0) + 80017a18: 0020 addi s0,sp,8 + 80017a1a: 0000 unimp + 80017a1c: 0000 unimp + 80017a1e: 0000 unimp + 80017a20: 6e726157 0x6e726157 + 80017a24: 6e69 lui t3,0x1a + 80017a26: 54203a67 0x54203a67 + 80017a2a: 6568 ld a0,200(a0) + 80017a2c: 6572 ld a0,280(sp) + 80017a2e: 6920 ld s0,80(a0) + 80017a30: 6f6e2073 csrs 0x6f6,t3 + 80017a34: 6520 ld s0,72(a0) + 80017a36: 6f6e ld t5,216(sp) + 80017a38: 6775 lui a4,0x1d + 80017a3a: 2068 fld fa0,192(s0) + 80017a3c: 7562 ld a0,56(sp) + 80017a3e: 6666 ld a2,88(sp) + 80017a40: 7265 lui tp,0xffff9 + 80017a42: 6620 ld s0,72(a2) + 80017a44: 7320726f jal tp,8001f176 <__stack_cpu0+0x11b6> + 80017a48: 7661 lui a2,0xffff8 + 80017a4a: 6e69 lui t3,0x1a + 80017a4c: 61642067 0x61642067 + 80017a50: 6174 ld a3,192(a0) + 80017a52: 202c fld fa1,64(s0) + 80017a54: 6c70 ld a2,216(s0) + 80017a56: 6165 addi sp,sp,112 + 80017a58: 69206573 csrrsi a0,0x692,0 + 80017a5c: 636e ld t1,216(sp) + 80017a5e: 6572 ld a0,280(sp) + 80017a60: 7361 lui t1,0xffff8 + 80017a62: 2065 0x2065 + 80017a64: 6874 ld a3,208(s0) + 80017a66: 2065 0x2065 + 80017a68: 5452 lw s0,52(sp) + 80017a6a: 535f 5245 4149 0x41495245535f + 80017a70: 5f4c lw a1,60(a4) + 80017a72: 4252 lw tp,20(sp) + 80017a74: 425f 4655 5a53 0x5a534655425f + 80017a7a: 6f20 ld s0,88(a4) + 80017a7c: 7470 ld a2,232(s0) + 80017a7e: 6f69 lui t5,0x1a + 80017a80: 2e6e fld ft8,216(sp) + 80017a82: 0000 unimp + 80017a84: 0000 unimp + 80017a86: 0000 unimp + 80017a88: 000a c.slli zero,0x2 + 80017a8a: 0000 unimp + 80017a8c: 0000 unimp + 80017a8e: 0000 unimp + 80017a90: 656c ld a1,200(a0) + 80017a92: 206e fld ft0,216(sp) + 80017a94: 3d3c fld fa5,120(a0) + 80017a96: 7220 ld s0,96(a2) + 80017a98: 5f74 lw a3,124(a4) + 80017a9a: 6d64 ld s1,216(a0) + 80017a9c: 5f61 li t5,-8 + 80017a9e: 636c6163 bltu s8,s6,800180c0 + 80017aa2: 725f 6365 6576 0x65766365725f + 80017aa8: 5f64 lw s1,124(a4) + 80017aaa: 656c ld a1,200(a0) + 80017aac: 286e fld fa6,216(sp) + 80017aae: 69726573 csrrsi a0,0x697,4 + 80017ab2: 6c61 lui s8,0x18 + 80017ab4: 0029 c.nop 10 + 80017ab6: 0000 unimp + 80017ab8: 7328 ld a0,96(a4) + 80017aba: 7265 lui tp,0xffff9 + 80017abc: 6169 addi sp,sp,208 + 80017abe: 206c fld fa1,192(s0) + 80017ac0: 3d21 addiw s10,s10,-24 + 80017ac2: 5220 lw s0,96(a2) + 80017ac4: 5f54 lw a3,60(a4) + 80017ac6: 554e lw a0,240(sp) + 80017ac8: 4c4c lw a1,28(s0) + 80017aca: 2029 0x2029 + 80017acc: 2626 fld fa2,72(sp) + 80017ace: 2820 fld fs0,80(s0) + 80017ad0: 6164 ld s1,192(a0) + 80017ad2: 6174 ld a3,192(a0) + 80017ad4: 2120 fld fs0,64(a0) + 80017ad6: 203d 0x203d + 80017ad8: 5452 lw s0,52(sp) + 80017ada: 4e5f 4c55 294c 0x294c4c554e5f + ... + 80017ae8: 7872 ld a6,312(sp) + 80017aea: 645f 616d 2120 0x2120616d645f + 80017af0: 203d 0x203d + 80017af2: 5452 lw s0,52(sp) + 80017af4: 4e5f 4c55 004c 0x4c4c554e5f + 80017afa: 0000 unimp + 80017afc: 0000 unimp + 80017afe: 0000 unimp + 80017b00: 69726573 csrrsi a0,0x697,4 + 80017b04: 6c61 lui s8,0x18 + 80017b06: 3e2d addiw t3,t3,-21 + 80017b08: 2d73706f j 8004f5de <__bss_end+0x2435a> + 80017b0c: 643e ld s0,456(sp) + 80017b0e: 616d addi sp,sp,240 + 80017b10: 745f 6172 736e 0x736e6172745f + 80017b16: 696d lui s2,0x1b + 80017b18: 2074 fld fa3,192(s0) + 80017b1a: 3d21 addiw s10,s10,-24 + 80017b1c: 5220 lw s0,96(a2) + 80017b1e: 5f54 lw a3,60(a4) + 80017b20: 554e lw a0,240(sp) + 80017b22: 4c4c lw a1,28(s0) + 80017b24: 0000 unimp + 80017b26: 0000 unimp + 80017b28: 6564 ld s1,200(a0) + 80017b2a: 2076 fld ft0,344(sp) + 80017b2c: 3d21 addiw s10,s10,-24 + 80017b2e: 5220 lw s0,96(a2) + 80017b30: 5f54 lw a3,60(a4) + 80017b32: 554e lw a0,240(sp) + 80017b34: 4c4c lw a1,28(s0) + 80017b36: 0000 unimp + 80017b38: 7874 ld a3,240(s0) + 80017b3a: 665f 6669 206f 0x206f6669665f + 80017b40: 3d21 addiw s10,s10,-24 + 80017b42: 5220 lw s0,96(a2) + 80017b44: 5f54 lw a3,60(a4) + 80017b46: 554e lw a0,240(sp) + 80017b48: 4c4c lw a1,28(s0) + 80017b4a: 0000 unimp + 80017b4c: 0000 unimp + 80017b4e: 0000 unimp + 80017b50: 7874 ld a3,240(s0) + 80017b52: 645f 616d 2120 0x2120616d645f + 80017b58: 203d 0x203d + 80017b5a: 5452 lw s0,52(sp) + 80017b5c: 4e5f 4c55 004c 0x4c4c554e5f + 80017b62: 0000 unimp + 80017b64: 0000 unimp + 80017b66: 0000 unimp + 80017b68: 69726573 csrrsi a0,0x697,4 + 80017b6c: 6c61 lui s8,0x18 + 80017b6e: 3e2d addiw t3,t3,-21 + 80017b70: 6170 ld a2,192(a0) + 80017b72: 6572 ld a0,280(sp) + 80017b74: 746e ld s0,248(sp) + 80017b76: 722e ld tp,232(sp) + 80017b78: 5f78 lw a4,124(a4) + 80017b7a: 6e69 lui t3,0x1a + 80017b7c: 6964 ld s1,208(a0) + 80017b7e: 65746163 bltu s0,s7,800181c0 + 80017b82: 2120 fld fs0,64(a0) + 80017b84: 203d 0x203d + 80017b86: 5452 lw s0,52(sp) + 80017b88: 4e5f 4c55 004c 0x4c4c554e5f + 80017b8e: 0000 unimp + 80017b90: 7571 lui a0,0xffffc + 80017b92: 7565 lui a0,0xffff9 + 80017b94: 2065 0x2065 + 80017b96: 3d21 addiw s10,s10,-24 + 80017b98: 5220 lw s0,96(a2) + 80017b9a: 5f54 lw a3,60(a4) + 80017b9c: 554e lw a0,240(sp) + 80017b9e: 4c4c lw a1,28(s0) + ... + 80017ba8: 657a6973 csrrsi s2,0x657,20 + 80017bac: 3e20 fld fs0,120(a2) + 80017bae: 3020 fld fs0,96(s0) + ... + 80017bb8: 7571 lui a0,0xffffc + 80017bba: 7565 lui a0,0xffff9 + 80017bbc: 2d65 addiw s10,s10,25 + 80017bbe: 6d3e ld s10,456(sp) + 80017bc0: 6761 lui a4,0x18 + 80017bc2: 6369 lui t1,0x1a + 80017bc4: 3d20 fld fs0,120(a0) + 80017bc6: 203d 0x203d + 80017bc8: 4144 lw s1,4(a0) + 80017bca: 4154 lw a3,4(a0) + 80017bcc: 5551 li a0,-12 + 80017bce: 5545 li a0,-15 + 80017bd0: 5f45 li t5,-15 + 80017bd2: 414d li sp,19 + 80017bd4: 00434947 fmsub.s fs2,ft6,ft4,ft0,rmm + 80017bd8: 7546 ld a0,112(sp) + 80017bda: 636e ld t1,216(sp) + 80017bdc: 6974 ld a3,208(a0) + 80017bde: 255b6e6f jal t3,800ce632 <__bss_end+0xa33ae> + 80017be2: 73205d73 csrrwi s10,0x732,0 + 80017be6: 6168 ld a0,192(a0) + 80017be8: 6c6c ld a1,216(s0) + 80017bea: 6e20 ld s0,88(a2) + 80017bec: 6220746f jal s0,8001f20e <__stack_cpu0+0x124e> + 80017bf0: 2065 0x2065 + 80017bf2: 7375 lui t1,0xffffd + 80017bf4: 6465 lui s0,0x19 + 80017bf6: 6920 ld s0,80(a0) + 80017bf8: 206e fld ft0,216(sp) + 80017bfa: 5349 li t1,-14 + 80017bfc: 0a52 slli s4,s4,0x14 + 80017bfe: 0000 unimp + 80017c00: 0030 addi a2,sp,8 + 80017c02: 0000 unimp + 80017c04: 0000 unimp + 80017c06: 0000 unimp + 80017c08: 6164 ld s1,192(a0) + 80017c0a: 6174 ld a3,192(a0) + 80017c0c: 705f 7274 2120 0x21207274705f + 80017c12: 203d 0x203d + 80017c14: 5452 lw s0,52(sp) + 80017c16: 4e5f 4c55 004c 0x4c4c554e5f + 80017c1c: 0000 unimp + 80017c1e: 0000 unimp + 80017c20: 657a6973 csrrsi s2,0x657,20 + 80017c24: 2120 fld fs0,64(a0) + 80017c26: 203d 0x203d + 80017c28: 5452 lw s0,52(sp) + 80017c2a: 4e5f 4c55 004c 0x4c4c554e5f + 80017c30: 706d6f63 bltu s10,t1,8001834e <__FUNCTION__.2652+0xe> + 80017c34: 656c ld a1,200(a0) + 80017c36: 6974 ld a3,208(a0) + 80017c38: 21206e6f jal t3,8001de4a <__global_pointer$+0x36aa> + 80017c3c: 203d 0x203d + 80017c3e: 5452 lw s0,52(sp) + 80017c40: 4e5f 4c55 004c 0x4c4c554e5f + 80017c46: 0000 unimp + 80017c48: 7472 ld s0,312(sp) + 80017c4a: 6c5f 7369 5f74 0x5f7473696c5f + 80017c50: 7369 lui t1,0xffffa + 80017c52: 6d65 lui s10,0x19 + 80017c54: 7470 ld a2,232(s0) + 80017c56: 2879 addiw a6,a6,30 + 80017c58: 2826 fld fa6,72(sp) + 80017c5a: 706d6f63 bltu s10,t1,80018378 <__FUNCTION__.2687> + 80017c5e: 656c ld a1,200(a0) + 80017c60: 6974 ld a3,208(a0) + 80017c62: 3e2d6e6f jal t3,800ee044 <__bss_end+0xc2dc0> + 80017c66: 70737573 csrrci a0,0x707,6 + 80017c6a: 6e65 lui t3,0x19 + 80017c6c: 6564 ld s1,200(a0) + 80017c6e: 5f64 lw s1,124(a4) + 80017c70: 696c ld a1,208(a0) + 80017c72: 29297473 csrrci s0,0x292,18 + 80017c76: 0000 unimp + 80017c78: 7546 ld a0,112(sp) + 80017c7a: 636e ld t1,216(sp) + 80017c7c: 6974 ld a3,208(a0) + 80017c7e: 255b6e6f jal t3,800ce6d2 <__bss_end+0xa344e> + 80017c82: 73205d73 csrrwi s10,0x732,0 + 80017c86: 6168 ld a0,192(a0) + 80017c88: 6c6c ld a1,216(s0) + 80017c8a: 6e20 ld s0,88(a2) + 80017c8c: 6220746f jal s0,8001f2ae <__stack_cpu0+0x12ee> + 80017c90: 2065 0x2065 + 80017c92: 7375 lui t1,0xffffd + 80017c94: 6465 lui s0,0x19 + 80017c96: 6920 ld s0,80(a0) + 80017c98: 206e fld ft0,216(sp) + 80017c9a: 5349 li t1,-14 + 80017c9c: 0a52 slli s4,s4,0x14 + 80017c9e: 0000 unimp + 80017ca0: 0030 addi a2,sp,8 + 80017ca2: 0000 unimp + 80017ca4: 0000 unimp + 80017ca6: 0000 unimp + 80017ca8: 6970 ld a2,208(a0) + 80017caa: 206e fld ft0,216(sp) + 80017cac: 3d21 addiw s10,s10,-24 + 80017cae: 5220 lw s0,96(a2) + 80017cb0: 5f54 lw a3,60(a4) + 80017cb2: 554e lw a0,240(sp) + 80017cb4: 4c4c lw a1,28(s0) + 80017cb6: 0000 unimp + 80017cb8: 685f 5f77 6970 0x69705f77685f + 80017cbe: 2e6e fld ft8,216(sp) + 80017cc0: 2073706f j 8004f6c6 <__bss_end+0x24442> + 80017cc4: 3d21 addiw s10,s10,-24 + 80017cc6: 5220 lw s0,96(a2) + 80017cc8: 5f54 lw a3,60(a4) + 80017cca: 554e lw a0,240(sp) + 80017ccc: 4c4c lw a1,28(s0) + 80017cce: 0000 unimp + 80017cd0: 616e ld sp,216(sp) + 80017cd2: 656d lui a0,0x1b + 80017cd4: 205d305b 0x205d305b + 80017cd8: 3d3d addiw s10,s10,-17 + 80017cda: 2720 fld fs0,72(a4) + 80017cdc: 2750 fld fa2,136(a4) + 80017cde: 0000 unimp + 80017ce0: 442f455b 0x442f455b + 80017ce4: 5346 lw t1,112(sp) + 80017ce6: 205d 0x205d + ... + 80017cf0: 6854 ld a3,144(s0) + 80017cf2: 7265 lui tp,0xffff9 + 80017cf4: 2065 0x2065 + 80017cf6: 7369 lui t1,0xffffa + 80017cf8: 6e20 ld s0,88(a2) + 80017cfa: 7073206f j 8004ac00 <__bss_end+0x1f97c> + 80017cfe: 6361 lui t1,0x18 + 80017d00: 2065 0x2065 + 80017d02: 6f74 ld a3,216(a4) + 80017d04: 7220 ld s0,96(a2) + 80017d06: 6765 lui a4,0x19 + 80017d08: 7369 lui t1,0xffffa + 80017d0a: 6574 ld a3,200(a0) + 80017d0c: 2072 fld ft0,280(sp) + 80017d0e: 6874 ld a3,208(s0) + 80017d10: 7369 lui t1,0xffffa + 80017d12: 6620 ld s0,72(a2) + 80017d14: 6c69 lui s8,0x1a + 80017d16: 2065 0x2065 + 80017d18: 74737973 csrrci s2,0x747,6 + 80017d1c: 6d65 lui s10,0x19 + 80017d1e: 2820 fld fs0,80(s0) + 80017d20: 7325 lui t1,0xfffe9 + 80017d22: 2e29 addiw t3,t3,10 + 80017d24: 0000 unimp + 80017d26: 0000 unimp + 80017d28: 000a c.slli zero,0x2 + 80017d2a: 0000 unimp + 80017d2c: 0000 unimp + 80017d2e: 0000 unimp + 80017d30: 6170 ld a2,192(a0) + 80017d32: 6874 ld a3,208(s0) + 80017d34: 0000 unimp + 80017d36: 0000 unimp + 80017d38: 6170 ld a2,192(a0) + 80017d3a: 7472 ld s0,312(sp) + 80017d3c: 2120 fld fs0,64(a0) + 80017d3e: 203d 0x203d + 80017d40: 554e lw a0,240(sp) + 80017d42: 4c4c lw a1,28(s0) + 80017d44: 0000 unimp + 80017d46: 0000 unimp + 80017d48: 7562 ld a0,56(sp) + 80017d4a: 2066 fld ft0,88(sp) + 80017d4c: 3d21 addiw s10,s10,-24 + 80017d4e: 4e20 lw s0,88(a2) + 80017d50: 4c55 li s8,21 + 80017d52: 004c addi a1,sp,4 + 80017d54: 0000 unimp + 80017d56: 0000 unimp + 80017d58: 6f66 ld t5,88(sp) + 80017d5a: 6e75 lui t3,0x1d + 80017d5c: 2064 fld fs1,192(s0) + 80017d5e: 6170 ld a2,192(a0) + 80017d60: 7472 ld s0,312(sp) + 80017d62: 5d64255b 0x5d64255b + 80017d66: 202c fld fa1,64(s0) + 80017d68: 6562 ld a0,24(sp) + 80017d6a: 3a6e6967 0x3a6e6967 + 80017d6e: 2520 fld fs0,72(a0) + 80017d70: 2c64 fld fs1,216(s0) + 80017d72: 7320 ld s0,96(a4) + 80017d74: 7a69 lui s4,0xffffa + 80017d76: 3a65 addiw s4,s4,-7 + 80017d78: 0020 addi s0,sp,8 + 80017d7a: 0000 unimp + 80017d7c: 0000 unimp + 80017d7e: 0000 unimp + 80017d80: 000a424b fnmsub.s ft4,fs4,ft0,ft0,rmm + 80017d84: 0000 unimp + 80017d86: 0000 unimp + 80017d88: 6425 lui s0,0x9 + 80017d8a: 7325 lui t1,0xfffe9 + 80017d8c: 0000 unimp + 80017d8e: 0000 unimp + 80017d90: 424d li tp,19 + 80017d92: 000a c.slli zero,0x2 + 80017d94: 0000 unimp + 80017d96: 0000 unimp + 80017d98: 6425 lui s0,0x9 + 80017d9a: 252e fld fa0,200(sp) + 80017d9c: 2564 fld fs1,200(a0) + 80017d9e: 42470073 0x42470073 + 80017da2: 000a c.slli zero,0x2 + 80017da4: 0000 unimp + 80017da6: 0000 unimp + 80017da8: 0000002f 0x2f + 80017dac: 0000 unimp + 80017dae: 0000 unimp + 80017db0: 7665642f 0x7665642f + 80017db4: 0000 unimp + 80017db6: 0000 unimp + 80017db8: 6854 ld a3,144(s0) + 80017dba: 7265 lui tp,0xffff9 + 80017dbc: 2065 0x2065 + 80017dbe: 7369 lui t1,0xffffa + 80017dc0: 6e20 ld s0,88(a2) + 80017dc2: 7073206f j 8004acc8 <__bss_end+0x1fa44> + 80017dc6: 6361 lui t1,0x18 + 80017dc8: 2065 0x2065 + 80017dca: 6f74 ld a3,216(a4) + 80017dcc: 6d20 ld s0,88(a0) + 80017dce: 746e756f jal a0,800ff514 <__bss_end+0xd4290> + 80017dd2: 7420 ld s0,104(s0) + 80017dd4: 6968 ld a0,208(a0) + 80017dd6: 69662073 csrs 0x696,a2 + 80017dda: 656c ld a1,200(a0) + 80017ddc: 7320 ld s0,96(a4) + 80017dde: 7379 lui t1,0xffffe + 80017de0: 6574 ld a3,200(a0) + 80017de2: 206d 0x206d + 80017de4: 2528 fld fa0,72(a0) + 80017de6: 002e2973 csrrs s2,frm,t3 + 80017dea: 0000 unimp + 80017dec: 0000 unimp + 80017dee: 0000 unimp + 80017df0: 6544 ld s1,136(a0) + 80017df2: 6976 ld s2,344(sp) + 80017df4: 28206563 bltu zero,sp,8001807e + 80017df8: 7325 lui t1,0xfffe9 + 80017dfa: 2029 0x2029 + 80017dfc: 20736177 0x20736177 + 80017e00: 6f6e ld t5,216(sp) + 80017e02: 2074 fld fa3,192(s0) + 80017e04: 6f66 ld t5,88(sp) + 80017e06: 6e75 lui t3,0x1d + 80017e08: 0064 addi s1,sp,12 + 80017e0a: 0000 unimp + 80017e0c: 0000 unimp + 80017e0e: 0000 unimp + 80017e10: 6854 ld a3,144(s0) + 80017e12: 2065 0x2065 + 80017e14: 6966 ld s2,88(sp) + 80017e16: 656c ld a1,200(a0) + 80017e18: 7320 ld s0,96(a4) + 80017e1a: 7379 lui t1,0xffffe + 80017e1c: 6574 ld a3,200(a0) + 80017e1e: 206d 0x206d + 80017e20: 2528 fld fa0,72(a0) + 80017e22: 6d202973 csrr s2,0x6d2 + 80017e26: 2073666b 0x2073666b + 80017e2a: 7566 ld a0,120(sp) + 80017e2c: 636e ld t1,216(sp) + 80017e2e: 6974 ld a3,208(a0) + 80017e30: 77206e6f jal t3,8001e5a2 <__stack_cpu0+0x5e2> + 80017e34: 7361 lui t1,0xffff8 + 80017e36: 6e20 ld s0,88(a2) + 80017e38: 6920746f jal s0,8001f4ca <__stack_cpu0+0x150a> + 80017e3c: 706d c.lui zero,0xffffb + 80017e3e: 656c ld a1,200(a0) + 80017e40: 656d lui a0,0x1b + 80017e42: 746e ld s0,248(sp) + 80017e44: 0000 unimp + 80017e46: 0000 unimp + 80017e48: 6946 ld s2,80(sp) + 80017e4a: 656c ld a1,200(a0) + 80017e4c: 7320 ld s0,96(a4) + 80017e4e: 7379 lui t1,0xffffe + 80017e50: 6574 ld a3,200(a0) + 80017e52: 206d 0x206d + 80017e54: 2528 fld fa0,72(a0) + 80017e56: 77202973 csrr s2,0x772 + 80017e5a: 7361 lui t1,0xffff8 + 80017e5c: 6e20 ld s0,88(a2) + 80017e5e: 6620746f jal s0,8001f4c0 <__stack_cpu0+0x1500> + 80017e62: 646e756f jal a0,800ff4a8 <__bss_end+0xd4224> + 80017e66: 002e c.slli zero,0xb + 80017e68: 0000424b fnmsub.s ft4,ft0,ft0,ft0,rmm + 80017e6c: 0000 unimp + 80017e6e: 0000 unimp + 80017e70: 424d li tp,19 + 80017e72: 0000 unimp + 80017e74: 0000 unimp + 80017e76: 0000 unimp + 80017e78: 00004247 fmsub.s ft4,ft0,ft0,ft0,rmm + 80017e7c: 0000 unimp + 80017e7e: 0000 unimp + 80017e80: 6664 ld s1,200(a2) + 80017e82: 74735f73 csrrwi t5,0x747,6 + 80017e86: 7461 lui s0,0xffff8 + 80017e88: 7366 ld t1,120(sp) + 80017e8a: 6620 ld s0,72(a2) + 80017e8c: 6961 lui s2,0x18 + 80017e8e: 656c ld a1,200(a0) + 80017e90: 2e64 fld fs1,216(a2) + 80017e92: 000a c.slli zero,0x2 + 80017e94: 0000 unimp + 80017e96: 0000 unimp + 80017e98: 6964 ld s1,208(a0) + 80017e9a: 66206b73 csrrsi s6,0x662,0 + 80017e9e: 6572 ld a0,280(sp) + 80017ea0: 3a65 addiw s4,s4,-7 + 80017ea2: 2520 fld fs0,72(a0) + 80017ea4: 2e64 fld fs1,216(a2) + 80017ea6: 6425 lui s0,0x9 + 80017ea8: 2520 fld fs0,72(a0) + 80017eaa: 205b2073 csrs htvec,s6 + 80017eae: 6425 lui s0,0x9 + 80017eb0: 6220 ld s0,64(a2) + 80017eb2: 6f6c ld a1,216(a4) + 80017eb4: 202c6b63 bltu s8,sp,800180ca + 80017eb8: 6425 lui s0,0x9 + 80017eba: 6220 ld s0,64(a2) + 80017ebc: 7479 lui s0,0xffffe + 80017ebe: 7365 lui t1,0xffff9 + 80017ec0: 7020 ld s0,96(s0) + 80017ec2: 7265 lui tp,0xffff9 + 80017ec4: 6220 ld s0,64(a2) + 80017ec6: 6f6c ld a1,216(a4) + 80017ec8: 5d206b63 bltu zero,s2,8001849e <__FUNCTION__.2669+0x1e> + 80017ecc: 000a c.slli zero,0x2 + 80017ece: 0000 unimp + 80017ed0: 7325 lui t1,0xfffe9 + 80017ed2: 000a c.slli zero,0x2 + 80017ed4: 0000 unimp + 80017ed6: 0000 unimp + 80017ed8: 6664 ld s1,200(a2) + 80017eda: 6c612073 csrs 0x6c6,sp + 80017ede: 6572 ld a0,280(sp) + 80017ee0: 6461 lui s0,0x18 + 80017ee2: 2079 0x2079 + 80017ee4: 6e69 lui t3,0x1a + 80017ee6: 7469 lui s0,0xffffa + 80017ee8: 0a2e slli s4,s4,0xb + 80017eea: 0000 unimp + 80017eec: 0000 unimp + 80017eee: 0000 unimp + 80017ef0: 7366 ld t1,120(sp) + 80017ef2: 6f6c ld a1,216(a4) + 80017ef4: 00006b63 bltu zero,zero,80017f0a + 80017ef8: 6564 ld s1,200(a0) + 80017efa: 6676 ld a2,344(sp) + 80017efc: 00000073 ecall + 80017f00: 7665642f 0x7665642f + 80017f04: 0000 unimp + 80017f06: 0000 unimp + 80017f08: 0030 addi a2,sp,8 + 80017f0a: 0000 unimp + 80017f0c: 0000 unimp + 80017f0e: 0000 unimp + 80017f10: 442f455b 0x442f455b + 80017f14: 5346 lw t1,112(sp) + 80017f16: 205d 0x205d + ... + 80017f20: 4644 lw s1,12(a2) + 80017f22: 64662053 0x64662053 + 80017f26: 6e20 ld s0,88(a2) + 80017f28: 7765 lui a4,0xffff9 + 80017f2a: 6920 ld s0,80(a0) + 80017f2c: 61662073 csrs 0x616,a2 + 80017f30: 6c69 lui s8,0x1a + 80017f32: 6465 lui s0,0x19 + 80017f34: 2021 0x2021 + 80017f36: 6c756f43 0x6c756f43 + 80017f3a: 2064 fld fs1,192(s0) + 80017f3c: 6f6e ld t5,216(sp) + 80017f3e: 2074 fld fa3,192(s0) + 80017f40: 6f66 ld t5,88(sp) + 80017f42: 6e75 lui t3,0x1d + 80017f44: 2064 fld fs1,192(s0) + 80017f46: 6e61 lui t3,0x18 + 80017f48: 6520 ld s0,72(a0) + 80017f4a: 706d c.lui zero,0xffffb + 80017f4c: 7974 ld a3,240(a0) + 80017f4e: 6620 ld s0,72(a2) + 80017f50: 2064 fld fs1,192(s0) + 80017f52: 6e65 lui t3,0x19 + 80017f54: 7274 ld a3,224(a2) + 80017f56: 2e79 addiw t3,t3,30 + ... + 80017f60: 000a c.slli zero,0x2 + 80017f62: 0000 unimp + 80017f64: 0000 unimp + 80017f66: 0000 unimp + 80017f68: 6466 ld s0,88(sp) + 80017f6a: 2120 fld fs0,64(a0) + 80017f6c: 203d 0x203d + 80017f6e: 554e lw a0,240(sp) + 80017f70: 4c4c lw a1,28(s0) + 80017f72: 0000 unimp + 80017f74: 0000 unimp + 80017f76: 0000 unimp + 80017f78: 6966 ld s2,88(sp) + 80017f7a: 656c ld a1,200(a0) + 80017f7c: 616e ld sp,216(sp) + 80017f7e: 656d lui a0,0x1b + 80017f80: 2120 fld fs0,64(a0) + 80017f82: 203d 0x203d + 80017f84: 554e lw a0,240(sp) + 80017f86: 4c4c lw a1,28(s0) + ... + 80017f90: 7325 lui t1,0xfffe9 + 80017f92: 0073252f amoadd.w a0,t2,(t1) + 80017f96: 0000 unimp + 80017f98: 6466 ld s0,88(sp) + 80017f9a: 7420 ld s0,104(s0) + 80017f9c: 7079 c.lui zero,0xffffe + 80017f9e: 2065 0x2065 + 80017fa0: 2020 fld fs0,64(s0) + 80017fa2: 7220 ld s0,96(a2) + 80017fa4: 6665 lui a2,0x19 + 80017fa6: 6d20 ld s0,88(a0) + 80017fa8: 6761 lui a4,0x18 + 80017faa: 6369 lui t1,0x1a + 80017fac: 2020 fld fs0,64(s0) + 80017fae: 6170 ld a2,192(a0) + 80017fb0: 6874 ld a3,208(s0) + 80017fb2: 000a c.slli zero,0x2 + 80017fb4: 0000 unimp + 80017fb6: 0000 unimp + 80017fb8: 2d2d addiw s10,s10,11 + 80017fba: 2d20 fld fs0,88(a0) + 80017fbc: 2d2d addiw s10,s10,11 + 80017fbe: 2d2d addiw s10,s10,11 + 80017fc0: 202d 0x202d + 80017fc2: 2d20 fld fs0,88(a0) + 80017fc4: 2d2d addiw s10,s10,11 + 80017fc6: 2d20 fld fs0,88(a0) + 80017fc8: 2d2d addiw s10,s10,11 + 80017fca: 2d2d addiw s10,s10,11 + 80017fcc: 2d20 fld fs0,88(a0) + 80017fce: 2d2d addiw s10,s10,11 + 80017fd0: 2d2d addiw s10,s10,11 + 80017fd2: 0a2d addi s4,s4,11 + 80017fd4: 0000 unimp + 80017fd6: 0000 unimp + 80017fd8: 3225 addiw tp,tp,-23 + 80017fda: 2064 fld fs1,192(s0) + 80017fdc: 0000 unimp + 80017fde: 0000 unimp + 80017fe0: 6964 ld s1,208(a0) + 80017fe2: 0072 c.slli zero,0x1c + 80017fe4: 0000 unimp + 80017fe6: 0000 unimp + 80017fe8: 2d25 addiw s10,s10,9 + 80017fea: 73372e37 lui t3,0x73372 + 80017fee: 0020 addi s0,sp,8 + 80017ff0: 6966 ld s2,88(sp) + 80017ff2: 656c ld a1,200(a0) + 80017ff4: 0000 unimp + 80017ff6: 0000 unimp + 80017ff8: 6b636f73 csrrsi t5,0x6b6,6 + 80017ffc: 7465 lui s0,0xffff9 + 80017ffe: 0000 unimp + 80018000: 7375 lui t1,0xffffd + 80018002: 7265 lui tp,0xffff9 + 80018004: 0000 unimp + 80018006: 0000 unimp + 80018008: 6564 ld s1,200(a0) + 8001800a: 6976 ld s2,344(sp) + 8001800c: 00006563 bltu zero,zero,80018016 + 80018010: 6e75 lui t3,0x1d + 80018012: 776f6e6b 0x776f6e6b + 80018016: 006e c.slli zero,0x1b + 80018018: 2d25 addiw s10,s10,9 + 8001801a: 2e38 fld fa4,88(a2) + 8001801c: 7338 ld a4,96(a4) + 8001801e: 0020 addi s0,sp,8 + 80018020: 3325 addiw t1,t1,-23 + 80018022: 2064 fld fs1,192(s0) + 80018024: 0000 unimp + 80018026: 0000 unimp + 80018028: 3025 0x3025 + 8001802a: 7834 ld a3,112(s0) + 8001802c: 2020 fld fs0,64(s0) + 8001802e: 0000 unimp + 80018030: 7325 lui t1,0xfffe9 + 80018032: 000a c.slli zero,0x2 + 80018034: 0000 unimp + 80018036: 0000 unimp + 80018038: 0000002f 0x2f + 8001803c: 0000 unimp + 8001803e: 0000 unimp + 80018040: 442f455b 0x442f455b + 80018044: 5346 lw t1,112(sp) + 80018046: 205d 0x205d + ... + 80018050: 276e6163 bltu t3,s6,800182b2 + 80018054: 2074 fld fa3,192(s0) + 80018056: 6966 ld s2,88(sp) + 80018058: 646e ld s0,216(sp) + 8001805a: 6d20 ld s0,88(a0) + 8001805c: 746e756f jal a0,800ff7a2 <__bss_end+0xd451e> + 80018060: 6465 lui s0,0x19 + 80018062: 6620 ld s0,72(a2) + 80018064: 6c69 lui s8,0x1a + 80018066: 7365 lui t1,0xffff9 + 80018068: 7379 lui t1,0xffffe + 8001806a: 6574 ld a3,200(a0) + 8001806c: 206d 0x206d + 8001806e: 74206e6f jal t3,8001e7b0 <__stack_cpu0+0x7f0> + 80018072: 6968 ld a0,208(a0) + 80018074: 61702073 csrr zero,0x617 + 80018078: 6874 ld a3,208(s0) + 8001807a: 253a fld fa0,392(sp) + 8001807c: 00000073 ecall + 80018080: 000a c.slli zero,0x2 + 80018082: 0000 unimp + 80018084: 0000 unimp + 80018086: 0000 unimp + 80018088: 6874 ld a3,208(s0) + 8001808a: 2065 0x2065 + 8001808c: 6966 ld s2,88(sp) + 8001808e: 656c ld a1,200(a0) + 80018090: 74737973 csrrci s2,0x747,6 + 80018094: 6d65 lui s10,0x19 + 80018096: 6420 ld s0,72(s0) + 80018098: 6469 lui s0,0x1a + 8001809a: 276e fld fa4,216(sp) + 8001809c: 2074 fld fa3,192(s0) + 8001809e: 6d69 lui s10,0x1a + 800180a0: 6c70 ld a2,216(s0) + 800180a2: 6d65 lui s10,0x19 + 800180a4: 6e65 lui t3,0x19 + 800180a6: 2074 fld fa3,192(s0) + 800180a8: 6874 ld a3,208(s0) + 800180aa: 7369 lui t1,0xffffa + 800180ac: 6620 ld s0,72(a2) + 800180ae: 6e75 lui t3,0x1d + 800180b0: 6f697463 bgeu s2,s6,80018798 <__FUNCTION__.2659+0x70> + 800180b4: 006e c.slli zero,0x1b + 800180b6: 0000 unimp + 800180b8: 6944 ld s1,144(a0) + 800180ba: 6572 ld a0,280(sp) + 800180bc: 726f7463 bgeu t5,t1,800187e4 <__lowest_bit_bitmap+0x24> + 800180c0: 2079 0x2079 + 800180c2: 7325 lui t1,0xfffe9 + 800180c4: 0a3a slli s4,s4,0xe + 800180c6: 0000 unimp + 800180c8: 2d25 addiw s10,s10,9 + 800180ca: 3032 fld ft0,296(sp) + 800180cc: 00000073 ecall + 800180d0: 443c lw a5,72(s0) + 800180d2: 5249 li tp,-14 + 800180d4: 003e c.slli zero,0xf + 800180d6: 0000 unimp + 800180d8: 2d25 addiw s10,s10,9 + 800180da: 3532 fld fa0,296(sp) + 800180dc: 00000a73 0xa73 + 800180e0: 2d25 addiw s10,s10,9 + 800180e2: 3532 fld fa0,296(sp) + 800180e4: 756c ld a1,232(a0) + 800180e6: 000a c.slli zero,0x2 + 800180e8: 4142 lw sp,16(sp) + 800180ea: 2044 fld fs1,128(s0) + 800180ec: 6966 ld s2,88(sp) + 800180ee: 656c ld a1,200(a0) + 800180f0: 203a fld ft0,392(sp) + 800180f2: 7325 lui t1,0xfffe9 + 800180f4: 000a c.slli zero,0x2 + 800180f6: 0000 unimp + 800180f8: 6f4e ld t5,208(sp) + 800180fa: 7320 ld s0,96(a4) + 800180fc: 6375 lui t1,0x1d + 800180fe: 2068 fld fa0,192(s0) + 80018100: 6964 ld s1,208(a0) + 80018102: 6572 ld a0,280(sp) + 80018104: 726f7463 bgeu t5,t1,8001882c <__lowest_bit_bitmap+0x6c> + 80018108: 0a79 addi s4,s4,30 + 8001810a: 0000 unimp + 8001810c: 0000 unimp + 8001810e: 0000 unimp + 80018110: 6544 ld s1,136(a0) + 80018112: 656c ld a1,200(a0) + 80018114: 6574 ld a3,200(a0) + 80018116: 2520 fld fs0,72(a0) + 80018118: 61662073 csrs 0x616,a2 + 8001811c: 6c69 lui s8,0x1a + 8001811e: 6465 lui s0,0x19 + 80018120: 000a c.slli zero,0x2 + 80018122: 0000 unimp + 80018124: 0000 unimp + 80018126: 0000 unimp + 80018128: 6e65704f fnmadd.q ft0,fa0,ft6,fa3 + 8001812c: 2520 fld fs0,72(a0) + 8001812e: 61662073 csrs 0x616,a2 + 80018132: 6c69 lui s8,0x1a + 80018134: 6465 lui s0,0x19 + 80018136: 000a c.slli zero,0x2 + 80018138: 7325 lui t1,0xfffe9 + 8001813a: 0000 unimp + 8001813c: 0000 unimp + 8001813e: 0000 unimp + 80018140: 2074756f jal a0,8005fb46 <__bss_end+0x348c2> + 80018144: 6d20666f jal a2,8001e816 <__stack_cpu0+0x856> + 80018148: 6d65 lui s10,0x19 + 8001814a: 0a79726f jal tp,800af9f0 <__bss_end+0x8476c> + 8001814e: 0000 unimp + 80018150: 6552 ld a0,272(sp) + 80018152: 6461 lui s0,0x18 + 80018154: 2520 fld fs0,72(a0) + 80018156: 61662073 csrs 0x616,a2 + 8001815a: 6c69 lui s8,0x1a + 8001815c: 6465 lui s0,0x19 + 8001815e: 000a c.slli zero,0x2 + 80018160: 74697257 0x74697257 + 80018164: 2065 0x2065 + 80018166: 7325 lui t1,0xfffe9 + 80018168: 6620 ld s0,72(a2) + 8001816a: 6961 lui s2,0x18 + 8001816c: 656c ld a1,200(a0) + 8001816e: 0a64 addi s1,sp,284 + ... + 80018178: 74697257 0x74697257 + 8001817c: 2065 0x2065 + 8001817e: 6966 ld s2,88(sp) + 80018180: 656c ld a1,200(a0) + 80018182: 6420 ld s0,72(s0) + 80018184: 7461 lui s0,0xffff8 + 80018186: 2061 0x2061 + 80018188: 6166 ld sp,88(sp) + 8001818a: 6c69 lui s8,0x1a + 8001818c: 6465 lui s0,0x19 + 8001818e: 202c fld fa1,64(s0) + 80018190: 7265 lui tp,0xffff9 + 80018192: 6e72 ld t3,280(sp) + 80018194: 64253d6f jal s10,8006b7d6 <__bss_end+0x40552> + 80018198: 000a c.slli zero,0x2 + 8001819a: 0000 unimp + 8001819c: 0000 unimp + 8001819e: 0000 unimp + 800181a0: 6e65706f j 8006f886 <__bss_end+0x44602> + 800181a4: 2520 fld fs0,72(a0) + 800181a6: 61662073 csrs 0x616,a2 + 800181aa: 6c69 lui s8,0x1a + 800181ac: 6465 lui s0,0x19 + 800181ae: 000a c.slli zero,0x2 + 800181b0: 2e2e fld ft8,200(sp) + 800181b2: 0000 unimp + 800181b4: 0000 unimp + 800181b6: 0000 unimp + 800181b8: 002e c.slli zero,0xb + 800181ba: 0000 unimp + 800181bc: 0000 unimp + 800181be: 0000 unimp + 800181c0: 2074756f jal a0,8005fbc6 <__bss_end+0x34942> + 800181c4: 6d20666f jal a2,8001e896 <__stack_cpu0+0x8d6> + 800181c8: 6d65 lui s10,0x19 + 800181ca: 2179726f jal tp,800afbe0 <__bss_end+0x8495c> + 800181ce: 000a c.slli zero,0x2 + 800181d0: 6e65706f j 8006f8b6 <__bss_end+0x44632> + 800181d4: 6620 ld s0,72(a2) + 800181d6: 6c69 lui s8,0x1a + 800181d8: 3a65 addiw s4,s4,-7 + 800181da: 2520 fld fs0,72(a0) + 800181dc: 61662073 csrs 0x616,a2 + 800181e0: 6c69 lui s8,0x1a + 800181e2: 6465 lui s0,0x19 + 800181e4: 000a c.slli zero,0x2 + 800181e6: 0000 unimp + 800181e8: 79706f63 bltu zero,s7,80018986 <__fsym___cmd_ps_name+0x6> + 800181ec: 6620 ld s0,72(a2) + 800181ee: 6961 lui s2,0x18 + 800181f0: 656c ld a1,200(a0) + 800181f2: 2c64 fld fs1,216(s0) + 800181f4: 6220 ld s0,64(a2) + 800181f6: 6461 lui s0,0x18 + 800181f8: 2520 fld fs0,72(a0) + 800181fa: 00000a73 0xa73 + 800181fe: 0000 unimp + 80018200: 66207063 bgeu zero,sp,80018860 <__lowest_bit_bitmap+0xa0> + 80018204: 6961 lui s2,0x18 + 80018206: 646c ld a1,200(s0) + 80018208: 202c fld fa1,64(s0) + 8001820a: 64207063 bgeu zero,sp,8001884a <__lowest_bit_bitmap+0x8a> + 8001820e: 7269 lui tp,0xffffa + 80018210: 7420 ld s0,104(s0) + 80018212: 6966206f j 8007a8a8 <__bss_end+0x4f624> + 80018216: 656c ld a1,200(a0) + 80018218: 6920 ld s0,80(a0) + 8001821a: 6f6e2073 csrs 0x6f6,t3 + 8001821e: 2074 fld fa3,192(s0) + 80018220: 6570 ld a2,200(a0) + 80018222: 6d72 ld s10,280(sp) + 80018224: 7469 lui s0,0xffffa + 80018226: 6574 ld a3,200(a0) + 80018228: 2164 fld fs1,192(a0) + 8001822a: 000a c.slli zero,0x2 + 8001822c: 0000 unimp + 8001822e: 0000 unimp + 80018230: 6966 ld s2,88(sp) + 80018232: 656c ld a1,200(a0) + 80018234: 2120 fld fs0,64(a0) + 80018236: 203d 0x203d + 80018238: 5452 lw s0,52(sp) + 8001823a: 4e5f 4c55 004c 0x4c4c554e5f + 80018240: 6564 ld s1,200(a0) + 80018242: 5f76 lw t5,124(sp) + 80018244: 6469 lui s0,0x1a + 80018246: 2120 fld fs0,64(a0) + 80018248: 203d 0x203d + 8001824a: 5452 lw s0,52(sp) + 8001824c: 4e5f 4c55 004c 0x4c4c554e5f + 80018252: 0000 unimp + 80018254: 0000 unimp + 80018256: 0000 unimp + 80018258: 6f72 ld t5,280(sp) + 8001825a: 645f746f jal s0,8011009e <__bss_end+0xe4e1a> + 8001825e: 7269 lui tp,0xffffa + 80018260: 6e65 lui t3,0x19 + 80018262: 2074 fld fa3,192(s0) + 80018264: 3d21 addiw s10,s10,-24 + 80018266: 5220 lw s0,96(a2) + 80018268: 5f54 lw a3,60(a4) + 8001826a: 554e lw a0,240(sp) + 8001826c: 4c4c lw a1,28(s0) + 8001826e: 0000 unimp + 80018270: 6e69 lui t3,0x1a + 80018272: 6f66 ld t5,88(sp) + 80018274: 6d72 ld s10,280(sp) + 80018276: 7461 lui s0,0xffff8 + 80018278: 6f69 lui t5,0x1a + 8001827a: 206e fld ft0,216(sp) + 8001827c: 3d21 addiw s10,s10,-24 + 8001827e: 5220 lw s0,96(a2) + 80018280: 5f54 lw a3,60(a4) + 80018282: 554e lw a0,240(sp) + 80018284: 4c4c lw a1,28(s0) + 80018286: 0000 unimp + 80018288: 6564 ld s1,200(a0) + 8001828a: 6676 ld a2,344(sp) + 8001828c: 00000073 ecall + 80018290: 6964 ld s1,208(a0) + 80018292: 6572 ld a0,280(sp) + 80018294: 746e ld s0,248(sp) + 80018296: 2120 fld fs0,64(a0) + 80018298: 203d 0x203d + 8001829a: 554e lw a0,240(sp) + 8001829c: 4c4c lw a1,28(s0) + 8001829e: 0000 unimp + 800182a0: 6964 ld s1,208(a0) + 800182a2: 6572 ld a0,280(sp) + 800182a4: 746e ld s0,248(sp) + 800182a6: 3e2d addiw t3,t3,-21 + 800182a8: 7974 ld a3,240(a0) + 800182aa: 6570 ld a2,200(a0) + 800182ac: 3d20 fld fs0,120(a0) + 800182ae: 203d 0x203d + 800182b0: 4f52 lw t5,20(sp) + 800182b2: 464d li a2,19 + 800182b4: 49445f53 0x49445f53 + 800182b8: 4552 lw a0,20(sp) + 800182ba: 544e lw s0,240(sp) + 800182bc: 445f 5249 0000 0x5249445f + 800182c2: 0000 unimp + 800182c4: 0000 unimp + 800182c6: 0000 unimp + 800182c8: 6f72 ld t5,280(sp) + 800182ca: 006d c.nop 27 + 800182cc: 0000 unimp + ... + +00000000800182d0 <__fsym___cmd_reboot_name>: + 800182d0: 5f5f 6d63 5f64 6572 6f62 746f 0000 0000 __cmd_reboot.... + +00000000800182e0 <__fsym___cmd_reboot_desc>: + 800182e0: 6572 6573 2074 616d 6863 6e69 0065 0000 reset machine... + +00000000800182f0 <_uart_ops>: + 800182f0: 05d8 8000 0000 0000 0640 8000 0000 0000 ........@....... + 80018300: 06d8 8000 0000 0000 0710 8000 0000 0000 ................ + ... + +0000000080018318 <__FUNCTION__.3511>: + 80018318: 7472 755f 7261 5f74 6f63 666e 6769 7275 rt_uart_configur + 80018328: 0065 0000 0000 0000 e....... + +0000000080018330 <__FUNCTION__.3519>: + 80018330: 6175 7472 635f 6e6f 7274 6c6f 0000 0000 uart_control.... + +0000000080018340 <__FUNCTION__.2652>: + 80018340: 7472 735f 6d65 695f 696e 0074 0000 0000 rt_sem_init..... + +0000000080018350 <__FUNCTION__.2676>: + 80018350: 7472 735f 6d65 745f 6b61 0065 0000 0000 rt_sem_take..... + +0000000080018360 <__FUNCTION__.2633>: + 80018360: 7472 695f 6370 6c5f 7369 5f74 7573 7073 rt_ipc_list_susp + 80018370: 6e65 0064 0000 0000 end..... + +0000000080018378 <__FUNCTION__.2687>: + 80018378: 7472 735f 6d65 725f 6c65 6165 6573 0000 rt_sem_release.. + +0000000080018388 <__FUNCTION__.2701>: + 80018388: 7472 6d5f 7475 7865 695f 696e 0074 0000 rt_mutex_init... + +0000000080018398 <__FUNCTION__.2725>: + 80018398: 7472 6d5f 7475 7865 745f 6b61 0065 0000 rt_mutex_take... + +00000000800183a8 <__FUNCTION__.2736>: + 800183a8: 7472 6d5f 7475 7865 725f 6c65 6165 6573 rt_mutex_release + ... + +00000000800183c0 <__FUNCTION__.2690>: + 800183c0: 7472 6f5f 6a62 6365 5f74 6e69 7469 0000 rt_object_init.. + +00000000800183d0 <__FUNCTION__.2699>: + 800183d0: 7472 6f5f 6a62 6365 5f74 6564 6174 6863 rt_object_detach + ... + +00000000800183e8 <__FUNCTION__.2708>: + 800183e8: 7472 6f5f 6a62 6365 5f74 6c61 6f6c 6163 rt_object_alloca + 800183f8: 6574 0000 0000 0000 te...... + +0000000080018400 <__FUNCTION__.2713>: + 80018400: 7472 6f5f 6a62 6365 5f74 6564 656c 6574 rt_object_delete + ... + +0000000080018418 <__FUNCTION__.2717>: + 80018418: 7472 6f5f 6a62 6365 5f74 7369 735f 7379 rt_object_is_sys + 80018428: 6574 6f6d 6a62 6365 0074 0000 0000 0000 temobject....... + +0000000080018438 <__FUNCTION__.2721>: + 80018438: 7472 6f5f 6a62 6365 5f74 6567 5f74 7974 rt_object_get_ty + 80018448: 6570 0000 0000 0000 pe...... + +0000000080018450 <__FUNCTION__.2730>: + 80018450: 7472 6f5f 6a62 6365 5f74 6966 646e 0000 rt_object_find.. + +0000000080018460 <__FUNCTION__.2663>: + 80018460: 7472 735f 6863 6465 6c75 5f65 6e69 6573 rt_schedule_inse + 80018470: 7472 745f 7268 6165 0064 0000 0000 0000 rt_thread....... + +0000000080018480 <__FUNCTION__.2669>: + 80018480: 7472 735f 6863 6465 6c75 5f65 6572 6f6d rt_schedule_remo + 80018490: 6576 745f 7268 6165 0064 0000 0000 0000 ve_thread....... + +00000000800184a0 <__FUNCTION__.2568>: + 800184a0: 7472 645f 7665 6369 5f65 706f 6e65 0000 rt_device_open.. + +00000000800184b0 <__FUNCTION__.2573>: + 800184b0: 7472 645f 7665 6369 5f65 6c63 736f 0065 rt_device_close. + +00000000800184c0 <__FUNCTION__.2580>: + 800184c0: 7472 645f 7665 6369 5f65 6572 6461 0000 rt_device_read.. + +00000000800184d0 <__FUNCTION__.2587>: + 800184d0: 7472 645f 7665 6369 5f65 7277 7469 0065 rt_device_write. + +00000000800184e0 <__FUNCTION__.2593>: + 800184e0: 7472 645f 7665 6369 5f65 6f63 746e 6f72 rt_device_contro + 800184f0: 006c 0000 0000 0000 l....... + +00000000800184f8 <__FUNCTION__.2600>: + 800184f8: 7472 645f 7665 6369 5f65 6573 5f74 7872 rt_device_set_rx + 80018508: 695f 646e 6369 7461 0065 0000 b610 fffe _indicate....... + 80018518: b5fc fffe b624 fffe b640 fffe b65c fffe ....$...@...\... + +0000000080018528 <__FUNCTION__.2665>: + 80018528: 7472 745f 6d69 7265 695f 696e 0074 0000 rt_timer_init... + +0000000080018538 <__FUNCTION__.2670>: + 80018538: 7472 745f 6d69 7265 645f 7465 6361 0068 rt_timer_detach. + +0000000080018548 <__FUNCTION__.2694>: + 80018548: 7472 745f 6d69 7265 735f 6174 7472 0000 rt_timer_start.. + +0000000080018558 <__FUNCTION__.2711>: + 80018558: 7472 745f 6d69 7265 735f 6f74 0070 0000 rt_timer_stop... + +0000000080018568 <__FUNCTION__.2718>: + 80018568: 7472 745f 6d69 7265 635f 6e6f 7274 6c6f rt_timer_control + ... + +0000000080018580 <__fsym_list_mem_name>: + 80018580: 696c 7473 6d5f 6d65 0000 0000 0000 0000 list_mem........ + +0000000080018590 <__fsym_list_mem_desc>: + 80018590: 696c 7473 6d20 6d65 726f 2079 7375 6761 list memory usag + 800185a0: 2065 6e69 6f66 6d72 7461 6f69 006e 0000 e information... + +00000000800185b0 <__fsym___cmd_memcheck_name>: + 800185b0: 5f5f 6d63 5f64 656d 636d 6568 6b63 0000 __cmd_memcheck.. + +00000000800185c0 <__fsym___cmd_memcheck_desc>: + 800185c0: 6863 6365 206b 656d 6f6d 7972 6420 7461 check memory dat + 800185d0: 0061 0000 0000 0000 a....... + +00000000800185d8 <__fsym___cmd_memtrace_name>: + 800185d8: 5f5f 6d63 5f64 656d 746d 6172 6563 0000 __cmd_memtrace.. + +00000000800185e8 <__fsym___cmd_memtrace_desc>: + 800185e8: 7564 706d 6d20 6d65 726f 2079 7274 6361 dump memory trac + 800185f8: 2065 6e69 6f66 6d72 7461 6f69 006e 0000 e information... + +0000000080018608 <__FUNCTION__.2654>: + 80018608: 6c70 6775 685f 6c6f 7365 0000 0000 0000 plug_holes...... + +0000000080018618 <__FUNCTION__.2663>: + 80018618: 7472 735f 7379 6574 5f6d 6568 7061 695f rt_system_heap_i + 80018628: 696e 0074 0000 0000 nit..... + +0000000080018630 <__FUNCTION__.2672>: + 80018630: 7472 6d5f 6c61 6f6c 0063 0000 0000 0000 rt_malloc....... + +0000000080018640 <__FUNCTION__.2690>: + 80018640: 7472 725f 6165 6c6c 636f 0000 0000 0000 rt_realloc...... + +0000000080018650 <__FUNCTION__.2648>: + 80018650: 725f 5f74 6874 6572 6461 695f 696e 0074 _rt_thread_init. + +0000000080018660 <__FUNCTION__.2660>: + 80018660: 7472 745f 7268 6165 5f64 6e69 7469 0000 rt_thread_init.. + +0000000080018670 <__FUNCTION__.2669>: + 80018670: 7472 745f 7268 6165 5f64 7473 7261 7574 rt_thread_startu + 80018680: 0070 0000 0000 0000 p....... + +0000000080018688 <__FUNCTION__.2674>: + 80018688: 7472 745f 7268 6165 5f64 6564 6174 6863 rt_thread_detach + ... + +00000000800186a0 <__FUNCTION__.2690>: + 800186a0: 7472 745f 7268 6165 5f64 6564 656c 6574 rt_thread_delete + ... + +00000000800186b8 <__FUNCTION__.2701>: + 800186b8: 7472 745f 7268 6165 5f64 6c73 6565 0070 rt_thread_sleep. + +00000000800186c8 <__FUNCTION__.2724>: + 800186c8: 7472 745f 7268 6165 5f64 6f63 746e 6f72 rt_thread_contro + 800186d8: 006c 0000 0000 0000 l....... + +00000000800186e0 <__FUNCTION__.2736>: + 800186e0: 7472 745f 7268 6165 5f64 7573 7073 6e65 rt_thread_suspen + 800186f0: 0064 0000 0000 0000 d....... + +00000000800186f8 <__FUNCTION__.2741>: + 800186f8: 7472 745f 7268 6165 5f64 6572 7573 656d rt_thread_resume + ... + +0000000080018710 <__FUNCTION__.2747>: + 80018710: 7472 745f 7268 6165 5f64 6974 656d 756f rt_thread_timeou + 80018720: 0074 0000 0000 0000 t....... + +0000000080018728 <__FUNCTION__.2659>: + 80018728: 7472 615f 7070 696c 6163 6974 6e6f 695f rt_application_i + 80018738: 696e 0074 f6f8 fffe f720 fffe f720 fffe nit..... ... ... + 80018748: f720 fffe f720 fffe f720 fffe f720 fffe ... ... ... ... + 80018758: f720 fffe f720 fffe f720 fffe f720 fffe ... ... ... ... + 80018768: f410 fffe f710 fffe f720 fffe f720 fffe ........ ... ... + 80018778: f720 fffe f720 fffe f710 fffe f720 fffe ... ....... ... + 80018788: f720 fffe f720 fffe f720 fffe f720 fffe ... ... ... ... + 80018798: f6ec fffe f660 fffe f720 fffe f720 fffe ....`... ... ... + 800187a8: f4e0 fffe f720 fffe f78c fffe f720 fffe .... ....... ... + 800187b8: f720 fffe f704 fffe ....... + +00000000800187c0 <__lowest_bit_bitmap>: + 800187c0: 0000 0001 0002 0001 0003 0001 0002 0001 ................ + 800187d0: 0004 0001 0002 0001 0003 0001 0002 0001 ................ + 800187e0: 0005 0001 0002 0001 0003 0001 0002 0001 ................ + 800187f0: 0004 0001 0002 0001 0003 0001 0002 0001 ................ + 80018800: 0006 0001 0002 0001 0003 0001 0002 0001 ................ + 80018810: 0004 0001 0002 0001 0003 0001 0002 0001 ................ + 80018820: 0005 0001 0002 0001 0003 0001 0002 0001 ................ + 80018830: 0004 0001 0002 0001 0003 0001 0002 0001 ................ + 80018840: 0007 0001 0002 0001 0003 0001 0002 0001 ................ + 80018850: 0004 0001 0002 0001 0003 0001 0002 0001 ................ + 80018860: 0005 0001 0002 0001 0003 0001 0002 0001 ................ + 80018870: 0004 0001 0002 0001 0003 0001 0002 0001 ................ + 80018880: 0006 0001 0002 0001 0003 0001 0002 0001 ................ + 80018890: 0004 0001 0002 0001 0003 0001 0002 0001 ................ + 800188a0: 0005 0001 0002 0001 0003 0001 0002 0001 ................ + 800188b0: 0004 0001 0002 0001 0003 0001 0002 0001 ................ + +00000000800188c0 : + 800188c0: 3130 3332 3534 3736 3938 4241 4443 4645 0123456789ABCDEF + ... + +00000000800188d8 : + 800188d8: 3130 3332 3534 3736 3938 6261 6463 6665 0123456789abcdef + ... + +00000000800188f0 <__FUNCTION__.2651>: + 800188f0: 7472 645f 6665 6e75 7463 655f 6578 7563 rt_defunct_execu + 80018900: 6574 0000 0b64 ffff 0b64 ffff 091c ffff te..d...d....... + 80018910: 0b64 ffff 0914 ffff 0b64 ffff 0924 ffff d.......d...$... + 80018920: 0b64 ffff 0980 ffff 0a24 ffff 0a34 ffff d.......$...4... + 80018930: 0a44 ffff 0a54 ffff 0a64 ffff 0a74 ffff D...T...d...t... + 80018940: 0a84 ffff 0a94 ffff 0aa4 ffff 0ab4 ffff ................ + 80018950: 0ac4 ffff 0ad4 ffff ........ + +0000000080018958 <__fsym___cmd_help_name>: + 80018958: 5f5f 6d63 5f64 6568 706c 0000 0000 0000 __cmd_help...... + +0000000080018968 <__fsym___cmd_help_desc>: + 80018968: 5452 542d 7268 6165 2064 6873 6c65 206c RT-Thread shell + 80018978: 6568 706c 002e 0000 help.... + +0000000080018980 <__fsym___cmd_ps_name>: + 80018980: 5f5f 6d63 5f64 7370 0000 0000 0000 0000 __cmd_ps........ + +0000000080018990 <__fsym___cmd_ps_desc>: + 80018990: 694c 7473 7420 7268 6165 7364 6920 206e List threads in + 800189a0: 6874 2065 7973 7473 6d65 002e 0000 0000 the system...... + +00000000800189b0 <__fsym___cmd_free_name>: + 800189b0: 5f5f 6d63 5f64 7266 6565 0000 0000 0000 __cmd_free...... + +00000000800189c0 <__fsym___cmd_free_desc>: + 800189c0: 6853 776f 7420 6568 6d20 6d65 726f 2079 Show the memory + 800189d0: 7375 6761 2065 6e69 7420 6568 7320 7379 usage in the sys + 800189e0: 6574 2e6d 0000 0000 tem..... + +00000000800189e8 <__FUNCTION__.4522>: + 800189e8: 6d5f 6873 655f 6578 5f63 6d63 0064 0000 _msh_exec_cmd... + +00000000800189f8 <__FUNCTION__.4529>: + 800189f8: 6966 736e 5f68 6573 5f74 7270 6d6f 7470 finsh_set_prompt + 80018a08: 6d5f 646f 0065 0000 _mode... + +0000000080018a10 <__FUNCTION__.4534>: + 80018a10: 6966 736e 5f68 6567 6374 6168 0072 0000 finsh_getchar... + +0000000080018a20 <__FUNCTION__.4542>: + 80018a20: 6966 736e 5f68 7872 695f 646e 0000 0000 finsh_rx_ind.... + +0000000080018a30 <__FUNCTION__.4547>: + 80018a30: 6966 736e 5f68 6573 5f74 6564 6976 6563 finsh_set_device + ... + +0000000080018a48 <__fsym___cmd_ls_name>: + 80018a48: 5f5f 6d63 5f64 736c 0000 0000 0000 0000 __cmd_ls........ + +0000000080018a58 <__fsym___cmd_ls_desc>: + 80018a58: 694c 7473 6920 666e 726f 616d 6974 6e6f List information + 80018a68: 6120 6f62 7475 7420 6568 4620 4c49 7345 about the FILEs + 80018a78: 002e 0000 0000 0000 ........ + +0000000080018a80 <__fsym___cmd_cp_name>: + 80018a80: 5f5f 6d63 5f64 7063 0000 0000 0000 0000 __cmd_cp........ + +0000000080018a90 <__fsym___cmd_cp_desc>: + 80018a90: 6f43 7970 5320 554f 4352 2045 6f74 4420 Copy SOURCE to D + 80018aa0: 5345 2e54 0000 0000 EST..... + +0000000080018aa8 <__fsym___cmd_mv_name>: + 80018aa8: 5f5f 6d63 5f64 766d 0000 0000 0000 0000 __cmd_mv........ + +0000000080018ab8 <__fsym___cmd_mv_desc>: + 80018ab8: 6552 616e 656d 5320 554f 4352 2045 6f74 Rename SOURCE to + 80018ac8: 4420 5345 2e54 0000 DEST... + +0000000080018ad0 <__fsym___cmd_cat_name>: + 80018ad0: 5f5f 6d63 5f64 6163 0074 0000 0000 0000 __cmd_cat....... + +0000000080018ae0 <__fsym___cmd_cat_desc>: + 80018ae0: 6f43 636e 7461 6e65 7461 2065 4946 454c Concatenate FILE + 80018af0: 7328 0029 0000 0000 (s)..... + +0000000080018af8 <__fsym___cmd_rm_name>: + 80018af8: 5f5f 6d63 5f64 6d72 0000 0000 0000 0000 __cmd_rm........ + +0000000080018b08 <__fsym___cmd_rm_desc>: + 80018b08: 6552 6f6d 6576 7528 6c6e 6e69 296b 7420 Remove(unlink) t + 80018b18: 6568 4620 4c49 2845 2973 002e 0000 0000 he FILE(s)...... + +0000000080018b28 <__fsym___cmd_cd_name>: + 80018b28: 5f5f 6d63 5f64 6463 0000 0000 0000 0000 __cmd_cd........ + +0000000080018b38 <__fsym___cmd_cd_desc>: + 80018b38: 6843 6e61 6567 7420 6568 7320 6568 6c6c Change the shell + 80018b48: 7720 726f 696b 676e 6420 7269 6365 6f74 working directo + 80018b58: 7972 002e 0000 0000 ry...... + +0000000080018b60 <__fsym___cmd_pwd_name>: + 80018b60: 5f5f 6d63 5f64 7770 0064 0000 0000 0000 __cmd_pwd....... + +0000000080018b70 <__fsym___cmd_pwd_desc>: + 80018b70: 7250 6e69 2074 6874 2065 616e 656d 6f20 Print the name o + 80018b80: 2066 6874 2065 7563 7272 6e65 2074 6f77 f the current wo + 80018b90: 6b72 6e69 2067 6964 6572 7463 726f 2e79 rking directory. + ... + +0000000080018ba8 <__fsym___cmd_mkdir_name>: + 80018ba8: 5f5f 6d63 5f64 6b6d 6964 0072 0000 0000 __cmd_mkdir..... + +0000000080018bb8 <__fsym___cmd_mkdir_desc>: + 80018bb8: 7243 6165 6574 7420 6568 4420 5249 4345 Create the DIREC + 80018bc8: 4f54 5952 002e 0000 TORY.... + +0000000080018bd0 <__fsym___cmd_mkfs_name>: + 80018bd0: 5f5f 6d63 5f64 6b6d 7366 0000 0000 0000 __cmd_mkfs...... + +0000000080018be0 <__fsym___cmd_mkfs_desc>: + 80018be0: 6f66 6d72 7461 6420 7369 206b 6977 6874 format disk with + 80018bf0: 6620 6c69 2065 7973 7473 6d65 0000 0000 file system.... + +0000000080018c00 <__fsym___cmd_mount_name>: + 80018c00: 5f5f 6d63 5f64 6f6d 6e75 0074 0000 0000 __cmd_mount..... + +0000000080018c10 <__fsym___cmd_mount_desc>: + 80018c10: 6f6d 6e75 2074 643c 7665 6369 3e65 3c20 mount < + 80018c20: 6f6d 6e75 7074 696f 746e 203e 663c 7473 mountpoint> .... + +0000000080018c38 <__fsym___cmd_umount_name>: + 80018c38: 5f5f 6d63 5f64 6d75 756f 746e 0000 0000 __cmd_umount.... + +0000000080018c48 <__fsym___cmd_umount_desc>: + 80018c48: 6e55 6f6d 6e75 2074 6564 6976 6563 6620 Unmount device f + 80018c58: 6f72 206d 6966 656c 7320 7379 6574 006d rom file system. + +0000000080018c68 <__fsym___cmd_df_name>: + 80018c68: 5f5f 6d63 5f64 6664 0000 0000 0000 0000 __cmd_df........ + +0000000080018c78 <__fsym___cmd_df_desc>: + 80018c78: 6964 6b73 6620 6572 0065 0000 0000 0000 disk free....... + +0000000080018c88 <__fsym___cmd_echo_name>: + 80018c88: 5f5f 6d63 5f64 6365 6f68 0000 0000 0000 __cmd_echo...... + +0000000080018c98 <__fsym___cmd_echo_desc>: + 80018c98: 6365 6f68 7320 7274 6e69 2067 6f74 6620 echo string to f + 80018ca8: 6c69 0065 0000 0000 ile..... + +0000000080018cb0 <__fsym___cmd_tail_name>: + 80018cb0: 5f5f 6d63 5f64 6174 6c69 0000 0000 0000 __cmd_tail...... + +0000000080018cc0 <__fsym___cmd_tail_desc>: + 80018cc0: 7270 6e69 2074 6874 2065 616c 7473 4e20 print the last N + 80018cd0: 6c2d 6e69 7365 6420 7461 2061 666f 7420 -lines data of t + 80018ce0: 6568 6720 7669 6e65 6620 6c69 0065 0000 he given file... + +0000000080018cf0 <__fsym_hello_name>: + 80018cf0: 6568 6c6c 006f 0000 hello... + +0000000080018cf8 <__fsym_hello_desc>: + 80018cf8: 6173 2079 6568 6c6c 206f 6f77 6c72 0064 say hello world. + +0000000080018d08 <__fsym_clear_name>: + 80018d08: 6c63 6165 0072 0000 clear... + +0000000080018d10 <__fsym_clear_desc>: + 80018d10: 6c63 6165 2072 6874 2065 6574 6d72 6e69 clear the termin + 80018d20: 6c61 7320 7263 6565 006e 0000 0000 0000 al screen....... + +0000000080018d30 <__fsym___cmd_clear_name>: + 80018d30: 5f5f 6d63 5f64 6c63 6165 0072 0000 0000 __cmd_clear..... + +0000000080018d40 <__fsym___cmd_clear_desc>: + 80018d40: 6c63 6165 2072 6874 2065 6574 6d72 6e69 clear the termin + 80018d50: 6c61 7320 7263 6565 006e 0000 0000 0000 al screen....... + +0000000080018d60 <__fsym_version_name>: + 80018d60: 6576 7372 6f69 006e version. + +0000000080018d68 <__fsym_version_desc>: + 80018d68: 6873 776f 5220 2d54 6854 6572 6461 7620 show RT-Thread v + 80018d78: 7265 6973 6e6f 6920 666e 726f 616d 6974 ersion informati + 80018d88: 6e6f 0000 0000 0000 on...... + +0000000080018d90 <__fsym___cmd_version_name>: + 80018d90: 5f5f 6d63 5f64 6576 7372 6f69 006e 0000 __cmd_version... + +0000000080018da0 <__fsym___cmd_version_desc>: + 80018da0: 6873 776f 5220 2d54 6854 6572 6461 7620 show RT-Thread v + 80018db0: 7265 6973 6e6f 6920 666e 726f 616d 6974 ersion informati + 80018dc0: 6e6f 0000 0000 0000 on...... + +0000000080018dc8 <__fsym_list_thread_name>: + 80018dc8: 696c 7473 745f 7268 6165 0064 0000 0000 list_thread..... + +0000000080018dd8 <__fsym_list_thread_desc>: + 80018dd8: 696c 7473 7420 7268 6165 0064 0000 0000 list thread..... + +0000000080018de8 <__fsym___cmd_list_thread_name>: + 80018de8: 5f5f 6d63 5f64 696c 7473 745f 7268 6165 __cmd_list_threa + 80018df8: 0064 0000 0000 0000 d....... + +0000000080018e00 <__fsym___cmd_list_thread_desc>: + 80018e00: 696c 7473 7420 7268 6165 0064 0000 0000 list thread..... + +0000000080018e10 <__fsym_list_sem_name>: + 80018e10: 696c 7473 735f 6d65 0000 0000 0000 0000 list_sem........ + +0000000080018e20 <__fsym_list_sem_desc>: + 80018e20: 696c 7473 7320 6d65 7061 6f68 6572 6920 list semaphore i + 80018e30: 206e 7973 7473 6d65 0000 0000 0000 0000 n system........ + +0000000080018e40 <__fsym___cmd_list_sem_name>: + 80018e40: 5f5f 6d63 5f64 696c 7473 735f 6d65 0000 __cmd_list_sem.. + +0000000080018e50 <__fsym___cmd_list_sem_desc>: + 80018e50: 696c 7473 7320 6d65 7061 6f68 6572 6920 list semaphore i + 80018e60: 206e 7973 7473 6d65 0000 0000 0000 0000 n system........ + +0000000080018e70 <__fsym_list_event_name>: + 80018e70: 696c 7473 655f 6576 746e 0000 0000 0000 list_event...... + +0000000080018e80 <__fsym_list_event_desc>: + 80018e80: 696c 7473 6520 6576 746e 6920 206e 7973 list event in sy + 80018e90: 7473 6d65 0000 0000 stem.... + +0000000080018e98 <__fsym___cmd_list_event_name>: + 80018e98: 5f5f 6d63 5f64 696c 7473 655f 6576 746e __cmd_list_event + ... + +0000000080018eb0 <__fsym___cmd_list_event_desc>: + 80018eb0: 696c 7473 6520 6576 746e 6920 206e 7973 list event in sy + 80018ec0: 7473 6d65 0000 0000 stem.... + +0000000080018ec8 <__fsym_list_mutex_name>: + 80018ec8: 696c 7473 6d5f 7475 7865 0000 0000 0000 list_mutex...... + +0000000080018ed8 <__fsym_list_mutex_desc>: + 80018ed8: 696c 7473 6d20 7475 7865 6920 206e 7973 list mutex in sy + 80018ee8: 7473 6d65 0000 0000 stem.... + +0000000080018ef0 <__fsym___cmd_list_mutex_name>: + 80018ef0: 5f5f 6d63 5f64 696c 7473 6d5f 7475 7865 __cmd_list_mutex + ... + +0000000080018f08 <__fsym___cmd_list_mutex_desc>: + 80018f08: 696c 7473 6d20 7475 7865 6920 206e 7973 list mutex in sy + 80018f18: 7473 6d65 0000 0000 stem.... + +0000000080018f20 <__fsym_list_mailbox_name>: + 80018f20: 696c 7473 6d5f 6961 626c 786f 0000 0000 list_mailbox.... + +0000000080018f30 <__fsym_list_mailbox_desc>: + 80018f30: 696c 7473 6d20 6961 206c 6f62 2078 6e69 list mail box in + 80018f40: 7320 7379 6574 006d system. + +0000000080018f48 <__fsym___cmd_list_mailbox_name>: + 80018f48: 5f5f 6d63 5f64 696c 7473 6d5f 6961 626c __cmd_list_mailb + 80018f58: 786f 0000 0000 0000 ox...... + +0000000080018f60 <__fsym___cmd_list_mailbox_desc>: + 80018f60: 696c 7473 6d20 6961 206c 6f62 2078 6e69 list mail box in + 80018f70: 7320 7379 6574 006d system. + +0000000080018f78 <__fsym_list_msgqueue_name>: + 80018f78: 696c 7473 6d5f 6773 7571 7565 0065 0000 list_msgqueue... + +0000000080018f88 <__fsym_list_msgqueue_desc>: + 80018f88: 696c 7473 6d20 7365 6173 6567 7120 6575 list message que + 80018f98: 6575 6920 206e 7973 7473 6d65 0000 0000 ue in system.... + +0000000080018fa8 <__fsym___cmd_list_msgqueue_name>: + 80018fa8: 5f5f 6d63 5f64 696c 7473 6d5f 6773 7571 __cmd_list_msgqu + 80018fb8: 7565 0065 0000 0000 eue..... + +0000000080018fc0 <__fsym___cmd_list_msgqueue_desc>: + 80018fc0: 696c 7473 6d20 7365 6173 6567 7120 6575 list message que + 80018fd0: 6575 6920 206e 7973 7473 6d65 0000 0000 ue in system.... + +0000000080018fe0 <__fsym_list_mempool_name>: + 80018fe0: 696c 7473 6d5f 6d65 6f70 6c6f 0000 0000 list_mempool.... + +0000000080018ff0 <__fsym_list_mempool_desc>: + 80018ff0: 696c 7473 6d20 6d65 726f 2079 6f70 6c6f list memory pool + 80019000: 6920 206e 7973 7473 6d65 0000 0000 0000 in system...... + +0000000080019010 <__fsym___cmd_list_mempool_name>: + 80019010: 5f5f 6d63 5f64 696c 7473 6d5f 6d65 6f70 __cmd_list_mempo + 80019020: 6c6f 0000 0000 0000 ol...... + +0000000080019028 <__fsym___cmd_list_mempool_desc>: + 80019028: 696c 7473 6d20 6d65 726f 2079 6f70 6c6f list memory pool + 80019038: 6920 206e 7973 7473 6d65 0000 0000 0000 in system...... + +0000000080019048 <__fsym_list_timer_name>: + 80019048: 696c 7473 745f 6d69 7265 0000 0000 0000 list_timer...... + +0000000080019058 <__fsym_list_timer_desc>: + 80019058: 696c 7473 7420 6d69 7265 6920 206e 7973 list timer in sy + 80019068: 7473 6d65 0000 0000 stem.... + +0000000080019070 <__fsym___cmd_list_timer_name>: + 80019070: 5f5f 6d63 5f64 696c 7473 745f 6d69 7265 __cmd_list_timer + ... + +0000000080019088 <__fsym___cmd_list_timer_desc>: + 80019088: 696c 7473 7420 6d69 7265 6920 206e 7973 list timer in sy + 80019098: 7473 6d65 0000 0000 stem.... + +00000000800190a0 <__fsym_list_device_name>: + 800190a0: 696c 7473 645f 7665 6369 0065 0000 0000 list_device..... + +00000000800190b0 <__fsym_list_device_desc>: + 800190b0: 696c 7473 6420 7665 6369 2065 6e69 7320 list device in s + 800190c0: 7379 6574 006d 0000 ystem... + +00000000800190c8 <__fsym___cmd_list_device_name>: + 800190c8: 5f5f 6d63 5f64 696c 7473 645f 7665 6369 __cmd_list_devic + 800190d8: 0065 0000 0000 0000 e....... + +00000000800190e0 <__fsym___cmd_list_device_desc>: + 800190e0: 696c 7473 6420 7665 6369 2065 6e69 7320 list device in s + 800190f0: 7379 6574 006d 0000 ystem... + +00000000800190f8 <__fsym_list_name>: + 800190f8: 696c 7473 0000 0000 list.... + +0000000080019100 <__fsym_list_desc>: + 80019100: 696c 7473 6120 6c6c 7320 6d79 6f62 206c list all symbol + 80019110: 6e69 7320 7379 6574 006d 0000 0000 0000 in system....... + +0000000080019120 : + 80019120: 77c0 8001 0000 0000 77d8 8001 0000 0000 .w.......w...... + 80019130: 77e8 8001 0000 0000 7800 8001 0000 0000 .w.......x...... + 80019140: 7810 8001 0000 0000 7820 8001 0000 0000 .x...... x...... + 80019150: 7828 8001 0000 0000 7838 8001 0000 0000 (x......8x...... + 80019160: 7848 8001 0000 0000 7850 8001 0000 0000 Hx......Px...... + 80019170: 7868 8001 0000 0000 7878 8001 0000 0000 hx......xx...... + 80019180: 7880 8001 0000 0000 7890 8001 0000 0000 .x.......x...... + 80019190: 78a0 8001 0000 0000 78b8 8001 0000 0000 .x.......x...... + 800191a0: 78c0 8001 0000 0000 78d0 8001 0000 0000 .x.......x...... + 800191b0: 78e0 8001 0000 0000 78f8 8001 0000 0000 .x.......x...... + 800191c0: 7908 8001 0000 0000 7918 8001 0000 0000 .y.......y...... + 800191d0: 7928 8001 0000 0000 (y...... + +00000000800191d8 <__FUNCTION__.3072>: + 800191d8: 735f 7265 6169 5f6c 6966 6f66 635f 6c61 _serial_fifo_cal + 800191e8: 5f63 6572 7663 6465 6c5f 6e65 0000 0000 c_recved_len.... + +00000000800191f8 <__FUNCTION__.3081>: + 800191f8: 7472 645f 616d 725f 6365 5f76 7075 6164 rt_dma_recv_upda + 80019208: 6574 675f 7465 695f 646e 7865 0000 0000 te_get_index.... + +0000000080019218 <__FUNCTION__.3113>: + 80019218: 7472 735f 7265 6169 5f6c 6e69 7469 0000 rt_serial_init.. + +0000000080019228 <__FUNCTION__.3120>: + 80019228: 7472 735f 7265 6169 5f6c 706f 6e65 0000 rt_serial_open.. + +0000000080019238 <__FUNCTION__.3130>: + 80019238: 7472 735f 7265 6169 5f6c 6c63 736f 0065 rt_serial_close. + +0000000080019248 <__FUNCTION__.3143>: + 80019248: 7472 735f 7265 6169 5f6c 6572 6461 0000 rt_serial_read.. + +0000000080019258 <__FUNCTION__.3047>: + 80019258: 735f 7265 6169 5f6c 6e69 5f74 7872 0000 _serial_int_rx.. + +0000000080019268 <__FUNCTION__.3094>: + 80019268: 735f 7265 6169 5f6c 6d64 5f61 7872 0000 _serial_dma_rx.. + +0000000080019278 <__FUNCTION__.3026>: + 80019278: 735f 7265 6169 5f6c 6f70 6c6c 725f 0078 _serial_poll_rx. + +0000000080019288 <__FUNCTION__.3151>: + 80019288: 7472 735f 7265 6169 5f6c 7277 7469 0065 rt_serial_write. + +0000000080019298 <__FUNCTION__.3060>: + 80019298: 735f 7265 6169 5f6c 6e69 5f74 7874 0000 _serial_int_tx.. + +00000000800192a8 <__FUNCTION__.3036>: + 800192a8: 735f 7265 6169 5f6c 6f70 6c6c 745f 0078 _serial_poll_tx. + +00000000800192b8 <__FUNCTION__.3159>: + 800192b8: 7472 735f 7265 6169 5f6c 6f63 746e 6f72 rt_serial_contro + 800192c8: 006c 0000 0000 0000 l....... + +00000000800192d0 <__FUNCTION__.3174>: + 800192d0: 7472 685f 5f77 6573 6972 6c61 725f 6765 rt_hw_serial_reg + 800192e0: 7369 6574 0072 0000 ister... + +00000000800192e8 <__FUNCTION__.3029>: + 800192e8: 7472 645f 7461 5f61 7571 7565 5f65 6e69 rt_data_queue_in + 800192f8: 7469 0000 0000 0000 it...... + +0000000080019300 <__FUNCTION__.3039>: + 80019300: 7472 645f 7461 5f61 7571 7565 5f65 7570 rt_data_queue_pu + 80019310: 6873 0000 0000 0000 sh...... + +0000000080019318 <__FUNCTION__.3072>: + 80019318: 7472 645f 7461 5f61 7571 7565 5f65 6572 rt_data_queue_re + 80019328: 6573 0074 0000 0000 set..... + +0000000080019330 <__FUNCTION__.3083>: + 80019330: 7472 645f 7461 5f61 7571 7565 5f65 6564 rt_data_queue_de + 80019340: 6e69 7469 0000 0000 init.... + +0000000080019348 <__FUNCTION__.3023>: + 80019348: 7472 635f 6d6f 6c70 7465 6f69 5f6e 6e69 rt_completion_in + 80019358: 7469 0000 0000 0000 it...... + +0000000080019360 <__FUNCTION__.3031>: + 80019360: 7472 635f 6d6f 6c70 7465 6f69 5f6e 6177 rt_completion_wa + 80019370: 7469 0000 0000 0000 it...... + +0000000080019378 <__fsym_pinMode_name>: + 80019378: 6970 4d6e 646f 0065 pinMode. + +0000000080019380 <__fsym_pinMode_desc>: + 80019380: 6573 2074 6168 6472 6177 6572 7020 6e69 set hardware pin + 80019390: 6d20 646f 0065 0000 mode... + +0000000080019398 <__fsym_pinWrite_name>: + 80019398: 6970 576e 6972 6574 0000 0000 0000 0000 pinWrite........ + +00000000800193a8 <__fsym_pinWrite_desc>: + 800193a8: 7277 7469 2065 6176 756c 2065 6f74 6820 write value to h + 800193b8: 7261 7764 7261 2065 6970 006e 0000 0000 ardware pin..... + +00000000800193c8 <__fsym_pinRead_name>: + 800193c8: 6970 526e 6165 0064 pinRead. + +00000000800193d0 <__fsym_pinRead_desc>: + 800193d0: 6572 6461 7320 6174 7574 2073 7266 6d6f read status from + 800193e0: 6820 7261 7764 7261 2065 6970 006e 0000 hardware pin... + +00000000800193f0 <__fsym_pinGet_name>: + 800193f0: 6970 476e 7465 0000 pinGet.. + +00000000800193f8 <__fsym_pinGet_desc>: + 800193f8: 6567 2074 6970 206e 756e 626d 7265 6620 get pin number f + 80019408: 6f72 206d 6168 6472 6177 6572 7020 6e69 rom hardware pin + ... + +0000000080019420 <__FUNCTION__.3713>: + 80019420: 7472 705f 6e69 6d5f 646f 0065 0000 0000 rt_pin_mode..... + +0000000080019430 <__FUNCTION__.3721>: + 80019430: 7472 705f 6e69 775f 6972 6574 0000 0000 rt_pin_write.... + +0000000080019440 <__FUNCTION__.3728>: + 80019440: 7472 705f 6e69 725f 6165 0064 0000 0000 rt_pin_read..... + +0000000080019450 <__FUNCTION__.3735>: + 80019450: 7472 705f 6e69 675f 7465 0000 0000 0000 rt_pin_get...... + +0000000080019460 <__fsym_mkfs_name>: + 80019460: 6b6d 7366 0000 0000 mkfs.... + +0000000080019468 <__fsym_mkfs_desc>: + 80019468: 616d 656b 6120 6620 6c69 2065 7973 7473 make a file syst + 80019478: 6d65 0000 0000 0000 em...... + +0000000080019480 <__fsym_df_name>: + 80019480: 6664 0000 0000 0000 df...... + +0000000080019488 <__fsym_df_desc>: + 80019488: 6567 2074 6964 6b73 6620 6572 0065 0000 get disk free... + +0000000080019498 <__FUNCTION__.4112>: + 80019498: 6664 5f73 6966 656c 7973 7473 6d65 6c5f dfs_filesystem_l + 800194a8: 6f6f 756b 0070 0000 ookup... + +00000000800194b0 <__fsym_mkdir_name>: + 800194b0: 6b6d 6964 0072 0000 mkdir... + +00000000800194b8 <__fsym_mkdir_desc>: + 800194b8: 7263 6165 6574 6120 6420 7269 6365 6f74 create a directo + 800194c8: 7972 0000 0000 0000 ry...... + +00000000800194d0 <__fsym_cd_name>: + 800194d0: 6463 0000 0000 0000 cd...... + +00000000800194d8 <__fsym_cd_desc>: + 800194d8: 6863 6e61 6567 6320 7275 6572 746e 7720 change current w + 800194e8: 726f 696b 676e 6420 7269 6365 6f74 7972 orking directory + ... + +0000000080019500 <__fsym___cmd_list_fd_name>: + 80019500: 5f5f 6d63 5f64 696c 7473 665f 0064 0000 __cmd_list_fd... + +0000000080019510 <__fsym___cmd_list_fd_desc>: + 80019510: 696c 7473 6620 6c69 2065 6564 6373 6972 list file descri + 80019520: 7470 726f 0000 0000 ptor.... + +0000000080019528 <__FUNCTION__.4119>: + 80019528: 6664 5f73 6f6c 6b63 0000 0000 0000 0000 dfs_lock........ + +0000000080019538 <__FUNCTION__.4185>: + 80019538: 6664 5f73 6f6e 6d72 6c61 7a69 5f65 6170 dfs_normalize_pa + 80019548: 6874 0000 0000 0000 th...... + +0000000080019550 <__fsym_ls_name>: + 80019550: 736c 0000 0000 0000 ls...... + +0000000080019558 <__fsym_ls_desc>: + 80019558: 696c 7473 6420 7269 6365 6f74 7972 6320 list directory c + 80019568: 6e6f 6574 746e 0073 ontents. + +0000000080019570 <__fsym_rm_name>: + 80019570: 6d72 0000 0000 0000 rm...... + +0000000080019578 <__fsym_rm_desc>: + 80019578: 6572 6f6d 6576 6620 6c69 7365 6f20 2072 remove files or + 80019588: 6964 6572 7463 726f 6569 0073 0000 0000 directories..... + +0000000080019598 <__fsym_cat_name>: + 80019598: 6163 0074 0000 0000 cat..... + +00000000800195a0 <__fsym_cat_desc>: + 800195a0: 7270 6e69 2074 6966 656c 0000 0000 0000 print file...... + +00000000800195b0 <__fsym_copy_name>: + 800195b0: 6f63 7970 0000 0000 copy.... + +00000000800195b8 <__fsym_copy_desc>: + 800195b8: 6f63 7970 6620 6c69 2065 726f 6420 7269 copy file or dir + ... + +00000000800195d0 <_device_fops>: + 800195d0: 467c 8001 0000 0000 4590 8001 0000 0000 |F.......E...... + 800195e0: 4368 8001 0000 0000 4418 8001 0000 0000 hC.......D...... + 800195f0: 44d4 8001 0000 0000 0000 0000 0000 0000 .D.............. + ... + 80019608: 4a70 8001 0000 0000 4c2c 8001 0000 0000 pJ......,L...... + +0000000080019618 <_device_fs>: + 80019618: 8288 8001 0000 0000 0000 0000 0000 0000 ................ + 80019628: 95d0 8001 0000 0000 433c 8001 0000 0000 ........: + 80019668: 6664 5f73 6564 6976 6563 665f 5f73 6f69 dfs_device_fs_io + 80019678: 7463 006c 0000 0000 ctl..... + +0000000080019680 <__FUNCTION__.4118>: + 80019680: 6664 5f73 6564 6976 6563 665f 5f73 6572 dfs_device_fs_re + 80019690: 6461 0000 0000 0000 ad...... + +0000000080019698 <__FUNCTION__.4126>: + 80019698: 6664 5f73 6564 6976 6563 665f 5f73 7277 dfs_device_fs_wr + 800196a8: 7469 0065 0000 0000 ite..... + +00000000800196b0 <__FUNCTION__.4132>: + 800196b0: 6664 5f73 6564 6976 6563 665f 5f73 6c63 dfs_device_fs_cl + 800196c0: 736f 0065 0000 0000 ose..... + +00000000800196c8 <__FUNCTION__.4144>: + 800196c8: 6664 5f73 6564 6976 6563 665f 5f73 706f dfs_device_fs_op + 800196d8: 6e65 0000 0000 0000 en...... + +00000000800196e0 <__FUNCTION__.4166>: + 800196e0: 6664 5f73 6564 6976 6563 665f 5f73 6567 dfs_device_fs_ge + 800196f0: 6474 6e65 7374 0000 tdents.. + +00000000800196f8 <_rom_fops>: + 800196f8: 5208 8001 0000 0000 51dc 8001 0000 0000 .R.......Q...... + 80019708: 4d00 8001 0000 0000 5080 8001 0000 0000 .M.......P...... + ... + 80019728: 5188 8001 0000 0000 5424 8001 0000 0000 .Q......$T...... + ... + +0000000080019740 <_romfs>: + 80019740: 82c8 8001 0000 0000 0000 0000 0000 0000 ................ + 80019750: 96f8 8001 0000 0000 4c8c 8001 0000 0000 .........L...... + 80019760: 4cdc 8001 0000 0000 0000 0000 0000 0000 .L.............. + ... + 80019780: 532c 8001 0000 0000 0000 0000 0000 0000 ,S.............. + +0000000080019790 <__FUNCTION__.4153>: + 80019790: 6664 5f73 6f72 666d 5f73 6572 6461 0000 dfs_romfs_read.. + +00000000800197a0 <__FUNCTION__.4186>: + 800197a0: 6664 5f73 6f72 666d 5f73 6567 6474 6e65 dfs_romfs_getden + 800197b0: 7374 0000 0000 0000 ts...... + +00000000800197b8 <__fsym___cmd_reboot>: + 800197b8: 82d0 8001 0000 0000 82e0 8001 0000 0000 ................ + 800197c8: 05a4 8000 0000 0000 ........ + +00000000800197d0 <__fsym_list_mem>: + 800197d0: 8580 8001 0000 0000 8590 8001 0000 0000 ................ + 800197e0: 5138 8000 0000 0000 8Q...... + +00000000800197e8 <__fsym___cmd_memcheck>: + 800197e8: 85b0 8001 0000 0000 85c0 8001 0000 0000 ................ + 800197f8: 51b0 8000 0000 0000 .Q...... + +0000000080019800 <__fsym___cmd_memtrace>: + 80019800: 85d8 8001 0000 0000 85e8 8001 0000 0000 ................ + 80019810: 5354 8000 0000 0000 TS...... + +0000000080019818 <__fsym___cmd_help>: + 80019818: 8958 8001 0000 0000 8968 8001 0000 0000 X.......h....... + 80019828: 94a4 8000 0000 0000 ........ + +0000000080019830 <__fsym___cmd_ps>: + 80019830: 8980 8001 0000 0000 8990 8001 0000 0000 ................ + 80019840: 9578 8000 0000 0000 x....... + +0000000080019848 <__fsym___cmd_free>: + 80019848: 89b0 8001 0000 0000 89c0 8001 0000 0000 ................ + 80019858: 95b0 8000 0000 0000 ........ + +0000000080019860 <__fsym___cmd_ls>: + 80019860: 8a48 8001 0000 0000 8a58 8001 0000 0000 H.......X....... + 80019870: ba54 8000 0000 0000 T....... + +0000000080019878 <__fsym___cmd_cp>: + 80019878: 8a80 8001 0000 0000 8a90 8001 0000 0000 ................ + 80019888: babc 8000 0000 0000 ........ + +0000000080019890 <__fsym___cmd_mv>: + 80019890: 8aa8 8001 0000 0000 8ab8 8001 0000 0000 ................ + 800198a0: bb40 8000 0000 0000 @....... + +00000000800198a8 <__fsym___cmd_cat>: + 800198a8: 8ad0 8001 0000 0000 8ae0 8001 0000 0000 ................ + 800198b8: bd6c 8000 0000 0000 l....... + +00000000800198c0 <__fsym___cmd_rm>: + 800198c0: 8af8 8001 0000 0000 8b08 8001 0000 0000 ................ + 800198d0: c028 8000 0000 0000 (....... + +00000000800198d8 <__fsym___cmd_cd>: + 800198d8: 8b28 8001 0000 0000 8b38 8001 0000 0000 (.......8....... + 800198e8: c364 8000 0000 0000 d....... + +00000000800198f0 <__fsym___cmd_pwd>: + 800198f0: 8b60 8001 0000 0000 8b70 8001 0000 0000 `.......p....... + 80019900: c408 8000 0000 0000 ........ + +0000000080019908 <__fsym___cmd_mkdir>: + 80019908: 8ba8 8001 0000 0000 8bb8 8001 0000 0000 ................ + 80019918: c450 8000 0000 0000 P....... + +0000000080019920 <__fsym___cmd_mkfs>: + 80019920: 8bd0 8001 0000 0000 8be0 8001 0000 0000 ................ + 80019930: c4c8 8000 0000 0000 ........ + +0000000080019938 <__fsym___cmd_mount>: + 80019938: 8c00 8001 0000 0000 8c10 8001 0000 0000 ................ + 80019948: c5d8 8000 0000 0000 ........ + +0000000080019950 <__fsym___cmd_umount>: + 80019950: 8c38 8001 0000 0000 8c48 8001 0000 0000 8.......H....... + 80019960: c750 8000 0000 0000 P....... + +0000000080019968 <__fsym___cmd_df>: + 80019968: 8c68 8001 0000 0000 8c78 8001 0000 0000 h.......x....... + 80019978: c7f4 8000 0000 0000 ........ + +0000000080019980 <__fsym___cmd_echo>: + 80019980: 8c88 8001 0000 0000 8c98 8001 0000 0000 ................ + 80019990: c8b4 8000 0000 0000 ........ + +0000000080019998 <__fsym___cmd_tail>: + 80019998: 8cb0 8001 0000 0000 8cc0 8001 0000 0000 ................ + 800199a8: c9d4 8000 0000 0000 ........ + +00000000800199b0 <__fsym_hello>: + 800199b0: 8cf0 8001 0000 0000 8cf8 8001 0000 0000 ................ + 800199c0: cd74 8000 0000 0000 t....... + +00000000800199c8 <__fsym_clear>: + 800199c8: 8d08 8001 0000 0000 8d10 8001 0000 0000 ................ + 800199d8: cda8 8000 0000 0000 ........ + +00000000800199e0 <__fsym___cmd_clear>: + 800199e0: 8d30 8001 0000 0000 8d40 8001 0000 0000 0.......@....... + 800199f0: cda8 8000 0000 0000 ........ + +00000000800199f8 <__fsym_version>: + 800199f8: 8d60 8001 0000 0000 8d68 8001 0000 0000 `.......h....... + 80019a08: cddc 8000 0000 0000 ........ + +0000000080019a10 <__fsym___cmd_version>: + 80019a10: 8d90 8001 0000 0000 8da0 8001 0000 0000 ................ + 80019a20: cddc 8000 0000 0000 ........ + +0000000080019a28 <__fsym_list_thread>: + 80019a28: 8dc8 8001 0000 0000 8dd8 8001 0000 0000 ................ + 80019a38: d05c 8000 0000 0000 \....... + +0000000080019a40 <__fsym___cmd_list_thread>: + 80019a40: 8de8 8001 0000 0000 8e00 8001 0000 0000 ................ + 80019a50: d05c 8000 0000 0000 \....... + +0000000080019a58 <__fsym_list_sem>: + 80019a58: 8e10 8001 0000 0000 8e20 8001 0000 0000 ........ ....... + 80019a68: d408 8000 0000 0000 ........ + +0000000080019a70 <__fsym___cmd_list_sem>: + 80019a70: 8e40 8001 0000 0000 8e50 8001 0000 0000 @.......P....... + 80019a80: d408 8000 0000 0000 ........ + +0000000080019a88 <__fsym_list_event>: + 80019a88: 8e70 8001 0000 0000 8e80 8001 0000 0000 p............... + 80019a98: d610 8000 0000 0000 ........ + +0000000080019aa0 <__fsym___cmd_list_event>: + 80019aa0: 8e98 8001 0000 0000 8eb0 8001 0000 0000 ................ + 80019ab0: d610 8000 0000 0000 ........ + +0000000080019ab8 <__fsym_list_mutex>: + 80019ab8: 8ec8 8001 0000 0000 8ed8 8001 0000 0000 ................ + 80019ac8: d7f4 8000 0000 0000 ........ + +0000000080019ad0 <__fsym___cmd_list_mutex>: + 80019ad0: 8ef0 8001 0000 0000 8f08 8001 0000 0000 ................ + 80019ae0: d7f4 8000 0000 0000 ........ + +0000000080019ae8 <__fsym_list_mailbox>: + 80019ae8: 8f20 8001 0000 0000 8f30 8001 0000 0000 .......0....... + 80019af8: d9a0 8000 0000 0000 ........ + +0000000080019b00 <__fsym___cmd_list_mailbox>: + 80019b00: 8f48 8001 0000 0000 8f60 8001 0000 0000 H.......`....... + 80019b10: d9a0 8000 0000 0000 ........ + +0000000080019b18 <__fsym_list_msgqueue>: + 80019b18: 8f78 8001 0000 0000 8f88 8001 0000 0000 x............... + 80019b28: dbd8 8000 0000 0000 ........ + +0000000080019b30 <__fsym___cmd_list_msgqueue>: + 80019b30: 8fa8 8001 0000 0000 8fc0 8001 0000 0000 ................ + 80019b40: dbd8 8000 0000 0000 ........ + +0000000080019b48 <__fsym_list_mempool>: + 80019b48: 8fe0 8001 0000 0000 8ff0 8001 0000 0000 ................ + 80019b58: dde0 8000 0000 0000 ........ + +0000000080019b60 <__fsym___cmd_list_mempool>: + 80019b60: 9010 8001 0000 0000 9028 8001 0000 0000 ........(....... + 80019b70: dde0 8000 0000 0000 ........ + +0000000080019b78 <__fsym_list_timer>: + 80019b78: 9048 8001 0000 0000 9058 8001 0000 0000 H.......X....... + 80019b88: e000 8000 0000 0000 ........ + +0000000080019b90 <__fsym___cmd_list_timer>: + 80019b90: 9070 8001 0000 0000 9088 8001 0000 0000 p............... + 80019ba0: e000 8000 0000 0000 ........ + +0000000080019ba8 <__fsym_list_device>: + 80019ba8: 90a0 8001 0000 0000 90b0 8001 0000 0000 ................ + 80019bb8: e1b0 8000 0000 0000 ........ + +0000000080019bc0 <__fsym___cmd_list_device>: + 80019bc0: 90c8 8001 0000 0000 90e0 8001 0000 0000 ................ + 80019bd0: e1b0 8000 0000 0000 ........ + +0000000080019bd8 <__fsym_list>: + 80019bd8: 90f8 8001 0000 0000 9100 8001 0000 0000 ................ + 80019be8: e350 8000 0000 0000 P....... + +0000000080019bf0 <__fsym_pinMode>: + 80019bf0: 9378 8001 0000 0000 9380 8001 0000 0000 x............... + 80019c00: 09e4 8001 0000 0000 ........ + +0000000080019c08 <__fsym_pinWrite>: + 80019c08: 9398 8001 0000 0000 93a8 8001 0000 0000 ................ + 80019c18: 0a5c 8001 0000 0000 \....... + +0000000080019c20 <__fsym_pinRead>: + 80019c20: 93c8 8001 0000 0000 93d0 8001 0000 0000 ................ + 80019c30: 0ad4 8001 0000 0000 ........ + +0000000080019c38 <__fsym_pinGet>: + 80019c38: 93f0 8001 0000 0000 93f8 8001 0000 0000 ................ + 80019c48: 0b48 8001 0000 0000 H....... + +0000000080019c50 <__fsym_mkfs>: + 80019c50: 9460 8001 0000 0000 9468 8001 0000 0000 `.......h....... + 80019c60: 155c 8001 0000 0000 \....... + +0000000080019c68 <__fsym_df>: + 80019c68: 9480 8001 0000 0000 9488 8001 0000 0000 ................ + 80019c78: 1594 8001 0000 0000 ........ + +0000000080019c80 <__fsym_mkdir>: + 80019c80: 94b0 8001 0000 0000 94b8 8001 0000 0000 ................ + 80019c90: 1c4c 8001 0000 0000 L....... + +0000000080019c98 <__fsym_cd>: + 80019c98: 94d0 8001 0000 0000 94d8 8001 0000 0000 ................ + 80019ca8: 2074 8001 0000 0000 t ...... + +0000000080019cb0 <__fsym___cmd_list_fd>: + 80019cb0: 9500 8001 0000 0000 9510 8001 0000 0000 ................ + 80019cc0: 2e1c 8001 0000 0000 ........ + +0000000080019cc8 <__fsym_ls>: + 80019cc8: 9550 8001 0000 0000 9558 8001 0000 0000 P.......X....... + 80019cd8: 3a64 8001 0000 0000 d:...... + +0000000080019ce0 <__fsym_rm>: + 80019ce0: 9570 8001 0000 0000 9578 8001 0000 0000 p.......x....... + 80019cf0: 3c2c 8001 0000 0000 ,<...... + +0000000080019cf8 <__fsym_cat>: + 80019cf8: 9598 8001 0000 0000 95a0 8001 0000 0000 ................ + 80019d08: 3c74 8001 0000 0000 t<...... + +0000000080019d10 <__fsym_copy>: + 80019d10: 95b0 8001 0000 0000 95b8 8001 0000 0000 ................ + 80019d20: 4108 8001 0000 0000 .A...... + +0000000080019d28 <__rt_init_rti_start>: + 80019d28: 67ec 8000 0000 0000 .g...... + +0000000080019d30 <__rt_init_rti_board_start>: + 80019d30: 680c 8000 0000 0000 .h...... + +0000000080019d38 <__rt_init_rti_board_end>: + 80019d38: 682c 8000 0000 0000 ,h...... + +0000000080019d40 <__rt_init_dfs_init>: + 80019d40: 21b8 8001 0000 0000 .!...... + +0000000080019d48 <__rt_init_dfs_romfs_init>: + 80019d48: 5608 8001 0000 0000 .V...... + +0000000080019d50 <__rt_init_finsh_system_init>: + 80019d50: b54c 8000 0000 0000 L....... + +0000000080019d58 <__rt_init_rti_end>: + 80019d58: 684c 8000 0000 0000 Lh...... diff --git a/bin/custom-output/time-test/amtest-time-test.elf b/bin/custom-output/time-test/amtest-time-test.elf new file mode 100755 index 0000000000000000000000000000000000000000..63dbe56c0b5cf47393f03a19999ce64f692c5912 GIT binary patch literal 218320 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

}|ZQ)pE344NmUzH*o%jnJS(-3Q_-NHO; z(y^oQa{CSEi4hjPsvZ%^jh@Jl@> z#Ld!nb~B#jG)L9GZe|<1d0bXLkBLfNbA&aSUBi|292PBU7uT4)O8kfnl|H6!mr*(@ zt75;#R~ggH(aZ;Sue=6Kb18q3)QPQjj$O>`<-AdbE2m>zTrlPuZD}7{OztWMq*u335xZExnIyizg;;jB3PMFr!}afw9(l zL46iEg{}{^$YJT87-T%uU}Pe#$LIU6^mgi@_$RRpt&g^dSVnCTuL(n?K9a($pbk05 zh(C>y#OKCiwKRO>*K3c}9nKcAptwiKBi)qluzBeB&Zp!C;|qc@n`qxFCbAZqsJrYb zL?_`JVU_5US99BF0W@kO>elTyFKU^J7%QxW6$9#B^pzgjZ;o5 z>kDMc2H~)>T4{l+#d)r(a9*eIQJisCPfn>BMy7GT42d zye7)LZywv1jXH;s>;=bV%$-X#?C~0OC|?E)%jeBsP*+tYBhbH zbB7&D4VG35eYkh*U-V<-n2Y3lv#ME7J+0Q#W9ka6xjlz1Ma>hR3OhNDYsicto5Rgx zptZ(at8P+D=c;N4l)I)3Dz0np;g)H~kR3oGiy*5q9%Exe4qDdZ68(m}Gaiv$ccj z_gZT`Ro$-Lp}LVXKzT#_58PQ+rA1_$EwNwOb8&tY)t2i#&e#X29s8UuEL0VCb0X@o zokVWeM7yg~(O|W+>J`1ZR!TjNT(kP@Qhtc=47~UXGY`)r+rpFPjnP)?rDp3xQK@|i za@9663O7yg@%y<%wl#FhCG3#1!#u9#D6jQjwSuU&xXQ`L%;Y8rb@{w}Q#J#iJ%YCF zjI?^{zbN=G>l={HD<`ejy!oTbUdMecoS%4SqfYm}7 zp+C_3Bf~qzx=)T^w)5%SS!B}RqZ#^lcrawzl)XSHt7qwFl!bZ^vo!gd9>V{@C5t7w zywLp!sCcWRHm{=OXm9kgYJPnKa*{^DV7B{LpZwTOKMK4D$7J=!GQR@Z9P^=&pywdXpr<3yIvWNtAL8u zO`@)TS}U!0*VbU$-Bxe%J$s*-C^qL?LDR9DY>y|jpOa+_N4tsIdxxMC*=hbo%wW4R z-Ne3#P;<6Fwat<7*(%W-tj~c5>l5gY_8F#=AET}yuHsYKL2N!ck$7VDBOjTn{)KiJ zt_eM~(|UPlKhuhSENM>=vJLmJ zpYolBYFu~jBK;+(-5BHLK?Mx%`vd6h8LQifZmxqza2Br4I#a)e!``RpU@cimA8^u?`9?h;NDaSC8OZdHRg$Wbar9mclL(HaTb z=`!H|bO$cecAXb2?Cp}{>u68JvE7;o?)d!}OEHj4mxt=;hg)AEhAl*B9R5410?r&k z)@dzlMS&!xVFp}%gv(p;u8Dq$=qroymIM6^pj84fDuj`_4iGPJyf@gx%@$9_-`#wB zm(#nN0yn###Lsc`IsQ{LUdp1X|7w?i~0yGj7%S z$C%C7N3LyPZN63 zk*d22g%DO-=p%hj`Z#}ZX2ek~5HXjBKSdnhVx$`ObpKf(ZXO&}MpTk9LvDS97>?^6 z-9pSr#7e+lUDZP_tll`*6M??ERX5yq`WkD%RdD1&>+T9qMr7UfPGEJ}XoJC)ZkxHV z9y!D#H}(sGle_g5RE$eQY%Oe+iuFQaP7=Vdi-JcdVJ}zb@EV!hwa}JJ{@trb7$ZnW z#9h}6R~2Dm#yM>3URO-~$6_76z}$E-mS<=o1@rCl_+r@CgI?qXef@xlJVt8|FcbeN zhy={8fz^`sde=e0)f%`ufJZoEdZEYV;119V)c_piV(-SNTz3bzQhY%W z_~Xc(Z;5u>BiB0vyOGq~H=Kr1O=*!#eBW2jib;;dMP zEc}!3J@A8W^KO1U`rQlF3!dV$X;Y}d9$=IYFmnV}Z$0=RR3x@Sy^sj?!YgMaTn+kS zZMZHU?&^Q}@w|S7=Y1ux0?s1F!@zC_IkiFb35<3G)Gh*i{(r#P`4&ou|G|@B0?xqx za55>1_#eYM=!w{kM~#FF@HhBi*Tu|UgFAzQwzm*F5GQv&S0S(erLzN>`pv<<2jh&n zi#+B~?A{FydpO^#cJqu^W6!hr4 zlWsqPn&kw>ea}w9E90=XYT#Hl6b<{K1NaBqwm^)(!?^PiZLuDs&RCrP-w;Jnd0-{f z5l7*>^gFQ*^Q_>$Rl)ZdRPXZ-g3;zEeQT+v)3k%AC)u<={??Uu= z5YD&GVBANYvhdRQ39qbmdO`27+a6~Rw&y|-upc^!xeh^&Bd=pdZ^5-+z?`1N?3}R+ zNrO4t$Z^XVmR%-%O123Gf9S&{;w$mG`j)L$l(1?~)12PQtL>3$s z2EsF=0p6xn(*gAZMPy+?pjla>-6pZQzDvn<4#TBoXbDF45 zW@S^V1nE>lEPSAsABb1b2~nl*{>^mgf33sp#tpRho_FU=9#8|S8yvjPh&hlCN%gB%j z5!r88aA>pNA5Q%xYFaJDJc-wGZ%r;AtPuFaH<;QTEfMP*Rg7PVOsm-Y{g0<*^o!26 ze8P8$-IE(9R0@_2UgjDp2bFE{y-*%=bb&rHXYBo)*9}99jS}SVfth(u=PsDoJ?Y2X zrR7{gDdIT!m7Zo-h#z|}_+{(NM6HMY)*DC}pK=t0?O>2)UK6>sf!6uhT76$^Xw`Y+>Q-?mT_ma+HbGi{J-p$Dy68HI6CpDL1!V+s9JzDqJ1vqco z;^*&EbLVW&+2q`nOD8W(JmV{ubV0r>f8jJ`Tbi#dM))^t@r#-->t+9%{m$}BpCtE6 z-WJ%JTmUuh_7H_R6;E}46W2#Jr8aqymRUHnhPH?{kxjhK(>a(SMLj$0gLIbp#JnZe zP``XzGj(9j%WTfLz#IvTOT6swo5;Y2c>_6>eTuBLVse7D>qGX-F6D;K7+6Hyi7s8^WM<}>zX_^p?;uj;ww*{;4-=_v%%`ATxaSqe}(@|U7N{djfsYgAEiD) z)%R<#oxIDRL>(qS7|)|K$-Zpqc=9VPeQxG}sHT4qg9-2aT*4%IUSI+}pDJ$Ujg=ra z@~pY-?bM75nLVQew14@2K{D_x=t$**bJ%Z~@y>(TJ?j>C)o%B`Zh9!aO}IvU5k1d0 z&bK|#QTzf-{7ZHXIb1n!{=lV^mD2x7e~_LpJUsTEO!Kbti-|qt<_W`vs@&I94dt|U zgPuoK%&45+COtKDBHD`>O3LH!M%Ktj~nCCh2=>Jyx zMtj(`gwD}R8AH;Z=WNOONvFjQzSgLKWYmgfxGqbb&YN zV)~$HS!NUcx!xt?L{1?4M9u`G0of*y&pS4l+pkNNQPsGC`6lv&+(#EQ*Jb>hO=g|U z8mN8a4DlEB%}l5psO;g912EFQ9=YngqHo$&vclM=N@i+&gIV31;mu5FA3W?$kqV0c z5_EK-Rf#@A49*T`f1kBJqj9Xeu1U0aU_zf@YhOwDx&BP;h?X&{(Ie;`p&mIOvZRd3 zk%vlWVZ7WSm=OFIlwptf1v4vlPJcj=+?MF%kdfUyV^z3)d@46lS`lD^i~WkUK=Sc> zl-t@?@=N|sd`0L~cK7t3a&APH(0`%gUhlv;e*yV-$tT{?-l(XwB+SrK!nhQ7O3M{D=mqpvT=Fje) zrRrCyLY@@=ykI`x06E$BKdPvHPCdZgBaSO-L4gXn27Yq1{pnCLv?`mlv^*mPFnaY%MKGhF}mxsQ~XdSwu zET(D-9$!JY)%5aiK@RZG@oiRfrUuc+xDaU=zL(KACn0{3xXcysx^+-L^?vKIkkLQc zd_qg)Uh_lL3>VIvp4}_TJ8jqta)rPr9>sIblPs3irW?iSxuj(^kJHhYnf0?9NB*&T zGU-x}KxJ6leK+dtZBUc@KIbW+gp= z+)TnxR{cI!I{Rdnk~3VtNNy3v`+NIpcnf=L`x2e2+GVFR$q+-dSZq5O{ekQ$YGI-x zKg~DC7xnb_Wce--t+ev?ulS_#nSL4s_D+^JJHNs^ow)qI!Tvkmjh+#Kt#oVsfb|>k zp7__Oq&^DG$zGH7du)#Nn7QR?<zM$Q8Xi)l@p~o9rts?+ct1zp{E7KiGc} z0lSEiH?}i0DyvPn6Pz0|gci^-#3cAe$c|mocxv?|CfF|wJ=PF)4RVDRE8jS!_zqsx zcV2quui}L=!`NcAAxb-f)ms@9@nrYQVdGb=+N>$x_00wq&f~j6-8CZSuTFL64{M~_ zD|$VfMrQW{^9-FA?^X@vv%U@fS!{W$inSPu+Bx>0THn~_oU7TBA}NMO?h)@}-J9ML zfvG%cKQ>R<9h`A?9(`x*O-_ewGCW(WL^KknKnJwl`!=A6N1PGXHRQbHaatQ!;#sH- zUp+KbJ!IeJRBs`V?0p$nFF%1_bQ10*uiCr7GRK8CXIIThR`OWI+4|nqo^xWRjFx|q_dpTwL|#X?wKJ^! z)_MDg$!PauHFFAvpTx!(h3Fa55c!$hG;kPNx$V#bbg_=vEv*CE>v%@at58a8y1o=% z69eUe@@xMdZ+C7m2ulZewCoG^N!uf`X6%f zMdQ7?J^V0qG;%_nZKrWhr7qGY-$h>sF&Amt$yRTBhuzg!sdb9n45fzuR$iE&vJIqD z;tOxK@1|6p!V0p=gRnB@VSPb#e0WQ^j`Gwk0Cgsz=9$K165XnWdj!F6_Wc`^$HhTS#@ZV`fXIxz)oOptitS z^kek3vePQc^%Ta+t-WLXMTApyWtA&{|8|V zbKJRO7IFq*-j-;L;tLOnd>a2vZ%p6irb!3nyZ#U2c=k`i51)Xs)^~Pwy@0wu+#Hpz zS7`yN1lL?jk)!^{(oAj_`4wEo2U!R09pFz*BVwd;Y?8W~2(lN%`qELjYK-A`QKzj! z&bL-Ur-o5Z|0G&0;)`umT008eUYsh9^H=l?5suPrkkQ^1S()>Us2+=!h-{4Rk3X=M zQp>@6(|oHuWyB-QYt(nEVa;_;8)J+kv5JvC(aNY2GlwiK1cf=iPmuR+v)7?)Z)%-( zWb=cuDBdFyi2fYAZ!{!E@h$l@?*Q*1iQ$*xv%c5**U4ozFncO{B1a;3qWkox_D1eI zuAX6~At%wvYp>;Hati&FYE8z-yPOL;Pg7&v0@xbh0mDbZ^1yDhJhg#OC!VF+gEXLEo zvrQ_%bf79&g$WY+liP4w>4_@k`PDQnfnGvu;v!EIPdE4?ju)l0pgii%Y|Ej*Iv3T!ggT4jjut#wvubD}yn)+F+S@=RgK;#4Eyh@8ta+B2BD z$XvAY66>rT)_SwQRz6-Q(q74ke{kB7UHDJs`|@>9kl)W%gSX%t>xxBNEp$d{94W8l zi~nhVP9$=@q|)*o&jL8%U&Ld(-1ZHttflKOl&>SXm3eT<8RrP>8S$dTdFu&t`PFzP zGTIK>W378eNIeuOt>liaF}K?~Es4#fY|nDxQ=uB3fh@L@;UL%<&ik2>Pn5&aoko^L z(*uMnVwNWps*nO?CuB)>wpUtL%@2B0c*;+Yrs_4UAa#JRE#CE{h?$~~+D=r45A!xF zU_CdsL>DPtq80RUW&#=EeiycT%8P$UH0>jYI{$+!e|hUKGbMIdsSn-J5hLs*a3-og zRTHbrEb{|-01y2ySDs3UZ>$v0v~3WXUg=!^|TR&YM;VF-5y@7u~dVIJ#C;CA7OiwpEppL>gd5^$)o^Xlu zR6HvlV4pP)JL{EG>fg~Z%010%j-*I7D0dN_%B%Q)aepe|y4KUoMbuF_EgCJLjMT~+ zKahEt-SAF7B=;14W=f#4d3C3``72QvtfqY|BVI_Gp|2!r&|Rc7ezq*ZrF#~+9TgxM z^9*rcyQ?jX{T}~EJ*Ulg0@Nk(SH6%uS1itDkT>z1?WA#mSgNnDNGt_%3Z>!Epp*i18sw|!2X}TCWfShhDA+8w> zjbrh?@!skXIJUg9WuYLSCbp602pi}Qq@P-B3?llOw~_PPKi))5P}iHMta5x7H&Sc_ z2Z7eiB=T?SkWmg*DMp$%lo|1I>P^LOZZL~;2f47oOK(Mn-AHz%Su@>fYzfx)>XCRc z^$%sYvCbgb(cDB~t=LPt!k#Cy>4}K*9BY|XNQ=ems8dn7`-pypPT(Y=6!OTAabc)l z9P<}c$T6)OnpYX3HdgW(SF|zIJaz@YRk$tf;)_#x*=5!==cv`qo};%`=BoJ=5}Dtn zNR6osnsrHf=r&)u~{Z`pNi2xUQ7e9vDOEYs@&Ngr^gCpPRtMsRi~b zyD729=xZ=aZM~ybQv09&J#~ROPj8c-a@pJsW*wag6~{!Pq`BW{3F13LYpdPSx{`;P z>NG0XgD?Bpy37dp5-dg)k`!~PazI-R>gm&p6TdL0skYJ{yhGGsFEJ9)5YHTITPw{M z@DNy`z16-&g^gzD=}Iw;|B)ZSwq%bIL+wGtd8?>ZUmbw#?j|~+{%xJ3ebh^V70&U? z*hB0H@*lefQQO{c{jE0FI)RFwQP!D7=nG^yfkKJc6Rej@rpkj+OtTx?pFwv}RFjQu z${M2wHJkjFf5A5tve_=&4(b%1@UB3{`7CZxjY`3ilJ;guL#IvG+NHjoMlPRBAY`Bx%j? zRJ0wN#cf6ocN_i&t&lR&&HmuDN2dNE<%JPb7OBnb=guF@V$@Z5!tLTYW)0Q$BVDa* z(Qq1*%r0sxwYxRg(dd#~OF`j0LRF>)y@u#$-*O_>UOk`UHUFp9P^Xv~c5hS+kOVJ3 zO6ZQ+BgkR)GW2_z5sSYuifAp>9Yz=XBsG*hj~RO?%wQTY6Ue1@6J*czG>!NcW1u!x zP1AQ4h|}N&yNn)-2yFzxc&jefCukS7!rC2uvYnqk!fs=|(hc?+8>K6g9qbWc9Ot1K zXs#vbCA7}^H`Yd~KHHQvMV6De&zKPT4Mw(?_(xx?2en#y3wR>*Fbh!UnR`r{*qN)x z&0-Ev8}OOnIU_ zmPeMHX{|CdRb6|a)z*JgL$*epqk0J6@dfxoY$>R-YJdX_vMX36v{TwOZM*JKX?r>~ znYzRO#82ltvFq7nay&@J7W;4Odu^JwK}*4!O|agP)v0FuV$@BT&n9tykZTDz*|HNRJe=xd!<#6k8bI})6rAh=fm)I!8FewTZ?yq*G? zasQF{&*g;w;{GBV zY{HKt6-P?}kckH%axSO#;P;ZCId0v7(ul+(v?$Py<3^YV439)l?VT+=Dm%ZnFjBGkubDiOjfR8-K z9(j;U+X$~_V*iKW)UFq~4@}4%naiNBf~;Hz(W24UmSA53nBjHM9}#T5B-ok=HHU$? z<>1(E?s^a-EQbDnf*FW`)Dt**4x*y`Be&7t)1aU+ z5Lq|dzbdv&K^ty9yXzrA;itP`?{1|3K~!D$1RLJoH9&@4Z-FQx3KE97sE^*41~vTz z>r%#Ot71==hI2T62t5^vy_k;(=EL<&aAOj|$ladmn5q9^ZeD#{2cP2i2u7NWD7bm( zZq@b@h>eb!dx#$7V8k)}Tm^9`1|n7m>;4(Yo?H3A^$Bo24lIlb2n96uAFO)=nb}>T zSF4G$KUxc7*=!% z%;ytiT$jTtX^I(2LnK0owT&^pzzQjen0^3R%)l(%!3e5iyZ^`Ddq7E1ZTrJ@y1FZL zb#<8Ond!-qoQ4dNlOUj=qLOnIP(%<=kr4rrBp6W#2`WYu6~uHEOqfM3DhMh9SCBAF z?w*eS-#%4642bu8@7?#U^?hsoYpt$6`<%V^*=L_v`=lF?hJDcM2}rmfWu+3k;`;#e z4EX&7t^SUZj_(}I0;gbhxB=?QkC>Z13E7S#ziF=D4!=~ynF3i8kc)*V6AFBegOXYV z4RiKigS&tbI`x9qs3f68w7_g~AD(6>%25FAR2o08`~Ps?Cvz>B;-j6LdfJ4hfl2zQyc;oQ?OD(s2*(sb;w{|L2y z0;Hsq_}@egS_k~&*k9fjbJK${TY5gW1f`}QZZQbQ?nB8><99jTK>L|0m?rld;KIH!usjT!PZK0DIGa!V3Rip|OoZG4weJ z<>f3&k09I@n*ym`MT!!T=U-qhyD9FV|5|V}4?BPv(_=VgeilmiXz2F|+#zr?IGlj| zH=|59g|sJPFG7R+pyMZzo5k2A?}z?3Aot6$`~7sZ618nSzTLiz{*D&3Cw7G|6i$M6 z1ajk-*gL30U!Z(`9NmpFa0EKt7A38`AiTnQ;`Vt9JA#~@j1>iL+y$@&d(Cgc-u9U| zf4)A-`>j}`(41Y5a|j;5eG5H>gVBG%?`foe2GaH!WO@m^nNGy+L>_*JQk;P_yo2-X zb=*up2Yp!q&IK4Pye}+(#-Boc8z9U^9eop{jR$aYe?Cg?vzS%>6{V&PN=7341-Umn zmWLF55M6+?5#Ga{_o=w8;5Dp7_<^m)%y}_pnP&={u{LvbbS%zEv_x-4-E7I$Sb7T^ zqPcX30ZTx+A0GP}yUpobfEQx>qD|53CSy)}f{<-#%WlMafdj%2xROvhM?-tlgibh1 z!7rS~ijF-vsh|Y9%oLWPF8zX2{>KP!MDM^k{>!5+V*{dXVq@4j_7B#LxrLu_`=1zH z8m-2?eO+TWqqcNJZ}NWZOPrIS2+x3WgD{MFgx{j)VzY%6*t`ECdl%(o6lVE5;Ct(j z=!aOC7mRg?{2D&R7FvodO>N&x3vrs^L)OOPF4lwT(RINe{ym7S6sUNDhM(zkNzp$?dqERrf)~$3ogMqO)s@( zS9PxXrgB8}?bw0wTqJz*+e1xGAE?yA4_M}DExayofqS5<)b*}j9d!Ax_G2`Q6Oq2P zTvz$*FEdV!sN5e!TPaWXKAk!zIU#9eV&CMQRy{b&|3Uefsv}ra+sWVfx3c49<&OoQ z60VXQ3H?*2B`r>z@7(OYNBamnPQJt~a%TdA0}VslkL4VB=k%N94+n1*S~+$nf1j9_ z_=EO_YpnjdFetV(u)7-TGpizzPtOcGTygTAvV`EPv6<>?h_!3-)$TT)q@)UUn$lk^ ziaspN4$KoaRy}q2(#m z{rbzH<;NW*H)DPLO^$hqTT*`Y-Q_~hyd6HMw>Zwhleb{W=(7erBT-ocF{KMb=o>%hZ`RW?g{->*1`r5>~ z3D0@o#d)+Z;U>N2*3#;M);+Oif4p=g?Y9K%AMIQnl?$DY^v{xichB=ScXrZWz`2Yk zZ2bcRg+fU$J#|$4RrqsaS*MC#*g@Mi<;#?nuE!G>xC))U)aN7fq(R~H;m6d2HGBU! z`b(n|#phouxgV!hzvx<)l&Ppr4X`9chXm#+pIF{GzwB7f@gGXxIRA5C zlX%$CE#*1vZQg(x@tE@|l;37zR^SoaU1}ikRLxLRv6iCXjD?mfNk z#F2CNW0&sPU>_;uxl8}h)6w~`c8BW(yFx5sp~^Mk{x;d_D=Ry;{LG>=OG@YZe~;bl zI_vZ$G)Z_vTa++fZYM6Wz2Sc)u+y?o`nG1nzYd+=aQ4CTo2uUnoz{lB-|@6gdQ&@$ z{n|Y(U8O@fMeqsSG}l_V@z3L@8l0VV?uE*=epTx3>gl>8>2uSH{SB+@`}?QW>=YWQeFG;?J$bsx z=`E#|<)>=Cw!fx*oA{>tYVDt%BDuTu9b5mJ=Kgb`BZ`IHes1lVGpEx^yH%)FiSqsS z6`p3^YHfQ$LxOLyFP&l_zS_OU9r1?aaAy&-wd9&nP_{EmN{Qce`6BmPq^LPsPWB|Elw#!1F0 z(s5Sc|E|I*ejwf+{QUgC{`{zH$l0Z3;cyrBlj}D33g^4t5&Bo!Y~{SQXZZc{FQU3M zKK5GGTc_KXEiOqf`Ko3~(0`mb8X6=J$<-rga2rBwVvR3 z+5MF#UH@IHku#Jgk!vga#8z3awyvqZ=iIXLnAxZiY!e8PX9e?x4qZJ1?a z*>7d3Wh>8oS+=iye$Ea!RJx;MJIIVP&jw5uW$tN#%W;I!0FtFI|btoZy4D-D%C z66hdJSLR?3{WRB)`rFDN$GIE6+quz>XAh>qp&4v8 z?tI?m8t!Rk_v$Ze^V!ce6a7`j53_b=SCVv_GVa+G6XXn&s6$i7PFiMBWRIFP~a|Wyv=s z*#8}xFYQvFbl%~?T&`n_Ls!~G>sK`qMp*~MUWr(6xA0Hr`<`=Eqy&mAd*qL`m7b-J zm$kEwMfU4NXZ7o$o2<)m+S6J8pA|dH8lS6QHm>TMXg6u0df5H6^Ia|A_(>~~C*nNB zXDpAf^MV-iSB|MTdv5Ca*UD!HKNJ1Za_6TmoNMn$a5SEZG1fHny#LOMb~wlXo6=P^uM5X*vh%F7sqYxF*;NjX6YN*6X;%5alYYsf5}RmQ}UX{j&uCyI!`*rI-YXvu{vrT;Xk4ktbc4+ zaEyO%*^%>al}}Vyhr$Cx(a4oJ6N-iNYF1RtEiEn)O7jEf zBD<|GX!8;G5v{T7cjs>5?cmVx@>nOPfxlYckI@e zdKO97hKoXp(Q#}m_HmBz?<}8Ns+RO9FRUquy(pDx&$;f^a~w~4mT3cG(?So0-@{5( zoby~WuJX^a-6aL34^-b6-Y70t7dlrsZ`C@x`?zL{%fl-}t8mIuhv<^fi0W%A@=8|_8zS4#{uk?iFucFzZGm%hiNAz5HRA6o8y0T!2yL^;CA-W2?zQ?=1 zcRY`nJ2`q<{s_Gko)&Y*gy^loaMhXeW#^Za{#n^Kw4E`frSmO)v^K`w!_`kZ9%&Lj z5S<=7kA1r#|HjJFQngg7I27>2+&10O&iRYInRBfB9krwIedwOZd(l^-_eZAGyjsP| zKR%yZc2o63;Q^M1kd`xAxkK>0sE@Kf8F?%c#3&l0>Ch_wQx!8xe?I?vg&v#~8zi;I z8jVfb^R72tet8zow7ntvW3)jmGt#NXSM_Mw{PQ1_edIqE_KCXY)>~*l>NDI=Xag;W zB7w+f(T$h`8y#wi8T|K4N$NoC{Hlof5%bB&{lWUxDHU7J&n$bpx?d=Q zbrO9XYqf}Do%>G5De>Fr^2i9>AuuJ{9k%s%D)*E&F5Oev7W;br(rT?l`%v5GDskq> zj|-n+Y=1EN2EH-o*UYWnRbGC+LB&e{jp6!Mx4oSsUF+sdcdPbYmaC(~a65ZmbZ1lv zJ>Eh4xG7AQog@xPUsi*IOazlvX68I zT$;ASdK#;a7e!K|SH-r6*4O-Aggr2K`7p8_9*Z?it8-k`qi z_}!^G4=a-~kMn1Ed}LT`Yq&%BctEK9qWp^TW7Wfg9|=);vBI=c{YK}b+6*z3*`m*f z*Thyv_Jt$Cjkp>9q}kUlt5l2Ffdx496I~tE+{&OdQRg3Eu!~`|Xj7ld0|XG+QTG1_g;*-lk{&-!ER zWO#LKF79`z7akC(Up=L4cZFW<$4Mx%ZM*Wg{a=o+T{o(VG{BM<85qk%nb?h1LJWLT z{%ZLnRlin07u_m$l+*23X^Q(@t%3ZewPW-cZi@IOf;%mOV{2ZkEG;Xo>|He~^eD@) z^;6fY$8jo3C*>U}TX-ruE%sn!Lrf3f8Eo(GQ~r467nLsuiep}Jit>!&)6-l4**J7O`n&Z*`A4P9d7tAIb)no9mLefK2(ur5ga(H<`?pl&RGqF6YqZD+ zOBcDh+(+M`d+p=ZhL)bf+tK+Er?5W!OgJMru(Dg#OPFcDB~%={Qfes4+7RbD``h-l z)^Bib-MMh0@Eqp#hlandDyk~SSf^<)5`NYClI=;QnbV_<)l%hG*dM~-@O`-RZU$~P z|K9&q)q=`Km8F5L!5m8`TSrOMAJ)cb3sk$<+44c;>1Y}5Uhat-i*Ks#RW-QcQ-8yn z4zayB2fCMb1#aEAMf=`5QM?B8;9GDuc=za(@O}O}s`D#es2&n%5`J2|Py9$};<(e^ z&2g(#A|4Wi$OPew$ofcW3Ii69DT0@p05u61Y z&5Kl^t{w?ITiL(zZU0ODda)IjG;7Q*+i!8aYd>mBu{|7Z2)oJ7us8N_Xn)O>)e9>I z`R}h*!rx+6d6fExI!bHl*ecDC<_cFuKN8M_zd*Sy4)zKxs5n{uM0K~CA7D#Jl7CUN z?1g%be4TvG@i9Q?pCiH1lS>=oV5mj%5(_$OhL7XhT$f0R&<%IkN?EG(GPkgnT4e|AJFddMR_&QI;2CyM#$7;lG5P*d2d;<#_*8+#cfZ1%pk&tp?qMIR=pu}+C;2NYehU5+suv66?CH(g&GuF5T>EMZ4!Vv#6de)s;(Y$T!5LMp z0!J%01eS)zhZ|W3+N}0=+A(Fh_M??qL^dy48pDn6(US0cRXqbQRL-p)6M7ye>8!RU zDciLz$`0*G`BjU@vMbsED*`)4@?stR_J9vJgS;MmvZhOHo2W|*al_XU`#$wuvC=XU zcB;+MX5sciQO)cA_xuMdwqa&!b$F~LCKlP#)Sc>V?FQQ(u>@~{=GIa?QcLs%WTJ{YQb zq|zFA&!1THTx4GK8_bG6E%(z>)feQKEZ+*BT8@Rf!MeIT_&{h|RffMeYQvYvO`CPJ zvR#^Me@We-d~O{nd@SA>S%|tdCNwNO%s;sLRN!p&&d^Vx=Y@aDJ*6S4&)!^h%8v@~ zi67&31;!o>e-*yA=EbT|;H~PLf=`EDh}7~_Q9${{goAn11&p3HwgcTd>I}Y z`nYNrRxbP$SdX?UCSrBFRIc_`C)!VlvZb4K9LjQ8bW2!|Y_0YN_WRfQw}(PC2Zde| zllrQnT4~=UjbuY?%}@*8i>(hgh~64l<9|NzXmz{Ln>7m}oiSTFRC!04Z=az)z;3jK zg}1_Xp)5QzdT+3ye?-k4)uV!wgKyw;6vbwh$0=jfo3%2_P~7nSZFp1cxyUG-S~A6d zf6c+_KtKp7H3NkuRtZ~M9ZFxv9NUfJE?eKI9P5E~I&-2|2ClC8#{Z@Nn$X>W>_`tW z+4hMXlghPe%5KYeX^ilA^en~`&%`Qgjs!jroU2X=IcgpbE@Wk5cR5Y!Y4_W^ik+oH zmTl3Iv0%6));N4H@OjOb)xB`jz>YxM*t3>R(m71*O?EtC9b&7pu7iCxCvtbJb+lPc zr(g$vhnmu$9QZsevMIKD(m!om9ARmdb%1mLR{BRHtD`@}t_t22WPyNxSg3d4x!~y7 zA@Lchm9?8TQ|)R!DHT}`U=7sWkq5BK;W;`t!rv*>u12l7E3%1wEpPNY z9nOx$D#JU3TO&UQM+Hw*Umd(QI3!RSY9C9LPKrTWeTPjNEUmZsEPZkIfj^dmbG9ah zZt+(J(nIwF>w+i3)2*6qhqysICGWC5E&XD-&+?DR!RXzB9IgsIg%Ue9^l9KgO+x5p z_O-2}Ws&-_`l_vk{F8XASb!BT7S;u)+jI@K^j8NLVun0Wvn=|vttn0u+Fs-- z-Ri-Y!AHV9(N*DBLj(LRu!`uGnr$`9LW`}3ECtqOc8}ale$Y19`kUq6NB}bewulgE zgjFk#2k*hEq~0~@mObJiOK-JYPM5Ed)>@ZXcjL6wN!ZJ?Kk`t`&4GJ@FV!(ZCfs(f@JMt8RvwJUTH;m#Tkxrxv%%y3&7lF}B7<(RZ;X^~Jz5I60+Fs2D4&RR zW&;E{>Jj!udWQ}L76s;qp9o9})Qcv?t`(cxTyg`Yi!@#CV(o0Xheadr$10<@h7Z@Q zz={kv&fHrTJ`~x@9<$n|{>mfL2l92cH*q`1gHabw)_FM6FO=p#9K0oz?{|lO52p!d zaGqtgyjMCc&yw8Y9&tBDf*-^tM*ZO@{G)3ogg^6tS`)$AjDJ~LS!c-mrEf9QKV9r< zy$iE;Q`B2ii5mn?2L2Uj8`>3qm^BjDNv}$y&v7W<>)~aZdaDQZ#e}3>ExYMFzFfVvxRA%>B zr(qSwe5{PP#(KT21A8mhIl2eu1OFMgza|_!A7~cD#Dmas_v*Lk|GwSqo1!x{m>n{o zQnko*EsuNsyMIT5!0~tBXgR`D5{>^1(|<^^0aMujeg3Zo{;vl9|D}O=yWqk_7*;O2 z!W4Kq(k$584M*W6>9H{75qMcF@-F(b$~WT^&Z5YZ=#NQ{@i5yppcbvRX}8Qln9Tyn ziirkg143;R@RC~NWgVX0mCzL%u3r%>ZtEi8$&=vaV-~CO9URJ(S+jBGkxp(w{glw8 zS(+zQYJwPvrn2e0Z=`H+)U8u|2O;`6hpS4yG6H(V*&-|SqCKZsN>)*D3flP z2*5)C?%EwnLMPxVILJp*h)KQ&@aK}THwsXyG6W3VKfx`yx8TLxsd!u5++{)}plL2_S*vib?rwC%Ui%5KeN4c4} zXe3mQNKq$H0>l={^k-p~rxB9)0o-08VJJ{-y6a0o9%UEaNff|DMHOF|ZnXFsu`S1s zt0X2Q`w7G5J%&G3Jle`=$5Zx$6KFZzIVK7+i$7n( zJEH-dKp`PM0GzoV5@Zr2q&GG3@8D3JdNH8%LNjO$1*IM|g{AXF=&6URY0|!ggC*PS za6{O$CJLu6HGwBN^(Z*b~oFQMK{)Kq$KH_tMI z`fU@1$Njzue88#OTtfXDQQtw-skToH>V9>p2b#c_oO<^q)R|ULuO!LSY!kIQ$(ZYAVG-HWfnno+BR$64HxJ zRwX1~`X&8J8+$(02D3)wQ|UBIX#T5k(@*SY z&!=){mc4u`MP^CLr!rxdi+svqGnexzzsx+#{|bW8PwZjOr<^czBmYjc;`EaW6yXaL zDyvWmEVD~^9Udqo)V|g}g!EtN62uP?iKTu@BM@3FynC=3-Gi7%92zH66Ki%Aws=<| z?g5qPOB{$Woa2C3ns>5+SEt92+*Y^xHN0hN+pQjT0o+F0ZuNKwPy~_Mc58z80wCTG zSX(3$iP?c!lLfdb{ZQ#xqBAfZH3-K2MML2) z=`I^m;KW_RNCz)BBJSBU%5n$z(Zh;g0JT~QM5ZMyhL3uPyK~9y{({^N#~Qf51%>;c z1nV*hTt@I2f}IKp(hyG1U^t$EBcThpGOI$$x2)@)Xtfy8Qe<8>oOSi0w#^2zXDwbo z)KaJ-X__c{n-n`tif(a=BwY7a1R^Y;G@c&7NS-n27J+$G5{znsXCE9n2rvXmw2|7t zHsz5zY=uNr&>~{8+lU0M0L3yN?~#_p@K1WhM4*~U&!SqEX?Ds%lJsp8C!V(MaY+*^ zFJ`ZbrB@j70RtVj383Fy47T*Mwzd0qLVWsJ+u42b$}FQY7symxI{_;`zOx#Yc`f9K zKc#5S{-erlBMq9hSc=zTc@8`;s>**m_){hU)yHgBISF)3^mKC>CF%|v^ zaAcBa)*L|80AtiJ#6*4#UgP1F!-lIO?ockG&>X6QrM19FhP&)$m;~>EV9jL-ux^`E z3)w{`?q1+-HE?P8kX>y0{}cY7#(6ZXC9_HfgWnK*-XvRK2ou*`4jak33E3GY<{4mS zLla#3c!oiGG*-a05b-DyzR<*{i2KL!2b&Ss#TT*%o2Y)E-Wo@}zmex2}MyPMe)+|8L0EAB4c%W0UsVF+No@A5(TczqT0gI z7<}qYxtY`D;vkGK_?gZCo5$!ZA9lr*aLO=nL+!=M?>Z8M_ANTi6EEvFYARA~6}I!GTR zy!zcp5jLNTH~o}UrFj$?M?b}`XhN`caR32^C$P4F#dj+-UWPwH)N zJ_UaClls`3&%!_bq%QX6F8tF^>SS-e694p*TH1x(C@5CpED~Y%lgAK1gWjWNF(a{G z)&EQVq&d*N#14`U-j-(E@=-g`wPwOoO!tlh^NY0IbTyaX6pP02I0R z1vH1eprgqpw!nJ3`F2i&my~%I^C8`Ji(YfUX3^UUe28EcJwl9^*aS9+$jCf^qk7%8 z1ok9g<2x{c(HK#XA3`7k2w*b$Z33v(v&!KMfFi$p0l=QO&kcyU$K&$imO{j}1tHiN znPc-Z8ucmj1-OWxpr95SPODr*^j@}`J=JxCjKodV1ku#cR>%dkcxCuZLKW`Ow>x z;C>w50cXYYr*s>IF`q)duC<^s7W4Vb#GH0wcfrStd zL(79CawCl2jRfK=nm??#F9K5L+>Umtv6B?5io4C>bIL@FTbeitK^0+DE+UGQi3pS=X}2=Xd<8_!b(Omd?QU^e8d>fM5rwr1EE4b zV$X>OQoi5?FzU$~2>VZNT%b zAcc~UJziku7g^#Sgs}waZnNEfp*FKg{_J@ejT%`6i=vmiHY5Gs`-v)v!{3p5kdZzP z`Ed7nHZsy@r-+iK!-WIu1fetha|Otbk-k}&6E$k3#C4_jr0zCjj~C{SR9I<{mfIa9 zgK9~<7f6o$9f@y-V&qFx(9^S~mOM+Qwu;BN-b5OXR8sZn6pzvOf*F#-iE+$hEqN~g zz~$th{~dXHhM7-P`Jx~Nb5)EFY7q(QjQQDss>rSsQsdQZvMEVRSeNRPdLgv*ti6_VHJkpZFafe zLQ-xk#ee)sMO~|%DZAV(nlXJAx0M!xE{<8&&6#+w6~57`*BjSYG88SWo<{s0^)a9r_7jXj3AoT7 z{{qNP)&>|@iNx%WHQ7osVuaTgo(^LuDAQ1I0ASS^3VsX>$YJ)!gcv7FV3(ERYg~0>**u6q@tg(^~@l* zqRu0C4!P~>RB{)P+o3e2$a-;koNkgEcgw>HfIs_CVxqfF07~TXdpE)-0x*ecSPaWr zh2)n&&ywAz;Y;(atOy}O3ZJv-BCR*a0yOBMhZP?Ljqe(?75mJf__&016Q`j;Nj+lv z-vk`q-1Rg2dW=O%&^yG#w*#4V7YCpKW{^8GgupBrRAceWO2F$r{IWCgiqpj7`Wg5+ zc?jTxpHpUx6W~Fu_l3bvZVPxF1v2id6LQ*cf*p&5>~3&1bO=S1q&Uy!5G1ENN5O!q zjT!n^o~c94pxOjZtxceij*IPt&L)Bz99a+XekeGD+?h903diHM1JPumXA*vbBj*k{ z?6s=jnENo`!N7kLzbtf3g4>P}#43~PtsoJy?}c|<5HBSIPbu(omLY&^W#T0%pkCA% z66QVw94f}SkSqs1oIy~i8w$A#5s(@?*Ais!1Wr6SKByW^#BarkyI(@wrIt9g=u&+x zH}wS+j6P`$x|qaIr=k_-vmN5Gp5g|0Wso~F1XniBysX8D%kc-v;fTvI(3B&dZ#`?} z$W8^$L^C)(vZ8@kPF9?F{UwR$T}zzX1UN?_$DJU^Y6_q=@+5zUNkBzmC_;F7KNv3# zd8g_Gr}~_Rdd*@(U(Z5nT%Ovpw5e7%WZ%S-AFpSG@_syy!gw61j*HpCq81Ml3Z_9d ztfkI6K;C-PG_uw%a-*J4V@1Th{!T(^|m`gpp%<3U^I_u`?@~ zP#aK*H{wZ4BYdF&712f*v*vidgiB~ZCD6cVCQ_G%Q4yE4xk%j+wQtl4Co0syHF=j3 zmExneSfnPWDYyHjG~iu-fk>gU&ZrTq-@pYxNurLt(VRkosSZk8qd6Ght8Q{OpeDqK zOLGvK(12PG(t|UJ2BmRH+(xL-tQYYYbyjQQgIS|_oiSPSDVTSmpPZ>QuQMhSumS>I z$~FzHy|IkxdSo|^!^VPR{K?OxamnQdVE^4^Oqbd%EN*o(V&QfROWj3AmiQtgm27pE z1aTqI?0kifMx!N5i)11+M@x=x;KtcW)cJ_I>k!BN3~wi2Hy}zmW{DjLKYCbkH!yL* zh%dOIRjY%HUQeKUc?wO;974n6MuD)|w!w7|o`N&p(6Ld1sx!HK4qrn^8Bmx?d z3RD9?R43we9!924Jsc3-VS{z z-n#w=csli!5YMGQg11}WfVW5Aig$wk8s3T6{EhLYz6b9lo!Xvc{hxTJ=!^08;i7W1 z+WM#9lcu}jPS+11JsJ9R_+;vv@y^o2z|7X?z@4Kn!#h`h6Yo6zLA>+z9J~wkVR+Zm z$KzdJ-vmAl^zR^HL%lU<8|kg!Zmgeye-nKnaGL5B@NcHu;BKxv@ou4~;9aOU!n>v3 z3h!2WC%jwhAAq)v{tDi0^-PricKX|pu)Y31LObX$;oVU`4Q^NH>*4OC{|H-W;LV;A(7q#p~1IGgx1X_qFKh!0A8GRKbN6~xHuhZS!Z-MgU$n2$b12BnDd3KZE#!%?PR}A{w5CchCkEb zm;Mf3oVnu?=B;a)CuP)O4mI$FWI|G0gA^rvRk2}LLp+H786szPosp!ul)StN7!~M_ z35YnqfU8;eP(uYUkETSEQmGj+gOaicz*8^Yr&`+D>&5LHHcTNrk78jJX5pLHZ2Oxa zQPlPyMa1#vhTQ)_+i#_=$+T6}&VNZ$;VHMq>#}Qt&1E526HF~LUlxKj!Q?iUg9d2Ay^ZvAWeK(2-XBoMwnsNz?xtJ6s-250Z@WS zWb!1uuqK!+MCP&(tO*_l2LG*PAy^aqI7NDlxMkXM;5L?pU`;TWn=cE&nqV$AUlxKj z!9+sKLTI6|VRXw8DQdp518agQ9p>o4l+EU5-^0^m^gvDq_!M9lHy^ke&5(l?^*|=3 zHv}(pMF>85Wu!bosf1rL7CK?Qixf7C=`5ne!-|h1ASK6b6wBIT4^JO2f?kngw5*$& z+SJ6k1?7r9jM~$O%R1zG`X&^pB2Z*t+>(+q9Bj!y(`ypk34)CX=AQ+D__#bX9w!BV z5D(th%d8)n9Zc$F2>!tc#uR?mRMYz*cnjGLC<&r{DuAhG${v9iJ*=2~bEx8o85<}K zcM7?DDS_CCLgt~$XKpu%o`we*4IrXLnImL=UC00Wxc>qn^;8{yjysVQ>;?C{cr_H; z+VkSo5JTR)Syp4xPV8dObHPnNv6DS7K1{==E1?k>ScU#*XU(d5n^{%e=xgH7n*~%n z{=*^f#iL!D8>8J~L?Dq>Fh1IqX;oG2Xjd^uyYqp@XX!A`C6f3o-A8b1#(G1HbH4@T zP~O8^=j&QUX@;3$4dF)*D<*Y0mzdrJxYn8gRV26BczPy5B>GwU+dXlGTG6geL1C~8 zt?=bwD(g)krRo?4)KOMtz5fMe*(N|E@{#oK= zR7rJX1xno0m=e&9DS^1BoAoEmI$uw;ge3m;#G|YIdLqm?orf(ZI^*j}y#*pLr+W>& z?8+l}J2&Fx8b{K)=}n6*`G9zlkT7E|CM{hYLluk6nv+Pz1(qwF2BLTNB+M1%dZ`q7 zxhW_&o3l!y=9}e6ClZW0lmP^KSn(C0PUd7eoU9P#B$<=uaMEdjQ*Z`q5uy9oaIpdx zZV0I}i8xiFWUe)N4j~LYtavearfo+VqP1}8=rz;$*Zvl;5;6{$=(JQ{$oz@YpQ1N3 zJ*N@_Jgj&Cf(RmzR`u$Dr5E;S|evtXic z0vZpi@Qb&$R(FK;i)uCcvD)X=#z2nSk}lWjUT&Y9H4nmwjg#xl1ZYx~~V zigD4_JB8Lsqv{GO_2^h9y$!gnWl9Ww&bNdz6789Y_GbujVi5on@ zh!&T@%^P0zMd;83tae&lW&(;zi_1*Fq0-_q6L71qT>#9*WeBPV)`}v#7*%IGCJ*6! z3!)%#YYE@Q9zcNA1uZFZ!UFiqFT=wzXQt3WmHD7VO+b{Y%6l?FttPfI0mr_YlHa@2Vg;&o8IHB@n$ zji4sE9FVL~&>x21RMb8vWi~c2hLKD5jZPXsX~ThO-^8oAHi+Dt`R9oiC7i7W&Peiq z)xf!y+^=yQmksf|HAOiHM(S}8Xm$r_L{MJ`mZo`@!mS7{qEQ@eFmH&UlK>p;R3qE) zfiF1Pa{%`|zYcU-;$g~3caRJ2GVo;$QpjHwyPHD^j!N4r3{?Ks1i1+jG>25IQ3{1( zn9^G)0$0KF4q{@9r1)O*P2`D(6&D~^6ZrbRMfJ!{%1NAq(RoqAcBD&Ow|c9Oxlh|C)IiZV!(mcbupPa)|pI4Et&6q>RQ&~t!%G?^Et+edWX zq*PkcP42Y!;h-m7Nj5k)2FnaI+>jt6zEV(9sO)Dp05^M4VhhN%#BAbeEfqbin0&MP z1A`4HXbU$Lt*j%Y#sO_9%nJo&-%H_FOOy?>2)>HoYg8)Bj{x?5327cNSqmiUV9Rfm z#0vPA0wL)n97$;Uk`BYs5sviTCi)1pW02c&AKoKaVFqT9lnyAOk0S01HZQ*(SXTs=DaB7NxEo0Hu;TtuN*15J$ZSIHBBZT8m8vXWs=fy3yBYp* z%31hUX4xVyL3R%mLM5m<9LW^IOVEvgcnONr>?4|Z34*(}1VJg(dNtr3PMTyjbqG!aoN*|sUC@zkZ(BegtNo5@NLwF(7X=b{z(c|2Z>kqe3|FO zQ77_o+8gm0nmh@}(uu93Z~?`kVA2JT0-NC`4HhIrfk6C-$eNNuE`3-r6(_Ea1*8|M zVxPjnRf3~C43)&GXo5Jd5^~2?(u@RJiyvx11{wydaCZunZ_ML74jHJM9b2cH&1ucM zJ^E<>pKnLMc-;KI@KI|coBeN)NiuErJ1F7OMK*gS2ekue^sQ^I0~K3HXOVXrx7lml zX0LIZy~b_!8n@YN+-9$Fn>`L4L%*hRo4v+u_8Pa@Yusk9ahtuyZT1?s*=yWpuW_5b z#%=Z*x7lmlX0LIZy~b_!8n@YN+-9$Fo4v+u_8Pa@Yusk9ahtuyZT1?s*=yWpuW_5b z#%=Z*x7lkCB9HSmZnMXM;wZ-&x7lmlX0LIZy~b_!8n@YN+-9$Fo4v+u_8Pa@Yusk9 zahtuyZT1?s*=yWpuW_5b#%=Z*x7lmlX0LIZy~b_!8n@YN+-9$Fo4qy|@^sO-&0ga+ zdyU)dHEy%lxXm8dV#8*yahtuyZT1?s*=yWpuW_5b#%=Z*x7lmlW{>00VYAn`&0ga+ zdyU)dHEy%lxXoTOZ1#?&)If<+{3w+RquW%}0)6^;EZh{EkQ+l)r$R-GFKD+4*Wn}C ztRKIc^JbE!tw#TT{A!PJklkuJnoWL;gX~dfBFtDBE?=}8 zLQW8g%t}(oNxseaGmmkQQOcEP%TtV=xByi2u;RB6TS^P`U#yS&b6~<`vdTn?cQDrjC6#vw zeQlJH$AuH~Tnvv3tWB9mE*Ud^93M|&KL0_sgBeTZM#s^}@ zE>u|9C?T7C`KJ(cOvIVfkq*{^i#5`WJjaZN6&C>`XCB8$rCi8`MMucYruf`kqOs;s zFkDM=I}(zMMcwXvlK3VNl3EXEN+X%maS&-&uST;)wEOGD)`fC+q2<_jQacT@lpWldoe)$ z&y8i&WL0WSfMn z^%7e>iP*B?-aEzt;Px*z!aIwAMx5hFkDcVxTV8MQPr8ySnO$lI4#~v9o=zNu6xsmD zWQoz96&@g`@&MOY6oDv>!QTl}klLD6OnZ!dgNam3p$*34DS@jw+~Rq_FukRc92AyD zA|Po*lTLwY6atT8xHCwgvwulwCRzK?MGJQ!daLjTOk`%~yaAC=VP0FOFpF3GFBIng z^}(wh=6YB``SCxL;JObhrWQ`4n$KLxa(JGN5OjqcPMUjR8fW83H455= zjBsKa0QvVfk=S1a17so%o2`GLrLFLMbpsQV=fiyfA_y*Wxe+&o3e`j?JdZ_QrusE} zf&76ekJeFtZYQYUG|?GHS()23t;ztk9dEBg`VY@CcRS{irp!-{GC+{M>57J9}Z@FOT0#l(1MY~z7N2l<40 z{}J(TAQRT54=dgbK8bwabAu!rAvz>(Yl6rvf{18wr?_{0@SLBYI>15aGj=MUCWmG@pro z!=OJHxM-U^x2yP|F2OmO__;2lv;`E~KX@oN&|FLCDYO=oshodjGZACqPY)~hy@62r zS?`v7Pvf6{xLL+G5dZYEj>UCq^e=pvU0Ze+Bh6H65mx(r*zIr1u1J+GUY{?jobh9Z zsOvH-syGpDvYXE*Kf`V=lAEtU!E|jeayLn&t~9+EZbdl{VdPfiGr_l(LaFFmzfU1d zks2(s{EHuw+dRpxC*|6mZYsNyasqEY4zN>9_F42ILjDpoH@ip8Lm6;Po&by2BCQqN zf`boSi&R2Z1eN?QP=hBC$X-YV+h!CvVh4EWIz_uev{8yLeOR%C{Bzz)b6qRMWa792 z8R+B@tq{9VOh3ZIRo`H84WZ|ypgeo1*Ip%RTYy3K)r2pQFKmsN-Wxo`b=wzt_}uV= zBHx|HhC?djp{-ZgxQs!j`S2al+ZWL(Icm(yMxlz0^s>>Gbr4um76D72N3k#YyCl2> znOuh{`XyrWY~bGl0bO(&5PZ0{U{Miou`DN{D(7 z328#^f{1`dLApVt@r8dUT^l6ShduF)hHs`Y%Z>kSUP973}Bq_^AuPO>tRj7NOC$k$!BOO5O8cCmo;wwOG) z-fkD$lkDHZ!^rx%@vMK_%;|amwVb}39(h*lUz4!Y{!Uo>wlRdACVDB8)6(LyO%ofE zY?I+($Ts~_*=GKCWUDQO$Z3?q!O$apra;NO3Jo?hVhCiQhZR$KF|;&VOeIO)sFh@F zToP0euIcec7K`gPnQEI*E82RKac%Ldo8_}nXD-wa%5uxPei*+tBguML977>Vn_Q!a zxM9Si2bJ3%uiQN>1^eL@C8cpedRSVJ7W<~dV~4?{_q*`eN*+ARdsv22Vwz-_Ri%ez z>J}jUnuWpZaH8mCaZ@w9ItL!K!44iN=}M07SDY;u@k@r(h8z3=Jo*EdkWjz8^yl2M-`DzYRJ zl8`wTqfw8H_`8$$4hug=t^&iZ^aBkqCY}r8gi2~PezatM23m^Ykwykme4IwR@C>BG z7TEIW2U7xsKk;(bQ%&5uKdpU&6vEcm*l9o0DU8~3wwiKMRCYqeDLKw9U#B-!&MVxcidNZ7k zfgr|8&IPPxXm)x0S=&wZJopzZ9-jTR8GeD5&ZID8&&1jrVTuCL@XePgCQ-3z)!2|U z%aHUgfH|w6xPzuNIi&e4G0hIL+!qm0&;&ip1~~F5s9+~tBjJSvjy1ErF;Fi=e?j!G z8yKqX&%^5`&=7q{t>}LV!(M)qd2fme&zE45dIc4pD@3o3y!Z-2ByKmc{+c-#G>tPE zSfQ7VW!=4OoaF(*3u6oG4r|PJz)pCawTC`_OK10UrvRVTKh_*xeRw2=U?3)T3xh&EO7k zNfug?o{mSwW9i%!RvzNyHmhW<(6upTeQvfjAAs^go~*b~oXl8`^YG!Mn7@?F?A>Nr zpi;Tya%|#;3XvMJhQCpx(~7yMXF8B=C~GW68}zVZT7zi}WLmMN`{6YQ$uQcwR;>MO zcpQL-leasq*paoTZ|L4ZT~p!`v*i8n>%LJ=0+f85m+vFySJQec;>5#>cR{4a ze4u{3(SG>!gfvZfSAM+BY`~iVH|C}LcrViDn6?P#3O+uF;LLUi=cVrWD8j#+U|#5s zPor=z)YF8k`}pmo?UIgwxwen5AkAHI1z@i1;~NNGMljd)@$Cc$3FfLk{t3ZbVNq#H zLRY34#ia&V?wOhANR zxM}Rxsx_AXed8f?Nb(*9yq`o!Y#K>&`y6yg?>8hjA%4I|Z}`NbsG9#k*gL(H^CI=r zEhb>$>&|@oq7a(zp}?2<279Rw#SJ2QEz+*jH<{VR(!J?#f-CilneJXa@nW` zkG3I}KLIwX!K1tyxO*a;>-SM!4Xy&*ENE@~p1mS_h8uDxHGeeQZWS_z6&Dv+#aP%mq zRS?aQAQ~1{(Xg<_PcGrcO3|>pNP`K@*qI<2##PZg2E{lg8n+^maaE?n0L4`f$SXW+ zemEU8<7LI%aGI0cA0CfEe#3BDpTM4d0OC_5r)48RrGU5@HP15=VErozgdsJbgU12d zvA|VOZ)qd227GbRk-osggJFkND87*TwPxz~)k*z97zh3zQ*WmGzmR0?j#`OW#2zWv zLI82&~y$2P2yrIyhp+%!-R4pP`3Lu7@)aTRz9rnm}PQQ63CkWOH5o2H4O=ZW1N4 z;Q+uDgrCRZCji?^p_W1rtKCttSreI*s0_p$#3nO-q@O>IF=Oz7+eE$t&@dptig46K zX~+?<}YcoyZ@K-qj zd1q8N(X7Nh;B76$%e1Z9YVY)jAU@O3dHFe6vli3A?_&KFR1Hiw825shOG}8iq*&Ke zh-rk~17xc&aRI!nTk+y&5@Fr)Dsq$g-&QaC00n-GmrNerEo`FF5V9z}ks>zP)fX%T z^&85qDK3&6v(bksXqua&S=0i8Zsw5NqE-;*jFgpN;j;+hHh{KqJrDT4^;5$S90$v)1`SVROpI@8E4EiQM;)-o9iK zrS8%PD|6At7(#!^I+D-}!8YY8Qo=XPPBdST#~$+d*+@mBYe;{WJYRw|0mH8S%tM7` z=pcMu2&io-<0<+B%-asE?t*X1SYq{q;js-KX@AsF$Y78FyL-Cd@VvYlzGF7B?s9Ee z2P3-6qa9&3ACkw>8W7rFw6%b1D}!chu$4x-Bu(gPy6SQDEM^UQ1LzMv9u2|)ztfW- z*bk4)SKPbz>!M9*&_kv z3&#vNKzUKN5#@;{i$Q7RTwa_fmCGmL zO&h(JV60Ww|8>KkwG{H}djA)JOHy1!B0SIZL&!y*;x8d4PqA<#l0m_LP4RXj+MjwO z(NK!p5h{7|6fXh9Q~WL*m!!CqC{Hw@6Vxx0;#KgzT#BDD{Qt)(PTZOt*VKi7_6pNg zvTJ^bK;KPpya`7qIIy1la`@YrzK8HvBXBg~-wVgRaAZFL$3;aVCk@GbKXo3VlY*WF zRw{XN1^otyE66gG#JMPQ$K&9|E&syth#a!CK=vh`f|mTc_3orGT#bEDh2;l z@a=}+w9%Cd{t%&(Cl~x1KwR)rIPk4aFM6o7UX+R(K!3SZ&{16Q|M#g7vMy@tG4;Sc zW9rK!61DSJ3`2~Gb!#n`0WbD0)1Oj-Mm2X9(0Dn17>>Ud;qJtCe`+eBQx3fatW@&k z2`vM}6Uui-U0i94i1I{}_Mp5>5gr8Z%cXp>;s0+_evv*e0))$#;18Jo6(xX5@aW-i zPzk;lj=w3vA2R(uJJ6^EKTG&jg7?C4nSwy6d_T1#p_6`211oiVTtD?jnEL4l$0d1x zEl4h>fvJZ7ztzCSCHN@G@G;Z-!{o?ieh9H~nRmjGO2K~>yn6;0ygV-W!T-bF+rZ~p zU3Y@dt4FUaS+Xo+8*F1h7-JjohfEBZ)JbfRL7o`w8bgdN{7RN&TUeG9Nj5gPUORw``YAm7?tQ)lRe(;hGqIv`ioF(v(^>EZ=(A`Pa+mg*Ex6b` zf2lNWMH5CK=6MwTJM;WED1_$u*nEuQn{!`~k&F0$2Uv3j=tdzInB6EAO2(Wu&sU}8 zTUY%FTB>Nz-MqFd zvY{l?&G)~OWgM^PqhVxNL-P1r7-X%aJ}q+ZN@-zf$_Y_V?pJ#9(pk)o7M7MucJw^N zGXr<_OPh6TfIo95Q{W|~Mj*Uk2bi z0>G1&QR#ZcxB?eJFZdBjmp-Y0hXhbBfKMslbpS3}izZ(K-wQ94wl|h86k?j0b(AiW z%&fT!fIFq#=F&XryB&awx?r9^J{@PiD`)N~T`H)1aHcqBZ7nP+*_i8ke(D1n&e1pPI8{o1g6J*wPUyL@1J47?LfTjGe zbVF&{FQStRd*tNB=^XSi)!E{|;&5trNx%Tq4d>&ix#0|>kjnsHlBTzmrpf)5E;Rib za9n8mTcIJR!}#>BH2UV;ZPG@hx3~wW0(9LSK+Sdc3n=8`QyZ`mpAMpB!SwmB04|d4 z&l&tsE@o%sIdLVYslQWdQw}|VSF`7%&jMjtev;K(42KYY&~FBQZ33UT*NM+$Xnj#> z;j%&frvh#!rV(9SD`sH7moy|SlAAPU&Blp_-ds-FBJTP4`Hg}gDiegc0(2_-6lzXo z$56l(#kBpcbuAaE*+mzpS1`kJYGrBB2B9j8&;MJR7hCT&r3O6bPwP!H|C~^{u5{I3 zlKGi^Ip*JVES!H*+6(h@1>hLp0942LS5UxiZJKcb$glKxA@eO_#MhUW)gY#-Ef%jC zf27nP_qn_5^IhpBqrO{l3MMlBVO)FSue5U6X{NMH^UrJZDGxvJu(L&sOMkXCG4~5; zx-))*T|BT9a?T{m)(&4~FTYN9XYK|xlTWXexcAvo!#@z^T0zOMG!wRDPM9&jXtCUf zS^Dc4GRLj9oyFHm+HdJeNy(SEYlDBi?56=70O2L>j@NgV$!sxi59)50?f+f23ax%c z>TaLyZ(RKod+|Jh+xK~Qw)F5i>T`#|<^{5yR*Fh3ZJ^TG4}jY*Xx80;p9f&hQ^pOl z3itbSw73%cDt|v)+Gtw&w&A=4lBM%Y4NpPTZo2pjP;k@5%)8N}oKB{THOr%;LZMYy zcyaCqX(I->K~M$gjPL|%&Itbq1xT~rT8R$3&;-)Nw6LHh1-{3FFI$oVU$#138BSF| z_AwiQkbP0xGl5$0a_Zc-JnaQ}h8n?d-C>=IE_*t~ z!|b{up$ZTzdL#=p8jvI%YcqBg#29)?kRW_B#bzw~KWSs_?U-;(a0Suf@2s^5{y z&(4k|S}m=UPJY%|S+wjwOOq29h+)JMg_hpt09QKJmK_k(N8M-rVwqu=W5fQ@UWsSaADZ@auEhhw#i7}5i&TUwEe<(vh*rqE zjO2f5?u_VjwU9^jy~Ws-)km4{2ODzP>s|V`U3a^1X7?CZvFmO- z?R<*imu28vOXkk(6R;;A0j$nl587I~9LY(vbRPijBFNU#Dgi_T*lBlHkhYfAi411% z$4I){Bp<~0+M?)~tK-pxJ4#JbZyc2KxTtnVsYUAdx%$VXK1=E+QE&J|;pj6Zxndbj z8v@{)3YaE<9ss8H4uRxXN@djD4*<}7Gy?$9M=}6#^|K|h5jMefye}mfQRAOVH{UK0 z#8=R&$qC}ytupLq!9$ai!?#yR{qKjts1w7t*N7Az{4A1Yk-}d&Axs&ODmeZtCxfq{ zsw4P#(z}k}x(om#Sd{^Q;guP{HBo7K25>E|GGzeQMWrPf0Jyp-BZbvb>GA{vpF@%` z`Dkftn+Cu&CXdpS|1zc&9(C66nNdpNQD+SApsrGQ)Y-z{jhPf4cTzZhz@+fFlfqxP zDzx^vGlWG4Z-) zBkHghIOXp%lbfCO7sYCJo z<&LBdz3(osN$OC0Px+~&j)6Z|^ITGg(!0vXt&Ty@C|%w>voUVIu=(~2W|UeGv1%6L z{V$&c2+`7t*onivIgQvoC@+dOz)TQcDf402)iB4Kt-})1~NQ1=>uTS!!%dXf|g^;QaL3(kB}m!9ar3vIO18 z-EuR8U19CKRjH0YH5ZSeL^EfXq@P*Hi=x@9qMNOK4eIBou?29!^3tc~lJmuLH_V(- zI&aF_IX`*BTp=;1oFZNW+0AW)K+l^Z=jNqbu5suWe(9l7G^4ZxJ ziyKR~Um!#-$)YJzE12}cm0m9eUGyt-7kn9A)XaJO2Jn8_@<;|e*i8O0-ZSVstJc~? z{bf~uT~;Mi@+t}So))Nze`=_IVagk29(41S zb7oX*QoJbS#wJ>LcoO_DEvEZ~r)!Ux2pRqtWP=9gLJ1jgafuYz?2^+mT#YI4<>e&~ zP8?s|aBEv}NP}RBE{~ zJ#w|MOu`mw*xYxzDrusSjewMBW9H;N>iaVA(6y$~wVKsMri+WT&@*N*8i$k9gmRme zgwokGQn*$slwQDy=bR{;CSfr`Ye!ZkaqmJp!u&+u$e{!)okeAQCox_12l$ZK`+}^g zUnb^{=t|!ai@y8=X;OnBa}Ujur(_NDA92z=p~|69W-*z(*=5a%4P>TM+Q9s@PNcy_ zY#vDwN} z{jO2`u8Bcw+JvHRP6RTYf`Y@Qylcj}80SPgCh58N>}L1u-bKOkFD)Wb zBb=1abIUHAleM&^Y_k%<%}xpK{It*)&(+M*CW8xLO+J&6u5$A~W`C~lGJ7bC=YFv? zS7Q)v6;DXG^hI?+O)6>r?i`_QTbloH>o>?+V%%u0)cvjk% zk=36@QRk;oWyLESB8W~{H$!PDZD&^V!NPeS!xLtol$t;DT`r7u zMv>AinTC^Qg)G}Q8KamLCegF$aLJlZH&}96h1=lNY=Id?;{Wqg7Li%WB^F^kUJM?S z2mnKn^;`zf8b+T>bp^MeF_L8Evb4Q$!L~3>7x_n86q>guf&h)hVlwR4hp1o+htwsx z_e>(Wmy8FAeL_N0`&G_ImnIR&295k)W-0E*PHI2q!<#X~c$4hKX2<3QB)P=2v}h&b z`pw!&EK-V{&N99HerUL}oJknI?^hH=`63y_SIK>4x5OKZ2xxLMViNP_rU_viMb99W zPaALIVVLgZ;zG)>Q{mK2j9GilXjS|&@enY5$?THO8WL`k;lOv`jVV+B7U&Z1GO(K= zu`u*x_@zddMH)OrY>QLDV+mu5oVbD&w_8dk7F!~a-zh~@u-?@fg+k8pu18>=gpr!- zWo;FgL9*Ao!eljXo!RXgF;@ouMh5<-Y+^AjLjqhkr%gdK-b_N5u>u)+OI}GcGHQf^ zlTCi->|S;mv&f_jV#~RtLAuK13c+PF&Dz4NWny0HHuwgkxXpz$I9wk~WpFTDXEW$~ z@~X>9^_;9TvXL>jd}_=H8Lok^Nz!gNxNWFuOe~tSj+!EbTwND4Ei&dw4q7D1y`R&v zIwfNu=&3&AzTjO}Ss8zxBr6FcSr5V$<8&5O#rlUbD@>{&V7an8E$tz0TFMSTW7bHc zQ$xd8TQt2s#08oL@aFya4F|7bcUjY_NE~5tO*Hk*yW1Qp6Z+ zje-?QD$OqIbxW7R%J>&(E{jbw$z|O|2?3`sOIVXdDJr=7iHR~hpC*?jGJ~_6^NMVi zoH73^^X8wKONE`KslLGuX3}Isae0=q26%j-Ch;gdt87}fn?zQoofB^(ZTx>*FSqgc$)`pG+yDsE>=QCHeS-X+bt_@s1eyNZzd^ z>egBII$^v(h|TZ?F=s<808`a03L|aR+<=$UFd>0I$>${S7jczfd=y-XQnGxZ*DCpv zwv9}Uo6<%lhCD6t;7ksMK%}C!$iLEM@R`7`HYR)L$+fOUn2={zX+3snLhhx?s;*Wo zrJP*5sFUD3!M#*o6UFyZF`PHfjuvAY%qNoh4TWY#$mxubE#6j&!U)qw9}*=nCy^Qw zo|%eD7P*i$YL-9Il?w|8o@n~Iv8rWWJ^*3gPgIfIJmt96s30bg1mtW>Ifp$4X`2qq zc00+X?y3kzA=d;E#?=hus-SIh^16m&)xvagsRcU=snKhY_TohB3#ObU8RtX4va^sR zSpZy_2Dn`YdMg(`a`Dg`g}Wz&Rq0Mc=kl~q<1I@c*klu1E&BncG+vM2mF?fOJ>5 zzvfof5pK{vDhYX)9ZS)67N0UuZ6q&oXYJo5h%COIL1gW(6GRr@%OJ8grKBvNYZjXf zq+PRiNrK2Cp29d9;irhK;Y$q;3W_Xl&LFb3EkR^)AcM%-kpz*&r!$DG{jUiki!Wsm zS^HLk$l@CrL>X54*K5K%V#k`OZ9IKm%I!5e@K^0vigrze(rG9{hUH_v*|vN$qC9LU z<><~Q>Yu1*^$7#lMLVCUmorvB?$I5X)n`3AaPcqS+aWtoGNlO5cV>Stly#_w>Zt3U zhpqTn0?M{Q%}xz_lsoe%B>awb02zja1F^ns*zBMb1%#i9mD6YKSRXx6e=lVC1bi_2 zBj%qPW+~di;;LE>cN>cx1`;3GG0xi21d+vuGl;BVE9|IrUy1^y&$9kEdp@?a_@sf< z@v`jW9i?{mG2d_(i);wr%(rTrqMU59U=j6}x^5+Hl^CJG_+rMB+ zt+nNFK zkYc@|)kTj)_eTqSb9{QyktBSg_Dvq|Uq(NcYQHrH&$oZyeCm64Y>FO;HZA(}Tsv7GJbhwb4Uwg|v@agSDP^ z5PnYBsn_f%qG1`I_I1`UJvtP{|4V<#Rpwt-GycAvh?*xr$P2gC5LekzdSMx_F?NK@ z(Z>(Nx>?=o!9OD4JVmx%YiP)k-~WUX8Yc{2=ysGb8M4@6AWRbvjI+{};N`o)jXI9R zg?5ZZoq43acJdiJVuok&MGxA>;z?reRp7FQrBldV+`(eH;f|ok$E*QfL+g4h^28-}ZmlQ2 zokcb;<|^M1HW9UJKjWm(?ul+=vBN-W6IR)l;N_*(X{Wjp6c&38v1<6l|<53HTRiq{2;DKqQ zgwKhO`F8M7?8yg` zdDiBOhk$w5SfjtXfcb%QQ0`fwuns8bmufWf$l~*uD{SfN$Lmp$H9z%cRM^27j z=~D|9f6{~QVv!%wD7FcHTJVueJuMbbUPjO^ep-xQZ7Im+Na%S_Xa|cgc|v!xNP=oy ztR>`wBrGJ~N%C)a@_Sh%K_TBc&RVpD1KP`Cy$5x&m@t8Nmt}t;6L-C8!+p(;arDKS zaaP_;fTi&z3$*t(J0b+IxYvU^hpl+Xj&XFPG=9`7$I`&Zta2g^e99`%q=C;_<<&Is zlvVJKyQ4D7Qq(!$imi6UOk5gYZI!KQAS>HE@WGmKR=Ny`0kU|=gF0C}=9^-Gr>s)D zP??FNqc!8Kw0htdOXI98^gv*;vc!O;XwMoeuJw3dERVC&o&e+VtybBV0L$a7bSA)f ze9q;jK|4C#v{_|!0<0P5_bgvq#PMK|th|u`YsOi5(|}OJJBzi^`*w8QutLKH5Xrt- zFHN@;1ra1P*_~}RCXNm3*0&9G%8sR|uf@j0K?C%(fu6A=8op}9H$14qBEP?g-M^y` zJa5CJV9=Ds*S$DCS3k~5B90yw-|`Zwu=t*DiY~U9xDMG746{gyI#xoV?WFvMO`Z;q z-^JwTMIEr|3f0XlJED`vta#jmdYUW>&$6Ryy2L80(!gwd!H0e>Rr&+wotQ%z5soAv z#)C%^5Tn7935c=a*#yK$@InG&@nr+mMfXMZM=u>`ut?&=j(YRby>4+g?wtyzylZM}4y^%iecgR=rd8+_A1G&B%o@!d2*$TjcCK&3G)^%gY9B3{O3 z(Rl}pV;(ek)QS&#&`uVQdC=gCR(#EacD!!IH$7;O#kV|YCyS>%XfSWt!oAt^d^?t+ zL7MoQ1jJ%8yH@hH-((ipW=C0+v7F41`)IH&-sJYN$QejlvYc4vK3e7yZ*%)tTx}p} z$#Q#w#v|jH~UEYr3c1Y;V?^4KZ~y!p7g*nV|q>Wxrk*3b-)g>%xDdA zEFLlEi6eANCrc#RPf70eXJcp}{Xyl`n~6r?aaY=S=I1->#!yX0!nV|M;T3Xg&I znH20fD^o+#mSvh`S~VP$z&I)nL16hY9I}bxc{>WuNh>oaEk$>;tK;5T?rt)LGu&bY zP8;9^Uy63KNSgqy7p)-!EkJ8c-JRZII$5MIfY$SNmPUde^9n}VLtP&;oulEiR(#Hb z?tb2if8aq~EWYMJce6;70WAuc!WDtFnc1xN=5zNNE8gZoT`VR>cK0K8_PEEo`-Bz0 z=0RO7KJP(yv&iHkjy_)+XN8#t1j}!R&+?&nJ0m*tjX3&3X`Geg9&dN61zqMFCAqUP z`#WlpjgxRq^zm^{fK4VviCye{p-~rDmJ+^{WVDjhF$nD2jAW-*P_W6s?77!$Ox%TK zT4zmk_4t!^p5{3%`a<;i=*!W9%Sv*MonTsRJx+hwoncs@jD;8_O5q8Nvlyi(u>6o$ zn?2L|kp%XdiW3{@TWWgXWC*N0p%!aJJFJiJz3Ah$*hb!FXS(bdM?YRO&I&ujRwi!S z3VN=PcXE)BC8W)GLt^^w{j4O61{!?b#QvroE2cfVLOZSEr>%kZ{E*Js|Sv}c|R*$+7)b}hV*xkeyx#0NMw-& zbu)&wgnY0|7?STK`Fc-&4~rzIn=z~<G_S84udW;E}+$&rXyw2qP^Bck4G$%SWPq%vCM%BUj9c~YfN6isb_humtpS` z69Gw;qTY!paac0tvpma7@a~YQwm=t0tmB7019!0aqz47N!($h#wbq)u!&6y&(Lm14 zS$W9=;pVJR9tCb5(%(V)Px~%+vq*wsAv?xdOUMUq9+K}Q`DZ-&JuH%-knb!YAGmo) z{w|V#)|21MVw(J21?2C_Yd<8vljNH``Ry!rc+fr;H+s-^cAf|;aC3I|y6GJA8jEaI z?B;Ap=HTWmKIJ*+W09Pwo3q9q3Ua-Wd^gFnwb1G=5NY7%q(yrb_hp&H#LZbITSab8 zT5p)V#LZcL)61~;WfK8O6}UMmaaiK!EI;ohcz4KDTj1vN4Sk_+b_a`VJScGUH|DCF zcg*ADw4KG17ZTLV;@buisc#==je{r{AIbN6@;g|3*^}>MkpzYO4o|**KKaSJ-02kl_-H4o}z@l6lf!D7OFU)~MLeV6CHlf_p(_j_1ObKhCOeP_u1o{;;_ko!F$ z_njg4_?k`jNABA__jj@Qisybei)rrf^4urF!N+v6Ka$_($?s(GB~QMG#WeYyp8R_r zaVLwE2zJ?7Z1qap$zsA+@Q?!e8uoluSUj14SbWVu;&^XZ`ArX7IsT57-?JlbspL?o zPDD!<7n-T!zP#3PR#toa-PvKq%^pll~(SbWbwkly{{ zth}E99~fsP^3i@Liya1Xov_m7XNpbZEDxj+S)pOqM4N&LPs^U=y{3yr+N4gctdUs3 z)Ed(2E~3@#T{WQmq zr-!wT@3ry~@4tJWw_>js<6h6Lfn-8IW#!k5n^LrwMcR?rFUyI1f=ln@H6@=Gmf!b$ z-Qk%qHw6V!_&9S1qtTNIh*9R9 z1hmQ&xY~|jA>Eaf*EVg;E+{xl958Bmb z#o+|R;t>PYL%m;&uo*i}$a8i^6pu4r@rk(igoE7^4t7sC*gfH3gZzzyB^%g)48`3S za?lrY&=+#h7jh8fzaa;`AqTx72fZN&y&(s^AqTw^ncS;hZxf{3AzvS=Zq`~vV_Yfp zSY89$agLCqK4t!bz#HKqK4tEtzpBviW*jPk7uwIqpP|681wal zEuv!K6d;DQs$>GU0OZ@|>$tj?2MJ%H2n!JN4GZpZ5?Y~D3lKwERq_=!47Qt!nFt#O z!jgue6+UhD{$gVHEWYF~-rO6HzhM=8g!8C$CYrTklO5v-cyp|>F~Qqv#cc_w%Zj}T zXv~U75>S3nA+I|^UhgZ7ziYhKdQv-BOn3zzd0ms>vAEViadh7UQ=Yk}(E$@r?1#fl1oRGRK7_7KqtQ4bijiu z;gEy9$?BNjN#@_PvDQTQ-On;dfibdJZ#)3)0hT#3jGM*N53<5Rwx_7EoD96efpfIz zfW<^>mAqv>o6}l3Iuc!dd9WxXg*8j*L_1jAY9RGe);bf!e3zv4oYzn%i!T^xYIH9i z;h&EHxL};Hm+V|qat>J(p(j1DyXvj$)po4Iy9Dsf@$rzgz=j_-D&z;Tg2h@tph}As z+Y%7_VjnO9786MX+oCU9cdvWqyGXm$)9%X4?-9d3?pt-U_>2eL#UeR_IfNVqen4g) z@!fA{@hK15$ztm=TEi|Dmw3>27TY{%7mNI?HkitfjvTNLOr9*h;5pdF;z=EH z^|0Y5)C*))dEKzy^BrzuvEHku5_T5|ic(3s+s-2O(SSwFz0m^r?s!Nru>YrxBepI` zNZvP;gww!j^A=Q)ZWTP(UYu0qY1Lpf`CmpVu+VVLQKem^7X1v0x=f6FGNOn z=Es|g?*1r-g%^T~@bbecN4xOqs@6QXUcfy#Gbewh(a!W0z459!IoXTz!Nb|7Z9Ek( z(n6Pogr`JLv=p8=Q;#hPM-O-5aq&s=lplRTG|Z#4L@V!)n!bnMyoC=&^V*gNGj+a& zOy~t@GAY&-!w(g~^JJ^C)GF-#?2Wl4z?`|b~4Wzl<%%6*2;<~ z#4Cb@FX$<58{&oZL!9b)3)|-DR~1yM(P~IINY<)~3PHwI7d_NccWt;nsv>k3pcH`e zoENF8KuiUoqLz8;)mdoR>YPdQb3a_ttYX3o%r}&76)1rMLMj0-6WMMRP4g&4wpFlW zS^&yZDu}-!$`8?KgG-YIS1UsS1hY+uQiY5PqFJ&3h17$ld6Z&{2yCz*PUR_8g%V^x zA(bjns*qVQ0$ipWE}8*C27;z}lwz3`WW)g|PpKeB3Q>NDMtg1|WMI_QN64UQUfjjH z4NRgcW3R&ds}M+FL+K8o=aeG#d|JQWMakA3^u5W&_Ygw%fAJ8l!mQ> zy9DHkxikC_ih14sKQmQ38(&QL3O)1xhf;v+AgdNht^|biiKbSN&zT8-XfV4Xtw}V)G|-KAbBqU zRn;mGRTYGaSS%Px0jQ{Dp3TPS@Ffq)7AxK&UPb5(E=yE(r$#}m0!ai|d0vagQ!wlT zP*KY~^(ySFfO1GBh}8wHczJEFzcRI*#iu-I8;dV5=LN_+S$xAln#!>DUV_Nt`yRBN z#Z#HKtTnCho#e+vZXflm?O<`hli$T6nb9aMlOM3vonc=={@-qWZ1#QaWRX5HB|7|St*oy@ zazS7uIkrWdnnWx1EQ(@zt7ojzX~l$iB~QG%*jcddss@C6(prLPr(i>^0EDLX)ied( zoNDm$QLkXJhr7+fE&<#Y&@aR+rWjt%D#inu2hF@KY4Yf~M7m zsgR4abn5C{|E#e>J}W8ivu3CgT+TY zXgiCKc~D?#WNOTJw}Zte6A+8f83-2NGXA_(I0#IxEGEo%FSWi`+YxX7X&q-}vuCWE z#ZC{}!6HXiin>`G^VGlyD~Ej3ZWbT*pdBnG!UzI6g>l@Eypu&rz&Q^qClfptDFNU; zFwRPw=c1EE>J)gjm|_i!>8S4ao3o30jL0U+eqZxy_2yTR||O(4Y5&x=8z-1hmiyZT7Ug zIEI9F*AY9L$f+wIGP;cBu%}&Nam+w|-Y0z0y<*F zrxMW9R(w7IQBtoapm(fzDgn(gK54K8p=v3DNsS9AdebsLsQpSQA7!+z_%rM9!6^se zN1sC-b^0#CHeAVx_+lYVM z@S6<(sa*Y8tIx6XC#?>F6#fPPt%rzU#fCic(IgQ>MeQSwbN?eJau zY#8Om?~qY{c{Y{)#to$JKL(aZv^u{C#{MTj^I(cji1`n$A?OYFGXj%)1LZpVE4y#^n)c~G7n;mmvT=LzTW=oIDim>plV<4HT_+Y|nZoqyeqZ`$##+%ez&kmX-IK4SH! z?D(`DpRr@U{YiuK_=?qEwc{Ih%zu6U?WsD>JU!ySmur`AKWy#!;rrLE{)Qdjs**mx zSKns%{LFoq)hA2;gtdFcj<4m8`SCty=U=kpNjp~CeyQclt8+)@#rghdXUw~KjI2G6 z6SaTC@YXb`{@U%x57y`Vd(ZIe4UZqVUt;w<{zP<77(S2u;QX1|^8@v4m&b3KrsHU} z;}Scz*)fmr`?YmJiygVH$m5?Nooew-UK7zHoX0k!yUmXI{)xwRO#b|H*6sy6zG%mj z6VQ9z;P2&*T=(SZ6aQVqUou_gy(V{@s6FvI44=o%R?qkMKKbT(JI-f4*MM@FsQ)%w zFRilUYCEpU9eb^wBOj42*MU58otMWaoa?&$dBVBQt#N#?Xf1Yrz)ARJsRA)P`!_S1D??3;>!Tf9e^6whVzi2T3 zmcjfh2J`)$ve&P++4}{L*qbzu+3{&R^0l6PmnYw)nST#pp8lJ*-*C!~^|s&8lsodh z{rUE5?E?*+cHC=6e&K`1XAGWi-(p{Y*_itx48OFN$LB|6)*3#)B*SAKf57mD?RY46 z%;R_3mu2Q$u6YN)zr$~8@e@aFSLpfGcFce7DE~p7`By4FzXQa5n|%K-%Wj_)(<#MJk8<=a2IA^6m5SfN|mt+qdJ9`*b{VpN>cF)A2}s z^T>UDkiCOXd- zM?GnD@^6jG(|gD8_&zMYuBvvK@{`ABzuXthpFd*l9$T*Md3@38Z`hGHSLbi^&C`3^ z=)GgdT5CVcj=ZOu{qXptoj()(HHNp=j`1Pe*F3KldVsd-iM8!=l{d* z@582_A5XsiVfQ~-`akIWebnRmsO6FG?@aX{c6of%gSsN2cS?9qEbk z$h$_zM!I{(mhJEE+1o$Z2jms~gFOQWdQlwd**gjRXvKlikrgBTqdf<&UA1hWfAGMe zWqSq>kX%4%LN=}cph2G1eFOcwJoRXQcmLq>9uWvx*nhZZ_`veLxQ!s{-j5?BI6Btb zKRAYRt-wSoD3_y1NTGzg@1pYjsG){e-{TpjavYa%&qk>{zb<~j6*ktzQyV$}nG(kW z!1*TBn(+N!!JA{p25Z+M?dlzR)KH6KV_f5o3!<9Zn!5OYcXFXtj07u!K7|z_-cSds z0zI$Jx{+=jRi3#dKGZM^7-j8W(eSqgoH|r%5XX&<-;y*G+AHhg!G_i|w*<%NFh>^z zjP7hZp00nzhSUuAB1lpOak@5get!I8RpDI{*B0WPZ~u@w>Db}nzEQXwoKu~0 z*#UUwphD=b-TQm{4gv&`d2fXf&0FEOQF$i3)!$3veYHNV)ACGuZoMgLrg@~)VG`m> zVqJAC#C365AWEftRUOQeE-s!N!wluv1UQVr)q!r!)xFiJCi+`$Fxpe<%%oe)1=@_q zva(PY-{-oTM}KcKX3OYCcxbZ#QWiHBz=gzg5cM$_Ub(RjEu>IZ2NpEoYjsGBU|hHyCVhER{W;S_Ph zR=6Q=shaEEu$7KC)oioX98ca_oC{|h3c?1Aw0sGM%{#~9>1x_I zficP1WjOm(936##qWHWdlbA-oTBgHy@)7~0>mnWmhv^ca(5H0H3}Y_aL%u4c1%yl? z07q%U`qdaY29daNjIs=MIZsHXl@(z|(i7K2&PWm>O+YgdmCS=Gr3dtVHVIRKE)#LOpvOz zL_x+^8y^v4L`kL(Fd`-42^Jz@80VxmA1u2W#c9a5!MP^U6&hJo3`#hQ0gGj{z%qD8 zVf>p;25NaOSrmbDs%n9Wh=tlzg%PU`>m7CVq9v}Zc+i+mT~3JQsde#hJYaLwH%xt+ zefkN7*~`@UMdys==JoQQC-6jv z&Z33=7~>P|BDa1{MR5U1K<=M#0|D|ZXO!i5K-7)dY?iZPse>B+L&3N!7PHq4ALZY48#iSgr#6g$?{4?U+g)m%N>&A`nlYTu3VJMGrWNg2=1ZmxE+3F4;E1zy13gJ1meRbE>KJZK&H~U=vI1~hNCC}iMgv! zi7$4?OX6Mb*b=XB$3=$MVn?@v6atGxA2Kp$b7EVXrBE{G+iBow6mHUqwLIGt+zbRE z#58oO#p7APbCbTNRpr@KF8pcO^$7LMkf!kzSHFySisW(LCxaYp*!n&OiXwun?< zk{L-^+{LB91{aI3K`<5Rh}K|{hg<{E8ud}u6Pmz)AGghy=EseUoI_}u4K)Kr`MK8} z8!TvJ|IqpX6CzaS6JmL`_oo(d1$z|~^A;V9_YgUQRIAoaar7{5H$oSxB-w{lKK8n! zScjN(+B)Ps>$HwpW*wJU`}5=LT>Dw3Q=jC;@g5n6b_e2);W}U&f2yY|sJRPm4weun z{Vo)vkpivA`%wv*G){n9$(3b?hfgcSzYTobkhOkwut>;%%=IfXdn=G;D7VIQz3E_z z1{SgBgHHLjW#@!|-c&RAD{28vRn#<9JpzHM$j|P6?gm6>W}nuIi^$+$H_SC*gr*vw z<#W~m);+=x&PyY|RWn6JWHx54o6OSC0P?BBsyvQv`X`xcVs~(~r`xvu&()5itj+jT zOuWXMo2+EHl2R?n(o6z~*drW^N?PxnVvU$k+~La3L}3O{7uWC^L*o?&zo$PN$YOyP zn-R%8B6cBl>5-lTGiF|^mO5YQihV1fO$yTVN&_tA8H6J>^NR`b>wBeXyA9gTaOrwF z7VxWKe+ITGgs=1B&zeLWiMn{XMBeyLH}ZL&k~*3UQ0S@I3rrVpN}E&6<=VEop8lXpE<`QKFdAGXxHK+@`+WHN^ zmx+e>F*Zsi;5H!ExXDg-PGz)CHTGA>PYAlhauU2lkiw}3w+k~ZRBIwR!E<}3{(PH* z$k-`AUX9|liIPkjoT{dyxd>HMBb>vq)THO&C^7;-S&*f%kQFjG3Rpyg>00fK+He%) z%tRDqmjnbb$qDa*+2qPf#_jJJNtfqYc_N&7@d2R*<`D@WMGTCizsF|V2f9ScD=R-R z3+lan0|U0WajRx`J=3mTVz+j91Q$+rV|x}m4^bH(0I1=!V1BXet%0d5k|$FzoDP~d zkAWs62tX@Vf^k?$tl>hGYs^AqF~CI0CnjPcC0$y>;-QA0ar+>3=W25Lfl_$XR@VKTX#PlcFYBPmKI7w54$=SV^g!TP_>ff(ApZ5_a^mtwc}AA}mAE>&4J#3Gq<^maVX6tH-+&76n}SZWkKrq)hjpVtGB> zU$2Z!0V`rMmYw?kg#Hlu_v~)*>C&_O&JZ6p&xVc6MQ+Eq%E^yUKUee&(bd@ zHJzGV-VQPhWK$s?-W0t$)VmX|G&rc>X%NeNXaye8c7AvkH_LHsyF0-mkuU^G2nHGpdJF%b` zS-%iUW8CN3Bp9^;#^D@BT?PXuVL)zi!bd&h7Ufa8au*1sK!4^XXQ`Vxf_EKJXvgLo za3{^hVp}S49}}5PG9ODfQ_VO0hPBJ;L~8CDk)VkCh%{Ehab0F4XO~LF+RD{krcC9F zSrLi*>q3r>HAzN+3`bXTOc$Uo2~NN8UYq;_v3D_748NvUAX_Qmjt2lN!0| zhI12hhFhf|1KmMLk7~ojDFpZwdE8h)V3W2t^oxMbhs@*iWi^-04n)10KU~EA1O?#@ zMhEBgMU=pm02SZZ1OPi<#1f?_mZ>Mfa#~fg(>#`xzyXLzE{2x)FY|}Q2tEoQ&q?MF zF5j52<2sin>~rBq%+Vwlw`H4VhYJmft*}3(X_&vGLgYOcT)=cy80t6vh3ATo<{WT=C7yvM%iPa!R7e}vGlUNl*n`$GM-QFg-k=zQpr>AFG z&&bf|Xu(aW*ZUhqtG@yE3~|%-zQXM~odNRc;4CyPLLtDG(dnT2687UC7V*A>(c^o&);umMePI0f^-}M4e8nrD1z31s8CqIbe!!7KrDxh3XpoWV-GR8U;W9`d z#d{4EKn4!BKay8%GM1=8M zd^LGEY9b)?UMFlA9D!XCdBcxgxDY%I#Qq|~JY!>q$%ZWiF3i-M4Bhwy;3YuJ^K8`+ z(w1pOxC?0bd(C7eFGPJ?e}?x}wZykO47u1Rv}VLhRApv^BCXFj5z7@HvHwerrnt4V zSZ?*Y_)1qtUt5Kw%E~0>M|GWHvlZ*B02h4|E;Ex*7r2bzMmtg}rT7}h&3W-Cdz~T$ zs8p2gF9UhG!hh66mcSTW{ak(}{FSdMiT@i~nlBjgmE4km^?cQ>-U@>a(Eiq0gpFcq z{HR0Dg&PSjYB+O1Usk)#P_7Kq8>f$&ar`$bf$8yAvN-WO+LarQnUUYqy~s9oWMf|B zHXZ!R(RYx-)Z6z(kD@O1@c_?!MAWJD)Kx+}?JvR0(ldEd3(y^+K{4q5FkS893dYd za`!!Jj+DOVc@fmh*8s`QznuE8|D+0DWFE;#?zTt7^0DsJ0J6wjMIH$f-*p%gyJY^x z+>067E?SkDXk-3vz%>+Lg09f;iH{1_XwuDN6t!pkgDhk-Xb2whe7a)(_T+%2IJ;9Uhc zqddBsPbBW12dW}0w?!h9(7UW$0ET2xlN@Okbih|H#mhwpnrN)@!B&G8=O}QZQN1Mz zQYw1#sLofu0fZ4u+%I08DE9^~#O&5*OcBC|Tz26rp3)bM9aS)HRAsqmM5Fj6430MA zdslLj$MTI(xc@c5^GOM9Nk#AfLSQOb4*`29g9VMgIrwStB~5gN@p@p2u9^~&;#GRl|*o_EVV(|dEo1~=H!+fvWdZ0bHz>h1<4wm<%_z~ z5oAr;$ek_tqmO#cM5Tj;G$b`i`*f4Xndd;aLhj-2uP)McX3^C!Ux5~1Bs{t>W6_9Lr5bb@ zEH^Q@6|lSIKwMBa^WC*7RFj(=LWmFs3R7yog~((HNvbZ*c=<#FzK>;L=U()n;U zS|&BSWAc{Ab)6^seGga&Zz&&Ixwo%-Sf}#HJ!-MWUIH}_deQm8r>=6x%vy-tQdcZU zb=JAurlWe(jZfBc&M!{@6&a^rwOKs2c|vY3^605Yf^hxUreF=*yc zUKnl>&(|FRncsDo?p{-)Ecd6wI<%Whq+(@vGo+o+-jl@zDa(y$@GO^?$k9zdQsCr| zJqVr9<*q0>As1TZ$g8!!g6Mg~1J|N=kRXCu@+$z`1`TD>3QZIz$=93i|h$J3z z&0O3^ZflXF)CJBuePo*9NnPe<4Ko*}WxYtc(JOvPNVqBF04c7#YE~p%Wv=9de?|YT zd6LY3#|`L1icaqF`*Y`>*^JsQ*wW|pA$pi5{I7dt4}48iXuk*PFYqFr&g~U`9x7#| z&!#hC6@GP}&97uHjIVTy|5b{D+}kYe7T9r_9le{nwUpaS<166ezeIZk0DUOP9s)r# z$-7~Ly1$P0YNpcx5MvStfw8FN3&44}m=|0?m%lDqmQ&}cVd1V)XONb)N^2j`-K8gC zoM|qoxV5>_a`)*8E!iWKme=5zrhSd4Eq+`bZMo-G#f5R|4XarVNC&AMDeX~iPnH}~ zPC^XY&c`{kT6ocf5Yz@I{y|%{q-fiuzM5uGQqtESx8oRzXw`vi& z_}=6mdIzv0?{@ZzZ%olzf|f8ey<=J)hA72b8dd{%rG;mqbREia1yah6iinW2yBMF^ zr#C(bsKMET=h6*Fng^=A%IHe)c9GKYpwSbGO>cvx6{{OgUPYj9yN5I{&!@wYuATCw z3(plGZW$Y&Mv=0w<<$d*KIORd3(RR`pB@;TK_~hkMR6yqoSc`q{j;k~<|5wpDVcx5 z$^r*3RhqxtD`yKY8T%~hVuF#%J(V(02<;{HWG~sg@k85pIT4(dw&jW55(Xe6agSA- z_^tt5f{3>;@eC+9TT|rJm<~g#yRi5(&c-CLke?ht*q2XIVw)LceuT&^` zwX5qVwyV1MRu{Oz%1YOo`9_*?oi*sI>gh-6EFyK0Vq)Ch?XTazL*5(4F zXae{e|E9-RxUN9B(BY@zDwfb)09SIR<5_jDrT|Q`G?}6KQq}mUYWy6J@dz_2I|MtY z0#J}JC(gN0SyAy|R@M}-(JrI7upwsRMR~1BUFHMv8hMlmT&3KN=^e=H#xYG|F-I(I zMFifEX)H!Xl-P_i?`oFI=Pb)R1bF2@;kun#nJy(~X-Vr*(a-i;(7 z6}e2s6JPCI_B+Y)^|bLX|FdMh1kZ_N`J&(W8+ucO$RC=~`*GBEbu9(k)w_83Ko?yU zX@fe3*Q2ax#AxfGV6i1&9OaYgG7l)(f6ynEf>zFvU30M@DKzR$^Ww6a+|Z)^G8VIQ zeZx|q!uy@Sxh_!o_sX+hU)IOJ;N<4 zJ6zvxQj!pPl`t-$LXuViNOY6qG`k%P0&&ld$;Gvq4zrrJx*kin)kp8EY3uGk5JmWY z&#$^)ja})sv#V~a;f!tTw+VA3+k>2_TMj{PUjvk^Mr&raMZ)+Qw(A=8RXD77MGA&hZ- z`(C$A6gVYY0b3#h5+x?hP!C%MKtY=;9aD2JI290_CZk~E4x*{?)^V* zj+Wa%?-nT0Ne3 zR+h!(-FX`>yg-xDP)e2v9WWnK-p;%X#*1&+77Eok+bVXtj61f6Q-O3 zhmYw#apv(qIVF!(2urfFB2sl?mJxBp&b?lyN$_A!wrT~37uN4ZiM5BJMPnEqAWV&)5N_J(7SGeLsx9D-2Fk>=vn$faD zk)e7;PPcqi-l`yM-vnB1f?y&5Eq!HyYUI~kP%~ny zVM0GLPP<)PDe!?%Q2MGp9b=s|_{3R_6RxEQ_Cge~0cAbybUAZ%IMS(iRe216p#hTB zxjOBn>WW29s=ck?;P;rMhEuxw#k7-J&aBT+rkzt*|D;pzB~B0e>K+k; zSE)FFKCILbpYPO$A^acrtA~*^c!E^W97SB;8vKj9XlvkV~TsMhV3ghXNU? z;oz)$?o>OI2?8%Qk`7g;uPQ}g=>WWJ(fd3{-uK=RUv0*&Ap>oka{T~qaKiQX8-@I@ z&hn2n^qo#R5WaidHE}dYTZWqE=VBc^RTjs;b)Ud{BqMSn@bAdd>SJqLBIPyo+2pw9zw8ahg)NRinId&ofP>I zk@!E>c?!l5;+}>Kxq>COA^XI2-*n`$xdR(jpf0K=~gzEKjtGkT+HD|FO z=rYzMu2Y@%zBG4DelT@W-fn|;m!{+{dc8EIm!S9!oVeBPC#jqu0k=z}ay3CEkfz0>zsV|;?WL1p-iqX(+K%qOHALLl-6N7vmADT0`RjxZj0htx1J%y$KO zCk|A=cckfR5nVYkn%uD_)WxB^(*doG2C#H_+yD*Akb$Q$%b)SPF}PH&xNag64&23a z$rSw51l!T+2Q!{(RxCttF`E6(M%-vj`MUFtfjC^8Mzp=xdDM45QjeO<-4>^Rsk`15 z8tw1fKiX$^!lv)Y0K8{t_%JUI2T!&5i^KeylsuII(Wy=#U7h06@>XXF{1ak_G}R*Y zu|AWzs>5Fwk~M|s$Lo9IGh*;U#Bc9QWOZ$AEdZq}K;nQnp2zgoOyzFRXoM#-3r>6p%f>ob*8*)Sy zgG&un0s17ZUv+qiWqTFe1`{_ThFhS44fjZadf!iDo`|D={NC3CC*!>tdJhH$R<-x> zTWa!LA3SS{+iED;Yt>waAd>X!@sEg19O-{a1Q&Z^P0z?b*D5 zsBc%ntpuC05_}{$t1#Kv6Wfz#-fL|kBo}J%oV$3ID>>srNhV}0rVIvFt)%^sl0GlV z*20mt$?~SH1(xuZ;a9Rg6_BulndP2_R+aHSVOXtm#>HZt|MerC8%~>T*;4?MnLi@C z8!xaXpGAud6|LC2NFTja9#Y` zPLspY^kR-H>uk}1GPjoWg@C$1SGeLZ7$Io+6?pk_2~}d`IICz5B21nJ!X+cupt2Fd z`xIqk2>zx4(B9RplcIasq@9pGONWKNxmo7ZDE5r>O2V_tU}1aUT9_2x%JKiKH_Baz zXYqx9WqzW+!2dT+XdXdaY;OEocI-;Ln!h0Uuk~ggoyGYVa~_(@%;&H0G{zg8falsv z39&3+ZyaMJHup$~k#S*))eFFl=4%jz<`2m7bm+WROd%z=G+^4%#_}Ns;pAgN(+DjV zmFTFQo-MxwH(FKV++7ysYrl)AN?ebK+$E>j99as4rKy;ThBvXy&CC7!rBIA0(U$mHJc}qS19(S`Tl!b+oQj zjGX4588Z@6Vn%Xw>XbspjO>i6-Y+AZ8ObRzBOI-tR!0cQXO}C83|B<$F z?jz^U-MEuygUClR;-5EuoFqK|*sc{8Fi4ZgJW3=1mE-?Qu@VEYVab-dG*2$Rncc{f zQz~-4eH7#r*XNKJzsjZ@zc7Imr^PQD*V?u*{>=|TcF0-3?&zC_)e5uQ#TccXO=Buo z<@mv(@amhS!|T6O-ZfmEPXBA_``IK-&57A(4i0IfUm*;K+jywGfND^1yi$< z3EC`S8{p~?LR(Q`T~17U>!QxwLcPc^aK%7QVLteM?Rj2opeqTH$BzXE=A=*CCigf` zvk_fp5pSLyff{Jhtkdr&;39>J<5Dv0E{dQh#pLP5wmZwS!mBdmA?5g0^D-mpw+Fps z18F69yn@Ux(9Zt-ndr!KjUo&X)|(0D+ua4A@+_&m;i#lVAdA3HYePJ&4FVYfrR{fv z%GxHWx$(!@-Fhh)&8!iVr?ZLXObTR7Ua)hm8?_A#HKoiXTlMywo{UsF*`z@D&Lssf zke^Bu_0e0dhY2rN(US7@EHjY0+JfA+EbRbL7FO{Ly3#olr&Mm!RJcY-2BaU7yTmpE z(882#b5>|P{;D7i%qGWwt@aZ(D93-H1Ec1}E!{g(F~@yv;#S|%Rw2QF15Fe->QFg= z98_Bh`kRI~W{dDJnD12IA58iY$2i&smt7u;Q~3`s5abe~NhC<2)lr#q%~LQur`@!z zsv0v8H@pmls{Zl>N{GMf+OWS13;Rp^PKphDzeD$ein#MnL}wE`RRC1+3(C+n@gFM) zG_=5|TaKS`D4F3n6hlm{I{tZDq-T5x)8cQL&f=f{XMI>4hW%==4I-D>=H(xvK2EAW zumts)OVto#uN?n3y~4uDby6t>W|03%oA~jnZ9=Dh*%`24Jn@u|4vamyPe9QB5l#LL z@%Ky}@q-%U5ZVk>j{jT-=Iy2wKcgWUNITq6uc2OjL~Pa>+@|X!J{}KbFNv5wN`u+w z51e^qGm0=~TDpJ@BJ5+BW=^xDpuwDtLVoBM5Pv#(KYZtd`Qf9S-~Z0hQTGo2hAH?z z`=K*-?}uzL!tF@{6GA2 z%%G;1FwlNqXY)Ure9TaL^AGz^cJBTHZQ-H77SfU9`w=tXlfhc+_b0K|;$-JW82^Xd zT5?}9Utva zvP}W$8)w}Y%-k*asAw91cXIhndU+0)cT84LmaA`;D(L2ezjYDK)t-G|-7Gy=_*^h z-)xqP!k_;rFA7KZ42|@<8+n4OxO!t<(~9UQ7>eQr{9Uq)QLH9`H<>J8LR{`ZiXy-sqxU77UyVB_|p~xnxaiWizKttA5GKQ1}O}Xlh zUi*BC8rr_iU8MJCsDIgSFS3hdAKqhzHZqa^C!m=~J8LhnVj1c`9p3a7%=CCCkbp@H z@=Qrg?p#UkkKfv6QQ^_#{&>@@d|Xo_hmI5BQ9x>s&&3@N+NUXPa`3TU?I;-Gn>#ZGuFO zrE7WKtB`ki!;546EDzlqFCH<^LV%E4B}g~9$^?i?=p(_E8*V%gFpqN{-tOCz5yb5eQx-q%MQATHu}& zJll;>=1>_Qoh+-=NsrtG3~7~_LtO`TcvKSw;{*JwCi(I-)2KR>$1`ltRZ}wBt(@~e zfJGP!W7JjzRcfCn>Hn(yjm$kD}igj7QD%$XjT*}fy?Vxbn5LR$oyi0uXAEc z&x-2y%Aw4SLdg%J6kp{47|dN#NDPpvTx#i#9m(zr=gv(qYiuFyk-eEH{o%Bu43&Pq*k9+RIlv+$6X^hr=dDffg2bVBHrQa8jXzgROBmKk)F8i&f9KWw{c@M+P{Bz z0ADT{=^l;_;2z=Ov5^XKHf;IP%GM3HtltuKAL#8L(&l~mRNY~`m9Ts4z-V;i(BN3# zp)vVTQKf&de=Oo>8`E70nGKuT*WVEx7#!{2GuYSL+OxNN#2C4A!}^Ww@)lerFuE7t zWNGz?;3%?h5J&sF`vaEr z*6WvlY3UJ`{b?4 zDxCb6btd`>VKgu_xTn?q5dp4ug4#b^aqo-_zD70?l@;zQK@d6~d{DIrv2`PT-HD)g zkM#A)%ixv2gZnFcy9av*`bLz4-k}4KN_4Qlx6iBx7|sYQHw+C8Kta$GnvRWV(b>^G zBmHB2QKcf*xEi*owl~l>7!3{&bRV|*aQESXq3+&F-(YVvy6eF1EI3+sOJ&{d?He{# zZrr+MBR=5TH!8N`p_@0ZyVJV(*wyI6pSW%7x~;e0hEp*2;qH;{{mChzRM{G#uhIT{ z`x3a&0^F0hanr3gZMYc_aS8~lH-9RE^$!mA4U9&k-Qs+s5v2Ip$*DzzIJ&}#2HNp` zEBojh?@q=en^CtYOKdMX+}}6Q8{xA=ht8&>gYr$f-Tfn@_^OdaigmrcBexBA_w<1x zLjaynlWyfv(P(&&laV|hGkiGO+dbe!>|#mf_RVqxkNf)v4?xrVL11qLHyDB{F%rev zvh~JHMJ1f3a5m#W5X3;#wys?T#Six%>Kll5506#`x)B?zbui}|ssm@-s)L(1-(I=t zhW0J%J_BwY<*he``A?5995Y^|#!(**rzYt!E)A883XIANJWlxO*rX8>;L%AjDKpE3bu~ z&O$NCr|UV|8#aC#5y82tFrW+xdrlVatgm@_j|{^bhd2MQ3-tG zdNd=&b(r|AeA~u#w{@_xkzH-Lb@T08h29NY99u%+hIKc7TCvYU>P!ICBZOQVJ6*}b z)hv9Bg;gwE!@{*JT*ty{7OszE;$+Q9LHcp=LJEE$>xpv{3pcaiC9#2!f5F11S=h+J zt($K3q;4f}6APPJ_)!*|$qOg95#qIQJ0W+l@EI1iv2Z5~+gVuuqqncy=!vb{ym{k> z8`o{!u*oxX^OkjYI2Ki(-gs#T8*c9KEUZW3w>gCjMxp$~fN=Jy}NM zJG``STYt-j8#irC2D(K?a>Eu_=z8C5i@J)9wSCiPZjA=J_hVY6yR`*?9fN^;ua;@-5%m%P>9`ulddSyaq#W6J$IHr?XKbqgtMS-e1^Ssm2agkTxM1zZbJ_bldtHWqzsLxdlCq z-77AD0;a8gBsa1W8iSyKUfI((CR_|*{c$+jvtP=UkqFSr{+`1<$k)*vIULaU4jn)y zF9-s|;ohM^DWc(k%P>%siF)kbO7Ey6Dy=|rX!q_&`aC=$fP18)3i1?u-V(E!q&LVF z0jvz|uH4htw@+A-(I5vh!AWN$PL61g3{lAJ7cw{=?!)3yj;?-hMf1qfdmJY~!zvMH z9jihHU)nV8A*2dKF^Iojn@EUccog0(TdS~-lu{g@aD+-_RG3E!JBnV=eg7yVq8+Ib z$iz6(J2~pEC8&e+h+kQCBln&h8U0w-(19@|Sbc-CQ0+C&Mm}p~BZWu%Fa)=v-{;n? zSh3s66)C-2R9ALSu5bM!(C{8vD5C9P-#wy_Ng2L=A*Xw6Xn%iC<2-m((v2{T z{WO?i&+xGOJE?y3r50JbBw48p3g4p2WRxx9EjXcOjAwVmjDAJa#x5 z?(5!%y^hbyvP~De{iB);bqHMy+JPFqrJ<#vA^Q4Iw`kt$A8W?$ z4dH?xuy?ftSabl%jr56}_lih|AuB-`lDQ6}6-i*vvhR?KbIK1E_r3kHvyjM1mC_D1 zP^jJeodw7!Y=k%WjinJpRyXz`L#f)@Y11-?vRv5}*!SMbO6);auFfIRSZ}`Z#*eoy zxqTO=gaf+MyKLok2V8aK{a3dwZ(DVRf+M_uFZv#Saa1}|npP97LS24%g#M@;U%@Bf z&B=sP`)ln&YnvzS0MdID&=)?R!GF9n_9za~G5LcZ_-ub->c+3sZ~ju9^i#7I z)HXXtK^*w_FYTVRcC{$WZz=u@{3(MUHGVsqTRV=`K3G$8Z0a{UUUvKmdL-i${MNGe zeuUc}UDvVNC#D{6 z`fBq}v^-ezmHLAAoq)ZJ_D7~@`)53VkCl!{o8wKQ%qOM_jh{U4#H^n>|EK5t%)Gdz zl+ni@xBp4|pSHi={%7rf-u}NQqmP`O2>pc(N*{W5zs=39n~&9esrD;%Pt?cHl*~q) z=-qi4m$Zu-wcQB^m2qwERNInai3IgTUM>p(ehRM|I$`aPp)9|x&6{CYU#dG+EB1N3 zDc?@|eI2;1&D!rq*Gl?r-Kdr_pk{X(eayj|V+O4KDc^o`Z(849ouGX?@VBA;-s#%^ zackev+~Vx3%bVB6qLSJk+TcU&j?O8gGi-D)j?KbHe%ylps_@;S{VwtN+HW3T{6oG- zd))Bly!;4%Y6AGP2FKe^-B0=zIwuXjP{ELQOZ$V+Ls7qnfZudpbW~6gf80;{75IFE zlOLfk@FfP{tLQ@C$#bEdf6UHrP0pi#LWOJANXU{1BdRM>xNMyU-Bw{0m;|lqljiS|#?%k8pmLmG(loVkLhG=cihUFXIyW z{75VPfa5CS=Q-f>`>1Jt1fKs%zXIo1P|t*4)L$za@zbMAtb-!F4&d=am|cb^{R=$* zn=D-PBXszg#x+K8YjX>%rsEr&S0_uiXdEqa2SM&9bOp{&1X6z+4bD&hov;&_w-0g3 z*6EhB2HqHBQ|`BrANUEkFWr7@l0gueNd88qjx606Hc@QzBBw3 z+3QPop)JMt)p|} zL?6Uucq)jmHrM1i6$(oyY~PA?ft#vpFm=A%@q21vBAWF2PVDW?X^8(TqN6BA9i|7u zc?hxtu2I?qmDv&U9|1;QbE5{ zqP>Oi`e?Wij>S$Pd}?&`iX!@r(Xm2!fx$v3aRkK_{Nl)hMebZ2P0vBJ8vE=ydpeG0 zWC2!-qw^+!&zt}*+Ry$(v$fIRelH7+BAM#{dui7jB2^W|ubUF0#IBJ22c?KonZ`|J zR|(vbav^D{pe@STU3XiTRUCG9#U-erH2YF)2vQVe0Qqy>rg}^X|KI?|Hv7gKxtO7dm+#`PnZmY9+t40KY}; zEDA@gKe;fvleqQsGUO$-VI4dVo6KY53+s}%CC5sf3;vnI%ZfL~!+cRf+JL`S_3SCY zdx4AnBfT6Ctmk8fcjxh^41Y3@R}^mx?f1ogvvuGo@nsI*MLQ?hF020@;H~QaBIS>a z+qjKAwBPVC;@nTn6xfmddn^0ztDUyc)f4Og2JIZB{V!QhPBYl0cZMc(uKYEF{-;e%7-0w%_fxx%PHs%f9m}?5^zX-TIFV#)4 z-v*#BX({nJ;^hd3+Z1oihc?ddDzINJz}KmrMd6HlE*>b5?=8R|DZu*+@Im16yv(_B z#}#kPtJbb+ft_jKa=-j~{3YUkJw8L+udCl8?$^a15cliaKU|LUHj52?iZ2L{yU*Vt+VT7LQQ|OF7aKB9Nt#eQ^P1Kh)0FrA zT=7*&KX||4e&T*z{F>U=&%wGD$ba&^?_y^$`}0QPhlzVX(?`U;U+uWsZ(diNRJ^%= zPScL}Z_N>ZoAt5Jm-EEEALlp2DZiQZze3#m3$GIQekuIAnD)aV=VzCtwDgbnW86gC z`+JuY_kR3)fVUby8w{`J$JK+ha|heCjP2?p?)|k}(XLkZpQgO`w{Iiv{c1I}(>x9* zDDVBu2iTveUY%9cL!I*8&$17AduUz{A5gq`o%Sy6c>m+4#QlD9mbmw0o+Ix4b>9&8 z`_1o(WBh5m?0wS(;2l`C**e_D=SAQMIt?G*kne{-X~+A;|0TYO_xB7t@7nosym>#? zb;P}Y>}KNLkA6FG?`K{`-0!CzBJTIWj{=wb<>$A4%6tFC0C9XiXusL}wPy;(=Q!mL zIsbhXct>dLk8DRVMfo}Qo2@sVC+_{6FBA9ggI*=>{h0>~?7u_Y`}K|zzvSL0d_vs& zV`qtbKeI;7;N_~4)nkwZa?0mdhEHkr+BIuph=2wMBqaYxmN$NTgKJJ6xDwWf_rSnf zFmk7HTvra0wQT})Sn?U&i8#EVzWg zm6GdnbUS6r?U(`^OSohxGU0elmR5J6)`oyGXH=`mmC6yWB84fkkTQl4LV`dog4G5~ zNJ&E(mql4P%A?6MZIpHsDJ$72DJ&UxCZYB)q5=hFybzp3;zmXYuovf$0u=z^Suxrp z3;6;~Z*2GQ*u5AGppj&J%f<_LA(Ys=bVh_(5S0)r5y4;_fjOsogcyN&;mV^+S$kWvEsolM{hiAbV%AG>8d6#Fn%rAy|@I zhihzSp=T!EtgT9=F?>4!P3AF0EUsCWp>aHfb1;Jny9_ zDgR4a=O|N3=06oFX$QwsnM^3A&w2@?G?a!%hNebQV??g-d~j$;7&6RBB%)owXcz^h zirIV)jHD5}f@TF&Yp2kr3!A{e#u^);L zKjutN%pbm<7kIFJtf6<~B-J;6XV()^!t9#7*I)1S%`du<`d;4Ww@@F;Bu(Z&-Aw(( zKkxz%UO)P^#CI8!`C0qdN~=PXhtlhBg^Wm=zWHOfQ{VTu&sUwktrx4*w{;`LH2LzM z1Dcj^{@ptDvH8v=ufNah(?417j_vpIKL0xO1+(^>AM+LJ_uZe@$mc>h$ntT>CDZ@$ zg&eGHO_BGIi8W2p5XL@_XjukmlDzCOT=STSzxh){d!&PtTS~UMxvGexh)aJulVGW%ZC2|(lfa8 literal 0 HcmV?d00001 diff --git a/bin/custom-output/time-test/amtest-time-test.txt b/bin/custom-output/time-test/amtest-time-test.txt new file mode 100755 index 0000000..4a5230b --- /dev/null +++ b/bin/custom-output/time-test/amtest-time-test.txt @@ -0,0 +1,3311 @@ + +/home/hzb/test/am-kernels/tests/am-tests/build/amtest-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 0009f117 auipc sp,0x9f + 80000008: ffc10113 addi sp,sp,-4 # 8009f000 <_end> + 8000000c: 0b8010ef jal ra,800010c4 <_trm_init> + +0000000080000010

: + 80000010: fd010113 addi sp,sp,-48 + 80000014: 02113423 sd ra,40(sp) + 80000018: 02813023 sd s0,32(sp) + 8000001c: 00913c23 sd s1,24(sp) + 80000020: 01213823 sd s2,16(sp) + 80000024: 01313423 sd s3,8(sp) + 80000028: 00054783 lbu a5,0(a0) + 8000002c: 01500713 li a4,21 + 80000030: f9f7879b addiw a5,a5,-97 + 80000034: 0ff7f793 andi a5,a5,255 + 80000038: 02f76063 bltu a4,a5,80000058 + 8000003c: 00003717 auipc a4,0x3 + 80000040: 18070713 addi a4,a4,384 # 800031bc <_etext+0x2c> + 80000044: 00279793 slli a5,a5,0x2 + 80000048: 00e787b3 add a5,a5,a4 + 8000004c: 0007a783 lw a5,0(a5) + 80000050: 00e787b3 add a5,a5,a4 + 80000054: 00078067 jr a5 + 80000058: 00003517 auipc a0,0x3 + 8000005c: 13850513 addi a0,a0,312 # 80003190 <_etext> + 80000060: 1f1020ef jal ra,80002a50 + 80000064: 00003497 auipc s1,0x3 + 80000068: 28448493 addi s1,s1,644 # 800032e8 + 8000006c: 00000413 li s0,0 + 80000070: 10000913 li s2,256 + 80000074: 00003997 auipc s3,0x3 + 80000078: 13c98993 addi s3,s3,316 # 800031b0 <_etext+0x20> + 8000007c: 0014041b addiw s0,s0,1 + 80000080: 03240c63 beq s0,s2,800000b8 + 80000084: 0004b603 ld a2,0(s1) + 80000088: 00060863 beqz a2,80000098 + 8000008c: 00040593 mv a1,s0 + 80000090: 00098513 mv a0,s3 + 80000094: 1bd020ef jal ra,80002a50 + 80000098: 00848493 addi s1,s1,8 + 8000009c: fe1ff06f j 8000007c + 800000a0: 00000797 auipc a5,0x0 + 800000a4: 13c78793 addi a5,a5,316 # 800001dc + 800000a8: 00097717 auipc a4,0x97 + 800000ac: b0f73023 sd a5,-1280(a4) # 80096ba8 + 800000b0: 1e0010ef jal ra,80001290 + 800000b4: 128000ef jal ra,800001dc + 800000b8: 02813083 ld ra,40(sp) + 800000bc: 02013403 ld s0,32(sp) + 800000c0: 01813483 ld s1,24(sp) + 800000c4: 01013903 ld s2,16(sp) + 800000c8: 00813983 ld s3,8(sp) + 800000cc: 00000513 li a0,0 + 800000d0: 03010113 addi sp,sp,48 + 800000d4: 00008067 ret + 800000d8: 00001797 auipc a5,0x1 + 800000dc: ac078793 addi a5,a5,-1344 # 80000b98 + 800000e0: 00097717 auipc a4,0x97 + 800000e4: acf73423 sd a5,-1336(a4) # 80096ba8 + 800000e8: 1a8010ef jal ra,80001290 + 800000ec: 2ad000ef jal ra,80000b98 + 800000f0: fc9ff06f j 800000b8 + 800000f4: 00001797 auipc a5,0x1 + 800000f8: d2c78793 addi a5,a5,-724 # 80000e20 + 800000fc: 00097717 auipc a4,0x97 + 80000100: aaf73623 sd a5,-1364(a4) # 80096ba8 + 80000104: 51d000ef jal ra,80000e20 + 80000108: fb1ff06f j 800000b8 + 8000010c: 00001797 auipc a5,0x1 + 80000110: ef078793 addi a5,a5,-272 # 80000ffc + 80000114: 00097717 auipc a4,0x97 + 80000118: a8f73a23 sd a5,-1388(a4) # 80096ba8 + 8000011c: 174010ef jal ra,80001290 + 80000120: 00001517 auipc a0,0x1 + 80000124: e4850513 addi a0,a0,-440 # 80000f68 + 80000128: 634010ef jal ra,8000175c + 8000012c: 6d1000ef jal ra,80000ffc + 80000130: f89ff06f j 800000b8 + 80000134: 00001797 auipc a5,0x1 + 80000138: d3878793 addi a5,a5,-712 # 80000e6c + 8000013c: 00097717 auipc a4,0x97 + 80000140: a6f73623 sd a5,-1428(a4) # 80096ba8 + 80000144: 14c010ef jal ra,80001290 + 80000148: 525000ef jal ra,80000e6c + 8000014c: f6dff06f j 800000b8 + 80000150: 00001517 auipc a0,0x1 + 80000154: f1c50513 addi a0,a0,-228 # 8000106c + 80000158: 00097797 auipc a5,0x97 + 8000015c: a4a7b823 sd a0,-1456(a5) # 80096ba8 + 80000160: 7a4010ef jal ra,80001904 + 80000164: 709000ef jal ra,8000106c + 80000168: f51ff06f j 800000b8 + 8000016c: 00000797 auipc a5,0x0 + 80000170: 3b478793 addi a5,a5,948 # 80000520 + 80000174: 00000517 auipc a0,0x0 + 80000178: 22c50513 addi a0,a0,556 # 800003a0 + 8000017c: 00097717 auipc a4,0x97 + 80000180: a2f73623 sd a5,-1492(a4) # 80096ba8 + 80000184: 5d8010ef jal ra,8000175c + 80000188: 00000597 auipc a1,0x0 + 8000018c: 21458593 addi a1,a1,532 # 8000039c + 80000190: 00000517 auipc a0,0x0 + 80000194: 18450513 addi a0,a0,388 # 80000314 + 80000198: 74c010ef jal ra,800018e4 + 8000019c: 384000ef jal ra,80000520 + 800001a0: f19ff06f j 800000b8 + 800001a4: 00000797 auipc a5,0x0 + 800001a8: 51478793 addi a5,a5,1300 # 800006b8 + 800001ac: 00097717 auipc a4,0x97 + 800001b0: 9ef73e23 sd a5,-1540(a4) # 80096ba8 + 800001b4: 0dc010ef jal ra,80001290 + 800001b8: 500000ef jal ra,800006b8 + 800001bc: efdff06f j 800000b8 + 800001c0: 00001797 auipc a5,0x1 + 800001c4: 94078793 addi a5,a5,-1728 # 80000b00 + 800001c8: 00097717 auipc a4,0x97 + 800001cc: 9ef73023 sd a5,-1568(a4) # 80096ba8 + 800001d0: 0c0010ef jal ra,80001290 + 800001d4: 12d000ef jal ra,80000b00 + 800001d8: ee1ff06f j 800000b8 + +00000000800001dc : + 800001dc: fc010113 addi sp,sp,-64 + 800001e0: 00010593 mv a1,sp + 800001e4: 00e00513 li a0,14 + 800001e8: 02113c23 sd ra,56(sp) + 800001ec: 02813823 sd s0,48(sp) + 800001f0: 02913423 sd s1,40(sp) + 800001f4: 03213023 sd s2,32(sp) + 800001f8: 01313c23 sd s3,24(sp) + 800001fc: 01413823 sd s4,16(sp) + 80000200: 0e4010ef jal ra,800012e4 + 80000204: 00014783 lbu a5,0(sp) + 80000208: 0c078c63 beqz a5,800002e0 + 8000020c: 040007b7 lui a5,0x4000 + 80000210: 07d78793 addi a5,a5,125 # 400007d <_entry_offset+0x400007d> + 80000214: 00679793 slli a5,a5,0x6 + 80000218: 00004497 auipc s1,0x4 + 8000021c: 53048493 addi s1,s1,1328 # 80004748 + 80000220: 00012917 auipc s2,0x12 + 80000224: 33490913 addi s2,s2,820 # 80012554 <_data> + 80000228: 00f13023 sd a5,0(sp) + 8000022c: 00010593 mv a1,sp + 80000230: 40000793 li a5,1024 + 80000234: 00f00513 li a0,15 + 80000238: 4099093b subw s2,s2,s1 + 8000023c: 00f12423 sw a5,8(sp) + 80000240: 0c0010ef jal ra,80001300 + 80000244: 06090463 beqz s2,800002ac + 80000248: 00000413 li s0,0 + 8000024c: 00000793 li a5,0 + 80000250: 00001a37 lui s4,0x1 + 80000254: 00004997 auipc s3,0x4 + 80000258: 8c498993 addi s3,s3,-1852 # 80003b18 + 8000025c: 40f907bb subw a5,s2,a5 + 80000260: 0007869b sext.w a3,a5 + 80000264: 00048713 mv a4,s1 + 80000268: 00010593 mv a1,sp + 8000026c: 01100513 li a0,17 + 80000270: 00da7463 bgeu s4,a3,80000278 + 80000274: 000017b7 lui a5,0x1 + 80000278: 02079693 slli a3,a5,0x20 + 8000027c: 0206d693 srli a3,a3,0x20 + 80000280: 00d484b3 add s1,s1,a3 + 80000284: 0087843b addw s0,a5,s0 + 80000288: 00e13023 sd a4,0(sp) + 8000028c: 00913423 sd s1,8(sp) + 80000290: 070010ef jal ra,80001300 + 80000294: 00090613 mv a2,s2 + 80000298: 00040593 mv a1,s0 + 8000029c: 00098513 mv a0,s3 + 800002a0: 7b0020ef jal ra,80002a50 + 800002a4: 00040793 mv a5,s0 + 800002a8: fb246ae3 bltu s0,s2,8000025c + 800002ac: 00010593 mv a1,sp + 800002b0: 01000513 li a0,16 + 800002b4: 030010ef jal ra,800012e4 + 800002b8: 00012783 lw a5,0(sp) + 800002bc: fef048e3 bgtz a5,800002ac + 800002c0: 03813083 ld ra,56(sp) + 800002c4: 03013403 ld s0,48(sp) + 800002c8: 02813483 ld s1,40(sp) + 800002cc: 02013903 ld s2,32(sp) + 800002d0: 01813983 ld s3,24(sp) + 800002d4: 01013a03 ld s4,16(sp) + 800002d8: 04010113 addi sp,sp,64 + 800002dc: 00008067 ret + 800002e0: 00004597 auipc a1,0x4 + 800002e4: 80058593 addi a1,a1,-2048 # 80003ae0 + 800002e8: 00004517 auipc a0,0x4 + 800002ec: 80850513 addi a0,a0,-2040 # 80003af0 + 800002f0: 760020ef jal ra,80002a50 + 800002f4: 03813083 ld ra,56(sp) + 800002f8: 03013403 ld s0,48(sp) + 800002fc: 02813483 ld s1,40(sp) + 80000300: 02013903 ld s2,32(sp) + 80000304: 01813983 ld s3,24(sp) + 80000308: 01013a03 ld s4,16(sp) + 8000030c: 04010113 addi sp,sp,64 + 80000310: 00008067 ret + +0000000080000314 : + 80000314: fd010113 addi sp,sp,-48 + 80000318: 01313423 sd s3,8(sp) + 8000031c: 00097997 auipc s3,0x97 + 80000320: 89498993 addi s3,s3,-1900 # 80096bb0 + 80000324: 01213823 sd s2,16(sp) + 80000328: 0009b903 ld s2,0(s3) + 8000032c: 00913c23 sd s1,24(sp) + 80000330: 02113423 sd ra,40(sp) + 80000334: 02813023 sd s0,32(sp) + 80000338: 00050493 mv s1,a0 + 8000033c: 00091663 bnez s2,80000348 + 80000340: 00012917 auipc s2,0x12 + 80000344: 23093903 ld s2,560(s2) # 80012570 + 80000348: 00048593 mv a1,s1 + 8000034c: 00090513 mv a0,s2 + 80000350: 64d000ef jal ra,8000119c <__umoddi3> + 80000354: 02050063 beqz a0,80000374 + 80000358: 00190413 addi s0,s2,1 + 8000035c: 00040513 mv a0,s0 + 80000360: 00048593 mv a1,s1 + 80000364: 639000ef jal ra,8000119c <__umoddi3> + 80000368: 00040913 mv s2,s0 + 8000036c: 00140413 addi s0,s0,1 + 80000370: fe0516e3 bnez a0,8000035c + 80000374: 02813083 ld ra,40(sp) + 80000378: 02013403 ld s0,32(sp) + 8000037c: 012484b3 add s1,s1,s2 + 80000380: 0099b023 sd s1,0(s3) + 80000384: 00090513 mv a0,s2 + 80000388: 01813483 ld s1,24(sp) + 8000038c: 01013903 ld s2,16(sp) + 80000390: 00813983 ld s3,8(sp) + 80000394: 03010113 addi sp,sp,48 + 80000398: 00008067 ret + +000000008000039c : + 8000039c: 00008067 ret + +00000000800003a0 : + 800003a0: 00052783 lw a5,0(a0) + 800003a4: fe010113 addi sp,sp,-32 + 800003a8: 00813823 sd s0,16(sp) + 800003ac: 00113c23 sd ra,24(sp) + 800003b0: 00300713 li a4,3 + 800003b4: 00058413 mv s0,a1 + 800003b8: 0ce78663 beq a5,a4,80000484 + 800003bc: 08f76663 bltu a4,a5,80000448 + 800003c0: 00100713 li a4,1 + 800003c4: 0ae78063 beq a5,a4,80000464 + 800003c8: 00200713 li a4,2 + 800003cc: 12e79a63 bne a5,a4,80000500 + 800003d0: 00100513 li a0,1 + 800003d4: 3b4010ef jal ra,80001788 + 800003d8: 00012623 sw zero,12(sp) + 800003dc: 00c12783 lw a5,12(sp) + 800003e0: 000f4737 lui a4,0xf4 + 800003e4: 23f70713 addi a4,a4,575 # f423f <_entry_offset+0xf423f> + 800003e8: 0007879b sext.w a5,a5 + 800003ec: 00f74e63 blt a4,a5,80000408 + 800003f0: 00c12783 lw a5,12(sp) + 800003f4: 0017879b addiw a5,a5,1 + 800003f8: 00f12623 sw a5,12(sp) + 800003fc: 00c12783 lw a5,12(sp) + 80000400: 0007879b sext.w a5,a5 + 80000404: fef756e3 bge a4,a5,800003f0 + 80000408: 05043583 ld a1,80(s0) + 8000040c: 00003517 auipc a0,0x3 + 80000410: 78450513 addi a0,a0,1924 # 80003b90 + 80000414: 63c020ef jal ra,80002a50 + 80000418: 00012797 auipc a5,0x12 + 8000041c: 1507a783 lw a5,336(a5) # 80012568 + 80000420: 00078a63 beqz a5,80000434 + 80000424: 00012797 auipc a5,0x12 + 80000428: 1407a223 sw zero,324(a5) # 80012568 + 8000042c: 00096417 auipc s0,0x96 + 80000430: 78c43403 ld s0,1932(s0) # 80096bb8 + 80000434: 01813083 ld ra,24(sp) + 80000438: 00040513 mv a0,s0 + 8000043c: 01013403 ld s0,16(sp) + 80000440: 02010113 addi sp,sp,32 + 80000444: 00008067 ret + 80000448: ffb7879b addiw a5,a5,-5 + 8000044c: 00100713 li a4,1 + 80000450: 0af76863 bltu a4,a5,80000500 + 80000454: 01853583 ld a1,24(a0) + 80000458: 00003517 auipc a0,0x3 + 8000045c: 70850513 addi a0,a0,1800 # 80003b60 + 80000460: 5f0020ef jal ra,80002a50 + 80000464: 00012797 auipc a5,0x12 + 80000468: 1047a783 lw a5,260(a5) # 80012568 + 8000046c: fc0784e3 beqz a5,80000434 + 80000470: 00012797 auipc a5,0x12 + 80000474: 0e07ac23 sw zero,248(a5) # 80012568 + 80000478: 00096417 auipc s0,0x96 + 8000047c: 74043403 ld s0,1856(s0) # 80096bb8 + 80000480: fb5ff06f j 80000434 + 80000484: 00853783 ld a5,8(a0) + 80000488: 01053583 ld a1,16(a0) + 8000048c: 00003697 auipc a3,0x3 + 80000490: 6b468693 addi a3,a3,1716 # 80003b40 + 80000494: 0017f713 andi a4,a5,1 + 80000498: 04070663 beqz a4,800004e4 + 8000049c: 0027f793 andi a5,a5,2 + 800004a0: 00003717 auipc a4,0x3 + 800004a4: 6b070713 addi a4,a4,1712 # 80003b50 + 800004a8: 00078e63 beqz a5,800004c4 + 800004ac: 00003617 auipc a2,0x3 + 800004b0: 73c60613 addi a2,a2,1852 # 80003be8 + 800004b4: 00003517 auipc a0,0x3 + 800004b8: 6cc50513 addi a0,a0,1740 # 80003b80 + 800004bc: 594020ef jal ra,80002a50 + 800004c0: fa5ff06f j 80000464 + 800004c4: 00003717 auipc a4,0x3 + 800004c8: 72470713 addi a4,a4,1828 # 80003be8 + 800004cc: 00003617 auipc a2,0x3 + 800004d0: 71c60613 addi a2,a2,1820 # 80003be8 + 800004d4: 00003517 auipc a0,0x3 + 800004d8: 6ac50513 addi a0,a0,1708 # 80003b80 + 800004dc: 574020ef jal ra,80002a50 + 800004e0: f85ff06f j 80000464 + 800004e4: 0027f793 andi a5,a5,2 + 800004e8: 00003697 auipc a3,0x3 + 800004ec: 70068693 addi a3,a3,1792 # 80003be8 + 800004f0: 00003717 auipc a4,0x3 + 800004f4: 66070713 addi a4,a4,1632 # 80003b50 + 800004f8: fa079ae3 bnez a5,800004ac + 800004fc: fc9ff06f j 800004c4 + 80000500: 02800613 li a2,40 + 80000504: 00003597 auipc a1,0x3 + 80000508: 69458593 addi a1,a1,1684 # 80003b98 + 8000050c: 00003517 auipc a0,0x3 + 80000510: 6c450513 addi a0,a0,1732 # 80003bd0 + 80000514: 53c020ef jal ra,80002a50 + 80000518: 00100513 li a0,1 + 8000051c: 385000ef jal ra,800010a0 + +0000000080000520 : + 80000520: fc010113 addi sp,sp,-64 + 80000524: 00300613 li a2,3 + 80000528: 00003597 auipc a1,0x3 + 8000052c: 6c858593 addi a1,a1,1736 # 80003bf0 + 80000530: 00003517 auipc a0,0x3 + 80000534: 6c850513 addi a0,a0,1736 # 80003bf8 + 80000538: 02113c23 sd ra,56(sp) + 8000053c: 02813823 sd s0,48(sp) + 80000540: 02913423 sd s1,40(sp) + 80000544: 03213023 sd s2,32(sp) + 80000548: 01313c23 sd s3,24(sp) + 8000054c: 01413823 sd s4,16(sp) + 80000550: 554020ef jal ra,80002aa4 + 80000554: 00050e63 beqz a0,80000570 + 80000558: 00003597 auipc a1,0x3 + 8000055c: 6a858593 addi a1,a1,1704 # 80003c00 + 80000560: 00003517 auipc a0,0x3 + 80000564: 69850513 addi a0,a0,1688 # 80003bf8 + 80000568: 3ac010ef jal ra,80001914 + 8000056c: 12051263 bnez a0,80000690 + 80000570: 00012417 auipc s0,0x12 + 80000574: 41840413 addi s0,s0,1048 # 80012988 + 80000578: 00040513 mv a0,s0 + 8000057c: 370010ef jal ra,800018ec + 80000580: 01043603 ld a2,16(s0) + 80000584: 00843583 ld a1,8(s0) + 80000588: 00003517 auipc a0,0x3 + 8000058c: 6a050513 addi a0,a0,1696 # 80003c28 + 80000590: 00096a17 auipc s4,0x96 + 80000594: 620a0a13 addi s4,s4,1568 # 80096bb0 + 80000598: 4b8020ef jal ra,80002a50 + 8000059c: 00843783 ld a5,8(s0) + 800005a0: 01043983 ld s3,16(s0) + 800005a4: 000a3483 ld s1,0(s4) + 800005a8: 00042903 lw s2,0(s0) + 800005ac: 40f989b3 sub s3,s3,a5 + 800005b0: 0019d993 srli s3,s3,0x1 + 800005b4: 00f989b3 add s3,s3,a5 + 800005b8: 0c048663 beqz s1,80000684 + 800005bc: 00090593 mv a1,s2 + 800005c0: 00048513 mv a0,s1 + 800005c4: 3d9000ef jal ra,8000119c <__umoddi3> + 800005c8: 02050063 beqz a0,800005e8 + 800005cc: 00148413 addi s0,s1,1 + 800005d0: 00040513 mv a0,s0 + 800005d4: 00090593 mv a1,s2 + 800005d8: 3c5000ef jal ra,8000119c <__umoddi3> + 800005dc: 00040493 mv s1,s0 + 800005e0: 00140413 addi s0,s0,1 + 800005e4: fe0516e3 bnez a0,800005d0 + 800005e8: 00990933 add s2,s2,s1 + 800005ec: 00f00613 li a2,15 + 800005f0: 00012597 auipc a1,0x12 + 800005f4: f6858593 addi a1,a1,-152 # 80012558 + 800005f8: 00048513 mv a0,s1 + 800005fc: 012a3023 sd s2,0(s4) + 80000600: 65c020ef jal ra,80002c5c + 80000604: 00300693 li a3,3 + 80000608: 00048613 mv a2,s1 + 8000060c: 00098593 mv a1,s3 + 80000610: 00012517 auipc a0,0x12 + 80000614: 37850513 addi a0,a0,888 # 80012988 + 80000618: 2d8010ef jal ra,800018f0 + 8000061c: 00048613 mv a2,s1 + 80000620: 00098593 mv a1,s3 + 80000624: 00003517 auipc a0,0x3 + 80000628: 62c50513 addi a0,a0,1580 # 80003c50 + 8000062c: 424020ef jal ra,80002a50 + 80000630: 00098693 mv a3,s3 + 80000634: 00012597 auipc a1,0x12 + 80000638: 37458593 addi a1,a1,884 # 800129a8 + 8000063c: 00013617 auipc a2,0x13 + 80000640: 36c60613 addi a2,a2,876 # 800139a8 + 80000644: 00012517 auipc a0,0x12 + 80000648: 34450513 addi a0,a0,836 # 80012988 + 8000064c: 2a8010ef jal ra,800018f4 + 80000650: 00050793 mv a5,a0 + 80000654: 00100513 li a0,1 + 80000658: 00096717 auipc a4,0x96 + 8000065c: 56f73023 sd a5,1376(a4) # 80096bb8 + 80000660: 128010ef jal ra,80001788 + 80000664: 03013403 ld s0,48(sp) + 80000668: 03813083 ld ra,56(sp) + 8000066c: 02813483 ld s1,40(sp) + 80000670: 02013903 ld s2,32(sp) + 80000674: 01813983 ld s3,24(sp) + 80000678: 01013a03 ld s4,16(sp) + 8000067c: 04010113 addi sp,sp,64 + 80000680: 0fc0106f j 8000177c + 80000684: 00012497 auipc s1,0x12 + 80000688: eec4b483 ld s1,-276(s1) # 80012570 + 8000068c: f31ff06f j 800005bc + 80000690: 03013403 ld s0,48(sp) + 80000694: 03813083 ld ra,56(sp) + 80000698: 02813483 ld s1,40(sp) + 8000069c: 02013903 ld s2,32(sp) + 800006a0: 01813983 ld s3,24(sp) + 800006a4: 01013a03 ld s4,16(sp) + 800006a8: 00003517 auipc a0,0x3 + 800006ac: 56050513 addi a0,a0,1376 # 80003c08 + 800006b0: 04010113 addi sp,sp,64 + 800006b4: 39c0206f j 80002a50 + +00000000800006b8 : + 800006b8: fa010113 addi sp,sp,-96 + 800006bc: 04913423 sd s1,72(sp) + 800006c0: 000f44b7 lui s1,0xf4 + 800006c4: 04813823 sd s0,80(sp) + 800006c8: 03313c23 sd s3,56(sp) + 800006cc: 03413823 sd s4,48(sp) + 800006d0: 03513423 sd s5,40(sp) + 800006d4: 03613023 sd s6,32(sp) + 800006d8: 04113c23 sd ra,88(sp) + 800006dc: 05213023 sd s2,64(sp) + 800006e0: 00100413 li s0,1 + 800006e4: 24048493 addi s1,s1,576 # f4240 <_entry_offset+0xf4240> + 800006e8: 00003a17 auipc s4,0x3 + 800006ec: 598a0a13 addi s4,s4,1432 # 80003c80 + 800006f0: 00100993 li s3,1 + 800006f4: 00003b17 auipc s6,0x3 + 800006f8: 5bcb0b13 addi s6,s6,1468 # 80003cb0 + 800006fc: 00003a97 auipc s5,0x3 + 80000700: 5a4a8a93 addi s5,s5,1444 # 80003ca0 + 80000704: 0004091b sext.w s2,s0 + 80000708: 00600513 li a0,6 + 8000070c: 00810593 addi a1,sp,8 + 80000710: 3d5000ef jal ra,800012e4 + 80000714: 00813503 ld a0,8(sp) + 80000718: 00048593 mv a1,s1 + 8000071c: 239000ef jal ra,80001154 <__udivdi3> + 80000720: fe8564e3 bltu a0,s0,80000708 + 80000724: 00810593 addi a1,sp,8 + 80000728: 00500513 li a0,5 + 8000072c: 3b9000ef jal ra,800012e4 + 80000730: 01c12803 lw a6,28(sp) + 80000734: 01812783 lw a5,24(sp) + 80000738: 01412703 lw a4,20(sp) + 8000073c: 01012683 lw a3,16(sp) + 80000740: 00c12603 lw a2,12(sp) + 80000744: 00812583 lw a1,8(sp) + 80000748: 000a0513 mv a0,s4 + 8000074c: 304020ef jal ra,80002a50 + 80000750: 01341c63 bne s0,s3,80000768 + 80000754: 00100593 li a1,1 + 80000758: 000a8513 mv a0,s5 + 8000075c: 2f4020ef jal ra,80002a50 + 80000760: 00140413 addi s0,s0,1 + 80000764: fa1ff06f j 80000704 + 80000768: 00090593 mv a1,s2 + 8000076c: 000b0513 mv a0,s6 + 80000770: 2e0020ef jal ra,80002a50 + 80000774: 00140413 addi s0,s0,1 + 80000778: f8dff06f j 80000704 + +000000008000077c : + 8000077c: f7010113 addi sp,sp,-144 + 80000780: 00010593 mv a1,sp + 80000784: 00900513 li a0,9 + 80000788: 08113423 sd ra,136(sp) + 8000078c: 07213823 sd s2,112(sp) + 80000790: 07413023 sd s4,96(sp) + 80000794: 08813023 sd s0,128(sp) + 80000798: 06913c23 sd s1,120(sp) + 8000079c: 07313423 sd s3,104(sp) + 800007a0: 05513c23 sd s5,88(sp) + 800007a4: 05613823 sd s6,80(sp) + 800007a8: 05713423 sd s7,72(sp) + 800007ac: 05813023 sd s8,64(sp) + 800007b0: 03913c23 sd s9,56(sp) + 800007b4: 03a13823 sd s10,48(sp) + 800007b8: 03b13423 sd s11,40(sp) + 800007bc: 329000ef jal ra,800012e4 + 800007c0: 00412783 lw a5,4(sp) + 800007c4: 00010593 mv a1,sp + 800007c8: 00900513 li a0,9 + 800007cc: 41f7da1b sraiw s4,a5,0x1f + 800007d0: 01ba5a1b srliw s4,s4,0x1b + 800007d4: 00fa0a3b addw s4,s4,a5 + 800007d8: 30d000ef jal ra,800012e4 + 800007dc: 00812783 lw a5,8(sp) + 800007e0: 405a5a1b sraiw s4,s4,0x5 + 800007e4: 000a0513 mv a0,s4 + 800007e8: 41f7d91b sraiw s2,a5,0x1f + 800007ec: 01b9591b srliw s2,s2,0x1b + 800007f0: 00f9093b addw s2,s2,a5 + 800007f4: 4059591b sraiw s2,s2,0x5 + 800007f8: 00090593 mv a1,s2 + 800007fc: 0ed000ef jal ra,800010e8 <__muldi3> + 80000800: 0005079b sext.w a5,a0 + 80000804: 40000713 li a4,1024 + 80000808: 0ef76e63 bltu a4,a5,80000904 + 8000080c: fff7841b addiw s0,a5,-1 + 80000810: 02041413 slli s0,s0,0x20 + 80000814: 00078a93 mv s5,a5 + 80000818: 01e45413 srli s0,s0,0x1e + 8000081c: 00014797 auipc a5,0x14 + 80000820: 19078793 addi a5,a5,400 # 800149ac + 80000824: 00013997 auipc s3,0x13 + 80000828: 20498993 addi s3,s3,516 # 80013a28 + 8000082c: 00014c17 auipc s8,0x14 + 80000830: 1fcc0c13 addi s8,s8,508 # 80014a28 + 80000834: 00014497 auipc s1,0x14 + 80000838: 17448493 addi s1,s1,372 # 800149a8 + 8000083c: 00f40433 add s0,s0,a5 + 80000840: 00000c93 li s9,0 + 80000844: 000a0b9b sext.w s7,s4 + 80000848: 000c8b1b sext.w s6,s9 + 8000084c: f8098d13 addi s10,s3,-128 + 80000850: 00000d93 li s11,0 + 80000854: 000a8c63 beqz s5,8000086c + 80000858: 000d2703 lw a4,0(s10) + 8000085c: 00048793 mv a5,s1 + 80000860: 00e7a023 sw a4,0(a5) + 80000864: 00478793 addi a5,a5,4 + 80000868: fe879ce3 bne a5,s0,80000860 + 8000086c: 004d0d13 addi s10,s10,4 + 80000870: 00010593 mv a1,sp + 80000874: 00b00513 li a0,11 + 80000878: 01b12023 sw s11,0(sp) + 8000087c: 01612223 sw s6,4(sp) + 80000880: 00913423 sd s1,8(sp) + 80000884: 01412823 sw s4,16(sp) + 80000888: 01212a23 sw s2,20(sp) + 8000088c: 00010c23 sb zero,24(sp) + 80000890: 017d8dbb addw s11,s11,s7 + 80000894: 26d000ef jal ra,80001300 + 80000898: fb3d1ee3 bne s10,s3,80000854 + 8000089c: 080d0993 addi s3,s10,128 + 800008a0: 01990cbb addw s9,s2,s9 + 800008a4: fb8992e3 bne s3,s8,80000848 + 800008a8: 00010593 mv a1,sp + 800008ac: 00100793 li a5,1 + 800008b0: 00b00513 li a0,11 + 800008b4: 00013023 sd zero,0(sp) + 800008b8: 00013423 sd zero,8(sp) + 800008bc: 00013823 sd zero,16(sp) + 800008c0: 00f10c23 sb a5,24(sp) + 800008c4: 23d000ef jal ra,80001300 + 800008c8: 08813083 ld ra,136(sp) + 800008cc: 08013403 ld s0,128(sp) + 800008d0: 07813483 ld s1,120(sp) + 800008d4: 07013903 ld s2,112(sp) + 800008d8: 06813983 ld s3,104(sp) + 800008dc: 06013a03 ld s4,96(sp) + 800008e0: 05813a83 ld s5,88(sp) + 800008e4: 05013b03 ld s6,80(sp) + 800008e8: 04813b83 ld s7,72(sp) + 800008ec: 04013c03 ld s8,64(sp) + 800008f0: 03813c83 ld s9,56(sp) + 800008f4: 03013d03 ld s10,48(sp) + 800008f8: 02813d83 ld s11,40(sp) + 800008fc: 09010113 addi sp,sp,144 + 80000900: 00008067 ret + 80000904: 01600613 li a2,22 + 80000908: 00003597 auipc a1,0x3 + 8000090c: 3b858593 addi a1,a1,952 # 80003cc0 + 80000910: 00003517 auipc a0,0x3 + 80000914: 2c050513 addi a0,a0,704 # 80003bd0 + 80000918: 138020ef jal ra,80002a50 + 8000091c: 00100513 li a0,1 + 80000920: 780000ef jal ra,800010a0 + +0000000080000924 : + 80000924: 00096617 auipc a2,0x96 + 80000928: 29c60613 addi a2,a2,668 # 80096bc0 + 8000092c: 00062783 lw a5,0(a2) + 80000930: fe010113 addi sp,sp,-32 + 80000934: 00813c23 sd s0,24(sp) + 80000938: 00913823 sd s1,16(sp) + 8000093c: 01213423 sd s2,8(sp) + 80000940: 01313023 sd s3,0(sp) + 80000944: 0017839b addiw t2,a5,1 + 80000948: 00015717 auipc a4,0x15 + 8000094c: 0e070713 addi a4,a4,224 # 80015a28 + 80000950: 00016697 auipc a3,0x16 + 80000954: 0d868693 addi a3,a3,216 # 80016a28 + 80000958: 00762023 sw t2,0(a2) + 8000095c: f8070793 addi a5,a4,-128 + 80000960: 0007a023 sw zero,0(a5) + 80000964: 00478793 addi a5,a5,4 + 80000968: fee79ce3 bne a5,a4,80000960 + 8000096c: 08078713 addi a4,a5,128 + 80000970: fee696e3 bne a3,a4,8000095c + 80000974: 0ff3f693 andi a3,t2,255 + 80000978: 0016979b slliw a5,a3,0x1 + 8000097c: 00d787bb addw a5,a5,a3 + 80000980: 0036971b slliw a4,a3,0x3 + 80000984: 40d7073b subw a4,a4,a3 + 80000988: 0017979b slliw a5,a5,0x1 + 8000098c: 0ff7f793 andi a5,a5,255 + 80000990: 0ff77713 andi a4,a4,255 + 80000994: 0087171b slliw a4,a4,0x8 + 80000998: 0107979b slliw a5,a5,0x10 + 8000099c: 00e7e7b3 or a5,a5,a4 + 800009a0: 0ff3f713 andi a4,t2,255 + 800009a4: 00e7e7b3 or a5,a5,a4 + 800009a8: 00013417 auipc s0,0x13 + 800009ac: 00040413 mv s0,s0 + 800009b0: 00015f97 auipc t6,0x15 + 800009b4: ff8f8f93 addi t6,t6,-8 # 800159a8 + 800009b8: 00f42023 sw a5,0(s0) # 800139a8 + 800009bc: 00100793 li a5,1 + 800009c0: 00ffa023 sw a5,0(t6) + 800009c4: 00100693 li a3,1 + 800009c8: 00000713 li a4,0 + 800009cc: 00100f13 li t5,1 + 800009d0: 00000593 li a1,0 + 800009d4: 00000e93 li t4,0 + 800009d8: 00000e13 li t3,0 + 800009dc: 01f00813 li a6,31 + 800009e0: 00003317 auipc t1,0x3 + 800009e4: 33030313 addi t1,t1,816 # 80003d10 + 800009e8: 00003897 auipc a7,0x3 + 800009ec: 33888893 addi a7,a7,824 # 80003d20 + 800009f0: 00100493 li s1,1 + 800009f4: 40000293 li t0,1024 + 800009f8: 00400613 li a2,4 + 800009fc: 00ee07bb addw a5,t3,a4 + 80000a00: fff6061b addiw a2,a2,-1 + 80000a04: 00158713 addi a4,a1,1 + 80000a08: 00de86bb addw a3,t4,a3 + 80000a0c: 02f86063 bltu a6,a5,80000a2c + 80000a10: 00579513 slli a0,a5,0x5 + 80000a14: 00d50533 add a0,a0,a3 + 80000a18: 00251513 slli a0,a0,0x2 + 80000a1c: 00af8933 add s2,t6,a0 + 80000a20: 00d86663 bltu a6,a3,80000a2c + 80000a24: 00092983 lw s3,0(s2) + 80000a28: 06098463 beqz s3,80000a90 + 80000a2c: 00377593 andi a1,a4,3 + 80000a30: 00259793 slli a5,a1,0x2 + 80000a34: 00f30733 add a4,t1,a5 + 80000a38: 00f887b3 add a5,a7,a5 + 80000a3c: 02060a63 beqz a2,80000a70 + 80000a40: 00072703 lw a4,0(a4) + 80000a44: 0007a683 lw a3,0(a5) + 80000a48: fff6061b addiw a2,a2,-1 + 80000a4c: 00ee07bb addw a5,t3,a4 + 80000a50: 00de86bb addw a3,t4,a3 + 80000a54: 00158713 addi a4,a1,1 + 80000a58: faf87ce3 bgeu a6,a5,80000a10 + 80000a5c: 00377593 andi a1,a4,3 + 80000a60: 00259793 slli a5,a1,0x2 + 80000a64: 00f30733 add a4,t1,a5 + 80000a68: 00f887b3 add a5,a7,a5 + 80000a6c: fc061ae3 bnez a2,80000a40 + 80000a70: 001f0f1b addiw t5,t5,1 + 80000a74: 065f0a63 beq t5,t0,80000ae8 + 80000a78: 00259793 slli a5,a1,0x2 + 80000a7c: 00f30733 add a4,t1,a5 + 80000a80: 00f887b3 add a5,a7,a5 + 80000a84: 00072703 lw a4,0(a4) + 80000a88: 0007a683 lw a3,0(a5) + 80000a8c: f6dff06f j 800009f8 + 80000a90: 401f5e1b sraiw t3,t5,0x1 + 80000a94: 007e0e3b addw t3,t3,t2 + 80000a98: 0ffe7e93 andi t4,t3,255 + 80000a9c: 001e971b slliw a4,t4,0x1 + 80000aa0: 01d7073b addw a4,a4,t4 + 80000aa4: 003e961b slliw a2,t4,0x3 + 80000aa8: 41d6063b subw a2,a2,t4 + 80000aac: 0017171b slliw a4,a4,0x1 + 80000ab0: 0ff77713 andi a4,a4,255 + 80000ab4: 0ff67613 andi a2,a2,255 + 80000ab8: 0107171b slliw a4,a4,0x10 + 80000abc: 0086161b slliw a2,a2,0x8 + 80000ac0: 0ffe7e13 andi t3,t3,255 + 80000ac4: 00c76733 or a4,a4,a2 + 80000ac8: 01c76733 or a4,a4,t3 + 80000acc: 00a40533 add a0,s0,a0 + 80000ad0: 00992023 sw s1,0(s2) + 80000ad4: 00e52023 sw a4,0(a0) + 80000ad8: 001f0f1b addiw t5,t5,1 + 80000adc: 00068e93 mv t4,a3 + 80000ae0: 00078e13 mv t3,a5 + 80000ae4: f85f1ae3 bne t5,t0,80000a78 + 80000ae8: 01813403 ld s0,24(sp) + 80000aec: 01013483 ld s1,16(sp) + 80000af0: 00813903 ld s2,8(sp) + 80000af4: 00013983 ld s3,0(sp) + 80000af8: 02010113 addi sp,sp,32 + 80000afc: 00008067 ret + +0000000080000b00 : + 80000b00: fb010113 addi sp,sp,-80 + 80000b04: 02913c23 sd s1,56(sp) + 80000b08: 03213823 sd s2,48(sp) + 80000b0c: 03313423 sd s3,40(sp) + 80000b10: 03413023 sd s4,32(sp) + 80000b14: 01513c23 sd s5,24(sp) + 80000b18: 04113423 sd ra,72(sp) + 80000b1c: 04813023 sd s0,64(sp) + 80000b20: 00000993 li s3,0 + 80000b24: 00000913 li s2,0 + 80000b28: 00000493 li s1,0 + 80000b2c: 02100a13 li s4,33 + 80000b30: 00003a97 auipc s5,0x3 + 80000b34: 1d0a8a93 addi s5,s5,464 # 80003d00 + 80000b38: 00810593 addi a1,sp,8 + 80000b3c: 00600513 li a0,6 + 80000b40: 7a4000ef jal ra,800012e4 + 80000b44: 00813503 ld a0,8(sp) + 80000b48: 3e800593 li a1,1000 + 80000b4c: 608000ef jal ra,80001154 <__udivdi3> + 80000b50: 409507b3 sub a5,a0,s1 + 80000b54: 00050413 mv s0,a0 + 80000b58: 02fa6663 bltu s4,a5,80000b84 + 80000b5c: 412407b3 sub a5,s0,s2 + 80000b60: 3e800713 li a4,1000 + 80000b64: fcf77ae3 bgeu a4,a5,80000b38 + 80000b68: 00098613 mv a2,s3 + 80000b6c: 00040593 mv a1,s0 + 80000b70: 000a8513 mv a0,s5 + 80000b74: 6dd010ef jal ra,80002a50 + 80000b78: 00040913 mv s2,s0 + 80000b7c: 00000993 li s3,0 + 80000b80: fb9ff06f j 80000b38 + 80000b84: da1ff0ef jal ra,80000924 + 80000b88: 0019899b addiw s3,s3,1 + 80000b8c: bf1ff0ef jal ra,8000077c + 80000b90: 00040493 mv s1,s0 + 80000b94: fc9ff06f j 80000b5c + +0000000080000b98 : + 80000b98: 00012797 auipc a5,0x12 + 80000b9c: 9d878793 addi a5,a5,-1576 # 80012570 + 80000ba0: 0007b583 ld a1,0(a5) + 80000ba4: 0087b603 ld a2,8(a5) + 80000ba8: fb010113 addi sp,sp,-80 + 80000bac: 00003517 auipc a0,0x3 + 80000bb0: 18450513 addi a0,a0,388 # 80003d30 + 80000bb4: 04113423 sd ra,72(sp) + 80000bb8: 02913c23 sd s1,56(sp) + 80000bbc: 04813023 sd s0,64(sp) + 80000bc0: 03213823 sd s2,48(sp) + 80000bc4: 03313423 sd s3,40(sp) + 80000bc8: 03413023 sd s4,32(sp) + 80000bcc: 685010ef jal ra,80002a50 + 80000bd0: 00003517 auipc a0,0x3 + 80000bd4: 17850513 addi a0,a0,376 # 80003d48 + 80000bd8: 679010ef jal ra,80002a50 + 80000bdc: 00810593 addi a1,sp,8 + 80000be0: 00600513 li a0,6 + 80000be4: 700000ef jal ra,800012e4 + 80000be8: 00813503 ld a0,8(sp) + 80000bec: 3e800593 li a1,1000 + 80000bf0: 564000ef jal ra,80001154 <__udivdi3> + 80000bf4: 00012223 sw zero,4(sp) + 80000bf8: 00412703 lw a4,4(sp) + 80000bfc: 009897b7 lui a5,0x989 + 80000c00: 67f78793 addi a5,a5,1663 # 98967f <_entry_offset+0x98967f> + 80000c04: 0007071b sext.w a4,a4 + 80000c08: 0005049b sext.w s1,a0 + 80000c0c: 00e7ce63 blt a5,a4,80000c28 + 80000c10: 00412703 lw a4,4(sp) + 80000c14: 0017071b addiw a4,a4,1 + 80000c18: 00e12223 sw a4,4(sp) + 80000c1c: 00412703 lw a4,4(sp) + 80000c20: 0007071b sext.w a4,a4 + 80000c24: fee7d6e3 bge a5,a4,80000c10 + 80000c28: 00810593 addi a1,sp,8 + 80000c2c: 00600513 li a0,6 + 80000c30: 6b4000ef jal ra,800012e4 + 80000c34: 00813503 ld a0,8(sp) + 80000c38: 3e800593 li a1,1000 + 80000c3c: 00016417 auipc s0,0x16 + 80000c40: 03c40413 addi s0,s0,60 # 80016c78 + 80000c44: 510000ef jal ra,80001154 <__udivdi3> + 80000c48: 409505bb subw a1,a0,s1 + 80000c4c: 00003517 auipc a0,0x3 + 80000c50: 11c50513 addi a0,a0,284 # 80003d68 + 80000c54: 5fd010ef jal ra,80002a50 + 80000c58: 00810593 addi a1,sp,8 + 80000c5c: 00900513 li a0,9 + 80000c60: 684000ef jal ra,800012e4 + 80000c64: 00c12983 lw s3,12(sp) + 80000c68: 01012903 lw s2,16(sp) + 80000c6c: 00003517 auipc a0,0x3 + 80000c70: 11c50513 addi a0,a0,284 # 80003d88 + 80000c74: 00098593 mv a1,s3 + 80000c78: 00090613 mv a2,s2 + 80000c7c: 5d5010ef jal ra,80002a50 + 80000c80: 00096497 auipc s1,0x96 + 80000c84: f2848493 addi s1,s1,-216 # 80096ba8 + 80000c88: 4b5000ef jal ra,8000193c + 80000c8c: 00a40023 sb a0,0(s0) + 80000c90: 00140413 addi s0,s0,1 + 80000c94: fe941ae3 bne s0,s1,80000c88 + 80000c98: 41f9d71b sraiw a4,s3,0x1f + 80000c9c: 01e7571b srliw a4,a4,0x1e + 80000ca0: 0137073b addw a4,a4,s3 + 80000ca4: 00016797 auipc a5,0x16 + 80000ca8: f0478793 addi a5,a5,-252 # 80016ba8 + 80000cac: 4027571b sraiw a4,a4,0x2 + 80000cb0: 00e79323 sh a4,6(a5) + 80000cb4: 00016717 auipc a4,0x16 + 80000cb8: ee071e23 sh zero,-260(a4) # 80016bb0 + 80000cbc: 01f9d69b srliw a3,s3,0x1f + 80000cc0: 02500713 li a4,37 + 80000cc4: ffff0637 lui a2,0xffff0 + 80000cc8: 00e79923 sh a4,18(a5) + 80000ccc: 013686bb addw a3,a3,s3 + 80000cd0: 0016061b addiw a2,a2,1 + 80000cd4: 00a00713 li a4,10 + 80000cd8: fff00813 li a6,-1 + 80000cdc: 4016d69b sraiw a3,a3,0x1 + 80000ce0: 00c7a023 sw a2,0(a5) + 80000ce4: 00e79a23 sh a4,20(a5) + 80000ce8: fff00613 li a2,-1 + 80000cec: 0d000713 li a4,208 + 80000cf0: f9c9091b addiw s2,s2,-100 + 80000cf4: 00e79b23 sh a4,22(a5) + 80000cf8: 00d79523 sh a3,10(a5) + 80000cfc: 01079723 sh a6,14(a5) + 80000d00: 01079823 sh a6,16(a5) + 80000d04: 00c79223 sh a2,4(a5) + 80000d08: 01279623 sh s2,12(a5) + 80000d0c: 00810593 addi a1,sp,8 + 80000d10: 00c00513 li a0,12 + 80000d14: 00f13823 sd a5,16(sp) + 80000d18: 000807b7 lui a5,0x80 + 80000d1c: 00f12c23 sw a5,24(sp) + 80000d20: 00016717 auipc a4,0x16 + 80000d24: ea071023 sh zero,-352(a4) # 80016bc0 + 80000d28: 00012423 sw zero,8(sp) + 80000d2c: 5d4000ef jal ra,80001300 + 80000d30: 00d00513 li a0,13 + 80000d34: 00810593 addi a1,sp,8 + 80000d38: 00012423 sw zero,8(sp) + 80000d3c: 5c4000ef jal ra,80001300 + 80000d40: 00810593 addi a1,sp,8 + 80000d44: 01200513 li a0,18 + 80000d48: 59c000ef jal ra,800012e4 + 80000d4c: 00c12483 lw s1,12(sp) + 80000d50: 01012583 lw a1,16(sp) + 80000d54: 00003517 auipc a0,0x3 + 80000d58: 04c50513 addi a0,a0,76 # 80003da0 + 80000d5c: 00048613 mv a2,s1 + 80000d60: 4f1010ef jal ra,80002a50 + 80000d64: 00016417 auipc s0,0x16 + 80000d68: c4440413 addi s0,s0,-956 # 800169a8 + 80000d6c: 00048593 mv a1,s1 + 80000d70: 20000513 li a0,512 + 80000d74: 00813823 sd s0,16(sp) + 80000d78: 00010423 sb zero,8(sp) + 80000d7c: 00012c23 sw zero,24(sp) + 80000d80: 3cc000ef jal ra,8000114c <__divdi3> + 80000d84: 00050793 mv a5,a0 + 80000d88: 00810593 addi a1,sp,8 + 80000d8c: 01400513 li a0,20 + 80000d90: 00f12e23 sw a5,28(sp) + 80000d94: 56c000ef jal ra,80001300 + 80000d98: 00144603 lbu a2,1(s0) + 80000d9c: 00044583 lbu a1,0(s0) + 80000da0: 00003517 auipc a0,0x3 + 80000da4: 03850513 addi a0,a0,56 # 80003dd8 + 80000da8: 00016417 auipc s0,0x16 + 80000dac: c0240413 addi s0,s0,-1022 # 800169aa + 80000db0: 4a1010ef jal ra,80002a50 + 80000db4: 00003917 auipc s2,0x3 + 80000db8: 02490913 addi s2,s2,36 # 80003dd8 + 80000dbc: 00400493 li s1,4 + 80000dc0: 00016997 auipc s3,0x16 + 80000dc4: de898993 addi s3,s3,-536 # 80016ba8 + 80000dc8: 408484bb subw s1,s1,s0 + 80000dcc: 00003a17 auipc s4,0x3 + 80000dd0: d6ca0a13 addi s4,s4,-660 # 80003b38 + 80000dd4: 00090513 mv a0,s2 + 80000dd8: 03340463 beq s0,s3,80000e00 + 80000ddc: 00144603 lbu a2,1(s0) + 80000de0: 00044583 lbu a1,0(s0) + 80000de4: 46d010ef jal ra,80002a50 + 80000de8: 008487bb addw a5,s1,s0 + 80000dec: 01f7f793 andi a5,a5,31 + 80000df0: 02078063 beqz a5,80000e10 + 80000df4: 00240413 addi s0,s0,2 + 80000df8: 00090513 mv a0,s2 + 80000dfc: ff3410e3 bne s0,s3,80000ddc + 80000e00: 00003517 auipc a0,0x3 + 80000e04: fe850513 addi a0,a0,-24 # 80003de8 + 80000e08: 449010ef jal ra,80002a50 + 80000e0c: 0000006f j 80000e0c + 80000e10: 000a0513 mv a0,s4 + 80000e14: 43d010ef jal ra,80002a50 + 80000e18: 00240413 addi s0,s0,2 + 80000e1c: fddff06f j 80000df8 + +0000000080000e20 : + 80000e20: fe010113 addi sp,sp,-32 + 80000e24: 00913423 sd s1,8(sp) + 80000e28: 00113c23 sd ra,24(sp) + 80000e2c: 00813823 sd s0,16(sp) + 80000e30: 00a00493 li s1,10 + 80000e34: 00003417 auipc s0,0x3 + 80000e38: fc440413 addi s0,s0,-60 # 80003df8 + 80000e3c: 04800513 li a0,72 + 80000e40: 00140413 addi s0,s0,1 + 80000e44: 250000ef jal ra,80001094 + 80000e48: 00044503 lbu a0,0(s0) + 80000e4c: fe051ae3 bnez a0,80000e40 + 80000e50: fff4849b addiw s1,s1,-1 + 80000e54: fe0490e3 bnez s1,80000e34 + 80000e58: 01813083 ld ra,24(sp) + 80000e5c: 01013403 ld s0,16(sp) + 80000e60: 00813483 ld s1,8(sp) + 80000e64: 02010113 addi sp,sp,32 + 80000e68: 00008067 ret + +0000000080000e6c : + 80000e6c: fb010113 addi sp,sp,-80 + 80000e70: 00003517 auipc a0,0x3 + 80000e74: fb850513 addi a0,a0,-72 # 80003e28 + 80000e78: 04113423 sd ra,72(sp) + 80000e7c: 04813023 sd s0,64(sp) + 80000e80: 02913c23 sd s1,56(sp) + 80000e84: 03213823 sd s2,48(sp) + 80000e88: 03313423 sd s3,40(sp) + 80000e8c: 03413023 sd s4,32(sp) + 80000e90: 01513c23 sd s5,24(sp) + 80000e94: 3bd010ef jal ra,80002a50 + 80000e98: 00810593 addi a1,sp,8 + 80000e9c: 00100513 li a0,1 + 80000ea0: 444000ef jal ra,800012e4 + 80000ea4: 00814783 lbu a5,8(sp) + 80000ea8: 00096497 auipc s1,0x96 + 80000eac: d1d48493 addi s1,s1,-739 # 80096bc5 + 80000eb0: 00810593 addi a1,sp,8 + 80000eb4: 00700513 li a0,7 + 80000eb8: 00f48023 sb a5,0(s1) + 80000ebc: 428000ef jal ra,800012e4 + 80000ec0: 00814783 lbu a5,8(sp) + 80000ec4: 00096417 auipc s0,0x96 + 80000ec8: d0040413 addi s0,s0,-768 # 80096bc4 + 80000ecc: 00003a97 auipc s5,0x3 + 80000ed0: 26ca8a93 addi s5,s5,620 # 80004138 + 80000ed4: 00f40023 sb a5,0(s0) + 80000ed8: 00003a17 auipc s4,0x3 + 80000edc: f40a0a13 addi s4,s4,-192 # 80003e18 + 80000ee0: 00003997 auipc s3,0x3 + 80000ee4: f4098993 addi s3,s3,-192 # 80003e20 + 80000ee8: 00003917 auipc s2,0x3 + 80000eec: f8890913 addi s2,s2,-120 # 80003e70 + 80000ef0: 0004c703 lbu a4,0(s1) + 80000ef4: 02070663 beqz a4,80000f20 + 80000ef8: 00003417 auipc s0,0x3 + 80000efc: f6040413 addi s0,s0,-160 # 80003e58 + 80000f00: 00810593 addi a1,sp,8 + 80000f04: 00300513 li a0,3 + 80000f08: 3dc000ef jal ra,800012e4 + 80000f0c: 00814603 lbu a2,8(sp) + 80000f10: 00040513 mv a0,s0 + 80000f14: 00060593 mv a1,a2 + 80000f18: 339010ef jal ra,80002a50 + 80000f1c: fe5ff06f j 80000f00 + 80000f20: 00079e63 bnez a5,80000f3c + 80000f24: 0000006f j 80000f24 + 80000f28: 0007b583 ld a1,0(a5) # 80000 <_entry_offset+0x80000> + 80000f2c: 000a0693 mv a3,s4 + 80000f30: 00071463 bnez a4,80000f38 + 80000f34: 00098693 mv a3,s3 + 80000f38: 319010ef jal ra,80002a50 + 80000f3c: 00800513 li a0,8 + 80000f40: 00810593 addi a1,sp,8 + 80000f44: 3a0000ef jal ra,800012e4 + 80000f48: 00c12603 lw a2,12(sp) + 80000f4c: 00814703 lbu a4,8(sp) + 80000f50: 00090513 mv a0,s2 + 80000f54: 00361793 slli a5,a2,0x3 + 80000f58: 00fa87b3 add a5,s5,a5 + 80000f5c: fc0616e3 bnez a2,80000f28 + 80000f60: 00044783 lbu a5,0(s0) + 80000f64: f8dff06f j 80000ef0 + +0000000080000f68 : + 80000f68: 00052783 lw a5,0(a0) + 80000f6c: ff010113 addi sp,sp,-16 + 80000f70: 00813023 sd s0,0(sp) + 80000f74: 00113423 sd ra,8(sp) + 80000f78: 00500713 li a4,5 + 80000f7c: 00058413 mv s0,a1 + 80000f80: 02e78463 beq a5,a4,80000fa8 + 80000f84: 00600713 li a4,6 + 80000f88: 04e78c63 beq a5,a4,80000fe0 + 80000f8c: 00100713 li a4,1 + 80000f90: 02e78a63 beq a5,a4,80000fc4 + 80000f94: 00813083 ld ra,8(sp) + 80000f98: 00040513 mv a0,s0 + 80000f9c: 00013403 ld s0,0(sp) + 80000fa0: 01010113 addi sp,sp,16 + 80000fa4: 00008067 ret + 80000fa8: 07400513 li a0,116 + 80000fac: 0e8000ef jal ra,80001094 + 80000fb0: 00813083 ld ra,8(sp) + 80000fb4: 00040513 mv a0,s0 + 80000fb8: 00013403 ld s0,0(sp) + 80000fbc: 01010113 addi sp,sp,16 + 80000fc0: 00008067 ret + 80000fc4: 07900513 li a0,121 + 80000fc8: 0cc000ef jal ra,80001094 + 80000fcc: 00813083 ld ra,8(sp) + 80000fd0: 00040513 mv a0,s0 + 80000fd4: 00013403 ld s0,0(sp) + 80000fd8: 01010113 addi sp,sp,16 + 80000fdc: 00008067 ret + 80000fe0: 06400513 li a0,100 + 80000fe4: 0b0000ef jal ra,80001094 + 80000fe8: 00813083 ld ra,8(sp) + 80000fec: 00040513 mv a0,s0 + 80000ff0: 00013403 ld s0,0(sp) + 80000ff4: 01010113 addi sp,sp,16 + 80000ff8: 00008067 ret + +0000000080000ffc : + 80000ffc: fe010113 addi sp,sp,-32 + 80001000: 00003517 auipc a0,0x3 + 80001004: df850513 addi a0,a0,-520 # 80003df8 + 80001008: 00113c23 sd ra,24(sp) + 8000100c: 00813823 sd s0,16(sp) + 80001010: 241010ef jal ra,80002a50 + 80001014: 00003517 auipc a0,0x3 + 80001018: 3bc50513 addi a0,a0,956 # 800043d0 + 8000101c: 235010ef jal ra,80002a50 + 80001020: 00810593 addi a1,sp,8 + 80001024: 00700513 li a0,7 + 80001028: 2bc000ef jal ra,800012e4 + 8000102c: 00100513 li a0,1 + 80001030: 00989437 lui s0,0x989 + 80001034: 754000ef jal ra,80001788 + 80001038: 67f40413 addi s0,s0,1663 # 98967f <_entry_offset+0x98967f> + 8000103c: 00012423 sw zero,8(sp) + 80001040: 00812783 lw a5,8(sp) + 80001044: 0007879b sext.w a5,a5 + 80001048: 00f44e63 blt s0,a5,80001064 + 8000104c: 00812783 lw a5,8(sp) + 80001050: 0017879b addiw a5,a5,1 + 80001054: 00f12423 sw a5,8(sp) + 80001058: 00812783 lw a5,8(sp) + 8000105c: 0007879b sext.w a5,a5 + 80001060: fef456e3 bge s0,a5,8000104c + 80001064: 718000ef jal ra,8000177c + 80001068: fd5ff06f j 8000103c + +000000008000106c : + 8000106c: ff010113 addi sp,sp,-16 + 80001070: 00813023 sd s0,0(sp) + 80001074: 00113423 sd ra,8(sp) + 80001078: 00003417 auipc s0,0x3 + 8000107c: 38040413 addi s0,s0,896 # 800043f8 + 80001080: 08d000ef jal ra,8000190c + 80001084: 00050593 mv a1,a0 + 80001088: 00040513 mv a0,s0 + 8000108c: 1c5010ef jal ra,80002a50 + 80001090: ff1ff06f j 80001080 + +0000000080001094 : + 80001094: 00050513 mv a0,a0 + 80001098: 0000007b 0x7b + 8000109c: 00008067 ret + +00000000800010a0 : + 800010a0: 00050513 mv a0,a0 + 800010a4: 0000006b 0x6b + 800010a8: 0000006f j 800010a8 + +00000000800010ac <_assert>: + 800010ac: 00051a63 bnez a0,800010c0 <_assert+0x14> + 800010b0: 00100793 li a5,1 + 800010b4: 00078513 mv a0,a5 + 800010b8: 0000006b 0x6b + 800010bc: 0000006f j 800010bc <_assert+0x10> + 800010c0: 00008067 ret + +00000000800010c4 <_trm_init>: + 800010c4: ff010113 addi sp,sp,-16 + 800010c8: 00113423 sd ra,8(sp) + 800010cc: 0d1000ef jal ra,8000199c + 800010d0: 00003517 auipc a0,0x3 + 800010d4: 66850513 addi a0,a0,1640 # 80004738 + 800010d8: f39fe0ef jal ra,80000010
+ 800010dc: 00050513 mv a0,a0 + 800010e0: 0000006b 0x6b + 800010e4: 0000006f j 800010e4 <_trm_init+0x20> + +00000000800010e8 <__muldi3>: + 800010e8: 00050613 mv a2,a0 + 800010ec: 00000513 li a0,0 + 800010f0: 0015f693 andi a3,a1,1 + 800010f4: 00068463 beqz a3,800010fc <__muldi3+0x14> + 800010f8: 00c50533 add a0,a0,a2 + 800010fc: 0015d593 srli a1,a1,0x1 + 80001100: 00161613 slli a2,a2,0x1 + 80001104: fe0596e3 bnez a1,800010f0 <__muldi3+0x8> + 80001108: 00008067 ret + +000000008000110c <__udivsi3>: + 8000110c: 02051513 slli a0,a0,0x20 + 80001110: 02059593 slli a1,a1,0x20 + 80001114: 00008293 mv t0,ra + 80001118: 03c000ef jal ra,80001154 <__udivdi3> + 8000111c: 0005051b sext.w a0,a0 + 80001120: 00028067 jr t0 + +0000000080001124 <__umodsi3>: + 80001124: 02051513 slli a0,a0,0x20 + 80001128: 02059593 slli a1,a1,0x20 + 8000112c: 02055513 srli a0,a0,0x20 + 80001130: 0205d593 srli a1,a1,0x20 + 80001134: 00008293 mv t0,ra + 80001138: 01c000ef jal ra,80001154 <__udivdi3> + 8000113c: 0005851b sext.w a0,a1 + 80001140: 00028067 jr t0 + +0000000080001144 <__divsi3>: + 80001144: fff00293 li t0,-1 + 80001148: 0a558c63 beq a1,t0,80001200 <__moddi3+0x30> + +000000008000114c <__divdi3>: + 8000114c: 06054063 bltz a0,800011ac <__umoddi3+0x10> + 80001150: 0605c663 bltz a1,800011bc <__umoddi3+0x20> + +0000000080001154 <__udivdi3>: + 80001154: 00058613 mv a2,a1 + 80001158: 00050593 mv a1,a0 + 8000115c: fff00513 li a0,-1 + 80001160: 02060c63 beqz a2,80001198 <__udivdi3+0x44> + 80001164: 00100693 li a3,1 + 80001168: 00b67a63 bgeu a2,a1,8000117c <__udivdi3+0x28> + 8000116c: 00c05863 blez a2,8000117c <__udivdi3+0x28> + 80001170: 00161613 slli a2,a2,0x1 + 80001174: 00169693 slli a3,a3,0x1 + 80001178: feb66ae3 bltu a2,a1,8000116c <__udivdi3+0x18> + 8000117c: 00000513 li a0,0 + 80001180: 00c5e663 bltu a1,a2,8000118c <__udivdi3+0x38> + 80001184: 40c585b3 sub a1,a1,a2 + 80001188: 00d56533 or a0,a0,a3 + 8000118c: 0016d693 srli a3,a3,0x1 + 80001190: 00165613 srli a2,a2,0x1 + 80001194: fe0696e3 bnez a3,80001180 <__udivdi3+0x2c> + 80001198: 00008067 ret + +000000008000119c <__umoddi3>: + 8000119c: 00008293 mv t0,ra + 800011a0: fb5ff0ef jal ra,80001154 <__udivdi3> + 800011a4: 00058513 mv a0,a1 + 800011a8: 00028067 jr t0 + 800011ac: 40a00533 neg a0,a0 + 800011b0: 00b04863 bgtz a1,800011c0 <__umoddi3+0x24> + 800011b4: 40b005b3 neg a1,a1 + 800011b8: f9dff06f j 80001154 <__udivdi3> + 800011bc: 40b005b3 neg a1,a1 + 800011c0: 00008293 mv t0,ra + 800011c4: f91ff0ef jal ra,80001154 <__udivdi3> + 800011c8: 40a00533 neg a0,a0 + 800011cc: 00028067 jr t0 + +00000000800011d0 <__moddi3>: + 800011d0: 00008293 mv t0,ra + 800011d4: 0005ca63 bltz a1,800011e8 <__moddi3+0x18> + 800011d8: 00054c63 bltz a0,800011f0 <__moddi3+0x20> + 800011dc: f79ff0ef jal ra,80001154 <__udivdi3> + 800011e0: 00058513 mv a0,a1 + 800011e4: 00028067 jr t0 + 800011e8: 40b005b3 neg a1,a1 + 800011ec: fe0558e3 bgez a0,800011dc <__moddi3+0xc> + 800011f0: 40a00533 neg a0,a0 + 800011f4: f61ff0ef jal ra,80001154 <__udivdi3> + 800011f8: 40b00533 neg a0,a1 + 800011fc: 00028067 jr t0 + 80001200: 01f29293 slli t0,t0,0x1f + 80001204: f45514e3 bne a0,t0,8000114c <__divdi3> + 80001208: 00008067 ret + +000000008000120c <__am_timer_config>: + 8000120c: 00100793 li a5,1 + 80001210: 00f50023 sb a5,0(a0) + 80001214: 00f500a3 sb a5,1(a0) + 80001218: 00008067 ret + +000000008000121c <__am_input_config>: + 8000121c: 00100793 li a5,1 + 80001220: 00f50023 sb a5,0(a0) + 80001224: 00008067 ret + +0000000080001228 : + 80001228: ff010113 addi sp,sp,-16 + 8000122c: 00813023 sd s0,0(sp) + 80001230: 00113423 sd ra,8(sp) + 80001234: 00003417 auipc s0,0x3 + 80001238: 1cc40413 addi s0,s0,460 # 80004400 + 8000123c: 04100513 li a0,65 + 80001240: 00140413 addi s0,s0,1 + 80001244: e51ff0ef jal ra,80001094 + 80001248: 00044503 lbu a0,0(s0) + 8000124c: fe051ae3 bnez a0,80001240 + 80001250: 00003417 auipc s0,0x3 + 80001254: 1c040413 addi s0,s0,448 # 80004410 + 80001258: 06100513 li a0,97 + 8000125c: 00140413 addi s0,s0,1 + 80001260: e35ff0ef jal ra,80001094 + 80001264: 00044503 lbu a0,0(s0) + 80001268: fe051ae3 bnez a0,8000125c + 8000126c: 00003417 auipc s0,0x3 + 80001270: 1c440413 addi s0,s0,452 # 80004430 + 80001274: 02000513 li a0,32 + 80001278: 00140413 addi s0,s0,1 + 8000127c: e19ff0ef jal ra,80001094 + 80001280: 00044503 lbu a0,0(s0) + 80001284: fe051ae3 bnez a0,80001278 + 80001288: 00100513 li a0,1 + 8000128c: e15ff0ef jal ra,800010a0 + +0000000080001290 : + 80001290: ff010113 addi sp,sp,-16 + 80001294: 00113423 sd ra,8(sp) + 80001298: 00011797 auipc a5,0x11 + 8000129c: 2e878793 addi a5,a5,744 # 80012580 + 800012a0: 00011697 auipc a3,0x11 + 800012a4: 6e068693 addi a3,a3,1760 # 80012980 + 800012a8: 00000617 auipc a2,0x0 + 800012ac: f8060613 addi a2,a2,-128 # 80001228 + 800012b0: 00c0006f j 800012bc + 800012b4: 00878793 addi a5,a5,8 + 800012b8: 00d78c63 beq a5,a3,800012d0 + 800012bc: 0007b703 ld a4,0(a5) + 800012c0: fe071ae3 bnez a4,800012b4 + 800012c4: 00c7b023 sd a2,0(a5) + 800012c8: 00878793 addi a5,a5,8 + 800012cc: fed798e3 bne a5,a3,800012bc + 800012d0: 034000ef jal ra,80001304 <__am_timer_init> + 800012d4: 00813083 ld ra,8(sp) + 800012d8: 00100513 li a0,1 + 800012dc: 01010113 addi sp,sp,16 + 800012e0: 00008067 ret + +00000000800012e4 : + 800012e4: 00351793 slli a5,a0,0x3 + 800012e8: 00011517 auipc a0,0x11 + 800012ec: 29850513 addi a0,a0,664 # 80012580 + 800012f0: 00f50533 add a0,a0,a5 + 800012f4: 00053303 ld t1,0(a0) + 800012f8: 00058513 mv a0,a1 + 800012fc: 00030067 jr t1 + +0000000080001300 : + 80001300: fe5ff06f j 800012e4 + +0000000080001304 <__am_timer_init>: + 80001304: 00008067 ret + +0000000080001308 <__am_timer_uptime>: + 80001308: fd010113 addi sp,sp,-48 + 8000130c: 00913c23 sd s1,24(sp) + 80001310: 02113423 sd ra,40(sp) + 80001314: 02813023 sd s0,32(sp) + 80001318: 01213823 sd s2,16(sp) + 8000131c: 01313423 sd s3,8(sp) + 80001320: 00050493 mv s1,a0 + 80001324: b0002973 csrr s2,mcycle + 80001328: 000f49b7 lui s3,0xf4 + 8000132c: 24098593 addi a1,s3,576 # f4240 <_entry_offset+0xf4240> + 80001330: 00090513 mv a0,s2 + 80001334: e21ff0ef jal ra,80001154 <__udivdi3> + 80001338: 00551413 slli s0,a0,0x5 + 8000133c: 40a407b3 sub a5,s0,a0 + 80001340: 00679413 slli s0,a5,0x6 + 80001344: 40f40433 sub s0,s0,a5 + 80001348: 00341413 slli s0,s0,0x3 + 8000134c: 00a40433 add s0,s0,a0 + 80001350: 24098593 addi a1,s3,576 + 80001354: 00090513 mv a0,s2 + 80001358: e45ff0ef jal ra,8000119c <__umoddi3> + 8000135c: 00641413 slli s0,s0,0x6 + 80001360: 00a40433 add s0,s0,a0 + 80001364: 0084b023 sd s0,0(s1) + 80001368: 02813083 ld ra,40(sp) + 8000136c: 02013403 ld s0,32(sp) + 80001370: 01813483 ld s1,24(sp) + 80001374: 01013903 ld s2,16(sp) + 80001378: 00813983 ld s3,8(sp) + 8000137c: 03010113 addi sp,sp,48 + 80001380: 00008067 ret + +0000000080001384 : + 80001384: fc010113 addi sp,sp,-64 + 80001388: 01313c23 sd s3,24(sp) + 8000138c: 00058993 mv s3,a1 + 80001390: 00050793 mv a5,a0 + 80001394: 03800613 li a2,56 + 80001398: 00000593 li a1,0 + 8000139c: 00098513 mv a0,s3 + 800013a0: 02813823 sd s0,48(sp) + 800013a4: 03213023 sd s2,32(sp) + 800013a8: 0007b403 ld s0,0(a5) + 800013ac: 01413823 sd s4,16(sp) + 800013b0: 02113c23 sd ra,56(sp) + 800013b4: 02913423 sd s1,40(sp) + 800013b8: 01513423 sd s5,8(sp) + 800013bc: 7c0010ef jal ra,80002b7c + 800013c0: 7b200793 li a5,1970 + 800013c4: 00f9aa23 sw a5,20(s3) + 800013c8: 7b200913 li s2,1970 + 800013cc: 00003a17 auipc s4,0x3 + 800013d0: 374a0a13 addi s4,s4,884 # 80004740 + 800013d4: 0100006f j 800013e4 + 800013d8: 40e40433 sub s0,s0,a4 + 800013dc: 00d9aa23 sw a3,20(s3) + 800013e0: 00068913 mv s2,a3 + 800013e4: 0009049b sext.w s1,s2 + 800013e8: 06400593 li a1,100 + 800013ec: 00048513 mv a0,s1 + 800013f0: de1ff0ef jal ra,800011d0 <__moddi3> + 800013f4: 00050793 mv a5,a0 + 800013f8: 0007879b sext.w a5,a5 + 800013fc: 00048513 mv a0,s1 + 80001400: 00397493 andi s1,s2,3 + 80001404: 19000593 li a1,400 + 80001408: 0014b493 seqz s1,s1 + 8000140c: 00079863 bnez a5,8000141c + 80001410: dc1ff0ef jal ra,800011d0 <__moddi3> + 80001414: 0005049b sext.w s1,a0 + 80001418: 0014b493 seqz s1,s1 + 8000141c: 00249793 slli a5,s1,0x2 + 80001420: 00fa07b3 add a5,s4,a5 + 80001424: 0007e703 lwu a4,0(a5) + 80001428: 0019069b addiw a3,s2,1 + 8000142c: fae456e3 bge s0,a4,800013d8 + 80001430: 000155b7 lui a1,0x15 + 80001434: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80001438: 00040513 mv a0,s0 + 8000143c: d11ff0ef jal ra,8000114c <__divdi3> + 80001440: 00149793 slli a5,s1,0x1 + 80001444: 009784b3 add s1,a5,s1 + 80001448: 00449793 slli a5,s1,0x4 + 8000144c: 00003497 auipc s1,0x3 + 80001450: 02448493 addi s1,s1,36 # 80004470 + 80001454: 00f484b3 add s1,s1,a5 + 80001458: 0004e783 lwu a5,0(s1) + 8000145c: 0005051b sext.w a0,a0 + 80001460: 00a9ae23 sw a0,28(s3) + 80001464: 14f44463 blt s0,a5,800015ac + 80001468: 00100713 li a4,1 + 8000146c: 40f40433 sub s0,s0,a5 + 80001470: 0044e783 lwu a5,4(s1) + 80001474: 00070a1b sext.w s4,a4 + 80001478: 00448493 addi s1,s1,4 + 8000147c: 00170713 addi a4,a4,1 + 80001480: fef456e3 bge s0,a5,8000146c + 80001484: 000155b7 lui a1,0x15 + 80001488: 0149a823 sw s4,16(s3) + 8000148c: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80001490: 00040513 mv a0,s0 + 80001494: cb9ff0ef jal ra,8000114c <__divdi3> + 80001498: 0005051b sext.w a0,a0 + 8000149c: 0015079b addiw a5,a0,1 + 800014a0: 000155b7 lui a1,0x15 + 800014a4: 00f9a623 sw a5,12(s3) + 800014a8: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 800014ac: 00040513 mv a0,s0 + 800014b0: 00001ab7 lui s5,0x1 + 800014b4: 0007841b sext.w s0,a5 + 800014b8: d19ff0ef jal ra,800011d0 <__moddi3> + 800014bc: e10a8593 addi a1,s5,-496 # e10 <_entry_offset+0xe10> + 800014c0: 00050493 mv s1,a0 + 800014c4: c89ff0ef jal ra,8000114c <__divdi3> + 800014c8: e10a8593 addi a1,s5,-496 + 800014cc: 00a9a423 sw a0,8(s3) + 800014d0: 00048513 mv a0,s1 + 800014d4: cfdff0ef jal ra,800011d0 <__moddi3> + 800014d8: 03c00593 li a1,60 + 800014dc: 00050493 mv s1,a0 + 800014e0: c6dff0ef jal ra,8000114c <__divdi3> + 800014e4: 00a9a223 sw a0,4(s3) + 800014e8: 03c00593 li a1,60 + 800014ec: 00048513 mv a0,s1 + 800014f0: ce1ff0ef jal ra,800011d0 <__moddi3> + 800014f4: 001a0a1b addiw s4,s4,1 + 800014f8: 0ffa7793 andi a5,s4,255 + 800014fc: 0037b793 sltiu a5,a5,3 + 80001500: 40f9093b subw s2,s2,a5 + 80001504: 03091913 slli s2,s2,0x30 + 80001508: 03095913 srli s2,s2,0x30 + 8000150c: 00a9a023 sw a0,0(s3) + 80001510: 06400593 li a1,100 + 80001514: 00090513 mv a0,s2 + 80001518: c3dff0ef jal ra,80001154 <__udivdi3> + 8000151c: 0029549b srliw s1,s2,0x2 + 80001520: 0105179b slliw a5,a0,0x10 + 80001524: 0107d79b srliw a5,a5,0x10 + 80001528: 012484bb addw s1,s1,s2 + 8000152c: 19000593 li a1,400 + 80001530: 00090513 mv a0,s2 + 80001534: 0ffa7a13 andi s4,s4,255 + 80001538: 40f484bb subw s1,s1,a5 + 8000153c: fffa0a1b addiw s4,s4,-1 + 80001540: c15ff0ef jal ra,80001154 <__udivdi3> + 80001544: 00003797 auipc a5,0x3 + 80001548: f8c78793 addi a5,a5,-116 # 800044d0 + 8000154c: 002a1a13 slli s4,s4,0x2 + 80001550: 01478a33 add s4,a5,s4 + 80001554: 000a2783 lw a5,0(s4) + 80001558: 0105151b slliw a0,a0,0x10 + 8000155c: 0105551b srliw a0,a0,0x10 + 80001560: 00a484bb addw s1,s1,a0 + 80001564: 00f484bb addw s1,s1,a5 + 80001568: 0ff47513 andi a0,s0,255 + 8000156c: 00a4853b addw a0,s1,a0 + 80001570: 00700593 li a1,7 + 80001574: c5dff0ef jal ra,800011d0 <__moddi3> + 80001578: 03813083 ld ra,56(sp) + 8000157c: 03013403 ld s0,48(sp) + 80001580: 0ff57513 andi a0,a0,255 + 80001584: 00a9ac23 sw a0,24(s3) + 80001588: 0209a023 sw zero,32(s3) + 8000158c: 02813483 ld s1,40(sp) + 80001590: 02013903 ld s2,32(sp) + 80001594: 01013a03 ld s4,16(sp) + 80001598: 00813a83 ld s5,8(sp) + 8000159c: 00098513 mv a0,s3 + 800015a0: 01813983 ld s3,24(sp) + 800015a4: 04010113 addi sp,sp,64 + 800015a8: 00008067 ret + 800015ac: 00000a13 li s4,0 + 800015b0: eedff06f j 8000149c + +00000000800015b4 <__am_timer_rtc>: + 800015b4: f9010113 addi sp,sp,-112 + 800015b8: 06813023 sd s0,96(sp) + 800015bc: 06113423 sd ra,104(sp) + 800015c0: 04913c23 sd s1,88(sp) + 800015c4: 05213823 sd s2,80(sp) + 800015c8: 00050413 mv s0,a0 + 800015cc: b00024f3 csrr s1,mcycle + 800015d0: 000f4937 lui s2,0xf4 + 800015d4: 24090593 addi a1,s2,576 # f4240 <_entry_offset+0xf4240> + 800015d8: 00048513 mv a0,s1 + 800015dc: b79ff0ef jal ra,80001154 <__udivdi3> + 800015e0: 00050793 mv a5,a0 + 800015e4: 24090593 addi a1,s2,576 + 800015e8: 00048513 mv a0,s1 + 800015ec: 00f13423 sd a5,8(sp) + 800015f0: badff0ef jal ra,8000119c <__umoddi3> + 800015f4: 00050793 mv a5,a0 + 800015f8: 01810593 addi a1,sp,24 + 800015fc: 00810513 addi a0,sp,8 + 80001600: 00f13823 sd a5,16(sp) + 80001604: d81ff0ef jal ra,80001384 + 80001608: 01812703 lw a4,24(sp) + 8000160c: 02812783 lw a5,40(sp) + 80001610: 06813083 ld ra,104(sp) + 80001614: 00e42a23 sw a4,20(s0) + 80001618: 01c12703 lw a4,28(sp) + 8000161c: 0017879b addiw a5,a5,1 + 80001620: 00f42223 sw a5,4(s0) + 80001624: 00e42823 sw a4,16(s0) + 80001628: 02012703 lw a4,32(sp) + 8000162c: 02c12783 lw a5,44(sp) + 80001630: 05813483 ld s1,88(sp) + 80001634: 00e42623 sw a4,12(s0) + 80001638: 02412703 lw a4,36(sp) + 8000163c: 00f42023 sw a5,0(s0) + 80001640: 05013903 ld s2,80(sp) + 80001644: 00e42423 sw a4,8(s0) + 80001648: 06013403 ld s0,96(sp) + 8000164c: 07010113 addi sp,sp,112 + 80001650: 00008067 ret + +0000000080001654 <__am_input_keybrd>: + 80001654: 00050023 sb zero,0(a0) + 80001658: 00052223 sw zero,4(a0) + 8000165c: 00008067 ret + +0000000080001660 <__am_irq_handle>: + 80001660: 00095717 auipc a4,0x95 + 80001664: 56873703 ld a4,1384(a4) # 80096bc8 + 80001668: 00050593 mv a1,a0 + 8000166c: 0a070a63 beqz a4,80001720 <__am_irq_handle+0xc0> + 80001670: 10053683 ld a3,256(a0) + 80001674: fb010113 addi sp,sp,-80 + 80001678: 04113423 sd ra,72(sp) + 8000167c: 02013023 sd zero,32(sp) + 80001680: 02013423 sd zero,40(sp) + 80001684: 02013823 sd zero,48(sp) + 80001688: 02013c23 sd zero,56(sp) + 8000168c: 00b00793 li a5,11 + 80001690: 06f68c63 beq a3,a5,80001708 <__am_irq_handle+0xa8> + 80001694: fff00793 li a5,-1 + 80001698: 03f79793 slli a5,a5,0x3f + 8000169c: 00778793 addi a5,a5,7 + 800016a0: 04f69e63 bne a3,a5,800016fc <__am_irq_handle+0x9c> + 800016a4: 02004637 lui a2,0x2004 + 800016a8: 00063783 ld a5,0(a2) # 2004000 <_entry_offset+0x2004000> + 800016ac: 000f46b7 lui a3,0xf4 + 800016b0: 24068693 addi a3,a3,576 # f4240 <_entry_offset+0xf4240> + 800016b4: 00d787b3 add a5,a5,a3 + 800016b8: 00f63023 sd a5,0(a2) + 800016bc: 00500793 li a5,5 + 800016c0: 02f12023 sw a5,32(sp) + 800016c4: 02013783 ld a5,32(sp) + 800016c8: 00010513 mv a0,sp + 800016cc: 00f13023 sd a5,0(sp) + 800016d0: 02813783 ld a5,40(sp) + 800016d4: 00f13423 sd a5,8(sp) + 800016d8: 03013783 ld a5,48(sp) + 800016dc: 00f13823 sd a5,16(sp) + 800016e0: 03813783 ld a5,56(sp) + 800016e4: 00f13c23 sd a5,24(sp) + 800016e8: 000700e7 jalr a4 + 800016ec: 04050863 beqz a0,8000173c <__am_irq_handle+0xdc> + 800016f0: 04813083 ld ra,72(sp) + 800016f4: 05010113 addi sp,sp,80 + 800016f8: 00008067 ret + 800016fc: 00400793 li a5,4 + 80001700: 02f12023 sw a5,32(sp) + 80001704: fc1ff06f j 800016c4 <__am_irq_handle+0x64> + 80001708: 08853683 ld a3,136(a0) + 8000170c: fff00793 li a5,-1 + 80001710: 00f68a63 beq a3,a5,80001724 <__am_irq_handle+0xc4> + 80001714: 00200793 li a5,2 + 80001718: 02f12023 sw a5,32(sp) + 8000171c: fa9ff06f j 800016c4 <__am_irq_handle+0x64> + 80001720: 00008067 ret + 80001724: 11053783 ld a5,272(a0) + 80001728: 00100693 li a3,1 + 8000172c: 02d12023 sw a3,32(sp) + 80001730: 00478793 addi a5,a5,4 + 80001734: 10f53823 sd a5,272(a0) + 80001738: f8dff06f j 800016c4 <__am_irq_handle+0x64> + 8000173c: 02700613 li a2,39 + 80001740: 00003597 auipc a1,0x3 + 80001744: dc058593 addi a1,a1,-576 # 80004500 + 80001748: 00002517 auipc a0,0x2 + 8000174c: 48850513 addi a0,a0,1160 # 80003bd0 + 80001750: 300010ef jal ra,80002a50 + 80001754: 00100513 li a0,1 + 80001758: 949ff0ef jal ra,800010a0 + +000000008000175c : + 8000175c: 00050793 mv a5,a0 + 80001760: 00000717 auipc a4,0x0 + 80001764: 04c70713 addi a4,a4,76 # 800017ac <__am_asm_trap> + 80001768: 30571073 csrw mtvec,a4 + 8000176c: 00100513 li a0,1 + 80001770: 00095717 auipc a4,0x95 + 80001774: 44f73c23 sd a5,1112(a4) # 80096bc8 + 80001778: 00008067 ret + +000000008000177c : + 8000177c: fff00893 li a7,-1 + 80001780: 00000073 ecall + 80001784: 00008067 ret + +0000000080001788 : + 80001788: 00050a63 beqz a0,8000179c + 8000178c: 300467f3 csrrsi a5,mstatus,8 + 80001790: 08000793 li a5,128 + 80001794: 3047a7f3 csrrs a5,mie,a5 + 80001798: 00008067 ret + 8000179c: 300477f3 csrrci a5,mstatus,8 + 800017a0: 08000793 li a5,128 + 800017a4: 3047b7f3 csrrc a5,mie,a5 + 800017a8: 00008067 ret + +00000000800017ac <__am_asm_trap>: + 800017ac: ee810113 addi sp,sp,-280 + 800017b0: 00113423 sd ra,8(sp) + 800017b4: 00313c23 sd gp,24(sp) + 800017b8: 02413023 sd tp,32(sp) + 800017bc: 02513423 sd t0,40(sp) + 800017c0: 02613823 sd t1,48(sp) + 800017c4: 02713c23 sd t2,56(sp) + 800017c8: 04813023 sd s0,64(sp) + 800017cc: 04913423 sd s1,72(sp) + 800017d0: 04a13823 sd a0,80(sp) + 800017d4: 04b13c23 sd a1,88(sp) + 800017d8: 06c13023 sd a2,96(sp) + 800017dc: 06d13423 sd a3,104(sp) + 800017e0: 06e13823 sd a4,112(sp) + 800017e4: 06f13c23 sd a5,120(sp) + 800017e8: 09013023 sd a6,128(sp) + 800017ec: 09113423 sd a7,136(sp) + 800017f0: 09213823 sd s2,144(sp) + 800017f4: 09313c23 sd s3,152(sp) + 800017f8: 0b413023 sd s4,160(sp) + 800017fc: 0b513423 sd s5,168(sp) + 80001800: 0b613823 sd s6,176(sp) + 80001804: 0b713c23 sd s7,184(sp) + 80001808: 0d813023 sd s8,192(sp) + 8000180c: 0d913423 sd s9,200(sp) + 80001810: 0da13823 sd s10,208(sp) + 80001814: 0db13c23 sd s11,216(sp) + 80001818: 0fc13023 sd t3,224(sp) + 8000181c: 0fd13423 sd t4,232(sp) + 80001820: 0fe13823 sd t5,240(sp) + 80001824: 0ff13c23 sd t6,248(sp) + 80001828: 00010293 mv t0,sp + 8000182c: 11828293 addi t0,t0,280 + 80001830: 00513823 sd t0,16(sp) + 80001834: 342022f3 csrr t0,mcause + 80001838: 30002373 csrr t1,mstatus + 8000183c: 341023f3 csrr t2,mepc + 80001840: 10513023 sd t0,256(sp) + 80001844: 10613423 sd t1,264(sp) + 80001848: 10713823 sd t2,272(sp) + 8000184c: 00010513 mv a0,sp + 80001850: e11ff0ef jal ra,80001660 <__am_irq_handle> + 80001854: 10813303 ld t1,264(sp) + 80001858: 11013383 ld t2,272(sp) + 8000185c: 30031073 csrw mstatus,t1 + 80001860: 34139073 csrw mepc,t2 + 80001864: 00813083 ld ra,8(sp) + 80001868: 01813183 ld gp,24(sp) + 8000186c: 02013203 ld tp,32(sp) + 80001870: 02813283 ld t0,40(sp) + 80001874: 03013303 ld t1,48(sp) + 80001878: 03813383 ld t2,56(sp) + 8000187c: 04013403 ld s0,64(sp) + 80001880: 04813483 ld s1,72(sp) + 80001884: 05013503 ld a0,80(sp) + 80001888: 05813583 ld a1,88(sp) + 8000188c: 06013603 ld a2,96(sp) + 80001890: 06813683 ld a3,104(sp) + 80001894: 07013703 ld a4,112(sp) + 80001898: 07813783 ld a5,120(sp) + 8000189c: 08013803 ld a6,128(sp) + 800018a0: 08813883 ld a7,136(sp) + 800018a4: 09013903 ld s2,144(sp) + 800018a8: 09813983 ld s3,152(sp) + 800018ac: 0a013a03 ld s4,160(sp) + 800018b0: 0a813a83 ld s5,168(sp) + 800018b4: 0b013b03 ld s6,176(sp) + 800018b8: 0b813b83 ld s7,184(sp) + 800018bc: 0c013c03 ld s8,192(sp) + 800018c0: 0c813c83 ld s9,200(sp) + 800018c4: 0d013d03 ld s10,208(sp) + 800018c8: 0d813d83 ld s11,216(sp) + 800018cc: 0e013e03 ld t3,224(sp) + 800018d0: 0e813e83 ld t4,232(sp) + 800018d4: 0f013f03 ld t5,240(sp) + 800018d8: 0f813f83 ld t6,248(sp) + 800018dc: 11810113 addi sp,sp,280 + 800018e0: 30200073 mret + +00000000800018e4 : + 800018e4: 00000513 li a0,0 + 800018e8: 00008067 ret + +00000000800018ec : + 800018ec: 00008067 ret + +00000000800018f0 : + 800018f0: 00008067 ret + +00000000800018f4 : + 800018f4: ff010113 addi sp,sp,-16 + 800018f8: 00000513 li a0,0 + 800018fc: 01010113 addi sp,sp,16 + 80001900: 00008067 ret + +0000000080001904 : + 80001904: 00000513 li a0,0 + 80001908: 00008067 ret + +000000008000190c : + 8000190c: 00000513 li a0,0 + 80001910: 00008067 ret + +0000000080001914 : + 80001914: 00054783 lbu a5,0(a0) + 80001918: 00158593 addi a1,a1,1 + 8000191c: 00150513 addi a0,a0,1 + 80001920: fff5c703 lbu a4,-1(a1) + 80001924: 00078863 beqz a5,80001934 + 80001928: fee786e3 beq a5,a4,80001914 + 8000192c: 40e7853b subw a0,a5,a4 + 80001930: 00008067 ret + 80001934: 40e0053b negw a0,a4 + 80001938: 00008067 ret + +000000008000193c : + 8000193c: 00011617 auipc a2,0x11 + 80001940: 04460613 addi a2,a2,68 # 80012980 + 80001944: 00063683 ld a3,0(a2) + 80001948: 00869713 slli a4,a3,0x8 + 8000194c: 40d70733 sub a4,a4,a3 + 80001950: 00371713 slli a4,a4,0x3 + 80001954: 00d70733 add a4,a4,a3 + 80001958: 00771713 slli a4,a4,0x7 + 8000195c: 00d70733 add a4,a4,a3 + 80001960: 00371713 slli a4,a4,0x3 + 80001964: 40d70733 sub a4,a4,a3 + 80001968: 00571793 slli a5,a4,0x5 + 8000196c: 00f707b3 add a5,a4,a5 + 80001970: 00279793 slli a5,a5,0x2 + 80001974: 40d787b3 sub a5,a5,a3 + 80001978: 00279793 slli a5,a5,0x2 + 8000197c: 00003737 lui a4,0x3 + 80001980: 00d787b3 add a5,a5,a3 + 80001984: 03970713 addi a4,a4,57 # 3039 <_entry_offset+0x3039> + 80001988: 00e787b3 add a5,a5,a4 + 8000198c: 02179513 slli a0,a5,0x21 + 80001990: 00f63023 sd a5,0(a2) + 80001994: 03155513 srli a0,a0,0x31 + 80001998: 00008067 ret + +000000008000199c : + 8000199c: 00011797 auipc a5,0x11 + 800019a0: bd478793 addi a5,a5,-1068 # 80012570 + 800019a4: 0007b503 ld a0,0(a5) + 800019a8: 0087b583 ld a1,8(a5) + 800019ac: ff010113 addi sp,sp,-16 + 800019b0: 00000693 li a3,0 + 800019b4: 00000613 li a2,0 + 800019b8: 40a585b3 sub a1,a1,a0 + 800019bc: 00113423 sd ra,8(sp) + 800019c0: 378010ef jal ra,80002d38 + 800019c4: 00813083 ld ra,8(sp) + 800019c8: 00095797 auipc a5,0x95 + 800019cc: 20a7b423 sd a0,520(a5) # 80096bd0 + 800019d0: 01010113 addi sp,sp,16 + 800019d4: 00008067 ret + +00000000800019d8 <_out_null>: + 800019d8: 00008067 ret + +00000000800019dc <_ntoa_format>: + 800019dc: fa010113 addi sp,sp,-96 + 800019e0: 07012303 lw t1,112(sp) + 800019e4: 03313c23 sd s3,56(sp) + 800019e8: 03413823 sd s4,48(sp) + 800019ec: 03513423 sd s5,40(sp) + 800019f0: 03613023 sd s6,32(sp) + 800019f4: 01713c23 sd s7,24(sp) + 800019f8: 01813823 sd s8,16(sp) + 800019fc: 01913423 sd s9,8(sp) + 80001a00: 00237e13 andi t3,t1,2 + 80001a04: 01037e93 andi t4,t1,16 + 80001a08: 04113c23 sd ra,88(sp) + 80001a0c: 04813823 sd s0,80(sp) + 80001a10: 04913423 sd s1,72(sp) + 80001a14: 05213023 sd s2,64(sp) + 80001a18: 06012f03 lw t5,96(sp) + 80001a1c: 06812c03 lw s8,104(sp) + 80001a20: 00050a13 mv s4,a0 + 80001a24: 00058a93 mv s5,a1 + 80001a28: 00060b93 mv s7,a2 + 80001a2c: 00068b13 mv s6,a3 + 80001a30: 00070993 mv s3,a4 + 80001a34: 000e0c9b sext.w s9,t3 + 80001a38: 000e8e9b sext.w t4,t4 + 80001a3c: 060e1c63 bnez t3,80001ab4 <_ntoa_format+0xd8> + 80001a40: 020f1693 slli a3,t5,0x20 + 80001a44: 00137513 andi a0,t1,1 + 80001a48: 0206d693 srli a3,a3,0x20 + 80001a4c: 180c1e63 bnez s8,80001be8 <_ntoa_format+0x20c> + 80001a50: 02d7f663 bgeu a5,a3,80001a7c <_ntoa_format+0xa0> + 80001a54: 02000713 li a4,32 + 80001a58: 36e78e63 beq a5,a4,80001dd4 <_ntoa_format+0x3f8> + 80001a5c: 03000613 li a2,48 + 80001a60: 02000593 li a1,32 + 80001a64: 0080006f j 80001a6c <_ntoa_format+0x90> + 80001a68: 00b78a63 beq a5,a1,80001a7c <_ntoa_format+0xa0> + 80001a6c: 00178793 addi a5,a5,1 + 80001a70: 00f98733 add a4,s3,a5 + 80001a74: fec70fa3 sb a2,-1(a4) + 80001a78: fed7e8e3 bltu a5,a3,80001a68 <_ntoa_format+0x8c> + 80001a7c: 02050c63 beqz a0,80001ab4 <_ntoa_format+0xd8> + 80001a80: 020c1913 slli s2,s8,0x20 + 80001a84: 02095913 srli s2,s2,0x20 + 80001a88: 0327f663 bgeu a5,s2,80001ab4 <_ntoa_format+0xd8> + 80001a8c: 02000713 li a4,32 + 80001a90: 36e78863 beq a5,a4,80001e00 <_ntoa_format+0x424> + 80001a94: 03000693 li a3,48 + 80001a98: 02000613 li a2,32 + 80001a9c: 0080006f j 80001aa4 <_ntoa_format+0xc8> + 80001aa0: 16c78463 beq a5,a2,80001c08 <_ntoa_format+0x22c> + 80001aa4: 00178793 addi a5,a5,1 + 80001aa8: 00f98733 add a4,s3,a5 + 80001aac: fed70fa3 sb a3,-1(a4) + 80001ab0: ff2798e3 bne a5,s2,80001aa0 <_ntoa_format+0xc4> + 80001ab4: 1a0e8663 beqz t4,80001c60 <_ntoa_format+0x284> + 80001ab8: 40037713 andi a4,t1,1024 + 80001abc: 20071463 bnez a4,80001cc4 <_ntoa_format+0x2e8> + 80001ac0: 1e079663 bnez a5,80001cac <_ntoa_format+0x2d0> + 80001ac4: 01000793 li a5,16 + 80001ac8: 2af88863 beq a7,a5,80001d78 <_ntoa_format+0x39c> + 80001acc: 00200793 li a5,2 + 80001ad0: 2ef88a63 beq a7,a5,80001dc4 <_ntoa_format+0x3e8> + 80001ad4: 03000793 li a5,48 + 80001ad8: 00f98023 sb a5,0(s3) + 80001adc: 00100793 li a5,1 + 80001ae0: 1a080463 beqz a6,80001c88 <_ntoa_format+0x2ac> + 80001ae4: 00f98733 add a4,s3,a5 + 80001ae8: 00178413 addi s0,a5,1 + 80001aec: 02d00793 li a5,45 + 80001af0: 00f70023 sb a5,0(a4) + 80001af4: 00337313 andi t1,t1,3 + 80001af8: 20031263 bnez t1,80001cfc <_ntoa_format+0x320> + 80001afc: 020c1913 slli s2,s8,0x20 + 80001b00: 02095913 srli s2,s2,0x20 + 80001b04: 1f247c63 bgeu s0,s2,80001cfc <_ntoa_format+0x320> + 80001b08: 40890933 sub s2,s2,s0 + 80001b0c: 01790933 add s2,s2,s7 + 80001b10: 000b8493 mv s1,s7 + 80001b14: 00048613 mv a2,s1 + 80001b18: 000b0693 mv a3,s6 + 80001b1c: 00148493 addi s1,s1,1 + 80001b20: 000a8593 mv a1,s5 + 80001b24: 02000513 li a0,32 + 80001b28: 000a00e7 jalr s4 + 80001b2c: ff2494e3 bne s1,s2,80001b14 <_ntoa_format+0x138> + 80001b30: 02040663 beqz s0,80001b5c <_ntoa_format+0x180> + 80001b34: 01240933 add s2,s0,s2 + 80001b38: 012984b3 add s1,s3,s2 + 80001b3c: 00898433 add s0,s3,s0 + 80001b40: fff44503 lbu a0,-1(s0) + 80001b44: 40848633 sub a2,s1,s0 + 80001b48: 000b0693 mv a3,s6 + 80001b4c: fff40413 addi s0,s0,-1 + 80001b50: 000a8593 mv a1,s5 + 80001b54: 000a00e7 jalr s4 + 80001b58: fe8994e3 bne s3,s0,80001b40 <_ntoa_format+0x164> + 80001b5c: 040c8a63 beqz s9,80001bb0 <_ntoa_format+0x1d4> + 80001b60: 020c1c13 slli s8,s8,0x20 + 80001b64: 41790433 sub s0,s2,s7 + 80001b68: 020c5c13 srli s8,s8,0x20 + 80001b6c: 05847263 bgeu s0,s8,80001bb0 <_ntoa_format+0x1d4> + 80001b70: 01740633 add a2,s0,s7 + 80001b74: 000b0693 mv a3,s6 + 80001b78: 00140413 addi s0,s0,1 + 80001b7c: 000a8593 mv a1,s5 + 80001b80: 02000513 li a0,32 + 80001b84: 000a00e7 jalr s4 + 80001b88: ff8464e3 bltu s0,s8,80001b70 <_ntoa_format+0x194> + 80001b8c: 41790733 sub a4,s2,s7 + 80001b90: 00170713 addi a4,a4,1 + 80001b94: 00000793 li a5,0 + 80001b98: 00ec6863 bltu s8,a4,80001ba8 <_ntoa_format+0x1cc> + 80001b9c: fffb8793 addi a5,s7,-1 + 80001ba0: 01878c33 add s8,a5,s8 + 80001ba4: 412c07b3 sub a5,s8,s2 + 80001ba8: 00190913 addi s2,s2,1 + 80001bac: 00f90933 add s2,s2,a5 + 80001bb0: 05813083 ld ra,88(sp) + 80001bb4: 05013403 ld s0,80(sp) + 80001bb8: 04813483 ld s1,72(sp) + 80001bbc: 03813983 ld s3,56(sp) + 80001bc0: 03013a03 ld s4,48(sp) + 80001bc4: 02813a83 ld s5,40(sp) + 80001bc8: 02013b03 ld s6,32(sp) + 80001bcc: 01813b83 ld s7,24(sp) + 80001bd0: 01013c03 ld s8,16(sp) + 80001bd4: 00813c83 ld s9,8(sp) + 80001bd8: 00090513 mv a0,s2 + 80001bdc: 04013903 ld s2,64(sp) + 80001be0: 06010113 addi sp,sp,96 + 80001be4: 00008067 ret + 80001be8: 12050863 beqz a0,80001d18 <_ntoa_format+0x33c> + 80001bec: 00081663 bnez a6,80001bf8 <_ntoa_format+0x21c> + 80001bf0: 00c37713 andi a4,t1,12 + 80001bf4: 00070463 beqz a4,80001bfc <_ntoa_format+0x220> + 80001bf8: fffc0c1b addiw s8,s8,-1 + 80001bfc: e8d7f2e3 bgeu a5,a3,80001a80 <_ntoa_format+0xa4> + 80001c00: 02000713 li a4,32 + 80001c04: e4e79ce3 bne a5,a4,80001a5c <_ntoa_format+0x80> + 80001c08: 0e0e8063 beqz t4,80001ce8 <_ntoa_format+0x30c> + 80001c0c: 40037793 andi a5,t1,1024 + 80001c10: 04079c63 bnez a5,80001c68 <_ntoa_format+0x28c> + 80001c14: 02000793 li a5,32 + 80001c18: 0aff1063 bne t5,a5,80001cb8 <_ntoa_format+0x2dc> + 80001c1c: 02000793 li a5,32 + 80001c20: 01f00713 li a4,31 + 80001c24: 01000693 li a3,16 + 80001c28: 1ad88c63 beq a7,a3,80001de0 <_ntoa_format+0x404> + 80001c2c: 00200693 li a3,2 + 80001c30: 00070793 mv a5,a4 + 80001c34: 00d89e63 bne a7,a3,80001c50 <_ntoa_format+0x274> + 80001c38: 00e986b3 add a3,s3,a4 + 80001c3c: 00170793 addi a5,a4,1 + 80001c40: 06200713 li a4,98 + 80001c44: 00e68023 sb a4,0(a3) + 80001c48: 02000713 li a4,32 + 80001c4c: 00e78e63 beq a5,a4,80001c68 <_ntoa_format+0x28c> + 80001c50: 00f98733 add a4,s3,a5 + 80001c54: 03000693 li a3,48 + 80001c58: 00d70023 sb a3,0(a4) + 80001c5c: 00178793 addi a5,a5,1 + 80001c60: 02000713 li a4,32 + 80001c64: e6e79ee3 bne a5,a4,80001ae0 <_ntoa_format+0x104> + 80001c68: 00337313 andi t1,t1,3 + 80001c6c: 08031263 bnez t1,80001cf0 <_ntoa_format+0x314> + 80001c70: 02000413 li s0,32 + 80001c74: 020c1913 slli s2,s8,0x20 + 80001c78: 02095913 srli s2,s2,0x20 + 80001c7c: e92466e3 bltu s0,s2,80001b08 <_ntoa_format+0x12c> + 80001c80: 000b8913 mv s2,s7 + 80001c84: eadff06f j 80001b30 <_ntoa_format+0x154> + 80001c88: 00437713 andi a4,t1,4 + 80001c8c: 06071c63 bnez a4,80001d04 <_ntoa_format+0x328> + 80001c90: 00837713 andi a4,t1,8 + 80001c94: 0c071863 bnez a4,80001d64 <_ntoa_format+0x388> + 80001c98: 00337313 andi t1,t1,3 + 80001c9c: 00078413 mv s0,a5 + 80001ca0: fc030ae3 beqz t1,80001c74 <_ntoa_format+0x298> + 80001ca4: 000b8913 mv s2,s7 + 80001ca8: e89ff06f j 80001b30 <_ntoa_format+0x154> + 80001cac: 020f1f13 slli t5,t5,0x20 + 80001cb0: 020f5f13 srli t5,t5,0x20 + 80001cb4: 0aff0263 beq t5,a5,80001d58 <_ntoa_format+0x37c> + 80001cb8: 020c1913 slli s2,s8,0x20 + 80001cbc: 02095913 srli s2,s2,0x20 + 80001cc0: 08f90c63 beq s2,a5,80001d58 <_ntoa_format+0x37c> + 80001cc4: 01000713 li a4,16 + 80001cc8: 06e88663 beq a7,a4,80001d34 <_ntoa_format+0x358> + 80001ccc: 00200713 li a4,2 + 80001cd0: f6e89ce3 bne a7,a4,80001c48 <_ntoa_format+0x26c> + 80001cd4: 02000713 li a4,32 + 80001cd8: f8e788e3 beq a5,a4,80001c68 <_ntoa_format+0x28c> + 80001cdc: 00f986b3 add a3,s3,a5 + 80001ce0: 00178793 addi a5,a5,1 + 80001ce4: f5dff06f j 80001c40 <_ntoa_format+0x264> + 80001ce8: 00337313 andi t1,t1,3 + 80001cec: 0c030063 beqz t1,80001dac <_ntoa_format+0x3d0> + 80001cf0: 000b8913 mv s2,s7 + 80001cf4: 02000413 li s0,32 + 80001cf8: e3dff06f j 80001b34 <_ntoa_format+0x158> + 80001cfc: 000b8913 mv s2,s7 + 80001d00: e35ff06f j 80001b34 <_ntoa_format+0x158> + 80001d04: 00f98733 add a4,s3,a5 + 80001d08: 00178413 addi s0,a5,1 + 80001d0c: 02b00793 li a5,43 + 80001d10: 00f70023 sb a5,0(a4) + 80001d14: de1ff06f j 80001af4 <_ntoa_format+0x118> + 80001d18: d8d7fee3 bgeu a5,a3,80001ab4 <_ntoa_format+0xd8> + 80001d1c: 02000713 li a4,32 + 80001d20: d2e79ee3 bne a5,a4,80001a5c <_ntoa_format+0x80> + 80001d24: 0e0e8c63 beqz t4,80001e1c <_ntoa_format+0x440> + 80001d28: 40037793 andi a5,t1,1024 + 80001d2c: f2079ee3 bnez a5,80001c68 <_ntoa_format+0x28c> + 80001d30: ee5ff06f j 80001c14 <_ntoa_format+0x238> + 80001d34: 02037713 andi a4,t1,32 + 80001d38: 04071c63 bnez a4,80001d90 <_ntoa_format+0x3b4> + 80001d3c: 02000713 li a4,32 + 80001d40: f2e784e3 beq a5,a4,80001c68 <_ntoa_format+0x28c> + 80001d44: 00f98733 add a4,s3,a5 + 80001d48: 00178793 addi a5,a5,1 + 80001d4c: 07800693 li a3,120 + 80001d50: 00d70023 sb a3,0(a4) + 80001d54: ef5ff06f j 80001c48 <_ntoa_format+0x26c> + 80001d58: fff78713 addi a4,a5,-1 + 80001d5c: d60704e3 beqz a4,80001ac4 <_ntoa_format+0xe8> + 80001d60: ec5ff06f j 80001c24 <_ntoa_format+0x248> + 80001d64: 00f98733 add a4,s3,a5 + 80001d68: 00178413 addi s0,a5,1 + 80001d6c: 02000793 li a5,32 + 80001d70: 00f70023 sb a5,0(a4) + 80001d74: d81ff06f j 80001af4 <_ntoa_format+0x118> + 80001d78: 02037793 andi a5,t1,32 + 80001d7c: 02079c63 bnez a5,80001db4 <_ntoa_format+0x3d8> + 80001d80: 07800793 li a5,120 + 80001d84: 00f98023 sb a5,0(s3) + 80001d88: 00100793 li a5,1 + 80001d8c: ec5ff06f j 80001c50 <_ntoa_format+0x274> + 80001d90: 02000713 li a4,32 + 80001d94: ece78ae3 beq a5,a4,80001c68 <_ntoa_format+0x28c> + 80001d98: 00f98733 add a4,s3,a5 + 80001d9c: 05800693 li a3,88 + 80001da0: 00d70023 sb a3,0(a4) + 80001da4: 00178793 addi a5,a5,1 + 80001da8: ea1ff06f j 80001c48 <_ntoa_format+0x26c> + 80001dac: 02000413 li s0,32 + 80001db0: d4dff06f j 80001afc <_ntoa_format+0x120> + 80001db4: 05800793 li a5,88 + 80001db8: 00f98023 sb a5,0(s3) + 80001dbc: 00100793 li a5,1 + 80001dc0: e91ff06f j 80001c50 <_ntoa_format+0x274> + 80001dc4: 06200793 li a5,98 + 80001dc8: 00f98023 sb a5,0(s3) + 80001dcc: 00100793 li a5,1 + 80001dd0: e81ff06f j 80001c50 <_ntoa_format+0x274> + 80001dd4: e2051ae3 bnez a0,80001c08 <_ntoa_format+0x22c> + 80001dd8: 000c8c13 mv s8,s9 + 80001ddc: f49ff06f j 80001d24 <_ntoa_format+0x348> + 80001de0: 02037693 andi a3,t1,32 + 80001de4: ffe78713 addi a4,a5,-2 + 80001de8: 00069863 bnez a3,80001df8 <_ntoa_format+0x41c> + 80001dec: 00e98733 add a4,s3,a4 + 80001df0: fff78793 addi a5,a5,-1 + 80001df4: f59ff06f j 80001d4c <_ntoa_format+0x370> + 80001df8: 00070793 mv a5,a4 + 80001dfc: f9dff06f j 80001d98 <_ntoa_format+0x3bc> + 80001e00: 000e8e63 beqz t4,80001e1c <_ntoa_format+0x440> + 80001e04: 40037713 andi a4,t1,1024 + 80001e08: 00071e63 bnez a4,80001e24 <_ntoa_format+0x448> + 80001e0c: 02ff0e63 beq t5,a5,80001e48 <_ntoa_format+0x46c> + 80001e10: e4fc1ce3 bne s8,a5,80001c68 <_ntoa_format+0x28c> + 80001e14: 01f00713 li a4,31 + 80001e18: e0dff06f j 80001c24 <_ntoa_format+0x248> + 80001e1c: 02000413 li s0,32 + 80001e20: cd5ff06f j 80001af4 <_ntoa_format+0x118> + 80001e24: 01000793 li a5,16 + 80001e28: 02f88c63 beq a7,a5,80001e60 <_ntoa_format+0x484> + 80001e2c: 00200793 li a5,2 + 80001e30: e2f88ce3 beq a7,a5,80001c68 <_ntoa_format+0x28c> + 80001e34: 00337313 andi t1,t1,3 + 80001e38: ea031ce3 bnez t1,80001cf0 <_ntoa_format+0x314> + 80001e3c: 02000413 li s0,32 + 80001e40: cd2464e3 bltu s0,s2,80001b08 <_ntoa_format+0x12c> + 80001e44: e3dff06f j 80001c80 <_ntoa_format+0x2a4> + 80001e48: 01000713 li a4,16 + 80001e4c: f8e88ae3 beq a7,a4,80001de0 <_ntoa_format+0x404> + 80001e50: 00200793 li a5,2 + 80001e54: 00f88c63 beq a7,a5,80001e6c <_ntoa_format+0x490> + 80001e58: 01f00793 li a5,31 + 80001e5c: df5ff06f j 80001c50 <_ntoa_format+0x274> + 80001e60: 02037793 andi a5,t1,32 + 80001e64: fc0788e3 beqz a5,80001e34 <_ntoa_format+0x458> + 80001e68: e01ff06f j 80001c68 <_ntoa_format+0x28c> + 80001e6c: 01f00713 li a4,31 + 80001e70: dc9ff06f j 80001c38 <_ntoa_format+0x25c> + +0000000080001e74 <_ntoa_long>: + 80001e74: f4010113 addi sp,sp,-192 + 80001e78: 09413823 sd s4,144(sp) + 80001e7c: 09513423 sd s5,136(sp) + 80001e80: 09613023 sd s6,128(sp) + 80001e84: 07713c23 sd s7,120(sp) + 80001e88: 07813823 sd s8,112(sp) + 80001e8c: 07913423 sd s9,104(sp) + 80001e90: 05b13c23 sd s11,88(sp) + 80001e94: 0a113c23 sd ra,184(sp) + 80001e98: 0a813823 sd s0,176(sp) + 80001e9c: 0a913423 sd s1,168(sp) + 80001ea0: 0b213023 sd s2,160(sp) + 80001ea4: 09313c23 sd s3,152(sp) + 80001ea8: 07a13023 sd s10,96(sp) + 80001eac: 02a13023 sd a0,32(sp) + 80001eb0: 03113423 sd a7,40(sp) + 80001eb4: 0c812a03 lw s4,200(sp) + 80001eb8: 00070d93 mv s11,a4 + 80001ebc: 00058b13 mv s6,a1 + 80001ec0: 00060b93 mv s7,a2 + 80001ec4: 00068c13 mv s8,a3 + 80001ec8: 00078c93 mv s9,a5 + 80001ecc: 00080a93 mv s5,a6 + 80001ed0: 00071863 bnez a4,80001ee0 <_ntoa_long+0x6c> + 80001ed4: 400a7793 andi a5,s4,1024 + 80001ed8: fefa7a13 andi s4,s4,-17 + 80001edc: 0e079663 bnez a5,80001fc8 <_ntoa_long+0x154> + 80001ee0: 020a7793 andi a5,s4,32 + 80001ee4: 06100413 li s0,97 + 80001ee8: 0c079c63 bnez a5,80001fc0 <_ntoa_long+0x14c> + 80001eec: 00000d13 li s10,0 + 80001ef0: 03010493 addi s1,sp,48 + 80001ef4: 00900913 li s2,9 + 80001ef8: ff64041b addiw s0,s0,-10 + 80001efc: 02000993 li s3,32 + 80001f00: 00c0006f j 80001f0c <_ntoa_long+0x98> + 80001f04: 053d0463 beq s10,s3,80001f4c <_ntoa_long+0xd8> + 80001f08: 00050d93 mv s11,a0 + 80001f0c: 000a8593 mv a1,s5 + 80001f10: 000d8513 mv a0,s11 + 80001f14: a88ff0ef jal ra,8000119c <__umoddi3> + 80001f18: 0ff57313 andi t1,a0,255 + 80001f1c: 0303071b addiw a4,t1,48 + 80001f20: 0064033b addw t1,s0,t1 + 80001f24: 0ff37313 andi t1,t1,255 + 80001f28: 00a96463 bltu s2,a0,80001f30 <_ntoa_long+0xbc> + 80001f2c: 0ff77313 andi t1,a4,255 + 80001f30: 001d0d13 addi s10,s10,1 + 80001f34: 01a48733 add a4,s1,s10 + 80001f38: 000d8513 mv a0,s11 + 80001f3c: 000a8593 mv a1,s5 + 80001f40: fe670fa3 sb t1,-1(a4) + 80001f44: a10ff0ef jal ra,80001154 <__udivdi3> + 80001f48: fb5dfee3 bgeu s11,s5,80001f04 <_ntoa_long+0x90> + 80001f4c: 0c012703 lw a4,192(sp) + 80001f50: 02813783 ld a5,40(sp) + 80001f54: 02013503 ld a0,32(sp) + 80001f58: 01413823 sd s4,16(sp) + 80001f5c: 00e13423 sd a4,8(sp) + 80001f60: 00f13023 sd a5,0(sp) + 80001f64: 000a889b sext.w a7,s5 + 80001f68: 000c8813 mv a6,s9 + 80001f6c: 000d0793 mv a5,s10 + 80001f70: 00048713 mv a4,s1 + 80001f74: 000c0693 mv a3,s8 + 80001f78: 000b8613 mv a2,s7 + 80001f7c: 000b0593 mv a1,s6 + 80001f80: a5dff0ef jal ra,800019dc <_ntoa_format> + 80001f84: 0b813083 ld ra,184(sp) + 80001f88: 0b013403 ld s0,176(sp) + 80001f8c: 0a813483 ld s1,168(sp) + 80001f90: 0a013903 ld s2,160(sp) + 80001f94: 09813983 ld s3,152(sp) + 80001f98: 09013a03 ld s4,144(sp) + 80001f9c: 08813a83 ld s5,136(sp) + 80001fa0: 08013b03 ld s6,128(sp) + 80001fa4: 07813b83 ld s7,120(sp) + 80001fa8: 07013c03 ld s8,112(sp) + 80001fac: 06813c83 ld s9,104(sp) + 80001fb0: 06013d03 ld s10,96(sp) + 80001fb4: 05813d83 ld s11,88(sp) + 80001fb8: 0c010113 addi sp,sp,192 + 80001fbc: 00008067 ret + 80001fc0: 04100413 li s0,65 + 80001fc4: f29ff06f j 80001eec <_ntoa_long+0x78> + 80001fc8: 00000d13 li s10,0 + 80001fcc: 03010493 addi s1,sp,48 + 80001fd0: f7dff06f j 80001f4c <_ntoa_long+0xd8> + +0000000080001fd4 <_ntoa_long_long>: + 80001fd4: f4010113 addi sp,sp,-192 + 80001fd8: 09413823 sd s4,144(sp) + 80001fdc: 09513423 sd s5,136(sp) + 80001fe0: 09613023 sd s6,128(sp) + 80001fe4: 07713c23 sd s7,120(sp) + 80001fe8: 07813823 sd s8,112(sp) + 80001fec: 07913423 sd s9,104(sp) + 80001ff0: 05b13c23 sd s11,88(sp) + 80001ff4: 0a113c23 sd ra,184(sp) + 80001ff8: 0a813823 sd s0,176(sp) + 80001ffc: 0a913423 sd s1,168(sp) + 80002000: 0b213023 sd s2,160(sp) + 80002004: 09313c23 sd s3,152(sp) + 80002008: 07a13023 sd s10,96(sp) + 8000200c: 02a13023 sd a0,32(sp) + 80002010: 03113423 sd a7,40(sp) + 80002014: 0c812a03 lw s4,200(sp) + 80002018: 00070d93 mv s11,a4 + 8000201c: 00058b13 mv s6,a1 + 80002020: 00060b93 mv s7,a2 + 80002024: 00068c13 mv s8,a3 + 80002028: 00078c93 mv s9,a5 + 8000202c: 00080a93 mv s5,a6 + 80002030: 00071863 bnez a4,80002040 <_ntoa_long_long+0x6c> + 80002034: 400a7793 andi a5,s4,1024 + 80002038: fefa7a13 andi s4,s4,-17 + 8000203c: 0e079663 bnez a5,80002128 <_ntoa_long_long+0x154> + 80002040: 020a7793 andi a5,s4,32 + 80002044: 06100413 li s0,97 + 80002048: 0c079c63 bnez a5,80002120 <_ntoa_long_long+0x14c> + 8000204c: 00000d13 li s10,0 + 80002050: 03010493 addi s1,sp,48 + 80002054: 00900913 li s2,9 + 80002058: ff64041b addiw s0,s0,-10 + 8000205c: 02000993 li s3,32 + 80002060: 00c0006f j 8000206c <_ntoa_long_long+0x98> + 80002064: 053d0463 beq s10,s3,800020ac <_ntoa_long_long+0xd8> + 80002068: 00050d93 mv s11,a0 + 8000206c: 000a8593 mv a1,s5 + 80002070: 000d8513 mv a0,s11 + 80002074: 928ff0ef jal ra,8000119c <__umoddi3> + 80002078: 0ff57313 andi t1,a0,255 + 8000207c: 0303071b addiw a4,t1,48 + 80002080: 0064033b addw t1,s0,t1 + 80002084: 0ff37313 andi t1,t1,255 + 80002088: 00a96463 bltu s2,a0,80002090 <_ntoa_long_long+0xbc> + 8000208c: 0ff77313 andi t1,a4,255 + 80002090: 001d0d13 addi s10,s10,1 + 80002094: 01a48733 add a4,s1,s10 + 80002098: 000d8513 mv a0,s11 + 8000209c: 000a8593 mv a1,s5 + 800020a0: fe670fa3 sb t1,-1(a4) + 800020a4: 8b0ff0ef jal ra,80001154 <__udivdi3> + 800020a8: fb5dfee3 bgeu s11,s5,80002064 <_ntoa_long_long+0x90> + 800020ac: 0c012703 lw a4,192(sp) + 800020b0: 02813783 ld a5,40(sp) + 800020b4: 02013503 ld a0,32(sp) + 800020b8: 01413823 sd s4,16(sp) + 800020bc: 00e13423 sd a4,8(sp) + 800020c0: 00f13023 sd a5,0(sp) + 800020c4: 000a889b sext.w a7,s5 + 800020c8: 000c8813 mv a6,s9 + 800020cc: 000d0793 mv a5,s10 + 800020d0: 00048713 mv a4,s1 + 800020d4: 000c0693 mv a3,s8 + 800020d8: 000b8613 mv a2,s7 + 800020dc: 000b0593 mv a1,s6 + 800020e0: 8fdff0ef jal ra,800019dc <_ntoa_format> + 800020e4: 0b813083 ld ra,184(sp) + 800020e8: 0b013403 ld s0,176(sp) + 800020ec: 0a813483 ld s1,168(sp) + 800020f0: 0a013903 ld s2,160(sp) + 800020f4: 09813983 ld s3,152(sp) + 800020f8: 09013a03 ld s4,144(sp) + 800020fc: 08813a83 ld s5,136(sp) + 80002100: 08013b03 ld s6,128(sp) + 80002104: 07813b83 ld s7,120(sp) + 80002108: 07013c03 ld s8,112(sp) + 8000210c: 06813c83 ld s9,104(sp) + 80002110: 06013d03 ld s10,96(sp) + 80002114: 05813d83 ld s11,88(sp) + 80002118: 0c010113 addi sp,sp,192 + 8000211c: 00008067 ret + 80002120: 04100413 li s0,65 + 80002124: f29ff06f j 8000204c <_ntoa_long_long+0x78> + 80002128: 00000d13 li s10,0 + 8000212c: 03010493 addi s1,sp,48 + 80002130: f7dff06f j 800020ac <_ntoa_long_long+0xd8> + +0000000080002134 <_vsnprintf>: + 80002134: f6010113 addi sp,sp,-160 + 80002138: 08913423 sd s1,136(sp) + 8000213c: 09213023 sd s2,128(sp) + 80002140: 07313c23 sd s3,120(sp) + 80002144: 05713c23 sd s7,88(sp) + 80002148: 05813823 sd s8,80(sp) + 8000214c: 08113c23 sd ra,152(sp) + 80002150: 08813823 sd s0,144(sp) + 80002154: 07413823 sd s4,112(sp) + 80002158: 07513423 sd s5,104(sp) + 8000215c: 07613023 sd s6,96(sp) + 80002160: 05913423 sd s9,72(sp) + 80002164: 05a13023 sd s10,64(sp) + 80002168: 03b13c23 sd s11,56(sp) + 8000216c: 00058493 mv s1,a1 + 80002170: 00060c13 mv s8,a2 + 80002174: 00068b93 mv s7,a3 + 80002178: 00070993 mv s3,a4 + 8000217c: 00000917 auipc s2,0x0 + 80002180: 85c90913 addi s2,s2,-1956 # 800019d8 <_out_null> + 80002184: 00058463 beqz a1,8000218c <_vsnprintf+0x58> + 80002188: 00050913 mv s2,a0 + 8000218c: 000bc503 lbu a0,0(s7) + 80002190: 00000d13 li s10,0 + 80002194: 66050663 beqz a0,80002800 <_vsnprintf+0x6cc> + 80002198: 000107b7 lui a5,0x10 + 8000219c: fff78793 addi a5,a5,-1 # ffff <_entry_offset+0xffff> + 800021a0: 02500a13 li s4,37 + 800021a4: 00002417 auipc s0,0x2 + 800021a8: 39040413 addi s0,s0,912 # 80004534 + 800021ac: 00f13c23 sd a5,24(sp) + 800021b0: 0200006f j 800021d0 <_vsnprintf+0x9c> + 800021b4: 000d0613 mv a2,s10 + 800021b8: 000c0693 mv a3,s8 + 800021bc: 00048593 mv a1,s1 + 800021c0: 001d0d13 addi s10,s10,1 + 800021c4: 000900e7 jalr s2 + 800021c8: 000bc503 lbu a0,0(s7) + 800021cc: 1c050263 beqz a0,80002390 <_vsnprintf+0x25c> + 800021d0: 001b8b93 addi s7,s7,1 + 800021d4: ff4510e3 bne a0,s4,800021b4 <_vsnprintf+0x80> + 800021d8: 00000593 li a1,0 + 800021dc: 01000813 li a6,16 + 800021e0: 000bc503 lbu a0,0(s7) + 800021e4: 001b8713 addi a4,s7,1 + 800021e8: 00070613 mv a2,a4 + 800021ec: fe05079b addiw a5,a0,-32 + 800021f0: 0ff7f793 andi a5,a5,255 + 800021f4: 00f86c63 bltu a6,a5,8000220c <_vsnprintf+0xd8> + 800021f8: 00279793 slli a5,a5,0x2 + 800021fc: 008787b3 add a5,a5,s0 + 80002200: 0007a783 lw a5,0(a5) + 80002204: 008787b3 add a5,a5,s0 + 80002208: 00078067 jr a5 + 8000220c: fd05079b addiw a5,a0,-48 + 80002210: 0ff7f793 andi a5,a5,255 + 80002214: 00900813 li a6,9 + 80002218: 0ef87c63 bgeu a6,a5,80002310 <_vsnprintf+0x1dc> + 8000221c: 02a00793 li a5,42 + 80002220: 20f50463 beq a0,a5,80002428 <_vsnprintf+0x2f4> + 80002224: 000b8613 mv a2,s7 + 80002228: 00000d93 li s11,0 + 8000222c: 00070b93 mv s7,a4 + 80002230: 02e00793 li a5,46 + 80002234: 00000c93 li s9,0 + 80002238: 12f50463 beq a0,a5,80002360 <_vsnprintf+0x22c> + 8000223c: f985079b addiw a5,a0,-104 + 80002240: 0ff7f793 andi a5,a5,255 + 80002244: 01200713 li a4,18 + 80002248: 08f76463 bltu a4,a5,800022d0 <_vsnprintf+0x19c> + 8000224c: 00002717 auipc a4,0x2 + 80002250: 32c70713 addi a4,a4,812 # 80004578 + 80002254: 00279793 slli a5,a5,0x2 + 80002258: 00e787b3 add a5,a5,a4 + 8000225c: 0007a783 lw a5,0(a5) + 80002260: 00e787b3 add a5,a5,a4 + 80002264: 00078067 jr a5 + 80002268: 0015e593 ori a1,a1,1 + 8000226c: 0005859b sext.w a1,a1 + 80002270: 00070b93 mv s7,a4 + 80002274: f6dff06f j 800021e0 <_vsnprintf+0xac> + 80002278: 0025e593 ori a1,a1,2 + 8000227c: 0005859b sext.w a1,a1 + 80002280: 00070b93 mv s7,a4 + 80002284: f5dff06f j 800021e0 <_vsnprintf+0xac> + 80002288: 0045e593 ori a1,a1,4 + 8000228c: 0005859b sext.w a1,a1 + 80002290: 00070b93 mv s7,a4 + 80002294: f4dff06f j 800021e0 <_vsnprintf+0xac> + 80002298: 0105e593 ori a1,a1,16 + 8000229c: 0005859b sext.w a1,a1 + 800022a0: 00070b93 mv s7,a4 + 800022a4: f3dff06f j 800021e0 <_vsnprintf+0xac> + 800022a8: 0085e593 ori a1,a1,8 + 800022ac: 0005859b sext.w a1,a1 + 800022b0: 00070b93 mv s7,a4 + 800022b4: f2dff06f j 800021e0 <_vsnprintf+0xac> + 800022b8: 00164503 lbu a0,1(a2) + 800022bc: 06800793 li a5,104 + 800022c0: 52f50663 beq a0,a5,800027ec <_vsnprintf+0x6b8> + 800022c4: 0805e593 ori a1,a1,128 + 800022c8: 0005859b sext.w a1,a1 + 800022cc: 001b8b93 addi s7,s7,1 + 800022d0: fdb5079b addiw a5,a0,-37 + 800022d4: 0ff7f793 andi a5,a5,255 + 800022d8: 05300713 li a4,83 + 800022dc: ecf76ce3 bltu a4,a5,800021b4 <_vsnprintf+0x80> + 800022e0: 00002717 auipc a4,0x2 + 800022e4: 2e470713 addi a4,a4,740 # 800045c4 + 800022e8: 00279793 slli a5,a5,0x2 + 800022ec: 00e787b3 add a5,a5,a4 + 800022f0: 0007a783 lw a5,0(a5) + 800022f4: 00e787b3 add a5,a5,a4 + 800022f8: 00078067 jr a5 + 800022fc: 00164503 lbu a0,1(a2) + 80002300: 1005e593 ori a1,a1,256 + 80002304: 0005859b sext.w a1,a1 + 80002308: 001b8b93 addi s7,s7,1 + 8000230c: fc5ff06f j 800022d0 <_vsnprintf+0x19c> + 80002310: 00000d93 li s11,0 + 80002314: 00900813 li a6,9 + 80002318: 0080006f j 80002320 <_vsnprintf+0x1ec> + 8000231c: 00170713 addi a4,a4,1 + 80002320: 002d979b slliw a5,s11,0x2 + 80002324: 01b787bb addw a5,a5,s11 + 80002328: 0017979b slliw a5,a5,0x1 + 8000232c: 00a787bb addw a5,a5,a0 + 80002330: 00074503 lbu a0,0(a4) + 80002334: 000b8893 mv a7,s7 + 80002338: fd078d9b addiw s11,a5,-48 + 8000233c: fd05061b addiw a2,a0,-48 + 80002340: 0ff67613 andi a2,a2,255 + 80002344: 00070b93 mv s7,a4 + 80002348: fcc87ae3 bgeu a6,a2,8000231c <_vsnprintf+0x1e8> + 8000234c: 02e00793 li a5,46 + 80002350: 00070613 mv a2,a4 + 80002354: 00288b93 addi s7,a7,2 + 80002358: 00000c93 li s9,0 + 8000235c: eef510e3 bne a0,a5,8000223c <_vsnprintf+0x108> + 80002360: 00164503 lbu a0,1(a2) + 80002364: 4005e593 ori a1,a1,1024 + 80002368: 00900713 li a4,9 + 8000236c: fd05079b addiw a5,a0,-48 + 80002370: 0ff7f793 andi a5,a5,255 + 80002374: 0005859b sext.w a1,a1 + 80002378: 06f77c63 bgeu a4,a5,800023f0 <_vsnprintf+0x2bc> + 8000237c: 02a00793 li a5,42 + 80002380: 32f50e63 beq a0,a5,800026bc <_vsnprintf+0x588> + 80002384: 000b8613 mv a2,s7 + 80002388: 001b8b93 addi s7,s7,1 + 8000238c: eb1ff06f j 8000223c <_vsnprintf+0x108> + 80002390: 000d041b sext.w s0,s10 + 80002394: 018d6463 bltu s10,s8,8000239c <_vsnprintf+0x268> + 80002398: fffc0d13 addi s10,s8,-1 + 8000239c: 000c0693 mv a3,s8 + 800023a0: 000d0613 mv a2,s10 + 800023a4: 00048593 mv a1,s1 + 800023a8: 00000513 li a0,0 + 800023ac: 000900e7 jalr s2 + 800023b0: 09813083 ld ra,152(sp) + 800023b4: 00040513 mv a0,s0 + 800023b8: 09013403 ld s0,144(sp) + 800023bc: 08813483 ld s1,136(sp) + 800023c0: 08013903 ld s2,128(sp) + 800023c4: 07813983 ld s3,120(sp) + 800023c8: 07013a03 ld s4,112(sp) + 800023cc: 06813a83 ld s5,104(sp) + 800023d0: 06013b03 ld s6,96(sp) + 800023d4: 05813b83 ld s7,88(sp) + 800023d8: 05013c03 ld s8,80(sp) + 800023dc: 04813c83 ld s9,72(sp) + 800023e0: 04013d03 ld s10,64(sp) + 800023e4: 03813d83 ld s11,56(sp) + 800023e8: 0a010113 addi sp,sp,160 + 800023ec: 00008067 ret + 800023f0: 002c979b slliw a5,s9,0x2 + 800023f4: 019788bb addw a7,a5,s9 + 800023f8: 000b8813 mv a6,s7 + 800023fc: 0018989b slliw a7,a7,0x1 + 80002400: 001b8b93 addi s7,s7,1 + 80002404: 00a888bb addw a7,a7,a0 + 80002408: 000bc503 lbu a0,0(s7) + 8000240c: fd088c9b addiw s9,a7,-48 + 80002410: fd05079b addiw a5,a0,-48 + 80002414: 0ff7f793 andi a5,a5,255 + 80002418: fcf77ce3 bgeu a4,a5,800023f0 <_vsnprintf+0x2bc> + 8000241c: 000b8613 mv a2,s7 + 80002420: 00280b93 addi s7,a6,2 + 80002424: e19ff06f j 8000223c <_vsnprintf+0x108> + 80002428: 0009a783 lw a5,0(s3) + 8000242c: 00898993 addi s3,s3,8 + 80002430: 00078d9b sext.w s11,a5 + 80002434: 0007c863 bltz a5,80002444 <_vsnprintf+0x310> + 80002438: 001bc503 lbu a0,1(s7) + 8000243c: 002b8b93 addi s7,s7,2 + 80002440: df1ff06f j 80002230 <_vsnprintf+0xfc> + 80002444: 0025e593 ori a1,a1,2 + 80002448: 001bc503 lbu a0,1(s7) + 8000244c: 0005859b sext.w a1,a1 + 80002450: 40f00dbb negw s11,a5 + 80002454: 002b8b93 addi s7,s7,2 + 80002458: dd9ff06f j 80002230 <_vsnprintf+0xfc> + 8000245c: 07800793 li a5,120 + 80002460: 00898a93 addi s5,s3,8 + 80002464: 56f50063 beq a0,a5,800029c4 <_vsnprintf+0x890> + 80002468: 05800793 li a5,88 + 8000246c: 28f50463 beq a0,a5,800026f4 <_vsnprintf+0x5c0> + 80002470: 06f00793 li a5,111 + 80002474: 4af50c63 beq a0,a5,8000292c <_vsnprintf+0x7f8> + 80002478: 06200793 li a5,98 + 8000247c: 54f50063 beq a0,a5,800029bc <_vsnprintf+0x888> + 80002480: fef5ff13 andi t5,a1,-17 + 80002484: 4005f793 andi a5,a1,1024 + 80002488: 06900713 li a4,105 + 8000248c: 000f0f1b sext.w t5,t5 + 80002490: 0007879b sext.w a5,a5 + 80002494: 5ae51063 bne a0,a4,80002a34 <_vsnprintf+0x900> + 80002498: 48079663 bnez a5,80002924 <_vsnprintf+0x7f0> + 8000249c: 2005f593 andi a1,a1,512 + 800024a0: 0005879b sext.w a5,a1 + 800024a4: 00a00813 li a6,10 + 800024a8: 42079663 bnez a5,800028d4 <_vsnprintf+0x7a0> + 800024ac: 100f7793 andi a5,t5,256 + 800024b0: 000f0613 mv a2,t5 + 800024b4: 4e079063 bnez a5,80002994 <_vsnprintf+0x860> + 800024b8: 040f7713 andi a4,t5,64 + 800024bc: 0009a783 lw a5,0(s3) + 800024c0: 4a071a63 bnez a4,80002974 <_vsnprintf+0x840> + 800024c4: 08067613 andi a2,a2,128 + 800024c8: 52060a63 beqz a2,800029fc <_vsnprintf+0x8c8> + 800024cc: 0107979b slliw a5,a5,0x10 + 800024d0: 4107d79b sraiw a5,a5,0x10 + 800024d4: 40f7d61b sraiw a2,a5,0xf + 800024d8: 00c7c733 xor a4,a5,a2 + 800024dc: 40c7073b subw a4,a4,a2 + 800024e0: 03071713 slli a4,a4,0x30 + 800024e4: 03075713 srli a4,a4,0x30 + 800024e8: 000d0613 mv a2,s10 + 800024ec: 01e13423 sd t5,8(sp) + 800024f0: 01b13023 sd s11,0(sp) + 800024f4: 000c8893 mv a7,s9 + 800024f8: 01f7d79b srliw a5,a5,0x1f + 800024fc: 000c0693 mv a3,s8 + 80002500: 00048593 mv a1,s1 + 80002504: 00090513 mv a0,s2 + 80002508: 96dff0ef jal ra,80001e74 <_ntoa_long> + 8000250c: 00050d13 mv s10,a0 + 80002510: 000a8993 mv s3,s5 + 80002514: cb5ff06f j 800021c8 <_vsnprintf+0x94> + 80002518: 00164503 lbu a0,1(a2) + 8000251c: 06c00793 li a5,108 + 80002520: def510e3 bne a0,a5,80002300 <_vsnprintf+0x1cc> + 80002524: 3005e593 ori a1,a1,768 + 80002528: 00264503 lbu a0,2(a2) + 8000252c: 0005859b sext.w a1,a1 + 80002530: 00360b93 addi s7,a2,3 + 80002534: d9dff06f j 800022d0 <_vsnprintf+0x19c> + 80002538: 00898793 addi a5,s3,8 + 8000253c: 001d0813 addi a6,s10,1 + 80002540: 0025f593 andi a1,a1,2 + 80002544: 02f13023 sd a5,32(sp) + 80002548: 00080b13 mv s6,a6 + 8000254c: 32058263 beqz a1,80002870 <_vsnprintf+0x73c> + 80002550: 0009c503 lbu a0,0(s3) + 80002554: 000c0693 mv a3,s8 + 80002558: 000d0613 mv a2,s10 + 8000255c: 00048593 mv a1,s1 + 80002560: 000900e7 jalr s2 + 80002564: 00100793 li a5,1 + 80002568: 43b7f063 bgeu a5,s11,80002988 <_vsnprintf+0x854> + 8000256c: ffed879b addiw a5,s11,-2 + 80002570: 02079a93 slli s5,a5,0x20 + 80002574: 020ada93 srli s5,s5,0x20 + 80002578: 002d0d13 addi s10,s10,2 + 8000257c: 015d0cb3 add s9,s10,s5 + 80002580: 000b0613 mv a2,s6 + 80002584: 000c0693 mv a3,s8 + 80002588: 001b0b13 addi s6,s6,1 + 8000258c: 00048593 mv a1,s1 + 80002590: 02000513 li a0,32 + 80002594: 000900e7 jalr s2 + 80002598: ff6c94e3 bne s9,s6,80002580 <_vsnprintf+0x44c> + 8000259c: 02013983 ld s3,32(sp) + 800025a0: 015d0d33 add s10,s10,s5 + 800025a4: c25ff06f j 800021c8 <_vsnprintf+0x94> + 800025a8: 000d0613 mv a2,s10 + 800025ac: 000c0693 mv a3,s8 + 800025b0: 00048593 mv a1,s1 + 800025b4: 02500513 li a0,37 + 800025b8: 001d0d13 addi s10,s10,1 + 800025bc: 000900e7 jalr s2 + 800025c0: c09ff06f j 800021c8 <_vsnprintf+0x94> + 800025c4: 0009ba83 ld s5,0(s3) + 800025c8: 00898793 addi a5,s3,8 + 800025cc: 02f13023 sd a5,32(sp) + 800025d0: 000ac503 lbu a0,0(s5) + 800025d4: 100c9663 bnez s9,800026e0 <_vsnprintf+0x5ac> + 800025d8: ffe00793 li a5,-2 + 800025dc: 42050863 beqz a0,80002a0c <_vsnprintf+0x8d8> + 800025e0: 00178693 addi a3,a5,1 + 800025e4: 00da8633 add a2,s5,a3 + 800025e8: 000a8793 mv a5,s5 + 800025ec: 0080006f j 800025f4 <_vsnprintf+0x4c0> + 800025f0: 1ec78863 beq a5,a2,800027e0 <_vsnprintf+0x6ac> + 800025f4: 0017c703 lbu a4,1(a5) + 800025f8: 00178793 addi a5,a5,1 + 800025fc: fe071ae3 bnez a4,800025f0 <_vsnprintf+0x4bc> + 80002600: 415787bb subw a5,a5,s5 + 80002604: 00f13823 sd a5,16(sp) + 80002608: 4005f793 andi a5,a1,1024 + 8000260c: 0007899b sext.w s3,a5 + 80002610: 00078c63 beqz a5,80002628 <_vsnprintf+0x4f4> + 80002614: 01013703 ld a4,16(sp) + 80002618: 000c879b sext.w a5,s9 + 8000261c: 01977463 bgeu a4,s9,80002624 <_vsnprintf+0x4f0> + 80002620: 0007079b sext.w a5,a4 + 80002624: 00f13823 sd a5,16(sp) + 80002628: 0025f593 andi a1,a1,2 + 8000262c: 0005879b sext.w a5,a1 + 80002630: 02f13423 sd a5,40(sp) + 80002634: 1c058a63 beqz a1,80002808 <_vsnprintf+0x6d4> + 80002638: 14050863 beqz a0,80002788 <_vsnprintf+0x654> + 8000263c: 000d0613 mv a2,s10 + 80002640: 00098863 beqz s3,80002650 <_vsnprintf+0x51c> + 80002644: fffc879b addiw a5,s9,-1 + 80002648: 120c8863 beqz s9,80002778 <_vsnprintf+0x644> + 8000264c: 00078c93 mv s9,a5 + 80002650: 000c0693 mv a3,s8 + 80002654: 00048593 mv a1,s1 + 80002658: 00160b13 addi s6,a2,1 + 8000265c: 000900e7 jalr s2 + 80002660: 41ab07b3 sub a5,s6,s10 + 80002664: 00fa87b3 add a5,s5,a5 + 80002668: 0007c503 lbu a0,0(a5) + 8000266c: 10050863 beqz a0,8000277c <_vsnprintf+0x648> + 80002670: 000b0613 mv a2,s6 + 80002674: fcdff06f j 80002640 <_vsnprintf+0x50c> + 80002678: 0009b703 ld a4,0(s3) + 8000267c: 0215e593 ori a1,a1,33 + 80002680: 0005859b sext.w a1,a1 + 80002684: 01000793 li a5,16 + 80002688: 000d0613 mv a2,s10 + 8000268c: 00b13423 sd a1,8(sp) + 80002690: 00f13023 sd a5,0(sp) + 80002694: 000c8893 mv a7,s9 + 80002698: 01000813 li a6,16 + 8000269c: 00000793 li a5,0 + 800026a0: 000c0693 mv a3,s8 + 800026a4: 00048593 mv a1,s1 + 800026a8: 00090513 mv a0,s2 + 800026ac: 929ff0ef jal ra,80001fd4 <_ntoa_long_long> + 800026b0: 00898993 addi s3,s3,8 + 800026b4: 00050d13 mv s10,a0 + 800026b8: b11ff06f j 800021c8 <_vsnprintf+0x94> + 800026bc: 0009a883 lw a7,0(s3) + 800026c0: 00264503 lbu a0,2(a2) + 800026c4: 00360b93 addi s7,a2,3 + 800026c8: fff8c793 not a5,a7 + 800026cc: 43f7d793 srai a5,a5,0x3f + 800026d0: 00f8fcb3 and s9,a7,a5 + 800026d4: 00898993 addi s3,s3,8 + 800026d8: 00260613 addi a2,a2,2 + 800026dc: b61ff06f j 8000223c <_vsnprintf+0x108> + 800026e0: 020c9793 slli a5,s9,0x20 + 800026e4: 0207d793 srli a5,a5,0x20 + 800026e8: 32050263 beqz a0,80002a0c <_vsnprintf+0x8d8> + 800026ec: fff78793 addi a5,a5,-1 + 800026f0: ef1ff06f j 800025e0 <_vsnprintf+0x4ac> + 800026f4: ff35ff13 andi t5,a1,-13 + 800026f8: 000f0f1b sext.w t5,t5 + 800026fc: 4005f793 andi a5,a1,1024 + 80002700: 020f6f13 ori t5,t5,32 + 80002704: 20078863 beqz a5,80002914 <_vsnprintf+0x7e0> + 80002708: 01000813 li a6,16 + 8000270c: ffef7f13 andi t5,t5,-2 + 80002710: 000f0f1b sext.w t5,t5 + 80002714: 200f7793 andi a5,t5,512 + 80002718: 06900713 li a4,105 + 8000271c: 0007879b sext.w a5,a5 + 80002720: d8e504e3 beq a0,a4,800024a8 <_vsnprintf+0x374> + 80002724: 06400713 li a4,100 + 80002728: d8e500e3 beq a0,a4,800024a8 <_vsnprintf+0x374> + 8000272c: 22079663 bnez a5,80002958 <_vsnprintf+0x824> + 80002730: 100f7793 andi a5,t5,256 + 80002734: 000f0713 mv a4,t5 + 80002738: 2a079463 bnez a5,800029e0 <_vsnprintf+0x8ac> + 8000273c: 040f7793 andi a5,t5,64 + 80002740: 24079063 bnez a5,80002980 <_vsnprintf+0x84c> + 80002744: 08077713 andi a4,a4,128 + 80002748: 2c070663 beqz a4,80002a14 <_vsnprintf+0x8e0> + 8000274c: 0009a703 lw a4,0(s3) + 80002750: 01813783 ld a5,24(sp) + 80002754: 00e7f733 and a4,a5,a4 + 80002758: 02071713 slli a4,a4,0x20 + 8000275c: 000d0613 mv a2,s10 + 80002760: 01e13423 sd t5,8(sp) + 80002764: 01b13023 sd s11,0(sp) + 80002768: 000c8893 mv a7,s9 + 8000276c: 00000793 li a5,0 + 80002770: 02075713 srli a4,a4,0x20 + 80002774: d89ff06f j 800024fc <_vsnprintf+0x3c8> + 80002778: 00060b13 mv s6,a2 + 8000277c: 02813783 ld a5,40(sp) + 80002780: 04078a63 beqz a5,800027d4 <_vsnprintf+0x6a0> + 80002784: 000b0d13 mv s10,s6 + 80002788: 01013703 ld a4,16(sp) + 8000278c: 0db77e63 bgeu a4,s11,80002868 <_vsnprintf+0x734> + 80002790: fffd879b addiw a5,s11,-1 + 80002794: 40e7873b subw a4,a5,a4 + 80002798: 02071713 slli a4,a4,0x20 + 8000279c: 02075713 srli a4,a4,0x20 + 800027a0: 001d0813 addi a6,s10,1 + 800027a4: 01070b33 add s6,a4,a6 + 800027a8: 0080006f j 800027b0 <_vsnprintf+0x67c> + 800027ac: 00180813 addi a6,a6,1 + 800027b0: 000d0613 mv a2,s10 + 800027b4: 01013823 sd a6,16(sp) + 800027b8: 000c0693 mv a3,s8 + 800027bc: 00048593 mv a1,s1 + 800027c0: 02000513 li a0,32 + 800027c4: 00080d13 mv s10,a6 + 800027c8: 000900e7 jalr s2 + 800027cc: 01013803 ld a6,16(sp) + 800027d0: fd0b1ee3 bne s6,a6,800027ac <_vsnprintf+0x678> + 800027d4: 02013983 ld s3,32(sp) + 800027d8: 000b0d13 mv s10,s6 + 800027dc: 9edff06f j 800021c8 <_vsnprintf+0x94> + 800027e0: 0006879b sext.w a5,a3 + 800027e4: 00f13823 sd a5,16(sp) + 800027e8: e21ff06f j 80002608 <_vsnprintf+0x4d4> + 800027ec: 0c05e593 ori a1,a1,192 + 800027f0: 00264503 lbu a0,2(a2) + 800027f4: 0005859b sext.w a1,a1 + 800027f8: 00360b93 addi s7,a2,3 + 800027fc: ad5ff06f j 800022d0 <_vsnprintf+0x19c> + 80002800: 00000413 li s0,0 + 80002804: b91ff06f j 80002394 <_vsnprintf+0x260> + 80002808: 01013703 ld a4,16(sp) + 8000280c: 0017079b addiw a5,a4,1 + 80002810: 21b77c63 bgeu a4,s11,80002a28 <_vsnprintf+0x8f4> + 80002814: fffd879b addiw a5,s11,-1 + 80002818: 40e787bb subw a5,a5,a4 + 8000281c: 02079793 slli a5,a5,0x20 + 80002820: 0207d793 srli a5,a5,0x20 + 80002824: 001d0813 addi a6,s10,1 + 80002828: 01078b33 add s6,a5,a6 + 8000282c: 00c0006f j 80002838 <_vsnprintf+0x704> + 80002830: 01013803 ld a6,16(sp) + 80002834: 00180813 addi a6,a6,1 + 80002838: 000d0613 mv a2,s10 + 8000283c: 000c0693 mv a3,s8 + 80002840: 00080d13 mv s10,a6 + 80002844: 01013823 sd a6,16(sp) + 80002848: 00048593 mv a1,s1 + 8000284c: 02000513 li a0,32 + 80002850: 000900e7 jalr s2 + 80002854: fd6d1ee3 bne s10,s6,80002830 <_vsnprintf+0x6fc> + 80002858: 000ac503 lbu a0,0(s5) + 8000285c: 001d879b addiw a5,s11,1 + 80002860: 00f13823 sd a5,16(sp) + 80002864: dc051ce3 bnez a0,8000263c <_vsnprintf+0x508> + 80002868: 000d0b13 mv s6,s10 + 8000286c: f69ff06f j 800027d4 <_vsnprintf+0x6a0> + 80002870: 00100793 li a5,1 + 80002874: 1bb7f463 bgeu a5,s11,80002a1c <_vsnprintf+0x8e8> + 80002878: ffed879b addiw a5,s11,-2 + 8000287c: 02079a93 slli s5,a5,0x20 + 80002880: 020ada93 srli s5,s5,0x20 + 80002884: 010a8ab3 add s5,s5,a6 + 80002888: 00c0006f j 80002894 <_vsnprintf+0x760> + 8000288c: 01013803 ld a6,16(sp) + 80002890: 00180813 addi a6,a6,1 + 80002894: 000d0613 mv a2,s10 + 80002898: 000c0693 mv a3,s8 + 8000289c: 00080d13 mv s10,a6 + 800028a0: 01013823 sd a6,16(sp) + 800028a4: 00048593 mv a1,s1 + 800028a8: 02000513 li a0,32 + 800028ac: 000900e7 jalr s2 + 800028b0: fdaa9ee3 bne s5,s10,8000288c <_vsnprintf+0x758> + 800028b4: 001a8d13 addi s10,s5,1 + 800028b8: 0009c503 lbu a0,0(s3) + 800028bc: 000c0693 mv a3,s8 + 800028c0: 000a8613 mv a2,s5 + 800028c4: 00048593 mv a1,s1 + 800028c8: 000900e7 jalr s2 + 800028cc: 02013983 ld s3,32(sp) + 800028d0: 8f9ff06f j 800021c8 <_vsnprintf+0x94> + 800028d4: 0009b783 ld a5,0(s3) + 800028d8: 000d0613 mv a2,s10 + 800028dc: 01e13423 sd t5,8(sp) + 800028e0: 43f7d713 srai a4,a5,0x3f + 800028e4: 00f745b3 xor a1,a4,a5 + 800028e8: 01b13023 sd s11,0(sp) + 800028ec: 000c8893 mv a7,s9 + 800028f0: 03f7d793 srli a5,a5,0x3f + 800028f4: 40e58733 sub a4,a1,a4 + 800028f8: 000c0693 mv a3,s8 + 800028fc: 00048593 mv a1,s1 + 80002900: 00090513 mv a0,s2 + 80002904: ed0ff0ef jal ra,80001fd4 <_ntoa_long_long> + 80002908: 00050d13 mv s10,a0 + 8000290c: 000a8993 mv s3,s5 + 80002910: 8b9ff06f j 800021c8 <_vsnprintf+0x94> + 80002914: 2005f793 andi a5,a1,512 + 80002918: 0007879b sext.w a5,a5 + 8000291c: 01000813 li a6,16 + 80002920: e0dff06f j 8000272c <_vsnprintf+0x5f8> + 80002924: 00a00813 li a6,10 + 80002928: de5ff06f j 8000270c <_vsnprintf+0x5d8> + 8000292c: 00800813 li a6,8 + 80002930: 00058f13 mv t5,a1 + 80002934: 400f7713 andi a4,t5,1024 + 80002938: 06400613 li a2,100 + 8000293c: 000f0793 mv a5,t5 + 80002940: 0007071b sext.w a4,a4 + 80002944: 0ec51c63 bne a0,a2,80002a3c <_vsnprintf+0x908> + 80002948: dc0712e3 bnez a4,8000270c <_vsnprintf+0x5d8> + 8000294c: 2007f793 andi a5,a5,512 + 80002950: 0007879b sext.w a5,a5 + 80002954: b55ff06f j 800024a8 <_vsnprintf+0x374> + 80002958: 0009b703 ld a4,0(s3) + 8000295c: 000d0613 mv a2,s10 + 80002960: 01e13423 sd t5,8(sp) + 80002964: 01b13023 sd s11,0(sp) + 80002968: 000c8893 mv a7,s9 + 8000296c: 00000793 li a5,0 + 80002970: f89ff06f j 800028f8 <_vsnprintf+0x7c4> + 80002974: 0ff7f793 andi a5,a5,255 + 80002978: 00078713 mv a4,a5 + 8000297c: b6dff06f j 800024e8 <_vsnprintf+0x3b4> + 80002980: 0009c703 lbu a4,0(s3) + 80002984: dd5ff06f j 80002758 <_vsnprintf+0x624> + 80002988: 02013983 ld s3,32(sp) + 8000298c: 000b0d13 mv s10,s6 + 80002990: 839ff06f j 800021c8 <_vsnprintf+0x94> + 80002994: 0009b783 ld a5,0(s3) + 80002998: 000d0613 mv a2,s10 + 8000299c: 01e13423 sd t5,8(sp) + 800029a0: 43f7d713 srai a4,a5,0x3f + 800029a4: 00f745b3 xor a1,a4,a5 + 800029a8: 01b13023 sd s11,0(sp) + 800029ac: 000c8893 mv a7,s9 + 800029b0: 03f7d793 srli a5,a5,0x3f + 800029b4: 40e58733 sub a4,a1,a4 + 800029b8: b45ff06f j 800024fc <_vsnprintf+0x3c8> + 800029bc: 00200813 li a6,2 + 800029c0: f71ff06f j 80002930 <_vsnprintf+0x7fc> + 800029c4: 4005f713 andi a4,a1,1024 + 800029c8: 0007071b sext.w a4,a4 + 800029cc: 01000813 li a6,16 + 800029d0: ff35f593 andi a1,a1,-13 + 800029d4: 00058f1b sext.w t5,a1 + 800029d8: d2071ae3 bnez a4,8000270c <_vsnprintf+0x5d8> + 800029dc: d39ff06f j 80002714 <_vsnprintf+0x5e0> + 800029e0: 0009b703 ld a4,0(s3) + 800029e4: 000d0613 mv a2,s10 + 800029e8: 01e13423 sd t5,8(sp) + 800029ec: 01b13023 sd s11,0(sp) + 800029f0: 000c8893 mv a7,s9 + 800029f4: 00000793 li a5,0 + 800029f8: b05ff06f j 800024fc <_vsnprintf+0x3c8> + 800029fc: 41f7d61b sraiw a2,a5,0x1f + 80002a00: 00c7c733 xor a4,a5,a2 + 80002a04: 40c7073b subw a4,a4,a2 + 80002a08: ae1ff06f j 800024e8 <_vsnprintf+0x3b4> + 80002a0c: 00013823 sd zero,16(sp) + 80002a10: bf9ff06f j 80002608 <_vsnprintf+0x4d4> + 80002a14: 0009a703 lw a4,0(s3) + 80002a18: d41ff06f j 80002758 <_vsnprintf+0x624> + 80002a1c: 000d0a93 mv s5,s10 + 80002a20: 00080d13 mv s10,a6 + 80002a24: e95ff06f j 800028b8 <_vsnprintf+0x784> + 80002a28: 00f13823 sd a5,16(sp) + 80002a2c: c00518e3 bnez a0,8000263c <_vsnprintf+0x508> + 80002a30: e39ff06f j 80002868 <_vsnprintf+0x734> + 80002a34: 00a00813 li a6,10 + 80002a38: efdff06f j 80002934 <_vsnprintf+0x800> + 80002a3c: 000f0593 mv a1,t5 + 80002a40: f91ff06f j 800029d0 <_vsnprintf+0x89c> + +0000000080002a44 <_out_char>: + 80002a44: 00051463 bnez a0,80002a4c <_out_char+0x8> + 80002a48: 00008067 ret + 80002a4c: e48fe06f j 80001094 + +0000000080002a50 : + 80002a50: fa010113 addi sp,sp,-96 + 80002a54: 02810313 addi t1,sp,40 + 80002a58: 02b13423 sd a1,40(sp) + 80002a5c: 02c13823 sd a2,48(sp) + 80002a60: 02d13c23 sd a3,56(sp) + 80002a64: 04e13023 sd a4,64(sp) + 80002a68: 00050693 mv a3,a0 + 80002a6c: 00010593 mv a1,sp + 80002a70: 00030713 mv a4,t1 + 80002a74: fff00613 li a2,-1 + 80002a78: 00000517 auipc a0,0x0 + 80002a7c: fcc50513 addi a0,a0,-52 # 80002a44 <_out_char> + 80002a80: 00113c23 sd ra,24(sp) + 80002a84: 04f13423 sd a5,72(sp) + 80002a88: 05013823 sd a6,80(sp) + 80002a8c: 05113c23 sd a7,88(sp) + 80002a90: 00613423 sd t1,8(sp) + 80002a94: ea0ff0ef jal ra,80002134 <_vsnprintf> + 80002a98: 01813083 ld ra,24(sp) + 80002a9c: 06010113 addi sp,sp,96 + 80002aa0: 00008067 ret + +0000000080002aa4 : + 80002aa4: 00300793 li a5,3 + 80002aa8: 06c7f863 bgeu a5,a2,80002b18 + 80002aac: 00054783 lbu a5,0(a0) + 80002ab0: ffc67693 andi a3,a2,-4 + 80002ab4: 0005c703 lbu a4,0(a1) + 80002ab8: 00d506b3 add a3,a0,a3 + 80002abc: 04078863 beqz a5,80002b0c + 80002ac0: 0ae79463 bne a5,a4,80002b68 + 80002ac4: 00154783 lbu a5,1(a0) + 80002ac8: 0015c703 lbu a4,1(a1) + 80002acc: 04078063 beqz a5,80002b0c + 80002ad0: 08e79c63 bne a5,a4,80002b68 + 80002ad4: 00254783 lbu a5,2(a0) + 80002ad8: 00450513 addi a0,a0,4 + 80002adc: 00458593 addi a1,a1,4 + 80002ae0: ffe5c703 lbu a4,-2(a1) + 80002ae4: 02078463 beqz a5,80002b0c + 80002ae8: 08e79063 bne a5,a4,80002b68 + 80002aec: fff54703 lbu a4,-1(a0) + 80002af0: fff5c783 lbu a5,-1(a1) + 80002af4: 04070a63 beqz a4,80002b48 + 80002af8: 04f71e63 bne a4,a5,80002b54 + 80002afc: 06d50c63 beq a0,a3,80002b74 + 80002b00: 00054783 lbu a5,0(a0) + 80002b04: 0005c703 lbu a4,0(a1) + 80002b08: fa079ce3 bnez a5,80002ac0 + 80002b0c: 00000793 li a5,0 + 80002b10: 40e7853b subw a0,a5,a4 + 80002b14: 00008067 ret + 80002b18: 00000793 li a5,0 + 80002b1c: 00000713 li a4,0 + 80002b20: 04060063 beqz a2,80002b60 + 80002b24: 00c50633 add a2,a0,a2 + 80002b28: 00c0006f j 80002b34 + 80002b2c: 02f71463 bne a4,a5,80002b54 + 80002b30: 02a60863 beq a2,a0,80002b60 + 80002b34: 00054703 lbu a4,0(a0) + 80002b38: 00158593 addi a1,a1,1 + 80002b3c: 00150513 addi a0,a0,1 + 80002b40: fff5c783 lbu a5,-1(a1) + 80002b44: fe0714e3 bnez a4,80002b2c + 80002b48: 00000513 li a0,0 + 80002b4c: 40f5053b subw a0,a0,a5 + 80002b50: 00008067 ret + 80002b54: 0007051b sext.w a0,a4 + 80002b58: 40f5053b subw a0,a0,a5 + 80002b5c: 00008067 ret + 80002b60: 40f7053b subw a0,a4,a5 + 80002b64: 00008067 ret + 80002b68: 0007879b sext.w a5,a5 + 80002b6c: 40e7853b subw a0,a5,a4 + 80002b70: 00008067 ret + 80002b74: 00367613 andi a2,a2,3 + 80002b78: fa9ff06f j 80002b20 + +0000000080002b7c : + 80002b7c: 00700713 li a4,7 + 80002b80: 00050793 mv a5,a0 + 80002b84: 0ac77a63 bgeu a4,a2,80002c38 + 80002b88: 0ff5f893 andi a7,a1,255 + 80002b8c: 00889693 slli a3,a7,0x8 + 80002b90: 0116e6b3 or a3,a3,a7 + 80002b94: 01069713 slli a4,a3,0x10 + 80002b98: 00d766b3 or a3,a4,a3 + 80002b9c: 02069713 slli a4,a3,0x20 + 80002ba0: 00757813 andi a6,a0,7 + 80002ba4: 00d76733 or a4,a4,a3 + 80002ba8: 0a080663 beqz a6,80002c54 + 80002bac: 00c50633 add a2,a0,a2 + 80002bb0: 01178023 sb a7,0(a5) + 80002bb4: 00178793 addi a5,a5,1 + 80002bb8: 0077f813 andi a6,a5,7 + 80002bbc: 40f606b3 sub a3,a2,a5 + 80002bc0: fe0818e3 bnez a6,80002bb0 + 80002bc4: 0066d813 srli a6,a3,0x6 + 80002bc8: 04080063 beqz a6,80002c08 + 80002bcc: 00681613 slli a2,a6,0x6 + 80002bd0: 00078893 mv a7,a5 + 80002bd4: 00f60633 add a2,a2,a5 + 80002bd8: 00e7b023 sd a4,0(a5) + 80002bdc: 00e7b423 sd a4,8(a5) + 80002be0: 00e7b823 sd a4,16(a5) + 80002be4: 00e7bc23 sd a4,24(a5) + 80002be8: 02e7b023 sd a4,32(a5) + 80002bec: 02e7b423 sd a4,40(a5) + 80002bf0: 02e7b823 sd a4,48(a5) + 80002bf4: 02e7bc23 sd a4,56(a5) + 80002bf8: 04078793 addi a5,a5,64 + 80002bfc: fcf61ee3 bne a2,a5,80002bd8 + 80002c00: 00681793 slli a5,a6,0x6 + 80002c04: 011787b3 add a5,a5,a7 + 80002c08: 0036d813 srli a6,a3,0x3 + 80002c0c: 00787813 andi a6,a6,7 + 80002c10: 02080263 beqz a6,80002c34 + 80002c14: 00381613 slli a2,a6,0x3 + 80002c18: 00078893 mv a7,a5 + 80002c1c: 00f60633 add a2,a2,a5 + 80002c20: 00e7b023 sd a4,0(a5) + 80002c24: 00878793 addi a5,a5,8 + 80002c28: fef61ce3 bne a2,a5,80002c20 + 80002c2c: 00381793 slli a5,a6,0x3 + 80002c30: 011787b3 add a5,a5,a7 + 80002c34: 0076f613 andi a2,a3,7 + 80002c38: 0ff5f593 andi a1,a1,255 + 80002c3c: 00c78733 add a4,a5,a2 + 80002c40: 00060863 beqz a2,80002c50 + 80002c44: 00b78023 sb a1,0(a5) + 80002c48: 00178793 addi a5,a5,1 + 80002c4c: fef71ce3 bne a4,a5,80002c44 + 80002c50: 00008067 ret + 80002c54: 00060693 mv a3,a2 + 80002c58: f6dff06f j 80002bc4 + +0000000080002c5c : + 80002c5c: fd010113 addi sp,sp,-48 + 80002c60: 02813023 sd s0,32(sp) + 80002c64: 01213823 sd s2,16(sp) + 80002c68: 02113423 sd ra,40(sp) + 80002c6c: 00913c23 sd s1,24(sp) + 80002c70: 01313423 sd s3,8(sp) + 80002c74: 00f00793 li a5,15 + 80002c78: 00050913 mv s2,a0 + 80002c7c: 00050713 mv a4,a0 + 80002c80: 00058413 mv s0,a1 + 80002c84: 04c7fe63 bgeu a5,a2,80002ce0 + 80002c88: 40a00533 neg a0,a0 + 80002c8c: 00757513 andi a0,a0,7 + 80002c90: 40a604b3 sub s1,a2,a0 + 80002c94: 08050e63 beqz a0,80002d30 + 80002c98: 012509b3 add s3,a0,s2 + 80002c9c: 00058793 mv a5,a1 + 80002ca0: 0007c683 lbu a3,0(a5) + 80002ca4: 00170713 addi a4,a4,1 + 80002ca8: 00178793 addi a5,a5,1 + 80002cac: fed70fa3 sb a3,-1(a4) + 80002cb0: fee998e3 bne s3,a4,80002ca0 + 80002cb4: 00a58433 add s0,a1,a0 + 80002cb8: 00747793 andi a5,s0,7 + 80002cbc: 0034d613 srli a2,s1,0x3 + 80002cc0: 00040593 mv a1,s0 + 80002cc4: 00098513 mv a0,s3 + 80002cc8: 06079063 bnez a5,80002d28 + 80002ccc: 240000ef jal ra,80002f0c <_wordcopy_fwd_aligned> + 80002cd0: ff84f713 andi a4,s1,-8 + 80002cd4: 00e40433 add s0,s0,a4 + 80002cd8: 0074f613 andi a2,s1,7 + 80002cdc: 01370733 add a4,a4,s3 + 80002ce0: fff70713 addi a4,a4,-1 + 80002ce4: 00040793 mv a5,s0 + 80002ce8: 008605b3 add a1,a2,s0 + 80002cec: 40870733 sub a4,a4,s0 + 80002cf0: 00060c63 beqz a2,80002d08 + 80002cf4: 0007c603 lbu a2,0(a5) + 80002cf8: 00178793 addi a5,a5,1 + 80002cfc: 00f706b3 add a3,a4,a5 + 80002d00: 00c68023 sb a2,0(a3) + 80002d04: fef598e3 bne a1,a5,80002cf4 + 80002d08: 02813083 ld ra,40(sp) + 80002d0c: 02013403 ld s0,32(sp) + 80002d10: 01813483 ld s1,24(sp) + 80002d14: 00813983 ld s3,8(sp) + 80002d18: 00090513 mv a0,s2 + 80002d1c: 01013903 ld s2,16(sp) + 80002d20: 03010113 addi sp,sp,48 + 80002d24: 00008067 ret + 80002d28: 32c000ef jal ra,80003054 <_wordcopy_fwd_dest_aligned> + 80002d2c: fa5ff06f j 80002cd0 + 80002d30: 00090993 mv s3,s2 + 80002d34: f85ff06f j 80002cb8 + +0000000080002d38 : + 80002d38: 1a050e63 beqz a0,80002ef4 + 80002d3c: fd010113 addi sp,sp,-48 + 80002d40: 02813023 sd s0,32(sp) + 80002d44: 00913c23 sd s1,24(sp) + 80002d48: 01f57793 andi a5,a0,31 + 80002d4c: 02113423 sd ra,40(sp) + 80002d50: 01213823 sd s2,16(sp) + 80002d54: 01313423 sd s3,8(sp) + 80002d58: 01413023 sd s4,0(sp) + 80002d5c: 00050493 mv s1,a0 + 80002d60: 00050413 mv s0,a0 + 80002d64: 00000513 li a0,0 + 80002d68: 14079a63 bnez a5,80002ebc + 80002d6c: 27f00713 li a4,639 + 80002d70: 00058913 mv s2,a1 + 80002d74: 00078513 mv a0,a5 + 80002d78: 14b77263 bgeu a4,a1,80002ebc + 80002d7c: 0074f513 andi a0,s1,7 + 80002d80: 00153513 seqz a0,a0 + 80002d84: 00060a13 mv s4,a2 + 80002d88: 00068993 mv s3,a3 + 80002d8c: b20fe0ef jal ra,800010ac <_assert> + 80002d90: 20048793 addi a5,s1,512 + 80002d94: 2004b023 sd zero,512(s1) + 80002d98: 2144b423 sd s4,520(s1) + 80002d9c: 2134b823 sd s3,528(s1) + 80002da0: 00043023 sd zero,0(s0) + 80002da4: 00840413 addi s0,s0,8 + 80002da8: fe879ce3 bne a5,s0,80002da0 + 80002dac: fff00793 li a5,-1 + 80002db0: dc090413 addi s0,s2,-576 + 80002db4: 03f79793 slli a5,a5,0x3f + 80002db8: 1287f863 bgeu a5,s0,80002ee8 + 80002dbc: 00078413 mv s0,a5 + 80002dc0: 00100513 li a0,1 + 80002dc4: ae8fe0ef jal ra,800010ac <_assert> + 80002dc8: f8300793 li a5,-125 + 80002dcc: 0017d793 srli a5,a5,0x1 + 80002dd0: fc040513 addi a0,s0,-64 + 80002dd4: 00f53533 sltu a0,a0,a5 + 80002dd8: ad4fe0ef jal ra,800010ac <_assert> + 80002ddc: 01f4f513 andi a0,s1,31 + 80002de0: 00153513 seqz a0,a0 + 80002de4: ac8fe0ef jal ra,800010ac <_assert> + 80002de8: 00100513 li a0,1 + 80002dec: 2404b023 sd zero,576(s1) + 80002df0: 2404b423 sd zero,584(s1) + 80002df4: 2484b823 sd s0,592(s1) + 80002df8: 24048c23 sb zero,600(s1) + 80002dfc: 2604b023 sd zero,608(s1) + 80002e00: 2604b423 sd zero,616(s1) + 80002e04: aa8fe0ef jal ra,800010ac <_assert> + 80002e08: 00100513 li a0,1 + 80002e0c: aa0fe0ef jal ra,800010ac <_assert> + 80002e10: 2504b503 ld a0,592(s1) + 80002e14: 24048a13 addi s4,s1,576 + 80002e18: 04053513 sltiu a0,a0,64 + 80002e1c: 00154513 xori a0,a0,1 + 80002e20: 00157513 andi a0,a0,1 + 80002e24: a88fe0ef jal ra,800010ac <_assert> + 80002e28: 2504b503 ld a0,592(s1) + 80002e2c: 03f57513 andi a0,a0,63 + 80002e30: 00153513 seqz a0,a0 + 80002e34: a78fe0ef jal ra,800010ac <_assert> + 80002e38: 2504b703 ld a4,592(s1) + 80002e3c: 00100793 li a5,1 + 80002e40: 00675713 srli a4,a4,0x6 + 80002e44: 0ae7fc63 bgeu a5,a4,80002efc + 80002e48: 00000793 li a5,0 + 80002e4c: 00100693 li a3,1 + 80002e50: 0017879b addiw a5,a5,1 + 80002e54: 00175713 srli a4,a4,0x1 + 80002e58: 0ff7f793 andi a5,a5,255 + 80002e5c: fed71ae3 bne a4,a3,80002e50 + 80002e60: 00078993 mv s3,a5 + 80002e64: 0407b513 sltiu a0,a5,64 + 80002e68: 00f71933 sll s2,a4,a5 + 80002e6c: a40fe0ef jal ra,800010ac <_assert> + 80002e70: 00399793 slli a5,s3,0x3 + 80002e74: 00f487b3 add a5,s1,a5 + 80002e78: 0007b703 ld a4,0(a5) + 80002e7c: 2604b423 sd zero,616(s1) + 80002e80: 26e4b023 sd a4,608(s1) + 80002e84: 00070463 beqz a4,80002e8c + 80002e88: 03473423 sd s4,40(a4) + 80002e8c: 0147b023 sd s4,0(a5) + 80002e90: 2004b503 ld a0,512(s1) + 80002e94: 00a96533 or a0,s2,a0 + 80002e98: 20a4b023 sd a0,512(s1) + 80002e9c: 00a03533 snez a0,a0 + 80002ea0: a0cfe0ef jal ra,800010ac <_assert> + 80002ea4: 00048513 mv a0,s1 + 80002ea8: 2084bc23 sd s0,536(s1) + 80002eac: 2204b023 sd zero,544(s1) + 80002eb0: 2204b423 sd zero,552(s1) + 80002eb4: 2204b823 sd zero,560(s1) + 80002eb8: 2204bc23 sd zero,568(s1) + 80002ebc: 02813083 ld ra,40(sp) + 80002ec0: 02013403 ld s0,32(sp) + 80002ec4: 01813483 ld s1,24(sp) + 80002ec8: 01013903 ld s2,16(sp) + 80002ecc: 00813983 ld s3,8(sp) + 80002ed0: 00013a03 ld s4,0(sp) + 80002ed4: 03010113 addi sp,sp,48 + 80002ed8: 00008067 ret + 80002edc: 00100513 li a0,1 + 80002ee0: fff40413 addi s0,s0,-1 + 80002ee4: 9c8fe0ef jal ra,800010ac <_assert> + 80002ee8: 03f47793 andi a5,s0,63 + 80002eec: fe0798e3 bnez a5,80002edc + 80002ef0: ed1ff06f j 80002dc0 + 80002ef4: 00000513 li a0,0 + 80002ef8: 00008067 ret + 80002efc: 00100913 li s2,1 + 80002f00: 00000993 li s3,0 + 80002f04: 00100513 li a0,1 + 80002f08: f65ff06f j 80002e6c + +0000000080002f0c <_wordcopy_fwd_aligned>: + 80002f0c: 00767793 andi a5,a2,7 + 80002f10: 00002717 auipc a4,0x2 + 80002f14: 80470713 addi a4,a4,-2044 # 80004714 + 80002f18: 00279793 slli a5,a5,0x2 + 80002f1c: 00e787b3 add a5,a5,a4 + 80002f20: 0007a783 lw a5,0(a5) + 80002f24: 00e787b3 add a5,a5,a4 + 80002f28: 00078067 jr a5 + 80002f2c: 0005b703 ld a4,0(a1) + 80002f30: ff050793 addi a5,a0,-16 + 80002f34: ff858593 addi a1,a1,-8 + 80002f38: 00160613 addi a2,a2,1 + 80002f3c: 0105b803 ld a6,16(a1) + 80002f40: 01878693 addi a3,a5,24 + 80002f44: 00e53023 sd a4,0(a0) + 80002f48: 0185b703 ld a4,24(a1) + 80002f4c: 02078513 addi a0,a5,32 + 80002f50: 0106b023 sd a6,0(a3) + 80002f54: 0205b803 ld a6,32(a1) + 80002f58: 02878693 addi a3,a5,40 + 80002f5c: 00e53023 sd a4,0(a0) + 80002f60: 0285b703 ld a4,40(a1) + 80002f64: 03078513 addi a0,a5,48 + 80002f68: 0106b023 sd a6,0(a3) + 80002f6c: 0305b803 ld a6,48(a1) + 80002f70: 03878693 addi a3,a5,56 + 80002f74: 00e53023 sd a4,0(a0) + 80002f78: 0385b703 ld a4,56(a1) + 80002f7c: 04078793 addi a5,a5,64 + 80002f80: 0106b023 sd a6,0(a3) + 80002f84: ff860613 addi a2,a2,-8 + 80002f88: 00078513 mv a0,a5 + 80002f8c: 04058593 addi a1,a1,64 + 80002f90: 02060063 beqz a2,80002fb0 <_wordcopy_fwd_aligned+0xa4> + 80002f94: 0005b803 ld a6,0(a1) + 80002f98: 00878693 addi a3,a5,8 + 80002f9c: 00e53023 sd a4,0(a0) + 80002fa0: 0085b703 ld a4,8(a1) + 80002fa4: 01078513 addi a0,a5,16 + 80002fa8: 0106b023 sd a6,0(a3) + 80002fac: f91ff06f j 80002f3c <_wordcopy_fwd_aligned+0x30> + 80002fb0: 00e53023 sd a4,0(a0) + 80002fb4: 00008067 ret + 80002fb8: fff60613 addi a2,a2,-1 + 80002fbc: 0005b703 ld a4,0(a1) + 80002fc0: fe0608e3 beqz a2,80002fb0 <_wordcopy_fwd_aligned+0xa4> + 80002fc4: 00858593 addi a1,a1,8 + 80002fc8: 00050793 mv a5,a0 + 80002fcc: fc9ff06f j 80002f94 <_wordcopy_fwd_aligned+0x88> + 80002fd0: 0005b803 ld a6,0(a1) + 80002fd4: 00050693 mv a3,a0 + 80002fd8: fd058593 addi a1,a1,-48 + 80002fdc: fc850793 addi a5,a0,-56 + 80002fe0: 00660613 addi a2,a2,6 + 80002fe4: f95ff06f j 80002f78 <_wordcopy_fwd_aligned+0x6c> + 80002fe8: 0005b703 ld a4,0(a1) + 80002fec: fd050793 addi a5,a0,-48 + 80002ff0: fd858593 addi a1,a1,-40 + 80002ff4: 00560613 addi a2,a2,5 + 80002ff8: f75ff06f j 80002f6c <_wordcopy_fwd_aligned+0x60> + 80002ffc: 0005b803 ld a6,0(a1) + 80003000: 00050693 mv a3,a0 + 80003004: fe058593 addi a1,a1,-32 + 80003008: fd850793 addi a5,a0,-40 + 8000300c: 00460613 addi a2,a2,4 + 80003010: f51ff06f j 80002f60 <_wordcopy_fwd_aligned+0x54> + 80003014: 0005b703 ld a4,0(a1) + 80003018: fe050793 addi a5,a0,-32 + 8000301c: fe858593 addi a1,a1,-24 + 80003020: 00360613 addi a2,a2,3 + 80003024: f31ff06f j 80002f54 <_wordcopy_fwd_aligned+0x48> + 80003028: 0005b803 ld a6,0(a1) + 8000302c: 00050693 mv a3,a0 + 80003030: ff058593 addi a1,a1,-16 + 80003034: fe850793 addi a5,a0,-24 + 80003038: 00260613 addi a2,a2,2 + 8000303c: f0dff06f j 80002f48 <_wordcopy_fwd_aligned+0x3c> + 80003040: f6060ae3 beqz a2,80002fb4 <_wordcopy_fwd_aligned+0xa8> + 80003044: 0005b803 ld a6,0(a1) + 80003048: 00050693 mv a3,a0 + 8000304c: ff850793 addi a5,a0,-8 + 80003050: f51ff06f j 80002fa0 <_wordcopy_fwd_aligned+0x94> + +0000000080003054 <_wordcopy_fwd_dest_aligned>: + 80003054: 0075f713 andi a4,a1,7 + 80003058: 0037179b slliw a5,a4,0x3 + 8000305c: 00371313 slli t1,a4,0x3 + 80003060: 00367693 andi a3,a2,3 + 80003064: 04000713 li a4,64 + 80003068: 00200813 li a6,2 + 8000306c: 40f707bb subw a5,a4,a5 + 80003070: ff85f593 andi a1,a1,-8 + 80003074: 0d068e63 beq a3,a6,80003150 <_wordcopy_fwd_dest_aligned+0xfc> + 80003078: 00300713 li a4,3 + 8000307c: 02e68c63 beq a3,a4,800030b4 <_wordcopy_fwd_dest_aligned+0x60> + 80003080: 00100713 li a4,1 + 80003084: 00e68663 beq a3,a4,80003090 <_wordcopy_fwd_dest_aligned+0x3c> + 80003088: 0e061863 bnez a2,80003178 <_wordcopy_fwd_dest_aligned+0x124> + 8000308c: 00008067 ret + 80003090: fff60613 addi a2,a2,-1 + 80003094: 0005b703 ld a4,0(a1) + 80003098: 0085b803 ld a6,8(a1) + 8000309c: 0c061863 bnez a2,8000316c <_wordcopy_fwd_dest_aligned+0x118> + 800030a0: 00675733 srl a4,a4,t1 + 800030a4: 00f817b3 sll a5,a6,a5 + 800030a8: 00f76733 or a4,a4,a5 + 800030ac: 00e53023 sd a4,0(a0) + 800030b0: 00008067 ret + 800030b4: 0005b703 ld a4,0(a1) + 800030b8: 0085b683 ld a3,8(a1) + 800030bc: 00058893 mv a7,a1 + 800030c0: 00160613 addi a2,a2,1 + 800030c4: ff050593 addi a1,a0,-16 + 800030c8: 0340006f j 800030fc <_wordcopy_fwd_dest_aligned+0xa8> + 800030cc: 006756b3 srl a3,a4,t1 + 800030d0: 00f81733 sll a4,a6,a5 + 800030d4: 00e6e6b3 or a3,a3,a4 + 800030d8: 00858e13 addi t3,a1,8 + 800030dc: 0008b703 ld a4,0(a7) + 800030e0: 00d53023 sd a3,0(a0) + 800030e4: 00f716b3 sll a3,a4,a5 + 800030e8: 00685833 srl a6,a6,t1 + 800030ec: 00d86833 or a6,a6,a3 + 800030f0: 01058513 addi a0,a1,16 + 800030f4: 0088b683 ld a3,8(a7) + 800030f8: 010e3023 sd a6,0(t3) + 800030fc: 00675733 srl a4,a4,t1 + 80003100: 00f69833 sll a6,a3,a5 + 80003104: 01076833 or a6,a4,a6 + 80003108: 01858e13 addi t3,a1,24 + 8000310c: 0108b703 ld a4,16(a7) + 80003110: 01053023 sd a6,0(a0) + 80003114: 00f71533 sll a0,a4,a5 + 80003118: 0066d6b3 srl a3,a3,t1 + 8000311c: 00a6e6b3 or a3,a3,a0 + 80003120: 0188b803 ld a6,24(a7) + 80003124: 02058593 addi a1,a1,32 + 80003128: 00de3023 sd a3,0(t3) + 8000312c: ffc60613 addi a2,a2,-4 + 80003130: 00058513 mv a0,a1 + 80003134: 02088893 addi a7,a7,32 + 80003138: f8061ae3 bnez a2,800030cc <_wordcopy_fwd_dest_aligned+0x78> + 8000313c: 00675733 srl a4,a4,t1 + 80003140: 00f817b3 sll a5,a6,a5 + 80003144: 00f76733 or a4,a4,a5 + 80003148: 00e53023 sd a4,0(a0) + 8000314c: f65ff06f j 800030b0 <_wordcopy_fwd_dest_aligned+0x5c> + 80003150: 0005b683 ld a3,0(a1) + 80003154: 0085b703 ld a4,8(a1) + 80003158: ff858893 addi a7,a1,-8 + 8000315c: 00050e13 mv t3,a0 + 80003160: fe850593 addi a1,a0,-24 + 80003164: 00260613 addi a2,a2,2 + 80003168: fadff06f j 80003114 <_wordcopy_fwd_dest_aligned+0xc0> + 8000316c: 01058893 addi a7,a1,16 + 80003170: 00050593 mv a1,a0 + 80003174: f59ff06f j 800030cc <_wordcopy_fwd_dest_aligned+0x78> + 80003178: 0005b803 ld a6,0(a1) + 8000317c: 0085b703 ld a4,8(a1) + 80003180: 00858893 addi a7,a1,8 + 80003184: 00050e13 mv t3,a0 + 80003188: ff850593 addi a1,a0,-8 + 8000318c: f59ff06f j 800030e4 <_wordcopy_fwd_dest_aligned+0x90> diff --git a/bin/custom-output/yield-test/amtest-yield-test.elf b/bin/custom-output/yield-test/amtest-yield-test.elf new file mode 100755 index 0000000000000000000000000000000000000000..ba5668d39e37778ff3c90b59ab9562246371393f GIT binary patch literal 218008 zcmeFZcYG98`!{@MXLl#N*_O;E3khXmLlrTQ0D%B*fKa@VUTqLIp-2fPq1eGB1h4@2 zDnU`f-W3EzMHEy-6cr0aMT!9eA!Pf`_IbW%c0g`F-k#&9|iFd`D+EOv(ta@v*~75DwX)xP6~(u|F$9)sV_%cOj0xbXNCMG zm2m_D2max}KODH013WhL7LSJT%s$a&T9L{#Ox%{Arm*F%RM-Y?Ahv=Ij4i(x zQ$0dOcy1iCxlRZ>1;OZ;DJU%c2#%l)Kv}>T$T> ztUJJ4mT8DBS9sfHBJEscMS3;xWAhnBb^c0*?awgP{a0c>z-JhC&I&^6Ep#0BrZg^J zcpbE5xya$}=m85oP(Tk9&;y1Yz%Za)Dd_?9&{?Z`K-R|xTvk%`|1>6P z1HG8~yMf1=QFYV?*bgC3Y7eq)IF%~m$kY(ZAGW`ygR>U8tAg&5!=(AdH93rJ+mq6`|IlMuhbjKmU0`<%lYs1~3}J7%gs;Kes~UBV z*+L4>nTTUWqn78a#PL*PI(Q5o+6!%+8I0XW`i(GRj9}Yb#}UUEL8{waXCb!E9{HUk z4O4_fbswcF$)n<>F6-Wsdhi$a%sbX{gudIJ=h7{u8p7s(u@v|-ls534@>xOg++4Ry zlyI3VXsi3wGBUpxf#0_$VT~{})NnBg)|;Fz2}@Z~?w%2??pI5y`>2@uzL3?b;q!RG zLL6#N=@hyU*~iRtJO-bFc3%DET}jyc?{r!1Q!zf0>@#Aq++HrX&qe!Ww1+61By9B} z8D43_Q(T1l0$#mBQ7`F8@towiV!+)yUg9GeR{;9ZCzmAq)ZUrwQ+wxswI{26qQjuN z(tobpe-3Q6z>%&>x8%T{lr=X}{y~rXuzi(Gb)Op9U#jL>?u0MaYG=BvD@IlKt0C3> z(Vnj*Y&Rv@u_kPH{?eM3kiSyrgud}f{Td|cT#Y%YbCMp88|YO2sdIT6=$YD0>N~-P zYis>)g>u(0Bi5*uO87Gt{*1Ndk7sSUCGc-)O87YyuQX9VmSY(J-O;X{>eK+YLcFJb zGrb;l&b2p9%ci!enhBq?61F;S5Zh&=cB?W$l zv*i}yS(yS~qsF?+*#?eR*$PTjw*0$Ps8^vLbUp_fcXgK{*|)AI*}n=!*|&Ve z6lx>D^>8lmB-yvzVyC!e|AMyZA2NlSFv*@i-A?gAAH!xUFZguFBEgVdBZ$0Nsc^#P z`AKJ)daMgrLoN0FQLY))&N3SE)*WhFKMdbB!!q)ee&W=@_EQ1>VIAQg)r6dSg0%$t z+C`7C(6OzJC`XWnr|S~D{$?51ZNz5X&e%GZAhv){?OMdxx+BieF=Y3n_cOq&b3?m9 zQKv?qvRn5g)9~*#lJ9rI*YPTh&4oY8$5Vhuhc$>CwpD{?Y(A3$KgwYp;IIy;u@0!K z2dq@Fg^a4YaHWzR$SA7^V!apyeH^q>0sd>K@8Z=n8QH%3%X-!w_Lr9Q0c5#lHtbCO zWtZwM>ZC6oxDs>IwE#Hh_F^_yTZm;Uc*AkJ`q|*ks#U2r>r$+TT*$VSlj(0v@O4~D z!^ZOoXV7QdT%SpH*Bv9-a7=~VG5cmL+JEhJkV6#2RgvU}A@;+Ppy@J~!7d8#9X&*((**1SU;vyYSNZW`jK(WsqE`VnV6 z>Ny|cyby6{)e5!?N2*`uBsdfvg+t*r+!u=cwSPmFI+ks0k8v~9*TT61gT_zUceJ+` z8Xh3d2NK5Y`gW8zO!mgXq)>gdDBEHolt28^Ab7+v*_o>dkA8V`4iG#{p6W&D)suM6 z5jv0aF~|$+Mnl$&5Q{jm8tWB{II$Y~4B1QT7Ro4W3b9cK*c5z7ZV`OPc<3edA1jqk zq^%IM5+{vawI)TA-w>AFPMNoQT%=IZx2!oFWe@r@>R zvp7@2jp7XauEpDB8aF%Hr#8c7T3_}jj%4wlINGP!Ix?`&BC@M~6Xp=+WOE$ZOmY6M zQL4}85Fd0rBfo=xM;m1yDA7Cr3M@-0)yXeluVnmg)f4vQ-2087@Al-}>nVTcR(IQn z^^1{Xg8fFi&d?YS_}*HNm;$lB8-90`jl2kWh>@}$Ph=kp7iCXvWD2={O#K|nixDl^ zQ@hx0PS^szZSA<`%}2uw&y7>`Q;VYQ$wug2UnX0f30v4obzj_kG}CU|dVtuTf*q;d zh);+D9pVB z>6)2@V`pqVsXyC0g&l4t)y2vy`zR&}Bj*#q8)?D*2{Acz(oX8cRfJ@gg)8Qi82lg1} zY3xaTG-6MRw^O+lz6kx4!y>$Dg_6n(^6$g~*M=-rVsnjOY*??PF)qWx-r$e_!`9^a z!dL9;?`#kA_fPTzu`ICmU8>aJ!TMf^9TSdcIYRkD?a-;# z5{DTjY#Hr0fPP7Cpnm|316bff`RYU!G9Ll5u=Z zqk`vVV$Ez+^6=-5wT%k!PQnBHqr79JHA-dYK(FEN+t#CPukP>L>}ueb`nPS6tt^k< zugDkr)ls(N{; zz-D9ooD~YJg~@t;GRh-Y+nMazWV=)079EdF);jDewc|^bnqNijna+oLomxTHXU9G7 z6UVf@(tOU1nDfr}6BHlE`Tb-^?S6Y+*%9JA3g0z_;-i-Ek?_F&h?nQdQ*E_7Ms6cJ zRNL&(sW2^*ecFd<8^x7=JHCc5AFaZAvPHNumiBF!rb^I$SZ9KH_?G(r+sibVC;KV= zQanKdC_ zv{Btc-!qbqK$i6uY5nU_pNVpndVvL(MR>J3R8IENbrJS*jIcPcXvpFcwrvNbx`s{1 zplf!z*8uOKC$jB0p%j)3*pjNYOP(q~*gVLF@|3W!%^6AA({rzD_V-v<5d-vM=sv%) z8`-vNl#%X_a;SZSe}C}i$z%ujqMd(y4nZ7j=gs*jU%aNzjI+GCRI0OW!#?is&a0T@ zSrzb%(eoJR8miyGO}&D3LO1AH7<{gDUc>I>@Lt5gPLpRi`Qzz1$URQZdav#EFxCU> zy-A;UQya#o%K1OF+$iz#0TouI43w8*)>7&amLHt8+A~x>c>jvN+g^N4qRHhxg>_;tn`}GvrS19GK;vFkrvJNaZ5DAZ zix{1|`r#ZaZ0B2RSbn;OwQZ&Sz$Zz@r#|02sTwD0~D0mfg2xpYl{Z;}dEg9^SrEkRZ9@0o~{*|Iq zf<7hYS0(+MT^e8RZXc`eTbn}Xb*!aut#bXA2<=zhPnAY}xXt>5g6?H)1pyP}5aQK~ z<+CHzua-`*S5@tB*ksS7FWd4s<+FwE%eVuIO4HO_T2J|58z>Bs=0}WLNs{Xv{pOjK zEp#1&F90n?pkq9EQv%-Hm5lXq-eD_v4rd+Pu{YTV`TwA{6`X+%c+|FBMuV{$=z<30 zH5i|Y@u?V}it(wo+?9I7ae9o`W4s>YjTmplcq7IeoeJ3XLl33d3dR#(M{9nijpX`l zrhHrOc#|!^#AGYD%S3q$U1?zRR+_5wn6ye0n_Ib_&j(LQb+45S+Z#I48#*Qd}I(qP<~#Covy?Z z$&%(WoV8f{RT+dm5D*=!v5u^2Ocd5OVofBZP<2`=Em(Va^>Af%U+g36S7G0K%+BKg z5hX!FLN29myVEiizEXf6q`8n|c3Sp>U!c0mbM-9EkMK`eAjcr#Cuhhx3h=yc#2yy0 zW%YZ~9#3>i>m0__zGSDmfb+9{l)v>rcuE! z;Srmt6^?egR*v8?#H&Q%c&xE6uO@VzQk0Vwh+B7o77NL%3zHX&2NDezjwKvAoP)R4 zDd1Zbj$jv78n?Q!FKA>jHaV{5K<1z0jwKp4brBt_3|ag#){a=)>e$G&b8>`ntPXW| z!Y&(|#F}E4~ii&xU)G<4_ z9!0#SHOa%-9AvG6-KePDz$RGO1Phx`z$O&12?jR7z$Sn*{Az!O`Z6`u1^BjfM`jAn zM?MEna2}(Ji4ERk7bwpgo^CwrSYa?YDNmo~l$c-PFo{}P@|+v^g1?U(&vL4*zzu%# z+2dr#s*8BHKzFTb+luojC7Da|MSs>tj!E*S^$pK9o|k!^!Yct&mU+YMoQwRLRJvw0 z@ymunpExzYteQAlaXQ+c$2#7iWn;-cTQ2bJp=&dY3Wq|}UV-7zg^}X`eyc91feX$N zF9fAIS2u=stbz_e=Kwz-%}-bzg+*~dT|*M?jD|n;W1FNO@b@Ph6333qxc}&QB*~kG zXE`t8!4~MA0=O!r_L@d79Z%_7NNbiiYa-?@}k@O6!% zV-xl?b&whGLVbYB5j+SxV8@azwS!y@qN1Tq>@1Zz+D<3uoAIra^7oMta0P!K3H?EN z+0cfS@M$Q``Bvg3`ZTP)5Tbq17rH@V%s55qY*@|3fY<3H+$|@dlYU!45!R#eScgim z9^J*k_i*q%@KxJ!hMlIxw-(=8TW$xePjtO{4(Hy_Va-cp+3qWKPCeq&hh@L?2>j9` zh#9phRCf@&Y3+!?67UVsX)X2=CN+4i<8k)vR5C2D!CAPnRK)oje9T_h!yuJYPklaY zy;hGkY~Aa8Wx$xtv1}n*3V-1jJk&`(UTIQ7p5808K^DUQ5BU4||0aJQ{eQvVb^jmm zHwfKKfo{@R3OaiiaxjQ{2hto3ax(=*(B<*a*AlAJ$jdy3w(YF5275OhbX8tQEz;TX z!CD8c*Qf})AHIp^N7Sm>yEwY`Bj2JOr?BK8R#7VZ(>N7-HwCYT?m>r~h~cR|HWK)H zjCCkfZJZBh#`B2VBO|a3F&Ue0@$Y%ht$b;GU^DulY#cQlw(L) zPaOA!3{GyV!l4XUC0(VqlM377PAh0m2leTjxmxM22mCJMC>2sHT`(tipm!4Xf8O_S zp35Mcv8Sdmprb+OxlY%92b|}Mul@Er&tYHnXMdmbTB?C6s~F8s@t~i^EOag2Tz@_CFuNFOe|7aZaM z4*o(7f1!rIP{CiQ;4hT$7fSdG7Cu2s{l(_`9%T3GdWNSoY-$Buv+@0^q(7S)rNb{g&V9+U8ul zhB!!I3SG0HGsyqC)ec?YCc0*!eiAPRppz=fA9c3Tm^>>qox26Td!#dispWn#SHDHYvG|l)Xsb725kl{(_S1w!JS=PV4Xg~Ff zvu+LWYD=7fPSnRM_*ASt52<>y`@yGcRm%PX#}daz?C)v-igrh}F2SlBd6&uA`s*hs~?TVSLi=A)CF`A7KvQL-Anu;|zME z&IDZ)5%Udku0qVc>Q}UbE*gigKG2RmfLI0b3OyU!T{pGJhJ7%V!R9rPE!I)&zp%I0 z5l2-$vl(%M)DAkSEUA@8ZQiBGolX@5&KRuI8+C zKK?;hvVNJ-O7)SRfi)=4Ar7>w8_2oi(7}$94sy`J$GPr!S3(za_+?xQat1wE=p)vD zCQoR@{ttPSzvvvL2fB#ZbIWla`ziDVFF7TzPnCG?cwm=)b6s34tZSrttDt?Uj^(9t zjO33}T1o!ER=`}NyI2qODH5+))Hk$CjZ?j$Fu~_%H`l2p`GFUIK#z6*smC+kLX1cG z^r0kk_&djayE;%Db^`}zJ#_V$jKjkehrNW(!OM6^dW*Rwe6H2qb_?TF4>#AfmF8|} zqdLK->M_rjpkxdFUD?;#!j84t|2gbuUyt*TWk%;!+j&fk$?}_@3RLq6!!0b z%4|#Z{{(-G*~zC^F}A(H!*(eilFbC5+rSaF{Uhf3>A&MKV;lTr(G@=lIB!Fa6u(cY z9^?CGrxx)lf~~X zBXmG5oy#o!Qe+RP$PV=p_#RH_c)U?tJ%XOoAaAn*-%mHDRFCL{^|Bc9Ek^x0(NP2Y zU*DL*jtGd=^gKt4e(eOMLw7`iN#Qj-%|)nvUOD5DY!%-QqE_aq_rrJYMQ%?}I8t6# zup>Z=d_F|sHJCXmS5v48*y$RZt>SP-lzcB#2~r)^rz^1erF0G165+YUSQ`)v+;c$d z3%dlFyur*n}f_>L9UgYs7gFo)7SRjAvV;0^bUJEAWkTN>16(E*NuK=Hd*>!tlrY z5`Ot|#E>ZpKC|FI;Lvqd4KBsH7cl149gyzj+E(mJt|x7TWL`?G27RZ3 zkYC(}yoOE6m83xzHbB@6X3phtno+W&+3g>VA7~E|X z>HW|hDtbOwXGgw`uz*S7?NGxntoV{NYzkbxbBUNrzAG%9pHLl?&f;8TZ*SN^#Ho?& zH3S^9uF?m(oXY~(?}0`+FNE_|DK|vV-D&LRc#1=g!`+2P4u|F^9TmIGd;m1`!8xNA zdjjNPT&ImYaVN@Z+lFW7unx8l@;lgaL7%clx*r9;iM&#Cf}VXlLUrl%d_+1+KD}-m zY$W772E9-zV|jf7fHn3VKHz64eAnr9Z_|E&n`7IF=YyIY+aoBqDLdo4Guq!w!ZE(d zzNhTOuT|#oeN;-m7`QEw#=kDrFA1eOcKu;~s1UQ9lo0>tr0`>5FQoRE8piQc0QI9)BQa$n)oRZe_>Qy4u3FNnw z@HYyKM;@aNYnIfH>I?1xtFacfM_%V#5_jCoVt1)XLy9^9d?Y^tpAwVCQeRt(y&PAI zyQ#A&ZDHCMxW~~q&a0=;I^mkW3G_w%aMZUC$bBi?1h1yP3imE4PD!}1Ct6SAt5fa< ztvYzMjjP4kQu_ceEJ0qZAL03a#0g)=vVb0uN{^Ud>~!JleAO(s^16At6@u!19C@VIr6$YrXbgfzB|t2 zJo2$x$ON%T?h&#hQy_WM=90X*$H7Y#Q~myG)EgKIJ8x4E^&Er#4EjTsDkd*OAUlrE z2Ar26is}OTKu2)T*QvV7s|fH#j*!N# zTLP44azEU~lln>La+51d=9CSvE-aZ}X02GV2ru&%l~l~B9Mm1jJ^Wa$og4$Kohs>< z@_SMI_`BpY@S1m8Hx1v5<+@FBx$~Mnhp&03{ZkGn;pCvC^OVl3T)d#V~`Ll`SZ}I-;Viq;!56;L8veE?H1DZ*fIAhF6wXT&*U{3;J4@&a0?eQnCOTEG(~( zhhY4I>#OE1EVDWmlso2M9dH%ztC%J6`{&<(IPibMflx1On*T5OY1RAh>FD}j>aUPo zAh+B9(r?;dzUThs`^xwg|E2y)`=-CNZ~M#lm45$}|8U?R4*bJ`|6LAL%&T-P?VEr7 z!n+-dmtgSJq6uS0jTu2hC~IkXS*3MRd6l(t$>PQ36;)O#s7c0IMGI(za<^3qf;yGn z(5ciq>uv-q*7Dib(vqr@WG_N)rQNKvOXe-OT|({FWfk+P%KoevgdgkGAjsOaQ)M@+ zl~&3C#tjE5%YhC34|SMFf^);%@`YtL%)MvU4KzZ!p=9Cp^UEq0l`W{0zAI@3ZK%AV zvce%(EnV2tL5eCX%POkol`oP|u$EK-^ngyKSJ0*LlmuVq3t3cBHE$_`x-oyUp{&$e zQsI~jG8|P)D$06FW5-pL({I{VT3Uf1&04v*#DPfl)=rCiSUWB5CeJXmyc8i>`Qmx# zSyhe(YuCkd@2;HZK>UVY*0SYgjwMxPSMljodcE|&wNq~I(g9chv5vTTlC>)^1wSgw z9Oa8jyCw0s`dyi<_&?#(ywb9AuuA&rR64*qeB4CqAnTt@lK;LL5%F{FI~_2$tYk4d z-`Xj+U^(c{R(#nxWAcl5JLL2KE9lEsza z9>`fJ#qtv!6=h|Mtd;ZbN!CIoB%w{LDzA`s1n4=7M!J#)QZArpPwT|F<;$$I=T%fz zS^Mn28#{Fj z9Xfej62K%Hc$ZrjOQJ7XbhniT?_HOaz-kb#<6~BNNd<(|Q>J$W^hs*&1|l8M`_d$z zXuY-T{8^>6zEY}3sU^h|hZc=1CS-W8%VnNi;_fK@8IIpIl**(Uli|2SC4J-f zm!uNE`yiFQa^*4!aComIz!4LQreGQ(PebHsh&&CEry=q*M4pDo)8H@LC4b~;NOBfJ zZXPve@jDzE|c5=AFs5Jz4>N}8PMSb*DH=C!^r)dllSavy zj4m22G2{yGC&=FuFwl z1-W#~Wk@c`jY+&xn@wmtEyDS1t?Wa->|2lgnvxX_w2HayeHn7t7^xxm+Qa ztL1XNTyB!fSLN~px%^5lkIUt0xx65kZn+G}F~2DZS?XO5L^PB)NUqHU0AOZpSkX zPmNq|J(c{Xb$|C<>G#(*T7MQ}-M{_c@oYNzKcj>8s{-AB*Z=S8D1T`E&eMOwC-VEX z{pov;i=z1A1)PWC`5DgzJOp)SJgw+Ee&*4C@UtTC3`1)FV0z-t#tY(SB7U=-2x1n= zB;ARTd?$V->PRPO+Bxy4_?x&_JTF>FSCUS~;HNAj_5GgdHi=oJcm9RBnS0fG1@|0Vq47H z12bhKjy)mn5iej|XVL*rCvsHWFa9BB6SvqXvcwEbz878MMbV9TH;j4u0J2*Qi%N1t zJSqN;*?VDRShN80DKR8w;{9Fmb@4sSyhl7GQm7{Zs~!5aAv`I>e|q#u0~9rIh+xDF zaL6Uv@%6E&0sPm+uf-q4XT*JgcSI}%N2B78;#e{W_Bog=2JT+q__p}5XaMy6;#uIc zORPul6XI#HJ9_N|&RTHxdhmR^$dN_lXV5X0{EPgC`kug~10F&Gn6FXvLjt?SFVLGO ze*orW%+P@h1?W?hiRI26Pqv_zZ4sp^DKrKZ7Ce-Q4Uhu97 zaylYj5(kqTNeq%SLAO-UBcEu5ELH=j1bY1nDh14X9r!@?N=M#@_WcI^J1piP{uRVC z(7BGJ81TJf9vMTrpr;*Fg`o>yf%i(%kz|nsv|SM6ka`So_k;dUqyhTe4sF9oDQM{o z8PL9TJ|#&bKZ$14n8Cwy;ws4er1$}7w31!Wy!oKyEMS}iC+(mx0bCA3)99fy;JC76*@?M_fM*)|AE0z3C(v&JSw~(ICxY`&ic4VwPvF1Xz^B&a1I#%alBQPj z4k?AVSV%^Tqe*M>IoU>jAwQF+$x|en=pbHBJdyYo^sE%WNZcr%OO%O|!1Z2Cs^Syq z)H33PrbIyD7-lh344WJS`tA~65?hNuC6waFiLf}26pLN(8%Sp6DD?LZa+q+;aZv0c zPBMusC+nfzDsmw4dqM?nw;`LLL5IX|Kz9|niPCyQmET1|cfr}l}{NhfB2xC%G}cV@3xN-kpeFp~@j*i+mjri-tVW8$L3 zjlkpG#2PY<`A$4Y^niCad6aA>mE>je@5DrLHgv2%b6Ok;J?ksJ0l!)%KAy;fC;lz* zIVoh$ikr!C5=)GRPTmWSd=5GMB)&!5@k5C|%pRgaywA8#kl#mnLkkULqC>`oLa_OtC3XBG1l+nEo= z{^Ctcsd#gIM9eMDOFSLFmANnejhL#)ikl*H6Q3)-SKPW7Jo1y#$Q#eORZI=#2yk0G>@ltGagJEWBT1_Q{EfD zHFhDfH&&nclI)9Y4e5pNln>RB(!`jN;acqZ=GgcUHHr|@DBwiHJ2gY8W@JG7K9O>xEXnK;nKkdW#{jq*2A4FaY z9ZH%zWoXHR7-_ecW z2I?C_?=-#P>J>k8e&(63>?}<@_?1|qwkG`1B5{|`-ZZLlrt3|1r|whpmzH1Jw=vDq z-<#%7?`r&6eMtW_!?(O}>0hzYuF_wg@p#pH0?mS!?2B210kP465f{e%alWBI&?|Qv zYRuC*{JYgflP9g3|J-ELjL^N6V)QS%kQ(Y64xIe){G61S_;RR$~{<<IUhQ6b@w@Z4`tMZE(tML;x80SqD*K*nlHJApOX>}}w)$DY zJI_8I+#Wda>#L`VBi{%y;aR2;-d7bruBZ}jX}SIUN0;7=XCO z^Y^>%3iF8#hUsnkb(o*MwbhetZp-}M(9Jlc)%?h=a}z@oLiMMAXt>~?6IMmH$9Iu6 z@tx#J;!C)FAD*9gKHxD24l*;-Z*J4A&7+xzvh=OrGj-67Y`sXc;F7~{i0?fA;OQ~V zZGyXne$h3gC3cf|AaNsecbHse&+ls)=iLz5m#S-hrd_w}+uD5D)}ApVHJtG>f7pM? z)jzSm`MNV>&hws9fA8R4v0HpuA{^hRV2Rgfy=b_+)x!m2%6l^ww|%P({^UWshE@S> zZCZ!chsjr$zlja^{c?8Kx!~nu|Gi#wygY7?os3$@T*c1Nz)RDc?sa|W3&-{tKg)`= zX=$BkbGq%Ua_Fnw;T#qK!chYl5bQxI^cg5}zn-qiNpSOH@vHX(C z^NruE!mnCo#anO8vUhCYzt(WBk=Wbi<8U0ktH?0d=z0={5tPfId<3G0^RkK1Dv125q>CN-cG@oec>|GiC zEZ!+{BJxta4f|errKfju;&P3vB2c8BVAf@cmK)k@J2vPm^iw;gr#~2BW1A9pU4Hvq zaZ_{iAeRDu@W$Bl(UsAFVxu@GxV~lV<&Rpb-TR|H-KC77885VY+xAIDW6Jq<-(?f! zE72Op=YOlQ3!2mtr^jUUc2$YI2SC4^*{HFErQjaqI7G zk8npb&$mxEc;l-WWqkAHJxwoPBA4d63WED$q1cU)_K8ibnc;*VJm)Vz)3U#1OjM_v z%YSBaWh-;ysgE0C?UrYrQ?w?(l4pIY=8esUrV%Z>y%!^|##15(qsy3d<@M3&f%7dx zT6$jY=G&qimEPU-M`nJPRv8~_Cuc8d8`h3u?266dRhK_%?tbBire|8pgNI_;$im3M z#4y!T(H!35z0>vj<&2h-(Y=N(hVM+>I+@xnPwkfBu%1ottg2*t6SeoDmK7IsFRZ=v zzUThP=*WHH!_mR4nLQnQDd_Xq+@HmA4cnATyLnSH`I zL9I|PPdx2^$ThpE_r*@lzj^Nte;w9_9kEvwo7mCuyF)eJPrVN}9SVfCyVUm@CU$7o z?x6m*^m%PkGT+l~;Z7=k50Ce*y}~ujdOtUxeLvF1f2L*E#f=w*mO(U@xovlvhNYRZR%IH}K25!!dq;d&SmRAxI@{R& zQX3yD9PqyvJRj>K;?h}kV)**-(o3D2bHxK>tzvXWYWtjwMuW;Ss+GuhF~l_wDknw% z9q8&#zi7UAt1Bn?P~a>7l*r21JofX%A~-O(?i3rvRCX!;SJZ}3-?{9cl8fE>+KsX489T1Vg^U%#=nj}-8`!~ zD`bz_;`bQ_wRs}bk=`|9X{%o{)ah>;9?~o!_e8q~HZ*_I=xqMjpXI9y#QdK|b}~n! z2V+A>i}!^~KlwI99trDIy<0ulI@P?9|Jl;Z@&*5vDWY4V9Gdtz^pSh&g+mu!_AK;% z>tEu#FX$C><6lNzWfq5@zWkM|Zzv`liOn$G)7q4IC_O*(l;z!w_tHn0-cET=(J@{e zT-ZGG!c^C@p3H#B-^2G@?8C%^;fKh#iG1&=%Xb7G73K;#i3sRW^@tjSgtNm)xr(_eN%fCyUQBhXM_* z@BNDd8+<1dFB{L8E#{Z`PcqM&#f)2cwTaa}#J*164t#$3rRGb`xA+6TR99DFab##{ zPP8j~W0doZ_Du|a>HR}sG@bb8&Byt{nLn71X8dYinBG@^m--z0WArx9xR#nr&v-r! zv~wNtEeY=kbqe8EE6E~%Z*QOAW4@`r+sQ7&r~EzqZ5cJ@>Ws7IL;Or*AjPQOM@|Pm zaesZOyk%;T^{n)~E({9Cg9GD1rdv4IJ0WnJzs92pt>xOK4M@M={54;n(K=&7#uw?m zbwo2oH6wb!uWsqm{Fz_lJK<{bKOf?Pqr?4})P&i8*#AzT)SK=5LoCz3X$tbWye8u} zb8g0zjNc4LwcAp@72AZL@l;+S-q-wX+!MT=L)PH<;PS*Q<_00#9|>IYMcmGikGsV% zgdf6>H19C$%@Z>3N;{D{IrUMtW4v4Nv*zxu%l;JaJ?;U*AfdtkOXO9>^U*W@3xWFs z_#+m+*31^|%(U_Rv;6Pom3;fma&ve62K{jE1)`6-T+=T%dLQr^T@HVRaJ_#+@D5@W z{|J@@9KoL6mtBX$T~%&<|MYBrkNGe^K4XBT#Ms9;I`txpU2x!*7K`U4|8K4rJi`Qi zz~gI-HIi+Svw?Sn9sXk1vwlS98jGnqeWJOWnV4s{x-ng0nq#O}d)e0_J>0o2t$(4X zz;$!L9SC_2hO{I%5f281KEh9~jviHL9s6TyPg6L34nHpaG0R)#1E#g6JsPL_JMy)E zg6kIFF5gmDmT#!w^5h4m#qT5);UmHi;Q`*I?$3RZ_(g7yet!C!{PDDpG9S!*FuiYj zmHyL|%c|bdj-ILB=lntUPwv}!#xdIYDT|mz{zpAS{ZD(>x!BSvqgd?;d;tWmpedSjB-i&{% zx;-_VKFjnNKR)wzGtW;?+p5ddHmdU@cX{>xLjPgckG`*hk9x23x+0v|HwD%bN~TU=l=^kQBkoNhN9=55Q6vy$pxA zE|L2~b-^{hjot#GBzTA0@t5N$Dd1A!aj4{y9RX4Bdp3G*53h|p9vvE43y+fFS?oFO+ZpmJ>a?3uhnT9; zqv`X^v-$bP8HRtE8dTp#mxNmh8@z%qKlF)zk85IZWO!cmlgQKv6T99IAK}dnoQ_v; zHf@uBTw34s)%-W+CR0#( z^eDYELvJZIatl&b#)WCt^br|-_*)DIP4z~f>iYPl=*1x88ylDsj(9ghJCBA=MZDeb;l$zdn3pSO|}fj|@)_O!W744-e?$5mw;N>9odt)5uJP*=NwD+0s4QW~Pm( zh<*m`@(AjH!ux{vg0Lr485$ky7X2U?47B%j^L7ew5^XXB%$r+ABTlqyg8aeQR(v*7*0LZOH6kmrryoZzQIUbIu>Ys=kF_unRT4&NTJM><3X1Oo2Y{ilVd=+CM>DZglPjcms7^j`WK_%rE0>K@Z{RlOBo z8yYXX6n-bz-uILLM*qP;ap;Y3G~6@l6V%@Q-g|?cLmx6vbMK_wpo^rp&N!i0r`gS~ z8gq2Fq&&#vM#~U$P7D?J`}lwJ-R3_Y)P_%l3Zv5_75;YKje$=BXJWUjKHy%{Of$Zl zvB&t1;eLKZTC<*{o>saN`$E&h&xH-acl=uaK3{sEU+5d5U!*?TOIYbW?*HCDH}n>> zRK1Uzl}gNM>3j4|X%D2&G_KZLQqtMN==^X^CN?e4 zw9vRg{}T7UxFX&$8VVf?y&K%+AMgJmxHE8TXmYeE92Q0eGyLN{{}$?SHu#ouo_>Sj zS!0>0e_9XIx5iP%jj6-fmc)kGqHwqHA>qq_*8fxBqrlnHex|0K za)UTD+AC5J-YYB$s1WVzf|l@-h$lp1B+}$L?42EYJ={5Qk7{JfciNcYRrs*^h7Rfb zjPBH-+;Bxvyee`e91YzYoEtdlPY)P{zL9C6RgoKG-2xAJF2Pa`M{*UPtG`a^qnn%l zi0M)NEolqV+8QQmN2>aeXW_Fhh35z)c-p_$KOs;Mo*nXrPR81XPkC?h6JcZMlY~*_ zy{saJfoY2jHq(-{Ri@F#k-F5BU1V$we~laZ zIZ5adi1_&6Z^E|Vw~_SN#1J1;1nT^|1KHv{_B!^AW|C>W!Don?zA(LJ9B7!9x=uMJ zQ5^de@x`RjZNc^aM*j|BMQ~pz5DkSN6@CaD@(W%?gUosDFvC-Z z2}X0;ZKlD-w~Pa`@^gaZG{Fn+EJeqM9rMjr}PNb16 za!V?VjiaxKObQ`!z@yL@4M0v(w|h+U@L|ETLSq{Ju)OZ zKvE&6+JgV^+r-HGq#!RDN2ad@xj!E5LFBjn$Y?cTL|X}d5D?Gdo96d|_?PDPXdYaF z-ffUaG=PE_GMF0BdJ4HV7Wvjj^d-pLu$WziK2c-^wfH_EWd!wjC&-cYL<@`gajz6P zz9wY%+>rX$eD+bVeE!%(38kt z8i9w1OuL0#kGb|E!`vPi#xe3YWLm!f&e!4FN+tlOgUBcnU>Zjr@_>{@4S=^iXzqx7 zO$+jqEb_ZCKv!bM2)+g&=PHUfAn!}1c0Jw$fN>64a}WC2Ku-p6?uM+WAm#SEg1c>y z5v4hK1+uSQ0lO#azDCwIh}`{I&_gBk8E9@s_RlM2htrV(IRd^Zj~Y5 zVx}H|umh3^Kr?cY%ioUs0^`Vgz-1QbKLSiUfy-@?dG>f*x1b3!^ zTfM>2PWZ1Iah8=`Vz5qs-!1-S><1l2P z^}y@`>Ye~ZH|Vk;FWe;V1WhW~O(Ec20Ot~rNJr>TA#OF~;P!wY8W_Yqh7-VtU}lbt zfE3&!)#+x8YzAg#37*_W^|Hz+6I@uz^44!C+qzb&$}qoF$kz)w`fKFM;|lm_ZMy zRA$Zx`=^MjjN0LC;5lFHb^i3W3K(@pfp51NSFx0gg84{S;`!d!TtHsTE%q zABL~cpq7U|eg)e)h&fK;{>D?{JK`cp7=ObD@*j#j6Psb-Y@PUnar!O=;cHp-;+A0NfuL zg|P~e2lpMg12CSPMEw`yN64kWk@z+-S^R?ZVAhI9kcD4>{`Zqt;n#*T-$Mhsk*|QG zjm!{#O^hQiBkx^`ocnH~W5UENR*9A1phodC_;pk)7Q2eKiwkkr;S%A||1M;~Ly1mI z1NlMh$b5xc2TSqytM4USK+)(#1QvD+$zm$N<-r*9CG?7jClfVfCgjtf`3>GDh3QAK z#fL%h8QiXD!c7n>*~>KO;ws#mcuahdc}($;;(6FB%bdeK zg670W@t^RwZra9Y#&1hJm)MwiB;FAJi0Q{(1hrGyo@}9_Ns*@*&2)ywUB^71_$JmI zTTOD}UBxY=XFQi_&8(09FPhE*%!#Dw<1^7o#$v0mi@Q4(KCa>(Iw z$YF=OySwWy3#=yD$hd!%d!O&&Sy+-zcXd_IBT*vt zI-8c8=b|;uWsEqLlG;l){V({;Gk~imTiBvP)HtD~+LG{^=uM@I>4ozZ{@EqFez+Qw zrP0so2i0lN>KG)b*OGxR%U$f{%>DIgXh}>F`$t@ICAK{;Ae1mLI4{yySIi;uNnCEy z%hW_qDaTB!ZjqGD@)4;fv)bRuKT4gY^o{-@U!%sEwlcL;Nt_(IE6?Ni2h91J9I#+i zp#)3vh~n2$e)m43cA2--?OEkrj7@enbtEyTbFEwlIXnGu zF5z5l-pps3=USSp9kdPFrqIaTw%J=bvwa{vCT>IW%@hR}XmF<&!(U^2h=a;+c|F6K z>WZvspK7X0&5f9T3XW`)FAH1Lb>THxH@-g2Iibw6H*%Fp{I^J3-$M6GcS+x4a;W1b z@r&g~u!sMh@;I9Iu~qb$gHdu+!So!h0u*?!77FjnO3t3j-8C;D)x=IETNYlJ#3Zas z+V5#g?jsiCTiAD5FPL(|mQUR>cA^`!)nYx+u=G&-YU$cN_ICE0?<@0mDa9omWE4{aWu$&*&cI8S_P1Vl2`QD?PL{IX-wO2g{M= z>ejF1xYXZ^4=P$TxpTpGNf+GfoR3K;+MQo2TaeXYw|AzT>uNV{r*aP^(SP)H`USKl z^EGhlhdr8P^t6b+?S-@=uaajc9!|RJX@$4NztO3(`27WM6*9jpPy0)t`E|lreY|l& z|4n;g5#(!3bJn>(isdg-zGh$e#D$NF z#l+_7QN66;(zci@A+_bkf#0*6F^lBc=v#05)L`M<#5u{`3XJf*B`SG8d2fc|b4RPY zBAdR<%PlIPau=m0yu;*ZjnNherOgVZ|CpTnm^sfcwU3D_kh(c(S%S5|)Pxn}7B7ZJ1ps@;Z9WxJFkg7)lY63#QyH zNVv}t?-O-=W&R*8UR{@^WW3M0!c1Y-OUDgbo1x#=XPFf>DZDSIUC1B#Q&Jp`q%$c> zfyD(fQmgtVIrqg)j$0^P4a=G|5kDErxgyzpa&`whhX%9z zv@U8}IV?wvbLeLNdFX{74ZRJ$mNJ}06aGxPo#-n1IHiZ9m(N+Wo#TwyQ%_LRb3SL4 z@~;oB2|MH|+D~d&o~$i5XR5hOr(k~YZvJ1<)5s@R)A;x}Tfx@FMp0+T;YCexWg#kq zkS?JS*%xvt|Kh+{_IG8FHbqHRG4p+3%ex|7LNh~k!bQc#&gI_y-luV$iWiMvhFvK5 zN5RkbLE1V~6>*Bcs(*-oo&PuBf@#_r<*j_rXk;m(m*7T)Uj`TC?+M>R>e0V=d%L$3 z8IjrwTjOh9Xtv95%tcj=50wjK`6uUn42@*VYVFmM@^^KT88gL8D;Pf5E5A+fh_J&^ z-`k$9meQ`oa%upTk?Kt9W*dmMLx18<1wQ*PWe*Fy46TsLs2?OnZirsDRL~|1Xrxxi zA6OMmLlfP1h)wanQtc8NlU)c$yB51;bh`^h%OQp(hyI~}g#59GA=7mZYr=E?OW zMvfq>%@%#TP&zsx{4JQ3f5|o#ujpt{uyV1M?lj^;ayT)Scy4uBU5Xry1{dWX%RLh; z&eer|s2vibyDjM`qK@W=MXN^Wya!qzyuGczZ(gwvi93lp@tq3R_mp>hwM|7j2`|It z1K!->epBSO*jPF*T$dN4$4p6jbE!KsfN7iKW6IiJnkoEA>bR6t`m}3ef&1}Q$tBo% z^9HpzyDn5U?|bgjAkGWYL}8PdY#cGoLJF&KTnoO89|_z-8(F4VP9&Zx%=><$S|)Bw z+UM5rBeub4CGkg84b;mWnzt*`Q5-Cc=j*8tkr(Jpqqgu_Y!Ggd1B}Dc5y_+v7m||> zQ-geEk}vr-(j%Q8tY6h6{#v+w9+N#Rn8QBh+p|x^720wn$uvhAFC+ZfoM92n)E`bh zDw2FTWsUoQYh7Zsgx@_|2?6_x)|FbbT9C?Fmp40t2z}Toe2&~zzhW+@4pK@gp};i% z7PYmZBQM;AQb)z#qLsMc5|75+q37W{Y-!pNp>8xSSIQX^oX>q>750>vBiA-p)9Wg& z^lj08xu3b?T2HNkqhf*4$*0^I-n@kN3EMo4sVqk&({{Ne9}d*XS)V&HI+AU{tmbP7 zZIR*zD_z%b3aNQlL#5=1yZ{;L%PKI-_pfJaeDlOzKCgQn>9&v1JIE8FH}lSA-wplC z_F`Uhy}9RF8nQ;t*B@w+d@Q)1Uo9Vy`{2JPze*?vM6_FCjriA|bXs&$CZ9He?~(sF zYrB7P^i34yl9=(*F{CVTn_p2k_bkvh`m;1&V9I4+Iy=f%ul%DtKiv94S`eQ z3M(PzSZ?XOiQys9t(+7s!HN1Yb*YS)+9;bsKZkkhIByxd;4PgYTks*^=S1LIbU`bW&5%X7aeu&FC`NDbi$)km6qX z#(I>fy`WDpqIv zSsHlgxXIqbzGd;ReN3FsW1(l-c~dKWK(uDCV_<52fZG|F7p^0vNtH#L{>D^6xD-Cd z-s1*Fm#aF_-IwTF-IH`+vM97x7?TH?Lj`aH?UsQb}4y2!Q8^R|ZCU&7t| z(SaZ{8&p}t*`{I_uAq1sDQkRX!|V|*932zsrmb54yEGSE0;=hlQPMjMD__;uVzt*mL2n8haZTOoQY_-&Sb#C}hTx3+J#@1FO5ywh`& z$S2lWE*S3xCb%-c8v7-(KU9}L$=_mHOJ~tZ>NV~Tm&pweFOQ7Ze%PPTi#%(+FMLb9 zC*w!P)u6`G^RPY3n8PW;p53002_aB~^l_iV3t^wkt%S|tflPV!W+)VGB3z2(GBcDG$YS8i z-=%@frtrhaJ-L?kt8=LPkf)rxfBesJyhm`?rrJ1;*oSH(qIIGhSa;-cxR!8&IUd;~ z{ADy#2aDHak#8A29q!8ok!)KbD(b1~svdVc4)q=I^mR4B9nP2L_k07OVeg}C=r8UY z_h&?5#%XEV3~8~vQ0l;zj|`3cqZBc3aacXG>H1zF?xJszx3p&tc^NO`SfHs)8SXs0 zCcKb&%J*Whh#@`D#>#i3?lQ$!jhaK5+yQ;FWjsy8`-MGjvhR?0ytgdfpHT5;7E)-& z!SxUUX&;c2ZK3FLXDy);hWiRJV1%mRqsmQE$?Mt3->d!2-(EB zUaiMB6%H^BqHEYhv2SE(bgo=eogvScmr0|9RpE7^`g|YdlJyJGk}T^k2luhMaSuIb z=(A)xInlgQoGDJ>xad%(saTg?8g3_?RPx|{yIIPUer3F&4$KIl3UbX+o)|^By?=Q& z_)d9c7fyAh?>fe-t))MNPt4+I1>ruwBz%LJ4x`>y{+51GGWnmvEutsch6-yX@#(~J zcQ4NxZ#Um&Pa|puy_hOw+9Vf~PI0B9LxF?Nj6Mj{;vC7MK9!a$&E-F$5`3;y`6B2I z?1i%hz0MB8@)gzV5jhSJ%CZYUJKRt~D)J6}dGRikgL?Vw=dLsK6DJOUoN1Tw5tN zU_M1lMpXU@GRJg9`*}Ox)oPb%w;@PJBp{HAJ|&b6lP)MI5S+VB`1TH zaJf>DOJYk#?nRT-)243NSo|*imY(8!7iV&D^jObGvc7qUp0E7HHe)pL7S}n7MCbB; zNf5n?OB*8$f+%bZpAwRcSysx?n7T>n?yK=dJ)fuq&wW=a)*X4TmlTgjUjVKQCsAo|=5891V!jFb{;eIZhME8Ldx>Z zxh_ImVKhrex^RME7lQI7<+#*KY{V7P=fpIQg^@$Yy$%M|lN znc>{RAz?3{9dR?w1cEOqc@$b6BkkZ@MGHoHiqq9=rXtQ|_&Z{zPxqOCR5^Y1U1jZa ztwH@C;T7LTcrQF=W=4|uvD_@774Y^p@(ZyD_jmXWH&oX3-|cq%it`uunz(A7Qq%&E z$=lu8%`TbJ<^G^enj=o+w@1ue7p@}TTQY$b<({-d7#3;GG!{E4lg-(V*^XCavagq~ z1~tSrz;}goI||q+0$4F83G+#{q!}7{L z)p3Q)^rd)*ks(hD??9?EzR@<qfh&q`M+(F)o zbhS0aHadB?=A)_3uGMhhYiDwtqoi3^y<)1oLY&JDVJ+-ArXt^5bc+R)EV&c+Z?q@( zlucFEnUn2qj3K}J+@S6Xd#1Pzsy4CPMxi^Tvhq{OE)?Z`iBwQ6BhF^- zvgO&rLLXz1wTA75QMBR9b4A&Q%tPKLFrbL& zEf?nIvxk{~*imw}skn8e%|rL|W>e4UNh%WDhZGm~Qe~(@j$w+h+QP>pq3M|8~81b*C4SnOGKbM0Ke>q}w7P zoMn$O2)~XW%eMlnYl|#5hn*Z<#Z5Fim_nv6pjooeb6sh!fGdkGOZO%!T7T1PYl$)? zbpQ=u4c5gyTjKX6OQa zq*71H6Fi`luBBx zvye7gQ@N|OMC=JHbt-p_+r$4URaS;cxKvX}hz^WgQ<~`4j63#Ycm}zL9_OCw!a;3t zg1&;)FgG?HDrcqo(gvYB7iQ;jEO%4b4Z7IzQk?XZ{WsKB=%8)YT3ZCiK;jVflY4_Z zK;5D{yW@xnwms+pZIrxK+9mem1@=38h#SjalCDbaq;fJY&IwaYzD%nNka_l*PCtRT zQa$tNEfnv5PknWqwg5X&3(Lo(Q^H$r5!;X(%{3AQDOvg|U6I=}d%}MRhvj%}isc+; z!aGq}ZqN{tz1^2xD~VV3m!_inF&UA+ieACXxj2e@40ljP>L%@0=L_b@O12Exumss{ z%fqhW%Up#$Pl%4= zstAnq1gU4cYPaHrJkMP_$w#if?$y*me3I=Nnxd|dgVH5Xfc#*`gW~3jm?vxyGu75| zeRct8m=*{>Kt;3K7O-ESDNhRZ3;mCKEd7`qK^KvN)5niTUdXqMCI?|aUqRg&DLX8 zeyY$yAXKNaQuvcYxVmtEn2IKvJ6R?W!(0S)hqk-_bXBGAkw+ZUOii@}^@lW4j0jhO z*Wco<3WNFT@?oWg^qxP(X-qC-)>@hNpe?aB^dhPlz1@}IUQBnT?c{0OIpcS&gu;m* zM5|!o&aiDk$5Ts8QhLgSc$@dL(a3ROBap{9%RQnw1)tpMF77k*Tu{1Rb26r|K31Ix z3in^cx^Oq?$Is-83l7<>6p|=$CEp?1h-t0q#w}#5qYycPGSj8qOB#BkT!tBBD67i8q1L+|yF%0o%#Yw6aP#;U!Yp~1JQc32Z2n+aW+thl)&A%+`#iifxtdONSEkQU zd)*@04jX6o8m*M4QW5!paEu$uoz;iJUVla83$UgD&{iJkodT5Rf3*L9H4b9jELP#b z1pL+vf5#ZU3_mf7YyuJ;_`!BoxGY}X9?26^R7l!9B_}2*}G)B37K+GBfouOcacfefJUbRS>L;Kt}L+ zV16+!8wX6T3G@@2S2}QS6kd(Pd?g^?cKH1zSnvYanGQU(39wT)kiWOUR1Kh&F>3FF z>~i)$RvRO_e#rKAgCFXH{TArs4OkWP2@O0rrlUY1clI{e@C{}P2eZJd%fK_G!JjrD z+fJAn3l?F({sb78g;D*`YfRx0(_a(^Z(5+An6-Z3ngsmL0ddWPz7+6s0?f4>v}p|9 zG=L`y;4K64ev`nHK_L2XA)XG%hmO(NIPhF8$UBV#28+UL3IQQ44ZZWAXvl?VI)M2< zfbl=U>z;rm-{A+;;?Q#3w)qhfzxchy4lWEW?bmAoH9A zpVWhymIS(68`h-*#;N*WFFec+MTlf)$boMJS4C4eE{gtcsf*>{7L*#uThF^G{L z9^DFhfSb@(2Bkm&SZ8m5ZdU>#{VUk^1FVREHx%&OH?Xb@#5W(Jk^ysk3qGjKef|lNqhRImplIjHih-RXtY-}F50J5p+%tL`ZGefpU@hftuzp-%%9ZUmXt1<_=fL98-BZSdJKgEk)N-N7fl zV2zXnhF%(ei)nP8Lxgj|=l_6;;Ag0`uoyV>7FbII;K~>eSI7_W%qgQMcz+taW)@r- z{ef*W!0(^J?3O^bz5$#XvgzRufh>S|Uxho!ZD8gR;}p>SQpgJA5uyPVHzCc99K8ha z;cuXrsg2ABc0K{w4pC7+Q^0^8=RK@}t>BY8(8B_V?{cF7coc(P;^6xK$9SfHgShrV zwi#FTQ=qUZguDdB1Os=arqJRJH;RnN!kqS<2=maiarRm4|9;+XfyN;S`B>+ zM1Bx>q!CgLNdI%--7{d^DAE?{5sZV{9%aypV9_yHf8&s-zS~%g9Dw=Hg&2g4sgQYp z6ymZFqW9px_1_(yorJW88VFP1S}g{ekfKNi#K!|y(Pp6gQ^4Q%z!S%inh?<_Fb3XOKJKdnc$XvW+GBLcOon zO?QCzvWySNTGMT0wayv8Ave+C!0P`r&gfsk```5~Mnv}-A^j=nFv=l3x(s@xL1R$Z zv;igH9@rJ;z7pvG3Lz6{2{u5zfWuH_;WTJ7R>A!#YP3amA+Pks`g^Sh=r6{AUZE74 ziM~YJq5~1PenGS7J@i<;lcGj@=&dwdUk8o7NIJX+Er<0n3F(b?L;U&)V=gif`GI~% zRbwQqsN`GZnjs3$CB2MfcrIOSki%J@68GuKU% zZ980(;-<#ccGsmk5#yY1(1ZMF;XW4?x*^%7+p<6Fr>{+-57dp;^3>e8V~Ov5kLWQ} zS8~36DxbkxxqVy#ZJH^?Xc!puVRH64#;lA%&CU|u*S?mny>xqeB|SpB&aV<4^VQWu zXxP+VOin+P*^tSQibKBoYR}`OWAR(#et2@@qxR`?c`=FE&b}3%N~a|yqhZGQ$OI_| zP7JZS>L+Ey74hw$o_i}$1CYD=e(_IXxU^bmqK2|oe&ll&MV3kF3OD%lEVE_!r6}o@?3?1&$D#2@-0$hHaXs;7*jYFE)F1^T>4aVuW8By-^sZ2 zxI6fJ$0fKYokluvW6h-0KKmRi zI`zT1@n6WaK&~^A&J?$a#PpI` z(LT=dadng4(jM=huFK?5{G+zedR;#vcX0I6f;k)0)C@iZHRq@J=kE6ImA;GQPWruRF!IbYM*IlM zk7G)oynE@i|77q&{ua5A=@89P^YDW1PR?$`4Ku2?GG7(RM+cEnHrDfLEAHU{L4pis%YCh+F?`;zEw50|U zWvFgQqGcr7lJAU8!`7Hg`8~gP3{DID9F?W7=E3fA)N$8KdZV+c>xkK7+Ge)#W991> z*<#_M-zMjs@>dF7;2&$J$s_cA$ocArSM!{9{9)>4J14~nN6}uk!J0XHer{%9On!uG zCl7OExE8vo_-@1_*F3U`sg~_$&CU(iMp{0abpQG6&X7y}g?Yl4H@Bh(Q%m9slIzLw zw8cEcIvREGe)&(+eESb3GdthE$3G%Ei>srjP*thDahqIih{x_Bwk%6UYin_vSlqxJ zN$Lime|qldP!VQ|P~Wiw@9UZDx#-;O-r|^MzG%ylzw?{q=Js-yCZPd-J?};Sc4j1V z+;Y-+nrQfo-V#mHDhM(qM$-fltn_tj4 zYfYo%xSyz+-i7pLdnZRla|tb(eWIRl#2aUr?7Vt`qY*rSOI=K)V}q|XHQn{pT>*Q8 zAr?bFz;5R@SlgOP3hjcW@~TGv2rOe;APLq4uf=_yHpL|o=}z9Z-&8_66wO0a%Q59{ zWMFRb$k5=3P>L!USIDjIZRC019O^RO&@sT;PWMM^s(ox@kefn%KM{TqdK{Q3K2=*_ zC)^*1dT@y7ah!6Fw)HmoA^UE+#bLgqI`h8-sYrAGU^WrKy|90bM0UK^#*%IsD76Z9 zi&hJE3(n?di<|6&iGySnua9QQTaLl-t)J!_NDO+%TGeP8+7?+I>fnC?`{}=-dz=k% zljkXYf^y)+9Dac4%y8kKqLcm6@Ve+5Wj}V?aoKgowUn+7`j|6#ra|#{ zl>?^3_6gGM@L6V9z!Itysn5q*CHnyCA6E_f5cM5n@p0CpLUHN4e$C#?$cs==L7{8# zLAX}*IWogGj!1Ujhim4T(@NZQ#;Iq-R|;dzu{{&#J06mx^QFE{EGgZzelXd@9>UyEv(STlJ-??6 zG|=&s)G5C^;;c-3Cq9}a`7)n@Hnvq)W=iX$b3(PlTY~}KqKBgF&LevFY zYrP(yqn5U>)r%{)xJamWq;{|_qsb*q3HS_Rle-WdcAO<=IZmNdgn&@Y>PB&OjQD4G zSY%M}QfRe+>uoW=^C4}x7B~x$-|)TGzREX$8dCm&fzQQ)C zk_ADdMpr2e)aBP;ukbF`sa>~j!hEg;^j=&hG+5tTl==J-)M+xKqt#{{&&I-+E`^d;+*4pNwy#- z5i3c>rU<2!S?E=?KDtdB$(Mp32~;6YwPzkvqvon}|M^I4Ja zp~3kswv>XPC$O$$K3$m%5ZBxfFiIPtjMAE-HH|^)FJfsXJzPA$OypP5r|+=V!@JTI zsbe_d9#8H?b}NMXD}3)8q^}xdupX5fh`(!hPp&% z@w&Rl{KAn;Pa~~F3-@tyk9o3MR;_JRF&gOQl?D6+=1YhSr?PeBdx&70Pqw0};G5|( zt~>V6dRUpIPlifU6}8=BDmNkWHPk=)L8z>|EFOG1RUB_e9(E<;i%}lxDjd~M=s8-F zT#5fPnh`n-%=Dzv8y$)@qs9`=h%2s>)Msl6y_*J~dkvS-PAv>siFd-sLu$05v`SC3 zE`jPhopBHBS5I~HMVe`q^m}?mW0&?;y2xSCogs7N6JK8C;gr(WWPSW6a)2wHSYb|u z&(r($Wk$XpP(BG3mIlfu2Vn?=pcuce%H%bm5o9uJ(Y0h0_eV2frx6U=%>bJDh+AO1i`c}HY zPl=p~gqc!eL;Zl|gtLcJ#WU$gIcHk7l27OW&cs(3j|Ql)mzC&Kw;Wt;e2`dgxVbq;rpBBw2>0NQ=ECsODd( zyw<@OuAWl92(_4_(Lzj$h^fiu-i}5NocKsJp$a+^OihrnT9!K2aA-BvhmcE)GD;+Y z|0<0z`q)=sy_~nmmeg`$f~5v}O7E$5H%$5|^}JGzF9bS`vFsXgq$*fSVs#y9ghI}s zX4z+$h9eWzNBSo{L$zpr;U}(L^jx&Oa8CLgEn!c@F5xNUFZ6Qf7qg7UYj?HQMwWU& z+bDJ7Co*dzxm=b|6mlXP*zY?#5GCnFWWM#T`L$kFyI>603hOhJ?T`i9J932m#=n>Q zn~U4#IXd8%$vSk{E?M3q7uCVWb1kUlsw>3@{IiIMkvT-{id?jquno?VgxU3*v%0OB zd6<@`FV~-Fzv_Nzthk&h6CK61<2z_g%rk6G=UL|w`ZF=iKE=xDWArk{Qmv#>2Xf91 zan~Yy*hCJK-DnSs&C%ZBrnXXtuuAqSXhZ$HF-==$TnE};25Q)pV!yEqgrMHn^x6J5 z<{>uF<(wU{zs)`L2gV>R-pJLy$PPK3nZ!JT48e&i)Hk=4!m=C_>HBz`qm-=)>^DBw z=IMov8OmyrC|`PdfTxW;7cr**(#+jrwX!^@g~eDa?Ij zbm4$n19jQI+L{pEsCv%tj>hH`s8?7F?(?Oz0cwJBj4jAzGR61=Wto1~TFI8~*g$1F zKR91mAH%LyhI-EEtanxwbuHhX>&sqcp^}Aq+MI4(VQ0y8cs0BemWy^mD`{E!45N*T z=pV%+oWgErrii8GcSv9B3~L*rBthWgoa@a~O=EOL>x3LuDZPv`lE2KQFvSHy{G@HN zw6|1ro*=TF8h*g~ySWH!U+Sv-c-@IC~Q_>|yxs z4W+M;-}NHeT)m}~BY4=oEGrxp|3Z??m8>W5=FZW?MMu7ZZJqTGW3E0Oxvb{u9n{ZKRiQo;<#+JAXD$f34Wm4}3>9mg(GG z=>vN-y|7Z)4Y=E~_QlvIWHQusETUC6rl}i1?UBiB7shdC#Y}y*-of_RE;;rSL$M8x zYvxvvy|7$Mf^~L5{iK{`-|z{162D2SukAJOv`@kw5tSTQ9EWVLjj52Od_ym(|D=x6 zDnVRyejNKs8KeG%JhNf;NCuhCTPqaRe7aP`EVY%k%SvPfxbu4Q#NuHgS->+k}$G;}Qr zYr+uKjhbCA%jW_s?#^{qTFJMOWtMpRTl_xO1b>UYF-$VjE&k5p{rDxbqSB8HBwi^X$skgISXN_L`y8!G63|Mz0jrVGi@D= zyic0Q4dJ#)&Bb#1zsNZ2Zs#3)KfJP2u)?ve#(MN8eWv;YsUcsG+6trC6rhoUvd~y$ zI_5ZTzvE~P`OP)0e<9=0^2lB#2l-14Np++yY;ArU;ugHW7`-%49wj)>{ zXF*5U?n0Bz#nFG1w@7nszB)>tz&#a3eyZeGR;bIZTWvkUMRy#hMI+{kCzbdDV z75XHo0O;Twh+71UcuP4b?=fAlO|U(3{NkA6tY__uKC{%*>gs!p-_%vwFkza|L*)6T ziY|3DO4{yPv#|n>EzSa1b+op1vGGzZfE-k7=yTxxmymk%|H_5rLh5eI6zeN{CYIs& z!|68dv;1ZnqUul~vzY$366AlA4nVbwp!`LGuVU7zwt3inEFDj^j5EKo6xHe)CG|Y* zoVH8oAoUcAfyU&KDCz?&tE^7!Z#zZAzNyx+l{HrBxAlRVuCrpMI8-brG*fPgAC)Jj zLzaE^Z?-b{7subGUu-MjKHm=Rq9+VR{sXFL9pVqj+n}1mHPAu_Z5?c-9TEJY`H&T{ z9M=CdoZ3>OiFQ(S%29s3G(-MbY@pXS(Y67$sO>Ou#=6UL-x>fGGgbSjry4_~dh%i6 z53z}oAU;smA-gPFZ3V0;L@&&1Ic%GQ)sX%Kx|#1HKf$~C8f3QmyZlg6_`C8aX{sox$B{p67RwBKQKFu;gYC1WD>@JP zsJ216>32aX5+`hs(&R$oWM!n@%X-jq-cp1RY)`DsZFNjH(1uzwU=YKUO$sX36#FV| z#T2=lTE%?VDx2Oqt&VD;QiYM{$(&R~LgkX$V(V$sAgkc~-GW0`*dw-NTY1Y?bDq}6sE7EpcG??pq4-oDDpB%7aWB%( zav7b0EyHqbw{6ocQOh!8wSEM7u4QQ>WlWq0(VH%t#p+ry*um;+i(uvLUG4WR8?3*h zZS`fy9=(gMD@DX?X|?oS9xVPOe=r?Hds&uZgY94JU92CiZOjk!1O$glwG*{Wai-Kq z;^i({Sj+cSQ_p_TWNkWg~JDNwH3}6~QLi{nmeN+f05SV0Cpr zXD4SPNS}d)QLd6oSmSZjc9gK%FKJ5QZs?>=526m$e8o-?G};2D@lmW4GGQ zns9S5<8Pfe?rC{SA3>44YAd0w{7P+NoHn1b+_B5Ho%VQpb@Nm6GNcgf?Jv})Lp6k1 z;&!#Y=#wJK7HzI6-R!ax_Az!lcGK*&6f?Eg=Neghrk)`87OJQ_q#I4#V23||9fp7)(Lf)q(08m?2HMfUmtri{3luNL!ZVI^%FrHWy zX98Llh4w+9k>BAN7VJufeB#f*SMAWV4_IF+Snv_pT>5`@#pq0loQGoZlIT$rH^>UI0UGB5NMtJn_Jk-;~yD*GJRECbs!gKtd0 zXjoXovHa&)MFTjW8RitrJI)324VkO(KK~6ongYc8XYhXrdU*qn*kS%|urHRVEV+ZTo0zX55@;-n^Twr-D7af6I=vZ9^KfK-m#e^3;T^ibz1pC9#Bb;Fi%+v?I z34?74=nS5KZ@z$U>|kdBpngT+#|_a*hS-0G`NjBa0bpRS!ACs!J9Z{Ptb%;ffBuvI z^K>T6H3{Nmg6!aH&~L2XKMQjy309Q{idO)l@C?R?t-Y8s<16^^0?del_4EK9kMUj) zWIC7o&vFmMp(MPnI7B(NuEH>L6tdGlg1yh7?)*pa>v#A)4k&&hc%=#2#A@&xa4!;p ziov0?@N*TYKLcK{!hC)L?SKQ=CJzyO13pOx9~T2}HGtVh|67lhp$`nao%pu0eLlCvt2@N=qRupCz^LMP00}A=&k6}a; zyb6bQ#o+O_@NcZz|9yzM0Q9dQ*rY+5tI*q5V461|Vun!@=?!$Z3S3udVDEjH$7dKX z1i9%3Q2JEJw|)t$$_BKxJ@~dEcq;Y3%>I+c4)FeM@K*@@Qx3eHY1D$*{|aj=10GfX zy8>g^c?LwQ82pmOjJd@4yQT#IPA$m)XF3KSKOJgWV{M z_Va%+tPC-G37*dT@2U%f?Vo_TCc~`C!V1IwyTW3XEa2R1;Knfx4gyg~2fBP8JXa3Z zs0MZraMgH$XLp48RE2ftg7qZ>#q~g4g|{$XuJMO4z&HY4iifo*06Faf+4V663k|U{ z!zz@Zw??p9wi_Ldu3(Q3dU+0>h}8;Ffm3$_%H0vzJq}shogv%Y1*`EqSUVVaDFb=s zSHPZ?K+HbDZ%rYCyE)X|$AODigev{Dz|Si{Rj?lP01Lr}7hruX+kQXjC_2MxI|vot z;~=UN!FmKuhgcT`5^RH5e+S~4qi5)=LA}u)&h8kCEQUz62g{luZ($}Dp!~Ouz7U6p z#x%$~zX2?_J)9`80p|V!?hFfnbT@}4b(2E2|W1;QW%ZENfzaeZ+dg+s{qszsE7QEJcP<=5g=V2?NEXcYcVjBFYHX~98vB!Aw)OW@HaAD^!K~}UmG%m9{=e%7jbUIz zL1c-s23ZAJx=^|}b`?V+)A zF-pOi2xXCfjj+BCbP%D@>*(>EadgAf)OXZi}!{RGO8xp0-%F*YNRng7PrNjaz+Gdv-XHcmPU=OC+WK;15z3$k(8}l)q@$by;!6mkOeUU%ShgqKjKp%CaSE+FMiW6<%sbCs`+2iS{P>2ZS+MXU4cGyeY3hOcILvE8nh@kXT` z=UhPDV!llTe9gQmE`?g`+Jx7UdJCj*KYQ;B#YK!?^i(@Eepqzf&=q64?yGJ&Dod1momJ#Y`J#4vgzsDU-&|Nml z?RHwnqbt-E0x#(P!(YS3kCg9>Q+*I%=HvPU5PBUG8cL6R7@J5oiOGQ5v#2IZmO)_6e5-d;qa$}pZa~T z7}^v1px$+EaW^l}&ePd@*IR)Yj@yyNrq-rv0&VM~Ui?1obNjD%gA>A6#JY~nv{)b| zZm7GMZ#-F^oM)P8sFv2k15;^>GZ;$Wm=^D^5WzX#T8X%l*ew1Z`o4D)wUTn#K`U(= zC$}@=9LIPnbNQDRS*Js5Lu+-#y3)PQcZaC#-btRvhhSBdv1UI3U>_hMo` zDbw2>9SJX7og2{(+$ke~?blic#(fus*@w}m<1f**s0#QMl|YK7+r>GwRuH&9)iy^U+uM94TUXT51}s^7?VWGTVV z0iOM$%*33Ys^lck6JT0ZsGCSdiyPU_j?lMQZ<+Q7S9~uMnB%_`Nfr(C57!8)miM@8 zB2mM$)atUdw6x`$%CpVQZJl{f<~#rBz|n9ap@;UCd`d?>x_3W5(v#xYXL@G+3j4b2 z4ZE$4wkbP5H|QUfUy=J$oQ6dq?;_pz!Rd1Sz|E%LY$dcRyh&?hZDm;=wC1MyKLu*A zrTOb-oE}84jQ@o^Og*Nbn)ln*qL2BKa%0nGET6rQvnOwP-Ug@|I$Ax3yNKI9impb? zcE7VGTZdW7i*rD|bIXybwF?~doBcH*TS@1yV5^*o-d9k`xQe%!bCKn)jh7pPGJ6W_ z3yltc@o&x>5OOiUMfY3AI_J9EgJkcPZ@lX)>@u%FRB<>r2vO}G;oo3>UQQqX2wtxwd_~evDm|_cE|N@@t^A zl!~Tf&wQ7u&K}Bp%elfi7)~PjgX_$#gPoafk~9BqUV7x1e-$%VyI|_-?m_RP+xgZK zSMgi+(UvZ9Q6_>+uujrXGS~B%$mrnq&|!J9t`Hqv_esommpq4`1POFVzZ%`7bhn;I ztE=h=FyWY)GjG&)<*&*g6W*KGmU$zj zpw+2w_z^efLV$mz**Do)8RwvSjb(zl5bK4L7kc?CgDdQiF}wc25J9=A^BFN>p)(YC6{(D2S^ zAf)=+Lk)$;NIge;{EPc7y@T$De{eK%mQ-|py;j6J-Fk$TB2}Y*`7edJ@F)43&F-k} zdQESpS>h80>ICE?KTqC-ezUvfmyzj=-(NRWD*TvxXzpu&NbPhrgzA!e9Fxh*wtbK- z;?+xHJ&-)6G#3t*U7HMfbw(Q0)(pI{>>#pM@-q<-?4G4Rsa_5 zXy<%tsqMHrT4=AXw%^fr3KuzFezEZSV0PrPI@q)TKSd6At#LhdTqpZDJ0m~fJ!6rz zj`^*$N^Bb*9{!QvB6LyOVSK?FkWJ~IJfgEJ@r5XDIiVY0{Ydl8lUU-Qxlwz z$V$%sW=Mn)g0P=+MO!R!Q2lmC@MdTzUtgPI&v)#g@3}Ia)yYJnp1qyAp7Wz?%;k*x zY6-SDBj>*jUScXqugnqqCt`^E1@0mKC0x$m&_3LDt+=HrLK$~KE|DH?5quJ<&UZ%E z*d{t#xnGcZ_&4GVKHhdw7%P=9H$u-L*Q8hM$>`Q#IP^1PQF~iX*+)bD!cxR3B9-Xs zOi_>V$B?7wW%PzxgCEI8^NWXCMpPjK-Da&wR&+Hd>yQ(OUSuuPWuDVkqoqxw3|)A@ zjSTO}e-sKZrFGtP%`uZcKvp2XI`u-yE_ygY9Gqum*@w~20oV>Pt7B;iE8vD(_8Ux zwV_eiG*-9C2lz&jOQ8$-3^QCEi!ODvrN+}K)D?nvN!UW=hSE+yf!07aDvQJq(MI7x z`RU>E(sn)DT9vp;t*7qcdGth*FkZ{s)Fe1<>ZuwpABEbh#X>bg6ZpT?#*pdQow`Do zCALsO*Gx;gvRgT$w?`}KTa@K||0o$Qkl&ICOC^!T_BF(PI*YgnxiyCzZS|H)QB6R8 zF&Oox7-W`5rsn&@orOl)DoX=rghHt;IOhtGl*yxJDJXpF)U^!xHfKZ+h8Bd<*`06} z!8`j((o8SK>q5rM1RJB3QKsnMLBBdpJtov<@dzEd60IoOjXu_Y@kvm1a{#%+{oa{~ zu2xEEbB(BeUb_LgJ0qi=LVEZxR|EFlS!_R56!MU>UCk)oQcjzudW?SXnIBar3MJVU z;YQ)Z%r)tqp;_M$FUhA)IQoMgieR#ffVpU#~pICM8iONVp`Qi8N}i=cE%3K9Z>NQ-m`C@GRJ-Q9KQ z(>teUzI*WcUmxev6MJUOTF+WDd-nY9=YFb$hG$O-&r{c1<(Y@_8Bb%mpRY}zyVQpK z%gSZHwzuJa`jNgiUKHN6LTGt>gVBQgR!sK{kpK4N3H0+eVg}ixtpq#ZjKVX~Q;I)& zE@xb}8ELQexBGFGJVDQMxuO4wzp${F2wAe7#}S?1ttZ+)u_fUN*}1~~KtxJmrki=D z$cx}v+eOZ##@Y+4x%OSVoxRD(tu%|a&G|KFbnJr05l_K@PRWJ9=JWbkjv+Q$RZ+9- zxV^}Ft>%sA#+tYjk=4(w66`vupr^9@!uO{?QwWpU)-QPX4okd<>jI#R9YykT3)mE=@e40wHC z@hRjyOMrslgT2#wqwQ4=g$L(!i*%3oF^^CK#V_Q`lImOT|5Um_&$Y+fpIejQO4h*W ztR=^uK^1TyYH3fM2V6e6Dsp*M{~*t7?tyd4UT$r%<~YO6{%}Cf9gc?DNB&l7TN`Lv zx+Bh)d;4#D>xxH79?oOe&4H*IR^Aw)U5y08)58a2l+lJLCp-{4NYjy*oGve5E;x!k z5jvV*ZN;c#B*Z_2r-mCwhilWUU)ZhUEU~5czVEnq8y`o;!B6HBt2k6NB~3{^9$6Az z6`rd+)E)9`VS(_gEc&|m7D;=l2r=4{tY4u}d27~zpZ222t&ke4iz~+oE}zg<`qDcD zI-@FVRf=)un{%D0RoIFd+v0nozl4fKuPTEL57U$9#Gam=IJ<1V1APef$u5Jr8)iwX zfSMYs8D1IwH=e3KB!+T?uu?wdx$Q3}XEArF5mpiC{y(uw+wZl{luMDFp-b=}?q~gv zInB+ICdr(CzIPxulu_+k);yMb+`KdZ90)1@K_CE7gf@Ag+?ud%yCJ6CShO z$h_7p=bSatE^al~W+k`!9M-z8Lp~quUameNT608pHKA@kZg-(aX_`T3+HNeMC4X z#Gs?|i8uK! zI~i~TKCbtR>XE(C?y*c`h;xcv%dZz3`OnJx#kt%$X!2K~-dz#rxKYvk9kpD@SlQ?k z?Hg+VU60?&Gd{r^l#U2p$lgR{`>plTsbO9*3u~p2+qotZQw|zCiJ!SvoZxxq9WD)# zX422$?o!&SMWk4n<}#ygY-Maqq+5Kj{?6*gE@1x<3;Iq;17($64L$w;%$QT#-enH9 zc;!uujb4q`)|we5X^Bnb2YZXkzk^;Lr(TdPtt!rFXS~_iE~|BmpFr3Oq*dWqfI9*%c|#rABYmtx1tM;a(S)NWRo-bP;&?;(r)gS?)7OB+r@ zYYx%alI+IT7`2H~HIfv+qYT#vQn#t${B8LQ>4Ik;|B@+5RkZpM9qifGQv0H|PNkxm z(Y;DFwGPpT3bJkFZ1KM5s(6DP%c$1BxF)|aMTansYNKQCBV(2I@wV1E@;Iv8Z4wRn zd$})Hkele-LEhgvlY?)?T78)EBl0~v$H(Y-$qz(PVTpK3y6qXocjQl!l6{BBYb~?C zvDz53w8N2E@gL)xl@oAX+{sQ6hls6FJ%bbGGgWMjVDM zV{D6cRTHB>Dm8Jfx<&oQkm6VJVd14bh1*H3B6nbXhs@XTO;rBsUY%2-dg)iju@p@QnTWXqm|%cvBg?I9c3cYI-!qrRl3G3p#O#^ z?&mmLCK6eCrqW;C7D)wx`qKD{Os8In^~ExxEpO*GG8&#-?jxodzdF6GEM=4?MH?V9 zx4pK-DL_8QePeNYJN>N4ZQ(*2}^`GE<@FJ?J9hF1IL|dS`ie34`Vn9C1|IRKXyi{G{v{8(lZ?4j- zYV)Jh)qYBvw%4lV9N|~-m4%kb$?wA7BD;`c&xE8Y|vhrFZL4ZkT>bv zTGW1|OonaAeZ$AZ-eO+q8g+&mN=J+{P7^!B>}}RW-hXGMp}Nkfsh6Rub6vQ}A}1D< zhp<=41l0NHV%K&Kna{!I6V*>tLYZiw7MQ)5-N+sm)(WarPZ&Y&XZJcatS8PDbB;X& z&(%`28S$u|rtLOf(E>Y#uPa#MpHgKi1)fGX%*#*(9I~$)-zq<9^Wz8Mr8HCPOD<<7 zbI~z<_PH`fEo_WZTi8FMYS_PgYks&#=1b5Oxe0h; zIo;l8edScrY9N2Po6^GgLtSi8RClI7ALJ^?cf?%ukK8r#jx9R*EKn9BpEgi?96zP^ z(!SIpj*oV@6|7&pET__GYyvY9-noVub(&hAXhFE(JlCe_mDCN^2$JJ=v4^;SJTKVX z>@jvAavm#NIu`CliU;XA)!G*13z8k0%~~v zs*ExAsoS*I)=$&{ZZ@4;nk>y?(z)jJ5VAh5q7R83@LPGHWkNl7M%$ydHIs;G+*fo1 zycZ2*k8tmqWadGZU9Btc=3kVX8RQ2zS6y z=Zx{((3DQ<=f+|X*5O7r)sX#_8YNxAdvBCmKsTd%+imQ7#A$Q1IR{=ERg7ZVHjUAr zJJ;9p&DP{5h!TG&{lhU@y^^YRlDJxT6Ti=U5Ag zKS`b4&dn88aGkj~>@s-nRseH9;5;)tdIPnEe%kOt6@VJW1RjyFt%NpwGj2ckGqsYu z?Ub{N5G}0)V}$BMJ=6C}Ep05S-oBx0vNQPmd^@fazm;wWX#L(IiD`BNv#It<`NpiT z-BujaV^5~mF|(mYTm)6wUgiSTld5Qs1X&tpZO~Jcg~s1{U1hVOna>H1nZuI8KHL*t zWrOr$x-cpW|K@yQe{GgmD(g{Wn$lC}%_OHNy_DI&@8${%X+4$ey#S`Y8lO9N{Fm?lU-m!saSL}(myW7nE&u5R+%_F>C|3s{;x+eoS1(|K(7Ij#u2#TR4Y-`s z%`^^RD*}X1!(Q%o|GD?OwA$@~ik1Yt?(XRY>v7311Hwy#-f?Iv3mh>H-si*dI1m&W zue+7y-B;Z&0;7y!n{=GR_DA+^;z%yzEC!Nq;IA&3=%ed6@6uZz zxTQ-P|I-~P;HK`Fqd2nbajznl0no?%;G9Wl$AsSCHkfkON80bU=_(7n*jqxcN%Y3e zanFRF!2rc_s|dLM0aZbF3t(@TTR#PNe2ac5poTI?sOy7Z<0y%U1N$+0??8v&qQA&F z1<|%KdY9n4(RImc%Ezdgpq*}QfrlWJ1X^%2^4C znfOZ_@p+Hvyg~d)aLPECUq!eVRKXkwh)*2ts-S#X=+y_zL?+rQgqh3*g6!u1yUfzf z)K5nrNc7+x*f@>V;8s9Tp;W-t3r99E77H`^1aWqKCS2W$n{n>NcX!@ge|;VO(m^EM zdh*#ApX*WKst$Ct!((f=;zJ^|0{O8n4UF5ZQ{h&lh=HlQk#|>o5Q>NZ`laJ1S2yEE z=N(>8M-7W;jy3-teNMv2B+M0!yF{1n7r^{Fh_t)*e0Z*u zj&0oYz&$s87?GQU?_LG`7;6y6e1>_EFn8`(1ij)gU(YZK4K27%5JfNxCWv(y5vRc5 zU9CmN$5AR+_o8y^W3xP(0m{c%_3F#P5RXKn*e zfbzsN`s{i&Y{kf{AfNsXyd`+&6U3q|&e?ouwJFwLBUC7G zoeXNi`(PC@8K2^&z|%hg@wfxMLI*@+u`?L17F!+4@xW8!J^JV1nl+sGA6g(0`#Esc zCy32Z+6;pZ1J3&x$4KZb*2B+!1Q{X5VP$@fxx9_n)?*FzN8bJp2dV@pIc&TKCPIa= z99QRMP>IaKtha%afQ)C{qn+l&--v&zy~pVYEkp~<$=?`JeGqsWP7HrSZO{PystT>Z z2&^1GUg?E1p%OWd*bIul5ZA2LSgWlt2W#!8&NL`N&SEyl!tvl1Mp~HcMGSP>A)1At zQ+S2Z<$(PE0IkCWR34}fCA|WteTED<_0ZOFxH?>b9^xMA2~4(I+2@_XZI%G$<`Hp#_zGH?H+F9*I`+V4^uGNa)=ocUZ!O2! zwi06~LUpDDayQfp4e?pCKiQlZ3Jpme#Ons;tQ%&ex3ig?0vGY~xK_@CqI98C9Igp@ zpgZb~tH)aCHau97E3idzhs5XFMbJ0yz%#vT&IaNjc?g>NYEX$>C#sMisEI@a#LEvA z#0KjsK4sOgJ&5@bXddd=eX!cYP$F+2{~@E~31X00-lzj@&THy1yM?X5RHI)|h3H&l zX&bdOta^ynIU^q0nblE$NDLAx`E$d|tcmoac!R%9j8|$X>th?VzpT<)&$MwbzsS;^&1{w(mNcUi(TrmX#3)s)ZTs0pCP z9yNddOV(v|fKyLS&u!!$m;5yNIL{d03!yrd0}cEPX7mx z@eTaqyYZ*Vr}`zMhBh6n>hTll{`u5X*?Zy?os{@C<=fmBgBx=n^Oh9%lN0C$WQx_0 z+y3t4lb>JL2z?X(iJTT}lH$n|50pX|O=aU#TVyOH*qt&t`^{_$BtdhhH!dS3Z- z!cVz6`dTE<^_XIF%xp8~g!-3Yg;u`k`=V&(;+&n@2Qe%7bFP)%nMnh^`#mG5(bND^ z)W(RD~X-i)OGsopLj|b?lJYAFT`;wE^czXtpviqnJ zG^yVaw@~G>OT8SIz9h3$XsbDt+Z*^q_5~J;1-vupZMarBoSSj~)K4rY}6P%mR=_Nv%3>w|Zo_hc|2{p;%`t)_Fcv(@GLQu-KIGN)o%g^XF* ziLuV+EsxjtI2T_eI(k)E_9i7=@LUaS^j2bD zv(>bj@fp@y?n!v)hZ<=svkFBg>3!vpHuPn(qWM<{=c;1|e6b9MJ`2_E-9 zNB)LjjzF!;W_%m7URL)He`b8hdXiI|ZX@nVzKS}mWdjYkAb-vN3prmm`NrfokB2FI#CKd4~z{~ z7pn3*Nk!Wj9#3zfFDpGWK8NN+%QIC0nK1+@WZ_4~3 zM@?%U8>00Qr~BRp@+KyO79J7$vNd8Apa&^W7muFEe35f6?LnlQlEu~cb`GS$ZTyaW zS4ii6j2F=6kuBKw@u^uYLkH774=2Y;FoWeX{x1^ZzTBSU!e;`nmQZICiF`F(&S@6z znZ7P`K2nFOAocfY!QcE5Pj7LQbWhh6$6muPGY{t|p@;BSpAc&3NP_J31pn~Y@U|1L z$iu9VqL~x<;?B5mW_W-4;OtLx%352v#h!w}9|OPoQlxR-TErc7ni1ezl4fK>q+~`Q z`+C+t`VyuJRy2vqfBnQ}-j3uhHL5mb>rr>2$0EUu9$6hTYpFvhMw;fY6h=pcRVJIf!o=EU2RC)r+lXJtwDhwQr<2O@>6Brd}<#a}k~PMQl1 zMW(Y2-l?m&MP?o?7ZpzL@yuo%Okx-(5kl(A%Qk@gP86|Ell{4F-W zdPe`8Ekn#OGa{YBLo*9zKaSOOM)F7Gq+ncr;~DOW@JqG%+P6#+xzWlK3q*{}wOI|L zgRHmguTms1*K^Zz#-oVCkU{h_y`8*o_l!S{OwLNqIu!oJ=*bip`v)>T2Rx@e8|81T zF6vC`5$<4aDdA}U?2=hmLJjq==sKuT`r7-sx1@K9mm=n=)5-hfeuCAuqPF|f%uzY@ z)Jf!OF4GtDCVS_5>iV+D?^TKzO_m_5=!@f5a$0AFvU4ln5jwljcg^>gccQ1Jzdn$qHw+jQwuUVOo3t#WsiJulx>MMzhUSrv!P#P?W0S%&cWuLbR{7 zjo##G<3HgOJdFcqQPO3Xx!>7ICR^WW3nMSGr(~TAUp4AcW#tF(x}GmP{`pcflQrMi z6Um#_4E@*Wj+~iU$3yM)G-9_{*;m+~UmopeJ-4iB24Ty{mFjFPj7<#f&$4o&>UC$N zu+=-mUsbN+|HFIRsc+P`&Jj25&gRMZyl_Hxr=0Q1eA~z0@%-g)Ebs6=^t~s)GuE0d z2p-I0tx`YIBzsc!;n*v)2|HKb;O{Qm-pl^FOm}m-nM_P~5^Y1Bh8plSvYSWS8GY&Z zVg-LU+4fleTpVd>MiVHW=h-oBR!qxj3`dt-dNv%bEBkABbkCK*E#Zni&a8qubM2jC z#_#dxp~=}qc%S+yQGy@u8|)eE*&5g<`EXA)%r5SfbiOkPr2stD_vVyP#@X}P6W&Xn z&v8vp_Y_AR)7f?>c%J=WR#nSJn4BUx`Qy1QhI#4Xy{7y{ps8;SJr-4XwxFihA^3Le zj`KPixCZx& zf#H&BUb`#5-c!%>#ycQ*R$57BSy|v_W$nF20Mzxf>_ee4$}RH%`&KURk-Uw96+JxN z5lnFe?!uSgK8uJw$Q~FP8Q){%Vk9|_r?TgKptiR!v)?{p1;9|-Snt(O;y>jS5ABNm zqEDwJDX(X#TtAT8hpZ{*qIDTLv|;Nnt+~=U6wA3AouoY=4hwJOh&0~+v#$*Q%6V=r zK+g9N`%C>ZwJz!*6pyY~M><3KQ}Ryfov(oZkno&nXK%AoY|Hk+ySH_uZfI%bfszl7 zBK_sA(x<-u{xVV~dDK2`y|#Ke>kL_M5}g&IB8+myY|UJgqT&c|Z~sI&kuKt#wnl)! zzB7K)`Pk7=H{{>z!GsAkghawwOn1A@A(odd+{{KmB89zDO?C#tJPv54)iXt*SygI%@ zOGO>s3er}&rGK{UFek|Arr@lzYS^Z}Uzrt22!~@|Ko53_y(N-zG5_}-gS||pn?Wc# zX4{L6J?e;PFuXT5MJYwRVU~##rT4y;@FsbQ%=$zqhWFVaW3tvTriYrv7R8U*>u5?m zCU)~(_deo73}Jr)rvu9Q)*P<)h&K%9kG+V^wz^W^f@fa$HuD`71n!94&gpAaaQ-nx zqlGd)d^wsgR@J;iEaF=VgmB3{#FmCt+n4sSBplvMk_|Y*GJkxt`@&he&jnTl@`a5-x3Y1`XGN#jNRG} z)H|3T`A%c3WOf2~3HN)S$oZx5RBp1X^`*1Zs%&o17e)I=Yez1sw~UI+OI8u5`i9A` zrJnRDa;(+KNwa#Hy^OD8e?+sxpQ`KhLUcVg7fAX7d9~bt`GMMtc52!y%{*qCc!Aix z@FQit=0{#@GvSnXm)y-$mF-45R&8g1z1duC=2qs%Hii2u%ha>PJ-QKJ+Pgr0;Sspf zOjkJPEwDG5GKgi-_|M@4<+$>zQ;zP>ZTF0j`*~j>fAqaw0DAlL<}wfvGrlYQ4rSMe z+oP$eY@(--{JVE7NJ%?9$o4ol%~b2K_Ds1FJ{|8IuVJkte`3Cq&q=quLE#{$;FD)@e>1 z5;uyAy}8Bq!vDzHctSDE8es1?p6k)b+IXv2widFRlaGZIQ1Tw)b73~s98Yj&fDe-9 zd1G*NRlH=3*DBjRh+M)lp@4UjxI|n=Z+4%CSX1p5=2?@D9gUZZwS-^Mw@wE>#y|HQ z6H7~*n7nw>l86d?Uz;1O4Y4=znz28WYvy=+GS`M*>Nz29mbSB-@g%1?s`hm=+t|(H zvhsOMRPvf5tjX*euB_*yPzOR4?X+R98%pTZ(PzePmlaF?nNDBi4c$^@#*X^bR3Hy*2{;Um9Zd#vto zwvYwIJwhJorgVqRL%(-EB{vvf5RBPG`(81Twa`S}WlteG3Ev2-M4!Bx+eQnZQ5#XW zZohd^%T&ZzVJ)l}P~U9gzZU9=E#*=CV5Tn7n7VA7a#~qmAX7F7hn3Yz3tTPEb5(`& zLOnS_NMOGrPEe*Xz&UQ+)bFV&u_tO;}wBy+;9jX(^S&}U~l6D%~1oYR?(^&g^Q_MdAWUSQ-*L+7U+eqg z$F#Gkv|YnqLzm@DW{IZ{_lmv6j?gmv=t|k=Yj)F9HCfZvvIRL88=SoDauWwST>GPaB>`-d3v|8xHy<`8PA0x+H zB;T7=&3fu-wU!=JS7^=cIczCvp7>PQ$#GmmW(?UJZXN@zHRf7%lUhP=2cL4&%+0Fg zZb26qz94syDM(GQ&JYi+(iVY=<%YId%T$lxJ@yj$ijN4r_&Qtxyf;3vmJzk!_A>%b z{Kvqe@2bD)hv?;GIsS^UoA1d@U`Nmc?f%3hyStsO9aO*9TI;FmcI^(;jhq3>8{&W9 z&ax^kBHL_<{mPz;^P{M?T<3AdK0xi*=WJo2s<4|AQIG8;a=RwlU7d;stDRM^=+(7S z>T%?n)n}LTLxgAG#aEblcpljno-}WawpuSWTOW!_?MslWwvkb|X@Za6&n2?0p;Inl zhnyYeaVgPxvxLdp2vq9!BfoY z${u|^^8POv7p$Sw2j(@O!1omXWhc;6scy&uyl4lk7Rm_yf!-e(-YM37as;!TPv_1e zll~sf(7(fjA=9Sp1xi^xOFyG5)O(nv$=CD{{tqr$EXn1C?ngkyTOGA|6(vV|qnB0l z>l=`Z)RNA}f5tTvhjSeniCG5k*|2@WS*)H$y@OxWOW1OWvxWMHyTbMt4|6M-@wlo* z>?`mI>!R(^Ch4}iR;#XWvuUb5*O473vV10Ui-{nAZmw+-b@kI)X}!C)2HWnodXw+j z`^-eKIo}GJj@@K?JfZ!ZEMqv@P1N2y1f9rE^Dkls+m-1i_C%1pUMtm^U;aK6RRKj$W-+&w8L;s=%Jm~%RBp-R`he>IbV&N z$X=q?VwvOeCt*%|0IY#vsL}3>91KXRafjJ{cpZ&A>wYF4C)Ng7n zw3^ldx&d{8_X+p71vslOklpQ*#5Z;yYoj(@GqsxfQ?;5|ntn~z;B~$hzm2WVenI_d zk0w^wk{!~9;YzbZ->lX%7EtTSgWN5C8~>19$KIv#z_a={d%4{S-Ut0PudzVwq+cPw zBx`cZ!1`s5<+|c&VG3M=^E=P=L7Jv^H-1#7Y44G3xQG3e?<`c~x^oxlFG20bAkT2Q zu~l24t}=G1SJiB18j+Vh&P@?|avQlkj6^m-jp2yX&h+W^)KiA4c2dK38KM*O2X}#- zw>!kI1#UlID*@A*9~69G2MFcH2&`SNON6Z@=uT>>@v+~ zA8Ehqj$)uMZe4PhaGHoy0ON718pJ`4QZecToR7XGD`U){@AwuKu-%%BC<_NM*Yhf!2Bq-imik z^h-ovS&X+F=w|?}5{OYDjLda_c!A@+!5(h5cryO(=G(iR-qjSi+5IGbj-%HZn4=&# z>}~K+S7VVMt%UH`|1={m9}eJm4lyFoa&B2uP@`GYef zj%tC3xjg(S;`kOL)v%}g&jNAt;HWa9l8hO0>m$T)T=(b}Vn!lX0{-f%9&%yz#<89V z^wq7p;jYuySOcztBNtkCS9mfa>#lbKtII|k47POJ%!T#HAs)H0UkIGst*@YBTpD6) zVXIWE7YcKd0ES%@JUR(`xjKi}$lR`lwp{Y>UOmDXK{_Jtx@Nel2op2TVO#gQV&Xp* z>+l8U#*48$LklUGZd2tmrt{cHq^fCpJiXp0lMoaD9B~{+s0YQtab(oH z4hpW;z|{df!Wq*GJuU}#fL5pm;2;-!H%8^UJGhnN3xdEONA7$}wA&uJ-WllaYA6O= z50ayZM-gH?_IVF~_nP3>w=ti)@j6TV1%g}z>V!KOe++r|g~6;N#1~Kv$A9R~{^Xt*?UZ`I1 z6rW9-LJjr+qkMpwBd~hw!3Uutu@<M5q^DIV0g}&=+gNb@^~t|I3f(^&>p*D}fbo z7BLM z!3Vo8X7(D~85Fd=h1h{Ox%0USdHpY)9mv#g4)#45XUtvfff@r&4YCEi18QR=O)(=! zP~Gu9df~bm1YCau%urruKVcH7n2-9z98m9BI4h>0N9Ub%`w`SECot}Nb`oA0hqYA$ z$FiYl*bg1RKiIYfV*DM(osVdX^%!-=;{5-HD2mDhE1`}!3g4yQiFKG~1^2BAzQ>?? zpO47-;B2rEbrf=(?oMCu|M!UMFVI|APzJ0Fjh3chR6kI0^kOfrc(t6VUmYYn&-JaRq2iB;aiS zKo%r9oS&DRg7zhQE_i*0-3z`DZEzhplL#Mp0aHh1FO zD~Zp3UD+daarzDwpf4f+dkZ{OQ;4R{0pAch>#0Bw{f4x5jU+r?@UhXIBMBJyG zkF7B(S;6?^H}ziMiFUN-N?#_%l5ONw*70?g&)Q!`hD3Mv2#YANPP zyq0@wa`|9|z#qQB)b41BSl_5({6b_}#oq6KJT0SNbhhOazDw+$+&H09ux#)$*GM_2 zY>V%O@|YtJW;S?MA$vvq4zkh5CHBtKCB;f=oqW>MLO-e;i%f_=jDOHOWYl@`eRjHr z_;LM`;(6)ZLlVDC8XHKn;gS|lQD?>a>+3SFKKT7Z+1P9IDw*xiol-Wbv~P&NLEsv( z(kg>$&GVxR^pQDZ@8`U37+P$UAb$_c%yT+-!Nl%KKjtni=MqX0$H}ksG`m9l*n`0@ zTW2O}J?yvMK+5=(qabVtgDmr!$gK^u&d1j3`(h*S{q@LsBSq?~9&v5b#5`M)XC{tF zIflHAC(h4o4eL*G3{m05t!F>Is~sJtEZ}n`4#~sjYM(&nIwOujUDT#@HNCk#i!7Qt z^l`nHbQYV_jY#osPTr8X&%ZjUxfBzYSo7%7y2mcSdD9j@f1jE=XM4^j=dN5jd12xi zU%8|U@@4r8rzzXgd}T4hzgdf4)O=Yl``7GumS6fLxmWVGz}DmfsByQ4D9ovNs{5O` zKC&sb$&0ki!kIO+MYM@*;%%PJ!3-(t*D{*%h`L>Zd_6FKvv{s3hJHrjwV>woOeSkgG-UiJ^$DuJUxV%BUH&BMF!{lF9-T?{ zWlP7CUuo%cGY3R9{eu`xc<1L5Cdu;x6X^L=aVu}E1hJ84&24X|W?abZ86BYg%l8YC zfoDNSDj%G~e#4A+9>nfhx45fzyZ3d|L+Ne8HR6ltdA@PJ?SYQs7hvLFvTMlU%6an# zE}g8D{!jXY^nBsrvG-(}ca>jE>>)Q#7%o)hzNTs@r?ngOJgQAgoyysBhSjt!a*U85`&yh#}x7s(_!>%QCj$X#k)deT&AQ3j-+$%$qi2-Ual(mN8W_#P#s`7@;pyh#_+2Sv*=o9NH=E*U3s0@){W zCKwIKHi3NJvBBJaU8;<##tqCjktgInx}do(txnI?Hgx^zo>6!Lft@R504yx zk@oe-Rp%9b)2@;g#x_+lQ{x-V>fQ`*W025s7SEL1!kKd!**0z#g@^|7ZLZ`C3r~j05 zBeI143l;Zz2hRBm$iGWI@s9RJMWrQShL#$>l=C`0C%ayFCb@}MeVYRx0=+#$xBs_59nV^6fjr#e)j`HSUb5y!7lq!WkICAS z^}QLQkAwFX47T&OkQ;h?6VGo7pfng6PXiOG`SD;w&Q^%iGq1 zSas?+{h2vknU_;KCm~~Jq=s>g{Yx5zdV;CaeQ#^AB(W@(O3Yw#*^MkPOS|azFAEIWsaOU*vUQym@ z!(Nap1U~U7o@<_Dv8*=TC{E8MEvtE)j=s#SpWQg}kJXb&mwE&$d%Jljc!$fa4ASUE zogpLk0A+2oan{BpCaR@4%ir7k+LOzB&=WB$=?Ua!5`MDk_p#F1C$p5C;rc~# zi!k2b+gHO|*jw9|=v>tSvb@>(72fH@<@XKt-|=qrj0kL{Tk8j`--!3bzeXkXQD{!~nylYrbF9bA zEl(?djyEp<9XP;}#%&X|_VA8hM|&AAn$tC_Yc!uZksc-MKA-P%d39h7A2tZHB)qL! zTPga}$fcYwvf4(j=-sKN(s|!xUuk(?;H3DK)zkRF{)-6MMU1?$ouN@#ZNi=4+>jx( zfQ}(1!8by7?2^V)t0ytReqrdbhNx?hE3{bo#wo>j@T$J^(mQ_@FO(U^7OM?W+7YbY z%AklRyI&3)ziQQHP5G{GHmGnO-xcbv5ix&tsylyJBh_Bf>)A9iyBC;e=)8EhYAB!e zZSc=x%Ue~f#Zc7FvH#Ti#y00%&7KrVF*I_IcpvND^p*%r5mGdCG zYW%V>k`8!Icp7?o1$O$1FxBlP*0=Ts`+|8;trtCz(|{-d ze6QAbSYf{Bp*#|GM>~oYq46kZ55!kRqpI>#q*XQ%*@WEXF`U z+S}j=P)0oz{VV&Y@TK^l=2K?0{ENH?ihw8bI=Zc$VePlh+eb`ByC18WQ!xA_HpVDK z&ya@5&*Y|o!_dlYhZdlVb0Me zvBp3*bt7~?G(7sd<{>%@HRU%_XMbPcBOaf3>_*oAkc%%G@73+$hoPg96Y6X`je9C} zkv91*`Z|cYNYhTXdfPkfuEt8OQ{-kSHT<{o!u*tNAe|Clc(Z*srRo$`kX0Upl`#+N z3!>x0Tf%jer$#y*7x#-(y$Sw?o}qLzVlq?{4MDP}7+qqU!%suG;@$KZ`Cce0{^}X$ zi+SoYhlmZR-rL=IYW6Va$EQZlh4#gM*ABtkyQ(LBb{TD)YU|gy&%??j>1)A48MyyZ5499wF){ljB@%X(P9x_Y@^cJ zQRw#KRB@cYqGyP3lx~BJ_O8gvoM%M!ShPfBV|0J~fwh!c4&IyQTjePu9${XizFQ4z zu5;QLV;qT9jP!|CMwOU3WN9HN%<+AKymy$D@AAB;uu9+5!w=h%ItAu)`wTsET_A9 z#2lgyh@OfJi@wk{TIuX*cD84LcaNMSbf(@Af+Z14Q0JgI{2p#aq-Y7PqZwo+_K;i& zSI~1}C3+FGza@zWW(TXZo*pZJ3gSD|vPKnV0E1#No(7(6QURs|RlzDukkFsphSN$< zR4LD|rfCWE5?T`%d75~-!51MH-P%GuJnK8_J7WUsXm^YpQy!^a>IGF)tmWAksp+23PTpB8VN__T%OUM!Q4gWqLr6eXYH`ooBg%&@j8+A zN=E#H(~j)Ie=6UXuX}?0ezqFC1>aa#EZSZcWjNh z-PUPIY$j!UmJ6Q>)$j~tv7HPD!On2r&y0Mc9FFcZvMib&AY2i%Jeg316d*exOR}@Q z(zNa+%-ppP>X$O!kl zu-#K${6nH?A346J3t|f)5}|ez_cG9+7Ycg$G2?YH2r)7sWP>)wTK&s|YiV+ln0Zi}FLZ z9hDDHc~t8S`~%YC!__&_2g+x9y4eAB6voMW1lIF}OQfgbS@8h-ta;d3ubfi>7#XaQxUR@V4|%){)4clsf@r|>gV0+r3H zJI&2siNatt?PD47LfQ;{B~gR!BBk-OWeG0bv&ikJ0LhqVi2K@IZDH*9_&@47ZN3wr zE{VVLh2*(naV~?riRWx5jSIw5y^XHKevWTY+aWL8PxcTe@i!z=68Ik|9#28m7{`cu z$UE*4pBSH^-cxy7bxsP+`EF8W=@d`X#mE8VbYlr|&1h&Gi}#K9R)@f`<&`Z91^G0w zjWkEtKzAVh)M8^0(a*e%oZtTOCTfDZ-aKWMc=S)4n_g#})ED>CdxvLnr!=}u!yu)bH1#EYqaD7%ey2FZ@*CJJlCUeXoz zJef^TM4abX%dA3LEM7;Qipt$b^ec1%CkdsHM}CY8L-pdAzo0^nY2DDg$`G}&lFzuJ zjiKhTEBLL#ZD|)@oXX2Cv!*#mt#0-ly|pq|&8Lva{4PamOl8olOVSLX5A`csAGsno ztUv8~#vWw{eDqmkIVv)>VeW84_?5`j-%0VDgKh4@hWEB6JrQ+xv5(JJmwJPCb>jPXycRJDjU zA)aWIQa$EFvIO^(wS@2GbM#?u4su)`TjiX~Ru^rsHX7=bFI3q$PF!b4utkIqa&_h` z*PfaR)}06Mv=_nh#>Z8Cy84+u6aGg@Y&pK3XCHH!3(_+A201p5>>7FzeQNxn{?!(3NmGm2Q)UJ9&mj$g(eVn>kw*fogS_I~ScwYk;_ zRP>Cp&MZP-Aj=69O2nREy<9R?9*km|-PryNx`U#cY;0537(J-jY;As{Fo;vQpXes!b!Uvd&lzmg)(W6f!*L}^Ylf$y?bs}CGjh1w@Hc3Ml!=X}nJL8Y;pU33nYYX@R840Wo`e>+=PN#AlO}<{H!%Cb z0b?)MjXNWjV=J%)=!?!o`xx@=ia;yAN*e4{PYoa8|#&Bu-DiqU774)j{xI156wVxEkQ4#b=JSJHd6K3rmQKl zoWy;`gvf6&vc1GV`eHq()zVwQ6QPG$fI83IW75RVTs>|UbAZ}_&jiu~6Y0sP#k8#7eqs%y(fQILP#2mAwaZ0VH{{ekYL;YXk3H=YGIL->v_z!zdmL7i0t9AJ=L!78Dh(ynRSb&pEh)2YeS9sVbNI^T(1&nA=OK{B@3 ze_P*c)3gm*3f63b^^UAgHRBhfZo+&viTi_m3y%1ZkvPapG-~kgDgBp#tf0mu3ToTU`pgIwB1cr_FIKLn?Cy~urF zLhi_127MJ|-GVCyBp)bfV`@b<0&GVFQ_L=jPtFw8}L^u9Ex=_gp1GDce!d%857!|_AtsYvX_ zd_*uGu4jT9lL$uc_Eg7A{SR~V>f<{26u(C>(qu%z%|myqwwFL`bj;jC^dJW#j^XDj zh(j?Du{v1y&p`Iv$_K7bfa`H!VN5_Mpt1j8-5bcv?h3tHO`IjKkdb`}GxP|3d5^m9 zt}j6`kj_h3RWw}LJAqL)0s$+6-`-*ktwB`JU{%JjqDx>tpCIG999BtF%upI45kjnO zjPV6lNJ+%>1IS_qX5kJ-P!-#Ki80(jTwkMyx3E^C$ck@@Ez{B7eMI#oRyscCfC8ud zKla`ON{VXRAFk8YU7@S1!%WXiPmbg?WRM&b1Qb+Ma*hIuNK}zg5fKo&CQ&7OpA$C2MO*KY?d6=9}8*97EZAEE_l!z9X zO}>)H*@YW;XaFfO*Mth~ej;?}C}x9ME}im;KGi**wf)cNdPM3AG@u zpF!uANZV&)HPHjO+tQ2K@`ISEUJJ@0(5wJskrpV8LEPMMBhuj@_JrSonf=~aCGcsi z2s8UXA)lU!O~Sf?nMljUD18gCH~lB9@c$JlwoWKUdQL=nIg8RG2)D;3L#x*iqXgvn z7nsX#iaY4P7TnCk4q(Rg7*3g=iPAj^>H9S95V!>rPC)-#P^Ozg+Y_;ukb?V=#?K%( zi?K`IkMv)Q+%L!O_tViz)V6W>cKb5=J6h15*cHA|I0@e2$c1FI@IuW}QdH5YlaR%b>4$iaJaWnmF^koG&7hsg|zOVo( z{w(TSe_`5A0#goEKx3d4{k7Ycoeh$KaeqOY|1h&6aGXrMIv)noD;WumqI*VX?2V+nmk? z*b>_pZHitu8FSj>g=|Y(b`#bM91sS>m4wnc3aK|$=!CNr{K9Fh=-7jk3QCZcnZgp( zrC)H$|7hXO=via8i415AZXG2nxq)F~P=dYU0zBD$ZdJ<04 zs|wuBdRiU`{C51BW6LY;(LbfTU0svk@@-Gt;u4%w^-^ngRp+X2Du-9!fgKnxM8YS( zJ=Em%fl4j>kY%3M!t3%DxCgjOUGM7EL6`p;KSr}S5$RjY^_9>6GX2!>%KbsKmGU(2 zbE&hF6Ou+G_DSAh)q^wrAC!--I)XK|o&1e|D?46R{$%i3;cCf|&@Xjr(tU~Zog2LO zXdhw6$(OiA?o41%pkZj+v796CoPMkPvEXe&E648S?-TP9f6(4^jnUr_2F4x;?5@W8 z%&JJ_(=!7PSDd`3EFt(>Y=-(eLhYJ-jk}E}DXBu8s`L|!qK^r)0`r7*RnH#&_~>V6 z_E)_f?quEI{b$nkDNiKy(%2XKNEm$9avtwT3 z#*|-uH+!PVP29ID1Ep~huecGn8~!S#mJI(@Ii7Pisrqd7R@(y4jO23}+Y?_)p6Hde zdTNvCm24JnXx?fquI%+o{^4(b&ntQ6e07a#|I^hheO2O|gcrQ;;yl`yag$ziYiacW z>z-J%KVCkP_FDq>k9Mw(%7sox`e(_%yXSeEJ3HxHa4zEsTfe{np-|FGPaPG175`7&j>>#4*Au0m%o^~K0MX<+z#_(}C(&E7wb{?h0~@%h(F9>i(YFS(W^ zW$G*3Z#lbZP3(I@{VfU6!GU?oCzf~4FFBTT{D;yv&;J})FCKPuOL+l%o7ZASJm!2B z<+qub6?oisml_ECc=D>FznwjC_U_V8LSfuNu}k-C@JcD$-e(j!?uF@f#BKS0JnrkiG z^yl$Y4bILyx21BGUzNJMdb;K&y`fb*-_g5TGNm@LQ&skG1bYo`C>?Psc&6dmITi0z zC9xlz&pSsazw4Z*N8J0YzhQNKKmXL49YQ0uPvGRKXHGXcy|J{i{8Y`?_Sdy<6W?-Q zqy5uUBzL#IW9wJb+Y%&)kqtk5#Y{*LQkDG$5eNbH|*RC3w7Sf0b(kYe{LA zl5uB#J9DnwbN<25CZ&g?WlEOkZg=a%5^10OsrXdzUlku!UoBNeo0mGz+}e638Qdwz}xEMa#+faRrqaHDYmbqN&Z3S7yVgK`t_efqEFH90yhHS_J)PbEl#7*I+NM*i@jd;_UZOz_m!lVd{whJ z^0Ph1Q%^sf_^ES;HbiYJy&*hMF}5b(cC)1(0`mb8X6=KYh4tt^a8BVLid|iu)^1y8gRXBWEa0BG*-3 z8Czk!#=5flo^wmelh1xxau2s&~xZiZTe8PXfe{F29ZK!2k*>7d3Wy{ZeS+=iye$ zEa!RJy4Sh7IVPyhw5uZ%s{auV;I!0FtFJ9ftoZy4D-D%C9_S!VQ)Xii{Z!YF`YvUl z<6jns|42=DAxU{S{7TumiWklfE16q*uHq5P@6vnvNzBq+?GE9_poxYaDIu8O}GvwZVXYQLL*{9R8vDhstlyZ7uCmvZV5+*k{(B`U2;1 z_d~89)WOcq%BIK(*pUL#PT@8G#_BaCU!PAenN+$nG@Z@DozFX6!#vIGUi}qqKKr?5 zg1<`q&U#%ix2AVl@chd2*Ox2|d>36Tx6z+)E=~AFdrW&qzu8t6K33Hu_OaAEB8IN4 zEGYf7wDY;oD|d%J71wL09gP#d)BD@^>H~3SL2K+Y`qj1}hJkhoN6tFSMg-Qx zdLWJWx@%lF*&o$K?LO~~C*VB9O_s;mc|i>MD@RwHJvZh2 z>*ce8pNW2Hsq<48&b4OU%1p8ujGT)LvVQoy0*j$7S# z>V5P{jz{%}txo^e@Z-$S#t1J5@~YdF-Bt4D`R~fh!uMG2SFUxP*1PFd+Fsn~oE|K% z>5SEZG1fHnqW{i{b~wlXo6;3EZwSY2vh%F7sqamh3KH7TPFG zQY7bK*9zx+>}}VyN5ca`(a2Re6N-iNYL->ZDJ?D$O7jEfBD<|ywD}18h}PKkyK}d& zD>x*)G}ejrj68<(ZyznY2R8%USXCBkY*~ld)03{J9J}=gJd333!bPFP=vcNH`#6XD zca+a5RZDu57uFQSUXn_+7hL!1IgV#MOSJy6si8;1?_s4X&UvmGTlr_%?vjGihpKN1 zuM?N53!TfHw`rZ-SGs12OT)`UD{#tDhv?$a@apR-@=8at*oyL_ZSA-V#)zQ?(~cf5#@J2`q<{s_Gso*Hw< zgy?O-aMhXeCFd8H{#n^4w2d*PrSollls4Mk!_`+h9%&Lj5S2+&10O&iRYInRAT$9krwIedwOZd(l^;4@M@}yjI1^KR%yZc60Tk;r^CK5tlPs zxkK>0q>r>d6L~Tc#3&l0>Cg)QvlY`ze?I?vg&v$38z{BM8jbbZi>|j^et9O&w7oI< zW3)jmGt#NXSM@~M{PQ1_edIqE_KCXY)>~*l>eJm%YXdBYB7w+f(RG*u8x?Aa8T$uI zmzI8B6%F1XOi<1`mTOl#zQWxlci9d_r(@PWfcfuf;R%7cl|9RPpKn$1YG75Qo$Y(A zlViK~hVw@EM0EgmepN*L2>E2>!C?LBl!}e#XO!)#?i-3=oy3)nRa(Tc+I^?vl=y9Q zX=FI=5SSe84%_-Wm3vAXm+q--i+#O*>0zxz`%v5GDskq>PYIu4Y=1ENCcZJ|*UYKj zSzdm=LB(?aP2u`hx4oSsUF+sdcdPcDmTRIzaXWinbVpPPJ?g)uvU%y8vJb1iugPaW z$RVwb_L<{$_b-lzZMYW=>l?q1KK0T%5U3Qog@xcIX%O6y`@BwU2NHT$;AsdK#;a7e!K|SI4%6 z*3|r7BeX;LtQF{mbHiy-nsLzoX3$H~_LggynIW=Pk|4@w_Bf7Z&Y_Ves`+Q!^$Mg?iz6ZJ@VuR_pDg8!T_eCWpJm#^HSaW#N|oK;B93C4!Z*U&ems0<q&0F+?Ov=gxY2Q)ZHQ=#J|B4+ zGxqJHn{aaaJ(bhS232YPf^ci=3@O<@TD#pj%c;umS$~Y33_l#3gZmxoh5HBUS5Ge6 zU7=U|aT1Db+on8a|Ci%y*G;M-^|$0j2E;N^CU&Eh5Cfl-zgGTu)vwhrL^q2a<#hYi zn&N&}YaqX6?HE0VnSQAK(&jVEgwXli>wePJH z#A`7Rz7c1GcaKgE-|wGWonNt~dT^jg_&M=@@gt>)<4$`w$8A!Hct{W;sXnAGM{}9*Z`F-DF4D8+$CYzvimyg%tz+4^}JTZ!xPpQvE|6skL-$ zmZnQ{gsY<;31`AzpxhP*dj%F$oUDGjx?9Z;uq7nPzo=RELcK=5UOs2}B63(*8fhF2 zM*85?@~p}eRaMm=R=aT`qA< zfestwU*;r2pN%^Uvr{0A$x zVrJ^$@EA)>EV8GmJJea)jkY~v2iyx<6MHt4B(y{i;}7hvNDj=XnG*C1Q!Ki=UwvF@ z;TSFNwQgk3#B$i-&{xsL(X;+nYSvVasJ^vkN5CG#3RY=^{g8ZAyIFnLri+iqK4hID zBO`YR6KgENe${$aFPwiJ2(OCm5znZT<@@X(*iT9?SQ`t!v&>jZxB@w zxv!S0ZjoQMd@FovITq>$>+0^{L!qrz8UEg=4PPQRZProBHffIiWp%Ccxpjo_v3O@> zA?nuX(9rNu|DftqfwR>+LO+FG6#gmqlm@Fldvnz(KOwv)evI1{7<(lARrtD^m#RX6 zx2tasJ{Q^&xm~&jD_gScgH(t5D=QEOShk056#fzUGCU&man(+&T=*%l25nVL#Oijb zTFSl;yJM#;_jQT&y)CfP|6<^Y>UN>GY8FH~W43gN@{Tg!K3#o?-DC?3Z-?zdS$IbD-e5!j@S3^R zBZHHIZ{lw$GTv!ho9uBrLP|E2%h(A|OTNDndD_K6&m%C)J=Zp%1nwD45) zEXEU?VwE*V0-p!YRi}g;HID@svNEx|oF?_O`|VxD&e9>v*64^>FkBLA96lKMyyna5 zUbtysd!TLXdCPj~947WAIi9u-wpCeI!#$6rWLrJy zpSF#Tu(ZP3UpfFQ{S%Rgqd&y14&D`Hfq;K#sCVFn;HcOkag)@_+D)6GcD0_AiYy1P z2I}s}Ls;eT0-YP-?-XiRqt@INSw?p5x&~YNtAh(MLmsGE68+iM6sHNTwfm&j@=mL6_2A3kBjKLtituZp{{9wN zMRaS;)|w@u`>cm71=b~YkK9at#5TzKo8{g}05bx%h!AOnRVz;g@4>31-Zkl#J>o!1 zZ?#-bm#>vpSr=P(=d~jv)G&DEL(+bjOCqZN8!EbyI7O@QeYEK zPH7V=#>%SY>>l=(_=7xK&Qcz;`J|Az9Jdz-aq>%UbX^T@1;MJTeKphlxv|dd3d<)_ zzC2TDDHTZ9+Fr&!wzinhzCLCPt*_Y-csi(u4prY4UWXGWH`yMPCMaPk6DKoREY-ql ztoJ&O@m9;=oWN@}xwug;EBG+xC01CE+G^w-a=KJ4rHBu+{(>C!2>T+vLx%#30`tR9 z2POvUMU!IJiOp>;xq;F}nkIL#cDCHZqLKGwmC@V6hijH$MTQ$^?kx!)itJ@iTJ2Il z<#Fi)`Fh)1xSivXs0%0SJQnF2O7kBM-WtmHyFaD574FV?v z{|dAX?F>K08i}i=*QAm1T}mcSQ4qvqn4$j`w-M{##={Q&tXPuMKnoxFtWlwKll&aY0)v57rZGdvwN&lu?k~8Rz_TFy}{Ojy&dZu z-GlRi{|r1>6AqpaGz((lL1?-A;kW7k{@v`GqBAv^9WtL%wa9cWjidhEzav55^xJW? z9MLI>#(##1ADnE!+g0!G()3tXy@4DL^{XEZEu&N8u&$u`uOv zpez=7C;eIFTkr{IQRIpA$D}8@pY2+3i&opzTW7=1W&vcyM1!&xzP9mrNv-j+4omM! zSfB-E;;j<^cnH8AE%$hg}fS0SS%(!E+AZELW#V2@_TS$sVO67{Y>`ZV7G`-4 zK8YW|?G+M+fYheDz69h^cH*5x9!ykJap^Rp#n(t|Iet7zVnVW?C~V$i_*2E*t&Da& zWj`e0R;nBDhlmy7Pxu-X^swRyHfZM1i6WWA(UXdun?>aC(F@Ns=#}<5Ud(G7i9fH9 zjuKTwUblc>NOhP{Lqg#>Nes^uLy~PJXGqO4Nsw9m`5Neq25^Fel=uK}<{D^_Nsy4< z)TE!wp*Z(_fYJ+1ua)GLdeBss&KIGl9A~GROAPK^CJ7JweG~YAbGNyK`#0jA zOWdipPYmw9b-4$az?YnR_a)q!R&XyT&C_faxDjvE_9BQAc-RL`;788A{*o*nPTbdk zmZjUe8{FILrrItOIL5iBo3c8PbUZ4sX-`tv8Mb>kcNU?y!I?4JKvS-61Y9?dmzrXD z9;e13FR|hY5jTn=2_1{S!^BOcSjeVA2<$n+ke85NY>Fx&{nFQ)P>^do!PLDoQR3+f zY|i*80?ToexR+7ra@UwN_zuJQ55p|?<2~FmAKtlfcGF80XSNiI;DN`ZxWJrGRl}?v z`BYcvCthLCp8*p3iEZrpR2$41kx!-5ETQ?Y!A(E0uRWj2omuwssT7$dDWA%OSuXM^ zhs|8hr~ESWEdMJgLO-#GJ)d&I%#Hjz(TdYgDo}(kP^hdzDX7dY;SC^ANT_|SeTeA4 z&?Sf;A`naclty5*Sa|nfHM$2ek0dlsrY6?xDs1ttLfiu`(U&*?emKVguQcx@gRV}G zA-Sz?^=qJIYTKkN~o{5Ffh|kQPOVILpdm^Rc-kvB8VZ?)%8xi;H8D+Tx zaP+X^E#Ov5LCCa(`+!joad$4c-CvN~;aCaxx8QL9lVDvYh06#&L$FgJMH<5C83e~B zI1;)*Dzhq-_?Fe(6Rj2_SPIO`hOw?*)V5h5_N>C|hguF*q?9I(-X_O(lcQUlBMH~N z6@dv0D2=BFD3Yg7yj5Txl@z0z;MoU94m=D+5^a=h5S#LN9kD_pDrgZ2*=+=ZR)9j8 zkM{`6eZVKZY7$V*q-RmB$TU0UAZfbGq>0C^dtB4R%8SLT;=U`4@IZkM+XT?>-UqSt zv$nPSc0hglS=-rt@yaZtG8f2HTswg(KEAUWm3bBPh(D!h&iW@l1^^HPQxafl)QofW~afQP0Az)^E@>8vq|*`LgVD1 z|1f^KG5B-3CAXRbb{91el1HVYBd9d^lRO>*%mzYA5Q$ABEu;1{ zTy2#Ge^R!KSbRc)au>Wh0=zLa|fSnX_jJQUe}6 zpCFDTuZB2_8N);xGD7j~K8nGg93n_QZ#y~QGqM?ebOors^iBxh>iBQG9^$b!+5x}P)nP-ht z@Et(8WUbT(d0-t(s#M+`^^$UI0?`X=5F90*2xPF88d6R7cG=nnnw98>5ST`X%!=yX|%50pI=>^dvAzH|uU=oSQ-z5eSYboR|HqkDi^LCj4g~|0h z6;B@&#UkVZFD;*eJD(~tR;L&6;bEek%I11eAR6p~p*Izd#*kBQ;#`3xrtbi98WO19 z_}TLTHzbB90M|cgaupg(LSq}s?^J;mq)r0HvU<9Z9Va2xd%zp2LG^5()d-KY9b=#| zxQlC?J)w^GqPTbWTJPO;ykCiXk1@TG6RP-mE$z`dv?u;8Ep8C2%jm09dXnRbx~(=4 zl#=|^-QMu`d$%^Lj{!J-RnlA<|{jdqX#f-5t1^P+7?ae0xM?dLGd-Iw2r=Qft z-rR+M`bnMa&6ne!eo{-jup0%%Dx5_m%zpA1JZR8+)GTJC_G|iosh>0lx|i5N(jnW@ zj9Wfx2fEfwAjNd=SO~w^9Kr{;+kuV`ZfB4J+;D-xEdkh-V-9Xt0g4Z9iRF^Pt&>qN zrM-;^;cQf&&B?kWPV&!Az)md0$0NT)o(5o5CXB`Td0bc*w$K4De)) z6cSf&S(NBCiAW+1HQQmZMIPYC5UPmy;{3yE`4x=<<@|-0@VBkyPa0%;?F8Q}L%d}% z`rt8j@T*Mx1AHiXKYH%jb$p?aWeNAW4|*im8TTc}>jI7SZbN0Z3fXv@Ww>mEy)X!zX+RW&BMWjb)T_pToJtDbu4h1d6&!9p zUN+u>=Xx~FO!pMR1LLTUtO!(si&Uc0dok@c1jC$;5eDs0la}N@4O9Z}zD2=9y%}?R zmKtPN8)S*g0kW&;F5@CF2y5tthZV0vqwg&wo<1HDLFPkmQ-b?)csra)lV;u_u&eoS z*aMA|yQ7e&%$bRvXFwt`u_3+=rsR0d9R#@^{*5^xmCA#-de@@V-X>8`)SEP_`Ds-1 zccJE|&o{lUh1YEG!rSry-t@7ThEWviX~t5MhIGzYWdaMKAcmF)N##ZuzZ((6S2TZE zaUXc3%)SHdRAVP4tSYWIhtDY!Fm7q$Bmz||HOFBo6BY=psfol^ydn~l^&P}v{WI|= zfvG)r-G-z{0(E;X_iKVC07@dNWJJR^!c@jbGVn}5vSni+RLDo{IdN}la_LFBMPMzt ztZTpxI~R47IO9|B?x4tZ;9R%EE7^?%NJ8p&f7_%1DD^7Uio+#Pd$<~+l*ct z6Uo{oaCsL*%{M8EsPtV<6ff!|ix+iKs6SI+1s*EXjPkVs&$ogUibD1{ftg=qiF@G3 z5~RD$c6&>0W|RKe^Dr7UvI-VOFL!M~{JjqnR}zQ6qvSzG`Z(mn-RIfJNS~boN}2{2 z4y+S|&cNpi&>bUvvoI%W)Jln~OYceDZH68%%pIw)(jYCjJ6HzRvUo4B9QivI-*m;u zm!{ySXJsvWmP~CG4{?o2Gz_t%>eDG6qHl}olf#*D%wsKkF8{#g?4SP~dwPbMPgMD$ zV1;m1j1OuN29;KGt zg-nz>lS^n+r)zCgr)zCg$Gp;LIm#gYtQa;fMs8Sz!FZcp?zhmC+e+~te^OD`YG=wW zH;ZOWpT%vZh2V=1AwPx~OT!E@lA3l?+cdc2eK56irr9Ol2R8z$)&z4=AN(m~iK$*H zL~*0)JaU`;@iIeJ9RsUO23Cfmh1Jst-=jVW62pFiF(?5S`r}^!*~!`f11qtZ{jnxn zNk@$E+5+h?hJrE;1^WY5jiKPjpnx7`e@ujNwgiSb1i@kS$1?TDI{_=)E}Oto;T9CL zKPG@FW`9g+WL3=mm;eQbX7ZkzfD8RGNsot>#0~;-&=-+IkbOACK}8u?Ce!#g2{(n{ zQSX=qds7nQQCH}T2LMTQ3*s`QE+CQ-mxw!IAi;4rd~`v!+LBohlGqm^z|AEJ;xoi& zP{#Sv**N0MgiitnADBLTjQDu0)6G~ri7lN6ZpGCQwE%L2+D3ShjJU*1oFD{=jo{;@ zxMi|(l1Nq*xOqCN+&Y|T#%(T1%rxR=h&KQ)Y*QrO5GZ#nxFNTO+RA zvvqO2!qW^xlrAoES`FOX0InKCOY`w*iAa>EWpzTU0H=K7O_f;7*B`4_D0!Xv< zP`(GG3Xi!p*nE0DP!<)N?W?zr7NC|p} zxc@c~v+iPl6u=B}XNKUJC4*}Wepv~4-H%^(CSGx#cvwG!J|_L`eDU!9QChBItmBxHAktD!?EqA0~>HisfP-8l&cRBcS(zsgJ+nOCv-Lm+>pq6hz}xxGsvBJ6UA^GUfU5&7J4S(CpdEE!eOsX`gOUF0UiYUxA4nC z*Ce>@7(uKsrQQY>A^TpS>Z$qd&dV=qlo$KICJ+)n7h<6rxsnBUQ^8U0trT+GzPto)K90P z6_>LO>am{UTA(t>of(2F8)shDQpEN6gYDG?zujb@qA&zLyu9y<7l*u4b-Yu3P9u5EVnbig zLTX%}+Okwsn>J+M#FHPdXGHRTJPa(=C?a31N4QulENXEtpz zMQ+sdsf_d2-$5j8ywo-~paiPVzbx9M6GCV}u{JR6L~3k>hK(@FZtpRgeJ_3NP=RmU z2o9XoP{2QiQg!wT@o~{A}q8A!a z5p9GqYmVnjxP%5&0u730B6VpP6>&|Qi_{%a`$nyBqCyQ^lXodnDL!h8MQU=Ia=Twj z1K#x)h~z8lj2f}}4O{?}BY%tanvDUz>LzCcYC?>#GzXCh4XE{?bZ{oo zpfs+D+wc{d^&21F^xEU^QCqlXoDgAf;t_<|d$YITs&>uFRk zPoYVfLu7c|C=fQ=R=CcEn)m)|NPm1$EUbY)0d5re$xG14_#x5X7Ii zv;M!DmJV~-mYp4dvU)L;#x+q4XIP&B%xyWQyEfg`MMx7Mi6PGJV2Oyb{xOOa?yzE_ zgEa;$A3<8cJ)Wn7dIG`$5oMgu%}2KSTi}z4&&|dW9}V8%CKb?#RG=CFqB;@h^Dr`X z>iLk5C25N2VJ{Njc+$*c@X6m(a2{^5wFr`8ysi2$ylwgfye0isyk#AB4nfiH!&}u?;En5!!K>-l;O)?d;H~R_K&De)4)t96 z<9NIEwRn5<&3Gs1uj8GF&EFVb>U;1`(y8r9*8hojihdv7K3r6eHdp@?a?*4+-0Auu z#3w_a227^D0q-n549aYMHrzS-61;QuxA4x>AHh3c&%wJuABuN9eH`BP_4Sa`K>rRJ zHq={#w~^io?#B8V;G5_RLDN*P0KS=SgS)xz#Jh!_f_I_b2=A79E4*9jo$zk0e*oS# z`m1=i)iY84+v&TYVSD|3_;%1=#=E0_8q%)N*TCIL{~hkmxTIbXy69fech$c|xZU)X z;Oefc@a>@=hqRu0GTgoNe}b|%uD}+AE3v^Fwl_Tj%0Bulc=y$x1m0zi-yCy#ze=*7z?c^AH2WGa+ZUP#!*Snn?%RKk&N+D%jEa~E2Ri+*&DSy z*-olGoM-nXJnd_Fd=&6O(|a5ES+0$y;!^kGbrf(K{?o_=oBB_@a*(zT{HGtli;M2- zGLj*#PKR328J$h9^Pm+nx8MzPzL2#Qj_Z*+*}DjD(jag6GZnb>cktrE9hV4iT`N2( zqmFPS17AocB*jyZf&^9-m9B<*Q2jFm&g?oPO>-%FdE+rE&>iCuaDD+#X5B*#6~H{2 z5=}~_X2kSL$|3+yy?CE$X=|?+w{zGqh43PZg;kh|Z(g(QZ-Pis+kX@R$DbQ>{|9Zq zmAWR=R#7|uB~1ZRZjIMv*94o(La-*7T4ug11Z#rHZ7d7Hn&8<47|TMiCYT^|SqRny z6GY2G=>G(MwaY@VCRjn7__7eJ37!N$!>oZd!2~E+?L`Bi1d-U}iFjd6Fj7$ZxEalmLlpHuCZ#t7l(`}VpS&_+o}g3$ zmyCr@Snnc*&0;!}IPtLJFt)es)hhL9J-lCZjM|g;w}-Fca%75T)uE2GmKc z%6k6`iDerPefc&A%VoDY(1rx+letYbz9E6HN&Cx&goi-JZK|l}#1cPN5jP?|#fObTfIUkE8K@d#$&C_sUJtf!u} zA8hnv-EG2tRDGP9n^0TSo<{_!s2#0S)Ur{s|Kobei`vDNQ=-bb0h;{BpQ7ehl+F%A znm!8p;}BR2zRhDKoqx{g>_fN(c|JVhK>!nQ=Mjg9E&f^JWK>CYV+BeaX-o;|#*{!D z>1O?ivd-5NEg^}2J@Mdbzn+LP&gWtG5ufq(q}~b@nA5!yD7*4F-p+M+xyF*VZhF&V zOFkf8BqU6qgGoylr%=T)X3a??;{wZ-PJ_@pYa-@~a=lcFyxbI&o6SWfQS;4mq!S57 z9m)U!J*@Z&a3^!N9L`pVa+1thb2#f%z$rKbwTQ@lY?xSq3pa$+8N{3_Q8ZVXG6xd{ z9#(uGWTtIH8KSjt>F71n_}BhMh!QdmnB=rnU&#E4;-8{7G?7zC03KG{AKr!@DL#tA zXJAe%f=ucx(_tb=$=(Vy&W9B;`kLJTAdy*vOeh{l3D^q^lMrCWgo_xaU&7G-B8E4J zp{OoHc09(kvj9ngep|>aqKG*3_@+~eDm|=tK8SM0PeQ&pT9F%d)~--d$$XSpG(En5 zwYHTgex;U0YejC(5`(ndYr#T4W|eZ|J*=hBo=Z&${VbU18;{1rD*WQDt<@c2{i0fp zeysL+tuct>wxr8-x|iE0XU&5$V&mjGb9q);Pa`%w~~8fHo0wz zq&$s(v?6QqCzIPs%WSM^UK&lwFA##}_N?jN8RR|lXlXaT&boLA0XCE=JYaj>$tf--arP+$y4Xv4`Mcbs?1$ zIbi|t@+&|%X3r2hs4^dvs0j#CRe4V)sMQ46Ibcm&e2JJrZGeBcX?_8h=H&u@U7mUx(Y z(jDZ2y9{z!gA~H6VvaeK;H0#@!XV{uO^}-qLvv`w8l{jghAF*;B1jcH?;s?$NQ&<@ zUr$IpthfNVn!wlhEviRuN}R;m7@Zd-Y(u=n)oT{He?}2!_v`N?IcX)H_ZCSIb|o2- zi^!~TuPB2xX$kN!dkRT+!9j6LCf}6RfL;LPqshED-#+5=CZ*DnZgQu+4+lNzO0prj zF+^sd;f4ko@s)y-LS;X*0i@ZB5?es8#by&vYpLjA#e~i32MX4|pe@`~w6cy+GWKsv zeqJO{_PykPjYQcnli;ffzE-8O{5W9mm(b>MQ?x*;4zm14QLF&I6a+~p;YdQ$mvk78 zj&P*!Hpz#h9fRJM`|%#m3NtW+q;xHw5E6x2uLiusNt3K*nj=N{!-^ZGQlyNXxa>KERF70k z$TysK!r9?@U>mg|GOvTTf09DgLE@D?AEtkS$v*NBsiZV+)QK=odm|n~lV<=~Ip;a8(plu4#%=Z*x7lmlX0LIZy~b_!8n@YN z+-8qM$I!27+-9$Fo4v+u_8Pa@Yusk9ahtuyZT1?s*=yWpuW_5b#%=Z*x7lmlX0LIZ zy~b_!8n@YN+-9$Fo4v+u_8Pa@Yusk9ahtuyZT1?s*=yWpuW_5b#%=c6Bgo@?joa*T zpg790#%=Z*x7lmlX0LIZy~b_!8n@YN+-9$Fo4v+u_8Pa@Yusk9ahtuyZT1?s*=yWp zuW_5b#%=Z*x7lmlX0LIZy~b_!8n@YN+-9#0f<9d|ZnM|8&0ga+dyU)dHEy%Vwb-!P zYusk9ahtuyZT1?s*=yWpuW_5b#%=Z*x7p)3blB`QZnM|8&0ga+dyU)dHEy%l44b{< z0cxN`DSnj7h0$#)YJom&92RbhO~{R*s#Bq&CG2qs&N{{8sX9^)Xp)pRtQ{1^w>qt1Yzu`*n~Xg7qMAQGFEw2+g08}Mfy z;~=Lh(;?u$b&P}TQ(vY)kCC)YTWh$DV;tlxo$JkyagejTTy1`ggPiRm7COdZE~u@v zPEyVhDQJF-gWMvS;$aS$6OY49Kkqhrkqe9s@RtN@BHHZ47~HD3#hiQbD75G|c_#Ir zS4vA$gd#AYKo}1zZiUcNTA=@8SGqq3B?^u&nZOvRbtE8ax`b>kF19-q}SQ-*+wb!_l4yx55Jv9s`T*0Bp^6dNgI5SD+2Ab!N0 zHjT(yaJ5F5f#;aPu;MU0Gv{%NR7!zdSW|?wYzoiKH5y|M!@{*Jv@I?R3##4ur18yQ z$Sy*i;I`ZZjgr^0dQff>qWiqbi|WlEmgJiV=Dhmwdz%8vC0V;nDj-cN^>Lz7fcOPdB1ZyDFkEcR6a6k%u z{|XH}h_c1$6-n=ghfpLe&U`9t4QU?Q;%s#n>DFi}* zI*?=F6{LGGkzL1TiJqxjI2>Ob^4%<8(F!Dy4J{Q zqc1GX@DQ7gw7?9{V*ELB!~(Ssg4Su~Qmn_n-~`=9Kz)UTDl)B!5gVvu0r&*lNb+hZ zCWFT*;st9hk(pK8H5uM0wKVT?z$X;JM?gCBhZPgnJr)}o+*$9z*$Cyy!>g6M0hh6Q zriWK6ciXYxKt)PW?4V0fNW(dUq|oL&CQFR=i*OG)m3z3pq5wo`H2yv@ z6{)RR#k9ZIH;7op6x!T7jw1Llhg-Y|7-p|j(u4fcNCiZVc+$x;jeLM8hC724`uZ;s z%_K`3S~=k^1aB1{fqBa87}p{YD$J|u6y}v3{}&4L|N6ku4pTWSko@Q!ig4WrO(8&y zYCdx%llxhupyNr-k;C(BxS%WKaMHX7)3}(kf5`|ZOz_CRzX`^aMSSKHi+EjSyLAo&yWjrx|BrwLoE+E=##P1RJ z|KPsdIC344r_ee`rgHfiW+cV{PY)~hy$N6XS?`v7&*7hbxYfls0RQx}j=@!C^e+@= z*OuM;5NE2j@T-0Lb^DvLD^jJ4*XN5WXZ(mC>blH|Do%i#Y}WG$XV|Poa`V+6m@4f> z?k0)Um8KWNttjWAjNFPa<9(~hmx{ji`xK%SslhVKzxW}!%~RxhQm)i&v_foGc6O7N#ZhOppyr*Ozc7-{Ro7sz9HmVBF{@fdG=7R zy+YJBf`V+D311*z*h(?IH)M#bw=MGUdD%xqzB7ysgI2~v+n%s#SViM#JbX9uwncP8 zjT-Z^k*H!Lylj+ZH58VVMIh4WQRs{RE($M0C)Z&LezBN53-q@_K^L7w1VlYb)OQKN zqp(=)Kv9ro*Ax(x|P!Z5bXg82jeBs||*9H+a!d@t* zQP|JL!(J#hrm#-~PT=Y<5*4DxVw1n7RzYKziwhduTi8Is`Y$`>kSFK9741C zlx}zYon~dE84vglk*|4fml{vEJH!G?xBCde)9ntiJ?Z`}5JuL|iD&&TGpFbM*K+!D z>BzHM|C*GY`gh8%u*Q|0DtalC)6(L)O%)rGZj*p8bendmZZrNny499K_N8EMwT;ur!=ytzgZal?Q_4=T4kUb%Z%3ibmPr9|V3^suy` zRP2)u#CAhS?{|UNObDLkJuE{gGEFkfs?x(UWg`fF&BEYy7;*HnxT%?aI0p#Y+y+Dn zAs)&H;!3I%y)0RTc%lH=h10BhSsD>oUJu|@+DzQr!kfFd>(lH-fuVgHP|%Zz&c=fc z2GcE`(EzdUJiWNSK>~67X$O*w`V>%+C6S1P%rO{^dSry(ozUAY{0z4W47<{|H@uj6 z4ww@vsnz(=lKB~UDTLXL45Iirjds8pM29WDX$Dc|QG`LeAW}K^Zx+7Ywp$|#-tERL zN3BJB&v&+NJT4e_R$X}?qfA*`U z{{>z;55mwr6YE}t$qH1%H(#chM8&36V?)y{L({te=Bz-%?J~8=p_I=O)9hf&eF+`~ zP0+Kfg(IK53UB zZd!RDkUqttoXW#Pe1lei zn|)|Eq(Bb&4KV!*$?tB9Hkjn_VCqpY`%Lc+aZMIllAenP#Y5@b6xJP*RBDpeDqR~= z))q59AAs{ho-DgioJ`i^+E7pD%5C?#8@^+^cyNZOgZWeF+TCwX1@hBm9 zt!~9;kiarRq!{5YASK2$2ZFaPt=N-9@iZZL8`O%uM6FwZ5WG2T#oi}G?-oGt2D260 zM~GEGc=(E&HcYt(GHADX8b9x^E#nR1&!EVpX{QYMrXHg3yRifs3e_vbEAf*YBlZ;z zUZt(8kKQ9u0@Fb(BPR^TuEd6-g9KR9h5G+v-#IJZ^W>4faFKaHwgdeJX1;3yAlCFw#Di z^>_`4w3eXY9ZxE|h7i~kYo>iF8{Z3vgM{E|pUQ5dwC~dj2%h$->_MU^A_PzSRQ3#| z>~DnNX`jlr5~4|KAb8rRvOR>D2ZWLK>6fN`hLQGrK#@5JX}<=MGSa@jk@gPini40N zCGUSf?HlDJAd!#r^8LQ~)wITnF!8YBolvPUAE+O1v>%wB(54CR%8$311$YDC#=LYN z??vf3x-I;90v{hpaArIB^HO(wB+=hZFfVk+r;@)H$#zi+^&Zmt`S zkH}$#qjwiL0-!%jj*8aH~_~l-Qb{Q38TBCStNl44Z-?5pk{60CWgWx8PZ{ zcQo~(EqM0qoyKW+Qtw?zNn6O1dGBg+w-gf);1_NhyR~YKrFY+Wh#Z={M;`Ad5fPh8 zn%prP9n$*^$xVbG@X;GSu_&nKKM?f}FXg;Q{d9}*SaiB0pS~!B=6lHV6@Ju%xVu)= zE3JvM@GQD(_6m{fbrnN`lLaj0^85LSC0)=C~08`hrZ;7T468{UEE;YuD38_}MJ zvXX~_@4~h}QWPHW8j4?dv*I*(7-Ao&M=8RF84-A(9Yx?iC};?N;7Ur1xZnq_U+X$=yU)Xb`59sh<*kKhG zj}n71k!IwinB!0KM2&2r2Dd>XKQJw=&j8(AKY^U$jS ze?&z24$8$x0OQ%k)4)|wn+5@pPze}>|M>I!nEyA^U@;1THJhga2CYRD=n;D1Va3JJ z&q#+%o(^ZAwtSAqHG%wQpgb69knqwNscQAff;&878F5geaXl%-ZS=hQjXkAZ8a5OU#fYy&=$NWb8d6ODLOZtho z>q+||oqpmhU6_|b<+l+&#LYR8my(RUTa{@lhrdPRk#|OQ6U|E8188d@UZ!o;R(qdD z1mT&6&dblqnzfh?T^H-8plV>c!MKydT-HIdCB?did`u(k9uQl7i3@Nk{IlU<}aW}^?2*Hkwrv#13G z-NGTaMXeyp=_$)0!e+ zKCGCDD7+0(LqO772CxnVJb@38f-IA^6P^Jg@oNaV^kFs3#@A^af@k|{;C*?r5VM_z zK3*alMr246;~}Fkwyav`3x&-oAHM_IN*cNEp>+F_Nff(FAFPT+8)GQ_CF@8^FND~X zt0@t_VRqvAf)INM@v{+&M%PmMUGjVh)&vZ@_A?I^mLUW2bs?a(rHrHC4=`^#h`I~d zlrbdg2LrJch_pZIB*-AJfVz9S-#}hI8NOpSvhMO^unt0SmnS>IY(7MflQkf+zogaz zo?00+TZ3&Z(j{?1E8A6%C(nJXL2m&4AjhLYInZ}{1`PXw$efAv@WD3)w?qnTDNAjP z*xrwhEQOcG^#)?|^+52ly1_tLZUAB(v20|ilt8x=;x|g5O$MR{h|5RrNv2lCBR6y~ z6v=8|CmpdcL13Gie$s~c4}!#+T)w5-_M68KX@ zO32(!fZE*%M;|z*!vW5VvW+-TG~xG{@SMww%cOGo3%|yr)y2PI;8{x{zb^W} z2wW25B2wW+rXNBs@)&;!HF=DMn-C51{%ef45!3$En}~;E+>S^I$z!}25RdV@a9k4O zQsO+(gibFv%IZZiTLJXtV!X+~|BqvwxH&nVQWyT&t4vqPuK6K6eK*7L795@6z*_Fh z(Qjq?9-@C3o}-BVUO4WBBl~GME-Df^X^7_gsq=`O66kqQr4o`S&~Jcv0$GNTIu|7Y zSz0fb1e*=~zfA%hOI=6rL8QamOkb*)IuAf-T<6>1NG0#TD!$E7oHm(q#UCY7LUP5w z0mKzAg#+K(^rDAK>qW7+5&V~n1s#J0{J)Qdkaba8kEsXt8B<>&m8b!~VkkmPtXpfj z4tTM5nf|N_GOD>VLB`ARV{rVn2zMv3`%_bioO0-GP^A)*N3;wOk0{@nbaACEBF+;{ z+Jo~lMR*|4my7u%1OIPheo=Z}1PGTe!5=XFD~bS>;8DZipb~s99Dh@SKV@Tc%=W*_Qp4X)+z!WmEdA)4DC~&<>N(mUi7)cFS()mhI9B zvq@Vz+5frc{O|K|pVxk63`x_zKU>ee=Q;P>bI;d3_dZ|J^3ALN7%kO2GlrD$(!Z-= zESc7sN)?;@mC}@o3{q@z5bQad{F3mQ>H9(8K#tf^yJ7B%E3=^_)6EaQl4TsP#-m|m zSVQvoTNq@$q&{tO?+U)iH0gw>C-*Boed!ElM+-|!Bs+Qm;+clK>ZQ%PHNc;KFH_*f zrDh>A0>DL*0{(lf)h_%Z3Z<2$S%UiOICJ52X?sKI!e0j9I|9H{j#24G#kdj|K`;EM zq)Q)Hz@q|a6u>7G@Hzk&twocsg71a%r0vb6c|uGxvkj$-Br|L60^n|Gx1}^!`tAVW zqAr-{PfW#`@5-6GN|y@i9-JwTSvyM89>ykxvyU$V%h|`jLm|32Jxf0cs->N!X}?I^ zSBd)_hnt@1P6}>kY1#<5aB*T*HwqHlZbV^@oDSoJnP+*_Zl>j(D0cYe51n87~rxd6J*v6pN}?+J4DmBf~EYgbW>@{FQJopJ#zBmbPoEY z>gkjns1O4Hj)Q{;Y27n*(zI4(5(jnI(OVSIW=8hvxl zc4;HhyP^lE0(9LSK+Sdcizwvc(+XfCJ{?5Mg6Z>L0bC^8pEvlST+GhMvw9_`slQcf zlMX$M*P`d6&jMjtev;K(42KYY&~FBQeFCrEYxOf3TAx>1xNOk)iGZ8xG@^^^#SH9s zQbWQbxk+QjOq^)y&E=$R;+|ic)hr02GC`OlK&P@#pypI|3`M;!jvGrb8YQi)2wB9uHUlS@fl&<~@GC#d9$NU?Pg;}Shy)ZvV z0FLpEKy{3N83pXtrWqH2{7PRcWWG&|_{P%GI>c19#o{&NM@vm|pS#OG-;rK2>bo7M zU?Ni=!?h>=N-LM1VM@z1|ExBj^w`6XIa|cI^k-WWb3T`*JMA~v#luS==S-q(?eInP z^6O-G`fflo`SeQn81*mlP1K{=xT6H(z7XX-j)VM)b;eLOH7FS_kq^SE9o%G=VfREi8B^1-{>dFKe_u1pBht>B^Q=1!RX)?O)RNOrRD#mpbeLXF_J;jm6cmpzu^Vdl%JiVg}F(oTqMUYQy9 zqvaB}llRI>No$t8=uT`N0$i`YeRKLRi+meFb)9 z^)cdyz=m8ldFLXbqrc;iVAD0b^)7weuDe}0vwMtd*mbv^c0R@M%QEn7C39!?3E0z* z1J>ZK2W=}|j^rd-vJU`v5oB9wl>njv?6kWpNZU&5LAs5kwAaP+B?T(OL%3<2;>1xyh@4*-*Uhd}bn zr84U72LNb3kpY0{;~4&2&;so*Sb{Y2b;GxCI z;oHll{&&M*)QRESYeWiTo!NZ~J?5GIXC6&(MilfhR})e(Fo>0L)~Lk55mtjYku z@X8F}x~Q})1GpYnnKFPIqSE3F09@UYk;3Yzba{e-PZ3F&e4>Px9vsC`qBSOu($oJk zrWBrV*6^uOO5q7-3~!^ZQh37I!rzXW6u#u7aQuKt;Y&^mf9|T#+LxRmEIKG>G2$;d zJNQXdr#d_MvNMD7{ir)L__DKtov61tEBJ%*yT&Q%Aou&_(@7olez$xosblbeT6Z+5 zL!hV1&s#m3c9nSTg3{X->^AtJtMV5(=}5r~G|~ZP*Llu>ZzY zq5Oqz*gyRM89z|ozFbADjE|HzC3P@9R9>6Z!RSDFRZ@rI`^$@yI`qD~JU^*J?LFnA zNgV@!qz<>5IhCS6D7~vZW_1jDTIurE>CJKLyw*D}oK|W>#Hw3}cdvXLAVfdU#mP^saaHcp>bx?s}U**|sD93e5g zoFZNa+0AK&Krfgi=jNtcu5sw|zVK)%npRqgv-8tug|1@YWk|yG#m%KVFBBq|WYH9< z9ZY)RO0SoKF8UR^3%-ah>SllGCh&gQvPcFz*h>B}-m~aCtJeBN{bf~uLslh|@+t}S zo))Nze{!g{W~!}4RWn6Y(@GUiO$#9-|F$%Bk;F6#E~9o)EmXxc zs^S8Qe|lQTs=^tnrkSFq&}A}m1j_6z0nrA&ZI-x|s`Mw-rRHW@L#6XBf?;okKWuNl zyZKYi;uZ7D(aPzf?u$g-aF@f~0gA1d@^2vd}u0 z8>o>ypWXKpXRptOfgdv8H$xHM&*%fbFH#ZJ*X;e&n>3mgO7S0OxMUb;V;Gp0c0h5z z3uyAw(*~HasTr9zFn7$9S$WS==esZi7k5weFo*KRbeQr+nFrl`<(wH6n-nh!xv_~B z9-ah0OpED0;py5VCPIe)1=*m1xllp|TwEdrHoN4s3|C_ce0f=kgA>PBH@qV4uFkW` zLxOYV`81mB#E^~MGP5S(AF(@}Aks3@INcn^_ZG%?WLL=9()rbenRF{NSzxM|f>}%E zp=lcXFMy__>6{~G(B@`3%W5c^7DDBkC(q7mLyV%D;bhh7%tx*8B2{cM6EvHK1qTTe z<_j8aDTx zs!FOBvJsFHZA_oINBuws9=g^Px>l>Y$W(EWHhRW1M&odDsw%e`NhqC3BZX_FLg|H! zc+QEkX%ZGAw02}w68GlO5#}fIMh+!d=`1SaJBjJ4Kfs5?-WOy|{W39sL|6KbSoG!Z zOOqN5nR{rKJSl6K|A>?3sw#&uouRF=$H3M=`y@Q<(IxM1!qGG zCmn{6WRE88v)L_81gPwmCIChG60+{bG?gjL4_cWYOwA|e*2S%KPB&O`S%ur+)NFwnMdJVSQx=g~$t4zHJYEbQlL!Dqko8;!&>lvg zOLYaepgEFc<+8NBaKW}PO&9q`S`?bMCxQTtE5u~juMbhd77nRPa_^Z$axWPV68nUN zruM6xk1k0fkPRC7z06YFjh)bb%m+7PhVdrZi_MPB3rKQ_DQVG4#PyrC6Ii4aJDp{E z`TfvvXE~EF{J^g$i1I};h_90S%5I4_77@_IX2i5*Chmi|Otwx_R-1~IxhoEtR>GLf znTh#>qxmySIwjzuLyA{8hWKZKD*mbKx9o)nkhnB-(*+DAwyKt{7p5Y^)+9^JFi(j3;OE0cn-X2t>%4L?E~( zrYTu?DNM{ueF7gh6rY$!gTuwIRC|)8d9Q zE6kW6V7Y8NCG8<@&dClxW7f!#Q$vHE+I;RR8zIwD5$S>~nUtQy_NQm`3qt7?Pey(? zr$OF3T8`9(XE2C!xWK5QFStfaVdi&B1TI(go9Ks=)i0Z~PSlcLcqc39@{P?w9BMU5 zGk0oAV1W)wGzf%QTL*4Z|3fKI^M95Wfu3a>7D zz`SI2A-gA@Z@acA79jg3Sb|8=79d!Dq;lx8UX*nCsjQOR42TR>=S+9SLBQ#24%TE* ziV7}mViL^Gr^z*k%-}4cl=;w7j9}nb<;_2HNm1BYlIk1mVE;MUEnJqRtN|XMen~tE z4f#u*QG%j|GgeUPcGQrknT)eA9s)>%n0DdWJ(c5 zeWb>;AUpH(b{F_a-mN6+Hdty}HC`aZX83}bvmq9M$!ZpbLBD2hz{?q!kiehGJqx)? zFg^^fL@8Om&})r+N!w=iQ_Qz%qY^`&l6Y_?hr%SQqPEDt(xvB_z^^tY^FeYUYY`^o znKfFEU3ZWhrLwB4S4$};7bY4c_*S`5%4?$dMk$8#=9$qImf5qLM`}WR1E(Q0=mWg#%ACeNkA|GB+Q9us{)2BzHzRZZ#^1 z3Amd*q;PSzrGT)3AZ^oO+3pp&)LrtxDCB}4!nm4&EKY0(lNT)nK>Gq(-kn z+KUr`Er`6CMT^*{Y#Ss=764bJ0d5O{-pYlKTp9F6;coa~Rl3vAxhx%N@Cv2(ZL*22 zmi+)z8nAuT24l@DmRY6;Fw67+34t;i512gJ8`v~V6V1LmC(q0@kj<_kyzIsU0OIo* z@lLhw+^i!CXtVABknRdM&)mv7!rj+LB_Z#!V=3Cf;xh)SkK_&Qto?@sk;T_Dh^+lp zg2>{#8AR45m6Qc^&0>pzv}@KbNf24YBNj&^{1lNje1^e6L6OBR8AR5$Cx|Q#WDr?9 zk|479YzC3F|2aWq@ni;(wQnVeES}CF%COSEUK8FCJJv-j#?$Ae+)<|kf7OnqXje6q zPD2qgEFbgDw&$A>C$5}g?AhP&a29Y&fRyZo% zm!d%FGpzqDo{t?YK5Za%ye#{80jZsR(l^}2A{)Xt^Q~4)QcgD8@!|+?SAVMhOV7)n zugRYm(xf#T>;X`Ge49{6Z!oRzVpF^h*h z9vZW9!~@Yd&t254qeI4XRL+UxvHYaLU^OhB@Ss2~XQFh-H`~SHV;;1f#e{fZ$h8sg z$rG2+kUBnm=SEnHdSsyK->D`&^*uXEGnVlcwxfbuiUwGG(}OB3l0RUj2}`*);`>8N zcy1^AI}@dZ0lah}`|Gq(b)`m^#VBHOrI)~%AMPL}a5@3yDN%0krFvtz-kO!8RY#)v z>I4SDT|u#g%leNts#0mdMH}po8y~?jwIpL+P8STe;NIFs{OVcJm3C% z=2PFdV@vdKw0Y4dFMl{%aNVN7$r>A#n}v47#KGd59@JNF5}Rkog6U<0VQ;geNG#79 z&vl&vr=>+1+HS{!d0~~Ey48+TBZRny?_N3it@yiF&iif@^gCdPFHce01%5`9cYU|J zSbWJ^)klxM8PYy#4c2i2h+3;4 z2NWPvl#i0=E{1ZTEp-AhC5kIH{2OC ze9{`=9kZ^-B2Qdw=hk}SJ6L4%;zT9i5H|6~&Dzg6DRg+E+gaRTAhijrY)|m=gYUFc zT?q<{y#{imSQ$(3@}%%#6DNiv2?~ox)1+A8_zTjz7iKD{({_X|S=?kFPedyg@#+@W zaj_uzjczxQ~ZItkx?r~r9T?U5vsxi3AqXfw{zv=yq86n2P;%|6Rg+-3M zcr2v#v~ReRMLdb^SVzcZ@p%v0!6L~Q1ZL9iol#v*&s)EEvfMh`&f>3m(2i49Z1?@& z9rhmtZ_++#eZ*1Y>cHjlNJYxb;}nebE$agh51UPV2G5*kfBZ7{D#L-^SRC`9yIG|4 ziuJbG8XU6Y{OHl>yH~cXy=f{AGLb&j_-N#+7onKt13RWQrsi?c`NCWMSg;^xFNsQh<8Letr?cp@U~9} z1s^QVFi?YR5nhIO-dlZkg32O4hDX%==!*J=!5Sg9MxK;!n6DRzsi0M{06uhDc#T>1 z7e^0aO3eLAQGl1ja4WhztUwZR^zfE|d{LyUfz~;T@SGc#qF|+7E3Lq63ic0#RxL5I zGZc=z`Y-bnTAhKUGbpGOXy|>|YQY!-R(}v<41`l)&%)O|=O(X!ywD04AffCFRem~R@qQ1wheduNqu3_+-N1oMJuMcWy^Nq;{B9UO z$x@Kbk`wBrGJ~N%Ajw@_Sh%K_TBc&e|JSa6o%me9MD6 zSxlI~i^;OTkcoS~X2X5Kj&bz)x^Y%cCcx5o;{xry&5j5GEN<|i&Mj8lZpSz}QX22F z%HA|^*eZw8z@t_*ja9ZON?dsf6d?T*U8F%y@@XIo`e8pz6O4}7F< zoRzf(!~j{`?m?X_?)6PEz|&TF(*uvzjk6LhBs-tSH3h5Gdmu1bX*6Id+B4sZ?H=#* z<#ARPCct=nl~qU6w6hx5FWbbXWVQ_3%x4vwk({?OHeeYP2g9hj^8{#oL zqT$!9_>u=zSmehQvHN%Q;o~+u3IJGmYb{B;x2{@syWPg~iu=Q*^P~#I@bK zbRUb9sADA*+P#$Dmc>*T=<%bM{C22o{I+4dYez_B_)2ZW&xc}YZyV@cJG!Qg7Mf?+ z(E+pZC5jj^HhHhy$%xRIfEW)35)h-okp#q8@OT1ZBsh_PSbWYv4bg*9- z-OJ)>4;su{ws3D}-%GG);`4nrGRR^wyH@hH|MsQoNNr|jvM6JDgE!cHG}w0%5R06F zq$SIVW$vS8HhP=e$Kq@QNlTU&CTJ{jt`IbqX=J5nABzlabID zOVNGoYRt#y``$LQX1K))oHoD-z7*|dkv0KZPn)GM&;rzM>R#h5rjteb0%#q#vosR) zm{%~;9_o6p=^PCox8jo?bl-6+{-OtUvG{@q-NzzL2DB((3ReV%7Y7~{!Or&PbKiU` zUh6?!EG9;F-+-MR^H}#Cvf>jS)Wza)54w*Ul zt~Acdm=C_YBMZ9BH%fA6WA@i&CcsI!F8av$Yo?^P?I^K}z1JIcfn_O0(aT0FNgad0 zzS*mLf*+iLY9!WBnN%xAyznR7u*ZN54WE*@yAiq_s3s0 zG0<|((C$@h2N|&VrUz9*LVa}HQ{H4MVd@dclQD;Zrs(qhdls0JMXu}zTX>xB!{olj zR$O7n!hK^-tnc`C{VX!Gh@(fs{pJ_!JJKEP8h{WHS$xkxSRTCb5G#>I_Ba}O;~`eK zv@6&`4e9SB{WpD=yICYb+v&5u67s<=VMxA{*r*vP))QUhCord1)o886Y5f2J>hqqmZ4tn^IV;b2Al#f4%A>%|L;5>O|1l#ashkx_P~DuhgnZ!UA^A>{Kjz8rVUYxd zeCIf83HiXyL-O~K{NtYdUKUAE$lp^y{+_({L-O~M{M(5>SX}IT+{fY)58A=blhFij z&hB3Hv@0yKm9QSVIUABWxH*eQJqLX(k`tlTRUn40vx}jdn4++-4w0 z?T}SYBzVtS@l*n0@nr)c^M81pmD3&w?%uWvg^Yo*SnuUsVUb4ZSYc&Jg15$s9UgS= zCM$0DpzSPn8Ayb_*UG~lhK(vKAF?AP{J0g5+tD%dv{jz9qpX>pw=#W3U@X&VT;rDw z@l`wGk{^q&83@vQXq=VT6X3(+th|vlW^u8_Vb=*OYyC{Id7R}Mo+y?OipY6-=$9MIVtVlPu8Y1oozx+`D!Z7;SEw z2~uD*6Lu-E{EvOE@V@$`MwZuj7@m`{a;KNs-s4v6@WE%V=hi^zvGKH(X*{K9FN?Gz zv0s+SEYPa)nvzc&%ddOB?($3|;%O@oSsTSi(UqdRSWHQ=jb%y`Xe^Rf3^RCov4Ang zqfN#bC>^rmkp#pj^GX7mVHQ5yj%b*d4ZBMzgWc`*g!Zz##}g2{ql6&$e2f5y9MBI7 zw9{^SUSY>c*y?XTglC)xSYsy|@Knra@MH@4D-6#GhZS;27jOX~&!Yq8xpcs4l6unE z!30T8_Ik1Ogp%qZABm)T@?3yco(F)=&cW`GgWVwqyF(6khaBtjhgx#lk5-3~ANK1a1Myx6RjabuSMRzCsZeAm$qu+~Xv)La7!YhO}zr zD{L5SHx)AxHVlL%4MQt@%xcm*DLo$tHc$zr>K;^@JL$648s z;Dy`<@+P7KNlRe+f-uCyT2Lq+ZI}nglW5 zC22kBHPp%C2?I@z9>62~^AP|Sj1%^Zooh+XA&VmPSx@Yqx2!nZSZKhz1n@!e@sPE^ zhI_3k`N1r};+wvM$~#tU^JA>AFZKZ=U@?(Iur2zW5qie0WV}cVT^16a6g|~ec;ak5wj~@r)`iE#C&*KN^aar{kJ1*cd?;%9 zK7Ml-J`&Acu`HOW^DSgTFF=z?v7s1#s0f}XTa%^MVDIN{%r#qm0b)3sAPKHHWPB)y zA;ZBo3SJJ<61 zTNdnOo--)lT~Vx+6;X&+1Pfo#Q`|Ph3+abAweuFX&C{kZ_Q!)f5$ijH@Af zw5{R#aD7xm=q^Ah0OdI^QdNPN3P43I^VDmz(6H5cljdiBw4_l@|< z9fni`i583?Y!%4i+(Z)+4sKQmQ38(&QEH%414=N+bLyyuNht^|4bkTdv*eJ0plKeZ z$UzDWrvQ|vRA3kdp!3tJMy`v{LIwgo)?}=K-fD`8fj%0d&lRe&hJ|1ON&zT8-XfV4 zXtw}V)G|-KAbBqU)zm5wRSkrSSS%Px0jQ{Dp3Uay@FkDR7AxK&UPI^%E=$yOr$#}m z0!ai|d0vagQ!wlTP*KY~^&0G~fO1GBh}8wHczJDuzi7CF#iJgyoyF&t@dD)CEWTtQ zO=VbnEkR`Qbr0IX;^|CV*53ArK|(`rhdgULS={7X?P8J4Xd1*C`GLW+$exi^vG_(p zjz#iSoK=Oab&|F3d2V}IBr`&*bDTBugGX*yBtNij7Snu$H!OvG+(SM({Fr)JWY5CK zJq3L9gnZmXKHf~ov6yBpy#I-;4Vyf~7g(l+VNzr9X;1%dvPo``!m>zigc!?Yqaf2I zrBj~xb{1bY5O&2&PNGfmZBU6vgr?&sb%R6%*o>Jn`CMXTiFw7El~L&=yQP1siGw zAT({Pr77@c*Mb*D^5AM2?lud%1aNymzYw!v`3Su5a#k^3*mE&n$V@R_P4q&c1hcez zEnRJR^?{sfN*^kD>bN)TP##t=%bqhRq#bxASjc1H4#EJfHc*~Y!ER}7ppa1TX`q6) z{T6^iLcx;eV=3X1F@Ehf7Y~h(a)yYxgS|t)*x^2ceqZ6LY6Dkf5;bp=CyaLb! zB1=udtJVkvy!HYQ3F0X57T1Wkx)!`pnnC0%4k2p`s0U5!qX%CsdXaa47_t$>nu2hF z@KY4Yf~K{GsgR3vbn4n%|D3TxJ}W(t{Q8$a*JT)-F%68who5fxa+R0)fj3AIx7-N3qoh(uU&UsjQ zHo;?&5&+)AKE1Czq<)ne$@Lb&6WgR7i0+)R{Aau{` z271pEx@VOUqPz?4)I4O^kNH;jvPd(L)PM}Xkf6O|#da^2dskbLdMgM96#8*bsEf2; zNkH{RXoaWU#W5tbyE^S`BB!o=$XIJMw|LqW7PlG5&-(oDlES3K|5G{*Mll7MqZLT zSZws53X8KnXa|e!9#mm*g$M0mag_%J;Xf4C&QMr8dyVB`J7T&%8I7}+h;Zi#LwLrI zaVLw<8OW`ASV=ew!Y?^Xbk@n@UQfM~MXD1)qj8*-rxQFD$&CwEtR!3n!KK|utn#F~ zR$FmX0@`B5u>^F;iZm*`65s^`y_{gZVMQ7Ouv$!6)F(iT4V3U1_+*rd0zSFH*cRa`U{&hNMT(1Yu5USJRz%V|DTvgdi*pkzC~U5Q~cju zNc{Fzr7wIH{S<%tBH|Ai{(D8pfUUv*x@anz>G=4i#^Z+1?$RlcVjl_QYa8ZUo&E8PhTeqU{KDQM_f_7yXz>l~FOODlpINK76a1vw5v%hPZ!1jy{FdG`c|ulKc|Y-S z_Q%f@aySsk{ODOV`p4|6WgK6gOeX+!(ciCU|NK0d zT3Zw)-vrZ^ui8hvNRQtkqyCENzr2C;`7tok&*SrpVAam&@m1cp{tMFQce@tn5v~3> zj&;$xPZEE=y)LY)3jW!^N38vtvmsVFFM6(v{^2(AlSg~e=u_T&P0R@cY_sR~yDYxF zU~fiaoo}^lL&TQfLVF0an!T*B^Ykxm^}+pB{rzj?O{($7tpC@mbgB41+eLgn;rYfH z@yEM~&nNIsSHT|uye`^_`=FE`UbuOU^GB6-=L%N;`{M`LAG5Lz)*n-nHRss>SSdOx zydAOQV|F}d$2{NgV~3CV(jD{X3Fq+*!+VSPb=t1cj`{X22A^%m#dch6$2E5Buw%ac zUV{(Y@v+c~G7n;mmvT=LzTW=p^Oym>plT<0(7l+Y|nZoqyeqZ`kq8+%ez& zkmX-IK5q4A?D(u5pR;4W{V9X<_=?qEwc}|!=D$Aw)?^)Lo*wbv&9%$7AGY@V@crvn zKW)c1YoyQb)vqvoe&)W*>Jz1Z!rHxJ$JcVl{CK}+=TF-4lpSkrzr^z8)wv_{;(UL! zGv?hqM%JFkYVA)O-kKKGUxyv}!TNlE?;3ui;qe3ai>;o=uSWNT;q%B3&Y!J4KTywh zdHj|sI*xWbF1F(eJLd6yzqT%Dvm@6PdHfTkQ!Bp7s~SDRd0b(1x7#t_Kk>MZ$)Eq4 zwR_QyFWK=_6?(55{N3D<>z+J);=g0~i>Io**W`}X+7oYs;q$n~>iPb@N4|O9j`La1 zHK1Io^}oW_ORMa-+Ky{-$6l-F$Va5hbs&#i=jHJU=ejO`o^Y=7c;q^dN3QdDe5(q7 zT)*+S%GPUJ?3nML>pLEwGrU);;B)=Rbt8}Lk4Mtuk?TetBU=aN`C-~s?U={s`mx$^ zVeYfu{51D!gKx28XBB?(bo2D`{2Vtr{Q5kk9b_i=g$+)b$XuO+3IY^b@O)Y-nsO?JSd$t|(pF7HbP=}vB;&*_!Z^Hc^Tkm|j86WoQF(f=7#`n;#n)B6Y4AKg`{ll1{(R?B9mnvp?D1)#KCo-~Sl{T_^6vdh_w|ho_6>}>`ltZp#OU(T zk)9}zylZr9q`PNq>HhAXz5RoIKwjQI*fVgT7sZjDy%WHXmLC`$Sw7M~+H>&wRZ9o@ z2M-)tx@YhJ$pw_EvT6MX4f3q+8|dHVsYm;}`v;fxh(O4~{=+@P2bS%{Z3I#GejFje z(XrnC!7-HU1twBKxg1483MJfq7nSEnO?ABb9#1QkgS_yxDeavUY9KuF;`KP4zf7$93+wAgZgcYlt6mCl_kPNU$R4lUNbr zO%0$b&9Bf+S@SXKEwo=f^)@6W%3peIefL6yKg>KN5vNcAl#T3#sHK zxxjRC7Vbd{ZhM(?PLyo2dL-SN4pR7_7AC(jvXHE8->fk zIn^nb9)M>KDunLZy}!5bAV3hA_f`neycK>Mm8Zj7{k+rgRZN&^!F9UY#H4M4=XHyl*Nq&FproHqCN)0D>pZwg%rx_z=8&R?JmtH zczeJN3z19XkuWO)T8dDFQBHQ1CaD<0E>OyLh8 zxXITMi{t3o57SL1Hhtx1qr{6QK5^DMfuGyVcyNCWF6U=P_*#Afb(1CB5Dw?v5b7~E zoFs184mad2Rdc)>w$t$@n{Bq6<4IjiLFzcdFvLnYgI%Czrq*&HD`L84M{4L(f-^>E zE>2)#b>{7w)S)cRrG+~|T5>{c4-W4b!e2QBQ&d;s?Cj2qbK#6bLD+zimM_7udFNO> zRZSZwFeW*>6lb4_qoWW|6km{J5>x0`OLh28ULt^WUBrXnFjWE+`jpO@Va#EB$XA85 zfRIT9;3!R4zXl`6AQCr@QI?@D;|Zy>vm(q$dg7YM8A(E<31}vwl6g?&6jNU0gR!UV zV~B&eQ4ptuNm>AL-0PHp(U!#yFj`PXhjnqQ<1uz+(}D9Q8zMx-P>!9pYqMdMm4lyRz zn<$&}UIwGU1wG9;KBe3=2!C$2r3L<$GhvvX@Zx52ltD{fRK~70F4now$Y#@IP%!R_#q4#{ zhdF!Y=8)>s(+8d8jg0lwFyBld#hV6a;qA3EIJcONr%8ks-Cbe9WSTl8G%uPIsHj+y zB{_;0i51Gq4RuSMR*U~MprKf5DwQcW2QG}R3?{f&XhXF!Hk1=CFiD5aYJ&c+JE^?m zZ#ys$VYEF0mD*z&ObcF9e7_qS>{w3#qrnd+g`q*^JD7;$=%41o;$VMo-+5kGOoi3) zCff8iKt`kGsmySiO-EA^L&UcBwgw?Jl)WC948e%@}5}f*#A4X+=Ah`I2da%Lk+hIO1&J zm;q=Z8qS6{i5R9CH*Ve%ib5Xqw^E!c6~l0oyfM)bH#+wuMR8?xqaqSSRK}XtcwbB= zR?!-7b&ePNlnYHofcjSx2`{~=nA%krZl>4SK_a^?BFoc_!uR zTY(^in1)Wacsv7mZqnDZsyvg*g+C3u9-*FT(lnmrs#v@pCR`=o%3wGTXQU6VDLxKi zi%10~nUR#mU0e!maIyG01XGcYXbl#5$TbkHQ6FVJp$QE5aoc=pe%#2&IfSO!P%BWB zp9kEr$$~ca53LU{AwqRNA(m%*e`*m|vR6SdZ_&Yc50NuSwd&mzM-St6BXprkl6^?! zW3M}kb%{|gVq##YNGQbj^K{!$~znBoezE_&I+o0_X zm#(K{0lymdr(v5y__`qev`NH~Xo#0dgZsfU^20mUKXcdMIUhq}OP zt=|NEnP`X~W2008ZWCgSo9txgR7UGmV}Eu0grGYtC&4=eDV%C>o0n;!S`*0$p4&V1 z=T|t0jGgl1)hJ$@D9NP3scI^ki%>;1!Z{2}O?oztA|n8l1z8#kSs{a?fJHQzuGP+{ z4M#!FRHGofBp`rEPIwp07FSj>Zhy~6x;)Ry)o|v<2ZS1!Mk=ui zto+a{sQ2~_4A|nvt(x8SOuKf8-P++1TsYZ{?OE(RL}h#cppMUi`Ngug2Bxw|o=m}T zI%wWJ2AYr{0IgUF#$hF~hIuI0nT5z=fQgb%OvFM;y0nJHLk&Oc_CXrX*W~m=qmq4n zhj$HikM!zBN1_$IT$NLh?UOt8%z}FOC|W!(nOtU3A?DXeijv92d92Pkl2Aji{;zW& z#=BN{l(=&X+uD?b9ldNT(G#)=%TV-sG4xqNe3XD?E3BF7@$Q600aw1yg@y(x)BPt| zUJv)zD`S(uikOULr@nvT*UlM6Gg?UOi7jpR8-GGmMuTMN$6fpcUydee%WRmJ#U$9X z^ovPNrzV%TgA4=NWXJ|g;6KcBhr1SgliC-a_*tMzieAyQ9WkfAKe`Uy7x?Z65 z7m#4*Mb~XJcUkzDSm7MT}Kq! zvH1qvNprE-mP*{mL}ruB$I{JY^9{dY?Xo(Nn!83MDB?aMjg@d*ml?^~B~r1ra&?y} zQ~6?6MB@IskfUQwl2IVT(Ulz21*i+c`IwuJ|J#q;e7t`+ANG^UI34R{-eo0=&Y_p1)9w01LMJaktlUcMH^6ZW0Nu2Nclah39BaX# zcTa_Ys5}!x=9A0uAHZ@Xs*BOU_1rR82j=kjM05PQ!*lb6Nkh!ETFO^LT4&=UV;{*V~KN8#hy z$^60P8xwY1=hB3I4*ZBYn&jfPY}4#;p&_vq_NO!r^LJE;yyt)mn63&#-N^+bn{3cT zW(H1{y0*d|Wm6rW(T^{|*08m|j)blN0L*A&HHgv0(d)G&Rt3?f*2rbIw@Gd!w}S5J z=~>z{GBi3`a1-i{{zlQ-Z-6~Z+;qJ!ce_q!!92_9<)ep3qiC#uf1hPpxFxrLa8G6T z(8yT-?*6`BBv^3oGwyF89QXFgBGBC`r;9;mVVI1Cc*X8@1@!|xW0f(vB^F7UoI(kS z7*7CjuzMhL7MB*+>^jgtFt)UR5UeV6K6kO@ie7a9VtF=Er_yR^*xpLP1>9*inBtoS;yEy4wSNl{*WxVSHxSSF&Zaon zNe~X*Jdk7mTDc8JPDal4CL>J4Lxd-B6l340IDdu@xJ!BxTqM7hvDd}B-O-YE za3N5{S-pYxVjU@N=+y-GV#^>|FX!+uL(X?1tBZS#uDkcTjC-LjbO2F@1VeD5*I)b% zE|)?ka^?asEmsnqOu%b=Pli%myuj)@0>2PN-zrQO|793%z7~aD%F7PZbk{?!=DVAS zFn)`#CJ#qV1ccrjgbjluuqz^O_^}HYf~SGlUu2kTY)muRu!X>dnMRYL8=nBY1c-To ztr|kwGOY-A0S$kznXKf6sBi1f@V=_H_)do*7yE?Pw0NU+1{FARc9} zlcWHZin9G>ATL+=kDAD07-PGi%ddjJ@--##e@9F61w+1yTN1FIuejA)VXy((-#Ck~ zQB01XaLBoEBf&)tXEx}|YPS{2m0^10^iea8|5_z5HU4rICw^PIa>Fq*@_V`$*`|(c z%!}Nnf?qlM4pNwU`@ZN=)TKTi;F*tzI+dQfN{FZZC3snSCQoVsx`#(cOF^arXjH6=At85}}0NW#s}eB!imdNUNX&zIrKMCOXhWW0eoK8oW41ffJ4D zZAp+)(UV7YzVb~Vj9}t^@#;jmH*q0mw?1Qv5I*Fx3t#b+zG&>If^nlN%RM6+#V0X1 z+KlgA$w?l|H$vh5SIO(<$z-Ht9&#IN|F=W^aAMv0-ms1iV$m^?hxMZJI*5cX!AgRu zmz$b{Yy$AjShI84zw9UQEm?7kh}2o2X=V-1@|{^}XI_)mH_Q?C41Lda8aVPHY9NaC z59hX9^r;KJ$g8SM(l$4{n!(9UHhkrm?A8Q!sq$S6G;hDH1!ztpDjlq8A*l)4r;Fof zpN`yOwTBzAx?a{GuM1PYjV!)Mcyu0bfq@r@nsh}f_Y=6qsJr?P{aS|XE*nYo@%I~q z5Frc{X19Jfk9iC7MO`KFN`}U)BkrQp|NH)>^TF(SOlYFTJStDlI#2dn5U>#5-95B& zZ(sMY&Z?1n>S4aUk7+LSqM_Pnk#h6OT8P}TNURNY0=V2}hDOtk&zo}2FAw7s8K+-B z(c_)y9XB35^>hv{#oBCW0YcH`v0#sm{l#o@@6Cj}wexjxE>o=z)7|!Il;u`&Sci6V ziBzoY?n|^2+Iy1cld{|s2G4RSf*jo(E(OlR*bdOSRc=s{6LQT{j=XT{TgY`AIpNn5 z>;odsUJwJCOmlMins4HZFZDu5?gLqlfk+M@m#@WrMt@n4`l0)RfBW6xutnWVt5LEY*`do|Ok0EjV(gGegsI2C~N za4|2qfUZPc-YTaqP{YCvp3WdGft1!hpu4L;!Z8jucBn?u^8+$k&xu$;u`wVjV|2tu)RkH0b;KOteHdMkzB zz;pgBjQUGcpyuv4FL)lsx8gP>|bkZ0g{gj=?E)E;rY?O-Wc2q=!oZZFv)IPoOK|oE;9z2(BIMO^&?bSwCg13v5 zjt7mNP;7cfDy>-E`|&CQecQ;Rd3in^j&$vmFI{-90C6kI_za4aEheuXF!Tw>rC;k! zA^Y^e;0!v^XBvt-S>@!s*llH9Z88_}u20GQV^$V8c&X9+<+e3(8fgV4W=I!RMk=>A z%0MBsliI*bHgEjU_B~Dn=cH|UxVD4=2v6<_XA|FbfJ+eZ7A9Wec>r4vxITTl;j}Br zX~6S@X zvu^P3LRO}4?Fp?k>_gH6u2qv=Hd!EzgsT=?#DiZA`#zD8Gd79ngGk=ifvZkc)dN3f za^V9d!iQO$^TH%VVx)xu*YV@b4G*z^(JI#F0;FgH_!|GF##g$oK)BH1C*y*W&|Lsm za;D>1b#I9POtLhYq4|E(_^0dq9FKtuGb%d-JEsCrkT56CxlmbA@nBZg6tLN@Xt=N; zX5vM8y-8i>1MwPpss~)9+>PlS$mZsJn!A+|JOpot!eY;6XLgdxLxP%HxS_L4{O^#FS z&MXMTJ;o*1xu!eJTH5M*EZtV0g0H2myA?nb;rpFcbH5t9(rstf+*ZRG+cwBs4!meh zz+M4ztCt9PY7+bBI*l}8V_cN$)GZjG=M2FpVCVd&b;gkg@&v(IiYOEFn2KI5r3ygS z<$@t5Br2L^8|qE=l-gBB0bM9!jLt=O0O%d9jq%sjgszHzS1+dV;S==wzqnJz7x>jp z00vASaKV;()f9|X*qLl;?5z0Ll;-64x3w2yu&vRK1yT5d{{T};NQ$*d;ubJz8RS&E z!~n+a~hjlt-JywRwd)Emj#%AU^Mb zX+aBb6duO+?=&s(NrD@)<6lCI8?5c_;f&sJAg@glwfZ4D)5t)8tE;Rg%P(zIehncH zqe`wSt*|c5F%d!_1h=#^I-cDYOW>x#VoU~V4a&Rg&)~|C=KvHZIdS@BF-%%BZNDMF z+os_z+IkU9dlPsUDcy;2Fpqsi6v)bM)vtRMkDH_AjtqI2gmbYJahXaKFS}s?J1cNt z4c0%Yi*v20RRn&EQK(OOi8zRewJCm29bc^;j~*+_;_~ji4HsS@OiVM;%0r;StK6S4 zTgcehxmTdqV@_+k_LQoC1eW>OOJiNjy0vPdErmva=#mbz+ti z3jh#ma3U=Tz=&yqXG9J<>c7$W=Wl0_@d{BV7-{Q;2p)Cpo@>emrfsGGeK@Zb3bI6_ zes4^by%J=)avn-{Ws6t1;`6WQaf&cwGIN^IvO|%fdPPpPd{ka=AZ*_PS}O#>L;za) z_5jt$ueqRR#Be8<%FC%i)Ch58H=eAPdvzegu6?;&{I%)EW zvl=H{OA+kdBw_=~dfMr7=IU^yQ}3#BM?OOXB&&0E+DX+Fi=0$@Th77nF-Z-lboEPV zC$*eeA7@NEr?CEUw@&b^LoaG!;vkEi9`r3bA_lKgaR7a8s41T1)P^Da?+>YmkuPU2 z=7PVfsXVCvsY=G%t>{?<19Q!GI2FOjtjvj`A--1;fwwTjn9C8>#x$->u>!D`CpyoA8Y8lopd04_vC5fXpXiFHOQi&K6~BmPQi`&jfUGV#wa+nD@v)1EAp z6u|j3MoNNy_kTP^Q1(59V9^e@#{Lv(2LL)L@_Qcfe`)X(j3LB54Hee?2+@XO9v>+#bY=3!XPGqRUi5#b6($u zQ3@vx$t%$y$@m;XN*bPr@B9$(@DJ5_kkmCThooM0M2}7K`jrh}^-H^gRwRKhCiscG z5_?GZJ{|U;b(bC&Yr)^|;w+(dz1;3DBY)Ld?EAWmHG%6?XS_wsU6UV7U6i*w(%q#g zxuIPzP3a{levT$?cl${yCrH5U5~*BGmEK2@J3Duigb-o^5@M6IkPua`*edY!U#w=7 zc)fqPMq~_P8XRPHqo>Nf0piD4dFay3V}+2jw{vU-l+NBx*gJE7b;c*y8&rnRI(ne$ zdv!v}Ap|0Ca&+B|i6W6{=m_J1cSsEr!+cke*V8}+d|jEY7SWXxqsbj>LR}on>lGx> z*_xMh4w0azZ-)~anJEW-=sZZFM%vBx!x{$0XL_c2N)z65*3lYD) zFOk)?wY310t^kPx;&>j@TQ_x`_!j11wM=I+(u%JK@}u;;$>lBKKz`-EY&&S@8mb^gPLIyam#+p-(-Co+FTb~j#NoqV!TZydr6Md=&kv$yccrA2-^ zCH`wHwvzV>LA=QY3egysMe<$&nGYm_q~W^wwVfu1qp87cSJv5L1IpZ5(s%Re0$t&X z!(fD<jkQIfyWM1_+moT!YF+2=7yrjUo7(20(jlwoZ!fy^nT6_ADJ1 z`sQYtPovl~(kltiE`x>bfoow>cq_;Mlinyd50AwQ|H^!|zrg<=oX|XixY(Tdwd~lH zcrAZH@ZajqJUWZ>FXlWnmzmFB;c1RHIswnI_XA>CzTP;-NNnzr5F_Kl6ss42o6XlC z3e6vo<>}CQt(ZbeZfU@@qmAX82*Sy=LemIcAu7>PJ3U)|32wBi#JRgH%GZ7uQI)_{ zh@ZiI+dCZZcv09=S3p~A)#$`3JuZ=~LpZTZFSInkb<}<+6N1Ql(ZzBhvp$9*HDMDG z`O;KO2Zo@OE zDbUPIFEAwXhCfI+7b=aZGDM^6va}xFaO-GYsTeuUKQm?|q{NKm=+r5Nj2YP(RlQ$E zI5Uz{Vn#SxKkbeXlFu$z5E%+mi#=D`6#pBg(-Qx0y3C(zkM}mkC-ltR_$@sHZWLt9 zyVF`mr@yU8KFwuMP4TZeM6pBZ`D&UE82&?TkLi$)WW>K<{5VN?{;^#v zEMSl(k-3ye0xHM5 z8`s*lIsVNLKz7JkzwYRphSdtQ+r=2AolRpZSLOJTqVVdQq{HifP~V$_7pXYOAuN40 z-S~rajo(w%tI(kj<$!Oc06@=N!!wHw!v#~bk}7Q$vkh={2%)X0ur4R2y#P^XZlPXe z7`S2}r!XJ`Uz10qr`U)tvxqm>jzA5xXx8cX6L672#c?Sa zb{9p^lVbAp6}CIev%;$~9+^HWCLj>cf5kkFVfEb)7j|ABZeXj5Z0Rs z=G)x`pz=JaoOV>wB9KMkC$%A-n+Ac5fYSE6QDtqD)SUPu>~6gjjAqt|$b zTb6bJC=08223_f#iBl@KDJoo}Bm>fKx?N%$0cc@LwmB;_9)DGk24<7vzg7DQ8f@B^14~e!xzr3X_R8^p*DEZXTql%LU5%g%rWP32#osq|#E)okS zsCjic{%;eMed2N-(DJ7#9?x)$9SW_N$SbFKIBs~Yg2mh=C)@$V=SHW3x#k;*)U zy;wbUm1QN^TYp(weLViUo?32+)s=R<+EzyXrc2%ce5Dy(YE>jpo!M;%w(UX-y~s9) zV4$v>_*AtKmE&JmMtW$}9|cvr!YM1?$=PsMvP}W$8)x0e#M~|SsAw91*JJrjdU+0) zcT84LmaA`;D(L2ezjYDK)t-G|-6B0$_eQr{S6K2m0ijWamLn zxU77UyVB_|p~xnxaiWizKttA5GKQ1}O}XlhUi*BC8rr_YU8MJCsDIgSFS3hdAKqhz zHd0OhRcI#C&e{vCScdvfhc~?iGd@3^TUQC2BlLPNdB6<{VhJ508V=iY$Q z13s(iI+qY0{M^e|%cfl8HrHc7H{p(bn;?;6=~|xmD&!sB@Zwm%kVE&zi$~0}5Fq4M z3DQljG6A9z`cQD?h8xcV%;UU=H@(v=kUjdm)di{=WL^+L0z*#jJ4}y8pH>0n{whH$ z>>Zlb3qfe5dIcZ+@9%JI zTR$mZ|6#=O4nEiBMDlJv0>P_<)Map13*2*pXS)%~94h0ZlVz1U;gP$5A+0iVsOz8s zk7}Y|e1Lz|BwwCp8dZn#c!uq{YDq@BjdT9{un1#;yquF&{V37U_v(9T)21Yp*D7Ub zC2;N6f;V{-&5B|raC!ZpO{0B}m>)0jbxv&QSyA0yIh46kDEUE@;;S71gSkfvi2*W| zOD)}zeCpgphf(bG--NO^_DqD9&e;j5+)i#Bd)B%2a)$7gaG484F&-n7F6gkCna-V{ ztA}Cj!^b^;VM;9~kTfLhJ_74a^!-a1p;Ju=wC#0>X8seT4L!jX*59@M_HC6d>uz0t z%ep%^ZHq?6dMffkt4L4WarYfJuiLaK8tvadJb;ggjC2o22XK$@@YqO&I2*VASY_MB z+tzQ5x)1dB4{7s0d^PSc-b&a#c3?ERd1!E~@6echGpN!(*gqEW3ySHkgv`dx9qaFk z4h)X=?-}gtZSUFJJz|X9y>b1f4tWc%5*Xc!&!e<^L~s<@=YXUA-Ti~s==M9odf!3t zVu1Bqw{G6b!3^)|#-}xVB6&$^bnESRw%@#RW&4fGu3fgGed+%0k)FLD8##FWs{Y-* zsP^n1>g^l&*#5rW?!m)ydRPC)28OR+g>!rM^zLe3y7`*+rFi1zV|xY>U{z96B(%^uXZ#{e!(r$GUe7^o{Cy_equhL9IYiJ^Pjpj|`3V^^6UTC~&yH z2Zi45vF@d#0QV0KO4Hp323^_1qMq&pqkZyLWfe~TBRADP2pA0v4en`oe?)-mouKv) zSKK=zgAapMqq5w6um?iNgAb|}A+~O$uR9U+?vcJec`v*2cW{4YZ}(vDK;MXR&^vSh zQi%@s_x73f0K*w!<))#b0VoK1LesGkEjl~8f24n`FRE0;8dt*>)%FJZ2BX2@f$qar zAMQRpFx1^!=^N~gMt2?9odrkhZmX=jvt#4t%FWxhZo;=z`$ol9Jao&Zb$44A*It7@ z{E0iZt=o3z9XJJZAMPIM-k+QjN|kL9`Wo$jpf7<7ExXKn%f?#)5vPE#dh@3u zSpVQ)-@s@z+AYpE8bOMmo|sxhh@;D$XrLY6x3Z7E@$O_ivKe)Yvc&eH!~J~&y%D|; zbm&|&?o;5_Q67zUArS4WIBD$d9<6lu z^q{}{`+G5Dj5TQy!O>yKV|~No?)yg{h(`K)N4oDPmba<{!w4IFk%XYAXJ}w(q$1XD zv=j@@)W2u%nEM74qPYb9T?6|-a?kJqjqgD3*m%b$D~3PXzYCvz*dtgya1#mX2S)m$ ze)$lFwnxhfKFNNtdsK)3<}iBuMiCki)w=g!3bB3$hse#=^|yCm@-W_RTYuZlTg+2r z+U zFoFKT3TD+&nOb`=S4m?bwQb!^p3c_oIx2y0T90O=xDFG)mG9WJ?v4$tY+_d%Z{Kp~ zHlcUZR>zi5xM|(ZpH%E~kUA3p^#~!if}O5p;TjgMWnmQy*RgOt3pcQ^nuQx9nK)T< zQjmUJypVz)$a>=3!osaAcu8y|^-) zV**Q=ctTwg(mTD#Hr{^6`mLU`bz3&yv2E+-EgQVF?^u7^#+x^9N(Q=BMsm|uSm=7+ zY^%D8jkRO*r*4l1yZ2*SrR8r~ceAJHj5`guZR72j@Y#6%ruExA?k&k^y~*BkEpcyI zaA5O+Z#gQfISfeNrM;M`!~>9KVDdr>ok5Y=?C#&A5T#*|v$LW(_+iL-xqg>*cX$5) zQiIV0NU6pSR**I!8Git?Z*<4{n`M5f+`Sb&jXfYPfC8qiek3=t5*mY`fL__tHzr&R zVf}G9+OuEEm5~V0%Ko0iJ;>M59621&_YNIECNBsA!{LFUK`El)fXgsYl!=!aP9`3{9QI4+uKt=P&(fb`IK*K5#XC13T1|PjN?jfWKL@|iJUYkgWWOx+b zZQE+FkCajzpKydqWmK3)3OkBk(0%_XB%&Ru5y-?i(mOHgt|h30^oUJLpFwqO7=KVP`;`7n?gh6*iQ3IS}pY#?FhJ?jObWOmvVeoXvF8#$>Ne+I1Kz zuDP9tN10slix5SI-5=1Yy82f23!=B+`_jf}5=u0iKbV;&O85F)p zBN$bGZ!|QtztZDe4sOv4q3%K?AH;O9e|YS0G~Cy{4|^S-mSvkRcKb)S4Bg*1vU&G4 z*xl&fvmY6Po;WawmeDN+gEI*+^{Nd+L;E~-)Z5>^2MfZ3L;K(#)=@=z-QPXBFS>6C zr4cs?k(O&QI5axe-!qDxGi*=vgSAm{BVo%og_-w_V7cLi1e^2*-%!{%KC-Wp+ zWAs43+s>0FV(5FWxn*EzXe1hz5n*22JvMX@1>plI7#C(QCjsZM@Mnn2eIco1Xd{-) zBmLcjW1|~}u)c*o9jv%LGsnM>s$F6B$_5xlo^1#h{D8e{B*3BrNN%K0C%{PCfees>UFeMz&o!+G@Z#dwpD<8UM#j+Kv zu2itxLlxmAe9`yui=)z!(v-Srm4ikR9-}`h#aHkdIQez7uGscS-Ld*FG<>=7smXQ6 zCx4^k<&NL$_-4nqHnc_^%>kWFXtM$TPnVR=YENfvS3>7_OWmo2Qpal@LTkGx?Euny zF`v%?j`zkMmGj5s4}RdY;;aL46b#=!ke`CYTjz2+)op4YY*OpGTEg6UYAFM1 zc4yGXY`i^Yz}mm(+i&Sj>-#HJ+IIkdJKFD^s{J3g_8VH;oPBk9^V(EYQrkltd^g?E zdC%w!8y$>ei|~;jx8T1je79-8i#@*fo5vUbkPpNjH+(rSKf<4>0)O7%cmt~YNxwqp zl))D&81ioGcm#SV>h}=vTP}!>3M%4{`$@k7pKoyTBlHEn*x-8=UFbV`F0}Jc+WBqC zdGwE{fUqS$(tp$N9N#H;G+p^YSMHbRdkLT`%62k!5PeA85Sx||BmqFWl>P+2K1X+z z!5a;J#Ar#}Rr_>tcT*A@mH!TF_n5U?VgAt3x)yP;Q`}+O@fP9ZE3NTK=iDwDzSi+a z8@`otXpVzl_kPCrKkUa*x9J;QzqjR^E)3@7Amduy06(0i@{;rN%i~EuUBKg4h2L{n zu<6zX8)7s;?4zgSCt2+y}8oS&qvrfcu~D?h^dX;!u;T(OeBg!6N)#FudieSWBwe!y|%hVFY2!yjrjS|#nwR)-Ui_DW0+lrC;baN|C=a$q0!-|8rK-XZLMvvnhoFJygE_3 zMdN6by9jbWp(}8HCXo8uWN?1|?}VMeynTpMwobR4HSpFLn{vN}{J>AR8@}lrVVlw8 z$Bw%EJbtn?rWt^e``Ni9_|)W|nO%4KEYmpY@>4(Oi*Bd!%Maa9b{(zHl*V*|7k-6T z<=*m+4RvnX(?l&LhJ4;Zx%2(nqA&RouC?T^*opAKmtD)a85)Rq$2; z-iF3}YvXCdlX*!d7nxbG9ymc0HnR=lzQ}z$=Nt_)uE`-c`g_gimNxt)H?L*>JHTobf!&5{Ll4Dc)!tT6@SXdVr3xr~Na z7Qy3a_N_(m`l!7SUXB(Q!W*L1mzN6qofK^-gf~W83gJyrS0Q|I)OBSM{pM(IA-up~ zA(S|RVhVn7WWgeLE{>+=AX<%m_MAN(N7J$ZtHsd;Rp8UBz(xDnpJ=u|`kU`(p;07L zJ>G~JoxH~MXmh`es0e>n75F?yr#U)Cd0Jw$$l#Q7JL>YQLmphhBJ;_8O-H59l;diY z1%4t2U*X`1J=9Ah{632RMSQNS0^bO@&_A}(?7{fFgYX-(@EwHTorPB%ye@iYjmnLA z;2wiVAIrjrjLtJQF7kf}@c+NGs|&583c_o(h_p&lQKKld)Q4K-n%1Nw`eL-$3KcKD zSj0B}rXdXtxk)hyda>5}pb`lbLBXgItb$a9A_l=el$Q1-s7O(e3KsgHSP+Ux5x<%F zX7Aa#cb`1a?w)UF=KSp0v**lyliRBPFH`=t2_LuCLq{ARC(ixEe2E>|zqhjgq1suM zb@W+1-=>{ow7(V3W}}DJy{}uTJ1OH6ILf%DUtsX_$u7VxF5Yl zJnl#TAs+Xm@<8A($~NW=-k57k>c0lKJTKMl)^7vQmvk%f~-6i-SaCu&ihjJ$rZ_KOSuBj3`bHL?(#r60h;&DAb zPdu)x-yt5?#h((7>)I2<<9hU4;H}2z*%JKw5?uUht?XPZ!7l@Em-#33=M~`V&_8iM ze3f|gGp@!1BJ#W1Z5+PB@rG52;&I=)j(GI<+(|sHH?|Uw{@Xs_ZK!{C+2(B)n^hHG zoppux?-1?8eft=3n5v5nnWrR8tDS3_)*Ew_kN#ZoRY^ZYzu^($ab5hT+Sm7BT?^!Y z^0(i`&RX_o2k|B1(a-c5@#t4Oq4t~C6(<#M?w`}N6a8B&#NTCo{QdG1@#x3--EqqA zWc{xYkN(1|#G_vdzc8l#uo(R8vXqwoiGGaRiAR6$2IA3=e?Rb6){2(o7ZXY(@yk1en~v;CzpvwKjt~&(O>t2^EO; zyhuFyIbS6nzX!cRJo+<_me_xfc=YQXBYr7-Pxyj(^v5m}kA7y2oWTcHC9GSZ1aivh zSC&s@OLte7g$ZbYKtl94!n||b8+>ze!IiW=@;nT5gOxjn zwjw3P2tW7e=%o~l4fXJznsZuOt^%^l@ja){cNS=X5LMOBG00Mq@H2QqB@WSPDRC(0vnUfsxim$#jZ$xnwvwNc z#**`A5_%7#Do{|)4Z(?#H*!*de>{g2=l}@OvWSm7>;Bunz^aEq)?|E1G5KY z)&HB!uaw~pn5Vj)alrw+(_m!JzMc(e>1i@-hDe^|4ISkKIZA*xxZf74&_*Sf#$N8zH7Cmj43Kw0!sP4p1MP??Q_Dhoe6IlLNih z{wN>wZ$V!$Z@>F7_ffz4NKvDh%d(>^ABRG6{XH)gU~OxPe1MGAG)1%Q)K`YyC<8P} zQT8~lMNGuM`_<4s>EI+q*=1adn26sj3t6PL(BLS07BUeNy^W)$|1f^lDos)LJT68| zUw_sJHb-X z^VF|~PY0np)t: + 80000000: 00000413 li s0,0 + 80000004: 0009f117 auipc sp,0x9f + 80000008: ffc10113 addi sp,sp,-4 # 8009f000 <_end> + 8000000c: 0b8010ef jal ra,800010c4 <_trm_init> + +0000000080000010
: + 80000010: fd010113 addi sp,sp,-48 + 80000014: 02113423 sd ra,40(sp) + 80000018: 02813023 sd s0,32(sp) + 8000001c: 00913c23 sd s1,24(sp) + 80000020: 01213823 sd s2,16(sp) + 80000024: 01313423 sd s3,8(sp) + 80000028: 00054783 lbu a5,0(a0) + 8000002c: 01500713 li a4,21 + 80000030: f9f7879b addiw a5,a5,-97 + 80000034: 0ff7f793 andi a5,a5,255 + 80000038: 02f76063 bltu a4,a5,80000058 + 8000003c: 00003717 auipc a4,0x3 + 80000040: 16070713 addi a4,a4,352 # 8000319c <_etext+0x2c> + 80000044: 00279793 slli a5,a5,0x2 + 80000048: 00e787b3 add a5,a5,a4 + 8000004c: 0007a783 lw a5,0(a5) + 80000050: 00e787b3 add a5,a5,a4 + 80000054: 00078067 jr a5 + 80000058: 00003517 auipc a0,0x3 + 8000005c: 11850513 addi a0,a0,280 # 80003170 <_etext> + 80000060: 1d1020ef jal ra,80002a30 + 80000064: 00003497 auipc s1,0x3 + 80000068: 26448493 addi s1,s1,612 # 800032c8 + 8000006c: 00000413 li s0,0 + 80000070: 10000913 li s2,256 + 80000074: 00003997 auipc s3,0x3 + 80000078: 11c98993 addi s3,s3,284 # 80003190 <_etext+0x20> + 8000007c: 0014041b addiw s0,s0,1 + 80000080: 03240c63 beq s0,s2,800000b8 + 80000084: 0004b603 ld a2,0(s1) + 80000088: 00060863 beqz a2,80000098 + 8000008c: 00040593 mv a1,s0 + 80000090: 00098513 mv a0,s3 + 80000094: 19d020ef jal ra,80002a30 + 80000098: 00848493 addi s1,s1,8 + 8000009c: fe1ff06f j 8000007c + 800000a0: 00000797 auipc a5,0x0 + 800000a4: 13c78793 addi a5,a5,316 # 800001dc + 800000a8: 00097717 auipc a4,0x97 + 800000ac: aef73023 sd a5,-1312(a4) # 80096b88 + 800000b0: 1e0010ef jal ra,80001290 + 800000b4: 128000ef jal ra,800001dc + 800000b8: 02813083 ld ra,40(sp) + 800000bc: 02013403 ld s0,32(sp) + 800000c0: 01813483 ld s1,24(sp) + 800000c4: 01013903 ld s2,16(sp) + 800000c8: 00813983 ld s3,8(sp) + 800000cc: 00000513 li a0,0 + 800000d0: 03010113 addi sp,sp,48 + 800000d4: 00008067 ret + 800000d8: 00001797 auipc a5,0x1 + 800000dc: ac078793 addi a5,a5,-1344 # 80000b98 + 800000e0: 00097717 auipc a4,0x97 + 800000e4: aaf73423 sd a5,-1368(a4) # 80096b88 + 800000e8: 1a8010ef jal ra,80001290 + 800000ec: 2ad000ef jal ra,80000b98 + 800000f0: fc9ff06f j 800000b8 + 800000f4: 00001797 auipc a5,0x1 + 800000f8: d2c78793 addi a5,a5,-724 # 80000e20 + 800000fc: 00097717 auipc a4,0x97 + 80000100: a8f73623 sd a5,-1396(a4) # 80096b88 + 80000104: 51d000ef jal ra,80000e20 + 80000108: fb1ff06f j 800000b8 + 8000010c: 00001797 auipc a5,0x1 + 80000110: ef078793 addi a5,a5,-272 # 80000ffc + 80000114: 00097717 auipc a4,0x97 + 80000118: a6f73a23 sd a5,-1420(a4) # 80096b88 + 8000011c: 174010ef jal ra,80001290 + 80000120: 00001517 auipc a0,0x1 + 80000124: e4850513 addi a0,a0,-440 # 80000f68 + 80000128: 634010ef jal ra,8000175c + 8000012c: 6d1000ef jal ra,80000ffc + 80000130: f89ff06f j 800000b8 + 80000134: 00001797 auipc a5,0x1 + 80000138: d3878793 addi a5,a5,-712 # 80000e6c + 8000013c: 00097717 auipc a4,0x97 + 80000140: a4f73623 sd a5,-1460(a4) # 80096b88 + 80000144: 14c010ef jal ra,80001290 + 80000148: 525000ef jal ra,80000e6c + 8000014c: f6dff06f j 800000b8 + 80000150: 00001517 auipc a0,0x1 + 80000154: f1c50513 addi a0,a0,-228 # 8000106c + 80000158: 00097797 auipc a5,0x97 + 8000015c: a2a7b823 sd a0,-1488(a5) # 80096b88 + 80000160: 784010ef jal ra,800018e4 + 80000164: 709000ef jal ra,8000106c + 80000168: f51ff06f j 800000b8 + 8000016c: 00000797 auipc a5,0x0 + 80000170: 3b478793 addi a5,a5,948 # 80000520 + 80000174: 00000517 auipc a0,0x0 + 80000178: 22c50513 addi a0,a0,556 # 800003a0 + 8000017c: 00097717 auipc a4,0x97 + 80000180: a0f73623 sd a5,-1524(a4) # 80096b88 + 80000184: 5d8010ef jal ra,8000175c + 80000188: 00000597 auipc a1,0x0 + 8000018c: 21458593 addi a1,a1,532 # 8000039c + 80000190: 00000517 auipc a0,0x0 + 80000194: 18450513 addi a0,a0,388 # 80000314 + 80000198: 72c010ef jal ra,800018c4 + 8000019c: 384000ef jal ra,80000520 + 800001a0: f19ff06f j 800000b8 + 800001a4: 00000797 auipc a5,0x0 + 800001a8: 51478793 addi a5,a5,1300 # 800006b8 + 800001ac: 00097717 auipc a4,0x97 + 800001b0: 9cf73e23 sd a5,-1572(a4) # 80096b88 + 800001b4: 0dc010ef jal ra,80001290 + 800001b8: 500000ef jal ra,800006b8 + 800001bc: efdff06f j 800000b8 + 800001c0: 00001797 auipc a5,0x1 + 800001c4: 94078793 addi a5,a5,-1728 # 80000b00 + 800001c8: 00097717 auipc a4,0x97 + 800001cc: 9cf73023 sd a5,-1600(a4) # 80096b88 + 800001d0: 0c0010ef jal ra,80001290 + 800001d4: 12d000ef jal ra,80000b00 + 800001d8: ee1ff06f j 800000b8 + +00000000800001dc : + 800001dc: fc010113 addi sp,sp,-64 + 800001e0: 00010593 mv a1,sp + 800001e4: 00e00513 li a0,14 + 800001e8: 02113c23 sd ra,56(sp) + 800001ec: 02813823 sd s0,48(sp) + 800001f0: 02913423 sd s1,40(sp) + 800001f4: 03213023 sd s2,32(sp) + 800001f8: 01313c23 sd s3,24(sp) + 800001fc: 01413823 sd s4,16(sp) + 80000200: 0e4010ef jal ra,800012e4 + 80000204: 00014783 lbu a5,0(sp) + 80000208: 0c078c63 beqz a5,800002e0 + 8000020c: 040007b7 lui a5,0x4000 + 80000210: 07d78793 addi a5,a5,125 # 400007d <_entry_offset+0x400007d> + 80000214: 00679793 slli a5,a5,0x6 + 80000218: 00004497 auipc s1,0x4 + 8000021c: 51048493 addi s1,s1,1296 # 80004728 + 80000220: 00012917 auipc s2,0x12 + 80000224: 31490913 addi s2,s2,788 # 80012534 <_data> + 80000228: 00f13023 sd a5,0(sp) + 8000022c: 00010593 mv a1,sp + 80000230: 40000793 li a5,1024 + 80000234: 00f00513 li a0,15 + 80000238: 4099093b subw s2,s2,s1 + 8000023c: 00f12423 sw a5,8(sp) + 80000240: 0c0010ef jal ra,80001300 + 80000244: 06090463 beqz s2,800002ac + 80000248: 00000413 li s0,0 + 8000024c: 00000793 li a5,0 + 80000250: 00001a37 lui s4,0x1 + 80000254: 00004997 auipc s3,0x4 + 80000258: 8a498993 addi s3,s3,-1884 # 80003af8 + 8000025c: 40f907bb subw a5,s2,a5 + 80000260: 0007869b sext.w a3,a5 + 80000264: 00048713 mv a4,s1 + 80000268: 00010593 mv a1,sp + 8000026c: 01100513 li a0,17 + 80000270: 00da7463 bgeu s4,a3,80000278 + 80000274: 000017b7 lui a5,0x1 + 80000278: 02079693 slli a3,a5,0x20 + 8000027c: 0206d693 srli a3,a3,0x20 + 80000280: 00d484b3 add s1,s1,a3 + 80000284: 0087843b addw s0,a5,s0 + 80000288: 00e13023 sd a4,0(sp) + 8000028c: 00913423 sd s1,8(sp) + 80000290: 070010ef jal ra,80001300 + 80000294: 00090613 mv a2,s2 + 80000298: 00040593 mv a1,s0 + 8000029c: 00098513 mv a0,s3 + 800002a0: 790020ef jal ra,80002a30 + 800002a4: 00040793 mv a5,s0 + 800002a8: fb246ae3 bltu s0,s2,8000025c + 800002ac: 00010593 mv a1,sp + 800002b0: 01000513 li a0,16 + 800002b4: 030010ef jal ra,800012e4 + 800002b8: 00012783 lw a5,0(sp) + 800002bc: fef048e3 bgtz a5,800002ac + 800002c0: 03813083 ld ra,56(sp) + 800002c4: 03013403 ld s0,48(sp) + 800002c8: 02813483 ld s1,40(sp) + 800002cc: 02013903 ld s2,32(sp) + 800002d0: 01813983 ld s3,24(sp) + 800002d4: 01013a03 ld s4,16(sp) + 800002d8: 04010113 addi sp,sp,64 + 800002dc: 00008067 ret + 800002e0: 00003597 auipc a1,0x3 + 800002e4: 7e058593 addi a1,a1,2016 # 80003ac0 + 800002e8: 00003517 auipc a0,0x3 + 800002ec: 7e850513 addi a0,a0,2024 # 80003ad0 + 800002f0: 740020ef jal ra,80002a30 + 800002f4: 03813083 ld ra,56(sp) + 800002f8: 03013403 ld s0,48(sp) + 800002fc: 02813483 ld s1,40(sp) + 80000300: 02013903 ld s2,32(sp) + 80000304: 01813983 ld s3,24(sp) + 80000308: 01013a03 ld s4,16(sp) + 8000030c: 04010113 addi sp,sp,64 + 80000310: 00008067 ret + +0000000080000314 : + 80000314: fd010113 addi sp,sp,-48 + 80000318: 01313423 sd s3,8(sp) + 8000031c: 00097997 auipc s3,0x97 + 80000320: 87498993 addi s3,s3,-1932 # 80096b90 + 80000324: 01213823 sd s2,16(sp) + 80000328: 0009b903 ld s2,0(s3) + 8000032c: 00913c23 sd s1,24(sp) + 80000330: 02113423 sd ra,40(sp) + 80000334: 02813023 sd s0,32(sp) + 80000338: 00050493 mv s1,a0 + 8000033c: 00091663 bnez s2,80000348 + 80000340: 00012917 auipc s2,0x12 + 80000344: 21093903 ld s2,528(s2) # 80012550 + 80000348: 00048593 mv a1,s1 + 8000034c: 00090513 mv a0,s2 + 80000350: 64d000ef jal ra,8000119c <__umoddi3> + 80000354: 02050063 beqz a0,80000374 + 80000358: 00190413 addi s0,s2,1 + 8000035c: 00040513 mv a0,s0 + 80000360: 00048593 mv a1,s1 + 80000364: 639000ef jal ra,8000119c <__umoddi3> + 80000368: 00040913 mv s2,s0 + 8000036c: 00140413 addi s0,s0,1 + 80000370: fe0516e3 bnez a0,8000035c + 80000374: 02813083 ld ra,40(sp) + 80000378: 02013403 ld s0,32(sp) + 8000037c: 012484b3 add s1,s1,s2 + 80000380: 0099b023 sd s1,0(s3) + 80000384: 00090513 mv a0,s2 + 80000388: 01813483 ld s1,24(sp) + 8000038c: 01013903 ld s2,16(sp) + 80000390: 00813983 ld s3,8(sp) + 80000394: 03010113 addi sp,sp,48 + 80000398: 00008067 ret + +000000008000039c : + 8000039c: 00008067 ret + +00000000800003a0 : + 800003a0: 00052783 lw a5,0(a0) + 800003a4: fe010113 addi sp,sp,-32 + 800003a8: 00813823 sd s0,16(sp) + 800003ac: 00113c23 sd ra,24(sp) + 800003b0: 00300713 li a4,3 + 800003b4: 00058413 mv s0,a1 + 800003b8: 0ce78663 beq a5,a4,80000484 + 800003bc: 08f76663 bltu a4,a5,80000448 + 800003c0: 00100713 li a4,1 + 800003c4: 0ae78063 beq a5,a4,80000464 + 800003c8: 00200713 li a4,2 + 800003cc: 12e79a63 bne a5,a4,80000500 + 800003d0: 00100513 li a0,1 + 800003d4: 3b4010ef jal ra,80001788 + 800003d8: 00012623 sw zero,12(sp) + 800003dc: 00c12783 lw a5,12(sp) + 800003e0: 000f4737 lui a4,0xf4 + 800003e4: 23f70713 addi a4,a4,575 # f423f <_entry_offset+0xf423f> + 800003e8: 0007879b sext.w a5,a5 + 800003ec: 00f74e63 blt a4,a5,80000408 + 800003f0: 00c12783 lw a5,12(sp) + 800003f4: 0017879b addiw a5,a5,1 + 800003f8: 00f12623 sw a5,12(sp) + 800003fc: 00c12783 lw a5,12(sp) + 80000400: 0007879b sext.w a5,a5 + 80000404: fef756e3 bge a4,a5,800003f0 + 80000408: 05043583 ld a1,80(s0) + 8000040c: 00003517 auipc a0,0x3 + 80000410: 76450513 addi a0,a0,1892 # 80003b70 + 80000414: 61c020ef jal ra,80002a30 + 80000418: 00012797 auipc a5,0x12 + 8000041c: 1307a783 lw a5,304(a5) # 80012548 + 80000420: 00078a63 beqz a5,80000434 + 80000424: 00012797 auipc a5,0x12 + 80000428: 1207a223 sw zero,292(a5) # 80012548 + 8000042c: 00096417 auipc s0,0x96 + 80000430: 76c43403 ld s0,1900(s0) # 80096b98 + 80000434: 01813083 ld ra,24(sp) + 80000438: 00040513 mv a0,s0 + 8000043c: 01013403 ld s0,16(sp) + 80000440: 02010113 addi sp,sp,32 + 80000444: 00008067 ret + 80000448: ffb7879b addiw a5,a5,-5 + 8000044c: 00100713 li a4,1 + 80000450: 0af76863 bltu a4,a5,80000500 + 80000454: 01853583 ld a1,24(a0) + 80000458: 00003517 auipc a0,0x3 + 8000045c: 6e850513 addi a0,a0,1768 # 80003b40 + 80000460: 5d0020ef jal ra,80002a30 + 80000464: 00012797 auipc a5,0x12 + 80000468: 0e47a783 lw a5,228(a5) # 80012548 + 8000046c: fc0784e3 beqz a5,80000434 + 80000470: 00012797 auipc a5,0x12 + 80000474: 0c07ac23 sw zero,216(a5) # 80012548 + 80000478: 00096417 auipc s0,0x96 + 8000047c: 72043403 ld s0,1824(s0) # 80096b98 + 80000480: fb5ff06f j 80000434 + 80000484: 00853783 ld a5,8(a0) + 80000488: 01053583 ld a1,16(a0) + 8000048c: 00003697 auipc a3,0x3 + 80000490: 69468693 addi a3,a3,1684 # 80003b20 + 80000494: 0017f713 andi a4,a5,1 + 80000498: 04070663 beqz a4,800004e4 + 8000049c: 0027f793 andi a5,a5,2 + 800004a0: 00003717 auipc a4,0x3 + 800004a4: 69070713 addi a4,a4,1680 # 80003b30 + 800004a8: 00078e63 beqz a5,800004c4 + 800004ac: 00003617 auipc a2,0x3 + 800004b0: 71c60613 addi a2,a2,1820 # 80003bc8 + 800004b4: 00003517 auipc a0,0x3 + 800004b8: 6ac50513 addi a0,a0,1708 # 80003b60 + 800004bc: 574020ef jal ra,80002a30 + 800004c0: fa5ff06f j 80000464 + 800004c4: 00003717 auipc a4,0x3 + 800004c8: 70470713 addi a4,a4,1796 # 80003bc8 + 800004cc: 00003617 auipc a2,0x3 + 800004d0: 6fc60613 addi a2,a2,1788 # 80003bc8 + 800004d4: 00003517 auipc a0,0x3 + 800004d8: 68c50513 addi a0,a0,1676 # 80003b60 + 800004dc: 554020ef jal ra,80002a30 + 800004e0: f85ff06f j 80000464 + 800004e4: 0027f793 andi a5,a5,2 + 800004e8: 00003697 auipc a3,0x3 + 800004ec: 6e068693 addi a3,a3,1760 # 80003bc8 + 800004f0: 00003717 auipc a4,0x3 + 800004f4: 64070713 addi a4,a4,1600 # 80003b30 + 800004f8: fa079ae3 bnez a5,800004ac + 800004fc: fc9ff06f j 800004c4 + 80000500: 02800613 li a2,40 + 80000504: 00003597 auipc a1,0x3 + 80000508: 67458593 addi a1,a1,1652 # 80003b78 + 8000050c: 00003517 auipc a0,0x3 + 80000510: 6a450513 addi a0,a0,1700 # 80003bb0 + 80000514: 51c020ef jal ra,80002a30 + 80000518: 00100513 li a0,1 + 8000051c: 385000ef jal ra,800010a0 + +0000000080000520 : + 80000520: fc010113 addi sp,sp,-64 + 80000524: 00300613 li a2,3 + 80000528: 00003597 auipc a1,0x3 + 8000052c: 6a858593 addi a1,a1,1704 # 80003bd0 + 80000530: 00003517 auipc a0,0x3 + 80000534: 6a850513 addi a0,a0,1704 # 80003bd8 + 80000538: 02113c23 sd ra,56(sp) + 8000053c: 02813823 sd s0,48(sp) + 80000540: 02913423 sd s1,40(sp) + 80000544: 03213023 sd s2,32(sp) + 80000548: 01313c23 sd s3,24(sp) + 8000054c: 01413823 sd s4,16(sp) + 80000550: 534020ef jal ra,80002a84 + 80000554: 00050e63 beqz a0,80000570 + 80000558: 00003597 auipc a1,0x3 + 8000055c: 68858593 addi a1,a1,1672 # 80003be0 + 80000560: 00003517 auipc a0,0x3 + 80000564: 67850513 addi a0,a0,1656 # 80003bd8 + 80000568: 38c010ef jal ra,800018f4 + 8000056c: 12051263 bnez a0,80000690 + 80000570: 00012417 auipc s0,0x12 + 80000574: 3f840413 addi s0,s0,1016 # 80012968 + 80000578: 00040513 mv a0,s0 + 8000057c: 350010ef jal ra,800018cc + 80000580: 01043603 ld a2,16(s0) + 80000584: 00843583 ld a1,8(s0) + 80000588: 00003517 auipc a0,0x3 + 8000058c: 68050513 addi a0,a0,1664 # 80003c08 + 80000590: 00096a17 auipc s4,0x96 + 80000594: 600a0a13 addi s4,s4,1536 # 80096b90 + 80000598: 498020ef jal ra,80002a30 + 8000059c: 00843783 ld a5,8(s0) + 800005a0: 01043983 ld s3,16(s0) + 800005a4: 000a3483 ld s1,0(s4) + 800005a8: 00042903 lw s2,0(s0) + 800005ac: 40f989b3 sub s3,s3,a5 + 800005b0: 0019d993 srli s3,s3,0x1 + 800005b4: 00f989b3 add s3,s3,a5 + 800005b8: 0c048663 beqz s1,80000684 + 800005bc: 00090593 mv a1,s2 + 800005c0: 00048513 mv a0,s1 + 800005c4: 3d9000ef jal ra,8000119c <__umoddi3> + 800005c8: 02050063 beqz a0,800005e8 + 800005cc: 00148413 addi s0,s1,1 + 800005d0: 00040513 mv a0,s0 + 800005d4: 00090593 mv a1,s2 + 800005d8: 3c5000ef jal ra,8000119c <__umoddi3> + 800005dc: 00040493 mv s1,s0 + 800005e0: 00140413 addi s0,s0,1 + 800005e4: fe0516e3 bnez a0,800005d0 + 800005e8: 00990933 add s2,s2,s1 + 800005ec: 00f00613 li a2,15 + 800005f0: 00012597 auipc a1,0x12 + 800005f4: f4858593 addi a1,a1,-184 # 80012538 + 800005f8: 00048513 mv a0,s1 + 800005fc: 012a3023 sd s2,0(s4) + 80000600: 63c020ef jal ra,80002c3c + 80000604: 00300693 li a3,3 + 80000608: 00048613 mv a2,s1 + 8000060c: 00098593 mv a1,s3 + 80000610: 00012517 auipc a0,0x12 + 80000614: 35850513 addi a0,a0,856 # 80012968 + 80000618: 2b8010ef jal ra,800018d0 + 8000061c: 00048613 mv a2,s1 + 80000620: 00098593 mv a1,s3 + 80000624: 00003517 auipc a0,0x3 + 80000628: 60c50513 addi a0,a0,1548 # 80003c30 + 8000062c: 404020ef jal ra,80002a30 + 80000630: 00098693 mv a3,s3 + 80000634: 00012597 auipc a1,0x12 + 80000638: 35458593 addi a1,a1,852 # 80012988 + 8000063c: 00013617 auipc a2,0x13 + 80000640: 34c60613 addi a2,a2,844 # 80013988 + 80000644: 00012517 auipc a0,0x12 + 80000648: 32450513 addi a0,a0,804 # 80012968 + 8000064c: 288010ef jal ra,800018d4 + 80000650: 00050793 mv a5,a0 + 80000654: 00100513 li a0,1 + 80000658: 00096717 auipc a4,0x96 + 8000065c: 54f73023 sd a5,1344(a4) # 80096b98 + 80000660: 128010ef jal ra,80001788 + 80000664: 03013403 ld s0,48(sp) + 80000668: 03813083 ld ra,56(sp) + 8000066c: 02813483 ld s1,40(sp) + 80000670: 02013903 ld s2,32(sp) + 80000674: 01813983 ld s3,24(sp) + 80000678: 01013a03 ld s4,16(sp) + 8000067c: 04010113 addi sp,sp,64 + 80000680: 0fc0106f j 8000177c + 80000684: 00012497 auipc s1,0x12 + 80000688: ecc4b483 ld s1,-308(s1) # 80012550 + 8000068c: f31ff06f j 800005bc + 80000690: 03013403 ld s0,48(sp) + 80000694: 03813083 ld ra,56(sp) + 80000698: 02813483 ld s1,40(sp) + 8000069c: 02013903 ld s2,32(sp) + 800006a0: 01813983 ld s3,24(sp) + 800006a4: 01013a03 ld s4,16(sp) + 800006a8: 00003517 auipc a0,0x3 + 800006ac: 54050513 addi a0,a0,1344 # 80003be8 + 800006b0: 04010113 addi sp,sp,64 + 800006b4: 37c0206f j 80002a30 + +00000000800006b8 : + 800006b8: fa010113 addi sp,sp,-96 + 800006bc: 04913423 sd s1,72(sp) + 800006c0: 000f44b7 lui s1,0xf4 + 800006c4: 04813823 sd s0,80(sp) + 800006c8: 03313c23 sd s3,56(sp) + 800006cc: 03413823 sd s4,48(sp) + 800006d0: 03513423 sd s5,40(sp) + 800006d4: 03613023 sd s6,32(sp) + 800006d8: 04113c23 sd ra,88(sp) + 800006dc: 05213023 sd s2,64(sp) + 800006e0: 00100413 li s0,1 + 800006e4: 24048493 addi s1,s1,576 # f4240 <_entry_offset+0xf4240> + 800006e8: 00003a17 auipc s4,0x3 + 800006ec: 578a0a13 addi s4,s4,1400 # 80003c60 + 800006f0: 00100993 li s3,1 + 800006f4: 00003b17 auipc s6,0x3 + 800006f8: 59cb0b13 addi s6,s6,1436 # 80003c90 + 800006fc: 00003a97 auipc s5,0x3 + 80000700: 584a8a93 addi s5,s5,1412 # 80003c80 + 80000704: 0004091b sext.w s2,s0 + 80000708: 00600513 li a0,6 + 8000070c: 00810593 addi a1,sp,8 + 80000710: 3d5000ef jal ra,800012e4 + 80000714: 00813503 ld a0,8(sp) + 80000718: 00048593 mv a1,s1 + 8000071c: 239000ef jal ra,80001154 <__udivdi3> + 80000720: fe8564e3 bltu a0,s0,80000708 + 80000724: 00810593 addi a1,sp,8 + 80000728: 00500513 li a0,5 + 8000072c: 3b9000ef jal ra,800012e4 + 80000730: 01c12803 lw a6,28(sp) + 80000734: 01812783 lw a5,24(sp) + 80000738: 01412703 lw a4,20(sp) + 8000073c: 01012683 lw a3,16(sp) + 80000740: 00c12603 lw a2,12(sp) + 80000744: 00812583 lw a1,8(sp) + 80000748: 000a0513 mv a0,s4 + 8000074c: 2e4020ef jal ra,80002a30 + 80000750: 01341c63 bne s0,s3,80000768 + 80000754: 00100593 li a1,1 + 80000758: 000a8513 mv a0,s5 + 8000075c: 2d4020ef jal ra,80002a30 + 80000760: 00140413 addi s0,s0,1 + 80000764: fa1ff06f j 80000704 + 80000768: 00090593 mv a1,s2 + 8000076c: 000b0513 mv a0,s6 + 80000770: 2c0020ef jal ra,80002a30 + 80000774: 00140413 addi s0,s0,1 + 80000778: f8dff06f j 80000704 + +000000008000077c : + 8000077c: f7010113 addi sp,sp,-144 + 80000780: 00010593 mv a1,sp + 80000784: 00900513 li a0,9 + 80000788: 08113423 sd ra,136(sp) + 8000078c: 07213823 sd s2,112(sp) + 80000790: 07413023 sd s4,96(sp) + 80000794: 08813023 sd s0,128(sp) + 80000798: 06913c23 sd s1,120(sp) + 8000079c: 07313423 sd s3,104(sp) + 800007a0: 05513c23 sd s5,88(sp) + 800007a4: 05613823 sd s6,80(sp) + 800007a8: 05713423 sd s7,72(sp) + 800007ac: 05813023 sd s8,64(sp) + 800007b0: 03913c23 sd s9,56(sp) + 800007b4: 03a13823 sd s10,48(sp) + 800007b8: 03b13423 sd s11,40(sp) + 800007bc: 329000ef jal ra,800012e4 + 800007c0: 00412783 lw a5,4(sp) + 800007c4: 00010593 mv a1,sp + 800007c8: 00900513 li a0,9 + 800007cc: 41f7da1b sraiw s4,a5,0x1f + 800007d0: 01ba5a1b srliw s4,s4,0x1b + 800007d4: 00fa0a3b addw s4,s4,a5 + 800007d8: 30d000ef jal ra,800012e4 + 800007dc: 00812783 lw a5,8(sp) + 800007e0: 405a5a1b sraiw s4,s4,0x5 + 800007e4: 000a0513 mv a0,s4 + 800007e8: 41f7d91b sraiw s2,a5,0x1f + 800007ec: 01b9591b srliw s2,s2,0x1b + 800007f0: 00f9093b addw s2,s2,a5 + 800007f4: 4059591b sraiw s2,s2,0x5 + 800007f8: 00090593 mv a1,s2 + 800007fc: 0ed000ef jal ra,800010e8 <__muldi3> + 80000800: 0005079b sext.w a5,a0 + 80000804: 40000713 li a4,1024 + 80000808: 0ef76e63 bltu a4,a5,80000904 + 8000080c: fff7841b addiw s0,a5,-1 + 80000810: 02041413 slli s0,s0,0x20 + 80000814: 00078a93 mv s5,a5 + 80000818: 01e45413 srli s0,s0,0x1e + 8000081c: 00014797 auipc a5,0x14 + 80000820: 17078793 addi a5,a5,368 # 8001498c + 80000824: 00013997 auipc s3,0x13 + 80000828: 1e498993 addi s3,s3,484 # 80013a08 + 8000082c: 00014c17 auipc s8,0x14 + 80000830: 1dcc0c13 addi s8,s8,476 # 80014a08 + 80000834: 00014497 auipc s1,0x14 + 80000838: 15448493 addi s1,s1,340 # 80014988 + 8000083c: 00f40433 add s0,s0,a5 + 80000840: 00000c93 li s9,0 + 80000844: 000a0b9b sext.w s7,s4 + 80000848: 000c8b1b sext.w s6,s9 + 8000084c: f8098d13 addi s10,s3,-128 + 80000850: 00000d93 li s11,0 + 80000854: 000a8c63 beqz s5,8000086c + 80000858: 000d2703 lw a4,0(s10) + 8000085c: 00048793 mv a5,s1 + 80000860: 00e7a023 sw a4,0(a5) + 80000864: 00478793 addi a5,a5,4 + 80000868: fe879ce3 bne a5,s0,80000860 + 8000086c: 004d0d13 addi s10,s10,4 + 80000870: 00010593 mv a1,sp + 80000874: 00b00513 li a0,11 + 80000878: 01b12023 sw s11,0(sp) + 8000087c: 01612223 sw s6,4(sp) + 80000880: 00913423 sd s1,8(sp) + 80000884: 01412823 sw s4,16(sp) + 80000888: 01212a23 sw s2,20(sp) + 8000088c: 00010c23 sb zero,24(sp) + 80000890: 017d8dbb addw s11,s11,s7 + 80000894: 26d000ef jal ra,80001300 + 80000898: fb3d1ee3 bne s10,s3,80000854 + 8000089c: 080d0993 addi s3,s10,128 + 800008a0: 01990cbb addw s9,s2,s9 + 800008a4: fb8992e3 bne s3,s8,80000848 + 800008a8: 00010593 mv a1,sp + 800008ac: 00100793 li a5,1 + 800008b0: 00b00513 li a0,11 + 800008b4: 00013023 sd zero,0(sp) + 800008b8: 00013423 sd zero,8(sp) + 800008bc: 00013823 sd zero,16(sp) + 800008c0: 00f10c23 sb a5,24(sp) + 800008c4: 23d000ef jal ra,80001300 + 800008c8: 08813083 ld ra,136(sp) + 800008cc: 08013403 ld s0,128(sp) + 800008d0: 07813483 ld s1,120(sp) + 800008d4: 07013903 ld s2,112(sp) + 800008d8: 06813983 ld s3,104(sp) + 800008dc: 06013a03 ld s4,96(sp) + 800008e0: 05813a83 ld s5,88(sp) + 800008e4: 05013b03 ld s6,80(sp) + 800008e8: 04813b83 ld s7,72(sp) + 800008ec: 04013c03 ld s8,64(sp) + 800008f0: 03813c83 ld s9,56(sp) + 800008f4: 03013d03 ld s10,48(sp) + 800008f8: 02813d83 ld s11,40(sp) + 800008fc: 09010113 addi sp,sp,144 + 80000900: 00008067 ret + 80000904: 01600613 li a2,22 + 80000908: 00003597 auipc a1,0x3 + 8000090c: 39858593 addi a1,a1,920 # 80003ca0 + 80000910: 00003517 auipc a0,0x3 + 80000914: 2a050513 addi a0,a0,672 # 80003bb0 + 80000918: 118020ef jal ra,80002a30 + 8000091c: 00100513 li a0,1 + 80000920: 780000ef jal ra,800010a0 + +0000000080000924 : + 80000924: 00096617 auipc a2,0x96 + 80000928: 27c60613 addi a2,a2,636 # 80096ba0 + 8000092c: 00062783 lw a5,0(a2) + 80000930: fe010113 addi sp,sp,-32 + 80000934: 00813c23 sd s0,24(sp) + 80000938: 00913823 sd s1,16(sp) + 8000093c: 01213423 sd s2,8(sp) + 80000940: 01313023 sd s3,0(sp) + 80000944: 0017839b addiw t2,a5,1 + 80000948: 00015717 auipc a4,0x15 + 8000094c: 0c070713 addi a4,a4,192 # 80015a08 + 80000950: 00016697 auipc a3,0x16 + 80000954: 0b868693 addi a3,a3,184 # 80016a08 + 80000958: 00762023 sw t2,0(a2) + 8000095c: f8070793 addi a5,a4,-128 + 80000960: 0007a023 sw zero,0(a5) + 80000964: 00478793 addi a5,a5,4 + 80000968: fee79ce3 bne a5,a4,80000960 + 8000096c: 08078713 addi a4,a5,128 + 80000970: fee696e3 bne a3,a4,8000095c + 80000974: 0ff3f693 andi a3,t2,255 + 80000978: 0016979b slliw a5,a3,0x1 + 8000097c: 00d787bb addw a5,a5,a3 + 80000980: 0036971b slliw a4,a3,0x3 + 80000984: 40d7073b subw a4,a4,a3 + 80000988: 0017979b slliw a5,a5,0x1 + 8000098c: 0ff7f793 andi a5,a5,255 + 80000990: 0ff77713 andi a4,a4,255 + 80000994: 0087171b slliw a4,a4,0x8 + 80000998: 0107979b slliw a5,a5,0x10 + 8000099c: 00e7e7b3 or a5,a5,a4 + 800009a0: 0ff3f713 andi a4,t2,255 + 800009a4: 00e7e7b3 or a5,a5,a4 + 800009a8: 00013417 auipc s0,0x13 + 800009ac: fe040413 addi s0,s0,-32 # 80013988 + 800009b0: 00015f97 auipc t6,0x15 + 800009b4: fd8f8f93 addi t6,t6,-40 # 80015988 + 800009b8: 00f42023 sw a5,0(s0) + 800009bc: 00100793 li a5,1 + 800009c0: 00ffa023 sw a5,0(t6) + 800009c4: 00100693 li a3,1 + 800009c8: 00000713 li a4,0 + 800009cc: 00100f13 li t5,1 + 800009d0: 00000593 li a1,0 + 800009d4: 00000e93 li t4,0 + 800009d8: 00000e13 li t3,0 + 800009dc: 01f00813 li a6,31 + 800009e0: 00003317 auipc t1,0x3 + 800009e4: 31030313 addi t1,t1,784 # 80003cf0 + 800009e8: 00003897 auipc a7,0x3 + 800009ec: 31888893 addi a7,a7,792 # 80003d00 + 800009f0: 00100493 li s1,1 + 800009f4: 40000293 li t0,1024 + 800009f8: 00400613 li a2,4 + 800009fc: 00ee07bb addw a5,t3,a4 + 80000a00: fff6061b addiw a2,a2,-1 + 80000a04: 00158713 addi a4,a1,1 + 80000a08: 00de86bb addw a3,t4,a3 + 80000a0c: 02f86063 bltu a6,a5,80000a2c + 80000a10: 00579513 slli a0,a5,0x5 + 80000a14: 00d50533 add a0,a0,a3 + 80000a18: 00251513 slli a0,a0,0x2 + 80000a1c: 00af8933 add s2,t6,a0 + 80000a20: 00d86663 bltu a6,a3,80000a2c + 80000a24: 00092983 lw s3,0(s2) + 80000a28: 06098463 beqz s3,80000a90 + 80000a2c: 00377593 andi a1,a4,3 + 80000a30: 00259793 slli a5,a1,0x2 + 80000a34: 00f30733 add a4,t1,a5 + 80000a38: 00f887b3 add a5,a7,a5 + 80000a3c: 02060a63 beqz a2,80000a70 + 80000a40: 00072703 lw a4,0(a4) + 80000a44: 0007a683 lw a3,0(a5) + 80000a48: fff6061b addiw a2,a2,-1 + 80000a4c: 00ee07bb addw a5,t3,a4 + 80000a50: 00de86bb addw a3,t4,a3 + 80000a54: 00158713 addi a4,a1,1 + 80000a58: faf87ce3 bgeu a6,a5,80000a10 + 80000a5c: 00377593 andi a1,a4,3 + 80000a60: 00259793 slli a5,a1,0x2 + 80000a64: 00f30733 add a4,t1,a5 + 80000a68: 00f887b3 add a5,a7,a5 + 80000a6c: fc061ae3 bnez a2,80000a40 + 80000a70: 001f0f1b addiw t5,t5,1 + 80000a74: 065f0a63 beq t5,t0,80000ae8 + 80000a78: 00259793 slli a5,a1,0x2 + 80000a7c: 00f30733 add a4,t1,a5 + 80000a80: 00f887b3 add a5,a7,a5 + 80000a84: 00072703 lw a4,0(a4) + 80000a88: 0007a683 lw a3,0(a5) + 80000a8c: f6dff06f j 800009f8 + 80000a90: 401f5e1b sraiw t3,t5,0x1 + 80000a94: 007e0e3b addw t3,t3,t2 + 80000a98: 0ffe7e93 andi t4,t3,255 + 80000a9c: 001e971b slliw a4,t4,0x1 + 80000aa0: 01d7073b addw a4,a4,t4 + 80000aa4: 003e961b slliw a2,t4,0x3 + 80000aa8: 41d6063b subw a2,a2,t4 + 80000aac: 0017171b slliw a4,a4,0x1 + 80000ab0: 0ff77713 andi a4,a4,255 + 80000ab4: 0ff67613 andi a2,a2,255 + 80000ab8: 0107171b slliw a4,a4,0x10 + 80000abc: 0086161b slliw a2,a2,0x8 + 80000ac0: 0ffe7e13 andi t3,t3,255 + 80000ac4: 00c76733 or a4,a4,a2 + 80000ac8: 01c76733 or a4,a4,t3 + 80000acc: 00a40533 add a0,s0,a0 + 80000ad0: 00992023 sw s1,0(s2) + 80000ad4: 00e52023 sw a4,0(a0) + 80000ad8: 001f0f1b addiw t5,t5,1 + 80000adc: 00068e93 mv t4,a3 + 80000ae0: 00078e13 mv t3,a5 + 80000ae4: f85f1ae3 bne t5,t0,80000a78 + 80000ae8: 01813403 ld s0,24(sp) + 80000aec: 01013483 ld s1,16(sp) + 80000af0: 00813903 ld s2,8(sp) + 80000af4: 00013983 ld s3,0(sp) + 80000af8: 02010113 addi sp,sp,32 + 80000afc: 00008067 ret + +0000000080000b00 : + 80000b00: fb010113 addi sp,sp,-80 + 80000b04: 02913c23 sd s1,56(sp) + 80000b08: 03213823 sd s2,48(sp) + 80000b0c: 03313423 sd s3,40(sp) + 80000b10: 03413023 sd s4,32(sp) + 80000b14: 01513c23 sd s5,24(sp) + 80000b18: 04113423 sd ra,72(sp) + 80000b1c: 04813023 sd s0,64(sp) + 80000b20: 00000993 li s3,0 + 80000b24: 00000913 li s2,0 + 80000b28: 00000493 li s1,0 + 80000b2c: 02100a13 li s4,33 + 80000b30: 00003a97 auipc s5,0x3 + 80000b34: 1b0a8a93 addi s5,s5,432 # 80003ce0 + 80000b38: 00810593 addi a1,sp,8 + 80000b3c: 00600513 li a0,6 + 80000b40: 7a4000ef jal ra,800012e4 + 80000b44: 00813503 ld a0,8(sp) + 80000b48: 3e800593 li a1,1000 + 80000b4c: 608000ef jal ra,80001154 <__udivdi3> + 80000b50: 409507b3 sub a5,a0,s1 + 80000b54: 00050413 mv s0,a0 + 80000b58: 02fa6663 bltu s4,a5,80000b84 + 80000b5c: 412407b3 sub a5,s0,s2 + 80000b60: 3e800713 li a4,1000 + 80000b64: fcf77ae3 bgeu a4,a5,80000b38 + 80000b68: 00098613 mv a2,s3 + 80000b6c: 00040593 mv a1,s0 + 80000b70: 000a8513 mv a0,s5 + 80000b74: 6bd010ef jal ra,80002a30 + 80000b78: 00040913 mv s2,s0 + 80000b7c: 00000993 li s3,0 + 80000b80: fb9ff06f j 80000b38 + 80000b84: da1ff0ef jal ra,80000924 + 80000b88: 0019899b addiw s3,s3,1 + 80000b8c: bf1ff0ef jal ra,8000077c + 80000b90: 00040493 mv s1,s0 + 80000b94: fc9ff06f j 80000b5c + +0000000080000b98 : + 80000b98: 00012797 auipc a5,0x12 + 80000b9c: 9b878793 addi a5,a5,-1608 # 80012550 + 80000ba0: 0007b583 ld a1,0(a5) + 80000ba4: 0087b603 ld a2,8(a5) + 80000ba8: fb010113 addi sp,sp,-80 + 80000bac: 00003517 auipc a0,0x3 + 80000bb0: 16450513 addi a0,a0,356 # 80003d10 + 80000bb4: 04113423 sd ra,72(sp) + 80000bb8: 02913c23 sd s1,56(sp) + 80000bbc: 04813023 sd s0,64(sp) + 80000bc0: 03213823 sd s2,48(sp) + 80000bc4: 03313423 sd s3,40(sp) + 80000bc8: 03413023 sd s4,32(sp) + 80000bcc: 665010ef jal ra,80002a30 + 80000bd0: 00003517 auipc a0,0x3 + 80000bd4: 15850513 addi a0,a0,344 # 80003d28 + 80000bd8: 659010ef jal ra,80002a30 + 80000bdc: 00810593 addi a1,sp,8 + 80000be0: 00600513 li a0,6 + 80000be4: 700000ef jal ra,800012e4 + 80000be8: 00813503 ld a0,8(sp) + 80000bec: 3e800593 li a1,1000 + 80000bf0: 564000ef jal ra,80001154 <__udivdi3> + 80000bf4: 00012223 sw zero,4(sp) + 80000bf8: 00412703 lw a4,4(sp) + 80000bfc: 009897b7 lui a5,0x989 + 80000c00: 67f78793 addi a5,a5,1663 # 98967f <_entry_offset+0x98967f> + 80000c04: 0007071b sext.w a4,a4 + 80000c08: 0005049b sext.w s1,a0 + 80000c0c: 00e7ce63 blt a5,a4,80000c28 + 80000c10: 00412703 lw a4,4(sp) + 80000c14: 0017071b addiw a4,a4,1 + 80000c18: 00e12223 sw a4,4(sp) + 80000c1c: 00412703 lw a4,4(sp) + 80000c20: 0007071b sext.w a4,a4 + 80000c24: fee7d6e3 bge a5,a4,80000c10 + 80000c28: 00810593 addi a1,sp,8 + 80000c2c: 00600513 li a0,6 + 80000c30: 6b4000ef jal ra,800012e4 + 80000c34: 00813503 ld a0,8(sp) + 80000c38: 3e800593 li a1,1000 + 80000c3c: 00016417 auipc s0,0x16 + 80000c40: 01c40413 addi s0,s0,28 # 80016c58 + 80000c44: 510000ef jal ra,80001154 <__udivdi3> + 80000c48: 409505bb subw a1,a0,s1 + 80000c4c: 00003517 auipc a0,0x3 + 80000c50: 0fc50513 addi a0,a0,252 # 80003d48 + 80000c54: 5dd010ef jal ra,80002a30 + 80000c58: 00810593 addi a1,sp,8 + 80000c5c: 00900513 li a0,9 + 80000c60: 684000ef jal ra,800012e4 + 80000c64: 00c12983 lw s3,12(sp) + 80000c68: 01012903 lw s2,16(sp) + 80000c6c: 00003517 auipc a0,0x3 + 80000c70: 0fc50513 addi a0,a0,252 # 80003d68 + 80000c74: 00098593 mv a1,s3 + 80000c78: 00090613 mv a2,s2 + 80000c7c: 5b5010ef jal ra,80002a30 + 80000c80: 00096497 auipc s1,0x96 + 80000c84: f0848493 addi s1,s1,-248 # 80096b88 + 80000c88: 495000ef jal ra,8000191c + 80000c8c: 00a40023 sb a0,0(s0) + 80000c90: 00140413 addi s0,s0,1 + 80000c94: fe941ae3 bne s0,s1,80000c88 + 80000c98: 41f9d71b sraiw a4,s3,0x1f + 80000c9c: 01e7571b srliw a4,a4,0x1e + 80000ca0: 0137073b addw a4,a4,s3 + 80000ca4: 00016797 auipc a5,0x16 + 80000ca8: ee478793 addi a5,a5,-284 # 80016b88 + 80000cac: 4027571b sraiw a4,a4,0x2 + 80000cb0: 00e79323 sh a4,6(a5) + 80000cb4: 00016717 auipc a4,0x16 + 80000cb8: ec071e23 sh zero,-292(a4) # 80016b90 + 80000cbc: 01f9d69b srliw a3,s3,0x1f + 80000cc0: 02500713 li a4,37 + 80000cc4: ffff0637 lui a2,0xffff0 + 80000cc8: 00e79923 sh a4,18(a5) + 80000ccc: 013686bb addw a3,a3,s3 + 80000cd0: 0016061b addiw a2,a2,1 + 80000cd4: 00a00713 li a4,10 + 80000cd8: fff00813 li a6,-1 + 80000cdc: 4016d69b sraiw a3,a3,0x1 + 80000ce0: 00c7a023 sw a2,0(a5) + 80000ce4: 00e79a23 sh a4,20(a5) + 80000ce8: fff00613 li a2,-1 + 80000cec: 0d000713 li a4,208 + 80000cf0: f9c9091b addiw s2,s2,-100 + 80000cf4: 00e79b23 sh a4,22(a5) + 80000cf8: 00d79523 sh a3,10(a5) + 80000cfc: 01079723 sh a6,14(a5) + 80000d00: 01079823 sh a6,16(a5) + 80000d04: 00c79223 sh a2,4(a5) + 80000d08: 01279623 sh s2,12(a5) + 80000d0c: 00810593 addi a1,sp,8 + 80000d10: 00c00513 li a0,12 + 80000d14: 00f13823 sd a5,16(sp) + 80000d18: 000807b7 lui a5,0x80 + 80000d1c: 00f12c23 sw a5,24(sp) + 80000d20: 00016717 auipc a4,0x16 + 80000d24: e8071023 sh zero,-384(a4) # 80016ba0 + 80000d28: 00012423 sw zero,8(sp) + 80000d2c: 5d4000ef jal ra,80001300 + 80000d30: 00d00513 li a0,13 + 80000d34: 00810593 addi a1,sp,8 + 80000d38: 00012423 sw zero,8(sp) + 80000d3c: 5c4000ef jal ra,80001300 + 80000d40: 00810593 addi a1,sp,8 + 80000d44: 01200513 li a0,18 + 80000d48: 59c000ef jal ra,800012e4 + 80000d4c: 00c12483 lw s1,12(sp) + 80000d50: 01012583 lw a1,16(sp) + 80000d54: 00003517 auipc a0,0x3 + 80000d58: 02c50513 addi a0,a0,44 # 80003d80 + 80000d5c: 00048613 mv a2,s1 + 80000d60: 4d1010ef jal ra,80002a30 + 80000d64: 00016417 auipc s0,0x16 + 80000d68: c2440413 addi s0,s0,-988 # 80016988 + 80000d6c: 00048593 mv a1,s1 + 80000d70: 20000513 li a0,512 + 80000d74: 00813823 sd s0,16(sp) + 80000d78: 00010423 sb zero,8(sp) + 80000d7c: 00012c23 sw zero,24(sp) + 80000d80: 3cc000ef jal ra,8000114c <__divdi3> + 80000d84: 00050793 mv a5,a0 + 80000d88: 00810593 addi a1,sp,8 + 80000d8c: 01400513 li a0,20 + 80000d90: 00f12e23 sw a5,28(sp) + 80000d94: 56c000ef jal ra,80001300 + 80000d98: 00144603 lbu a2,1(s0) + 80000d9c: 00044583 lbu a1,0(s0) + 80000da0: 00003517 auipc a0,0x3 + 80000da4: 01850513 addi a0,a0,24 # 80003db8 + 80000da8: 00016417 auipc s0,0x16 + 80000dac: be240413 addi s0,s0,-1054 # 8001698a + 80000db0: 481010ef jal ra,80002a30 + 80000db4: 00003917 auipc s2,0x3 + 80000db8: 00490913 addi s2,s2,4 # 80003db8 + 80000dbc: 00400493 li s1,4 + 80000dc0: 00016997 auipc s3,0x16 + 80000dc4: dc898993 addi s3,s3,-568 # 80016b88 + 80000dc8: 408484bb subw s1,s1,s0 + 80000dcc: 00003a17 auipc s4,0x3 + 80000dd0: d4ca0a13 addi s4,s4,-692 # 80003b18 + 80000dd4: 00090513 mv a0,s2 + 80000dd8: 03340463 beq s0,s3,80000e00 + 80000ddc: 00144603 lbu a2,1(s0) + 80000de0: 00044583 lbu a1,0(s0) + 80000de4: 44d010ef jal ra,80002a30 + 80000de8: 008487bb addw a5,s1,s0 + 80000dec: 01f7f793 andi a5,a5,31 + 80000df0: 02078063 beqz a5,80000e10 + 80000df4: 00240413 addi s0,s0,2 + 80000df8: 00090513 mv a0,s2 + 80000dfc: ff3410e3 bne s0,s3,80000ddc + 80000e00: 00003517 auipc a0,0x3 + 80000e04: fc850513 addi a0,a0,-56 # 80003dc8 + 80000e08: 429010ef jal ra,80002a30 + 80000e0c: 0000006f j 80000e0c + 80000e10: 000a0513 mv a0,s4 + 80000e14: 41d010ef jal ra,80002a30 + 80000e18: 00240413 addi s0,s0,2 + 80000e1c: fddff06f j 80000df8 + +0000000080000e20 : + 80000e20: fe010113 addi sp,sp,-32 + 80000e24: 00913423 sd s1,8(sp) + 80000e28: 00113c23 sd ra,24(sp) + 80000e2c: 00813823 sd s0,16(sp) + 80000e30: 00a00493 li s1,10 + 80000e34: 00003417 auipc s0,0x3 + 80000e38: fa440413 addi s0,s0,-92 # 80003dd8 + 80000e3c: 04800513 li a0,72 + 80000e40: 00140413 addi s0,s0,1 + 80000e44: 250000ef jal ra,80001094 + 80000e48: 00044503 lbu a0,0(s0) + 80000e4c: fe051ae3 bnez a0,80000e40 + 80000e50: fff4849b addiw s1,s1,-1 + 80000e54: fe0490e3 bnez s1,80000e34 + 80000e58: 01813083 ld ra,24(sp) + 80000e5c: 01013403 ld s0,16(sp) + 80000e60: 00813483 ld s1,8(sp) + 80000e64: 02010113 addi sp,sp,32 + 80000e68: 00008067 ret + +0000000080000e6c : + 80000e6c: fb010113 addi sp,sp,-80 + 80000e70: 00003517 auipc a0,0x3 + 80000e74: f9850513 addi a0,a0,-104 # 80003e08 + 80000e78: 04113423 sd ra,72(sp) + 80000e7c: 04813023 sd s0,64(sp) + 80000e80: 02913c23 sd s1,56(sp) + 80000e84: 03213823 sd s2,48(sp) + 80000e88: 03313423 sd s3,40(sp) + 80000e8c: 03413023 sd s4,32(sp) + 80000e90: 01513c23 sd s5,24(sp) + 80000e94: 39d010ef jal ra,80002a30 + 80000e98: 00810593 addi a1,sp,8 + 80000e9c: 00100513 li a0,1 + 80000ea0: 444000ef jal ra,800012e4 + 80000ea4: 00814783 lbu a5,8(sp) + 80000ea8: 00096497 auipc s1,0x96 + 80000eac: cfd48493 addi s1,s1,-771 # 80096ba5 + 80000eb0: 00810593 addi a1,sp,8 + 80000eb4: 00700513 li a0,7 + 80000eb8: 00f48023 sb a5,0(s1) + 80000ebc: 428000ef jal ra,800012e4 + 80000ec0: 00814783 lbu a5,8(sp) + 80000ec4: 00096417 auipc s0,0x96 + 80000ec8: ce040413 addi s0,s0,-800 # 80096ba4 + 80000ecc: 00003a97 auipc s5,0x3 + 80000ed0: 24ca8a93 addi s5,s5,588 # 80004118 + 80000ed4: 00f40023 sb a5,0(s0) + 80000ed8: 00003a17 auipc s4,0x3 + 80000edc: f20a0a13 addi s4,s4,-224 # 80003df8 + 80000ee0: 00003997 auipc s3,0x3 + 80000ee4: f2098993 addi s3,s3,-224 # 80003e00 + 80000ee8: 00003917 auipc s2,0x3 + 80000eec: f6890913 addi s2,s2,-152 # 80003e50 + 80000ef0: 0004c703 lbu a4,0(s1) + 80000ef4: 02070663 beqz a4,80000f20 + 80000ef8: 00003417 auipc s0,0x3 + 80000efc: f4040413 addi s0,s0,-192 # 80003e38 + 80000f00: 00810593 addi a1,sp,8 + 80000f04: 00300513 li a0,3 + 80000f08: 3dc000ef jal ra,800012e4 + 80000f0c: 00814603 lbu a2,8(sp) + 80000f10: 00040513 mv a0,s0 + 80000f14: 00060593 mv a1,a2 + 80000f18: 319010ef jal ra,80002a30 + 80000f1c: fe5ff06f j 80000f00 + 80000f20: 00079e63 bnez a5,80000f3c + 80000f24: 0000006f j 80000f24 + 80000f28: 0007b583 ld a1,0(a5) # 80000 <_entry_offset+0x80000> + 80000f2c: 000a0693 mv a3,s4 + 80000f30: 00071463 bnez a4,80000f38 + 80000f34: 00098693 mv a3,s3 + 80000f38: 2f9010ef jal ra,80002a30 + 80000f3c: 00800513 li a0,8 + 80000f40: 00810593 addi a1,sp,8 + 80000f44: 3a0000ef jal ra,800012e4 + 80000f48: 00c12603 lw a2,12(sp) + 80000f4c: 00814703 lbu a4,8(sp) + 80000f50: 00090513 mv a0,s2 + 80000f54: 00361793 slli a5,a2,0x3 + 80000f58: 00fa87b3 add a5,s5,a5 + 80000f5c: fc0616e3 bnez a2,80000f28 + 80000f60: 00044783 lbu a5,0(s0) + 80000f64: f8dff06f j 80000ef0 + +0000000080000f68 : + 80000f68: 00052783 lw a5,0(a0) + 80000f6c: ff010113 addi sp,sp,-16 + 80000f70: 00813023 sd s0,0(sp) + 80000f74: 00113423 sd ra,8(sp) + 80000f78: 00500713 li a4,5 + 80000f7c: 00058413 mv s0,a1 + 80000f80: 02e78463 beq a5,a4,80000fa8 + 80000f84: 00600713 li a4,6 + 80000f88: 04e78c63 beq a5,a4,80000fe0 + 80000f8c: 00100713 li a4,1 + 80000f90: 02e78a63 beq a5,a4,80000fc4 + 80000f94: 00813083 ld ra,8(sp) + 80000f98: 00040513 mv a0,s0 + 80000f9c: 00013403 ld s0,0(sp) + 80000fa0: 01010113 addi sp,sp,16 + 80000fa4: 00008067 ret + 80000fa8: 07400513 li a0,116 + 80000fac: 0e8000ef jal ra,80001094 + 80000fb0: 00813083 ld ra,8(sp) + 80000fb4: 00040513 mv a0,s0 + 80000fb8: 00013403 ld s0,0(sp) + 80000fbc: 01010113 addi sp,sp,16 + 80000fc0: 00008067 ret + 80000fc4: 07900513 li a0,121 + 80000fc8: 0cc000ef jal ra,80001094 + 80000fcc: 00813083 ld ra,8(sp) + 80000fd0: 00040513 mv a0,s0 + 80000fd4: 00013403 ld s0,0(sp) + 80000fd8: 01010113 addi sp,sp,16 + 80000fdc: 00008067 ret + 80000fe0: 06400513 li a0,100 + 80000fe4: 0b0000ef jal ra,80001094 + 80000fe8: 00813083 ld ra,8(sp) + 80000fec: 00040513 mv a0,s0 + 80000ff0: 00013403 ld s0,0(sp) + 80000ff4: 01010113 addi sp,sp,16 + 80000ff8: 00008067 ret + +0000000080000ffc : + 80000ffc: fe010113 addi sp,sp,-32 + 80001000: 00003517 auipc a0,0x3 + 80001004: dd850513 addi a0,a0,-552 # 80003dd8 + 80001008: 00113c23 sd ra,24(sp) + 8000100c: 00813823 sd s0,16(sp) + 80001010: 221010ef jal ra,80002a30 + 80001014: 00003517 auipc a0,0x3 + 80001018: 39c50513 addi a0,a0,924 # 800043b0 + 8000101c: 215010ef jal ra,80002a30 + 80001020: 00810593 addi a1,sp,8 + 80001024: 00700513 li a0,7 + 80001028: 2bc000ef jal ra,800012e4 + 8000102c: 00100513 li a0,1 + 80001030: 00989437 lui s0,0x989 + 80001034: 754000ef jal ra,80001788 + 80001038: 67f40413 addi s0,s0,1663 # 98967f <_entry_offset+0x98967f> + 8000103c: 00012423 sw zero,8(sp) + 80001040: 00812783 lw a5,8(sp) + 80001044: 0007879b sext.w a5,a5 + 80001048: 00f44e63 blt s0,a5,80001064 + 8000104c: 00812783 lw a5,8(sp) + 80001050: 0017879b addiw a5,a5,1 + 80001054: 00f12423 sw a5,8(sp) + 80001058: 00812783 lw a5,8(sp) + 8000105c: 0007879b sext.w a5,a5 + 80001060: fef456e3 bge s0,a5,8000104c + 80001064: 718000ef jal ra,8000177c + 80001068: fd5ff06f j 8000103c + +000000008000106c : + 8000106c: ff010113 addi sp,sp,-16 + 80001070: 00813023 sd s0,0(sp) + 80001074: 00113423 sd ra,8(sp) + 80001078: 00003417 auipc s0,0x3 + 8000107c: 36040413 addi s0,s0,864 # 800043d8 + 80001080: 06d000ef jal ra,800018ec + 80001084: 00050593 mv a1,a0 + 80001088: 00040513 mv a0,s0 + 8000108c: 1a5010ef jal ra,80002a30 + 80001090: ff1ff06f j 80001080 + +0000000080001094 : + 80001094: 00050513 mv a0,a0 + 80001098: 0000007b 0x7b + 8000109c: 00008067 ret + +00000000800010a0 : + 800010a0: 00050513 mv a0,a0 + 800010a4: 0000006b 0x6b + 800010a8: 0000006f j 800010a8 + +00000000800010ac <_assert>: + 800010ac: 00051a63 bnez a0,800010c0 <_assert+0x14> + 800010b0: 00100793 li a5,1 + 800010b4: 00078513 mv a0,a5 + 800010b8: 0000006b 0x6b + 800010bc: 0000006f j 800010bc <_assert+0x10> + 800010c0: 00008067 ret + +00000000800010c4 <_trm_init>: + 800010c4: ff010113 addi sp,sp,-16 + 800010c8: 00113423 sd ra,8(sp) + 800010cc: 0b1000ef jal ra,8000197c + 800010d0: 00003517 auipc a0,0x3 + 800010d4: 64850513 addi a0,a0,1608 # 80004718 + 800010d8: f39fe0ef jal ra,80000010
+ 800010dc: 00050513 mv a0,a0 + 800010e0: 0000006b 0x6b + 800010e4: 0000006f j 800010e4 <_trm_init+0x20> + +00000000800010e8 <__muldi3>: + 800010e8: 00050613 mv a2,a0 + 800010ec: 00000513 li a0,0 + 800010f0: 0015f693 andi a3,a1,1 + 800010f4: 00068463 beqz a3,800010fc <__muldi3+0x14> + 800010f8: 00c50533 add a0,a0,a2 + 800010fc: 0015d593 srli a1,a1,0x1 + 80001100: 00161613 slli a2,a2,0x1 + 80001104: fe0596e3 bnez a1,800010f0 <__muldi3+0x8> + 80001108: 00008067 ret + +000000008000110c <__udivsi3>: + 8000110c: 02051513 slli a0,a0,0x20 + 80001110: 02059593 slli a1,a1,0x20 + 80001114: 00008293 mv t0,ra + 80001118: 03c000ef jal ra,80001154 <__udivdi3> + 8000111c: 0005051b sext.w a0,a0 + 80001120: 00028067 jr t0 + +0000000080001124 <__umodsi3>: + 80001124: 02051513 slli a0,a0,0x20 + 80001128: 02059593 slli a1,a1,0x20 + 8000112c: 02055513 srli a0,a0,0x20 + 80001130: 0205d593 srli a1,a1,0x20 + 80001134: 00008293 mv t0,ra + 80001138: 01c000ef jal ra,80001154 <__udivdi3> + 8000113c: 0005851b sext.w a0,a1 + 80001140: 00028067 jr t0 + +0000000080001144 <__divsi3>: + 80001144: fff00293 li t0,-1 + 80001148: 0a558c63 beq a1,t0,80001200 <__moddi3+0x30> + +000000008000114c <__divdi3>: + 8000114c: 06054063 bltz a0,800011ac <__umoddi3+0x10> + 80001150: 0605c663 bltz a1,800011bc <__umoddi3+0x20> + +0000000080001154 <__udivdi3>: + 80001154: 00058613 mv a2,a1 + 80001158: 00050593 mv a1,a0 + 8000115c: fff00513 li a0,-1 + 80001160: 02060c63 beqz a2,80001198 <__udivdi3+0x44> + 80001164: 00100693 li a3,1 + 80001168: 00b67a63 bgeu a2,a1,8000117c <__udivdi3+0x28> + 8000116c: 00c05863 blez a2,8000117c <__udivdi3+0x28> + 80001170: 00161613 slli a2,a2,0x1 + 80001174: 00169693 slli a3,a3,0x1 + 80001178: feb66ae3 bltu a2,a1,8000116c <__udivdi3+0x18> + 8000117c: 00000513 li a0,0 + 80001180: 00c5e663 bltu a1,a2,8000118c <__udivdi3+0x38> + 80001184: 40c585b3 sub a1,a1,a2 + 80001188: 00d56533 or a0,a0,a3 + 8000118c: 0016d693 srli a3,a3,0x1 + 80001190: 00165613 srli a2,a2,0x1 + 80001194: fe0696e3 bnez a3,80001180 <__udivdi3+0x2c> + 80001198: 00008067 ret + +000000008000119c <__umoddi3>: + 8000119c: 00008293 mv t0,ra + 800011a0: fb5ff0ef jal ra,80001154 <__udivdi3> + 800011a4: 00058513 mv a0,a1 + 800011a8: 00028067 jr t0 + 800011ac: 40a00533 neg a0,a0 + 800011b0: 00b04863 bgtz a1,800011c0 <__umoddi3+0x24> + 800011b4: 40b005b3 neg a1,a1 + 800011b8: f9dff06f j 80001154 <__udivdi3> + 800011bc: 40b005b3 neg a1,a1 + 800011c0: 00008293 mv t0,ra + 800011c4: f91ff0ef jal ra,80001154 <__udivdi3> + 800011c8: 40a00533 neg a0,a0 + 800011cc: 00028067 jr t0 + +00000000800011d0 <__moddi3>: + 800011d0: 00008293 mv t0,ra + 800011d4: 0005ca63 bltz a1,800011e8 <__moddi3+0x18> + 800011d8: 00054c63 bltz a0,800011f0 <__moddi3+0x20> + 800011dc: f79ff0ef jal ra,80001154 <__udivdi3> + 800011e0: 00058513 mv a0,a1 + 800011e4: 00028067 jr t0 + 800011e8: 40b005b3 neg a1,a1 + 800011ec: fe0558e3 bgez a0,800011dc <__moddi3+0xc> + 800011f0: 40a00533 neg a0,a0 + 800011f4: f61ff0ef jal ra,80001154 <__udivdi3> + 800011f8: 40b00533 neg a0,a1 + 800011fc: 00028067 jr t0 + 80001200: 01f29293 slli t0,t0,0x1f + 80001204: f45514e3 bne a0,t0,8000114c <__divdi3> + 80001208: 00008067 ret + +000000008000120c <__am_timer_config>: + 8000120c: 00100793 li a5,1 + 80001210: 00f50023 sb a5,0(a0) + 80001214: 00f500a3 sb a5,1(a0) + 80001218: 00008067 ret + +000000008000121c <__am_input_config>: + 8000121c: 00100793 li a5,1 + 80001220: 00f50023 sb a5,0(a0) + 80001224: 00008067 ret + +0000000080001228 : + 80001228: ff010113 addi sp,sp,-16 + 8000122c: 00813023 sd s0,0(sp) + 80001230: 00113423 sd ra,8(sp) + 80001234: 00003417 auipc s0,0x3 + 80001238: 1ac40413 addi s0,s0,428 # 800043e0 + 8000123c: 04100513 li a0,65 + 80001240: 00140413 addi s0,s0,1 + 80001244: e51ff0ef jal ra,80001094 + 80001248: 00044503 lbu a0,0(s0) + 8000124c: fe051ae3 bnez a0,80001240 + 80001250: 00003417 auipc s0,0x3 + 80001254: 1a040413 addi s0,s0,416 # 800043f0 + 80001258: 06100513 li a0,97 + 8000125c: 00140413 addi s0,s0,1 + 80001260: e35ff0ef jal ra,80001094 + 80001264: 00044503 lbu a0,0(s0) + 80001268: fe051ae3 bnez a0,8000125c + 8000126c: 00003417 auipc s0,0x3 + 80001270: 1a440413 addi s0,s0,420 # 80004410 + 80001274: 02000513 li a0,32 + 80001278: 00140413 addi s0,s0,1 + 8000127c: e19ff0ef jal ra,80001094 + 80001280: 00044503 lbu a0,0(s0) + 80001284: fe051ae3 bnez a0,80001278 + 80001288: 00100513 li a0,1 + 8000128c: e15ff0ef jal ra,800010a0 + +0000000080001290 : + 80001290: ff010113 addi sp,sp,-16 + 80001294: 00113423 sd ra,8(sp) + 80001298: 00011797 auipc a5,0x11 + 8000129c: 2c878793 addi a5,a5,712 # 80012560 + 800012a0: 00011697 auipc a3,0x11 + 800012a4: 6c068693 addi a3,a3,1728 # 80012960 + 800012a8: 00000617 auipc a2,0x0 + 800012ac: f8060613 addi a2,a2,-128 # 80001228 + 800012b0: 00c0006f j 800012bc + 800012b4: 00878793 addi a5,a5,8 + 800012b8: 00d78c63 beq a5,a3,800012d0 + 800012bc: 0007b703 ld a4,0(a5) + 800012c0: fe071ae3 bnez a4,800012b4 + 800012c4: 00c7b023 sd a2,0(a5) + 800012c8: 00878793 addi a5,a5,8 + 800012cc: fed798e3 bne a5,a3,800012bc + 800012d0: 034000ef jal ra,80001304 <__am_timer_init> + 800012d4: 00813083 ld ra,8(sp) + 800012d8: 00100513 li a0,1 + 800012dc: 01010113 addi sp,sp,16 + 800012e0: 00008067 ret + +00000000800012e4 : + 800012e4: 00351793 slli a5,a0,0x3 + 800012e8: 00011517 auipc a0,0x11 + 800012ec: 27850513 addi a0,a0,632 # 80012560 + 800012f0: 00f50533 add a0,a0,a5 + 800012f4: 00053303 ld t1,0(a0) + 800012f8: 00058513 mv a0,a1 + 800012fc: 00030067 jr t1 + +0000000080001300 : + 80001300: fe5ff06f j 800012e4 + +0000000080001304 <__am_timer_init>: + 80001304: 00008067 ret + +0000000080001308 <__am_timer_uptime>: + 80001308: fd010113 addi sp,sp,-48 + 8000130c: 00913c23 sd s1,24(sp) + 80001310: 02113423 sd ra,40(sp) + 80001314: 02813023 sd s0,32(sp) + 80001318: 01213823 sd s2,16(sp) + 8000131c: 01313423 sd s3,8(sp) + 80001320: 00050493 mv s1,a0 + 80001324: b0002973 csrr s2,mcycle + 80001328: 000f49b7 lui s3,0xf4 + 8000132c: 24098593 addi a1,s3,576 # f4240 <_entry_offset+0xf4240> + 80001330: 00090513 mv a0,s2 + 80001334: e21ff0ef jal ra,80001154 <__udivdi3> + 80001338: 00551413 slli s0,a0,0x5 + 8000133c: 40a407b3 sub a5,s0,a0 + 80001340: 00679413 slli s0,a5,0x6 + 80001344: 40f40433 sub s0,s0,a5 + 80001348: 00341413 slli s0,s0,0x3 + 8000134c: 00a40433 add s0,s0,a0 + 80001350: 24098593 addi a1,s3,576 + 80001354: 00090513 mv a0,s2 + 80001358: e45ff0ef jal ra,8000119c <__umoddi3> + 8000135c: 00641413 slli s0,s0,0x6 + 80001360: 00a40433 add s0,s0,a0 + 80001364: 0084b023 sd s0,0(s1) + 80001368: 02813083 ld ra,40(sp) + 8000136c: 02013403 ld s0,32(sp) + 80001370: 01813483 ld s1,24(sp) + 80001374: 01013903 ld s2,16(sp) + 80001378: 00813983 ld s3,8(sp) + 8000137c: 03010113 addi sp,sp,48 + 80001380: 00008067 ret + +0000000080001384 : + 80001384: fc010113 addi sp,sp,-64 + 80001388: 01313c23 sd s3,24(sp) + 8000138c: 00058993 mv s3,a1 + 80001390: 00050793 mv a5,a0 + 80001394: 03800613 li a2,56 + 80001398: 00000593 li a1,0 + 8000139c: 00098513 mv a0,s3 + 800013a0: 02813823 sd s0,48(sp) + 800013a4: 03213023 sd s2,32(sp) + 800013a8: 0007b403 ld s0,0(a5) + 800013ac: 01413823 sd s4,16(sp) + 800013b0: 02113c23 sd ra,56(sp) + 800013b4: 02913423 sd s1,40(sp) + 800013b8: 01513423 sd s5,8(sp) + 800013bc: 7a0010ef jal ra,80002b5c + 800013c0: 7b200793 li a5,1970 + 800013c4: 00f9aa23 sw a5,20(s3) + 800013c8: 7b200913 li s2,1970 + 800013cc: 00003a17 auipc s4,0x3 + 800013d0: 354a0a13 addi s4,s4,852 # 80004720 + 800013d4: 0100006f j 800013e4 + 800013d8: 40e40433 sub s0,s0,a4 + 800013dc: 00d9aa23 sw a3,20(s3) + 800013e0: 00068913 mv s2,a3 + 800013e4: 0009049b sext.w s1,s2 + 800013e8: 06400593 li a1,100 + 800013ec: 00048513 mv a0,s1 + 800013f0: de1ff0ef jal ra,800011d0 <__moddi3> + 800013f4: 00050793 mv a5,a0 + 800013f8: 0007879b sext.w a5,a5 + 800013fc: 00048513 mv a0,s1 + 80001400: 00397493 andi s1,s2,3 + 80001404: 19000593 li a1,400 + 80001408: 0014b493 seqz s1,s1 + 8000140c: 00079863 bnez a5,8000141c + 80001410: dc1ff0ef jal ra,800011d0 <__moddi3> + 80001414: 0005049b sext.w s1,a0 + 80001418: 0014b493 seqz s1,s1 + 8000141c: 00249793 slli a5,s1,0x2 + 80001420: 00fa07b3 add a5,s4,a5 + 80001424: 0007e703 lwu a4,0(a5) + 80001428: 0019069b addiw a3,s2,1 + 8000142c: fae456e3 bge s0,a4,800013d8 + 80001430: 000155b7 lui a1,0x15 + 80001434: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80001438: 00040513 mv a0,s0 + 8000143c: d11ff0ef jal ra,8000114c <__divdi3> + 80001440: 00149793 slli a5,s1,0x1 + 80001444: 009784b3 add s1,a5,s1 + 80001448: 00449793 slli a5,s1,0x4 + 8000144c: 00003497 auipc s1,0x3 + 80001450: 00448493 addi s1,s1,4 # 80004450 + 80001454: 00f484b3 add s1,s1,a5 + 80001458: 0004e783 lwu a5,0(s1) + 8000145c: 0005051b sext.w a0,a0 + 80001460: 00a9ae23 sw a0,28(s3) + 80001464: 14f44463 blt s0,a5,800015ac + 80001468: 00100713 li a4,1 + 8000146c: 40f40433 sub s0,s0,a5 + 80001470: 0044e783 lwu a5,4(s1) + 80001474: 00070a1b sext.w s4,a4 + 80001478: 00448493 addi s1,s1,4 + 8000147c: 00170713 addi a4,a4,1 + 80001480: fef456e3 bge s0,a5,8000146c + 80001484: 000155b7 lui a1,0x15 + 80001488: 0149a823 sw s4,16(s3) + 8000148c: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80001490: 00040513 mv a0,s0 + 80001494: cb9ff0ef jal ra,8000114c <__divdi3> + 80001498: 0005051b sext.w a0,a0 + 8000149c: 0015079b addiw a5,a0,1 + 800014a0: 000155b7 lui a1,0x15 + 800014a4: 00f9a623 sw a5,12(s3) + 800014a8: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 800014ac: 00040513 mv a0,s0 + 800014b0: 00001ab7 lui s5,0x1 + 800014b4: 0007841b sext.w s0,a5 + 800014b8: d19ff0ef jal ra,800011d0 <__moddi3> + 800014bc: e10a8593 addi a1,s5,-496 # e10 <_entry_offset+0xe10> + 800014c0: 00050493 mv s1,a0 + 800014c4: c89ff0ef jal ra,8000114c <__divdi3> + 800014c8: e10a8593 addi a1,s5,-496 + 800014cc: 00a9a423 sw a0,8(s3) + 800014d0: 00048513 mv a0,s1 + 800014d4: cfdff0ef jal ra,800011d0 <__moddi3> + 800014d8: 03c00593 li a1,60 + 800014dc: 00050493 mv s1,a0 + 800014e0: c6dff0ef jal ra,8000114c <__divdi3> + 800014e4: 00a9a223 sw a0,4(s3) + 800014e8: 03c00593 li a1,60 + 800014ec: 00048513 mv a0,s1 + 800014f0: ce1ff0ef jal ra,800011d0 <__moddi3> + 800014f4: 001a0a1b addiw s4,s4,1 + 800014f8: 0ffa7793 andi a5,s4,255 + 800014fc: 0037b793 sltiu a5,a5,3 + 80001500: 40f9093b subw s2,s2,a5 + 80001504: 03091913 slli s2,s2,0x30 + 80001508: 03095913 srli s2,s2,0x30 + 8000150c: 00a9a023 sw a0,0(s3) + 80001510: 06400593 li a1,100 + 80001514: 00090513 mv a0,s2 + 80001518: c3dff0ef jal ra,80001154 <__udivdi3> + 8000151c: 0029549b srliw s1,s2,0x2 + 80001520: 0105179b slliw a5,a0,0x10 + 80001524: 0107d79b srliw a5,a5,0x10 + 80001528: 012484bb addw s1,s1,s2 + 8000152c: 19000593 li a1,400 + 80001530: 00090513 mv a0,s2 + 80001534: 0ffa7a13 andi s4,s4,255 + 80001538: 40f484bb subw s1,s1,a5 + 8000153c: fffa0a1b addiw s4,s4,-1 + 80001540: c15ff0ef jal ra,80001154 <__udivdi3> + 80001544: 00003797 auipc a5,0x3 + 80001548: f6c78793 addi a5,a5,-148 # 800044b0 + 8000154c: 002a1a13 slli s4,s4,0x2 + 80001550: 01478a33 add s4,a5,s4 + 80001554: 000a2783 lw a5,0(s4) + 80001558: 0105151b slliw a0,a0,0x10 + 8000155c: 0105551b srliw a0,a0,0x10 + 80001560: 00a484bb addw s1,s1,a0 + 80001564: 00f484bb addw s1,s1,a5 + 80001568: 0ff47513 andi a0,s0,255 + 8000156c: 00a4853b addw a0,s1,a0 + 80001570: 00700593 li a1,7 + 80001574: c5dff0ef jal ra,800011d0 <__moddi3> + 80001578: 03813083 ld ra,56(sp) + 8000157c: 03013403 ld s0,48(sp) + 80001580: 0ff57513 andi a0,a0,255 + 80001584: 00a9ac23 sw a0,24(s3) + 80001588: 0209a023 sw zero,32(s3) + 8000158c: 02813483 ld s1,40(sp) + 80001590: 02013903 ld s2,32(sp) + 80001594: 01013a03 ld s4,16(sp) + 80001598: 00813a83 ld s5,8(sp) + 8000159c: 00098513 mv a0,s3 + 800015a0: 01813983 ld s3,24(sp) + 800015a4: 04010113 addi sp,sp,64 + 800015a8: 00008067 ret + 800015ac: 00000a13 li s4,0 + 800015b0: eedff06f j 8000149c + +00000000800015b4 <__am_timer_rtc>: + 800015b4: f9010113 addi sp,sp,-112 + 800015b8: 06813023 sd s0,96(sp) + 800015bc: 06113423 sd ra,104(sp) + 800015c0: 04913c23 sd s1,88(sp) + 800015c4: 05213823 sd s2,80(sp) + 800015c8: 00050413 mv s0,a0 + 800015cc: b00024f3 csrr s1,mcycle + 800015d0: 000f4937 lui s2,0xf4 + 800015d4: 24090593 addi a1,s2,576 # f4240 <_entry_offset+0xf4240> + 800015d8: 00048513 mv a0,s1 + 800015dc: b79ff0ef jal ra,80001154 <__udivdi3> + 800015e0: 00050793 mv a5,a0 + 800015e4: 24090593 addi a1,s2,576 + 800015e8: 00048513 mv a0,s1 + 800015ec: 00f13423 sd a5,8(sp) + 800015f0: badff0ef jal ra,8000119c <__umoddi3> + 800015f4: 00050793 mv a5,a0 + 800015f8: 01810593 addi a1,sp,24 + 800015fc: 00810513 addi a0,sp,8 + 80001600: 00f13823 sd a5,16(sp) + 80001604: d81ff0ef jal ra,80001384 + 80001608: 01812703 lw a4,24(sp) + 8000160c: 02812783 lw a5,40(sp) + 80001610: 06813083 ld ra,104(sp) + 80001614: 00e42a23 sw a4,20(s0) + 80001618: 01c12703 lw a4,28(sp) + 8000161c: 0017879b addiw a5,a5,1 + 80001620: 00f42223 sw a5,4(s0) + 80001624: 00e42823 sw a4,16(s0) + 80001628: 02012703 lw a4,32(sp) + 8000162c: 02c12783 lw a5,44(sp) + 80001630: 05813483 ld s1,88(sp) + 80001634: 00e42623 sw a4,12(s0) + 80001638: 02412703 lw a4,36(sp) + 8000163c: 00f42023 sw a5,0(s0) + 80001640: 05013903 ld s2,80(sp) + 80001644: 00e42423 sw a4,8(s0) + 80001648: 06013403 ld s0,96(sp) + 8000164c: 07010113 addi sp,sp,112 + 80001650: 00008067 ret + +0000000080001654 <__am_input_keybrd>: + 80001654: 00050023 sb zero,0(a0) + 80001658: 00052223 sw zero,4(a0) + 8000165c: 00008067 ret + +0000000080001660 <__am_irq_handle>: + 80001660: 00095717 auipc a4,0x95 + 80001664: 54873703 ld a4,1352(a4) # 80096ba8 + 80001668: 00050593 mv a1,a0 + 8000166c: 0a070a63 beqz a4,80001720 <__am_irq_handle+0xc0> + 80001670: 10053683 ld a3,256(a0) + 80001674: fb010113 addi sp,sp,-80 + 80001678: 04113423 sd ra,72(sp) + 8000167c: 02013023 sd zero,32(sp) + 80001680: 02013423 sd zero,40(sp) + 80001684: 02013823 sd zero,48(sp) + 80001688: 02013c23 sd zero,56(sp) + 8000168c: 00b00793 li a5,11 + 80001690: 06f68c63 beq a3,a5,80001708 <__am_irq_handle+0xa8> + 80001694: fff00793 li a5,-1 + 80001698: 03f79793 slli a5,a5,0x3f + 8000169c: 00778793 addi a5,a5,7 + 800016a0: 04f69e63 bne a3,a5,800016fc <__am_irq_handle+0x9c> + 800016a4: 02004637 lui a2,0x2004 + 800016a8: 00063783 ld a5,0(a2) # 2004000 <_entry_offset+0x2004000> + 800016ac: 000f46b7 lui a3,0xf4 + 800016b0: 24068693 addi a3,a3,576 # f4240 <_entry_offset+0xf4240> + 800016b4: 00d787b3 add a5,a5,a3 + 800016b8: 00f63023 sd a5,0(a2) + 800016bc: 00500793 li a5,5 + 800016c0: 02f12023 sw a5,32(sp) + 800016c4: 02013783 ld a5,32(sp) + 800016c8: 00010513 mv a0,sp + 800016cc: 00f13023 sd a5,0(sp) + 800016d0: 02813783 ld a5,40(sp) + 800016d4: 00f13423 sd a5,8(sp) + 800016d8: 03013783 ld a5,48(sp) + 800016dc: 00f13823 sd a5,16(sp) + 800016e0: 03813783 ld a5,56(sp) + 800016e4: 00f13c23 sd a5,24(sp) + 800016e8: 000700e7 jalr a4 + 800016ec: 04050863 beqz a0,8000173c <__am_irq_handle+0xdc> + 800016f0: 04813083 ld ra,72(sp) + 800016f4: 05010113 addi sp,sp,80 + 800016f8: 00008067 ret + 800016fc: 00400793 li a5,4 + 80001700: 02f12023 sw a5,32(sp) + 80001704: fc1ff06f j 800016c4 <__am_irq_handle+0x64> + 80001708: 08853683 ld a3,136(a0) + 8000170c: fff00793 li a5,-1 + 80001710: 00f68a63 beq a3,a5,80001724 <__am_irq_handle+0xc4> + 80001714: 00200793 li a5,2 + 80001718: 02f12023 sw a5,32(sp) + 8000171c: fa9ff06f j 800016c4 <__am_irq_handle+0x64> + 80001720: 00008067 ret + 80001724: 11053783 ld a5,272(a0) + 80001728: 00100693 li a3,1 + 8000172c: 02d12023 sw a3,32(sp) + 80001730: 00478793 addi a5,a5,4 + 80001734: 10f53823 sd a5,272(a0) + 80001738: f8dff06f j 800016c4 <__am_irq_handle+0x64> + 8000173c: 02700613 li a2,39 + 80001740: 00003597 auipc a1,0x3 + 80001744: da058593 addi a1,a1,-608 # 800044e0 + 80001748: 00002517 auipc a0,0x2 + 8000174c: 46850513 addi a0,a0,1128 # 80003bb0 + 80001750: 2e0010ef jal ra,80002a30 + 80001754: 00100513 li a0,1 + 80001758: 949ff0ef jal ra,800010a0 + +000000008000175c : + 8000175c: 00050793 mv a5,a0 + 80001760: 00000717 auipc a4,0x0 + 80001764: 02c70713 addi a4,a4,44 # 8000178c <__am_asm_trap> + 80001768: 30571073 csrw mtvec,a4 + 8000176c: 00100513 li a0,1 + 80001770: 00095717 auipc a4,0x95 + 80001774: 42f73c23 sd a5,1080(a4) # 80096ba8 + 80001778: 00008067 ret + +000000008000177c : + 8000177c: fff00893 li a7,-1 + 80001780: 00000073 ecall + 80001784: 00008067 ret + +0000000080001788 : + 80001788: 00008067 ret + +000000008000178c <__am_asm_trap>: + 8000178c: ee810113 addi sp,sp,-280 + 80001790: 00113423 sd ra,8(sp) + 80001794: 00313c23 sd gp,24(sp) + 80001798: 02413023 sd tp,32(sp) + 8000179c: 02513423 sd t0,40(sp) + 800017a0: 02613823 sd t1,48(sp) + 800017a4: 02713c23 sd t2,56(sp) + 800017a8: 04813023 sd s0,64(sp) + 800017ac: 04913423 sd s1,72(sp) + 800017b0: 04a13823 sd a0,80(sp) + 800017b4: 04b13c23 sd a1,88(sp) + 800017b8: 06c13023 sd a2,96(sp) + 800017bc: 06d13423 sd a3,104(sp) + 800017c0: 06e13823 sd a4,112(sp) + 800017c4: 06f13c23 sd a5,120(sp) + 800017c8: 09013023 sd a6,128(sp) + 800017cc: 09113423 sd a7,136(sp) + 800017d0: 09213823 sd s2,144(sp) + 800017d4: 09313c23 sd s3,152(sp) + 800017d8: 0b413023 sd s4,160(sp) + 800017dc: 0b513423 sd s5,168(sp) + 800017e0: 0b613823 sd s6,176(sp) + 800017e4: 0b713c23 sd s7,184(sp) + 800017e8: 0d813023 sd s8,192(sp) + 800017ec: 0d913423 sd s9,200(sp) + 800017f0: 0da13823 sd s10,208(sp) + 800017f4: 0db13c23 sd s11,216(sp) + 800017f8: 0fc13023 sd t3,224(sp) + 800017fc: 0fd13423 sd t4,232(sp) + 80001800: 0fe13823 sd t5,240(sp) + 80001804: 0ff13c23 sd t6,248(sp) + 80001808: 00010293 mv t0,sp + 8000180c: 11828293 addi t0,t0,280 + 80001810: 00513823 sd t0,16(sp) + 80001814: 342022f3 csrr t0,mcause + 80001818: 30002373 csrr t1,mstatus + 8000181c: 341023f3 csrr t2,mepc + 80001820: 10513023 sd t0,256(sp) + 80001824: 10613423 sd t1,264(sp) + 80001828: 10713823 sd t2,272(sp) + 8000182c: 00010513 mv a0,sp + 80001830: e31ff0ef jal ra,80001660 <__am_irq_handle> + 80001834: 10813303 ld t1,264(sp) + 80001838: 11013383 ld t2,272(sp) + 8000183c: 30031073 csrw mstatus,t1 + 80001840: 34139073 csrw mepc,t2 + 80001844: 00813083 ld ra,8(sp) + 80001848: 01813183 ld gp,24(sp) + 8000184c: 02013203 ld tp,32(sp) + 80001850: 02813283 ld t0,40(sp) + 80001854: 03013303 ld t1,48(sp) + 80001858: 03813383 ld t2,56(sp) + 8000185c: 04013403 ld s0,64(sp) + 80001860: 04813483 ld s1,72(sp) + 80001864: 05013503 ld a0,80(sp) + 80001868: 05813583 ld a1,88(sp) + 8000186c: 06013603 ld a2,96(sp) + 80001870: 06813683 ld a3,104(sp) + 80001874: 07013703 ld a4,112(sp) + 80001878: 07813783 ld a5,120(sp) + 8000187c: 08013803 ld a6,128(sp) + 80001880: 08813883 ld a7,136(sp) + 80001884: 09013903 ld s2,144(sp) + 80001888: 09813983 ld s3,152(sp) + 8000188c: 0a013a03 ld s4,160(sp) + 80001890: 0a813a83 ld s5,168(sp) + 80001894: 0b013b03 ld s6,176(sp) + 80001898: 0b813b83 ld s7,184(sp) + 8000189c: 0c013c03 ld s8,192(sp) + 800018a0: 0c813c83 ld s9,200(sp) + 800018a4: 0d013d03 ld s10,208(sp) + 800018a8: 0d813d83 ld s11,216(sp) + 800018ac: 0e013e03 ld t3,224(sp) + 800018b0: 0e813e83 ld t4,232(sp) + 800018b4: 0f013f03 ld t5,240(sp) + 800018b8: 0f813f83 ld t6,248(sp) + 800018bc: 11810113 addi sp,sp,280 + 800018c0: 30200073 mret + +00000000800018c4 : + 800018c4: 00000513 li a0,0 + 800018c8: 00008067 ret + +00000000800018cc : + 800018cc: 00008067 ret + +00000000800018d0 : + 800018d0: 00008067 ret + +00000000800018d4 : + 800018d4: ff010113 addi sp,sp,-16 + 800018d8: 00000513 li a0,0 + 800018dc: 01010113 addi sp,sp,16 + 800018e0: 00008067 ret + +00000000800018e4 : + 800018e4: 00000513 li a0,0 + 800018e8: 00008067 ret + +00000000800018ec : + 800018ec: 00000513 li a0,0 + 800018f0: 00008067 ret + +00000000800018f4 : + 800018f4: 00054783 lbu a5,0(a0) + 800018f8: 00158593 addi a1,a1,1 + 800018fc: 00150513 addi a0,a0,1 + 80001900: fff5c703 lbu a4,-1(a1) + 80001904: 00078863 beqz a5,80001914 + 80001908: fee786e3 beq a5,a4,800018f4 + 8000190c: 40e7853b subw a0,a5,a4 + 80001910: 00008067 ret + 80001914: 40e0053b negw a0,a4 + 80001918: 00008067 ret + +000000008000191c : + 8000191c: 00011617 auipc a2,0x11 + 80001920: 04460613 addi a2,a2,68 # 80012960 + 80001924: 00063683 ld a3,0(a2) + 80001928: 00869713 slli a4,a3,0x8 + 8000192c: 40d70733 sub a4,a4,a3 + 80001930: 00371713 slli a4,a4,0x3 + 80001934: 00d70733 add a4,a4,a3 + 80001938: 00771713 slli a4,a4,0x7 + 8000193c: 00d70733 add a4,a4,a3 + 80001940: 00371713 slli a4,a4,0x3 + 80001944: 40d70733 sub a4,a4,a3 + 80001948: 00571793 slli a5,a4,0x5 + 8000194c: 00f707b3 add a5,a4,a5 + 80001950: 00279793 slli a5,a5,0x2 + 80001954: 40d787b3 sub a5,a5,a3 + 80001958: 00279793 slli a5,a5,0x2 + 8000195c: 00003737 lui a4,0x3 + 80001960: 00d787b3 add a5,a5,a3 + 80001964: 03970713 addi a4,a4,57 # 3039 <_entry_offset+0x3039> + 80001968: 00e787b3 add a5,a5,a4 + 8000196c: 02179513 slli a0,a5,0x21 + 80001970: 00f63023 sd a5,0(a2) + 80001974: 03155513 srli a0,a0,0x31 + 80001978: 00008067 ret + +000000008000197c : + 8000197c: 00011797 auipc a5,0x11 + 80001980: bd478793 addi a5,a5,-1068 # 80012550 + 80001984: 0007b503 ld a0,0(a5) + 80001988: 0087b583 ld a1,8(a5) + 8000198c: ff010113 addi sp,sp,-16 + 80001990: 00000693 li a3,0 + 80001994: 00000613 li a2,0 + 80001998: 40a585b3 sub a1,a1,a0 + 8000199c: 00113423 sd ra,8(sp) + 800019a0: 378010ef jal ra,80002d18 + 800019a4: 00813083 ld ra,8(sp) + 800019a8: 00095797 auipc a5,0x95 + 800019ac: 20a7b423 sd a0,520(a5) # 80096bb0 + 800019b0: 01010113 addi sp,sp,16 + 800019b4: 00008067 ret + +00000000800019b8 <_out_null>: + 800019b8: 00008067 ret + +00000000800019bc <_ntoa_format>: + 800019bc: fa010113 addi sp,sp,-96 + 800019c0: 07012303 lw t1,112(sp) + 800019c4: 03313c23 sd s3,56(sp) + 800019c8: 03413823 sd s4,48(sp) + 800019cc: 03513423 sd s5,40(sp) + 800019d0: 03613023 sd s6,32(sp) + 800019d4: 01713c23 sd s7,24(sp) + 800019d8: 01813823 sd s8,16(sp) + 800019dc: 01913423 sd s9,8(sp) + 800019e0: 00237e13 andi t3,t1,2 + 800019e4: 01037e93 andi t4,t1,16 + 800019e8: 04113c23 sd ra,88(sp) + 800019ec: 04813823 sd s0,80(sp) + 800019f0: 04913423 sd s1,72(sp) + 800019f4: 05213023 sd s2,64(sp) + 800019f8: 06012f03 lw t5,96(sp) + 800019fc: 06812c03 lw s8,104(sp) + 80001a00: 00050a13 mv s4,a0 + 80001a04: 00058a93 mv s5,a1 + 80001a08: 00060b93 mv s7,a2 + 80001a0c: 00068b13 mv s6,a3 + 80001a10: 00070993 mv s3,a4 + 80001a14: 000e0c9b sext.w s9,t3 + 80001a18: 000e8e9b sext.w t4,t4 + 80001a1c: 060e1c63 bnez t3,80001a94 <_ntoa_format+0xd8> + 80001a20: 020f1693 slli a3,t5,0x20 + 80001a24: 00137513 andi a0,t1,1 + 80001a28: 0206d693 srli a3,a3,0x20 + 80001a2c: 180c1e63 bnez s8,80001bc8 <_ntoa_format+0x20c> + 80001a30: 02d7f663 bgeu a5,a3,80001a5c <_ntoa_format+0xa0> + 80001a34: 02000713 li a4,32 + 80001a38: 36e78e63 beq a5,a4,80001db4 <_ntoa_format+0x3f8> + 80001a3c: 03000613 li a2,48 + 80001a40: 02000593 li a1,32 + 80001a44: 0080006f j 80001a4c <_ntoa_format+0x90> + 80001a48: 00b78a63 beq a5,a1,80001a5c <_ntoa_format+0xa0> + 80001a4c: 00178793 addi a5,a5,1 + 80001a50: 00f98733 add a4,s3,a5 + 80001a54: fec70fa3 sb a2,-1(a4) + 80001a58: fed7e8e3 bltu a5,a3,80001a48 <_ntoa_format+0x8c> + 80001a5c: 02050c63 beqz a0,80001a94 <_ntoa_format+0xd8> + 80001a60: 020c1913 slli s2,s8,0x20 + 80001a64: 02095913 srli s2,s2,0x20 + 80001a68: 0327f663 bgeu a5,s2,80001a94 <_ntoa_format+0xd8> + 80001a6c: 02000713 li a4,32 + 80001a70: 36e78863 beq a5,a4,80001de0 <_ntoa_format+0x424> + 80001a74: 03000693 li a3,48 + 80001a78: 02000613 li a2,32 + 80001a7c: 0080006f j 80001a84 <_ntoa_format+0xc8> + 80001a80: 16c78463 beq a5,a2,80001be8 <_ntoa_format+0x22c> + 80001a84: 00178793 addi a5,a5,1 + 80001a88: 00f98733 add a4,s3,a5 + 80001a8c: fed70fa3 sb a3,-1(a4) + 80001a90: ff2798e3 bne a5,s2,80001a80 <_ntoa_format+0xc4> + 80001a94: 1a0e8663 beqz t4,80001c40 <_ntoa_format+0x284> + 80001a98: 40037713 andi a4,t1,1024 + 80001a9c: 20071463 bnez a4,80001ca4 <_ntoa_format+0x2e8> + 80001aa0: 1e079663 bnez a5,80001c8c <_ntoa_format+0x2d0> + 80001aa4: 01000793 li a5,16 + 80001aa8: 2af88863 beq a7,a5,80001d58 <_ntoa_format+0x39c> + 80001aac: 00200793 li a5,2 + 80001ab0: 2ef88a63 beq a7,a5,80001da4 <_ntoa_format+0x3e8> + 80001ab4: 03000793 li a5,48 + 80001ab8: 00f98023 sb a5,0(s3) + 80001abc: 00100793 li a5,1 + 80001ac0: 1a080463 beqz a6,80001c68 <_ntoa_format+0x2ac> + 80001ac4: 00f98733 add a4,s3,a5 + 80001ac8: 00178413 addi s0,a5,1 + 80001acc: 02d00793 li a5,45 + 80001ad0: 00f70023 sb a5,0(a4) + 80001ad4: 00337313 andi t1,t1,3 + 80001ad8: 20031263 bnez t1,80001cdc <_ntoa_format+0x320> + 80001adc: 020c1913 slli s2,s8,0x20 + 80001ae0: 02095913 srli s2,s2,0x20 + 80001ae4: 1f247c63 bgeu s0,s2,80001cdc <_ntoa_format+0x320> + 80001ae8: 40890933 sub s2,s2,s0 + 80001aec: 01790933 add s2,s2,s7 + 80001af0: 000b8493 mv s1,s7 + 80001af4: 00048613 mv a2,s1 + 80001af8: 000b0693 mv a3,s6 + 80001afc: 00148493 addi s1,s1,1 + 80001b00: 000a8593 mv a1,s5 + 80001b04: 02000513 li a0,32 + 80001b08: 000a00e7 jalr s4 + 80001b0c: ff2494e3 bne s1,s2,80001af4 <_ntoa_format+0x138> + 80001b10: 02040663 beqz s0,80001b3c <_ntoa_format+0x180> + 80001b14: 01240933 add s2,s0,s2 + 80001b18: 012984b3 add s1,s3,s2 + 80001b1c: 00898433 add s0,s3,s0 + 80001b20: fff44503 lbu a0,-1(s0) + 80001b24: 40848633 sub a2,s1,s0 + 80001b28: 000b0693 mv a3,s6 + 80001b2c: fff40413 addi s0,s0,-1 + 80001b30: 000a8593 mv a1,s5 + 80001b34: 000a00e7 jalr s4 + 80001b38: fe8994e3 bne s3,s0,80001b20 <_ntoa_format+0x164> + 80001b3c: 040c8a63 beqz s9,80001b90 <_ntoa_format+0x1d4> + 80001b40: 020c1c13 slli s8,s8,0x20 + 80001b44: 41790433 sub s0,s2,s7 + 80001b48: 020c5c13 srli s8,s8,0x20 + 80001b4c: 05847263 bgeu s0,s8,80001b90 <_ntoa_format+0x1d4> + 80001b50: 01740633 add a2,s0,s7 + 80001b54: 000b0693 mv a3,s6 + 80001b58: 00140413 addi s0,s0,1 + 80001b5c: 000a8593 mv a1,s5 + 80001b60: 02000513 li a0,32 + 80001b64: 000a00e7 jalr s4 + 80001b68: ff8464e3 bltu s0,s8,80001b50 <_ntoa_format+0x194> + 80001b6c: 41790733 sub a4,s2,s7 + 80001b70: 00170713 addi a4,a4,1 + 80001b74: 00000793 li a5,0 + 80001b78: 00ec6863 bltu s8,a4,80001b88 <_ntoa_format+0x1cc> + 80001b7c: fffb8793 addi a5,s7,-1 + 80001b80: 01878c33 add s8,a5,s8 + 80001b84: 412c07b3 sub a5,s8,s2 + 80001b88: 00190913 addi s2,s2,1 + 80001b8c: 00f90933 add s2,s2,a5 + 80001b90: 05813083 ld ra,88(sp) + 80001b94: 05013403 ld s0,80(sp) + 80001b98: 04813483 ld s1,72(sp) + 80001b9c: 03813983 ld s3,56(sp) + 80001ba0: 03013a03 ld s4,48(sp) + 80001ba4: 02813a83 ld s5,40(sp) + 80001ba8: 02013b03 ld s6,32(sp) + 80001bac: 01813b83 ld s7,24(sp) + 80001bb0: 01013c03 ld s8,16(sp) + 80001bb4: 00813c83 ld s9,8(sp) + 80001bb8: 00090513 mv a0,s2 + 80001bbc: 04013903 ld s2,64(sp) + 80001bc0: 06010113 addi sp,sp,96 + 80001bc4: 00008067 ret + 80001bc8: 12050863 beqz a0,80001cf8 <_ntoa_format+0x33c> + 80001bcc: 00081663 bnez a6,80001bd8 <_ntoa_format+0x21c> + 80001bd0: 00c37713 andi a4,t1,12 + 80001bd4: 00070463 beqz a4,80001bdc <_ntoa_format+0x220> + 80001bd8: fffc0c1b addiw s8,s8,-1 + 80001bdc: e8d7f2e3 bgeu a5,a3,80001a60 <_ntoa_format+0xa4> + 80001be0: 02000713 li a4,32 + 80001be4: e4e79ce3 bne a5,a4,80001a3c <_ntoa_format+0x80> + 80001be8: 0e0e8063 beqz t4,80001cc8 <_ntoa_format+0x30c> + 80001bec: 40037793 andi a5,t1,1024 + 80001bf0: 04079c63 bnez a5,80001c48 <_ntoa_format+0x28c> + 80001bf4: 02000793 li a5,32 + 80001bf8: 0aff1063 bne t5,a5,80001c98 <_ntoa_format+0x2dc> + 80001bfc: 02000793 li a5,32 + 80001c00: 01f00713 li a4,31 + 80001c04: 01000693 li a3,16 + 80001c08: 1ad88c63 beq a7,a3,80001dc0 <_ntoa_format+0x404> + 80001c0c: 00200693 li a3,2 + 80001c10: 00070793 mv a5,a4 + 80001c14: 00d89e63 bne a7,a3,80001c30 <_ntoa_format+0x274> + 80001c18: 00e986b3 add a3,s3,a4 + 80001c1c: 00170793 addi a5,a4,1 + 80001c20: 06200713 li a4,98 + 80001c24: 00e68023 sb a4,0(a3) + 80001c28: 02000713 li a4,32 + 80001c2c: 00e78e63 beq a5,a4,80001c48 <_ntoa_format+0x28c> + 80001c30: 00f98733 add a4,s3,a5 + 80001c34: 03000693 li a3,48 + 80001c38: 00d70023 sb a3,0(a4) + 80001c3c: 00178793 addi a5,a5,1 + 80001c40: 02000713 li a4,32 + 80001c44: e6e79ee3 bne a5,a4,80001ac0 <_ntoa_format+0x104> + 80001c48: 00337313 andi t1,t1,3 + 80001c4c: 08031263 bnez t1,80001cd0 <_ntoa_format+0x314> + 80001c50: 02000413 li s0,32 + 80001c54: 020c1913 slli s2,s8,0x20 + 80001c58: 02095913 srli s2,s2,0x20 + 80001c5c: e92466e3 bltu s0,s2,80001ae8 <_ntoa_format+0x12c> + 80001c60: 000b8913 mv s2,s7 + 80001c64: eadff06f j 80001b10 <_ntoa_format+0x154> + 80001c68: 00437713 andi a4,t1,4 + 80001c6c: 06071c63 bnez a4,80001ce4 <_ntoa_format+0x328> + 80001c70: 00837713 andi a4,t1,8 + 80001c74: 0c071863 bnez a4,80001d44 <_ntoa_format+0x388> + 80001c78: 00337313 andi t1,t1,3 + 80001c7c: 00078413 mv s0,a5 + 80001c80: fc030ae3 beqz t1,80001c54 <_ntoa_format+0x298> + 80001c84: 000b8913 mv s2,s7 + 80001c88: e89ff06f j 80001b10 <_ntoa_format+0x154> + 80001c8c: 020f1f13 slli t5,t5,0x20 + 80001c90: 020f5f13 srli t5,t5,0x20 + 80001c94: 0aff0263 beq t5,a5,80001d38 <_ntoa_format+0x37c> + 80001c98: 020c1913 slli s2,s8,0x20 + 80001c9c: 02095913 srli s2,s2,0x20 + 80001ca0: 08f90c63 beq s2,a5,80001d38 <_ntoa_format+0x37c> + 80001ca4: 01000713 li a4,16 + 80001ca8: 06e88663 beq a7,a4,80001d14 <_ntoa_format+0x358> + 80001cac: 00200713 li a4,2 + 80001cb0: f6e89ce3 bne a7,a4,80001c28 <_ntoa_format+0x26c> + 80001cb4: 02000713 li a4,32 + 80001cb8: f8e788e3 beq a5,a4,80001c48 <_ntoa_format+0x28c> + 80001cbc: 00f986b3 add a3,s3,a5 + 80001cc0: 00178793 addi a5,a5,1 + 80001cc4: f5dff06f j 80001c20 <_ntoa_format+0x264> + 80001cc8: 00337313 andi t1,t1,3 + 80001ccc: 0c030063 beqz t1,80001d8c <_ntoa_format+0x3d0> + 80001cd0: 000b8913 mv s2,s7 + 80001cd4: 02000413 li s0,32 + 80001cd8: e3dff06f j 80001b14 <_ntoa_format+0x158> + 80001cdc: 000b8913 mv s2,s7 + 80001ce0: e35ff06f j 80001b14 <_ntoa_format+0x158> + 80001ce4: 00f98733 add a4,s3,a5 + 80001ce8: 00178413 addi s0,a5,1 + 80001cec: 02b00793 li a5,43 + 80001cf0: 00f70023 sb a5,0(a4) + 80001cf4: de1ff06f j 80001ad4 <_ntoa_format+0x118> + 80001cf8: d8d7fee3 bgeu a5,a3,80001a94 <_ntoa_format+0xd8> + 80001cfc: 02000713 li a4,32 + 80001d00: d2e79ee3 bne a5,a4,80001a3c <_ntoa_format+0x80> + 80001d04: 0e0e8c63 beqz t4,80001dfc <_ntoa_format+0x440> + 80001d08: 40037793 andi a5,t1,1024 + 80001d0c: f2079ee3 bnez a5,80001c48 <_ntoa_format+0x28c> + 80001d10: ee5ff06f j 80001bf4 <_ntoa_format+0x238> + 80001d14: 02037713 andi a4,t1,32 + 80001d18: 04071c63 bnez a4,80001d70 <_ntoa_format+0x3b4> + 80001d1c: 02000713 li a4,32 + 80001d20: f2e784e3 beq a5,a4,80001c48 <_ntoa_format+0x28c> + 80001d24: 00f98733 add a4,s3,a5 + 80001d28: 00178793 addi a5,a5,1 + 80001d2c: 07800693 li a3,120 + 80001d30: 00d70023 sb a3,0(a4) + 80001d34: ef5ff06f j 80001c28 <_ntoa_format+0x26c> + 80001d38: fff78713 addi a4,a5,-1 + 80001d3c: d60704e3 beqz a4,80001aa4 <_ntoa_format+0xe8> + 80001d40: ec5ff06f j 80001c04 <_ntoa_format+0x248> + 80001d44: 00f98733 add a4,s3,a5 + 80001d48: 00178413 addi s0,a5,1 + 80001d4c: 02000793 li a5,32 + 80001d50: 00f70023 sb a5,0(a4) + 80001d54: d81ff06f j 80001ad4 <_ntoa_format+0x118> + 80001d58: 02037793 andi a5,t1,32 + 80001d5c: 02079c63 bnez a5,80001d94 <_ntoa_format+0x3d8> + 80001d60: 07800793 li a5,120 + 80001d64: 00f98023 sb a5,0(s3) + 80001d68: 00100793 li a5,1 + 80001d6c: ec5ff06f j 80001c30 <_ntoa_format+0x274> + 80001d70: 02000713 li a4,32 + 80001d74: ece78ae3 beq a5,a4,80001c48 <_ntoa_format+0x28c> + 80001d78: 00f98733 add a4,s3,a5 + 80001d7c: 05800693 li a3,88 + 80001d80: 00d70023 sb a3,0(a4) + 80001d84: 00178793 addi a5,a5,1 + 80001d88: ea1ff06f j 80001c28 <_ntoa_format+0x26c> + 80001d8c: 02000413 li s0,32 + 80001d90: d4dff06f j 80001adc <_ntoa_format+0x120> + 80001d94: 05800793 li a5,88 + 80001d98: 00f98023 sb a5,0(s3) + 80001d9c: 00100793 li a5,1 + 80001da0: e91ff06f j 80001c30 <_ntoa_format+0x274> + 80001da4: 06200793 li a5,98 + 80001da8: 00f98023 sb a5,0(s3) + 80001dac: 00100793 li a5,1 + 80001db0: e81ff06f j 80001c30 <_ntoa_format+0x274> + 80001db4: e2051ae3 bnez a0,80001be8 <_ntoa_format+0x22c> + 80001db8: 000c8c13 mv s8,s9 + 80001dbc: f49ff06f j 80001d04 <_ntoa_format+0x348> + 80001dc0: 02037693 andi a3,t1,32 + 80001dc4: ffe78713 addi a4,a5,-2 + 80001dc8: 00069863 bnez a3,80001dd8 <_ntoa_format+0x41c> + 80001dcc: 00e98733 add a4,s3,a4 + 80001dd0: fff78793 addi a5,a5,-1 + 80001dd4: f59ff06f j 80001d2c <_ntoa_format+0x370> + 80001dd8: 00070793 mv a5,a4 + 80001ddc: f9dff06f j 80001d78 <_ntoa_format+0x3bc> + 80001de0: 000e8e63 beqz t4,80001dfc <_ntoa_format+0x440> + 80001de4: 40037713 andi a4,t1,1024 + 80001de8: 00071e63 bnez a4,80001e04 <_ntoa_format+0x448> + 80001dec: 02ff0e63 beq t5,a5,80001e28 <_ntoa_format+0x46c> + 80001df0: e4fc1ce3 bne s8,a5,80001c48 <_ntoa_format+0x28c> + 80001df4: 01f00713 li a4,31 + 80001df8: e0dff06f j 80001c04 <_ntoa_format+0x248> + 80001dfc: 02000413 li s0,32 + 80001e00: cd5ff06f j 80001ad4 <_ntoa_format+0x118> + 80001e04: 01000793 li a5,16 + 80001e08: 02f88c63 beq a7,a5,80001e40 <_ntoa_format+0x484> + 80001e0c: 00200793 li a5,2 + 80001e10: e2f88ce3 beq a7,a5,80001c48 <_ntoa_format+0x28c> + 80001e14: 00337313 andi t1,t1,3 + 80001e18: ea031ce3 bnez t1,80001cd0 <_ntoa_format+0x314> + 80001e1c: 02000413 li s0,32 + 80001e20: cd2464e3 bltu s0,s2,80001ae8 <_ntoa_format+0x12c> + 80001e24: e3dff06f j 80001c60 <_ntoa_format+0x2a4> + 80001e28: 01000713 li a4,16 + 80001e2c: f8e88ae3 beq a7,a4,80001dc0 <_ntoa_format+0x404> + 80001e30: 00200793 li a5,2 + 80001e34: 00f88c63 beq a7,a5,80001e4c <_ntoa_format+0x490> + 80001e38: 01f00793 li a5,31 + 80001e3c: df5ff06f j 80001c30 <_ntoa_format+0x274> + 80001e40: 02037793 andi a5,t1,32 + 80001e44: fc0788e3 beqz a5,80001e14 <_ntoa_format+0x458> + 80001e48: e01ff06f j 80001c48 <_ntoa_format+0x28c> + 80001e4c: 01f00713 li a4,31 + 80001e50: dc9ff06f j 80001c18 <_ntoa_format+0x25c> + +0000000080001e54 <_ntoa_long>: + 80001e54: f4010113 addi sp,sp,-192 + 80001e58: 09413823 sd s4,144(sp) + 80001e5c: 09513423 sd s5,136(sp) + 80001e60: 09613023 sd s6,128(sp) + 80001e64: 07713c23 sd s7,120(sp) + 80001e68: 07813823 sd s8,112(sp) + 80001e6c: 07913423 sd s9,104(sp) + 80001e70: 05b13c23 sd s11,88(sp) + 80001e74: 0a113c23 sd ra,184(sp) + 80001e78: 0a813823 sd s0,176(sp) + 80001e7c: 0a913423 sd s1,168(sp) + 80001e80: 0b213023 sd s2,160(sp) + 80001e84: 09313c23 sd s3,152(sp) + 80001e88: 07a13023 sd s10,96(sp) + 80001e8c: 02a13023 sd a0,32(sp) + 80001e90: 03113423 sd a7,40(sp) + 80001e94: 0c812a03 lw s4,200(sp) + 80001e98: 00070d93 mv s11,a4 + 80001e9c: 00058b13 mv s6,a1 + 80001ea0: 00060b93 mv s7,a2 + 80001ea4: 00068c13 mv s8,a3 + 80001ea8: 00078c93 mv s9,a5 + 80001eac: 00080a93 mv s5,a6 + 80001eb0: 00071863 bnez a4,80001ec0 <_ntoa_long+0x6c> + 80001eb4: 400a7793 andi a5,s4,1024 + 80001eb8: fefa7a13 andi s4,s4,-17 + 80001ebc: 0e079663 bnez a5,80001fa8 <_ntoa_long+0x154> + 80001ec0: 020a7793 andi a5,s4,32 + 80001ec4: 06100413 li s0,97 + 80001ec8: 0c079c63 bnez a5,80001fa0 <_ntoa_long+0x14c> + 80001ecc: 00000d13 li s10,0 + 80001ed0: 03010493 addi s1,sp,48 + 80001ed4: 00900913 li s2,9 + 80001ed8: ff64041b addiw s0,s0,-10 + 80001edc: 02000993 li s3,32 + 80001ee0: 00c0006f j 80001eec <_ntoa_long+0x98> + 80001ee4: 053d0463 beq s10,s3,80001f2c <_ntoa_long+0xd8> + 80001ee8: 00050d93 mv s11,a0 + 80001eec: 000a8593 mv a1,s5 + 80001ef0: 000d8513 mv a0,s11 + 80001ef4: aa8ff0ef jal ra,8000119c <__umoddi3> + 80001ef8: 0ff57313 andi t1,a0,255 + 80001efc: 0303071b addiw a4,t1,48 + 80001f00: 0064033b addw t1,s0,t1 + 80001f04: 0ff37313 andi t1,t1,255 + 80001f08: 00a96463 bltu s2,a0,80001f10 <_ntoa_long+0xbc> + 80001f0c: 0ff77313 andi t1,a4,255 + 80001f10: 001d0d13 addi s10,s10,1 + 80001f14: 01a48733 add a4,s1,s10 + 80001f18: 000d8513 mv a0,s11 + 80001f1c: 000a8593 mv a1,s5 + 80001f20: fe670fa3 sb t1,-1(a4) + 80001f24: a30ff0ef jal ra,80001154 <__udivdi3> + 80001f28: fb5dfee3 bgeu s11,s5,80001ee4 <_ntoa_long+0x90> + 80001f2c: 0c012703 lw a4,192(sp) + 80001f30: 02813783 ld a5,40(sp) + 80001f34: 02013503 ld a0,32(sp) + 80001f38: 01413823 sd s4,16(sp) + 80001f3c: 00e13423 sd a4,8(sp) + 80001f40: 00f13023 sd a5,0(sp) + 80001f44: 000a889b sext.w a7,s5 + 80001f48: 000c8813 mv a6,s9 + 80001f4c: 000d0793 mv a5,s10 + 80001f50: 00048713 mv a4,s1 + 80001f54: 000c0693 mv a3,s8 + 80001f58: 000b8613 mv a2,s7 + 80001f5c: 000b0593 mv a1,s6 + 80001f60: a5dff0ef jal ra,800019bc <_ntoa_format> + 80001f64: 0b813083 ld ra,184(sp) + 80001f68: 0b013403 ld s0,176(sp) + 80001f6c: 0a813483 ld s1,168(sp) + 80001f70: 0a013903 ld s2,160(sp) + 80001f74: 09813983 ld s3,152(sp) + 80001f78: 09013a03 ld s4,144(sp) + 80001f7c: 08813a83 ld s5,136(sp) + 80001f80: 08013b03 ld s6,128(sp) + 80001f84: 07813b83 ld s7,120(sp) + 80001f88: 07013c03 ld s8,112(sp) + 80001f8c: 06813c83 ld s9,104(sp) + 80001f90: 06013d03 ld s10,96(sp) + 80001f94: 05813d83 ld s11,88(sp) + 80001f98: 0c010113 addi sp,sp,192 + 80001f9c: 00008067 ret + 80001fa0: 04100413 li s0,65 + 80001fa4: f29ff06f j 80001ecc <_ntoa_long+0x78> + 80001fa8: 00000d13 li s10,0 + 80001fac: 03010493 addi s1,sp,48 + 80001fb0: f7dff06f j 80001f2c <_ntoa_long+0xd8> + +0000000080001fb4 <_ntoa_long_long>: + 80001fb4: f4010113 addi sp,sp,-192 + 80001fb8: 09413823 sd s4,144(sp) + 80001fbc: 09513423 sd s5,136(sp) + 80001fc0: 09613023 sd s6,128(sp) + 80001fc4: 07713c23 sd s7,120(sp) + 80001fc8: 07813823 sd s8,112(sp) + 80001fcc: 07913423 sd s9,104(sp) + 80001fd0: 05b13c23 sd s11,88(sp) + 80001fd4: 0a113c23 sd ra,184(sp) + 80001fd8: 0a813823 sd s0,176(sp) + 80001fdc: 0a913423 sd s1,168(sp) + 80001fe0: 0b213023 sd s2,160(sp) + 80001fe4: 09313c23 sd s3,152(sp) + 80001fe8: 07a13023 sd s10,96(sp) + 80001fec: 02a13023 sd a0,32(sp) + 80001ff0: 03113423 sd a7,40(sp) + 80001ff4: 0c812a03 lw s4,200(sp) + 80001ff8: 00070d93 mv s11,a4 + 80001ffc: 00058b13 mv s6,a1 + 80002000: 00060b93 mv s7,a2 + 80002004: 00068c13 mv s8,a3 + 80002008: 00078c93 mv s9,a5 + 8000200c: 00080a93 mv s5,a6 + 80002010: 00071863 bnez a4,80002020 <_ntoa_long_long+0x6c> + 80002014: 400a7793 andi a5,s4,1024 + 80002018: fefa7a13 andi s4,s4,-17 + 8000201c: 0e079663 bnez a5,80002108 <_ntoa_long_long+0x154> + 80002020: 020a7793 andi a5,s4,32 + 80002024: 06100413 li s0,97 + 80002028: 0c079c63 bnez a5,80002100 <_ntoa_long_long+0x14c> + 8000202c: 00000d13 li s10,0 + 80002030: 03010493 addi s1,sp,48 + 80002034: 00900913 li s2,9 + 80002038: ff64041b addiw s0,s0,-10 + 8000203c: 02000993 li s3,32 + 80002040: 00c0006f j 8000204c <_ntoa_long_long+0x98> + 80002044: 053d0463 beq s10,s3,8000208c <_ntoa_long_long+0xd8> + 80002048: 00050d93 mv s11,a0 + 8000204c: 000a8593 mv a1,s5 + 80002050: 000d8513 mv a0,s11 + 80002054: 948ff0ef jal ra,8000119c <__umoddi3> + 80002058: 0ff57313 andi t1,a0,255 + 8000205c: 0303071b addiw a4,t1,48 + 80002060: 0064033b addw t1,s0,t1 + 80002064: 0ff37313 andi t1,t1,255 + 80002068: 00a96463 bltu s2,a0,80002070 <_ntoa_long_long+0xbc> + 8000206c: 0ff77313 andi t1,a4,255 + 80002070: 001d0d13 addi s10,s10,1 + 80002074: 01a48733 add a4,s1,s10 + 80002078: 000d8513 mv a0,s11 + 8000207c: 000a8593 mv a1,s5 + 80002080: fe670fa3 sb t1,-1(a4) + 80002084: 8d0ff0ef jal ra,80001154 <__udivdi3> + 80002088: fb5dfee3 bgeu s11,s5,80002044 <_ntoa_long_long+0x90> + 8000208c: 0c012703 lw a4,192(sp) + 80002090: 02813783 ld a5,40(sp) + 80002094: 02013503 ld a0,32(sp) + 80002098: 01413823 sd s4,16(sp) + 8000209c: 00e13423 sd a4,8(sp) + 800020a0: 00f13023 sd a5,0(sp) + 800020a4: 000a889b sext.w a7,s5 + 800020a8: 000c8813 mv a6,s9 + 800020ac: 000d0793 mv a5,s10 + 800020b0: 00048713 mv a4,s1 + 800020b4: 000c0693 mv a3,s8 + 800020b8: 000b8613 mv a2,s7 + 800020bc: 000b0593 mv a1,s6 + 800020c0: 8fdff0ef jal ra,800019bc <_ntoa_format> + 800020c4: 0b813083 ld ra,184(sp) + 800020c8: 0b013403 ld s0,176(sp) + 800020cc: 0a813483 ld s1,168(sp) + 800020d0: 0a013903 ld s2,160(sp) + 800020d4: 09813983 ld s3,152(sp) + 800020d8: 09013a03 ld s4,144(sp) + 800020dc: 08813a83 ld s5,136(sp) + 800020e0: 08013b03 ld s6,128(sp) + 800020e4: 07813b83 ld s7,120(sp) + 800020e8: 07013c03 ld s8,112(sp) + 800020ec: 06813c83 ld s9,104(sp) + 800020f0: 06013d03 ld s10,96(sp) + 800020f4: 05813d83 ld s11,88(sp) + 800020f8: 0c010113 addi sp,sp,192 + 800020fc: 00008067 ret + 80002100: 04100413 li s0,65 + 80002104: f29ff06f j 8000202c <_ntoa_long_long+0x78> + 80002108: 00000d13 li s10,0 + 8000210c: 03010493 addi s1,sp,48 + 80002110: f7dff06f j 8000208c <_ntoa_long_long+0xd8> + +0000000080002114 <_vsnprintf>: + 80002114: f6010113 addi sp,sp,-160 + 80002118: 08913423 sd s1,136(sp) + 8000211c: 09213023 sd s2,128(sp) + 80002120: 07313c23 sd s3,120(sp) + 80002124: 05713c23 sd s7,88(sp) + 80002128: 05813823 sd s8,80(sp) + 8000212c: 08113c23 sd ra,152(sp) + 80002130: 08813823 sd s0,144(sp) + 80002134: 07413823 sd s4,112(sp) + 80002138: 07513423 sd s5,104(sp) + 8000213c: 07613023 sd s6,96(sp) + 80002140: 05913423 sd s9,72(sp) + 80002144: 05a13023 sd s10,64(sp) + 80002148: 03b13c23 sd s11,56(sp) + 8000214c: 00058493 mv s1,a1 + 80002150: 00060c13 mv s8,a2 + 80002154: 00068b93 mv s7,a3 + 80002158: 00070993 mv s3,a4 + 8000215c: 00000917 auipc s2,0x0 + 80002160: 85c90913 addi s2,s2,-1956 # 800019b8 <_out_null> + 80002164: 00058463 beqz a1,8000216c <_vsnprintf+0x58> + 80002168: 00050913 mv s2,a0 + 8000216c: 000bc503 lbu a0,0(s7) + 80002170: 00000d13 li s10,0 + 80002174: 66050663 beqz a0,800027e0 <_vsnprintf+0x6cc> + 80002178: 000107b7 lui a5,0x10 + 8000217c: fff78793 addi a5,a5,-1 # ffff <_entry_offset+0xffff> + 80002180: 02500a13 li s4,37 + 80002184: 00002417 auipc s0,0x2 + 80002188: 39040413 addi s0,s0,912 # 80004514 + 8000218c: 00f13c23 sd a5,24(sp) + 80002190: 0200006f j 800021b0 <_vsnprintf+0x9c> + 80002194: 000d0613 mv a2,s10 + 80002198: 000c0693 mv a3,s8 + 8000219c: 00048593 mv a1,s1 + 800021a0: 001d0d13 addi s10,s10,1 + 800021a4: 000900e7 jalr s2 + 800021a8: 000bc503 lbu a0,0(s7) + 800021ac: 1c050263 beqz a0,80002370 <_vsnprintf+0x25c> + 800021b0: 001b8b93 addi s7,s7,1 + 800021b4: ff4510e3 bne a0,s4,80002194 <_vsnprintf+0x80> + 800021b8: 00000593 li a1,0 + 800021bc: 01000813 li a6,16 + 800021c0: 000bc503 lbu a0,0(s7) + 800021c4: 001b8713 addi a4,s7,1 + 800021c8: 00070613 mv a2,a4 + 800021cc: fe05079b addiw a5,a0,-32 + 800021d0: 0ff7f793 andi a5,a5,255 + 800021d4: 00f86c63 bltu a6,a5,800021ec <_vsnprintf+0xd8> + 800021d8: 00279793 slli a5,a5,0x2 + 800021dc: 008787b3 add a5,a5,s0 + 800021e0: 0007a783 lw a5,0(a5) + 800021e4: 008787b3 add a5,a5,s0 + 800021e8: 00078067 jr a5 + 800021ec: fd05079b addiw a5,a0,-48 + 800021f0: 0ff7f793 andi a5,a5,255 + 800021f4: 00900813 li a6,9 + 800021f8: 0ef87c63 bgeu a6,a5,800022f0 <_vsnprintf+0x1dc> + 800021fc: 02a00793 li a5,42 + 80002200: 20f50463 beq a0,a5,80002408 <_vsnprintf+0x2f4> + 80002204: 000b8613 mv a2,s7 + 80002208: 00000d93 li s11,0 + 8000220c: 00070b93 mv s7,a4 + 80002210: 02e00793 li a5,46 + 80002214: 00000c93 li s9,0 + 80002218: 12f50463 beq a0,a5,80002340 <_vsnprintf+0x22c> + 8000221c: f985079b addiw a5,a0,-104 + 80002220: 0ff7f793 andi a5,a5,255 + 80002224: 01200713 li a4,18 + 80002228: 08f76463 bltu a4,a5,800022b0 <_vsnprintf+0x19c> + 8000222c: 00002717 auipc a4,0x2 + 80002230: 32c70713 addi a4,a4,812 # 80004558 + 80002234: 00279793 slli a5,a5,0x2 + 80002238: 00e787b3 add a5,a5,a4 + 8000223c: 0007a783 lw a5,0(a5) + 80002240: 00e787b3 add a5,a5,a4 + 80002244: 00078067 jr a5 + 80002248: 0015e593 ori a1,a1,1 + 8000224c: 0005859b sext.w a1,a1 + 80002250: 00070b93 mv s7,a4 + 80002254: f6dff06f j 800021c0 <_vsnprintf+0xac> + 80002258: 0025e593 ori a1,a1,2 + 8000225c: 0005859b sext.w a1,a1 + 80002260: 00070b93 mv s7,a4 + 80002264: f5dff06f j 800021c0 <_vsnprintf+0xac> + 80002268: 0045e593 ori a1,a1,4 + 8000226c: 0005859b sext.w a1,a1 + 80002270: 00070b93 mv s7,a4 + 80002274: f4dff06f j 800021c0 <_vsnprintf+0xac> + 80002278: 0105e593 ori a1,a1,16 + 8000227c: 0005859b sext.w a1,a1 + 80002280: 00070b93 mv s7,a4 + 80002284: f3dff06f j 800021c0 <_vsnprintf+0xac> + 80002288: 0085e593 ori a1,a1,8 + 8000228c: 0005859b sext.w a1,a1 + 80002290: 00070b93 mv s7,a4 + 80002294: f2dff06f j 800021c0 <_vsnprintf+0xac> + 80002298: 00164503 lbu a0,1(a2) + 8000229c: 06800793 li a5,104 + 800022a0: 52f50663 beq a0,a5,800027cc <_vsnprintf+0x6b8> + 800022a4: 0805e593 ori a1,a1,128 + 800022a8: 0005859b sext.w a1,a1 + 800022ac: 001b8b93 addi s7,s7,1 + 800022b0: fdb5079b addiw a5,a0,-37 + 800022b4: 0ff7f793 andi a5,a5,255 + 800022b8: 05300713 li a4,83 + 800022bc: ecf76ce3 bltu a4,a5,80002194 <_vsnprintf+0x80> + 800022c0: 00002717 auipc a4,0x2 + 800022c4: 2e470713 addi a4,a4,740 # 800045a4 + 800022c8: 00279793 slli a5,a5,0x2 + 800022cc: 00e787b3 add a5,a5,a4 + 800022d0: 0007a783 lw a5,0(a5) + 800022d4: 00e787b3 add a5,a5,a4 + 800022d8: 00078067 jr a5 + 800022dc: 00164503 lbu a0,1(a2) + 800022e0: 1005e593 ori a1,a1,256 + 800022e4: 0005859b sext.w a1,a1 + 800022e8: 001b8b93 addi s7,s7,1 + 800022ec: fc5ff06f j 800022b0 <_vsnprintf+0x19c> + 800022f0: 00000d93 li s11,0 + 800022f4: 00900813 li a6,9 + 800022f8: 0080006f j 80002300 <_vsnprintf+0x1ec> + 800022fc: 00170713 addi a4,a4,1 + 80002300: 002d979b slliw a5,s11,0x2 + 80002304: 01b787bb addw a5,a5,s11 + 80002308: 0017979b slliw a5,a5,0x1 + 8000230c: 00a787bb addw a5,a5,a0 + 80002310: 00074503 lbu a0,0(a4) + 80002314: 000b8893 mv a7,s7 + 80002318: fd078d9b addiw s11,a5,-48 + 8000231c: fd05061b addiw a2,a0,-48 + 80002320: 0ff67613 andi a2,a2,255 + 80002324: 00070b93 mv s7,a4 + 80002328: fcc87ae3 bgeu a6,a2,800022fc <_vsnprintf+0x1e8> + 8000232c: 02e00793 li a5,46 + 80002330: 00070613 mv a2,a4 + 80002334: 00288b93 addi s7,a7,2 + 80002338: 00000c93 li s9,0 + 8000233c: eef510e3 bne a0,a5,8000221c <_vsnprintf+0x108> + 80002340: 00164503 lbu a0,1(a2) + 80002344: 4005e593 ori a1,a1,1024 + 80002348: 00900713 li a4,9 + 8000234c: fd05079b addiw a5,a0,-48 + 80002350: 0ff7f793 andi a5,a5,255 + 80002354: 0005859b sext.w a1,a1 + 80002358: 06f77c63 bgeu a4,a5,800023d0 <_vsnprintf+0x2bc> + 8000235c: 02a00793 li a5,42 + 80002360: 32f50e63 beq a0,a5,8000269c <_vsnprintf+0x588> + 80002364: 000b8613 mv a2,s7 + 80002368: 001b8b93 addi s7,s7,1 + 8000236c: eb1ff06f j 8000221c <_vsnprintf+0x108> + 80002370: 000d041b sext.w s0,s10 + 80002374: 018d6463 bltu s10,s8,8000237c <_vsnprintf+0x268> + 80002378: fffc0d13 addi s10,s8,-1 + 8000237c: 000c0693 mv a3,s8 + 80002380: 000d0613 mv a2,s10 + 80002384: 00048593 mv a1,s1 + 80002388: 00000513 li a0,0 + 8000238c: 000900e7 jalr s2 + 80002390: 09813083 ld ra,152(sp) + 80002394: 00040513 mv a0,s0 + 80002398: 09013403 ld s0,144(sp) + 8000239c: 08813483 ld s1,136(sp) + 800023a0: 08013903 ld s2,128(sp) + 800023a4: 07813983 ld s3,120(sp) + 800023a8: 07013a03 ld s4,112(sp) + 800023ac: 06813a83 ld s5,104(sp) + 800023b0: 06013b03 ld s6,96(sp) + 800023b4: 05813b83 ld s7,88(sp) + 800023b8: 05013c03 ld s8,80(sp) + 800023bc: 04813c83 ld s9,72(sp) + 800023c0: 04013d03 ld s10,64(sp) + 800023c4: 03813d83 ld s11,56(sp) + 800023c8: 0a010113 addi sp,sp,160 + 800023cc: 00008067 ret + 800023d0: 002c979b slliw a5,s9,0x2 + 800023d4: 019788bb addw a7,a5,s9 + 800023d8: 000b8813 mv a6,s7 + 800023dc: 0018989b slliw a7,a7,0x1 + 800023e0: 001b8b93 addi s7,s7,1 + 800023e4: 00a888bb addw a7,a7,a0 + 800023e8: 000bc503 lbu a0,0(s7) + 800023ec: fd088c9b addiw s9,a7,-48 + 800023f0: fd05079b addiw a5,a0,-48 + 800023f4: 0ff7f793 andi a5,a5,255 + 800023f8: fcf77ce3 bgeu a4,a5,800023d0 <_vsnprintf+0x2bc> + 800023fc: 000b8613 mv a2,s7 + 80002400: 00280b93 addi s7,a6,2 + 80002404: e19ff06f j 8000221c <_vsnprintf+0x108> + 80002408: 0009a783 lw a5,0(s3) + 8000240c: 00898993 addi s3,s3,8 + 80002410: 00078d9b sext.w s11,a5 + 80002414: 0007c863 bltz a5,80002424 <_vsnprintf+0x310> + 80002418: 001bc503 lbu a0,1(s7) + 8000241c: 002b8b93 addi s7,s7,2 + 80002420: df1ff06f j 80002210 <_vsnprintf+0xfc> + 80002424: 0025e593 ori a1,a1,2 + 80002428: 001bc503 lbu a0,1(s7) + 8000242c: 0005859b sext.w a1,a1 + 80002430: 40f00dbb negw s11,a5 + 80002434: 002b8b93 addi s7,s7,2 + 80002438: dd9ff06f j 80002210 <_vsnprintf+0xfc> + 8000243c: 07800793 li a5,120 + 80002440: 00898a93 addi s5,s3,8 + 80002444: 56f50063 beq a0,a5,800029a4 <_vsnprintf+0x890> + 80002448: 05800793 li a5,88 + 8000244c: 28f50463 beq a0,a5,800026d4 <_vsnprintf+0x5c0> + 80002450: 06f00793 li a5,111 + 80002454: 4af50c63 beq a0,a5,8000290c <_vsnprintf+0x7f8> + 80002458: 06200793 li a5,98 + 8000245c: 54f50063 beq a0,a5,8000299c <_vsnprintf+0x888> + 80002460: fef5ff13 andi t5,a1,-17 + 80002464: 4005f793 andi a5,a1,1024 + 80002468: 06900713 li a4,105 + 8000246c: 000f0f1b sext.w t5,t5 + 80002470: 0007879b sext.w a5,a5 + 80002474: 5ae51063 bne a0,a4,80002a14 <_vsnprintf+0x900> + 80002478: 48079663 bnez a5,80002904 <_vsnprintf+0x7f0> + 8000247c: 2005f593 andi a1,a1,512 + 80002480: 0005879b sext.w a5,a1 + 80002484: 00a00813 li a6,10 + 80002488: 42079663 bnez a5,800028b4 <_vsnprintf+0x7a0> + 8000248c: 100f7793 andi a5,t5,256 + 80002490: 000f0613 mv a2,t5 + 80002494: 4e079063 bnez a5,80002974 <_vsnprintf+0x860> + 80002498: 040f7713 andi a4,t5,64 + 8000249c: 0009a783 lw a5,0(s3) + 800024a0: 4a071a63 bnez a4,80002954 <_vsnprintf+0x840> + 800024a4: 08067613 andi a2,a2,128 + 800024a8: 52060a63 beqz a2,800029dc <_vsnprintf+0x8c8> + 800024ac: 0107979b slliw a5,a5,0x10 + 800024b0: 4107d79b sraiw a5,a5,0x10 + 800024b4: 40f7d61b sraiw a2,a5,0xf + 800024b8: 00c7c733 xor a4,a5,a2 + 800024bc: 40c7073b subw a4,a4,a2 + 800024c0: 03071713 slli a4,a4,0x30 + 800024c4: 03075713 srli a4,a4,0x30 + 800024c8: 000d0613 mv a2,s10 + 800024cc: 01e13423 sd t5,8(sp) + 800024d0: 01b13023 sd s11,0(sp) + 800024d4: 000c8893 mv a7,s9 + 800024d8: 01f7d79b srliw a5,a5,0x1f + 800024dc: 000c0693 mv a3,s8 + 800024e0: 00048593 mv a1,s1 + 800024e4: 00090513 mv a0,s2 + 800024e8: 96dff0ef jal ra,80001e54 <_ntoa_long> + 800024ec: 00050d13 mv s10,a0 + 800024f0: 000a8993 mv s3,s5 + 800024f4: cb5ff06f j 800021a8 <_vsnprintf+0x94> + 800024f8: 00164503 lbu a0,1(a2) + 800024fc: 06c00793 li a5,108 + 80002500: def510e3 bne a0,a5,800022e0 <_vsnprintf+0x1cc> + 80002504: 3005e593 ori a1,a1,768 + 80002508: 00264503 lbu a0,2(a2) + 8000250c: 0005859b sext.w a1,a1 + 80002510: 00360b93 addi s7,a2,3 + 80002514: d9dff06f j 800022b0 <_vsnprintf+0x19c> + 80002518: 00898793 addi a5,s3,8 + 8000251c: 001d0813 addi a6,s10,1 + 80002520: 0025f593 andi a1,a1,2 + 80002524: 02f13023 sd a5,32(sp) + 80002528: 00080b13 mv s6,a6 + 8000252c: 32058263 beqz a1,80002850 <_vsnprintf+0x73c> + 80002530: 0009c503 lbu a0,0(s3) + 80002534: 000c0693 mv a3,s8 + 80002538: 000d0613 mv a2,s10 + 8000253c: 00048593 mv a1,s1 + 80002540: 000900e7 jalr s2 + 80002544: 00100793 li a5,1 + 80002548: 43b7f063 bgeu a5,s11,80002968 <_vsnprintf+0x854> + 8000254c: ffed879b addiw a5,s11,-2 + 80002550: 02079a93 slli s5,a5,0x20 + 80002554: 020ada93 srli s5,s5,0x20 + 80002558: 002d0d13 addi s10,s10,2 + 8000255c: 015d0cb3 add s9,s10,s5 + 80002560: 000b0613 mv a2,s6 + 80002564: 000c0693 mv a3,s8 + 80002568: 001b0b13 addi s6,s6,1 + 8000256c: 00048593 mv a1,s1 + 80002570: 02000513 li a0,32 + 80002574: 000900e7 jalr s2 + 80002578: ff6c94e3 bne s9,s6,80002560 <_vsnprintf+0x44c> + 8000257c: 02013983 ld s3,32(sp) + 80002580: 015d0d33 add s10,s10,s5 + 80002584: c25ff06f j 800021a8 <_vsnprintf+0x94> + 80002588: 000d0613 mv a2,s10 + 8000258c: 000c0693 mv a3,s8 + 80002590: 00048593 mv a1,s1 + 80002594: 02500513 li a0,37 + 80002598: 001d0d13 addi s10,s10,1 + 8000259c: 000900e7 jalr s2 + 800025a0: c09ff06f j 800021a8 <_vsnprintf+0x94> + 800025a4: 0009ba83 ld s5,0(s3) + 800025a8: 00898793 addi a5,s3,8 + 800025ac: 02f13023 sd a5,32(sp) + 800025b0: 000ac503 lbu a0,0(s5) + 800025b4: 100c9663 bnez s9,800026c0 <_vsnprintf+0x5ac> + 800025b8: ffe00793 li a5,-2 + 800025bc: 42050863 beqz a0,800029ec <_vsnprintf+0x8d8> + 800025c0: 00178693 addi a3,a5,1 + 800025c4: 00da8633 add a2,s5,a3 + 800025c8: 000a8793 mv a5,s5 + 800025cc: 0080006f j 800025d4 <_vsnprintf+0x4c0> + 800025d0: 1ec78863 beq a5,a2,800027c0 <_vsnprintf+0x6ac> + 800025d4: 0017c703 lbu a4,1(a5) + 800025d8: 00178793 addi a5,a5,1 + 800025dc: fe071ae3 bnez a4,800025d0 <_vsnprintf+0x4bc> + 800025e0: 415787bb subw a5,a5,s5 + 800025e4: 00f13823 sd a5,16(sp) + 800025e8: 4005f793 andi a5,a1,1024 + 800025ec: 0007899b sext.w s3,a5 + 800025f0: 00078c63 beqz a5,80002608 <_vsnprintf+0x4f4> + 800025f4: 01013703 ld a4,16(sp) + 800025f8: 000c879b sext.w a5,s9 + 800025fc: 01977463 bgeu a4,s9,80002604 <_vsnprintf+0x4f0> + 80002600: 0007079b sext.w a5,a4 + 80002604: 00f13823 sd a5,16(sp) + 80002608: 0025f593 andi a1,a1,2 + 8000260c: 0005879b sext.w a5,a1 + 80002610: 02f13423 sd a5,40(sp) + 80002614: 1c058a63 beqz a1,800027e8 <_vsnprintf+0x6d4> + 80002618: 14050863 beqz a0,80002768 <_vsnprintf+0x654> + 8000261c: 000d0613 mv a2,s10 + 80002620: 00098863 beqz s3,80002630 <_vsnprintf+0x51c> + 80002624: fffc879b addiw a5,s9,-1 + 80002628: 120c8863 beqz s9,80002758 <_vsnprintf+0x644> + 8000262c: 00078c93 mv s9,a5 + 80002630: 000c0693 mv a3,s8 + 80002634: 00048593 mv a1,s1 + 80002638: 00160b13 addi s6,a2,1 + 8000263c: 000900e7 jalr s2 + 80002640: 41ab07b3 sub a5,s6,s10 + 80002644: 00fa87b3 add a5,s5,a5 + 80002648: 0007c503 lbu a0,0(a5) + 8000264c: 10050863 beqz a0,8000275c <_vsnprintf+0x648> + 80002650: 000b0613 mv a2,s6 + 80002654: fcdff06f j 80002620 <_vsnprintf+0x50c> + 80002658: 0009b703 ld a4,0(s3) + 8000265c: 0215e593 ori a1,a1,33 + 80002660: 0005859b sext.w a1,a1 + 80002664: 01000793 li a5,16 + 80002668: 000d0613 mv a2,s10 + 8000266c: 00b13423 sd a1,8(sp) + 80002670: 00f13023 sd a5,0(sp) + 80002674: 000c8893 mv a7,s9 + 80002678: 01000813 li a6,16 + 8000267c: 00000793 li a5,0 + 80002680: 000c0693 mv a3,s8 + 80002684: 00048593 mv a1,s1 + 80002688: 00090513 mv a0,s2 + 8000268c: 929ff0ef jal ra,80001fb4 <_ntoa_long_long> + 80002690: 00898993 addi s3,s3,8 + 80002694: 00050d13 mv s10,a0 + 80002698: b11ff06f j 800021a8 <_vsnprintf+0x94> + 8000269c: 0009a883 lw a7,0(s3) + 800026a0: 00264503 lbu a0,2(a2) + 800026a4: 00360b93 addi s7,a2,3 + 800026a8: fff8c793 not a5,a7 + 800026ac: 43f7d793 srai a5,a5,0x3f + 800026b0: 00f8fcb3 and s9,a7,a5 + 800026b4: 00898993 addi s3,s3,8 + 800026b8: 00260613 addi a2,a2,2 + 800026bc: b61ff06f j 8000221c <_vsnprintf+0x108> + 800026c0: 020c9793 slli a5,s9,0x20 + 800026c4: 0207d793 srli a5,a5,0x20 + 800026c8: 32050263 beqz a0,800029ec <_vsnprintf+0x8d8> + 800026cc: fff78793 addi a5,a5,-1 + 800026d0: ef1ff06f j 800025c0 <_vsnprintf+0x4ac> + 800026d4: ff35ff13 andi t5,a1,-13 + 800026d8: 000f0f1b sext.w t5,t5 + 800026dc: 4005f793 andi a5,a1,1024 + 800026e0: 020f6f13 ori t5,t5,32 + 800026e4: 20078863 beqz a5,800028f4 <_vsnprintf+0x7e0> + 800026e8: 01000813 li a6,16 + 800026ec: ffef7f13 andi t5,t5,-2 + 800026f0: 000f0f1b sext.w t5,t5 + 800026f4: 200f7793 andi a5,t5,512 + 800026f8: 06900713 li a4,105 + 800026fc: 0007879b sext.w a5,a5 + 80002700: d8e504e3 beq a0,a4,80002488 <_vsnprintf+0x374> + 80002704: 06400713 li a4,100 + 80002708: d8e500e3 beq a0,a4,80002488 <_vsnprintf+0x374> + 8000270c: 22079663 bnez a5,80002938 <_vsnprintf+0x824> + 80002710: 100f7793 andi a5,t5,256 + 80002714: 000f0713 mv a4,t5 + 80002718: 2a079463 bnez a5,800029c0 <_vsnprintf+0x8ac> + 8000271c: 040f7793 andi a5,t5,64 + 80002720: 24079063 bnez a5,80002960 <_vsnprintf+0x84c> + 80002724: 08077713 andi a4,a4,128 + 80002728: 2c070663 beqz a4,800029f4 <_vsnprintf+0x8e0> + 8000272c: 0009a703 lw a4,0(s3) + 80002730: 01813783 ld a5,24(sp) + 80002734: 00e7f733 and a4,a5,a4 + 80002738: 02071713 slli a4,a4,0x20 + 8000273c: 000d0613 mv a2,s10 + 80002740: 01e13423 sd t5,8(sp) + 80002744: 01b13023 sd s11,0(sp) + 80002748: 000c8893 mv a7,s9 + 8000274c: 00000793 li a5,0 + 80002750: 02075713 srli a4,a4,0x20 + 80002754: d89ff06f j 800024dc <_vsnprintf+0x3c8> + 80002758: 00060b13 mv s6,a2 + 8000275c: 02813783 ld a5,40(sp) + 80002760: 04078a63 beqz a5,800027b4 <_vsnprintf+0x6a0> + 80002764: 000b0d13 mv s10,s6 + 80002768: 01013703 ld a4,16(sp) + 8000276c: 0db77e63 bgeu a4,s11,80002848 <_vsnprintf+0x734> + 80002770: fffd879b addiw a5,s11,-1 + 80002774: 40e7873b subw a4,a5,a4 + 80002778: 02071713 slli a4,a4,0x20 + 8000277c: 02075713 srli a4,a4,0x20 + 80002780: 001d0813 addi a6,s10,1 + 80002784: 01070b33 add s6,a4,a6 + 80002788: 0080006f j 80002790 <_vsnprintf+0x67c> + 8000278c: 00180813 addi a6,a6,1 + 80002790: 000d0613 mv a2,s10 + 80002794: 01013823 sd a6,16(sp) + 80002798: 000c0693 mv a3,s8 + 8000279c: 00048593 mv a1,s1 + 800027a0: 02000513 li a0,32 + 800027a4: 00080d13 mv s10,a6 + 800027a8: 000900e7 jalr s2 + 800027ac: 01013803 ld a6,16(sp) + 800027b0: fd0b1ee3 bne s6,a6,8000278c <_vsnprintf+0x678> + 800027b4: 02013983 ld s3,32(sp) + 800027b8: 000b0d13 mv s10,s6 + 800027bc: 9edff06f j 800021a8 <_vsnprintf+0x94> + 800027c0: 0006879b sext.w a5,a3 + 800027c4: 00f13823 sd a5,16(sp) + 800027c8: e21ff06f j 800025e8 <_vsnprintf+0x4d4> + 800027cc: 0c05e593 ori a1,a1,192 + 800027d0: 00264503 lbu a0,2(a2) + 800027d4: 0005859b sext.w a1,a1 + 800027d8: 00360b93 addi s7,a2,3 + 800027dc: ad5ff06f j 800022b0 <_vsnprintf+0x19c> + 800027e0: 00000413 li s0,0 + 800027e4: b91ff06f j 80002374 <_vsnprintf+0x260> + 800027e8: 01013703 ld a4,16(sp) + 800027ec: 0017079b addiw a5,a4,1 + 800027f0: 21b77c63 bgeu a4,s11,80002a08 <_vsnprintf+0x8f4> + 800027f4: fffd879b addiw a5,s11,-1 + 800027f8: 40e787bb subw a5,a5,a4 + 800027fc: 02079793 slli a5,a5,0x20 + 80002800: 0207d793 srli a5,a5,0x20 + 80002804: 001d0813 addi a6,s10,1 + 80002808: 01078b33 add s6,a5,a6 + 8000280c: 00c0006f j 80002818 <_vsnprintf+0x704> + 80002810: 01013803 ld a6,16(sp) + 80002814: 00180813 addi a6,a6,1 + 80002818: 000d0613 mv a2,s10 + 8000281c: 000c0693 mv a3,s8 + 80002820: 00080d13 mv s10,a6 + 80002824: 01013823 sd a6,16(sp) + 80002828: 00048593 mv a1,s1 + 8000282c: 02000513 li a0,32 + 80002830: 000900e7 jalr s2 + 80002834: fd6d1ee3 bne s10,s6,80002810 <_vsnprintf+0x6fc> + 80002838: 000ac503 lbu a0,0(s5) + 8000283c: 001d879b addiw a5,s11,1 + 80002840: 00f13823 sd a5,16(sp) + 80002844: dc051ce3 bnez a0,8000261c <_vsnprintf+0x508> + 80002848: 000d0b13 mv s6,s10 + 8000284c: f69ff06f j 800027b4 <_vsnprintf+0x6a0> + 80002850: 00100793 li a5,1 + 80002854: 1bb7f463 bgeu a5,s11,800029fc <_vsnprintf+0x8e8> + 80002858: ffed879b addiw a5,s11,-2 + 8000285c: 02079a93 slli s5,a5,0x20 + 80002860: 020ada93 srli s5,s5,0x20 + 80002864: 010a8ab3 add s5,s5,a6 + 80002868: 00c0006f j 80002874 <_vsnprintf+0x760> + 8000286c: 01013803 ld a6,16(sp) + 80002870: 00180813 addi a6,a6,1 + 80002874: 000d0613 mv a2,s10 + 80002878: 000c0693 mv a3,s8 + 8000287c: 00080d13 mv s10,a6 + 80002880: 01013823 sd a6,16(sp) + 80002884: 00048593 mv a1,s1 + 80002888: 02000513 li a0,32 + 8000288c: 000900e7 jalr s2 + 80002890: fdaa9ee3 bne s5,s10,8000286c <_vsnprintf+0x758> + 80002894: 001a8d13 addi s10,s5,1 + 80002898: 0009c503 lbu a0,0(s3) + 8000289c: 000c0693 mv a3,s8 + 800028a0: 000a8613 mv a2,s5 + 800028a4: 00048593 mv a1,s1 + 800028a8: 000900e7 jalr s2 + 800028ac: 02013983 ld s3,32(sp) + 800028b0: 8f9ff06f j 800021a8 <_vsnprintf+0x94> + 800028b4: 0009b783 ld a5,0(s3) + 800028b8: 000d0613 mv a2,s10 + 800028bc: 01e13423 sd t5,8(sp) + 800028c0: 43f7d713 srai a4,a5,0x3f + 800028c4: 00f745b3 xor a1,a4,a5 + 800028c8: 01b13023 sd s11,0(sp) + 800028cc: 000c8893 mv a7,s9 + 800028d0: 03f7d793 srli a5,a5,0x3f + 800028d4: 40e58733 sub a4,a1,a4 + 800028d8: 000c0693 mv a3,s8 + 800028dc: 00048593 mv a1,s1 + 800028e0: 00090513 mv a0,s2 + 800028e4: ed0ff0ef jal ra,80001fb4 <_ntoa_long_long> + 800028e8: 00050d13 mv s10,a0 + 800028ec: 000a8993 mv s3,s5 + 800028f0: 8b9ff06f j 800021a8 <_vsnprintf+0x94> + 800028f4: 2005f793 andi a5,a1,512 + 800028f8: 0007879b sext.w a5,a5 + 800028fc: 01000813 li a6,16 + 80002900: e0dff06f j 8000270c <_vsnprintf+0x5f8> + 80002904: 00a00813 li a6,10 + 80002908: de5ff06f j 800026ec <_vsnprintf+0x5d8> + 8000290c: 00800813 li a6,8 + 80002910: 00058f13 mv t5,a1 + 80002914: 400f7713 andi a4,t5,1024 + 80002918: 06400613 li a2,100 + 8000291c: 000f0793 mv a5,t5 + 80002920: 0007071b sext.w a4,a4 + 80002924: 0ec51c63 bne a0,a2,80002a1c <_vsnprintf+0x908> + 80002928: dc0712e3 bnez a4,800026ec <_vsnprintf+0x5d8> + 8000292c: 2007f793 andi a5,a5,512 + 80002930: 0007879b sext.w a5,a5 + 80002934: b55ff06f j 80002488 <_vsnprintf+0x374> + 80002938: 0009b703 ld a4,0(s3) + 8000293c: 000d0613 mv a2,s10 + 80002940: 01e13423 sd t5,8(sp) + 80002944: 01b13023 sd s11,0(sp) + 80002948: 000c8893 mv a7,s9 + 8000294c: 00000793 li a5,0 + 80002950: f89ff06f j 800028d8 <_vsnprintf+0x7c4> + 80002954: 0ff7f793 andi a5,a5,255 + 80002958: 00078713 mv a4,a5 + 8000295c: b6dff06f j 800024c8 <_vsnprintf+0x3b4> + 80002960: 0009c703 lbu a4,0(s3) + 80002964: dd5ff06f j 80002738 <_vsnprintf+0x624> + 80002968: 02013983 ld s3,32(sp) + 8000296c: 000b0d13 mv s10,s6 + 80002970: 839ff06f j 800021a8 <_vsnprintf+0x94> + 80002974: 0009b783 ld a5,0(s3) + 80002978: 000d0613 mv a2,s10 + 8000297c: 01e13423 sd t5,8(sp) + 80002980: 43f7d713 srai a4,a5,0x3f + 80002984: 00f745b3 xor a1,a4,a5 + 80002988: 01b13023 sd s11,0(sp) + 8000298c: 000c8893 mv a7,s9 + 80002990: 03f7d793 srli a5,a5,0x3f + 80002994: 40e58733 sub a4,a1,a4 + 80002998: b45ff06f j 800024dc <_vsnprintf+0x3c8> + 8000299c: 00200813 li a6,2 + 800029a0: f71ff06f j 80002910 <_vsnprintf+0x7fc> + 800029a4: 4005f713 andi a4,a1,1024 + 800029a8: 0007071b sext.w a4,a4 + 800029ac: 01000813 li a6,16 + 800029b0: ff35f593 andi a1,a1,-13 + 800029b4: 00058f1b sext.w t5,a1 + 800029b8: d2071ae3 bnez a4,800026ec <_vsnprintf+0x5d8> + 800029bc: d39ff06f j 800026f4 <_vsnprintf+0x5e0> + 800029c0: 0009b703 ld a4,0(s3) + 800029c4: 000d0613 mv a2,s10 + 800029c8: 01e13423 sd t5,8(sp) + 800029cc: 01b13023 sd s11,0(sp) + 800029d0: 000c8893 mv a7,s9 + 800029d4: 00000793 li a5,0 + 800029d8: b05ff06f j 800024dc <_vsnprintf+0x3c8> + 800029dc: 41f7d61b sraiw a2,a5,0x1f + 800029e0: 00c7c733 xor a4,a5,a2 + 800029e4: 40c7073b subw a4,a4,a2 + 800029e8: ae1ff06f j 800024c8 <_vsnprintf+0x3b4> + 800029ec: 00013823 sd zero,16(sp) + 800029f0: bf9ff06f j 800025e8 <_vsnprintf+0x4d4> + 800029f4: 0009a703 lw a4,0(s3) + 800029f8: d41ff06f j 80002738 <_vsnprintf+0x624> + 800029fc: 000d0a93 mv s5,s10 + 80002a00: 00080d13 mv s10,a6 + 80002a04: e95ff06f j 80002898 <_vsnprintf+0x784> + 80002a08: 00f13823 sd a5,16(sp) + 80002a0c: c00518e3 bnez a0,8000261c <_vsnprintf+0x508> + 80002a10: e39ff06f j 80002848 <_vsnprintf+0x734> + 80002a14: 00a00813 li a6,10 + 80002a18: efdff06f j 80002914 <_vsnprintf+0x800> + 80002a1c: 000f0593 mv a1,t5 + 80002a20: f91ff06f j 800029b0 <_vsnprintf+0x89c> + +0000000080002a24 <_out_char>: + 80002a24: 00051463 bnez a0,80002a2c <_out_char+0x8> + 80002a28: 00008067 ret + 80002a2c: e68fe06f j 80001094 + +0000000080002a30 : + 80002a30: fa010113 addi sp,sp,-96 + 80002a34: 02810313 addi t1,sp,40 + 80002a38: 02b13423 sd a1,40(sp) + 80002a3c: 02c13823 sd a2,48(sp) + 80002a40: 02d13c23 sd a3,56(sp) + 80002a44: 04e13023 sd a4,64(sp) + 80002a48: 00050693 mv a3,a0 + 80002a4c: 00010593 mv a1,sp + 80002a50: 00030713 mv a4,t1 + 80002a54: fff00613 li a2,-1 + 80002a58: 00000517 auipc a0,0x0 + 80002a5c: fcc50513 addi a0,a0,-52 # 80002a24 <_out_char> + 80002a60: 00113c23 sd ra,24(sp) + 80002a64: 04f13423 sd a5,72(sp) + 80002a68: 05013823 sd a6,80(sp) + 80002a6c: 05113c23 sd a7,88(sp) + 80002a70: 00613423 sd t1,8(sp) + 80002a74: ea0ff0ef jal ra,80002114 <_vsnprintf> + 80002a78: 01813083 ld ra,24(sp) + 80002a7c: 06010113 addi sp,sp,96 + 80002a80: 00008067 ret + +0000000080002a84 : + 80002a84: 00300793 li a5,3 + 80002a88: 06c7f863 bgeu a5,a2,80002af8 + 80002a8c: 00054783 lbu a5,0(a0) + 80002a90: ffc67693 andi a3,a2,-4 + 80002a94: 0005c703 lbu a4,0(a1) + 80002a98: 00d506b3 add a3,a0,a3 + 80002a9c: 04078863 beqz a5,80002aec + 80002aa0: 0ae79463 bne a5,a4,80002b48 + 80002aa4: 00154783 lbu a5,1(a0) + 80002aa8: 0015c703 lbu a4,1(a1) + 80002aac: 04078063 beqz a5,80002aec + 80002ab0: 08e79c63 bne a5,a4,80002b48 + 80002ab4: 00254783 lbu a5,2(a0) + 80002ab8: 00450513 addi a0,a0,4 + 80002abc: 00458593 addi a1,a1,4 + 80002ac0: ffe5c703 lbu a4,-2(a1) + 80002ac4: 02078463 beqz a5,80002aec + 80002ac8: 08e79063 bne a5,a4,80002b48 + 80002acc: fff54703 lbu a4,-1(a0) + 80002ad0: fff5c783 lbu a5,-1(a1) + 80002ad4: 04070a63 beqz a4,80002b28 + 80002ad8: 04f71e63 bne a4,a5,80002b34 + 80002adc: 06d50c63 beq a0,a3,80002b54 + 80002ae0: 00054783 lbu a5,0(a0) + 80002ae4: 0005c703 lbu a4,0(a1) + 80002ae8: fa079ce3 bnez a5,80002aa0 + 80002aec: 00000793 li a5,0 + 80002af0: 40e7853b subw a0,a5,a4 + 80002af4: 00008067 ret + 80002af8: 00000793 li a5,0 + 80002afc: 00000713 li a4,0 + 80002b00: 04060063 beqz a2,80002b40 + 80002b04: 00c50633 add a2,a0,a2 + 80002b08: 00c0006f j 80002b14 + 80002b0c: 02f71463 bne a4,a5,80002b34 + 80002b10: 02a60863 beq a2,a0,80002b40 + 80002b14: 00054703 lbu a4,0(a0) + 80002b18: 00158593 addi a1,a1,1 + 80002b1c: 00150513 addi a0,a0,1 + 80002b20: fff5c783 lbu a5,-1(a1) + 80002b24: fe0714e3 bnez a4,80002b0c + 80002b28: 00000513 li a0,0 + 80002b2c: 40f5053b subw a0,a0,a5 + 80002b30: 00008067 ret + 80002b34: 0007051b sext.w a0,a4 + 80002b38: 40f5053b subw a0,a0,a5 + 80002b3c: 00008067 ret + 80002b40: 40f7053b subw a0,a4,a5 + 80002b44: 00008067 ret + 80002b48: 0007879b sext.w a5,a5 + 80002b4c: 40e7853b subw a0,a5,a4 + 80002b50: 00008067 ret + 80002b54: 00367613 andi a2,a2,3 + 80002b58: fa9ff06f j 80002b00 + +0000000080002b5c : + 80002b5c: 00700713 li a4,7 + 80002b60: 00050793 mv a5,a0 + 80002b64: 0ac77a63 bgeu a4,a2,80002c18 + 80002b68: 0ff5f893 andi a7,a1,255 + 80002b6c: 00889693 slli a3,a7,0x8 + 80002b70: 0116e6b3 or a3,a3,a7 + 80002b74: 01069713 slli a4,a3,0x10 + 80002b78: 00d766b3 or a3,a4,a3 + 80002b7c: 02069713 slli a4,a3,0x20 + 80002b80: 00757813 andi a6,a0,7 + 80002b84: 00d76733 or a4,a4,a3 + 80002b88: 0a080663 beqz a6,80002c34 + 80002b8c: 00c50633 add a2,a0,a2 + 80002b90: 01178023 sb a7,0(a5) + 80002b94: 00178793 addi a5,a5,1 + 80002b98: 0077f813 andi a6,a5,7 + 80002b9c: 40f606b3 sub a3,a2,a5 + 80002ba0: fe0818e3 bnez a6,80002b90 + 80002ba4: 0066d813 srli a6,a3,0x6 + 80002ba8: 04080063 beqz a6,80002be8 + 80002bac: 00681613 slli a2,a6,0x6 + 80002bb0: 00078893 mv a7,a5 + 80002bb4: 00f60633 add a2,a2,a5 + 80002bb8: 00e7b023 sd a4,0(a5) + 80002bbc: 00e7b423 sd a4,8(a5) + 80002bc0: 00e7b823 sd a4,16(a5) + 80002bc4: 00e7bc23 sd a4,24(a5) + 80002bc8: 02e7b023 sd a4,32(a5) + 80002bcc: 02e7b423 sd a4,40(a5) + 80002bd0: 02e7b823 sd a4,48(a5) + 80002bd4: 02e7bc23 sd a4,56(a5) + 80002bd8: 04078793 addi a5,a5,64 + 80002bdc: fcf61ee3 bne a2,a5,80002bb8 + 80002be0: 00681793 slli a5,a6,0x6 + 80002be4: 011787b3 add a5,a5,a7 + 80002be8: 0036d813 srli a6,a3,0x3 + 80002bec: 00787813 andi a6,a6,7 + 80002bf0: 02080263 beqz a6,80002c14 + 80002bf4: 00381613 slli a2,a6,0x3 + 80002bf8: 00078893 mv a7,a5 + 80002bfc: 00f60633 add a2,a2,a5 + 80002c00: 00e7b023 sd a4,0(a5) + 80002c04: 00878793 addi a5,a5,8 + 80002c08: fef61ce3 bne a2,a5,80002c00 + 80002c0c: 00381793 slli a5,a6,0x3 + 80002c10: 011787b3 add a5,a5,a7 + 80002c14: 0076f613 andi a2,a3,7 + 80002c18: 0ff5f593 andi a1,a1,255 + 80002c1c: 00c78733 add a4,a5,a2 + 80002c20: 00060863 beqz a2,80002c30 + 80002c24: 00b78023 sb a1,0(a5) + 80002c28: 00178793 addi a5,a5,1 + 80002c2c: fef71ce3 bne a4,a5,80002c24 + 80002c30: 00008067 ret + 80002c34: 00060693 mv a3,a2 + 80002c38: f6dff06f j 80002ba4 + +0000000080002c3c : + 80002c3c: fd010113 addi sp,sp,-48 + 80002c40: 02813023 sd s0,32(sp) + 80002c44: 01213823 sd s2,16(sp) + 80002c48: 02113423 sd ra,40(sp) + 80002c4c: 00913c23 sd s1,24(sp) + 80002c50: 01313423 sd s3,8(sp) + 80002c54: 00f00793 li a5,15 + 80002c58: 00050913 mv s2,a0 + 80002c5c: 00050713 mv a4,a0 + 80002c60: 00058413 mv s0,a1 + 80002c64: 04c7fe63 bgeu a5,a2,80002cc0 + 80002c68: 40a00533 neg a0,a0 + 80002c6c: 00757513 andi a0,a0,7 + 80002c70: 40a604b3 sub s1,a2,a0 + 80002c74: 08050e63 beqz a0,80002d10 + 80002c78: 012509b3 add s3,a0,s2 + 80002c7c: 00058793 mv a5,a1 + 80002c80: 0007c683 lbu a3,0(a5) + 80002c84: 00170713 addi a4,a4,1 + 80002c88: 00178793 addi a5,a5,1 + 80002c8c: fed70fa3 sb a3,-1(a4) + 80002c90: fee998e3 bne s3,a4,80002c80 + 80002c94: 00a58433 add s0,a1,a0 + 80002c98: 00747793 andi a5,s0,7 + 80002c9c: 0034d613 srli a2,s1,0x3 + 80002ca0: 00040593 mv a1,s0 + 80002ca4: 00098513 mv a0,s3 + 80002ca8: 06079063 bnez a5,80002d08 + 80002cac: 240000ef jal ra,80002eec <_wordcopy_fwd_aligned> + 80002cb0: ff84f713 andi a4,s1,-8 + 80002cb4: 00e40433 add s0,s0,a4 + 80002cb8: 0074f613 andi a2,s1,7 + 80002cbc: 01370733 add a4,a4,s3 + 80002cc0: fff70713 addi a4,a4,-1 + 80002cc4: 00040793 mv a5,s0 + 80002cc8: 008605b3 add a1,a2,s0 + 80002ccc: 40870733 sub a4,a4,s0 + 80002cd0: 00060c63 beqz a2,80002ce8 + 80002cd4: 0007c603 lbu a2,0(a5) + 80002cd8: 00178793 addi a5,a5,1 + 80002cdc: 00f706b3 add a3,a4,a5 + 80002ce0: 00c68023 sb a2,0(a3) + 80002ce4: fef598e3 bne a1,a5,80002cd4 + 80002ce8: 02813083 ld ra,40(sp) + 80002cec: 02013403 ld s0,32(sp) + 80002cf0: 01813483 ld s1,24(sp) + 80002cf4: 00813983 ld s3,8(sp) + 80002cf8: 00090513 mv a0,s2 + 80002cfc: 01013903 ld s2,16(sp) + 80002d00: 03010113 addi sp,sp,48 + 80002d04: 00008067 ret + 80002d08: 32c000ef jal ra,80003034 <_wordcopy_fwd_dest_aligned> + 80002d0c: fa5ff06f j 80002cb0 + 80002d10: 00090993 mv s3,s2 + 80002d14: f85ff06f j 80002c98 + +0000000080002d18 : + 80002d18: 1a050e63 beqz a0,80002ed4 + 80002d1c: fd010113 addi sp,sp,-48 + 80002d20: 02813023 sd s0,32(sp) + 80002d24: 00913c23 sd s1,24(sp) + 80002d28: 01f57793 andi a5,a0,31 + 80002d2c: 02113423 sd ra,40(sp) + 80002d30: 01213823 sd s2,16(sp) + 80002d34: 01313423 sd s3,8(sp) + 80002d38: 01413023 sd s4,0(sp) + 80002d3c: 00050493 mv s1,a0 + 80002d40: 00050413 mv s0,a0 + 80002d44: 00000513 li a0,0 + 80002d48: 14079a63 bnez a5,80002e9c + 80002d4c: 27f00713 li a4,639 + 80002d50: 00058913 mv s2,a1 + 80002d54: 00078513 mv a0,a5 + 80002d58: 14b77263 bgeu a4,a1,80002e9c + 80002d5c: 0074f513 andi a0,s1,7 + 80002d60: 00153513 seqz a0,a0 + 80002d64: 00060a13 mv s4,a2 + 80002d68: 00068993 mv s3,a3 + 80002d6c: b40fe0ef jal ra,800010ac <_assert> + 80002d70: 20048793 addi a5,s1,512 + 80002d74: 2004b023 sd zero,512(s1) + 80002d78: 2144b423 sd s4,520(s1) + 80002d7c: 2134b823 sd s3,528(s1) + 80002d80: 00043023 sd zero,0(s0) + 80002d84: 00840413 addi s0,s0,8 + 80002d88: fe879ce3 bne a5,s0,80002d80 + 80002d8c: fff00793 li a5,-1 + 80002d90: dc090413 addi s0,s2,-576 + 80002d94: 03f79793 slli a5,a5,0x3f + 80002d98: 1287f863 bgeu a5,s0,80002ec8 + 80002d9c: 00078413 mv s0,a5 + 80002da0: 00100513 li a0,1 + 80002da4: b08fe0ef jal ra,800010ac <_assert> + 80002da8: f8300793 li a5,-125 + 80002dac: 0017d793 srli a5,a5,0x1 + 80002db0: fc040513 addi a0,s0,-64 + 80002db4: 00f53533 sltu a0,a0,a5 + 80002db8: af4fe0ef jal ra,800010ac <_assert> + 80002dbc: 01f4f513 andi a0,s1,31 + 80002dc0: 00153513 seqz a0,a0 + 80002dc4: ae8fe0ef jal ra,800010ac <_assert> + 80002dc8: 00100513 li a0,1 + 80002dcc: 2404b023 sd zero,576(s1) + 80002dd0: 2404b423 sd zero,584(s1) + 80002dd4: 2484b823 sd s0,592(s1) + 80002dd8: 24048c23 sb zero,600(s1) + 80002ddc: 2604b023 sd zero,608(s1) + 80002de0: 2604b423 sd zero,616(s1) + 80002de4: ac8fe0ef jal ra,800010ac <_assert> + 80002de8: 00100513 li a0,1 + 80002dec: ac0fe0ef jal ra,800010ac <_assert> + 80002df0: 2504b503 ld a0,592(s1) + 80002df4: 24048a13 addi s4,s1,576 + 80002df8: 04053513 sltiu a0,a0,64 + 80002dfc: 00154513 xori a0,a0,1 + 80002e00: 00157513 andi a0,a0,1 + 80002e04: aa8fe0ef jal ra,800010ac <_assert> + 80002e08: 2504b503 ld a0,592(s1) + 80002e0c: 03f57513 andi a0,a0,63 + 80002e10: 00153513 seqz a0,a0 + 80002e14: a98fe0ef jal ra,800010ac <_assert> + 80002e18: 2504b703 ld a4,592(s1) + 80002e1c: 00100793 li a5,1 + 80002e20: 00675713 srli a4,a4,0x6 + 80002e24: 0ae7fc63 bgeu a5,a4,80002edc + 80002e28: 00000793 li a5,0 + 80002e2c: 00100693 li a3,1 + 80002e30: 0017879b addiw a5,a5,1 + 80002e34: 00175713 srli a4,a4,0x1 + 80002e38: 0ff7f793 andi a5,a5,255 + 80002e3c: fed71ae3 bne a4,a3,80002e30 + 80002e40: 00078993 mv s3,a5 + 80002e44: 0407b513 sltiu a0,a5,64 + 80002e48: 00f71933 sll s2,a4,a5 + 80002e4c: a60fe0ef jal ra,800010ac <_assert> + 80002e50: 00399793 slli a5,s3,0x3 + 80002e54: 00f487b3 add a5,s1,a5 + 80002e58: 0007b703 ld a4,0(a5) + 80002e5c: 2604b423 sd zero,616(s1) + 80002e60: 26e4b023 sd a4,608(s1) + 80002e64: 00070463 beqz a4,80002e6c + 80002e68: 03473423 sd s4,40(a4) + 80002e6c: 0147b023 sd s4,0(a5) + 80002e70: 2004b503 ld a0,512(s1) + 80002e74: 00a96533 or a0,s2,a0 + 80002e78: 20a4b023 sd a0,512(s1) + 80002e7c: 00a03533 snez a0,a0 + 80002e80: a2cfe0ef jal ra,800010ac <_assert> + 80002e84: 00048513 mv a0,s1 + 80002e88: 2084bc23 sd s0,536(s1) + 80002e8c: 2204b023 sd zero,544(s1) + 80002e90: 2204b423 sd zero,552(s1) + 80002e94: 2204b823 sd zero,560(s1) + 80002e98: 2204bc23 sd zero,568(s1) + 80002e9c: 02813083 ld ra,40(sp) + 80002ea0: 02013403 ld s0,32(sp) + 80002ea4: 01813483 ld s1,24(sp) + 80002ea8: 01013903 ld s2,16(sp) + 80002eac: 00813983 ld s3,8(sp) + 80002eb0: 00013a03 ld s4,0(sp) + 80002eb4: 03010113 addi sp,sp,48 + 80002eb8: 00008067 ret + 80002ebc: 00100513 li a0,1 + 80002ec0: fff40413 addi s0,s0,-1 + 80002ec4: 9e8fe0ef jal ra,800010ac <_assert> + 80002ec8: 03f47793 andi a5,s0,63 + 80002ecc: fe0798e3 bnez a5,80002ebc + 80002ed0: ed1ff06f j 80002da0 + 80002ed4: 00000513 li a0,0 + 80002ed8: 00008067 ret + 80002edc: 00100913 li s2,1 + 80002ee0: 00000993 li s3,0 + 80002ee4: 00100513 li a0,1 + 80002ee8: f65ff06f j 80002e4c + +0000000080002eec <_wordcopy_fwd_aligned>: + 80002eec: 00767793 andi a5,a2,7 + 80002ef0: 00002717 auipc a4,0x2 + 80002ef4: 80470713 addi a4,a4,-2044 # 800046f4 + 80002ef8: 00279793 slli a5,a5,0x2 + 80002efc: 00e787b3 add a5,a5,a4 + 80002f00: 0007a783 lw a5,0(a5) + 80002f04: 00e787b3 add a5,a5,a4 + 80002f08: 00078067 jr a5 + 80002f0c: 0005b703 ld a4,0(a1) + 80002f10: ff050793 addi a5,a0,-16 + 80002f14: ff858593 addi a1,a1,-8 + 80002f18: 00160613 addi a2,a2,1 + 80002f1c: 0105b803 ld a6,16(a1) + 80002f20: 01878693 addi a3,a5,24 + 80002f24: 00e53023 sd a4,0(a0) + 80002f28: 0185b703 ld a4,24(a1) + 80002f2c: 02078513 addi a0,a5,32 + 80002f30: 0106b023 sd a6,0(a3) + 80002f34: 0205b803 ld a6,32(a1) + 80002f38: 02878693 addi a3,a5,40 + 80002f3c: 00e53023 sd a4,0(a0) + 80002f40: 0285b703 ld a4,40(a1) + 80002f44: 03078513 addi a0,a5,48 + 80002f48: 0106b023 sd a6,0(a3) + 80002f4c: 0305b803 ld a6,48(a1) + 80002f50: 03878693 addi a3,a5,56 + 80002f54: 00e53023 sd a4,0(a0) + 80002f58: 0385b703 ld a4,56(a1) + 80002f5c: 04078793 addi a5,a5,64 + 80002f60: 0106b023 sd a6,0(a3) + 80002f64: ff860613 addi a2,a2,-8 + 80002f68: 00078513 mv a0,a5 + 80002f6c: 04058593 addi a1,a1,64 + 80002f70: 02060063 beqz a2,80002f90 <_wordcopy_fwd_aligned+0xa4> + 80002f74: 0005b803 ld a6,0(a1) + 80002f78: 00878693 addi a3,a5,8 + 80002f7c: 00e53023 sd a4,0(a0) + 80002f80: 0085b703 ld a4,8(a1) + 80002f84: 01078513 addi a0,a5,16 + 80002f88: 0106b023 sd a6,0(a3) + 80002f8c: f91ff06f j 80002f1c <_wordcopy_fwd_aligned+0x30> + 80002f90: 00e53023 sd a4,0(a0) + 80002f94: 00008067 ret + 80002f98: fff60613 addi a2,a2,-1 + 80002f9c: 0005b703 ld a4,0(a1) + 80002fa0: fe0608e3 beqz a2,80002f90 <_wordcopy_fwd_aligned+0xa4> + 80002fa4: 00858593 addi a1,a1,8 + 80002fa8: 00050793 mv a5,a0 + 80002fac: fc9ff06f j 80002f74 <_wordcopy_fwd_aligned+0x88> + 80002fb0: 0005b803 ld a6,0(a1) + 80002fb4: 00050693 mv a3,a0 + 80002fb8: fd058593 addi a1,a1,-48 + 80002fbc: fc850793 addi a5,a0,-56 + 80002fc0: 00660613 addi a2,a2,6 + 80002fc4: f95ff06f j 80002f58 <_wordcopy_fwd_aligned+0x6c> + 80002fc8: 0005b703 ld a4,0(a1) + 80002fcc: fd050793 addi a5,a0,-48 + 80002fd0: fd858593 addi a1,a1,-40 + 80002fd4: 00560613 addi a2,a2,5 + 80002fd8: f75ff06f j 80002f4c <_wordcopy_fwd_aligned+0x60> + 80002fdc: 0005b803 ld a6,0(a1) + 80002fe0: 00050693 mv a3,a0 + 80002fe4: fe058593 addi a1,a1,-32 + 80002fe8: fd850793 addi a5,a0,-40 + 80002fec: 00460613 addi a2,a2,4 + 80002ff0: f51ff06f j 80002f40 <_wordcopy_fwd_aligned+0x54> + 80002ff4: 0005b703 ld a4,0(a1) + 80002ff8: fe050793 addi a5,a0,-32 + 80002ffc: fe858593 addi a1,a1,-24 + 80003000: 00360613 addi a2,a2,3 + 80003004: f31ff06f j 80002f34 <_wordcopy_fwd_aligned+0x48> + 80003008: 0005b803 ld a6,0(a1) + 8000300c: 00050693 mv a3,a0 + 80003010: ff058593 addi a1,a1,-16 + 80003014: fe850793 addi a5,a0,-24 + 80003018: 00260613 addi a2,a2,2 + 8000301c: f0dff06f j 80002f28 <_wordcopy_fwd_aligned+0x3c> + 80003020: f6060ae3 beqz a2,80002f94 <_wordcopy_fwd_aligned+0xa8> + 80003024: 0005b803 ld a6,0(a1) + 80003028: 00050693 mv a3,a0 + 8000302c: ff850793 addi a5,a0,-8 + 80003030: f51ff06f j 80002f80 <_wordcopy_fwd_aligned+0x94> + +0000000080003034 <_wordcopy_fwd_dest_aligned>: + 80003034: 0075f713 andi a4,a1,7 + 80003038: 0037179b slliw a5,a4,0x3 + 8000303c: 00371313 slli t1,a4,0x3 + 80003040: 00367693 andi a3,a2,3 + 80003044: 04000713 li a4,64 + 80003048: 00200813 li a6,2 + 8000304c: 40f707bb subw a5,a4,a5 + 80003050: ff85f593 andi a1,a1,-8 + 80003054: 0d068e63 beq a3,a6,80003130 <_wordcopy_fwd_dest_aligned+0xfc> + 80003058: 00300713 li a4,3 + 8000305c: 02e68c63 beq a3,a4,80003094 <_wordcopy_fwd_dest_aligned+0x60> + 80003060: 00100713 li a4,1 + 80003064: 00e68663 beq a3,a4,80003070 <_wordcopy_fwd_dest_aligned+0x3c> + 80003068: 0e061863 bnez a2,80003158 <_wordcopy_fwd_dest_aligned+0x124> + 8000306c: 00008067 ret + 80003070: fff60613 addi a2,a2,-1 + 80003074: 0005b703 ld a4,0(a1) + 80003078: 0085b803 ld a6,8(a1) + 8000307c: 0c061863 bnez a2,8000314c <_wordcopy_fwd_dest_aligned+0x118> + 80003080: 00675733 srl a4,a4,t1 + 80003084: 00f817b3 sll a5,a6,a5 + 80003088: 00f76733 or a4,a4,a5 + 8000308c: 00e53023 sd a4,0(a0) + 80003090: 00008067 ret + 80003094: 0005b703 ld a4,0(a1) + 80003098: 0085b683 ld a3,8(a1) + 8000309c: 00058893 mv a7,a1 + 800030a0: 00160613 addi a2,a2,1 + 800030a4: ff050593 addi a1,a0,-16 + 800030a8: 0340006f j 800030dc <_wordcopy_fwd_dest_aligned+0xa8> + 800030ac: 006756b3 srl a3,a4,t1 + 800030b0: 00f81733 sll a4,a6,a5 + 800030b4: 00e6e6b3 or a3,a3,a4 + 800030b8: 00858e13 addi t3,a1,8 + 800030bc: 0008b703 ld a4,0(a7) + 800030c0: 00d53023 sd a3,0(a0) + 800030c4: 00f716b3 sll a3,a4,a5 + 800030c8: 00685833 srl a6,a6,t1 + 800030cc: 00d86833 or a6,a6,a3 + 800030d0: 01058513 addi a0,a1,16 + 800030d4: 0088b683 ld a3,8(a7) + 800030d8: 010e3023 sd a6,0(t3) + 800030dc: 00675733 srl a4,a4,t1 + 800030e0: 00f69833 sll a6,a3,a5 + 800030e4: 01076833 or a6,a4,a6 + 800030e8: 01858e13 addi t3,a1,24 + 800030ec: 0108b703 ld a4,16(a7) + 800030f0: 01053023 sd a6,0(a0) + 800030f4: 00f71533 sll a0,a4,a5 + 800030f8: 0066d6b3 srl a3,a3,t1 + 800030fc: 00a6e6b3 or a3,a3,a0 + 80003100: 0188b803 ld a6,24(a7) + 80003104: 02058593 addi a1,a1,32 + 80003108: 00de3023 sd a3,0(t3) + 8000310c: ffc60613 addi a2,a2,-4 + 80003110: 00058513 mv a0,a1 + 80003114: 02088893 addi a7,a7,32 + 80003118: f8061ae3 bnez a2,800030ac <_wordcopy_fwd_dest_aligned+0x78> + 8000311c: 00675733 srl a4,a4,t1 + 80003120: 00f817b3 sll a5,a6,a5 + 80003124: 00f76733 or a4,a4,a5 + 80003128: 00e53023 sd a4,0(a0) + 8000312c: f65ff06f j 80003090 <_wordcopy_fwd_dest_aligned+0x5c> + 80003130: 0005b683 ld a3,0(a1) + 80003134: 0085b703 ld a4,8(a1) + 80003138: ff858893 addi a7,a1,-8 + 8000313c: 00050e13 mv t3,a0 + 80003140: fe850593 addi a1,a0,-24 + 80003144: 00260613 addi a2,a2,2 + 80003148: fadff06f j 800030f4 <_wordcopy_fwd_dest_aligned+0xc0> + 8000314c: 01058893 addi a7,a1,16 + 80003150: 00050593 mv a1,a0 + 80003154: f59ff06f j 800030ac <_wordcopy_fwd_dest_aligned+0x78> + 80003158: 0005b803 ld a6,0(a1) + 8000315c: 0085b703 ld a4,8(a1) + 80003160: 00858893 addi a7,a1,8 + 80003164: 00050e13 mv t3,a0 + 80003168: ff850593 addi a1,a0,-8 + 8000316c: f59ff06f j 800030c4 <_wordcopy_fwd_dest_aligned+0x90> diff --git a/bin/non-output/coremark/coremark.elf b/bin/non-output/coremark/coremark.elf new file mode 100755 index 0000000000000000000000000000000000000000..97f63b61488c0b199bc4491bfeb26e019d25d74d GIT binary patch literal 167632 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 aIQFl6Yg*b_ZkPXizr*=|-pSzHn*RYkmttK2 literal 0 HcmV?d00001 diff --git a/bin/non-output/coremark/coremark.txt b/bin/non-output/coremark/coremark.txt new file mode 100755 index 0000000..2f8b5a6 --- /dev/null +++ b/bin/non-output/coremark/coremark.txt @@ -0,0 +1,3909 @@ + +/home/hzb/test/am-kernels/benchmarks/coremark/build/coremark-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 0000d117 auipc sp,0xd + 80000008: ffc10113 addi sp,sp,-4 # 8000d000 <_end> + 8000000c: 25c020ef jal ra,80002268 <_trm_init> + +0000000080000010 : + 80000010: 00060a63 beqz a2,80000024 + 80000014: 00251503 lh a0,2(a0) + 80000018: 00259783 lh a5,2(a1) + 8000001c: 40f5053b subw a0,a0,a5 + 80000020: 00008067 ret + 80000024: 00051783 lh a5,0(a0) + 80000028: 0087d713 srli a4,a5,0x8 + 8000002c: 0ff77713 andi a4,a4,255 + 80000030: f007f793 andi a5,a5,-256 + 80000034: 00e7e7b3 or a5,a5,a4 + 80000038: 00f51023 sh a5,0(a0) + 8000003c: 00059783 lh a5,0(a1) + 80000040: 00251503 lh a0,2(a0) + 80000044: 0087d713 srli a4,a5,0x8 + 80000048: 0ff77713 andi a4,a4,255 + 8000004c: f007f793 andi a5,a5,-256 + 80000050: 00e7e7b3 or a5,a5,a4 + 80000054: 00f59023 sh a5,0(a1) + 80000058: 00259783 lh a5,2(a1) + 8000005c: 40f5053b subw a0,a0,a5 + 80000060: 00008067 ret + +0000000080000064 : + 80000064: fd010113 addi sp,sp,-48 + 80000068: 02813023 sd s0,32(sp) + 8000006c: 00051403 lh s0,0(a0) + 80000070: 02113423 sd ra,40(sp) + 80000074: 00913c23 sd s1,24(sp) + 80000078: 4074579b sraiw a5,s0,0x7 + 8000007c: 01213823 sd s2,16(sp) + 80000080: 01313423 sd s3,8(sp) + 80000084: 0017f793 andi a5,a5,1 + 80000088: 02078263 beqz a5,800000ac + 8000008c: 02813083 ld ra,40(sp) + 80000090: 07f47513 andi a0,s0,127 + 80000094: 02013403 ld s0,32(sp) + 80000098: 01813483 ld s1,24(sp) + 8000009c: 01013903 ld s2,16(sp) + 800000a0: 00813983 ld s3,8(sp) + 800000a4: 03010113 addi sp,sp,48 + 800000a8: 00008067 ret + 800000ac: 00058493 mv s1,a1 + 800000b0: 4034559b sraiw a1,s0,0x3 + 800000b4: 00f5f593 andi a1,a1,15 + 800000b8: 00459713 slli a4,a1,0x4 + 800000bc: 00747693 andi a3,s0,7 + 800000c0: 0604d783 lhu a5,96(s1) + 800000c4: 00050993 mv s3,a0 + 800000c8: 00b765b3 or a1,a4,a1 + 800000cc: 08068063 beqz a3,8000014c + 800000d0: 00100713 li a4,1 + 800000d4: 04e68863 beq a3,a4,80000124 + 800000d8: 03041513 slli a0,s0,0x30 + 800000dc: 03055513 srli a0,a0,0x30 + 800000e0: 00040913 mv s2,s0 + 800000e4: 00078593 mv a1,a5 + 800000e8: 730000ef jal ra,80000818 + 800000ec: 00050793 mv a5,a0 + 800000f0: f0047413 andi s0,s0,-256 + 800000f4: 07f97513 andi a0,s2,127 + 800000f8: 00856433 or s0,a0,s0 + 800000fc: 06f49023 sh a5,96(s1) + 80000100: 08046413 ori s0,s0,128 + 80000104: 00899023 sh s0,0(s3) + 80000108: 02813083 ld ra,40(sp) + 8000010c: 02013403 ld s0,32(sp) + 80000110: 01813483 ld s1,24(sp) + 80000114: 01013903 ld s2,16(sp) + 80000118: 00813983 ld s3,8(sp) + 8000011c: 03010113 addi sp,sp,48 + 80000120: 00008067 ret + 80000124: 00078613 mv a2,a5 + 80000128: 04048513 addi a0,s1,64 + 8000012c: 158010ef jal ra,80001284 + 80000130: 0644d783 lhu a5,100(s1) + 80000134: 0105191b slliw s2,a0,0x10 + 80000138: 4109591b sraiw s2,s2,0x10 + 8000013c: 04079a63 bnez a5,80000190 + 80000140: 0604d783 lhu a5,96(s1) + 80000144: 06a49223 sh a0,100(s1) + 80000148: f9dff06f j 800000e4 + 8000014c: 02200693 li a3,34 + 80000150: 00058713 mv a4,a1 + 80000154: 00d5d463 bge a1,a3,8000015c + 80000158: 02200713 li a4,34 + 8000015c: 00249683 lh a3,2(s1) + 80000160: 00049603 lh a2,0(s1) + 80000164: 0204b583 ld a1,32(s1) + 80000168: 0284a503 lw a0,40(s1) + 8000016c: 0ff77713 andi a4,a4,255 + 80000170: 608010ef jal ra,80001778 + 80000174: 0664d783 lhu a5,102(s1) + 80000178: 0105191b slliw s2,a0,0x10 + 8000017c: 4109591b sraiw s2,s2,0x10 + 80000180: 00079863 bnez a5,80000190 + 80000184: 0604d783 lhu a5,96(s1) + 80000188: 06a49323 sh a0,102(s1) + 8000018c: f59ff06f j 800000e4 + 80000190: 0604d783 lhu a5,96(s1) + 80000194: f51ff06f j 800000e4 + +0000000080000198 : + 80000198: fe010113 addi sp,sp,-32 + 8000019c: 00913423 sd s1,8(sp) + 800001a0: 00058493 mv s1,a1 + 800001a4: 00060593 mv a1,a2 + 800001a8: 00113c23 sd ra,24(sp) + 800001ac: 00813823 sd s0,16(sp) + 800001b0: 00060413 mv s0,a2 + 800001b4: eb1ff0ef jal ra,80000064 + 800001b8: 00050793 mv a5,a0 + 800001bc: 00040593 mv a1,s0 + 800001c0: 00048513 mv a0,s1 + 800001c4: 00078413 mv s0,a5 + 800001c8: e9dff0ef jal ra,80000064 + 800001cc: 01813083 ld ra,24(sp) + 800001d0: 40a4053b subw a0,s0,a0 + 800001d4: 01013403 ld s0,16(sp) + 800001d8: 00813483 ld s1,8(sp) + 800001dc: 02010113 addi sp,sp,32 + 800001e0: 00008067 ret + +00000000800001e4 : + 800001e4: 00259703 lh a4,2(a1) + 800001e8: 02074263 bltz a4,8000020c + 800001ec: 00051863 bnez a0,800001fc + 800001f0: 0480006f j 80000238 + 800001f4: 00053503 ld a0,0(a0) + 800001f8: 02050c63 beqz a0,80000230 + 800001fc: 00853783 ld a5,8(a0) + 80000200: 00279783 lh a5,2(a5) + 80000204: fee798e3 bne a5,a4,800001f4 + 80000208: 00008067 ret + 8000020c: 02050263 beqz a0,80000230 + 80000210: 00059703 lh a4,0(a1) + 80000214: 00c0006f j 80000220 + 80000218: 00053503 ld a0,0(a0) + 8000021c: 00050c63 beqz a0,80000234 + 80000220: 00853783 ld a5,8(a0) + 80000224: 0007c783 lbu a5,0(a5) + 80000228: fee798e3 bne a5,a4,80000218 + 8000022c: 00008067 ret + 80000230: 00000513 li a0,0 + 80000234: 00008067 ret + 80000238: 00008067 ret + +000000008000023c : + 8000023c: fa010113 addi sp,sp,-96 + 80000240: 04913423 sd s1,72(sp) + 80000244: 03513423 sd s5,40(sp) + 80000248: 01713c23 sd s7,24(sp) + 8000024c: 01913423 sd s9,8(sp) + 80000250: 01a13023 sd s10,0(sp) + 80000254: 04113c23 sd ra,88(sp) + 80000258: 04813823 sd s0,80(sp) + 8000025c: 05213023 sd s2,64(sp) + 80000260: 03313c23 sd s3,56(sp) + 80000264: 03413823 sd s4,48(sp) + 80000268: 03613023 sd s6,32(sp) + 8000026c: 01813823 sd s8,16(sp) + 80000270: 00050493 mv s1,a0 + 80000274: 00058b93 mv s7,a1 + 80000278: 00060d13 mv s10,a2 + 8000027c: 00100a93 li s5,1 + 80000280: 00100c93 li s9,1 + 80000284: 0c048063 beqz s1,80000344 + 80000288: 00000c13 li s8,0 + 8000028c: 00000913 li s2,0 + 80000290: 00000b13 li s6,0 + 80000294: 001c0c1b addiw s8,s8,1 + 80000298: 00048793 mv a5,s1 + 8000029c: 00000413 li s0,0 + 800002a0: 0007b783 ld a5,0(a5) + 800002a4: 0014041b addiw s0,s0,1 + 800002a8: 00078463 beqz a5,800002b0 + 800002ac: fe8a9ae3 bne s5,s0,800002a0 + 800002b0: 00048a13 mv s4,s1 + 800002b4: 000a8993 mv s3,s5 + 800002b8: 00078493 mv s1,a5 + 800002bc: 02040e63 beqz s0,800002f8 + 800002c0: 04098e63 beqz s3,8000031c + 800002c4: 04048c63 beqz s1,8000031c + 800002c8: 0084b583 ld a1,8(s1) + 800002cc: 008a3503 ld a0,8(s4) + 800002d0: 000d0613 mv a2,s10 + 800002d4: 000b80e7 jalr s7 + 800002d8: 04a05263 blez a0,8000031c + 800002dc: 00048793 mv a5,s1 + 800002e0: 0004b483 ld s1,0(s1) + 800002e4: fff9899b addiw s3,s3,-1 + 800002e8: 02090463 beqz s2,80000310 + 800002ec: 00f93023 sd a5,0(s2) + 800002f0: 00078913 mv s2,a5 + 800002f4: fc0416e3 bnez s0,800002c0 + 800002f8: 02098a63 beqz s3,8000032c + 800002fc: 02048a63 beqz s1,80000330 + 80000300: 00048793 mv a5,s1 + 80000304: fff9899b addiw s3,s3,-1 + 80000308: 0004b483 ld s1,0(s1) + 8000030c: fe0910e3 bnez s2,800002ec + 80000310: 00078b13 mv s6,a5 + 80000314: 00078913 mv s2,a5 + 80000318: fddff06f j 800002f4 + 8000031c: 000a0793 mv a5,s4 + 80000320: fff4041b addiw s0,s0,-1 + 80000324: 000a3a03 ld s4,0(s4) + 80000328: fc1ff06f j 800002e8 + 8000032c: f60494e3 bnez s1,80000294 + 80000330: 00093023 sd zero,0(s2) + 80000334: 019c0c63 beq s8,s9,8000034c + 80000338: 001a9a9b slliw s5,s5,0x1 + 8000033c: 000b0493 mv s1,s6 + 80000340: f45ff06f j 80000284 + 80000344: 00003023 sd zero,0(zero) # 0 <_entry_offset> + 80000348: 00100073 ebreak + 8000034c: 05813083 ld ra,88(sp) + 80000350: 05013403 ld s0,80(sp) + 80000354: 04813483 ld s1,72(sp) + 80000358: 04013903 ld s2,64(sp) + 8000035c: 03813983 ld s3,56(sp) + 80000360: 03013a03 ld s4,48(sp) + 80000364: 02813a83 ld s5,40(sp) + 80000368: 01813b83 ld s7,24(sp) + 8000036c: 01013c03 ld s8,16(sp) + 80000370: 00813c83 ld s9,8(sp) + 80000374: 00013d03 ld s10,0(sp) + 80000378: 000b0513 mv a0,s6 + 8000037c: 02013b03 ld s6,32(sp) + 80000380: 06010113 addi sp,sp,96 + 80000384: 00008067 ret + +0000000080000388 : + 80000388: f9010113 addi sp,sp,-112 + 8000038c: 03813023 sd s8,32(sp) + 80000390: 00451c03 lh s8,4(a0) + 80000394: 06813023 sd s0,96(sp) + 80000398: 05413023 sd s4,64(sp) + 8000039c: 03513c23 sd s5,56(sp) + 800003a0: 06113423 sd ra,104(sp) + 800003a4: 04913c23 sd s1,88(sp) + 800003a8: 05213823 sd s2,80(sp) + 800003ac: 05313423 sd s3,72(sp) + 800003b0: 03613823 sd s6,48(sp) + 800003b4: 03713423 sd s7,40(sp) + 800003b8: 01913c23 sd s9,24(sp) + 800003bc: 00011423 sh zero,8(sp) + 800003c0: 00b11523 sh a1,10(sp) + 800003c4: 03853403 ld s0,56(a0) + 800003c8: 00050a93 mv s5,a0 + 800003cc: 00058a13 mv s4,a1 + 800003d0: 21805a63 blez s8,800005e4 + 800003d4: 00058c93 mv s9,a1 + 800003d8: 00000913 li s2,0 + 800003dc: 00000b93 li s7,0 + 800003e0: 00000493 li s1,0 + 800003e4: 00000b13 li s6,0 + 800003e8: 00810993 addi s3,sp,8 + 800003ec: 0ff97793 andi a5,s2,255 + 800003f0: 00098593 mv a1,s3 + 800003f4: 00040513 mv a0,s0 + 800003f8: 00f11423 sh a5,8(sp) + 800003fc: de9ff0ef jal ra,800001e4 + 80000400: 02040063 beqz s0,80000420 + 80000404: 00000713 li a4,0 + 80000408: 0080006f j 80000410 + 8000040c: 00078413 mv s0,a5 + 80000410: 00043783 ld a5,0(s0) + 80000414: 00e43023 sd a4,0(s0) + 80000418: 00040713 mv a4,s0 + 8000041c: fe0798e3 bnez a5,8000040c + 80000420: 06050a63 beqz a0,80000494 + 80000424: 00853783 ld a5,8(a0) + 80000428: 0014849b addiw s1,s1,1 + 8000042c: 03049493 slli s1,s1,0x30 + 80000430: 00079783 lh a5,0(a5) + 80000434: 0304d493 srli s1,s1,0x30 + 80000438: 0017f713 andi a4,a5,1 + 8000043c: 00070c63 beqz a4,80000454 + 80000440: 4097d79b sraiw a5,a5,0x9 + 80000444: 0017f793 andi a5,a5,1 + 80000448: 01678b3b addw s6,a5,s6 + 8000044c: 030b1b13 slli s6,s6,0x30 + 80000450: 030b5b13 srli s6,s6,0x30 + 80000454: 00053783 ld a5,0(a0) + 80000458: 00078c63 beqz a5,80000470 + 8000045c: 0007b703 ld a4,0(a5) + 80000460: 00e53023 sd a4,0(a0) + 80000464: 00043703 ld a4,0(s0) + 80000468: 00e7b023 sd a4,0(a5) + 8000046c: 00f43023 sd a5,0(s0) + 80000470: 000cc663 bltz s9,8000047c + 80000474: 001c8c9b addiw s9,s9,1 + 80000478: 01911523 sh s9,10(sp) + 8000047c: 0019091b addiw s2,s2,1 + 80000480: 0109191b slliw s2,s2,0x10 + 80000484: 4109591b sraiw s2,s2,0x10 + 80000488: 032c0c63 beq s8,s2,800004c0 + 8000048c: 00a11c83 lh s9,10(sp) + 80000490: f5dff06f j 800003ec + 80000494: 00043783 ld a5,0(s0) + 80000498: 001b8b9b addiw s7,s7,1 + 8000049c: 030b9b93 slli s7,s7,0x30 + 800004a0: 0087b783 ld a5,8(a5) + 800004a4: 030bdb93 srli s7,s7,0x30 + 800004a8: 00178783 lb a5,1(a5) + 800004ac: 0017f793 andi a5,a5,1 + 800004b0: 01678b3b addw s6,a5,s6 + 800004b4: 030b1b13 slli s6,s6,0x30 + 800004b8: 030b5b13 srli s6,s6,0x30 + 800004bc: fb5ff06f j 80000470 + 800004c0: 0024949b slliw s1,s1,0x2 + 800004c4: 417484bb subw s1,s1,s7 + 800004c8: 016484bb addw s1,s1,s6 + 800004cc: 03049493 slli s1,s1,0x30 + 800004d0: 0304d493 srli s1,s1,0x30 + 800004d4: 01405e63 blez s4,800004f0 + 800004d8: 00040513 mv a0,s0 + 800004dc: 000a8613 mv a2,s5 + 800004e0: 00000597 auipc a1,0x0 + 800004e4: cb858593 addi a1,a1,-840 # 80000198 + 800004e8: d55ff0ef jal ra,8000023c + 800004ec: 00050413 mv s0,a0 + 800004f0: 00043783 ld a5,0(s0) + 800004f4: 00098593 mv a1,s3 + 800004f8: 00040513 mv a0,s0 + 800004fc: 0007b983 ld s3,0(a5) + 80000500: 0087ba03 ld s4,8(a5) + 80000504: 0089b683 ld a3,8(s3) + 80000508: 0009b703 ld a4,0(s3) + 8000050c: 00d7b423 sd a3,8(a5) + 80000510: 0149b423 sd s4,8(s3) + 80000514: 00e7b023 sd a4,0(a5) + 80000518: 0009b023 sd zero,0(s3) + 8000051c: cc9ff0ef jal ra,800001e4 + 80000520: 00050913 mv s2,a0 + 80000524: 0a050a63 beqz a0,800005d8 + 80000528: 00843783 ld a5,8(s0) + 8000052c: 00048593 mv a1,s1 + 80000530: 00079503 lh a0,0(a5) + 80000534: 39c000ef jal ra,800008d0 + 80000538: 00093903 ld s2,0(s2) + 8000053c: 00050493 mv s1,a0 + 80000540: fe0914e3 bnez s2,80000528 + 80000544: 00043903 ld s2,0(s0) + 80000548: 0089ba03 ld s4,8(s3) + 8000054c: 00893703 ld a4,8(s2) + 80000550: 00093783 ld a5,0(s2) + 80000554: 00040513 mv a0,s0 + 80000558: 00e9b423 sd a4,8(s3) + 8000055c: 01493423 sd s4,8(s2) + 80000560: 00f9b023 sd a5,0(s3) + 80000564: 01393023 sd s3,0(s2) + 80000568: 00000613 li a2,0 + 8000056c: 00000597 auipc a1,0x0 + 80000570: aa458593 addi a1,a1,-1372 # 80000010 + 80000574: cc9ff0ef jal ra,8000023c + 80000578: 00053403 ld s0,0(a0) + 8000057c: 00050913 mv s2,a0 + 80000580: 02040063 beqz s0,800005a0 + 80000584: 00893783 ld a5,8(s2) + 80000588: 00048593 mv a1,s1 + 8000058c: 00079503 lh a0,0(a5) + 80000590: 340000ef jal ra,800008d0 + 80000594: 00043403 ld s0,0(s0) + 80000598: 00050493 mv s1,a0 + 8000059c: fe0414e3 bnez s0,80000584 + 800005a0: 06813083 ld ra,104(sp) + 800005a4: 06013403 ld s0,96(sp) + 800005a8: 05013903 ld s2,80(sp) + 800005ac: 04813983 ld s3,72(sp) + 800005b0: 04013a03 ld s4,64(sp) + 800005b4: 03813a83 ld s5,56(sp) + 800005b8: 03013b03 ld s6,48(sp) + 800005bc: 02813b83 ld s7,40(sp) + 800005c0: 02013c03 ld s8,32(sp) + 800005c4: 01813c83 ld s9,24(sp) + 800005c8: 00048513 mv a0,s1 + 800005cc: 05813483 ld s1,88(sp) + 800005d0: 07010113 addi sp,sp,112 + 800005d4: 00008067 ret + 800005d8: 00043903 ld s2,0(s0) + 800005dc: f40916e3 bnez s2,80000528 + 800005e0: f6dff06f j 8000054c + 800005e4: 00000493 li s1,0 + 800005e8: 00810993 addi s3,sp,8 + 800005ec: ee9ff06f j 800004d4 + +00000000800005f0 : + 800005f0: fd010113 addi sp,sp,-48 + 800005f4: 02051513 slli a0,a0,0x20 + 800005f8: 01213823 sd s2,16(sp) + 800005fc: 02055513 srli a0,a0,0x20 + 80000600: 00058913 mv s2,a1 + 80000604: 01400593 li a1,20 + 80000608: 02813023 sd s0,32(sp) + 8000060c: 01313423 sd s3,8(sp) + 80000610: 02113423 sd ra,40(sp) + 80000614: 00060993 mv s3,a2 + 80000618: 00913c23 sd s1,24(sp) + 8000061c: 4dd010ef jal ra,800022f8 <__udivdi3> + 80000620: ffe50e1b addiw t3,a0,-2 + 80000624: 020e1513 slli a0,t3,0x20 + 80000628: 02055513 srli a0,a0,0x20 + 8000062c: 00451613 slli a2,a0,0x4 + 80000630: 00c90633 add a2,s2,a2 + 80000634: ffff87b7 lui a5,0xffff8 + 80000638: 00093023 sd zero,0(s2) + 8000063c: 00c93423 sd a2,8(s2) + 80000640: 0807871b addiw a4,a5,128 + 80000644: 00251e93 slli t4,a0,0x2 + 80000648: 00e61023 sh a4,0(a2) + 8000064c: 00061123 sh zero,2(a2) + 80000650: 02090693 addi a3,s2,32 + 80000654: 01d60eb3 add t4,a2,t4 + 80000658: 01090413 addi s0,s2,16 + 8000065c: 00460713 addi a4,a2,4 + 80000660: 14c6f063 bgeu a3,a2,800007a0 + 80000664: 00860893 addi a7,a2,8 + 80000668: 13d8fc63 bgeu a7,t4,800007a0 + 8000066c: 00e93c23 sd a4,24(s2) + 80000670: 00093823 sd zero,16(s2) + 80000674: 00893023 sd s0,0(s2) + 80000678: fff7c793 not a5,a5 + 8000067c: fff00713 li a4,-1 + 80000680: 00e61223 sh a4,4(a2) + 80000684: 00f61323 sh a5,6(a2) + 80000688: 060e0a63 beqz t3,800006fc + 8000068c: 03099f13 slli t5,s3,0x30 + 80000690: ffff8fb7 lui t6,0xffff8 + 80000694: 030f5f13 srli t5,t5,0x30 + 80000698: 00000813 li a6,0 + 8000069c: ffffcf93 not t6,t6 + 800006a0: 03081713 slli a4,a6,0x30 + 800006a4: 03075713 srli a4,a4,0x30 + 800006a8: 00ef47b3 xor a5,t5,a4 + 800006ac: 00379793 slli a5,a5,0x3 + 800006b0: 00777713 andi a4,a4,7 + 800006b4: 0787f793 andi a5,a5,120 + 800006b8: 00e7e7b3 or a5,a5,a4 + 800006bc: 00879593 slli a1,a5,0x8 + 800006c0: 01068713 addi a4,a3,16 + 800006c4: 0018081b addiw a6,a6,1 + 800006c8: 00488313 addi t1,a7,4 + 800006cc: 00b7e7b3 or a5,a5,a1 + 800006d0: 02c77463 bgeu a4,a2,800006f8 + 800006d4: 03d37263 bgeu t1,t4,800006f8 + 800006d8: 0086b023 sd s0,0(a3) + 800006dc: 00d93023 sd a3,0(s2) + 800006e0: 0116b423 sd a7,8(a3) + 800006e4: 00f89023 sh a5,0(a7) + 800006e8: 01f89123 sh t6,2(a7) + 800006ec: 00068413 mv s0,a3 + 800006f0: 00030893 mv a7,t1 + 800006f4: 00070693 mv a3,a4 + 800006f8: fb0e14e3 bne t3,a6,800006a0 + 800006fc: 00043483 ld s1,0(s0) + 80000700: 06048a63 beqz s1,80000774 + 80000704: 00500593 li a1,5 + 80000708: 3f1010ef jal ra,800022f8 <__udivdi3> + 8000070c: 00004637 lui a2,0x4 + 80000710: 0005051b sext.w a0,a0 + 80000714: 00100693 li a3,1 + 80000718: fff60613 addi a2,a2,-1 # 3fff <_entry_offset+0x3fff> + 8000071c: 01c0006f j 80000738 + 80000720: 0004b783 ld a5,0(s1) + 80000724: 00d71123 sh a3,2(a4) + 80000728: 00048413 mv s0,s1 + 8000072c: 0016869b addiw a3,a3,1 + 80000730: 04078263 beqz a5,80000774 + 80000734: 00078493 mv s1,a5 + 80000738: 03069713 slli a4,a3,0x30 + 8000073c: 03075713 srli a4,a4,0x30 + 80000740: 0017079b addiw a5,a4,1 + 80000744: 0087979b slliw a5,a5,0x8 + 80000748: 01374733 xor a4,a4,s3 + 8000074c: 7007f793 andi a5,a5,1792 + 80000750: 00e7e7b3 or a5,a5,a4 + 80000754: 00c7f7b3 and a5,a5,a2 + 80000758: 00843703 ld a4,8(s0) + 8000075c: fca6e2e3 bltu a3,a0,80000720 + 80000760: 00f71123 sh a5,2(a4) + 80000764: 0004b783 ld a5,0(s1) + 80000768: 00048413 mv s0,s1 + 8000076c: 0016869b addiw a3,a3,1 + 80000770: fc0792e3 bnez a5,80000734 + 80000774: 02013403 ld s0,32(sp) + 80000778: 02813083 ld ra,40(sp) + 8000077c: 01813483 ld s1,24(sp) + 80000780: 00813983 ld s3,8(sp) + 80000784: 00090513 mv a0,s2 + 80000788: 01013903 ld s2,16(sp) + 8000078c: 00000613 li a2,0 + 80000790: 00000597 auipc a1,0x0 + 80000794: 88058593 addi a1,a1,-1920 # 80000010 + 80000798: 03010113 addi sp,sp,48 + 8000079c: aa1ff06f j 8000023c + 800007a0: 00040693 mv a3,s0 + 800007a4: 00070893 mv a7,a4 + 800007a8: 00000413 li s0,0 + 800007ac: eddff06f j 80000688 + +00000000800007b0 : + 800007b0: 00500793 li a5,5 + 800007b4: 04a7ee63 bltu a5,a0,80000810 + 800007b8: 00003717 auipc a4,0x3 + 800007bc: 35870713 addi a4,a4,856 # 80003b10 <_etext> + 800007c0: 00251513 slli a0,a0,0x2 + 800007c4: 00e50533 add a0,a0,a4 + 800007c8: 00052783 lw a5,0(a0) + 800007cc: 00e787b3 add a5,a5,a4 + 800007d0: 00078067 jr a5 # ffffffffffff8000 <_end+0xffffffff7ffeb000> + 800007d4: 00004517 auipc a0,0x4 + 800007d8: fec52503 lw a0,-20(a0) # 800047c0 + 800007dc: 00008067 ret + 800007e0: 00004517 auipc a0,0x4 + 800007e4: fd852503 lw a0,-40(a0) # 800047b8 + 800007e8: 00008067 ret + 800007ec: 00004517 auipc a0,0x4 + 800007f0: fd052503 lw a0,-48(a0) # 800047bc + 800007f4: 00008067 ret + 800007f8: 00004517 auipc a0,0x4 + 800007fc: ba452503 lw a0,-1116(a0) # 8000439c + 80000800: 00008067 ret + 80000804: 00004517 auipc a0,0x4 + 80000808: b9c52503 lw a0,-1124(a0) # 800043a0 + 8000080c: 00008067 ret + 80000810: 00000513 li a0,0 + 80000814: 00008067 ret + +0000000080000818 : + 80000818: 00050693 mv a3,a0 + 8000081c: ffffa837 lui a6,0xffffa + 80000820: 00058513 mv a0,a1 + 80000824: 0ff6f613 andi a2,a3,255 + 80000828: 00800793 li a5,8 + 8000082c: 00180813 addi a6,a6,1 # ffffffffffffa001 <_end+0xffffffff7ffed001> + 80000830: 00c54733 xor a4,a0,a2 + 80000834: fff7879b addiw a5,a5,-1 + 80000838: 00155513 srli a0,a0,0x1 + 8000083c: 00177713 andi a4,a4,1 + 80000840: 0ff7f793 andi a5,a5,255 + 80000844: 010545b3 xor a1,a0,a6 + 80000848: 00165613 srli a2,a2,0x1 + 8000084c: 00070663 beqz a4,80000858 + 80000850: 03059513 slli a0,a1,0x30 + 80000854: 03055513 srli a0,a0,0x30 + 80000858: fc079ce3 bnez a5,80000830 + 8000085c: ffffa5b7 lui a1,0xffffa + 80000860: 0086d693 srli a3,a3,0x8 + 80000864: 00800793 li a5,8 + 80000868: 00158593 addi a1,a1,1 # ffffffffffffa001 <_end+0xffffffff7ffed001> + 8000086c: 00d54733 xor a4,a0,a3 + 80000870: fff7879b addiw a5,a5,-1 + 80000874: 00155513 srli a0,a0,0x1 + 80000878: 00177713 andi a4,a4,1 + 8000087c: 0ff7f793 andi a5,a5,255 + 80000880: 00b54633 xor a2,a0,a1 + 80000884: 0016d693 srli a3,a3,0x1 + 80000888: 00070663 beqz a4,80000894 + 8000088c: 03061513 slli a0,a2,0x30 + 80000890: 03055513 srli a0,a0,0x30 + 80000894: fc079ce3 bnez a5,8000086c + 80000898: 00008067 ret + +000000008000089c : + 8000089c: ff010113 addi sp,sp,-16 + 800008a0: 00813023 sd s0,0(sp) + 800008a4: 00050413 mv s0,a0 + 800008a8: 03051513 slli a0,a0,0x30 + 800008ac: 03055513 srli a0,a0,0x30 + 800008b0: 00113423 sd ra,8(sp) + 800008b4: f65ff0ef jal ra,80000818 + 800008b8: 00050593 mv a1,a0 + 800008bc: 0104551b srliw a0,s0,0x10 + 800008c0: 00013403 ld s0,0(sp) + 800008c4: 00813083 ld ra,8(sp) + 800008c8: 01010113 addi sp,sp,16 + 800008cc: f4dff06f j 80000818 + +00000000800008d0 : + 800008d0: 03051513 slli a0,a0,0x30 + 800008d4: 03055513 srli a0,a0,0x30 + 800008d8: f41ff06f j 80000818 + +00000000800008dc : + 800008dc: 00000513 li a0,0 + 800008e0: 00008067 ret + +00000000800008e4 : + 800008e4: f7010113 addi sp,sp,-144 + 800008e8: 07413023 sd s4,96(sp) + 800008ec: 03b13423 sd s11,40(sp) + 800008f0: 08113423 sd ra,136(sp) + 800008f4: 08813023 sd s0,128(sp) + 800008f8: 06913c23 sd s1,120(sp) + 800008fc: 07213823 sd s2,112(sp) + 80000900: 07313423 sd s3,104(sp) + 80000904: 05513c23 sd s5,88(sp) + 80000908: 05613823 sd s6,80(sp) + 8000090c: 05713423 sd s7,72(sp) + 80000910: 05813023 sd s8,64(sp) + 80000914: 03913c23 sd s9,56(sp) + 80000918: 03a13823 sd s10,48(sp) + 8000091c: 00d13c23 sd a3,24(sp) + 80000920: 00050a13 mv s4,a0 + 80000924: 00100d93 li s11,1 + 80000928: 00060463 beqz a2,80000930 + 8000092c: 00060d93 mv s11,a2 + 80000930: fff58593 addi a1,a1,-1 + 80000934: ffc5f493 andi s1,a1,-4 + 80000938: 00448993 addi s3,s1,4 + 8000093c: 00000913 li s2,0 + 80000940: 160a0663 beqz s4,80000aac + 80000944: 0019079b addiw a5,s2,1 + 80000948: 00078593 mv a1,a5 + 8000094c: 00078513 mv a0,a5 + 80000950: 0009041b sext.w s0,s2 + 80000954: 0007891b sext.w s2,a5 + 80000958: 135010ef jal ra,8000228c <__muldi3> + 8000095c: 0035179b slliw a5,a0,0x3 + 80000960: ff47e2e3 bltu a5,s4,80000944 + 80000964: 00040593 mv a1,s0 + 80000968: 00040513 mv a0,s0 + 8000096c: 121010ef jal ra,8000228c <__muldi3> + 80000970: 02051c13 slli s8,a0,0x20 + 80000974: 01fc5793 srli a5,s8,0x1f + 80000978: 00f13823 sd a5,16(sp) + 8000097c: 00f984b3 add s1,s3,a5 + 80000980: 0004079b sext.w a5,s0 + 80000984: 00f13423 sd a5,8(sp) + 80000988: 14040063 beqz s0,80000ac8 + 8000098c: 00010a37 lui s4,0x10 + 80000990: 00000b93 li s7,0 + 80000994: 00000b13 li s6,0 + 80000998: 00100a93 li s5,1 + 8000099c: fffa0a13 addi s4,s4,-1 # ffff <_entry_offset+0xffff> + 800009a0: fff40d1b addiw s10,s0,-1 + 800009a4: 000a8c93 mv s9,s5 + 800009a8: 00000c13 li s8,0 + 800009ac: 415b893b subw s2,s7,s5 + 800009b0: 000c8593 mv a1,s9 + 800009b4: 000d8513 mv a0,s11 + 800009b8: 0d5010ef jal ra,8000228c <__muldi3> + 800009bc: 0005051b sext.w a0,a0 + 800009c0: 41f5561b sraiw a2,a0,0x1f + 800009c4: 0106561b srliw a2,a2,0x10 + 800009c8: 00a6053b addw a0,a2,a0 + 800009cc: 030c9713 slli a4,s9,0x30 + 800009d0: 01457533 and a0,a0,s4 + 800009d4: 03075713 srli a4,a4,0x30 + 800009d8: 019907bb addw a5,s2,s9 + 800009dc: 40c50dbb subw s11,a0,a2 + 800009e0: 00ed863b addw a2,s11,a4 + 800009e4: 02079793 slli a5,a5,0x20 + 800009e8: 0207d793 srli a5,a5,0x20 + 800009ec: 03061613 slli a2,a2,0x30 + 800009f0: 03065613 srli a2,a2,0x30 + 800009f4: 00179793 slli a5,a5,0x1 + 800009f8: 00f48833 add a6,s1,a5 + 800009fc: 00e6073b addw a4,a2,a4 + 80000a00: 00c81023 sh a2,0(a6) + 80000a04: 00f987b3 add a5,s3,a5 + 80000a08: 0ff77713 andi a4,a4,255 + 80000a0c: 00e79023 sh a4,0(a5) + 80000a10: 001c0c1b addiw s8,s8,1 + 80000a14: 001c8c9b addiw s9,s9,1 + 80000a18: f88c6ce3 bltu s8,s0,800009b0 + 80000a1c: 001a8a9b addiw s5,s5,1 + 80000a20: 00000793 li a5,0 + 80000a24: 00040463 beqz s0,80000a2c + 80000a28: 000d0793 mv a5,s10 + 80000a2c: 001b0b1b addiw s6,s6,1 + 80000a30: 01578abb addw s5,a5,s5 + 80000a34: 01740bbb addw s7,s0,s7 + 80000a38: f68b66e3 bltu s6,s0,800009a4 + 80000a3c: 01013783 ld a5,16(sp) + 80000a40: 01813703 ld a4,24(sp) + 80000a44: 08813083 ld ra,136(sp) + 80000a48: 00f487b3 add a5,s1,a5 + 80000a4c: fff78793 addi a5,a5,-1 + 80000a50: ffc7f793 andi a5,a5,-4 + 80000a54: 00478793 addi a5,a5,4 + 80000a58: 01373423 sd s3,8(a4) + 80000a5c: 00973823 sd s1,16(a4) + 80000a60: 00f73c23 sd a5,24(a4) + 80000a64: 00070793 mv a5,a4 + 80000a68: 00813703 ld a4,8(sp) + 80000a6c: 00040513 mv a0,s0 + 80000a70: 08013403 ld s0,128(sp) + 80000a74: 00e7a023 sw a4,0(a5) + 80000a78: 07813483 ld s1,120(sp) + 80000a7c: 07013903 ld s2,112(sp) + 80000a80: 06813983 ld s3,104(sp) + 80000a84: 06013a03 ld s4,96(sp) + 80000a88: 05813a83 ld s5,88(sp) + 80000a8c: 05013b03 ld s6,80(sp) + 80000a90: 04813b83 ld s7,72(sp) + 80000a94: 04013c03 ld s8,64(sp) + 80000a98: 03813c83 ld s9,56(sp) + 80000a9c: 03013d03 ld s10,48(sp) + 80000aa0: 02813d83 ld s11,40(sp) + 80000aa4: 09010113 addi sp,sp,144 + 80000aa8: 00008067 ret + 80000aac: fff00793 li a5,-1 + 80000ab0: 00f13423 sd a5,8(sp) + 80000ab4: 00200793 li a5,2 + 80000ab8: 00648493 addi s1,s1,6 + 80000abc: fff00413 li s0,-1 + 80000ac0: 00f13823 sd a5,16(sp) + 80000ac4: ec9ff06f j 8000098c + 80000ac8: 00013423 sd zero,8(sp) + 80000acc: f71ff06f j 80000a3c + +0000000080000ad0 : + 80000ad0: 0c050e63 beqz a0,80000bac + 80000ad4: fa010113 addi sp,sp,-96 + 80000ad8: 01713c23 sd s7,24(sp) + 80000adc: fff50b9b addiw s7,a0,-1 + 80000ae0: 020b9b93 slli s7,s7,0x20 + 80000ae4: 01ebdb93 srli s7,s7,0x1e + 80000ae8: 00458793 addi a5,a1,4 + 80000aec: 05213023 sd s2,64(sp) + 80000af0: 03313c23 sd s3,56(sp) + 80000af4: 03413823 sd s4,48(sp) + 80000af8: 03513423 sd s5,40(sp) + 80000afc: 03613023 sd s6,32(sp) + 80000b00: 01813823 sd s8,16(sp) + 80000b04: 04113c23 sd ra,88(sp) + 80000b08: 04813823 sd s0,80(sp) + 80000b0c: 04913423 sd s1,72(sp) + 80000b10: 01913423 sd s9,8(sp) + 80000b14: 00050b13 mv s6,a0 + 80000b18: 00060993 mv s3,a2 + 80000b1c: 00068c13 mv s8,a3 + 80000b20: 00058a13 mv s4,a1 + 80000b24: 00fb8bb3 add s7,s7,a5 + 80000b28: 00050913 mv s2,a0 + 80000b2c: 00000a93 li s5,0 + 80000b30: 000c0493 mv s1,s8 + 80000b34: 000a8413 mv s0,s5 + 80000b38: 00000c93 li s9,0 + 80000b3c: 02041793 slli a5,s0,0x20 + 80000b40: 01f7d793 srli a5,a5,0x1f + 80000b44: 00f987b3 add a5,s3,a5 + 80000b48: 00049583 lh a1,0(s1) + 80000b4c: 00079503 lh a0,0(a5) + 80000b50: 0014041b addiw s0,s0,1 + 80000b54: 00248493 addi s1,s1,2 + 80000b58: 734010ef jal ra,8000228c <__muldi3> + 80000b5c: 01950cbb addw s9,a0,s9 + 80000b60: fc891ee3 bne s2,s0,80000b3c + 80000b64: 019a2023 sw s9,0(s4) + 80000b68: 004a0a13 addi s4,s4,4 + 80000b6c: 015b0abb addw s5,s6,s5 + 80000b70: 012b093b addw s2,s6,s2 + 80000b74: fb4b9ee3 bne s7,s4,80000b30 + 80000b78: 05813083 ld ra,88(sp) + 80000b7c: 05013403 ld s0,80(sp) + 80000b80: 04813483 ld s1,72(sp) + 80000b84: 04013903 ld s2,64(sp) + 80000b88: 03813983 ld s3,56(sp) + 80000b8c: 03013a03 ld s4,48(sp) + 80000b90: 02813a83 ld s5,40(sp) + 80000b94: 02013b03 ld s6,32(sp) + 80000b98: 01813b83 ld s7,24(sp) + 80000b9c: 01013c03 ld s8,16(sp) + 80000ba0: 00813c83 ld s9,8(sp) + 80000ba4: 06010113 addi sp,sp,96 + 80000ba8: 00008067 ret + 80000bac: 00008067 ret + +0000000080000bb0 : + 80000bb0: 10050e63 beqz a0,80000ccc + 80000bb4: f9010113 addi sp,sp,-112 + 80000bb8: 06813023 sd s0,96(sp) + 80000bbc: 04913c23 sd s1,88(sp) + 80000bc0: 05213823 sd s2,80(sp) + 80000bc4: 05313423 sd s3,72(sp) + 80000bc8: 03613823 sd s6,48(sp) + 80000bcc: 03713423 sd s7,40(sp) + 80000bd0: 03813023 sd s8,32(sp) + 80000bd4: 06113423 sd ra,104(sp) + 80000bd8: 05413023 sd s4,64(sp) + 80000bdc: 03513c23 sd s5,56(sp) + 80000be0: 01913c23 sd s9,24(sp) + 80000be4: 01a13823 sd s10,16(sp) + 80000be8: 01b13423 sd s11,8(sp) + 80000bec: 00050413 mv s0,a0 + 80000bf0: 00058b93 mv s7,a1 + 80000bf4: 00060993 mv s3,a2 + 80000bf8: 00068913 mv s2,a3 + 80000bfc: 00050493 mv s1,a0 + 80000c00: 00000b13 li s6,0 + 80000c04: 00000c13 li s8,0 + 80000c08: 00000a93 li s5,0 + 80000c0c: 016a8a3b addw s4,s5,s6 + 80000c10: 020a1a13 slli s4,s4,0x20 + 80000c14: 01ea5a13 srli s4,s4,0x1e + 80000c18: 014b8a33 add s4,s7,s4 + 80000c1c: 000a8d13 mv s10,s5 + 80000c20: 000b0c93 mv s9,s6 + 80000c24: 00000d93 li s11,0 + 80000c28: 020c9793 slli a5,s9,0x20 + 80000c2c: 020d1713 slli a4,s10,0x20 + 80000c30: 0207d793 srli a5,a5,0x20 + 80000c34: 02075713 srli a4,a4,0x20 + 80000c38: 00179793 slli a5,a5,0x1 + 80000c3c: 00171713 slli a4,a4,0x1 + 80000c40: 00f987b3 add a5,s3,a5 + 80000c44: 00e90733 add a4,s2,a4 + 80000c48: 00071583 lh a1,0(a4) + 80000c4c: 00079503 lh a0,0(a5) + 80000c50: 001c8c9b addiw s9,s9,1 + 80000c54: 01a40d3b addw s10,s0,s10 + 80000c58: 634010ef jal ra,8000228c <__muldi3> + 80000c5c: 01b50dbb addw s11,a0,s11 + 80000c60: fd9494e3 bne s1,s9,80000c28 + 80000c64: 01ba2023 sw s11,0(s4) + 80000c68: 001a879b addiw a5,s5,1 + 80000c6c: 00f40663 beq s0,a5,80000c78 + 80000c70: 00078a93 mv s5,a5 + 80000c74: f99ff06f j 80000c0c + 80000c78: 001c079b addiw a5,s8,1 + 80000c7c: 01640b3b addw s6,s0,s6 + 80000c80: 009404bb addw s1,s0,s1 + 80000c84: 015c0663 beq s8,s5,80000c90 + 80000c88: 00078c13 mv s8,a5 + 80000c8c: f7dff06f j 80000c08 + 80000c90: 06813083 ld ra,104(sp) + 80000c94: 06013403 ld s0,96(sp) + 80000c98: 05813483 ld s1,88(sp) + 80000c9c: 05013903 ld s2,80(sp) + 80000ca0: 04813983 ld s3,72(sp) + 80000ca4: 04013a03 ld s4,64(sp) + 80000ca8: 03813a83 ld s5,56(sp) + 80000cac: 03013b03 ld s6,48(sp) + 80000cb0: 02813b83 ld s7,40(sp) + 80000cb4: 02013c03 ld s8,32(sp) + 80000cb8: 01813c83 ld s9,24(sp) + 80000cbc: 01013d03 ld s10,16(sp) + 80000cc0: 00813d83 ld s11,8(sp) + 80000cc4: 07010113 addi sp,sp,112 + 80000cc8: 00008067 ret + 80000ccc: 00008067 ret + +0000000080000cd0 : + 80000cd0: 12050863 beqz a0,80000e00 + 80000cd4: f9010113 addi sp,sp,-112 + 80000cd8: 06813023 sd s0,96(sp) + 80000cdc: 04913c23 sd s1,88(sp) + 80000ce0: 05213823 sd s2,80(sp) + 80000ce4: 05313423 sd s3,72(sp) + 80000ce8: 03613823 sd s6,48(sp) + 80000cec: 03713423 sd s7,40(sp) + 80000cf0: 03813023 sd s8,32(sp) + 80000cf4: 06113423 sd ra,104(sp) + 80000cf8: 05413023 sd s4,64(sp) + 80000cfc: 03513c23 sd s5,56(sp) + 80000d00: 01913c23 sd s9,24(sp) + 80000d04: 01a13823 sd s10,16(sp) + 80000d08: 01b13423 sd s11,8(sp) + 80000d0c: 00050413 mv s0,a0 + 80000d10: 00058b93 mv s7,a1 + 80000d14: 00060993 mv s3,a2 + 80000d18: 00068913 mv s2,a3 + 80000d1c: 00050493 mv s1,a0 + 80000d20: 00000b13 li s6,0 + 80000d24: 00000c13 li s8,0 + 80000d28: 00000a93 li s5,0 + 80000d2c: 016a8a3b addw s4,s5,s6 + 80000d30: 020a1a13 slli s4,s4,0x20 + 80000d34: 01ea5a13 srli s4,s4,0x1e + 80000d38: 014b8a33 add s4,s7,s4 + 80000d3c: 000a8d13 mv s10,s5 + 80000d40: 000b0c93 mv s9,s6 + 80000d44: 00000d93 li s11,0 + 80000d48: 020c9793 slli a5,s9,0x20 + 80000d4c: 020d1713 slli a4,s10,0x20 + 80000d50: 0207d793 srli a5,a5,0x20 + 80000d54: 02075713 srli a4,a4,0x20 + 80000d58: 00179793 slli a5,a5,0x1 + 80000d5c: 00171713 slli a4,a4,0x1 + 80000d60: 00f987b3 add a5,s3,a5 + 80000d64: 00e90733 add a4,s2,a4 + 80000d68: 00071583 lh a1,0(a4) + 80000d6c: 00079503 lh a0,0(a5) + 80000d70: 001c8c9b addiw s9,s9,1 + 80000d74: 01a40d3b addw s10,s0,s10 + 80000d78: 514010ef jal ra,8000228c <__muldi3> + 80000d7c: 4025579b sraiw a5,a0,0x2 + 80000d80: 4055559b sraiw a1,a0,0x5 + 80000d84: 07f5f593 andi a1,a1,127 + 80000d88: 00f7f513 andi a0,a5,15 + 80000d8c: 500010ef jal ra,8000228c <__muldi3> + 80000d90: 01b50dbb addw s11,a0,s11 + 80000d94: fb949ae3 bne s1,s9,80000d48 + 80000d98: 01ba2023 sw s11,0(s4) + 80000d9c: 001a879b addiw a5,s5,1 + 80000da0: 00f40663 beq s0,a5,80000dac + 80000da4: 00078a93 mv s5,a5 + 80000da8: f85ff06f j 80000d2c + 80000dac: 001c079b addiw a5,s8,1 + 80000db0: 01640b3b addw s6,s0,s6 + 80000db4: 009404bb addw s1,s0,s1 + 80000db8: 015c0663 beq s8,s5,80000dc4 + 80000dbc: 00078c13 mv s8,a5 + 80000dc0: f69ff06f j 80000d28 + 80000dc4: 06813083 ld ra,104(sp) + 80000dc8: 06013403 ld s0,96(sp) + 80000dcc: 05813483 ld s1,88(sp) + 80000dd0: 05013903 ld s2,80(sp) + 80000dd4: 04813983 ld s3,72(sp) + 80000dd8: 04013a03 ld s4,64(sp) + 80000ddc: 03813a83 ld s5,56(sp) + 80000de0: 03013b03 ld s6,48(sp) + 80000de4: 02813b83 ld s7,40(sp) + 80000de8: 02013c03 ld s8,32(sp) + 80000dec: 01813c83 ld s9,24(sp) + 80000df0: 01013d03 ld s10,16(sp) + 80000df4: 00813d83 ld s11,8(sp) + 80000df8: 07010113 addi sp,sp,112 + 80000dfc: 00008067 ret + 80000e00: 00008067 ret + +0000000080000e04 : + 80000e04: f8010113 addi sp,sp,-128 + 80000e08: 05313c23 sd s3,88(sp) + 80000e0c: fffff9b7 lui s3,0xfffff + 80000e10: 013767b3 or a5,a4,s3 + 80000e14: 05413823 sd s4,80(sp) + 80000e18: 05613023 sd s6,64(sp) + 80000e1c: 01b13c23 sd s11,24(sp) + 80000e20: 06113c23 sd ra,120(sp) + 80000e24: 06813823 sd s0,112(sp) + 80000e28: 06913423 sd s1,104(sp) + 80000e2c: 07213023 sd s2,96(sp) + 80000e30: 05513423 sd s5,72(sp) + 80000e34: 03713c23 sd s7,56(sp) + 80000e38: 03813823 sd s8,48(sp) + 80000e3c: 03913423 sd s9,40(sp) + 80000e40: 03a13023 sd s10,32(sp) + 80000e44: 00f13423 sd a5,8(sp) + 80000e48: 00058d93 mv s11,a1 + 80000e4c: 00060a13 mv s4,a2 + 80000e50: 00068b13 mv s6,a3 + 80000e54: 3a050c63 beqz a0,8000120c + 80000e58: 03071413 slli s0,a4,0x30 + 80000e5c: 00050813 mv a6,a0 + 80000e60: 00050593 mv a1,a0 + 80000e64: 03045413 srli s0,s0,0x30 + 80000e68: 00000513 li a0,0 + 80000e6c: 00000c13 li s8,0 + 80000e70: 00050693 mv a3,a0 + 80000e74: 02069793 slli a5,a3,0x20 + 80000e78: 01f7d793 srli a5,a5,0x1f + 80000e7c: 00fa07b3 add a5,s4,a5 + 80000e80: 0007d603 lhu a2,0(a5) + 80000e84: 0016869b addiw a3,a3,1 + 80000e88: 0086063b addw a2,a2,s0 + 80000e8c: 00c79023 sh a2,0(a5) + 80000e90: fed592e3 bne a1,a3,80000e74 + 80000e94: 001c091b addiw s2,s8,1 + 80000e98: 00a8053b addw a0,a6,a0 + 80000e9c: 00b805bb addw a1,a6,a1 + 80000ea0: 01280663 beq a6,s2,80000eac + 80000ea4: 00090c13 mv s8,s2 + 80000ea8: fc9ff06f j 80000e70 + 80000eac: 00070b9b sext.w s7,a4 + 80000eb0: 00090a93 mv s5,s2 + 80000eb4: 00000c93 li s9,0 + 80000eb8: 00000d13 li s10,0 + 80000ebc: 000c8993 mv s3,s9 + 80000ec0: 02099793 slli a5,s3,0x20 + 80000ec4: 0207d793 srli a5,a5,0x20 + 80000ec8: 00179693 slli a3,a5,0x1 + 80000ecc: 00da06b3 add a3,s4,a3 + 80000ed0: 00069583 lh a1,0(a3) + 80000ed4: 00279793 slli a5,a5,0x2 + 80000ed8: 000b8513 mv a0,s7 + 80000edc: 00fd84b3 add s1,s11,a5 + 80000ee0: 3ac010ef jal ra,8000228c <__muldi3> + 80000ee4: 00a4a023 sw a0,0(s1) + 80000ee8: 0019899b addiw s3,s3,1 + 80000eec: fd3a9ae3 bne s5,s3,80000ec0 + 80000ef0: 001d079b addiw a5,s10,1 + 80000ef4: 01990cbb addw s9,s2,s9 + 80000ef8: 01590abb addw s5,s2,s5 + 80000efc: 018d0663 beq s10,s8,80000f08 + 80000f00: 00078d13 mv s10,a5 + 80000f04: fb9ff06f j 80000ebc + 80000f08: 00812983 lw s3,8(sp) + 80000f0c: 00090813 mv a6,s2 + 80000f10: 00000893 li a7,0 + 80000f14: 00000513 li a0,0 + 80000f18: 00000613 li a2,0 + 80000f1c: 00000593 li a1,0 + 80000f20: 00000313 li t1,0 + 80000f24: 00088693 mv a3,a7 + 80000f28: 0180006f j 80000f40 + 80000f2c: 0107951b slliw a0,a5,0x10 + 80000f30: 0016869b addiw a3,a3,1 + 80000f34: 4105551b sraiw a0,a0,0x10 + 80000f38: 00000593 li a1,0 + 80000f3c: 04d80263 beq a6,a3,80000f80 + 80000f40: 02069793 slli a5,a3,0x20 + 80000f44: 01e7d793 srli a5,a5,0x1e + 80000f48: 00fd87b3 add a5,s11,a5 + 80000f4c: 00060713 mv a4,a2 + 80000f50: 0007a603 lw a2,0(a5) + 80000f54: 03051513 slli a0,a0,0x30 + 80000f58: 03055513 srli a0,a0,0x30 + 80000f5c: 00c72733 slt a4,a4,a2 + 80000f60: 00b605bb addw a1,a2,a1 + 80000f64: 00a5079b addiw a5,a0,10 + 80000f68: 00a7073b addw a4,a4,a0 + 80000f6c: fcb9c0e3 blt s3,a1,80000f2c + 80000f70: 0107151b slliw a0,a4,0x10 + 80000f74: 0016869b addiw a3,a3,1 + 80000f78: 4105551b sraiw a0,a0,0x10 + 80000f7c: fcd812e3 bne a6,a3,80000f40 + 80000f80: 0013079b addiw a5,t1,1 + 80000f84: 0109083b addw a6,s2,a6 + 80000f88: 011908bb addw a7,s2,a7 + 80000f8c: 01830663 beq t1,s8,80000f98 + 80000f90: 00078313 mv t1,a5 + 80000f94: f91ff06f j 80000f24 + 80000f98: 00000593 li a1,0 + 80000f9c: 935ff0ef jal ra,800008d0 + 80000fa0: 000a0613 mv a2,s4 + 80000fa4: 000d8593 mv a1,s11 + 80000fa8: 00050493 mv s1,a0 + 80000fac: 000b0693 mv a3,s6 + 80000fb0: 00090513 mv a0,s2 + 80000fb4: b1dff0ef jal ra,80000ad0 + 80000fb8: 00090813 mv a6,s2 + 80000fbc: 00000893 li a7,0 + 80000fc0: 00000513 li a0,0 + 80000fc4: 00000613 li a2,0 + 80000fc8: 00000593 li a1,0 + 80000fcc: 00000313 li t1,0 + 80000fd0: 00088693 mv a3,a7 + 80000fd4: 0180006f j 80000fec + 80000fd8: 0107951b slliw a0,a5,0x10 + 80000fdc: 0016869b addiw a3,a3,1 + 80000fe0: 4105551b sraiw a0,a0,0x10 + 80000fe4: 00000593 li a1,0 + 80000fe8: 04d80263 beq a6,a3,8000102c + 80000fec: 02069793 slli a5,a3,0x20 + 80000ff0: 01e7d793 srli a5,a5,0x1e + 80000ff4: 00fd87b3 add a5,s11,a5 + 80000ff8: 00060713 mv a4,a2 + 80000ffc: 0007a603 lw a2,0(a5) + 80001000: 03051513 slli a0,a0,0x30 + 80001004: 03055513 srli a0,a0,0x30 + 80001008: 00c72733 slt a4,a4,a2 + 8000100c: 00b605bb addw a1,a2,a1 + 80001010: 00a5079b addiw a5,a0,10 + 80001014: 00a7073b addw a4,a4,a0 + 80001018: fcb9c0e3 blt s3,a1,80000fd8 + 8000101c: 0107151b slliw a0,a4,0x10 + 80001020: 0016869b addiw a3,a3,1 + 80001024: 4105551b sraiw a0,a0,0x10 + 80001028: fcd812e3 bne a6,a3,80000fec + 8000102c: 0013079b addiw a5,t1,1 + 80001030: 0109083b addw a6,s2,a6 + 80001034: 011908bb addw a7,s2,a7 + 80001038: 01830663 beq t1,s8,80001044 + 8000103c: 00078313 mv t1,a5 + 80001040: f91ff06f j 80000fd0 + 80001044: 00048593 mv a1,s1 + 80001048: 889ff0ef jal ra,800008d0 + 8000104c: 000a0613 mv a2,s4 + 80001050: 000d8593 mv a1,s11 + 80001054: 00050493 mv s1,a0 + 80001058: 000b0693 mv a3,s6 + 8000105c: 00090513 mv a0,s2 + 80001060: b51ff0ef jal ra,80000bb0 + 80001064: 00000813 li a6,0 + 80001068: 00000513 li a0,0 + 8000106c: 00000613 li a2,0 + 80001070: 00000593 li a1,0 + 80001074: 00000893 li a7,0 + 80001078: 00000693 li a3,0 + 8000107c: 0180006f j 80001094 + 80001080: 0107951b slliw a0,a5,0x10 + 80001084: 0016869b addiw a3,a3,1 + 80001088: 4105551b sraiw a0,a0,0x10 + 8000108c: 00000593 li a1,0 + 80001090: 0526f463 bgeu a3,s2,800010d8 + 80001094: 010687bb addw a5,a3,a6 + 80001098: 02079793 slli a5,a5,0x20 + 8000109c: 01e7d793 srli a5,a5,0x1e + 800010a0: 00fd87b3 add a5,s11,a5 + 800010a4: 00060713 mv a4,a2 + 800010a8: 0007a603 lw a2,0(a5) + 800010ac: 03051513 slli a0,a0,0x30 + 800010b0: 03055513 srli a0,a0,0x30 + 800010b4: 00c72733 slt a4,a4,a2 + 800010b8: 00b605bb addw a1,a2,a1 + 800010bc: 00a5079b addiw a5,a0,10 + 800010c0: 00a7073b addw a4,a4,a0 + 800010c4: fab9cee3 blt s3,a1,80001080 + 800010c8: 0107151b slliw a0,a4,0x10 + 800010cc: 0016869b addiw a3,a3,1 + 800010d0: 4105551b sraiw a0,a0,0x10 + 800010d4: fd26e0e3 bltu a3,s2,80001094 + 800010d8: 0018889b addiw a7,a7,1 + 800010dc: 0109083b addw a6,s2,a6 + 800010e0: f928ece3 bltu a7,s2,80001078 + 800010e4: 00048593 mv a1,s1 + 800010e8: fe8ff0ef jal ra,800008d0 + 800010ec: 000a0613 mv a2,s4 + 800010f0: 000d8593 mv a1,s11 + 800010f4: 00050493 mv s1,a0 + 800010f8: 000b0693 mv a3,s6 + 800010fc: 00090513 mv a0,s2 + 80001100: bd1ff0ef jal ra,80000cd0 + 80001104: 00000813 li a6,0 + 80001108: 00000513 li a0,0 + 8000110c: 00000613 li a2,0 + 80001110: 00000593 li a1,0 + 80001114: 00000893 li a7,0 + 80001118: 00000693 li a3,0 + 8000111c: 0180006f j 80001134 + 80001120: 0107951b slliw a0,a5,0x10 + 80001124: 0016869b addiw a3,a3,1 + 80001128: 4105551b sraiw a0,a0,0x10 + 8000112c: 00000593 li a1,0 + 80001130: 0526f463 bgeu a3,s2,80001178 + 80001134: 010687bb addw a5,a3,a6 + 80001138: 02079793 slli a5,a5,0x20 + 8000113c: 01e7d793 srli a5,a5,0x1e + 80001140: 00fd87b3 add a5,s11,a5 + 80001144: 00060713 mv a4,a2 + 80001148: 0007a603 lw a2,0(a5) + 8000114c: 03051513 slli a0,a0,0x30 + 80001150: 03055513 srli a0,a0,0x30 + 80001154: 00c72733 slt a4,a4,a2 + 80001158: 00b605bb addw a1,a2,a1 + 8000115c: 00a5079b addiw a5,a0,10 + 80001160: 00a7073b addw a4,a4,a0 + 80001164: fab9cee3 blt s3,a1,80001120 + 80001168: 0107151b slliw a0,a4,0x10 + 8000116c: 0016869b addiw a3,a3,1 + 80001170: 4105551b sraiw a0,a0,0x10 + 80001174: fd26e0e3 bltu a3,s2,80001134 + 80001178: 0018889b addiw a7,a7,1 + 8000117c: 0109083b addw a6,s2,a6 + 80001180: f928ece3 bltu a7,s2,80001118 + 80001184: 00048593 mv a1,s1 + 80001188: f48ff0ef jal ra,800008d0 + 8000118c: 00000613 li a2,0 + 80001190: 00000593 li a1,0 + 80001194: 00000713 li a4,0 + 80001198: 00c707bb addw a5,a4,a2 + 8000119c: 02079793 slli a5,a5,0x20 + 800011a0: 01f7d793 srli a5,a5,0x1f + 800011a4: 00fa07b3 add a5,s4,a5 + 800011a8: 0007d683 lhu a3,0(a5) + 800011ac: 0017071b addiw a4,a4,1 + 800011b0: 408686bb subw a3,a3,s0 + 800011b4: 00d79023 sh a3,0(a5) + 800011b8: ff2760e3 bltu a4,s2,80001198 + 800011bc: 0015859b addiw a1,a1,1 + 800011c0: 00c9063b addw a2,s2,a2 + 800011c4: fd25e8e3 bltu a1,s2,80001194 + 800011c8: 07813083 ld ra,120(sp) + 800011cc: 07013403 ld s0,112(sp) + 800011d0: 0105151b slliw a0,a0,0x10 + 800011d4: 06813483 ld s1,104(sp) + 800011d8: 06013903 ld s2,96(sp) + 800011dc: 05813983 ld s3,88(sp) + 800011e0: 05013a03 ld s4,80(sp) + 800011e4: 04813a83 ld s5,72(sp) + 800011e8: 04013b03 ld s6,64(sp) + 800011ec: 03813b83 ld s7,56(sp) + 800011f0: 03013c03 ld s8,48(sp) + 800011f4: 02813c83 ld s9,40(sp) + 800011f8: 02013d03 ld s10,32(sp) + 800011fc: 01813d83 ld s11,24(sp) + 80001200: 4105551b sraiw a0,a0,0x10 + 80001204: 08010113 addi sp,sp,128 + 80001208: 00008067 ret + 8000120c: 00000593 li a1,0 + 80001210: ec0ff0ef jal ra,800008d0 + 80001214: 000b0693 mv a3,s6 + 80001218: 000a0613 mv a2,s4 + 8000121c: 00050413 mv s0,a0 + 80001220: 000d8593 mv a1,s11 + 80001224: 00000513 li a0,0 + 80001228: 8a9ff0ef jal ra,80000ad0 + 8000122c: 00040593 mv a1,s0 + 80001230: 00000513 li a0,0 + 80001234: e9cff0ef jal ra,800008d0 + 80001238: 000b0693 mv a3,s6 + 8000123c: 000a0613 mv a2,s4 + 80001240: 00050413 mv s0,a0 + 80001244: 000d8593 mv a1,s11 + 80001248: 00000513 li a0,0 + 8000124c: 965ff0ef jal ra,80000bb0 + 80001250: 00040593 mv a1,s0 + 80001254: 00000513 li a0,0 + 80001258: e78ff0ef jal ra,800008d0 + 8000125c: 00050413 mv s0,a0 + 80001260: 000d8593 mv a1,s11 + 80001264: 000b0693 mv a3,s6 + 80001268: 000a0613 mv a2,s4 + 8000126c: 00000513 li a0,0 + 80001270: a61ff0ef jal ra,80000cd0 + 80001274: 00040593 mv a1,s0 + 80001278: 00000513 li a0,0 + 8000127c: e54ff0ef jal ra,800008d0 + 80001280: f49ff06f j 800011c8 + +0000000080001284 : + 80001284: ff010113 addi sp,sp,-16 + 80001288: 00813023 sd s0,0(sp) + 8000128c: 01053683 ld a3,16(a0) + 80001290: 00060413 mv s0,a2 + 80001294: 00058713 mv a4,a1 + 80001298: 00853603 ld a2,8(a0) + 8000129c: 01853583 ld a1,24(a0) + 800012a0: 00052503 lw a0,0(a0) + 800012a4: 00113423 sd ra,8(sp) + 800012a8: b5dff0ef jal ra,80000e04 + 800012ac: 00040593 mv a1,s0 + 800012b0: 00013403 ld s0,0(sp) + 800012b4: 00813083 ld ra,8(sp) + 800012b8: 01010113 addi sp,sp,16 + 800012bc: e14ff06f j 800008d0 + +00000000800012c0 : + 800012c0: fd010113 addi sp,sp,-48 + 800012c4: fff5081b addiw a6,a0,-1 + 800012c8: 02813423 sd s0,40(sp) + 800012cc: 02913023 sd s1,32(sp) + 800012d0: 01213c23 sd s2,24(sp) + 800012d4: 01313823 sd s3,16(sp) + 800012d8: 01413423 sd s4,8(sp) + 800012dc: 00100713 li a4,1 + 800012e0: 00080e93 mv t4,a6 + 800012e4: 17077a63 bgeu a4,a6,80001458 + 800012e8: 0015859b addiw a1,a1,1 + 800012ec: 03059693 slli a3,a1,0x30 + 800012f0: 0306d693 srli a3,a3,0x30 + 800012f4: 0036d793 srli a5,a3,0x3 + 800012f8: 00700313 li t1,7 + 800012fc: 0076f493 andi s1,a3,7 + 80001300: 00000413 li s0,0 + 80001304: 00003397 auipc t2,0x3 + 80001308: 90438393 addi t2,t2,-1788 # 80003c08 + 8000130c: 00400893 li a7,4 + 80001310: 00003297 auipc t0,0x3 + 80001314: 95828293 addi t0,t0,-1704 # 80003c68 + 80001318: 00100593 li a1,1 + 8000131c: 00003f97 auipc t6,0x3 + 80001320: 90cf8f93 addi t6,t6,-1780 # 80003c28 + 80001324: 00003f17 auipc t5,0x3 + 80001328: 924f0f13 addi t5,t5,-1756 # 80003c48 + 8000132c: 02c00e13 li t3,44 + 80001330: 0037f793 andi a5,a5,3 + 80001334: 08648663 beq s1,t1,800013c0 + 80001338: 1098e463 bltu a7,s1,80001440 + 8000133c: ffd4871b addiw a4,s1,-3 + 80001340: 03071713 slli a4,a4,0x30 + 80001344: 03075713 srli a4,a4,0x30 + 80001348: 00379793 slli a5,a5,0x3 + 8000134c: 0ee5e063 bltu a1,a4,8000142c + 80001350: 00ff87b3 add a5,t6,a5 + 80001354: 0007b783 ld a5,0(a5) + 80001358: 00900913 li s2,9 + 8000135c: 00800493 li s1,8 + 80001360: 0124093b addw s2,s0,s2 + 80001364: 07097c63 bgeu s2,a6,800013dc + 80001368: 02041a13 slli s4,s0,0x20 + 8000136c: 020a5a13 srli s4,s4,0x20 + 80001370: 02049413 slli s0,s1,0x20 + 80001374: 01460733 add a4,a2,s4 + 80001378: 02045413 srli s0,s0,0x20 + 8000137c: 009784b3 add s1,a5,s1 + 80001380: 0007c983 lbu s3,0(a5) + 80001384: 00178793 addi a5,a5,1 + 80001388: 00170713 addi a4,a4,1 + 8000138c: ff370fa3 sb s3,-1(a4) + 80001390: fef498e3 bne s1,a5,80001380 + 80001394: 0016869b addiw a3,a3,1 + 80001398: 008607b3 add a5,a2,s0 + 8000139c: 03069693 slli a3,a3,0x30 + 800013a0: 01478433 add s0,a5,s4 + 800013a4: 0306d693 srli a3,a3,0x30 + 800013a8: 01c40023 sb t3,0(s0) + 800013ac: 0036d793 srli a5,a3,0x3 + 800013b0: 0076f493 andi s1,a3,7 + 800013b4: 00090413 mv s0,s2 + 800013b8: 0037f793 andi a5,a5,3 + 800013bc: f6649ee3 bne s1,t1,80001338 + 800013c0: 00379793 slli a5,a5,0x3 + 800013c4: 00900913 li s2,9 + 800013c8: 00f387b3 add a5,t2,a5 + 800013cc: 0124093b addw s2,s0,s2 + 800013d0: 0007b783 ld a5,0(a5) + 800013d4: 00800493 li s1,8 + 800013d8: f90968e3 bltu s2,a6,80001368 + 800013dc: 02a47a63 bgeu s0,a0,80001410 + 800013e0: 02041793 slli a5,s0,0x20 + 800013e4: 408e8ebb subw t4,t4,s0 + 800013e8: 0207d793 srli a5,a5,0x20 + 800013ec: 00160713 addi a4,a2,1 + 800013f0: 020e9e93 slli t4,t4,0x20 + 800013f4: 00f70733 add a4,a4,a5 + 800013f8: 020ede93 srli t4,t4,0x20 + 800013fc: 00f607b3 add a5,a2,a5 + 80001400: 01d70733 add a4,a4,t4 + 80001404: 00078023 sb zero,0(a5) + 80001408: 00178793 addi a5,a5,1 + 8000140c: fef71ce3 bne a4,a5,80001404 + 80001410: 02813403 ld s0,40(sp) + 80001414: 02013483 ld s1,32(sp) + 80001418: 01813903 ld s2,24(sp) + 8000141c: 01013983 ld s3,16(sp) + 80001420: 00813a03 ld s4,8(sp) + 80001424: 03010113 addi sp,sp,48 + 80001428: 00008067 ret + 8000142c: 00ff07b3 add a5,t5,a5 + 80001430: 0007b783 ld a5,0(a5) + 80001434: 00500913 li s2,5 + 80001438: 00400493 li s1,4 + 8000143c: f25ff06f j 80001360 + 80001440: 00379793 slli a5,a5,0x3 + 80001444: 00f287b3 add a5,t0,a5 + 80001448: 0007b783 ld a5,0(a5) + 8000144c: 00900913 li s2,9 + 80001450: 00800493 li s1,8 + 80001454: f0dff06f j 80001360 + 80001458: 00000413 li s0,0 + 8000145c: f85ff06f j 800013e0 + +0000000080001460 : + 80001460: 00053783 ld a5,0(a0) + 80001464: 00050e13 mv t3,a0 + 80001468: 00000513 li a0,0 + 8000146c: 0007c703 lbu a4,0(a5) + 80001470: 00078813 mv a6,a5 + 80001474: 0c070c63 beqz a4,8000154c + 80001478: 02c00693 li a3,44 + 8000147c: 00178813 addi a6,a5,1 + 80001480: 2ad70863 beq a4,a3,80001730 + 80001484: 0005a503 lw a0,0(a1) + 80001488: fd07061b addiw a2,a4,-48 + 8000148c: 0ff67613 andi a2,a2,255 + 80001490: 00900893 li a7,9 + 80001494: 0015051b addiw a0,a0,1 + 80001498: 0ac8ee63 bltu a7,a2,80001554 + 8000149c: 00a5a023 sw a0,0(a1) + 800014a0: 0017c883 lbu a7,1(a5) + 800014a4: 16088063 beqz a7,80001604 + 800014a8: 00278713 addi a4,a5,2 + 800014ac: 14d88a63 beq a7,a3,80001600 + 800014b0: fd08851b addiw a0,a7,-48 + 800014b4: 02e00793 li a5,46 + 800014b8: 00900693 li a3,9 + 800014bc: 02c00613 li a2,44 + 800014c0: 0ff57513 andi a0,a0,255 + 800014c4: 02f88663 beq a7,a5,800014f0 + 800014c8: 0ca6e063 bltu a3,a0,80001588 + 800014cc: 00184883 lbu a7,1(a6) + 800014d0: 00170513 addi a0,a4,1 + 800014d4: 00070813 mv a6,a4 + 800014d8: 12088463 beqz a7,80001600 + 800014dc: 28c88863 beq a7,a2,8000176c + 800014e0: 00050713 mv a4,a0 + 800014e4: fd08851b addiw a0,a7,-48 + 800014e8: 0ff57513 andi a0,a0,255 + 800014ec: fcf89ee3 bne a7,a5,800014c8 + 800014f0: 0105a783 lw a5,16(a1) + 800014f4: 00500513 li a0,5 + 800014f8: 0017879b addiw a5,a5,1 + 800014fc: 00f5a823 sw a5,16(a1) + 80001500: 00184303 lbu t1,1(a6) + 80001504: 00070813 mv a6,a4 + 80001508: 04030263 beqz t1,8000154c + 8000150c: 02c00793 li a5,44 + 80001510: 00170893 addi a7,a4,1 + 80001514: 20f30863 beq t1,a5,80001724 + 80001518: 04500793 li a5,69 + 8000151c: 00900693 li a3,9 + 80001520: 02c00613 li a2,44 + 80001524: fd03051b addiw a0,t1,-48 + 80001528: 0df37313 andi t1,t1,223 + 8000152c: 0ff57513 andi a0,a0,255 + 80001530: 0cf30e63 beq t1,a5,8000160c + 80001534: 1aa6f063 bgeu a3,a0,800016d4 + 80001538: 0145a783 lw a5,20(a1) + 8000153c: 00088813 mv a6,a7 + 80001540: 00100513 li a0,1 + 80001544: 0017879b addiw a5,a5,1 + 80001548: 00f5aa23 sw a5,20(a1) + 8000154c: 010e3023 sd a6,0(t3) + 80001550: 00008067 ret + 80001554: 02b00613 li a2,43 + 80001558: 04c70663 beq a4,a2,800015a4 + 8000155c: 02d00613 li a2,45 + 80001560: 04c70263 beq a4,a2,800015a4 + 80001564: 02e00613 li a2,46 + 80001568: 18c70463 beq a4,a2,800016f0 + 8000156c: 0045a783 lw a5,4(a1) + 80001570: 00a5a023 sw a0,0(a1) + 80001574: 00100513 li a0,1 + 80001578: 0017879b addiw a5,a5,1 + 8000157c: 00f5a223 sw a5,4(a1) + 80001580: 010e3023 sd a6,0(t3) + 80001584: 00008067 ret + 80001588: 0105a783 lw a5,16(a1) + 8000158c: 00070813 mv a6,a4 + 80001590: 00100513 li a0,1 + 80001594: 0017879b addiw a5,a5,1 + 80001598: 00f5a823 sw a5,16(a1) + 8000159c: 010e3023 sd a6,0(t3) + 800015a0: 00008067 ret + 800015a4: 00a5a023 sw a0,0(a1) + 800015a8: 0017c603 lbu a2,1(a5) + 800015ac: 1a060663 beqz a2,80001758 + 800015b0: 00278813 addi a6,a5,2 + 800015b4: 1ad60263 beq a2,a3,80001758 + 800015b8: 0085a683 lw a3,8(a1) + 800015bc: fd06071b addiw a4,a2,-48 + 800015c0: 0ff77713 andi a4,a4,255 + 800015c4: 00900513 li a0,9 + 800015c8: 0016869b addiw a3,a3,1 + 800015cc: 00e57e63 bgeu a0,a4,800015e8 + 800015d0: 02e00713 li a4,46 + 800015d4: 12e60c63 beq a2,a4,8000170c + 800015d8: 00d5a423 sw a3,8(a1) + 800015dc: 00100513 li a0,1 + 800015e0: 010e3023 sd a6,0(t3) + 800015e4: 00008067 ret + 800015e8: 00d5a423 sw a3,8(a1) + 800015ec: 0027c883 lbu a7,2(a5) + 800015f0: 00088a63 beqz a7,80001604 + 800015f4: 02c00793 li a5,44 + 800015f8: 00180713 addi a4,a6,1 + 800015fc: eaf89ae3 bne a7,a5,800014b0 + 80001600: 00070813 mv a6,a4 + 80001604: 00400513 li a0,4 + 80001608: f45ff06f j 8000154c + 8000160c: 0145a783 lw a5,20(a1) + 80001610: 0017879b addiw a5,a5,1 + 80001614: 00f5aa23 sw a5,20(a1) + 80001618: 00174783 lbu a5,1(a4) + 8000161c: 12078463 beqz a5,80001744 + 80001620: 02c00693 li a3,44 + 80001624: 00188813 addi a6,a7,1 + 80001628: 12d78063 beq a5,a3,80001748 + 8000162c: 00c5a703 lw a4,12(a1) + 80001630: fd57879b addiw a5,a5,-43 + 80001634: 0fd7f793 andi a5,a5,253 + 80001638: 0017071b addiw a4,a4,1 + 8000163c: 00e5a623 sw a4,12(a1) + 80001640: 00078863 beqz a5,80001650 + 80001644: 00100513 li a0,1 + 80001648: 010e3023 sd a6,0(t3) + 8000164c: 00008067 ret + 80001650: 0018c783 lbu a5,1(a7) + 80001654: 0e078e63 beqz a5,80001750 + 80001658: 00288813 addi a6,a7,2 + 8000165c: 0ed78a63 beq a5,a3,80001750 + 80001660: 0185a703 lw a4,24(a1) + 80001664: fd07879b addiw a5,a5,-48 + 80001668: 0ff7f793 andi a5,a5,255 + 8000166c: 0017071b addiw a4,a4,1 + 80001670: 00900613 li a2,9 + 80001674: 00e5ac23 sw a4,24(a1) + 80001678: fcf666e3 bltu a2,a5,80001644 + 8000167c: 0028c703 lbu a4,2(a7) + 80001680: 0a070e63 beqz a4,8000173c + 80001684: 00388793 addi a5,a7,3 + 80001688: 0ad70863 beq a4,a3,80001738 + 8000168c: 00900693 li a3,9 + 80001690: 02c00513 li a0,44 + 80001694: fd07071b addiw a4,a4,-48 + 80001698: 0ff77713 andi a4,a4,255 + 8000169c: 00e6fe63 bgeu a3,a4,800016b8 + 800016a0: 0045a703 lw a4,4(a1) + 800016a4: 00078813 mv a6,a5 + 800016a8: 00100513 li a0,1 + 800016ac: 0017079b addiw a5,a4,1 + 800016b0: 00f5a223 sw a5,4(a1) + 800016b4: e99ff06f j 8000154c + 800016b8: 00184703 lbu a4,1(a6) + 800016bc: 00178613 addi a2,a5,1 + 800016c0: 00078813 mv a6,a5 + 800016c4: 06070a63 beqz a4,80001738 + 800016c8: 08a70c63 beq a4,a0,80001760 + 800016cc: 00060793 mv a5,a2 + 800016d0: fc5ff06f j 80001694 + 800016d4: 00174303 lbu t1,1(a4) + 800016d8: 00188813 addi a6,a7,1 + 800016dc: 00088713 mv a4,a7 + 800016e0: 04030263 beqz t1,80001724 + 800016e4: 04c30263 beq t1,a2,80001728 + 800016e8: 00080893 mv a7,a6 + 800016ec: e39ff06f j 80001524 + 800016f0: 00a5a023 sw a0,0(a1) + 800016f4: 0017c303 lbu t1,1(a5) + 800016f8: 02030863 beqz t1,80001728 + 800016fc: 00278893 addi a7,a5,2 + 80001700: 02d30263 beq t1,a3,80001724 + 80001704: 00080713 mv a4,a6 + 80001708: e11ff06f j 80001518 + 8000170c: 00d5a423 sw a3,8(a1) + 80001710: 0027c303 lbu t1,2(a5) + 80001714: 00030a63 beqz t1,80001728 + 80001718: 02c00793 li a5,44 + 8000171c: 00180893 addi a7,a6,1 + 80001720: fef312e3 bne t1,a5,80001704 + 80001724: 00088813 mv a6,a7 + 80001728: 00500513 li a0,5 + 8000172c: e21ff06f j 8000154c + 80001730: 00000513 li a0,0 + 80001734: e19ff06f j 8000154c + 80001738: 00078813 mv a6,a5 + 8000173c: 00700513 li a0,7 + 80001740: e0dff06f j 8000154c + 80001744: 00088813 mv a6,a7 + 80001748: 00300513 li a0,3 + 8000174c: e01ff06f j 8000154c + 80001750: 00600513 li a0,6 + 80001754: df9ff06f j 8000154c + 80001758: 00200513 li a0,2 + 8000175c: df1ff06f j 8000154c + 80001760: 00060813 mv a6,a2 + 80001764: 00700513 li a0,7 + 80001768: de5ff06f j 8000154c + 8000176c: 00050813 mv a6,a0 + 80001770: 00400513 li a0,4 + 80001774: dd9ff06f j 8000154c + +0000000080001778 : + 80001778: f6010113 addi sp,sp,-160 + 8000177c: 08813823 sd s0,144(sp) + 80001780: 09213023 sd s2,128(sp) + 80001784: 01010413 addi s0,sp,16 + 80001788: 03010913 addi s2,sp,48 + 8000178c: 08913423 sd s1,136(sp) + 80001790: 07313c23 sd s3,120(sp) + 80001794: 07413823 sd s4,112(sp) + 80001798: 07513423 sd s5,104(sp) + 8000179c: 07613023 sd s6,96(sp) + 800017a0: 05713c23 sd s7,88(sp) + 800017a4: 00068a13 mv s4,a3 + 800017a8: 00070993 mv s3,a4 + 800017ac: 00078493 mv s1,a5 + 800017b0: 08113c23 sd ra,152(sp) + 800017b4: 05813823 sd s8,80(sp) + 800017b8: 00058a93 mv s5,a1 + 800017bc: 00050b93 mv s7,a0 + 800017c0: 00060b13 mv s6,a2 + 800017c4: 00b13423 sd a1,8(sp) + 800017c8: 05010693 addi a3,sp,80 + 800017cc: 00040713 mv a4,s0 + 800017d0: 00090793 mv a5,s2 + 800017d4: 0007a023 sw zero,0(a5) + 800017d8: 00072023 sw zero,0(a4) + 800017dc: 00478793 addi a5,a5,4 + 800017e0: 00470713 addi a4,a4,4 + 800017e4: fed798e3 bne a5,a3,800017d4 + 800017e8: 000ac703 lbu a4,0(s5) + 800017ec: 14070663 beqz a4,80001938 + 800017f0: 00810c13 addi s8,sp,8 + 800017f4: 03010593 addi a1,sp,48 + 800017f8: 000c0513 mv a0,s8 + 800017fc: c65ff0ef jal ra,80001460 + 80001800: 02051813 slli a6,a0,0x20 + 80001804: 05010793 addi a5,sp,80 + 80001808: 01e85813 srli a6,a6,0x1e + 8000180c: 01078833 add a6,a5,a6 + 80001810: 00813703 ld a4,8(sp) + 80001814: fc082783 lw a5,-64(a6) + 80001818: 00074703 lbu a4,0(a4) + 8000181c: 0017879b addiw a5,a5,1 + 80001820: fcf82023 sw a5,-64(a6) + 80001824: fc0718e3 bnez a4,800017f4 + 80001828: 020b9b93 slli s7,s7,0x20 + 8000182c: 020bdb93 srli s7,s7,0x20 + 80001830: 01513423 sd s5,8(sp) + 80001834: 017a8bb3 add s7,s5,s7 + 80001838: 000ac703 lbu a4,0(s5) + 8000183c: 117afa63 bgeu s5,s7,80001950 + 80001840: 000a8793 mv a5,s5 + 80001844: 02c00613 li a2,44 + 80001848: 0080006f j 80001850 + 8000184c: 0007c703 lbu a4,0(a5) + 80001850: 016746b3 xor a3,a4,s6 + 80001854: 00c70463 beq a4,a2,8000185c + 80001858: 00d78023 sb a3,0(a5) + 8000185c: 00813783 ld a5,8(sp) + 80001860: 013787b3 add a5,a5,s3 + 80001864: 00f13423 sd a5,8(sp) + 80001868: ff77e2e3 bltu a5,s7,8000184c + 8000186c: 000ac783 lbu a5,0(s5) + 80001870: 01513423 sd s5,8(sp) + 80001874: 00810c13 addi s8,sp,8 + 80001878: 04078063 beqz a5,800018b8 + 8000187c: 03010593 addi a1,sp,48 + 80001880: 000c0513 mv a0,s8 + 80001884: bddff0ef jal ra,80001460 + 80001888: 02051613 slli a2,a0,0x20 + 8000188c: 05010793 addi a5,sp,80 + 80001890: 01e65613 srli a2,a2,0x1e + 80001894: 00c78633 add a2,a5,a2 + 80001898: 00813703 ld a4,8(sp) + 8000189c: fc062783 lw a5,-64(a2) + 800018a0: 00074703 lbu a4,0(a4) + 800018a4: 0017879b addiw a5,a5,1 + 800018a8: fcf62023 sw a5,-64(a2) + 800018ac: fc0718e3 bnez a4,8000187c + 800018b0: 01513423 sd s5,8(sp) + 800018b4: 037af463 bgeu s5,s7,800018dc + 800018b8: 02c00693 li a3,44 + 800018bc: 000ac783 lbu a5,0(s5) + 800018c0: 0147c733 xor a4,a5,s4 + 800018c4: 00d78463 beq a5,a3,800018cc + 800018c8: 00ea8023 sb a4,0(s5) + 800018cc: 00813a83 ld s5,8(sp) + 800018d0: 013a8ab3 add s5,s5,s3 + 800018d4: 01513423 sd s5,8(sp) + 800018d8: ff7ae2e3 bltu s5,s7,800018bc + 800018dc: 02040993 addi s3,s0,32 + 800018e0: 00042503 lw a0,0(s0) + 800018e4: 00048593 mv a1,s1 + 800018e8: 00440413 addi s0,s0,4 + 800018ec: fb1fe0ef jal ra,8000089c + 800018f0: 00050593 mv a1,a0 + 800018f4: 00092503 lw a0,0(s2) + 800018f8: 00490913 addi s2,s2,4 + 800018fc: fa1fe0ef jal ra,8000089c + 80001900: 00050493 mv s1,a0 + 80001904: fc899ee3 bne s3,s0,800018e0 + 80001908: 09813083 ld ra,152(sp) + 8000190c: 09013403 ld s0,144(sp) + 80001910: 08813483 ld s1,136(sp) + 80001914: 08013903 ld s2,128(sp) + 80001918: 07813983 ld s3,120(sp) + 8000191c: 07013a03 ld s4,112(sp) + 80001920: 06813a83 ld s5,104(sp) + 80001924: 06013b03 ld s6,96(sp) + 80001928: 05813b83 ld s7,88(sp) + 8000192c: 05013c03 ld s8,80(sp) + 80001930: 0a010113 addi sp,sp,160 + 80001934: 00008067 ret + 80001938: 020b9b93 slli s7,s7,0x20 + 8000193c: 020bdb93 srli s7,s7,0x20 + 80001940: 01513423 sd s5,8(sp) + 80001944: 017a8bb3 add s7,s5,s7 + 80001948: ef7aece3 bltu s5,s7,80001840 + 8000194c: f91ff06f j 800018dc + 80001950: f20716e3 bnez a4,8000187c + 80001954: f89ff06f j 800018dc + +0000000080001958 : + 80001958: fe010113 addi sp,sp,-32 + 8000195c: 01213023 sd s2,0(sp) + 80001960: 02c52903 lw s2,44(a0) + 80001964: 00113c23 sd ra,24(sp) + 80001968: 00813823 sd s0,16(sp) + 8000196c: 00913423 sd s1,8(sp) + 80001970: 06053023 sd zero,96(a0) + 80001974: 04090663 beqz s2,800019c0 + 80001978: 00050413 mv s0,a0 + 8000197c: 00000493 li s1,0 + 80001980: 00100593 li a1,1 + 80001984: 00040513 mv a0,s0 + 80001988: a01fe0ef jal ra,80000388 + 8000198c: 06045583 lhu a1,96(s0) + 80001990: e89fe0ef jal ra,80000818 + 80001994: fff00593 li a1,-1 + 80001998: 06a41023 sh a0,96(s0) + 8000199c: 00040513 mv a0,s0 + 800019a0: 9e9fe0ef jal ra,80000388 + 800019a4: 06045583 lhu a1,96(s0) + 800019a8: e71fe0ef jal ra,80000818 + 800019ac: 06a41023 sh a0,96(s0) + 800019b0: 00049463 bnez s1,800019b8 + 800019b4: 06a41123 sh a0,98(s0) + 800019b8: 0014849b addiw s1,s1,1 + 800019bc: fc9912e3 bne s2,s1,80001980 + 800019c0: 01813083 ld ra,24(sp) + 800019c4: 01013403 ld s0,16(sp) + 800019c8: 00813483 ld s1,8(sp) + 800019cc: 00013903 ld s2,0(sp) + 800019d0: 00000513 li a0,0 + 800019d4: 02010113 addi sp,sp,32 + 800019d8: 00008067 ret + +00000000800019dc
: + 800019dc: f2010113 addi sp,sp,-224 + 800019e0: 0c113c23 sd ra,216(sp) + 800019e4: 0c813823 sd s0,208(sp) + 800019e8: 0c913423 sd s1,200(sp) + 800019ec: 00058413 mv s0,a1 + 800019f0: 0d213023 sd s2,192(sp) + 800019f4: 0b313c23 sd s3,184(sp) + 800019f8: 0b413823 sd s4,176(sp) + 800019fc: 0b513423 sd s5,168(sp) + 80001a00: 0b613023 sd s6,160(sp) + 80001a04: 09713c23 sd s7,152(sp) + 80001a08: 09813823 sd s8,144(sp) + 80001a0c: 09913423 sd s9,136(sp) + 80001a10: 09a13023 sd s10,128(sp) + 80001a14: 00a12623 sw a0,12(sp) + 80001a18: 21d000ef jal ra,80002434 + 80001a1c: 3e800593 li a1,1000 + 80001a20: 00002517 auipc a0,0x2 + 80001a24: 26850513 addi a0,a0,616 # 80003c88 + 80001a28: 5e1010ef jal ra,80003808 + 80001a2c: 00040613 mv a2,s0 + 80001a30: 00c10593 addi a1,sp,12 + 80001a34: 07a10513 addi a0,sp,122 + 80001a38: 7f4000ef jal ra,8000222c + 80001a3c: 00100513 li a0,1 + 80001a40: d71fe0ef jal ra,800007b0 + 80001a44: 00050793 mv a5,a0 + 80001a48: 00200513 li a0,2 + 80001a4c: 00f11823 sh a5,16(sp) + 80001a50: d61fe0ef jal ra,800007b0 + 80001a54: 00050793 mv a5,a0 + 80001a58: 00300513 li a0,3 + 80001a5c: 00f11923 sh a5,18(sp) + 80001a60: d51fe0ef jal ra,800007b0 + 80001a64: 00050793 mv a5,a0 + 80001a68: 00400513 li a0,4 + 80001a6c: 00f11a23 sh a5,20(sp) + 80001a70: d41fe0ef jal ra,800007b0 + 80001a74: 00050793 mv a5,a0 + 80001a78: 00500513 li a0,5 + 80001a7c: 02f12e23 sw a5,60(sp) + 80001a80: d31fe0ef jal ra,800007b0 + 80001a84: 0005051b sext.w a0,a0 + 80001a88: 5e050263 beqz a0,8000206c + 80001a8c: 04a12023 sw a0,64(sp) + 80001a90: 01013783 ld a5,16(sp) + 80001a94: 01079713 slli a4,a5,0x10 + 80001a98: 00071a63 bnez a4,80001aac + 80001a9c: 06600793 li a5,102 + 80001aa0: 00012823 sw zero,16(sp) + 80001aa4: 00f11a23 sh a5,20(sp) + 80001aa8: 01013783 ld a5,16(sp) + 80001aac: 01079793 slli a5,a5,0x10 + 80001ab0: 0107d793 srli a5,a5,0x10 + 80001ab4: 00100713 li a4,1 + 80001ab8: 00e79c63 bne a5,a4,80001ad0 + 80001abc: 341537b7 lui a5,0x34153 + 80001ac0: 4157879b addiw a5,a5,1045 + 80001ac4: 00f12823 sw a5,16(sp) + 80001ac8: 06600793 li a5,102 + 80001acc: 00f11a23 sh a5,20(sp) + 80001ad0: 04012403 lw s0,64(sp) + 80001ad4: 00003a17 auipc s4,0x3 + 80001ad8: cfca0a13 addi s4,s4,-772 # 800047d0 + 80001adc: 01413c23 sd s4,24(sp) + 80001ae0: 00147a93 andi s5,s0,1 + 80001ae4: 06011c23 sh zero,120(sp) + 80001ae8: 00247493 andi s1,s0,2 + 80001aec: 000a8593 mv a1,s5 + 80001af0: 00048863 beqz s1,80001b00 + 80001af4: 001a859b addiw a1,s5,1 + 80001af8: 03059593 slli a1,a1,0x30 + 80001afc: 0305d593 srli a1,a1,0x30 + 80001b00: 00447793 andi a5,s0,4 + 80001b04: 00078863 beqz a5,80001b14 + 80001b08: 0015859b addiw a1,a1,1 + 80001b0c: 03059593 slli a1,a1,0x30 + 80001b10: 0305d593 srli a1,a1,0x30 + 80001b14: 7d000513 li a0,2000 + 80001b18: 7d8000ef jal ra,800022f0 <__divdi3> + 80001b1c: 0005099b sext.w s3,a0 + 80001b20: 03312c23 sw s3,56(sp) + 80001b24: 00000913 li s2,0 + 80001b28: 00000b13 li s6,0 + 80001b2c: 00100c93 li s9,1 + 80001b30: 00300c13 li s8,3 + 80001b34: 012c97bb sllw a5,s9,s2 + 80001b38: 00f477b3 and a5,s0,a5 + 80001b3c: 0007879b sext.w a5,a5 + 80001b40: 4e079a63 bnez a5,80002034 + 80001b44: 00190913 addi s2,s2,1 + 80001b48: ff8916e3 bne s2,s8,80001b34 + 80001b4c: 260a9663 bnez s5,80001db8 + 80001b50: 28049463 bnez s1,80001dd8 + 80001b54: 00447413 andi s0,s0,4 + 80001b58: 00040a63 beqz s0,80001b6c + 80001b5c: 03013603 ld a2,48(sp) + 80001b60: 01011583 lh a1,16(sp) + 80001b64: 03812503 lw a0,56(sp) + 80001b68: f58ff0ef jal ra,800012c0 + 80001b6c: 03c12783 lw a5,60(sp) + 80001b70: 06079463 bnez a5,80001bd8 + 80001b74: 00100793 li a5,1 + 80001b78: 02f12e23 sw a5,60(sp) + 80001b7c: 03c12703 lw a4,60(sp) + 80001b80: 0027179b slliw a5,a4,0x2 + 80001b84: 00e787bb addw a5,a5,a4 + 80001b88: 0017979b slliw a5,a5,0x1 + 80001b8c: 02f12e23 sw a5,60(sp) + 80001b90: 608000ef jal ra,80002198 + 80001b94: 01010513 addi a0,sp,16 + 80001b98: dc1ff0ef jal ra,80001958 + 80001b9c: 638000ef jal ra,800021d4 + 80001ba0: 670000ef jal ra,80002210 + 80001ba4: 0005051b sext.w a0,a0 + 80001ba8: 680000ef jal ra,80002228 + 80001bac: 0005051b sext.w a0,a0 + 80001bb0: fc0506e3 beqz a0,80001b7c + 80001bb4: 02051593 slli a1,a0,0x20 + 80001bb8: 0205d593 srli a1,a1,0x20 + 80001bbc: 00a00513 li a0,10 + 80001bc0: 738000ef jal ra,800022f8 <__udivdi3> + 80001bc4: 00050593 mv a1,a0 + 80001bc8: 03c12503 lw a0,60(sp) + 80001bcc: 0015859b addiw a1,a1,1 + 80001bd0: 6bc000ef jal ra,8000228c <__muldi3> + 80001bd4: 02a12e23 sw a0,60(sp) + 80001bd8: 5c0000ef jal ra,80002198 + 80001bdc: 01010513 addi a0,sp,16 + 80001be0: d79ff0ef jal ra,80001958 + 80001be4: 5f0000ef jal ra,800021d4 + 80001be8: 628000ef jal ra,80002210 + 80001bec: 00050993 mv s3,a0 + 80001bf0: 01011503 lh a0,16(sp) + 80001bf4: 00000593 li a1,0 + 80001bf8: 0009899b sext.w s3,s3 + 80001bfc: cd5fe0ef jal ra,800008d0 + 80001c00: 00050593 mv a1,a0 + 80001c04: 01211503 lh a0,18(sp) + 80001c08: cc9fe0ef jal ra,800008d0 + 80001c0c: 00050593 mv a1,a0 + 80001c10: 01411503 lh a0,20(sp) + 80001c14: cbdfe0ef jal ra,800008d0 + 80001c18: 00050593 mv a1,a0 + 80001c1c: 03811503 lh a0,56(sp) + 80001c20: cb1fe0ef jal ra,800008d0 + 80001c24: 000087b7 lui a5,0x8 + 80001c28: 00050a1b sext.w s4,a0 + 80001c2c: b0578793 addi a5,a5,-1275 # 7b05 <_entry_offset+0x7b05> + 80001c30: 54fa0663 beq s4,a5,8000217c + 80001c34: 3d47ea63 bltu a5,s4,80002008 + 80001c38: 000027b7 lui a5,0x2 + 80001c3c: 8f278793 addi a5,a5,-1806 # 18f2 <_entry_offset+0x18f2> + 80001c40: 50fa0a63 beq s4,a5,80002154 + 80001c44: 000057b7 lui a5,0x5 + 80001c48: eaf78793 addi a5,a5,-337 # 4eaf <_entry_offset+0x4eaf> + 80001c4c: 1afa1c63 bne s4,a5,80001e04 + 80001c50: 00002517 auipc a0,0x2 + 80001c54: 0c050513 addi a0,a0,192 # 80003d10 + 80001c58: 3b1010ef jal ra,80003808 + 80001c5c: 00200a93 li s5,2 + 80001c60: 00002917 auipc s2,0x2 + 80001c64: 73890913 addi s2,s2,1848 # 80004398 + 80001c68: 00092783 lw a5,0(s2) + 80001c6c: 00000c93 li s9,0 + 80001c70: 00000c13 li s8,0 + 80001c74: 00000d13 li s10,0 + 80001c78: 50078c63 beqz a5,80002190 + 80001c7c: 001a9793 slli a5,s5,0x1 + 80001c80: 00002b97 auipc s7,0x2 + 80001c84: 3f8b8b93 addi s7,s7,1016 # 80004078 + 80001c88: 00002b17 auipc s6,0x2 + 80001c8c: 400b0b13 addi s6,s6,1024 # 80004088 + 80001c90: 00002a97 auipc s5,0x2 + 80001c94: 408a8a93 addi s5,s5,1032 # 80004098 + 80001c98: 00fb8bb3 add s7,s7,a5 + 80001c9c: 00fb0b33 add s6,s6,a5 + 80001ca0: 00fa8ab3 add s5,s5,a5 + 80001ca4: 0600006f j 80001d04 + 80001ca8: ff645603 lhu a2,-10(s0) + 80001cac: 000ad683 lhu a3,0(s5) + 80001cb0: 10d60063 beq a2,a3,80001db0 + 80001cb4: 000d0593 mv a1,s10 + 80001cb8: 00002517 auipc a0,0x2 + 80001cbc: 15850513 addi a0,a0,344 # 80003e10 + 80001cc0: 349010ef jal ra,80003808 + 80001cc4: ff845783 lhu a5,-8(s0) + 80001cc8: 0017879b addiw a5,a5,1 + 80001ccc: 03079793 slli a5,a5,0x30 + 80001cd0: 0307d793 srli a5,a5,0x30 + 80001cd4: fef41c23 sh a5,-8(s0) + 80001cd8: 001c0c1b addiw s8,s8,1 + 80001cdc: 00092703 lw a4,0(s2) + 80001ce0: 00fc87bb addw a5,s9,a5 + 80001ce4: 030c1c13 slli s8,s8,0x30 + 80001ce8: 030c5c13 srli s8,s8,0x30 + 80001cec: 03079493 slli s1,a5,0x30 + 80001cf0: 01079c9b slliw s9,a5,0x10 + 80001cf4: 0304d493 srli s1,s1,0x30 + 80001cf8: 410cdc9b sraiw s9,s9,0x10 + 80001cfc: 000c0d1b sext.w s10,s8 + 80001d00: 10ec7a63 bgeu s8,a4,80001e14 + 80001d04: 003d1413 slli s0,s10,0x3 + 80001d08: 41a404b3 sub s1,s0,s10 + 80001d0c: 08010793 addi a5,sp,128 + 80001d10: 00449493 slli s1,s1,0x4 + 80001d14: 009784b3 add s1,a5,s1 + 80001d18: fc04a783 lw a5,-64(s1) + 80001d1c: fe049c23 sh zero,-8(s1) + 80001d20: 0017f793 andi a5,a5,1 + 80001d24: 02078663 beqz a5,80001d50 + 80001d28: ff24d603 lhu a2,-14(s1) + 80001d2c: 000bd683 lhu a3,0(s7) + 80001d30: 02d60063 beq a2,a3,80001d50 + 80001d34: 000d0593 mv a1,s10 + 80001d38: 00002517 auipc a0,0x2 + 80001d3c: 07050513 addi a0,a0,112 # 80003da8 + 80001d40: 2c9010ef jal ra,80003808 + 80001d44: ff84d783 lhu a5,-8(s1) + 80001d48: 0017879b addiw a5,a5,1 + 80001d4c: fef49c23 sh a5,-8(s1) + 80001d50: 41a404b3 sub s1,s0,s10 + 80001d54: 08010793 addi a5,sp,128 + 80001d58: 00449493 slli s1,s1,0x4 + 80001d5c: 009784b3 add s1,a5,s1 + 80001d60: fc04a703 lw a4,-64(s1) + 80001d64: 00277793 andi a5,a4,2 + 80001d68: 02078863 beqz a5,80001d98 + 80001d6c: ff44d603 lhu a2,-12(s1) + 80001d70: 000b5683 lhu a3,0(s6) + 80001d74: 02d60263 beq a2,a3,80001d98 + 80001d78: 000d0593 mv a1,s10 + 80001d7c: 00002517 auipc a0,0x2 + 80001d80: 05c50513 addi a0,a0,92 # 80003dd8 + 80001d84: 285010ef jal ra,80003808 + 80001d88: ff84d783 lhu a5,-8(s1) + 80001d8c: fc04a703 lw a4,-64(s1) + 80001d90: 0017879b addiw a5,a5,1 + 80001d94: fef49c23 sh a5,-8(s1) + 80001d98: 41a40433 sub s0,s0,s10 + 80001d9c: 00441413 slli s0,s0,0x4 + 80001da0: 08010793 addi a5,sp,128 + 80001da4: 00477713 andi a4,a4,4 + 80001da8: 00878433 add s0,a5,s0 + 80001dac: ee071ee3 bnez a4,80001ca8 + 80001db0: ff845783 lhu a5,-8(s0) + 80001db4: f25ff06f j 80001cd8 + 80001db8: 01011603 lh a2,16(sp) + 80001dbc: 02013583 ld a1,32(sp) + 80001dc0: 00098513 mv a0,s3 + 80001dc4: 82dfe0ef jal ra,800005f0 + 80001dc8: 04012403 lw s0,64(sp) + 80001dcc: 04a13423 sd a0,72(sp) + 80001dd0: 00247493 andi s1,s0,2 + 80001dd4: d80480e3 beqz s1,80001b54 + 80001dd8: 01211603 lh a2,18(sp) + 80001ddc: 01011783 lh a5,16(sp) + 80001de0: 02813583 ld a1,40(sp) + 80001de4: 03812503 lw a0,56(sp) + 80001de8: 0106161b slliw a2,a2,0x10 + 80001dec: 00f66633 or a2,a2,a5 + 80001df0: 05010693 addi a3,sp,80 + 80001df4: 0006061b sext.w a2,a2 + 80001df8: aedfe0ef jal ra,800008e4 + 80001dfc: 04012403 lw s0,64(sp) + 80001e00: d55ff06f j 80001b54 + 80001e04: 00010437 lui s0,0x10 + 80001e08: fff40493 addi s1,s0,-1 # ffff <_entry_offset+0xffff> + 80001e0c: 00002917 auipc s2,0x2 + 80001e10: 58c90913 addi s2,s2,1420 # 80004398 + 80001e14: ac9fe0ef jal ra,800008dc + 80001e18: 03812583 lw a1,56(sp) + 80001e1c: 009504bb addw s1,a0,s1 + 80001e20: 00002517 auipc a0,0x2 + 80001e24: 02050513 addi a0,a0,32 # 80003e40 + 80001e28: 1e1010ef jal ra,80003808 + 80001e2c: 00098513 mv a0,s3 + 80001e30: 3f8000ef jal ra,80002228 + 80001e34: 0005059b sext.w a1,a0 + 80001e38: 00002517 auipc a0,0x2 + 80001e3c: 02050513 addi a0,a0,32 # 80003e58 + 80001e40: 1c9010ef jal ra,80003808 + 80001e44: 00092583 lw a1,0(s2) + 80001e48: 03c12503 lw a0,60(sp) + 80001e4c: 0104949b slliw s1,s1,0x10 + 80001e50: 4104d49b sraiw s1,s1,0x10 + 80001e54: 438000ef jal ra,8000228c <__muldi3> + 80001e58: 0005059b sext.w a1,a0 + 80001e5c: 00002517 auipc a0,0x2 + 80001e60: 01450513 addi a0,a0,20 # 80003e70 + 80001e64: 1a5010ef jal ra,80003808 + 80001e68: 00002597 auipc a1,0x2 + 80001e6c: 02058593 addi a1,a1,32 # 80003e88 + 80001e70: 00002517 auipc a0,0x2 + 80001e74: 02850513 addi a0,a0,40 # 80003e98 + 80001e78: 191010ef jal ra,80003808 + 80001e7c: 000a0593 mv a1,s4 + 80001e80: 00002517 auipc a0,0x2 + 80001e84: 03050513 addi a0,a0,48 # 80003eb0 + 80001e88: 181010ef jal ra,80003808 + 80001e8c: 04012783 lw a5,64(sp) + 80001e90: 0017f713 andi a4,a5,1 + 80001e94: 04070c63 beqz a4,80001eec + 80001e98: 00092703 lw a4,0(s2) + 80001e9c: 04070863 beqz a4,80001eec + 80001ea0: 00000413 li s0,0 + 80001ea4: 00000593 li a1,0 + 80001ea8: 00002a17 auipc s4,0x2 + 80001eac: 028a0a13 addi s4,s4,40 # 80003ed0 + 80001eb0: 00359793 slli a5,a1,0x3 + 80001eb4: 40b787b3 sub a5,a5,a1 + 80001eb8: 08010713 addi a4,sp,128 + 80001ebc: 00479793 slli a5,a5,0x4 + 80001ec0: 00f707b3 add a5,a4,a5 + 80001ec4: ff27d603 lhu a2,-14(a5) + 80001ec8: 000a0513 mv a0,s4 + 80001ecc: 0014041b addiw s0,s0,1 + 80001ed0: 139010ef jal ra,80003808 + 80001ed4: 00092783 lw a5,0(s2) + 80001ed8: 03041413 slli s0,s0,0x30 + 80001edc: 03045413 srli s0,s0,0x30 + 80001ee0: 0004059b sext.w a1,s0 + 80001ee4: fcf466e3 bltu s0,a5,80001eb0 + 80001ee8: 04012783 lw a5,64(sp) + 80001eec: 0027f713 andi a4,a5,2 + 80001ef0: 04070c63 beqz a4,80001f48 + 80001ef4: 00092703 lw a4,0(s2) + 80001ef8: 24070863 beqz a4,80002148 + 80001efc: 00000413 li s0,0 + 80001f00: 00000593 li a1,0 + 80001f04: 00002a17 auipc s4,0x2 + 80001f08: feca0a13 addi s4,s4,-20 # 80003ef0 + 80001f0c: 00359793 slli a5,a1,0x3 + 80001f10: 40b787b3 sub a5,a5,a1 + 80001f14: 08010713 addi a4,sp,128 + 80001f18: 00479793 slli a5,a5,0x4 + 80001f1c: 00f707b3 add a5,a4,a5 + 80001f20: ff47d603 lhu a2,-12(a5) + 80001f24: 000a0513 mv a0,s4 + 80001f28: 0014041b addiw s0,s0,1 + 80001f2c: 0dd010ef jal ra,80003808 + 80001f30: 00092783 lw a5,0(s2) + 80001f34: 03041413 slli s0,s0,0x30 + 80001f38: 03045413 srli s0,s0,0x30 + 80001f3c: 0004059b sext.w a1,s0 + 80001f40: fcf466e3 bltu s0,a5,80001f0c + 80001f44: 04012783 lw a5,64(sp) + 80001f48: 0047f793 andi a5,a5,4 + 80001f4c: 12079663 bnez a5,80002078 + 80001f50: 00092783 lw a5,0(s2) + 80001f54: 00000413 li s0,0 + 80001f58: 00000593 li a1,0 + 80001f5c: 00002a17 auipc s4,0x2 + 80001f60: feca0a13 addi s4,s4,-20 # 80003f48 + 80001f64: 02078e63 beqz a5,80001fa0 + 80001f68: 00359793 slli a5,a1,0x3 + 80001f6c: 40b787b3 sub a5,a5,a1 + 80001f70: 08010713 addi a4,sp,128 + 80001f74: 00479793 slli a5,a5,0x4 + 80001f78: 00f707b3 add a5,a4,a5 + 80001f7c: ff07d603 lhu a2,-16(a5) + 80001f80: 000a0513 mv a0,s4 + 80001f84: 0014041b addiw s0,s0,1 + 80001f88: 081010ef jal ra,80003808 + 80001f8c: 00092783 lw a5,0(s2) + 80001f90: 03041413 slli s0,s0,0x30 + 80001f94: 03045413 srli s0,s0,0x30 + 80001f98: 0004059b sext.w a1,s0 + 80001f9c: fcf466e3 bltu s0,a5,80001f68 + 80001fa0: 00098593 mv a1,s3 + 80001fa4: 00002517 auipc a0,0x2 + 80001fa8: f6c50513 addi a0,a0,-148 # 80003f10 + 80001fac: 05d010ef jal ra,80003808 + 80001fb0: 12048663 beqz s1,800020dc + 80001fb4: 10905c63 blez s1,800020cc + 80001fb8: 00002517 auipc a0,0x2 + 80001fbc: 04050513 addi a0,a0,64 # 80003ff8 + 80001fc0: 049010ef jal ra,80003808 + 80001fc4: 07a10513 addi a0,sp,122 + 80001fc8: 270000ef jal ra,80002238 + 80001fcc: 0d813083 ld ra,216(sp) + 80001fd0: 0d013403 ld s0,208(sp) + 80001fd4: 0c813483 ld s1,200(sp) + 80001fd8: 0c013903 ld s2,192(sp) + 80001fdc: 0b813983 ld s3,184(sp) + 80001fe0: 0b013a03 ld s4,176(sp) + 80001fe4: 0a813a83 ld s5,168(sp) + 80001fe8: 0a013b03 ld s6,160(sp) + 80001fec: 09813b83 ld s7,152(sp) + 80001ff0: 09013c03 ld s8,144(sp) + 80001ff4: 08813c83 ld s9,136(sp) + 80001ff8: 08013d03 ld s10,128(sp) + 80001ffc: 00000513 li a0,0 + 80002000: 0e010113 addi sp,sp,224 + 80002004: 00008067 ret + 80002008: 000097b7 lui a5,0x9 + 8000200c: a0278793 addi a5,a5,-1534 # 8a02 <_entry_offset+0x8a02> + 80002010: 14fa0c63 beq s4,a5,80002168 + 80002014: 0000f7b7 lui a5,0xf + 80002018: 9f578793 addi a5,a5,-1547 # e9f5 <_entry_offset+0xe9f5> + 8000201c: defa14e3 bne s4,a5,80001e04 + 80002020: 00002517 auipc a0,0x2 + 80002024: d2850513 addi a0,a0,-728 # 80003d48 + 80002028: 7e0010ef jal ra,80003808 + 8000202c: 00300a93 li s5,3 + 80002030: c31ff06f j 80001c60 + 80002034: 01010793 addi a5,sp,16 + 80002038: 000b0513 mv a0,s6 + 8000203c: 00391b93 slli s7,s2,0x3 + 80002040: 00098593 mv a1,s3 + 80002044: 01778bb3 add s7,a5,s7 + 80002048: 244000ef jal ra,8000228c <__muldi3> + 8000204c: 02051793 slli a5,a0,0x20 + 80002050: 0207d793 srli a5,a5,0x20 + 80002054: 001b0b1b addiw s6,s6,1 + 80002058: 00fa07b3 add a5,s4,a5 + 8000205c: 030b1b13 slli s6,s6,0x30 + 80002060: 00fbb823 sd a5,16(s7) + 80002064: 030b5b13 srli s6,s6,0x30 + 80002068: addff06f j 80001b44 + 8000206c: 00700793 li a5,7 + 80002070: 04f12023 sw a5,64(sp) + 80002074: a1dff06f j 80001a90 + 80002078: 00092783 lw a5,0(s2) + 8000207c: 00000413 li s0,0 + 80002080: 00000593 li a1,0 + 80002084: 00002a17 auipc s4,0x2 + 80002088: ea4a0a13 addi s4,s4,-348 # 80003f28 + 8000208c: f0078ae3 beqz a5,80001fa0 + 80002090: 00359793 slli a5,a1,0x3 + 80002094: 40b787b3 sub a5,a5,a1 + 80002098: 08010713 addi a4,sp,128 + 8000209c: 00479793 slli a5,a5,0x4 + 800020a0: 00f707b3 add a5,a4,a5 + 800020a4: ff67d603 lhu a2,-10(a5) + 800020a8: 000a0513 mv a0,s4 + 800020ac: 0014041b addiw s0,s0,1 + 800020b0: 758010ef jal ra,80003808 + 800020b4: 00092783 lw a5,0(s2) + 800020b8: 03041413 slli s0,s0,0x30 + 800020bc: 03045413 srli s0,s0,0x30 + 800020c0: 0004059b sext.w a1,s0 + 800020c4: fcf466e3 bltu s0,a5,80002090 + 800020c8: e89ff06f j 80001f50 + 800020cc: 00002517 auipc a0,0x2 + 800020d0: f4450513 addi a0,a0,-188 # 80004010 + 800020d4: 734010ef jal ra,80003808 + 800020d8: eedff06f j 80001fc4 + 800020dc: 00002517 auipc a0,0x2 + 800020e0: e8c50513 addi a0,a0,-372 # 80003f68 + 800020e4: 724010ef jal ra,80003808 + 800020e8: 00098513 mv a0,s3 + 800020ec: 13c000ef jal ra,80002228 + 800020f0: 02051593 slli a1,a0,0x20 + 800020f4: 002c9537 lui a0,0x2c9 + 800020f8: 0205d593 srli a1,a1,0x20 + 800020fc: 3b850513 addi a0,a0,952 # 2c93b8 <_entry_offset+0x2c93b8> + 80002100: 1f8000ef jal ra,800022f8 <__udivdi3> + 80002104: 0055179b slliw a5,a0,0x5 + 80002108: 40a787bb subw a5,a5,a0 + 8000210c: 0027979b slliw a5,a5,0x2 + 80002110: 00a7853b addw a0,a5,a0 + 80002114: 0035151b slliw a0,a0,0x3 + 80002118: 02051513 slli a0,a0,0x20 + 8000211c: 3e800593 li a1,1000 + 80002120: 02055513 srli a0,a0,0x20 + 80002124: 1d4000ef jal ra,800022f8 <__udivdi3> + 80002128: 0005059b sext.w a1,a0 + 8000212c: 00002517 auipc a0,0x2 + 80002130: e7450513 addi a0,a0,-396 # 80003fa0 + 80002134: 6d4010ef jal ra,80003808 + 80002138: 00002517 auipc a0,0x2 + 8000213c: e8850513 addi a0,a0,-376 # 80003fc0 + 80002140: 6c8010ef jal ra,80003808 + 80002144: e81ff06f j 80001fc4 + 80002148: 0047f793 andi a5,a5,4 + 8000214c: e4079ae3 bnez a5,80001fa0 + 80002150: e01ff06f j 80001f50 + 80002154: 00002517 auipc a0,0x2 + 80002158: c2450513 addi a0,a0,-988 # 80003d78 + 8000215c: 6ac010ef jal ra,80003808 + 80002160: 00400a93 li s5,4 + 80002164: afdff06f j 80001c60 + 80002168: 00002517 auipc a0,0x2 + 8000216c: b4850513 addi a0,a0,-1208 # 80003cb0 + 80002170: 698010ef jal ra,80003808 + 80002174: 00000a93 li s5,0 + 80002178: ae9ff06f j 80001c60 + 8000217c: 00002517 auipc a0,0x2 + 80002180: b6450513 addi a0,a0,-1180 # 80003ce0 + 80002184: 684010ef jal ra,80003808 + 80002188: 00100a93 li s5,1 + 8000218c: ad5ff06f j 80001c60 + 80002190: 00000493 li s1,0 + 80002194: c81ff06f j 80001e14 + +0000000080002198 : + 80002198: fe010113 addi sp,sp,-32 + 8000219c: 00810593 addi a1,sp,8 + 800021a0: 00600513 li a0,6 + 800021a4: 00113c23 sd ra,24(sp) + 800021a8: 2e0000ef jal ra,80002488 + 800021ac: 00813503 ld a0,8(sp) + 800021b0: 3e800593 li a1,1000 + 800021b4: 144000ef jal ra,800022f8 <__udivdi3> + 800021b8: 01813083 ld ra,24(sp) + 800021bc: 02051513 slli a0,a0,0x20 + 800021c0: 02055513 srli a0,a0,0x20 + 800021c4: 00003797 auipc a5,0x3 + 800021c8: dca7be23 sd a0,-548(a5) # 80004fa0 + 800021cc: 02010113 addi sp,sp,32 + 800021d0: 00008067 ret + +00000000800021d4 : + 800021d4: fe010113 addi sp,sp,-32 + 800021d8: 00810593 addi a1,sp,8 + 800021dc: 00600513 li a0,6 + 800021e0: 00113c23 sd ra,24(sp) + 800021e4: 2a4000ef jal ra,80002488 + 800021e8: 00813503 ld a0,8(sp) + 800021ec: 3e800593 li a1,1000 + 800021f0: 108000ef jal ra,800022f8 <__udivdi3> + 800021f4: 01813083 ld ra,24(sp) + 800021f8: 02051513 slli a0,a0,0x20 + 800021fc: 02055513 srli a0,a0,0x20 + 80002200: 00003797 auipc a5,0x3 + 80002204: daa7b423 sd a0,-600(a5) # 80004fa8 + 80002208: 02010113 addi sp,sp,32 + 8000220c: 00008067 ret + +0000000080002210 : + 80002210: 00003517 auipc a0,0x3 + 80002214: d9853503 ld a0,-616(a0) # 80004fa8 + 80002218: 00003797 auipc a5,0x3 + 8000221c: d887b783 ld a5,-632(a5) # 80004fa0 + 80002220: 40f5053b subw a0,a0,a5 + 80002224: 00008067 ret + +0000000080002228 : + 80002228: 00008067 ret + +000000008000222c : + 8000222c: 00100793 li a5,1 + 80002230: 00f50023 sb a5,0(a0) + 80002234: 00008067 ret + +0000000080002238 : + 80002238: 00050023 sb zero,0(a0) + 8000223c: 00008067 ret + +0000000080002240 : + 80002240: 00008067 ret + +0000000080002244 : + 80002244: 00050513 mv a0,a0 + 80002248: 0000006b 0x6b + 8000224c: 0000006f j 8000224c + +0000000080002250 <_assert>: + 80002250: 00051a63 bnez a0,80002264 <_assert+0x14> + 80002254: 00100793 li a5,1 + 80002258: 00078513 mv a0,a5 + 8000225c: 0000006b 0x6b + 80002260: 0000006f j 80002260 <_assert+0x10> + 80002264: 00008067 ret + +0000000080002268 <_trm_init>: + 80002268: ff010113 addi sp,sp,-16 + 8000226c: 00113423 sd ra,8(sp) + 80002270: 4e4000ef jal ra,80002754 + 80002274: 00002517 auipc a0,0x2 + 80002278: 11450513 addi a0,a0,276 # 80004388 + 8000227c: f60ff0ef jal ra,800019dc
+ 80002280: 00050513 mv a0,a0 + 80002284: 0000006b 0x6b + 80002288: 0000006f j 80002288 <_trm_init+0x20> + +000000008000228c <__muldi3>: + 8000228c: 00050613 mv a2,a0 + 80002290: 00000513 li a0,0 + 80002294: 0015f693 andi a3,a1,1 + 80002298: 00068463 beqz a3,800022a0 <__muldi3+0x14> + 8000229c: 00c50533 add a0,a0,a2 + 800022a0: 0015d593 srli a1,a1,0x1 + 800022a4: 00161613 slli a2,a2,0x1 + 800022a8: fe0596e3 bnez a1,80002294 <__muldi3+0x8> + 800022ac: 00008067 ret + +00000000800022b0 <__udivsi3>: + 800022b0: 02051513 slli a0,a0,0x20 + 800022b4: 02059593 slli a1,a1,0x20 + 800022b8: 00008293 mv t0,ra + 800022bc: 03c000ef jal ra,800022f8 <__udivdi3> + 800022c0: 0005051b sext.w a0,a0 + 800022c4: 00028067 jr t0 + +00000000800022c8 <__umodsi3>: + 800022c8: 02051513 slli a0,a0,0x20 + 800022cc: 02059593 slli a1,a1,0x20 + 800022d0: 02055513 srli a0,a0,0x20 + 800022d4: 0205d593 srli a1,a1,0x20 + 800022d8: 00008293 mv t0,ra + 800022dc: 01c000ef jal ra,800022f8 <__udivdi3> + 800022e0: 0005851b sext.w a0,a1 + 800022e4: 00028067 jr t0 + +00000000800022e8 <__divsi3>: + 800022e8: fff00293 li t0,-1 + 800022ec: 0a558c63 beq a1,t0,800023a4 <__moddi3+0x30> + +00000000800022f0 <__divdi3>: + 800022f0: 06054063 bltz a0,80002350 <__umoddi3+0x10> + 800022f4: 0605c663 bltz a1,80002360 <__umoddi3+0x20> + +00000000800022f8 <__udivdi3>: + 800022f8: 00058613 mv a2,a1 + 800022fc: 00050593 mv a1,a0 + 80002300: fff00513 li a0,-1 + 80002304: 02060c63 beqz a2,8000233c <__udivdi3+0x44> + 80002308: 00100693 li a3,1 + 8000230c: 00b67a63 bgeu a2,a1,80002320 <__udivdi3+0x28> + 80002310: 00c05863 blez a2,80002320 <__udivdi3+0x28> + 80002314: 00161613 slli a2,a2,0x1 + 80002318: 00169693 slli a3,a3,0x1 + 8000231c: feb66ae3 bltu a2,a1,80002310 <__udivdi3+0x18> + 80002320: 00000513 li a0,0 + 80002324: 00c5e663 bltu a1,a2,80002330 <__udivdi3+0x38> + 80002328: 40c585b3 sub a1,a1,a2 + 8000232c: 00d56533 or a0,a0,a3 + 80002330: 0016d693 srli a3,a3,0x1 + 80002334: 00165613 srli a2,a2,0x1 + 80002338: fe0696e3 bnez a3,80002324 <__udivdi3+0x2c> + 8000233c: 00008067 ret + +0000000080002340 <__umoddi3>: + 80002340: 00008293 mv t0,ra + 80002344: fb5ff0ef jal ra,800022f8 <__udivdi3> + 80002348: 00058513 mv a0,a1 + 8000234c: 00028067 jr t0 + 80002350: 40a00533 neg a0,a0 + 80002354: 00b04863 bgtz a1,80002364 <__umoddi3+0x24> + 80002358: 40b005b3 neg a1,a1 + 8000235c: f9dff06f j 800022f8 <__udivdi3> + 80002360: 40b005b3 neg a1,a1 + 80002364: 00008293 mv t0,ra + 80002368: f91ff0ef jal ra,800022f8 <__udivdi3> + 8000236c: 40a00533 neg a0,a0 + 80002370: 00028067 jr t0 + +0000000080002374 <__moddi3>: + 80002374: 00008293 mv t0,ra + 80002378: 0005ca63 bltz a1,8000238c <__moddi3+0x18> + 8000237c: 00054c63 bltz a0,80002394 <__moddi3+0x20> + 80002380: f79ff0ef jal ra,800022f8 <__udivdi3> + 80002384: 00058513 mv a0,a1 + 80002388: 00028067 jr t0 + 8000238c: 40b005b3 neg a1,a1 + 80002390: fe0558e3 bgez a0,80002380 <__moddi3+0xc> + 80002394: 40a00533 neg a0,a0 + 80002398: f61ff0ef jal ra,800022f8 <__udivdi3> + 8000239c: 40b00533 neg a0,a1 + 800023a0: 00028067 jr t0 + 800023a4: 01f29293 slli t0,t0,0x1f + 800023a8: f45514e3 bne a0,t0,800022f0 <__divdi3> + 800023ac: 00008067 ret + +00000000800023b0 <__am_timer_config>: + 800023b0: 00100793 li a5,1 + 800023b4: 00f50023 sb a5,0(a0) + 800023b8: 00f500a3 sb a5,1(a0) + 800023bc: 00008067 ret + +00000000800023c0 <__am_input_config>: + 800023c0: 00100793 li a5,1 + 800023c4: 00f50023 sb a5,0(a0) + 800023c8: 00008067 ret + +00000000800023cc : + 800023cc: ff010113 addi sp,sp,-16 + 800023d0: 00813023 sd s0,0(sp) + 800023d4: 00113423 sd ra,8(sp) + 800023d8: 00002417 auipc s0,0x2 + 800023dc: cd040413 addi s0,s0,-816 # 800040a8 + 800023e0: 04100513 li a0,65 + 800023e4: 00140413 addi s0,s0,1 + 800023e8: e59ff0ef jal ra,80002240 + 800023ec: 00044503 lbu a0,0(s0) + 800023f0: fe051ae3 bnez a0,800023e4 + 800023f4: 00002417 auipc s0,0x2 + 800023f8: cc440413 addi s0,s0,-828 # 800040b8 + 800023fc: 06100513 li a0,97 + 80002400: 00140413 addi s0,s0,1 + 80002404: e3dff0ef jal ra,80002240 + 80002408: 00044503 lbu a0,0(s0) + 8000240c: fe051ae3 bnez a0,80002400 + 80002410: 00002417 auipc s0,0x2 + 80002414: cc840413 addi s0,s0,-824 # 800040d8 + 80002418: 02000513 li a0,32 + 8000241c: 00140413 addi s0,s0,1 + 80002420: e21ff0ef jal ra,80002240 + 80002424: 00044503 lbu a0,0(s0) + 80002428: fe051ae3 bnez a0,8000241c + 8000242c: 00100513 li a0,1 + 80002430: e15ff0ef jal ra,80002244 + +0000000080002434 : + 80002434: ff010113 addi sp,sp,-16 + 80002438: 00113423 sd ra,8(sp) + 8000243c: 00002797 auipc a5,0x2 + 80002440: f7c78793 addi a5,a5,-132 # 800043b8 + 80002444: 00002697 auipc a3,0x2 + 80002448: 37468693 addi a3,a3,884 # 800047b8 + 8000244c: 00000617 auipc a2,0x0 + 80002450: f8060613 addi a2,a2,-128 # 800023cc + 80002454: 00c0006f j 80002460 + 80002458: 00878793 addi a5,a5,8 + 8000245c: 00d78c63 beq a5,a3,80002474 + 80002460: 0007b703 ld a4,0(a5) + 80002464: fe071ae3 bnez a4,80002458 + 80002468: 00c7b023 sd a2,0(a5) + 8000246c: 00878793 addi a5,a5,8 + 80002470: fed798e3 bne a5,a3,80002460 + 80002474: 030000ef jal ra,800024a4 <__am_timer_init> + 80002478: 00813083 ld ra,8(sp) + 8000247c: 00100513 li a0,1 + 80002480: 01010113 addi sp,sp,16 + 80002484: 00008067 ret + +0000000080002488 : + 80002488: 00351793 slli a5,a0,0x3 + 8000248c: 00002517 auipc a0,0x2 + 80002490: f2c50513 addi a0,a0,-212 # 800043b8 + 80002494: 00f50533 add a0,a0,a5 + 80002498: 00053303 ld t1,0(a0) + 8000249c: 00058513 mv a0,a1 + 800024a0: 00030067 jr t1 + +00000000800024a4 <__am_timer_init>: + 800024a4: 00008067 ret + +00000000800024a8 <__am_timer_uptime>: + 800024a8: 00053023 sd zero,0(a0) + 800024ac: 00008067 ret + +00000000800024b0 : + 800024b0: fc010113 addi sp,sp,-64 + 800024b4: 01313c23 sd s3,24(sp) + 800024b8: 00058993 mv s3,a1 + 800024bc: 00050793 mv a5,a0 + 800024c0: 03800613 li a2,56 + 800024c4: 00000593 li a1,0 + 800024c8: 00098513 mv a0,s3 + 800024cc: 02813823 sd s0,48(sp) + 800024d0: 03213023 sd s2,32(sp) + 800024d4: 0007b403 ld s0,0(a5) + 800024d8: 01413823 sd s4,16(sp) + 800024dc: 02113c23 sd ra,56(sp) + 800024e0: 02913423 sd s1,40(sp) + 800024e4: 01513423 sd s5,8(sp) + 800024e8: 374010ef jal ra,8000385c + 800024ec: 7b200793 li a5,1970 + 800024f0: 00f9aa23 sw a5,20(s3) # fffffffffffff014 <_end+0xffffffff7fff2014> + 800024f4: 7b200913 li s2,1970 + 800024f8: 00002a17 auipc s4,0x2 + 800024fc: e98a0a13 addi s4,s4,-360 # 80004390 + 80002500: 0100006f j 80002510 + 80002504: 40e40433 sub s0,s0,a4 + 80002508: 00d9aa23 sw a3,20(s3) + 8000250c: 00068913 mv s2,a3 + 80002510: 0009049b sext.w s1,s2 + 80002514: 06400593 li a1,100 + 80002518: 00048513 mv a0,s1 + 8000251c: e59ff0ef jal ra,80002374 <__moddi3> + 80002520: 00050793 mv a5,a0 + 80002524: 0007879b sext.w a5,a5 + 80002528: 00048513 mv a0,s1 + 8000252c: 00397493 andi s1,s2,3 + 80002530: 19000593 li a1,400 + 80002534: 0014b493 seqz s1,s1 + 80002538: 00079863 bnez a5,80002548 + 8000253c: e39ff0ef jal ra,80002374 <__moddi3> + 80002540: 0005049b sext.w s1,a0 + 80002544: 0014b493 seqz s1,s1 + 80002548: 00249793 slli a5,s1,0x2 + 8000254c: 00fa07b3 add a5,s4,a5 + 80002550: 0007e703 lwu a4,0(a5) + 80002554: 0019069b addiw a3,s2,1 + 80002558: fae456e3 bge s0,a4,80002504 + 8000255c: 000155b7 lui a1,0x15 + 80002560: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 80002564: 00040513 mv a0,s0 + 80002568: d89ff0ef jal ra,800022f0 <__divdi3> + 8000256c: 00149793 slli a5,s1,0x1 + 80002570: 009784b3 add s1,a5,s1 + 80002574: 00449793 slli a5,s1,0x4 + 80002578: 00002497 auipc s1,0x2 + 8000257c: ba048493 addi s1,s1,-1120 # 80004118 + 80002580: 00f484b3 add s1,s1,a5 + 80002584: 0004e783 lwu a5,0(s1) + 80002588: 0005051b sext.w a0,a0 + 8000258c: 00a9ae23 sw a0,28(s3) + 80002590: 14f44463 blt s0,a5,800026d8 + 80002594: 00100713 li a4,1 + 80002598: 40f40433 sub s0,s0,a5 + 8000259c: 0044e783 lwu a5,4(s1) + 800025a0: 00070a1b sext.w s4,a4 + 800025a4: 00448493 addi s1,s1,4 + 800025a8: 00170713 addi a4,a4,1 + 800025ac: fef456e3 bge s0,a5,80002598 + 800025b0: 000155b7 lui a1,0x15 + 800025b4: 0149a823 sw s4,16(s3) + 800025b8: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 800025bc: 00040513 mv a0,s0 + 800025c0: d31ff0ef jal ra,800022f0 <__divdi3> + 800025c4: 0005051b sext.w a0,a0 + 800025c8: 0015079b addiw a5,a0,1 + 800025cc: 000155b7 lui a1,0x15 + 800025d0: 00f9a623 sw a5,12(s3) + 800025d4: 18058593 addi a1,a1,384 # 15180 <_entry_offset+0x15180> + 800025d8: 00040513 mv a0,s0 + 800025dc: 00001ab7 lui s5,0x1 + 800025e0: 0007841b sext.w s0,a5 + 800025e4: d91ff0ef jal ra,80002374 <__moddi3> + 800025e8: e10a8593 addi a1,s5,-496 # e10 <_entry_offset+0xe10> + 800025ec: 00050493 mv s1,a0 + 800025f0: d01ff0ef jal ra,800022f0 <__divdi3> + 800025f4: e10a8593 addi a1,s5,-496 + 800025f8: 00a9a423 sw a0,8(s3) + 800025fc: 00048513 mv a0,s1 + 80002600: d75ff0ef jal ra,80002374 <__moddi3> + 80002604: 03c00593 li a1,60 + 80002608: 00050493 mv s1,a0 + 8000260c: ce5ff0ef jal ra,800022f0 <__divdi3> + 80002610: 00a9a223 sw a0,4(s3) + 80002614: 03c00593 li a1,60 + 80002618: 00048513 mv a0,s1 + 8000261c: d59ff0ef jal ra,80002374 <__moddi3> + 80002620: 001a0a1b addiw s4,s4,1 + 80002624: 0ffa7793 andi a5,s4,255 + 80002628: 0037b793 sltiu a5,a5,3 + 8000262c: 40f9093b subw s2,s2,a5 + 80002630: 03091913 slli s2,s2,0x30 + 80002634: 03095913 srli s2,s2,0x30 + 80002638: 00a9a023 sw a0,0(s3) + 8000263c: 06400593 li a1,100 + 80002640: 00090513 mv a0,s2 + 80002644: cb5ff0ef jal ra,800022f8 <__udivdi3> + 80002648: 0029549b srliw s1,s2,0x2 + 8000264c: 0105179b slliw a5,a0,0x10 + 80002650: 0107d79b srliw a5,a5,0x10 + 80002654: 012484bb addw s1,s1,s2 + 80002658: 19000593 li a1,400 + 8000265c: 00090513 mv a0,s2 + 80002660: 0ffa7a13 andi s4,s4,255 + 80002664: 40f484bb subw s1,s1,a5 + 80002668: fffa0a1b addiw s4,s4,-1 + 8000266c: c8dff0ef jal ra,800022f8 <__udivdi3> + 80002670: 00002797 auipc a5,0x2 + 80002674: b0878793 addi a5,a5,-1272 # 80004178 + 80002678: 002a1a13 slli s4,s4,0x2 + 8000267c: 01478a33 add s4,a5,s4 + 80002680: 000a2783 lw a5,0(s4) + 80002684: 0105151b slliw a0,a0,0x10 + 80002688: 0105551b srliw a0,a0,0x10 + 8000268c: 00a484bb addw s1,s1,a0 + 80002690: 00f484bb addw s1,s1,a5 + 80002694: 0ff47513 andi a0,s0,255 + 80002698: 00a4853b addw a0,s1,a0 + 8000269c: 00700593 li a1,7 + 800026a0: cd5ff0ef jal ra,80002374 <__moddi3> + 800026a4: 03813083 ld ra,56(sp) + 800026a8: 03013403 ld s0,48(sp) + 800026ac: 0ff57513 andi a0,a0,255 + 800026b0: 00a9ac23 sw a0,24(s3) + 800026b4: 0209a023 sw zero,32(s3) + 800026b8: 02813483 ld s1,40(sp) + 800026bc: 02013903 ld s2,32(sp) + 800026c0: 01013a03 ld s4,16(sp) + 800026c4: 00813a83 ld s5,8(sp) + 800026c8: 00098513 mv a0,s3 + 800026cc: 01813983 ld s3,24(sp) + 800026d0: 04010113 addi sp,sp,64 + 800026d4: 00008067 ret + 800026d8: 00000a13 li s4,0 + 800026dc: eedff06f j 800025c8 + +00000000800026e0 <__am_timer_rtc>: + 800026e0: fa010113 addi sp,sp,-96 + 800026e4: 04813823 sd s0,80(sp) + 800026e8: 01810593 addi a1,sp,24 + 800026ec: 00050413 mv s0,a0 + 800026f0: 00810513 addi a0,sp,8 + 800026f4: 04113c23 sd ra,88(sp) + 800026f8: 00013423 sd zero,8(sp) + 800026fc: 00013823 sd zero,16(sp) + 80002700: db1ff0ef jal ra,800024b0 + 80002704: 01812703 lw a4,24(sp) + 80002708: 02812783 lw a5,40(sp) + 8000270c: 05813083 ld ra,88(sp) + 80002710: 00e42a23 sw a4,20(s0) + 80002714: 01c12703 lw a4,28(sp) + 80002718: 0017879b addiw a5,a5,1 + 8000271c: 00f42223 sw a5,4(s0) + 80002720: 00e42823 sw a4,16(s0) + 80002724: 02012703 lw a4,32(sp) + 80002728: 02c12783 lw a5,44(sp) + 8000272c: 00e42623 sw a4,12(s0) + 80002730: 02412703 lw a4,36(sp) + 80002734: 00f42023 sw a5,0(s0) + 80002738: 00e42423 sw a4,8(s0) + 8000273c: 05013403 ld s0,80(sp) + 80002740: 06010113 addi sp,sp,96 + 80002744: 00008067 ret + +0000000080002748 <__am_input_keybrd>: + 80002748: 00050023 sb zero,0(a0) + 8000274c: 00052223 sw zero,4(a0) + 80002750: 00008067 ret + +0000000080002754 : + 80002754: 00002797 auipc a5,0x2 + 80002758: c5478793 addi a5,a5,-940 # 800043a8 + 8000275c: 0007b503 ld a0,0(a5) + 80002760: 0087b583 ld a1,8(a5) + 80002764: ff010113 addi sp,sp,-16 + 80002768: 00000693 li a3,0 + 8000276c: 00000613 li a2,0 + 80002770: 40a585b3 sub a1,a1,a0 + 80002774: 00113423 sd ra,8(sp) + 80002778: 1c4010ef jal ra,8000393c + 8000277c: 00813083 ld ra,8(sp) + 80002780: 00002797 auipc a5,0x2 + 80002784: 04a7b423 sd a0,72(a5) # 800047c8 + 80002788: 01010113 addi sp,sp,16 + 8000278c: 00008067 ret + +0000000080002790 <_out_null>: + 80002790: 00008067 ret + +0000000080002794 <_ntoa_format>: + 80002794: fa010113 addi sp,sp,-96 + 80002798: 07012303 lw t1,112(sp) + 8000279c: 03313c23 sd s3,56(sp) + 800027a0: 03413823 sd s4,48(sp) + 800027a4: 03513423 sd s5,40(sp) + 800027a8: 03613023 sd s6,32(sp) + 800027ac: 01713c23 sd s7,24(sp) + 800027b0: 01813823 sd s8,16(sp) + 800027b4: 01913423 sd s9,8(sp) + 800027b8: 00237e13 andi t3,t1,2 + 800027bc: 01037e93 andi t4,t1,16 + 800027c0: 04113c23 sd ra,88(sp) + 800027c4: 04813823 sd s0,80(sp) + 800027c8: 04913423 sd s1,72(sp) + 800027cc: 05213023 sd s2,64(sp) + 800027d0: 06012f03 lw t5,96(sp) + 800027d4: 06812c03 lw s8,104(sp) + 800027d8: 00050a13 mv s4,a0 + 800027dc: 00058a93 mv s5,a1 + 800027e0: 00060b93 mv s7,a2 + 800027e4: 00068b13 mv s6,a3 + 800027e8: 00070993 mv s3,a4 + 800027ec: 000e0c9b sext.w s9,t3 + 800027f0: 000e8e9b sext.w t4,t4 + 800027f4: 060e1c63 bnez t3,8000286c <_ntoa_format+0xd8> + 800027f8: 020f1693 slli a3,t5,0x20 + 800027fc: 00137513 andi a0,t1,1 + 80002800: 0206d693 srli a3,a3,0x20 + 80002804: 180c1e63 bnez s8,800029a0 <_ntoa_format+0x20c> + 80002808: 02d7f663 bgeu a5,a3,80002834 <_ntoa_format+0xa0> + 8000280c: 02000713 li a4,32 + 80002810: 36e78e63 beq a5,a4,80002b8c <_ntoa_format+0x3f8> + 80002814: 03000613 li a2,48 + 80002818: 02000593 li a1,32 + 8000281c: 0080006f j 80002824 <_ntoa_format+0x90> + 80002820: 00b78a63 beq a5,a1,80002834 <_ntoa_format+0xa0> + 80002824: 00178793 addi a5,a5,1 + 80002828: 00f98733 add a4,s3,a5 + 8000282c: fec70fa3 sb a2,-1(a4) + 80002830: fed7e8e3 bltu a5,a3,80002820 <_ntoa_format+0x8c> + 80002834: 02050c63 beqz a0,8000286c <_ntoa_format+0xd8> + 80002838: 020c1913 slli s2,s8,0x20 + 8000283c: 02095913 srli s2,s2,0x20 + 80002840: 0327f663 bgeu a5,s2,8000286c <_ntoa_format+0xd8> + 80002844: 02000713 li a4,32 + 80002848: 36e78863 beq a5,a4,80002bb8 <_ntoa_format+0x424> + 8000284c: 03000693 li a3,48 + 80002850: 02000613 li a2,32 + 80002854: 0080006f j 8000285c <_ntoa_format+0xc8> + 80002858: 16c78463 beq a5,a2,800029c0 <_ntoa_format+0x22c> + 8000285c: 00178793 addi a5,a5,1 + 80002860: 00f98733 add a4,s3,a5 + 80002864: fed70fa3 sb a3,-1(a4) + 80002868: ff2798e3 bne a5,s2,80002858 <_ntoa_format+0xc4> + 8000286c: 1a0e8663 beqz t4,80002a18 <_ntoa_format+0x284> + 80002870: 40037713 andi a4,t1,1024 + 80002874: 20071463 bnez a4,80002a7c <_ntoa_format+0x2e8> + 80002878: 1e079663 bnez a5,80002a64 <_ntoa_format+0x2d0> + 8000287c: 01000793 li a5,16 + 80002880: 2af88863 beq a7,a5,80002b30 <_ntoa_format+0x39c> + 80002884: 00200793 li a5,2 + 80002888: 2ef88a63 beq a7,a5,80002b7c <_ntoa_format+0x3e8> + 8000288c: 03000793 li a5,48 + 80002890: 00f98023 sb a5,0(s3) + 80002894: 00100793 li a5,1 + 80002898: 1a080463 beqz a6,80002a40 <_ntoa_format+0x2ac> + 8000289c: 00f98733 add a4,s3,a5 + 800028a0: 00178413 addi s0,a5,1 + 800028a4: 02d00793 li a5,45 + 800028a8: 00f70023 sb a5,0(a4) + 800028ac: 00337313 andi t1,t1,3 + 800028b0: 20031263 bnez t1,80002ab4 <_ntoa_format+0x320> + 800028b4: 020c1913 slli s2,s8,0x20 + 800028b8: 02095913 srli s2,s2,0x20 + 800028bc: 1f247c63 bgeu s0,s2,80002ab4 <_ntoa_format+0x320> + 800028c0: 40890933 sub s2,s2,s0 + 800028c4: 01790933 add s2,s2,s7 + 800028c8: 000b8493 mv s1,s7 + 800028cc: 00048613 mv a2,s1 + 800028d0: 000b0693 mv a3,s6 + 800028d4: 00148493 addi s1,s1,1 + 800028d8: 000a8593 mv a1,s5 + 800028dc: 02000513 li a0,32 + 800028e0: 000a00e7 jalr s4 + 800028e4: ff2494e3 bne s1,s2,800028cc <_ntoa_format+0x138> + 800028e8: 02040663 beqz s0,80002914 <_ntoa_format+0x180> + 800028ec: 01240933 add s2,s0,s2 + 800028f0: 012984b3 add s1,s3,s2 + 800028f4: 00898433 add s0,s3,s0 + 800028f8: fff44503 lbu a0,-1(s0) + 800028fc: 40848633 sub a2,s1,s0 + 80002900: 000b0693 mv a3,s6 + 80002904: fff40413 addi s0,s0,-1 + 80002908: 000a8593 mv a1,s5 + 8000290c: 000a00e7 jalr s4 + 80002910: fe8994e3 bne s3,s0,800028f8 <_ntoa_format+0x164> + 80002914: 040c8a63 beqz s9,80002968 <_ntoa_format+0x1d4> + 80002918: 020c1c13 slli s8,s8,0x20 + 8000291c: 41790433 sub s0,s2,s7 + 80002920: 020c5c13 srli s8,s8,0x20 + 80002924: 05847263 bgeu s0,s8,80002968 <_ntoa_format+0x1d4> + 80002928: 01740633 add a2,s0,s7 + 8000292c: 000b0693 mv a3,s6 + 80002930: 00140413 addi s0,s0,1 + 80002934: 000a8593 mv a1,s5 + 80002938: 02000513 li a0,32 + 8000293c: 000a00e7 jalr s4 + 80002940: ff8464e3 bltu s0,s8,80002928 <_ntoa_format+0x194> + 80002944: 41790733 sub a4,s2,s7 + 80002948: 00170713 addi a4,a4,1 + 8000294c: 00000793 li a5,0 + 80002950: 00ec6863 bltu s8,a4,80002960 <_ntoa_format+0x1cc> + 80002954: fffb8793 addi a5,s7,-1 + 80002958: 01878c33 add s8,a5,s8 + 8000295c: 412c07b3 sub a5,s8,s2 + 80002960: 00190913 addi s2,s2,1 + 80002964: 00f90933 add s2,s2,a5 + 80002968: 05813083 ld ra,88(sp) + 8000296c: 05013403 ld s0,80(sp) + 80002970: 04813483 ld s1,72(sp) + 80002974: 03813983 ld s3,56(sp) + 80002978: 03013a03 ld s4,48(sp) + 8000297c: 02813a83 ld s5,40(sp) + 80002980: 02013b03 ld s6,32(sp) + 80002984: 01813b83 ld s7,24(sp) + 80002988: 01013c03 ld s8,16(sp) + 8000298c: 00813c83 ld s9,8(sp) + 80002990: 00090513 mv a0,s2 + 80002994: 04013903 ld s2,64(sp) + 80002998: 06010113 addi sp,sp,96 + 8000299c: 00008067 ret + 800029a0: 12050863 beqz a0,80002ad0 <_ntoa_format+0x33c> + 800029a4: 00081663 bnez a6,800029b0 <_ntoa_format+0x21c> + 800029a8: 00c37713 andi a4,t1,12 + 800029ac: 00070463 beqz a4,800029b4 <_ntoa_format+0x220> + 800029b0: fffc0c1b addiw s8,s8,-1 + 800029b4: e8d7f2e3 bgeu a5,a3,80002838 <_ntoa_format+0xa4> + 800029b8: 02000713 li a4,32 + 800029bc: e4e79ce3 bne a5,a4,80002814 <_ntoa_format+0x80> + 800029c0: 0e0e8063 beqz t4,80002aa0 <_ntoa_format+0x30c> + 800029c4: 40037793 andi a5,t1,1024 + 800029c8: 04079c63 bnez a5,80002a20 <_ntoa_format+0x28c> + 800029cc: 02000793 li a5,32 + 800029d0: 0aff1063 bne t5,a5,80002a70 <_ntoa_format+0x2dc> + 800029d4: 02000793 li a5,32 + 800029d8: 01f00713 li a4,31 + 800029dc: 01000693 li a3,16 + 800029e0: 1ad88c63 beq a7,a3,80002b98 <_ntoa_format+0x404> + 800029e4: 00200693 li a3,2 + 800029e8: 00070793 mv a5,a4 + 800029ec: 00d89e63 bne a7,a3,80002a08 <_ntoa_format+0x274> + 800029f0: 00e986b3 add a3,s3,a4 + 800029f4: 00170793 addi a5,a4,1 + 800029f8: 06200713 li a4,98 + 800029fc: 00e68023 sb a4,0(a3) + 80002a00: 02000713 li a4,32 + 80002a04: 00e78e63 beq a5,a4,80002a20 <_ntoa_format+0x28c> + 80002a08: 00f98733 add a4,s3,a5 + 80002a0c: 03000693 li a3,48 + 80002a10: 00d70023 sb a3,0(a4) + 80002a14: 00178793 addi a5,a5,1 + 80002a18: 02000713 li a4,32 + 80002a1c: e6e79ee3 bne a5,a4,80002898 <_ntoa_format+0x104> + 80002a20: 00337313 andi t1,t1,3 + 80002a24: 08031263 bnez t1,80002aa8 <_ntoa_format+0x314> + 80002a28: 02000413 li s0,32 + 80002a2c: 020c1913 slli s2,s8,0x20 + 80002a30: 02095913 srli s2,s2,0x20 + 80002a34: e92466e3 bltu s0,s2,800028c0 <_ntoa_format+0x12c> + 80002a38: 000b8913 mv s2,s7 + 80002a3c: eadff06f j 800028e8 <_ntoa_format+0x154> + 80002a40: 00437713 andi a4,t1,4 + 80002a44: 06071c63 bnez a4,80002abc <_ntoa_format+0x328> + 80002a48: 00837713 andi a4,t1,8 + 80002a4c: 0c071863 bnez a4,80002b1c <_ntoa_format+0x388> + 80002a50: 00337313 andi t1,t1,3 + 80002a54: 00078413 mv s0,a5 + 80002a58: fc030ae3 beqz t1,80002a2c <_ntoa_format+0x298> + 80002a5c: 000b8913 mv s2,s7 + 80002a60: e89ff06f j 800028e8 <_ntoa_format+0x154> + 80002a64: 020f1f13 slli t5,t5,0x20 + 80002a68: 020f5f13 srli t5,t5,0x20 + 80002a6c: 0aff0263 beq t5,a5,80002b10 <_ntoa_format+0x37c> + 80002a70: 020c1913 slli s2,s8,0x20 + 80002a74: 02095913 srli s2,s2,0x20 + 80002a78: 08f90c63 beq s2,a5,80002b10 <_ntoa_format+0x37c> + 80002a7c: 01000713 li a4,16 + 80002a80: 06e88663 beq a7,a4,80002aec <_ntoa_format+0x358> + 80002a84: 00200713 li a4,2 + 80002a88: f6e89ce3 bne a7,a4,80002a00 <_ntoa_format+0x26c> + 80002a8c: 02000713 li a4,32 + 80002a90: f8e788e3 beq a5,a4,80002a20 <_ntoa_format+0x28c> + 80002a94: 00f986b3 add a3,s3,a5 + 80002a98: 00178793 addi a5,a5,1 + 80002a9c: f5dff06f j 800029f8 <_ntoa_format+0x264> + 80002aa0: 00337313 andi t1,t1,3 + 80002aa4: 0c030063 beqz t1,80002b64 <_ntoa_format+0x3d0> + 80002aa8: 000b8913 mv s2,s7 + 80002aac: 02000413 li s0,32 + 80002ab0: e3dff06f j 800028ec <_ntoa_format+0x158> + 80002ab4: 000b8913 mv s2,s7 + 80002ab8: e35ff06f j 800028ec <_ntoa_format+0x158> + 80002abc: 00f98733 add a4,s3,a5 + 80002ac0: 00178413 addi s0,a5,1 + 80002ac4: 02b00793 li a5,43 + 80002ac8: 00f70023 sb a5,0(a4) + 80002acc: de1ff06f j 800028ac <_ntoa_format+0x118> + 80002ad0: d8d7fee3 bgeu a5,a3,8000286c <_ntoa_format+0xd8> + 80002ad4: 02000713 li a4,32 + 80002ad8: d2e79ee3 bne a5,a4,80002814 <_ntoa_format+0x80> + 80002adc: 0e0e8c63 beqz t4,80002bd4 <_ntoa_format+0x440> + 80002ae0: 40037793 andi a5,t1,1024 + 80002ae4: f2079ee3 bnez a5,80002a20 <_ntoa_format+0x28c> + 80002ae8: ee5ff06f j 800029cc <_ntoa_format+0x238> + 80002aec: 02037713 andi a4,t1,32 + 80002af0: 04071c63 bnez a4,80002b48 <_ntoa_format+0x3b4> + 80002af4: 02000713 li a4,32 + 80002af8: f2e784e3 beq a5,a4,80002a20 <_ntoa_format+0x28c> + 80002afc: 00f98733 add a4,s3,a5 + 80002b00: 00178793 addi a5,a5,1 + 80002b04: 07800693 li a3,120 + 80002b08: 00d70023 sb a3,0(a4) + 80002b0c: ef5ff06f j 80002a00 <_ntoa_format+0x26c> + 80002b10: fff78713 addi a4,a5,-1 + 80002b14: d60704e3 beqz a4,8000287c <_ntoa_format+0xe8> + 80002b18: ec5ff06f j 800029dc <_ntoa_format+0x248> + 80002b1c: 00f98733 add a4,s3,a5 + 80002b20: 00178413 addi s0,a5,1 + 80002b24: 02000793 li a5,32 + 80002b28: 00f70023 sb a5,0(a4) + 80002b2c: d81ff06f j 800028ac <_ntoa_format+0x118> + 80002b30: 02037793 andi a5,t1,32 + 80002b34: 02079c63 bnez a5,80002b6c <_ntoa_format+0x3d8> + 80002b38: 07800793 li a5,120 + 80002b3c: 00f98023 sb a5,0(s3) + 80002b40: 00100793 li a5,1 + 80002b44: ec5ff06f j 80002a08 <_ntoa_format+0x274> + 80002b48: 02000713 li a4,32 + 80002b4c: ece78ae3 beq a5,a4,80002a20 <_ntoa_format+0x28c> + 80002b50: 00f98733 add a4,s3,a5 + 80002b54: 05800693 li a3,88 + 80002b58: 00d70023 sb a3,0(a4) + 80002b5c: 00178793 addi a5,a5,1 + 80002b60: ea1ff06f j 80002a00 <_ntoa_format+0x26c> + 80002b64: 02000413 li s0,32 + 80002b68: d4dff06f j 800028b4 <_ntoa_format+0x120> + 80002b6c: 05800793 li a5,88 + 80002b70: 00f98023 sb a5,0(s3) + 80002b74: 00100793 li a5,1 + 80002b78: e91ff06f j 80002a08 <_ntoa_format+0x274> + 80002b7c: 06200793 li a5,98 + 80002b80: 00f98023 sb a5,0(s3) + 80002b84: 00100793 li a5,1 + 80002b88: e81ff06f j 80002a08 <_ntoa_format+0x274> + 80002b8c: e2051ae3 bnez a0,800029c0 <_ntoa_format+0x22c> + 80002b90: 000c8c13 mv s8,s9 + 80002b94: f49ff06f j 80002adc <_ntoa_format+0x348> + 80002b98: 02037693 andi a3,t1,32 + 80002b9c: ffe78713 addi a4,a5,-2 + 80002ba0: 00069863 bnez a3,80002bb0 <_ntoa_format+0x41c> + 80002ba4: 00e98733 add a4,s3,a4 + 80002ba8: fff78793 addi a5,a5,-1 + 80002bac: f59ff06f j 80002b04 <_ntoa_format+0x370> + 80002bb0: 00070793 mv a5,a4 + 80002bb4: f9dff06f j 80002b50 <_ntoa_format+0x3bc> + 80002bb8: 000e8e63 beqz t4,80002bd4 <_ntoa_format+0x440> + 80002bbc: 40037713 andi a4,t1,1024 + 80002bc0: 00071e63 bnez a4,80002bdc <_ntoa_format+0x448> + 80002bc4: 02ff0e63 beq t5,a5,80002c00 <_ntoa_format+0x46c> + 80002bc8: e4fc1ce3 bne s8,a5,80002a20 <_ntoa_format+0x28c> + 80002bcc: 01f00713 li a4,31 + 80002bd0: e0dff06f j 800029dc <_ntoa_format+0x248> + 80002bd4: 02000413 li s0,32 + 80002bd8: cd5ff06f j 800028ac <_ntoa_format+0x118> + 80002bdc: 01000793 li a5,16 + 80002be0: 02f88c63 beq a7,a5,80002c18 <_ntoa_format+0x484> + 80002be4: 00200793 li a5,2 + 80002be8: e2f88ce3 beq a7,a5,80002a20 <_ntoa_format+0x28c> + 80002bec: 00337313 andi t1,t1,3 + 80002bf0: ea031ce3 bnez t1,80002aa8 <_ntoa_format+0x314> + 80002bf4: 02000413 li s0,32 + 80002bf8: cd2464e3 bltu s0,s2,800028c0 <_ntoa_format+0x12c> + 80002bfc: e3dff06f j 80002a38 <_ntoa_format+0x2a4> + 80002c00: 01000713 li a4,16 + 80002c04: f8e88ae3 beq a7,a4,80002b98 <_ntoa_format+0x404> + 80002c08: 00200793 li a5,2 + 80002c0c: 00f88c63 beq a7,a5,80002c24 <_ntoa_format+0x490> + 80002c10: 01f00793 li a5,31 + 80002c14: df5ff06f j 80002a08 <_ntoa_format+0x274> + 80002c18: 02037793 andi a5,t1,32 + 80002c1c: fc0788e3 beqz a5,80002bec <_ntoa_format+0x458> + 80002c20: e01ff06f j 80002a20 <_ntoa_format+0x28c> + 80002c24: 01f00713 li a4,31 + 80002c28: dc9ff06f j 800029f0 <_ntoa_format+0x25c> + +0000000080002c2c <_ntoa_long>: + 80002c2c: f4010113 addi sp,sp,-192 + 80002c30: 09413823 sd s4,144(sp) + 80002c34: 09513423 sd s5,136(sp) + 80002c38: 09613023 sd s6,128(sp) + 80002c3c: 07713c23 sd s7,120(sp) + 80002c40: 07813823 sd s8,112(sp) + 80002c44: 07913423 sd s9,104(sp) + 80002c48: 05b13c23 sd s11,88(sp) + 80002c4c: 0a113c23 sd ra,184(sp) + 80002c50: 0a813823 sd s0,176(sp) + 80002c54: 0a913423 sd s1,168(sp) + 80002c58: 0b213023 sd s2,160(sp) + 80002c5c: 09313c23 sd s3,152(sp) + 80002c60: 07a13023 sd s10,96(sp) + 80002c64: 02a13023 sd a0,32(sp) + 80002c68: 03113423 sd a7,40(sp) + 80002c6c: 0c812a03 lw s4,200(sp) + 80002c70: 00070d93 mv s11,a4 + 80002c74: 00058b13 mv s6,a1 + 80002c78: 00060b93 mv s7,a2 + 80002c7c: 00068c13 mv s8,a3 + 80002c80: 00078c93 mv s9,a5 + 80002c84: 00080a93 mv s5,a6 + 80002c88: 00071863 bnez a4,80002c98 <_ntoa_long+0x6c> + 80002c8c: 400a7793 andi a5,s4,1024 + 80002c90: fefa7a13 andi s4,s4,-17 + 80002c94: 0e079663 bnez a5,80002d80 <_ntoa_long+0x154> + 80002c98: 020a7793 andi a5,s4,32 + 80002c9c: 06100413 li s0,97 + 80002ca0: 0c079c63 bnez a5,80002d78 <_ntoa_long+0x14c> + 80002ca4: 00000d13 li s10,0 + 80002ca8: 03010493 addi s1,sp,48 + 80002cac: 00900913 li s2,9 + 80002cb0: ff64041b addiw s0,s0,-10 + 80002cb4: 02000993 li s3,32 + 80002cb8: 00c0006f j 80002cc4 <_ntoa_long+0x98> + 80002cbc: 053d0463 beq s10,s3,80002d04 <_ntoa_long+0xd8> + 80002cc0: 00050d93 mv s11,a0 + 80002cc4: 000a8593 mv a1,s5 + 80002cc8: 000d8513 mv a0,s11 + 80002ccc: e74ff0ef jal ra,80002340 <__umoddi3> + 80002cd0: 0ff57313 andi t1,a0,255 + 80002cd4: 0303071b addiw a4,t1,48 + 80002cd8: 0064033b addw t1,s0,t1 + 80002cdc: 0ff37313 andi t1,t1,255 + 80002ce0: 00a96463 bltu s2,a0,80002ce8 <_ntoa_long+0xbc> + 80002ce4: 0ff77313 andi t1,a4,255 + 80002ce8: 001d0d13 addi s10,s10,1 + 80002cec: 01a48733 add a4,s1,s10 + 80002cf0: 000d8513 mv a0,s11 + 80002cf4: 000a8593 mv a1,s5 + 80002cf8: fe670fa3 sb t1,-1(a4) + 80002cfc: dfcff0ef jal ra,800022f8 <__udivdi3> + 80002d00: fb5dfee3 bgeu s11,s5,80002cbc <_ntoa_long+0x90> + 80002d04: 0c012703 lw a4,192(sp) + 80002d08: 02813783 ld a5,40(sp) + 80002d0c: 02013503 ld a0,32(sp) + 80002d10: 01413823 sd s4,16(sp) + 80002d14: 00e13423 sd a4,8(sp) + 80002d18: 00f13023 sd a5,0(sp) + 80002d1c: 000a889b sext.w a7,s5 + 80002d20: 000c8813 mv a6,s9 + 80002d24: 000d0793 mv a5,s10 + 80002d28: 00048713 mv a4,s1 + 80002d2c: 000c0693 mv a3,s8 + 80002d30: 000b8613 mv a2,s7 + 80002d34: 000b0593 mv a1,s6 + 80002d38: a5dff0ef jal ra,80002794 <_ntoa_format> + 80002d3c: 0b813083 ld ra,184(sp) + 80002d40: 0b013403 ld s0,176(sp) + 80002d44: 0a813483 ld s1,168(sp) + 80002d48: 0a013903 ld s2,160(sp) + 80002d4c: 09813983 ld s3,152(sp) + 80002d50: 09013a03 ld s4,144(sp) + 80002d54: 08813a83 ld s5,136(sp) + 80002d58: 08013b03 ld s6,128(sp) + 80002d5c: 07813b83 ld s7,120(sp) + 80002d60: 07013c03 ld s8,112(sp) + 80002d64: 06813c83 ld s9,104(sp) + 80002d68: 06013d03 ld s10,96(sp) + 80002d6c: 05813d83 ld s11,88(sp) + 80002d70: 0c010113 addi sp,sp,192 + 80002d74: 00008067 ret + 80002d78: 04100413 li s0,65 + 80002d7c: f29ff06f j 80002ca4 <_ntoa_long+0x78> + 80002d80: 00000d13 li s10,0 + 80002d84: 03010493 addi s1,sp,48 + 80002d88: f7dff06f j 80002d04 <_ntoa_long+0xd8> + +0000000080002d8c <_ntoa_long_long>: + 80002d8c: f4010113 addi sp,sp,-192 + 80002d90: 09413823 sd s4,144(sp) + 80002d94: 09513423 sd s5,136(sp) + 80002d98: 09613023 sd s6,128(sp) + 80002d9c: 07713c23 sd s7,120(sp) + 80002da0: 07813823 sd s8,112(sp) + 80002da4: 07913423 sd s9,104(sp) + 80002da8: 05b13c23 sd s11,88(sp) + 80002dac: 0a113c23 sd ra,184(sp) + 80002db0: 0a813823 sd s0,176(sp) + 80002db4: 0a913423 sd s1,168(sp) + 80002db8: 0b213023 sd s2,160(sp) + 80002dbc: 09313c23 sd s3,152(sp) + 80002dc0: 07a13023 sd s10,96(sp) + 80002dc4: 02a13023 sd a0,32(sp) + 80002dc8: 03113423 sd a7,40(sp) + 80002dcc: 0c812a03 lw s4,200(sp) + 80002dd0: 00070d93 mv s11,a4 + 80002dd4: 00058b13 mv s6,a1 + 80002dd8: 00060b93 mv s7,a2 + 80002ddc: 00068c13 mv s8,a3 + 80002de0: 00078c93 mv s9,a5 + 80002de4: 00080a93 mv s5,a6 + 80002de8: 00071863 bnez a4,80002df8 <_ntoa_long_long+0x6c> + 80002dec: 400a7793 andi a5,s4,1024 + 80002df0: fefa7a13 andi s4,s4,-17 + 80002df4: 0e079663 bnez a5,80002ee0 <_ntoa_long_long+0x154> + 80002df8: 020a7793 andi a5,s4,32 + 80002dfc: 06100413 li s0,97 + 80002e00: 0c079c63 bnez a5,80002ed8 <_ntoa_long_long+0x14c> + 80002e04: 00000d13 li s10,0 + 80002e08: 03010493 addi s1,sp,48 + 80002e0c: 00900913 li s2,9 + 80002e10: ff64041b addiw s0,s0,-10 + 80002e14: 02000993 li s3,32 + 80002e18: 00c0006f j 80002e24 <_ntoa_long_long+0x98> + 80002e1c: 053d0463 beq s10,s3,80002e64 <_ntoa_long_long+0xd8> + 80002e20: 00050d93 mv s11,a0 + 80002e24: 000a8593 mv a1,s5 + 80002e28: 000d8513 mv a0,s11 + 80002e2c: d14ff0ef jal ra,80002340 <__umoddi3> + 80002e30: 0ff57313 andi t1,a0,255 + 80002e34: 0303071b addiw a4,t1,48 + 80002e38: 0064033b addw t1,s0,t1 + 80002e3c: 0ff37313 andi t1,t1,255 + 80002e40: 00a96463 bltu s2,a0,80002e48 <_ntoa_long_long+0xbc> + 80002e44: 0ff77313 andi t1,a4,255 + 80002e48: 001d0d13 addi s10,s10,1 + 80002e4c: 01a48733 add a4,s1,s10 + 80002e50: 000d8513 mv a0,s11 + 80002e54: 000a8593 mv a1,s5 + 80002e58: fe670fa3 sb t1,-1(a4) + 80002e5c: c9cff0ef jal ra,800022f8 <__udivdi3> + 80002e60: fb5dfee3 bgeu s11,s5,80002e1c <_ntoa_long_long+0x90> + 80002e64: 0c012703 lw a4,192(sp) + 80002e68: 02813783 ld a5,40(sp) + 80002e6c: 02013503 ld a0,32(sp) + 80002e70: 01413823 sd s4,16(sp) + 80002e74: 00e13423 sd a4,8(sp) + 80002e78: 00f13023 sd a5,0(sp) + 80002e7c: 000a889b sext.w a7,s5 + 80002e80: 000c8813 mv a6,s9 + 80002e84: 000d0793 mv a5,s10 + 80002e88: 00048713 mv a4,s1 + 80002e8c: 000c0693 mv a3,s8 + 80002e90: 000b8613 mv a2,s7 + 80002e94: 000b0593 mv a1,s6 + 80002e98: 8fdff0ef jal ra,80002794 <_ntoa_format> + 80002e9c: 0b813083 ld ra,184(sp) + 80002ea0: 0b013403 ld s0,176(sp) + 80002ea4: 0a813483 ld s1,168(sp) + 80002ea8: 0a013903 ld s2,160(sp) + 80002eac: 09813983 ld s3,152(sp) + 80002eb0: 09013a03 ld s4,144(sp) + 80002eb4: 08813a83 ld s5,136(sp) + 80002eb8: 08013b03 ld s6,128(sp) + 80002ebc: 07813b83 ld s7,120(sp) + 80002ec0: 07013c03 ld s8,112(sp) + 80002ec4: 06813c83 ld s9,104(sp) + 80002ec8: 06013d03 ld s10,96(sp) + 80002ecc: 05813d83 ld s11,88(sp) + 80002ed0: 0c010113 addi sp,sp,192 + 80002ed4: 00008067 ret + 80002ed8: 04100413 li s0,65 + 80002edc: f29ff06f j 80002e04 <_ntoa_long_long+0x78> + 80002ee0: 00000d13 li s10,0 + 80002ee4: 03010493 addi s1,sp,48 + 80002ee8: f7dff06f j 80002e64 <_ntoa_long_long+0xd8> + +0000000080002eec <_vsnprintf>: + 80002eec: f6010113 addi sp,sp,-160 + 80002ef0: 08913423 sd s1,136(sp) + 80002ef4: 09213023 sd s2,128(sp) + 80002ef8: 07313c23 sd s3,120(sp) + 80002efc: 05713c23 sd s7,88(sp) + 80002f00: 05813823 sd s8,80(sp) + 80002f04: 08113c23 sd ra,152(sp) + 80002f08: 08813823 sd s0,144(sp) + 80002f0c: 07413823 sd s4,112(sp) + 80002f10: 07513423 sd s5,104(sp) + 80002f14: 07613023 sd s6,96(sp) + 80002f18: 05913423 sd s9,72(sp) + 80002f1c: 05a13023 sd s10,64(sp) + 80002f20: 03b13c23 sd s11,56(sp) + 80002f24: 00058493 mv s1,a1 + 80002f28: 00060c13 mv s8,a2 + 80002f2c: 00068b93 mv s7,a3 + 80002f30: 00070993 mv s3,a4 + 80002f34: 00000917 auipc s2,0x0 + 80002f38: 85c90913 addi s2,s2,-1956 # 80002790 <_out_null> + 80002f3c: 00058463 beqz a1,80002f44 <_vsnprintf+0x58> + 80002f40: 00050913 mv s2,a0 + 80002f44: 000bc503 lbu a0,0(s7) + 80002f48: 00000d13 li s10,0 + 80002f4c: 66050663 beqz a0,800035b8 <_vsnprintf+0x6cc> + 80002f50: 000107b7 lui a5,0x10 + 80002f54: fff78793 addi a5,a5,-1 # ffff <_entry_offset+0xffff> + 80002f58: 02500a13 li s4,37 + 80002f5c: 00001417 auipc s0,0x1 + 80002f60: 24c40413 addi s0,s0,588 # 800041a8 + 80002f64: 00f13c23 sd a5,24(sp) + 80002f68: 0200006f j 80002f88 <_vsnprintf+0x9c> + 80002f6c: 000d0613 mv a2,s10 + 80002f70: 000c0693 mv a3,s8 + 80002f74: 00048593 mv a1,s1 + 80002f78: 001d0d13 addi s10,s10,1 + 80002f7c: 000900e7 jalr s2 + 80002f80: 000bc503 lbu a0,0(s7) + 80002f84: 1c050263 beqz a0,80003148 <_vsnprintf+0x25c> + 80002f88: 001b8b93 addi s7,s7,1 + 80002f8c: ff4510e3 bne a0,s4,80002f6c <_vsnprintf+0x80> + 80002f90: 00000593 li a1,0 + 80002f94: 01000813 li a6,16 + 80002f98: 000bc503 lbu a0,0(s7) + 80002f9c: 001b8713 addi a4,s7,1 + 80002fa0: 00070613 mv a2,a4 + 80002fa4: fe05079b addiw a5,a0,-32 + 80002fa8: 0ff7f793 andi a5,a5,255 + 80002fac: 00f86c63 bltu a6,a5,80002fc4 <_vsnprintf+0xd8> + 80002fb0: 00279793 slli a5,a5,0x2 + 80002fb4: 008787b3 add a5,a5,s0 + 80002fb8: 0007a783 lw a5,0(a5) + 80002fbc: 008787b3 add a5,a5,s0 + 80002fc0: 00078067 jr a5 + 80002fc4: fd05079b addiw a5,a0,-48 + 80002fc8: 0ff7f793 andi a5,a5,255 + 80002fcc: 00900813 li a6,9 + 80002fd0: 0ef87c63 bgeu a6,a5,800030c8 <_vsnprintf+0x1dc> + 80002fd4: 02a00793 li a5,42 + 80002fd8: 20f50463 beq a0,a5,800031e0 <_vsnprintf+0x2f4> + 80002fdc: 000b8613 mv a2,s7 + 80002fe0: 00000d93 li s11,0 + 80002fe4: 00070b93 mv s7,a4 + 80002fe8: 02e00793 li a5,46 + 80002fec: 00000c93 li s9,0 + 80002ff0: 12f50463 beq a0,a5,80003118 <_vsnprintf+0x22c> + 80002ff4: f985079b addiw a5,a0,-104 + 80002ff8: 0ff7f793 andi a5,a5,255 + 80002ffc: 01200713 li a4,18 + 80003000: 08f76463 bltu a4,a5,80003088 <_vsnprintf+0x19c> + 80003004: 00001717 auipc a4,0x1 + 80003008: 1e870713 addi a4,a4,488 # 800041ec + 8000300c: 00279793 slli a5,a5,0x2 + 80003010: 00e787b3 add a5,a5,a4 + 80003014: 0007a783 lw a5,0(a5) + 80003018: 00e787b3 add a5,a5,a4 + 8000301c: 00078067 jr a5 + 80003020: 0015e593 ori a1,a1,1 + 80003024: 0005859b sext.w a1,a1 + 80003028: 00070b93 mv s7,a4 + 8000302c: f6dff06f j 80002f98 <_vsnprintf+0xac> + 80003030: 0025e593 ori a1,a1,2 + 80003034: 0005859b sext.w a1,a1 + 80003038: 00070b93 mv s7,a4 + 8000303c: f5dff06f j 80002f98 <_vsnprintf+0xac> + 80003040: 0045e593 ori a1,a1,4 + 80003044: 0005859b sext.w a1,a1 + 80003048: 00070b93 mv s7,a4 + 8000304c: f4dff06f j 80002f98 <_vsnprintf+0xac> + 80003050: 0105e593 ori a1,a1,16 + 80003054: 0005859b sext.w a1,a1 + 80003058: 00070b93 mv s7,a4 + 8000305c: f3dff06f j 80002f98 <_vsnprintf+0xac> + 80003060: 0085e593 ori a1,a1,8 + 80003064: 0005859b sext.w a1,a1 + 80003068: 00070b93 mv s7,a4 + 8000306c: f2dff06f j 80002f98 <_vsnprintf+0xac> + 80003070: 00164503 lbu a0,1(a2) + 80003074: 06800793 li a5,104 + 80003078: 52f50663 beq a0,a5,800035a4 <_vsnprintf+0x6b8> + 8000307c: 0805e593 ori a1,a1,128 + 80003080: 0005859b sext.w a1,a1 + 80003084: 001b8b93 addi s7,s7,1 + 80003088: fdb5079b addiw a5,a0,-37 + 8000308c: 0ff7f793 andi a5,a5,255 + 80003090: 05300713 li a4,83 + 80003094: ecf76ce3 bltu a4,a5,80002f6c <_vsnprintf+0x80> + 80003098: 00001717 auipc a4,0x1 + 8000309c: 1a070713 addi a4,a4,416 # 80004238 + 800030a0: 00279793 slli a5,a5,0x2 + 800030a4: 00e787b3 add a5,a5,a4 + 800030a8: 0007a783 lw a5,0(a5) + 800030ac: 00e787b3 add a5,a5,a4 + 800030b0: 00078067 jr a5 + 800030b4: 00164503 lbu a0,1(a2) + 800030b8: 1005e593 ori a1,a1,256 + 800030bc: 0005859b sext.w a1,a1 + 800030c0: 001b8b93 addi s7,s7,1 + 800030c4: fc5ff06f j 80003088 <_vsnprintf+0x19c> + 800030c8: 00000d93 li s11,0 + 800030cc: 00900813 li a6,9 + 800030d0: 0080006f j 800030d8 <_vsnprintf+0x1ec> + 800030d4: 00170713 addi a4,a4,1 + 800030d8: 002d979b slliw a5,s11,0x2 + 800030dc: 01b787bb addw a5,a5,s11 + 800030e0: 0017979b slliw a5,a5,0x1 + 800030e4: 00a787bb addw a5,a5,a0 + 800030e8: 00074503 lbu a0,0(a4) + 800030ec: 000b8893 mv a7,s7 + 800030f0: fd078d9b addiw s11,a5,-48 + 800030f4: fd05061b addiw a2,a0,-48 + 800030f8: 0ff67613 andi a2,a2,255 + 800030fc: 00070b93 mv s7,a4 + 80003100: fcc87ae3 bgeu a6,a2,800030d4 <_vsnprintf+0x1e8> + 80003104: 02e00793 li a5,46 + 80003108: 00070613 mv a2,a4 + 8000310c: 00288b93 addi s7,a7,2 + 80003110: 00000c93 li s9,0 + 80003114: eef510e3 bne a0,a5,80002ff4 <_vsnprintf+0x108> + 80003118: 00164503 lbu a0,1(a2) + 8000311c: 4005e593 ori a1,a1,1024 + 80003120: 00900713 li a4,9 + 80003124: fd05079b addiw a5,a0,-48 + 80003128: 0ff7f793 andi a5,a5,255 + 8000312c: 0005859b sext.w a1,a1 + 80003130: 06f77c63 bgeu a4,a5,800031a8 <_vsnprintf+0x2bc> + 80003134: 02a00793 li a5,42 + 80003138: 32f50e63 beq a0,a5,80003474 <_vsnprintf+0x588> + 8000313c: 000b8613 mv a2,s7 + 80003140: 001b8b93 addi s7,s7,1 + 80003144: eb1ff06f j 80002ff4 <_vsnprintf+0x108> + 80003148: 000d041b sext.w s0,s10 + 8000314c: 018d6463 bltu s10,s8,80003154 <_vsnprintf+0x268> + 80003150: fffc0d13 addi s10,s8,-1 + 80003154: 000c0693 mv a3,s8 + 80003158: 000d0613 mv a2,s10 + 8000315c: 00048593 mv a1,s1 + 80003160: 00000513 li a0,0 + 80003164: 000900e7 jalr s2 + 80003168: 09813083 ld ra,152(sp) + 8000316c: 00040513 mv a0,s0 + 80003170: 09013403 ld s0,144(sp) + 80003174: 08813483 ld s1,136(sp) + 80003178: 08013903 ld s2,128(sp) + 8000317c: 07813983 ld s3,120(sp) + 80003180: 07013a03 ld s4,112(sp) + 80003184: 06813a83 ld s5,104(sp) + 80003188: 06013b03 ld s6,96(sp) + 8000318c: 05813b83 ld s7,88(sp) + 80003190: 05013c03 ld s8,80(sp) + 80003194: 04813c83 ld s9,72(sp) + 80003198: 04013d03 ld s10,64(sp) + 8000319c: 03813d83 ld s11,56(sp) + 800031a0: 0a010113 addi sp,sp,160 + 800031a4: 00008067 ret + 800031a8: 002c979b slliw a5,s9,0x2 + 800031ac: 019788bb addw a7,a5,s9 + 800031b0: 000b8813 mv a6,s7 + 800031b4: 0018989b slliw a7,a7,0x1 + 800031b8: 001b8b93 addi s7,s7,1 + 800031bc: 00a888bb addw a7,a7,a0 + 800031c0: 000bc503 lbu a0,0(s7) + 800031c4: fd088c9b addiw s9,a7,-48 + 800031c8: fd05079b addiw a5,a0,-48 + 800031cc: 0ff7f793 andi a5,a5,255 + 800031d0: fcf77ce3 bgeu a4,a5,800031a8 <_vsnprintf+0x2bc> + 800031d4: 000b8613 mv a2,s7 + 800031d8: 00280b93 addi s7,a6,2 + 800031dc: e19ff06f j 80002ff4 <_vsnprintf+0x108> + 800031e0: 0009a783 lw a5,0(s3) + 800031e4: 00898993 addi s3,s3,8 + 800031e8: 00078d9b sext.w s11,a5 + 800031ec: 0007c863 bltz a5,800031fc <_vsnprintf+0x310> + 800031f0: 001bc503 lbu a0,1(s7) + 800031f4: 002b8b93 addi s7,s7,2 + 800031f8: df1ff06f j 80002fe8 <_vsnprintf+0xfc> + 800031fc: 0025e593 ori a1,a1,2 + 80003200: 001bc503 lbu a0,1(s7) + 80003204: 0005859b sext.w a1,a1 + 80003208: 40f00dbb negw s11,a5 + 8000320c: 002b8b93 addi s7,s7,2 + 80003210: dd9ff06f j 80002fe8 <_vsnprintf+0xfc> + 80003214: 07800793 li a5,120 + 80003218: 00898a93 addi s5,s3,8 + 8000321c: 56f50063 beq a0,a5,8000377c <_vsnprintf+0x890> + 80003220: 05800793 li a5,88 + 80003224: 28f50463 beq a0,a5,800034ac <_vsnprintf+0x5c0> + 80003228: 06f00793 li a5,111 + 8000322c: 4af50c63 beq a0,a5,800036e4 <_vsnprintf+0x7f8> + 80003230: 06200793 li a5,98 + 80003234: 54f50063 beq a0,a5,80003774 <_vsnprintf+0x888> + 80003238: fef5ff13 andi t5,a1,-17 + 8000323c: 4005f793 andi a5,a1,1024 + 80003240: 06900713 li a4,105 + 80003244: 000f0f1b sext.w t5,t5 + 80003248: 0007879b sext.w a5,a5 + 8000324c: 5ae51063 bne a0,a4,800037ec <_vsnprintf+0x900> + 80003250: 48079663 bnez a5,800036dc <_vsnprintf+0x7f0> + 80003254: 2005f593 andi a1,a1,512 + 80003258: 0005879b sext.w a5,a1 + 8000325c: 00a00813 li a6,10 + 80003260: 42079663 bnez a5,8000368c <_vsnprintf+0x7a0> + 80003264: 100f7793 andi a5,t5,256 + 80003268: 000f0613 mv a2,t5 + 8000326c: 4e079063 bnez a5,8000374c <_vsnprintf+0x860> + 80003270: 040f7713 andi a4,t5,64 + 80003274: 0009a783 lw a5,0(s3) + 80003278: 4a071a63 bnez a4,8000372c <_vsnprintf+0x840> + 8000327c: 08067613 andi a2,a2,128 + 80003280: 52060a63 beqz a2,800037b4 <_vsnprintf+0x8c8> + 80003284: 0107979b slliw a5,a5,0x10 + 80003288: 4107d79b sraiw a5,a5,0x10 + 8000328c: 40f7d61b sraiw a2,a5,0xf + 80003290: 00c7c733 xor a4,a5,a2 + 80003294: 40c7073b subw a4,a4,a2 + 80003298: 03071713 slli a4,a4,0x30 + 8000329c: 03075713 srli a4,a4,0x30 + 800032a0: 000d0613 mv a2,s10 + 800032a4: 01e13423 sd t5,8(sp) + 800032a8: 01b13023 sd s11,0(sp) + 800032ac: 000c8893 mv a7,s9 + 800032b0: 01f7d79b srliw a5,a5,0x1f + 800032b4: 000c0693 mv a3,s8 + 800032b8: 00048593 mv a1,s1 + 800032bc: 00090513 mv a0,s2 + 800032c0: 96dff0ef jal ra,80002c2c <_ntoa_long> + 800032c4: 00050d13 mv s10,a0 + 800032c8: 000a8993 mv s3,s5 + 800032cc: cb5ff06f j 80002f80 <_vsnprintf+0x94> + 800032d0: 00164503 lbu a0,1(a2) + 800032d4: 06c00793 li a5,108 + 800032d8: def510e3 bne a0,a5,800030b8 <_vsnprintf+0x1cc> + 800032dc: 3005e593 ori a1,a1,768 + 800032e0: 00264503 lbu a0,2(a2) + 800032e4: 0005859b sext.w a1,a1 + 800032e8: 00360b93 addi s7,a2,3 + 800032ec: d9dff06f j 80003088 <_vsnprintf+0x19c> + 800032f0: 00898793 addi a5,s3,8 + 800032f4: 001d0813 addi a6,s10,1 + 800032f8: 0025f593 andi a1,a1,2 + 800032fc: 02f13023 sd a5,32(sp) + 80003300: 00080b13 mv s6,a6 + 80003304: 32058263 beqz a1,80003628 <_vsnprintf+0x73c> + 80003308: 0009c503 lbu a0,0(s3) + 8000330c: 000c0693 mv a3,s8 + 80003310: 000d0613 mv a2,s10 + 80003314: 00048593 mv a1,s1 + 80003318: 000900e7 jalr s2 + 8000331c: 00100793 li a5,1 + 80003320: 43b7f063 bgeu a5,s11,80003740 <_vsnprintf+0x854> + 80003324: ffed879b addiw a5,s11,-2 + 80003328: 02079a93 slli s5,a5,0x20 + 8000332c: 020ada93 srli s5,s5,0x20 + 80003330: 002d0d13 addi s10,s10,2 + 80003334: 015d0cb3 add s9,s10,s5 + 80003338: 000b0613 mv a2,s6 + 8000333c: 000c0693 mv a3,s8 + 80003340: 001b0b13 addi s6,s6,1 + 80003344: 00048593 mv a1,s1 + 80003348: 02000513 li a0,32 + 8000334c: 000900e7 jalr s2 + 80003350: ff6c94e3 bne s9,s6,80003338 <_vsnprintf+0x44c> + 80003354: 02013983 ld s3,32(sp) + 80003358: 015d0d33 add s10,s10,s5 + 8000335c: c25ff06f j 80002f80 <_vsnprintf+0x94> + 80003360: 000d0613 mv a2,s10 + 80003364: 000c0693 mv a3,s8 + 80003368: 00048593 mv a1,s1 + 8000336c: 02500513 li a0,37 + 80003370: 001d0d13 addi s10,s10,1 + 80003374: 000900e7 jalr s2 + 80003378: c09ff06f j 80002f80 <_vsnprintf+0x94> + 8000337c: 0009ba83 ld s5,0(s3) + 80003380: 00898793 addi a5,s3,8 + 80003384: 02f13023 sd a5,32(sp) + 80003388: 000ac503 lbu a0,0(s5) + 8000338c: 100c9663 bnez s9,80003498 <_vsnprintf+0x5ac> + 80003390: ffe00793 li a5,-2 + 80003394: 42050863 beqz a0,800037c4 <_vsnprintf+0x8d8> + 80003398: 00178693 addi a3,a5,1 + 8000339c: 00da8633 add a2,s5,a3 + 800033a0: 000a8793 mv a5,s5 + 800033a4: 0080006f j 800033ac <_vsnprintf+0x4c0> + 800033a8: 1ec78863 beq a5,a2,80003598 <_vsnprintf+0x6ac> + 800033ac: 0017c703 lbu a4,1(a5) + 800033b0: 00178793 addi a5,a5,1 + 800033b4: fe071ae3 bnez a4,800033a8 <_vsnprintf+0x4bc> + 800033b8: 415787bb subw a5,a5,s5 + 800033bc: 00f13823 sd a5,16(sp) + 800033c0: 4005f793 andi a5,a1,1024 + 800033c4: 0007899b sext.w s3,a5 + 800033c8: 00078c63 beqz a5,800033e0 <_vsnprintf+0x4f4> + 800033cc: 01013703 ld a4,16(sp) + 800033d0: 000c879b sext.w a5,s9 + 800033d4: 01977463 bgeu a4,s9,800033dc <_vsnprintf+0x4f0> + 800033d8: 0007079b sext.w a5,a4 + 800033dc: 00f13823 sd a5,16(sp) + 800033e0: 0025f593 andi a1,a1,2 + 800033e4: 0005879b sext.w a5,a1 + 800033e8: 02f13423 sd a5,40(sp) + 800033ec: 1c058a63 beqz a1,800035c0 <_vsnprintf+0x6d4> + 800033f0: 14050863 beqz a0,80003540 <_vsnprintf+0x654> + 800033f4: 000d0613 mv a2,s10 + 800033f8: 00098863 beqz s3,80003408 <_vsnprintf+0x51c> + 800033fc: fffc879b addiw a5,s9,-1 + 80003400: 120c8863 beqz s9,80003530 <_vsnprintf+0x644> + 80003404: 00078c93 mv s9,a5 + 80003408: 000c0693 mv a3,s8 + 8000340c: 00048593 mv a1,s1 + 80003410: 00160b13 addi s6,a2,1 + 80003414: 000900e7 jalr s2 + 80003418: 41ab07b3 sub a5,s6,s10 + 8000341c: 00fa87b3 add a5,s5,a5 + 80003420: 0007c503 lbu a0,0(a5) + 80003424: 10050863 beqz a0,80003534 <_vsnprintf+0x648> + 80003428: 000b0613 mv a2,s6 + 8000342c: fcdff06f j 800033f8 <_vsnprintf+0x50c> + 80003430: 0009b703 ld a4,0(s3) + 80003434: 0215e593 ori a1,a1,33 + 80003438: 0005859b sext.w a1,a1 + 8000343c: 01000793 li a5,16 + 80003440: 000d0613 mv a2,s10 + 80003444: 00b13423 sd a1,8(sp) + 80003448: 00f13023 sd a5,0(sp) + 8000344c: 000c8893 mv a7,s9 + 80003450: 01000813 li a6,16 + 80003454: 00000793 li a5,0 + 80003458: 000c0693 mv a3,s8 + 8000345c: 00048593 mv a1,s1 + 80003460: 00090513 mv a0,s2 + 80003464: 929ff0ef jal ra,80002d8c <_ntoa_long_long> + 80003468: 00898993 addi s3,s3,8 + 8000346c: 00050d13 mv s10,a0 + 80003470: b11ff06f j 80002f80 <_vsnprintf+0x94> + 80003474: 0009a883 lw a7,0(s3) + 80003478: 00264503 lbu a0,2(a2) + 8000347c: 00360b93 addi s7,a2,3 + 80003480: fff8c793 not a5,a7 + 80003484: 43f7d793 srai a5,a5,0x3f + 80003488: 00f8fcb3 and s9,a7,a5 + 8000348c: 00898993 addi s3,s3,8 + 80003490: 00260613 addi a2,a2,2 + 80003494: b61ff06f j 80002ff4 <_vsnprintf+0x108> + 80003498: 020c9793 slli a5,s9,0x20 + 8000349c: 0207d793 srli a5,a5,0x20 + 800034a0: 32050263 beqz a0,800037c4 <_vsnprintf+0x8d8> + 800034a4: fff78793 addi a5,a5,-1 + 800034a8: ef1ff06f j 80003398 <_vsnprintf+0x4ac> + 800034ac: ff35ff13 andi t5,a1,-13 + 800034b0: 000f0f1b sext.w t5,t5 + 800034b4: 4005f793 andi a5,a1,1024 + 800034b8: 020f6f13 ori t5,t5,32 + 800034bc: 20078863 beqz a5,800036cc <_vsnprintf+0x7e0> + 800034c0: 01000813 li a6,16 + 800034c4: ffef7f13 andi t5,t5,-2 + 800034c8: 000f0f1b sext.w t5,t5 + 800034cc: 200f7793 andi a5,t5,512 + 800034d0: 06900713 li a4,105 + 800034d4: 0007879b sext.w a5,a5 + 800034d8: d8e504e3 beq a0,a4,80003260 <_vsnprintf+0x374> + 800034dc: 06400713 li a4,100 + 800034e0: d8e500e3 beq a0,a4,80003260 <_vsnprintf+0x374> + 800034e4: 22079663 bnez a5,80003710 <_vsnprintf+0x824> + 800034e8: 100f7793 andi a5,t5,256 + 800034ec: 000f0713 mv a4,t5 + 800034f0: 2a079463 bnez a5,80003798 <_vsnprintf+0x8ac> + 800034f4: 040f7793 andi a5,t5,64 + 800034f8: 24079063 bnez a5,80003738 <_vsnprintf+0x84c> + 800034fc: 08077713 andi a4,a4,128 + 80003500: 2c070663 beqz a4,800037cc <_vsnprintf+0x8e0> + 80003504: 0009a703 lw a4,0(s3) + 80003508: 01813783 ld a5,24(sp) + 8000350c: 00e7f733 and a4,a5,a4 + 80003510: 02071713 slli a4,a4,0x20 + 80003514: 000d0613 mv a2,s10 + 80003518: 01e13423 sd t5,8(sp) + 8000351c: 01b13023 sd s11,0(sp) + 80003520: 000c8893 mv a7,s9 + 80003524: 00000793 li a5,0 + 80003528: 02075713 srli a4,a4,0x20 + 8000352c: d89ff06f j 800032b4 <_vsnprintf+0x3c8> + 80003530: 00060b13 mv s6,a2 + 80003534: 02813783 ld a5,40(sp) + 80003538: 04078a63 beqz a5,8000358c <_vsnprintf+0x6a0> + 8000353c: 000b0d13 mv s10,s6 + 80003540: 01013703 ld a4,16(sp) + 80003544: 0db77e63 bgeu a4,s11,80003620 <_vsnprintf+0x734> + 80003548: fffd879b addiw a5,s11,-1 + 8000354c: 40e7873b subw a4,a5,a4 + 80003550: 02071713 slli a4,a4,0x20 + 80003554: 02075713 srli a4,a4,0x20 + 80003558: 001d0813 addi a6,s10,1 + 8000355c: 01070b33 add s6,a4,a6 + 80003560: 0080006f j 80003568 <_vsnprintf+0x67c> + 80003564: 00180813 addi a6,a6,1 + 80003568: 000d0613 mv a2,s10 + 8000356c: 01013823 sd a6,16(sp) + 80003570: 000c0693 mv a3,s8 + 80003574: 00048593 mv a1,s1 + 80003578: 02000513 li a0,32 + 8000357c: 00080d13 mv s10,a6 + 80003580: 000900e7 jalr s2 + 80003584: 01013803 ld a6,16(sp) + 80003588: fd0b1ee3 bne s6,a6,80003564 <_vsnprintf+0x678> + 8000358c: 02013983 ld s3,32(sp) + 80003590: 000b0d13 mv s10,s6 + 80003594: 9edff06f j 80002f80 <_vsnprintf+0x94> + 80003598: 0006879b sext.w a5,a3 + 8000359c: 00f13823 sd a5,16(sp) + 800035a0: e21ff06f j 800033c0 <_vsnprintf+0x4d4> + 800035a4: 0c05e593 ori a1,a1,192 + 800035a8: 00264503 lbu a0,2(a2) + 800035ac: 0005859b sext.w a1,a1 + 800035b0: 00360b93 addi s7,a2,3 + 800035b4: ad5ff06f j 80003088 <_vsnprintf+0x19c> + 800035b8: 00000413 li s0,0 + 800035bc: b91ff06f j 8000314c <_vsnprintf+0x260> + 800035c0: 01013703 ld a4,16(sp) + 800035c4: 0017079b addiw a5,a4,1 + 800035c8: 21b77c63 bgeu a4,s11,800037e0 <_vsnprintf+0x8f4> + 800035cc: fffd879b addiw a5,s11,-1 + 800035d0: 40e787bb subw a5,a5,a4 + 800035d4: 02079793 slli a5,a5,0x20 + 800035d8: 0207d793 srli a5,a5,0x20 + 800035dc: 001d0813 addi a6,s10,1 + 800035e0: 01078b33 add s6,a5,a6 + 800035e4: 00c0006f j 800035f0 <_vsnprintf+0x704> + 800035e8: 01013803 ld a6,16(sp) + 800035ec: 00180813 addi a6,a6,1 + 800035f0: 000d0613 mv a2,s10 + 800035f4: 000c0693 mv a3,s8 + 800035f8: 00080d13 mv s10,a6 + 800035fc: 01013823 sd a6,16(sp) + 80003600: 00048593 mv a1,s1 + 80003604: 02000513 li a0,32 + 80003608: 000900e7 jalr s2 + 8000360c: fd6d1ee3 bne s10,s6,800035e8 <_vsnprintf+0x6fc> + 80003610: 000ac503 lbu a0,0(s5) + 80003614: 001d879b addiw a5,s11,1 + 80003618: 00f13823 sd a5,16(sp) + 8000361c: dc051ce3 bnez a0,800033f4 <_vsnprintf+0x508> + 80003620: 000d0b13 mv s6,s10 + 80003624: f69ff06f j 8000358c <_vsnprintf+0x6a0> + 80003628: 00100793 li a5,1 + 8000362c: 1bb7f463 bgeu a5,s11,800037d4 <_vsnprintf+0x8e8> + 80003630: ffed879b addiw a5,s11,-2 + 80003634: 02079a93 slli s5,a5,0x20 + 80003638: 020ada93 srli s5,s5,0x20 + 8000363c: 010a8ab3 add s5,s5,a6 + 80003640: 00c0006f j 8000364c <_vsnprintf+0x760> + 80003644: 01013803 ld a6,16(sp) + 80003648: 00180813 addi a6,a6,1 + 8000364c: 000d0613 mv a2,s10 + 80003650: 000c0693 mv a3,s8 + 80003654: 00080d13 mv s10,a6 + 80003658: 01013823 sd a6,16(sp) + 8000365c: 00048593 mv a1,s1 + 80003660: 02000513 li a0,32 + 80003664: 000900e7 jalr s2 + 80003668: fdaa9ee3 bne s5,s10,80003644 <_vsnprintf+0x758> + 8000366c: 001a8d13 addi s10,s5,1 + 80003670: 0009c503 lbu a0,0(s3) + 80003674: 000c0693 mv a3,s8 + 80003678: 000a8613 mv a2,s5 + 8000367c: 00048593 mv a1,s1 + 80003680: 000900e7 jalr s2 + 80003684: 02013983 ld s3,32(sp) + 80003688: 8f9ff06f j 80002f80 <_vsnprintf+0x94> + 8000368c: 0009b783 ld a5,0(s3) + 80003690: 000d0613 mv a2,s10 + 80003694: 01e13423 sd t5,8(sp) + 80003698: 43f7d713 srai a4,a5,0x3f + 8000369c: 00f745b3 xor a1,a4,a5 + 800036a0: 01b13023 sd s11,0(sp) + 800036a4: 000c8893 mv a7,s9 + 800036a8: 03f7d793 srli a5,a5,0x3f + 800036ac: 40e58733 sub a4,a1,a4 + 800036b0: 000c0693 mv a3,s8 + 800036b4: 00048593 mv a1,s1 + 800036b8: 00090513 mv a0,s2 + 800036bc: ed0ff0ef jal ra,80002d8c <_ntoa_long_long> + 800036c0: 00050d13 mv s10,a0 + 800036c4: 000a8993 mv s3,s5 + 800036c8: 8b9ff06f j 80002f80 <_vsnprintf+0x94> + 800036cc: 2005f793 andi a5,a1,512 + 800036d0: 0007879b sext.w a5,a5 + 800036d4: 01000813 li a6,16 + 800036d8: e0dff06f j 800034e4 <_vsnprintf+0x5f8> + 800036dc: 00a00813 li a6,10 + 800036e0: de5ff06f j 800034c4 <_vsnprintf+0x5d8> + 800036e4: 00800813 li a6,8 + 800036e8: 00058f13 mv t5,a1 + 800036ec: 400f7713 andi a4,t5,1024 + 800036f0: 06400613 li a2,100 + 800036f4: 000f0793 mv a5,t5 + 800036f8: 0007071b sext.w a4,a4 + 800036fc: 0ec51c63 bne a0,a2,800037f4 <_vsnprintf+0x908> + 80003700: dc0712e3 bnez a4,800034c4 <_vsnprintf+0x5d8> + 80003704: 2007f793 andi a5,a5,512 + 80003708: 0007879b sext.w a5,a5 + 8000370c: b55ff06f j 80003260 <_vsnprintf+0x374> + 80003710: 0009b703 ld a4,0(s3) + 80003714: 000d0613 mv a2,s10 + 80003718: 01e13423 sd t5,8(sp) + 8000371c: 01b13023 sd s11,0(sp) + 80003720: 000c8893 mv a7,s9 + 80003724: 00000793 li a5,0 + 80003728: f89ff06f j 800036b0 <_vsnprintf+0x7c4> + 8000372c: 0ff7f793 andi a5,a5,255 + 80003730: 00078713 mv a4,a5 + 80003734: b6dff06f j 800032a0 <_vsnprintf+0x3b4> + 80003738: 0009c703 lbu a4,0(s3) + 8000373c: dd5ff06f j 80003510 <_vsnprintf+0x624> + 80003740: 02013983 ld s3,32(sp) + 80003744: 000b0d13 mv s10,s6 + 80003748: 839ff06f j 80002f80 <_vsnprintf+0x94> + 8000374c: 0009b783 ld a5,0(s3) + 80003750: 000d0613 mv a2,s10 + 80003754: 01e13423 sd t5,8(sp) + 80003758: 43f7d713 srai a4,a5,0x3f + 8000375c: 00f745b3 xor a1,a4,a5 + 80003760: 01b13023 sd s11,0(sp) + 80003764: 000c8893 mv a7,s9 + 80003768: 03f7d793 srli a5,a5,0x3f + 8000376c: 40e58733 sub a4,a1,a4 + 80003770: b45ff06f j 800032b4 <_vsnprintf+0x3c8> + 80003774: 00200813 li a6,2 + 80003778: f71ff06f j 800036e8 <_vsnprintf+0x7fc> + 8000377c: 4005f713 andi a4,a1,1024 + 80003780: 0007071b sext.w a4,a4 + 80003784: 01000813 li a6,16 + 80003788: ff35f593 andi a1,a1,-13 + 8000378c: 00058f1b sext.w t5,a1 + 80003790: d2071ae3 bnez a4,800034c4 <_vsnprintf+0x5d8> + 80003794: d39ff06f j 800034cc <_vsnprintf+0x5e0> + 80003798: 0009b703 ld a4,0(s3) + 8000379c: 000d0613 mv a2,s10 + 800037a0: 01e13423 sd t5,8(sp) + 800037a4: 01b13023 sd s11,0(sp) + 800037a8: 000c8893 mv a7,s9 + 800037ac: 00000793 li a5,0 + 800037b0: b05ff06f j 800032b4 <_vsnprintf+0x3c8> + 800037b4: 41f7d61b sraiw a2,a5,0x1f + 800037b8: 00c7c733 xor a4,a5,a2 + 800037bc: 40c7073b subw a4,a4,a2 + 800037c0: ae1ff06f j 800032a0 <_vsnprintf+0x3b4> + 800037c4: 00013823 sd zero,16(sp) + 800037c8: bf9ff06f j 800033c0 <_vsnprintf+0x4d4> + 800037cc: 0009a703 lw a4,0(s3) + 800037d0: d41ff06f j 80003510 <_vsnprintf+0x624> + 800037d4: 000d0a93 mv s5,s10 + 800037d8: 00080d13 mv s10,a6 + 800037dc: e95ff06f j 80003670 <_vsnprintf+0x784> + 800037e0: 00f13823 sd a5,16(sp) + 800037e4: c00518e3 bnez a0,800033f4 <_vsnprintf+0x508> + 800037e8: e39ff06f j 80003620 <_vsnprintf+0x734> + 800037ec: 00a00813 li a6,10 + 800037f0: efdff06f j 800036ec <_vsnprintf+0x800> + 800037f4: 000f0593 mv a1,t5 + 800037f8: f91ff06f j 80003788 <_vsnprintf+0x89c> + +00000000800037fc <_out_char>: + 800037fc: 00051463 bnez a0,80003804 <_out_char+0x8> + 80003800: 00008067 ret + 80003804: a3dfe06f j 80002240 + +0000000080003808 : + 80003808: fa010113 addi sp,sp,-96 + 8000380c: 02810313 addi t1,sp,40 + 80003810: 02b13423 sd a1,40(sp) + 80003814: 02c13823 sd a2,48(sp) + 80003818: 02d13c23 sd a3,56(sp) + 8000381c: 04e13023 sd a4,64(sp) + 80003820: 00050693 mv a3,a0 + 80003824: 00010593 mv a1,sp + 80003828: 00030713 mv a4,t1 + 8000382c: fff00613 li a2,-1 + 80003830: 00000517 auipc a0,0x0 + 80003834: fcc50513 addi a0,a0,-52 # 800037fc <_out_char> + 80003838: 00113c23 sd ra,24(sp) + 8000383c: 04f13423 sd a5,72(sp) + 80003840: 05013823 sd a6,80(sp) + 80003844: 05113c23 sd a7,88(sp) + 80003848: 00613423 sd t1,8(sp) + 8000384c: ea0ff0ef jal ra,80002eec <_vsnprintf> + 80003850: 01813083 ld ra,24(sp) + 80003854: 06010113 addi sp,sp,96 + 80003858: 00008067 ret + +000000008000385c : + 8000385c: 00700713 li a4,7 + 80003860: 00050793 mv a5,a0 + 80003864: 0ac77a63 bgeu a4,a2,80003918 + 80003868: 0ff5f893 andi a7,a1,255 + 8000386c: 00889693 slli a3,a7,0x8 + 80003870: 0116e6b3 or a3,a3,a7 + 80003874: 01069713 slli a4,a3,0x10 + 80003878: 00d766b3 or a3,a4,a3 + 8000387c: 02069713 slli a4,a3,0x20 + 80003880: 00757813 andi a6,a0,7 + 80003884: 00d76733 or a4,a4,a3 + 80003888: 0a080663 beqz a6,80003934 + 8000388c: 00c50633 add a2,a0,a2 + 80003890: 01178023 sb a7,0(a5) + 80003894: 00178793 addi a5,a5,1 + 80003898: 0077f813 andi a6,a5,7 + 8000389c: 40f606b3 sub a3,a2,a5 + 800038a0: fe0818e3 bnez a6,80003890 + 800038a4: 0066d813 srli a6,a3,0x6 + 800038a8: 04080063 beqz a6,800038e8 + 800038ac: 00681613 slli a2,a6,0x6 + 800038b0: 00078893 mv a7,a5 + 800038b4: 00f60633 add a2,a2,a5 + 800038b8: 00e7b023 sd a4,0(a5) + 800038bc: 00e7b423 sd a4,8(a5) + 800038c0: 00e7b823 sd a4,16(a5) + 800038c4: 00e7bc23 sd a4,24(a5) + 800038c8: 02e7b023 sd a4,32(a5) + 800038cc: 02e7b423 sd a4,40(a5) + 800038d0: 02e7b823 sd a4,48(a5) + 800038d4: 02e7bc23 sd a4,56(a5) + 800038d8: 04078793 addi a5,a5,64 + 800038dc: fcf61ee3 bne a2,a5,800038b8 + 800038e0: 00681793 slli a5,a6,0x6 + 800038e4: 011787b3 add a5,a5,a7 + 800038e8: 0036d813 srli a6,a3,0x3 + 800038ec: 00787813 andi a6,a6,7 + 800038f0: 02080263 beqz a6,80003914 + 800038f4: 00381613 slli a2,a6,0x3 + 800038f8: 00078893 mv a7,a5 + 800038fc: 00f60633 add a2,a2,a5 + 80003900: 00e7b023 sd a4,0(a5) + 80003904: 00878793 addi a5,a5,8 + 80003908: fef61ce3 bne a2,a5,80003900 + 8000390c: 00381793 slli a5,a6,0x3 + 80003910: 011787b3 add a5,a5,a7 + 80003914: 0076f613 andi a2,a3,7 + 80003918: 0ff5f593 andi a1,a1,255 + 8000391c: 00c78733 add a4,a5,a2 + 80003920: 00060863 beqz a2,80003930 + 80003924: 00b78023 sb a1,0(a5) + 80003928: 00178793 addi a5,a5,1 + 8000392c: fef71ce3 bne a4,a5,80003924 + 80003930: 00008067 ret + 80003934: 00060693 mv a3,a2 + 80003938: f6dff06f j 800038a4 + +000000008000393c : + 8000393c: 1a050e63 beqz a0,80003af8 + 80003940: fd010113 addi sp,sp,-48 + 80003944: 02813023 sd s0,32(sp) + 80003948: 00913c23 sd s1,24(sp) + 8000394c: 01f57793 andi a5,a0,31 + 80003950: 02113423 sd ra,40(sp) + 80003954: 01213823 sd s2,16(sp) + 80003958: 01313423 sd s3,8(sp) + 8000395c: 01413023 sd s4,0(sp) + 80003960: 00050493 mv s1,a0 + 80003964: 00050413 mv s0,a0 + 80003968: 00000513 li a0,0 + 8000396c: 14079a63 bnez a5,80003ac0 + 80003970: 27f00713 li a4,639 + 80003974: 00058913 mv s2,a1 + 80003978: 00078513 mv a0,a5 + 8000397c: 14b77263 bgeu a4,a1,80003ac0 + 80003980: 0074f513 andi a0,s1,7 + 80003984: 00153513 seqz a0,a0 + 80003988: 00060a13 mv s4,a2 + 8000398c: 00068993 mv s3,a3 + 80003990: 8c1fe0ef jal ra,80002250 <_assert> + 80003994: 20048793 addi a5,s1,512 + 80003998: 2004b023 sd zero,512(s1) + 8000399c: 2144b423 sd s4,520(s1) + 800039a0: 2134b823 sd s3,528(s1) + 800039a4: 00043023 sd zero,0(s0) + 800039a8: 00840413 addi s0,s0,8 + 800039ac: fe879ce3 bne a5,s0,800039a4 + 800039b0: fff00793 li a5,-1 + 800039b4: dc090413 addi s0,s2,-576 + 800039b8: 03f79793 slli a5,a5,0x3f + 800039bc: 1287f863 bgeu a5,s0,80003aec + 800039c0: 00078413 mv s0,a5 + 800039c4: 00100513 li a0,1 + 800039c8: 889fe0ef jal ra,80002250 <_assert> + 800039cc: f8300793 li a5,-125 + 800039d0: 0017d793 srli a5,a5,0x1 + 800039d4: fc040513 addi a0,s0,-64 + 800039d8: 00f53533 sltu a0,a0,a5 + 800039dc: 875fe0ef jal ra,80002250 <_assert> + 800039e0: 01f4f513 andi a0,s1,31 + 800039e4: 00153513 seqz a0,a0 + 800039e8: 869fe0ef jal ra,80002250 <_assert> + 800039ec: 00100513 li a0,1 + 800039f0: 2404b023 sd zero,576(s1) + 800039f4: 2404b423 sd zero,584(s1) + 800039f8: 2484b823 sd s0,592(s1) + 800039fc: 24048c23 sb zero,600(s1) + 80003a00: 2604b023 sd zero,608(s1) + 80003a04: 2604b423 sd zero,616(s1) + 80003a08: 849fe0ef jal ra,80002250 <_assert> + 80003a0c: 00100513 li a0,1 + 80003a10: 841fe0ef jal ra,80002250 <_assert> + 80003a14: 2504b503 ld a0,592(s1) + 80003a18: 24048a13 addi s4,s1,576 + 80003a1c: 04053513 sltiu a0,a0,64 + 80003a20: 00154513 xori a0,a0,1 + 80003a24: 00157513 andi a0,a0,1 + 80003a28: 829fe0ef jal ra,80002250 <_assert> + 80003a2c: 2504b503 ld a0,592(s1) + 80003a30: 03f57513 andi a0,a0,63 + 80003a34: 00153513 seqz a0,a0 + 80003a38: 819fe0ef jal ra,80002250 <_assert> + 80003a3c: 2504b703 ld a4,592(s1) + 80003a40: 00100793 li a5,1 + 80003a44: 00675713 srli a4,a4,0x6 + 80003a48: 0ae7fc63 bgeu a5,a4,80003b00 + 80003a4c: 00000793 li a5,0 + 80003a50: 00100693 li a3,1 + 80003a54: 0017879b addiw a5,a5,1 + 80003a58: 00175713 srli a4,a4,0x1 + 80003a5c: 0ff7f793 andi a5,a5,255 + 80003a60: fed71ae3 bne a4,a3,80003a54 + 80003a64: 00078993 mv s3,a5 + 80003a68: 0407b513 sltiu a0,a5,64 + 80003a6c: 00f71933 sll s2,a4,a5 + 80003a70: fe0fe0ef jal ra,80002250 <_assert> + 80003a74: 00399793 slli a5,s3,0x3 + 80003a78: 00f487b3 add a5,s1,a5 + 80003a7c: 0007b703 ld a4,0(a5) + 80003a80: 2604b423 sd zero,616(s1) + 80003a84: 26e4b023 sd a4,608(s1) + 80003a88: 00070463 beqz a4,80003a90 + 80003a8c: 03473423 sd s4,40(a4) + 80003a90: 0147b023 sd s4,0(a5) + 80003a94: 2004b503 ld a0,512(s1) + 80003a98: 00a96533 or a0,s2,a0 + 80003a9c: 20a4b023 sd a0,512(s1) + 80003aa0: 00a03533 snez a0,a0 + 80003aa4: facfe0ef jal ra,80002250 <_assert> + 80003aa8: 00048513 mv a0,s1 + 80003aac: 2084bc23 sd s0,536(s1) + 80003ab0: 2204b023 sd zero,544(s1) + 80003ab4: 2204b423 sd zero,552(s1) + 80003ab8: 2204b823 sd zero,560(s1) + 80003abc: 2204bc23 sd zero,568(s1) + 80003ac0: 02813083 ld ra,40(sp) + 80003ac4: 02013403 ld s0,32(sp) + 80003ac8: 01813483 ld s1,24(sp) + 80003acc: 01013903 ld s2,16(sp) + 80003ad0: 00813983 ld s3,8(sp) + 80003ad4: 00013a03 ld s4,0(sp) + 80003ad8: 03010113 addi sp,sp,48 + 80003adc: 00008067 ret + 80003ae0: 00100513 li a0,1 + 80003ae4: fff40413 addi s0,s0,-1 + 80003ae8: f68fe0ef jal ra,80002250 <_assert> + 80003aec: 03f47793 andi a5,s0,63 + 80003af0: fe0798e3 bnez a5,80003ae0 + 80003af4: ed1ff06f j 800039c4 + 80003af8: 00000513 li a0,0 + 80003afc: 00008067 ret + 80003b00: 00100913 li s2,1 + 80003b04: 00000993 li s3,0 + 80003b08: 00100513 li a0,1 + 80003b0c: f65ff06f j 80003a70 diff --git a/bin/non-output/cpu-tests/add-cpu-tests.elf b/bin/non-output/cpu-tests/add-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..c6e3ec4debd648ae00602fa7624603679547ad90 GIT binary patch literal 42040 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: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 114000ef jal ra,80000120 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 0d8000ef jal ra,800000fc + +0000000080000028
: + 80000028: fb010113 addi sp,sp,-80 + 8000002c: 01713423 sd s7,8(sp) + 80000030: 00000b97 auipc s7,0x0 + 80000034: 430b8b93 addi s7,s7,1072 # 80000460 + 80000038: 03313423 sd s3,40(sp) + 8000003c: 03413023 sd s4,32(sp) + 80000040: 01513c23 sd s5,24(sp) + 80000044: 01613823 sd s6,16(sp) + 80000048: 01813023 sd s8,0(sp) + 8000004c: 04113423 sd ra,72(sp) + 80000050: 04813023 sd s0,64(sp) + 80000054: 02913c23 sd s1,56(sp) + 80000058: 03213823 sd s2,48(sp) + 8000005c: 00000b17 auipc s6,0x0 + 80000060: 304b0b13 addi s6,s6,772 # 80000360 + 80000064: 000b8a93 mv s5,s7 + 80000068: 00000a13 li s4,0 + 8000006c: 00000997 auipc s3,0x0 + 80000070: 41498993 addi s3,s3,1044 # 80000480 + 80000074: 04000c13 li s8,64 + 80000078: 000aa903 lw s2,0(s5) + 8000007c: 000b0493 mv s1,s6 + 80000080: 000b8413 mv s0,s7 + 80000084: 00042503 lw a0,0(s0) + 80000088: 0004a783 lw a5,0(s1) + 8000008c: 00440413 addi s0,s0,4 + 80000090: 0125053b addw a0,a0,s2 + 80000094: 40f50533 sub a0,a0,a5 + 80000098: 00153513 seqz a0,a0 + 8000009c: f75ff0ef jal ra,80000010 + 800000a0: 00448493 addi s1,s1,4 + 800000a4: fe8990e3 bne s3,s0,80000084 + 800000a8: 00100513 li a0,1 + 800000ac: 008a0a1b addiw s4,s4,8 + 800000b0: f61ff0ef jal ra,80000010 + 800000b4: 004a8a93 addi s5,s5,4 + 800000b8: 020b0b13 addi s6,s6,32 + 800000bc: fb8a1ee3 bne s4,s8,80000078 + 800000c0: 00100513 li a0,1 + 800000c4: f4dff0ef jal ra,80000010 + 800000c8: 04813083 ld ra,72(sp) + 800000cc: 04013403 ld s0,64(sp) + 800000d0: 03813483 ld s1,56(sp) + 800000d4: 03013903 ld s2,48(sp) + 800000d8: 02813983 ld s3,40(sp) + 800000dc: 02013a03 ld s4,32(sp) + 800000e0: 01813a83 ld s5,24(sp) + 800000e4: 01013b03 ld s6,16(sp) + 800000e8: 00813b83 ld s7,8(sp) + 800000ec: 00013c03 ld s8,0(sp) + 800000f0: 00000513 li a0,0 + 800000f4: 05010113 addi sp,sp,80 + 800000f8: 00008067 ret + +00000000800000fc : + 800000fc: 00050513 mv a0,a0 + 80000100: 0000006b 0x6b + 80000104: 0000006f j 80000104 + +0000000080000108 <_assert>: + 80000108: 00051a63 bnez a0,8000011c <_assert+0x14> + 8000010c: 00100793 li a5,1 + 80000110: 00078513 mv a0,a5 + 80000114: 0000006b 0x6b + 80000118: 0000006f j 80000118 <_assert+0x10> + 8000011c: 00008067 ret + +0000000080000120 <_trm_init>: + 80000120: ff010113 addi sp,sp,-16 + 80000124: 00113423 sd ra,8(sp) + 80000128: 01c000ef jal ra,80000144 + 8000012c: 00000517 auipc a0,0x0 + 80000130: 22c50513 addi a0,a0,556 # 80000358 + 80000134: ef5ff0ef jal ra,80000028
+ 80000138: 00050513 mv a0,a0 + 8000013c: 0000006b 0x6b + 80000140: 0000006f j 80000140 <_trm_init+0x20> + +0000000080000144 : + 80000144: 00000797 auipc a5,0x0 + 80000148: 33c78793 addi a5,a5,828 # 80000480 + 8000014c: 0007b503 ld a0,0(a5) + 80000150: 0087b583 ld a1,8(a5) + 80000154: ff010113 addi sp,sp,-16 + 80000158: 00000693 li a3,0 + 8000015c: 00000613 li a2,0 + 80000160: 40a585b3 sub a1,a1,a0 + 80000164: 00113423 sd ra,8(sp) + 80000168: 018000ef jal ra,80000180 + 8000016c: 00813083 ld ra,8(sp) + 80000170: 00000797 auipc a5,0x0 + 80000174: 32a7b023 sd a0,800(a5) # 80000490 + 80000178: 01010113 addi sp,sp,16 + 8000017c: 00008067 ret + +0000000080000180 : + 80000180: 1a050e63 beqz a0,8000033c + 80000184: fd010113 addi sp,sp,-48 + 80000188: 02813023 sd s0,32(sp) + 8000018c: 00913c23 sd s1,24(sp) + 80000190: 01f57793 andi a5,a0,31 + 80000194: 02113423 sd ra,40(sp) + 80000198: 01213823 sd s2,16(sp) + 8000019c: 01313423 sd s3,8(sp) + 800001a0: 01413023 sd s4,0(sp) + 800001a4: 00050493 mv s1,a0 + 800001a8: 00050413 mv s0,a0 + 800001ac: 00000513 li a0,0 + 800001b0: 14079a63 bnez a5,80000304 + 800001b4: 27f00713 li a4,639 + 800001b8: 00058913 mv s2,a1 + 800001bc: 00078513 mv a0,a5 + 800001c0: 14b77263 bgeu a4,a1,80000304 + 800001c4: 0074f513 andi a0,s1,7 + 800001c8: 00153513 seqz a0,a0 + 800001cc: 00060a13 mv s4,a2 + 800001d0: 00068993 mv s3,a3 + 800001d4: f35ff0ef jal ra,80000108 <_assert> + 800001d8: 20048793 addi a5,s1,512 + 800001dc: 2004b023 sd zero,512(s1) + 800001e0: 2144b423 sd s4,520(s1) + 800001e4: 2134b823 sd s3,528(s1) + 800001e8: 00043023 sd zero,0(s0) + 800001ec: 00840413 addi s0,s0,8 + 800001f0: fe879ce3 bne a5,s0,800001e8 + 800001f4: fff00793 li a5,-1 + 800001f8: dc090413 addi s0,s2,-576 + 800001fc: 03f79793 slli a5,a5,0x3f + 80000200: 1287f863 bgeu a5,s0,80000330 + 80000204: 00078413 mv s0,a5 + 80000208: 00100513 li a0,1 + 8000020c: efdff0ef jal ra,80000108 <_assert> + 80000210: f8300793 li a5,-125 + 80000214: 0017d793 srli a5,a5,0x1 + 80000218: fc040513 addi a0,s0,-64 + 8000021c: 00f53533 sltu a0,a0,a5 + 80000220: ee9ff0ef jal ra,80000108 <_assert> + 80000224: 01f4f513 andi a0,s1,31 + 80000228: 00153513 seqz a0,a0 + 8000022c: eddff0ef jal ra,80000108 <_assert> + 80000230: 00100513 li a0,1 + 80000234: 2404b023 sd zero,576(s1) + 80000238: 2404b423 sd zero,584(s1) + 8000023c: 2484b823 sd s0,592(s1) + 80000240: 24048c23 sb zero,600(s1) + 80000244: 2604b023 sd zero,608(s1) + 80000248: 2604b423 sd zero,616(s1) + 8000024c: ebdff0ef jal ra,80000108 <_assert> + 80000250: 00100513 li a0,1 + 80000254: eb5ff0ef jal ra,80000108 <_assert> + 80000258: 2504b503 ld a0,592(s1) + 8000025c: 24048a13 addi s4,s1,576 + 80000260: 04053513 sltiu a0,a0,64 + 80000264: 00154513 xori a0,a0,1 + 80000268: 00157513 andi a0,a0,1 + 8000026c: e9dff0ef jal ra,80000108 <_assert> + 80000270: 2504b503 ld a0,592(s1) + 80000274: 03f57513 andi a0,a0,63 + 80000278: 00153513 seqz a0,a0 + 8000027c: e8dff0ef jal ra,80000108 <_assert> + 80000280: 2504b703 ld a4,592(s1) + 80000284: 00100793 li a5,1 + 80000288: 00675713 srli a4,a4,0x6 + 8000028c: 0ae7fc63 bgeu a5,a4,80000344 + 80000290: 00000793 li a5,0 + 80000294: 00100693 li a3,1 + 80000298: 0017879b addiw a5,a5,1 + 8000029c: 00175713 srli a4,a4,0x1 + 800002a0: 0ff7f793 andi a5,a5,255 + 800002a4: fed71ae3 bne a4,a3,80000298 + 800002a8: 00078993 mv s3,a5 + 800002ac: 0407b513 sltiu a0,a5,64 + 800002b0: 00f71933 sll s2,a4,a5 + 800002b4: e55ff0ef jal ra,80000108 <_assert> + 800002b8: 00399793 slli a5,s3,0x3 + 800002bc: 00f487b3 add a5,s1,a5 + 800002c0: 0007b703 ld a4,0(a5) + 800002c4: 2604b423 sd zero,616(s1) + 800002c8: 26e4b023 sd a4,608(s1) + 800002cc: 00070463 beqz a4,800002d4 + 800002d0: 03473423 sd s4,40(a4) + 800002d4: 0147b023 sd s4,0(a5) + 800002d8: 2004b503 ld a0,512(s1) + 800002dc: 00a96533 or a0,s2,a0 + 800002e0: 20a4b023 sd a0,512(s1) + 800002e4: 00a03533 snez a0,a0 + 800002e8: e21ff0ef jal ra,80000108 <_assert> + 800002ec: 00048513 mv a0,s1 + 800002f0: 2084bc23 sd s0,536(s1) + 800002f4: 2204b023 sd zero,544(s1) + 800002f8: 2204b423 sd zero,552(s1) + 800002fc: 2204b823 sd zero,560(s1) + 80000300: 2204bc23 sd zero,568(s1) + 80000304: 02813083 ld ra,40(sp) + 80000308: 02013403 ld s0,32(sp) + 8000030c: 01813483 ld s1,24(sp) + 80000310: 01013903 ld s2,16(sp) + 80000314: 00813983 ld s3,8(sp) + 80000318: 00013a03 ld s4,0(sp) + 8000031c: 03010113 addi sp,sp,48 + 80000320: 00008067 ret + 80000324: 00100513 li a0,1 + 80000328: fff40413 addi s0,s0,-1 + 8000032c: dddff0ef jal ra,80000108 <_assert> + 80000330: 03f47793 andi a5,s0,63 + 80000334: fe0798e3 bnez a5,80000324 + 80000338: ed1ff06f j 80000208 + 8000033c: 00000513 li a0,0 + 80000340: 00008067 ret + 80000344: 00100913 li s2,1 + 80000348: 00000993 li s3,0 + 8000034c: 00100513 li a0,1 + 80000350: f65ff06f j 800002b4 diff --git a/bin/non-output/cpu-tests/add-longlong-cpu-tests.elf b/bin/non-output/cpu-tests/add-longlong-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..9f992b6e1b0f2f012d33f16251e7f1f1df7b4ea4 GIT binary patch literal 42328 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 yVhTp&V;Z z=LTuZZD82-4SN1Ql?mZguG4``sfdg+$GB|h#KrtCIf5lU#^#_;^yZaCvwp0`FSO91 z(_D3MHg(DXs9q6{5o6YwwVK{$tO?xow62!W>-A+Ve#4HARq|Xsx#`cskdxlb+Z#2# znZJgEoBjd}5X|Ur>Ky%OARTUecc1nhZXXeyq5m0PZFe4S+ z?v)sH!wCN>ax9Kd&rw%%cH?frfEz}*GxT3>+3Ol~by4R1>A%rKTo`-AwRF4bKMou> zjOcc5q%&g+7O1N^yK(<71_;(^5cKt)n^dD: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 104000ef jal ra,80000110 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 0c8000ef jal ra,800000ec + +0000000080000028
: + 80000028: fb010113 addi sp,sp,-80 + 8000002c: 01713423 sd s7,8(sp) + 80000030: 00000b97 auipc s7,0x0 + 80000034: 520b8b93 addi s7,s7,1312 # 80000550 + 80000038: 03313423 sd s3,40(sp) + 8000003c: 03413023 sd s4,32(sp) + 80000040: 01513c23 sd s5,24(sp) + 80000044: 01613823 sd s6,16(sp) + 80000048: 01813023 sd s8,0(sp) + 8000004c: 04113423 sd ra,72(sp) + 80000050: 04813023 sd s0,64(sp) + 80000054: 02913c23 sd s1,56(sp) + 80000058: 03213823 sd s2,48(sp) + 8000005c: 00000b17 auipc s6,0x0 + 80000060: 2f4b0b13 addi s6,s6,756 # 80000350 + 80000064: 000b8a93 mv s5,s7 + 80000068: 00000a13 li s4,0 + 8000006c: 00000997 auipc s3,0x0 + 80000070: 52498993 addi s3,s3,1316 # 80000590 + 80000074: 04000c13 li s8,64 + 80000078: 000ab903 ld s2,0(s5) + 8000007c: 000b0493 mv s1,s6 + 80000080: 000b8413 mv s0,s7 + 80000084: 00043503 ld a0,0(s0) + 80000088: 0004b783 ld a5,0(s1) + 8000008c: 00840413 addi s0,s0,8 + 80000090: 00a90533 add a0,s2,a0 + 80000094: 40f50533 sub a0,a0,a5 + 80000098: 00153513 seqz a0,a0 + 8000009c: f75ff0ef jal ra,80000010 + 800000a0: 00848493 addi s1,s1,8 + 800000a4: fe8990e3 bne s3,s0,80000084 + 800000a8: 008a0a1b addiw s4,s4,8 + 800000ac: 008a8a93 addi s5,s5,8 + 800000b0: 040b0b13 addi s6,s6,64 + 800000b4: fd8a12e3 bne s4,s8,80000078 + 800000b8: 04813083 ld ra,72(sp) + 800000bc: 04013403 ld s0,64(sp) + 800000c0: 03813483 ld s1,56(sp) + 800000c4: 03013903 ld s2,48(sp) + 800000c8: 02813983 ld s3,40(sp) + 800000cc: 02013a03 ld s4,32(sp) + 800000d0: 01813a83 ld s5,24(sp) + 800000d4: 01013b03 ld s6,16(sp) + 800000d8: 00813b83 ld s7,8(sp) + 800000dc: 00013c03 ld s8,0(sp) + 800000e0: 00000513 li a0,0 + 800000e4: 05010113 addi sp,sp,80 + 800000e8: 00008067 ret + +00000000800000ec : + 800000ec: 00050513 mv a0,a0 + 800000f0: 0000006b 0x6b + 800000f4: 0000006f j 800000f4 + +00000000800000f8 <_assert>: + 800000f8: 00051a63 bnez a0,8000010c <_assert+0x14> + 800000fc: 00100793 li a5,1 + 80000100: 00078513 mv a0,a5 + 80000104: 0000006b 0x6b + 80000108: 0000006f j 80000108 <_assert+0x10> + 8000010c: 00008067 ret + +0000000080000110 <_trm_init>: + 80000110: ff010113 addi sp,sp,-16 + 80000114: 00113423 sd ra,8(sp) + 80000118: 01c000ef jal ra,80000134 + 8000011c: 00000517 auipc a0,0x0 + 80000120: 22c50513 addi a0,a0,556 # 80000348 + 80000124: f05ff0ef jal ra,80000028
+ 80000128: 00050513 mv a0,a0 + 8000012c: 0000006b 0x6b + 80000130: 0000006f j 80000130 <_trm_init+0x20> + +0000000080000134 : + 80000134: 00000797 auipc a5,0x0 + 80000138: 45c78793 addi a5,a5,1116 # 80000590 + 8000013c: 0007b503 ld a0,0(a5) + 80000140: 0087b583 ld a1,8(a5) + 80000144: ff010113 addi sp,sp,-16 + 80000148: 00000693 li a3,0 + 8000014c: 00000613 li a2,0 + 80000150: 40a585b3 sub a1,a1,a0 + 80000154: 00113423 sd ra,8(sp) + 80000158: 018000ef jal ra,80000170 + 8000015c: 00813083 ld ra,8(sp) + 80000160: 00000797 auipc a5,0x0 + 80000164: 44a7b023 sd a0,1088(a5) # 800005a0 + 80000168: 01010113 addi sp,sp,16 + 8000016c: 00008067 ret + +0000000080000170 : + 80000170: 1a050e63 beqz a0,8000032c + 80000174: fd010113 addi sp,sp,-48 + 80000178: 02813023 sd s0,32(sp) + 8000017c: 00913c23 sd s1,24(sp) + 80000180: 01f57793 andi a5,a0,31 + 80000184: 02113423 sd ra,40(sp) + 80000188: 01213823 sd s2,16(sp) + 8000018c: 01313423 sd s3,8(sp) + 80000190: 01413023 sd s4,0(sp) + 80000194: 00050493 mv s1,a0 + 80000198: 00050413 mv s0,a0 + 8000019c: 00000513 li a0,0 + 800001a0: 14079a63 bnez a5,800002f4 + 800001a4: 27f00713 li a4,639 + 800001a8: 00058913 mv s2,a1 + 800001ac: 00078513 mv a0,a5 + 800001b0: 14b77263 bgeu a4,a1,800002f4 + 800001b4: 0074f513 andi a0,s1,7 + 800001b8: 00153513 seqz a0,a0 + 800001bc: 00060a13 mv s4,a2 + 800001c0: 00068993 mv s3,a3 + 800001c4: f35ff0ef jal ra,800000f8 <_assert> + 800001c8: 20048793 addi a5,s1,512 + 800001cc: 2004b023 sd zero,512(s1) + 800001d0: 2144b423 sd s4,520(s1) + 800001d4: 2134b823 sd s3,528(s1) + 800001d8: 00043023 sd zero,0(s0) + 800001dc: 00840413 addi s0,s0,8 + 800001e0: fe879ce3 bne a5,s0,800001d8 + 800001e4: fff00793 li a5,-1 + 800001e8: dc090413 addi s0,s2,-576 + 800001ec: 03f79793 slli a5,a5,0x3f + 800001f0: 1287f863 bgeu a5,s0,80000320 + 800001f4: 00078413 mv s0,a5 + 800001f8: 00100513 li a0,1 + 800001fc: efdff0ef jal ra,800000f8 <_assert> + 80000200: f8300793 li a5,-125 + 80000204: 0017d793 srli a5,a5,0x1 + 80000208: fc040513 addi a0,s0,-64 + 8000020c: 00f53533 sltu a0,a0,a5 + 80000210: ee9ff0ef jal ra,800000f8 <_assert> + 80000214: 01f4f513 andi a0,s1,31 + 80000218: 00153513 seqz a0,a0 + 8000021c: eddff0ef jal ra,800000f8 <_assert> + 80000220: 00100513 li a0,1 + 80000224: 2404b023 sd zero,576(s1) + 80000228: 2404b423 sd zero,584(s1) + 8000022c: 2484b823 sd s0,592(s1) + 80000230: 24048c23 sb zero,600(s1) + 80000234: 2604b023 sd zero,608(s1) + 80000238: 2604b423 sd zero,616(s1) + 8000023c: ebdff0ef jal ra,800000f8 <_assert> + 80000240: 00100513 li a0,1 + 80000244: eb5ff0ef jal ra,800000f8 <_assert> + 80000248: 2504b503 ld a0,592(s1) + 8000024c: 24048a13 addi s4,s1,576 + 80000250: 04053513 sltiu a0,a0,64 + 80000254: 00154513 xori a0,a0,1 + 80000258: 00157513 andi a0,a0,1 + 8000025c: e9dff0ef jal ra,800000f8 <_assert> + 80000260: 2504b503 ld a0,592(s1) + 80000264: 03f57513 andi a0,a0,63 + 80000268: 00153513 seqz a0,a0 + 8000026c: e8dff0ef jal ra,800000f8 <_assert> + 80000270: 2504b703 ld a4,592(s1) + 80000274: 00100793 li a5,1 + 80000278: 00675713 srli a4,a4,0x6 + 8000027c: 0ae7fc63 bgeu a5,a4,80000334 + 80000280: 00000793 li a5,0 + 80000284: 00100693 li a3,1 + 80000288: 0017879b addiw a5,a5,1 + 8000028c: 00175713 srli a4,a4,0x1 + 80000290: 0ff7f793 andi a5,a5,255 + 80000294: fed71ae3 bne a4,a3,80000288 + 80000298: 00078993 mv s3,a5 + 8000029c: 0407b513 sltiu a0,a5,64 + 800002a0: 00f71933 sll s2,a4,a5 + 800002a4: e55ff0ef jal ra,800000f8 <_assert> + 800002a8: 00399793 slli a5,s3,0x3 + 800002ac: 00f487b3 add a5,s1,a5 + 800002b0: 0007b703 ld a4,0(a5) + 800002b4: 2604b423 sd zero,616(s1) + 800002b8: 26e4b023 sd a4,608(s1) + 800002bc: 00070463 beqz a4,800002c4 + 800002c0: 03473423 sd s4,40(a4) + 800002c4: 0147b023 sd s4,0(a5) + 800002c8: 2004b503 ld a0,512(s1) + 800002cc: 00a96533 or a0,s2,a0 + 800002d0: 20a4b023 sd a0,512(s1) + 800002d4: 00a03533 snez a0,a0 + 800002d8: e21ff0ef jal ra,800000f8 <_assert> + 800002dc: 00048513 mv a0,s1 + 800002e0: 2084bc23 sd s0,536(s1) + 800002e4: 2204b023 sd zero,544(s1) + 800002e8: 2204b423 sd zero,552(s1) + 800002ec: 2204b823 sd zero,560(s1) + 800002f0: 2204bc23 sd zero,568(s1) + 800002f4: 02813083 ld ra,40(sp) + 800002f8: 02013403 ld s0,32(sp) + 800002fc: 01813483 ld s1,24(sp) + 80000300: 01013903 ld s2,16(sp) + 80000304: 00813983 ld s3,8(sp) + 80000308: 00013a03 ld s4,0(sp) + 8000030c: 03010113 addi sp,sp,48 + 80000310: 00008067 ret + 80000314: 00100513 li a0,1 + 80000318: fff40413 addi s0,s0,-1 + 8000031c: dddff0ef jal ra,800000f8 <_assert> + 80000320: 03f47793 andi a5,s0,63 + 80000324: fe0798e3 bnez a5,80000314 + 80000328: ed1ff06f j 800001f8 + 8000032c: 00000513 li a0,0 + 80000330: 00008067 ret + 80000334: 00100913 li s2,1 + 80000338: 00000993 li s3,0 + 8000033c: 00100513 li a0,1 + 80000340: f65ff06f j 800002a4 diff --git a/bin/non-output/cpu-tests/bit-cpu-tests.elf b/bin/non-output/cpu-tests/bit-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..c142d7955c4d9c2eb7bfb636a162f0bd6bb06b69 GIT binary patch literal 43064 zcmeHw3wT^rwg298=1gXi%w*EZYtmQR^xfvw2c?upfB>x`ROL}-jS0?7jASueI0S=j0@_>6Ft?4RFr%5n!(~)f*;QGo5h!;bwUa;?m5HW&xZ_SzO>2 z&`?~C<2kmNJl(y!~;h>aKr;gJaEJVM?7%E z14le?!~;h>aKr;gJaEJVHV-6lUtYPLu>`;WomUx~k_wt^-7xj}I|(z+Y8RHWS6TDK zktY{5FE9@<;}nyP6vWxcfkF12>+WU?2Jd1E7VQ!=ghOI_qs%1M_ba9n?}Ux^dOZ9Y*|u$p zaaRGm{H|>xZ$|K7CxOqMSNvOk9mVbWQc&U6wd7z{ti#VTg@f9fGZh z`L>8**s>JBeWA>5=Q-GE#roHZHNX0KDVmqgO`? z8viizWF`8+zbsgEfc*GM;=mhR`4BO~eApA5R{KqS?%6u6_A|Kd3C=)&hKxD!X?@AK zD>yyzso=E4A~Ps+M8x1X0zP=aQ2bsr?ha0;xs*6}9ZUV?*M%eGOXSQKw?T(rdp zka+_Af^WP7`+hNU@f*hTHx#^`**_V+V6sj`kmC`=8@|cxZ+#Q#B#&#@uxedJ*Sk<> z@Pi}FQEpiADx5}g&mCz*904Alg+?Gyu#7Ijf~9l`7aT zfleuP!pyjoc#SizK`-)gYBy96Nq`4Fi(cUwI0eehR)BV^$DS(yqJ!_~HyA5wA6&}< z6@}CeZ0{_7P+=9o6H|a0<>vz&<*Rrji#?_WFT`N+(>BZxJ20DA>{&bJ%QnnG2j+Yh z`-2@b$k{OIM$&gWFc+{`SPcs4Wj4%*9heJQtj3Nx&xZNB19K6JHQF(cwP8+#%X79L z#bV3sm}l8APjg@{W-)|N7$NlRRGlsG?*<3v(NVsdH?iU&8^#R|j3tE8$cnGBVSL+x zag5?|gAL*_DUlp&x*K;Qa9vGiSvrh#T?9?Er_VVi~28Hj*Bpie;3R zQYXwpRI!Y4#?|N*QpGYFDu_f^tnr}aCqzk5VIj3!M7!ue0N~3)5o2XgI<5FZKtf;; zB}L$gH*tzJ5y|NZf=7%M3bo|B=<-x(LO_yE69fS5xDf;K{`3Ijodq8Ul%HSv8-Nxn z#A1!uWn2XCxHpN<`7AL@jeiW%$~5vP&?)EV=fpBraSW-`8VV}>T%buxr3iFu;`>5y z6@kJE5t$(lz9yC=p{v11MV+4);s(0oD~R`bC8Rd1_z7uthUeE+d`APYCZswsSV}&H z_7h3aAJjawEZjl1XagtBM29~7r067CL+HbsO?D4pL3RPAiAuHm0JsF7U8IFN=0lCc zlxk_P4*aC@Fr-?T(xu3oaG~4Cr0J9Y7sJKWj&|e33#v(G1cu5ZdJ#dVRF%LH5d*(6 z942^ScpuKOa+DU{=;QqJfL+oz(2r4({=;CRL(8s5r(LZd8H|m z$s;}q>_kXlRM0%ELbH5`@hUNAHlW8U+S;=W+joBk9|D6C5G0~B{xc$o(MrZke4MtC zq*ai#lH_7wmIQIC{0^ZnAUQ|%E3s?FC*Oao0D{*DN1vizu zpGA{$x48%c)Nu#4V`__LsN_2lLqYfmaIwWRt=hN}E>)W~|9p3D1}`8Uax-WwgKVR2 zJn;^NgE!EKb3eEdpx`Yy86N^_aD3Tks7(oKPM`b)4L*QV0Rfr=ydyjdx`ZbJm9H&1 z4L}yTgFqGna@?IQ((y94k8U@Tr7$qUcnGXHn;r*xgX3h8goQ zW6V>HW^fA)Zzx4U9^qAK^<#=^0>KITa25LtaQU{RFs?06&*j>;phAZx+KxfH1C$ z@qN6Ml7-{0D7mK)luJqc6TIvwu$l&FAoIO`v+hw{V{db$nF2XA7U%g3jyUQ~D;^w1qFd z5j-ymGd8gXq*WNL{1uH{#glVj?K~8iN|BAbB;ZW)hsf10OTcXexSU9C;z@E)HO#NP zhqSp_0&W7p-?-27$N_C!fY$a&i*0@!hC=)n9{n|9Rki{H(}7afg2pN|k~BPdHF`BQ z$Qym!M@0LQ9YoUv_;x}i;FP84J%iqq)6gh~p`dhx4PN0d%-sS?8M&#NC*|dh03$a8 zTN!h}zain+<<{EK^X#}RZX^|M<uV7N^i~S-guVUzj@pN*{|q1F)aPH%s`twm5N%Eymhs{A)ZKfjVXPV(@;bT6QNI zFObfO0YCiPdGvn5|11UzO3>Jh#vC*ze*q0gO3<|7dy^LvIyvYgz)BKOIOr<$L`vL- zhAX(A1CpN$ZjtbVx`0h`=#3f1zr~|h;VN`K0BJ(!syMX4oraI%YlvuXvXN*=@uh@H zK%w{s^n~JHKm+$)bfSZ@)sdoSgTl{>ZV5lQ6>O5d*6#rc|1Tc74OdZ;o+sG}`>Yi@ z;KaYpqhCbz5P6)$&7a6)JY@Ds;r+yRUouJPWN0g}k^~fn-iV$s^t))dQn(Q$Na4k} z_@wZe0Q*_KR>BWzxx=514)f38@A2q=gRjWof^le22G2oblnlO?M=wY16xr|*!lw-G zL&KZFYrq$Yu!PXbKO?|O5>WW(N9YOvyoQD=_8$d_p9eZ6{Gc9iX7Dwn!vj3}Ayjjr z^U{RU`4ea)Y1pgyeyRBHwc?uzm4HI=z32(WpF!hb8C(gOepb{=_`$6hB|X2vqYbp4 z(84mi3=LXXPDjIAVVj{o((@j&oZO!QR+50iihn~-Sn)$NTi&XOx`0i$`0@NUExp*g1%tJchOq4%wFg2mTEWvBlMmvz?{HA?AbcI2CWi zTBj1jp&B-i55UMEZGGZ&cg3gi0=jK+AAH9YL``lUr}25TJGubwDQ&^B4w@6`hIB6g zatl0*7ZH>3@a9B%X7ml@ZDq;;Y7?&@)V1X2w`nu9m{;Bbzzzc7w?T|Akr?|3P(~QX zOTb(tROSB>j}s(dGXN9!1Mqc}yJ;b!J(-UuW^!k?j8CMU+1*4ppBSy+)g=3OL`QcU zpT^Qs`5cX$!>15x96MeAnsq)e-9(Em<;MbGiTpSR4K~TXO5;%q!!z~L+cfS*jk`nO z+E=ktv^QBzG&IA^Bv1(`W>_V zXwwk$RG+D&G9476Nth6%59B)FN9Ew7OC5d0!E2l3RWQWDCwR0Ood=r~wB<-2CLKz` zj2T#v%gQlu2VC#ilio)d+bfC)fkH+INdk(Hy{JRhG=XfNZqL8{f^vpTJ2uIF2SdLH zA+gJeE8Tp4j>!G9cM*?t15IVGUHLV{Wig-oyjFfMxHy!*hA_5QJV^AUe3Ae{@!tbg zHSpqF5;0tYm{d^7A3GgsYzI?xr%xp$pHq^&0-cxIA;6F-m ze5l!$sge8Z*i`KrVoblBBgPx$QdIk*jYIi7^<1A2rBRH{y@%?_;xk1T4?lTfyU+x^z<>lIZ90DY{XNp zC^2AlD@lu?a`A|id`1*QVm7b_`qh{C^%rhcc`2VBOB5Ng@v*ZjOL-iqfoZI$=y-sj zNCh)u#}q9sT2ize(>AC^aJOof00~dX6TGNMB5)uSL~Zy-V>}E%STi6%WT6e?gygZ< z9~9Q}6OuVGrF>jLbJg`HC5d4X&@K7^HdVz}Z{g6nDM6#rPi^5WP__Le48$;iU)nSQ zT*CQsF&>}7mM0n@wbU+RX3`;IoM{&U`|);4PMZJ#WeyC;Dz_U!7!~9V@=)a>NJLq1 z%3GdrNK9%Q@Bp!%krR4jS|Vb1h>+xB5R@@6X9$@gXRHdGk)c3XkraV&N2btjl#C3# ze_BFDPxxN@HLCp@v(petiQRCA(Q$VqOD7^>D^eyrOf9D4qyKQ-atea=|RiIjh_j z?h3mgS48o;S7qpXTZdIrM#7?lm3n(sk4!0 zj}>$o(&7X_H0z@FF>+GO=?X{iN*wmXZ*duw>rP72ge$cLW}K6aEA_o|%NAZohS01M ztkm?MnRKzLB!_GB9HTV<#yqW@vnMF$l$o1sAvxJFt&CWanJam|6U%b?(J1PLRyfMp zOnAQ7IWwbzqpgU>^fW8c(=2ZJ)Lc@OGxhVbMwY5v#n|!$Rikmrkrp6f%YRc&HPkdr zH6WMg0#IQKW2H(Di$_%v>e9FZnx@Gjel{qpiR;JE!~_OcY-NcjCW}*BnMg!8k?5!~ z$w^6|$qNN-jcr5~g();bnoiZ45`HZ@s@zYrtBN}aCkyP%36Lu^czwcB5bIjboodO! zD?vJ|q&sK3^Ky^!g<+cB0WWQnP_&ndn_5eMuV_Mjg;#VFTPeXyc|~_M zztOznM-JCg%*@)ZG1@q2Fi1YX!pc0BiCv zXRZUDc0u6$Rc?^KJU7<+&g&Cyi3YoDlgC8PJa}%p0BiIi^LWBwn^t)6{Ak_$eLV55 zU6?PSCup3CjPoE~t2`Dtad5Z5KIsMlw$TUX#d9NZ*6Iei`+1>wV#C>aZbtce%5PTq z!@N1-hv(M9WbGs2ks3EROyCqos@x+*Y9x(8%zft(%MEs5JnS6B-BfPeOI*l=NMFYI zvzxf@z@a3@a}u|%**RvN+y>+^TjQ+hGFJQ!j_PTf@nEa|kQr>UOYvHX2Q9?@iG}>( zLw<0tt{-$V=biOFh+b>neaXnXw!9Zaufl0J$Y4WjJYg=NDi^Mq;2Ge|!(c49zQTNX z`r?f$$QL_bu5N#D)_&MPUPh_+6XfRYS8M&&UVoT(=aVm9etH}}{&_8b`9#&NxK9c2 z0ePuByQdJ_5)U0U-Df&^Q1jrHN5S_Cm5-ZzKz@{7o$|?JFO_G%@ov3&`9GF7^H>u- z>Ff1w9w?pwc)56V87+77Aa$eo<(AJz-v{L8WaV@L|)0B$L!C;A)X}iNgDsh20n;xbA29^ z`D_XNpSk!Ty4m}C)ALNn56#VrGdvV_9zGx^0zHLYn+M2?;!!ceBJW(u!nl3k>Bc_D zkQ>z}ZG1p6OV$;`!I1Z;^RXfkeicFV)%d#4^^I8`=NOi@Wjz)YI~_Xam%YFdg2jc zSNeuBj~hWB6d#aVb3dQ>MArx8N9pG7vw8Ocb*H^A#}4wf#g<3_m0jX>gKT)=zQI5cF^jc{%;OG`xLG1 zeLvhv}6jDZr@-j*1AhIbIe=a%>8QTY9wHQvXK4|6o-C;LI0{#zqT+< zjON}vAv!vCGnvFI@FuU{A^HDDQ1f@=xc|ROP*o-^e}d|3`EGi=p#uHsPvbqmUv;DA z)o)hv@Y2Y;I=Vp>V9(+Y4W&N1oap!C-xbq?5b1d7IO(f?S4LlVt2pVa_Pd+44x_$m zJRKK()p5~R?YBem(|q&2YQEZ!hoW=KzfZ;U2{k?Rm8qgrqprG6HLJcZfo^{K75PTR zZ<)H{4ew#X)#XXc(N|rr4#j_1@!6`b?wWBZ`a}6=tmAI`$4c+UA1lB28~^WJzp>iy zw#VHcE5G*}|Ly{Gd<~s&QG>C45YII4Q)Mj>(l+c>F%uPXB$#|gLO2LZRqMvbq{u= zS^gA)jx`Ks`y2YZvZ)P6Ev)PA>Kz=aTh}|N*)`z*z-B!>+p`1xZK;8}p0-qHS8p0> zX?(^o(pQgvk;xcH>r=SVVFMfc(pkU^#N?v92q7HA&WoVSlZl2YuH_I$Rz!?{ z64!*(-V6`{q)0{0GOe7c@P#{6+a%X0r30!>JT;u!_!~^%NRJUb0HesQgdb3}5-#;2 zeDamu&|(;>?-Y%)oT0)prD$=;xKtP#F$`f)Sb41&hLb=I7Y34MVQm_z0YC_xirsJk z2=2jG@DB!Gqyx0Vmn4qi93XsCn1h5s2U#=;bH-q|=2H)RW@5HK)zGsMh2aoWdyKQX z2Xh&dT25e0S?DOHE+#cI%aIGXio^IJ8DvB#?)bnSF{~dF7*AnXO>UKilnBM5EoXYf z);4VIQE-q4BqRwP^pgkUe{(`?6@+q&lEyGTN!qE@!k@#d9FqWW3e~kh!7Yl2V&#zm7t8tJa&ZNmpr6`G%{lSZ#L{Kmns^7@t~qBThu8G(*mwnQ zG^Lm1**0sClN^ac;i?nufC#1Bhe-G&1up|mxoFGqSBbU^^)j^8#z5fceT#%k9L$y= z34#t_r8JpNc}>zWD$xXlQvM*2m^BgQoQp!dE;%$8k>YZoUUsA*69kqVpvfq(AX_aT zX56g{)=K0x^g{Mxp9HP-bTo~x%A6mMWm6d?P4hj&{WlAzNgE|cGif~Gv>k95p3fN! zZxZS6LbmoeW>UML$XG5MoHQ1TD+!e{A74H%beHp)f1TLQO` zldW49S_Daxa$~(vkQ?(wzsPuAWUAb4;%2~B`o0pdCNZszvi7N2ja{8@Uzw+{NF9o} zJexu#YgcdI+J!MU=thNfhO^{iVUNSJV)--rZ0vl}h{!386dSoAaHNqMk)d~{5e-oq z;i}}+2u8TWS|b{IBT;NrN(si7C7)vB8M!)F%dIYMWp0oo)y9j~x-CHtk4Plb_`XE4 z?&Y+ki18hPq8I(SI(?A$Kaw7@vTZ95h`g5oc4c~k;)_0+9L?2 z0-44yB~~s0lv&0O=?814B&G}5bd0taUt1tut}@ER-K2!Tei>%dxMvhEMvaG*)>2N9 z@t^O5@38myw&1TKEVB@|_m-aaQBNCQ-0W9gDI2BQw(@$XoO?;!UkSIMEPdTh{C-Z2 zhlNPxbVN#O5Y7cihGV`SnWaWVF{Pl6PBTl>09Tse%@yg3=^7JX?{VnF_?C1R)`LeR zcD12Eb2Mb8;)8U0S>b3AQDtkbs(97v3RF)NRj9|Uj&mS;WQGAC#pFuqOm`SGFnMD&yj8DZhw3C57Pg3H%5m!}06 zyD@af@L`#c#v-~pOm%J#$h4?hq>{!ll8Uwo7*IT&Nvw5xH`QEk3P`BsSlSejFqs?h zq3lZYyq>f#Ml!>ln*w6x+7uu`zF=o+Rqv>jWzN-^LBTtT7hrg%J)+n{59%8>@mT_>1Y9B-2Onp(jDWP>ozD=%ua%aIVi8A!Ce26*Kmr9UGS2L;_5 zIyOjKjKjJ?@`gYMGpS|@%oEYI=c){r17b@$1=pee)F?qP-V!ug-gsYm_PJwI!gjAZt!FPkXN@!g%%k;@Us3e~LKE~rg84uio%Edu%N6b7RN#dS7^$Fv>KxVjK1VUfKo3cS03jR0iw6c#pt(kAJF0-G2T%DGB(Q^2VE7&G=44(v+{-; zyJd+6(kkH@T{m+k#^egFZZUK9@mi1XX(M)*+SeHWEz-leqwwBJ!-(d(Dvf zhG&g3sAFBbuhhA)#ghy6%JD(e3@kvNd#y*taId8oJ7J;m6W3a6&G9)Q;|}SBYU95o z5*{K-h=pY8Av}wfLvz%w1kctVl2peV-s7mKpMBS#(Rsh>w5xrxh z-WE`gU37*{R1b%cphArC;Aj?^#&@M6DJ^g*xayY}Kwl`t8>EQa*g3@3PgK2Z?4$T0u-zroy)p9}h$%TBUjra<1(A#sAGb z;;*GkE;P)BBvvm?-us7Sat~cFLlj>~iXWg0Jbu|_Ulq}ns=^t={+;3Ej{u-cs z8Bo4@ciI_e*PPtcRI{XhL49Kl-q!0+bspD`_x!rncA%T;$#kTk(SPAY?MK+mjQ3vVk=5%k3Vbelx%$P7Xq)_PJV)9rc1X;i z)~;T}kD`aKnMVBj1_x4|9v(g~zF4nZHGm7=WNGc|N%yqE{C?6GFJ-opAqpUxLK2zS z*1s;xTHCVOG;rNv_KITJu1}_+T5oy?`9(~-db5Wnq+k3q`K$ZoWaF7l%Rsvvq;0*a zG|Tq4!KsImuHPJLu-@2_98c`-&ZOFq5R zWqMjunL$Ji26UwRS$kJ+Yj37E-P1R)k@cn9*0=VjFB-&Kt*vA&>&mXkT%7JdbM1V# zw!dv%Pr6qP4EBPOovL84h?q&!mSr;QEo|1&)wYgx^=`Gp^>?-P4rG^Qx;t23e|kgfT5`59g}CM)Ovw{T>#+cShH9Ni4a_GfJReziG33CP z{b}-iCpozf-XpwB-#{1qBYcCZkRB2_D%DDXM;E4iI_J5;EbNi7YC&|guiJV=Vvt3w zy)BzoCZCobuw#)QPfmArv(rvK`IwqnXSXAn24$J6Yg#-gx=okOZ>(=zI9r0ndp$T6 z<3s;x)?oZn9u2SwYCykttpB9+^jLh^X1oxD?*n#`TffTqFXPLdxPNMJZZRoo0910&~W_%q_%_X zBR={?MXi5JEZ#!)`N@sb%jd3x_#X~9$tOPg1+Zh4oU>wa_+#1qr%Sg9d&VNqZO2*Q z`xNBpmy`6L)-H=RuD&XGb!c@V>{N z0P^MlVM|<6^>oFT+V-O*wxVUEaM^XS4&r@P@Snri7Joi|{W!d*S$O}l9RHuT{H*0k zAw^PC-jJT|qb1hda&7Ult3zw93QAqCi+vuy3IaEqw#1DzCip`w_ghwIIAi4B(fEV8 zRFxcYT`b_%lsL~DmAd*>OF2JDDvWKC_Ar8zr!Wed=;T2z||FptBX5baOmFiDz zo$w&*^o5&tG^=f}kkz&~42Hi5_c@GF{!Co#G=1^$J*qy3f&bp^cNk*Uc}EO}FT!#i zP8TXF~IJfj98an9TE5xO}!_?OY{jVb8@2+n>fD?arJ`4$XfPK`J zCzmOFw?3cJ@VHaY?`ybA|LXuJecbED#|6IEF8V(YgpXsGPWt#F8p>V`64$TdO!)3~ z;Yi%5JJ6CJ_k=ual`zUey(5m+rt?2>U^V+x8dfVLEp3SPwHST2w+8o<$8c3~g z9mw>lyRcU5Yx*~~s#}QMZHClDY>!(dmozrT;vP<^i;c6og=6*EjXl`d;X2SSubsLj z)U3}Ei~04I>GjmFCq}Fu>azNdbo<~s?B3UAbi1v+owhw{g!ap-*@o@;y0k^(>|ytr z)`(Dn)u%E&v_;l1?ALlc|LF@+8{07+=#;&-N;)h!s02j)b{wuQn}SiI*Y8*Zf0zhX z(8dCXm>IGu&bkh15Y-*R!Ad6%y)LX&^m-nsVNV4=4g(-HE zY5G-DsFyq3xMyI<4I}Ia7D<|aaV!^U^_`yth)n_;EH5edRqef8I)l`Ua zWL-%cBdV*L{{I6#9ZA^$ literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/bit-cpu-tests.txt b/bin/non-output/cpu-tests/bit-cpu-tests.txt new file mode 100755 index 0000000..6048ba0 --- /dev/null +++ b/bin/non-output/cpu-tests/bit-cpu-tests.txt @@ -0,0 +1,301 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/bit-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 210000ef jal ra,8000021c <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 1d4000ef jal ra,800001f8 + +0000000080000028 : + 80000028: 4035d793 srai a5,a1,0x3 + 8000002c: 00f50533 add a0,a0,a5 + 80000030: 00054503 lbu a0,0(a0) + 80000034: 00100793 li a5,1 + 80000038: 0075f593 andi a1,a1,7 + 8000003c: 00b795bb sllw a1,a5,a1 + 80000040: 00b57533 and a0,a0,a1 + 80000044: 00a03533 snez a0,a0 + 80000048: 00008067 ret + +000000008000004c : + 8000004c: 4035d793 srai a5,a1,0x3 + 80000050: ff010113 addi sp,sp,-16 + 80000054: 00f50533 add a0,a0,a5 + 80000058: 00a13423 sd a0,8(sp) + 8000005c: 0075f793 andi a5,a1,7 + 80000060: 00100593 li a1,1 + 80000064: 00f595bb sllw a1,a1,a5 + 80000068: 00813783 ld a5,8(sp) + 8000006c: 02061063 bnez a2,8000008c + 80000070: 0007c783 lbu a5,0(a5) + 80000074: fff5c593 not a1,a1 + 80000078: 00f5f5b3 and a1,a1,a5 + 8000007c: 00813783 ld a5,8(sp) + 80000080: 00b78023 sb a1,0(a5) + 80000084: 01010113 addi sp,sp,16 + 80000088: 00008067 ret + 8000008c: 0007c783 lbu a5,0(a5) + 80000090: 00f5e5b3 or a1,a1,a5 + 80000094: 00813783 ld a5,8(sp) + 80000098: 0ff5f593 andi a1,a1,255 + 8000009c: 00b78023 sb a1,0(a5) + 800000a0: 01010113 addi sp,sp,16 + 800000a4: 00008067 ret + +00000000800000a8
: + 800000a8: fe010113 addi sp,sp,-32 + 800000ac: 0aa00793 li a5,170 + 800000b0: 00000593 li a1,0 + 800000b4: 00810513 addi a0,sp,8 + 800000b8: 00113c23 sd ra,24(sp) + 800000bc: 00f11423 sh a5,8(sp) + 800000c0: f69ff0ef jal ra,80000028 + 800000c4: 00154513 xori a0,a0,1 + 800000c8: 0ff57513 andi a0,a0,255 + 800000cc: f45ff0ef jal ra,80000010 + 800000d0: 00100593 li a1,1 + 800000d4: 00810513 addi a0,sp,8 + 800000d8: f51ff0ef jal ra,80000028 + 800000dc: f35ff0ef jal ra,80000010 + 800000e0: 00200593 li a1,2 + 800000e4: 00810513 addi a0,sp,8 + 800000e8: f41ff0ef jal ra,80000028 + 800000ec: 00154513 xori a0,a0,1 + 800000f0: 0ff57513 andi a0,a0,255 + 800000f4: f1dff0ef jal ra,80000010 + 800000f8: 00300593 li a1,3 + 800000fc: 00810513 addi a0,sp,8 + 80000100: f29ff0ef jal ra,80000028 + 80000104: f0dff0ef jal ra,80000010 + 80000108: 00400593 li a1,4 + 8000010c: 00810513 addi a0,sp,8 + 80000110: f19ff0ef jal ra,80000028 + 80000114: 00154513 xori a0,a0,1 + 80000118: 0ff57513 andi a0,a0,255 + 8000011c: ef5ff0ef jal ra,80000010 + 80000120: 00500593 li a1,5 + 80000124: 00810513 addi a0,sp,8 + 80000128: f01ff0ef jal ra,80000028 + 8000012c: ee5ff0ef jal ra,80000010 + 80000130: 00600593 li a1,6 + 80000134: 00810513 addi a0,sp,8 + 80000138: ef1ff0ef jal ra,80000028 + 8000013c: 00154513 xori a0,a0,1 + 80000140: 0ff57513 andi a0,a0,255 + 80000144: ecdff0ef jal ra,80000010 + 80000148: 00700593 li a1,7 + 8000014c: 00810513 addi a0,sp,8 + 80000150: ed9ff0ef jal ra,80000028 + 80000154: ebdff0ef jal ra,80000010 + 80000158: 00810513 addi a0,sp,8 + 8000015c: 00100613 li a2,1 + 80000160: 00800593 li a1,8 + 80000164: ee9ff0ef jal ra,8000004c + 80000168: 00810513 addi a0,sp,8 + 8000016c: 00000613 li a2,0 + 80000170: 00900593 li a1,9 + 80000174: ed9ff0ef jal ra,8000004c + 80000178: 00810513 addi a0,sp,8 + 8000017c: 00100613 li a2,1 + 80000180: 00a00593 li a1,10 + 80000184: ec9ff0ef jal ra,8000004c + 80000188: 00810513 addi a0,sp,8 + 8000018c: 00000613 li a2,0 + 80000190: 00b00593 li a1,11 + 80000194: eb9ff0ef jal ra,8000004c + 80000198: 00810513 addi a0,sp,8 + 8000019c: 00100613 li a2,1 + 800001a0: 00c00593 li a1,12 + 800001a4: ea9ff0ef jal ra,8000004c + 800001a8: 00810513 addi a0,sp,8 + 800001ac: 00000613 li a2,0 + 800001b0: 00d00593 li a1,13 + 800001b4: e99ff0ef jal ra,8000004c + 800001b8: 00810513 addi a0,sp,8 + 800001bc: 00100613 li a2,1 + 800001c0: 00e00593 li a1,14 + 800001c4: e89ff0ef jal ra,8000004c + 800001c8: 00810513 addi a0,sp,8 + 800001cc: 00000613 li a2,0 + 800001d0: 00f00593 li a1,15 + 800001d4: e79ff0ef jal ra,8000004c + 800001d8: 00914503 lbu a0,9(sp) + 800001dc: fab50513 addi a0,a0,-85 + 800001e0: 00153513 seqz a0,a0 + 800001e4: e2dff0ef jal ra,80000010 + 800001e8: 01813083 ld ra,24(sp) + 800001ec: 00000513 li a0,0 + 800001f0: 02010113 addi sp,sp,32 + 800001f4: 00008067 ret + +00000000800001f8 : + 800001f8: 00050513 mv a0,a0 + 800001fc: 0000006b 0x6b + 80000200: 0000006f j 80000200 + +0000000080000204 <_assert>: + 80000204: 00051a63 bnez a0,80000218 <_assert+0x14> + 80000208: 00100793 li a5,1 + 8000020c: 00078513 mv a0,a5 + 80000210: 0000006b 0x6b + 80000214: 0000006f j 80000214 <_assert+0x10> + 80000218: 00008067 ret + +000000008000021c <_trm_init>: + 8000021c: ff010113 addi sp,sp,-16 + 80000220: 00113423 sd ra,8(sp) + 80000224: 01c000ef jal ra,80000240 + 80000228: 00000517 auipc a0,0x0 + 8000022c: 22850513 addi a0,a0,552 # 80000450 <_etext> + 80000230: e79ff0ef jal ra,800000a8
+ 80000234: 00050513 mv a0,a0 + 80000238: 0000006b 0x6b + 8000023c: 0000006f j 8000023c <_trm_init+0x20> + +0000000080000240 : + 80000240: 00000797 auipc a5,0x0 + 80000244: 21878793 addi a5,a5,536 # 80000458 + 80000248: 0007b503 ld a0,0(a5) + 8000024c: 0087b583 ld a1,8(a5) + 80000250: ff010113 addi sp,sp,-16 + 80000254: 00000693 li a3,0 + 80000258: 00000613 li a2,0 + 8000025c: 40a585b3 sub a1,a1,a0 + 80000260: 00113423 sd ra,8(sp) + 80000264: 018000ef jal ra,8000027c + 80000268: 00813083 ld ra,8(sp) + 8000026c: 00000797 auipc a5,0x0 + 80000270: 1ea7be23 sd a0,508(a5) # 80000468 + 80000274: 01010113 addi sp,sp,16 + 80000278: 00008067 ret + +000000008000027c : + 8000027c: 1a050e63 beqz a0,80000438 + 80000280: fd010113 addi sp,sp,-48 + 80000284: 02813023 sd s0,32(sp) + 80000288: 00913c23 sd s1,24(sp) + 8000028c: 01f57793 andi a5,a0,31 + 80000290: 02113423 sd ra,40(sp) + 80000294: 01213823 sd s2,16(sp) + 80000298: 01313423 sd s3,8(sp) + 8000029c: 01413023 sd s4,0(sp) + 800002a0: 00050493 mv s1,a0 + 800002a4: 00050413 mv s0,a0 + 800002a8: 00000513 li a0,0 + 800002ac: 14079a63 bnez a5,80000400 + 800002b0: 27f00713 li a4,639 + 800002b4: 00058913 mv s2,a1 + 800002b8: 00078513 mv a0,a5 + 800002bc: 14b77263 bgeu a4,a1,80000400 + 800002c0: 0074f513 andi a0,s1,7 + 800002c4: 00153513 seqz a0,a0 + 800002c8: 00060a13 mv s4,a2 + 800002cc: 00068993 mv s3,a3 + 800002d0: f35ff0ef jal ra,80000204 <_assert> + 800002d4: 20048793 addi a5,s1,512 + 800002d8: 2004b023 sd zero,512(s1) + 800002dc: 2144b423 sd s4,520(s1) + 800002e0: 2134b823 sd s3,528(s1) + 800002e4: 00043023 sd zero,0(s0) + 800002e8: 00840413 addi s0,s0,8 + 800002ec: fe879ce3 bne a5,s0,800002e4 + 800002f0: fff00793 li a5,-1 + 800002f4: dc090413 addi s0,s2,-576 + 800002f8: 03f79793 slli a5,a5,0x3f + 800002fc: 1287f863 bgeu a5,s0,8000042c + 80000300: 00078413 mv s0,a5 + 80000304: 00100513 li a0,1 + 80000308: efdff0ef jal ra,80000204 <_assert> + 8000030c: f8300793 li a5,-125 + 80000310: 0017d793 srli a5,a5,0x1 + 80000314: fc040513 addi a0,s0,-64 + 80000318: 00f53533 sltu a0,a0,a5 + 8000031c: ee9ff0ef jal ra,80000204 <_assert> + 80000320: 01f4f513 andi a0,s1,31 + 80000324: 00153513 seqz a0,a0 + 80000328: eddff0ef jal ra,80000204 <_assert> + 8000032c: 00100513 li a0,1 + 80000330: 2404b023 sd zero,576(s1) + 80000334: 2404b423 sd zero,584(s1) + 80000338: 2484b823 sd s0,592(s1) + 8000033c: 24048c23 sb zero,600(s1) + 80000340: 2604b023 sd zero,608(s1) + 80000344: 2604b423 sd zero,616(s1) + 80000348: ebdff0ef jal ra,80000204 <_assert> + 8000034c: 00100513 li a0,1 + 80000350: eb5ff0ef jal ra,80000204 <_assert> + 80000354: 2504b503 ld a0,592(s1) + 80000358: 24048a13 addi s4,s1,576 + 8000035c: 04053513 sltiu a0,a0,64 + 80000360: 00154513 xori a0,a0,1 + 80000364: 00157513 andi a0,a0,1 + 80000368: e9dff0ef jal ra,80000204 <_assert> + 8000036c: 2504b503 ld a0,592(s1) + 80000370: 03f57513 andi a0,a0,63 + 80000374: 00153513 seqz a0,a0 + 80000378: e8dff0ef jal ra,80000204 <_assert> + 8000037c: 2504b703 ld a4,592(s1) + 80000380: 00100793 li a5,1 + 80000384: 00675713 srli a4,a4,0x6 + 80000388: 0ae7fc63 bgeu a5,a4,80000440 + 8000038c: 00000793 li a5,0 + 80000390: 00100693 li a3,1 + 80000394: 0017879b addiw a5,a5,1 + 80000398: 00175713 srli a4,a4,0x1 + 8000039c: 0ff7f793 andi a5,a5,255 + 800003a0: fed71ae3 bne a4,a3,80000394 + 800003a4: 00078993 mv s3,a5 + 800003a8: 0407b513 sltiu a0,a5,64 + 800003ac: 00f71933 sll s2,a4,a5 + 800003b0: e55ff0ef jal ra,80000204 <_assert> + 800003b4: 00399793 slli a5,s3,0x3 + 800003b8: 00f487b3 add a5,s1,a5 + 800003bc: 0007b703 ld a4,0(a5) + 800003c0: 2604b423 sd zero,616(s1) + 800003c4: 26e4b023 sd a4,608(s1) + 800003c8: 00070463 beqz a4,800003d0 + 800003cc: 03473423 sd s4,40(a4) + 800003d0: 0147b023 sd s4,0(a5) + 800003d4: 2004b503 ld a0,512(s1) + 800003d8: 00a96533 or a0,s2,a0 + 800003dc: 20a4b023 sd a0,512(s1) + 800003e0: 00a03533 snez a0,a0 + 800003e4: e21ff0ef jal ra,80000204 <_assert> + 800003e8: 00048513 mv a0,s1 + 800003ec: 2084bc23 sd s0,536(s1) + 800003f0: 2204b023 sd zero,544(s1) + 800003f4: 2204b423 sd zero,552(s1) + 800003f8: 2204b823 sd zero,560(s1) + 800003fc: 2204bc23 sd zero,568(s1) + 80000400: 02813083 ld ra,40(sp) + 80000404: 02013403 ld s0,32(sp) + 80000408: 01813483 ld s1,24(sp) + 8000040c: 01013903 ld s2,16(sp) + 80000410: 00813983 ld s3,8(sp) + 80000414: 00013a03 ld s4,0(sp) + 80000418: 03010113 addi sp,sp,48 + 8000041c: 00008067 ret + 80000420: 00100513 li a0,1 + 80000424: fff40413 addi s0,s0,-1 + 80000428: dddff0ef jal ra,80000204 <_assert> + 8000042c: 03f47793 andi a5,s0,63 + 80000430: fe0798e3 bnez a5,80000420 + 80000434: ed1ff06f j 80000304 + 80000438: 00000513 li a0,0 + 8000043c: 00008067 ret + 80000440: 00100913 li s2,1 + 80000444: 00000993 li s3,0 + 80000448: 00100513 li a0,1 + 8000044c: f65ff06f j 800003b0 diff --git a/bin/non-output/cpu-tests/bubble-sort-cpu-tests.elf b/bin/non-output/cpu-tests/bubble-sort-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..c61f2b16db71a440da59b58054821c49c6921c7f GIT binary patch literal 42688 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 mD2E6@7`y8habZ7{7wc2&tpWJ=$)5DvZ: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 180000ef jal ra,8000018c <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 144000ef jal ra,80000168 + +0000000080000028
: + 80000028: fd010113 addi sp,sp,-48 + 8000002c: 02813023 sd s0,32(sp) + 80000030: 02113423 sd ra,40(sp) + 80000034: 00913c23 sd s1,24(sp) + 80000038: 01213823 sd s2,16(sp) + 8000003c: 01313423 sd s3,8(sp) + 80000040: 01413023 sd s4,0(sp) + 80000044: 01300793 li a5,19 + 80000048: 00000417 auipc s0,0x0 + 8000004c: 38040413 addi s0,s0,896 # 800003c8 + 80000050: 00000517 auipc a0,0x0 + 80000054: 37c50513 addi a0,a0,892 # 800003cc + 80000058: 04078063 beqz a5,80000098 + 8000005c: fff7859b addiw a1,a5,-1 + 80000060: 02059613 slli a2,a1,0x20 + 80000064: 01e65613 srli a2,a2,0x1e + 80000068: 00000797 auipc a5,0x0 + 8000006c: 36078793 addi a5,a5,864 # 800003c8 + 80000070: 00a60633 add a2,a2,a0 + 80000074: 0007a703 lw a4,0(a5) + 80000078: 0047a683 lw a3,4(a5) + 8000007c: 00e6d663 bge a3,a4,80000088 + 80000080: 00d7a023 sw a3,0(a5) + 80000084: 00e7a223 sw a4,4(a5) + 80000088: 00478793 addi a5,a5,4 + 8000008c: fec794e3 bne a5,a2,80000074 + 80000090: 0005879b sext.w a5,a1 + 80000094: fc0794e3 bnez a5,8000005c + 80000098: 00000917 auipc s2,0x0 + 8000009c: 33090913 addi s2,s2,816 # 800003c8 + 800000a0: 00090993 mv s3,s2 + 800000a4: 00000493 li s1,0 + 800000a8: 01400a13 li s4,20 + 800000ac: 0009a503 lw a0,0(s3) + 800000b0: 00498993 addi s3,s3,4 + 800000b4: 40950533 sub a0,a0,s1 + 800000b8: 00153513 seqz a0,a0 + 800000bc: 0014849b addiw s1,s1,1 + 800000c0: f51ff0ef jal ra,80000010 + 800000c4: ff4494e3 bne s1,s4,800000ac + 800000c8: 00100513 li a0,1 + 800000cc: f45ff0ef jal ra,80000010 + 800000d0: 01300793 li a5,19 + 800000d4: 00000517 auipc a0,0x0 + 800000d8: 2f850513 addi a0,a0,760 # 800003cc + 800000dc: 02078e63 beqz a5,80000118 + 800000e0: fff7859b addiw a1,a5,-1 + 800000e4: 02059613 slli a2,a1,0x20 + 800000e8: 01e65613 srli a2,a2,0x1e + 800000ec: 00a60633 add a2,a2,a0 + 800000f0: 00040793 mv a5,s0 + 800000f4: 0007a703 lw a4,0(a5) + 800000f8: 0047a683 lw a3,4(a5) + 800000fc: 00e6d663 bge a3,a4,80000108 + 80000100: 00d7a023 sw a3,0(a5) + 80000104: 00e7a223 sw a4,4(a5) + 80000108: 00478793 addi a5,a5,4 + 8000010c: fec794e3 bne a5,a2,800000f4 + 80000110: 0005879b sext.w a5,a1 + 80000114: fc0796e3 bnez a5,800000e0 + 80000118: 00000413 li s0,0 + 8000011c: 01400493 li s1,20 + 80000120: 00092503 lw a0,0(s2) + 80000124: 00490913 addi s2,s2,4 + 80000128: 40850533 sub a0,a0,s0 + 8000012c: 00153513 seqz a0,a0 + 80000130: 0014041b addiw s0,s0,1 + 80000134: eddff0ef jal ra,80000010 + 80000138: fe9414e3 bne s0,s1,80000120 + 8000013c: 00100513 li a0,1 + 80000140: ed1ff0ef jal ra,80000010 + 80000144: 02813083 ld ra,40(sp) + 80000148: 02013403 ld s0,32(sp) + 8000014c: 01813483 ld s1,24(sp) + 80000150: 01013903 ld s2,16(sp) + 80000154: 00813983 ld s3,8(sp) + 80000158: 00013a03 ld s4,0(sp) + 8000015c: 00000513 li a0,0 + 80000160: 03010113 addi sp,sp,48 + 80000164: 00008067 ret + +0000000080000168 : + 80000168: 00050513 mv a0,a0 + 8000016c: 0000006b 0x6b + 80000170: 0000006f j 80000170 + +0000000080000174 <_assert>: + 80000174: 00051a63 bnez a0,80000188 <_assert+0x14> + 80000178: 00100793 li a5,1 + 8000017c: 00078513 mv a0,a5 + 80000180: 0000006b 0x6b + 80000184: 0000006f j 80000184 <_assert+0x10> + 80000188: 00008067 ret + +000000008000018c <_trm_init>: + 8000018c: ff010113 addi sp,sp,-16 + 80000190: 00113423 sd ra,8(sp) + 80000194: 01c000ef jal ra,800001b0 + 80000198: 00000517 auipc a0,0x0 + 8000019c: 22850513 addi a0,a0,552 # 800003c0 <_etext> + 800001a0: e89ff0ef jal ra,80000028
+ 800001a4: 00050513 mv a0,a0 + 800001a8: 0000006b 0x6b + 800001ac: 0000006f j 800001ac <_trm_init+0x20> + +00000000800001b0 : + 800001b0: 00000797 auipc a5,0x0 + 800001b4: 26878793 addi a5,a5,616 # 80000418 + 800001b8: 0007b503 ld a0,0(a5) + 800001bc: 0087b583 ld a1,8(a5) + 800001c0: ff010113 addi sp,sp,-16 + 800001c4: 00000693 li a3,0 + 800001c8: 00000613 li a2,0 + 800001cc: 40a585b3 sub a1,a1,a0 + 800001d0: 00113423 sd ra,8(sp) + 800001d4: 018000ef jal ra,800001ec + 800001d8: 00813083 ld ra,8(sp) + 800001dc: 00000797 auipc a5,0x0 + 800001e0: 24a7b623 sd a0,588(a5) # 80000428 + 800001e4: 01010113 addi sp,sp,16 + 800001e8: 00008067 ret + +00000000800001ec : + 800001ec: 1a050e63 beqz a0,800003a8 + 800001f0: fd010113 addi sp,sp,-48 + 800001f4: 02813023 sd s0,32(sp) + 800001f8: 00913c23 sd s1,24(sp) + 800001fc: 01f57793 andi a5,a0,31 + 80000200: 02113423 sd ra,40(sp) + 80000204: 01213823 sd s2,16(sp) + 80000208: 01313423 sd s3,8(sp) + 8000020c: 01413023 sd s4,0(sp) + 80000210: 00050493 mv s1,a0 + 80000214: 00050413 mv s0,a0 + 80000218: 00000513 li a0,0 + 8000021c: 14079a63 bnez a5,80000370 + 80000220: 27f00713 li a4,639 + 80000224: 00058913 mv s2,a1 + 80000228: 00078513 mv a0,a5 + 8000022c: 14b77263 bgeu a4,a1,80000370 + 80000230: 0074f513 andi a0,s1,7 + 80000234: 00153513 seqz a0,a0 + 80000238: 00060a13 mv s4,a2 + 8000023c: 00068993 mv s3,a3 + 80000240: f35ff0ef jal ra,80000174 <_assert> + 80000244: 20048793 addi a5,s1,512 + 80000248: 2004b023 sd zero,512(s1) + 8000024c: 2144b423 sd s4,520(s1) + 80000250: 2134b823 sd s3,528(s1) + 80000254: 00043023 sd zero,0(s0) + 80000258: 00840413 addi s0,s0,8 + 8000025c: fe879ce3 bne a5,s0,80000254 + 80000260: fff00793 li a5,-1 + 80000264: dc090413 addi s0,s2,-576 + 80000268: 03f79793 slli a5,a5,0x3f + 8000026c: 1287f863 bgeu a5,s0,8000039c + 80000270: 00078413 mv s0,a5 + 80000274: 00100513 li a0,1 + 80000278: efdff0ef jal ra,80000174 <_assert> + 8000027c: f8300793 li a5,-125 + 80000280: 0017d793 srli a5,a5,0x1 + 80000284: fc040513 addi a0,s0,-64 + 80000288: 00f53533 sltu a0,a0,a5 + 8000028c: ee9ff0ef jal ra,80000174 <_assert> + 80000290: 01f4f513 andi a0,s1,31 + 80000294: 00153513 seqz a0,a0 + 80000298: eddff0ef jal ra,80000174 <_assert> + 8000029c: 00100513 li a0,1 + 800002a0: 2404b023 sd zero,576(s1) + 800002a4: 2404b423 sd zero,584(s1) + 800002a8: 2484b823 sd s0,592(s1) + 800002ac: 24048c23 sb zero,600(s1) + 800002b0: 2604b023 sd zero,608(s1) + 800002b4: 2604b423 sd zero,616(s1) + 800002b8: ebdff0ef jal ra,80000174 <_assert> + 800002bc: 00100513 li a0,1 + 800002c0: eb5ff0ef jal ra,80000174 <_assert> + 800002c4: 2504b503 ld a0,592(s1) + 800002c8: 24048a13 addi s4,s1,576 + 800002cc: 04053513 sltiu a0,a0,64 + 800002d0: 00154513 xori a0,a0,1 + 800002d4: 00157513 andi a0,a0,1 + 800002d8: e9dff0ef jal ra,80000174 <_assert> + 800002dc: 2504b503 ld a0,592(s1) + 800002e0: 03f57513 andi a0,a0,63 + 800002e4: 00153513 seqz a0,a0 + 800002e8: e8dff0ef jal ra,80000174 <_assert> + 800002ec: 2504b703 ld a4,592(s1) + 800002f0: 00100793 li a5,1 + 800002f4: 00675713 srli a4,a4,0x6 + 800002f8: 0ae7fc63 bgeu a5,a4,800003b0 + 800002fc: 00000793 li a5,0 + 80000300: 00100693 li a3,1 + 80000304: 0017879b addiw a5,a5,1 + 80000308: 00175713 srli a4,a4,0x1 + 8000030c: 0ff7f793 andi a5,a5,255 + 80000310: fed71ae3 bne a4,a3,80000304 + 80000314: 00078993 mv s3,a5 + 80000318: 0407b513 sltiu a0,a5,64 + 8000031c: 00f71933 sll s2,a4,a5 + 80000320: e55ff0ef jal ra,80000174 <_assert> + 80000324: 00399793 slli a5,s3,0x3 + 80000328: 00f487b3 add a5,s1,a5 + 8000032c: 0007b703 ld a4,0(a5) + 80000330: 2604b423 sd zero,616(s1) + 80000334: 26e4b023 sd a4,608(s1) + 80000338: 00070463 beqz a4,80000340 + 8000033c: 03473423 sd s4,40(a4) + 80000340: 0147b023 sd s4,0(a5) + 80000344: 2004b503 ld a0,512(s1) + 80000348: 00a96533 or a0,s2,a0 + 8000034c: 20a4b023 sd a0,512(s1) + 80000350: 00a03533 snez a0,a0 + 80000354: e21ff0ef jal ra,80000174 <_assert> + 80000358: 00048513 mv a0,s1 + 8000035c: 2084bc23 sd s0,536(s1) + 80000360: 2204b023 sd zero,544(s1) + 80000364: 2204b423 sd zero,552(s1) + 80000368: 2204b823 sd zero,560(s1) + 8000036c: 2204bc23 sd zero,568(s1) + 80000370: 02813083 ld ra,40(sp) + 80000374: 02013403 ld s0,32(sp) + 80000378: 01813483 ld s1,24(sp) + 8000037c: 01013903 ld s2,16(sp) + 80000380: 00813983 ld s3,8(sp) + 80000384: 00013a03 ld s4,0(sp) + 80000388: 03010113 addi sp,sp,48 + 8000038c: 00008067 ret + 80000390: 00100513 li a0,1 + 80000394: fff40413 addi s0,s0,-1 + 80000398: dddff0ef jal ra,80000174 <_assert> + 8000039c: 03f47793 andi a5,s0,63 + 800003a0: fe0798e3 bnez a5,80000390 + 800003a4: ed1ff06f j 80000274 + 800003a8: 00000513 li a0,0 + 800003ac: 00008067 ret + 800003b0: 00100913 li s2,1 + 800003b4: 00000993 li s3,0 + 800003b8: 00100513 li a0,1 + 800003bc: f65ff06f j 80000320 diff --git a/bin/non-output/cpu-tests/div-cpu-tests.elf b/bin/non-output/cpu-tests/div-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..bc384371f81e97010c939380286a1557c8589a26 GIT binary patch literal 41848 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 literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/div-cpu-tests.txt b/bin/non-output/cpu-tests/div-cpu-tests.txt new file mode 100755 index 0000000..ad69b0f --- /dev/null +++ b/bin/non-output/cpu-tests/div-cpu-tests.txt @@ -0,0 +1,332 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/div-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 138000ef jal ra,80000144 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 0fc000ef jal ra,80000120 + +0000000080000028

: + 80000028: fd010113 addi sp,sp,-48 + 8000002c: 01313423 sd s3,8(sp) + 80000030: 00000997 auipc s3,0x0 + 80000034: 49098993 addi s3,s3,1168 # 800004c0 + 80000038: 02113423 sd ra,40(sp) + 8000003c: 02813023 sd s0,32(sp) + 80000040: 00913c23 sd s1,24(sp) + 80000044: 01213823 sd s2,16(sp) + 80000048: 01413023 sd s4,0(sp) + 8000004c: 00098713 mv a4,s3 + 80000050: 00000793 li a5,0 + 80000054: 00a00693 li a3,10 + 80000058: 00f72023 sw a5,0(a4) + 8000005c: 0017879b addiw a5,a5,1 + 80000060: 00470713 addi a4,a4,4 + 80000064: fed79ae3 bne a5,a3,80000058 + 80000068: 00000a17 auipc s4,0x0 + 8000006c: 480a0a13 addi s4,s4,1152 # 800004e8 + 80000070: 00000917 auipc s2,0x0 + 80000074: 45090913 addi s2,s2,1104 # 800004c0 + 80000078: 00b00493 li s1,11 + 8000007c: 00092503 lw a0,0(s2) + 80000080: 00100413 li s0,1 + 80000084: 00040593 mv a1,s0 + 80000088: 0e0000ef jal ra,80000168 <__muldi3> + 8000008c: 0014041b addiw s0,s0,1 + 80000090: 0005051b sext.w a0,a0 + 80000094: fe9418e3 bne s0,s1,80000084 + 80000098: 00a92023 sw a0,0(s2) + 8000009c: 00490913 addi s2,s2,4 + 800000a0: fd491ee3 bne s2,s4,8000007c + 800000a4: 00000917 auipc s2,0x0 + 800000a8: 41c90913 addi s2,s2,1052 # 800004c0 + 800000ac: 00b00493 li s1,11 + 800000b0: 00092503 lw a0,0(s2) + 800000b4: 00100413 li s0,1 + 800000b8: 00040593 mv a1,s0 + 800000bc: 110000ef jal ra,800001cc <__divdi3> + 800000c0: 0014041b addiw s0,s0,1 + 800000c4: 0005051b sext.w a0,a0 + 800000c8: fe9418e3 bne s0,s1,800000b8 + 800000cc: 00a92023 sw a0,0(s2) + 800000d0: 00490913 addi s2,s2,4 + 800000d4: fd491ee3 bne s2,s4,800000b0 + 800000d8: 00000413 li s0,0 + 800000dc: 00a00493 li s1,10 + 800000e0: 0009a503 lw a0,0(s3) + 800000e4: 00498993 addi s3,s3,4 + 800000e8: 40850533 sub a0,a0,s0 + 800000ec: 00153513 seqz a0,a0 + 800000f0: 0014041b addiw s0,s0,1 + 800000f4: f1dff0ef jal ra,80000010 + 800000f8: fe9414e3 bne s0,s1,800000e0 + 800000fc: 02813083 ld ra,40(sp) + 80000100: 02013403 ld s0,32(sp) + 80000104: 01813483 ld s1,24(sp) + 80000108: 01013903 ld s2,16(sp) + 8000010c: 00813983 ld s3,8(sp) + 80000110: 00013a03 ld s4,0(sp) + 80000114: 00000513 li a0,0 + 80000118: 03010113 addi sp,sp,48 + 8000011c: 00008067 ret + +0000000080000120 : + 80000120: 00050513 mv a0,a0 + 80000124: 0000006b 0x6b + 80000128: 0000006f j 80000128 + +000000008000012c <_assert>: + 8000012c: 00051a63 bnez a0,80000140 <_assert+0x14> + 80000130: 00100793 li a5,1 + 80000134: 00078513 mv a0,a5 + 80000138: 0000006b 0x6b + 8000013c: 0000006f j 8000013c <_assert+0x10> + 80000140: 00008067 ret + +0000000080000144 <_trm_init>: + 80000144: ff010113 addi sp,sp,-16 + 80000148: 00113423 sd ra,8(sp) + 8000014c: 140000ef jal ra,8000028c + 80000150: 00000517 auipc a0,0x0 + 80000154: 35050513 addi a0,a0,848 # 800004a0 + 80000158: ed1ff0ef jal ra,80000028
+ 8000015c: 00050513 mv a0,a0 + 80000160: 0000006b 0x6b + 80000164: 0000006f j 80000164 <_trm_init+0x20> + +0000000080000168 <__muldi3>: + 80000168: 00050613 mv a2,a0 + 8000016c: 00000513 li a0,0 + 80000170: 0015f693 andi a3,a1,1 + 80000174: 00068463 beqz a3,8000017c <__muldi3+0x14> + 80000178: 00c50533 add a0,a0,a2 + 8000017c: 0015d593 srli a1,a1,0x1 + 80000180: 00161613 slli a2,a2,0x1 + 80000184: fe0596e3 bnez a1,80000170 <__muldi3+0x8> + 80000188: 00008067 ret + +000000008000018c <__udivsi3>: + 8000018c: 02051513 slli a0,a0,0x20 + 80000190: 02059593 slli a1,a1,0x20 + 80000194: 00008293 mv t0,ra + 80000198: 03c000ef jal ra,800001d4 <__udivdi3> + 8000019c: 0005051b sext.w a0,a0 + 800001a0: 00028067 jr t0 + +00000000800001a4 <__umodsi3>: + 800001a4: 02051513 slli a0,a0,0x20 + 800001a8: 02059593 slli a1,a1,0x20 + 800001ac: 02055513 srli a0,a0,0x20 + 800001b0: 0205d593 srli a1,a1,0x20 + 800001b4: 00008293 mv t0,ra + 800001b8: 01c000ef jal ra,800001d4 <__udivdi3> + 800001bc: 0005851b sext.w a0,a1 + 800001c0: 00028067 jr t0 + +00000000800001c4 <__divsi3>: + 800001c4: fff00293 li t0,-1 + 800001c8: 0a558c63 beq a1,t0,80000280 <__moddi3+0x30> + +00000000800001cc <__divdi3>: + 800001cc: 06054063 bltz a0,8000022c <__umoddi3+0x10> + 800001d0: 0605c663 bltz a1,8000023c <__umoddi3+0x20> + +00000000800001d4 <__udivdi3>: + 800001d4: 00058613 mv a2,a1 + 800001d8: 00050593 mv a1,a0 + 800001dc: fff00513 li a0,-1 + 800001e0: 02060c63 beqz a2,80000218 <__udivdi3+0x44> + 800001e4: 00100693 li a3,1 + 800001e8: 00b67a63 bgeu a2,a1,800001fc <__udivdi3+0x28> + 800001ec: 00c05863 blez a2,800001fc <__udivdi3+0x28> + 800001f0: 00161613 slli a2,a2,0x1 + 800001f4: 00169693 slli a3,a3,0x1 + 800001f8: feb66ae3 bltu a2,a1,800001ec <__udivdi3+0x18> + 800001fc: 00000513 li a0,0 + 80000200: 00c5e663 bltu a1,a2,8000020c <__udivdi3+0x38> + 80000204: 40c585b3 sub a1,a1,a2 + 80000208: 00d56533 or a0,a0,a3 + 8000020c: 0016d693 srli a3,a3,0x1 + 80000210: 00165613 srli a2,a2,0x1 + 80000214: fe0696e3 bnez a3,80000200 <__udivdi3+0x2c> + 80000218: 00008067 ret + +000000008000021c <__umoddi3>: + 8000021c: 00008293 mv t0,ra + 80000220: fb5ff0ef jal ra,800001d4 <__udivdi3> + 80000224: 00058513 mv a0,a1 + 80000228: 00028067 jr t0 + 8000022c: 40a00533 neg a0,a0 + 80000230: 00b04863 bgtz a1,80000240 <__umoddi3+0x24> + 80000234: 40b005b3 neg a1,a1 + 80000238: f9dff06f j 800001d4 <__udivdi3> + 8000023c: 40b005b3 neg a1,a1 + 80000240: 00008293 mv t0,ra + 80000244: f91ff0ef jal ra,800001d4 <__udivdi3> + 80000248: 40a00533 neg a0,a0 + 8000024c: 00028067 jr t0 + +0000000080000250 <__moddi3>: + 80000250: 00008293 mv t0,ra + 80000254: 0005ca63 bltz a1,80000268 <__moddi3+0x18> + 80000258: 00054c63 bltz a0,80000270 <__moddi3+0x20> + 8000025c: f79ff0ef jal ra,800001d4 <__udivdi3> + 80000260: 00058513 mv a0,a1 + 80000264: 00028067 jr t0 + 80000268: 40b005b3 neg a1,a1 + 8000026c: fe0558e3 bgez a0,8000025c <__moddi3+0xc> + 80000270: 40a00533 neg a0,a0 + 80000274: f61ff0ef jal ra,800001d4 <__udivdi3> + 80000278: 40b00533 neg a0,a1 + 8000027c: 00028067 jr t0 + 80000280: 01f29293 slli t0,t0,0x1f + 80000284: f45514e3 bne a0,t0,800001cc <__divdi3> + 80000288: 00008067 ret + +000000008000028c : + 8000028c: 00000797 auipc a5,0x0 + 80000290: 21c78793 addi a5,a5,540 # 800004a8 + 80000294: 0007b503 ld a0,0(a5) + 80000298: 0087b583 ld a1,8(a5) + 8000029c: ff010113 addi sp,sp,-16 + 800002a0: 00000693 li a3,0 + 800002a4: 00000613 li a2,0 + 800002a8: 40a585b3 sub a1,a1,a0 + 800002ac: 00113423 sd ra,8(sp) + 800002b0: 018000ef jal ra,800002c8 + 800002b4: 00813083 ld ra,8(sp) + 800002b8: 00000797 auipc a5,0x0 + 800002bc: 20a7b023 sd a0,512(a5) # 800004b8 + 800002c0: 01010113 addi sp,sp,16 + 800002c4: 00008067 ret + +00000000800002c8 : + 800002c8: 1a050e63 beqz a0,80000484 + 800002cc: fd010113 addi sp,sp,-48 + 800002d0: 02813023 sd s0,32(sp) + 800002d4: 00913c23 sd s1,24(sp) + 800002d8: 01f57793 andi a5,a0,31 + 800002dc: 02113423 sd ra,40(sp) + 800002e0: 01213823 sd s2,16(sp) + 800002e4: 01313423 sd s3,8(sp) + 800002e8: 01413023 sd s4,0(sp) + 800002ec: 00050493 mv s1,a0 + 800002f0: 00050413 mv s0,a0 + 800002f4: 00000513 li a0,0 + 800002f8: 14079a63 bnez a5,8000044c + 800002fc: 27f00713 li a4,639 + 80000300: 00058913 mv s2,a1 + 80000304: 00078513 mv a0,a5 + 80000308: 14b77263 bgeu a4,a1,8000044c + 8000030c: 0074f513 andi a0,s1,7 + 80000310: 00153513 seqz a0,a0 + 80000314: 00060a13 mv s4,a2 + 80000318: 00068993 mv s3,a3 + 8000031c: e11ff0ef jal ra,8000012c <_assert> + 80000320: 20048793 addi a5,s1,512 + 80000324: 2004b023 sd zero,512(s1) + 80000328: 2144b423 sd s4,520(s1) + 8000032c: 2134b823 sd s3,528(s1) + 80000330: 00043023 sd zero,0(s0) + 80000334: 00840413 addi s0,s0,8 + 80000338: fe879ce3 bne a5,s0,80000330 + 8000033c: fff00793 li a5,-1 + 80000340: dc090413 addi s0,s2,-576 + 80000344: 03f79793 slli a5,a5,0x3f + 80000348: 1287f863 bgeu a5,s0,80000478 + 8000034c: 00078413 mv s0,a5 + 80000350: 00100513 li a0,1 + 80000354: dd9ff0ef jal ra,8000012c <_assert> + 80000358: f8300793 li a5,-125 + 8000035c: 0017d793 srli a5,a5,0x1 + 80000360: fc040513 addi a0,s0,-64 + 80000364: 00f53533 sltu a0,a0,a5 + 80000368: dc5ff0ef jal ra,8000012c <_assert> + 8000036c: 01f4f513 andi a0,s1,31 + 80000370: 00153513 seqz a0,a0 + 80000374: db9ff0ef jal ra,8000012c <_assert> + 80000378: 00100513 li a0,1 + 8000037c: 2404b023 sd zero,576(s1) + 80000380: 2404b423 sd zero,584(s1) + 80000384: 2484b823 sd s0,592(s1) + 80000388: 24048c23 sb zero,600(s1) + 8000038c: 2604b023 sd zero,608(s1) + 80000390: 2604b423 sd zero,616(s1) + 80000394: d99ff0ef jal ra,8000012c <_assert> + 80000398: 00100513 li a0,1 + 8000039c: d91ff0ef jal ra,8000012c <_assert> + 800003a0: 2504b503 ld a0,592(s1) + 800003a4: 24048a13 addi s4,s1,576 + 800003a8: 04053513 sltiu a0,a0,64 + 800003ac: 00154513 xori a0,a0,1 + 800003b0: 00157513 andi a0,a0,1 + 800003b4: d79ff0ef jal ra,8000012c <_assert> + 800003b8: 2504b503 ld a0,592(s1) + 800003bc: 03f57513 andi a0,a0,63 + 800003c0: 00153513 seqz a0,a0 + 800003c4: d69ff0ef jal ra,8000012c <_assert> + 800003c8: 2504b703 ld a4,592(s1) + 800003cc: 00100793 li a5,1 + 800003d0: 00675713 srli a4,a4,0x6 + 800003d4: 0ae7fc63 bgeu a5,a4,8000048c + 800003d8: 00000793 li a5,0 + 800003dc: 00100693 li a3,1 + 800003e0: 0017879b addiw a5,a5,1 + 800003e4: 00175713 srli a4,a4,0x1 + 800003e8: 0ff7f793 andi a5,a5,255 + 800003ec: fed71ae3 bne a4,a3,800003e0 + 800003f0: 00078993 mv s3,a5 + 800003f4: 0407b513 sltiu a0,a5,64 + 800003f8: 00f71933 sll s2,a4,a5 + 800003fc: d31ff0ef jal ra,8000012c <_assert> + 80000400: 00399793 slli a5,s3,0x3 + 80000404: 00f487b3 add a5,s1,a5 + 80000408: 0007b703 ld a4,0(a5) + 8000040c: 2604b423 sd zero,616(s1) + 80000410: 26e4b023 sd a4,608(s1) + 80000414: 00070463 beqz a4,8000041c + 80000418: 03473423 sd s4,40(a4) + 8000041c: 0147b023 sd s4,0(a5) + 80000420: 2004b503 ld a0,512(s1) + 80000424: 00a96533 or a0,s2,a0 + 80000428: 20a4b023 sd a0,512(s1) + 8000042c: 00a03533 snez a0,a0 + 80000430: cfdff0ef jal ra,8000012c <_assert> + 80000434: 00048513 mv a0,s1 + 80000438: 2084bc23 sd s0,536(s1) + 8000043c: 2204b023 sd zero,544(s1) + 80000440: 2204b423 sd zero,552(s1) + 80000444: 2204b823 sd zero,560(s1) + 80000448: 2204bc23 sd zero,568(s1) + 8000044c: 02813083 ld ra,40(sp) + 80000450: 02013403 ld s0,32(sp) + 80000454: 01813483 ld s1,24(sp) + 80000458: 01013903 ld s2,16(sp) + 8000045c: 00813983 ld s3,8(sp) + 80000460: 00013a03 ld s4,0(sp) + 80000464: 03010113 addi sp,sp,48 + 80000468: 00008067 ret + 8000046c: 00100513 li a0,1 + 80000470: fff40413 addi s0,s0,-1 + 80000474: cb9ff0ef jal ra,8000012c <_assert> + 80000478: 03f47793 andi a5,s0,63 + 8000047c: fe0798e3 bnez a5,8000046c + 80000480: ed1ff06f j 80000350 + 80000484: 00000513 li a0,0 + 80000488: 00008067 ret + 8000048c: 00100913 li s2,1 + 80000490: 00000993 li s3,0 + 80000494: 00100513 li a0,1 + 80000498: f65ff06f j 800003fc diff --git a/bin/non-output/cpu-tests/dummy-cpu-tests.elf b/bin/non-output/cpu-tests/dummy-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..fd2da0f2f9bd1eb2723f1912eefe4bfd41291e4b GIT binary patch literal 39232 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 ZS$V<^MBObP|B=s^e#Lc?@Y`e1|9^S;NIL)k literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/dummy-cpu-tests.txt b/bin/non-output/cpu-tests/dummy-cpu-tests.txt new file mode 100755 index 0000000..0c9696d --- /dev/null +++ b/bin/non-output/cpu-tests/dummy-cpu-tests.txt @@ -0,0 +1,170 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/dummy-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 024000ef jal ra,80000030 <_trm_init> + +0000000080000010
: + 80000010: 00000513 li a0,0 + 80000014: 00008067 ret + +0000000080000018 <_assert>: + 80000018: 00051a63 bnez a0,8000002c <_assert+0x14> + 8000001c: 00100793 li a5,1 + 80000020: 00078513 mv a0,a5 + 80000024: 0000006b 0x6b + 80000028: 0000006f j 80000028 <_assert+0x10> + 8000002c: 00008067 ret + +0000000080000030 <_trm_init>: + 80000030: ff010113 addi sp,sp,-16 + 80000034: 00113423 sd ra,8(sp) + 80000038: 01c000ef jal ra,80000054 + 8000003c: 00000517 auipc a0,0x0 + 80000040: 22c50513 addi a0,a0,556 # 80000268 + 80000044: fcdff0ef jal ra,80000010
+ 80000048: 00050513 mv a0,a0 + 8000004c: 0000006b 0x6b + 80000050: 0000006f j 80000050 <_trm_init+0x20> + +0000000080000054 : + 80000054: 00000797 auipc a5,0x0 + 80000058: 21c78793 addi a5,a5,540 # 80000270 + 8000005c: 0007b503 ld a0,0(a5) + 80000060: 0087b583 ld a1,8(a5) + 80000064: ff010113 addi sp,sp,-16 + 80000068: 00000693 li a3,0 + 8000006c: 00000613 li a2,0 + 80000070: 40a585b3 sub a1,a1,a0 + 80000074: 00113423 sd ra,8(sp) + 80000078: 018000ef jal ra,80000090 + 8000007c: 00813083 ld ra,8(sp) + 80000080: 00000797 auipc a5,0x0 + 80000084: 20a7b023 sd a0,512(a5) # 80000280 + 80000088: 01010113 addi sp,sp,16 + 8000008c: 00008067 ret + +0000000080000090 : + 80000090: 1a050e63 beqz a0,8000024c + 80000094: fd010113 addi sp,sp,-48 + 80000098: 02813023 sd s0,32(sp) + 8000009c: 00913c23 sd s1,24(sp) + 800000a0: 01f57793 andi a5,a0,31 + 800000a4: 02113423 sd ra,40(sp) + 800000a8: 01213823 sd s2,16(sp) + 800000ac: 01313423 sd s3,8(sp) + 800000b0: 01413023 sd s4,0(sp) + 800000b4: 00050493 mv s1,a0 + 800000b8: 00050413 mv s0,a0 + 800000bc: 00000513 li a0,0 + 800000c0: 14079a63 bnez a5,80000214 + 800000c4: 27f00713 li a4,639 + 800000c8: 00058913 mv s2,a1 + 800000cc: 00078513 mv a0,a5 + 800000d0: 14b77263 bgeu a4,a1,80000214 + 800000d4: 0074f513 andi a0,s1,7 + 800000d8: 00153513 seqz a0,a0 + 800000dc: 00060a13 mv s4,a2 + 800000e0: 00068993 mv s3,a3 + 800000e4: f35ff0ef jal ra,80000018 <_assert> + 800000e8: 20048793 addi a5,s1,512 + 800000ec: 2004b023 sd zero,512(s1) + 800000f0: 2144b423 sd s4,520(s1) + 800000f4: 2134b823 sd s3,528(s1) + 800000f8: 00043023 sd zero,0(s0) + 800000fc: 00840413 addi s0,s0,8 + 80000100: fe879ce3 bne a5,s0,800000f8 + 80000104: fff00793 li a5,-1 + 80000108: dc090413 addi s0,s2,-576 + 8000010c: 03f79793 slli a5,a5,0x3f + 80000110: 1287f863 bgeu a5,s0,80000240 + 80000114: 00078413 mv s0,a5 + 80000118: 00100513 li a0,1 + 8000011c: efdff0ef jal ra,80000018 <_assert> + 80000120: f8300793 li a5,-125 + 80000124: 0017d793 srli a5,a5,0x1 + 80000128: fc040513 addi a0,s0,-64 + 8000012c: 00f53533 sltu a0,a0,a5 + 80000130: ee9ff0ef jal ra,80000018 <_assert> + 80000134: 01f4f513 andi a0,s1,31 + 80000138: 00153513 seqz a0,a0 + 8000013c: eddff0ef jal ra,80000018 <_assert> + 80000140: 00100513 li a0,1 + 80000144: 2404b023 sd zero,576(s1) + 80000148: 2404b423 sd zero,584(s1) + 8000014c: 2484b823 sd s0,592(s1) + 80000150: 24048c23 sb zero,600(s1) + 80000154: 2604b023 sd zero,608(s1) + 80000158: 2604b423 sd zero,616(s1) + 8000015c: ebdff0ef jal ra,80000018 <_assert> + 80000160: 00100513 li a0,1 + 80000164: eb5ff0ef jal ra,80000018 <_assert> + 80000168: 2504b503 ld a0,592(s1) + 8000016c: 24048a13 addi s4,s1,576 + 80000170: 04053513 sltiu a0,a0,64 + 80000174: 00154513 xori a0,a0,1 + 80000178: 00157513 andi a0,a0,1 + 8000017c: e9dff0ef jal ra,80000018 <_assert> + 80000180: 2504b503 ld a0,592(s1) + 80000184: 03f57513 andi a0,a0,63 + 80000188: 00153513 seqz a0,a0 + 8000018c: e8dff0ef jal ra,80000018 <_assert> + 80000190: 2504b703 ld a4,592(s1) + 80000194: 00100793 li a5,1 + 80000198: 00675713 srli a4,a4,0x6 + 8000019c: 0ae7fc63 bgeu a5,a4,80000254 + 800001a0: 00000793 li a5,0 + 800001a4: 00100693 li a3,1 + 800001a8: 0017879b addiw a5,a5,1 + 800001ac: 00175713 srli a4,a4,0x1 + 800001b0: 0ff7f793 andi a5,a5,255 + 800001b4: fed71ae3 bne a4,a3,800001a8 + 800001b8: 00078993 mv s3,a5 + 800001bc: 0407b513 sltiu a0,a5,64 + 800001c0: 00f71933 sll s2,a4,a5 + 800001c4: e55ff0ef jal ra,80000018 <_assert> + 800001c8: 00399793 slli a5,s3,0x3 + 800001cc: 00f487b3 add a5,s1,a5 + 800001d0: 0007b703 ld a4,0(a5) + 800001d4: 2604b423 sd zero,616(s1) + 800001d8: 26e4b023 sd a4,608(s1) + 800001dc: 00070463 beqz a4,800001e4 + 800001e0: 03473423 sd s4,40(a4) + 800001e4: 0147b023 sd s4,0(a5) + 800001e8: 2004b503 ld a0,512(s1) + 800001ec: 00a96533 or a0,s2,a0 + 800001f0: 20a4b023 sd a0,512(s1) + 800001f4: 00a03533 snez a0,a0 + 800001f8: e21ff0ef jal ra,80000018 <_assert> + 800001fc: 00048513 mv a0,s1 + 80000200: 2084bc23 sd s0,536(s1) + 80000204: 2204b023 sd zero,544(s1) + 80000208: 2204b423 sd zero,552(s1) + 8000020c: 2204b823 sd zero,560(s1) + 80000210: 2204bc23 sd zero,568(s1) + 80000214: 02813083 ld ra,40(sp) + 80000218: 02013403 ld s0,32(sp) + 8000021c: 01813483 ld s1,24(sp) + 80000220: 01013903 ld s2,16(sp) + 80000224: 00813983 ld s3,8(sp) + 80000228: 00013a03 ld s4,0(sp) + 8000022c: 03010113 addi sp,sp,48 + 80000230: 00008067 ret + 80000234: 00100513 li a0,1 + 80000238: fff40413 addi s0,s0,-1 + 8000023c: dddff0ef jal ra,80000018 <_assert> + 80000240: 03f47793 andi a5,s0,63 + 80000244: fe0798e3 bnez a5,80000234 + 80000248: ed1ff06f j 80000118 + 8000024c: 00000513 li a0,0 + 80000250: 00008067 ret + 80000254: 00100913 li s2,1 + 80000258: 00000993 li s3,0 + 8000025c: 00100513 li a0,1 + 80000260: f65ff06f j 800001c4 diff --git a/bin/non-output/cpu-tests/fact-cpu-tests.elf b/bin/non-output/cpu-tests/fact-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..83af688947a1f65ef76cce8d2fc4d378d4292596 GIT binary patch literal 41680 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 pK=lfl9&R~Ah>{|}~$X2Jjf literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/fact-cpu-tests.txt b/bin/non-output/cpu-tests/fact-cpu-tests.txt new file mode 100755 index 0000000..75bf141 --- /dev/null +++ b/bin/non-output/cpu-tests/fact-cpu-tests.txt @@ -0,0 +1,244 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/fact-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 110000ef jal ra,8000011c <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 0d4000ef jal ra,800000f8 + +0000000080000028
: + 80000028: fc010113 addi sp,sp,-64 + 8000002c: 01313c23 sd s3,24(sp) + 80000030: 00000997 auipc s3,0x0 + 80000034: 35098993 addi s3,s3,848 # 80000380 + 80000038: 0009a503 lw a0,0(s3) + 8000003c: 00100593 li a1,1 + 80000040: 03213023 sd s2,32(sp) + 80000044: 40b50533 sub a0,a0,a1 + 80000048: 00000913 li s2,0 + 8000004c: 01413823 sd s4,16(sp) + 80000050: 01513423 sd s5,8(sp) + 80000054: 00000a17 auipc s4,0x0 + 80000058: 37ca0a13 addi s4,s4,892 # 800003d0 + 8000005c: 00d00a93 li s5,13 + 80000060: 0019091b addiw s2,s2,1 + 80000064: 00153513 seqz a0,a0 + 80000068: 02913423 sd s1,40(sp) + 8000006c: 02113c23 sd ra,56(sp) + 80000070: 02813823 sd s0,48(sp) + 80000074: 00100493 li s1,1 + 80000078: 00ba2023 sw a1,0(s4) + 8000007c: f95ff0ef jal ra,80000010 + 80000080: 05590463 beq s2,s5,800000c8 + 80000084: 06990663 beq s2,s1,800000f0 + 80000088: 00090413 mv s0,s2 + 8000008c: 00100593 li a1,1 + 80000090: 00040513 mv a0,s0 + 80000094: 0ac000ef jal ra,80000140 <__muldi3> + 80000098: fff4041b addiw s0,s0,-1 + 8000009c: 0005059b sext.w a1,a0 + 800000a0: fe9418e3 bne s0,s1,80000090 + 800000a4: 0049a503 lw a0,4(s3) + 800000a8: 0019091b addiw s2,s2,1 + 800000ac: 004a0a13 addi s4,s4,4 + 800000b0: 40b50533 sub a0,a0,a1 + 800000b4: 00153513 seqz a0,a0 + 800000b8: 00498993 addi s3,s3,4 + 800000bc: 00ba2023 sw a1,0(s4) + 800000c0: f51ff0ef jal ra,80000010 + 800000c4: fd5910e3 bne s2,s5,80000084 + 800000c8: 03813083 ld ra,56(sp) + 800000cc: 03013403 ld s0,48(sp) + 800000d0: 02813483 ld s1,40(sp) + 800000d4: 02013903 ld s2,32(sp) + 800000d8: 01813983 ld s3,24(sp) + 800000dc: 01013a03 ld s4,16(sp) + 800000e0: 00813a83 ld s5,8(sp) + 800000e4: 00000513 li a0,0 + 800000e8: 04010113 addi sp,sp,64 + 800000ec: 00008067 ret + 800000f0: 00100593 li a1,1 + 800000f4: fb1ff06f j 800000a4 + +00000000800000f8 : + 800000f8: 00050513 mv a0,a0 + 800000fc: 0000006b 0x6b + 80000100: 0000006f j 80000100 + +0000000080000104 <_assert>: + 80000104: 00051a63 bnez a0,80000118 <_assert+0x14> + 80000108: 00100793 li a5,1 + 8000010c: 00078513 mv a0,a5 + 80000110: 0000006b 0x6b + 80000114: 0000006f j 80000114 <_assert+0x10> + 80000118: 00008067 ret + +000000008000011c <_trm_init>: + 8000011c: ff010113 addi sp,sp,-16 + 80000120: 00113423 sd ra,8(sp) + 80000124: 040000ef jal ra,80000164 + 80000128: 00000517 auipc a0,0x0 + 8000012c: 25050513 addi a0,a0,592 # 80000378 + 80000130: ef9ff0ef jal ra,80000028
+ 80000134: 00050513 mv a0,a0 + 80000138: 0000006b 0x6b + 8000013c: 0000006f j 8000013c <_trm_init+0x20> + +0000000080000140 <__muldi3>: + 80000140: 00050613 mv a2,a0 + 80000144: 00000513 li a0,0 + 80000148: 0015f693 andi a3,a1,1 + 8000014c: 00068463 beqz a3,80000154 <__muldi3+0x14> + 80000150: 00c50533 add a0,a0,a2 + 80000154: 0015d593 srli a1,a1,0x1 + 80000158: 00161613 slli a2,a2,0x1 + 8000015c: fe0596e3 bnez a1,80000148 <__muldi3+0x8> + 80000160: 00008067 ret + +0000000080000164 : + 80000164: 00000797 auipc a5,0x0 + 80000168: 25478793 addi a5,a5,596 # 800003b8 + 8000016c: 0007b503 ld a0,0(a5) + 80000170: 0087b583 ld a1,8(a5) + 80000174: ff010113 addi sp,sp,-16 + 80000178: 00000693 li a3,0 + 8000017c: 00000613 li a2,0 + 80000180: 40a585b3 sub a1,a1,a0 + 80000184: 00113423 sd ra,8(sp) + 80000188: 018000ef jal ra,800001a0 + 8000018c: 00813083 ld ra,8(sp) + 80000190: 00000797 auipc a5,0x0 + 80000194: 22a7bc23 sd a0,568(a5) # 800003c8 + 80000198: 01010113 addi sp,sp,16 + 8000019c: 00008067 ret + +00000000800001a0 : + 800001a0: 1a050e63 beqz a0,8000035c + 800001a4: fd010113 addi sp,sp,-48 + 800001a8: 02813023 sd s0,32(sp) + 800001ac: 00913c23 sd s1,24(sp) + 800001b0: 01f57793 andi a5,a0,31 + 800001b4: 02113423 sd ra,40(sp) + 800001b8: 01213823 sd s2,16(sp) + 800001bc: 01313423 sd s3,8(sp) + 800001c0: 01413023 sd s4,0(sp) + 800001c4: 00050493 mv s1,a0 + 800001c8: 00050413 mv s0,a0 + 800001cc: 00000513 li a0,0 + 800001d0: 14079a63 bnez a5,80000324 + 800001d4: 27f00713 li a4,639 + 800001d8: 00058913 mv s2,a1 + 800001dc: 00078513 mv a0,a5 + 800001e0: 14b77263 bgeu a4,a1,80000324 + 800001e4: 0074f513 andi a0,s1,7 + 800001e8: 00153513 seqz a0,a0 + 800001ec: 00060a13 mv s4,a2 + 800001f0: 00068993 mv s3,a3 + 800001f4: f11ff0ef jal ra,80000104 <_assert> + 800001f8: 20048793 addi a5,s1,512 + 800001fc: 2004b023 sd zero,512(s1) + 80000200: 2144b423 sd s4,520(s1) + 80000204: 2134b823 sd s3,528(s1) + 80000208: 00043023 sd zero,0(s0) + 8000020c: 00840413 addi s0,s0,8 + 80000210: fe879ce3 bne a5,s0,80000208 + 80000214: fff00793 li a5,-1 + 80000218: dc090413 addi s0,s2,-576 + 8000021c: 03f79793 slli a5,a5,0x3f + 80000220: 1287f863 bgeu a5,s0,80000350 + 80000224: 00078413 mv s0,a5 + 80000228: 00100513 li a0,1 + 8000022c: ed9ff0ef jal ra,80000104 <_assert> + 80000230: f8300793 li a5,-125 + 80000234: 0017d793 srli a5,a5,0x1 + 80000238: fc040513 addi a0,s0,-64 + 8000023c: 00f53533 sltu a0,a0,a5 + 80000240: ec5ff0ef jal ra,80000104 <_assert> + 80000244: 01f4f513 andi a0,s1,31 + 80000248: 00153513 seqz a0,a0 + 8000024c: eb9ff0ef jal ra,80000104 <_assert> + 80000250: 00100513 li a0,1 + 80000254: 2404b023 sd zero,576(s1) + 80000258: 2404b423 sd zero,584(s1) + 8000025c: 2484b823 sd s0,592(s1) + 80000260: 24048c23 sb zero,600(s1) + 80000264: 2604b023 sd zero,608(s1) + 80000268: 2604b423 sd zero,616(s1) + 8000026c: e99ff0ef jal ra,80000104 <_assert> + 80000270: 00100513 li a0,1 + 80000274: e91ff0ef jal ra,80000104 <_assert> + 80000278: 2504b503 ld a0,592(s1) + 8000027c: 24048a13 addi s4,s1,576 + 80000280: 04053513 sltiu a0,a0,64 + 80000284: 00154513 xori a0,a0,1 + 80000288: 00157513 andi a0,a0,1 + 8000028c: e79ff0ef jal ra,80000104 <_assert> + 80000290: 2504b503 ld a0,592(s1) + 80000294: 03f57513 andi a0,a0,63 + 80000298: 00153513 seqz a0,a0 + 8000029c: e69ff0ef jal ra,80000104 <_assert> + 800002a0: 2504b703 ld a4,592(s1) + 800002a4: 00100793 li a5,1 + 800002a8: 00675713 srli a4,a4,0x6 + 800002ac: 0ae7fc63 bgeu a5,a4,80000364 + 800002b0: 00000793 li a5,0 + 800002b4: 00100693 li a3,1 + 800002b8: 0017879b addiw a5,a5,1 + 800002bc: 00175713 srli a4,a4,0x1 + 800002c0: 0ff7f793 andi a5,a5,255 + 800002c4: fed71ae3 bne a4,a3,800002b8 + 800002c8: 00078993 mv s3,a5 + 800002cc: 0407b513 sltiu a0,a5,64 + 800002d0: 00f71933 sll s2,a4,a5 + 800002d4: e31ff0ef jal ra,80000104 <_assert> + 800002d8: 00399793 slli a5,s3,0x3 + 800002dc: 00f487b3 add a5,s1,a5 + 800002e0: 0007b703 ld a4,0(a5) + 800002e4: 2604b423 sd zero,616(s1) + 800002e8: 26e4b023 sd a4,608(s1) + 800002ec: 00070463 beqz a4,800002f4 + 800002f0: 03473423 sd s4,40(a4) + 800002f4: 0147b023 sd s4,0(a5) + 800002f8: 2004b503 ld a0,512(s1) + 800002fc: 00a96533 or a0,s2,a0 + 80000300: 20a4b023 sd a0,512(s1) + 80000304: 00a03533 snez a0,a0 + 80000308: dfdff0ef jal ra,80000104 <_assert> + 8000030c: 00048513 mv a0,s1 + 80000310: 2084bc23 sd s0,536(s1) + 80000314: 2204b023 sd zero,544(s1) + 80000318: 2204b423 sd zero,552(s1) + 8000031c: 2204b823 sd zero,560(s1) + 80000320: 2204bc23 sd zero,568(s1) + 80000324: 02813083 ld ra,40(sp) + 80000328: 02013403 ld s0,32(sp) + 8000032c: 01813483 ld s1,24(sp) + 80000330: 01013903 ld s2,16(sp) + 80000334: 00813983 ld s3,8(sp) + 80000338: 00013a03 ld s4,0(sp) + 8000033c: 03010113 addi sp,sp,48 + 80000340: 00008067 ret + 80000344: 00100513 li a0,1 + 80000348: fff40413 addi s0,s0,-1 + 8000034c: db9ff0ef jal ra,80000104 <_assert> + 80000350: 03f47793 andi a5,s0,63 + 80000354: fe0798e3 bnez a5,80000344 + 80000358: ed1ff06f j 80000228 + 8000035c: 00000513 li a0,0 + 80000360: 00008067 ret + 80000364: 00100913 li s2,1 + 80000368: 00000993 li s3,0 + 8000036c: 00100513 li a0,1 + 80000370: f65ff06f j 800002d4 diff --git a/bin/non-output/cpu-tests/fib-cpu-tests.elf b/bin/non-output/cpu-tests/fib-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..9b68944d4e80c40407171b937d97d4b12a6dcb35 GIT binary patch literal 41144 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 VTlYz>7ytC@CB>tfP+gt;{|{FiMP~p2 literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/fib-cpu-tests.txt b/bin/non-output/cpu-tests/fib-cpu-tests.txt new file mode 100755 index 0000000..4e252d7 --- /dev/null +++ b/bin/non-output/cpu-tests/fib-cpu-tests.txt @@ -0,0 +1,212 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/fib-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 0bc000ef jal ra,800000c8 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 080000ef jal ra,800000a4 + +0000000080000028
: + 80000028: fe010113 addi sp,sp,-32 + 8000002c: 00813823 sd s0,16(sp) + 80000030: 00913423 sd s1,8(sp) + 80000034: 01213023 sd s2,0(sp) + 80000038: 00113c23 sd ra,24(sp) + 8000003c: 00000417 auipc s0,0x0 + 80000040: 36c40413 addi s0,s0,876 # 800003a8 + 80000044: 00000497 auipc s1,0x0 + 80000048: 2cc48493 addi s1,s1,716 # 80000310 + 8000004c: 00000917 auipc s2,0x0 + 80000050: 3f490913 addi s2,s2,1012 # 80000440 + 80000054: 00442783 lw a5,4(s0) + 80000058: 00042703 lw a4,0(s0) + 8000005c: 0004a503 lw a0,0(s1) + 80000060: 00440413 addi s0,s0,4 + 80000064: 00e7873b addw a4,a5,a4 + 80000068: 40e50533 sub a0,a0,a4 + 8000006c: 00153513 seqz a0,a0 + 80000070: 00e42223 sw a4,4(s0) + 80000074: 00448493 addi s1,s1,4 + 80000078: f99ff0ef jal ra,80000010 + 8000007c: fd241ce3 bne s0,s2,80000054 + 80000080: 00100513 li a0,1 + 80000084: f8dff0ef jal ra,80000010 + 80000088: 01813083 ld ra,24(sp) + 8000008c: 01013403 ld s0,16(sp) + 80000090: 00813483 ld s1,8(sp) + 80000094: 00013903 ld s2,0(sp) + 80000098: 00000513 li a0,0 + 8000009c: 02010113 addi sp,sp,32 + 800000a0: 00008067 ret + +00000000800000a4 : + 800000a4: 00050513 mv a0,a0 + 800000a8: 0000006b 0x6b + 800000ac: 0000006f j 800000ac + +00000000800000b0 <_assert>: + 800000b0: 00051a63 bnez a0,800000c4 <_assert+0x14> + 800000b4: 00100793 li a5,1 + 800000b8: 00078513 mv a0,a5 + 800000bc: 0000006b 0x6b + 800000c0: 0000006f j 800000c0 <_assert+0x10> + 800000c4: 00008067 ret + +00000000800000c8 <_trm_init>: + 800000c8: ff010113 addi sp,sp,-16 + 800000cc: 00113423 sd ra,8(sp) + 800000d0: 01c000ef jal ra,800000ec + 800000d4: 00000517 auipc a0,0x0 + 800000d8: 22c50513 addi a0,a0,556 # 80000300 + 800000dc: f4dff0ef jal ra,80000028
+ 800000e0: 00050513 mv a0,a0 + 800000e4: 0000006b 0x6b + 800000e8: 0000006f j 800000e8 <_trm_init+0x20> + +00000000800000ec : + 800000ec: 00000797 auipc a5,0x0 + 800000f0: 35c78793 addi a5,a5,860 # 80000448 + 800000f4: 0007b503 ld a0,0(a5) + 800000f8: 0087b583 ld a1,8(a5) + 800000fc: ff010113 addi sp,sp,-16 + 80000100: 00000693 li a3,0 + 80000104: 00000613 li a2,0 + 80000108: 40a585b3 sub a1,a1,a0 + 8000010c: 00113423 sd ra,8(sp) + 80000110: 018000ef jal ra,80000128 + 80000114: 00813083 ld ra,8(sp) + 80000118: 00000797 auipc a5,0x0 + 8000011c: 34a7b023 sd a0,832(a5) # 80000458 + 80000120: 01010113 addi sp,sp,16 + 80000124: 00008067 ret + +0000000080000128 : + 80000128: 1a050e63 beqz a0,800002e4 + 8000012c: fd010113 addi sp,sp,-48 + 80000130: 02813023 sd s0,32(sp) + 80000134: 00913c23 sd s1,24(sp) + 80000138: 01f57793 andi a5,a0,31 + 8000013c: 02113423 sd ra,40(sp) + 80000140: 01213823 sd s2,16(sp) + 80000144: 01313423 sd s3,8(sp) + 80000148: 01413023 sd s4,0(sp) + 8000014c: 00050493 mv s1,a0 + 80000150: 00050413 mv s0,a0 + 80000154: 00000513 li a0,0 + 80000158: 14079a63 bnez a5,800002ac + 8000015c: 27f00713 li a4,639 + 80000160: 00058913 mv s2,a1 + 80000164: 00078513 mv a0,a5 + 80000168: 14b77263 bgeu a4,a1,800002ac + 8000016c: 0074f513 andi a0,s1,7 + 80000170: 00153513 seqz a0,a0 + 80000174: 00060a13 mv s4,a2 + 80000178: 00068993 mv s3,a3 + 8000017c: f35ff0ef jal ra,800000b0 <_assert> + 80000180: 20048793 addi a5,s1,512 + 80000184: 2004b023 sd zero,512(s1) + 80000188: 2144b423 sd s4,520(s1) + 8000018c: 2134b823 sd s3,528(s1) + 80000190: 00043023 sd zero,0(s0) + 80000194: 00840413 addi s0,s0,8 + 80000198: fe879ce3 bne a5,s0,80000190 + 8000019c: fff00793 li a5,-1 + 800001a0: dc090413 addi s0,s2,-576 + 800001a4: 03f79793 slli a5,a5,0x3f + 800001a8: 1287f863 bgeu a5,s0,800002d8 + 800001ac: 00078413 mv s0,a5 + 800001b0: 00100513 li a0,1 + 800001b4: efdff0ef jal ra,800000b0 <_assert> + 800001b8: f8300793 li a5,-125 + 800001bc: 0017d793 srli a5,a5,0x1 + 800001c0: fc040513 addi a0,s0,-64 + 800001c4: 00f53533 sltu a0,a0,a5 + 800001c8: ee9ff0ef jal ra,800000b0 <_assert> + 800001cc: 01f4f513 andi a0,s1,31 + 800001d0: 00153513 seqz a0,a0 + 800001d4: eddff0ef jal ra,800000b0 <_assert> + 800001d8: 00100513 li a0,1 + 800001dc: 2404b023 sd zero,576(s1) + 800001e0: 2404b423 sd zero,584(s1) + 800001e4: 2484b823 sd s0,592(s1) + 800001e8: 24048c23 sb zero,600(s1) + 800001ec: 2604b023 sd zero,608(s1) + 800001f0: 2604b423 sd zero,616(s1) + 800001f4: ebdff0ef jal ra,800000b0 <_assert> + 800001f8: 00100513 li a0,1 + 800001fc: eb5ff0ef jal ra,800000b0 <_assert> + 80000200: 2504b503 ld a0,592(s1) + 80000204: 24048a13 addi s4,s1,576 + 80000208: 04053513 sltiu a0,a0,64 + 8000020c: 00154513 xori a0,a0,1 + 80000210: 00157513 andi a0,a0,1 + 80000214: e9dff0ef jal ra,800000b0 <_assert> + 80000218: 2504b503 ld a0,592(s1) + 8000021c: 03f57513 andi a0,a0,63 + 80000220: 00153513 seqz a0,a0 + 80000224: e8dff0ef jal ra,800000b0 <_assert> + 80000228: 2504b703 ld a4,592(s1) + 8000022c: 00100793 li a5,1 + 80000230: 00675713 srli a4,a4,0x6 + 80000234: 0ae7fc63 bgeu a5,a4,800002ec + 80000238: 00000793 li a5,0 + 8000023c: 00100693 li a3,1 + 80000240: 0017879b addiw a5,a5,1 + 80000244: 00175713 srli a4,a4,0x1 + 80000248: 0ff7f793 andi a5,a5,255 + 8000024c: fed71ae3 bne a4,a3,80000240 + 80000250: 00078993 mv s3,a5 + 80000254: 0407b513 sltiu a0,a5,64 + 80000258: 00f71933 sll s2,a4,a5 + 8000025c: e55ff0ef jal ra,800000b0 <_assert> + 80000260: 00399793 slli a5,s3,0x3 + 80000264: 00f487b3 add a5,s1,a5 + 80000268: 0007b703 ld a4,0(a5) + 8000026c: 2604b423 sd zero,616(s1) + 80000270: 26e4b023 sd a4,608(s1) + 80000274: 00070463 beqz a4,8000027c + 80000278: 03473423 sd s4,40(a4) + 8000027c: 0147b023 sd s4,0(a5) + 80000280: 2004b503 ld a0,512(s1) + 80000284: 00a96533 or a0,s2,a0 + 80000288: 20a4b023 sd a0,512(s1) + 8000028c: 00a03533 snez a0,a0 + 80000290: e21ff0ef jal ra,800000b0 <_assert> + 80000294: 00048513 mv a0,s1 + 80000298: 2084bc23 sd s0,536(s1) + 8000029c: 2204b023 sd zero,544(s1) + 800002a0: 2204b423 sd zero,552(s1) + 800002a4: 2204b823 sd zero,560(s1) + 800002a8: 2204bc23 sd zero,568(s1) + 800002ac: 02813083 ld ra,40(sp) + 800002b0: 02013403 ld s0,32(sp) + 800002b4: 01813483 ld s1,24(sp) + 800002b8: 01013903 ld s2,16(sp) + 800002bc: 00813983 ld s3,8(sp) + 800002c0: 00013a03 ld s4,0(sp) + 800002c4: 03010113 addi sp,sp,48 + 800002c8: 00008067 ret + 800002cc: 00100513 li a0,1 + 800002d0: fff40413 addi s0,s0,-1 + 800002d4: dddff0ef jal ra,800000b0 <_assert> + 800002d8: 03f47793 andi a5,s0,63 + 800002dc: fe0798e3 bnez a5,800002cc + 800002e0: ed1ff06f j 800001b0 + 800002e4: 00000513 li a0,0 + 800002e8: 00008067 ret + 800002ec: 00100913 li s2,1 + 800002f0: 00000993 li s3,0 + 800002f4: 00100513 li a0,1 + 800002f8: f65ff06f j 8000025c diff --git a/bin/non-output/cpu-tests/goldbach-cpu-tests.elf b/bin/non-output/cpu-tests/goldbach-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..e512cb85cc6670ea5582ab748bbcc860fd12b4f4 GIT binary patch literal 43288 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 CNmSba literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/goldbach-cpu-tests.txt b/bin/non-output/cpu-tests/goldbach-cpu-tests.txt new file mode 100755 index 0000000..e5ad2d5 --- /dev/null +++ b/bin/non-output/cpu-tests/goldbach-cpu-tests.txt @@ -0,0 +1,340 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/goldbach-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 17c000ef jal ra,80000188 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 140000ef jal ra,80000164 + +0000000080000028 : + 80000028: 00200793 li a5,2 + 8000002c: 0ea7d263 bge a5,a0,80000110 + 80000030: fc010113 addi sp,sp,-64 + 80000034: 02813823 sd s0,48(sp) + 80000038: 03213023 sd s2,32(sp) + 8000003c: 01413823 sd s4,16(sp) + 80000040: 01513423 sd s5,8(sp) + 80000044: 01613023 sd s6,0(sp) + 80000048: 02113c23 sd ra,56(sp) + 8000004c: 02913423 sd s1,40(sp) + 80000050: 01313c23 sd s3,24(sp) + 80000054: 00050a93 mv s5,a0 + 80000058: ffe5091b addiw s2,a0,-2 + 8000005c: 00200413 li s0,2 + 80000060: 00200a13 li s4,2 + 80000064: 00100b13 li s6,1 + 80000068: 03440863 beq s0,s4,80000098 + 8000006c: 00147793 andi a5,s0,1 + 80000070: 08078663 beqz a5,800000fc + 80000074: 00200493 li s1,2 + 80000078: 0100006f j 80000088 + 8000007c: 1f4000ef jal ra,80000270 <__moddi3> + 80000080: 0005051b sext.w a0,a0 + 80000084: 06050c63 beqz a0,800000fc + 80000088: 0014849b addiw s1,s1,1 + 8000008c: 00040513 mv a0,s0 + 80000090: 00048593 mv a1,s1 + 80000094: fe8494e3 bne s1,s0,8000007c + 80000098: 0009099b sext.w s3,s2 + 8000009c: 07690063 beq s2,s6,800000fc + 800000a0: 03498863 beq s3,s4,800000d0 + 800000a4: 00197793 andi a5,s2,1 + 800000a8: 04078a63 beqz a5,800000fc + 800000ac: 00200493 li s1,2 + 800000b0: 0100006f j 800000c0 + 800000b4: 1bc000ef jal ra,80000270 <__moddi3> + 800000b8: 0005051b sext.w a0,a0 + 800000bc: 04050063 beqz a0,800000fc + 800000c0: 0014849b addiw s1,s1,1 + 800000c4: 00098513 mv a0,s3 + 800000c8: 00048593 mv a1,s1 + 800000cc: fe9994e3 bne s3,s1,800000b4 + 800000d0: 00100513 li a0,1 + 800000d4: 03813083 ld ra,56(sp) + 800000d8: 03013403 ld s0,48(sp) + 800000dc: 02813483 ld s1,40(sp) + 800000e0: 02013903 ld s2,32(sp) + 800000e4: 01813983 ld s3,24(sp) + 800000e8: 01013a03 ld s4,16(sp) + 800000ec: 00813a83 ld s5,8(sp) + 800000f0: 00013b03 ld s6,0(sp) + 800000f4: 04010113 addi sp,sp,64 + 800000f8: 00008067 ret + 800000fc: 0014041b addiw s0,s0,1 + 80000100: fff9091b addiw s2,s2,-1 + 80000104: f68a92e3 bne s5,s0,80000068 + 80000108: 00000513 li a0,0 + 8000010c: fc9ff06f j 800000d4 + 80000110: 00000513 li a0,0 + 80000114: 00008067 ret + +0000000080000118
: + 80000118: fe010113 addi sp,sp,-32 + 8000011c: 00813823 sd s0,16(sp) + 80000120: 00913423 sd s1,8(sp) + 80000124: 00113c23 sd ra,24(sp) + 80000128: 00400413 li s0,4 + 8000012c: 02000493 li s1,32 + 80000130: 00040513 mv a0,s0 + 80000134: ef5ff0ef jal ra,80000028 + 80000138: fff50513 addi a0,a0,-1 + 8000013c: 0024041b addiw s0,s0,2 + 80000140: 00153513 seqz a0,a0 + 80000144: ecdff0ef jal ra,80000010 + 80000148: fe9414e3 bne s0,s1,80000130 + 8000014c: 01813083 ld ra,24(sp) + 80000150: 01013403 ld s0,16(sp) + 80000154: 00813483 ld s1,8(sp) + 80000158: 00000513 li a0,0 + 8000015c: 02010113 addi sp,sp,32 + 80000160: 00008067 ret + +0000000080000164 : + 80000164: 00050513 mv a0,a0 + 80000168: 0000006b 0x6b + 8000016c: 0000006f j 8000016c + +0000000080000170 <_assert>: + 80000170: 00051a63 bnez a0,80000184 <_assert+0x14> + 80000174: 00100793 li a5,1 + 80000178: 00078513 mv a0,a5 + 8000017c: 0000006b 0x6b + 80000180: 0000006f j 80000180 <_assert+0x10> + 80000184: 00008067 ret + +0000000080000188 <_trm_init>: + 80000188: ff010113 addi sp,sp,-16 + 8000018c: 00113423 sd ra,8(sp) + 80000190: 11c000ef jal ra,800002ac + 80000194: 00000517 auipc a0,0x0 + 80000198: 32c50513 addi a0,a0,812 # 800004c0 + 8000019c: f7dff0ef jal ra,80000118
+ 800001a0: 00050513 mv a0,a0 + 800001a4: 0000006b 0x6b + 800001a8: 0000006f j 800001a8 <_trm_init+0x20> + +00000000800001ac <__udivsi3>: + 800001ac: 02051513 slli a0,a0,0x20 + 800001b0: 02059593 slli a1,a1,0x20 + 800001b4: 00008293 mv t0,ra + 800001b8: 03c000ef jal ra,800001f4 <__udivdi3> + 800001bc: 0005051b sext.w a0,a0 + 800001c0: 00028067 jr t0 + +00000000800001c4 <__umodsi3>: + 800001c4: 02051513 slli a0,a0,0x20 + 800001c8: 02059593 slli a1,a1,0x20 + 800001cc: 02055513 srli a0,a0,0x20 + 800001d0: 0205d593 srli a1,a1,0x20 + 800001d4: 00008293 mv t0,ra + 800001d8: 01c000ef jal ra,800001f4 <__udivdi3> + 800001dc: 0005851b sext.w a0,a1 + 800001e0: 00028067 jr t0 + +00000000800001e4 <__divsi3>: + 800001e4: fff00293 li t0,-1 + 800001e8: 0a558c63 beq a1,t0,800002a0 <__moddi3+0x30> + +00000000800001ec <__divdi3>: + 800001ec: 06054063 bltz a0,8000024c <__umoddi3+0x10> + 800001f0: 0605c663 bltz a1,8000025c <__umoddi3+0x20> + +00000000800001f4 <__udivdi3>: + 800001f4: 00058613 mv a2,a1 + 800001f8: 00050593 mv a1,a0 + 800001fc: fff00513 li a0,-1 + 80000200: 02060c63 beqz a2,80000238 <__udivdi3+0x44> + 80000204: 00100693 li a3,1 + 80000208: 00b67a63 bgeu a2,a1,8000021c <__udivdi3+0x28> + 8000020c: 00c05863 blez a2,8000021c <__udivdi3+0x28> + 80000210: 00161613 slli a2,a2,0x1 + 80000214: 00169693 slli a3,a3,0x1 + 80000218: feb66ae3 bltu a2,a1,8000020c <__udivdi3+0x18> + 8000021c: 00000513 li a0,0 + 80000220: 00c5e663 bltu a1,a2,8000022c <__udivdi3+0x38> + 80000224: 40c585b3 sub a1,a1,a2 + 80000228: 00d56533 or a0,a0,a3 + 8000022c: 0016d693 srli a3,a3,0x1 + 80000230: 00165613 srli a2,a2,0x1 + 80000234: fe0696e3 bnez a3,80000220 <__udivdi3+0x2c> + 80000238: 00008067 ret + +000000008000023c <__umoddi3>: + 8000023c: 00008293 mv t0,ra + 80000240: fb5ff0ef jal ra,800001f4 <__udivdi3> + 80000244: 00058513 mv a0,a1 + 80000248: 00028067 jr t0 + 8000024c: 40a00533 neg a0,a0 + 80000250: 00b04863 bgtz a1,80000260 <__umoddi3+0x24> + 80000254: 40b005b3 neg a1,a1 + 80000258: f9dff06f j 800001f4 <__udivdi3> + 8000025c: 40b005b3 neg a1,a1 + 80000260: 00008293 mv t0,ra + 80000264: f91ff0ef jal ra,800001f4 <__udivdi3> + 80000268: 40a00533 neg a0,a0 + 8000026c: 00028067 jr t0 + +0000000080000270 <__moddi3>: + 80000270: 00008293 mv t0,ra + 80000274: 0005ca63 bltz a1,80000288 <__moddi3+0x18> + 80000278: 00054c63 bltz a0,80000290 <__moddi3+0x20> + 8000027c: f79ff0ef jal ra,800001f4 <__udivdi3> + 80000280: 00058513 mv a0,a1 + 80000284: 00028067 jr t0 + 80000288: 40b005b3 neg a1,a1 + 8000028c: fe0558e3 bgez a0,8000027c <__moddi3+0xc> + 80000290: 40a00533 neg a0,a0 + 80000294: f61ff0ef jal ra,800001f4 <__udivdi3> + 80000298: 40b00533 neg a0,a1 + 8000029c: 00028067 jr t0 + 800002a0: 01f29293 slli t0,t0,0x1f + 800002a4: f45514e3 bne a0,t0,800001ec <__divdi3> + 800002a8: 00008067 ret + +00000000800002ac : + 800002ac: 00000797 auipc a5,0x0 + 800002b0: 21c78793 addi a5,a5,540 # 800004c8 + 800002b4: 0007b503 ld a0,0(a5) + 800002b8: 0087b583 ld a1,8(a5) + 800002bc: ff010113 addi sp,sp,-16 + 800002c0: 00000693 li a3,0 + 800002c4: 00000613 li a2,0 + 800002c8: 40a585b3 sub a1,a1,a0 + 800002cc: 00113423 sd ra,8(sp) + 800002d0: 018000ef jal ra,800002e8 + 800002d4: 00813083 ld ra,8(sp) + 800002d8: 00000797 auipc a5,0x0 + 800002dc: 20a7b023 sd a0,512(a5) # 800004d8 + 800002e0: 01010113 addi sp,sp,16 + 800002e4: 00008067 ret + +00000000800002e8 : + 800002e8: 1a050e63 beqz a0,800004a4 + 800002ec: fd010113 addi sp,sp,-48 + 800002f0: 02813023 sd s0,32(sp) + 800002f4: 00913c23 sd s1,24(sp) + 800002f8: 01f57793 andi a5,a0,31 + 800002fc: 02113423 sd ra,40(sp) + 80000300: 01213823 sd s2,16(sp) + 80000304: 01313423 sd s3,8(sp) + 80000308: 01413023 sd s4,0(sp) + 8000030c: 00050493 mv s1,a0 + 80000310: 00050413 mv s0,a0 + 80000314: 00000513 li a0,0 + 80000318: 14079a63 bnez a5,8000046c + 8000031c: 27f00713 li a4,639 + 80000320: 00058913 mv s2,a1 + 80000324: 00078513 mv a0,a5 + 80000328: 14b77263 bgeu a4,a1,8000046c + 8000032c: 0074f513 andi a0,s1,7 + 80000330: 00153513 seqz a0,a0 + 80000334: 00060a13 mv s4,a2 + 80000338: 00068993 mv s3,a3 + 8000033c: e35ff0ef jal ra,80000170 <_assert> + 80000340: 20048793 addi a5,s1,512 + 80000344: 2004b023 sd zero,512(s1) + 80000348: 2144b423 sd s4,520(s1) + 8000034c: 2134b823 sd s3,528(s1) + 80000350: 00043023 sd zero,0(s0) + 80000354: 00840413 addi s0,s0,8 + 80000358: fe879ce3 bne a5,s0,80000350 + 8000035c: fff00793 li a5,-1 + 80000360: dc090413 addi s0,s2,-576 + 80000364: 03f79793 slli a5,a5,0x3f + 80000368: 1287f863 bgeu a5,s0,80000498 + 8000036c: 00078413 mv s0,a5 + 80000370: 00100513 li a0,1 + 80000374: dfdff0ef jal ra,80000170 <_assert> + 80000378: f8300793 li a5,-125 + 8000037c: 0017d793 srli a5,a5,0x1 + 80000380: fc040513 addi a0,s0,-64 + 80000384: 00f53533 sltu a0,a0,a5 + 80000388: de9ff0ef jal ra,80000170 <_assert> + 8000038c: 01f4f513 andi a0,s1,31 + 80000390: 00153513 seqz a0,a0 + 80000394: dddff0ef jal ra,80000170 <_assert> + 80000398: 00100513 li a0,1 + 8000039c: 2404b023 sd zero,576(s1) + 800003a0: 2404b423 sd zero,584(s1) + 800003a4: 2484b823 sd s0,592(s1) + 800003a8: 24048c23 sb zero,600(s1) + 800003ac: 2604b023 sd zero,608(s1) + 800003b0: 2604b423 sd zero,616(s1) + 800003b4: dbdff0ef jal ra,80000170 <_assert> + 800003b8: 00100513 li a0,1 + 800003bc: db5ff0ef jal ra,80000170 <_assert> + 800003c0: 2504b503 ld a0,592(s1) + 800003c4: 24048a13 addi s4,s1,576 + 800003c8: 04053513 sltiu a0,a0,64 + 800003cc: 00154513 xori a0,a0,1 + 800003d0: 00157513 andi a0,a0,1 + 800003d4: d9dff0ef jal ra,80000170 <_assert> + 800003d8: 2504b503 ld a0,592(s1) + 800003dc: 03f57513 andi a0,a0,63 + 800003e0: 00153513 seqz a0,a0 + 800003e4: d8dff0ef jal ra,80000170 <_assert> + 800003e8: 2504b703 ld a4,592(s1) + 800003ec: 00100793 li a5,1 + 800003f0: 00675713 srli a4,a4,0x6 + 800003f4: 0ae7fc63 bgeu a5,a4,800004ac + 800003f8: 00000793 li a5,0 + 800003fc: 00100693 li a3,1 + 80000400: 0017879b addiw a5,a5,1 + 80000404: 00175713 srli a4,a4,0x1 + 80000408: 0ff7f793 andi a5,a5,255 + 8000040c: fed71ae3 bne a4,a3,80000400 + 80000410: 00078993 mv s3,a5 + 80000414: 0407b513 sltiu a0,a5,64 + 80000418: 00f71933 sll s2,a4,a5 + 8000041c: d55ff0ef jal ra,80000170 <_assert> + 80000420: 00399793 slli a5,s3,0x3 + 80000424: 00f487b3 add a5,s1,a5 + 80000428: 0007b703 ld a4,0(a5) + 8000042c: 2604b423 sd zero,616(s1) + 80000430: 26e4b023 sd a4,608(s1) + 80000434: 00070463 beqz a4,8000043c + 80000438: 03473423 sd s4,40(a4) + 8000043c: 0147b023 sd s4,0(a5) + 80000440: 2004b503 ld a0,512(s1) + 80000444: 00a96533 or a0,s2,a0 + 80000448: 20a4b023 sd a0,512(s1) + 8000044c: 00a03533 snez a0,a0 + 80000450: d21ff0ef jal ra,80000170 <_assert> + 80000454: 00048513 mv a0,s1 + 80000458: 2084bc23 sd s0,536(s1) + 8000045c: 2204b023 sd zero,544(s1) + 80000460: 2204b423 sd zero,552(s1) + 80000464: 2204b823 sd zero,560(s1) + 80000468: 2204bc23 sd zero,568(s1) + 8000046c: 02813083 ld ra,40(sp) + 80000470: 02013403 ld s0,32(sp) + 80000474: 01813483 ld s1,24(sp) + 80000478: 01013903 ld s2,16(sp) + 8000047c: 00813983 ld s3,8(sp) + 80000480: 00013a03 ld s4,0(sp) + 80000484: 03010113 addi sp,sp,48 + 80000488: 00008067 ret + 8000048c: 00100513 li a0,1 + 80000490: fff40413 addi s0,s0,-1 + 80000494: cddff0ef jal ra,80000170 <_assert> + 80000498: 03f47793 andi a5,s0,63 + 8000049c: fe0798e3 bnez a5,8000048c + 800004a0: ed1ff06f j 80000370 + 800004a4: 00000513 li a0,0 + 800004a8: 00008067 ret + 800004ac: 00100913 li s2,1 + 800004b0: 00000993 li s3,0 + 800004b4: 00100513 li a0,1 + 800004b8: f65ff06f j 8000041c diff --git a/bin/non-output/cpu-tests/hello-str-cpu-tests.elf b/bin/non-output/cpu-tests/hello-str-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..13942638bc6c9ed225f9d3a7b6bd10bfa9af16dc GIT binary patch literal 74416 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 AF#rGn literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/hello-str-cpu-tests.txt b/bin/non-output/cpu-tests/hello-str-cpu-tests.txt new file mode 100755 index 0000000..27b8946 --- /dev/null +++ b/bin/non-output/cpu-tests/hello-str-cpu-tests.txt @@ -0,0 +1,1410 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/hello-str-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 0000a117 auipc sp,0xa + 80000008: ffc10113 addi sp,sp,-4 # 8000a000 <_end> + 8000000c: 108000ef jal ra,80000114 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 0cc000ef jal ra,800000f0 + +0000000080000028
: + 80000028: ff010113 addi sp,sp,-16 + 8000002c: 00001617 auipc a2,0x1 + 80000030: 51460613 addi a2,a2,1300 # 80001540 <_etext+0x4> + 80000034: 00001597 auipc a1,0x1 + 80000038: 51c58593 addi a1,a1,1308 # 80001550 <_etext+0x14> + 8000003c: 00001517 auipc a0,0x1 + 80000040: 74c50513 addi a0,a0,1868 # 80001788 + 80000044: 00113423 sd ra,8(sp) + 80000048: 1d0010ef jal ra,80001218 + 8000004c: 00001597 auipc a1,0x1 + 80000050: 4f458593 addi a1,a1,1268 # 80001540 <_etext+0x4> + 80000054: 00001517 auipc a0,0x1 + 80000058: 73450513 addi a0,a0,1844 # 80001788 + 8000005c: 0dc000ef jal ra,80000138 + 80000060: 00153513 seqz a0,a0 + 80000064: fadff0ef jal ra,80000010 + 80000068: 00200713 li a4,2 + 8000006c: 00100693 li a3,1 + 80000070: 00100613 li a2,1 + 80000074: 00001597 auipc a1,0x1 + 80000078: 4e458593 addi a1,a1,1252 # 80001558 <_etext+0x1c> + 8000007c: 00001517 auipc a0,0x1 + 80000080: 70c50513 addi a0,a0,1804 # 80001788 + 80000084: 194010ef jal ra,80001218 + 80000088: 00001597 auipc a1,0x1 + 8000008c: 4e058593 addi a1,a1,1248 # 80001568 <_etext+0x2c> + 80000090: 00001517 auipc a0,0x1 + 80000094: 6f850513 addi a0,a0,1784 # 80001788 + 80000098: 0a0000ef jal ra,80000138 + 8000009c: 00153513 seqz a0,a0 + 800000a0: f71ff0ef jal ra,80000010 + 800000a4: 00c00713 li a4,12 + 800000a8: 00a00693 li a3,10 + 800000ac: 00200613 li a2,2 + 800000b0: 00001597 auipc a1,0x1 + 800000b4: 4a858593 addi a1,a1,1192 # 80001558 <_etext+0x1c> + 800000b8: 00001517 auipc a0,0x1 + 800000bc: 6d050513 addi a0,a0,1744 # 80001788 + 800000c0: 158010ef jal ra,80001218 + 800000c4: 00001597 auipc a1,0x1 + 800000c8: 4b458593 addi a1,a1,1204 # 80001578 <_etext+0x3c> + 800000cc: 00001517 auipc a0,0x1 + 800000d0: 6bc50513 addi a0,a0,1724 # 80001788 + 800000d4: 064000ef jal ra,80000138 + 800000d8: 00153513 seqz a0,a0 + 800000dc: f35ff0ef jal ra,80000010 + 800000e0: 00813083 ld ra,8(sp) + 800000e4: 00000513 li a0,0 + 800000e8: 01010113 addi sp,sp,16 + 800000ec: 00008067 ret + +00000000800000f0 : + 800000f0: 00050513 mv a0,a0 + 800000f4: 0000006b 0x6b + 800000f8: 0000006f j 800000f8 + +00000000800000fc <_assert>: + 800000fc: 00051a63 bnez a0,80000110 <_assert+0x14> + 80000100: 00100793 li a5,1 + 80000104: 00078513 mv a0,a5 + 80000108: 0000006b 0x6b + 8000010c: 0000006f j 8000010c <_assert+0x10> + 80000110: 00008067 ret + +0000000080000114 <_trm_init>: + 80000114: ff010113 addi sp,sp,-16 + 80000118: 00113423 sd ra,8(sp) + 8000011c: 044000ef jal ra,80000160 + 80000120: 00001517 auipc a0,0x1 + 80000124: 64850513 addi a0,a0,1608 # 80001768 + 80000128: f01ff0ef jal ra,80000028
+ 8000012c: 00050513 mv a0,a0 + 80000130: 0000006b 0x6b + 80000134: 0000006f j 80000134 <_trm_init+0x20> + +0000000080000138 : + 80000138: 00054783 lbu a5,0(a0) + 8000013c: 00158593 addi a1,a1,1 + 80000140: 00150513 addi a0,a0,1 + 80000144: fff5c703 lbu a4,-1(a1) + 80000148: 00078863 beqz a5,80000158 + 8000014c: fee786e3 beq a5,a4,80000138 + 80000150: 40e7853b subw a0,a5,a4 + 80000154: 00008067 ret + 80000158: 40e0053b negw a0,a4 + 8000015c: 00008067 ret + +0000000080000160 : + 80000160: 00001797 auipc a5,0x1 + 80000164: 61078793 addi a5,a5,1552 # 80001770 + 80000168: 0007b503 ld a0,0(a5) + 8000016c: 0087b583 ld a1,8(a5) + 80000170: ff010113 addi sp,sp,-16 + 80000174: 00000693 li a3,0 + 80000178: 00000613 li a2,0 + 8000017c: 40a585b3 sub a1,a1,a0 + 80000180: 00113423 sd ra,8(sp) + 80000184: 0e4010ef jal ra,80001268 + 80000188: 00813083 ld ra,8(sp) + 8000018c: 00001797 auipc a5,0x1 + 80000190: 5ea7ba23 sd a0,1524(a5) # 80001780 + 80000194: 01010113 addi sp,sp,16 + 80000198: 00008067 ret + +000000008000019c <_out_buffer>: + 8000019c: 00d67663 bgeu a2,a3,800001a8 <_out_buffer+0xc> + 800001a0: 00c585b3 add a1,a1,a2 + 800001a4: 00a58023 sb a0,0(a1) + 800001a8: 00008067 ret + +00000000800001ac <_out_null>: + 800001ac: 00008067 ret + +00000000800001b0 <_ntoa_format>: + 800001b0: fa010113 addi sp,sp,-96 + 800001b4: 07012303 lw t1,112(sp) + 800001b8: 03313c23 sd s3,56(sp) + 800001bc: 03413823 sd s4,48(sp) + 800001c0: 03513423 sd s5,40(sp) + 800001c4: 03613023 sd s6,32(sp) + 800001c8: 01713c23 sd s7,24(sp) + 800001cc: 01813823 sd s8,16(sp) + 800001d0: 01913423 sd s9,8(sp) + 800001d4: 00237e13 andi t3,t1,2 + 800001d8: 01037e93 andi t4,t1,16 + 800001dc: 04113c23 sd ra,88(sp) + 800001e0: 04813823 sd s0,80(sp) + 800001e4: 04913423 sd s1,72(sp) + 800001e8: 05213023 sd s2,64(sp) + 800001ec: 06012f03 lw t5,96(sp) + 800001f0: 06812c03 lw s8,104(sp) + 800001f4: 00050a13 mv s4,a0 + 800001f8: 00058a93 mv s5,a1 + 800001fc: 00060b93 mv s7,a2 + 80000200: 00068b13 mv s6,a3 + 80000204: 00070993 mv s3,a4 + 80000208: 000e0c9b sext.w s9,t3 + 8000020c: 000e8e9b sext.w t4,t4 + 80000210: 060e1c63 bnez t3,80000288 <_ntoa_format+0xd8> + 80000214: 020f1693 slli a3,t5,0x20 + 80000218: 00137513 andi a0,t1,1 + 8000021c: 0206d693 srli a3,a3,0x20 + 80000220: 180c1e63 bnez s8,800003bc <_ntoa_format+0x20c> + 80000224: 02d7f663 bgeu a5,a3,80000250 <_ntoa_format+0xa0> + 80000228: 02000713 li a4,32 + 8000022c: 36e78e63 beq a5,a4,800005a8 <_ntoa_format+0x3f8> + 80000230: 03000613 li a2,48 + 80000234: 02000593 li a1,32 + 80000238: 0080006f j 80000240 <_ntoa_format+0x90> + 8000023c: 00b78a63 beq a5,a1,80000250 <_ntoa_format+0xa0> + 80000240: 00178793 addi a5,a5,1 + 80000244: 00f98733 add a4,s3,a5 + 80000248: fec70fa3 sb a2,-1(a4) + 8000024c: fed7e8e3 bltu a5,a3,8000023c <_ntoa_format+0x8c> + 80000250: 02050c63 beqz a0,80000288 <_ntoa_format+0xd8> + 80000254: 020c1913 slli s2,s8,0x20 + 80000258: 02095913 srli s2,s2,0x20 + 8000025c: 0327f663 bgeu a5,s2,80000288 <_ntoa_format+0xd8> + 80000260: 02000713 li a4,32 + 80000264: 36e78863 beq a5,a4,800005d4 <_ntoa_format+0x424> + 80000268: 03000693 li a3,48 + 8000026c: 02000613 li a2,32 + 80000270: 0080006f j 80000278 <_ntoa_format+0xc8> + 80000274: 16c78463 beq a5,a2,800003dc <_ntoa_format+0x22c> + 80000278: 00178793 addi a5,a5,1 + 8000027c: 00f98733 add a4,s3,a5 + 80000280: fed70fa3 sb a3,-1(a4) + 80000284: ff2798e3 bne a5,s2,80000274 <_ntoa_format+0xc4> + 80000288: 1a0e8663 beqz t4,80000434 <_ntoa_format+0x284> + 8000028c: 40037713 andi a4,t1,1024 + 80000290: 20071463 bnez a4,80000498 <_ntoa_format+0x2e8> + 80000294: 1e079663 bnez a5,80000480 <_ntoa_format+0x2d0> + 80000298: 01000793 li a5,16 + 8000029c: 2af88863 beq a7,a5,8000054c <_ntoa_format+0x39c> + 800002a0: 00200793 li a5,2 + 800002a4: 2ef88a63 beq a7,a5,80000598 <_ntoa_format+0x3e8> + 800002a8: 03000793 li a5,48 + 800002ac: 00f98023 sb a5,0(s3) + 800002b0: 00100793 li a5,1 + 800002b4: 1a080463 beqz a6,8000045c <_ntoa_format+0x2ac> + 800002b8: 00f98733 add a4,s3,a5 + 800002bc: 00178413 addi s0,a5,1 + 800002c0: 02d00793 li a5,45 + 800002c4: 00f70023 sb a5,0(a4) + 800002c8: 00337313 andi t1,t1,3 + 800002cc: 20031263 bnez t1,800004d0 <_ntoa_format+0x320> + 800002d0: 020c1913 slli s2,s8,0x20 + 800002d4: 02095913 srli s2,s2,0x20 + 800002d8: 1f247c63 bgeu s0,s2,800004d0 <_ntoa_format+0x320> + 800002dc: 40890933 sub s2,s2,s0 + 800002e0: 01790933 add s2,s2,s7 + 800002e4: 000b8493 mv s1,s7 + 800002e8: 00048613 mv a2,s1 + 800002ec: 000b0693 mv a3,s6 + 800002f0: 00148493 addi s1,s1,1 + 800002f4: 000a8593 mv a1,s5 + 800002f8: 02000513 li a0,32 + 800002fc: 000a00e7 jalr s4 + 80000300: ff2494e3 bne s1,s2,800002e8 <_ntoa_format+0x138> + 80000304: 02040663 beqz s0,80000330 <_ntoa_format+0x180> + 80000308: 01240933 add s2,s0,s2 + 8000030c: 012984b3 add s1,s3,s2 + 80000310: 00898433 add s0,s3,s0 + 80000314: fff44503 lbu a0,-1(s0) + 80000318: 40848633 sub a2,s1,s0 + 8000031c: 000b0693 mv a3,s6 + 80000320: fff40413 addi s0,s0,-1 + 80000324: 000a8593 mv a1,s5 + 80000328: 000a00e7 jalr s4 + 8000032c: fe8994e3 bne s3,s0,80000314 <_ntoa_format+0x164> + 80000330: 040c8a63 beqz s9,80000384 <_ntoa_format+0x1d4> + 80000334: 020c1c13 slli s8,s8,0x20 + 80000338: 41790433 sub s0,s2,s7 + 8000033c: 020c5c13 srli s8,s8,0x20 + 80000340: 05847263 bgeu s0,s8,80000384 <_ntoa_format+0x1d4> + 80000344: 01740633 add a2,s0,s7 + 80000348: 000b0693 mv a3,s6 + 8000034c: 00140413 addi s0,s0,1 + 80000350: 000a8593 mv a1,s5 + 80000354: 02000513 li a0,32 + 80000358: 000a00e7 jalr s4 + 8000035c: ff8464e3 bltu s0,s8,80000344 <_ntoa_format+0x194> + 80000360: 41790733 sub a4,s2,s7 + 80000364: 00170713 addi a4,a4,1 + 80000368: 00000793 li a5,0 + 8000036c: 00ec6863 bltu s8,a4,8000037c <_ntoa_format+0x1cc> + 80000370: fffb8793 addi a5,s7,-1 + 80000374: 01878c33 add s8,a5,s8 + 80000378: 412c07b3 sub a5,s8,s2 + 8000037c: 00190913 addi s2,s2,1 + 80000380: 00f90933 add s2,s2,a5 + 80000384: 05813083 ld ra,88(sp) + 80000388: 05013403 ld s0,80(sp) + 8000038c: 04813483 ld s1,72(sp) + 80000390: 03813983 ld s3,56(sp) + 80000394: 03013a03 ld s4,48(sp) + 80000398: 02813a83 ld s5,40(sp) + 8000039c: 02013b03 ld s6,32(sp) + 800003a0: 01813b83 ld s7,24(sp) + 800003a4: 01013c03 ld s8,16(sp) + 800003a8: 00813c83 ld s9,8(sp) + 800003ac: 00090513 mv a0,s2 + 800003b0: 04013903 ld s2,64(sp) + 800003b4: 06010113 addi sp,sp,96 + 800003b8: 00008067 ret + 800003bc: 12050863 beqz a0,800004ec <_ntoa_format+0x33c> + 800003c0: 00081663 bnez a6,800003cc <_ntoa_format+0x21c> + 800003c4: 00c37713 andi a4,t1,12 + 800003c8: 00070463 beqz a4,800003d0 <_ntoa_format+0x220> + 800003cc: fffc0c1b addiw s8,s8,-1 + 800003d0: e8d7f2e3 bgeu a5,a3,80000254 <_ntoa_format+0xa4> + 800003d4: 02000713 li a4,32 + 800003d8: e4e79ce3 bne a5,a4,80000230 <_ntoa_format+0x80> + 800003dc: 0e0e8063 beqz t4,800004bc <_ntoa_format+0x30c> + 800003e0: 40037793 andi a5,t1,1024 + 800003e4: 04079c63 bnez a5,8000043c <_ntoa_format+0x28c> + 800003e8: 02000793 li a5,32 + 800003ec: 0aff1063 bne t5,a5,8000048c <_ntoa_format+0x2dc> + 800003f0: 02000793 li a5,32 + 800003f4: 01f00713 li a4,31 + 800003f8: 01000693 li a3,16 + 800003fc: 1ad88c63 beq a7,a3,800005b4 <_ntoa_format+0x404> + 80000400: 00200693 li a3,2 + 80000404: 00070793 mv a5,a4 + 80000408: 00d89e63 bne a7,a3,80000424 <_ntoa_format+0x274> + 8000040c: 00e986b3 add a3,s3,a4 + 80000410: 00170793 addi a5,a4,1 + 80000414: 06200713 li a4,98 + 80000418: 00e68023 sb a4,0(a3) + 8000041c: 02000713 li a4,32 + 80000420: 00e78e63 beq a5,a4,8000043c <_ntoa_format+0x28c> + 80000424: 00f98733 add a4,s3,a5 + 80000428: 03000693 li a3,48 + 8000042c: 00d70023 sb a3,0(a4) + 80000430: 00178793 addi a5,a5,1 + 80000434: 02000713 li a4,32 + 80000438: e6e79ee3 bne a5,a4,800002b4 <_ntoa_format+0x104> + 8000043c: 00337313 andi t1,t1,3 + 80000440: 08031263 bnez t1,800004c4 <_ntoa_format+0x314> + 80000444: 02000413 li s0,32 + 80000448: 020c1913 slli s2,s8,0x20 + 8000044c: 02095913 srli s2,s2,0x20 + 80000450: e92466e3 bltu s0,s2,800002dc <_ntoa_format+0x12c> + 80000454: 000b8913 mv s2,s7 + 80000458: eadff06f j 80000304 <_ntoa_format+0x154> + 8000045c: 00437713 andi a4,t1,4 + 80000460: 06071c63 bnez a4,800004d8 <_ntoa_format+0x328> + 80000464: 00837713 andi a4,t1,8 + 80000468: 0c071863 bnez a4,80000538 <_ntoa_format+0x388> + 8000046c: 00337313 andi t1,t1,3 + 80000470: 00078413 mv s0,a5 + 80000474: fc030ae3 beqz t1,80000448 <_ntoa_format+0x298> + 80000478: 000b8913 mv s2,s7 + 8000047c: e89ff06f j 80000304 <_ntoa_format+0x154> + 80000480: 020f1f13 slli t5,t5,0x20 + 80000484: 020f5f13 srli t5,t5,0x20 + 80000488: 0aff0263 beq t5,a5,8000052c <_ntoa_format+0x37c> + 8000048c: 020c1913 slli s2,s8,0x20 + 80000490: 02095913 srli s2,s2,0x20 + 80000494: 08f90c63 beq s2,a5,8000052c <_ntoa_format+0x37c> + 80000498: 01000713 li a4,16 + 8000049c: 06e88663 beq a7,a4,80000508 <_ntoa_format+0x358> + 800004a0: 00200713 li a4,2 + 800004a4: f6e89ce3 bne a7,a4,8000041c <_ntoa_format+0x26c> + 800004a8: 02000713 li a4,32 + 800004ac: f8e788e3 beq a5,a4,8000043c <_ntoa_format+0x28c> + 800004b0: 00f986b3 add a3,s3,a5 + 800004b4: 00178793 addi a5,a5,1 + 800004b8: f5dff06f j 80000414 <_ntoa_format+0x264> + 800004bc: 00337313 andi t1,t1,3 + 800004c0: 0c030063 beqz t1,80000580 <_ntoa_format+0x3d0> + 800004c4: 000b8913 mv s2,s7 + 800004c8: 02000413 li s0,32 + 800004cc: e3dff06f j 80000308 <_ntoa_format+0x158> + 800004d0: 000b8913 mv s2,s7 + 800004d4: e35ff06f j 80000308 <_ntoa_format+0x158> + 800004d8: 00f98733 add a4,s3,a5 + 800004dc: 00178413 addi s0,a5,1 + 800004e0: 02b00793 li a5,43 + 800004e4: 00f70023 sb a5,0(a4) + 800004e8: de1ff06f j 800002c8 <_ntoa_format+0x118> + 800004ec: d8d7fee3 bgeu a5,a3,80000288 <_ntoa_format+0xd8> + 800004f0: 02000713 li a4,32 + 800004f4: d2e79ee3 bne a5,a4,80000230 <_ntoa_format+0x80> + 800004f8: 0e0e8c63 beqz t4,800005f0 <_ntoa_format+0x440> + 800004fc: 40037793 andi a5,t1,1024 + 80000500: f2079ee3 bnez a5,8000043c <_ntoa_format+0x28c> + 80000504: ee5ff06f j 800003e8 <_ntoa_format+0x238> + 80000508: 02037713 andi a4,t1,32 + 8000050c: 04071c63 bnez a4,80000564 <_ntoa_format+0x3b4> + 80000510: 02000713 li a4,32 + 80000514: f2e784e3 beq a5,a4,8000043c <_ntoa_format+0x28c> + 80000518: 00f98733 add a4,s3,a5 + 8000051c: 00178793 addi a5,a5,1 + 80000520: 07800693 li a3,120 + 80000524: 00d70023 sb a3,0(a4) + 80000528: ef5ff06f j 8000041c <_ntoa_format+0x26c> + 8000052c: fff78713 addi a4,a5,-1 + 80000530: d60704e3 beqz a4,80000298 <_ntoa_format+0xe8> + 80000534: ec5ff06f j 800003f8 <_ntoa_format+0x248> + 80000538: 00f98733 add a4,s3,a5 + 8000053c: 00178413 addi s0,a5,1 + 80000540: 02000793 li a5,32 + 80000544: 00f70023 sb a5,0(a4) + 80000548: d81ff06f j 800002c8 <_ntoa_format+0x118> + 8000054c: 02037793 andi a5,t1,32 + 80000550: 02079c63 bnez a5,80000588 <_ntoa_format+0x3d8> + 80000554: 07800793 li a5,120 + 80000558: 00f98023 sb a5,0(s3) + 8000055c: 00100793 li a5,1 + 80000560: ec5ff06f j 80000424 <_ntoa_format+0x274> + 80000564: 02000713 li a4,32 + 80000568: ece78ae3 beq a5,a4,8000043c <_ntoa_format+0x28c> + 8000056c: 00f98733 add a4,s3,a5 + 80000570: 05800693 li a3,88 + 80000574: 00d70023 sb a3,0(a4) + 80000578: 00178793 addi a5,a5,1 + 8000057c: ea1ff06f j 8000041c <_ntoa_format+0x26c> + 80000580: 02000413 li s0,32 + 80000584: d4dff06f j 800002d0 <_ntoa_format+0x120> + 80000588: 05800793 li a5,88 + 8000058c: 00f98023 sb a5,0(s3) + 80000590: 00100793 li a5,1 + 80000594: e91ff06f j 80000424 <_ntoa_format+0x274> + 80000598: 06200793 li a5,98 + 8000059c: 00f98023 sb a5,0(s3) + 800005a0: 00100793 li a5,1 + 800005a4: e81ff06f j 80000424 <_ntoa_format+0x274> + 800005a8: e2051ae3 bnez a0,800003dc <_ntoa_format+0x22c> + 800005ac: 000c8c13 mv s8,s9 + 800005b0: f49ff06f j 800004f8 <_ntoa_format+0x348> + 800005b4: 02037693 andi a3,t1,32 + 800005b8: ffe78713 addi a4,a5,-2 + 800005bc: 00069863 bnez a3,800005cc <_ntoa_format+0x41c> + 800005c0: 00e98733 add a4,s3,a4 + 800005c4: fff78793 addi a5,a5,-1 + 800005c8: f59ff06f j 80000520 <_ntoa_format+0x370> + 800005cc: 00070793 mv a5,a4 + 800005d0: f9dff06f j 8000056c <_ntoa_format+0x3bc> + 800005d4: 000e8e63 beqz t4,800005f0 <_ntoa_format+0x440> + 800005d8: 40037713 andi a4,t1,1024 + 800005dc: 00071e63 bnez a4,800005f8 <_ntoa_format+0x448> + 800005e0: 02ff0e63 beq t5,a5,8000061c <_ntoa_format+0x46c> + 800005e4: e4fc1ce3 bne s8,a5,8000043c <_ntoa_format+0x28c> + 800005e8: 01f00713 li a4,31 + 800005ec: e0dff06f j 800003f8 <_ntoa_format+0x248> + 800005f0: 02000413 li s0,32 + 800005f4: cd5ff06f j 800002c8 <_ntoa_format+0x118> + 800005f8: 01000793 li a5,16 + 800005fc: 02f88c63 beq a7,a5,80000634 <_ntoa_format+0x484> + 80000600: 00200793 li a5,2 + 80000604: e2f88ce3 beq a7,a5,8000043c <_ntoa_format+0x28c> + 80000608: 00337313 andi t1,t1,3 + 8000060c: ea031ce3 bnez t1,800004c4 <_ntoa_format+0x314> + 80000610: 02000413 li s0,32 + 80000614: cd2464e3 bltu s0,s2,800002dc <_ntoa_format+0x12c> + 80000618: e3dff06f j 80000454 <_ntoa_format+0x2a4> + 8000061c: 01000713 li a4,16 + 80000620: f8e88ae3 beq a7,a4,800005b4 <_ntoa_format+0x404> + 80000624: 00200793 li a5,2 + 80000628: 00f88c63 beq a7,a5,80000640 <_ntoa_format+0x490> + 8000062c: 01f00793 li a5,31 + 80000630: df5ff06f j 80000424 <_ntoa_format+0x274> + 80000634: 02037793 andi a5,t1,32 + 80000638: fc0788e3 beqz a5,80000608 <_ntoa_format+0x458> + 8000063c: e01ff06f j 8000043c <_ntoa_format+0x28c> + 80000640: 01f00713 li a4,31 + 80000644: dc9ff06f j 8000040c <_ntoa_format+0x25c> + +0000000080000648 <_ntoa_long>: + 80000648: f4010113 addi sp,sp,-192 + 8000064c: 09413823 sd s4,144(sp) + 80000650: 09513423 sd s5,136(sp) + 80000654: 09613023 sd s6,128(sp) + 80000658: 07713c23 sd s7,120(sp) + 8000065c: 07813823 sd s8,112(sp) + 80000660: 07913423 sd s9,104(sp) + 80000664: 05b13c23 sd s11,88(sp) + 80000668: 0a113c23 sd ra,184(sp) + 8000066c: 0a813823 sd s0,176(sp) + 80000670: 0a913423 sd s1,168(sp) + 80000674: 0b213023 sd s2,160(sp) + 80000678: 09313c23 sd s3,152(sp) + 8000067c: 07a13023 sd s10,96(sp) + 80000680: 02a13023 sd a0,32(sp) + 80000684: 03113423 sd a7,40(sp) + 80000688: 0c812a03 lw s4,200(sp) + 8000068c: 00070d93 mv s11,a4 + 80000690: 00058b13 mv s6,a1 + 80000694: 00060b93 mv s7,a2 + 80000698: 00068c13 mv s8,a3 + 8000069c: 00078c93 mv s9,a5 + 800006a0: 00080a93 mv s5,a6 + 800006a4: 00071863 bnez a4,800006b4 <_ntoa_long+0x6c> + 800006a8: 400a7793 andi a5,s4,1024 + 800006ac: fefa7a13 andi s4,s4,-17 + 800006b0: 0e079663 bnez a5,8000079c <_ntoa_long+0x154> + 800006b4: 020a7793 andi a5,s4,32 + 800006b8: 06100413 li s0,97 + 800006bc: 0c079c63 bnez a5,80000794 <_ntoa_long+0x14c> + 800006c0: 00000d13 li s10,0 + 800006c4: 03010493 addi s1,sp,48 + 800006c8: 00900913 li s2,9 + 800006cc: ff64041b addiw s0,s0,-10 + 800006d0: 02000993 li s3,32 + 800006d4: 00c0006f j 800006e0 <_ntoa_long+0x98> + 800006d8: 053d0463 beq s10,s3,80000720 <_ntoa_long+0xd8> + 800006dc: 00050d93 mv s11,a0 + 800006e0: 000a8593 mv a1,s5 + 800006e4: 000d8513 mv a0,s11 + 800006e8: 5e5000ef jal ra,800014cc <__umoddi3> + 800006ec: 0ff57313 andi t1,a0,255 + 800006f0: 0303071b addiw a4,t1,48 + 800006f4: 0064033b addw t1,s0,t1 + 800006f8: 0ff37313 andi t1,t1,255 + 800006fc: 00a96463 bltu s2,a0,80000704 <_ntoa_long+0xbc> + 80000700: 0ff77313 andi t1,a4,255 + 80000704: 001d0d13 addi s10,s10,1 + 80000708: 01a48733 add a4,s1,s10 + 8000070c: 000d8513 mv a0,s11 + 80000710: 000a8593 mv a1,s5 + 80000714: fe670fa3 sb t1,-1(a4) + 80000718: 56d000ef jal ra,80001484 <__udivdi3> + 8000071c: fb5dfee3 bgeu s11,s5,800006d8 <_ntoa_long+0x90> + 80000720: 0c012703 lw a4,192(sp) + 80000724: 02813783 ld a5,40(sp) + 80000728: 02013503 ld a0,32(sp) + 8000072c: 01413823 sd s4,16(sp) + 80000730: 00e13423 sd a4,8(sp) + 80000734: 00f13023 sd a5,0(sp) + 80000738: 000a889b sext.w a7,s5 + 8000073c: 000c8813 mv a6,s9 + 80000740: 000d0793 mv a5,s10 + 80000744: 00048713 mv a4,s1 + 80000748: 000c0693 mv a3,s8 + 8000074c: 000b8613 mv a2,s7 + 80000750: 000b0593 mv a1,s6 + 80000754: a5dff0ef jal ra,800001b0 <_ntoa_format> + 80000758: 0b813083 ld ra,184(sp) + 8000075c: 0b013403 ld s0,176(sp) + 80000760: 0a813483 ld s1,168(sp) + 80000764: 0a013903 ld s2,160(sp) + 80000768: 09813983 ld s3,152(sp) + 8000076c: 09013a03 ld s4,144(sp) + 80000770: 08813a83 ld s5,136(sp) + 80000774: 08013b03 ld s6,128(sp) + 80000778: 07813b83 ld s7,120(sp) + 8000077c: 07013c03 ld s8,112(sp) + 80000780: 06813c83 ld s9,104(sp) + 80000784: 06013d03 ld s10,96(sp) + 80000788: 05813d83 ld s11,88(sp) + 8000078c: 0c010113 addi sp,sp,192 + 80000790: 00008067 ret + 80000794: 04100413 li s0,65 + 80000798: f29ff06f j 800006c0 <_ntoa_long+0x78> + 8000079c: 00000d13 li s10,0 + 800007a0: 03010493 addi s1,sp,48 + 800007a4: f7dff06f j 80000720 <_ntoa_long+0xd8> + +00000000800007a8 <_ntoa_long_long>: + 800007a8: f4010113 addi sp,sp,-192 + 800007ac: 09413823 sd s4,144(sp) + 800007b0: 09513423 sd s5,136(sp) + 800007b4: 09613023 sd s6,128(sp) + 800007b8: 07713c23 sd s7,120(sp) + 800007bc: 07813823 sd s8,112(sp) + 800007c0: 07913423 sd s9,104(sp) + 800007c4: 05b13c23 sd s11,88(sp) + 800007c8: 0a113c23 sd ra,184(sp) + 800007cc: 0a813823 sd s0,176(sp) + 800007d0: 0a913423 sd s1,168(sp) + 800007d4: 0b213023 sd s2,160(sp) + 800007d8: 09313c23 sd s3,152(sp) + 800007dc: 07a13023 sd s10,96(sp) + 800007e0: 02a13023 sd a0,32(sp) + 800007e4: 03113423 sd a7,40(sp) + 800007e8: 0c812a03 lw s4,200(sp) + 800007ec: 00070d93 mv s11,a4 + 800007f0: 00058b13 mv s6,a1 + 800007f4: 00060b93 mv s7,a2 + 800007f8: 00068c13 mv s8,a3 + 800007fc: 00078c93 mv s9,a5 + 80000800: 00080a93 mv s5,a6 + 80000804: 00071863 bnez a4,80000814 <_ntoa_long_long+0x6c> + 80000808: 400a7793 andi a5,s4,1024 + 8000080c: fefa7a13 andi s4,s4,-17 + 80000810: 0e079663 bnez a5,800008fc <_ntoa_long_long+0x154> + 80000814: 020a7793 andi a5,s4,32 + 80000818: 06100413 li s0,97 + 8000081c: 0c079c63 bnez a5,800008f4 <_ntoa_long_long+0x14c> + 80000820: 00000d13 li s10,0 + 80000824: 03010493 addi s1,sp,48 + 80000828: 00900913 li s2,9 + 8000082c: ff64041b addiw s0,s0,-10 + 80000830: 02000993 li s3,32 + 80000834: 00c0006f j 80000840 <_ntoa_long_long+0x98> + 80000838: 053d0463 beq s10,s3,80000880 <_ntoa_long_long+0xd8> + 8000083c: 00050d93 mv s11,a0 + 80000840: 000a8593 mv a1,s5 + 80000844: 000d8513 mv a0,s11 + 80000848: 485000ef jal ra,800014cc <__umoddi3> + 8000084c: 0ff57313 andi t1,a0,255 + 80000850: 0303071b addiw a4,t1,48 + 80000854: 0064033b addw t1,s0,t1 + 80000858: 0ff37313 andi t1,t1,255 + 8000085c: 00a96463 bltu s2,a0,80000864 <_ntoa_long_long+0xbc> + 80000860: 0ff77313 andi t1,a4,255 + 80000864: 001d0d13 addi s10,s10,1 + 80000868: 01a48733 add a4,s1,s10 + 8000086c: 000d8513 mv a0,s11 + 80000870: 000a8593 mv a1,s5 + 80000874: fe670fa3 sb t1,-1(a4) + 80000878: 40d000ef jal ra,80001484 <__udivdi3> + 8000087c: fb5dfee3 bgeu s11,s5,80000838 <_ntoa_long_long+0x90> + 80000880: 0c012703 lw a4,192(sp) + 80000884: 02813783 ld a5,40(sp) + 80000888: 02013503 ld a0,32(sp) + 8000088c: 01413823 sd s4,16(sp) + 80000890: 00e13423 sd a4,8(sp) + 80000894: 00f13023 sd a5,0(sp) + 80000898: 000a889b sext.w a7,s5 + 8000089c: 000c8813 mv a6,s9 + 800008a0: 000d0793 mv a5,s10 + 800008a4: 00048713 mv a4,s1 + 800008a8: 000c0693 mv a3,s8 + 800008ac: 000b8613 mv a2,s7 + 800008b0: 000b0593 mv a1,s6 + 800008b4: 8fdff0ef jal ra,800001b0 <_ntoa_format> + 800008b8: 0b813083 ld ra,184(sp) + 800008bc: 0b013403 ld s0,176(sp) + 800008c0: 0a813483 ld s1,168(sp) + 800008c4: 0a013903 ld s2,160(sp) + 800008c8: 09813983 ld s3,152(sp) + 800008cc: 09013a03 ld s4,144(sp) + 800008d0: 08813a83 ld s5,136(sp) + 800008d4: 08013b03 ld s6,128(sp) + 800008d8: 07813b83 ld s7,120(sp) + 800008dc: 07013c03 ld s8,112(sp) + 800008e0: 06813c83 ld s9,104(sp) + 800008e4: 06013d03 ld s10,96(sp) + 800008e8: 05813d83 ld s11,88(sp) + 800008ec: 0c010113 addi sp,sp,192 + 800008f0: 00008067 ret + 800008f4: 04100413 li s0,65 + 800008f8: f29ff06f j 80000820 <_ntoa_long_long+0x78> + 800008fc: 00000d13 li s10,0 + 80000900: 03010493 addi s1,sp,48 + 80000904: f7dff06f j 80000880 <_ntoa_long_long+0xd8> + +0000000080000908 <_vsnprintf>: + 80000908: f6010113 addi sp,sp,-160 + 8000090c: 08913423 sd s1,136(sp) + 80000910: 09213023 sd s2,128(sp) + 80000914: 07313c23 sd s3,120(sp) + 80000918: 05713c23 sd s7,88(sp) + 8000091c: 05813823 sd s8,80(sp) + 80000920: 08113c23 sd ra,152(sp) + 80000924: 08813823 sd s0,144(sp) + 80000928: 07413823 sd s4,112(sp) + 8000092c: 07513423 sd s5,104(sp) + 80000930: 07613023 sd s6,96(sp) + 80000934: 05913423 sd s9,72(sp) + 80000938: 05a13023 sd s10,64(sp) + 8000093c: 03b13c23 sd s11,56(sp) + 80000940: 00058493 mv s1,a1 + 80000944: 00060c13 mv s8,a2 + 80000948: 00068b93 mv s7,a3 + 8000094c: 00070993 mv s3,a4 + 80000950: 00000917 auipc s2,0x0 + 80000954: 85c90913 addi s2,s2,-1956 # 800001ac <_out_null> + 80000958: 00058463 beqz a1,80000960 <_vsnprintf+0x58> + 8000095c: 00050913 mv s2,a0 + 80000960: 000bc503 lbu a0,0(s7) + 80000964: 00000d13 li s10,0 + 80000968: 66050663 beqz a0,80000fd4 <_vsnprintf+0x6cc> + 8000096c: 000107b7 lui a5,0x10 + 80000970: fff78793 addi a5,a5,-1 # ffff <_entry_offset+0xffff> + 80000974: 02500a13 li s4,37 + 80000978: 00001417 auipc s0,0x1 + 8000097c: c1040413 addi s0,s0,-1008 # 80001588 <_etext+0x4c> + 80000980: 00f13c23 sd a5,24(sp) + 80000984: 0200006f j 800009a4 <_vsnprintf+0x9c> + 80000988: 000d0613 mv a2,s10 + 8000098c: 000c0693 mv a3,s8 + 80000990: 00048593 mv a1,s1 + 80000994: 001d0d13 addi s10,s10,1 + 80000998: 000900e7 jalr s2 + 8000099c: 000bc503 lbu a0,0(s7) + 800009a0: 1c050263 beqz a0,80000b64 <_vsnprintf+0x25c> + 800009a4: 001b8b93 addi s7,s7,1 + 800009a8: ff4510e3 bne a0,s4,80000988 <_vsnprintf+0x80> + 800009ac: 00000593 li a1,0 + 800009b0: 01000813 li a6,16 + 800009b4: 000bc503 lbu a0,0(s7) + 800009b8: 001b8713 addi a4,s7,1 + 800009bc: 00070613 mv a2,a4 + 800009c0: fe05079b addiw a5,a0,-32 + 800009c4: 0ff7f793 andi a5,a5,255 + 800009c8: 00f86c63 bltu a6,a5,800009e0 <_vsnprintf+0xd8> + 800009cc: 00279793 slli a5,a5,0x2 + 800009d0: 008787b3 add a5,a5,s0 + 800009d4: 0007a783 lw a5,0(a5) + 800009d8: 008787b3 add a5,a5,s0 + 800009dc: 00078067 jr a5 + 800009e0: fd05079b addiw a5,a0,-48 + 800009e4: 0ff7f793 andi a5,a5,255 + 800009e8: 00900813 li a6,9 + 800009ec: 0ef87c63 bgeu a6,a5,80000ae4 <_vsnprintf+0x1dc> + 800009f0: 02a00793 li a5,42 + 800009f4: 20f50463 beq a0,a5,80000bfc <_vsnprintf+0x2f4> + 800009f8: 000b8613 mv a2,s7 + 800009fc: 00000d93 li s11,0 + 80000a00: 00070b93 mv s7,a4 + 80000a04: 02e00793 li a5,46 + 80000a08: 00000c93 li s9,0 + 80000a0c: 12f50463 beq a0,a5,80000b34 <_vsnprintf+0x22c> + 80000a10: f985079b addiw a5,a0,-104 + 80000a14: 0ff7f793 andi a5,a5,255 + 80000a18: 01200713 li a4,18 + 80000a1c: 08f76463 bltu a4,a5,80000aa4 <_vsnprintf+0x19c> + 80000a20: 00001717 auipc a4,0x1 + 80000a24: bac70713 addi a4,a4,-1108 # 800015cc <_etext+0x90> + 80000a28: 00279793 slli a5,a5,0x2 + 80000a2c: 00e787b3 add a5,a5,a4 + 80000a30: 0007a783 lw a5,0(a5) + 80000a34: 00e787b3 add a5,a5,a4 + 80000a38: 00078067 jr a5 + 80000a3c: 0015e593 ori a1,a1,1 + 80000a40: 0005859b sext.w a1,a1 + 80000a44: 00070b93 mv s7,a4 + 80000a48: f6dff06f j 800009b4 <_vsnprintf+0xac> + 80000a4c: 0025e593 ori a1,a1,2 + 80000a50: 0005859b sext.w a1,a1 + 80000a54: 00070b93 mv s7,a4 + 80000a58: f5dff06f j 800009b4 <_vsnprintf+0xac> + 80000a5c: 0045e593 ori a1,a1,4 + 80000a60: 0005859b sext.w a1,a1 + 80000a64: 00070b93 mv s7,a4 + 80000a68: f4dff06f j 800009b4 <_vsnprintf+0xac> + 80000a6c: 0105e593 ori a1,a1,16 + 80000a70: 0005859b sext.w a1,a1 + 80000a74: 00070b93 mv s7,a4 + 80000a78: f3dff06f j 800009b4 <_vsnprintf+0xac> + 80000a7c: 0085e593 ori a1,a1,8 + 80000a80: 0005859b sext.w a1,a1 + 80000a84: 00070b93 mv s7,a4 + 80000a88: f2dff06f j 800009b4 <_vsnprintf+0xac> + 80000a8c: 00164503 lbu a0,1(a2) + 80000a90: 06800793 li a5,104 + 80000a94: 52f50663 beq a0,a5,80000fc0 <_vsnprintf+0x6b8> + 80000a98: 0805e593 ori a1,a1,128 + 80000a9c: 0005859b sext.w a1,a1 + 80000aa0: 001b8b93 addi s7,s7,1 + 80000aa4: fdb5079b addiw a5,a0,-37 + 80000aa8: 0ff7f793 andi a5,a5,255 + 80000aac: 05300713 li a4,83 + 80000ab0: ecf76ce3 bltu a4,a5,80000988 <_vsnprintf+0x80> + 80000ab4: 00001717 auipc a4,0x1 + 80000ab8: b6470713 addi a4,a4,-1180 # 80001618 <_etext+0xdc> + 80000abc: 00279793 slli a5,a5,0x2 + 80000ac0: 00e787b3 add a5,a5,a4 + 80000ac4: 0007a783 lw a5,0(a5) + 80000ac8: 00e787b3 add a5,a5,a4 + 80000acc: 00078067 jr a5 + 80000ad0: 00164503 lbu a0,1(a2) + 80000ad4: 1005e593 ori a1,a1,256 + 80000ad8: 0005859b sext.w a1,a1 + 80000adc: 001b8b93 addi s7,s7,1 + 80000ae0: fc5ff06f j 80000aa4 <_vsnprintf+0x19c> + 80000ae4: 00000d93 li s11,0 + 80000ae8: 00900813 li a6,9 + 80000aec: 0080006f j 80000af4 <_vsnprintf+0x1ec> + 80000af0: 00170713 addi a4,a4,1 + 80000af4: 002d979b slliw a5,s11,0x2 + 80000af8: 01b787bb addw a5,a5,s11 + 80000afc: 0017979b slliw a5,a5,0x1 + 80000b00: 00a787bb addw a5,a5,a0 + 80000b04: 00074503 lbu a0,0(a4) + 80000b08: 000b8893 mv a7,s7 + 80000b0c: fd078d9b addiw s11,a5,-48 + 80000b10: fd05061b addiw a2,a0,-48 + 80000b14: 0ff67613 andi a2,a2,255 + 80000b18: 00070b93 mv s7,a4 + 80000b1c: fcc87ae3 bgeu a6,a2,80000af0 <_vsnprintf+0x1e8> + 80000b20: 02e00793 li a5,46 + 80000b24: 00070613 mv a2,a4 + 80000b28: 00288b93 addi s7,a7,2 + 80000b2c: 00000c93 li s9,0 + 80000b30: eef510e3 bne a0,a5,80000a10 <_vsnprintf+0x108> + 80000b34: 00164503 lbu a0,1(a2) + 80000b38: 4005e593 ori a1,a1,1024 + 80000b3c: 00900713 li a4,9 + 80000b40: fd05079b addiw a5,a0,-48 + 80000b44: 0ff7f793 andi a5,a5,255 + 80000b48: 0005859b sext.w a1,a1 + 80000b4c: 06f77c63 bgeu a4,a5,80000bc4 <_vsnprintf+0x2bc> + 80000b50: 02a00793 li a5,42 + 80000b54: 32f50e63 beq a0,a5,80000e90 <_vsnprintf+0x588> + 80000b58: 000b8613 mv a2,s7 + 80000b5c: 001b8b93 addi s7,s7,1 + 80000b60: eb1ff06f j 80000a10 <_vsnprintf+0x108> + 80000b64: 000d041b sext.w s0,s10 + 80000b68: 018d6463 bltu s10,s8,80000b70 <_vsnprintf+0x268> + 80000b6c: fffc0d13 addi s10,s8,-1 + 80000b70: 000c0693 mv a3,s8 + 80000b74: 000d0613 mv a2,s10 + 80000b78: 00048593 mv a1,s1 + 80000b7c: 00000513 li a0,0 + 80000b80: 000900e7 jalr s2 + 80000b84: 09813083 ld ra,152(sp) + 80000b88: 00040513 mv a0,s0 + 80000b8c: 09013403 ld s0,144(sp) + 80000b90: 08813483 ld s1,136(sp) + 80000b94: 08013903 ld s2,128(sp) + 80000b98: 07813983 ld s3,120(sp) + 80000b9c: 07013a03 ld s4,112(sp) + 80000ba0: 06813a83 ld s5,104(sp) + 80000ba4: 06013b03 ld s6,96(sp) + 80000ba8: 05813b83 ld s7,88(sp) + 80000bac: 05013c03 ld s8,80(sp) + 80000bb0: 04813c83 ld s9,72(sp) + 80000bb4: 04013d03 ld s10,64(sp) + 80000bb8: 03813d83 ld s11,56(sp) + 80000bbc: 0a010113 addi sp,sp,160 + 80000bc0: 00008067 ret + 80000bc4: 002c979b slliw a5,s9,0x2 + 80000bc8: 019788bb addw a7,a5,s9 + 80000bcc: 000b8813 mv a6,s7 + 80000bd0: 0018989b slliw a7,a7,0x1 + 80000bd4: 001b8b93 addi s7,s7,1 + 80000bd8: 00a888bb addw a7,a7,a0 + 80000bdc: 000bc503 lbu a0,0(s7) + 80000be0: fd088c9b addiw s9,a7,-48 + 80000be4: fd05079b addiw a5,a0,-48 + 80000be8: 0ff7f793 andi a5,a5,255 + 80000bec: fcf77ce3 bgeu a4,a5,80000bc4 <_vsnprintf+0x2bc> + 80000bf0: 000b8613 mv a2,s7 + 80000bf4: 00280b93 addi s7,a6,2 + 80000bf8: e19ff06f j 80000a10 <_vsnprintf+0x108> + 80000bfc: 0009a783 lw a5,0(s3) + 80000c00: 00898993 addi s3,s3,8 + 80000c04: 00078d9b sext.w s11,a5 + 80000c08: 0007c863 bltz a5,80000c18 <_vsnprintf+0x310> + 80000c0c: 001bc503 lbu a0,1(s7) + 80000c10: 002b8b93 addi s7,s7,2 + 80000c14: df1ff06f j 80000a04 <_vsnprintf+0xfc> + 80000c18: 0025e593 ori a1,a1,2 + 80000c1c: 001bc503 lbu a0,1(s7) + 80000c20: 0005859b sext.w a1,a1 + 80000c24: 40f00dbb negw s11,a5 + 80000c28: 002b8b93 addi s7,s7,2 + 80000c2c: dd9ff06f j 80000a04 <_vsnprintf+0xfc> + 80000c30: 07800793 li a5,120 + 80000c34: 00898a93 addi s5,s3,8 + 80000c38: 56f50063 beq a0,a5,80001198 <_vsnprintf+0x890> + 80000c3c: 05800793 li a5,88 + 80000c40: 28f50463 beq a0,a5,80000ec8 <_vsnprintf+0x5c0> + 80000c44: 06f00793 li a5,111 + 80000c48: 4af50c63 beq a0,a5,80001100 <_vsnprintf+0x7f8> + 80000c4c: 06200793 li a5,98 + 80000c50: 54f50063 beq a0,a5,80001190 <_vsnprintf+0x888> + 80000c54: fef5ff13 andi t5,a1,-17 + 80000c58: 4005f793 andi a5,a1,1024 + 80000c5c: 06900713 li a4,105 + 80000c60: 000f0f1b sext.w t5,t5 + 80000c64: 0007879b sext.w a5,a5 + 80000c68: 5ae51063 bne a0,a4,80001208 <_vsnprintf+0x900> + 80000c6c: 48079663 bnez a5,800010f8 <_vsnprintf+0x7f0> + 80000c70: 2005f593 andi a1,a1,512 + 80000c74: 0005879b sext.w a5,a1 + 80000c78: 00a00813 li a6,10 + 80000c7c: 42079663 bnez a5,800010a8 <_vsnprintf+0x7a0> + 80000c80: 100f7793 andi a5,t5,256 + 80000c84: 000f0613 mv a2,t5 + 80000c88: 4e079063 bnez a5,80001168 <_vsnprintf+0x860> + 80000c8c: 040f7713 andi a4,t5,64 + 80000c90: 0009a783 lw a5,0(s3) + 80000c94: 4a071a63 bnez a4,80001148 <_vsnprintf+0x840> + 80000c98: 08067613 andi a2,a2,128 + 80000c9c: 52060a63 beqz a2,800011d0 <_vsnprintf+0x8c8> + 80000ca0: 0107979b slliw a5,a5,0x10 + 80000ca4: 4107d79b sraiw a5,a5,0x10 + 80000ca8: 40f7d61b sraiw a2,a5,0xf + 80000cac: 00c7c733 xor a4,a5,a2 + 80000cb0: 40c7073b subw a4,a4,a2 + 80000cb4: 03071713 slli a4,a4,0x30 + 80000cb8: 03075713 srli a4,a4,0x30 + 80000cbc: 000d0613 mv a2,s10 + 80000cc0: 01e13423 sd t5,8(sp) + 80000cc4: 01b13023 sd s11,0(sp) + 80000cc8: 000c8893 mv a7,s9 + 80000ccc: 01f7d79b srliw a5,a5,0x1f + 80000cd0: 000c0693 mv a3,s8 + 80000cd4: 00048593 mv a1,s1 + 80000cd8: 00090513 mv a0,s2 + 80000cdc: 96dff0ef jal ra,80000648 <_ntoa_long> + 80000ce0: 00050d13 mv s10,a0 + 80000ce4: 000a8993 mv s3,s5 + 80000ce8: cb5ff06f j 8000099c <_vsnprintf+0x94> + 80000cec: 00164503 lbu a0,1(a2) + 80000cf0: 06c00793 li a5,108 + 80000cf4: def510e3 bne a0,a5,80000ad4 <_vsnprintf+0x1cc> + 80000cf8: 3005e593 ori a1,a1,768 + 80000cfc: 00264503 lbu a0,2(a2) + 80000d00: 0005859b sext.w a1,a1 + 80000d04: 00360b93 addi s7,a2,3 + 80000d08: d9dff06f j 80000aa4 <_vsnprintf+0x19c> + 80000d0c: 00898793 addi a5,s3,8 + 80000d10: 001d0813 addi a6,s10,1 + 80000d14: 0025f593 andi a1,a1,2 + 80000d18: 02f13023 sd a5,32(sp) + 80000d1c: 00080b13 mv s6,a6 + 80000d20: 32058263 beqz a1,80001044 <_vsnprintf+0x73c> + 80000d24: 0009c503 lbu a0,0(s3) + 80000d28: 000c0693 mv a3,s8 + 80000d2c: 000d0613 mv a2,s10 + 80000d30: 00048593 mv a1,s1 + 80000d34: 000900e7 jalr s2 + 80000d38: 00100793 li a5,1 + 80000d3c: 43b7f063 bgeu a5,s11,8000115c <_vsnprintf+0x854> + 80000d40: ffed879b addiw a5,s11,-2 + 80000d44: 02079a93 slli s5,a5,0x20 + 80000d48: 020ada93 srli s5,s5,0x20 + 80000d4c: 002d0d13 addi s10,s10,2 + 80000d50: 015d0cb3 add s9,s10,s5 + 80000d54: 000b0613 mv a2,s6 + 80000d58: 000c0693 mv a3,s8 + 80000d5c: 001b0b13 addi s6,s6,1 + 80000d60: 00048593 mv a1,s1 + 80000d64: 02000513 li a0,32 + 80000d68: 000900e7 jalr s2 + 80000d6c: ff6c94e3 bne s9,s6,80000d54 <_vsnprintf+0x44c> + 80000d70: 02013983 ld s3,32(sp) + 80000d74: 015d0d33 add s10,s10,s5 + 80000d78: c25ff06f j 8000099c <_vsnprintf+0x94> + 80000d7c: 000d0613 mv a2,s10 + 80000d80: 000c0693 mv a3,s8 + 80000d84: 00048593 mv a1,s1 + 80000d88: 02500513 li a0,37 + 80000d8c: 001d0d13 addi s10,s10,1 + 80000d90: 000900e7 jalr s2 + 80000d94: c09ff06f j 8000099c <_vsnprintf+0x94> + 80000d98: 0009ba83 ld s5,0(s3) + 80000d9c: 00898793 addi a5,s3,8 + 80000da0: 02f13023 sd a5,32(sp) + 80000da4: 000ac503 lbu a0,0(s5) + 80000da8: 100c9663 bnez s9,80000eb4 <_vsnprintf+0x5ac> + 80000dac: ffe00793 li a5,-2 + 80000db0: 42050863 beqz a0,800011e0 <_vsnprintf+0x8d8> + 80000db4: 00178693 addi a3,a5,1 + 80000db8: 00da8633 add a2,s5,a3 + 80000dbc: 000a8793 mv a5,s5 + 80000dc0: 0080006f j 80000dc8 <_vsnprintf+0x4c0> + 80000dc4: 1ec78863 beq a5,a2,80000fb4 <_vsnprintf+0x6ac> + 80000dc8: 0017c703 lbu a4,1(a5) + 80000dcc: 00178793 addi a5,a5,1 + 80000dd0: fe071ae3 bnez a4,80000dc4 <_vsnprintf+0x4bc> + 80000dd4: 415787bb subw a5,a5,s5 + 80000dd8: 00f13823 sd a5,16(sp) + 80000ddc: 4005f793 andi a5,a1,1024 + 80000de0: 0007899b sext.w s3,a5 + 80000de4: 00078c63 beqz a5,80000dfc <_vsnprintf+0x4f4> + 80000de8: 01013703 ld a4,16(sp) + 80000dec: 000c879b sext.w a5,s9 + 80000df0: 01977463 bgeu a4,s9,80000df8 <_vsnprintf+0x4f0> + 80000df4: 0007079b sext.w a5,a4 + 80000df8: 00f13823 sd a5,16(sp) + 80000dfc: 0025f593 andi a1,a1,2 + 80000e00: 0005879b sext.w a5,a1 + 80000e04: 02f13423 sd a5,40(sp) + 80000e08: 1c058a63 beqz a1,80000fdc <_vsnprintf+0x6d4> + 80000e0c: 14050863 beqz a0,80000f5c <_vsnprintf+0x654> + 80000e10: 000d0613 mv a2,s10 + 80000e14: 00098863 beqz s3,80000e24 <_vsnprintf+0x51c> + 80000e18: fffc879b addiw a5,s9,-1 + 80000e1c: 120c8863 beqz s9,80000f4c <_vsnprintf+0x644> + 80000e20: 00078c93 mv s9,a5 + 80000e24: 000c0693 mv a3,s8 + 80000e28: 00048593 mv a1,s1 + 80000e2c: 00160b13 addi s6,a2,1 + 80000e30: 000900e7 jalr s2 + 80000e34: 41ab07b3 sub a5,s6,s10 + 80000e38: 00fa87b3 add a5,s5,a5 + 80000e3c: 0007c503 lbu a0,0(a5) + 80000e40: 10050863 beqz a0,80000f50 <_vsnprintf+0x648> + 80000e44: 000b0613 mv a2,s6 + 80000e48: fcdff06f j 80000e14 <_vsnprintf+0x50c> + 80000e4c: 0009b703 ld a4,0(s3) + 80000e50: 0215e593 ori a1,a1,33 + 80000e54: 0005859b sext.w a1,a1 + 80000e58: 01000793 li a5,16 + 80000e5c: 000d0613 mv a2,s10 + 80000e60: 00b13423 sd a1,8(sp) + 80000e64: 00f13023 sd a5,0(sp) + 80000e68: 000c8893 mv a7,s9 + 80000e6c: 01000813 li a6,16 + 80000e70: 00000793 li a5,0 + 80000e74: 000c0693 mv a3,s8 + 80000e78: 00048593 mv a1,s1 + 80000e7c: 00090513 mv a0,s2 + 80000e80: 929ff0ef jal ra,800007a8 <_ntoa_long_long> + 80000e84: 00898993 addi s3,s3,8 + 80000e88: 00050d13 mv s10,a0 + 80000e8c: b11ff06f j 8000099c <_vsnprintf+0x94> + 80000e90: 0009a883 lw a7,0(s3) + 80000e94: 00264503 lbu a0,2(a2) + 80000e98: 00360b93 addi s7,a2,3 + 80000e9c: fff8c793 not a5,a7 + 80000ea0: 43f7d793 srai a5,a5,0x3f + 80000ea4: 00f8fcb3 and s9,a7,a5 + 80000ea8: 00898993 addi s3,s3,8 + 80000eac: 00260613 addi a2,a2,2 + 80000eb0: b61ff06f j 80000a10 <_vsnprintf+0x108> + 80000eb4: 020c9793 slli a5,s9,0x20 + 80000eb8: 0207d793 srli a5,a5,0x20 + 80000ebc: 32050263 beqz a0,800011e0 <_vsnprintf+0x8d8> + 80000ec0: fff78793 addi a5,a5,-1 + 80000ec4: ef1ff06f j 80000db4 <_vsnprintf+0x4ac> + 80000ec8: ff35ff13 andi t5,a1,-13 + 80000ecc: 000f0f1b sext.w t5,t5 + 80000ed0: 4005f793 andi a5,a1,1024 + 80000ed4: 020f6f13 ori t5,t5,32 + 80000ed8: 20078863 beqz a5,800010e8 <_vsnprintf+0x7e0> + 80000edc: 01000813 li a6,16 + 80000ee0: ffef7f13 andi t5,t5,-2 + 80000ee4: 000f0f1b sext.w t5,t5 + 80000ee8: 200f7793 andi a5,t5,512 + 80000eec: 06900713 li a4,105 + 80000ef0: 0007879b sext.w a5,a5 + 80000ef4: d8e504e3 beq a0,a4,80000c7c <_vsnprintf+0x374> + 80000ef8: 06400713 li a4,100 + 80000efc: d8e500e3 beq a0,a4,80000c7c <_vsnprintf+0x374> + 80000f00: 22079663 bnez a5,8000112c <_vsnprintf+0x824> + 80000f04: 100f7793 andi a5,t5,256 + 80000f08: 000f0713 mv a4,t5 + 80000f0c: 2a079463 bnez a5,800011b4 <_vsnprintf+0x8ac> + 80000f10: 040f7793 andi a5,t5,64 + 80000f14: 24079063 bnez a5,80001154 <_vsnprintf+0x84c> + 80000f18: 08077713 andi a4,a4,128 + 80000f1c: 2c070663 beqz a4,800011e8 <_vsnprintf+0x8e0> + 80000f20: 0009a703 lw a4,0(s3) + 80000f24: 01813783 ld a5,24(sp) + 80000f28: 00e7f733 and a4,a5,a4 + 80000f2c: 02071713 slli a4,a4,0x20 + 80000f30: 000d0613 mv a2,s10 + 80000f34: 01e13423 sd t5,8(sp) + 80000f38: 01b13023 sd s11,0(sp) + 80000f3c: 000c8893 mv a7,s9 + 80000f40: 00000793 li a5,0 + 80000f44: 02075713 srli a4,a4,0x20 + 80000f48: d89ff06f j 80000cd0 <_vsnprintf+0x3c8> + 80000f4c: 00060b13 mv s6,a2 + 80000f50: 02813783 ld a5,40(sp) + 80000f54: 04078a63 beqz a5,80000fa8 <_vsnprintf+0x6a0> + 80000f58: 000b0d13 mv s10,s6 + 80000f5c: 01013703 ld a4,16(sp) + 80000f60: 0db77e63 bgeu a4,s11,8000103c <_vsnprintf+0x734> + 80000f64: fffd879b addiw a5,s11,-1 + 80000f68: 40e7873b subw a4,a5,a4 + 80000f6c: 02071713 slli a4,a4,0x20 + 80000f70: 02075713 srli a4,a4,0x20 + 80000f74: 001d0813 addi a6,s10,1 + 80000f78: 01070b33 add s6,a4,a6 + 80000f7c: 0080006f j 80000f84 <_vsnprintf+0x67c> + 80000f80: 00180813 addi a6,a6,1 + 80000f84: 000d0613 mv a2,s10 + 80000f88: 01013823 sd a6,16(sp) + 80000f8c: 000c0693 mv a3,s8 + 80000f90: 00048593 mv a1,s1 + 80000f94: 02000513 li a0,32 + 80000f98: 00080d13 mv s10,a6 + 80000f9c: 000900e7 jalr s2 + 80000fa0: 01013803 ld a6,16(sp) + 80000fa4: fd0b1ee3 bne s6,a6,80000f80 <_vsnprintf+0x678> + 80000fa8: 02013983 ld s3,32(sp) + 80000fac: 000b0d13 mv s10,s6 + 80000fb0: 9edff06f j 8000099c <_vsnprintf+0x94> + 80000fb4: 0006879b sext.w a5,a3 + 80000fb8: 00f13823 sd a5,16(sp) + 80000fbc: e21ff06f j 80000ddc <_vsnprintf+0x4d4> + 80000fc0: 0c05e593 ori a1,a1,192 + 80000fc4: 00264503 lbu a0,2(a2) + 80000fc8: 0005859b sext.w a1,a1 + 80000fcc: 00360b93 addi s7,a2,3 + 80000fd0: ad5ff06f j 80000aa4 <_vsnprintf+0x19c> + 80000fd4: 00000413 li s0,0 + 80000fd8: b91ff06f j 80000b68 <_vsnprintf+0x260> + 80000fdc: 01013703 ld a4,16(sp) + 80000fe0: 0017079b addiw a5,a4,1 + 80000fe4: 21b77c63 bgeu a4,s11,800011fc <_vsnprintf+0x8f4> + 80000fe8: fffd879b addiw a5,s11,-1 + 80000fec: 40e787bb subw a5,a5,a4 + 80000ff0: 02079793 slli a5,a5,0x20 + 80000ff4: 0207d793 srli a5,a5,0x20 + 80000ff8: 001d0813 addi a6,s10,1 + 80000ffc: 01078b33 add s6,a5,a6 + 80001000: 00c0006f j 8000100c <_vsnprintf+0x704> + 80001004: 01013803 ld a6,16(sp) + 80001008: 00180813 addi a6,a6,1 + 8000100c: 000d0613 mv a2,s10 + 80001010: 000c0693 mv a3,s8 + 80001014: 00080d13 mv s10,a6 + 80001018: 01013823 sd a6,16(sp) + 8000101c: 00048593 mv a1,s1 + 80001020: 02000513 li a0,32 + 80001024: 000900e7 jalr s2 + 80001028: fd6d1ee3 bne s10,s6,80001004 <_vsnprintf+0x6fc> + 8000102c: 000ac503 lbu a0,0(s5) + 80001030: 001d879b addiw a5,s11,1 + 80001034: 00f13823 sd a5,16(sp) + 80001038: dc051ce3 bnez a0,80000e10 <_vsnprintf+0x508> + 8000103c: 000d0b13 mv s6,s10 + 80001040: f69ff06f j 80000fa8 <_vsnprintf+0x6a0> + 80001044: 00100793 li a5,1 + 80001048: 1bb7f463 bgeu a5,s11,800011f0 <_vsnprintf+0x8e8> + 8000104c: ffed879b addiw a5,s11,-2 + 80001050: 02079a93 slli s5,a5,0x20 + 80001054: 020ada93 srli s5,s5,0x20 + 80001058: 010a8ab3 add s5,s5,a6 + 8000105c: 00c0006f j 80001068 <_vsnprintf+0x760> + 80001060: 01013803 ld a6,16(sp) + 80001064: 00180813 addi a6,a6,1 + 80001068: 000d0613 mv a2,s10 + 8000106c: 000c0693 mv a3,s8 + 80001070: 00080d13 mv s10,a6 + 80001074: 01013823 sd a6,16(sp) + 80001078: 00048593 mv a1,s1 + 8000107c: 02000513 li a0,32 + 80001080: 000900e7 jalr s2 + 80001084: fdaa9ee3 bne s5,s10,80001060 <_vsnprintf+0x758> + 80001088: 001a8d13 addi s10,s5,1 + 8000108c: 0009c503 lbu a0,0(s3) + 80001090: 000c0693 mv a3,s8 + 80001094: 000a8613 mv a2,s5 + 80001098: 00048593 mv a1,s1 + 8000109c: 000900e7 jalr s2 + 800010a0: 02013983 ld s3,32(sp) + 800010a4: 8f9ff06f j 8000099c <_vsnprintf+0x94> + 800010a8: 0009b783 ld a5,0(s3) + 800010ac: 000d0613 mv a2,s10 + 800010b0: 01e13423 sd t5,8(sp) + 800010b4: 43f7d713 srai a4,a5,0x3f + 800010b8: 00f745b3 xor a1,a4,a5 + 800010bc: 01b13023 sd s11,0(sp) + 800010c0: 000c8893 mv a7,s9 + 800010c4: 03f7d793 srli a5,a5,0x3f + 800010c8: 40e58733 sub a4,a1,a4 + 800010cc: 000c0693 mv a3,s8 + 800010d0: 00048593 mv a1,s1 + 800010d4: 00090513 mv a0,s2 + 800010d8: ed0ff0ef jal ra,800007a8 <_ntoa_long_long> + 800010dc: 00050d13 mv s10,a0 + 800010e0: 000a8993 mv s3,s5 + 800010e4: 8b9ff06f j 8000099c <_vsnprintf+0x94> + 800010e8: 2005f793 andi a5,a1,512 + 800010ec: 0007879b sext.w a5,a5 + 800010f0: 01000813 li a6,16 + 800010f4: e0dff06f j 80000f00 <_vsnprintf+0x5f8> + 800010f8: 00a00813 li a6,10 + 800010fc: de5ff06f j 80000ee0 <_vsnprintf+0x5d8> + 80001100: 00800813 li a6,8 + 80001104: 00058f13 mv t5,a1 + 80001108: 400f7713 andi a4,t5,1024 + 8000110c: 06400613 li a2,100 + 80001110: 000f0793 mv a5,t5 + 80001114: 0007071b sext.w a4,a4 + 80001118: 0ec51c63 bne a0,a2,80001210 <_vsnprintf+0x908> + 8000111c: dc0712e3 bnez a4,80000ee0 <_vsnprintf+0x5d8> + 80001120: 2007f793 andi a5,a5,512 + 80001124: 0007879b sext.w a5,a5 + 80001128: b55ff06f j 80000c7c <_vsnprintf+0x374> + 8000112c: 0009b703 ld a4,0(s3) + 80001130: 000d0613 mv a2,s10 + 80001134: 01e13423 sd t5,8(sp) + 80001138: 01b13023 sd s11,0(sp) + 8000113c: 000c8893 mv a7,s9 + 80001140: 00000793 li a5,0 + 80001144: f89ff06f j 800010cc <_vsnprintf+0x7c4> + 80001148: 0ff7f793 andi a5,a5,255 + 8000114c: 00078713 mv a4,a5 + 80001150: b6dff06f j 80000cbc <_vsnprintf+0x3b4> + 80001154: 0009c703 lbu a4,0(s3) + 80001158: dd5ff06f j 80000f2c <_vsnprintf+0x624> + 8000115c: 02013983 ld s3,32(sp) + 80001160: 000b0d13 mv s10,s6 + 80001164: 839ff06f j 8000099c <_vsnprintf+0x94> + 80001168: 0009b783 ld a5,0(s3) + 8000116c: 000d0613 mv a2,s10 + 80001170: 01e13423 sd t5,8(sp) + 80001174: 43f7d713 srai a4,a5,0x3f + 80001178: 00f745b3 xor a1,a4,a5 + 8000117c: 01b13023 sd s11,0(sp) + 80001180: 000c8893 mv a7,s9 + 80001184: 03f7d793 srli a5,a5,0x3f + 80001188: 40e58733 sub a4,a1,a4 + 8000118c: b45ff06f j 80000cd0 <_vsnprintf+0x3c8> + 80001190: 00200813 li a6,2 + 80001194: f71ff06f j 80001104 <_vsnprintf+0x7fc> + 80001198: 4005f713 andi a4,a1,1024 + 8000119c: 0007071b sext.w a4,a4 + 800011a0: 01000813 li a6,16 + 800011a4: ff35f593 andi a1,a1,-13 + 800011a8: 00058f1b sext.w t5,a1 + 800011ac: d2071ae3 bnez a4,80000ee0 <_vsnprintf+0x5d8> + 800011b0: d39ff06f j 80000ee8 <_vsnprintf+0x5e0> + 800011b4: 0009b703 ld a4,0(s3) + 800011b8: 000d0613 mv a2,s10 + 800011bc: 01e13423 sd t5,8(sp) + 800011c0: 01b13023 sd s11,0(sp) + 800011c4: 000c8893 mv a7,s9 + 800011c8: 00000793 li a5,0 + 800011cc: b05ff06f j 80000cd0 <_vsnprintf+0x3c8> + 800011d0: 41f7d61b sraiw a2,a5,0x1f + 800011d4: 00c7c733 xor a4,a5,a2 + 800011d8: 40c7073b subw a4,a4,a2 + 800011dc: ae1ff06f j 80000cbc <_vsnprintf+0x3b4> + 800011e0: 00013823 sd zero,16(sp) + 800011e4: bf9ff06f j 80000ddc <_vsnprintf+0x4d4> + 800011e8: 0009a703 lw a4,0(s3) + 800011ec: d41ff06f j 80000f2c <_vsnprintf+0x624> + 800011f0: 000d0a93 mv s5,s10 + 800011f4: 00080d13 mv s10,a6 + 800011f8: e95ff06f j 8000108c <_vsnprintf+0x784> + 800011fc: 00f13823 sd a5,16(sp) + 80001200: c00518e3 bnez a0,80000e10 <_vsnprintf+0x508> + 80001204: e39ff06f j 8000103c <_vsnprintf+0x734> + 80001208: 00a00813 li a6,10 + 8000120c: efdff06f j 80001108 <_vsnprintf+0x800> + 80001210: 000f0593 mv a1,t5 + 80001214: f91ff06f j 800011a4 <_vsnprintf+0x89c> + +0000000080001218 : + 80001218: fb010113 addi sp,sp,-80 + 8000121c: 02010313 addi t1,sp,32 + 80001220: 02c13023 sd a2,32(sp) + 80001224: 02d13423 sd a3,40(sp) + 80001228: 02e13823 sd a4,48(sp) + 8000122c: 00058693 mv a3,a1 + 80001230: 00030713 mv a4,t1 + 80001234: 00050593 mv a1,a0 + 80001238: fff00613 li a2,-1 + 8000123c: fffff517 auipc a0,0xfffff + 80001240: f6050513 addi a0,a0,-160 # 8000019c <_out_buffer> + 80001244: 00113c23 sd ra,24(sp) + 80001248: 02f13c23 sd a5,56(sp) + 8000124c: 05013023 sd a6,64(sp) + 80001250: 05113423 sd a7,72(sp) + 80001254: 00613423 sd t1,8(sp) + 80001258: eb0ff0ef jal ra,80000908 <_vsnprintf> + 8000125c: 01813083 ld ra,24(sp) + 80001260: 05010113 addi sp,sp,80 + 80001264: 00008067 ret + +0000000080001268 : + 80001268: 1a050e63 beqz a0,80001424 + 8000126c: fd010113 addi sp,sp,-48 + 80001270: 02813023 sd s0,32(sp) + 80001274: 00913c23 sd s1,24(sp) + 80001278: 01f57793 andi a5,a0,31 + 8000127c: 02113423 sd ra,40(sp) + 80001280: 01213823 sd s2,16(sp) + 80001284: 01313423 sd s3,8(sp) + 80001288: 01413023 sd s4,0(sp) + 8000128c: 00050493 mv s1,a0 + 80001290: 00050413 mv s0,a0 + 80001294: 00000513 li a0,0 + 80001298: 14079a63 bnez a5,800013ec + 8000129c: 27f00713 li a4,639 + 800012a0: 00058913 mv s2,a1 + 800012a4: 00078513 mv a0,a5 + 800012a8: 14b77263 bgeu a4,a1,800013ec + 800012ac: 0074f513 andi a0,s1,7 + 800012b0: 00153513 seqz a0,a0 + 800012b4: 00060a13 mv s4,a2 + 800012b8: 00068993 mv s3,a3 + 800012bc: e41fe0ef jal ra,800000fc <_assert> + 800012c0: 20048793 addi a5,s1,512 + 800012c4: 2004b023 sd zero,512(s1) + 800012c8: 2144b423 sd s4,520(s1) + 800012cc: 2134b823 sd s3,528(s1) + 800012d0: 00043023 sd zero,0(s0) + 800012d4: 00840413 addi s0,s0,8 + 800012d8: fe879ce3 bne a5,s0,800012d0 + 800012dc: fff00793 li a5,-1 + 800012e0: dc090413 addi s0,s2,-576 + 800012e4: 03f79793 slli a5,a5,0x3f + 800012e8: 1287f863 bgeu a5,s0,80001418 + 800012ec: 00078413 mv s0,a5 + 800012f0: 00100513 li a0,1 + 800012f4: e09fe0ef jal ra,800000fc <_assert> + 800012f8: f8300793 li a5,-125 + 800012fc: 0017d793 srli a5,a5,0x1 + 80001300: fc040513 addi a0,s0,-64 + 80001304: 00f53533 sltu a0,a0,a5 + 80001308: df5fe0ef jal ra,800000fc <_assert> + 8000130c: 01f4f513 andi a0,s1,31 + 80001310: 00153513 seqz a0,a0 + 80001314: de9fe0ef jal ra,800000fc <_assert> + 80001318: 00100513 li a0,1 + 8000131c: 2404b023 sd zero,576(s1) + 80001320: 2404b423 sd zero,584(s1) + 80001324: 2484b823 sd s0,592(s1) + 80001328: 24048c23 sb zero,600(s1) + 8000132c: 2604b023 sd zero,608(s1) + 80001330: 2604b423 sd zero,616(s1) + 80001334: dc9fe0ef jal ra,800000fc <_assert> + 80001338: 00100513 li a0,1 + 8000133c: dc1fe0ef jal ra,800000fc <_assert> + 80001340: 2504b503 ld a0,592(s1) + 80001344: 24048a13 addi s4,s1,576 + 80001348: 04053513 sltiu a0,a0,64 + 8000134c: 00154513 xori a0,a0,1 + 80001350: 00157513 andi a0,a0,1 + 80001354: da9fe0ef jal ra,800000fc <_assert> + 80001358: 2504b503 ld a0,592(s1) + 8000135c: 03f57513 andi a0,a0,63 + 80001360: 00153513 seqz a0,a0 + 80001364: d99fe0ef jal ra,800000fc <_assert> + 80001368: 2504b703 ld a4,592(s1) + 8000136c: 00100793 li a5,1 + 80001370: 00675713 srli a4,a4,0x6 + 80001374: 0ae7fc63 bgeu a5,a4,8000142c + 80001378: 00000793 li a5,0 + 8000137c: 00100693 li a3,1 + 80001380: 0017879b addiw a5,a5,1 + 80001384: 00175713 srli a4,a4,0x1 + 80001388: 0ff7f793 andi a5,a5,255 + 8000138c: fed71ae3 bne a4,a3,80001380 + 80001390: 00078993 mv s3,a5 + 80001394: 0407b513 sltiu a0,a5,64 + 80001398: 00f71933 sll s2,a4,a5 + 8000139c: d61fe0ef jal ra,800000fc <_assert> + 800013a0: 00399793 slli a5,s3,0x3 + 800013a4: 00f487b3 add a5,s1,a5 + 800013a8: 0007b703 ld a4,0(a5) + 800013ac: 2604b423 sd zero,616(s1) + 800013b0: 26e4b023 sd a4,608(s1) + 800013b4: 00070463 beqz a4,800013bc + 800013b8: 03473423 sd s4,40(a4) + 800013bc: 0147b023 sd s4,0(a5) + 800013c0: 2004b503 ld a0,512(s1) + 800013c4: 00a96533 or a0,s2,a0 + 800013c8: 20a4b023 sd a0,512(s1) + 800013cc: 00a03533 snez a0,a0 + 800013d0: d2dfe0ef jal ra,800000fc <_assert> + 800013d4: 00048513 mv a0,s1 + 800013d8: 2084bc23 sd s0,536(s1) + 800013dc: 2204b023 sd zero,544(s1) + 800013e0: 2204b423 sd zero,552(s1) + 800013e4: 2204b823 sd zero,560(s1) + 800013e8: 2204bc23 sd zero,568(s1) + 800013ec: 02813083 ld ra,40(sp) + 800013f0: 02013403 ld s0,32(sp) + 800013f4: 01813483 ld s1,24(sp) + 800013f8: 01013903 ld s2,16(sp) + 800013fc: 00813983 ld s3,8(sp) + 80001400: 00013a03 ld s4,0(sp) + 80001404: 03010113 addi sp,sp,48 + 80001408: 00008067 ret + 8000140c: 00100513 li a0,1 + 80001410: fff40413 addi s0,s0,-1 + 80001414: ce9fe0ef jal ra,800000fc <_assert> + 80001418: 03f47793 andi a5,s0,63 + 8000141c: fe0798e3 bnez a5,8000140c + 80001420: ed1ff06f j 800012f0 + 80001424: 00000513 li a0,0 + 80001428: 00008067 ret + 8000142c: 00100913 li s2,1 + 80001430: 00000993 li s3,0 + 80001434: 00100513 li a0,1 + 80001438: f65ff06f j 8000139c + +000000008000143c <__udivsi3>: + 8000143c: 02051513 slli a0,a0,0x20 + 80001440: 02059593 slli a1,a1,0x20 + 80001444: 00008293 mv t0,ra + 80001448: 03c000ef jal ra,80001484 <__udivdi3> + 8000144c: 0005051b sext.w a0,a0 + 80001450: 00028067 jr t0 + +0000000080001454 <__umodsi3>: + 80001454: 02051513 slli a0,a0,0x20 + 80001458: 02059593 slli a1,a1,0x20 + 8000145c: 02055513 srli a0,a0,0x20 + 80001460: 0205d593 srli a1,a1,0x20 + 80001464: 00008293 mv t0,ra + 80001468: 01c000ef jal ra,80001484 <__udivdi3> + 8000146c: 0005851b sext.w a0,a1 + 80001470: 00028067 jr t0 + +0000000080001474 <__divsi3>: + 80001474: fff00293 li t0,-1 + 80001478: 0a558c63 beq a1,t0,80001530 <__moddi3+0x30> + +000000008000147c <__divdi3>: + 8000147c: 06054063 bltz a0,800014dc <__umoddi3+0x10> + 80001480: 0605c663 bltz a1,800014ec <__umoddi3+0x20> + +0000000080001484 <__udivdi3>: + 80001484: 00058613 mv a2,a1 + 80001488: 00050593 mv a1,a0 + 8000148c: fff00513 li a0,-1 + 80001490: 02060c63 beqz a2,800014c8 <__udivdi3+0x44> + 80001494: 00100693 li a3,1 + 80001498: 00b67a63 bgeu a2,a1,800014ac <__udivdi3+0x28> + 8000149c: 00c05863 blez a2,800014ac <__udivdi3+0x28> + 800014a0: 00161613 slli a2,a2,0x1 + 800014a4: 00169693 slli a3,a3,0x1 + 800014a8: feb66ae3 bltu a2,a1,8000149c <__udivdi3+0x18> + 800014ac: 00000513 li a0,0 + 800014b0: 00c5e663 bltu a1,a2,800014bc <__udivdi3+0x38> + 800014b4: 40c585b3 sub a1,a1,a2 + 800014b8: 00d56533 or a0,a0,a3 + 800014bc: 0016d693 srli a3,a3,0x1 + 800014c0: 00165613 srli a2,a2,0x1 + 800014c4: fe0696e3 bnez a3,800014b0 <__udivdi3+0x2c> + 800014c8: 00008067 ret + +00000000800014cc <__umoddi3>: + 800014cc: 00008293 mv t0,ra + 800014d0: fb5ff0ef jal ra,80001484 <__udivdi3> + 800014d4: 00058513 mv a0,a1 + 800014d8: 00028067 jr t0 + 800014dc: 40a00533 neg a0,a0 + 800014e0: 00b04863 bgtz a1,800014f0 <__umoddi3+0x24> + 800014e4: 40b005b3 neg a1,a1 + 800014e8: f9dff06f j 80001484 <__udivdi3> + 800014ec: 40b005b3 neg a1,a1 + 800014f0: 00008293 mv t0,ra + 800014f4: f91ff0ef jal ra,80001484 <__udivdi3> + 800014f8: 40a00533 neg a0,a0 + 800014fc: 00028067 jr t0 + +0000000080001500 <__moddi3>: + 80001500: 00008293 mv t0,ra + 80001504: 0005ca63 bltz a1,80001518 <__moddi3+0x18> + 80001508: 00054c63 bltz a0,80001520 <__moddi3+0x20> + 8000150c: f79ff0ef jal ra,80001484 <__udivdi3> + 80001510: 00058513 mv a0,a1 + 80001514: 00028067 jr t0 + 80001518: 40b005b3 neg a1,a1 + 8000151c: fe0558e3 bgez a0,8000150c <__moddi3+0xc> + 80001520: 40a00533 neg a0,a0 + 80001524: f61ff0ef jal ra,80001484 <__udivdi3> + 80001528: 40b00533 neg a0,a1 + 8000152c: 00028067 jr t0 + 80001530: 01f29293 slli t0,t0,0x1f + 80001534: f45514e3 bne a0,t0,8000147c <__divdi3> + 80001538: 00008067 ret diff --git a/bin/non-output/cpu-tests/if-else-cpu-tests.elf b/bin/non-output/cpu-tests/if-else-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..548e76f8d6ec8de55dab8d562df768bba1ebc142 GIT binary patch literal 42176 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 literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/if-else-cpu-tests.txt b/bin/non-output/cpu-tests/if-else-cpu-tests.txt new file mode 100755 index 0000000..c5d3a97 --- /dev/null +++ b/bin/non-output/cpu-tests/if-else-cpu-tests.txt @@ -0,0 +1,230 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/if-else-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 104000ef jal ra,80000110 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 0c8000ef jal ra,800000ec + +0000000080000028
: + 80000028: fc010113 addi sp,sp,-64 + 8000002c: 02813823 sd s0,48(sp) + 80000030: 02913423 sd s1,40(sp) + 80000034: 03213023 sd s2,32(sp) + 80000038: 01313c23 sd s3,24(sp) + 8000003c: 01413823 sd s4,16(sp) + 80000040: 01513423 sd s5,8(sp) + 80000044: 01613023 sd s6,0(sp) + 80000048: 02113c23 sd ra,56(sp) + 8000004c: 00000417 auipc s0,0x0 + 80000050: 33c40413 addi s0,s0,828 # 80000388 + 80000054: 00000497 auipc s1,0x0 + 80000058: 2fc48493 addi s1,s1,764 # 80000350 + 8000005c: 00000997 auipc s3,0x0 + 80000060: 36498993 addi s3,s3,868 # 800003c0 + 80000064: 1f400913 li s2,500 + 80000068: 12c00a93 li s5,300 + 8000006c: 06400b13 li s6,100 + 80000070: 03200a13 li s4,50 + 80000074: 00042783 lw a5,0(s0) + 80000078: 09600713 li a4,150 + 8000007c: 00440413 addi s0,s0,4 + 80000080: 02f94063 blt s2,a5,800000a0 + 80000084: 00fa2733 slt a4,s4,a5 + 80000088: 40e006b3 neg a3,a4 + 8000008c: 06400713 li a4,100 + 80000090: 00fac863 blt s5,a5,800000a0 + 80000094: 04b00713 li a4,75 + 80000098: 00fb4463 blt s6,a5,800000a0 + 8000009c: 0326f713 andi a4,a3,50 + 800000a0: 0004a503 lw a0,0(s1) + 800000a4: 00448493 addi s1,s1,4 + 800000a8: 40e50533 sub a0,a0,a4 + 800000ac: 00153513 seqz a0,a0 + 800000b0: f61ff0ef jal ra,80000010 + 800000b4: fd3410e3 bne s0,s3,80000074 + 800000b8: 00100513 li a0,1 + 800000bc: f55ff0ef jal ra,80000010 + 800000c0: 03813083 ld ra,56(sp) + 800000c4: 03013403 ld s0,48(sp) + 800000c8: 02813483 ld s1,40(sp) + 800000cc: 02013903 ld s2,32(sp) + 800000d0: 01813983 ld s3,24(sp) + 800000d4: 01013a03 ld s4,16(sp) + 800000d8: 00813a83 ld s5,8(sp) + 800000dc: 00013b03 ld s6,0(sp) + 800000e0: 00000513 li a0,0 + 800000e4: 04010113 addi sp,sp,64 + 800000e8: 00008067 ret + +00000000800000ec : + 800000ec: 00050513 mv a0,a0 + 800000f0: 0000006b 0x6b + 800000f4: 0000006f j 800000f4 + +00000000800000f8 <_assert>: + 800000f8: 00051a63 bnez a0,8000010c <_assert+0x14> + 800000fc: 00100793 li a5,1 + 80000100: 00078513 mv a0,a5 + 80000104: 0000006b 0x6b + 80000108: 0000006f j 80000108 <_assert+0x10> + 8000010c: 00008067 ret + +0000000080000110 <_trm_init>: + 80000110: ff010113 addi sp,sp,-16 + 80000114: 00113423 sd ra,8(sp) + 80000118: 01c000ef jal ra,80000134 + 8000011c: 00000517 auipc a0,0x0 + 80000120: 22c50513 addi a0,a0,556 # 80000348 + 80000124: f05ff0ef jal ra,80000028
+ 80000128: 00050513 mv a0,a0 + 8000012c: 0000006b 0x6b + 80000130: 0000006f j 80000130 <_trm_init+0x20> + +0000000080000134 : + 80000134: 00000797 auipc a5,0x0 + 80000138: 28c78793 addi a5,a5,652 # 800003c0 + 8000013c: 0007b503 ld a0,0(a5) + 80000140: 0087b583 ld a1,8(a5) + 80000144: ff010113 addi sp,sp,-16 + 80000148: 00000693 li a3,0 + 8000014c: 00000613 li a2,0 + 80000150: 40a585b3 sub a1,a1,a0 + 80000154: 00113423 sd ra,8(sp) + 80000158: 018000ef jal ra,80000170 + 8000015c: 00813083 ld ra,8(sp) + 80000160: 00000797 auipc a5,0x0 + 80000164: 26a7b823 sd a0,624(a5) # 800003d0 + 80000168: 01010113 addi sp,sp,16 + 8000016c: 00008067 ret + +0000000080000170 : + 80000170: 1a050e63 beqz a0,8000032c + 80000174: fd010113 addi sp,sp,-48 + 80000178: 02813023 sd s0,32(sp) + 8000017c: 00913c23 sd s1,24(sp) + 80000180: 01f57793 andi a5,a0,31 + 80000184: 02113423 sd ra,40(sp) + 80000188: 01213823 sd s2,16(sp) + 8000018c: 01313423 sd s3,8(sp) + 80000190: 01413023 sd s4,0(sp) + 80000194: 00050493 mv s1,a0 + 80000198: 00050413 mv s0,a0 + 8000019c: 00000513 li a0,0 + 800001a0: 14079a63 bnez a5,800002f4 + 800001a4: 27f00713 li a4,639 + 800001a8: 00058913 mv s2,a1 + 800001ac: 00078513 mv a0,a5 + 800001b0: 14b77263 bgeu a4,a1,800002f4 + 800001b4: 0074f513 andi a0,s1,7 + 800001b8: 00153513 seqz a0,a0 + 800001bc: 00060a13 mv s4,a2 + 800001c0: 00068993 mv s3,a3 + 800001c4: f35ff0ef jal ra,800000f8 <_assert> + 800001c8: 20048793 addi a5,s1,512 + 800001cc: 2004b023 sd zero,512(s1) + 800001d0: 2144b423 sd s4,520(s1) + 800001d4: 2134b823 sd s3,528(s1) + 800001d8: 00043023 sd zero,0(s0) + 800001dc: 00840413 addi s0,s0,8 + 800001e0: fe879ce3 bne a5,s0,800001d8 + 800001e4: fff00793 li a5,-1 + 800001e8: dc090413 addi s0,s2,-576 + 800001ec: 03f79793 slli a5,a5,0x3f + 800001f0: 1287f863 bgeu a5,s0,80000320 + 800001f4: 00078413 mv s0,a5 + 800001f8: 00100513 li a0,1 + 800001fc: efdff0ef jal ra,800000f8 <_assert> + 80000200: f8300793 li a5,-125 + 80000204: 0017d793 srli a5,a5,0x1 + 80000208: fc040513 addi a0,s0,-64 + 8000020c: 00f53533 sltu a0,a0,a5 + 80000210: ee9ff0ef jal ra,800000f8 <_assert> + 80000214: 01f4f513 andi a0,s1,31 + 80000218: 00153513 seqz a0,a0 + 8000021c: eddff0ef jal ra,800000f8 <_assert> + 80000220: 00100513 li a0,1 + 80000224: 2404b023 sd zero,576(s1) + 80000228: 2404b423 sd zero,584(s1) + 8000022c: 2484b823 sd s0,592(s1) + 80000230: 24048c23 sb zero,600(s1) + 80000234: 2604b023 sd zero,608(s1) + 80000238: 2604b423 sd zero,616(s1) + 8000023c: ebdff0ef jal ra,800000f8 <_assert> + 80000240: 00100513 li a0,1 + 80000244: eb5ff0ef jal ra,800000f8 <_assert> + 80000248: 2504b503 ld a0,592(s1) + 8000024c: 24048a13 addi s4,s1,576 + 80000250: 04053513 sltiu a0,a0,64 + 80000254: 00154513 xori a0,a0,1 + 80000258: 00157513 andi a0,a0,1 + 8000025c: e9dff0ef jal ra,800000f8 <_assert> + 80000260: 2504b503 ld a0,592(s1) + 80000264: 03f57513 andi a0,a0,63 + 80000268: 00153513 seqz a0,a0 + 8000026c: e8dff0ef jal ra,800000f8 <_assert> + 80000270: 2504b703 ld a4,592(s1) + 80000274: 00100793 li a5,1 + 80000278: 00675713 srli a4,a4,0x6 + 8000027c: 0ae7fc63 bgeu a5,a4,80000334 + 80000280: 00000793 li a5,0 + 80000284: 00100693 li a3,1 + 80000288: 0017879b addiw a5,a5,1 + 8000028c: 00175713 srli a4,a4,0x1 + 80000290: 0ff7f793 andi a5,a5,255 + 80000294: fed71ae3 bne a4,a3,80000288 + 80000298: 00078993 mv s3,a5 + 8000029c: 0407b513 sltiu a0,a5,64 + 800002a0: 00f71933 sll s2,a4,a5 + 800002a4: e55ff0ef jal ra,800000f8 <_assert> + 800002a8: 00399793 slli a5,s3,0x3 + 800002ac: 00f487b3 add a5,s1,a5 + 800002b0: 0007b703 ld a4,0(a5) + 800002b4: 2604b423 sd zero,616(s1) + 800002b8: 26e4b023 sd a4,608(s1) + 800002bc: 00070463 beqz a4,800002c4 + 800002c0: 03473423 sd s4,40(a4) + 800002c4: 0147b023 sd s4,0(a5) + 800002c8: 2004b503 ld a0,512(s1) + 800002cc: 00a96533 or a0,s2,a0 + 800002d0: 20a4b023 sd a0,512(s1) + 800002d4: 00a03533 snez a0,a0 + 800002d8: e21ff0ef jal ra,800000f8 <_assert> + 800002dc: 00048513 mv a0,s1 + 800002e0: 2084bc23 sd s0,536(s1) + 800002e4: 2204b023 sd zero,544(s1) + 800002e8: 2204b423 sd zero,552(s1) + 800002ec: 2204b823 sd zero,560(s1) + 800002f0: 2204bc23 sd zero,568(s1) + 800002f4: 02813083 ld ra,40(sp) + 800002f8: 02013403 ld s0,32(sp) + 800002fc: 01813483 ld s1,24(sp) + 80000300: 01013903 ld s2,16(sp) + 80000304: 00813983 ld s3,8(sp) + 80000308: 00013a03 ld s4,0(sp) + 8000030c: 03010113 addi sp,sp,48 + 80000310: 00008067 ret + 80000314: 00100513 li a0,1 + 80000318: fff40413 addi s0,s0,-1 + 8000031c: dddff0ef jal ra,800000f8 <_assert> + 80000320: 03f47793 andi a5,s0,63 + 80000324: fe0798e3 bnez a5,80000314 + 80000328: ed1ff06f j 800001f8 + 8000032c: 00000513 li a0,0 + 80000330: 00008067 ret + 80000334: 00100913 li s2,1 + 80000338: 00000993 li s3,0 + 8000033c: 00100513 li a0,1 + 80000340: f65ff06f j 800002a4 diff --git a/bin/non-output/cpu-tests/leap-year-cpu-tests.elf b/bin/non-output/cpu-tests/leap-year-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..03219785e42b308ee24ce6c01b6eb84ba6e5bd6d GIT binary patch literal 42296 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 bt*Gqg^;TW1S>E*f)IWTp_1$_n*s=cxmyev* literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/leap-year-cpu-tests.txt b/bin/non-output/cpu-tests/leap-year-cpu-tests.txt new file mode 100755 index 0000000..4cf7bfa --- /dev/null +++ b/bin/non-output/cpu-tests/leap-year-cpu-tests.txt @@ -0,0 +1,299 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/leap-year-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 0e0000ef jal ra,800000ec <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 0a4000ef jal ra,800000c8 + +0000000080000028
: + 80000028: fd010113 addi sp,sp,-48 + 8000002c: 02813023 sd s0,32(sp) + 80000030: 00913c23 sd s1,24(sp) + 80000034: 01313423 sd s3,8(sp) + 80000038: 02113423 sd ra,40(sp) + 8000003c: 01213823 sd s2,16(sp) + 80000040: 00000497 auipc s1,0x0 + 80000044: 3e848493 addi s1,s1,1000 # 80000428 + 80000048: 00000997 auipc s3,0x0 + 8000004c: 5d498993 addi s3,s3,1492 # 8000061c + 80000050: 76200413 li s0,1890 + 80000054: 0004091b sext.w s2,s0 + 80000058: 00347793 andi a5,s0,3 + 8000005c: 06400593 li a1,100 + 80000060: 00090513 mv a0,s2 + 80000064: 00079a63 bnez a5,80000078 + 80000068: 16c000ef jal ra,800001d4 <__moddi3> + 8000006c: 0005079b sext.w a5,a0 + 80000070: 00100513 li a0,1 + 80000074: 00079c63 bnez a5,8000008c + 80000078: 19000593 li a1,400 + 8000007c: 00090513 mv a0,s2 + 80000080: 154000ef jal ra,800001d4 <__moddi3> + 80000084: 0005051b sext.w a0,a0 + 80000088: 00153513 seqz a0,a0 + 8000008c: 0004a783 lw a5,0(s1) + 80000090: 00448493 addi s1,s1,4 + 80000094: 0014041b addiw s0,s0,1 + 80000098: 40a78533 sub a0,a5,a0 + 8000009c: 00153513 seqz a0,a0 + 800000a0: f71ff0ef jal ra,80000010 + 800000a4: fb3498e3 bne s1,s3,80000054 + 800000a8: 02813083 ld ra,40(sp) + 800000ac: 02013403 ld s0,32(sp) + 800000b0: 01813483 ld s1,24(sp) + 800000b4: 01013903 ld s2,16(sp) + 800000b8: 00813983 ld s3,8(sp) + 800000bc: 00000513 li a0,0 + 800000c0: 03010113 addi sp,sp,48 + 800000c4: 00008067 ret + +00000000800000c8 : + 800000c8: 00050513 mv a0,a0 + 800000cc: 0000006b 0x6b + 800000d0: 0000006f j 800000d0 + +00000000800000d4 <_assert>: + 800000d4: 00051a63 bnez a0,800000e8 <_assert+0x14> + 800000d8: 00100793 li a5,1 + 800000dc: 00078513 mv a0,a5 + 800000e0: 0000006b 0x6b + 800000e4: 0000006f j 800000e4 <_assert+0x10> + 800000e8: 00008067 ret + +00000000800000ec <_trm_init>: + 800000ec: ff010113 addi sp,sp,-16 + 800000f0: 00113423 sd ra,8(sp) + 800000f4: 11c000ef jal ra,80000210 + 800000f8: 00000517 auipc a0,0x0 + 800000fc: 32850513 addi a0,a0,808 # 80000420 <_etext> + 80000100: f29ff0ef jal ra,80000028
+ 80000104: 00050513 mv a0,a0 + 80000108: 0000006b 0x6b + 8000010c: 0000006f j 8000010c <_trm_init+0x20> + +0000000080000110 <__udivsi3>: + 80000110: 02051513 slli a0,a0,0x20 + 80000114: 02059593 slli a1,a1,0x20 + 80000118: 00008293 mv t0,ra + 8000011c: 03c000ef jal ra,80000158 <__udivdi3> + 80000120: 0005051b sext.w a0,a0 + 80000124: 00028067 jr t0 + +0000000080000128 <__umodsi3>: + 80000128: 02051513 slli a0,a0,0x20 + 8000012c: 02059593 slli a1,a1,0x20 + 80000130: 02055513 srli a0,a0,0x20 + 80000134: 0205d593 srli a1,a1,0x20 + 80000138: 00008293 mv t0,ra + 8000013c: 01c000ef jal ra,80000158 <__udivdi3> + 80000140: 0005851b sext.w a0,a1 + 80000144: 00028067 jr t0 + +0000000080000148 <__divsi3>: + 80000148: fff00293 li t0,-1 + 8000014c: 0a558c63 beq a1,t0,80000204 <__moddi3+0x30> + +0000000080000150 <__divdi3>: + 80000150: 06054063 bltz a0,800001b0 <__umoddi3+0x10> + 80000154: 0605c663 bltz a1,800001c0 <__umoddi3+0x20> + +0000000080000158 <__udivdi3>: + 80000158: 00058613 mv a2,a1 + 8000015c: 00050593 mv a1,a0 + 80000160: fff00513 li a0,-1 + 80000164: 02060c63 beqz a2,8000019c <__udivdi3+0x44> + 80000168: 00100693 li a3,1 + 8000016c: 00b67a63 bgeu a2,a1,80000180 <__udivdi3+0x28> + 80000170: 00c05863 blez a2,80000180 <__udivdi3+0x28> + 80000174: 00161613 slli a2,a2,0x1 + 80000178: 00169693 slli a3,a3,0x1 + 8000017c: feb66ae3 bltu a2,a1,80000170 <__udivdi3+0x18> + 80000180: 00000513 li a0,0 + 80000184: 00c5e663 bltu a1,a2,80000190 <__udivdi3+0x38> + 80000188: 40c585b3 sub a1,a1,a2 + 8000018c: 00d56533 or a0,a0,a3 + 80000190: 0016d693 srli a3,a3,0x1 + 80000194: 00165613 srli a2,a2,0x1 + 80000198: fe0696e3 bnez a3,80000184 <__udivdi3+0x2c> + 8000019c: 00008067 ret + +00000000800001a0 <__umoddi3>: + 800001a0: 00008293 mv t0,ra + 800001a4: fb5ff0ef jal ra,80000158 <__udivdi3> + 800001a8: 00058513 mv a0,a1 + 800001ac: 00028067 jr t0 + 800001b0: 40a00533 neg a0,a0 + 800001b4: 00b04863 bgtz a1,800001c4 <__umoddi3+0x24> + 800001b8: 40b005b3 neg a1,a1 + 800001bc: f9dff06f j 80000158 <__udivdi3> + 800001c0: 40b005b3 neg a1,a1 + 800001c4: 00008293 mv t0,ra + 800001c8: f91ff0ef jal ra,80000158 <__udivdi3> + 800001cc: 40a00533 neg a0,a0 + 800001d0: 00028067 jr t0 + +00000000800001d4 <__moddi3>: + 800001d4: 00008293 mv t0,ra + 800001d8: 0005ca63 bltz a1,800001ec <__moddi3+0x18> + 800001dc: 00054c63 bltz a0,800001f4 <__moddi3+0x20> + 800001e0: f79ff0ef jal ra,80000158 <__udivdi3> + 800001e4: 00058513 mv a0,a1 + 800001e8: 00028067 jr t0 + 800001ec: 40b005b3 neg a1,a1 + 800001f0: fe0558e3 bgez a0,800001e0 <__moddi3+0xc> + 800001f4: 40a00533 neg a0,a0 + 800001f8: f61ff0ef jal ra,80000158 <__udivdi3> + 800001fc: 40b00533 neg a0,a1 + 80000200: 00028067 jr t0 + 80000204: 01f29293 slli t0,t0,0x1f + 80000208: f45514e3 bne a0,t0,80000150 <__divdi3> + 8000020c: 00008067 ret + +0000000080000210 : + 80000210: 00000797 auipc a5,0x0 + 80000214: 41078793 addi a5,a5,1040 # 80000620 + 80000218: 0007b503 ld a0,0(a5) + 8000021c: 0087b583 ld a1,8(a5) + 80000220: ff010113 addi sp,sp,-16 + 80000224: 00000693 li a3,0 + 80000228: 00000613 li a2,0 + 8000022c: 40a585b3 sub a1,a1,a0 + 80000230: 00113423 sd ra,8(sp) + 80000234: 018000ef jal ra,8000024c + 80000238: 00813083 ld ra,8(sp) + 8000023c: 00000797 auipc a5,0x0 + 80000240: 3ea7ba23 sd a0,1012(a5) # 80000630 + 80000244: 01010113 addi sp,sp,16 + 80000248: 00008067 ret + +000000008000024c : + 8000024c: 1a050e63 beqz a0,80000408 + 80000250: fd010113 addi sp,sp,-48 + 80000254: 02813023 sd s0,32(sp) + 80000258: 00913c23 sd s1,24(sp) + 8000025c: 01f57793 andi a5,a0,31 + 80000260: 02113423 sd ra,40(sp) + 80000264: 01213823 sd s2,16(sp) + 80000268: 01313423 sd s3,8(sp) + 8000026c: 01413023 sd s4,0(sp) + 80000270: 00050493 mv s1,a0 + 80000274: 00050413 mv s0,a0 + 80000278: 00000513 li a0,0 + 8000027c: 14079a63 bnez a5,800003d0 + 80000280: 27f00713 li a4,639 + 80000284: 00058913 mv s2,a1 + 80000288: 00078513 mv a0,a5 + 8000028c: 14b77263 bgeu a4,a1,800003d0 + 80000290: 0074f513 andi a0,s1,7 + 80000294: 00153513 seqz a0,a0 + 80000298: 00060a13 mv s4,a2 + 8000029c: 00068993 mv s3,a3 + 800002a0: e35ff0ef jal ra,800000d4 <_assert> + 800002a4: 20048793 addi a5,s1,512 + 800002a8: 2004b023 sd zero,512(s1) + 800002ac: 2144b423 sd s4,520(s1) + 800002b0: 2134b823 sd s3,528(s1) + 800002b4: 00043023 sd zero,0(s0) + 800002b8: 00840413 addi s0,s0,8 + 800002bc: fe879ce3 bne a5,s0,800002b4 + 800002c0: fff00793 li a5,-1 + 800002c4: dc090413 addi s0,s2,-576 + 800002c8: 03f79793 slli a5,a5,0x3f + 800002cc: 1287f863 bgeu a5,s0,800003fc + 800002d0: 00078413 mv s0,a5 + 800002d4: 00100513 li a0,1 + 800002d8: dfdff0ef jal ra,800000d4 <_assert> + 800002dc: f8300793 li a5,-125 + 800002e0: 0017d793 srli a5,a5,0x1 + 800002e4: fc040513 addi a0,s0,-64 + 800002e8: 00f53533 sltu a0,a0,a5 + 800002ec: de9ff0ef jal ra,800000d4 <_assert> + 800002f0: 01f4f513 andi a0,s1,31 + 800002f4: 00153513 seqz a0,a0 + 800002f8: dddff0ef jal ra,800000d4 <_assert> + 800002fc: 00100513 li a0,1 + 80000300: 2404b023 sd zero,576(s1) + 80000304: 2404b423 sd zero,584(s1) + 80000308: 2484b823 sd s0,592(s1) + 8000030c: 24048c23 sb zero,600(s1) + 80000310: 2604b023 sd zero,608(s1) + 80000314: 2604b423 sd zero,616(s1) + 80000318: dbdff0ef jal ra,800000d4 <_assert> + 8000031c: 00100513 li a0,1 + 80000320: db5ff0ef jal ra,800000d4 <_assert> + 80000324: 2504b503 ld a0,592(s1) + 80000328: 24048a13 addi s4,s1,576 + 8000032c: 04053513 sltiu a0,a0,64 + 80000330: 00154513 xori a0,a0,1 + 80000334: 00157513 andi a0,a0,1 + 80000338: d9dff0ef jal ra,800000d4 <_assert> + 8000033c: 2504b503 ld a0,592(s1) + 80000340: 03f57513 andi a0,a0,63 + 80000344: 00153513 seqz a0,a0 + 80000348: d8dff0ef jal ra,800000d4 <_assert> + 8000034c: 2504b703 ld a4,592(s1) + 80000350: 00100793 li a5,1 + 80000354: 00675713 srli a4,a4,0x6 + 80000358: 0ae7fc63 bgeu a5,a4,80000410 + 8000035c: 00000793 li a5,0 + 80000360: 00100693 li a3,1 + 80000364: 0017879b addiw a5,a5,1 + 80000368: 00175713 srli a4,a4,0x1 + 8000036c: 0ff7f793 andi a5,a5,255 + 80000370: fed71ae3 bne a4,a3,80000364 + 80000374: 00078993 mv s3,a5 + 80000378: 0407b513 sltiu a0,a5,64 + 8000037c: 00f71933 sll s2,a4,a5 + 80000380: d55ff0ef jal ra,800000d4 <_assert> + 80000384: 00399793 slli a5,s3,0x3 + 80000388: 00f487b3 add a5,s1,a5 + 8000038c: 0007b703 ld a4,0(a5) + 80000390: 2604b423 sd zero,616(s1) + 80000394: 26e4b023 sd a4,608(s1) + 80000398: 00070463 beqz a4,800003a0 + 8000039c: 03473423 sd s4,40(a4) + 800003a0: 0147b023 sd s4,0(a5) + 800003a4: 2004b503 ld a0,512(s1) + 800003a8: 00a96533 or a0,s2,a0 + 800003ac: 20a4b023 sd a0,512(s1) + 800003b0: 00a03533 snez a0,a0 + 800003b4: d21ff0ef jal ra,800000d4 <_assert> + 800003b8: 00048513 mv a0,s1 + 800003bc: 2084bc23 sd s0,536(s1) + 800003c0: 2204b023 sd zero,544(s1) + 800003c4: 2204b423 sd zero,552(s1) + 800003c8: 2204b823 sd zero,560(s1) + 800003cc: 2204bc23 sd zero,568(s1) + 800003d0: 02813083 ld ra,40(sp) + 800003d4: 02013403 ld s0,32(sp) + 800003d8: 01813483 ld s1,24(sp) + 800003dc: 01013903 ld s2,16(sp) + 800003e0: 00813983 ld s3,8(sp) + 800003e4: 00013a03 ld s4,0(sp) + 800003e8: 03010113 addi sp,sp,48 + 800003ec: 00008067 ret + 800003f0: 00100513 li a0,1 + 800003f4: fff40413 addi s0,s0,-1 + 800003f8: cddff0ef jal ra,800000d4 <_assert> + 800003fc: 03f47793 andi a5,s0,63 + 80000400: fe0798e3 bnez a5,800003f0 + 80000404: ed1ff06f j 800002d4 + 80000408: 00000513 li a0,0 + 8000040c: 00008067 ret + 80000410: 00100913 li s2,1 + 80000414: 00000993 li s3,0 + 80000418: 00100513 li a0,1 + 8000041c: f65ff06f j 80000380 diff --git a/bin/non-output/cpu-tests/load-store-cpu-tests.elf b/bin/non-output/cpu-tests/load-store-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..9eb27d2ec33112f32d535477d9257da026385b7e GIT binary patch literal 42584 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 literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/load-store-cpu-tests.txt b/bin/non-output/cpu-tests/load-store-cpu-tests.txt new file mode 100755 index 0000000..d4cf3d8 --- /dev/null +++ b/bin/non-output/cpu-tests/load-store-cpu-tests.txt @@ -0,0 +1,291 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/load-store-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 1f8000ef jal ra,80000204 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 1bc000ef jal ra,800001e0 + +0000000080000028
: + 80000028: fd010113 addi sp,sp,-48 + 8000002c: 01313423 sd s3,8(sp) + 80000030: 00000997 auipc s3,0x0 + 80000034: 46098993 addi s3,s3,1120 # 80000490 + 80000038: 02813023 sd s0,32(sp) + 8000003c: 00913c23 sd s1,24(sp) + 80000040: 01213823 sd s2,16(sp) + 80000044: 01413023 sd s4,0(sp) + 80000048: 02113423 sd ra,40(sp) + 8000004c: 00000917 auipc s2,0x0 + 80000050: 3f490913 addi s2,s2,1012 # 80000440 + 80000054: 00000497 auipc s1,0x0 + 80000058: 44c48493 addi s1,s1,1100 # 800004a0 + 8000005c: 00098a13 mv s4,s3 + 80000060: 00098413 mv s0,s3 + 80000064: 00041503 lh a0,0(s0) + 80000068: 00092783 lw a5,0(s2) + 8000006c: 00240413 addi s0,s0,2 + 80000070: 00490913 addi s2,s2,4 + 80000074: 40f50533 sub a0,a0,a5 + 80000078: 00153513 seqz a0,a0 + 8000007c: f95ff0ef jal ra,80000010 + 80000080: fe9412e3 bne s0,s1,80000064 + 80000084: 00000917 auipc s2,0x0 + 80000088: 3dc90913 addi s2,s2,988 # 80000460 + 8000008c: 00000417 auipc s0,0x0 + 80000090: 40440413 addi s0,s0,1028 # 80000490 + 80000094: 00045503 lhu a0,0(s0) + 80000098: 00092783 lw a5,0(s2) + 8000009c: 00240413 addi s0,s0,2 + 800000a0: 00490913 addi s2,s2,4 + 800000a4: 40f50533 sub a0,a0,a5 + 800000a8: 00153513 seqz a0,a0 + 800000ac: f65ff0ef jal ra,80000010 + 800000b0: fe9412e3 bne s0,s1,80000094 + 800000b4: 002a4703 lbu a4,2(s4) + 800000b8: 001a4683 lbu a3,1(s4) + 800000bc: 003a4783 lbu a5,3(s4) + 800000c0: 004a4503 lbu a0,4(s4) + 800000c4: 00871713 slli a4,a4,0x8 + 800000c8: 00000417 auipc s0,0x0 + 800000cc: 3b840413 addi s0,s0,952 # 80000480 + 800000d0: 00d76733 or a4,a4,a3 + 800000d4: 01079793 slli a5,a5,0x10 + 800000d8: 00e7e7b3 or a5,a5,a4 + 800000dc: 01851513 slli a0,a0,0x18 + 800000e0: 00042703 lw a4,0(s0) + 800000e4: 00f56533 or a0,a0,a5 + 800000e8: 0005051b sext.w a0,a0 + 800000ec: 40a70533 sub a0,a4,a0 + 800000f0: 00153513 seqz a0,a0 + 800000f4: f1dff0ef jal ra,80000010 + 800000f8: 006a4703 lbu a4,6(s4) + 800000fc: 005a4683 lbu a3,5(s4) + 80000100: 007a4783 lbu a5,7(s4) + 80000104: 008a4503 lbu a0,8(s4) + 80000108: 00871713 slli a4,a4,0x8 + 8000010c: 00d76733 or a4,a4,a3 + 80000110: 01079793 slli a5,a5,0x10 + 80000114: 00e7e7b3 or a5,a5,a4 + 80000118: 01851513 slli a0,a0,0x18 + 8000011c: 00442703 lw a4,4(s0) + 80000120: 00f56533 or a0,a0,a5 + 80000124: 0005051b sext.w a0,a0 + 80000128: 40a70533 sub a0,a4,a0 + 8000012c: 00153513 seqz a0,a0 + 80000130: ee1ff0ef jal ra,80000010 + 80000134: 00aa4703 lbu a4,10(s4) + 80000138: 009a4683 lbu a3,9(s4) + 8000013c: 00ba4783 lbu a5,11(s4) + 80000140: 00ca4503 lbu a0,12(s4) + 80000144: 00871713 slli a4,a4,0x8 + 80000148: 00d76733 or a4,a4,a3 + 8000014c: 01079793 slli a5,a5,0x10 + 80000150: 00e7e7b3 or a5,a5,a4 + 80000154: 01851513 slli a0,a0,0x18 + 80000158: 00842703 lw a4,8(s0) + 8000015c: 00f56533 or a0,a0,a5 + 80000160: 0005051b sext.w a0,a0 + 80000164: 40a70533 sub a0,a4,a0 + 80000168: 00153513 seqz a0,a0 + 8000016c: 00100a13 li s4,1 + 80000170: ea1ff0ef jal ra,80000010 + 80000174: 00000917 auipc s2,0x0 + 80000178: 32c90913 addi s2,s2,812 # 800004a0 + 8000017c: 00000417 auipc s0,0x0 + 80000180: 31440413 addi s0,s0,788 # 80000490 + 80000184: 413a09bb subw s3,s4,s3 + 80000188: 008987bb addw a5,s3,s0 + 8000018c: 00fa17bb sllw a5,s4,a5 + 80000190: 00092503 lw a0,0(s2) + 80000194: fff7c793 not a5,a5 + 80000198: 03079793 slli a5,a5,0x30 + 8000019c: 0307d793 srli a5,a5,0x30 + 800001a0: 40f50533 sub a0,a0,a5 + 800001a4: 00f41023 sh a5,0(s0) + 800001a8: 00153513 seqz a0,a0 + 800001ac: 00240413 addi s0,s0,2 + 800001b0: e61ff0ef jal ra,80000010 + 800001b4: 00490913 addi s2,s2,4 + 800001b8: fc9418e3 bne s0,s1,80000188 + 800001bc: 02813083 ld ra,40(sp) + 800001c0: 02013403 ld s0,32(sp) + 800001c4: 01813483 ld s1,24(sp) + 800001c8: 01013903 ld s2,16(sp) + 800001cc: 00813983 ld s3,8(sp) + 800001d0: 00013a03 ld s4,0(sp) + 800001d4: 00000513 li a0,0 + 800001d8: 03010113 addi sp,sp,48 + 800001dc: 00008067 ret + +00000000800001e0 : + 800001e0: 00050513 mv a0,a0 + 800001e4: 0000006b 0x6b + 800001e8: 0000006f j 800001e8 + +00000000800001ec <_assert>: + 800001ec: 00051a63 bnez a0,80000200 <_assert+0x14> + 800001f0: 00100793 li a5,1 + 800001f4: 00078513 mv a0,a5 + 800001f8: 0000006b 0x6b + 800001fc: 0000006f j 800001fc <_assert+0x10> + 80000200: 00008067 ret + +0000000080000204 <_trm_init>: + 80000204: ff010113 addi sp,sp,-16 + 80000208: 00113423 sd ra,8(sp) + 8000020c: 01c000ef jal ra,80000228 + 80000210: 00000517 auipc a0,0x0 + 80000214: 22850513 addi a0,a0,552 # 80000438 <_etext> + 80000218: e11ff0ef jal ra,80000028
+ 8000021c: 00050513 mv a0,a0 + 80000220: 0000006b 0x6b + 80000224: 0000006f j 80000224 <_trm_init+0x20> + +0000000080000228 : + 80000228: 00000797 auipc a5,0x0 + 8000022c: 29878793 addi a5,a5,664 # 800004c0 + 80000230: 0007b503 ld a0,0(a5) + 80000234: 0087b583 ld a1,8(a5) + 80000238: ff010113 addi sp,sp,-16 + 8000023c: 00000693 li a3,0 + 80000240: 00000613 li a2,0 + 80000244: 40a585b3 sub a1,a1,a0 + 80000248: 00113423 sd ra,8(sp) + 8000024c: 018000ef jal ra,80000264 + 80000250: 00813083 ld ra,8(sp) + 80000254: 00000797 auipc a5,0x0 + 80000258: 26a7be23 sd a0,636(a5) # 800004d0 + 8000025c: 01010113 addi sp,sp,16 + 80000260: 00008067 ret + +0000000080000264 : + 80000264: 1a050e63 beqz a0,80000420 + 80000268: fd010113 addi sp,sp,-48 + 8000026c: 02813023 sd s0,32(sp) + 80000270: 00913c23 sd s1,24(sp) + 80000274: 01f57793 andi a5,a0,31 + 80000278: 02113423 sd ra,40(sp) + 8000027c: 01213823 sd s2,16(sp) + 80000280: 01313423 sd s3,8(sp) + 80000284: 01413023 sd s4,0(sp) + 80000288: 00050493 mv s1,a0 + 8000028c: 00050413 mv s0,a0 + 80000290: 00000513 li a0,0 + 80000294: 14079a63 bnez a5,800003e8 + 80000298: 27f00713 li a4,639 + 8000029c: 00058913 mv s2,a1 + 800002a0: 00078513 mv a0,a5 + 800002a4: 14b77263 bgeu a4,a1,800003e8 + 800002a8: 0074f513 andi a0,s1,7 + 800002ac: 00153513 seqz a0,a0 + 800002b0: 00060a13 mv s4,a2 + 800002b4: 00068993 mv s3,a3 + 800002b8: f35ff0ef jal ra,800001ec <_assert> + 800002bc: 20048793 addi a5,s1,512 + 800002c0: 2004b023 sd zero,512(s1) + 800002c4: 2144b423 sd s4,520(s1) + 800002c8: 2134b823 sd s3,528(s1) + 800002cc: 00043023 sd zero,0(s0) + 800002d0: 00840413 addi s0,s0,8 + 800002d4: fe879ce3 bne a5,s0,800002cc + 800002d8: fff00793 li a5,-1 + 800002dc: dc090413 addi s0,s2,-576 + 800002e0: 03f79793 slli a5,a5,0x3f + 800002e4: 1287f863 bgeu a5,s0,80000414 + 800002e8: 00078413 mv s0,a5 + 800002ec: 00100513 li a0,1 + 800002f0: efdff0ef jal ra,800001ec <_assert> + 800002f4: f8300793 li a5,-125 + 800002f8: 0017d793 srli a5,a5,0x1 + 800002fc: fc040513 addi a0,s0,-64 + 80000300: 00f53533 sltu a0,a0,a5 + 80000304: ee9ff0ef jal ra,800001ec <_assert> + 80000308: 01f4f513 andi a0,s1,31 + 8000030c: 00153513 seqz a0,a0 + 80000310: eddff0ef jal ra,800001ec <_assert> + 80000314: 00100513 li a0,1 + 80000318: 2404b023 sd zero,576(s1) + 8000031c: 2404b423 sd zero,584(s1) + 80000320: 2484b823 sd s0,592(s1) + 80000324: 24048c23 sb zero,600(s1) + 80000328: 2604b023 sd zero,608(s1) + 8000032c: 2604b423 sd zero,616(s1) + 80000330: ebdff0ef jal ra,800001ec <_assert> + 80000334: 00100513 li a0,1 + 80000338: eb5ff0ef jal ra,800001ec <_assert> + 8000033c: 2504b503 ld a0,592(s1) + 80000340: 24048a13 addi s4,s1,576 + 80000344: 04053513 sltiu a0,a0,64 + 80000348: 00154513 xori a0,a0,1 + 8000034c: 00157513 andi a0,a0,1 + 80000350: e9dff0ef jal ra,800001ec <_assert> + 80000354: 2504b503 ld a0,592(s1) + 80000358: 03f57513 andi a0,a0,63 + 8000035c: 00153513 seqz a0,a0 + 80000360: e8dff0ef jal ra,800001ec <_assert> + 80000364: 2504b703 ld a4,592(s1) + 80000368: 00100793 li a5,1 + 8000036c: 00675713 srli a4,a4,0x6 + 80000370: 0ae7fc63 bgeu a5,a4,80000428 + 80000374: 00000793 li a5,0 + 80000378: 00100693 li a3,1 + 8000037c: 0017879b addiw a5,a5,1 + 80000380: 00175713 srli a4,a4,0x1 + 80000384: 0ff7f793 andi a5,a5,255 + 80000388: fed71ae3 bne a4,a3,8000037c + 8000038c: 00078993 mv s3,a5 + 80000390: 0407b513 sltiu a0,a5,64 + 80000394: 00f71933 sll s2,a4,a5 + 80000398: e55ff0ef jal ra,800001ec <_assert> + 8000039c: 00399793 slli a5,s3,0x3 + 800003a0: 00f487b3 add a5,s1,a5 + 800003a4: 0007b703 ld a4,0(a5) + 800003a8: 2604b423 sd zero,616(s1) + 800003ac: 26e4b023 sd a4,608(s1) + 800003b0: 00070463 beqz a4,800003b8 + 800003b4: 03473423 sd s4,40(a4) + 800003b8: 0147b023 sd s4,0(a5) + 800003bc: 2004b503 ld a0,512(s1) + 800003c0: 00a96533 or a0,s2,a0 + 800003c4: 20a4b023 sd a0,512(s1) + 800003c8: 00a03533 snez a0,a0 + 800003cc: e21ff0ef jal ra,800001ec <_assert> + 800003d0: 00048513 mv a0,s1 + 800003d4: 2084bc23 sd s0,536(s1) + 800003d8: 2204b023 sd zero,544(s1) + 800003dc: 2204b423 sd zero,552(s1) + 800003e0: 2204b823 sd zero,560(s1) + 800003e4: 2204bc23 sd zero,568(s1) + 800003e8: 02813083 ld ra,40(sp) + 800003ec: 02013403 ld s0,32(sp) + 800003f0: 01813483 ld s1,24(sp) + 800003f4: 01013903 ld s2,16(sp) + 800003f8: 00813983 ld s3,8(sp) + 800003fc: 00013a03 ld s4,0(sp) + 80000400: 03010113 addi sp,sp,48 + 80000404: 00008067 ret + 80000408: 00100513 li a0,1 + 8000040c: fff40413 addi s0,s0,-1 + 80000410: dddff0ef jal ra,800001ec <_assert> + 80000414: 03f47793 andi a5,s0,63 + 80000418: fe0798e3 bnez a5,80000408 + 8000041c: ed1ff06f j 800002ec + 80000420: 00000513 li a0,0 + 80000424: 00008067 ret + 80000428: 00100913 li s2,1 + 8000042c: 00000993 li s3,0 + 80000430: 00100513 li a0,1 + 80000434: f65ff06f j 80000398 diff --git a/bin/non-output/cpu-tests/matrix-mul-cpu-tests.elf b/bin/non-output/cpu-tests/matrix-mul-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..700537def83b9c6791b0952e457293367b6bf0f4 GIT binary patch literal 42792 zcmeHw34B!5z5h9L=T2slOft!2o3I7K5|$7^6cHEHs9=4C`m`#dVKNyY5;8Fhf{$0i zV!@@a+O$GjELf}ZT3cTuj zj#=QC1&&$Zm<5hm;FtxDS-@_AIBw{xZ(=OYAI|=X^;e~WCR^4|eV&b*F;+jbjQxo{ zRF3{z^(Q8c`k7Z6_0!fH^(WuN>rcFu*U$VaN?8c75MaUj6Gxl%GpC#N(@r<*PyUcm zT?Af5*U#EIoUwr$ZrE5|jDGPA3${kl|5$Xv)?uixFWOi=0`O?Ge;^WN1BJybejUoD z$ZrOMMJyg+Y~#2fGj0#EcyLo-U{f<>VkL7TUE$)8ofi zvOgW%@e0ZRr-P$ji5H&B2Ch4o9oRPKZGu6b0LK3ec><6naG>g2Z%N#igBziTF_VWj z&RlOAv$?r(_WGc45)W=XX}w|0;l{=}>jTEgJh1WP_1rjx^NpvhXK_>5t3cSzG}#Im zID?X^HQ7J`=DViAf@#}IyRu+4(VFHs$oV_e7G6AL3cdrcSF+Tm5cGPC4Ln!L;#F1b zz|H2n#AhoWybNsqe;vks1#IJen}yE?@K7a=^7U(OpDX9+=g>*u*6+Ua3iy!|ZK}kq zMf)B2EdalA_q}E)e!n)p5gaFcbI~%E`rB^`2gsJ8 z82jvI$Z%0L8+hZ5(gU?WdUxPj$ar5t@VLYqq~C#ot+UzJH^0h^Zxk?^yZ)XR$ESj5 z&pgMdzvmo|dFqZ!|2Jg)Lfvu4?*z>+ei6SW$m;iOBD;(M&6xV#D0_lq;FkbmEr3|# zh&7H_V~92KqakAnu@ihX3;ljFaMi2Efo%ovW)6<}1NlRYM`COMYlC#p9Bg?VA!l8q z(E3I;oBbb@7f~)k|4*p@jPf&-@1g8PnF;t<6tH2pqyH7!}l#>A4kNQEB zOVK9X$u9HICf&b|_B$w-q5WIbNz|m@YbZ2!8_E|@XzXl^m7|=9axuztfc*%CWF;By zLj4y7`*-w79^&&881Z^2cjimkYzYim1!w&571-y;+3Xr1-40{*VS*E&&~1OqX1`y` z*o|<+Xwa@Q7@P7G@G;5np2%ijcsrY&HJ-5+IQ9zQz6842sGHG`&Sq@w3)$>V5MuK< z#yVi!H=$f96nX@Pm{`Nu0|QhA>(T!8T$(GJ_ei< z!EX;7+OjX3orAsNu^+%+aQyxcF?J^m_|99|>|6?fX2ve4Wo$L*3g<9(A@IsjzYIB7 zAkbDIz&hT@W(|yA4w^?GU$_qbheOv-W9-r@#-2fN{18rCi@=x;83zy)_e1WNVS`t| z?<>&r2Tw!ypMk!Kv5!K|+TX*^WsEgJwga$n->cc|?QrUgn5P6ma7#U7YruOFAMxccW}qHB2CUN^yQ7%E>6dz}OE_AX1j%nhIQ!C0wY& zK7az(Wub1C))lRXi%}?c&O)h1f!Rf&*r4@rCJM#XchNr&HB@7bD0L_a6k5x01*5oy z>9WV8{R`BssK1DsWM7CjOqkuJ+7F?o*uM)k!X}GQ%Od2&+V~0TFvfPGz5w-|sA+AJ zErDay{{e;UOzV}_ zB8|B7oR1tE7(Nskw0Uo#pRUxhWr%;Np_EdgnDDCw*tLl>XBtjf2tS|S?onyX8?dQzKBm}vA@~CU$nsGF)rsOQi;jp zCE&>;*iYpU7NfZMc3KP-^MJ`CW%mNsfl{uer$NP`k`@3JV|pQ5CW7HCP^n;e0L^g# z(rVLJC;CSm3}y=KLZn<^(J*qKGdc<=I=&2W*d84bM|6Z#bX*IxLKPiEqNC$oQvS3k zO;q>?YB!5^(Ki9$^Fk40i}G*r6@Y|*5hXzonzX@}R6tFBUYy_&W1kA7(w)R873x*4 zAP3XMw|@o$vF>y)nRW~_(-K;&@NM+EqR<@65g~p;NRCec zTf3HR1;;XesqqSY!ph$z{u2t4#MX83?YDwYd;x^v6Dl(ptwi7ALoTrRlnAel3GGq- zJz4SM+xLT};zb3%ThJ_qSo|`MG*SK{OLz$t1?{u_- zuo04-*fvdTqa+%&G5V)gxxpHDz;nj1t zK*2lkVax(*a9G6+)TRJ6$BlZH1|Pvk0RiR)cw3mZws0X(`O?yJ0A!JCDPES9lH@E9 zxr>I{V*)J@`5ld2A$qYuSfkhVqua2J|qp`49 z#}|kp7Cw=d=!K#a4vUraVPTnA7*8P>zo?Y*WDQiM$%90%Hl!d87{r)gY>+S|GFJQ>G!{F97`)Eoq=)J;@`(1+7ZT042=Jc-cwTBT3?zDcvl#9LLU}vmPxCSgmUCgL#ErO> zs&1g^pXC)NfYnMstA`V-=OkbU0JXoi8RVBB0ruQsZ%ClOwVveWpTR{~>vgag#9BY) zW({T+XbDO`9&4=;)*4Rvgm2(J8R}F#os;I-z$Y}Lb25<14v{6gcolj= z@X8bN5jX<1=2QgTPD6IH88jWbM zc&{J+mwEJI!v7cs7ZUz@GxhHWIp_74b23CTA!az@YPsL4@kU5D)f`+|<&jm6BpGGt!_$ERnpb-2) z^n~Cqpds(osb&N6nYl_r4%#9?W& zUj)KzLMQwD6j+J501Eq5mnr+4goexa9|DP=1(r+rAuZsH;4YHk5gt94QWD9$39|{A z??fX(!(PGnNx}c31>Z}k1Qddsct$21+dvP?oC(ws!Sub8pB7Uk{Loqq5}se>(I%us z5uV+cUxeqU(C~(59mGd??k3I2{JVjbAfV9V74(D_RdLe75uQtk^2NzN1f>j5M^rg< z{A(V%IH(<+L1OYg9&I5dDXT7lcp@e@lAMmY{{uL%Z)i1}RXc5>(-Dqo{_!2B;M0(^ zRbV(o!{PA}C>f-qPmJ!a_*h;*w=M3AZy${(Jo0ojmQSJ6(H$^P*>r5{pgEmxNKIhK zBX9#RA|`DBj5vt1@K=FaeYOGA>AZ?i@5V^=%XAo;#jC#tz^@2UK+I-KjA1yxRdd2P zRRVem@B`v;ngr|xU<958vAeNY#=b(RXYyghOrFf<@ey<~V{mEpC>mYJYiaHi02px) zfa{SjtDmHi5A)H4dI?7SbJikWwhp_8h>x|v67jJE4K~ugOV^PCm-4bNY25E<++PV? z`%brza2NBkZb%{WL>MbZBxu;1CvGI7J&9VPp%wN)LM5PBVb`K3R@hx=xI%XZ zNGJj}y5RFA{E(@kp19FPTc-D99oozm&~jk$^Tjyf&kA4M{3`^1ANc$PIPWo)Z zOIn@Rfs!DoP-hBmJcK%};ts@d=3Pjn|Hh+~;YDitGH^s{I)FxkhQ0ZzpNO7LTud}% zy#$_rB?u^{TZW#P?iMs$`RO5|d~xzBQ2K12{{^t0ZSPR<)vlcFu;<_%m#5y6+zM8& zTg^P#$C0K+VnL8RnAZV6AqO9P*1<;{yf#Z-1*=*3G>u0{h7$L;aAPf(7RVaG<=4@1n5)6OTZ zbo05N$o-@Dcpm8hnu=b#@Nw7T&}+nhxQ+2;-)zM~Pm<8v%sibAT#hZ4(-d zjkgO<0J`{1zQXS$rn7lt06A60qW?YP93Ghn6mj}|fo2&axZ;CW@dq)45Gmcn>ihM@ zr#BvAOLLH4BgqRkt=lAG(S5U>_^6$4*@JqDbyHwx`$1XD#6QB#{aRdeIKYnc^ghaa zSMtc)8l{0y93sWBgQ!JVuepkRHG!TK@|VkKk9$)+D1BBv)ZyFdNZxP?v46RdZt*V% z;|B30>GzGaTNIB#Up!^|L*q z!9wb%aROguf$M*31J}Q4?@UwQ&j{ZAeCZl@&)9c?^hb_pq%nZkUG=pSTm(p z3@pe1KB>J8kGG$We~t7n4DW*Ff`mVLKjGhBY0%~`iSM@&-#?#D6Owq3B%b_B;<~HS zpx~df4t@n8l@d}D#ZTyREl5LSW1ZN9&F90BH2ZXC^786O>&Cc%bH{Gr+K14-&WTI&lhul~X`|Y-WGl;Igi>l(-l2NTVOF4)jes2q z<>I1CiY^lVFE`orII)T6OkR<*Y^BZMRrZNoR>sSOPN`~~Qz7MviD3U)C!5VYQ70rB zW@mvfR?)RWhy)xlRS7@0M!9z6KanSCaZyOXe>p?Qq)|CnQ{~s>$G*nPU_i>Cm0w zTs=X#rp#Q%3dxLxWo48UnYo`8&OGNG>wp?W3;4% zU!ThmW9_2i%lS+0`_a1j`|x_tCd`-6<224LcFRS)F7;^S#tN{j-5?fVYkXi{JU0?&EpCvz zpBIWxlwRUyl%J*iR)s&zyTtwQ+)|jVbs#)Y=LUxfoWck;c;{85M$#C>+IL3&;6V$q|70P5_-a46SJr=YFmsk?)cYWMwR!I;Bk$aDB#2&t({7N#Rxk0m zxqz}SKWg9qyQg~m&%imLu^AVbiz2F<>W!lgIgX6-_KP(X7T~~QF>*{ zCyu>Tp3M7Rt-0}E%bI!YiJtKFS~m|Aj|041JhBWHyLphhQT$@d=b-Nca&z*@(q5E* zA#FeG)y@O*qIg!R7bOoHc~Vq}`L91OcMqu>#XllEG3b-0+??`4@f=>fT=GE4!)6{0 zLTq)H-wxmvz(eXr@wb`J?VShY=Hzom@}m3;X?t`sq$jBJ&yXHcx4Hd&>j{axf<2Gb zpNBy_LF5xO{*MiO5Z&r>=5qt(2{`{}E_s|C{H^JErsId^m9#AnkQZfX9w0A@N5lw= zWIxKnxP9N@#y-T58`URld_X1ET-WpmL$#g>y<9!w`rNa6sg9Cqyo{H*LGHef(q5E2 zxa5K2QSv=al*gvzNi89^+4q#}6~II4M)6x9J~s3LxjFd+h7aiIP~|DLADUMHj~_Yn zfV@;5zvYz^J^l!>kNUbYj~hWB6d#aVazC5+c-IHyN9pG7b9nawY2e#Hy_He(@iax|EbC= z+F~u*eoNXm-PFPmuf;obPs_tun{H}(5R|%Umt(PKrFiAIOv^FW(kZ2zdS;U2G9Nio zUO6t)ay*)2r<-=sE*n%d{pugB1>M#WW(&5p7XM4Mm|7adpKfYth?#C{F?>$Cn$s67 z<`?UxejgA|#rY21(bM>Bw%V6#Emmz_0X&CaO||$4sV?!(v>vG+kqCf>~ z&AuSrUwhekwg}Bm(;`m|flALzj?(Q4OR$#Vs+nWn;%4rbJL!eR0Hp#Zzn|1^FzBy3 z^=k|Cr|o_hZ6g5|1q;vjn*tqg(DqY9zl`ht=N|6=G9rj zhrEbvNF8Vg*i8Jvq|{fZ3;pV|4fUurwLdIBs5eWrUEPytH|bjAX}jxM+g;b&l%EdA zPxH;U*7nwRIvkyQ{*zViU#P-c*K1XOyQ+1bamT!ypMJafF2(mzRX?k0onG`jx?Zg2 zIUIlejyO~J?lpfn`or00sN-(^hf43pA1c518~>kOzM<;x*2mo+D!=y||DRpHq3VC6 z`Wz|!k;?0y-`zh_{(o=!q0To{{3Er`Q0E&ezFWS-^^Z3HBjxw^rXT8jL&ZOw{oUh7 zoBxsW8!G)!@!k5n`$x*pO|Q?Dxm#9=;hs0&zMKCQxU(_XcL3)6?UE=yIk7_FP0KSY z(@o2-Zf)vK_w+U;S2nIlcXy^cdPKjcDb>~2NFzN>?VYKPzP2>WpF+@i@LPL&yOXKj z#+Av`^7hU&rnFcyjC4)Ke=fwoh)VW$x36wo+1D`@|LGI|fNmw=281@N@vl(z4MnYK z7@Yn;h8YSO^e>yaS%Uv6%Bd4Zr&@N_ z)2PX!YOdmt@e#>7WEc_1Z36P2f@v^h1W5!%QJSOp4>4{+G9zS!gqSt5BNd2J2j~@G zS0x9eoTX}jv<%uP&MT$X7 z!f5<}4L@WQ6Rr^uTw!nFg~(ho-$)T{cjgmqKC#f#ooZUS24TmV`g*#Xy4!nFt4^5N z*wNnEx4LmzXP*@;?l|<}r9&2RwGv^3uBHS z`oMsZfW8Ga_G4HD9qd8=r9dkdZRx;>txY!O+V{4$4F`6lNfMYu-`5&H&rM>BY;r9H zuVGwG(qU?HQL$nl(Qeh#x!`b8h{)A^<(N<3HybYqu0avY~X+n-C*1I;gWOm1<0NXL@>k zVrBMwiI&3!mJq=TEkqQgu%fFiz0?_9nd!^ZBB{a6_-D$tNTcKx5JoE1rX8-VrqhM) zkAua@nqj0Ys)Y-vVXZtFsiSP{jS?$R&9I(86 zIw98#v)g(+O%oEH9~P2}-z<~>dcR1qT;m*{09Y5lze?7!doJ7h9% zYHjcBIqXTnx$xA&(rMjVc)e@7(mnF9AhUgAA5wm&gg93tht>4i%lIR#Zb~c3Pur?N zOmYMYxvNpM1HzTG;cECu1*dJBc3iI9N_)F@^*pp`0T3U#E3Xr~hlI;;z-kE+0%QOy zCCNC7YofxaL=zCo0Ed8-sBEIMh&)-yltXI~Auf~jRN0XV4yTS9pv5S#Ft^%1%$Qpi z?3IXX$VJB;gQV8W(KP;B#{4jBn@TCEn(rsff15b!NF60dGhsaI)E#grp3f&3eqMyX z3mK;(Kaf;dY_Op_U6@!>z(iW*y?JmnS1a~C-wAjpseWu}fQ z_gn6<(j#(|BsL9`WH62s>WBlJIf3M%{WJkSWF&d?gEX?MwgD}*HSc&00j8A1N@y1C zzYEz%g^Whg0PQ}Jsh|VRI7KBq?EaWI7gvC*bB&I@AwjqdXF5KlBXwY0so5wK>24{^ zLIGW?=c7%KB&jr32m!e zi9;TjpQaGW+CFW^HZzR1p^tX3rQ9s+e)y%hH!#FM{Zs6G!iZF+Frr$xlNydNQX|s! z&M=}O3M15No;ty(B4jKP4SkR(HmcryL^x+ea`xg4oAek(^HjRZL? zB9TnvF^PnkWOV46BF47_ir(}mYXrpo4H?$ve@jVa zky>pL=&eAe@hgdy3jn2-v0d81Iw^rjLQc~9R@s*gX^VS9X)5S1ldx&*9>j`K<8dXm z#qLgVU>&)UvF{TIO(#1IAy{e4acUpNL*k^b~`H7;dZ4=7YQSeGWtXf3dzG%dzM$_Ce2+3nA#jaFXP8cU>ZM@=F^_1wJsiP zAiLc?IMp+Q8Qmj+JSb?nz+LKKIR}tcLOt(%QKMCkgz%FgqUBYW}I-}&ro$0mk3K|SO0 zlg>O|Im>y#lMX;!eMt&*yz!g_fro79tZN#(1j=9v+SAIhZBeg`_hDOnMET6P^O!$! z8?Q{Zo=l>Gc-;Hwk4L3Ha0@Co2Ynnd^MEMvOyga7o2WO}Ass0&;X67euFpFr=8M!z zPX=fcMg|ys%f|#typY^^-qWqzKWOuh7+K{YW4+9ANNoya8qZ6`thnLEE}5c%bg8h6 z&YSYt0okfV?%-;>&gI8XdTdVzvHR4y#`vBH59f)(dn=JUi{Uwj^2{M_DRjWRm($q4 z{0+p9@?M$NI{f{St;3J&{rxS$N3!*P+V{$1>yXZF?sbUeCrybH>>X-FDx{FHK?2b~e?-o}2IRTd+B<}MExp+Z4UMNdvS}$5=$&rcYD=+g%a8#G>97P>)@7 zgpN=ThY+A*8spKyG%}6S znSz%L)E2b$*UzAo4}N4c6xU@iC3}O zJK6GNM=ukjeVsk+%R19-b%aLmHZTj4TAu9oe2Y8y8)fpnGRK=dL>rO2{r5mpSwJ&W$H?=a;mhL!ZWx6fdxrT;Y+fV7}I$* zt!rE`qplI({hor?g}|k8X=kP}*|VlIwY)pind$3k?CZR$y|b;cH`&^e?vdlIeeE5+ z?VYmI)0<4KXzc3F^rln2nQjT}YEPljmh4S7_5j?T=_JyneVw9h!B{GTpT_Q4p6Twb zvkXI~a=%tGs9mI)+cJHSPB9|-7QDpN(%#wL%jo-T{KRZaFYD^-O)d9ucE2-&H|(sp zs+#1hP%T|6(<@t`XE$68YqA#dqymVhn2B7U>|WNxT9Q3IY2dn*@J_{g+OJMSw9fQu z86J?i=kSE|-9D4w&d(4c_T=8-kp0*s5eldmGDSR<@)veKNk=(%r1Jy|bk=)0tk`)w_mu zrIRaKy3<$o;kC#X(w4RNEX-V$?q0BT23y*lT(&aZsRsHwLCMZmFla=~q-ygrnH3f` zYimy~W9^-*GAq(dPt-!Qu1xlTX}Q98u6h-aior)?5W`XQrpOJ=Mcf$*yFo z9YXeyLL{KY1Z3%MyhgWzrMlaJoa|^(aop08POgF-`r5^cAd(&g;j$TLcVsf%tc!GG z9qFaLnN?_zL_mRt_z`U>&IvOq7RfBaim)_nDBgQ&&dl#zmF#X$cJ}tn%XGA{uI}`z zmZfBNp%ih=->s4--nH^*0Eh283;TB@pl#GfmOTHzZ^9fU(4~QiNhtBegwLo zn)+`W&nt<|TaPcmFHqz9tyTTEj?E=qy*J0UmT#;0bk%2SK3ls!uqAkH=o8_A!cP`| zsw8ml!_AL3KhgYj^E1uQHb2+=!{#3~?{EHb^YhI=nJ0b{QT)xLT@L&X3EQIPvR4|e zUzF5;E2-i7-9{}p=|g<G_PdZV)D%Tfb@;g#tZGfDPhe;7niVyAAjQM zXPyPJ-H#;ad5SN!?N@Wj!sda(d7mn2Bi>trp9p`lnBoDiU=}_+&+U7fMN-q>#FCuu ztGQ%u^CyevT^m}mB`9V6RLRZwmIvHikwm-*{&@4ljtG-;kbMW^59U%-6{K!SiNlmZ z>Fb)W4J{<$0t_O}d!ku+&aFwVk2OY}{v1TM@b)g-r~U@gK4#$Ux&6NIAX{$w@iEz( zAwPJC;nz%k<}G0Q2j`vhhV5OeEe?@ZFV`>_eml|UGMI9*Ys|3z!r3`sF#Pz9&t))w z(;5uF+U9c^xu3ANM#=I)_UEhxPz~bj2dDLi_wFpe=n%zkFZtq+7x+1QY70&q1b;T* z<(R>pm(B#djOF}zqnh|Ez+()5N`0f#kF?J5b{Ers(}AwI=wEilq`v(UB0uTBAcUWg^#Kq#ky`m zOX+LDs4*6$40`QU@vrUqCBSLk2E|A3WA_OB+lnnedOl~zD@m&I_WPi$Ni5yoml~|& zb#_Nh1NIQT0zy_qg`|JQ_+_=jz=!OygIkP0y0;D4Q<;GowK{t%>Z$4F0jT|j&{prSC zj{!G~aPL+BQ);Jc(AA}1qVc7_AW2-1yj@2OH~r^;JOix?x= zG#d^z-};0EEHRw}nqJqmZ}`z)vQ5%Wa*|uJYWi<0dKVhoqUaauz)}eA_#r-e?b>QTztQSTf6=WHgU$u^%T51( DKUxB_ literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/matrix-mul-cpu-tests.txt b/bin/non-output/cpu-tests/matrix-mul-cpu-tests.txt new file mode 100755 index 0000000..c1ecb48 --- /dev/null +++ b/bin/non-output/cpu-tests/matrix-mul-cpu-tests.txt @@ -0,0 +1,266 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/matrix-mul-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 168000ef jal ra,80000174 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 12c000ef jal ra,80000150 + +0000000080000028
: + 80000028: f9010113 addi sp,sp,-112 + 8000002c: 03613823 sd s6,48(sp) + 80000030: 03713423 sd s7,40(sp) + 80000034: 03813023 sd s8,32(sp) + 80000038: 01913c23 sd s9,24(sp) + 8000003c: 01a13823 sd s10,16(sp) + 80000040: 01b13423 sd s11,8(sp) + 80000044: 06113423 sd ra,104(sp) + 80000048: 06813023 sd s0,96(sp) + 8000004c: 04913c23 sd s1,88(sp) + 80000050: 05213823 sd s2,80(sp) + 80000054: 05313423 sd s3,72(sp) + 80000058: 05413023 sd s4,64(sp) + 8000005c: 03513c23 sd s5,56(sp) + 80000060: 00000b17 auipc s6,0x0 + 80000064: 378b0b13 addi s6,s6,888 # 800003d8 + 80000068: 00001c97 auipc s9,0x1 + 8000006c: 838c8c93 addi s9,s9,-1992 # 800008a0 + 80000070: 00000c17 auipc s8,0x0 + 80000074: 4f8c0c13 addi s8,s8,1272 # 80000568 + 80000078: 00000d97 auipc s11,0x0 + 8000007c: 4f0d8d93 addi s11,s11,1264 # 80000568 + 80000080: 00001b97 auipc s7,0x1 + 80000084: 830b8b93 addi s7,s7,-2000 # 800008b0 + 80000088: 00001d17 auipc s10,0x1 + 8000008c: 800d0d13 addi s10,s10,-2048 # 80000888 + 80000090: 000d0993 mv s3,s10 + 80000094: 000c0a93 mv s5,s8 + 80000098: 000c8a13 mv s4,s9 + 8000009c: e7098413 addi s0,s3,-400 + 800000a0: 000b0493 mv s1,s6 + 800000a4: 00000913 li s2,0 + 800000a8: 00042583 lw a1,0(s0) + 800000ac: 0004a503 lw a0,0(s1) + 800000b0: 02840413 addi s0,s0,40 + 800000b4: 00448493 addi s1,s1,4 + 800000b8: 0e0000ef jal ra,80000198 <__muldi3> + 800000bc: 0125093b addw s2,a0,s2 + 800000c0: ff3414e3 bne s0,s3,800000a8 + 800000c4: 000aa503 lw a0,0(s5) + 800000c8: 012a2023 sw s2,0(s4) + 800000cc: 00440993 addi s3,s0,4 + 800000d0: 41250533 sub a0,a0,s2 + 800000d4: 00153513 seqz a0,a0 + 800000d8: f39ff0ef jal ra,80000010 + 800000dc: 00100513 li a0,1 + 800000e0: f31ff0ef jal ra,80000010 + 800000e4: 004a0a13 addi s4,s4,4 + 800000e8: 004a8a93 addi s5,s5,4 + 800000ec: fb3b98e3 bne s7,s3,8000009c + 800000f0: 00100513 li a0,1 + 800000f4: 028b0b13 addi s6,s6,40 + 800000f8: f19ff0ef jal ra,80000010 + 800000fc: 028c8c93 addi s9,s9,40 + 80000100: 028c0c13 addi s8,s8,40 + 80000104: f9bb16e3 bne s6,s11,80000090 + 80000108: 00100513 li a0,1 + 8000010c: f05ff0ef jal ra,80000010 + 80000110: 06813083 ld ra,104(sp) + 80000114: 06013403 ld s0,96(sp) + 80000118: 05813483 ld s1,88(sp) + 8000011c: 05013903 ld s2,80(sp) + 80000120: 04813983 ld s3,72(sp) + 80000124: 04013a03 ld s4,64(sp) + 80000128: 03813a83 ld s5,56(sp) + 8000012c: 03013b03 ld s6,48(sp) + 80000130: 02813b83 ld s7,40(sp) + 80000134: 02013c03 ld s8,32(sp) + 80000138: 01813c83 ld s9,24(sp) + 8000013c: 01013d03 ld s10,16(sp) + 80000140: 00813d83 ld s11,8(sp) + 80000144: 00000513 li a0,0 + 80000148: 07010113 addi sp,sp,112 + 8000014c: 00008067 ret + +0000000080000150 : + 80000150: 00050513 mv a0,a0 + 80000154: 0000006b 0x6b + 80000158: 0000006f j 80000158 + +000000008000015c <_assert>: + 8000015c: 00051a63 bnez a0,80000170 <_assert+0x14> + 80000160: 00100793 li a5,1 + 80000164: 00078513 mv a0,a5 + 80000168: 0000006b 0x6b + 8000016c: 0000006f j 8000016c <_assert+0x10> + 80000170: 00008067 ret + +0000000080000174 <_trm_init>: + 80000174: ff010113 addi sp,sp,-16 + 80000178: 00113423 sd ra,8(sp) + 8000017c: 040000ef jal ra,800001bc + 80000180: 00000517 auipc a0,0x0 + 80000184: 25050513 addi a0,a0,592 # 800003d0 + 80000188: ea1ff0ef jal ra,80000028
+ 8000018c: 00050513 mv a0,a0 + 80000190: 0000006b 0x6b + 80000194: 0000006f j 80000194 <_trm_init+0x20> + +0000000080000198 <__muldi3>: + 80000198: 00050613 mv a2,a0 + 8000019c: 00000513 li a0,0 + 800001a0: 0015f693 andi a3,a1,1 + 800001a4: 00068463 beqz a3,800001ac <__muldi3+0x14> + 800001a8: 00c50533 add a0,a0,a2 + 800001ac: 0015d593 srli a1,a1,0x1 + 800001b0: 00161613 slli a2,a2,0x1 + 800001b4: fe0596e3 bnez a1,800001a0 <__muldi3+0x8> + 800001b8: 00008067 ret + +00000000800001bc : + 800001bc: 00000797 auipc a5,0x0 + 800001c0: 6cc78793 addi a5,a5,1740 # 80000888 + 800001c4: 0007b503 ld a0,0(a5) + 800001c8: 0087b583 ld a1,8(a5) + 800001cc: ff010113 addi sp,sp,-16 + 800001d0: 00000693 li a3,0 + 800001d4: 00000613 li a2,0 + 800001d8: 40a585b3 sub a1,a1,a0 + 800001dc: 00113423 sd ra,8(sp) + 800001e0: 018000ef jal ra,800001f8 + 800001e4: 00813083 ld ra,8(sp) + 800001e8: 00000797 auipc a5,0x0 + 800001ec: 6aa7b823 sd a0,1712(a5) # 80000898 + 800001f0: 01010113 addi sp,sp,16 + 800001f4: 00008067 ret + +00000000800001f8 : + 800001f8: 1a050e63 beqz a0,800003b4 + 800001fc: fd010113 addi sp,sp,-48 + 80000200: 02813023 sd s0,32(sp) + 80000204: 00913c23 sd s1,24(sp) + 80000208: 01f57793 andi a5,a0,31 + 8000020c: 02113423 sd ra,40(sp) + 80000210: 01213823 sd s2,16(sp) + 80000214: 01313423 sd s3,8(sp) + 80000218: 01413023 sd s4,0(sp) + 8000021c: 00050493 mv s1,a0 + 80000220: 00050413 mv s0,a0 + 80000224: 00000513 li a0,0 + 80000228: 14079a63 bnez a5,8000037c + 8000022c: 27f00713 li a4,639 + 80000230: 00058913 mv s2,a1 + 80000234: 00078513 mv a0,a5 + 80000238: 14b77263 bgeu a4,a1,8000037c + 8000023c: 0074f513 andi a0,s1,7 + 80000240: 00153513 seqz a0,a0 + 80000244: 00060a13 mv s4,a2 + 80000248: 00068993 mv s3,a3 + 8000024c: f11ff0ef jal ra,8000015c <_assert> + 80000250: 20048793 addi a5,s1,512 + 80000254: 2004b023 sd zero,512(s1) + 80000258: 2144b423 sd s4,520(s1) + 8000025c: 2134b823 sd s3,528(s1) + 80000260: 00043023 sd zero,0(s0) + 80000264: 00840413 addi s0,s0,8 + 80000268: fe879ce3 bne a5,s0,80000260 + 8000026c: fff00793 li a5,-1 + 80000270: dc090413 addi s0,s2,-576 + 80000274: 03f79793 slli a5,a5,0x3f + 80000278: 1287f863 bgeu a5,s0,800003a8 + 8000027c: 00078413 mv s0,a5 + 80000280: 00100513 li a0,1 + 80000284: ed9ff0ef jal ra,8000015c <_assert> + 80000288: f8300793 li a5,-125 + 8000028c: 0017d793 srli a5,a5,0x1 + 80000290: fc040513 addi a0,s0,-64 + 80000294: 00f53533 sltu a0,a0,a5 + 80000298: ec5ff0ef jal ra,8000015c <_assert> + 8000029c: 01f4f513 andi a0,s1,31 + 800002a0: 00153513 seqz a0,a0 + 800002a4: eb9ff0ef jal ra,8000015c <_assert> + 800002a8: 00100513 li a0,1 + 800002ac: 2404b023 sd zero,576(s1) + 800002b0: 2404b423 sd zero,584(s1) + 800002b4: 2484b823 sd s0,592(s1) + 800002b8: 24048c23 sb zero,600(s1) + 800002bc: 2604b023 sd zero,608(s1) + 800002c0: 2604b423 sd zero,616(s1) + 800002c4: e99ff0ef jal ra,8000015c <_assert> + 800002c8: 00100513 li a0,1 + 800002cc: e91ff0ef jal ra,8000015c <_assert> + 800002d0: 2504b503 ld a0,592(s1) + 800002d4: 24048a13 addi s4,s1,576 + 800002d8: 04053513 sltiu a0,a0,64 + 800002dc: 00154513 xori a0,a0,1 + 800002e0: 00157513 andi a0,a0,1 + 800002e4: e79ff0ef jal ra,8000015c <_assert> + 800002e8: 2504b503 ld a0,592(s1) + 800002ec: 03f57513 andi a0,a0,63 + 800002f0: 00153513 seqz a0,a0 + 800002f4: e69ff0ef jal ra,8000015c <_assert> + 800002f8: 2504b703 ld a4,592(s1) + 800002fc: 00100793 li a5,1 + 80000300: 00675713 srli a4,a4,0x6 + 80000304: 0ae7fc63 bgeu a5,a4,800003bc + 80000308: 00000793 li a5,0 + 8000030c: 00100693 li a3,1 + 80000310: 0017879b addiw a5,a5,1 + 80000314: 00175713 srli a4,a4,0x1 + 80000318: 0ff7f793 andi a5,a5,255 + 8000031c: fed71ae3 bne a4,a3,80000310 + 80000320: 00078993 mv s3,a5 + 80000324: 0407b513 sltiu a0,a5,64 + 80000328: 00f71933 sll s2,a4,a5 + 8000032c: e31ff0ef jal ra,8000015c <_assert> + 80000330: 00399793 slli a5,s3,0x3 + 80000334: 00f487b3 add a5,s1,a5 + 80000338: 0007b703 ld a4,0(a5) + 8000033c: 2604b423 sd zero,616(s1) + 80000340: 26e4b023 sd a4,608(s1) + 80000344: 00070463 beqz a4,8000034c + 80000348: 03473423 sd s4,40(a4) + 8000034c: 0147b023 sd s4,0(a5) + 80000350: 2004b503 ld a0,512(s1) + 80000354: 00a96533 or a0,s2,a0 + 80000358: 20a4b023 sd a0,512(s1) + 8000035c: 00a03533 snez a0,a0 + 80000360: dfdff0ef jal ra,8000015c <_assert> + 80000364: 00048513 mv a0,s1 + 80000368: 2084bc23 sd s0,536(s1) + 8000036c: 2204b023 sd zero,544(s1) + 80000370: 2204b423 sd zero,552(s1) + 80000374: 2204b823 sd zero,560(s1) + 80000378: 2204bc23 sd zero,568(s1) + 8000037c: 02813083 ld ra,40(sp) + 80000380: 02013403 ld s0,32(sp) + 80000384: 01813483 ld s1,24(sp) + 80000388: 01013903 ld s2,16(sp) + 8000038c: 00813983 ld s3,8(sp) + 80000390: 00013a03 ld s4,0(sp) + 80000394: 03010113 addi sp,sp,48 + 80000398: 00008067 ret + 8000039c: 00100513 li a0,1 + 800003a0: fff40413 addi s0,s0,-1 + 800003a4: db9ff0ef jal ra,8000015c <_assert> + 800003a8: 03f47793 andi a5,s0,63 + 800003ac: fe0798e3 bnez a5,8000039c + 800003b0: ed1ff06f j 80000280 + 800003b4: 00000513 li a0,0 + 800003b8: 00008067 ret + 800003bc: 00100913 li s2,1 + 800003c0: 00000993 li s3,0 + 800003c4: 00100513 li a0,1 + 800003c8: f65ff06f j 8000032c diff --git a/bin/non-output/cpu-tests/max-cpu-tests.elf b/bin/non-output/cpu-tests/max-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..4c22c4ef3fc30b9006220a155a712eebbcde0ba4 GIT binary patch literal 42096 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 who}XM--=~aLuh)v57Of?*A#*: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 124000ef jal ra,80000130 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 0e8000ef jal ra,8000010c + +0000000080000028
: + 80000028: fa010113 addi sp,sp,-96 + 8000002c: 01813823 sd s8,16(sp) + 80000030: 00000c17 auipc s8,0x0 + 80000034: 440c0c13 addi s8,s8,1088 # 80000470 + 80000038: 03313c23 sd s3,56(sp) + 8000003c: 03513423 sd s5,40(sp) + 80000040: 03613023 sd s6,32(sp) + 80000044: 01713c23 sd s7,24(sp) + 80000048: 01913423 sd s9,8(sp) + 8000004c: 04113c23 sd ra,88(sp) + 80000050: 04813823 sd s0,80(sp) + 80000054: 04913423 sd s1,72(sp) + 80000058: 05213023 sd s2,64(sp) + 8000005c: 03413823 sd s4,48(sp) + 80000060: 00000b97 auipc s7,0x0 + 80000064: 310b8b93 addi s7,s7,784 # 80000370 + 80000068: 000c0b13 mv s6,s8 + 8000006c: 00000a93 li s5,0 + 80000070: 00000997 auipc s3,0x0 + 80000074: 42098993 addi s3,s3,1056 # 80000490 + 80000078: 04000c93 li s9,64 + 8000007c: 000b2903 lw s2,0(s6) + 80000080: 000b8493 mv s1,s7 + 80000084: 000c0413 mv s0,s8 + 80000088: 00090a13 mv s4,s2 + 8000008c: 00042503 lw a0,0(s0) + 80000090: 00440413 addi s0,s0,4 + 80000094: 01255463 bge a0,s2,8000009c + 80000098: 000a0513 mv a0,s4 + 8000009c: 0004a783 lw a5,0(s1) + 800000a0: 00448493 addi s1,s1,4 + 800000a4: 40f50533 sub a0,a0,a5 + 800000a8: 00153513 seqz a0,a0 + 800000ac: f65ff0ef jal ra,80000010 + 800000b0: fc899ee3 bne s3,s0,8000008c + 800000b4: 00100513 li a0,1 + 800000b8: 008a8a9b addiw s5,s5,8 + 800000bc: f55ff0ef jal ra,80000010 + 800000c0: 004b0b13 addi s6,s6,4 + 800000c4: 020b8b93 addi s7,s7,32 + 800000c8: fb9a9ae3 bne s5,s9,8000007c + 800000cc: 00100513 li a0,1 + 800000d0: f41ff0ef jal ra,80000010 + 800000d4: 05813083 ld ra,88(sp) + 800000d8: 05013403 ld s0,80(sp) + 800000dc: 04813483 ld s1,72(sp) + 800000e0: 04013903 ld s2,64(sp) + 800000e4: 03813983 ld s3,56(sp) + 800000e8: 03013a03 ld s4,48(sp) + 800000ec: 02813a83 ld s5,40(sp) + 800000f0: 02013b03 ld s6,32(sp) + 800000f4: 01813b83 ld s7,24(sp) + 800000f8: 01013c03 ld s8,16(sp) + 800000fc: 00813c83 ld s9,8(sp) + 80000100: 00000513 li a0,0 + 80000104: 06010113 addi sp,sp,96 + 80000108: 00008067 ret + +000000008000010c : + 8000010c: 00050513 mv a0,a0 + 80000110: 0000006b 0x6b + 80000114: 0000006f j 80000114 + +0000000080000118 <_assert>: + 80000118: 00051a63 bnez a0,8000012c <_assert+0x14> + 8000011c: 00100793 li a5,1 + 80000120: 00078513 mv a0,a5 + 80000124: 0000006b 0x6b + 80000128: 0000006f j 80000128 <_assert+0x10> + 8000012c: 00008067 ret + +0000000080000130 <_trm_init>: + 80000130: ff010113 addi sp,sp,-16 + 80000134: 00113423 sd ra,8(sp) + 80000138: 01c000ef jal ra,80000154 + 8000013c: 00000517 auipc a0,0x0 + 80000140: 22c50513 addi a0,a0,556 # 80000368 + 80000144: ee5ff0ef jal ra,80000028
+ 80000148: 00050513 mv a0,a0 + 8000014c: 0000006b 0x6b + 80000150: 0000006f j 80000150 <_trm_init+0x20> + +0000000080000154 : + 80000154: 00000797 auipc a5,0x0 + 80000158: 33c78793 addi a5,a5,828 # 80000490 + 8000015c: 0007b503 ld a0,0(a5) + 80000160: 0087b583 ld a1,8(a5) + 80000164: ff010113 addi sp,sp,-16 + 80000168: 00000693 li a3,0 + 8000016c: 00000613 li a2,0 + 80000170: 40a585b3 sub a1,a1,a0 + 80000174: 00113423 sd ra,8(sp) + 80000178: 018000ef jal ra,80000190 + 8000017c: 00813083 ld ra,8(sp) + 80000180: 00000797 auipc a5,0x0 + 80000184: 32a7b023 sd a0,800(a5) # 800004a0 + 80000188: 01010113 addi sp,sp,16 + 8000018c: 00008067 ret + +0000000080000190 : + 80000190: 1a050e63 beqz a0,8000034c + 80000194: fd010113 addi sp,sp,-48 + 80000198: 02813023 sd s0,32(sp) + 8000019c: 00913c23 sd s1,24(sp) + 800001a0: 01f57793 andi a5,a0,31 + 800001a4: 02113423 sd ra,40(sp) + 800001a8: 01213823 sd s2,16(sp) + 800001ac: 01313423 sd s3,8(sp) + 800001b0: 01413023 sd s4,0(sp) + 800001b4: 00050493 mv s1,a0 + 800001b8: 00050413 mv s0,a0 + 800001bc: 00000513 li a0,0 + 800001c0: 14079a63 bnez a5,80000314 + 800001c4: 27f00713 li a4,639 + 800001c8: 00058913 mv s2,a1 + 800001cc: 00078513 mv a0,a5 + 800001d0: 14b77263 bgeu a4,a1,80000314 + 800001d4: 0074f513 andi a0,s1,7 + 800001d8: 00153513 seqz a0,a0 + 800001dc: 00060a13 mv s4,a2 + 800001e0: 00068993 mv s3,a3 + 800001e4: f35ff0ef jal ra,80000118 <_assert> + 800001e8: 20048793 addi a5,s1,512 + 800001ec: 2004b023 sd zero,512(s1) + 800001f0: 2144b423 sd s4,520(s1) + 800001f4: 2134b823 sd s3,528(s1) + 800001f8: 00043023 sd zero,0(s0) + 800001fc: 00840413 addi s0,s0,8 + 80000200: fe879ce3 bne a5,s0,800001f8 + 80000204: fff00793 li a5,-1 + 80000208: dc090413 addi s0,s2,-576 + 8000020c: 03f79793 slli a5,a5,0x3f + 80000210: 1287f863 bgeu a5,s0,80000340 + 80000214: 00078413 mv s0,a5 + 80000218: 00100513 li a0,1 + 8000021c: efdff0ef jal ra,80000118 <_assert> + 80000220: f8300793 li a5,-125 + 80000224: 0017d793 srli a5,a5,0x1 + 80000228: fc040513 addi a0,s0,-64 + 8000022c: 00f53533 sltu a0,a0,a5 + 80000230: ee9ff0ef jal ra,80000118 <_assert> + 80000234: 01f4f513 andi a0,s1,31 + 80000238: 00153513 seqz a0,a0 + 8000023c: eddff0ef jal ra,80000118 <_assert> + 80000240: 00100513 li a0,1 + 80000244: 2404b023 sd zero,576(s1) + 80000248: 2404b423 sd zero,584(s1) + 8000024c: 2484b823 sd s0,592(s1) + 80000250: 24048c23 sb zero,600(s1) + 80000254: 2604b023 sd zero,608(s1) + 80000258: 2604b423 sd zero,616(s1) + 8000025c: ebdff0ef jal ra,80000118 <_assert> + 80000260: 00100513 li a0,1 + 80000264: eb5ff0ef jal ra,80000118 <_assert> + 80000268: 2504b503 ld a0,592(s1) + 8000026c: 24048a13 addi s4,s1,576 + 80000270: 04053513 sltiu a0,a0,64 + 80000274: 00154513 xori a0,a0,1 + 80000278: 00157513 andi a0,a0,1 + 8000027c: e9dff0ef jal ra,80000118 <_assert> + 80000280: 2504b503 ld a0,592(s1) + 80000284: 03f57513 andi a0,a0,63 + 80000288: 00153513 seqz a0,a0 + 8000028c: e8dff0ef jal ra,80000118 <_assert> + 80000290: 2504b703 ld a4,592(s1) + 80000294: 00100793 li a5,1 + 80000298: 00675713 srli a4,a4,0x6 + 8000029c: 0ae7fc63 bgeu a5,a4,80000354 + 800002a0: 00000793 li a5,0 + 800002a4: 00100693 li a3,1 + 800002a8: 0017879b addiw a5,a5,1 + 800002ac: 00175713 srli a4,a4,0x1 + 800002b0: 0ff7f793 andi a5,a5,255 + 800002b4: fed71ae3 bne a4,a3,800002a8 + 800002b8: 00078993 mv s3,a5 + 800002bc: 0407b513 sltiu a0,a5,64 + 800002c0: 00f71933 sll s2,a4,a5 + 800002c4: e55ff0ef jal ra,80000118 <_assert> + 800002c8: 00399793 slli a5,s3,0x3 + 800002cc: 00f487b3 add a5,s1,a5 + 800002d0: 0007b703 ld a4,0(a5) + 800002d4: 2604b423 sd zero,616(s1) + 800002d8: 26e4b023 sd a4,608(s1) + 800002dc: 00070463 beqz a4,800002e4 + 800002e0: 03473423 sd s4,40(a4) + 800002e4: 0147b023 sd s4,0(a5) + 800002e8: 2004b503 ld a0,512(s1) + 800002ec: 00a96533 or a0,s2,a0 + 800002f0: 20a4b023 sd a0,512(s1) + 800002f4: 00a03533 snez a0,a0 + 800002f8: e21ff0ef jal ra,80000118 <_assert> + 800002fc: 00048513 mv a0,s1 + 80000300: 2084bc23 sd s0,536(s1) + 80000304: 2204b023 sd zero,544(s1) + 80000308: 2204b423 sd zero,552(s1) + 8000030c: 2204b823 sd zero,560(s1) + 80000310: 2204bc23 sd zero,568(s1) + 80000314: 02813083 ld ra,40(sp) + 80000318: 02013403 ld s0,32(sp) + 8000031c: 01813483 ld s1,24(sp) + 80000320: 01013903 ld s2,16(sp) + 80000324: 00813983 ld s3,8(sp) + 80000328: 00013a03 ld s4,0(sp) + 8000032c: 03010113 addi sp,sp,48 + 80000330: 00008067 ret + 80000334: 00100513 li a0,1 + 80000338: fff40413 addi s0,s0,-1 + 8000033c: dddff0ef jal ra,80000118 <_assert> + 80000340: 03f47793 andi a5,s0,63 + 80000344: fe0798e3 bnez a5,80000334 + 80000348: ed1ff06f j 80000218 + 8000034c: 00000513 li a0,0 + 80000350: 00008067 ret + 80000354: 00100913 li s2,1 + 80000358: 00000993 li s3,0 + 8000035c: 00100513 li a0,1 + 80000360: f65ff06f j 800002c4 diff --git a/bin/non-output/cpu-tests/min3-cpu-tests.elf b/bin/non-output/cpu-tests/min3-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..7433735918b77d2fa0161eb13d76e85aac3d31ba GIT binary patch literal 42272 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 literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/min3-cpu-tests.txt b/bin/non-output/cpu-tests/min3-cpu-tests.txt new file mode 100755 index 0000000..82345cf --- /dev/null +++ b/bin/non-output/cpu-tests/min3-cpu-tests.txt @@ -0,0 +1,250 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/min3-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 154000ef jal ra,80000160 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 118000ef jal ra,8000013c + +0000000080000028
: + 80000028: f9010113 addi sp,sp,-112 + 8000002c: 03613823 sd s6,48(sp) + 80000030: 00000b17 auipc s6,0x0 + 80000034: 470b0b13 addi s6,s6,1136 # 800004a0 + 80000038: 05213823 sd s2,80(sp) + 8000003c: 03713423 sd s7,40(sp) + 80000040: 03813023 sd s8,32(sp) + 80000044: 06113423 sd ra,104(sp) + 80000048: 06813023 sd s0,96(sp) + 8000004c: 04913c23 sd s1,88(sp) + 80000050: 05313423 sd s3,72(sp) + 80000054: 05413023 sd s4,64(sp) + 80000058: 03513c23 sd s5,56(sp) + 8000005c: 01913c23 sd s9,24(sp) + 80000060: 01a13823 sd s10,16(sp) + 80000064: 01b13423 sd s11,8(sp) + 80000068: 00000c17 auipc s8,0x0 + 8000006c: 338c0c13 addi s8,s8,824 # 800003a0 + 80000070: 00000917 auipc s2,0x0 + 80000074: 44090913 addi s2,s2,1088 # 800004b0 + 80000078: 000b0b93 mv s7,s6 + 8000007c: 000baa83 lw s5,0(s7) + 80000080: 000c0993 mv s3,s8 + 80000084: 000b0493 mv s1,s6 + 80000088: 000a8c93 mv s9,s5 + 8000008c: 0004a403 lw s0,0(s1) + 80000090: 008ad463 bge s5,s0,80000098 + 80000094: 000c8413 mv s0,s9 + 80000098: 00098d93 mv s11,s3 + 8000009c: 000b0d13 mv s10,s6 + 800000a0: 00040a13 mv s4,s0 + 800000a4: 000d2503 lw a0,0(s10) + 800000a8: 004d0d13 addi s10,s10,4 + 800000ac: 00a45463 bge s0,a0,800000b4 + 800000b0: 000a0513 mv a0,s4 + 800000b4: 000da783 lw a5,0(s11) + 800000b8: 004d8d93 addi s11,s11,4 + 800000bc: 40f50533 sub a0,a0,a5 + 800000c0: 00153513 seqz a0,a0 + 800000c4: f4dff0ef jal ra,80000010 + 800000c8: fd2d1ee3 bne s10,s2,800000a4 + 800000cc: 00100513 li a0,1 + 800000d0: 00448493 addi s1,s1,4 + 800000d4: f3dff0ef jal ra,80000010 + 800000d8: 01098993 addi s3,s3,16 + 800000dc: fba498e3 bne s1,s10,8000008c + 800000e0: 00100513 li a0,1 + 800000e4: 004b8b93 addi s7,s7,4 + 800000e8: f29ff0ef jal ra,80000010 + 800000ec: 040c0c13 addi s8,s8,64 + 800000f0: f89b96e3 bne s7,s1,8000007c + 800000f4: 00100513 li a0,1 + 800000f8: f19ff0ef jal ra,80000010 + 800000fc: 06813083 ld ra,104(sp) + 80000100: 06013403 ld s0,96(sp) + 80000104: 05813483 ld s1,88(sp) + 80000108: 05013903 ld s2,80(sp) + 8000010c: 04813983 ld s3,72(sp) + 80000110: 04013a03 ld s4,64(sp) + 80000114: 03813a83 ld s5,56(sp) + 80000118: 03013b03 ld s6,48(sp) + 8000011c: 02813b83 ld s7,40(sp) + 80000120: 02013c03 ld s8,32(sp) + 80000124: 01813c83 ld s9,24(sp) + 80000128: 01013d03 ld s10,16(sp) + 8000012c: 00813d83 ld s11,8(sp) + 80000130: 00000513 li a0,0 + 80000134: 07010113 addi sp,sp,112 + 80000138: 00008067 ret + +000000008000013c : + 8000013c: 00050513 mv a0,a0 + 80000140: 0000006b 0x6b + 80000144: 0000006f j 80000144 + +0000000080000148 <_assert>: + 80000148: 00051a63 bnez a0,8000015c <_assert+0x14> + 8000014c: 00100793 li a5,1 + 80000150: 00078513 mv a0,a5 + 80000154: 0000006b 0x6b + 80000158: 0000006f j 80000158 <_assert+0x10> + 8000015c: 00008067 ret + +0000000080000160 <_trm_init>: + 80000160: ff010113 addi sp,sp,-16 + 80000164: 00113423 sd ra,8(sp) + 80000168: 01c000ef jal ra,80000184 + 8000016c: 00000517 auipc a0,0x0 + 80000170: 22c50513 addi a0,a0,556 # 80000398 + 80000174: eb5ff0ef jal ra,80000028
+ 80000178: 00050513 mv a0,a0 + 8000017c: 0000006b 0x6b + 80000180: 0000006f j 80000180 <_trm_init+0x20> + +0000000080000184 : + 80000184: 00000797 auipc a5,0x0 + 80000188: 32c78793 addi a5,a5,812 # 800004b0 + 8000018c: 0007b503 ld a0,0(a5) + 80000190: 0087b583 ld a1,8(a5) + 80000194: ff010113 addi sp,sp,-16 + 80000198: 00000693 li a3,0 + 8000019c: 00000613 li a2,0 + 800001a0: 40a585b3 sub a1,a1,a0 + 800001a4: 00113423 sd ra,8(sp) + 800001a8: 018000ef jal ra,800001c0 + 800001ac: 00813083 ld ra,8(sp) + 800001b0: 00000797 auipc a5,0x0 + 800001b4: 30a7b823 sd a0,784(a5) # 800004c0 + 800001b8: 01010113 addi sp,sp,16 + 800001bc: 00008067 ret + +00000000800001c0 : + 800001c0: 1a050e63 beqz a0,8000037c + 800001c4: fd010113 addi sp,sp,-48 + 800001c8: 02813023 sd s0,32(sp) + 800001cc: 00913c23 sd s1,24(sp) + 800001d0: 01f57793 andi a5,a0,31 + 800001d4: 02113423 sd ra,40(sp) + 800001d8: 01213823 sd s2,16(sp) + 800001dc: 01313423 sd s3,8(sp) + 800001e0: 01413023 sd s4,0(sp) + 800001e4: 00050493 mv s1,a0 + 800001e8: 00050413 mv s0,a0 + 800001ec: 00000513 li a0,0 + 800001f0: 14079a63 bnez a5,80000344 + 800001f4: 27f00713 li a4,639 + 800001f8: 00058913 mv s2,a1 + 800001fc: 00078513 mv a0,a5 + 80000200: 14b77263 bgeu a4,a1,80000344 + 80000204: 0074f513 andi a0,s1,7 + 80000208: 00153513 seqz a0,a0 + 8000020c: 00060a13 mv s4,a2 + 80000210: 00068993 mv s3,a3 + 80000214: f35ff0ef jal ra,80000148 <_assert> + 80000218: 20048793 addi a5,s1,512 + 8000021c: 2004b023 sd zero,512(s1) + 80000220: 2144b423 sd s4,520(s1) + 80000224: 2134b823 sd s3,528(s1) + 80000228: 00043023 sd zero,0(s0) + 8000022c: 00840413 addi s0,s0,8 + 80000230: fe879ce3 bne a5,s0,80000228 + 80000234: fff00793 li a5,-1 + 80000238: dc090413 addi s0,s2,-576 + 8000023c: 03f79793 slli a5,a5,0x3f + 80000240: 1287f863 bgeu a5,s0,80000370 + 80000244: 00078413 mv s0,a5 + 80000248: 00100513 li a0,1 + 8000024c: efdff0ef jal ra,80000148 <_assert> + 80000250: f8300793 li a5,-125 + 80000254: 0017d793 srli a5,a5,0x1 + 80000258: fc040513 addi a0,s0,-64 + 8000025c: 00f53533 sltu a0,a0,a5 + 80000260: ee9ff0ef jal ra,80000148 <_assert> + 80000264: 01f4f513 andi a0,s1,31 + 80000268: 00153513 seqz a0,a0 + 8000026c: eddff0ef jal ra,80000148 <_assert> + 80000270: 00100513 li a0,1 + 80000274: 2404b023 sd zero,576(s1) + 80000278: 2404b423 sd zero,584(s1) + 8000027c: 2484b823 sd s0,592(s1) + 80000280: 24048c23 sb zero,600(s1) + 80000284: 2604b023 sd zero,608(s1) + 80000288: 2604b423 sd zero,616(s1) + 8000028c: ebdff0ef jal ra,80000148 <_assert> + 80000290: 00100513 li a0,1 + 80000294: eb5ff0ef jal ra,80000148 <_assert> + 80000298: 2504b503 ld a0,592(s1) + 8000029c: 24048a13 addi s4,s1,576 + 800002a0: 04053513 sltiu a0,a0,64 + 800002a4: 00154513 xori a0,a0,1 + 800002a8: 00157513 andi a0,a0,1 + 800002ac: e9dff0ef jal ra,80000148 <_assert> + 800002b0: 2504b503 ld a0,592(s1) + 800002b4: 03f57513 andi a0,a0,63 + 800002b8: 00153513 seqz a0,a0 + 800002bc: e8dff0ef jal ra,80000148 <_assert> + 800002c0: 2504b703 ld a4,592(s1) + 800002c4: 00100793 li a5,1 + 800002c8: 00675713 srli a4,a4,0x6 + 800002cc: 0ae7fc63 bgeu a5,a4,80000384 + 800002d0: 00000793 li a5,0 + 800002d4: 00100693 li a3,1 + 800002d8: 0017879b addiw a5,a5,1 + 800002dc: 00175713 srli a4,a4,0x1 + 800002e0: 0ff7f793 andi a5,a5,255 + 800002e4: fed71ae3 bne a4,a3,800002d8 + 800002e8: 00078993 mv s3,a5 + 800002ec: 0407b513 sltiu a0,a5,64 + 800002f0: 00f71933 sll s2,a4,a5 + 800002f4: e55ff0ef jal ra,80000148 <_assert> + 800002f8: 00399793 slli a5,s3,0x3 + 800002fc: 00f487b3 add a5,s1,a5 + 80000300: 0007b703 ld a4,0(a5) + 80000304: 2604b423 sd zero,616(s1) + 80000308: 26e4b023 sd a4,608(s1) + 8000030c: 00070463 beqz a4,80000314 + 80000310: 03473423 sd s4,40(a4) + 80000314: 0147b023 sd s4,0(a5) + 80000318: 2004b503 ld a0,512(s1) + 8000031c: 00a96533 or a0,s2,a0 + 80000320: 20a4b023 sd a0,512(s1) + 80000324: 00a03533 snez a0,a0 + 80000328: e21ff0ef jal ra,80000148 <_assert> + 8000032c: 00048513 mv a0,s1 + 80000330: 2084bc23 sd s0,536(s1) + 80000334: 2204b023 sd zero,544(s1) + 80000338: 2204b423 sd zero,552(s1) + 8000033c: 2204b823 sd zero,560(s1) + 80000340: 2204bc23 sd zero,568(s1) + 80000344: 02813083 ld ra,40(sp) + 80000348: 02013403 ld s0,32(sp) + 8000034c: 01813483 ld s1,24(sp) + 80000350: 01013903 ld s2,16(sp) + 80000354: 00813983 ld s3,8(sp) + 80000358: 00013a03 ld s4,0(sp) + 8000035c: 03010113 addi sp,sp,48 + 80000360: 00008067 ret + 80000364: 00100513 li a0,1 + 80000368: fff40413 addi s0,s0,-1 + 8000036c: dddff0ef jal ra,80000148 <_assert> + 80000370: 03f47793 andi a5,s0,63 + 80000374: fe0798e3 bnez a5,80000364 + 80000378: ed1ff06f j 80000248 + 8000037c: 00000513 li a0,0 + 80000380: 00008067 ret + 80000384: 00100913 li s2,1 + 80000388: 00000993 li s3,0 + 8000038c: 00100513 li a0,1 + 80000390: f65ff06f j 800002f4 diff --git a/bin/non-output/cpu-tests/mov-c-cpu-tests.elf b/bin/non-output/cpu-tests/mov-c-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..f89fcebbb268f00896b7176ad8e557926c6dc5c4 GIT binary patch literal 40880 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: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 12c000ef jal ra,80000138 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 0f0000ef jal ra,80000114 + +0000000080000028
: + 80000028: ff010113 addi sp,sp,-16 + 8000002c: 00813023 sd s0,0(sp) + 80000030: 00000417 auipc s0,0x0 + 80000034: 36840413 addi s0,s0,872 # 80000398 + 80000038: 00042023 sw zero,0(s0) + 8000003c: 00100793 li a5,1 + 80000040: 00f42223 sw a5,4(s0) + 80000044: 00200793 li a5,2 + 80000048: 00f42423 sw a5,8(s0) + 8000004c: 00300793 li a5,3 + 80000050: 00f42623 sw a5,12(s0) + 80000054: 00400793 li a5,4 + 80000058: 00f42823 sw a5,16(s0) + 8000005c: 00c42783 lw a5,12(s0) + 80000060: 00113423 sd ra,8(sp) + 80000064: 00000717 auipc a4,0x0 + 80000068: 32f72623 sw a5,812(a4) # 80000390 + 8000006c: 00000797 auipc a5,0x0 + 80000070: 3247a783 lw a5,804(a5) # 80000390 + 80000074: 00f42a23 sw a5,20(s0) + 80000078: 00042503 lw a0,0(s0) + 8000007c: 0005051b sext.w a0,a0 + 80000080: 00153513 seqz a0,a0 + 80000084: f8dff0ef jal ra,80000010 + 80000088: 00442503 lw a0,4(s0) + 8000008c: 0005051b sext.w a0,a0 + 80000090: fff50513 addi a0,a0,-1 + 80000094: 00153513 seqz a0,a0 + 80000098: f79ff0ef jal ra,80000010 + 8000009c: 00842503 lw a0,8(s0) + 800000a0: 0005051b sext.w a0,a0 + 800000a4: ffe50513 addi a0,a0,-2 + 800000a8: 00153513 seqz a0,a0 + 800000ac: f65ff0ef jal ra,80000010 + 800000b0: 00c42503 lw a0,12(s0) + 800000b4: 0005051b sext.w a0,a0 + 800000b8: ffd50513 addi a0,a0,-3 + 800000bc: 00153513 seqz a0,a0 + 800000c0: f51ff0ef jal ra,80000010 + 800000c4: 01042503 lw a0,16(s0) + 800000c8: 0005051b sext.w a0,a0 + 800000cc: ffc50513 addi a0,a0,-4 + 800000d0: 00153513 seqz a0,a0 + 800000d4: f3dff0ef jal ra,80000010 + 800000d8: 00000517 auipc a0,0x0 + 800000dc: 2b852503 lw a0,696(a0) # 80000390 + 800000e0: ffd50513 addi a0,a0,-3 + 800000e4: 00153513 seqz a0,a0 + 800000e8: f29ff0ef jal ra,80000010 + 800000ec: 01442503 lw a0,20(s0) + 800000f0: 0005051b sext.w a0,a0 + 800000f4: ffd50513 addi a0,a0,-3 + 800000f8: 00153513 seqz a0,a0 + 800000fc: f15ff0ef jal ra,80000010 + 80000100: 00813083 ld ra,8(sp) + 80000104: 00013403 ld s0,0(sp) + 80000108: 00000513 li a0,0 + 8000010c: 01010113 addi sp,sp,16 + 80000110: 00008067 ret + +0000000080000114 : + 80000114: 00050513 mv a0,a0 + 80000118: 0000006b 0x6b + 8000011c: 0000006f j 8000011c + +0000000080000120 <_assert>: + 80000120: 00051a63 bnez a0,80000134 <_assert+0x14> + 80000124: 00100793 li a5,1 + 80000128: 00078513 mv a0,a5 + 8000012c: 0000006b 0x6b + 80000130: 0000006f j 80000130 <_assert+0x10> + 80000134: 00008067 ret + +0000000080000138 <_trm_init>: + 80000138: ff010113 addi sp,sp,-16 + 8000013c: 00113423 sd ra,8(sp) + 80000140: 01c000ef jal ra,8000015c + 80000144: 00000517 auipc a0,0x0 + 80000148: 22c50513 addi a0,a0,556 # 80000370 + 8000014c: eddff0ef jal ra,80000028
+ 80000150: 00050513 mv a0,a0 + 80000154: 0000006b 0x6b + 80000158: 0000006f j 80000158 <_trm_init+0x20> + +000000008000015c : + 8000015c: 00000797 auipc a5,0x0 + 80000160: 21c78793 addi a5,a5,540 # 80000378 + 80000164: 0007b503 ld a0,0(a5) + 80000168: 0087b583 ld a1,8(a5) + 8000016c: ff010113 addi sp,sp,-16 + 80000170: 00000693 li a3,0 + 80000174: 00000613 li a2,0 + 80000178: 40a585b3 sub a1,a1,a0 + 8000017c: 00113423 sd ra,8(sp) + 80000180: 018000ef jal ra,80000198 + 80000184: 00813083 ld ra,8(sp) + 80000188: 00000797 auipc a5,0x0 + 8000018c: 20a7b023 sd a0,512(a5) # 80000388 + 80000190: 01010113 addi sp,sp,16 + 80000194: 00008067 ret + +0000000080000198 : + 80000198: 1a050e63 beqz a0,80000354 + 8000019c: fd010113 addi sp,sp,-48 + 800001a0: 02813023 sd s0,32(sp) + 800001a4: 00913c23 sd s1,24(sp) + 800001a8: 01f57793 andi a5,a0,31 + 800001ac: 02113423 sd ra,40(sp) + 800001b0: 01213823 sd s2,16(sp) + 800001b4: 01313423 sd s3,8(sp) + 800001b8: 01413023 sd s4,0(sp) + 800001bc: 00050493 mv s1,a0 + 800001c0: 00050413 mv s0,a0 + 800001c4: 00000513 li a0,0 + 800001c8: 14079a63 bnez a5,8000031c + 800001cc: 27f00713 li a4,639 + 800001d0: 00058913 mv s2,a1 + 800001d4: 00078513 mv a0,a5 + 800001d8: 14b77263 bgeu a4,a1,8000031c + 800001dc: 0074f513 andi a0,s1,7 + 800001e0: 00153513 seqz a0,a0 + 800001e4: 00060a13 mv s4,a2 + 800001e8: 00068993 mv s3,a3 + 800001ec: f35ff0ef jal ra,80000120 <_assert> + 800001f0: 20048793 addi a5,s1,512 + 800001f4: 2004b023 sd zero,512(s1) + 800001f8: 2144b423 sd s4,520(s1) + 800001fc: 2134b823 sd s3,528(s1) + 80000200: 00043023 sd zero,0(s0) + 80000204: 00840413 addi s0,s0,8 + 80000208: fe879ce3 bne a5,s0,80000200 + 8000020c: fff00793 li a5,-1 + 80000210: dc090413 addi s0,s2,-576 + 80000214: 03f79793 slli a5,a5,0x3f + 80000218: 1287f863 bgeu a5,s0,80000348 + 8000021c: 00078413 mv s0,a5 + 80000220: 00100513 li a0,1 + 80000224: efdff0ef jal ra,80000120 <_assert> + 80000228: f8300793 li a5,-125 + 8000022c: 0017d793 srli a5,a5,0x1 + 80000230: fc040513 addi a0,s0,-64 + 80000234: 00f53533 sltu a0,a0,a5 + 80000238: ee9ff0ef jal ra,80000120 <_assert> + 8000023c: 01f4f513 andi a0,s1,31 + 80000240: 00153513 seqz a0,a0 + 80000244: eddff0ef jal ra,80000120 <_assert> + 80000248: 00100513 li a0,1 + 8000024c: 2404b023 sd zero,576(s1) + 80000250: 2404b423 sd zero,584(s1) + 80000254: 2484b823 sd s0,592(s1) + 80000258: 24048c23 sb zero,600(s1) + 8000025c: 2604b023 sd zero,608(s1) + 80000260: 2604b423 sd zero,616(s1) + 80000264: ebdff0ef jal ra,80000120 <_assert> + 80000268: 00100513 li a0,1 + 8000026c: eb5ff0ef jal ra,80000120 <_assert> + 80000270: 2504b503 ld a0,592(s1) + 80000274: 24048a13 addi s4,s1,576 + 80000278: 04053513 sltiu a0,a0,64 + 8000027c: 00154513 xori a0,a0,1 + 80000280: 00157513 andi a0,a0,1 + 80000284: e9dff0ef jal ra,80000120 <_assert> + 80000288: 2504b503 ld a0,592(s1) + 8000028c: 03f57513 andi a0,a0,63 + 80000290: 00153513 seqz a0,a0 + 80000294: e8dff0ef jal ra,80000120 <_assert> + 80000298: 2504b703 ld a4,592(s1) + 8000029c: 00100793 li a5,1 + 800002a0: 00675713 srli a4,a4,0x6 + 800002a4: 0ae7fc63 bgeu a5,a4,8000035c + 800002a8: 00000793 li a5,0 + 800002ac: 00100693 li a3,1 + 800002b0: 0017879b addiw a5,a5,1 + 800002b4: 00175713 srli a4,a4,0x1 + 800002b8: 0ff7f793 andi a5,a5,255 + 800002bc: fed71ae3 bne a4,a3,800002b0 + 800002c0: 00078993 mv s3,a5 + 800002c4: 0407b513 sltiu a0,a5,64 + 800002c8: 00f71933 sll s2,a4,a5 + 800002cc: e55ff0ef jal ra,80000120 <_assert> + 800002d0: 00399793 slli a5,s3,0x3 + 800002d4: 00f487b3 add a5,s1,a5 + 800002d8: 0007b703 ld a4,0(a5) + 800002dc: 2604b423 sd zero,616(s1) + 800002e0: 26e4b023 sd a4,608(s1) + 800002e4: 00070463 beqz a4,800002ec + 800002e8: 03473423 sd s4,40(a4) + 800002ec: 0147b023 sd s4,0(a5) + 800002f0: 2004b503 ld a0,512(s1) + 800002f4: 00a96533 or a0,s2,a0 + 800002f8: 20a4b023 sd a0,512(s1) + 800002fc: 00a03533 snez a0,a0 + 80000300: e21ff0ef jal ra,80000120 <_assert> + 80000304: 00048513 mv a0,s1 + 80000308: 2084bc23 sd s0,536(s1) + 8000030c: 2204b023 sd zero,544(s1) + 80000310: 2204b423 sd zero,552(s1) + 80000314: 2204b823 sd zero,560(s1) + 80000318: 2204bc23 sd zero,568(s1) + 8000031c: 02813083 ld ra,40(sp) + 80000320: 02013403 ld s0,32(sp) + 80000324: 01813483 ld s1,24(sp) + 80000328: 01013903 ld s2,16(sp) + 8000032c: 00813983 ld s3,8(sp) + 80000330: 00013a03 ld s4,0(sp) + 80000334: 03010113 addi sp,sp,48 + 80000338: 00008067 ret + 8000033c: 00100513 li a0,1 + 80000340: fff40413 addi s0,s0,-1 + 80000344: dddff0ef jal ra,80000120 <_assert> + 80000348: 03f47793 andi a5,s0,63 + 8000034c: fe0798e3 bnez a5,8000033c + 80000350: ed1ff06f j 80000220 + 80000354: 00000513 li a0,0 + 80000358: 00008067 ret + 8000035c: 00100913 li s2,1 + 80000360: 00000993 li s3,0 + 80000364: 00100513 li a0,1 + 80000368: f65ff06f j 800002cc diff --git a/bin/non-output/cpu-tests/movsx-cpu-tests.elf b/bin/non-output/cpu-tests/movsx-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..998fdcb17d635318903381d78f67cc7c236f335b GIT binary patch literal 41424 zcmeHw33wdUmF~S=U9E0O-D;_|wY;@0Z`jsiV*_TDL4cjd1P1~bW00j*+fpp4h19a; z48igO#)S8P5y32;Kmq|Wga-+M@ba7l9*_XTfXBc9c_i?_OvrguYJ z)w0cyFQ4oCy6WC@&wkH2_f~bOwc*q=PV;fj^x|jH#6-4Ih5Bq%RVpk!$^lcaM%NfJ#g3qhdprE z1BX3u*aL?>aM%NfJ#g3qhdprE12zxDa9>_^En_kM$fxhIrU^;E$yN_hpMM%NqpWs* zDSM9%#nJzy_Lz;V3ivU+{F4#02JOGpHg5FQ9)B$xUbl|}-&cFgWL)R++QvnE7%>&259B9rDkzT? z?41$YhCXyn_Wh_lwlBlT{#apv4Q~rz&RhO4yw#tmy$_!sHczg7X#V6{JV=W9x3D*M zZ2e@oVDG0ff9RFr?H?M+kG7V@wiJMO6m+k?hZy{5_{A#p{eM1k!9Kulc{jH2eJ=g` z>hDBM-{+rN`$K#l+A_8FDqQdLPe*?`=--xnTHZDu@K1|f>7N=~VESXHLbm~mMa&z) z2lg3?-&@9y{L_Tr&s)usfBsD&;*1RkqU`3a(BZr)HvHj-C2!Qc_{s1#==eZ^|H$}< zWZ#>^+ZVF?w<1=5RKQ4f?R|TuC;e#8Ki#Ok?{p41i6c|rg|BZ<9J%0D&`f$gb{TSH z=N9tI6wpkmeF&eO{wbIjAL7G@_~6Du#L2>q%s7_QJQ^}i5EuUUKZX9k8eaFl@x~1W zpQQIrf-jiN^-z=zhbT6pEWNko1B6rdxP}d>&J}c>>0=D(j3dY|!MXTEoW7KOen=zY z@bO?H8a`jai5T_y3no%8SP-WR56r{GI8`8+R{_EAH#>VW%vdI{5S)yeLGV~8`#3XS z)IS8wK-7qa?m)lbUG$975TyVMrh3}ZDWy)3h01X;%8X686wao0LnV>;xNj{kMJ+hJ zfRE5VgyMsCcoFj%5rT${Ccm^g+y>1fgdH-DQLv&j&@F>#P3%KEd`kL9SSk> z_vrcpCYdyoNru+}L;m5bd*AYL6p=t60V-q)C}i$I zKd3^cl?Fp9WT+El0TnXa(9B89A_!y3r$`CR=4ZqR9x|#GYRS#SC>eN7O~O<`0ML$`Fc9raWf<=$I2%yDy!5vK zeWVbJHDaf6F~DUX5TE5N_Kq4q3)0Fp@lI0-bKmkj!$-A zu#|iX?I)0+olXmPkS*H4i6%Pq;U|YDQhL#cH<|1q!2IkZoK>iO6V3DS8M4W}7BO*% zLhTf=_Wf(sAqce~g-emDQMP~!Y=a2@v`N3la51&RU%-hM)R4>&l13ikGYLAmx&)30 z8CWET2woW6jdSELevCDGIRAWLm-J@(Fk0FQ%nR|+Q_Hr4V=2GD_ygvIm3>V7XA}^Y z^WZza1wOGaKp8%xf_5R_#mC}vo1ITY%-WQI-zPOZUNPf4UILHuISPEQpjiR6_=Oy0 zqU==?UuBA5a>(a9;uwtW5g3(}hx_oU7-YO!MwLGAcvtK1w=i?Y^eUQt zU0><@I-_nJ@eTz2H_(V&gpJ#P?5~ck2gpxrsWA_z{&D43QJVtPoHprs8hjL|0s=Jo zczY1b6$_d`<*Q0g2atufP`s=zA*xfdG=w0fQLxWdOoT@Qe^$d+%!Q->QF@zhJDiMvhO2C{T03ueuB>`6uU=5Lco5#sP z9}?hta?ouOuz_wOJR|0M9@?jkdlgu0;?Xugu7pDT4j%pu)Gc3%0UsP&-i*dEXvArF z(hBqv3B-*)ZY84K@pht_3wRHq5^(Zy=o@d8laTMO>ck=MdP(@h06t!Mhd^s9%8g^UUL`1ve=MoKB zypvD~C@e0-rchYiBzA{677r2Sp4k~tdRTlFz+M*LCgBHcaqJG;9BZHP@9{9jTKUf~ z_)VxA-s#&?vBR^oeVu5SaAXhL)W1v47~{rN76uxlZ$=do(J%{WA{zb< z4Ua$oUj)KJLMQ+90xRAGpzzP#=n4NkgN7r5zXTF54|GWQem#&I!M&uzqdfctDoK=e z)ul@3dJRc&<$^B;lD^5UR#a8r$75{{WBRp3U<(}F921*&8IZ>69 zrGL!BmK^Gw&ImF201vm2kyKURhk7C=t71?yNA}+X2mTEVvZHGnkH{@0IbuHlPOjpO zD4r@Xa#X|S@lhD*r>#$v?ymS$UO=}k&V%omj3+#D^Ej2yq21B3a8KzREbE|IL^q^2 z0wA}*GkFm)`3Qgsd$AY(J{nbv44}^Cm4tc`YikOfb2X)`hpHqkF8Q^vEeC*|V=5Q;wwRH1nF zI8uDNU2y`?!M&Bgm6$H%bw1Qo8H?WcjK}fN5kL{U&$T2aXZpT~A%sZD7FIi?4?eeU zKTBE;`DK#4V9SOrA{J3N<)I!;#4oq=E&Z7mv0)DUY~LtrI({iPU()K{Nb2V7r*~1^ zyO@Xmq)~RdEQ(>lP)S&;xr%x3|=zb5z zGsTmncj{=hxOF`G;wjtj>gI#$xC!Ws=WOqa{-fw0A)fo}tsn^(O~gDiAXYt06UBJ6 z5nNseRIW-9`81$z5;lf+DQ&Q;5XUcJ!Yn*j`C|pq$Zh3bg@bRW7_a1^Tj6T4TqMCk zEEhMT5vSqoa?xzCA>wc!5$%jGAsPz6X9<;nA_ylYR1kg{4a5f?#|=?~ytWb~@Ftdp zDb+UcItyIeXam zkvcX-yN2|wz%)YNzTJj3?cK2-FdT)!yWlxL;m>}~51a=p3|jmp@q;$v2ba)pLK5$k#Iye|alNa; zpx~d=OXPPo5Z0WV#lWf5X0yLWoo`kcRITQ`OjzF(QO4>Xr_K#k6c`3op*iIOFiWUb zcNPWk)zx>2Blq*aOSlv;i z#bAYaL`u#jib0VLtN~Aw>1i_K@lwW1`Lsx^$cT)KoKscGqd@gdWkp3N0t7`Cuq8-W zzk=W{)hxjv?jmBmsOZ?D z=Ei6&mi2OZ)^Qa!$5q+|Ih>CdaI&@%yXss~sBJy2u;S>S>PK~bgdvE zjuYyY@>XC>{41JCiVI4qBK!2n1SpQdHZW+gh!vX#bMSd=yOdRdZm zt-;umn5Z?%krp6ki+@w5TDi`Eifn#W+NQBeg@?tXx(Icttbl4@yojGexkFsfLK6uL zuGnP~Pb7;K0YY0@1&D3}(NSY!E+v5`%@?!@+lVR(lWBy^nxZu&{91HW9iD1e6`T89 z7T7csAX{h{n_(%4l_l#=RpDnkL-Yt|T+Xrsuo%}PBxFF$P~`(pJ2Z&$u+EOLBqmEt zy*;NGYw!r!C}Tsk&?eNCv*o%uQ-S;p?+@HUNcKa&NAik#&BMp$x^V3H)CO}m=mICm zTb>i^Gv{@YQ=-8x-QY5jGZ&td&c_-($XuQ<*oLJpJTF=&e-BR_unY4gbWIv(%ba=< zuM1ojIk9}~t4H=YxTvlb`F+0P5bH8-4{?_`vpr@XSl8|ID?FFdCfCTklG z4kw)8Ac2z@!J?ac6seIE29f)@M=JyP??MZ(ud#qPe9#N-*7fra=Defc z1JP~GftQTDYs6+#Os&c`^c-H`DE(T-4^%Um8(-Ut*L7v$8a&`KH zv$jJ9ax+SPmLMl@uUhN1_IktIJD+^<^3&tc@y~1d%V$=dihGm*50IP6RgVK~Q#5eY zG>>$0q2|FYkAm+tRUU5g0C`cmb;>7>-Bhmq#({cs^WT;?^H>vI;p_Hp9w@E}aC33# zGE(g3LFz>DiYijFDi`40E@40n_L|(z3NA~C85LXa+1daD&0}n)}xtw|2K)C|W`&;!K-6#rkife0=2a1P2`n|JW^?9$Ze4B zX?+mzx~V0Doo)s#CE9dT>*c+xa;vsNtCp}-Yu8P!4DniVi|%QCIBVBUtq+1yH|=_? zaAk^Hj|;UPU6vk6-PDpvj|)BYNV@g7Q0q}_xhScdcGWH%Q8oSE9p!><>j<+2+hdlx z=W8{!Hny&H)HzbX*6;Gu{k5B&s|aa!nijQl3{+Y&O_Xl0uoP=) zSIsQ*7AJGB+DUH<`h<_=_mlb!hH3%B8?oxOh3oK!q}M@fhL7QA3h+}QUWfB{E1pm< zIB5Q_ss2g{4L7AH>mK|S6wvrD7daO z&X{-d)2|le_bP^HtXR>HS65wLv>bia-)UB9u~@3hC+A1lAl8vn0dzp>hXu=X4*{lV(%l<({xEdT#%`mxFzEB?XyXRPwZ zitp5KwEm&yf3W=itLeuoZ>;#E`QJHysQDi(zp>Jf72j#UvwyJsob-BMnZ0F|7*4tQ z_MQCK82Ec9_7i|P|5GH4GbdK~@P>|bcdDV|t8ERLRDY(SwYzRjs;?*2)i3(}4awet zIvVM3=$4Ya3N{uF}Fh2Pen>1$19>bhH#9i2TXh_qNUjP%yyX9F4QPOt4BtWV-L zg|&7A1Php1#X>%PFHvI}2B+VpFa!9NFVTqL_dGduf`C@Z4*hBoH^m6h{d&OIAlf!K z`tXb2XBI<ZwS zS&44`-a3S|R>j6z!Nq43(v`F>hmM7M96z)r$7zK8V^R9#h^8pf6!?8Yfk>2=CtQ>m z8QDVz&MQYdn~X8Sl^61&vU$yo?-MZ~Oht5r@I-*~i3nPQ-I-6ic_c%BU$UWlJ@Sq< z4D|Ok^mXw?ZN=*t4eC5n-s zY}1Jm)(K#!z&0)>H0^-=w2;Ct5e4}@;oVURvU66~bal2hAVy?#P-k^AS(off_xF3m z%EAMQmeB%Bs9=Q_A_`hq(bb+>l^b2@xg9A{)iKQsKSG_2G%Ddf;c2TL;0cBVsH^Tz zgO_P;gQ^OPDIkEAc`{Nb+1MKqD^N}PB}l=5rVDiVP|Vr2G0L*&mEP#%?c6IZbfueB zQgtAXN8u(NQ8lEQHAn`ksst>gwiYwVHbB{<2NdTjji)&mXwHhUNfAk0i!^4T0z{R= z3T?|5AzBn6#mXfEE|&S=aB(G^pdW}ClPxEh)*Lp#LdwfZh@@;Sfhu&RKEZXLrh?#M zg{LwJDMwQ?&hG2!Bqks%92bzuZx%`bfP_w3p(PHZA*&T;Qm)&oWJ&bWiBzHg0_;&Y zM29T@_FK#w+B!4+qi&UQ6Hg_UF6&m}W!Cqm`sJ2MR{OdEl>8nE$<0O%uj$RF@h;qG z%CJ$vlg%2$BuAjobk&KrTK8=5i3(1;iwe<}(_byxa;g`jt+o{c$A`(G)kDH14zk5h zf}jIfDNUwPT$6N+N;CnXNZt=5qH;}Fkub#Tl0&(O5SPhVFFVq}@d8T@P%;WE$X3gT z8FlJ{wGwd+y8#HmVS5@wJ{vqR#SmhBlN)nrfNjexu3Uef*8Ke(|L>zp`Niv9_jqFP1R$zj=lsjG90Za+83YtZG zwyF9XPh~ZBb)J1?p28w^ zz*n73p;Ff0$Oo?QgSIw&DHjX-JiI2BKSTWFpkn6{Mr1OD5naV}QX?mf)QFt=+%Tdc z3L{*VoP=Oh9xzsl2KkVXij6994H@5(e2R@%c1S;1J0%cF$g$eqO63@91ozO=Rj^-fh)m<55xf{So={p#u0_WG z`3!uAy~mFQ|D5ogVAIn+>T1J_8@pHF02PnNo{Kk z1)8NHGZY_$(>n@BiwLU#t5p@RMqPpGnng8LVp%6!OLcTk*4zNGQR(3sYUiv+O|f<< z4$?5w*rl>e>4V*?)YS5<%UkAnjRVGaYd+78#wVmxDqsXfe2q5-#T8t>r@6c$xY&)M zJBI%zW+XM_Kp1DD+bvlr0t~UiF)N(9s3P_lY4fs%Y zrFm{o+7}}k;klavV&&KrAV6-kGqtLBSjsYI>qv6;bCrSDSf$vC7N zr0kOgZJ3_SxXKj3#q8Q+Rk|PtVhcJ2*HeAv2$NuZC}_02ah~$*xnonqoS~j^d1+@Z zP?MFr!IKk!xVl>^w7_^lg1|#Ibk#MDy9CNe2HMNY;bl>0#%HiBKC0%-xbyIQWEWmp zY+aQ^1@W}ca6TTB^MPAXxj5+Uh?xgOsb?CW$lFA{xQ=N{0fB$fG4b`hV`7OYz4T;& zR%29vk(Yc3Q0fKb%5y-sa-Y-UA2L2w6J%_ZH4ddsflT9<(l9G-xN(;((LlODct+Pv z`Amv@6_G2rTCTJ8@j939X(RT4+SeHWEW#sqN8!Ge$nM4P97D~_er_prz#PbK>~H=C z;>El()5^nl4lWO`*6aJnf{$eDKHJyI!+A)1H)kFq{iG|ggS|s#q(TZ9n zJd2e>v(&Bx&(@!iR3{ogmO~AypdX>Gv(=qZwT`inx=lYq0c>|gCfe$40rl8LN9Y9g za0me^#2Al_WRYq7L@JWh0*?b%{SpJ{3&q-Q+jgkp1uTrF#b``+&60J%-2suyoz2^UeJmz0-%Ow{b1$U0@ zt(T;?tcSGv%Z&-nr$XNuna3|B5BfV*^S)C9k`e)V2j#P3DThy0oWdb(P)8Dze zC)J*yL3*QsS&(E$YoF`8+mT0dl2amw7eiG}q?);A{bZd_lo z#BOlObm^k-U=YwCLY(wS5; zlkSti-p(W%?X8*Cx_*E=(>+AGYM@87Ef`Ct@$b3&JJNlbgyj?RlJh;15naN%TRVHC zo7>X^P*HIcu5Rthuok?()Y940nPK!*HvYG5ONR9hWRe{&8P2ck@phs0LREu&3#z5J zJJsC+i~BIk@GEPf=~MvG6p~1%*1pyKtfjTTKLuQ;Ic`y`zw@gpsMeDjlraLG`$s3F zul1SyVtxtPc;?*2P-qEATYHl5MPDoYJDPO;UQmPeK91zLsH-cTY|W%tYbM>vdg%WG z%YoDSQsA9RwZr>_!`8NTb+)r~y1ONr9*{xap6X+5ojol*>7G<~Z)QE~O|`CR=}TQa zfLB6W$XeFfzcjrr)pzEqd2Cf*>+0@Qj~W>00VO+4!C(bX8#yCSaTJ$J?Z{TXR@CqTYFoRolvr$3?cKrwnVv*b;ya-RjhvJo|=Jb-DwXJ=ftv#9k#p$kg*4vj_+p>z>E{r0s z`A@6liPx-L7Qo|Btph=V#DT)|5P$0+2VU(<(HwM;yL;hB!b|sNI^iGT88P@Eb`+isZNx)Q%*THG4q@@ zgw=qoadmT#9uVERm(FXfZ=8RG1k3NS=|7Ip&#fAaU&6yaHeQ11zfTWQQ~%xN8IkDX zjri_+jvCjm?dretY>p(FukdHK1-dr+jB5T!^ApWaF2?_UaPr4LHeo9j5Bo*K^}CNm zM~8;%*A=xsq~}U}^lODv(Waw05^W|uz2v?mQF6}2|4_h5KJn47Yw5oi{cmVb81SQ=Zr|7Xx5B6_Jrdf!@%pvcS*!6K^_-V>ZrS`11iTgM`-{ ze_wtg;H98AM$L;~a6$gz8U>tPlRLj>3OHx_?@JUqqaQ&eK23@b>ZdrC;T)BI7?Kcq zZpVf6an`*qz)7w%PSy#ykHsDF^EHL<)N`ALM|1W6xrRIJx(;yCzeDlYk#RlXq^EPe zSSt9q{cxee$7Ki~>)3&o@`DAV#y{ah{GIE~y?~eE#nOb*2lB=7L!1fUSs#A}cogyD z^v~l0?sv`OQ;LssJ$hEbops*&D;l}+wRW`D7E$eXu}8JG7ul_L8>2mOa!rfgI<%xR zw6R^p>^o?^J8o&~?^kxG1RXv*r_Q*8sQ zu|Hpx*6r4|Hrmdp5!w-}W-B(}t5X(DZV$W4ltzRKtUj6UrcJPhVIS7*`XMXK*MS`4 zKtwghR$+$(9~EfG@0`QYWwQRzZ$HRGuLITPvajoxW}@qp?$1MmaIgZ3L&teS(d&3u z!>-DH0tSeurq}hNQPH2Q3DwmppT?a!5~`+u2CsG74=3&yG3bO5{wHJ@j$<54loOZs z4^9}-9d#_78T&y(T&$B5cQrPojzLG4tsQ~>3Q`QmkYfpS(r*Ed6Gn8w z4mvY7eTKa1vlI6k3=phQBdBZr)v|GcV@sgv_4Q_;dC_mXPSVd({PacB>Fe!^UXSbR zLy8`+t>qlf_#r+z_U(wTZI?a7vp7m{rjXS1w4T#J`v8Xs0cW&O;CNYHth3fz1Mp8t QJ?URo^xxNr>guHbPlF>}@&Et; literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/movsx-cpu-tests.txt b/bin/non-output/cpu-tests/movsx-cpu-tests.txt new file mode 100755 index 0000000..07d12ab --- /dev/null +++ b/bin/non-output/cpu-tests/movsx-cpu-tests.txt @@ -0,0 +1,282 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/movsx-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 1d4000ef jal ra,800001e0 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 198000ef jal ra,800001bc + +0000000080000028
: + 80000028: fe010113 addi sp,sp,-32 + 8000002c: 00813823 sd s0,16(sp) + 80000030: 00000417 auipc s0,0x0 + 80000034: 41040413 addi s0,s0,1040 # 80000440 + 80000038: 00042023 sw zero,0(s0) + 8000003c: 00100793 li a5,1 + 80000040: 00f42223 sw a5,4(s0) + 80000044: 00200793 li a5,2 + 80000048: 00f42423 sw a5,8(s0) + 8000004c: 00300793 li a5,3 + 80000050: 00f42623 sw a5,12(s0) + 80000054: 00400793 li a5,4 + 80000058: 00f42823 sw a5,16(s0) + 8000005c: 00c42783 lw a5,12(s0) + 80000060: 00913423 sd s1,8(sp) + 80000064: 00000497 auipc s1,0x0 + 80000068: 40448493 addi s1,s1,1028 # 80000468 + 8000006c: 00000717 auipc a4,0x0 + 80000070: 3cf72623 sw a5,972(a4) # 80000438 + 80000074: 00000797 auipc a5,0x0 + 80000078: 3c47a783 lw a5,964(a5) # 80000438 + 8000007c: 00f42a23 sw a5,20(s0) + 80000080: 06100793 li a5,97 + 80000084: 00f48023 sb a5,0(s1) + 80000088: 0004c503 lbu a0,0(s1) + 8000008c: 00113c23 sd ra,24(sp) + 80000090: 0185151b slliw a0,a0,0x18 + 80000094: 4185551b sraiw a0,a0,0x18 + 80000098: f9f50513 addi a0,a0,-97 + 8000009c: 00153513 seqz a0,a0 + 800000a0: f71ff0ef jal ra,80000010 + 800000a4: 0004c783 lbu a5,0(s1) + 800000a8: 00f480a3 sb a5,1(s1) + 800000ac: 0014c503 lbu a0,1(s1) + 800000b0: 0185151b slliw a0,a0,0x18 + 800000b4: 4185551b sraiw a0,a0,0x18 + 800000b8: f9f50513 addi a0,a0,-97 + 800000bc: 00153513 seqz a0,a0 + 800000c0: f51ff0ef jal ra,80000010 + 800000c4: 0004c783 lbu a5,0(s1) + 800000c8: 0187979b slliw a5,a5,0x18 + 800000cc: 4187d79b sraiw a5,a5,0x18 + 800000d0: 00f42023 sw a5,0(s0) + 800000d4: 00042503 lw a0,0(s0) + 800000d8: 0005051b sext.w a0,a0 + 800000dc: f9f50513 addi a0,a0,-97 + 800000e0: 00153513 seqz a0,a0 + 800000e4: f2dff0ef jal ra,80000010 + 800000e8: f8000793 li a5,-128 + 800000ec: 00f480a3 sb a5,1(s1) + 800000f0: 0014c783 lbu a5,1(s1) + 800000f4: 0187979b slliw a5,a5,0x18 + 800000f8: 4187d79b sraiw a5,a5,0x18 + 800000fc: 00f42023 sw a5,0(s0) + 80000100: 00442503 lw a0,4(s0) + 80000104: 0005051b sext.w a0,a0 + 80000108: fff50513 addi a0,a0,-1 + 8000010c: 00153513 seqz a0,a0 + 80000110: f01ff0ef jal ra,80000010 + 80000114: 00842503 lw a0,8(s0) + 80000118: 0005051b sext.w a0,a0 + 8000011c: ffe50513 addi a0,a0,-2 + 80000120: 00153513 seqz a0,a0 + 80000124: eedff0ef jal ra,80000010 + 80000128: 00c42503 lw a0,12(s0) + 8000012c: 0005051b sext.w a0,a0 + 80000130: ffd50513 addi a0,a0,-3 + 80000134: 00153513 seqz a0,a0 + 80000138: ed9ff0ef jal ra,80000010 + 8000013c: 01042503 lw a0,16(s0) + 80000140: 0005051b sext.w a0,a0 + 80000144: ffc50513 addi a0,a0,-4 + 80000148: 00153513 seqz a0,a0 + 8000014c: ec5ff0ef jal ra,80000010 + 80000150: 00000517 auipc a0,0x0 + 80000154: 2e852503 lw a0,744(a0) # 80000438 + 80000158: ffd50513 addi a0,a0,-3 + 8000015c: 00153513 seqz a0,a0 + 80000160: eb1ff0ef jal ra,80000010 + 80000164: 01442503 lw a0,20(s0) + 80000168: 0005051b sext.w a0,a0 + 8000016c: ffd50513 addi a0,a0,-3 + 80000170: 00153513 seqz a0,a0 + 80000174: e9dff0ef jal ra,80000010 + 80000178: 0014c503 lbu a0,1(s1) + 8000017c: 0185151b slliw a0,a0,0x18 + 80000180: 4185551b sraiw a0,a0,0x18 + 80000184: 08050513 addi a0,a0,128 + 80000188: 00153513 seqz a0,a0 + 8000018c: e85ff0ef jal ra,80000010 + 80000190: 00042503 lw a0,0(s0) + 80000194: 0005051b sext.w a0,a0 + 80000198: 08050513 addi a0,a0,128 + 8000019c: 00153513 seqz a0,a0 + 800001a0: e71ff0ef jal ra,80000010 + 800001a4: 01813083 ld ra,24(sp) + 800001a8: 01013403 ld s0,16(sp) + 800001ac: 00813483 ld s1,8(sp) + 800001b0: 00000513 li a0,0 + 800001b4: 02010113 addi sp,sp,32 + 800001b8: 00008067 ret + +00000000800001bc : + 800001bc: 00050513 mv a0,a0 + 800001c0: 0000006b 0x6b + 800001c4: 0000006f j 800001c4 + +00000000800001c8 <_assert>: + 800001c8: 00051a63 bnez a0,800001dc <_assert+0x14> + 800001cc: 00100793 li a5,1 + 800001d0: 00078513 mv a0,a5 + 800001d4: 0000006b 0x6b + 800001d8: 0000006f j 800001d8 <_assert+0x10> + 800001dc: 00008067 ret + +00000000800001e0 <_trm_init>: + 800001e0: ff010113 addi sp,sp,-16 + 800001e4: 00113423 sd ra,8(sp) + 800001e8: 01c000ef jal ra,80000204 + 800001ec: 00000517 auipc a0,0x0 + 800001f0: 22c50513 addi a0,a0,556 # 80000418 + 800001f4: e35ff0ef jal ra,80000028
+ 800001f8: 00050513 mv a0,a0 + 800001fc: 0000006b 0x6b + 80000200: 0000006f j 80000200 <_trm_init+0x20> + +0000000080000204 : + 80000204: 00000797 auipc a5,0x0 + 80000208: 21c78793 addi a5,a5,540 # 80000420 + 8000020c: 0007b503 ld a0,0(a5) + 80000210: 0087b583 ld a1,8(a5) + 80000214: ff010113 addi sp,sp,-16 + 80000218: 00000693 li a3,0 + 8000021c: 00000613 li a2,0 + 80000220: 40a585b3 sub a1,a1,a0 + 80000224: 00113423 sd ra,8(sp) + 80000228: 018000ef jal ra,80000240 + 8000022c: 00813083 ld ra,8(sp) + 80000230: 00000797 auipc a5,0x0 + 80000234: 20a7b023 sd a0,512(a5) # 80000430 + 80000238: 01010113 addi sp,sp,16 + 8000023c: 00008067 ret + +0000000080000240 : + 80000240: 1a050e63 beqz a0,800003fc + 80000244: fd010113 addi sp,sp,-48 + 80000248: 02813023 sd s0,32(sp) + 8000024c: 00913c23 sd s1,24(sp) + 80000250: 01f57793 andi a5,a0,31 + 80000254: 02113423 sd ra,40(sp) + 80000258: 01213823 sd s2,16(sp) + 8000025c: 01313423 sd s3,8(sp) + 80000260: 01413023 sd s4,0(sp) + 80000264: 00050493 mv s1,a0 + 80000268: 00050413 mv s0,a0 + 8000026c: 00000513 li a0,0 + 80000270: 14079a63 bnez a5,800003c4 + 80000274: 27f00713 li a4,639 + 80000278: 00058913 mv s2,a1 + 8000027c: 00078513 mv a0,a5 + 80000280: 14b77263 bgeu a4,a1,800003c4 + 80000284: 0074f513 andi a0,s1,7 + 80000288: 00153513 seqz a0,a0 + 8000028c: 00060a13 mv s4,a2 + 80000290: 00068993 mv s3,a3 + 80000294: f35ff0ef jal ra,800001c8 <_assert> + 80000298: 20048793 addi a5,s1,512 + 8000029c: 2004b023 sd zero,512(s1) + 800002a0: 2144b423 sd s4,520(s1) + 800002a4: 2134b823 sd s3,528(s1) + 800002a8: 00043023 sd zero,0(s0) + 800002ac: 00840413 addi s0,s0,8 + 800002b0: fe879ce3 bne a5,s0,800002a8 + 800002b4: fff00793 li a5,-1 + 800002b8: dc090413 addi s0,s2,-576 + 800002bc: 03f79793 slli a5,a5,0x3f + 800002c0: 1287f863 bgeu a5,s0,800003f0 + 800002c4: 00078413 mv s0,a5 + 800002c8: 00100513 li a0,1 + 800002cc: efdff0ef jal ra,800001c8 <_assert> + 800002d0: f8300793 li a5,-125 + 800002d4: 0017d793 srli a5,a5,0x1 + 800002d8: fc040513 addi a0,s0,-64 + 800002dc: 00f53533 sltu a0,a0,a5 + 800002e0: ee9ff0ef jal ra,800001c8 <_assert> + 800002e4: 01f4f513 andi a0,s1,31 + 800002e8: 00153513 seqz a0,a0 + 800002ec: eddff0ef jal ra,800001c8 <_assert> + 800002f0: 00100513 li a0,1 + 800002f4: 2404b023 sd zero,576(s1) + 800002f8: 2404b423 sd zero,584(s1) + 800002fc: 2484b823 sd s0,592(s1) + 80000300: 24048c23 sb zero,600(s1) + 80000304: 2604b023 sd zero,608(s1) + 80000308: 2604b423 sd zero,616(s1) + 8000030c: ebdff0ef jal ra,800001c8 <_assert> + 80000310: 00100513 li a0,1 + 80000314: eb5ff0ef jal ra,800001c8 <_assert> + 80000318: 2504b503 ld a0,592(s1) + 8000031c: 24048a13 addi s4,s1,576 + 80000320: 04053513 sltiu a0,a0,64 + 80000324: 00154513 xori a0,a0,1 + 80000328: 00157513 andi a0,a0,1 + 8000032c: e9dff0ef jal ra,800001c8 <_assert> + 80000330: 2504b503 ld a0,592(s1) + 80000334: 03f57513 andi a0,a0,63 + 80000338: 00153513 seqz a0,a0 + 8000033c: e8dff0ef jal ra,800001c8 <_assert> + 80000340: 2504b703 ld a4,592(s1) + 80000344: 00100793 li a5,1 + 80000348: 00675713 srli a4,a4,0x6 + 8000034c: 0ae7fc63 bgeu a5,a4,80000404 + 80000350: 00000793 li a5,0 + 80000354: 00100693 li a3,1 + 80000358: 0017879b addiw a5,a5,1 + 8000035c: 00175713 srli a4,a4,0x1 + 80000360: 0ff7f793 andi a5,a5,255 + 80000364: fed71ae3 bne a4,a3,80000358 + 80000368: 00078993 mv s3,a5 + 8000036c: 0407b513 sltiu a0,a5,64 + 80000370: 00f71933 sll s2,a4,a5 + 80000374: e55ff0ef jal ra,800001c8 <_assert> + 80000378: 00399793 slli a5,s3,0x3 + 8000037c: 00f487b3 add a5,s1,a5 + 80000380: 0007b703 ld a4,0(a5) + 80000384: 2604b423 sd zero,616(s1) + 80000388: 26e4b023 sd a4,608(s1) + 8000038c: 00070463 beqz a4,80000394 + 80000390: 03473423 sd s4,40(a4) + 80000394: 0147b023 sd s4,0(a5) + 80000398: 2004b503 ld a0,512(s1) + 8000039c: 00a96533 or a0,s2,a0 + 800003a0: 20a4b023 sd a0,512(s1) + 800003a4: 00a03533 snez a0,a0 + 800003a8: e21ff0ef jal ra,800001c8 <_assert> + 800003ac: 00048513 mv a0,s1 + 800003b0: 2084bc23 sd s0,536(s1) + 800003b4: 2204b023 sd zero,544(s1) + 800003b8: 2204b423 sd zero,552(s1) + 800003bc: 2204b823 sd zero,560(s1) + 800003c0: 2204bc23 sd zero,568(s1) + 800003c4: 02813083 ld ra,40(sp) + 800003c8: 02013403 ld s0,32(sp) + 800003cc: 01813483 ld s1,24(sp) + 800003d0: 01013903 ld s2,16(sp) + 800003d4: 00813983 ld s3,8(sp) + 800003d8: 00013a03 ld s4,0(sp) + 800003dc: 03010113 addi sp,sp,48 + 800003e0: 00008067 ret + 800003e4: 00100513 li a0,1 + 800003e8: fff40413 addi s0,s0,-1 + 800003ec: dddff0ef jal ra,800001c8 <_assert> + 800003f0: 03f47793 andi a5,s0,63 + 800003f4: fe0798e3 bnez a5,800003e4 + 800003f8: ed1ff06f j 800002c8 + 800003fc: 00000513 li a0,0 + 80000400: 00008067 ret + 80000404: 00100913 li s2,1 + 80000408: 00000993 li s3,0 + 8000040c: 00100513 li a0,1 + 80000410: f65ff06f j 80000374 diff --git a/bin/non-output/cpu-tests/mul-longlong-cpu-tests.elf b/bin/non-output/cpu-tests/mul-longlong-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..a323edd5a8d19119db3fed05b5e8de993d4bc40a GIT binary patch literal 42320 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 G{{I6``s#%M literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/mul-longlong-cpu-tests.txt b/bin/non-output/cpu-tests/mul-longlong-cpu-tests.txt new file mode 100755 index 0000000..c23e801 --- /dev/null +++ b/bin/non-output/cpu-tests/mul-longlong-cpu-tests.txt @@ -0,0 +1,259 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/mul-longlong-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 14c000ef jal ra,80000158 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 110000ef jal ra,80000134 + +0000000080000028
: + 80000028: fa010113 addi sp,sp,-96 + 8000002c: 04913423 sd s1,72(sp) + 80000030: 03313c23 sd s3,56(sp) + 80000034: 03413823 sd s4,48(sp) + 80000038: 03513423 sd s5,40(sp) + 8000003c: 03613023 sd s6,32(sp) + 80000040: 01713c23 sd s7,24(sp) + 80000044: 01813823 sd s8,16(sp) + 80000048: 00000993 li s3,0 + 8000004c: 04113c23 sd ra,88(sp) + 80000050: 04813823 sd s0,80(sp) + 80000054: 05213023 sd s2,64(sp) + 80000058: 01913423 sd s9,8(sp) + 8000005c: 00400a13 li s4,4 + 80000060: 00000b17 auipc s6,0x0 + 80000064: 3a8b0b13 addi s6,s6,936 # 80000408 + 80000068: 00000a93 li s5,0 + 8000006c: 00000c17 auipc s8,0x0 + 80000070: 34cc0c13 addi s8,s8,844 # 800003b8 + 80000074: 00300b93 li s7,3 + 80000078: 0009849b sext.w s1,s3 + 8000007c: 07498663 beq s3,s4,800000e8 + 80000080: 000b2503 lw a0,0(s6) + 80000084: 003a9413 slli s0,s5,0x3 + 80000088: 008c0433 add s0,s8,s0 + 8000008c: 00050c93 mv s9,a0 + 80000090: 000b0913 mv s2,s6 + 80000094: 000c8593 mv a1,s9 + 80000098: 0e4000ef jal ra,8000017c <__muldi3> + 8000009c: 00043783 ld a5,0(s0) + 800000a0: 0014849b addiw s1,s1,1 + 800000a4: 00490913 addi s2,s2,4 + 800000a8: 40a78533 sub a0,a5,a0 + 800000ac: 00153513 seqz a0,a0 + 800000b0: f61ff0ef jal ra,80000010 + 800000b4: 00840413 addi s0,s0,8 + 800000b8: 01448663 beq s1,s4,800000c4 + 800000bc: 00092503 lw a0,0(s2) + 800000c0: fd5ff06f j 80000094 + 800000c4: 004a8a9b addiw s5,s5,4 + 800000c8: 00100513 li a0,1 + 800000cc: 413a8abb subw s5,s5,s3 + 800000d0: f41ff0ef jal ra,80000010 + 800000d4: 03798063 beq s3,s7,800000f4 + 800000d8: 0019899b addiw s3,s3,1 + 800000dc: 004b0b13 addi s6,s6,4 + 800000e0: 0009849b sext.w s1,s3 + 800000e4: f9499ee3 bne s3,s4,80000080 + 800000e8: 00100513 li a0,1 + 800000ec: f25ff0ef jal ra,80000010 + 800000f0: fe9ff06f j 800000d8 + 800000f4: 00100513 li a0,1 + 800000f8: f19ff0ef jal ra,80000010 + 800000fc: 05813083 ld ra,88(sp) + 80000100: 05013403 ld s0,80(sp) + 80000104: 04813483 ld s1,72(sp) + 80000108: 04013903 ld s2,64(sp) + 8000010c: 03813983 ld s3,56(sp) + 80000110: 03013a03 ld s4,48(sp) + 80000114: 02813a83 ld s5,40(sp) + 80000118: 02013b03 ld s6,32(sp) + 8000011c: 01813b83 ld s7,24(sp) + 80000120: 01013c03 ld s8,16(sp) + 80000124: 00813c83 ld s9,8(sp) + 80000128: 00000513 li a0,0 + 8000012c: 06010113 addi sp,sp,96 + 80000130: 00008067 ret + +0000000080000134 : + 80000134: 00050513 mv a0,a0 + 80000138: 0000006b 0x6b + 8000013c: 0000006f j 8000013c + +0000000080000140 <_assert>: + 80000140: 00051a63 bnez a0,80000154 <_assert+0x14> + 80000144: 00100793 li a5,1 + 80000148: 00078513 mv a0,a5 + 8000014c: 0000006b 0x6b + 80000150: 0000006f j 80000150 <_assert+0x10> + 80000154: 00008067 ret + +0000000080000158 <_trm_init>: + 80000158: ff010113 addi sp,sp,-16 + 8000015c: 00113423 sd ra,8(sp) + 80000160: 040000ef jal ra,800001a0 + 80000164: 00000517 auipc a0,0x0 + 80000168: 24c50513 addi a0,a0,588 # 800003b0 <_etext> + 8000016c: ebdff0ef jal ra,80000028
+ 80000170: 00050513 mv a0,a0 + 80000174: 0000006b 0x6b + 80000178: 0000006f j 80000178 <_trm_init+0x20> + +000000008000017c <__muldi3>: + 8000017c: 00050613 mv a2,a0 + 80000180: 00000513 li a0,0 + 80000184: 0015f693 andi a3,a1,1 + 80000188: 00068463 beqz a3,80000190 <__muldi3+0x14> + 8000018c: 00c50533 add a0,a0,a2 + 80000190: 0015d593 srli a1,a1,0x1 + 80000194: 00161613 slli a2,a2,0x1 + 80000198: fe0596e3 bnez a1,80000184 <__muldi3+0x8> + 8000019c: 00008067 ret + +00000000800001a0 : + 800001a0: 00000797 auipc a5,0x0 + 800001a4: 27878793 addi a5,a5,632 # 80000418 + 800001a8: 0007b503 ld a0,0(a5) + 800001ac: 0087b583 ld a1,8(a5) + 800001b0: ff010113 addi sp,sp,-16 + 800001b4: 00000693 li a3,0 + 800001b8: 00000613 li a2,0 + 800001bc: 40a585b3 sub a1,a1,a0 + 800001c0: 00113423 sd ra,8(sp) + 800001c4: 018000ef jal ra,800001dc + 800001c8: 00813083 ld ra,8(sp) + 800001cc: 00000797 auipc a5,0x0 + 800001d0: 24a7be23 sd a0,604(a5) # 80000428 + 800001d4: 01010113 addi sp,sp,16 + 800001d8: 00008067 ret + +00000000800001dc : + 800001dc: 1a050e63 beqz a0,80000398 + 800001e0: fd010113 addi sp,sp,-48 + 800001e4: 02813023 sd s0,32(sp) + 800001e8: 00913c23 sd s1,24(sp) + 800001ec: 01f57793 andi a5,a0,31 + 800001f0: 02113423 sd ra,40(sp) + 800001f4: 01213823 sd s2,16(sp) + 800001f8: 01313423 sd s3,8(sp) + 800001fc: 01413023 sd s4,0(sp) + 80000200: 00050493 mv s1,a0 + 80000204: 00050413 mv s0,a0 + 80000208: 00000513 li a0,0 + 8000020c: 14079a63 bnez a5,80000360 + 80000210: 27f00713 li a4,639 + 80000214: 00058913 mv s2,a1 + 80000218: 00078513 mv a0,a5 + 8000021c: 14b77263 bgeu a4,a1,80000360 + 80000220: 0074f513 andi a0,s1,7 + 80000224: 00153513 seqz a0,a0 + 80000228: 00060a13 mv s4,a2 + 8000022c: 00068993 mv s3,a3 + 80000230: f11ff0ef jal ra,80000140 <_assert> + 80000234: 20048793 addi a5,s1,512 + 80000238: 2004b023 sd zero,512(s1) + 8000023c: 2144b423 sd s4,520(s1) + 80000240: 2134b823 sd s3,528(s1) + 80000244: 00043023 sd zero,0(s0) + 80000248: 00840413 addi s0,s0,8 + 8000024c: fe879ce3 bne a5,s0,80000244 + 80000250: fff00793 li a5,-1 + 80000254: dc090413 addi s0,s2,-576 + 80000258: 03f79793 slli a5,a5,0x3f + 8000025c: 1287f863 bgeu a5,s0,8000038c + 80000260: 00078413 mv s0,a5 + 80000264: 00100513 li a0,1 + 80000268: ed9ff0ef jal ra,80000140 <_assert> + 8000026c: f8300793 li a5,-125 + 80000270: 0017d793 srli a5,a5,0x1 + 80000274: fc040513 addi a0,s0,-64 + 80000278: 00f53533 sltu a0,a0,a5 + 8000027c: ec5ff0ef jal ra,80000140 <_assert> + 80000280: 01f4f513 andi a0,s1,31 + 80000284: 00153513 seqz a0,a0 + 80000288: eb9ff0ef jal ra,80000140 <_assert> + 8000028c: 00100513 li a0,1 + 80000290: 2404b023 sd zero,576(s1) + 80000294: 2404b423 sd zero,584(s1) + 80000298: 2484b823 sd s0,592(s1) + 8000029c: 24048c23 sb zero,600(s1) + 800002a0: 2604b023 sd zero,608(s1) + 800002a4: 2604b423 sd zero,616(s1) + 800002a8: e99ff0ef jal ra,80000140 <_assert> + 800002ac: 00100513 li a0,1 + 800002b0: e91ff0ef jal ra,80000140 <_assert> + 800002b4: 2504b503 ld a0,592(s1) + 800002b8: 24048a13 addi s4,s1,576 + 800002bc: 04053513 sltiu a0,a0,64 + 800002c0: 00154513 xori a0,a0,1 + 800002c4: 00157513 andi a0,a0,1 + 800002c8: e79ff0ef jal ra,80000140 <_assert> + 800002cc: 2504b503 ld a0,592(s1) + 800002d0: 03f57513 andi a0,a0,63 + 800002d4: 00153513 seqz a0,a0 + 800002d8: e69ff0ef jal ra,80000140 <_assert> + 800002dc: 2504b703 ld a4,592(s1) + 800002e0: 00100793 li a5,1 + 800002e4: 00675713 srli a4,a4,0x6 + 800002e8: 0ae7fc63 bgeu a5,a4,800003a0 + 800002ec: 00000793 li a5,0 + 800002f0: 00100693 li a3,1 + 800002f4: 0017879b addiw a5,a5,1 + 800002f8: 00175713 srli a4,a4,0x1 + 800002fc: 0ff7f793 andi a5,a5,255 + 80000300: fed71ae3 bne a4,a3,800002f4 + 80000304: 00078993 mv s3,a5 + 80000308: 0407b513 sltiu a0,a5,64 + 8000030c: 00f71933 sll s2,a4,a5 + 80000310: e31ff0ef jal ra,80000140 <_assert> + 80000314: 00399793 slli a5,s3,0x3 + 80000318: 00f487b3 add a5,s1,a5 + 8000031c: 0007b703 ld a4,0(a5) + 80000320: 2604b423 sd zero,616(s1) + 80000324: 26e4b023 sd a4,608(s1) + 80000328: 00070463 beqz a4,80000330 + 8000032c: 03473423 sd s4,40(a4) + 80000330: 0147b023 sd s4,0(a5) + 80000334: 2004b503 ld a0,512(s1) + 80000338: 00a96533 or a0,s2,a0 + 8000033c: 20a4b023 sd a0,512(s1) + 80000340: 00a03533 snez a0,a0 + 80000344: dfdff0ef jal ra,80000140 <_assert> + 80000348: 00048513 mv a0,s1 + 8000034c: 2084bc23 sd s0,536(s1) + 80000350: 2204b023 sd zero,544(s1) + 80000354: 2204b423 sd zero,552(s1) + 80000358: 2204b823 sd zero,560(s1) + 8000035c: 2204bc23 sd zero,568(s1) + 80000360: 02813083 ld ra,40(sp) + 80000364: 02013403 ld s0,32(sp) + 80000368: 01813483 ld s1,24(sp) + 8000036c: 01013903 ld s2,16(sp) + 80000370: 00813983 ld s3,8(sp) + 80000374: 00013a03 ld s4,0(sp) + 80000378: 03010113 addi sp,sp,48 + 8000037c: 00008067 ret + 80000380: 00100513 li a0,1 + 80000384: fff40413 addi s0,s0,-1 + 80000388: db9ff0ef jal ra,80000140 <_assert> + 8000038c: 03f47793 andi a5,s0,63 + 80000390: fe0798e3 bnez a5,80000380 + 80000394: ed1ff06f j 80000264 + 80000398: 00000513 li a0,0 + 8000039c: 00008067 ret + 800003a0: 00100913 li s2,1 + 800003a4: 00000993 li s3,0 + 800003a8: 00100513 li a0,1 + 800003ac: f65ff06f j 80000310 diff --git a/bin/non-output/cpu-tests/pascal-cpu-tests.elf b/bin/non-output/cpu-tests/pascal-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..bc706456326dfe36e3702b3141fa28f5ca851a95 GIT binary patch literal 41288 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 G{{I8(07mlw literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/pascal-cpu-tests.txt b/bin/non-output/cpu-tests/pascal-cpu-tests.txt new file mode 100755 index 0000000..6295a9f --- /dev/null +++ b/bin/non-output/cpu-tests/pascal-cpu-tests.txt @@ -0,0 +1,236 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/pascal-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 11c000ef jal ra,80000128 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 0e0000ef jal ra,80000104 + +0000000080000028
: + 80000028: fe010113 addi sp,sp,-32 + 8000002c: 00113c23 sd ra,24(sp) + 80000030: 00813823 sd s0,16(sp) + 80000034: 00913423 sd s1,8(sp) + 80000038: 01213023 sd s2,0(sp) + 8000003c: 00000517 auipc a0,0x0 + 80000040: 3c450513 addi a0,a0,964 # 80000400 + 80000044: 00100793 li a5,1 + 80000048: 00f52223 sw a5,4(a0) + 8000004c: 00f52023 sw a5,0(a0) + 80000050: 00000597 auipc a1,0x0 + 80000054: 3b858593 addi a1,a1,952 # 80000408 + 80000058: 00000897 auipc a7,0x0 + 8000005c: 42488893 addi a7,a7,1060 # 8000047c + 80000060: 00100713 li a4,1 + 80000064: 00100813 li a6,1 + 80000068: 00000417 auipc s0,0x0 + 8000006c: 39c40413 addi s0,s0,924 # 80000404 + 80000070: 00040793 mv a5,s0 + 80000074: 00100693 li a3,1 + 80000078: 0080006f j 80000080 + 8000007c: 0007a703 lw a4,0(a5) + 80000080: 00d7063b addw a2,a4,a3 + 80000084: 00c7a023 sw a2,0(a5) + 80000088: 00478793 addi a5,a5,4 + 8000008c: 00070693 mv a3,a4 + 80000090: feb796e3 bne a5,a1,8000007c + 80000094: 0107a023 sw a6,0(a5) + 80000098: 00478593 addi a1,a5,4 + 8000009c: 01158663 beq a1,a7,800000a8 + 800000a0: 00452703 lw a4,4(a0) + 800000a4: fc5ff06f j 80000068 + 800000a8: 00000497 auipc s1,0x0 + 800000ac: 2c048493 addi s1,s1,704 # 80000368 + 800000b0: 00000917 auipc s2,0x0 + 800000b4: 33490913 addi s2,s2,820 # 800003e4 + 800000b8: 00100793 li a5,1 + 800000bc: 00c0006f j 800000c8 + 800000c0: 00042783 lw a5,0(s0) + 800000c4: 00440413 addi s0,s0,4 + 800000c8: 0004a503 lw a0,0(s1) + 800000cc: 00448493 addi s1,s1,4 + 800000d0: 40f50533 sub a0,a0,a5 + 800000d4: 00153513 seqz a0,a0 + 800000d8: f39ff0ef jal ra,80000010 + 800000dc: fe9912e3 bne s2,s1,800000c0 + 800000e0: 00100513 li a0,1 + 800000e4: f2dff0ef jal ra,80000010 + 800000e8: 01813083 ld ra,24(sp) + 800000ec: 01013403 ld s0,16(sp) + 800000f0: 00813483 ld s1,8(sp) + 800000f4: 00013903 ld s2,0(sp) + 800000f8: 00000513 li a0,0 + 800000fc: 02010113 addi sp,sp,32 + 80000100: 00008067 ret + +0000000080000104 : + 80000104: 00050513 mv a0,a0 + 80000108: 0000006b 0x6b + 8000010c: 0000006f j 8000010c + +0000000080000110 <_assert>: + 80000110: 00051a63 bnez a0,80000124 <_assert+0x14> + 80000114: 00100793 li a5,1 + 80000118: 00078513 mv a0,a5 + 8000011c: 0000006b 0x6b + 80000120: 0000006f j 80000120 <_assert+0x10> + 80000124: 00008067 ret + +0000000080000128 <_trm_init>: + 80000128: ff010113 addi sp,sp,-16 + 8000012c: 00113423 sd ra,8(sp) + 80000130: 01c000ef jal ra,8000014c + 80000134: 00000517 auipc a0,0x0 + 80000138: 22c50513 addi a0,a0,556 # 80000360 + 8000013c: eedff0ef jal ra,80000028
+ 80000140: 00050513 mv a0,a0 + 80000144: 0000006b 0x6b + 80000148: 0000006f j 80000148 <_trm_init+0x20> + +000000008000014c : + 8000014c: 00000797 auipc a5,0x0 + 80000150: 29c78793 addi a5,a5,668 # 800003e8 + 80000154: 0007b503 ld a0,0(a5) + 80000158: 0087b583 ld a1,8(a5) + 8000015c: ff010113 addi sp,sp,-16 + 80000160: 00000693 li a3,0 + 80000164: 00000613 li a2,0 + 80000168: 40a585b3 sub a1,a1,a0 + 8000016c: 00113423 sd ra,8(sp) + 80000170: 018000ef jal ra,80000188 + 80000174: 00813083 ld ra,8(sp) + 80000178: 00000797 auipc a5,0x0 + 8000017c: 28a7b023 sd a0,640(a5) # 800003f8 + 80000180: 01010113 addi sp,sp,16 + 80000184: 00008067 ret + +0000000080000188 : + 80000188: 1a050e63 beqz a0,80000344 + 8000018c: fd010113 addi sp,sp,-48 + 80000190: 02813023 sd s0,32(sp) + 80000194: 00913c23 sd s1,24(sp) + 80000198: 01f57793 andi a5,a0,31 + 8000019c: 02113423 sd ra,40(sp) + 800001a0: 01213823 sd s2,16(sp) + 800001a4: 01313423 sd s3,8(sp) + 800001a8: 01413023 sd s4,0(sp) + 800001ac: 00050493 mv s1,a0 + 800001b0: 00050413 mv s0,a0 + 800001b4: 00000513 li a0,0 + 800001b8: 14079a63 bnez a5,8000030c + 800001bc: 27f00713 li a4,639 + 800001c0: 00058913 mv s2,a1 + 800001c4: 00078513 mv a0,a5 + 800001c8: 14b77263 bgeu a4,a1,8000030c + 800001cc: 0074f513 andi a0,s1,7 + 800001d0: 00153513 seqz a0,a0 + 800001d4: 00060a13 mv s4,a2 + 800001d8: 00068993 mv s3,a3 + 800001dc: f35ff0ef jal ra,80000110 <_assert> + 800001e0: 20048793 addi a5,s1,512 + 800001e4: 2004b023 sd zero,512(s1) + 800001e8: 2144b423 sd s4,520(s1) + 800001ec: 2134b823 sd s3,528(s1) + 800001f0: 00043023 sd zero,0(s0) + 800001f4: 00840413 addi s0,s0,8 + 800001f8: fe879ce3 bne a5,s0,800001f0 + 800001fc: fff00793 li a5,-1 + 80000200: dc090413 addi s0,s2,-576 + 80000204: 03f79793 slli a5,a5,0x3f + 80000208: 1287f863 bgeu a5,s0,80000338 + 8000020c: 00078413 mv s0,a5 + 80000210: 00100513 li a0,1 + 80000214: efdff0ef jal ra,80000110 <_assert> + 80000218: f8300793 li a5,-125 + 8000021c: 0017d793 srli a5,a5,0x1 + 80000220: fc040513 addi a0,s0,-64 + 80000224: 00f53533 sltu a0,a0,a5 + 80000228: ee9ff0ef jal ra,80000110 <_assert> + 8000022c: 01f4f513 andi a0,s1,31 + 80000230: 00153513 seqz a0,a0 + 80000234: eddff0ef jal ra,80000110 <_assert> + 80000238: 00100513 li a0,1 + 8000023c: 2404b023 sd zero,576(s1) + 80000240: 2404b423 sd zero,584(s1) + 80000244: 2484b823 sd s0,592(s1) + 80000248: 24048c23 sb zero,600(s1) + 8000024c: 2604b023 sd zero,608(s1) + 80000250: 2604b423 sd zero,616(s1) + 80000254: ebdff0ef jal ra,80000110 <_assert> + 80000258: 00100513 li a0,1 + 8000025c: eb5ff0ef jal ra,80000110 <_assert> + 80000260: 2504b503 ld a0,592(s1) + 80000264: 24048a13 addi s4,s1,576 + 80000268: 04053513 sltiu a0,a0,64 + 8000026c: 00154513 xori a0,a0,1 + 80000270: 00157513 andi a0,a0,1 + 80000274: e9dff0ef jal ra,80000110 <_assert> + 80000278: 2504b503 ld a0,592(s1) + 8000027c: 03f57513 andi a0,a0,63 + 80000280: 00153513 seqz a0,a0 + 80000284: e8dff0ef jal ra,80000110 <_assert> + 80000288: 2504b703 ld a4,592(s1) + 8000028c: 00100793 li a5,1 + 80000290: 00675713 srli a4,a4,0x6 + 80000294: 0ae7fc63 bgeu a5,a4,8000034c + 80000298: 00000793 li a5,0 + 8000029c: 00100693 li a3,1 + 800002a0: 0017879b addiw a5,a5,1 + 800002a4: 00175713 srli a4,a4,0x1 + 800002a8: 0ff7f793 andi a5,a5,255 + 800002ac: fed71ae3 bne a4,a3,800002a0 + 800002b0: 00078993 mv s3,a5 + 800002b4: 0407b513 sltiu a0,a5,64 + 800002b8: 00f71933 sll s2,a4,a5 + 800002bc: e55ff0ef jal ra,80000110 <_assert> + 800002c0: 00399793 slli a5,s3,0x3 + 800002c4: 00f487b3 add a5,s1,a5 + 800002c8: 0007b703 ld a4,0(a5) + 800002cc: 2604b423 sd zero,616(s1) + 800002d0: 26e4b023 sd a4,608(s1) + 800002d4: 00070463 beqz a4,800002dc + 800002d8: 03473423 sd s4,40(a4) + 800002dc: 0147b023 sd s4,0(a5) + 800002e0: 2004b503 ld a0,512(s1) + 800002e4: 00a96533 or a0,s2,a0 + 800002e8: 20a4b023 sd a0,512(s1) + 800002ec: 00a03533 snez a0,a0 + 800002f0: e21ff0ef jal ra,80000110 <_assert> + 800002f4: 00048513 mv a0,s1 + 800002f8: 2084bc23 sd s0,536(s1) + 800002fc: 2204b023 sd zero,544(s1) + 80000300: 2204b423 sd zero,552(s1) + 80000304: 2204b823 sd zero,560(s1) + 80000308: 2204bc23 sd zero,568(s1) + 8000030c: 02813083 ld ra,40(sp) + 80000310: 02013403 ld s0,32(sp) + 80000314: 01813483 ld s1,24(sp) + 80000318: 01013903 ld s2,16(sp) + 8000031c: 00813983 ld s3,8(sp) + 80000320: 00013a03 ld s4,0(sp) + 80000324: 03010113 addi sp,sp,48 + 80000328: 00008067 ret + 8000032c: 00100513 li a0,1 + 80000330: fff40413 addi s0,s0,-1 + 80000334: dddff0ef jal ra,80000110 <_assert> + 80000338: 03f47793 andi a5,s0,63 + 8000033c: fe0798e3 bnez a5,8000032c + 80000340: ed1ff06f j 80000210 + 80000344: 00000513 li a0,0 + 80000348: 00008067 ret + 8000034c: 00100913 li s2,1 + 80000350: 00000993 li s3,0 + 80000354: 00100513 li a0,1 + 80000358: f65ff06f j 800002bc diff --git a/bin/non-output/cpu-tests/prime-cpu-tests.elf b/bin/non-output/cpu-tests/prime-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..842bbfdc3501bd77f065878c5cf37b0ada0c6cfd GIT binary patch literal 41656 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 literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/prime-cpu-tests.txt b/bin/non-output/cpu-tests/prime-cpu-tests.txt new file mode 100755 index 0000000..42744f3 --- /dev/null +++ b/bin/non-output/cpu-tests/prime-cpu-tests.txt @@ -0,0 +1,300 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/prime-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 0e4000ef jal ra,800000f0 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 0a8000ef jal ra,800000cc + +0000000080000028
: + 80000028: fd010113 addi sp,sp,-48 + 8000002c: 00913c23 sd s1,24(sp) + 80000030: 01213823 sd s2,16(sp) + 80000034: 01313423 sd s3,8(sp) + 80000038: 01413023 sd s4,0(sp) + 8000003c: 02113423 sd ra,40(sp) + 80000040: 02813023 sd s0,32(sp) + 80000044: 00000913 li s2,0 + 80000048: 06500493 li s1,101 + 8000004c: 00000a17 auipc s4,0x0 + 80000050: 3e4a0a13 addi s4,s4,996 # 80000430 + 80000054: 09700993 li s3,151 + 80000058: 00200413 li s0,2 + 8000005c: 00040593 mv a1,s0 + 80000060: 00048513 mv a0,s1 + 80000064: 174000ef jal ra,800001d8 <__moddi3> + 80000068: 0005051b sext.w a0,a0 + 8000006c: 0014041b addiw s0,s0,1 + 80000070: 02050263 beqz a0,80000094 + 80000074: fe9414e3 bne s0,s1,8000005c + 80000078: 00291793 slli a5,s2,0x2 + 8000007c: 00fa07b3 add a5,s4,a5 + 80000080: 0007a503 lw a0,0(a5) + 80000084: 0019091b addiw s2,s2,1 + 80000088: 40950533 sub a0,a0,s1 + 8000008c: 00153513 seqz a0,a0 + 80000090: f81ff0ef jal ra,80000010 + 80000094: 0024849b addiw s1,s1,2 + 80000098: fd3490e3 bne s1,s3,80000058 + 8000009c: ff690513 addi a0,s2,-10 + 800000a0: 00153513 seqz a0,a0 + 800000a4: f6dff0ef jal ra,80000010 + 800000a8: 02813083 ld ra,40(sp) + 800000ac: 02013403 ld s0,32(sp) + 800000b0: 01813483 ld s1,24(sp) + 800000b4: 01013903 ld s2,16(sp) + 800000b8: 00813983 ld s3,8(sp) + 800000bc: 00013a03 ld s4,0(sp) + 800000c0: 00000513 li a0,0 + 800000c4: 03010113 addi sp,sp,48 + 800000c8: 00008067 ret + +00000000800000cc : + 800000cc: 00050513 mv a0,a0 + 800000d0: 0000006b 0x6b + 800000d4: 0000006f j 800000d4 + +00000000800000d8 <_assert>: + 800000d8: 00051a63 bnez a0,800000ec <_assert+0x14> + 800000dc: 00100793 li a5,1 + 800000e0: 00078513 mv a0,a5 + 800000e4: 0000006b 0x6b + 800000e8: 0000006f j 800000e8 <_assert+0x10> + 800000ec: 00008067 ret + +00000000800000f0 <_trm_init>: + 800000f0: ff010113 addi sp,sp,-16 + 800000f4: 00113423 sd ra,8(sp) + 800000f8: 11c000ef jal ra,80000214 + 800000fc: 00000517 auipc a0,0x0 + 80000100: 32c50513 addi a0,a0,812 # 80000428 + 80000104: f25ff0ef jal ra,80000028
+ 80000108: 00050513 mv a0,a0 + 8000010c: 0000006b 0x6b + 80000110: 0000006f j 80000110 <_trm_init+0x20> + +0000000080000114 <__udivsi3>: + 80000114: 02051513 slli a0,a0,0x20 + 80000118: 02059593 slli a1,a1,0x20 + 8000011c: 00008293 mv t0,ra + 80000120: 03c000ef jal ra,8000015c <__udivdi3> + 80000124: 0005051b sext.w a0,a0 + 80000128: 00028067 jr t0 + +000000008000012c <__umodsi3>: + 8000012c: 02051513 slli a0,a0,0x20 + 80000130: 02059593 slli a1,a1,0x20 + 80000134: 02055513 srli a0,a0,0x20 + 80000138: 0205d593 srli a1,a1,0x20 + 8000013c: 00008293 mv t0,ra + 80000140: 01c000ef jal ra,8000015c <__udivdi3> + 80000144: 0005851b sext.w a0,a1 + 80000148: 00028067 jr t0 + +000000008000014c <__divsi3>: + 8000014c: fff00293 li t0,-1 + 80000150: 0a558c63 beq a1,t0,80000208 <__moddi3+0x30> + +0000000080000154 <__divdi3>: + 80000154: 06054063 bltz a0,800001b4 <__umoddi3+0x10> + 80000158: 0605c663 bltz a1,800001c4 <__umoddi3+0x20> + +000000008000015c <__udivdi3>: + 8000015c: 00058613 mv a2,a1 + 80000160: 00050593 mv a1,a0 + 80000164: fff00513 li a0,-1 + 80000168: 02060c63 beqz a2,800001a0 <__udivdi3+0x44> + 8000016c: 00100693 li a3,1 + 80000170: 00b67a63 bgeu a2,a1,80000184 <__udivdi3+0x28> + 80000174: 00c05863 blez a2,80000184 <__udivdi3+0x28> + 80000178: 00161613 slli a2,a2,0x1 + 8000017c: 00169693 slli a3,a3,0x1 + 80000180: feb66ae3 bltu a2,a1,80000174 <__udivdi3+0x18> + 80000184: 00000513 li a0,0 + 80000188: 00c5e663 bltu a1,a2,80000194 <__udivdi3+0x38> + 8000018c: 40c585b3 sub a1,a1,a2 + 80000190: 00d56533 or a0,a0,a3 + 80000194: 0016d693 srli a3,a3,0x1 + 80000198: 00165613 srli a2,a2,0x1 + 8000019c: fe0696e3 bnez a3,80000188 <__udivdi3+0x2c> + 800001a0: 00008067 ret + +00000000800001a4 <__umoddi3>: + 800001a4: 00008293 mv t0,ra + 800001a8: fb5ff0ef jal ra,8000015c <__udivdi3> + 800001ac: 00058513 mv a0,a1 + 800001b0: 00028067 jr t0 + 800001b4: 40a00533 neg a0,a0 + 800001b8: 00b04863 bgtz a1,800001c8 <__umoddi3+0x24> + 800001bc: 40b005b3 neg a1,a1 + 800001c0: f9dff06f j 8000015c <__udivdi3> + 800001c4: 40b005b3 neg a1,a1 + 800001c8: 00008293 mv t0,ra + 800001cc: f91ff0ef jal ra,8000015c <__udivdi3> + 800001d0: 40a00533 neg a0,a0 + 800001d4: 00028067 jr t0 + +00000000800001d8 <__moddi3>: + 800001d8: 00008293 mv t0,ra + 800001dc: 0005ca63 bltz a1,800001f0 <__moddi3+0x18> + 800001e0: 00054c63 bltz a0,800001f8 <__moddi3+0x20> + 800001e4: f79ff0ef jal ra,8000015c <__udivdi3> + 800001e8: 00058513 mv a0,a1 + 800001ec: 00028067 jr t0 + 800001f0: 40b005b3 neg a1,a1 + 800001f4: fe0558e3 bgez a0,800001e4 <__moddi3+0xc> + 800001f8: 40a00533 neg a0,a0 + 800001fc: f61ff0ef jal ra,8000015c <__udivdi3> + 80000200: 40b00533 neg a0,a1 + 80000204: 00028067 jr t0 + 80000208: 01f29293 slli t0,t0,0x1f + 8000020c: f45514e3 bne a0,t0,80000154 <__divdi3> + 80000210: 00008067 ret + +0000000080000214 : + 80000214: 00000797 auipc a5,0x0 + 80000218: 24478793 addi a5,a5,580 # 80000458 + 8000021c: 0007b503 ld a0,0(a5) + 80000220: 0087b583 ld a1,8(a5) + 80000224: ff010113 addi sp,sp,-16 + 80000228: 00000693 li a3,0 + 8000022c: 00000613 li a2,0 + 80000230: 40a585b3 sub a1,a1,a0 + 80000234: 00113423 sd ra,8(sp) + 80000238: 018000ef jal ra,80000250 + 8000023c: 00813083 ld ra,8(sp) + 80000240: 00000797 auipc a5,0x0 + 80000244: 22a7b423 sd a0,552(a5) # 80000468 + 80000248: 01010113 addi sp,sp,16 + 8000024c: 00008067 ret + +0000000080000250 : + 80000250: 1a050e63 beqz a0,8000040c + 80000254: fd010113 addi sp,sp,-48 + 80000258: 02813023 sd s0,32(sp) + 8000025c: 00913c23 sd s1,24(sp) + 80000260: 01f57793 andi a5,a0,31 + 80000264: 02113423 sd ra,40(sp) + 80000268: 01213823 sd s2,16(sp) + 8000026c: 01313423 sd s3,8(sp) + 80000270: 01413023 sd s4,0(sp) + 80000274: 00050493 mv s1,a0 + 80000278: 00050413 mv s0,a0 + 8000027c: 00000513 li a0,0 + 80000280: 14079a63 bnez a5,800003d4 + 80000284: 27f00713 li a4,639 + 80000288: 00058913 mv s2,a1 + 8000028c: 00078513 mv a0,a5 + 80000290: 14b77263 bgeu a4,a1,800003d4 + 80000294: 0074f513 andi a0,s1,7 + 80000298: 00153513 seqz a0,a0 + 8000029c: 00060a13 mv s4,a2 + 800002a0: 00068993 mv s3,a3 + 800002a4: e35ff0ef jal ra,800000d8 <_assert> + 800002a8: 20048793 addi a5,s1,512 + 800002ac: 2004b023 sd zero,512(s1) + 800002b0: 2144b423 sd s4,520(s1) + 800002b4: 2134b823 sd s3,528(s1) + 800002b8: 00043023 sd zero,0(s0) + 800002bc: 00840413 addi s0,s0,8 + 800002c0: fe879ce3 bne a5,s0,800002b8 + 800002c4: fff00793 li a5,-1 + 800002c8: dc090413 addi s0,s2,-576 + 800002cc: 03f79793 slli a5,a5,0x3f + 800002d0: 1287f863 bgeu a5,s0,80000400 + 800002d4: 00078413 mv s0,a5 + 800002d8: 00100513 li a0,1 + 800002dc: dfdff0ef jal ra,800000d8 <_assert> + 800002e0: f8300793 li a5,-125 + 800002e4: 0017d793 srli a5,a5,0x1 + 800002e8: fc040513 addi a0,s0,-64 + 800002ec: 00f53533 sltu a0,a0,a5 + 800002f0: de9ff0ef jal ra,800000d8 <_assert> + 800002f4: 01f4f513 andi a0,s1,31 + 800002f8: 00153513 seqz a0,a0 + 800002fc: dddff0ef jal ra,800000d8 <_assert> + 80000300: 00100513 li a0,1 + 80000304: 2404b023 sd zero,576(s1) + 80000308: 2404b423 sd zero,584(s1) + 8000030c: 2484b823 sd s0,592(s1) + 80000310: 24048c23 sb zero,600(s1) + 80000314: 2604b023 sd zero,608(s1) + 80000318: 2604b423 sd zero,616(s1) + 8000031c: dbdff0ef jal ra,800000d8 <_assert> + 80000320: 00100513 li a0,1 + 80000324: db5ff0ef jal ra,800000d8 <_assert> + 80000328: 2504b503 ld a0,592(s1) + 8000032c: 24048a13 addi s4,s1,576 + 80000330: 04053513 sltiu a0,a0,64 + 80000334: 00154513 xori a0,a0,1 + 80000338: 00157513 andi a0,a0,1 + 8000033c: d9dff0ef jal ra,800000d8 <_assert> + 80000340: 2504b503 ld a0,592(s1) + 80000344: 03f57513 andi a0,a0,63 + 80000348: 00153513 seqz a0,a0 + 8000034c: d8dff0ef jal ra,800000d8 <_assert> + 80000350: 2504b703 ld a4,592(s1) + 80000354: 00100793 li a5,1 + 80000358: 00675713 srli a4,a4,0x6 + 8000035c: 0ae7fc63 bgeu a5,a4,80000414 + 80000360: 00000793 li a5,0 + 80000364: 00100693 li a3,1 + 80000368: 0017879b addiw a5,a5,1 + 8000036c: 00175713 srli a4,a4,0x1 + 80000370: 0ff7f793 andi a5,a5,255 + 80000374: fed71ae3 bne a4,a3,80000368 + 80000378: 00078993 mv s3,a5 + 8000037c: 0407b513 sltiu a0,a5,64 + 80000380: 00f71933 sll s2,a4,a5 + 80000384: d55ff0ef jal ra,800000d8 <_assert> + 80000388: 00399793 slli a5,s3,0x3 + 8000038c: 00f487b3 add a5,s1,a5 + 80000390: 0007b703 ld a4,0(a5) + 80000394: 2604b423 sd zero,616(s1) + 80000398: 26e4b023 sd a4,608(s1) + 8000039c: 00070463 beqz a4,800003a4 + 800003a0: 03473423 sd s4,40(a4) + 800003a4: 0147b023 sd s4,0(a5) + 800003a8: 2004b503 ld a0,512(s1) + 800003ac: 00a96533 or a0,s2,a0 + 800003b0: 20a4b023 sd a0,512(s1) + 800003b4: 00a03533 snez a0,a0 + 800003b8: d21ff0ef jal ra,800000d8 <_assert> + 800003bc: 00048513 mv a0,s1 + 800003c0: 2084bc23 sd s0,536(s1) + 800003c4: 2204b023 sd zero,544(s1) + 800003c8: 2204b423 sd zero,552(s1) + 800003cc: 2204b823 sd zero,560(s1) + 800003d0: 2204bc23 sd zero,568(s1) + 800003d4: 02813083 ld ra,40(sp) + 800003d8: 02013403 ld s0,32(sp) + 800003dc: 01813483 ld s1,24(sp) + 800003e0: 01013903 ld s2,16(sp) + 800003e4: 00813983 ld s3,8(sp) + 800003e8: 00013a03 ld s4,0(sp) + 800003ec: 03010113 addi sp,sp,48 + 800003f0: 00008067 ret + 800003f4: 00100513 li a0,1 + 800003f8: fff40413 addi s0,s0,-1 + 800003fc: cddff0ef jal ra,800000d8 <_assert> + 80000400: 03f47793 andi a5,s0,63 + 80000404: fe0798e3 bnez a5,800003f4 + 80000408: ed1ff06f j 800002d8 + 8000040c: 00000513 li a0,0 + 80000410: 00008067 ret + 80000414: 00100913 li s2,1 + 80000418: 00000993 li s3,0 + 8000041c: 00100513 li a0,1 + 80000420: f65ff06f j 80000384 diff --git a/bin/non-output/cpu-tests/quick-sort-cpu-tests.elf b/bin/non-output/cpu-tests/quick-sort-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..b74220f29ff2d47fc79f064cde4cbab79ebc3744 GIT binary patch literal 43280 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 g`4h7DJ3A0HAL&;;5dZ)H literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/quick-sort-cpu-tests.txt b/bin/non-output/cpu-tests/quick-sort-cpu-tests.txt new file mode 100755 index 0000000..7e91e85 --- /dev/null +++ b/bin/non-output/cpu-tests/quick-sort-cpu-tests.txt @@ -0,0 +1,306 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/quick-sort-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 224000ef jal ra,80000230 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 1e8000ef jal ra,8000020c + +0000000080000028 : + 80000028: 00259693 slli a3,a1,0x2 + 8000002c: 00d506b3 add a3,a0,a3 + 80000030: 0006a803 lw a6,0(a3) + 80000034: 00050893 mv a7,a0 + 80000038: 08c5de63 bge a1,a2,800000d4 + 8000003c: 00261793 slli a5,a2,0x2 + 80000040: 00f507b3 add a5,a0,a5 + 80000044: 0007a783 lw a5,0(a5) + 80000048: 00058513 mv a0,a1 + 8000004c: fff60693 addi a3,a2,-1 + 80000050: 00269693 slli a3,a3,0x2 + 80000054: 00d886b3 add a3,a7,a3 + 80000058: 00068713 mv a4,a3 + 8000005c: 02f85663 bge a6,a5,80000088 + 80000060: fff6061b addiw a2,a2,-1 + 80000064: 00072783 lw a5,0(a4) + 80000068: ffc70693 addi a3,a4,-4 + 8000006c: fec546e3 blt a0,a2,80000058 + 80000070: 00251693 slli a3,a0,0x2 + 80000074: 00d886b3 add a3,a7,a3 + 80000078: 00f6a023 sw a5,0(a3) + 8000007c: 00f72023 sw a5,0(a4) + 80000080: 0106a023 sw a6,0(a3) + 80000084: 00008067 ret + 80000088: 00251593 slli a1,a0,0x2 + 8000008c: 00b886b3 add a3,a7,a1 + 80000090: 00261713 slli a4,a2,0x2 + 80000094: 00f6a023 sw a5,0(a3) + 80000098: 00e88733 add a4,a7,a4 + 8000009c: fec550e3 bge a0,a2,8000007c + 800000a0: 00458593 addi a1,a1,4 + 800000a4: 00b885b3 add a1,a7,a1 + 800000a8: 0015051b addiw a0,a0,1 + 800000ac: 0005a783 lw a5,0(a1) + 800000b0: 00058693 mv a3,a1 + 800000b4: 00458593 addi a1,a1,4 + 800000b8: fcc502e3 beq a0,a2,8000007c + 800000bc: fef856e3 bge a6,a5,800000a8 + 800000c0: 00f72023 sw a5,0(a4) + 800000c4: f8c544e3 blt a0,a2,8000004c + 800000c8: 00251693 slli a3,a0,0x2 + 800000cc: 00d886b3 add a3,a7,a3 + 800000d0: fb1ff06f j 80000080 + 800000d4: 00058513 mv a0,a1 + 800000d8: 0106a023 sw a6,0(a3) + 800000dc: 00008067 ret + +00000000800000e0 : + 800000e0: 06c5d463 bge a1,a2,80000148 + 800000e4: fe010113 addi sp,sp,-32 + 800000e8: 00813823 sd s0,16(sp) + 800000ec: 00913423 sd s1,8(sp) + 800000f0: 01213023 sd s2,0(sp) + 800000f4: 00113c23 sd ra,24(sp) + 800000f8: 00058413 mv s0,a1 + 800000fc: 00060493 mv s1,a2 + 80000100: 00050913 mv s2,a0 + 80000104: 00040593 mv a1,s0 + 80000108: 00048613 mv a2,s1 + 8000010c: 00090513 mv a0,s2 + 80000110: f19ff0ef jal ra,80000028 + 80000114: 00050793 mv a5,a0 + 80000118: 00040593 mv a1,s0 + 8000011c: fff5061b addiw a2,a0,-1 + 80000120: 0017841b addiw s0,a5,1 + 80000124: 00090513 mv a0,s2 + 80000128: fb9ff0ef jal ra,800000e0 + 8000012c: fc944ce3 blt s0,s1,80000104 + 80000130: 01813083 ld ra,24(sp) + 80000134: 01013403 ld s0,16(sp) + 80000138: 00813483 ld s1,8(sp) + 8000013c: 00013903 ld s2,0(sp) + 80000140: 02010113 addi sp,sp,32 + 80000144: 00008067 ret + 80000148: 00008067 ret + +000000008000014c
: + 8000014c: fd010113 addi sp,sp,-48 + 80000150: 00000517 auipc a0,0x0 + 80000154: 32050513 addi a0,a0,800 # 80000470 + 80000158: 00913c23 sd s1,24(sp) + 8000015c: 01300613 li a2,19 + 80000160: 00050493 mv s1,a0 + 80000164: 00000593 li a1,0 + 80000168: 02813023 sd s0,32(sp) + 8000016c: 01213823 sd s2,16(sp) + 80000170: 01313423 sd s3,8(sp) + 80000174: 02113423 sd ra,40(sp) + 80000178: 00048913 mv s2,s1 + 8000017c: f65ff0ef jal ra,800000e0 + 80000180: 00000413 li s0,0 + 80000184: 01400993 li s3,20 + 80000188: 00092503 lw a0,0(s2) + 8000018c: 00490913 addi s2,s2,4 + 80000190: 40850533 sub a0,a0,s0 + 80000194: 00153513 seqz a0,a0 + 80000198: 0014041b addiw s0,s0,1 + 8000019c: e75ff0ef jal ra,80000010 + 800001a0: ff3414e3 bne s0,s3,80000188 + 800001a4: 00100513 li a0,1 + 800001a8: e69ff0ef jal ra,80000010 + 800001ac: 01300613 li a2,19 + 800001b0: 00000593 li a1,0 + 800001b4: 00000517 auipc a0,0x0 + 800001b8: 2bc50513 addi a0,a0,700 # 80000470 + 800001bc: f25ff0ef jal ra,800000e0 + 800001c0: 00000413 li s0,0 + 800001c4: 01400913 li s2,20 + 800001c8: 0004a503 lw a0,0(s1) + 800001cc: 00448493 addi s1,s1,4 + 800001d0: 40850533 sub a0,a0,s0 + 800001d4: 00153513 seqz a0,a0 + 800001d8: 0014041b addiw s0,s0,1 + 800001dc: e35ff0ef jal ra,80000010 + 800001e0: ff2414e3 bne s0,s2,800001c8 + 800001e4: 00100513 li a0,1 + 800001e8: e29ff0ef jal ra,80000010 + 800001ec: 02813083 ld ra,40(sp) + 800001f0: 02013403 ld s0,32(sp) + 800001f4: 01813483 ld s1,24(sp) + 800001f8: 01013903 ld s2,16(sp) + 800001fc: 00813983 ld s3,8(sp) + 80000200: 00000513 li a0,0 + 80000204: 03010113 addi sp,sp,48 + 80000208: 00008067 ret + +000000008000020c : + 8000020c: 00050513 mv a0,a0 + 80000210: 0000006b 0x6b + 80000214: 0000006f j 80000214 + +0000000080000218 <_assert>: + 80000218: 00051a63 bnez a0,8000022c <_assert+0x14> + 8000021c: 00100793 li a5,1 + 80000220: 00078513 mv a0,a5 + 80000224: 0000006b 0x6b + 80000228: 0000006f j 80000228 <_assert+0x10> + 8000022c: 00008067 ret + +0000000080000230 <_trm_init>: + 80000230: ff010113 addi sp,sp,-16 + 80000234: 00113423 sd ra,8(sp) + 80000238: 01c000ef jal ra,80000254 + 8000023c: 00000517 auipc a0,0x0 + 80000240: 22c50513 addi a0,a0,556 # 80000468 + 80000244: f09ff0ef jal ra,8000014c
+ 80000248: 00050513 mv a0,a0 + 8000024c: 0000006b 0x6b + 80000250: 0000006f j 80000250 <_trm_init+0x20> + +0000000080000254 : + 80000254: 00000797 auipc a5,0x0 + 80000258: 26c78793 addi a5,a5,620 # 800004c0 + 8000025c: 0007b503 ld a0,0(a5) + 80000260: 0087b583 ld a1,8(a5) + 80000264: ff010113 addi sp,sp,-16 + 80000268: 00000693 li a3,0 + 8000026c: 00000613 li a2,0 + 80000270: 40a585b3 sub a1,a1,a0 + 80000274: 00113423 sd ra,8(sp) + 80000278: 018000ef jal ra,80000290 + 8000027c: 00813083 ld ra,8(sp) + 80000280: 00000797 auipc a5,0x0 + 80000284: 24a7b823 sd a0,592(a5) # 800004d0 + 80000288: 01010113 addi sp,sp,16 + 8000028c: 00008067 ret + +0000000080000290 : + 80000290: 1a050e63 beqz a0,8000044c + 80000294: fd010113 addi sp,sp,-48 + 80000298: 02813023 sd s0,32(sp) + 8000029c: 00913c23 sd s1,24(sp) + 800002a0: 01f57793 andi a5,a0,31 + 800002a4: 02113423 sd ra,40(sp) + 800002a8: 01213823 sd s2,16(sp) + 800002ac: 01313423 sd s3,8(sp) + 800002b0: 01413023 sd s4,0(sp) + 800002b4: 00050493 mv s1,a0 + 800002b8: 00050413 mv s0,a0 + 800002bc: 00000513 li a0,0 + 800002c0: 14079a63 bnez a5,80000414 + 800002c4: 27f00713 li a4,639 + 800002c8: 00058913 mv s2,a1 + 800002cc: 00078513 mv a0,a5 + 800002d0: 14b77263 bgeu a4,a1,80000414 + 800002d4: 0074f513 andi a0,s1,7 + 800002d8: 00153513 seqz a0,a0 + 800002dc: 00060a13 mv s4,a2 + 800002e0: 00068993 mv s3,a3 + 800002e4: f35ff0ef jal ra,80000218 <_assert> + 800002e8: 20048793 addi a5,s1,512 + 800002ec: 2004b023 sd zero,512(s1) + 800002f0: 2144b423 sd s4,520(s1) + 800002f4: 2134b823 sd s3,528(s1) + 800002f8: 00043023 sd zero,0(s0) + 800002fc: 00840413 addi s0,s0,8 + 80000300: fe879ce3 bne a5,s0,800002f8 + 80000304: fff00793 li a5,-1 + 80000308: dc090413 addi s0,s2,-576 + 8000030c: 03f79793 slli a5,a5,0x3f + 80000310: 1287f863 bgeu a5,s0,80000440 + 80000314: 00078413 mv s0,a5 + 80000318: 00100513 li a0,1 + 8000031c: efdff0ef jal ra,80000218 <_assert> + 80000320: f8300793 li a5,-125 + 80000324: 0017d793 srli a5,a5,0x1 + 80000328: fc040513 addi a0,s0,-64 + 8000032c: 00f53533 sltu a0,a0,a5 + 80000330: ee9ff0ef jal ra,80000218 <_assert> + 80000334: 01f4f513 andi a0,s1,31 + 80000338: 00153513 seqz a0,a0 + 8000033c: eddff0ef jal ra,80000218 <_assert> + 80000340: 00100513 li a0,1 + 80000344: 2404b023 sd zero,576(s1) + 80000348: 2404b423 sd zero,584(s1) + 8000034c: 2484b823 sd s0,592(s1) + 80000350: 24048c23 sb zero,600(s1) + 80000354: 2604b023 sd zero,608(s1) + 80000358: 2604b423 sd zero,616(s1) + 8000035c: ebdff0ef jal ra,80000218 <_assert> + 80000360: 00100513 li a0,1 + 80000364: eb5ff0ef jal ra,80000218 <_assert> + 80000368: 2504b503 ld a0,592(s1) + 8000036c: 24048a13 addi s4,s1,576 + 80000370: 04053513 sltiu a0,a0,64 + 80000374: 00154513 xori a0,a0,1 + 80000378: 00157513 andi a0,a0,1 + 8000037c: e9dff0ef jal ra,80000218 <_assert> + 80000380: 2504b503 ld a0,592(s1) + 80000384: 03f57513 andi a0,a0,63 + 80000388: 00153513 seqz a0,a0 + 8000038c: e8dff0ef jal ra,80000218 <_assert> + 80000390: 2504b703 ld a4,592(s1) + 80000394: 00100793 li a5,1 + 80000398: 00675713 srli a4,a4,0x6 + 8000039c: 0ae7fc63 bgeu a5,a4,80000454 + 800003a0: 00000793 li a5,0 + 800003a4: 00100693 li a3,1 + 800003a8: 0017879b addiw a5,a5,1 + 800003ac: 00175713 srli a4,a4,0x1 + 800003b0: 0ff7f793 andi a5,a5,255 + 800003b4: fed71ae3 bne a4,a3,800003a8 + 800003b8: 00078993 mv s3,a5 + 800003bc: 0407b513 sltiu a0,a5,64 + 800003c0: 00f71933 sll s2,a4,a5 + 800003c4: e55ff0ef jal ra,80000218 <_assert> + 800003c8: 00399793 slli a5,s3,0x3 + 800003cc: 00f487b3 add a5,s1,a5 + 800003d0: 0007b703 ld a4,0(a5) + 800003d4: 2604b423 sd zero,616(s1) + 800003d8: 26e4b023 sd a4,608(s1) + 800003dc: 00070463 beqz a4,800003e4 + 800003e0: 03473423 sd s4,40(a4) + 800003e4: 0147b023 sd s4,0(a5) + 800003e8: 2004b503 ld a0,512(s1) + 800003ec: 00a96533 or a0,s2,a0 + 800003f0: 20a4b023 sd a0,512(s1) + 800003f4: 00a03533 snez a0,a0 + 800003f8: e21ff0ef jal ra,80000218 <_assert> + 800003fc: 00048513 mv a0,s1 + 80000400: 2084bc23 sd s0,536(s1) + 80000404: 2204b023 sd zero,544(s1) + 80000408: 2204b423 sd zero,552(s1) + 8000040c: 2204b823 sd zero,560(s1) + 80000410: 2204bc23 sd zero,568(s1) + 80000414: 02813083 ld ra,40(sp) + 80000418: 02013403 ld s0,32(sp) + 8000041c: 01813483 ld s1,24(sp) + 80000420: 01013903 ld s2,16(sp) + 80000424: 00813983 ld s3,8(sp) + 80000428: 00013a03 ld s4,0(sp) + 8000042c: 03010113 addi sp,sp,48 + 80000430: 00008067 ret + 80000434: 00100513 li a0,1 + 80000438: fff40413 addi s0,s0,-1 + 8000043c: dddff0ef jal ra,80000218 <_assert> + 80000440: 03f47793 andi a5,s0,63 + 80000444: fe0798e3 bnez a5,80000434 + 80000448: ed1ff06f j 80000318 + 8000044c: 00000513 li a0,0 + 80000450: 00008067 ret + 80000454: 00100913 li s2,1 + 80000458: 00000993 li s3,0 + 8000045c: 00100513 li a0,1 + 80000460: f65ff06f j 800003c4 diff --git a/bin/non-output/cpu-tests/recursion-cpu-tests.elf b/bin/non-output/cpu-tests/recursion-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..044eed55cbf6aba1e677ec46e6d823dbf05629ea GIT binary patch literal 45144 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: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 284000ef jal ra,80000290 <_trm_init> + +0000000080000010 : + 80000010: 00000717 auipc a4,0x0 + 80000014: 60070713 addi a4,a4,1536 # 80000610 + 80000018: 00072683 lw a3,0(a4) + 8000001c: 00058793 mv a5,a1 + 80000020: 00b6d463 bge a3,a1,80000028 + 80000024: 00b72023 sw a1,0(a4) + 80000028: 00000697 auipc a3,0x0 + 8000002c: 5ec68693 addi a3,a3,1516 # 80000614 + 80000030: 0006a703 lw a4,0(a3) + 80000034: 0017071b addiw a4,a4,1 + 80000038: 00e6a023 sw a4,0(a3) + 8000003c: 02a05e63 blez a0,80000078 + 80000040: ff010113 addi sp,sp,-16 + 80000044: 00300593 li a1,3 + 80000048: 00813023 sd s0,0(sp) + 8000004c: 00113423 sd ra,8(sp) + 80000050: 0017841b addiw s0,a5,1 + 80000054: 2a0000ef jal ra,800002f4 <__divdi3> + 80000058: 00040593 mv a1,s0 + 8000005c: 00013403 ld s0,0(sp) + 80000060: 00813083 ld ra,8(sp) + 80000064: 00000317 auipc t1,0x0 + 80000068: 59433303 ld t1,1428(t1) # 800005f8 + 8000006c: 0005051b sext.w a0,a0 + 80000070: 01010113 addi sp,sp,16 + 80000074: 00030067 jr t1 + 80000078: 00100513 li a0,1 + 8000007c: 00008067 ret + +0000000080000080 : + 80000080: 00000797 auipc a5,0x0 + 80000084: 59078793 addi a5,a5,1424 # 80000610 + 80000088: 0007a703 lw a4,0(a5) + 8000008c: 00b75463 bge a4,a1,80000094 + 80000090: 00b7a023 sw a1,0(a5) + 80000094: 00000717 auipc a4,0x0 + 80000098: 58070713 addi a4,a4,1408 # 80000614 + 8000009c: 00072783 lw a5,0(a4) + 800000a0: 0017879b addiw a5,a5,1 + 800000a4: 00f72023 sw a5,0(a4) + 800000a8: 00a05c63 blez a0,800000c0 + 800000ac: 0015859b addiw a1,a1,1 + 800000b0: fff5051b addiw a0,a0,-1 + 800000b4: 00000317 auipc t1,0x0 + 800000b8: 52c33303 ld t1,1324(t1) # 800005e0 + 800000bc: 00030067 jr t1 + 800000c0: 00100513 li a0,1 + 800000c4: 00008067 ret + +00000000800000c8 : + 800000c8: 00000717 auipc a4,0x0 + 800000cc: 54870713 addi a4,a4,1352 # 80000610 + 800000d0: 00072683 lw a3,0(a4) + 800000d4: 00050793 mv a5,a0 + 800000d8: 00b6d463 bge a3,a1,800000e0 + 800000dc: 00b72023 sw a1,0(a4) + 800000e0: 00000697 auipc a3,0x0 + 800000e4: 53468693 addi a3,a3,1332 # 80000614 + 800000e8: 0006a703 lw a4,0(a3) + 800000ec: 00100513 li a0,1 + 800000f0: 0017071b addiw a4,a4,1 + 800000f4: 00e6a023 sw a4,0(a3) + 800000f8: 02f05863 blez a5,80000128 + 800000fc: ff010113 addi sp,sp,-16 + 80000100: 00113423 sd ra,8(sp) + 80000104: 00078513 mv a0,a5 + 80000108: 0015859b addiw a1,a1,1 + 8000010c: 00000797 auipc a5,0x0 + 80000110: 4dc7b783 ld a5,1244(a5) # 800005e8 + 80000114: 000780e7 jalr a5 + 80000118: 00813083 ld ra,8(sp) + 8000011c: 0095051b addiw a0,a0,9 + 80000120: 01010113 addi sp,sp,16 + 80000124: 00008067 ret + 80000128: 00008067 ret + +000000008000012c : + 8000012c: 00000717 auipc a4,0x0 + 80000130: 4e470713 addi a4,a4,1252 # 80000610 + 80000134: 00072683 lw a3,0(a4) + 80000138: 00050793 mv a5,a0 + 8000013c: 00b6d463 bge a3,a1,80000144 + 80000140: 00b72023 sw a1,0(a4) + 80000144: 00000697 auipc a3,0x0 + 80000148: 4d068693 addi a3,a3,1232 # 80000614 + 8000014c: 0006a703 lw a4,0(a3) + 80000150: 00100513 li a0,1 + 80000154: 0017071b addiw a4,a4,1 + 80000158: 00e6a023 sw a4,0(a3) + 8000015c: 06f05a63 blez a5,800001d0 + 80000160: fe010113 addi sp,sp,-32 + 80000164: 01213023 sd s2,0(sp) + 80000168: 00000917 auipc s2,0x0 + 8000016c: 47890913 addi s2,s2,1144 # 800005e0 + 80000170: 01093703 ld a4,16(s2) + 80000174: 00813823 sd s0,16(sp) + 80000178: 00913423 sd s1,8(sp) + 8000017c: 0015841b addiw s0,a1,1 + 80000180: 4017d493 srai s1,a5,0x1 + 80000184: 00113c23 sd ra,24(sp) + 80000188: 00040593 mv a1,s0 + 8000018c: 00048513 mv a0,s1 + 80000190: 000700e7 jalr a4 + 80000194: 01093783 ld a5,16(s2) + 80000198: 00040593 mv a1,s0 + 8000019c: 00050913 mv s2,a0 + 800001a0: 00048513 mv a0,s1 + 800001a4: 000780e7 jalr a5 + 800001a8: 01813083 ld ra,24(sp) + 800001ac: 01013403 ld s0,16(sp) + 800001b0: 0019179b slliw a5,s2,0x1 + 800001b4: 012787bb addw a5,a5,s2 + 800001b8: 0015151b slliw a0,a0,0x1 + 800001bc: 00813483 ld s1,8(sp) + 800001c0: 00013903 ld s2,0(sp) + 800001c4: 00a7853b addw a0,a5,a0 + 800001c8: 02010113 addi sp,sp,32 + 800001cc: 00008067 ret + 800001d0: 00008067 ret + +00000000800001d4 : + 800001d4: 00050463 beqz a0,800001dc + 800001d8: 00008067 ret + 800001dc: ff010113 addi sp,sp,-16 + 800001e0: 00100513 li a0,1 + 800001e4: 00113423 sd ra,8(sp) + 800001e8: 084000ef jal ra,8000026c + +00000000800001ec
: + 800001ec: ff010113 addi sp,sp,-16 + 800001f0: 00004537 lui a0,0x4 + 800001f4: 00113423 sd ra,8(sp) + 800001f8: 00813023 sd s0,0(sp) + 800001fc: 00000593 li a1,0 + 80000200: 00000797 auipc a5,0x0 + 80000204: 3e07b783 ld a5,992(a5) # 800005e0 + 80000208: 82350513 addi a0,a0,-2013 # 3823 <_entry_offset+0x3823> + 8000020c: 000780e7 jalr a5 + 80000210: 00000417 auipc s0,0x0 + 80000214: 3c040413 addi s0,s0,960 # 800005d0 + 80000218: 00042783 lw a5,0(s0) + 8000021c: 40a78533 sub a0,a5,a0 + 80000220: 00153513 seqz a0,a0 + 80000224: fb1ff0ef jal ra,800001d4 + 80000228: 00442503 lw a0,4(s0) + 8000022c: 00000797 auipc a5,0x0 + 80000230: 3e87a783 lw a5,1000(a5) # 80000614 + 80000234: 40f50533 sub a0,a0,a5 + 80000238: 00153513 seqz a0,a0 + 8000023c: f99ff0ef jal ra,800001d4 + 80000240: 00842503 lw a0,8(s0) + 80000244: 00000797 auipc a5,0x0 + 80000248: 3cc7a783 lw a5,972(a5) # 80000610 + 8000024c: 40f50533 sub a0,a0,a5 + 80000250: 00153513 seqz a0,a0 + 80000254: f81ff0ef jal ra,800001d4 + 80000258: 00813083 ld ra,8(sp) + 8000025c: 00013403 ld s0,0(sp) + 80000260: 00000513 li a0,0 + 80000264: 01010113 addi sp,sp,16 + 80000268: 00008067 ret + +000000008000026c : + 8000026c: 00050513 mv a0,a0 + 80000270: 0000006b 0x6b + 80000274: 0000006f j 80000274 + +0000000080000278 <_assert>: + 80000278: 00051a63 bnez a0,8000028c <_assert+0x14> + 8000027c: 00100793 li a5,1 + 80000280: 00078513 mv a0,a5 + 80000284: 0000006b 0x6b + 80000288: 0000006f j 80000288 <_assert+0x10> + 8000028c: 00008067 ret + +0000000080000290 <_trm_init>: + 80000290: ff010113 addi sp,sp,-16 + 80000294: 00113423 sd ra,8(sp) + 80000298: 11c000ef jal ra,800003b4 + 8000029c: 00000517 auipc a0,0x0 + 800002a0: 32c50513 addi a0,a0,812 # 800005c8 + 800002a4: f49ff0ef jal ra,800001ec
+ 800002a8: 00050513 mv a0,a0 + 800002ac: 0000006b 0x6b + 800002b0: 0000006f j 800002b0 <_trm_init+0x20> + +00000000800002b4 <__udivsi3>: + 800002b4: 02051513 slli a0,a0,0x20 + 800002b8: 02059593 slli a1,a1,0x20 + 800002bc: 00008293 mv t0,ra + 800002c0: 03c000ef jal ra,800002fc <__udivdi3> + 800002c4: 0005051b sext.w a0,a0 + 800002c8: 00028067 jr t0 + +00000000800002cc <__umodsi3>: + 800002cc: 02051513 slli a0,a0,0x20 + 800002d0: 02059593 slli a1,a1,0x20 + 800002d4: 02055513 srli a0,a0,0x20 + 800002d8: 0205d593 srli a1,a1,0x20 + 800002dc: 00008293 mv t0,ra + 800002e0: 01c000ef jal ra,800002fc <__udivdi3> + 800002e4: 0005851b sext.w a0,a1 + 800002e8: 00028067 jr t0 + +00000000800002ec <__divsi3>: + 800002ec: fff00293 li t0,-1 + 800002f0: 0a558c63 beq a1,t0,800003a8 <__moddi3+0x30> + +00000000800002f4 <__divdi3>: + 800002f4: 06054063 bltz a0,80000354 <__umoddi3+0x10> + 800002f8: 0605c663 bltz a1,80000364 <__umoddi3+0x20> + +00000000800002fc <__udivdi3>: + 800002fc: 00058613 mv a2,a1 + 80000300: 00050593 mv a1,a0 + 80000304: fff00513 li a0,-1 + 80000308: 02060c63 beqz a2,80000340 <__udivdi3+0x44> + 8000030c: 00100693 li a3,1 + 80000310: 00b67a63 bgeu a2,a1,80000324 <__udivdi3+0x28> + 80000314: 00c05863 blez a2,80000324 <__udivdi3+0x28> + 80000318: 00161613 slli a2,a2,0x1 + 8000031c: 00169693 slli a3,a3,0x1 + 80000320: feb66ae3 bltu a2,a1,80000314 <__udivdi3+0x18> + 80000324: 00000513 li a0,0 + 80000328: 00c5e663 bltu a1,a2,80000334 <__udivdi3+0x38> + 8000032c: 40c585b3 sub a1,a1,a2 + 80000330: 00d56533 or a0,a0,a3 + 80000334: 0016d693 srli a3,a3,0x1 + 80000338: 00165613 srli a2,a2,0x1 + 8000033c: fe0696e3 bnez a3,80000328 <__udivdi3+0x2c> + 80000340: 00008067 ret + +0000000080000344 <__umoddi3>: + 80000344: 00008293 mv t0,ra + 80000348: fb5ff0ef jal ra,800002fc <__udivdi3> + 8000034c: 00058513 mv a0,a1 + 80000350: 00028067 jr t0 + 80000354: 40a00533 neg a0,a0 + 80000358: 00b04863 bgtz a1,80000368 <__umoddi3+0x24> + 8000035c: 40b005b3 neg a1,a1 + 80000360: f9dff06f j 800002fc <__udivdi3> + 80000364: 40b005b3 neg a1,a1 + 80000368: 00008293 mv t0,ra + 8000036c: f91ff0ef jal ra,800002fc <__udivdi3> + 80000370: 40a00533 neg a0,a0 + 80000374: 00028067 jr t0 + +0000000080000378 <__moddi3>: + 80000378: 00008293 mv t0,ra + 8000037c: 0005ca63 bltz a1,80000390 <__moddi3+0x18> + 80000380: 00054c63 bltz a0,80000398 <__moddi3+0x20> + 80000384: f79ff0ef jal ra,800002fc <__udivdi3> + 80000388: 00058513 mv a0,a1 + 8000038c: 00028067 jr t0 + 80000390: 40b005b3 neg a1,a1 + 80000394: fe0558e3 bgez a0,80000384 <__moddi3+0xc> + 80000398: 40a00533 neg a0,a0 + 8000039c: f61ff0ef jal ra,800002fc <__udivdi3> + 800003a0: 40b00533 neg a0,a1 + 800003a4: 00028067 jr t0 + 800003a8: 01f29293 slli t0,t0,0x1f + 800003ac: f45514e3 bne a0,t0,800002f4 <__divdi3> + 800003b0: 00008067 ret + +00000000800003b4 : + 800003b4: 00000797 auipc a5,0x0 + 800003b8: 24c78793 addi a5,a5,588 # 80000600 + 800003bc: 0007b503 ld a0,0(a5) + 800003c0: 0087b583 ld a1,8(a5) + 800003c4: ff010113 addi sp,sp,-16 + 800003c8: 00000693 li a3,0 + 800003cc: 00000613 li a2,0 + 800003d0: 40a585b3 sub a1,a1,a0 + 800003d4: 00113423 sd ra,8(sp) + 800003d8: 018000ef jal ra,800003f0 + 800003dc: 00813083 ld ra,8(sp) + 800003e0: 00000797 auipc a5,0x0 + 800003e4: 22a7bc23 sd a0,568(a5) # 80000618 + 800003e8: 01010113 addi sp,sp,16 + 800003ec: 00008067 ret + +00000000800003f0 : + 800003f0: 1a050e63 beqz a0,800005ac + 800003f4: fd010113 addi sp,sp,-48 + 800003f8: 02813023 sd s0,32(sp) + 800003fc: 00913c23 sd s1,24(sp) + 80000400: 01f57793 andi a5,a0,31 + 80000404: 02113423 sd ra,40(sp) + 80000408: 01213823 sd s2,16(sp) + 8000040c: 01313423 sd s3,8(sp) + 80000410: 01413023 sd s4,0(sp) + 80000414: 00050493 mv s1,a0 + 80000418: 00050413 mv s0,a0 + 8000041c: 00000513 li a0,0 + 80000420: 14079a63 bnez a5,80000574 + 80000424: 27f00713 li a4,639 + 80000428: 00058913 mv s2,a1 + 8000042c: 00078513 mv a0,a5 + 80000430: 14b77263 bgeu a4,a1,80000574 + 80000434: 0074f513 andi a0,s1,7 + 80000438: 00153513 seqz a0,a0 + 8000043c: 00060a13 mv s4,a2 + 80000440: 00068993 mv s3,a3 + 80000444: e35ff0ef jal ra,80000278 <_assert> + 80000448: 20048793 addi a5,s1,512 + 8000044c: 2004b023 sd zero,512(s1) + 80000450: 2144b423 sd s4,520(s1) + 80000454: 2134b823 sd s3,528(s1) + 80000458: 00043023 sd zero,0(s0) + 8000045c: 00840413 addi s0,s0,8 + 80000460: fe879ce3 bne a5,s0,80000458 + 80000464: fff00793 li a5,-1 + 80000468: dc090413 addi s0,s2,-576 + 8000046c: 03f79793 slli a5,a5,0x3f + 80000470: 1287f863 bgeu a5,s0,800005a0 + 80000474: 00078413 mv s0,a5 + 80000478: 00100513 li a0,1 + 8000047c: dfdff0ef jal ra,80000278 <_assert> + 80000480: f8300793 li a5,-125 + 80000484: 0017d793 srli a5,a5,0x1 + 80000488: fc040513 addi a0,s0,-64 + 8000048c: 00f53533 sltu a0,a0,a5 + 80000490: de9ff0ef jal ra,80000278 <_assert> + 80000494: 01f4f513 andi a0,s1,31 + 80000498: 00153513 seqz a0,a0 + 8000049c: dddff0ef jal ra,80000278 <_assert> + 800004a0: 00100513 li a0,1 + 800004a4: 2404b023 sd zero,576(s1) + 800004a8: 2404b423 sd zero,584(s1) + 800004ac: 2484b823 sd s0,592(s1) + 800004b0: 24048c23 sb zero,600(s1) + 800004b4: 2604b023 sd zero,608(s1) + 800004b8: 2604b423 sd zero,616(s1) + 800004bc: dbdff0ef jal ra,80000278 <_assert> + 800004c0: 00100513 li a0,1 + 800004c4: db5ff0ef jal ra,80000278 <_assert> + 800004c8: 2504b503 ld a0,592(s1) + 800004cc: 24048a13 addi s4,s1,576 + 800004d0: 04053513 sltiu a0,a0,64 + 800004d4: 00154513 xori a0,a0,1 + 800004d8: 00157513 andi a0,a0,1 + 800004dc: d9dff0ef jal ra,80000278 <_assert> + 800004e0: 2504b503 ld a0,592(s1) + 800004e4: 03f57513 andi a0,a0,63 + 800004e8: 00153513 seqz a0,a0 + 800004ec: d8dff0ef jal ra,80000278 <_assert> + 800004f0: 2504b703 ld a4,592(s1) + 800004f4: 00100793 li a5,1 + 800004f8: 00675713 srli a4,a4,0x6 + 800004fc: 0ae7fc63 bgeu a5,a4,800005b4 + 80000500: 00000793 li a5,0 + 80000504: 00100693 li a3,1 + 80000508: 0017879b addiw a5,a5,1 + 8000050c: 00175713 srli a4,a4,0x1 + 80000510: 0ff7f793 andi a5,a5,255 + 80000514: fed71ae3 bne a4,a3,80000508 + 80000518: 00078993 mv s3,a5 + 8000051c: 0407b513 sltiu a0,a5,64 + 80000520: 00f71933 sll s2,a4,a5 + 80000524: d55ff0ef jal ra,80000278 <_assert> + 80000528: 00399793 slli a5,s3,0x3 + 8000052c: 00f487b3 add a5,s1,a5 + 80000530: 0007b703 ld a4,0(a5) + 80000534: 2604b423 sd zero,616(s1) + 80000538: 26e4b023 sd a4,608(s1) + 8000053c: 00070463 beqz a4,80000544 + 80000540: 03473423 sd s4,40(a4) + 80000544: 0147b023 sd s4,0(a5) + 80000548: 2004b503 ld a0,512(s1) + 8000054c: 00a96533 or a0,s2,a0 + 80000550: 20a4b023 sd a0,512(s1) + 80000554: 00a03533 snez a0,a0 + 80000558: d21ff0ef jal ra,80000278 <_assert> + 8000055c: 00048513 mv a0,s1 + 80000560: 2084bc23 sd s0,536(s1) + 80000564: 2204b023 sd zero,544(s1) + 80000568: 2204b423 sd zero,552(s1) + 8000056c: 2204b823 sd zero,560(s1) + 80000570: 2204bc23 sd zero,568(s1) + 80000574: 02813083 ld ra,40(sp) + 80000578: 02013403 ld s0,32(sp) + 8000057c: 01813483 ld s1,24(sp) + 80000580: 01013903 ld s2,16(sp) + 80000584: 00813983 ld s3,8(sp) + 80000588: 00013a03 ld s4,0(sp) + 8000058c: 03010113 addi sp,sp,48 + 80000590: 00008067 ret + 80000594: 00100513 li a0,1 + 80000598: fff40413 addi s0,s0,-1 + 8000059c: cddff0ef jal ra,80000278 <_assert> + 800005a0: 03f47793 andi a5,s0,63 + 800005a4: fe0798e3 bnez a5,80000594 + 800005a8: ed1ff06f j 80000478 + 800005ac: 00000513 li a0,0 + 800005b0: 00008067 ret + 800005b4: 00100913 li s2,1 + 800005b8: 00000993 li s3,0 + 800005bc: 00100513 li a0,1 + 800005c0: f65ff06f j 80000524 diff --git a/bin/non-output/cpu-tests/select-sort-cpu-tests.elf b/bin/non-output/cpu-tests/select-sort-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..48edb45cf12dfbf5a0b9810a6b45267ae0bc28be GIT binary patch literal 43040 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 M^k3JA>guNdU#v*aR{#J2 literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/select-sort-cpu-tests.txt b/bin/non-output/cpu-tests/select-sort-cpu-tests.txt new file mode 100755 index 0000000..d41ab20 --- /dev/null +++ b/bin/non-output/cpu-tests/select-sort-cpu-tests.txt @@ -0,0 +1,274 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/select-sort-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 1b4000ef jal ra,800001c0 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 178000ef jal ra,8000019c + +0000000080000028
: + 80000028: fc010113 addi sp,sp,-64 + 8000002c: 02813823 sd s0,48(sp) + 80000030: 00000417 auipc s0,0x0 + 80000034: 3d440413 addi s0,s0,980 # 80000404 + 80000038: 01413823 sd s4,16(sp) + 8000003c: 02113c23 sd ra,56(sp) + 80000040: 02913423 sd s1,40(sp) + 80000044: 03213023 sd s2,32(sp) + 80000048: 01313c23 sd s3,24(sp) + 8000004c: 01513423 sd s5,8(sp) + 80000050: 00040893 mv a7,s0 + 80000054: 00000813 li a6,0 + 80000058: 00000a17 auipc s4,0x0 + 8000005c: 3a8a0a13 addi s4,s4,936 # 80000400 + 80000060: 01400513 li a0,20 + 80000064: 01300e13 li t3,19 + 80000068: ffc8a303 lw t1,-4(a7) + 8000006c: 00080593 mv a1,a6 + 80000070: 0018081b addiw a6,a6,1 + 80000074: 00088713 mv a4,a7 + 80000078: 00030613 mv a2,t1 + 8000007c: 00080793 mv a5,a6 + 80000080: 00072683 lw a3,0(a4) + 80000084: 00470713 addi a4,a4,4 + 80000088: 00c6d663 bge a3,a2,80000094 + 8000008c: 00078593 mv a1,a5 + 80000090: 00068613 mv a2,a3 + 80000094: 0017879b addiw a5,a5,1 + 80000098: fea794e3 bne a5,a0,80000080 + 8000009c: 00259593 slli a1,a1,0x2 + 800000a0: fec8ae23 sw a2,-4(a7) + 800000a4: 00ba05b3 add a1,s4,a1 + 800000a8: 0065a023 sw t1,0(a1) + 800000ac: 00488893 addi a7,a7,4 + 800000b0: fbc81ce3 bne a6,t3,80000068 + 800000b4: 00000a17 auipc s4,0x0 + 800000b8: 34ca0a13 addi s4,s4,844 # 80000400 + 800000bc: 000a0493 mv s1,s4 + 800000c0: 000a0993 mv s3,s4 + 800000c4: 00000913 li s2,0 + 800000c8: 01400a93 li s5,20 + 800000cc: 0009a503 lw a0,0(s3) + 800000d0: 00498993 addi s3,s3,4 + 800000d4: 41250533 sub a0,a0,s2 + 800000d8: 00153513 seqz a0,a0 + 800000dc: 0019091b addiw s2,s2,1 + 800000e0: f31ff0ef jal ra,80000010 + 800000e4: ff5914e3 bne s2,s5,800000cc + 800000e8: 00100513 li a0,1 + 800000ec: f25ff0ef jal ra,80000010 + 800000f0: 00000813 li a6,0 + 800000f4: 01400513 li a0,20 + 800000f8: 01300313 li t1,19 + 800000fc: ffc42883 lw a7,-4(s0) + 80000100: 00080593 mv a1,a6 + 80000104: 0018081b addiw a6,a6,1 + 80000108: 00040713 mv a4,s0 + 8000010c: 00088613 mv a2,a7 + 80000110: 00080793 mv a5,a6 + 80000114: 00072683 lw a3,0(a4) + 80000118: 00470713 addi a4,a4,4 + 8000011c: 00c6d663 bge a3,a2,80000128 + 80000120: 00078593 mv a1,a5 + 80000124: 00068613 mv a2,a3 + 80000128: 0017879b addiw a5,a5,1 + 8000012c: fea794e3 bne a5,a0,80000114 + 80000130: 00259593 slli a1,a1,0x2 + 80000134: fec42e23 sw a2,-4(s0) + 80000138: 00ba05b3 add a1,s4,a1 + 8000013c: 0115a023 sw a7,0(a1) + 80000140: 00440413 addi s0,s0,4 + 80000144: fa681ce3 bne a6,t1,800000fc + 80000148: 00000413 li s0,0 + 8000014c: 01400913 li s2,20 + 80000150: 0004a503 lw a0,0(s1) + 80000154: 00448493 addi s1,s1,4 + 80000158: 40850533 sub a0,a0,s0 + 8000015c: 00153513 seqz a0,a0 + 80000160: 0014041b addiw s0,s0,1 + 80000164: eadff0ef jal ra,80000010 + 80000168: ff2414e3 bne s0,s2,80000150 + 8000016c: 00100513 li a0,1 + 80000170: ea1ff0ef jal ra,80000010 + 80000174: 03813083 ld ra,56(sp) + 80000178: 03013403 ld s0,48(sp) + 8000017c: 02813483 ld s1,40(sp) + 80000180: 02013903 ld s2,32(sp) + 80000184: 01813983 ld s3,24(sp) + 80000188: 01013a03 ld s4,16(sp) + 8000018c: 00813a83 ld s5,8(sp) + 80000190: 00000513 li a0,0 + 80000194: 04010113 addi sp,sp,64 + 80000198: 00008067 ret + +000000008000019c : + 8000019c: 00050513 mv a0,a0 + 800001a0: 0000006b 0x6b + 800001a4: 0000006f j 800001a4 + +00000000800001a8 <_assert>: + 800001a8: 00051a63 bnez a0,800001bc <_assert+0x14> + 800001ac: 00100793 li a5,1 + 800001b0: 00078513 mv a0,a5 + 800001b4: 0000006b 0x6b + 800001b8: 0000006f j 800001b8 <_assert+0x10> + 800001bc: 00008067 ret + +00000000800001c0 <_trm_init>: + 800001c0: ff010113 addi sp,sp,-16 + 800001c4: 00113423 sd ra,8(sp) + 800001c8: 01c000ef jal ra,800001e4 + 800001cc: 00000517 auipc a0,0x0 + 800001d0: 22c50513 addi a0,a0,556 # 800003f8 + 800001d4: e55ff0ef jal ra,80000028
+ 800001d8: 00050513 mv a0,a0 + 800001dc: 0000006b 0x6b + 800001e0: 0000006f j 800001e0 <_trm_init+0x20> + +00000000800001e4 : + 800001e4: 00000797 auipc a5,0x0 + 800001e8: 26c78793 addi a5,a5,620 # 80000450 + 800001ec: 0007b503 ld a0,0(a5) + 800001f0: 0087b583 ld a1,8(a5) + 800001f4: ff010113 addi sp,sp,-16 + 800001f8: 00000693 li a3,0 + 800001fc: 00000613 li a2,0 + 80000200: 40a585b3 sub a1,a1,a0 + 80000204: 00113423 sd ra,8(sp) + 80000208: 018000ef jal ra,80000220 + 8000020c: 00813083 ld ra,8(sp) + 80000210: 00000797 auipc a5,0x0 + 80000214: 24a7b823 sd a0,592(a5) # 80000460 + 80000218: 01010113 addi sp,sp,16 + 8000021c: 00008067 ret + +0000000080000220 : + 80000220: 1a050e63 beqz a0,800003dc + 80000224: fd010113 addi sp,sp,-48 + 80000228: 02813023 sd s0,32(sp) + 8000022c: 00913c23 sd s1,24(sp) + 80000230: 01f57793 andi a5,a0,31 + 80000234: 02113423 sd ra,40(sp) + 80000238: 01213823 sd s2,16(sp) + 8000023c: 01313423 sd s3,8(sp) + 80000240: 01413023 sd s4,0(sp) + 80000244: 00050493 mv s1,a0 + 80000248: 00050413 mv s0,a0 + 8000024c: 00000513 li a0,0 + 80000250: 14079a63 bnez a5,800003a4 + 80000254: 27f00713 li a4,639 + 80000258: 00058913 mv s2,a1 + 8000025c: 00078513 mv a0,a5 + 80000260: 14b77263 bgeu a4,a1,800003a4 + 80000264: 0074f513 andi a0,s1,7 + 80000268: 00153513 seqz a0,a0 + 8000026c: 00060a13 mv s4,a2 + 80000270: 00068993 mv s3,a3 + 80000274: f35ff0ef jal ra,800001a8 <_assert> + 80000278: 20048793 addi a5,s1,512 + 8000027c: 2004b023 sd zero,512(s1) + 80000280: 2144b423 sd s4,520(s1) + 80000284: 2134b823 sd s3,528(s1) + 80000288: 00043023 sd zero,0(s0) + 8000028c: 00840413 addi s0,s0,8 + 80000290: fe879ce3 bne a5,s0,80000288 + 80000294: fff00793 li a5,-1 + 80000298: dc090413 addi s0,s2,-576 + 8000029c: 03f79793 slli a5,a5,0x3f + 800002a0: 1287f863 bgeu a5,s0,800003d0 + 800002a4: 00078413 mv s0,a5 + 800002a8: 00100513 li a0,1 + 800002ac: efdff0ef jal ra,800001a8 <_assert> + 800002b0: f8300793 li a5,-125 + 800002b4: 0017d793 srli a5,a5,0x1 + 800002b8: fc040513 addi a0,s0,-64 + 800002bc: 00f53533 sltu a0,a0,a5 + 800002c0: ee9ff0ef jal ra,800001a8 <_assert> + 800002c4: 01f4f513 andi a0,s1,31 + 800002c8: 00153513 seqz a0,a0 + 800002cc: eddff0ef jal ra,800001a8 <_assert> + 800002d0: 00100513 li a0,1 + 800002d4: 2404b023 sd zero,576(s1) + 800002d8: 2404b423 sd zero,584(s1) + 800002dc: 2484b823 sd s0,592(s1) + 800002e0: 24048c23 sb zero,600(s1) + 800002e4: 2604b023 sd zero,608(s1) + 800002e8: 2604b423 sd zero,616(s1) + 800002ec: ebdff0ef jal ra,800001a8 <_assert> + 800002f0: 00100513 li a0,1 + 800002f4: eb5ff0ef jal ra,800001a8 <_assert> + 800002f8: 2504b503 ld a0,592(s1) + 800002fc: 24048a13 addi s4,s1,576 + 80000300: 04053513 sltiu a0,a0,64 + 80000304: 00154513 xori a0,a0,1 + 80000308: 00157513 andi a0,a0,1 + 8000030c: e9dff0ef jal ra,800001a8 <_assert> + 80000310: 2504b503 ld a0,592(s1) + 80000314: 03f57513 andi a0,a0,63 + 80000318: 00153513 seqz a0,a0 + 8000031c: e8dff0ef jal ra,800001a8 <_assert> + 80000320: 2504b703 ld a4,592(s1) + 80000324: 00100793 li a5,1 + 80000328: 00675713 srli a4,a4,0x6 + 8000032c: 0ae7fc63 bgeu a5,a4,800003e4 + 80000330: 00000793 li a5,0 + 80000334: 00100693 li a3,1 + 80000338: 0017879b addiw a5,a5,1 + 8000033c: 00175713 srli a4,a4,0x1 + 80000340: 0ff7f793 andi a5,a5,255 + 80000344: fed71ae3 bne a4,a3,80000338 + 80000348: 00078993 mv s3,a5 + 8000034c: 0407b513 sltiu a0,a5,64 + 80000350: 00f71933 sll s2,a4,a5 + 80000354: e55ff0ef jal ra,800001a8 <_assert> + 80000358: 00399793 slli a5,s3,0x3 + 8000035c: 00f487b3 add a5,s1,a5 + 80000360: 0007b703 ld a4,0(a5) + 80000364: 2604b423 sd zero,616(s1) + 80000368: 26e4b023 sd a4,608(s1) + 8000036c: 00070463 beqz a4,80000374 + 80000370: 03473423 sd s4,40(a4) + 80000374: 0147b023 sd s4,0(a5) + 80000378: 2004b503 ld a0,512(s1) + 8000037c: 00a96533 or a0,s2,a0 + 80000380: 20a4b023 sd a0,512(s1) + 80000384: 00a03533 snez a0,a0 + 80000388: e21ff0ef jal ra,800001a8 <_assert> + 8000038c: 00048513 mv a0,s1 + 80000390: 2084bc23 sd s0,536(s1) + 80000394: 2204b023 sd zero,544(s1) + 80000398: 2204b423 sd zero,552(s1) + 8000039c: 2204b823 sd zero,560(s1) + 800003a0: 2204bc23 sd zero,568(s1) + 800003a4: 02813083 ld ra,40(sp) + 800003a8: 02013403 ld s0,32(sp) + 800003ac: 01813483 ld s1,24(sp) + 800003b0: 01013903 ld s2,16(sp) + 800003b4: 00813983 ld s3,8(sp) + 800003b8: 00013a03 ld s4,0(sp) + 800003bc: 03010113 addi sp,sp,48 + 800003c0: 00008067 ret + 800003c4: 00100513 li a0,1 + 800003c8: fff40413 addi s0,s0,-1 + 800003cc: dddff0ef jal ra,800001a8 <_assert> + 800003d0: 03f47793 andi a5,s0,63 + 800003d4: fe0798e3 bnez a5,800003c4 + 800003d8: ed1ff06f j 800002a8 + 800003dc: 00000513 li a0,0 + 800003e0: 00008067 ret + 800003e4: 00100913 li s2,1 + 800003e8: 00000993 li s3,0 + 800003ec: 00100513 li a0,1 + 800003f0: f65ff06f j 80000354 diff --git a/bin/non-output/cpu-tests/shift-cpu-tests.elf b/bin/non-output/cpu-tests/shift-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..ceead3b33f0000b736f4308a9dadd8c6f0a6fa7a GIT binary patch literal 41632 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 literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/shift-cpu-tests.txt b/bin/non-output/cpu-tests/shift-cpu-tests.txt new file mode 100755 index 0000000..f6e112a --- /dev/null +++ b/bin/non-output/cpu-tests/shift-cpu-tests.txt @@ -0,0 +1,243 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/shift-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 138000ef jal ra,80000144 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 0fc000ef jal ra,80000120 + +0000000080000028
: + 80000028: fd010113 addi sp,sp,-48 + 8000002c: 00913c23 sd s1,24(sp) + 80000030: 00000497 auipc s1,0x0 + 80000034: 3b048493 addi s1,s1,944 # 800003e0 + 80000038: 02813023 sd s0,32(sp) + 8000003c: 01213823 sd s2,16(sp) + 80000040: 01313423 sd s3,8(sp) + 80000044: 02113423 sd ra,40(sp) + 80000048: 01413023 sd s4,0(sp) + 8000004c: 00000917 auipc s2,0x0 + 80000050: 35490913 addi s2,s2,852 # 800003a0 + 80000054: 00000997 auipc s3,0x0 + 80000058: 3ac98993 addi s3,s3,940 # 80000400 + 8000005c: 00048413 mv s0,s1 + 80000060: 00042503 lw a0,0(s0) + 80000064: 00092783 lw a5,0(s2) + 80000068: 00440413 addi s0,s0,4 + 8000006c: 0075551b srliw a0,a0,0x7 + 80000070: 40f50533 sub a0,a0,a5 + 80000074: 00153513 seqz a0,a0 + 80000078: f99ff0ef jal ra,80000010 + 8000007c: 00490913 addi s2,s2,4 + 80000080: ff3410e3 bne s0,s3,80000060 + 80000084: 00000997 auipc s3,0x0 + 80000088: 2fc98993 addi s3,s3,764 # 80000380 + 8000008c: 00000917 auipc s2,0x0 + 80000090: 35490913 addi s2,s2,852 # 800003e0 + 80000094: 00400413 li s0,4 + 80000098: 00c00a13 li s4,12 + 8000009c: 00092503 lw a0,0(s2) + 800000a0: 0009a783 lw a5,0(s3) + 800000a4: 00490913 addi s2,s2,4 + 800000a8: 4085553b sraw a0,a0,s0 + 800000ac: 40f50533 sub a0,a0,a5 + 800000b0: 00153513 seqz a0,a0 + 800000b4: 0014041b addiw s0,s0,1 + 800000b8: f59ff0ef jal ra,80000010 + 800000bc: 00498993 addi s3,s3,4 + 800000c0: fd441ee3 bne s0,s4,8000009c + 800000c4: 00000917 auipc s2,0x0 + 800000c8: 2fc90913 addi s2,s2,764 # 800003c0 + 800000cc: 00400413 li s0,4 + 800000d0: 00c00993 li s3,12 + 800000d4: 0004a503 lw a0,0(s1) + 800000d8: 00092783 lw a5,0(s2) + 800000dc: 00448493 addi s1,s1,4 + 800000e0: 0085553b srlw a0,a0,s0 + 800000e4: 40f50533 sub a0,a0,a5 + 800000e8: 00153513 seqz a0,a0 + 800000ec: 0014041b addiw s0,s0,1 + 800000f0: f21ff0ef jal ra,80000010 + 800000f4: 00490913 addi s2,s2,4 + 800000f8: fd341ee3 bne s0,s3,800000d4 + 800000fc: 02813083 ld ra,40(sp) + 80000100: 02013403 ld s0,32(sp) + 80000104: 01813483 ld s1,24(sp) + 80000108: 01013903 ld s2,16(sp) + 8000010c: 00813983 ld s3,8(sp) + 80000110: 00013a03 ld s4,0(sp) + 80000114: 00000513 li a0,0 + 80000118: 03010113 addi sp,sp,48 + 8000011c: 00008067 ret + +0000000080000120 : + 80000120: 00050513 mv a0,a0 + 80000124: 0000006b 0x6b + 80000128: 0000006f j 80000128 + +000000008000012c <_assert>: + 8000012c: 00051a63 bnez a0,80000140 <_assert+0x14> + 80000130: 00100793 li a5,1 + 80000134: 00078513 mv a0,a5 + 80000138: 0000006b 0x6b + 8000013c: 0000006f j 8000013c <_assert+0x10> + 80000140: 00008067 ret + +0000000080000144 <_trm_init>: + 80000144: ff010113 addi sp,sp,-16 + 80000148: 00113423 sd ra,8(sp) + 8000014c: 01c000ef jal ra,80000168 + 80000150: 00000517 auipc a0,0x0 + 80000154: 22850513 addi a0,a0,552 # 80000378 <_etext> + 80000158: ed1ff0ef jal ra,80000028
+ 8000015c: 00050513 mv a0,a0 + 80000160: 0000006b 0x6b + 80000164: 0000006f j 80000164 <_trm_init+0x20> + +0000000080000168 : + 80000168: 00000797 auipc a5,0x0 + 8000016c: 29878793 addi a5,a5,664 # 80000400 + 80000170: 0007b503 ld a0,0(a5) + 80000174: 0087b583 ld a1,8(a5) + 80000178: ff010113 addi sp,sp,-16 + 8000017c: 00000693 li a3,0 + 80000180: 00000613 li a2,0 + 80000184: 40a585b3 sub a1,a1,a0 + 80000188: 00113423 sd ra,8(sp) + 8000018c: 018000ef jal ra,800001a4 + 80000190: 00813083 ld ra,8(sp) + 80000194: 00000797 auipc a5,0x0 + 80000198: 26a7be23 sd a0,636(a5) # 80000410 + 8000019c: 01010113 addi sp,sp,16 + 800001a0: 00008067 ret + +00000000800001a4 : + 800001a4: 1a050e63 beqz a0,80000360 + 800001a8: fd010113 addi sp,sp,-48 + 800001ac: 02813023 sd s0,32(sp) + 800001b0: 00913c23 sd s1,24(sp) + 800001b4: 01f57793 andi a5,a0,31 + 800001b8: 02113423 sd ra,40(sp) + 800001bc: 01213823 sd s2,16(sp) + 800001c0: 01313423 sd s3,8(sp) + 800001c4: 01413023 sd s4,0(sp) + 800001c8: 00050493 mv s1,a0 + 800001cc: 00050413 mv s0,a0 + 800001d0: 00000513 li a0,0 + 800001d4: 14079a63 bnez a5,80000328 + 800001d8: 27f00713 li a4,639 + 800001dc: 00058913 mv s2,a1 + 800001e0: 00078513 mv a0,a5 + 800001e4: 14b77263 bgeu a4,a1,80000328 + 800001e8: 0074f513 andi a0,s1,7 + 800001ec: 00153513 seqz a0,a0 + 800001f0: 00060a13 mv s4,a2 + 800001f4: 00068993 mv s3,a3 + 800001f8: f35ff0ef jal ra,8000012c <_assert> + 800001fc: 20048793 addi a5,s1,512 + 80000200: 2004b023 sd zero,512(s1) + 80000204: 2144b423 sd s4,520(s1) + 80000208: 2134b823 sd s3,528(s1) + 8000020c: 00043023 sd zero,0(s0) + 80000210: 00840413 addi s0,s0,8 + 80000214: fe879ce3 bne a5,s0,8000020c + 80000218: fff00793 li a5,-1 + 8000021c: dc090413 addi s0,s2,-576 + 80000220: 03f79793 slli a5,a5,0x3f + 80000224: 1287f863 bgeu a5,s0,80000354 + 80000228: 00078413 mv s0,a5 + 8000022c: 00100513 li a0,1 + 80000230: efdff0ef jal ra,8000012c <_assert> + 80000234: f8300793 li a5,-125 + 80000238: 0017d793 srli a5,a5,0x1 + 8000023c: fc040513 addi a0,s0,-64 + 80000240: 00f53533 sltu a0,a0,a5 + 80000244: ee9ff0ef jal ra,8000012c <_assert> + 80000248: 01f4f513 andi a0,s1,31 + 8000024c: 00153513 seqz a0,a0 + 80000250: eddff0ef jal ra,8000012c <_assert> + 80000254: 00100513 li a0,1 + 80000258: 2404b023 sd zero,576(s1) + 8000025c: 2404b423 sd zero,584(s1) + 80000260: 2484b823 sd s0,592(s1) + 80000264: 24048c23 sb zero,600(s1) + 80000268: 2604b023 sd zero,608(s1) + 8000026c: 2604b423 sd zero,616(s1) + 80000270: ebdff0ef jal ra,8000012c <_assert> + 80000274: 00100513 li a0,1 + 80000278: eb5ff0ef jal ra,8000012c <_assert> + 8000027c: 2504b503 ld a0,592(s1) + 80000280: 24048a13 addi s4,s1,576 + 80000284: 04053513 sltiu a0,a0,64 + 80000288: 00154513 xori a0,a0,1 + 8000028c: 00157513 andi a0,a0,1 + 80000290: e9dff0ef jal ra,8000012c <_assert> + 80000294: 2504b503 ld a0,592(s1) + 80000298: 03f57513 andi a0,a0,63 + 8000029c: 00153513 seqz a0,a0 + 800002a0: e8dff0ef jal ra,8000012c <_assert> + 800002a4: 2504b703 ld a4,592(s1) + 800002a8: 00100793 li a5,1 + 800002ac: 00675713 srli a4,a4,0x6 + 800002b0: 0ae7fc63 bgeu a5,a4,80000368 + 800002b4: 00000793 li a5,0 + 800002b8: 00100693 li a3,1 + 800002bc: 0017879b addiw a5,a5,1 + 800002c0: 00175713 srli a4,a4,0x1 + 800002c4: 0ff7f793 andi a5,a5,255 + 800002c8: fed71ae3 bne a4,a3,800002bc + 800002cc: 00078993 mv s3,a5 + 800002d0: 0407b513 sltiu a0,a5,64 + 800002d4: 00f71933 sll s2,a4,a5 + 800002d8: e55ff0ef jal ra,8000012c <_assert> + 800002dc: 00399793 slli a5,s3,0x3 + 800002e0: 00f487b3 add a5,s1,a5 + 800002e4: 0007b703 ld a4,0(a5) + 800002e8: 2604b423 sd zero,616(s1) + 800002ec: 26e4b023 sd a4,608(s1) + 800002f0: 00070463 beqz a4,800002f8 + 800002f4: 03473423 sd s4,40(a4) + 800002f8: 0147b023 sd s4,0(a5) + 800002fc: 2004b503 ld a0,512(s1) + 80000300: 00a96533 or a0,s2,a0 + 80000304: 20a4b023 sd a0,512(s1) + 80000308: 00a03533 snez a0,a0 + 8000030c: e21ff0ef jal ra,8000012c <_assert> + 80000310: 00048513 mv a0,s1 + 80000314: 2084bc23 sd s0,536(s1) + 80000318: 2204b023 sd zero,544(s1) + 8000031c: 2204b423 sd zero,552(s1) + 80000320: 2204b823 sd zero,560(s1) + 80000324: 2204bc23 sd zero,568(s1) + 80000328: 02813083 ld ra,40(sp) + 8000032c: 02013403 ld s0,32(sp) + 80000330: 01813483 ld s1,24(sp) + 80000334: 01013903 ld s2,16(sp) + 80000338: 00813983 ld s3,8(sp) + 8000033c: 00013a03 ld s4,0(sp) + 80000340: 03010113 addi sp,sp,48 + 80000344: 00008067 ret + 80000348: 00100513 li a0,1 + 8000034c: fff40413 addi s0,s0,-1 + 80000350: dddff0ef jal ra,8000012c <_assert> + 80000354: 03f47793 andi a5,s0,63 + 80000358: fe0798e3 bnez a5,80000348 + 8000035c: ed1ff06f j 8000022c + 80000360: 00000513 li a0,0 + 80000364: 00008067 ret + 80000368: 00100913 li s2,1 + 8000036c: 00000993 li s3,0 + 80000370: 00100513 li a0,1 + 80000374: f65ff06f j 800002d8 diff --git a/bin/non-output/cpu-tests/shuixianhua-cpu-tests.elf b/bin/non-output/cpu-tests/shuixianhua-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..005188823d433cbd72108102d608c457516956b1 GIT binary patch literal 42936 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 Fe*t`+Pj>(S literal 0 HcmV?d00001 diff --git a/bin/non-output/cpu-tests/shuixianhua-cpu-tests.txt b/bin/non-output/cpu-tests/shuixianhua-cpu-tests.txt new file mode 100755 index 0000000..cb9c463 --- /dev/null +++ b/bin/non-output/cpu-tests/shuixianhua-cpu-tests.txt @@ -0,0 +1,352 @@ + +/home/hzb/test/am-kernels/tests/cpu-tests/build/shuixianhua-riscv64-mycpu.elf: file format elf64-littleriscv + + +Disassembly of section .text: + +0000000080000000 <_start>: + 80000000: 00000413 li s0,0 + 80000004: 00009117 auipc sp,0x9 + 80000008: ffc10113 addi sp,sp,-4 # 80009000 <_end> + 8000000c: 188000ef jal ra,80000194 <_trm_init> + +0000000080000010 : + 80000010: 00050463 beqz a0,80000018 + 80000014: 00008067 ret + 80000018: ff010113 addi sp,sp,-16 + 8000001c: 00100513 li a0,1 + 80000020: 00113423 sd ra,8(sp) + 80000024: 14c000ef jal ra,80000170 + +0000000080000028

: + 80000028: fc010113 addi sp,sp,-64 + 8000002c: 02913423 sd s1,40(sp) + 80000030: 01413823 sd s4,16(sp) + 80000034: 01513423 sd s5,8(sp) + 80000038: 01613023 sd s6,0(sp) + 8000003c: 02113c23 sd ra,56(sp) + 80000040: 02813823 sd s0,48(sp) + 80000044: 03213023 sd s2,32(sp) + 80000048: 01313c23 sd s3,24(sp) + 8000004c: 06400493 li s1,100 + 80000050: 00000a93 li s5,0 + 80000054: 1f400a13 li s4,500 + 80000058: 00000b17 auipc s6,0x0 + 8000005c: 4a0b0b13 addi s6,s6,1184 # 800004f8 + 80000060: 0014849b addiw s1,s1,1 + 80000064: 06400593 li a1,100 + 80000068: 00048513 mv a0,s1 + 8000006c: 0d448663 beq s1,s4,80000138 + 80000070: 1ac000ef jal ra,8000021c <__divdi3> + 80000074: 00050993 mv s3,a0 + 80000078: 00a00593 li a1,10 + 8000007c: 00048513 mv a0,s1 + 80000080: 19c000ef jal ra,8000021c <__divdi3> + 80000084: 00a00593 li a1,10 + 80000088: 0005051b sext.w a0,a0 + 8000008c: 214000ef jal ra,800002a0 <__moddi3> + 80000090: 00050413 mv s0,a0 + 80000094: 00a00593 li a1,10 + 80000098: 00048513 mv a0,s1 + 8000009c: 204000ef jal ra,800002a0 <__moddi3> + 800000a0: 0004041b sext.w s0,s0 + 800000a4: 00040593 mv a1,s0 + 800000a8: 00050913 mv s2,a0 + 800000ac: 00040513 mv a0,s0 + 800000b0: 108000ef jal ra,800001b8 <__muldi3> + 800000b4: 00050593 mv a1,a0 + 800000b8: 00040513 mv a0,s0 + 800000bc: 0fc000ef jal ra,800001b8 <__muldi3> + 800000c0: 0009899b sext.w s3,s3 + 800000c4: 00050413 mv s0,a0 + 800000c8: 00098593 mv a1,s3 + 800000cc: 00098513 mv a0,s3 + 800000d0: 0e8000ef jal ra,800001b8 <__muldi3> + 800000d4: 00050593 mv a1,a0 + 800000d8: 00098513 mv a0,s3 + 800000dc: 0dc000ef jal ra,800001b8 <__muldi3> + 800000e0: 0009091b sext.w s2,s2 + 800000e4: 00050793 mv a5,a0 + 800000e8: 00090593 mv a1,s2 + 800000ec: 00090513 mv a0,s2 + 800000f0: 00f4043b addw s0,s0,a5 + 800000f4: 0c4000ef jal ra,800001b8 <__muldi3> + 800000f8: 00050593 mv a1,a0 + 800000fc: 00090513 mv a0,s2 + 80000100: 0b8000ef jal ra,800001b8 <__muldi3> + 80000104: 00a4043b addw s0,s0,a0 + 80000108: f4941ce3 bne s0,s1,80000060 + 8000010c: 002a9793 slli a5,s5,0x2 + 80000110: 00fb07b3 add a5,s6,a5 + 80000114: 0007a503 lw a0,0(a5) + 80000118: 001a8a9b addiw s5,s5,1 + 8000011c: 40950533 sub a0,a0,s1 + 80000120: 00153513 seqz a0,a0 + 80000124: eedff0ef jal ra,80000010 + 80000128: 0014849b addiw s1,s1,1 + 8000012c: 06400593 li a1,100 + 80000130: 00048513 mv a0,s1 + 80000134: f3449ee3 bne s1,s4,80000070 + 80000138: ffca8513 addi a0,s5,-4 + 8000013c: 00153513 seqz a0,a0 + 80000140: ed1ff0ef jal ra,80000010 + 80000144: 03813083 ld ra,56(sp) + 80000148: 03013403 ld s0,48(sp) + 8000014c: 02813483 ld s1,40(sp) + 80000150: 02013903 ld s2,32(sp) + 80000154: 01813983 ld s3,24(sp) + 80000158: 01013a03 ld s4,16(sp) + 8000015c: 00813a83 ld s5,8(sp) + 80000160: 00013b03 ld s6,0(sp) + 80000164: 00000513 li a0,0 + 80000168: 04010113 addi sp,sp,64 + 8000016c: 00008067 ret + +0000000080000170 : + 80000170: 00050513 mv a0,a0 + 80000174: 0000006b 0x6b + 80000178: 0000006f j 80000178 + +000000008000017c <_assert>: + 8000017c: 00051a63 bnez a0,80000190 <_assert+0x14> + 80000180: 00100793 li a5,1 + 80000184: 00078513 mv a0,a5 + 80000188: 0000006b 0x6b + 8000018c: 0000006f j 8000018c <_assert+0x10> + 80000190: 00008067 ret + +0000000080000194 <_trm_init>: + 80000194: ff010113 addi sp,sp,-16 + 80000198: 00113423 sd ra,8(sp) + 8000019c: 140000ef jal ra,800002dc + 800001a0: 00000517 auipc a0,0x0 + 800001a4: 35050513 addi a0,a0,848 # 800004f0 + 800001a8: e81ff0ef jal ra,80000028
+ 800001ac: 00050513 mv a0,a0 + 800001b0: 0000006b 0x6b + 800001b4: 0000006f j 800001b4 <_trm_init+0x20> + +00000000800001b8 <__muldi3>: + 800001b8: 00050613 mv a2,a0 + 800001bc: 00000513 li a0,0 + 800001c0: 0015f693 andi a3,a1,1 + 800001c4: 00068463 beqz a3,800001cc <__muldi3+0x14> + 800001c8: 00c50533 add a0,a0,a2 + 800001cc: 0015d593 srli a1,a1,0x1 + 800001d0: 00161613 slli a2,a2,0x1 + 800001d4: fe0596e3 bnez a1,800001c0 <__muldi3+0x8> + 800001d8: 00008067 ret + +00000000800001dc <__udivsi3>: + 800001dc: 02051513 slli a0,a0,0x20 + 800001e0: 02059593 slli a1,a1,0x20 + 800001e4: 00008293 mv t0,ra + 800001e8: 03c000ef jal ra,80000224 <__udivdi3> + 800001ec: 0005051b sext.w a0,a0 + 800001f0: 00028067 jr t0 + +00000000800001f4 <__umodsi3>: + 800001f4: 02051513 slli a0,a0,0x20 + 800001f8: 02059593 slli a1,a1,0x20 + 800001fc: 02055513 srli a0,a0,0x20 + 80000200: 0205d593 srli a1,a1,0x20 + 80000204: 00008293 mv t0,ra + 80000208: 01c000ef jal ra,80000224 <__udivdi3> + 8000020c: 0005851b sext.w a0,a1 + 80000210: 00028067 jr t0 + +0000000080000214 <__divsi3>: + 80000214: fff00293 li t0,-1 + 80000218: 0a558c63 beq a1,t0,800002d0 <__moddi3+0x30> + +000000008000021c <__divdi3>: + 8000021c: 06054063 bltz a0,8000027c <__umoddi3+0x10> + 80000220: 0605c663 bltz a1,8000028c <__umoddi3+0x20> + +0000000080000224 <__udivdi3>: + 80000224: 00058613 mv a2,a1 + 80000228: 00050593 mv a1,a0 + 8000022c: fff00513 li a0,-1 + 80000230: 02060c63 beqz a2,80000268 <__udivdi3+0x44> + 80000234: 00100693 li a3,1 + 80000238: 00b67a63 bgeu a2,a1,8000024c <__udivdi3+0x28> + 8000023c: 00c05863 blez a2,8000024c <__udivdi3+0x28> + 80000240: 00161613 slli a2,a2,0x1 + 80000244: 00169693 slli a3,a3,0x1 + 80000248: feb66ae3 bltu a2,a1,8000023c <__udivdi3+0x18> + 8000024c: 00000513 li a0,0 + 80000250: 00c5e663 bltu a1,a2,8000025c <__udivdi3+0x38> + 80000254: 40c585b3 sub a1,a1,a2 + 80000258: 00d56533 or a0,a0,a3 + 8000025c: 0016d693 srli a3,a3,0x1 + 80000260: 00165613 srli a2,a2,0x1 + 80000264: fe0696e3 bnez a3,80000250 <__udivdi3+0x2c> + 80000268: 00008067 ret + +000000008000026c <__umoddi3>: + 8000026c: 00008293 mv t0,ra + 80000270: fb5ff0ef jal ra,80000224 <__udivdi3> + 80000274: 00058513 mv a0,a1 + 80000278: 00028067 jr t0 + 8000027c: 40a00533 neg a0,a0 + 80000280: 00b04863 bgtz a1,80000290 <__umoddi3+0x24> + 80000284: 40b005b3 neg a1,a1 + 80000288: f9dff06f j 80000224 <__udivdi3> + 8000028c: 40b005b3 neg a1,a1 + 80000290: 00008293 mv t0,ra + 80000294: f91ff0ef jal ra,80000224 <__udivdi3> + 80000298: 40a00533 neg a0,a0 + 8000029c: 00028067 jr t0 + +00000000800002a0 <__moddi3>: + 800002a0: 00008293 mv t0,ra + 800002a4: 0005ca63 bltz a1,800002b8 <__moddi3+0x18> + 800002a8: 00054c63 bltz a0,800002c0 <__moddi3+0x20> + 800002ac: f79ff0ef jal ra,80000224 <__udivdi3> + 800002b0: 00058513 mv a0,a1 + 800002b4: 00028067 jr t0 + 800002b8: 40b005b3 neg a1,a1 + 800002bc: fe0558e3 bgez a0,800002ac <__moddi3+0xc> + 800002c0: 40a00533 neg a0,a0 + 800002c4: f61ff0ef jal ra,80000224 <__udivdi3> + 800002c8: 40b00533 neg a0,a1 + 800002cc: 00028067 jr t0 + 800002d0: 01f29293 slli t0,t0,0x1f + 800002d4: f45514e3 bne a0,t0,8000021c <__divdi3> + 800002d8: 00008067 ret + +00000000800002dc : + 800002dc: 00000797 auipc a5,0x0 + 800002e0: 22c78793 addi a5,a5,556 # 80000508 + 800002e4: 0007b503 ld a0,0(a5) + 800002e8: 0087b583 ld a1,8(a5) + 800002ec: ff010113 addi sp,sp,-16 + 800002f0: 00000693 li a3,0 + 800002f4: 00000613 li a2,0 + 800002f8: 40a585b3 sub a1,a1,a0 + 800002fc: 00113423 sd ra,8(sp) + 80000300: 018000ef jal ra,80000318 + 80000304: 00813083 ld ra,8(sp) + 80000308: 00000797 auipc a5,0x0 + 8000030c: 20a7b823 sd a0,528(a5) # 80000518 + 80000310: 01010113 addi sp,sp,16 + 80000314: 00008067 ret + +0000000080000318 : + 80000318: 1a050e63 beqz a0,800004d4 + 8000031c: fd010113 addi sp,sp,-48 + 80000320: 02813023 sd s0,32(sp) + 80000324: 00913c23 sd s1,24(sp) + 80000328: 01f57793 andi a5,a0,31 + 8000032c: 02113423 sd ra,40(sp) + 80000330: 01213823 sd s2,16(sp) + 80000334: 01313423 sd s3,8(sp) + 80000338: 01413023 sd s4,0(sp) + 8000033c: 00050493 mv s1,a0 + 80000340: 00050413 mv s0,a0 + 80000344: 00000513 li a0,0 + 80000348: 14079a63 bnez a5,8000049c + 8000034c: 27f00713 li a4,639 + 80000350: 00058913 mv s2,a1 + 80000354: 00078513 mv a0,a5 + 80000358: 14b77263 bgeu a4,a1,8000049c + 8000035c: 0074f513 andi a0,s1,7 + 80000360: 00153513 seqz a0,a0 + 80000364: 00060a13 mv s4,a2 + 80000368: 00068993 mv s3,a3 + 8000036c: e11ff0ef jal ra,8000017c <_assert> + 80000370: 20048793 addi a5,s1,512 + 80000374: 2004b023 sd zero,512(s1) + 80000378: 2144b423 sd s4,520(s1) + 8000037c: 2134b823 sd s3,528(s1) + 80000380: 00043023 sd zero,0(s0) + 80000384: 00840413 addi s0,s0,8 + 80000388: fe879ce3 bne a5,s0,80000380 + 8000038c: fff00793 li a5,-1 + 80000390: dc090413 addi s0,s2,-576 + 80000394: 03f79793 slli a5,a5,0x3f + 80000398: 1287f863 bgeu a5,s0,800004c8 + 8000039c: 00078413 mv s0,a5 + 800003a0: 00100513 li a0,1 + 800003a4: dd9ff0ef jal ra,8000017c <_assert> + 800003a8: f8300793 li a5,-125 + 800003ac: 0017d793 srli a5,a5,0x1 + 800003b0: fc040513 addi a0,s0,-64 + 800003b4: 00f53533 sltu a0,a0,a5 + 800003b8: dc5ff0ef jal ra,8000017c <_assert> + 800003bc: 01f4f513 andi a0,s1,31 + 800003c0: 00153513 seqz a0,a0 + 800003c4: db9ff0ef jal ra,8000017c <_assert> + 800003c8: 00100513 li a0,1 + 800003cc: 2404b023 sd zero,576(s1) + 800003d0: 2404b423 sd zero,584(s1) + 800003d4: 2484b823 sd s0,592(s1) + 800003d8: 24048c23 sb zero,600(s1) + 800003dc: 2604b023 sd zero,608(s1) + 800003e0: 2604b423 sd zero,616(s1) + 800003e4: d99ff0ef jal ra,8000017c <_assert> + 800003e8: 00100513 li a0,1 + 800003ec: d91ff0ef jal ra,8000017c <_assert> + 800003f0: 2504b503 ld a0,592(s1) + 800003f4: 24048a13 addi s4,s1,576 + 800003f8: 04053513 sltiu a0,a0,64 + 800003fc: 00154513 xori a0,a0,1 + 80000400: 00157513 andi a0,a0,1 + 80000404: d79ff0ef jal ra,8000017c <_assert> + 80000408: 2504b503 ld a0,592(s1) + 8000040c: 03f57513 andi a0,a0,63 + 80000410: 00153513 seqz a0,a0 + 80000414: d69ff0ef jal ra,8000017c <_assert> + 80000418: 2504b703 ld a4,592(s1) + 8000041c: 00100793 li a5,1 + 80000420: 00675713 srli a4,a4,0x6 + 80000424: 0ae7fc63 bgeu a5,a4,800004dc + 80000428: 00000793 li a5,0 + 8000042c: 00100693 li a3,1 + 80000430: 0017879b addiw a5,a5,1 + 80000434: 00175713 srli a4,a4,0x1 + 80000438: 0ff7f793 andi a5,a5,255 + 8000043c: fed71ae3 bne a4,a3,80000430 + 80000440: 00078993 mv s3,a5 + 80000444: 0407b513 sltiu a0,a5,64 + 80000448: 00f71933 sll s2,a4,a5 + 8000044c: d31ff0ef jal ra,8000017c <_assert> + 80000450: 00399793 slli a5,s3,0x3 + 80000454: 00f487b3 add a5,s1,a5 + 80000458: 0007b703 ld a4,0(a5) + 8000045c: 2604b423 sd zero,616(s1) + 80000460: 26e4b023 sd a4,608(s1) + 80000464: 00070463 beqz a4,8000046c + 80000468: 03473423 sd s4,40(a4) + 8000046c: 0147b023 sd s4,0(a5) + 80000470: 2004b503 ld a0,512(s1) + 80000474: 00a96533 or a0,s2,a0 + 80000478: 20a4b023 sd a0,512(s1) + 8000047c: 00a03533 snez a0,a0 + 80000480: cfdff0ef jal ra,8000017c <_assert> + 80000484: 00048513 mv a0,s1 + 80000488: 2084bc23 sd s0,536(s1) + 8000048c: 2204b023 sd zero,544(s1) + 80000490: 2204b423 sd zero,552(s1) + 80000494: 2204b823 sd zero,560(s1) + 80000498: 2204bc23 sd zero,568(s1) + 8000049c: 02813083 ld ra,40(sp) + 800004a0: 02013403 ld s0,32(sp) + 800004a4: 01813483 ld s1,24(sp) + 800004a8: 01013903 ld s2,16(sp) + 800004ac: 00813983 ld s3,8(sp) + 800004b0: 00013a03 ld s4,0(sp) + 800004b4: 03010113 addi sp,sp,48 + 800004b8: 00008067 ret + 800004bc: 00100513 li a0,1 + 800004c0: fff40413 addi s0,s0,-1 + 800004c4: cb9ff0ef jal ra,8000017c <_assert> + 800004c8: 03f47793 andi a5,s0,63 + 800004cc: fe0798e3 bnez a5,800004bc + 800004d0: ed1ff06f j 800003a0 + 800004d4: 00000513 li a0,0 + 800004d8: 00008067 ret + 800004dc: 00100913 li s2,1 + 800004e0: 00000993 li s3,0 + 800004e4: 00100513 li a0,1 + 800004e8: f65ff06f j 8000044c diff --git a/bin/non-output/cpu-tests/string-cpu-tests.elf b/bin/non-output/cpu-tests/string-cpu-tests.elf new file mode 100755 index 0000000000000000000000000000000000000000..a7ff97b157853fd560d9d0d0a11172d93e494716 GIT binary patch literal 61752 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

d1_xyN1+hf9uI$(YP!{VVUVtltU7X# zK;7dRUd#}JJ(Ia-d2+C4(sJ|*!zZ#{ugS97b(XOWh$q#Uf>^cI(DPIQV*N=(EtuOSU81at6EK-CgWLH~M3Q7F@`^{^^|IN}pN z|MIbV+p2m}Q_#Iy6oq2-riazZhE-2iskU47+ckxF*GD=*?^^8To2R1|y(_IU#Jdt2 zKH2MCBhO~Ee=59sj8b;mRW|u5Wj~don|%o7DyMonMW;I9dq|5@JyS`idW>nAJZ((T zrxKSTEk5;ZiY|2#)8bOUP0^#)A}z*JU3-%;mgP~)1&~2B>@$`@6=Pv1s#H@P;m2B%BcsS&1_qPG@WlQa4KqCurR)aCO7cxzf#&7V742 zs7o7W*w@GeyR#Q*n1zK=9l*_;bywt588^&e`s;xs#Tg5&4Mj3zoUEJ_c7b1+G>vG0;s@!;T}xo zoZmWS;izK94BSWzx2{VD(dq*DI>8oYud6NiB)_B_z@kSDe2z^gNmF5n%8AuLHV zqkwl9hOi{fgkF*k*25^_7Y9=VPBe5hd7OakI15)_47^rB7t#?dPoIfQ$cJxPo{kn5 zUM!Hy@Lfomiez~@Iw<-WAjKSFMF$TeH>;S-)6sHCM2opR9jz>0NIENbF@8$8MjfrL zc@F<0QGr~IztQS(gyemMFR_TcGuJAeT!q-MZ-Ijf!~#w3`tO@SD}9-H6AF$4L)?&~ z^NMn-F=Vq(iGBwp#WRU=S`n>a75@Ul*r!XvDZUqt#-3BexD+hr!;$t}=_{hed^Xaa zJBS)7Eat;N_JTq(qb~t=4gQMuBUb6p$YfC|?T^=?XbDOiSm;INkBH12uFN$^mzG01 z`*NMvX(%?6VsRB+4y(koonDkPCDB&gM6?N#XfJML&VG{UC>};`9g^rQevLT?NMdSnBe@+YiJ8T?Y08RC zE_)7gb`?KKw1Z2xAThUi9TS}*b$9WB%U0(cW<{TA$1>CME{^bEkOe=UFi6zCnO)_?T{5||!U;G7GpE&qq|-AyP!G;OM{Upb4rq^Wc-3Lgp@>>dtn{PV~nru0E$MVxF-?+%gfkgdmWn@u|TgL zZ42&fgIjIoPABdU+0=l`j9B1$ja&YiX2IBp4WOItUdXD7yU(z|-FY{Y#Yx1y&9Rw* zRaI|sa!)Elvc4y^952WaTy+D|22HmES|*HX6>`4EC2AtYrSsfbm`q z!B$MH6-wrcl?1PHLiCU6$5_4ivBsiWyztT`3@9r9!s1ss#YEY41puW`HvmcIj#`Y_ z??N0;VBhJKG2mSaK=n?|X$lO$>)jXzvbPQg*#l0Td|m@qjocsfpaO7DHd!@Y32;6J zIRC{8T8jH??WZYGQ~D{klok3NNR~hI!GnMsZcbV+DI@|TI z9UiR93|6npB+sLg+f4QfH@nS~{VS8b+GN*G(AgB-h;23em+kO7PPkpyGBfv`g4L+x zYz=0$iU1HxScYe^*OT35vJ)n|Htoq4$~Kc_HN3-cah8K{>A&psPrzu%+m!1pr;Z8x zgdsA5TA-6B4%tTHg*rJ44lx@{8hGcF-QgzB80|PkRmoSVFdBu!%w~B=^0C@3a;CbnkznL8v{#eVD|A^?OK#M_hfs8<;bR7t zD4KVpCwFQjD&MTtAKX%LUKqrW~F6XFb(Rh!Tmzk!gVQlkppZPVNI zm_Cu>Bb)< z#xZ1izg@+C{e1$)6Yx`8s#Nns-BP)b91C<@rCaJ`EwO2-M;C!m;{6(1TI#VNtn1WR z(o(1DgtXKJIzg|Cfwq53HAPv;#Tu8sH^JcgTB^Yn-@|icwM#XLzol-{(AyE_aJB{u zRhw$b?K+1>yHe%IQ!vS0I)g3jr>1PP{bhZ<9tW?8kI?IzJ!n>Pz0P6rohm0Yy~KdWlYM6Y?5#SRRqs{Vs_K^Z-PgeO z4xNEr3{+Yvtv0F=s7_avYJf~{k(QQY<^z01OVmBCCZn7Lk#id66MRE0wA5t2jGsC1LL|=bn(V@ z`D!-hx(VgFBd%pL)>z`YGj&2-cacuebvI(eL9FfTWK2<3a;e6p>wac%eXeV8#dQ;K zT^u#nORc!B+r>`iJq@KFj)uTK7c+ji?U0No%~VL-cS1H^D`UcEUE)xM^*&hDHFy%q zu{uFd{Gp+r8OG75o{V2)GKBFi!#Ei{OfhC<-!n2=-j2{$*~{_xPoXBE>jq#ZU$s!K zhvQx*yD2NjtH80_Lo&~hbY~^`0Z5j6NYaL6Lsk+j-wfTTNuE&Xa{E+DS_T@fRa>f~ zMz)TK9x2TuX64fNn;%8&wKs=%O;Q?cbNhj3(b|XY;8<#Nirv6$_~x)5F+gt~&Ga)! z50{zQ3lh=uf5fc@=KoQK-7}e9%=8vXKZ>+8ikHDS7D$*z(K1<;Y#K!h*)0;!Uy^WM zb{(9hO(RL0Xx9m86Vr8qZDJe7^!?j}DalGM(71Gy926tCzBXZS(I%YeOIGb7P2n~P z_@tFAJxGa6Z#`J?(fw;Iu-$da4IV5$x*|TC$$nF3e*$4{HNtq}JKp1@SwR?kR0=nF zj)HwXAwa}m1KAv z7eMPR(jDI>*8PC#iKM<=(g$Df>z$+8n#oShnJQigo+4vmMn=4|NTZ61@4$0-9*Wxy zMO#*iJFVIk9tz>#l@-NyIb>{=IxlTwo$V9a-CF|;H}A;08-6Xs-|F1ZJ0bDu8p=-9ju(S5pv8qYjkB06@TE@8@jx`YK~o-R@1 za*I5G_aQQsdAfwD%+n?GqRi7JoV8@0E@9!Br%Ra1JYB+6=IIi0$vj=cROaatVrHH$ zp{Hh^E@3M3bP3I$dAfwbDf4s*F}GUxPr0wveSoS;-Fq9 ze`BC-D+&(68VHo?;x1dIdVsbPbL~->C)`PP^8?|JPPclAv`b;4_xU|~hH|-eV}789 zo_IP~RdYMgSr8aZ^Sw-fyqSJsAi;Qd$PJh;aPjIjcJP71AK1NQmu#7>m~TV*??OVz zfTu(BIw~Z|pjL80>AV0I{5&LO;3g!yPFD>3lbjEd1)AiqCG{dVf zD=)l|GqpmKd<hG0o7YN}HHgmEw}L?xD_}z{*`P_N(#sWzT3(yt;q|cLBs<@tdos{CuJym&Hb3YE&wz0ug9NCB1u z;AsiljSV(v=Cr{-m7INAfB`52Q*RiVcs5fJ}&e&dvQ&T({saZNhfEK>zS)bq@6C;3EKDyFXJsbgDo-b%_!7$p@G+_ z47S9IDh=n&hDKFZVh*)>l`?XduEbPPI%C~LG|Re$=M$rGZ$R6A3_~Q6AX(xR+z-G! z0FsL}-9ad^2^8QSvD z@@THpRi5-yhP84@lcF2lt*~N&P2T8WFvKOX$B{Asi7qBV`u7aIZvbF0g#K8#v;oki zzfvSB)SC?Q;w`YyMxU@}Fof3(k1P`QOzu3?*c}4_Yj9n{|xonz>k_M<=MgvoX*R?fEQW=tO(futcvW zp(TExNR%a3dw4x=c=>{hk5>&Wu||_fa9OVt^y}?j##>DWtP(+GAY?zko`RKMjYhw& z_n}$Ik8~alyRXUq#|f=YK2KL4Wxef>`@jU`6XHMS@T@=j8&(d2f0*P>%oUEda4Mu3T* z7ztjoMS^Ppkd94_09TpOM~CJ`fnjgJG0BR>rxx^b@e7s%-ukD(I9aEJeQF48#GZtZWYn(R&=fd>T zDi?ran#wSvlGJXUCvI7)UF7>fyvW0$qRQh_q6cnrC#q?zyKI?|b<9#_Y-T~Y>@)`f zYC?9GJ&Y5`r(m0MzFNY$+aAJ|i!rwVAoHwy>|q?I+&};~%ba`dVY9*IV*;*2Y;o?h zhaCpMuv-C;E^4*HI2{1xls~nl140*@)T*sPMxsTOL_iV z0C+rqiShiV6BRFd{+v?nVZN|uP{s4lhKIFj5_(AWDxr1f@yaBY z8`u~tm3jBKWlYaokUazRZr7UHGic2*AQB7stZ7iing>8@Gd(0{7?N$?B?uqMfi#*X zp#xl|NTeFcB_3W68D2gI@bQ`iUYj+^TZkBZ#zc&U@R8c0Go+t*QzxWzN^t$#8KMHq zX05CyMipFkdhlROf#rCNHaj7UK?y$K;e?cScgEScxe>+3f&Gtje*6&qi4n5FoKC*B;JT zwUq#gRe1^{zDgVQ2?!JmbQz=0)K#QW`LtbsqZ(8(Y5}y`<00ACkZkZ8)kjhYk|mnt z*KpV_MM9%;yo^Yw9uccpr;+*wG{!EV%)}1@8si!Q8sl2lfF`3zR#Zk9xF?oY7;+&E z^`j!F+iEyY+sSPOr(#ghDC4>xjiH$ihQ1o*8P4m*&`S3(Empd|iADW3UPy8 zuT70aVC+O6u#!(|ig&^AC`A#5NwHugy%3Fym(iF7PB9%}Cv$>yirr?_Zr2PuH)E^LVC;^73NpH}`%Rt4*qu^&irY?|!PvczH^b6~Vz@rqlaUJQ3`U-c zJe}}PiiUoI9A|30Nwc2is^o9rqx^O1SjM46P=Qj((V~(+Q6-Z#8MV+nTPL=9B&b-R zf!;!g9mhhkj?w3`(`Dc@ocozhXCs%?u|+wo8goWxzX6aZxybvu$bVxKY#RWXE0T(H z+fdDUsD6}hqrP96t%#SMz7@zV@+cqwL5N876J!k4Pv$Mr1QP_E1YCh{kz*S)!3gsP zy-<66r1#0W5uPXKMwks(ob51z$J+1{S{EK+HeVz2!y`P8=8fRnHuwq6&KbeOe)tJJ z93J6$>Tbk+&@Dfqsd*##HWPkAb8<%TZ4>;2PR|+Pc|35$MDXJ$G%IK1AE7;dLf6~j z5uQi(M(}1PesJ#G2+w1EBRr4tjqp6mH`46>hOqlPA^-#O6FDG0f=?s!6PgjW_Jvmk zt(zgM-tV0TB<}a_z-o`VsxN~<{rkP1mkHu|zoURDN7nf_dI#LxHHS~o(&pj5v-qEz zxOlkld-$*SOT#zeeOB+E}v85 zoA8)9@zzIe-+h z>%g1v$;~R{vuSt}J`>SGKAVO&;g=K3Dk59F3IAODM51l@F5+WpcoRM$#hajVyQJU& z5aOW`y%|-!me5iSU812SJl4w|H;A1J9vacmQr;Y3&oA8{(5-WGu!E5C~DAo za~APYGh%#-piw3_*(@wL59wp?#x~i9nhcB2Rw8(Y;xQVDa$E6*Xr z#sLD)=U`aHkY+bFQO$@Zm3tAnY5-&wppdH!a$KT>tPIKg$ zE=+{wAV;3*!e_(ed_z7<%Y+r-lUaP0mJVAg2RZUg7p4Y9-l;_%?wR-uDZH1HFYn_g zm$JLh(&iDQ4svw#@TSZl66zpF=VQB!S?VB1=iheT2S}-d9333w_*bOV zL5|L+b{Xrh4svvGkRwxgQzoT&9cWTKT02P!_$3E9GDjWc=$zn0Tj3(AqIfN)r=sS@ z1v$vkImIdRR1~kpl#0qhj?Nh>B?mb=^PD0Uqz-b#Yv3f+A*WC}xN(7b>L5o4uf=3a z9pvaNbc$$Cb?Z~KC9pvcv4svw9r$m`22RS;IsnmQq$kD+;j^v^aa>VMtq|`x< z&eaNYksRdc;I){`fT<30bXKTTuN>s)+~y2A6OyTe9Gz88UI%of4svwxT1?VyxAMmW zSimnh(m#P76;(!~r{RCz!GP!RV8>JO5i@jHdDHM;j&NjbXNDZ%$k@(=Kep%J1yBLm zsISLSjwMGpGPZNTAC3M9-+@a|T&TG4X@P9QckxBQR7W@>wmU&MtB&pDrjBq#Y-d6p z;fUDIJ2UhVj)?8~puqu%fXNY#i0y=wRi_YTDk>ialUQK6j@N^S5PGF-LLkF;+37Pt zhnbAJ9th#LoMQ=lVJ>$=h9;}I8tQ|UIH-J`EQ3_&=4pT7iWv8iyq||A26_sG$XM`Lp zLXJn;RT+g$8G6cPWU^{G=CYeak5#(l7L94A>pVfe&fFjuygFXz3HWtpBpCcVNF;xB0{uUqM}j(4T2byN(!i{RY~27TZKw3wyC0` z;#O%z#T}I*RjO8Li*+el_qw)fskQq1eBN`;%nj=I`+ffZ=lMOqd2(;gyPWsDXFvBW z?+K!evtzJr)J-0rWye6k3h^jAI|f4BO!p@s!`w{Aj)6ch*D?%Ip}}K!BQkI17;QTl`2130d+Dm4~K+Y8^>5RSP5YJ1pV_@m(57AySJBBl$*{Trj zC9`AbLK^K3eaWoK+e=$Xd@-yECZo{*BnL`<8=-m$&(JN z;8eJCcVUr`y9>(1Y7Wcb1UBF3*fJUc^z+ul`PjwRH5B9 zy#%G@dIW)p@S`k*EwuY71~#c+#Zq&?HWdvd z&r>#$kE5}w+@U zvIdd4-EVYgp;q|W1Kc84#p-L{K7{o(j8EC>x#%YBI}&VgOL}!6KLKOO3JrXW5UmW` z0Q+jm%;B1l@4SS+L!*C+GG)~qUJd?J{5yM84tE2`AFfw{>{<_1{C*YPC-ZwcAOriF zrBL5K(!b;@o<7ZaI$k_IPEU1jSA+c!u>f(X_5zIj?18#RszIG5)Zt&Ho=fU}LXCWt zI)l_Up}wn!Jiy4$9;kP9)%7J%nU8&;zu{@{@bOLc`0Hufnvd^De?2c{<>TArucr}j zKE7H0`XG{lkMBl*J+F@Ct>X~sm^Q>PmAnV*Z zlm;~bxCK&W<2)Kc^BcGjjgcAvcoS*3r!`In&D_wSzY1ppr8m(R(Cxh+`H4@%C2;%a zkl%K0x8WwjtMB|gpLliWr}<#~8Bt$1W-uR&SJS^9Gu%KoO}Svqa2wrv%y0?adTM41 z-Hj-WxC>Nx{){+!e%5F~8SFPk+`TUov##-Da5}lc!xYeiX7E733Yx(KA;$_iN&L?Z z9tb$O!Nbo01nCZt&nIs(>#iH-acf zZU)T=q6?(_2!f<+(2OA30JR0p2x2^-j-VMqJOgi?K{J9Ngb@T)X$G62Jz zBIJ_N|=%hTT^mjYwBc-g##(Mur(zY zwx;C5)|6b>ntB!dk<>|$5KZxGCYF*5TT^mjYf3I`O}z|!GIcRHQz^NyHPs0I;*`3u zH9UjC!b73oKvx7g# zKy_T$dJmxPpt-P>{c2CpT-a(OF1;$(aA7OUTAx+KV#S~n%#6f~fDm;?Rwz_MQOFKT zm!U9Np#XWZK~git&Uk~ek`xN1UW)P-AgOyMu&WHu3xjzC)C#=)aUOlVvrn9K3bux&3flhtzGKu>5;npLVNs|h%zdb0X#012y1PgegC zP{>(}cbT57CZ_!3TGW(m@zD?x^sdtr8s%RS+g!v<40_jVY~&;`)uCod)W5X+tYsBh zvL*|XB;Zm-J))~*Ozmj}xYA>z_CAFDu6;~_|E%+^en_$|1wCt))@;*~Pe9e?u&$Q-9Y55A zz*@C=r&jH=sa5-Ia4UrN175BO3Rf5YVez^X0S~#DYJH0n!-IeJzyxSrFSF3!DyU}W zVH&!Dw}IO&1=7(^J5NQl4eIe{4=iCsE0L;TNwTbcfM{4l{=s+z3S1)#veUz3@Gw-& zF$4-~S!uGjV$EzV`GW;vB7Ou!RlEuE&7ppi|B~vz+OpEd5Jao}_vBYt!uYuVg{1tX`Rd1)<+kH_k z`FPi?TRH5xRv><*0_p)vbvqO04qqV!;5dgij@P_Jhak-elqv&x*a}K}#8*t@W_Zq4 z=j7DKlZA{CJ!%S$vi`C`ItI1EM!;FIC}v z*wLV{Rrx-|=vp=8IO?_9hmZ#U>;d{7x}3H-R{P4CEHm%GKx8l%;tehpxnHQreGV?9 zi~7}IH`-fDX(`~jyiu{{wq8U*;;t${jzR0LtHlqP=@vIj1YAU{qxZ4p^2lZff#P^#)sX9YS7i0pbTiA7nr8%&y@6kzN>lvWa(@2rNU48K-||M5zd z5@)I45kCE^@M~50?=v`QTxxwI*bYqG3=XN%wZ8qCG#3IPNmH+q=2^h1hBvs9rfVMs z_eq+36|)-NWU>}|C9ig$p){;;l#2Gi^>L$Np|^o4G~_O$Vba?`4Oar8G)#G=(fKDi zq|GVvHZaMC-;MV0)YD+VuGCw23B1fCVzFhHd!_Nao#2uak=^Cq2wTHH5Fu5e!W(9w zpAd24shAI`@D>tr*%lxc5KOZj7HEG)pz1=H6hXfunZItORWtU? zJRyNJ%MtdTtq4rW!wtdJU(T~TYH5YH+`+`d|75?SLsqi0V37q z8QY$4-bC%5MVSlq%@9xjqd;ra*^Jd9PmBpUYlTwpe54kC_P~D(xByef zP`l<4RE%Fz#)Y0tIr1y$-Mz~0hju`d??(o`RijxXS9xT7@k4kXCiU zv3ej)XE3ULLEqYyI0~eCq%cU*BgL%5c|(MpN-N5K?w7`xW}*|2mdIhK}#ra*r7z=M>73f1AMpmQ!fstoGz z)G_2&foNQIB0`#~l5g5$z=j;==8&hWA-c-rU$;z07fAl>0q#|=*{snV2-!d&C1C$g zj~1<(tuAu4A$RAhP*C6*0jfB5Ws$P9$mQ5ZI$tweb?nx0^MRrR>SXWpiIaU zV1XU3`IacPp*MSPCTqx3$;5jCkyQ;Q4v#%(}I@rrt+!C3`FO{bPa->)fEW%FCj zTutD(?7xP9p<}jR6MXm%lma4MrWzk(U@W7{5{x43PwX(;&KJL@Qn)Lp=|ZjPCw2`r z{fvq&M??27TMG4eehbcq>CF3Al?d%K_s<@rgP7mY+TFH-@rsIaFI~m#{262T#M7FGC8hwHq0ZJ%{yTt=-NrM*j{^hnCW( zr8J_OS!c)T+y4ZU-?Fc=i|O}jfJ}ZW)u$q={p9}H0|((tX6Sq}45gp9;b-Ux1ji9v z`XnSS0QpQ?nyps^2K`Js%8J>slOg<;NjXJy4K_$mOl%km7s|{0v<_ zn(zpQ@de<Ut!Z`T%gh4+}g>e($npIjX3-=>XnZ=b>b82pL5&ohH_`tKWyETEq zOW{@>5j>&BhWdJPw@O*ciX8-{|%x&^}mGrvpCJLn>fATe+qfT;xxma zNZ6jE3c?KgU`F~xkQ}nR6{{Xbc@ICNUawrR@J*Qn%TRE1h75^E+(K%g~ z{28Ff2w{l#V^Qo)Kok7>hLp@s~ejk4xEFp)CV?H6% zN&d^gwC~RzAhu1`#TFO-46zvc7Z^7(Y!{$4&H+CG0Fl&sA}^(e6{1cZ*R!+-d*EFV z+BvgpA5yUm*n=TXi9b}tZ>0Ec?M=j=uK^K1=6lSEF(G>0_h%1qPC*G9C&HfmpLLz& zx(s{Lx8iD#D=x#HTmU8c_;%Xi$-Iu8k8iUbo&1vw7IX0U9tULx9DID+0T?SuK3GYb z(N9oQ)w;0?y$egpYzV5pcTkFE|IUGw?{( zbXeh&;Fj%syw#cn*}lhHtqBaC?T+3HRE*Np>t=+lw(s#)>+Qg+TeQus*1HAsGTzBk zz^OK7;8yDrAIdamhy0mhN>dv%{G|e@jT!#(x4zo$hr5tMm^xSJTq*$w!Gm5OwYg05IXG;s|pMxRFrg&G z3N~D-f&T!g+^7Ku-R80IiuA?qn_Pa=va43rs@$r1i@|%T;qCf5UKA9M^CXVhY9F=m zA)7P1kxUIcHCD9QrGZ}~T`J#l@&8eUpbDI$lbM3vcM+P3OlDw^9)Ji51!MV!5=~$r zmGv4J3GX9ZT$PhGfmZ&fy9v`YfdO&_SLCwjcex0CE4(h9RwG(X9Tc#G6@N5{WMXQn;C%dk}$xUG<7;0a_W&OUi=PYC5@gf-iEQq@DB zCqyIn2BeJO2_w%n{v8*n64{ZH%*l`^Mr5)~c+q$kzF6ZaGM z9IJ(E415aWo=B_f^0`*CH3^r`wZ7@Y>;xX1YHKlr;sOkcTUOcV`SBFM*l3H{*~IJQ zTFo|R9C&MW9cF8FoiA%OWA%dn`deLR(5xot4s#~>=h&NWz^Dg<4MwNSR{t-qSEKEF z@!#&xq5$};F~Z#muE=Ma+=5Rz^SkUOi2S<2_}~Hf*KTm~9SbQ1WAO4G)hO<21PKeF zi-3avyO99?bKnjj@!`A}uL9nT;~QIgDBaij;GR%QufA*Xa#rK@D4rlu9hUz$_!r_T zKCeb2A;eXDUX4az@VF+-b1D&rpJrd}c ztl|fX9S*YN9M=Rg#gt~nxr!es6~Kve`8!aa%z!IlCAf+os2lVkyL>=9?DEA+cOwO(1E_@A{;wdh>9Xvsx)vxerV$)Ug2Vs-9LWXCg>`m;y z$m%EWdcN?p2hKylsgLNdCB+c`@d}1y>or?Mn9yU9iCaEB`xlVu@K^CFx@{k>nK`Zw z;o2lzd-vfwEyp!gxZ;0wQqIgVDe%wept70=YqTJi^kE??M*6)7$SUPw z4L<&veqFP!Yev4HU2OxhMj!^zI+}{D=G~7&h;1gzRk^Ab75S2d-_Yk1mX}G;$ z#5UxmXIMP+KvMoR+zWv6r{SIlls^r39lYgF!x6%1IBM|}*d%zgLG%*mOHRX)l0OYs zha#Li4d;re`NYnhhI2&}pV$)7+-W#MxzlhAD1RDGscW_@63U;3Ba}Z4C!g2>vt{v0 zh|HgcW8ggjvt^M`{xlq+{AoD(#15D(i}HybFk2SMnLiD80igV8I70c;a6J8yKMgk) zX_P+=N6tM~Y$T9zzEF@}0lVWcDTC(F11XNf5FLjWd?SYe5jqmD9z2pW9adyE+_?jC zB;*dr5g6PP#clyAPBH5BE67$~*xXNc5AcrjQ@qX52inANoTu@2ePQE(T+oN|%bo~_ zpD8VO^npO`=);2m@(1LK;m2`y0cVar5R=}GX2G%jap!jh*tK?I?*hwTC|{#iX4!np zpA@%K6d#5Xml7b6IjPt37m2$hvjXm7aaU(nv{?SMxU-oRt@!*GcS~l)Xl%O^cUzGc z;rUAi=*VC#!Cxls&dhvxE*E!KWQbC!B!x*?3!Z5yH#V$_9t&&fK_(iA6Ae2n5vL-h<&4Y4zc7l@RU75FUzBHVssxr z_CO!K%n^9Rk}`Th*P%NH{-MoQ|8dmYl) zh}xqBw&&Dw-?!b;ME~~Ox*&O56>VPSYlOyBQOa8QY*@bH6w4l4O5T4G#`?#&k_iZH z{Try!z2qJ*M_5qFhxst)VLmi`_|O>U`WzW*K00`u!iwP=$Y+fk$woki3Fjle9M9}= z4HNFfX#4-IVZ#4qgpj{`dJhsHclR^_D|h!aAs&moi~r5BNCNr0r*rf2JTIT0oBrSK zo<@TIFZ1$h5}wB*??s7I7fs_>WPTE!BLtGvBs`Br{t1wpg!kZB@_Dacx({82B;Xts2AsD ztVA~g<=Egh-~-OZc$=}oLxS0cci}1EOv+a(#s*&ilhR`YO0!aWuQ>rHrT3cu20+3p z;#Vq;MTXE|1f1UiSETov6XUxwi(+$dA}iF9ct`icE5=qwm9*p{v=#~fx12@5r*0+t zVd)CEt<)Q6xcuLig6vquYLpR(JB}Y?4vsPcdX$mICLj4}dxl##|LBcMka8ICdnxlu-tIa`9vk)pfODp`!Iu#3u>UqP>R zlcygUWR;FY7Tb6E*RQbzehnQ3fA&CQ2&09GLakuQefJH(XHdpnBM86wCg5cPPa*v3 zTj(9Jpl9DTmtJ3b8y)c^dcQ|L_-DQYI7WDjz`p`qx#uS;RQ7EA{V<3Dge=Pcsdya9 zZYREBs!pB+Pk%0Em3S4pS6el&X>a}L(P}@}z@-3q0-}zCi;XAS{S;WIP8`&!69;wr z#6gX9g$nm73P@;x0%jTk&u9Tw?Q9pBXL?2co*cQyMZV0CakyTBw`%)bbGV;{Ny{fp!%*DpJT#?e1 zlhUTiqfi`c71@i`3tVUE@<&TQ;%|0dylk+q?RIf3H(b4WE_<33t8Q#`TBuoXKy<8{ z3SA<94XCEx4Gh-+H`vs6Xn>~!A64>w-1=nI_iM^-H@0S#+w*|S^OtV6dR(X>Wv>{q zM#PlJhF-1V9}yU^b_=@)w(+IAhoO4)`=?!|ym1wlKYO4nh6?_YP@7nzSE4djOeTD_ z%=Uocl!>bmz-}U3a#q57n>51K$ zdV$NT?RAk~G2|^d@>&Lm|kM{~gZp)E}yU14<^6VVB%|-r=A@}FVb6w;= z81niYx!*;m5k1j-YmU6ZMdm3CA@9kNceuzS4cY235!>S;bNW(zSLet@x;(R_E-~cZ z9J$j)zT~Uqvs~m`zDnNgBLD8IWK)+I_FG>iM|77>GB2MN&DSqh5tEJ&O;c^Zi)*am z>T!3EJy^uO)Ws!o`b-CBl^&Bt?L8Ac@8F+3a2>>zFJAUNP|G-i?0wI*phvAlQn#*o zxn|oMdJ-irNXoEsuuwERaeNV!oy}%t!AMHI8B&LFAZjm|K_B*`uTlTvTtG)xGoX(5(J~ozUV-{^!GI`8X9Ml+ z);#$=ke4emn$ia2YepjP13~|ru{i8&f_^#|^kG#D`uhkvC*%uPun^K&03q%EZF(}J zUx#H6kZ;K1g;?pBBqOTdK!`Q;RfgFjt1y}~_s<@ner0onL!$hJJKTS(98-NO&cTqa z=^F&C&IxLg2u%3E6@dcGK$vucMh8+*-8TsOBLpFX2LDutF|>dkMlU2oNQSvs@eM-C zp!qilsS+Vii;%{Z6p}7wDLP9hXQvL?9^hb7mAmw0e$$Tp5U`ZA^dT&1CjoA_O?&$v zN_Uf)nSo`)X7`j$lWX^669=_=VB5rnGd@nLpy@{_#e9PJ6h8(3`2^ejO=c+>CK8)? zGaaAcSbx(`@Sjg`g1_l4Bs8Dkcz@Hw_|GRe&ToC1;*8KeEeJu)2wl{qW`s5&qs%XY zrIxRq5gNQ$^!1CwHONKJk&P_M#sDc-9F1kH@4{Wc#W+5GQgX{L0iqly=nUY0;Cj4* z4pF{8;6uc_u9VBQzFX+Ns$AR;A@h7AOE`Pry98Ck*IIfI++u<8V>m>7hZT4Y?%Z-R z3AyED0{TPU$JGJcw>}wX__-M>`jbg3buM<)ht6Cguy~ zB)nZq%TBR#EikgQ>|}~5O)V`ur2?p>Wv4uO6u1&rU6%iXCQ@*DgMI)dSsyHh!i zm{<`+><+d%--5>R2zkZ?nBD-u6&%m=xt0^>ZmZw~0TOX9c!O;Ml*B(KrCosP_!nRf zP81*;AE1Cq0<^@lWScBNTYM-fQv~RUH&I%L0G;vYNjX4(F3wn6!Knhwj*p{&Y3YUF z?v6h|w&_JD1L%owCeSHb_r^aUaIgR?;#bhmA>qxC(-&V#;IJffwLf0SK))St1aNNr zB~oTOy}+Fpzw-b9hsXN?tcr_8lkY^gf^BvDGm4&*p?!*V@$CfWmR<>9eSAKFd7{q7 z_*%V(&%JHEx;I_mcMvoHg7TvbSy`-GrTmZIhmahc=LV?n4;45TS1e;^Y zXDP@zo{&R=6m{w)Ws%rp03`oKLC%GAJ|@mJa3D$Ej*sN%kxm*lB~BYL(W9#Aw&FKHx#-bl zEL#pjd!Ig=!5y7lM~2vl3i_PmoJ^nWR-^M=WjA`fF1uWFjm}T*gvdnE>GPLa(G!x_ z0w}R!$3a3i+Uxuz7xuC$x~=#aP@>CAIrGG@8AReb;!dmF0C&(KB~gV)Mo$|$) z>9zD;z{3439Fn3ojK!e^i(M0YlzhYKUN7mAcpEKz?Ak)M6p4Qkf1~0VN%yZ5&)>;& zhwv0nKNvOHjvwaCLsJspgNVgvMj0_H-VHDDE&=Sghm^x(yFu{8XCYP5Jc1q zSpiy7DW5?B$J)eW)9FQaKbREj1jAa4SuD8A|D{-o$4#J`wfs~h4g|1~!{y`aTmra+ zBw=Bu9wSSuJVw^VHu2b%>JE!nPzr0g6}W<|n-weZ*bryJI*uAF)?u~iu*wf6FHTMg z?c1BfAi_CP9#&)e%2 zc?gsCHy98Md9D?-c8}!Sq>q639mTeL3fVSaKtvr86Fr631MvqU`W2#rh=cwCgj|e0 z$y3gD{wyG>X6wM`f`dOA=cpDd5C?n2eD!v4)pTnvAG-Gs0~ot(*%sRR*>I zmp^a^RLv~o1O0v@WQvb&o)*TXI-JLNO*0fi+TUl=$0e+Gyzg`zNR-p@|%ht^j3dY z6+0uoZinWY04|dlI%;yP40A?Kb-hzP6jKt-%*Y3A|Hc6on?AIK{MiG%_`7oaR3XMvXjn-34$AyRJxVhCFfd#hcOoWMr z)fSCrJI~+km@7~P6}Ff-o_QW(RYA2pQIoVS~{I%UQHS5RsuYsv;tc=2W@Ex{vUiCWq=dC=$ zE9^SfibFp`0eOhwoNh}4?^(03>H#gN0}T8vhnOLYo4|Cvs~t|Cq5Hr4n!TRVtRf zxmcc!NdgtiQFb+B`4rSsu^eTOVl1cr2Z*Z~%Te}ZvR@CxkXJGIvRhTOeV+sIcSdov zEjzg<5z$94W9*`5kb`#sF{}tF%08K zKnAc^K!}WYf@-YAv=KOp@ekZhFEJ}0$uLDXtW!~V7oPdE2dGA~l-EZZnUQZG&4-I! ziAP2=h=cx%LkKdIcuYnT=Ma`m+9rAQA>f*iwOF=fBOy>4fWaMnU4>3?@<=pzI2)(3 zXXU%krXMo%e;^h1t)D7Q`KiYrF8wYvn*N}IntmH!o5Q7I{h*m8ZWm!GEk9`IQ1#d^ zp^OY~&X(TuZ-7Vqq8Xyjk>WPowyhCTAXf@p5LI4jVz%aM5gu91n|nZ5^{E zRgBqmz%5_k3(G#Wu;p>)?$W~6XSA4CpsO|NB&OtCk>B?f`92KPl>E7}6KG9N{@hB+ ze**AmnMOKJzGp^{?Lw( zHS=`=Y_S?!3oM^NlP554H>C4P)cVJr3nZVwfBoa`298gnE-~&eLD*TrQ+Q@<+^N9v zNeuOmdk8o_h0U>X<~(-b^T4<-nqXl8Phx6d+}}axQ+RG{+$D{c#V0YWVBDMd&nH=2 zFxKqz3SghtxVJH4nZ@G@t@A4QiTckm_=He1e^ZC6nZI6^3H|GM z93Qn`yJcKjuKRr;s|$(rRA9j>6g|(3#uFew?;$UE25miVR5^{PuQQNa;F=;V(6_6c z1?B?iX2HPzd35Wo^<~0h>s2aF;#XkVv_cC672jgx_ z=56w(avM-IbEa|$=8_EdeP30a4Aa5#{P~KE- zGdN4E@a6c&C&K9E<~)5w<*np?0VroBR}2;Aww#lcw~|Ynxp^zO+=P_3l6xNl$Xm%J zbf^`k7BR3%@Nm*goG)xS_dBHIt>i918t1I!x+01VWh$bydBqK7u83konM5>aC6`cc z%Q*weTgg@Gnhj-y@>X&Q<*np0%kx%p*@1NDtmHEAyp>!+c`Lbu@>X&wC2u8{P~J)| zIrCO>uLG2~l1nIWCHEJIP~J-J3NOFFzQm}D8_LMJ$BLZ_WSlP)q#8uT?=UGtX3IG# z&Uew(ws{`)INYSA@_L&mEqNX6!%*I{-IJEIvz*H?4D9gy-sAi|$NIFVj7tJmu##2r z51z840kj4CMgV$NK@+XQ7ok?bClwHucrOBLQY`T%#S(AwENY#+0dH?oEb%7A5^wT8 z6nlU21|4T+#J2-N)EQZ!Pz^;PJ19Rh6b364AlW1eJ2g}6j5jFTNuf~c zr6|t=lKO1|+hcfYp`VLKK&?;~q$0oL!#@d#QBkaH{#A3~cSZs0cdkTr@O@jHY{Lrl zB8@cUdXYxl4q?ri;;aOnk?4C429hUDrxQiKOp7SH2*qrktpciHe^uo+}kf0Z4 zVy}Q4XW;6!9VDx`8)|T2=6&G(&Q84L%pVqJEEa6Xk9UANrLO^J2^MBLfXT2$$HEMy zSsCu8#KH^#C&S&8SeW@3K*B1~Ychw5tT5gs7eRBZ$q=qi;~}6gvlNMkHJKA2v_Ios zlga2cnGmF%m(go7WdK%X^qR~m5U@I<*JK(%S(njkGA#hsXY`s3)!CTQYcebzn=*P$ z=3WTcl5wxeWb~R0yQytr(S~a>$018f^_ol>*JS+8zY$@-LxOb0)Jyk;e&-|5%D5)u zcdCIe(ugTDDW%Qa1%NB}1diC&Z04{pChN{L>RA*MvH$>J!6%YE7;^C9`Oog3ku$U5H+hLE)1id?| zJ^fI{syTv~QNTQ7FryJ4yCn@1kp?r3m{wr+XiRMpRI$evb7B@V9vbU+n22>7ptL~}zwZ~-i?7Qjll02aTtkS$&b7r^2-DjqI?#nl2> z2^YZPcL-1YQfhLJ*M0{cV0!VFc0U|e!}p0E>6OpLL+`Q#i77_;;eIrXQHDNx5LjBg zG4^ud0viU87h^81)mwNba`zY@in}pDv8Q>{`+=jF_O$GSG_XH`=^B{F2+vSJc7+b? z4Fr*0r2&T5xK;y|_||zlg4q(RKeaYtnk9tWBO14AY9pu)*g*|?x0spD#&4saHWRJJqPrExRLJ;&$bh%qIT>?hrzQOH zzil;EX!b=V*rB0<#15k7u^K%SQlO-4NVSGv!t}Piew=OTXChDI3qO3C!|RAzBt6Jk z_S^QcBgKNM?VTjx9BX)rDfl0cf7|ALeb>i~@Bes4xPAY}(_ws9j)3ovZNEu@g(y=h z>?N4q7$pasKDMjan*5mgyr9RjKUFh>zXjZ~UZ-4z@@CzRFo(WKl>(k(*00aOmEEAZ z<{;k94`|@-VwDIq3TU-pvZ$XjHfTX%%!v)dJkJGcHEj$G05`U19_BM=10|nVn|#i$ z(Bxb2eVe^h13loiTDtF0(s6)WerIUuzw{JypmPkQXJMzipTyJPqp^FF0vOaBFiTMD zO;F9}yU2sJuv*%FqrCR%u>PjQdO^kH#|&$i=8>@G-kA^UaTC_2Tv+`s@;+f@x9YT< zS&As{)BttPKBIvfGKkIaTU7|>f>Mjm5tMVza%QJ#JQFFqN(1#szQ*;p<$cU@`PicI z;^T7-h>w=r^Rc*0e4rBMGN*B;i+r0QuQQQs-0DiuCk=U{A!n<9t%S2sX6rTZV`$wt zR|AZ+4^&B^zMRKZn*4Ld@KOy(YOQm5Y}}%O8^P8oQZN@RsdTv2oX|CkL5O&xHrfs! zXGZb4v5R&12|K#=My2R_R2cqnxe}6dl(hLz*kjq~{}u(HrQ#;V$AKe%>oMImR3>o$ zXiJg&RsaS5e9gsts|N={uj1}^wUP-FP&s$)*m~ZcP@7ahDE( z5nuR!4ne0)m(^UdQN@EA{@=8dJK_I=ZlbYBhy5G)-KoMB;>BJ>LbK_T+SsqdA@BRb zyD!Hs&B2(2k>-$*SF>8z2BoI)is`T)vZ=b)PF{>WSg7-EuH*>wjxCAGyL;_P%)6zM zE1Hkx;S33h)0Fulr^zg3%^O|3Qg-?^A0p<5RjxXwMC(Xu0Xt-SZ&0bZB&Weld}fTg zzEQ}-I1YG<8kD%C{@ZAfFZ30fEEQy|1|EX8RgeZP#M)D~O%p`VE|`=^rAdeor8H5!{hW0Q8`Siq!CiicuHB{K}*V8SBI> zALR~@F=)Sy=nwwc15?n6jEavEat$>b;n@HG>H!JX*cw*oPopy09vmpj#kB}kBKvDN z^0D~8N7mzD)l%Y02@=%iKNz1twqpt!om|z zx9n$RB>P(vbEQ;){j zyB>^K>NW}4>q^LTLHcS!8dlNtVJmyS_7UdrNV1zECA%Y*k9xGtWYxb(7Sq;Uud;ld zE^qe0;TS$nDg)hE?>s!)n~4eUv~i-dF`6 z_B5;6(dyO%&D;upNe_KXF|NhvRYibdO9Y~pkLry(g%P;cAJHN&%_;vUP{;FA&b~Iw znt5PIC+iy^z_6oU7H&S&rT$k{H*BK%^;!u^5G9H&AA=dYox%L%8=59IaFT8+V69;O z=9d4pY4YI2nl<(@mZ=_T5nj}rjaqV*b4?k(-lkHEC53dOQMkj?&!8G-U8l0O6{&hV zRFOCuDxxL(H?j*gm$cda8khnvZ+z7Y%6e8;I#d-GZxSKzBcAml$GbuE9?X2-mlxkr zE^^mb$-6cAX!!0?WN!6oeplm90RF3?x0%q@7xi`UIO#kljBSmjJtOorWnjuG zWFsFg{7p7jRR+$BPT7T_AfLbpJ2ctYg9}^|nzE@Db5wW&MV{ysvxu0$BH|R93Fi|S z>IqCXYk!I6*yLNFE}z0gcrrJq@F^@TnEW<6K|YBovB|H&BcDV^WHL7+^1(eNQ`~ER zQ;hBA0Bko;G3J^BFxNcA7;+B4kn@x})C)d=hi!YxVG-=izz&#uZV2J)A5Y@!*krSunK&~x#l3tw*{oY8rv@hf9lG*KoEw|$S{I${TIaMX zQEhzI{S)wMt`8ufgQH1`)#%yHZ_aMCZeP0$saGHm0jFMp^ywAIc|@rzI*k>pUZTEk z1=3vWeFhlJA%%13)~k*e(5+V**U+t38i~)Fr+61o&O8MHD`%d95Y1CO!vAJ9kwD%& z#dMS~WwimTi3BV$8~wkTr}zgLVK$o94fuqpc5XE>OjN{)s`Vd5>pwAB|B1=^ zPfXT-VzT}dll7mNtpCJh{U@f@e;l*^6Ng>_rx@>oXEA{3=S_^C0#X(=a1$f;ewb9j z`p-hdE$i>AMV{g&#=}7x?l(6v5*q0@H!aY&h!F>R-)q+%J?YCU4RmlW&&Gdc%B=~ zBcN93d5{WWjD@V!m`R|-p`I&o2yG9rxX2c=!(WP%rPbGr*n8KMO7-hU)V)6`Wx@5m zgLc7tg>nyTfqSjunS#;1_sTNiX+^4fe^xH;KOli{NJy%*UVoxnHtY3cSSK~bwtT0z zf^U79@LkBTe^p5(eFY5T&I-XlMf|oJx|7x5PxwO4ZpcWTivWF*2<2I+GHB~d6mJ0F zSia{Fe!=v@*?^Lq&hGb5bRI1LTPXziCr1ko8D8f)!3C76@iB-f77_S?LQG zJ3L1qc2mNcVoFnXQ^KVJD7z`)^5ik#N?74j@h`*WzHsG`&2R@C!Em`RTse-IBs;6! zkyeL0<5QfqiRdF(DK7U##s_I)#Yu6wFET-ZM2gFOkv0KJQe5tfvop_DdNfY~W7_eG|qX|xB+Qc3m*R3?BLv*K4ubTR)Jw`DvEKnu%H_U*!?OvcTauj!sWhrc^OejS?)_5>68RfQkIQJ0XwRiZYy;I zq$Q3nW7*?V%aWtYo+iTO#kHHmUA_a#n9 zG8Id#q%8L(dY!eDAYm`7qT5Pwxi7K2vPK^0I6f?HB($cuGB>Y zO2TON5WD1y2e1{L?%YJaI<%ju&In7Em3j*8TIyf{oKzzk;M5@kB&>?*2ct!^Q-?Y4 z&=*gGrDjH%##XAk39l{z?39O;!(&ge6-)6nSn7xnz4%nQ`wUJ=r7yAj7(sUy4RbCE zgKIXDv#3%0St({=QIi(J^Cm^Z!>R${kfvyaG~J2vMa!+CQ58={7@eDEfY4HX8-VH* z_hS`}j&WZ|HpQunqA@YXu%*0rDg2C$?M6*(OYKDAE*c+Z;pjjjQn%!vkpx}E6;2fd zNg*p9B0*asw75!yIucxQtpt}yosNhUH-uABDsn8ko#LV4EP(3N4akz>#_$vX*%Z^g zxG6jjKuc==GyucHX8>qRv41Qc5gq{0kt#h9z{v3Z06Oteh{Q>L8#&imlyPpNQXG#J zm4^QWx|QN^tf))?Cv^_Q6qScR0VR>*(5$E;Toj{H9GMkWhQ|P?PMv}PiiU`vZ0aZi zRpG-xX-V}Hs17d!(3Totiq?iN1%M8#9zh30f%pUj%tTMfi=9(~gCCG-pd$G!l&vlv z?Jzk~bD02R3prY|Qq0NX@hT_Fm-a5ViYE+xM3iMt6t_!Glt2#cU`Q}bMF|GTQn&@l z)HGu`TCEV|F@`fi7uZ<~0?vVk&V*J9OLrG=78uHvgD44t@c0@^NWeMUFfljs-lgva z`8r?&QdC3-W=Vpj8OXM-dmR0?4fL0f)BK#XIv>dDpE;9}txhPr4-dEL`P_7UI5esccp` z&u6B~L&W=r@O)<4oX;G>^O@<~`Aq3w{sy)x7L6}$tD5IC(?h&J0ZxdY!BJ*qW}tzw zuZVs?G)KYdxNaL9E9{56=3x{b`(~T?ptn=c=LzcphPB2Dw~}>+VkI7@HZ^OF#Sm_` z)uG95eU7na5?Vw1el51&Eq0v|TV#b-QS2Uyz27Dtt93@~^ihIUV*8BPF(ZNfREyo{ z7W;t_o3_G#rP$9#2rKbei8o@eMa6*tC3dwIE75I9=#&Xs;cB>RyBV>tZIgig74E?1 z8s3x@K9syLn`N#fCv@bMjc%30>=0XTSsHBTk_pTa=8`0k&+8EF9|`f zbBW!L47X}Ok$g3hw;IXsF@0_{lCzpy;+H7Y@vF1K7TmShYF-k8-Zmq76$69_rSonh z`IQ!+Z#SvY?UsD9k=$a1kEP^GG%pE3Z?BPD#4LpfCHX^l;@@sWgst!|DWa3gJ!IP? z;0UNYxaSRTu@$E6s@iU*GI&WqR-52{O)Y>{!8uo{l#{fmNb0l*S>XuWwO3QMmu;H_ zS}QpA*h79mDGiho^XLd# zm%6mO4|M6j>#guD8^Qe7i+W%vCV|YYR;=XMMT63zef?vm>9!6HVMdV zcW{j<&0A%KOX05l8&v}@31|~ca92`&pjB{PI=I?fMgzT{M;GQE!#zTyRqg3B=o2U# z+)7A~5weo9=X!MduQJ?os5Q{4TCFo^4}}1&g!CIB335Mdgly8>lHt5GRMKOF75*>d z_#j1qmjoQjHj*c65lZqpExGO>qL1^)63MRLSyBZZcE|YH105Iz)XOQH<2it*{4vA%dKR;n=X+F+jksDiNEB*u_|$q!1UyFn67OLMeYa z#%ozD^)+&vlCw+|J}bLIlLtVaA!N?o8*z`eSKYPeemt+o7sp{;jLD--z6i6)jEk- zmzDueU*AG(lE`j#v1JWgZ!V~vn*4hNHC2%%C@cH1%j5j7dbD<`2-4#Z26?Q|6h`hk z<8hN)F`U-3vK^Z3d9ZDF36LaW9Fb0!xMsmO6jhlQH@I;d}`IB*dtdzQxk z19(5gN(7L)EGVR}(sV|y+C|3}2~A-pNy*vqJzXWR+~cCnQNEC3OEtZDi;FB?_vF0R zox%ibQVI6)<0`?n>Ui4&)3K_i60FISVbrG~>MFsSJoRigZe&^v*D1|Kj~7h%>rEip zLp3?rj0Gqmqsnf~k$YX_QUr*!fUWl&`Fu@g#M^|-ZHtE7G~f!`s=I~_P@#%WmyXVc zTy(}^^-D#k&{NLnloXoi6ne6Z&Y3_A}2XExNq z`WYroRCHgl#r(|u;=56kOSa=3*K= zY_we8YntT>7x`sF-fGCrD_mq%1P#d=zERW8*WtekwTE%rq5oO_??c%mu z8nMk44P3&N8{17Fxg2S(caaC@qt)EDFRde=k=HW0x2lZXu}$R%YL@)$fq!FCL}lbw zTYB$*BEG5`ZndTNJ_oykhCO-^ggmOYoo3QNaQ?)8%$9=uYap@}x{QoKbkBiMs3=xV zva>XSRrHraKppHhd6eyU`McZgZ=EKvRQyp9U;@YZYu@T2OLDBrXNNYTS9c$W2%A*Y zyL8n1bWyMeR%5D7MSYVh!xJ(l>YG#mGUV!A^}%rk$ER9T98((8Vi! zdrbORbziVD9j27YZdJg^Im*zPF(K`%uskVF0!QR(Lm1ic)5+R_^=r_^L&eCMY>&MEUukR#W zS#M*9`iX08tLakBaU3LPx4ER-T%Th{Khw#6#z=3`zF4CEo%dyBXK4bXT~(`da!|AxyA>|3gAA7`WRf`K+Mu~u zuuoN7?B_uD_07=bdpgQ@cC%)@3EKR~Ffy?o&;%y$dPAV-ZJI#+?==Kw$Xl8~{r{>6 zU(L2=$5oW2tR{3>H5rQ$JSPiBh4_KES3YBxJg5@-HWpm`?13#Pe=YJEyH{G>%Tdx= zy+RqN<#d@zEewHu8_xe*Q4w;UqMJDgn zO#GPmE*KC^U*Dnpl(QaCnzC|Us3@v(mS_S~<_1N;gr|vmwnLL2hQ9|DS@yPV*7%*k zBNSccJkFPBQQei|I1av0yC2Y+F_;LVD;dzA3ud<_^V@2Kkmq^|jbkAO zTU^`0n_v0IXTO%lw44o^1ZBE- z$ty+4-a4b?m7?UcfJZMu7rm}O7CJ zYfJY?=rg&7z0|aNgeKdMCy(N%+YNxn@U~uiKdI_36K1X1U%+$&YmLkX$nbZ7uo&1m zKKzRxC1jCQ&CBTNQthc!Zi$Pc+gQ{NC81siPYD;g_^jsPnvyH_XyMV9Z&B(}l?N1m zh}BJ-3e5IvdSEy&bq?mx3TQo~9@z~al+QTwjBz5XgeXy}xxAgV^EA4oe+9KI)H3o&FMG9QeFgD{$ z2uqJH(#|z#J|!C??ObT)lWr|&=W;ZkbaO#F zSC;vt#|7HV9^g{!0dD7FG@tb7f{6rPdxth+W;P;XC`S{N#J)xl8Y`YD89%wfv zi_*3JcC$4%^k09wFb7_ltKhrvAna!rtkPhk(<)LD)N^aUM~w4Z_~e#$KYnaf7gT zR^u69kPX7P>6)v%vO(B;OydP~(=3tqJBDiuy>K|>;*+O z3wwL)G6I%t7WOVy5I5oc9!S|N?1kwe0>LlvQagsd=iAOPs7YTOQ2~cjFp)dLaQc`g-s^1tD?mlZ z0cAz!Vs6Zi9+^O5MVFw&dZQQP?TdDUS`Zx{gCfy!NQ^-AMesP$U&f((bZ#LEMszdW z;pn}P5Q!Gz-ES3~g>{~4?>)A|Er2Qt_u5t8M|ij;GYRqc*;Q29@s9+j_kO$TEK z3u8(9L5R*3EEF-I693~&O{@|T%Ep%WT3+0~$KcfMdtThWrh?V^Zr@`;oGrKSd3!yDzXYUi-}4T-eb0N2Qf0B+zUN)3pp)hHJ@5HS$`ZMK&$~)N zy>k1W_aeo)LM0$>-(z9#liT;a>lD=QZ$x46;`Tjet-5{ByWSJweqeR`o)^ZF=x>h| z|0j?MzL2ChO2RTJ3&cK>7xs~wd?u4&A4xLVPy0w-*hiA&vI@jLk{9-o7UWoAA4&GR z_$z_(!amaBkl*H~eIzgJBN3X2@F=^W2t~Hj`+~=LDChm9LEisrykE#zz2Yfj7Ebi9 zhnn736*S3zCknOqHBT91(gD$nDY_D(JG>uzoDXuMKh>gR%Q2So?)8){q-OB2jUMhr z2(!Jm*I86xV(sfcicD5Rii{wAhYSV7bM zQ&2U%QEwU3t`osB7Xr>F4Ez#!>-DC+&X>8sO9lmA<}Fi&@@%S7VFG`jrMJ=qE~-?S z!0%*mHOgP7e;F04RZy3IG7EE^f@Ukl8kAz)P-z*IDA?16EvnvyUgvz&a#htAd37mR zFah3syi%RBDm@l^(`+MJ{Hx&4dy0bE{8ysu^e*wHDWt>y`Zz$RDq5%iHgYaiP?suM z-}6eznhhnG(*dUd{vt2prJF?@rWlFFJt~JOqH>rbdKSo@s2rw<%3+GA9HxlMVT$O< z=+**JIZP3i!xT|DOc9mC6wy~5Hj8qYA}WU|qH>rbDu*eea+o42hbf{LgEJL99`B;4 z9Hxl64pVqxOluPK3OEPgtqxOoahReO>?-YWm_pSc&Xjv`m|``wR);CPgAP-8KT}65 z)L{zm=iVx&ggQ*&{jY-5VG1wyzK=%$>M(`Z_9eOib;w}~Z@^c0A|Q2`!i&QcD*>s) z6yBhsslycBkgxE1(9~fHZ`fDJ9gpfTg*W0Wd=HR1OyR|03KqgXE6JvfK_{3Q31&Q^ z&d3UdYA6cXL78kQR7og69&M1+OtBxX1f4<(g;Fm?c?6L30w%Bv4A0|(c?8r7{T`%L zz`2>M)R<9G;!u8drxI|uUl{w#(fI}cDNc6CL0V^$YfpTx6Aiwr%4Iyl=BhyLzYo!> z(G-+1>90Dh;0U;7pS>UZ>`9P)_I~WMC*a;^9~iXHK7I+v32LBT5(n95?_i((IuHZS z>3GXN`(QG0i(qJ#sF*q_i(0{A=N(|gG*K{9OliuZRO0m#BiT|uyPzR%B)tX)me+SOw4M9^geqrs}&kADdl9|M52Wz2%yYrh1vvA zX0<}?0w}Xup@{-0vs$4^0w}Xup~(U$vs$4k0w}Xup$-9*S*_3k0w}Xup{W8Wvs$5P zX<7wPX0<}oi|z!V%xZ=7K6^2%71I0c#jIB7kT9<+RA#k8dY`?R)e7l-_F`5mG}E~k z(v(@P(Bbjl0Z?YOLf?rNLx3`?6`GUT1&T7O6`EW6R{+YaR%o86qs(fBjtjDGD6?9j z<3kG|K$+DF>3#NMRx5OZj5+l_`*5H%iUwcIYK59(Vpc2QY(xkFhXfg6QZGGr3OMTl zh*__5}LmKKt10Ix;A;TCq6}dvYne zv3aht8#`W?T{fMu`Nk@%WC{yQPG6 zx?zpu5+Jf(hn5Dc#N&juX07y$6)dYN_8;hdRh3)NS9;pDSm!dkAL=U&erd#(T0suE zD$DS323F#+1x~Y8eoC?Jwi3HTixs_IHUh#{@F@zoZX8%A+Qeg8(FmBMuu5!)!QO@B z1g{di$1Qdo1|yO(0V~)5cV(a*tOvqi7R7eEqtIxb>q0B2a zARm^X+sce*B7D2B4Sh*Ja)(>;zl~&E1oSo~FP{kBBW;@m6fP}7v}nMPQnbMN*J8M< ze$3#&OG40FZG!uVr57{m8p$Cm_!~+-f<CE?^+BOM6?>Zx5Gt&ZSC3%xU-_KMAT1j57C0AX`HsC3v^A5xPA-RE8 zLUtSU8C388Veieuq$;ld@q2G~Pv4%~J=4?M^lZ$&I=}#fjx0LJ;$TovQBgoqQ9(fw zK_?Lv6%8(lpv0h#aa@DOg+!B(Xc9Cenm5L{MvNMXVuHI#Oe6;5_wzYb)qR^KdH?)9 z&+qN$>F#^#oH}*RsZ)F1Dg-Mgn+%f|Nc~$Q$;XB|s)H31_d4wxf1pW0t(ZLP*D;N` z0MRjOMR<>3?G4m1?bt*hzcmZ-jR}Uf+=`4KZIz}a0(Fc@?m1c-EL3tk{K>5{ED}~^ z8ChIT+KgipfxWke#W)?TIL|Y|RdhyBE6&y}T0fg|%yM)^(eIb}?epERJ_so8UejtT=ZW znM;``e>8U9=9l?ilVGJ4xrqtBGfL4Cf#%3?zLVAf3&pw5aQ+`sziCVwU!#q55Gx1- zD<*9wn0J0MSTUJrn4HVt>VPg;eTMo|x+8*>gUvF*o#c&R#iZXbIfzEB3Fz{⌊ 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: + 80000000: f14022f3 csrr t0,mhartid + 80000004: 00a29293 slli t0,t0,0xa + 80000008: f1402573 csrr a0,mhartid + 8000000c: 02051e63 bnez a0,80000048 + 80000010: 30405073 csrwi mie,0 + 80000014: 34405073 csrwi mip,0 + 80000018: 00009297 auipc t0,0x9 + 8000001c: a0828293 addi t0,t0,-1528 # 80008a20 + 80000020: 30529073 csrw mtvec,t0 + 80000024: 000062b7 lui t0,0x6 + 80000028: 3002b073 csrc mstatus,t0 + 8000002c: 0001a197 auipc gp,0x1a + 80000030: 77418193 addi gp,gp,1908 # 8001a7a0 <__global_pointer$> + 80000034: 82018113 addi sp,gp,-2016 # 80019fc0 <__stack_start__> + 80000038: 000042b7 lui t0,0x4 + 8000003c: 00510133 add sp,sp,t0 + 80000040: 34011073 csrw mscratch,sp + 80000044: 4800006f j 800004c4 + +0000000080000048 : + 80000048: 10500073 wfi + 8000004c: ffdff06f j 80000048 + +Disassembly of section .text: + +0000000080000050 <__udivsi3>: + 80000050: 02051513 slli a0,a0,0x20 + 80000054: 02059593 slli a1,a1,0x20 + 80000058: 00008293 mv t0,ra + 8000005c: 03c000ef jal ra,80000098 <__udivdi3> + 80000060: 0005051b sext.w a0,a0 + 80000064: 00028067 jr t0 # 4000 <__STACKSIZE__> + +0000000080000068 <__umodsi3>: + 80000068: 02051513 slli a0,a0,0x20 + 8000006c: 02059593 slli a1,a1,0x20 + 80000070: 02055513 srli a0,a0,0x20 + 80000074: 0205d593 srli a1,a1,0x20 + 80000078: 00008293 mv t0,ra + 8000007c: 01c000ef jal ra,80000098 <__udivdi3> + 80000080: 0005851b sext.w a0,a1 + 80000084: 00028067 jr t0 + +0000000080000088 <__divsi3>: + 80000088: fff00293 li t0,-1 + 8000008c: 0a558c63 beq a1,t0,80000144 <__moddi3+0x30> + +0000000080000090 <__divdi3>: + 80000090: 06054063 bltz a0,800000f0 <__umoddi3+0x10> + 80000094: 0605c663 bltz a1,80000100 <__umoddi3+0x20> + +0000000080000098 <__udivdi3>: + 80000098: 00058613 mv a2,a1 + 8000009c: 00050593 mv a1,a0 + 800000a0: fff00513 li a0,-1 + 800000a4: 02060c63 beqz a2,800000dc <__udivdi3+0x44> + 800000a8: 00100693 li a3,1 + 800000ac: 00b67a63 bgeu a2,a1,800000c0 <__udivdi3+0x28> + 800000b0: 00c05863 blez a2,800000c0 <__udivdi3+0x28> + 800000b4: 00161613 slli a2,a2,0x1 + 800000b8: 00169693 slli a3,a3,0x1 + 800000bc: feb66ae3 bltu a2,a1,800000b0 <__udivdi3+0x18> + 800000c0: 00000513 li a0,0 + 800000c4: 00c5e663 bltu a1,a2,800000d0 <__udivdi3+0x38> + 800000c8: 40c585b3 sub a1,a1,a2 + 800000cc: 00d56533 or a0,a0,a3 + 800000d0: 0016d693 srli a3,a3,0x1 + 800000d4: 00165613 srli a2,a2,0x1 + 800000d8: fe0696e3 bnez a3,800000c4 <__udivdi3+0x2c> + 800000dc: 00008067 ret + +00000000800000e0 <__umoddi3>: + 800000e0: 00008293 mv t0,ra + 800000e4: fb5ff0ef jal ra,80000098 <__udivdi3> + 800000e8: 00058513 mv a0,a1 + 800000ec: 00028067 jr t0 + 800000f0: 40a00533 neg a0,a0 + 800000f4: 00b04863 bgtz a1,80000104 <__umoddi3+0x24> + 800000f8: 40b005b3 neg a1,a1 + 800000fc: f9dff06f j 80000098 <__udivdi3> + 80000100: 40b005b3 neg a1,a1 + 80000104: 00008293 mv t0,ra + 80000108: f91ff0ef jal ra,80000098 <__udivdi3> + 8000010c: 40a00533 neg a0,a0 + 80000110: 00028067 jr t0 + +0000000080000114 <__moddi3>: + 80000114: 00008293 mv t0,ra + 80000118: 0005ca63 bltz a1,8000012c <__moddi3+0x18> + 8000011c: 00054c63 bltz a0,80000134 <__moddi3+0x20> + 80000120: f79ff0ef jal ra,80000098 <__udivdi3> + 80000124: 00058513 mv a0,a1 + 80000128: 00028067 jr t0 + 8000012c: 40b005b3 neg a1,a1 + 80000130: fe0558e3 bgez a0,80000120 <__moddi3+0xc> + 80000134: 40a00533 neg a0,a0 + 80000138: f61ff0ef jal ra,80000098 <__udivdi3> + 8000013c: 40b00533 neg a0,a1 + 80000140: 00028067 jr t0 + 80000144: 01f29293 slli t0,t0,0x1f + 80000148: f45514e3 bne a0,t0,80000090 <__divdi3> + 8000014c: 00008067 ret + +0000000080000150 <__muldi3>: + 80000150: 00050613 mv a2,a0 + 80000154: 00000513 li a0,0 + 80000158: 0015f693 andi a3,a1,1 + 8000015c: 00068463 beqz a3,80000164 <__muldi3+0x14> + 80000160: 00c50533 add a0,a0,a2 + 80000164: 0015d593 srli a1,a1,0x1 + 80000168: 00161613 slli a2,a2,0x1 + 8000016c: fe0596e3 bnez a1,80000158 <__muldi3+0x8> + 80000170: 00008067 ret + +0000000080000174 : + 80000174: 30047573 csrrci a0,mstatus,8 + 80000178: 00008067 ret + +000000008000017c : + 8000017c: 30051073 csrw mstatus,a0 + 80000180: 00008067 ret + +0000000080000184 : + 80000184: 00053103 ld sp,0(a0) + 80000188: 01013503 ld a0,16(sp) + 8000018c: 30051073 csrw mstatus,a0 + 80000190: 0a00006f j 80000230 + +0000000080000194 : + 80000194: f0010113 addi sp,sp,-256 + 80000198: 00253023 sd sp,0(a0) + 8000019c: 00113023 sd ra,0(sp) + 800001a0: 00113423 sd ra,8(sp) + 800001a4: 30002573 csrr a0,mstatus + 800001a8: 00857513 andi a0,a0,8 + 800001ac: 00050463 beqz a0,800001b4 + 800001b0: 08000513 li a0,128 + +00000000800001b4 : + 800001b4: 00a13823 sd a0,16(sp) + 800001b8: 02413023 sd tp,32(sp) + 800001bc: 02513423 sd t0,40(sp) + 800001c0: 02613823 sd t1,48(sp) + 800001c4: 02713c23 sd t2,56(sp) + 800001c8: 04813023 sd s0,64(sp) + 800001cc: 04913423 sd s1,72(sp) + 800001d0: 04a13823 sd a0,80(sp) + 800001d4: 04b13c23 sd a1,88(sp) + 800001d8: 06c13023 sd a2,96(sp) + 800001dc: 06d13423 sd a3,104(sp) + 800001e0: 06e13823 sd a4,112(sp) + 800001e4: 06f13c23 sd a5,120(sp) + 800001e8: 09013023 sd a6,128(sp) + 800001ec: 09113423 sd a7,136(sp) + 800001f0: 09213823 sd s2,144(sp) + 800001f4: 09313c23 sd s3,152(sp) + 800001f8: 0b413023 sd s4,160(sp) + 800001fc: 0b513423 sd s5,168(sp) + 80000200: 0b613823 sd s6,176(sp) + 80000204: 0b713c23 sd s7,184(sp) + 80000208: 0d813023 sd s8,192(sp) + 8000020c: 0d913423 sd s9,200(sp) + 80000210: 0da13823 sd s10,208(sp) + 80000214: 0db13c23 sd s11,216(sp) + 80000218: 0fc13023 sd t3,224(sp) + 8000021c: 0fd13423 sd t4,232(sp) + 80000220: 0fe13823 sd t5,240(sp) + 80000224: 0ff13c23 sd t6,248(sp) + 80000228: 0005b103 ld sp,0(a1) + 8000022c: 0040006f j 80000230 + +0000000080000230 : + 80000230: 00013503 ld a0,0(sp) + 80000234: 34151073 csrw mepc,a0 + 80000238: 00813083 ld ra,8(sp) + 8000023c: 000082b7 lui t0,0x8 + 80000240: 8002829b addiw t0,t0,-2048 + 80000244: 30029073 csrw mstatus,t0 + 80000248: 01013503 ld a0,16(sp) + 8000024c: 30052073 csrs mstatus,a0 + 80000250: 02013203 ld tp,32(sp) + 80000254: 02813283 ld t0,40(sp) + 80000258: 03013303 ld t1,48(sp) + 8000025c: 03813383 ld t2,56(sp) + 80000260: 04013403 ld s0,64(sp) + 80000264: 04813483 ld s1,72(sp) + 80000268: 05013503 ld a0,80(sp) + 8000026c: 05813583 ld a1,88(sp) + 80000270: 06013603 ld a2,96(sp) + 80000274: 06813683 ld a3,104(sp) + 80000278: 07013703 ld a4,112(sp) + 8000027c: 07813783 ld a5,120(sp) + 80000280: 08013803 ld a6,128(sp) + 80000284: 08813883 ld a7,136(sp) + 80000288: 09013903 ld s2,144(sp) + 8000028c: 09813983 ld s3,152(sp) + 80000290: 0a013a03 ld s4,160(sp) + 80000294: 0a813a83 ld s5,168(sp) + 80000298: 0b013b03 ld s6,176(sp) + 8000029c: 0b813b83 ld s7,184(sp) + 800002a0: 0c013c03 ld s8,192(sp) + 800002a4: 0c813c83 ld s9,200(sp) + 800002a8: 0d013d03 ld s10,208(sp) + 800002ac: 0d813d83 ld s11,216(sp) + 800002b0: 0e013e03 ld t3,224(sp) + 800002b4: 0e813e83 ld t4,232(sp) + 800002b8: 0f013f03 ld t5,240(sp) + 800002bc: 0f813f83 ld t6,248(sp) + 800002c0: 10010113 addi sp,sp,256 + 800002c4: 30200073 mret + +00000000800002c8

-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%0Db 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 U8W5 zc}234gvU}Lkch|O_b$hQp=*dk^7~R~AHhe&oQ8n=YL~WHd{OUzHmRTBn&?B=JM}?- zOL%-S2mCoBk;39U`O{y*WvqW&H1>{|8 zRnkGqz6px45;F&;%96L+B;sjx<2;cP zx(Pq-x^m7o6m#r|_!>bB?9!5FGw&DYj4E>JfqHV{{#d3fRiDN|aXNIgRiZMP9~RYB zY)lYu0WOSu)9g%_q!^rLc{1;HV!;u0>UkR4LrMaa@$uN1QOUWlWF^Lxc!Ja`_?01t zNOEe+mpp_ZFk07l0A4umxcHXL|E%l`@zD=0)Dypk?PNoLN*K_fS3Kg zzu)Tb`Rvt-dyuI_cylC-&tyIuDvc!~p+AX{x2QTqS95FSjf2&O( zQ|>%vz^0jBciC_tLzoR@P6`)mb1)G6oi`Kz{$15TXo!y4K{op`KBjmbQmoI3ZoYvP ze_=KAQ*Rc|;yM707<^_yR(}{iWio&H&EkQc$o!m2AF8WCm)n@-W0Q;U|C?_XE^~Co z^*IO?LJdsj8L2=Wi=DEPh3XUqn*UFqdvo-Q)XazEz{0=yVotx`=wScMDTDFqI;t^?mIMoFA&o(($>NfczZ3d8GEwR-_NprJnT!5 zu+ue887mm2zQtB)J(V77?uFw7m+(1*@tAmMf1oAC+h^@G>szq&!YqqlxK-qZ8q)cO z)OdKxptoR&$kr$n5}4@(p!a0?B?`~6G!LILb|bx_i{a1W>O)9Tt*;}8seby4YJCqq zuApbv?IW;beSV4SQ9>SB~y68AV+)*1u2EyhvlwT>-^y#e%cpV%fiD?(`f^4uz+OV!nF?YNxxCy zV;R4SePM|vx4c~8lIAw9xZ^9lxK)M`m$(w|rmo%`K6=s%_GpCY&3#M5*7I42nsBQ2 z1a-A10G=u1HW)fzUfBM)h3Etds2p14N&3eV7n+bKv@(Tc?X8TEM3;PP;-PJ3aht~@ zg)jHsDT9a(W;bU~T?2GbE_Z0Ed;Zct&b5i(`~2O;Bb=dGz&$@w02SFW&6F>97k9vc z!^PwHjlZ}9C9`Kc86stW%G~?^f~85jk;>eV&+b!pZV~aiJnKLimg`cn?aPolnn#t3 z#cT-PqDUZFswwX=<`-Tmdo5RQ<3?jNVRBi0;MdXpuod2FH7TJxeMpI0V0A0DbY$)T zE4NX=0yF~nM*X2tA-6bDtpvEMg}&X^5;+|f;sP^bd?Hg8=pL{pl5Bo8gS7z08ef_D zEx})rzwBSs{||KLE;K4coDBN(EbR(>k$(a3uSsfQt}=o?lrZ%3dm7)G*%k)B14m3q z9Oi`;K3Gc~qv&Et7h+7^F6}ZF5P}Z-n1d_nZfCU@kDr}mYORg0!fy~0Not$XemzA( zm3Rl>uzOV^VB=WA{=H)Qe*c6MC2A@rK7{pc8-hE&ovF(^Xp4;v8dCgEr3rr&4qbQz9jsHJ-B@XPuepfgIO9v zhjPHx)s$fPUBL^~NJ4Rwz8B}Cs!`I`?2K1|qUgcuWgeXEQ$`!~;XhR=2ax zZmv?v>%Tf6sTNRguVy~%+$%^|2H;;`Ep)H{g?h4gxa*VQmas-b0V)O;mUy%)7`6z_m?XM z_SaD{FdqDpV*5^Rxg$s3!xF;hMLR5jO5k1@mU!36uV(Vqzh>jdJMAy3N|(lS(Jeev zmj2K;w)Cmxeyu}Twh#iG*5qqJ&9X@DEpb&;eaY3#ubP!v8^4*xb2epJ$(ldF{B>o} z)y&_2BRIT)i&z1$ZoU61+gS}LKjNT#Mxb~WkY(^nH-%MKaV-%F$e_f{rNRUE-LQ9L zzDZj>EKG2h-ao20Xa9ddK>-xx2Lf-e$5Y5x?jEH^z2Gz{_)R_rn#G^sy6S>EMSZ3_Xm~!PC*<{-6qA~`Z)`bz9XZN4k-o6iv~!XxL*_?rFlbP68Jk1&e5-c zJdrN+1;zN6qr(*vjAsylf4#lgTiu?ox!J3kKYNJ~GXFwE;QISY^hbUK{Q+*`l->a} zv^#SD>ys$g6)Sc`ec6N+1bcw012IJL*VPv-XMSCEK;Ds5dR?}^n)yV^(Rk8`RNz+r zXjpWX@%u0={=CU7*+r)sp#T0+nBojZys9bq*Zn@q;}=vOn1bryAcF>7%WMe^G*trh zXgXIj|Bud|-GKi{Aq6`8JvG{^nLp=j^bK|5bIAM57FTNROVkQbG|0?VRgEo z0!3gD_>OP2(Yg5%=&{TvG{{7yKP4wioZqAm)}Zn^9l>q5PWUwJA|<*D-q89M;d@UMPq%QlNoF%rDe?9p~lr$GynS|@;))S1*boB9gpGx zpUV6d4e<@*Ag21u&S!ui)ssK+8Hh&z;F1o%^5{N8^$od3)ze2EyZ;^MGrq&=!kcF7 z#*ue7*TS-z{FnKq%jQ}fN12S)$%0IbIN0H*GA8q1&yBTWZM-<(0hi{mj6-n2aA=$ng zOS?D}zS=gtLP4dQ%r9I<(bddPDK35T{^|L!!<-jt;jMnVlxJY^L!-(g z{9uxv81mLCcX}+wGgsdPb6f044%wl(NFWJtY6NPU3IXWe=@(qJf7Rr7N1Fj^O8)=H z0`hnGC={m!KYTg2eoMLKleBKNI6SJ@n>(yKJOrt72rjN3OXae#V!!QGqYYf`*NpEtx&r8t~uM2J_Qwv=T`k<$YY>*(DMfOB?< z(@OUa$!Z9RR;sC~zEp&P>1bq%f&QNcrgPDVN)2Q+6Wl09MYen4y414rLb(FkYgyzosrE7^^qwThrw1e zW2kiS1THqhgW(7KRgyGjzBh@gLHT;l;+^k(CZV<|%|1VkFccgvpOaSoe+h;zVum{K z$kah9ZdCN9{pr;84i}Az)B=o(dU*Xw?8#+;`!<;W?esnz71it&RgR5p=!tkN^MVw> z1iqCIi2}M%&Q0Cf>=_%IoWW@A@ZSWoSN0hXO(?DtK-qQJ2zu7J_3{w+m0&sNh%#`@ z?7|uB%t$9M+%TDTYhV1jUpP0V8k6EQIK1@*<}h5Rst{n?cQVXDJfie~7fj(!>$JPs z8?^fK-&u9vevKx>lR;-X86F%=qRA0H`giSQFzFo*x}9s-EF8t}&t;39PUXBYZB4ti z(|f(z&34r3w)@;z{O-X?zdxFezX2tacC=Zl+=@&1T+9?r>cwir?zehTe>gb2CjZR9 z_CMN3t?^|D%9mtM1}77IiLgByMK^YDT`RrtLT>fi`Zq3pWA++8Iy-J3y)?$xWqSu5 z{A?c&JKg?E$K6hA@PM!PdoT4zD+RneJnZaWyS|sdb{$)xUup}K>j#73_15IUpnWtR z4u&U_>nDS=-k@`R+S>1TC)eb?e0{Jt&>xd&t9}3aXgr*D+tcA#3rD>+9y+aQ>-q%6 zz2SgO4^9U1JX1FA;^Vum0rp}aYTNO2+S8}*dAmE3#?j=gH7cJ>A2 z_oJT7$!GR49(SEvm@MyyScLYDdwn$#}Cj zo=h7%_$Y8R9G#7OQ~ssqpw;fm_HOM~v$TAN<&~po1nt`_MUCyvQoMO{BbpAUt^TCl z8sMwJ_{?RcvE5*^HEp(8T50TT4TtwDwWCHhzSq-+uiV;x|IO{)8~UpR`kKVB(CAL< z-BxD{jPG~HyYsFr;Ov8Mp3(OAUdyd~OLQQXSv;8z>)px8aktiQ zJ&3B+(()EGtWm4Az+>S?W2;!+yA#zK)A4YhWpQJ-(vYgz^X1%9Ho7-_K=w_d8{2Wc z0t%{m5#>tZp@!AdkBGsp4hHdX5KZp)M)4}XY#I+wyW@6$*uD=nRU~Sa((>90i0HL40URSYQ6)IxdOI;-?*N09pV?HD-KK~a8* z03ed?RJz?9oni^?8H)_!Vu$<5?q<1lk2~-=x3&dW9|5A<@YCFYO(T7Nh ziWjK9pk6rzBF%WSthzw8DQ(paKqD4?Z4Y|`NOlCbbKY$eirL+Yq6HNORwBFZxZInJ zsD!ZV4xJb9XvDW0a1f1G8_h~p@e;T?aNu*TaAwD&D30;vmLV+pf$(Ox*(gOZ`4x%T z3o!JZ%O)nVeYDfdtyC)A*D7^b@GOBUk4o*d=UH>RzE`a^>yS%#+=AzQ=_UX8r@mDN zA1K7|_!uVMgp1jQ51T}kBsfp9DW)6SFxt~-deoz-G~?aIrnU6q1K#i#q7*l})AtP@ z;D6+^+Et@?yAst~XZ7x3A)8xK_lyB-5S>msJ@TRFwJ?TR;T!81P4*ArlFvr?9C}ey z>k>{3y2=R{xOYm9+OK^{nZI#ouf9``)EX&qkrC;D8pRYG%vV+BK*a5p#yeUO-D_g< z2M053R}H6vdmd1RqSx@~uy=go-7C0!zE{M*-Q*leT`-)m*qMCdKzulUjZXY=Z#{u0-D99#9u_44KNDY0v|jFdQF;!ApR+MJ*UcG;BdP)HzRCL3NZR7kSIxIRuunkSJEaa${$2qqqb0 zIN6W4V-76Bo2^%C@GM(<5(|m?C4_F4mIVdUIvyU=ZQeQR4odwYV#veF@kyV~R#d;i zNdRIM{O(5k@M{eO_|(KM{i7(p*u*Yu5o5)mQ|Bukb~ksUYI(U_Y!;&p@tm75yD55@ z1mlmeL0MR)pXM-IEAD`ZM$D$AE%h?qDMj~M#|ZVQg6}WZK%_)H@XNFACUIG@#2#Kb zIHpuv6X@Ohb2+w&4-oZCy0ta_*xW{>Ksn?=1AoN)XC*$Mo2}Gto*qXB2mO=DQPikZ zZpIQg@}YvD8UO`GIlk50T#FB2l-<@bW=|aI4iKKGb9UX7^B_0X)#`zM4-I{_KNR&Q zMUAwCx>>;KwgrqF12$~r&>_a5gHhBz86!+}0oyi$)pOt?pJ~J2h(o9e-S5_h2=1vdZk#tQ{Qe@F#bW+(=b+4qyTbo*i|Xb5&BFeH$M6u*L95s2(5$s69D5|nKqF`Esav(vQAFHI1J(NVnD$Mmp${{h2$XvWrtjY)aZE>5$|Ait(# z;}QOg;AV9;6wwp1RaC3pLJUs-hd;+~Erkf9X-B%?q(0iD0^E&JPhHVrJjPt4D~2g0 z)4IymlYadvAW=j}AF)f@jAJ6l5U96CrpV9Wl%+9S!Lql?&u1-*SeYC+)SZ zVxtn@-q;D~l%Z*+L)HA9A!2jz%)_$go|!wakqbrSNk8+XldCeQaq7{uaROtN7Z_2c zJTN%)!SK#QwGw<}03?dZ8TrPI+cF(DnFgfpZM=^RT@|wq`#W_VA~UnEnpZYl#duZpbLvsMVEp(>B7OF<~fy_Z}m1M(zXn$&@`1z&>y!PePlC4uub= zgVuzvw}RnYeZ`-9AQZNf&U)%*p(_ z9AoCu#B@}Ok`Tw>>__MO6LLUNvbvk&?rRb-K!q{%-7OOZV%3&Z2AHZb!A)e{ZuiF1 zlNSDTxfhGmBS{eylS{ujTu5BzKcmPfNH0RACZ5#N34uF4|Ai4 zvAaW2*BJ_Uk1QBStMp#4sz9x0p3fqb34@!|r&u zx*a^`Bdt=d){*}J0mws+Nyv%ttzZD^uWWP?Md*A}%jzeCa(DmaP|9)%@H{2E?x5be zr-&r)m95(`ymoYFOe-TR4JQ4-siA}l6{I!mooe^k6b|~ZeOuDGm|Hnxmh5M#c8l{8 z*xM8X$t>2sD&{{4fZDVXH{yqSmvc^iMOX$9e2hBCy&y8fAVm(XQ&2*TLtA_cuqI`< zo7GzM{@tcbKomx8c!o*OoiT};VmuQkSCjdsF+pm~FtL8m=%?%yOu2f;o}3&=W!~@< z&h?`9gEpc=)t`_{QRzWjaq|sPH zRd-%-IXq-o%Eg_Qs#`v<%)n64cEOERQ@=d&+#gCOL_T^oF5T)(LcG zDOs+u^o1poS?q*HhaG5dyh6r`sRMfgLn5v_IGi4-^GQhNyI0_Pm|H^=ad(Z~a%}Qc zzJjvNYJ|BGq6Q~|T&~)>kM*BEqJ&8=5)4SRyyvva_u&Mg_z`i3m=S9IW9Er|;QqUk zWK?{oqJ_Y0McxQ4Iy*mQ4AVI39YDLg?Nbq2(y4M#3*+~%fG1D^ao^0=BQBE)$PKV8 z$g<8NdoMx&0~DxFjaTx~!4a2ANEvygMk6|)l7sfN@LT(Ar0`I;FrlQyEgYcPKAa`us{NT!F;ssz3oO4>2B){+ zJ|?QQ4J>3ah}|2=0NrVm)J-NMrkICJx>Nk5RZO9`_(Sn$bt(*<)J7WBJLyfdITh?BOR_A4Z8gaaXaAHi)I`b zy2!*$Xs1Y2L%J##)oav1s&&FKWO_1@vZyxhj>_P@mvW<7Y*w~+H}?YN5>A=Ofd0BS zc?=w0fPqmGX~M)Gr(o8pgs)&2g7gtFE?0{|s6v@Vn@j>|szkXKA@{}P5R_o3nwg6j znxT0O%TL2jRPMHg&gL)&DPxU--XO4LpgC)>noZ?DIi-0aNpM6LP885k{6`===chG76JP8t zwew(RNMC%WWvoyIld9jU! zhT-5vgkAf9AVzx;(C7hDn9u_Y>5(QJO!`cUoe#0#PE;=qL3@hw&~rwcdv)ub;^p&Jl$j8 z{*H-FVHT>zvxc4LHf!brOqD1?);V7XqwYcP5N-)ePVH_j4-+3x@ARfe)gE%-qoW~K zjmw&le&wY1p_`ZpmAj`st}4>4HnCtoor1T!-E$-oG4C2-i5erg zpX$%;-P^^TZOn=2u@LNtf;%{yt>a$*!OiZ2jbUp{4 z8(X^S<^Yw7wZ_g~>89B2%;J=_+gx{58Vt5*A>W$aBdY9WhIP=ZPd$gQ*;H1 z>R@r*fFW7Gvt24Sw-X?W(;$P9lkSaep-Yg3D#B>? zX*8#rN+^Bteo4KrSo=dRE zYb>GWiJDm{^F4&ZtO zv2=!KUOzV6o05C*8tY}X>0aG%4_oeG+daI`J=}B;JMN+C9=xIMxe_nSS6oTmJv7{d zH;P-XYqTrec+Fd#_A!w7J#B;0TOGB0mmeJ-=_t zwXW<`Fre$ig5>HxBwD7#^fHx-7!6^4zl*dsW+a+1tp$UIKO0OZ zaOViV(Sm>llFX8GwAR+SFL0?4n6=mqrb(Faxh!mRc!*4kPNTNlHjE<>LEbSaWJF3L z%JCLLh-!CmqV1$Zd9xi8Z;koNaq+a*m?9P09gnd_3|U(;w#f}wdxO*Hs}ve*Zl<#W%UZ;Fja zGu*D-#J)_Kuwt_b6X=p3wZ*U+7mh2GJeC6!VQo*e2V1zXjsw!1@>DVJZ($w4tF^(H zRbVMZwu|;q#QN@-ds!qo67UT9jn}Y-3X-iBcUJj)=O9Fg+9!s2F=Wt}^*p z=ltivCbnKUzRa4QA&=Rm3SDjOcyeejgkohyAYAbqZEW17vd(xRYQws>1OD=cFy|r? zy8@~zD+(HU1nlaX;i>mm?9LWn$N=?%Ngt9MsLLkVZio9HCzua950$8s!FCLd%EQeQ zY)+LhoBr_VL}o!|4goF7hB>wxv`Zu?Zxdf)m4(~f%WG(IXUqV`0{Ye*TI9u0(`BlA z3B?A~d#t>9th5rt2x)*}vKUefOvovPxOsC86V5v%<6}8hDVS(-Ff2mWN)qf=M#XPn zy&Y@v0uD2n7^$oS%upo@7`)QCjkS9OXLems5tjzVve7^~yDgdCV&~q;1cMS#F~=Y; z-6$iim5_W$$f$knX^??aTB+ZaN8`9WhdqHp%e{;>AAo`hw`p@Hoi!3O)jjQ<=&aYl z{uL*oIcWY_tdY<9d(gr!qyt>#ffS2Jr2W@cuG`|0Bw)Y@QW@26HGnw z5bZy}KEoIuI3D%Ru~7!k7%`Cd!jG884X_f~!G7K0ag2iym@oknrqck6oe$V5@i56@ zM(;OY3;nqu8mTL(RDAH=K8pd7> zy{u4JLj}oQB0DKduu@vcS!oBU9_E!4Fo%G^N0s)l%Y!Tl9(HB|qlRh;u*9Yhhh?6AA4LT{S>b9C`FmKxV_JfHKp)CQ zO)P2xkhqaB;s&I1lmaP17b}vj<$^gfk|PX_;#|dp!M7d{#}De*yjeTCx1V?*=v?Cg zvd+gm)X@2 ztU0nlY*NM&&!V0Zh>EDNo6AYJTiEMWsjnJN*hf@3M+VmRU;qm&rHbPtBPYy0Vil#c z44gP{Nk<;%YL9UaOpjcFK}S8i>*6>qWO4G0ru0&ag^DsPTy;LEPyH z8%u~L3CCEHY+LHdQbD%^E^IPi^ichy@9+_1ph{#d$w1dpZfT>6gbR+v>_;)x0Gn~9=NJ}*H48yk)?vsnCIw6N68F^{Grd2nGomJeL=uqjZ1it16oImx zN7jaZ5^H1aaU0;8w_|Knror{NtA(3GOo{Y$2ql#@7qBUzG%*6Dl%Y#(jKwsFE}zCr9F$L`E!r2kgADgjmz?Bu zOC2YJ>NgNF$d-q-Nq0IL9~Q>Q<45|u#+ez*v5_zD%8x~%v1*7bXXv3;tu9)DK{V41 zY!5)Fi1GoBcyy0(EZ|-wdx5ZoFTmj76sY}ObANT2KuBVEDrkzs%gX|jq0JJ42f9mh zc%A7Ev=$Zz#UFB`6XQi6Q4w8`lLNYn>mE~cM*LD9#e!+w-s+z_#E)B#xMj_=#Ip+U z3Mf|Mxxr+XfTYD5n3(*^2}|J&u=0E;J&X_Ycx@;ayc|FzigN`LBR-frOD5#PnxlbW zO%h2v>{#=R%B@Imo>b)<4G^TMOwW8w9cySTN1zmf*5IIL*sZZgomd97MONZvXBmI0 zVmXBmd01r8hW3b00#2$sjxA$*fUzkmbdj=+En!H49K~pICg+SXNh$bAfl}M?+Jv85 zK`Z}@qH=anu-c-gXa!y>Jy=83ZUl}FtT^D=#++x~nTdfTliQ)J={T((eJWOmSkjub zdsr+U%MKiD>p7(F0F(3K%lbuo`{C}8qZvGuw7^J4WE^J8m~IvP(DTEW9)XYeH?kuH4ej^AQ)`*6hs?mLnCRP*FWbnNuXE@IvnJd*M)TfqoflCu<@|d zam^;}zI)_dW9}KD4;Bj?s3nzx;X7vJY0u(~?RnCXlfNDTZFM06-BYM^Kxqvp5Wt`% zrOtJ$6d2*)8hzsoiL3J@DvyMBV1*?ExCGKZYG8dInJbZp!ybF@b+WD$FzJch3$~U} zpSNS*5S!|OoI}`QVrZ@?bBr2nckA1+S1TbDqd}E!0fpTcS&PCtW+<&pT_V)rA{h35 zNks36p?KZ1#2CU+wIkXgrv3^Z6Bh z619GKBy0A&f7~wQdxP9qIMTyp9ln_d3_GTx`6W})!~oFEymnMkO|83%w~ANLz+i-A zNMz+8Q46y0;4nt}lcP8eotb2ngV-CMhxiK0fCcz@eB71>fw)ccg~bL=&_w`(wF24v z?c}MwhDe7EXfAn`aLOMzL`^Q%45Pc)S#OfR4>c5nv%c0+77Y*h>fX&gGaNkx)|(*i zv9{HIb{<=6?(j7EnX z+_2>VgUBG};dM-jN~@Adk;MRp(HJ1KOTKc#K|9RVqy7O_@Q<}8F=NqCoKYM=jzpAF z(gQ$$x3b5ylu%Yu-XX`-=T0z+S9YiD^JWIAqS}HRLAagr0PwU0TqcecVN_>_z0P@5 zAY+hMIFpLPf1LWn0VX74kqGq!qIZF-x+mPkbt+vz%4OwOt=PmV%&w?LbzOHXW+OZ) z|LL(Ni*RB+ry6e{a^_gqbE>lRwFnc|b55laF_e@>a1d$H;vimNs# zpB88>`tR4a0&4vo99G{r-e-1bg4uaiceW4GWJQnYvUr^6zsf_=?KE1;mlh zswtE)RKP0n(^xM;$4}E_JZa~N{N2ld%FWG+G}nod`vvT9X0YOrbi^jfu{UB1d zGc@_)y`r=LV^LSF2oF2B(g+hr-jZePL*cw@a76((kQqdz8pLW=Fy}%f!A>UyZ-Q2{TX*B#`i#3-civ`wMJ6w!5%<3%j$450_4y&) zfCVbJfdezSWr$({aGTe2s`J{&D|jyWodT^?TQ?%EVZS3+VpP|4W5yy~udh3kUv}F& z+>KfYo7T0Hxi`UJwVs|KuCIsQ%PO!*t^vbXN|{(=wXoAzS}p7rwX?=retEs@d5~`u zSM%9yx*4l!i)QIo)=~ymnZh4N%~COI!BNA23mQoW0aF{rvf`~EEC6W~t&nZh#Yt~s zw1R0#F_qGwuEXG#!$2x%DfzIjj~*Wd6W~Kvkq|KZA}2i;Q`STzHxwVw)qq97U#?sU z^jjAL~T%7=)$5IMCDy}2NdI4LRATQS)sLvt2 z%7sL~Qo|{z&8_4FDOslkAyP1pm&x7BB`ab|*Gd{kB8C(xiJIh`ynP*98p5e^6e@Le zM;PWMHYWm)P{G%jM@m@gC8gS-dN8XuP$*c+d}|N3Xy`hbIIJQ4<)qT3%~c6#C|OtEf(&R0w>E6b#~x?-`PP{krpwPFm`2xrBjw|$o;bU3FcF^E9b zsY{5t05YhrApss#s2+qwz={E0svf$K%RD{ybl`N(BHDPrHEs>>yW3{G?p-jo%(=NG zvn4n%dxVo{L)|dKJps6wYekP=2RfY3rLwcg6-iZY475Y@C&=4iPe*$wSv0vk&gfak z)n~FKp}rpHdbQ&nS>n^@Q(eLEEzZOz8Gq3K3f)5j1>1RUVQY2d9X3kfu*@N5 zHn_YIMtO zW@DX9;aO*9xN<`V6x7G`3(frG7tfeoVSCJJ%)~Hmd+ezPx>=yt9P`Q}7OI0@0BHzF z{VorOgBj}{WH8*bOfd(FvILE6t+;8hoeCs<3X!a;;|*|;opELtg_J9*7W4oH@}XIT z2S_(8fNvqIic!d#TNY*;a6)n(0vV-J$;rTe*mxiQdic?5n;;(dj!tkJw|CQAuJOPF zK3TD0mc!KP4)sf??m$fX$J8AT&88d9&sjXf7uK4SZr6kt9J$4RR>6fR{9~gq+ekl7 zkJA&W1sDq`!dU>tmA%-NhCPp%wPmp$$3MUTnmYS39!2l z)PVyAd)Z5A{kx!X0cNbLmJP7Sj2VAy7WN&RIxVCI?U-FAoR4DLPKA(<0q)_D`kHQUPfwX*~yu=aViiREM zas}=mKi1{~3yyfE??qg}s!unVOjc96P+fI)w(9IkM=-Ou1yo_xjbAnph&?NilrXBR zGs`KfrttgNP!Hz{0`-by2|)ZWWvl-wlG?|Se{shmlB8AOYZgEqcT8Nz{piB<8TiU= z1*=Yk){EWlzSg|D+rm)Lf7Moq7EK7dC8uQ!hLT#g_M+kdW>zkob<0qV6R3%^6=Wc@ zk(4-%K}k+a6r{X7?Qw6EjrsakK`+3t3Hwt3!ZgTwEe$kaLV^yAVca^4aVP}S!GqT5 zzLP6XGs+&&3r6|(2&QnM|q$j4kBE(z_vjf!{y zA>xjX{S)1P?i-87U?cv}c42uJWRJ^P>?Yb{-#%^7!KvH&1b5eL*@p#hy=)EmzZ= z@L&ywBG=89jR)2%Vhejx9)w`HshjqWF;VT*SK)1x+!nr3+`WmJjb2ab3a|h=Td*bt z+|O7o-sS4Ya&q@5tIDJetvMT;;H*-#%2Ei4EY4PT2$)VZutWkmmD6~vifE-Mb@^kf zM@>ScA9EA1Y*WK01u*?xK$!?u2Q574#~1F)3>k>X0Xl9*h7F)Y?CHe;E!=e~%OSRg zCHUUF0AIa(KR(2!2wZ?8-xJ{sldBAJrh`60Ho;?d0vd4hozBi*ITd~tH^gtk==C0} zNSKMJ!G5xhi$Zkr4oq&y~2V(am)Vc;C^^%;LwDP;o>>3B{GQz6r3vBmUHF;974f?-|}!7H#2QXj!VQm zgEo>r!~++8I%QJrBDp#V=X?H2Ra}b_MUj_aR$U%&La2eS6hAWA1zg6L1kxuitTOXv#Hb!b9=PsCkioD7sE#p@3`= zYMQz&RhB#BsN&5y!nq2}FnW`k+;)s}-YHQCFp?|}#7xWuD%fz=9;%o6HBV?DHfopC zA2B?!n8qu>*BnjagPrAYKLlu@Xhb17b~Sc#dAUB?{m=-2s!-j=2Tb~%xQ&y6bS^n2 zP!`%SmCI>xNhl!JfmV!=S;*rk!Xfv2<#}PZd#!_|bfotj;t>nX>>bo{ZcSt_aPYYp zJI-)2SRrEWG?ta~IC&Dp4FDaacBS@}TeEyIvCXYP{OZU!AfTOImq{vsgqulQlRzE| zj2Y<24Z#VoWpc(NQOw1N$8I$DJL zHg}(ETq+0PJWaj>ar#LUN`a}w6b@_a0T|VvL_WlHE-XnvF3f@ck*z)KY%Q4z@JR*2 zCp9mm>imy@*DTYnun$7o)O06>JX6dlSHxX~l5U#7J2!zaN#;@uv}j_$m2(1___ludMxqhE4Oh~s+7`BbH3>o z0wehW$!RcQM5MRj3l#c$p~2ouW5)vR2UR@ysFAD{uuwTDuW^E}b(WKz%5r}xag0t! zlf#_+D{G3`1ht-0A*oSD27DtDmB_#$o!X!%)fh+dL1iE?d3-dX#ddcsAP+cYwKSnM zM-WKR$YepETF0t!EY|*D4>;B}KExm~#@=M9-#Qkja7qWdK(Bx`=NeIRvCX&_(vP8{ zN@s3d=D)aYR{z2=<=nop+_F<}zlP|XQ%)NP27_iw-U8^`&YHmDS5w$80%ldYFyZ_X zc(1PEyELV~K9ZmK>D-KUAhnbWjqYGF9G7LynQ5DLzek@9DAH8kCe;NL-kI6rNqK`o zaxK5KTEukI9-Ui}5t#4h|3;VIyo+LtZa%YZFdcFj_?ZJRTNs7>FCuk}mt*{5vw@3pI>SVe|$3)28<1NXdo5r$~AwWc&i-U8?{_E!0H*6^<25GKos21)IJ|| zg6{ZIwO|{V$pC#-NNIR)Qosbh;8bd9X3v~e=X(w|37iW~H!a!jz6DHXNq6WiP&2<| zD@1s3?rbR=IuN{2_F_rj78eqWb}s`D0j6f@_i`4%uDB7F$F}hX|K^$7=N3sQAc9xa za2qujk^iL67NP)2`#S;{$+!Kn9y;`|<`r`G1u@m^`XbCK_+7dds^$x+p$DWXK9CwDw3~I=LIk=od%GaU&$%JWB9?-Ufci6stpXChHj@b| z`$k{5!qZKih2Dz$8PF><9PRU)W(aY{cW{%bZUI>>nD21iq!gpNB-?|R^Fr1-SEj2u zY#8UCoDIDYf(<>68-hvW0!(f;v)MKFt(;G!L#tAm5cGx@W_5LiT^6|ESdm<{04R}K zemNDBhc8n!33i@sA)mlf>5cnvZOb#%OXo)UECe4_>-psZv7>esX35bF+s>z^x>fX@ zU=s{;>**<9z95}p6;0J!P=4hChVsRhSBj7p4Wuj>GTxcuMa`QH&`={^O>#@vS1wC7 z+RSZs4zWxV1Y5A?*2*@)C9S};d8?=1P{z)k%&H#LYCR7=2OtXRB|qtI)$I|1)uP1$ z-h@dA=S@`EC{YSjH#9-9jSDn-CZVLGl)|B2imHNc8*F+ZF+W2fxVW-?zltEPJ65AJ zUKvzVGZ)Q*qg;%qN+)58DSmp7i}%&ym1vUgD2I09j)H)xPExRE@zZ4RtcuG%8K=Ez zKS-ZO4T0`BJ%kWV{%}PC)r9G{&mED@^o$bZ7d`+8<%5B9~+<;9n(`$9L(FnqNB&)gnzxGRheL{QWhlynu`h< z2|M<+d=!y3ZMYM3Bf@oYLx7-(E`&>kHIZkP+?*4%@d1mj0cL4eK+Ig9&~haT$6+ve z&C!umX_(^K;8Ts?h+2&=OERu3OGPM)xC29kCuJ-n)AXxRbWc)?uCI1$6B#Fas^AHe zQVhs`1df`4r3h0@bpr2}OCKvu$hDzvmSO5=Fy?yg&nEZ&CDf^({lKrU939D;0Se61@fw&ZEiZ>7vKN{ zbIlzu>);KbDXidil)#`itx+eTdS05&ys~L?&S%#cb!%*CKeXKfgCFY4*azXcX&s)- z4p`>&0naKvB%ku;Ke5WssgF52%VQ6E`~2996`JXR8I1Rv7fiDDdziU09fFB}Ugo@b zAXv09zk9*89nNZpvQ?fjaWaqt{x8O)4;xYRWTt zblF5?GV_iRK6#tVhjn_3L?~QG;l&;zDJ(u=?-&-%KsCscWHtVT+!a<};-AAZO)3c9 zg|3>mudPVB8;MvJ3Y~$Pf=6EKQVgxGuS#1LbIzSls^;ZLk`bNDnSc^@r_*LhH@Wor zEWFH?E*N;m$nwp<48P(t%6;QqA$msPhRr)y2fS znVwuQYs?oE-^Q)o#@=Q#z7=#s#8lOkr%Q9*)1@w?w>9fctFGF+fR)DiK%7n=lwoTs zKD4k%B<)w!7rG6$XkJ`dE;a&w=Yr9kNi%tWffi*GZU*=S$fo%pyj)AiNUO?4RLUkC z3_y#<%n3P{o?a)N?VvX%u)lykWoccvo>S6Zc3PNA)gAe78qT)!YWyM@m%Og z7C&5Qx|X(1A=3;ef{pV^*#o4xad11gR&XL+OWRLCPZe2puHrRN%Ne^GsJ`!>CL#@_y%X3jqCyODx9AHpD_$K8koL?f=Q>}RAZn5inUmgfZX8; zVXqV#Mkz<0Y}Nz)ICTiH)46NyQ>) zqSWG6Y9Y2aQQ#(I!!yt$M@%541%$Gusq+PDE?bg)+2z=m-8TJYe*!~gX8E^(tLcnf zb=g?5K+h|hC{OfwB^8KOS8V=+2a9op)m9Vd2rXTKXepn^{&}rLkgnts{ady8Z2>&9 zx$A(fIxfBE+}$m%57C0z6G#R>kQy$KSif*B zc_n3P2)Y?iVrjbgs`ghN7GISeN7WUV%2`=&NbfnUX7eR`&n8WbVONZ(A_!SaCxpKvQMX~Itzl$VOH;_#kt zCp#1sWoZxFlR-yjH#s*mLho+qx?mcHY6`$SmYXjvpfP9~s0-w++)w&*MS)zg z2=8ItXZ#B5za)Qldr_|r1g8yZV z!huAW;mo>Avrsn6Mhlo0K+T@tj6pl=2}NtlNX#Rx(GYqwc;u?y6ou#{gl?~8L1W9}$JopLVg zCOUz-Uzlj+4tt_EuWMnuRDwEunVQ5>g9-HJ1&b{x$F441{V7avwKUdIX4)MHq2#iu zh!zcn4cah|3oyu23E;w9Sw3sgT7d6TYEA;NDLT~^kCre{gPD9z!#0n4+Kr_612ID= z+}&pyVl$5b51iSW+uMc?tXoZ?TBNHWY~9Lv*fhNK41{u+X&e}$~f({Dkij2trFD^d&p;P zqL(k&1FwXk0G4$I<~j_eVv{dNlu5*X+I`E+zpDHl1gE(kJt;_-oxZ4^DF6gC9T(HP&T`DVzprqbou%IYKq$d5)<4F$(f=;%OweHhqoD7 z(8TJx^p%sES*sd zRJ%=fkvf~Z;L;4Y&!uX+PZ3Yq6DGFygv_QrErEo*n+4!WS+D?xsHo80WV;4e$87Hq$h+^#>wssc_~i32Po zcf=V=h16K1V6A+SLA794lliN6{cXJNE?)&1+{J61r?28&fO>!FFV@E#e_gbj9*&{2 zE?#|gh=O#Iu;`ZO~ zS$PvFn4|4-<-9k=m*n^(o^)S3;TPTnn0qf54Cs4CjzItgAoI?Wo7&n(yi|L(2V8}5 ze2hgAJ#&gvYH~XTD;af3bw!)0Kz>6Zpg}(Iif=Qsm2v{4tb`pA)l+)6}KL` zBHOE@`@=(i{z{$hN-8I8B>|BR8V$!i^OTW$-fb>)1<8u#1`JK^Cj@id(3i58>XNB4 z9u^idzHv909H^W{rEKm2TzR{U%zp8x@K7K&V4QFRd^Qp0uA;|1_QQ?tXYdTj+KbZM{hm<_$Dfe%n51}a6V&BMKP zuv{9Cb1U~FoXEuIOsmOx5HkYa#RjtGk?w# z82zp+ZEZxtSBS!@m|ftjr-z3ii^~(ZCug{igVwt{n~kOPj2~d;M?Vnmg0Qq<&}e30 z1%h6P9lD{wA#4GMkg>!&8O~(?<06pOoo=pML=oV>BbZT-j9Qu$7J3D97igaY$J{YkSl?!0c2hBaXSoPTqkC5l{tMPL_vIF?Uf# zfU@i38h%5&bU?dqBzp^lR*!Aa6<#>?GD3rwyL-DEq?JJv2r+R)RoPQ7OAl~CKmj9C z9oGr*5&cqR_(ojA?>=T*D~}ppC@Q0iwp$Cb#S6#{kWKF&UO-EE?pW=gd_#mGIZ{Bi zC56;b$}9Zku9K`pzw@@)@JQmuB`+VRII0*)!>F<6Xo`mTE-c(FcRfv_{#YiFLbexK zAO^&L*tMuSVRWk!VTpyaPig469W;~|UN3?d4R1bd>=eNCEvRR9rxq#DJPARqh8H5( z;PqLgu9Ki;x7}1|Sau1yWxcZ;a4nXxHv#CX`*7LOxTBwZSwPIoc7H12lRq6fpjoc# z!YGuwN~cS`WtYFrTVAiCe5%4GtR-r)dopH|?9Xt1gwT*qh6rpTP&JHf*a zt}-~*>PM~q0YBX$Z5y{5TYEd@=zjOX-T?D}A-?U&ucqKWk`vUyO+{$ky5B7xD{g?x zPq&Ouj`{szeDcLGEpOy^ws+%Zabu?v6`Rds>1Gsf3~}=YzMtBT$`veW$(M2Va1kT{ z*6&XgB0sfrFvNXZtcZo`({6t_>f*Df*qG79XJ+s{9POiM>?zjcV)=cy8cpksA8}dJ z*7E5c5G$7z;ff+K0C#7MjPRKJ5Q=W>-nxdJXV=!hap@bg*RJDB(Cwp_#-}TV-a!XH z+l=@6FCBL~t-%An-tWECAFUMd?(nd)f9?8S{@V4)wDZ#8-~>>v9}I@qTN8}4N8{mO zcrv+uGC0Ghn6C?qC;EOLmq6glG5TYIZ?4_Hj;#y4A7VJx!cnh{2X05X&dD6^iDFaS zR3gv53=XQ<1d~BacRXnIA#AKvOpa9idbMwr$MWixoeF1rB0l+wxH8;03yJd^zEf;a zhfo{#T^n3NGm;iH6F6Hd9m-<;=n-0M$b@_WWyfc;vE2uwFZWVW33;k3TIdn>=Iw~4IcIrfYsf@jWwiNi#uQtBgq6>hjbZqX+$=khy}lkE-KbOgvONN|GfLAb6E zUM!!x@C`oq>)UhBjJmQrTLO!o$Gx5R?b^qLU#gPXwp>o)D%Xv@b+R+UQ&aJ8TT!7)DREV~2>I(NprO~xv>ORH+-vc%ys zys2;jwfs=IBHtyI0Z6|JE@%AZ-l(`KH-uw%5X*L@=8f%A9$y64k3aGg+&7SFxZN91 zF&afQ+yPS$0<(!zjP52G7z>yi6?ai1lARWaG$l3#Kl4R?78_%DuUo&vuJXC_;dqFP zSH{C!er?pp?z#bhJ^Z%ngLd~sbncSQH*uxd#&9~tC6xI1Uhm)mI?@kwgTQzP*ZlPS zfbpU3m{YmDeI1iG8l7O*++gZIoX(HkNA){$eI+W&2fhiX0q2I>z=rw-`kqXtI^6-j z!%oE^YOE#PKgH=;aN_``)-85UTSz|EnS{hit4>s8GWdqSQ;FzB#gplfhQ5i5CYY;y zfT0w=8(*FeVZ?guKICb{=y*&1-SHqL?4RH|Ex094`GCv}NBG_e`T_<-qB8ijx6UT{ zAdD9yrcw}?p0eOCs!F$`_eVG`2!v3z%2chQ;7TQ6y=_QlM#=EW_ujr#+EEk|=+R(0 zX&=bHeSEb17%GFC1~`I(QIG*8Dk6x}s)-AZO*VoRxA^n(wR*x<<&c;I1$O{w^10x< zL~!Oq^pRe0=EUV8tIav>k4AU-U7h&-OPAr4XlxIAgOEW+WzBMc+vJEqE)|G2n{Pv0k7TZ!|5QEEgt_hUiewWs%l>TEy%yC(Z-E3#{&yta4J~$ zRl-NDZ)`W~mD@YFn&PJR4@c(_hV03R2?Bh(2%yd*Uk9JDp2qyx3NA$fHu4h}#c>&? z)9oIQ_;Gq{)Rb=rVs^}L{~q+llc`)n2Y1lHM~)GafV$mP5W%krcf?HVFN4qBDeBy}F9YNIPP__GJ#r17@E-A2a*#Zj@;ivU z=}(AaW3U!$D9tTQhBu4&5F-7A5D%2$uVvIW{Pqv+L3usECBk6cI9dWO@}=@>v4Nvy zyhpq@&FP;!?%!i|qm@uFFH-V;3Fn4mWP__Pf%sj|CjWh`3=H zt~ovx>Jq)~omYBM>8RVj-w>tV!VabhxYX@?jnd2Z^|crZhaM%`bP9K%cH1y5DB4&S zwjLINK#Vf3BD0G7`0xw2M4Oe$P{%H0D2GOi=G-Sm%^rq;CX9$(Qb689mhkoG);O>Z zus8--H(w2_dOpxfEBpK2N!1c3qMmHGa)*9|hE&BJ2a}mG!u?XKyK8d}AFClKfkcf0yOo75R4+>s)Z3=)6OQrnE{&E+Bsd!_-j#sI6Zx zcH`#X?wJu0BLIm?!_fn$gp<*jnC~MV?RENHCLNBV4SZa$;IxK9Y(m$K-x9Onli2QF z;0bTviADR!uZ>%q-l7`LW%xjWv4M=7!X^4$4!^1eI>KDKc8)RiMGU|%B3IYL_syet zI>r^=+{HULg0=RMo@}+JNZVmg#-RIR>-fdVxc%bs1Kb||B3iNW=(vl^%2i0*!(h+y zC_p*ghEl^yTa!r_vV7xSqTaA;OC9(~!i2M{BGz7ZYqy$lX>WIP`$pVkNprhesV5~d za-1;(&9Ra**Ji#&^1I$FLHGkm4fpZm37grcAdTR91H`U!F0F^yG3kIO)ll-rv;-Uj zRp8h`tLJjUSmc{V(^Kr5!TGgHDXxK|AFCTits&<*F}7*4)zJ_kBz~ddhj3{+9?`Ndz8jCUr0Iv^4ueue z8>kPML*(Vy>4Px~&e&6oOIaoF8bjcSh9eZl!-Mz?K?HFk9oQveY$Gg$#NZ;@A7c{8 zKLmrn4-mP?U;f6s=@Ah)?hUXYJUJ75P#KrHX%VXm-h|0Jgq0L<&T9bV2Ze~iC)_%n z$mnDwBstDjn~x?gp@AwMbNdTQKG;8P+K}s0vAC;e9)f4LBJ{)Lb&UK<(b_} zn8`(3DM4L}V)(fM{6h3Hm?Fo~J#0;T$oaxeg1p1}}E-AMjj94;9on9RZzF#u#7 z50p*tgGkK}hsTyjf{7!)5$*Q|@c=&lc!U(zsN1@a`JiM&^>ZS)OoEHFdk1+2xrZ`0 zmP<2F251>=S{a-KfvLBUOFh^4lOIi$u zlWDI#!J^Zs)#iGu?CpZ5Pnyaa9O9?@Q5$oM9u|!_+HvWQqaTcPa?+b}os~_nj6OWf zZ}x|n<&R|9ncd?JKC*z3NC-#z2-_){237}E9&Y2a4dY%5*`h66gHGK)MYILCC204% z*sig#{1qm(Zys9&E8v|*6ATv_&@rt;29LlWz8!L40)=E8RyVuIuOZK>$RKsp>2Xq& z@J0nu2J0OoTgN)d7T12GI}P8FHKi_MjD?ADDmvx}v%5T;3 zZ^oaO@&CVS_5U|K^S|Eo?1}Gw@_U}X@_i9$p8I9=`(Wzl{I?nDyuQQGV`i<&QpIL+c&3-tld%<&L$(pPB!ZFX&gf;(Pz} z&Zo-1w#AM;4!;(1%JJiyGs=%GgX+pZV&(6)a)mM ziEv2|+s*%XS@}Gjtap@|ZyiO%`=atK*w2Tryi7%r|C(0s7Yy&;_I&!_==ebHl7I^a_lKTTe*7*A z@!tnwkKg^|T?*iPo(4O{b_!K0M{~SFZe@ff&H~(|xpSYy_r{>D%`9%BsuE(S3 zSFPSxc{;Oq)dW8N45`ihc0_?*=pWercb-SK_?)WrM_j>{GqgSJ7&FX!ZbpZW^AB72Cxl4ug zeui*Z|8=WBvih!k?ODYGep&u=%_rLef%x5mw@P8y7y8f&i|L3yu zvf<$?+C%xdmthYtf9#3xd)v#zM=k9Nm9R!vgA+5Ut7m9}3qUj+V?|KcCp`Tn<$=DB1XDhr3UJ|*sR z)(0qu1iXj;{eN5GcOXmtclWvPdJJ9>j$rh$Cq8`TyPtFp#*5(NZzKYNL;WWHpZyty z|H~f#Yg=N^e^v3cVMYBS>c9R;t?%ri_T1aHWDq`5b8v9){+!l((%bdh1n!m3JdHR) zb&rS?437`~yw?A$`DBdmH99+zc;yq`=p8yy+1h>J?`pe_@8=rqlkKk5tQFgQFnGp@ z4=vfzvD(S;XJ1!1-~2eS5(@}2IeJY8r-H-grqqTcGaHm}7|Dzvg`3HVg;r*EBa~61jQo-YU zp3Zbg)-Tpx7aQ{Ij+|WI_GxW@ZXKvUglLtkUa$_2k6Qi5t-gcvomT$s2^`=-zY4GV zNgdPp%E5W&*R|g#U48r|J#V-2&lq2Kp1bw|N6(ed22wBcxvA{E^0JJcAAl)4e17*g z6#nlx_=pdI%#T7_$%LjG_;;+|&-|v=uX#S!5HANt@3bZJ&n~t{W38jly7hnlu#`Uo zjKld$8NYuPh41}G%AX%MifGTyBVK_lwqD_~oD{pStNe{XQIRt|pyxokOc zh+krVZ~u(;ch}oj7D}19*Lw0F{ z1`}$iQbP>MvIZ+_u%WwbLK1Y)r48y>@dOPu(}pzDmaWrD6Vz!lt+b()n(2{V&N*jJ zotpmc=Xc-F`||!_X07MC&bhAhUf0a?e)n_#{ye|u@B6%e2%|alXX605-7l(Cj{m*O zrPsgkf1DFjgS@Wab6zFt@3FxFOFgWAtK*1~U0&G47NS(ebx!`BhH^O5r2*R8gm+!LjOAP!8m`^ZN(lhj;2(%HX$QSK9t+oiy0a~H}xF< zNB474`s4N4i1pQBMl11u_H)jkBR^aIPUwA+&2QulrSv{towf!D>y-+|Meqg>UEg8k z;rh~wVuQdU3Sp}XNQ7a84Hwi9ACu1>(%bW&TyJ+0pHW{idyJkw?-!unYC_$sUN-O7|M5$lOe}X)X&%(2DDZ^zi%eVQ()_3(!)@kqm?Yy$`{eK0|_9OVcbbqBXRZzdcXG-w7 z5`2MpjTJ5Z*?LDkLx1+L_F&_BUCZ#$?u&S3db8z&ov8;Zl|}lcaa!|?RwB>`-c|CT z2Z!YMh)+6f`)9abuzi{V4AkB~A>aQ8l{rwl$-_7Se1iBL;&y#w>lj@IW07B7PmQIx za0uf>wmc1!ubZ>upLaXS{>@P1srx2zz3_qiz2jqrQe85{|f%g9HaKT z2*-8M6X)trHVxvsFkYgKXj$~Z7u&)qQ=nuwBw0Y0>96BD=;`xj;HmrG-{J*A(c<#_ zg!c4K%V)#9p5Fh2|FbteUJD$jXV1@_2@{!(|8~j3O+}l)_EJBr>_u_f`E#~E`-hA_ z<27w5@OI+Y<2dZ=5ACIlo`?x*!nSPVUQc5`Y~2o}5uaBlA;)lT#{RR+7aj@_R+ z{XtxT_x?A>Z`)c0N8|kQ^R43Sx(AV+eY~2zz8pT`U@EW!Nu`;dY+QN`yZ&Np_g`>( z$1rAx%_nyKXqO*hlP_#)j-|H}`;7y+_R5(#@H=AM(sDb|DU^KFs|&l6VSa~v{~4FB z7s?;pRerYW@>k)69rD{IL#!r}^?_HziS-KX*U!4V%H3%?fcMn0dc$?c7FMk|y2-mm z-d;dqzh!vAu25^$+1&{&O?aTbq4(ZIA3Ntb^x_bIk$A)5i0=_cJ>U?(`T4GA zC!h&_jd)82zd`&?2EX3qdc;?GkBD!vzN$OtTSgbEw)O0r2XjHiAMh*02iUM1=l9M|J=L^)-_y+>Z2fTCLiLH-ljq)l{sS#5_kZZc zXSZLZFy(gygW9OK_7eAhFpgt&+jkgvvT5k4`^J62@bvj`lP_~cQJuPP*VZDRZv3|0 zsd{!`pVvPs$Iwe%FUpAn{Sf6CCEh}NgXg_|ZP?rApov(Aeh7Z{$i@wN53CVRcDlV} zA1Pkf*c2G-!tZ`9n8uy`mE|^8zI1_K+R|ZW#>~(&%>)Gah=#Z`JP;V1qkbsKn4yKRub_b&a88)>H?b^PM?X9No z2%z0V-;GzgzG?c8>#=aZe#Eud{a9#;H{le=p;x)wR#I*o->XZXWV;cs_O;I2Jjq)W zubX~sk#`(7q*?M8c%hp4NNazcFe;yG`%2Vw~xE ziS?JSb6%?b+I(PDXm`(TN-)#7e?mWTS1dJ7K)&tkUA{&;un)YQxaM`l4fs0o)7l?+ zH^`f%-Z*~P%^$Qs#237ghur>tJ`4(?|v+2@WwYeK1f{tEfK$4Kg`An_J&?& z>$Jb@dOK3~fUgl({ffVx!5h>=@tD{;MDr6LL$aO9`U~sc^ul?yVi6p8)^{+aKPuo! z8IJP9&+Ji;_fvxU2Gxi0qliCDJ$o$IUL5bSehmF3Zb)Bq=fj+5>(Nm86DP6Qu;lkz z-Q!!Mqr%sTXXAT?cvsa0(5~S3;kUS+vUVk2`)izcoA%=PvTMP%@uipgS{u%rCNIt- zc>c&{BhDjXCmkyb`AvFER1XW(ca1rz`agAj0>7`n+}35^>i%dQWPbZR-|O8B_QBgE zFC9Eb(>Xs5h)P{BC_{R%2E(T8@VO8|dp8aD7KnuEQP@^7|LIiD}M< zMHDygi@kHF9x0(29aRaYGUfFymeLLh$ML&IBsNy!3wKws4zQg?~ zvn#(R$ZMy*e)>I6{3`LG@O;=L0)iWv7SM4ta9_Blp4XK9f$wztdLH5In62Aw#2@(N zcvxVozNkJXHtr0D=Wcv=+n%?1)@Jmu)fPBtKZw`u!CZX>2@EpT%d8=5Kk_FU;EA;h zTkq8$_gnS8e-6FbBisI9zy1ol2K+9!pR{vaFZz@=7R-ASL!7~%`EKXeXh8TZakXRN z%f##Cqa4t)PdwGXZN9JeXp_zQfU_yB&}fpG}q$+){4 z_1+|}*J(L_QO}#Euj6~&-?2Ea#&yA@k4|A3nm*^08gSqC^5-GE`dCDi5Bld`pRYgQ z^TgBT1HMLlh<>Ylld1B7cT8SCd9v3%?Dp!!v-N~{Y<#uVJ9)e0VP9sUW|tkIqtBZ) zj6rcY4{?QD?_YKOu!jTn4t#)kPe8ri?P}bvBE!(GZSlyTA%8sKhjGSsyVA?nX!i#B zW8}j=?Dl`3`;(3X@EPKD^0RS3d)oY(N@bh826+~5^J6@=)DTzW-65|=p5!ZUaQkKR zfp~r7Ehlz-y^n^=eHr+3jl4OwM|<{|J1%}fF-X4$FSy;C)Hig#KK5jj&#ZcSxjM(4 zzVu_2cHMry^2yz2KmD2g-~Ju1KiKVi*!5kF{>6TcGMYmTYA8`UcPCTW@a;jD(#?o?FBBXGYvH)Ia>%c%%EPaYy(u@rKiL@#!_Z?N!!q9&!0i z^1Q$CdFd)Pck=xWa)*>l#|iimag1X)wC|K2C%|hw>UI@R_zir6IQ+wrtyk#XGu{pI zQsZN?ep@=Reha(!aW!WFW}(7BX=|ELLbU|=0sZ}d?PNO;UMCK}a0nkHo}SmCXS@WT zCEgLV__`bXRpMp+7VR3mee#-qYSwzu)yXQvAo`DhW@7e zsW_t@0v{%xlvD3h;6~H{z4!Qoze+x;0tdQX_W5k^_Q^}ytJhPwgJ~U0_NRW>{YtHG zw7-g;)OdCxgfCZq#Ix_!l}g8txV+kl@NVMxjYD{yct=24F4HqcyiPp!=V63__w9_g zMjrgfVLbD9AhZemMt#DsYxk(HdD{KIo4!8shG4{w=pV*$)w9`MAg|qNvE1v#RsZsH z<1Y3Uw|(+DGJ0>7=)FyRgnWN;6$^Ova^75y6;d&00kA5cJ26@AYJ{xbXlc9sy zKpEPTmH!TT$vlgFps*Cut=!O{q<8X1-Tru@*Xpy{D@RrSJ@Wd=6W;uGm+#2n-Nbt{ z_!x2ZH~FzaJXgOgpX}Wxua?n!hj@BiK|Ac6asTGXw|emFBJ5Avb&>3^lc(~<_J#Iu z@fGiYywOBoSTAuo8{T7s-TrsD-8Sy`H_i`PeNCqyaK&q~V_NLT7x;eHIvXClhgt1r zhNlh#9^3QqJ6*rxApb^)k0t(DdGqzTP2M(nitp5{>pjfi!|!suPF(hui7ydH+{|8V z=;C$0+vUek^7_@z#9JUQX}>|=2>Lh<@otkheNx|u1|sn$A9K5R;~m_Er}zxdxjwaD z;j1P1VF}*-c(I=868uUDUi)#^qxnew^q1h%#9J6Q%p2)-F2<3izhe7ri8 ze!UKU?LF>CjePh4yoq>vJO+!P_8DS8_BNxj2{{%WT@P=4rb z{)v-uK{*_r#&wseYKx-xd!F3@d)+s z8oM4MZ*U>tywrWWH4dT$_wD+PKVw1Idcyrl>b=L_8;DP^EH_s-@fe{-;uG}?`O81$@+yBP z^==X$j()lS>H39y?Y%C)k*eRIchT_~%E!yQ@UVBhkE?Bh(B2`}`O_|Er{O57->Gl4 z_b z{*L>v@zv*(iBtC@>fdI2B$R6k-nc)&*N7_~@DunU@pQR>9}!o%;1}>)#Am7B{Br-X zj^OnicvJ6l|JA;;@rV6m<86=!{WyeQE5VP6*8@A@_bju8C%GVKG|fC4ceQ1vn#E5;RWj&f7Qiabh&-T_kxq{^Yn}2 zu19tUm)-7Qrd%t;(NA$8PVi@+cxv4AeFt6#bd%TlwCf##upKA%7g87f?Uo0%{Il^AQ&uW8r>>eOAKOC3sY5(lF?$yx;BWy_yMoe)!2I-CyumCpelwu)58g z3IpeRv|ahsecV`#4`F71n;FG#Va4sqFO~n0_@;4jq|0AjNCF@|%O7+-YA?MegYv8s zzr*%|c`@GaI(w@U@055L!hQ|p);{d|=3v|oAHQrqJvn~G=TKC?9jh)k>|(givx}E; zE&pP((>!#Dk*R}7odmn4AKkX0jcH$a$VF!38akNJq7B5>o zCeJ^kJm3wHm(@E=yaU2^NbfZ9xqt?}$vAA+bJBZ@yk7FM^#k6_pzX*0oR>@eMEG^$ zki!A{;2#p74rt2$fK{cfGcaC(H}dnY_n5q-eWmZR@isWe5Kv`j;2D>np!`hOU$qd1 zyX9U^*x4j+h`eq~fmhaDeucQj-}`M9ErN?_%agqo@@EqMsr$f))Ao1SI`;3movW0C zec=1Vllxz=Z(X^%bK(L*dU`+NdTP`Izo4g&c!M~~@pyGIjt8goRl*E31Gah-PZdAni%T8!_T z!u|&3lJ`}$Zmk}KLBZM*j%NFp9#;^rp4ZtkN57bl7x1gZlX)+UQ~kOnAo=!RDwgjc zuJ&Z{4*e^=ZiSsG^6KUf4(Z(_uK7rK^JTXuz1ed0nvN#R93^i#X!UUe_ank(XQ&fw z2%Q`+A$LqUwIA38ev3Hl;SgT=W%oxo+8g-I#MSRq{_tED#~1LX$%EfGvgLuk>&Dw4 zuP?BQ_lv+nzaf3tCe zzb)TueRR|94N_is?N=RFJIZ*WZR2H)bl!k|g*;f2UoBhiSDTx!Ok0X_bP->Q>*spBxQx%6?3j1^BcHaR z9bcQY-9GmcPA88vViOP^RihJe&k!)}%Af6DKk1L~y$p_i3O|pC>-|%FZ|wao6Umx1 zypq3K=#lnElJ$P#5ZW2^uWq|P?ex>zx7~i@6}5QV{0)~MPwd-#lQZF&wtvWjEPSJ$(B+6UY94 zIqW_ud59bI&Xd;}H4O~i|Z)tJ6PSoPw3kuuTGxuW8$cH z9MaqUPh4+mp1AA%$|JM0OgYpm4)Z&=E(ULhyqeR3pTMtXGl0GtV_AS z0^ZoC+;6oDk6ZcrAAYXA!R9f_sr|X%c-t+skJzpdH}G$hpY|X49pb$#7yJj_bJhJy z>Cde@z?&ma^4azQ`$M+)*~;)>2lx^3viTV01+U|ux<8fJFXH-aBsGeJdI|i0=KOSd zfp-#DeM|q4_=$es$FRwYkN4XxC4Y|#dWQeG>mN7&a7fQK@lA(uogeDm)XavNt7ILC z_B?aJ_5pWYZ|XTMe;&|UC0|bWr*x}6$y=8R2jUF*>1Xrh20lZ)&FLXdz?X=t{-ozB z@fPw?U*PW(pC+#7^{O^As$GLO@GsntVe-6Pmp{jZ_{}_Q^OEF}df;~$?fWw!fYy0z zb`5?S|M)ix%4_&7;^5&Bzv&v|>u|(diFXhWQh2igVXM*gMy-5=wU`##U17DK)c2@_v< zZy)l@|H|bLqkQ^1svo%j!w>qaq5l0Eo0>zc^$J$%L&2Z*wLanly)%2RSMAE{Io=)$ z<1=_m{umNoSe*%+H80gm)a@fdIz`R|tUTCG7p zZvBq?vE^9bIra2YbV})qTaU8y53dF%l|Fn zM~U8Wy%yf3wwb6XzT1!5_<6(ibx{s+2Y!{f`e`@u8^kxrx3}Z*u$aBS?W=5D@1RXf z&-}l0{VU|7zM#MT-#dP!et`{cUl8MFv8%C*PQQS`zK)(|$6k(S+b2`-=?%W}A4WvJ z=8rKkoQCUe*sC45z0uhJ@xAsZnPop{vRF3ZyesP zlJQC9-z86Rl>7nl^g7O-yTksvUD^2ips>^RIk!`f*Tp{mpS|o~Ktwa)mxIID(`&v! zZsI??+($YhXV#?szjEVlgX-xjp(Z^9Sz7_2jyH!rKDABjR%pzUv>FLgGS* z0Tc~V&(ME$Jy)Whp{cB%P@KFj6$k3Vb3uq}^ReqY`Q2y4HSAHSVOEb)i%gpyuwxPm znO=N`EuZj!rGHlx`kQXKe$^ZHHAB0=NN(2xDj>!a@NbacSqpAjJM6K}h?f0$6>&Oy z9p6XZ9rwCOzO<(HS^2-+p7t??xBYj=M_g^}4^za~h|7|}W3h}Aq@WDdncT=wEf4H2!vz)A}&rXD% z!`EI^-orm}KEoL1Z`eN~J|4#nT}Pbl_4R@^YdfT8uu`4F?{)lVN2mRRp6p@qu_XZS zYuT&zr|@ikO};0pxE#~Y92MI-Gpq~kCB5)4r%xUhY##DYzm@)3;mxKnJ%5kd@3tSX zedaSBk7V7Yea91@yWpl>STxvbB8(oPc6sa6R}-Nd`GhF_cdD+xH}>xydk(_xQ=ki= z10?U`V3`|qRIwKZ@pj@?pH@$C*%|5+ynXU+ zlV|sxlX=;i&M@^|JLh&%-?isH4i;B&!mIK_4WSoRk5dCn+!OT?LVm8i!1a#PzONgt zL9uD5oOj5ZCQta(eJu_Die0SPG0zJknmmNki!ALz~3j{hu?PKzDxT4qIk_O zbo;uVvN+pf$@-0jM9*zN-z<4S&h*Lt8gYyZIHdO)@wI@4`P=MQXVd#n&^y`e_RDzL zc=VdSmLIfv;)`7Fdeq;;{d45PBl^kd;gELR*4{qHp4mDg}N(|BQ6 ztc3<@9XTvut$+Dkhqh^RLRjJ0_xVEe4VXh_L;j6@vD-jCw@@)ld)-tT&lj{|W6zCj%G7Y_8_@cs+-m2H%e{2_TYr$zZA;?_jMVe%elwo8-) zc7`5s`!fm8#wXqn3qcC|GAG7q$n8=NdT?aRhjPrk)%N4an-8o|jxcV7?>E>`iE@B9 z*Xn+#9Kz>`<2MfBw!oXiZ;fxlw}_wE=P~_PiT6Or4v(jG)d63%$lqJ!Z8!})T(8fE zn^lH&+dufb`sdvKwaAP6VymI@x#dw5m!(M?VqWa>m?vN|2I9Dw#O%1(*ZxA=ki~4KV~^TR_zab3@%ikJZE3N zy<_VdZ4#l};CFR6zs-K*z<30_PW)y-(SDNg&;FKLQn9v}<_{aSy#GSJ`^#N#jq->m z@E+o`Q7^|W+)v^B0N!Qt#!}nmT@=Gj_@RqKVxa_TcrQ@yfI@sn1eD%jKI?i6Rdy&3c z#pYjZ2H`t}h~HMX%dgU2Y){sD!^a7EJy_jETjCbRq_?v3R>lVFYv`;0*YxyK&&{uK zJ=TBYM?YO~SIgkX#KFUXIKfWs>)bxt4-PAjt@o0BPx0#HO*;)dUpHXgVb=q)zeQf1ylgyR zXXZ!jz6E*OpTd3rC(cbh*@P1MMv1+>&SLsTe`u|+1Npv(-0yTbf%g+vJmEj^Vd7=| zTf9Z`w&=f=Gdwp@#kgDAGcl#YDc(y2GTwBQ-C9jt} z;Y-Bj59$qicZuJKdQn+AGLb?CiiPJ%A?*-es>DI%3pS#>Z?KdCE~SY ze)8+W@W4-~273oDtP}9~pE=}pYbRmlC_OYE6Kkj3mw`<99^!zF^bo4Q(EoC40By_; zmx_o7{9OKK_tQcXj;cMl>>K-bRTNvXw+rx_>dvo|k9ddj^0yMjYk>S^X88DG*TGQF z`Yw`>JX|uF=h<-t`gh)L`-s#(PyKP7mb(7|-q>GpzgH4JeEh;{)#@AN055wWPQY(d z{+I;w&%+ez$P}c$+gYRsVSPNcA11v=-{O8j4X6IOOLdd1|M^JHNx_`zbGcjQ9}oY}~*<`Y|gjc{}7;+`_)A z-2~I#To`Do^-!f6W<$S#{M2{4eZ>#L#v61$hvN8JxA*Go)`H!ndwJot+P>xOV271uFXI~WFi zYvj$ua`f2sakyVI$8Lx&8D@Vi$-}l4f5=|jkoz?qtoiy5da#0=FyFH61#)fgviGkj zhj`$yda`-y8Chl!{A8~BqY_&o6r+Lxa768)RR`!f8a68)87_cI-D_|rwaK|NM( ztG{I5SAI;ASIgL&B91uX5Pz9?yTcLRB;Jw1_e%ITOYo+@>g7?plieZW*|<-X;B+G< z(lbYX*8f%F>KDBxi8$UOK21%SCvl(DuQhbrmh-UnXW5zfJ}*bs&OC9|m-v^7XXCv` zJR6U;Hx%pdC0?h$(m!3oCoLx8FOiSmIE1g4;M*no_ld6sEs37#5%)ja&Myf8|UE+-fRA%{%44f(SP)#FkgiAUYN2mAZZy9_TeCRopN(o zxp2v66Bl1G2tyi|h@h&xBM-a(>G2GDmx<3%Z_zpiyylB8-$9=Ab`zh^;G4v2#1S9p z*&?nu+IVc^h&`l{npeR)xC>AAn@8QR*^K=K;vE@$gLt;Su4VZ0_aJqQ>jqXPoPyUXQSEpaSmZH3?#8-&NcHwtjQNO;FW1OU~_Yt?NcnTjQ-b{VShn-2{ z%h8ViJviL_;62^YgrukPsOwj|5#CR{gL;II5+BLnTg2t3{5c@5@yN;@=I8JjTJXdb z4O#;KyT;s~da{nP_j7D9Xm8yvH``X1-P7F8T-Vr@j&ErC^En}cs<(;1=KAFCcvu(N z=MWfY+1(+plHA|teN?}_kH2VaEkYMhp+nlUjn)%+eTB8)3w_;;a_qdx?Vem;4u@+L zlvwdOCU3&Sfc?yHeQ3-4ezZV+SWM*^8F#(Ck&pg0q}$1{y)ND(Z->0$6Z(?($z-?n z`|r)}0C|lQ`o{A9k(X*0VZC8j=HZat{kzyzyKMRa_pgO^CErF|^^f+4>*{K+MVHqD zsIMvV&>nE0e`5Wb^~ZCQ|DBiYC(G^?>MM(b{I0y&{cfg8$u|=}*?yA0$0lAsd1ZFQ zo4X57{#+$5yAC-ZEB7yyzRc>ZU+eU~Q; z5n=96c5v-d76NE*VcdJGms9&hc+Sf1e{g@=z9tmJ2l?E!Qv5BdFcb}HMWOOECS70M z^y3ijzmorj&y(N5EaB_K)eaTc{S1zNkiIS!ul6@i`r$kqTCobU2#D7pPve0-k7)XA z*2?e}$(yI2vz$++U0u}I@l-9bcH{MZ#_lqCQ?zUAC@*igE1Hy}_BOYh zZf_wj8GZfaq5g4{*qIG{9DtGJKUGEC{@H5PJXs4+-UMBBuh7{|A>SCgHV}GeV+$@m3zFD_l)*i&0B2RYJzOr_A$eX8S+0C}s#=G3E z+JW?C+y9k&c`pVjpgq#c{`N1`VHfUUHAET$@=Z3-pzTpw;ZoeIY0VM1kBXouLtPO zjRxf!Kk0I}X~&-H(b|-bu~Jal_SU_uJ3jK z#uHw0AH{AJ+xDXg;EKx+^drQ5j&gdQ(cTLRa<*fGj)X72vGX-PWBoUNe?AExY@9eO8W>`#mUc%aZ%omFP2Ga{o{I`pBy% zyu@y*UC)qrH~+5Yd7=JrKOTKbc3b|g`vtpMx!4Ab`DX;~>hHigW+6+g*>m)clLh8tjuAzZLlww*&Hn9fO3|o_0N1yo+7I|Ut1~hvjiV3!KX^_W#UdY7G3*tsk0IZ8$=0Qm3*(Am!Vih}P#@+u z@LNCRekI?bNcHDk&FMDw*v%LA?yxwJ-mVY3e2sdAcN6d6{T-AG_6Ap-KS#cmi{q|o zw_#VjYviTI+rYzq5=L|Jx_-v>4JP_d?B^p6uscoOB>f4`Q`*F7pWC&iyUn!RfmK`% ze%AG_P_KPo%l3nDe}BqX(pW`z_$u1o(tmb&f?%z`Ir=zn8J^?Ku9~hR}{6-|=(qXFcUV@G;`k8GN63 zS-DU@$0pzT^R9P;@~|JiKkgH3ALyw)bF!Yy zZn$rhZfD?)k~d6wk5Bn?Z?L=j^Y(ln<=QAGe3v-d8;)N42Yzkc{h1GFYMpB9-$8Vc zMtHc>7X!wTz6Hvq;{kn(#L=E`Al|@Nh|dNTcH;fWLF-}z>3s+ATmPQ>)gWJXM~Dw( z@U;wH)Si!?vFE?YYoUCnrND0!*EnwRw*H^2a}h7_I{v=)~@q*m^M_f+N*-GEehU2&CkFUe5>p$6Kch-|T!D^54cl#GyZZOKB{hG^T{wk_? zwO@2zs$ACIlD`9pxWd0~^3-l5-ylApvSW_L8?R_jkl!V*>5LPt9QLBHk5|=Ajq72* z11mwS+CrO>{k>muKWnrj`}@TEh-ddbB;S15u0yg&wa#vAa5?}ORWnqLZsID;E(+3Nq^xN@KNF#|Gm7) z-1LF@zA0Kb9h_gd_kI7d%nF{SU8Smv+ zecSz74$?lK!QMXcYs6FY*-9v*bzvOY_`&|vFIqkSL)Y5~EcMH=xDy8Z;2n}zBTw>2 z#7BwyzTZNPm(O8bgM8yR+>XjAz01TEFX8PUKj~N2|6a4#^GnvI$-6=OXwPB%^YzmN znjQ9P7>3{v8pn;2(~x-{2jYzU$=S zHxA)9iEEq}-t>>$U->1xm3WrlL%btsPxKFE_zla4Ka<4Q$hUTc_ww*){v`V_LK)r) z#0h$u|FQcy9QB|+Y^vjataxMO)w4Wo!RTgE?IWq*@b*t!AB*4h z3AaCYLa%kfYCk6b$d?}*z~f@!`Jxo`WMNcN%+ZkJra7gLc&MPraO16McpE56b+tb)2o6>ft%8 z`U~yueQF;E`m;yB0l*JwH+gRwe>cn;uT8e0C5HDA!(!nxsp^d7>-y*J_ZSUWefqfC z=e@O+c9-zdRvmEhTWQv92Lvp5cA{4CyVKziR4 z?e*ZJ);_3rjRJN*G5vS;!evYBEyjUAkh@B`8s*T=fbS9?A#TrGg#MFWe}UI=&C4@D zp7c%-zm>s9|E2RA#EZ(axn=7|@~)C+>jvw86TZ%_&Lyk=lzzyK|0~z8^1vV96U5W) z5BMB$_<=+G#S(lagCkzhvrfD(Xes_)8hAIzyFs4yU%#%r>>VBBD0thy<>lCnyttn< zYs|*8r>wt^f6dCf=kmQ#K7U;d-YR+NcmZD{-a&bk6Zj7C^tuMmd#Cs3!E5=~C+%nJ z8TwX!-PZ5q4bzUr!zNK*=VNefC2xhiw4ab)C9d`-y@$lh>H~3xeEX-}&&$z%j5D?@ zPd&YrUWx3m>!R5~=P{;m6=xC%cc z-bH=Fn?LJ(;jj-qy~GC-`_?|}mGoh=Z*5WXbL7=Bdgn{@UM5}^C)7LaACi}h&vBn+ z8+E3?Xd{1jZg@GKOT3moZu@)x&gD=Z97usr5^oQvw{PGJ#CwQa{n>n+JO?HDZSoWs z_zC$d#1|8JuUCvORp}4LGQn zPuaL5KD+!ws z{3q9|xXa!w@eU}p19rh*CEf^V*x$4INd9gh$_?HDdD{su%!YOOY?nF-lsP1#}I-#FxVo?twb(wJ3xMTHfpU35bubaHF|C;5+_{;=f zCeYgQ?HcW8ZO7JO|GUd~B=PliLHKZccyil1N8Bh3`$L$L8qZ>NGA=u z6K?_84wMi05b-I1c4$2i`U=-0;O&s7dXfBX;+psD^F!`8`Wn}5kRLd%&YAj39sk*p zZ5N2+#wTr@CvP>dykGei5lWlvL!myw@BDAB7yjT7K0v(P;fRkDUt^ph2R*evay@P2 zdp#%bpG$8$dGH^H@U9ZPH-pPwow(wez3%KzbV*AhE%T#vo5VBG|}E1$CK z)&JAw$D(|?AM@Fmq#K8LL+&c&YLr7g0N*8!IN(6Mf!`uN5>U1C{ zQ~%V)Q}Q}MvO{?7j_ZXS4#X4u7UI&ITyKOM9J);Kb-(e)$xqeiUGHl){WDt!QZ79% z0KZOL{SkfvZ}}hYZ*spA`xSU)!UjiM>&zpy1LXt1<4>Gl189fvPU0%J@E+p$jYD{Y zczV2s{$b+sGdpgey@0n!-u0kW?cJ`Yaph$$t9;{MaDO)=FV0)1?z6zpk$(<<&(1+q zehTj-t~kIR_+7-WvEPjAd5v&KCUhC73vmGd)*06?J<@-hxatw*4*pb~za6w#9}9oq zo$m#3oe$nM@*3nxZ_8Pihrc+G4}L%KBu-cd;8XHw26~+uH|g=)nny^J?}JMJP3jp8 z+Kc&sKq9d1V!6b6lv<@O$W!W4>;aoz3UFUuAI$L2#Wn-w~MBI&R!=oK=@_E#Y68#J;4;S!;HEQ?!Hk%<;#<*#7zbfrLLz{vrA4 zbw(%yHtB7xEd3*2FJtAt01x&rzw+QD}^)~78K3@27;%No{J5Km0>*4{N#R&!d zAAZ$aT~70l?GxDZ7*kpuJzlkaoA{WXe>O4<2xte8Z+@}MH|#eKt1oNs$v%wYJ(S^% z8W-}*#OG6S@$1$Jba#e^-|-Lc_=LMwJ|?lbhp9zhW#S)o?56&g*OxL%HX}k(f)AA?g;T|heP}JeuM2fYlu9g{~Gyq;zi}0`LvA}f6@KZ zerdb$f$x5q6pDq{h>>+)($nPP++qvy4+3zAb@4t3E!Tin+_eX!< zYxw-s@RR4Jo~S+5w0z&w&F??|ftHo~KiK-A7k{{Ip?bEzntZ>Eeo`1z7q%*F{D49XAJP3-59@!)ucW+3iCp^4+oc_ z2mGFH_haE~pc{XR-$l0V4MfZTT%>MiggHC>ut${fqnCQNzsB__PUc?-dVGJ?{}7;G zM4OEK9qnPK$mCo-ZUwT$w<@g%;R&JX&>=7#SqB;~N)UX(D zwS1I2dz9fSU;o#-e*OJUd!9S&Lt|PxTZ`ZRi{lpRH9a1p9@l=yo`?;u{MJp2ScMm)6+V1IH);U{=|6cHo}CPSgLszT_3D#+v?Ijxi1-%upuE=87j?fzyw!e}Urc!Zd?Y?>Vucj1>zkaX zdUkzwIl_{`FW9Y<*TVa9c0bD2vAQ2+f97*7F718a)&2}|MStkkZw7~|P@IOo+3nWo zpZwv^nAr2BC|@N!{Aj4;BY`KvhckM+Eg$}m5ZB*d@_og#TjpZ8hN|AM`-#StA1&YF z{`GLYb$%810z)}sTwde6r5Kmv7fqg@`(nk$r|J*f|9JK6%$fVnAHT?&*t6E~b$|SK z8owJ9%KyD@JsB6_`@}WQ$a>tN(p*o2;I? z&tF2eDLuK-(r@yR>m2ZMsh%-^g!}#B&zXm+nF=i%weD{;#C8n%;cs{OYxGBcc6^89 zTN!+x_%!iR`Z4gG&hO^BuyKCw%=8oIo<5)4+3>&n{lOQ1sO`fKp1l$JR=9TdhcD2O zuE#|xS7+Xy;pg=CxPI8fVbyHoLGpKq(4N8DBd_;)foAKXA&bY8O(XV4yOx{rnc=6; z!;!Odi351{!^{t)KaAKYUwW*qubRAg19>@iG4uu8ZN%+=$EH za(A$cWhKxK+VKI=@%Gi*P*-@Ty8wdg>fWqSc`X^yrqQa^*>{(&8=?gn|Rpu z*-#P=Utfm5V_}=*!}tT=pFgB&{*b!2kNEOUdYnl&k6G#+`$5;+{9@@nI8|>5Ih);yE29Db+vaC? ztA2Oz#0ZzR>~_@NCLeSAqp`i!!y7E9WBW`}U((9Fbyc;CW(A9zU#7B^<=LHQdE89I z`7a&de3$q^ z2H*He_Xp*~QC42{hb!c-az3@|9ov7hzXi{~Bw8l_T=9PM1^s2@3HNUzco(h*8{xe) z8})GaN*lCc_ak*(JWBZ;%5Oa23ar0Xr!fF(V)tQC{q5}NeNv*l;! z!Rw#1=e&Q$%Yl3xkOw|pg3l3G{kD_8LLBvh!`FHF>mcYKI<)JcpLM(Gc^&vMarp!N z!0!-G;_dS&>>+>rlIt6`-#EB#jV}zz?lyVQi$l2oO8(ErtJ|`g{!@~#GoLT~wSw@6 z$ZUSW8XtPW->1DA1$v2JCq7FY&tG9P);H4ehvv0I`oZf!XL1;x%0%lsdCK!yz5zu_NT&gF_`(x`q;BWpAOqF**KtFE&ti({byVr z`8bMrea7n{PwToO-k9;S2kZbJp*()$5bnQ{|I2W+59pbso_>nheKy;{Najn)Z;+R6 zmyqAi;6>%=`hDA%B=0uu6!C_Px3li?OWOgyM_lb?(DVS`C%(dr#`&=s?dSQltfAxV zs^+v43pc*1IZS<%zu@-AI9@i+@0_vmCmD4<{Gb#*b>D~DsyE7qpRh2I-fO@3XRCLV z{&rt>y)7^Bz&6gWVf~6{a!`Eu>fUqxI#3P!h`uD}0#qrPwm_g~5X zXiwk|kdJcXu=<#K{C?YW;B~EdtKm=2)gM2fe7{2aA|dMQ!2UwC zdpE!H@?$6LWZP>u1pdIjN6T{bv;9>UZA0<0ZzwLLHWah+@TYF_UBBV+J%Bztig**o zYx=nJG(H#cmWFYIo+jzs|-5}4ObH(Z&>%Zy>oAqb(CUe$asNc`qICjPT z+K=lC{5=A{eTIH`c3i#ACul6z?Fooa?mqkJ&+MQ0zUwkfR0i>%>8<@^>SbK5-fcV| zc>4UfW`pJCa6NSEY(aw#mjuvMK|g`M>;J^{Ej%9p+GV}5+-zI*;cZZK7j*HnbEYlM zFy1|&>+D9{an+yv^UIF#oH+Dn59l}Lnz+yhu`_0KN7D76xf_Co@_4U2Og**<6Rx&G z56ad9+R?&I8_WNNmv4aeAbjID9q-TJS%1aP;@RJ|%6(t>!lf*l{avlR@*X%ncjeqy zIotN5&zpn#yK?Wvrs?Y|)7M(71VepHtCgNhS9!jl!r)B$5Pu+YUU_Mr=SwMUo#&e= zEUgFU{b${W0j6gv59@TEP_6PuXCA(5FibG3`%Gmd59L_J>I-CxiFpeb^U#Gnlw(2t z#auDZRC2P##Jq(t5Ts!Uj^-?+88|;vd1DrW;2ZBMh~|@(ENY_F%Bym`tlSGKXM5Oe z3$lhvva-~BF3Oq8o3gUm-)DSaO~b|UJX87WX;RVonM$tq3+lN5$|}3pMxW~kSw;6+ zcUieJl}GOZ%2RUTzNZ?<1@@j|o$Eja;V=mS2%Wt{>O6-wMG4Jk2*fbG}ZrZ68b`tRo4Fsw6wFU7HH`&>BR+Fy2`Z-+(nBb zg6PPJ6Vb`kT??c23Z`c&k921OXi!F|l9jUfjnJ{IbSmo}w2YN&QC3z<_IE+cD`;Z{ ztpCOKnf2pd$C#q_nbnnQp9NWE?X!TY_F0fs);_b;g2)xdH#a0?72RuqvT_B3aF%jP zqsvkYeZR+5)AAV~lI$6+Iq0>}=(L%`hc_zyYA0$$oerHKX1&{^=IcybD(|c`ec{1( zR~~xMlCOB>gO`*e6Q;V0D*F>_b)F6|&FfK){COEh>z7uWIy##=zT)id-)Ijde97{e zljgGyui2d?V0PIVQgcVAidJzyTcg15MZt?YO$+9ij0Y63=m(3TS@FCzVz0cUb7?E; zcekkP3rth}&Yt@Z>K|ZgS!MlBTI7+3le1ue_x5iHPOb zm%YsUW~Qlf*!5#D^ZF#KtQ^uJFA!OY%Zs8F?>?ia`ZMbjCDT@x`aEmj4?TEEk_Xgu z&Kl!I!z-C%jD>h}QkXJJZB%9Z525_lFm<{@$Q!19ttG^a)rxctlY+qL{B2R}Vpdbp zfY%^hzPz~dW0hAv*o-?C4}M)|yefD}R#zD>>#Fq2Jsa+_stQKHaeAe~oKk~XYQbt# zl<63nk*u4G9G5neA?xmx+*L(Z3o0~!1=w@0G6&^DOsys8^h$)@q|>W}ibpN!8i;}y zb^2(89@S}DSAHOqF0t(rOs8qV@&bu%*MT}s3+69rC+XsRboF7Ku16?$6(XsGlDoXg zQ*u`&qP&-e&R5>iwOo6w((W@(uB*?Gw;3H9(dpF)<>u|%&-1!&N+>$*jL?WqRRhI! zU88^$Si8|_YoaULY!A2_)I?7p#nXid{dJu#5poaoYa=1*bn^sJzpf`lo!*Sl!#Y(^ zii;_SD^c*GPNfrq7cc48VM5et+Csje%fgGI;HXafBQ&B@1p!7!FX`8ELe%LlAt&mW zytGkHr#GVPs7})k=Q~*5;Wx@*>4ecY#*qABwD3lqrY+=qV&1|dMHU_@u<%Hcg-3Gz zCvV}=A`6ceSa`I^!lUGHA`4@s76usJupr^N8iw^Rovx&4n><&uFq%$P zGey&L2gT-@HdWqHu>q>*D`P`k&*jLJnnog%9UD3+YtMwuA+O0M|C8F)wv!xry_b{8 zYF7uEBhz|-P8Ff58I-$HT(BG%p$3Wn=`~GI(=1cOe4FQTpr{_Qa#np=F@v%ZkknoL z&TGo8PqLZ|j9~;Q+TO}}^=D7adzV`p!DxOY&I{&t(F-<$^HTR{u3&9g?AMerQom^GT$b+Jg-#Y=fzxd`WVjTY$|Ezp&#1gv2oz6v@vu;yBV)NZ*^WAr`IhNS0x=kT7(dMH%osBl%LvY@3i2*_3fRaZy=}7n#W!I+j$Q9FjuRvJG6DC@|J9|CYkkircIR@wo-dsV-D=A zQTPXSdPwNO$`h6QeMh9}3omZdtwzleq`U$nL{}*GqrluY2`(pWzfn4e!9lApti@q*eR1tUu3)ZGyeS1 za?R$RTmwC%`ra0qxgZ_O)KRdP-$nKm)92d|W{*`pc)`MmM#ZYO4Bt9PH0 zoA*1hT6rkvbQ|;D&J)lv@AOP#?pn_|m!jG$w6w;7nyKTMki1Y4{!}FQ`2B zScyStnWVP+D`y{8y`Fi&Z#~%5@#VRqOJ?FvAu|@k_1L@Vk|3$G51d_yF1)I}#PJ;} zQrj)6&KleEo0y(bouYRCX{e>uDQ$9~psqw2h|RBYLqDw%l4_>kNTMK zTBa7^vVNbX7Ti=9rJvettW5e;Q%}A_Nucju1!lj={k_c8ZZmx!yG*udbEK@?J9Rly zW5X6CE!M7*K3dX4w_fT_9x=UZ7`92=f35<16hO7n89~x@FAm>)wLARBOl=zM?00C8 z>DkH?`9WKxI!OidT7l|pMM=xcspa{Vcl*>QKRP7mc3rUh%gJIrc*nN!c<*_i@Wi{yQ{TvdfCYIjrB>!vOw;^(! zlq05A8#?WvR9Rd{D6*P}W^1jTS+9tcT{SSJMzJ!S))et)D~bc z*$v%fS~iY!)}7bSw7{V&RPkF(3yRf6>F#nZqu=U==9yZ1)#-AC-lEeFMCf6iR$@GI z&y!pxdpk;9(COzRbWx|b2%W9G7J|!YIqLy5(N;;wB zMy_T?N|Cc#)#<50l$=Nf4qkcEYx6qOf-c|k6f2%-!N75u(jPC^(n{&JaxEM4Zs;o0 zvXSf#^ILyHEitzvx=hMPm=+YPLg`w$mK#6i25Rq>p$j@~jnG?k`Xv#1Sf_Il%JtN4 zX7xqN1)aV%LKk&9P00GnncPUWMmK+jX+dFClHV(*G|_~LV~s_pDvl}EsoXCZD3sM3 zi;-*dc}gxmYcEoATAJG2p&q8zbah&f z&|7r+ng~6t(~St_`u7O4CL-m6PCpQ#oJZHb#69{f(}L=f(=Uu#az*cDmOQuCq*Hlr zighYa3q}%UjYV6zPLZeNLa|KgQ_3yMS~Qf?vU$Nn)Bmui1zqHbl-o?LK6U!?D3y!( z1lgApscduWX4b1CB^PsPd22aECDSJn8;p=oLLXYTlGD2h7z)R5}DbKT;{13hCl75a7KA&usFQ2je zteRHtE%h=j=vK4LT8@<5o1R$;9&jlzrj4uzqNZG9nPb*`q~wfs{e2JN0MoL;a*6pH zObgyn%~DGIZl#8oM@>1umzlK^DLKDy|DyZd@k{Ea7j$|#Lb)BM0cMRx$_1T{Md%To zjuXOm^E+)9M!%;cbyTOz8LEDNAX0PV!4R`%m_E-oE(@yp3Jdz1ObgnSV)4i2lujB^ z01Ec>lqJ6k7Fc;oF2YMRqyQ*(`h7}3B)Ucw1wL+WdTkH>s%kwqCLED+hp81qrE{sPg3(Qqy=ln@FX?B4@QEqH-WAT)cmEH%1EWj}y7L;dwj(9?xs)sgLv4Yv zZfbaS)Rb#n>&)7Sl$^2EH@eGLn3hcu_RWGh6t|6O!M9PeloG!eXz9aD3xZUmk*0EE z$8VxP&T5iAHt7Umc)syS3J!<(@;?}sgv`%ay2TF)Rne@ ze8F-NlPjVYw1HjjckRa=v)o02Hq+i2DY>$*bJyu=+s3|xTactYQ?BI- zw~1~rEt_gvKH^rom=@f}(Dv5Hwt8jF-% zsI{N)vIpykxYuRIJ^{Ug^ zUns3tWi3QXu3opP@Jdvio4cl%H6JOtnrWheZl*;QJVx=im8(&aq^`8~WJd)osJ#x( z6OA}u^LuujNQ?#07?s(W2joAYpi!M_|U z;et-L2&qc-`(u%s)7JFeUfx!w1ywpo>5JuBHD7S)B)~!g%MfvEP++=g4T+pd(CSGKt zJW8QCrbSWK8*Cq^p@N}CK778MqQc5zX_V!Pie3=qt#9`tf1GK7N6p{CieOsMCC4be zT&`t^S&x=eCcniE%`mlk)oI^rJgcAt%4$SPu3pEea6Br`tu5M^)g39h_P@!jeWpbf z+{C;uDOaN+NnL5}$&LzGQ1-o__ORSwT2wX6dRwIA3U;ige3upE9A%VQQ<0LJ0J9XE zUfvL2Y_|6lizdJWTK>cMWN^;%^h?~S6{Z#iovsnm(5>IkL~2gkEoN0-s-or^OCKq( zE!QHS-d;{wWtMz;4n8ihpDma7w>DB^Qiat8S?EXFM%ib`CIq zjA=m=(xa+>M3n_TPrur&tT06%=jj?#g<8L#iPW6$2h7r2$OWO+D|fFg*CLsKe1z~3osM7hFcnM$%9@IlTo;(3!quqwf=*>K@glppxk;fG z>Mxr6^z`X>MgzI3kq_@Ir>L;9SUNq*6&1Z8D%U>b0o!MqluyV3b8M-h)1?oWMp;>_ zk&=t@Iu-6l#TRrcn~4|MD7R5>KhvTpPf+pOqk&wM<-Q$#3mrCnZSzD2kcaI8> zqT<{Va+O(|k&-JxFAa<^Evn!}ihsCVjfy07rL`wJDqunF?LFvWIbv!N%QnkJW_>tP zas_K`cP%|k3#w*}S<{h{GgM>N1Cf$5H1Rq&G|#kbV%lQ&SVVO?@K_8_w(ayYYdBJJWge%(g{b&~PGvLkBCG#8h3+sd>QP;~ua&)1-Vt2AN|~*6FPX<@Yw2Re6spA{XTrQhF0DI+e}D zi)@tVDYU_~D9ZbfyY0_0Eoi#(;eqHwt|C-eSuBmRTsexma#0!ni|)}yrUf3&GixPM za)GNbt2a_|P9OgTH}nOj1%~#%$0;|MTD|IY?t49}pq)%JYcW!C?p>wA-KaP>G0ie- zDN=GJXr+NZrbQJzN%41`*j9W!7UiUmq~f1JnrjX>cQP%T2M8| z%+l;rWQde!PSNt+Zm5~FN!i5I&wR~31=e&O`-fCn;PW6K;+tY>@zd!HAr1Qa{mw|u z)&4rO^oU@APc5W;S-BSZ^ty7&G_&N>bMSHOT^`>FrpaI>WSTkVy-wTTUD~x;n5D^~ zpv-+#I2sjS(5Y-DUSx;N%M{vUTGXTN%({Coj0SR5BOhK}PElcHv9#046&1ap)7{`8 zcPkEdxdBH*2%#g9_R+sg38uH z@%N~zpwlgKS+yD0Zx?jBO-Kz|zds(SIo}VNbvsgW5zs>M(MZW@kx%a{r))7xK0OB? zx4CNDVVX2|A=i?1old9cN;};Iv*sctSLP)u+=_}X=u|cnFS4DkM!j83i#nZFqHl@@ zazT|3PnAG8T-;~yO&Mrnu&gssVv5hk=XuvbfT8fn1-e4=U zUK%MmLmOY=hIW~j&2)E|-}-X3hn%%#Qa-}8z~}L9mtJ6M@zd!NAvI|IekxLPzV9*X zMx^Af^t+h#P^9Fv$fq}#Qx=&epPqw{&F}XTw=zwdyO0j%*f6Hky$I!&!OFT3DY-Hq zKJ6x(BISZkWi#<2+v!FqG|RN8({0ee$CwsWw0!vea*7Hoi=~}TuBhk*o$l~eUgVoh zlky3<%^ZuePB*^Rg$nd3Yb#Q6QNBWj2T}0_oyun7MK;Pk)H}?yD9UqG{Jv-)*L3B> zC(0=*tSpvBS+1z)1yQMgzytPLrUmsr&#a|L$p!8vTUJM;7tg0$_;h> zg!?kav}}6YX8s=20*CUHoJ0DM)yt!nT*J8XUU%q#sa2Ftj|gdY(eKYkYEIkuB16rz z!0kLG=eE9X^}cdLa{CkIltX68?dMR8>tD^FFii%|10pw>S~u6}^{;WEf~Kyl!$`^X z;Y}*skBTqoR5lYYvYnuldIy*m^=^HX>OIjwuJ+`^N6RTHtSpue0Qn;4s#)HOS`fI= z4|+_;nI<6+GQ}LL2%V08sI(%KrTbh3?X#B(N21~jI+e}Di)=+~Q0N-dqKde^;_f{^ z8pu_Ie0ZpwqQc5zX+`9VoT~_VD{4VS?6X6EHg@cs)5ClQXe>SplxyU3l-?@WGR3UN z$|-q6xe~4Xq{n!jskIKBE-sX|4rQ%GO0EQpRJars=O_(kjYLW=R5zGap`oH?(o4>3 z%GIbyQdimr@&(I9OspkU^BW8V`=_x*qyv+@cF}1i)@N_wWvT?ulLoU@6DY*`INXj2EEhx!6 zrQgf+6gNdZ#iu?FKpKz=#;RLC;%=WUAFFP$8lPW2R@FIVOvRz&f=*`$ssHQuJ0mq0 zry8>!D5uEaYsx9p%#tAsr5={e)}5&G?K${*opC#i@q09@T{Fcqk&-L%Wrp?>9CH8Ej|PE6OP{c(I(a$SfJM5bM#^Y!F11Z_mNkgAKLCi~l4Qn^i)sjRHy(lSLYSfymei&icT z^3!t5G$*q~a+~b=pC}(k+J4;&*3R@^19JO&DffC$Q>B*50jf-8WdkBDqtt>zWW|dL z)BfPyz(4dNbLy^L>JRksipGh?kz-GCa494$ch>e^a} z+*O*B*&?|Ou9rU+7wEa}E%BSrF(8|-@qp|zeSv-AkX=S9Rn@7iYzvW=)`n|CA+q8{ z1v{eEwA?M0KxT{NhAHAiND-7PP|5z`mgikktEO8uR{R8}@1($dAk zpb%N{qJrI_)wJCF|77oNz$&}W^U%$JG)O|8iG(dWI*!o{(%_iXj6^INQ;Wp3rZuTZ zjH5GWpBadRWh_yfYhwv}&$x?#A`z{*^|YonjY-69 zXhmyoMeAurBU;mnWbWE$z3;d7UTd8*$WESn^E{nLkJh`s^?twWXYaE)KgfV?eR}=S zJBQX&5SnawgDYh1?YbbrPv|zW3}~_iCKE$;L1?8JR^lY6o=p_V)~f? z{S;bHL8zX8g9WLb)`e(8o5-3b$F5xvS{a3vxFEK=Z>F>0C-r*aj&6N=%aM-yyJ$TH z;hEg=2DePrgW7Z>+C)KUl50OP=j%@-?)cSSD~!{v28lWeztWn`qU`7{YCccoW9{ zt3q|c=55S{;uJc3zBpwILv&P=`~4lMYvZm(0#z3vah+BDAxf%35QC|XY*%Prc; zDq7FOU;Z{>C=_QowBUW}S$V&@^RkC;x;ZQq$4Xm=j-?Z=Cl;6Dyq)Fp`?Zyq(0YMUU;^okUO!*pYRyTdup_fJ&A%L(!3>;hKg1H~!B7-AVp zRA^SLIPX%SwxKvbb5MZ_FvWuwm3pkaC%~RB>UpaA66eba@FFO)Xq6Sha?uJ2`3qI$ z!DrpyAFF|h1~KJ$<0rbm{{;r*ObxBvE>;{0)9M8!zA(kV&By+Si>oeRXhSGx2?L~C zWF>N#r8vk+9E2AZS#3P~ri(+<5|Fb%T#935AKDB~tsz3ry?4r}N0KMN-7o8@n*JM{ zGRJ!ZhFXO3AmLX;6cX~MwY&k%!P^pAPeA-Wkqbg`76`38U!20U_CVnpV*mBxsvXE_ zKyo`vI0;daHN;_-;vj3N5++$>PenM?Bmp^V$fY>5I00=2r`8Z5=iWPI)Fa6g;H7rG zcKB@>o}+3NlufkC3gNr|3Rhl8*angJYLkbFc`=nET!2XZ&MzNK7rw?w{Y>qNGUqQ; z{04#07_zr74Ku^re1_F6ier0+kw|i9s{xzQ7Fk3bW-Sh~h*sfkT{3Z|-=#Q&fwG{A}l#))Fa7by5nc`GT2A!S!ZJyx+s(f311UYNXTzB@viF4R_$#Ut>?~* zUrP0IaSCJZg7@pyw-LuzD)t|csGKuw7DFpSIZL<$QIQ40Vdi;|1=0(XtYC@aPDnt` z0-?5{ILqt`v>BXQAcUM)?|e{?Bu{`zA} zA%C;cvvYUB4t_;zE3J0Gr$rPJPKwA`Jk;tGN;lz{h@83L!~Vx5XoteQzFM5JiXkRb zBF}xX;$%Q=Lvc3IC^BI^)D9smQ5tF)ietF1QJ25t6sN)YeSm3D=FqB{+6BBz{&ipbHb#}G?ZqKaK& z#i?^2w@nZc6k znT&BbV7b*oAS_XNY8i^-yW{hEcI)LGpH2p2piH7w;cWoEO|(KnzJ=72#OCL;uU)jB z`w)Kg;N{{JM%;xMca1#Emu#@omZt5pV6c#w4Ot)1w#`;aa=8qXe&W+$_OZ5 zLhD%uwDMwc3d600BOdzf-y{Jz6Iz2Irc)x*HnHMlN^L`NPT5gtm#CLZajZ1pD;n~} zzp7yvLz6;rUUFnG^bVmob!o)wgPv==DjC7}l)RpByJg;=q|2#_-+Z6edfLML$%) zP?);sEN*|RuJZk8J;%#1hWKqOp2F>Bw3YheR`^8^uYu}uG~21ITtXXvKohX%=k<^$ zgH8uEgUO~J~v7|xFx#`)9Bo`*R$ zrAXYpu=F@uPu#)(rh}?L>v4AF?`cZ)Z|GLd1|fg$*mD!t0(RDD5%!5FB94MF3s&EO{MHCWlh$v5Z+dNl-Gc^rh4~Uj?IokP6t$h`(XIg0Gonpl~ zlbGiaD7>#@|6Fm^OBlL>w#f1s!!XNLqLQ@enRsd&igV*ujdGSKD=D>7dB;lrIbGK3 z8BUHvnFM7XtqPZLNkk#xvWW78S4HGZd^Lu$LUAUZzaaI>uQNhtR%zunvEopeXAdZx zc=jJEt~!OGHMB)0egMNPmuKQRM2nt@cPY+%?88xsvXW9+d{!&&)#c=G7^f9|$E!SP9X=9^3FYfW8KUo^yeQneu@j+teeH9<)Vf zz81rzd#2T;I0reSBh@n@V{lZWuB1$Y>ajBORb6`iu9Ih>Zi2FpR%Jw3HOp-n5*`&% zp78x5a%R36Hao<&vswA$efJipFo`)(_?(9Q=ZmXuW2hD}7MayW&{&HSWuisT#8cZ) zoc-L6I7-xvlrAZ&Vh^Fu-=)6rU3;L~BcR@Si zc%XPZHHasJ))UXAybgICZLz!G{xh1#UzPWmvMEJUvuU2xrV-57(RxZfhvBi&-mnZXulbc!+O{wcuF5urHqKr8nZr!cWGP z@$VFXLyW_>KA>$Vj+OkiCxete$-uF)_CdWa*3rJzeb=9Q&)*Zl@xq%6BhqGnvFLKz zhouUkJVMw65ic0%M#6NK(+G?)Om*cW+`!Pm?%D^yzJS(q38i7?c;LHsZ+h-}>O`8u zlI|HoQvqi^F&dWDbKY=>ad_5~OL11h)U{`WloGSw*{v5wQ%}(aG6u>7S`{wg5=2-a z8|c16j5!Nr^Q`u>i`Fx*s~CE@IE7Jn!69$%*?&Mnb&e`;=vl(0V=>w+d6=L+c5s7utQrtqlHz4rB_gnoGi#cd%a0i}Yo% zuNW=DlcMF!RWsP{6D?;V7|!FxDbpBY44#+v99j`8&eC!zPLg%Vq(nxfG)mHrmHxk= ztC;y|R?~USIs?iIS~UlRhegY&W*yjlMk}!XZ8vM5KS1kQBD8W+tT=PR31K3cVD2rHmLd?mCR~bhHqkAqo*E9rL5YHqGA6M&jwVj(n(~W?J!@+PlwGuHvIyT< zueH@%wd?}cf!!=x&aUD2$e$=qVR#oo;f)si&lXpm#Sp_Uk=dG9apsEJhT^RE1{9%0 zF-U2adO21mr*$b;(0Z;2mA|Gbb!a`$?D)+b&lI<#Z@OU#H2mv35S-% zij#&*ajII4I+dswDYa5k$I5P~>&3qXc*1SSYf1-NHGPDgBFYm!Eh1<7=HP1wtuka^ z4){B^7lh(WAFVuJoWi8`K;iVU|9WxNN`%j(OVp!DGIi3RwxKwMAA@#@dXX|IjvOn^ z|3J^pWwf5dq6^r9Buw>T~q$}t7o~@{2fhcMyqxWVT*|J zgpZ5JnZE(}8b#|VJAcmmW5p?qcncKXYO()Han)T6F{2X6)=C=A^ikVToLw;p?GnWx zWkeh~R)#-{xk0N6KLNOIMD__*gP{hYI44*ohHfiPS;o+J(EfS#mD=((riEwbndUoB zlqJ6H=~&|P`tEZ=+A9%w|J!uB!)R5yBY>BU$WFHrLw!Pdgm3_&;@|AdUz;lzWv5oO ze@}7BB@DfY_D8K1?Ul%S;|^V`D`-`%b^sfW>menwYc&nZx@bK@xCv45TJ?hQ2~l=x zMf=Ycr_><26KIde>nim{4|-kk8*_c%dPW;1GHtKbMaZI6#mEC*G$Ok`RTyd$$|Hmw z5EZY_DrW!X;tPfLkBEJzgrgYx652w2OfllG(kkpbQ!;n2(ME|(>mJqhX+o>&(+oIh zM0S0)AJJO1LV1L+9-`v)S%C5jXg#Mt?SH>Gr3ZcZ`Vh83#7~s4|30BQliG!$UZFVO3&-Du`+kFV?5Pf8x?QX|j#@FqnBG8)N2|5t z8nk*MC;4Euf;r+M$q~`6fp+} zFQD}ll`(w3IEBg5W6{q|FchZlIe{xbp;N9y>v_Nb<&SI1x6yinuKY1g=|ttsn-SOL^wf~y{6W|z9I(I7d>l(Hnkq_#%n;Ud>5l` z;9Yr}XiHGXe^Xay4s9YMiY{a5U>R+Iy(tFOH#Pe+YW+GE6B8ucVR=@}IOZ)v z>sg=+H*0rmXb%OA5%D%;>ZBpO0#SKzzAR#AM}!y3qFr?MjWS{IChaTsL0kb@xmq+) zH99qDm1DwM;VH-VD(Hl-9`TtY?1!i#c&#kwC^loX-6#^$reE=Ll}_beqew`b2UQGx zilG}SJboRmnoB|kp;EjaLj_mTk(t0asJ=d!2OPVr- z_E69i5pRg>r=04IVr&Af$8^u{Y189q<5f!B{QG(=&V+bOWK9wAg2);p;$@MkDgf_@ ztjP)W=$iJ`h*r%P;Rr-}zSw)x5DCXpM7z%PP$!BZ;gE>3gmj~RKO=l0GZGu4h;GV) ztnFj=MV&>%l5UmuYQtb$8vD zgX8TP5}IIJz0IN@@UjsRu0T}O90{u+#%qCL_abcNVhZrG5!o4#-49BY`UcMCyM}}J z+;vjD51rCc8GTHRK88`-7L#j1RI#nUD7Gl=lF`T1XfazoFX-ZrqE%D43bf zoG@f3V25&j@X#|A>OaOZiCC@=9xTY&pMv~wEN@gXQZR{1P=V!O29&eUSm~I3mXCZp z@XH9mOyLLVic?t@e2^8`mF4llI?PKw+PA1XIla{r8@+NUGl22IYw*S~&VY;AvlCcD z0xX#Nyo8%TKNFyJ&!;LXQE_9a$2HVLLrYSLo^3!=oSs%B!=%cBo+T?kC9+cq7O)A? zsxx>3XK*Wa+6dajkZon|8`{bWT6O8%2E2myI`y9G*1BjIe&*4Z1rHG}i>RA$1)>|( zM4zg=5FA$)DBBYHLv}d9KgAjGZQZKfzX+IF5z#K-z7g4mnqcUn80w`Vqt$C`^?*Gn zT3NbnH@^A+8HVSGYWQb5*!$6XZp-qB@DkeiDnz_4Y9ApSK}hAnFPBA3<%-1l5yG7$ zZxZY{M*;ILdqMka+CU9q6@*j$J7hFJDt0`xqqRjy=_&u@f~Fsa6Tck6W;oc z=I@|YFO3LyAu7BkW2XYPJnuK{0{_EeDjWuE7OgOA1yvQ44}FRc^PIHuj!oyG*rwyd zSqn_ER>J5eY=B6;P8^QdG2uE3gr*Fo$1dqM0y3pKLs%&RWL;m*_h;;5POD&0Ek?q6 zh}8M|+o+x$2DM4`oE4R@LaT4g0kw?-=TCy9(7{c?IkSW*q<*y;lx!x;iY#=V9g`?d ze0a?Oa}&feyBtm6w4zlDov;m}!a`@KOL)#Zy=VTp-ZS4otKN3D0yrjG;VdA7QVV^c z_(Gp^Y&r|Q5eAJ9XQ4C60STjI`940?4|)oQ2+j zF=Qy?>}zS*5u@ zB5Z+373CssyzJ#p?M~5l*3%>oqh+-5uBrK5?eqj%^@BencyX>jNmcn>O=w0Nzb8*! zkeuz7{g;|IiMA|wfN)tvA>jr@<-xhKXbPt1(JIwdz(5`&JV00h(RIP&!KsrGyL=Ym zc}wV+6T zpCiovV_ixA!!)w?pcqdgaV0c8H!-%Fx=W;1jc8>vfSpEU2hQj|A(R|p&o@g2?ka{p zMfZW_3_LBMjWZ@*mMEO_jL{4sDwQ!|^|B6B9UP5-`EQBH&X|V2CWb=7N@&MZ6-MmU ziTTqs|85b5gkvdP_Qr*Hn(!+k3JEWzblH2+5DDx4FEb@!#NIn0ReOc7Cq-oMQ9~r0 zNDfzmH0ycAPD)m6pC+VRbuaJ>xKi70Jrh+4LrrM0 za;V9|6Rjpi%iry_Q0jquYEJ55G-E@G$M2!|tf z@<#YX#Lj>bo{!iWHNp!KJ2McfyOeprH4)_qHzCpmXK%+4?V7VP8&a8&a4BIcjM!Td zTOlFc=%vP|QTkHn4pDzTN;ox|55t&b;O$^zSHVuQbW-e^XsN*}N z?_CM!EMWx(iU5Uxk(0Z+VW^3L45iq0;G70(<%(fJdhYrEGL+5Mwxl{MdWF1Wq9ZYcO{aQpFV z`n^6V5FK9p7JFsDk-tf06JL8W>IJ@U+>WS{5jmD@rsoyuAr+kcuX;mYt(MWM#X;DH zg;)`cj|@fZ^~gTR5pt`?Q{&!{(A;Hsh~JQ?A9PT%Cce7~w;i$_IL)pYrg~fuKPRDN zUCf>#Oqd0^nAufh_K-G9$)=b+OPDYVvTe2!RjWc9Kc>)TDXEdVb`v%@cZHhb%aNVt_E+LfV)M@2Ctq|Mkv7_ql%h=fTG z?jtMLL*C~hFCH$7hdg1@gL`dqJ)H4*I3phZKs=lwOnPuHV)W1^if0Lvif5g(pNbu# z*iE<$QC!|`PiWn~(A>K@dSJ%tEenK64?P|aJw6ZaZQt=Z0Ydltt0X(O0c#Dp#KxXAT?dXvv zV-7L(;|Ey8#@5|V6*B);M_-FJwnf|~vQv)U3?{~K8l%go1mp9?z74%f*j6`GgstN4 z%N@kV{Kq?pE8*r)@Z}ETDv^D>gP7sOJmT+w=edvDLS%c4FgWu}*)!$p9dEXBrHrh? z+$(6!h`mY~{D>sk7!mJDEgoX*4HD-=eSix_v<%3=)ccBTf3!WG@JGBN{_^yf5#xE= zpYKsH&ODiHzkf<$nJa1o+%^#>|vwXqy62s8FaoR!ee66PT){9T;+3@3Dn zN0P*GbY{`27x;Enc^tK2jl^dSafisrBOuQZ{V46|IGDgCDee2Y=rGDM4*)diS+SUp}I}MMycAvR+ zCpcxU{hFC7(yKmmulmfr>X_r~tw`bAO9DA-!f`K*c}ze*TD1rXr$uy{kW1FTplR!Z zD29YHB6^T8Y0JG~9f!h{C}s(%=-GRX|Bv1zLueI+a9%{cgo_aAY}osj5Oajp5=1ZI zZ6eAMGX1ik*Ir9*Tp{DSmD`;R)YM{G@v7Hx2o$Q6anp zQJixau@^`-4-wuZq8uS}S63-Q=B^Gs!a68w5A3ywIp+%J7ANm3PTo_TJd4wlNGl() z$NK2UPMK%~tVyZMX_o3r$^d)2LhL4F=IX>HWajGTkdW!dMQ~p$mB^S2Kr6DxG?fQJ zI@d(@=syt(m!&_H6)ZoNN_`IqOEM$LKX?g{MNlkvVjpb796um)-ED7#3=DCG)E@?E zyHd1HySANIA01nIHw>UvJDqS`L|MZ6#3su{>~R`A7tf2Z5ux=x8{EQJkTPy(Z1+8< z)`9OB`u?L%`XX9oi|~qwvVTjavPL#-sB!LaxU=J$8x54-?Wy>@n~0 zn0GyX_*yxtb$0pbijkNW(ef@P+ZdC$4?V55Q4h$oiy8pywlp|b#NG~JyRt=GGH$`Nx@;{43!ix}Ti|oxCBH?n1 z$lj_U5^kr6?ClyNVa2OD8tpncFEQ>x2EAyHs#8SYZru}qMzeAx(+ZR0Xl+JkrkKq! z*o-HVR{CJYH@Qc_XC2iUy`?^y4k>F9pWGD@dz-MQxzdxIW3C;a-S=L$9=2Kj`W;O7 zhi2J9crK@9fwR5KgQtd_tUWxhHRo*?9>pKQft%3*|3Iv6`)u8KO58ipABAXp@O;IH z`m52{1)EnMeB2ctRQX5X*>R{x(9MgP5nCMhJ>P=o5tT4dV(5(-vZE^tK4gnjkw<++ zc7+~g+n9HmJ1^DZ#pJ$LKbYz(S_kkR+Zch`MhJzB6?M}i9@L!}6BQg6v9HGVKRw%hoo z|E8*uSnP!4`O?Mm;8%Qy{Uf$nyYDaX|M%0UF8Ow-b{}=!D!az?Jv}vCYI@!jJbjSq zyM`M(I5mBn<$wCqS00RBa0=zUl6ZJ_%$~o^lm}1xmX&jC+NN#^o>VVGTh+IG#9#Dr zKFHj2mlLMq3}1_5+x6Z;J!-ScgQtB_JG`>M5!t4^XS%biJR8zAbl@8oXZQKSf9;YKh%=^}<`K zRr{0mWx-o+br#y2gC`C`v#op9T6yqk-@Ed>i!_nF1xVFnK*F^Yk-geIu}HW8k+#U*z9ACU{`aJ7_L?D8t_hFsCyDG$L8^#^ z?SGUcveyZzA`(`h&N@c+YNYyELQaS#+DnIX(kBy;Crm2lon4iGO$R!Jwk&v z$=2Ny`XZ>`>&Ss6qr+L)k?DGva2F!SjGe<8%b410(9S#Kj?dAryq1^gO1w zAmjvBVk!$lPG(zDXwRi~go$m!ycLA@WX55({jsiM7HxsJj?Pw6$QkCW6qt4;I{&LS zcM+|+4Qc=JijkNWQ8w}4G)G;u?0P7Xop{W$l2IZ%?4+OAS@IueXG3PEF(Td)*{O*5 zipcJch&h{w0{0yYHORFQZG1~h+ydFn>L#yz9cwY;tYwz1FJXeXA2RhGivd7Z((|^9 zeQcx7Kh#B5h1r4I$Ud2pV?1N7U=b$A>|-T4mMnCPTQRvkXnpth+!BmO-3D>(Ps$PZ z=sX}JQ!H)<2BbvX3WIXwJzDp=PQ3@MV$EP1%*rwLC>Q)V*0^Hr19GJw3Ywz~&NHrh zUp`~Vbuy82HMV^-+E}k0xC5=4K9-^{L9@?IpUVLhXGrSh+ynTcVuYshkMQ&{Wq!mh z^CLWYhNR4ou*~gJ=0}E5-eD>8BW{@=;pxIMtL<#3tVH(0T10Wz6GbN8giIBba2KM& zC*#=gv9w)-~!EJN9ZB=Yb+AlHMs z4)dzhEFnG2oQ&Uxx%1{_2Rcu?cXxEX8sz36N7x8ad{>c+*yG)V=iZsNs-WoGR{Sf) zQ9QXaq33xaTcxe zNH_wAH$lih> z64JRpGbDoMtKL1~ez#mJ9E_p8KKM-GvlUF7Mr*`q`Sd#&YT;AZ_GY5RyjUCw z)SnL|CDzUNx`19;W6!ImCM)3h*9E9%OuJv%PYz9A7n}>;?SA(wqaT8s_}LvXYZOOL zbIS=H@tVlg?{ok&wDRDFtImz>3Kq$_ES4N0SE_#7PbvN%tE~smmEfu-ZsXr zciYerl@Go>`Vrb7+W2>;;_YEu^lcBDe zK6eSs`goW9>h=1Z-$AR^7GVH=EPM1S(JCTgRhnp}H4e*5#seXp`!`k(6o!o=A#M5< zm#@<~wHif2+Vm^#R%pc$7*IJ9(q?JJQBgcYm{fFM<+Z@$5L(}gg1psQuhbeIu96oH*!#E5e^?Jm6od*`V`%?T*W*UdlH3I zA7Nq-air1;?kt%WWB&?tRa%6t<)zYc6+}?w&VLo+Z&mM2+l|_3s&}paG3JK{Zb{a^md0KC`u zJR)Ia{4B9uZJQVWIjb0F2sYzKw8R%7yI$P~j0Bm8{VB)~D`{=v7QqUrFmO)YJ21@& zl!TVppM+d2QNX$s2I6m7v*Tv&oC@_ahLH21XQh}Tms8P|b!|mwdC#E^jKK5fSyJde zzP1s!pc?9{O*#RMr5-z;dQckBULSm+aKC1&`mUbTZ5EHAt>(Ffv$f*eHCxSh3uo)$ z7S2{Ja%X32$N5k-i}+(1F-zvXvy&$ZH_5420oaE&UN*Uiy;(yftVumUVUG_^Jf|L= zR*S8WkZ$y0#vVPXIUuAPO=QnFbxu7x-I6KJ6EfrU0cBoT#HXGcO5PVrK4K^hs7fiL zQ4o_e*`JQX|jY~G=u)j2)LX@Sl70!f^QEIzBo)v3pR59EiHv~cQCz)}?k z;!}@lcAzA*#C|8_Vu=FQr7++-_2`OIp-w$Q&V&Eda}|rMEc=vk6`fOW6op|V>eM4- zP}j#7$b0IXd7$c=%!7I`0lXoyQxS0`Di`l}V*2oX_sTMCTt<7n`U$}Jf)&6HZTQYe zo8vhUX`Ue$4nN1V`jHo=FqOW>;Gh_LSFf4mdhp6{jH~-RN_RJ$h0#C8QfoWY0Kt4mdiU7N>baW}H5Y(hoA-Q1ZS|^6Cd| zb=kJjmNH5X!%iP?CIIgNw}C_$S+N7o=BckasdaW1NqaDQD7Y^ou0bZe8)H8Mx!jFW zz=-6&j(Jw%?-I1ceih_mi2@d;=zSesaW2#eN63lrpKz{Xk)>syaIT_r!nL9>j6{9D zfsjEJPPiubgrn*NOvEP*@kNoHiinp*raqhuOdq}zZUmfBwDDu|_=HF}SuupRLei z%Q=r+TX~-?^*9Cbn7EwUaH!jaPS}&mk-c6+v~zTAg+5zh zwYGRfeGc(+!O083G4=oR>cY%{8W3(z6282kJ|T5{C^%j<7XE5|CL*co%@T4AU?bWi z>V3*z2u_X!$Ib^Q<5!>U7#MmBbC zBkH05r((AHmiU67h8oQc{v37A64pQz`*|W}$9_Jm{BU5&=n$?K)8W9#G4Vrq5hBMA z2U>3z9l|U`M^rW{Dixc`Dvpf<`=WD(Fvw^#H>g^pViZ+ks7n3SUKzq@2GTjS>V}bU zF`=Ml424;NH2+oxe44NyqAFF&!W0*x9j5fhsgSP%%%F`GR7grEPOkydC8I#N0@2MX zhuZVO9cs$d5{xz=9(fyGWC^Drx>=Q@_LHJPaceC#Lc$J+3L0N5XvB*(3vqCVXb{#w zRM2=zG%^q`iiYz8nRD2bYuIAyuWf|evMtZW#r#5W>|Aj2F%<|0xYKG>Erg(MsK2E4 z`j{^}vDm;LobyiPtJ98;wnQP%Sq7?%C@VZt%lU+2^gJNcJ+H$gb6`UD*BQcD*e%ose#dLP)qH3WXyKXGDN4F(I4iEa5CfRjRrwB;_P7?i{3@vWLzR=4B5J z1+`BEcc@AEq|)ez_^9lm4-z)W9#Z?%Xi&T=8XqOR;%agujl?sj*7``iZ;wY6*i#L%ryeG3l0EfQ?B}z=v8UqQcs%OEz_9G8 z(}d%)r*O>1d-qdHX8{8}vZwNdL$ap|`%o=iEG!Px%AU#-Hp`x}bU3hSbO`r~>2P3L z_S9*@1&EHQsuea=oKL(YInX8B>NH`mY%5&13krjfR>&?nOIV%QC2EVnLmi}-i~`}Z zC=^Z;FpSR zrzY7>A0li`Y^Ns+w=(Mg@jWI7@*vcxM?ymQTyR{S0ad@z-h7+-;|3T5vhmIm4#~#* zg8DmeeB-BXGh^%X7+97IV4iSWE`Xm`iN-fq>imfRkg<<}I@x#+^8T@1HXe><-jMZS zpiwqnNZ2kLudrFwp@5adfgPhmSSg#x(&50oY`l>0axona49La{3CCpP;mX0AUk=pE z#tR9XW#biYN|_9#>qdcaTNDc00+**fNXKO3ogus^8xOY(g{?gcX|rs+GlcE3@jeyb z2;n|83+aw1goKr{jh+Zua(OX56H&L6AsJ9 zQ$Cc&7q!MX#Er7?@`UZO@s!46!5wN<#_O>IVqWglXBO>^$Cr!Cc-i=~W#`HZUn0<6 zcTWGjP;1>C=k)IvH7lflP3ey4nTm6V$-BM)V%~KH6!R(ysKC34yc>mggYYU1?+AHs z65h?it1`S>$-6~(KPJ4RhIbozZxP;`g;#BOx082Fcz;fKHHP;#@_t-+Zxvofc+b?@ zHRidO!Rv4Je1>pbL=O^9CtjuJBK9)!q~JlqCV8Up>Ar}aHVF089rikncCp}wB$AMD zR76>Zv1detuZt)o+=obgT(UJ{=cvSxb;EKVt*~Z|Vm(hd2vMA3K4NcJhz~K?l@xIm zJ;tNHeuuC^D*0q<EFbk1hf$ZfC@!GaR zpRF)*Z8?v8-MI2TTX~Ny=MiJuo%+>!J6e?^VJAd7M?0Y{Jht4E$Co+6){=^q7_AeJ zS;9sUqAcN(h}=IWBHs6!xCvQTe*`S;s8J*w zgGei~H*SdbM9@|bD2IakBjR3B>+S;_F(N`bQQxm{!Fdf>@pipHdeN!{LbwW%KgX`S zwBiG3t!(`VI2WOdpEa9TD;QSj_Gu#M%ve z3y>Nhk% zcv4)1g!Hb7?9s93Ps}x#*Lt)!t4B2D)A%NgOhj=5hU4e9X845rr2{ifx{!NlRY3_W zeo7DNg4)^dVrA}|MN1g`L@C9(pVXthXyYXWSo!CZitJTE8qYOgU5aRj*6Morp>5f= zRS>qwU!VVf5$%|Le;2%2z3wfa{yF`2ZuhT)>Wftq!=9z2-dW>5-%`R8&VlFoK!=xC z9t?l#fXYAb@RY@0@Cb(vXmRMUqwKjrDkqXK40E@%w5+vV8FAYeV+u0f3W<^S0Brq zaMy!SsN)VD2Y&Z%}_cjqRLp zztdlau5$|GO~$UCFYF)n6!Y6mZfGY~pNda*bLw1h%p4>;Z&?m5v|Yq+nv9=v+j7sv zs~Gig@YA0TGC%!R$HoC{dfa%P>0Y`=-xXAuTNJ{65oHN^L*u_HSHM;SS``6dtBAS@ z>Dh0q^KKp2AX;UMa7;wqg!JsURs9Za>o&B?7GVuUenq}OSU0y}guFxZE3V-tZ5OTQ z;?{<8p=(d-sd^kdVP>B731B5;843TgqMYJo-6WP0Hh=j@H+>cPV;&t*KTF*(k_80W3sQPK$s#QVQ z1W_D>yPQU$IEPj#64It$aSyBXb+k&6aKGdN=4hqyNLUS#-y;=o6~&M+sp!^k4DozL zLhW7ye8q_DB{lIEbt$*essst!-@__r2}dCEhu#JoqsA5?-S`zN-mN_yMyrA#tc1v~ zxR23H3q#Ej)W z#pzaU_Bpglk#GhgzoKpaz#bQH3M|V3kt19!c|c5Kbj~Oe(xyLDo;zbkk&rh1ii@bg zhA9r=6^PVh>5Po$lhToOh{OnsG$04Ui3~HB4K@s$lm)5k+3~QWbXrp zNZ6GkviGPV685Kv>^*6Sgrg}Ud(Rpo;Z%yq-d7Ega5hC`Z`lwDx%Tv2v$ti4_DZz- z2R@5jMdy#uI*9*Cj4R-|)csi~Pw##D2<%5&c!aXVCnV|-3I~QjC_F+DLNo^Pcrkr@ zb=ZCNd*-&N8khAJbEPNDLKK%a7qOQ&L_*#zXrk?5;xFs0H_)n0LD=#>J)~YF5%xml zw>6KOkFTRuwg@kkyf5MCi$;-f=?yA|K1KJ1j9muxvxZmQZ;7;7zRxM|b?7R!{T!>6 zBU}(smT(gye*r81inehRT2(;8Dv11w?eEu$U1*ge;jj_y0ahVo#hL`XWJGq-wEdzO z3JI4Wih~Lx_Fgtb!p#(sy&o7NAw$#_*?WgX7ZNr=q>1d^Ylwu+DI$BVhDbP=BC>bE z5D7<8ME1rEk&wmJF|xO4h=e;Si|lb_dCpVXB2_Kl#tG*E7g=}AtBwA zwl!cB36qL$HSFqm9vY4QRb8+-v}$J&wk4K+E@F?HN)c`I6UA-SrEJ-XWB2PIme4BO zgewsFD>L-hwBk9mN|A6FBEKR>$BZK3QQD29Y|9xH|sd!H~wLORz(_MS3C!el6JRp@~kdR7%F^z1oQHahh( zIQsLtRaOWy5cw<70>%5#Dn-Ipi2RCO80|KSggtLiG4v_Am7>{4jYq=%k{(^f(5L8n zyn@nI|AJJNuofbJaYmu|l$j2~v69ol(Q%_lICCJy=R`3iOe(rLHgxISdeEu`K-dqF zKgXR9XvJEiNJyK0#SthziB@?e9EHfQ$k8#QNH~2U#YhxG!la^GoF2^buq=S=Jm8`c z*@t;AhWgM}s<(9Af2{JV`T{#h`V%96tuR8#(-=7sl>aU++J%oQlz%tbJE@fz%cX=l z?TC_ZAIzLq+5!3XH=@*ln%;}{K!Mv88~R1Pmgdl^B|*3Vk$*|FV6@*T64It$vHgSE z;|I_xkAy=I`4u-Xx@{B*8BA%#n>1+vw3g0Qq=b50jy z7_BM>;XXwEoc7`Is)U*&3?9%n{fa9XT|=up5_X(Eh+<_{vs8|Rbr8iK!-&2643V%k zMPx5)h=hG9B74JzNVuFLviApuNVu0GvR8?e<75Cci7JE~$L=;l&h@z3&<#;aZBw-m8X47$jm=s}8-xXw^Ceu2sa?|+up*Odc`a^!tIjFtskSq zXyYwMJSMVJ5%HwR?v9A3MRrd_%z)ybgR%EU8&c^sSrW1U{w%5Zj3|bLlZo<#5qndH zNSO5CPHq+ogGP~%p41nT*aS_B9S~YEis}T7UT6{<=HXB94iz3Pr(v9C%%P(nL z_n}om5Vk_(SLEpXjUr*k8&nK^if)x@HfuZ*_LlTW#fL;OBupy09yvN7iaEmJk{+pe zP837Jq@wGQqa&i2Bb+Mfk&2_D7!oEGU5}X_y#N}}7M{yB{tlnZQQU~(!gDzp_B@x{ zd{En~#v)YqzNKZfjwwPJ`?DH7%(@+)ql-dkoW2)9d41U8eV;Rb?U^5>b|L3L<~yI3Y7;t_WvK&Q<+K zbP(@GtAZeGfynRCRSbQKZsln9{l+6E>^Xa*cZ>koDBQLPyC>$dRGF5shR3pY)D za??a{HHHf}O)~7cX=()V8MG=m!bym9aO|xbB4OQM*YRm0d+&oZJ}Cj)Q$+SA4Uup< zMP%=JLnNF}5!rje5D6DkME2GUk#IdlWG^stXK#MDf}yX1>O~$Zw;>e_30bqag6csX zLTHibLPFL|6WJRvM8b(g8ezm#G(yA&aYt?6JOzNXX)9B6}|x*Muyt zCbG9}h=hBoWY{xv;=F-v9wojkrFI^8UBS>U+IVvjSHPdOxhSs0@HIDA3pQ|wR&52s zNr>Xy-FFJ)G1`kZ4vu&bGAlTWhcJB2;6^^CckKdN6&&F*ME>A*uoqr4dxCJc)k&K9;9N{=b{<2VUNEAcD zq@tVMAQZ?}XBJ^;#et9ONu5QjCY7-E6Ul3zeQoIcU-ak)&?-g3E{Oa&a`bVdNI3Nd z6+@q*Tb!29>QD#Js!$0BA@Ya1JE#?ZfL19I?m^^NY(?oh(JDp4o|08vgV}ZCk&wao zJyLO76hp$KqFbB_RG`@uhmdvidz^u%uZqVU;VeXc#W9SI8%09eEUoyQD29YdMK{OA z&**vFL#w8Pkm>t94nkqxC=$}9U$FrSeMXUxHvNiQBRbStqew`be#I#$uA@~s64It$ zu?q?lMv;&<{fZ4($@iH>PRR9tP{q)v=*}Zgq<0vPgbc>-ar1(%YPHFckm>ss`=L0E zR#ladHvNiw=e5TMqew`be#J2;E}~T)32D=>*mX{Od;qOdB+NqOSM0~=AlmpFT8I}! z=KgSN<)^j7UbO0M@%?~|#q&=2W>7vLTH!e0MI%}OTr#3%z*V$2s_#IVEW5Yxh8oIV zGW1=*eIu$tGIeN^7AUL7n7V)xwt483wHrENr-x3Nsf%-8Ux)ebH1kf#CE=gG$tUzQ ztfP%LJ|J!S755(3im#(piiG?6n#qVP}fSUY8*f_N0jH^%^4KK#FM3&I-yD7)3(nt*h{7F*&Br zRxJ<0VdPtMd62kZ3PZS@swjJx4UupyMPzT=5DE8EMD{A>unY-nAkuTfUd9j!>r+Jb zS`3k}D@C-I$0!10>S~h^GH)HqpT*>uI$O0o2zyYKqRWHCXG}#2Cregz5Tj(PiV~Jq z+QkI^8^4l{R4?M1GHRzoHeNN2?SG=OOYdRy?g08__C7!d8gzMbhkch`8|8 z*zEQ|tlhBp31gOUFhykVDMKV2OA*<7)({D&QbhJ<4UupGqBx_?LlL{nB0e9B+1*H) zWpCS_;1?K|BPR$4|?% z+D`{sMacv98j*cEZC%t_<$qJRDtW?5i2TLQW3&&g`YQLIwfy>`VRP_WF6-=?X}swghR2k?V?-N(n?^*q1yN=20(5bbF@cgwc6|i_N^>EzX9h` zK2*#~t@u6w#hG_;Bv!(JX^Y6oU=l-2wk&XbyA;RwBCITlqmb~jh#cQDIOZfbp8qpZwxDm|*E*jA~;8i24 zz>$?ftIQ7po--nQMKHlpi8CZ*R&iy*h&_{INXT3@kv)@nNXQCkB73GDAtCFciR?Wk z$%cfimL{?{X^4cZp(e6-$q)%ySxsbb*ANL=Z%t&cQA!;Wauzg^Ju@dE;TUu^(VnRd zYemJ^1QvErX3x2dcTDJ2mqn|V1>p#;1+hQ(fh83uMKL6thDZm>-kc#4?xl$A)xfWM z%|%$72qlcz>o7#Z;S`ZQW}+RkVTrDr0dE=+L#q^z-3+46h+KEhAJKSsFeR7Z z9N`Q^{&G|CIZ+G=lZx&QWe2W%lW5fh6JCVK?~#gM5yg-&spxuaLEYMILfZ5z?%-uZjZq||O~2v_6xYm45klJZEAoZPqERHIO}`>H@g+G3a)d96C{MVQ z*z&oEy>%hx2)`$yJR$E#S6gQO67fKkpp@hCr z)E8XCAN{KpN|+4Aozq4r(yUS>q|G?lAHf6t51J|w&X=qb6`vKwkT9v}<}?fivQ2)J@J?$+)9PY-YbSkxSb-hchwLH1FU@imSHHHq8Jj=xt@Hfh#|fu?gS$CPxCD_uh^DV< zg?rH|TZGLJ`4xG7jo=(piiA_Cqm8{;LnK^F5$*G%1EVynzEp&^rp1=?JtKn{8b*7) z`aEi7>m3oTOp0ob)-G98I}n;&1n-t$IJoE7NN{&u! z(2rWx`(hQDq&1N13gq&AA!*B&mK|1RR!`mIXw?i54nd@+j=kp%k#IgmWN*zVuQ-6wNux+Ol~QDH#t;eTQ$#zbX^fJsLbE9}uwZNxvLgQIsrb4mhJ^cxpu&i~ zKnfcYCOx=wz6CQhtFB;n^n?GquKg5Rl_23PME>Y^5X@^5RE}`B0Ll2Agzu|z29jU?zrhDex< z*_{fGE{I}|a3|rxeLC8Jxob9aNXY5+PZ$-OL@^{xD!QREo~tHQLfZ6ubQMFNqU$lc zq}SGEv}$b;u0iDYxb~t}>@bRiwCPvug5qVgu}47K^eav+Xpdh-s}uQbH5!p+fHZL1@gxe+EQSl{F3<;Bp?p$y*_$?i;N|3MtB7cHZJSvJIVJ4xd zzDpFncNijJ(t{h?!avj@Eu&ST5w1ey4~>f75yg-&spxv-=!Pif2)9dmq~a^07!oEG zU5`gE=^Qg?RgQ%95czYY;z>~q36qMhM;`mjaz)4yR{VV(jNjw%|Di{x(H4I8dKFK3 zGZDoz7%uz_ybP=FMj1kFrqEjY6i;K=(m&+9Z-Z&hpaSvVt%w(-Dp|rMh~5&Ee;Ywh zmYs?}y7%eej(62X9B)Sa>Pp!Km^UKAUWmNbn(HEt&l%M)J*=T4k#PkmrLE*%z7oH?-Ca+OnXR@T(%q zXK^JNl`D#4sPhGFs0Xb&ya;z7@*gF<0@nOCYmg&shDa;2*J6lvHb*f;1M#9K&WM^5 zdl!a!(8g-Sy&^jm5%-Dg?ufWwWcNhG10rjRhzCXXQxWly$letZkBaPGXC-lL793S; z!ph&#Rn#S8?nXNZK2DI$BVhDex9&b@PJfdbj;bvZ z7wG+H)tVt35K)$J5+Z+vTmO-^HGo#xA{>NBE3!9ch=j8#B74spBH?_BXs;56(j|%^ zA#LiZVQUM8c#8 zH=z|Mkgb*wVQEEI1ZuA7RXPi1u zy!H?{J*mtI=|6RNkzAc9R02+<_OnH zdZglIQ49%_imu0*6}WzmGtN;hCW5t2djd&k2&(}P0+K>EmiJdSDk>6i6MmvmRCm~?yWepkEML#rr+_21P) z+8ul2kSZeKY>LRjqtu2&Lx#4ZCZ<%Qz>!~rQ?LV38Dl^&sd#HNg6pUlbD z$r4_H=sNWlkb93s?4I}+dJ^9hl)wLz^41acXaMp_w4Mi9v#{7Fln3p2_CU!C#hL$o zP9r}97#bAHhl){Hq4MAc z_vgsDSGQyv=Lpx=lBbbvJ&VyiTF*&0jGe~W>Q+GPcd<(<-XbbO8Qa?(`e(-xb zjw3<&ZOPI_84T2-r6T+F#S|Mb&}1pH-&{=5EMifKBNr>W$ zfcm;}^tKI=up;3hjM%G$RJ|S~tWFWxd!Hc^=2JxW9yLV5{uGhDbB0JboFcOKB|{{f zND1ljZoPz7m5gv`Ll3D-Ea4PH{^IZ^zs20_6Sk&a71%*^ z{NLKs5Ly)k;XFisk5qhC6hp$KqFcN{D3GlxLwGR7QSsPqXF~%o2_;9k50TD>y{m>u z82qc$w5w$KH#E zNVt_EvbSf5gf-Z~{++^5CPXnLr1MxYjM%$mh=g>miR|qfB4IKVcO}e0VIJ*`!BE*` zS!?0zk||pdqi5}@u+`%~+Ea~1D+{`}VPOaDq2NB}R+M8bp=V8!!qhxRD6?%hM<`)O zYEIaD)DQ{#Q$+TjG(^JD6p_7gLnNF^5!stDL_%Hx{Og9vy)Iq0lReX9od?jmTbrSqxFT@a7bDIH76< z5;EZeZve{lQ+R&}JDg;tOvoa5-$%m1aS7HrQ%PavJnPra&$A2sYva$5;!bdABo4Qx zOt&gW!g>*93EwNC9AO(ox)SX53NcIgF%jhm2U5Cr)i!qZrM~jN@^&jnxb_2zvV>K8 z$r}Uqg8weWYnu;gemY@G9sKBh4Xs)!gfy?W+qFI9eID{24|$)5ymLTess6Jfv#Ny%1iN(Va zWs~;U!eJ+)1#lM8-l{SxAHd^|>rd<}i!Bicmx`0z-#(c5Z+a=rqm7@66E8zn7JQWO zvd~UN#7(m7KFS3)DvRQycA-i+ToH%eR{-~nD1e^~+9SbdgZuCLxjWTYGu?BSdIx62 zfjSUw4Mx-(0gtIiXyrY4D42;DVuys--3vH`_DFC(DDR`jiArZWw*OccEqhhBhk|<| z;tm`gz8@*y{CAqagH|0Yg!SLkL;j<)0;APv<5?oE5!tDTI3u#VBVu}pgS98+G6Gsd zTlm`u@VdxOMZ_B-yE`Igaz6V#|5j(Wg;pg_I0IAu#5bT&1(v$h5q3ayL-3gTWZ@IR z@e>txS{E(1KOVnfthTPQ_O9|>Oz-i+bJpg%8-pXqB0HwHsaxD!DTQk}ywmIOU3aQg zd3RlTYgjQ7TR3j}z02>{(TkOn|CsNrl=&I>@}Mtf?+O)<|oE z#kU4u7%D-xGqJth>GkHUE!*pzUayW?G4GR7$Fqd2l=_@9Ayd3XIXhMNq*;4E>%NgZ z4~x5E*(o&5W@Ik9>j3FV9Vm9l)T$P(vo(OVM#T9whMYB&`8RqEwW3vPh;ZD9E(2~G zQQga0u^FvW>;oJ&qB+19jA$M36(h29U9&y1zcoLVak5ea28Av%?TbW}k5s$m}pElI;n~{E;s0AlmpwhIk$_ zbtRcW<=15foQq2hhB9cAx9*hH*<+qt_eOBq(B7hMF7K{8A2ik7aXxrg{J%RQjtzkG zE_M4Uf6G)i3Z|p95vx8-O(S4>+14vbSJ}gexf`d#i>>_!>ml1y79pdRfHoZc3lMqkpL5R1p#01`+hx zt$|o)#9oKdCmc%=*{gp|91#vfq%E@dO+zHSoFcNfW{89V9(rht?3F{RawM!w6RqQc z%VkJbK}g625_~Uo%A|aQBCbGwsp@@XZMdCi?tw*fA67w0`gSun2R#vctOqbEdmy2OM z>7i`J9`jr->cL^*Z&5GK?yfr*UoOtYmy2`ia$)bj5ZHG${Wf?+gkr%bmrr0b|=}53bShs`eG%Gud%)tQ8#fcr!TautqRC zg;x3gm2|WmnE^w+;VsQLAGmLbq}d%P`2ytF9yoD;?t?py26Bk|(pdeESV{jcd+#5f z=XKuqy%Zn`mSBsqkr<)T7_vYKiP;#W5DTr43Q5qKt=SljnHYK>kVGh^Mrx))YbJ(m zNJMO;W@4shYBXkRq%T^tGdE)k*KiA3W0%>QtGSt*u?d^mnwz%9ZU?nJa|tpx zESvnwFgseYN;lZ-9hITcj`0hEHQn9o7)SE={PlLh4yLjv10pQQZCMfcw2yjdQSe+) z#fJ>fTQBQbtmO(^lgj0a)N$PvXNJH&shlBF5e$JRnhcRnO8YuH_wVlO7}_yYd(D@2 zJla6Np!ps4n6iA5{-N?o`fTkjRoi9RT-9jV-4Go5=RRTJUa4HdNVCBZIM-x|bT$|Q zmzxaNBz5|;Y8}`ul?#ouHy8rUFzqYt zsP>eKDRq=dfhG60=4(o=)Wx~&ReUyr-I~PiO%;2}+`ybvamyMzY|q%!$AKShu!>Vk zC(MxSwPc2_?pNx86BjVA0#0hQCo#aYQauuFPv5L_ifbI;WvLQQ9Jf=>yF*-HuT-zE zwTveHCB!@eoM_ zx4U;B?#nXLyZ3*$>+e=slxJJxF1kj=`$J=aN2GFVigYv>0;ih{<8>L*EN(3?;ABf8 zZfjw$1Gh_+-|H)KdrhM)@O8mX?<@KEY09d@B5Zj;$^nk@8Ia$I4_627ZAu+!JQxCx zHW?yK2SeaOlOfWXUR}MJPT%1xI((}MUdPb`2{VtW6yAp+KR@Wn~> z>H;ySkuTOE4@+;~$UEa(SbmUUza}OkBJ$)`#5jYaomygzc2->y?0l`8%C}`zR%;r| zS6<+C>B@3GTHI}OYJ|*32Yagt&ZD=?5G*B;S`jMt-+ajkmaUst~eQ_&(yv0^u z=eluSqZJ37f5c6>t{|O|)(m4`Oq~xVz!Tf6zL3sKYrcRiTz)Bt@RE;E06QuX?C)Gl z`k0SU00~}3u%A$t!PkQ!@S0T45b2x25ZI+n<_wYE>bG72+|^`=^kgsuR=bdHZgQq) z+wDp_WWN(SwDZv?cRqHXeS4i5l74-8E+5)a{^xCy)l*?`%dbrjrq9gJs`d2U&f~y4 znsR-(>m?vb+G!qv^zz?SXDN%}ED>W7kq~8sO zz-ol_AXxl<*TprB)S_Yc+Mvb@q{N9z$!6Kn2f&YiFM#bsqzsau6SYrtP<0Rb8mEu zvZB!z1vt>%YBeuvt-qwvh`>uNw*j*+1tM_$RT7IFF|Dz?#}#r+qooR5_o{K=9jWq- zzOJTxQ=|C;ZnW$dv)w=Fk})E1SgL$Pi2a^e0IS5b>~;~hdt&mM6bDDWNga4fs(exq zXFah1R*7j+<02gK#3ZScJ6wkrHCm^D7v9urOG3Qti3M;&s~2O< zzec-40tcH6k&XmI;9Qd-(n2roePG*Y8TQDbJ*_Jb}Vmx!AGRqy!jpZhdp!U zDX*u2dP>uqH@|*5^ZJMkZu#WuKn}M2zPTX+*0#3sS-1U3x5n?*XePiluNnv5mMS0a z%pT|KC5`3_NSHjazt<55HI_{T4|(1026))(_B6mFUYCA7XX%HX{|$|$|Mnkox*Hlx z-L(axE#Ey6ydyjs%OL9i%g4|)V zA)6t8z8K#xI2BY|wc%+++iI6S^>|}kCM34qy&>$rt@idGG7Hi?uT)ZteaeK)Qj0jj z!6>Rdfg#Ktg)vp^H}jZvByn^AN3=EbL4@myL4eFjpMIQFfbxS8EHDvD9Z}d`xerkE zDBMwB+Qgh%w%`{r`F22@!Bz*4Em53U3)48?7N+r{O{o>M#J=P};DJyX0jMzZrMlG7 z0UXg@+x_(_qY=|09moDKEAIy9FnM zYEf`GsA5OMa&%OqIl}ktpo&?TEXd@KxDU*@gR||os%PD|WNwOjmCv-s{#x5#t8%vR zV_$@eE4q7TT*9tLT?gN$(GE4>fK>T2@{PwFv8#`Ts{?zaazv!zVA#FWao(gcbA03e zdCw|<(-rsjvsscF!4SCAWQg?nUn(uoQkA{3 z-{_O{#$X7fXU-5Qbg%&SGvO@>I%1w-JGCPSpDU zKvHnK5a~<75J)g*h;$sbbc4HEN%4*zU%d@L=UN*O2gHMHl-zEnZDFmDgAM zq?%8sVlQzjvoy>u}gTYqKl&~{ZVIs zQ={D}^~iicW9D@L(Y~wKuUqXKyIJm*<35e)tCb3*O)iPE87&Z{w1@W1$5n`t&7QiYoP4$!rmpw80k#|g%w>Fv7)Vw!I-i|mk)^r@79s+vT)RugY`WzT4|eq9y3r7`z3?nY!|-`*fmd;I*&=I@2}sBLui zetV$yRQiS5OT#XMz8`1B>cCmA8V8<{D&Nxfr=5=nHQFKqJEY1J*&7%9wy6U<|G4v+ zCk`w7QH>T6I3ZP@NIqR5RbX$+R3X0E6ANIKm@f5x6*8~UmU@ZWyszX#ps>b0D>;}c zblUfz0G_J!AkFBgW>0#nhic==8zxxc)86R=24ZDNkn}2Zn(T8hu z_Ek>#rP!@465__xX@%6mqE^J{(vfg zWa(BGsn16!fMn?mk%odHkSv`c(urUQtmd5Vz6;9rqDE~2#9LmyxdlkPOJTOy88^j( zo!J6=@S;?13m{z&hQN-N=YAr5(Gv?GK3#i}z8wsK)d*>O*F?bD zIst4=WcC?J8!4SC7WEgjeoCiFy0FG3MMT4A=N&84`_uDsrPN1i6ch86I zmrhP-f=X=HlKyIN4kTf>k&)JdA+VZ$dZ@%%b<~tpa+@Aoc2@IGtckk+r~Fa^&r9W& zGVUkD=RL6iR*7jP{UQu{VzPZxljPtdM$f3v8#pYL%NuEbFa*vw86tf)7y{2W86uqz zhQJF=hDd9{FzzB{^m&s4NaAkeAUz)pfh6t>k;vV4Cy>OQA<}a22qbZ5h!o05R^x`& zvM2ZgKH*gdPYaUImZ{xS#Cqz!P9$nA3#vC#_sI^V)}Q*5etQ9zrEo&_=TXlAox;HtqXo5sICjX`A_@p*em$fpxPxk7*z2>kb20o0Ftj;L8K+0 zL;<7n0U0=T_$tQ8F;;@SZp zXS*WLL^2Z~VO+~%;>~xuz1+9Y?`hzuRQWQeMSQ zo-nVgo7;WFXL|&Pf-3Gz_n7O*(;BTn;DlF=15ZkoubEaZgf0UY{;UhrnmF!>1+Yp? zYd$N&QMtG0;=oTzwfSM6TF(>7-RP>gqn?}mL_)WwX1z)B7lij|>ZCVGt~S>+byH*c zrVP0D)2=U@pN;DOM|^bzb-SiFKO5zzGoOu`kl~z0TSnlbRIc?%jbI2|YBG#B%2CbY zAit9M7-IU>?nFa*vw86uqyhQNzWhDd9{5XdHPopY}z7QoR;grb4;o?r-^ zZ!$#sYA^)eX);9W^oLpjtmd3<{57oxiI#Uq@=TUxvG$jbrM(zZ`9lXC@V@G}U-GKt z1$?`vI=soDcyD!Ss^6O=US|HB+fYjyZG!_ZNR?mR6}9&BzQuLmYRj`3v)>Lx;H@Si z(wjqSz}}Xr5#gGTPyq4i77?k_M<{^R21b#rO@;SBrr~%c^220>an=Rui$l$VP)`4qMxrQQL4TivLO@>=V_=+bMKzzDB zA$>g<0;>_yKCO#DKDH_1Brw5Y=7un)WW2ae#D>Gi-2rh(qY;5?Qss%4Uv$K8YBVAc zpLt@O!Cj~NABdYB_;;nN$F%UD3L5};)~m*WY?plYXO6nf^hJ%fCx92Fazvz;f+29d z$uQn5X@nvdp=hKLid=;BKps@l@A1Xgfk(Y+97y-_{pc)QKl(LVKY+WWYEA6(!~$3) zrrFP{drP6QKw6iN2yxL93t*L)MqGWt)%bOdRwHnG=ogUg=99Sgyz_NSqxk}MPrIqs z#5P&ksTEiyrr9t4taJNqjTRAjOR9WCh*vzZ0N$(+iv|*IGiUwv_qZe;8+W560qm2? zC4uz*Uk|EjMoSIY8&&|wdgU8Ar(OPOe*n~h92>2Pr#!I$R*7l$ zXS8I$@0YF)WIN;|LOkn<1+Yp?BTlPNpA7v1u6WfrknZM_IHlkXpF|zFB$Xo~eI^(J zDWr9TMNce%_$-O`C!A$~TRT>P)d*=nhE(*seerc5t;(ksZ*|*vsVaGme9yk_mY6({ zb^VD`i{(uA-{XiIA9e@o!=cf@0k0YdvMl)|&g+D=7EWA1&N!`!tDaZ@tHgAhj4J#0 zX|#R;&w152kXrLe?0?pE;;2UR1)P@35s{7sL*Pu4VZ53|nDoQ~SS6-qp8b$Z?aLZ1 zH6R_x*EFC=dws+@a9>lZNMpeeNYUTc=NJv~>bfZa(5o-P7Fhw>fnn<+di?_QV2MC8nvK zopGstMWdw(?DN@=11T(@#KZyTYf7W}0xn9GC-y1$J3!yP?v zSgO{BSM_@!~$3)rV)?na{38>-K_(;=;tFsJmHB2 zuu4oLUKw{wdtIX~Es#B%j|lOaCl@g6_KCl)zr8TtuY)UhUhSMsw4(-iPAW%4S_y_g zTGKkhSx+p0_;me1Iv)&y)d*=nW`4!(j!$c}8i2GapW3ocl9&C-vJPC6$`O&)gCUR; zZtDmaJh1>)iD^wEs-*}u0Vy{harKv7Grq3TngQ(bzQ%!s$@}Wi@%k=*+}42{(yfW3 zo>%~@#I)=#5q4>O*xq@vzgahD-|>8+fs!2FSZf>82M{)YhR_?v$8NX0^=aH`USD&) z?=>4c_v|=cd;8-^J9h7Qbk=@z+y11%qfhlUFeh#++VMccoHTzXN|VUV$-n*aX4zSl z8CCQ?wYb8;_qbJmzeZbiAon2om4bNG6ANIKn6A`_2>Ud?W^<)RcD(C}2CDsj>IGZG z%_&qQ_x(|CWEPi4uu*yJvS3fzvRQjxsJ(r2y$1Ul%%}+O7&XXGZQ9vgTIrD7 z&x90!)!ft8UO479#y2$DVgkE<*-hEU$$)I5d>^*|MMvnp#8py=Uy!A4C%&q4kjg}p7(W}OR?4*3c z=k%$XtNsHwb>K$J58SN%oJ-=3p+!I{&PRl}AqQ3^XH_OY}L7)-fQfo6jHOq9+!>GhTHNh|kPZ zql5$QA4g>knkNY?0Kvov#IrcA@~Dk*Xx7O`TTLKIvDZ4rHP75h0%P!~$3) zrV&R~Ik1hkrw~Tn8 zf%IKp<^fq(qMmU&6II1l^<9B}@IA7WQ=@)bMYj!daf%tSw z7wP&`yMrrFJSIY)tnA3zD>xQZ@gg2Q=zN~iXeVG` zO%JH^;W(u(ht&si1DhxEaCOE%psfQJT0R11b}0~nd=4-l5#m=pu>jtvL@XLexXavX zUJ?NZ8Iz&HwRB7)f5sDezx4KJJjeaba{0n&S`#x75qWki;({hlM?~bMt%&h%=$vq= zzgeU024JsLuEj_L!4P<&$?%mU6uAiYK{>e@^AQT*OeI3mK$;JRz-lV#A)1Mh@f8;U z>jOUA0a%2~{ANEaO5nZ?c|zXaWcT=k_G46!R3BB@-gvZpNlYBd!%3VXc`W%9>%cQo zxm85^Y%m0#Z8F>{!lEY@Kzx=FiUtyH?Qj8BBczLSTAoSVc4C|aCPdC0io{s;dDelK zTNViM%br*OtHd<#^CDnvNdfPUNPbo@uu4p?-^^a~sn&tln`%V*RxkwKXfli&O@wt% zEPz#F+KekA5IJ`VSvzF7IFIiF2}zeUvC#2Zg~R)@i9*c9!9@&^pW!V?Q%m6+DFR|LXj&g+=q z(5eBp_I+{6-Mw7VXug5{?{ic6Y9Q|VMQ3FZfn!p+Mk6f*L*RubL!@s7L*R`jL!@s9 zLtr)Mw2>Vmkdoc*Z~qG}{ZWmknh?ZS=H>R@#L=@j+UFfTn>tFq{7#Hv_1fAG9M!9! zeET6zdSU@QT3NTEf%LIp2t3hbi1hVf2)xl`=q3L$t!NkQujE`bklq#yfz{&Db-L>a z@renyV?JUXI9*At-avZ4v~RF`$cO&*%l6j#o}KnS?aoK-P3*=oP0lw_w~C1?I}m_4 za0dd?N9E28fz=3UJ0Q-8_>d*Ld*^QZ>)q*FK5=%Lb47kbb=dpGyY1&(Qnr?JJ$MElW8t@`Pp{sOw4sHjJ2`+T1$1$&KGL7e7S62S7zH{o+sCn{-Jgqc%tcP zIMT<1A@F3AVVoclj(B1L#HXti3Afe~U^POzS@y{@iDxzdCPX&hK*HwRP2{sa`#SJq zQ`tz@f+3K1ar3*72;cR@0$3%cWoIJBy~hNHRyMG;Z{8%H_U|9pfeS6)c!qe~6ANIK zm{v0(0@ju)ur-m{WgoE)ywsE`($!!H0`kVc%sQLPK^jto>&0!>5dsB+*%F5YJ{{u`{bF#a|f%kDn_h9qef(T#o!~%#&L2wv33|^PX4$tHd-Svo}1k4rC4THA1}Oi3PAqOe3y~fVFK9V6C!_ zTNBC8mIGKNrjL>0&1J+`m9O#U3AX{>^y_XkBCtoQJn^E4f1uHbKz!zjQzEPcA`qW> z;;;zs4MZS5^F)rFOa8E`1N%Qh+2g=5sq((gf7B6vU!#=`T#+hIJU8!%8ybxWyd{+* zBJKJ$Qady(I2}|c1y2RllHl(L)n&o;pt>#i;9v3X`vnJrYE*DKsLl(1KB#UA-VUle zf^8r3?&FO}CqjV*kV4B&6b+p;BHbH#miK`-hU1PZ%g80l6 zPs{4_fe6HBo_I`zPX!_npLyb#2=5O>AU^ZNT_U_I5P|s26FWqBYajygnI~TV>uxz7 z3`8J4^TZ1xenX=z2N0im;%O1S5Qsp0=84Bd_*5VQ@tG%%iSYhF1mZJK>=)r(fe6HB zp4cwJ6M+cCXP$U%K}Sa*wh7`hPaGC;R--Kk@Pb#30|}G&HTQ9s#958z3wY|Jo3ghO zfET24zK{lf(;LRuL)^c~`znC2OJ79;>1)9d*f00a5Ge#r?s*7$(bqHqB)I(z#w)sK zK}7~-n298x3L%%*L?h0tLfEP)mwkQ*fFxt=+b!}tkjoE3F24i0{2*+V-@4E5Ah43( zziN@+!CZb2a`_$1SIajD!Pj8p_eAkA@xNoq-iA{U`(q!Ef-g!BQ& z*xztxmG^73GZS#ZtHyyVQsuMl)$D*L)`7!!MeO&)0$3%c*)zM(6YD?<%clx))DsI} zm6%5CU2^?8qS5*VoR%sdajoHqU4aP1XP!7C;$@8%5s1$`vH#O9;#)Nu5x7gLJdxR< zKm_hvbUs@X-|vY9@K_~c(Lg#L41se^hDaX|hQO0ehDe_chQPB;hDcuyhQP~BhDhHC zhQRAhhDaO15O}M}5a|tSqCJHKc2)XnpGA`N)?f(S)nthD&R__vu2i~>uWR4m_WQpM zyd#xcVx*40=@#BL5wJ_D{9fQxu@)i#37#h&`yCf)PNPKxUi(|Eb|1vAd13+FkgAMm zpE{HD?O+JJ-DKz`#kB=%7woB|V!v=GsXrJ3N160k&v(PW6U7z}~u zn+%aI1w&x9ujyVnrJh^}?OGG0zt$Ka&HWFpuGQ$TwFlU`)y&@TYg7l0>Gbao8l?T< zq5$N2kw3aNS^wMai0uA5{`3IslPaIbWnBip5-x|pwU*b> zUPT<$XaxZGN#!CU?GJ{)$tJ_NrZLT8Z4qJ<983q_Ksu5y8{)ht7Qm%SQudpdl2(Et zaIMJ@iMY1c;%x8QS4^Dvj9b-H8m$w+b5iBYysWkVO4t^_wU*oBx@I>55!l``BE*}X zSOBZU^z63ucU_HFHCm0p4XN@qj%#)y5P|s26T3v%7l=T7=7}fHxKux`(NYDTlqyfW zq}Hv6bp*DzB;xi{AtLbft0WdVV!9mctJRPykSg*uUj5HpbB2D`jn*9CS+5!gu1V#5 zA#DW1_)u8;oOAnz? z|B^;a4A?GOKCx>e+|*bm2EOHWyBpx!Ubm+KCc=HSG_m>5y2P$%w8VfH&bq05VwXhd zmX$qH03MU-{@SnBex>%7c#%#;AxG>pf4lo0+t$(B*U|fU+uR2_=Ss?3Hh*7fX!CnP zr9pQ3(Z{ygkMP79|77_l*(2L3Q=tA3$mXo_5e@l|{Xqoe4 ztz5p+eCajLy7xbFYdEaYmKVs%=a+X-gb!;RseSO37O6DIcElFxPxd9L#Sw;UAIw+3 zr>|ppN2|G9;m4GBuiw|n`;|;hY;D3J(50iw+6Nq#%C!$^Di{J!G#MhD3WmU?CPSpN z!4SyFB)@WL&P6U~`<#G0Kkp+HK(Z_&6b+<>U+4=b)4aHGi(>D$2&c&o_}>E&Putm)FP1(EcyM(ZQ6 zv&j(YjlmGu-DHULSTF?kH5nqkEf@j^nhcSi35LLtCPSprU1)wIS_p=~r6xlpHl@AL0J0<9v5Lf|G(#Xe(itMLDa{bbj&z1dY)Uf(vLl@#5}VQt zf$T_Uh{UEeLm)fS86vSM%@D|rbcRT5N;3pj_op5AS~oVO83Ngn&La|=(hPy@NN0$| zrZht!JJJ~EHvn*kp*b91MXgO@>G}f+6s>RF$ma zE!M3j^k^*a&%nE++dM?3{2_vRK+~Ith@Z|JA{YJ(*VS)mw3Pzh@~UxQ_kY=H4VJVg zR>F1x5+=WR5U+Y-0lZb&XGH_)b}$4koDZqlpPQ9*U88LWU^SI=%inc`yK^_7`0omN z0OzFIQJbm#n0Fp`(eN8 z1#r7mtwLe*#y|(|x(hls1G4RDZi@9|XQeHpvYNdM&)A%}E6-T5Nm`X0AFk^wZU+wj zeK*>n1YD9Tzx{Xpz9YO%qY;4vQss#^HQT4iMg)#Xl_&OS7HcEM)!<+>_y$e|)wJO0 zpjsBB9W8u6?^y*9hh^SH1Lw8NzC{pMJ+S~@suWN(kk*4C@Me=C(#ydRSgWj-T{w{ZvKH-v-ArxnVI(TC zOHtg;H3cIjGXauMep8-Vbt`>Yqpbt*id6Z=4Quw9Km?AoBr^NXKm_i4mBb=POs~js zv#iEgm9H_j`a=+tC!3icyhy_(KV`A4mZ&{jqGjg};^PpW)%{TChaDUF+d&HM4j zl*ErUtK;Ni`L26&>%Vnj9}f8fDJ7rpRT00f(INuznI~Qp;cI~i#AlwkEW#H95s1$` zao0a~H7;s=(4Ndc^s@bu-ij3cUvdV1B5vn^3>P%oc8R%}9R%x`kNc6@AA5Xvh`Sn3 zv@4O2kQi}73+ln=LN9={Dc_4(5k47+Kz!zjM@0B=AOi83C+-#Dxj+QsGfzCLE&q9q zw!?rMQss%4HM<^&R|Fwuj*nf+?;RmeASL9(o%x4u_iSh^&kFy@sk$|0P84Tly{xg* z?vQuyD7WPYYj0_w{k&%FFL0dIi^7Hbf>|8rzS`T9ca6GK&s#%XKuXTnRa5M7jjt)+ z(AvzfF(uV(Iu-BK4w;N;yx;14YDWVR=jEZdd#6pru4Vs9Zntl`-SapprV(DR2vwUn zSn4H?d;7m}EBl7fO(2cVck`-<-_dA05Qxt_@q!3n3q&A3^Teh9%B8xh(aunp1g{3w zEy3GC71w-Lk-rc!0FqojgOehBHV}dM%oE3y%n_ed9XKVGBO<*o7y^$r8OAjoQ%WBX zsR7A4pIYoFb0*1L3i7_X6#SWx1aQo&#(|`q_cfq$_l8aY_ce6_>0QAPNZa!fIz)Iw zAOgFZBE&7?*7aNA9us(@XS^#U>d(IFk1WjJ=q(LWgK_@anCvrjUr`MH22s#mW zoS-#dzyTn^?OE(^>#B*0vdh{IB>7YbxxDNL+oQZHgst);^0wMRU^R(@NfKt53vR#V z9tAhUIOxQG=XTYCM%!J$C8^w2iisC>|No`%Iska70B@bUTiW%+6acg+f9Z@cY+~sdsFj}=yvAdpOTNy zd0z#P#NFYA^u=HZBynembUhdXN!%GCJ>vI30VHu}h%_7wfqN_U+8Zg7LcPf;U|m@e zyuJ2N?OJj#iWP~MkMR>?d3K7o=gL>yuDGMoIu4v#b5mta=|i_8|Gk@iuSO#Rr=-dg znLQSWz`4639{0ooSS6-4GW&5)tOHNBjF=LO95IcE+fRjvz|$=wroLK)nEv`(qxGAjbI48-eee`%BYA$?HmXs z%d$)MrFOX?Q8NURr87h#Q8NURr87h#Q8NTqb52)w{(o{SdP$?LEO1?_{L0qW9kETL z5rOSe<%yG;oe4zXVoM^kmje+<75Rt|Z+T(??5@;UG?4cBW)#4QCPSpjU?mYaPO-m7CBbIS_%XODq{SOD=^rkd6`{tZ{-vPMf4c=WoPvS&8H1*!67-~75Gd|RXW z0^X7;PrRjWcFL-}odtJE_uAU8)!I&7^BA+*i zu&p*REI1xiz~`iT*wWhkj#KWJ&eyKFe%;n+{Q{o;-`tez7t*4%W*Dc()Qw;Q9RFuk zUr3A6nlIpblOfWLUt6UjKgJG`$*@pT3L2);IaRrcaN}~Pvic)C! zR0<&FI71{Vvg-hla-1R3%fTa%a-1R3Q@*$YSS>C+0z2fn*GHHf5~Q4MwaGX;Q^i{V zNB!PWJ#|!19VL4SN87!lgFt-WSDUTje19+ll6YyB227p-V$NFGY5*_F`IgIeTL!F( zae*w!A98`nj>DvK#8k7ZH_}a2Cp!)Z;{vPM)f-405M~IhZlCmVQSblmj_xsyMg*>T z)j05~RAo!*4W#-1!}+i?J#a}XXBcm_Va<+dEKk_r8R;IVy=Z@ZyeD}u)`~kNu6@yT zRV0A zek(qil=}tT=fftCxmNy#Ti_cSZGnNq-*i)Mfssa}HA5iBM}8*|VZsv&;B+N|eGXL8 zYA^&|ZZh=J2FFy8V`oRnI=P|&jv%_*(O7zZw5o)jV42+JHZgxSvf%z z4J4XqC)apsFKKOtLt|(?oirAZHo6ud(MdA|`ZjL%%1a^Pe=nNKZr^g_(`ptdzsqlH zjk^6B9isK~LA4}!CaCE9t)OC)E&HW7#CCenUvCb@yQC%u{oc_*QfF(}dxIpk9IVLT zdQbsL>cR5QLcM%^hd-jmd};?dc4mW$0ys1*E(P2SRzPa|!(_%2T@ zfK_6;R<}iXB-9Ap-c%z}e=r2nr+iImgd!KgZjR)+&qpYL)d*<~r~e<fSS6-qlg|?&RbYS1 zR8wM+Bc>5?`(%g+9BdgeB^Ehi8WFe8gowbAmJw58kt3!N>G?jt9ChH4mg@-dIZrHr zRbm?PrV8o3#a^ug$EC{e9Ed}nSOBZUG~$dRu7s`vFEw=)>2fdx59}TL)fhdEhd8Ef9gX?uz(rPb`2{V%kMcB&S3yFG1iX={7%*G4NmW z1RM1kO>cf6!%t@}L8rd!`gld7^$~bos(c^kZ#&}0G#U|jLaIFRHnabq-;M2pNB@;m zwI=p^VgVeIsw5T-q?up{Tx>E#dN~*ZYn4=NWhA{(qur?hN1F_hsKgB8TR5gJd0%y4 zM^ndXWc`Y)(_e|`U+i8vEl>$8D zvp58tm+Ap~mVUgpqk;S}=^v@Jjq8%K&|VrWYvQ8D(m(jJboO{1xKS|!-wbBJPIa;L z2JZ6BJ_PKqn1Khq*#Y2DslKn)c97(^b-cV|cVC04xr!(7$>0gNR51fD2Q%OWsWJhX zx?J%DUYG6x`?K4}?T>CFU-1zR0dH*`AwJEu+5xk^^#_5cy=t7by;NB=Fbisrvw$}$ zW?&Z7%z)b~m4mx{g$IGVDrVrpU_@a39J!gjxGWRAWK3eO+jYw9*Jx)x;ILHr zGas`@0}(jiL_}H$hQKpThDa;H5V+Q4h_oIIfm{Jv=llUrEP!NL678q-Wbm0_2qa5q zi1fu^2qa5qi1hVf2(0FuUMR*yAW^%*0Lk*-xtz}_XNoQpOrLCFMZ>HzV3nA*O?TA`qW>;`k0nyrj`00yn(sS>SiPst&v@m2;0oKAB&UnH6Ex z`x?I>xE@qE8d72Qp527tTu=c|c-4VZf~#INeo=5esICfb1XXzs)@TI+2fyD<*}?*kO69f^Qs)nN!>!z}diMnocIm5VAU*Gc z7C_uP!&i2?i0 zqw&7lU}CfJgU;q*zxnIHF|Qg2j!WehE(%w>@&@PYrbgQYz+KAS5s?ObMRg#>-fe^; z7olhn;b|YC09GTUm-Hd^<6Ro92H;Vt@~JIo_x8P!U0eqaOXY}2Bf$`OuE`MTtHBW1 ztrcyZO3f1sAU;cC(Llnj-4z0>5z;QLN5wv9fAr_acMkS6;*vYcTfEJgxNJ{}iw~4I zJx_^~43v0Fo_f7ojTMb{5&~Y7>UFiYf8rlakL+lmzZNKW1bh9)9tS=qRqSO%`u%|d ze9sn?N$IBo1^E6gC=1e`4HV!PysEe$$nj}Si2Jml3fFwm1@Nm<-EZIUcxFd~UUUcl zKzbodTCguz0%?IPsr+cL1Xe2lnqMVLgUU|_3a}xSoKyX!UoNCFZ(e~5D~Iu%Y+z_U%KDWv6K2wZJ4j8kLwtAPl- z(nLhM9t?q8T=F##Va*c@AU@q`3h8Pv1Xd%Yr>V;#;MUG>KzzCgaq*Y`h+Fa65BZe` zc1o46sYAqvHQMC^*eO+>$ZU5Y0tfGk_=G1G!2SxcXdpcq41v`MX%~4xG8JBO0FSnO ztrBSnAeiRsPR&9}IPe(o{9;J`Jn8V3&cIV+bv(vY-P zCUD-X#(`IxxJZ4E6L%cASE}~f%<1C|q=g^$hH+)oa7(pV*MPUBa$Q53@Rb$7lTx+S zK4`x)qf|$H6$SZT3o0_3^d%Ih1($=W_Jqs3TcahnS8yVz&I(=#s+)q_`zgGb7hDXg z%YxT}YOD58z3mO)q^f?vE^+qebOV_!U?1!6-~4WG1I=mAa9@u?rezP7yR3ADVo41n z1Tqcv1Qg>tUA+*HX}2e!p#Kn%Sqx7=!RkOjW~n>@1#1TZnT7NO6s#-+WR}?zP_XV0 zkl6&DfP!5C0hul02`Jbz5RlnGo`8ZK1p%1@(G%kRHm)tg*0|q3cs{tZu}{YY%Ts>N z0(`_DFV9X3vRL*kU{Na8sbqrBdFJ62K~~LP!ME!eV!=u#xW^xA&-M$ld=_(`RIFUd z1W$VA;VD7Z(PA!3#S)fG@I}vjc1@54wV1c0Vl7K1xXT~khkFHCS&Ml>Di*b5f|oq= z*=0eN*kZ0p#p;$!@O95Td_!=TKMN<1igL?t_p9;l;G8<@PoxKc`@AZ->K%#pREO=U z%|ED__{WkHy44t`fXO*I&Acp_Q7R{WN=dz#aD6i`Kv?cF8HeAe6Wo4{wtlZ{lDu#^ zBKA4&B{4ansU>f6AP&^4V}@(56#?Y*>Mp~tL@f6W%mF!l&^}W%^AC=v-;bWuE}GTY zWq)CJ_oMEQu6CUGp_$rS9y^zQiI*GDv*F$pxcX*y&2SAzx+HDp_6uKoy{`fY+ubrC z1z*YD#MdtGYXUed)qS<&onYd8pMBhIv*ewR_3Y{Ukk#DD6hX@rCK^Z~h2-9DL~+jf ziVs~B46H-(8WL_=?AKdHoiE$J9kvK%LbeFZot4e^TS~?5zSxXua{YnG%pQhh*A(~1 zTBH!C9m|>JwNL-un^nq6mfP)%yD&^ml2-wDVe&mJB?;fx>kgZ9;l>%rJ$2?42&@ZY z+x_GXIS8y|i(-A!$4b({q*o^8IRzYO$#+qqVN%k-r+l=8c1`Ku)L4zS&(n^^OGGs2 znccVlQP=1Y_RXF)F1N(WIv?QKCCw)h^rlTGyi%WpfCSGmqUNFe_QPb z-q1K9+Y1`Y)UF6`XuRM4+W9j(8;CchZmV@1Z`_ekQ;PNi;bv{2-OS@er)6oz!E)Sk7$Jw%Uho$7Y)!uTNj<-_qIgjebwpf!$KMG>|w5GWn*yikvU| z%|dw&zLJwooPH);d+kFP{!-G{eA8~K%y0YaL>)-hdE$j1aa;PPM#}>@_}1#R7ipig zW(b^UGDLbV7y^$p8OALjm2dl03LwGD8j1$esE<$p3GNJ$h;Lg7SWP9}HMf<*E+1hW zNbt;pT^8#`C;)5nvkZVF_lHb14O%BC>+`)|s_p7aZ|G0Fnmv(8?p(<$&Q<^7qYhm3 zJ$x2;MymWq#@9vpD&v8>yt9Kng1a={SNpLBc+l(YNs;h~#>`6zylw;H;D)xQrM_t&Sx4E$_58N-^ zw%UOK!LguGaeFbxqX!YEL!5*QG0eZ|_&_ z_x6xCq<_$~y)W8dXhT7;&52o?m{prjX?(!G>{fb0UXXs1aNGzeSe4C*7i=PK3!&(~ z-MRs%wtx`JCKpfkCCNhVQD&Q0LE(O{+uZ<9dYwJ1 z7beDiwcUw-^1%NO+O_dyZO7AkUeq?A^Y#O8@gXMUwuLDsWRSZxi6dJ#<04EIFJ8>L zueQf07NYHW#X9W~2+>AW&;9nvAlv4Mc+0#on5ne#@rB zq@&;Ch|6zxXU}zwRwMA5RQZSlntd`5frBlH%sv;0z$14>9QVWmSS6-s zBXCHne2qO%IpUi&8WGqlRi4P~p+E#qzDi<|Bc?U3$?dHW5lH#@R3Wzc<`lpxF^zcr zUL$@FH~C#29sB>3TgO?AwvNCXQn}_J^}fRq%n&#rl`}*d3x;u71bxW|Er1)9phW}e zTfq=WK4s9NffRx!r(K2&QP)~0C;{DhmE)>xg3 z6NvrTAI*CC<-~*2z7n^*QpK@zSFe-G`GUsso7#dGHMZ4WJl;UK9_)ZOs&;W+^kiU! zjdKt(^ZRLywmiVjKS9XnfZbBLrAB(UH>?9!yy`h%%~xIr z4tv#ez`atr2uNeW@RbWFD4^XZ@hp&(-M&W}^zNSp64@Cdg*=kCrqf1FkVl8l<1moO zrTd8n65X>~4d6=P0^5DI6Tl&_It(Ob7Xc|0ki2tE0Vn-VH~=KS($@i>ZLd%501)@i zFkY$!5h%p=TAEjKT3P#(ZX3R&(OAHBsmgHa-F8YWa>VokloBU$#PlP1BR}O*{fc`2-E&?1?Y=?pjj7ve?~Pffbs;(9??URpb5iBoI;+`}fe6HB zo_Iur=|BYHGf&(r!gwG8@tG%H{o`(L-O^~=4!HekH|2;(J<^&Xu)oPL?&8`Xb8a>? z8WGs8pe_Q^_K*s&r^zsmzy*Ia6c3~?`QmXq<|7usla+`?18F%J0@s=hk!Wk?{YirM zdS4U3D?tUsQCUEGH0=^$zb6)xg0n%@BKr%nD&40?ISV`C*Sr9puB>^{Kw1fgz^hG$ zNE^X0UQL4T@+K3&>p=y?QNBMzB20Q>aa8a`P_@YZvaIs`>Cw$`ufIvI1G&*IiRtAf zuDSdUW2$>9(QT{!d~DWM`_2R9{GUsFZ>#-WY!}Pr1C>~pITFfG z9@$g3wx9U>?yZQP%x^`4@iOoz<@Yh8yjy2E4vl zJ#Ql2k=6`>{l8N+MA{{-83L!84CDH*DuuBH=kC7RXycSH(M#Qsyx^_W#lE^f?tGlp zxUKfwctkT*%%buQWpaOQbSCo$QgGfU=edPruHPq+e86!s%CU4qzTK+3t@c|hFVciH zwSH3>my=6k?@8B%-r(&*&fA3-<4#-GuJeRnRewz(wQ5z zi&6b$cWJ=Izv>*f)qcZX(@MCcaa-*#&=Zp0v?Fu!-BgnF*-uqGBAoNe+2f6kzu_!8 zRLmxQM8fH+l5%@KUGW(=e?{4n{kGasav`j#fCRUFclJdDGBGW5jy-c7YtH)g%>_W^_N!>RB0rM};{m2Z-*RRyAt7?&vkrV zFr+mOB$v%SgfQR}8&4A(j}yyozdofzHsw9iO{G!u?tdxvmAhWx;+)@YKO1ivOz3~< z22Al~24Jc$?c$!GA)P&i?G)_MXeZ_qFCy#+>KSoEIiX9TDHQBt1~TnsAWv0R(i5H?Jw-^TSW!Tz9%w~O6y#+i}>1(y8+ z5Bns34mc`Rxf#iIKA4e1UyD7Pd3AA1N7W;~H;3Xp=_IE1q<=)aI@tqzJz==~K?hU1~ z`H}J+4a5$0q0`oEci)~J_IdLik2btkvk%!Ub8!IDUX<+v_8xxuUDo(0LeKW)P(mO3 z<-YffZW_P8_8Z&Wo_hNawN0A|gibuKQWIv3~uz49}oeC9OTUzMyqxwCLnNY*ypr(S2UKt;w;#q7l?NA zGwb~g%AeWcnpbn1cCr6iIa|?K<_uo-y4?-%1+UxF0Izx7pwENgrN204mlEHnv9tkC z=q0YbT$~oByvinphibo3epGwkPxtLg zUT0V5;tZ;DaVpihxGlt=^ey;B;4!J%YQJtT@1ocI+iJfUr(mi$vZ>;Llj{G1Mthcl zqx0%&=IPuqSg-`A*f2p1f7JUW>&kCN? zNJM0oK17TwT~_23pTQv@t+f|sX=C4aMj=VTzP6V(HhEEm?<)#dJ}w2{@F~TG;DI=Wifp3uHs z)tEaQFn32bt^8fm;}OoDRoi79;ukem=i>cvLw;^))CnE&j@0RuAP%y{m0;wrxvTBG z##Xtk%ck~8$En(Wuj=LLX}_M{S&X@@Zl61O+N`mfPu#~b*_;ZtTlyW>1NB*rwu^y0 zYtO%zGWm|3CO-gHqz}{b~8X^_anj!G$@v325@ACWH?5ak)YX8Vb zG7rK}9(8u7HQK`(AhEaAeqrWCXLU`ZskSS8uSQeFIb51{tlD34qrD)!ojj(-=$ee} zc3>+%>)vGIir{yGDrT+xMHltr^KP`?Vdz#O`!$+s=KXGVQKP9wXPjzPqpA8n>{KHf zO%;b5m(MF2%M%EgAoh4}NKOf2s=*IA=VvsUia1Anys4YB&T8NVHFb&(m^RYHvGls6L9xyc10)!-jY+P4qbu z4F}$HWDpL#=V)sPm%Qo7V$!m0wO_&!3ufN{W5IC9qL?+17!~VySw^)6VOgFBR*s34 z7mw+L7FzIp?22@^%cXr@uU)JWe>zNlN1GycSsAP2DR(luS9IDk#X0n5Q1!K1s|Rii?VB%1OVzShJ=%aVE#{A~Mel+O=eoGN^4u5P3*I;~tgc^n z?f=nN!?vGTgEx9F{2}|Yl6c4Ng+IKr0q@Mc@JDtw;H}>ae{^R9Uc2_}tLoogdweI} zz`gMI?QC$Yw12>@->X}FSOa3es_bp`;Z58N-&P;qiF@JO>ccyKFML~lc-QWQZ>tZl zQ>Uj_)jwN(c$|%172j5$Q&;VS_pxczZbr(KD=}H!nf6j zclBQQw)*fobU*v5`e&;TkBi!?;@j$Tm0Hrx^Q$}dVXcY%s-oNK!>j3K>Z{`0>cbnj z7rw1Nyvcjv+v>wRbuWBdeRvn{g>S15@8-SmZS~_Dl2^C-(Op>Wi0&RbbRDvX$-p70 zwsUKsTZu;-%y1Dhi}uYs>lg0d93J(Tr|mjHnp+^}ywojcwNC#!@eq(hB_(k%TvR(P z5|9q3q_~Gh+Nv?sdSC5@`@qy~x(C3NRoYPqS(iHUB&kvtr%~$SJjS&^#O|oQ(B|If zMneWR^PrnSLr#GcXBKAS{K8C}WtfR`T~@B=HNKu)+xC7|cfE}@?W$`Uvo_i_S2gBr z$amU5CsAK2vEs~geqO1D*V&qEc6CqR@Q%l}C;2DyQSR}4oOe7Q=N!++`SRH7yg$;C z2bMFMTGF`rF?3d>r-Ay6rZ+!^?x!;!kDry{IgObIxz}|F-}Z;{LEs&!s;?l?wQDi& z>J{Y733u~zQ=@%Pw$_`xmc8^>oYjWL@_`h%?_+MxUP8ug#pGs%2JZB<(4rsdus%#Pg;A&1Gvy+h;%*}0*C)x)g#iF zwB`{w(PW5pEEsN8#uEx^59+#js3Fz4pLW43Q>Z4!DE=Txy<4#=)^Qq@sW_bub(3^< zhNq01XQ!dfH&H{1?ZZ2tvX3OuC-S;WS{!{qmEvYw?LEMDU+K?x2@VET?1;@l8CLO- zy4tU<4r+X$HdFhkJs?9Km);K6g>(V%LRz(Vu>j-138~s@Gcyf@uu$Wfg~DrQp_qy* zT+sGEtFioX7W+^r;w7o=O*G)TS4{w?e65Flty0O~If>^r+Pe|k{A!17oqTC}O~Hs% zKEVBeoidPFmltp6C4+Kj(d$hZuFRr z2=;}&KXl?a>Ee7-88fe{XYA_DH`uhpXZ*hTxg|kLv`>k~MP)uX3adkndB}d^_C@;` z;LhP44Gxg*%v_x09VHo}|56(Lmtt0@%IMN)CvG6smOl!a`MtksRlDLFa0o~#UB-Oq z<+dHaS$oUoIcKo%6Xm0S6+=;ZD`tnVE`7bZ{fX3HT+(@!!Vzn4(~bQ-cQ=__d+x}# z-52q*z&@`!1RR#Cyy)2rQ^dU$wY^@9^O@E3ymvSWWbLNTz`fP7S|M*PKS^t((9k@PMtrltYSLtURI3<;93)1Ca2<-nz z)g#h^wAN_g_K#K#k*1|JL*QDIA=2$&2)s03^%ymwMi(Ab$@bAqAa$3;6%C|Y!4TM^ zdhJ&5e%(KyI#y{=(Lkar6#^<+JkUr}>TL8CL8dfxrMy0KIMzybr zfHa*FP^~o)kXVOG1XR_fNe>Q|=9V_-_R8y*_J>}!KbOOr(CySB?s#euw>Y)fuCnM$ zY7zG)wTPRMTErXkrmC)KzqR_nV83imX|#tAe1KzN+u#m60Sx?TRqH8@ zS)(}BIDC07B3iFDV)@-BFd39~alq2rHM@+Ljt4KF}#Aktbyy_6JrX(J$eX#b> zHTxa|ia|}-D+l1XS3L`ylImf*gW1#fnrk~gXdlu+Nr9OcA6LX{tGgapTYytixm%UE zpDD3`I8Y%L4Wzw3!Z?r!l?z=Q29r;Db{#mP8`yk)DY3{A(`8%JYpQ{t@f`tPe0O!D zAiX55wGPOR&Zjmn&#RvJT=#zGc}}DK_Q^@XiJv8p=YU6~vc5g0+b2|)gY^x;&Y$xR zfL&5m9PE|qWUvM|6wEpk_7!^s_8z4Bk9QuPbsw+O$!41J%L3Kwk zbTN77;G(*CR9(zo2+3(sX=jaC;3);o8pRDEe7nMz7j!Twl{Y1E2Bj_zn7bLkKfbDG z@YrW{F7{oWyPFzfeyiN5H`}n-QP${{GOA`DJFL!a<)^0AsoK68Ki9O$ZfMl42O0Gw$$b0f_KLm6 zmD^BA3&9Y0t;rDSPA~*^=$-WZ7EMzra;X#zQknM=3LwGD2t@;lxS6jFUzHC`Gsj81 z1l7}OJjY|spVH$_a|hi2r(LJ>#Se>s^<5KBiMZ+`j<+jPherFov_3(S$ozyFQ*)kG z2QEqFQb#%$41v9Wrd5qZ=#-T$2M}Urg$TFal*AQDcbc^Ea>QJ79}_bXNoLCDSqHAS zEO1b>Slge3oNgdM-Tad@BkAMhA(5wj)Jfp7RQ6*fcBHi zZ$cog1ViAhCPSpQ1H1sL1Gh`%HaJpWFa+|Y-~2&5p?Jh^cGsHQt6*zB=%H(Zx4fzV z-tnqKyAHZ?Mm27$J-;S+!>fwnL(Xbkqdo2cPI%R!^MaSW>hPIKM?9<1h&O)TsrnAP zv3ztSIO|o5r7*S+cp@P=0%1ol1W-H!<#^{V2S;0dof3_R&ohZY2vz3O@3 zs#hHbUh=9#wIeS0s78CiI3;+_s}8sSg0tGL(K-R_@v1`uf_uH{dEmTP6=wv`d(~m! z1+O{;yy;bk+yA_h&{!rR*y~k?fV;fv2yn=&4gp8K>M(H3s}2Dtyz1~#!DC+aJaAqr z`@yGe4TMwPt^l6#szbn4uPT7oy*K-;NA10?^iGYoO2BTfIt1+Xs>8rtQf=mjFcj>7 zd%fxqaLlU;;H39vxgi|$cFzOnyz1~t!4s@laDs`Yv2)iRq)) zBO;v8SUyFHGr#kyZXsL-#%CRZ{VTZI~@o1NM)ZOJl;Uq73@lW z_1}P|27?K3sOkz~Z?LPnDe*o{jRh0n{;Dek>d)Nk&;K3QwPlUAmcX9RxG7@+`=rV@ z@`QY>Ys{?@HfyqJul?5P;|(O3mPK6i5(J-B^3nGFOD^GQjphaT39mW?r1E?%_&Vx| z1@M?Mu}9m$S+A-Cac@>}Dfk}z+b-W+pJo;JgludPfFJj&`hwt1uX;9(KOV=&_bJ7& zAK6cT{698ol_ZWbwXP_}7d75j`)F63&lT<2cG=jv0Y|;+Ss>lZuiI_;+ACs@eH8UO zKioO;laJW&rtj1m|37zc02f(R{{P=)XV+PmbXG~pNJm8*6%`E?6?IZnQdBIoS(sgB zUDid#l?;s(^{S{;YhqGSl8~XHQKDj@l47EwpSZ zdsj*&$KmsgM4el0r-dY>>_et(c*hqiIZnu{S$&|rw%P|;6RQw&u4KXV=U%x#Bdcgu z0C}%))r(Z_R|c*$Q^Hk-6V`Th7u)91A-x@h@JP@m%@=%BO>-0|Jh{DicECTdistux zR85mDhil0Wh7P**c8~gQMEgfJLjKl9s)to@NQ>%vtHL^?h8-*QL$t!X&5=s``KqE> z4-|eNM`kuSkmlTi1G(4O!}C@Z%_bnz0{7g&k!H&RNA7J79BH;KaO7S`;7GG`fg|^N z0!Ny?3mm!EA2`w+Sm4OLp}>*m@B&9Ua?I;wkXM>peN@Aw&ikl}X4G%7Mr!k^Sl~jF zL8-e>@+i9G`bVW{)&XUy`(Cu`eRf?F?FOIS;LvXJ*>z2{n|*eJLz|W@d7y12s}DnFV`q36dP=1}?3WC}e$?z9H&(qsxfKkhJxN{=Q}==pJn zIaGc$d(njF#~tQS`O#zwJwNU+hsuv8)9Lxie9HZhi-*kv{t8(ldXr5*!OP`BoV3zpu*2@nH_4z{8GzWd5)ifz+ii>-Jy!EQVmQPcD z!k4e3NkJ{2?&9A3BkWKeP3KXfG|eCg>x(e$Al8hcyJL7<>fDyq#hu9jF6oMY+ccHH zqgn!JW_*;cgV}(`rB3sbt|sib+rw7uv~3SNu+zOg?8VOL_HYh6^LSJramYa;bMdHN zCM@YH#7_D4kUJGVyfLebJ1IcbL7ELdO4D@xLsbXou(QpFZdMm}avw5@Q>k6j#hpAK zDo^gj0o9M67Qrm`{cc;<#hsD>F6}DEPDKEhb#bRMfJ?h#{TM+!dSjEoPGJDEx&|IL zo@03QJh?Lwz^pFrOaiK5m`0h-;?X;pJ1krUv%0v$(hWHa+aPE{H&>SAs z-w;R9A9h-yPM~f)ssl%1PWY&XW`p0&JKY=lu*1ZtLurotem6(ExD%vfJlNnWiv+LeqCv7eBSBKTW^Bcj=*!D0oUXeFV#7 zHXc2_ICcuQhw}8!6{FUlmDOAk8Uw`jpd~|1K^T z!TM0`V0LEks4mnvn_C0K)i&wZQgs>3)&SA$_R%I*S{${si~0+@U7aQScX5i9_(fLD z66_1m5X^kPPO4dgO+a4X_E+CsfPL1F>Iltk+q=g1@8W*cuc}SiR-tX01Y)5nL7Fpo zig}e2S-G;9^8E_hM6fkY`e+l)Ek0UHbIwPb zWM%8DL;U9p%R5Cdh^Ln+oiA(RR6@ z9pvH?I~SM8e(O+W$2H^X-{jArOE{^L{tUW=W*LzBNsb%3xWjI$AKRcg20z^bZLaC+ zZoNaBi@IV>w7FUtqA>ytK1a{HlSr!-@)*aeS?GerX~E&K4OeTHE3npFJ~ z44c~QPnJs~7;rAP>WZH=z!Uru=VF?y38giF1G&&DRE*)S^eZM!lXF37_2F3-iE2>} zu)6HwSi2Z=bzl$7ULRfB2lH7UWoVB1=u(<28KuPpGr2lp36xEtUp|)>!93eX8Ja?UzO&T>xZ;t4Q-~qGf{`m6tsd%M{8lPfMlgVK-NtL zUOlH#V|u#KW_9XceQC$@EYJ5iw>r0|UoKJ~Ud%f%tBaUb8&yw#)_aD_0&}dzm{BHA zGoHnmy|AB}DMUT9`qf2X8bch^$cB8315bv^OXe<$qgaRP7iVYHPuJ@AxbRF0k4v4; zWp#0fjd`DI;ZD$U4P$2nfhn^Sg> z$Iak4l>?gFd{ko#ZQ#V+;+IT~ed%H4lWPtany}BC*e`O`n^kZZ^D-j+E%T^WM4CDNJ%c-^uIEm!53iiMo;!SLrw*2R zxAm*3zs+y*Vww~*H)FUL$Xnm`Zp)`B?;uk35}YOl&CM9@1@hJ%T3db%q z`88eK3*@bvqqh87%GdhIsiN8KqswUa_^8Tm&RW{oT%mtd4NV5AL$9$`RvyUU)Iv^k z-q+edlaXkxOh_6s?_MM8D8Iedx)7~(i)pc5vz$8}+7#1Y;6s}o*M4$iw~Nq6sqW%lAa6}`TRu(sZeM;QO$uuH zbcnn)&29NLl<)E7>u7E-za~W9n&!6rTFOU!`6`-8A6-VX)JIipJV=%`&Dq?zKh`xg zc~tl`=Yb4PO>>$Zegqq6G7>Y*xyKeluJvsBb(H7PT5DZMO08*5E!L}^zO*T(r#Wqg z6*kSOHGzETX-<36&tdH_Qb4JYX-*|}OHXs!eSQWnwS%&!c@Et3{KGD!S>z*YnorUMH8?omWE|BrW4%Nh zXcqXWn&y~~Hqe~(Q8mpVdh42u(Wm_A(=FjcJygG z`i=4w!stu<=-1F3@uR<(=JwIA@uLrtbMa#G6~6phnuEUldYaqIul41(`i^U9G9&6P zJI!2w(ALrn;<7$e%5K;Ban;Zq3J}dPAU*LWU{Ct&sIF<)Tk)tqhRCjPIQ44>lxQ9v z)dxxAUEC@3>vwGuW|@y_QZO?CqFE2*skLFJKkyrZxg|g}r-0Oz{|#N-ne(BFE`p>o z$*N;C^Zb0*&}311p>U@(@T-KG_R-o}m<>Kk(QE?JNq1ql`s}DK+HL-!H9au<@aP3H zfSn;c>eoyousLTmqs>X<9Xtic89b`D{Ag|kQrWw{i#xLcyrGLb^TEM1lQ;o*jc_OB zpDE7kqFuYaBX?NXS9Oet|SY7Y=sndtx(U;qp881luyY;L>3U~{f7RLACe z0>tK+AvHX5jZlaYa2|&ILTE9@xeSlHs9XK*Qi*VEll99N6TGrc{TF*FwOs$tuC@mR-Lhl~I#dZW2+YwxBM{uzn z!Nqn2)-?yKg-eyXQ$sW1r)4$G0v}zJf>{?JnvFnF^}S%XIr=ZjNqX^&9(eVPKkz}i zH`<-uXm@s_-Pw(HXRYfuc9vnN8<2LoH`ozuup`)DN3g+;z`FjmBdE0_sI?=gwIist zBdE0_ux^7ef>D3m7P;KEKg>aa{?Wv3w8gO#iLqDw_NloOvN7Cz^d=b=ZOS zr|awk(_shNA8oY{ToZPn{TWYwD0mdFBh{PgG{=F=t2x<6xgTF(cWFE`_a<9nmY?>xRGLGCUf#XV@)N7nPRRsrh5tjNYYsz7!@R+T>3q7t5Ilw!B zG!v#~_c}cbzj-{W`lso9&y2}3^}9RAsqg6&TNFp+`A4oThM5cyO?DvaTyul@AuslW zLFo^qqs0gw70QMg50Hq%$+iNiVIXW(y|}lVtFfD_iCN8A?|;mIlgu^o6GnyTp#V? zPE+8=24iS&sdH_-i#tIS*14(MiXxqDMUiF{X+Mfx(chgbsYRr zfAH7Y5m+~aI;{vU9JM02FwctM!a6I03+?7ElpXFzbHS|0OrW`7R%D{k4rWD$CR488 z`(ZHzyW=Efq(GS_lk}iXmi#6!OmWwqRn4X{vtx6pgD$CUh zsJ`XjI(v^PY(a>W3ZL$2q``c@s_rhnm=x`4X<0=r+-#*L5>aSc&Li#%(R2J*+pye0d-vsKu z4v+f6U44%+ciVu~xt`1hDc6$=#N~lZhP<5Ko4D z9T;*wQY(6=UiDKu4I%aCV(PSy9oJW{rh2}A+E*7J+zFbr#xRK{Gk)eSq{*bJzcrA_ zRQJc3wQYVPFQm!LsRL!k)Pd|#%J0$Du`cfLjHM1`kK%rhJ|FMmPSB%GqO_fE1jGQ< zCCXNysGqO;dYD0j){0(P+XL`JlMcG%1wjd_GnN zw~QZndKBhNfS9QuDb{&~edrDP(uu&?Clz=(G=rpE&gOWHpuFtntUs6UvGR05gQb0e z9JwLuD8Hnbl#n-O(&$pqwF{Wt;HV4ipsnVcEukw|t3g7puoH5Ht$l^;nyp>W-UcgC znkGwEz3tUx_obex4Az@8O$MruoUkgThDF2C^cukY3aZDN2~$wwVd`s2We2zHTx0UE zX-nB!p=8VsrlTZiQr z-nUU}l39HlfeXt~Wt`^rl_|$^%u=@cD`i5)azdyq*566XFTB5TjCrsYSTD`;EEj7m z^DP&vZwbrA8p{IVvRK~=Ex+)-HN%gyK4e}t!G#Ni$~a9Pr56D?mae62^;gP-jAg4( zS**XCEx+*oa*3M3lBKSXXgW^@ch}V|ZR|zy81nWBwbH&;nr1D~uIje4x_{=~bSA6E zbNZGvo>Onck~a8aYX)FW<8isVQjMx#zOh5I%A^p7FdlW+lV-o)K+O=$EdgR%Y(rmS zTA8qJgEm5-#TUv@dn`b*LW=QJ(sx-$v(iUvXfiT=2i%It`j{_=Ejt)Kn)yKH#;go# z2M6ZjKy_D6eZc{Cs1{Nme5xdffoA0nW8i@a|G+Am6i`{9S?YV$&@2P;J`%?rwi)uO zp$Ptz)Ze&eA7&+)iYkeOfVI}vHdeN;s=;iHRa7W!z>2-t=i1)BYS z1Sy(BKB}h4HcT;aFKE&F9!>Unv#*t=Iq9R->`fqKeN##kyqPgIMQO4NYLKb9#n)a- za|X!!`VTvDD_70%57a|)RWlB+t$u?knvOpXHFk4WqL`JSxhk3*j}_{}Cf7Iz=rTuiv!a=9F4lsyA}WQorCQw=h5H6EaKxBNr=; zOB|~db@5kOH$P=_VSl9;&g>8DhxtkUWzI!+MemAB9MyQedL~ysvl7p2P)}N)?b|JQ zvQ|BBee3HE58l=BnhX`*#kngM`oz1n7z-k5$*Aw4{WoKhz1Qc#ciCdjQP(@!|5DpN z>X(i5kJ!G;0nRe@%R?b<`pRQ@IByE$vYG#^m?wW=P8hRzR4XLSw&!^+SxvJK$P_d8 z(xbj3%_bn@$i2)mfjKsx_N{FZ=lI2)fbp&y13JVUg+N)tB%I=y6mVo$f$i^2ENtr;Rc!s1nxD) zonpU(8)&klo*#GEPro68%I#ITlL}O6GC`iI9Mc$5!>+4~5_WprAJdE2H^#2K7&FyF zzTuhLrM}R5YRCK}t*3UOANhJ}Cj-Pz2hCX@Rm~G!(Q7T+$DT5w@NeAdV!ut$hYzXZvlcuj{bdRKE_19`8th0#*HA{xr1Sjb{ime&Jul z0-yLP?zs+C_egRV9{^b*(z~qN%)uzaUx(v0bd*X5;7_U!{g7 zg%|5B52as7Z|Oow-CNqZev4Icn1PbjTNeol&Pf-RW3BuY9z))|;1cV;;LlPyX10r! zBL_!k`zmW`<^ys5Np&7dzpx8ap{{d8`Iz5gO)ktp$y(ui;W7{$CF8MOtPlJ1Xr7ir zzVpR)v2r$t7`6qm(4?^XbBYFi29PoGQ2K?`6}S+r{c_9#o0c_PaE$6JnHXK!%<^?`_>wV!G9^LPUQ$uqIXg9yDTinQU`?GKrP;2y6Q&b)CRjrqz>`5>V z7c(V6Lao#c51WMM`@>)fPr;?%ciAZOFb|iA?_!-!Y!^#~N5_1Xop7;w#G`i*uI*x- zw^E3q){kW^O&4gnbDMXSER(@Q=@+sp(S?$Fg3zw>TdZk-87Nt4t+i`~WwwJ_;Zd7| z3i~&XVqNN}o1xI=E7eem)fYDVXW`zD!cp^>?mH+}`=|}}QPxlvqKy*2t+g~OftEYB zdP8ZeSuc2~#zWQU{u@WJVVx7&Nk6WdGMIsQjT8^dWs1pkX*VK@6GmmnE zqi6;~YySfw9U_%leDRviR+KeTJgjq!r3Z(vbUwY`P5Kt=4IzJ+F$*W2C)E4g%s`*N zbXxCJ@F>SG;xx^ekJkPNLSBEM5b>32vS9||HBvk*6FiNb;wxFz8Am5S=y%pyG17Qy zec;j#lfw~m^~1N{+}j#B(wy~C70tN?$NGDI zX<65ljP^D^v}&5QzWhZr8H~9M;vVBsGlwQyR_|odoDbw^@*2#@$+LqUTAHE7e63oV z3`T3EyST@A)K??XWIU?iX>K2f{Rf)>!dyX9~{JD704ozkQ_uHx1B>$DdcYH&LLaK`Z#CEud;<8TgdvWApP?h z$L;f>d}~aj`rX*jXQb+`PBdvm@+_5=>N)7xPfDSX6+=yX`!-34UkLg)R+gPwymod4 zQhsqO58?48cGA!OspJqnJDb+Z7runp-_{=D7jdo~4Er@$s|`C0Yi$VmpsiYd!d5ct z(4AeT>?r=jNxgGZ|3CJ!37haqFLvM_Cai<4R{plgi zejioSWY3fr%~4-X1;U*%|Il?bCw){+Gf0NDkTV%Ge$Uf1nE`L|a3|MSPt#-ul-~_q z+-V8?XmU)IU!;pWL1@;b&4xtWms(o{vob&vFasfL%EsUl2(2jxYVd{D^ulDmLq4gw z6-k=+leLy+1V`&j1Gba!#n;xtY!6T$OpaT~V!)(F{i8C}P6nt6W>0|Fhd?_sj%R~B zW#p1EfNqWW-K(L=3F4pk2`IPtd0$Fwf8LiWJ3R06!!VnJ_or#L`KV?J=A4hJBIr+% z->)i~B|fU5S>~fEniW2(p_%bf70o&y)zED8Q5DT*AJx#@?4v50?LMlZ+2f-sn!P@< zmVY~0)poL~Cy}ISJgU?6u+zo8AcfW0Xeq~Uv6^NckoT&GJ3(aD^2^AAF-z0j;*VLH zCWlik8qqH9#QZ4IG#QPzSaBza!dhI~(NwSBWTp@1aDYZ&&ID*HOcs^;OZx=EDe=R~ zRKlzakPEXtK%FpyIITI^g62B?2-bGP90<@L%&`EC!wd#-?L1J_k6uaOjf#D zm+FC<124ID?8N?3^%_ZSu5?}MWH~cfowk2&sk79{ToMWKk2s^De3>&I%9lHnp?nu- zCX`2=*-*a1nGfZ=I*Cie;#}z@8p3$C(-6wv<1}0y=D(ZM&>Y5hcN%UA<1we9HH@!v znnL*=jvLDNbXr4sj?)&(-|KXQ^1YnyP`UkdX-$eDdP zj34Z{uY~arI;kIp@r08J<%c+Rq5M#1K9nEkw2p`A7dXzVVf=6>8p@Aw>O%REPJJjZ zbQ(hWQBGqhKiX*u;B(+dfVVF(=er^B6TmC749@{C1Fr?I0N3v? zEOCNyDFnX+d@LBLIwXe6`mxt%= zQT1F{KA%=x=dCAd`a7#d)b^(Ow?sYTzHDv`BsEmqpVU9ihrxIAsN?LV22AsD!A}66 z5`3-4Pja@2e!aLXJkC1huj3qFVdBhF`+B<;It^DZbM^idcnf&(lO~@L{iNEy0A3<^ zkK$qZ`40RWnwGhqfZEsF6CTfUVm~(dQK5O;lZ(Xvf_h%Z-}_w?KjZl+c;pgo50nsw~d2$3jZzO-NJtcyiV|W@CSs>GSv^A zhYUE<>AV-bL-753-~1Br_NWwr$oQ* zT}1y;_|FLc5%8^okAu&OcHab_7hK01)~|QqKa755DsZ*^ocv!aT@R={>g_k+g`(Ymffos$y~uS!?jrm^#dUrfR%W|i zgIG|G@_3e$c-^csqb5w}!{F{75zn9eJn-2!7W&tKm+iIC|8nrbpD*;k4m`HcLjTW! zyMHtO4kpY!gQm^bv;M^VCq?2|9V@or<3Ire<Of{zu`a=kLyv# zNyC5qh=_+KF^-$Sdyh7}4gNQQmz`rcuPg2buQ=E6BQWLxbAPkzf6B;5zlYI^PDBFMsch&OVs#l|B@w!C&BjyZ_YA&1Ud!a$)$!<|HF#w z@p2E(_Vk^&Ip7@fa|{P|s=!-Ce=k)$tY23u?v3LCrrmPH`4vwmxbKlP%{mV*qVw1y z{Fz1gnBuzK%?Fuw)vmX_1>O$M>#M(l_k#Dqf5{4?Q+cq_;W*}ir@)Khp8#(I9|SJ} zFZ-a;$siBsgZCy3=l$aKiZ5}3`#(+4`Gm($a(a<}_UqH&-Gbi;J`B$5na_jw3;t#B zL7~$PJ_61>d|UCbaUWD%=YRYV)31EQ|04JtIM0vFzjLVZ&q02e|D3}NXS@Feom}u< z=>HBp{|Mthi23g9YT_A&|7Q5_4qjeh{5g*Mg13No!~byb{KJjE>Y}%u3clqi!yDm$ zq2hXebz>gUe1%C+qRl%PD zpA`J3;I9b&EAW>E{|oq-;LBHDAWI` z?J4+2zn|yoedd9AbHJH5<{=xL@xP#Sc9e&LV$cW_dfcPnydQWr_y~A0bZWr2fe(oOj-$VA;8!Vs-QR>5uj|2&5dFFh{BXhBz>gIC zZtz0ESwC@b*3bR$FA)B$t0HjL!$ZnHEYE|A>%6%qn|#L6-&jimq&G31|e*t(-so^|N@w_vP zd9BLc+gRtBZ$w-TCiQ=6yHx4uaX(+=`IF!kf^&VY6#3_RUMl>Xp_3H;E#PV4euLa8m4~m&M0qq_HUU!!9&jUXSybzr2Cc#_4N8rzV z)*+vK-S<)Duj{-+IG;0H-WSMKL!7G;m>)|BlwN*?-e?CD88flGIfp_FV-{XOVhav>*q^KN7q9$crM24 ze(-kiB>4BhC%`!$p93#E&*-PbxHsGvaW!hv|EcXY<*&zmQ1tf~;KSfNk8>RR!Fip- zaruGZkE=KKc9fqn#K}5meo879=I1x)R}$QRJqun5&UI#&-Az6-g6|Dp56*TuFJ_RR zGLs(XAmy*~^Q`FC5#S?&AE)?^`kQyY=~o@}+20m$*7GTdvlX24{XFm4GjHF3e-n5ubRGuZ0-gb9zuM3* z@?pgPnuvcC{J#a~d2JG$j?&TjuLY<7 zMc||0Q^<1@c<&mcQzr7<@y&><5!ZRv;olHHWc=$W=czo;pZ#V2qu}&s-m<|N|L0Xa zI-fD&->LYH@>8_d#NV%jRU7j&4Nm%(G^ zf7V-EaMoLy(C77Gx!|0?32=^Mt?HK^-%_E!3H)@yIo~UU{x!;fNA)mXYw|XP{IDJ( z7cZ=bn~>)yIL}9Sg6DzPi~KteL|l!^^nYsO>(ELOKgZ<)!MhiUzZdOp5pg~VJ_XKv z^7Y^hc!LSYpTDV%3;R0;oiunQ{I`JjgEJ4m1s?%teX z)w1AiDewe1^L9CSIe0$&uK{lWcfoH{T)q3~f8Lwx?H3gf>(|$y(|M_hlk4z<;Pc?6 z&}aRZTxR^ao(#gj9lR6%FMt=;8-LzMdL7)^WH|L%50j_|u1g&E28i<&*QM75%Ccd7A}i{QpEA=D>L#dC#7v-kd8I z=K1~LDewgJnK$>rh^tYV{!eYZ{%jKQCzOuv@23SnM)9zIos4!z&@S~Wz-t>!oPIpu z+2E{`SJhj~VfxJ59Q;{_thb6!7=7mLO6XUDGoBm4JHdJ0yaRj!ob}1PjUsP_CT$MS zFRda!JRiB>QTTsN>Fa#93C{CQ2RP$@K>3H|VE}Q)KWX~QdUzJR0G#W?kHM4Ram4fA z;2H2F_#AjQcmen>N>HzFW5RzQ@a#qt5B(1VF9xrGP6>D`cpmt<;632X!#eO@p?@X# z1b7@eE#PxP=gZ*p;HwzZ)=XJ&N;Jh!v*EOSp557y@%5F3H=``K)ufwOo8RszaGXu^# z83%V-jSlPK7vRO<-Oy(~oxX^xQK9}%ZM@$&iTF7$cpe-VoaehKaK`!jcj@oIXTs~G z@3RZ*!thkpvbhl+nk^Qi82(=V>KTu(;8ndg0whf(ls^!G^c3BgOjr@(n$V?9hFZ)MQo z>r?0HJXa&;f%#k__{SFMR}I?j_`K;C>x%0}H+U)9Wq+r^+26~cGXu{4UJE`4-V7an zo*_%bdFvu^-T|H7J4~GU&|&>IRAjpzikm0C3jZ91aOX=#rxkJD58m2gIQ<_7p9b%T{%hdvUorm7+aJJtz_+n* z-)HjEeYf#u0X;=li*N!hZxh`GUU!UL-iz;bL&E!*3}69j&*;_n2`XM1Hvb%z`sNZz&x;zvjT( z;r}P_)-Iz{2F`Ug{_TjXQAYo#Hr}T?6>&1pygo^a__^MefpdHv^||t}e(kEbjx)F0 z#KZXa1J46zJ#Zb)2QM&T`qv>9Lg#4cRD#Fh&vm#F+y!SIT;zfIIbG@K`Bg6Ra6b6i zg0E3LtiOyu@paQ*t`8d!=Oj4S+fRZ|gEu11o50JyVRY)izX+bX*YH{J`@s9*UjhCI zxYJ|&JHVe-T>qVB-GvcXBd%9JQar3*lhBFXXLLsNL26@vC%`i(Al7ZsH;q5X{a4T_ z1}`--&i{ZngLi{R)O{OWKY6`ICl37_@RA1%uZKUc8)vazv0ohbQH*;V{5enSFushF z*U$BWbKN*c)WiNN9$h~v!4LCzmeYzn$I&j&;}!5{{TD+gBlu~GhmFfwitGFgKe#Z@ z9G4OB6x!vu0M2#kR@H7;9@yV>pXnFZL-uzTobBF)_~*bmAA7-_ZyO!*?}KN9b3U@agXnLe z>8``;y=KJE^?!Vk_$Q&?3;kl~{2F`;yb}B`;6>jtak}8k^GrPqfR}*p0X{4Ee&7WU z8J%wU7bvdl*%jl$`fLSf-PV0Dd|XPPKiF^d%b|ZBc;sQjIWD!}QSc~EFrNUA4H*Ai z=(K<*z}t}MJHZFPyU_oB@NvP1z-Pb*P;k$KcMcjIwd-xKgAamp+Y5gUc3Q5CHSwv2L+!6p9Dvmoxg+kfiuo! z>hnu_p7smAJNQC#QzN19YDK`=QZ#d zaGsBNo{c|e;#4K$Z5*%o^Mqj{?K_Zc;yR5r`E{(pZ9ALdEj-z zJo?LdcbL-A^CCK&=V}SYbF9a+oXp1~9*^lK)%IcV25{G-j>GFT2RhW}{l;veU#vdo zwxc?)8#Vpn=VzF=#updntsHr10_XXz3cL-RjJj{#4;Y~n9L9+KeguNXcJ z&U$DXH=N^sHvHSbIgjeVhrqdRUk9Fe)#z-7{ujUper!1Z4(=iFxt|(7;FxU;y!`6n0hW5};EJn0>z<|%j*oOON< zc!l7s^9qc6@e(7%&vWi8#`ne*CeFPD=k>;W1z(MJa|FKxd@sST0^bLm*C#iD=LvoX zcwF$Wc|7<&I_i82{<)&vL5~ODyBI}2Us61*p0_Bj>$zysjAJ(Ze-EAnXT2>s!1(up zcf&siy!>ZIhwFI)ykGE>!E@d){z>SZ16~O}0=@=3_rHvPC-~)x>v?^E$ivm(2MT^O zcs@AK7k4TimY=UGuJhBm#k8A1yWasH0q6XE27C*6FZ^EyZ+X+`bb$XCc;3$qpIKs_ z_#Jp;%J4M!Jb3264KD>>cA(BfmXoZGxLSepC0B7Bf8DQ)|Ac;0Z65?L`L*FCc>Prb z-t>;)lUc_9RPc)589oGF0iHc;IKNkF1NfFX!}F2oo55%PX*j=c>Pz6x{~Df)etio( z_iu)$OgPRn;0@s2;6DS8{oVNYfzK!&mY@IixcVF*))N>0+4-ifro=k45BMxN>mlLs z;Cmnoml~lG_&14q`v`a|IOpld!J9?h)`Ay;BmGVjctZGp2E0x1FN0qy_&2~075p*q zO9USVuM_--;Fk$L34XNTzXSi8;C~0dM{vIGOM){GD-JT_RSX`%IPM4D0lp0UaPUKf zKCc7Iz&S3bz`sK9GVqk(9|g|{o(69aoY$EyIOD%W`G>7be7~$=NtUa-#Pj|ql)s+u z+p-KVLV~UbFI;ALEAqhWkU{V~@Xx`20(>6)9`KG8MyD41yWnHX4Ie|hFM)4^Kd%$s zR9vsyxmRbqT4Gn|@I2o7aKzQ94(kA~OTU5q06V{hPOr%4Ja|7i>txx%rroE6&Ys{y zg6|LheZhHM@rdBOuILe*_nGe#oYx!o3VtNo9Rz1RoCN-L;eRf8x8Q3P538Sx71wn# zuxpl==Nz4EwS5wN6r9%sH-b-q7aMoycJS<#MyCP%E8xxG`QZ11cY_yzbKGYiiMSdS z>i^XCsPfl!GAjD@H25$$=jkZ;xZtlT9+n5b&dq*LmaE&F)c>iC^I{sD`F~UC=)BE< zml}6xD|o?fMyCz@@8GSw8$OA`U8(M)YMmkYkHMdLh(8)}HR{#>sg3tBW<a$Z$@|Ikf^*%=7WxONcEiT2 z0D0@&!{n3o$#LujFVUS-+wt(924{cI0-ph|Gwx0bykbwI-vrKa8O6Aif%E?VD#Xuq ziT7t>f^Ss%Vg0%S?QTQ6EzoZPcXLcUjK34S1)THuG4Kv>uII0S4}kOf@YmoY;GB2= z0G|VA9ddkg(XS}t+%sY7Bre7=4?JJw;ULAs^1yMd+spJf4SmkX5pd?=2&JRv(I`0U z;bia$aIRP9fM@S*^m#tw_{Ihzu5OZf;C-iqMEuM{Lgaz%_$c@YbnXM+ypPc-LO~CL55M2=6#SXD zB=Xh^&UL9mVfFcA zb??wEVfDavH zbXafKDz48j30wzq{_=Xe7(5p`{Jc|z@Ne;Sg74cegMT~pTgABF1KuXao%K9}dY*)i z|Mx-g=XsXz6V(ZQ*7J?vNT>gK&MO7y_gZ{XaMp8=;H>{{aMlmM*CHc0>%R#+ihlJX z53bOE7`#LHbH4Nn{UP}G2|fwlFZ6!{J|O(Jfe#A4=b@%fhJ?<+;KRcI6ve~l@0p70 z^Tqs!Odaz4SPh<2WH{@M^S1ze7VnYtj}+QkBPh;r~XbSEI;h;9OB{qCHA-YI1@kn`(4Ce z0?xdRfLDSSoA8|$?JUPE&Bw+=XJ1ZW8NYsF3ejTI#F=utq?p8&b*xh zo&ujX^3J*7=@O$~1bz{C8#r|u!Arp7@c)eBI-eP_t}_31$iKWUnh|;9eex-pf9OvO ze~!y6ILD;G2x4_HGjQC!MTQW-MbyU z8@vfR%ugD;RChvctcM2ltJh%Xex;+wC4u-^4-bRKMZcZ^-(T=&!S@xMb+w=1WAHyf z@YfXIQ9W#~FnLhZ#M{{4L2%ByHrUCGa_L)=3Zb zFEsH`=TYz$aOU}G@IG+n?T6sw;Oy7y;JF`PsQ(st5qJ`D{sFvE_-_Mm1J8l~3bkN* z*Ik0|1wJTr4g{Y7?}knxcw@@M$vP|n?*r$$R0ci?&hfecd={K>UIZRlZS<*g1$ZGi z^VtkuDfnl=o4_-O|102=;4b+6;HfIpF4v96z_Y6jkHh~(@B;7_@G0_nuU4(5qKIr1^-`w4}equui#VQoL`ZnaUNN3 z^wn^9+bZx`@H+7Qz*DuxzX<$r@W|zcC&5d=Hw*u>z)RuJcvgcC!@m+b8>s_-*45SE zIU5$n(*hpbWH{^gF7Pt=mqPzu@Wf@tpRX?-0pARN#`z5RglKmhJaUE6VVz8YM=v%! zhIan|o(s-#{3mz=cscy{{E!*1(t4wl1V03P2>$F>F?cKDq5fImCE(OggF73IKI`x@ z@N96_$u;0pqQ9S|KKvQa-QX>VKaTjn1?~#}A@Cmfv)wW95%}}G^9J}7IOCrI-wGZ< zyMFki7lN0g4p~2^fY-yHah?O-1kU=Y25*N> z1N1Ki?}vX5_@@~qn%=LV|xGufj^H;y41RjNd2Y3@W^Y#t!W})-2$AjO8 zrT>uPVb_f#it9X2++gySi*{cJ-wNId{wwfS*Z4F4e*qr?XP#FcWAyvLW6&|zx9W4( zYa_0Q@cJlM`G>`M5OnHqH0@49=M?bSn++cZuK*te=Q#59$N)I=!`F8eHyIs%-fSIo z`dbWd#|!CCDz0CbHQ+uN`^DFBnZbywLy4ka*TH`jA-V-0uQ^NsRA3;KPFR zb=<>(KLGy;!EeO$4iv&39Cw8pi8E{qh-nJijJ2>nA zFz_vc7lY@2*0f9gv%u4Wf1LW@Y%dds)M)_k0Z*gd>%g5a7@d0X&w|&3w}F2d zd>c4*?gLNVwJ@Ip;O*dy^9SHtz%$VQk>YwCn-ufq7vMh=ob!DOJPI9tZ`F+8y#F>U zbU5GVz&YRlh<4|}xjy_8{BMG6p1)HaCO=8Uc>s9)D~9KR9}Qjto&$c$ zBKl{*e-Qo!@Lvr+4PFS&^GnWGO}qR%3$8zjyA5X^E`?43cpT@EPlK0t8h;o1w}Fp= zvrfJU-uN}+Uk{xg@B}#P_EGSudyIbv^hXreb>iZDr*^#UWse8HFVDK=eYxnfd9HTE z$DIAor#axuJr&2{`D-~ivko0E;#eQ zx5p22TE`=<4zWr9r?x}jpC{rx7W@N(pYL&19j``QeLVYhx#D4U+o-s%+lFqFf5yZ5 zX#`JcF}1ON#)SV(&>07>Fz!wpc;@RyzY)9(JPw`&=k-k8;}KV*jQ&q;yne_RdE<3L zTyTCqYG09`e${SR9@yXfdrh3ZrrDss;LOkW5dSzh=kIgi)8KLFOn^teVf2|#_ILF0 zh^t+>e)8|&5+Z(n-uO^(u2;WQ`eFV09op?jyScg%wM9-a<30*rVzB>x8j&6oXA3yT zy%n5!cpr2&gJ;9P5WEAt8Jzu%JrQv=Vt+Yag<>2zzY0ViN|nA|ABqG&7yKB(Q;LV> zr$%vI|1F4rYP$k_9z0>Nb0c{Ce&f&U_S?Z*zG*n$f4m!fxYzJ`=zJS|@BzcQ z9zFpcdC+jS`yzM&ILDE7I||P0e~#Dqw~P+Q>viZ%fEOd4x52afjDJ4(U%?B(xu7gN z(d4b-JI0^qwfBJ+e%tUk7NA4G>*3!3{Sy@T*7;9myBh5Vej0ciIO~d^|LGQ-pTFuC zoS(lcekI~+Y1Z30(7!;`3F|ZUgz@jy2dOOu|4QM{^G*dg^UU{ylHgGzVu=@Y23e2njhs<~tAx_p$Ucce&*JVma`^UjKF4uw= zfHy&h`E;I)xEdAe|J26$o)P_hdy#dFaZW(XYyc|Cl);LKZ_$OH4-DtNVub4U5fJZbv1MF*?4_2^g0km1bFRp3c*t~0lQmxHH_ zjQ@Ft{-KDgQK9}%ZCtn85hv$eyV41ZllL(uq0j5Od(rMz@H`{$k8kw*CVs~GDExE4 z>Hh+FA$S}*Z-7?_|6haGgLlJ!4m|rQ({3erminlco?jX8BzO$G8=Q4@Ab8?wqvOK= zSnytO*4t^|^WdHEuK;f!HacnWwcxYho5AbBo1ZcM)VT&c_XmbI!@rgK;4R=^qW`nT zzY)9#d^0%DM~{FC|ia%#`M&SQCbf&@iIn}qp6E7J5 z4E+BL-YWQ#lW|@KFTi@s`zK!#^~`mw1Dxj(-Y4l6ocBq3h0ZamU41>)FZ{V44uW%@ z^8U$?(Bb`)rv&Hc>xRM6E$73k-LUz{bv6HoCU4!y8_zo<;Ed-Z$lEA5*M}5%-I&pt zgH9cI9J~yi>*~}{#MP)*|ED&td(VjYxlV2oocFii6rA_xC&3v%@6V5da~%0QYvV%a zjM$Fz*8TFr`efc}Uoo8RUc>x==bG+1p9OcpxxRfBe6!#Wf_Di11b7cP=g}zm7Vs@- zm-%n~e#F%%qyJMI&ujC@1J`q&*JecCcwUx~Pl8SaJZ;>av%x#TXTYn#GvFoQ%tIOS z&;-tPBVY83>r9^D9QRysjypd;85jIp?+MQj^Dyz6>2EFKVIGQqx-buypNN58a#o1{a$f>oiP5XY}Z35hP^$% z94)T4HA%zk!Sg&Cd|z=ZIM+kg;UGBUsfW%G_-5#EJ?TfksKa`wMf_YJu2nianitJK zH}N;(0LC->3&R=D&4_0XycF?#0law1_;-MR9lZ0u4IhI3!{FoaAA>*pHHCi7f>CwqcVfe*s}0Pw+I8T~p8*wNq};M6}?@g?eyV4`@RD+8Uh$JOtEBM(c! z>%kuv+yx&OoOL)p9C5XToL^4}|J$MSq~IK{VQ`M)m*GDuc#q;?`9ob~(?bf$&>8{j=#jn0sf@$a`d&qQ2}n)H8az4!kNj=gXwf;k=j!XMg`!>4fE(dCU8~>2G|A=@;`> z@(07Iv+PteE=lm1ad+b272plv$AZs;SAbW74})_YS%*!?Gsm6R5C25JvY^B31n0Rt zS0nOEmA=l~HsOEJ={wFt>#XT-C-kpGocVt=JRkfP@G|f`@DA`=@NSXM$e)c)F8uF@ ze;zn4E1bu{6M~O{7YY6g@FY0%`8)6?@FukTH}F~TI`Hh%%=o6}Oq@x?&v6;XxD3O8 zALXy}oQ3?u-8le!so<>hnBaWBAYbr9p_424G2l7itWUnb5Eq>DB?``UiSs2P{7+H( zJDM-Ge=+&VAP<}`BjAkZETyB@u~F~>_^$?^15bf7&+ZQ*u0~vkdHq%>;@|i#ak_ss zaq{nE8E4BpxNbykS0bKPaL!*Bd>)+FOLu_R|IO%do$Llr{M~TY72_YjIos9ktY8qRhvhfY2?#$_0;r-yu=M3`M2EK>#*ZE0_{^l=oJ}rQLab#hf>{khR2Kww*r|>UiCuOI8gxbt;Nt>`bWZyUf_50|QT!^WNcN-Q^dVEk7i z&LZ%96OR9Rq!f4s_zm#y1?T5pJ`3Kzi_vEu_-v90 zjLT`@1K_N;O7KC!H-Ha|ar_kcsNkG0+tya+rWd=@+f-U!Zl?P6YM!2hZIbv-OcznC|^ZdxWdUk615U#TW$ zSRUT1xXwfNzDr%*B=1`u2tK->;p|rtc>5uS^ZM`%#dVxhxX$MQe2o0IY)_v&Ot_$;H8M?S@3ai6^6I{9K5i==(jF4{7>M6M;hJ(|CJvx?WPM2 z=lS$N@Xn(R?}q7r=jo;QTzsu7YoX|4PBH2G17! zHt_cd&cBP;GAFM@GlfPKUX}gez$yb4 z&(DpVAULmcP89q!r4u$@<%p-acwxU%;3eQ(2iAj^fpZd-IN|HI%7;H;}5@Fw9us(4r)#ueA&*m|bP1N*xLyd6A_cxJ!{ zz&XBi;FTXSI%Dv6&PJV_W%vO2d%-8bc^*uFmz{0=3znM$P5^H_-|#eaR)dd&7cDbS z)PhGoZv1&Y*#PdQ44;EeGxb*+UJHI3_#}86_+8+2RmOi3ybC;8ZFnj8gWxUT?cjsp zxoP8Hras4@w`alYZ!kQKe*H*sT@Pj7%yYFLUl0BQyrS1|HQ3(vTk^hz{IBHw;8+ls zmK*(wM;7uJ`GDbZBkz0wyaAl;7K0bQVEkF1ANF{WS&ii@`a+o&Zk@{Soj|q4NrOnc$P)6+-_l@RacXJ$PF1ZQvPj=4aP) z%y`ub{{(oQ;Aet2fV00F!J7oX3EUMr_jvqhr%8=N8f4|xI#Szax;~nHU`+*m3G`tY}V2?+gS@etfKWY*E;}_wl zF2c|D^wsBD#W-Hz@e-&1D$_5vTeXPJ`bBuX;yTa6Jqz>P1U?SV`F<1l1b7FYxC6ZY z0i%;ap?np5?7@ZnLGXe;w7bG2^fB;~#|-EAKCO7zc#ST?UtNU1u?T-_5x#X1{y&Rw z=e+PZql&Lm>-=ZL-`lQId=HiXA%X>@o! zvq^E?ZenQRy4?((e9~~%&u!2d{E^Y`hyFLf8*f_TYQ*_C1YUWHX_s{}0p9suqcaAb zKZ0*P-{=&9?^a>*Q0W?827U;5^IMLqk@uf^JOMn8`QDi^W%2LFL$j84*{j`MBszRjlHCh$S%%!})~ z=iwjkH2#(Ff8=V@?(OjBdOJz|r6vUlJn=i|m)&Q^QI(Rn{n_KkI=6`RIqQ6r=g1+Z zU5?AX;H3u{&Use|-tje)pM1o50(j;n!^_Zah2lDI%dlQC{xtk6M4jBC=Dqe$iFxq} z_~+bb@?45`ZwK!$F>&&`>+5K@3_7gmUG^~gHR8V01JKDk!Nfld{b#{z&ouh1pVz_5 zcQgLe@c%P->{Syd>pAvO)9#eGZqEl_F7k7P;(8s(ztptL`Z*gs@@1pX{MUnzZ!rFB z_j>T5>x@5j?p9pqc^vaSg80Ab@dKUN7bC7lG^fwNk2VS3T z{JX)ASA3Ovcc|gjh^rC%TMqx+Jmb%P)q&?X8Q!7~Qrj)yEytU7)wJ@qdp-R;C;Ih> zs{!ln0r)rUYII8VlWH6B{MGkDh}z?hhtTfz@E^@~Jl+8R+rbkVGww+Y%-6ts zR~Y{s_zyt81N9#P|33UD>Wxkz_^aSU_#MV!@M-YTJ&k`6xO1V&PehE%`xMvxnh|yQ zjyi6Y`qj9^r4iSYSnmDrB$R(l<#~F{jEkX;b0qY8YfRqQZaMV36K1@OnB!ak|Jk!m zoE(=c;ol+F?Q7J+rQ<9Y>s1r{t3>^`LO+G`MHvFU54-@sZ(axf40!2DCjN5pEzpl2 zvM~N%!GCO}iN72EOFwSn>_t8~j_*-i*XQO5Gwv?@_Xlsk&a~SGelm3O#d>%K{0qKh z+RcZ54fSJ2XBhk%=&Tj_xf%X#XBhtp_;jX(4G0(k!QhSx&pZScak zO@9k;|Kac8Ww>7Db!o0zh;)8pr<%Gd#C$md+}+#sm-F#-@cgq3FG0KOzz4o&;%NcD z9(?L%!&#qqgExwNeh)m2?-gNv{zP$Iht5F@>tPH0D{;NO1?|2C-iqrw{{7>>z>_DL z{>G4>_pdhklVUy|rg+Tx-m!u*ZFM2=aCryYVg+I7@Y{jF7tE} zPUc4uSEH!@Pi^_=pY1d>L|ok- zZv?yqo$kX-p5xw=>g#}@Gl=V-1o-d4JH_jT6;&pmsjHW{+BFycF~xO$rtrF;4EzA_ ziUUoYyzV^}yj{G`ssSIl($rxybgor=l~e4r;(8<2ZJziH{3iyDKl5-ucn-#w&trXPg#SA5DZGy0xLgL_iP!rT@NZOH&$~8xUVwke zJEjf`;C~l*&NZfA?cn|3u4s1)@GHMyCXcm;F4Jxvo;*zPRqE4}3CxSr!B2vJ0_z6zc8=$NlGA;1)YYyr z_^*b4cAu$d=JP7>)LRSt^#$;9)I&aW9s+l-FgmQmA1bcLWoomjE6$_Wz|R-wo&Wau zd(`)TMqE#NxoP0H&>wrq=x;UHiLNpFW8%EOr{X$q*}EA3VfY^a|8BAV90vcwM@@ej ze;ND>uzs@6&xil;7USOm{Y}(AG~4wM4!8>bnP*Kr%)_1V&lB-{75?ss@h^h@cfl*4 zHrzC#UQa=1YBSo!3OxzFS)4E4fljG-ee}QJ2{FEVtu^^9ebDr`1@R=vH<@^tx6>8Z z@j_S;Z85^-N zV2B}3Fhm5A2-a5mz5aV0#76V0kv%hNPmiRr6vb+r@P(VGa3;mOo#vx9PlA# z(H^`YKrCY8E9nyK0DM7 zU#;cdp!h?MUD~I3<{RD?Wqta2LQqxw^sA+w*Xp^2zTyw-`BKyGClueQ@-%w>4#m&D zRoZo}u=hTwcwOzSspnbX)ZRtMKK!2IBPxF*hd)w2#s4DptSkS=6u<93i2mHC1Wziy za9Zk+^Pkf=atI zuRf&tpZal?k0*b>4V?1d<>>$a(EO*qCGC1x^B-Q7{D&R?^NX7Q;(W5do>KnTIsN-@ zn*R~Cdqxf~tw_I|(s8#_%MBI3@Asu2Kc@J&;+yZ6au*dZD}L=`l7I18^5PA^sl91O zK3kgq`hS-Ek81v3Q~Ytq&pfO6^d2eq9xeBO0w@07j;pr_;{V~_hc*B5KMHi+v*@ko zeO>YG{~&y}6o1Z=$l)=KPtHho?|Q{YR6nm*d?)Z>ak-42zp+2pR;4}*TAvZ+^K#(iSM>Ef^W%!Y7C6iE!u4AU@jp|_ zr{uJ2LHS(xYw5=al&GWm&pG98Y5p4)q+NS7|9@5d9!Ji9pm_f`CBJF!=M}&Gg7o9Z zo-K_25%>$emw2a7j%*RKUGaZq9C5AxrtMOF^Oi*pdp4y0Aray4dc~jk1;H_0@?Sym z9lHKaDZWSXll!Hf6N=xi_@$RhzwB20xZ+Rie6d~eUs3#_D}~R!il0{eOepnvRPhHD zpSkF55wxKA=M_KU_(fk+{2nJR_dUf&bf3$};UzVdkJ|qe%0B>3`oBl@d7I+j+890_ z|C91LqxGD*LI@5he(v|AU5m=+4(5;F+j>Ogwny<6=5s3d=bgCvuV{U|pA`E8)#krn zRs7N`1;;cYI69Q;f1}`g6o04I=icXeTLhW*zF+Y(4?m0XJ@gWP=M=x_=cWM5AR=oHQ!KW3!dR63n_@A!WBIrTIQyN!6 za!Vop=hev1dg7E@P<*=+?;ThEyH5)L8xy40N&oIv{9TGa z{%?XCJ^85O*Q%V29r!qKlEa-&zkFKrU;TM$*EZ$)#= zXT#^Yz)3#$sy}b)^Ag1u&q@7_eA0?PqH;6s8dv;;+N*coe#XH+tNfdWxe4}aCzi9qPCZ+yH&M#gQIiKGx zd>+$s1K=<8e#ATX_K_`u)C_pTk@>vN`v=ueqgSh% z|6y&fsb^pDOCL|R>&=Rvc~J0-u=hTwcwg<9vFB&Bo^`FKssA5p{t4Z$*-}1VH06HT zW5|rJZvdzM-J|;;do=&QX#NXtl=>L{Kim>|o^tHfPb+?LMEINaeo^s96u(;euPHvF z-wT-bzD@Cm96##Aig%p2?xz&*J9gkP#n0FB z{r-H#A8_o?%YoB8zD>_DZWlIQPVwtBet2H-pH+NQq$eFXWby|+8-vQH?VYjho9#>-!7 z{_i^S`5Vo@p!1!P&n3mDznpB>^X?G&+^+Y;PG~(}1N?<_e*3RPK6?~@o#ub!1Hz}M z_^pbE>w=$9e4Y8=ck3PyeS28(I~Ct@;(KpaK93bePxfej|9X+n9>*?yK=WUt`v{ww z|92H{zA>r)f1!BC882T_{GqEvZ!fCB{Wfswms5`ab46F=c9)(TG;+IE@n!X^jh??u z@w0y}@-+LQ{pSe(X~*vhk)O)F&he{9mCw0~$QfP4e|CpG`wj$Yl%c)>fR^W%u-|1Hh`bB^AAQu#mT?58}ccpu0pn*S$&licoh=KWoo{|4p%faag({CV#!pB>pE$jr0z%I5(+ zPk0Tz#NR>XbNHsD{&y9>=*(a5F!^=gWcsY|dFP909X+_O{XxxtLH!LQ=RZ(<=S7jv z4q@YcPVtdHRCy}FSAmlpzOHgJ?fRzXKesI7!nEu8m>_80*>c9kD-^G*zAb9GX~mnm zzBA))(&Tse+^+b2`WTzWE1G|EL&`Pd z;^#kerLew31pO1hNzYH~I5P4H6+in? z(Ffya?pJ(E&+D3Un~I-t{G#KEU;jywgVC#ZD}JrUf6PAPS>P}9e6R1=pFh(4m;TP< z`roB;_=4f1az3T_Q^1GqTm7r%FY3D0_*XAFCUST}_oqIle11ytX}$MvkK&WSN&ZF0 z&L2?xgkx{Z%BSz_UoR_u_v=K?mz4i6s$X=wGf!WXi} z03kiR(;3&VQv6(B_#nxDqj(_s?{NH(n>7E9X&H~^{O5}1KdtuD==r+h)7mbBpHMzK z)gQP{%f0s(sNCzk^SYij_(zmaNA0b_?*~rpI-~29l=At6;v;WO+S|`7pIaTh`m*8| zocZe?luuv%?M3B()p04e`L{A&%>6Sz4xHq6zcY{Q()>H$BXTzVev{&tbbsH-=b++y z)Xp1xRq@3i6ZxM~1NtV#Po0tWqT2lTe#Kq+oK<{8zf&;!^J&E=-YWHcTKRkdIJN7Q zjz0gL=D(=(ooUy16u--f|DPTeK8ue3`6F)-{Ni2LZb^~b_@9>pr~d6b>%N~+yckG( zjXgQYe6H|1pBMR@7G_>e^Y8qckNlbk>`%QvTa@T&P-kH){USiF=PK{)FB))zNZa&wO6s zb>1{0Rk=!D)HVNZjbGiP`F~mQyVQRR6@Mr5d7XE{vBPII{|##Yuh;yaR(zYYj(E)v ziQH~=;s#$;{^uP%|0m^hr|QXw@_*JZirk($Eqans{N;*o9v3~lSMk>>{-mB)H+&8% zp3?QQkwZ`M{*|KtA5%VeD}K)D$NLn&=Gl_p=+(y+zo7cITlqYs_>5z>FDiaRLHL}} z{NDsl`tPY;ZCCtX72k5~-pDVBd^+zG`Ivruh2jrB*V`f%*D9Y-@jJgO`Hi1e1Wx7d z`NZ{{AF9fKw<%uSypr+l0(-YBp9j>QT%&kJ@dvBI-`rb!r}DYzd{_H6&Hv%H3Yu4<>_HCmnZK0lRjo5|f&oUc`|O@-&|SSID? zj@0QnN9f*SgPy}uzuR7_nbd*Ka-~nH;s(F=QxofJYsYUYw!3}G?)#jkAgk% z*H2BAM*ICrwO(81jH#JQuP@An@JRc3xr>6A8hx)*Y1aDvnpV`$PmNC=D9_h=wSH0F zZ0zb(y8T@#Ce1F_Rx0bwep$%?-WK?!T7Pb`G*PRqb?W8)&E@Gz_2}_>V=}wcUt4ef zfIO?0k*BM9X0lB*g<6#_)!WCWiY2>tnWc8SL)9$ML$$r$B01Ai_R|7P%#P33R(k^G!M1dZmXYIx&n3un zz|Z+(P1Ew3@L03mKDyrVxp|rhC{Y-%S6Z!FbBr}6yHc;RtY$JR=AqTCty0cBT0Prd zW(nnc$7;1syTuYol_)W;Qik^Ko4-A1opBMrK3=9#*8GTVoES+AZsPY#@f>Gxq2wn%BTYz*#5 zy|`8rZK#tzm2Tk<%u?@j@8wm!yp6{4QnL|Rne_M=)A%_Zp8am6)oa3x5U2DQtWs~e zd1JrcZTI_4Gv=Y(%e7vkTU#!#bfmlXwWhk2HR&!g9{q+U=4zW!!cVQ1kJgS;pL0$> z7+>%1BdfP?yram0UJ?m!Ds^l9^)9IpMpask9LnlcmNzD|-AbpiOqJ9DS{QG(d$qlI zZx8fbqlJ+}eS4c9kinWL3!`Ga*nrttUum|FaS4#w)Orh8Zl!m$f#Z-=Yz($L71(PQ zN)L)GhMPnL!PeTwNaU)O)<%UTlk1f`cn>x+K0S+x?ABJG>1@!$URf(wTU%dgsF3l{ zuXPQ-Lhp{C+ODmvh>EAiGZ{aXA~hzy1xZ5hxfHw&Q;D~fjNcY=iMO0IZ`071By&HA zpkyYy49#Sh!<-UDNhZ6vT->JoTDQ?!u5D5a@Z7ER8*NO8wVn}y?=N&K0J_E~LY}Gd zdaZhNdS7d$y)l_yYqyCyY+z;?#{|T}2*xVQ^ZRG_tyNalK4f~c&`NKU?W^YTY?53{{w(pC6rNQ&pu|k0$c+Z6RjEYQ5`s8%K`Bv!SBF zP&6|X4S~iC3Shg|=yu!PMhwp6TkSrK6C2;KIKOva4>jV}rzCT|(p~n}ma|$pKZWP= zI(rL6-={>i-RfhY7VB1F80GW|!)%$DuhrJt-Q&z+wT6DE$cXDzZ}fwF)JwSob2FuJ zAVpXV(^WKV6=pwyr=3jcxS1*gwg`CDZ+C0rxsE1YHMnY({U^Pu}Zg! znJe5ryJg15F-4WK%iNd3~Yv*V1!eEbND>+NTwe8mH#GQ6b7 zRCN$!I_80F1v=?^eJt(Gf$;9mU%KIdnV&HT z=1=2|RgxZj&(B&FMZ%IB8B9~L-uhD88j^l4IV6#eOCZCL%ac5^v#gcY3=7=~;Ev-yOw<}GEVcNRlGg|ywD)Q3@Lu5p(E(dEj~UOttM zOc;;9n@a@66}CXT7#fwO*|FdzyR1S3j{O}JlkkF6&eR^}D`m-wlNPJ<!!%1XRK zNKZ{oat=1yszbg3$Ln1eDt1>D3QVq9SR}zhK=H_-l-0V3E83wfQpjPq3Q+)^tn#QN zn}Hx5nNl*&8Cx@vRQ^F=ye5n@813v#+iEv@ilJ!22d5xwW#DvzbC8W|4%^#itDo+4 zS3N(BEJZkrgvAu8m63F;IvLtteoF~(iOI{O&{&~z+p z8>epctzH?M9iQ?osrtSkRyTy2N1KX5Bzz)bproZ-NLe*#H)n0^`b9pw&h{8?ha=3bRm)gN52GQl&7++T9m0 zkf^5Qv8pJ5#U|6&;7IlmRRoSmto$i>B4Td>9rQ60&8x@~*A=EEpN*u9=xnoc+{;;( zCuffT&st=dMQyRuC274>#wFiVD)=4L-*fhK1-)z};-6Vl)nTaJ2i`W9KeWe}Vr-t2-+ z%Ze4T`nH4?5WQ$f4N^oz=C>^dSZwqBUbZMfAaRMnPn8GUXg{!vK*VbomKGI_(5K?U zwLZehFO-kP@n)*f+`=eC6ICeiql|+khUVRPY9dT9O3gvqpL@I*ATKqWJtx9lu~gCl(Gtd=axxD zD!10CueUHb4I_?MjgJSit}v#R;!hE%*3}Ob)RO!{!7zacZNGw(aeX*xRR{tu6lM=` zm-DlcFDH!Tqj)2QqaYCUTp_hkJ8Ch45*1|Q&jR!P+EH}Vnm8Xs1f_T0Z$$5j1B6?* zdj#$rgIF+IbQ!F9D#8@&LlS-*!V3VGAOyb*P|Q)uRbtvov!Ey94|>N5vEmh<#3jUD5>5>e*~r`J@(@Zp`izxvY!( z*)pVMZ*m6VnpF-E&t&^Yt8HG9!IxiMVv~Wy#?Am9A~v!M~l;#CmO@D zCD}-PF}Ku>48c;*JchGbSh>jE3y|cJVo$-3FzRqIoNVBOA+M~?wTzJ-8`g~|she^FY=(l^{95s~l(j4S1`F$J?CyD!I4D?eq*2qSh} z0fZjYS~~3vNI~PB^*D4L!x(1-t2Lox1D$mq2W;mgeT*Cu(u6!-W>TB7UsT02;?0a> zk%%VqGiIjhTDjIT8^3u^*bGh4O5?*pzsI*>Xv}1?;3|OERrvPa2Qn1fxSu3TG}VJimujI6L61@p(#O){;(@#{ReMROvKOpMCPL-!eT za|=@lKoePRGs!R`OZs=8(^^~7F2IC50FTLscel%b4x(TggZQ;c1K1r}QS3)7yNaP(& zD%Wvk$nm4Bwt5(BdJIBf_64*sP0qMPz_BO@$~x#mPEh0zl`n7t-js|-rsAC?ddDgI zogZ=ZeZ2I`OX~=0GO3?ppvUKB{4g5JIY>1+JQU8_vsrF7o}zQJano5eekdn~G?5jd z(H^3%Hh3SGnh^2!=HKMuSbsAvN36m^a{ zQ7WzxJagrM?$HJz)I@zGb2;=k>LpAFrOL5`tSXog=vgNO+G?`8h?Ay|NQLNiwC6>n zw;c49R8oPas0h5{BIG%c@kSitM&u}I<{sWCBX>UXJ~GvfB|gdJr%DOCn%(I1u+4-j z@l!xg*Z~c4^pIONfd@QmQz!kPS2^Z)>e#C_2f3nm!BQG@R_4qy#%mG^6Qr@!CJnI# z#d)zLh+GZC34(CGvS!H>y(U=Xeqh7}b_9&m@vO(mxYsjlIMl^$k4F234tuBv!idI& zp;Rn&O2telWz{LqzEzD61?clKVw!O~D1sT5TFc{2Io*Jjaz0sQq~pT)bzB+@waE@1 zs;N-kd`L1Nh}uJ&6N=PYy>^$u!fYG+Uh#Q}62F?@2q|eowb_8@7Y6AlTFUbU0e1PA z7YMSN%$_%4lbaS=(2S9*rfK7<ZeR7IiJHgb5&@C>qDCd5p$qp~zD)8SNqstS)%Ei9<8wQbZ-B_D;^t!R?wKEwbZ^ zmbUI}9Os$DDHuHlSmZI8x&|g=i|04+!EK2qK0<7wqOgR5Yr%A z)P7h}A5DqG&tfyB7G~#zEUzNOfMT}EQl!jMG@mBk>QU%O+K$7~!Yy5{FY$;D=!6ob z$~aAmDYtv5((Tdde|bxbOMZJZOs$;Lj9#MMQB|pVIa9UlY(8i8ZZ67&24R<}cwlP6 zJ_{V7lQs$s=DgfGPK+O#6*Z*7A{~R`)5ND=W{_LtXOd=}G9;v8JUsD6O{@;87qzCXY6X>r8R3&%Br(yLS$Ju>Abc$<8^di0;YkJ z$=vo{A6^$M;@BOx{6Y&%Frx7h)e1HVX?|}`Jj6(}`3WJ%B$yvCb|Ma(vbiIarp~fcnL?amnI@9<5ftjW_$5+Sttn+y8o|p%k+3vT1L>WW z70pRmY$0VDZ3)Mh3^Z25Wa4ua=vvFrV*!JRf(x<}mTTb4l#MZ*4~m^On1fW9n4zdJ zYnJDvRTtXp5(*0>b1deNmcxnDjwyKZL8hFH-mohtZ{kM#0>mDo0#-R$OuKbnWacpE zsz*yRym`dGI@#wCFx1Czsj*sK(vyR<8sKF?u3}aLbc(Qu{Sb*zhT!3^A>zW*B@zKA zXywcva6J3Y(AlK8y6_7T1BsTVxmi9D!uBygo99hnPT-@UQZg%!%fzRup^9OgIfP`b z!eLI%3lls?*?d4l%Pu7NXM-qTVZ3Np znS>jQ8exl=iJ#)`tA=rmB37lyRqwN_OhtL}FoU}R% z6B1sNKNCitF=nDL<*fcv0!6bG4ldf(jFNHhVJFVAl$5ecq|s|l7ci8Qn-mW;zFg** zE)>z_a)x)c7jpZ2pI%u}cq>OCO9INRRq0>^Jz_oB>m!0Ma*H^jY(g-+q*NrZgtO}~ znXj&QHA3dT3W+Jd%SO_IVYHSJl(Gfk+I)6&BxsO}B3n4YlCZlu+tSiY<(Tqs41$Qt zCvP5U-)HF>XMk6T3{z(TWeFtnM*B*%56yYwI@96RJewnaN_#m=mvS;)#FJ#MP~y@R zL7ZarRt?G{%0SQNXi93<5rPG?5y>_ZiB7D=sC?ZK^$476KgBZD9YuQ+C{7disc$&gMO4(~oPRCM& zmItQWz?G9$eK5=eicW5Ll|nu~|HRv$qlCnqV$7na(h$8g>vK-V65?dcfs=+f6X_2o zf2)R+GI>y842cX?P*gQYN5Nl;1Ep!^k9OzLwzMfo7 zM<)B2fOla6fobfvJ926(kNwatio(7|6pez)_?D68q^%vaRx#fR@O)R8)ljnT(MD-K z@e-vYZ(8%K;edZ@#r7$s`s)Xgr9~|Qd(z=_tmYs}`p;OK(+8Y7;YaI=Ocbqv&L=(z z$t2=T89UBI;~{a79%mTrWez3n((*=nz8?)ZlA=AvI2{vl(zH505<&h!yit)GrBH&N zDda~oTDdVn#kZpPIvEFRgaWX-4<&_GWSf(w;JhvFe2V;VjdmcLq;U~8n>0$w`XI8B%K{=iJyciP=qVHv0BDzQD!I>xP@3TA@t(d~6c!Y@nXmqzTU^`y}ghS=OEu_;bugk3X(x z<*>9YL~7vr6?aNNdyO{1czbOPD<+XAyBYd6Hqq&dd|XeHu}p(# zo)Sb5)_DTKhY9BvRvMc;7GoML4_%tM1+^G)uDJy@8pI~-8{2f;P)e0m?HB%&rc+XTUA z%_MwoIHOzDw_FEJg%%iNJ_9-h&%gMN# zGVrpvf21!b7mG&zfz|Vv0WEKVQZWZ1#90Patbiinv|KLxxuc$+i{cC@IVbzfl9SVx zY2tLOZJg9%{9F{2moci7UY5Lwv~+DuY5PVpge8kS%U&aYp+jFYlDQC`DpM@ba_MP3 zj)L`Iua6^rxT%FQ(xnlrtJtjf3sL`}o&{@C<7Bc`1!IqCci(h-PQvseikw8~xiS=T z^`jFGlrRTp{M6i`al9dQR$=>cGR9AaRvP%D>YAf5mUWJxxC8lEhEKP^MDrKM5z2+J znBPBd8)(7p6X7AMWU-;4@ueXC-2S;SOtJi#Hr3h}CLD*BW~fMr z3&*th^bN^{5PaYRDq1^bc}>czD7HO0DT-d_z!Ud^@ME(}j<1)EoG7iVUW zKrZu%;>von*+V`)=~k~aSE58|W>-+iWIb~WPXl~C`tWn5jh)46^C&JL!a1;P?C_9v z!n6QnW*|re>!h!eA*+~XdVmJ2Ri%mCb+U36pI8_^cHgWQvGt3XOh-&)qK^(Z=|peB zb7tc2={K&vPtiRDB1}Zi_tg_HADH`ouf5VghK=sBxB`A&avUS`i~x>)*q%GYbzm(x zG(*)9g&>LWrgnkJ_$&K-G{3{uw7p15YO^!ZaK;y~GJQqvb;itJ(7x!cTIu{6uEU`9 z?Mk(_ZY)A}Y!0d*13Np)&s4iCjg1+F>3P~@VVtwjrybKWEob;jCpLzBkqS2uAH3n> zDSn(kLKh;`aLj@p8&V*Gm?me6FXJ)>C@#-aexavl1959jty^Bf=;0UHBDIbP@%0#L z%1^xxzKP+dej6?$J>@tb%OKb5)Ej+93oDH-T@NHTXchPcj}^r91{<5F#y0sQ*&%O3 zyfx!;$m@c6O_HEF!PcM2Tu08x4SAKX^f~@Pt?*N8l}%fq>23{Q6Ll>Jk$ys!R=s|A z4d$B$W~GZ0e~mW2DDlc=m>s$gsmoDd{Bjs0eA}BrRw|9A$9X_dnj9||C+Ewv3toR0 zj_?&C)y{E!s1QPV z7-{=dMIdyQNVUz_TBX~-jS_qwq21|IPX&BI6DfSD);~zsDwU4o!k#rA@_Kj=+eFS* z1qjWqA>uCXOQ{uIU0235i_XRQeh>Sy>SqwKo*GUEE-l{SgI0X6I^;!`EhSE;;%c0E ztiEu84t)e-YC>lWlWvv$GCPc;`Br!coi8R%?jwQ{EjKon8)@Q5u2wdVy~f242!iTH zb+#;uN5o@$59(BEh;dGAunswVwh5UvytxG(Orvs73>-i`$7qi4`B`dtqte8=daZJ) zh&jevookQnrNhJH?Pj~nqQ|0#FAW+jP;TogFVkwOU4^m55aau@yt2`v^2)L0GKyJk z;m!i64cu9FLWnc>&%SbED&yEJ$Ipip7hRxY+;6(s04^Z+8}yMT!D)1Kv({}iI66mf z0_hnzW^*8nS0;M2yIoTLtb&?7L2G%Ey+)ewW%L39f|7IULrtVd=nJ zY5&whncXOtH&qmI%nY>wA2_Yj)McuIeQ`H?kK+7&I7PU1jH*RP=4Wu<9jL+?T$D$y zLGfmol^$-6JX-Fw*-^E5VlUm%el(?2oS{4^-js9S5xaIcgzV1cF$ zqk;&d>(&(#_Suer(5+?>v_EQcs$84GH!U zT@t(`Ve*HBL*A+BA21+VpR`>exHB#X{%nA35?6vGJz3&WgN9OA#=4)uC0*PPXyz#YV|5H+asW!++o>L!bjs zk|rBm?MQb#vRav13^Qu7?Zm1?bMhKa>dEn1#L%*%W5N`d5wj0R6+77I_SY*-_Bl5^ zG80t3)qrq7yxmSvO=VIk--EVeg=F=r?+@gLD9pt#t|YL2l3STMl$M=eZ*j%h2z|f% z8m$7ciRyB-WIxbP2>T!!0{6R&Yc?%5bV0&kH;Fc4rC#a7<%4N!9N}fKbtR=GsQiGc z89}AJjaH>2*DFMtnHk7FUpWTHi*Mc$*UzdTc2b8_(C52V#s=P$*WoAk;3w0H4GW>N zx5gF_qTx18(9~6wYgy~~vkJm~^8h<+q153?!)v@JuTrJx@F5lr{zT(+eE`yVcj?IeLjJiSLqUpva407G>V0PsDjo{2(O z{Q~FRtr)pZxCHvRl?&UYZZ3?`4jk%uROAOLvVe$&S<|R-$qzW6F@wPc9>>YN_C~E+ zrTtJn`9zbOef?{qo&(ws{yM4V3ekGXIB!bC%P$bjVUqH&-e zerbg_;!TZk)_1T*(aT`qC7L*;QJ~xS(`AwoE+S(`9aSpx$yVGlgYB$Zx5Kxrnu_Iy zc?h&#qVG}MT9h~g&o;W|?BxexVsYTcYMwfRBc+FNYi*_gY zAzZO>q&{g^WH6>ht5*JcnY2H^woyyCnfW3!U{g^WVQJgthF|-_9n$9&u%|`Hy-s$ zZXmPuGBxZaDL7pSG*B~gEht>hW>7aKI3Q50ERW+PFk--ng^eAUqVkROhDp|F%;0QG z5l#N-1VdjKRt-a+9qbym?&KGt3I*tjtdYps7LCFh=?EK7t)D;00>h<<&v$Bj_wmxd z$o>?MBc1B#_HytK*h`5#C3UuVM&hdiht*t59UN}B&aGRC<6%7CnA`j{&PYN<*YKH4 zw{Q4YHehM*;2(&<#)pR{lT&~J#tN4b%S;|H*Dx%_SHk$;uaAcKS#jjQ+ox?p@i;kH zqQ6GMuA;0!R^Tt-H$kGA%cCr1{9;M85;}+}x41A*jPmF))~&_tD1kN(HB&uvx^h1uh%HT$l>WE6}i7WsR&?imex2WrB+~UB)e%Gn!`f z%0dFdm#bdf%&57sBtrx3k-iQHTGodM+ZX8v7!c@{ULu3h0cT4m40h6Rh2GH` zg5l_io;}*&_ql7ZSee#4|+%%@)%%mwa z%X20S-1z*sgm>~&&GlYg7xAo^GQ8;*1XdcYMz1~)R;0e6*mk)t`cpUAKjBmnEPt<1X4-fH+H?T5Wkjf9+%=IyGUIUcFiq zx03MQ5pB3oaA0GpN%yswty1oFjUhr$IEs-j%ZYTO`uP6Mtx|lXgL@UV=abZKHrh(# z4cCZOZdm6AYQpF`7o60`k2g_tfrqA1m|+f%z8ku;kcuU|;o)10uDL+Rt6|#?5=lf5 zvO{J|RUeuX5~2OVkgAa1jMFS=Zn4fYNREmd(-%+dXV`|g`rdwoWOW&M-az(Gsx;B(oGw~1|CKB0-i(}`FG(zVZ zIM?;xfTlnu5DxD#TLvKG)&=i$JSFX&pC6J_>On&hJ}9gcItU_4k#}qq4ZmLCDkE+X z#f|YYuVCC}xMRV@rW$mc$d5%1+2rM>&-3niZJ7>n^vr_COaz0W$GP^Q3icKG=T40M z8*Ee@KG$tcm4@ys;XraKXWc^GhDSZx&PADTe|4X9!u$c9XNz1yo|Z-QM79pjnr z<8lQ9J#DE$YS>E|QNv~uEpBkj?GW7cDIAk%dI#qAP087;iZ?}Ln75{R;w4QQcE(5c zzSVcd@x}gZWiy&{utiM=b9pk=3uZ<9lM8$rkb{lq4 zU0ooD9Jbjg9?fpE^7SXK&A`I5gkMBJmvMa2SlS_`&(tY5&_g^&9HWyxh>VhGjBp2X z#_xuGF^gYPy17Jtk?UYY90%to$_iVHsO-dOw7H%_oNRKF&1-SvNCVpF$&HOBY94Q% zp~jdaWMkZD{$Pw4^)@dDL)l5kop$3a84T_;$1)h)*%v$&-gos9uA}9_v-o@29I{-`OrTd8ya@R0YACckIp$Pnus6T zY3|X8&QV5E%nevG9Q)yW!sJ{9nS81-%u<`&eLmO}xiX0jf--{39*Ka~wYqg;%E7l$ zt|%m;MZ8J68H!KG(U%Qgenepg&Y{cv!oawq!)B0Fw=WJ%hIq!T;7lB$lgbU8$e?9? z-NP>;+8z3RhS;!(ou3ik3HvV-IKj8dW`s}7#F2g|x`g;cwhITaAutNBkPI5Wm5`Q? z(s30!NoVXqsR#qm<{R_Oz#Y_aQd$!RinNF~gs{Q9%27%7b$Bp&A%s*2|%LKZW^8{CvXbOnG+y!t~_) z{;AQKnIp72CEGl@u+6aCr&$0P;Qi=ss`=4$nT1AIW)C(T=M}N!;sN8Fy?B1bGSGRXyXGnwv@z~M0 z3Hdcic98IbzErLCNfG622=lYPf^r!m{6||hIJ+Wq6P<|0uL6YeRS#T^Y9X6Agx8rdLkn%7IUEvbZRtGy^@i3JK}Y zt4OuUBhqTqcQF*zkk~`w9M|CH88utS@4##XKT{{dXb22$yu=I!CyfJ`EzE9X6xtbs zOO25UIx`gw?)UNLJAO7IL)lUbw+z+70y$@T=EXkBD5ol;4_{0%!O#<}+W7Qao?hVcQ#ebVurMAKjtWk}1ST3sCps#@d<{R=1cA z-L^E!GSH7u1=%vDH5}g{JvP68j0cmU88FW%Ea1>6H+TNf25mRcIU#r)aBQ)SO5aW! z+2Yq}hKz+Fzpzd;;RH-wwNDNveO+F{_Vf`CGjzAMK{xy@A`&h8$!hrq*5^ctZ76f_ zJCFT(`mRTG3bQhq3Trbms^s8lHE&n%_!_=G!@vEm{989qd~R`9x6MngT|If&Rqgdd zax-;!9r*&V~U6PRyEwmuPM~QzSk`7!xP% zJQ@b$qN5lNA}P_mMo~fZsgZT7(qw#XQABFpZJ=cI0jECl=?r}yG~*`MGx+gQEt20m zS+MijQ~ZX$W8<&SVkrI~N-^h?4@KiOyRj*nQ~ZUSzJVe0aQ(^}e~hab3)qlirSJX!{=F0o zo`wIeiWzP3<23?2{_wNoH+ULJq&)8xNE7`Pia+u2v$yE+iN}O)^ImX9X*8jaqZ+iJ@rGHxKQ(S8NKezmk zI`lh_jBHWvoo`UdI}LE@KaRZAf2RDMoslghy`5V^KS>Ge&!zuMytC;$O5ag>Td|3a zOaB#@eq&?{kk@(3<<5lz!_n=_eiflS+T`GU*RG^mi-$-Iqzf>d>E3 z`cs!l{|1Ntw9=ne`t3%sRsP%bU-Qp99Qt!_AK9XJ=iYmH{r7%{{=CwkSNiLSnf2$E z|KA<@i%Ng-GRyzCL;r-*KViy$u~j%8-SR)>(0d;k*#0eIW{X6+5BU?y%C;wX7e~A*- zpG$wEL%;c_BU_Yx^9w?MmJ-&VOTX8l-+q2%i?VNjROruB<*YxK{;)&;#AimfDEkv% z6neZ){JH6MhyIe%UsC!D3F<-lopk8W{n^MCk(~P*DL?fC#@`1W`b&Qy^q2lt=m)=r@&q^D@hS)SF>PE^1tcOZz=uOWtM*>I>grB6H0&L zGRyx_hyKk<|K`i2|7nN*ElU5E%cS4q(4SQLlS+Th>7)X?`n%xJpSt79EuuK}%U3cX zUMK$C^qNC|TIo+K{WS^d!SS={(BH50_ba{U6zJCfO)mYq)c^iBOa0yaZu%XdCk$%D ze-9}A14{4B|A@Yke_Z-s*YXpYkTCRj|L-44ymH6W`=5b+`sfRp?q#1yQY2HJ_nXf^ zU)%A+On: + 80000000: 00000413 li s0,0 + 80000004: 001d5117 auipc sp,0x1d5 + 80000008: ffc10113 addi sp,sp,-4 # 801d5000 <_end> + 8000000c: 58d390ef jal ra,80039d98 <_trm_init> + +0000000080000010 <_Z10AddExStatePvjiPKc>: + 80000010: 00008067 ret + +0000000080000014 <_Z16FCEU_CheatAddRAMijPh>: + 80000014: 00008067 ret + +0000000080000018 <_ZL6JPReadj>: + 80000018: 00157793 andi a5,a0,1 + 8000001c: 00579713 slli a4,a5,0x5 + 80000020: 00057797 auipc a5,0x57 + 80000024: 5f878793 addi a5,a5,1528 # 80057618 + 80000028: 00e787b3 add a5,a5,a4 + 8000002c: 0187b783 ld a5,24(a5) + 80000030: ff010113 addi sp,sp,-16 + 80000034: 00813023 sd s0,0(sp) + 80000038: 0007b783 ld a5,0(a5) + 8000003c: 00113423 sd ra,8(sp) + 80000040: 00157413 andi s0,a0,1 + 80000044: 04078a63 beqz a5,80000098 <_ZL6JPReadj+0x80> + 80000048: 00040513 mv a0,s0 + 8000004c: 000780e7 jalr a5 + 80000050: 00050593 mv a1,a0 + 80000054: 00057797 auipc a5,0x57 + 80000058: 6147b783 ld a5,1556(a5) # 80057668 + 8000005c: 00078c63 beqz a5,80000074 <_ZL6JPReadj+0x5c> + 80000060: 0007b783 ld a5,0(a5) + 80000064: 00078863 beqz a5,80000074 <_ZL6JPReadj+0x5c> + 80000068: 00040513 mv a0,s0 + 8000006c: 000780e7 jalr a5 + 80000070: 00050593 mv a1,a0 + 80000074: 00813083 ld ra,8(sp) + 80000078: 00013403 ld s0,0(sp) + 8000007c: 00057517 auipc a0,0x57 + 80000080: 7ec54503 lbu a0,2028(a0) # 80057868 + 80000084: fc057513 andi a0,a0,-64 + 80000088: 00a5e533 or a0,a1,a0 + 8000008c: 0ff57513 andi a0,a0,255 + 80000090: 01010113 addi sp,sp,16 + 80000094: 00008067 ret + 80000098: 00000593 li a1,0 + 8000009c: fb9ff06f j 80000054 <_ZL6JPReadj+0x3c> + +00000000800000a0 <_ZL5B4016jh>: + 800000a0: fd010113 addi sp,sp,-48 + 800000a4: 01413023 sd s4,0(sp) + 800000a8: 00057a17 auipc s4,0x57 + 800000ac: 5b0a0a13 addi s4,s4,1456 # 80057658 + 800000b0: 010a3783 ld a5,16(s4) + 800000b4: 02813023 sd s0,32(sp) + 800000b8: 02113423 sd ra,40(sp) + 800000bc: 00913c23 sd s1,24(sp) + 800000c0: 01213823 sd s2,16(sp) + 800000c4: 01313423 sd s3,8(sp) + 800000c8: 00058413 mv s0,a1 + 800000cc: 00078a63 beqz a5,800000e0 <_ZL5B4016jh+0x40> + 800000d0: 0087b783 ld a5,8(a5) + 800000d4: 00078663 beqz a5,800000e0 <_ZL5B4016jh+0x40> + 800000d8: 0075f513 andi a0,a1,7 + 800000dc: 000780e7 jalr a5 + 800000e0: 00057917 auipc s2,0x57 + 800000e4: 53890913 addi s2,s2,1336 # 80057618 + 800000e8: 01893783 ld a5,24(s2) + 800000ec: 00147493 andi s1,s0,1 + 800000f0: 0087b783 ld a5,8(a5) + 800000f4: 00078663 beqz a5,80000100 <_ZL5B4016jh+0x60> + 800000f8: 00048513 mv a0,s1 + 800000fc: 000780e7 jalr a5 + 80000100: 03893783 ld a5,56(s2) + 80000104: 0087b783 ld a5,8(a5) + 80000108: 00078663 beqz a5,80000114 <_ZL5B4016jh+0x74> + 8000010c: 00048513 mv a0,s1 + 80000110: 000780e7 jalr a5 + 80000114: 001cc997 auipc s3,0x1cc + 80000118: 9d698993 addi s3,s3,-1578 # 801cbaea <_ZL10LastStrobe> + 8000011c: 0009c783 lbu a5,0(s3) + 80000120: 0017f793 andi a5,a5,1 + 80000124: 04078263 beqz a5,80000168 <_ZL5B4016jh+0xc8> + 80000128: 04049063 bnez s1,80000168 <_ZL5B4016jh+0xc8> + 8000012c: 01893783 ld a5,24(s2) + 80000130: 0107b783 ld a5,16(a5) + 80000134: 00078663 beqz a5,80000140 <_ZL5B4016jh+0xa0> + 80000138: 00000513 li a0,0 + 8000013c: 000780e7 jalr a5 + 80000140: 03893783 ld a5,56(s2) + 80000144: 0107b783 ld a5,16(a5) + 80000148: 00078663 beqz a5,80000154 <_ZL5B4016jh+0xb4> + 8000014c: 00100513 li a0,1 + 80000150: 000780e7 jalr a5 + 80000154: 010a3783 ld a5,16(s4) + 80000158: 00078863 beqz a5,80000168 <_ZL5B4016jh+0xc8> + 8000015c: 0107b783 ld a5,16(a5) + 80000160: 00078463 beqz a5,80000168 <_ZL5B4016jh+0xc8> + 80000164: 000780e7 jalr a5 + 80000168: 02813083 ld ra,40(sp) + 8000016c: 001cc797 auipc a5,0x1cc + 80000170: 96878e23 sb s0,-1668(a5) # 801cbae8 + 80000174: 02013403 ld s0,32(sp) + 80000178: 00998023 sb s1,0(s3) + 8000017c: 01013903 ld s2,16(sp) + 80000180: 01813483 ld s1,24(sp) + 80000184: 00813983 ld s3,8(sp) + 80000188: 00013a03 ld s4,0(sp) + 8000018c: 03010113 addi sp,sp,48 + 80000190: 00008067 ret + +0000000080000194 <_ZL6ReadGPi>: + 80000194: 001cc697 auipc a3,0x1cc + 80000198: 95c68693 addi a3,a3,-1700 # 801cbaf0 <_ZL11joy_readbit> + 8000019c: 00a68733 add a4,a3,a0 + 800001a0: 00074703 lbu a4,0(a4) + 800001a4: 00700593 li a1,7 + 800001a8: 00050793 mv a5,a0 + 800001ac: 001cc617 auipc a2,0x1cc + 800001b0: 93d64603 lbu a2,-1731(a2) # 801cbae9 <_ZL10FSAttached> + 800001b4: 04e5fc63 bgeu a1,a4,8000020c <_ZL6ReadGPi+0x78> + 800001b8: 0025051b addiw a0,a0,2 + 800001bc: 001cc597 auipc a1,0x1cc + 800001c0: 93c58593 addi a1,a1,-1732 # 801cbaf8 + 800001c4: 00a585b3 add a1,a1,a0 + 800001c8: 00f00813 li a6,15 + 800001cc: 0005c583 lbu a1,0(a1) + 800001d0: 00000513 li a0,0 + 800001d4: 06e87663 bgeu a6,a4,80000240 <_ZL6ReadGPi+0xac> + 800001d8: 0007059b sext.w a1,a4 + 800001dc: 04060e63 beqz a2,80000238 <_ZL6ReadGPi+0xa4> + 800001e0: 01300613 li a2,19 + 800001e4: 40f6063b subw a2,a2,a5 + 800001e8: 04b60863 beq a2,a1,80000238 <_ZL6ReadGPi+0xa4> + 800001ec: 001cc617 auipc a2,0x1cc + 800001f0: 59862603 lw a2,1432(a2) # 801cc784 + 800001f4: 00061a63 bnez a2,80000208 <_ZL6ReadGPi+0x74> + 800001f8: 00f687b3 add a5,a3,a5 + 800001fc: 0017071b addiw a4,a4,1 + 80000200: 00e78023 sb a4,0(a5) + 80000204: 00008067 ret + 80000208: 00008067 ret + 8000020c: 001cc597 auipc a1,0x1cc + 80000210: 8ec58593 addi a1,a1,-1812 # 801cbaf8 + 80000214: 00a585b3 add a1,a1,a0 + 80000218: 0005c503 lbu a0,0(a1) + 8000021c: 0007059b sext.w a1,a4 + 80000220: 40e5553b sraw a0,a0,a4 + 80000224: 00157513 andi a0,a0,1 + 80000228: fc0602e3 beqz a2,800001ec <_ZL6ReadGPi+0x58> + 8000022c: 01300613 li a2,19 + 80000230: 40f6063b subw a2,a2,a5 + 80000234: fab61ce3 bne a2,a1,800001ec <_ZL6ReadGPi+0x58> + 80000238: 00100513 li a0,1 + 8000023c: fb1ff06f j 800001ec <_ZL6ReadGPi+0x58> + 80000240: 00777513 andi a0,a4,7 + 80000244: 40a5d5bb sraw a1,a1,a0 + 80000248: 0015f513 andi a0,a1,1 + 8000024c: f8dff06f j 800001d8 <_ZL6ReadGPi+0x44> + +0000000080000250 <_ZL8StrobeGPi>: + 80000250: 001cc797 auipc a5,0x1cc + 80000254: 8a078793 addi a5,a5,-1888 # 801cbaf0 <_ZL11joy_readbit> + 80000258: 00a787b3 add a5,a5,a0 + 8000025c: 00078023 sb zero,0(a5) + 80000260: 00008067 ret + +0000000080000264 <_ZL8UpdateGPiPvi>: + 80000264: 02051463 bnez a0,8000028c <_ZL8UpdateGPiPvi+0x28> + 80000268: 00057717 auipc a4,0x57 + 8000026c: 3c073703 ld a4,960(a4) # 80057628 + 80000270: 00072683 lw a3,0(a4) + 80000274: 001cc797 auipc a5,0x1cc + 80000278: 88478793 addi a5,a5,-1916 # 801cbaf8 + 8000027c: 00d78023 sb a3,0(a5) + 80000280: 00275703 lhu a4,2(a4) + 80000284: 00e78123 sb a4,2(a5) + 80000288: 00008067 ret + 8000028c: 00057697 auipc a3,0x57 + 80000290: 3bc6b683 ld a3,956(a3) # 80057648 + 80000294: 0006a783 lw a5,0(a3) + 80000298: 001cc717 auipc a4,0x1cc + 8000029c: 86070713 addi a4,a4,-1952 # 801cbaf8 + 800002a0: 0087d79b srliw a5,a5,0x8 + 800002a4: 00f700a3 sb a5,1(a4) + 800002a8: 0036c783 lbu a5,3(a3) + 800002ac: 00f701a3 sb a5,3(a4) + 800002b0: 00008067 ret + +00000000800002b4 <_Z16FCEU_UpdateInputv>: + 800002b4: ff010113 addi sp,sp,-16 + 800002b8: 00813023 sd s0,0(sp) + 800002bc: 00057417 auipc s0,0x57 + 800002c0: 35c40413 addi s0,s0,860 # 80057618 + 800002c4: 01843783 ld a5,24(s0) + 800002c8: 00113423 sd ra,8(sp) + 800002cc: 0187b783 ld a5,24(a5) + 800002d0: 00078a63 beqz a5,800002e4 <_Z16FCEU_UpdateInputv+0x30> + 800002d4: 00442603 lw a2,4(s0) + 800002d8: 01043583 ld a1,16(s0) + 800002dc: 00000513 li a0,0 + 800002e0: 000780e7 jalr a5 + 800002e4: 03843783 ld a5,56(s0) + 800002e8: 0187b783 ld a5,24(a5) + 800002ec: 00078a63 beqz a5,80000300 <_Z16FCEU_UpdateInputv+0x4c> + 800002f0: 02442603 lw a2,36(s0) + 800002f4: 03043583 ld a1,48(s0) + 800002f8: 00100513 li a0,1 + 800002fc: 000780e7 jalr a5 + 80000300: 00057797 auipc a5,0x57 + 80000304: 35878793 addi a5,a5,856 # 80057658 + 80000308: 0107b703 ld a4,16(a5) + 8000030c: 01873303 ld t1,24(a4) + 80000310: 00030e63 beqz t1,8000032c <_Z16FCEU_UpdateInputv+0x78> + 80000314: 00013403 ld s0,0(sp) + 80000318: 00813083 ld ra,8(sp) + 8000031c: 0007a583 lw a1,0(a5) + 80000320: 0087b503 ld a0,8(a5) + 80000324: 01010113 addi sp,sp,16 + 80000328: 00030067 jr t1 + 8000032c: 00813083 ld ra,8(sp) + 80000330: 00013403 ld s0,0(sp) + 80000334: 01010113 addi sp,sp,16 + 80000338: 00008067 ret + +000000008000033c <_Z14FCEUI_SetInputi3ESIPvi>: + 8000033c: 00551793 slli a5,a0,0x5 + 80000340: 00057517 auipc a0,0x57 + 80000344: 2d850513 addi a0,a0,728 # 80057618 + 80000348: 00f50533 add a0,a0,a5 + 8000034c: 00d52223 sw a3,4(a0) + 80000350: 00b52423 sw a1,8(a0) + 80000354: 00c53823 sd a2,16(a0) + 80000358: 00058e63 beqz a1,80000374 <_Z14FCEUI_SetInputi3ESIPvi+0x38> + 8000035c: 00100793 li a5,1 + 80000360: 02f59063 bne a1,a5,80000380 <_Z14FCEUI_SetInputi3ESIPvi+0x44> + 80000364: 00046797 auipc a5,0x46 + 80000368: 69478793 addi a5,a5,1684 # 800469f8 <_ZL3GPC> + 8000036c: 00f53c23 sd a5,24(a0) + 80000370: 00008067 ret + 80000374: 00057797 auipc a5,0x57 + 80000378: 24478793 addi a5,a5,580 # 800575b8 <_ZL10DummyJPort> + 8000037c: 00f53c23 sd a5,24(a0) + 80000380: 00008067 ret + +0000000080000384 <_Z16FCEUI_SetInputFC5ESIFCPvi>: + 80000384: 00057797 auipc a5,0x57 + 80000388: 2d478793 addi a5,a5,724 # 80057658 + 8000038c: 00c7a023 sw a2,0(a5) + 80000390: 00a7a223 sw a0,4(a5) + 80000394: 00b7b423 sd a1,8(a5) + 80000398: 00051863 bnez a0,800003a8 <_Z16FCEUI_SetInputFC5ESIFCPvi+0x24> + 8000039c: 00057717 auipc a4,0x57 + 800003a0: 24c70713 addi a4,a4,588 # 800575e8 <_ZL11DummyPortFC> + 800003a4: 00e7b823 sd a4,16(a5) + 800003a8: 00008067 ret + +00000000800003ac <_Z15InitializeInputv>: + 800003ac: ff010113 addi sp,sp,-16 + 800003b0: 00200613 li a2,2 + 800003b4: 00000593 li a1,0 + 800003b8: 001cb517 auipc a0,0x1cb + 800003bc: 73850513 addi a0,a0,1848 # 801cbaf0 <_ZL11joy_readbit> + 800003c0: 00113423 sd ra,8(sp) + 800003c4: 00813023 sd s0,0(sp) + 800003c8: 6603b0ef jal ra,8003ba28 + 800003cc: 00400613 li a2,4 + 800003d0: 00000593 li a1,0 + 800003d4: 001cb517 auipc a0,0x1cb + 800003d8: 72450513 addi a0,a0,1828 # 801cbaf8 + 800003dc: 64c3b0ef jal ra,8003ba28 + 800003e0: 00004437 lui s0,0x4 + 800003e4: 00000617 auipc a2,0x0 + 800003e8: c3460613 addi a2,a2,-972 # 80000018 <_ZL6JPReadj> + 800003ec: 01740593 addi a1,s0,23 # 4017 <_entry_offset+0x4017> + 800003f0: 01640513 addi a0,s0,22 + 800003f4: 001cb797 auipc a5,0x1cb + 800003f8: 6e078b23 sb zero,1782(a5) # 801cbaea <_ZL10LastStrobe> + 800003fc: 620330ef jal ra,80033a1c <_Z14SetReadHandleriiPFhjE> + 80000400: 01640593 addi a1,s0,22 + 80000404: 00000617 auipc a2,0x0 + 80000408: c9c60613 addi a2,a2,-868 # 800000a0 <_ZL5B4016jh> + 8000040c: 00058513 mv a0,a1 + 80000410: 718330ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 80000414: 00057797 auipc a5,0x57 + 80000418: 20478793 addi a5,a5,516 # 80057618 + 8000041c: 0087a703 lw a4,8(a5) + 80000420: 0a070263 beqz a4,800004c4 <_Z15InitializeInputv+0x118> + 80000424: 00100693 li a3,1 + 80000428: 00d71863 bne a4,a3,80000438 <_Z15InitializeInputv+0x8c> + 8000042c: 00046717 auipc a4,0x46 + 80000430: 5cc70713 addi a4,a4,1484 # 800469f8 <_ZL3GPC> + 80000434: 00e7bc23 sd a4,24(a5) + 80000438: 0287a703 lw a4,40(a5) + 8000043c: 06070463 beqz a4,800004a4 <_Z15InitializeInputv+0xf8> + 80000440: 00100693 li a3,1 + 80000444: 04d70063 beq a4,a3,80000484 <_Z15InitializeInputv+0xd8> + 80000448: 00057797 auipc a5,0x57 + 8000044c: 21078793 addi a5,a5,528 # 80057658 + 80000450: 0047a703 lw a4,4(a5) + 80000454: 00070a63 beqz a4,80000468 <_Z15InitializeInputv+0xbc> + 80000458: 00813083 ld ra,8(sp) + 8000045c: 00013403 ld s0,0(sp) + 80000460: 01010113 addi sp,sp,16 + 80000464: 00008067 ret + 80000468: 00813083 ld ra,8(sp) + 8000046c: 00013403 ld s0,0(sp) + 80000470: 00057717 auipc a4,0x57 + 80000474: 17870713 addi a4,a4,376 # 800575e8 <_ZL11DummyPortFC> + 80000478: 00e7b823 sd a4,16(a5) + 8000047c: 01010113 addi sp,sp,16 + 80000480: 00008067 ret + 80000484: 00046717 auipc a4,0x46 + 80000488: 57470713 addi a4,a4,1396 # 800469f8 <_ZL3GPC> + 8000048c: 02e7bc23 sd a4,56(a5) + 80000490: 00057797 auipc a5,0x57 + 80000494: 1c878793 addi a5,a5,456 # 80057658 + 80000498: 0047a703 lw a4,4(a5) + 8000049c: fa071ee3 bnez a4,80000458 <_Z15InitializeInputv+0xac> + 800004a0: fc9ff06f j 80000468 <_Z15InitializeInputv+0xbc> + 800004a4: 00057717 auipc a4,0x57 + 800004a8: 11470713 addi a4,a4,276 # 800575b8 <_ZL10DummyJPort> + 800004ac: 02e7bc23 sd a4,56(a5) + 800004b0: 00057797 auipc a5,0x57 + 800004b4: 1a878793 addi a5,a5,424 # 80057658 + 800004b8: 0047a703 lw a4,4(a5) + 800004bc: f8071ee3 bnez a4,80000458 <_Z15InitializeInputv+0xac> + 800004c0: fa9ff06f j 80000468 <_Z15InitializeInputv+0xbc> + 800004c4: 00057717 auipc a4,0x57 + 800004c8: 0f470713 addi a4,a4,244 # 800575b8 <_ZL10DummyJPort> + 800004cc: 00e7bc23 sd a4,24(a5) + 800004d0: f69ff06f j 80000438 <_Z15InitializeInputv+0x8c> + +00000000800004d4 <_Z23FCEUI_SetInputFourscoreb>: + 800004d4: 001cb797 auipc a5,0x1cb + 800004d8: 60a78aa3 sb a0,1557(a5) # 801cbae9 <_ZL10FSAttached> + 800004dc: 00008067 ret + +00000000800004e0 <_Z10FCEU_fopenPKcS0_S0_PciPS0_Pi>: + 800004e0: fe010113 addi sp,sp,-32 + 800004e4: 00113c23 sd ra,24(sp) + 800004e8: 00813823 sd s0,16(sp) + 800004ec: 00913423 sd s1,8(sp) + 800004f0: 01213023 sd s2,0(sp) + 800004f4: 0e059263 bnez a1,800005d8 <_Z10FCEU_fopenPKcS0_S0_PciPS0_Pi+0xf8> + 800004f8: 0003d597 auipc a1,0x3d + 800004fc: 83858593 addi a1,a1,-1992 # 8003cd30 <_etext+0x4c> + 80000500: 00050913 mv s2,a0 + 80000504: 00060513 mv a0,a2 + 80000508: 00060413 mv s0,a2 + 8000050c: 625390ef jal ra,8003a330 + 80000510: 00050493 mv s1,a0 + 80000514: 0003d597 auipc a1,0x3d + 80000518: 82458593 addi a1,a1,-2012 # 8003cd38 <_etext+0x54> + 8000051c: 00040513 mv a0,s0 + 80000520: 611390ef jal ra,8003a330 + 80000524: 06049663 bnez s1,80000590 <_Z10FCEU_fopenPKcS0_S0_PciPS0_Pi+0xb0> + 80000528: 0a050063 beqz a0,800005c8 <_Z10FCEU_fopenPKcS0_S0_PciPS0_Pi+0xe8> + 8000052c: 00040593 mv a1,s0 + 80000530: 00090513 mv a0,s2 + 80000534: 2280e0ef jal ra,8000e75c <_Z18FCEUD_UTF8_fstreamPKcS0_> + 80000538: 00050413 mv s0,a0 + 8000053c: 04050c63 beqz a0,80000594 <_Z10FCEU_fopenPKcS0_S0_PciPS0_Pi+0xb4> + 80000540: 01800513 li a0,24 + 80000544: 665390ef jal ra,8003a3a8 + 80000548: fff00793 li a5,-1 + 8000054c: 00f53423 sd a5,8(a0) + 80000550: 02842703 lw a4,40(s0) + 80000554: 00853023 sd s0,0(a0) + 80000558: 00000793 li a5,0 + 8000055c: 0007069b sext.w a3,a4 + 80000560: 04d4c863 blt s1,a3,800005b0 <_Z10FCEU_fopenPKcS0_S0_PciPS0_Pi+0xd0> + 80000564: 00f52823 sw a5,16(a0) + 80000568: 02842783 lw a5,40(s0) + 8000056c: 02042223 sw zero,36(s0) + 80000570: 0207d463 bgez a5,80000598 <_Z10FCEU_fopenPKcS0_S0_PciPS0_Pi+0xb8> + 80000574: 01813083 ld ra,24(sp) + 80000578: 02f42223 sw a5,36(s0) + 8000057c: 01013403 ld s0,16(sp) + 80000580: 00813483 ld s1,8(sp) + 80000584: 00013903 ld s2,0(sp) + 80000588: 02010113 addi sp,sp,32 + 8000058c: 00008067 ret + 80000590: 02051c63 bnez a0,800005c8 <_Z10FCEU_fopenPKcS0_S0_PciPS0_Pi+0xe8> + 80000594: 00000513 li a0,0 + 80000598: 01813083 ld ra,24(sp) + 8000059c: 01013403 ld s0,16(sp) + 800005a0: 00813483 ld s1,8(sp) + 800005a4: 00013903 ld s2,0(sp) + 800005a8: 02010113 addi sp,sp,32 + 800005ac: 00008067 ret + 800005b0: 00070793 mv a5,a4 + 800005b4: 00f52823 sw a5,16(a0) + 800005b8: 02842783 lw a5,40(s0) + 800005bc: 02042223 sw zero,36(s0) + 800005c0: fc07dce3 bgez a5,80000598 <_Z10FCEU_fopenPKcS0_S0_PciPS0_Pi+0xb8> + 800005c4: fb1ff06f j 80000574 <_Z10FCEU_fopenPKcS0_S0_PciPS0_Pi+0x94> + 800005c8: 0003c517 auipc a0,0x3c + 800005cc: 77850513 addi a0,a0,1912 # 8003cd40 <_etext+0x5c> + 800005d0: 7793a0ef jal ra,8003b548 + 800005d4: fc1ff06f j 80000594 <_Z10FCEU_fopenPKcS0_S0_PciPS0_Pi+0xb4> + 800005d8: 02500613 li a2,37 + 800005dc: 0003c597 auipc a1,0x3c + 800005e0: 70c58593 addi a1,a1,1804 # 8003cce8 <_etext+0x4> + 800005e4: 0003c517 auipc a0,0x3c + 800005e8: 72c50513 addi a0,a0,1836 # 8003cd10 <_etext+0x2c> + 800005ec: 75d3a0ef jal ra,8003b548 + 800005f0: 00100513 li a0,1 + 800005f4: 780390ef jal ra,80039d74 + +00000000800005f8 <_Z11FCEU_fcloseP8FCEUFILE>: + 800005f8: ff010113 addi sp,sp,-16 + 800005fc: 00813023 sd s0,0(sp) + 80000600: 00050413 mv s0,a0 + 80000604: 00053503 ld a0,0(a0) + 80000608: 00113423 sd ra,8(sp) + 8000060c: 00050463 beqz a0,80000614 <_Z11FCEU_fcloseP8FCEUFILE+0x1c> + 80000610: 5a9390ef jal ra,8003a3b8 + 80000614: 00040513 mv a0,s0 + 80000618: 5a1390ef jal ra,8003a3b8 + 8000061c: 00813083 ld ra,8(sp) + 80000620: 00013403 ld s0,0(sp) + 80000624: 00100513 li a0,1 + 80000628: 01010113 addi sp,sp,16 + 8000062c: 00008067 ret + +0000000080000630 <_Z10FCEU_freadPvmmP8FCEUFILE>: + 80000630: fd010113 addi sp,sp,-48 + 80000634: 00058793 mv a5,a1 + 80000638: 00913c23 sd s1,24(sp) + 8000063c: 0006b483 ld s1,0(a3) + 80000640: 01313423 sd s3,8(sp) + 80000644: 00060593 mv a1,a2 + 80000648: 00050993 mv s3,a0 + 8000064c: 00078513 mv a0,a5 + 80000650: 02813023 sd s0,32(sp) + 80000654: 01213823 sd s2,16(sp) + 80000658: 02113423 sd ra,40(sp) + 8000065c: 760390ef jal ra,80039dbc <__muldi3> + 80000660: 0244a783 lw a5,36(s1) + 80000664: 0284a403 lw s0,40(s1) + 80000668: 00050913 mv s2,a0 + 8000066c: 40f4043b subw s0,s0,a5 + 80000670: 00857463 bgeu a0,s0,80000678 <_Z10FCEU_freadPvmmP8FCEUFILE+0x48> + 80000674: 00050413 mv s0,a0 + 80000678: 0004b583 ld a1,0(s1) + 8000067c: 00040613 mv a2,s0 + 80000680: 00098513 mv a0,s3 + 80000684: 00f585b3 add a1,a1,a5 + 80000688: 4cc3b0ef jal ra,8003bb54 + 8000068c: 0244a783 lw a5,36(s1) + 80000690: 008787bb addw a5,a5,s0 + 80000694: 02f4a223 sw a5,36(s1) + 80000698: 01247663 bgeu s0,s2,800006a4 <_Z10FCEU_freadPvmmP8FCEUFILE+0x74> + 8000069c: 00100793 li a5,1 + 800006a0: 02f48023 sb a5,32(s1) + 800006a4: 02813083 ld ra,40(sp) + 800006a8: 00040513 mv a0,s0 + 800006ac: 02013403 ld s0,32(sp) + 800006b0: 01813483 ld s1,24(sp) + 800006b4: 01013903 ld s2,16(sp) + 800006b8: 00813983 ld s3,8(sp) + 800006bc: 03010113 addi sp,sp,48 + 800006c0: 00008067 ret + +00000000800006c4 <_Z21SetNESDeemph_OldHackyhi>: + 800006c4: fa010113 addi sp,sp,-96 + 800006c8: 01813823 sd s8,16(sp) + 800006cc: 04113c23 sd ra,88(sp) + 800006d0: 04813823 sd s0,80(sp) + 800006d4: 04913423 sd s1,72(sp) + 800006d8: 05213023 sd s2,64(sp) + 800006dc: 03313c23 sd s3,56(sp) + 800006e0: 03413823 sd s4,48(sp) + 800006e4: 03513423 sd s5,40(sp) + 800006e8: 03613023 sd s6,32(sp) + 800006ec: 01713c23 sd s7,24(sp) + 800006f0: 01913423 sd s9,8(sp) + 800006f4: 01a13023 sd s10,0(sp) + 800006f8: 00050c13 mv s8,a0 + 800006fc: 12059a63 bnez a1,80000830 <_Z21SetNESDeemph_OldHackyhi+0x16c> + 80000700: 001cb797 auipc a5,0x1cb + 80000704: 3fc7c783 lbu a5,1020(a5) # 801cbafc <_ZL5lastd> + 80000708: 0ea78863 beq a5,a0,800007f8 <_Z21SetNESDeemph_OldHackyhi+0x134> + 8000070c: 0e0c0663 beqz s8,800007f8 <_Z21SetNESDeemph_OldHackyhi+0x134> + 80000710: fffc079b addiw a5,s8,-1 + 80000714: 00179793 slli a5,a5,0x1 + 80000718: 0003c617 auipc a2,0x3c + 8000071c: 6c860613 addi a2,a2,1736 # 8003cde0 <_ZZ21SetNESDeemph_OldHackyhiE5rtmul> + 80000720: 0003c697 auipc a3,0x3c + 80000724: 6b068693 addi a3,a3,1712 # 8003cdd0 <_ZZ21SetNESDeemph_OldHackyhiE5gtmul> + 80000728: 0003c717 auipc a4,0x3c + 8000072c: 69870713 addi a4,a4,1688 # 8003cdc0 <_ZZ21SetNESDeemph_OldHackyhiE5btmul> + 80000730: 00f60633 add a2,a2,a5 + 80000734: 00f686b3 add a3,a3,a5 + 80000738: 00f707b3 add a5,a4,a5 + 8000073c: 00065b83 lhu s7,0(a2) + 80000740: 0006db03 lhu s6,0(a3) + 80000744: 0007da83 lhu s5,0(a5) + 80000748: 00000913 li s2,0 + 8000074c: 00000d13 li s10,0 + 80000750: 001cb997 auipc s3,0x1cb + 80000754: 3b898993 addi s3,s3,952 # 801cbb08 + 80000758: 0ff00493 li s1,255 + 8000075c: 04000a13 li s4,64 + 80000760: 0009b403 ld s0,0(s3) + 80000764: 000b8593 mv a1,s7 + 80000768: 01240433 add s0,s0,s2 + 8000076c: 00044503 lbu a0,0(s0) + 80000770: 00390913 addi s2,s2,3 + 80000774: 648390ef jal ra,80039dbc <__muldi3> + 80000778: 00050c93 mv s9,a0 + 8000077c: 00144503 lbu a0,1(s0) + 80000780: 000b0593 mv a1,s6 + 80000784: 00fcdc9b srliw s9,s9,0xf + 80000788: 634390ef jal ra,80039dbc <__muldi3> + 8000078c: 00050613 mv a2,a0 + 80000790: 00244503 lbu a0,2(s0) + 80000794: 000a8593 mv a1,s5 + 80000798: 00f6541b srliw s0,a2,0xf + 8000079c: 620390ef jal ra,80039dbc <__muldi3> + 800007a0: 00050693 mv a3,a0 + 800007a4: 0004071b sext.w a4,s0 + 800007a8: 040d6513 ori a0,s10,64 + 800007ac: 00f6d81b srliw a6,a3,0xf + 800007b0: 00070613 mv a2,a4 + 800007b4: 000c879b sext.w a5,s9 + 800007b8: 0ff57513 andi a0,a0,255 + 800007bc: 001d0d1b addiw s10,s10,1 + 800007c0: 00f6d69b srliw a3,a3,0xf + 800007c4: 0104f463 bgeu s1,a6,800007cc <_Z21SetNESDeemph_OldHackyhi+0x108> + 800007c8: 0ff00693 li a3,255 + 800007cc: 0ff6f693 andi a3,a3,255 + 800007d0: 00e4f463 bgeu s1,a4,800007d8 <_Z21SetNESDeemph_OldHackyhi+0x114> + 800007d4: 0ff00613 li a2,255 + 800007d8: 0ff67613 andi a2,a2,255 + 800007dc: 00f4f463 bgeu s1,a5,800007e4 <_Z21SetNESDeemph_OldHackyhi+0x120> + 800007e0: 0ff00c93 li s9,255 + 800007e4: 0ffcf593 andi a1,s9,255 + 800007e8: 2540e0ef jal ra,8000ea3c <_Z16FCEUD_SetPalettehhhh> + 800007ec: f74d1ae3 bne s10,s4,80000760 <_Z21SetNESDeemph_OldHackyhi+0x9c> + 800007f0: 001cb797 auipc a5,0x1cb + 800007f4: 31878623 sb s8,780(a5) # 801cbafc <_ZL5lastd> + 800007f8: 05813083 ld ra,88(sp) + 800007fc: 05013403 ld s0,80(sp) + 80000800: 04813483 ld s1,72(sp) + 80000804: 04013903 ld s2,64(sp) + 80000808: 03813983 ld s3,56(sp) + 8000080c: 03013a03 ld s4,48(sp) + 80000810: 02813a83 ld s5,40(sp) + 80000814: 02013b03 ld s6,32(sp) + 80000818: 01813b83 ld s7,24(sp) + 8000081c: 01013c03 ld s8,16(sp) + 80000820: 00813c83 ld s9,8(sp) + 80000824: 00013d03 ld s10,0(sp) + 80000828: 06010113 addi sp,sp,96 + 8000082c: 00008067 ret + 80000830: 00000913 li s2,0 + 80000834: 00000493 li s1,0 + 80000838: 001cb997 auipc s3,0x1cb + 8000083c: 2d098993 addi s3,s3,720 # 801cbb08 + 80000840: 04000413 li s0,64 + 80000844: 0009b783 ld a5,0(s3) + 80000848: fc04e513 ori a0,s1,-64 + 8000084c: 0ff57513 andi a0,a0,255 + 80000850: 012787b3 add a5,a5,s2 + 80000854: 0007c803 lbu a6,0(a5) + 80000858: 0017c703 lbu a4,1(a5) + 8000085c: 0027c783 lbu a5,2(a5) + 80000860: 0018159b slliw a1,a6,0x1 + 80000864: 0017161b slliw a2,a4,0x1 + 80000868: 0017969b slliw a3,a5,0x1 + 8000086c: 010585bb addw a1,a1,a6 + 80000870: 00e6063b addw a2,a2,a4 + 80000874: 00f686bb addw a3,a3,a5 + 80000878: 0026d69b srliw a3,a3,0x2 + 8000087c: 0026561b srliw a2,a2,0x2 + 80000880: 0025d59b srliw a1,a1,0x2 + 80000884: 0ff6f693 andi a3,a3,255 + 80000888: 0ff67613 andi a2,a2,255 + 8000088c: 0ff5f593 andi a1,a1,255 + 80000890: 0014849b addiw s1,s1,1 + 80000894: 1a80e0ef jal ra,8000ea3c <_Z16FCEUD_SetPalettehhhh> + 80000898: 00390913 addi s2,s2,3 + 8000089c: fa8494e3 bne s1,s0,80000844 <_Z21SetNESDeemph_OldHackyhi+0x180> + 800008a0: e6dff06f j 8000070c <_Z21SetNESDeemph_OldHackyhi+0x48> + +00000000800008a4 <_Z17FCEU_ResetPalettev.part.0>: + 800008a4: 001cb797 auipc a5,0x1cb + 800008a8: 25c7a783 lw a5,604(a5) # 801cbb00 + 800008ac: 00379713 slli a4,a5,0x3 + 800008b0: 0003c797 auipc a5,0x3c + 800008b4: 4d078793 addi a5,a5,1232 # 8003cd80 <_ZL15default_palette> + 800008b8: 00e787b3 add a5,a5,a4 + 800008bc: 0007b783 ld a5,0(a5) + 800008c0: fd010113 addi sp,sp,-48 + 800008c4: 01213823 sd s2,16(sp) + 800008c8: 001cb917 auipc s2,0x1cb + 800008cc: 24090913 addi s2,s2,576 # 801cbb08 + 800008d0: 02813023 sd s0,32(sp) + 800008d4: 00913c23 sd s1,24(sp) + 800008d8: 01313423 sd s3,8(sp) + 800008dc: 02113423 sd ra,40(sp) + 800008e0: 00046497 auipc s1,0x46 + 800008e4: 74848493 addi s1,s1,1864 # 80047028 + 800008e8: 00f93023 sd a5,0(s2) + 800008ec: 00000413 li s0,0 + 800008f0: 01700993 li s3,23 + 800008f4: 0024c683 lbu a3,2(s1) + 800008f8: 0014c603 lbu a2,1(s1) + 800008fc: 0004c583 lbu a1,0(s1) + 80000900: 0ff47513 andi a0,s0,255 + 80000904: 0014041b addiw s0,s0,1 + 80000908: 1340e0ef jal ra,8000ea3c <_Z16FCEUD_SetPalettehhhh> + 8000090c: 00348493 addi s1,s1,3 + 80000910: ff3412e3 bne s0,s3,800008f4 <_Z17FCEU_ResetPalettev.part.0+0x50> + 80000914: 10000493 li s1,256 + 80000918: 0ff47513 andi a0,s0,255 + 8000091c: 0cd00693 li a3,205 + 80000920: 0014041b addiw s0,s0,1 + 80000924: 0cd00613 li a2,205 + 80000928: 0cd00593 li a1,205 + 8000092c: 1100e0ef jal ra,8000ea3c <_Z16FCEUD_SetPalettehhhh> + 80000930: fe9414e3 bne s0,s1,80000918 <_Z17FCEU_ResetPalettev.part.0+0x74> + 80000934: 08000413 li s0,128 + 80000938: 00000493 li s1,0 + 8000093c: 0c000993 li s3,192 + 80000940: 00093783 ld a5,0(s2) + 80000944: 00040513 mv a0,s0 + 80000948: 0014041b addiw s0,s0,1 + 8000094c: 009787b3 add a5,a5,s1 + 80000950: 0027c683 lbu a3,2(a5) + 80000954: 0017c603 lbu a2,1(a5) + 80000958: 0007c583 lbu a1,0(a5) + 8000095c: 00348493 addi s1,s1,3 + 80000960: 0ff47413 andi s0,s0,255 + 80000964: 0d80e0ef jal ra,8000ea3c <_Z16FCEUD_SetPalettehhhh> + 80000968: fd349ce3 bne s1,s3,80000940 <_Z17FCEU_ResetPalettev.part.0+0x9c> + 8000096c: 02013403 ld s0,32(sp) + 80000970: 02813083 ld ra,40(sp) + 80000974: 01813483 ld s1,24(sp) + 80000978: 01013903 ld s2,16(sp) + 8000097c: 00813983 ld s3,8(sp) + 80000980: 001cb517 auipc a0,0x1cb + 80000984: 17c54503 lbu a0,380(a0) # 801cbafc <_ZL5lastd> + 80000988: 00100593 li a1,1 + 8000098c: 03010113 addi sp,sp,48 + 80000990: d35ff06f j 800006c4 <_Z21SetNESDeemph_OldHackyhi> + +0000000080000994 <_Z20FCEU_LoadGamePalettev>: + 80000994: 001cc797 auipc a5,0x1cc + 80000998: cb47b783 ld a5,-844(a5) # 801cc648 + 8000099c: 00078463 beqz a5,800009a4 <_Z20FCEU_LoadGamePalettev+0x10> + 800009a0: f05ff06f j 800008a4 <_Z17FCEU_ResetPalettev.part.0> + 800009a4: 00008067 ret + +00000000800009a8 <_Z15FCEUI_SetNTSCTHbii>: + 800009a8: 001cc797 auipc a5,0x1cc + 800009ac: ca07b783 ld a5,-864(a5) # 801cc648 + 800009b0: 00078463 beqz a5,800009b8 <_Z15FCEUI_SetNTSCTHbii+0x10> + 800009b4: ef1ff06f j 800008a4 <_Z17FCEU_ResetPalettev.part.0> + 800009b8: 00008067 ret + +00000000800009bc <_Z17FCEU_ResetPalettev>: + 800009bc: 001cc797 auipc a5,0x1cc + 800009c0: c8c7b783 ld a5,-884(a5) # 801cc648 + 800009c4: 00078463 beqz a5,800009cc <_Z17FCEU_ResetPalettev+0x10> + 800009c8: eddff06f j 800008a4 <_Z17FCEU_ResetPalettev.part.0> + 800009cc: 00008067 ret + +00000000800009d0 <_Z7ShowFPSv.part.0>: + 800009d0: fd010113 addi sp,sp,-48 + 800009d4: 00913c23 sd s1,24(sp) + 800009d8: 01213823 sd s2,16(sp) + 800009dc: 01313423 sd s3,8(sp) + 800009e0: 01413023 sd s4,0(sp) + 800009e4: 02113423 sd ra,40(sp) + 800009e8: 02813023 sd s0,32(sp) + 800009ec: 001cb497 auipc s1,0x1cb + 800009f0: 14c48493 addi s1,s1,332 # 801cbb38 <_ZL9boopcount> + 800009f4: 7490d0ef jal ra,8000e93c <_Z13FCEUD_GetTimev> + 800009f8: 0004a683 lw a3,0(s1) + 800009fc: 00057797 auipc a5,0x57 + 80000a00: c7478793 addi a5,a5,-908 # 80057670 <_ZL4boop> + 80000a04: 001cc717 auipc a4,0x1cc + 80000a08: c5c74703 lbu a4,-932(a4) # 801cc660 + 80000a0c: 00369613 slli a2,a3,0x3 + 80000a10: 00c785b3 add a1,a5,a2 + 80000a14: 0005ba03 ld s4,0(a1) + 80000a18: 0005091b sext.w s2,a0 + 80000a1c: 03c00993 li s3,60 + 80000a20: 00070463 beqz a4,80000a28 <_Z7ShowFPSv.part.0+0x58> + 80000a24: 03200993 li s3,50 + 80000a28: 001cb597 auipc a1,0x1cb + 80000a2c: 11458593 addi a1,a1,276 # 801cbb3c <_ZZ7ShowFPSvE3tsc> + 80000a30: 0005a703 lw a4,0(a1) + 80000a34: 02051513 slli a0,a0,0x20 + 80000a38: 00c787b3 add a5,a5,a2 + 80000a3c: 02055513 srli a0,a0,0x20 + 80000a40: 00a7b023 sd a0,0(a5) + 80000a44: 40e907bb subw a5,s2,a4 + 80000a48: 3e800713 li a4,1000 + 80000a4c: 06f77863 bgeu a4,a5,80000abc <_Z7ShowFPSv.part.0+0xec> + 80000a50: 0125a023 sw s2,0(a1) + 80000a54: 02800413 li s0,40 + 80000a58: fff4041b addiw s0,s0,-1 + 80000a5c: 00800513 li a0,8 + 80000a60: 308390ef jal ra,80039d68 + 80000a64: fe041ae3 bnez s0,80000a58 <_Z7ShowFPSv.part.0+0x88> + 80000a68: 7010d0ef jal ra,8000e968 <_Z17FCEUD_GetTimeFreqv> + 80000a6c: 0005059b sext.w a1,a0 + 80000a70: 00098513 mv a0,s3 + 80000a74: 348390ef jal ra,80039dbc <__muldi3> + 80000a78: 414905bb subw a1,s2,s4 + 80000a7c: 02059593 slli a1,a1,0x20 + 80000a80: 02051513 slli a0,a0,0x20 + 80000a84: 0205d593 srli a1,a1,0x20 + 80000a88: 02055513 srli a0,a0,0x20 + 80000a8c: 39c390ef jal ra,80039e28 <__udivdi3> + 80000a90: 0005041b sext.w s0,a0 + 80000a94: 02091513 slli a0,s2,0x20 + 80000a98: 3e800593 li a1,1000 + 80000a9c: 02055513 srli a0,a0,0x20 + 80000aa0: 388390ef jal ra,80039e28 <__udivdi3> + 80000aa4: 0005059b sext.w a1,a0 + 80000aa8: 00040613 mv a2,s0 + 80000aac: 0003c517 auipc a0,0x3c + 80000ab0: 34450513 addi a0,a0,836 # 8003cdf0 <_ZZ21SetNESDeemph_OldHackyhiE5rtmul+0x10> + 80000ab4: 2953a0ef jal ra,8003b548 + 80000ab8: 0004a683 lw a3,0(s1) + 80000abc: 00098593 mv a1,s3 + 80000ac0: 0016851b addiw a0,a3,1 + 80000ac4: 3e0390ef jal ra,80039ea4 <__moddi3> + 80000ac8: 02813083 ld ra,40(sp) + 80000acc: 02013403 ld s0,32(sp) + 80000ad0: 00a4a023 sw a0,0(s1) + 80000ad4: 01013903 ld s2,16(sp) + 80000ad8: 01813483 ld s1,24(sp) + 80000adc: 00813983 ld s3,8(sp) + 80000ae0: 00013a03 ld s4,0(sp) + 80000ae4: 03010113 addi sp,sp,48 + 80000ae8: 00008067 ret + +0000000080000aec <_Z21FCEU_KillVirtualVideov>: + 80000aec: 00008067 ret + +0000000080000af0 <_Z21FCEU_InitVirtualVideov>: + 80000af0: fd010113 addi sp,sp,-48 + 80000af4: 02813023 sd s0,32(sp) + 80000af8: 001cb417 auipc s0,0x1cb + 80000afc: 02840413 addi s0,s0,40 # 801cbb20 + 80000b00: 00043783 ld a5,0(s0) + 80000b04: 02113423 sd ra,40(sp) + 80000b08: 00913c23 sd s1,24(sp) + 80000b0c: 01213823 sd s2,16(sp) + 80000b10: 01313423 sd s3,8(sp) + 80000b14: 00100513 li a0,1 + 80000b18: 02078063 beqz a5,80000b38 <_Z21FCEU_InitVirtualVideov+0x48> + 80000b1c: 02813083 ld ra,40(sp) + 80000b20: 02013403 ld s0,32(sp) + 80000b24: 01813483 ld s1,24(sp) + 80000b28: 01013903 ld s2,16(sp) + 80000b2c: 00813983 ld s3,8(sp) + 80000b30: 03010113 addi sp,sp,48 + 80000b34: 00008067 ret + 80000b38: 000104b7 lui s1,0x10 + 80000b3c: 01048513 addi a0,s1,16 # 10010 <_entry_offset+0x10010> + 80000b40: 1a5110ef jal ra,800124e4 <_Z11FCEU_mallocj> + 80000b44: 00050793 mv a5,a0 + 80000b48: 01048513 addi a0,s1,16 + 80000b4c: 00f43023 sd a5,0(s0) + 80000b50: 195110ef jal ra,800124e4 <_Z11FCEU_mallocj> + 80000b54: 00050793 mv a5,a0 + 80000b58: 001cb917 auipc s2,0x1cb + 80000b5c: fc090913 addi s2,s2,-64 # 801cbb18 + 80000b60: 01048513 addi a0,s1,16 + 80000b64: 00f93023 sd a5,0(s2) + 80000b68: 17d110ef jal ra,800124e4 <_Z11FCEU_mallocj> + 80000b6c: 00050793 mv a5,a0 + 80000b70: 001cb997 auipc s3,0x1cb + 80000b74: fc098993 addi s3,s3,-64 # 801cbb30 + 80000b78: 01048513 addi a0,s1,16 + 80000b7c: 00f9b023 sd a5,0(s3) + 80000b80: 165110ef jal ra,800124e4 <_Z11FCEU_mallocj> + 80000b84: 00043703 ld a4,0(s0) + 80000b88: 001cb697 auipc a3,0x1cb + 80000b8c: faa6b023 sd a0,-96(a3) # 801cbb28 + 80000b90: 00050793 mv a5,a0 + 80000b94: 06070e63 beqz a4,80000c10 <_Z21FCEU_InitVirtualVideov+0x120> + 80000b98: 00093683 ld a3,0(s2) + 80000b9c: 06068a63 beqz a3,80000c10 <_Z21FCEU_InitVirtualVideov+0x120> + 80000ba0: 0009b683 ld a3,0(s3) + 80000ba4: 00000513 li a0,0 + 80000ba8: f6068ae3 beqz a3,80000b1c <_Z21FCEU_InitVirtualVideov+0x2c> + 80000bac: f60788e3 beqz a5,80000b1c <_Z21FCEU_InitVirtualVideov+0x2c> + 80000bb0: 00070513 mv a0,a4 + 80000bb4: 00010637 lui a2,0x10 + 80000bb8: 08000593 li a1,128 + 80000bbc: 66d3a0ef jal ra,8003ba28 + 80000bc0: 00093503 ld a0,0(s2) + 80000bc4: 00010637 lui a2,0x10 + 80000bc8: 08000593 li a1,128 + 80000bcc: 65d3a0ef jal ra,8003ba28 + 80000bd0: 00043503 ld a0,0(s0) + 80000bd4: 00010637 lui a2,0x10 + 80000bd8: 08000593 li a1,128 + 80000bdc: 64d3a0ef jal ra,8003ba28 + 80000be0: 00093503 ld a0,0(s2) + 80000be4: 00010637 lui a2,0x10 + 80000be8: 08000593 li a1,128 + 80000bec: 63d3a0ef jal ra,8003ba28 + 80000bf0: 02813083 ld ra,40(sp) + 80000bf4: 02013403 ld s0,32(sp) + 80000bf8: 01813483 ld s1,24(sp) + 80000bfc: 01013903 ld s2,16(sp) + 80000c00: 00813983 ld s3,8(sp) + 80000c04: 00100513 li a0,1 + 80000c08: 03010113 addi sp,sp,48 + 80000c0c: 00008067 ret + 80000c10: 00000513 li a0,0 + 80000c14: f09ff06f j 80000b1c <_Z21FCEU_InitVirtualVideov+0x2c> + +0000000080000c18 <_Z16FCEUI_SetShowFPSb>: + 80000c18: 001cb797 auipc a5,0x1cb + 80000c1c: eea78c23 sb a0,-264(a5) # 801cbb10 + 80000c20: 00008067 ret + +0000000080000c24 <_Z7ShowFPSv>: + 80000c24: 001cb797 auipc a5,0x1cb + 80000c28: eec7c783 lbu a5,-276(a5) # 801cbb10 + 80000c2c: 00079463 bnez a5,80000c34 <_Z7ShowFPSv+0x10> + 80000c30: 00008067 ret + 80000c34: d9dff06f j 800009d0 <_Z7ShowFPSv.part.0> + +0000000080000c38 <_Z9X6502_DMRj>: + 80000c38: ff010113 addi sp,sp,-16 + 80000c3c: 00813023 sd s0,0(sp) + 80000c40: 001cb617 auipc a2,0x1cb + 80000c44: f0c60613 addi a2,a2,-244 # 801cbb4c + 80000c48: 00057417 auipc s0,0x57 + 80000c4c: c0840413 addi s0,s0,-1016 # 80057850 + 80000c50: 00042683 lw a3,0(s0) + 80000c54: 01042703 lw a4,16(s0) + 80000c58: 00062783 lw a5,0(a2) + 80000c5c: 00113423 sd ra,8(sp) + 80000c60: 0016869b addiw a3,a3,1 + 80000c64: 0017879b addiw a5,a5,1 + 80000c68: fd07071b addiw a4,a4,-48 + 80000c6c: 00f62023 sw a5,0(a2) + 80000c70: 00d42023 sw a3,0(s0) + 80000c74: 00e42823 sw a4,16(s0) + 80000c78: 001cc797 auipc a5,0x1cc + 80000c7c: a157c783 lbu a5,-1515(a5) # 801cc68d + 80000c80: 00079c63 bnez a5,80000c98 <_Z9X6502_DMRj+0x60> + 80000c84: 001cb717 auipc a4,0x1cb + 80000c88: ec470713 addi a4,a4,-316 # 801cbb48 + 80000c8c: 00072783 lw a5,0(a4) + 80000c90: 0017879b addiw a5,a5,1 + 80000c94: 00f72023 sw a5,0(a4) + 80000c98: 02051793 slli a5,a0,0x20 + 80000c9c: 01d7d713 srli a4,a5,0x1d + 80000ca0: 000c8797 auipc a5,0xc8 + 80000ca4: 04078793 addi a5,a5,64 # 800c8ce0 + 80000ca8: 00e787b3 add a5,a5,a4 + 80000cac: 0007b783 ld a5,0(a5) + 80000cb0: 000780e7 jalr a5 + 80000cb4: 00813083 ld ra,8(sp) + 80000cb8: 00a40c23 sb a0,24(s0) + 80000cbc: 00013403 ld s0,0(sp) + 80000cc0: 01010113 addi sp,sp,16 + 80000cc4: 00008067 ret + +0000000080000cc8 <_Z9X6502_DMWjh>: + 80000cc8: 00057797 auipc a5,0x57 + 80000ccc: b8878793 addi a5,a5,-1144 # 80057850 + 80000cd0: 001cb817 auipc a6,0x1cb + 80000cd4: e7c80813 addi a6,a6,-388 # 801cbb4c + 80000cd8: 0007a603 lw a2,0(a5) + 80000cdc: 0107a683 lw a3,16(a5) + 80000ce0: 00082703 lw a4,0(a6) + 80000ce4: 0016061b addiw a2,a2,1 + 80000ce8: fd06869b addiw a3,a3,-48 + 80000cec: 0017071b addiw a4,a4,1 + 80000cf0: 00c7a023 sw a2,0(a5) + 80000cf4: 00d7a823 sw a3,16(a5) + 80000cf8: 00e82023 sw a4,0(a6) + 80000cfc: 001cc797 auipc a5,0x1cc + 80000d00: 9917c783 lbu a5,-1647(a5) # 801cc68d + 80000d04: 00079c63 bnez a5,80000d1c <_Z9X6502_DMWjh+0x54> + 80000d08: 001cb717 auipc a4,0x1cb + 80000d0c: e4070713 addi a4,a4,-448 # 801cbb48 + 80000d10: 00072783 lw a5,0(a4) + 80000d14: 0017879b addiw a5,a5,1 + 80000d18: 00f72023 sw a5,0(a4) + 80000d1c: 02051793 slli a5,a0,0x20 + 80000d20: 01d7d713 srli a4,a5,0x1d + 80000d24: 00148797 auipc a5,0x148 + 80000d28: fbc78793 addi a5,a5,-68 # 80148ce0 + 80000d2c: 00e787b3 add a5,a5,a4 + 80000d30: 0007b303 ld t1,0(a5) + 80000d34: 00030067 jr t1 + +0000000080000d38 <_Z14X6502_IRQBegini>: + 80000d38: 00057797 auipc a5,0x57 + 80000d3c: b1878793 addi a5,a5,-1256 # 80057850 + 80000d40: 0147a703 lw a4,20(a5) + 80000d44: 00e56533 or a0,a0,a4 + 80000d48: 00a7aa23 sw a0,20(a5) + 80000d4c: 00008067 ret + +0000000080000d50 <_Z12X6502_IRQEndi>: + 80000d50: 00057797 auipc a5,0x57 + 80000d54: b0078793 addi a5,a5,-1280 # 80057850 + 80000d58: 0147a703 lw a4,20(a5) + 80000d5c: fff54513 not a0,a0 + 80000d60: 00e57533 and a0,a0,a4 + 80000d64: 00a7aa23 sw a0,20(a5) + 80000d68: 00008067 ret + +0000000080000d6c <_Z10TriggerNMIv>: + 80000d6c: 00057717 auipc a4,0x57 + 80000d70: ae470713 addi a4,a4,-1308 # 80057850 + 80000d74: 01472783 lw a5,20(a4) + 80000d78: 0807e793 ori a5,a5,128 + 80000d7c: 00f72a23 sw a5,20(a4) + 80000d80: 00008067 ret + +0000000080000d84 <_Z11TriggerNMI2v>: + 80000d84: 00057717 auipc a4,0x57 + 80000d88: acc70713 addi a4,a4,-1332 # 80057850 + 80000d8c: 01472783 lw a5,20(a4) + 80000d90: 0407e793 ori a5,a5,64 + 80000d94: 00f72a23 sw a5,20(a4) + 80000d98: 00008067 ret + +0000000080000d9c <_Z10X6502_Initv>: + 80000d9c: ff010113 addi sp,sp,-16 + 80000da0: 02000613 li a2,32 + 80000da4: 00000593 li a1,0 + 80000da8: 00057517 auipc a0,0x57 + 80000dac: aa850513 addi a0,a0,-1368 # 80057850 + 80000db0: 00113423 sd ra,8(sp) + 80000db4: 4753a0ef jal ra,8003ba28 + 80000db8: 00000793 li a5,0 + 80000dbc: 0007871b sext.w a4,a5 + 80000dc0: 00057697 auipc a3,0x57 + 80000dc4: ab068693 addi a3,a3,-1360 # 80057870 <_ZL7ZNTable> + 80000dc8: 0ff00813 li a6,255 + 80000dcc: f8000313 li t1,-128 + 80000dd0: 00200893 li a7,2 + 80000dd4: 08077613 andi a2,a4,128 + 80000dd8: 02078263 beqz a5,80000dfc <_Z10X6502_Initv+0x60> + 80000ddc: 00f685b3 add a1,a3,a5 + 80000de0: 02060a63 beqz a2,80000e14 <_Z10X6502_Initv+0x78> + 80000de4: 00658023 sb t1,0(a1) + 80000de8: 03070063 beq a4,a6,80000e08 <_Z10X6502_Initv+0x6c> + 80000dec: 00178793 addi a5,a5,1 + 80000df0: 0007871b sext.w a4,a5 + 80000df4: 08077613 andi a2,a4,128 + 80000df8: fe0792e3 bnez a5,80000ddc <_Z10X6502_Initv+0x40> + 80000dfc: 01168023 sb a7,0(a3) + 80000e00: 00178793 addi a5,a5,1 + 80000e04: fedff06f j 80000df0 <_Z10X6502_Initv+0x54> + 80000e08: 00813083 ld ra,8(sp) + 80000e0c: 01010113 addi sp,sp,16 + 80000e10: 00008067 ret + 80000e14: 00058023 sb zero,0(a1) + 80000e18: fd071ae3 bne a4,a6,80000dec <_Z10X6502_Initv+0x50> + 80000e1c: fedff06f j 80000e08 <_Z10X6502_Initv+0x6c> + +0000000080000e20 <_Z11X6502_Powerv>: + 80000e20: 00010737 lui a4,0x10 + 80000e24: 00057797 auipc a5,0x57 + 80000e28: a2c78793 addi a5,a5,-1492 # 80057850 + 80000e2c: d007071b addiw a4,a4,-768 + 80000e30: 00e7a423 sw a4,8(a5) + 80000e34: 001cb717 auipc a4,0x1cb + 80000e38: d0072a23 sw zero,-748(a4) # 801cbb48 + 80000e3c: 001cb717 auipc a4,0x1cb + 80000e40: d0072823 sw zero,-752(a4) # 801cbb4c + 80000e44: 00100713 li a4,1 + 80000e48: 02571713 slli a4,a4,0x25 + 80000e4c: 0007b023 sd zero,0(a5) + 80000e50: 00078623 sb zero,12(a5) + 80000e54: 00e7b823 sd a4,16(a5) + 80000e58: 00078c23 sb zero,24(a5) + 80000e5c: 00008067 ret + +0000000080000e60 <_Z14X6502_RunDebugi>: + 80000e60: f9010113 addi sp,sp,-112 + 80000e64: 06113423 sd ra,104(sp) + 80000e68: 06813023 sd s0,96(sp) + 80000e6c: 04913c23 sd s1,88(sp) + 80000e70: 05213823 sd s2,80(sp) + 80000e74: 05313423 sd s3,72(sp) + 80000e78: 05413023 sd s4,64(sp) + 80000e7c: 03513c23 sd s5,56(sp) + 80000e80: 03613823 sd s6,48(sp) + 80000e84: 03713423 sd s7,40(sp) + 80000e88: 03813023 sd s8,32(sp) + 80000e8c: 01913c23 sd s9,24(sp) + 80000e90: 01a13823 sd s10,16(sp) + 80000e94: 01b13423 sd s11,8(sp) + 80000e98: 001cb797 auipc a5,0x1cb + 80000e9c: 7c87c783 lbu a5,1992(a5) # 801cc660 + 80000ea0: 4e078c63 beqz a5,80001398 <_Z14X6502_RunDebugi+0x538> + 80000ea4: 0045179b slliw a5,a0,0x4 + 80000ea8: 40a7853b subw a0,a5,a0 + 80000eac: 00057417 auipc s0,0x57 + 80000eb0: 9a440413 addi s0,s0,-1628 # 80057850 + 80000eb4: 001cc697 auipc a3,0x1cc + 80000eb8: 8f068693 addi a3,a3,-1808 # 801cc7a4 + 80000ebc: 01042783 lw a5,16(s0) + 80000ec0: 0006a703 lw a4,0(a3) + 80000ec4: 00a784bb addw s1,a5,a0 + 80000ec8: 0017079b addiw a5,a4,1 + 80000ecc: 00942823 sw s1,16(s0) + 80000ed0: 00f6a023 sw a5,0(a3) + 80000ed4: 18905e63 blez s1,80001070 <_Z14X6502_RunDebugi+0x210> + 80000ed8: 00010ab7 lui s5,0x10 + 80000edc: fffffb37 lui s6,0xfffff + 80000ee0: ffffdbb7 lui s7,0xffffd + 80000ee4: 7ffb0b13 addi s6,s6,2047 # fffffffffffff7ff <_end+0xffffffff7fe2a7ff> + 80000ee8: 001cb997 auipc s3,0x1cb + 80000eec: c6498993 addi s3,s3,-924 # 801cbb4c + 80000ef0: 001cba17 auipc s4,0x1cb + 80000ef4: 79da0a13 addi s4,s4,1949 # 801cc68d + 80000ef8: f00a8c13 addi s8,s5,-256 # ff00 <_entry_offset+0xff00> + 80000efc: 030b8b9b addiw s7,s7,48 + 80000f00: 01442783 lw a5,20(s0) + 80000f04: 24078c63 beqz a5,8000115c <_Z14X6502_RunDebugi+0x2fc> + 80000f08: 0207f713 andi a4,a5,32 + 80000f0c: 00078693 mv a3,a5 + 80000f10: 28070263 beqz a4,80001194 <_Z14X6502_RunDebugi+0x334> + 80000f14: 00148497 auipc s1,0x148 + 80000f18: dcc48493 addi s1,s1,-564 # 80148ce0 + 80000f1c: fe04b783 ld a5,-32(s1) + 80000f20: ffca8513 addi a0,s5,-4 + 80000f24: 000780e7 jalr a5 + 80000f28: fe84b783 ld a5,-24(s1) + 80000f2c: 00a40c23 sb a0,24(s0) + 80000f30: 00a41223 sh a0,4(s0) + 80000f34: ffda8513 addi a0,s5,-3 + 80000f38: 000780e7 jalr a5 + 80000f3c: 00445703 lhu a4,4(s0) + 80000f40: 00851693 slli a3,a0,0x8 + 80000f44: 01442783 lw a5,20(s0) + 80000f48: 00d76733 or a4,a4,a3 + 80000f4c: 00e41223 sh a4,4(s0) + 80000f50: 00057717 auipc a4,0x57 + 80000f54: 90070623 sb zero,-1780(a4) # 8005785c + 80000f58: 00400713 li a4,4 + 80000f5c: 00e40523 sb a4,10(s0) + 80000f60: 00a40c23 sb a0,24(s0) + 80000f64: fdf7f793 andi a5,a5,-33 + 80000f68: 00400713 li a4,4 + 80000f6c: 01042683 lw a3,16(s0) + 80000f70: 0167f7b3 and a5,a5,s6 + 80000f74: 00f42a23 sw a5,20(s0) + 80000f78: 24d05263 blez a3,800011bc <_Z14X6502_RunDebugi+0x35c> + 80000f7c: 00445503 lhu a0,4(s0) + 80000f80: 000c8917 auipc s2,0xc8 + 80000f84: d6090913 addi s2,s2,-672 # 800c8ce0 + 80000f88: 00e405a3 sb a4,11(s0) + 80000f8c: 02051793 slli a5,a0,0x20 + 80000f90: 01d7d793 srli a5,a5,0x1d + 80000f94: 00f907b3 add a5,s2,a5 + 80000f98: 0007b783 ld a5,0(a5) + 80000f9c: 000780e7 jalr a5 + 80000fa0: 0003c797 auipc a5,0x3c + 80000fa4: 27078793 addi a5,a5,624 # 8003d210 <_ZL8CycTable> + 80000fa8: 00a787b3 add a5,a5,a0 + 80000fac: 0007c703 lbu a4,0(a5) + 80000fb0: 01042603 lw a2,16(s0) + 80000fb4: 0009a683 lw a3,0(s3) + 80000fb8: 0027179b slliw a5,a4,0x2 + 80000fbc: 40f707bb subw a5,a4,a5 + 80000fc0: 00042c83 lw s9,0(s0) + 80000fc4: 0047979b slliw a5,a5,0x4 + 80000fc8: 000a4583 lbu a1,0(s4) + 80000fcc: 00f607bb addw a5,a2,a5 + 80000fd0: 00e686bb addw a3,a3,a4 + 80000fd4: 00a40c23 sb a0,24(s0) + 80000fd8: 00f42823 sw a5,16(s0) + 80000fdc: 00d9a023 sw a3,0(s3) + 80000fe0: 00050493 mv s1,a0 + 80000fe4: 00ec8cbb addw s9,s9,a4 + 80000fe8: 16059e63 bnez a1,80001164 <_Z14X6502_RunDebugi+0x304> + 80000fec: 001cb617 auipc a2,0x1cb + 80000ff0: b5c60613 addi a2,a2,-1188 # 801cbb48 + 80000ff4: 00062683 lw a3,0(a2) + 80000ff8: 00057797 auipc a5,0x57 + 80000ffc: 8407ac23 sw zero,-1960(a5) # 80057850 + 80001000: 001cb797 auipc a5,0x1cb + 80001004: b407b783 ld a5,-1216(a5) # 801cbb40 + 80001008: 00e6873b addw a4,a3,a4 + 8000100c: 00e62023 sw a4,0(a2) + 80001010: 16078c63 beqz a5,80001188 <_Z14X6502_RunDebugi+0x328> + 80001014: 000c8513 mv a0,s9 + 80001018: 000780e7 jalr a5 + 8000101c: 000a4783 lbu a5,0(s4) + 80001020: 16078463 beqz a5,80001188 <_Z14X6502_RunDebugi+0x328> + 80001024: 00445c83 lhu s9,4(s0) + 80001028: 0003c717 auipc a4,0x3c + 8000102c: de470713 addi a4,a4,-540 # 8003ce0c <_ZZ21SetNESDeemph_OldHackyhiE5rtmul+0x2c> + 80001030: 00249493 slli s1,s1,0x2 + 80001034: 00e484b3 add s1,s1,a4 + 80001038: 0004a783 lw a5,0(s1) + 8000103c: 001c851b addiw a0,s9,1 + 80001040: 03051513 slli a0,a0,0x30 + 80001044: 03055513 srli a0,a0,0x30 + 80001048: 00e787b3 add a5,a5,a4 + 8000104c: 00a41223 sh a0,4(s0) + 80001050: 00078067 jr a5 + 80001054: 002c851b addiw a0,s9,2 + 80001058: 03051513 slli a0,a0,0x30 + 8000105c: 01042483 lw s1,16(s0) + 80001060: 03055513 srli a0,a0,0x30 + 80001064: 00a41223 sh a0,4(s0) + 80001068: 08ac8863 beq s9,a0,800010f8 <_Z14X6502_RunDebugi+0x298> + 8000106c: e8904ae3 bgtz s1,80000f00 <_Z14X6502_RunDebugi+0xa0> + 80001070: 06813083 ld ra,104(sp) + 80001074: 06013403 ld s0,96(sp) + 80001078: 05813483 ld s1,88(sp) + 8000107c: 05013903 ld s2,80(sp) + 80001080: 04813983 ld s3,72(sp) + 80001084: 04013a03 ld s4,64(sp) + 80001088: 03813a83 ld s5,56(sp) + 8000108c: 03013b03 ld s6,48(sp) + 80001090: 02813b83 ld s7,40(sp) + 80001094: 02013c03 ld s8,32(sp) + 80001098: 01813c83 ld s9,24(sp) + 8000109c: 01013d03 ld s10,16(sp) + 800010a0: 00813d83 ld s11,8(sp) + 800010a4: 07010113 addi sp,sp,112 + 800010a8: 00008067 ret + 800010ac: 00042703 lw a4,0(s0) + 800010b0: 01042483 lw s1,16(s0) + 800010b4: 0009a783 lw a5,0(s3) + 800010b8: 000a4683 lbu a3,0(s4) + 800010bc: 017484bb addw s1,s1,s7 + 800010c0: 0ff7071b addiw a4,a4,255 + 800010c4: 0ff7879b addiw a5,a5,255 + 800010c8: 00e42023 sw a4,0(s0) + 800010cc: 00942823 sw s1,16(s0) + 800010d0: 00f9a023 sw a5,0(s3) + 800010d4: 00069c63 bnez a3,800010ec <_Z14X6502_RunDebugi+0x28c> + 800010d8: 001cb717 auipc a4,0x1cb + 800010dc: a7070713 addi a4,a4,-1424 # 801cbb48 + 800010e0: 00072783 lw a5,0(a4) + 800010e4: 0ff7879b addiw a5,a5,255 + 800010e8: 00f72023 sw a5,0(a4) + 800010ec: 00100793 li a5,1 + 800010f0: 00f40623 sb a5,12(s0) + 800010f4: 01941223 sh s9,4(s0) + 800010f8: f6905ce3 blez s1,80001070 <_Z14X6502_RunDebugi+0x210> + 800010fc: 00048513 mv a0,s1 + 80001100: 03000593 li a1,48 + 80001104: 51d380ef jal ra,80039e20 <__divdi3> + 80001108: 00042683 lw a3,0(s0) + 8000110c: 0009a703 lw a4,0(s3) + 80001110: 0025179b slliw a5,a0,0x2 + 80001114: 40f507bb subw a5,a0,a5 + 80001118: 0047979b slliw a5,a5,0x4 + 8000111c: 000a4603 lbu a2,0(s4) + 80001120: 009784bb addw s1,a5,s1 + 80001124: 00a686bb addw a3,a3,a0 + 80001128: 00a707bb addw a5,a4,a0 + 8000112c: 00d42023 sw a3,0(s0) + 80001130: 00942823 sw s1,16(s0) + 80001134: 00f9a023 sw a5,0(s3) + 80001138: 0005051b sext.w a0,a0 + 8000113c: f20618e3 bnez a2,8000106c <_Z14X6502_RunDebugi+0x20c> + 80001140: 001cb717 auipc a4,0x1cb + 80001144: a0870713 addi a4,a4,-1528 # 801cbb48 + 80001148: 00072783 lw a5,0(a4) + 8000114c: 00a7853b addw a0,a5,a0 + 80001150: 00a72023 sw a0,0(a4) + 80001154: da9046e3 bgtz s1,80000f00 <_Z14X6502_RunDebugi+0xa0> + 80001158: f19ff06f j 80001070 <_Z14X6502_RunDebugi+0x210> + 8000115c: 00a44703 lbu a4,10(s0) + 80001160: e1dff06f j 80000f7c <_Z14X6502_RunDebugi+0x11c> + 80001164: 00056797 auipc a5,0x56 + 80001168: 6e07a623 sw zero,1772(a5) # 80057850 + 8000116c: 001cb797 auipc a5,0x1cb + 80001170: 9d47b783 ld a5,-1580(a5) # 801cbb40 + 80001174: ea0788e3 beqz a5,80001024 <_Z14X6502_RunDebugi+0x1c4> + 80001178: 000c8513 mv a0,s9 + 8000117c: 000780e7 jalr a5 + 80001180: 000a4783 lbu a5,0(s4) + 80001184: ea0790e3 bnez a5,80001024 <_Z14X6502_RunDebugi+0x1c4> + 80001188: 000c8513 mv a0,s9 + 8000118c: 2fc0c0ef jal ra,8000d488 <_Z17FCEU_SoundCPUHooki> + 80001190: e95ff06f j 80001024 <_Z14X6502_RunDebugi+0x1c4> + 80001194: 0407f613 andi a2,a5,64 + 80001198: 00a44703 lbu a4,10(s0) + 8000119c: 02060463 beqz a2,800011c4 <_Z14X6502_RunDebugi+0x364> + 800011a0: fbf6f793 andi a5,a3,-65 + 800011a4: 0807e793 ori a5,a5,128 + 800011a8: 0007879b sext.w a5,a5 + 800011ac: 01042683 lw a3,16(s0) + 800011b0: 0167f7b3 and a5,a5,s6 + 800011b4: 00f42a23 sw a5,20(s0) + 800011b8: dcd042e3 bgtz a3,80000f7c <_Z14X6502_RunDebugi+0x11c> + 800011bc: 00e405a3 sb a4,11(s0) + 800011c0: eb1ff06f j 80001070 <_Z14X6502_RunDebugi+0x210> + 800011c4: 0806f693 andi a3,a3,128 + 800011c8: 00c44603 lbu a2,12(s0) + 800011cc: 0e068263 beqz a3,800012b0 <_Z14X6502_RunDebugi+0x450> + 800011d0: d8061ee3 bnez a2,80000f6c <_Z14X6502_RunDebugi+0x10c> + 800011d4: 00042683 lw a3,0(s0) + 800011d8: 0009a783 lw a5,0(s3) + 800011dc: 000a4603 lbu a2,0(s4) + 800011e0: 0076869b addiw a3,a3,7 + 800011e4: eb04849b addiw s1,s1,-336 + 800011e8: 0077879b addiw a5,a5,7 + 800011ec: 00d42023 sw a3,0(s0) + 800011f0: 00942823 sw s1,16(s0) + 800011f4: 00f9a023 sw a5,0(s3) + 800011f8: 00061c63 bnez a2,80001210 <_Z14X6502_RunDebugi+0x3b0> + 800011fc: 001cb697 auipc a3,0x1cb + 80001200: 94c68693 addi a3,a3,-1716 # 801cbb48 + 80001204: 0006a783 lw a5,0(a3) + 80001208: 0077879b addiw a5,a5,7 + 8000120c: 00f6a023 sw a5,0(a3) + 80001210: 00944783 lbu a5,9(s0) + 80001214: 00445803 lhu a6,4(s0) + 80001218: 001c8697 auipc a3,0x1c8 + 8000121c: b1068693 addi a3,a3,-1264 # 801c8d28 + 80001220: fff7861b addiw a2,a5,-1 + 80001224: 00f685b3 add a1,a3,a5 + 80001228: 4088589b sraiw a7,a6,0x8 + 8000122c: ffe7851b addiw a0,a5,-2 + 80001230: 00148497 auipc s1,0x148 + 80001234: ab048493 addi s1,s1,-1360 # 80148ce0 + 80001238: 0ff67613 andi a2,a2,255 + 8000123c: 11158023 sb a7,256(a1) + 80001240: 00c68633 add a2,a3,a2 + 80001244: fcf77593 andi a1,a4,-49 + 80001248: fd04b883 ld a7,-48(s1) + 8000124c: 0ff57513 andi a0,a0,255 + 80001250: 00a686b3 add a3,a3,a0 + 80001254: 00476713 ori a4,a4,4 + 80001258: 11060023 sb a6,256(a2) + 8000125c: ffd7879b addiw a5,a5,-3 + 80001260: 0205e613 ori a2,a1,32 + 80001264: 10c68023 sb a2,256(a3) + 80001268: 00e40523 sb a4,10(s0) + 8000126c: 00f404a3 sb a5,9(s0) + 80001270: ffaa8513 addi a0,s5,-6 + 80001274: 000880e7 jalr a7 + 80001278: fd84b783 ld a5,-40(s1) + 8000127c: 00a40c23 sb a0,24(s0) + 80001280: 00a41223 sh a0,4(s0) + 80001284: ffba8513 addi a0,s5,-5 + 80001288: 000780e7 jalr a5 + 8000128c: 00445703 lhu a4,4(s0) + 80001290: 01442783 lw a5,20(s0) + 80001294: 00851693 slli a3,a0,0x8 + 80001298: 00d766b3 or a3,a4,a3 + 8000129c: 00a40c23 sb a0,24(s0) + 800012a0: 00a44703 lbu a4,10(s0) + 800012a4: 00d41223 sh a3,4(s0) + 800012a8: f7f7f793 andi a5,a5,-129 + 800012ac: cc1ff06f j 80000f6c <_Z14X6502_RunDebugi+0x10c> + 800012b0: 00b44683 lbu a3,11(s0) + 800012b4: 0046f693 andi a3,a3,4 + 800012b8: 00d66633 or a2,a2,a3 + 800012bc: ca0618e3 bnez a2,80000f6c <_Z14X6502_RunDebugi+0x10c> + 800012c0: 00042683 lw a3,0(s0) + 800012c4: 0009a783 lw a5,0(s3) + 800012c8: 000a4603 lbu a2,0(s4) + 800012cc: 0076869b addiw a3,a3,7 + 800012d0: eb04849b addiw s1,s1,-336 + 800012d4: 0077879b addiw a5,a5,7 + 800012d8: 00d42023 sw a3,0(s0) + 800012dc: 00942823 sw s1,16(s0) + 800012e0: 00f9a023 sw a5,0(s3) + 800012e4: 00061c63 bnez a2,800012fc <_Z14X6502_RunDebugi+0x49c> + 800012e8: 001cb697 auipc a3,0x1cb + 800012ec: 86068693 addi a3,a3,-1952 # 801cbb48 + 800012f0: 0006a783 lw a5,0(a3) + 800012f4: 0077879b addiw a5,a5,7 + 800012f8: 00f6a023 sw a5,0(a3) + 800012fc: 00944783 lbu a5,9(s0) + 80001300: 00445803 lhu a6,4(s0) + 80001304: 001c8697 auipc a3,0x1c8 + 80001308: a2468693 addi a3,a3,-1500 # 801c8d28 + 8000130c: fff7861b addiw a2,a5,-1 + 80001310: 00f685b3 add a1,a3,a5 + 80001314: 4088589b sraiw a7,a6,0x8 + 80001318: ffe7851b addiw a0,a5,-2 + 8000131c: 00148497 auipc s1,0x148 + 80001320: 9c448493 addi s1,s1,-1596 # 80148ce0 + 80001324: 0ff67613 andi a2,a2,255 + 80001328: 11158023 sb a7,256(a1) + 8000132c: 00c68633 add a2,a3,a2 + 80001330: fcf77593 andi a1,a4,-49 + 80001334: ff04b883 ld a7,-16(s1) + 80001338: 0ff57513 andi a0,a0,255 + 8000133c: 00a686b3 add a3,a3,a0 + 80001340: 00476713 ori a4,a4,4 + 80001344: 11060023 sb a6,256(a2) + 80001348: ffd7879b addiw a5,a5,-3 + 8000134c: 0205e613 ori a2,a1,32 + 80001350: 10c68023 sb a2,256(a3) + 80001354: 00e40523 sb a4,10(s0) + 80001358: 00f404a3 sb a5,9(s0) + 8000135c: ffea8513 addi a0,s5,-2 + 80001360: 000880e7 jalr a7 + 80001364: ff84b783 ld a5,-8(s1) + 80001368: 00a40c23 sb a0,24(s0) + 8000136c: 00a41223 sh a0,4(s0) + 80001370: fffa8513 addi a0,s5,-1 + 80001374: 000780e7 jalr a5 + 80001378: 00445683 lhu a3,4(s0) + 8000137c: 00851613 slli a2,a0,0x8 + 80001380: 01442783 lw a5,20(s0) + 80001384: 00c6e6b3 or a3,a3,a2 + 80001388: 00a44703 lbu a4,10(s0) + 8000138c: 00a40c23 sb a0,24(s0) + 80001390: 00d41223 sh a3,4(s0) + 80001394: bd9ff06f j 80000f6c <_Z14X6502_RunDebugi+0x10c> + 80001398: 0045151b slliw a0,a0,0x4 + 8000139c: b11ff06f j 80000eac <_Z14X6502_RunDebugi+0x4c> + 800013a0: 01042483 lw s1,16(s0) + 800013a4: ccac94e3 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 800013a8: d51ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800013ac: 00351793 slli a5,a0,0x3 + 800013b0: 00f907b3 add a5,s2,a5 + 800013b4: 0007b783 ld a5,0(a5) + 800013b8: 000780e7 jalr a5 + 800013bc: 00445783 lhu a5,4(s0) + 800013c0: 00050713 mv a4,a0 + 800013c4: 00a40c23 sb a0,24(s0) + 800013c8: 0017879b addiw a5,a5,1 + 800013cc: 03079513 slli a0,a5,0x30 + 800013d0: 03055513 srli a0,a0,0x30 + 800013d4: 00351793 slli a5,a0,0x3 + 800013d8: 00f907b3 add a5,s2,a5 + 800013dc: 0007b783 ld a5,0(a5) + 800013e0: 00a41223 sh a0,4(s0) + 800013e4: 0007049b sext.w s1,a4 + 800013e8: 000780e7 jalr a5 + 800013ec: 00744703 lbu a4,7(s0) + 800013f0: 00445683 lhu a3,4(s0) + 800013f4: 00851793 slli a5,a0,0x8 + 800013f8: 0097e7b3 or a5,a5,s1 + 800013fc: 00f7073b addw a4,a4,a5 + 80001400: 0016869b addiw a3,a3,1 + 80001404: 00e7c7b3 xor a5,a5,a4 + 80001408: 00a40c23 sb a0,24(s0) + 8000140c: 00d41223 sh a3,4(s0) + 80001410: 1007f793 andi a5,a5,256 + 80001414: 0007049b sext.w s1,a4 + 80001418: 06078463 beqz a5,80001480 <_Z14X6502_RunDebugi+0x620> + 8000141c: 03071493 slli s1,a4,0x30 + 80001420: 0304d493 srli s1,s1,0x30 + 80001424: 1004c793 xori a5,s1,256 + 80001428: 00379793 slli a5,a5,0x3 + 8000142c: 00f907b3 add a5,s2,a5 + 80001430: 0007b783 ld a5,0(a5) + 80001434: 1004c513 xori a0,s1,256 + 80001438: 000780e7 jalr a5 + 8000143c: 00042683 lw a3,0(s0) + 80001440: 01042703 lw a4,16(s0) + 80001444: 0009a783 lw a5,0(s3) + 80001448: 000a4603 lbu a2,0(s4) + 8000144c: 0016869b addiw a3,a3,1 + 80001450: fd07071b addiw a4,a4,-48 + 80001454: 0017879b addiw a5,a5,1 + 80001458: 00a40c23 sb a0,24(s0) + 8000145c: 00d42023 sw a3,0(s0) + 80001460: 00e42823 sw a4,16(s0) + 80001464: 00f9a023 sw a5,0(s3) + 80001468: 00061c63 bnez a2,80001480 <_Z14X6502_RunDebugi+0x620> + 8000146c: 001ca717 auipc a4,0x1ca + 80001470: 6dc70713 addi a4,a4,1756 # 801cbb48 + 80001474: 00072783 lw a5,0(a4) + 80001478: 0017879b addiw a5,a5,1 + 8000147c: 00f72023 sw a5,0(a4) + 80001480: 02049793 slli a5,s1,0x20 + 80001484: 01d7d793 srli a5,a5,0x1d + 80001488: 00f90933 add s2,s2,a5 + 8000148c: 00093783 ld a5,0(s2) + 80001490: 00048513 mv a0,s1 + 80001494: 000780e7 jalr a5 + 80001498: 00050793 mv a5,a0 + 8000149c: 00445503 lhu a0,4(s0) + 800014a0: 00f40c23 sb a5,24(s0) + 800014a4: 01042483 lw s1,16(s0) + 800014a8: bcac92e3 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 800014ac: c4dff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800014b0: 00351793 slli a5,a0,0x3 + 800014b4: 00f90933 add s2,s2,a5 + 800014b8: 00093783 ld a5,0(s2) + 800014bc: 000780e7 jalr a5 + 800014c0: 00a44703 lbu a4,10(s0) + 800014c4: 00644603 lbu a2,6(s0) + 800014c8: 00050593 mv a1,a0 + 800014cc: fff74693 not a3,a4 + 800014d0: 40a607bb subw a5,a2,a0 + 800014d4: 0016f693 andi a3,a3,1 + 800014d8: 40d787bb subw a5,a5,a3 + 800014dc: 0007881b sext.w a6,a5 + 800014e0: 0ff87513 andi a0,a6,255 + 800014e4: 00056697 auipc a3,0x56 + 800014e8: 38c68693 addi a3,a3,908 # 80057870 <_ZL7ZNTable> + 800014ec: 00a686b3 add a3,a3,a0 + 800014f0: 0006c883 lbu a7,0(a3) + 800014f4: 00445503 lhu a0,4(s0) + 800014f8: 4087d69b sraiw a3,a5,0x8 + 800014fc: 00f647b3 xor a5,a2,a5 + 80001500: 00b64633 xor a2,a2,a1 + 80001504: 03c77713 andi a4,a4,60 + 80001508: 0016c693 xori a3,a3,1 + 8000150c: 00c7f7b3 and a5,a5,a2 + 80001510: 01176733 or a4,a4,a7 + 80001514: 0016f693 andi a3,a3,1 + 80001518: 0017d79b srliw a5,a5,0x1 + 8000151c: 0015051b addiw a0,a0,1 + 80001520: 00d76733 or a4,a4,a3 + 80001524: 0407f793 andi a5,a5,64 + 80001528: 03051513 slli a0,a0,0x30 + 8000152c: 03055513 srli a0,a0,0x30 + 80001530: 00f767b3 or a5,a4,a5 + 80001534: 00b40c23 sb a1,24(s0) + 80001538: 00a41223 sh a0,4(s0) + 8000153c: 01040323 sb a6,6(s0) + 80001540: 00f40523 sb a5,10(s0) + 80001544: 01042483 lw s1,16(s0) + 80001548: b2ac92e3 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 8000154c: badff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80001550: 00351793 slli a5,a0,0x3 + 80001554: 00f90933 add s2,s2,a5 + 80001558: 00093783 ld a5,0(s2) + 8000155c: 000780e7 jalr a5 + 80001560: 00644703 lbu a4,6(s0) + 80001564: 00056617 auipc a2,0x56 + 80001568: 30c60613 addi a2,a2,780 # 80057870 <_ZL7ZNTable> + 8000156c: 00a44783 lbu a5,10(s0) + 80001570: 00e57733 and a4,a0,a4 + 80001574: 00e60633 add a2,a2,a4 + 80001578: 00064603 lbu a2,0(a2) + 8000157c: 00050693 mv a3,a0 + 80001580: 00445503 lhu a0,4(s0) + 80001584: 07d7f793 andi a5,a5,125 + 80001588: 00c7e7b3 or a5,a5,a2 + 8000158c: 0015051b addiw a0,a0,1 + 80001590: ffe7f793 andi a5,a5,-2 + 80001594: 00775613 srli a2,a4,0x7 + 80001598: 03051513 slli a0,a0,0x30 + 8000159c: 03055513 srli a0,a0,0x30 + 800015a0: 00c7e7b3 or a5,a5,a2 + 800015a4: 00d40c23 sb a3,24(s0) + 800015a8: 00a41223 sh a0,4(s0) + 800015ac: 00e40323 sb a4,6(s0) + 800015b0: 00f40523 sb a5,10(s0) + 800015b4: 01042483 lw s1,16(s0) + 800015b8: aaac9ae3 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 800015bc: b3dff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800015c0: 00744783 lbu a5,7(s0) + 800015c4: 00056697 auipc a3,0x56 + 800015c8: 2ac68693 addi a3,a3,684 # 80057870 <_ZL7ZNTable> + 800015cc: 00a44703 lbu a4,10(s0) + 800015d0: 0017879b addiw a5,a5,1 + 800015d4: 0ff7f793 andi a5,a5,255 + 800015d8: 00f686b3 add a3,a3,a5 + 800015dc: 0006c683 lbu a3,0(a3) + 800015e0: 07d77713 andi a4,a4,125 + 800015e4: 00f403a3 sb a5,7(s0) + 800015e8: 00d76733 or a4,a4,a3 + 800015ec: 00e40523 sb a4,10(s0) + 800015f0: 01042483 lw s1,16(s0) + 800015f4: a6ac9ce3 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 800015f8: b01ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800015fc: 00351793 slli a5,a0,0x3 + 80001600: 00f90933 add s2,s2,a5 + 80001604: 00093783 ld a5,0(s2) + 80001608: 000780e7 jalr a5 + 8000160c: 02051793 slli a5,a0,0x20 + 80001610: 0207d793 srli a5,a5,0x20 + 80001614: 001c7597 auipc a1,0x1c7 + 80001618: 71458593 addi a1,a1,1812 # 801c8d28 + 8000161c: 00f585b3 add a1,a1,a5 + 80001620: 0005c803 lbu a6,0(a1) + 80001624: 00056617 auipc a2,0x56 + 80001628: 24c60613 addi a2,a2,588 # 80057870 <_ZL7ZNTable> + 8000162c: 00a44703 lbu a4,10(s0) + 80001630: 0018069b addiw a3,a6,1 + 80001634: 0ff6f793 andi a5,a3,255 + 80001638: 00f60533 add a0,a2,a5 + 8000163c: 00054883 lbu a7,0(a0) + 80001640: 07d77713 andi a4,a4,125 + 80001644: 00644503 lbu a0,6(s0) + 80001648: 01176733 or a4,a4,a7 + 8000164c: fff74893 not a7,a4 + 80001650: 40f507bb subw a5,a0,a5 + 80001654: 0018f893 andi a7,a7,1 + 80001658: 411787bb subw a5,a5,a7 + 8000165c: 0007889b sext.w a7,a5 + 80001660: 0ff8f313 andi t1,a7,255 + 80001664: 00660633 add a2,a2,t1 + 80001668: 00064e03 lbu t3,0(a2) + 8000166c: 00445303 lhu t1,4(s0) + 80001670: 0ff6f693 andi a3,a3,255 + 80001674: 4087d61b sraiw a2,a5,0x8 + 80001678: 00f547b3 xor a5,a0,a5 + 8000167c: 00d54533 xor a0,a0,a3 + 80001680: 00a7f7b3 and a5,a5,a0 + 80001684: 03c77713 andi a4,a4,60 + 80001688: 00164613 xori a2,a2,1 + 8000168c: 01c76733 or a4,a4,t3 + 80001690: 00167613 andi a2,a2,1 + 80001694: 0017d79b srliw a5,a5,0x1 + 80001698: 0013051b addiw a0,t1,1 + 8000169c: 00c76733 or a4,a4,a2 + 800016a0: 0407f793 andi a5,a5,64 + 800016a4: 03051513 slli a0,a0,0x30 + 800016a8: 03055513 srli a0,a0,0x30 + 800016ac: 00f767b3 or a5,a4,a5 + 800016b0: 00a41223 sh a0,4(s0) + 800016b4: 01040c23 sb a6,24(s0) + 800016b8: 01140323 sb a7,6(s0) + 800016bc: 00f40523 sb a5,10(s0) + 800016c0: 00d58023 sb a3,0(a1) + 800016c4: 01042483 lw s1,16(s0) + 800016c8: 9aac92e3 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 800016cc: a2dff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800016d0: 00351793 slli a5,a0,0x3 + 800016d4: 00f907b3 add a5,s2,a5 + 800016d8: 0007b783 ld a5,0(a5) + 800016dc: 000780e7 jalr a5 + 800016e0: 00445783 lhu a5,4(s0) + 800016e4: 00050493 mv s1,a0 + 800016e8: 00a40c23 sb a0,24(s0) + 800016ec: 0017879b addiw a5,a5,1 + 800016f0: 03079513 slli a0,a5,0x30 + 800016f4: 03055513 srli a0,a0,0x30 + 800016f8: 00351793 slli a5,a0,0x3 + 800016fc: 00f907b3 add a5,s2,a5 + 80001700: 0007b783 ld a5,0(a5) + 80001704: 00a41223 sh a0,4(s0) + 80001708: 0004849b sext.w s1,s1 + 8000170c: 000780e7 jalr a5 + 80001710: 00851713 slli a4,a0,0x8 + 80001714: 00976d33 or s10,a4,s1 + 80001718: 00445783 lhu a5,4(s0) + 8000171c: 003d1d13 slli s10,s10,0x3 + 80001720: 01a90933 add s2,s2,s10 + 80001724: 00093683 ld a3,0(s2) + 80001728: 0017879b addiw a5,a5,1 + 8000172c: 00976933 or s2,a4,s1 + 80001730: 00a40c23 sb a0,24(s0) + 80001734: 00f41223 sh a5,4(s0) + 80001738: 00090513 mv a0,s2 + 8000173c: 000680e7 jalr a3 + 80001740: 00147797 auipc a5,0x147 + 80001744: 5a078793 addi a5,a5,1440 # 80148ce0 + 80001748: 01a78d33 add s10,a5,s10 + 8000174c: 000d3783 ld a5,0(s10) + 80001750: 00050493 mv s1,a0 + 80001754: 00050593 mv a1,a0 + 80001758: 00940c23 sb s1,24(s0) + 8000175c: 00090513 mv a0,s2 + 80001760: 000780e7 jalr a5 + 80001764: 00644703 lbu a4,6(s0) + 80001768: 00a44783 lbu a5,10(s0) + 8000176c: 0014d613 srli a2,s1,0x1 + 80001770: 00056697 auipc a3,0x56 + 80001774: 10068693 addi a3,a3,256 # 80057870 <_ZL7ZNTable> + 80001778: 00060593 mv a1,a2 + 8000177c: 00c68633 add a2,a3,a2 + 80001780: 00064503 lbu a0,0(a2) + 80001784: 00e5c733 xor a4,a1,a4 + 80001788: 00e686b3 add a3,a3,a4 + 8000178c: 0014f493 andi s1,s1,1 + 80001790: 07c7f793 andi a5,a5,124 + 80001794: 0006c603 lbu a2,0(a3) + 80001798: 0097e7b3 or a5,a5,s1 + 8000179c: 00a7e7b3 or a5,a5,a0 + 800017a0: 000d3683 ld a3,0(s10) + 800017a4: 07d7f793 andi a5,a5,125 + 800017a8: 00c7e7b3 or a5,a5,a2 + 800017ac: 00090513 mv a0,s2 + 800017b0: 00e40323 sb a4,6(s0) + 800017b4: 00f40523 sb a5,10(s0) + 800017b8: 000680e7 jalr a3 + 800017bc: 00445503 lhu a0,4(s0) + 800017c0: 01042483 lw s1,16(s0) + 800017c4: 8aac94e3 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 800017c8: 931ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800017cc: 00351793 slli a5,a0,0x3 + 800017d0: 00f907b3 add a5,s2,a5 + 800017d4: 0007b783 ld a5,0(a5) + 800017d8: 000780e7 jalr a5 + 800017dc: 00445783 lhu a5,4(s0) + 800017e0: 00050493 mv s1,a0 + 800017e4: 00a40c23 sb a0,24(s0) + 800017e8: 0017879b addiw a5,a5,1 + 800017ec: 03079513 slli a0,a5,0x30 + 800017f0: 03055513 srli a0,a0,0x30 + 800017f4: 00351793 slli a5,a0,0x3 + 800017f8: 00f907b3 add a5,s2,a5 + 800017fc: 0007b783 ld a5,0(a5) + 80001800: 00a41223 sh a0,4(s0) + 80001804: 0004849b sext.w s1,s1 + 80001808: 000780e7 jalr a5 + 8000180c: 00851713 slli a4,a0,0x8 + 80001810: 00976d33 or s10,a4,s1 + 80001814: 00445783 lhu a5,4(s0) + 80001818: 003d1d93 slli s11,s10,0x3 + 8000181c: 01b90933 add s2,s2,s11 + 80001820: 00093683 ld a3,0(s2) + 80001824: 0017879b addiw a5,a5,1 + 80001828: 000d0913 mv s2,s10 + 8000182c: 00a40c23 sb a0,24(s0) + 80001830: 00f41223 sh a5,4(s0) + 80001834: 000d0513 mv a0,s10 + 80001838: 00147d17 auipc s10,0x147 + 8000183c: 4a8d0d13 addi s10,s10,1192 # 80148ce0 + 80001840: 000680e7 jalr a3 + 80001844: 01bd0d33 add s10,s10,s11 + 80001848: 000d3783 ld a5,0(s10) + 8000184c: 00050493 mv s1,a0 + 80001850: 00050593 mv a1,a0 + 80001854: 00940c23 sb s1,24(s0) + 80001858: 00090513 mv a0,s2 + 8000185c: 000780e7 jalr a5 + 80001860: 00a44783 lbu a5,10(s0) + 80001864: 0014d593 srli a1,s1,0x1 + 80001868: 00056717 auipc a4,0x56 + 8000186c: 00870713 addi a4,a4,8 # 80057870 <_ZL7ZNTable> + 80001870: 00b70733 add a4,a4,a1 + 80001874: 00074683 lbu a3,0(a4) + 80001878: 0014f493 andi s1,s1,1 + 8000187c: 07c7f793 andi a5,a5,124 + 80001880: 0097e7b3 or a5,a5,s1 + 80001884: 000d3703 ld a4,0(s10) + 80001888: 00d7e7b3 or a5,a5,a3 + 8000188c: 00090513 mv a0,s2 + 80001890: 00f40523 sb a5,10(s0) + 80001894: 000700e7 jalr a4 + 80001898: 00445503 lhu a0,4(s0) + 8000189c: 01042483 lw s1,16(s0) + 800018a0: fcac9663 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 800018a4: 855ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800018a8: 00351793 slli a5,a0,0x3 + 800018ac: 00f907b3 add a5,s2,a5 + 800018b0: 0007b783 ld a5,0(a5) + 800018b4: 000780e7 jalr a5 + 800018b8: 00445783 lhu a5,4(s0) + 800018bc: 00050493 mv s1,a0 + 800018c0: 00a40c23 sb a0,24(s0) + 800018c4: 0017879b addiw a5,a5,1 + 800018c8: 03079513 slli a0,a5,0x30 + 800018cc: 03055513 srli a0,a0,0x30 + 800018d0: 00351793 slli a5,a0,0x3 + 800018d4: 00f907b3 add a5,s2,a5 + 800018d8: 0007b783 ld a5,0(a5) + 800018dc: 00a41223 sh a0,4(s0) + 800018e0: 0004849b sext.w s1,s1 + 800018e4: 000780e7 jalr a5 + 800018e8: 00851693 slli a3,a0,0x8 + 800018ec: 0096e7b3 or a5,a3,s1 + 800018f0: 00445703 lhu a4,4(s0) + 800018f4: 00379793 slli a5,a5,0x3 + 800018f8: 00f90933 add s2,s2,a5 + 800018fc: 00093603 ld a2,0(s2) + 80001900: 0017079b addiw a5,a4,1 + 80001904: 00a40c23 sb a0,24(s0) + 80001908: 00f41223 sh a5,4(s0) + 8000190c: 0096e533 or a0,a3,s1 + 80001910: 000600e7 jalr a2 + 80001914: 00056697 auipc a3,0x56 + 80001918: f5c68693 addi a3,a3,-164 # 80057870 <_ZL7ZNTable> + 8000191c: 00a44783 lbu a5,10(s0) + 80001920: 00a686b3 add a3,a3,a0 + 80001924: 0006c683 lbu a3,0(a3) + 80001928: 00050713 mv a4,a0 + 8000192c: 07d7f793 andi a5,a5,125 + 80001930: 00445503 lhu a0,4(s0) + 80001934: 00d7e7b3 or a5,a5,a3 + 80001938: 00e40c23 sb a4,24(s0) + 8000193c: 00e40323 sb a4,6(s0) + 80001940: 00f40523 sb a5,10(s0) + 80001944: 01042483 lw s1,16(s0) + 80001948: f2ac9263 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 8000194c: facff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80001950: 00351793 slli a5,a0,0x3 + 80001954: 00f907b3 add a5,s2,a5 + 80001958: 0007b783 ld a5,0(a5) + 8000195c: 000780e7 jalr a5 + 80001960: 00445783 lhu a5,4(s0) + 80001964: 00050493 mv s1,a0 + 80001968: 00a40c23 sb a0,24(s0) + 8000196c: 0017879b addiw a5,a5,1 + 80001970: 03079513 slli a0,a5,0x30 + 80001974: 03055513 srli a0,a0,0x30 + 80001978: 00351793 slli a5,a0,0x3 + 8000197c: 00f907b3 add a5,s2,a5 + 80001980: 0007b783 ld a5,0(a5) + 80001984: 00a41223 sh a0,4(s0) + 80001988: 0004849b sext.w s1,s1 + 8000198c: 000780e7 jalr a5 + 80001990: 00851693 slli a3,a0,0x8 + 80001994: 0096e7b3 or a5,a3,s1 + 80001998: 00445703 lhu a4,4(s0) + 8000199c: 00379793 slli a5,a5,0x3 + 800019a0: 00f90933 add s2,s2,a5 + 800019a4: 00093603 ld a2,0(s2) + 800019a8: 0017079b addiw a5,a4,1 + 800019ac: 00a40c23 sb a0,24(s0) + 800019b0: 00f41223 sh a5,4(s0) + 800019b4: 0096e533 or a0,a3,s1 + 800019b8: 000600e7 jalr a2 + 800019bc: 00056697 auipc a3,0x56 + 800019c0: eb468693 addi a3,a3,-332 # 80057870 <_ZL7ZNTable> + 800019c4: 00a44783 lbu a5,10(s0) + 800019c8: 00a686b3 add a3,a3,a0 + 800019cc: 0006c683 lbu a3,0(a3) + 800019d0: 00050713 mv a4,a0 + 800019d4: 07d7f793 andi a5,a5,125 + 800019d8: 00445503 lhu a0,4(s0) + 800019dc: 00d7e7b3 or a5,a5,a3 + 800019e0: 00e40c23 sb a4,24(s0) + 800019e4: 00e40423 sb a4,8(s0) + 800019e8: 00f40523 sb a5,10(s0) + 800019ec: 01042483 lw s1,16(s0) + 800019f0: e6ac9e63 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 800019f4: f04ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800019f8: 00351793 slli a5,a0,0x3 + 800019fc: 00f90933 add s2,s2,a5 + 80001a00: 00093783 ld a5,0(s2) + 80001a04: 000780e7 jalr a5 + 80001a08: 00050793 mv a5,a0 + 80001a0c: 00056697 auipc a3,0x56 + 80001a10: e6468693 addi a3,a3,-412 # 80057870 <_ZL7ZNTable> + 80001a14: 00445503 lhu a0,4(s0) + 80001a18: 00a44703 lbu a4,10(s0) + 80001a1c: 00f686b3 add a3,a3,a5 + 80001a20: 0006c683 lbu a3,0(a3) + 80001a24: 0015051b addiw a0,a0,1 + 80001a28: 07d77713 andi a4,a4,125 + 80001a2c: 03051513 slli a0,a0,0x30 + 80001a30: 03055513 srli a0,a0,0x30 + 80001a34: 00d76733 or a4,a4,a3 + 80001a38: 00f40c23 sb a5,24(s0) + 80001a3c: 00a41223 sh a0,4(s0) + 80001a40: 00f40323 sb a5,6(s0) + 80001a44: 00e40523 sb a4,10(s0) + 80001a48: 00f403a3 sb a5,7(s0) + 80001a4c: 01042483 lw s1,16(s0) + 80001a50: e0ac9e63 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 80001a54: ea4ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80001a58: 00644683 lbu a3,6(s0) + 80001a5c: 00056717 auipc a4,0x56 + 80001a60: e1470713 addi a4,a4,-492 # 80057870 <_ZL7ZNTable> + 80001a64: 00a44783 lbu a5,10(s0) + 80001a68: 00d70733 add a4,a4,a3 + 80001a6c: 00074703 lbu a4,0(a4) + 80001a70: 07d7f793 andi a5,a5,125 + 80001a74: 00d403a3 sb a3,7(s0) + 80001a78: 00e7e7b3 or a5,a5,a4 + 80001a7c: 00f40523 sb a5,10(s0) + 80001a80: 01042483 lw s1,16(s0) + 80001a84: deac9463 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 80001a88: e70ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80001a8c: 00351793 slli a5,a0,0x3 + 80001a90: 00f90933 add s2,s2,a5 + 80001a94: 00093783 ld a5,0(s2) + 80001a98: 000780e7 jalr a5 + 80001a9c: 00050713 mv a4,a0 + 80001aa0: 00056697 auipc a3,0x56 + 80001aa4: dd068693 addi a3,a3,-560 # 80057870 <_ZL7ZNTable> + 80001aa8: 00445503 lhu a0,4(s0) + 80001aac: 00a44783 lbu a5,10(s0) + 80001ab0: 00e686b3 add a3,a3,a4 + 80001ab4: 0006c683 lbu a3,0(a3) + 80001ab8: 0015051b addiw a0,a0,1 + 80001abc: 07d7f793 andi a5,a5,125 + 80001ac0: 03051513 slli a0,a0,0x30 + 80001ac4: 03055513 srli a0,a0,0x30 + 80001ac8: 00d7e7b3 or a5,a5,a3 + 80001acc: 00e40c23 sb a4,24(s0) + 80001ad0: 00a41223 sh a0,4(s0) + 80001ad4: 00e40323 sb a4,6(s0) + 80001ad8: 00f40523 sb a5,10(s0) + 80001adc: 01042483 lw s1,16(s0) + 80001ae0: d8ac9663 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 80001ae4: e14ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80001ae8: 00644683 lbu a3,6(s0) + 80001aec: 00056717 auipc a4,0x56 + 80001af0: d8470713 addi a4,a4,-636 # 80057870 <_ZL7ZNTable> + 80001af4: 00a44783 lbu a5,10(s0) + 80001af8: 00d70733 add a4,a4,a3 + 80001afc: 00074703 lbu a4,0(a4) + 80001b00: 07d7f793 andi a5,a5,125 + 80001b04: 00d40423 sb a3,8(s0) + 80001b08: 00e7e7b3 or a5,a5,a4 + 80001b0c: 00f40523 sb a5,10(s0) + 80001b10: 01042483 lw s1,16(s0) + 80001b14: d4ac9c63 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 80001b18: de0ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80001b1c: 00351793 slli a5,a0,0x3 + 80001b20: 00f90933 add s2,s2,a5 + 80001b24: 00093783 ld a5,0(s2) + 80001b28: 000780e7 jalr a5 + 80001b2c: 02051713 slli a4,a0,0x20 + 80001b30: 02075713 srli a4,a4,0x20 + 80001b34: 001c7797 auipc a5,0x1c7 + 80001b38: 1f478793 addi a5,a5,500 # 801c8d28 + 80001b3c: 00e787b3 add a5,a5,a4 + 80001b40: 0007c683 lbu a3,0(a5) + 80001b44: 00056717 auipc a4,0x56 + 80001b48: d2c70713 addi a4,a4,-724 # 80057870 <_ZL7ZNTable> + 80001b4c: 00a44783 lbu a5,10(s0) + 80001b50: 00d70733 add a4,a4,a3 + 80001b54: 00074703 lbu a4,0(a4) + 80001b58: 00445503 lhu a0,4(s0) + 80001b5c: 00d40c23 sb a3,24(s0) + 80001b60: 00f767b3 or a5,a4,a5 + 80001b64: 0015051b addiw a0,a0,1 + 80001b68: 07d7f793 andi a5,a5,125 + 80001b6c: 03051513 slli a0,a0,0x30 + 80001b70: 03055513 srli a0,a0,0x30 + 80001b74: 00f767b3 or a5,a4,a5 + 80001b78: 00a41223 sh a0,4(s0) + 80001b7c: 00d40323 sb a3,6(s0) + 80001b80: 00d403a3 sb a3,7(s0) + 80001b84: 00f40523 sb a5,10(s0) + 80001b88: 01042483 lw s1,16(s0) + 80001b8c: ceac9063 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 80001b90: d68ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80001b94: 00351793 slli a5,a0,0x3 + 80001b98: 00f90933 add s2,s2,a5 + 80001b9c: 00093783 ld a5,0(s2) + 80001ba0: 000780e7 jalr a5 + 80001ba4: 02051713 slli a4,a0,0x20 + 80001ba8: 02075713 srli a4,a4,0x20 + 80001bac: 001c7797 auipc a5,0x1c7 + 80001bb0: 17c78793 addi a5,a5,380 # 801c8d28 + 80001bb4: 00e787b3 add a5,a5,a4 + 80001bb8: 0007c703 lbu a4,0(a5) + 80001bbc: 00445503 lhu a0,4(s0) + 80001bc0: 00056697 auipc a3,0x56 + 80001bc4: cb068693 addi a3,a3,-848 # 80057870 <_ZL7ZNTable> + 80001bc8: 00a44783 lbu a5,10(s0) + 80001bcc: 00e686b3 add a3,a3,a4 + 80001bd0: 0006c683 lbu a3,0(a3) + 80001bd4: 0015051b addiw a0,a0,1 + 80001bd8: 07d7f793 andi a5,a5,125 + 80001bdc: 03051513 slli a0,a0,0x30 + 80001be0: 03055513 srli a0,a0,0x30 + 80001be4: 00d7e7b3 or a5,a5,a3 + 80001be8: 00a41223 sh a0,4(s0) + 80001bec: 00e40c23 sb a4,24(s0) + 80001bf0: 00e403a3 sb a4,7(s0) + 80001bf4: 00f40523 sb a5,10(s0) + 80001bf8: 01042483 lw s1,16(s0) + 80001bfc: c6ac9863 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 80001c00: cf8ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80001c04: 00351793 slli a5,a0,0x3 + 80001c08: 00f90933 add s2,s2,a5 + 80001c0c: 00093783 ld a5,0(s2) + 80001c10: 000780e7 jalr a5 + 80001c14: 02051713 slli a4,a0,0x20 + 80001c18: 02075713 srli a4,a4,0x20 + 80001c1c: 001c7797 auipc a5,0x1c7 + 80001c20: 10c78793 addi a5,a5,268 # 801c8d28 + 80001c24: 00e787b3 add a5,a5,a4 + 80001c28: 0007c703 lbu a4,0(a5) + 80001c2c: 00445503 lhu a0,4(s0) + 80001c30: 00056697 auipc a3,0x56 + 80001c34: c4068693 addi a3,a3,-960 # 80057870 <_ZL7ZNTable> + 80001c38: 00a44783 lbu a5,10(s0) + 80001c3c: 00e686b3 add a3,a3,a4 + 80001c40: 0006c683 lbu a3,0(a3) + 80001c44: 0015051b addiw a0,a0,1 + 80001c48: 07d7f793 andi a5,a5,125 + 80001c4c: 03051513 slli a0,a0,0x30 + 80001c50: 03055513 srli a0,a0,0x30 + 80001c54: 00d7e7b3 or a5,a5,a3 + 80001c58: 00a41223 sh a0,4(s0) + 80001c5c: 00e40c23 sb a4,24(s0) + 80001c60: 00e40323 sb a4,6(s0) + 80001c64: 00f40523 sb a5,10(s0) + 80001c68: 01042483 lw s1,16(s0) + 80001c6c: c0ac9063 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 80001c70: c88ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80001c74: 00351793 slli a5,a0,0x3 + 80001c78: 00f90933 add s2,s2,a5 + 80001c7c: 00093783 ld a5,0(s2) + 80001c80: 000780e7 jalr a5 + 80001c84: 02051713 slli a4,a0,0x20 + 80001c88: 02075713 srli a4,a4,0x20 + 80001c8c: 001c7797 auipc a5,0x1c7 + 80001c90: 09c78793 addi a5,a5,156 # 801c8d28 + 80001c94: 00e787b3 add a5,a5,a4 + 80001c98: 0007c703 lbu a4,0(a5) + 80001c9c: 00445503 lhu a0,4(s0) + 80001ca0: 00056697 auipc a3,0x56 + 80001ca4: bd068693 addi a3,a3,-1072 # 80057870 <_ZL7ZNTable> + 80001ca8: 00a44783 lbu a5,10(s0) + 80001cac: 00e686b3 add a3,a3,a4 + 80001cb0: 0006c683 lbu a3,0(a3) + 80001cb4: 0015051b addiw a0,a0,1 + 80001cb8: 07d7f793 andi a5,a5,125 + 80001cbc: 03051513 slli a0,a0,0x30 + 80001cc0: 03055513 srli a0,a0,0x30 + 80001cc4: 00d7e7b3 or a5,a5,a3 + 80001cc8: 00a41223 sh a0,4(s0) + 80001ccc: 00e40c23 sb a4,24(s0) + 80001cd0: 00e40423 sb a4,8(s0) + 80001cd4: 00f40523 sb a5,10(s0) + 80001cd8: 01042483 lw s1,16(s0) + 80001cdc: b8ac9863 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 80001ce0: c18ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80001ce4: 00351793 slli a5,a0,0x3 + 80001ce8: 00f907b3 add a5,s2,a5 + 80001cec: 0007b783 ld a5,0(a5) + 80001cf0: 000780e7 jalr a5 + 80001cf4: 00744783 lbu a5,7(s0) + 80001cf8: 001c7697 auipc a3,0x1c7 + 80001cfc: 03068693 addi a3,a3,48 # 801c8d28 + 80001d00: 00445603 lhu a2,4(s0) + 80001d04: 00a787bb addw a5,a5,a0 + 80001d08: 00178713 addi a4,a5,1 + 80001d0c: 0ff77713 andi a4,a4,255 + 80001d10: 00e68733 add a4,a3,a4 + 80001d14: 0ff7f793 andi a5,a5,255 + 80001d18: 00074703 lbu a4,0(a4) + 80001d1c: 00f687b3 add a5,a3,a5 + 80001d20: 0007c783 lbu a5,0(a5) + 80001d24: 0087151b slliw a0,a4,0x8 + 80001d28: 0016061b addiw a2,a2,1 + 80001d2c: 00f56533 or a0,a0,a5 + 80001d30: 03051793 slli a5,a0,0x30 + 80001d34: 02d7d793 srli a5,a5,0x2d + 80001d38: 00f90933 add s2,s2,a5 + 80001d3c: 00093783 ld a5,0(s2) + 80001d40: 00e40c23 sb a4,24(s0) + 80001d44: 00c41223 sh a2,4(s0) + 80001d48: 0005051b sext.w a0,a0 + 80001d4c: 000780e7 jalr a5 + 80001d50: 00056717 auipc a4,0x56 + 80001d54: b2070713 addi a4,a4,-1248 # 80057870 <_ZL7ZNTable> + 80001d58: 00a70733 add a4,a4,a0 + 80001d5c: 00074683 lbu a3,0(a4) + 80001d60: 00a44703 lbu a4,10(s0) + 80001d64: 00050793 mv a5,a0 + 80001d68: 00445503 lhu a0,4(s0) + 80001d6c: 00e6e733 or a4,a3,a4 + 80001d70: 07d77713 andi a4,a4,125 + 80001d74: 00e6e733 or a4,a3,a4 + 80001d78: 00f40c23 sb a5,24(s0) + 80001d7c: 00f40323 sb a5,6(s0) + 80001d80: 00f403a3 sb a5,7(s0) + 80001d84: 00e40523 sb a4,10(s0) + 80001d88: 01042483 lw s1,16(s0) + 80001d8c: aeac9063 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 80001d90: b68ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80001d94: 00351793 slli a5,a0,0x3 + 80001d98: 00f90933 add s2,s2,a5 + 80001d9c: 00093783 ld a5,0(s2) + 80001da0: 000780e7 jalr a5 + 80001da4: 00050713 mv a4,a0 + 80001da8: 00056697 auipc a3,0x56 + 80001dac: ac868693 addi a3,a3,-1336 # 80057870 <_ZL7ZNTable> + 80001db0: 00445503 lhu a0,4(s0) + 80001db4: 00a44783 lbu a5,10(s0) + 80001db8: 00e686b3 add a3,a3,a4 + 80001dbc: 0006c683 lbu a3,0(a3) + 80001dc0: 0015051b addiw a0,a0,1 + 80001dc4: 07d7f793 andi a5,a5,125 + 80001dc8: 03051513 slli a0,a0,0x30 + 80001dcc: 03055513 srli a0,a0,0x30 + 80001dd0: 00d7e7b3 or a5,a5,a3 + 80001dd4: 00e40c23 sb a4,24(s0) + 80001dd8: 00a41223 sh a0,4(s0) + 80001ddc: 00e403a3 sb a4,7(s0) + 80001de0: 00f40523 sb a5,10(s0) + 80001de4: 01042483 lw s1,16(s0) + 80001de8: a8ac9263 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 80001dec: b0cff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80001df0: 00351793 slli a5,a0,0x3 + 80001df4: 00f907b3 add a5,s2,a5 + 80001df8: 0007b783 ld a5,0(a5) + 80001dfc: 000780e7 jalr a5 + 80001e00: 00744783 lbu a5,7(s0) + 80001e04: 001c7697 auipc a3,0x1c7 + 80001e08: f2468693 addi a3,a3,-220 # 801c8d28 + 80001e0c: 00445603 lhu a2,4(s0) + 80001e10: 00a787bb addw a5,a5,a0 + 80001e14: 00178713 addi a4,a5,1 + 80001e18: 0ff77713 andi a4,a4,255 + 80001e1c: 00e68733 add a4,a3,a4 + 80001e20: 0ff7f793 andi a5,a5,255 + 80001e24: 00074703 lbu a4,0(a4) + 80001e28: 00f687b3 add a5,a3,a5 + 80001e2c: 0007c783 lbu a5,0(a5) + 80001e30: 0087151b slliw a0,a4,0x8 + 80001e34: 0016061b addiw a2,a2,1 + 80001e38: 00f56533 or a0,a0,a5 + 80001e3c: 03051793 slli a5,a0,0x30 + 80001e40: 02d7d793 srli a5,a5,0x2d + 80001e44: 00f90933 add s2,s2,a5 + 80001e48: 00093783 ld a5,0(s2) + 80001e4c: 00e40c23 sb a4,24(s0) + 80001e50: 00c41223 sh a2,4(s0) + 80001e54: 0005051b sext.w a0,a0 + 80001e58: 000780e7 jalr a5 + 80001e5c: 00056697 auipc a3,0x56 + 80001e60: a1468693 addi a3,a3,-1516 # 80057870 <_ZL7ZNTable> + 80001e64: 00a44783 lbu a5,10(s0) + 80001e68: 00a686b3 add a3,a3,a0 + 80001e6c: 0006c683 lbu a3,0(a3) + 80001e70: 00050713 mv a4,a0 + 80001e74: 07d7f793 andi a5,a5,125 + 80001e78: 00445503 lhu a0,4(s0) + 80001e7c: 00d7e7b3 or a5,a5,a3 + 80001e80: 00e40c23 sb a4,24(s0) + 80001e84: 00e40323 sb a4,6(s0) + 80001e88: 00f40523 sb a5,10(s0) + 80001e8c: 01042483 lw s1,16(s0) + 80001e90: 9cac9e63 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 80001e94: a64ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80001e98: 00351793 slli a5,a0,0x3 + 80001e9c: 00f90933 add s2,s2,a5 + 80001ea0: 00093783 ld a5,0(s2) + 80001ea4: 000780e7 jalr a5 + 80001ea8: 00050713 mv a4,a0 + 80001eac: 00056697 auipc a3,0x56 + 80001eb0: 9c468693 addi a3,a3,-1596 # 80057870 <_ZL7ZNTable> + 80001eb4: 00445503 lhu a0,4(s0) + 80001eb8: 00a44783 lbu a5,10(s0) + 80001ebc: 00e686b3 add a3,a3,a4 + 80001ec0: 0006c683 lbu a3,0(a3) + 80001ec4: 0015051b addiw a0,a0,1 + 80001ec8: 07d7f793 andi a5,a5,125 + 80001ecc: 03051513 slli a0,a0,0x30 + 80001ed0: 03055513 srli a0,a0,0x30 + 80001ed4: 00d7e7b3 or a5,a5,a3 + 80001ed8: 00e40c23 sb a4,24(s0) + 80001edc: 00a41223 sh a0,4(s0) + 80001ee0: 00e40423 sb a4,8(s0) + 80001ee4: 00f40523 sb a5,10(s0) + 80001ee8: 01042483 lw s1,16(s0) + 80001eec: 98ac9063 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 80001ef0: a08ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80001ef4: 00351793 slli a5,a0,0x3 + 80001ef8: 00f907b3 add a5,s2,a5 + 80001efc: 0007b783 ld a5,0(a5) + 80001f00: 000780e7 jalr a5 + 80001f04: 00445783 lhu a5,4(s0) + 80001f08: 00050713 mv a4,a0 + 80001f0c: 00a40c23 sb a0,24(s0) + 80001f10: 0017879b addiw a5,a5,1 + 80001f14: 03079513 slli a0,a5,0x30 + 80001f18: 03055513 srli a0,a0,0x30 + 80001f1c: 00351793 slli a5,a0,0x3 + 80001f20: 00f907b3 add a5,s2,a5 + 80001f24: 0007b783 ld a5,0(a5) + 80001f28: 00a41223 sh a0,4(s0) + 80001f2c: 00070d1b sext.w s10,a4 + 80001f30: 000780e7 jalr a5 + 80001f34: 00844483 lbu s1,8(s0) + 80001f38: 00851793 slli a5,a0,0x8 + 80001f3c: 01a7e7b3 or a5,a5,s10 + 80001f40: 00f484bb addw s1,s1,a5 + 80001f44: 0ff4f613 andi a2,s1,255 + 80001f48: 0187f7b3 and a5,a5,s8 + 80001f4c: 00f66733 or a4,a2,a5 + 80001f50: 00445683 lhu a3,4(s0) + 80001f54: 00371713 slli a4,a4,0x3 + 80001f58: 00e90933 add s2,s2,a4 + 80001f5c: 00093583 ld a1,0(s2) + 80001f60: 0016871b addiw a4,a3,1 + 80001f64: 00a40c23 sb a0,24(s0) + 80001f68: 00e41223 sh a4,4(s0) + 80001f6c: 00f66533 or a0,a2,a5 + 80001f70: 000580e7 jalr a1 + 80001f74: 00844783 lbu a5,8(s0) + 80001f78: 03049493 slli s1,s1,0x30 + 80001f7c: 0304d493 srli s1,s1,0x30 + 80001f80: 00644703 lbu a4,6(s0) + 80001f84: 00744603 lbu a2,7(s0) + 80001f88: 00349593 slli a1,s1,0x3 + 80001f8c: 40f487bb subw a5,s1,a5 + 80001f90: 00147697 auipc a3,0x147 + 80001f94: d5068693 addi a3,a3,-688 # 80148ce0 + 80001f98: 00b686b3 add a3,a3,a1 + 80001f9c: 0087d79b srliw a5,a5,0x8 + 80001fa0: 00c77733 and a4,a4,a2 + 80001fa4: 0006b683 ld a3,0(a3) + 80001fa8: 0017879b addiw a5,a5,1 + 80001fac: 00f777b3 and a5,a4,a5 + 80001fb0: 00a40c23 sb a0,24(s0) + 80001fb4: 0ff7f593 andi a1,a5,255 + 80001fb8: 00048513 mv a0,s1 + 80001fbc: 000680e7 jalr a3 + 80001fc0: 00445503 lhu a0,4(s0) + 80001fc4: 01042483 lw s1,16(s0) + 80001fc8: 8aac9263 bne s9,a0,8000106c <_Z14X6502_RunDebugi+0x20c> + 80001fcc: 92cff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80001fd0: 00351793 slli a5,a0,0x3 + 80001fd4: 00f907b3 add a5,s2,a5 + 80001fd8: 0007b783 ld a5,0(a5) + 80001fdc: 000780e7 jalr a5 + 80001fe0: 00445783 lhu a5,4(s0) + 80001fe4: 00050713 mv a4,a0 + 80001fe8: 00a40c23 sb a0,24(s0) + 80001fec: 0017879b addiw a5,a5,1 + 80001ff0: 03079513 slli a0,a5,0x30 + 80001ff4: 03055513 srli a0,a0,0x30 + 80001ff8: 00351793 slli a5,a0,0x3 + 80001ffc: 00f907b3 add a5,s2,a5 + 80002000: 0007b783 ld a5,0(a5) + 80002004: 00a41223 sh a0,4(s0) + 80002008: 00070d1b sext.w s10,a4 + 8000200c: 000780e7 jalr a5 + 80002010: 00844483 lbu s1,8(s0) + 80002014: 00851793 slli a5,a0,0x8 + 80002018: 01a7e7b3 or a5,a5,s10 + 8000201c: 00f484bb addw s1,s1,a5 + 80002020: 0ff4f613 andi a2,s1,255 + 80002024: 0187f7b3 and a5,a5,s8 + 80002028: 00f66733 or a4,a2,a5 + 8000202c: 00445683 lhu a3,4(s0) + 80002030: 00371713 slli a4,a4,0x3 + 80002034: 00e90933 add s2,s2,a4 + 80002038: 00093583 ld a1,0(s2) + 8000203c: 0016871b addiw a4,a3,1 + 80002040: 00a40c23 sb a0,24(s0) + 80002044: 00e41223 sh a4,4(s0) + 80002048: 00f66533 or a0,a2,a5 + 8000204c: 000580e7 jalr a1 + 80002050: 00844783 lbu a5,8(s0) + 80002054: 03049493 slli s1,s1,0x30 + 80002058: 0304d493 srli s1,s1,0x30 + 8000205c: 00349693 slli a3,s1,0x3 + 80002060: 00147717 auipc a4,0x147 + 80002064: c8070713 addi a4,a4,-896 # 80148ce0 + 80002068: 00744583 lbu a1,7(s0) + 8000206c: 40f487bb subw a5,s1,a5 + 80002070: 00d70733 add a4,a4,a3 + 80002074: 00073703 ld a4,0(a4) + 80002078: 0087d79b srliw a5,a5,0x8 + 8000207c: 0017879b addiw a5,a5,1 + 80002080: 00a40c23 sb a0,24(s0) + 80002084: 00f5f5b3 and a1,a1,a5 + 80002088: 00048513 mv a0,s1 + 8000208c: 000700e7 jalr a4 + 80002090: 00445503 lhu a0,4(s0) + 80002094: 01042483 lw s1,16(s0) + 80002098: 00ac8463 beq s9,a0,800020a0 <_Z14X6502_RunDebugi+0x1240> + 8000209c: fd1fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800020a0: 858ff06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800020a4: 00351793 slli a5,a0,0x3 + 800020a8: 00f907b3 add a5,s2,a5 + 800020ac: 0007b783 ld a5,0(a5) + 800020b0: 000780e7 jalr a5 + 800020b4: 00445783 lhu a5,4(s0) + 800020b8: 00050713 mv a4,a0 + 800020bc: 00a40c23 sb a0,24(s0) + 800020c0: 0017879b addiw a5,a5,1 + 800020c4: 03079513 slli a0,a5,0x30 + 800020c8: 03055513 srli a0,a0,0x30 + 800020cc: 00351793 slli a5,a0,0x3 + 800020d0: 00f907b3 add a5,s2,a5 + 800020d4: 0007b783 ld a5,0(a5) + 800020d8: 00a41223 sh a0,4(s0) + 800020dc: 00070d1b sext.w s10,a4 + 800020e0: 000780e7 jalr a5 + 800020e4: 00744483 lbu s1,7(s0) + 800020e8: 00851793 slli a5,a0,0x8 + 800020ec: 01a7e7b3 or a5,a5,s10 + 800020f0: 00f484bb addw s1,s1,a5 + 800020f4: 0ff4f613 andi a2,s1,255 + 800020f8: 0187f7b3 and a5,a5,s8 + 800020fc: 00f66733 or a4,a2,a5 + 80002100: 00445683 lhu a3,4(s0) + 80002104: 00371713 slli a4,a4,0x3 + 80002108: 00e90933 add s2,s2,a4 + 8000210c: 00093583 ld a1,0(s2) + 80002110: 0016871b addiw a4,a3,1 + 80002114: 00a40c23 sb a0,24(s0) + 80002118: 00e41223 sh a4,4(s0) + 8000211c: 00f66533 or a0,a2,a5 + 80002120: 03049493 slli s1,s1,0x30 + 80002124: 000580e7 jalr a1 + 80002128: 0304d493 srli s1,s1,0x30 + 8000212c: 00349713 slli a4,s1,0x3 + 80002130: 00147797 auipc a5,0x147 + 80002134: bb078793 addi a5,a5,-1104 # 80148ce0 + 80002138: 00e787b3 add a5,a5,a4 + 8000213c: 0007b783 ld a5,0(a5) + 80002140: 00644583 lbu a1,6(s0) + 80002144: 00a40c23 sb a0,24(s0) + 80002148: 00048513 mv a0,s1 + 8000214c: 000780e7 jalr a5 + 80002150: 00445503 lhu a0,4(s0) + 80002154: 01042483 lw s1,16(s0) + 80002158: 00ac8463 beq s9,a0,80002160 <_Z14X6502_RunDebugi+0x1300> + 8000215c: f11fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002160: f99fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80002164: 00351793 slli a5,a0,0x3 + 80002168: 00f907b3 add a5,s2,a5 + 8000216c: 0007b783 ld a5,0(a5) + 80002170: 000780e7 jalr a5 + 80002174: 00445783 lhu a5,4(s0) + 80002178: 00050713 mv a4,a0 + 8000217c: 00a40c23 sb a0,24(s0) + 80002180: 0017879b addiw a5,a5,1 + 80002184: 03079513 slli a0,a5,0x30 + 80002188: 03055513 srli a0,a0,0x30 + 8000218c: 00351793 slli a5,a0,0x3 + 80002190: 00f907b3 add a5,s2,a5 + 80002194: 0007b783 ld a5,0(a5) + 80002198: 00a41223 sh a0,4(s0) + 8000219c: 00070d1b sext.w s10,a4 + 800021a0: 000780e7 jalr a5 + 800021a4: 00744483 lbu s1,7(s0) + 800021a8: 00851793 slli a5,a0,0x8 + 800021ac: 01a7e7b3 or a5,a5,s10 + 800021b0: 00f484bb addw s1,s1,a5 + 800021b4: 0ff4f613 andi a2,s1,255 + 800021b8: 0187f7b3 and a5,a5,s8 + 800021bc: 00f66733 or a4,a2,a5 + 800021c0: 00445683 lhu a3,4(s0) + 800021c4: 00371713 slli a4,a4,0x3 + 800021c8: 00e90933 add s2,s2,a4 + 800021cc: 00093583 ld a1,0(s2) + 800021d0: 0016871b addiw a4,a3,1 + 800021d4: 00a40c23 sb a0,24(s0) + 800021d8: 00e41223 sh a4,4(s0) + 800021dc: 00f66533 or a0,a2,a5 + 800021e0: 000580e7 jalr a1 + 800021e4: 00744783 lbu a5,7(s0) + 800021e8: 03049493 slli s1,s1,0x30 + 800021ec: 0304d493 srli s1,s1,0x30 + 800021f0: 00349693 slli a3,s1,0x3 + 800021f4: 00147717 auipc a4,0x147 + 800021f8: aec70713 addi a4,a4,-1300 # 80148ce0 + 800021fc: 00844583 lbu a1,8(s0) + 80002200: 40f487bb subw a5,s1,a5 + 80002204: 00d70733 add a4,a4,a3 + 80002208: 00073703 ld a4,0(a4) + 8000220c: 0087d79b srliw a5,a5,0x8 + 80002210: 0017879b addiw a5,a5,1 + 80002214: 00a40c23 sb a0,24(s0) + 80002218: 00f5f5b3 and a1,a1,a5 + 8000221c: 00048513 mv a0,s1 + 80002220: 000700e7 jalr a4 + 80002224: 00445503 lhu a0,4(s0) + 80002228: 01042483 lw s1,16(s0) + 8000222c: 00ac8463 beq s9,a0,80002234 <_Z14X6502_RunDebugi+0x13d4> + 80002230: e3dfe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002234: ec5fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80002238: 00351793 slli a5,a0,0x3 + 8000223c: 00f907b3 add a5,s2,a5 + 80002240: 0007b783 ld a5,0(a5) + 80002244: 000780e7 jalr a5 + 80002248: 00445783 lhu a5,4(s0) + 8000224c: 00050493 mv s1,a0 + 80002250: 00a40c23 sb a0,24(s0) + 80002254: 0017879b addiw a5,a5,1 + 80002258: 03079513 slli a0,a5,0x30 + 8000225c: 03055513 srli a0,a0,0x30 + 80002260: 00351793 slli a5,a0,0x3 + 80002264: 00f907b3 add a5,s2,a5 + 80002268: 0007b783 ld a5,0(a5) + 8000226c: 00a41223 sh a0,4(s0) + 80002270: 0004849b sext.w s1,s1 + 80002274: 000780e7 jalr a5 + 80002278: 00851693 slli a3,a0,0x8 + 8000227c: 0096e7b3 or a5,a3,s1 + 80002280: 00445703 lhu a4,4(s0) + 80002284: 00379793 slli a5,a5,0x3 + 80002288: 00f90933 add s2,s2,a5 + 8000228c: 00093603 ld a2,0(s2) + 80002290: 0017079b addiw a5,a4,1 + 80002294: 00a40c23 sb a0,24(s0) + 80002298: 00f41223 sh a5,4(s0) + 8000229c: 0096e533 or a0,a3,s1 + 800022a0: 000600e7 jalr a2 + 800022a4: 00744783 lbu a5,7(s0) + 800022a8: 00055617 auipc a2,0x55 + 800022ac: 5c860613 addi a2,a2,1480 # 80057870 <_ZL7ZNTable> + 800022b0: 00a44703 lbu a4,10(s0) + 800022b4: 40a787bb subw a5,a5,a0 + 800022b8: 0ff7f593 andi a1,a5,255 + 800022bc: 00b60633 add a2,a2,a1 + 800022c0: 00064603 lbu a2,0(a2) + 800022c4: 07d77713 andi a4,a4,125 + 800022c8: 4087d79b sraiw a5,a5,0x8 + 800022cc: 00c76733 or a4,a4,a2 + 800022d0: 0017c793 xori a5,a5,1 + 800022d4: 00050693 mv a3,a0 + 800022d8: ffe77713 andi a4,a4,-2 + 800022dc: 0017f793 andi a5,a5,1 + 800022e0: 00445503 lhu a0,4(s0) + 800022e4: 00f767b3 or a5,a4,a5 + 800022e8: 00d40c23 sb a3,24(s0) + 800022ec: 00f40523 sb a5,10(s0) + 800022f0: 01042483 lw s1,16(s0) + 800022f4: 00ac8463 beq s9,a0,800022fc <_Z14X6502_RunDebugi+0x149c> + 800022f8: d75fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800022fc: dfdfe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80002300: 00644703 lbu a4,6(s0) + 80002304: 00a44783 lbu a5,10(s0) + 80002308: 00055697 auipc a3,0x55 + 8000230c: 56868693 addi a3,a3,1384 # 80057870 <_ZL7ZNTable> + 80002310: 0017161b slliw a2,a4,0x1 + 80002314: 0fe67593 andi a1,a2,254 + 80002318: 00b686b3 add a3,a3,a1 + 8000231c: 0006c683 lbu a3,0(a3) + 80002320: ffe7f793 andi a5,a5,-2 + 80002324: 4077571b sraiw a4,a4,0x7 + 80002328: 00e7e7b3 or a5,a5,a4 + 8000232c: 07d7f793 andi a5,a5,125 + 80002330: 00d7e7b3 or a5,a5,a3 + 80002334: 00f40523 sb a5,10(s0) + 80002338: 00c40323 sb a2,6(s0) + 8000233c: 01042483 lw s1,16(s0) + 80002340: 00ac8463 beq s9,a0,80002348 <_Z14X6502_RunDebugi+0x14e8> + 80002344: d29fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002348: db1fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000234c: 00351793 slli a5,a0,0x3 + 80002350: 00f90933 add s2,s2,a5 + 80002354: 00093783 ld a5,0(s2) + 80002358: 000780e7 jalr a5 + 8000235c: 00644703 lbu a4,6(s0) + 80002360: 00050693 mv a3,a0 + 80002364: 00055617 auipc a2,0x55 + 80002368: 50c60613 addi a2,a2,1292 # 80057870 <_ZL7ZNTable> + 8000236c: 00e56733 or a4,a0,a4 + 80002370: 00445503 lhu a0,4(s0) + 80002374: 00a44783 lbu a5,10(s0) + 80002378: 00e60633 add a2,a2,a4 + 8000237c: 00064603 lbu a2,0(a2) + 80002380: 0015051b addiw a0,a0,1 + 80002384: 07d7f793 andi a5,a5,125 + 80002388: 03051513 slli a0,a0,0x30 + 8000238c: 03055513 srli a0,a0,0x30 + 80002390: 00c7e7b3 or a5,a5,a2 + 80002394: 00d40c23 sb a3,24(s0) + 80002398: 00a41223 sh a0,4(s0) + 8000239c: 00e40323 sb a4,6(s0) + 800023a0: 00f40523 sb a5,10(s0) + 800023a4: 01042483 lw s1,16(s0) + 800023a8: 00ac8463 beq s9,a0,800023b0 <_Z14X6502_RunDebugi+0x1550> + 800023ac: cc1fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800023b0: d49fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800023b4: 00944783 lbu a5,9(s0) + 800023b8: 00a44683 lbu a3,10(s0) + 800023bc: 001c7717 auipc a4,0x1c7 + 800023c0: a6c70713 addi a4,a4,-1428 # 801c8e28 + 800023c4: 00e78733 add a4,a5,a4 + 800023c8: 0306e693 ori a3,a3,48 + 800023cc: fff7879b addiw a5,a5,-1 + 800023d0: 00d70023 sb a3,0(a4) + 800023d4: 00f404a3 sb a5,9(s0) + 800023d8: 01042483 lw s1,16(s0) + 800023dc: 00ac8463 beq s9,a0,800023e4 <_Z14X6502_RunDebugi+0x1584> + 800023e0: c8dfe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800023e4: d15fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800023e8: 00351793 slli a5,a0,0x3 + 800023ec: 00f90933 add s2,s2,a5 + 800023f0: 00093783 ld a5,0(s2) + 800023f4: 000780e7 jalr a5 + 800023f8: 02051793 slli a5,a0,0x20 + 800023fc: 0207d793 srli a5,a5,0x20 + 80002400: 001c7597 auipc a1,0x1c7 + 80002404: 92858593 addi a1,a1,-1752 # 801c8d28 + 80002408: 00f585b3 add a1,a1,a5 + 8000240c: 0005c803 lbu a6,0(a1) + 80002410: 00644883 lbu a7,6(s0) + 80002414: 00a44703 lbu a4,10(s0) + 80002418: 0018161b slliw a2,a6,0x1 + 8000241c: 00055697 auipc a3,0x55 + 80002420: 45468693 addi a3,a3,1108 # 80057870 <_ZL7ZNTable> + 80002424: 0fe67793 andi a5,a2,254 + 80002428: 00f687b3 add a5,a3,a5 + 8000242c: 0ff67613 andi a2,a2,255 + 80002430: 00445503 lhu a0,4(s0) + 80002434: 011668b3 or a7,a2,a7 + 80002438: 0007c783 lbu a5,0(a5) + 8000243c: ffe77713 andi a4,a4,-2 + 80002440: 4078531b sraiw t1,a6,0x7 + 80002444: 011686b3 add a3,a3,a7 + 80002448: 0006c683 lbu a3,0(a3) + 8000244c: 00676733 or a4,a4,t1 + 80002450: 00e7e7b3 or a5,a5,a4 + 80002454: 0015051b addiw a0,a0,1 + 80002458: 07d7f793 andi a5,a5,125 + 8000245c: 03051513 slli a0,a0,0x30 + 80002460: 03055513 srli a0,a0,0x30 + 80002464: 00d7e7b3 or a5,a5,a3 + 80002468: 00a41223 sh a0,4(s0) + 8000246c: 01040c23 sb a6,24(s0) + 80002470: 01140323 sb a7,6(s0) + 80002474: 00f40523 sb a5,10(s0) + 80002478: 00c58023 sb a2,0(a1) + 8000247c: 01042483 lw s1,16(s0) + 80002480: 00ac8463 beq s9,a0,80002488 <_Z14X6502_RunDebugi+0x1628> + 80002484: be9fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002488: c71fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000248c: 00351793 slli a5,a0,0x3 + 80002490: 00f90933 add s2,s2,a5 + 80002494: 00093783 ld a5,0(s2) + 80002498: 000780e7 jalr a5 + 8000249c: 02051793 slli a5,a0,0x20 + 800024a0: 0207d793 srli a5,a5,0x20 + 800024a4: 001c7717 auipc a4,0x1c7 + 800024a8: 88470713 addi a4,a4,-1916 # 801c8d28 + 800024ac: 00f70733 add a4,a4,a5 + 800024b0: 00074683 lbu a3,0(a4) + 800024b4: 00a44783 lbu a5,10(s0) + 800024b8: 00445503 lhu a0,4(s0) + 800024bc: 0016959b slliw a1,a3,0x1 + 800024c0: 0fe5f813 andi a6,a1,254 + 800024c4: 00055617 auipc a2,0x55 + 800024c8: 3ac60613 addi a2,a2,940 # 80057870 <_ZL7ZNTable> + 800024cc: 01060633 add a2,a2,a6 + 800024d0: 00064603 lbu a2,0(a2) + 800024d4: ffe7f793 andi a5,a5,-2 + 800024d8: 4076d81b sraiw a6,a3,0x7 + 800024dc: 0107e7b3 or a5,a5,a6 + 800024e0: 0015051b addiw a0,a0,1 + 800024e4: 07d7f793 andi a5,a5,125 + 800024e8: 03051513 slli a0,a0,0x30 + 800024ec: 03055513 srli a0,a0,0x30 + 800024f0: 00c7e7b3 or a5,a5,a2 + 800024f4: 00a41223 sh a0,4(s0) + 800024f8: 00d40c23 sb a3,24(s0) + 800024fc: 00f40523 sb a5,10(s0) + 80002500: 00b70023 sb a1,0(a4) + 80002504: 01042483 lw s1,16(s0) + 80002508: 00ac8463 beq s9,a0,80002510 <_Z14X6502_RunDebugi+0x16b0> + 8000250c: b61fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002510: be9fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80002514: 00351793 slli a5,a0,0x3 + 80002518: 00f90933 add s2,s2,a5 + 8000251c: 00093783 ld a5,0(s2) + 80002520: 000780e7 jalr a5 + 80002524: 02051713 slli a4,a0,0x20 + 80002528: 02075713 srli a4,a4,0x20 + 8000252c: 001c6797 auipc a5,0x1c6 + 80002530: 7fc78793 addi a5,a5,2044 # 801c8d28 + 80002534: 00e787b3 add a5,a5,a4 + 80002538: 0007c603 lbu a2,0(a5) + 8000253c: 00644703 lbu a4,6(s0) + 80002540: 00445503 lhu a0,4(s0) + 80002544: 00055697 auipc a3,0x55 + 80002548: 32c68693 addi a3,a3,812 # 80057870 <_ZL7ZNTable> + 8000254c: 00e66733 or a4,a2,a4 + 80002550: 00a44783 lbu a5,10(s0) + 80002554: 00e686b3 add a3,a3,a4 + 80002558: 0006c683 lbu a3,0(a3) + 8000255c: 0015051b addiw a0,a0,1 + 80002560: 07d7f793 andi a5,a5,125 + 80002564: 03051513 slli a0,a0,0x30 + 80002568: 03055513 srli a0,a0,0x30 + 8000256c: 00d7e7b3 or a5,a5,a3 + 80002570: 00a41223 sh a0,4(s0) + 80002574: 00c40c23 sb a2,24(s0) + 80002578: 00e40323 sb a4,6(s0) + 8000257c: 00f40523 sb a5,10(s0) + 80002580: 01042483 lw s1,16(s0) + 80002584: 00ac8463 beq s9,a0,8000258c <_Z14X6502_RunDebugi+0x172c> + 80002588: ae5fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000258c: b6dfe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80002590: 00351793 slli a5,a0,0x3 + 80002594: 00f907b3 add a5,s2,a5 + 80002598: 0007b783 ld a5,0(a5) + 8000259c: 00146d17 auipc s10,0x146 + 800025a0: 744d0d13 addi s10,s10,1860 # 80148ce0 + 800025a4: 000780e7 jalr a5 + 800025a8: 00744783 lbu a5,7(s0) + 800025ac: 001c6697 auipc a3,0x1c6 + 800025b0: 77c68693 addi a3,a3,1916 # 801c8d28 + 800025b4: 00445603 lhu a2,4(s0) + 800025b8: 00a787bb addw a5,a5,a0 + 800025bc: 00178713 addi a4,a5,1 + 800025c0: 0ff77713 andi a4,a4,255 + 800025c4: 00e68733 add a4,a3,a4 + 800025c8: 0ff7f793 andi a5,a5,255 + 800025cc: 00074703 lbu a4,0(a4) + 800025d0: 00f687b3 add a5,a3,a5 + 800025d4: 0007c683 lbu a3,0(a5) + 800025d8: 0087179b slliw a5,a4,0x8 + 800025dc: 0016061b addiw a2,a2,1 + 800025e0: 00d7e7b3 or a5,a5,a3 + 800025e4: 03079493 slli s1,a5,0x30 + 800025e8: 02d4d493 srli s1,s1,0x2d + 800025ec: 00990933 add s2,s2,s1 + 800025f0: 00093683 ld a3,0(s2) + 800025f4: 0007891b sext.w s2,a5 + 800025f8: 00c41223 sh a2,4(s0) + 800025fc: 00e40c23 sb a4,24(s0) + 80002600: 00090513 mv a0,s2 + 80002604: 000680e7 jalr a3 + 80002608: 009d0d33 add s10,s10,s1 + 8000260c: 000d3783 ld a5,0(s10) + 80002610: 00050493 mv s1,a0 + 80002614: 00050593 mv a1,a0 + 80002618: 00940c23 sb s1,24(s0) + 8000261c: 00090513 mv a0,s2 + 80002620: 000780e7 jalr a5 + 80002624: 00644683 lbu a3,6(s0) + 80002628: 0014959b slliw a1,s1,0x1 + 8000262c: 00a44703 lbu a4,10(s0) + 80002630: 00055617 auipc a2,0x55 + 80002634: 24060613 addi a2,a2,576 # 80057870 <_ZL7ZNTable> + 80002638: 0fe5f793 andi a5,a1,254 + 8000263c: 00f607b3 add a5,a2,a5 + 80002640: 0ff5f593 andi a1,a1,255 + 80002644: 00d5e6b3 or a3,a1,a3 + 80002648: 0007c783 lbu a5,0(a5) + 8000264c: ffe77713 andi a4,a4,-2 + 80002650: 00d60633 add a2,a2,a3 + 80002654: 4074d49b sraiw s1,s1,0x7 + 80002658: 009764b3 or s1,a4,s1 + 8000265c: 00064603 lbu a2,0(a2) + 80002660: 0097e7b3 or a5,a5,s1 + 80002664: 000d3703 ld a4,0(s10) + 80002668: 07d7f793 andi a5,a5,125 + 8000266c: 00c7e7b3 or a5,a5,a2 + 80002670: 00090513 mv a0,s2 + 80002674: 00d40323 sb a3,6(s0) + 80002678: 00f40523 sb a5,10(s0) + 8000267c: 000700e7 jalr a4 + 80002680: 00445503 lhu a0,4(s0) + 80002684: 01042483 lw s1,16(s0) + 80002688: 00ac8463 beq s9,a0,80002690 <_Z14X6502_RunDebugi+0x1830> + 8000268c: 9e1fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002690: a69fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80002694: 00351793 slli a5,a0,0x3 + 80002698: 00f90933 add s2,s2,a5 + 8000269c: 00093783 ld a5,0(s2) + 800026a0: 00744483 lbu s1,7(s0) + 800026a4: 000780e7 jalr a5 + 800026a8: 00a487bb addw a5,s1,a0 + 800026ac: 001c6717 auipc a4,0x1c6 + 800026b0: 67c70713 addi a4,a4,1660 # 801c8d28 + 800026b4: 0ff7f793 andi a5,a5,255 + 800026b8: 00f707b3 add a5,a4,a5 + 800026bc: 0007c603 lbu a2,0(a5) + 800026c0: 00644703 lbu a4,6(s0) + 800026c4: 00445503 lhu a0,4(s0) + 800026c8: 00055697 auipc a3,0x55 + 800026cc: 1a868693 addi a3,a3,424 # 80057870 <_ZL7ZNTable> + 800026d0: 00e66733 or a4,a2,a4 + 800026d4: 00a44783 lbu a5,10(s0) + 800026d8: 00e686b3 add a3,a3,a4 + 800026dc: 0006c683 lbu a3,0(a3) + 800026e0: 0015051b addiw a0,a0,1 + 800026e4: 07d7f793 andi a5,a5,125 + 800026e8: 03051513 slli a0,a0,0x30 + 800026ec: 03055513 srli a0,a0,0x30 + 800026f0: 00d7e7b3 or a5,a5,a3 + 800026f4: 00a41223 sh a0,4(s0) + 800026f8: 00c40c23 sb a2,24(s0) + 800026fc: 00e40323 sb a4,6(s0) + 80002700: 00f40523 sb a5,10(s0) + 80002704: 01042483 lw s1,16(s0) + 80002708: 00ac8463 beq s9,a0,80002710 <_Z14X6502_RunDebugi+0x18b0> + 8000270c: 961fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002710: 9e9fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80002714: 00351793 slli a5,a0,0x3 + 80002718: 00f907b3 add a5,s2,a5 + 8000271c: 0007b783 ld a5,0(a5) + 80002720: 000780e7 jalr a5 + 80002724: 0015079b addiw a5,a0,1 + 80002728: 001c6717 auipc a4,0x1c6 + 8000272c: 60070713 addi a4,a4,1536 # 801c8d28 + 80002730: 0ff7f793 andi a5,a5,255 + 80002734: 02051513 slli a0,a0,0x20 + 80002738: 00f707b3 add a5,a4,a5 + 8000273c: 02055513 srli a0,a0,0x20 + 80002740: 0007c603 lbu a2,0(a5) + 80002744: 00a70533 add a0,a4,a0 + 80002748: 00054703 lbu a4,0(a0) + 8000274c: 00844d03 lbu s10,8(s0) + 80002750: 0086179b slliw a5,a2,0x8 + 80002754: 00e7e7b3 or a5,a5,a4 + 80002758: 00fd0d3b addw s10,s10,a5 + 8000275c: 0007879b sext.w a5,a5 + 80002760: 0187f7b3 and a5,a5,s8 + 80002764: 0ffd7513 andi a0,s10,255 + 80002768: 00f56733 or a4,a0,a5 + 8000276c: 00445683 lhu a3,4(s0) + 80002770: 00371713 slli a4,a4,0x3 + 80002774: 00e90733 add a4,s2,a4 + 80002778: 00073583 ld a1,0(a4) + 8000277c: 030d1d13 slli s10,s10,0x30 + 80002780: 0016871b addiw a4,a3,1 + 80002784: 030d5d13 srli s10,s10,0x30 + 80002788: 00e41223 sh a4,4(s0) + 8000278c: 00c40c23 sb a2,24(s0) + 80002790: 003d1493 slli s1,s10,0x3 + 80002794: 00f56533 or a0,a0,a5 + 80002798: 000580e7 jalr a1 + 8000279c: 00990933 add s2,s2,s1 + 800027a0: 00093783 ld a5,0(s2) + 800027a4: 00a40c23 sb a0,24(s0) + 800027a8: 00146917 auipc s2,0x146 + 800027ac: 53890913 addi s2,s2,1336 # 80148ce0 + 800027b0: 000d0513 mv a0,s10 + 800027b4: 000780e7 jalr a5 + 800027b8: 00990933 add s2,s2,s1 + 800027bc: 00093783 ld a5,0(s2) + 800027c0: 00050493 mv s1,a0 + 800027c4: 00050593 mv a1,a0 + 800027c8: 00940c23 sb s1,24(s0) + 800027cc: 000d0513 mv a0,s10 + 800027d0: 000780e7 jalr a5 + 800027d4: 00644683 lbu a3,6(s0) + 800027d8: 0014959b slliw a1,s1,0x1 + 800027dc: 00a44703 lbu a4,10(s0) + 800027e0: 00055617 auipc a2,0x55 + 800027e4: 09060613 addi a2,a2,144 # 80057870 <_ZL7ZNTable> + 800027e8: 0fe5f793 andi a5,a1,254 + 800027ec: 00f607b3 add a5,a2,a5 + 800027f0: 0ff5f593 andi a1,a1,255 + 800027f4: 00d5e6b3 or a3,a1,a3 + 800027f8: 0007c783 lbu a5,0(a5) + 800027fc: ffe77713 andi a4,a4,-2 + 80002800: 00d60633 add a2,a2,a3 + 80002804: 4074d49b sraiw s1,s1,0x7 + 80002808: 009764b3 or s1,a4,s1 + 8000280c: 00064603 lbu a2,0(a2) + 80002810: 0097e7b3 or a5,a5,s1 + 80002814: 00093703 ld a4,0(s2) + 80002818: 07d7f793 andi a5,a5,125 + 8000281c: 00c7e7b3 or a5,a5,a2 + 80002820: 000d0513 mv a0,s10 + 80002824: 00d40323 sb a3,6(s0) + 80002828: 00f40523 sb a5,10(s0) + 8000282c: 000700e7 jalr a4 + 80002830: 00445503 lhu a0,4(s0) + 80002834: 01042483 lw s1,16(s0) + 80002838: 00ac8463 beq s9,a0,80002840 <_Z14X6502_RunDebugi+0x19e0> + 8000283c: 831fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002840: 8b9fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80002844: 00351793 slli a5,a0,0x3 + 80002848: 00f907b3 add a5,s2,a5 + 8000284c: 0007b783 ld a5,0(a5) + 80002850: 000780e7 jalr a5 + 80002854: 0015079b addiw a5,a0,1 + 80002858: 001c6717 auipc a4,0x1c6 + 8000285c: 4d070713 addi a4,a4,1232 # 801c8d28 + 80002860: 0ff7f793 andi a5,a5,255 + 80002864: 02051513 slli a0,a0,0x20 + 80002868: 00f707b3 add a5,a4,a5 + 8000286c: 02055513 srli a0,a0,0x20 + 80002870: 0007c603 lbu a2,0(a5) + 80002874: 00a70533 add a0,a4,a0 + 80002878: 00054583 lbu a1,0(a0) + 8000287c: 00844703 lbu a4,8(s0) + 80002880: 00445683 lhu a3,4(s0) + 80002884: 0086179b slliw a5,a2,0x8 + 80002888: 00b7e7b3 or a5,a5,a1 + 8000288c: 00f7073b addw a4,a4,a5 + 80002890: 0016869b addiw a3,a3,1 + 80002894: 00e7c7b3 xor a5,a5,a4 + 80002898: 00d41223 sh a3,4(s0) + 8000289c: 00c40c23 sb a2,24(s0) + 800028a0: 1007f793 andi a5,a5,256 + 800028a4: 0007049b sext.w s1,a4 + 800028a8: 06078463 beqz a5,80002910 <_Z14X6502_RunDebugi+0x1ab0> + 800028ac: 03071493 slli s1,a4,0x30 + 800028b0: 0304d493 srli s1,s1,0x30 + 800028b4: 1004c793 xori a5,s1,256 + 800028b8: 00379793 slli a5,a5,0x3 + 800028bc: 00f907b3 add a5,s2,a5 + 800028c0: 0007b783 ld a5,0(a5) + 800028c4: 1004c513 xori a0,s1,256 + 800028c8: 000780e7 jalr a5 + 800028cc: 00042683 lw a3,0(s0) + 800028d0: 01042703 lw a4,16(s0) + 800028d4: 0009a783 lw a5,0(s3) + 800028d8: 000a4603 lbu a2,0(s4) + 800028dc: 0016869b addiw a3,a3,1 + 800028e0: fd07071b addiw a4,a4,-48 + 800028e4: 0017879b addiw a5,a5,1 + 800028e8: 00a40c23 sb a0,24(s0) + 800028ec: 00d42023 sw a3,0(s0) + 800028f0: 00e42823 sw a4,16(s0) + 800028f4: 00f9a023 sw a5,0(s3) + 800028f8: 00061c63 bnez a2,80002910 <_Z14X6502_RunDebugi+0x1ab0> + 800028fc: 001c9717 auipc a4,0x1c9 + 80002900: 24c70713 addi a4,a4,588 # 801cbb48 + 80002904: 00072783 lw a5,0(a4) + 80002908: 0017879b addiw a5,a5,1 + 8000290c: 00f72023 sw a5,0(a4) + 80002910: 00349793 slli a5,s1,0x3 + 80002914: 00f90933 add s2,s2,a5 + 80002918: 00093783 ld a5,0(s2) + 8000291c: 00048513 mv a0,s1 + 80002920: 000780e7 jalr a5 + 80002924: 00644703 lbu a4,6(s0) + 80002928: 00055617 auipc a2,0x55 + 8000292c: f4860613 addi a2,a2,-184 # 80057870 <_ZL7ZNTable> + 80002930: 00a44783 lbu a5,10(s0) + 80002934: 00e56733 or a4,a0,a4 + 80002938: 00e60633 add a2,a2,a4 + 8000293c: 00064603 lbu a2,0(a2) + 80002940: 00050693 mv a3,a0 + 80002944: 07d7f793 andi a5,a5,125 + 80002948: 00445503 lhu a0,4(s0) + 8000294c: 00c7e7b3 or a5,a5,a2 + 80002950: 00d40c23 sb a3,24(s0) + 80002954: 00e40323 sb a4,6(s0) + 80002958: 00f40523 sb a5,10(s0) + 8000295c: 01042483 lw s1,16(s0) + 80002960: 00ac8463 beq s9,a0,80002968 <_Z14X6502_RunDebugi+0x1b08> + 80002964: f08fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002968: f90fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000296c: 00a40783 lb a5,10(s0) + 80002970: 0007d463 bgez a5,80002978 <_Z14X6502_RunDebugi+0x1b18> + 80002974: 2d90806f j 8000b44c <_Z14X6502_RunDebugi+0xa5ec> + 80002978: 00351793 slli a5,a0,0x3 + 8000297c: 00f90933 add s2,s2,a5 + 80002980: 00093783 ld a5,0(s2) + 80002984: 000780e7 jalr a5 + 80002988: 00445783 lhu a5,4(s0) + 8000298c: 00050713 mv a4,a0 + 80002990: 0185151b slliw a0,a0,0x18 + 80002994: 0017879b addiw a5,a5,1 + 80002998: 03079793 slli a5,a5,0x30 + 8000299c: 00042583 lw a1,0(s0) + 800029a0: 01042683 lw a3,16(s0) + 800029a4: 0009a603 lw a2,0(s3) + 800029a8: 0307d793 srli a5,a5,0x30 + 800029ac: 4185551b sraiw a0,a0,0x18 + 800029b0: 00f5053b addw a0,a0,a5 + 800029b4: 03051513 slli a0,a0,0x30 + 800029b8: 000a4803 lbu a6,0(s4) + 800029bc: fd06849b addiw s1,a3,-48 + 800029c0: 0015831b addiw t1,a1,1 + 800029c4: 0016089b addiw a7,a2,1 + 800029c8: 03055513 srli a0,a0,0x30 + 800029cc: 00a7c7b3 xor a5,a5,a0 + 800029d0: 00e40c23 sb a4,24(s0) + 800029d4: 00642023 sw t1,0(s0) + 800029d8: 00942823 sw s1,16(s0) + 800029dc: 0119a023 sw a7,0(s3) + 800029e0: 1007f793 andi a5,a5,256 + 800029e4: 00080463 beqz a6,800029ec <_Z14X6502_RunDebugi+0x1b8c> + 800029e8: 3410806f j 8000b528 <_Z14X6502_RunDebugi+0xa6c8> + 800029ec: 001c9897 auipc a7,0x1c9 + 800029f0: 15c88893 addi a7,a7,348 # 801cbb48 + 800029f4: 0008a803 lw a6,0(a7) + 800029f8: 00a41223 sh a0,4(s0) + 800029fc: 0018071b addiw a4,a6,1 + 80002a00: 00e8a023 sw a4,0(a7) + 80002a04: 00079463 bnez a5,80002a0c <_Z14X6502_RunDebugi+0x1bac> + 80002a08: e60fe06f j 80001068 <_Z14X6502_RunDebugi+0x208> + 80002a0c: fa06849b addiw s1,a3,-96 + 80002a10: 0025871b addiw a4,a1,2 + 80002a14: 0026079b addiw a5,a2,2 + 80002a18: 0028081b addiw a6,a6,2 + 80002a1c: 00e42023 sw a4,0(s0) + 80002a20: 00942823 sw s1,16(s0) + 80002a24: 00f9a023 sw a5,0(s3) + 80002a28: 0108a023 sw a6,0(a7) + 80002a2c: 00ac8463 beq s9,a0,80002a34 <_Z14X6502_RunDebugi+0x1bd4> + 80002a30: e3cfe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002a34: ec4fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80002a38: 00351793 slli a5,a0,0x3 + 80002a3c: 00f907b3 add a5,s2,a5 + 80002a40: 0007b783 ld a5,0(a5) + 80002a44: 000780e7 jalr a5 + 80002a48: 00445783 lhu a5,4(s0) + 80002a4c: 00050493 mv s1,a0 + 80002a50: 00a40c23 sb a0,24(s0) + 80002a54: 0017879b addiw a5,a5,1 + 80002a58: 03079513 slli a0,a5,0x30 + 80002a5c: 03055513 srli a0,a0,0x30 + 80002a60: 00351793 slli a5,a0,0x3 + 80002a64: 00f907b3 add a5,s2,a5 + 80002a68: 0007b783 ld a5,0(a5) + 80002a6c: 00a41223 sh a0,4(s0) + 80002a70: 0004849b sext.w s1,s1 + 80002a74: 000780e7 jalr a5 + 80002a78: 00851713 slli a4,a0,0x8 + 80002a7c: 00976d33 or s10,a4,s1 + 80002a80: 00445783 lhu a5,4(s0) + 80002a84: 003d1d13 slli s10,s10,0x3 + 80002a88: 01a90933 add s2,s2,s10 + 80002a8c: 00093683 ld a3,0(s2) + 80002a90: 0017879b addiw a5,a5,1 + 80002a94: 00976933 or s2,a4,s1 + 80002a98: 00a40c23 sb a0,24(s0) + 80002a9c: 00f41223 sh a5,4(s0) + 80002aa0: 00090513 mv a0,s2 + 80002aa4: 000680e7 jalr a3 + 80002aa8: 00146797 auipc a5,0x146 + 80002aac: 23878793 addi a5,a5,568 # 80148ce0 + 80002ab0: 01a78d33 add s10,a5,s10 + 80002ab4: 000d3783 ld a5,0(s10) + 80002ab8: 00050493 mv s1,a0 + 80002abc: 00050593 mv a1,a0 + 80002ac0: 00940c23 sb s1,24(s0) + 80002ac4: 00090513 mv a0,s2 + 80002ac8: 000780e7 jalr a5 + 80002acc: 00644683 lbu a3,6(s0) + 80002ad0: 0014959b slliw a1,s1,0x1 + 80002ad4: 00a44703 lbu a4,10(s0) + 80002ad8: 00055617 auipc a2,0x55 + 80002adc: d9860613 addi a2,a2,-616 # 80057870 <_ZL7ZNTable> + 80002ae0: 0fe5f793 andi a5,a1,254 + 80002ae4: 00f607b3 add a5,a2,a5 + 80002ae8: 0ff5f593 andi a1,a1,255 + 80002aec: 00d5e6b3 or a3,a1,a3 + 80002af0: 0007c783 lbu a5,0(a5) + 80002af4: ffe77713 andi a4,a4,-2 + 80002af8: 00d60633 add a2,a2,a3 + 80002afc: 4074d49b sraiw s1,s1,0x7 + 80002b00: 009764b3 or s1,a4,s1 + 80002b04: 00064603 lbu a2,0(a2) + 80002b08: 0097e7b3 or a5,a5,s1 + 80002b0c: 000d3703 ld a4,0(s10) + 80002b10: 07d7f793 andi a5,a5,125 + 80002b14: 00c7e7b3 or a5,a5,a2 + 80002b18: 00090513 mv a0,s2 + 80002b1c: 00d40323 sb a3,6(s0) + 80002b20: 00f40523 sb a5,10(s0) + 80002b24: 000700e7 jalr a4 + 80002b28: 00445503 lhu a0,4(s0) + 80002b2c: 01042483 lw s1,16(s0) + 80002b30: 00ac8463 beq s9,a0,80002b38 <_Z14X6502_RunDebugi+0x1cd8> + 80002b34: d38fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002b38: dc0fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80002b3c: 00351793 slli a5,a0,0x3 + 80002b40: 00f907b3 add a5,s2,a5 + 80002b44: 0007b783 ld a5,0(a5) + 80002b48: 000780e7 jalr a5 + 80002b4c: 00445783 lhu a5,4(s0) + 80002b50: 00050493 mv s1,a0 + 80002b54: 00a40c23 sb a0,24(s0) + 80002b58: 0017879b addiw a5,a5,1 + 80002b5c: 03079513 slli a0,a5,0x30 + 80002b60: 03055513 srli a0,a0,0x30 + 80002b64: 00351793 slli a5,a0,0x3 + 80002b68: 00f907b3 add a5,s2,a5 + 80002b6c: 0007b783 ld a5,0(a5) + 80002b70: 00a41223 sh a0,4(s0) + 80002b74: 0004849b sext.w s1,s1 + 80002b78: 000780e7 jalr a5 + 80002b7c: 00851d93 slli s11,a0,0x8 + 80002b80: 009ded33 or s10,s11,s1 + 80002b84: 00445783 lhu a5,4(s0) + 80002b88: 003d1d13 slli s10,s10,0x3 + 80002b8c: 01a90933 add s2,s2,s10 + 80002b90: 00093703 ld a4,0(s2) + 80002b94: 009dedb3 or s11,s11,s1 + 80002b98: 0017879b addiw a5,a5,1 + 80002b9c: 00a40c23 sb a0,24(s0) + 80002ba0: 00f41223 sh a5,4(s0) + 80002ba4: 000d8513 mv a0,s11 + 80002ba8: 00146917 auipc s2,0x146 + 80002bac: 13890913 addi s2,s2,312 # 80148ce0 + 80002bb0: 000700e7 jalr a4 + 80002bb4: 01a90933 add s2,s2,s10 + 80002bb8: 00093783 ld a5,0(s2) + 80002bbc: 00050493 mv s1,a0 + 80002bc0: 00050593 mv a1,a0 + 80002bc4: 00940c23 sb s1,24(s0) + 80002bc8: 000d8513 mv a0,s11 + 80002bcc: 000780e7 jalr a5 + 80002bd0: 00a44783 lbu a5,10(s0) + 80002bd4: 0014959b slliw a1,s1,0x1 + 80002bd8: 0fe5f693 andi a3,a1,254 + 80002bdc: 00055717 auipc a4,0x55 + 80002be0: c9470713 addi a4,a4,-876 # 80057870 <_ZL7ZNTable> + 80002be4: 00d70733 add a4,a4,a3 + 80002be8: 00074683 lbu a3,0(a4) + 80002bec: 4074d49b sraiw s1,s1,0x7 + 80002bf0: ffe7f793 andi a5,a5,-2 + 80002bf4: 0097e7b3 or a5,a5,s1 + 80002bf8: 00093703 ld a4,0(s2) + 80002bfc: 07d7f793 andi a5,a5,125 + 80002c00: 00d7e7b3 or a5,a5,a3 + 80002c04: 000d8513 mv a0,s11 + 80002c08: 00f40523 sb a5,10(s0) + 80002c0c: 0fe5f593 andi a1,a1,254 + 80002c10: 000700e7 jalr a4 + 80002c14: 00445503 lhu a0,4(s0) + 80002c18: 01042483 lw s1,16(s0) + 80002c1c: 00ac8463 beq s9,a0,80002c24 <_Z14X6502_RunDebugi+0x1dc4> + 80002c20: c4cfe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002c24: cd4fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80002c28: 00351793 slli a5,a0,0x3 + 80002c2c: 00f907b3 add a5,s2,a5 + 80002c30: 0007b783 ld a5,0(a5) + 80002c34: 000780e7 jalr a5 + 80002c38: 00445783 lhu a5,4(s0) + 80002c3c: 00050493 mv s1,a0 + 80002c40: 00a40c23 sb a0,24(s0) + 80002c44: 0017879b addiw a5,a5,1 + 80002c48: 03079513 slli a0,a5,0x30 + 80002c4c: 03055513 srli a0,a0,0x30 + 80002c50: 00351793 slli a5,a0,0x3 + 80002c54: 00f907b3 add a5,s2,a5 + 80002c58: 0007b783 ld a5,0(a5) + 80002c5c: 00a41223 sh a0,4(s0) + 80002c60: 0004849b sext.w s1,s1 + 80002c64: 000780e7 jalr a5 + 80002c68: 00851693 slli a3,a0,0x8 + 80002c6c: 0096e7b3 or a5,a3,s1 + 80002c70: 00445703 lhu a4,4(s0) + 80002c74: 00379793 slli a5,a5,0x3 + 80002c78: 00f90933 add s2,s2,a5 + 80002c7c: 00093603 ld a2,0(s2) + 80002c80: 0017079b addiw a5,a4,1 + 80002c84: 00a40c23 sb a0,24(s0) + 80002c88: 00f41223 sh a5,4(s0) + 80002c8c: 0096e533 or a0,a3,s1 + 80002c90: 000600e7 jalr a2 + 80002c94: 00644703 lbu a4,6(s0) + 80002c98: 00055617 auipc a2,0x55 + 80002c9c: bd860613 addi a2,a2,-1064 # 80057870 <_ZL7ZNTable> + 80002ca0: 00a44783 lbu a5,10(s0) + 80002ca4: 00e56733 or a4,a0,a4 + 80002ca8: 00e60633 add a2,a2,a4 + 80002cac: 00064603 lbu a2,0(a2) + 80002cb0: 00050693 mv a3,a0 + 80002cb4: 07d7f793 andi a5,a5,125 + 80002cb8: 00445503 lhu a0,4(s0) + 80002cbc: 00c7e7b3 or a5,a5,a2 + 80002cc0: 00d40c23 sb a3,24(s0) + 80002cc4: 00e40323 sb a4,6(s0) + 80002cc8: 00f40523 sb a5,10(s0) + 80002ccc: 01042483 lw s1,16(s0) + 80002cd0: 00ac8463 beq s9,a0,80002cd8 <_Z14X6502_RunDebugi+0x1e78> + 80002cd4: b98fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002cd8: c20fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80002cdc: 00351793 slli a5,a0,0x3 + 80002ce0: 00f907b3 add a5,s2,a5 + 80002ce4: 0007b783 ld a5,0(a5) + 80002ce8: 000780e7 jalr a5 + 80002cec: 00445783 lhu a5,4(s0) + 80002cf0: 00050493 mv s1,a0 + 80002cf4: 00a40c23 sb a0,24(s0) + 80002cf8: 0017879b addiw a5,a5,1 + 80002cfc: 03079513 slli a0,a5,0x30 + 80002d00: 03055513 srli a0,a0,0x30 + 80002d04: 00351793 slli a5,a0,0x3 + 80002d08: 00f907b3 add a5,s2,a5 + 80002d0c: 0007b783 ld a5,0(a5) + 80002d10: 00a41223 sh a0,4(s0) + 80002d14: 0004849b sext.w s1,s1 + 80002d18: 000780e7 jalr a5 + 80002d1c: 00851693 slli a3,a0,0x8 + 80002d20: 0096e7b3 or a5,a3,s1 + 80002d24: 00445703 lhu a4,4(s0) + 80002d28: 00379793 slli a5,a5,0x3 + 80002d2c: 00f90933 add s2,s2,a5 + 80002d30: 00093603 ld a2,0(s2) + 80002d34: 0017079b addiw a5,a4,1 + 80002d38: 00a40c23 sb a0,24(s0) + 80002d3c: 00f41223 sh a5,4(s0) + 80002d40: 0096e533 or a0,a3,s1 + 80002d44: 000600e7 jalr a2 + 80002d48: 00050793 mv a5,a0 + 80002d4c: 00445503 lhu a0,4(s0) + 80002d50: 00f40c23 sb a5,24(s0) + 80002d54: 01042483 lw s1,16(s0) + 80002d58: 00ac8463 beq s9,a0,80002d60 <_Z14X6502_RunDebugi+0x1f00> + 80002d5c: b10fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002d60: b98fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80002d64: 00351793 slli a5,a0,0x3 + 80002d68: 00f907b3 add a5,s2,a5 + 80002d6c: 0007b783 ld a5,0(a5) + 80002d70: 000780e7 jalr a5 + 80002d74: 00445783 lhu a5,4(s0) + 80002d78: 00050713 mv a4,a0 + 80002d7c: 00a40c23 sb a0,24(s0) + 80002d80: 0017879b addiw a5,a5,1 + 80002d84: 03079513 slli a0,a5,0x30 + 80002d88: 03055513 srli a0,a0,0x30 + 80002d8c: 00351793 slli a5,a0,0x3 + 80002d90: 00f907b3 add a5,s2,a5 + 80002d94: 0007b783 ld a5,0(a5) + 80002d98: 00a41223 sh a0,4(s0) + 80002d9c: 0007049b sext.w s1,a4 + 80002da0: 000780e7 jalr a5 + 80002da4: 00744683 lbu a3,7(s0) + 80002da8: 00851793 slli a5,a0,0x8 + 80002dac: 0097e7b3 or a5,a5,s1 + 80002db0: 00f686bb addw a3,a3,a5 + 80002db4: 0ff6f593 andi a1,a3,255 + 80002db8: 0187f7b3 and a5,a5,s8 + 80002dbc: 00f5e733 or a4,a1,a5 + 80002dc0: 00445603 lhu a2,4(s0) + 80002dc4: 00371713 slli a4,a4,0x3 + 80002dc8: 00e90733 add a4,s2,a4 + 80002dcc: 00073803 ld a6,0(a4) + 80002dd0: 03069d13 slli s10,a3,0x30 + 80002dd4: 0016071b addiw a4,a2,1 + 80002dd8: 030d5d13 srli s10,s10,0x30 + 80002ddc: 00e41223 sh a4,4(s0) + 80002de0: 003d1493 slli s1,s10,0x3 + 80002de4: 00a40c23 sb a0,24(s0) + 80002de8: 00f5e533 or a0,a1,a5 + 80002dec: 000800e7 jalr a6 + 80002df0: 00990933 add s2,s2,s1 + 80002df4: 00093783 ld a5,0(s2) + 80002df8: 00a40c23 sb a0,24(s0) + 80002dfc: 00146917 auipc s2,0x146 + 80002e00: ee490913 addi s2,s2,-284 # 80148ce0 + 80002e04: 000d0513 mv a0,s10 + 80002e08: 000780e7 jalr a5 + 80002e0c: 00990933 add s2,s2,s1 + 80002e10: 00093783 ld a5,0(s2) + 80002e14: 00050493 mv s1,a0 + 80002e18: 00050593 mv a1,a0 + 80002e1c: 00940c23 sb s1,24(s0) + 80002e20: 000d0513 mv a0,s10 + 80002e24: 000780e7 jalr a5 + 80002e28: 0014859b addiw a1,s1,1 + 80002e2c: 0ff5f693 andi a3,a1,255 + 80002e30: 00055717 auipc a4,0x55 + 80002e34: a4070713 addi a4,a4,-1472 # 80057870 <_ZL7ZNTable> + 80002e38: 00a44783 lbu a5,10(s0) + 80002e3c: 00d70733 add a4,a4,a3 + 80002e40: 00074683 lbu a3,0(a4) + 80002e44: 07d7f793 andi a5,a5,125 + 80002e48: 00093703 ld a4,0(s2) + 80002e4c: 00d7e7b3 or a5,a5,a3 + 80002e50: 000d0513 mv a0,s10 + 80002e54: 00f40523 sb a5,10(s0) + 80002e58: 0ff5f593 andi a1,a1,255 + 80002e5c: 000700e7 jalr a4 + 80002e60: 00445503 lhu a0,4(s0) + 80002e64: 01042483 lw s1,16(s0) + 80002e68: 00ac8463 beq s9,a0,80002e70 <_Z14X6502_RunDebugi+0x2010> + 80002e6c: a00fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002e70: a88fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80002e74: 00351793 slli a5,a0,0x3 + 80002e78: 00f907b3 add a5,s2,a5 + 80002e7c: 0007b783 ld a5,0(a5) + 80002e80: 000780e7 jalr a5 + 80002e84: 00445783 lhu a5,4(s0) + 80002e88: 00050713 mv a4,a0 + 80002e8c: 00a40c23 sb a0,24(s0) + 80002e90: 0017879b addiw a5,a5,1 + 80002e94: 03079513 slli a0,a5,0x30 + 80002e98: 03055513 srli a0,a0,0x30 + 80002e9c: 00351793 slli a5,a0,0x3 + 80002ea0: 00f907b3 add a5,s2,a5 + 80002ea4: 0007b783 ld a5,0(a5) + 80002ea8: 00a41223 sh a0,4(s0) + 80002eac: 0007049b sext.w s1,a4 + 80002eb0: 000780e7 jalr a5 + 80002eb4: 00744703 lbu a4,7(s0) + 80002eb8: 00445683 lhu a3,4(s0) + 80002ebc: 00851793 slli a5,a0,0x8 + 80002ec0: 0097e7b3 or a5,a5,s1 + 80002ec4: 00f7073b addw a4,a4,a5 + 80002ec8: 0016869b addiw a3,a3,1 + 80002ecc: 00e7c7b3 xor a5,a5,a4 + 80002ed0: 00a40c23 sb a0,24(s0) + 80002ed4: 00d41223 sh a3,4(s0) + 80002ed8: 1007f793 andi a5,a5,256 + 80002edc: 0007049b sext.w s1,a4 + 80002ee0: 06078463 beqz a5,80002f48 <_Z14X6502_RunDebugi+0x20e8> + 80002ee4: 03071493 slli s1,a4,0x30 + 80002ee8: 0304d493 srli s1,s1,0x30 + 80002eec: 1004c793 xori a5,s1,256 + 80002ef0: 00379793 slli a5,a5,0x3 + 80002ef4: 00f907b3 add a5,s2,a5 + 80002ef8: 0007b783 ld a5,0(a5) + 80002efc: 1004c513 xori a0,s1,256 + 80002f00: 000780e7 jalr a5 + 80002f04: 00042683 lw a3,0(s0) + 80002f08: 01042703 lw a4,16(s0) + 80002f0c: 0009a783 lw a5,0(s3) + 80002f10: 000a4603 lbu a2,0(s4) + 80002f14: 0016869b addiw a3,a3,1 + 80002f18: fd07071b addiw a4,a4,-48 + 80002f1c: 0017879b addiw a5,a5,1 + 80002f20: 00a40c23 sb a0,24(s0) + 80002f24: 00d42023 sw a3,0(s0) + 80002f28: 00e42823 sw a4,16(s0) + 80002f2c: 00f9a023 sw a5,0(s3) + 80002f30: 00061c63 bnez a2,80002f48 <_Z14X6502_RunDebugi+0x20e8> + 80002f34: 001c9717 auipc a4,0x1c9 + 80002f38: c1470713 addi a4,a4,-1004 # 801cbb48 + 80002f3c: 00072783 lw a5,0(a4) + 80002f40: 0017879b addiw a5,a5,1 + 80002f44: 00f72023 sw a5,0(a4) + 80002f48: 02049793 slli a5,s1,0x20 + 80002f4c: 01d7d793 srli a5,a5,0x1d + 80002f50: 00f90933 add s2,s2,a5 + 80002f54: 00093783 ld a5,0(s2) + 80002f58: 00048513 mv a0,s1 + 80002f5c: 000780e7 jalr a5 + 80002f60: 00a44703 lbu a4,10(s0) + 80002f64: 00644603 lbu a2,6(s0) + 80002f68: 00050593 mv a1,a0 + 80002f6c: fff74693 not a3,a4 + 80002f70: 40a607bb subw a5,a2,a0 + 80002f74: 0016f693 andi a3,a3,1 + 80002f78: 40d787bb subw a5,a5,a3 + 80002f7c: 0007881b sext.w a6,a5 + 80002f80: 0ff87513 andi a0,a6,255 + 80002f84: 00055697 auipc a3,0x55 + 80002f88: 8ec68693 addi a3,a3,-1812 # 80057870 <_ZL7ZNTable> + 80002f8c: 00a686b3 add a3,a3,a0 + 80002f90: 0006c503 lbu a0,0(a3) + 80002f94: 4087d69b sraiw a3,a5,0x8 + 80002f98: 00f647b3 xor a5,a2,a5 + 80002f9c: 00b64633 xor a2,a2,a1 + 80002fa0: 03c77713 andi a4,a4,60 + 80002fa4: 0016c693 xori a3,a3,1 + 80002fa8: 00c7f7b3 and a5,a5,a2 + 80002fac: 00a76733 or a4,a4,a0 + 80002fb0: 0016f693 andi a3,a3,1 + 80002fb4: 0017d79b srliw a5,a5,0x1 + 80002fb8: 00d76733 or a4,a4,a3 + 80002fbc: 0407f793 andi a5,a5,64 + 80002fc0: 00445503 lhu a0,4(s0) + 80002fc4: 00f767b3 or a5,a4,a5 + 80002fc8: 00b40c23 sb a1,24(s0) + 80002fcc: 01040323 sb a6,6(s0) + 80002fd0: 00f40523 sb a5,10(s0) + 80002fd4: 01042483 lw s1,16(s0) + 80002fd8: 00ac8463 beq s9,a0,80002fe0 <_Z14X6502_RunDebugi+0x2180> + 80002fdc: 890fe06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80002fe0: 918fe06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80002fe4: 00351793 slli a5,a0,0x3 + 80002fe8: 00f907b3 add a5,s2,a5 + 80002fec: 0007b783 ld a5,0(a5) + 80002ff0: 000780e7 jalr a5 + 80002ff4: 00445783 lhu a5,4(s0) + 80002ff8: 00050713 mv a4,a0 + 80002ffc: 00a40c23 sb a0,24(s0) + 80003000: 0017879b addiw a5,a5,1 + 80003004: 03079513 slli a0,a5,0x30 + 80003008: 03055513 srli a0,a0,0x30 + 8000300c: 00351793 slli a5,a0,0x3 + 80003010: 00f907b3 add a5,s2,a5 + 80003014: 0007b783 ld a5,0(a5) + 80003018: 00a41223 sh a0,4(s0) + 8000301c: 0007049b sext.w s1,a4 + 80003020: 000780e7 jalr a5 + 80003024: 00744d03 lbu s10,7(s0) + 80003028: 00851793 slli a5,a0,0x8 + 8000302c: 0097e7b3 or a5,a5,s1 + 80003030: 00fd0d3b addw s10,s10,a5 + 80003034: 0ffd7613 andi a2,s10,255 + 80003038: 0187f7b3 and a5,a5,s8 + 8000303c: 00f66733 or a4,a2,a5 + 80003040: 00445683 lhu a3,4(s0) + 80003044: 00371713 slli a4,a4,0x3 + 80003048: 00e90733 add a4,s2,a4 + 8000304c: 00073583 ld a1,0(a4) + 80003050: 030d1d13 slli s10,s10,0x30 + 80003054: 0016871b addiw a4,a3,1 + 80003058: 030d5d13 srli s10,s10,0x30 + 8000305c: 00e41223 sh a4,4(s0) + 80003060: 003d1493 slli s1,s10,0x3 + 80003064: 00a40c23 sb a0,24(s0) + 80003068: 00f66533 or a0,a2,a5 + 8000306c: 000580e7 jalr a1 + 80003070: 00990933 add s2,s2,s1 + 80003074: 00093783 ld a5,0(s2) + 80003078: 00a40c23 sb a0,24(s0) + 8000307c: 00146917 auipc s2,0x146 + 80003080: c6490913 addi s2,s2,-924 # 80148ce0 + 80003084: 000d0513 mv a0,s10 + 80003088: 000780e7 jalr a5 + 8000308c: 00990933 add s2,s2,s1 + 80003090: 00093783 ld a5,0(s2) + 80003094: 00050493 mv s1,a0 + 80003098: 00050593 mv a1,a0 + 8000309c: 00940c23 sb s1,24(s0) + 800030a0: 000d0513 mv a0,s10 + 800030a4: 000780e7 jalr a5 + 800030a8: 0014849b addiw s1,s1,1 + 800030ac: 0ff4f793 andi a5,s1,255 + 800030b0: 00054697 auipc a3,0x54 + 800030b4: 7c068693 addi a3,a3,1984 # 80057870 <_ZL7ZNTable> + 800030b8: 00f68633 add a2,a3,a5 + 800030bc: 00a44703 lbu a4,10(s0) + 800030c0: 00064583 lbu a1,0(a2) + 800030c4: 00644603 lbu a2,6(s0) + 800030c8: 07d77713 andi a4,a4,125 + 800030cc: 00b76733 or a4,a4,a1 + 800030d0: fff74593 not a1,a4 + 800030d4: 40f607bb subw a5,a2,a5 + 800030d8: 0015f593 andi a1,a1,1 + 800030dc: 40b787bb subw a5,a5,a1 + 800030e0: 0007851b sext.w a0,a5 + 800030e4: 0ff57593 andi a1,a0,255 + 800030e8: 00b686b3 add a3,a3,a1 + 800030ec: 0006c803 lbu a6,0(a3) + 800030f0: 0ff4f593 andi a1,s1,255 + 800030f4: 4087d69b sraiw a3,a5,0x8 + 800030f8: 00f647b3 xor a5,a2,a5 + 800030fc: 00b64633 xor a2,a2,a1 + 80003100: 00c7f7b3 and a5,a5,a2 + 80003104: 03c77713 andi a4,a4,60 + 80003108: 0016c693 xori a3,a3,1 + 8000310c: 01076733 or a4,a4,a6 + 80003110: 0016f693 andi a3,a3,1 + 80003114: 0017d79b srliw a5,a5,0x1 + 80003118: 00d76733 or a4,a4,a3 + 8000311c: 0407f793 andi a5,a5,64 + 80003120: 00093683 ld a3,0(s2) + 80003124: 00f767b3 or a5,a4,a5 + 80003128: 00a40323 sb a0,6(s0) + 8000312c: 00f40523 sb a5,10(s0) + 80003130: 000d0513 mv a0,s10 + 80003134: 000680e7 jalr a3 + 80003138: 00445503 lhu a0,4(s0) + 8000313c: 01042483 lw s1,16(s0) + 80003140: 00ac8463 beq s9,a0,80003148 <_Z14X6502_RunDebugi+0x22e8> + 80003144: f29fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003148: fb1fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000314c: 00351793 slli a5,a0,0x3 + 80003150: 00f907b3 add a5,s2,a5 + 80003154: 0007b783 ld a5,0(a5) + 80003158: 000780e7 jalr a5 + 8000315c: 00445783 lhu a5,4(s0) + 80003160: 00050713 mv a4,a0 + 80003164: 00a40c23 sb a0,24(s0) + 80003168: 0017879b addiw a5,a5,1 + 8000316c: 03079513 slli a0,a5,0x30 + 80003170: 03055513 srli a0,a0,0x30 + 80003174: 00351793 slli a5,a0,0x3 + 80003178: 00f907b3 add a5,s2,a5 + 8000317c: 0007b783 ld a5,0(a5) + 80003180: 00a41223 sh a0,4(s0) + 80003184: 0007049b sext.w s1,a4 + 80003188: 000780e7 jalr a5 + 8000318c: 00844d03 lbu s10,8(s0) + 80003190: 00851793 slli a5,a0,0x8 + 80003194: 0097e7b3 or a5,a5,s1 + 80003198: 00fd0d3b addw s10,s10,a5 + 8000319c: 0ffd7613 andi a2,s10,255 + 800031a0: 0187f7b3 and a5,a5,s8 + 800031a4: 00f66733 or a4,a2,a5 + 800031a8: 00445683 lhu a3,4(s0) + 800031ac: 00371713 slli a4,a4,0x3 + 800031b0: 00e90733 add a4,s2,a4 + 800031b4: 00073583 ld a1,0(a4) + 800031b8: 030d1d13 slli s10,s10,0x30 + 800031bc: 0016871b addiw a4,a3,1 + 800031c0: 030d5d13 srli s10,s10,0x30 + 800031c4: 00e41223 sh a4,4(s0) + 800031c8: 003d1493 slli s1,s10,0x3 + 800031cc: 00a40c23 sb a0,24(s0) + 800031d0: 00f66533 or a0,a2,a5 + 800031d4: 000580e7 jalr a1 + 800031d8: 00990933 add s2,s2,s1 + 800031dc: 00093783 ld a5,0(s2) + 800031e0: 00a40c23 sb a0,24(s0) + 800031e4: 00146917 auipc s2,0x146 + 800031e8: afc90913 addi s2,s2,-1284 # 80148ce0 + 800031ec: 000d0513 mv a0,s10 + 800031f0: 000780e7 jalr a5 + 800031f4: 00990933 add s2,s2,s1 + 800031f8: 00093783 ld a5,0(s2) + 800031fc: 00050493 mv s1,a0 + 80003200: 00050593 mv a1,a0 + 80003204: 00940c23 sb s1,24(s0) + 80003208: 000d0513 mv a0,s10 + 8000320c: 000780e7 jalr a5 + 80003210: 00644683 lbu a3,6(s0) + 80003214: 0014959b slliw a1,s1,0x1 + 80003218: 00a44703 lbu a4,10(s0) + 8000321c: 00054617 auipc a2,0x54 + 80003220: 65460613 addi a2,a2,1620 # 80057870 <_ZL7ZNTable> + 80003224: 0fe5f793 andi a5,a1,254 + 80003228: 00f607b3 add a5,a2,a5 + 8000322c: 0ff5f593 andi a1,a1,255 + 80003230: 00d5e6b3 or a3,a1,a3 + 80003234: 0007c783 lbu a5,0(a5) + 80003238: ffe77713 andi a4,a4,-2 + 8000323c: 00d60633 add a2,a2,a3 + 80003240: 4074d49b sraiw s1,s1,0x7 + 80003244: 009764b3 or s1,a4,s1 + 80003248: 00064603 lbu a2,0(a2) + 8000324c: 0097e7b3 or a5,a5,s1 + 80003250: 00093703 ld a4,0(s2) + 80003254: 07d7f793 andi a5,a5,125 + 80003258: 00c7e7b3 or a5,a5,a2 + 8000325c: 000d0513 mv a0,s10 + 80003260: 00d40323 sb a3,6(s0) + 80003264: 00f40523 sb a5,10(s0) + 80003268: 000700e7 jalr a4 + 8000326c: 00445503 lhu a0,4(s0) + 80003270: 01042483 lw s1,16(s0) + 80003274: 00ac8463 beq s9,a0,8000327c <_Z14X6502_RunDebugi+0x241c> + 80003278: df5fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000327c: e7dfd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003280: 00351793 slli a5,a0,0x3 + 80003284: 00f907b3 add a5,s2,a5 + 80003288: 0007b783 ld a5,0(a5) + 8000328c: 000780e7 jalr a5 + 80003290: 00445783 lhu a5,4(s0) + 80003294: 00050713 mv a4,a0 + 80003298: 00a40c23 sb a0,24(s0) + 8000329c: 0017879b addiw a5,a5,1 + 800032a0: 03079513 slli a0,a5,0x30 + 800032a4: 03055513 srli a0,a0,0x30 + 800032a8: 00351793 slli a5,a0,0x3 + 800032ac: 00f907b3 add a5,s2,a5 + 800032b0: 0007b783 ld a5,0(a5) + 800032b4: 00a41223 sh a0,4(s0) + 800032b8: 0007049b sext.w s1,a4 + 800032bc: 000780e7 jalr a5 + 800032c0: 00844703 lbu a4,8(s0) + 800032c4: 00445683 lhu a3,4(s0) + 800032c8: 00851793 slli a5,a0,0x8 + 800032cc: 0097e7b3 or a5,a5,s1 + 800032d0: 00f7073b addw a4,a4,a5 + 800032d4: 0016869b addiw a3,a3,1 + 800032d8: 00e7c7b3 xor a5,a5,a4 + 800032dc: 00a40c23 sb a0,24(s0) + 800032e0: 00d41223 sh a3,4(s0) + 800032e4: 1007f793 andi a5,a5,256 + 800032e8: 0007049b sext.w s1,a4 + 800032ec: 06078463 beqz a5,80003354 <_Z14X6502_RunDebugi+0x24f4> + 800032f0: 03071493 slli s1,a4,0x30 + 800032f4: 0304d493 srli s1,s1,0x30 + 800032f8: 1004c793 xori a5,s1,256 + 800032fc: 00379793 slli a5,a5,0x3 + 80003300: 00f907b3 add a5,s2,a5 + 80003304: 0007b783 ld a5,0(a5) + 80003308: 1004c513 xori a0,s1,256 + 8000330c: 000780e7 jalr a5 + 80003310: 00042683 lw a3,0(s0) + 80003314: 01042703 lw a4,16(s0) + 80003318: 0009a783 lw a5,0(s3) + 8000331c: 000a4603 lbu a2,0(s4) + 80003320: 0016869b addiw a3,a3,1 + 80003324: fd07071b addiw a4,a4,-48 + 80003328: 0017879b addiw a5,a5,1 + 8000332c: 00a40c23 sb a0,24(s0) + 80003330: 00d42023 sw a3,0(s0) + 80003334: 00e42823 sw a4,16(s0) + 80003338: 00f9a023 sw a5,0(s3) + 8000333c: 00061c63 bnez a2,80003354 <_Z14X6502_RunDebugi+0x24f4> + 80003340: 001c9717 auipc a4,0x1c9 + 80003344: 80870713 addi a4,a4,-2040 # 801cbb48 + 80003348: 00072783 lw a5,0(a4) + 8000334c: 0017879b addiw a5,a5,1 + 80003350: 00f72023 sw a5,0(a4) + 80003354: 02049793 slli a5,s1,0x20 + 80003358: 01d7d793 srli a5,a5,0x1d + 8000335c: 00f90933 add s2,s2,a5 + 80003360: 00093783 ld a5,0(s2) + 80003364: 00048513 mv a0,s1 + 80003368: 000780e7 jalr a5 + 8000336c: 00644703 lbu a4,6(s0) + 80003370: 00054617 auipc a2,0x54 + 80003374: 50060613 addi a2,a2,1280 # 80057870 <_ZL7ZNTable> + 80003378: 00a44783 lbu a5,10(s0) + 8000337c: 00e56733 or a4,a0,a4 + 80003380: 00e60633 add a2,a2,a4 + 80003384: 00064603 lbu a2,0(a2) + 80003388: 00050693 mv a3,a0 + 8000338c: 07d7f793 andi a5,a5,125 + 80003390: 00445503 lhu a0,4(s0) + 80003394: 00c7e7b3 or a5,a5,a2 + 80003398: 00d40c23 sb a3,24(s0) + 8000339c: 00e40323 sb a4,6(s0) + 800033a0: 00f40523 sb a5,10(s0) + 800033a4: 01042483 lw s1,16(s0) + 800033a8: 00ac8463 beq s9,a0,800033b0 <_Z14X6502_RunDebugi+0x2550> + 800033ac: cc1fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800033b0: d49fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800033b4: 00a44783 lbu a5,10(s0) + 800033b8: 01042483 lw s1,16(s0) + 800033bc: ffe7f793 andi a5,a5,-2 + 800033c0: 00f40523 sb a5,10(s0) + 800033c4: 00ac8463 beq s9,a0,800033cc <_Z14X6502_RunDebugi+0x256c> + 800033c8: ca5fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800033cc: d2dfd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800033d0: 00351793 slli a5,a0,0x3 + 800033d4: 00f90933 add s2,s2,a5 + 800033d8: 00093783 ld a5,0(s2) + 800033dc: 00744483 lbu s1,7(s0) + 800033e0: 000780e7 jalr a5 + 800033e4: 00a487bb addw a5,s1,a0 + 800033e8: 0ff7f793 andi a5,a5,255 + 800033ec: 001c6597 auipc a1,0x1c6 + 800033f0: 93c58593 addi a1,a1,-1732 # 801c8d28 + 800033f4: 00f585b3 add a1,a1,a5 + 800033f8: 0005c803 lbu a6,0(a1) + 800033fc: 00644883 lbu a7,6(s0) + 80003400: 00a44703 lbu a4,10(s0) + 80003404: 0018161b slliw a2,a6,0x1 + 80003408: 00054697 auipc a3,0x54 + 8000340c: 46868693 addi a3,a3,1128 # 80057870 <_ZL7ZNTable> + 80003410: 0fe67793 andi a5,a2,254 + 80003414: 00f687b3 add a5,a3,a5 + 80003418: 0ff67613 andi a2,a2,255 + 8000341c: 00445503 lhu a0,4(s0) + 80003420: 011668b3 or a7,a2,a7 + 80003424: 0007c783 lbu a5,0(a5) + 80003428: ffe77713 andi a4,a4,-2 + 8000342c: 4078531b sraiw t1,a6,0x7 + 80003430: 011686b3 add a3,a3,a7 + 80003434: 0006c683 lbu a3,0(a3) + 80003438: 00676733 or a4,a4,t1 + 8000343c: 00e7e7b3 or a5,a5,a4 + 80003440: 0015051b addiw a0,a0,1 + 80003444: 07d7f793 andi a5,a5,125 + 80003448: 03051513 slli a0,a0,0x30 + 8000344c: 03055513 srli a0,a0,0x30 + 80003450: 00d7e7b3 or a5,a5,a3 + 80003454: 00a41223 sh a0,4(s0) + 80003458: 01040c23 sb a6,24(s0) + 8000345c: 01140323 sb a7,6(s0) + 80003460: 00f40523 sb a5,10(s0) + 80003464: 00c58023 sb a2,0(a1) + 80003468: 01042483 lw s1,16(s0) + 8000346c: 00ac8463 beq s9,a0,80003474 <_Z14X6502_RunDebugi+0x2614> + 80003470: bfdfd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003474: c85fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003478: 00351793 slli a5,a0,0x3 + 8000347c: 00f90933 add s2,s2,a5 + 80003480: 00093783 ld a5,0(s2) + 80003484: 00744483 lbu s1,7(s0) + 80003488: 000780e7 jalr a5 + 8000348c: 00a487bb addw a5,s1,a0 + 80003490: 0ff7f793 andi a5,a5,255 + 80003494: 001c6717 auipc a4,0x1c6 + 80003498: 89470713 addi a4,a4,-1900 # 801c8d28 + 8000349c: 00f70733 add a4,a4,a5 + 800034a0: 00074683 lbu a3,0(a4) + 800034a4: 00a44783 lbu a5,10(s0) + 800034a8: 00445503 lhu a0,4(s0) + 800034ac: 0016959b slliw a1,a3,0x1 + 800034b0: 0fe5f813 andi a6,a1,254 + 800034b4: 00054617 auipc a2,0x54 + 800034b8: 3bc60613 addi a2,a2,956 # 80057870 <_ZL7ZNTable> + 800034bc: 01060633 add a2,a2,a6 + 800034c0: 00064603 lbu a2,0(a2) + 800034c4: ffe7f793 andi a5,a5,-2 + 800034c8: 4076d81b sraiw a6,a3,0x7 + 800034cc: 0107e7b3 or a5,a5,a6 + 800034d0: 0015051b addiw a0,a0,1 + 800034d4: 07d7f793 andi a5,a5,125 + 800034d8: 03051513 slli a0,a0,0x30 + 800034dc: 03055513 srli a0,a0,0x30 + 800034e0: 00c7e7b3 or a5,a5,a2 + 800034e4: 00a41223 sh a0,4(s0) + 800034e8: 00d40c23 sb a3,24(s0) + 800034ec: 00f40523 sb a5,10(s0) + 800034f0: 00b70023 sb a1,0(a4) + 800034f4: 01042483 lw s1,16(s0) + 800034f8: 00ac8463 beq s9,a0,80003500 <_Z14X6502_RunDebugi+0x26a0> + 800034fc: b71fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003500: bf9fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003504: 00351793 slli a5,a0,0x3 + 80003508: 00f90933 add s2,s2,a5 + 8000350c: 00093783 ld a5,0(s2) + 80003510: 000780e7 jalr a5 + 80003514: 02051793 slli a5,a0,0x20 + 80003518: 0207d793 srli a5,a5,0x20 + 8000351c: 001c6697 auipc a3,0x1c6 + 80003520: 80c68693 addi a3,a3,-2036 # 801c8d28 + 80003524: 00f686b3 add a3,a3,a5 + 80003528: 0006c603 lbu a2,0(a3) + 8000352c: 00a44783 lbu a5,10(s0) + 80003530: 00445503 lhu a0,4(s0) + 80003534: 0016171b slliw a4,a2,0x1 + 80003538: 0017f813 andi a6,a5,1 + 8000353c: 0ff77713 andi a4,a4,255 + 80003540: 010768b3 or a7,a4,a6 + 80003544: 00054597 auipc a1,0x54 + 80003548: 32c58593 addi a1,a1,812 # 80057870 <_ZL7ZNTable> + 8000354c: 011585b3 add a1,a1,a7 + 80003550: 0005c583 lbu a1,0(a1) + 80003554: 07c7f793 andi a5,a5,124 + 80003558: 4076589b sraiw a7,a2,0x7 + 8000355c: 0015051b addiw a0,a0,1 + 80003560: 0117e7b3 or a5,a5,a7 + 80003564: 03051513 slli a0,a0,0x30 + 80003568: 03055513 srli a0,a0,0x30 + 8000356c: 01076733 or a4,a4,a6 + 80003570: 00b7e7b3 or a5,a5,a1 + 80003574: 00a41223 sh a0,4(s0) + 80003578: 00c40c23 sb a2,24(s0) + 8000357c: 00f40523 sb a5,10(s0) + 80003580: 00e68023 sb a4,0(a3) + 80003584: 01042483 lw s1,16(s0) + 80003588: 00ac8463 beq s9,a0,80003590 <_Z14X6502_RunDebugi+0x2730> + 8000358c: ae1fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003590: b69fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003594: 00351793 slli a5,a0,0x3 + 80003598: 00f90933 add s2,s2,a5 + 8000359c: 00093783 ld a5,0(s2) + 800035a0: 000780e7 jalr a5 + 800035a4: 02051713 slli a4,a0,0x20 + 800035a8: 02075713 srli a4,a4,0x20 + 800035ac: 001c5797 auipc a5,0x1c5 + 800035b0: 77c78793 addi a5,a5,1916 # 801c8d28 + 800035b4: 00e787b3 add a5,a5,a4 + 800035b8: 0007c603 lbu a2,0(a5) + 800035bc: 00644703 lbu a4,6(s0) + 800035c0: 00445503 lhu a0,4(s0) + 800035c4: 00054697 auipc a3,0x54 + 800035c8: 2ac68693 addi a3,a3,684 # 80057870 <_ZL7ZNTable> + 800035cc: 00e67733 and a4,a2,a4 + 800035d0: 00a44783 lbu a5,10(s0) + 800035d4: 00e686b3 add a3,a3,a4 + 800035d8: 0006c683 lbu a3,0(a3) + 800035dc: 0015051b addiw a0,a0,1 + 800035e0: 07d7f793 andi a5,a5,125 + 800035e4: 03051513 slli a0,a0,0x30 + 800035e8: 03055513 srli a0,a0,0x30 + 800035ec: 00d7e7b3 or a5,a5,a3 + 800035f0: 00a41223 sh a0,4(s0) + 800035f4: 00c40c23 sb a2,24(s0) + 800035f8: 00e40323 sb a4,6(s0) + 800035fc: 00f40523 sb a5,10(s0) + 80003600: 01042483 lw s1,16(s0) + 80003604: 00ac8463 beq s9,a0,8000360c <_Z14X6502_RunDebugi+0x27ac> + 80003608: a65fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000360c: aedfd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003610: 00351793 slli a5,a0,0x3 + 80003614: 00f90933 add s2,s2,a5 + 80003618: 00093783 ld a5,0(s2) + 8000361c: 000780e7 jalr a5 + 80003620: 02051713 slli a4,a0,0x20 + 80003624: 02075713 srli a4,a4,0x20 + 80003628: 001c5797 auipc a5,0x1c5 + 8000362c: 70078793 addi a5,a5,1792 # 801c8d28 + 80003630: 00e787b3 add a5,a5,a4 + 80003634: 0007c703 lbu a4,0(a5) + 80003638: 00644783 lbu a5,6(s0) + 8000363c: 00a44683 lbu a3,10(s0) + 80003640: 00445503 lhu a0,4(s0) + 80003644: 00f77633 and a2,a4,a5 + 80003648: 00054797 auipc a5,0x54 + 8000364c: 22878793 addi a5,a5,552 # 80057870 <_ZL7ZNTable> + 80003650: 00c787b3 add a5,a5,a2 + 80003654: 0007c783 lbu a5,0(a5) + 80003658: 03d6f693 andi a3,a3,61 + 8000365c: 0015051b addiw a0,a0,1 + 80003660: 0027f793 andi a5,a5,2 + 80003664: 00d7e7b3 or a5,a5,a3 + 80003668: 03051513 slli a0,a0,0x30 + 8000366c: fc077693 andi a3,a4,-64 + 80003670: 03055513 srli a0,a0,0x30 + 80003674: 00d7e7b3 or a5,a5,a3 + 80003678: 00a41223 sh a0,4(s0) + 8000367c: 00e40c23 sb a4,24(s0) + 80003680: 00f40523 sb a5,10(s0) + 80003684: 01042483 lw s1,16(s0) + 80003688: 00ac8463 beq s9,a0,80003690 <_Z14X6502_RunDebugi+0x2830> + 8000368c: 9e1fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003690: a69fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003694: 00351793 slli a5,a0,0x3 + 80003698: 00f907b3 add a5,s2,a5 + 8000369c: 0007b783 ld a5,0(a5) + 800036a0: 00145d17 auipc s10,0x145 + 800036a4: 640d0d13 addi s10,s10,1600 # 80148ce0 + 800036a8: 000780e7 jalr a5 + 800036ac: 00744783 lbu a5,7(s0) + 800036b0: 001c5697 auipc a3,0x1c5 + 800036b4: 67868693 addi a3,a3,1656 # 801c8d28 + 800036b8: 00445603 lhu a2,4(s0) + 800036bc: 00a787bb addw a5,a5,a0 + 800036c0: 00178713 addi a4,a5,1 + 800036c4: 0ff77713 andi a4,a4,255 + 800036c8: 00e68733 add a4,a3,a4 + 800036cc: 0ff7f793 andi a5,a5,255 + 800036d0: 00074703 lbu a4,0(a4) + 800036d4: 00f687b3 add a5,a3,a5 + 800036d8: 0007c683 lbu a3,0(a5) + 800036dc: 0087179b slliw a5,a4,0x8 + 800036e0: 0016061b addiw a2,a2,1 + 800036e4: 00d7e7b3 or a5,a5,a3 + 800036e8: 03079493 slli s1,a5,0x30 + 800036ec: 02d4d493 srli s1,s1,0x2d + 800036f0: 00990933 add s2,s2,s1 + 800036f4: 00093683 ld a3,0(s2) + 800036f8: 0007891b sext.w s2,a5 + 800036fc: 00c41223 sh a2,4(s0) + 80003700: 00e40c23 sb a4,24(s0) + 80003704: 00090513 mv a0,s2 + 80003708: 000680e7 jalr a3 + 8000370c: 009d0d33 add s10,s10,s1 + 80003710: 000d3783 ld a5,0(s10) + 80003714: 00050493 mv s1,a0 + 80003718: 00050593 mv a1,a0 + 8000371c: 00940c23 sb s1,24(s0) + 80003720: 00090513 mv a0,s2 + 80003724: 000780e7 jalr a5 + 80003728: 00a44783 lbu a5,10(s0) + 8000372c: 0014959b slliw a1,s1,0x1 + 80003730: 00644703 lbu a4,6(s0) + 80003734: 0017f513 andi a0,a5,1 + 80003738: 0ff5f593 andi a1,a1,255 + 8000373c: 00a5e633 or a2,a1,a0 + 80003740: 00054697 auipc a3,0x54 + 80003744: 13068693 addi a3,a3,304 # 80057870 <_ZL7ZNTable> + 80003748: 00060593 mv a1,a2 + 8000374c: 00c68633 add a2,a3,a2 + 80003750: 00064503 lbu a0,0(a2) + 80003754: 00e5f733 and a4,a1,a4 + 80003758: 00e686b3 add a3,a3,a4 + 8000375c: 4074d49b sraiw s1,s1,0x7 + 80003760: 07c7f793 andi a5,a5,124 + 80003764: 0006c603 lbu a2,0(a3) + 80003768: 0097e7b3 or a5,a5,s1 + 8000376c: 00a7e7b3 or a5,a5,a0 + 80003770: 000d3683 ld a3,0(s10) + 80003774: 07d7f793 andi a5,a5,125 + 80003778: 00c7e7b3 or a5,a5,a2 + 8000377c: 00090513 mv a0,s2 + 80003780: 00e40323 sb a4,6(s0) + 80003784: 00f40523 sb a5,10(s0) + 80003788: 000680e7 jalr a3 + 8000378c: 00445503 lhu a0,4(s0) + 80003790: 01042483 lw s1,16(s0) + 80003794: 00ac8463 beq s9,a0,8000379c <_Z14X6502_RunDebugi+0x293c> + 80003798: 8d5fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000379c: 95dfd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800037a0: 00351793 slli a5,a0,0x3 + 800037a4: 00f907b3 add a5,s2,a5 + 800037a8: 0007b783 ld a5,0(a5) + 800037ac: 000780e7 jalr a5 + 800037b0: 00744783 lbu a5,7(s0) + 800037b4: 001c5697 auipc a3,0x1c5 + 800037b8: 57468693 addi a3,a3,1396 # 801c8d28 + 800037bc: 00445603 lhu a2,4(s0) + 800037c0: 00a787bb addw a5,a5,a0 + 800037c4: 00178713 addi a4,a5,1 + 800037c8: 0ff77713 andi a4,a4,255 + 800037cc: 00e68733 add a4,a3,a4 + 800037d0: 0ff7f793 andi a5,a5,255 + 800037d4: 00074703 lbu a4,0(a4) + 800037d8: 00f687b3 add a5,a3,a5 + 800037dc: 0007c783 lbu a5,0(a5) + 800037e0: 0087151b slliw a0,a4,0x8 + 800037e4: 0016061b addiw a2,a2,1 + 800037e8: 00f56533 or a0,a0,a5 + 800037ec: 03051793 slli a5,a0,0x30 + 800037f0: 02d7d793 srli a5,a5,0x2d + 800037f4: 00f90933 add s2,s2,a5 + 800037f8: 00093783 ld a5,0(s2) + 800037fc: 00c41223 sh a2,4(s0) + 80003800: 00e40c23 sb a4,24(s0) + 80003804: 0005051b sext.w a0,a0 + 80003808: 000780e7 jalr a5 + 8000380c: 00644703 lbu a4,6(s0) + 80003810: 00054617 auipc a2,0x54 + 80003814: 06060613 addi a2,a2,96 # 80057870 <_ZL7ZNTable> + 80003818: 00a44783 lbu a5,10(s0) + 8000381c: 00e57733 and a4,a0,a4 + 80003820: 00e60633 add a2,a2,a4 + 80003824: 00064603 lbu a2,0(a2) + 80003828: 00050693 mv a3,a0 + 8000382c: 07d7f793 andi a5,a5,125 + 80003830: 00445503 lhu a0,4(s0) + 80003834: 00c7e7b3 or a5,a5,a2 + 80003838: 00d40c23 sb a3,24(s0) + 8000383c: 00e40323 sb a4,6(s0) + 80003840: 00f40523 sb a5,10(s0) + 80003844: 01042483 lw s1,16(s0) + 80003848: 00ac8463 beq s9,a0,80003850 <_Z14X6502_RunDebugi+0x29f0> + 8000384c: 821fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003850: 8a9fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003854: 00351793 slli a5,a0,0x3 + 80003858: 00f907b3 add a5,s2,a5 + 8000385c: 0007b783 ld a5,0(a5) + 80003860: 000780e7 jalr a5 + 80003864: 00445783 lhu a5,4(s0) + 80003868: 00944703 lbu a4,9(s0) + 8000386c: 001c5697 auipc a3,0x1c5 + 80003870: 4bc68693 addi a3,a3,1212 # 801c8d28 + 80003874: 0017879b addiw a5,a5,1 + 80003878: 03079793 slli a5,a5,0x30 + 8000387c: 0307d793 srli a5,a5,0x30 + 80003880: 00379593 slli a1,a5,0x3 + 80003884: fff7061b addiw a2,a4,-1 + 80003888: 00b90933 add s2,s2,a1 + 8000388c: 00e68833 add a6,a3,a4 + 80003890: 4087d89b sraiw a7,a5,0x8 + 80003894: 0ff67613 andi a2,a2,255 + 80003898: 00093583 ld a1,0(s2) + 8000389c: 11180023 sb a7,256(a6) + 800038a0: 00c686b3 add a3,a3,a2 + 800038a4: ffe7071b addiw a4,a4,-2 + 800038a8: 00050493 mv s1,a0 + 800038ac: 00a40c23 sb a0,24(s0) + 800038b0: 00f41223 sh a5,4(s0) + 800038b4: 10f68023 sb a5,256(a3) + 800038b8: 00078513 mv a0,a5 + 800038bc: 00e404a3 sb a4,9(s0) + 800038c0: 000580e7 jalr a1 + 800038c4: 00050793 mv a5,a0 + 800038c8: 00851513 slli a0,a0,0x8 + 800038cc: 00956533 or a0,a0,s1 + 800038d0: 00f40c23 sb a5,24(s0) + 800038d4: 00a41223 sh a0,4(s0) + 800038d8: 01042483 lw s1,16(s0) + 800038dc: 00ac8463 beq s9,a0,800038e4 <_Z14X6502_RunDebugi+0x2a84> + 800038e0: f8cfd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800038e4: 815fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800038e8: 00351793 slli a5,a0,0x3 + 800038ec: 00f907b3 add a5,s2,a5 + 800038f0: 0007b783 ld a5,0(a5) + 800038f4: 000780e7 jalr a5 + 800038f8: 00445783 lhu a5,4(s0) + 800038fc: 00050713 mv a4,a0 + 80003900: 00a40c23 sb a0,24(s0) + 80003904: 0017879b addiw a5,a5,1 + 80003908: 03079513 slli a0,a5,0x30 + 8000390c: 03055513 srli a0,a0,0x30 + 80003910: 00351793 slli a5,a0,0x3 + 80003914: 00f907b3 add a5,s2,a5 + 80003918: 0007b783 ld a5,0(a5) + 8000391c: 00a41223 sh a0,4(s0) + 80003920: 0007049b sext.w s1,a4 + 80003924: 000780e7 jalr a5 + 80003928: 00744d03 lbu s10,7(s0) + 8000392c: 00851793 slli a5,a0,0x8 + 80003930: 0097e7b3 or a5,a5,s1 + 80003934: 00fd0d3b addw s10,s10,a5 + 80003938: 0ffd7613 andi a2,s10,255 + 8000393c: 0187f7b3 and a5,a5,s8 + 80003940: 00f66733 or a4,a2,a5 + 80003944: 00445683 lhu a3,4(s0) + 80003948: 00371713 slli a4,a4,0x3 + 8000394c: 00e90733 add a4,s2,a4 + 80003950: 00073583 ld a1,0(a4) + 80003954: 030d1d13 slli s10,s10,0x30 + 80003958: 0016871b addiw a4,a3,1 + 8000395c: 030d5d13 srli s10,s10,0x30 + 80003960: 00e41223 sh a4,4(s0) + 80003964: 003d1493 slli s1,s10,0x3 + 80003968: 00a40c23 sb a0,24(s0) + 8000396c: 00f66533 or a0,a2,a5 + 80003970: 000580e7 jalr a1 + 80003974: 00990933 add s2,s2,s1 + 80003978: 00093783 ld a5,0(s2) + 8000397c: 00a40c23 sb a0,24(s0) + 80003980: 00145917 auipc s2,0x145 + 80003984: 36090913 addi s2,s2,864 # 80148ce0 + 80003988: 000d0513 mv a0,s10 + 8000398c: 000780e7 jalr a5 + 80003990: 00990933 add s2,s2,s1 + 80003994: 00093783 ld a5,0(s2) + 80003998: 00050493 mv s1,a0 + 8000399c: 00050593 mv a1,a0 + 800039a0: 00940c23 sb s1,24(s0) + 800039a4: 000d0513 mv a0,s10 + 800039a8: 000780e7 jalr a5 + 800039ac: 00644683 lbu a3,6(s0) + 800039b0: 0014959b slliw a1,s1,0x1 + 800039b4: 00a44703 lbu a4,10(s0) + 800039b8: 00054617 auipc a2,0x54 + 800039bc: eb860613 addi a2,a2,-328 # 80057870 <_ZL7ZNTable> + 800039c0: 0fe5f793 andi a5,a1,254 + 800039c4: 00f607b3 add a5,a2,a5 + 800039c8: 0ff5f593 andi a1,a1,255 + 800039cc: 00d5e6b3 or a3,a1,a3 + 800039d0: 0007c783 lbu a5,0(a5) + 800039d4: ffe77713 andi a4,a4,-2 + 800039d8: 00d60633 add a2,a2,a3 + 800039dc: 4074d49b sraiw s1,s1,0x7 + 800039e0: 009764b3 or s1,a4,s1 + 800039e4: 00064603 lbu a2,0(a2) + 800039e8: 0097e7b3 or a5,a5,s1 + 800039ec: 00093703 ld a4,0(s2) + 800039f0: 07d7f793 andi a5,a5,125 + 800039f4: 00c7e7b3 or a5,a5,a2 + 800039f8: 000d0513 mv a0,s10 + 800039fc: 00d40323 sb a3,6(s0) + 80003a00: 00f40523 sb a5,10(s0) + 80003a04: 000700e7 jalr a4 + 80003a08: 00445503 lhu a0,4(s0) + 80003a0c: 01042483 lw s1,16(s0) + 80003a10: 00ac8463 beq s9,a0,80003a18 <_Z14X6502_RunDebugi+0x2bb8> + 80003a14: e58fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003a18: ee0fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003a1c: 00351793 slli a5,a0,0x3 + 80003a20: 00f907b3 add a5,s2,a5 + 80003a24: 0007b783 ld a5,0(a5) + 80003a28: 000780e7 jalr a5 + 80003a2c: 00445783 lhu a5,4(s0) + 80003a30: 00050713 mv a4,a0 + 80003a34: 00a40c23 sb a0,24(s0) + 80003a38: 0017879b addiw a5,a5,1 + 80003a3c: 03079513 slli a0,a5,0x30 + 80003a40: 03055513 srli a0,a0,0x30 + 80003a44: 00351793 slli a5,a0,0x3 + 80003a48: 00f907b3 add a5,s2,a5 + 80003a4c: 0007b783 ld a5,0(a5) + 80003a50: 00a41223 sh a0,4(s0) + 80003a54: 0007049b sext.w s1,a4 + 80003a58: 000780e7 jalr a5 + 80003a5c: 00744683 lbu a3,7(s0) + 80003a60: 00851793 slli a5,a0,0x8 + 80003a64: 0097e7b3 or a5,a5,s1 + 80003a68: 00f686bb addw a3,a3,a5 + 80003a6c: 0ff6f593 andi a1,a3,255 + 80003a70: 0187f7b3 and a5,a5,s8 + 80003a74: 00f5e733 or a4,a1,a5 + 80003a78: 00445603 lhu a2,4(s0) + 80003a7c: 00371713 slli a4,a4,0x3 + 80003a80: 00e90733 add a4,s2,a4 + 80003a84: 00073803 ld a6,0(a4) + 80003a88: 03069d13 slli s10,a3,0x30 + 80003a8c: 0016071b addiw a4,a2,1 + 80003a90: 030d5d13 srli s10,s10,0x30 + 80003a94: 00e41223 sh a4,4(s0) + 80003a98: 003d1493 slli s1,s10,0x3 + 80003a9c: 00a40c23 sb a0,24(s0) + 80003aa0: 00f5e533 or a0,a1,a5 + 80003aa4: 000800e7 jalr a6 + 80003aa8: 00990933 add s2,s2,s1 + 80003aac: 00093783 ld a5,0(s2) + 80003ab0: 00a40c23 sb a0,24(s0) + 80003ab4: 00145917 auipc s2,0x145 + 80003ab8: 22c90913 addi s2,s2,556 # 80148ce0 + 80003abc: 000d0513 mv a0,s10 + 80003ac0: 000780e7 jalr a5 + 80003ac4: 00990933 add s2,s2,s1 + 80003ac8: 00093783 ld a5,0(s2) + 80003acc: 00050493 mv s1,a0 + 80003ad0: 00050593 mv a1,a0 + 80003ad4: 00940c23 sb s1,24(s0) + 80003ad8: 000d0513 mv a0,s10 + 80003adc: 000780e7 jalr a5 + 80003ae0: 00a44783 lbu a5,10(s0) + 80003ae4: 0014959b slliw a1,s1,0x1 + 80003ae8: 0fe5f693 andi a3,a1,254 + 80003aec: 00054717 auipc a4,0x54 + 80003af0: d8470713 addi a4,a4,-636 # 80057870 <_ZL7ZNTable> + 80003af4: 00d70733 add a4,a4,a3 + 80003af8: 00074683 lbu a3,0(a4) + 80003afc: 4074d49b sraiw s1,s1,0x7 + 80003b00: ffe7f793 andi a5,a5,-2 + 80003b04: 0097e7b3 or a5,a5,s1 + 80003b08: 00093703 ld a4,0(s2) + 80003b0c: 07d7f793 andi a5,a5,125 + 80003b10: 00d7e7b3 or a5,a5,a3 + 80003b14: 000d0513 mv a0,s10 + 80003b18: 00f40523 sb a5,10(s0) + 80003b1c: 0fe5f593 andi a1,a1,254 + 80003b20: 000700e7 jalr a4 + 80003b24: 00445503 lhu a0,4(s0) + 80003b28: 01042483 lw s1,16(s0) + 80003b2c: 00ac8463 beq s9,a0,80003b34 <_Z14X6502_RunDebugi+0x2cd4> + 80003b30: d3cfd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003b34: dc4fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003b38: 00351793 slli a5,a0,0x3 + 80003b3c: 00f907b3 add a5,s2,a5 + 80003b40: 0007b783 ld a5,0(a5) + 80003b44: 000780e7 jalr a5 + 80003b48: 00445783 lhu a5,4(s0) + 80003b4c: 00050493 mv s1,a0 + 80003b50: 00a40c23 sb a0,24(s0) + 80003b54: 0017879b addiw a5,a5,1 + 80003b58: 03079513 slli a0,a5,0x30 + 80003b5c: 03055513 srli a0,a0,0x30 + 80003b60: 00351793 slli a5,a0,0x3 + 80003b64: 00f907b3 add a5,s2,a5 + 80003b68: 0007b783 ld a5,0(a5) + 80003b6c: 00a41223 sh a0,4(s0) + 80003b70: 0004849b sext.w s1,s1 + 80003b74: 000780e7 jalr a5 + 80003b78: 00851693 slli a3,a0,0x8 + 80003b7c: 0096e7b3 or a5,a3,s1 + 80003b80: 00445703 lhu a4,4(s0) + 80003b84: 00379793 slli a5,a5,0x3 + 80003b88: 00f90933 add s2,s2,a5 + 80003b8c: 00093603 ld a2,0(s2) + 80003b90: 0017079b addiw a5,a4,1 + 80003b94: 00a40c23 sb a0,24(s0) + 80003b98: 00f41223 sh a5,4(s0) + 80003b9c: 0096e533 or a0,a3,s1 + 80003ba0: 000600e7 jalr a2 + 80003ba4: 00644703 lbu a4,6(s0) + 80003ba8: 00054617 auipc a2,0x54 + 80003bac: cc860613 addi a2,a2,-824 # 80057870 <_ZL7ZNTable> + 80003bb0: 00a44783 lbu a5,10(s0) + 80003bb4: 00e54733 xor a4,a0,a4 + 80003bb8: 00e60633 add a2,a2,a4 + 80003bbc: 00064603 lbu a2,0(a2) + 80003bc0: 00050693 mv a3,a0 + 80003bc4: 07d7f793 andi a5,a5,125 + 80003bc8: 00445503 lhu a0,4(s0) + 80003bcc: 00c7e7b3 or a5,a5,a2 + 80003bd0: 00d40c23 sb a3,24(s0) + 80003bd4: 00e40323 sb a4,6(s0) + 80003bd8: 00f40523 sb a5,10(s0) + 80003bdc: 01042483 lw s1,16(s0) + 80003be0: 00ac8463 beq s9,a0,80003be8 <_Z14X6502_RunDebugi+0x2d88> + 80003be4: c88fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003be8: d10fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003bec: 00351793 slli a5,a0,0x3 + 80003bf0: 00f907b3 add a5,s2,a5 + 80003bf4: 0007b783 ld a5,0(a5) + 80003bf8: 000780e7 jalr a5 + 80003bfc: 002c871b addiw a4,s9,2 + 80003c00: 03071793 slli a5,a4,0x30 + 80003c04: 02d7d793 srli a5,a5,0x2d + 80003c08: 00f90933 add s2,s2,a5 + 80003c0c: 00093683 ld a3,0(s2) + 80003c10: 00050793 mv a5,a0 + 80003c14: 00a40c23 sb a0,24(s0) + 80003c18: 03071513 slli a0,a4,0x30 + 80003c1c: 03055513 srli a0,a0,0x30 + 80003c20: 0007849b sext.w s1,a5 + 80003c24: 000680e7 jalr a3 + 80003c28: 00050793 mv a5,a0 + 80003c2c: 00851513 slli a0,a0,0x8 + 80003c30: 00956533 or a0,a0,s1 + 80003c34: 00f40c23 sb a5,24(s0) + 80003c38: 00a41223 sh a0,4(s0) + 80003c3c: 01042483 lw s1,16(s0) + 80003c40: 00ac8463 beq s9,a0,80003c48 <_Z14X6502_RunDebugi+0x2de8> + 80003c44: c28fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003c48: cb0fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003c4c: 00351793 slli a5,a0,0x3 + 80003c50: 00f90933 add s2,s2,a5 + 80003c54: 00093783 ld a5,0(s2) + 80003c58: 000780e7 jalr a5 + 80003c5c: 00644783 lbu a5,6(s0) + 80003c60: 00054697 auipc a3,0x54 + 80003c64: c1068693 addi a3,a3,-1008 # 80057870 <_ZL7ZNTable> + 80003c68: 00050593 mv a1,a0 + 80003c6c: 00f57733 and a4,a0,a5 + 80003c70: 00e68633 add a2,a3,a4 + 80003c74: 00175813 srli a6,a4,0x1 + 80003c78: 00064883 lbu a7,0(a2) + 80003c7c: 00a44703 lbu a4,10(s0) + 80003c80: 00445603 lhu a2,4(s0) + 80003c84: 010686b3 add a3,a3,a6 + 80003c88: 0006c503 lbu a0,0(a3) + 80003c8c: 00f5f7b3 and a5,a1,a5 + 80003c90: 01176733 or a4,a4,a7 + 80003c94: 0017f793 andi a5,a5,1 + 80003c98: 0016069b addiw a3,a2,1 + 80003c9c: 00a7e7b3 or a5,a5,a0 + 80003ca0: 07c77713 andi a4,a4,124 + 80003ca4: 03069513 slli a0,a3,0x30 + 80003ca8: 03055513 srli a0,a0,0x30 + 80003cac: 00f767b3 or a5,a4,a5 + 80003cb0: 00b40c23 sb a1,24(s0) + 80003cb4: 00a41223 sh a0,4(s0) + 80003cb8: 01040323 sb a6,6(s0) + 80003cbc: 00f40523 sb a5,10(s0) + 80003cc0: 01042483 lw s1,16(s0) + 80003cc4: 00ac8463 beq s9,a0,80003ccc <_Z14X6502_RunDebugi+0x2e6c> + 80003cc8: ba4fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003ccc: c2cfd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003cd0: 00644703 lbu a4,6(s0) + 80003cd4: 00a44783 lbu a5,10(s0) + 80003cd8: 00054697 auipc a3,0x54 + 80003cdc: b9868693 addi a3,a3,-1128 # 80057870 <_ZL7ZNTable> + 80003ce0: 00175613 srli a2,a4,0x1 + 80003ce4: 00c686b3 add a3,a3,a2 + 80003ce8: 0006c683 lbu a3,0(a3) + 80003cec: 07c7f793 andi a5,a5,124 + 80003cf0: 00177713 andi a4,a4,1 + 80003cf4: 00e7e7b3 or a5,a5,a4 + 80003cf8: 00d7e7b3 or a5,a5,a3 + 80003cfc: 00f40523 sb a5,10(s0) + 80003d00: 00c40323 sb a2,6(s0) + 80003d04: 01042483 lw s1,16(s0) + 80003d08: 00ac8463 beq s9,a0,80003d10 <_Z14X6502_RunDebugi+0x2eb0> + 80003d0c: b60fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003d10: be8fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003d14: 00351793 slli a5,a0,0x3 + 80003d18: 00f90933 add s2,s2,a5 + 80003d1c: 00093783 ld a5,0(s2) + 80003d20: 000780e7 jalr a5 + 80003d24: 00644703 lbu a4,6(s0) + 80003d28: 00050693 mv a3,a0 + 80003d2c: 00054617 auipc a2,0x54 + 80003d30: b4460613 addi a2,a2,-1212 # 80057870 <_ZL7ZNTable> + 80003d34: 00e54733 xor a4,a0,a4 + 80003d38: 00445503 lhu a0,4(s0) + 80003d3c: 00a44783 lbu a5,10(s0) + 80003d40: 00e60633 add a2,a2,a4 + 80003d44: 00064603 lbu a2,0(a2) + 80003d48: 0015051b addiw a0,a0,1 + 80003d4c: 07d7f793 andi a5,a5,125 + 80003d50: 03051513 slli a0,a0,0x30 + 80003d54: 03055513 srli a0,a0,0x30 + 80003d58: 00c7e7b3 or a5,a5,a2 + 80003d5c: 00d40c23 sb a3,24(s0) + 80003d60: 00a41223 sh a0,4(s0) + 80003d64: 00e40323 sb a4,6(s0) + 80003d68: 00f40523 sb a5,10(s0) + 80003d6c: 01042483 lw s1,16(s0) + 80003d70: 00ac8463 beq s9,a0,80003d78 <_Z14X6502_RunDebugi+0x2f18> + 80003d74: af8fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003d78: b80fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003d7c: 00944783 lbu a5,9(s0) + 80003d80: 00644683 lbu a3,6(s0) + 80003d84: 001c5717 auipc a4,0x1c5 + 80003d88: 0a470713 addi a4,a4,164 # 801c8e28 + 80003d8c: 00e78733 add a4,a5,a4 + 80003d90: fff7879b addiw a5,a5,-1 + 80003d94: 00d70023 sb a3,0(a4) + 80003d98: 00f404a3 sb a5,9(s0) + 80003d9c: 01042483 lw s1,16(s0) + 80003da0: 00ac8463 beq s9,a0,80003da8 <_Z14X6502_RunDebugi+0x2f48> + 80003da4: ac8fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003da8: b50fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003dac: 00351793 slli a5,a0,0x3 + 80003db0: 00f907b3 add a5,s2,a5 + 80003db4: 0007b783 ld a5,0(a5) + 80003db8: 000780e7 jalr a5 + 80003dbc: 00445783 lhu a5,4(s0) + 80003dc0: 00050713 mv a4,a0 + 80003dc4: 00a40c23 sb a0,24(s0) + 80003dc8: 0017879b addiw a5,a5,1 + 80003dcc: 03079513 slli a0,a5,0x30 + 80003dd0: 03055513 srli a0,a0,0x30 + 80003dd4: 00351793 slli a5,a0,0x3 + 80003dd8: 00f907b3 add a5,s2,a5 + 80003ddc: 0007b783 ld a5,0(a5) + 80003de0: 00a41223 sh a0,4(s0) + 80003de4: 0007049b sext.w s1,a4 + 80003de8: 000780e7 jalr a5 + 80003dec: 00844703 lbu a4,8(s0) + 80003df0: 00445683 lhu a3,4(s0) + 80003df4: 00851793 slli a5,a0,0x8 + 80003df8: 0097e7b3 or a5,a5,s1 + 80003dfc: 00f7073b addw a4,a4,a5 + 80003e00: 0016869b addiw a3,a3,1 + 80003e04: 00e7c7b3 xor a5,a5,a4 + 80003e08: 00a40c23 sb a0,24(s0) + 80003e0c: 00d41223 sh a3,4(s0) + 80003e10: 1007f793 andi a5,a5,256 + 80003e14: 0007049b sext.w s1,a4 + 80003e18: 06078463 beqz a5,80003e80 <_Z14X6502_RunDebugi+0x3020> + 80003e1c: 03071493 slli s1,a4,0x30 + 80003e20: 0304d493 srli s1,s1,0x30 + 80003e24: 1004c793 xori a5,s1,256 + 80003e28: 00379793 slli a5,a5,0x3 + 80003e2c: 00f907b3 add a5,s2,a5 + 80003e30: 0007b783 ld a5,0(a5) + 80003e34: 1004c513 xori a0,s1,256 + 80003e38: 000780e7 jalr a5 + 80003e3c: 00042683 lw a3,0(s0) + 80003e40: 01042703 lw a4,16(s0) + 80003e44: 0009a783 lw a5,0(s3) + 80003e48: 000a4603 lbu a2,0(s4) + 80003e4c: 0016869b addiw a3,a3,1 + 80003e50: fd07071b addiw a4,a4,-48 + 80003e54: 0017879b addiw a5,a5,1 + 80003e58: 00a40c23 sb a0,24(s0) + 80003e5c: 00d42023 sw a3,0(s0) + 80003e60: 00e42823 sw a4,16(s0) + 80003e64: 00f9a023 sw a5,0(s3) + 80003e68: 00061c63 bnez a2,80003e80 <_Z14X6502_RunDebugi+0x3020> + 80003e6c: 001c8717 auipc a4,0x1c8 + 80003e70: cdc70713 addi a4,a4,-804 # 801cbb48 + 80003e74: 00072783 lw a5,0(a4) + 80003e78: 0017879b addiw a5,a5,1 + 80003e7c: 00f72023 sw a5,0(a4) + 80003e80: 02049793 slli a5,s1,0x20 + 80003e84: 01d7d793 srli a5,a5,0x1d + 80003e88: 00f90933 add s2,s2,a5 + 80003e8c: 00093783 ld a5,0(s2) + 80003e90: 00048513 mv a0,s1 + 80003e94: 000780e7 jalr a5 + 80003e98: 00644783 lbu a5,6(s0) + 80003e9c: 00054617 auipc a2,0x54 + 80003ea0: 9d460613 addi a2,a2,-1580 # 80057870 <_ZL7ZNTable> + 80003ea4: 00a44703 lbu a4,10(s0) + 80003ea8: 40a787bb subw a5,a5,a0 + 80003eac: 0ff7f593 andi a1,a5,255 + 80003eb0: 00b60633 add a2,a2,a1 + 80003eb4: 00064603 lbu a2,0(a2) + 80003eb8: 07d77713 andi a4,a4,125 + 80003ebc: 4087d79b sraiw a5,a5,0x8 + 80003ec0: 00c76733 or a4,a4,a2 + 80003ec4: 0017c793 xori a5,a5,1 + 80003ec8: 00050693 mv a3,a0 + 80003ecc: ffe77713 andi a4,a4,-2 + 80003ed0: 0017f793 andi a5,a5,1 + 80003ed4: 00445503 lhu a0,4(s0) + 80003ed8: 00f767b3 or a5,a4,a5 + 80003edc: 00d40c23 sb a3,24(s0) + 80003ee0: 00f40523 sb a5,10(s0) + 80003ee4: 01042483 lw s1,16(s0) + 80003ee8: 00ac8463 beq s9,a0,80003ef0 <_Z14X6502_RunDebugi+0x3090> + 80003eec: 980fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003ef0: a08fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003ef4: 00a44783 lbu a5,10(s0) + 80003ef8: 01042483 lw s1,16(s0) + 80003efc: ff77f793 andi a5,a5,-9 + 80003f00: 00f40523 sb a5,10(s0) + 80003f04: 00ac8463 beq s9,a0,80003f0c <_Z14X6502_RunDebugi+0x30ac> + 80003f08: 964fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003f0c: 9ecfd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003f10: 00351793 slli a5,a0,0x3 + 80003f14: 00f90933 add s2,s2,a5 + 80003f18: 00093783 ld a5,0(s2) + 80003f1c: 00744483 lbu s1,7(s0) + 80003f20: 000780e7 jalr a5 + 80003f24: 00a487bb addw a5,s1,a0 + 80003f28: 0ff7f793 andi a5,a5,255 + 80003f2c: 001c5697 auipc a3,0x1c5 + 80003f30: dfc68693 addi a3,a3,-516 # 801c8d28 + 80003f34: 00f686b3 add a3,a3,a5 + 80003f38: 0006c803 lbu a6,0(a3) + 80003f3c: 00644703 lbu a4,6(s0) + 80003f40: 00054617 auipc a2,0x54 + 80003f44: 93060613 addi a2,a2,-1744 # 80057870 <_ZL7ZNTable> + 80003f48: fff8059b addiw a1,a6,-1 + 80003f4c: 0ff5f793 andi a5,a1,255 + 80003f50: 40f7073b subw a4,a4,a5 + 80003f54: 00f607b3 add a5,a2,a5 + 80003f58: 0ff77513 andi a0,a4,255 + 80003f5c: 00a44883 lbu a7,10(s0) + 80003f60: 0007c783 lbu a5,0(a5) + 80003f64: 00a60633 add a2,a2,a0 + 80003f68: 00064603 lbu a2,0(a2) + 80003f6c: 00445503 lhu a0,4(s0) + 80003f70: 0117e7b3 or a5,a5,a7 + 80003f74: 07d7f793 andi a5,a5,125 + 80003f78: 4087571b sraiw a4,a4,0x8 + 80003f7c: 00c7e7b3 or a5,a5,a2 + 80003f80: 00174713 xori a4,a4,1 + 80003f84: 0015051b addiw a0,a0,1 + 80003f88: ffe7f793 andi a5,a5,-2 + 80003f8c: 00177713 andi a4,a4,1 + 80003f90: 03051513 slli a0,a0,0x30 + 80003f94: 03055513 srli a0,a0,0x30 + 80003f98: 00e7e7b3 or a5,a5,a4 + 80003f9c: 00a41223 sh a0,4(s0) + 80003fa0: 01040c23 sb a6,24(s0) + 80003fa4: 00f40523 sb a5,10(s0) + 80003fa8: 00b68023 sb a1,0(a3) + 80003fac: 01042483 lw s1,16(s0) + 80003fb0: 00ac8463 beq s9,a0,80003fb8 <_Z14X6502_RunDebugi+0x3158> + 80003fb4: 8b8fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80003fb8: 940fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80003fbc: 00351793 slli a5,a0,0x3 + 80003fc0: 00f90933 add s2,s2,a5 + 80003fc4: 00093783 ld a5,0(s2) + 80003fc8: 00744483 lbu s1,7(s0) + 80003fcc: 000780e7 jalr a5 + 80003fd0: 00a487bb addw a5,s1,a0 + 80003fd4: 0ff7f793 andi a5,a5,255 + 80003fd8: 001c5717 auipc a4,0x1c5 + 80003fdc: d5070713 addi a4,a4,-688 # 801c8d28 + 80003fe0: 00f70733 add a4,a4,a5 + 80003fe4: 00074583 lbu a1,0(a4) + 80003fe8: 00445503 lhu a0,4(s0) + 80003fec: 00054697 auipc a3,0x54 + 80003ff0: 88468693 addi a3,a3,-1916 # 80057870 <_ZL7ZNTable> + 80003ff4: fff5861b addiw a2,a1,-1 + 80003ff8: 0ff67813 andi a6,a2,255 + 80003ffc: 00a44783 lbu a5,10(s0) + 80004000: 010686b3 add a3,a3,a6 + 80004004: 0006c683 lbu a3,0(a3) + 80004008: 0015051b addiw a0,a0,1 + 8000400c: 07d7f793 andi a5,a5,125 + 80004010: 03051513 slli a0,a0,0x30 + 80004014: 03055513 srli a0,a0,0x30 + 80004018: 00d7e7b3 or a5,a5,a3 + 8000401c: 00a41223 sh a0,4(s0) + 80004020: 00b40c23 sb a1,24(s0) + 80004024: 00f40523 sb a5,10(s0) + 80004028: 00c70023 sb a2,0(a4) + 8000402c: 01042483 lw s1,16(s0) + 80004030: 00ac8463 beq s9,a0,80004038 <_Z14X6502_RunDebugi+0x31d8> + 80004034: 838fd06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004038: 8c0fd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000403c: 00351793 slli a5,a0,0x3 + 80004040: 00f90933 add s2,s2,a5 + 80004044: 00093783 ld a5,0(s2) + 80004048: 00744483 lbu s1,7(s0) + 8000404c: 000780e7 jalr a5 + 80004050: 00a487bb addw a5,s1,a0 + 80004054: 001c5717 auipc a4,0x1c5 + 80004058: cd470713 addi a4,a4,-812 # 801c8d28 + 8000405c: 0ff7f793 andi a5,a5,255 + 80004060: 00f707b3 add a5,a4,a5 + 80004064: 0007c603 lbu a2,0(a5) + 80004068: 00644783 lbu a5,6(s0) + 8000406c: 00054697 auipc a3,0x54 + 80004070: 80468693 addi a3,a3,-2044 # 80057870 <_ZL7ZNTable> + 80004074: 00a44703 lbu a4,10(s0) + 80004078: 40c787bb subw a5,a5,a2 + 8000407c: 0ff7f593 andi a1,a5,255 + 80004080: 00b686b3 add a3,a3,a1 + 80004084: 00445503 lhu a0,4(s0) + 80004088: 0006c683 lbu a3,0(a3) + 8000408c: 07d77713 andi a4,a4,125 + 80004090: 4087d79b sraiw a5,a5,0x8 + 80004094: 00d76733 or a4,a4,a3 + 80004098: 0017c793 xori a5,a5,1 + 8000409c: 0015051b addiw a0,a0,1 + 800040a0: ffe77713 andi a4,a4,-2 + 800040a4: 0017f793 andi a5,a5,1 + 800040a8: 03051513 slli a0,a0,0x30 + 800040ac: 03055513 srli a0,a0,0x30 + 800040b0: 00f767b3 or a5,a4,a5 + 800040b4: 00a41223 sh a0,4(s0) + 800040b8: 00c40c23 sb a2,24(s0) + 800040bc: 00f40523 sb a5,10(s0) + 800040c0: 01042483 lw s1,16(s0) + 800040c4: 00ac8463 beq s9,a0,800040cc <_Z14X6502_RunDebugi+0x326c> + 800040c8: fa5fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800040cc: 82cfd06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800040d0: 00351793 slli a5,a0,0x3 + 800040d4: 00f907b3 add a5,s2,a5 + 800040d8: 0007b783 ld a5,0(a5) + 800040dc: 000780e7 jalr a5 + 800040e0: 0015079b addiw a5,a0,1 + 800040e4: 001c5717 auipc a4,0x1c5 + 800040e8: c4470713 addi a4,a4,-956 # 801c8d28 + 800040ec: 0ff7f793 andi a5,a5,255 + 800040f0: 02051513 slli a0,a0,0x20 + 800040f4: 00f707b3 add a5,a4,a5 + 800040f8: 02055513 srli a0,a0,0x20 + 800040fc: 0007c603 lbu a2,0(a5) + 80004100: 00a70533 add a0,a4,a0 + 80004104: 00054703 lbu a4,0(a0) + 80004108: 00844483 lbu s1,8(s0) + 8000410c: 0086179b slliw a5,a2,0x8 + 80004110: 00e7e7b3 or a5,a5,a4 + 80004114: 00f484bb addw s1,s1,a5 + 80004118: 0007879b sext.w a5,a5 + 8000411c: 0187f7b3 and a5,a5,s8 + 80004120: 0ff4f513 andi a0,s1,255 + 80004124: 00f56733 or a4,a0,a5 + 80004128: 00445683 lhu a3,4(s0) + 8000412c: 00371713 slli a4,a4,0x3 + 80004130: 00e90733 add a4,s2,a4 + 80004134: 00073583 ld a1,0(a4) + 80004138: 03049493 slli s1,s1,0x30 + 8000413c: 0016871b addiw a4,a3,1 + 80004140: 0304d493 srli s1,s1,0x30 + 80004144: 00e41223 sh a4,4(s0) + 80004148: 00c40c23 sb a2,24(s0) + 8000414c: 00349d13 slli s10,s1,0x3 + 80004150: 00f56533 or a0,a0,a5 + 80004154: 000580e7 jalr a1 + 80004158: 01a90933 add s2,s2,s10 + 8000415c: 00093783 ld a5,0(s2) + 80004160: 00a40c23 sb a0,24(s0) + 80004164: 00048513 mv a0,s1 + 80004168: 000780e7 jalr a5 + 8000416c: 00145797 auipc a5,0x145 + 80004170: b7478793 addi a5,a5,-1164 # 80148ce0 + 80004174: 01a78d33 add s10,a5,s10 + 80004178: 000d3783 ld a5,0(s10) + 8000417c: 00050913 mv s2,a0 + 80004180: 00050593 mv a1,a0 + 80004184: 01240c23 sb s2,24(s0) + 80004188: 00048513 mv a0,s1 + 8000418c: 000780e7 jalr a5 + 80004190: 00644703 lbu a4,6(s0) + 80004194: fff9059b addiw a1,s2,-1 + 80004198: 0ff5f793 andi a5,a1,255 + 8000419c: 00053697 auipc a3,0x53 + 800041a0: 6d468693 addi a3,a3,1748 # 80057870 <_ZL7ZNTable> + 800041a4: 40f7073b subw a4,a4,a5 + 800041a8: 00f687b3 add a5,a3,a5 + 800041ac: 00a44603 lbu a2,10(s0) + 800041b0: 0ff77513 andi a0,a4,255 + 800041b4: 0007c783 lbu a5,0(a5) + 800041b8: 00a686b3 add a3,a3,a0 + 800041bc: 0006c683 lbu a3,0(a3) + 800041c0: 00c7e7b3 or a5,a5,a2 + 800041c4: 07d7f793 andi a5,a5,125 + 800041c8: 4087571b sraiw a4,a4,0x8 + 800041cc: 00d7e7b3 or a5,a5,a3 + 800041d0: 00174713 xori a4,a4,1 + 800041d4: 00177713 andi a4,a4,1 + 800041d8: 000d3683 ld a3,0(s10) + 800041dc: ffe7f793 andi a5,a5,-2 + 800041e0: 00e7e7b3 or a5,a5,a4 + 800041e4: 00048513 mv a0,s1 + 800041e8: 00f40523 sb a5,10(s0) + 800041ec: 0ff5f593 andi a1,a1,255 + 800041f0: 000680e7 jalr a3 + 800041f4: 00445503 lhu a0,4(s0) + 800041f8: 01042483 lw s1,16(s0) + 800041fc: 00ac8463 beq s9,a0,80004204 <_Z14X6502_RunDebugi+0x33a4> + 80004200: e6dfc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004204: ef5fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004208: 00351793 slli a5,a0,0x3 + 8000420c: 00f907b3 add a5,s2,a5 + 80004210: 0007b783 ld a5,0(a5) + 80004214: 000780e7 jalr a5 + 80004218: 0015079b addiw a5,a0,1 + 8000421c: 001c5717 auipc a4,0x1c5 + 80004220: b0c70713 addi a4,a4,-1268 # 801c8d28 + 80004224: 0ff7f793 andi a5,a5,255 + 80004228: 02051513 slli a0,a0,0x20 + 8000422c: 00f707b3 add a5,a4,a5 + 80004230: 02055513 srli a0,a0,0x20 + 80004234: 0007c603 lbu a2,0(a5) + 80004238: 00a70533 add a0,a4,a0 + 8000423c: 00054583 lbu a1,0(a0) + 80004240: 00844703 lbu a4,8(s0) + 80004244: 00445683 lhu a3,4(s0) + 80004248: 0086179b slliw a5,a2,0x8 + 8000424c: 00b7e7b3 or a5,a5,a1 + 80004250: 00f7073b addw a4,a4,a5 + 80004254: 0016869b addiw a3,a3,1 + 80004258: 00e7c7b3 xor a5,a5,a4 + 8000425c: 00d41223 sh a3,4(s0) + 80004260: 00c40c23 sb a2,24(s0) + 80004264: 1007f793 andi a5,a5,256 + 80004268: 0007049b sext.w s1,a4 + 8000426c: 06078463 beqz a5,800042d4 <_Z14X6502_RunDebugi+0x3474> + 80004270: 03071493 slli s1,a4,0x30 + 80004274: 0304d493 srli s1,s1,0x30 + 80004278: 1004c793 xori a5,s1,256 + 8000427c: 00379793 slli a5,a5,0x3 + 80004280: 00f907b3 add a5,s2,a5 + 80004284: 0007b783 ld a5,0(a5) + 80004288: 1004c513 xori a0,s1,256 + 8000428c: 000780e7 jalr a5 + 80004290: 00042683 lw a3,0(s0) + 80004294: 01042703 lw a4,16(s0) + 80004298: 0009a783 lw a5,0(s3) + 8000429c: 000a4603 lbu a2,0(s4) + 800042a0: 0016869b addiw a3,a3,1 + 800042a4: fd07071b addiw a4,a4,-48 + 800042a8: 0017879b addiw a5,a5,1 + 800042ac: 00a40c23 sb a0,24(s0) + 800042b0: 00d42023 sw a3,0(s0) + 800042b4: 00e42823 sw a4,16(s0) + 800042b8: 00f9a023 sw a5,0(s3) + 800042bc: 00061c63 bnez a2,800042d4 <_Z14X6502_RunDebugi+0x3474> + 800042c0: 001c8717 auipc a4,0x1c8 + 800042c4: 88870713 addi a4,a4,-1912 # 801cbb48 + 800042c8: 00072783 lw a5,0(a4) + 800042cc: 0017879b addiw a5,a5,1 + 800042d0: 00f72023 sw a5,0(a4) + 800042d4: 00349793 slli a5,s1,0x3 + 800042d8: 00f90933 add s2,s2,a5 + 800042dc: 00093783 ld a5,0(s2) + 800042e0: 00048513 mv a0,s1 + 800042e4: 000780e7 jalr a5 + 800042e8: 00644783 lbu a5,6(s0) + 800042ec: 00053617 auipc a2,0x53 + 800042f0: 58460613 addi a2,a2,1412 # 80057870 <_ZL7ZNTable> + 800042f4: 00a44703 lbu a4,10(s0) + 800042f8: 40a787bb subw a5,a5,a0 + 800042fc: 0ff7f593 andi a1,a5,255 + 80004300: 00b60633 add a2,a2,a1 + 80004304: 00064603 lbu a2,0(a2) + 80004308: 07d77713 andi a4,a4,125 + 8000430c: 4087d79b sraiw a5,a5,0x8 + 80004310: 00c76733 or a4,a4,a2 + 80004314: 0017c793 xori a5,a5,1 + 80004318: 00050693 mv a3,a0 + 8000431c: ffe77713 andi a4,a4,-2 + 80004320: 0017f793 andi a5,a5,1 + 80004324: 00445503 lhu a0,4(s0) + 80004328: 00f767b3 or a5,a4,a5 + 8000432c: 00d40c23 sb a3,24(s0) + 80004330: 00f40523 sb a5,10(s0) + 80004334: 01042483 lw s1,16(s0) + 80004338: 00ac8463 beq s9,a0,80004340 <_Z14X6502_RunDebugi+0x34e0> + 8000433c: d31fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004340: db9fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004344: 00a44783 lbu a5,10(s0) + 80004348: 0027f793 andi a5,a5,2 + 8000434c: 00078463 beqz a5,80004354 <_Z14X6502_RunDebugi+0x34f4> + 80004350: 09c0706f j 8000b3ec <_Z14X6502_RunDebugi+0xa58c> + 80004354: 00351793 slli a5,a0,0x3 + 80004358: 00f90933 add s2,s2,a5 + 8000435c: 00093783 ld a5,0(s2) + 80004360: 000780e7 jalr a5 + 80004364: 00445783 lhu a5,4(s0) + 80004368: 00050713 mv a4,a0 + 8000436c: 0185151b slliw a0,a0,0x18 + 80004370: 0017879b addiw a5,a5,1 + 80004374: 03079793 slli a5,a5,0x30 + 80004378: 00042583 lw a1,0(s0) + 8000437c: 01042683 lw a3,16(s0) + 80004380: 0009a603 lw a2,0(s3) + 80004384: 0307d793 srli a5,a5,0x30 + 80004388: 4185551b sraiw a0,a0,0x18 + 8000438c: 00f5053b addw a0,a0,a5 + 80004390: 03051513 slli a0,a0,0x30 + 80004394: 000a4803 lbu a6,0(s4) + 80004398: fd06849b addiw s1,a3,-48 + 8000439c: 0015831b addiw t1,a1,1 + 800043a0: 0016089b addiw a7,a2,1 + 800043a4: 03055513 srli a0,a0,0x30 + 800043a8: 00a7c7b3 xor a5,a5,a0 + 800043ac: 00e40c23 sb a4,24(s0) + 800043b0: 00642023 sw t1,0(s0) + 800043b4: 00942823 sw s1,16(s0) + 800043b8: 0119a023 sw a7,0(s3) + 800043bc: 1007f793 andi a5,a5,256 + 800043c0: 00080463 beqz a6,800043c8 <_Z14X6502_RunDebugi+0x3568> + 800043c4: 2240706f j 8000b5e8 <_Z14X6502_RunDebugi+0xa788> + 800043c8: 001c7817 auipc a6,0x1c7 + 800043cc: 78080813 addi a6,a6,1920 # 801cbb48 + 800043d0: 00082703 lw a4,0(a6) + 800043d4: 00a41223 sh a0,4(s0) + 800043d8: 0017089b addiw a7,a4,1 + 800043dc: 01182023 sw a7,0(a6) + 800043e0: 00079463 bnez a5,800043e8 <_Z14X6502_RunDebugi+0x3588> + 800043e4: c85fc06f j 80001068 <_Z14X6502_RunDebugi+0x208> + 800043e8: fa06849b addiw s1,a3,-96 + 800043ec: 0025859b addiw a1,a1,2 + 800043f0: 0026061b addiw a2,a2,2 + 800043f4: 0027071b addiw a4,a4,2 + 800043f8: 00b42023 sw a1,0(s0) + 800043fc: 00942823 sw s1,16(s0) + 80004400: 00c9a023 sw a2,0(s3) + 80004404: 00e82023 sw a4,0(a6) + 80004408: 00ac8463 beq s9,a0,80004410 <_Z14X6502_RunDebugi+0x35b0> + 8000440c: c61fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004410: ce9fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004414: 00351793 slli a5,a0,0x3 + 80004418: 00f907b3 add a5,s2,a5 + 8000441c: 0007b783 ld a5,0(a5) + 80004420: 000780e7 jalr a5 + 80004424: 00445783 lhu a5,4(s0) + 80004428: 00050493 mv s1,a0 + 8000442c: 00a40c23 sb a0,24(s0) + 80004430: 0017879b addiw a5,a5,1 + 80004434: 03079513 slli a0,a5,0x30 + 80004438: 03055513 srli a0,a0,0x30 + 8000443c: 00351793 slli a5,a0,0x3 + 80004440: 00f907b3 add a5,s2,a5 + 80004444: 0007b783 ld a5,0(a5) + 80004448: 00a41223 sh a0,4(s0) + 8000444c: 0004849b sext.w s1,s1 + 80004450: 000780e7 jalr a5 + 80004454: 00851713 slli a4,a0,0x8 + 80004458: 00976d33 or s10,a4,s1 + 8000445c: 00445783 lhu a5,4(s0) + 80004460: 003d1d13 slli s10,s10,0x3 + 80004464: 01a90933 add s2,s2,s10 + 80004468: 00093683 ld a3,0(s2) + 8000446c: 0017879b addiw a5,a5,1 + 80004470: 00976933 or s2,a4,s1 + 80004474: 00a40c23 sb a0,24(s0) + 80004478: 00f41223 sh a5,4(s0) + 8000447c: 00090513 mv a0,s2 + 80004480: 000680e7 jalr a3 + 80004484: 00145797 auipc a5,0x145 + 80004488: 85c78793 addi a5,a5,-1956 # 80148ce0 + 8000448c: 01a78d33 add s10,a5,s10 + 80004490: 000d3783 ld a5,0(s10) + 80004494: 00050493 mv s1,a0 + 80004498: 00050593 mv a1,a0 + 8000449c: 00940c23 sb s1,24(s0) + 800044a0: 00090513 mv a0,s2 + 800044a4: 000780e7 jalr a5 + 800044a8: 00644703 lbu a4,6(s0) + 800044ac: fff4859b addiw a1,s1,-1 + 800044b0: 0ff5f793 andi a5,a1,255 + 800044b4: 00053697 auipc a3,0x53 + 800044b8: 3bc68693 addi a3,a3,956 # 80057870 <_ZL7ZNTable> + 800044bc: 40f7073b subw a4,a4,a5 + 800044c0: 00f687b3 add a5,a3,a5 + 800044c4: 00a44603 lbu a2,10(s0) + 800044c8: 0ff77513 andi a0,a4,255 + 800044cc: 0007c783 lbu a5,0(a5) + 800044d0: 00a686b3 add a3,a3,a0 + 800044d4: 0006c683 lbu a3,0(a3) + 800044d8: 00c7e7b3 or a5,a5,a2 + 800044dc: 07d7f793 andi a5,a5,125 + 800044e0: 4087571b sraiw a4,a4,0x8 + 800044e4: 00d7e7b3 or a5,a5,a3 + 800044e8: 00174713 xori a4,a4,1 + 800044ec: 00177713 andi a4,a4,1 + 800044f0: 000d3683 ld a3,0(s10) + 800044f4: ffe7f793 andi a5,a5,-2 + 800044f8: 00e7e7b3 or a5,a5,a4 + 800044fc: 00090513 mv a0,s2 + 80004500: 00f40523 sb a5,10(s0) + 80004504: 0ff5f593 andi a1,a1,255 + 80004508: 000680e7 jalr a3 + 8000450c: 00445503 lhu a0,4(s0) + 80004510: 01042483 lw s1,16(s0) + 80004514: 00ac8463 beq s9,a0,8000451c <_Z14X6502_RunDebugi+0x36bc> + 80004518: b55fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000451c: bddfc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004520: 00351793 slli a5,a0,0x3 + 80004524: 00f907b3 add a5,s2,a5 + 80004528: 0007b783 ld a5,0(a5) + 8000452c: 000780e7 jalr a5 + 80004530: 00445783 lhu a5,4(s0) + 80004534: 00050493 mv s1,a0 + 80004538: 00a40c23 sb a0,24(s0) + 8000453c: 0017879b addiw a5,a5,1 + 80004540: 03079513 slli a0,a5,0x30 + 80004544: 03055513 srli a0,a0,0x30 + 80004548: 00351793 slli a5,a0,0x3 + 8000454c: 00f907b3 add a5,s2,a5 + 80004550: 0007b783 ld a5,0(a5) + 80004554: 00a41223 sh a0,4(s0) + 80004558: 0004849b sext.w s1,s1 + 8000455c: 000780e7 jalr a5 + 80004560: 00851713 slli a4,a0,0x8 + 80004564: 00976d33 or s10,a4,s1 + 80004568: 00445783 lhu a5,4(s0) + 8000456c: 003d1d93 slli s11,s10,0x3 + 80004570: 01b90933 add s2,s2,s11 + 80004574: 00093683 ld a3,0(s2) + 80004578: 0017879b addiw a5,a5,1 + 8000457c: 000d0913 mv s2,s10 + 80004580: 00a40c23 sb a0,24(s0) + 80004584: 00f41223 sh a5,4(s0) + 80004588: 000d0513 mv a0,s10 + 8000458c: 00144d17 auipc s10,0x144 + 80004590: 754d0d13 addi s10,s10,1876 # 80148ce0 + 80004594: 000680e7 jalr a3 + 80004598: 01bd0d33 add s10,s10,s11 + 8000459c: 000d3783 ld a5,0(s10) + 800045a0: 00050493 mv s1,a0 + 800045a4: 00050593 mv a1,a0 + 800045a8: 00940c23 sb s1,24(s0) + 800045ac: 00090513 mv a0,s2 + 800045b0: 000780e7 jalr a5 + 800045b4: fff4859b addiw a1,s1,-1 + 800045b8: 0ff5f693 andi a3,a1,255 + 800045bc: 00053717 auipc a4,0x53 + 800045c0: 2b470713 addi a4,a4,692 # 80057870 <_ZL7ZNTable> + 800045c4: 00a44783 lbu a5,10(s0) + 800045c8: 00d70733 add a4,a4,a3 + 800045cc: 00074683 lbu a3,0(a4) + 800045d0: 07d7f793 andi a5,a5,125 + 800045d4: 000d3703 ld a4,0(s10) + 800045d8: 00d7e7b3 or a5,a5,a3 + 800045dc: 00090513 mv a0,s2 + 800045e0: 00f40523 sb a5,10(s0) + 800045e4: 0ff5f593 andi a1,a1,255 + 800045e8: 000700e7 jalr a4 + 800045ec: 00445503 lhu a0,4(s0) + 800045f0: 01042483 lw s1,16(s0) + 800045f4: 00ac8463 beq s9,a0,800045fc <_Z14X6502_RunDebugi+0x379c> + 800045f8: a75fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800045fc: afdfc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004600: 00351793 slli a5,a0,0x3 + 80004604: 00f90933 add s2,s2,a5 + 80004608: 00093783 ld a5,0(s2) + 8000460c: 000780e7 jalr a5 + 80004610: 02051793 slli a5,a0,0x20 + 80004614: 0207d793 srli a5,a5,0x20 + 80004618: 001c4697 auipc a3,0x1c4 + 8000461c: 71068693 addi a3,a3,1808 # 801c8d28 + 80004620: 00f686b3 add a3,a3,a5 + 80004624: 0006c803 lbu a6,0(a3) + 80004628: 00644703 lbu a4,6(s0) + 8000462c: 00053617 auipc a2,0x53 + 80004630: 24460613 addi a2,a2,580 # 80057870 <_ZL7ZNTable> + 80004634: fff8059b addiw a1,a6,-1 + 80004638: 0ff5f793 andi a5,a1,255 + 8000463c: 40f7073b subw a4,a4,a5 + 80004640: 00f607b3 add a5,a2,a5 + 80004644: 0ff77513 andi a0,a4,255 + 80004648: 00a44883 lbu a7,10(s0) + 8000464c: 0007c783 lbu a5,0(a5) + 80004650: 00a60633 add a2,a2,a0 + 80004654: 00064603 lbu a2,0(a2) + 80004658: 00445503 lhu a0,4(s0) + 8000465c: 0117e7b3 or a5,a5,a7 + 80004660: 07d7f793 andi a5,a5,125 + 80004664: 4087571b sraiw a4,a4,0x8 + 80004668: 00c7e7b3 or a5,a5,a2 + 8000466c: 00174713 xori a4,a4,1 + 80004670: 0015051b addiw a0,a0,1 + 80004674: ffe7f793 andi a5,a5,-2 + 80004678: 00177713 andi a4,a4,1 + 8000467c: 03051513 slli a0,a0,0x30 + 80004680: 03055513 srli a0,a0,0x30 + 80004684: 00e7e7b3 or a5,a5,a4 + 80004688: 00a41223 sh a0,4(s0) + 8000468c: 01040c23 sb a6,24(s0) + 80004690: 00f40523 sb a5,10(s0) + 80004694: 00b68023 sb a1,0(a3) + 80004698: 01042483 lw s1,16(s0) + 8000469c: 00ac8463 beq s9,a0,800046a4 <_Z14X6502_RunDebugi+0x3844> + 800046a0: 9cdfc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800046a4: a55fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800046a8: 00351793 slli a5,a0,0x3 + 800046ac: 00f90933 add s2,s2,a5 + 800046b0: 00093783 ld a5,0(s2) + 800046b4: 000780e7 jalr a5 + 800046b8: 02051793 slli a5,a0,0x20 + 800046bc: 0207d793 srli a5,a5,0x20 + 800046c0: 001c4717 auipc a4,0x1c4 + 800046c4: 66870713 addi a4,a4,1640 # 801c8d28 + 800046c8: 00f70733 add a4,a4,a5 + 800046cc: 00074583 lbu a1,0(a4) + 800046d0: 00445503 lhu a0,4(s0) + 800046d4: 00053697 auipc a3,0x53 + 800046d8: 19c68693 addi a3,a3,412 # 80057870 <_ZL7ZNTable> + 800046dc: fff5861b addiw a2,a1,-1 + 800046e0: 0ff67813 andi a6,a2,255 + 800046e4: 00a44783 lbu a5,10(s0) + 800046e8: 010686b3 add a3,a3,a6 + 800046ec: 0006c683 lbu a3,0(a3) + 800046f0: 0015051b addiw a0,a0,1 + 800046f4: 07d7f793 andi a5,a5,125 + 800046f8: 03051513 slli a0,a0,0x30 + 800046fc: 03055513 srli a0,a0,0x30 + 80004700: 00d7e7b3 or a5,a5,a3 + 80004704: 00a41223 sh a0,4(s0) + 80004708: 00b40c23 sb a1,24(s0) + 8000470c: 00f40523 sb a5,10(s0) + 80004710: 00c70023 sb a2,0(a4) + 80004714: 01042483 lw s1,16(s0) + 80004718: 00ac8463 beq s9,a0,80004720 <_Z14X6502_RunDebugi+0x38c0> + 8000471c: 951fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004720: 9d9fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004724: 00351793 slli a5,a0,0x3 + 80004728: 00f90933 add s2,s2,a5 + 8000472c: 00093783 ld a5,0(s2) + 80004730: 000780e7 jalr a5 + 80004734: 02051713 slli a4,a0,0x20 + 80004738: 02075713 srli a4,a4,0x20 + 8000473c: 001c4797 auipc a5,0x1c4 + 80004740: 5ec78793 addi a5,a5,1516 # 801c8d28 + 80004744: 00e787b3 add a5,a5,a4 + 80004748: 0007c603 lbu a2,0(a5) + 8000474c: 00644783 lbu a5,6(s0) + 80004750: 00053697 auipc a3,0x53 + 80004754: 12068693 addi a3,a3,288 # 80057870 <_ZL7ZNTable> + 80004758: 00a44703 lbu a4,10(s0) + 8000475c: 40c787bb subw a5,a5,a2 + 80004760: 0ff7f593 andi a1,a5,255 + 80004764: 00b686b3 add a3,a3,a1 + 80004768: 00445503 lhu a0,4(s0) + 8000476c: 0006c683 lbu a3,0(a3) + 80004770: 07d77713 andi a4,a4,125 + 80004774: 4087d79b sraiw a5,a5,0x8 + 80004778: 00d76733 or a4,a4,a3 + 8000477c: 0017c793 xori a5,a5,1 + 80004780: 0015051b addiw a0,a0,1 + 80004784: ffe77713 andi a4,a4,-2 + 80004788: 0017f793 andi a5,a5,1 + 8000478c: 03051513 slli a0,a0,0x30 + 80004790: 03055513 srli a0,a0,0x30 + 80004794: 00f767b3 or a5,a4,a5 + 80004798: 00a41223 sh a0,4(s0) + 8000479c: 00c40c23 sb a2,24(s0) + 800047a0: 00f40523 sb a5,10(s0) + 800047a4: 01042483 lw s1,16(s0) + 800047a8: 00ac8463 beq s9,a0,800047b0 <_Z14X6502_RunDebugi+0x3950> + 800047ac: 8c1fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800047b0: 949fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800047b4: 00351793 slli a5,a0,0x3 + 800047b8: 00f90933 add s2,s2,a5 + 800047bc: 00093783 ld a5,0(s2) + 800047c0: 000780e7 jalr a5 + 800047c4: 02051713 slli a4,a0,0x20 + 800047c8: 02075713 srli a4,a4,0x20 + 800047cc: 001c4797 auipc a5,0x1c4 + 800047d0: 55c78793 addi a5,a5,1372 # 801c8d28 + 800047d4: 00e787b3 add a5,a5,a4 + 800047d8: 0007c603 lbu a2,0(a5) + 800047dc: 00844783 lbu a5,8(s0) + 800047e0: 00053697 auipc a3,0x53 + 800047e4: 09068693 addi a3,a3,144 # 80057870 <_ZL7ZNTable> + 800047e8: 00a44703 lbu a4,10(s0) + 800047ec: 40c787bb subw a5,a5,a2 + 800047f0: 0ff7f593 andi a1,a5,255 + 800047f4: 00b686b3 add a3,a3,a1 + 800047f8: 00445503 lhu a0,4(s0) + 800047fc: 0006c683 lbu a3,0(a3) + 80004800: 07d77713 andi a4,a4,125 + 80004804: 4087d79b sraiw a5,a5,0x8 + 80004808: 00d76733 or a4,a4,a3 + 8000480c: 0017c793 xori a5,a5,1 + 80004810: 0015051b addiw a0,a0,1 + 80004814: ffe77713 andi a4,a4,-2 + 80004818: 0017f793 andi a5,a5,1 + 8000481c: 03051513 slli a0,a0,0x30 + 80004820: 03055513 srli a0,a0,0x30 + 80004824: 00f767b3 or a5,a4,a5 + 80004828: 00a41223 sh a0,4(s0) + 8000482c: 00c40c23 sb a2,24(s0) + 80004830: 00f40523 sb a5,10(s0) + 80004834: 01042483 lw s1,16(s0) + 80004838: 00ac8463 beq s9,a0,80004840 <_Z14X6502_RunDebugi+0x39e0> + 8000483c: 831fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004840: 8b9fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004844: 00351793 slli a5,a0,0x3 + 80004848: 00f907b3 add a5,s2,a5 + 8000484c: 0007b783 ld a5,0(a5) + 80004850: 00144d17 auipc s10,0x144 + 80004854: 490d0d13 addi s10,s10,1168 # 80148ce0 + 80004858: 000780e7 jalr a5 + 8000485c: 00744783 lbu a5,7(s0) + 80004860: 001c4697 auipc a3,0x1c4 + 80004864: 4c868693 addi a3,a3,1224 # 801c8d28 + 80004868: 00445603 lhu a2,4(s0) + 8000486c: 00a787bb addw a5,a5,a0 + 80004870: 00178713 addi a4,a5,1 + 80004874: 0ff77713 andi a4,a4,255 + 80004878: 00e68733 add a4,a3,a4 + 8000487c: 0ff7f793 andi a5,a5,255 + 80004880: 00074703 lbu a4,0(a4) + 80004884: 00f687b3 add a5,a3,a5 + 80004888: 0007c683 lbu a3,0(a5) + 8000488c: 0087179b slliw a5,a4,0x8 + 80004890: 0016061b addiw a2,a2,1 + 80004894: 00d7e7b3 or a5,a5,a3 + 80004898: 03079493 slli s1,a5,0x30 + 8000489c: 02d4d493 srli s1,s1,0x2d + 800048a0: 00990933 add s2,s2,s1 + 800048a4: 00093683 ld a3,0(s2) + 800048a8: 0007891b sext.w s2,a5 + 800048ac: 00c41223 sh a2,4(s0) + 800048b0: 00e40c23 sb a4,24(s0) + 800048b4: 00090513 mv a0,s2 + 800048b8: 000680e7 jalr a3 + 800048bc: 009d0d33 add s10,s10,s1 + 800048c0: 000d3783 ld a5,0(s10) + 800048c4: 00050493 mv s1,a0 + 800048c8: 00050593 mv a1,a0 + 800048cc: 00940c23 sb s1,24(s0) + 800048d0: 00090513 mv a0,s2 + 800048d4: 000780e7 jalr a5 + 800048d8: 00644703 lbu a4,6(s0) + 800048dc: fff4859b addiw a1,s1,-1 + 800048e0: 0ff5f793 andi a5,a1,255 + 800048e4: 00053697 auipc a3,0x53 + 800048e8: f8c68693 addi a3,a3,-116 # 80057870 <_ZL7ZNTable> + 800048ec: 40f7073b subw a4,a4,a5 + 800048f0: 00f687b3 add a5,a3,a5 + 800048f4: 00a44603 lbu a2,10(s0) + 800048f8: 0ff77513 andi a0,a4,255 + 800048fc: 0007c783 lbu a5,0(a5) + 80004900: 00a686b3 add a3,a3,a0 + 80004904: 0006c683 lbu a3,0(a3) + 80004908: 00c7e7b3 or a5,a5,a2 + 8000490c: 07d7f793 andi a5,a5,125 + 80004910: 4087571b sraiw a4,a4,0x8 + 80004914: 00d7e7b3 or a5,a5,a3 + 80004918: 00174713 xori a4,a4,1 + 8000491c: 00177713 andi a4,a4,1 + 80004920: 000d3683 ld a3,0(s10) + 80004924: ffe7f793 andi a5,a5,-2 + 80004928: 00e7e7b3 or a5,a5,a4 + 8000492c: 00090513 mv a0,s2 + 80004930: 00f40523 sb a5,10(s0) + 80004934: 0ff5f593 andi a1,a1,255 + 80004938: 000680e7 jalr a3 + 8000493c: 00445503 lhu a0,4(s0) + 80004940: 01042483 lw s1,16(s0) + 80004944: 00ac8463 beq s9,a0,8000494c <_Z14X6502_RunDebugi+0x3aec> + 80004948: f24fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000494c: facfc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004950: 00351793 slli a5,a0,0x3 + 80004954: 00f907b3 add a5,s2,a5 + 80004958: 0007b783 ld a5,0(a5) + 8000495c: 000780e7 jalr a5 + 80004960: 00744783 lbu a5,7(s0) + 80004964: 001c4697 auipc a3,0x1c4 + 80004968: 3c468693 addi a3,a3,964 # 801c8d28 + 8000496c: 00445603 lhu a2,4(s0) + 80004970: 00a787bb addw a5,a5,a0 + 80004974: 00178713 addi a4,a5,1 + 80004978: 0ff77713 andi a4,a4,255 + 8000497c: 00e68733 add a4,a3,a4 + 80004980: 0ff7f793 andi a5,a5,255 + 80004984: 00074703 lbu a4,0(a4) + 80004988: 00f687b3 add a5,a3,a5 + 8000498c: 0007c783 lbu a5,0(a5) + 80004990: 0087151b slliw a0,a4,0x8 + 80004994: 0016061b addiw a2,a2,1 + 80004998: 00f56533 or a0,a0,a5 + 8000499c: 03051793 slli a5,a0,0x30 + 800049a0: 02d7d793 srli a5,a5,0x2d + 800049a4: 00f90933 add s2,s2,a5 + 800049a8: 00093783 ld a5,0(s2) + 800049ac: 00c41223 sh a2,4(s0) + 800049b0: 00e40c23 sb a4,24(s0) + 800049b4: 0005051b sext.w a0,a0 + 800049b8: 000780e7 jalr a5 + 800049bc: 00644783 lbu a5,6(s0) + 800049c0: 00053617 auipc a2,0x53 + 800049c4: eb060613 addi a2,a2,-336 # 80057870 <_ZL7ZNTable> + 800049c8: 00a44703 lbu a4,10(s0) + 800049cc: 40a787bb subw a5,a5,a0 + 800049d0: 0ff7f593 andi a1,a5,255 + 800049d4: 00b60633 add a2,a2,a1 + 800049d8: 00064603 lbu a2,0(a2) + 800049dc: 07d77713 andi a4,a4,125 + 800049e0: 4087d79b sraiw a5,a5,0x8 + 800049e4: 00c76733 or a4,a4,a2 + 800049e8: 0017c793 xori a5,a5,1 + 800049ec: 00050693 mv a3,a0 + 800049f0: ffe77713 andi a4,a4,-2 + 800049f4: 0017f793 andi a5,a5,1 + 800049f8: 00445503 lhu a0,4(s0) + 800049fc: 00f767b3 or a5,a4,a5 + 80004a00: 00d40c23 sb a3,24(s0) + 80004a04: 00f40523 sb a5,10(s0) + 80004a08: 01042483 lw s1,16(s0) + 80004a0c: 00ac8463 beq s9,a0,80004a14 <_Z14X6502_RunDebugi+0x3bb4> + 80004a10: e5cfc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004a14: ee4fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004a18: 00351793 slli a5,a0,0x3 + 80004a1c: 00f90933 add s2,s2,a5 + 80004a20: 00093783 ld a5,0(s2) + 80004a24: 000780e7 jalr a5 + 80004a28: 00844783 lbu a5,8(s0) + 80004a2c: 00053617 auipc a2,0x53 + 80004a30: e4460613 addi a2,a2,-444 # 80057870 <_ZL7ZNTable> + 80004a34: 00a44703 lbu a4,10(s0) + 80004a38: 40a787bb subw a5,a5,a0 + 80004a3c: 0ff7f593 andi a1,a5,255 + 80004a40: 00b60633 add a2,a2,a1 + 80004a44: 00050693 mv a3,a0 + 80004a48: 00064603 lbu a2,0(a2) + 80004a4c: 00445503 lhu a0,4(s0) + 80004a50: 07d77713 andi a4,a4,125 + 80004a54: 4087d79b sraiw a5,a5,0x8 + 80004a58: 00c76733 or a4,a4,a2 + 80004a5c: 0017c793 xori a5,a5,1 + 80004a60: 0015051b addiw a0,a0,1 + 80004a64: ffe77713 andi a4,a4,-2 + 80004a68: 0017f793 andi a5,a5,1 + 80004a6c: 03051513 slli a0,a0,0x30 + 80004a70: 03055513 srli a0,a0,0x30 + 80004a74: 00f767b3 or a5,a4,a5 + 80004a78: 00d40c23 sb a3,24(s0) + 80004a7c: 00a41223 sh a0,4(s0) + 80004a80: 00f40523 sb a5,10(s0) + 80004a84: 01042483 lw s1,16(s0) + 80004a88: 00ac8463 beq s9,a0,80004a90 <_Z14X6502_RunDebugi+0x3c30> + 80004a8c: de0fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004a90: e68fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004a94: 00351793 slli a5,a0,0x3 + 80004a98: 00f907b3 add a5,s2,a5 + 80004a9c: 0007b783 ld a5,0(a5) + 80004aa0: 000780e7 jalr a5 + 80004aa4: 00445783 lhu a5,4(s0) + 80004aa8: 00050713 mv a4,a0 + 80004aac: 00a40c23 sb a0,24(s0) + 80004ab0: 0017879b addiw a5,a5,1 + 80004ab4: 03079513 slli a0,a5,0x30 + 80004ab8: 03055513 srli a0,a0,0x30 + 80004abc: 00351793 slli a5,a0,0x3 + 80004ac0: 00f907b3 add a5,s2,a5 + 80004ac4: 0007b783 ld a5,0(a5) + 80004ac8: 00a41223 sh a0,4(s0) + 80004acc: 0007049b sext.w s1,a4 + 80004ad0: 000780e7 jalr a5 + 80004ad4: 00844703 lbu a4,8(s0) + 80004ad8: 00445683 lhu a3,4(s0) + 80004adc: 00851793 slli a5,a0,0x8 + 80004ae0: 0097e7b3 or a5,a5,s1 + 80004ae4: 00f7073b addw a4,a4,a5 + 80004ae8: 0016869b addiw a3,a3,1 + 80004aec: 00e7c7b3 xor a5,a5,a4 + 80004af0: 00a40c23 sb a0,24(s0) + 80004af4: 00d41223 sh a3,4(s0) + 80004af8: 1007f793 andi a5,a5,256 + 80004afc: 0007049b sext.w s1,a4 + 80004b00: 06078463 beqz a5,80004b68 <_Z14X6502_RunDebugi+0x3d08> + 80004b04: 03071493 slli s1,a4,0x30 + 80004b08: 0304d493 srli s1,s1,0x30 + 80004b0c: 1004c793 xori a5,s1,256 + 80004b10: 00379793 slli a5,a5,0x3 + 80004b14: 00f907b3 add a5,s2,a5 + 80004b18: 0007b783 ld a5,0(a5) + 80004b1c: 1004c513 xori a0,s1,256 + 80004b20: 000780e7 jalr a5 + 80004b24: 00042683 lw a3,0(s0) + 80004b28: 01042703 lw a4,16(s0) + 80004b2c: 0009a783 lw a5,0(s3) + 80004b30: 000a4603 lbu a2,0(s4) + 80004b34: 0016869b addiw a3,a3,1 + 80004b38: fd07071b addiw a4,a4,-48 + 80004b3c: 0017879b addiw a5,a5,1 + 80004b40: 00a40c23 sb a0,24(s0) + 80004b44: 00d42023 sw a3,0(s0) + 80004b48: 00e42823 sw a4,16(s0) + 80004b4c: 00f9a023 sw a5,0(s3) + 80004b50: 00061c63 bnez a2,80004b68 <_Z14X6502_RunDebugi+0x3d08> + 80004b54: 001c7717 auipc a4,0x1c7 + 80004b58: ff470713 addi a4,a4,-12 # 801cbb48 + 80004b5c: 00072783 lw a5,0(a4) + 80004b60: 0017879b addiw a5,a5,1 + 80004b64: 00f72023 sw a5,0(a4) + 80004b68: 02049793 slli a5,s1,0x20 + 80004b6c: 01d7d793 srli a5,a5,0x1d + 80004b70: 00f90933 add s2,s2,a5 + 80004b74: 00093783 ld a5,0(s2) + 80004b78: 00048513 mv a0,s1 + 80004b7c: 000780e7 jalr a5 + 80004b80: 00053717 auipc a4,0x53 + 80004b84: cf070713 addi a4,a4,-784 # 80057870 <_ZL7ZNTable> + 80004b88: 00a70733 add a4,a4,a0 + 80004b8c: 00074683 lbu a3,0(a4) + 80004b90: 00a44703 lbu a4,10(s0) + 80004b94: 00050793 mv a5,a0 + 80004b98: 00445503 lhu a0,4(s0) + 80004b9c: 00e6e733 or a4,a3,a4 + 80004ba0: 07d77713 andi a4,a4,125 + 80004ba4: 00e6e733 or a4,a3,a4 + 80004ba8: 00f40c23 sb a5,24(s0) + 80004bac: 00f40323 sb a5,6(s0) + 80004bb0: 00f403a3 sb a5,7(s0) + 80004bb4: 00e40523 sb a4,10(s0) + 80004bb8: 01042483 lw s1,16(s0) + 80004bbc: 00ac8463 beq s9,a0,80004bc4 <_Z14X6502_RunDebugi+0x3d64> + 80004bc0: cacfc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004bc4: d34fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004bc8: 00351793 slli a5,a0,0x3 + 80004bcc: 00f90933 add s2,s2,a5 + 80004bd0: 00093783 ld a5,0(s2) + 80004bd4: 000780e7 jalr a5 + 80004bd8: 00744703 lbu a4,7(s0) + 80004bdc: 00644783 lbu a5,6(s0) + 80004be0: 00053697 auipc a3,0x53 + 80004be4: c9068693 addi a3,a3,-880 # 80057870 <_ZL7ZNTable> + 80004be8: 00050593 mv a1,a0 + 80004bec: 00e7f7b3 and a5,a5,a4 + 80004bf0: 40a7873b subw a4,a5,a0 + 80004bf4: 0ff77613 andi a2,a4,255 + 80004bf8: 00c686b3 add a3,a3,a2 + 80004bfc: 00a44783 lbu a5,10(s0) + 80004c00: 0006c503 lbu a0,0(a3) + 80004c04: 00445603 lhu a2,4(s0) + 80004c08: 07d7f793 andi a5,a5,125 + 80004c0c: 4087569b sraiw a3,a4,0x8 + 80004c10: 00a7e7b3 or a5,a5,a0 + 80004c14: 0016c693 xori a3,a3,1 + 80004c18: 0016061b addiw a2,a2,1 + 80004c1c: ffe7f793 andi a5,a5,-2 + 80004c20: 0016f693 andi a3,a3,1 + 80004c24: 03061513 slli a0,a2,0x30 + 80004c28: 03055513 srli a0,a0,0x30 + 80004c2c: 00d7e7b3 or a5,a5,a3 + 80004c30: 00b40c23 sb a1,24(s0) + 80004c34: 00a41223 sh a0,4(s0) + 80004c38: 00f40523 sb a5,10(s0) + 80004c3c: 00e403a3 sb a4,7(s0) + 80004c40: 01042483 lw s1,16(s0) + 80004c44: 00ac8463 beq s9,a0,80004c4c <_Z14X6502_RunDebugi+0x3dec> + 80004c48: c24fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004c4c: cacfc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004c50: 00744783 lbu a5,7(s0) + 80004c54: 00053697 auipc a3,0x53 + 80004c58: c1c68693 addi a3,a3,-996 # 80057870 <_ZL7ZNTable> + 80004c5c: 00a44703 lbu a4,10(s0) + 80004c60: fff7879b addiw a5,a5,-1 + 80004c64: 0ff7f793 andi a5,a5,255 + 80004c68: 00f686b3 add a3,a3,a5 + 80004c6c: 0006c683 lbu a3,0(a3) + 80004c70: 07d77713 andi a4,a4,125 + 80004c74: 00f403a3 sb a5,7(s0) + 80004c78: 00d76733 or a4,a4,a3 + 80004c7c: 00e40523 sb a4,10(s0) + 80004c80: 01042483 lw s1,16(s0) + 80004c84: 00ac8463 beq s9,a0,80004c8c <_Z14X6502_RunDebugi+0x3e2c> + 80004c88: be4fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004c8c: c6cfc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004c90: 00351793 slli a5,a0,0x3 + 80004c94: 00f90933 add s2,s2,a5 + 80004c98: 00093783 ld a5,0(s2) + 80004c9c: 000780e7 jalr a5 + 80004ca0: 00644783 lbu a5,6(s0) + 80004ca4: 00053617 auipc a2,0x53 + 80004ca8: bcc60613 addi a2,a2,-1076 # 80057870 <_ZL7ZNTable> + 80004cac: 00a44703 lbu a4,10(s0) + 80004cb0: 40a787bb subw a5,a5,a0 + 80004cb4: 0ff7f593 andi a1,a5,255 + 80004cb8: 00b60633 add a2,a2,a1 + 80004cbc: 00050693 mv a3,a0 + 80004cc0: 00064603 lbu a2,0(a2) + 80004cc4: 00445503 lhu a0,4(s0) + 80004cc8: 07d77713 andi a4,a4,125 + 80004ccc: 4087d79b sraiw a5,a5,0x8 + 80004cd0: 00c76733 or a4,a4,a2 + 80004cd4: 0017c793 xori a5,a5,1 + 80004cd8: 0015051b addiw a0,a0,1 + 80004cdc: ffe77713 andi a4,a4,-2 + 80004ce0: 0017f793 andi a5,a5,1 + 80004ce4: 03051513 slli a0,a0,0x30 + 80004ce8: 03055513 srli a0,a0,0x30 + 80004cec: 00f767b3 or a5,a4,a5 + 80004cf0: 00d40c23 sb a3,24(s0) + 80004cf4: 00a41223 sh a0,4(s0) + 80004cf8: 00f40523 sb a5,10(s0) + 80004cfc: 01042483 lw s1,16(s0) + 80004d00: 00ac8463 beq s9,a0,80004d08 <_Z14X6502_RunDebugi+0x3ea8> + 80004d04: b68fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004d08: bf0fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004d0c: 00844783 lbu a5,8(s0) + 80004d10: 00053697 auipc a3,0x53 + 80004d14: b6068693 addi a3,a3,-1184 # 80057870 <_ZL7ZNTable> + 80004d18: 00a44703 lbu a4,10(s0) + 80004d1c: 0017879b addiw a5,a5,1 + 80004d20: 0ff7f793 andi a5,a5,255 + 80004d24: 00f686b3 add a3,a3,a5 + 80004d28: 0006c683 lbu a3,0(a3) + 80004d2c: 07d77713 andi a4,a4,125 + 80004d30: 00f40423 sb a5,8(s0) + 80004d34: 00d76733 or a4,a4,a3 + 80004d38: 00e40523 sb a4,10(s0) + 80004d3c: 01042483 lw s1,16(s0) + 80004d40: 00ac8463 beq s9,a0,80004d48 <_Z14X6502_RunDebugi+0x3ee8> + 80004d44: b28fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004d48: bb0fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004d4c: 00351793 slli a5,a0,0x3 + 80004d50: 00f907b3 add a5,s2,a5 + 80004d54: 0007b783 ld a5,0(a5) + 80004d58: 000780e7 jalr a5 + 80004d5c: 00445783 lhu a5,4(s0) + 80004d60: 00050493 mv s1,a0 + 80004d64: 00a40c23 sb a0,24(s0) + 80004d68: 0017879b addiw a5,a5,1 + 80004d6c: 03079513 slli a0,a5,0x30 + 80004d70: 03055513 srli a0,a0,0x30 + 80004d74: 00351793 slli a5,a0,0x3 + 80004d78: 00f907b3 add a5,s2,a5 + 80004d7c: 0007b783 ld a5,0(a5) + 80004d80: 00a41223 sh a0,4(s0) + 80004d84: 0004849b sext.w s1,s1 + 80004d88: 000780e7 jalr a5 + 80004d8c: 00851693 slli a3,a0,0x8 + 80004d90: 0096e7b3 or a5,a3,s1 + 80004d94: 00445703 lhu a4,4(s0) + 80004d98: 00379793 slli a5,a5,0x3 + 80004d9c: 00f90933 add s2,s2,a5 + 80004da0: 00093603 ld a2,0(s2) + 80004da4: 0017079b addiw a5,a4,1 + 80004da8: 00a40c23 sb a0,24(s0) + 80004dac: 00f41223 sh a5,4(s0) + 80004db0: 0096e533 or a0,a3,s1 + 80004db4: 000600e7 jalr a2 + 80004db8: 00644783 lbu a5,6(s0) + 80004dbc: 00053617 auipc a2,0x53 + 80004dc0: ab460613 addi a2,a2,-1356 # 80057870 <_ZL7ZNTable> + 80004dc4: 00a44703 lbu a4,10(s0) + 80004dc8: 40a787bb subw a5,a5,a0 + 80004dcc: 0ff7f593 andi a1,a5,255 + 80004dd0: 00b60633 add a2,a2,a1 + 80004dd4: 00064603 lbu a2,0(a2) + 80004dd8: 07d77713 andi a4,a4,125 + 80004ddc: 4087d79b sraiw a5,a5,0x8 + 80004de0: 00c76733 or a4,a4,a2 + 80004de4: 0017c793 xori a5,a5,1 + 80004de8: 00050693 mv a3,a0 + 80004dec: ffe77713 andi a4,a4,-2 + 80004df0: 0017f793 andi a5,a5,1 + 80004df4: 00445503 lhu a0,4(s0) + 80004df8: 00f767b3 or a5,a4,a5 + 80004dfc: 00d40c23 sb a3,24(s0) + 80004e00: 00f40523 sb a5,10(s0) + 80004e04: 01042483 lw s1,16(s0) + 80004e08: 00ac8463 beq s9,a0,80004e10 <_Z14X6502_RunDebugi+0x3fb0> + 80004e0c: a60fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004e10: ae8fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004e14: 00351793 slli a5,a0,0x3 + 80004e18: 00f907b3 add a5,s2,a5 + 80004e1c: 0007b783 ld a5,0(a5) + 80004e20: 000780e7 jalr a5 + 80004e24: 00445783 lhu a5,4(s0) + 80004e28: 00050493 mv s1,a0 + 80004e2c: 00a40c23 sb a0,24(s0) + 80004e30: 0017879b addiw a5,a5,1 + 80004e34: 03079513 slli a0,a5,0x30 + 80004e38: 03055513 srli a0,a0,0x30 + 80004e3c: 00351793 slli a5,a0,0x3 + 80004e40: 00f907b3 add a5,s2,a5 + 80004e44: 0007b783 ld a5,0(a5) + 80004e48: 00a41223 sh a0,4(s0) + 80004e4c: 0004849b sext.w s1,s1 + 80004e50: 000780e7 jalr a5 + 80004e54: 00851693 slli a3,a0,0x8 + 80004e58: 0096e7b3 or a5,a3,s1 + 80004e5c: 00445703 lhu a4,4(s0) + 80004e60: 00379793 slli a5,a5,0x3 + 80004e64: 00f90933 add s2,s2,a5 + 80004e68: 00093603 ld a2,0(s2) + 80004e6c: 0017079b addiw a5,a4,1 + 80004e70: 00a40c23 sb a0,24(s0) + 80004e74: 00f41223 sh a5,4(s0) + 80004e78: 0096e533 or a0,a3,s1 + 80004e7c: 000600e7 jalr a2 + 80004e80: 00844783 lbu a5,8(s0) + 80004e84: 00053617 auipc a2,0x53 + 80004e88: 9ec60613 addi a2,a2,-1556 # 80057870 <_ZL7ZNTable> + 80004e8c: 00a44703 lbu a4,10(s0) + 80004e90: 40a787bb subw a5,a5,a0 + 80004e94: 0ff7f593 andi a1,a5,255 + 80004e98: 00b60633 add a2,a2,a1 + 80004e9c: 00064603 lbu a2,0(a2) + 80004ea0: 07d77713 andi a4,a4,125 + 80004ea4: 4087d79b sraiw a5,a5,0x8 + 80004ea8: 00c76733 or a4,a4,a2 + 80004eac: 0017c793 xori a5,a5,1 + 80004eb0: 00050693 mv a3,a0 + 80004eb4: ffe77713 andi a4,a4,-2 + 80004eb8: 0017f793 andi a5,a5,1 + 80004ebc: 00445503 lhu a0,4(s0) + 80004ec0: 00f767b3 or a5,a4,a5 + 80004ec4: 00d40c23 sb a3,24(s0) + 80004ec8: 00f40523 sb a5,10(s0) + 80004ecc: 01042483 lw s1,16(s0) + 80004ed0: 00ac8463 beq s9,a0,80004ed8 <_Z14X6502_RunDebugi+0x4078> + 80004ed4: 998fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004ed8: a20fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004edc: 00351793 slli a5,a0,0x3 + 80004ee0: 00f90933 add s2,s2,a5 + 80004ee4: 00093783 ld a5,0(s2) + 80004ee8: 00844483 lbu s1,8(s0) + 80004eec: 000780e7 jalr a5 + 80004ef0: 00a487bb addw a5,s1,a0 + 80004ef4: 001c4717 auipc a4,0x1c4 + 80004ef8: e3470713 addi a4,a4,-460 # 801c8d28 + 80004efc: 0ff7f793 andi a5,a5,255 + 80004f00: 00f707b3 add a5,a4,a5 + 80004f04: 0007c703 lbu a4,0(a5) + 80004f08: 00445503 lhu a0,4(s0) + 80004f0c: 00053697 auipc a3,0x53 + 80004f10: 96468693 addi a3,a3,-1692 # 80057870 <_ZL7ZNTable> + 80004f14: 00a44783 lbu a5,10(s0) + 80004f18: 00e686b3 add a3,a3,a4 + 80004f1c: 0006c683 lbu a3,0(a3) + 80004f20: 0015051b addiw a0,a0,1 + 80004f24: 07d7f793 andi a5,a5,125 + 80004f28: 03051513 slli a0,a0,0x30 + 80004f2c: 03055513 srli a0,a0,0x30 + 80004f30: 00d7e7b3 or a5,a5,a3 + 80004f34: 00a41223 sh a0,4(s0) + 80004f38: 00e40c23 sb a4,24(s0) + 80004f3c: 00e403a3 sb a4,7(s0) + 80004f40: 00f40523 sb a5,10(s0) + 80004f44: 01042483 lw s1,16(s0) + 80004f48: 00ac8463 beq s9,a0,80004f50 <_Z14X6502_RunDebugi+0x40f0> + 80004f4c: 920fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004f50: 9a8fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004f54: 00351793 slli a5,a0,0x3 + 80004f58: 00f90933 add s2,s2,a5 + 80004f5c: 00093783 ld a5,0(s2) + 80004f60: 00744483 lbu s1,7(s0) + 80004f64: 000780e7 jalr a5 + 80004f68: 00a487bb addw a5,s1,a0 + 80004f6c: 001c4717 auipc a4,0x1c4 + 80004f70: dbc70713 addi a4,a4,-580 # 801c8d28 + 80004f74: 0ff7f793 andi a5,a5,255 + 80004f78: 00f707b3 add a5,a4,a5 + 80004f7c: 0007c703 lbu a4,0(a5) + 80004f80: 00445503 lhu a0,4(s0) + 80004f84: 00053697 auipc a3,0x53 + 80004f88: 8ec68693 addi a3,a3,-1812 # 80057870 <_ZL7ZNTable> + 80004f8c: 00a44783 lbu a5,10(s0) + 80004f90: 00e686b3 add a3,a3,a4 + 80004f94: 0006c683 lbu a3,0(a3) + 80004f98: 0015051b addiw a0,a0,1 + 80004f9c: 07d7f793 andi a5,a5,125 + 80004fa0: 03051513 slli a0,a0,0x30 + 80004fa4: 03055513 srli a0,a0,0x30 + 80004fa8: 00d7e7b3 or a5,a5,a3 + 80004fac: 00a41223 sh a0,4(s0) + 80004fb0: 00e40c23 sb a4,24(s0) + 80004fb4: 00e40323 sb a4,6(s0) + 80004fb8: 00f40523 sb a5,10(s0) + 80004fbc: 01042483 lw s1,16(s0) + 80004fc0: 00ac8463 beq s9,a0,80004fc8 <_Z14X6502_RunDebugi+0x4168> + 80004fc4: 8a8fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80004fc8: 930fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80004fcc: 00351793 slli a5,a0,0x3 + 80004fd0: 00f90933 add s2,s2,a5 + 80004fd4: 00093783 ld a5,0(s2) + 80004fd8: 00744483 lbu s1,7(s0) + 80004fdc: 000780e7 jalr a5 + 80004fe0: 00a487bb addw a5,s1,a0 + 80004fe4: 001c4717 auipc a4,0x1c4 + 80004fe8: d4470713 addi a4,a4,-700 # 801c8d28 + 80004fec: 0ff7f793 andi a5,a5,255 + 80004ff0: 00f707b3 add a5,a4,a5 + 80004ff4: 0007c703 lbu a4,0(a5) + 80004ff8: 00445503 lhu a0,4(s0) + 80004ffc: 00053697 auipc a3,0x53 + 80005000: 87468693 addi a3,a3,-1932 # 80057870 <_ZL7ZNTable> + 80005004: 00a44783 lbu a5,10(s0) + 80005008: 00e686b3 add a3,a3,a4 + 8000500c: 0006c683 lbu a3,0(a3) + 80005010: 0015051b addiw a0,a0,1 + 80005014: 07d7f793 andi a5,a5,125 + 80005018: 03051513 slli a0,a0,0x30 + 8000501c: 03055513 srli a0,a0,0x30 + 80005020: 00d7e7b3 or a5,a5,a3 + 80005024: 00a41223 sh a0,4(s0) + 80005028: 00e40c23 sb a4,24(s0) + 8000502c: 00e40423 sb a4,8(s0) + 80005030: 00f40523 sb a5,10(s0) + 80005034: 01042483 lw s1,16(s0) + 80005038: 00ac8463 beq s9,a0,80005040 <_Z14X6502_RunDebugi+0x41e0> + 8000503c: 830fc06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80005040: 8b8fc06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80005044: 00351793 slli a5,a0,0x3 + 80005048: 00f907b3 add a5,s2,a5 + 8000504c: 0007b783 ld a5,0(a5) + 80005050: 000780e7 jalr a5 + 80005054: 0015079b addiw a5,a0,1 + 80005058: 001c4717 auipc a4,0x1c4 + 8000505c: cd070713 addi a4,a4,-816 # 801c8d28 + 80005060: 0ff7f793 andi a5,a5,255 + 80005064: 02051513 slli a0,a0,0x20 + 80005068: 00f707b3 add a5,a4,a5 + 8000506c: 02055513 srli a0,a0,0x20 + 80005070: 0007c603 lbu a2,0(a5) + 80005074: 00a70533 add a0,a4,a0 + 80005078: 00054583 lbu a1,0(a0) + 8000507c: 00844703 lbu a4,8(s0) + 80005080: 00445683 lhu a3,4(s0) + 80005084: 0086179b slliw a5,a2,0x8 + 80005088: 00b7e7b3 or a5,a5,a1 + 8000508c: 00f7073b addw a4,a4,a5 + 80005090: 0016869b addiw a3,a3,1 + 80005094: 00e7c7b3 xor a5,a5,a4 + 80005098: 00d41223 sh a3,4(s0) + 8000509c: 00c40c23 sb a2,24(s0) + 800050a0: 1007f793 andi a5,a5,256 + 800050a4: 0007049b sext.w s1,a4 + 800050a8: 06078463 beqz a5,80005110 <_Z14X6502_RunDebugi+0x42b0> + 800050ac: 03071493 slli s1,a4,0x30 + 800050b0: 0304d493 srli s1,s1,0x30 + 800050b4: 1004c793 xori a5,s1,256 + 800050b8: 00379793 slli a5,a5,0x3 + 800050bc: 00f907b3 add a5,s2,a5 + 800050c0: 0007b783 ld a5,0(a5) + 800050c4: 1004c513 xori a0,s1,256 + 800050c8: 000780e7 jalr a5 + 800050cc: 00042683 lw a3,0(s0) + 800050d0: 01042703 lw a4,16(s0) + 800050d4: 0009a783 lw a5,0(s3) + 800050d8: 000a4603 lbu a2,0(s4) + 800050dc: 0016869b addiw a3,a3,1 + 800050e0: fd07071b addiw a4,a4,-48 + 800050e4: 0017879b addiw a5,a5,1 + 800050e8: 00a40c23 sb a0,24(s0) + 800050ec: 00d42023 sw a3,0(s0) + 800050f0: 00e42823 sw a4,16(s0) + 800050f4: 00f9a023 sw a5,0(s3) + 800050f8: 00061c63 bnez a2,80005110 <_Z14X6502_RunDebugi+0x42b0> + 800050fc: 001c7717 auipc a4,0x1c7 + 80005100: a4c70713 addi a4,a4,-1460 # 801cbb48 + 80005104: 00072783 lw a5,0(a4) + 80005108: 0017879b addiw a5,a5,1 + 8000510c: 00f72023 sw a5,0(a4) + 80005110: 00349793 slli a5,s1,0x3 + 80005114: 00f90933 add s2,s2,a5 + 80005118: 00093783 ld a5,0(s2) + 8000511c: 00048513 mv a0,s1 + 80005120: 000780e7 jalr a5 + 80005124: 00052717 auipc a4,0x52 + 80005128: 74c70713 addi a4,a4,1868 # 80057870 <_ZL7ZNTable> + 8000512c: 00a70733 add a4,a4,a0 + 80005130: 00074683 lbu a3,0(a4) + 80005134: 00a44703 lbu a4,10(s0) + 80005138: 00050793 mv a5,a0 + 8000513c: 00445503 lhu a0,4(s0) + 80005140: 00e6e733 or a4,a3,a4 + 80005144: 07d77713 andi a4,a4,125 + 80005148: 00e6e733 or a4,a3,a4 + 8000514c: 00f40c23 sb a5,24(s0) + 80005150: 00f40323 sb a5,6(s0) + 80005154: 00f403a3 sb a5,7(s0) + 80005158: 00e40523 sb a4,10(s0) + 8000515c: 01042483 lw s1,16(s0) + 80005160: 00ac8463 beq s9,a0,80005168 <_Z14X6502_RunDebugi+0x4308> + 80005164: f09fb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80005168: f91fb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000516c: 00351793 slli a5,a0,0x3 + 80005170: 00f907b3 add a5,s2,a5 + 80005174: 0007b783 ld a5,0(a5) + 80005178: 000780e7 jalr a5 + 8000517c: 0015079b addiw a5,a0,1 + 80005180: 001c4717 auipc a4,0x1c4 + 80005184: ba870713 addi a4,a4,-1112 # 801c8d28 + 80005188: 0ff7f793 andi a5,a5,255 + 8000518c: 02051513 slli a0,a0,0x20 + 80005190: 00f707b3 add a5,a4,a5 + 80005194: 02055513 srli a0,a0,0x20 + 80005198: 0007c603 lbu a2,0(a5) + 8000519c: 00a70533 add a0,a4,a0 + 800051a0: 00054583 lbu a1,0(a0) + 800051a4: 00844703 lbu a4,8(s0) + 800051a8: 00445683 lhu a3,4(s0) + 800051ac: 0086179b slliw a5,a2,0x8 + 800051b0: 00b7e7b3 or a5,a5,a1 + 800051b4: 00f7073b addw a4,a4,a5 + 800051b8: 0016869b addiw a3,a3,1 + 800051bc: 00e7c7b3 xor a5,a5,a4 + 800051c0: 00d41223 sh a3,4(s0) + 800051c4: 00c40c23 sb a2,24(s0) + 800051c8: 1007f793 andi a5,a5,256 + 800051cc: 0007049b sext.w s1,a4 + 800051d0: 06078463 beqz a5,80005238 <_Z14X6502_RunDebugi+0x43d8> + 800051d4: 03071493 slli s1,a4,0x30 + 800051d8: 0304d493 srli s1,s1,0x30 + 800051dc: 1004c793 xori a5,s1,256 + 800051e0: 00379793 slli a5,a5,0x3 + 800051e4: 00f907b3 add a5,s2,a5 + 800051e8: 0007b783 ld a5,0(a5) + 800051ec: 1004c513 xori a0,s1,256 + 800051f0: 000780e7 jalr a5 + 800051f4: 00042683 lw a3,0(s0) + 800051f8: 01042703 lw a4,16(s0) + 800051fc: 0009a783 lw a5,0(s3) + 80005200: 000a4603 lbu a2,0(s4) + 80005204: 0016869b addiw a3,a3,1 + 80005208: fd07071b addiw a4,a4,-48 + 8000520c: 0017879b addiw a5,a5,1 + 80005210: 00a40c23 sb a0,24(s0) + 80005214: 00d42023 sw a3,0(s0) + 80005218: 00e42823 sw a4,16(s0) + 8000521c: 00f9a023 sw a5,0(s3) + 80005220: 00061c63 bnez a2,80005238 <_Z14X6502_RunDebugi+0x43d8> + 80005224: 001c7717 auipc a4,0x1c7 + 80005228: 92470713 addi a4,a4,-1756 # 801cbb48 + 8000522c: 00072783 lw a5,0(a4) + 80005230: 0017879b addiw a5,a5,1 + 80005234: 00f72023 sw a5,0(a4) + 80005238: 00349793 slli a5,s1,0x3 + 8000523c: 00f90933 add s2,s2,a5 + 80005240: 00093783 ld a5,0(s2) + 80005244: 00048513 mv a0,s1 + 80005248: 000780e7 jalr a5 + 8000524c: 00052697 auipc a3,0x52 + 80005250: 62468693 addi a3,a3,1572 # 80057870 <_ZL7ZNTable> + 80005254: 00a44783 lbu a5,10(s0) + 80005258: 00a686b3 add a3,a3,a0 + 8000525c: 0006c683 lbu a3,0(a3) + 80005260: 00050713 mv a4,a0 + 80005264: 07d7f793 andi a5,a5,125 + 80005268: 00445503 lhu a0,4(s0) + 8000526c: 00d7e7b3 or a5,a5,a3 + 80005270: 00e40c23 sb a4,24(s0) + 80005274: 00e40323 sb a4,6(s0) + 80005278: 00f40523 sb a5,10(s0) + 8000527c: 01042483 lw s1,16(s0) + 80005280: 00ac8463 beq s9,a0,80005288 <_Z14X6502_RunDebugi+0x4428> + 80005284: de9fb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80005288: e71fb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000528c: 00a44783 lbu a5,10(s0) + 80005290: 0017f793 andi a5,a5,1 + 80005294: 00079463 bnez a5,8000529c <_Z14X6502_RunDebugi+0x443c> + 80005298: 1740606f j 8000b40c <_Z14X6502_RunDebugi+0xa5ac> + 8000529c: 00351793 slli a5,a0,0x3 + 800052a0: 00f90933 add s2,s2,a5 + 800052a4: 00093783 ld a5,0(s2) + 800052a8: 000780e7 jalr a5 + 800052ac: 00445783 lhu a5,4(s0) + 800052b0: 00050693 mv a3,a0 + 800052b4: 0185151b slliw a0,a0,0x18 + 800052b8: 0017879b addiw a5,a5,1 + 800052bc: 03079793 slli a5,a5,0x30 + 800052c0: 00042583 lw a1,0(s0) + 800052c4: 01042703 lw a4,16(s0) + 800052c8: 0009a603 lw a2,0(s3) + 800052cc: 0307d793 srli a5,a5,0x30 + 800052d0: 4185551b sraiw a0,a0,0x18 + 800052d4: 00f5053b addw a0,a0,a5 + 800052d8: 03051513 slli a0,a0,0x30 + 800052dc: 000a4803 lbu a6,0(s4) + 800052e0: fd07049b addiw s1,a4,-48 + 800052e4: 0015831b addiw t1,a1,1 + 800052e8: 0016089b addiw a7,a2,1 + 800052ec: 03055513 srli a0,a0,0x30 + 800052f0: 00a7c7b3 xor a5,a5,a0 + 800052f4: 00d40c23 sb a3,24(s0) + 800052f8: 00642023 sw t1,0(s0) + 800052fc: 00942823 sw s1,16(s0) + 80005300: 0119a023 sw a7,0(s3) + 80005304: 1007f793 andi a5,a5,256 + 80005308: 00080463 beqz a6,80005310 <_Z14X6502_RunDebugi+0x44b0> + 8000530c: 30c0606f j 8000b618 <_Z14X6502_RunDebugi+0xa7b8> + 80005310: 001c7817 auipc a6,0x1c7 + 80005314: 83880813 addi a6,a6,-1992 # 801cbb48 + 80005318: 00082683 lw a3,0(a6) + 8000531c: 00a41223 sh a0,4(s0) + 80005320: 0016889b addiw a7,a3,1 + 80005324: 01182023 sw a7,0(a6) + 80005328: 00079463 bnez a5,80005330 <_Z14X6502_RunDebugi+0x44d0> + 8000532c: d3dfb06f j 80001068 <_Z14X6502_RunDebugi+0x208> + 80005330: fa07049b addiw s1,a4,-96 + 80005334: 0025859b addiw a1,a1,2 + 80005338: 0026061b addiw a2,a2,2 + 8000533c: 0026869b addiw a3,a3,2 + 80005340: 00b42023 sw a1,0(s0) + 80005344: 00942823 sw s1,16(s0) + 80005348: 00c9a023 sw a2,0(s3) + 8000534c: 00d82023 sw a3,0(a6) + 80005350: 00ac8463 beq s9,a0,80005358 <_Z14X6502_RunDebugi+0x44f8> + 80005354: d19fb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80005358: da1fb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000535c: 00351793 slli a5,a0,0x3 + 80005360: 00f907b3 add a5,s2,a5 + 80005364: 0007b783 ld a5,0(a5) + 80005368: 000780e7 jalr a5 + 8000536c: 00445783 lhu a5,4(s0) + 80005370: 00050493 mv s1,a0 + 80005374: 00a40c23 sb a0,24(s0) + 80005378: 0017879b addiw a5,a5,1 + 8000537c: 03079513 slli a0,a5,0x30 + 80005380: 03055513 srli a0,a0,0x30 + 80005384: 00351793 slli a5,a0,0x3 + 80005388: 00f907b3 add a5,s2,a5 + 8000538c: 0007b783 ld a5,0(a5) + 80005390: 00a41223 sh a0,4(s0) + 80005394: 0004849b sext.w s1,s1 + 80005398: 000780e7 jalr a5 + 8000539c: 00851693 slli a3,a0,0x8 + 800053a0: 0096e7b3 or a5,a3,s1 + 800053a4: 00445703 lhu a4,4(s0) + 800053a8: 00379793 slli a5,a5,0x3 + 800053ac: 00f90933 add s2,s2,a5 + 800053b0: 00093603 ld a2,0(s2) + 800053b4: 0017079b addiw a5,a4,1 + 800053b8: 00a40c23 sb a0,24(s0) + 800053bc: 00f41223 sh a5,4(s0) + 800053c0: 0096e533 or a0,a3,s1 + 800053c4: 000600e7 jalr a2 + 800053c8: 00052717 auipc a4,0x52 + 800053cc: 4a870713 addi a4,a4,1192 # 80057870 <_ZL7ZNTable> + 800053d0: 00a70733 add a4,a4,a0 + 800053d4: 00074683 lbu a3,0(a4) + 800053d8: 00a44703 lbu a4,10(s0) + 800053dc: 00050793 mv a5,a0 + 800053e0: 00445503 lhu a0,4(s0) + 800053e4: 00e6e733 or a4,a3,a4 + 800053e8: 07d77713 andi a4,a4,125 + 800053ec: 00e6e733 or a4,a3,a4 + 800053f0: 00f40c23 sb a5,24(s0) + 800053f4: 00f40323 sb a5,6(s0) + 800053f8: 00f403a3 sb a5,7(s0) + 800053fc: 00e40523 sb a4,10(s0) + 80005400: 01042483 lw s1,16(s0) + 80005404: 00ac8463 beq s9,a0,8000540c <_Z14X6502_RunDebugi+0x45ac> + 80005408: c65fb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000540c: cedfb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80005410: 00351793 slli a5,a0,0x3 + 80005414: 00f907b3 add a5,s2,a5 + 80005418: 0007b783 ld a5,0(a5) + 8000541c: 000780e7 jalr a5 + 80005420: 00445783 lhu a5,4(s0) + 80005424: 00050493 mv s1,a0 + 80005428: 00a40c23 sb a0,24(s0) + 8000542c: 0017879b addiw a5,a5,1 + 80005430: 03079513 slli a0,a5,0x30 + 80005434: 03055513 srli a0,a0,0x30 + 80005438: 00351793 slli a5,a0,0x3 + 8000543c: 00f907b3 add a5,s2,a5 + 80005440: 0007b783 ld a5,0(a5) + 80005444: 00a41223 sh a0,4(s0) + 80005448: 0004849b sext.w s1,s1 + 8000544c: 000780e7 jalr a5 + 80005450: 00851693 slli a3,a0,0x8 + 80005454: 0096e7b3 or a5,a3,s1 + 80005458: 00445703 lhu a4,4(s0) + 8000545c: 00379793 slli a5,a5,0x3 + 80005460: 00f90933 add s2,s2,a5 + 80005464: 00093603 ld a2,0(s2) + 80005468: 0017079b addiw a5,a4,1 + 8000546c: 00a40c23 sb a0,24(s0) + 80005470: 00f41223 sh a5,4(s0) + 80005474: 0096e533 or a0,a3,s1 + 80005478: 000600e7 jalr a2 + 8000547c: 00052697 auipc a3,0x52 + 80005480: 3f468693 addi a3,a3,1012 # 80057870 <_ZL7ZNTable> + 80005484: 00a44783 lbu a5,10(s0) + 80005488: 00a686b3 add a3,a3,a0 + 8000548c: 0006c683 lbu a3,0(a3) + 80005490: 00050713 mv a4,a0 + 80005494: 07d7f793 andi a5,a5,125 + 80005498: 00445503 lhu a0,4(s0) + 8000549c: 00d7e7b3 or a5,a5,a3 + 800054a0: 00e40c23 sb a4,24(s0) + 800054a4: 00e403a3 sb a4,7(s0) + 800054a8: 00f40523 sb a5,10(s0) + 800054ac: 01042483 lw s1,16(s0) + 800054b0: 00ac8463 beq s9,a0,800054b8 <_Z14X6502_RunDebugi+0x4658> + 800054b4: bb9fb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800054b8: c41fb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800054bc: 00351793 slli a5,a0,0x3 + 800054c0: 00f90933 add s2,s2,a5 + 800054c4: 00093783 ld a5,0(s2) + 800054c8: 000780e7 jalr a5 + 800054cc: 02051793 slli a5,a0,0x20 + 800054d0: 0207d793 srli a5,a5,0x20 + 800054d4: 001c4717 auipc a4,0x1c4 + 800054d8: 85470713 addi a4,a4,-1964 # 801c8d28 + 800054dc: 00f70733 add a4,a4,a5 + 800054e0: 00074583 lbu a1,0(a4) + 800054e4: 00644783 lbu a5,6(s0) + 800054e8: 00a44703 lbu a4,10(s0) + 800054ec: 00052517 auipc a0,0x52 + 800054f0: 38450513 addi a0,a0,900 # 80057870 <_ZL7ZNTable> + 800054f4: 00b786bb addw a3,a5,a1 + 800054f8: 00177613 andi a2,a4,1 + 800054fc: 00c686bb addw a3,a3,a2 + 80005500: 0006881b sext.w a6,a3 + 80005504: 0ff87893 andi a7,a6,255 + 80005508: 00b7c633 xor a2,a5,a1 + 8000550c: 01150533 add a0,a0,a7 + 80005510: 00054883 lbu a7,0(a0) + 80005514: fff64613 not a2,a2 + 80005518: 00445503 lhu a0,4(s0) + 8000551c: 00d7c7b3 xor a5,a5,a3 + 80005520: 0ff67613 andi a2,a2,255 + 80005524: 00c7f7b3 and a5,a5,a2 + 80005528: 03c77713 andi a4,a4,60 + 8000552c: 0017d79b srliw a5,a5,0x1 + 80005530: 01176733 or a4,a4,a7 + 80005534: 0086d69b srliw a3,a3,0x8 + 80005538: 0015051b addiw a0,a0,1 + 8000553c: 0407f793 andi a5,a5,64 + 80005540: 00d76733 or a4,a4,a3 + 80005544: 03051513 slli a0,a0,0x30 + 80005548: 03055513 srli a0,a0,0x30 + 8000554c: 00e7e7b3 or a5,a5,a4 + 80005550: 00a41223 sh a0,4(s0) + 80005554: 00b40c23 sb a1,24(s0) + 80005558: 01040323 sb a6,6(s0) + 8000555c: 00f40523 sb a5,10(s0) + 80005560: 01042483 lw s1,16(s0) + 80005564: 00ac8463 beq s9,a0,8000556c <_Z14X6502_RunDebugi+0x470c> + 80005568: b05fb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000556c: b8dfb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80005570: 00351793 slli a5,a0,0x3 + 80005574: 00f907b3 add a5,s2,a5 + 80005578: 0007b783 ld a5,0(a5) + 8000557c: 000780e7 jalr a5 + 80005580: 00744783 lbu a5,7(s0) + 80005584: 001c3697 auipc a3,0x1c3 + 80005588: 7a468693 addi a3,a3,1956 # 801c8d28 + 8000558c: 00445603 lhu a2,4(s0) + 80005590: 00a787bb addw a5,a5,a0 + 80005594: 00178713 addi a4,a5,1 + 80005598: 0ff77713 andi a4,a4,255 + 8000559c: 00e68733 add a4,a3,a4 + 800055a0: 0ff7f793 andi a5,a5,255 + 800055a4: 00074703 lbu a4,0(a4) + 800055a8: 00f687b3 add a5,a3,a5 + 800055ac: 0007c783 lbu a5,0(a5) + 800055b0: 0087149b slliw s1,a4,0x8 + 800055b4: 0016061b addiw a2,a2,1 + 800055b8: 00f4e4b3 or s1,s1,a5 + 800055bc: 03049d13 slli s10,s1,0x30 + 800055c0: 02dd5d13 srli s10,s10,0x2d + 800055c4: 01a90933 add s2,s2,s10 + 800055c8: 00093783 ld a5,0(s2) + 800055cc: 0004849b sext.w s1,s1 + 800055d0: 00c41223 sh a2,4(s0) + 800055d4: 00e40c23 sb a4,24(s0) + 800055d8: 00048513 mv a0,s1 + 800055dc: 00143917 auipc s2,0x143 + 800055e0: 70490913 addi s2,s2,1796 # 80148ce0 + 800055e4: 000780e7 jalr a5 + 800055e8: 01a90933 add s2,s2,s10 + 800055ec: 00093783 ld a5,0(s2) + 800055f0: 00050d13 mv s10,a0 + 800055f4: 00050593 mv a1,a0 + 800055f8: 01a40c23 sb s10,24(s0) + 800055fc: 00048513 mv a0,s1 + 80005600: 000780e7 jalr a5 + 80005604: 00a44783 lbu a5,10(s0) + 80005608: 401d571b sraiw a4,s10,0x1 + 8000560c: 00052517 auipc a0,0x52 + 80005610: 26450513 addi a0,a0,612 # 80057870 <_ZL7ZNTable> + 80005614: 00779613 slli a2,a5,0x7 + 80005618: 00e66633 or a2,a2,a4 + 8000561c: 0ff67693 andi a3,a2,255 + 80005620: 00d50733 add a4,a0,a3 + 80005624: 00074583 lbu a1,0(a4) + 80005628: 07c7f793 andi a5,a5,124 + 8000562c: 00644703 lbu a4,6(s0) + 80005630: 001d7d13 andi s10,s10,1 + 80005634: 01a7e7b3 or a5,a5,s10 + 80005638: 00b7e7b3 or a5,a5,a1 + 8000563c: 0017f593 andi a1,a5,1 + 80005640: 00d706bb addw a3,a4,a3 + 80005644: 00b686bb addw a3,a3,a1 + 80005648: 0006881b sext.w a6,a3 + 8000564c: 0ff67593 andi a1,a2,255 + 80005650: 0ff87613 andi a2,a6,255 + 80005654: 00c50533 add a0,a0,a2 + 80005658: 00b74633 xor a2,a4,a1 + 8000565c: 00054503 lbu a0,0(a0) + 80005660: fff64613 not a2,a2 + 80005664: 0ff67613 andi a2,a2,255 + 80005668: 00d74733 xor a4,a4,a3 + 8000566c: 00c77733 and a4,a4,a2 + 80005670: 03c7f793 andi a5,a5,60 + 80005674: 00a7e7b3 or a5,a5,a0 + 80005678: 0086d69b srliw a3,a3,0x8 + 8000567c: 0017571b srliw a4,a4,0x1 + 80005680: 00d7e7b3 or a5,a5,a3 + 80005684: 04077713 andi a4,a4,64 + 80005688: 00093683 ld a3,0(s2) + 8000568c: 00e7e7b3 or a5,a5,a4 + 80005690: 00048513 mv a0,s1 + 80005694: 01040323 sb a6,6(s0) + 80005698: 00f40523 sb a5,10(s0) + 8000569c: 000680e7 jalr a3 + 800056a0: 00445503 lhu a0,4(s0) + 800056a4: 01042483 lw s1,16(s0) + 800056a8: 00ac8463 beq s9,a0,800056b0 <_Z14X6502_RunDebugi+0x4850> + 800056ac: 9c1fb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800056b0: a49fb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800056b4: 00351793 slli a5,a0,0x3 + 800056b8: 00f907b3 add a5,s2,a5 + 800056bc: 0007b783 ld a5,0(a5) + 800056c0: 000780e7 jalr a5 + 800056c4: 00744783 lbu a5,7(s0) + 800056c8: 001c3697 auipc a3,0x1c3 + 800056cc: 66068693 addi a3,a3,1632 # 801c8d28 + 800056d0: 00445603 lhu a2,4(s0) + 800056d4: 00a787bb addw a5,a5,a0 + 800056d8: 00178713 addi a4,a5,1 + 800056dc: 0ff77713 andi a4,a4,255 + 800056e0: 00e68733 add a4,a3,a4 + 800056e4: 0ff7f793 andi a5,a5,255 + 800056e8: 00074703 lbu a4,0(a4) + 800056ec: 00f687b3 add a5,a3,a5 + 800056f0: 0007c783 lbu a5,0(a5) + 800056f4: 0087151b slliw a0,a4,0x8 + 800056f8: 0016061b addiw a2,a2,1 + 800056fc: 00f56533 or a0,a0,a5 + 80005700: 03051793 slli a5,a0,0x30 + 80005704: 02d7d793 srli a5,a5,0x2d + 80005708: 00f90933 add s2,s2,a5 + 8000570c: 00093783 ld a5,0(s2) + 80005710: 00c41223 sh a2,4(s0) + 80005714: 00e40c23 sb a4,24(s0) + 80005718: 0005051b sext.w a0,a0 + 8000571c: 000780e7 jalr a5 + 80005720: 00644783 lbu a5,6(s0) + 80005724: 00a44703 lbu a4,10(s0) + 80005728: 00050593 mv a1,a0 + 8000572c: 00a786bb addw a3,a5,a0 + 80005730: 00177613 andi a2,a4,1 + 80005734: 00c686bb addw a3,a3,a2 + 80005738: 0006881b sext.w a6,a3 + 8000573c: 00a7c633 xor a2,a5,a0 + 80005740: 0ff87893 andi a7,a6,255 + 80005744: 00052517 auipc a0,0x52 + 80005748: 12c50513 addi a0,a0,300 # 80057870 <_ZL7ZNTable> + 8000574c: 01150533 add a0,a0,a7 + 80005750: 00054503 lbu a0,0(a0) + 80005754: fff64613 not a2,a2 + 80005758: 00d7c7b3 xor a5,a5,a3 + 8000575c: 0ff67613 andi a2,a2,255 + 80005760: 00c7f7b3 and a5,a5,a2 + 80005764: 03c77713 andi a4,a4,60 + 80005768: 00a76733 or a4,a4,a0 + 8000576c: 0017d79b srliw a5,a5,0x1 + 80005770: 0086d69b srliw a3,a3,0x8 + 80005774: 0407f793 andi a5,a5,64 + 80005778: 00d76733 or a4,a4,a3 + 8000577c: 00445503 lhu a0,4(s0) + 80005780: 00e7e7b3 or a5,a5,a4 + 80005784: 00b40c23 sb a1,24(s0) + 80005788: 01040323 sb a6,6(s0) + 8000578c: 00f40523 sb a5,10(s0) + 80005790: 01042483 lw s1,16(s0) + 80005794: 00ac8463 beq s9,a0,8000579c <_Z14X6502_RunDebugi+0x493c> + 80005798: 8d5fb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000579c: 95dfb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800057a0: 00944783 lbu a5,9(s0) + 800057a4: 001c3697 auipc a3,0x1c3 + 800057a8: 58468693 addi a3,a3,1412 # 801c8d28 + 800057ac: 01042483 lw s1,16(s0) + 800057b0: 0027871b addiw a4,a5,2 + 800057b4: 0ff77713 andi a4,a4,255 + 800057b8: 0017879b addiw a5,a5,1 + 800057bc: 0ff7f793 andi a5,a5,255 + 800057c0: 00e68633 add a2,a3,a4 + 800057c4: 10064603 lbu a2,256(a2) + 800057c8: 00f687b3 add a5,a3,a5 + 800057cc: 1007c503 lbu a0,256(a5) + 800057d0: 00861793 slli a5,a2,0x8 + 800057d4: 00e404a3 sb a4,9(s0) + 800057d8: 00f56533 or a0,a0,a5 + 800057dc: 0015051b addiw a0,a0,1 + 800057e0: 03051513 slli a0,a0,0x30 + 800057e4: 03055513 srli a0,a0,0x30 + 800057e8: 00c40c23 sb a2,24(s0) + 800057ec: 00a41223 sh a0,4(s0) + 800057f0: 00ac8463 beq s9,a0,800057f8 <_Z14X6502_RunDebugi+0x4998> + 800057f4: 879fb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800057f8: 901fb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800057fc: 00351793 slli a5,a0,0x3 + 80005800: 00f907b3 add a5,s2,a5 + 80005804: 0007b783 ld a5,0(a5) + 80005808: 000780e7 jalr a5 + 8000580c: 00445783 lhu a5,4(s0) + 80005810: 00050713 mv a4,a0 + 80005814: 00a40c23 sb a0,24(s0) + 80005818: 0017879b addiw a5,a5,1 + 8000581c: 03079513 slli a0,a5,0x30 + 80005820: 03055513 srli a0,a0,0x30 + 80005824: 00351793 slli a5,a0,0x3 + 80005828: 00f907b3 add a5,s2,a5 + 8000582c: 0007b783 ld a5,0(a5) + 80005830: 00a41223 sh a0,4(s0) + 80005834: 0007049b sext.w s1,a4 + 80005838: 000780e7 jalr a5 + 8000583c: 00744d03 lbu s10,7(s0) + 80005840: 00851793 slli a5,a0,0x8 + 80005844: 0097e7b3 or a5,a5,s1 + 80005848: 00fd0d3b addw s10,s10,a5 + 8000584c: 0ffd7613 andi a2,s10,255 + 80005850: 0187f7b3 and a5,a5,s8 + 80005854: 00f66733 or a4,a2,a5 + 80005858: 00445683 lhu a3,4(s0) + 8000585c: 00371713 slli a4,a4,0x3 + 80005860: 00e90733 add a4,s2,a4 + 80005864: 00073583 ld a1,0(a4) + 80005868: 030d1d13 slli s10,s10,0x30 + 8000586c: 0016871b addiw a4,a3,1 + 80005870: 030d5d13 srli s10,s10,0x30 + 80005874: 00e41223 sh a4,4(s0) + 80005878: 003d1493 slli s1,s10,0x3 + 8000587c: 00a40c23 sb a0,24(s0) + 80005880: 00f66533 or a0,a2,a5 + 80005884: 000580e7 jalr a1 + 80005888: 00990933 add s2,s2,s1 + 8000588c: 00093783 ld a5,0(s2) + 80005890: 00a40c23 sb a0,24(s0) + 80005894: 00143917 auipc s2,0x143 + 80005898: 44c90913 addi s2,s2,1100 # 80148ce0 + 8000589c: 000d0513 mv a0,s10 + 800058a0: 000780e7 jalr a5 + 800058a4: 00990933 add s2,s2,s1 + 800058a8: 00093783 ld a5,0(s2) + 800058ac: 00050493 mv s1,a0 + 800058b0: 00050593 mv a1,a0 + 800058b4: 00940c23 sb s1,24(s0) + 800058b8: 000d0513 mv a0,s10 + 800058bc: 000780e7 jalr a5 + 800058c0: 00644703 lbu a4,6(s0) + 800058c4: 00a44783 lbu a5,10(s0) + 800058c8: 0014d613 srli a2,s1,0x1 + 800058cc: 00052697 auipc a3,0x52 + 800058d0: fa468693 addi a3,a3,-92 # 80057870 <_ZL7ZNTable> + 800058d4: 00060593 mv a1,a2 + 800058d8: 00c68633 add a2,a3,a2 + 800058dc: 00064503 lbu a0,0(a2) + 800058e0: 00e5c733 xor a4,a1,a4 + 800058e4: 00e686b3 add a3,a3,a4 + 800058e8: 0014f493 andi s1,s1,1 + 800058ec: 07c7f793 andi a5,a5,124 + 800058f0: 0006c603 lbu a2,0(a3) + 800058f4: 0097e7b3 or a5,a5,s1 + 800058f8: 00a7e7b3 or a5,a5,a0 + 800058fc: 00093683 ld a3,0(s2) + 80005900: 07d7f793 andi a5,a5,125 + 80005904: 00c7e7b3 or a5,a5,a2 + 80005908: 000d0513 mv a0,s10 + 8000590c: 00e40323 sb a4,6(s0) + 80005910: 00f40523 sb a5,10(s0) + 80005914: 000680e7 jalr a3 + 80005918: 00445503 lhu a0,4(s0) + 8000591c: 01042483 lw s1,16(s0) + 80005920: 00ac8463 beq s9,a0,80005928 <_Z14X6502_RunDebugi+0x4ac8> + 80005924: f48fb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80005928: fd0fb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000592c: 00351793 slli a5,a0,0x3 + 80005930: 00f907b3 add a5,s2,a5 + 80005934: 0007b783 ld a5,0(a5) + 80005938: 000780e7 jalr a5 + 8000593c: 00445783 lhu a5,4(s0) + 80005940: 00050713 mv a4,a0 + 80005944: 00a40c23 sb a0,24(s0) + 80005948: 0017879b addiw a5,a5,1 + 8000594c: 03079513 slli a0,a5,0x30 + 80005950: 03055513 srli a0,a0,0x30 + 80005954: 00351793 slli a5,a0,0x3 + 80005958: 00f907b3 add a5,s2,a5 + 8000595c: 0007b783 ld a5,0(a5) + 80005960: 00a41223 sh a0,4(s0) + 80005964: 0007049b sext.w s1,a4 + 80005968: 000780e7 jalr a5 + 8000596c: 00744683 lbu a3,7(s0) + 80005970: 00851793 slli a5,a0,0x8 + 80005974: 0097e7b3 or a5,a5,s1 + 80005978: 00f686bb addw a3,a3,a5 + 8000597c: 0ff6f593 andi a1,a3,255 + 80005980: 0187f7b3 and a5,a5,s8 + 80005984: 00f5e733 or a4,a1,a5 + 80005988: 00445603 lhu a2,4(s0) + 8000598c: 00371713 slli a4,a4,0x3 + 80005990: 00e90733 add a4,s2,a4 + 80005994: 00073803 ld a6,0(a4) + 80005998: 03069d13 slli s10,a3,0x30 + 8000599c: 0016071b addiw a4,a2,1 + 800059a0: 030d5d13 srli s10,s10,0x30 + 800059a4: 00e41223 sh a4,4(s0) + 800059a8: 003d1493 slli s1,s10,0x3 + 800059ac: 00a40c23 sb a0,24(s0) + 800059b0: 00f5e533 or a0,a1,a5 + 800059b4: 000800e7 jalr a6 + 800059b8: 00990933 add s2,s2,s1 + 800059bc: 00093783 ld a5,0(s2) + 800059c0: 00a40c23 sb a0,24(s0) + 800059c4: 00143917 auipc s2,0x143 + 800059c8: 31c90913 addi s2,s2,796 # 80148ce0 + 800059cc: 000d0513 mv a0,s10 + 800059d0: 000780e7 jalr a5 + 800059d4: 00990933 add s2,s2,s1 + 800059d8: 00093783 ld a5,0(s2) + 800059dc: 00050493 mv s1,a0 + 800059e0: 00050593 mv a1,a0 + 800059e4: 00940c23 sb s1,24(s0) + 800059e8: 000d0513 mv a0,s10 + 800059ec: 000780e7 jalr a5 + 800059f0: 00a44783 lbu a5,10(s0) + 800059f4: 0014d593 srli a1,s1,0x1 + 800059f8: 00052717 auipc a4,0x52 + 800059fc: e7870713 addi a4,a4,-392 # 80057870 <_ZL7ZNTable> + 80005a00: 00b70733 add a4,a4,a1 + 80005a04: 00074683 lbu a3,0(a4) + 80005a08: 0014f493 andi s1,s1,1 + 80005a0c: 07c7f793 andi a5,a5,124 + 80005a10: 0097e7b3 or a5,a5,s1 + 80005a14: 00093703 ld a4,0(s2) + 80005a18: 00d7e7b3 or a5,a5,a3 + 80005a1c: 000d0513 mv a0,s10 + 80005a20: 00f40523 sb a5,10(s0) + 80005a24: 000700e7 jalr a4 + 80005a28: 00445503 lhu a0,4(s0) + 80005a2c: 01042483 lw s1,16(s0) + 80005a30: 00ac8463 beq s9,a0,80005a38 <_Z14X6502_RunDebugi+0x4bd8> + 80005a34: e38fb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80005a38: ec0fb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80005a3c: 00351793 slli a5,a0,0x3 + 80005a40: 00f907b3 add a5,s2,a5 + 80005a44: 0007b783 ld a5,0(a5) + 80005a48: 000780e7 jalr a5 + 80005a4c: 00445783 lhu a5,4(s0) + 80005a50: 00050713 mv a4,a0 + 80005a54: 00a40c23 sb a0,24(s0) + 80005a58: 0017879b addiw a5,a5,1 + 80005a5c: 03079513 slli a0,a5,0x30 + 80005a60: 03055513 srli a0,a0,0x30 + 80005a64: 00351793 slli a5,a0,0x3 + 80005a68: 00f907b3 add a5,s2,a5 + 80005a6c: 0007b783 ld a5,0(a5) + 80005a70: 00a41223 sh a0,4(s0) + 80005a74: 0007049b sext.w s1,a4 + 80005a78: 000780e7 jalr a5 + 80005a7c: 00744703 lbu a4,7(s0) + 80005a80: 00445683 lhu a3,4(s0) + 80005a84: 00851793 slli a5,a0,0x8 + 80005a88: 0097e7b3 or a5,a5,s1 + 80005a8c: 00f7073b addw a4,a4,a5 + 80005a90: 0016869b addiw a3,a3,1 + 80005a94: 00e7c7b3 xor a5,a5,a4 + 80005a98: 00a40c23 sb a0,24(s0) + 80005a9c: 00d41223 sh a3,4(s0) + 80005aa0: 1007f793 andi a5,a5,256 + 80005aa4: 0007049b sext.w s1,a4 + 80005aa8: 06078463 beqz a5,80005b10 <_Z14X6502_RunDebugi+0x4cb0> + 80005aac: 03071493 slli s1,a4,0x30 + 80005ab0: 0304d493 srli s1,s1,0x30 + 80005ab4: 1004c793 xori a5,s1,256 + 80005ab8: 00379793 slli a5,a5,0x3 + 80005abc: 00f907b3 add a5,s2,a5 + 80005ac0: 0007b783 ld a5,0(a5) + 80005ac4: 1004c513 xori a0,s1,256 + 80005ac8: 000780e7 jalr a5 + 80005acc: 00042683 lw a3,0(s0) + 80005ad0: 01042703 lw a4,16(s0) + 80005ad4: 0009a783 lw a5,0(s3) + 80005ad8: 000a4603 lbu a2,0(s4) + 80005adc: 0016869b addiw a3,a3,1 + 80005ae0: fd07071b addiw a4,a4,-48 + 80005ae4: 0017879b addiw a5,a5,1 + 80005ae8: 00a40c23 sb a0,24(s0) + 80005aec: 00d42023 sw a3,0(s0) + 80005af0: 00e42823 sw a4,16(s0) + 80005af4: 00f9a023 sw a5,0(s3) + 80005af8: 00061c63 bnez a2,80005b10 <_Z14X6502_RunDebugi+0x4cb0> + 80005afc: 001c6717 auipc a4,0x1c6 + 80005b00: 04c70713 addi a4,a4,76 # 801cbb48 + 80005b04: 00072783 lw a5,0(a4) + 80005b08: 0017879b addiw a5,a5,1 + 80005b0c: 00f72023 sw a5,0(a4) + 80005b10: 02049793 slli a5,s1,0x20 + 80005b14: 01d7d793 srli a5,a5,0x1d + 80005b18: 00f90933 add s2,s2,a5 + 80005b1c: 00093783 ld a5,0(s2) + 80005b20: 00048513 mv a0,s1 + 80005b24: 000780e7 jalr a5 + 80005b28: 00644703 lbu a4,6(s0) + 80005b2c: 00052617 auipc a2,0x52 + 80005b30: d4460613 addi a2,a2,-700 # 80057870 <_ZL7ZNTable> + 80005b34: 00a44783 lbu a5,10(s0) + 80005b38: 00e54733 xor a4,a0,a4 + 80005b3c: 00e60633 add a2,a2,a4 + 80005b40: 00064603 lbu a2,0(a2) + 80005b44: 00050693 mv a3,a0 + 80005b48: 07d7f793 andi a5,a5,125 + 80005b4c: 00445503 lhu a0,4(s0) + 80005b50: 00c7e7b3 or a5,a5,a2 + 80005b54: 00d40c23 sb a3,24(s0) + 80005b58: 00e40323 sb a4,6(s0) + 80005b5c: 00f40523 sb a5,10(s0) + 80005b60: 01042483 lw s1,16(s0) + 80005b64: 00ac8463 beq s9,a0,80005b6c <_Z14X6502_RunDebugi+0x4d0c> + 80005b68: d04fb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80005b6c: d8cfb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80005b70: 00351793 slli a5,a0,0x3 + 80005b74: 00f907b3 add a5,s2,a5 + 80005b78: 0007b783 ld a5,0(a5) + 80005b7c: 000780e7 jalr a5 + 80005b80: 00445783 lhu a5,4(s0) + 80005b84: 00050713 mv a4,a0 + 80005b88: 00a40c23 sb a0,24(s0) + 80005b8c: 0017879b addiw a5,a5,1 + 80005b90: 03079513 slli a0,a5,0x30 + 80005b94: 03055513 srli a0,a0,0x30 + 80005b98: 00351793 slli a5,a0,0x3 + 80005b9c: 00f907b3 add a5,s2,a5 + 80005ba0: 0007b783 ld a5,0(a5) + 80005ba4: 00a41223 sh a0,4(s0) + 80005ba8: 0007049b sext.w s1,a4 + 80005bac: 000780e7 jalr a5 + 80005bb0: 00844d03 lbu s10,8(s0) + 80005bb4: 00851793 slli a5,a0,0x8 + 80005bb8: 0097e7b3 or a5,a5,s1 + 80005bbc: 00fd0d3b addw s10,s10,a5 + 80005bc0: 0ffd7613 andi a2,s10,255 + 80005bc4: 0187f7b3 and a5,a5,s8 + 80005bc8: 00f66733 or a4,a2,a5 + 80005bcc: 00445683 lhu a3,4(s0) + 80005bd0: 00371713 slli a4,a4,0x3 + 80005bd4: 00e90733 add a4,s2,a4 + 80005bd8: 00073583 ld a1,0(a4) + 80005bdc: 030d1d13 slli s10,s10,0x30 + 80005be0: 0016871b addiw a4,a3,1 + 80005be4: 030d5d13 srli s10,s10,0x30 + 80005be8: 00e41223 sh a4,4(s0) + 80005bec: 003d1493 slli s1,s10,0x3 + 80005bf0: 00a40c23 sb a0,24(s0) + 80005bf4: 00f66533 or a0,a2,a5 + 80005bf8: 000580e7 jalr a1 + 80005bfc: 00990933 add s2,s2,s1 + 80005c00: 00093783 ld a5,0(s2) + 80005c04: 00a40c23 sb a0,24(s0) + 80005c08: 00143917 auipc s2,0x143 + 80005c0c: 0d890913 addi s2,s2,216 # 80148ce0 + 80005c10: 000d0513 mv a0,s10 + 80005c14: 000780e7 jalr a5 + 80005c18: 00990933 add s2,s2,s1 + 80005c1c: 00093783 ld a5,0(s2) + 80005c20: 00050493 mv s1,a0 + 80005c24: 00050593 mv a1,a0 + 80005c28: 00940c23 sb s1,24(s0) + 80005c2c: 000d0513 mv a0,s10 + 80005c30: 000780e7 jalr a5 + 80005c34: 00644703 lbu a4,6(s0) + 80005c38: 00a44783 lbu a5,10(s0) + 80005c3c: 0014d613 srli a2,s1,0x1 + 80005c40: 00052697 auipc a3,0x52 + 80005c44: c3068693 addi a3,a3,-976 # 80057870 <_ZL7ZNTable> + 80005c48: 00060593 mv a1,a2 + 80005c4c: 00c68633 add a2,a3,a2 + 80005c50: 00064503 lbu a0,0(a2) + 80005c54: 00e5c733 xor a4,a1,a4 + 80005c58: 00e686b3 add a3,a3,a4 + 80005c5c: 0014f493 andi s1,s1,1 + 80005c60: 07c7f793 andi a5,a5,124 + 80005c64: 0006c603 lbu a2,0(a3) + 80005c68: 0097e7b3 or a5,a5,s1 + 80005c6c: 00a7e7b3 or a5,a5,a0 + 80005c70: 00093683 ld a3,0(s2) + 80005c74: 07d7f793 andi a5,a5,125 + 80005c78: 00c7e7b3 or a5,a5,a2 + 80005c7c: 000d0513 mv a0,s10 + 80005c80: 00e40323 sb a4,6(s0) + 80005c84: 00f40523 sb a5,10(s0) + 80005c88: 000680e7 jalr a3 + 80005c8c: 00445503 lhu a0,4(s0) + 80005c90: 01042483 lw s1,16(s0) + 80005c94: 00ac8463 beq s9,a0,80005c9c <_Z14X6502_RunDebugi+0x4e3c> + 80005c98: bd4fb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80005c9c: c5cfb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80005ca0: 00351793 slli a5,a0,0x3 + 80005ca4: 00f90933 add s2,s2,a5 + 80005ca8: 00093783 ld a5,0(s2) + 80005cac: 00744483 lbu s1,7(s0) + 80005cb0: 000780e7 jalr a5 + 80005cb4: 00a487bb addw a5,s1,a0 + 80005cb8: 0ff7f793 andi a5,a5,255 + 80005cbc: 001c3597 auipc a1,0x1c3 + 80005cc0: 06c58593 addi a1,a1,108 # 801c8d28 + 80005cc4: 00f585b3 add a1,a1,a5 + 80005cc8: 0005c803 lbu a6,0(a1) + 80005ccc: 00a44783 lbu a5,10(s0) + 80005cd0: 00052517 auipc a0,0x52 + 80005cd4: ba050513 addi a0,a0,-1120 # 80057870 <_ZL7ZNTable> + 80005cd8: 4018571b sraiw a4,a6,0x1 + 80005cdc: 00779893 slli a7,a5,0x7 + 80005ce0: 00e8e8b3 or a7,a7,a4 + 80005ce4: 0ff8f693 andi a3,a7,255 + 80005ce8: 00d50733 add a4,a0,a3 + 80005cec: 00074603 lbu a2,0(a4) + 80005cf0: 00187313 andi t1,a6,1 + 80005cf4: 00644703 lbu a4,6(s0) + 80005cf8: 07c7f793 andi a5,a5,124 + 80005cfc: 0067e7b3 or a5,a5,t1 + 80005d00: 00c7e7b3 or a5,a5,a2 + 80005d04: 00d706bb addw a3,a4,a3 + 80005d08: 0017fe13 andi t3,a5,1 + 80005d0c: 01c68e3b addw t3,a3,t3 + 80005d10: 000e031b sext.w t1,t3 + 80005d14: 0ff8f893 andi a7,a7,255 + 80005d18: 0ff37693 andi a3,t1,255 + 80005d1c: 00d50533 add a0,a0,a3 + 80005d20: 01174633 xor a2,a4,a7 + 80005d24: 00054e83 lbu t4,0(a0) + 80005d28: fff64613 not a2,a2 + 80005d2c: 00445503 lhu a0,4(s0) + 80005d30: 0ff67613 andi a2,a2,255 + 80005d34: 01c74733 xor a4,a4,t3 + 80005d38: 03c7f693 andi a3,a5,60 + 80005d3c: 00c77733 and a4,a4,a2 + 80005d40: 0017579b srliw a5,a4,0x1 + 80005d44: 0015051b addiw a0,a0,1 + 80005d48: 01d6e733 or a4,a3,t4 + 80005d4c: 008e569b srliw a3,t3,0x8 + 80005d50: 0407f793 andi a5,a5,64 + 80005d54: 00d76733 or a4,a4,a3 + 80005d58: 03051513 slli a0,a0,0x30 + 80005d5c: 03055513 srli a0,a0,0x30 + 80005d60: 00e7e7b3 or a5,a5,a4 + 80005d64: 00a41223 sh a0,4(s0) + 80005d68: 01040c23 sb a6,24(s0) + 80005d6c: 00640323 sb t1,6(s0) + 80005d70: 00f40523 sb a5,10(s0) + 80005d74: 01158023 sb a7,0(a1) + 80005d78: 01042483 lw s1,16(s0) + 80005d7c: 00ac8463 beq s9,a0,80005d84 <_Z14X6502_RunDebugi+0x4f24> + 80005d80: aecfb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80005d84: b74fb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80005d88: 00351793 slli a5,a0,0x3 + 80005d8c: 00f90933 add s2,s2,a5 + 80005d90: 00093783 ld a5,0(s2) + 80005d94: 00744483 lbu s1,7(s0) + 80005d98: 000780e7 jalr a5 + 80005d9c: 00a487bb addw a5,s1,a0 + 80005da0: 0ff7f793 andi a5,a5,255 + 80005da4: 001c3717 auipc a4,0x1c3 + 80005da8: f8470713 addi a4,a4,-124 # 801c8d28 + 80005dac: 00f70733 add a4,a4,a5 + 80005db0: 00074603 lbu a2,0(a4) + 80005db4: 00a44783 lbu a5,10(s0) + 80005db8: 00445503 lhu a0,4(s0) + 80005dbc: 4016559b sraiw a1,a2,0x1 + 80005dc0: 00779693 slli a3,a5,0x7 + 80005dc4: 00b6e6b3 or a3,a3,a1 + 80005dc8: 0ff6f813 andi a6,a3,255 + 80005dcc: 00052597 auipc a1,0x52 + 80005dd0: aa458593 addi a1,a1,-1372 # 80057870 <_ZL7ZNTable> + 80005dd4: 010585b3 add a1,a1,a6 + 80005dd8: 0005c583 lbu a1,0(a1) + 80005ddc: 07c7f793 andi a5,a5,124 + 80005de0: 00167813 andi a6,a2,1 + 80005de4: 0015051b addiw a0,a0,1 + 80005de8: 0107e7b3 or a5,a5,a6 + 80005dec: 03051513 slli a0,a0,0x30 + 80005df0: 03055513 srli a0,a0,0x30 + 80005df4: 00b7e7b3 or a5,a5,a1 + 80005df8: 00a41223 sh a0,4(s0) + 80005dfc: 00c40c23 sb a2,24(s0) + 80005e00: 00f40523 sb a5,10(s0) + 80005e04: 00d70023 sb a3,0(a4) + 80005e08: 01042483 lw s1,16(s0) + 80005e0c: 00ac8463 beq s9,a0,80005e14 <_Z14X6502_RunDebugi+0x4fb4> + 80005e10: a5cfb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80005e14: ae4fb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80005e18: 00351793 slli a5,a0,0x3 + 80005e1c: 00f90933 add s2,s2,a5 + 80005e20: 00093783 ld a5,0(s2) + 80005e24: 00744483 lbu s1,7(s0) + 80005e28: 000780e7 jalr a5 + 80005e2c: 00a487bb addw a5,s1,a0 + 80005e30: 0ff7f793 andi a5,a5,255 + 80005e34: 001c3717 auipc a4,0x1c3 + 80005e38: ef470713 addi a4,a4,-268 # 801c8d28 + 80005e3c: 00f70733 add a4,a4,a5 + 80005e40: 00074583 lbu a1,0(a4) + 80005e44: 00644783 lbu a5,6(s0) + 80005e48: 00a44703 lbu a4,10(s0) + 80005e4c: 00052517 auipc a0,0x52 + 80005e50: a2450513 addi a0,a0,-1500 # 80057870 <_ZL7ZNTable> + 80005e54: 00b786bb addw a3,a5,a1 + 80005e58: 00177613 andi a2,a4,1 + 80005e5c: 00c686bb addw a3,a3,a2 + 80005e60: 0006881b sext.w a6,a3 + 80005e64: 0ff87893 andi a7,a6,255 + 80005e68: 00b7c633 xor a2,a5,a1 + 80005e6c: 01150533 add a0,a0,a7 + 80005e70: 00054883 lbu a7,0(a0) + 80005e74: fff64613 not a2,a2 + 80005e78: 00445503 lhu a0,4(s0) + 80005e7c: 00d7c7b3 xor a5,a5,a3 + 80005e80: 0ff67613 andi a2,a2,255 + 80005e84: 00c7f7b3 and a5,a5,a2 + 80005e88: 03c77713 andi a4,a4,60 + 80005e8c: 0017d79b srliw a5,a5,0x1 + 80005e90: 01176733 or a4,a4,a7 + 80005e94: 0086d69b srliw a3,a3,0x8 + 80005e98: 0015051b addiw a0,a0,1 + 80005e9c: 0407f793 andi a5,a5,64 + 80005ea0: 00d76733 or a4,a4,a3 + 80005ea4: 03051513 slli a0,a0,0x30 + 80005ea8: 03055513 srli a0,a0,0x30 + 80005eac: 00e7e7b3 or a5,a5,a4 + 80005eb0: 00a41223 sh a0,4(s0) + 80005eb4: 00b40c23 sb a1,24(s0) + 80005eb8: 01040323 sb a6,6(s0) + 80005ebc: 00f40523 sb a5,10(s0) + 80005ec0: 01042483 lw s1,16(s0) + 80005ec4: 00ac8463 beq s9,a0,80005ecc <_Z14X6502_RunDebugi+0x506c> + 80005ec8: 9a4fb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80005ecc: a2cfb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80005ed0: 00351793 slli a5,a0,0x3 + 80005ed4: 00f907b3 add a5,s2,a5 + 80005ed8: 0007b783 ld a5,0(a5) + 80005edc: 000780e7 jalr a5 + 80005ee0: 0015079b addiw a5,a0,1 + 80005ee4: 001c3717 auipc a4,0x1c3 + 80005ee8: e4470713 addi a4,a4,-444 # 801c8d28 + 80005eec: 0ff7f793 andi a5,a5,255 + 80005ef0: 02051513 slli a0,a0,0x20 + 80005ef4: 00f707b3 add a5,a4,a5 + 80005ef8: 02055513 srli a0,a0,0x20 + 80005efc: 0007c603 lbu a2,0(a5) + 80005f00: 00a70533 add a0,a4,a0 + 80005f04: 00054703 lbu a4,0(a0) + 80005f08: 00844483 lbu s1,8(s0) + 80005f0c: 0086179b slliw a5,a2,0x8 + 80005f10: 00e7e7b3 or a5,a5,a4 + 80005f14: 00f484bb addw s1,s1,a5 + 80005f18: 0007879b sext.w a5,a5 + 80005f1c: 0187f7b3 and a5,a5,s8 + 80005f20: 0ff4f513 andi a0,s1,255 + 80005f24: 00f56733 or a4,a0,a5 + 80005f28: 00445683 lhu a3,4(s0) + 80005f2c: 00371713 slli a4,a4,0x3 + 80005f30: 00e90733 add a4,s2,a4 + 80005f34: 00073583 ld a1,0(a4) + 80005f38: 03049493 slli s1,s1,0x30 + 80005f3c: 0016871b addiw a4,a3,1 + 80005f40: 0304d493 srli s1,s1,0x30 + 80005f44: 00349d13 slli s10,s1,0x3 + 80005f48: 00e41223 sh a4,4(s0) + 80005f4c: 00c40c23 sb a2,24(s0) + 80005f50: 00f56533 or a0,a0,a5 + 80005f54: 000580e7 jalr a1 + 80005f58: 01a90933 add s2,s2,s10 + 80005f5c: 00093783 ld a5,0(s2) + 80005f60: 00a40c23 sb a0,24(s0) + 80005f64: 00143917 auipc s2,0x143 + 80005f68: d7c90913 addi s2,s2,-644 # 80148ce0 + 80005f6c: 00048513 mv a0,s1 + 80005f70: 000780e7 jalr a5 + 80005f74: 01a90933 add s2,s2,s10 + 80005f78: 00093783 ld a5,0(s2) + 80005f7c: 00050d13 mv s10,a0 + 80005f80: 00050593 mv a1,a0 + 80005f84: 01a40c23 sb s10,24(s0) + 80005f88: 00048513 mv a0,s1 + 80005f8c: 000780e7 jalr a5 + 80005f90: 00a44783 lbu a5,10(s0) + 80005f94: 401d571b sraiw a4,s10,0x1 + 80005f98: 00052517 auipc a0,0x52 + 80005f9c: 8d850513 addi a0,a0,-1832 # 80057870 <_ZL7ZNTable> + 80005fa0: 00779613 slli a2,a5,0x7 + 80005fa4: 00e66633 or a2,a2,a4 + 80005fa8: 0ff67693 andi a3,a2,255 + 80005fac: 00d50733 add a4,a0,a3 + 80005fb0: 00074583 lbu a1,0(a4) + 80005fb4: 07c7f793 andi a5,a5,124 + 80005fb8: 00644703 lbu a4,6(s0) + 80005fbc: 001d7d13 andi s10,s10,1 + 80005fc0: 01a7e7b3 or a5,a5,s10 + 80005fc4: 00b7e7b3 or a5,a5,a1 + 80005fc8: 0017f593 andi a1,a5,1 + 80005fcc: 00d706bb addw a3,a4,a3 + 80005fd0: 00b686bb addw a3,a3,a1 + 80005fd4: 0006881b sext.w a6,a3 + 80005fd8: 0ff67593 andi a1,a2,255 + 80005fdc: 0ff87613 andi a2,a6,255 + 80005fe0: 00c50533 add a0,a0,a2 + 80005fe4: 00b74633 xor a2,a4,a1 + 80005fe8: 00054503 lbu a0,0(a0) + 80005fec: fff64613 not a2,a2 + 80005ff0: 0ff67613 andi a2,a2,255 + 80005ff4: 00d74733 xor a4,a4,a3 + 80005ff8: 00c77733 and a4,a4,a2 + 80005ffc: 03c7f793 andi a5,a5,60 + 80006000: 00a7e7b3 or a5,a5,a0 + 80006004: 0086d69b srliw a3,a3,0x8 + 80006008: 0017571b srliw a4,a4,0x1 + 8000600c: 00d7e7b3 or a5,a5,a3 + 80006010: 04077713 andi a4,a4,64 + 80006014: 00093683 ld a3,0(s2) + 80006018: 00e7e7b3 or a5,a5,a4 + 8000601c: 00048513 mv a0,s1 + 80006020: 01040323 sb a6,6(s0) + 80006024: 00f40523 sb a5,10(s0) + 80006028: 000680e7 jalr a3 + 8000602c: 00445503 lhu a0,4(s0) + 80006030: 01042483 lw s1,16(s0) + 80006034: 00ac8463 beq s9,a0,8000603c <_Z14X6502_RunDebugi+0x51dc> + 80006038: 834fb06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000603c: 8bcfb06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006040: 00351793 slli a5,a0,0x3 + 80006044: 00f907b3 add a5,s2,a5 + 80006048: 0007b783 ld a5,0(a5) + 8000604c: 000780e7 jalr a5 + 80006050: 0015079b addiw a5,a0,1 + 80006054: 001c3717 auipc a4,0x1c3 + 80006058: cd470713 addi a4,a4,-812 # 801c8d28 + 8000605c: 0ff7f793 andi a5,a5,255 + 80006060: 02051513 slli a0,a0,0x20 + 80006064: 00f707b3 add a5,a4,a5 + 80006068: 02055513 srli a0,a0,0x20 + 8000606c: 0007c603 lbu a2,0(a5) + 80006070: 00a70533 add a0,a4,a0 + 80006074: 00054583 lbu a1,0(a0) + 80006078: 00844703 lbu a4,8(s0) + 8000607c: 00445683 lhu a3,4(s0) + 80006080: 0086179b slliw a5,a2,0x8 + 80006084: 00b7e7b3 or a5,a5,a1 + 80006088: 00f7073b addw a4,a4,a5 + 8000608c: 0016869b addiw a3,a3,1 + 80006090: 00e7c7b3 xor a5,a5,a4 + 80006094: 00d41223 sh a3,4(s0) + 80006098: 00c40c23 sb a2,24(s0) + 8000609c: 1007f793 andi a5,a5,256 + 800060a0: 0007049b sext.w s1,a4 + 800060a4: 06078463 beqz a5,8000610c <_Z14X6502_RunDebugi+0x52ac> + 800060a8: 03071493 slli s1,a4,0x30 + 800060ac: 0304d493 srli s1,s1,0x30 + 800060b0: 1004c793 xori a5,s1,256 + 800060b4: 00379793 slli a5,a5,0x3 + 800060b8: 00f907b3 add a5,s2,a5 + 800060bc: 0007b783 ld a5,0(a5) + 800060c0: 1004c513 xori a0,s1,256 + 800060c4: 000780e7 jalr a5 + 800060c8: 00042683 lw a3,0(s0) + 800060cc: 01042703 lw a4,16(s0) + 800060d0: 0009a783 lw a5,0(s3) + 800060d4: 000a4603 lbu a2,0(s4) + 800060d8: 0016869b addiw a3,a3,1 + 800060dc: fd07071b addiw a4,a4,-48 + 800060e0: 0017879b addiw a5,a5,1 + 800060e4: 00a40c23 sb a0,24(s0) + 800060e8: 00d42023 sw a3,0(s0) + 800060ec: 00e42823 sw a4,16(s0) + 800060f0: 00f9a023 sw a5,0(s3) + 800060f4: 00061c63 bnez a2,8000610c <_Z14X6502_RunDebugi+0x52ac> + 800060f8: 001c6717 auipc a4,0x1c6 + 800060fc: a5070713 addi a4,a4,-1456 # 801cbb48 + 80006100: 00072783 lw a5,0(a4) + 80006104: 0017879b addiw a5,a5,1 + 80006108: 00f72023 sw a5,0(a4) + 8000610c: 00349793 slli a5,s1,0x3 + 80006110: 00f90933 add s2,s2,a5 + 80006114: 00093783 ld a5,0(s2) + 80006118: 00048513 mv a0,s1 + 8000611c: 000780e7 jalr a5 + 80006120: 00644783 lbu a5,6(s0) + 80006124: 00a44703 lbu a4,10(s0) + 80006128: 00050593 mv a1,a0 + 8000612c: 00a786bb addw a3,a5,a0 + 80006130: 00177613 andi a2,a4,1 + 80006134: 00c686bb addw a3,a3,a2 + 80006138: 0006881b sext.w a6,a3 + 8000613c: 00a7c633 xor a2,a5,a0 + 80006140: 0ff87893 andi a7,a6,255 + 80006144: 00051517 auipc a0,0x51 + 80006148: 72c50513 addi a0,a0,1836 # 80057870 <_ZL7ZNTable> + 8000614c: 01150533 add a0,a0,a7 + 80006150: 00054503 lbu a0,0(a0) + 80006154: fff64613 not a2,a2 + 80006158: 00d7c7b3 xor a5,a5,a3 + 8000615c: 0ff67613 andi a2,a2,255 + 80006160: 00c7f7b3 and a5,a5,a2 + 80006164: 03c77713 andi a4,a4,60 + 80006168: 00a76733 or a4,a4,a0 + 8000616c: 0017d79b srliw a5,a5,0x1 + 80006170: 0086d69b srliw a3,a3,0x8 + 80006174: 0407f793 andi a5,a5,64 + 80006178: 00d76733 or a4,a4,a3 + 8000617c: 00445503 lhu a0,4(s0) + 80006180: 00e7e7b3 or a5,a5,a4 + 80006184: 00b40c23 sb a1,24(s0) + 80006188: 01040323 sb a6,6(s0) + 8000618c: 00f40523 sb a5,10(s0) + 80006190: 01042483 lw s1,16(s0) + 80006194: 00ac8463 beq s9,a0,8000619c <_Z14X6502_RunDebugi+0x533c> + 80006198: ed5fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000619c: f5dfa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800061a0: 00a44783 lbu a5,10(s0) + 800061a4: 0407f793 andi a5,a5,64 + 800061a8: 00079463 bnez a5,800061b0 <_Z14X6502_RunDebugi+0x5350> + 800061ac: 2800506f j 8000b42c <_Z14X6502_RunDebugi+0xa5cc> + 800061b0: 00351793 slli a5,a0,0x3 + 800061b4: 00f90933 add s2,s2,a5 + 800061b8: 00093783 ld a5,0(s2) + 800061bc: 000780e7 jalr a5 + 800061c0: 00445783 lhu a5,4(s0) + 800061c4: 00050713 mv a4,a0 + 800061c8: 0185151b slliw a0,a0,0x18 + 800061cc: 0017879b addiw a5,a5,1 + 800061d0: 03079793 slli a5,a5,0x30 + 800061d4: 00042583 lw a1,0(s0) + 800061d8: 01042683 lw a3,16(s0) + 800061dc: 0009a603 lw a2,0(s3) + 800061e0: 0307d793 srli a5,a5,0x30 + 800061e4: 4185551b sraiw a0,a0,0x18 + 800061e8: 00f5053b addw a0,a0,a5 + 800061ec: 03051513 slli a0,a0,0x30 + 800061f0: 000a4803 lbu a6,0(s4) + 800061f4: fd06849b addiw s1,a3,-48 + 800061f8: 0015831b addiw t1,a1,1 + 800061fc: 0016089b addiw a7,a2,1 + 80006200: 03055513 srli a0,a0,0x30 + 80006204: 00a7c7b3 xor a5,a5,a0 + 80006208: 00e40c23 sb a4,24(s0) + 8000620c: 00642023 sw t1,0(s0) + 80006210: 00942823 sw s1,16(s0) + 80006214: 0119a023 sw a7,0(s3) + 80006218: 1007f793 andi a5,a5,256 + 8000621c: 00080463 beqz a6,80006224 <_Z14X6502_RunDebugi+0x53c4> + 80006220: 4280506f j 8000b648 <_Z14X6502_RunDebugi+0xa7e8> + 80006224: 001c6817 auipc a6,0x1c6 + 80006228: 92480813 addi a6,a6,-1756 # 801cbb48 + 8000622c: 00082703 lw a4,0(a6) + 80006230: 00a41223 sh a0,4(s0) + 80006234: 0017089b addiw a7,a4,1 + 80006238: 01182023 sw a7,0(a6) + 8000623c: 00079463 bnez a5,80006244 <_Z14X6502_RunDebugi+0x53e4> + 80006240: e29fa06f j 80001068 <_Z14X6502_RunDebugi+0x208> + 80006244: fa06849b addiw s1,a3,-96 + 80006248: 0025859b addiw a1,a1,2 + 8000624c: 0026061b addiw a2,a2,2 + 80006250: 0027071b addiw a4,a4,2 + 80006254: 00b42023 sw a1,0(s0) + 80006258: 00942823 sw s1,16(s0) + 8000625c: 00c9a023 sw a2,0(s3) + 80006260: 00e82023 sw a4,0(a6) + 80006264: 00ac8463 beq s9,a0,8000626c <_Z14X6502_RunDebugi+0x540c> + 80006268: e05fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000626c: e8dfa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006270: 00351793 slli a5,a0,0x3 + 80006274: 00f907b3 add a5,s2,a5 + 80006278: 0007b783 ld a5,0(a5) + 8000627c: 000780e7 jalr a5 + 80006280: 00445783 lhu a5,4(s0) + 80006284: 00050493 mv s1,a0 + 80006288: 00a40c23 sb a0,24(s0) + 8000628c: 0017879b addiw a5,a5,1 + 80006290: 03079513 slli a0,a5,0x30 + 80006294: 03055513 srli a0,a0,0x30 + 80006298: 00351793 slli a5,a0,0x3 + 8000629c: 00f907b3 add a5,s2,a5 + 800062a0: 0007b783 ld a5,0(a5) + 800062a4: 00a41223 sh a0,4(s0) + 800062a8: 0004849b sext.w s1,s1 + 800062ac: 000780e7 jalr a5 + 800062b0: 00851713 slli a4,a0,0x8 + 800062b4: 00976d33 or s10,a4,s1 + 800062b8: 00445783 lhu a5,4(s0) + 800062bc: 003d1d13 slli s10,s10,0x3 + 800062c0: 01a90933 add s2,s2,s10 + 800062c4: 00093683 ld a3,0(s2) + 800062c8: 009764b3 or s1,a4,s1 + 800062cc: 0017879b addiw a5,a5,1 + 800062d0: 00a40c23 sb a0,24(s0) + 800062d4: 00f41223 sh a5,4(s0) + 800062d8: 00048513 mv a0,s1 + 800062dc: 00143917 auipc s2,0x143 + 800062e0: a0490913 addi s2,s2,-1532 # 80148ce0 + 800062e4: 000680e7 jalr a3 + 800062e8: 01a90933 add s2,s2,s10 + 800062ec: 00093783 ld a5,0(s2) + 800062f0: 00050d13 mv s10,a0 + 800062f4: 00050593 mv a1,a0 + 800062f8: 01a40c23 sb s10,24(s0) + 800062fc: 00048513 mv a0,s1 + 80006300: 000780e7 jalr a5 + 80006304: 00a44783 lbu a5,10(s0) + 80006308: 401d571b sraiw a4,s10,0x1 + 8000630c: 00051517 auipc a0,0x51 + 80006310: 56450513 addi a0,a0,1380 # 80057870 <_ZL7ZNTable> + 80006314: 00779613 slli a2,a5,0x7 + 80006318: 00e66633 or a2,a2,a4 + 8000631c: 0ff67693 andi a3,a2,255 + 80006320: 00d50733 add a4,a0,a3 + 80006324: 00074583 lbu a1,0(a4) + 80006328: 07c7f793 andi a5,a5,124 + 8000632c: 00644703 lbu a4,6(s0) + 80006330: 001d7d13 andi s10,s10,1 + 80006334: 01a7e7b3 or a5,a5,s10 + 80006338: 00b7e7b3 or a5,a5,a1 + 8000633c: 0017f593 andi a1,a5,1 + 80006340: 00d706bb addw a3,a4,a3 + 80006344: 00b686bb addw a3,a3,a1 + 80006348: 0006881b sext.w a6,a3 + 8000634c: 0ff67593 andi a1,a2,255 + 80006350: 0ff87893 andi a7,a6,255 + 80006354: 00b74633 xor a2,a4,a1 + 80006358: 01150533 add a0,a0,a7 + 8000635c: 00054503 lbu a0,0(a0) + 80006360: fff64613 not a2,a2 + 80006364: 0ff67613 andi a2,a2,255 + 80006368: 00d74733 xor a4,a4,a3 + 8000636c: 00c77733 and a4,a4,a2 + 80006370: 03c7f793 andi a5,a5,60 + 80006374: 00a7e7b3 or a5,a5,a0 + 80006378: 0086d69b srliw a3,a3,0x8 + 8000637c: 0017571b srliw a4,a4,0x1 + 80006380: 04077713 andi a4,a4,64 + 80006384: 00d7e7b3 or a5,a5,a3 + 80006388: 00093683 ld a3,0(s2) + 8000638c: 00f767b3 or a5,a4,a5 + 80006390: 00048513 mv a0,s1 + 80006394: 01040323 sb a6,6(s0) + 80006398: 00f40523 sb a5,10(s0) + 8000639c: 000680e7 jalr a3 + 800063a0: 00445503 lhu a0,4(s0) + 800063a4: 01042483 lw s1,16(s0) + 800063a8: 00ac8463 beq s9,a0,800063b0 <_Z14X6502_RunDebugi+0x5550> + 800063ac: cc1fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800063b0: d49fa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800063b4: 00351793 slli a5,a0,0x3 + 800063b8: 00f907b3 add a5,s2,a5 + 800063bc: 0007b783 ld a5,0(a5) + 800063c0: 000780e7 jalr a5 + 800063c4: 00445783 lhu a5,4(s0) + 800063c8: 00050493 mv s1,a0 + 800063cc: 00a40c23 sb a0,24(s0) + 800063d0: 0017879b addiw a5,a5,1 + 800063d4: 03079513 slli a0,a5,0x30 + 800063d8: 03055513 srli a0,a0,0x30 + 800063dc: 00351793 slli a5,a0,0x3 + 800063e0: 00f907b3 add a5,s2,a5 + 800063e4: 0007b783 ld a5,0(a5) + 800063e8: 00a41223 sh a0,4(s0) + 800063ec: 0004849b sext.w s1,s1 + 800063f0: 000780e7 jalr a5 + 800063f4: 00851d93 slli s11,a0,0x8 + 800063f8: 009ded33 or s10,s11,s1 + 800063fc: 00445783 lhu a5,4(s0) + 80006400: 003d1d13 slli s10,s10,0x3 + 80006404: 01a90933 add s2,s2,s10 + 80006408: 00093703 ld a4,0(s2) + 8000640c: 009dedb3 or s11,s11,s1 + 80006410: 0017879b addiw a5,a5,1 + 80006414: 00a40c23 sb a0,24(s0) + 80006418: 00f41223 sh a5,4(s0) + 8000641c: 000d8513 mv a0,s11 + 80006420: 00143917 auipc s2,0x143 + 80006424: 8c090913 addi s2,s2,-1856 # 80148ce0 + 80006428: 000700e7 jalr a4 + 8000642c: 01a90933 add s2,s2,s10 + 80006430: 00093783 ld a5,0(s2) + 80006434: 00050493 mv s1,a0 + 80006438: 00050593 mv a1,a0 + 8000643c: 00940c23 sb s1,24(s0) + 80006440: 000d8513 mv a0,s11 + 80006444: 000780e7 jalr a5 + 80006448: 00a44783 lbu a5,10(s0) + 8000644c: 4014d71b sraiw a4,s1,0x1 + 80006450: 0014f493 andi s1,s1,1 + 80006454: 00779593 slli a1,a5,0x7 + 80006458: 00e5e5b3 or a1,a1,a4 + 8000645c: 0ff5f693 andi a3,a1,255 + 80006460: 00051717 auipc a4,0x51 + 80006464: 41070713 addi a4,a4,1040 # 80057870 <_ZL7ZNTable> + 80006468: 00d70733 add a4,a4,a3 + 8000646c: 00074683 lbu a3,0(a4) + 80006470: 07c7f793 andi a5,a5,124 + 80006474: 0097e7b3 or a5,a5,s1 + 80006478: 00093703 ld a4,0(s2) + 8000647c: 00d7e7b3 or a5,a5,a3 + 80006480: 000d8513 mv a0,s11 + 80006484: 00f40523 sb a5,10(s0) + 80006488: 0ff5f593 andi a1,a1,255 + 8000648c: 000700e7 jalr a4 + 80006490: 00445503 lhu a0,4(s0) + 80006494: 01042483 lw s1,16(s0) + 80006498: 00ac8463 beq s9,a0,800064a0 <_Z14X6502_RunDebugi+0x5640> + 8000649c: bd1fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800064a0: c59fa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800064a4: 00351793 slli a5,a0,0x3 + 800064a8: 00f907b3 add a5,s2,a5 + 800064ac: 0007b783 ld a5,0(a5) + 800064b0: 000780e7 jalr a5 + 800064b4: 00445783 lhu a5,4(s0) + 800064b8: 00050493 mv s1,a0 + 800064bc: 00a40c23 sb a0,24(s0) + 800064c0: 0017879b addiw a5,a5,1 + 800064c4: 03079513 slli a0,a5,0x30 + 800064c8: 03055513 srli a0,a0,0x30 + 800064cc: 00351793 slli a5,a0,0x3 + 800064d0: 00f907b3 add a5,s2,a5 + 800064d4: 0007b783 ld a5,0(a5) + 800064d8: 00a41223 sh a0,4(s0) + 800064dc: 0004849b sext.w s1,s1 + 800064e0: 000780e7 jalr a5 + 800064e4: 00851693 slli a3,a0,0x8 + 800064e8: 0096e7b3 or a5,a3,s1 + 800064ec: 00445703 lhu a4,4(s0) + 800064f0: 00379793 slli a5,a5,0x3 + 800064f4: 00f90933 add s2,s2,a5 + 800064f8: 00093603 ld a2,0(s2) + 800064fc: 0017079b addiw a5,a4,1 + 80006500: 00a40c23 sb a0,24(s0) + 80006504: 00f41223 sh a5,4(s0) + 80006508: 0096e533 or a0,a3,s1 + 8000650c: 000600e7 jalr a2 + 80006510: 00644783 lbu a5,6(s0) + 80006514: 00a44703 lbu a4,10(s0) + 80006518: 00050593 mv a1,a0 + 8000651c: 00a786bb addw a3,a5,a0 + 80006520: 00177613 andi a2,a4,1 + 80006524: 00c686bb addw a3,a3,a2 + 80006528: 0006881b sext.w a6,a3 + 8000652c: 00a7c633 xor a2,a5,a0 + 80006530: 0ff87893 andi a7,a6,255 + 80006534: 00051517 auipc a0,0x51 + 80006538: 33c50513 addi a0,a0,828 # 80057870 <_ZL7ZNTable> + 8000653c: 01150533 add a0,a0,a7 + 80006540: 00054503 lbu a0,0(a0) + 80006544: fff64613 not a2,a2 + 80006548: 00d7c7b3 xor a5,a5,a3 + 8000654c: 0ff67613 andi a2,a2,255 + 80006550: 00c7f7b3 and a5,a5,a2 + 80006554: 03c77713 andi a4,a4,60 + 80006558: 00a76733 or a4,a4,a0 + 8000655c: 0017d79b srliw a5,a5,0x1 + 80006560: 0086d69b srliw a3,a3,0x8 + 80006564: 0407f793 andi a5,a5,64 + 80006568: 00d76733 or a4,a4,a3 + 8000656c: 00445503 lhu a0,4(s0) + 80006570: 00e7e7b3 or a5,a5,a4 + 80006574: 00b40c23 sb a1,24(s0) + 80006578: 01040323 sb a6,6(s0) + 8000657c: 00f40523 sb a5,10(s0) + 80006580: 01042483 lw s1,16(s0) + 80006584: 00ac8463 beq s9,a0,8000658c <_Z14X6502_RunDebugi+0x572c> + 80006588: ae5fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000658c: b6dfa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006590: 00351793 slli a5,a0,0x3 + 80006594: 00f907b3 add a5,s2,a5 + 80006598: 0007b783 ld a5,0(a5) + 8000659c: 000780e7 jalr a5 + 800065a0: 00445783 lhu a5,4(s0) + 800065a4: 00050493 mv s1,a0 + 800065a8: 00a40c23 sb a0,24(s0) + 800065ac: 0017879b addiw a5,a5,1 + 800065b0: 03079513 slli a0,a5,0x30 + 800065b4: 03055513 srli a0,a0,0x30 + 800065b8: 00351793 slli a5,a0,0x3 + 800065bc: 00f907b3 add a5,s2,a5 + 800065c0: 0007b783 ld a5,0(a5) + 800065c4: 00a41223 sh a0,4(s0) + 800065c8: 00048d1b sext.w s10,s1 + 800065cc: 000780e7 jalr a5 + 800065d0: 00851493 slli s1,a0,0x8 + 800065d4: 01a4e7b3 or a5,s1,s10 + 800065d8: 00445703 lhu a4,4(s0) + 800065dc: 00379793 slli a5,a5,0x3 + 800065e0: 00f907b3 add a5,s2,a5 + 800065e4: 0007b683 ld a3,0(a5) + 800065e8: 01a4e4b3 or s1,s1,s10 + 800065ec: 0017079b addiw a5,a4,1 + 800065f0: 00a40c23 sb a0,24(s0) + 800065f4: 00f41223 sh a5,4(s0) + 800065f8: 00048513 mv a0,s1 + 800065fc: 000680e7 jalr a3 + 80006600: 0014871b addiw a4,s1,1 + 80006604: 0ff77713 andi a4,a4,255 + 80006608: 0184f4b3 and s1,s1,s8 + 8000660c: 009767b3 or a5,a4,s1 + 80006610: 00379793 slli a5,a5,0x3 + 80006614: 00f90933 add s2,s2,a5 + 80006618: 00093783 ld a5,0(s2) + 8000661c: 00a40c23 sb a0,24(s0) + 80006620: 00a41223 sh a0,4(s0) + 80006624: 00976533 or a0,a4,s1 + 80006628: 000780e7 jalr a5 + 8000662c: 00445703 lhu a4,4(s0) + 80006630: 00050793 mv a5,a0 + 80006634: 00851513 slli a0,a0,0x8 + 80006638: 00a76733 or a4,a4,a0 + 8000663c: 03071513 slli a0,a4,0x30 + 80006640: 03055513 srli a0,a0,0x30 + 80006644: 00f40c23 sb a5,24(s0) + 80006648: 00a41223 sh a0,4(s0) + 8000664c: 01042483 lw s1,16(s0) + 80006650: 00ac8463 beq s9,a0,80006658 <_Z14X6502_RunDebugi+0x57f8> + 80006654: a19fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80006658: aa1fa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000665c: 00351793 slli a5,a0,0x3 + 80006660: 00f90933 add s2,s2,a5 + 80006664: 00093783 ld a5,0(s2) + 80006668: 000780e7 jalr a5 + 8000666c: 00644703 lbu a4,6(s0) + 80006670: 00051597 auipc a1,0x51 + 80006674: 20058593 addi a1,a1,512 # 80057870 <_ZL7ZNTable> + 80006678: 00a44783 lbu a5,10(s0) + 8000667c: 00e57833 and a6,a0,a4 + 80006680: 010586b3 add a3,a1,a6 + 80006684: 00050613 mv a2,a0 + 80006688: 0006c503 lbu a0,0(a3) + 8000668c: 07d7f793 andi a5,a5,125 + 80006690: 00185693 srli a3,a6,0x1 + 80006694: 00a7e7b3 or a5,a5,a0 + 80006698: 0106c733 xor a4,a3,a6 + 8000669c: 04077713 andi a4,a4,64 + 800066a0: 0bf7f793 andi a5,a5,191 + 800066a4: 00e7e7b3 or a5,a5,a4 + 800066a8: 00779713 slli a4,a5,0x7 + 800066ac: 00e6e733 or a4,a3,a4 + 800066b0: 00445503 lhu a0,4(s0) + 800066b4: 0ff77713 andi a4,a4,255 + 800066b8: 00e585b3 add a1,a1,a4 + 800066bc: 0005c583 lbu a1,0(a1) + 800066c0: ffe7f793 andi a5,a5,-2 + 800066c4: 4078569b sraiw a3,a6,0x7 + 800066c8: 00d7e7b3 or a5,a5,a3 + 800066cc: 0015051b addiw a0,a0,1 + 800066d0: 07d7f793 andi a5,a5,125 + 800066d4: 03051513 slli a0,a0,0x30 + 800066d8: 03055513 srli a0,a0,0x30 + 800066dc: 00b7e7b3 or a5,a5,a1 + 800066e0: 00c40c23 sb a2,24(s0) + 800066e4: 00a41223 sh a0,4(s0) + 800066e8: 00e40323 sb a4,6(s0) + 800066ec: 00f40523 sb a5,10(s0) + 800066f0: 01042483 lw s1,16(s0) + 800066f4: 00ac8463 beq s9,a0,800066fc <_Z14X6502_RunDebugi+0x589c> + 800066f8: 975fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800066fc: 9fdfa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006700: 00644683 lbu a3,6(s0) + 80006704: 00a44783 lbu a5,10(s0) + 80006708: 01042483 lw s1,16(s0) + 8000670c: 4016d61b sraiw a2,a3,0x1 + 80006710: 00779713 slli a4,a5,0x7 + 80006714: 00c76733 or a4,a4,a2 + 80006718: 0ff77593 andi a1,a4,255 + 8000671c: 00051617 auipc a2,0x51 + 80006720: 15460613 addi a2,a2,340 # 80057870 <_ZL7ZNTable> + 80006724: 00b60633 add a2,a2,a1 + 80006728: 00064603 lbu a2,0(a2) + 8000672c: 07c7f793 andi a5,a5,124 + 80006730: 0016f693 andi a3,a3,1 + 80006734: 00d7e7b3 or a5,a5,a3 + 80006738: 00c7e7b3 or a5,a5,a2 + 8000673c: 00f40523 sb a5,10(s0) + 80006740: 00e40323 sb a4,6(s0) + 80006744: 00ac8463 beq s9,a0,8000674c <_Z14X6502_RunDebugi+0x58ec> + 80006748: 925fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000674c: 9adfa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006750: 00351793 slli a5,a0,0x3 + 80006754: 00f90933 add s2,s2,a5 + 80006758: 00093783 ld a5,0(s2) + 8000675c: 000780e7 jalr a5 + 80006760: 00644783 lbu a5,6(s0) + 80006764: 00a44703 lbu a4,10(s0) + 80006768: 00050593 mv a1,a0 + 8000676c: 00a786bb addw a3,a5,a0 + 80006770: 00177613 andi a2,a4,1 + 80006774: 00c686bb addw a3,a3,a2 + 80006778: 0006881b sext.w a6,a3 + 8000677c: 00a7c633 xor a2,a5,a0 + 80006780: 0ff87893 andi a7,a6,255 + 80006784: 00051517 auipc a0,0x51 + 80006788: 0ec50513 addi a0,a0,236 # 80057870 <_ZL7ZNTable> + 8000678c: 01150533 add a0,a0,a7 + 80006790: 00054883 lbu a7,0(a0) + 80006794: fff64613 not a2,a2 + 80006798: 00445503 lhu a0,4(s0) + 8000679c: 00d7c7b3 xor a5,a5,a3 + 800067a0: 0ff67613 andi a2,a2,255 + 800067a4: 00c7f7b3 and a5,a5,a2 + 800067a8: 03c77713 andi a4,a4,60 + 800067ac: 0017d79b srliw a5,a5,0x1 + 800067b0: 01176733 or a4,a4,a7 + 800067b4: 0086d69b srliw a3,a3,0x8 + 800067b8: 0015051b addiw a0,a0,1 + 800067bc: 0407f793 andi a5,a5,64 + 800067c0: 00d76733 or a4,a4,a3 + 800067c4: 03051513 slli a0,a0,0x30 + 800067c8: 03055513 srli a0,a0,0x30 + 800067cc: 00e7e7b3 or a5,a5,a4 + 800067d0: 00b40c23 sb a1,24(s0) + 800067d4: 00a41223 sh a0,4(s0) + 800067d8: 01040323 sb a6,6(s0) + 800067dc: 00f40523 sb a5,10(s0) + 800067e0: 01042483 lw s1,16(s0) + 800067e4: 00ac8463 beq s9,a0,800067ec <_Z14X6502_RunDebugi+0x598c> + 800067e8: 885fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800067ec: 90dfa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800067f0: 00944783 lbu a5,9(s0) + 800067f4: 001c2717 auipc a4,0x1c2 + 800067f8: 63470713 addi a4,a4,1588 # 801c8e28 + 800067fc: 00051617 auipc a2,0x51 + 80006800: 07460613 addi a2,a2,116 # 80057870 <_ZL7ZNTable> + 80006804: 0017879b addiw a5,a5,1 + 80006808: 0ff7f793 andi a5,a5,255 + 8000680c: 00e78733 add a4,a5,a4 + 80006810: 00074683 lbu a3,0(a4) + 80006814: 00a44703 lbu a4,10(s0) + 80006818: 00f404a3 sb a5,9(s0) + 8000681c: 00d60633 add a2,a2,a3 + 80006820: 00064603 lbu a2,0(a2) + 80006824: 07d77713 andi a4,a4,125 + 80006828: 00d40c23 sb a3,24(s0) + 8000682c: 00c767b3 or a5,a4,a2 + 80006830: 00d40323 sb a3,6(s0) + 80006834: 00f40523 sb a5,10(s0) + 80006838: 01042483 lw s1,16(s0) + 8000683c: 00ac8463 beq s9,a0,80006844 <_Z14X6502_RunDebugi+0x59e4> + 80006840: 82dfa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80006844: 8b5fa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006848: 00351793 slli a5,a0,0x3 + 8000684c: 00f90933 add s2,s2,a5 + 80006850: 00093783 ld a5,0(s2) + 80006854: 000780e7 jalr a5 + 80006858: 02051793 slli a5,a0,0x20 + 8000685c: 0207d793 srli a5,a5,0x20 + 80006860: 001c2597 auipc a1,0x1c2 + 80006864: 4c858593 addi a1,a1,1224 # 801c8d28 + 80006868: 00f585b3 add a1,a1,a5 + 8000686c: 0005c803 lbu a6,0(a1) + 80006870: 00a44783 lbu a5,10(s0) + 80006874: 00051517 auipc a0,0x51 + 80006878: ffc50513 addi a0,a0,-4 # 80057870 <_ZL7ZNTable> + 8000687c: 4018571b sraiw a4,a6,0x1 + 80006880: 00779893 slli a7,a5,0x7 + 80006884: 00e8e8b3 or a7,a7,a4 + 80006888: 0ff8f693 andi a3,a7,255 + 8000688c: 00d50733 add a4,a0,a3 + 80006890: 00074603 lbu a2,0(a4) + 80006894: 00187313 andi t1,a6,1 + 80006898: 00644703 lbu a4,6(s0) + 8000689c: 07c7f793 andi a5,a5,124 + 800068a0: 0067e7b3 or a5,a5,t1 + 800068a4: 00c7e7b3 or a5,a5,a2 + 800068a8: 00d706bb addw a3,a4,a3 + 800068ac: 0017fe13 andi t3,a5,1 + 800068b0: 01c68e3b addw t3,a3,t3 + 800068b4: 000e031b sext.w t1,t3 + 800068b8: 0ff8f893 andi a7,a7,255 + 800068bc: 0ff37693 andi a3,t1,255 + 800068c0: 00d50533 add a0,a0,a3 + 800068c4: 01174633 xor a2,a4,a7 + 800068c8: 00054e83 lbu t4,0(a0) + 800068cc: fff64613 not a2,a2 + 800068d0: 00445503 lhu a0,4(s0) + 800068d4: 0ff67613 andi a2,a2,255 + 800068d8: 01c74733 xor a4,a4,t3 + 800068dc: 03c7f693 andi a3,a5,60 + 800068e0: 00c77733 and a4,a4,a2 + 800068e4: 0017579b srliw a5,a4,0x1 + 800068e8: 0015051b addiw a0,a0,1 + 800068ec: 01d6e733 or a4,a3,t4 + 800068f0: 008e569b srliw a3,t3,0x8 + 800068f4: 0407f793 andi a5,a5,64 + 800068f8: 00d76733 or a4,a4,a3 + 800068fc: 03051513 slli a0,a0,0x30 + 80006900: 03055513 srli a0,a0,0x30 + 80006904: 00e7e7b3 or a5,a5,a4 + 80006908: 00a41223 sh a0,4(s0) + 8000690c: 01040c23 sb a6,24(s0) + 80006910: 00640323 sb t1,6(s0) + 80006914: 00f40523 sb a5,10(s0) + 80006918: 01158023 sb a7,0(a1) + 8000691c: 01042483 lw s1,16(s0) + 80006920: 00ac8463 beq s9,a0,80006928 <_Z14X6502_RunDebugi+0x5ac8> + 80006924: f48fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80006928: fd0fa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000692c: 00351793 slli a5,a0,0x3 + 80006930: 00f90933 add s2,s2,a5 + 80006934: 00093783 ld a5,0(s2) + 80006938: 000780e7 jalr a5 + 8000693c: 02051793 slli a5,a0,0x20 + 80006940: 0207d793 srli a5,a5,0x20 + 80006944: 001c2717 auipc a4,0x1c2 + 80006948: 3e470713 addi a4,a4,996 # 801c8d28 + 8000694c: 00f70733 add a4,a4,a5 + 80006950: 00074603 lbu a2,0(a4) + 80006954: 00a44783 lbu a5,10(s0) + 80006958: 00445503 lhu a0,4(s0) + 8000695c: 4016559b sraiw a1,a2,0x1 + 80006960: 00779693 slli a3,a5,0x7 + 80006964: 00b6e6b3 or a3,a3,a1 + 80006968: 0ff6f813 andi a6,a3,255 + 8000696c: 00051597 auipc a1,0x51 + 80006970: f0458593 addi a1,a1,-252 # 80057870 <_ZL7ZNTable> + 80006974: 010585b3 add a1,a1,a6 + 80006978: 0005c583 lbu a1,0(a1) + 8000697c: 07c7f793 andi a5,a5,124 + 80006980: 00167813 andi a6,a2,1 + 80006984: 0015051b addiw a0,a0,1 + 80006988: 0107e7b3 or a5,a5,a6 + 8000698c: 03051513 slli a0,a0,0x30 + 80006990: 03055513 srli a0,a0,0x30 + 80006994: 00b7e7b3 or a5,a5,a1 + 80006998: 00a41223 sh a0,4(s0) + 8000699c: 00c40c23 sb a2,24(s0) + 800069a0: 00f40523 sb a5,10(s0) + 800069a4: 00d70023 sb a3,0(a4) + 800069a8: 01042483 lw s1,16(s0) + 800069ac: 00ac8463 beq s9,a0,800069b4 <_Z14X6502_RunDebugi+0x5b54> + 800069b0: ebcfa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800069b4: f44fa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800069b8: 00944783 lbu a5,9(s0) + 800069bc: 001c2717 auipc a4,0x1c2 + 800069c0: 46c70713 addi a4,a4,1132 # 801c8e28 + 800069c4: 01042483 lw s1,16(s0) + 800069c8: 0017879b addiw a5,a5,1 + 800069cc: 0ff7f793 andi a5,a5,255 + 800069d0: 00e78733 add a4,a5,a4 + 800069d4: 00074703 lbu a4,0(a4) + 800069d8: 00f404a3 sb a5,9(s0) + 800069dc: 00e40c23 sb a4,24(s0) + 800069e0: 00e40523 sb a4,10(s0) + 800069e4: 00ac8463 beq s9,a0,800069ec <_Z14X6502_RunDebugi+0x5b8c> + 800069e8: e84fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800069ec: f0cfa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800069f0: 00351793 slli a5,a0,0x3 + 800069f4: 00f90933 add s2,s2,a5 + 800069f8: 00093783 ld a5,0(s2) + 800069fc: 000780e7 jalr a5 + 80006a00: 02051793 slli a5,a0,0x20 + 80006a04: 0207d793 srli a5,a5,0x20 + 80006a08: 001c2597 auipc a1,0x1c2 + 80006a0c: 32058593 addi a1,a1,800 # 801c8d28 + 80006a10: 00f585b3 add a1,a1,a5 + 80006a14: 0005c803 lbu a6,0(a1) + 80006a18: 00a44783 lbu a5,10(s0) + 80006a1c: 00644883 lbu a7,6(s0) + 80006a20: 0018169b slliw a3,a6,0x1 + 80006a24: 0017f513 andi a0,a5,1 + 80006a28: 0ff6f693 andi a3,a3,255 + 80006a2c: 00a6e633 or a2,a3,a0 + 80006a30: 00051717 auipc a4,0x51 + 80006a34: e4070713 addi a4,a4,-448 # 80057870 <_ZL7ZNTable> + 80006a38: 00060693 mv a3,a2 + 80006a3c: 00c70633 add a2,a4,a2 + 80006a40: 00445503 lhu a0,4(s0) + 80006a44: 0116f8b3 and a7,a3,a7 + 80006a48: 00064603 lbu a2,0(a2) + 80006a4c: 07c7f793 andi a5,a5,124 + 80006a50: 4078531b sraiw t1,a6,0x7 + 80006a54: 01170733 add a4,a4,a7 + 80006a58: 00074703 lbu a4,0(a4) + 80006a5c: 0067e7b3 or a5,a5,t1 + 80006a60: 00c7e7b3 or a5,a5,a2 + 80006a64: 0015051b addiw a0,a0,1 + 80006a68: 07d7f793 andi a5,a5,125 + 80006a6c: 03051513 slli a0,a0,0x30 + 80006a70: 03055513 srli a0,a0,0x30 + 80006a74: 00e7e7b3 or a5,a5,a4 + 80006a78: 00a41223 sh a0,4(s0) + 80006a7c: 01040c23 sb a6,24(s0) + 80006a80: 01140323 sb a7,6(s0) + 80006a84: 00f40523 sb a5,10(s0) + 80006a88: 00d58023 sb a3,0(a1) + 80006a8c: 01042483 lw s1,16(s0) + 80006a90: 00ac8463 beq s9,a0,80006a98 <_Z14X6502_RunDebugi+0x5c38> + 80006a94: dd8fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80006a98: e60fa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006a9c: 00744683 lbu a3,7(s0) + 80006aa0: 00644783 lbu a5,6(s0) + 80006aa4: 00351713 slli a4,a0,0x3 + 80006aa8: 00e90733 add a4,s2,a4 + 80006aac: 00073703 ld a4,0(a4) + 80006ab0: 00d7f7b3 and a5,a5,a3 + 80006ab4: 00f404a3 sb a5,9(s0) + 80006ab8: 000700e7 jalr a4 + 80006abc: 00445783 lhu a5,4(s0) + 80006ac0: 00050713 mv a4,a0 + 80006ac4: 00a40c23 sb a0,24(s0) + 80006ac8: 0017879b addiw a5,a5,1 + 80006acc: 03079513 slli a0,a5,0x30 + 80006ad0: 03055513 srli a0,a0,0x30 + 80006ad4: 00351793 slli a5,a0,0x3 + 80006ad8: 00f907b3 add a5,s2,a5 + 80006adc: 0007b783 ld a5,0(a5) + 80006ae0: 00a41223 sh a0,4(s0) + 80006ae4: 00070d1b sext.w s10,a4 + 80006ae8: 000780e7 jalr a5 + 80006aec: 00844483 lbu s1,8(s0) + 80006af0: 00851793 slli a5,a0,0x8 + 80006af4: 01a7e7b3 or a5,a5,s10 + 80006af8: 00f484bb addw s1,s1,a5 + 80006afc: 0ff4f613 andi a2,s1,255 + 80006b00: 0187f7b3 and a5,a5,s8 + 80006b04: 00f66733 or a4,a2,a5 + 80006b08: 00445683 lhu a3,4(s0) + 80006b0c: 00371713 slli a4,a4,0x3 + 80006b10: 00e90933 add s2,s2,a4 + 80006b14: 00093583 ld a1,0(s2) + 80006b18: 0016871b addiw a4,a3,1 + 80006b1c: 00a40c23 sb a0,24(s0) + 80006b20: 00e41223 sh a4,4(s0) + 80006b24: 00f66533 or a0,a2,a5 + 80006b28: 000580e7 jalr a1 + 80006b2c: 00844783 lbu a5,8(s0) + 80006b30: 03049493 slli s1,s1,0x30 + 80006b34: 0304d493 srli s1,s1,0x30 + 80006b38: 00349693 slli a3,s1,0x3 + 80006b3c: 00142717 auipc a4,0x142 + 80006b40: 1a470713 addi a4,a4,420 # 80148ce0 + 80006b44: 00944583 lbu a1,9(s0) + 80006b48: 40f487bb subw a5,s1,a5 + 80006b4c: 00d70733 add a4,a4,a3 + 80006b50: 00073703 ld a4,0(a4) + 80006b54: 0087d79b srliw a5,a5,0x8 + 80006b58: 0017879b addiw a5,a5,1 + 80006b5c: 00a40c23 sb a0,24(s0) + 80006b60: 00f5f5b3 and a1,a1,a5 + 80006b64: 00048513 mv a0,s1 + 80006b68: 000700e7 jalr a4 + 80006b6c: 00445503 lhu a0,4(s0) + 80006b70: 01042483 lw s1,16(s0) + 80006b74: 00ac8463 beq s9,a0,80006b7c <_Z14X6502_RunDebugi+0x5d1c> + 80006b78: cf4fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80006b7c: d7cfa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006b80: 00744783 lbu a5,7(s0) + 80006b84: 01042483 lw s1,16(s0) + 80006b88: 00f404a3 sb a5,9(s0) + 80006b8c: 00ac8463 beq s9,a0,80006b94 <_Z14X6502_RunDebugi+0x5d34> + 80006b90: cdcfa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80006b94: d64fa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006b98: 00351793 slli a5,a0,0x3 + 80006b9c: 00f907b3 add a5,s2,a5 + 80006ba0: 0007b783 ld a5,0(a5) + 80006ba4: 000780e7 jalr a5 + 80006ba8: 00445783 lhu a5,4(s0) + 80006bac: 00050713 mv a4,a0 + 80006bb0: 00a40c23 sb a0,24(s0) + 80006bb4: 0017879b addiw a5,a5,1 + 80006bb8: 03079513 slli a0,a5,0x30 + 80006bbc: 03055513 srli a0,a0,0x30 + 80006bc0: 00351793 slli a5,a0,0x3 + 80006bc4: 00f907b3 add a5,s2,a5 + 80006bc8: 0007b783 ld a5,0(a5) + 80006bcc: 00a41223 sh a0,4(s0) + 80006bd0: 00070d1b sext.w s10,a4 + 80006bd4: 000780e7 jalr a5 + 80006bd8: 00844483 lbu s1,8(s0) + 80006bdc: 00851793 slli a5,a0,0x8 + 80006be0: 01a7e7b3 or a5,a5,s10 + 80006be4: 00f484bb addw s1,s1,a5 + 80006be8: 0ff4f613 andi a2,s1,255 + 80006bec: 0187f7b3 and a5,a5,s8 + 80006bf0: 00f66733 or a4,a2,a5 + 80006bf4: 00445683 lhu a3,4(s0) + 80006bf8: 00371713 slli a4,a4,0x3 + 80006bfc: 00e90933 add s2,s2,a4 + 80006c00: 00093583 ld a1,0(s2) + 80006c04: 0016871b addiw a4,a3,1 + 80006c08: 00a40c23 sb a0,24(s0) + 80006c0c: 00e41223 sh a4,4(s0) + 80006c10: 00f66533 or a0,a2,a5 + 80006c14: 03049493 slli s1,s1,0x30 + 80006c18: 000580e7 jalr a1 + 80006c1c: 0304d493 srli s1,s1,0x30 + 80006c20: 00349713 slli a4,s1,0x3 + 80006c24: 00142797 auipc a5,0x142 + 80006c28: 0bc78793 addi a5,a5,188 # 80148ce0 + 80006c2c: 00e787b3 add a5,a5,a4 + 80006c30: 0007b783 ld a5,0(a5) + 80006c34: 00644583 lbu a1,6(s0) + 80006c38: 00a40c23 sb a0,24(s0) + 80006c3c: 00048513 mv a0,s1 + 80006c40: 000780e7 jalr a5 + 80006c44: 00445503 lhu a0,4(s0) + 80006c48: 01042483 lw s1,16(s0) + 80006c4c: 00ac8463 beq s9,a0,80006c54 <_Z14X6502_RunDebugi+0x5df4> + 80006c50: c1cfa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80006c54: ca4fa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006c58: 00844683 lbu a3,8(s0) + 80006c5c: 00051717 auipc a4,0x51 + 80006c60: c1470713 addi a4,a4,-1004 # 80057870 <_ZL7ZNTable> + 80006c64: 00a44783 lbu a5,10(s0) + 80006c68: 00d70733 add a4,a4,a3 + 80006c6c: 00074703 lbu a4,0(a4) + 80006c70: 07d7f793 andi a5,a5,125 + 80006c74: 00d40323 sb a3,6(s0) + 80006c78: 00e7e7b3 or a5,a5,a4 + 80006c7c: 00f40523 sb a5,10(s0) + 80006c80: 01042483 lw s1,16(s0) + 80006c84: 00ac8463 beq s9,a0,80006c8c <_Z14X6502_RunDebugi+0x5e2c> + 80006c88: be4fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80006c8c: c6cfa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006c90: 00351793 slli a5,a0,0x3 + 80006c94: 00f90933 add s2,s2,a5 + 80006c98: 00093783 ld a5,0(s2) + 80006c9c: 00844483 lbu s1,8(s0) + 80006ca0: 000780e7 jalr a5 + 80006ca4: 00445683 lhu a3,4(s0) + 80006ca8: 00644603 lbu a2,6(s0) + 80006cac: 00744583 lbu a1,7(s0) + 80006cb0: 00a487bb addw a5,s1,a0 + 80006cb4: 0016869b addiw a3,a3,1 + 80006cb8: 00050713 mv a4,a0 + 80006cbc: 0ff7f793 andi a5,a5,255 + 80006cc0: 03069513 slli a0,a3,0x30 + 80006cc4: 001c2697 auipc a3,0x1c2 + 80006cc8: 06468693 addi a3,a3,100 # 801c8d28 + 80006ccc: 00f687b3 add a5,a3,a5 + 80006cd0: 03055513 srli a0,a0,0x30 + 80006cd4: 00b676b3 and a3,a2,a1 + 80006cd8: 00e40c23 sb a4,24(s0) + 80006cdc: 00a41223 sh a0,4(s0) + 80006ce0: 00d78023 sb a3,0(a5) + 80006ce4: 01042483 lw s1,16(s0) + 80006ce8: 00ac8463 beq s9,a0,80006cf0 <_Z14X6502_RunDebugi+0x5e90> + 80006cec: b80fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80006cf0: c08fa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006cf4: 00351793 slli a5,a0,0x3 + 80006cf8: 00f90933 add s2,s2,a5 + 80006cfc: 00093783 ld a5,0(s2) + 80006d00: 00844483 lbu s1,8(s0) + 80006d04: 000780e7 jalr a5 + 80006d08: 00445683 lhu a3,4(s0) + 80006d0c: 00a487bb addw a5,s1,a0 + 80006d10: 00744603 lbu a2,7(s0) + 80006d14: 0016869b addiw a3,a3,1 + 80006d18: 00050713 mv a4,a0 + 80006d1c: 0ff7f793 andi a5,a5,255 + 80006d20: 03069513 slli a0,a3,0x30 + 80006d24: 001c2697 auipc a3,0x1c2 + 80006d28: 00468693 addi a3,a3,4 # 801c8d28 + 80006d2c: 03055513 srli a0,a0,0x30 + 80006d30: 00f687b3 add a5,a3,a5 + 80006d34: 00e40c23 sb a4,24(s0) + 80006d38: 00a41223 sh a0,4(s0) + 80006d3c: 00c78023 sb a2,0(a5) + 80006d40: 01042483 lw s1,16(s0) + 80006d44: 00ac8463 beq s9,a0,80006d4c <_Z14X6502_RunDebugi+0x5eec> + 80006d48: b24fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80006d4c: bacfa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006d50: 00351793 slli a5,a0,0x3 + 80006d54: 00f90933 add s2,s2,a5 + 80006d58: 00093783 ld a5,0(s2) + 80006d5c: 00744483 lbu s1,7(s0) + 80006d60: 000780e7 jalr a5 + 80006d64: 00445683 lhu a3,4(s0) + 80006d68: 00a487bb addw a5,s1,a0 + 80006d6c: 00644603 lbu a2,6(s0) + 80006d70: 0016869b addiw a3,a3,1 + 80006d74: 00050713 mv a4,a0 + 80006d78: 0ff7f793 andi a5,a5,255 + 80006d7c: 03069513 slli a0,a3,0x30 + 80006d80: 001c2697 auipc a3,0x1c2 + 80006d84: fa868693 addi a3,a3,-88 # 801c8d28 + 80006d88: 03055513 srli a0,a0,0x30 + 80006d8c: 00f687b3 add a5,a3,a5 + 80006d90: 00e40c23 sb a4,24(s0) + 80006d94: 00a41223 sh a0,4(s0) + 80006d98: 00c78023 sb a2,0(a5) + 80006d9c: 01042483 lw s1,16(s0) + 80006da0: 00ac8463 beq s9,a0,80006da8 <_Z14X6502_RunDebugi+0x5f48> + 80006da4: ac8fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80006da8: b50fa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006dac: 00351793 slli a5,a0,0x3 + 80006db0: 00f90933 add s2,s2,a5 + 80006db4: 00093783 ld a5,0(s2) + 80006db8: 00744483 lbu s1,7(s0) + 80006dbc: 000780e7 jalr a5 + 80006dc0: 00445683 lhu a3,4(s0) + 80006dc4: 00a487bb addw a5,s1,a0 + 80006dc8: 00844603 lbu a2,8(s0) + 80006dcc: 0016869b addiw a3,a3,1 + 80006dd0: 00050713 mv a4,a0 + 80006dd4: 0ff7f793 andi a5,a5,255 + 80006dd8: 03069513 slli a0,a3,0x30 + 80006ddc: 001c2697 auipc a3,0x1c2 + 80006de0: f4c68693 addi a3,a3,-180 # 801c8d28 + 80006de4: 03055513 srli a0,a0,0x30 + 80006de8: 00f687b3 add a5,a3,a5 + 80006dec: 00e40c23 sb a4,24(s0) + 80006df0: 00a41223 sh a0,4(s0) + 80006df4: 00c78023 sb a2,0(a5) + 80006df8: 01042483 lw s1,16(s0) + 80006dfc: 00ac8463 beq s9,a0,80006e04 <_Z14X6502_RunDebugi+0x5fa4> + 80006e00: a6cfa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80006e04: af4fa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006e08: 00351793 slli a5,a0,0x3 + 80006e0c: 00f907b3 add a5,s2,a5 + 80006e10: 0007b783 ld a5,0(a5) + 80006e14: 000780e7 jalr a5 + 80006e18: 0015079b addiw a5,a0,1 + 80006e1c: 001c2717 auipc a4,0x1c2 + 80006e20: f0c70713 addi a4,a4,-244 # 801c8d28 + 80006e24: 0ff7f793 andi a5,a5,255 + 80006e28: 02051513 slli a0,a0,0x20 + 80006e2c: 00f707b3 add a5,a4,a5 + 80006e30: 02055513 srli a0,a0,0x20 + 80006e34: 0007c603 lbu a2,0(a5) + 80006e38: 00a70533 add a0,a4,a0 + 80006e3c: 00054703 lbu a4,0(a0) + 80006e40: 00844483 lbu s1,8(s0) + 80006e44: 0086179b slliw a5,a2,0x8 + 80006e48: 00e7e7b3 or a5,a5,a4 + 80006e4c: 00f484bb addw s1,s1,a5 + 80006e50: 0007879b sext.w a5,a5 + 80006e54: 0187f7b3 and a5,a5,s8 + 80006e58: 0ff4f513 andi a0,s1,255 + 80006e5c: 00f56733 or a4,a0,a5 + 80006e60: 00445683 lhu a3,4(s0) + 80006e64: 00371713 slli a4,a4,0x3 + 80006e68: 00e90933 add s2,s2,a4 + 80006e6c: 00093583 ld a1,0(s2) + 80006e70: 0016871b addiw a4,a3,1 + 80006e74: 00e41223 sh a4,4(s0) + 80006e78: 00c40c23 sb a2,24(s0) + 80006e7c: 00f56533 or a0,a0,a5 + 80006e80: 000580e7 jalr a1 + 80006e84: 00844783 lbu a5,8(s0) + 80006e88: 03049493 slli s1,s1,0x30 + 80006e8c: 0304d493 srli s1,s1,0x30 + 80006e90: 00644703 lbu a4,6(s0) + 80006e94: 00744603 lbu a2,7(s0) + 80006e98: 00349593 slli a1,s1,0x3 + 80006e9c: 40f487bb subw a5,s1,a5 + 80006ea0: 00142697 auipc a3,0x142 + 80006ea4: e4068693 addi a3,a3,-448 # 80148ce0 + 80006ea8: 00b686b3 add a3,a3,a1 + 80006eac: 0087d79b srliw a5,a5,0x8 + 80006eb0: 00c77733 and a4,a4,a2 + 80006eb4: 0006b683 ld a3,0(a3) + 80006eb8: 0017879b addiw a5,a5,1 + 80006ebc: 00f777b3 and a5,a4,a5 + 80006ec0: 00a40c23 sb a0,24(s0) + 80006ec4: 0ff7f593 andi a1,a5,255 + 80006ec8: 00048513 mv a0,s1 + 80006ecc: 000680e7 jalr a3 + 80006ed0: 00445503 lhu a0,4(s0) + 80006ed4: 01042483 lw s1,16(s0) + 80006ed8: 00ac8463 beq s9,a0,80006ee0 <_Z14X6502_RunDebugi+0x6080> + 80006edc: 990fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80006ee0: a18fa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006ee4: 00351793 slli a5,a0,0x3 + 80006ee8: 00f907b3 add a5,s2,a5 + 80006eec: 0007b783 ld a5,0(a5) + 80006ef0: 000780e7 jalr a5 + 80006ef4: 0015079b addiw a5,a0,1 + 80006ef8: 001c2717 auipc a4,0x1c2 + 80006efc: e3070713 addi a4,a4,-464 # 801c8d28 + 80006f00: 0ff7f793 andi a5,a5,255 + 80006f04: 02051513 slli a0,a0,0x20 + 80006f08: 00f707b3 add a5,a4,a5 + 80006f0c: 02055513 srli a0,a0,0x20 + 80006f10: 0007c603 lbu a2,0(a5) + 80006f14: 00a70533 add a0,a4,a0 + 80006f18: 00054703 lbu a4,0(a0) + 80006f1c: 00844483 lbu s1,8(s0) + 80006f20: 0086179b slliw a5,a2,0x8 + 80006f24: 00e7e7b3 or a5,a5,a4 + 80006f28: 00f484bb addw s1,s1,a5 + 80006f2c: 0007879b sext.w a5,a5 + 80006f30: 0187f7b3 and a5,a5,s8 + 80006f34: 0ff4f513 andi a0,s1,255 + 80006f38: 00f56733 or a4,a0,a5 + 80006f3c: 00445683 lhu a3,4(s0) + 80006f40: 00371713 slli a4,a4,0x3 + 80006f44: 00e90933 add s2,s2,a4 + 80006f48: 00093583 ld a1,0(s2) + 80006f4c: 0016871b addiw a4,a3,1 + 80006f50: 00e41223 sh a4,4(s0) + 80006f54: 00c40c23 sb a2,24(s0) + 80006f58: 00f56533 or a0,a0,a5 + 80006f5c: 03049493 slli s1,s1,0x30 + 80006f60: 000580e7 jalr a1 + 80006f64: 0304d493 srli s1,s1,0x30 + 80006f68: 00349713 slli a4,s1,0x3 + 80006f6c: 00142797 auipc a5,0x142 + 80006f70: d7478793 addi a5,a5,-652 # 80148ce0 + 80006f74: 00e787b3 add a5,a5,a4 + 80006f78: 0007b783 ld a5,0(a5) + 80006f7c: 00644583 lbu a1,6(s0) + 80006f80: 00a40c23 sb a0,24(s0) + 80006f84: 00048513 mv a0,s1 + 80006f88: 000780e7 jalr a5 + 80006f8c: 00445503 lhu a0,4(s0) + 80006f90: 01042483 lw s1,16(s0) + 80006f94: 00ac8463 beq s9,a0,80006f9c <_Z14X6502_RunDebugi+0x613c> + 80006f98: 8d4fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80006f9c: 95cfa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80006fa0: 00a44783 lbu a5,10(s0) + 80006fa4: 0017f793 andi a5,a5,1 + 80006fa8: 00078463 beqz a5,80006fb0 <_Z14X6502_RunDebugi+0x6150> + 80006fac: 4000406f j 8000b3ac <_Z14X6502_RunDebugi+0xa54c> + 80006fb0: 00351793 slli a5,a0,0x3 + 80006fb4: 00f90933 add s2,s2,a5 + 80006fb8: 00093783 ld a5,0(s2) + 80006fbc: 000780e7 jalr a5 + 80006fc0: 00445783 lhu a5,4(s0) + 80006fc4: 00050693 mv a3,a0 + 80006fc8: 0185151b slliw a0,a0,0x18 + 80006fcc: 0017879b addiw a5,a5,1 + 80006fd0: 03079793 slli a5,a5,0x30 + 80006fd4: 00042583 lw a1,0(s0) + 80006fd8: 01042703 lw a4,16(s0) + 80006fdc: 0009a603 lw a2,0(s3) + 80006fe0: 0307d793 srli a5,a5,0x30 + 80006fe4: 4185551b sraiw a0,a0,0x18 + 80006fe8: 00f5053b addw a0,a0,a5 + 80006fec: 03051513 slli a0,a0,0x30 + 80006ff0: 000a4803 lbu a6,0(s4) + 80006ff4: fd07049b addiw s1,a4,-48 + 80006ff8: 0015831b addiw t1,a1,1 + 80006ffc: 0016089b addiw a7,a2,1 + 80007000: 03055513 srli a0,a0,0x30 + 80007004: 00a7c7b3 xor a5,a5,a0 + 80007008: 00d40c23 sb a3,24(s0) + 8000700c: 00642023 sw t1,0(s0) + 80007010: 00942823 sw s1,16(s0) + 80007014: 0119a023 sw a7,0(s3) + 80007018: 1007f793 andi a5,a5,256 + 8000701c: 00080463 beqz a6,80007024 <_Z14X6502_RunDebugi+0x61c4> + 80007020: 5680406f j 8000b588 <_Z14X6502_RunDebugi+0xa728> + 80007024: 001c5817 auipc a6,0x1c5 + 80007028: b2480813 addi a6,a6,-1244 # 801cbb48 + 8000702c: 00082683 lw a3,0(a6) + 80007030: 00a41223 sh a0,4(s0) + 80007034: 0016889b addiw a7,a3,1 + 80007038: 01182023 sw a7,0(a6) + 8000703c: 00079463 bnez a5,80007044 <_Z14X6502_RunDebugi+0x61e4> + 80007040: 828fa06f j 80001068 <_Z14X6502_RunDebugi+0x208> + 80007044: fa07049b addiw s1,a4,-96 + 80007048: 0025859b addiw a1,a1,2 + 8000704c: 0026061b addiw a2,a2,2 + 80007050: 0026869b addiw a3,a3,2 + 80007054: 00b42023 sw a1,0(s0) + 80007058: 00942823 sw s1,16(s0) + 8000705c: 00c9a023 sw a2,0(s3) + 80007060: 00d82023 sw a3,0(a6) + 80007064: 00ac8463 beq s9,a0,8000706c <_Z14X6502_RunDebugi+0x620c> + 80007068: 804fa06f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000706c: 88cfa06f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007070: 00351793 slli a5,a0,0x3 + 80007074: 00f907b3 add a5,s2,a5 + 80007078: 0007b783 ld a5,0(a5) + 8000707c: 000780e7 jalr a5 + 80007080: 00445783 lhu a5,4(s0) + 80007084: 00050493 mv s1,a0 + 80007088: 00a40c23 sb a0,24(s0) + 8000708c: 0017879b addiw a5,a5,1 + 80007090: 03079513 slli a0,a5,0x30 + 80007094: 03055513 srli a0,a0,0x30 + 80007098: 00351793 slli a5,a0,0x3 + 8000709c: 00f90933 add s2,s2,a5 + 800070a0: 00093783 ld a5,0(s2) + 800070a4: 00a41223 sh a0,4(s0) + 800070a8: 0004849b sext.w s1,s1 + 800070ac: 000780e7 jalr a5 + 800070b0: 00851613 slli a2,a0,0x8 + 800070b4: 00966733 or a4,a2,s1 + 800070b8: 00445783 lhu a5,4(s0) + 800070bc: 00371693 slli a3,a4,0x3 + 800070c0: 00142717 auipc a4,0x142 + 800070c4: c2070713 addi a4,a4,-992 # 80148ce0 + 800070c8: 00744583 lbu a1,7(s0) + 800070cc: 00644803 lbu a6,6(s0) + 800070d0: 00d70733 add a4,a4,a3 + 800070d4: 00073703 ld a4,0(a4) + 800070d8: 0017879b addiw a5,a5,1 + 800070dc: 00a40c23 sb a0,24(s0) + 800070e0: 00f41223 sh a5,4(s0) + 800070e4: 00966533 or a0,a2,s1 + 800070e8: 00b875b3 and a1,a6,a1 + 800070ec: 000700e7 jalr a4 + 800070f0: 00445503 lhu a0,4(s0) + 800070f4: 01042483 lw s1,16(s0) + 800070f8: 00ac8463 beq s9,a0,80007100 <_Z14X6502_RunDebugi+0x62a0> + 800070fc: f71f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80007100: ff9f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007104: 00351793 slli a5,a0,0x3 + 80007108: 00f907b3 add a5,s2,a5 + 8000710c: 0007b783 ld a5,0(a5) + 80007110: 000780e7 jalr a5 + 80007114: 00445783 lhu a5,4(s0) + 80007118: 00050493 mv s1,a0 + 8000711c: 00a40c23 sb a0,24(s0) + 80007120: 0017879b addiw a5,a5,1 + 80007124: 03079513 slli a0,a5,0x30 + 80007128: 03055513 srli a0,a0,0x30 + 8000712c: 00351793 slli a5,a0,0x3 + 80007130: 00f90933 add s2,s2,a5 + 80007134: 00093783 ld a5,0(s2) + 80007138: 00a41223 sh a0,4(s0) + 8000713c: 0004849b sext.w s1,s1 + 80007140: 000780e7 jalr a5 + 80007144: 00851613 slli a2,a0,0x8 + 80007148: 00966733 or a4,a2,s1 + 8000714c: 00445783 lhu a5,4(s0) + 80007150: 00371693 slli a3,a4,0x3 + 80007154: 00142717 auipc a4,0x142 + 80007158: b8c70713 addi a4,a4,-1140 # 80148ce0 + 8000715c: 00d70733 add a4,a4,a3 + 80007160: 00073703 ld a4,0(a4) + 80007164: 00744583 lbu a1,7(s0) + 80007168: 0017879b addiw a5,a5,1 + 8000716c: 00a40c23 sb a0,24(s0) + 80007170: 00f41223 sh a5,4(s0) + 80007174: 00966533 or a0,a2,s1 + 80007178: 000700e7 jalr a4 + 8000717c: 00445503 lhu a0,4(s0) + 80007180: 01042483 lw s1,16(s0) + 80007184: 00ac8463 beq s9,a0,8000718c <_Z14X6502_RunDebugi+0x632c> + 80007188: ee5f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000718c: f6df906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007190: 00351793 slli a5,a0,0x3 + 80007194: 00f907b3 add a5,s2,a5 + 80007198: 0007b783 ld a5,0(a5) + 8000719c: 000780e7 jalr a5 + 800071a0: 00445783 lhu a5,4(s0) + 800071a4: 00050493 mv s1,a0 + 800071a8: 00a40c23 sb a0,24(s0) + 800071ac: 0017879b addiw a5,a5,1 + 800071b0: 03079513 slli a0,a5,0x30 + 800071b4: 03055513 srli a0,a0,0x30 + 800071b8: 00351793 slli a5,a0,0x3 + 800071bc: 00f90933 add s2,s2,a5 + 800071c0: 00093783 ld a5,0(s2) + 800071c4: 00a41223 sh a0,4(s0) + 800071c8: 0004849b sext.w s1,s1 + 800071cc: 000780e7 jalr a5 + 800071d0: 00851613 slli a2,a0,0x8 + 800071d4: 00966733 or a4,a2,s1 + 800071d8: 00445783 lhu a5,4(s0) + 800071dc: 00371693 slli a3,a4,0x3 + 800071e0: 00142717 auipc a4,0x142 + 800071e4: b0070713 addi a4,a4,-1280 # 80148ce0 + 800071e8: 00d70733 add a4,a4,a3 + 800071ec: 00073703 ld a4,0(a4) + 800071f0: 00644583 lbu a1,6(s0) + 800071f4: 0017879b addiw a5,a5,1 + 800071f8: 00a40c23 sb a0,24(s0) + 800071fc: 00f41223 sh a5,4(s0) + 80007200: 00966533 or a0,a2,s1 + 80007204: 000700e7 jalr a4 + 80007208: 00445503 lhu a0,4(s0) + 8000720c: 01042483 lw s1,16(s0) + 80007210: 00ac8463 beq s9,a0,80007218 <_Z14X6502_RunDebugi+0x63b8> + 80007214: e59f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80007218: ee1f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000721c: 00351793 slli a5,a0,0x3 + 80007220: 00f907b3 add a5,s2,a5 + 80007224: 0007b783 ld a5,0(a5) + 80007228: 000780e7 jalr a5 + 8000722c: 00445783 lhu a5,4(s0) + 80007230: 00050493 mv s1,a0 + 80007234: 00a40c23 sb a0,24(s0) + 80007238: 0017879b addiw a5,a5,1 + 8000723c: 03079513 slli a0,a5,0x30 + 80007240: 03055513 srli a0,a0,0x30 + 80007244: 00351793 slli a5,a0,0x3 + 80007248: 00f90933 add s2,s2,a5 + 8000724c: 00093783 ld a5,0(s2) + 80007250: 00a41223 sh a0,4(s0) + 80007254: 0004849b sext.w s1,s1 + 80007258: 000780e7 jalr a5 + 8000725c: 00851613 slli a2,a0,0x8 + 80007260: 00966733 or a4,a2,s1 + 80007264: 00445783 lhu a5,4(s0) + 80007268: 00371693 slli a3,a4,0x3 + 8000726c: 00142717 auipc a4,0x142 + 80007270: a7470713 addi a4,a4,-1420 # 80148ce0 + 80007274: 00d70733 add a4,a4,a3 + 80007278: 00073703 ld a4,0(a4) + 8000727c: 00844583 lbu a1,8(s0) + 80007280: 0017879b addiw a5,a5,1 + 80007284: 00a40c23 sb a0,24(s0) + 80007288: 00f41223 sh a5,4(s0) + 8000728c: 00966533 or a0,a2,s1 + 80007290: 000700e7 jalr a4 + 80007294: 00445503 lhu a0,4(s0) + 80007298: 01042483 lw s1,16(s0) + 8000729c: 00ac8463 beq s9,a0,800072a4 <_Z14X6502_RunDebugi+0x6444> + 800072a0: dcdf906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800072a4: e55f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800072a8: 00644783 lbu a5,6(s0) + 800072ac: 00744683 lbu a3,7(s0) + 800072b0: 00351713 slli a4,a0,0x3 + 800072b4: 00e90933 add s2,s2,a4 + 800072b8: 00093703 ld a4,0(s2) + 800072bc: fee7e793 ori a5,a5,-18 + 800072c0: 00d7f7b3 and a5,a5,a3 + 800072c4: 00f40323 sb a5,6(s0) + 800072c8: 000700e7 jalr a4 + 800072cc: 00644703 lbu a4,6(s0) + 800072d0: 00050693 mv a3,a0 + 800072d4: 00050617 auipc a2,0x50 + 800072d8: 59c60613 addi a2,a2,1436 # 80057870 <_ZL7ZNTable> + 800072dc: 00e57733 and a4,a0,a4 + 800072e0: 00445503 lhu a0,4(s0) + 800072e4: 00a44783 lbu a5,10(s0) + 800072e8: 00e60633 add a2,a2,a4 + 800072ec: 00064603 lbu a2,0(a2) + 800072f0: 0015051b addiw a0,a0,1 + 800072f4: 07d7f793 andi a5,a5,125 + 800072f8: 03051513 slli a0,a0,0x30 + 800072fc: 03055513 srli a0,a0,0x30 + 80007300: 00c7e7b3 or a5,a5,a2 + 80007304: 00d40c23 sb a3,24(s0) + 80007308: 00a41223 sh a0,4(s0) + 8000730c: 00e40323 sb a4,6(s0) + 80007310: 00f40523 sb a5,10(s0) + 80007314: 01042483 lw s1,16(s0) + 80007318: 00ac8463 beq s9,a0,80007320 <_Z14X6502_RunDebugi+0x64c0> + 8000731c: d51f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80007320: dd9f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007324: 00744683 lbu a3,7(s0) + 80007328: 00050717 auipc a4,0x50 + 8000732c: 54870713 addi a4,a4,1352 # 80057870 <_ZL7ZNTable> + 80007330: 00a44783 lbu a5,10(s0) + 80007334: 00d70733 add a4,a4,a3 + 80007338: 00074703 lbu a4,0(a4) + 8000733c: 07d7f793 andi a5,a5,125 + 80007340: 00d40323 sb a3,6(s0) + 80007344: 00e7e7b3 or a5,a5,a4 + 80007348: 00f40523 sb a5,10(s0) + 8000734c: 01042483 lw s1,16(s0) + 80007350: 00ac8463 beq s9,a0,80007358 <_Z14X6502_RunDebugi+0x64f8> + 80007354: d19f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80007358: da1f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000735c: 00844783 lbu a5,8(s0) + 80007360: 00050697 auipc a3,0x50 + 80007364: 51068693 addi a3,a3,1296 # 80057870 <_ZL7ZNTable> + 80007368: 00a44703 lbu a4,10(s0) + 8000736c: fff7879b addiw a5,a5,-1 + 80007370: 0ff7f793 andi a5,a5,255 + 80007374: 00f686b3 add a3,a3,a5 + 80007378: 0006c683 lbu a3,0(a3) + 8000737c: 07d77713 andi a4,a4,125 + 80007380: 00f40423 sb a5,8(s0) + 80007384: 00d76733 or a4,a4,a3 + 80007388: 00e40523 sb a4,10(s0) + 8000738c: 01042483 lw s1,16(s0) + 80007390: 00ac8463 beq s9,a0,80007398 <_Z14X6502_RunDebugi+0x6538> + 80007394: cd9f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80007398: d61f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000739c: 00351793 slli a5,a0,0x3 + 800073a0: 00f90933 add s2,s2,a5 + 800073a4: 00093783 ld a5,0(s2) + 800073a8: 000780e7 jalr a5 + 800073ac: 00445703 lhu a4,4(s0) + 800073b0: 00644683 lbu a3,6(s0) + 800073b4: 00744603 lbu a2,7(s0) + 800073b8: 0017071b addiw a4,a4,1 + 800073bc: 00050793 mv a5,a0 + 800073c0: 03071513 slli a0,a4,0x30 + 800073c4: 001c2717 auipc a4,0x1c2 + 800073c8: 96470713 addi a4,a4,-1692 # 801c8d28 + 800073cc: 03055513 srli a0,a0,0x30 + 800073d0: 00f70733 add a4,a4,a5 + 800073d4: 00c6f6b3 and a3,a3,a2 + 800073d8: 00f40c23 sb a5,24(s0) + 800073dc: 00a41223 sh a0,4(s0) + 800073e0: 00d70023 sb a3,0(a4) + 800073e4: 01042483 lw s1,16(s0) + 800073e8: 00ac8463 beq s9,a0,800073f0 <_Z14X6502_RunDebugi+0x6590> + 800073ec: c81f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800073f0: d09f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800073f4: 00351793 slli a5,a0,0x3 + 800073f8: 00f90933 add s2,s2,a5 + 800073fc: 00093783 ld a5,0(s2) + 80007400: 000780e7 jalr a5 + 80007404: 00445703 lhu a4,4(s0) + 80007408: 00744683 lbu a3,7(s0) + 8000740c: 00050793 mv a5,a0 + 80007410: 0017071b addiw a4,a4,1 + 80007414: 03071513 slli a0,a4,0x30 + 80007418: 001c2717 auipc a4,0x1c2 + 8000741c: 91070713 addi a4,a4,-1776 # 801c8d28 + 80007420: 03055513 srli a0,a0,0x30 + 80007424: 00f70733 add a4,a4,a5 + 80007428: 00f40c23 sb a5,24(s0) + 8000742c: 00a41223 sh a0,4(s0) + 80007430: 00d70023 sb a3,0(a4) + 80007434: 01042483 lw s1,16(s0) + 80007438: 00ac8463 beq s9,a0,80007440 <_Z14X6502_RunDebugi+0x65e0> + 8000743c: c31f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80007440: cb9f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007444: 00351793 slli a5,a0,0x3 + 80007448: 00f90933 add s2,s2,a5 + 8000744c: 00093783 ld a5,0(s2) + 80007450: 000780e7 jalr a5 + 80007454: 00445703 lhu a4,4(s0) + 80007458: 00644683 lbu a3,6(s0) + 8000745c: 00050793 mv a5,a0 + 80007460: 0017071b addiw a4,a4,1 + 80007464: 03071513 slli a0,a4,0x30 + 80007468: 001c2717 auipc a4,0x1c2 + 8000746c: 8c070713 addi a4,a4,-1856 # 801c8d28 + 80007470: 03055513 srli a0,a0,0x30 + 80007474: 00f70733 add a4,a4,a5 + 80007478: 00f40c23 sb a5,24(s0) + 8000747c: 00a41223 sh a0,4(s0) + 80007480: 00d70023 sb a3,0(a4) + 80007484: 01042483 lw s1,16(s0) + 80007488: 00ac8463 beq s9,a0,80007490 <_Z14X6502_RunDebugi+0x6630> + 8000748c: be1f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80007490: c69f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007494: 00351793 slli a5,a0,0x3 + 80007498: 00f90933 add s2,s2,a5 + 8000749c: 00093783 ld a5,0(s2) + 800074a0: 000780e7 jalr a5 + 800074a4: 00445703 lhu a4,4(s0) + 800074a8: 00844683 lbu a3,8(s0) + 800074ac: 00050793 mv a5,a0 + 800074b0: 0017071b addiw a4,a4,1 + 800074b4: 03071513 slli a0,a4,0x30 + 800074b8: 001c2717 auipc a4,0x1c2 + 800074bc: 87070713 addi a4,a4,-1936 # 801c8d28 + 800074c0: 03055513 srli a0,a0,0x30 + 800074c4: 00f70733 add a4,a4,a5 + 800074c8: 00f40c23 sb a5,24(s0) + 800074cc: 00a41223 sh a0,4(s0) + 800074d0: 00d70023 sb a3,0(a4) + 800074d4: 01042483 lw s1,16(s0) + 800074d8: 00ac8463 beq s9,a0,800074e0 <_Z14X6502_RunDebugi+0x6680> + 800074dc: b91f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800074e0: c19f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800074e4: 00351793 slli a5,a0,0x3 + 800074e8: 00f90933 add s2,s2,a5 + 800074ec: 00093783 ld a5,0(s2) + 800074f0: 000780e7 jalr a5 + 800074f4: 00744583 lbu a1,7(s0) + 800074f8: 001c2697 auipc a3,0x1c2 + 800074fc: 83068693 addi a3,a3,-2000 # 801c8d28 + 80007500: 00445603 lhu a2,4(s0) + 80007504: 00a587bb addw a5,a1,a0 + 80007508: 00178713 addi a4,a5,1 + 8000750c: 0ff77713 andi a4,a4,255 + 80007510: 00e68733 add a4,a3,a4 + 80007514: 0ff7f793 andi a5,a5,255 + 80007518: 00074803 lbu a6,0(a4) + 8000751c: 00f687b3 add a5,a3,a5 + 80007520: 0007c783 lbu a5,0(a5) + 80007524: 0088151b slliw a0,a6,0x8 + 80007528: 00644683 lbu a3,6(s0) + 8000752c: 00f56533 or a0,a0,a5 + 80007530: 03051793 slli a5,a0,0x30 + 80007534: 02d7d713 srli a4,a5,0x2d + 80007538: 00141797 auipc a5,0x141 + 8000753c: 7a878793 addi a5,a5,1960 # 80148ce0 + 80007540: 00e787b3 add a5,a5,a4 + 80007544: 0007b783 ld a5,0(a5) + 80007548: 0016061b addiw a2,a2,1 + 8000754c: 0005051b sext.w a0,a0 + 80007550: 00c41223 sh a2,4(s0) + 80007554: 01040c23 sb a6,24(s0) + 80007558: 00d5f5b3 and a1,a1,a3 + 8000755c: 000780e7 jalr a5 + 80007560: 00445503 lhu a0,4(s0) + 80007564: 01042483 lw s1,16(s0) + 80007568: 00ac8463 beq s9,a0,80007570 <_Z14X6502_RunDebugi+0x6710> + 8000756c: b01f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80007570: b89f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007574: 00351793 slli a5,a0,0x3 + 80007578: 00f90933 add s2,s2,a5 + 8000757c: 00093783 ld a5,0(s2) + 80007580: 000780e7 jalr a5 + 80007584: 00744783 lbu a5,7(s0) + 80007588: 001c1697 auipc a3,0x1c1 + 8000758c: 7a068693 addi a3,a3,1952 # 801c8d28 + 80007590: 00445603 lhu a2,4(s0) + 80007594: 00a787bb addw a5,a5,a0 + 80007598: 00178713 addi a4,a5,1 + 8000759c: 0ff77713 andi a4,a4,255 + 800075a0: 00e68733 add a4,a3,a4 + 800075a4: 0ff7f793 andi a5,a5,255 + 800075a8: 00074803 lbu a6,0(a4) + 800075ac: 00f687b3 add a5,a3,a5 + 800075b0: 0007c783 lbu a5,0(a5) + 800075b4: 0088151b slliw a0,a6,0x8 + 800075b8: 00644583 lbu a1,6(s0) + 800075bc: 00f56533 or a0,a0,a5 + 800075c0: 03051793 slli a5,a0,0x30 + 800075c4: 02d7d713 srli a4,a5,0x2d + 800075c8: 00141797 auipc a5,0x141 + 800075cc: 71878793 addi a5,a5,1816 # 80148ce0 + 800075d0: 00e787b3 add a5,a5,a4 + 800075d4: 0007b783 ld a5,0(a5) + 800075d8: 0016061b addiw a2,a2,1 + 800075dc: 0005051b sext.w a0,a0 + 800075e0: 00c41223 sh a2,4(s0) + 800075e4: 01040c23 sb a6,24(s0) + 800075e8: 000780e7 jalr a5 + 800075ec: 00445503 lhu a0,4(s0) + 800075f0: 01042483 lw s1,16(s0) + 800075f4: 00ac8463 beq s9,a0,800075fc <_Z14X6502_RunDebugi+0x679c> + 800075f8: a75f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800075fc: afdf906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007600: 00351793 slli a5,a0,0x3 + 80007604: 00f907b3 add a5,s2,a5 + 80007608: 0007b783 ld a5,0(a5) + 8000760c: 000780e7 jalr a5 + 80007610: 00445783 lhu a5,4(s0) + 80007614: 00050713 mv a4,a0 + 80007618: 00a40c23 sb a0,24(s0) + 8000761c: 0017879b addiw a5,a5,1 + 80007620: 03079513 slli a0,a5,0x30 + 80007624: 03055513 srli a0,a0,0x30 + 80007628: 00351793 slli a5,a0,0x3 + 8000762c: 00f907b3 add a5,s2,a5 + 80007630: 0007b783 ld a5,0(a5) + 80007634: 00a41223 sh a0,4(s0) + 80007638: 0007049b sext.w s1,a4 + 8000763c: 000780e7 jalr a5 + 80007640: 00744703 lbu a4,7(s0) + 80007644: 00851793 slli a5,a0,0x8 + 80007648: 0097e7b3 or a5,a5,s1 + 8000764c: 00f704bb addw s1,a4,a5 + 80007650: 0ff4f613 andi a2,s1,255 + 80007654: 0187f7b3 and a5,a5,s8 + 80007658: 00f66733 or a4,a2,a5 + 8000765c: 00445683 lhu a3,4(s0) + 80007660: 00371713 slli a4,a4,0x3 + 80007664: 00e90733 add a4,s2,a4 + 80007668: 00073583 ld a1,0(a4) + 8000766c: 03049493 slli s1,s1,0x30 + 80007670: 0016871b addiw a4,a3,1 + 80007674: 0304d493 srli s1,s1,0x30 + 80007678: 00349d13 slli s10,s1,0x3 + 8000767c: 00e41223 sh a4,4(s0) + 80007680: 00a40c23 sb a0,24(s0) + 80007684: 00f66533 or a0,a2,a5 + 80007688: 000580e7 jalr a1 + 8000768c: 01a90933 add s2,s2,s10 + 80007690: 00093783 ld a5,0(s2) + 80007694: 00a40c23 sb a0,24(s0) + 80007698: 00141917 auipc s2,0x141 + 8000769c: 64890913 addi s2,s2,1608 # 80148ce0 + 800076a0: 00048513 mv a0,s1 + 800076a4: 000780e7 jalr a5 + 800076a8: 01a90933 add s2,s2,s10 + 800076ac: 00093783 ld a5,0(s2) + 800076b0: 00050d13 mv s10,a0 + 800076b4: 00050593 mv a1,a0 + 800076b8: 01a40c23 sb s10,24(s0) + 800076bc: 00048513 mv a0,s1 + 800076c0: 000780e7 jalr a5 + 800076c4: 00a44783 lbu a5,10(s0) + 800076c8: 401d571b sraiw a4,s10,0x1 + 800076cc: 00050517 auipc a0,0x50 + 800076d0: 1a450513 addi a0,a0,420 # 80057870 <_ZL7ZNTable> + 800076d4: 00779613 slli a2,a5,0x7 + 800076d8: 00e66633 or a2,a2,a4 + 800076dc: 0ff67693 andi a3,a2,255 + 800076e0: 00d50733 add a4,a0,a3 + 800076e4: 00074583 lbu a1,0(a4) + 800076e8: 07c7f793 andi a5,a5,124 + 800076ec: 00644703 lbu a4,6(s0) + 800076f0: 001d7d13 andi s10,s10,1 + 800076f4: 01a7e7b3 or a5,a5,s10 + 800076f8: 00b7e7b3 or a5,a5,a1 + 800076fc: 0017f593 andi a1,a5,1 + 80007700: 00d706bb addw a3,a4,a3 + 80007704: 00b686bb addw a3,a3,a1 + 80007708: 0006881b sext.w a6,a3 + 8000770c: 0ff67593 andi a1,a2,255 + 80007710: 0ff87893 andi a7,a6,255 + 80007714: 00b74633 xor a2,a4,a1 + 80007718: 01150533 add a0,a0,a7 + 8000771c: 00054503 lbu a0,0(a0) + 80007720: fff64613 not a2,a2 + 80007724: 0ff67613 andi a2,a2,255 + 80007728: 00d74733 xor a4,a4,a3 + 8000772c: 00c77733 and a4,a4,a2 + 80007730: 03c7f793 andi a5,a5,60 + 80007734: 00a7e7b3 or a5,a5,a0 + 80007738: 0086d69b srliw a3,a3,0x8 + 8000773c: 0017571b srliw a4,a4,0x1 + 80007740: 04077713 andi a4,a4,64 + 80007744: 00d7e7b3 or a5,a5,a3 + 80007748: 00093683 ld a3,0(s2) + 8000774c: 00f767b3 or a5,a4,a5 + 80007750: 00048513 mv a0,s1 + 80007754: 01040323 sb a6,6(s0) + 80007758: 00f40523 sb a5,10(s0) + 8000775c: 000680e7 jalr a3 + 80007760: 00445503 lhu a0,4(s0) + 80007764: 01042483 lw s1,16(s0) + 80007768: 00ac8463 beq s9,a0,80007770 <_Z14X6502_RunDebugi+0x6910> + 8000776c: 901f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80007770: 989f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007774: 00351793 slli a5,a0,0x3 + 80007778: 00f907b3 add a5,s2,a5 + 8000777c: 0007b783 ld a5,0(a5) + 80007780: 000780e7 jalr a5 + 80007784: 00445783 lhu a5,4(s0) + 80007788: 00050713 mv a4,a0 + 8000778c: 00a40c23 sb a0,24(s0) + 80007790: 0017879b addiw a5,a5,1 + 80007794: 03079513 slli a0,a5,0x30 + 80007798: 03055513 srli a0,a0,0x30 + 8000779c: 00351793 slli a5,a0,0x3 + 800077a0: 00f907b3 add a5,s2,a5 + 800077a4: 0007b783 ld a5,0(a5) + 800077a8: 00a41223 sh a0,4(s0) + 800077ac: 0007049b sext.w s1,a4 + 800077b0: 000780e7 jalr a5 + 800077b4: 00744683 lbu a3,7(s0) + 800077b8: 00851793 slli a5,a0,0x8 + 800077bc: 0097e7b3 or a5,a5,s1 + 800077c0: 00f686bb addw a3,a3,a5 + 800077c4: 0ff6f593 andi a1,a3,255 + 800077c8: 0187f7b3 and a5,a5,s8 + 800077cc: 00f5e733 or a4,a1,a5 + 800077d0: 00445603 lhu a2,4(s0) + 800077d4: 00371713 slli a4,a4,0x3 + 800077d8: 00e90733 add a4,s2,a4 + 800077dc: 00073803 ld a6,0(a4) + 800077e0: 03069d13 slli s10,a3,0x30 + 800077e4: 0016071b addiw a4,a2,1 + 800077e8: 030d5d13 srli s10,s10,0x30 + 800077ec: 00e41223 sh a4,4(s0) + 800077f0: 003d1493 slli s1,s10,0x3 + 800077f4: 00a40c23 sb a0,24(s0) + 800077f8: 00f5e533 or a0,a1,a5 + 800077fc: 000800e7 jalr a6 + 80007800: 00990933 add s2,s2,s1 + 80007804: 00093783 ld a5,0(s2) + 80007808: 00a40c23 sb a0,24(s0) + 8000780c: 00141917 auipc s2,0x141 + 80007810: 4d490913 addi s2,s2,1236 # 80148ce0 + 80007814: 000d0513 mv a0,s10 + 80007818: 000780e7 jalr a5 + 8000781c: 00990933 add s2,s2,s1 + 80007820: 00093783 ld a5,0(s2) + 80007824: 00050493 mv s1,a0 + 80007828: 00050593 mv a1,a0 + 8000782c: 00940c23 sb s1,24(s0) + 80007830: 000d0513 mv a0,s10 + 80007834: 000780e7 jalr a5 + 80007838: 00a44783 lbu a5,10(s0) + 8000783c: 4014d71b sraiw a4,s1,0x1 + 80007840: 0014f493 andi s1,s1,1 + 80007844: 00779593 slli a1,a5,0x7 + 80007848: 00e5e5b3 or a1,a1,a4 + 8000784c: 0ff5f693 andi a3,a1,255 + 80007850: 00050717 auipc a4,0x50 + 80007854: 02070713 addi a4,a4,32 # 80057870 <_ZL7ZNTable> + 80007858: 00d70733 add a4,a4,a3 + 8000785c: 00074683 lbu a3,0(a4) + 80007860: 07c7f793 andi a5,a5,124 + 80007864: 0097e7b3 or a5,a5,s1 + 80007868: 00093703 ld a4,0(s2) + 8000786c: 00d7e7b3 or a5,a5,a3 + 80007870: 000d0513 mv a0,s10 + 80007874: 00f40523 sb a5,10(s0) + 80007878: 0ff5f593 andi a1,a1,255 + 8000787c: 000700e7 jalr a4 + 80007880: 00445503 lhu a0,4(s0) + 80007884: 01042483 lw s1,16(s0) + 80007888: 00ac8463 beq s9,a0,80007890 <_Z14X6502_RunDebugi+0x6a30> + 8000788c: fe0f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80007890: 869f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007894: 00351793 slli a5,a0,0x3 + 80007898: 00f907b3 add a5,s2,a5 + 8000789c: 0007b783 ld a5,0(a5) + 800078a0: 000780e7 jalr a5 + 800078a4: 00445783 lhu a5,4(s0) + 800078a8: 00050713 mv a4,a0 + 800078ac: 00a40c23 sb a0,24(s0) + 800078b0: 0017879b addiw a5,a5,1 + 800078b4: 03079513 slli a0,a5,0x30 + 800078b8: 03055513 srli a0,a0,0x30 + 800078bc: 00351793 slli a5,a0,0x3 + 800078c0: 00f907b3 add a5,s2,a5 + 800078c4: 0007b783 ld a5,0(a5) + 800078c8: 00a41223 sh a0,4(s0) + 800078cc: 0007049b sext.w s1,a4 + 800078d0: 000780e7 jalr a5 + 800078d4: 00744703 lbu a4,7(s0) + 800078d8: 00445683 lhu a3,4(s0) + 800078dc: 00851793 slli a5,a0,0x8 + 800078e0: 0097e7b3 or a5,a5,s1 + 800078e4: 00f7073b addw a4,a4,a5 + 800078e8: 0016869b addiw a3,a3,1 + 800078ec: 00e7c7b3 xor a5,a5,a4 + 800078f0: 00a40c23 sb a0,24(s0) + 800078f4: 00d41223 sh a3,4(s0) + 800078f8: 1007f793 andi a5,a5,256 + 800078fc: 0007049b sext.w s1,a4 + 80007900: 06078463 beqz a5,80007968 <_Z14X6502_RunDebugi+0x6b08> + 80007904: 03071493 slli s1,a4,0x30 + 80007908: 0304d493 srli s1,s1,0x30 + 8000790c: 1004c793 xori a5,s1,256 + 80007910: 00379793 slli a5,a5,0x3 + 80007914: 00f907b3 add a5,s2,a5 + 80007918: 0007b783 ld a5,0(a5) + 8000791c: 1004c513 xori a0,s1,256 + 80007920: 000780e7 jalr a5 + 80007924: 00042683 lw a3,0(s0) + 80007928: 01042703 lw a4,16(s0) + 8000792c: 0009a783 lw a5,0(s3) + 80007930: 000a4603 lbu a2,0(s4) + 80007934: 0016869b addiw a3,a3,1 + 80007938: fd07071b addiw a4,a4,-48 + 8000793c: 0017879b addiw a5,a5,1 + 80007940: 00a40c23 sb a0,24(s0) + 80007944: 00d42023 sw a3,0(s0) + 80007948: 00e42823 sw a4,16(s0) + 8000794c: 00f9a023 sw a5,0(s3) + 80007950: 00061c63 bnez a2,80007968 <_Z14X6502_RunDebugi+0x6b08> + 80007954: 001c4717 auipc a4,0x1c4 + 80007958: 1f470713 addi a4,a4,500 # 801cbb48 + 8000795c: 00072783 lw a5,0(a4) + 80007960: 0017879b addiw a5,a5,1 + 80007964: 00f72023 sw a5,0(a4) + 80007968: 02049793 slli a5,s1,0x20 + 8000796c: 01d7d793 srli a5,a5,0x1d + 80007970: 00f90933 add s2,s2,a5 + 80007974: 00093783 ld a5,0(s2) + 80007978: 00048513 mv a0,s1 + 8000797c: 000780e7 jalr a5 + 80007980: 00644783 lbu a5,6(s0) + 80007984: 00a44703 lbu a4,10(s0) + 80007988: 00050593 mv a1,a0 + 8000798c: 00a786bb addw a3,a5,a0 + 80007990: 00177613 andi a2,a4,1 + 80007994: 00c686bb addw a3,a3,a2 + 80007998: 0006881b sext.w a6,a3 + 8000799c: 00a7c633 xor a2,a5,a0 + 800079a0: 0ff87893 andi a7,a6,255 + 800079a4: 00050517 auipc a0,0x50 + 800079a8: ecc50513 addi a0,a0,-308 # 80057870 <_ZL7ZNTable> + 800079ac: 01150533 add a0,a0,a7 + 800079b0: 00054503 lbu a0,0(a0) + 800079b4: fff64613 not a2,a2 + 800079b8: 00d7c7b3 xor a5,a5,a3 + 800079bc: 0ff67613 andi a2,a2,255 + 800079c0: 00c7f7b3 and a5,a5,a2 + 800079c4: 03c77713 andi a4,a4,60 + 800079c8: 00a76733 or a4,a4,a0 + 800079cc: 0017d79b srliw a5,a5,0x1 + 800079d0: 0086d69b srliw a3,a3,0x8 + 800079d4: 0407f793 andi a5,a5,64 + 800079d8: 00d76733 or a4,a4,a3 + 800079dc: 00445503 lhu a0,4(s0) + 800079e0: 00e7e7b3 or a5,a5,a4 + 800079e4: 00b40c23 sb a1,24(s0) + 800079e8: 01040323 sb a6,6(s0) + 800079ec: 00f40523 sb a5,10(s0) + 800079f0: 01042483 lw s1,16(s0) + 800079f4: 00ac8463 beq s9,a0,800079fc <_Z14X6502_RunDebugi+0x6b9c> + 800079f8: e74f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800079fc: efcf906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007a00: 00351793 slli a5,a0,0x3 + 80007a04: 00f907b3 add a5,s2,a5 + 80007a08: 0007b783 ld a5,0(a5) + 80007a0c: 000780e7 jalr a5 + 80007a10: 00445783 lhu a5,4(s0) + 80007a14: 00050713 mv a4,a0 + 80007a18: 00a40c23 sb a0,24(s0) + 80007a1c: 0017879b addiw a5,a5,1 + 80007a20: 03079513 slli a0,a5,0x30 + 80007a24: 03055513 srli a0,a0,0x30 + 80007a28: 00351793 slli a5,a0,0x3 + 80007a2c: 00f907b3 add a5,s2,a5 + 80007a30: 0007b783 ld a5,0(a5) + 80007a34: 00a41223 sh a0,4(s0) + 80007a38: 0007049b sext.w s1,a4 + 80007a3c: 000780e7 jalr a5 + 80007a40: 00844703 lbu a4,8(s0) + 80007a44: 00851793 slli a5,a0,0x8 + 80007a48: 0097e7b3 or a5,a5,s1 + 80007a4c: 00f704bb addw s1,a4,a5 + 80007a50: 0ff4f613 andi a2,s1,255 + 80007a54: 0187f7b3 and a5,a5,s8 + 80007a58: 00f66733 or a4,a2,a5 + 80007a5c: 00445683 lhu a3,4(s0) + 80007a60: 00371713 slli a4,a4,0x3 + 80007a64: 00e90733 add a4,s2,a4 + 80007a68: 00073583 ld a1,0(a4) + 80007a6c: 03049493 slli s1,s1,0x30 + 80007a70: 0016871b addiw a4,a3,1 + 80007a74: 0304d493 srli s1,s1,0x30 + 80007a78: 00349d13 slli s10,s1,0x3 + 80007a7c: 00e41223 sh a4,4(s0) + 80007a80: 00a40c23 sb a0,24(s0) + 80007a84: 00f66533 or a0,a2,a5 + 80007a88: 000580e7 jalr a1 + 80007a8c: 01a90933 add s2,s2,s10 + 80007a90: 00093783 ld a5,0(s2) + 80007a94: 00a40c23 sb a0,24(s0) + 80007a98: 00141917 auipc s2,0x141 + 80007a9c: 24890913 addi s2,s2,584 # 80148ce0 + 80007aa0: 00048513 mv a0,s1 + 80007aa4: 000780e7 jalr a5 + 80007aa8: 01a90933 add s2,s2,s10 + 80007aac: 00093783 ld a5,0(s2) + 80007ab0: 00050d13 mv s10,a0 + 80007ab4: 00050593 mv a1,a0 + 80007ab8: 01a40c23 sb s10,24(s0) + 80007abc: 00048513 mv a0,s1 + 80007ac0: 000780e7 jalr a5 + 80007ac4: 00a44783 lbu a5,10(s0) + 80007ac8: 401d571b sraiw a4,s10,0x1 + 80007acc: 00050517 auipc a0,0x50 + 80007ad0: da450513 addi a0,a0,-604 # 80057870 <_ZL7ZNTable> + 80007ad4: 00779613 slli a2,a5,0x7 + 80007ad8: 00e66633 or a2,a2,a4 + 80007adc: 0ff67693 andi a3,a2,255 + 80007ae0: 00d50733 add a4,a0,a3 + 80007ae4: 00074583 lbu a1,0(a4) + 80007ae8: 07c7f793 andi a5,a5,124 + 80007aec: 00644703 lbu a4,6(s0) + 80007af0: 001d7d13 andi s10,s10,1 + 80007af4: 01a7e7b3 or a5,a5,s10 + 80007af8: 00b7e7b3 or a5,a5,a1 + 80007afc: 0017f593 andi a1,a5,1 + 80007b00: 00d706bb addw a3,a4,a3 + 80007b04: 00b686bb addw a3,a3,a1 + 80007b08: 0006881b sext.w a6,a3 + 80007b0c: 0ff67593 andi a1,a2,255 + 80007b10: 0ff87893 andi a7,a6,255 + 80007b14: 00b74633 xor a2,a4,a1 + 80007b18: 01150533 add a0,a0,a7 + 80007b1c: 00054503 lbu a0,0(a0) + 80007b20: fff64613 not a2,a2 + 80007b24: 0ff67613 andi a2,a2,255 + 80007b28: 00d74733 xor a4,a4,a3 + 80007b2c: 00c77733 and a4,a4,a2 + 80007b30: 03c7f793 andi a5,a5,60 + 80007b34: 00a7e7b3 or a5,a5,a0 + 80007b38: 0086d69b srliw a3,a3,0x8 + 80007b3c: 0017571b srliw a4,a4,0x1 + 80007b40: 04077713 andi a4,a4,64 + 80007b44: 00d7e7b3 or a5,a5,a3 + 80007b48: 00093683 ld a3,0(s2) + 80007b4c: 00f767b3 or a5,a4,a5 + 80007b50: 00048513 mv a0,s1 + 80007b54: 01040323 sb a6,6(s0) + 80007b58: 00f40523 sb a5,10(s0) + 80007b5c: 000680e7 jalr a3 + 80007b60: 00445503 lhu a0,4(s0) + 80007b64: 01042483 lw s1,16(s0) + 80007b68: 00ac8463 beq s9,a0,80007b70 <_Z14X6502_RunDebugi+0x6d10> + 80007b6c: d00f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80007b70: d88f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007b74: 00351793 slli a5,a0,0x3 + 80007b78: 00f907b3 add a5,s2,a5 + 80007b7c: 0007b783 ld a5,0(a5) + 80007b80: 000780e7 jalr a5 + 80007b84: 00445783 lhu a5,4(s0) + 80007b88: 00050713 mv a4,a0 + 80007b8c: 00a40c23 sb a0,24(s0) + 80007b90: 0017879b addiw a5,a5,1 + 80007b94: 03079513 slli a0,a5,0x30 + 80007b98: 03055513 srli a0,a0,0x30 + 80007b9c: 00351793 slli a5,a0,0x3 + 80007ba0: 00f907b3 add a5,s2,a5 + 80007ba4: 0007b783 ld a5,0(a5) + 80007ba8: 00a41223 sh a0,4(s0) + 80007bac: 0007049b sext.w s1,a4 + 80007bb0: 000780e7 jalr a5 + 80007bb4: 00844703 lbu a4,8(s0) + 80007bb8: 00445683 lhu a3,4(s0) + 80007bbc: 00851793 slli a5,a0,0x8 + 80007bc0: 0097e7b3 or a5,a5,s1 + 80007bc4: 00f7073b addw a4,a4,a5 + 80007bc8: 0016869b addiw a3,a3,1 + 80007bcc: 00e7c7b3 xor a5,a5,a4 + 80007bd0: 00a40c23 sb a0,24(s0) + 80007bd4: 00d41223 sh a3,4(s0) + 80007bd8: 1007f793 andi a5,a5,256 + 80007bdc: 0007049b sext.w s1,a4 + 80007be0: 06078463 beqz a5,80007c48 <_Z14X6502_RunDebugi+0x6de8> + 80007be4: 03071493 slli s1,a4,0x30 + 80007be8: 0304d493 srli s1,s1,0x30 + 80007bec: 1004c793 xori a5,s1,256 + 80007bf0: 00379793 slli a5,a5,0x3 + 80007bf4: 00f907b3 add a5,s2,a5 + 80007bf8: 0007b783 ld a5,0(a5) + 80007bfc: 1004c513 xori a0,s1,256 + 80007c00: 000780e7 jalr a5 + 80007c04: 00042683 lw a3,0(s0) + 80007c08: 01042703 lw a4,16(s0) + 80007c0c: 0009a783 lw a5,0(s3) + 80007c10: 000a4603 lbu a2,0(s4) + 80007c14: 0016869b addiw a3,a3,1 + 80007c18: fd07071b addiw a4,a4,-48 + 80007c1c: 0017879b addiw a5,a5,1 + 80007c20: 00a40c23 sb a0,24(s0) + 80007c24: 00d42023 sw a3,0(s0) + 80007c28: 00e42823 sw a4,16(s0) + 80007c2c: 00f9a023 sw a5,0(s3) + 80007c30: 00061c63 bnez a2,80007c48 <_Z14X6502_RunDebugi+0x6de8> + 80007c34: 001c4717 auipc a4,0x1c4 + 80007c38: f1470713 addi a4,a4,-236 # 801cbb48 + 80007c3c: 00072783 lw a5,0(a4) + 80007c40: 0017879b addiw a5,a5,1 + 80007c44: 00f72023 sw a5,0(a4) + 80007c48: 02049793 slli a5,s1,0x20 + 80007c4c: 01d7d793 srli a5,a5,0x1d + 80007c50: 00f90933 add s2,s2,a5 + 80007c54: 00093783 ld a5,0(s2) + 80007c58: 00048513 mv a0,s1 + 80007c5c: 000780e7 jalr a5 + 80007c60: 00644783 lbu a5,6(s0) + 80007c64: 00a44703 lbu a4,10(s0) + 80007c68: 00050593 mv a1,a0 + 80007c6c: 00a786bb addw a3,a5,a0 + 80007c70: 00177613 andi a2,a4,1 + 80007c74: 00c686bb addw a3,a3,a2 + 80007c78: 0006881b sext.w a6,a3 + 80007c7c: 00a7c633 xor a2,a5,a0 + 80007c80: 0ff87893 andi a7,a6,255 + 80007c84: 00050517 auipc a0,0x50 + 80007c88: bec50513 addi a0,a0,-1044 # 80057870 <_ZL7ZNTable> + 80007c8c: 01150533 add a0,a0,a7 + 80007c90: 00054503 lbu a0,0(a0) + 80007c94: fff64613 not a2,a2 + 80007c98: 00d7c7b3 xor a5,a5,a3 + 80007c9c: 0ff67613 andi a2,a2,255 + 80007ca0: 00c7f7b3 and a5,a5,a2 + 80007ca4: 03c77713 andi a4,a4,60 + 80007ca8: 00a76733 or a4,a4,a0 + 80007cac: 0017d79b srliw a5,a5,0x1 + 80007cb0: 0086d69b srliw a3,a3,0x8 + 80007cb4: 0407f793 andi a5,a5,64 + 80007cb8: 00d76733 or a4,a4,a3 + 80007cbc: 00445503 lhu a0,4(s0) + 80007cc0: 00e7e7b3 or a5,a5,a4 + 80007cc4: 00b40c23 sb a1,24(s0) + 80007cc8: 01040323 sb a6,6(s0) + 80007ccc: 00f40523 sb a5,10(s0) + 80007cd0: 01042483 lw s1,16(s0) + 80007cd4: 00ac8463 beq s9,a0,80007cdc <_Z14X6502_RunDebugi+0x6e7c> + 80007cd8: b94f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80007cdc: c1cf906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007ce0: 00a44783 lbu a5,10(s0) + 80007ce4: 01042483 lw s1,16(s0) + 80007ce8: 0047e793 ori a5,a5,4 + 80007cec: 00f40523 sb a5,10(s0) + 80007cf0: 00ac8463 beq s9,a0,80007cf8 <_Z14X6502_RunDebugi+0x6e98> + 80007cf4: b78f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80007cf8: c00f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007cfc: 00351793 slli a5,a0,0x3 + 80007d00: 00f907b3 add a5,s2,a5 + 80007d04: 0007b783 ld a5,0(a5) + 80007d08: 000780e7 jalr a5 + 80007d0c: 00445783 lhu a5,4(s0) + 80007d10: 00050713 mv a4,a0 + 80007d14: 00a40c23 sb a0,24(s0) + 80007d18: 0017879b addiw a5,a5,1 + 80007d1c: 03079513 slli a0,a5,0x30 + 80007d20: 03055513 srli a0,a0,0x30 + 80007d24: 00351793 slli a5,a0,0x3 + 80007d28: 00f907b3 add a5,s2,a5 + 80007d2c: 0007b783 ld a5,0(a5) + 80007d30: 00a41223 sh a0,4(s0) + 80007d34: 0007049b sext.w s1,a4 + 80007d38: 000780e7 jalr a5 + 80007d3c: 00844703 lbu a4,8(s0) + 80007d40: 00445683 lhu a3,4(s0) + 80007d44: 00851793 slli a5,a0,0x8 + 80007d48: 0097e7b3 or a5,a5,s1 + 80007d4c: 00f7073b addw a4,a4,a5 + 80007d50: 0016869b addiw a3,a3,1 + 80007d54: 00e7c7b3 xor a5,a5,a4 + 80007d58: 00a40c23 sb a0,24(s0) + 80007d5c: 00d41223 sh a3,4(s0) + 80007d60: 1007f793 andi a5,a5,256 + 80007d64: 0007049b sext.w s1,a4 + 80007d68: 06078463 beqz a5,80007dd0 <_Z14X6502_RunDebugi+0x6f70> + 80007d6c: 03071493 slli s1,a4,0x30 + 80007d70: 0304d493 srli s1,s1,0x30 + 80007d74: 1004c793 xori a5,s1,256 + 80007d78: 00379793 slli a5,a5,0x3 + 80007d7c: 00f907b3 add a5,s2,a5 + 80007d80: 0007b783 ld a5,0(a5) + 80007d84: 1004c513 xori a0,s1,256 + 80007d88: 000780e7 jalr a5 + 80007d8c: 00042683 lw a3,0(s0) + 80007d90: 01042703 lw a4,16(s0) + 80007d94: 0009a783 lw a5,0(s3) + 80007d98: 000a4603 lbu a2,0(s4) + 80007d9c: 0016869b addiw a3,a3,1 + 80007da0: fd07071b addiw a4,a4,-48 + 80007da4: 0017879b addiw a5,a5,1 + 80007da8: 00a40c23 sb a0,24(s0) + 80007dac: 00d42023 sw a3,0(s0) + 80007db0: 00e42823 sw a4,16(s0) + 80007db4: 00f9a023 sw a5,0(s3) + 80007db8: 00061c63 bnez a2,80007dd0 <_Z14X6502_RunDebugi+0x6f70> + 80007dbc: 001c4717 auipc a4,0x1c4 + 80007dc0: d8c70713 addi a4,a4,-628 # 801cbb48 + 80007dc4: 00072783 lw a5,0(a4) + 80007dc8: 0017879b addiw a5,a5,1 + 80007dcc: 00f72023 sw a5,0(a4) + 80007dd0: 02049793 slli a5,s1,0x20 + 80007dd4: 01d7d793 srli a5,a5,0x1d + 80007dd8: 00f90933 add s2,s2,a5 + 80007ddc: 00093783 ld a5,0(s2) + 80007de0: 00048513 mv a0,s1 + 80007de4: 000780e7 jalr a5 + 80007de8: 00050697 auipc a3,0x50 + 80007dec: a8868693 addi a3,a3,-1400 # 80057870 <_ZL7ZNTable> + 80007df0: 00a44783 lbu a5,10(s0) + 80007df4: 00a686b3 add a3,a3,a0 + 80007df8: 0006c683 lbu a3,0(a3) + 80007dfc: 00050713 mv a4,a0 + 80007e00: 07d7f793 andi a5,a5,125 + 80007e04: 00445503 lhu a0,4(s0) + 80007e08: 00d7e7b3 or a5,a5,a3 + 80007e0c: 00e40c23 sb a4,24(s0) + 80007e10: 00e403a3 sb a4,7(s0) + 80007e14: 00f40523 sb a5,10(s0) + 80007e18: 01042483 lw s1,16(s0) + 80007e1c: 00ac8463 beq s9,a0,80007e24 <_Z14X6502_RunDebugi+0x6fc4> + 80007e20: a4cf906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80007e24: ad4f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007e28: 00351793 slli a5,a0,0x3 + 80007e2c: 00f907b3 add a5,s2,a5 + 80007e30: 0007b783 ld a5,0(a5) + 80007e34: 000780e7 jalr a5 + 80007e38: 00445783 lhu a5,4(s0) + 80007e3c: 00050713 mv a4,a0 + 80007e40: 00a40c23 sb a0,24(s0) + 80007e44: 0017879b addiw a5,a5,1 + 80007e48: 03079513 slli a0,a5,0x30 + 80007e4c: 03055513 srli a0,a0,0x30 + 80007e50: 00351793 slli a5,a0,0x3 + 80007e54: 00f907b3 add a5,s2,a5 + 80007e58: 0007b783 ld a5,0(a5) + 80007e5c: 00a41223 sh a0,4(s0) + 80007e60: 0007049b sext.w s1,a4 + 80007e64: 000780e7 jalr a5 + 80007e68: 00744703 lbu a4,7(s0) + 80007e6c: 00445683 lhu a3,4(s0) + 80007e70: 00851793 slli a5,a0,0x8 + 80007e74: 0097e7b3 or a5,a5,s1 + 80007e78: 00f7073b addw a4,a4,a5 + 80007e7c: 0016869b addiw a3,a3,1 + 80007e80: 00e7c7b3 xor a5,a5,a4 + 80007e84: 00a40c23 sb a0,24(s0) + 80007e88: 00d41223 sh a3,4(s0) + 80007e8c: 1007f793 andi a5,a5,256 + 80007e90: 0007049b sext.w s1,a4 + 80007e94: 06078463 beqz a5,80007efc <_Z14X6502_RunDebugi+0x709c> + 80007e98: 03071493 slli s1,a4,0x30 + 80007e9c: 0304d493 srli s1,s1,0x30 + 80007ea0: 1004c793 xori a5,s1,256 + 80007ea4: 00379793 slli a5,a5,0x3 + 80007ea8: 00f907b3 add a5,s2,a5 + 80007eac: 0007b783 ld a5,0(a5) + 80007eb0: 1004c513 xori a0,s1,256 + 80007eb4: 000780e7 jalr a5 + 80007eb8: 00042683 lw a3,0(s0) + 80007ebc: 01042703 lw a4,16(s0) + 80007ec0: 0009a783 lw a5,0(s3) + 80007ec4: 000a4603 lbu a2,0(s4) + 80007ec8: 0016869b addiw a3,a3,1 + 80007ecc: fd07071b addiw a4,a4,-48 + 80007ed0: 0017879b addiw a5,a5,1 + 80007ed4: 00a40c23 sb a0,24(s0) + 80007ed8: 00d42023 sw a3,0(s0) + 80007edc: 00e42823 sw a4,16(s0) + 80007ee0: 00f9a023 sw a5,0(s3) + 80007ee4: 00061c63 bnez a2,80007efc <_Z14X6502_RunDebugi+0x709c> + 80007ee8: 001c4717 auipc a4,0x1c4 + 80007eec: c6070713 addi a4,a4,-928 # 801cbb48 + 80007ef0: 00072783 lw a5,0(a4) + 80007ef4: 0017879b addiw a5,a5,1 + 80007ef8: 00f72023 sw a5,0(a4) + 80007efc: 02049793 slli a5,s1,0x20 + 80007f00: 01d7d793 srli a5,a5,0x1d + 80007f04: 00f90933 add s2,s2,a5 + 80007f08: 00093783 ld a5,0(s2) + 80007f0c: 00048513 mv a0,s1 + 80007f10: 000780e7 jalr a5 + 80007f14: 00050697 auipc a3,0x50 + 80007f18: 95c68693 addi a3,a3,-1700 # 80057870 <_ZL7ZNTable> + 80007f1c: 00a44783 lbu a5,10(s0) + 80007f20: 00a686b3 add a3,a3,a0 + 80007f24: 0006c683 lbu a3,0(a3) + 80007f28: 00050713 mv a4,a0 + 80007f2c: 07d7f793 andi a5,a5,125 + 80007f30: 00445503 lhu a0,4(s0) + 80007f34: 00d7e7b3 or a5,a5,a3 + 80007f38: 00e40c23 sb a4,24(s0) + 80007f3c: 00e40323 sb a4,6(s0) + 80007f40: 00f40523 sb a5,10(s0) + 80007f44: 01042483 lw s1,16(s0) + 80007f48: 00ac8463 beq s9,a0,80007f50 <_Z14X6502_RunDebugi+0x70f0> + 80007f4c: 920f906f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80007f50: 9a8f906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80007f54: 00351793 slli a5,a0,0x3 + 80007f58: 00f907b3 add a5,s2,a5 + 80007f5c: 0007b783 ld a5,0(a5) + 80007f60: 000780e7 jalr a5 + 80007f64: 00445783 lhu a5,4(s0) + 80007f68: 00050713 mv a4,a0 + 80007f6c: 00a40c23 sb a0,24(s0) + 80007f70: 0017879b addiw a5,a5,1 + 80007f74: 03079513 slli a0,a5,0x30 + 80007f78: 03055513 srli a0,a0,0x30 + 80007f7c: 00351793 slli a5,a0,0x3 + 80007f80: 00f907b3 add a5,s2,a5 + 80007f84: 0007b783 ld a5,0(a5) + 80007f88: 00a41223 sh a0,4(s0) + 80007f8c: 0007049b sext.w s1,a4 + 80007f90: 000780e7 jalr a5 + 80007f94: 00744703 lbu a4,7(s0) + 80007f98: 00445683 lhu a3,4(s0) + 80007f9c: 00851793 slli a5,a0,0x8 + 80007fa0: 0097e7b3 or a5,a5,s1 + 80007fa4: 00f7073b addw a4,a4,a5 + 80007fa8: 0016869b addiw a3,a3,1 + 80007fac: 00e7c7b3 xor a5,a5,a4 + 80007fb0: 00a40c23 sb a0,24(s0) + 80007fb4: 00d41223 sh a3,4(s0) + 80007fb8: 1007f793 andi a5,a5,256 + 80007fbc: 0007049b sext.w s1,a4 + 80007fc0: 06078463 beqz a5,80008028 <_Z14X6502_RunDebugi+0x71c8> + 80007fc4: 03071493 slli s1,a4,0x30 + 80007fc8: 0304d493 srli s1,s1,0x30 + 80007fcc: 1004c793 xori a5,s1,256 + 80007fd0: 00379793 slli a5,a5,0x3 + 80007fd4: 00f907b3 add a5,s2,a5 + 80007fd8: 0007b783 ld a5,0(a5) + 80007fdc: 1004c513 xori a0,s1,256 + 80007fe0: 000780e7 jalr a5 + 80007fe4: 00042683 lw a3,0(s0) + 80007fe8: 01042703 lw a4,16(s0) + 80007fec: 0009a783 lw a5,0(s3) + 80007ff0: 000a4603 lbu a2,0(s4) + 80007ff4: 0016869b addiw a3,a3,1 + 80007ff8: fd07071b addiw a4,a4,-48 + 80007ffc: 0017879b addiw a5,a5,1 + 80008000: 00a40c23 sb a0,24(s0) + 80008004: 00d42023 sw a3,0(s0) + 80008008: 00e42823 sw a4,16(s0) + 8000800c: 00f9a023 sw a5,0(s3) + 80008010: 00061c63 bnez a2,80008028 <_Z14X6502_RunDebugi+0x71c8> + 80008014: 001c4717 auipc a4,0x1c4 + 80008018: b3470713 addi a4,a4,-1228 # 801cbb48 + 8000801c: 00072783 lw a5,0(a4) + 80008020: 0017879b addiw a5,a5,1 + 80008024: 00f72023 sw a5,0(a4) + 80008028: 02049793 slli a5,s1,0x20 + 8000802c: 01d7d793 srli a5,a5,0x1d + 80008030: 00f90933 add s2,s2,a5 + 80008034: 00093783 ld a5,0(s2) + 80008038: 00048513 mv a0,s1 + 8000803c: 000780e7 jalr a5 + 80008040: 00050697 auipc a3,0x50 + 80008044: 83068693 addi a3,a3,-2000 # 80057870 <_ZL7ZNTable> + 80008048: 00a44783 lbu a5,10(s0) + 8000804c: 00a686b3 add a3,a3,a0 + 80008050: 0006c683 lbu a3,0(a3) + 80008054: 00050713 mv a4,a0 + 80008058: 07d7f793 andi a5,a5,125 + 8000805c: 00445503 lhu a0,4(s0) + 80008060: 00d7e7b3 or a5,a5,a3 + 80008064: 00e40c23 sb a4,24(s0) + 80008068: 00e40423 sb a4,8(s0) + 8000806c: 00f40523 sb a5,10(s0) + 80008070: 01042483 lw s1,16(s0) + 80008074: 00ac8463 beq s9,a0,8000807c <_Z14X6502_RunDebugi+0x721c> + 80008078: ff5f806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000807c: 87cf906f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80008080: 00351793 slli a5,a0,0x3 + 80008084: 00f907b3 add a5,s2,a5 + 80008088: 0007b783 ld a5,0(a5) + 8000808c: 000780e7 jalr a5 + 80008090: 00445783 lhu a5,4(s0) + 80008094: 00050713 mv a4,a0 + 80008098: 00a40c23 sb a0,24(s0) + 8000809c: 0017879b addiw a5,a5,1 + 800080a0: 03079513 slli a0,a5,0x30 + 800080a4: 03055513 srli a0,a0,0x30 + 800080a8: 00351793 slli a5,a0,0x3 + 800080ac: 00f907b3 add a5,s2,a5 + 800080b0: 0007b783 ld a5,0(a5) + 800080b4: 00a41223 sh a0,4(s0) + 800080b8: 0007049b sext.w s1,a4 + 800080bc: 000780e7 jalr a5 + 800080c0: 00844d03 lbu s10,8(s0) + 800080c4: 00851793 slli a5,a0,0x8 + 800080c8: 0097e7b3 or a5,a5,s1 + 800080cc: 00fd0d3b addw s10,s10,a5 + 800080d0: 0ffd7613 andi a2,s10,255 + 800080d4: 0187f7b3 and a5,a5,s8 + 800080d8: 00f66733 or a4,a2,a5 + 800080dc: 00445683 lhu a3,4(s0) + 800080e0: 00371713 slli a4,a4,0x3 + 800080e4: 00e90733 add a4,s2,a4 + 800080e8: 00073583 ld a1,0(a4) + 800080ec: 030d1d13 slli s10,s10,0x30 + 800080f0: 0016871b addiw a4,a3,1 + 800080f4: 030d5d13 srli s10,s10,0x30 + 800080f8: 00e41223 sh a4,4(s0) + 800080fc: 003d1493 slli s1,s10,0x3 + 80008100: 00a40c23 sb a0,24(s0) + 80008104: 00f66533 or a0,a2,a5 + 80008108: 000580e7 jalr a1 + 8000810c: 00990933 add s2,s2,s1 + 80008110: 00093783 ld a5,0(s2) + 80008114: 00a40c23 sb a0,24(s0) + 80008118: 00141917 auipc s2,0x141 + 8000811c: bc890913 addi s2,s2,-1080 # 80148ce0 + 80008120: 000d0513 mv a0,s10 + 80008124: 000780e7 jalr a5 + 80008128: 00990933 add s2,s2,s1 + 8000812c: 00093783 ld a5,0(s2) + 80008130: 00050493 mv s1,a0 + 80008134: 00050593 mv a1,a0 + 80008138: 00940c23 sb s1,24(s0) + 8000813c: 000d0513 mv a0,s10 + 80008140: 000780e7 jalr a5 + 80008144: 00944783 lbu a5,9(s0) + 80008148: 0004f697 auipc a3,0x4f + 8000814c: 72868693 addi a3,a3,1832 # 80057870 <_ZL7ZNTable> + 80008150: 00a44703 lbu a4,10(s0) + 80008154: 00f4f7b3 and a5,s1,a5 + 80008158: 00f686b3 add a3,a3,a5 + 8000815c: 0006c603 lbu a2,0(a3) + 80008160: 07d77713 andi a4,a4,125 + 80008164: 00093683 ld a3,0(s2) + 80008168: 00c76733 or a4,a4,a2 + 8000816c: 00048593 mv a1,s1 + 80008170: 000d0513 mv a0,s10 + 80008174: 00f404a3 sb a5,9(s0) + 80008178: 00f403a3 sb a5,7(s0) + 8000817c: 00f40323 sb a5,6(s0) + 80008180: 00e40523 sb a4,10(s0) + 80008184: 000680e7 jalr a3 + 80008188: 00445503 lhu a0,4(s0) + 8000818c: 01042483 lw s1,16(s0) + 80008190: 00ac8463 beq s9,a0,80008198 <_Z14X6502_RunDebugi+0x7338> + 80008194: ed9f806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80008198: f61f806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000819c: 00944683 lbu a3,9(s0) + 800081a0: 0004f717 auipc a4,0x4f + 800081a4: 6d070713 addi a4,a4,1744 # 80057870 <_ZL7ZNTable> + 800081a8: 00a44783 lbu a5,10(s0) + 800081ac: 00d70733 add a4,a4,a3 + 800081b0: 00074703 lbu a4,0(a4) + 800081b4: 07d7f793 andi a5,a5,125 + 800081b8: 00d403a3 sb a3,7(s0) + 800081bc: 00e7e7b3 or a5,a5,a4 + 800081c0: 00f40523 sb a5,10(s0) + 800081c4: 01042483 lw s1,16(s0) + 800081c8: 00ac8463 beq s9,a0,800081d0 <_Z14X6502_RunDebugi+0x7370> + 800081cc: ea1f806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800081d0: f29f806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800081d4: 00351793 slli a5,a0,0x3 + 800081d8: 00f907b3 add a5,s2,a5 + 800081dc: 0007b783 ld a5,0(a5) + 800081e0: 000780e7 jalr a5 + 800081e4: 00445783 lhu a5,4(s0) + 800081e8: 00050713 mv a4,a0 + 800081ec: 00a40c23 sb a0,24(s0) + 800081f0: 0017879b addiw a5,a5,1 + 800081f4: 03079513 slli a0,a5,0x30 + 800081f8: 03055513 srli a0,a0,0x30 + 800081fc: 00351793 slli a5,a0,0x3 + 80008200: 00f907b3 add a5,s2,a5 + 80008204: 0007b783 ld a5,0(a5) + 80008208: 00a41223 sh a0,4(s0) + 8000820c: 0007049b sext.w s1,a4 + 80008210: 000780e7 jalr a5 + 80008214: 00844703 lbu a4,8(s0) + 80008218: 00445683 lhu a3,4(s0) + 8000821c: 00851793 slli a5,a0,0x8 + 80008220: 0097e7b3 or a5,a5,s1 + 80008224: 00f7073b addw a4,a4,a5 + 80008228: 0016869b addiw a3,a3,1 + 8000822c: 00e7c7b3 xor a5,a5,a4 + 80008230: 00a40c23 sb a0,24(s0) + 80008234: 00d41223 sh a3,4(s0) + 80008238: 1007f793 andi a5,a5,256 + 8000823c: 0007049b sext.w s1,a4 + 80008240: 06078463 beqz a5,800082a8 <_Z14X6502_RunDebugi+0x7448> + 80008244: 03071493 slli s1,a4,0x30 + 80008248: 0304d493 srli s1,s1,0x30 + 8000824c: 1004c793 xori a5,s1,256 + 80008250: 00379793 slli a5,a5,0x3 + 80008254: 00f907b3 add a5,s2,a5 + 80008258: 0007b783 ld a5,0(a5) + 8000825c: 1004c513 xori a0,s1,256 + 80008260: 000780e7 jalr a5 + 80008264: 00042683 lw a3,0(s0) + 80008268: 01042703 lw a4,16(s0) + 8000826c: 0009a783 lw a5,0(s3) + 80008270: 000a4603 lbu a2,0(s4) + 80008274: 0016869b addiw a3,a3,1 + 80008278: fd07071b addiw a4,a4,-48 + 8000827c: 0017879b addiw a5,a5,1 + 80008280: 00a40c23 sb a0,24(s0) + 80008284: 00d42023 sw a3,0(s0) + 80008288: 00e42823 sw a4,16(s0) + 8000828c: 00f9a023 sw a5,0(s3) + 80008290: 00061c63 bnez a2,800082a8 <_Z14X6502_RunDebugi+0x7448> + 80008294: 001c4717 auipc a4,0x1c4 + 80008298: 8b470713 addi a4,a4,-1868 # 801cbb48 + 8000829c: 00072783 lw a5,0(a4) + 800082a0: 0017879b addiw a5,a5,1 + 800082a4: 00f72023 sw a5,0(a4) + 800082a8: 02049793 slli a5,s1,0x20 + 800082ac: 01d7d793 srli a5,a5,0x1d + 800082b0: 00f90933 add s2,s2,a5 + 800082b4: 00093783 ld a5,0(s2) + 800082b8: 00048513 mv a0,s1 + 800082bc: 000780e7 jalr a5 + 800082c0: 0004f697 auipc a3,0x4f + 800082c4: 5b068693 addi a3,a3,1456 # 80057870 <_ZL7ZNTable> + 800082c8: 00a44783 lbu a5,10(s0) + 800082cc: 00a686b3 add a3,a3,a0 + 800082d0: 0006c683 lbu a3,0(a3) + 800082d4: 00050713 mv a4,a0 + 800082d8: 07d7f793 andi a5,a5,125 + 800082dc: 00445503 lhu a0,4(s0) + 800082e0: 00d7e7b3 or a5,a5,a3 + 800082e4: 00e40c23 sb a4,24(s0) + 800082e8: 00e40323 sb a4,6(s0) + 800082ec: 00f40523 sb a5,10(s0) + 800082f0: 01042483 lw s1,16(s0) + 800082f4: 00ac8463 beq s9,a0,800082fc <_Z14X6502_RunDebugi+0x749c> + 800082f8: d75f806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800082fc: dfdf806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80008300: 00a44783 lbu a5,10(s0) + 80008304: 01042483 lw s1,16(s0) + 80008308: fbf7f793 andi a5,a5,-65 + 8000830c: 00f40523 sb a5,10(s0) + 80008310: 00ac8463 beq s9,a0,80008318 <_Z14X6502_RunDebugi+0x74b8> + 80008314: d59f806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80008318: de1f806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000831c: 00351793 slli a5,a0,0x3 + 80008320: 00f90933 add s2,s2,a5 + 80008324: 00093783 ld a5,0(s2) + 80008328: 00844483 lbu s1,8(s0) + 8000832c: 000780e7 jalr a5 + 80008330: 00a487bb addw a5,s1,a0 + 80008334: 001c1717 auipc a4,0x1c1 + 80008338: 9f470713 addi a4,a4,-1548 # 801c8d28 + 8000833c: 0ff7f793 andi a5,a5,255 + 80008340: 00f707b3 add a5,a4,a5 + 80008344: 0007c683 lbu a3,0(a5) + 80008348: 0004f717 auipc a4,0x4f + 8000834c: 52870713 addi a4,a4,1320 # 80057870 <_ZL7ZNTable> + 80008350: 00a44783 lbu a5,10(s0) + 80008354: 00d70733 add a4,a4,a3 + 80008358: 00074703 lbu a4,0(a4) + 8000835c: 00445503 lhu a0,4(s0) + 80008360: 00d40c23 sb a3,24(s0) + 80008364: 00f767b3 or a5,a4,a5 + 80008368: 0015051b addiw a0,a0,1 + 8000836c: 07d7f793 andi a5,a5,125 + 80008370: 03051513 slli a0,a0,0x30 + 80008374: 03055513 srli a0,a0,0x30 + 80008378: 00f767b3 or a5,a4,a5 + 8000837c: 00a41223 sh a0,4(s0) + 80008380: 00d40323 sb a3,6(s0) + 80008384: 00d403a3 sb a3,7(s0) + 80008388: 00f40523 sb a5,10(s0) + 8000838c: 01042483 lw s1,16(s0) + 80008390: 00ac8463 beq s9,a0,80008398 <_Z14X6502_RunDebugi+0x7538> + 80008394: cd9f806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80008398: d61f806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000839c: 00a44783 lbu a5,10(s0) + 800083a0: 01042483 lw s1,16(s0) + 800083a4: 0087e793 ori a5,a5,8 + 800083a8: 00f40523 sb a5,10(s0) + 800083ac: 00ac8463 beq s9,a0,800083b4 <_Z14X6502_RunDebugi+0x7554> + 800083b0: cbdf806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800083b4: d45f806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800083b8: 00351793 slli a5,a0,0x3 + 800083bc: 00f90933 add s2,s2,a5 + 800083c0: 00093783 ld a5,0(s2) + 800083c4: 00744483 lbu s1,7(s0) + 800083c8: 000780e7 jalr a5 + 800083cc: 00a487bb addw a5,s1,a0 + 800083d0: 0ff7f793 andi a5,a5,255 + 800083d4: 001c1597 auipc a1,0x1c1 + 800083d8: 95458593 addi a1,a1,-1708 # 801c8d28 + 800083dc: 00f585b3 add a1,a1,a5 + 800083e0: 0005c803 lbu a6,0(a1) + 800083e4: 0004f617 auipc a2,0x4f + 800083e8: 48c60613 addi a2,a2,1164 # 80057870 <_ZL7ZNTable> + 800083ec: 00a44703 lbu a4,10(s0) + 800083f0: 0018069b addiw a3,a6,1 + 800083f4: 0ff6f793 andi a5,a3,255 + 800083f8: 00f60533 add a0,a2,a5 + 800083fc: 00054883 lbu a7,0(a0) + 80008400: 07d77713 andi a4,a4,125 + 80008404: 00644503 lbu a0,6(s0) + 80008408: 01176733 or a4,a4,a7 + 8000840c: fff74893 not a7,a4 + 80008410: 40f507bb subw a5,a0,a5 + 80008414: 0018f893 andi a7,a7,1 + 80008418: 411787bb subw a5,a5,a7 + 8000841c: 0007889b sext.w a7,a5 + 80008420: 0ff8f313 andi t1,a7,255 + 80008424: 00660633 add a2,a2,t1 + 80008428: 00064e03 lbu t3,0(a2) + 8000842c: 00445303 lhu t1,4(s0) + 80008430: 0ff6f693 andi a3,a3,255 + 80008434: 4087d61b sraiw a2,a5,0x8 + 80008438: 00f547b3 xor a5,a0,a5 + 8000843c: 00d54533 xor a0,a0,a3 + 80008440: 00a7f7b3 and a5,a5,a0 + 80008444: 03c77713 andi a4,a4,60 + 80008448: 00164613 xori a2,a2,1 + 8000844c: 01c76733 or a4,a4,t3 + 80008450: 00167613 andi a2,a2,1 + 80008454: 0017d79b srliw a5,a5,0x1 + 80008458: 0013051b addiw a0,t1,1 + 8000845c: 00c76733 or a4,a4,a2 + 80008460: 0407f793 andi a5,a5,64 + 80008464: 03051513 slli a0,a0,0x30 + 80008468: 03055513 srli a0,a0,0x30 + 8000846c: 00f767b3 or a5,a4,a5 + 80008470: 00a41223 sh a0,4(s0) + 80008474: 01040c23 sb a6,24(s0) + 80008478: 01140323 sb a7,6(s0) + 8000847c: 00f40523 sb a5,10(s0) + 80008480: 00d58023 sb a3,0(a1) + 80008484: 01042483 lw s1,16(s0) + 80008488: 00ac8463 beq s9,a0,80008490 <_Z14X6502_RunDebugi+0x7630> + 8000848c: be1f806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80008490: c69f806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80008494: 00351793 slli a5,a0,0x3 + 80008498: 00f90933 add s2,s2,a5 + 8000849c: 00093783 ld a5,0(s2) + 800084a0: 00744483 lbu s1,7(s0) + 800084a4: 000780e7 jalr a5 + 800084a8: 00a487bb addw a5,s1,a0 + 800084ac: 0ff7f793 andi a5,a5,255 + 800084b0: 001c1717 auipc a4,0x1c1 + 800084b4: 87870713 addi a4,a4,-1928 # 801c8d28 + 800084b8: 00f70733 add a4,a4,a5 + 800084bc: 00074583 lbu a1,0(a4) + 800084c0: 00445503 lhu a0,4(s0) + 800084c4: 0004f697 auipc a3,0x4f + 800084c8: 3ac68693 addi a3,a3,940 # 80057870 <_ZL7ZNTable> + 800084cc: 0015861b addiw a2,a1,1 + 800084d0: 0ff67813 andi a6,a2,255 + 800084d4: 00a44783 lbu a5,10(s0) + 800084d8: 010686b3 add a3,a3,a6 + 800084dc: 0006c683 lbu a3,0(a3) + 800084e0: 0015051b addiw a0,a0,1 + 800084e4: 07d7f793 andi a5,a5,125 + 800084e8: 03051513 slli a0,a0,0x30 + 800084ec: 03055513 srli a0,a0,0x30 + 800084f0: 00d7e7b3 or a5,a5,a3 + 800084f4: 00a41223 sh a0,4(s0) + 800084f8: 00b40c23 sb a1,24(s0) + 800084fc: 00f40523 sb a5,10(s0) + 80008500: 00c70023 sb a2,0(a4) + 80008504: 01042483 lw s1,16(s0) + 80008508: 00ac8463 beq s9,a0,80008510 <_Z14X6502_RunDebugi+0x76b0> + 8000850c: b61f806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80008510: be9f806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80008514: 00351793 slli a5,a0,0x3 + 80008518: 00f90933 add s2,s2,a5 + 8000851c: 00093783 ld a5,0(s2) + 80008520: 00744483 lbu s1,7(s0) + 80008524: 000780e7 jalr a5 + 80008528: 00a487bb addw a5,s1,a0 + 8000852c: 001c0697 auipc a3,0x1c0 + 80008530: 7fc68693 addi a3,a3,2044 # 801c8d28 + 80008534: 0ff7f793 andi a5,a5,255 + 80008538: 00a44703 lbu a4,10(s0) + 8000853c: 00f687b3 add a5,a3,a5 + 80008540: 00644603 lbu a2,6(s0) + 80008544: 0007c583 lbu a1,0(a5) + 80008548: fff74793 not a5,a4 + 8000854c: 0017f693 andi a3,a5,1 + 80008550: 40b607bb subw a5,a2,a1 + 80008554: 40d787bb subw a5,a5,a3 + 80008558: 0007881b sext.w a6,a5 + 8000855c: 0ff87513 andi a0,a6,255 + 80008560: 0004f697 auipc a3,0x4f + 80008564: 31068693 addi a3,a3,784 # 80057870 <_ZL7ZNTable> + 80008568: 00a686b3 add a3,a3,a0 + 8000856c: 0006c883 lbu a7,0(a3) + 80008570: 00445503 lhu a0,4(s0) + 80008574: 4087d69b sraiw a3,a5,0x8 + 80008578: 00f647b3 xor a5,a2,a5 + 8000857c: 00b64633 xor a2,a2,a1 + 80008580: 03c77713 andi a4,a4,60 + 80008584: 0016c693 xori a3,a3,1 + 80008588: 00c7f7b3 and a5,a5,a2 + 8000858c: 01176733 or a4,a4,a7 + 80008590: 0016f693 andi a3,a3,1 + 80008594: 0017d79b srliw a5,a5,0x1 + 80008598: 0015051b addiw a0,a0,1 + 8000859c: 00d76733 or a4,a4,a3 + 800085a0: 0407f793 andi a5,a5,64 + 800085a4: 03051513 slli a0,a0,0x30 + 800085a8: 03055513 srli a0,a0,0x30 + 800085ac: 00f767b3 or a5,a4,a5 + 800085b0: 00a41223 sh a0,4(s0) + 800085b4: 00b40c23 sb a1,24(s0) + 800085b8: 01040323 sb a6,6(s0) + 800085bc: 00f40523 sb a5,10(s0) + 800085c0: 01042483 lw s1,16(s0) + 800085c4: 00ac8463 beq s9,a0,800085cc <_Z14X6502_RunDebugi+0x776c> + 800085c8: aa5f806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800085cc: b2df806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800085d0: 00351793 slli a5,a0,0x3 + 800085d4: 00f907b3 add a5,s2,a5 + 800085d8: 0007b783 ld a5,0(a5) + 800085dc: 000780e7 jalr a5 + 800085e0: 0015079b addiw a5,a0,1 + 800085e4: 001c0717 auipc a4,0x1c0 + 800085e8: 74470713 addi a4,a4,1860 # 801c8d28 + 800085ec: 0ff7f793 andi a5,a5,255 + 800085f0: 02051513 slli a0,a0,0x20 + 800085f4: 00f707b3 add a5,a4,a5 + 800085f8: 02055513 srli a0,a0,0x20 + 800085fc: 0007c603 lbu a2,0(a5) + 80008600: 00a70533 add a0,a4,a0 + 80008604: 00054703 lbu a4,0(a0) + 80008608: 00844483 lbu s1,8(s0) + 8000860c: 0086179b slliw a5,a2,0x8 + 80008610: 00e7e7b3 or a5,a5,a4 + 80008614: 00f484bb addw s1,s1,a5 + 80008618: 0007879b sext.w a5,a5 + 8000861c: 0187f7b3 and a5,a5,s8 + 80008620: 0ff4f513 andi a0,s1,255 + 80008624: 00f56733 or a4,a0,a5 + 80008628: 00445683 lhu a3,4(s0) + 8000862c: 00371713 slli a4,a4,0x3 + 80008630: 00e90733 add a4,s2,a4 + 80008634: 00073583 ld a1,0(a4) + 80008638: 03049493 slli s1,s1,0x30 + 8000863c: 0016871b addiw a4,a3,1 + 80008640: 0304d493 srli s1,s1,0x30 + 80008644: 00e41223 sh a4,4(s0) + 80008648: 00c40c23 sb a2,24(s0) + 8000864c: 00349d13 slli s10,s1,0x3 + 80008650: 00f56533 or a0,a0,a5 + 80008654: 000580e7 jalr a1 + 80008658: 01a90933 add s2,s2,s10 + 8000865c: 00093783 ld a5,0(s2) + 80008660: 00a40c23 sb a0,24(s0) + 80008664: 00048513 mv a0,s1 + 80008668: 000780e7 jalr a5 + 8000866c: 00140797 auipc a5,0x140 + 80008670: 67478793 addi a5,a5,1652 # 80148ce0 + 80008674: 01a78d33 add s10,a5,s10 + 80008678: 000d3783 ld a5,0(s10) + 8000867c: 00050913 mv s2,a0 + 80008680: 00050593 mv a1,a0 + 80008684: 01240c23 sb s2,24(s0) + 80008688: 00048513 mv a0,s1 + 8000868c: 000780e7 jalr a5 + 80008690: 0019091b addiw s2,s2,1 + 80008694: 0ff97793 andi a5,s2,255 + 80008698: 0004f697 auipc a3,0x4f + 8000869c: 1d868693 addi a3,a3,472 # 80057870 <_ZL7ZNTable> + 800086a0: 00f68633 add a2,a3,a5 + 800086a4: 00a44703 lbu a4,10(s0) + 800086a8: 00064583 lbu a1,0(a2) + 800086ac: 00644603 lbu a2,6(s0) + 800086b0: 07d77713 andi a4,a4,125 + 800086b4: 00b76733 or a4,a4,a1 + 800086b8: fff74593 not a1,a4 + 800086bc: 40f607bb subw a5,a2,a5 + 800086c0: 0015f593 andi a1,a1,1 + 800086c4: 40b787bb subw a5,a5,a1 + 800086c8: 0007851b sext.w a0,a5 + 800086cc: 0ff57593 andi a1,a0,255 + 800086d0: 00b686b3 add a3,a3,a1 + 800086d4: 0006c803 lbu a6,0(a3) + 800086d8: 0ff97593 andi a1,s2,255 + 800086dc: 4087d69b sraiw a3,a5,0x8 + 800086e0: 00f647b3 xor a5,a2,a5 + 800086e4: 00b64633 xor a2,a2,a1 + 800086e8: 00c7f7b3 and a5,a5,a2 + 800086ec: 03c77713 andi a4,a4,60 + 800086f0: 0016c693 xori a3,a3,1 + 800086f4: 01076733 or a4,a4,a6 + 800086f8: 0016f693 andi a3,a3,1 + 800086fc: 0017d79b srliw a5,a5,0x1 + 80008700: 00d76733 or a4,a4,a3 + 80008704: 0407f793 andi a5,a5,64 + 80008708: 000d3683 ld a3,0(s10) + 8000870c: 00f767b3 or a5,a4,a5 + 80008710: 00a40323 sb a0,6(s0) + 80008714: 00f40523 sb a5,10(s0) + 80008718: 00048513 mv a0,s1 + 8000871c: 000680e7 jalr a3 + 80008720: 00445503 lhu a0,4(s0) + 80008724: 01042483 lw s1,16(s0) + 80008728: 00ac8463 beq s9,a0,80008730 <_Z14X6502_RunDebugi+0x78d0> + 8000872c: 941f806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80008730: 9c9f806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80008734: 00351793 slli a5,a0,0x3 + 80008738: 00f907b3 add a5,s2,a5 + 8000873c: 0007b783 ld a5,0(a5) + 80008740: 000780e7 jalr a5 + 80008744: 0015079b addiw a5,a0,1 + 80008748: 001c0717 auipc a4,0x1c0 + 8000874c: 5e070713 addi a4,a4,1504 # 801c8d28 + 80008750: 0ff7f793 andi a5,a5,255 + 80008754: 02051513 slli a0,a0,0x20 + 80008758: 00f707b3 add a5,a4,a5 + 8000875c: 02055513 srli a0,a0,0x20 + 80008760: 0007c603 lbu a2,0(a5) + 80008764: 00a70533 add a0,a4,a0 + 80008768: 00054583 lbu a1,0(a0) + 8000876c: 00844703 lbu a4,8(s0) + 80008770: 00445683 lhu a3,4(s0) + 80008774: 0086179b slliw a5,a2,0x8 + 80008778: 00b7e7b3 or a5,a5,a1 + 8000877c: 00f7073b addw a4,a4,a5 + 80008780: 0016869b addiw a3,a3,1 + 80008784: 00e7c7b3 xor a5,a5,a4 + 80008788: 00d41223 sh a3,4(s0) + 8000878c: 00c40c23 sb a2,24(s0) + 80008790: 1007f793 andi a5,a5,256 + 80008794: 0007049b sext.w s1,a4 + 80008798: 06078463 beqz a5,80008800 <_Z14X6502_RunDebugi+0x79a0> + 8000879c: 03071493 slli s1,a4,0x30 + 800087a0: 0304d493 srli s1,s1,0x30 + 800087a4: 1004c793 xori a5,s1,256 + 800087a8: 00379793 slli a5,a5,0x3 + 800087ac: 00f907b3 add a5,s2,a5 + 800087b0: 0007b783 ld a5,0(a5) + 800087b4: 1004c513 xori a0,s1,256 + 800087b8: 000780e7 jalr a5 + 800087bc: 00042683 lw a3,0(s0) + 800087c0: 01042703 lw a4,16(s0) + 800087c4: 0009a783 lw a5,0(s3) + 800087c8: 000a4603 lbu a2,0(s4) + 800087cc: 0016869b addiw a3,a3,1 + 800087d0: fd07071b addiw a4,a4,-48 + 800087d4: 0017879b addiw a5,a5,1 + 800087d8: 00a40c23 sb a0,24(s0) + 800087dc: 00d42023 sw a3,0(s0) + 800087e0: 00e42823 sw a4,16(s0) + 800087e4: 00f9a023 sw a5,0(s3) + 800087e8: 00061c63 bnez a2,80008800 <_Z14X6502_RunDebugi+0x79a0> + 800087ec: 001c3717 auipc a4,0x1c3 + 800087f0: 35c70713 addi a4,a4,860 # 801cbb48 + 800087f4: 00072783 lw a5,0(a4) + 800087f8: 0017879b addiw a5,a5,1 + 800087fc: 00f72023 sw a5,0(a4) + 80008800: 00349793 slli a5,s1,0x3 + 80008804: 00f90933 add s2,s2,a5 + 80008808: 00093783 ld a5,0(s2) + 8000880c: 00048513 mv a0,s1 + 80008810: 000780e7 jalr a5 + 80008814: 00a44703 lbu a4,10(s0) + 80008818: 00644603 lbu a2,6(s0) + 8000881c: 00050593 mv a1,a0 + 80008820: fff74693 not a3,a4 + 80008824: 40a607bb subw a5,a2,a0 + 80008828: 0016f693 andi a3,a3,1 + 8000882c: 40d787bb subw a5,a5,a3 + 80008830: 0007881b sext.w a6,a5 + 80008834: 0ff87513 andi a0,a6,255 + 80008838: 0004f697 auipc a3,0x4f + 8000883c: 03868693 addi a3,a3,56 # 80057870 <_ZL7ZNTable> + 80008840: 00a686b3 add a3,a3,a0 + 80008844: 0006c503 lbu a0,0(a3) + 80008848: 4087d69b sraiw a3,a5,0x8 + 8000884c: 00f647b3 xor a5,a2,a5 + 80008850: 00b64633 xor a2,a2,a1 + 80008854: 03c77713 andi a4,a4,60 + 80008858: 0016c693 xori a3,a3,1 + 8000885c: 00c7f7b3 and a5,a5,a2 + 80008860: 00a76733 or a4,a4,a0 + 80008864: 0016f693 andi a3,a3,1 + 80008868: 0017d79b srliw a5,a5,0x1 + 8000886c: 00d76733 or a4,a4,a3 + 80008870: 0407f793 andi a5,a5,64 + 80008874: 00445503 lhu a0,4(s0) + 80008878: 00f767b3 or a5,a4,a5 + 8000887c: 00b40c23 sb a1,24(s0) + 80008880: 01040323 sb a6,6(s0) + 80008884: 00f40523 sb a5,10(s0) + 80008888: 01042483 lw s1,16(s0) + 8000888c: 00ac8463 beq s9,a0,80008894 <_Z14X6502_RunDebugi+0x7a34> + 80008890: fdcf806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80008894: 865f806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80008898: 00a44783 lbu a5,10(s0) + 8000889c: 0027f793 andi a5,a5,2 + 800088a0: 00079463 bnez a5,800088a8 <_Z14X6502_RunDebugi+0x7a48> + 800088a4: 3290206f j 8000b3cc <_Z14X6502_RunDebugi+0xa56c> + 800088a8: 00351793 slli a5,a0,0x3 + 800088ac: 00f90933 add s2,s2,a5 + 800088b0: 00093783 ld a5,0(s2) + 800088b4: 000780e7 jalr a5 + 800088b8: 00445783 lhu a5,4(s0) + 800088bc: 00050693 mv a3,a0 + 800088c0: 0185151b slliw a0,a0,0x18 + 800088c4: 0017879b addiw a5,a5,1 + 800088c8: 03079793 slli a5,a5,0x30 + 800088cc: 00042583 lw a1,0(s0) + 800088d0: 01042703 lw a4,16(s0) + 800088d4: 0009a603 lw a2,0(s3) + 800088d8: 0307d793 srli a5,a5,0x30 + 800088dc: 4185551b sraiw a0,a0,0x18 + 800088e0: 00f5053b addw a0,a0,a5 + 800088e4: 03051513 slli a0,a0,0x30 + 800088e8: 000a4803 lbu a6,0(s4) + 800088ec: fd07049b addiw s1,a4,-48 + 800088f0: 0015831b addiw t1,a1,1 + 800088f4: 0016089b addiw a7,a2,1 + 800088f8: 03055513 srli a0,a0,0x30 + 800088fc: 00a7c7b3 xor a5,a5,a0 + 80008900: 00d40c23 sb a3,24(s0) + 80008904: 00642023 sw t1,0(s0) + 80008908: 00942823 sw s1,16(s0) + 8000890c: 0119a023 sw a7,0(s3) + 80008910: 1007f793 andi a5,a5,256 + 80008914: 00080463 beqz a6,8000891c <_Z14X6502_RunDebugi+0x7abc> + 80008918: 4a10206f j 8000b5b8 <_Z14X6502_RunDebugi+0xa758> + 8000891c: 001c3817 auipc a6,0x1c3 + 80008920: 22c80813 addi a6,a6,556 # 801cbb48 + 80008924: 00082683 lw a3,0(a6) + 80008928: 00a41223 sh a0,4(s0) + 8000892c: 0016889b addiw a7,a3,1 + 80008930: 01182023 sw a7,0(a6) + 80008934: 00079463 bnez a5,8000893c <_Z14X6502_RunDebugi+0x7adc> + 80008938: f30f806f j 80001068 <_Z14X6502_RunDebugi+0x208> + 8000893c: fa07049b addiw s1,a4,-96 + 80008940: 0025859b addiw a1,a1,2 + 80008944: 0026061b addiw a2,a2,2 + 80008948: 0026869b addiw a3,a3,2 + 8000894c: 00b42023 sw a1,0(s0) + 80008950: 00942823 sw s1,16(s0) + 80008954: 00c9a023 sw a2,0(s3) + 80008958: 00d82023 sw a3,0(a6) + 8000895c: 00ac8463 beq s9,a0,80008964 <_Z14X6502_RunDebugi+0x7b04> + 80008960: f0cf806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80008964: f94f806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80008968: 00351793 slli a5,a0,0x3 + 8000896c: 00f907b3 add a5,s2,a5 + 80008970: 0007b783 ld a5,0(a5) + 80008974: 000780e7 jalr a5 + 80008978: 00445783 lhu a5,4(s0) + 8000897c: 00050493 mv s1,a0 + 80008980: 00a40c23 sb a0,24(s0) + 80008984: 0017879b addiw a5,a5,1 + 80008988: 03079513 slli a0,a5,0x30 + 8000898c: 03055513 srli a0,a0,0x30 + 80008990: 00351793 slli a5,a0,0x3 + 80008994: 00f907b3 add a5,s2,a5 + 80008998: 0007b783 ld a5,0(a5) + 8000899c: 00a41223 sh a0,4(s0) + 800089a0: 0004849b sext.w s1,s1 + 800089a4: 000780e7 jalr a5 + 800089a8: 00851713 slli a4,a0,0x8 + 800089ac: 00976d33 or s10,a4,s1 + 800089b0: 00445783 lhu a5,4(s0) + 800089b4: 003d1d13 slli s10,s10,0x3 + 800089b8: 01a90933 add s2,s2,s10 + 800089bc: 00093683 ld a3,0(s2) + 800089c0: 0017879b addiw a5,a5,1 + 800089c4: 00976933 or s2,a4,s1 + 800089c8: 00a40c23 sb a0,24(s0) + 800089cc: 00f41223 sh a5,4(s0) + 800089d0: 00090513 mv a0,s2 + 800089d4: 000680e7 jalr a3 + 800089d8: 00140797 auipc a5,0x140 + 800089dc: 30878793 addi a5,a5,776 # 80148ce0 + 800089e0: 01a78d33 add s10,a5,s10 + 800089e4: 000d3783 ld a5,0(s10) + 800089e8: 00050493 mv s1,a0 + 800089ec: 00050593 mv a1,a0 + 800089f0: 00940c23 sb s1,24(s0) + 800089f4: 00090513 mv a0,s2 + 800089f8: 000780e7 jalr a5 + 800089fc: 0014849b addiw s1,s1,1 + 80008a00: 0ff4f793 andi a5,s1,255 + 80008a04: 0004f697 auipc a3,0x4f + 80008a08: e6c68693 addi a3,a3,-404 # 80057870 <_ZL7ZNTable> + 80008a0c: 00f68633 add a2,a3,a5 + 80008a10: 00a44703 lbu a4,10(s0) + 80008a14: 00064583 lbu a1,0(a2) + 80008a18: 00644603 lbu a2,6(s0) + 80008a1c: 07d77713 andi a4,a4,125 + 80008a20: 00b76733 or a4,a4,a1 + 80008a24: fff74593 not a1,a4 + 80008a28: 40f607bb subw a5,a2,a5 + 80008a2c: 0015f593 andi a1,a1,1 + 80008a30: 40b787bb subw a5,a5,a1 + 80008a34: 0007851b sext.w a0,a5 + 80008a38: 0ff57593 andi a1,a0,255 + 80008a3c: 00b686b3 add a3,a3,a1 + 80008a40: 0006c803 lbu a6,0(a3) + 80008a44: 0ff4f593 andi a1,s1,255 + 80008a48: 4087d69b sraiw a3,a5,0x8 + 80008a4c: 00f647b3 xor a5,a2,a5 + 80008a50: 00b64633 xor a2,a2,a1 + 80008a54: 00c7f7b3 and a5,a5,a2 + 80008a58: 03c77713 andi a4,a4,60 + 80008a5c: 0016c693 xori a3,a3,1 + 80008a60: 01076733 or a4,a4,a6 + 80008a64: 0016f693 andi a3,a3,1 + 80008a68: 0017d79b srliw a5,a5,0x1 + 80008a6c: 00d76733 or a4,a4,a3 + 80008a70: 0407f793 andi a5,a5,64 + 80008a74: 000d3683 ld a3,0(s10) + 80008a78: 00f767b3 or a5,a4,a5 + 80008a7c: 00a40323 sb a0,6(s0) + 80008a80: 00f40523 sb a5,10(s0) + 80008a84: 00090513 mv a0,s2 + 80008a88: 000680e7 jalr a3 + 80008a8c: 00445503 lhu a0,4(s0) + 80008a90: 01042483 lw s1,16(s0) + 80008a94: 00ac8463 beq s9,a0,80008a9c <_Z14X6502_RunDebugi+0x7c3c> + 80008a98: dd4f806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80008a9c: e5cf806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80008aa0: 00351793 slli a5,a0,0x3 + 80008aa4: 00f907b3 add a5,s2,a5 + 80008aa8: 0007b783 ld a5,0(a5) + 80008aac: 000780e7 jalr a5 + 80008ab0: 00445783 lhu a5,4(s0) + 80008ab4: 00050493 mv s1,a0 + 80008ab8: 00a40c23 sb a0,24(s0) + 80008abc: 0017879b addiw a5,a5,1 + 80008ac0: 03079513 slli a0,a5,0x30 + 80008ac4: 03055513 srli a0,a0,0x30 + 80008ac8: 00351793 slli a5,a0,0x3 + 80008acc: 00f907b3 add a5,s2,a5 + 80008ad0: 0007b783 ld a5,0(a5) + 80008ad4: 00a41223 sh a0,4(s0) + 80008ad8: 0004849b sext.w s1,s1 + 80008adc: 000780e7 jalr a5 + 80008ae0: 00851713 slli a4,a0,0x8 + 80008ae4: 00976d33 or s10,a4,s1 + 80008ae8: 00445783 lhu a5,4(s0) + 80008aec: 003d1d93 slli s11,s10,0x3 + 80008af0: 01b90933 add s2,s2,s11 + 80008af4: 00093683 ld a3,0(s2) + 80008af8: 0017879b addiw a5,a5,1 + 80008afc: 000d0913 mv s2,s10 + 80008b00: 00a40c23 sb a0,24(s0) + 80008b04: 00f41223 sh a5,4(s0) + 80008b08: 000d0513 mv a0,s10 + 80008b0c: 00140d17 auipc s10,0x140 + 80008b10: 1d4d0d13 addi s10,s10,468 # 80148ce0 + 80008b14: 000680e7 jalr a3 + 80008b18: 01bd0d33 add s10,s10,s11 + 80008b1c: 000d3783 ld a5,0(s10) + 80008b20: 00050493 mv s1,a0 + 80008b24: 00050593 mv a1,a0 + 80008b28: 00940c23 sb s1,24(s0) + 80008b2c: 00090513 mv a0,s2 + 80008b30: 000780e7 jalr a5 + 80008b34: 0014859b addiw a1,s1,1 + 80008b38: 0ff5f693 andi a3,a1,255 + 80008b3c: 0004f717 auipc a4,0x4f + 80008b40: d3470713 addi a4,a4,-716 # 80057870 <_ZL7ZNTable> + 80008b44: 00a44783 lbu a5,10(s0) + 80008b48: 00d70733 add a4,a4,a3 + 80008b4c: 00074683 lbu a3,0(a4) + 80008b50: 07d7f793 andi a5,a5,125 + 80008b54: 000d3703 ld a4,0(s10) + 80008b58: 00d7e7b3 or a5,a5,a3 + 80008b5c: 00090513 mv a0,s2 + 80008b60: 00f40523 sb a5,10(s0) + 80008b64: 0ff5f593 andi a1,a1,255 + 80008b68: 000700e7 jalr a4 + 80008b6c: 00445503 lhu a0,4(s0) + 80008b70: 01042483 lw s1,16(s0) + 80008b74: 00ac8463 beq s9,a0,80008b7c <_Z14X6502_RunDebugi+0x7d1c> + 80008b78: cf4f806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80008b7c: d7cf806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80008b80: 00351793 slli a5,a0,0x3 + 80008b84: 00f907b3 add a5,s2,a5 + 80008b88: 0007b783 ld a5,0(a5) + 80008b8c: 000780e7 jalr a5 + 80008b90: 00445783 lhu a5,4(s0) + 80008b94: 00050493 mv s1,a0 + 80008b98: 00a40c23 sb a0,24(s0) + 80008b9c: 0017879b addiw a5,a5,1 + 80008ba0: 03079513 slli a0,a5,0x30 + 80008ba4: 03055513 srli a0,a0,0x30 + 80008ba8: 00351793 slli a5,a0,0x3 + 80008bac: 00f907b3 add a5,s2,a5 + 80008bb0: 0007b783 ld a5,0(a5) + 80008bb4: 00a41223 sh a0,4(s0) + 80008bb8: 0004849b sext.w s1,s1 + 80008bbc: 000780e7 jalr a5 + 80008bc0: 00851693 slli a3,a0,0x8 + 80008bc4: 0096e7b3 or a5,a3,s1 + 80008bc8: 00445703 lhu a4,4(s0) + 80008bcc: 00379793 slli a5,a5,0x3 + 80008bd0: 00f90933 add s2,s2,a5 + 80008bd4: 00093603 ld a2,0(s2) + 80008bd8: 0017079b addiw a5,a4,1 + 80008bdc: 00a40c23 sb a0,24(s0) + 80008be0: 00f41223 sh a5,4(s0) + 80008be4: 0096e533 or a0,a3,s1 + 80008be8: 000600e7 jalr a2 + 80008bec: 00a44703 lbu a4,10(s0) + 80008bf0: 00644603 lbu a2,6(s0) + 80008bf4: 00050593 mv a1,a0 + 80008bf8: fff74693 not a3,a4 + 80008bfc: 40a607bb subw a5,a2,a0 + 80008c00: 0016f693 andi a3,a3,1 + 80008c04: 40d787bb subw a5,a5,a3 + 80008c08: 0007881b sext.w a6,a5 + 80008c0c: 0ff87513 andi a0,a6,255 + 80008c10: 0004f697 auipc a3,0x4f + 80008c14: c6068693 addi a3,a3,-928 # 80057870 <_ZL7ZNTable> + 80008c18: 00a686b3 add a3,a3,a0 + 80008c1c: 0006c503 lbu a0,0(a3) + 80008c20: 4087d69b sraiw a3,a5,0x8 + 80008c24: 00f647b3 xor a5,a2,a5 + 80008c28: 00b64633 xor a2,a2,a1 + 80008c2c: 03c77713 andi a4,a4,60 + 80008c30: 0016c693 xori a3,a3,1 + 80008c34: 00c7f7b3 and a5,a5,a2 + 80008c38: 00a76733 or a4,a4,a0 + 80008c3c: 0016f693 andi a3,a3,1 + 80008c40: 0017d79b srliw a5,a5,0x1 + 80008c44: 00d76733 or a4,a4,a3 + 80008c48: 0407f793 andi a5,a5,64 + 80008c4c: 00445503 lhu a0,4(s0) + 80008c50: 00f767b3 or a5,a4,a5 + 80008c54: 00b40c23 sb a1,24(s0) + 80008c58: 01040323 sb a6,6(s0) + 80008c5c: 00f40523 sb a5,10(s0) + 80008c60: 01042483 lw s1,16(s0) + 80008c64: 00ac8463 beq s9,a0,80008c6c <_Z14X6502_RunDebugi+0x7e0c> + 80008c68: c04f806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80008c6c: c8cf806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80008c70: 00351793 slli a5,a0,0x3 + 80008c74: 00f907b3 add a5,s2,a5 + 80008c78: 0007b783 ld a5,0(a5) + 80008c7c: 000780e7 jalr a5 + 80008c80: 00744783 lbu a5,7(s0) + 80008c84: 001c0697 auipc a3,0x1c0 + 80008c88: 0a468693 addi a3,a3,164 # 801c8d28 + 80008c8c: 00445603 lhu a2,4(s0) + 80008c90: 00a787bb addw a5,a5,a0 + 80008c94: 00178713 addi a4,a5,1 + 80008c98: 0ff77713 andi a4,a4,255 + 80008c9c: 00e68733 add a4,a3,a4 + 80008ca0: 0ff7f793 andi a5,a5,255 + 80008ca4: 00074703 lbu a4,0(a4) + 80008ca8: 00f687b3 add a5,a3,a5 + 80008cac: 0007c783 lbu a5,0(a5) + 80008cb0: 0087151b slliw a0,a4,0x8 + 80008cb4: 0016061b addiw a2,a2,1 + 80008cb8: 00f56533 or a0,a0,a5 + 80008cbc: 03051793 slli a5,a0,0x30 + 80008cc0: 02d7d793 srli a5,a5,0x2d + 80008cc4: 00f90933 add s2,s2,a5 + 80008cc8: 00093783 ld a5,0(s2) + 80008ccc: 00c41223 sh a2,4(s0) + 80008cd0: 00e40c23 sb a4,24(s0) + 80008cd4: 0005051b sext.w a0,a0 + 80008cd8: 000780e7 jalr a5 + 80008cdc: 00a44703 lbu a4,10(s0) + 80008ce0: 00644603 lbu a2,6(s0) + 80008ce4: 00050593 mv a1,a0 + 80008ce8: fff74693 not a3,a4 + 80008cec: 40a607bb subw a5,a2,a0 + 80008cf0: 0016f693 andi a3,a3,1 + 80008cf4: 40d787bb subw a5,a5,a3 + 80008cf8: 0007881b sext.w a6,a5 + 80008cfc: 0ff87513 andi a0,a6,255 + 80008d00: 0004f697 auipc a3,0x4f + 80008d04: b7068693 addi a3,a3,-1168 # 80057870 <_ZL7ZNTable> + 80008d08: 00a686b3 add a3,a3,a0 + 80008d0c: 0006c503 lbu a0,0(a3) + 80008d10: 4087d69b sraiw a3,a5,0x8 + 80008d14: 00f647b3 xor a5,a2,a5 + 80008d18: 00b64633 xor a2,a2,a1 + 80008d1c: 03c77713 andi a4,a4,60 + 80008d20: 0016c693 xori a3,a3,1 + 80008d24: 00c7f7b3 and a5,a5,a2 + 80008d28: 00a76733 or a4,a4,a0 + 80008d2c: 0016f693 andi a3,a3,1 + 80008d30: 0017d79b srliw a5,a5,0x1 + 80008d34: 00d76733 or a4,a4,a3 + 80008d38: 0407f793 andi a5,a5,64 + 80008d3c: 00445503 lhu a0,4(s0) + 80008d40: 00f767b3 or a5,a4,a5 + 80008d44: 00b40c23 sb a1,24(s0) + 80008d48: 01040323 sb a6,6(s0) + 80008d4c: 00f40523 sb a5,10(s0) + 80008d50: 01042483 lw s1,16(s0) + 80008d54: 00ac8463 beq s9,a0,80008d5c <_Z14X6502_RunDebugi+0x7efc> + 80008d58: b14f806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80008d5c: b9cf806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80008d60: 00351793 slli a5,a0,0x3 + 80008d64: 00f90933 add s2,s2,a5 + 80008d68: 00093783 ld a5,0(s2) + 80008d6c: 000780e7 jalr a5 + 80008d70: 00744783 lbu a5,7(s0) + 80008d74: 0004f617 auipc a2,0x4f + 80008d78: afc60613 addi a2,a2,-1284 # 80057870 <_ZL7ZNTable> + 80008d7c: 00a44703 lbu a4,10(s0) + 80008d80: 40a787bb subw a5,a5,a0 + 80008d84: 0ff7f593 andi a1,a5,255 + 80008d88: 00b60633 add a2,a2,a1 + 80008d8c: 00050693 mv a3,a0 + 80008d90: 00064603 lbu a2,0(a2) + 80008d94: 00445503 lhu a0,4(s0) + 80008d98: 07d77713 andi a4,a4,125 + 80008d9c: 4087d79b sraiw a5,a5,0x8 + 80008da0: 00c76733 or a4,a4,a2 + 80008da4: 0017c793 xori a5,a5,1 + 80008da8: 0015051b addiw a0,a0,1 + 80008dac: ffe77713 andi a4,a4,-2 + 80008db0: 0017f793 andi a5,a5,1 + 80008db4: 03051513 slli a0,a0,0x30 + 80008db8: 03055513 srli a0,a0,0x30 + 80008dbc: 00f767b3 or a5,a4,a5 + 80008dc0: 00d40c23 sb a3,24(s0) + 80008dc4: 00a41223 sh a0,4(s0) + 80008dc8: 00f40523 sb a5,10(s0) + 80008dcc: 01042483 lw s1,16(s0) + 80008dd0: 00ac8463 beq s9,a0,80008dd8 <_Z14X6502_RunDebugi+0x7f78> + 80008dd4: a98f806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80008dd8: b20f806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80008ddc: 00351793 slli a5,a0,0x3 + 80008de0: 00f907b3 add a5,s2,a5 + 80008de4: 0007b783 ld a5,0(a5) + 80008de8: 000780e7 jalr a5 + 80008dec: 00445783 lhu a5,4(s0) + 80008df0: 00050713 mv a4,a0 + 80008df4: 00a40c23 sb a0,24(s0) + 80008df8: 0017879b addiw a5,a5,1 + 80008dfc: 03079513 slli a0,a5,0x30 + 80008e00: 03055513 srli a0,a0,0x30 + 80008e04: 00351793 slli a5,a0,0x3 + 80008e08: 00f907b3 add a5,s2,a5 + 80008e0c: 0007b783 ld a5,0(a5) + 80008e10: 00a41223 sh a0,4(s0) + 80008e14: 0007049b sext.w s1,a4 + 80008e18: 000780e7 jalr a5 + 80008e1c: 00744703 lbu a4,7(s0) + 80008e20: 00851793 slli a5,a0,0x8 + 80008e24: 0097e7b3 or a5,a5,s1 + 80008e28: 00f704bb addw s1,a4,a5 + 80008e2c: 0ff4f613 andi a2,s1,255 + 80008e30: 0187f7b3 and a5,a5,s8 + 80008e34: 00f66733 or a4,a2,a5 + 80008e38: 00445683 lhu a3,4(s0) + 80008e3c: 00371713 slli a4,a4,0x3 + 80008e40: 00e90733 add a4,s2,a4 + 80008e44: 00073583 ld a1,0(a4) + 80008e48: 03049493 slli s1,s1,0x30 + 80008e4c: 0016871b addiw a4,a3,1 + 80008e50: 0304d493 srli s1,s1,0x30 + 80008e54: 00e41223 sh a4,4(s0) + 80008e58: 00349d13 slli s10,s1,0x3 + 80008e5c: 00a40c23 sb a0,24(s0) + 80008e60: 00f66533 or a0,a2,a5 + 80008e64: 000580e7 jalr a1 + 80008e68: 01a90933 add s2,s2,s10 + 80008e6c: 00093783 ld a5,0(s2) + 80008e70: 00a40c23 sb a0,24(s0) + 80008e74: 00048513 mv a0,s1 + 80008e78: 000780e7 jalr a5 + 80008e7c: 00140797 auipc a5,0x140 + 80008e80: e6478793 addi a5,a5,-412 # 80148ce0 + 80008e84: 01a78d33 add s10,a5,s10 + 80008e88: 000d3783 ld a5,0(s10) + 80008e8c: 00050913 mv s2,a0 + 80008e90: 00050593 mv a1,a0 + 80008e94: 01240c23 sb s2,24(s0) + 80008e98: 00048513 mv a0,s1 + 80008e9c: 000780e7 jalr a5 + 80008ea0: 00644703 lbu a4,6(s0) + 80008ea4: fff9059b addiw a1,s2,-1 + 80008ea8: 0ff5f793 andi a5,a1,255 + 80008eac: 0004f697 auipc a3,0x4f + 80008eb0: 9c468693 addi a3,a3,-1596 # 80057870 <_ZL7ZNTable> + 80008eb4: 40f7073b subw a4,a4,a5 + 80008eb8: 00f687b3 add a5,a3,a5 + 80008ebc: 00a44603 lbu a2,10(s0) + 80008ec0: 0ff77513 andi a0,a4,255 + 80008ec4: 0007c783 lbu a5,0(a5) + 80008ec8: 00a686b3 add a3,a3,a0 + 80008ecc: 0006c683 lbu a3,0(a3) + 80008ed0: 00c7e7b3 or a5,a5,a2 + 80008ed4: 07d7f793 andi a5,a5,125 + 80008ed8: 4087571b sraiw a4,a4,0x8 + 80008edc: 00d7e7b3 or a5,a5,a3 + 80008ee0: 00174713 xori a4,a4,1 + 80008ee4: 00177713 andi a4,a4,1 + 80008ee8: 000d3683 ld a3,0(s10) + 80008eec: ffe7f793 andi a5,a5,-2 + 80008ef0: 00e7e7b3 or a5,a5,a4 + 80008ef4: 00048513 mv a0,s1 + 80008ef8: 00f40523 sb a5,10(s0) + 80008efc: 0ff5f593 andi a1,a1,255 + 80008f00: 000680e7 jalr a3 + 80008f04: 00445503 lhu a0,4(s0) + 80008f08: 01042483 lw s1,16(s0) + 80008f0c: 00ac8463 beq s9,a0,80008f14 <_Z14X6502_RunDebugi+0x80b4> + 80008f10: 95cf806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80008f14: 9e4f806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80008f18: 00351793 slli a5,a0,0x3 + 80008f1c: 00f907b3 add a5,s2,a5 + 80008f20: 0007b783 ld a5,0(a5) + 80008f24: 000780e7 jalr a5 + 80008f28: 00445783 lhu a5,4(s0) + 80008f2c: 00050713 mv a4,a0 + 80008f30: 00a40c23 sb a0,24(s0) + 80008f34: 0017879b addiw a5,a5,1 + 80008f38: 03079513 slli a0,a5,0x30 + 80008f3c: 03055513 srli a0,a0,0x30 + 80008f40: 00351793 slli a5,a0,0x3 + 80008f44: 00f907b3 add a5,s2,a5 + 80008f48: 0007b783 ld a5,0(a5) + 80008f4c: 00a41223 sh a0,4(s0) + 80008f50: 0007049b sext.w s1,a4 + 80008f54: 000780e7 jalr a5 + 80008f58: 00744683 lbu a3,7(s0) + 80008f5c: 00851793 slli a5,a0,0x8 + 80008f60: 0097e7b3 or a5,a5,s1 + 80008f64: 00f686bb addw a3,a3,a5 + 80008f68: 0ff6f593 andi a1,a3,255 + 80008f6c: 0187f7b3 and a5,a5,s8 + 80008f70: 00f5e733 or a4,a1,a5 + 80008f74: 00445603 lhu a2,4(s0) + 80008f78: 00371713 slli a4,a4,0x3 + 80008f7c: 00e90733 add a4,s2,a4 + 80008f80: 00073803 ld a6,0(a4) + 80008f84: 03069d13 slli s10,a3,0x30 + 80008f88: 0016071b addiw a4,a2,1 + 80008f8c: 030d5d13 srli s10,s10,0x30 + 80008f90: 00e41223 sh a4,4(s0) + 80008f94: 003d1493 slli s1,s10,0x3 + 80008f98: 00a40c23 sb a0,24(s0) + 80008f9c: 00f5e533 or a0,a1,a5 + 80008fa0: 000800e7 jalr a6 + 80008fa4: 00990933 add s2,s2,s1 + 80008fa8: 00093783 ld a5,0(s2) + 80008fac: 00a40c23 sb a0,24(s0) + 80008fb0: 00140917 auipc s2,0x140 + 80008fb4: d3090913 addi s2,s2,-720 # 80148ce0 + 80008fb8: 000d0513 mv a0,s10 + 80008fbc: 000780e7 jalr a5 + 80008fc0: 00990933 add s2,s2,s1 + 80008fc4: 00093783 ld a5,0(s2) + 80008fc8: 00050493 mv s1,a0 + 80008fcc: 00050593 mv a1,a0 + 80008fd0: 00940c23 sb s1,24(s0) + 80008fd4: 000d0513 mv a0,s10 + 80008fd8: 000780e7 jalr a5 + 80008fdc: fff4859b addiw a1,s1,-1 + 80008fe0: 0ff5f693 andi a3,a1,255 + 80008fe4: 0004f717 auipc a4,0x4f + 80008fe8: 88c70713 addi a4,a4,-1908 # 80057870 <_ZL7ZNTable> + 80008fec: 00a44783 lbu a5,10(s0) + 80008ff0: 00d70733 add a4,a4,a3 + 80008ff4: 00074683 lbu a3,0(a4) + 80008ff8: 07d7f793 andi a5,a5,125 + 80008ffc: 00093703 ld a4,0(s2) + 80009000: 00d7e7b3 or a5,a5,a3 + 80009004: 000d0513 mv a0,s10 + 80009008: 00f40523 sb a5,10(s0) + 8000900c: 0ff5f593 andi a1,a1,255 + 80009010: 000700e7 jalr a4 + 80009014: 00445503 lhu a0,4(s0) + 80009018: 01042483 lw s1,16(s0) + 8000901c: 00ac8463 beq s9,a0,80009024 <_Z14X6502_RunDebugi+0x81c4> + 80009020: 84cf806f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80009024: 8d4f806f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80009028: 00351793 slli a5,a0,0x3 + 8000902c: 00f907b3 add a5,s2,a5 + 80009030: 0007b783 ld a5,0(a5) + 80009034: 000780e7 jalr a5 + 80009038: 00445783 lhu a5,4(s0) + 8000903c: 00050713 mv a4,a0 + 80009040: 00a40c23 sb a0,24(s0) + 80009044: 0017879b addiw a5,a5,1 + 80009048: 03079513 slli a0,a5,0x30 + 8000904c: 03055513 srli a0,a0,0x30 + 80009050: 00351793 slli a5,a0,0x3 + 80009054: 00f907b3 add a5,s2,a5 + 80009058: 0007b783 ld a5,0(a5) + 8000905c: 00a41223 sh a0,4(s0) + 80009060: 0007049b sext.w s1,a4 + 80009064: 000780e7 jalr a5 + 80009068: 00744703 lbu a4,7(s0) + 8000906c: 00445683 lhu a3,4(s0) + 80009070: 00851793 slli a5,a0,0x8 + 80009074: 0097e7b3 or a5,a5,s1 + 80009078: 00f7073b addw a4,a4,a5 + 8000907c: 0016869b addiw a3,a3,1 + 80009080: 00e7c7b3 xor a5,a5,a4 + 80009084: 00a40c23 sb a0,24(s0) + 80009088: 00d41223 sh a3,4(s0) + 8000908c: 1007f793 andi a5,a5,256 + 80009090: 0007049b sext.w s1,a4 + 80009094: 06078463 beqz a5,800090fc <_Z14X6502_RunDebugi+0x829c> + 80009098: 03071493 slli s1,a4,0x30 + 8000909c: 0304d493 srli s1,s1,0x30 + 800090a0: 1004c793 xori a5,s1,256 + 800090a4: 00379793 slli a5,a5,0x3 + 800090a8: 00f907b3 add a5,s2,a5 + 800090ac: 0007b783 ld a5,0(a5) + 800090b0: 1004c513 xori a0,s1,256 + 800090b4: 000780e7 jalr a5 + 800090b8: 00042683 lw a3,0(s0) + 800090bc: 01042703 lw a4,16(s0) + 800090c0: 0009a783 lw a5,0(s3) + 800090c4: 000a4603 lbu a2,0(s4) + 800090c8: 0016869b addiw a3,a3,1 + 800090cc: fd07071b addiw a4,a4,-48 + 800090d0: 0017879b addiw a5,a5,1 + 800090d4: 00a40c23 sb a0,24(s0) + 800090d8: 00d42023 sw a3,0(s0) + 800090dc: 00e42823 sw a4,16(s0) + 800090e0: 00f9a023 sw a5,0(s3) + 800090e4: 00061c63 bnez a2,800090fc <_Z14X6502_RunDebugi+0x829c> + 800090e8: 001c3717 auipc a4,0x1c3 + 800090ec: a6070713 addi a4,a4,-1440 # 801cbb48 + 800090f0: 00072783 lw a5,0(a4) + 800090f4: 0017879b addiw a5,a5,1 + 800090f8: 00f72023 sw a5,0(a4) + 800090fc: 02049793 slli a5,s1,0x20 + 80009100: 01d7d793 srli a5,a5,0x1d + 80009104: 00f90933 add s2,s2,a5 + 80009108: 00093783 ld a5,0(s2) + 8000910c: 00048513 mv a0,s1 + 80009110: 000780e7 jalr a5 + 80009114: 00644783 lbu a5,6(s0) + 80009118: 0004e617 auipc a2,0x4e + 8000911c: 75860613 addi a2,a2,1880 # 80057870 <_ZL7ZNTable> + 80009120: 00a44703 lbu a4,10(s0) + 80009124: 40a787bb subw a5,a5,a0 + 80009128: 0ff7f593 andi a1,a5,255 + 8000912c: 00b60633 add a2,a2,a1 + 80009130: 00064603 lbu a2,0(a2) + 80009134: 07d77713 andi a4,a4,125 + 80009138: 4087d79b sraiw a5,a5,0x8 + 8000913c: 00c76733 or a4,a4,a2 + 80009140: 0017c793 xori a5,a5,1 + 80009144: 00050693 mv a3,a0 + 80009148: ffe77713 andi a4,a4,-2 + 8000914c: 0017f793 andi a5,a5,1 + 80009150: 00445503 lhu a0,4(s0) + 80009154: 00f767b3 or a5,a4,a5 + 80009158: 00d40c23 sb a3,24(s0) + 8000915c: 00f40523 sb a5,10(s0) + 80009160: 01042483 lw s1,16(s0) + 80009164: 00ac8463 beq s9,a0,8000916c <_Z14X6502_RunDebugi+0x830c> + 80009168: f05f706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000916c: f8df706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80009170: 00351793 slli a5,a0,0x3 + 80009174: 00f907b3 add a5,s2,a5 + 80009178: 0007b783 ld a5,0(a5) + 8000917c: 000780e7 jalr a5 + 80009180: 00445783 lhu a5,4(s0) + 80009184: 00050713 mv a4,a0 + 80009188: 00a40c23 sb a0,24(s0) + 8000918c: 0017879b addiw a5,a5,1 + 80009190: 03079513 slli a0,a5,0x30 + 80009194: 03055513 srli a0,a0,0x30 + 80009198: 00351793 slli a5,a0,0x3 + 8000919c: 00f907b3 add a5,s2,a5 + 800091a0: 0007b783 ld a5,0(a5) + 800091a4: 00a41223 sh a0,4(s0) + 800091a8: 0007049b sext.w s1,a4 + 800091ac: 000780e7 jalr a5 + 800091b0: 00844703 lbu a4,8(s0) + 800091b4: 00851793 slli a5,a0,0x8 + 800091b8: 0097e7b3 or a5,a5,s1 + 800091bc: 00f704bb addw s1,a4,a5 + 800091c0: 0ff4f613 andi a2,s1,255 + 800091c4: 0187f7b3 and a5,a5,s8 + 800091c8: 00f66733 or a4,a2,a5 + 800091cc: 00445683 lhu a3,4(s0) + 800091d0: 00371713 slli a4,a4,0x3 + 800091d4: 00e90733 add a4,s2,a4 + 800091d8: 00073583 ld a1,0(a4) + 800091dc: 03049493 slli s1,s1,0x30 + 800091e0: 0016871b addiw a4,a3,1 + 800091e4: 0304d493 srli s1,s1,0x30 + 800091e8: 00e41223 sh a4,4(s0) + 800091ec: 00349d13 slli s10,s1,0x3 + 800091f0: 00a40c23 sb a0,24(s0) + 800091f4: 00f66533 or a0,a2,a5 + 800091f8: 000580e7 jalr a1 + 800091fc: 01a90933 add s2,s2,s10 + 80009200: 00093783 ld a5,0(s2) + 80009204: 00a40c23 sb a0,24(s0) + 80009208: 00048513 mv a0,s1 + 8000920c: 000780e7 jalr a5 + 80009210: 00140797 auipc a5,0x140 + 80009214: ad078793 addi a5,a5,-1328 # 80148ce0 + 80009218: 01a78d33 add s10,a5,s10 + 8000921c: 000d3783 ld a5,0(s10) + 80009220: 00050913 mv s2,a0 + 80009224: 00050593 mv a1,a0 + 80009228: 01240c23 sb s2,24(s0) + 8000922c: 00048513 mv a0,s1 + 80009230: 000780e7 jalr a5 + 80009234: 00644703 lbu a4,6(s0) + 80009238: fff9059b addiw a1,s2,-1 + 8000923c: 0ff5f793 andi a5,a1,255 + 80009240: 0004e697 auipc a3,0x4e + 80009244: 63068693 addi a3,a3,1584 # 80057870 <_ZL7ZNTable> + 80009248: 40f7073b subw a4,a4,a5 + 8000924c: 00f687b3 add a5,a3,a5 + 80009250: 00a44603 lbu a2,10(s0) + 80009254: 0ff77513 andi a0,a4,255 + 80009258: 0007c783 lbu a5,0(a5) + 8000925c: 00a686b3 add a3,a3,a0 + 80009260: 0006c683 lbu a3,0(a3) + 80009264: 00c7e7b3 or a5,a5,a2 + 80009268: 07d7f793 andi a5,a5,125 + 8000926c: 4087571b sraiw a4,a4,0x8 + 80009270: 00d7e7b3 or a5,a5,a3 + 80009274: 00174713 xori a4,a4,1 + 80009278: 00177713 andi a4,a4,1 + 8000927c: 000d3683 ld a3,0(s10) + 80009280: ffe7f793 andi a5,a5,-2 + 80009284: 00e7e7b3 or a5,a5,a4 + 80009288: 00048513 mv a0,s1 + 8000928c: 00f40523 sb a5,10(s0) + 80009290: 0ff5f593 andi a1,a1,255 + 80009294: 000680e7 jalr a3 + 80009298: 00445503 lhu a0,4(s0) + 8000929c: 01042483 lw s1,16(s0) + 800092a0: 00ac8463 beq s9,a0,800092a8 <_Z14X6502_RunDebugi+0x8448> + 800092a4: dc9f706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800092a8: e51f706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800092ac: 00351793 slli a5,a0,0x3 + 800092b0: 00f90933 add s2,s2,a5 + 800092b4: 00093783 ld a5,0(s2) + 800092b8: 000780e7 jalr a5 + 800092bc: 02051793 slli a5,a0,0x20 + 800092c0: 0207d793 srli a5,a5,0x20 + 800092c4: 001c0717 auipc a4,0x1c0 + 800092c8: a6470713 addi a4,a4,-1436 # 801c8d28 + 800092cc: 00f70733 add a4,a4,a5 + 800092d0: 00074583 lbu a1,0(a4) + 800092d4: 00445503 lhu a0,4(s0) + 800092d8: 0004e697 auipc a3,0x4e + 800092dc: 59868693 addi a3,a3,1432 # 80057870 <_ZL7ZNTable> + 800092e0: 0015861b addiw a2,a1,1 + 800092e4: 0ff67813 andi a6,a2,255 + 800092e8: 00a44783 lbu a5,10(s0) + 800092ec: 010686b3 add a3,a3,a6 + 800092f0: 0006c683 lbu a3,0(a3) + 800092f4: 0015051b addiw a0,a0,1 + 800092f8: 07d7f793 andi a5,a5,125 + 800092fc: 03051513 slli a0,a0,0x30 + 80009300: 03055513 srli a0,a0,0x30 + 80009304: 00d7e7b3 or a5,a5,a3 + 80009308: 00a41223 sh a0,4(s0) + 8000930c: 00b40c23 sb a1,24(s0) + 80009310: 00f40523 sb a5,10(s0) + 80009314: 00c70023 sb a2,0(a4) + 80009318: 01042483 lw s1,16(s0) + 8000931c: 00ac8463 beq s9,a0,80009324 <_Z14X6502_RunDebugi+0x84c4> + 80009320: d4df706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80009324: dd5f706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80009328: 00351793 slli a5,a0,0x3 + 8000932c: 00f90933 add s2,s2,a5 + 80009330: 00093783 ld a5,0(s2) + 80009334: 000780e7 jalr a5 + 80009338: 02051693 slli a3,a0,0x20 + 8000933c: 0206d693 srli a3,a3,0x20 + 80009340: 001c0797 auipc a5,0x1c0 + 80009344: 9e878793 addi a5,a5,-1560 # 801c8d28 + 80009348: 00a44703 lbu a4,10(s0) + 8000934c: 00d787b3 add a5,a5,a3 + 80009350: 00644603 lbu a2,6(s0) + 80009354: 0007c583 lbu a1,0(a5) + 80009358: fff74793 not a5,a4 + 8000935c: 0017f693 andi a3,a5,1 + 80009360: 40b607bb subw a5,a2,a1 + 80009364: 40d787bb subw a5,a5,a3 + 80009368: 0007881b sext.w a6,a5 + 8000936c: 0ff87513 andi a0,a6,255 + 80009370: 0004e697 auipc a3,0x4e + 80009374: 50068693 addi a3,a3,1280 # 80057870 <_ZL7ZNTable> + 80009378: 00a686b3 add a3,a3,a0 + 8000937c: 0006c883 lbu a7,0(a3) + 80009380: 00445503 lhu a0,4(s0) + 80009384: 4087d69b sraiw a3,a5,0x8 + 80009388: 00f647b3 xor a5,a2,a5 + 8000938c: 00b64633 xor a2,a2,a1 + 80009390: 03c77713 andi a4,a4,60 + 80009394: 0016c693 xori a3,a3,1 + 80009398: 00c7f7b3 and a5,a5,a2 + 8000939c: 01176733 or a4,a4,a7 + 800093a0: 0016f693 andi a3,a3,1 + 800093a4: 0017d79b srliw a5,a5,0x1 + 800093a8: 0015051b addiw a0,a0,1 + 800093ac: 00d76733 or a4,a4,a3 + 800093b0: 0407f793 andi a5,a5,64 + 800093b4: 03051513 slli a0,a0,0x30 + 800093b8: 03055513 srli a0,a0,0x30 + 800093bc: 00f767b3 or a5,a4,a5 + 800093c0: 00a41223 sh a0,4(s0) + 800093c4: 00b40c23 sb a1,24(s0) + 800093c8: 01040323 sb a6,6(s0) + 800093cc: 00f40523 sb a5,10(s0) + 800093d0: 01042483 lw s1,16(s0) + 800093d4: 00ac8463 beq s9,a0,800093dc <_Z14X6502_RunDebugi+0x857c> + 800093d8: c95f706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800093dc: d1df706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800093e0: 00351793 slli a5,a0,0x3 + 800093e4: 00f90933 add s2,s2,a5 + 800093e8: 00093783 ld a5,0(s2) + 800093ec: 000780e7 jalr a5 + 800093f0: 02051713 slli a4,a0,0x20 + 800093f4: 02075713 srli a4,a4,0x20 + 800093f8: 001c0797 auipc a5,0x1c0 + 800093fc: 93078793 addi a5,a5,-1744 # 801c8d28 + 80009400: 00e787b3 add a5,a5,a4 + 80009404: 0007c603 lbu a2,0(a5) + 80009408: 00744783 lbu a5,7(s0) + 8000940c: 0004e697 auipc a3,0x4e + 80009410: 46468693 addi a3,a3,1124 # 80057870 <_ZL7ZNTable> + 80009414: 00a44703 lbu a4,10(s0) + 80009418: 40c787bb subw a5,a5,a2 + 8000941c: 0ff7f593 andi a1,a5,255 + 80009420: 00b686b3 add a3,a3,a1 + 80009424: 00445503 lhu a0,4(s0) + 80009428: 0006c683 lbu a3,0(a3) + 8000942c: 07d77713 andi a4,a4,125 + 80009430: 4087d79b sraiw a5,a5,0x8 + 80009434: 00d76733 or a4,a4,a3 + 80009438: 0017c793 xori a5,a5,1 + 8000943c: 0015051b addiw a0,a0,1 + 80009440: ffe77713 andi a4,a4,-2 + 80009444: 0017f793 andi a5,a5,1 + 80009448: 03051513 slli a0,a0,0x30 + 8000944c: 03055513 srli a0,a0,0x30 + 80009450: 00f767b3 or a5,a4,a5 + 80009454: 00a41223 sh a0,4(s0) + 80009458: 00c40c23 sb a2,24(s0) + 8000945c: 00f40523 sb a5,10(s0) + 80009460: 01042483 lw s1,16(s0) + 80009464: 00ac8463 beq s9,a0,8000946c <_Z14X6502_RunDebugi+0x860c> + 80009468: c05f706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000946c: c8df706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80009470: 00351793 slli a5,a0,0x3 + 80009474: 00f907b3 add a5,s2,a5 + 80009478: 0007b783 ld a5,0(a5) + 8000947c: 00140d17 auipc s10,0x140 + 80009480: 864d0d13 addi s10,s10,-1948 # 80148ce0 + 80009484: 000780e7 jalr a5 + 80009488: 00744783 lbu a5,7(s0) + 8000948c: 001c0697 auipc a3,0x1c0 + 80009490: 89c68693 addi a3,a3,-1892 # 801c8d28 + 80009494: 00445603 lhu a2,4(s0) + 80009498: 00a787bb addw a5,a5,a0 + 8000949c: 00178713 addi a4,a5,1 + 800094a0: 0ff77713 andi a4,a4,255 + 800094a4: 00e68733 add a4,a3,a4 + 800094a8: 0ff7f793 andi a5,a5,255 + 800094ac: 00074703 lbu a4,0(a4) + 800094b0: 00f687b3 add a5,a3,a5 + 800094b4: 0007c683 lbu a3,0(a5) + 800094b8: 0087179b slliw a5,a4,0x8 + 800094bc: 0016061b addiw a2,a2,1 + 800094c0: 00d7e7b3 or a5,a5,a3 + 800094c4: 03079493 slli s1,a5,0x30 + 800094c8: 02d4d493 srli s1,s1,0x2d + 800094cc: 00990933 add s2,s2,s1 + 800094d0: 00093683 ld a3,0(s2) + 800094d4: 0007891b sext.w s2,a5 + 800094d8: 00c41223 sh a2,4(s0) + 800094dc: 00e40c23 sb a4,24(s0) + 800094e0: 00090513 mv a0,s2 + 800094e4: 000680e7 jalr a3 + 800094e8: 009d0d33 add s10,s10,s1 + 800094ec: 000d3783 ld a5,0(s10) + 800094f0: 00050493 mv s1,a0 + 800094f4: 00050593 mv a1,a0 + 800094f8: 00940c23 sb s1,24(s0) + 800094fc: 00090513 mv a0,s2 + 80009500: 000780e7 jalr a5 + 80009504: 0014849b addiw s1,s1,1 + 80009508: 0ff4f793 andi a5,s1,255 + 8000950c: 0004e697 auipc a3,0x4e + 80009510: 36468693 addi a3,a3,868 # 80057870 <_ZL7ZNTable> + 80009514: 00f68633 add a2,a3,a5 + 80009518: 00a44703 lbu a4,10(s0) + 8000951c: 00064583 lbu a1,0(a2) + 80009520: 00644603 lbu a2,6(s0) + 80009524: 07d77713 andi a4,a4,125 + 80009528: 00b76733 or a4,a4,a1 + 8000952c: fff74593 not a1,a4 + 80009530: 40f607bb subw a5,a2,a5 + 80009534: 0015f593 andi a1,a1,1 + 80009538: 40b787bb subw a5,a5,a1 + 8000953c: 0007851b sext.w a0,a5 + 80009540: 0ff57593 andi a1,a0,255 + 80009544: 00b686b3 add a3,a3,a1 + 80009548: 0006c803 lbu a6,0(a3) + 8000954c: 0ff4f593 andi a1,s1,255 + 80009550: 4087d69b sraiw a3,a5,0x8 + 80009554: 00f647b3 xor a5,a2,a5 + 80009558: 00b64633 xor a2,a2,a1 + 8000955c: 00c7f7b3 and a5,a5,a2 + 80009560: 03c77713 andi a4,a4,60 + 80009564: 0016c693 xori a3,a3,1 + 80009568: 01076733 or a4,a4,a6 + 8000956c: 0016f693 andi a3,a3,1 + 80009570: 0017d79b srliw a5,a5,0x1 + 80009574: 00d76733 or a4,a4,a3 + 80009578: 0407f793 andi a5,a5,64 + 8000957c: 000d3683 ld a3,0(s10) + 80009580: 00f767b3 or a5,a4,a5 + 80009584: 00a40323 sb a0,6(s0) + 80009588: 00f40523 sb a5,10(s0) + 8000958c: 00090513 mv a0,s2 + 80009590: 000680e7 jalr a3 + 80009594: 00445503 lhu a0,4(s0) + 80009598: 01042483 lw s1,16(s0) + 8000959c: 00ac8463 beq s9,a0,800095a4 <_Z14X6502_RunDebugi+0x8744> + 800095a0: acdf706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800095a4: b55f706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800095a8: 00351793 slli a5,a0,0x3 + 800095ac: 00f907b3 add a5,s2,a5 + 800095b0: 0007b783 ld a5,0(a5) + 800095b4: 000780e7 jalr a5 + 800095b8: 00445783 lhu a5,4(s0) + 800095bc: 00050713 mv a4,a0 + 800095c0: 00a40c23 sb a0,24(s0) + 800095c4: 0017879b addiw a5,a5,1 + 800095c8: 03079513 slli a0,a5,0x30 + 800095cc: 03055513 srli a0,a0,0x30 + 800095d0: 00351793 slli a5,a0,0x3 + 800095d4: 00f907b3 add a5,s2,a5 + 800095d8: 0007b783 ld a5,0(a5) + 800095dc: 00a41223 sh a0,4(s0) + 800095e0: 0007049b sext.w s1,a4 + 800095e4: 000780e7 jalr a5 + 800095e8: 00744703 lbu a4,7(s0) + 800095ec: 00445683 lhu a3,4(s0) + 800095f0: 00851793 slli a5,a0,0x8 + 800095f4: 0097e7b3 or a5,a5,s1 + 800095f8: 00f7073b addw a4,a4,a5 + 800095fc: 0016869b addiw a3,a3,1 + 80009600: 00e7c7b3 xor a5,a5,a4 + 80009604: 00a40c23 sb a0,24(s0) + 80009608: 00d41223 sh a3,4(s0) + 8000960c: 1007f793 andi a5,a5,256 + 80009610: 0007049b sext.w s1,a4 + 80009614: 06078463 beqz a5,8000967c <_Z14X6502_RunDebugi+0x881c> + 80009618: 03071493 slli s1,a4,0x30 + 8000961c: 0304d493 srli s1,s1,0x30 + 80009620: 1004c793 xori a5,s1,256 + 80009624: 00379793 slli a5,a5,0x3 + 80009628: 00f907b3 add a5,s2,a5 + 8000962c: 0007b783 ld a5,0(a5) + 80009630: 1004c513 xori a0,s1,256 + 80009634: 000780e7 jalr a5 + 80009638: 00042683 lw a3,0(s0) + 8000963c: 01042703 lw a4,16(s0) + 80009640: 0009a783 lw a5,0(s3) + 80009644: 000a4603 lbu a2,0(s4) + 80009648: 0016869b addiw a3,a3,1 + 8000964c: fd07071b addiw a4,a4,-48 + 80009650: 0017879b addiw a5,a5,1 + 80009654: 00a40c23 sb a0,24(s0) + 80009658: 00d42023 sw a3,0(s0) + 8000965c: 00e42823 sw a4,16(s0) + 80009660: 00f9a023 sw a5,0(s3) + 80009664: 00061c63 bnez a2,8000967c <_Z14X6502_RunDebugi+0x881c> + 80009668: 001c2717 auipc a4,0x1c2 + 8000966c: 4e070713 addi a4,a4,1248 # 801cbb48 + 80009670: 00072783 lw a5,0(a4) + 80009674: 0017879b addiw a5,a5,1 + 80009678: 00f72023 sw a5,0(a4) + 8000967c: 02049793 slli a5,s1,0x20 + 80009680: 01d7d793 srli a5,a5,0x1d + 80009684: 00f90933 add s2,s2,a5 + 80009688: 00093783 ld a5,0(s2) + 8000968c: 00048513 mv a0,s1 + 80009690: 000780e7 jalr a5 + 80009694: 00644703 lbu a4,6(s0) + 80009698: 0004e617 auipc a2,0x4e + 8000969c: 1d860613 addi a2,a2,472 # 80057870 <_ZL7ZNTable> + 800096a0: 00a44783 lbu a5,10(s0) + 800096a4: 00e56733 or a4,a0,a4 + 800096a8: 00e60633 add a2,a2,a4 + 800096ac: 00064603 lbu a2,0(a2) + 800096b0: 00050693 mv a3,a0 + 800096b4: 07d7f793 andi a5,a5,125 + 800096b8: 00445503 lhu a0,4(s0) + 800096bc: 00c7e7b3 or a5,a5,a2 + 800096c0: 00d40c23 sb a3,24(s0) + 800096c4: 00e40323 sb a4,6(s0) + 800096c8: 00f40523 sb a5,10(s0) + 800096cc: 01042483 lw s1,16(s0) + 800096d0: 00ac8463 beq s9,a0,800096d8 <_Z14X6502_RunDebugi+0x8878> + 800096d4: 999f706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800096d8: a21f706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800096dc: 00351793 slli a5,a0,0x3 + 800096e0: 00f907b3 add a5,s2,a5 + 800096e4: 0007b783 ld a5,0(a5) + 800096e8: 000780e7 jalr a5 + 800096ec: 00744783 lbu a5,7(s0) + 800096f0: 001bf697 auipc a3,0x1bf + 800096f4: 63868693 addi a3,a3,1592 # 801c8d28 + 800096f8: 00445603 lhu a2,4(s0) + 800096fc: 00a787bb addw a5,a5,a0 + 80009700: 00178713 addi a4,a5,1 + 80009704: 0ff77713 andi a4,a4,255 + 80009708: 00e68733 add a4,a3,a4 + 8000970c: 0ff7f793 andi a5,a5,255 + 80009710: 00074703 lbu a4,0(a4) + 80009714: 00f687b3 add a5,a3,a5 + 80009718: 0007c783 lbu a5,0(a5) + 8000971c: 0087151b slliw a0,a4,0x8 + 80009720: 0016061b addiw a2,a2,1 + 80009724: 00f56533 or a0,a0,a5 + 80009728: 03051793 slli a5,a0,0x30 + 8000972c: 02d7d793 srli a5,a5,0x2d + 80009730: 00f90933 add s2,s2,a5 + 80009734: 00093783 ld a5,0(s2) + 80009738: 00c41223 sh a2,4(s0) + 8000973c: 00e40c23 sb a4,24(s0) + 80009740: 0005051b sext.w a0,a0 + 80009744: 000780e7 jalr a5 + 80009748: 00644703 lbu a4,6(s0) + 8000974c: 0004e617 auipc a2,0x4e + 80009750: 12460613 addi a2,a2,292 # 80057870 <_ZL7ZNTable> + 80009754: 00a44783 lbu a5,10(s0) + 80009758: 00e56733 or a4,a0,a4 + 8000975c: 00e60633 add a2,a2,a4 + 80009760: 00064603 lbu a2,0(a2) + 80009764: 00050693 mv a3,a0 + 80009768: 07d7f793 andi a5,a5,125 + 8000976c: 00445503 lhu a0,4(s0) + 80009770: 00c7e7b3 or a5,a5,a2 + 80009774: 00d40c23 sb a3,24(s0) + 80009778: 00e40323 sb a4,6(s0) + 8000977c: 00f40523 sb a5,10(s0) + 80009780: 01042483 lw s1,16(s0) + 80009784: 00ac8463 beq s9,a0,8000978c <_Z14X6502_RunDebugi+0x892c> + 80009788: 8e5f706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000978c: 96df706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80009790: 00351793 slli a5,a0,0x3 + 80009794: 00f907b3 add a5,s2,a5 + 80009798: 0007b783 ld a5,0(a5) + 8000979c: 000780e7 jalr a5 + 800097a0: 00445783 lhu a5,4(s0) + 800097a4: 00050713 mv a4,a0 + 800097a8: 00a40c23 sb a0,24(s0) + 800097ac: 0017879b addiw a5,a5,1 + 800097b0: 03079513 slli a0,a5,0x30 + 800097b4: 03055513 srli a0,a0,0x30 + 800097b8: 00351793 slli a5,a0,0x3 + 800097bc: 00f907b3 add a5,s2,a5 + 800097c0: 0007b783 ld a5,0(a5) + 800097c4: 00a41223 sh a0,4(s0) + 800097c8: 0007049b sext.w s1,a4 + 800097cc: 000780e7 jalr a5 + 800097d0: 00844d03 lbu s10,8(s0) + 800097d4: 00851793 slli a5,a0,0x8 + 800097d8: 0097e7b3 or a5,a5,s1 + 800097dc: 00fd0d3b addw s10,s10,a5 + 800097e0: 0ffd7613 andi a2,s10,255 + 800097e4: 0187f7b3 and a5,a5,s8 + 800097e8: 00f66733 or a4,a2,a5 + 800097ec: 00445683 lhu a3,4(s0) + 800097f0: 00371713 slli a4,a4,0x3 + 800097f4: 00e90733 add a4,s2,a4 + 800097f8: 00073583 ld a1,0(a4) + 800097fc: 030d1d13 slli s10,s10,0x30 + 80009800: 0016871b addiw a4,a3,1 + 80009804: 030d5d13 srli s10,s10,0x30 + 80009808: 00e41223 sh a4,4(s0) + 8000980c: 003d1493 slli s1,s10,0x3 + 80009810: 00a40c23 sb a0,24(s0) + 80009814: 00f66533 or a0,a2,a5 + 80009818: 000580e7 jalr a1 + 8000981c: 00990933 add s2,s2,s1 + 80009820: 00093783 ld a5,0(s2) + 80009824: 00a40c23 sb a0,24(s0) + 80009828: 0013f917 auipc s2,0x13f + 8000982c: 4b890913 addi s2,s2,1208 # 80148ce0 + 80009830: 000d0513 mv a0,s10 + 80009834: 000780e7 jalr a5 + 80009838: 00990933 add s2,s2,s1 + 8000983c: 00093783 ld a5,0(s2) + 80009840: 00050493 mv s1,a0 + 80009844: 00050593 mv a1,a0 + 80009848: 00940c23 sb s1,24(s0) + 8000984c: 000d0513 mv a0,s10 + 80009850: 000780e7 jalr a5 + 80009854: 0014849b addiw s1,s1,1 + 80009858: 0ff4f793 andi a5,s1,255 + 8000985c: 0004e697 auipc a3,0x4e + 80009860: 01468693 addi a3,a3,20 # 80057870 <_ZL7ZNTable> + 80009864: 00f68633 add a2,a3,a5 + 80009868: 00a44703 lbu a4,10(s0) + 8000986c: 00064583 lbu a1,0(a2) + 80009870: 00644603 lbu a2,6(s0) + 80009874: 07d77713 andi a4,a4,125 + 80009878: 00b76733 or a4,a4,a1 + 8000987c: fff74593 not a1,a4 + 80009880: 40f607bb subw a5,a2,a5 + 80009884: 0015f593 andi a1,a1,1 + 80009888: 40b787bb subw a5,a5,a1 + 8000988c: 0007851b sext.w a0,a5 + 80009890: 0ff57593 andi a1,a0,255 + 80009894: 00b686b3 add a3,a3,a1 + 80009898: 0006c803 lbu a6,0(a3) + 8000989c: 0ff4f593 andi a1,s1,255 + 800098a0: 4087d69b sraiw a3,a5,0x8 + 800098a4: 00f647b3 xor a5,a2,a5 + 800098a8: 00b64633 xor a2,a2,a1 + 800098ac: 00c7f7b3 and a5,a5,a2 + 800098b0: 03c77713 andi a4,a4,60 + 800098b4: 0016c693 xori a3,a3,1 + 800098b8: 01076733 or a4,a4,a6 + 800098bc: 0016f693 andi a3,a3,1 + 800098c0: 0017d79b srliw a5,a5,0x1 + 800098c4: 00d76733 or a4,a4,a3 + 800098c8: 0407f793 andi a5,a5,64 + 800098cc: 00093683 ld a3,0(s2) + 800098d0: 00f767b3 or a5,a4,a5 + 800098d4: 00a40323 sb a0,6(s0) + 800098d8: 00f40523 sb a5,10(s0) + 800098dc: 000d0513 mv a0,s10 + 800098e0: 000680e7 jalr a3 + 800098e4: 00445503 lhu a0,4(s0) + 800098e8: 01042483 lw s1,16(s0) + 800098ec: 00ac8463 beq s9,a0,800098f4 <_Z14X6502_RunDebugi+0x8a94> + 800098f0: f7cf706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 800098f4: 805f706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 800098f8: 00351793 slli a5,a0,0x3 + 800098fc: 00f907b3 add a5,s2,a5 + 80009900: 0007b783 ld a5,0(a5) + 80009904: 000780e7 jalr a5 + 80009908: 00445783 lhu a5,4(s0) + 8000990c: 00050713 mv a4,a0 + 80009910: 00a40c23 sb a0,24(s0) + 80009914: 0017879b addiw a5,a5,1 + 80009918: 03079513 slli a0,a5,0x30 + 8000991c: 03055513 srli a0,a0,0x30 + 80009920: 00351793 slli a5,a0,0x3 + 80009924: 00f907b3 add a5,s2,a5 + 80009928: 0007b783 ld a5,0(a5) + 8000992c: 00a41223 sh a0,4(s0) + 80009930: 0007049b sext.w s1,a4 + 80009934: 000780e7 jalr a5 + 80009938: 00844703 lbu a4,8(s0) + 8000993c: 00445683 lhu a3,4(s0) + 80009940: 00851793 slli a5,a0,0x8 + 80009944: 0097e7b3 or a5,a5,s1 + 80009948: 00f7073b addw a4,a4,a5 + 8000994c: 0016869b addiw a3,a3,1 + 80009950: 00e7c7b3 xor a5,a5,a4 + 80009954: 00a40c23 sb a0,24(s0) + 80009958: 00d41223 sh a3,4(s0) + 8000995c: 1007f793 andi a5,a5,256 + 80009960: 0007049b sext.w s1,a4 + 80009964: 06078463 beqz a5,800099cc <_Z14X6502_RunDebugi+0x8b6c> + 80009968: 03071493 slli s1,a4,0x30 + 8000996c: 0304d493 srli s1,s1,0x30 + 80009970: 1004c793 xori a5,s1,256 + 80009974: 00379793 slli a5,a5,0x3 + 80009978: 00f907b3 add a5,s2,a5 + 8000997c: 0007b783 ld a5,0(a5) + 80009980: 1004c513 xori a0,s1,256 + 80009984: 000780e7 jalr a5 + 80009988: 00042683 lw a3,0(s0) + 8000998c: 01042703 lw a4,16(s0) + 80009990: 0009a783 lw a5,0(s3) + 80009994: 000a4603 lbu a2,0(s4) + 80009998: 0016869b addiw a3,a3,1 + 8000999c: fd07071b addiw a4,a4,-48 + 800099a0: 0017879b addiw a5,a5,1 + 800099a4: 00a40c23 sb a0,24(s0) + 800099a8: 00d42023 sw a3,0(s0) + 800099ac: 00e42823 sw a4,16(s0) + 800099b0: 00f9a023 sw a5,0(s3) + 800099b4: 00061c63 bnez a2,800099cc <_Z14X6502_RunDebugi+0x8b6c> + 800099b8: 001c2717 auipc a4,0x1c2 + 800099bc: 19070713 addi a4,a4,400 # 801cbb48 + 800099c0: 00072783 lw a5,0(a4) + 800099c4: 0017879b addiw a5,a5,1 + 800099c8: 00f72023 sw a5,0(a4) + 800099cc: 02049793 slli a5,s1,0x20 + 800099d0: 01d7d793 srli a5,a5,0x1d + 800099d4: 00f90933 add s2,s2,a5 + 800099d8: 00093783 ld a5,0(s2) + 800099dc: 00048513 mv a0,s1 + 800099e0: 000780e7 jalr a5 + 800099e4: 00a44703 lbu a4,10(s0) + 800099e8: 00644603 lbu a2,6(s0) + 800099ec: 00050593 mv a1,a0 + 800099f0: fff74693 not a3,a4 + 800099f4: 40a607bb subw a5,a2,a0 + 800099f8: 0016f693 andi a3,a3,1 + 800099fc: 40d787bb subw a5,a5,a3 + 80009a00: 0007881b sext.w a6,a5 + 80009a04: 0ff87513 andi a0,a6,255 + 80009a08: 0004e697 auipc a3,0x4e + 80009a0c: e6868693 addi a3,a3,-408 # 80057870 <_ZL7ZNTable> + 80009a10: 00a686b3 add a3,a3,a0 + 80009a14: 0006c503 lbu a0,0(a3) + 80009a18: 4087d69b sraiw a3,a5,0x8 + 80009a1c: 00f647b3 xor a5,a2,a5 + 80009a20: 00b64633 xor a2,a2,a1 + 80009a24: 03c77713 andi a4,a4,60 + 80009a28: 0016c693 xori a3,a3,1 + 80009a2c: 00c7f7b3 and a5,a5,a2 + 80009a30: 00a76733 or a4,a4,a0 + 80009a34: 0016f693 andi a3,a3,1 + 80009a38: 0017d79b srliw a5,a5,0x1 + 80009a3c: 00d76733 or a4,a4,a3 + 80009a40: 0407f793 andi a5,a5,64 + 80009a44: 00445503 lhu a0,4(s0) + 80009a48: 00f767b3 or a5,a4,a5 + 80009a4c: 00b40c23 sb a1,24(s0) + 80009a50: 01040323 sb a6,6(s0) + 80009a54: 00f40523 sb a5,10(s0) + 80009a58: 01042483 lw s1,16(s0) + 80009a5c: 00ac8463 beq s9,a0,80009a64 <_Z14X6502_RunDebugi+0x8c04> + 80009a60: e0cf706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80009a64: e94f706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80009a68: 00351793 slli a5,a0,0x3 + 80009a6c: 00f907b3 add a5,s2,a5 + 80009a70: 0007b783 ld a5,0(a5) + 80009a74: 000780e7 jalr a5 + 80009a78: 00445783 lhu a5,4(s0) + 80009a7c: 00050713 mv a4,a0 + 80009a80: 00a40c23 sb a0,24(s0) + 80009a84: 0017879b addiw a5,a5,1 + 80009a88: 03079513 slli a0,a5,0x30 + 80009a8c: 03055513 srli a0,a0,0x30 + 80009a90: 00351793 slli a5,a0,0x3 + 80009a94: 00f907b3 add a5,s2,a5 + 80009a98: 0007b783 ld a5,0(a5) + 80009a9c: 00a41223 sh a0,4(s0) + 80009aa0: 0007049b sext.w s1,a4 + 80009aa4: 000780e7 jalr a5 + 80009aa8: 00844703 lbu a4,8(s0) + 80009aac: 00445683 lhu a3,4(s0) + 80009ab0: 00851793 slli a5,a0,0x8 + 80009ab4: 0097e7b3 or a5,a5,s1 + 80009ab8: 00f7073b addw a4,a4,a5 + 80009abc: 0016869b addiw a3,a3,1 + 80009ac0: 00e7c7b3 xor a5,a5,a4 + 80009ac4: 00a40c23 sb a0,24(s0) + 80009ac8: 00d41223 sh a3,4(s0) + 80009acc: 1007f793 andi a5,a5,256 + 80009ad0: 0007049b sext.w s1,a4 + 80009ad4: 06078463 beqz a5,80009b3c <_Z14X6502_RunDebugi+0x8cdc> + 80009ad8: 03071493 slli s1,a4,0x30 + 80009adc: 0304d493 srli s1,s1,0x30 + 80009ae0: 1004c793 xori a5,s1,256 + 80009ae4: 00379793 slli a5,a5,0x3 + 80009ae8: 00f907b3 add a5,s2,a5 + 80009aec: 0007b783 ld a5,0(a5) + 80009af0: 1004c513 xori a0,s1,256 + 80009af4: 000780e7 jalr a5 + 80009af8: 00042683 lw a3,0(s0) + 80009afc: 01042703 lw a4,16(s0) + 80009b00: 0009a783 lw a5,0(s3) + 80009b04: 000a4603 lbu a2,0(s4) + 80009b08: 0016869b addiw a3,a3,1 + 80009b0c: fd07071b addiw a4,a4,-48 + 80009b10: 0017879b addiw a5,a5,1 + 80009b14: 00a40c23 sb a0,24(s0) + 80009b18: 00d42023 sw a3,0(s0) + 80009b1c: 00e42823 sw a4,16(s0) + 80009b20: 00f9a023 sw a5,0(s3) + 80009b24: 00061c63 bnez a2,80009b3c <_Z14X6502_RunDebugi+0x8cdc> + 80009b28: 001c2717 auipc a4,0x1c2 + 80009b2c: 02070713 addi a4,a4,32 # 801cbb48 + 80009b30: 00072783 lw a5,0(a4) + 80009b34: 0017879b addiw a5,a5,1 + 80009b38: 00f72023 sw a5,0(a4) + 80009b3c: 02049793 slli a5,s1,0x20 + 80009b40: 01d7d793 srli a5,a5,0x1d + 80009b44: 00f90933 add s2,s2,a5 + 80009b48: 00093783 ld a5,0(s2) + 80009b4c: 00048513 mv a0,s1 + 80009b50: 000780e7 jalr a5 + 80009b54: 00644703 lbu a4,6(s0) + 80009b58: 0004e617 auipc a2,0x4e + 80009b5c: d1860613 addi a2,a2,-744 # 80057870 <_ZL7ZNTable> + 80009b60: 00a44783 lbu a5,10(s0) + 80009b64: 00e54733 xor a4,a0,a4 + 80009b68: 00e60633 add a2,a2,a4 + 80009b6c: 00064603 lbu a2,0(a2) + 80009b70: 00050693 mv a3,a0 + 80009b74: 07d7f793 andi a5,a5,125 + 80009b78: 00445503 lhu a0,4(s0) + 80009b7c: 00c7e7b3 or a5,a5,a2 + 80009b80: 00d40c23 sb a3,24(s0) + 80009b84: 00e40323 sb a4,6(s0) + 80009b88: 00f40523 sb a5,10(s0) + 80009b8c: 01042483 lw s1,16(s0) + 80009b90: 00ac8463 beq s9,a0,80009b98 <_Z14X6502_RunDebugi+0x8d38> + 80009b94: cd8f706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80009b98: d60f706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80009b9c: 00a44783 lbu a5,10(s0) + 80009ba0: 01042483 lw s1,16(s0) + 80009ba4: ffb7f793 andi a5,a5,-5 + 80009ba8: 00f40523 sb a5,10(s0) + 80009bac: 00ac8463 beq s9,a0,80009bb4 <_Z14X6502_RunDebugi+0x8d54> + 80009bb0: cbcf706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80009bb4: d44f706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80009bb8: 00351793 slli a5,a0,0x3 + 80009bbc: 00f90933 add s2,s2,a5 + 80009bc0: 00093783 ld a5,0(s2) + 80009bc4: 00744483 lbu s1,7(s0) + 80009bc8: 000780e7 jalr a5 + 80009bcc: 00a487bb addw a5,s1,a0 + 80009bd0: 0ff7f793 andi a5,a5,255 + 80009bd4: 001bf617 auipc a2,0x1bf + 80009bd8: 15460613 addi a2,a2,340 # 801c8d28 + 80009bdc: 00f60633 add a2,a2,a5 + 80009be0: 00064803 lbu a6,0(a2) + 80009be4: 00644583 lbu a1,6(s0) + 80009be8: 00a44783 lbu a5,10(s0) + 80009bec: 0004e717 auipc a4,0x4e + 80009bf0: c8470713 addi a4,a4,-892 # 80057870 <_ZL7ZNTable> + 80009bf4: 00185693 srli a3,a6,0x1 + 80009bf8: 00068893 mv a7,a3 + 80009bfc: 00d706b3 add a3,a4,a3 + 80009c00: 00445503 lhu a0,4(s0) + 80009c04: 00b8c5b3 xor a1,a7,a1 + 80009c08: 0006c683 lbu a3,0(a3) + 80009c0c: 07c7f793 andi a5,a5,124 + 80009c10: 00187313 andi t1,a6,1 + 80009c14: 00b70733 add a4,a4,a1 + 80009c18: 00074703 lbu a4,0(a4) + 80009c1c: 0067e7b3 or a5,a5,t1 + 80009c20: 00d7e7b3 or a5,a5,a3 + 80009c24: 0015051b addiw a0,a0,1 + 80009c28: 07d7f793 andi a5,a5,125 + 80009c2c: 03051513 slli a0,a0,0x30 + 80009c30: 03055513 srli a0,a0,0x30 + 80009c34: 00e7e7b3 or a5,a5,a4 + 80009c38: 00a41223 sh a0,4(s0) + 80009c3c: 01040c23 sb a6,24(s0) + 80009c40: 00b40323 sb a1,6(s0) + 80009c44: 00f40523 sb a5,10(s0) + 80009c48: 01160023 sb a7,0(a2) + 80009c4c: 01042483 lw s1,16(s0) + 80009c50: 00ac8463 beq s9,a0,80009c58 <_Z14X6502_RunDebugi+0x8df8> + 80009c54: c18f706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80009c58: ca0f706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80009c5c: 00351793 slli a5,a0,0x3 + 80009c60: 00f90933 add s2,s2,a5 + 80009c64: 00093783 ld a5,0(s2) + 80009c68: 00744483 lbu s1,7(s0) + 80009c6c: 000780e7 jalr a5 + 80009c70: 00a487bb addw a5,s1,a0 + 80009c74: 0ff7f793 andi a5,a5,255 + 80009c78: 001bf717 auipc a4,0x1bf + 80009c7c: 0b070713 addi a4,a4,176 # 801c8d28 + 80009c80: 00f70733 add a4,a4,a5 + 80009c84: 00074683 lbu a3,0(a4) + 80009c88: 00a44783 lbu a5,10(s0) + 80009c8c: 00445503 lhu a0,4(s0) + 80009c90: 0016d593 srli a1,a3,0x1 + 80009c94: 0004e617 auipc a2,0x4e + 80009c98: bdc60613 addi a2,a2,-1060 # 80057870 <_ZL7ZNTable> + 80009c9c: 00b60633 add a2,a2,a1 + 80009ca0: 00064603 lbu a2,0(a2) + 80009ca4: 07c7f793 andi a5,a5,124 + 80009ca8: 0016f813 andi a6,a3,1 + 80009cac: 0015051b addiw a0,a0,1 + 80009cb0: 0107e7b3 or a5,a5,a6 + 80009cb4: 03051513 slli a0,a0,0x30 + 80009cb8: 03055513 srli a0,a0,0x30 + 80009cbc: 00c7e7b3 or a5,a5,a2 + 80009cc0: 00a41223 sh a0,4(s0) + 80009cc4: 00d40c23 sb a3,24(s0) + 80009cc8: 00f40523 sb a5,10(s0) + 80009ccc: 00b70023 sb a1,0(a4) + 80009cd0: 01042483 lw s1,16(s0) + 80009cd4: 00ac8463 beq s9,a0,80009cdc <_Z14X6502_RunDebugi+0x8e7c> + 80009cd8: b94f706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80009cdc: c1cf706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80009ce0: 00351793 slli a5,a0,0x3 + 80009ce4: 00f90933 add s2,s2,a5 + 80009ce8: 00093783 ld a5,0(s2) + 80009cec: 00744483 lbu s1,7(s0) + 80009cf0: 000780e7 jalr a5 + 80009cf4: 00a487bb addw a5,s1,a0 + 80009cf8: 001bf717 auipc a4,0x1bf + 80009cfc: 03070713 addi a4,a4,48 # 801c8d28 + 80009d00: 0ff7f793 andi a5,a5,255 + 80009d04: 00f707b3 add a5,a4,a5 + 80009d08: 0007c603 lbu a2,0(a5) + 80009d0c: 00644703 lbu a4,6(s0) + 80009d10: 00445503 lhu a0,4(s0) + 80009d14: 0004e697 auipc a3,0x4e + 80009d18: b5c68693 addi a3,a3,-1188 # 80057870 <_ZL7ZNTable> + 80009d1c: 00e64733 xor a4,a2,a4 + 80009d20: 00a44783 lbu a5,10(s0) + 80009d24: 00e686b3 add a3,a3,a4 + 80009d28: 0006c683 lbu a3,0(a3) + 80009d2c: 0015051b addiw a0,a0,1 + 80009d30: 07d7f793 andi a5,a5,125 + 80009d34: 03051513 slli a0,a0,0x30 + 80009d38: 03055513 srli a0,a0,0x30 + 80009d3c: 00d7e7b3 or a5,a5,a3 + 80009d40: 00a41223 sh a0,4(s0) + 80009d44: 00c40c23 sb a2,24(s0) + 80009d48: 00e40323 sb a4,6(s0) + 80009d4c: 00f40523 sb a5,10(s0) + 80009d50: 01042483 lw s1,16(s0) + 80009d54: 00ac8463 beq s9,a0,80009d5c <_Z14X6502_RunDebugi+0x8efc> + 80009d58: b14f706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80009d5c: b9cf706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80009d60: 00351793 slli a5,a0,0x3 + 80009d64: 00f907b3 add a5,s2,a5 + 80009d68: 0007b783 ld a5,0(a5) + 80009d6c: 000780e7 jalr a5 + 80009d70: 0015079b addiw a5,a0,1 + 80009d74: 001bf717 auipc a4,0x1bf + 80009d78: fb470713 addi a4,a4,-76 # 801c8d28 + 80009d7c: 0ff7f793 andi a5,a5,255 + 80009d80: 02051513 slli a0,a0,0x20 + 80009d84: 00f707b3 add a5,a4,a5 + 80009d88: 02055513 srli a0,a0,0x20 + 80009d8c: 0007c583 lbu a1,0(a5) + 80009d90: 00a70533 add a0,a4,a0 + 80009d94: 00054703 lbu a4,0(a0) + 80009d98: 00844683 lbu a3,8(s0) + 80009d9c: 0085979b slliw a5,a1,0x8 + 80009da0: 00e7e7b3 or a5,a5,a4 + 80009da4: 00f686bb addw a3,a3,a5 + 80009da8: 0007879b sext.w a5,a5 + 80009dac: 0ff6f513 andi a0,a3,255 + 80009db0: 0187f7b3 and a5,a5,s8 + 80009db4: 00f56733 or a4,a0,a5 + 80009db8: 00445603 lhu a2,4(s0) + 80009dbc: 00371713 slli a4,a4,0x3 + 80009dc0: 00e90733 add a4,s2,a4 + 80009dc4: 00073803 ld a6,0(a4) + 80009dc8: 03069d13 slli s10,a3,0x30 + 80009dcc: 0016071b addiw a4,a2,1 + 80009dd0: 030d5d13 srli s10,s10,0x30 + 80009dd4: 00e41223 sh a4,4(s0) + 80009dd8: 003d1493 slli s1,s10,0x3 + 80009ddc: 00b40c23 sb a1,24(s0) + 80009de0: 00f56533 or a0,a0,a5 + 80009de4: 000800e7 jalr a6 + 80009de8: 00990933 add s2,s2,s1 + 80009dec: 00093783 ld a5,0(s2) + 80009df0: 00a40c23 sb a0,24(s0) + 80009df4: 0013f917 auipc s2,0x13f + 80009df8: eec90913 addi s2,s2,-276 # 80148ce0 + 80009dfc: 000d0513 mv a0,s10 + 80009e00: 000780e7 jalr a5 + 80009e04: 00990933 add s2,s2,s1 + 80009e08: 00093783 ld a5,0(s2) + 80009e0c: 00050493 mv s1,a0 + 80009e10: 00050593 mv a1,a0 + 80009e14: 00940c23 sb s1,24(s0) + 80009e18: 000d0513 mv a0,s10 + 80009e1c: 000780e7 jalr a5 + 80009e20: 00644703 lbu a4,6(s0) + 80009e24: 00a44783 lbu a5,10(s0) + 80009e28: 0014d613 srli a2,s1,0x1 + 80009e2c: 0004e697 auipc a3,0x4e + 80009e30: a4468693 addi a3,a3,-1468 # 80057870 <_ZL7ZNTable> + 80009e34: 00060593 mv a1,a2 + 80009e38: 00c68633 add a2,a3,a2 + 80009e3c: 00064503 lbu a0,0(a2) + 80009e40: 00e5c733 xor a4,a1,a4 + 80009e44: 00e686b3 add a3,a3,a4 + 80009e48: 0014f493 andi s1,s1,1 + 80009e4c: 07c7f793 andi a5,a5,124 + 80009e50: 0006c603 lbu a2,0(a3) + 80009e54: 0097e7b3 or a5,a5,s1 + 80009e58: 00a7e7b3 or a5,a5,a0 + 80009e5c: 00093683 ld a3,0(s2) + 80009e60: 07d7f793 andi a5,a5,125 + 80009e64: 00c7e7b3 or a5,a5,a2 + 80009e68: 000d0513 mv a0,s10 + 80009e6c: 00e40323 sb a4,6(s0) + 80009e70: 00f40523 sb a5,10(s0) + 80009e74: 000680e7 jalr a3 + 80009e78: 00445503 lhu a0,4(s0) + 80009e7c: 01042483 lw s1,16(s0) + 80009e80: 00ac8463 beq s9,a0,80009e88 <_Z14X6502_RunDebugi+0x9028> + 80009e84: 9e8f706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80009e88: a70f706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80009e8c: 00351793 slli a5,a0,0x3 + 80009e90: 00f907b3 add a5,s2,a5 + 80009e94: 0007b783 ld a5,0(a5) + 80009e98: 000780e7 jalr a5 + 80009e9c: 0015079b addiw a5,a0,1 + 80009ea0: 001bf717 auipc a4,0x1bf + 80009ea4: e8870713 addi a4,a4,-376 # 801c8d28 + 80009ea8: 0ff7f793 andi a5,a5,255 + 80009eac: 02051513 slli a0,a0,0x20 + 80009eb0: 00f707b3 add a5,a4,a5 + 80009eb4: 02055513 srli a0,a0,0x20 + 80009eb8: 0007c603 lbu a2,0(a5) + 80009ebc: 00a70533 add a0,a4,a0 + 80009ec0: 00054583 lbu a1,0(a0) + 80009ec4: 00844703 lbu a4,8(s0) + 80009ec8: 00445683 lhu a3,4(s0) + 80009ecc: 0086179b slliw a5,a2,0x8 + 80009ed0: 00b7e7b3 or a5,a5,a1 + 80009ed4: 00f7073b addw a4,a4,a5 + 80009ed8: 0016869b addiw a3,a3,1 + 80009edc: 00e7c7b3 xor a5,a5,a4 + 80009ee0: 00d41223 sh a3,4(s0) + 80009ee4: 00c40c23 sb a2,24(s0) + 80009ee8: 1007f793 andi a5,a5,256 + 80009eec: 0007049b sext.w s1,a4 + 80009ef0: 06078463 beqz a5,80009f58 <_Z14X6502_RunDebugi+0x90f8> + 80009ef4: 03071493 slli s1,a4,0x30 + 80009ef8: 0304d493 srli s1,s1,0x30 + 80009efc: 1004c793 xori a5,s1,256 + 80009f00: 00379793 slli a5,a5,0x3 + 80009f04: 00f907b3 add a5,s2,a5 + 80009f08: 0007b783 ld a5,0(a5) + 80009f0c: 1004c513 xori a0,s1,256 + 80009f10: 000780e7 jalr a5 + 80009f14: 00042683 lw a3,0(s0) + 80009f18: 01042703 lw a4,16(s0) + 80009f1c: 0009a783 lw a5,0(s3) + 80009f20: 000a4603 lbu a2,0(s4) + 80009f24: 0016869b addiw a3,a3,1 + 80009f28: fd07071b addiw a4,a4,-48 + 80009f2c: 0017879b addiw a5,a5,1 + 80009f30: 00a40c23 sb a0,24(s0) + 80009f34: 00d42023 sw a3,0(s0) + 80009f38: 00e42823 sw a4,16(s0) + 80009f3c: 00f9a023 sw a5,0(s3) + 80009f40: 00061c63 bnez a2,80009f58 <_Z14X6502_RunDebugi+0x90f8> + 80009f44: 001c2717 auipc a4,0x1c2 + 80009f48: c0470713 addi a4,a4,-1020 # 801cbb48 + 80009f4c: 00072783 lw a5,0(a4) + 80009f50: 0017879b addiw a5,a5,1 + 80009f54: 00f72023 sw a5,0(a4) + 80009f58: 00349793 slli a5,s1,0x3 + 80009f5c: 00f90933 add s2,s2,a5 + 80009f60: 00093783 ld a5,0(s2) + 80009f64: 00048513 mv a0,s1 + 80009f68: 000780e7 jalr a5 + 80009f6c: 00644703 lbu a4,6(s0) + 80009f70: 0004e617 auipc a2,0x4e + 80009f74: 90060613 addi a2,a2,-1792 # 80057870 <_ZL7ZNTable> + 80009f78: 00a44783 lbu a5,10(s0) + 80009f7c: 00e54733 xor a4,a0,a4 + 80009f80: 00e60633 add a2,a2,a4 + 80009f84: 00064603 lbu a2,0(a2) + 80009f88: 00050693 mv a3,a0 + 80009f8c: 07d7f793 andi a5,a5,125 + 80009f90: 00445503 lhu a0,4(s0) + 80009f94: 00c7e7b3 or a5,a5,a2 + 80009f98: 00d40c23 sb a3,24(s0) + 80009f9c: 00e40323 sb a4,6(s0) + 80009fa0: 00f40523 sb a5,10(s0) + 80009fa4: 01042483 lw s1,16(s0) + 80009fa8: 00ac8463 beq s9,a0,80009fb0 <_Z14X6502_RunDebugi+0x9150> + 80009fac: 8c0f706f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 80009fb0: 948f706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 80009fb4: 00a44783 lbu a5,10(s0) + 80009fb8: 0407f793 andi a5,a5,64 + 80009fbc: 00078463 beqz a5,80009fc4 <_Z14X6502_RunDebugi+0x9164> + 80009fc0: 3cc0106f j 8000b38c <_Z14X6502_RunDebugi+0xa52c> + 80009fc4: 00351793 slli a5,a0,0x3 + 80009fc8: 00f90933 add s2,s2,a5 + 80009fcc: 00093783 ld a5,0(s2) + 80009fd0: 000780e7 jalr a5 + 80009fd4: 00445783 lhu a5,4(s0) + 80009fd8: 00050713 mv a4,a0 + 80009fdc: 0185151b slliw a0,a0,0x18 + 80009fe0: 0017879b addiw a5,a5,1 + 80009fe4: 03079793 slli a5,a5,0x30 + 80009fe8: 00042583 lw a1,0(s0) + 80009fec: 01042683 lw a3,16(s0) + 80009ff0: 0009a603 lw a2,0(s3) + 80009ff4: 0307d793 srli a5,a5,0x30 + 80009ff8: 4185551b sraiw a0,a0,0x18 + 80009ffc: 00f5053b addw a0,a0,a5 + 8000a000: 03051513 slli a0,a0,0x30 + 8000a004: 000a4803 lbu a6,0(s4) + 8000a008: fd06849b addiw s1,a3,-48 + 8000a00c: 0015831b addiw t1,a1,1 + 8000a010: 0016089b addiw a7,a2,1 + 8000a014: 03055513 srli a0,a0,0x30 + 8000a018: 00a7c7b3 xor a5,a5,a0 + 8000a01c: 00e40c23 sb a4,24(s0) + 8000a020: 00642023 sw t1,0(s0) + 8000a024: 00942823 sw s1,16(s0) + 8000a028: 0119a023 sw a7,0(s3) + 8000a02c: 1007f793 andi a5,a5,256 + 8000a030: 00080463 beqz a6,8000a038 <_Z14X6502_RunDebugi+0x91d8> + 8000a034: 5240106f j 8000b558 <_Z14X6502_RunDebugi+0xa6f8> + 8000a038: 001c2817 auipc a6,0x1c2 + 8000a03c: b1080813 addi a6,a6,-1264 # 801cbb48 + 8000a040: 00082703 lw a4,0(a6) + 8000a044: 00a41223 sh a0,4(s0) + 8000a048: 0017089b addiw a7,a4,1 + 8000a04c: 01182023 sw a7,0(a6) + 8000a050: 00079463 bnez a5,8000a058 <_Z14X6502_RunDebugi+0x91f8> + 8000a054: 814f706f j 80001068 <_Z14X6502_RunDebugi+0x208> + 8000a058: fa06849b addiw s1,a3,-96 + 8000a05c: 0025859b addiw a1,a1,2 + 8000a060: 0026061b addiw a2,a2,2 + 8000a064: 0027071b addiw a4,a4,2 + 8000a068: 00b42023 sw a1,0(s0) + 8000a06c: 00942823 sw s1,16(s0) + 8000a070: 00c9a023 sw a2,0(s3) + 8000a074: 00e82023 sw a4,0(a6) + 8000a078: 00ac8463 beq s9,a0,8000a080 <_Z14X6502_RunDebugi+0x9220> + 8000a07c: ff1f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000a080: 878f706f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000a084: 00351793 slli a5,a0,0x3 + 8000a088: 00f90933 add s2,s2,a5 + 8000a08c: 00093783 ld a5,0(s2) + 8000a090: 000780e7 jalr a5 + 8000a094: 02051793 slli a5,a0,0x20 + 8000a098: 0207d793 srli a5,a5,0x20 + 8000a09c: 001bf617 auipc a2,0x1bf + 8000a0a0: c8c60613 addi a2,a2,-884 # 801c8d28 + 8000a0a4: 00f60633 add a2,a2,a5 + 8000a0a8: 00064803 lbu a6,0(a2) + 8000a0ac: 00644583 lbu a1,6(s0) + 8000a0b0: 00a44783 lbu a5,10(s0) + 8000a0b4: 0004d717 auipc a4,0x4d + 8000a0b8: 7bc70713 addi a4,a4,1980 # 80057870 <_ZL7ZNTable> + 8000a0bc: 00185693 srli a3,a6,0x1 + 8000a0c0: 00068893 mv a7,a3 + 8000a0c4: 00d706b3 add a3,a4,a3 + 8000a0c8: 00445503 lhu a0,4(s0) + 8000a0cc: 00b8c5b3 xor a1,a7,a1 + 8000a0d0: 0006c683 lbu a3,0(a3) + 8000a0d4: 07c7f793 andi a5,a5,124 + 8000a0d8: 00187313 andi t1,a6,1 + 8000a0dc: 00b70733 add a4,a4,a1 + 8000a0e0: 00074703 lbu a4,0(a4) + 8000a0e4: 0067e7b3 or a5,a5,t1 + 8000a0e8: 00d7e7b3 or a5,a5,a3 + 8000a0ec: 0015051b addiw a0,a0,1 + 8000a0f0: 07d7f793 andi a5,a5,125 + 8000a0f4: 03051513 slli a0,a0,0x30 + 8000a0f8: 03055513 srli a0,a0,0x30 + 8000a0fc: 00e7e7b3 or a5,a5,a4 + 8000a100: 00a41223 sh a0,4(s0) + 8000a104: 01040c23 sb a6,24(s0) + 8000a108: 00b40323 sb a1,6(s0) + 8000a10c: 00f40523 sb a5,10(s0) + 8000a110: 01160023 sb a7,0(a2) + 8000a114: 01042483 lw s1,16(s0) + 8000a118: 00ac8463 beq s9,a0,8000a120 <_Z14X6502_RunDebugi+0x92c0> + 8000a11c: f51f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000a120: fd9f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000a124: 00351793 slli a5,a0,0x3 + 8000a128: 00f90933 add s2,s2,a5 + 8000a12c: 00093783 ld a5,0(s2) + 8000a130: 000780e7 jalr a5 + 8000a134: 02051793 slli a5,a0,0x20 + 8000a138: 0207d793 srli a5,a5,0x20 + 8000a13c: 001bf717 auipc a4,0x1bf + 8000a140: bec70713 addi a4,a4,-1044 # 801c8d28 + 8000a144: 00f70733 add a4,a4,a5 + 8000a148: 00074683 lbu a3,0(a4) + 8000a14c: 00a44783 lbu a5,10(s0) + 8000a150: 00445503 lhu a0,4(s0) + 8000a154: 0016d593 srli a1,a3,0x1 + 8000a158: 0004d617 auipc a2,0x4d + 8000a15c: 71860613 addi a2,a2,1816 # 80057870 <_ZL7ZNTable> + 8000a160: 00b60633 add a2,a2,a1 + 8000a164: 00064603 lbu a2,0(a2) + 8000a168: 07c7f793 andi a5,a5,124 + 8000a16c: 0016f813 andi a6,a3,1 + 8000a170: 0015051b addiw a0,a0,1 + 8000a174: 0107e7b3 or a5,a5,a6 + 8000a178: 03051513 slli a0,a0,0x30 + 8000a17c: 03055513 srli a0,a0,0x30 + 8000a180: 00c7e7b3 or a5,a5,a2 + 8000a184: 00a41223 sh a0,4(s0) + 8000a188: 00d40c23 sb a3,24(s0) + 8000a18c: 00f40523 sb a5,10(s0) + 8000a190: 00b70023 sb a1,0(a4) + 8000a194: 01042483 lw s1,16(s0) + 8000a198: 00ac8463 beq s9,a0,8000a1a0 <_Z14X6502_RunDebugi+0x9340> + 8000a19c: ed1f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000a1a0: f59f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000a1a4: 00351793 slli a5,a0,0x3 + 8000a1a8: 00f907b3 add a5,s2,a5 + 8000a1ac: 0007b783 ld a5,0(a5) + 8000a1b0: 000780e7 jalr a5 + 8000a1b4: 00445783 lhu a5,4(s0) + 8000a1b8: 00050713 mv a4,a0 + 8000a1bc: 00a40c23 sb a0,24(s0) + 8000a1c0: 0017879b addiw a5,a5,1 + 8000a1c4: 03079513 slli a0,a5,0x30 + 8000a1c8: 03055513 srli a0,a0,0x30 + 8000a1cc: 00351793 slli a5,a0,0x3 + 8000a1d0: 00f907b3 add a5,s2,a5 + 8000a1d4: 0007b783 ld a5,0(a5) + 8000a1d8: 00a41223 sh a0,4(s0) + 8000a1dc: 0007049b sext.w s1,a4 + 8000a1e0: 000780e7 jalr a5 + 8000a1e4: 00744703 lbu a4,7(s0) + 8000a1e8: 00445683 lhu a3,4(s0) + 8000a1ec: 00851793 slli a5,a0,0x8 + 8000a1f0: 0097e7b3 or a5,a5,s1 + 8000a1f4: 00f7073b addw a4,a4,a5 + 8000a1f8: 0016869b addiw a3,a3,1 + 8000a1fc: 00e7c7b3 xor a5,a5,a4 + 8000a200: 00a40c23 sb a0,24(s0) + 8000a204: 00d41223 sh a3,4(s0) + 8000a208: 1007f793 andi a5,a5,256 + 8000a20c: 0007049b sext.w s1,a4 + 8000a210: 06078463 beqz a5,8000a278 <_Z14X6502_RunDebugi+0x9418> + 8000a214: 03071493 slli s1,a4,0x30 + 8000a218: 0304d493 srli s1,s1,0x30 + 8000a21c: 1004c793 xori a5,s1,256 + 8000a220: 00379793 slli a5,a5,0x3 + 8000a224: 00f907b3 add a5,s2,a5 + 8000a228: 0007b783 ld a5,0(a5) + 8000a22c: 1004c513 xori a0,s1,256 + 8000a230: 000780e7 jalr a5 + 8000a234: 00042683 lw a3,0(s0) + 8000a238: 01042703 lw a4,16(s0) + 8000a23c: 0009a783 lw a5,0(s3) + 8000a240: 000a4603 lbu a2,0(s4) + 8000a244: 0016869b addiw a3,a3,1 + 8000a248: fd07071b addiw a4,a4,-48 + 8000a24c: 0017879b addiw a5,a5,1 + 8000a250: 00a40c23 sb a0,24(s0) + 8000a254: 00d42023 sw a3,0(s0) + 8000a258: 00e42823 sw a4,16(s0) + 8000a25c: 00f9a023 sw a5,0(s3) + 8000a260: 00061c63 bnez a2,8000a278 <_Z14X6502_RunDebugi+0x9418> + 8000a264: 001c2717 auipc a4,0x1c2 + 8000a268: 8e470713 addi a4,a4,-1820 # 801cbb48 + 8000a26c: 00072783 lw a5,0(a4) + 8000a270: 0017879b addiw a5,a5,1 + 8000a274: 00f72023 sw a5,0(a4) + 8000a278: 02049793 slli a5,s1,0x20 + 8000a27c: 01d7d793 srli a5,a5,0x1d + 8000a280: 00f90933 add s2,s2,a5 + 8000a284: 00093783 ld a5,0(s2) + 8000a288: 00048513 mv a0,s1 + 8000a28c: 000780e7 jalr a5 + 8000a290: 00644703 lbu a4,6(s0) + 8000a294: 0004d617 auipc a2,0x4d + 8000a298: 5dc60613 addi a2,a2,1500 # 80057870 <_ZL7ZNTable> + 8000a29c: 00a44783 lbu a5,10(s0) + 8000a2a0: 00e57733 and a4,a0,a4 + 8000a2a4: 00e60633 add a2,a2,a4 + 8000a2a8: 00064603 lbu a2,0(a2) + 8000a2ac: 00050693 mv a3,a0 + 8000a2b0: 07d7f793 andi a5,a5,125 + 8000a2b4: 00445503 lhu a0,4(s0) + 8000a2b8: 00c7e7b3 or a5,a5,a2 + 8000a2bc: 00d40c23 sb a3,24(s0) + 8000a2c0: 00e40323 sb a4,6(s0) + 8000a2c4: 00f40523 sb a5,10(s0) + 8000a2c8: 01042483 lw s1,16(s0) + 8000a2cc: 00ac8463 beq s9,a0,8000a2d4 <_Z14X6502_RunDebugi+0x9474> + 8000a2d0: d9df606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000a2d4: e25f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000a2d8: 00351793 slli a5,a0,0x3 + 8000a2dc: 00f907b3 add a5,s2,a5 + 8000a2e0: 0007b783 ld a5,0(a5) + 8000a2e4: 000780e7 jalr a5 + 8000a2e8: 00445783 lhu a5,4(s0) + 8000a2ec: 00050713 mv a4,a0 + 8000a2f0: 00a40c23 sb a0,24(s0) + 8000a2f4: 0017879b addiw a5,a5,1 + 8000a2f8: 03079513 slli a0,a5,0x30 + 8000a2fc: 03055513 srli a0,a0,0x30 + 8000a300: 00351793 slli a5,a0,0x3 + 8000a304: 00f907b3 add a5,s2,a5 + 8000a308: 0007b783 ld a5,0(a5) + 8000a30c: 00a41223 sh a0,4(s0) + 8000a310: 0007049b sext.w s1,a4 + 8000a314: 000780e7 jalr a5 + 8000a318: 00844d03 lbu s10,8(s0) + 8000a31c: 00851793 slli a5,a0,0x8 + 8000a320: 0097e7b3 or a5,a5,s1 + 8000a324: 00fd0d3b addw s10,s10,a5 + 8000a328: 0ffd7613 andi a2,s10,255 + 8000a32c: 0187f7b3 and a5,a5,s8 + 8000a330: 00f66733 or a4,a2,a5 + 8000a334: 00445683 lhu a3,4(s0) + 8000a338: 00371713 slli a4,a4,0x3 + 8000a33c: 00e90733 add a4,s2,a4 + 8000a340: 00073583 ld a1,0(a4) + 8000a344: 030d1d13 slli s10,s10,0x30 + 8000a348: 0016871b addiw a4,a3,1 + 8000a34c: 030d5d13 srli s10,s10,0x30 + 8000a350: 00e41223 sh a4,4(s0) + 8000a354: 003d1493 slli s1,s10,0x3 + 8000a358: 00a40c23 sb a0,24(s0) + 8000a35c: 00f66533 or a0,a2,a5 + 8000a360: 000580e7 jalr a1 + 8000a364: 00990933 add s2,s2,s1 + 8000a368: 00093783 ld a5,0(s2) + 8000a36c: 00a40c23 sb a0,24(s0) + 8000a370: 0013f917 auipc s2,0x13f + 8000a374: 97090913 addi s2,s2,-1680 # 80148ce0 + 8000a378: 000d0513 mv a0,s10 + 8000a37c: 000780e7 jalr a5 + 8000a380: 00990933 add s2,s2,s1 + 8000a384: 00093783 ld a5,0(s2) + 8000a388: 00050493 mv s1,a0 + 8000a38c: 00050593 mv a1,a0 + 8000a390: 00940c23 sb s1,24(s0) + 8000a394: 000d0513 mv a0,s10 + 8000a398: 000780e7 jalr a5 + 8000a39c: 00a44783 lbu a5,10(s0) + 8000a3a0: 0014959b slliw a1,s1,0x1 + 8000a3a4: 00644703 lbu a4,6(s0) + 8000a3a8: 0017f513 andi a0,a5,1 + 8000a3ac: 0ff5f593 andi a1,a1,255 + 8000a3b0: 00a5e633 or a2,a1,a0 + 8000a3b4: 0004d697 auipc a3,0x4d + 8000a3b8: 4bc68693 addi a3,a3,1212 # 80057870 <_ZL7ZNTable> + 8000a3bc: 00060593 mv a1,a2 + 8000a3c0: 00c68633 add a2,a3,a2 + 8000a3c4: 00064503 lbu a0,0(a2) + 8000a3c8: 00e5f733 and a4,a1,a4 + 8000a3cc: 00e686b3 add a3,a3,a4 + 8000a3d0: 4074d49b sraiw s1,s1,0x7 + 8000a3d4: 07c7f793 andi a5,a5,124 + 8000a3d8: 0006c603 lbu a2,0(a3) + 8000a3dc: 0097e7b3 or a5,a5,s1 + 8000a3e0: 00a7e7b3 or a5,a5,a0 + 8000a3e4: 00093683 ld a3,0(s2) + 8000a3e8: 07d7f793 andi a5,a5,125 + 8000a3ec: 00c7e7b3 or a5,a5,a2 + 8000a3f0: 000d0513 mv a0,s10 + 8000a3f4: 00e40323 sb a4,6(s0) + 8000a3f8: 00f40523 sb a5,10(s0) + 8000a3fc: 000680e7 jalr a3 + 8000a400: 00445503 lhu a0,4(s0) + 8000a404: 01042483 lw s1,16(s0) + 8000a408: 00ac8463 beq s9,a0,8000a410 <_Z14X6502_RunDebugi+0x95b0> + 8000a40c: c61f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000a410: ce9f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000a414: 00351793 slli a5,a0,0x3 + 8000a418: 00f907b3 add a5,s2,a5 + 8000a41c: 0007b783 ld a5,0(a5) + 8000a420: 000780e7 jalr a5 + 8000a424: 00445783 lhu a5,4(s0) + 8000a428: 00050713 mv a4,a0 + 8000a42c: 00a40c23 sb a0,24(s0) + 8000a430: 0017879b addiw a5,a5,1 + 8000a434: 03079513 slli a0,a5,0x30 + 8000a438: 03055513 srli a0,a0,0x30 + 8000a43c: 00351793 slli a5,a0,0x3 + 8000a440: 00f907b3 add a5,s2,a5 + 8000a444: 0007b783 ld a5,0(a5) + 8000a448: 00a41223 sh a0,4(s0) + 8000a44c: 0007049b sext.w s1,a4 + 8000a450: 000780e7 jalr a5 + 8000a454: 00844703 lbu a4,8(s0) + 8000a458: 00445683 lhu a3,4(s0) + 8000a45c: 00851793 slli a5,a0,0x8 + 8000a460: 0097e7b3 or a5,a5,s1 + 8000a464: 00f7073b addw a4,a4,a5 + 8000a468: 0016869b addiw a3,a3,1 + 8000a46c: 00e7c7b3 xor a5,a5,a4 + 8000a470: 00a40c23 sb a0,24(s0) + 8000a474: 00d41223 sh a3,4(s0) + 8000a478: 1007f793 andi a5,a5,256 + 8000a47c: 0007049b sext.w s1,a4 + 8000a480: 06078463 beqz a5,8000a4e8 <_Z14X6502_RunDebugi+0x9688> + 8000a484: 03071493 slli s1,a4,0x30 + 8000a488: 0304d493 srli s1,s1,0x30 + 8000a48c: 1004c793 xori a5,s1,256 + 8000a490: 00379793 slli a5,a5,0x3 + 8000a494: 00f907b3 add a5,s2,a5 + 8000a498: 0007b783 ld a5,0(a5) + 8000a49c: 1004c513 xori a0,s1,256 + 8000a4a0: 000780e7 jalr a5 + 8000a4a4: 00042683 lw a3,0(s0) + 8000a4a8: 01042703 lw a4,16(s0) + 8000a4ac: 0009a783 lw a5,0(s3) + 8000a4b0: 000a4603 lbu a2,0(s4) + 8000a4b4: 0016869b addiw a3,a3,1 + 8000a4b8: fd07071b addiw a4,a4,-48 + 8000a4bc: 0017879b addiw a5,a5,1 + 8000a4c0: 00a40c23 sb a0,24(s0) + 8000a4c4: 00d42023 sw a3,0(s0) + 8000a4c8: 00e42823 sw a4,16(s0) + 8000a4cc: 00f9a023 sw a5,0(s3) + 8000a4d0: 00061c63 bnez a2,8000a4e8 <_Z14X6502_RunDebugi+0x9688> + 8000a4d4: 001c1717 auipc a4,0x1c1 + 8000a4d8: 67470713 addi a4,a4,1652 # 801cbb48 + 8000a4dc: 00072783 lw a5,0(a4) + 8000a4e0: 0017879b addiw a5,a5,1 + 8000a4e4: 00f72023 sw a5,0(a4) + 8000a4e8: 02049793 slli a5,s1,0x20 + 8000a4ec: 01d7d793 srli a5,a5,0x1d + 8000a4f0: 00f90933 add s2,s2,a5 + 8000a4f4: 00093783 ld a5,0(s2) + 8000a4f8: 00048513 mv a0,s1 + 8000a4fc: 000780e7 jalr a5 + 8000a500: 00644703 lbu a4,6(s0) + 8000a504: 0004d617 auipc a2,0x4d + 8000a508: 36c60613 addi a2,a2,876 # 80057870 <_ZL7ZNTable> + 8000a50c: 00a44783 lbu a5,10(s0) + 8000a510: 00e57733 and a4,a0,a4 + 8000a514: 00e60633 add a2,a2,a4 + 8000a518: 00064603 lbu a2,0(a2) + 8000a51c: 00050693 mv a3,a0 + 8000a520: 07d7f793 andi a5,a5,125 + 8000a524: 00445503 lhu a0,4(s0) + 8000a528: 00c7e7b3 or a5,a5,a2 + 8000a52c: 00d40c23 sb a3,24(s0) + 8000a530: 00e40323 sb a4,6(s0) + 8000a534: 00f40523 sb a5,10(s0) + 8000a538: 01042483 lw s1,16(s0) + 8000a53c: 00ac8463 beq s9,a0,8000a544 <_Z14X6502_RunDebugi+0x96e4> + 8000a540: b2df606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000a544: bb5f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000a548: 00a44783 lbu a5,10(s0) + 8000a54c: 01042483 lw s1,16(s0) + 8000a550: 0017e793 ori a5,a5,1 + 8000a554: 00f40523 sb a5,10(s0) + 8000a558: 00ac8463 beq s9,a0,8000a560 <_Z14X6502_RunDebugi+0x9700> + 8000a55c: b11f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000a560: b99f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000a564: 00351793 slli a5,a0,0x3 + 8000a568: 00f90933 add s2,s2,a5 + 8000a56c: 00093783 ld a5,0(s2) + 8000a570: 00744483 lbu s1,7(s0) + 8000a574: 000780e7 jalr a5 + 8000a578: 00a487bb addw a5,s1,a0 + 8000a57c: 0ff7f793 andi a5,a5,255 + 8000a580: 001be597 auipc a1,0x1be + 8000a584: 7a858593 addi a1,a1,1960 # 801c8d28 + 8000a588: 00f585b3 add a1,a1,a5 + 8000a58c: 0005c803 lbu a6,0(a1) + 8000a590: 00a44783 lbu a5,10(s0) + 8000a594: 00644883 lbu a7,6(s0) + 8000a598: 0018169b slliw a3,a6,0x1 + 8000a59c: 0017f513 andi a0,a5,1 + 8000a5a0: 0ff6f693 andi a3,a3,255 + 8000a5a4: 00a6e633 or a2,a3,a0 + 8000a5a8: 0004d717 auipc a4,0x4d + 8000a5ac: 2c870713 addi a4,a4,712 # 80057870 <_ZL7ZNTable> + 8000a5b0: 00060693 mv a3,a2 + 8000a5b4: 00c70633 add a2,a4,a2 + 8000a5b8: 00445503 lhu a0,4(s0) + 8000a5bc: 0116f8b3 and a7,a3,a7 + 8000a5c0: 00064603 lbu a2,0(a2) + 8000a5c4: 07c7f793 andi a5,a5,124 + 8000a5c8: 4078531b sraiw t1,a6,0x7 + 8000a5cc: 01170733 add a4,a4,a7 + 8000a5d0: 00074703 lbu a4,0(a4) + 8000a5d4: 0067e7b3 or a5,a5,t1 + 8000a5d8: 00c7e7b3 or a5,a5,a2 + 8000a5dc: 0015051b addiw a0,a0,1 + 8000a5e0: 07d7f793 andi a5,a5,125 + 8000a5e4: 03051513 slli a0,a0,0x30 + 8000a5e8: 03055513 srli a0,a0,0x30 + 8000a5ec: 00e7e7b3 or a5,a5,a4 + 8000a5f0: 00a41223 sh a0,4(s0) + 8000a5f4: 01040c23 sb a6,24(s0) + 8000a5f8: 01140323 sb a7,6(s0) + 8000a5fc: 00f40523 sb a5,10(s0) + 8000a600: 00d58023 sb a3,0(a1) + 8000a604: 01042483 lw s1,16(s0) + 8000a608: 00ac8463 beq s9,a0,8000a610 <_Z14X6502_RunDebugi+0x97b0> + 8000a60c: a61f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000a610: ae9f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000a614: 00351793 slli a5,a0,0x3 + 8000a618: 00f90933 add s2,s2,a5 + 8000a61c: 00093783 ld a5,0(s2) + 8000a620: 00744483 lbu s1,7(s0) + 8000a624: 000780e7 jalr a5 + 8000a628: 00a487bb addw a5,s1,a0 + 8000a62c: 0ff7f793 andi a5,a5,255 + 8000a630: 001be697 auipc a3,0x1be + 8000a634: 6f868693 addi a3,a3,1784 # 801c8d28 + 8000a638: 00f686b3 add a3,a3,a5 + 8000a63c: 0006c603 lbu a2,0(a3) + 8000a640: 00a44783 lbu a5,10(s0) + 8000a644: 00445503 lhu a0,4(s0) + 8000a648: 0016171b slliw a4,a2,0x1 + 8000a64c: 0017f813 andi a6,a5,1 + 8000a650: 0ff77713 andi a4,a4,255 + 8000a654: 010768b3 or a7,a4,a6 + 8000a658: 0004d597 auipc a1,0x4d + 8000a65c: 21858593 addi a1,a1,536 # 80057870 <_ZL7ZNTable> + 8000a660: 011585b3 add a1,a1,a7 + 8000a664: 0005c583 lbu a1,0(a1) + 8000a668: 07c7f793 andi a5,a5,124 + 8000a66c: 4076589b sraiw a7,a2,0x7 + 8000a670: 0015051b addiw a0,a0,1 + 8000a674: 0117e7b3 or a5,a5,a7 + 8000a678: 03051513 slli a0,a0,0x30 + 8000a67c: 03055513 srli a0,a0,0x30 + 8000a680: 01076733 or a4,a4,a6 + 8000a684: 00b7e7b3 or a5,a5,a1 + 8000a688: 00a41223 sh a0,4(s0) + 8000a68c: 00c40c23 sb a2,24(s0) + 8000a690: 00f40523 sb a5,10(s0) + 8000a694: 00e68023 sb a4,0(a3) + 8000a698: 01042483 lw s1,16(s0) + 8000a69c: 00ac8463 beq s9,a0,8000a6a4 <_Z14X6502_RunDebugi+0x9844> + 8000a6a0: 9cdf606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000a6a4: a55f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000a6a8: 00351793 slli a5,a0,0x3 + 8000a6ac: 00f90933 add s2,s2,a5 + 8000a6b0: 00093783 ld a5,0(s2) + 8000a6b4: 00744483 lbu s1,7(s0) + 8000a6b8: 000780e7 jalr a5 + 8000a6bc: 00a487bb addw a5,s1,a0 + 8000a6c0: 001be717 auipc a4,0x1be + 8000a6c4: 66870713 addi a4,a4,1640 # 801c8d28 + 8000a6c8: 0ff7f793 andi a5,a5,255 + 8000a6cc: 00f707b3 add a5,a4,a5 + 8000a6d0: 0007c603 lbu a2,0(a5) + 8000a6d4: 00644703 lbu a4,6(s0) + 8000a6d8: 00445503 lhu a0,4(s0) + 8000a6dc: 0004d697 auipc a3,0x4d + 8000a6e0: 19468693 addi a3,a3,404 # 80057870 <_ZL7ZNTable> + 8000a6e4: 00e67733 and a4,a2,a4 + 8000a6e8: 00a44783 lbu a5,10(s0) + 8000a6ec: 00e686b3 add a3,a3,a4 + 8000a6f0: 0006c683 lbu a3,0(a3) + 8000a6f4: 0015051b addiw a0,a0,1 + 8000a6f8: 07d7f793 andi a5,a5,125 + 8000a6fc: 03051513 slli a0,a0,0x30 + 8000a700: 03055513 srli a0,a0,0x30 + 8000a704: 00d7e7b3 or a5,a5,a3 + 8000a708: 00a41223 sh a0,4(s0) + 8000a70c: 00c40c23 sb a2,24(s0) + 8000a710: 00e40323 sb a4,6(s0) + 8000a714: 00f40523 sb a5,10(s0) + 8000a718: 01042483 lw s1,16(s0) + 8000a71c: 00ac8463 beq s9,a0,8000a724 <_Z14X6502_RunDebugi+0x98c4> + 8000a720: 94df606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000a724: 9d5f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000a728: 00351793 slli a5,a0,0x3 + 8000a72c: 00f907b3 add a5,s2,a5 + 8000a730: 0007b783 ld a5,0(a5) + 8000a734: 000780e7 jalr a5 + 8000a738: 0015079b addiw a5,a0,1 + 8000a73c: 001be717 auipc a4,0x1be + 8000a740: 5ec70713 addi a4,a4,1516 # 801c8d28 + 8000a744: 0ff7f793 andi a5,a5,255 + 8000a748: 02051513 slli a0,a0,0x20 + 8000a74c: 00f707b3 add a5,a4,a5 + 8000a750: 02055513 srli a0,a0,0x20 + 8000a754: 0007c603 lbu a2,0(a5) + 8000a758: 00a70533 add a0,a4,a0 + 8000a75c: 00054703 lbu a4,0(a0) + 8000a760: 00844d03 lbu s10,8(s0) + 8000a764: 0086179b slliw a5,a2,0x8 + 8000a768: 00e7e7b3 or a5,a5,a4 + 8000a76c: 00fd0d3b addw s10,s10,a5 + 8000a770: 0007879b sext.w a5,a5 + 8000a774: 0187f7b3 and a5,a5,s8 + 8000a778: 0ffd7513 andi a0,s10,255 + 8000a77c: 00f56733 or a4,a0,a5 + 8000a780: 00445683 lhu a3,4(s0) + 8000a784: 00371713 slli a4,a4,0x3 + 8000a788: 00e90733 add a4,s2,a4 + 8000a78c: 00073583 ld a1,0(a4) + 8000a790: 030d1d13 slli s10,s10,0x30 + 8000a794: 0016871b addiw a4,a3,1 + 8000a798: 030d5d13 srli s10,s10,0x30 + 8000a79c: 00e41223 sh a4,4(s0) + 8000a7a0: 00c40c23 sb a2,24(s0) + 8000a7a4: 003d1493 slli s1,s10,0x3 + 8000a7a8: 00f56533 or a0,a0,a5 + 8000a7ac: 000580e7 jalr a1 + 8000a7b0: 00990933 add s2,s2,s1 + 8000a7b4: 00093783 ld a5,0(s2) + 8000a7b8: 00a40c23 sb a0,24(s0) + 8000a7bc: 0013e917 auipc s2,0x13e + 8000a7c0: 52490913 addi s2,s2,1316 # 80148ce0 + 8000a7c4: 000d0513 mv a0,s10 + 8000a7c8: 000780e7 jalr a5 + 8000a7cc: 00990933 add s2,s2,s1 + 8000a7d0: 00093783 ld a5,0(s2) + 8000a7d4: 00050493 mv s1,a0 + 8000a7d8: 00050593 mv a1,a0 + 8000a7dc: 00940c23 sb s1,24(s0) + 8000a7e0: 000d0513 mv a0,s10 + 8000a7e4: 000780e7 jalr a5 + 8000a7e8: 00a44783 lbu a5,10(s0) + 8000a7ec: 0014959b slliw a1,s1,0x1 + 8000a7f0: 00644703 lbu a4,6(s0) + 8000a7f4: 0017f513 andi a0,a5,1 + 8000a7f8: 0ff5f593 andi a1,a1,255 + 8000a7fc: 00a5e633 or a2,a1,a0 + 8000a800: 0004d697 auipc a3,0x4d + 8000a804: 07068693 addi a3,a3,112 # 80057870 <_ZL7ZNTable> + 8000a808: 00060593 mv a1,a2 + 8000a80c: 00c68633 add a2,a3,a2 + 8000a810: 00064503 lbu a0,0(a2) + 8000a814: 00e5f733 and a4,a1,a4 + 8000a818: 00e686b3 add a3,a3,a4 + 8000a81c: 4074d49b sraiw s1,s1,0x7 + 8000a820: 07c7f793 andi a5,a5,124 + 8000a824: 0006c603 lbu a2,0(a3) + 8000a828: 0097e7b3 or a5,a5,s1 + 8000a82c: 00a7e7b3 or a5,a5,a0 + 8000a830: 00093683 ld a3,0(s2) + 8000a834: 07d7f793 andi a5,a5,125 + 8000a838: 00c7e7b3 or a5,a5,a2 + 8000a83c: 000d0513 mv a0,s10 + 8000a840: 00e40323 sb a4,6(s0) + 8000a844: 00f40523 sb a5,10(s0) + 8000a848: 000680e7 jalr a3 + 8000a84c: 00445503 lhu a0,4(s0) + 8000a850: 01042483 lw s1,16(s0) + 8000a854: 00ac8463 beq s9,a0,8000a85c <_Z14X6502_RunDebugi+0x99fc> + 8000a858: 815f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000a85c: 89df606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000a860: 00351793 slli a5,a0,0x3 + 8000a864: 00f907b3 add a5,s2,a5 + 8000a868: 0007b783 ld a5,0(a5) + 8000a86c: 000780e7 jalr a5 + 8000a870: 0015079b addiw a5,a0,1 + 8000a874: 001be717 auipc a4,0x1be + 8000a878: 4b470713 addi a4,a4,1204 # 801c8d28 + 8000a87c: 0ff7f793 andi a5,a5,255 + 8000a880: 02051513 slli a0,a0,0x20 + 8000a884: 00f707b3 add a5,a4,a5 + 8000a888: 02055513 srli a0,a0,0x20 + 8000a88c: 0007c603 lbu a2,0(a5) + 8000a890: 00a70533 add a0,a4,a0 + 8000a894: 00054583 lbu a1,0(a0) + 8000a898: 00844703 lbu a4,8(s0) + 8000a89c: 00445683 lhu a3,4(s0) + 8000a8a0: 0086179b slliw a5,a2,0x8 + 8000a8a4: 00b7e7b3 or a5,a5,a1 + 8000a8a8: 00f7073b addw a4,a4,a5 + 8000a8ac: 0016869b addiw a3,a3,1 + 8000a8b0: 00e7c7b3 xor a5,a5,a4 + 8000a8b4: 00d41223 sh a3,4(s0) + 8000a8b8: 00c40c23 sb a2,24(s0) + 8000a8bc: 1007f793 andi a5,a5,256 + 8000a8c0: 0007049b sext.w s1,a4 + 8000a8c4: 06078463 beqz a5,8000a92c <_Z14X6502_RunDebugi+0x9acc> + 8000a8c8: 03071493 slli s1,a4,0x30 + 8000a8cc: 0304d493 srli s1,s1,0x30 + 8000a8d0: 1004c793 xori a5,s1,256 + 8000a8d4: 00379793 slli a5,a5,0x3 + 8000a8d8: 00f907b3 add a5,s2,a5 + 8000a8dc: 0007b783 ld a5,0(a5) + 8000a8e0: 1004c513 xori a0,s1,256 + 8000a8e4: 000780e7 jalr a5 + 8000a8e8: 00042683 lw a3,0(s0) + 8000a8ec: 01042703 lw a4,16(s0) + 8000a8f0: 0009a783 lw a5,0(s3) + 8000a8f4: 000a4603 lbu a2,0(s4) + 8000a8f8: 0016869b addiw a3,a3,1 + 8000a8fc: fd07071b addiw a4,a4,-48 + 8000a900: 0017879b addiw a5,a5,1 + 8000a904: 00a40c23 sb a0,24(s0) + 8000a908: 00d42023 sw a3,0(s0) + 8000a90c: 00e42823 sw a4,16(s0) + 8000a910: 00f9a023 sw a5,0(s3) + 8000a914: 00061c63 bnez a2,8000a92c <_Z14X6502_RunDebugi+0x9acc> + 8000a918: 001c1717 auipc a4,0x1c1 + 8000a91c: 23070713 addi a4,a4,560 # 801cbb48 + 8000a920: 00072783 lw a5,0(a4) + 8000a924: 0017879b addiw a5,a5,1 + 8000a928: 00f72023 sw a5,0(a4) + 8000a92c: 00349793 slli a5,s1,0x3 + 8000a930: 00f90933 add s2,s2,a5 + 8000a934: 00093783 ld a5,0(s2) + 8000a938: 00048513 mv a0,s1 + 8000a93c: 000780e7 jalr a5 + 8000a940: 00644703 lbu a4,6(s0) + 8000a944: 0004d617 auipc a2,0x4d + 8000a948: f2c60613 addi a2,a2,-212 # 80057870 <_ZL7ZNTable> + 8000a94c: 00a44783 lbu a5,10(s0) + 8000a950: 00e57733 and a4,a0,a4 + 8000a954: 00e60633 add a2,a2,a4 + 8000a958: 00064603 lbu a2,0(a2) + 8000a95c: 00050693 mv a3,a0 + 8000a960: 07d7f793 andi a5,a5,125 + 8000a964: 00445503 lhu a0,4(s0) + 8000a968: 00c7e7b3 or a5,a5,a2 + 8000a96c: 00d40c23 sb a3,24(s0) + 8000a970: 00e40323 sb a4,6(s0) + 8000a974: 00f40523 sb a5,10(s0) + 8000a978: 01042483 lw s1,16(s0) + 8000a97c: 00ac8463 beq s9,a0,8000a984 <_Z14X6502_RunDebugi+0x9b24> + 8000a980: eecf606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000a984: f74f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000a988: 00a40783 lb a5,10(s0) + 8000a98c: 2e07c0e3 bltz a5,8000b46c <_Z14X6502_RunDebugi+0xa60c> + 8000a990: 002c851b addiw a0,s9,2 + 8000a994: 03051513 slli a0,a0,0x30 + 8000a998: 03055513 srli a0,a0,0x30 + 8000a99c: 00a41223 sh a0,4(s0) + 8000a9a0: 01042483 lw s1,16(s0) + 8000a9a4: 00ac8463 beq s9,a0,8000a9ac <_Z14X6502_RunDebugi+0x9b4c> + 8000a9a8: ec4f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000a9ac: f4cf606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000a9b0: 00351793 slli a5,a0,0x3 + 8000a9b4: 00f907b3 add a5,s2,a5 + 8000a9b8: 0007b783 ld a5,0(a5) + 8000a9bc: 000780e7 jalr a5 + 8000a9c0: 00445783 lhu a5,4(s0) + 8000a9c4: 00050493 mv s1,a0 + 8000a9c8: 00a40c23 sb a0,24(s0) + 8000a9cc: 0017879b addiw a5,a5,1 + 8000a9d0: 03079513 slli a0,a5,0x30 + 8000a9d4: 03055513 srli a0,a0,0x30 + 8000a9d8: 00351793 slli a5,a0,0x3 + 8000a9dc: 00f907b3 add a5,s2,a5 + 8000a9e0: 0007b783 ld a5,0(a5) + 8000a9e4: 00a41223 sh a0,4(s0) + 8000a9e8: 0004849b sext.w s1,s1 + 8000a9ec: 000780e7 jalr a5 + 8000a9f0: 00851713 slli a4,a0,0x8 + 8000a9f4: 00976d33 or s10,a4,s1 + 8000a9f8: 00445783 lhu a5,4(s0) + 8000a9fc: 003d1d13 slli s10,s10,0x3 + 8000aa00: 01a90933 add s2,s2,s10 + 8000aa04: 00093683 ld a3,0(s2) + 8000aa08: 0017879b addiw a5,a5,1 + 8000aa0c: 00976933 or s2,a4,s1 + 8000aa10: 00a40c23 sb a0,24(s0) + 8000aa14: 00f41223 sh a5,4(s0) + 8000aa18: 00090513 mv a0,s2 + 8000aa1c: 000680e7 jalr a3 + 8000aa20: 0013e797 auipc a5,0x13e + 8000aa24: 2c078793 addi a5,a5,704 # 80148ce0 + 8000aa28: 01a78d33 add s10,a5,s10 + 8000aa2c: 000d3783 ld a5,0(s10) + 8000aa30: 00050493 mv s1,a0 + 8000aa34: 00050593 mv a1,a0 + 8000aa38: 00940c23 sb s1,24(s0) + 8000aa3c: 00090513 mv a0,s2 + 8000aa40: 000780e7 jalr a5 + 8000aa44: 00a44783 lbu a5,10(s0) + 8000aa48: 0014959b slliw a1,s1,0x1 + 8000aa4c: 00644703 lbu a4,6(s0) + 8000aa50: 0017f513 andi a0,a5,1 + 8000aa54: 0ff5f593 andi a1,a1,255 + 8000aa58: 00a5e633 or a2,a1,a0 + 8000aa5c: 0004d697 auipc a3,0x4d + 8000aa60: e1468693 addi a3,a3,-492 # 80057870 <_ZL7ZNTable> + 8000aa64: 00060593 mv a1,a2 + 8000aa68: 00c68633 add a2,a3,a2 + 8000aa6c: 00064503 lbu a0,0(a2) + 8000aa70: 00e5f733 and a4,a1,a4 + 8000aa74: 00e686b3 add a3,a3,a4 + 8000aa78: 4074d49b sraiw s1,s1,0x7 + 8000aa7c: 07c7f793 andi a5,a5,124 + 8000aa80: 0006c603 lbu a2,0(a3) + 8000aa84: 0097e7b3 or a5,a5,s1 + 8000aa88: 00a7e7b3 or a5,a5,a0 + 8000aa8c: 000d3683 ld a3,0(s10) + 8000aa90: 07d7f793 andi a5,a5,125 + 8000aa94: 00c7e7b3 or a5,a5,a2 + 8000aa98: 00090513 mv a0,s2 + 8000aa9c: 00e40323 sb a4,6(s0) + 8000aaa0: 00f40523 sb a5,10(s0) + 8000aaa4: 000680e7 jalr a3 + 8000aaa8: 00445503 lhu a0,4(s0) + 8000aaac: 01042483 lw s1,16(s0) + 8000aab0: 00ac8463 beq s9,a0,8000aab8 <_Z14X6502_RunDebugi+0x9c58> + 8000aab4: db8f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000aab8: e40f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000aabc: 00351793 slli a5,a0,0x3 + 8000aac0: 00f907b3 add a5,s2,a5 + 8000aac4: 0007b783 ld a5,0(a5) + 8000aac8: 000780e7 jalr a5 + 8000aacc: 00445783 lhu a5,4(s0) + 8000aad0: 00050493 mv s1,a0 + 8000aad4: 00a40c23 sb a0,24(s0) + 8000aad8: 0017879b addiw a5,a5,1 + 8000aadc: 03079513 slli a0,a5,0x30 + 8000aae0: 03055513 srli a0,a0,0x30 + 8000aae4: 00351793 slli a5,a0,0x3 + 8000aae8: 00f907b3 add a5,s2,a5 + 8000aaec: 0007b783 ld a5,0(a5) + 8000aaf0: 00a41223 sh a0,4(s0) + 8000aaf4: 0004849b sext.w s1,s1 + 8000aaf8: 000780e7 jalr a5 + 8000aafc: 00851d93 slli s11,a0,0x8 + 8000ab00: 009ded33 or s10,s11,s1 + 8000ab04: 00445783 lhu a5,4(s0) + 8000ab08: 003d1d13 slli s10,s10,0x3 + 8000ab0c: 01a90933 add s2,s2,s10 + 8000ab10: 00093703 ld a4,0(s2) + 8000ab14: 009dedb3 or s11,s11,s1 + 8000ab18: 0017879b addiw a5,a5,1 + 8000ab1c: 00a40c23 sb a0,24(s0) + 8000ab20: 00f41223 sh a5,4(s0) + 8000ab24: 000d8513 mv a0,s11 + 8000ab28: 0013e917 auipc s2,0x13e + 8000ab2c: 1b890913 addi s2,s2,440 # 80148ce0 + 8000ab30: 000700e7 jalr a4 + 8000ab34: 01a90933 add s2,s2,s10 + 8000ab38: 00093783 ld a5,0(s2) + 8000ab3c: 00050493 mv s1,a0 + 8000ab40: 00050593 mv a1,a0 + 8000ab44: 00940c23 sb s1,24(s0) + 8000ab48: 000d8513 mv a0,s11 + 8000ab4c: 000780e7 jalr a5 + 8000ab50: 00a44783 lbu a5,10(s0) + 8000ab54: 0014971b slliw a4,s1,0x1 + 8000ab58: 0ff77713 andi a4,a4,255 + 8000ab5c: 0017f593 andi a1,a5,1 + 8000ab60: 00b76633 or a2,a4,a1 + 8000ab64: 0004d697 auipc a3,0x4d + 8000ab68: d0c68693 addi a3,a3,-756 # 80057870 <_ZL7ZNTable> + 8000ab6c: 00c686b3 add a3,a3,a2 + 8000ab70: 0006c603 lbu a2,0(a3) + 8000ab74: 4074d49b sraiw s1,s1,0x7 + 8000ab78: 07c7f793 andi a5,a5,124 + 8000ab7c: 0097e7b3 or a5,a5,s1 + 8000ab80: 00093683 ld a3,0(s2) + 8000ab84: 00c7e7b3 or a5,a5,a2 + 8000ab88: 000d8513 mv a0,s11 + 8000ab8c: 00f40523 sb a5,10(s0) + 8000ab90: 00b765b3 or a1,a4,a1 + 8000ab94: 000680e7 jalr a3 + 8000ab98: 00445503 lhu a0,4(s0) + 8000ab9c: 01042483 lw s1,16(s0) + 8000aba0: 00ac8463 beq s9,a0,8000aba8 <_Z14X6502_RunDebugi+0x9d48> + 8000aba4: cc8f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000aba8: d50f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000abac: 00351793 slli a5,a0,0x3 + 8000abb0: 00f907b3 add a5,s2,a5 + 8000abb4: 0007b783 ld a5,0(a5) + 8000abb8: 000780e7 jalr a5 + 8000abbc: 00445783 lhu a5,4(s0) + 8000abc0: 00050493 mv s1,a0 + 8000abc4: 00a40c23 sb a0,24(s0) + 8000abc8: 0017879b addiw a5,a5,1 + 8000abcc: 03079513 slli a0,a5,0x30 + 8000abd0: 03055513 srli a0,a0,0x30 + 8000abd4: 00351793 slli a5,a0,0x3 + 8000abd8: 00f907b3 add a5,s2,a5 + 8000abdc: 0007b783 ld a5,0(a5) + 8000abe0: 00a41223 sh a0,4(s0) + 8000abe4: 0004849b sext.w s1,s1 + 8000abe8: 000780e7 jalr a5 + 8000abec: 00851693 slli a3,a0,0x8 + 8000abf0: 0096e7b3 or a5,a3,s1 + 8000abf4: 00445703 lhu a4,4(s0) + 8000abf8: 00379793 slli a5,a5,0x3 + 8000abfc: 00f90933 add s2,s2,a5 + 8000ac00: 00093603 ld a2,0(s2) + 8000ac04: 0017079b addiw a5,a4,1 + 8000ac08: 00a40c23 sb a0,24(s0) + 8000ac0c: 00f41223 sh a5,4(s0) + 8000ac10: 0096e533 or a0,a3,s1 + 8000ac14: 000600e7 jalr a2 + 8000ac18: 00644703 lbu a4,6(s0) + 8000ac1c: 0004d617 auipc a2,0x4d + 8000ac20: c5460613 addi a2,a2,-940 # 80057870 <_ZL7ZNTable> + 8000ac24: 00a44783 lbu a5,10(s0) + 8000ac28: 00e57733 and a4,a0,a4 + 8000ac2c: 00e60633 add a2,a2,a4 + 8000ac30: 00064603 lbu a2,0(a2) + 8000ac34: 00050693 mv a3,a0 + 8000ac38: 07d7f793 andi a5,a5,125 + 8000ac3c: 00445503 lhu a0,4(s0) + 8000ac40: 00c7e7b3 or a5,a5,a2 + 8000ac44: 00d40c23 sb a3,24(s0) + 8000ac48: 00e40323 sb a4,6(s0) + 8000ac4c: 00f40523 sb a5,10(s0) + 8000ac50: 01042483 lw s1,16(s0) + 8000ac54: 00ac8463 beq s9,a0,8000ac5c <_Z14X6502_RunDebugi+0x9dfc> + 8000ac58: c14f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000ac5c: c9cf606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000ac60: 00351793 slli a5,a0,0x3 + 8000ac64: 00f907b3 add a5,s2,a5 + 8000ac68: 0007b783 ld a5,0(a5) + 8000ac6c: 000780e7 jalr a5 + 8000ac70: 00445783 lhu a5,4(s0) + 8000ac74: 00050493 mv s1,a0 + 8000ac78: 00a40c23 sb a0,24(s0) + 8000ac7c: 0017879b addiw a5,a5,1 + 8000ac80: 03079513 slli a0,a5,0x30 + 8000ac84: 03055513 srli a0,a0,0x30 + 8000ac88: 00351793 slli a5,a0,0x3 + 8000ac8c: 00f907b3 add a5,s2,a5 + 8000ac90: 0007b783 ld a5,0(a5) + 8000ac94: 00a41223 sh a0,4(s0) + 8000ac98: 0004849b sext.w s1,s1 + 8000ac9c: 000780e7 jalr a5 + 8000aca0: 00851693 slli a3,a0,0x8 + 8000aca4: 0096e7b3 or a5,a3,s1 + 8000aca8: 00445703 lhu a4,4(s0) + 8000acac: 00379793 slli a5,a5,0x3 + 8000acb0: 00f90933 add s2,s2,a5 + 8000acb4: 00093603 ld a2,0(s2) + 8000acb8: 0017079b addiw a5,a4,1 + 8000acbc: 00a40c23 sb a0,24(s0) + 8000acc0: 00f41223 sh a5,4(s0) + 8000acc4: 0096e533 or a0,a3,s1 + 8000acc8: 000600e7 jalr a2 + 8000accc: 00644783 lbu a5,6(s0) + 8000acd0: 00050713 mv a4,a0 + 8000acd4: fc057613 andi a2,a0,-64 + 8000acd8: 00f576b3 and a3,a0,a5 + 8000acdc: 0004d797 auipc a5,0x4d + 8000ace0: b9478793 addi a5,a5,-1132 # 80057870 <_ZL7ZNTable> + 8000ace4: 00d787b3 add a5,a5,a3 + 8000ace8: 0007c783 lbu a5,0(a5) + 8000acec: 00a44683 lbu a3,10(s0) + 8000acf0: 00445503 lhu a0,4(s0) + 8000acf4: 0027f793 andi a5,a5,2 + 8000acf8: 03d6f693 andi a3,a3,61 + 8000acfc: 00d7e7b3 or a5,a5,a3 + 8000ad00: 00c7e7b3 or a5,a5,a2 + 8000ad04: 00e40c23 sb a4,24(s0) + 8000ad08: 00f40523 sb a5,10(s0) + 8000ad0c: 01042483 lw s1,16(s0) + 8000ad10: 00ac8463 beq s9,a0,8000ad18 <_Z14X6502_RunDebugi+0x9eb8> + 8000ad14: b58f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000ad18: be0f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000ad1c: 00644683 lbu a3,6(s0) + 8000ad20: 00a44783 lbu a5,10(s0) + 8000ad24: 0004d617 auipc a2,0x4d + 8000ad28: b4c60613 addi a2,a2,-1204 # 80057870 <_ZL7ZNTable> + 8000ad2c: 0016971b slliw a4,a3,0x1 + 8000ad30: 0017f593 andi a1,a5,1 + 8000ad34: 0ff77713 andi a4,a4,255 + 8000ad38: 00b76833 or a6,a4,a1 + 8000ad3c: 01060633 add a2,a2,a6 + 8000ad40: 00064603 lbu a2,0(a2) + 8000ad44: 07c7f793 andi a5,a5,124 + 8000ad48: 4076d69b sraiw a3,a3,0x7 + 8000ad4c: 00d7e7b3 or a5,a5,a3 + 8000ad50: 00c7e7b3 or a5,a5,a2 + 8000ad54: 00f40523 sb a5,10(s0) + 8000ad58: 01040323 sb a6,6(s0) + 8000ad5c: 01042483 lw s1,16(s0) + 8000ad60: 00ac8463 beq s9,a0,8000ad68 <_Z14X6502_RunDebugi+0x9f08> + 8000ad64: b08f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000ad68: b90f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000ad6c: 00351793 slli a5,a0,0x3 + 8000ad70: 00f90933 add s2,s2,a5 + 8000ad74: 00093783 ld a5,0(s2) + 8000ad78: 000780e7 jalr a5 + 8000ad7c: 00644703 lbu a4,6(s0) + 8000ad80: 00050693 mv a3,a0 + 8000ad84: 0004d617 auipc a2,0x4d + 8000ad88: aec60613 addi a2,a2,-1300 # 80057870 <_ZL7ZNTable> + 8000ad8c: 00e57733 and a4,a0,a4 + 8000ad90: 00445503 lhu a0,4(s0) + 8000ad94: 00a44783 lbu a5,10(s0) + 8000ad98: 00e60633 add a2,a2,a4 + 8000ad9c: 00064603 lbu a2,0(a2) + 8000ada0: 0015051b addiw a0,a0,1 + 8000ada4: 07d7f793 andi a5,a5,125 + 8000ada8: 03051513 slli a0,a0,0x30 + 8000adac: 03055513 srli a0,a0,0x30 + 8000adb0: 00c7e7b3 or a5,a5,a2 + 8000adb4: 00d40c23 sb a3,24(s0) + 8000adb8: 00a41223 sh a0,4(s0) + 8000adbc: 00e40323 sb a4,6(s0) + 8000adc0: 00f40523 sb a5,10(s0) + 8000adc4: 01042483 lw s1,16(s0) + 8000adc8: 00ac8463 beq s9,a0,8000add0 <_Z14X6502_RunDebugi+0x9f70> + 8000adcc: aa0f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000add0: b28f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000add4: 00351793 slli a5,a0,0x3 + 8000add8: 00f907b3 add a5,s2,a5 + 8000addc: 0007b783 ld a5,0(a5) + 8000ade0: 000780e7 jalr a5 + 8000ade4: 00744783 lbu a5,7(s0) + 8000ade8: 001be697 auipc a3,0x1be + 8000adec: f4068693 addi a3,a3,-192 # 801c8d28 + 8000adf0: 00445603 lhu a2,4(s0) + 8000adf4: 00a787bb addw a5,a5,a0 + 8000adf8: 00178713 addi a4,a5,1 + 8000adfc: 0ff77713 andi a4,a4,255 + 8000ae00: 00e68733 add a4,a3,a4 + 8000ae04: 0ff7f793 andi a5,a5,255 + 8000ae08: 00074703 lbu a4,0(a4) + 8000ae0c: 00f687b3 add a5,a3,a5 + 8000ae10: 0007c783 lbu a5,0(a5) + 8000ae14: 0087151b slliw a0,a4,0x8 + 8000ae18: 0016061b addiw a2,a2,1 + 8000ae1c: 00f56533 or a0,a0,a5 + 8000ae20: 03051793 slli a5,a0,0x30 + 8000ae24: 02d7d793 srli a5,a5,0x2d + 8000ae28: 00f90933 add s2,s2,a5 + 8000ae2c: 00093783 ld a5,0(s2) + 8000ae30: 00c41223 sh a2,4(s0) + 8000ae34: 00e40c23 sb a4,24(s0) + 8000ae38: 0005051b sext.w a0,a0 + 8000ae3c: 000780e7 jalr a5 + 8000ae40: 00644703 lbu a4,6(s0) + 8000ae44: 0004d617 auipc a2,0x4d + 8000ae48: a2c60613 addi a2,a2,-1492 # 80057870 <_ZL7ZNTable> + 8000ae4c: 00a44783 lbu a5,10(s0) + 8000ae50: 00e54733 xor a4,a0,a4 + 8000ae54: 00e60633 add a2,a2,a4 + 8000ae58: 00064603 lbu a2,0(a2) + 8000ae5c: 00050693 mv a3,a0 + 8000ae60: 07d7f793 andi a5,a5,125 + 8000ae64: 00445503 lhu a0,4(s0) + 8000ae68: 00c7e7b3 or a5,a5,a2 + 8000ae6c: 00d40c23 sb a3,24(s0) + 8000ae70: 00e40323 sb a4,6(s0) + 8000ae74: 00f40523 sb a5,10(s0) + 8000ae78: 01042483 lw s1,16(s0) + 8000ae7c: 00ac8463 beq s9,a0,8000ae84 <_Z14X6502_RunDebugi+0xa024> + 8000ae80: 9ecf606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000ae84: a74f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000ae88: 00944783 lbu a5,9(s0) + 8000ae8c: 001be717 auipc a4,0x1be + 8000ae90: e9c70713 addi a4,a4,-356 # 801c8d28 + 8000ae94: 01042483 lw s1,16(s0) + 8000ae98: 0037861b addiw a2,a5,3 + 8000ae9c: 0ff67613 andi a2,a2,255 + 8000aea0: 0027869b addiw a3,a5,2 + 8000aea4: 0ff6f693 andi a3,a3,255 + 8000aea8: 0017879b addiw a5,a5,1 + 8000aeac: 00c705b3 add a1,a4,a2 + 8000aeb0: 1005c583 lbu a1,256(a1) + 8000aeb4: 0ff7f793 andi a5,a5,255 + 8000aeb8: 00d706b3 add a3,a4,a3 + 8000aebc: 1006c683 lbu a3,256(a3) + 8000aec0: 00f707b3 add a5,a4,a5 + 8000aec4: 1007c783 lbu a5,256(a5) + 8000aec8: 00859513 slli a0,a1,0x8 + 8000aecc: 00d56533 or a0,a0,a3 + 8000aed0: 00f40523 sb a5,10(s0) + 8000aed4: 00f405a3 sb a5,11(s0) + 8000aed8: 00c404a3 sb a2,9(s0) + 8000aedc: 00b40c23 sb a1,24(s0) + 8000aee0: 00a41223 sh a0,4(s0) + 8000aee4: 00ac8463 beq s9,a0,8000aeec <_Z14X6502_RunDebugi+0xa08c> + 8000aee8: 984f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000aeec: a0cf606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000aef0: 00351793 slli a5,a0,0x3 + 8000aef4: 00f907b3 add a5,s2,a5 + 8000aef8: 0007b783 ld a5,0(a5) + 8000aefc: 000780e7 jalr a5 + 8000af00: 00445783 lhu a5,4(s0) + 8000af04: 00050713 mv a4,a0 + 8000af08: 00a40c23 sb a0,24(s0) + 8000af0c: 0017879b addiw a5,a5,1 + 8000af10: 03079513 slli a0,a5,0x30 + 8000af14: 03055513 srli a0,a0,0x30 + 8000af18: 00351793 slli a5,a0,0x3 + 8000af1c: 00f907b3 add a5,s2,a5 + 8000af20: 0007b783 ld a5,0(a5) + 8000af24: 00a41223 sh a0,4(s0) + 8000af28: 0007049b sext.w s1,a4 + 8000af2c: 000780e7 jalr a5 + 8000af30: 00744d03 lbu s10,7(s0) + 8000af34: 00851793 slli a5,a0,0x8 + 8000af38: 0097e7b3 or a5,a5,s1 + 8000af3c: 00fd0d3b addw s10,s10,a5 + 8000af40: 0ffd7613 andi a2,s10,255 + 8000af44: 0187f7b3 and a5,a5,s8 + 8000af48: 00f66733 or a4,a2,a5 + 8000af4c: 00445683 lhu a3,4(s0) + 8000af50: 00371713 slli a4,a4,0x3 + 8000af54: 00e90733 add a4,s2,a4 + 8000af58: 00073583 ld a1,0(a4) + 8000af5c: 030d1d13 slli s10,s10,0x30 + 8000af60: 0016871b addiw a4,a3,1 + 8000af64: 030d5d13 srli s10,s10,0x30 + 8000af68: 00e41223 sh a4,4(s0) + 8000af6c: 003d1493 slli s1,s10,0x3 + 8000af70: 00a40c23 sb a0,24(s0) + 8000af74: 00f66533 or a0,a2,a5 + 8000af78: 000580e7 jalr a1 + 8000af7c: 00990933 add s2,s2,s1 + 8000af80: 00093783 ld a5,0(s2) + 8000af84: 00a40c23 sb a0,24(s0) + 8000af88: 0013e917 auipc s2,0x13e + 8000af8c: d5890913 addi s2,s2,-680 # 80148ce0 + 8000af90: 000d0513 mv a0,s10 + 8000af94: 000780e7 jalr a5 + 8000af98: 00990933 add s2,s2,s1 + 8000af9c: 00093783 ld a5,0(s2) + 8000afa0: 00050493 mv s1,a0 + 8000afa4: 00050593 mv a1,a0 + 8000afa8: 00940c23 sb s1,24(s0) + 8000afac: 000d0513 mv a0,s10 + 8000afb0: 000780e7 jalr a5 + 8000afb4: 00a44783 lbu a5,10(s0) + 8000afb8: 0014959b slliw a1,s1,0x1 + 8000afbc: 00644703 lbu a4,6(s0) + 8000afc0: 0017f513 andi a0,a5,1 + 8000afc4: 0ff5f593 andi a1,a1,255 + 8000afc8: 00a5e633 or a2,a1,a0 + 8000afcc: 0004d697 auipc a3,0x4d + 8000afd0: 8a468693 addi a3,a3,-1884 # 80057870 <_ZL7ZNTable> + 8000afd4: 00060593 mv a1,a2 + 8000afd8: 00c68633 add a2,a3,a2 + 8000afdc: 00064503 lbu a0,0(a2) + 8000afe0: 00e5f733 and a4,a1,a4 + 8000afe4: 00e686b3 add a3,a3,a4 + 8000afe8: 4074d49b sraiw s1,s1,0x7 + 8000afec: 07c7f793 andi a5,a5,124 + 8000aff0: 0006c603 lbu a2,0(a3) + 8000aff4: 0097e7b3 or a5,a5,s1 + 8000aff8: 00a7e7b3 or a5,a5,a0 + 8000affc: 00093683 ld a3,0(s2) + 8000b000: 07d7f793 andi a5,a5,125 + 8000b004: 00c7e7b3 or a5,a5,a2 + 8000b008: 000d0513 mv a0,s10 + 8000b00c: 00e40323 sb a4,6(s0) + 8000b010: 00f40523 sb a5,10(s0) + 8000b014: 000680e7 jalr a3 + 8000b018: 00445503 lhu a0,4(s0) + 8000b01c: 01042483 lw s1,16(s0) + 8000b020: 00ac8463 beq s9,a0,8000b028 <_Z14X6502_RunDebugi+0xa1c8> + 8000b024: 848f606f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b028: 8d0f606f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b02c: 00351793 slli a5,a0,0x3 + 8000b030: 00f907b3 add a5,s2,a5 + 8000b034: 0007b783 ld a5,0(a5) + 8000b038: 000780e7 jalr a5 + 8000b03c: 00445783 lhu a5,4(s0) + 8000b040: 00050713 mv a4,a0 + 8000b044: 00a40c23 sb a0,24(s0) + 8000b048: 0017879b addiw a5,a5,1 + 8000b04c: 03079513 slli a0,a5,0x30 + 8000b050: 03055513 srli a0,a0,0x30 + 8000b054: 00351793 slli a5,a0,0x3 + 8000b058: 00f907b3 add a5,s2,a5 + 8000b05c: 0007b783 ld a5,0(a5) + 8000b060: 00a41223 sh a0,4(s0) + 8000b064: 0007049b sext.w s1,a4 + 8000b068: 000780e7 jalr a5 + 8000b06c: 00744683 lbu a3,7(s0) + 8000b070: 00851793 slli a5,a0,0x8 + 8000b074: 0097e7b3 or a5,a5,s1 + 8000b078: 00f686bb addw a3,a3,a5 + 8000b07c: 0ff6f593 andi a1,a3,255 + 8000b080: 0187f7b3 and a5,a5,s8 + 8000b084: 00f5e733 or a4,a1,a5 + 8000b088: 00445603 lhu a2,4(s0) + 8000b08c: 00371713 slli a4,a4,0x3 + 8000b090: 00e90733 add a4,s2,a4 + 8000b094: 00073803 ld a6,0(a4) + 8000b098: 03069d13 slli s10,a3,0x30 + 8000b09c: 0016071b addiw a4,a2,1 + 8000b0a0: 030d5d13 srli s10,s10,0x30 + 8000b0a4: 00e41223 sh a4,4(s0) + 8000b0a8: 003d1493 slli s1,s10,0x3 + 8000b0ac: 00a40c23 sb a0,24(s0) + 8000b0b0: 00f5e533 or a0,a1,a5 + 8000b0b4: 000800e7 jalr a6 + 8000b0b8: 00990933 add s2,s2,s1 + 8000b0bc: 00093783 ld a5,0(s2) + 8000b0c0: 00a40c23 sb a0,24(s0) + 8000b0c4: 0013e917 auipc s2,0x13e + 8000b0c8: c1c90913 addi s2,s2,-996 # 80148ce0 + 8000b0cc: 000d0513 mv a0,s10 + 8000b0d0: 000780e7 jalr a5 + 8000b0d4: 00990933 add s2,s2,s1 + 8000b0d8: 00093783 ld a5,0(s2) + 8000b0dc: 00050493 mv s1,a0 + 8000b0e0: 00050593 mv a1,a0 + 8000b0e4: 00940c23 sb s1,24(s0) + 8000b0e8: 000d0513 mv a0,s10 + 8000b0ec: 000780e7 jalr a5 + 8000b0f0: 00a44783 lbu a5,10(s0) + 8000b0f4: 0014971b slliw a4,s1,0x1 + 8000b0f8: 0ff77713 andi a4,a4,255 + 8000b0fc: 0017f593 andi a1,a5,1 + 8000b100: 00b76633 or a2,a4,a1 + 8000b104: 0004c697 auipc a3,0x4c + 8000b108: 76c68693 addi a3,a3,1900 # 80057870 <_ZL7ZNTable> + 8000b10c: 00c686b3 add a3,a3,a2 + 8000b110: 0006c603 lbu a2,0(a3) + 8000b114: 4074d49b sraiw s1,s1,0x7 + 8000b118: 07c7f793 andi a5,a5,124 + 8000b11c: 0097e7b3 or a5,a5,s1 + 8000b120: 00093683 ld a3,0(s2) + 8000b124: 00c7e7b3 or a5,a5,a2 + 8000b128: 000d0513 mv a0,s10 + 8000b12c: 00f40523 sb a5,10(s0) + 8000b130: 00b765b3 or a1,a4,a1 + 8000b134: 000680e7 jalr a3 + 8000b138: 00445503 lhu a0,4(s0) + 8000b13c: 01042483 lw s1,16(s0) + 8000b140: 00ac8463 beq s9,a0,8000b148 <_Z14X6502_RunDebugi+0xa2e8> + 8000b144: f29f506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b148: fb1f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b14c: 00351793 slli a5,a0,0x3 + 8000b150: 00f90933 add s2,s2,a5 + 8000b154: 00093783 ld a5,0(s2) + 8000b158: 000780e7 jalr a5 + 8000b15c: 02051713 slli a4,a0,0x20 + 8000b160: 02075713 srli a4,a4,0x20 + 8000b164: 001be797 auipc a5,0x1be + 8000b168: bc478793 addi a5,a5,-1084 # 801c8d28 + 8000b16c: 00e787b3 add a5,a5,a4 + 8000b170: 0007c603 lbu a2,0(a5) + 8000b174: 00644703 lbu a4,6(s0) + 8000b178: 00445503 lhu a0,4(s0) + 8000b17c: 0004c697 auipc a3,0x4c + 8000b180: 6f468693 addi a3,a3,1780 # 80057870 <_ZL7ZNTable> + 8000b184: 00e64733 xor a4,a2,a4 + 8000b188: 00a44783 lbu a5,10(s0) + 8000b18c: 00e686b3 add a3,a3,a4 + 8000b190: 0006c683 lbu a3,0(a3) + 8000b194: 0015051b addiw a0,a0,1 + 8000b198: 07d7f793 andi a5,a5,125 + 8000b19c: 03051513 slli a0,a0,0x30 + 8000b1a0: 03055513 srli a0,a0,0x30 + 8000b1a4: 00d7e7b3 or a5,a5,a3 + 8000b1a8: 00a41223 sh a0,4(s0) + 8000b1ac: 00c40c23 sb a2,24(s0) + 8000b1b0: 00e40323 sb a4,6(s0) + 8000b1b4: 00f40523 sb a5,10(s0) + 8000b1b8: 01042483 lw s1,16(s0) + 8000b1bc: 00ac8463 beq s9,a0,8000b1c4 <_Z14X6502_RunDebugi+0xa364> + 8000b1c0: eadf506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b1c4: f35f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b1c8: 00351793 slli a5,a0,0x3 + 8000b1cc: 00f907b3 add a5,s2,a5 + 8000b1d0: 0007b783 ld a5,0(a5) + 8000b1d4: 0013ed17 auipc s10,0x13e + 8000b1d8: b0cd0d13 addi s10,s10,-1268 # 80148ce0 + 8000b1dc: 000780e7 jalr a5 + 8000b1e0: 00744783 lbu a5,7(s0) + 8000b1e4: 001be697 auipc a3,0x1be + 8000b1e8: b4468693 addi a3,a3,-1212 # 801c8d28 + 8000b1ec: 00445603 lhu a2,4(s0) + 8000b1f0: 00a787bb addw a5,a5,a0 + 8000b1f4: 00178713 addi a4,a5,1 + 8000b1f8: 0ff77713 andi a4,a4,255 + 8000b1fc: 00e68733 add a4,a3,a4 + 8000b200: 0ff7f793 andi a5,a5,255 + 8000b204: 00074703 lbu a4,0(a4) + 8000b208: 00f687b3 add a5,a3,a5 + 8000b20c: 0007c683 lbu a3,0(a5) + 8000b210: 0087179b slliw a5,a4,0x8 + 8000b214: 0016061b addiw a2,a2,1 + 8000b218: 00d7e7b3 or a5,a5,a3 + 8000b21c: 03079493 slli s1,a5,0x30 + 8000b220: 02d4d493 srli s1,s1,0x2d + 8000b224: 00990933 add s2,s2,s1 + 8000b228: 00093683 ld a3,0(s2) + 8000b22c: 0007891b sext.w s2,a5 + 8000b230: 00c41223 sh a2,4(s0) + 8000b234: 00e40c23 sb a4,24(s0) + 8000b238: 00090513 mv a0,s2 + 8000b23c: 000680e7 jalr a3 + 8000b240: 009d0d33 add s10,s10,s1 + 8000b244: 000d3783 ld a5,0(s10) + 8000b248: 00050493 mv s1,a0 + 8000b24c: 00050593 mv a1,a0 + 8000b250: 00940c23 sb s1,24(s0) + 8000b254: 00090513 mv a0,s2 + 8000b258: 000780e7 jalr a5 + 8000b25c: 00644703 lbu a4,6(s0) + 8000b260: 00a44783 lbu a5,10(s0) + 8000b264: 0014d613 srli a2,s1,0x1 + 8000b268: 0004c697 auipc a3,0x4c + 8000b26c: 60868693 addi a3,a3,1544 # 80057870 <_ZL7ZNTable> + 8000b270: 00060593 mv a1,a2 + 8000b274: 00c68633 add a2,a3,a2 + 8000b278: 00064503 lbu a0,0(a2) + 8000b27c: 00e5c733 xor a4,a1,a4 + 8000b280: 00e686b3 add a3,a3,a4 + 8000b284: 0014f493 andi s1,s1,1 + 8000b288: 07c7f793 andi a5,a5,124 + 8000b28c: 0006c603 lbu a2,0(a3) + 8000b290: 0097e7b3 or a5,a5,s1 + 8000b294: 00a7e7b3 or a5,a5,a0 + 8000b298: 000d3683 ld a3,0(s10) + 8000b29c: 07d7f793 andi a5,a5,125 + 8000b2a0: 00c7e7b3 or a5,a5,a2 + 8000b2a4: 00090513 mv a0,s2 + 8000b2a8: 00e40323 sb a4,6(s0) + 8000b2ac: 00f40523 sb a5,10(s0) + 8000b2b0: 000680e7 jalr a3 + 8000b2b4: 00445503 lhu a0,4(s0) + 8000b2b8: 01042483 lw s1,16(s0) + 8000b2bc: 00ac8463 beq s9,a0,8000b2c4 <_Z14X6502_RunDebugi+0xa464> + 8000b2c0: dadf506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b2c4: e35f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b2c8: 00944703 lbu a4,9(s0) + 8000b2cc: 002c879b addiw a5,s9,2 + 8000b2d0: 03079793 slli a5,a5,0x30 + 8000b2d4: 0307d793 srli a5,a5,0x30 + 8000b2d8: 00a44583 lbu a1,10(s0) + 8000b2dc: 00b44503 lbu a0,11(s0) + 8000b2e0: 001be697 auipc a3,0x1be + 8000b2e4: a4868693 addi a3,a3,-1464 # 801c8d28 + 8000b2e8: fff7061b addiw a2,a4,-1 + 8000b2ec: 00e688b3 add a7,a3,a4 + 8000b2f0: 4087d31b sraiw t1,a5,0x8 + 8000b2f4: 0013e497 auipc s1,0x13e + 8000b2f8: 9ec48493 addi s1,s1,-1556 # 80148ce0 + 8000b2fc: ffe7081b addiw a6,a4,-2 + 8000b300: 0ff67613 andi a2,a2,255 + 8000b304: 10688023 sb t1,256(a7) + 8000b308: 00c68633 add a2,a3,a2 + 8000b30c: ff04b883 ld a7,-16(s1) + 8000b310: 0ff87813 andi a6,a6,255 + 8000b314: 10f60023 sb a5,256(a2) + 8000b318: 010686b3 add a3,a3,a6 + 8000b31c: ffd7071b addiw a4,a4,-3 + 8000b320: 0305e813 ori a6,a1,48 + 8000b324: 00456613 ori a2,a0,4 + 8000b328: 0045e593 ori a1,a1,4 + 8000b32c: 00e404a3 sb a4,9(s0) + 8000b330: 00f41223 sh a5,4(s0) + 8000b334: 11068023 sb a6,256(a3) + 8000b338: 00b40523 sb a1,10(s0) + 8000b33c: 00c405a3 sb a2,11(s0) + 8000b340: ffea8513 addi a0,s5,-2 + 8000b344: 000880e7 jalr a7 + 8000b348: ff84b783 ld a5,-8(s1) + 8000b34c: 00a40c23 sb a0,24(s0) + 8000b350: 00a41223 sh a0,4(s0) + 8000b354: fffa8513 addi a0,s5,-1 + 8000b358: 000780e7 jalr a5 + 8000b35c: 00445703 lhu a4,4(s0) + 8000b360: 00050793 mv a5,a0 + 8000b364: 00851513 slli a0,a0,0x8 + 8000b368: 00a76733 or a4,a4,a0 + 8000b36c: 03071513 slli a0,a4,0x30 + 8000b370: 03055513 srli a0,a0,0x30 + 8000b374: 00f40c23 sb a5,24(s0) + 8000b378: 00a41223 sh a0,4(s0) + 8000b37c: 01042483 lw s1,16(s0) + 8000b380: 00ac8463 beq s9,a0,8000b388 <_Z14X6502_RunDebugi+0xa528> + 8000b384: ce9f506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b388: d71f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b38c: 002c851b addiw a0,s9,2 + 8000b390: 03051513 slli a0,a0,0x30 + 8000b394: 03055513 srli a0,a0,0x30 + 8000b398: 00a41223 sh a0,4(s0) + 8000b39c: 01042483 lw s1,16(s0) + 8000b3a0: 00ac8463 beq s9,a0,8000b3a8 <_Z14X6502_RunDebugi+0xa548> + 8000b3a4: cc9f506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b3a8: d51f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b3ac: 002c851b addiw a0,s9,2 + 8000b3b0: 03051513 slli a0,a0,0x30 + 8000b3b4: 03055513 srli a0,a0,0x30 + 8000b3b8: 00a41223 sh a0,4(s0) + 8000b3bc: 01042483 lw s1,16(s0) + 8000b3c0: 00ac8463 beq s9,a0,8000b3c8 <_Z14X6502_RunDebugi+0xa568> + 8000b3c4: ca9f506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b3c8: d31f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b3cc: 002c851b addiw a0,s9,2 + 8000b3d0: 03051513 slli a0,a0,0x30 + 8000b3d4: 03055513 srli a0,a0,0x30 + 8000b3d8: 00a41223 sh a0,4(s0) + 8000b3dc: 01042483 lw s1,16(s0) + 8000b3e0: 00ac8463 beq s9,a0,8000b3e8 <_Z14X6502_RunDebugi+0xa588> + 8000b3e4: c89f506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b3e8: d11f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b3ec: 002c851b addiw a0,s9,2 + 8000b3f0: 03051513 slli a0,a0,0x30 + 8000b3f4: 03055513 srli a0,a0,0x30 + 8000b3f8: 00a41223 sh a0,4(s0) + 8000b3fc: 01042483 lw s1,16(s0) + 8000b400: 00ac8463 beq s9,a0,8000b408 <_Z14X6502_RunDebugi+0xa5a8> + 8000b404: c69f506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b408: cf1f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b40c: 002c851b addiw a0,s9,2 + 8000b410: 03051513 slli a0,a0,0x30 + 8000b414: 03055513 srli a0,a0,0x30 + 8000b418: 00a41223 sh a0,4(s0) + 8000b41c: 01042483 lw s1,16(s0) + 8000b420: 00ac8463 beq s9,a0,8000b428 <_Z14X6502_RunDebugi+0xa5c8> + 8000b424: c49f506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b428: cd1f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b42c: 002c851b addiw a0,s9,2 + 8000b430: 03051513 slli a0,a0,0x30 + 8000b434: 03055513 srli a0,a0,0x30 + 8000b438: 00a41223 sh a0,4(s0) + 8000b43c: 01042483 lw s1,16(s0) + 8000b440: 00ac8463 beq s9,a0,8000b448 <_Z14X6502_RunDebugi+0xa5e8> + 8000b444: c29f506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b448: cb1f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b44c: 002c851b addiw a0,s9,2 + 8000b450: 03051513 slli a0,a0,0x30 + 8000b454: 03055513 srli a0,a0,0x30 + 8000b458: 00a41223 sh a0,4(s0) + 8000b45c: 01042483 lw s1,16(s0) + 8000b460: 00ac8463 beq s9,a0,8000b468 <_Z14X6502_RunDebugi+0xa608> + 8000b464: c09f506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b468: c91f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b46c: 00351793 slli a5,a0,0x3 + 8000b470: 00f90933 add s2,s2,a5 + 8000b474: 00093783 ld a5,0(s2) + 8000b478: 000780e7 jalr a5 + 8000b47c: 00445783 lhu a5,4(s0) + 8000b480: 00050613 mv a2,a0 + 8000b484: 0185151b slliw a0,a0,0x18 + 8000b488: 0017879b addiw a5,a5,1 + 8000b48c: 03079793 slli a5,a5,0x30 + 8000b490: 00042683 lw a3,0(s0) + 8000b494: 01042703 lw a4,16(s0) + 8000b498: 0009a803 lw a6,0(s3) + 8000b49c: 0307d793 srli a5,a5,0x30 + 8000b4a0: 4185551b sraiw a0,a0,0x18 + 8000b4a4: 00f5053b addw a0,a0,a5 + 8000b4a8: 03051513 slli a0,a0,0x30 + 8000b4ac: 000a4583 lbu a1,0(s4) + 8000b4b0: fd07049b addiw s1,a4,-48 + 8000b4b4: 0016831b addiw t1,a3,1 + 8000b4b8: 0018089b addiw a7,a6,1 + 8000b4bc: 03055513 srli a0,a0,0x30 + 8000b4c0: 00a7c7b3 xor a5,a5,a0 + 8000b4c4: 00c40c23 sb a2,24(s0) + 8000b4c8: 00642023 sw t1,0(s0) + 8000b4cc: 00942823 sw s1,16(s0) + 8000b4d0: 0119a023 sw a7,0(s3) + 8000b4d4: 1007f793 andi a5,a5,256 + 8000b4d8: 1a059063 bnez a1,8000b678 <_Z14X6502_RunDebugi+0xa818> + 8000b4dc: 001c0597 auipc a1,0x1c0 + 8000b4e0: 66c58593 addi a1,a1,1644 # 801cbb48 + 8000b4e4: 0005a603 lw a2,0(a1) + 8000b4e8: 00a41223 sh a0,4(s0) + 8000b4ec: 0016089b addiw a7,a2,1 + 8000b4f0: 0115a023 sw a7,0(a1) + 8000b4f4: 00079463 bnez a5,8000b4fc <_Z14X6502_RunDebugi+0xa69c> + 8000b4f8: b71f506f j 80001068 <_Z14X6502_RunDebugi+0x208> + 8000b4fc: fa07049b addiw s1,a4,-96 + 8000b500: 0026869b addiw a3,a3,2 + 8000b504: 0028079b addiw a5,a6,2 + 8000b508: 0026061b addiw a2,a2,2 + 8000b50c: 00d42023 sw a3,0(s0) + 8000b510: 00942823 sw s1,16(s0) + 8000b514: 00f9a023 sw a5,0(s3) + 8000b518: 00c5a023 sw a2,0(a1) + 8000b51c: 00ac8463 beq s9,a0,8000b524 <_Z14X6502_RunDebugi+0xa6c4> + 8000b520: b4df506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b524: bd5f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b528: 00a41223 sh a0,4(s0) + 8000b52c: 00079463 bnez a5,8000b534 <_Z14X6502_RunDebugi+0xa6d4> + 8000b530: b39f506f j 80001068 <_Z14X6502_RunDebugi+0x208> + 8000b534: fa06849b addiw s1,a3,-96 + 8000b538: 0025871b addiw a4,a1,2 + 8000b53c: 0026079b addiw a5,a2,2 + 8000b540: 00e42023 sw a4,0(s0) + 8000b544: 00942823 sw s1,16(s0) + 8000b548: 00f9a023 sw a5,0(s3) + 8000b54c: 00ac8463 beq s9,a0,8000b554 <_Z14X6502_RunDebugi+0xa6f4> + 8000b550: b1df506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b554: ba5f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b558: 00a41223 sh a0,4(s0) + 8000b55c: 00079463 bnez a5,8000b564 <_Z14X6502_RunDebugi+0xa704> + 8000b560: b09f506f j 80001068 <_Z14X6502_RunDebugi+0x208> + 8000b564: fa06849b addiw s1,a3,-96 + 8000b568: 0025859b addiw a1,a1,2 + 8000b56c: 0026061b addiw a2,a2,2 + 8000b570: 00b42023 sw a1,0(s0) + 8000b574: 00942823 sw s1,16(s0) + 8000b578: 00c9a023 sw a2,0(s3) + 8000b57c: 00ac8463 beq s9,a0,8000b584 <_Z14X6502_RunDebugi+0xa724> + 8000b580: aedf506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b584: b75f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b588: 00a41223 sh a0,4(s0) + 8000b58c: 00079463 bnez a5,8000b594 <_Z14X6502_RunDebugi+0xa734> + 8000b590: ad9f506f j 80001068 <_Z14X6502_RunDebugi+0x208> + 8000b594: fa07049b addiw s1,a4,-96 + 8000b598: 0025859b addiw a1,a1,2 + 8000b59c: 0026061b addiw a2,a2,2 + 8000b5a0: 00b42023 sw a1,0(s0) + 8000b5a4: 00942823 sw s1,16(s0) + 8000b5a8: 00c9a023 sw a2,0(s3) + 8000b5ac: 00ac8463 beq s9,a0,8000b5b4 <_Z14X6502_RunDebugi+0xa754> + 8000b5b0: abdf506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b5b4: b45f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b5b8: 00a41223 sh a0,4(s0) + 8000b5bc: 00079463 bnez a5,8000b5c4 <_Z14X6502_RunDebugi+0xa764> + 8000b5c0: aa9f506f j 80001068 <_Z14X6502_RunDebugi+0x208> + 8000b5c4: fa07049b addiw s1,a4,-96 + 8000b5c8: 0025859b addiw a1,a1,2 + 8000b5cc: 0026061b addiw a2,a2,2 + 8000b5d0: 00b42023 sw a1,0(s0) + 8000b5d4: 00942823 sw s1,16(s0) + 8000b5d8: 00c9a023 sw a2,0(s3) + 8000b5dc: 00ac8463 beq s9,a0,8000b5e4 <_Z14X6502_RunDebugi+0xa784> + 8000b5e0: a8df506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b5e4: b15f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b5e8: 00a41223 sh a0,4(s0) + 8000b5ec: 00079463 bnez a5,8000b5f4 <_Z14X6502_RunDebugi+0xa794> + 8000b5f0: a79f506f j 80001068 <_Z14X6502_RunDebugi+0x208> + 8000b5f4: fa06849b addiw s1,a3,-96 + 8000b5f8: 0025859b addiw a1,a1,2 + 8000b5fc: 0026061b addiw a2,a2,2 + 8000b600: 00b42023 sw a1,0(s0) + 8000b604: 00942823 sw s1,16(s0) + 8000b608: 00c9a023 sw a2,0(s3) + 8000b60c: 00ac8463 beq s9,a0,8000b614 <_Z14X6502_RunDebugi+0xa7b4> + 8000b610: a5df506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b614: ae5f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b618: 00a41223 sh a0,4(s0) + 8000b61c: 00079463 bnez a5,8000b624 <_Z14X6502_RunDebugi+0xa7c4> + 8000b620: a49f506f j 80001068 <_Z14X6502_RunDebugi+0x208> + 8000b624: fa07049b addiw s1,a4,-96 + 8000b628: 0025859b addiw a1,a1,2 + 8000b62c: 0026061b addiw a2,a2,2 + 8000b630: 00b42023 sw a1,0(s0) + 8000b634: 00942823 sw s1,16(s0) + 8000b638: 00c9a023 sw a2,0(s3) + 8000b63c: 00ac8463 beq s9,a0,8000b644 <_Z14X6502_RunDebugi+0xa7e4> + 8000b640: a2df506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b644: ab5f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b648: 00a41223 sh a0,4(s0) + 8000b64c: 00079463 bnez a5,8000b654 <_Z14X6502_RunDebugi+0xa7f4> + 8000b650: a19f506f j 80001068 <_Z14X6502_RunDebugi+0x208> + 8000b654: fa06849b addiw s1,a3,-96 + 8000b658: 0025859b addiw a1,a1,2 + 8000b65c: 0026061b addiw a2,a2,2 + 8000b660: 00b42023 sw a1,0(s0) + 8000b664: 00942823 sw s1,16(s0) + 8000b668: 00c9a023 sw a2,0(s3) + 8000b66c: 00ac8463 beq s9,a0,8000b674 <_Z14X6502_RunDebugi+0xa814> + 8000b670: 9fdf506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b674: a85f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + 8000b678: 00a41223 sh a0,4(s0) + 8000b67c: 00079463 bnez a5,8000b684 <_Z14X6502_RunDebugi+0xa824> + 8000b680: 9e9f506f j 80001068 <_Z14X6502_RunDebugi+0x208> + 8000b684: fa07049b addiw s1,a4,-96 + 8000b688: 0026869b addiw a3,a3,2 + 8000b68c: 0028079b addiw a5,a6,2 + 8000b690: 00d42023 sw a3,0(s0) + 8000b694: 00942823 sw s1,16(s0) + 8000b698: 00f9a023 sw a5,0(s3) + 8000b69c: 00ac8463 beq s9,a0,8000b6a4 <_Z14X6502_RunDebugi+0xa844> + 8000b6a0: 9cdf506f j 8000106c <_Z14X6502_RunDebugi+0x20c> + 8000b6a4: a55f506f j 800010f8 <_Z14X6502_RunDebugi+0x298> + +000000008000b6a8 <_ZL9Dummyfuncv>: + 8000b6a8: 00008067 ret + +000000008000b6ac <_Z6RDoPCMv>: + 8000b6ac: 001c0517 auipc a0,0x1c0 + 8000b6b0: 4b154503 lbu a0,1201(a0) # 801cbb5d + 8000b6b4: ff010113 addi sp,sp,-16 + 8000b6b8: 001bd597 auipc a1,0x1bd + 8000b6bc: 6445a583 lw a1,1604(a1) # 801c8cfc + 8000b6c0: 0085151b slliw a0,a0,0x8 + 8000b6c4: 00113423 sd ra,8(sp) + 8000b6c8: 6f42e0ef jal ra,80039dbc <__muldi3> + 8000b6cc: 00078597 auipc a1,0x78 + 8000b6d0: 7bc58593 addi a1,a1,1980 # 80083e88 <_ZL9ChannelBC> + 8000b6d4: 001c0717 auipc a4,0x1c0 + 8000b6d8: 4fc72703 lw a4,1276(a4) # 801cbbd0 + 8000b6dc: 001c0617 auipc a2,0x1c0 + 8000b6e0: 46c62603 lw a2,1132(a2) # 801cbb48 + 8000b6e4: 0105a783 lw a5,16(a1) + 8000b6e8: 00e6063b addw a2,a2,a4 + 8000b6ec: ffff0737 lui a4,0xffff0 + 8000b6f0: 00e57533 and a0,a0,a4 + 8000b6f4: 0006071b sext.w a4,a2 + 8000b6f8: 04e7fc63 bgeu a5,a4,8000b750 <_Z6RDoPCMv+0xa4> + 8000b6fc: 40f606bb subw a3,a2,a5 + 8000b700: fff6869b addiw a3,a3,-1 + 8000b704: 02079793 slli a5,a5,0x20 + 8000b708: 02069693 slli a3,a3,0x20 + 8000b70c: 0207d793 srli a5,a5,0x20 + 8000b710: 0206d693 srli a3,a3,0x20 + 8000b714: 00f686b3 add a3,a3,a5 + 8000b718: 00051717 auipc a4,0x51 + 8000b71c: 2b070713 addi a4,a4,688 # 8005c9c8 + 8000b720: 00279793 slli a5,a5,0x2 + 8000b724: 00269693 slli a3,a3,0x2 + 8000b728: 00e787b3 add a5,a5,a4 + 8000b72c: 00051717 auipc a4,0x51 + 8000b730: 2a070713 addi a4,a4,672 # 8005c9cc + 8000b734: 0005051b sext.w a0,a0 + 8000b738: 00e686b3 add a3,a3,a4 + 8000b73c: 0007a703 lw a4,0(a5) + 8000b740: 00478793 addi a5,a5,4 + 8000b744: 00a7073b addw a4,a4,a0 + 8000b748: fee7ae23 sw a4,-4(a5) + 8000b74c: fed798e3 bne a5,a3,8000b73c <_Z6RDoPCMv+0x90> + 8000b750: 00813083 ld ra,8(sp) + 8000b754: 00c5a823 sw a2,16(a1) + 8000b758: 01010113 addi sp,sp,16 + 8000b75c: 00008067 ret + +000000008000b760 <_ZL11RDoTrianglev>: + 8000b760: f9010113 addi sp,sp,-112 + 8000b764: 03713423 sd s7,40(sp) + 8000b768: 001c0b97 auipc s7,0x1c0 + 8000b76c: 43cb8b93 addi s7,s7,1084 # 801cbba4 <_ZL7tristep> + 8000b770: 03813023 sd s8,32(sp) + 8000b774: 000bac03 lw s8,0(s7) + 8000b778: 06113423 sd ra,104(sp) + 8000b77c: 06813023 sd s0,96(sp) + 8000b780: 04913c23 sd s1,88(sp) + 8000b784: 05213823 sd s2,80(sp) + 8000b788: 05313423 sd s3,72(sp) + 8000b78c: 05413023 sd s4,64(sp) + 8000b790: 03513c23 sd s5,56(sp) + 8000b794: 03613823 sd s6,48(sp) + 8000b798: 01913c23 sd s9,24(sp) + 8000b79c: 01a13823 sd s10,16(sp) + 8000b7a0: 01b13423 sd s11,8(sp) + 8000b7a4: 010c7693 andi a3,s8,16 + 8000b7a8: 00fc7793 andi a5,s8,15 + 8000b7ac: 00069463 bnez a3,8000b7b4 <_ZL11RDoTrianglev+0x54> + 8000b7b0: 00f7c793 xori a5,a5,15 + 8000b7b4: 0017951b slliw a0,a5,0x1 + 8000b7b8: 00f5053b addw a0,a0,a5 + 8000b7bc: 001c0497 auipc s1,0x1c0 + 8000b7c0: 38c4a483 lw s1,908(s1) # 801cbb48 + 8000b7c4: 001c0797 auipc a5,0x1c0 + 8000b7c8: 40c7a783 lw a5,1036(a5) # 801cbbd0 + 8000b7cc: 00f48a3b addw s4,s1,a5 + 8000b7d0: 0105199b slliw s3,a0,0x10 + 8000b7d4: 00078917 auipc s2,0x78 + 8000b7d8: 6b490913 addi s2,s2,1716 # 80083e88 <_ZL9ChannelBC> + 8000b7dc: 00078797 auipc a5,0x78 + 8000b7e0: 6cc7a783 lw a5,1740(a5) # 80083ea8 + 8000b7e4: 00892403 lw s0,8(s2) + 8000b7e8: 00098513 mv a0,s3 + 8000b7ec: 000a0493 mv s1,s4 + 8000b7f0: 12078a63 beqz a5,8000b924 <_ZL11RDoTrianglev+0x1c4> + 8000b7f4: 001c0797 auipc a5,0x1c0 + 8000b7f8: 36a7c783 lbu a5,874(a5) # 801cbb5e + 8000b7fc: 12078463 beqz a5,8000b924 <_ZL11RDoTrianglev+0x1c4> + 8000b800: 0f447263 bgeu s0,s4,8000b8e4 <_ZL11RDoTrianglev+0x184> + 8000b804: 0004c797 auipc a5,0x4c + 8000b808: 1b478793 addi a5,a5,436 # 800579b8 + 8000b80c: 00b7ca83 lbu s5,11(a5) + 8000b810: 408a0a3b subw s4,s4,s0 + 8000b814: 00a7c783 lbu a5,10(a5) + 8000b818: fffa0a1b addiw s4,s4,-1 + 8000b81c: 02041413 slli s0,s0,0x20 + 8000b820: 008a9a9b slliw s5,s5,0x8 + 8000b824: 020a1a13 slli s4,s4,0x20 + 8000b828: 02045413 srli s0,s0,0x20 + 8000b82c: 020a5a13 srli s4,s4,0x20 + 8000b830: 700afa93 andi s5,s5,1792 + 8000b834: 00078717 auipc a4,0x78 + 8000b838: 29470713 addi a4,a4,660 # 80083ac8 <_ZL7wlcount> + 8000b83c: 008a0a33 add s4,s4,s0 + 8000b840: 00faeab3 or s5,s5,a5 + 8000b844: 00241413 slli s0,s0,0x2 + 8000b848: 00051797 auipc a5,0x51 + 8000b84c: 18078793 addi a5,a5,384 # 8005c9c8 + 8000b850: 00872d83 lw s11,8(a4) + 8000b854: 002a1a13 slli s4,s4,0x2 + 8000b858: 00f40433 add s0,s0,a5 + 8000b85c: 00051797 auipc a5,0x51 + 8000b860: 17078793 addi a5,a5,368 # 8005c9cc + 8000b864: 001bdc97 auipc s9,0x1bd + 8000b868: 488cac83 lw s9,1160(s9) # 801c8cec + 8000b86c: 001a8a9b addiw s5,s5,1 + 8000b870: 00fa0a33 add s4,s4,a5 + 8000b874: 00000d13 li s10,0 + 8000b878: ffff0b37 lui s6,0xffff0 + 8000b87c: 4089d593 srai a1,s3,0x8 + 8000b880: 000c8513 mv a0,s9 + 8000b884: 5382e0ef jal ra,80039dbc <__muldi3> + 8000b888: 00042783 lw a5,0(s0) + 8000b88c: 01657533 and a0,a0,s6 + 8000b890: fffd8d9b addiw s11,s11,-1 + 8000b894: 00a787bb addw a5,a5,a0 + 8000b898: 00f42023 sw a5,0(s0) + 8000b89c: 00440413 addi s0,s0,4 + 8000b8a0: 020d9663 bnez s11,8000b8cc <_ZL11RDoTrianglev+0x16c> + 8000b8a4: 001c0c1b addiw s8,s8,1 + 8000b8a8: 010c7693 andi a3,s8,16 + 8000b8ac: 00fc7793 andi a5,s8,15 + 8000b8b0: 00069463 bnez a3,8000b8b8 <_ZL11RDoTrianglev+0x158> + 8000b8b4: 00f7c793 xori a5,a5,15 + 8000b8b8: 0017999b slliw s3,a5,0x1 + 8000b8bc: 00f989bb addw s3,s3,a5 + 8000b8c0: 0109999b slliw s3,s3,0x10 + 8000b8c4: 000a8d93 mv s11,s5 + 8000b8c8: 00100d13 li s10,1 + 8000b8cc: fa8a18e3 bne s4,s0,8000b87c <_ZL11RDoTrianglev+0x11c> + 8000b8d0: 00078797 auipc a5,0x78 + 8000b8d4: 1f878793 addi a5,a5,504 # 80083ac8 <_ZL7wlcount> + 8000b8d8: 01b7a423 sw s11,8(a5) + 8000b8dc: 000d0463 beqz s10,8000b8e4 <_ZL11RDoTrianglev+0x184> + 8000b8e0: 018ba023 sw s8,0(s7) + 8000b8e4: 06813083 ld ra,104(sp) + 8000b8e8: 06013403 ld s0,96(sp) + 8000b8ec: 00992423 sw s1,8(s2) + 8000b8f0: 04813983 ld s3,72(sp) + 8000b8f4: 05813483 ld s1,88(sp) + 8000b8f8: 05013903 ld s2,80(sp) + 8000b8fc: 04013a03 ld s4,64(sp) + 8000b900: 03813a83 ld s5,56(sp) + 8000b904: 03013b03 ld s6,48(sp) + 8000b908: 02813b83 ld s7,40(sp) + 8000b90c: 02013c03 ld s8,32(sp) + 8000b910: 01813c83 ld s9,24(sp) + 8000b914: 01013d03 ld s10,16(sp) + 8000b918: 00813d83 ld s11,8(sp) + 8000b91c: 07010113 addi sp,sp,112 + 8000b920: 00008067 ret + 8000b924: 001bd597 auipc a1,0x1bd + 8000b928: 3c85a583 lw a1,968(a1) # 801c8cec + 8000b92c: 4085551b sraiw a0,a0,0x8 + 8000b930: 48c2e0ef jal ra,80039dbc <__muldi3> + 8000b934: ffff07b7 lui a5,0xffff0 + 8000b938: 00f57533 and a0,a0,a5 + 8000b93c: 0005051b sext.w a0,a0 + 8000b940: fb4472e3 bgeu s0,s4,8000b8e4 <_ZL11RDoTrianglev+0x184> + 8000b944: 408486bb subw a3,s1,s0 + 8000b948: fff6869b addiw a3,a3,-1 + 8000b94c: 02041413 slli s0,s0,0x20 + 8000b950: 02069693 slli a3,a3,0x20 + 8000b954: 02045413 srli s0,s0,0x20 + 8000b958: 0206d693 srli a3,a3,0x20 + 8000b95c: 008686b3 add a3,a3,s0 + 8000b960: 00269693 slli a3,a3,0x2 + 8000b964: 00241413 slli s0,s0,0x2 + 8000b968: 00051797 auipc a5,0x51 + 8000b96c: 06078793 addi a5,a5,96 # 8005c9c8 + 8000b970: 00051717 auipc a4,0x51 + 8000b974: 05c70713 addi a4,a4,92 # 8005c9cc + 8000b978: 00f407b3 add a5,s0,a5 + 8000b97c: 00e686b3 add a3,a3,a4 + 8000b980: 0007a703 lw a4,0(a5) + 8000b984: 00478793 addi a5,a5,4 + 8000b988: 00a7073b addw a4,a4,a0 + 8000b98c: fee7ae23 sw a4,-4(a5) + 8000b990: fef698e3 bne a3,a5,8000b980 <_ZL11RDoTrianglev+0x220> + 8000b994: f51ff06f j 8000b8e4 <_ZL11RDoTrianglev+0x184> + +000000008000b998 <_ZL21RDoTriangleNoisePCMLQv>: + 8000b998: 001c0797 auipc a5,0x1c0 + 8000b99c: 2387a783 lw a5,568(a5) # 801cbbd0 + 8000b9a0: 001c0517 auipc a0,0x1c0 + 8000b9a4: 1a852503 lw a0,424(a0) # 801cbb48 + 8000b9a8: 00f5053b addw a0,a0,a5 + 8000b9ac: f7010113 addi sp,sp,-144 + 8000b9b0: 0105151b slliw a0,a0,0x10 + 8000b9b4: 07313423 sd s3,104(sp) + 8000b9b8: 02051513 slli a0,a0,0x20 + 8000b9bc: 00078997 auipc s3,0x78 + 8000b9c0: 4cc98993 addi s3,s3,1228 # 80083e88 <_ZL9ChannelBC> + 8000b9c4: 08813023 sd s0,128(sp) + 8000b9c8: 001c0597 auipc a1,0x1c0 + 8000b9cc: 2045e583 lwu a1,516(a1) # 801cbbcc + 8000b9d0: 02055513 srli a0,a0,0x20 + 8000b9d4: 0089a403 lw s0,8(s3) + 8000b9d8: 06913c23 sd s1,120(sp) + 8000b9dc: 08113423 sd ra,136(sp) + 8000b9e0: 07213823 sd s2,112(sp) + 8000b9e4: 07413023 sd s4,96(sp) + 8000b9e8: 05513c23 sd s5,88(sp) + 8000b9ec: 05613823 sd s6,80(sp) + 8000b9f0: 05713423 sd s7,72(sp) + 8000b9f4: 05813023 sd s8,64(sp) + 8000b9f8: 03913c23 sd s9,56(sp) + 8000b9fc: 03a13823 sd s10,48(sp) + 8000ba00: 03b13423 sd s11,40(sp) + 8000ba04: 4242e0ef jal ra,80039e28 <__udivdi3> + 8000ba08: 0005049b sext.w s1,a0 + 8000ba0c: 18945463 bge s0,s1,8000bb94 <_ZL21RDoTriangleNoisePCMLQv+0x1fc> + 8000ba10: 0004ca17 auipc s4,0x4c + 8000ba14: fa8a0a13 addi s4,s4,-88 # 800579b8 + 8000ba18: 00ba4583 lbu a1,11(s4) + 8000ba1c: 00aa4a83 lbu s5,10(s4) + 8000ba20: 00078b17 auipc s6,0x78 + 8000ba24: 480b0b13 addi s6,s6,1152 # 80083ea0 + 8000ba28: 0085959b slliw a1,a1,0x8 + 8000ba2c: 7005f593 andi a1,a1,1792 + 8000ba30: 008b2903 lw s2,8(s6) + 8000ba34: 0155e5b3 or a1,a1,s5 + 8000ba38: 0015879b addiw a5,a1,1 + 8000ba3c: 0099a423 sw s1,8(s3) + 8000ba40: 00078a93 mv s5,a5 + 8000ba44: 001c0997 auipc s3,0x1c0 + 8000ba48: 1809a983 lw s3,384(s3) # 801cbbc4 + 8000ba4c: 1c091863 bnez s2,8000bc1c <_ZL21RDoTriangleNoisePCMLQv+0x284> + 8000ba50: 0004c717 auipc a4,0x4c + 8000ba54: f2070713 addi a4,a4,-224 # 80057970 + 8000ba58: 01174783 lbu a5,17(a4) + 8000ba5c: 0017f793 andi a5,a5,1 + 8000ba60: 1a079a63 bnez a5,8000bc14 <_ZL21RDoTriangleNoisePCMLQv+0x27c> + 8000ba64: 01374583 lbu a1,19(a4) + 8000ba68: 001bd517 auipc a0,0x1bd + 8000ba6c: 28452503 lw a0,644(a0) # 801c8cec + 8000ba70: 10000793 li a5,256 + 8000ba74: 00f50663 beq a0,a5,8000ba80 <_ZL21RDoTriangleNoisePCMLQv+0xe8> + 8000ba78: 3442e0ef jal ra,80039dbc <__muldi3> + 8000ba7c: 0085559b srliw a1,a0,0x8 + 8000ba80: 00cb2783 lw a5,12(s6) + 8000ba84: 0015959b slliw a1,a1,0x1 + 8000ba88: 00012e23 sw zero,28(sp) + 8000ba8c: 00b12c23 sw a1,24(sp) + 8000ba90: 00079663 bnez a5,8000ba9c <_ZL21RDoTriangleNoisePCMLQv+0x104> + 8000ba94: 00012c23 sw zero,24(sp) + 8000ba98: 00000993 li s3,0 + 8000ba9c: 001c0c17 auipc s8,0x1c0 + 8000baa0: 0e6c0c13 addi s8,s8,230 # 801cbb82 <_ZL4nreg> + 8000baa4: 000c5783 lhu a5,0(s8) + 8000baa8: 00ea4683 lbu a3,14(s4) + 8000baac: 02010613 addi a2,sp,32 + 8000bab0: 00c7d713 srli a4,a5,0xc + 8000bab4: 00477713 andi a4,a4,4 + 8000bab8: 00e60733 add a4,a2,a4 + 8000babc: 0186961b slliw a2,a3,0x18 + 8000bac0: 4186561b sraiw a2,a2,0x18 + 8000bac4: ff872283 lw t0,-8(a4) + 8000bac8: 00800e13 li t3,8 + 8000bacc: 00064463 bltz a2,8000bad4 <_ZL21RDoTriangleNoisePCMLQv+0x13c> + 8000bad0: 00d00e13 li t3,13 + 8000bad4: 001c0b97 auipc s7,0x1c0 + 8000bad8: 0d8b8b93 addi s7,s7,216 # 801cbbac <_ZZL21RDoTriangleNoisePCMLQvE5tcout> + 8000badc: 000ba883 lw a7,0(s7) + 8000bae0: 001c0f17 auipc t5,0x1c0 + 8000bae4: 07df4f03 lbu t5,125(t5) # 801cbb5d + 8000bae8: 00078a17 auipc s4,0x78 + 8000baec: 070a0a13 addi s4,s4,112 # 80083b58 <_ZL8wlookup2> + 8000baf0: 01e8863b addw a2,a7,t5 + 8000baf4: 00c2873b addw a4,t0,a2 + 8000baf8: 02071713 slli a4,a4,0x20 + 8000bafc: 01e75713 srli a4,a4,0x1e + 8000bb00: 00ea0733 add a4,s4,a4 + 8000bb04: 00072803 lw a6,0(a4) + 8000bb08: 14091663 bnez s2,8000bc54 <_ZL21RDoTriangleNoisePCMLQv+0x2bc> + 8000bb0c: 0004c317 auipc t1,0x4c + 8000bb10: ebc30313 addi t1,t1,-324 # 800579c8 + 8000bb14: 0a098e63 beqz s3,8000bbd0 <_ZL21RDoTriangleNoisePCMLQv+0x238> + 8000bb18: 001c0d97 auipc s11,0x1c0 + 8000bb1c: 09cd8d93 addi s11,s11,156 # 801cbbb4 <_ZZL21RDoTriangleNoisePCMLQvE8noiseacc> + 8000bb20: 00f6f693 andi a3,a3,15 + 8000bb24: 000da703 lw a4,0(s11) + 8000bb28: 00269693 slli a3,a3,0x2 + 8000bb2c: 00032f17 auipc t5,0x32 + 8000bb30: 8a4f0f13 addi t5,t5,-1884 # 8003d3d0 + 8000bb34: 00032e97 auipc t4,0x32 + 8000bb38: 8dce8e93 addi t4,t4,-1828 # 8003d410 + 8000bb3c: 00008537 lui a0,0x8 + 8000bb40: 001c1897 auipc a7,0x1c1 + 8000bb44: b208c883 lbu a7,-1248(a7) # 801cc660 + 8000bb48: 00000f93 li t6,0 + 8000bb4c: 0004c317 auipc t1,0x4c + 8000bb50: e7c30313 addi t1,t1,-388 # 800579c8 + 8000bb54: 00df0f33 add t5,t5,a3 + 8000bb58: 00de8eb3 add t4,t4,a3 + 8000bb5c: fff50513 addi a0,a0,-1 # 7fff <_entry_offset+0x7fff> + 8000bb60: 40445693 srai a3,s0,0x4 + 8000bb64: 00269693 slli a3,a3,0x2 + 8000bb68: 00d306b3 add a3,t1,a3 + 8000bb6c: 0006a583 lw a1,0(a3) + 8000bb70: 4137073b subw a4,a4,s3 + 8000bb74: 010585bb addw a1,a1,a6 + 8000bb78: 00b6a023 sw a1,0(a3) + 8000bb7c: 2ee05c63 blez a4,8000be74 <_ZL21RDoTriangleNoisePCMLQv+0x4dc> + 8000bb80: 0014041b addiw s0,s0,1 + 8000bb84: fc849ee3 bne s1,s0,8000bb60 <_ZL21RDoTriangleNoisePCMLQv+0x1c8> + 8000bb88: 00eda023 sw a4,0(s11) + 8000bb8c: 000f8463 beqz t6,8000bb94 <_ZL21RDoTriangleNoisePCMLQv+0x1fc> + 8000bb90: 00fc1023 sh a5,0(s8) + 8000bb94: 08813083 ld ra,136(sp) + 8000bb98: 08013403 ld s0,128(sp) + 8000bb9c: 07813483 ld s1,120(sp) + 8000bba0: 07013903 ld s2,112(sp) + 8000bba4: 06813983 ld s3,104(sp) + 8000bba8: 06013a03 ld s4,96(sp) + 8000bbac: 05813a83 ld s5,88(sp) + 8000bbb0: 05013b03 ld s6,80(sp) + 8000bbb4: 04813b83 ld s7,72(sp) + 8000bbb8: 04013c03 ld s8,64(sp) + 8000bbbc: 03813c83 ld s9,56(sp) + 8000bbc0: 03013d03 ld s10,48(sp) + 8000bbc4: 02813d83 ld s11,40(sp) + 8000bbc8: 09010113 addi sp,sp,144 + 8000bbcc: 00008067 ret + 8000bbd0: 40445793 srai a5,s0,0x4 + 8000bbd4: 00279793 slli a5,a5,0x2 + 8000bbd8: 00f307b3 add a5,t1,a5 + 8000bbdc: 0007a703 lw a4,0(a5) + 8000bbe0: 0014041b addiw s0,s0,1 + 8000bbe4: 0107073b addw a4,a4,a6 + 8000bbe8: 00e7a023 sw a4,0(a5) + 8000bbec: fa8484e3 beq s1,s0,8000bb94 <_ZL21RDoTriangleNoisePCMLQv+0x1fc> + 8000bbf0: 40445793 srai a5,s0,0x4 + 8000bbf4: 00279793 slli a5,a5,0x2 + 8000bbf8: 00f307b3 add a5,t1,a5 + 8000bbfc: 0007a703 lw a4,0(a5) + 8000bc00: 0014041b addiw s0,s0,1 + 8000bc04: 0107073b addw a4,a4,a6 + 8000bc08: 00e7a023 sw a4,0(a5) + 8000bc0c: fc8492e3 bne s1,s0,8000bbd0 <_ZL21RDoTriangleNoisePCMLQv+0x238> + 8000bc10: f85ff06f j 8000bb94 <_ZL21RDoTriangleNoisePCMLQv+0x1fc> + 8000bc14: 01074583 lbu a1,16(a4) + 8000bc18: e51ff06f j 8000ba68 <_ZL21RDoTriangleNoisePCMLQv+0xd0> + 8000bc1c: 001c0717 auipc a4,0x1c0 + 8000bc20: f4274703 lbu a4,-190(a4) # 801cbb5e + 8000bc24: 00000913 li s2,0 + 8000bc28: e20704e3 beqz a4,8000ba50 <_ZL21RDoTriangleNoisePCMLQv+0xb8> + 8000bc2c: 00400913 li s2,4 + 8000bc30: 0004c717 auipc a4,0x4c + 8000bc34: d4070713 addi a4,a4,-704 # 80057970 + 8000bc38: 00f92933 slt s2,s2,a5 + 8000bc3c: 01174783 lbu a5,17(a4) + 8000bc40: 41200933 neg s2,s2 + 8000bc44: 0129f933 and s2,s3,s2 + 8000bc48: 0017f793 andi a5,a5,1 + 8000bc4c: e0078ce3 beqz a5,8000ba64 <_ZL21RDoTriangleNoisePCMLQv+0xcc> + 8000bc50: fc5ff06f j 8000bc14 <_ZL21RDoTriangleNoisePCMLQv+0x27c> + 8000bc54: 001c0c97 auipc s9,0x1c0 + 8000bc58: f5cc8c93 addi s9,s9,-164 # 801cbbb0 <_ZZL21RDoTriangleNoisePCMLQvE6triacc> + 8000bc5c: 001c0d17 auipc s10,0x1c0 + 8000bc60: f48d0d13 addi s10,s10,-184 # 801cbba4 <_ZL7tristep> + 8000bc64: 000ca703 lw a4,0(s9) + 8000bc68: 000d2603 lw a2,0(s10) + 8000bc6c: 011a959b slliw a1,s5,0x11 + 8000bc70: 08099a63 bnez s3,8000bd04 <_ZL21RDoTriangleNoisePCMLQv+0x36c> + 8000bc74: 00000513 li a0,0 + 8000bc78: 0004c317 auipc t1,0x4c + 8000bc7c: d5030313 addi t1,t1,-688 # 800579c8 + 8000bc80: 005f0f3b addw t5,t5,t0 + 8000bc84: 00c0006f j 8000bc90 <_ZL21RDoTriangleNoisePCMLQv+0x2f8> + 8000bc88: 0014041b addiw s0,s0,1 + 8000bc8c: 06848663 beq s1,s0,8000bcf8 <_ZL21RDoTriangleNoisePCMLQv+0x360> + 8000bc90: 40445793 srai a5,s0,0x4 + 8000bc94: 00279793 slli a5,a5,0x2 + 8000bc98: 00f307b3 add a5,t1,a5 + 8000bc9c: 0007a683 lw a3,0(a5) + 8000bca0: 4127073b subw a4,a4,s2 + 8000bca4: 010686bb addw a3,a3,a6 + 8000bca8: 00d7a023 sw a3,0(a5) + 8000bcac: fce04ee3 bgtz a4,8000bc88 <_ZL21RDoTriangleNoisePCMLQv+0x2f0> + 8000bcb0: 0016079b addiw a5,a2,1 + 8000bcb4: 00e5873b addw a4,a1,a4 + 8000bcb8: 01f7f613 andi a2,a5,31 + 8000bcbc: fee05ae3 blez a4,8000bcb0 <_ZL21RDoTriangleNoisePCMLQv+0x318> + 8000bcc0: 0107f793 andi a5,a5,16 + 8000bcc4: 00f67693 andi a3,a2,15 + 8000bcc8: 00079463 bnez a5,8000bcd0 <_ZL21RDoTriangleNoisePCMLQv+0x338> + 8000bccc: 00f6c693 xori a3,a3,15 + 8000bcd0: 0016989b slliw a7,a3,0x1 + 8000bcd4: 00d888bb addw a7,a7,a3 + 8000bcd8: 011f07bb addw a5,t5,a7 + 8000bcdc: 02079793 slli a5,a5,0x20 + 8000bce0: 01e7d793 srli a5,a5,0x1e + 8000bce4: 00fa07b3 add a5,s4,a5 + 8000bce8: 0014041b addiw s0,s0,1 + 8000bcec: 0007a803 lw a6,0(a5) + 8000bcf0: 00100513 li a0,1 + 8000bcf4: f8849ee3 bne s1,s0,8000bc90 <_ZL21RDoTriangleNoisePCMLQv+0x2f8> + 8000bcf8: 00eca023 sw a4,0(s9) + 8000bcfc: 0a051063 bnez a0,8000bd9c <_ZL21RDoTriangleNoisePCMLQv+0x404> + 8000bd00: e95ff06f j 8000bb94 <_ZL21RDoTriangleNoisePCMLQv+0x1fc> + 8000bd04: 001c0d97 auipc s11,0x1c0 + 8000bd08: eb0d8d93 addi s11,s11,-336 # 801cbbb4 <_ZZL21RDoTriangleNoisePCMLQvE8noiseacc> + 8000bd0c: 00f6fa93 andi s5,a3,15 + 8000bd10: 000da683 lw a3,0(s11) + 8000bd14: 002a9513 slli a0,s5,0x2 + 8000bd18: 00031b17 auipc s6,0x31 + 8000bd1c: 6b8b0b13 addi s6,s6,1720 # 8003d3d0 + 8000bd20: 00031a97 auipc s5,0x31 + 8000bd24: 6f0a8a93 addi s5,s5,1776 # 8003d410 + 8000bd28: 00008fb7 lui t6,0x8 + 8000bd2c: 001c1397 auipc t2,0x1c1 + 8000bd30: 9343c383 lbu t2,-1740(t2) # 801cc660 + 8000bd34: 00013423 sd zero,8(sp) + 8000bd38: 00013023 sd zero,0(sp) + 8000bd3c: 0004c317 auipc t1,0x4c + 8000bd40: c8c30313 addi t1,t1,-884 # 800579c8 + 8000bd44: 00ab0b33 add s6,s6,a0 + 8000bd48: 00aa8ab3 add s5,s5,a0 + 8000bd4c: ffff8f93 addi t6,t6,-1 # 7fff <_entry_offset+0x7fff> + 8000bd50: 40445513 srai a0,s0,0x4 + 8000bd54: 00251513 slli a0,a0,0x2 + 8000bd58: 00a30533 add a0,t1,a0 + 8000bd5c: 00052e83 lw t4,0(a0) + 8000bd60: 4127073b subw a4,a4,s2 + 8000bd64: 413686bb subw a3,a3,s3 + 8000bd68: 010e8ebb addw t4,t4,a6 + 8000bd6c: 01d52023 sw t4,0(a0) + 8000bd70: 02e05c63 blez a4,8000bda8 <_ZL21RDoTriangleNoisePCMLQv+0x410> + 8000bd74: 0ad05a63 blez a3,8000be28 <_ZL21RDoTriangleNoisePCMLQv+0x490> + 8000bd78: 0014041b addiw s0,s0,1 + 8000bd7c: fc849ae3 bne s1,s0,8000bd50 <_ZL21RDoTriangleNoisePCMLQv+0x3b8> + 8000bd80: 00eca023 sw a4,0(s9) + 8000bd84: 00013703 ld a4,0(sp) + 8000bd88: 00dda023 sw a3,0(s11) + 8000bd8c: 00070463 beqz a4,8000bd94 <_ZL21RDoTriangleNoisePCMLQv+0x3fc> + 8000bd90: 00fc1023 sh a5,0(s8) + 8000bd94: 00813783 ld a5,8(sp) + 8000bd98: de078ee3 beqz a5,8000bb94 <_ZL21RDoTriangleNoisePCMLQv+0x1fc> + 8000bd9c: 00cd2023 sw a2,0(s10) + 8000bda0: 011ba023 sw a7,0(s7) + 8000bda4: df1ff06f j 8000bb94 <_ZL21RDoTriangleNoisePCMLQv+0x1fc> + 8000bda8: 0016051b addiw a0,a2,1 + 8000bdac: 00e5873b addw a4,a1,a4 + 8000bdb0: 01f57613 andi a2,a0,31 + 8000bdb4: fee05ae3 blez a4,8000bda8 <_ZL21RDoTriangleNoisePCMLQv+0x410> + 8000bdb8: 01057513 andi a0,a0,16 + 8000bdbc: 00f67813 andi a6,a2,15 + 8000bdc0: 00051463 bnez a0,8000bdc8 <_ZL21RDoTriangleNoisePCMLQv+0x430> + 8000bdc4: 00f84813 xori a6,a6,15 + 8000bdc8: 0018189b slliw a7,a6,0x1 + 8000bdcc: 010888bb addw a7,a7,a6 + 8000bdd0: 005f053b addw a0,t5,t0 + 8000bdd4: 0115053b addw a0,a0,a7 + 8000bdd8: 02051513 slli a0,a0,0x20 + 8000bddc: 01e55513 srli a0,a0,0x1e + 8000bde0: 00aa0533 add a0,s4,a0 + 8000bde4: 00052803 lw a6,0(a0) + 8000bde8: 00100513 li a0,1 + 8000bdec: 00a13423 sd a0,8(sp) + 8000bdf0: f85ff06f j 8000bd74 <_ZL21RDoTriangleNoisePCMLQv+0x3dc> + 8000bdf4: 000aa503 lw a0,0(s5) + 8000bdf8: 0115151b slliw a0,a0,0x11 + 8000bdfc: 00d506bb addw a3,a0,a3 + 8000be00: 41c7d53b sraw a0,a5,t3 + 8000be04: 00e7d813 srli a6,a5,0xe + 8000be08: 01054533 xor a0,a0,a6 + 8000be0c: 0017979b slliw a5,a5,0x1 + 8000be10: 00157513 andi a0,a0,1 + 8000be14: 00a787bb addw a5,a5,a0 + 8000be18: 01f7f7b3 and a5,a5,t6 + 8000be1c: 03079793 slli a5,a5,0x30 + 8000be20: 0307d793 srli a5,a5,0x30 + 8000be24: 06d04463 bgtz a3,8000be8c <_ZL21RDoTriangleNoisePCMLQv+0x4f4> + 8000be28: 0006869b sext.w a3,a3 + 8000be2c: fc0394e3 bnez t2,8000bdf4 <_ZL21RDoTriangleNoisePCMLQv+0x45c> + 8000be30: 000b2503 lw a0,0(s6) + 8000be34: 0115151b slliw a0,a0,0x11 + 8000be38: 00d506bb addw a3,a0,a3 + 8000be3c: fc5ff06f j 8000be00 <_ZL21RDoTriangleNoisePCMLQv+0x468> + 8000be40: 000ea683 lw a3,0(t4) + 8000be44: 0116969b slliw a3,a3,0x11 + 8000be48: 00e6873b addw a4,a3,a4 + 8000be4c: 41c7d6bb sraw a3,a5,t3 + 8000be50: 00e7d593 srli a1,a5,0xe + 8000be54: 00b6c6b3 xor a3,a3,a1 + 8000be58: 0017979b slliw a5,a5,0x1 + 8000be5c: 0016f693 andi a3,a3,1 + 8000be60: 00d787bb addw a5,a5,a3 + 8000be64: 00a7f7b3 and a5,a5,a0 + 8000be68: 03079793 slli a5,a5,0x30 + 8000be6c: 0307d793 srli a5,a5,0x30 + 8000be70: 04e04a63 bgtz a4,8000bec4 <_ZL21RDoTriangleNoisePCMLQv+0x52c> + 8000be74: 0007071b sext.w a4,a4 + 8000be78: fc0894e3 bnez a7,8000be40 <_ZL21RDoTriangleNoisePCMLQv+0x4a8> + 8000be7c: 000f2683 lw a3,0(t5) + 8000be80: 0116969b slliw a3,a3,0x11 + 8000be84: 00e6873b addw a4,a3,a4 + 8000be88: fc5ff06f j 8000be4c <_ZL21RDoTriangleNoisePCMLQv+0x4b4> + 8000be8c: 00e7d513 srli a0,a5,0xe + 8000be90: 02010813 addi a6,sp,32 + 8000be94: 00251513 slli a0,a0,0x2 + 8000be98: 00a80533 add a0,a6,a0 + 8000be9c: ff852283 lw t0,-8(a0) + 8000bea0: 011f053b addw a0,t5,a7 + 8000bea4: 00100813 li a6,1 + 8000bea8: 0055053b addw a0,a0,t0 + 8000beac: 02051513 slli a0,a0,0x20 + 8000beb0: 01e55513 srli a0,a0,0x1e + 8000beb4: 00aa0533 add a0,s4,a0 + 8000beb8: 01013023 sd a6,0(sp) + 8000bebc: 00052803 lw a6,0(a0) + 8000bec0: eb9ff06f j 8000bd78 <_ZL21RDoTriangleNoisePCMLQv+0x3e0> + 8000bec4: 00e7d693 srli a3,a5,0xe + 8000bec8: 00269693 slli a3,a3,0x2 + 8000becc: 02010593 addi a1,sp,32 + 8000bed0: 00d586b3 add a3,a1,a3 + 8000bed4: ff86a683 lw a3,-8(a3) + 8000bed8: 0014041b addiw s0,s0,1 + 8000bedc: 00100f93 li t6,1 + 8000bee0: 00c686bb addw a3,a3,a2 + 8000bee4: 02069693 slli a3,a3,0x20 + 8000bee8: 01e6d693 srli a3,a3,0x1e + 8000beec: 00da06b3 add a3,s4,a3 + 8000bef0: 0006a803 lw a6,0(a3) + 8000bef4: c68496e3 bne s1,s0,8000bb60 <_ZL21RDoTriangleNoisePCMLQv+0x1c8> + 8000bef8: c91ff06f j 8000bb88 <_ZL21RDoTriangleNoisePCMLQv+0x1f0> + +000000008000befc <_ZL8RDoNoisev>: + 8000befc: fe010113 addi sp,sp,-32 + 8000bf00: 00113c23 sd ra,24(sp) + 8000bf04: 00813823 sd s0,16(sp) + 8000bf08: 0004c717 auipc a4,0x4c + 8000bf0c: a6870713 addi a4,a4,-1432 # 80057970 + 8000bf10: 01174783 lbu a5,17(a4) + 8000bf14: 0017f793 andi a5,a5,1 + 8000bf18: 1a078c63 beqz a5,8000c0d0 <_ZL8RDoNoisev+0x1d4> + 8000bf1c: 01074583 lbu a1,16(a4) + 8000bf20: 001bd517 auipc a0,0x1bd + 8000bf24: dd852503 lw a0,-552(a0) # 801c8cf8 + 8000bf28: 10000793 li a5,256 + 8000bf2c: 00f50663 beq a0,a5,8000bf38 <_ZL8RDoNoisev+0x3c> + 8000bf30: 68d2d0ef jal ra,80039dbc <__muldi3> + 8000bf34: 0085559b srliw a1,a0,0x8 + 8000bf38: 0115959b slliw a1,a1,0x11 + 8000bf3c: 001c0897 auipc a7,0x1c0 + 8000bf40: c4688893 addi a7,a7,-954 # 801cbb82 <_ZL4nreg> + 8000bf44: 00012623 sw zero,12(sp) + 8000bf48: 00b12423 sw a1,8(sp) + 8000bf4c: 00078617 auipc a2,0x78 + 8000bf50: f6062603 lw a2,-160(a2) # 80083eac + 8000bf54: 0008d303 lhu t1,0(a7) + 8000bf58: 16060863 beqz a2,8000c0c8 <_ZL8RDoNoisev+0x1cc> + 8000bf5c: 00c35793 srli a5,t1,0xc + 8000bf60: 0047f793 andi a5,a5,4 + 8000bf64: 01010713 addi a4,sp,16 + 8000bf68: 00f707b3 add a5,a4,a5 + 8000bf6c: ff87a603 lw a2,-8(a5) + 8000bf70: 0004c717 auipc a4,0x4c + 8000bf74: a5674703 lbu a4,-1450(a4) # 800579c6 + 8000bf78: 001c0597 auipc a1,0x1c0 + 8000bf7c: bd05a583 lw a1,-1072(a1) # 801cbb48 + 8000bf80: 001c0797 auipc a5,0x1c0 + 8000bf84: c507a783 lw a5,-944(a5) # 801cbbd0 + 8000bf88: 0187181b slliw a6,a4,0x18 + 8000bf8c: 00f586bb addw a3,a1,a5 + 8000bf90: 00078517 auipc a0,0x78 + 8000bf94: ef850513 addi a0,a0,-264 # 80083e88 <_ZL9ChannelBC> + 8000bf98: 4188581b sraiw a6,a6,0x18 + 8000bf9c: 00c52783 lw a5,12(a0) + 8000bfa0: 00068593 mv a1,a3 + 8000bfa4: 12084a63 bltz a6,8000c0d8 <_ZL8RDoNoisev+0x1dc> + 8000bfa8: 0ed7fe63 bgeu a5,a3,8000c0a4 <_ZL8RDoNoisev+0x1a8> + 8000bfac: 40f68ebb subw t4,a3,a5 + 8000bfb0: fffe8e9b addiw t4,t4,-1 + 8000bfb4: 02079793 slli a5,a5,0x20 + 8000bfb8: 020e9e93 slli t4,t4,0x20 + 8000bfbc: 0207d793 srli a5,a5,0x20 + 8000bfc0: 020ede93 srli t4,t4,0x20 + 8000bfc4: 00fe8eb3 add t4,t4,a5 + 8000bfc8: 00051697 auipc a3,0x51 + 8000bfcc: a0068693 addi a3,a3,-1536 # 8005c9c8 + 8000bfd0: 00f77713 andi a4,a4,15 + 8000bfd4: 00279793 slli a5,a5,0x2 + 8000bfd8: 00271713 slli a4,a4,0x2 + 8000bfdc: 00078817 auipc a6,0x78 + 8000bfe0: aec80813 addi a6,a6,-1300 # 80083ac8 <_ZL7wlcount> + 8000bfe4: 002e9e93 slli t4,t4,0x2 + 8000bfe8: 00d787b3 add a5,a5,a3 + 8000bfec: 00008f37 lui t5,0x8 + 8000bff0: 00051697 auipc a3,0x51 + 8000bff4: 9dc68693 addi a3,a3,-1572 # 8005c9cc + 8000bff8: 00031297 auipc t0,0x31 + 8000bffc: 3d828293 addi t0,t0,984 # 8003d3d0 + 8000c000: 00031397 auipc t2,0x31 + 8000c004: 41038393 addi t2,t2,1040 # 8003d410 + 8000c008: 00de8eb3 add t4,t4,a3 + 8000c00c: 00c82e03 lw t3,12(a6) + 8000c010: 001c0f97 auipc t6,0x1c0 + 8000c014: 650fcf83 lbu t6,1616(t6) # 801cc660 + 8000c018: 00000693 li a3,0 + 8000c01c: ffff0f13 addi t5,t5,-1 # 7fff <_entry_offset+0x7fff> + 8000c020: 00e282b3 add t0,t0,a4 + 8000c024: 00e383b3 add t2,t2,a4 + 8000c028: 0500006f j 8000c078 <_ZL8RDoNoisev+0x17c> + 8000c02c: 0003ae03 lw t3,0(t2) + 8000c030: 0003061b sext.w a2,t1 + 8000c034: 40d6569b sraiw a3,a2,0xd + 8000c038: 40e6561b sraiw a2,a2,0xe + 8000c03c: 00c6c6b3 xor a3,a3,a2 + 8000c040: 0013171b slliw a4,t1,0x1 + 8000c044: 0016f693 andi a3,a3,1 + 8000c048: 00d7073b addw a4,a4,a3 + 8000c04c: 01e77733 and a4,a4,t5 + 8000c050: 03071313 slli t1,a4,0x30 + 8000c054: 03035313 srli t1,t1,0x30 + 8000c058: 00e35713 srli a4,t1,0xe + 8000c05c: 01010693 addi a3,sp,16 + 8000c060: 00271713 slli a4,a4,0x2 + 8000c064: 00e68733 add a4,a3,a4 + 8000c068: ff872603 lw a2,-8(a4) + 8000c06c: 00100693 li a3,1 + 8000c070: 00478793 addi a5,a5,4 + 8000c074: 04fe8263 beq t4,a5,8000c0b8 <_ZL8RDoNoisev+0x1bc> + 8000c078: 0007a703 lw a4,0(a5) + 8000c07c: fffe0e1b addiw t3,t3,-1 + 8000c080: 00c7073b addw a4,a4,a2 + 8000c084: 00e7a023 sw a4,0(a5) + 8000c088: fe0e14e3 bnez t3,8000c070 <_ZL8RDoNoisev+0x174> + 8000c08c: fa0f90e3 bnez t6,8000c02c <_ZL8RDoNoisev+0x130> + 8000c090: 0002ae03 lw t3,0(t0) + 8000c094: f9dff06f j 8000c030 <_ZL8RDoNoisev+0x134> + 8000c098: 01c82623 sw t3,12(a6) + 8000c09c: 00028463 beqz t0,8000c0a4 <_ZL8RDoNoisev+0x1a8> + 8000c0a0: 00689023 sh t1,0(a7) + 8000c0a4: 01813083 ld ra,24(sp) + 8000c0a8: 01013403 ld s0,16(sp) + 8000c0ac: 00b52623 sw a1,12(a0) + 8000c0b0: 02010113 addi sp,sp,32 + 8000c0b4: 00008067 ret + 8000c0b8: 01c82623 sw t3,12(a6) + 8000c0bc: fe0684e3 beqz a3,8000c0a4 <_ZL8RDoNoisev+0x1a8> + 8000c0c0: 00689023 sh t1,0(a7) + 8000c0c4: fe1ff06f j 8000c0a4 <_ZL8RDoNoisev+0x1a8> + 8000c0c8: 00012423 sw zero,8(sp) + 8000c0cc: ea5ff06f j 8000bf70 <_ZL8RDoNoisev+0x74> + 8000c0d0: 01374583 lbu a1,19(a4) + 8000c0d4: e4dff06f j 8000bf20 <_ZL8RDoNoisev+0x24> + 8000c0d8: fcd7f6e3 bgeu a5,a3,8000c0a4 <_ZL8RDoNoisev+0x1a8> + 8000c0dc: 40f68ebb subw t4,a3,a5 + 8000c0e0: fffe8e9b addiw t4,t4,-1 + 8000c0e4: 02079793 slli a5,a5,0x20 + 8000c0e8: 020e9e93 slli t4,t4,0x20 + 8000c0ec: 0207d793 srli a5,a5,0x20 + 8000c0f0: 020ede93 srli t4,t4,0x20 + 8000c0f4: 00fe8eb3 add t4,t4,a5 + 8000c0f8: 00051697 auipc a3,0x51 + 8000c0fc: 8d068693 addi a3,a3,-1840 # 8005c9c8 + 8000c100: 00f77713 andi a4,a4,15 + 8000c104: 00279793 slli a5,a5,0x2 + 8000c108: 00271713 slli a4,a4,0x2 + 8000c10c: 00078817 auipc a6,0x78 + 8000c110: 9bc80813 addi a6,a6,-1604 # 80083ac8 <_ZL7wlcount> + 8000c114: 002e9e93 slli t4,t4,0x2 + 8000c118: 00d787b3 add a5,a5,a3 + 8000c11c: 00008f37 lui t5,0x8 + 8000c120: 00051697 auipc a3,0x51 + 8000c124: 8ac68693 addi a3,a3,-1876 # 8005c9cc + 8000c128: 00031397 auipc t2,0x31 + 8000c12c: 2a838393 addi t2,t2,680 # 8003d3d0 + 8000c130: 00031417 auipc s0,0x31 + 8000c134: 2e040413 addi s0,s0,736 # 8003d410 + 8000c138: 00c82e03 lw t3,12(a6) + 8000c13c: 001c0f97 auipc t6,0x1c0 + 8000c140: 524fcf83 lbu t6,1316(t6) # 801cc660 + 8000c144: 00de8eb3 add t4,t4,a3 + 8000c148: 00000293 li t0,0 + 8000c14c: ffff0f13 addi t5,t5,-1 # 7fff <_entry_offset+0x7fff> + 8000c150: 00e383b3 add t2,t2,a4 + 8000c154: 00e40433 add s0,s0,a4 + 8000c158: 0500006f j 8000c1a8 <_ZL8RDoNoisev+0x2ac> + 8000c15c: 00042e03 lw t3,0(s0) + 8000c160: 0003061b sext.w a2,t1 + 8000c164: 4086569b sraiw a3,a2,0x8 + 8000c168: 40e6561b sraiw a2,a2,0xe + 8000c16c: 00c6c6b3 xor a3,a3,a2 + 8000c170: 0013171b slliw a4,t1,0x1 + 8000c174: 0016f693 andi a3,a3,1 + 8000c178: 00d7073b addw a4,a4,a3 + 8000c17c: 01e77733 and a4,a4,t5 + 8000c180: 03071313 slli t1,a4,0x30 + 8000c184: 03035313 srli t1,t1,0x30 + 8000c188: 00e35693 srli a3,t1,0xe + 8000c18c: 00269693 slli a3,a3,0x2 + 8000c190: 01010713 addi a4,sp,16 + 8000c194: 00d706b3 add a3,a4,a3 + 8000c198: ff86a603 lw a2,-8(a3) + 8000c19c: 00100293 li t0,1 + 8000c1a0: 00478793 addi a5,a5,4 + 8000c1a4: eefe8ae3 beq t4,a5,8000c098 <_ZL8RDoNoisev+0x19c> + 8000c1a8: 0007a683 lw a3,0(a5) + 8000c1ac: fffe0e1b addiw t3,t3,-1 + 8000c1b0: 00c686bb addw a3,a3,a2 + 8000c1b4: 00d7a023 sw a3,0(a5) + 8000c1b8: fe0e14e3 bnez t3,8000c1a0 <_ZL8RDoNoisev+0x2a4> + 8000c1bc: fa0f90e3 bnez t6,8000c15c <_ZL8RDoNoisev+0x260> + 8000c1c0: 0003ae03 lw t3,0(t2) + 8000c1c4: f9dff06f j 8000c160 <_ZL8RDoNoisev+0x264> + +000000008000c1c8 <_ZL10StatusReadj>: + 8000c1c8: 001c0317 auipc t1,0x1c0 + 8000c1cc: 9e130313 addi t1,t1,-1567 # 801cbba9 <_ZL8SIRQStat> + 8000c1d0: 00034503 lbu a0,0(t1) + 8000c1d4: ff010113 addi sp,sp,-16 + 8000c1d8: 00813023 sd s0,0(sp) + 8000c1dc: 00113423 sd ra,8(sp) + 8000c1e0: 00078717 auipc a4,0x78 + 8000c1e4: cc070713 addi a4,a4,-832 # 80083ea0 + 8000c1e8: 00000793 li a5,0 + 8000c1ec: 00050413 mv s0,a0 + 8000c1f0: 00100893 li a7,1 + 8000c1f4: 00400813 li a6,4 + 8000c1f8: 00072603 lw a2,0(a4) + 8000c1fc: 00f895bb sllw a1,a7,a5 + 8000c200: 00000693 li a3,0 + 8000c204: 0017879b addiw a5,a5,1 + 8000c208: 00060663 beqz a2,8000c214 <_ZL10StatusReadj+0x4c> + 8000c20c: 0185969b slliw a3,a1,0x18 + 8000c210: 4186d69b sraiw a3,a3,0x18 + 8000c214: 0086e433 or s0,a3,s0 + 8000c218: 0ff47413 andi s0,s0,255 + 8000c21c: 00470713 addi a4,a4,4 + 8000c220: fd079ce3 bne a5,a6,8000c1f8 <_ZL10StatusReadj+0x30> + 8000c224: 001c0797 auipc a5,0x1c0 + 8000c228: 9747a783 lw a5,-1676(a5) # 801cbb98 <_ZL7DMCSize> + 8000c22c: 00078463 beqz a5,8000c234 <_ZL10StatusReadj+0x6c> + 8000c230: 01046413 ori s0,s0,16 + 8000c234: fbf57793 andi a5,a0,-65 + 8000c238: 20000513 li a0,512 + 8000c23c: 00f30023 sb a5,0(t1) + 8000c240: b11f40ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8000c244: 00813083 ld ra,8(sp) + 8000c248: 00040513 mv a0,s0 + 8000c24c: 00013403 ld s0,0(sp) + 8000c250: 01010113 addi sp,sp,16 + 8000c254: 00008067 ret + +000000008000c258 <_ZL11StatusWritejh>: + 8000c258: ff010113 addi sp,sp,-16 + 8000c25c: 00113423 sd ra,8(sp) + 8000c260: 00813023 sd s0,0(sp) + 8000c264: 0003c797 auipc a5,0x3c + 8000c268: 6247b783 ld a5,1572(a5) # 80048888 <_ZL5DoSQ1> + 8000c26c: 00058413 mv s0,a1 + 8000c270: 000780e7 jalr a5 + 8000c274: 0003c797 auipc a5,0x3c + 8000c278: 61c7b783 ld a5,1564(a5) # 80048890 <_ZL5DoSQ2> + 8000c27c: 000780e7 jalr a5 + 8000c280: 0003c797 auipc a5,0x3c + 8000c284: 5f87b783 ld a5,1528(a5) # 80048878 <_ZL10DoTriangle> + 8000c288: 000780e7 jalr a5 + 8000c28c: 0003c797 auipc a5,0x3c + 8000c290: 60c7b783 ld a5,1548(a5) # 80048898 <_ZL7DoNoise> + 8000c294: 000780e7 jalr a5 + 8000c298: 0003c797 auipc a5,0x3c + 8000c29c: 5e87b783 ld a5,1512(a5) # 80048880 <_ZL5DoPCM> + 8000c2a0: 000780e7 jalr a5 + 8000c2a4: 0004059b sext.w a1,s0 + 8000c2a8: 00078697 auipc a3,0x78 + 8000c2ac: bf868693 addi a3,a3,-1032 # 80083ea0 + 8000c2b0: 00000793 li a5,0 + 8000c2b4: 00400613 li a2,4 + 8000c2b8: 40f5d73b sraw a4,a1,a5 + 8000c2bc: 00177713 andi a4,a4,1 + 8000c2c0: 0017879b addiw a5,a5,1 + 8000c2c4: 00071463 bnez a4,8000c2cc <_ZL11StatusWritejh+0x74> + 8000c2c8: 0006a023 sw zero,0(a3) + 8000c2cc: 00468693 addi a3,a3,4 + 8000c2d0: fec794e3 bne a5,a2,8000c2b8 <_ZL11StatusWritejh+0x60> + 8000c2d4: 01047793 andi a5,s0,16 + 8000c2d8: 06078e63 beqz a5,8000c354 <_ZL11StatusWritejh+0xfc> + 8000c2dc: 001c0697 auipc a3,0x1c0 + 8000c2e0: 8bc68693 addi a3,a3,-1860 # 801cbb98 <_ZL7DMCSize> + 8000c2e4: 0006a783 lw a5,0(a3) + 8000c2e8: 02079a63 bnez a5,8000c31c <_ZL11StatusWritejh+0xc4> + 8000c2ec: 001c0717 auipc a4,0x1c0 + 8000c2f0: 86474703 lbu a4,-1948(a4) # 801cbb50 + 8000c2f4: 001c0797 auipc a5,0x1c0 + 8000c2f8: 8647c783 lbu a5,-1948(a5) # 801cbb58 + 8000c2fc: 00004637 lui a2,0x4 + 8000c300: 0067171b slliw a4,a4,0x6 + 8000c304: 0047979b slliw a5,a5,0x4 + 8000c308: 00c7073b addw a4,a4,a2 + 8000c30c: 0017879b addiw a5,a5,1 + 8000c310: 001c0617 auipc a2,0x1c0 + 8000c314: 84e62823 sw a4,-1968(a2) # 801cbb60 <_ZL10DMCAddress> + 8000c318: 00f6a023 sw a5,0(a3) + 8000c31c: 001c0717 auipc a4,0x1c0 + 8000c320: 88d70713 addi a4,a4,-1907 # 801cbba9 <_ZL8SIRQStat> + 8000c324: 00074783 lbu a5,0(a4) + 8000c328: 10000513 li a0,256 + 8000c32c: 01f47413 andi s0,s0,31 + 8000c330: 07f7f793 andi a5,a5,127 + 8000c334: 00f70023 sb a5,0(a4) + 8000c338: a19f40ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8000c33c: 00813083 ld ra,8(sp) + 8000c340: 001c0797 auipc a5,0x1c0 + 8000c344: 80878d23 sb s0,-2022(a5) # 801cbb5a + 8000c348: 00013403 ld s0,0(sp) + 8000c34c: 01010113 addi sp,sp,16 + 8000c350: 00008067 ret + 8000c354: 001c0797 auipc a5,0x1c0 + 8000c358: 8407a223 sw zero,-1980(a5) # 801cbb98 <_ZL7DMCSize> + 8000c35c: fc1ff06f j 8000c31c <_ZL11StatusWritejh+0xc4> + +000000008000c360 <_ZL9Write_PSGjh>: + 8000c360: fe010113 addi sp,sp,-32 + 8000c364: 00813823 sd s0,16(sp) + 8000c368: 00913423 sd s1,8(sp) + 8000c36c: 00113c23 sd ra,24(sp) + 8000c370: 01213023 sd s2,0(sp) + 8000c374: 01f57413 andi s0,a0,31 + 8000c378: 01000793 li a5,16 + 8000c37c: 00058493 mv s1,a1 + 8000c380: 0887e463 bltu a5,s0,8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c384: 00031697 auipc a3,0x31 + 8000c388: f8c68693 addi a3,a3,-116 # 8003d310 <_ZL8CycTable+0x100> + 8000c38c: 00241713 slli a4,s0,0x2 + 8000c390: 00d70733 add a4,a4,a3 + 8000c394: 00072783 lw a5,0(a4) + 8000c398: 00d787b3 add a5,a5,a3 + 8000c39c: 00078067 jr a5 + 8000c3a0: 0003c797 auipc a5,0x3c + 8000c3a4: 4e07b783 ld a5,1248(a5) # 80048880 <_ZL5DoPCM> + 8000c3a8: 000780e7 jalr a5 + 8000c3ac: 00f4f793 andi a5,s1,15 + 8000c3b0: 001c0717 auipc a4,0x1c0 + 8000c3b4: 2b074703 lbu a4,688(a4) # 801cc660 + 8000c3b8: 00279793 slli a5,a5,0x2 + 8000c3bc: 36071e63 bnez a4,8000c738 <_ZL9Write_PSGjh+0x3d8> + 8000c3c0: 00031717 auipc a4,0x31 + 8000c3c4: 10070713 addi a4,a4,256 # 8003d4c0 <_ZL12NTSCDMCTable> + 8000c3c8: 00f707b3 add a5,a4,a5 + 8000c3cc: 0007a783 lw a5,0(a5) + 8000c3d0: 001bf717 auipc a4,0x1bf + 8000c3d4: 78f72223 sw a5,1924(a4) # 801cbb54 + 8000c3d8: 001bf917 auipc s2,0x1bf + 8000c3dc: 7d190913 addi s2,s2,2001 # 801cbba9 <_ZL8SIRQStat> + 8000c3e0: 00090783 lb a5,0(s2) + 8000c3e4: 0207d263 bgez a5,8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c3e8: 0184979b slliw a5,s1,0x18 + 8000c3ec: 4187d79b sraiw a5,a5,0x18 + 8000c3f0: 10000513 li a0,256 + 8000c3f4: 3607c063 bltz a5,8000c754 <_ZL9Write_PSGjh+0x3f4> + 8000c3f8: 959f40ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8000c3fc: 00094783 lbu a5,0(s2) + 8000c400: 07f7f793 andi a5,a5,127 + 8000c404: 00f90023 sb a5,0(s2) + 8000c408: 0004b517 auipc a0,0x4b + 8000c40c: 5b050513 addi a0,a0,1456 # 800579b8 + 8000c410: 00850433 add s0,a0,s0 + 8000c414: 00940023 sb s1,0(s0) + 8000c418: 01813083 ld ra,24(sp) + 8000c41c: 01013403 ld s0,16(sp) + 8000c420: 00813483 ld s1,8(sp) + 8000c424: 00013903 ld s2,0(sp) + 8000c428: 02010113 addi sp,sp,32 + 8000c42c: 00008067 ret + 8000c430: 0003c797 auipc a5,0x3c + 8000c434: 4587b783 ld a5,1112(a5) # 80048888 <_ZL5DoSQ1> + 8000c438: 000780e7 jalr a5 + 8000c43c: 0044d713 srli a4,s1,0x4 + 8000c440: 0004b697 auipc a3,0x4b + 8000c444: 53068693 addi a3,a3,1328 # 80057970 + 8000c448: 00377713 andi a4,a4,3 + 8000c44c: 00f4f793 andi a5,s1,15 + 8000c450: 00e680a3 sb a4,1(a3) + 8000c454: 00f68023 sb a5,0(a3) + 8000c458: 001bf797 auipc a5,0x1bf + 8000c45c: 7d47c783 lbu a5,2004(a5) # 801cbc2c + 8000c460: 0004871b sext.w a4,s1 + 8000c464: fa0782e3 beqz a5,8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c468: 4017579b sraiw a5,a4,0x1 + 8000c46c: 00171713 slli a4,a4,0x1 + 8000c470: 0407f793 andi a5,a5,64 + 8000c474: f8077713 andi a4,a4,-128 + 8000c478: 03f4f593 andi a1,s1,63 + 8000c47c: 00e7e4b3 or s1,a5,a4 + 8000c480: 00b4e4b3 or s1,s1,a1 + 8000c484: 0ff4f493 andi s1,s1,255 + 8000c488: f81ff06f j 8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c48c: 0003c797 auipc a5,0x3c + 8000c490: 3fc7b783 ld a5,1020(a5) # 80048888 <_ZL5DoSQ1> + 8000c494: 000780e7 jalr a5 + 8000c498: f804f793 andi a5,s1,-128 + 8000c49c: 001bf717 auipc a4,0x1bf + 8000c4a0: 70f70223 sb a5,1796(a4) # 801cbba0 <_ZL7sweepon> + 8000c4a4: 00100793 li a5,1 + 8000c4a8: 001bf717 auipc a4,0x1bf + 8000c4ac: 6cf70423 sb a5,1736(a4) # 801cbb70 <_ZL11SweepReload> + 8000c4b0: f59ff06f j 8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c4b4: 0003c797 auipc a5,0x3c + 8000c4b8: 3d47b783 ld a5,980(a5) # 80048888 <_ZL5DoSQ1> + 8000c4bc: 000780e7 jalr a5 + 8000c4c0: 001bf797 auipc a5,0x1bf + 8000c4c4: 69a7c783 lbu a5,1690(a5) # 801cbb5a + 8000c4c8: 0017f793 andi a5,a5,1 + 8000c4cc: 02078063 beqz a5,8000c4ec <_ZL9Write_PSGjh+0x18c> + 8000c4d0: 0034d713 srli a4,s1,0x3 + 8000c4d4: 00031797 auipc a5,0x31 + 8000c4d8: fcc78793 addi a5,a5,-52 # 8003d4a0 <_ZL11lengthtable> + 8000c4dc: 00e787b3 add a5,a5,a4 + 8000c4e0: 0007c783 lbu a5,0(a5) + 8000c4e4: 00078717 auipc a4,0x78 + 8000c4e8: 9af72e23 sw a5,-1604(a4) # 80083ea0 + 8000c4ec: 001bf697 auipc a3,0x1bf + 8000c4f0: 6cc68693 addi a3,a3,1740 # 801cbbb8 + 8000c4f4: 0006c783 lbu a5,0(a3) + 8000c4f8: 0084971b slliw a4,s1,0x8 + 8000c4fc: 70077713 andi a4,a4,1792 + 8000c500: 00e7e7b3 or a5,a5,a4 + 8000c504: 00f6a023 sw a5,0(a3) + 8000c508: 00700793 li a5,7 + 8000c50c: 001bf717 auipc a4,0x1bf + 8000c510: 66f72623 sw a5,1644(a4) # 801cbb78 <_ZL13RectDutyCount> + 8000c514: 00100793 li a5,1 + 8000c518: 0004b717 auipc a4,0x4b + 8000c51c: 44f72e23 sw a5,1116(a4) # 80057974 + 8000c520: ee9ff06f j 8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c524: 0003c797 auipc a5,0x3c + 8000c528: 36c7b783 ld a5,876(a5) # 80048890 <_ZL5DoSQ2> + 8000c52c: 000780e7 jalr a5 + 8000c530: 0044d713 srli a4,s1,0x4 + 8000c534: 0004b697 auipc a3,0x4b + 8000c538: 43c68693 addi a3,a3,1084 # 80057970 + 8000c53c: 00377713 andi a4,a4,3 + 8000c540: 00f4f793 andi a5,s1,15 + 8000c544: 00e684a3 sb a4,9(a3) + 8000c548: 00f68423 sb a5,8(a3) + 8000c54c: 001bf797 auipc a5,0x1bf + 8000c550: 6e07c783 lbu a5,1760(a5) # 801cbc2c + 8000c554: 0004871b sext.w a4,s1 + 8000c558: ea0788e3 beqz a5,8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c55c: f0dff06f j 8000c468 <_ZL9Write_PSGjh+0x108> + 8000c560: 0003c797 auipc a5,0x3c + 8000c564: 3287b783 ld a5,808(a5) # 80048888 <_ZL5DoSQ1> + 8000c568: 000780e7 jalr a5 + 8000c56c: 001bf697 auipc a3,0x1bf + 8000c570: 64c68693 addi a3,a3,1612 # 801cbbb8 + 8000c574: 0006a783 lw a5,0(a3) + 8000c578: 00010737 lui a4,0x10 + 8000c57c: f0070713 addi a4,a4,-256 # ff00 <_entry_offset+0xff00> + 8000c580: 00e7f7b3 and a5,a5,a4 + 8000c584: 0097e7b3 or a5,a5,s1 + 8000c588: 00f6a023 sw a5,0(a3) + 8000c58c: e7dff06f j 8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c590: 0003c797 auipc a5,0x3c + 8000c594: 3007b783 ld a5,768(a5) # 80048890 <_ZL5DoSQ2> + 8000c598: 000780e7 jalr a5 + 8000c59c: f804f793 andi a5,s1,-128 + 8000c5a0: 001bf717 auipc a4,0x1bf + 8000c5a4: 60f700a3 sb a5,1537(a4) # 801cbba1 <_ZL7sweepon+0x1> + 8000c5a8: 00100793 li a5,1 + 8000c5ac: 001bf717 auipc a4,0x1bf + 8000c5b0: 5cf702a3 sb a5,1477(a4) # 801cbb71 <_ZL11SweepReload+0x1> + 8000c5b4: e55ff06f j 8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c5b8: 0003c797 auipc a5,0x3c + 8000c5bc: 2d87b783 ld a5,728(a5) # 80048890 <_ZL5DoSQ2> + 8000c5c0: 000780e7 jalr a5 + 8000c5c4: 001bf697 auipc a3,0x1bf + 8000c5c8: 5f468693 addi a3,a3,1524 # 801cbbb8 + 8000c5cc: 0046a783 lw a5,4(a3) + 8000c5d0: 00010737 lui a4,0x10 + 8000c5d4: f0070713 addi a4,a4,-256 # ff00 <_entry_offset+0xff00> + 8000c5d8: 00e7f7b3 and a5,a5,a4 + 8000c5dc: 0097e7b3 or a5,a5,s1 + 8000c5e0: 00f6a223 sw a5,4(a3) + 8000c5e4: e25ff06f j 8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c5e8: 0003c797 auipc a5,0x3c + 8000c5ec: 2a87b783 ld a5,680(a5) # 80048890 <_ZL5DoSQ2> + 8000c5f0: 000780e7 jalr a5 + 8000c5f4: 001bf797 auipc a5,0x1bf + 8000c5f8: 5667c783 lbu a5,1382(a5) # 801cbb5a + 8000c5fc: 4017d79b sraiw a5,a5,0x1 + 8000c600: 0017f793 andi a5,a5,1 + 8000c604: 02078063 beqz a5,8000c624 <_ZL9Write_PSGjh+0x2c4> + 8000c608: 0034d713 srli a4,s1,0x3 + 8000c60c: 00031797 auipc a5,0x31 + 8000c610: e9478793 addi a5,a5,-364 # 8003d4a0 <_ZL11lengthtable> + 8000c614: 00e787b3 add a5,a5,a4 + 8000c618: 0007c783 lbu a5,0(a5) + 8000c61c: 00078717 auipc a4,0x78 + 8000c620: 88f72423 sw a5,-1912(a4) # 80083ea4 + 8000c624: 001bf697 auipc a3,0x1bf + 8000c628: 59468693 addi a3,a3,1428 # 801cbbb8 + 8000c62c: 0046c783 lbu a5,4(a3) + 8000c630: 0084971b slliw a4,s1,0x8 + 8000c634: 70077713 andi a4,a4,1792 + 8000c638: 00e7e7b3 or a5,a5,a4 + 8000c63c: 00f6a223 sw a5,4(a3) + 8000c640: 00700793 li a5,7 + 8000c644: 001bf717 auipc a4,0x1bf + 8000c648: 52f72c23 sw a5,1336(a4) # 801cbb7c <_ZL13RectDutyCount+0x4> + 8000c64c: 00100793 li a5,1 + 8000c650: 0004b717 auipc a4,0x4b + 8000c654: 32f72623 sw a5,812(a4) # 8005797c + 8000c658: db1ff06f j 8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c65c: 0003c797 auipc a5,0x3c + 8000c660: 21c7b783 ld a5,540(a5) # 80048878 <_ZL10DoTriangle> + 8000c664: 000780e7 jalr a5 + 8000c668: da1ff06f j 8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c66c: 0003c797 auipc a5,0x3c + 8000c670: 20c7b783 ld a5,524(a5) # 80048878 <_ZL10DoTriangle> + 8000c674: 000780e7 jalr a5 + 8000c678: 001bf797 auipc a5,0x1bf + 8000c67c: 4e27c783 lbu a5,1250(a5) # 801cbb5a + 8000c680: 0047f793 andi a5,a5,4 + 8000c684: 02078063 beqz a5,8000c6a4 <_ZL9Write_PSGjh+0x344> + 8000c688: 0034d713 srli a4,s1,0x3 + 8000c68c: 00031797 auipc a5,0x31 + 8000c690: e1478793 addi a5,a5,-492 # 8003d4a0 <_ZL11lengthtable> + 8000c694: 00e787b3 add a5,a5,a4 + 8000c698: 0007c783 lbu a5,0(a5) + 8000c69c: 00078717 auipc a4,0x78 + 8000c6a0: 80f72623 sw a5,-2036(a4) # 80083ea8 + 8000c6a4: 00100793 li a5,1 + 8000c6a8: 001bf717 auipc a4,0x1bf + 8000c6ac: 4ef70a23 sb a5,1268(a4) # 801cbb9c <_ZL7TriMode> + 8000c6b0: d59ff06f j 8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c6b4: 0003c797 auipc a5,0x3c + 8000c6b8: 1e47b783 ld a5,484(a5) # 80048898 <_ZL7DoNoise> + 8000c6bc: 000780e7 jalr a5 + 8000c6c0: 4044d79b sraiw a5,s1,0x4 + 8000c6c4: 0004b697 auipc a3,0x4b + 8000c6c8: 2ac68693 addi a3,a3,684 # 80057970 + 8000c6cc: 0037f793 andi a5,a5,3 + 8000c6d0: 00f4f713 andi a4,s1,15 + 8000c6d4: 00f688a3 sb a5,17(a3) + 8000c6d8: 00e68823 sb a4,16(a3) + 8000c6dc: d2dff06f j 8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c6e0: 0003c797 auipc a5,0x3c + 8000c6e4: 1b87b783 ld a5,440(a5) # 80048898 <_ZL7DoNoise> + 8000c6e8: 000780e7 jalr a5 + 8000c6ec: d1dff06f j 8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c6f0: 0003c797 auipc a5,0x3c + 8000c6f4: 1a87b783 ld a5,424(a5) # 80048898 <_ZL7DoNoise> + 8000c6f8: 000780e7 jalr a5 + 8000c6fc: 001bf797 auipc a5,0x1bf + 8000c700: 45e7c783 lbu a5,1118(a5) # 801cbb5a + 8000c704: 0087f793 andi a5,a5,8 + 8000c708: 02078063 beqz a5,8000c728 <_ZL9Write_PSGjh+0x3c8> + 8000c70c: 0034d713 srli a4,s1,0x3 + 8000c710: 00031797 auipc a5,0x31 + 8000c714: d9078793 addi a5,a5,-624 # 8003d4a0 <_ZL11lengthtable> + 8000c718: 00e787b3 add a5,a5,a4 + 8000c71c: 0007c783 lbu a5,0(a5) + 8000c720: 00077717 auipc a4,0x77 + 8000c724: 78f72623 sw a5,1932(a4) # 80083eac + 8000c728: 00100793 li a5,1 + 8000c72c: 0004b717 auipc a4,0x4b + 8000c730: 24f72c23 sw a5,600(a4) # 80057984 + 8000c734: cd5ff06f j 8000c408 <_ZL9Write_PSGjh+0xa8> + 8000c738: 00031717 auipc a4,0x31 + 8000c73c: d2870713 addi a4,a4,-728 # 8003d460 <_ZL11PALDMCTable> + 8000c740: 00f707b3 add a5,a4,a5 + 8000c744: 0007a783 lw a5,0(a5) + 8000c748: 001bf717 auipc a4,0x1bf + 8000c74c: 40f72623 sw a5,1036(a4) # 801cbb54 + 8000c750: c89ff06f j 8000c3d8 <_ZL9Write_PSGjh+0x78> + 8000c754: de4f40ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 8000c758: cb1ff06f j 8000c408 <_ZL9Write_PSGjh+0xa8> + +000000008000c75c <_ZL13Write_DMCRegsjh>: + 8000c75c: fe010113 addi sp,sp,-32 + 8000c760: 00813823 sd s0,16(sp) + 8000c764: 00913423 sd s1,8(sp) + 8000c768: 00113c23 sd ra,24(sp) + 8000c76c: 00f57413 andi s0,a0,15 + 8000c770: 00200793 li a5,2 + 8000c774: 00058493 mv s1,a1 + 8000c778: 0ef40463 beq s0,a5,8000c860 <_ZL13Write_DMCRegsjh+0x104> + 8000c77c: 0487e863 bltu a5,s0,8000c7cc <_ZL13Write_DMCRegsjh+0x70> + 8000c780: 06040e63 beqz s0,8000c7fc <_ZL13Write_DMCRegsjh+0xa0> + 8000c784: 00100793 li a5,1 + 8000c788: 02f41863 bne s0,a5,8000c7b8 <_ZL13Write_DMCRegsjh+0x5c> + 8000c78c: 0003c797 auipc a5,0x3c + 8000c790: 0f47b783 ld a5,244(a5) # 80048880 <_ZL5DoPCM> + 8000c794: 07f4f493 andi s1,s1,127 + 8000c798: 000780e7 jalr a5 + 8000c79c: 001bf797 auipc a5,0x1bf + 8000c7a0: 3c978023 sb s1,960(a5) # 801cbb5c + 8000c7a4: 001bf797 auipc a5,0x1bf + 8000c7a8: 3a978ca3 sb s1,953(a5) # 801cbb5d + 8000c7ac: 00048663 beqz s1,8000c7b8 <_ZL13Write_DMCRegsjh+0x5c> + 8000c7b0: 001bf797 auipc a5,0x1bf + 8000c7b4: 3a8784a3 sb s0,937(a5) # 801cbb59 + 8000c7b8: 01813083 ld ra,24(sp) + 8000c7bc: 01013403 ld s0,16(sp) + 8000c7c0: 00813483 ld s1,8(sp) + 8000c7c4: 02010113 addi sp,sp,32 + 8000c7c8: 00008067 ret + 8000c7cc: 00300793 li a5,3 + 8000c7d0: fef414e3 bne s0,a5,8000c7b8 <_ZL13Write_DMCRegsjh+0x5c> + 8000c7d4: 001bf797 auipc a5,0x1bf + 8000c7d8: 38b78223 sb a1,900(a5) # 801cbb58 + 8000c7dc: fc058ee3 beqz a1,8000c7b8 <_ZL13Write_DMCRegsjh+0x5c> + 8000c7e0: 001bf797 auipc a5,0x1bf + 8000c7e4: 36078ca3 sb zero,889(a5) # 801cbb59 + 8000c7e8: 01813083 ld ra,24(sp) + 8000c7ec: 01013403 ld s0,16(sp) + 8000c7f0: 00813483 ld s1,8(sp) + 8000c7f4: 02010113 addi sp,sp,32 + 8000c7f8: 00008067 ret + 8000c7fc: 0003c797 auipc a5,0x3c + 8000c800: 0847b783 ld a5,132(a5) # 80048880 <_ZL5DoPCM> + 8000c804: 000780e7 jalr a5 + 8000c808: 00f4f793 andi a5,s1,15 + 8000c80c: 001c0717 auipc a4,0x1c0 + 8000c810: e5474703 lbu a4,-428(a4) # 801cc660 + 8000c814: 00279793 slli a5,a5,0x2 + 8000c818: 06071063 bnez a4,8000c878 <_ZL13Write_DMCRegsjh+0x11c> + 8000c81c: 00031717 auipc a4,0x31 + 8000c820: ca470713 addi a4,a4,-860 # 8003d4c0 <_ZL12NTSCDMCTable> + 8000c824: 00f707b3 add a5,a4,a5 + 8000c828: 0007a783 lw a5,0(a5) + 8000c82c: 001bf717 auipc a4,0x1bf + 8000c830: 32f72423 sw a5,808(a4) # 801cbb54 + 8000c834: 001bf417 auipc s0,0x1bf + 8000c838: 37540413 addi s0,s0,885 # 801cbba9 <_ZL8SIRQStat> + 8000c83c: 00040783 lb a5,0(s0) + 8000c840: 0407ca63 bltz a5,8000c894 <_ZL13Write_DMCRegsjh+0x138> + 8000c844: 01813083 ld ra,24(sp) + 8000c848: 01013403 ld s0,16(sp) + 8000c84c: 001bf797 auipc a5,0x1bf + 8000c850: 30978323 sb s1,774(a5) # 801cbb52 + 8000c854: 00813483 ld s1,8(sp) + 8000c858: 02010113 addi sp,sp,32 + 8000c85c: 00008067 ret + 8000c860: 001bf797 auipc a5,0x1bf + 8000c864: 2eb78823 sb a1,752(a5) # 801cbb50 + 8000c868: f40588e3 beqz a1,8000c7b8 <_ZL13Write_DMCRegsjh+0x5c> + 8000c86c: 001bf797 auipc a5,0x1bf + 8000c870: 2e0786a3 sb zero,749(a5) # 801cbb59 + 8000c874: f75ff06f j 8000c7e8 <_ZL13Write_DMCRegsjh+0x8c> + 8000c878: 00031717 auipc a4,0x31 + 8000c87c: be870713 addi a4,a4,-1048 # 8003d460 <_ZL11PALDMCTable> + 8000c880: 00f707b3 add a5,a4,a5 + 8000c884: 0007a783 lw a5,0(a5) + 8000c888: 001bf717 auipc a4,0x1bf + 8000c88c: 2cf72623 sw a5,716(a4) # 801cbb54 + 8000c890: fa5ff06f j 8000c834 <_ZL13Write_DMCRegsjh+0xd8> + 8000c894: 0184979b slliw a5,s1,0x18 + 8000c898: 4187d79b sraiw a5,a5,0x18 + 8000c89c: 10000513 li a0,256 + 8000c8a0: 0007cc63 bltz a5,8000c8b8 <_ZL13Write_DMCRegsjh+0x15c> + 8000c8a4: cacf40ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8000c8a8: 00044783 lbu a5,0(s0) + 8000c8ac: 07f7f793 andi a5,a5,127 + 8000c8b0: 00f40023 sb a5,0(s0) + 8000c8b4: f91ff06f j 8000c844 <_ZL13Write_DMCRegsjh+0xe8> + 8000c8b8: c80f40ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 8000c8bc: f89ff06f j 8000c844 <_ZL13Write_DMCRegsjh+0xe8> + +000000008000c8c0 <_ZL7RDoSQLQv>: + 8000c8c0: 001bf797 auipc a5,0x1bf + 8000c8c4: 3107a783 lw a5,784(a5) # 801cbbd0 + 8000c8c8: 001bf517 auipc a0,0x1bf + 8000c8cc: 28052503 lw a0,640(a0) # 801cbb48 + 8000c8d0: 00f5053b addw a0,a0,a5 + 8000c8d4: ef010113 addi sp,sp,-272 + 8000c8d8: 0105151b slliw a0,a0,0x10 + 8000c8dc: 0e913c23 sd s1,248(sp) + 8000c8e0: 02051513 slli a0,a0,0x20 + 8000c8e4: 00077497 auipc s1,0x77 + 8000c8e8: 5a448493 addi s1,s1,1444 # 80083e88 <_ZL9ChannelBC> + 8000c8ec: 10813023 sd s0,256(sp) + 8000c8f0: 001bf597 auipc a1,0x1bf + 8000c8f4: 2dc5e583 lwu a1,732(a1) # 801cbbcc + 8000c8f8: 02055513 srli a0,a0,0x20 + 8000c8fc: 0004a403 lw s0,0(s1) + 8000c900: 0f413023 sd s4,224(sp) + 8000c904: 10113423 sd ra,264(sp) + 8000c908: 0f213823 sd s2,240(sp) + 8000c90c: 0f313423 sd s3,232(sp) + 8000c910: 0d513c23 sd s5,216(sp) + 8000c914: 0d613823 sd s6,208(sp) + 8000c918: 0d713423 sd s7,200(sp) + 8000c91c: 0d813023 sd s8,192(sp) + 8000c920: 0b913c23 sd s9,184(sp) + 8000c924: 0ba13823 sd s10,176(sp) + 8000c928: 0bb13423 sd s11,168(sp) + 8000c92c: 4fc2d0ef jal ra,80039e28 <__udivdi3> + 8000c930: 00050a1b sext.w s4,a0 + 8000c934: 25445663 bge s0,s4,8000cb80 <_ZL7RDoSQLQv+0x2c0> + 8000c938: 001bc797 auipc a5,0x1bc + 8000c93c: 3a878793 addi a5,a5,936 # 801c8ce0 + 8000c940: 0147a703 lw a4,20(a5) + 8000c944: 00001bb7 lui s7,0x1 + 8000c948: 0107a383 lw t2,16(a5) + 8000c94c: 0004b317 auipc t1,0x4b + 8000c950: 06c30313 addi t1,t1,108 # 800579b8 + 8000c954: 800b8793 addi a5,s7,-2048 # 800 <_entry_offset+0x800> + 8000c958: 0144a023 sw s4,0(s1) + 8000c95c: 02e13c23 sd a4,56(sp) + 8000c960: 001bf297 auipc t0,0x1bf + 8000c964: 2642a283 lw t0,612(t0) # 801cbbc4 + 8000c968: 05810a93 addi s5,sp,88 + 8000c96c: 001bf897 auipc a7,0x1bf + 8000c970: 24c88893 addi a7,a7,588 # 801cbbb8 + 8000c974: 05010813 addi a6,sp,80 + 8000c978: 04810493 addi s1,sp,72 + 8000c97c: 06010613 addi a2,sp,96 + 8000c980: 00030d93 mv s11,t1 + 8000c984: 0004bb17 auipc s6,0x4b + 8000c988: fecb0b13 addi s6,s6,-20 # 80057970 + 8000c98c: 00077d17 auipc s10,0x77 + 8000c990: 514d0d13 addi s10,s10,1300 # 80083ea0 + 8000c994: 00000c93 li s9,0 + 8000c998: 00031f97 auipc t6,0x31 + 8000c99c: ab8f8f93 addi t6,t6,-1352 # 8003d450 <_ZL10RectDuties> + 8000c9a0: 7f700f13 li t5,2039 + 8000c9a4: 02f13823 sd a5,48(sp) + 8000c9a8: 10000b93 li s7,256 + 8000c9ac: 00800913 li s2,8 + 8000c9b0: 00100c13 li s8,1 + 8000c9b4: 0008a983 lw s3,0(a7) + 8000c9b8: 005aa023 sw t0,0(s5) + 8000c9bc: ff89879b addiw a5,s3,-8 + 8000c9c0: 0009871b sext.w a4,s3 + 8000c9c4: 00ff7463 bgeu t5,a5,8000c9cc <_ZL7RDoSQLQv+0x10c> + 8000c9c8: 000aa023 sw zero,0(s5) + 8000c9cc: 002c979b slliw a5,s9,0x2 + 8000c9d0: 0017e793 ori a5,a5,1 + 8000c9d4: 0007879b sext.w a5,a5 + 8000c9d8: 00f307b3 add a5,t1,a5 + 8000c9dc: 0007c783 lbu a5,0(a5) + 8000c9e0: 0087f693 andi a3,a5,8 + 8000c9e4: 02069063 bnez a3,8000ca04 <_ZL7RDoSQLQv+0x144> + 8000c9e8: 0077f793 andi a5,a5,7 + 8000c9ec: 00f757bb srlw a5,a4,a5 + 8000c9f0: 00e787bb addw a5,a5,a4 + 8000c9f4: 03013703 ld a4,48(sp) + 8000c9f8: 00e7f7b3 and a5,a5,a4 + 8000c9fc: 0007879b sext.w a5,a5 + 8000ca00: 2e079a63 bnez a5,8000ccf4 <_ZL7RDoSQLQv+0x434> + 8000ca04: 000d2703 lw a4,0(s10) + 8000ca08: 1a070e63 beqz a4,8000cbc4 <_ZL7RDoSQLQv+0x304> + 8000ca0c: 001b4783 lbu a5,1(s6) + 8000ca10: 000aa703 lw a4,0(s5) + 8000ca14: 0017f793 andi a5,a5,1 + 8000ca18: 1a078e63 beqz a5,8000cbd4 <_ZL7RDoSQLQv+0x314> + 8000ca1c: 000b4783 lbu a5,0(s6) + 8000ca20: 00038513 mv a0,t2 + 8000ca24: 00f4a023 sw a5,0(s1) + 8000ca28: 1a0c8e63 beqz s9,8000cbe4 <_ZL7RDoSQLQv+0x324> + 8000ca2c: 07750263 beq a0,s7,8000ca90 <_ZL7RDoSQLQv+0x1d0> + 8000ca30: 0004a583 lw a1,0(s1) + 8000ca34: 03113423 sd a7,40(sp) + 8000ca38: 03013023 sd a6,32(sp) + 8000ca3c: 00c13c23 sd a2,24(sp) + 8000ca40: 00713823 sd t2,16(sp) + 8000ca44: 00e13423 sd a4,8(sp) + 8000ca48: 00513023 sd t0,0(sp) + 8000ca4c: 3702d0ef jal ra,80039dbc <__muldi3> + 8000ca50: 41f5579b sraiw a5,a0,0x1f + 8000ca54: 0187d79b srliw a5,a5,0x18 + 8000ca58: 00a787bb addw a5,a5,a0 + 8000ca5c: 02813883 ld a7,40(sp) + 8000ca60: 02013803 ld a6,32(sp) + 8000ca64: 01813603 ld a2,24(sp) + 8000ca68: 01013383 ld t2,16(sp) + 8000ca6c: 00813703 ld a4,8(sp) + 8000ca70: 00013283 ld t0,0(sp) + 8000ca74: 4087d79b sraiw a5,a5,0x8 + 8000ca78: 00f4a023 sw a5,0(s1) + 8000ca7c: 0004b317 auipc t1,0x4b + 8000ca80: f3c30313 addi t1,t1,-196 # 800579b8 + 8000ca84: 00031f97 auipc t6,0x31 + 8000ca88: 9ccf8f93 addi t6,t6,-1588 # 8003d450 <_ZL10RectDuties> + 8000ca8c: 7f700f13 li t5,2039 + 8000ca90: 00071463 bnez a4,8000ca98 <_ZL7RDoSQLQv+0x1d8> + 8000ca94: 0004a023 sw zero,0(s1) + 8000ca98: 000dc683 lbu a3,0(s11) + 8000ca9c: 00060713 mv a4,a2 + 8000caa0: 00000793 li a5,0 + 8000caa4: 0066d693 srli a3,a3,0x6 + 8000caa8: 00269693 slli a3,a3,0x2 + 8000caac: 00df86b3 add a3,t6,a3 + 8000cab0: 0006a683 lw a3,0(a3) + 8000cab4: 10d7d463 bge a5,a3,8000cbbc <_ZL7RDoSQLQv+0x2fc> + 8000cab8: 0004a583 lw a1,0(s1) + 8000cabc: 00b72023 sw a1,0(a4) + 8000cac0: 0017879b addiw a5,a5,1 + 8000cac4: 00470713 addi a4,a4,4 + 8000cac8: ff2796e3 bne a5,s2,8000cab4 <_ZL7RDoSQLQv+0x1f4> + 8000cacc: 0019899b addiw s3,s3,1 + 8000cad0: 0129999b slliw s3,s3,0x12 + 8000cad4: 01382023 sw s3,0(a6) + 8000cad8: 004a8a93 addi s5,s5,4 + 8000cadc: 00488893 addi a7,a7,4 + 8000cae0: 00480813 addi a6,a6,4 + 8000cae4: 00448493 addi s1,s1,4 + 8000cae8: 02060613 addi a2,a2,32 + 8000caec: 004d8d93 addi s11,s11,4 + 8000caf0: 008b0b13 addi s6,s6,8 + 8000caf4: 004d0d13 addi s10,s10,4 + 8000caf8: 0f8c9a63 bne s9,s8,8000cbec <_ZL7RDoSQLQv+0x32c> + 8000cafc: 001bf497 auipc s1,0x1bf + 8000cb00: 07c48493 addi s1,s1,124 # 801cbb78 <_ZL13RectDutyCount> + 8000cb04: 0044a683 lw a3,4(s1) + 8000cb08: 0004a603 lw a2,0(s1) + 8000cb0c: 0a010793 addi a5,sp,160 + 8000cb10: 00868293 addi t0,a3,8 + 8000cb14: 00261f93 slli t6,a2,0x2 + 8000cb18: 00229713 slli a4,t0,0x2 + 8000cb1c: 0a010593 addi a1,sp,160 + 8000cb20: 01f787b3 add a5,a5,t6 + 8000cb24: 00e58733 add a4,a1,a4 + 8000cb28: fc072703 lw a4,-64(a4) + 8000cb2c: fc07a783 lw a5,-64(a5) + 8000cb30: 05812e83 lw t4,88(sp) + 8000cb34: 05c12f03 lw t5,92(sp) + 8000cb38: 00e787bb addw a5,a5,a4 + 8000cb3c: 00077397 auipc t2,0x77 + 8000cb40: f9c38393 addi t2,t2,-100 # 80083ad8 <_ZL8wlookup1> + 8000cb44: 00279793 slli a5,a5,0x2 + 8000cb48: 00f387b3 add a5,t2,a5 + 8000cb4c: 01eee733 or a4,t4,t5 + 8000cb50: 0007a303 lw t1,0(a5) + 8000cb54: 0a071063 bnez a4,8000cbf4 <_ZL7RDoSQLQv+0x334> + 8000cb58: 0004be17 auipc t3,0x4b + 8000cb5c: e70e0e13 addi t3,t3,-400 # 800579c8 + 8000cb60: 40445793 srai a5,s0,0x4 + 8000cb64: 00279793 slli a5,a5,0x2 + 8000cb68: 00fe07b3 add a5,t3,a5 + 8000cb6c: 0007a703 lw a4,0(a5) + 8000cb70: 0014041b addiw s0,s0,1 + 8000cb74: 0067073b addw a4,a4,t1 + 8000cb78: 00e7a023 sw a4,0(a5) + 8000cb7c: fe8a12e3 bne s4,s0,8000cb60 <_ZL7RDoSQLQv+0x2a0> + 8000cb80: 10813083 ld ra,264(sp) + 8000cb84: 10013403 ld s0,256(sp) + 8000cb88: 0f813483 ld s1,248(sp) + 8000cb8c: 0f013903 ld s2,240(sp) + 8000cb90: 0e813983 ld s3,232(sp) + 8000cb94: 0e013a03 ld s4,224(sp) + 8000cb98: 0d813a83 ld s5,216(sp) + 8000cb9c: 0d013b03 ld s6,208(sp) + 8000cba0: 0c813b83 ld s7,200(sp) + 8000cba4: 0c013c03 ld s8,192(sp) + 8000cba8: 0b813c83 ld s9,184(sp) + 8000cbac: 0b013d03 ld s10,176(sp) + 8000cbb0: 0a813d83 ld s11,168(sp) + 8000cbb4: 11010113 addi sp,sp,272 + 8000cbb8: 00008067 ret + 8000cbbc: 00072023 sw zero,0(a4) + 8000cbc0: f01ff06f j 8000cac0 <_ZL7RDoSQLQv+0x200> + 8000cbc4: 001b4783 lbu a5,1(s6) + 8000cbc8: 000aa023 sw zero,0(s5) + 8000cbcc: 0017f793 andi a5,a5,1 + 8000cbd0: e40796e3 bnez a5,8000ca1c <_ZL7RDoSQLQv+0x15c> + 8000cbd4: 003b4783 lbu a5,3(s6) + 8000cbd8: 00038513 mv a0,t2 + 8000cbdc: 00f4a023 sw a5,0(s1) + 8000cbe0: e40c96e3 bnez s9,8000ca2c <_ZL7RDoSQLQv+0x16c> + 8000cbe4: 03813503 ld a0,56(sp) + 8000cbe8: e45ff06f j 8000ca2c <_ZL7RDoSQLQv+0x16c> + 8000cbec: 00100c93 li s9,1 + 8000cbf0: dc5ff06f j 8000c9b4 <_ZL7RDoSQLQv+0xf4> + 8000cbf4: 001bf917 auipc s2,0x1bf + 8000cbf8: f9c90913 addi s2,s2,-100 # 801cbb90 <_ZL5sqacc> + 8000cbfc: 05012883 lw a7,80(sp) + 8000cc00: 00092783 lw a5,0(s2) + 8000cc04: 05412803 lw a6,84(sp) + 8000cc08: 00492703 lw a4,4(s2) + 8000cc0c: 00000a93 li s5,0 + 8000cc10: 00000993 li s3,0 + 8000cc14: 0004be17 auipc t3,0x4b + 8000cc18: db4e0e13 addi t3,t3,-588 # 800579c8 + 8000cc1c: 40445593 srai a1,s0,0x4 + 8000cc20: 00259593 slli a1,a1,0x2 + 8000cc24: 00be05b3 add a1,t3,a1 + 8000cc28: 0005a503 lw a0,0(a1) + 8000cc2c: 41d787bb subw a5,a5,t4 + 8000cc30: 41e7073b subw a4,a4,t5 + 8000cc34: 0065053b addw a0,a0,t1 + 8000cc38: 00a5a023 sw a0,0(a1) + 8000cc3c: 02f05663 blez a5,8000cc68 <_ZL7RDoSQLQv+0x3a8> + 8000cc40: 06e05863 blez a4,8000ccb0 <_ZL7RDoSQLQv+0x3f0> + 8000cc44: 0014041b addiw s0,s0,1 + 8000cc48: fc8a1ae3 bne s4,s0,8000cc1c <_ZL7RDoSQLQv+0x35c> + 8000cc4c: 00e92223 sw a4,4(s2) + 8000cc50: 00f92023 sw a5,0(s2) + 8000cc54: 00098463 beqz s3,8000cc5c <_ZL7RDoSQLQv+0x39c> + 8000cc58: 00d4a223 sw a3,4(s1) + 8000cc5c: f20a82e3 beqz s5,8000cb80 <_ZL7RDoSQLQv+0x2c0> + 8000cc60: 00c4a023 sw a2,0(s1) + 8000cc64: f1dff06f j 8000cb80 <_ZL7RDoSQLQv+0x2c0> + 8000cc68: 0016061b addiw a2,a2,1 + 8000cc6c: 00f887bb addw a5,a7,a5 + 8000cc70: 00767613 andi a2,a2,7 + 8000cc74: fef05ae3 blez a5,8000cc68 <_ZL7RDoSQLQv+0x3a8> + 8000cc78: 0a010313 addi t1,sp,160 + 8000cc7c: 00261f93 slli t6,a2,0x2 + 8000cc80: 00229513 slli a0,t0,0x2 + 8000cc84: 0a010593 addi a1,sp,160 + 8000cc88: 00a30533 add a0,t1,a0 + 8000cc8c: 01f585b3 add a1,a1,t6 + 8000cc90: fc05a583 lw a1,-64(a1) + 8000cc94: fc052503 lw a0,-64(a0) + 8000cc98: 00100a93 li s5,1 + 8000cc9c: 00a585bb addw a1,a1,a0 + 8000cca0: 00259593 slli a1,a1,0x2 + 8000cca4: 00b385b3 add a1,t2,a1 + 8000cca8: 0005a303 lw t1,0(a1) + 8000ccac: f8e04ce3 bgtz a4,8000cc44 <_ZL7RDoSQLQv+0x384> + 8000ccb0: 0016869b addiw a3,a3,1 + 8000ccb4: 00e8073b addw a4,a6,a4 + 8000ccb8: 0076f693 andi a3,a3,7 + 8000ccbc: fee05ae3 blez a4,8000ccb0 <_ZL7RDoSQLQv+0x3f0> + 8000ccc0: 00868293 addi t0,a3,8 + 8000ccc4: 0a010593 addi a1,sp,160 + 8000ccc8: 00229513 slli a0,t0,0x2 + 8000cccc: 00a58533 add a0,a1,a0 + 8000ccd0: 01f585b3 add a1,a1,t6 + 8000ccd4: fc05a583 lw a1,-64(a1) + 8000ccd8: fc052503 lw a0,-64(a0) + 8000ccdc: 00100993 li s3,1 + 8000cce0: 00a585bb addw a1,a1,a0 + 8000cce4: 00259593 slli a1,a1,0x2 + 8000cce8: 00b385b3 add a1,t2,a1 + 8000ccec: 0005a303 lw t1,0(a1) + 8000ccf0: f55ff06f j 8000cc44 <_ZL7RDoSQLQv+0x384> + 8000ccf4: 000aa023 sw zero,0(s5) + 8000ccf8: d0dff06f j 8000ca04 <_ZL7RDoSQLQv+0x144> + +000000008000ccfc <_ZL6RDoSQ1v>: + 8000ccfc: fe010113 addi sp,sp,-32 + 8000cd00: 00813823 sd s0,16(sp) + 8000cd04: 001bf417 auipc s0,0x1bf + 8000cd08: eb442403 lw s0,-332(s0) # 801cbbb8 + 8000cd0c: 00913423 sd s1,8(sp) + 8000cd10: 001bf617 auipc a2,0x1bf + 8000cd14: ec062603 lw a2,-320(a2) # 801cbbd0 + 8000cd18: 001bf497 auipc s1,0x1bf + 8000cd1c: e304a483 lw s1,-464(s1) # 801cbb48 + 8000cd20: 00113c23 sd ra,24(sp) + 8000cd24: 01213023 sd s2,0(sp) + 8000cd28: ff84069b addiw a3,s0,-8 + 8000cd2c: 7f700713 li a4,2039 + 8000cd30: 00c484bb addw s1,s1,a2 + 8000cd34: 00077517 auipc a0,0x77 + 8000cd38: 15450513 addi a0,a0,340 # 80083e88 <_ZL9ChannelBC> + 8000cd3c: 14d76663 bltu a4,a3,8000ce88 <_ZL6RDoSQ1v+0x18c> + 8000cd40: 0004b917 auipc s2,0x4b + 8000cd44: c7890913 addi s2,s2,-904 # 800579b8 + 8000cd48: 00194783 lbu a5,1(s2) + 8000cd4c: 0087f713 andi a4,a5,8 + 8000cd50: 02071463 bnez a4,8000cd78 <_ZL6RDoSQ1v+0x7c> + 8000cd54: 0004059b sext.w a1,s0 + 8000cd58: 0077f793 andi a5,a5,7 + 8000cd5c: 00f5d7bb srlw a5,a1,a5 + 8000cd60: 00001737 lui a4,0x1 + 8000cd64: 00b787bb addw a5,a5,a1 + 8000cd68: 80070713 addi a4,a4,-2048 # 800 <_entry_offset+0x800> + 8000cd6c: 00e7f7b3 and a5,a5,a4 + 8000cd70: 0007879b sext.w a5,a5 + 8000cd74: 10079a63 bnez a5,8000ce88 <_ZL6RDoSQ1v+0x18c> + 8000cd78: 00077797 auipc a5,0x77 + 8000cd7c: 1287a783 lw a5,296(a5) # 80083ea0 + 8000cd80: 00077517 auipc a0,0x77 + 8000cd84: 10850513 addi a0,a0,264 # 80083e88 <_ZL9ChannelBC> + 8000cd88: 10078063 beqz a5,8000ce88 <_ZL6RDoSQ1v+0x18c> + 8000cd8c: 0004b717 auipc a4,0x4b + 8000cd90: be470713 addi a4,a4,-1052 # 80057970 + 8000cd94: 00174783 lbu a5,1(a4) + 8000cd98: 0017f793 andi a5,a5,1 + 8000cd9c: 10079463 bnez a5,8000cea4 <_ZL6RDoSQ1v+0x1a8> + 8000cda0: 00374583 lbu a1,3(a4) + 8000cda4: 001bc517 auipc a0,0x1bc + 8000cda8: f4c52503 lw a0,-180(a0) # 801c8cf0 + 8000cdac: 10000793 li a5,256 + 8000cdb0: 00f50e63 beq a0,a5,8000cdcc <_ZL6RDoSQ1v+0xd0> + 8000cdb4: 0082d0ef jal ra,80039dbc <__muldi3> + 8000cdb8: 0005051b sext.w a0,a0 + 8000cdbc: 41f5559b sraiw a1,a0,0x1f + 8000cdc0: 0185d59b srliw a1,a1,0x18 + 8000cdc4: 00a585bb addw a1,a1,a0 + 8000cdc8: 4085d59b sraiw a1,a1,0x8 + 8000cdcc: 00077517 auipc a0,0x77 + 8000cdd0: 0bc50513 addi a0,a0,188 # 80083e88 <_ZL9ChannelBC> + 8000cdd4: 00052703 lw a4,0(a0) + 8000cdd8: 00094683 lbu a3,0(s2) + 8000cddc: 00030617 auipc a2,0x30 + 8000cde0: 67460613 addi a2,a2,1652 # 8003d450 <_ZL10RectDuties> + 8000cde4: 02071793 slli a5,a4,0x20 + 8000cde8: 0066d693 srli a3,a3,0x6 + 8000cdec: 00269693 slli a3,a3,0x2 + 8000cdf0: 0207d793 srli a5,a5,0x20 + 8000cdf4: 40e4873b subw a4,s1,a4 + 8000cdf8: 00d606b3 add a3,a2,a3 + 8000cdfc: 00279793 slli a5,a5,0x2 + 8000ce00: 001bfe97 auipc t4,0x1bf + 8000ce04: d78e8e93 addi t4,t4,-648 # 801cbb78 <_ZL13RectDutyCount> + 8000ce08: 0014041b addiw s0,s0,1 + 8000ce0c: 00077e17 auipc t3,0x77 + 8000ce10: cbce0e13 addi t3,t3,-836 # 80083ac8 <_ZL7wlcount> + 8000ce14: 00050897 auipc a7,0x50 + 8000ce18: bb488893 addi a7,a7,-1100 # 8005c9c8 + 8000ce1c: 0007061b sext.w a2,a4 + 8000ce20: 0006a303 lw t1,0(a3) + 8000ce24: 000ea803 lw a6,0(t4) + 8000ce28: 000e2683 lw a3,0(t3) + 8000ce2c: 0185959b slliw a1,a1,0x18 + 8000ce30: 011787b3 add a5,a5,a7 + 8000ce34: 0014141b slliw s0,s0,0x1 + 8000ce38: 04c05463 blez a2,8000ce80 <_ZL6RDoSQ1v+0x184> + 8000ce3c: fff7071b addiw a4,a4,-1 + 8000ce40: 02071713 slli a4,a4,0x20 + 8000ce44: 02075713 srli a4,a4,0x20 + 8000ce48: 00170713 addi a4,a4,1 + 8000ce4c: 00271713 slli a4,a4,0x2 + 8000ce50: 00e78733 add a4,a5,a4 + 8000ce54: fff6869b addiw a3,a3,-1 + 8000ce58: 0018089b addiw a7,a6,1 + 8000ce5c: 00685863 bge a6,t1,8000ce6c <_ZL6RDoSQ1v+0x170> + 8000ce60: 0007a603 lw a2,0(a5) + 8000ce64: 00b6063b addw a2,a2,a1 + 8000ce68: 00c7a023 sw a2,0(a5) + 8000ce6c: 00478793 addi a5,a5,4 + 8000ce70: 00069663 bnez a3,8000ce7c <_ZL6RDoSQ1v+0x180> + 8000ce74: 0078f813 andi a6,a7,7 + 8000ce78: 00040693 mv a3,s0 + 8000ce7c: fce79ce3 bne a5,a4,8000ce54 <_ZL6RDoSQ1v+0x158> + 8000ce80: 010ea023 sw a6,0(t4) + 8000ce84: 00de2023 sw a3,0(t3) + 8000ce88: 01813083 ld ra,24(sp) + 8000ce8c: 01013403 ld s0,16(sp) + 8000ce90: 00952023 sw s1,0(a0) + 8000ce94: 00013903 ld s2,0(sp) + 8000ce98: 00813483 ld s1,8(sp) + 8000ce9c: 02010113 addi sp,sp,32 + 8000cea0: 00008067 ret + 8000cea4: 00074583 lbu a1,0(a4) + 8000cea8: efdff06f j 8000cda4 <_ZL6RDoSQ1v+0xa8> + +000000008000ceac <_ZL6RDoSQ2v>: + 8000ceac: fe010113 addi sp,sp,-32 + 8000ceb0: 00813823 sd s0,16(sp) + 8000ceb4: 001bf417 auipc s0,0x1bf + 8000ceb8: d0842403 lw s0,-760(s0) # 801cbbbc + 8000cebc: 00913423 sd s1,8(sp) + 8000cec0: 001bf617 auipc a2,0x1bf + 8000cec4: d1062603 lw a2,-752(a2) # 801cbbd0 + 8000cec8: 001bf497 auipc s1,0x1bf + 8000cecc: c804a483 lw s1,-896(s1) # 801cbb48 + 8000ced0: 00113c23 sd ra,24(sp) + 8000ced4: 01213023 sd s2,0(sp) + 8000ced8: ff84069b addiw a3,s0,-8 + 8000cedc: 7f700713 li a4,2039 + 8000cee0: 00c484bb addw s1,s1,a2 + 8000cee4: 00077517 auipc a0,0x77 + 8000cee8: fa450513 addi a0,a0,-92 # 80083e88 <_ZL9ChannelBC> + 8000ceec: 14d76663 bltu a4,a3,8000d038 <_ZL6RDoSQ2v+0x18c> + 8000cef0: 0004b917 auipc s2,0x4b + 8000cef4: ac890913 addi s2,s2,-1336 # 800579b8 + 8000cef8: 00594783 lbu a5,5(s2) + 8000cefc: 0087f713 andi a4,a5,8 + 8000cf00: 02071463 bnez a4,8000cf28 <_ZL6RDoSQ2v+0x7c> + 8000cf04: 0004059b sext.w a1,s0 + 8000cf08: 0077f793 andi a5,a5,7 + 8000cf0c: 00f5d7bb srlw a5,a1,a5 + 8000cf10: 00001737 lui a4,0x1 + 8000cf14: 00b787bb addw a5,a5,a1 + 8000cf18: 80070713 addi a4,a4,-2048 # 800 <_entry_offset+0x800> + 8000cf1c: 00e7f7b3 and a5,a5,a4 + 8000cf20: 0007879b sext.w a5,a5 + 8000cf24: 10079a63 bnez a5,8000d038 <_ZL6RDoSQ2v+0x18c> + 8000cf28: 00077797 auipc a5,0x77 + 8000cf2c: f7c7a783 lw a5,-132(a5) # 80083ea4 + 8000cf30: 00077517 auipc a0,0x77 + 8000cf34: f5850513 addi a0,a0,-168 # 80083e88 <_ZL9ChannelBC> + 8000cf38: 10078063 beqz a5,8000d038 <_ZL6RDoSQ2v+0x18c> + 8000cf3c: 0004b717 auipc a4,0x4b + 8000cf40: a3470713 addi a4,a4,-1484 # 80057970 + 8000cf44: 00974783 lbu a5,9(a4) + 8000cf48: 0017f793 andi a5,a5,1 + 8000cf4c: 10079463 bnez a5,8000d054 <_ZL6RDoSQ2v+0x1a8> + 8000cf50: 00b74583 lbu a1,11(a4) + 8000cf54: 001bc517 auipc a0,0x1bc + 8000cf58: da052503 lw a0,-608(a0) # 801c8cf4 + 8000cf5c: 10000793 li a5,256 + 8000cf60: 00f50e63 beq a0,a5,8000cf7c <_ZL6RDoSQ2v+0xd0> + 8000cf64: 6592c0ef jal ra,80039dbc <__muldi3> + 8000cf68: 0005051b sext.w a0,a0 + 8000cf6c: 41f5559b sraiw a1,a0,0x1f + 8000cf70: 0185d59b srliw a1,a1,0x18 + 8000cf74: 00a585bb addw a1,a1,a0 + 8000cf78: 4085d59b sraiw a1,a1,0x8 + 8000cf7c: 00077517 auipc a0,0x77 + 8000cf80: f0c50513 addi a0,a0,-244 # 80083e88 <_ZL9ChannelBC> + 8000cf84: 00452703 lw a4,4(a0) + 8000cf88: 00494683 lbu a3,4(s2) + 8000cf8c: 00030617 auipc a2,0x30 + 8000cf90: 4c460613 addi a2,a2,1220 # 8003d450 <_ZL10RectDuties> + 8000cf94: 02071793 slli a5,a4,0x20 + 8000cf98: 0066d693 srli a3,a3,0x6 + 8000cf9c: 00269693 slli a3,a3,0x2 + 8000cfa0: 0207d793 srli a5,a5,0x20 + 8000cfa4: 40e4873b subw a4,s1,a4 + 8000cfa8: 00d606b3 add a3,a2,a3 + 8000cfac: 00279793 slli a5,a5,0x2 + 8000cfb0: 001bfe97 auipc t4,0x1bf + 8000cfb4: bc8e8e93 addi t4,t4,-1080 # 801cbb78 <_ZL13RectDutyCount> + 8000cfb8: 0014041b addiw s0,s0,1 + 8000cfbc: 00077e17 auipc t3,0x77 + 8000cfc0: b0ce0e13 addi t3,t3,-1268 # 80083ac8 <_ZL7wlcount> + 8000cfc4: 00050897 auipc a7,0x50 + 8000cfc8: a0488893 addi a7,a7,-1532 # 8005c9c8 + 8000cfcc: 0007061b sext.w a2,a4 + 8000cfd0: 0006a303 lw t1,0(a3) + 8000cfd4: 004ea803 lw a6,4(t4) + 8000cfd8: 004e2683 lw a3,4(t3) + 8000cfdc: 0185959b slliw a1,a1,0x18 + 8000cfe0: 011787b3 add a5,a5,a7 + 8000cfe4: 0014141b slliw s0,s0,0x1 + 8000cfe8: 04c05463 blez a2,8000d030 <_ZL6RDoSQ2v+0x184> + 8000cfec: fff7071b addiw a4,a4,-1 + 8000cff0: 02071713 slli a4,a4,0x20 + 8000cff4: 02075713 srli a4,a4,0x20 + 8000cff8: 00170713 addi a4,a4,1 + 8000cffc: 00271713 slli a4,a4,0x2 + 8000d000: 00e78733 add a4,a5,a4 + 8000d004: fff6869b addiw a3,a3,-1 + 8000d008: 0018089b addiw a7,a6,1 + 8000d00c: 00685863 bge a6,t1,8000d01c <_ZL6RDoSQ2v+0x170> + 8000d010: 0007a603 lw a2,0(a5) + 8000d014: 00b6063b addw a2,a2,a1 + 8000d018: 00c7a023 sw a2,0(a5) + 8000d01c: 00478793 addi a5,a5,4 + 8000d020: 00069663 bnez a3,8000d02c <_ZL6RDoSQ2v+0x180> + 8000d024: 0078f813 andi a6,a7,7 + 8000d028: 00040693 mv a3,s0 + 8000d02c: fce79ce3 bne a5,a4,8000d004 <_ZL6RDoSQ2v+0x158> + 8000d030: 010ea223 sw a6,4(t4) + 8000d034: 00de2223 sw a3,4(t3) + 8000d038: 01813083 ld ra,24(sp) + 8000d03c: 01013403 ld s0,16(sp) + 8000d040: 00952223 sw s1,4(a0) + 8000d044: 00013903 ld s2,0(sp) + 8000d048: 00813483 ld s1,8(sp) + 8000d04c: 02010113 addi sp,sp,32 + 8000d050: 00008067 ret + 8000d054: 00874583 lbu a1,8(a4) + 8000d058: efdff06f j 8000cf54 <_ZL6RDoSQ2v+0xa8> + +000000008000d05c <_Z16FrameSoundUpdatev>: + 8000d05c: fd010113 addi sp,sp,-48 + 8000d060: 02813023 sd s0,32(sp) + 8000d064: 001bf417 auipc s0,0x1bf + 8000d068: b1c40413 addi s0,s0,-1252 # 801cbb80 <_ZL4fcnt> + 8000d06c: 00913c23 sd s1,24(sp) + 8000d070: 00044483 lbu s1,0(s0) + 8000d074: 02113423 sd ra,40(sp) + 8000d078: 01213823 sd s2,16(sp) + 8000d07c: 01313423 sd s3,8(sp) + 8000d080: 18049063 bnez s1,8000d200 <_Z16FrameSoundUpdatev+0x1a4> + 8000d084: 001bf797 auipc a5,0x1bf + 8000d088: ad77c783 lbu a5,-1321(a5) # 801cbb5b + 8000d08c: 0037f793 andi a5,a5,3 + 8000d090: 14078863 beqz a5,8000d1e0 <_Z16FrameSoundUpdatev+0x184> + 8000d094: 0003b797 auipc a5,0x3b + 8000d098: 7f47b783 ld a5,2036(a5) # 80048888 <_ZL5DoSQ1> + 8000d09c: 000780e7 jalr a5 + 8000d0a0: 0003b797 auipc a5,0x3b + 8000d0a4: 7f07b783 ld a5,2032(a5) # 80048890 <_ZL5DoSQ2> + 8000d0a8: 000780e7 jalr a5 + 8000d0ac: 0003b797 auipc a5,0x3b + 8000d0b0: 7ec7b783 ld a5,2028(a5) # 80048898 <_ZL7DoNoise> + 8000d0b4: 000780e7 jalr a5 + 8000d0b8: 0003b797 auipc a5,0x3b + 8000d0bc: 7c07b783 ld a5,1984(a5) # 80048878 <_ZL10DoTriangle> + 8000d0c0: 000780e7 jalr a5 + 8000d0c4: 0004b797 auipc a5,0x4b + 8000d0c8: 8f478793 addi a5,a5,-1804 # 800579b8 + 8000d0cc: 0087c503 lbu a0,8(a5) + 8000d0d0: 00077717 auipc a4,0x77 + 8000d0d4: dd070713 addi a4,a4,-560 # 80083ea0 + 8000d0d8: 0185189b slliw a7,a0,0x18 + 8000d0dc: 4188d89b sraiw a7,a7,0x18 + 8000d0e0: 0008ca63 bltz a7,8000d0f4 <_Z16FrameSoundUpdatev+0x98> + 8000d0e4: 00872683 lw a3,8(a4) + 8000d0e8: 00d05663 blez a3,8000d0f4 <_Z16FrameSoundUpdatev+0x98> + 8000d0ec: fff6869b addiw a3,a3,-1 + 8000d0f0: 00d72423 sw a3,8(a4) + 8000d0f4: 00c7c783 lbu a5,12(a5) + 8000d0f8: 0207f793 andi a5,a5,32 + 8000d0fc: 00079a63 bnez a5,8000d110 <_Z16FrameSoundUpdatev+0xb4> + 8000d100: 00c72783 lw a5,12(a4) + 8000d104: 00f05663 blez a5,8000d110 <_Z16FrameSoundUpdatev+0xb4> + 8000d108: fff7879b addiw a5,a5,-1 + 8000d10c: 00f72623 sw a5,12(a4) + 8000d110: 0004b697 auipc a3,0x4b + 8000d114: 8a868693 addi a3,a3,-1880 # 800579b8 + 8000d118: 001bf797 auipc a5,0x1bf + 8000d11c: a5078793 addi a5,a5,-1456 # 801cbb68 <_ZL10SweepCount> + 8000d120: 001bf617 auipc a2,0x1bf + 8000d124: a5060613 addi a2,a2,-1456 # 801cbb70 <_ZL11SweepReload> + 8000d128: 00077817 auipc a6,0x77 + 8000d12c: d7880813 addi a6,a6,-648 # 80083ea0 + 8000d130: 00000593 li a1,0 + 8000d134: 001bfe17 auipc t3,0x1bf + 8000d138: a6ce0e13 addi t3,t3,-1428 # 801cbba0 <_ZL7sweepon> + 8000d13c: 001bff17 auipc t5,0x1bf + 8000d140: a7cf0f13 addi t5,t5,-1412 # 801cbbb8 + 8000d144: 00700e93 li t4,7 + 8000d148: 7ff00f93 li t6,2047 + 8000d14c: 00100313 li t1,1 + 8000d150: 0006c703 lbu a4,0(a3) + 8000d154: 0005839b sext.w t2,a1 + 8000d158: 02077713 andi a4,a4,32 + 8000d15c: 00071a63 bnez a4,8000d170 <_Z16FrameSoundUpdatev+0x114> + 8000d160: 00082703 lw a4,0(a6) + 8000d164: 00e05663 blez a4,8000d170 <_Z16FrameSoundUpdatev+0x114> + 8000d168: fff7071b addiw a4,a4,-1 + 8000d16c: 00e82023 sw a4,0(a6) + 8000d170: 0007c703 lbu a4,0(a5) + 8000d174: 22071463 bnez a4,8000d39c <_Z16FrameSoundUpdatev+0x340> + 8000d178: 00be0733 add a4,t3,a1 + 8000d17c: 0016c283 lbu t0,1(a3) + 8000d180: 00074483 lbu s1,0(a4) + 8000d184: 0002871b sext.w a4,t0 + 8000d188: 00048663 beqz s1,8000d194 <_Z16FrameSoundUpdatev+0x138> + 8000d18c: 0072f493 andi s1,t0,7 + 8000d190: 24049063 bnez s1,8000d3d0 <_Z16FrameSoundUpdatev+0x374> + 8000d194: 4047571b sraiw a4,a4,0x4 + 8000d198: 00777713 andi a4,a4,7 + 8000d19c: 0017071b addiw a4,a4,1 + 8000d1a0: 00e78023 sb a4,0(a5) + 8000d1a4: 00064703 lbu a4,0(a2) + 8000d1a8: 00070e63 beqz a4,8000d1c4 <_Z16FrameSoundUpdatev+0x168> + 8000d1ac: 0016c703 lbu a4,1(a3) + 8000d1b0: 00060023 sb zero,0(a2) + 8000d1b4: 00475713 srli a4,a4,0x4 + 8000d1b8: 00777713 andi a4,a4,7 + 8000d1bc: 0017071b addiw a4,a4,1 + 8000d1c0: 00e78023 sb a4,0(a5) + 8000d1c4: 00468693 addi a3,a3,4 + 8000d1c8: 00178793 addi a5,a5,1 + 8000d1cc: 00160613 addi a2,a2,1 + 8000d1d0: 00480813 addi a6,a6,4 + 8000d1d4: 08658263 beq a1,t1,8000d258 <_Z16FrameSoundUpdatev+0x1fc> + 8000d1d8: 00100593 li a1,1 + 8000d1dc: f75ff06f j 8000d150 <_Z16FrameSoundUpdatev+0xf4> + 8000d1e0: 001bf717 auipc a4,0x1bf + 8000d1e4: 9c970713 addi a4,a4,-1591 # 801cbba9 <_ZL8SIRQStat> + 8000d1e8: 00074783 lbu a5,0(a4) + 8000d1ec: 20000513 li a0,512 + 8000d1f0: 0407e793 ori a5,a5,64 + 8000d1f4: 00f70023 sb a5,0(a4) + 8000d1f8: b41f30ef jal ra,80000d38 <_Z14X6502_IRQBegini> + 8000d1fc: 00044483 lbu s1,0(s0) + 8000d200: 00300793 li a5,3 + 8000d204: 10f49263 bne s1,a5,8000d308 <_Z16FrameSoundUpdatev+0x2ac> + 8000d208: 001bf797 auipc a5,0x1bf + 8000d20c: 9537c783 lbu a5,-1709(a5) # 801cbb5b + 8000d210: 0027f793 andi a5,a5,2 + 8000d214: 18079e63 bnez a5,8000d3b0 <_Z16FrameSoundUpdatev+0x354> + 8000d218: 0003b797 auipc a5,0x3b + 8000d21c: 6707b783 ld a5,1648(a5) # 80048888 <_ZL5DoSQ1> + 8000d220: 000780e7 jalr a5 + 8000d224: 0003b797 auipc a5,0x3b + 8000d228: 66c7b783 ld a5,1644(a5) # 80048890 <_ZL5DoSQ2> + 8000d22c: 000780e7 jalr a5 + 8000d230: 0003b797 auipc a5,0x3b + 8000d234: 6687b783 ld a5,1640(a5) # 80048898 <_ZL7DoNoise> + 8000d238: 000780e7 jalr a5 + 8000d23c: 0003b797 auipc a5,0x3b + 8000d240: 63c7b783 ld a5,1596(a5) # 80048878 <_ZL10DoTriangle> + 8000d244: 000780e7 jalr a5 + 8000d248: 0004a517 auipc a0,0x4a + 8000d24c: 77854503 lbu a0,1912(a0) # 800579c0 + 8000d250: 0185189b slliw a7,a0,0x18 + 8000d254: 4188d89b sraiw a7,a7,0x18 + 8000d258: 001bf797 auipc a5,0x1bf + 8000d25c: 9447c783 lbu a5,-1724(a5) # 801cbb9c <_ZL7TriMode> + 8000d260: 0e078e63 beqz a5,8000d35c <_Z16FrameSoundUpdatev+0x300> + 8000d264: 07f57513 andi a0,a0,127 + 8000d268: 001bf797 auipc a5,0x1bf + 8000d26c: 8ea78b23 sb a0,-1802(a5) # 801cbb5e + 8000d270: 0008c663 bltz a7,8000d27c <_Z16FrameSoundUpdatev+0x220> + 8000d274: 001bf797 auipc a5,0x1bf + 8000d278: 92078423 sb zero,-1752(a5) # 801cbb9c <_ZL7TriMode> + 8000d27c: 0004a797 auipc a5,0x4a + 8000d280: 6f478793 addi a5,a5,1780 # 80057970 + 8000d284: 0004a617 auipc a2,0x4a + 8000d288: 70460613 addi a2,a2,1796 # 80057988 + 8000d28c: 00f00593 li a1,15 + 8000d290: 0047a703 lw a4,4(a5) + 8000d294: 0e071863 bnez a4,8000d384 <_Z16FrameSoundUpdatev+0x328> + 8000d298: 0027c683 lbu a3,2(a5) + 8000d29c: fff6871b addiw a4,a3,-1 + 8000d2a0: 0ff77713 andi a4,a4,255 + 8000d2a4: 0c069a63 bnez a3,8000d378 <_Z16FrameSoundUpdatev+0x31c> + 8000d2a8: 0007c683 lbu a3,0(a5) + 8000d2ac: 0037c703 lbu a4,3(a5) + 8000d2b0: 0016869b addiw a3,a3,1 + 8000d2b4: 00d78123 sb a3,2(a5) + 8000d2b8: 00071863 bnez a4,8000d2c8 <_Z16FrameSoundUpdatev+0x26c> + 8000d2bc: 0017c683 lbu a3,1(a5) + 8000d2c0: 0026f693 andi a3,a3,2 + 8000d2c4: 00068863 beqz a3,8000d2d4 <_Z16FrameSoundUpdatev+0x278> + 8000d2c8: fff7071b addiw a4,a4,-1 + 8000d2cc: 00f77713 andi a4,a4,15 + 8000d2d0: 00e781a3 sb a4,3(a5) + 8000d2d4: 00878793 addi a5,a5,8 + 8000d2d8: faf61ce3 bne a2,a5,8000d290 <_Z16FrameSoundUpdatev+0x234> + 8000d2dc: 00044783 lbu a5,0(s0) + 8000d2e0: 02813083 ld ra,40(sp) + 8000d2e4: 01813483 ld s1,24(sp) + 8000d2e8: 0017879b addiw a5,a5,1 + 8000d2ec: 0037f793 andi a5,a5,3 + 8000d2f0: 00f40023 sb a5,0(s0) + 8000d2f4: 02013403 ld s0,32(sp) + 8000d2f8: 01013903 ld s2,16(sp) + 8000d2fc: 00813983 ld s3,8(sp) + 8000d300: 03010113 addi sp,sp,48 + 8000d304: 00008067 ret + 8000d308: 0003b797 auipc a5,0x3b + 8000d30c: 5807b783 ld a5,1408(a5) # 80048888 <_ZL5DoSQ1> + 8000d310: 000780e7 jalr a5 + 8000d314: 0003b797 auipc a5,0x3b + 8000d318: 57c7b783 ld a5,1404(a5) # 80048890 <_ZL5DoSQ2> + 8000d31c: 000780e7 jalr a5 + 8000d320: 0003b797 auipc a5,0x3b + 8000d324: 5787b783 ld a5,1400(a5) # 80048898 <_ZL7DoNoise> + 8000d328: 000780e7 jalr a5 + 8000d32c: 0003b797 auipc a5,0x3b + 8000d330: 54c7b783 ld a5,1356(a5) # 80048878 <_ZL10DoTriangle> + 8000d334: 0014f493 andi s1,s1,1 + 8000d338: 000780e7 jalr a5 + 8000d33c: d80484e3 beqz s1,8000d0c4 <_Z16FrameSoundUpdatev+0x68> + 8000d340: 0004a517 auipc a0,0x4a + 8000d344: 68054503 lbu a0,1664(a0) # 800579c0 + 8000d348: 0185189b slliw a7,a0,0x18 + 8000d34c: 001bf797 auipc a5,0x1bf + 8000d350: 8507c783 lbu a5,-1968(a5) # 801cbb9c <_ZL7TriMode> + 8000d354: 4188d89b sraiw a7,a7,0x18 + 8000d358: f00796e3 bnez a5,8000d264 <_Z16FrameSoundUpdatev+0x208> + 8000d35c: 001bf717 auipc a4,0x1bf + 8000d360: 80270713 addi a4,a4,-2046 # 801cbb5e + 8000d364: 00074783 lbu a5,0(a4) + 8000d368: f00784e3 beqz a5,8000d270 <_Z16FrameSoundUpdatev+0x214> + 8000d36c: fff7879b addiw a5,a5,-1 + 8000d370: 00f70023 sb a5,0(a4) + 8000d374: efdff06f j 8000d270 <_Z16FrameSoundUpdatev+0x214> + 8000d378: 00e78123 sb a4,2(a5) + 8000d37c: f4071ce3 bnez a4,8000d2d4 <_Z16FrameSoundUpdatev+0x278> + 8000d380: f29ff06f j 8000d2a8 <_Z16FrameSoundUpdatev+0x24c> + 8000d384: 0007c703 lbu a4,0(a5) + 8000d388: 00b781a3 sb a1,3(a5) + 8000d38c: 0007a223 sw zero,4(a5) + 8000d390: 0017071b addiw a4,a4,1 + 8000d394: 00e78123 sb a4,2(a5) + 8000d398: f3dff06f j 8000d2d4 <_Z16FrameSoundUpdatev+0x278> + 8000d39c: fff7071b addiw a4,a4,-1 + 8000d3a0: 0ff77713 andi a4,a4,255 + 8000d3a4: 00e78023 sb a4,0(a5) + 8000d3a8: de071ee3 bnez a4,8000d1a4 <_Z16FrameSoundUpdatev+0x148> + 8000d3ac: dcdff06f j 8000d178 <_Z16FrameSoundUpdatev+0x11c> + 8000d3b0: 001be717 auipc a4,0x1be + 8000d3b4: 7d470713 addi a4,a4,2004 # 801cbb84 <_ZL5fhcnt> + 8000d3b8: 00072783 lw a5,0(a4) + 8000d3bc: 001be697 auipc a3,0x1be + 8000d3c0: 7cc6a683 lw a3,1996(a3) # 801cbb88 <_ZL5fhinc> + 8000d3c4: 00d787bb addw a5,a5,a3 + 8000d3c8: 00f72023 sw a5,0(a4) + 8000d3cc: e4dff06f j 8000d218 <_Z16FrameSoundUpdatev+0x1bc> + 8000d3d0: 00259913 slli s2,a1,0x2 + 8000d3d4: 012f0933 add s2,t5,s2 + 8000d3d8: 00092983 lw s3,0(s2) + 8000d3dc: db3edce3 bge t4,s3,8000d194 <_Z16FrameSoundUpdatev+0x138> + 8000d3e0: 0082f293 andi t0,t0,8 + 8000d3e4: 4099d4bb sraw s1,s3,s1 + 8000d3e8: 00029a63 bnez t0,8000d3fc <_Z16FrameSoundUpdatev+0x3a0> + 8000d3ec: 009982bb addw t0,s3,s1 + 8000d3f0: da5fc2e3 blt t6,t0,8000d194 <_Z16FrameSoundUpdatev+0x138> + 8000d3f4: 00592023 sw t0,0(s2) + 8000d3f8: d9dff06f j 8000d194 <_Z16FrameSoundUpdatev+0x138> + 8000d3fc: 0013c393 xori t2,t2,1 + 8000d400: 009383bb addw t2,t2,s1 + 8000d404: 407983bb subw t2,s3,t2 + 8000d408: 00792023 sw t2,0(s2) + 8000d40c: d89ff06f j 8000d194 <_Z16FrameSoundUpdatev+0x138> + +000000008000d410 <_Z11Write_IRQFMjh>: + 8000d410: ff010113 addi sp,sp,-16 + 8000d414: 00813023 sd s0,0(sp) + 8000d418: 001be797 auipc a5,0x1be + 8000d41c: 76078423 sb zero,1896(a5) # 801cbb80 <_ZL4fcnt> + 8000d420: 0065d413 srli s0,a1,0x6 + 8000d424: 00113423 sd ra,8(sp) + 8000d428: 00247793 andi a5,s0,2 + 8000d42c: 04079a63 bnez a5,8000d480 <_Z11Write_IRQFMjh+0x70> + 8000d430: 00100793 li a5,1 + 8000d434: 001be717 auipc a4,0x1be + 8000d438: 74f70623 sb a5,1868(a4) # 801cbb80 <_ZL4fcnt> + 8000d43c: 20000513 li a0,512 + 8000d440: 001be797 auipc a5,0x1be + 8000d444: 7487a783 lw a5,1864(a5) # 801cbb88 <_ZL5fhinc> + 8000d448: 001be717 auipc a4,0x1be + 8000d44c: 72f72e23 sw a5,1852(a4) # 801cbb84 <_ZL5fhcnt> + 8000d450: 901f30ef jal ra,80000d50 <_Z12X6502_IRQEndi> + 8000d454: 001be717 auipc a4,0x1be + 8000d458: 75570713 addi a4,a4,1877 # 801cbba9 <_ZL8SIRQStat> + 8000d45c: 00074783 lbu a5,0(a4) + 8000d460: 001be697 auipc a3,0x1be + 8000d464: 6e868da3 sb s0,1787(a3) # 801cbb5b + 8000d468: fbf7f793 andi a5,a5,-65 + 8000d46c: 00f70023 sb a5,0(a4) + 8000d470: 00813083 ld ra,8(sp) + 8000d474: 00013403 ld s0,0(sp) + 8000d478: 01010113 addi sp,sp,16 + 8000d47c: 00008067 ret + 8000d480: bddff0ef jal ra,8000d05c <_Z16FrameSoundUpdatev> + 8000d484: fadff06f j 8000d430 <_Z11Write_IRQFMjh+0x20> + +000000008000d488 <_Z17FCEU_SoundCPUHooki>: + 8000d488: 00008067 ret + +000000008000d48c <_Z14SetNESSoundMapv>: + 8000d48c: ff010113 addi sp,sp,-16 + 8000d490: 00813023 sd s0,0(sp) + 8000d494: 00004437 lui s0,0x4 + 8000d498: 00f40593 addi a1,s0,15 # 400f <_entry_offset+0x400f> + 8000d49c: fffff617 auipc a2,0xfffff + 8000d4a0: ec460613 addi a2,a2,-316 # 8000c360 <_ZL9Write_PSGjh> + 8000d4a4: 00004537 lui a0,0x4 + 8000d4a8: 00113423 sd ra,8(sp) + 8000d4ac: 67c260ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8000d4b0: 01340593 addi a1,s0,19 + 8000d4b4: 01040513 addi a0,s0,16 + 8000d4b8: fffff617 auipc a2,0xfffff + 8000d4bc: 2a460613 addi a2,a2,676 # 8000c75c <_ZL13Write_DMCRegsjh> + 8000d4c0: 668260ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8000d4c4: 01740593 addi a1,s0,23 + 8000d4c8: 00058513 mv a0,a1 + 8000d4cc: 00000617 auipc a2,0x0 + 8000d4d0: f4460613 addi a2,a2,-188 # 8000d410 <_Z11Write_IRQFMjh> + 8000d4d4: 654260ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8000d4d8: 01540593 addi a1,s0,21 + 8000d4dc: 00058513 mv a0,a1 + 8000d4e0: fffff617 auipc a2,0xfffff + 8000d4e4: d7860613 addi a2,a2,-648 # 8000c258 <_ZL11StatusWritejh> + 8000d4e8: 640260ef jal ra,80033b28 <_Z15SetWriteHandleriiPFvjhE> + 8000d4ec: 01540593 addi a1,s0,21 + 8000d4f0: 00013403 ld s0,0(sp) + 8000d4f4: 00813083 ld ra,8(sp) + 8000d4f8: fffff617 auipc a2,0xfffff + 8000d4fc: cd060613 addi a2,a2,-816 # 8000c1c8 <_ZL10StatusReadj> + 8000d500: 00058513 mv a0,a1 + 8000d504: 01010113 addi sp,sp,16 + 8000d508: 5142606f j 80033a1c <_Z14SetReadHandleriiPFhjE> + +000000008000d50c <_Z17FlushEmulateSoundv>: + 8000d50c: 00000513 li a0,0 + 8000d510: 00008067 ret + +000000008000d514 <_Z13FCEUSND_Resetv>: + 8000d514: 001be797 auipc a5,0x1be + 8000d518: 640783a3 sb zero,1607(a5) # 801cbb5b + 8000d51c: fe010113 addi sp,sp,-32 + 8000d520: 001be797 auipc a5,0x1be + 8000d524: 6687a783 lw a5,1640(a5) # 801cbb88 <_ZL5fhinc> + 8000d528: 001be717 auipc a4,0x1be + 8000d52c: 64f72e23 sw a5,1628(a4) # 801cbb84 <_ZL5fhcnt> + 8000d530: 00813823 sd s0,16(sp) + 8000d534: 001be797 auipc a5,0x1be + 8000d538: 64078623 sb zero,1612(a5) # 801cbb80 <_ZL4fcnt> + 8000d53c: 00001437 lui s0,0x1 + 8000d540: 00913423 sd s1,8(sp) + 8000d544: 8004041b addiw s0,s0,-2048 + 8000d548: 00076497 auipc s1,0x76 + 8000d54c: 58048493 addi s1,s1,1408 # 80083ac8 <_ZL7wlcount> + 8000d550: 00100793 li a5,1 + 8000d554: 00113c23 sd ra,24(sp) + 8000d558: 001be717 auipc a4,0x1be + 8000d55c: 62f71523 sh a5,1578(a4) # 801cbb82 <_ZL4nreg> + 8000d560: 0084a023 sw s0,0(s1) + 8000d564: 001be597 auipc a1,0x1be + 8000d568: 6605a583 lw a1,1632(a1) # 801cbbc4 + 8000d56c: 10059e63 bnez a1,8000d688 <_Z13FCEUSND_Resetv+0x174> + 8000d570: 00100793 li a5,1 + 8000d574: 02079793 slli a5,a5,0x20 + 8000d578: 00178793 addi a5,a5,1 + 8000d57c: 001be717 auipc a4,0x1be + 8000d580: 62070223 sb zero,1572(a4) # 801cbba0 <_ZL7sweepon> + 8000d584: 001be717 auipc a4,0x1be + 8000d588: 62072a23 sw zero,1588(a4) # 801cbbb8 + 8000d58c: 0084a223 sw s0,4(s1) + 8000d590: 001be717 auipc a4,0x1be + 8000d594: 60f73023 sd a5,1536(a4) # 801cbb90 <_ZL5sqacc> + 8000d598: 00100713 li a4,1 + 8000d59c: 02b71793 slli a5,a4,0x2b + 8000d5a0: 00178793 addi a5,a5,1 + 8000d5a4: 00f4b423 sd a5,8(s1) + 8000d5a8: 001be797 auipc a5,0x1be + 8000d5ac: 5a0785a3 sb zero,1451(a5) # 801cbb53 + 8000d5b0: 001be797 auipc a5,0x1be + 8000d5b4: 5a078a23 sb zero,1460(a5) # 801cbb64 <_ZL10DMCHaveDMA> + 8000d5b8: 001be797 auipc a5,0x1be + 8000d5bc: 5e0788a3 sb zero,1521(a5) # 801cbba9 <_ZL8SIRQStat> + 8000d5c0: 001be797 auipc a5,0x1be + 8000d5c4: 58078ea3 sb zero,1437(a5) # 801cbb5d + 8000d5c8: 001be797 auipc a5,0x1be + 8000d5cc: 58078b23 sb zero,1430(a5) # 801cbb5e + 8000d5d0: 001be797 auipc a5,0x1be + 8000d5d4: 5c078623 sb zero,1484(a5) # 801cbb9c <_ZL7TriMode> + 8000d5d8: 001be797 auipc a5,0x1be + 8000d5dc: 5c07a623 sw zero,1484(a5) # 801cbba4 <_ZL7tristep> + 8000d5e0: 001be797 auipc a5,0x1be + 8000d5e4: 56078d23 sb zero,1402(a5) # 801cbb5a + 8000d5e8: 00077797 auipc a5,0x77 + 8000d5ec: 8a07bc23 sd zero,-1864(a5) # 80083ea0 + 8000d5f0: 00077797 auipc a5,0x77 + 8000d5f4: 8a07bc23 sd zero,-1864(a5) # 80083ea8 + 8000d5f8: 001be797 auipc a5,0x1be + 8000d5fc: 54078c23 sb zero,1368(a5) # 801cbb50 + 8000d600: 001be797 auipc a5,0x1be + 8000d604: 54078c23 sb zero,1368(a5) # 801cbb58 + 8000d608: 001be797 auipc a5,0x1be + 8000d60c: 54078523 sb zero,1354(a5) # 801cbb52 + 8000d610: 001be797 auipc a5,0x1be + 8000d614: 5407a823 sw zero,1360(a5) # 801cbb60 <_ZL10DMCAddress> + 8000d618: 001be797 auipc a5,0x1be + 8000d61c: 5807a023 sw zero,1408(a5) # 801cbb98 <_ZL7DMCSize> + 8000d620: 001be797 auipc a5,0x1be + 8000d624: 58078423 sb zero,1416(a5) # 801cbba8 <_ZL8DMCShift> + 8000d628: 001be697 auipc a3,0x1be + 8000d62c: 56068ca3 sb zero,1401(a3) # 801cbba1 <_ZL7sweepon+0x1> + 8000d630: 001be697 auipc a3,0x1be + 8000d634: 5806a623 sw zero,1420(a3) # 801cbbbc + 8000d638: 001be797 auipc a5,0x1be + 8000d63c: 5887a783 lw a5,1416(a5) # 801cbbc0 + 8000d640: 02078263 beqz a5,8000d664 <_Z13FCEUSND_Resetv+0x150> + 8000d644: 001be797 auipc a5,0x1be + 8000d648: 5847a783 lw a5,1412(a5) # 801cbbc8 + 8000d64c: 06079c63 bnez a5,8000d6c4 <_Z13FCEUSND_Resetv+0x1b0> + 8000d650: 01813083 ld ra,24(sp) + 8000d654: 01013403 ld s0,16(sp) + 8000d658: 00813483 ld s1,8(sp) + 8000d65c: 02010113 addi sp,sp,32 + 8000d660: 00008067 ret + 8000d664: 01813083 ld ra,24(sp) + 8000d668: 01013403 ld s0,16(sp) + 8000d66c: 0003b797 auipc a5,0x3b + 8000d670: 20e7a223 sw a4,516(a5) # 80048870 + 8000d674: 001be797 auipc a5,0x1be + 8000d678: 4c078ea3 sb zero,1245(a5) # 801cbb51 + 8000d67c: 00813483 ld s1,8(sp) + 8000d680: 02010113 addi sp,sp,32 + 8000d684: 00008067 ret + 8000d688: 02059593 slli a1,a1,0x20 + 8000d68c: 0205d593 srli a1,a1,0x20 + 8000d690: 10000537 lui a0,0x10000 + 8000d694: 7942c0ef jal ra,80039e28 <__udivdi3> + 8000d698: 0005051b sext.w a0,a0 + 8000d69c: 001be797 auipc a5,0x1be + 8000d6a0: 4f478793 addi a5,a5,1268 # 801cbb90 <_ZL5sqacc> + 8000d6a4: 00a7a023 sw a0,0(a5) + 8000d6a8: 001be717 auipc a4,0x1be + 8000d6ac: 4e070c23 sb zero,1272(a4) # 801cbba0 <_ZL7sweepon> + 8000d6b0: 001be717 auipc a4,0x1be + 8000d6b4: 50072423 sw zero,1288(a4) # 801cbbb8 + 8000d6b8: 0084a223 sw s0,4(s1) + 8000d6bc: 00a7a223 sw a0,4(a5) + 8000d6c0: ed9ff06f j 8000d598 <_Z13FCEUSND_Resetv+0x84> + 8000d6c4: 01013403 ld s0,16(sp) + 8000d6c8: 01813083 ld ra,24(sp) + 8000d6cc: 00813483 ld s1,8(sp) + 8000d6d0: 001be617 auipc a2,0x1be + 8000d6d4: 48164603 lbu a2,1153(a2) # 801cbb51 + 8000d6d8: 0003b597 auipc a1,0x3b + 8000d6dc: 1985a583 lw a1,408(a1) # 80048870 + 8000d6e0: 00030517 auipc a0,0x30 + 8000d6e4: c7850513 addi a0,a0,-904 # 8003d358 <_ZL8CycTable+0x148> + 8000d6e8: 02010113 addi sp,sp,32 + 8000d6ec: 65d2d06f j 8003b548 + +000000008000d6f0 <_Z13FCEUSND_Powerv>: + 8000d6f0: ff010113 addi sp,sp,-16 + 8000d6f4: 00113423 sd ra,8(sp) + 8000d6f8: d95ff0ef jal ra,8000d48c <_Z14SetNESSoundMapv> + 8000d6fc: 01000613 li a2,16 + 8000d700: 00000593 li a1,0 + 8000d704: 0004a517 auipc a0,0x4a + 8000d708: 2b450513 addi a0,a0,692 # 800579b8 + 8000d70c: 31c2e0ef jal ra,8003ba28 + 8000d710: e05ff0ef jal ra,8000d514 <_Z13FCEUSND_Resetv> + 8000d714: 00003637 lui a2,0x3 + 8000d718: 80060613 addi a2,a2,-2048 # 2800 <_entry_offset+0x2800> + 8000d71c: 00000593 li a1,0 + 8000d720: 0004a517 auipc a0,0x4a + 8000d724: 2a850513 addi a0,a0,680 # 800579c8 + 8000d728: 3002e0ef jal ra,8003ba28 + 8000d72c: 00027637 lui a2,0x27 + 8000d730: 10060613 addi a2,a2,256 # 27100 <_entry_offset+0x27100> + 8000d734: 00000593 li a1,0 + 8000d738: 0004f517 auipc a0,0x4f + 8000d73c: 29050513 addi a0,a0,656 # 8005c9c8 + 8000d740: 2e82e0ef jal ra,8003ba28 + 8000d744: 01800613 li a2,24 + 8000d748: 00000593 li a1,0 + 8000d74c: 0004a517 auipc a0,0x4a + 8000d750: 22450513 addi a0,a0,548 # 80057970 + 8000d754: 2d42e0ef jal ra,8003ba28 + 8000d758: 001be797 auipc a5,0x1be + 8000d75c: 3fa7c783 lbu a5,1018(a5) # 801cbb52 + 8000d760: 00076717 auipc a4,0x76 + 8000d764: 72073423 sd zero,1832(a4) # 80083e88 <_ZL9ChannelBC> + 8000d768: 00076717 auipc a4,0x76 + 8000d76c: 72073423 sd zero,1832(a4) # 80083e90 <_ZL9ChannelBC+0x8> + 8000d770: 00076717 auipc a4,0x76 + 8000d774: 72072423 sw zero,1832(a4) # 80083e98 <_ZL9ChannelBC+0x10> + 8000d778: 001be717 auipc a4,0x1be + 8000d77c: 44072c23 sw zero,1112(a4) # 801cbbd0 + 8000d780: 00f7f793 andi a5,a5,15 + 8000d784: 001bf717 auipc a4,0x1bf + 8000d788: edc74703 lbu a4,-292(a4) # 801cc660 + 8000d78c: 00279793 slli a5,a5,0x2 + 8000d790: 02070463 beqz a4,8000d7b8 <_Z13FCEUSND_Powerv+0xc8> + 8000d794: 00030717 auipc a4,0x30 + 8000d798: ccc70713 addi a4,a4,-820 # 8003d460 <_ZL11PALDMCTable> + 8000d79c: 00f707b3 add a5,a4,a5 + 8000d7a0: 0007a783 lw a5,0(a5) + 8000d7a4: 00813083 ld ra,8(sp) + 8000d7a8: 001be717 auipc a4,0x1be + 8000d7ac: 3af72623 sw a5,940(a4) # 801cbb54 + 8000d7b0: 01010113 addi sp,sp,16 + 8000d7b4: 00008067 ret + 8000d7b8: 00030717 auipc a4,0x30 + 8000d7bc: d0870713 addi a4,a4,-760 # 8003d4c0 <_ZL12NTSCDMCTable> + 8000d7c0: 00f707b3 add a5,a4,a5 + 8000d7c4: 0007a783 lw a5,0(a5) + 8000d7c8: 00813083 ld ra,8(sp) + 8000d7cc: 001be717 auipc a4,0x1be + 8000d7d0: 38f72423 sw a5,904(a4) # 801cbb54 + 8000d7d4: 01010113 addi sp,sp,16 + 8000d7d8: 00008067 ret + +000000008000d7dc <_Z17SetSoundVariablesv>: + 8000d7dc: fb010113 addi sp,sp,-80 + 8000d7e0: 03413023 sd s4,32(sp) + 8000d7e4: 001bfa17 auipc s4,0x1bf + 8000d7e8: e7ca0a13 addi s4,s4,-388 # 801cc660 + 8000d7ec: 000a4783 lbu a5,0(s4) + 8000d7f0: 04113423 sd ra,72(sp) + 8000d7f4: 04813023 sd s0,64(sp) + 8000d7f8: 02913c23 sd s1,56(sp) + 8000d7fc: 03213823 sd s2,48(sp) + 8000d800: 03313423 sd s3,40(sp) + 8000d804: 01513c23 sd s5,24(sp) + 8000d808: 01613823 sd s6,16(sp) + 8000d80c: 01713423 sd s7,8(sp) + 8000d810: 01813023 sd s8,0(sp) + 8000d814: 18079a63 bnez a5,8000d9a8 <_Z17SetSoundVariablesv+0x1cc> + 8000d818: 001bba97 auipc s5,0x1bb + 8000d81c: 4c8a8a93 addi s5,s5,1224 # 801c8ce0 + 8000d820: 000577b7 lui a5,0x57 + 8000d824: 03caab03 lw s6,60(s5) + 8000d828: 64878793 addi a5,a5,1608 # 57648 <_entry_offset+0x57648> + 8000d82c: 001be717 auipc a4,0x1be + 8000d830: 34f72e23 sw a5,860(a4) # 801cbb88 <_ZL5fhinc> + 8000d834: 180b0a63 beqz s6,8000d9c8 <_Z17SetSoundVariablesv+0x1ec> + 8000d838: 0017e437 lui s0,0x17e + 8000d83c: 14840413 addi s0,s0,328 # 17e148 <_entry_offset+0x17e148> + 8000d840: 000024b7 lui s1,0x2 + 8000d844: 02fc3bb7 lui s7,0x2fc3 + 8000d848: 040aa983 lw s3,64(s5) + 8000d84c: 00076797 auipc a5,0x76 + 8000d850: 2807a623 sw zero,652(a5) # 80083ad8 <_ZL8wlookup1> + 8000d854: 00076917 auipc s2,0x76 + 8000d858: 28890913 addi s2,s2,648 # 80083adc <_ZL8wlookup1+0x4> + 8000d85c: 02448493 addi s1,s1,36 # 2024 <_entry_offset+0x2024> + 8000d860: 00040c13 mv s8,s0 + 8000d864: 900b8b93 addi s7,s7,-1792 # 2fc2900 <_entry_offset+0x2fc2900> + 8000d868: 0180006f j 8000d880 <_Z17SetSoundVariablesv+0xa4> + 8000d86c: 00a92023 sw a0,0(s2) + 8000d870: 008c043b addw s0,s8,s0 + 8000d874: 0644849b addiw s1,s1,100 + 8000d878: 00490913 addi s2,s2,4 + 8000d87c: 03740863 beq s0,s7,8000d8ac <_Z17SetSoundVariablesv+0xd0> + 8000d880: 00048593 mv a1,s1 + 8000d884: 00040513 mv a0,s0 + 8000d888: 5982c0ef jal ra,80039e20 <__divdi3> + 8000d88c: 0005051b sext.w a0,a0 + 8000d890: 0045579b srliw a5,a0,0x4 + 8000d894: fc099ce3 bnez s3,8000d86c <_Z17SetSoundVariablesv+0x90> + 8000d898: 00f92023 sw a5,0(s2) + 8000d89c: 008c043b addw s0,s8,s0 + 8000d8a0: 0644849b addiw s1,s1,100 + 8000d8a4: 00490913 addi s2,s2,4 + 8000d8a8: fd741ce3 bne s0,s7,8000d880 <_Z17SetSoundVariablesv+0xa4> + 8000d8ac: 0028f437 lui s0,0x28f + 8000d8b0: ae140413 addi s0,s0,-1311 # 28eae1 <_entry_offset+0x28eae1> + 8000d8b4: 000064b7 lui s1,0x6 + 8000d8b8: 20724bb7 lui s7,0x20724 + 8000d8bc: 00076797 auipc a5,0x76 + 8000d8c0: 2807ae23 sw zero,668(a5) # 80083b58 <_ZL8wlookup2> + 8000d8c4: 00076917 auipc s2,0x76 + 8000d8c8: 29890913 addi s2,s2,664 # 80083b5c <_ZL8wlookup2+0x4> + 8000d8cc: f6d48493 addi s1,s1,-147 # 5f6d <_entry_offset+0x5f6d> + 8000d8d0: 00040c13 mv s8,s0 + 8000d8d4: 06bb8b93 addi s7,s7,107 # 2072406b <_entry_offset+0x2072406b> + 8000d8d8: 0180006f j 8000d8f0 <_Z17SetSoundVariablesv+0x114> + 8000d8dc: 00a92023 sw a0,0(s2) + 8000d8e0: 008c043b addw s0,s8,s0 + 8000d8e4: 0644849b addiw s1,s1,100 + 8000d8e8: 00490913 addi s2,s2,4 + 8000d8ec: 03740863 beq s0,s7,8000d91c <_Z17SetSoundVariablesv+0x140> + 8000d8f0: 00048593 mv a1,s1 + 8000d8f4: 00040513 mv a0,s0 + 8000d8f8: 5282c0ef jal ra,80039e20 <__divdi3> + 8000d8fc: 0005051b sext.w a0,a0 + 8000d900: 0045579b srliw a5,a0,0x4 + 8000d904: fc099ce3 bnez s3,8000d8dc <_Z17SetSoundVariablesv+0x100> + 8000d908: 00f92023 sw a5,0(s2) + 8000d90c: 008c043b addw s0,s8,s0 + 8000d910: 0644849b addiw s1,s1,100 + 8000d914: 00490913 addi s2,s2,4 + 8000d918: fd741ce3 bne s0,s7,8000d8f0 <_Z17SetSoundVariablesv+0x114> + 8000d91c: 11305663 blez s3,8000da28 <_Z17SetSoundVariablesv+0x24c> + 8000d920: ffffe797 auipc a5,0xffffe + 8000d924: 5dc78793 addi a5,a5,1500 # 8000befc <_ZL8RDoNoisev> + 8000d928: 0003b717 auipc a4,0x3b + 8000d92c: f6f73823 sd a5,-144(a4) # 80048898 <_ZL7DoNoise> + 8000d930: ffffe797 auipc a5,0xffffe + 8000d934: e3078793 addi a5,a5,-464 # 8000b760 <_ZL11RDoTrianglev> + 8000d938: 0003b717 auipc a4,0x3b + 8000d93c: f4f73023 sd a5,-192(a4) # 80048878 <_ZL10DoTriangle> + 8000d940: ffffe797 auipc a5,0xffffe + 8000d944: d6c78793 addi a5,a5,-660 # 8000b6ac <_Z6RDoPCMv> + 8000d948: 0003b717 auipc a4,0x3b + 8000d94c: f2f73c23 sd a5,-200(a4) # 80048880 <_ZL5DoPCM> + 8000d950: fffff797 auipc a5,0xfffff + 8000d954: 3ac78793 addi a5,a5,940 # 8000ccfc <_ZL6RDoSQ1v> + 8000d958: 0003b717 auipc a4,0x3b + 8000d95c: f2f73823 sd a5,-208(a4) # 80048888 <_ZL5DoSQ1> + 8000d960: fffff797 auipc a5,0xfffff + 8000d964: 54c78793 addi a5,a5,1356 # 8000ceac <_ZL6RDoSQ2v> + 8000d968: 0003b717 auipc a4,0x3b + 8000d96c: f2f73423 sd a5,-216(a4) # 80048890 <_ZL5DoSQ2> + 8000d970: 000b0513 mv a0,s6 + 8000d974: 308010ef jal ra,8000ec7c <_Z11MakeFiltersi> + 8000d978: 0004a797 auipc a5,0x4a + 8000d97c: 0307b783 ld a5,48(a5) # 800579a8 + 8000d980: 00078463 beqz a5,8000d988 <_Z17SetSoundVariablesv+0x1ac> + 8000d984: 000780e7 jalr a5 + 8000d988: 000a4783 lbu a5,0(s4) + 8000d98c: 0c079c63 bnez a5,8000da64 <_Z17SetSoundVariablesv+0x288> + 8000d990: 001be797 auipc a5,0x1be + 8000d994: 2887a783 lw a5,648(a5) # 801cbc18 + 8000d998: 18078463 beqz a5,8000db20 <_Z17SetSoundVariablesv+0x344> + 8000d99c: d87c4537 lui a0,0xd87c4 + 8000d9a0: bbc50513 addi a0,a0,-1092 # ffffffffd87c3bbc <_end+0xffffffff585eebbc> + 8000d9a4: 0c80006f j 8000da6c <_Z17SetSoundVariablesv+0x290> + 8000d9a8: 001bba97 auipc s5,0x1bb + 8000d9ac: 338a8a93 addi s5,s5,824 # 801c8ce0 + 8000d9b0: 000617b7 lui a5,0x61 + 8000d9b4: 03caab03 lw s6,60(s5) + 8000d9b8: 6b078793 addi a5,a5,1712 # 616b0 <_entry_offset+0x616b0> + 8000d9bc: 001be717 auipc a4,0x1be + 8000d9c0: 1cf72623 sw a5,460(a4) # 801cbb88 <_ZL5fhinc> + 8000d9c4: e60b1ae3 bnez s6,8000d838 <_Z17SetSoundVariablesv+0x5c> + 8000d9c8: ffffe797 auipc a5,0xffffe + 8000d9cc: ce078793 addi a5,a5,-800 # 8000b6a8 <_ZL9Dummyfuncv> + 8000d9d0: 0003b717 auipc a4,0x3b + 8000d9d4: ecf73023 sd a5,-320(a4) # 80048890 <_ZL5DoSQ2> + 8000d9d8: 0003b717 auipc a4,0x3b + 8000d9dc: eaf73823 sd a5,-336(a4) # 80048888 <_ZL5DoSQ1> + 8000d9e0: 0003b717 auipc a4,0x3b + 8000d9e4: eaf73023 sd a5,-352(a4) # 80048880 <_ZL5DoPCM> + 8000d9e8: 0003b717 auipc a4,0x3b + 8000d9ec: e8f73823 sd a5,-368(a4) # 80048878 <_ZL10DoTriangle> + 8000d9f0: 0003b717 auipc a4,0x3b + 8000d9f4: eaf73423 sd a5,-344(a4) # 80048898 <_ZL7DoNoise> + 8000d9f8: 04813083 ld ra,72(sp) + 8000d9fc: 04013403 ld s0,64(sp) + 8000da00: 03813483 ld s1,56(sp) + 8000da04: 03013903 ld s2,48(sp) + 8000da08: 02813983 ld s3,40(sp) + 8000da0c: 02013a03 ld s4,32(sp) + 8000da10: 01813a83 ld s5,24(sp) + 8000da14: 01013b03 ld s6,16(sp) + 8000da18: 00813b83 ld s7,8(sp) + 8000da1c: 00013c03 ld s8,0(sp) + 8000da20: 05010113 addi sp,sp,80 + 8000da24: 00008067 ret + 8000da28: fffff717 auipc a4,0xfffff + 8000da2c: e9870713 addi a4,a4,-360 # 8000c8c0 <_ZL7RDoSQLQv> + 8000da30: ffffe797 auipc a5,0xffffe + 8000da34: f6878793 addi a5,a5,-152 # 8000b998 <_ZL21RDoTriangleNoisePCMLQv> + 8000da38: 0003b697 auipc a3,0x3b + 8000da3c: e4e6b823 sd a4,-432(a3) # 80048888 <_ZL5DoSQ1> + 8000da40: 0003b697 auipc a3,0x3b + 8000da44: e4e6b823 sd a4,-432(a3) # 80048890 <_ZL5DoSQ2> + 8000da48: 0003b717 auipc a4,0x3b + 8000da4c: e2f73823 sd a5,-464(a4) # 80048878 <_ZL10DoTriangle> + 8000da50: 0003b717 auipc a4,0x3b + 8000da54: e4f73423 sd a5,-440(a4) # 80048898 <_ZL7DoNoise> + 8000da58: 0003b717 auipc a4,0x3b + 8000da5c: e2f73423 sd a5,-472(a4) # 80048880 <_ZL5DoPCM> + 8000da60: f11ff06f j 8000d970 <_Z17SetSoundVariablesv+0x194> + 8000da64: caf48537 lui a0,0xcaf48 + 8000da68: 90050513 addi a0,a0,-1792 # ffffffffcaf47900 <_end+0xffffffff4ad72900> + 8000da6c: 03caa583 lw a1,60(s5) + 8000da70: 02051513 slli a0,a0,0x20 + 8000da74: 02055513 srli a0,a0,0x20 + 8000da78: 0025d59b srliw a1,a1,0x2 + 8000da7c: 3ac2c0ef jal ra,80039e28 <__udivdi3> + 8000da80: 00050793 mv a5,a0 + 8000da84: 00800613 li a2,8 + 8000da88: 00000593 li a1,0 + 8000da8c: 001be417 auipc s0,0x1be + 8000da90: 13840413 addi s0,s0,312 # 801cbbc4 + 8000da94: 001be517 auipc a0,0x1be + 8000da98: 0fc50513 addi a0,a0,252 # 801cbb90 <_ZL5sqacc> + 8000da9c: 00f42023 sw a5,0(s0) + 8000daa0: 7892d0ef jal ra,8003ba28 + 8000daa4: 01400613 li a2,20 + 8000daa8: 00000593 li a1,0 + 8000daac: 00076517 auipc a0,0x76 + 8000dab0: 3dc50513 addi a0,a0,988 # 80083e88 <_ZL9ChannelBC> + 8000dab4: 7752d0ef jal ra,8003ba28 + 8000dab8: 000a4703 lbu a4,0(s4) + 8000dabc: 001be797 auipc a5,0x1be + 8000dac0: 0967c783 lbu a5,150(a5) # 801cbb52 + 8000dac4: 00f7f793 andi a5,a5,15 + 8000dac8: 00279793 slli a5,a5,0x2 + 8000dacc: 02070c63 beqz a4,8000db04 <_Z17SetSoundVariablesv+0x328> + 8000dad0: 00030717 auipc a4,0x30 + 8000dad4: 99070713 addi a4,a4,-1648 # 8003d460 <_ZL11PALDMCTable> + 8000dad8: 00f707b3 add a5,a4,a5 + 8000dadc: 0007a783 lw a5,0(a5) + 8000dae0: 001be717 auipc a4,0x1be + 8000dae4: 06f72a23 sw a5,116(a4) # 801cbb54 + 8000dae8: 00042703 lw a4,0(s0) + 8000daec: 01f7579b srliw a5,a4,0x1f + 8000daf0: 00e787bb addw a5,a5,a4 + 8000daf4: 4017d79b sraiw a5,a5,0x1 + 8000daf8: 001be717 auipc a4,0x1be + 8000dafc: 0cf72a23 sw a5,212(a4) # 801cbbcc + 8000db00: ef9ff06f j 8000d9f8 <_Z17SetSoundVariablesv+0x21c> + 8000db04: 00030717 auipc a4,0x30 + 8000db08: 9bc70713 addi a4,a4,-1604 # 8003d4c0 <_ZL12NTSCDMCTable> + 8000db0c: 00f707b3 add a5,a4,a5 + 8000db10: 0007a783 lw a5,0(a5) + 8000db14: 001be717 auipc a4,0x1be + 8000db18: 04f72023 sw a5,64(a4) # 801cbb54 + 8000db1c: fcdff06f j 8000dae8 <_Z17SetSoundVariablesv+0x30c> + 8000db20: da7a6537 lui a0,0xda7a6 + 8000db24: 5d150513 addi a0,a0,1489 # ffffffffda7a65d1 <_end+0xffffffff5a5d15d1> + 8000db28: f45ff06f j 8000da6c <_Z17SetSoundVariablesv+0x290> + +000000008000db2c <_Z14InitBlitToHighijjjiii>: + 8000db2c: fe010113 addi sp,sp,-32 + 8000db30: 00113c23 sd ra,24(sp) + 8000db34: 00813823 sd s0,16(sp) + 8000db38: 00913423 sd s1,8(sp) + 8000db3c: 01213023 sd s2,0(sp) + 8000db40: 00400713 li a4,4 + 8000db44: 08e51063 bne a0,a4,8000dbc4 <_Z14InitBlitToHighijjjiii+0x98> + 8000db48: 00050793 mv a5,a0 + 8000db4c: 00001537 lui a0,0x1 + 8000db50: c0050513 addi a0,a0,-1024 # c00 <_entry_offset+0xc00> + 8000db54: 001be717 auipc a4,0x1be + 8000db58: 08f72623 sw a5,140(a4) # 801cbbe0 <_ZL3Bpp> + 8000db5c: 00058913 mv s2,a1 + 8000db60: 00060493 mv s1,a2 + 8000db64: 00068413 mv s0,a3 + 8000db68: 1dd040ef jal ra,80012544 <_Z12FCEU_dmallocj> + 8000db6c: 001be797 auipc a5,0x1be + 8000db70: 06a7b623 sd a0,108(a5) # 801cbbd8 <_ZL16palettetranslate> + 8000db74: 02050a63 beqz a0,8000dba8 <_Z14InitBlitToHighijjjiii+0x7c> + 8000db78: 00076797 auipc a5,0x76 + 8000db7c: 33878793 addi a5,a5,824 # 80083eb0 <_ZL3CBM> + 8000db80: 01813083 ld ra,24(sp) + 8000db84: 0087a423 sw s0,8(a5) + 8000db88: 01013403 ld s0,16(sp) + 8000db8c: 0127a023 sw s2,0(a5) + 8000db90: 0097a223 sw s1,4(a5) + 8000db94: 00013903 ld s2,0(sp) + 8000db98: 00813483 ld s1,8(sp) + 8000db9c: 00100513 li a0,1 + 8000dba0: 02010113 addi sp,sp,32 + 8000dba4: 00008067 ret + 8000dba8: 01813083 ld ra,24(sp) + 8000dbac: 01013403 ld s0,16(sp) + 8000dbb0: 00813483 ld s1,8(sp) + 8000dbb4: 00013903 ld s2,0(sp) + 8000dbb8: 00000513 li a0,0 + 8000dbbc: 02010113 addi sp,sp,32 + 8000dbc0: 00008067 ret + 8000dbc4: 03800613 li a2,56 + 8000dbc8: 00030597 auipc a1,0x30 + 8000dbcc: 93858593 addi a1,a1,-1736 # 8003d500 <_ZL12NTSCDMCTable+0x40> + 8000dbd0: 0002f517 auipc a0,0x2f + 8000dbd4: 14050513 addi a0,a0,320 # 8003cd10 <_etext+0x2c> + 8000dbd8: 1712d0ef jal ra,8003b548 + 8000dbdc: 00100513 li a0,1 + 8000dbe0: 1942c0ef jal ra,80039d74 + +000000008000dbe4 <_Z14KillBlitToHighv>: + 8000dbe4: 001be517 auipc a0,0x1be + 8000dbe8: ff453503 ld a0,-12(a0) # 801cbbd8 <_ZL16palettetranslate> + 8000dbec: 02050263 beqz a0,8000dc10 <_Z14KillBlitToHighv+0x2c> + 8000dbf0: ff010113 addi sp,sp,-16 + 8000dbf4: 00113423 sd ra,8(sp) + 8000dbf8: 7c02c0ef jal ra,8003a3b8 + 8000dbfc: 00813083 ld ra,8(sp) + 8000dc00: 001be797 auipc a5,0x1be + 8000dc04: fc07bc23 sd zero,-40(a5) # 801cbbd8 <_ZL16palettetranslate> + 8000dc08: 01010113 addi sp,sp,16 + 8000dc0c: 00008067 ret + 8000dc10: 00008067 ret + +000000008000dc14 <_Z20SetPaletteBlitToHighPh>: + 8000dc14: fd010113 addi sp,sp,-48 + 8000dc18: fff00793 li a5,-1 + 8000dc1c: 02113423 sd ra,40(sp) + 8000dc20: 00f13823 sd a5,16(sp) + 8000dc24: 00f12c23 sw a5,24(sp) + 8000dc28: 00076e17 auipc t3,0x76 + 8000dc2c: 288e0e13 addi t3,t3,648 # 80083eb0 <_ZL3CBM> + 8000dc30: 00010e93 mv t4,sp + 8000dc34: 01010893 addi a7,sp,16 + 8000dc38: 00076f97 auipc t6,0x76 + 8000dc3c: 284f8f93 addi t6,t6,644 # 80083ebc <_ZL3CBM+0xc> + 8000dc40: 00100813 li a6,1 + 8000dc44: fff00313 li t1,-1 + 8000dc48: 02000593 li a1,32 + 8000dc4c: 00800f13 li t5,8 + 8000dc50: 000e2603 lw a2,0(t3) + 8000dc54: 00000693 li a3,0 + 8000dc58: 00000713 li a4,0 + 8000dc5c: 00e817bb sllw a5,a6,a4 + 8000dc60: 00f677b3 and a5,a2,a5 + 8000dc64: 0007879b sext.w a5,a5 + 8000dc68: 00078863 beqz a5,8000dc78 <_Z20SetPaletteBlitToHighPh+0x64> + 8000dc6c: 0008a783 lw a5,0(a7) + 8000dc70: 0c678a63 beq a5,t1,8000dd44 <_Z20SetPaletteBlitToHighPh+0x130> + 8000dc74: 0016869b addiw a3,a3,1 + 8000dc78: 0017071b addiw a4,a4,1 + 8000dc7c: feb710e3 bne a4,a1,8000dc5c <_Z20SetPaletteBlitToHighPh+0x48> + 8000dc80: 40df06bb subw a3,t5,a3 + 8000dc84: 00dea023 sw a3,0(t4) + 8000dc88: 004e0e13 addi t3,t3,4 + 8000dc8c: 004e8e93 addi t4,t4,4 + 8000dc90: 00488893 addi a7,a7,4 + 8000dc94: fbcf9ee3 bne t6,t3,8000dc50 <_Z20SetPaletteBlitToHighPh+0x3c> + 8000dc98: 001be717 auipc a4,0x1be + 8000dc9c: f4872703 lw a4,-184(a4) # 801cbbe0 <_ZL3Bpp> + 8000dca0: 00400793 li a5,4 + 8000dca4: 0af71463 bne a4,a5,8000dd4c <_Z20SetPaletteBlitToHighPh+0x138> + 8000dca8: 01012803 lw a6,16(sp) + 8000dcac: 01412883 lw a7,20(sp) + 8000dcb0: 01812303 lw t1,24(sp) + 8000dcb4: 001be597 auipc a1,0x1be + 8000dcb8: f245b583 ld a1,-220(a1) # 801cbbd8 <_ZL16palettetranslate> + 8000dcbc: 00058613 mv a2,a1 + 8000dcc0: 40050e13 addi t3,a0,1024 + 8000dcc4: 00054783 lbu a5,0(a0) + 8000dcc8: 00154683 lbu a3,1(a0) + 8000dccc: 00254703 lbu a4,2(a0) + 8000dcd0: 010797bb sllw a5,a5,a6 + 8000dcd4: 011696bb sllw a3,a3,a7 + 8000dcd8: 00d7e7b3 or a5,a5,a3 + 8000dcdc: 0067173b sllw a4,a4,t1 + 8000dce0: 00e7e7b3 or a5,a5,a4 + 8000dce4: 00f62023 sw a5,0(a2) + 8000dce8: 00450513 addi a0,a0,4 + 8000dcec: 00460613 addi a2,a2,4 + 8000dcf0: fcae1ae3 bne t3,a0,8000dcc4 <_Z20SetPaletteBlitToHighPh+0xb0> + 8000dcf4: 001be717 auipc a4,0x1be + 8000dcf8: e1473703 ld a4,-492(a4) # 801cbb08 + 8000dcfc: 02070e63 beqz a4,8000dd38 <_Z20SetPaletteBlitToHighPh+0x124> + 8000dd00: 40058593 addi a1,a1,1024 + 8000dd04: 60070513 addi a0,a4,1536 + 8000dd08: 00074783 lbu a5,0(a4) + 8000dd0c: 00174603 lbu a2,1(a4) + 8000dd10: 00274683 lbu a3,2(a4) + 8000dd14: 010797bb sllw a5,a5,a6 + 8000dd18: 0116163b sllw a2,a2,a7 + 8000dd1c: 00c7e7b3 or a5,a5,a2 + 8000dd20: 006696bb sllw a3,a3,t1 + 8000dd24: 00d7e7b3 or a5,a5,a3 + 8000dd28: 00f5a023 sw a5,0(a1) + 8000dd2c: 00370713 addi a4,a4,3 + 8000dd30: 00458593 addi a1,a1,4 + 8000dd34: fce51ae3 bne a0,a4,8000dd08 <_Z20SetPaletteBlitToHighPh+0xf4> + 8000dd38: 02813083 ld ra,40(sp) + 8000dd3c: 03010113 addi sp,sp,48 + 8000dd40: 00008067 ret + 8000dd44: 00e8a023 sw a4,0(a7) + 8000dd48: f2dff06f j 8000dc74 <_Z20SetPaletteBlitToHighPh+0x60> + 8000dd4c: 05d00613 li a2,93 + 8000dd50: 0002f597 auipc a1,0x2f + 8000dd54: 7b058593 addi a1,a1,1968 # 8003d500 <_ZL12NTSCDMCTable+0x40> + 8000dd58: 0002f517 auipc a0,0x2f + 8000dd5c: fb850513 addi a0,a0,-72 # 8003cd10 <_etext+0x2c> + 8000dd60: 7e82d0ef jal ra,8003b548 + 8000dd64: 00100513 li a0,1 + 8000dd68: 00c2c0ef jal ra,80039d74 + +000000008000dd6c <_Z11Blit8ToHighPhS_iiiii>: + 8000dd6c: ff010113 addi sp,sp,-16 + 8000dd70: 00113423 sd ra,8(sp) + 8000dd74: 001be817 auipc a6,0x1be + 8000dd78: e6c82803 lw a6,-404(a6) # 801cbbe0 <_ZL3Bpp> + 8000dd7c: 00400793 li a5,4 + 8000dd80: 14f81063 bne a6,a5,8000dec0 <_Z11Blit8ToHighPhS_iiiii+0x154> + 8000dd84: 0026179b slliw a5,a2,0x2 + 8000dd88: 00767813 andi a6,a2,7 + 8000dd8c: 40f707bb subw a5,a4,a5 + 8000dd90: 00060f9b sext.w t6,a2 + 8000dd94: 14081a63 bnez a6,8000dee8 <_Z11Blit8ToHighPhS_iiiii+0x17c> + 8000dd98: 0037f713 andi a4,a5,3 + 8000dd9c: 14071263 bnez a4,8000dee0 <_Z11Blit8ToHighPhS_iiiii+0x174> + 8000dda0: 10068a63 beqz a3,8000deb4 <_Z11Blit8ToHighPhS_iiiii+0x148> + 8000dda4: 41f7de1b sraiw t3,a5,0x1f + 8000dda8: 01ee5e1b srliw t3,t3,0x1e + 8000ddac: ff8f8e9b addiw t4,t6,-8 + 8000ddb0: 00fe0e3b addw t3,t3,a5 + 8000ddb4: 003ede9b srliw t4,t4,0x3 + 8000ddb8: 001e8e93 addi t4,t4,1 + 8000ddbc: 402e5e1b sraiw t3,t3,0x2 + 8000ddc0: 10000f13 li t5,256 + 8000ddc4: 003e9293 slli t0,t4,0x3 + 8000ddc8: 001be817 auipc a6,0x1be + 8000ddcc: e1083803 ld a6,-496(a6) # 801cbbd8 <_ZL16palettetranslate> + 8000ddd0: 002e1e13 slli t3,t3,0x2 + 8000ddd4: 40cf0f3b subw t5,t5,a2 + 8000ddd8: 005e9e93 slli t4,t4,0x5 + 8000dddc: 0c060463 beqz a2,8000dea4 <_Z11Blit8ToHighPhS_iiiii+0x138> + 8000dde0: 00058713 mv a4,a1 + 8000dde4: 00050793 mv a5,a0 + 8000dde8: 01f5033b addw t1,a0,t6 + 8000ddec: 0007c883 lbu a7,0(a5) + 8000ddf0: 02070713 addi a4,a4,32 + 8000ddf4: 00878793 addi a5,a5,8 + 8000ddf8: 00289893 slli a7,a7,0x2 + 8000ddfc: 011808b3 add a7,a6,a7 + 8000de00: 0008a883 lw a7,0(a7) + 8000de04: 0007839b sext.w t2,a5 + 8000de08: ff172023 sw a7,-32(a4) + 8000de0c: ff97c883 lbu a7,-7(a5) + 8000de10: 00289893 slli a7,a7,0x2 + 8000de14: 011808b3 add a7,a6,a7 + 8000de18: 0008a883 lw a7,0(a7) + 8000de1c: ff172223 sw a7,-28(a4) + 8000de20: ffa7c883 lbu a7,-6(a5) + 8000de24: 00289893 slli a7,a7,0x2 + 8000de28: 011808b3 add a7,a6,a7 + 8000de2c: 0008a883 lw a7,0(a7) + 8000de30: ff172423 sw a7,-24(a4) + 8000de34: ffb7c883 lbu a7,-5(a5) + 8000de38: 00289893 slli a7,a7,0x2 + 8000de3c: 011808b3 add a7,a6,a7 + 8000de40: 0008a883 lw a7,0(a7) + 8000de44: ff172623 sw a7,-20(a4) + 8000de48: ffc7c883 lbu a7,-4(a5) + 8000de4c: 00289893 slli a7,a7,0x2 + 8000de50: 011808b3 add a7,a6,a7 + 8000de54: 0008a883 lw a7,0(a7) + 8000de58: ff172823 sw a7,-16(a4) + 8000de5c: ffd7c883 lbu a7,-3(a5) + 8000de60: 00289893 slli a7,a7,0x2 + 8000de64: 011808b3 add a7,a6,a7 + 8000de68: 0008a883 lw a7,0(a7) + 8000de6c: ff172a23 sw a7,-12(a4) + 8000de70: ffe7c883 lbu a7,-2(a5) + 8000de74: 00289893 slli a7,a7,0x2 + 8000de78: 011808b3 add a7,a6,a7 + 8000de7c: 0008a883 lw a7,0(a7) + 8000de80: ff172c23 sw a7,-8(a4) + 8000de84: fff7c883 lbu a7,-1(a5) + 8000de88: 00289893 slli a7,a7,0x2 + 8000de8c: 011808b3 add a7,a6,a7 + 8000de90: 0008a883 lw a7,0(a7) + 8000de94: ff172e23 sw a7,-4(a4) + 8000de98: f4731ae3 bne t1,t2,8000ddec <_Z11Blit8ToHighPhS_iiiii+0x80> + 8000de9c: 00550533 add a0,a0,t0 + 8000dea0: 01d585b3 add a1,a1,t4 + 8000dea4: fff6869b addiw a3,a3,-1 + 8000dea8: 01c585b3 add a1,a1,t3 + 8000deac: 01e50533 add a0,a0,t5 + 8000deb0: f20696e3 bnez a3,8000dddc <_Z11Blit8ToHighPhS_iiiii+0x70> + 8000deb4: 00813083 ld ra,8(sp) + 8000deb8: 01010113 addi sp,sp,16 + 8000debc: 00008067 ret + 8000dec0: 09000613 li a2,144 + 8000dec4: 0002f597 auipc a1,0x2f + 8000dec8: 63c58593 addi a1,a1,1596 # 8003d500 <_ZL12NTSCDMCTable+0x40> + 8000decc: 0002f517 auipc a0,0x2f + 8000ded0: e4450513 addi a0,a0,-444 # 8003cd10 <_etext+0x2c> + 8000ded4: 6742d0ef jal ra,8003b548 + 8000ded8: 00100513 li a0,1 + 8000dedc: 6992b0ef jal ra,80039d74 + 8000dee0: 09400613 li a2,148 + 8000dee4: fe1ff06f j 8000dec4 <_Z11Blit8ToHighPhS_iiiii+0x158> + 8000dee8: 09300613 li a2,147 + 8000deec: fd9ff06f j 8000dec4 <_Z11Blit8ToHighPhS_iiiii+0x158> + +000000008000def0 <_Z18RefreshThrottleFPSv>: + 8000def0: ff010113 addi sp,sp,-16 + 8000def4: 00113423 sd ra,8(sp) + 8000def8: 059260ef jal ra,80034750 <_Z19FCEUI_GetDesiredFPSv> + 8000defc: 00813083 ld ra,8(sp) + 8000df00: 001be797 auipc a5,0x1be + 8000df04: cea7a423 sw a0,-792(a5) # 801cbbe8 <_ZL11desired_fps> + 8000df08: 001be797 auipc a5,0x1be + 8000df0c: ce07b423 sd zero,-792(a5) # 801cbbf0 <_ZL8Lasttime> + 8000df10: 001be797 auipc a5,0x1be + 8000df14: ce07b423 sd zero,-792(a5) # 801cbbf8 <_ZL8Nexttime> + 8000df18: 001be797 auipc a5,0x1be + 8000df1c: cc07aa23 sw zero,-812(a5) # 801cbbec <_ZL7InFrame> + 8000df20: 01010113 addi sp,sp,16 + 8000df24: 00008067 ret + +000000008000df28 <_Z13SpeedThrottlev>: + 8000df28: fd010113 addi sp,sp,-48 + 8000df2c: 00913c23 sd s1,24(sp) + 8000df30: 01313423 sd s3,8(sp) + 8000df34: 02113423 sd ra,40(sp) + 8000df38: 02813023 sd s0,32(sp) + 8000df3c: 01213823 sd s2,16(sp) + 8000df40: 001be997 auipc s3,0x1be + 8000df44: cb098993 addi s3,s3,-848 # 801cbbf0 <_ZL8Lasttime> + 8000df48: 1f5000ef jal ra,8000e93c <_Z13FCEUD_GetTimev> + 8000df4c: 0009b783 ld a5,0(s3) + 8000df50: 00050493 mv s1,a0 + 8000df54: 00079463 bnez a5,8000df5c <_Z13SpeedThrottlev+0x34> + 8000df58: 00a9b023 sd a0,0(s3) + 8000df5c: 001be917 auipc s2,0x1be + 8000df60: c9090913 addi s2,s2,-880 # 801cbbec <_ZL7InFrame> + 8000df64: 00092783 lw a5,0(s2) + 8000df68: 06078263 beqz a5,8000dfcc <_Z13SpeedThrottlev+0xa4> + 8000df6c: 001be417 auipc s0,0x1be + 8000df70: c8c43403 ld s0,-884(s0) # 801cbbf8 <_ZL8Nexttime> + 8000df74: 0484f863 bgeu s1,s0,8000dfc4 <_Z13SpeedThrottlev+0x9c> + 8000df78: 40940433 sub s0,s0,s1 + 8000df7c: 03200793 li a5,50 + 8000df80: 0687ee63 bltu a5,s0,8000dffc <_Z13SpeedThrottlev+0xd4> + 8000df84: 001be797 auipc a5,0x1be + 8000df88: c607a423 sw zero,-920(a5) # 801cbbec <_ZL7InFrame> + 8000df8c: 1b1000ef jal ra,8000e93c <_Z13FCEUD_GetTimev> + 8000df90: 409507b3 sub a5,a0,s1 + 8000df94: fe87ece3 bltu a5,s0,8000df8c <_Z13SpeedThrottlev+0x64> + 8000df98: 00092783 lw a5,0(s2) + 8000df9c: 06078463 beqz a5,8000e004 <_Z13SpeedThrottlev+0xdc> + 8000dfa0: 02813083 ld ra,40(sp) + 8000dfa4: 02013403 ld s0,32(sp) + 8000dfa8: 00100793 li a5,1 + 8000dfac: 01813483 ld s1,24(sp) + 8000dfb0: 01013903 ld s2,16(sp) + 8000dfb4: 00813983 ld s3,8(sp) + 8000dfb8: 00078513 mv a0,a5 + 8000dfbc: 03010113 addi sp,sp,48 + 8000dfc0: 00008067 ret + 8000dfc4: 00000413 li s0,0 + 8000dfc8: fbdff06f j 8000df84 <_Z13SpeedThrottlev+0x5c> + 8000dfcc: 00100793 li a5,1 + 8000dfd0: 00f92023 sw a5,0(s2) + 8000dfd4: 001be597 auipc a1,0x1be + 8000dfd8: c145a583 lw a1,-1004(a1) # 801cbbe8 <_ZL11desired_fps> + 8000dfdc: 3e800513 li a0,1000 + 8000dfe0: 6412b0ef jal ra,80039e20 <__divdi3> + 8000dfe4: 0009b783 ld a5,0(s3) + 8000dfe8: 0005041b sext.w s0,a0 + 8000dfec: 00f40433 add s0,s0,a5 + 8000dff0: 001be797 auipc a5,0x1be + 8000dff4: c087b423 sd s0,-1016(a5) # 801cbbf8 <_ZL8Nexttime> + 8000dff8: f7dff06f j 8000df74 <_Z13SpeedThrottlev+0x4c> + 8000dffc: 03200413 li s0,50 + 8000e000: f8dff06f j 8000df8c <_Z13SpeedThrottlev+0x64> + 8000e004: 02813083 ld ra,40(sp) + 8000e008: 02013403 ld s0,32(sp) + 8000e00c: 00a9b023 sd a0,0(s3) + 8000e010: 01813483 ld s1,24(sp) + 8000e014: 01013903 ld s2,16(sp) + 8000e018: 00813983 ld s3,8(sp) + 8000e01c: 00078513 mv a0,a5 + 8000e020: 03010113 addi sp,sp,48 + 8000e024: 00008067 ret + +000000008000e028 <_Z18InputUserActiveFixv>: + 8000e028: 00076797 auipc a5,0x76 + 8000e02c: fa878793 addi a5,a5,-88 # 80083fd0 <_ZL12UsrInputType> + 8000e030: 0087a683 lw a3,8(a5) + 8000e034: 0007b703 ld a4,0(a5) + 8000e038: 00076797 auipc a5,0x76 + 8000e03c: f8878793 addi a5,a5,-120 # 80083fc0 <_ZL12CurInputType> + 8000e040: 00d7a423 sw a3,8(a5) + 8000e044: 00e7b023 sd a4,0(a5) + 8000e048: 00008067 ret + +000000008000e04c <_Z12ParseGIInputP6FCEUGI>: + 8000e04c: 00076797 auipc a5,0x76 + 8000e050: f8478793 addi a5,a5,-124 # 80083fd0 <_ZL12UsrInputType> + 8000e054: 0087a683 lw a3,8(a5) + 8000e058: 0007b603 ld a2,0(a5) + 8000e05c: 00c52583 lw a1,12(a0) + 8000e060: 01452703 lw a4,20(a0) + 8000e064: 00076797 auipc a5,0x76 + 8000e068: f5c78793 addi a5,a5,-164 # 80083fc0 <_ZL12CurInputType> + 8000e06c: 001be817 auipc a6,0x1be + 8000e070: bab82a23 sw a1,-1100(a6) # 801cbc20 + 8000e074: 00c7b023 sd a2,0(a5) + 8000e078: 00d7a423 sw a3,8(a5) + 8000e07c: 00074463 bltz a4,8000e084 <_Z12ParseGIInputP6FCEUGI+0x38> + 8000e080: 00e7a023 sw a4,0(a5) + 8000e084: 01852703 lw a4,24(a0) + 8000e088: 00074463 bltz a4,8000e090 <_Z12ParseGIInputP6FCEUGI+0x44> + 8000e08c: 00e7a223 sw a4,4(a5) + 8000e090: 01c52703 lw a4,28(a0) + 8000e094: 00074463 bltz a4,8000e09c <_Z12ParseGIInputP6FCEUGI+0x50> + 8000e098: 00e7a423 sw a4,8(a5) + 8000e09c: 00008067 ret + +000000008000e0a0 <_Z12GetMouseDataRA3_j>: + 8000e0a0: 00008067 ret + +000000008000e0a4 <_Z17FCEUD_UpdateInputv>: + 8000e0a4: fc010113 addi sp,sp,-64 + 8000e0a8: 02813823 sd s0,48(sp) + 8000e0ac: 02913423 sd s1,40(sp) + 8000e0b0: 03213023 sd s2,32(sp) + 8000e0b4: 01313c23 sd s3,24(sp) + 8000e0b8: 02113c23 sd ra,56(sp) + 8000e0bc: 0ff00993 li s3,255 + 8000e0c0: 00076417 auipc s0,0x76 + 8000e0c4: e0040413 addi s0,s0,-512 # 80083ec0 <_ZL10g_keyState> + 8000e0c8: 00100493 li s1,1 + 8000e0cc: 01d00913 li s2,29 + 8000e0d0: 00810593 addi a1,sp,8 + 8000e0d4: 00800513 li a0,8 + 8000e0d8: 6e12b0ef jal ra,80039fb8 + 8000e0dc: 00c12783 lw a5,12(sp) + 8000e0e0: 00814683 lbu a3,8(sp) + 8000e0e4: 1ef9c663 blt s3,a5,8000e2d0 <_Z17FCEUD_UpdateInputv+0x22c> + 8000e0e8: 00f40733 add a4,s0,a5 + 8000e0ec: 00d70023 sb a3,0(a4) + 8000e0f0: 1c978c63 beq a5,s1,8000e2c8 <_Z17FCEUD_UpdateInputv+0x224> + 8000e0f4: 1d278a63 beq a5,s2,8000e2c8 <_Z17FCEUD_UpdateInputv+0x224> + 8000e0f8: fc079ce3 bnez a5,8000e0d0 <_Z17FCEUD_UpdateInputv+0x2c> + 8000e0fc: 0003b717 auipc a4,0x3b + 8000e100: ac470713 addi a4,a4,-1340 # 80048bc0 + 8000e104: 00072783 lw a5,0(a4) + 8000e108: 00076697 auipc a3,0x76 + 8000e10c: eb868693 addi a3,a3,-328 # 80083fc0 <_ZL12CurInputType> + 8000e110: 0006a603 lw a2,0(a3) + 8000e114: ffe7f793 andi a5,a5,-2 + 8000e118: 00f72023 sw a5,0(a4) + 8000e11c: 02960463 beq a2,s1,8000e144 <_Z17FCEUD_UpdateInputv+0xa0> + 8000e120: 0046a783 lw a5,4(a3) + 8000e124: 02978063 beq a5,s1,8000e144 <_Z17FCEUD_UpdateInputv+0xa0> + 8000e128: 03813083 ld ra,56(sp) + 8000e12c: 03013403 ld s0,48(sp) + 8000e130: 02813483 ld s1,40(sp) + 8000e134: 02013903 ld s2,32(sp) + 8000e138: 01813983 ld s3,24(sp) + 8000e13c: 04010113 addi sp,sp,64 + 8000e140: 00008067 ret + 8000e144: 001be797 auipc a5,0x1be + 8000e148: ac078793 addi a5,a5,-1344 # 801cbc04 <_ZZL13UpdateGamepadvE5rapid> + 8000e14c: 0007a283 lw t0,0(a5) + 8000e150: 0003a817 auipc a6,0x3a + 8000e154: 75080813 addi a6,a6,1872 # 800488a0 + 8000e158: 00000e93 li t4,0 + 8000e15c: 0012c713 xori a4,t0,1 + 8000e160: 00e7a023 sw a4,0(a5) + 8000e164: 00000e13 li t3,0 + 8000e168: 00000993 li s3,0 + 8000e16c: 00100f13 li t5,1 + 8000e170: 00800f93 li t6,8 + 8000e174: 00100493 li s1,1 + 8000e178: 00200913 li s2,2 + 8000e17c: 32000393 li t2,800 + 8000e180: 000e031b sext.w t1,t3 + 8000e184: 00080713 mv a4,a6 + 8000e188: 00000613 li a2,0 + 8000e18c: 01072883 lw a7,16(a4) + 8000e190: 03105c63 blez a7,8000e1c8 <_Z17FCEUD_UpdateInputv+0x124> + 8000e194: 00070593 mv a1,a4 + 8000e198: 00000693 li a3,0 + 8000e19c: 00d707b3 add a5,a4,a3 + 8000e1a0: 0007c783 lbu a5,0(a5) + 8000e1a4: 00079a63 bnez a5,8000e1b8 <_Z17FCEUD_UpdateInputv+0x114> + 8000e1a8: 0085d503 lhu a0,8(a1) + 8000e1ac: 00a40533 add a0,s0,a0 + 8000e1b0: 00054783 lbu a5,0(a0) + 8000e1b4: 04079c63 bnez a5,8000e20c <_Z17FCEUD_UpdateInputv+0x168> + 8000e1b8: 00168693 addi a3,a3,1 + 8000e1bc: 0006879b sext.w a5,a3 + 8000e1c0: 00258593 addi a1,a1,2 + 8000e1c4: fd17cce3 blt a5,a7,8000e19c <_Z17FCEUD_UpdateInputv+0xf8> + 8000e1c8: 0016061b addiw a2,a2,1 + 8000e1cc: 01470713 addi a4,a4,20 + 8000e1d0: fbf61ee3 bne a2,t6,8000e18c <_Z17FCEUD_UpdateInputv+0xe8> + 8000e1d4: 04929c63 bne t0,s1,8000e22c <_Z17FCEUD_UpdateInputv+0x188> + 8000e1d8: 0c8e8e93 addi t4,t4,200 + 8000e1dc: 008e0e1b addiw t3,t3,8 + 8000e1e0: 0c880813 addi a6,a6,200 + 8000e1e4: f87e9ee3 bne t4,t2,8000e180 <_Z17FCEUD_UpdateInputv+0xdc> + 8000e1e8: 03813083 ld ra,56(sp) + 8000e1ec: 03013403 ld s0,48(sp) + 8000e1f0: 001be797 auipc a5,0x1be + 8000e1f4: a137a823 sw s3,-1520(a5) # 801cbc00 <_ZL8JSreturn> + 8000e1f8: 02813483 ld s1,40(sp) + 8000e1fc: 02013903 ld s2,32(sp) + 8000e200: 01813983 ld s3,24(sp) + 8000e204: 04010113 addi sp,sp,64 + 8000e208: 00008067 ret + 8000e20c: 00cf17bb sllw a5,t5,a2 + 8000e210: 006797bb sllw a5,a5,t1 + 8000e214: 00f9e7b3 or a5,s3,a5 + 8000e218: 0016061b addiw a2,a2,1 + 8000e21c: 0007899b sext.w s3,a5 + 8000e220: 01470713 addi a4,a4,20 + 8000e224: f7f614e3 bne a2,t6,8000e18c <_Z17FCEUD_UpdateInputv+0xe8> + 8000e228: fadff06f j 8000e1d4 <_Z17FCEUD_UpdateInputv+0x130> + 8000e22c: 0b082603 lw a2,176(a6) + 8000e230: 02c05c63 blez a2,8000e268 <_Z17FCEUD_UpdateInputv+0x1c4> + 8000e234: 00080693 mv a3,a6 + 8000e238: 00000713 li a4,0 + 8000e23c: 00e807b3 add a5,a6,a4 + 8000e240: 0a07c783 lbu a5,160(a5) + 8000e244: 00079a63 bnez a5,8000e258 <_Z17FCEUD_UpdateInputv+0x1b4> + 8000e248: 0a86d783 lhu a5,168(a3) + 8000e24c: 00f407b3 add a5,s0,a5 + 8000e250: 0007c783 lbu a5,0(a5) + 8000e254: 06079263 bnez a5,8000e2b8 <_Z17FCEUD_UpdateInputv+0x214> + 8000e258: 00170713 addi a4,a4,1 + 8000e25c: 0007079b sext.w a5,a4 + 8000e260: 00268693 addi a3,a3,2 + 8000e264: fcc7cce3 blt a5,a2,8000e23c <_Z17FCEUD_UpdateInputv+0x198> + 8000e268: 0c482583 lw a1,196(a6) + 8000e26c: f6b056e3 blez a1,8000e1d8 <_Z17FCEUD_UpdateInputv+0x134> + 8000e270: 00080693 mv a3,a6 + 8000e274: 00000713 li a4,0 + 8000e278: 0140006f j 8000e28c <_Z17FCEUD_UpdateInputv+0x1e8> + 8000e27c: 00170713 addi a4,a4,1 + 8000e280: 0007079b sext.w a5,a4 + 8000e284: 00268693 addi a3,a3,2 + 8000e288: f4b7d8e3 bge a5,a1,8000e1d8 <_Z17FCEUD_UpdateInputv+0x134> + 8000e28c: 00e807b3 add a5,a6,a4 + 8000e290: 0b47c783 lbu a5,180(a5) + 8000e294: fe0794e3 bnez a5,8000e27c <_Z17FCEUD_UpdateInputv+0x1d8> + 8000e298: 0bc6d603 lhu a2,188(a3) + 8000e29c: 00c40633 add a2,s0,a2 + 8000e2a0: 00064783 lbu a5,0(a2) + 8000e2a4: fc078ce3 beqz a5,8000e27c <_Z17FCEUD_UpdateInputv+0x1d8> + 8000e2a8: 006917bb sllw a5,s2,t1 + 8000e2ac: 00f9e7b3 or a5,s3,a5 + 8000e2b0: 0007899b sext.w s3,a5 + 8000e2b4: f25ff06f j 8000e1d8 <_Z17FCEUD_UpdateInputv+0x134> + 8000e2b8: 006f17bb sllw a5,t5,t1 + 8000e2bc: 00f9e7b3 or a5,s3,a5 + 8000e2c0: 0007899b sext.w s3,a5 + 8000e2c4: fa5ff06f j 8000e268 <_Z17FCEUD_UpdateInputv+0x1c4> + 8000e2c8: 00000513 li a0,0 + 8000e2cc: 2a92b0ef jal ra,80039d74 + 8000e2d0: 06e00613 li a2,110 + 8000e2d4: 0002f597 auipc a1,0x2f + 8000e2d8: 26458593 addi a1,a1,612 # 8003d538 <_ZL12NTSCDMCTable+0x78> + 8000e2dc: 0002f517 auipc a0,0x2f + 8000e2e0: a3450513 addi a0,a0,-1484 # 8003cd10 <_etext+0x2c> + 8000e2e4: 2642d0ef jal ra,8003b548 + 8000e2e8: 00100513 li a0,1 + 8000e2ec: 2892b0ef jal ra,80039d74 + +000000008000e2f0 <_Z18InitInputInterfacev>: + 8000e2f0: ff010113 addi sp,sp,-16 + 8000e2f4: 00813023 sd s0,0(sp) + 8000e2f8: 00076417 auipc s0,0x76 + 8000e2fc: cc840413 addi s0,s0,-824 # 80083fc0 <_ZL12CurInputType> + 8000e300: 00042583 lw a1,0(s0) + 8000e304: 00113423 sd ra,8(sp) + 8000e308: 00100793 li a5,1 + 8000e30c: 001be617 auipc a2,0x1be + 8000e310: 8f460613 addi a2,a2,-1804 # 801cbc00 <_ZL8JSreturn> + 8000e314: 00f58463 beq a1,a5,8000e31c <_Z18InitInputInterfacev+0x2c> + 8000e318: 00000613 li a2,0 + 8000e31c: 00000693 li a3,0 + 8000e320: 00000513 li a0,0 + 8000e324: 818f20ef jal ra,8000033c <_Z14FCEUI_SetInputi3ESIPvi> + 8000e328: 00442583 lw a1,4(s0) + 8000e32c: 00100793 li a5,1 + 8000e330: 00000613 li a2,0 + 8000e334: 00f59663 bne a1,a5,8000e340 <_Z18InitInputInterfacev+0x50> + 8000e338: 001be617 auipc a2,0x1be + 8000e33c: 8c860613 addi a2,a2,-1848 # 801cbc00 <_ZL8JSreturn> + 8000e340: 00000693 li a3,0 + 8000e344: 00100513 li a0,1 + 8000e348: ff5f10ef jal ra,8000033c <_Z14FCEUI_SetInputi3ESIPvi> + 8000e34c: 00842503 lw a0,8(s0) + 8000e350: 00000613 li a2,0 + 8000e354: 00000593 li a1,0 + 8000e358: 82cf20ef jal ra,80000384 <_Z16FCEUI_SetInputFC5ESIFCPvi> + 8000e35c: 00013403 ld s0,0(sp) + 8000e360: 00813083 ld ra,8(sp) + 8000e364: 001be517 auipc a0,0x1be + 8000e368: 8b852503 lw a0,-1864(a0) # 801cbc1c + 8000e36c: 4055551b sraiw a0,a0,0x5 + 8000e370: 00157513 andi a0,a0,1 + 8000e374: 01010113 addi sp,sp,16 + 8000e378: 95cf206f j 800004d4 <_Z23FCEUI_SetInputFourscoreb> + +000000008000e37c <_Z11UpdateInputv>: + 8000e37c: 00100793 li a5,1 + 8000e380: 02079793 slli a5,a5,0x20 + 8000e384: 00178793 addi a5,a5,1 + 8000e388: 00076717 auipc a4,0x76 + 8000e38c: c4f73423 sd a5,-952(a4) # 80083fd0 <_ZL12UsrInputType> + 8000e390: 0002f617 auipc a2,0x2f + 8000e394: 20860613 addi a2,a2,520 # 8003d598 + 8000e398: 00076797 auipc a5,0x76 + 8000e39c: c407a023 sw zero,-960(a5) # 80083fd8 <_ZL12UsrInputType+0x8> + 8000e3a0: 0003a517 auipc a0,0x3a + 8000e3a4: 50050513 addi a0,a0,1280 # 800488a0 + 8000e3a8: 0002f817 auipc a6,0x2f + 8000e3ac: 26880813 addi a6,a6,616 # 8003d610 + 8000e3b0: 03100693 li a3,49 + 8000e3b4: 00100593 li a1,1 + 8000e3b8: fd860713 addi a4,a2,-40 + 8000e3bc: 00050793 mv a5,a0 + 8000e3c0: 0080006f j 8000e3c8 <_Z11UpdateInputv+0x4c> + 8000e3c4: 00072683 lw a3,0(a4) + 8000e3c8: 00d79423 sh a3,8(a5) + 8000e3cc: 00078023 sb zero,0(a5) + 8000e3d0: 00078223 sb zero,4(a5) + 8000e3d4: 00b7a823 sw a1,16(a5) + 8000e3d8: 00470713 addi a4,a4,4 + 8000e3dc: 01478793 addi a5,a5,20 + 8000e3e0: fec712e3 bne a4,a2,8000e3c4 <_Z11UpdateInputv+0x48> + 8000e3e4: 0c850513 addi a0,a0,200 + 8000e3e8: 01060863 beq a2,a6,8000e3f8 <_Z11UpdateInputv+0x7c> + 8000e3ec: 00062683 lw a3,0(a2) + 8000e3f0: 02860613 addi a2,a2,40 + 8000e3f4: fc5ff06f j 8000e3b8 <_Z11UpdateInputv+0x3c> + 8000e3f8: 00008067 ret + +000000008000e3fc <_Z9CloseGamev.part.0>: + 8000e3fc: ff010113 addi sp,sp,-16 + 8000e400: 00113423 sd ra,8(sp) + 8000e404: 34d250ef jal ra,80033f50 <_Z15FCEUI_CloseGamev> + 8000e408: 001be797 auipc a5,0x1be + 8000e40c: 8007a783 lw a5,-2048(a5) # 801cbc08 <_ZL6inited> + 8000e410: 0047f793 andi a5,a5,4 + 8000e414: 02079863 bnez a5,8000e444 <_Z9CloseGamev.part.0+0x48> + 8000e418: 001bd797 auipc a5,0x1bd + 8000e41c: 7e07a823 sw zero,2032(a5) # 801cbc08 <_ZL6inited> + 8000e420: 001be797 auipc a5,0x1be + 8000e424: 8007a223 sw zero,-2044(a5) # 801cbc24 + 8000e428: 001be797 auipc a5,0x1be + 8000e42c: 2207b023 sd zero,544(a5) # 801cc648 + 8000e430: bf9ff0ef jal ra,8000e028 <_Z18InputUserActiveFixv> + 8000e434: 00813083 ld ra,8(sp) + 8000e438: 00100513 li a0,1 + 8000e43c: 01010113 addi sp,sp,16 + 8000e440: 00008067 ret + 8000e444: 548000ef jal ra,8000e98c <_Z9KillVideov> + 8000e448: fd1ff06f j 8000e418 <_Z9CloseGamev.part.0+0x1c> + +000000008000e44c <_Z8LoadGamePKc>: + 8000e44c: fe010113 addi sp,sp,-32 + 8000e450: 00913423 sd s1,8(sp) + 8000e454: 001bd497 auipc s1,0x1bd + 8000e458: 7d048493 addi s1,s1,2000 # 801cbc24 + 8000e45c: 0004a783 lw a5,0(s1) + 8000e460: 00813823 sd s0,16(sp) + 8000e464: 00113c23 sd ra,24(sp) + 8000e468: 00050413 mv s0,a0 + 8000e46c: 0a079e63 bnez a5,8000e528 <_Z8LoadGamePKc+0xdc> + 8000e470: 00000613 li a2,0 + 8000e474: 00100593 li a1,1 + 8000e478: 00040513 mv a0,s0 + 8000e47c: 154260ef jal ra,800345d0 <_Z14FCEUI_LoadGamePKcib> + 8000e480: 08050863 beqz a0,8000e510 <_Z8LoadGamePKc+0xc4> + 8000e484: 001be417 auipc s0,0x1be + 8000e488: 1c440413 addi s0,s0,452 # 801cc648 + 8000e48c: 00043503 ld a0,0(s0) + 8000e490: bbdff0ef jal ra,8000e04c <_Z12ParseGIInputP6FCEUGI> + 8000e494: a5dff0ef jal ra,8000def0 <_Z18RefreshThrottleFPSv> + 8000e498: 00043503 ld a0,0(s0) + 8000e49c: 534000ef jal ra,8000e9d0 <_Z9InitVideoP6FCEUGI> + 8000e4a0: 06054863 bltz a0,8000e510 <_Z8LoadGamePKc+0xc4> + 8000e4a4: 001bd417 auipc s0,0x1bd + 8000e4a8: 76440413 addi s0,s0,1892 # 801cbc08 <_ZL6inited> + 8000e4ac: 00042783 lw a5,0(s0) + 8000e4b0: 0047e793 ori a5,a5,4 + 8000e4b4: 00f42023 sw a5,0(s0) + 8000e4b8: 4b8000ef jal ra,8000e970 <_Z9InitSoundv> + 8000e4bc: 00050863 beqz a0,8000e4cc <_Z8LoadGamePKc+0x80> + 8000e4c0: 00042783 lw a5,0(s0) + 8000e4c4: 0017e793 ori a5,a5,1 + 8000e4c8: 00f42023 sw a5,0(s0) + 8000e4cc: 001bd717 auipc a4,0x1bd + 8000e4d0: 75070713 addi a4,a4,1872 # 801cbc1c + 8000e4d4: 00072783 lw a5,0(a4) + 8000e4d8: fdf7f793 andi a5,a5,-33 + 8000e4dc: 00f72023 sw a5,0(a4) + 8000e4e0: e11ff0ef jal ra,8000e2f0 <_Z18InitInputInterfacev> + 8000e4e4: 00000513 li a0,0 + 8000e4e8: 00100593 li a1,1 + 8000e4ec: 168260ef jal ra,80034654 <_Z15FCEUI_SetRegionii> + 8000e4f0: 01813083 ld ra,24(sp) + 8000e4f4: 01013403 ld s0,16(sp) + 8000e4f8: 00100793 li a5,1 + 8000e4fc: 00f4a023 sw a5,0(s1) + 8000e500: 00100513 li a0,1 + 8000e504: 00813483 ld s1,8(sp) + 8000e508: 02010113 addi sp,sp,32 + 8000e50c: 00008067 ret + 8000e510: 01813083 ld ra,24(sp) + 8000e514: 01013403 ld s0,16(sp) + 8000e518: 00813483 ld s1,8(sp) + 8000e51c: 00000513 li a0,0 + 8000e520: 02010113 addi sp,sp,32 + 8000e524: 00008067 ret + 8000e528: ed5ff0ef jal ra,8000e3fc <_Z9CloseGamev.part.0> + 8000e52c: f45ff06f j 8000e470 <_Z8LoadGamePKc+0x24> + +000000008000e530 <_Z12FCEUD_UpdatePhPii>: + 8000e530: fc010113 addi sp,sp,-64 + 8000e534: 01413823 sd s4,16(sp) + 8000e538: 02113c23 sd ra,56(sp) + 8000e53c: 02813823 sd s0,48(sp) + 8000e540: 02913423 sd s1,40(sp) + 8000e544: 03213023 sd s2,32(sp) + 8000e548: 01313c23 sd s3,24(sp) + 8000e54c: 01513423 sd s5,8(sp) + 8000e550: 00050a13 mv s4,a0 + 8000e554: 06061463 bnez a2,8000e5bc <_Z12FCEUD_UpdatePhPii+0x8c> + 8000e558: 0003a797 auipc a5,0x3a + 8000e55c: 6687a783 lw a5,1640(a5) # 80048bc0 + 8000e560: 02079263 bnez a5,8000e584 <_Z12FCEUD_UpdatePhPii+0x54> + 8000e564: 001bd797 auipc a5,0x1bd + 8000e568: 6b87a783 lw a5,1720(a5) # 801cbc1c + 8000e56c: 0407f793 andi a5,a5,64 + 8000e570: 00078663 beqz a5,8000e57c <_Z12FCEUD_UpdatePhPii+0x4c> + 8000e574: 1a00006f j 8000e714 <_Z12FCEUD_UpdatePhPii+0x1e4> + 8000e578: b2dff0ef jal ra,8000e0a4 <_Z17FCEUD_UpdateInputv> + 8000e57c: 9adff0ef jal ra,8000df28 <_Z13SpeedThrottlev> + 8000e580: fe051ce3 bnez a0,8000e578 <_Z12FCEUD_UpdatePhPii+0x48> + 8000e584: 000a0a63 beqz s4,8000e598 <_Z12FCEUD_UpdatePhPii+0x68> + 8000e588: 001bd797 auipc a5,0x1bd + 8000e58c: 6807a783 lw a5,1664(a5) # 801cbc08 <_ZL6inited> + 8000e590: 0047f793 andi a5,a5,4 + 8000e594: 10079a63 bnez a5,8000e6a8 <_Z12FCEUD_UpdatePhPii+0x178> + 8000e598: 03013403 ld s0,48(sp) + 8000e59c: 03813083 ld ra,56(sp) + 8000e5a0: 02813483 ld s1,40(sp) + 8000e5a4: 02013903 ld s2,32(sp) + 8000e5a8: 01813983 ld s3,24(sp) + 8000e5ac: 01013a03 ld s4,16(sp) + 8000e5b0: 00813a83 ld s5,8(sp) + 8000e5b4: 04010113 addi sp,sp,64 + 8000e5b8: aedff06f j 8000e0a4 <_Z17FCEUD_UpdateInputv> + 8000e5bc: 00060413 mv s0,a2 + 8000e5c0: 00058993 mv s3,a1 + 8000e5c4: 3bc000ef jal ra,8000e980 <_Z13GetWriteSoundv> + 8000e5c8: 0005091b sext.w s2,a0 + 8000e5cc: 3ac000ef jal ra,8000e978 <_Z11GetMaxSoundv> + 8000e5d0: 0005051b sext.w a0,a0 + 8000e5d4: 00a94863 blt s2,a0,8000e5e4 <_Z12FCEUD_UpdatePhPii+0xb4> + 8000e5d8: 00100793 li a5,1 + 8000e5dc: 001bd717 auipc a4,0x1bd + 8000e5e0: 62f72823 sw a5,1584(a4) # 801cbc0c <_ZZ12FCEUD_UpdatePhPiiE5uflow> + 8000e5e4: 0b244e63 blt s0,s2,8000e6a0 <_Z12FCEUD_UpdatePhPii+0x170> + 8000e5e8: 001bd797 auipc a5,0x1bd + 8000e5ec: 6207a223 sw zero,1572(a5) # 801cbc0c <_ZZ12FCEUD_UpdatePhPiiE5uflow> + 8000e5f0: 00090593 mv a1,s2 + 8000e5f4: 00098513 mv a0,s3 + 8000e5f8: 390000ef jal ra,8000e988 <_Z10WriteSoundPii> + 8000e5fc: 00341a9b slliw s5,s0,0x3 + 8000e600: 380000ef jal ra,8000e980 <_Z13GetWriteSoundv> + 8000e604: 008a8abb addw s5,s5,s0 + 8000e608: 00050493 mv s1,a0 + 8000e60c: 00a00593 li a1,10 + 8000e610: 000a8513 mv a0,s5 + 8000e614: 00d2b0ef jal ra,80039e20 <__divdi3> + 8000e618: 0004849b sext.w s1,s1 + 8000e61c: 0005051b sext.w a0,a0 + 8000e620: 08a4da63 bge s1,a0,8000e6b4 <_Z12FCEUD_UpdatePhPii+0x184> + 8000e624: 001bd797 auipc a5,0x1bd + 8000e628: 5e87a783 lw a5,1512(a5) # 801cbc0c <_ZZ12FCEUD_UpdatePhPiiE5uflow> + 8000e62c: 0e079c63 bnez a5,8000e724 <_Z12FCEUD_UpdatePhPii+0x1f4> + 8000e630: 020a0663 beqz s4,8000e65c <_Z12FCEUD_UpdatePhPii+0x12c> + 8000e634: 001bd797 auipc a5,0x1bd + 8000e638: 5d47a783 lw a5,1492(a5) # 801cbc08 <_ZL6inited> + 8000e63c: 0047f793 andi a5,a5,4 + 8000e640: 00078e63 beqz a5,8000e65c <_Z12FCEUD_UpdatePhPii+0x12c> + 8000e644: 0003a797 auipc a5,0x3a + 8000e648: 57c7a783 lw a5,1404(a5) # 80048bc0 + 8000e64c: 0027f793 andi a5,a5,2 + 8000e650: 00079663 bnez a5,8000e65c <_Z12FCEUD_UpdatePhPii+0x12c> + 8000e654: 000a0513 mv a0,s4 + 8000e658: 410000ef jal ra,8000ea68 <_Z10BlitScreenPh> + 8000e65c: 412404bb subw s1,s0,s2 + 8000e660: f2048ce3 beqz s1,8000e598 <_Z12FCEUD_UpdatePhPii+0x68> + 8000e664: 00291513 slli a0,s2,0x2 + 8000e668: 0003a797 auipc a5,0x3a + 8000e66c: 5587a783 lw a5,1368(a5) # 80048bc0 + 8000e670: 00a98933 add s2,s3,a0 + 8000e674: 0c079463 bnez a5,8000e73c <_Z12FCEUD_UpdatePhPii+0x20c> + 8000e678: f29050e3 blez s1,8000e598 <_Z12FCEUD_UpdatePhPii+0x68> + 8000e67c: 00040993 mv s3,s0 + 8000e680: 00090513 mv a0,s2 + 8000e684: 0009859b sext.w a1,s3 + 8000e688: 0084d463 bge s1,s0,8000e690 <_Z12FCEUD_UpdatePhPii+0x160> + 8000e68c: 0004859b sext.w a1,s1 + 8000e690: 408484bb subw s1,s1,s0 + 8000e694: 2f4000ef jal ra,8000e988 <_Z10WriteSoundPii> + 8000e698: fe9044e3 bgtz s1,8000e680 <_Z12FCEUD_UpdatePhPii+0x150> + 8000e69c: efdff06f j 8000e598 <_Z12FCEUD_UpdatePhPii+0x68> + 8000e6a0: 00040913 mv s2,s0 + 8000e6a4: f4dff06f j 8000e5f0 <_Z12FCEUD_UpdatePhPii+0xc0> + 8000e6a8: 000a0513 mv a0,s4 + 8000e6ac: 3bc000ef jal ra,8000ea68 <_Z10BlitScreenPh> + 8000e6b0: ee9ff06f j 8000e598 <_Z12FCEUD_UpdatePhPii+0x68> + 8000e6b4: 0003a797 auipc a5,0x3a + 8000e6b8: 50c7a783 lw a5,1292(a5) # 80048bc0 + 8000e6bc: ec079ee3 bnez a5,8000e598 <_Z12FCEUD_UpdatePhPii+0x68> + 8000e6c0: 001bd797 auipc a5,0x1bd + 8000e6c4: 54c7a783 lw a5,1356(a5) # 801cbc0c <_ZZ12FCEUD_UpdatePhPiiE5uflow> + 8000e6c8: 00079c63 bnez a5,8000e6e0 <_Z12FCEUD_UpdatePhPii+0x1b0> + 8000e6cc: 00500593 li a1,5 + 8000e6d0: 000a8513 mv a0,s5 + 8000e6d4: 74c2b0ef jal ra,80039e20 <__divdi3> + 8000e6d8: 0005051b sext.w a0,a0 + 8000e6dc: eaa4cee3 blt s1,a0,8000e598 <_Z12FCEUD_UpdatePhPii+0x68> + 8000e6e0: 00040793 mv a5,s0 + 8000e6e4: 0484c863 blt s1,s0,8000e734 <_Z12FCEUD_UpdatePhPii+0x204> + 8000e6e8: 0007841b sext.w s0,a5 + 8000e6ec: ea9056e3 blez s1,8000e598 <_Z12FCEUD_UpdatePhPii+0x68> + 8000e6f0: 00040913 mv s2,s0 + 8000e6f4: 00098513 mv a0,s3 + 8000e6f8: 0009059b sext.w a1,s2 + 8000e6fc: 0084d463 bge s1,s0,8000e704 <_Z12FCEUD_UpdatePhPii+0x1d4> + 8000e700: 0004859b sext.w a1,s1 + 8000e704: 408484bb subw s1,s1,s0 + 8000e708: 280000ef jal ra,8000e988 <_Z10WriteSoundPii> + 8000e70c: fe9044e3 bgtz s1,8000e6f4 <_Z12FCEUD_UpdatePhPii+0x1c4> + 8000e710: e89ff06f j 8000e598 <_Z12FCEUD_UpdatePhPii+0x68> + 8000e714: 064260ef jal ra,80034778 <_Z21FCEUI_EmulationPausedv> + 8000e718: e60512e3 bnez a0,8000e57c <_Z12FCEUD_UpdatePhPii+0x4c> + 8000e71c: e60a16e3 bnez s4,8000e588 <_Z12FCEUD_UpdatePhPii+0x58> + 8000e720: e79ff06f j 8000e598 <_Z12FCEUD_UpdatePhPii+0x68> + 8000e724: 0003a797 auipc a5,0x3a + 8000e728: 49c7a783 lw a5,1180(a5) # 80048bc0 + 8000e72c: fa078ae3 beqz a5,8000e6e0 <_Z12FCEUD_UpdatePhPii+0x1b0> + 8000e730: e69ff06f j 8000e598 <_Z12FCEUD_UpdatePhPii+0x68> + 8000e734: 00048793 mv a5,s1 + 8000e738: fb1ff06f j 8000e6e8 <_Z12FCEUD_UpdatePhPii+0x1b8> + 8000e73c: 244000ef jal ra,8000e980 <_Z13GetWriteSoundv> + 8000e740: 0005079b sext.w a5,a0 + 8000e744: 0007859b sext.w a1,a5 + 8000e748: 00f4d463 bge s1,a5,8000e750 <_Z12FCEUD_UpdatePhPii+0x220> + 8000e74c: 0004859b sext.w a1,s1 + 8000e750: 00090513 mv a0,s2 + 8000e754: 234000ef jal ra,8000e988 <_Z10WriteSoundPii> + 8000e758: e41ff06f j 8000e598 <_Z12FCEUD_UpdatePhPii+0x68> + +000000008000e75c <_Z18FCEUD_UTF8_fstreamPKcS0_>: + 8000e75c: fe010113 addi sp,sp,-32 + 8000e760: 00913423 sd s1,8(sp) + 8000e764: 00050493 mv s1,a0 + 8000e768: 03000513 li a0,48 + 8000e76c: 00113c23 sd ra,24(sp) + 8000e770: 00813823 sd s0,16(sp) + 8000e774: 01213023 sd s2,0(sp) + 8000e778: 00058913 mv s2,a1 + 8000e77c: 42d2b0ef jal ra,8003a3a8 + 8000e780: 00090613 mv a2,s2 + 8000e784: 00048593 mv a1,s1 + 8000e788: 00050413 mv s0,a0 + 8000e78c: 3d8000ef jal ra,8000eb64 <_ZN12EMUFILE_FILE4openEPKcS1_> + 8000e790: 01813083 ld ra,24(sp) + 8000e794: 00040513 mv a0,s0 + 8000e798: 01013403 ld s0,16(sp) + 8000e79c: 00813483 ld s1,8(sp) + 8000e7a0: 00013903 ld s2,0(sp) + 8000e7a4: 02010113 addi sp,sp,32 + 8000e7a8: 00008067 ret + +000000008000e7ac